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

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>20616</bug_id>
          
          <creation_ts>2008-09-03 00:55:23 -0700</creation_ts>
          <short_desc>Incorporate V8 benchmarks in testing</short_desc>
          <delta_ts>2008-09-04 11:09:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://code.google.com/apis/v8/run.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Sherlock">gsherloc</reporter>
          <assigned_to name="Cameron Zwarich (cpst)">zwarich</assigned_to>
          <cc>zwarich</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>89988</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Sherlock">gsherloc</who>
    <bug_when>2008-09-03 00:55:23 -0700</bug_when>
    <thetext>V8 has a benchmark suite that would be good to include in speed regression testing for JavaScript.  Looks like V8 beats squirrelfish by some margin, at least on Windows at the moment.  (It also beats squirrelfish on some of the Sunspider benchmarks too : http://kourge.net/node/122).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90125</commentid>
    <comment_count>1</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-09-04 01:03:35 -0700</bug_when>
    <thetext>I was thinking of making a SunSpider test suite from the V8 benchmarks so we can use the SunSpider driver, which gives more meaningful information.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90129</commentid>
    <comment_count>2</comment_count>
      <attachid>23159</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-09-04 01:40:51 -0700</bug_when>
    <thetext>Created attachment 23159
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90130</commentid>
    <comment_count>3</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-09-04 01:57:39 -0700</bug_when>
    <thetext>Here are results on my machine with r36082:

============================================
RESULTS (means and 95% confidence intervals)
--------------------------------------------
Total:             578.3ms +/- 0.6%
--------------------------------------------

  v8:              578.3ms +/- 0.6%
    crypto:        172.3ms +/- 0.5%
    deltablue:      22.6ms +/- 1.6%
    earley-boyer:   74.7ms +/- 0.5%
    raytrace:      300.0ms +/- 0.8%
    richards:        8.7ms +/- 4.0%

This is too wide of a spread, so Maciej and I agreed we should increase the number of iterations in some uniform way. His suggestion was to make them all take some fixed amount of time in V8, since the benchmarks were chosen to highlight V8&apos;s strengths. I&apos;ll do that later tonight or tomorrow, but I&apos;ll clear the review request for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90145</commentid>
    <comment_count>4</comment_count>
      <attachid>23165</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-09-04 04:24:29 -0700</bug_when>
    <thetext>Created attachment 23165
Revised proposed patch

I calibrated the benchmarks so that they all run in a roughly equal time with V8. Also, I did not make a separate subdirectory for the v8 benchmarks like the ubench benchmarks. Since there are no categories in the V8 benchmarks, the results look slightly stupid if they are in their own directory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90176</commentid>
    <comment_count>5</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-09-04 11:09:44 -0700</bug_when>
    <thetext>Landed in r36095.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23159</attachid>
            <date>2008-09-04 01:40:51 -0700</date>
            <delta_ts>2008-09-04 04:24:29 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>v8benchmarks.diff</filename>
            <type>text/plain</type>
            <size>399851</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IFN1blNwaWRlci9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU3VuU3BpZGVyL0NoYW5n
ZUxvZwkocmV2aXNpb24gMzYwODMpCisrKyBTdW5TcGlkZXIvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMDgtMDktMDQgIENhbWVyb24gWndhcmljaCAgPGN3endh
cmljaEB1d2F0ZXJsb28uY2E+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQnVnIDIwNjE2OiBJbmNvcnBvcmF0ZSBWOCBiZW5jaG1hcmtzIGluIHRlc3Rp
bmcKKyAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDYx
Nj4KKworICAgICAgICBUaGlzIGlzIGEgZmlyc3Qgc3RhYiBhdCBydW5uaW5nIHRoZSBWOCBiZW5j
aG1hcmtzIHdpdGhpbiBTdW5TcGlkZXIsCisgICAgICAgIHdpdGggdGhlIC0tdjggb3B0aW9uLiBU
aGlzIHJ1bnMgYSBzaW5nbGUgaXRlcmF0aW9uIG9mIGVhY2ggb2YgdGhlIHY4CisgICAgICAgIGJl
bmNobWFyaywgd2hpY2ggaXMgYSBiaXQgb2YgYSBwcm9ibGVtLCBzaW5jZSB0aGUgdGVzdHMgdmFy
eSB3aWxkbHkgaW4KKyAgICAgICAgdGhlaXIgcnVubmluZyB0aW1lLiBUaGUgJ3JpY2hhcmRzJyBi
ZW5jaG1hcmsgcnVucyBhdCBhYm91dCA4IG1zIG9uIGEKKyAgICAgICAgcmVjZW50IG1hY2hpbmUu
CisKKyAgICAgICAgKiBzdW5zcGlkZXI6CisgICAgICAgICogdGVzdHMvTElTVC1WODogQWRkZWQu
CisgICAgICAgICogdGVzdHMvdjgtY3J5cHRvLmpzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy92
OC1kZWx0YWJsdWUuanM6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3Y4LWVhcmxleS1ib3llci5q
czogQWRkZWQuCisgICAgICAgICogdGVzdHMvdjgtcmF5dHJhY2UuanM6IEFkZGVkLgorICAgICAg
ICAqIHRlc3RzL3Y4LXJpY2hhcmRzLmpzOiBBZGRlZC4KKwogMjAwOC0wOS0wMiAgQ2FtZXJvbiBa
d2FyaWNoICA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQu
CkluZGV4OiBTdW5TcGlkZXIvc3Vuc3BpZGVyCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFN1blNwaWRlci9zdW5z
cGlkZXIJKHJldmlzaW9uIDM2MDgyKQorKysgU3VuU3BpZGVyL3N1bnNwaWRlcgkod29ya2luZyBj
b3B5KQpAQCAtMzcsNiArMzcsNyBAQCBteSAkcnVuU2hhcmsgPSAwOwogbXkgJHJ1blNoYXJrMjAg
PSAwOwogbXkgJHJ1blNoYXJrQ2FjaGUgPSAwOwogbXkgJHViZW5jaCA9IDA7CitteSAkdjggPSAw
OwogbXkgJGpzU2hlbGxQYXRoOwogbXkgJHNldEJhc2VsaW5lID0gMDsKIG15ICR0ZXN0c1BhdHRl
cm47CkBAIC01NCw2ICs1NSw3IEBAIFVzYWdlOiAkcHJvZ3JhbU5hbWUgLS1zaGVsbD1bcGF0aF0g
W29wdGkKICAgLS1zaGFyazIwICAgICAgICAgTGlrZSAtLXNoYXJrLCBidXQgd2l0aCBhIDIwIG1p
Y3Jvc2Vjb25kIHNhbXBsaW5nIGludGVydmFsCiAgIC0tc2hhcmstY2FjaGUgICAgIExpa2UgLS1z
aGFyaywgYnV0IHBlcmZvcm1zIGEgTDIgY2FjaGUtbWlzcyBzYW1wbGUgaW5zdGVhZCBvZiB0aW1l
IHNhbXBsZQogICAtLXViZW5jaCAgICAgICAgICBVc2UgbWljcm9iZW5jaG1hcmsgc3VpdGUgaW5z
dGVhZCBvZiByZWd1bGFyIHRlc3RzICh0byBjaGVjayBmb3IgY29yZSBleGVjdXRpb24gcmVncmVz
c2lvbnMpCisgIC0tdjggICAgICAgICAgICAgIFVzZSB0aGUgVjggYmVuY2htYXJrIHN1aXRlLgog
RU9GCiAKIEdldE9wdGlvbnMoJ3J1bnM9aScgPT4gXCR0ZXN0UnVucywKQEAgLTYzLDYgKzY1LDcg
QEAgR2V0T3B0aW9ucygncnVucz1pJyA9PiBcJHRlc3RSdW5zLAogICAgICAgICAgICAnc2hhcmsy
MCcgPT4gXCRydW5TaGFyazIwLAogICAgICAgICAgICAnc2hhcmstY2FjaGUnID0+IFwkcnVuU2hh
cmtDYWNoZSwKICAgICAgICAgICAgJ3ViZW5jaCcgPT4gXCR1YmVuY2gsCisgICAgICAgICAgICd2
OCcgPT4gXCR2OCwKICAgICAgICAgICAgJ3Rlc3RzPXMnID0+IFwkdGVzdHNQYXR0ZXJuLAogICAg
ICAgICAgICAnaGVscCcgPT4gXCRzaG93SGVscCk7CiAKQEAgLTExMSw2ICsxMTQsNyBAQCBzdWIg
bG9hZFRlc3RzTGlzdCgpCiB7CiAgICAgbXkgJHRlc3RsaXN0ID0gIkxJU1QiOwogICAgICR0ZXN0
bGlzdCA9ICJMSVNULVVCRU5DSCIgaWYgKCR1YmVuY2gpOworICAgICR0ZXN0bGlzdCA9ICJMSVNU
LVY4IiBpZiAoJHY4KTsKIAogICAgIG9wZW4gVEVTVExJU1QsICI8IiwgInRlc3RzLyR7dGVzdGxp
c3R9IiBvciBkaWUgIkNhbid0IGZpbmQgLi90ZXN0cy9MSVNUIjsKICAgICB3aGlsZSAoPFRFU1RM
SVNUPikgewpJbmRleDogU3VuU3BpZGVyL3Rlc3RzL0xJU1QtVjgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU3Vu
U3BpZGVyL3Rlc3RzL0xJU1QtVjgJKHJldmlzaW9uIDApCisrKyBTdW5TcGlkZXIvdGVzdHMvTElT
VC1WOAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1IEBACit2OC1jcnlwdG8KK3Y4LWRlbHRhYmx1
ZQordjgtZWFybGV5LWJveWVyCit2OC1yYXl0cmFjZQordjgtcmljaGFyZHMKSW5kZXg6IFN1blNw
aWRlci90ZXN0cy92OC1jcnlwdG8uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU3VuU3BpZGVyL3Rlc3RzL3Y4
LWNyeXB0by5qcwkocmV2aXNpb24gMCkKKysrIFN1blNwaWRlci90ZXN0cy92OC1jcnlwdG8uanMJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTY4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAw
My0yMDA1ICBUb20gV3UKKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lv
biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu
aW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0
aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3
aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUg
cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1
dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0
bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv
IGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICog
VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hh
bGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMg
b2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMtSVMi
IEFORCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUywgSU1QTElFRCBP
UiBPVEhFUldJU0UsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIEFOWQorICogV0FSUkFO
VFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LgorICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRPTSBXVSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVD
SUFMLCBJTkNJREVOVEFMLAorICogSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9G
IEFOWSBLSU5ELCBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSCisgKiBSRVNVTFRJTkcgRlJPTSBM
T1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIE9SIE5PVCBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgREFNQUdFLCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQ
RVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICoKKyAqIEluIGFkZGl0aW9uLCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbiBhcHBsaWVzOgorICoKKyAqIEFsbCByZWRpc3RyaWJ1dGlvbnMgbXVz
dCByZXRhaW4gYW4gaW50YWN0IGNvcHkgb2YgdGhpcyBjb3B5cmlnaHQgbm90aWNlCisgKiBhbmQg
ZGlzY2xhaW1lci4KKyAqLworCisvLyBCYXNpYyBKYXZhU2NyaXB0IEJOIGxpYnJhcnkgLSBzdWJz
ZXQgdXNlZnVsIGZvciBSU0EgZW5jcnlwdGlvbi4KKworLy8gQml0cyBwZXIgZGlnaXQKK3ZhciBk
Yml0czsKK3ZhciBCSV9EQjsKK3ZhciBCSV9ETTsKK3ZhciBCSV9EVjsKKwordmFyIEJJX0ZQOwor
dmFyIEJJX0ZWOwordmFyIEJJX0YxOwordmFyIEJJX0YyOworCisvLyBKYXZhU2NyaXB0IGVuZ2lu
ZSBhbmFseXNpcwordmFyIGNhbmFyeSA9IDB4ZGVhZGJlZWZjYWZlOwordmFyIGpfbG0gPSAoKGNh
bmFyeSYweGZmZmZmZik9PTB4ZWZjYWZlKTsKKworLy8gKHB1YmxpYykgQ29uc3RydWN0b3IKK2Z1
bmN0aW9uIEJpZ0ludGVnZXIoYSxiLGMpIHsKKyAgdGhpcy5hcnJheSA9IG5ldyBBcnJheSgpOwor
ICBpZihhICE9IG51bGwpCisgICAgaWYoIm51bWJlciIgPT0gdHlwZW9mIGEpIHRoaXMuZnJvbU51
bWJlcihhLGIsYyk7CisgICAgZWxzZSBpZihiID09IG51bGwgJiYgInN0cmluZyIgIT0gdHlwZW9m
IGEpIHRoaXMuZnJvbVN0cmluZyhhLDI1Nik7CisgICAgZWxzZSB0aGlzLmZyb21TdHJpbmcoYSxi
KTsKK30KKworLy8gcmV0dXJuIG5ldywgdW5zZXQgQmlnSW50ZWdlcgorZnVuY3Rpb24gbmJpKCkg
eyByZXR1cm4gbmV3IEJpZ0ludGVnZXIobnVsbCk7IH0KKworLy8gYW06IENvbXB1dGUgd19qICs9
ICh4KnRoaXNfaSksIHByb3BhZ2F0ZSBjYXJyaWVzLAorLy8gYyBpcyBpbml0aWFsIGNhcnJ5LCBy
ZXR1cm5zIGZpbmFsIGNhcnJ5LgorLy8gYyA8IDMqZHZhbHVlLCB4IDwgMipkdmFsdWUsIHRoaXNf
aSA8IGR2YWx1ZQorLy8gV2UgbmVlZCB0byBzZWxlY3QgdGhlIGZhc3Rlc3Qgb25lIHRoYXQgd29y
a3MgaW4gdGhpcyBlbnZpcm9ubWVudC4KKworLy8gYW0xOiB1c2UgYSBzaW5nbGUgbXVsdCBhbmQg
ZGl2aWRlIHRvIGdldCB0aGUgaGlnaCBiaXRzLAorLy8gbWF4IGRpZ2l0IGJpdHMgc2hvdWxkIGJl
IDI2IGJlY2F1c2UKKy8vIG1heCBpbnRlcm5hbCB2YWx1ZSA9IDIqZHZhbHVlXjItMipkdmFsdWUg
KDwgMl41MykKK2Z1bmN0aW9uIGFtMShpLHgsdyxqLGMsbikgeworICB2YXIgdGhpc19hcnJheSA9
IHRoaXMuYXJyYXk7CisgIHZhciB3X2FycmF5ICAgID0gdy5hcnJheTsKKyAgd2hpbGUoLS1uID49
IDApIHsKKyAgICB2YXIgdiA9IHgqdGhpc19hcnJheVtpKytdK3dfYXJyYXlbal0rYzsKKyAgICBj
ID0gTWF0aC5mbG9vcih2LzB4NDAwMDAwMCk7CisgICAgd19hcnJheVtqKytdID0gdiYweDNmZmZm
ZmY7CisgIH0KKyAgcmV0dXJuIGM7Cit9CisKKy8vIGFtMiBhdm9pZHMgYSBiaWcgbXVsdC1hbmQt
ZXh0cmFjdCBjb21wbGV0ZWx5LgorLy8gTWF4IGRpZ2l0IGJpdHMgc2hvdWxkIGJlIDw9IDMwIGJl
Y2F1c2Ugd2UgZG8gYml0d2lzZSBvcHMKKy8vIG9uIHZhbHVlcyB1cCB0byAyKmhkdmFsdWVeMi1o
ZHZhbHVlLTEgKDwgMl4zMSkKK2Z1bmN0aW9uIGFtMihpLHgsdyxqLGMsbikgeworICB2YXIgdGhp
c19hcnJheSA9IHRoaXMuYXJyYXk7CisgIHZhciB3X2FycmF5ICAgID0gdy5hcnJheTsKKyAgdmFy
IHhsID0geCYweDdmZmYsIHhoID0geD4+MTU7CisgIHdoaWxlKC0tbiA+PSAwKSB7CisgICAgdmFy
IGwgPSB0aGlzX2FycmF5W2ldJjB4N2ZmZjsKKyAgICB2YXIgaCA9IHRoaXNfYXJyYXlbaSsrXT4+
MTU7CisgICAgdmFyIG0gPSB4aCpsK2gqeGw7CisgICAgbCA9IHhsKmwrKChtJjB4N2ZmZik8PDE1
KSt3X2FycmF5W2pdKyhjJjB4M2ZmZmZmZmYpOworICAgIGMgPSAobD4+PjMwKSsobT4+PjE1KSt4
aCpoKyhjPj4+MzApOworICAgIHdfYXJyYXlbaisrXSA9IGwmMHgzZmZmZmZmZjsKKyAgfQorICBy
ZXR1cm4gYzsKK30KKworLy8gQWx0ZXJuYXRlbHksIHNldCBtYXggZGlnaXQgYml0cyB0byAyOCBz
aW5jZSBzb21lCisvLyBicm93c2VycyBzbG93IGRvd24gd2hlbiBkZWFsaW5nIHdpdGggMzItYml0
IG51bWJlcnMuCitmdW5jdGlvbiBhbTMoaSx4LHcsaixjLG4pIHsKKyAgdmFyIHRoaXNfYXJyYXkg
PSB0aGlzLmFycmF5OworICB2YXIgd19hcnJheSAgICA9IHcuYXJyYXk7CisKKyAgdmFyIHhsID0g
eCYweDNmZmYsIHhoID0geD4+MTQ7CisgIHdoaWxlKC0tbiA+PSAwKSB7CisgICAgdmFyIGwgPSB0
aGlzX2FycmF5W2ldJjB4M2ZmZjsKKyAgICB2YXIgaCA9IHRoaXNfYXJyYXlbaSsrXT4+MTQ7Cisg
ICAgdmFyIG0gPSB4aCpsK2gqeGw7CisgICAgbCA9IHhsKmwrKChtJjB4M2ZmZik8PDE0KSt3X2Fy
cmF5W2pdK2M7CisgICAgYyA9IChsPj4yOCkrKG0+PjE0KSt4aCpoOworICAgIHdfYXJyYXlbaisr
XSA9IGwmMHhmZmZmZmZmOworICB9CisgIHJldHVybiBjOworfQorCisvLyBUaGlzIGlzIHRhaWxv
cmVkIHRvIFZNcyB3aXRoIDItYml0IHRhZ2dpbmcuIEl0IG1ha2VzIHN1cmUKKy8vIHRoYXQgYWxs
IHRoZSBjb21wdXRhdGlvbnMgc3RheSB3aXRoaW4gdGhlIDI5IGJpdHMgYXZhaWxhYmxlLgorZnVu
Y3Rpb24gYW00KGkseCx3LGosYyxuKSB7CisgIHZhciB0aGlzX2FycmF5ID0gdGhpcy5hcnJheTsK
KyAgdmFyIHdfYXJyYXkgICAgPSB3LmFycmF5OworCisgIHZhciB4bCA9IHgmMHgxZmZmLCB4aCA9
IHg+PjEzOworICB3aGlsZSgtLW4gPj0gMCkgeworICAgIHZhciBsID0gdGhpc19hcnJheVtpXSYw
eDFmZmY7CisgICAgdmFyIGggPSB0aGlzX2FycmF5W2krK10+PjEzOworICAgIHZhciBtID0geGgq
bCtoKnhsOworICAgIGwgPSB4bCpsKygobSYweDFmZmYpPDwxMykrd19hcnJheVtqXStjOworICAg
IGMgPSAobD4+MjYpKyhtPj4xMykreGgqaDsKKyAgICB3X2FycmF5W2orK10gPSBsJjB4M2ZmZmZm
ZjsKKyAgfQorICByZXR1cm4gYzsKK30KKworLy8gYW0zLzI4IGlzIGJlc3QgZm9yIFNNLCBSaGlu
bywgYnV0IGFtNC8yNiBpcyBiZXN0IGZvciB2OC4KKy8vIEtlc3RyZWwgKE9wZXJhIDkuNSkgZ2V0
cyBpdHMgYmVzdCByZXN1bHQgd2l0aCBhbTQvMjYuCisvLyBJRTcgZG9lcyA5JSBiZXR0ZXIgd2l0
aCBhbTMvMjggdGhhbiB3aXRoIGFtNC8yNi4KKy8vIEZpcmVmb3ggKFNNKSBnZXRzIDEwJSBmYXN0
ZXIgd2l0aCBhbTMvMjggdGhhbiB3aXRoIGFtNC8yNi4KKworc2V0dXBFbmdpbmUgPSBmdW5jdGlv
bihmbiwgYml0cykgeworICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5hbSA9IGZuOworICBkYml0cyA9
IGJpdHM7CisKKyAgQklfREIgPSBkYml0czsKKyAgQklfRE0gPSAoKDE8PGRiaXRzKS0xKTsKKyAg
QklfRFYgPSAoMTw8ZGJpdHMpOworCisgIEJJX0ZQID0gNTI7CisgIEJJX0ZWID0gTWF0aC5wb3co
MixCSV9GUCk7CisgIEJJX0YxID0gQklfRlAtZGJpdHM7CisgIEJJX0YyID0gMipkYml0cy1CSV9G
UDsKK30KKworCisvLyBEaWdpdCBjb252ZXJzaW9ucwordmFyIEJJX1JNID0gIjAxMjM0NTY3ODlh
YmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7Cit2YXIgQklfUkMgPSBuZXcgQXJyYXkoKTsKK3Zh
ciBycix2djsKK3JyID0gIjAiLmNoYXJDb2RlQXQoMCk7Citmb3IodnYgPSAwOyB2diA8PSA5OyAr
K3Z2KSBCSV9SQ1tycisrXSA9IHZ2OworcnIgPSAiYSIuY2hhckNvZGVBdCgwKTsKK2Zvcih2diA9
IDEwOyB2diA8IDM2OyArK3Z2KSBCSV9SQ1tycisrXSA9IHZ2OworcnIgPSAiQSIuY2hhckNvZGVB
dCgwKTsKK2Zvcih2diA9IDEwOyB2diA8IDM2OyArK3Z2KSBCSV9SQ1tycisrXSA9IHZ2OworCitm
dW5jdGlvbiBpbnQyY2hhcihuKSB7IHJldHVybiBCSV9STS5jaGFyQXQobik7IH0KK2Z1bmN0aW9u
IGludEF0KHMsaSkgeworICB2YXIgYyA9IEJJX1JDW3MuY2hhckNvZGVBdChpKV07CisgIHJldHVy
biAoYz09bnVsbCk/LTE6YzsKK30KKworLy8gKHByb3RlY3RlZCkgY29weSB0aGlzIHRvIHIKK2Z1
bmN0aW9uIGJucENvcHlUbyhyKSB7CisgIHZhciB0aGlzX2FycmF5ID0gdGhpcy5hcnJheTsKKyAg
dmFyIHJfYXJyYXkgICAgPSByLmFycmF5OworCisgIGZvcih2YXIgaSA9IHRoaXMudC0xOyBpID49
IDA7IC0taSkgcl9hcnJheVtpXSA9IHRoaXNfYXJyYXlbaV07CisgIHIudCA9IHRoaXMudDsKKyAg
ci5zID0gdGhpcy5zOworfQorCisvLyAocHJvdGVjdGVkKSBzZXQgZnJvbSBpbnRlZ2VyIHZhbHVl
IHgsIC1EViA8PSB4IDwgRFYKK2Z1bmN0aW9uIGJucEZyb21JbnQoeCkgeworICB2YXIgdGhpc19h
cnJheSA9IHRoaXMuYXJyYXk7CisgIHRoaXMudCA9IDE7CisgIHRoaXMucyA9ICh4PDApPy0xOjA7
CisgIGlmKHggPiAwKSB0aGlzX2FycmF5WzBdID0geDsKKyAgZWxzZSBpZih4IDwgLTEpIHRoaXNf
YXJyYXlbMF0gPSB4K0RWOworICBlbHNlIHRoaXMudCA9IDA7Cit9CisKKy8vIHJldHVybiBiaWdp
bnQgaW5pdGlhbGl6ZWQgdG8gdmFsdWUKK2Z1bmN0aW9uIG5idihpKSB7IHZhciByID0gbmJpKCk7
IHIuZnJvbUludChpKTsgcmV0dXJuIHI7IH0KKworLy8gKHByb3RlY3RlZCkgc2V0IGZyb20gc3Ry
aW5nIGFuZCByYWRpeAorZnVuY3Rpb24gYm5wRnJvbVN0cmluZyhzLGIpIHsKKyAgdmFyIHRoaXNf
YXJyYXkgPSB0aGlzLmFycmF5OworICB2YXIgazsKKyAgaWYoYiA9PSAxNikgayA9IDQ7CisgIGVs
c2UgaWYoYiA9PSA4KSBrID0gMzsKKyAgZWxzZSBpZihiID09IDI1NikgayA9IDg7IC8vIGJ5dGUg
YXJyYXkKKyAgZWxzZSBpZihiID09IDIpIGsgPSAxOworICBlbHNlIGlmKGIgPT0gMzIpIGsgPSA1
OworICBlbHNlIGlmKGIgPT0gNCkgayA9IDI7CisgIGVsc2UgeyB0aGlzLmZyb21SYWRpeChzLGIp
OyByZXR1cm47IH0KKyAgdGhpcy50ID0gMDsKKyAgdGhpcy5zID0gMDsKKyAgdmFyIGkgPSBzLmxl
bmd0aCwgbWkgPSBmYWxzZSwgc2ggPSAwOworICB3aGlsZSgtLWkgPj0gMCkgeworICAgIHZhciB4
ID0gKGs9PTgpP3NbaV0mMHhmZjppbnRBdChzLGkpOworICAgIGlmKHggPCAwKSB7CisgICAgICBp
ZihzLmNoYXJBdChpKSA9PSAiLSIpIG1pID0gdHJ1ZTsKKyAgICAgIGNvbnRpbnVlOworICAgIH0K
KyAgICBtaSA9IGZhbHNlOworICAgIGlmKHNoID09IDApCisgICAgICB0aGlzX2FycmF5W3RoaXMu
dCsrXSA9IHg7CisgICAgZWxzZSBpZihzaCtrID4gQklfREIpIHsKKyAgICAgIHRoaXNfYXJyYXlb
dGhpcy50LTFdIHw9ICh4JigoMTw8KEJJX0RCLXNoKSktMSkpPDxzaDsKKyAgICAgIHRoaXNfYXJy
YXlbdGhpcy50KytdID0gKHg+PihCSV9EQi1zaCkpOworICAgIH0KKyAgICBlbHNlCisgICAgICB0
aGlzX2FycmF5W3RoaXMudC0xXSB8PSB4PDxzaDsKKyAgICBzaCArPSBrOworICAgIGlmKHNoID49
IEJJX0RCKSBzaCAtPSBCSV9EQjsKKyAgfQorICBpZihrID09IDggJiYgKHNbMF0mMHg4MCkgIT0g
MCkgeworICAgIHRoaXMucyA9IC0xOworICAgIGlmKHNoID4gMCkgdGhpc19hcnJheVt0aGlzLnQt
MV0gfD0gKCgxPDwoQklfREItc2gpKS0xKTw8c2g7CisgIH0KKyAgdGhpcy5jbGFtcCgpOworICBp
ZihtaSkgQmlnSW50ZWdlci5aRVJPLnN1YlRvKHRoaXMsdGhpcyk7Cit9CisKKy8vIChwcm90ZWN0
ZWQpIGNsYW1wIG9mZiBleGNlc3MgaGlnaCB3b3JkcworZnVuY3Rpb24gYm5wQ2xhbXAoKSB7Cisg
IHZhciB0aGlzX2FycmF5ID0gdGhpcy5hcnJheTsKKyAgdmFyIGMgPSB0aGlzLnMmQklfRE07Cisg
IHdoaWxlKHRoaXMudCA+IDAgJiYgdGhpc19hcnJheVt0aGlzLnQtMV0gPT0gYykgLS10aGlzLnQ7
Cit9CisKKy8vIChwdWJsaWMpIHJldHVybiBzdHJpbmcgcmVwcmVzZW50YXRpb24gaW4gZ2l2ZW4g
cmFkaXgKK2Z1bmN0aW9uIGJuVG9TdHJpbmcoYikgeworICB2YXIgdGhpc19hcnJheSA9IHRoaXMu
YXJyYXk7CisgIGlmKHRoaXMucyA8IDApIHJldHVybiAiLSIrdGhpcy5uZWdhdGUoKS50b1N0cmlu
ZyhiKTsKKyAgdmFyIGs7CisgIGlmKGIgPT0gMTYpIGsgPSA0OworICBlbHNlIGlmKGIgPT0gOCkg
ayA9IDM7CisgIGVsc2UgaWYoYiA9PSAyKSBrID0gMTsKKyAgZWxzZSBpZihiID09IDMyKSBrID0g
NTsKKyAgZWxzZSBpZihiID09IDQpIGsgPSAyOworICBlbHNlIHJldHVybiB0aGlzLnRvUmFkaXgo
Yik7CisgIHZhciBrbSA9ICgxPDxrKS0xLCBkLCBtID0gZmFsc2UsIHIgPSAiIiwgaSA9IHRoaXMu
dDsKKyAgdmFyIHAgPSBCSV9EQi0oaSpCSV9EQiklazsKKyAgaWYoaS0tID4gMCkgeworICAgIGlm
KHAgPCBCSV9EQiAmJiAoZCA9IHRoaXNfYXJyYXlbaV0+PnApID4gMCkgeyBtID0gdHJ1ZTsgciA9
IGludDJjaGFyKGQpOyB9CisgICAgd2hpbGUoaSA+PSAwKSB7CisgICAgICBpZihwIDwgaykgewor
ICAgICAgICBkID0gKHRoaXNfYXJyYXlbaV0mKCgxPDxwKS0xKSk8PChrLXApOworICAgICAgICBk
IHw9IHRoaXNfYXJyYXlbLS1pXT4+KHArPUJJX0RCLWspOworICAgICAgfQorICAgICAgZWxzZSB7
CisgICAgICAgIGQgPSAodGhpc19hcnJheVtpXT4+KHAtPWspKSZrbTsKKyAgICAgICAgaWYocCA8
PSAwKSB7IHAgKz0gQklfREI7IC0taTsgfQorICAgICAgfQorICAgICAgaWYoZCA+IDApIG0gPSB0
cnVlOworICAgICAgaWYobSkgciArPSBpbnQyY2hhcihkKTsKKyAgICB9CisgIH0KKyAgcmV0dXJu
IG0/cjoiMCI7Cit9CisKKy8vIChwdWJsaWMpIC10aGlzCitmdW5jdGlvbiBibk5lZ2F0ZSgpIHsg
dmFyIHIgPSBuYmkoKTsgQmlnSW50ZWdlci5aRVJPLnN1YlRvKHRoaXMscik7IHJldHVybiByOyB9
CisKKy8vIChwdWJsaWMpIHx0aGlzfAorZnVuY3Rpb24gYm5BYnMoKSB7IHJldHVybiAodGhpcy5z
PDApP3RoaXMubmVnYXRlKCk6dGhpczsgfQorCisvLyAocHVibGljKSByZXR1cm4gKyBpZiB0aGlz
ID4gYSwgLSBpZiB0aGlzIDwgYSwgMCBpZiBlcXVhbAorZnVuY3Rpb24gYm5Db21wYXJlVG8oYSkg
eworICB2YXIgdGhpc19hcnJheSA9IHRoaXMuYXJyYXk7CisgIHZhciBhX2FycmF5ID0gYS5hcnJh
eTsKKworICB2YXIgciA9IHRoaXMucy1hLnM7CisgIGlmKHIgIT0gMCkgcmV0dXJuIHI7CisgIHZh
ciBpID0gdGhpcy50OworICByID0gaS1hLnQ7CisgIGlmKHIgIT0gMCkgcmV0dXJuIHI7CisgIHdo
aWxlKC0taSA+PSAwKSBpZigocj10aGlzX2FycmF5W2ldLWFfYXJyYXlbaV0pICE9IDApIHJldHVy
biByOworICByZXR1cm4gMDsKK30KKworLy8gcmV0dXJucyBiaXQgbGVuZ3RoIG9mIHRoZSBpbnRl
Z2VyIHgKK2Z1bmN0aW9uIG5iaXRzKHgpIHsKKyAgdmFyIHIgPSAxLCB0OworICBpZigodD14Pj4+
MTYpICE9IDApIHsgeCA9IHQ7IHIgKz0gMTY7IH0KKyAgaWYoKHQ9eD4+OCkgIT0gMCkgeyB4ID0g
dDsgciArPSA4OyB9CisgIGlmKCh0PXg+PjQpICE9IDApIHsgeCA9IHQ7IHIgKz0gNDsgfQorICBp
ZigodD14Pj4yKSAhPSAwKSB7IHggPSB0OyByICs9IDI7IH0KKyAgaWYoKHQ9eD4+MSkgIT0gMCkg
eyB4ID0gdDsgciArPSAxOyB9CisgIHJldHVybiByOworfQorCisvLyAocHVibGljKSByZXR1cm4g
dGhlIG51bWJlciBvZiBiaXRzIGluICJ0aGlzIgorZnVuY3Rpb24gYm5CaXRMZW5ndGgoKSB7Cisg
IHZhciB0aGlzX2FycmF5ID0gdGhpcy5hcnJheTsKKyAgaWYodGhpcy50IDw9IDApIHJldHVybiAw
OworICByZXR1cm4gQklfREIqKHRoaXMudC0xKStuYml0cyh0aGlzX2FycmF5W3RoaXMudC0xXV4o
dGhpcy5zJkJJX0RNKSk7Cit9CisKKy8vIChwcm90ZWN0ZWQpIHIgPSB0aGlzIDw8IG4qREIKK2Z1
bmN0aW9uIGJucERMU2hpZnRUbyhuLHIpIHsKKyAgdmFyIHRoaXNfYXJyYXkgPSB0aGlzLmFycmF5
OworICB2YXIgcl9hcnJheSA9IHIuYXJyYXk7CisgIHZhciBpOworICBmb3IoaSA9IHRoaXMudC0x
OyBpID49IDA7IC0taSkgcl9hcnJheVtpK25dID0gdGhpc19hcnJheVtpXTsKKyAgZm9yKGkgPSBu
LTE7IGkgPj0gMDsgLS1pKSByX2FycmF5W2ldID0gMDsKKyAgci50ID0gdGhpcy50K247CisgIHIu
cyA9IHRoaXMuczsKK30KKworLy8gKHByb3RlY3RlZCkgciA9IHRoaXMgPj4gbipEQgorZnVuY3Rp
b24gYm5wRFJTaGlmdFRvKG4scikgeworICB2YXIgdGhpc19hcnJheSA9IHRoaXMuYXJyYXk7Cisg
IHZhciByX2FycmF5ID0gci5hcnJheTsKKyAgZm9yKHZhciBpID0gbjsgaSA8IHRoaXMudDsgKytp
KSByX2FycmF5W2ktbl0gPSB0aGlzX2FycmF5W2ldOworICByLnQgPSBNYXRoLm1heCh0aGlzLnQt
biwwKTsKKyAgci5zID0gdGhpcy5zOworfQorCisvLyAocHJvdGVjdGVkKSByID0gdGhpcyA8PCBu
CitmdW5jdGlvbiBibnBMU2hpZnRUbyhuLHIpIHsKKyAgdmFyIHRoaXNfYXJyYXkgPSB0aGlzLmFy
cmF5OworICB2YXIgcl9hcnJheSA9IHIuYXJyYXk7CisgIHZhciBicyA9IG4lQklfREI7CisgIHZh
ciBjYnMgPSBCSV9EQi1iczsKKyAgdmFyIGJtID0gKDE8PGNicyktMTsKKyAgdmFyIGRzID0gTWF0
aC5mbG9vcihuL0JJX0RCKSwgYyA9ICh0aGlzLnM8PGJzKSZCSV9ETSwgaTsKKyAgZm9yKGkgPSB0
aGlzLnQtMTsgaSA+PSAwOyAtLWkpIHsKKyAgICByX2FycmF5W2krZHMrMV0gPSAodGhpc19hcnJh
eVtpXT4+Y2JzKXxjOworICAgIGMgPSAodGhpc19hcnJheVtpXSZibSk8PGJzOworICB9CisgIGZv
cihpID0gZHMtMTsgaSA+PSAwOyAtLWkpIHJfYXJyYXlbaV0gPSAwOworICByX2FycmF5W2RzXSA9
IGM7CisgIHIudCA9IHRoaXMudCtkcysxOworICByLnMgPSB0aGlzLnM7CisgIHIuY2xhbXAoKTsK
K30KKworLy8gKHByb3RlY3RlZCkgciA9IHRoaXMgPj4gbgorZnVuY3Rpb24gYm5wUlNoaWZ0VG8o
bixyKSB7CisgIHZhciB0aGlzX2FycmF5ID0gdGhpcy5hcnJheTsKKyAgdmFyIHJfYXJyYXkgPSBy
LmFycmF5OworICByLnMgPSB0aGlzLnM7CisgIHZhciBkcyA9IE1hdGguZmxvb3Iobi9CSV9EQik7
CisgIGlmKGRzID49IHRoaXMudCkgeyByLnQgPSAwOyByZXR1cm47IH0KKyAgdmFyIGJzID0gbiVC
SV9EQjsKKyAgdmFyIGNicyA9IEJJX0RCLWJzOworICB2YXIgYm0gPSAoMTw8YnMpLTE7CisgIHJf
YXJyYXlbMF0gPSB0aGlzX2FycmF5W2RzXT4+YnM7CisgIGZvcih2YXIgaSA9IGRzKzE7IGkgPCB0
aGlzLnQ7ICsraSkgeworICAgIHJfYXJyYXlbaS1kcy0xXSB8PSAodGhpc19hcnJheVtpXSZibSk8
PGNiczsKKyAgICByX2FycmF5W2ktZHNdID0gdGhpc19hcnJheVtpXT4+YnM7CisgIH0KKyAgaWYo
YnMgPiAwKSByX2FycmF5W3RoaXMudC1kcy0xXSB8PSAodGhpcy5zJmJtKTw8Y2JzOworICByLnQg
PSB0aGlzLnQtZHM7CisgIHIuY2xhbXAoKTsKK30KKworLy8gKHByb3RlY3RlZCkgciA9IHRoaXMg
LSBhCitmdW5jdGlvbiBibnBTdWJUbyhhLHIpIHsKKyAgdmFyIHRoaXNfYXJyYXkgPSB0aGlzLmFy
cmF5OworICB2YXIgcl9hcnJheSA9IHIuYXJyYXk7CisgIHZhciBhX2FycmF5ID0gYS5hcnJheTsK
KyAgdmFyIGkgPSAwLCBjID0gMCwgbSA9IE1hdGgubWluKGEudCx0aGlzLnQpOworICB3aGlsZShp
IDwgbSkgeworICAgIGMgKz0gdGhpc19hcnJheVtpXS1hX2FycmF5W2ldOworICAgIHJfYXJyYXlb
aSsrXSA9IGMmQklfRE07CisgICAgYyA+Pj0gQklfREI7CisgIH0KKyAgaWYoYS50IDwgdGhpcy50
KSB7CisgICAgYyAtPSBhLnM7CisgICAgd2hpbGUoaSA8IHRoaXMudCkgeworICAgICAgYyArPSB0
aGlzX2FycmF5W2ldOworICAgICAgcl9hcnJheVtpKytdID0gYyZCSV9ETTsKKyAgICAgIGMgPj49
IEJJX0RCOworICAgIH0KKyAgICBjICs9IHRoaXMuczsKKyAgfQorICBlbHNlIHsKKyAgICBjICs9
IHRoaXMuczsKKyAgICB3aGlsZShpIDwgYS50KSB7CisgICAgICBjIC09IGFfYXJyYXlbaV07Cisg
ICAgICByX2FycmF5W2krK10gPSBjJkJJX0RNOworICAgICAgYyA+Pj0gQklfREI7CisgICAgfQor
ICAgIGMgLT0gYS5zOworICB9CisgIHIucyA9IChjPDApPy0xOjA7CisgIGlmKGMgPCAtMSkgcl9h
cnJheVtpKytdID0gQklfRFYrYzsKKyAgZWxzZSBpZihjID4gMCkgcl9hcnJheVtpKytdID0gYzsK
KyAgci50ID0gaTsKKyAgci5jbGFtcCgpOworfQorCisvLyAocHJvdGVjdGVkKSByID0gdGhpcyAq
IGEsIHIgIT0gdGhpcyxhIChIQUMgMTQuMTIpCisvLyAidGhpcyIgc2hvdWxkIGJlIHRoZSBsYXJn
ZXIgb25lIGlmIGFwcHJvcHJpYXRlLgorZnVuY3Rpb24gYm5wTXVsdGlwbHlUbyhhLHIpIHsKKyAg
dmFyIHRoaXNfYXJyYXkgPSB0aGlzLmFycmF5OworICB2YXIgcl9hcnJheSA9IHIuYXJyYXk7Cisg
IHZhciB4ID0gdGhpcy5hYnMoKSwgeSA9IGEuYWJzKCk7CisgIHZhciB5X2FycmF5ID0geS5hcnJh
eTsKKworICB2YXIgaSA9IHgudDsKKyAgci50ID0gaSt5LnQ7CisgIHdoaWxlKC0taSA+PSAwKSBy
X2FycmF5W2ldID0gMDsKKyAgZm9yKGkgPSAwOyBpIDwgeS50OyArK2kpIHJfYXJyYXlbaSt4LnRd
ID0geC5hbSgwLHlfYXJyYXlbaV0scixpLDAseC50KTsKKyAgci5zID0gMDsKKyAgci5jbGFtcCgp
OworICBpZih0aGlzLnMgIT0gYS5zKSBCaWdJbnRlZ2VyLlpFUk8uc3ViVG8ocixyKTsKK30KKwor
Ly8gKHByb3RlY3RlZCkgciA9IHRoaXNeMiwgciAhPSB0aGlzIChIQUMgMTQuMTYpCitmdW5jdGlv
biBibnBTcXVhcmVUbyhyKSB7CisgIHZhciB4ID0gdGhpcy5hYnMoKTsKKyAgdmFyIHhfYXJyYXkg
PSB4LmFycmF5OworICB2YXIgcl9hcnJheSA9IHIuYXJyYXk7CisKKyAgdmFyIGkgPSByLnQgPSAy
KngudDsKKyAgd2hpbGUoLS1pID49IDApIHJfYXJyYXlbaV0gPSAwOworICBmb3IoaSA9IDA7IGkg
PCB4LnQtMTsgKytpKSB7CisgICAgdmFyIGMgPSB4LmFtKGkseF9hcnJheVtpXSxyLDIqaSwwLDEp
OworICAgIGlmKChyX2FycmF5W2kreC50XSs9eC5hbShpKzEsMip4X2FycmF5W2ldLHIsMippKzEs
Yyx4LnQtaS0xKSkgPj0gQklfRFYpIHsKKyAgICAgIHJfYXJyYXlbaSt4LnRdIC09IEJJX0RWOwor
ICAgICAgcl9hcnJheVtpK3gudCsxXSA9IDE7CisgICAgfQorICB9CisgIGlmKHIudCA+IDApIHJf
YXJyYXlbci50LTFdICs9IHguYW0oaSx4X2FycmF5W2ldLHIsMippLDAsMSk7CisgIHIucyA9IDA7
CisgIHIuY2xhbXAoKTsKK30KKworLy8gKHByb3RlY3RlZCkgZGl2aWRlIHRoaXMgYnkgbSwgcXVv
dGllbnQgYW5kIHJlbWFpbmRlciB0byBxLCByIChIQUMgMTQuMjApCisvLyByICE9IHEsIHRoaXMg
IT0gbS4gIHEgb3IgciBtYXkgYmUgbnVsbC4KK2Z1bmN0aW9uIGJucERpdlJlbVRvKG0scSxyKSB7
CisgIHZhciBwbSA9IG0uYWJzKCk7CisgIGlmKHBtLnQgPD0gMCkgcmV0dXJuOworICB2YXIgcHQg
PSB0aGlzLmFicygpOworICBpZihwdC50IDwgcG0udCkgeworICAgIGlmKHEgIT0gbnVsbCkgcS5m
cm9tSW50KDApOworICAgIGlmKHIgIT0gbnVsbCkgdGhpcy5jb3B5VG8ocik7CisgICAgcmV0dXJu
OworICB9CisgIGlmKHIgPT0gbnVsbCkgciA9IG5iaSgpOworICB2YXIgeSA9IG5iaSgpLCB0cyA9
IHRoaXMucywgbXMgPSBtLnM7CisgIHZhciBwbV9hcnJheSA9IHBtLmFycmF5OworICB2YXIgbnNo
ID0gQklfREItbmJpdHMocG1fYXJyYXlbcG0udC0xXSk7CS8vIG5vcm1hbGl6ZSBtb2R1bHVzCisg
IGlmKG5zaCA+IDApIHsgcG0ubFNoaWZ0VG8obnNoLHkpOyBwdC5sU2hpZnRUbyhuc2gscik7IH0K
KyAgZWxzZSB7IHBtLmNvcHlUbyh5KTsgcHQuY29weVRvKHIpOyB9CisgIHZhciB5cyA9IHkudDsK
KworICB2YXIgeV9hcnJheSA9IHkuYXJyYXk7CisgIHZhciB5MCA9IHlfYXJyYXlbeXMtMV07Cisg
IGlmKHkwID09IDApIHJldHVybjsKKyAgdmFyIHl0ID0geTAqKDE8PEJJX0YxKSsoKHlzPjEpP3lf
YXJyYXlbeXMtMl0+PkJJX0YyOjApOworICB2YXIgZDEgPSBCSV9GVi95dCwgZDIgPSAoMTw8Qklf
RjEpL3l0LCBlID0gMTw8QklfRjI7CisgIHZhciBpID0gci50LCBqID0gaS15cywgdCA9IChxPT1u
dWxsKT9uYmkoKTpxOworICB5LmRsU2hpZnRUbyhqLHQpOworCisgIHZhciByX2FycmF5ID0gci5h
cnJheTsKKyAgaWYoci5jb21wYXJlVG8odCkgPj0gMCkgeworICAgIHJfYXJyYXlbci50KytdID0g
MTsKKyAgICByLnN1YlRvKHQscik7CisgIH0KKyAgQmlnSW50ZWdlci5PTkUuZGxTaGlmdFRvKHlz
LHQpOworICB0LnN1YlRvKHkseSk7CS8vICJuZWdhdGl2ZSIgeSBzbyB3ZSBjYW4gcmVwbGFjZSBz
dWIgd2l0aCBhbSBsYXRlcgorICB3aGlsZSh5LnQgPCB5cykgeV9hcnJheVt5LnQrK10gPSAwOwor
ICB3aGlsZSgtLWogPj0gMCkgeworICAgIC8vIEVzdGltYXRlIHF1b3RpZW50IGRpZ2l0CisgICAg
dmFyIHFkID0gKHJfYXJyYXlbLS1pXT09eTApP0JJX0RNOk1hdGguZmxvb3Iocl9hcnJheVtpXSpk
MSsocl9hcnJheVtpLTFdK2UpKmQyKTsKKyAgICBpZigocl9hcnJheVtpXSs9eS5hbSgwLHFkLHIs
aiwwLHlzKSkgPCBxZCkgewkvLyBUcnkgaXQgb3V0CisgICAgICB5LmRsU2hpZnRUbyhqLHQpOwor
ICAgICAgci5zdWJUbyh0LHIpOworICAgICAgd2hpbGUocl9hcnJheVtpXSA8IC0tcWQpIHIuc3Vi
VG8odCxyKTsKKyAgICB9CisgIH0KKyAgaWYocSAhPSBudWxsKSB7CisgICAgci5kclNoaWZ0VG8o
eXMscSk7CisgICAgaWYodHMgIT0gbXMpIEJpZ0ludGVnZXIuWkVSTy5zdWJUbyhxLHEpOworICB9
CisgIHIudCA9IHlzOworICByLmNsYW1wKCk7CisgIGlmKG5zaCA+IDApIHIuclNoaWZ0VG8obnNo
LHIpOwkvLyBEZW5vcm1hbGl6ZSByZW1haW5kZXIKKyAgaWYodHMgPCAwKSBCaWdJbnRlZ2VyLlpF
Uk8uc3ViVG8ocixyKTsKK30KKworLy8gKHB1YmxpYykgdGhpcyBtb2QgYQorZnVuY3Rpb24gYm5N
b2QoYSkgeworICB2YXIgciA9IG5iaSgpOworICB0aGlzLmFicygpLmRpdlJlbVRvKGEsbnVsbCxy
KTsKKyAgaWYodGhpcy5zIDwgMCAmJiByLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLlpFUk8pID4gMCkg
YS5zdWJUbyhyLHIpOworICByZXR1cm4gcjsKK30KKworLy8gTW9kdWxhciByZWR1Y3Rpb24gdXNp
bmcgImNsYXNzaWMiIGFsZ29yaXRobQorZnVuY3Rpb24gQ2xhc3NpYyhtKSB7IHRoaXMubSA9IG07
IH0KK2Z1bmN0aW9uIGNDb252ZXJ0KHgpIHsKKyAgaWYoeC5zIDwgMCB8fCB4LmNvbXBhcmVUbyh0
aGlzLm0pID49IDApIHJldHVybiB4Lm1vZCh0aGlzLm0pOworICBlbHNlIHJldHVybiB4OworfQor
ZnVuY3Rpb24gY1JldmVydCh4KSB7IHJldHVybiB4OyB9CitmdW5jdGlvbiBjUmVkdWNlKHgpIHsg
eC5kaXZSZW1Ubyh0aGlzLm0sbnVsbCx4KTsgfQorZnVuY3Rpb24gY011bFRvKHgseSxyKSB7IHgu
bXVsdGlwbHlUbyh5LHIpOyB0aGlzLnJlZHVjZShyKTsgfQorZnVuY3Rpb24gY1NxclRvKHgscikg
eyB4LnNxdWFyZVRvKHIpOyB0aGlzLnJlZHVjZShyKTsgfQorCitDbGFzc2ljLnByb3RvdHlwZS5j
b252ZXJ0ID0gY0NvbnZlcnQ7CitDbGFzc2ljLnByb3RvdHlwZS5yZXZlcnQgPSBjUmV2ZXJ0Owor
Q2xhc3NpYy5wcm90b3R5cGUucmVkdWNlID0gY1JlZHVjZTsKK0NsYXNzaWMucHJvdG90eXBlLm11
bFRvID0gY011bFRvOworQ2xhc3NpYy5wcm90b3R5cGUuc3FyVG8gPSBjU3FyVG87CisKKy8vIChw
cm90ZWN0ZWQpIHJldHVybiAiLTEvdGhpcyAlIDJeREIiOyB1c2VmdWwgZm9yIE1vbnQuIHJlZHVj
dGlvbgorLy8ganVzdGlmaWNhdGlvbjoKKy8vICAgICAgICAgeHkgPT0gMSAobW9kIG0pCisvLyAg
ICAgICAgIHh5ID0gIDEra20KKy8vICAgeHkoMi14eSkgPSAoMStrbSkoMS1rbSkKKy8vIHhbeSgy
LXh5KV0gPSAxLWteMm1eMgorLy8geFt5KDIteHkpXSA9PSAxIChtb2QgbV4yKQorLy8gaWYgeSBp
cyAxL3ggbW9kIG0sIHRoZW4geSgyLXh5KSBpcyAxL3ggbW9kIG1eMgorLy8gc2hvdWxkIHJlZHVj
ZSB4IGFuZCB5KDIteHkpIGJ5IG1eMiBhdCBlYWNoIHN0ZXAgdG8ga2VlcCBzaXplIGJvdW5kZWQu
CisvLyBKUyBtdWx0aXBseSAib3ZlcmZsb3dzIiBkaWZmZXJlbnRseSBmcm9tIEMvQysrLCBzbyBj
YXJlIGlzIG5lZWRlZCBoZXJlLgorZnVuY3Rpb24gYm5wSW52RGlnaXQoKSB7CisgIHZhciB0aGlz
X2FycmF5ID0gdGhpcy5hcnJheTsKKyAgaWYodGhpcy50IDwgMSkgcmV0dXJuIDA7CisgIHZhciB4
ID0gdGhpc19hcnJheVswXTsKKyAgaWYoKHgmMSkgPT0gMCkgcmV0dXJuIDA7CisgIHZhciB5ID0g
eCYzOwkJLy8geSA9PSAxL3ggbW9kIDJeMgorICB5ID0gKHkqKDItKHgmMHhmKSp5KSkmMHhmOwkv
LyB5ID09IDEveCBtb2QgMl40CisgIHkgPSAoeSooMi0oeCYweGZmKSp5KSkmMHhmZjsJLy8geSA9
PSAxL3ggbW9kIDJeOAorICB5ID0gKHkqKDItKCgoeCYweGZmZmYpKnkpJjB4ZmZmZikpKSYweGZm
ZmY7CS8vIHkgPT0gMS94IG1vZCAyXjE2CisgIC8vIGxhc3Qgc3RlcCAtIGNhbGN1bGF0ZSBpbnZl
cnNlIG1vZCBEViBkaXJlY3RseTsKKyAgLy8gYXNzdW1lcyAxNiA8IERCIDw9IDMyIGFuZCBhc3N1
bWVzIGFiaWxpdHkgdG8gaGFuZGxlIDQ4LWJpdCBpbnRzCisgIHkgPSAoeSooMi14KnklQklfRFYp
KSVCSV9EVjsJCS8vIHkgPT0gMS94IG1vZCAyXmRiaXRzCisgIC8vIHdlIHJlYWxseSB3YW50IHRo
ZSBuZWdhdGl2ZSBpbnZlcnNlLCBhbmQgLURWIDwgeSA8IERWCisgIHJldHVybiAoeT4wKT9CSV9E
Vi15Oi15OworfQorCisvLyBNb250Z29tZXJ5IHJlZHVjdGlvbgorZnVuY3Rpb24gTW9udGdvbWVy
eShtKSB7CisgIHRoaXMubSA9IG07CisgIHRoaXMubXAgPSBtLmludkRpZ2l0KCk7CisgIHRoaXMu
bXBsID0gdGhpcy5tcCYweDdmZmY7CisgIHRoaXMubXBoID0gdGhpcy5tcD4+MTU7CisgIHRoaXMu
dW0gPSAoMTw8KEJJX0RCLTE1KSktMTsKKyAgdGhpcy5tdDIgPSAyKm0udDsKK30KKworLy8geFIg
bW9kIG0KK2Z1bmN0aW9uIG1vbnRDb252ZXJ0KHgpIHsKKyAgdmFyIHIgPSBuYmkoKTsKKyAgeC5h
YnMoKS5kbFNoaWZ0VG8odGhpcy5tLnQscik7CisgIHIuZGl2UmVtVG8odGhpcy5tLG51bGwscik7
CisgIGlmKHgucyA8IDAgJiYgci5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKSA+IDApIHRoaXMu
bS5zdWJUbyhyLHIpOworICByZXR1cm4gcjsKK30KKworLy8geC9SIG1vZCBtCitmdW5jdGlvbiBt
b250UmV2ZXJ0KHgpIHsKKyAgdmFyIHIgPSBuYmkoKTsKKyAgeC5jb3B5VG8ocik7CisgIHRoaXMu
cmVkdWNlKHIpOworICByZXR1cm4gcjsKK30KKworLy8geCA9IHgvUiBtb2QgbSAoSEFDIDE0LjMy
KQorZnVuY3Rpb24gbW9udFJlZHVjZSh4KSB7CisgIHZhciB4X2FycmF5ID0geC5hcnJheTsKKyAg
d2hpbGUoeC50IDw9IHRoaXMubXQyKQkvLyBwYWQgeCBzbyBhbSBoYXMgZW5vdWdoIHJvb20gbGF0
ZXIKKyAgICB4X2FycmF5W3gudCsrXSA9IDA7CisgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLm0u
dDsgKytpKSB7CisgICAgLy8gZmFzdGVyIHdheSBvZiBjYWxjdWxhdGluZyB1MCA9IHhbaV0qbXAg
bW9kIERWCisgICAgdmFyIGogPSB4X2FycmF5W2ldJjB4N2ZmZjsKKyAgICB2YXIgdTAgPSAoaip0
aGlzLm1wbCsoKChqKnRoaXMubXBoKyh4X2FycmF5W2ldPj4xNSkqdGhpcy5tcGwpJnRoaXMudW0p
PDwxNSkpJkJJX0RNOworICAgIC8vIHVzZSBhbSB0byBjb21iaW5lIHRoZSBtdWx0aXBseS1zaGlm
dC1hZGQgaW50byBvbmUgY2FsbAorICAgIGogPSBpK3RoaXMubS50OworICAgIHhfYXJyYXlbal0g
Kz0gdGhpcy5tLmFtKDAsdTAseCxpLDAsdGhpcy5tLnQpOworICAgIC8vIHByb3BhZ2F0ZSBjYXJy
eQorICAgIHdoaWxlKHhfYXJyYXlbal0gPj0gQklfRFYpIHsgeF9hcnJheVtqXSAtPSBCSV9EVjsg
eF9hcnJheVsrK2pdKys7IH0KKyAgfQorICB4LmNsYW1wKCk7CisgIHguZHJTaGlmdFRvKHRoaXMu
bS50LHgpOworICBpZih4LmNvbXBhcmVUbyh0aGlzLm0pID49IDApIHguc3ViVG8odGhpcy5tLHgp
OworfQorCisvLyByID0gInheMi9SIG1vZCBtIjsgeCAhPSByCitmdW5jdGlvbiBtb250U3FyVG8o
eCxyKSB7IHguc3F1YXJlVG8ocik7IHRoaXMucmVkdWNlKHIpOyB9CisKKy8vIHIgPSAieHkvUiBt
b2QgbSI7IHgseSAhPSByCitmdW5jdGlvbiBtb250TXVsVG8oeCx5LHIpIHsgeC5tdWx0aXBseVRv
KHkscik7IHRoaXMucmVkdWNlKHIpOyB9CisKK01vbnRnb21lcnkucHJvdG90eXBlLmNvbnZlcnQg
PSBtb250Q29udmVydDsKK01vbnRnb21lcnkucHJvdG90eXBlLnJldmVydCA9IG1vbnRSZXZlcnQ7
CitNb250Z29tZXJ5LnByb3RvdHlwZS5yZWR1Y2UgPSBtb250UmVkdWNlOworTW9udGdvbWVyeS5w
cm90b3R5cGUubXVsVG8gPSBtb250TXVsVG87CitNb250Z29tZXJ5LnByb3RvdHlwZS5zcXJUbyA9
IG1vbnRTcXJUbzsKKworLy8gKHByb3RlY3RlZCkgdHJ1ZSBpZmYgdGhpcyBpcyBldmVuCitmdW5j
dGlvbiBibnBJc0V2ZW4oKSB7CisgIHZhciB0aGlzX2FycmF5ID0gdGhpcy5hcnJheTsKKyAgcmV0
dXJuICgodGhpcy50PjApPyh0aGlzX2FycmF5WzBdJjEpOnRoaXMucykgPT0gMDsKK30KKworLy8g
KHByb3RlY3RlZCkgdGhpc15lLCBlIDwgMl4zMiwgZG9pbmcgc3FyIGFuZCBtdWwgd2l0aCAiciIg
KEhBQyAxNC43OSkKK2Z1bmN0aW9uIGJucEV4cChlLHopIHsKKyAgaWYoZSA+IDB4ZmZmZmZmZmYg
fHwgZSA8IDEpIHJldHVybiBCaWdJbnRlZ2VyLk9ORTsKKyAgdmFyIHIgPSBuYmkoKSwgcjIgPSBu
YmkoKSwgZyA9IHouY29udmVydCh0aGlzKSwgaSA9IG5iaXRzKGUpLTE7CisgIGcuY29weVRvKHIp
OworICB3aGlsZSgtLWkgPj0gMCkgeworICAgIHouc3FyVG8ocixyMik7CisgICAgaWYoKGUmKDE8
PGkpKSA+IDApIHoubXVsVG8ocjIsZyxyKTsKKyAgICBlbHNlIHsgdmFyIHQgPSByOyByID0gcjI7
IHIyID0gdDsgfQorICB9CisgIHJldHVybiB6LnJldmVydChyKTsKK30KKworLy8gKHB1YmxpYykg
dGhpc15lICUgbSwgMCA8PSBlIDwgMl4zMgorZnVuY3Rpb24gYm5Nb2RQb3dJbnQoZSxtKSB7Cisg
IHZhciB6OworICBpZihlIDwgMjU2IHx8IG0uaXNFdmVuKCkpIHogPSBuZXcgQ2xhc3NpYyhtKTsg
ZWxzZSB6ID0gbmV3IE1vbnRnb21lcnkobSk7CisgIHJldHVybiB0aGlzLmV4cChlLHopOworfQor
CisvLyBwcm90ZWN0ZWQKK0JpZ0ludGVnZXIucHJvdG90eXBlLmNvcHlUbyA9IGJucENvcHlUbzsK
K0JpZ0ludGVnZXIucHJvdG90eXBlLmZyb21JbnQgPSBibnBGcm9tSW50OworQmlnSW50ZWdlci5w
cm90b3R5cGUuZnJvbVN0cmluZyA9IGJucEZyb21TdHJpbmc7CitCaWdJbnRlZ2VyLnByb3RvdHlw
ZS5jbGFtcCA9IGJucENsYW1wOworQmlnSW50ZWdlci5wcm90b3R5cGUuZGxTaGlmdFRvID0gYm5w
RExTaGlmdFRvOworQmlnSW50ZWdlci5wcm90b3R5cGUuZHJTaGlmdFRvID0gYm5wRFJTaGlmdFRv
OworQmlnSW50ZWdlci5wcm90b3R5cGUubFNoaWZ0VG8gPSBibnBMU2hpZnRUbzsKK0JpZ0ludGVn
ZXIucHJvdG90eXBlLnJTaGlmdFRvID0gYm5wUlNoaWZ0VG87CitCaWdJbnRlZ2VyLnByb3RvdHlw
ZS5zdWJUbyA9IGJucFN1YlRvOworQmlnSW50ZWdlci5wcm90b3R5cGUubXVsdGlwbHlUbyA9IGJu
cE11bHRpcGx5VG87CitCaWdJbnRlZ2VyLnByb3RvdHlwZS5zcXVhcmVUbyA9IGJucFNxdWFyZVRv
OworQmlnSW50ZWdlci5wcm90b3R5cGUuZGl2UmVtVG8gPSBibnBEaXZSZW1UbzsKK0JpZ0ludGVn
ZXIucHJvdG90eXBlLmludkRpZ2l0ID0gYm5wSW52RGlnaXQ7CitCaWdJbnRlZ2VyLnByb3RvdHlw
ZS5pc0V2ZW4gPSBibnBJc0V2ZW47CitCaWdJbnRlZ2VyLnByb3RvdHlwZS5leHAgPSBibnBFeHA7
CisKKy8vIHB1YmxpYworQmlnSW50ZWdlci5wcm90b3R5cGUudG9TdHJpbmcgPSBiblRvU3RyaW5n
OworQmlnSW50ZWdlci5wcm90b3R5cGUubmVnYXRlID0gYm5OZWdhdGU7CitCaWdJbnRlZ2VyLnBy
b3RvdHlwZS5hYnMgPSBibkFiczsKK0JpZ0ludGVnZXIucHJvdG90eXBlLmNvbXBhcmVUbyA9IGJu
Q29tcGFyZVRvOworQmlnSW50ZWdlci5wcm90b3R5cGUuYml0TGVuZ3RoID0gYm5CaXRMZW5ndGg7
CitCaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2QgPSBibk1vZDsKK0JpZ0ludGVnZXIucHJvdG90eXBl
Lm1vZFBvd0ludCA9IGJuTW9kUG93SW50OworCisvLyAiY29uc3RhbnRzIgorQmlnSW50ZWdlci5a
RVJPID0gbmJ2KDApOworQmlnSW50ZWdlci5PTkUgPSBuYnYoMSk7CisvLyBDb3B5cmlnaHQgKGMp
IDIwMDUgIFRvbSBXdQorLy8gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vIFNlZSAiTElDRU5TRSIg
Zm9yIGRldGFpbHMuCisKKy8vIEV4dGVuZGVkIEphdmFTY3JpcHQgQk4gZnVuY3Rpb25zLCByZXF1
aXJlZCBmb3IgUlNBIHByaXZhdGUgb3BzLgorCisvLyAocHVibGljKQorZnVuY3Rpb24gYm5DbG9u
ZSgpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5jb3B5VG8ocik7IHJldHVybiByOyB9CisKKy8vIChw
dWJsaWMpIHJldHVybiB2YWx1ZSBhcyBpbnRlZ2VyCitmdW5jdGlvbiBibkludFZhbHVlKCkgewor
ICB2YXIgdGhpc19hcnJheSA9IHRoaXMuYXJyYXk7CisgIGlmKHRoaXMucyA8IDApIHsKKyAgICBp
Zih0aGlzLnQgPT0gMSkgcmV0dXJuIHRoaXNfYXJyYXlbMF0tQklfRFY7CisgICAgZWxzZSBpZih0
aGlzLnQgPT0gMCkgcmV0dXJuIC0xOworICB9CisgIGVsc2UgaWYodGhpcy50ID09IDEpIHJldHVy
biB0aGlzX2FycmF5WzBdOworICBlbHNlIGlmKHRoaXMudCA9PSAwKSByZXR1cm4gMDsKKyAgLy8g
YXNzdW1lcyAxNiA8IERCIDwgMzIKKyAgcmV0dXJuICgodGhpc19hcnJheVsxXSYoKDE8PCgzMi1C
SV9EQikpLTEpKTw8QklfREIpfHRoaXNfYXJyYXlbMF07Cit9CisKKy8vIChwdWJsaWMpIHJldHVy
biB2YWx1ZSBhcyBieXRlCitmdW5jdGlvbiBibkJ5dGVWYWx1ZSgpIHsKKyAgdmFyIHRoaXNfYXJy
YXkgPSB0aGlzLmFycmF5OworICByZXR1cm4gKHRoaXMudD09MCk/dGhpcy5zOih0aGlzX2FycmF5
WzBdPDwyNCk+PjI0OworfQorCisvLyAocHVibGljKSByZXR1cm4gdmFsdWUgYXMgc2hvcnQgKGFz
c3VtZXMgREI+PTE2KQorZnVuY3Rpb24gYm5TaG9ydFZhbHVlKCkgeworICB2YXIgdGhpc19hcnJh
eSA9IHRoaXMuYXJyYXk7CisgIHJldHVybiAodGhpcy50PT0wKT90aGlzLnM6KHRoaXNfYXJyYXlb
MF08PDE2KT4+MTY7Cit9CisKKy8vIChwcm90ZWN0ZWQpIHJldHVybiB4IHMudC4gcl54IDwgRFYK
K2Z1bmN0aW9uIGJucENodW5rU2l6ZShyKSB7IHJldHVybiBNYXRoLmZsb29yKE1hdGguTE4yKkJJ
X0RCL01hdGgubG9nKHIpKTsgfQorCisvLyAocHVibGljKSAwIGlmIHRoaXMgPT0gMCwgMSBpZiB0
aGlzID4gMAorZnVuY3Rpb24gYm5TaWdOdW0oKSB7CisgIHZhciB0aGlzX2FycmF5ID0gdGhpcy5h
cnJheTsKKyAgaWYodGhpcy5zIDwgMCkgcmV0dXJuIC0xOworICBlbHNlIGlmKHRoaXMudCA8PSAw
IHx8ICh0aGlzLnQgPT0gMSAmJiB0aGlzX2FycmF5WzBdIDw9IDApKSByZXR1cm4gMDsKKyAgZWxz
ZSByZXR1cm4gMTsKK30KKworLy8gKHByb3RlY3RlZCkgY29udmVydCB0byByYWRpeCBzdHJpbmcK
K2Z1bmN0aW9uIGJucFRvUmFkaXgoYikgeworICBpZihiID09IG51bGwpIGIgPSAxMDsKKyAgaWYo
dGhpcy5zaWdudW0oKSA9PSAwIHx8IGIgPCAyIHx8IGIgPiAzNikgcmV0dXJuICIwIjsKKyAgdmFy
IGNzID0gdGhpcy5jaHVua1NpemUoYik7CisgIHZhciBhID0gTWF0aC5wb3coYixjcyk7CisgIHZh
ciBkID0gbmJ2KGEpLCB5ID0gbmJpKCksIHogPSBuYmkoKSwgciA9ICIiOworICB0aGlzLmRpdlJl
bVRvKGQseSx6KTsKKyAgd2hpbGUoeS5zaWdudW0oKSA+IDApIHsKKyAgICByID0gKGErei5pbnRW
YWx1ZSgpKS50b1N0cmluZyhiKS5zdWJzdHIoMSkgKyByOworICAgIHkuZGl2UmVtVG8oZCx5LHop
OworICB9CisgIHJldHVybiB6LmludFZhbHVlKCkudG9TdHJpbmcoYikgKyByOworfQorCisvLyAo
cHJvdGVjdGVkKSBjb252ZXJ0IGZyb20gcmFkaXggc3RyaW5nCitmdW5jdGlvbiBibnBGcm9tUmFk
aXgocyxiKSB7CisgIHRoaXMuZnJvbUludCgwKTsKKyAgaWYoYiA9PSBudWxsKSBiID0gMTA7Cisg
IHZhciBjcyA9IHRoaXMuY2h1bmtTaXplKGIpOworICB2YXIgZCA9IE1hdGgucG93KGIsY3MpLCBt
aSA9IGZhbHNlLCBqID0gMCwgdyA9IDA7CisgIGZvcih2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsg
KytpKSB7CisgICAgdmFyIHggPSBpbnRBdChzLGkpOworICAgIGlmKHggPCAwKSB7CisgICAgICBp
ZihzLmNoYXJBdChpKSA9PSAiLSIgJiYgdGhpcy5zaWdudW0oKSA9PSAwKSBtaSA9IHRydWU7Cisg
ICAgICBjb250aW51ZTsKKyAgICB9CisgICAgdyA9IGIqdyt4OworICAgIGlmKCsraiA+PSBjcykg
eworICAgICAgdGhpcy5kTXVsdGlwbHkoZCk7CisgICAgICB0aGlzLmRBZGRPZmZzZXQodywwKTsK
KyAgICAgIGogPSAwOworICAgICAgdyA9IDA7CisgICAgfQorICB9CisgIGlmKGogPiAwKSB7Cisg
ICAgdGhpcy5kTXVsdGlwbHkoTWF0aC5wb3coYixqKSk7CisgICAgdGhpcy5kQWRkT2Zmc2V0KHcs
MCk7CisgIH0KKyAgaWYobWkpIEJpZ0ludGVnZXIuWkVSTy5zdWJUbyh0aGlzLHRoaXMpOworfQor
CisvLyAocHJvdGVjdGVkKSBhbHRlcm5hdGUgY29uc3RydWN0b3IKK2Z1bmN0aW9uIGJucEZyb21O
dW1iZXIoYSxiLGMpIHsKKyAgaWYoIm51bWJlciIgPT0gdHlwZW9mIGIpIHsKKyAgICAvLyBuZXcg
QmlnSW50ZWdlcihpbnQsaW50LFJORykKKyAgICBpZihhIDwgMikgdGhpcy5mcm9tSW50KDEpOwor
ICAgIGVsc2UgeworICAgICAgdGhpcy5mcm9tTnVtYmVyKGEsYyk7CisgICAgICBpZighdGhpcy50
ZXN0Qml0KGEtMSkpCS8vIGZvcmNlIE1TQiBzZXQKKyAgICAgICAgdGhpcy5iaXR3aXNlVG8oQmln
SW50ZWdlci5PTkUuc2hpZnRMZWZ0KGEtMSksb3Bfb3IsdGhpcyk7CisgICAgICBpZih0aGlzLmlz
RXZlbigpKSB0aGlzLmRBZGRPZmZzZXQoMSwwKTsgLy8gZm9yY2Ugb2RkCisgICAgICB3aGlsZSgh
dGhpcy5pc1Byb2JhYmxlUHJpbWUoYikpIHsKKyAgICAgICAgdGhpcy5kQWRkT2Zmc2V0KDIsMCk7
CisgICAgICAgIGlmKHRoaXMuYml0TGVuZ3RoKCkgPiBhKSB0aGlzLnN1YlRvKEJpZ0ludGVnZXIu
T05FLnNoaWZ0TGVmdChhLTEpLHRoaXMpOworICAgICAgfQorICAgIH0KKyAgfQorICBlbHNlIHsK
KyAgICAvLyBuZXcgQmlnSW50ZWdlcihpbnQsUk5HKQorICAgIHZhciB4ID0gbmV3IEFycmF5KCks
IHQgPSBhJjc7CisgICAgeC5sZW5ndGggPSAoYT4+MykrMTsKKyAgICBiLm5leHRCeXRlcyh4KTsK
KyAgICBpZih0ID4gMCkgeFswXSAmPSAoKDE8PHQpLTEpOyBlbHNlIHhbMF0gPSAwOworICAgIHRo
aXMuZnJvbVN0cmluZyh4LDI1Nik7CisgIH0KK30KKworLy8gKHB1YmxpYykgY29udmVydCB0byBi
aWdlbmRpYW4gYnl0ZSBhcnJheQorZnVuY3Rpb24gYm5Ub0J5dGVBcnJheSgpIHsKKyAgdmFyIHRo
aXNfYXJyYXkgPSB0aGlzLmFycmF5OworICB2YXIgaSA9IHRoaXMudCwgciA9IG5ldyBBcnJheSgp
OworICByWzBdID0gdGhpcy5zOworICB2YXIgcCA9IEJJX0RCLShpKkJJX0RCKSU4LCBkLCBrID0g
MDsKKyAgaWYoaS0tID4gMCkgeworICAgIGlmKHAgPCBCSV9EQiAmJiAoZCA9IHRoaXNfYXJyYXlb
aV0+PnApICE9ICh0aGlzLnMmQklfRE0pPj5wKQorICAgICAgcltrKytdID0gZHwodGhpcy5zPDwo
QklfREItcCkpOworICAgIHdoaWxlKGkgPj0gMCkgeworICAgICAgaWYocCA8IDgpIHsKKyAgICAg
ICAgZCA9ICh0aGlzX2FycmF5W2ldJigoMTw8cCktMSkpPDwoOC1wKTsKKyAgICAgICAgZCB8PSB0
aGlzX2FycmF5Wy0taV0+PihwKz1CSV9EQi04KTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAg
ICAgICBkID0gKHRoaXNfYXJyYXlbaV0+PihwLT04KSkmMHhmZjsKKyAgICAgICAgaWYocCA8PSAw
KSB7IHAgKz0gQklfREI7IC0taTsgfQorICAgICAgfQorICAgICAgaWYoKGQmMHg4MCkgIT0gMCkg
ZCB8PSAtMjU2OworICAgICAgaWYoayA9PSAwICYmICh0aGlzLnMmMHg4MCkgIT0gKGQmMHg4MCkp
ICsrazsKKyAgICAgIGlmKGsgPiAwIHx8IGQgIT0gdGhpcy5zKSByW2srK10gPSBkOworICAgIH0K
KyAgfQorICByZXR1cm4gcjsKK30KKworZnVuY3Rpb24gYm5FcXVhbHMoYSkgeyByZXR1cm4odGhp
cy5jb21wYXJlVG8oYSk9PTApOyB9CitmdW5jdGlvbiBibk1pbihhKSB7IHJldHVybih0aGlzLmNv
bXBhcmVUbyhhKTwwKT90aGlzOmE7IH0KK2Z1bmN0aW9uIGJuTWF4KGEpIHsgcmV0dXJuKHRoaXMu
Y29tcGFyZVRvKGEpPjApP3RoaXM6YTsgfQorCisvLyAocHJvdGVjdGVkKSByID0gdGhpcyBvcCBh
IChiaXR3aXNlKQorZnVuY3Rpb24gYm5wQml0d2lzZVRvKGEsb3AscikgeworICB2YXIgdGhpc19h
cnJheSA9IHRoaXMuYXJyYXk7CisgIHZhciBhX2FycmF5ICAgID0gYS5hcnJheTsKKyAgdmFyIHJf
YXJyYXkgICAgPSByLmFycmF5OworICB2YXIgaSwgZiwgbSA9IE1hdGgubWluKGEudCx0aGlzLnQp
OworICBmb3IoaSA9IDA7IGkgPCBtOyArK2kpIHJfYXJyYXlbaV0gPSBvcCh0aGlzX2FycmF5W2ld
LGFfYXJyYXlbaV0pOworICBpZihhLnQgPCB0aGlzLnQpIHsKKyAgICBmID0gYS5zJkJJX0RNOwor
ICAgIGZvcihpID0gbTsgaSA8IHRoaXMudDsgKytpKSByX2FycmF5W2ldID0gb3AodGhpc19hcnJh
eVtpXSxmKTsKKyAgICByLnQgPSB0aGlzLnQ7CisgIH0KKyAgZWxzZSB7CisgICAgZiA9IHRoaXMu
cyZCSV9ETTsKKyAgICBmb3IoaSA9IG07IGkgPCBhLnQ7ICsraSkgcl9hcnJheVtpXSA9IG9wKGYs
YV9hcnJheVtpXSk7CisgICAgci50ID0gYS50OworICB9CisgIHIucyA9IG9wKHRoaXMucyxhLnMp
OworICByLmNsYW1wKCk7Cit9CisKKy8vIChwdWJsaWMpIHRoaXMgJiBhCitmdW5jdGlvbiBvcF9h
bmQoeCx5KSB7IHJldHVybiB4Jnk7IH0KK2Z1bmN0aW9uIGJuQW5kKGEpIHsgdmFyIHIgPSBuYmko
KTsgdGhpcy5iaXR3aXNlVG8oYSxvcF9hbmQscik7IHJldHVybiByOyB9CisKKy8vIChwdWJsaWMp
IHRoaXMgfCBhCitmdW5jdGlvbiBvcF9vcih4LHkpIHsgcmV0dXJuIHh8eTsgfQorZnVuY3Rpb24g
Ym5PcihhKSB7IHZhciByID0gbmJpKCk7IHRoaXMuYml0d2lzZVRvKGEsb3Bfb3Iscik7IHJldHVy
biByOyB9CisKKy8vIChwdWJsaWMpIHRoaXMgXiBhCitmdW5jdGlvbiBvcF94b3IoeCx5KSB7IHJl
dHVybiB4Xnk7IH0KK2Z1bmN0aW9uIGJuWG9yKGEpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5iaXR3
aXNlVG8oYSxvcF94b3Iscik7IHJldHVybiByOyB9CisKKy8vIChwdWJsaWMpIHRoaXMgJiB+YQor
ZnVuY3Rpb24gb3BfYW5kbm90KHgseSkgeyByZXR1cm4geCZ+eTsgfQorZnVuY3Rpb24gYm5BbmRO
b3QoYSkgeyB2YXIgciA9IG5iaSgpOyB0aGlzLmJpdHdpc2VUbyhhLG9wX2FuZG5vdCxyKTsgcmV0
dXJuIHI7IH0KKworLy8gKHB1YmxpYykgfnRoaXMKK2Z1bmN0aW9uIGJuTm90KCkgeworICB2YXIg
dGhpc19hcnJheSA9IHRoaXMuYXJyYXk7CisgIHZhciByID0gbmJpKCk7CisgIHZhciByX2FycmF5
ID0gci5hcnJheTsKKworICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy50OyArK2kpIHJfYXJyYXlb
aV0gPSBCSV9ETSZ+dGhpc19hcnJheVtpXTsKKyAgci50ID0gdGhpcy50OworICByLnMgPSB+dGhp
cy5zOworICByZXR1cm4gcjsKK30KKworLy8gKHB1YmxpYykgdGhpcyA8PCBuCitmdW5jdGlvbiBi
blNoaWZ0TGVmdChuKSB7CisgIHZhciByID0gbmJpKCk7CisgIGlmKG4gPCAwKSB0aGlzLnJTaGlm
dFRvKC1uLHIpOyBlbHNlIHRoaXMubFNoaWZ0VG8obixyKTsKKyAgcmV0dXJuIHI7Cit9CisKKy8v
IChwdWJsaWMpIHRoaXMgPj4gbgorZnVuY3Rpb24gYm5TaGlmdFJpZ2h0KG4pIHsKKyAgdmFyIHIg
PSBuYmkoKTsKKyAgaWYobiA8IDApIHRoaXMubFNoaWZ0VG8oLW4scik7IGVsc2UgdGhpcy5yU2hp
ZnRUbyhuLHIpOworICByZXR1cm4gcjsKK30KKworLy8gcmV0dXJuIGluZGV4IG9mIGxvd2VzdCAx
LWJpdCBpbiB4LCB4IDwgMl4zMQorZnVuY3Rpb24gbGJpdCh4KSB7CisgIGlmKHggPT0gMCkgcmV0
dXJuIC0xOworICB2YXIgciA9IDA7CisgIGlmKCh4JjB4ZmZmZikgPT0gMCkgeyB4ID4+PSAxNjsg
ciArPSAxNjsgfQorICBpZigoeCYweGZmKSA9PSAwKSB7IHggPj49IDg7IHIgKz0gODsgfQorICBp
ZigoeCYweGYpID09IDApIHsgeCA+Pj0gNDsgciArPSA0OyB9CisgIGlmKCh4JjMpID09IDApIHsg
eCA+Pj0gMjsgciArPSAyOyB9CisgIGlmKCh4JjEpID09IDApICsrcjsKKyAgcmV0dXJuIHI7Cit9
CisKKy8vIChwdWJsaWMpIHJldHVybnMgaW5kZXggb2YgbG93ZXN0IDEtYml0IChvciAtMSBpZiBu
b25lKQorZnVuY3Rpb24gYm5HZXRMb3dlc3RTZXRCaXQoKSB7CisgIHZhciB0aGlzX2FycmF5ID0g
dGhpcy5hcnJheTsKKyAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMudDsgKytpKQorICAgIGlmKHRo
aXNfYXJyYXlbaV0gIT0gMCkgcmV0dXJuIGkqQklfREIrbGJpdCh0aGlzX2FycmF5W2ldKTsKKyAg
aWYodGhpcy5zIDwgMCkgcmV0dXJuIHRoaXMudCpCSV9EQjsKKyAgcmV0dXJuIC0xOworfQorCisv
LyByZXR1cm4gbnVtYmVyIG9mIDEgYml0cyBpbiB4CitmdW5jdGlvbiBjYml0KHgpIHsKKyAgdmFy
IHIgPSAwOworICB3aGlsZSh4ICE9IDApIHsgeCAmPSB4LTE7ICsrcjsgfQorICByZXR1cm4gcjsK
K30KKworLy8gKHB1YmxpYykgcmV0dXJuIG51bWJlciBvZiBzZXQgYml0cworZnVuY3Rpb24gYm5C
aXRDb3VudCgpIHsKKyAgdmFyIHIgPSAwLCB4ID0gdGhpcy5zJkJJX0RNOworICBmb3IodmFyIGkg
PSAwOyBpIDwgdGhpcy50OyArK2kpIHIgKz0gY2JpdCh0aGlzX2FycmF5W2ldXngpOworICByZXR1
cm4gcjsKK30KKworLy8gKHB1YmxpYykgdHJ1ZSBpZmYgbnRoIGJpdCBpcyBzZXQKK2Z1bmN0aW9u
IGJuVGVzdEJpdChuKSB7CisgIHZhciB0aGlzX2FycmF5ID0gdGhpcy5hcnJheTsKKyAgdmFyIGog
PSBNYXRoLmZsb29yKG4vQklfREIpOworICBpZihqID49IHRoaXMudCkgcmV0dXJuKHRoaXMucyE9
MCk7CisgIHJldHVybigodGhpc19hcnJheVtqXSYoMTw8KG4lQklfREIpKSkhPTApOworfQorCisv
LyAocHJvdGVjdGVkKSB0aGlzIG9wICgxPDxuKQorZnVuY3Rpb24gYm5wQ2hhbmdlQml0KG4sb3Ap
IHsKKyAgdmFyIHIgPSBCaWdJbnRlZ2VyLk9ORS5zaGlmdExlZnQobik7CisgIHRoaXMuYml0d2lz
ZVRvKHIsb3Ascik7CisgIHJldHVybiByOworfQorCisvLyAocHVibGljKSB0aGlzIHwgKDE8PG4p
CitmdW5jdGlvbiBiblNldEJpdChuKSB7IHJldHVybiB0aGlzLmNoYW5nZUJpdChuLG9wX29yKTsg
fQorCisvLyAocHVibGljKSB0aGlzICYgfigxPDxuKQorZnVuY3Rpb24gYm5DbGVhckJpdChuKSB7
IHJldHVybiB0aGlzLmNoYW5nZUJpdChuLG9wX2FuZG5vdCk7IH0KKworLy8gKHB1YmxpYykgdGhp
cyBeICgxPDxuKQorZnVuY3Rpb24gYm5GbGlwQml0KG4pIHsgcmV0dXJuIHRoaXMuY2hhbmdlQml0
KG4sb3BfeG9yKTsgfQorCisvLyAocHJvdGVjdGVkKSByID0gdGhpcyArIGEKK2Z1bmN0aW9uIGJu
cEFkZFRvKGEscikgeworICB2YXIgdGhpc19hcnJheSA9IHRoaXMuYXJyYXk7CisgIHZhciBhX2Fy
cmF5ID0gYS5hcnJheTsKKyAgdmFyIHJfYXJyYXkgPSByLmFycmF5OworICB2YXIgaSA9IDAsIGMg
PSAwLCBtID0gTWF0aC5taW4oYS50LHRoaXMudCk7CisgIHdoaWxlKGkgPCBtKSB7CisgICAgYyAr
PSB0aGlzX2FycmF5W2ldK2FfYXJyYXlbaV07CisgICAgcl9hcnJheVtpKytdID0gYyZCSV9ETTsK
KyAgICBjID4+PSBCSV9EQjsKKyAgfQorICBpZihhLnQgPCB0aGlzLnQpIHsKKyAgICBjICs9IGEu
czsKKyAgICB3aGlsZShpIDwgdGhpcy50KSB7CisgICAgICBjICs9IHRoaXNfYXJyYXlbaV07Cisg
ICAgICByX2FycmF5W2krK10gPSBjJkJJX0RNOworICAgICAgYyA+Pj0gQklfREI7CisgICAgfQor
ICAgIGMgKz0gdGhpcy5zOworICB9CisgIGVsc2UgeworICAgIGMgKz0gdGhpcy5zOworICAgIHdo
aWxlKGkgPCBhLnQpIHsKKyAgICAgIGMgKz0gYV9hcnJheVtpXTsKKyAgICAgIHJfYXJyYXlbaSsr
XSA9IGMmQklfRE07CisgICAgICBjID4+PSBCSV9EQjsKKyAgICB9CisgICAgYyArPSBhLnM7Cisg
IH0KKyAgci5zID0gKGM8MCk/LTE6MDsKKyAgaWYoYyA+IDApIHJfYXJyYXlbaSsrXSA9IGM7Cisg
IGVsc2UgaWYoYyA8IC0xKSByX2FycmF5W2krK10gPSBCSV9EVitjOworICByLnQgPSBpOworICBy
LmNsYW1wKCk7Cit9CisKKy8vIChwdWJsaWMpIHRoaXMgKyBhCitmdW5jdGlvbiBibkFkZChhKSB7
IHZhciByID0gbmJpKCk7IHRoaXMuYWRkVG8oYSxyKTsgcmV0dXJuIHI7IH0KKworLy8gKHB1Ymxp
YykgdGhpcyAtIGEKK2Z1bmN0aW9uIGJuU3VidHJhY3QoYSkgeyB2YXIgciA9IG5iaSgpOyB0aGlz
LnN1YlRvKGEscik7IHJldHVybiByOyB9CisKKy8vIChwdWJsaWMpIHRoaXMgKiBhCitmdW5jdGlv
biBibk11bHRpcGx5KGEpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5tdWx0aXBseVRvKGEscik7IHJl
dHVybiByOyB9CisKKy8vIChwdWJsaWMpIHRoaXMgLyBhCitmdW5jdGlvbiBibkRpdmlkZShhKSB7
IHZhciByID0gbmJpKCk7IHRoaXMuZGl2UmVtVG8oYSxyLG51bGwpOyByZXR1cm4gcjsgfQorCisv
LyAocHVibGljKSB0aGlzICUgYQorZnVuY3Rpb24gYm5SZW1haW5kZXIoYSkgeyB2YXIgciA9IG5i
aSgpOyB0aGlzLmRpdlJlbVRvKGEsbnVsbCxyKTsgcmV0dXJuIHI7IH0KKworLy8gKHB1YmxpYykg
W3RoaXMvYSx0aGlzJWFdCitmdW5jdGlvbiBibkRpdmlkZUFuZFJlbWFpbmRlcihhKSB7CisgIHZh
ciBxID0gbmJpKCksIHIgPSBuYmkoKTsKKyAgdGhpcy5kaXZSZW1UbyhhLHEscik7CisgIHJldHVy
biBuZXcgQXJyYXkocSxyKTsKK30KKworLy8gKHByb3RlY3RlZCkgdGhpcyAqPSBuLCB0aGlzID49
IDAsIDEgPCBuIDwgRFYKK2Z1bmN0aW9uIGJucERNdWx0aXBseShuKSB7CisgIHZhciB0aGlzX2Fy
cmF5ID0gdGhpcy5hcnJheTsKKyAgdGhpc19hcnJheVt0aGlzLnRdID0gdGhpcy5hbSgwLG4tMSx0
aGlzLDAsMCx0aGlzLnQpOworICArK3RoaXMudDsKKyAgdGhpcy5jbGFtcCgpOworfQorCisvLyAo
cHJvdGVjdGVkKSB0aGlzICs9IG4gPDwgdyB3b3JkcywgdGhpcyA+PSAwCitmdW5jdGlvbiBibnBE
QWRkT2Zmc2V0KG4sdykgeworICB2YXIgdGhpc19hcnJheSA9IHRoaXMuYXJyYXk7CisgIHdoaWxl
KHRoaXMudCA8PSB3KSB0aGlzX2FycmF5W3RoaXMudCsrXSA9IDA7CisgIHRoaXNfYXJyYXlbd10g
Kz0gbjsKKyAgd2hpbGUodGhpc19hcnJheVt3XSA+PSBCSV9EVikgeworICAgIHRoaXNfYXJyYXlb
d10gLT0gQklfRFY7CisgICAgaWYoKyt3ID49IHRoaXMudCkgdGhpc19hcnJheVt0aGlzLnQrK10g
PSAwOworICAgICsrdGhpc19hcnJheVt3XTsKKyAgfQorfQorCisvLyBBICJudWxsIiByZWR1Y2Vy
CitmdW5jdGlvbiBOdWxsRXhwKCkge30KK2Z1bmN0aW9uIG5Ob3AoeCkgeyByZXR1cm4geDsgfQor
ZnVuY3Rpb24gbk11bFRvKHgseSxyKSB7IHgubXVsdGlwbHlUbyh5LHIpOyB9CitmdW5jdGlvbiBu
U3FyVG8oeCxyKSB7IHguc3F1YXJlVG8ocik7IH0KKworTnVsbEV4cC5wcm90b3R5cGUuY29udmVy
dCA9IG5Ob3A7CitOdWxsRXhwLnByb3RvdHlwZS5yZXZlcnQgPSBuTm9wOworTnVsbEV4cC5wcm90
b3R5cGUubXVsVG8gPSBuTXVsVG87CitOdWxsRXhwLnByb3RvdHlwZS5zcXJUbyA9IG5TcXJUbzsK
KworLy8gKHB1YmxpYykgdGhpc15lCitmdW5jdGlvbiBiblBvdyhlKSB7IHJldHVybiB0aGlzLmV4
cChlLG5ldyBOdWxsRXhwKCkpOyB9CisKKy8vIChwcm90ZWN0ZWQpIHIgPSBsb3dlciBuIHdvcmRz
IG9mICJ0aGlzICogYSIsIGEudCA8PSBuCisvLyAidGhpcyIgc2hvdWxkIGJlIHRoZSBsYXJnZXIg
b25lIGlmIGFwcHJvcHJpYXRlLgorZnVuY3Rpb24gYm5wTXVsdGlwbHlMb3dlclRvKGEsbixyKSB7
CisgIHZhciByX2FycmF5ID0gci5hcnJheTsKKyAgdmFyIGFfYXJyYXkgPSBhLmFycmF5OworICB2
YXIgaSA9IE1hdGgubWluKHRoaXMudCthLnQsbik7CisgIHIucyA9IDA7IC8vIGFzc3VtZXMgYSx0
aGlzID49IDAKKyAgci50ID0gaTsKKyAgd2hpbGUoaSA+IDApIHJfYXJyYXlbLS1pXSA9IDA7Cisg
IHZhciBqOworICBmb3IoaiA9IHIudC10aGlzLnQ7IGkgPCBqOyArK2kpIHJfYXJyYXlbaSt0aGlz
LnRdID0gdGhpcy5hbSgwLGFfYXJyYXlbaV0scixpLDAsdGhpcy50KTsKKyAgZm9yKGogPSBNYXRo
Lm1pbihhLnQsbik7IGkgPCBqOyArK2kpIHRoaXMuYW0oMCxhX2FycmF5W2ldLHIsaSwwLG4taSk7
CisgIHIuY2xhbXAoKTsKK30KKworLy8gKHByb3RlY3RlZCkgciA9ICJ0aGlzICogYSIgd2l0aG91
dCBsb3dlciBuIHdvcmRzLCBuID4gMAorLy8gInRoaXMiIHNob3VsZCBiZSB0aGUgbGFyZ2VyIG9u
ZSBpZiBhcHByb3ByaWF0ZS4KK2Z1bmN0aW9uIGJucE11bHRpcGx5VXBwZXJUbyhhLG4scikgewor
ICB2YXIgcl9hcnJheSA9IHIuYXJyYXk7CisgIHZhciBhX2FycmF5ID0gYS5hcnJheTsKKyAgLS1u
OworICB2YXIgaSA9IHIudCA9IHRoaXMudCthLnQtbjsKKyAgci5zID0gMDsgLy8gYXNzdW1lcyBh
LHRoaXMgPj0gMAorICB3aGlsZSgtLWkgPj0gMCkgcl9hcnJheVtpXSA9IDA7CisgIGZvcihpID0g
TWF0aC5tYXgobi10aGlzLnQsMCk7IGkgPCBhLnQ7ICsraSkKKyAgICByX2FycmF5W3RoaXMudCtp
LW5dID0gdGhpcy5hbShuLWksYV9hcnJheVtpXSxyLDAsMCx0aGlzLnQraS1uKTsKKyAgci5jbGFt
cCgpOworICByLmRyU2hpZnRUbygxLHIpOworfQorCisvLyBCYXJyZXR0IG1vZHVsYXIgcmVkdWN0
aW9uCitmdW5jdGlvbiBCYXJyZXR0KG0pIHsKKyAgLy8gc2V0dXAgQmFycmV0dAorICB0aGlzLnIy
ID0gbmJpKCk7CisgIHRoaXMucTMgPSBuYmkoKTsKKyAgQmlnSW50ZWdlci5PTkUuZGxTaGlmdFRv
KDIqbS50LHRoaXMucjIpOworICB0aGlzLm11ID0gdGhpcy5yMi5kaXZpZGUobSk7CisgIHRoaXMu
bSA9IG07Cit9CisKK2Z1bmN0aW9uIGJhcnJldHRDb252ZXJ0KHgpIHsKKyAgaWYoeC5zIDwgMCB8
fCB4LnQgPiAyKnRoaXMubS50KSByZXR1cm4geC5tb2QodGhpcy5tKTsKKyAgZWxzZSBpZih4LmNv
bXBhcmVUbyh0aGlzLm0pIDwgMCkgcmV0dXJuIHg7CisgIGVsc2UgeyB2YXIgciA9IG5iaSgpOyB4
LmNvcHlUbyhyKTsgdGhpcy5yZWR1Y2Uocik7IHJldHVybiByOyB9Cit9CisKK2Z1bmN0aW9uIGJh
cnJldHRSZXZlcnQoeCkgeyByZXR1cm4geDsgfQorCisvLyB4ID0geCBtb2QgbSAoSEFDIDE0LjQy
KQorZnVuY3Rpb24gYmFycmV0dFJlZHVjZSh4KSB7CisgIHguZHJTaGlmdFRvKHRoaXMubS50LTEs
dGhpcy5yMik7CisgIGlmKHgudCA+IHRoaXMubS50KzEpIHsgeC50ID0gdGhpcy5tLnQrMTsgeC5j
bGFtcCgpOyB9CisgIHRoaXMubXUubXVsdGlwbHlVcHBlclRvKHRoaXMucjIsdGhpcy5tLnQrMSx0
aGlzLnEzKTsKKyAgdGhpcy5tLm11bHRpcGx5TG93ZXJUbyh0aGlzLnEzLHRoaXMubS50KzEsdGhp
cy5yMik7CisgIHdoaWxlKHguY29tcGFyZVRvKHRoaXMucjIpIDwgMCkgeC5kQWRkT2Zmc2V0KDEs
dGhpcy5tLnQrMSk7CisgIHguc3ViVG8odGhpcy5yMix4KTsKKyAgd2hpbGUoeC5jb21wYXJlVG8o
dGhpcy5tKSA+PSAwKSB4LnN1YlRvKHRoaXMubSx4KTsKK30KKworLy8gciA9IHheMiBtb2QgbTsg
eCAhPSByCitmdW5jdGlvbiBiYXJyZXR0U3FyVG8oeCxyKSB7IHguc3F1YXJlVG8ocik7IHRoaXMu
cmVkdWNlKHIpOyB9CisKKy8vIHIgPSB4KnkgbW9kIG07IHgseSAhPSByCitmdW5jdGlvbiBiYXJy
ZXR0TXVsVG8oeCx5LHIpIHsgeC5tdWx0aXBseVRvKHkscik7IHRoaXMucmVkdWNlKHIpOyB9CisK
K0JhcnJldHQucHJvdG90eXBlLmNvbnZlcnQgPSBiYXJyZXR0Q29udmVydDsKK0JhcnJldHQucHJv
dG90eXBlLnJldmVydCA9IGJhcnJldHRSZXZlcnQ7CitCYXJyZXR0LnByb3RvdHlwZS5yZWR1Y2Ug
PSBiYXJyZXR0UmVkdWNlOworQmFycmV0dC5wcm90b3R5cGUubXVsVG8gPSBiYXJyZXR0TXVsVG87
CitCYXJyZXR0LnByb3RvdHlwZS5zcXJUbyA9IGJhcnJldHRTcXJUbzsKKworLy8gKHB1YmxpYykg
dGhpc15lICUgbSAoSEFDIDE0Ljg1KQorZnVuY3Rpb24gYm5Nb2RQb3coZSxtKSB7CisgIHZhciBl
X2FycmF5ID0gZS5hcnJheTsKKyAgdmFyIGkgPSBlLmJpdExlbmd0aCgpLCBrLCByID0gbmJ2KDEp
LCB6OworICBpZihpIDw9IDApIHJldHVybiByOworICBlbHNlIGlmKGkgPCAxOCkgayA9IDE7Cisg
IGVsc2UgaWYoaSA8IDQ4KSBrID0gMzsKKyAgZWxzZSBpZihpIDwgMTQ0KSBrID0gNDsKKyAgZWxz
ZSBpZihpIDwgNzY4KSBrID0gNTsKKyAgZWxzZSBrID0gNjsKKyAgaWYoaSA8IDgpCisgICAgeiA9
IG5ldyBDbGFzc2ljKG0pOworICBlbHNlIGlmKG0uaXNFdmVuKCkpCisgICAgeiA9IG5ldyBCYXJy
ZXR0KG0pOworICBlbHNlCisgICAgeiA9IG5ldyBNb250Z29tZXJ5KG0pOworCisgIC8vIHByZWNv
bXB1dGF0aW9uCisgIHZhciBnID0gbmV3IEFycmF5KCksIG4gPSAzLCBrMSA9IGstMSwga20gPSAo
MTw8ayktMTsKKyAgZ1sxXSA9IHouY29udmVydCh0aGlzKTsKKyAgaWYoayA+IDEpIHsKKyAgICB2
YXIgZzIgPSBuYmkoKTsKKyAgICB6LnNxclRvKGdbMV0sZzIpOworICAgIHdoaWxlKG4gPD0ga20p
IHsKKyAgICAgIGdbbl0gPSBuYmkoKTsKKyAgICAgIHoubXVsVG8oZzIsZ1tuLTJdLGdbbl0pOwor
ICAgICAgbiArPSAyOworICAgIH0KKyAgfQorCisgIHZhciBqID0gZS50LTEsIHcsIGlzMSA9IHRy
dWUsIHIyID0gbmJpKCksIHQ7CisgIGkgPSBuYml0cyhlX2FycmF5W2pdKS0xOworICB3aGlsZShq
ID49IDApIHsKKyAgICBpZihpID49IGsxKSB3ID0gKGVfYXJyYXlbal0+PihpLWsxKSkma207Cisg
ICAgZWxzZSB7CisgICAgICB3ID0gKGVfYXJyYXlbal0mKCgxPDwoaSsxKSktMSkpPDwoazEtaSk7
CisgICAgICBpZihqID4gMCkgdyB8PSBlX2FycmF5W2otMV0+PihCSV9EQitpLWsxKTsKKyAgICB9
CisKKyAgICBuID0gazsKKyAgICB3aGlsZSgodyYxKSA9PSAwKSB7IHcgPj49IDE7IC0tbjsgfQor
ICAgIGlmKChpIC09IG4pIDwgMCkgeyBpICs9IEJJX0RCOyAtLWo7IH0KKyAgICBpZihpczEpIHsJ
Ly8gcmV0ID09IDEsIGRvbid0IGJvdGhlciBzcXVhcmluZyBvciBtdWx0aXBseWluZyBpdAorICAg
ICAgZ1t3XS5jb3B5VG8ocik7CisgICAgICBpczEgPSBmYWxzZTsKKyAgICB9CisgICAgZWxzZSB7
CisgICAgICB3aGlsZShuID4gMSkgeyB6LnNxclRvKHIscjIpOyB6LnNxclRvKHIyLHIpOyBuIC09
IDI7IH0KKyAgICAgIGlmKG4gPiAwKSB6LnNxclRvKHIscjIpOyBlbHNlIHsgdCA9IHI7IHIgPSBy
MjsgcjIgPSB0OyB9CisgICAgICB6Lm11bFRvKHIyLGdbd10scik7CisgICAgfQorCisgICAgd2hp
bGUoaiA+PSAwICYmIChlX2FycmF5W2pdJigxPDxpKSkgPT0gMCkgeworICAgICAgei5zcXJUbyhy
LHIyKTsgdCA9IHI7IHIgPSByMjsgcjIgPSB0OworICAgICAgaWYoLS1pIDwgMCkgeyBpID0gQklf
REItMTsgLS1qOyB9CisgICAgfQorICB9CisgIHJldHVybiB6LnJldmVydChyKTsKK30KKworLy8g
KHB1YmxpYykgZ2NkKHRoaXMsYSkgKEhBQyAxNC41NCkKK2Z1bmN0aW9uIGJuR0NEKGEpIHsKKyAg
dmFyIHggPSAodGhpcy5zPDApP3RoaXMubmVnYXRlKCk6dGhpcy5jbG9uZSgpOworICB2YXIgeSA9
IChhLnM8MCk/YS5uZWdhdGUoKTphLmNsb25lKCk7CisgIGlmKHguY29tcGFyZVRvKHkpIDwgMCkg
eyB2YXIgdCA9IHg7IHggPSB5OyB5ID0gdDsgfQorICB2YXIgaSA9IHguZ2V0TG93ZXN0U2V0Qml0
KCksIGcgPSB5LmdldExvd2VzdFNldEJpdCgpOworICBpZihnIDwgMCkgcmV0dXJuIHg7CisgIGlm
KGkgPCBnKSBnID0gaTsKKyAgaWYoZyA+IDApIHsKKyAgICB4LnJTaGlmdFRvKGcseCk7CisgICAg
eS5yU2hpZnRUbyhnLHkpOworICB9CisgIHdoaWxlKHguc2lnbnVtKCkgPiAwKSB7CisgICAgaWYo
KGkgPSB4LmdldExvd2VzdFNldEJpdCgpKSA+IDApIHguclNoaWZ0VG8oaSx4KTsKKyAgICBpZigo
aSA9IHkuZ2V0TG93ZXN0U2V0Qml0KCkpID4gMCkgeS5yU2hpZnRUbyhpLHkpOworICAgIGlmKHgu
Y29tcGFyZVRvKHkpID49IDApIHsKKyAgICAgIHguc3ViVG8oeSx4KTsKKyAgICAgIHguclNoaWZ0
VG8oMSx4KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICB5LnN1YlRvKHgseSk7CisgICAgICB5
LnJTaGlmdFRvKDEseSk7CisgICAgfQorICB9CisgIGlmKGcgPiAwKSB5LmxTaGlmdFRvKGcseSk7
CisgIHJldHVybiB5OworfQorCisvLyAocHJvdGVjdGVkKSB0aGlzICUgbiwgbiA8IDJeMjYKK2Z1
bmN0aW9uIGJucE1vZEludChuKSB7CisgIHZhciB0aGlzX2FycmF5ID0gdGhpcy5hcnJheTsKKyAg
aWYobiA8PSAwKSByZXR1cm4gMDsKKyAgdmFyIGQgPSBCSV9EViVuLCByID0gKHRoaXMuczwwKT9u
LTE6MDsKKyAgaWYodGhpcy50ID4gMCkKKyAgICBpZihkID09IDApIHIgPSB0aGlzX2FycmF5WzBd
JW47CisgICAgZWxzZSBmb3IodmFyIGkgPSB0aGlzLnQtMTsgaSA+PSAwOyAtLWkpIHIgPSAoZCpy
K3RoaXNfYXJyYXlbaV0pJW47CisgIHJldHVybiByOworfQorCisvLyAocHVibGljKSAxL3RoaXMg
JSBtIChIQUMgMTQuNjEpCitmdW5jdGlvbiBibk1vZEludmVyc2UobSkgeworICB2YXIgYWMgPSBt
LmlzRXZlbigpOworICBpZigodGhpcy5pc0V2ZW4oKSAmJiBhYykgfHwgbS5zaWdudW0oKSA9PSAw
KSByZXR1cm4gQmlnSW50ZWdlci5aRVJPOworICB2YXIgdSA9IG0uY2xvbmUoKSwgdiA9IHRoaXMu
Y2xvbmUoKTsKKyAgdmFyIGEgPSBuYnYoMSksIGIgPSBuYnYoMCksIGMgPSBuYnYoMCksIGQgPSBu
YnYoMSk7CisgIHdoaWxlKHUuc2lnbnVtKCkgIT0gMCkgeworICAgIHdoaWxlKHUuaXNFdmVuKCkp
IHsKKyAgICAgIHUuclNoaWZ0VG8oMSx1KTsKKyAgICAgIGlmKGFjKSB7CisgICAgICAgIGlmKCFh
LmlzRXZlbigpIHx8ICFiLmlzRXZlbigpKSB7IGEuYWRkVG8odGhpcyxhKTsgYi5zdWJUbyhtLGIp
OyB9CisgICAgICAgIGEuclNoaWZ0VG8oMSxhKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoIWIu
aXNFdmVuKCkpIGIuc3ViVG8obSxiKTsKKyAgICAgIGIuclNoaWZ0VG8oMSxiKTsKKyAgICB9Cisg
ICAgd2hpbGUodi5pc0V2ZW4oKSkgeworICAgICAgdi5yU2hpZnRUbygxLHYpOworICAgICAgaWYo
YWMpIHsKKyAgICAgICAgaWYoIWMuaXNFdmVuKCkgfHwgIWQuaXNFdmVuKCkpIHsgYy5hZGRUbyh0
aGlzLGMpOyBkLnN1YlRvKG0sZCk7IH0KKyAgICAgICAgYy5yU2hpZnRUbygxLGMpOworICAgICAg
fQorICAgICAgZWxzZSBpZighZC5pc0V2ZW4oKSkgZC5zdWJUbyhtLGQpOworICAgICAgZC5yU2hp
ZnRUbygxLGQpOworICAgIH0KKyAgICBpZih1LmNvbXBhcmVUbyh2KSA+PSAwKSB7CisgICAgICB1
LnN1YlRvKHYsdSk7CisgICAgICBpZihhYykgYS5zdWJUbyhjLGEpOworICAgICAgYi5zdWJUbyhk
LGIpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHYuc3ViVG8odSx2KTsKKyAgICAgIGlmKGFj
KSBjLnN1YlRvKGEsYyk7CisgICAgICBkLnN1YlRvKGIsZCk7CisgICAgfQorICB9CisgIGlmKHYu
Y29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKSAhPSAwKSByZXR1cm4gQmlnSW50ZWdlci5aRVJPOwor
ICBpZihkLmNvbXBhcmVUbyhtKSA+PSAwKSByZXR1cm4gZC5zdWJ0cmFjdChtKTsKKyAgaWYoZC5z
aWdudW0oKSA8IDApIGQuYWRkVG8obSxkKTsgZWxzZSByZXR1cm4gZDsKKyAgaWYoZC5zaWdudW0o
KSA8IDApIHJldHVybiBkLmFkZChtKTsgZWxzZSByZXR1cm4gZDsKK30KKwordmFyIGxvd3ByaW1l
cyA9IFsyLDMsNSw3LDExLDEzLDE3LDE5LDIzLDI5LDMxLDM3LDQxLDQzLDQ3LDUzLDU5LDYxLDY3
LDcxLDczLDc5LDgzLDg5LDk3LDEwMSwxMDMsMTA3LDEwOSwxMTMsMTI3LDEzMSwxMzcsMTM5LDE0
OSwxNTEsMTU3LDE2MywxNjcsMTczLDE3OSwxODEsMTkxLDE5MywxOTcsMTk5LDIxMSwyMjMsMjI3
LDIyOSwyMzMsMjM5LDI0MSwyNTEsMjU3LDI2MywyNjksMjcxLDI3NywyODEsMjgzLDI5MywzMDcs
MzExLDMxMywzMTcsMzMxLDMzNywzNDcsMzQ5LDM1MywzNTksMzY3LDM3MywzNzksMzgzLDM4OSwz
OTcsNDAxLDQwOSw0MTksNDIxLDQzMSw0MzMsNDM5LDQ0Myw0NDksNDU3LDQ2MSw0NjMsNDY3LDQ3
OSw0ODcsNDkxLDQ5OSw1MDMsNTA5XTsKK3ZhciBscGxpbSA9ICgxPDwyNikvbG93cHJpbWVzW2xv
d3ByaW1lcy5sZW5ndGgtMV07CisKKy8vIChwdWJsaWMpIHRlc3QgcHJpbWFsaXR5IHdpdGggY2Vy
dGFpbnR5ID49IDEtLjVedAorZnVuY3Rpb24gYm5Jc1Byb2JhYmxlUHJpbWUodCkgeworICB2YXIg
aSwgeCA9IHRoaXMuYWJzKCk7CisgIHZhciB4X2FycmF5ID0geC5hcnJheTsKKyAgaWYoeC50ID09
IDEgJiYgeF9hcnJheVswXSA8PSBsb3dwcmltZXNbbG93cHJpbWVzLmxlbmd0aC0xXSkgeworICAg
IGZvcihpID0gMDsgaSA8IGxvd3ByaW1lcy5sZW5ndGg7ICsraSkKKyAgICAgIGlmKHhfYXJyYXlb
MF0gPT0gbG93cHJpbWVzW2ldKSByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0K
KyAgaWYoeC5pc0V2ZW4oKSkgcmV0dXJuIGZhbHNlOworICBpID0gMTsKKyAgd2hpbGUoaSA8IGxv
d3ByaW1lcy5sZW5ndGgpIHsKKyAgICB2YXIgbSA9IGxvd3ByaW1lc1tpXSwgaiA9IGkrMTsKKyAg
ICB3aGlsZShqIDwgbG93cHJpbWVzLmxlbmd0aCAmJiBtIDwgbHBsaW0pIG0gKj0gbG93cHJpbWVz
W2orK107CisgICAgbSA9IHgubW9kSW50KG0pOworICAgIHdoaWxlKGkgPCBqKSBpZihtJWxvd3By
aW1lc1tpKytdID09IDApIHJldHVybiBmYWxzZTsKKyAgfQorICByZXR1cm4geC5taWxsZXJSYWJp
bih0KTsKK30KKworLy8gKHByb3RlY3RlZCkgdHJ1ZSBpZiBwcm9iYWJseSBwcmltZSAoSEFDIDQu
MjQsIE1pbGxlci1SYWJpbikKK2Z1bmN0aW9uIGJucE1pbGxlclJhYmluKHQpIHsKKyAgdmFyIG4x
ID0gdGhpcy5zdWJ0cmFjdChCaWdJbnRlZ2VyLk9ORSk7CisgIHZhciBrID0gbjEuZ2V0TG93ZXN0
U2V0Qml0KCk7CisgIGlmKGsgPD0gMCkgcmV0dXJuIGZhbHNlOworICB2YXIgciA9IG4xLnNoaWZ0
UmlnaHQoayk7CisgIHQgPSAodCsxKT4+MTsKKyAgaWYodCA+IGxvd3ByaW1lcy5sZW5ndGgpIHQg
PSBsb3dwcmltZXMubGVuZ3RoOworICB2YXIgYSA9IG5iaSgpOworICBmb3IodmFyIGkgPSAwOyBp
IDwgdDsgKytpKSB7CisgICAgYS5mcm9tSW50KGxvd3ByaW1lc1tpXSk7CisgICAgdmFyIHkgPSBh
Lm1vZFBvdyhyLHRoaXMpOworICAgIGlmKHkuY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKSAhPSAw
ICYmIHkuY29tcGFyZVRvKG4xKSAhPSAwKSB7CisgICAgICB2YXIgaiA9IDE7CisgICAgICB3aGls
ZShqKysgPCBrICYmIHkuY29tcGFyZVRvKG4xKSAhPSAwKSB7CisgICAgICAgIHkgPSB5Lm1vZFBv
d0ludCgyLHRoaXMpOworICAgICAgICBpZih5LmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSkgPT0g
MCkgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgICAgaWYoeS5jb21wYXJlVG8objEpICE9IDAp
IHJldHVybiBmYWxzZTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHRydWU7Cit9CisKKy8vIHByb3Rl
Y3RlZAorQmlnSW50ZWdlci5wcm90b3R5cGUuY2h1bmtTaXplID0gYm5wQ2h1bmtTaXplOworQmln
SW50ZWdlci5wcm90b3R5cGUudG9SYWRpeCA9IGJucFRvUmFkaXg7CitCaWdJbnRlZ2VyLnByb3Rv
dHlwZS5mcm9tUmFkaXggPSBibnBGcm9tUmFkaXg7CitCaWdJbnRlZ2VyLnByb3RvdHlwZS5mcm9t
TnVtYmVyID0gYm5wRnJvbU51bWJlcjsKK0JpZ0ludGVnZXIucHJvdG90eXBlLmJpdHdpc2VUbyA9
IGJucEJpdHdpc2VUbzsKK0JpZ0ludGVnZXIucHJvdG90eXBlLmNoYW5nZUJpdCA9IGJucENoYW5n
ZUJpdDsKK0JpZ0ludGVnZXIucHJvdG90eXBlLmFkZFRvID0gYm5wQWRkVG87CitCaWdJbnRlZ2Vy
LnByb3RvdHlwZS5kTXVsdGlwbHkgPSBibnBETXVsdGlwbHk7CitCaWdJbnRlZ2VyLnByb3RvdHlw
ZS5kQWRkT2Zmc2V0ID0gYm5wREFkZE9mZnNldDsKK0JpZ0ludGVnZXIucHJvdG90eXBlLm11bHRp
cGx5TG93ZXJUbyA9IGJucE11bHRpcGx5TG93ZXJUbzsKK0JpZ0ludGVnZXIucHJvdG90eXBlLm11
bHRpcGx5VXBwZXJUbyA9IGJucE11bHRpcGx5VXBwZXJUbzsKK0JpZ0ludGVnZXIucHJvdG90eXBl
Lm1vZEludCA9IGJucE1vZEludDsKK0JpZ0ludGVnZXIucHJvdG90eXBlLm1pbGxlclJhYmluID0g
Ym5wTWlsbGVyUmFiaW47CisKKy8vIHB1YmxpYworQmlnSW50ZWdlci5wcm90b3R5cGUuY2xvbmUg
PSBibkNsb25lOworQmlnSW50ZWdlci5wcm90b3R5cGUuaW50VmFsdWUgPSBibkludFZhbHVlOwor
QmlnSW50ZWdlci5wcm90b3R5cGUuYnl0ZVZhbHVlID0gYm5CeXRlVmFsdWU7CitCaWdJbnRlZ2Vy
LnByb3RvdHlwZS5zaG9ydFZhbHVlID0gYm5TaG9ydFZhbHVlOworQmlnSW50ZWdlci5wcm90b3R5
cGUuc2lnbnVtID0gYm5TaWdOdW07CitCaWdJbnRlZ2VyLnByb3RvdHlwZS50b0J5dGVBcnJheSA9
IGJuVG9CeXRlQXJyYXk7CitCaWdJbnRlZ2VyLnByb3RvdHlwZS5lcXVhbHMgPSBibkVxdWFsczsK
K0JpZ0ludGVnZXIucHJvdG90eXBlLm1pbiA9IGJuTWluOworQmlnSW50ZWdlci5wcm90b3R5cGUu
bWF4ID0gYm5NYXg7CitCaWdJbnRlZ2VyLnByb3RvdHlwZS5hbmQgPSBibkFuZDsKK0JpZ0ludGVn
ZXIucHJvdG90eXBlLm9yID0gYm5PcjsKK0JpZ0ludGVnZXIucHJvdG90eXBlLnhvciA9IGJuWG9y
OworQmlnSW50ZWdlci5wcm90b3R5cGUuYW5kTm90ID0gYm5BbmROb3Q7CitCaWdJbnRlZ2VyLnBy
b3RvdHlwZS5ub3QgPSBibk5vdDsKK0JpZ0ludGVnZXIucHJvdG90eXBlLnNoaWZ0TGVmdCA9IGJu
U2hpZnRMZWZ0OworQmlnSW50ZWdlci5wcm90b3R5cGUuc2hpZnRSaWdodCA9IGJuU2hpZnRSaWdo
dDsKK0JpZ0ludGVnZXIucHJvdG90eXBlLmdldExvd2VzdFNldEJpdCA9IGJuR2V0TG93ZXN0U2V0
Qml0OworQmlnSW50ZWdlci5wcm90b3R5cGUuYml0Q291bnQgPSBibkJpdENvdW50OworQmlnSW50
ZWdlci5wcm90b3R5cGUudGVzdEJpdCA9IGJuVGVzdEJpdDsKK0JpZ0ludGVnZXIucHJvdG90eXBl
LnNldEJpdCA9IGJuU2V0Qml0OworQmlnSW50ZWdlci5wcm90b3R5cGUuY2xlYXJCaXQgPSBibkNs
ZWFyQml0OworQmlnSW50ZWdlci5wcm90b3R5cGUuZmxpcEJpdCA9IGJuRmxpcEJpdDsKK0JpZ0lu
dGVnZXIucHJvdG90eXBlLmFkZCA9IGJuQWRkOworQmlnSW50ZWdlci5wcm90b3R5cGUuc3VidHJh
Y3QgPSBiblN1YnRyYWN0OworQmlnSW50ZWdlci5wcm90b3R5cGUubXVsdGlwbHkgPSBibk11bHRp
cGx5OworQmlnSW50ZWdlci5wcm90b3R5cGUuZGl2aWRlID0gYm5EaXZpZGU7CitCaWdJbnRlZ2Vy
LnByb3RvdHlwZS5yZW1haW5kZXIgPSBiblJlbWFpbmRlcjsKK0JpZ0ludGVnZXIucHJvdG90eXBl
LmRpdmlkZUFuZFJlbWFpbmRlciA9IGJuRGl2aWRlQW5kUmVtYWluZGVyOworQmlnSW50ZWdlci5w
cm90b3R5cGUubW9kUG93ID0gYm5Nb2RQb3c7CitCaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2RJbnZl
cnNlID0gYm5Nb2RJbnZlcnNlOworQmlnSW50ZWdlci5wcm90b3R5cGUucG93ID0gYm5Qb3c7CitC
aWdJbnRlZ2VyLnByb3RvdHlwZS5nY2QgPSBibkdDRDsKK0JpZ0ludGVnZXIucHJvdG90eXBlLmlz
UHJvYmFibGVQcmltZSA9IGJuSXNQcm9iYWJsZVByaW1lOworCisvLyBCaWdJbnRlZ2VyIGludGVy
ZmFjZXMgbm90IGltcGxlbWVudGVkIGluIGpzYm46CisKKy8vIEJpZ0ludGVnZXIoaW50IHNpZ251
bSwgYnl0ZVtdIG1hZ25pdHVkZSkKKy8vIGRvdWJsZSBkb3VibGVWYWx1ZSgpCisvLyBmbG9hdCBm
bG9hdFZhbHVlKCkKKy8vIGludCBoYXNoQ29kZSgpCisvLyBsb25nIGxvbmdWYWx1ZSgpCisvLyBz
dGF0aWMgQmlnSW50ZWdlciB2YWx1ZU9mKGxvbmcgdmFsKQorLy8gcHJuZzQuanMgLSB1c2VzIEFy
Y2ZvdXIgYXMgYSBQUk5HCisKK2Z1bmN0aW9uIEFyY2ZvdXIoKSB7CisgIHRoaXMuaSA9IDA7Cisg
IHRoaXMuaiA9IDA7CisgIHRoaXMuUyA9IG5ldyBBcnJheSgpOworfQorCisvLyBJbml0aWFsaXpl
IGFyY2ZvdXIgY29udGV4dCBmcm9tIGtleSwgYW4gYXJyYXkgb2YgaW50cywgZWFjaCBmcm9tIFsw
Li4yNTVdCitmdW5jdGlvbiBBUkM0aW5pdChrZXkpIHsKKyAgdmFyIGksIGosIHQ7CisgIGZvcihp
ID0gMDsgaSA8IDI1NjsgKytpKQorICAgIHRoaXMuU1tpXSA9IGk7CisgIGogPSAwOworICBmb3Io
aSA9IDA7IGkgPCAyNTY7ICsraSkgeworICAgIGogPSAoaiArIHRoaXMuU1tpXSArIGtleVtpICUg
a2V5Lmxlbmd0aF0pICYgMjU1OworICAgIHQgPSB0aGlzLlNbaV07CisgICAgdGhpcy5TW2ldID0g
dGhpcy5TW2pdOworICAgIHRoaXMuU1tqXSA9IHQ7CisgIH0KKyAgdGhpcy5pID0gMDsKKyAgdGhp
cy5qID0gMDsKK30KKworZnVuY3Rpb24gQVJDNG5leHQoKSB7CisgIHZhciB0OworICB0aGlzLmkg
PSAodGhpcy5pICsgMSkgJiAyNTU7CisgIHRoaXMuaiA9ICh0aGlzLmogKyB0aGlzLlNbdGhpcy5p
XSkgJiAyNTU7CisgIHQgPSB0aGlzLlNbdGhpcy5pXTsKKyAgdGhpcy5TW3RoaXMuaV0gPSB0aGlz
LlNbdGhpcy5qXTsKKyAgdGhpcy5TW3RoaXMual0gPSB0OworICByZXR1cm4gdGhpcy5TWyh0ICsg
dGhpcy5TW3RoaXMuaV0pICYgMjU1XTsKK30KKworQXJjZm91ci5wcm90b3R5cGUuaW5pdCA9IEFS
QzRpbml0OworQXJjZm91ci5wcm90b3R5cGUubmV4dCA9IEFSQzRuZXh0OworCisvLyBQbHVnIGlu
IHlvdXIgUk5HIGNvbnN0cnVjdG9yIGhlcmUKK2Z1bmN0aW9uIHBybmdfbmV3c3RhdGUoKSB7Cisg
IHJldHVybiBuZXcgQXJjZm91cigpOworfQorCisvLyBQb29sIHNpemUgbXVzdCBiZSBhIG11bHRp
cGxlIG9mIDQgYW5kIGdyZWF0ZXIgdGhhbiAzMi4KKy8vIEFuIGFycmF5IG9mIGJ5dGVzIHRoZSBz
aXplIG9mIHRoZSBwb29sIHdpbGwgYmUgcGFzc2VkIHRvIGluaXQoKQordmFyIHJuZ19wc2l6ZSA9
IDI1NjsKKy8vIFJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIC0gcmVxdWlyZXMgYSBQUk5HIGJhY2tl
bmQsIGUuZy4gcHJuZzQuanMKKworLy8gRm9yIGJlc3QgcmVzdWx0cywgcHV0IGNvZGUgbGlrZQor
Ly8gPGJvZHkgb25DbGljaz0ncm5nX3NlZWRfdGltZSgpOycgb25LZXlQcmVzcz0ncm5nX3NlZWRf
dGltZSgpOyc+CisvLyBpbiB5b3VyIG1haW4gSFRNTCBkb2N1bWVudC4KKwordmFyIHJuZ19zdGF0
ZTsKK3ZhciBybmdfcG9vbDsKK3ZhciBybmdfcHB0cjsKKworLy8gTWl4IGluIGEgMzItYml0IGlu
dGVnZXIgaW50byB0aGUgcG9vbAorZnVuY3Rpb24gcm5nX3NlZWRfaW50KHgpIHsKKyAgcm5nX3Bv
b2xbcm5nX3BwdHIrK10gXj0geCAmIDI1NTsKKyAgcm5nX3Bvb2xbcm5nX3BwdHIrK10gXj0gKHgg
Pj4gOCkgJiAyNTU7CisgIHJuZ19wb29sW3JuZ19wcHRyKytdIF49ICh4ID4+IDE2KSAmIDI1NTsK
KyAgcm5nX3Bvb2xbcm5nX3BwdHIrK10gXj0gKHggPj4gMjQpICYgMjU1OworICBpZihybmdfcHB0
ciA+PSBybmdfcHNpemUpIHJuZ19wcHRyIC09IHJuZ19wc2l6ZTsKK30KKworLy8gTWl4IGluIHRo
ZSBjdXJyZW50IHRpbWUgKHcvbWlsbGlzZWNvbmRzKSBpbnRvIHRoZSBwb29sCitmdW5jdGlvbiBy
bmdfc2VlZF90aW1lKCkgeworICBybmdfc2VlZF9pbnQobmV3IERhdGUoKS5nZXRUaW1lKCkpOwor
fQorCisvLyBJbml0aWFsaXplIHRoZSBwb29sIHdpdGgganVuayBpZiBuZWVkZWQuCitpZihybmdf
cG9vbCA9PSBudWxsKSB7CisgIHJuZ19wb29sID0gbmV3IEFycmF5KCk7CisgIHJuZ19wcHRyID0g
MDsKKyAgdmFyIHQ7CisgIHdoaWxlKHJuZ19wcHRyIDwgcm5nX3BzaXplKSB7ICAvLyBleHRyYWN0
IHNvbWUgcmFuZG9tbmVzcyBmcm9tIE1hdGgucmFuZG9tKCkKKyAgICB0ID0gTWF0aC5mbG9vcig2
NTUzNiAqIE1hdGgucmFuZG9tKCkpOworICAgIHJuZ19wb29sW3JuZ19wcHRyKytdID0gdCA+Pj4g
ODsKKyAgICBybmdfcG9vbFtybmdfcHB0cisrXSA9IHQgJiAyNTU7CisgIH0KKyAgcm5nX3BwdHIg
PSAwOworICBybmdfc2VlZF90aW1lKCk7CisgIC8vcm5nX3NlZWRfaW50KHdpbmRvdy5zY3JlZW5Y
KTsKKyAgLy9ybmdfc2VlZF9pbnQod2luZG93LnNjcmVlblkpOworfQorCitmdW5jdGlvbiBybmdf
Z2V0X2J5dGUoKSB7CisgIGlmKHJuZ19zdGF0ZSA9PSBudWxsKSB7CisgICAgcm5nX3NlZWRfdGlt
ZSgpOworICAgIHJuZ19zdGF0ZSA9IHBybmdfbmV3c3RhdGUoKTsKKyAgICBybmdfc3RhdGUuaW5p
dChybmdfcG9vbCk7CisgICAgZm9yKHJuZ19wcHRyID0gMDsgcm5nX3BwdHIgPCBybmdfcG9vbC5s
ZW5ndGg7ICsrcm5nX3BwdHIpCisgICAgICBybmdfcG9vbFtybmdfcHB0cl0gPSAwOworICAgIHJu
Z19wcHRyID0gMDsKKyAgICAvL3JuZ19wb29sID0gbnVsbDsKKyAgfQorICAvLyBUT0RPOiBhbGxv
dyByZXNlZWRpbmcgYWZ0ZXIgZmlyc3QgcmVxdWVzdAorICByZXR1cm4gcm5nX3N0YXRlLm5leHQo
KTsKK30KKworZnVuY3Rpb24gcm5nX2dldF9ieXRlcyhiYSkgeworICB2YXIgaTsKKyAgZm9yKGkg
PSAwOyBpIDwgYmEubGVuZ3RoOyArK2kpIGJhW2ldID0gcm5nX2dldF9ieXRlKCk7Cit9CisKK2Z1
bmN0aW9uIFNlY3VyZVJhbmRvbSgpIHt9CisKK1NlY3VyZVJhbmRvbS5wcm90b3R5cGUubmV4dEJ5
dGVzID0gcm5nX2dldF9ieXRlczsKKy8vIERlcGVuZHMgb24ganNibi5qcyBhbmQgcm5nLmpzCisK
Ky8vIGNvbnZlcnQgYSAoaGV4KSBzdHJpbmcgdG8gYSBiaWdudW0gb2JqZWN0CitmdW5jdGlvbiBw
YXJzZUJpZ0ludChzdHIscikgeworICByZXR1cm4gbmV3IEJpZ0ludGVnZXIoc3RyLHIpOworfQor
CitmdW5jdGlvbiBsaW5lYnJrKHMsbikgeworICB2YXIgcmV0ID0gIiI7CisgIHZhciBpID0gMDsK
KyAgd2hpbGUoaSArIG4gPCBzLmxlbmd0aCkgeworICAgIHJldCArPSBzLnN1YnN0cmluZyhpLGkr
bikgKyAiXG4iOworICAgIGkgKz0gbjsKKyAgfQorICByZXR1cm4gcmV0ICsgcy5zdWJzdHJpbmco
aSxzLmxlbmd0aCk7Cit9CisKK2Z1bmN0aW9uIGJ5dGUySGV4KGIpIHsKKyAgaWYoYiA8IDB4MTAp
CisgICAgcmV0dXJuICIwIiArIGIudG9TdHJpbmcoMTYpOworICBlbHNlCisgICAgcmV0dXJuIGIu
dG9TdHJpbmcoMTYpOworfQorCisvLyBQS0NTIzEgKHR5cGUgMiwgcmFuZG9tKSBwYWQgaW5wdXQg
c3RyaW5nIHMgdG8gbiBieXRlcywgYW5kIHJldHVybiBhIGJpZ2ludAorZnVuY3Rpb24gcGtjczFw
YWQyKHMsbikgeworICBpZihuIDwgcy5sZW5ndGggKyAxMSkgeworICAgIGFsZXJ0KCJNZXNzYWdl
IHRvbyBsb25nIGZvciBSU0EiKTsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorICB2YXIgYmEgPSBu
ZXcgQXJyYXkoKTsKKyAgdmFyIGkgPSBzLmxlbmd0aCAtIDE7CisgIHdoaWxlKGkgPj0gMCAmJiBu
ID4gMCkgYmFbLS1uXSA9IHMuY2hhckNvZGVBdChpLS0pOworICBiYVstLW5dID0gMDsKKyAgdmFy
IHJuZyA9IG5ldyBTZWN1cmVSYW5kb20oKTsKKyAgdmFyIHggPSBuZXcgQXJyYXkoKTsKKyAgd2hp
bGUobiA+IDIpIHsgLy8gcmFuZG9tIG5vbi16ZXJvIHBhZAorICAgIHhbMF0gPSAwOworICAgIHdo
aWxlKHhbMF0gPT0gMCkgcm5nLm5leHRCeXRlcyh4KTsKKyAgICBiYVstLW5dID0geFswXTsKKyAg
fQorICBiYVstLW5dID0gMjsKKyAgYmFbLS1uXSA9IDA7CisgIHJldHVybiBuZXcgQmlnSW50ZWdl
cihiYSk7Cit9CisKKy8vICJlbXB0eSIgUlNBIGtleSBjb25zdHJ1Y3RvcgorZnVuY3Rpb24gUlNB
S2V5KCkgeworICB0aGlzLm4gPSBudWxsOworICB0aGlzLmUgPSAwOworICB0aGlzLmQgPSBudWxs
OworICB0aGlzLnAgPSBudWxsOworICB0aGlzLnEgPSBudWxsOworICB0aGlzLmRtcDEgPSBudWxs
OworICB0aGlzLmRtcTEgPSBudWxsOworICB0aGlzLmNvZWZmID0gbnVsbDsKK30KKworLy8gU2V0
IHRoZSBwdWJsaWMga2V5IGZpZWxkcyBOIGFuZCBlIGZyb20gaGV4IHN0cmluZ3MKK2Z1bmN0aW9u
IFJTQVNldFB1YmxpYyhOLEUpIHsKKyAgaWYoTiAhPSBudWxsICYmIEUgIT0gbnVsbCAmJiBOLmxl
bmd0aCA+IDAgJiYgRS5sZW5ndGggPiAwKSB7CisgICAgdGhpcy5uID0gcGFyc2VCaWdJbnQoTiwx
Nik7CisgICAgdGhpcy5lID0gcGFyc2VJbnQoRSwxNik7CisgIH0KKyAgZWxzZQorICAgIGFsZXJ0
KCJJbnZhbGlkIFJTQSBwdWJsaWMga2V5Iik7Cit9CisKKy8vIFBlcmZvcm0gcmF3IHB1YmxpYyBv
cGVyYXRpb24gb24gIngiOiByZXR1cm4geF5lIChtb2QgbikKK2Z1bmN0aW9uIFJTQURvUHVibGlj
KHgpIHsKKyAgcmV0dXJuIHgubW9kUG93SW50KHRoaXMuZSwgdGhpcy5uKTsKK30KKworLy8gUmV0
dXJuIHRoZSBQS0NTIzEgUlNBIGVuY3J5cHRpb24gb2YgInRleHQiIGFzIGFuIGV2ZW4tbGVuZ3Ro
IGhleCBzdHJpbmcKK2Z1bmN0aW9uIFJTQUVuY3J5cHQodGV4dCkgeworICB2YXIgbSA9IHBrY3Mx
cGFkMih0ZXh0LCh0aGlzLm4uYml0TGVuZ3RoKCkrNyk+PjMpOworICBpZihtID09IG51bGwpIHJl
dHVybiBudWxsOworICB2YXIgYyA9IHRoaXMuZG9QdWJsaWMobSk7CisgIGlmKGMgPT0gbnVsbCkg
cmV0dXJuIG51bGw7CisgIHZhciBoID0gYy50b1N0cmluZygxNik7CisgIGlmKChoLmxlbmd0aCAm
IDEpID09IDApIHJldHVybiBoOyBlbHNlIHJldHVybiAiMCIgKyBoOworfQorCisvLyBSZXR1cm4g
dGhlIFBLQ1MjMSBSU0EgZW5jcnlwdGlvbiBvZiAidGV4dCIgYXMgYSBCYXNlNjQtZW5jb2RlZCBz
dHJpbmcKKy8vZnVuY3Rpb24gUlNBRW5jcnlwdEI2NCh0ZXh0KSB7CisvLyAgdmFyIGggPSB0aGlz
LmVuY3J5cHQodGV4dCk7CisvLyAgaWYoaCkgcmV0dXJuIGhleDJiNjQoaCk7IGVsc2UgcmV0dXJu
IG51bGw7CisvL30KKworLy8gcHJvdGVjdGVkCitSU0FLZXkucHJvdG90eXBlLmRvUHVibGljID0g
UlNBRG9QdWJsaWM7CisKKy8vIHB1YmxpYworUlNBS2V5LnByb3RvdHlwZS5zZXRQdWJsaWMgPSBS
U0FTZXRQdWJsaWM7CitSU0FLZXkucHJvdG90eXBlLmVuY3J5cHQgPSBSU0FFbmNyeXB0OworLy9S
U0FLZXkucHJvdG90eXBlLmVuY3J5cHRfYjY0ID0gUlNBRW5jcnlwdEI2NDsKKy8vIERlcGVuZHMg
b24gcnNhLmpzIGFuZCBqc2JuMi5qcworCisvLyBVbmRvIFBLQ1MjMSAodHlwZSAyLCByYW5kb20p
IHBhZGRpbmcgYW5kLCBpZiB2YWxpZCwgcmV0dXJuIHRoZSBwbGFpbnRleHQKK2Z1bmN0aW9uIHBr
Y3MxdW5wYWQyKGQsbikgeworICB2YXIgYiA9IGQudG9CeXRlQXJyYXkoKTsKKyAgdmFyIGkgPSAw
OworICB3aGlsZShpIDwgYi5sZW5ndGggJiYgYltpXSA9PSAwKSArK2k7CisgIGlmKGIubGVuZ3Ro
LWkgIT0gbi0xIHx8IGJbaV0gIT0gMikKKyAgICByZXR1cm4gbnVsbDsKKyAgKytpOworICB3aGls
ZShiW2ldICE9IDApCisgICAgaWYoKytpID49IGIubGVuZ3RoKSByZXR1cm4gbnVsbDsKKyAgdmFy
IHJldCA9ICIiOworICB3aGlsZSgrK2kgPCBiLmxlbmd0aCkKKyAgICByZXQgKz0gU3RyaW5nLmZy
b21DaGFyQ29kZShiW2ldKTsKKyAgcmV0dXJuIHJldDsKK30KKworLy8gU2V0IHRoZSBwcml2YXRl
IGtleSBmaWVsZHMgTiwgZSwgYW5kIGQgZnJvbSBoZXggc3RyaW5ncworZnVuY3Rpb24gUlNBU2V0
UHJpdmF0ZShOLEUsRCkgeworICBpZihOICE9IG51bGwgJiYgRSAhPSBudWxsICYmIE4ubGVuZ3Ro
ID4gMCAmJiBFLmxlbmd0aCA+IDApIHsKKyAgICB0aGlzLm4gPSBwYXJzZUJpZ0ludChOLDE2KTsK
KyAgICB0aGlzLmUgPSBwYXJzZUludChFLDE2KTsKKyAgICB0aGlzLmQgPSBwYXJzZUJpZ0ludChE
LDE2KTsKKyAgfQorICBlbHNlCisgICAgYWxlcnQoIkludmFsaWQgUlNBIHByaXZhdGUga2V5Iik7
Cit9CisKKy8vIFNldCB0aGUgcHJpdmF0ZSBrZXkgZmllbGRzIE4sIGUsIGQgYW5kIENSVCBwYXJh
bXMgZnJvbSBoZXggc3RyaW5ncworZnVuY3Rpb24gUlNBU2V0UHJpdmF0ZUV4KE4sRSxELFAsUSxE
UCxEUSxDKSB7CisgIGlmKE4gIT0gbnVsbCAmJiBFICE9IG51bGwgJiYgTi5sZW5ndGggPiAwICYm
IEUubGVuZ3RoID4gMCkgeworICAgIHRoaXMubiA9IHBhcnNlQmlnSW50KE4sMTYpOworICAgIHRo
aXMuZSA9IHBhcnNlSW50KEUsMTYpOworICAgIHRoaXMuZCA9IHBhcnNlQmlnSW50KEQsMTYpOwor
ICAgIHRoaXMucCA9IHBhcnNlQmlnSW50KFAsMTYpOworICAgIHRoaXMucSA9IHBhcnNlQmlnSW50
KFEsMTYpOworICAgIHRoaXMuZG1wMSA9IHBhcnNlQmlnSW50KERQLDE2KTsKKyAgICB0aGlzLmRt
cTEgPSBwYXJzZUJpZ0ludChEUSwxNik7CisgICAgdGhpcy5jb2VmZiA9IHBhcnNlQmlnSW50KEMs
MTYpOworICB9CisgIGVsc2UKKyAgICBhbGVydCgiSW52YWxpZCBSU0EgcHJpdmF0ZSBrZXkiKTsK
K30KKworLy8gR2VuZXJhdGUgYSBuZXcgcmFuZG9tIHByaXZhdGUga2V5IEIgYml0cyBsb25nLCB1
c2luZyBwdWJsaWMgZXhwdCBFCitmdW5jdGlvbiBSU0FHZW5lcmF0ZShCLEUpIHsKKyAgdmFyIHJu
ZyA9IG5ldyBTZWN1cmVSYW5kb20oKTsKKyAgdmFyIHFzID0gQj4+MTsKKyAgdGhpcy5lID0gcGFy
c2VJbnQoRSwxNik7CisgIHZhciBlZSA9IG5ldyBCaWdJbnRlZ2VyKEUsMTYpOworICBmb3IoOzsp
IHsKKyAgICBmb3IoOzspIHsKKyAgICAgIHRoaXMucCA9IG5ldyBCaWdJbnRlZ2VyKEItcXMsMSxy
bmcpOworICAgICAgaWYodGhpcy5wLnN1YnRyYWN0KEJpZ0ludGVnZXIuT05FKS5nY2QoZWUpLmNv
bXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSkgPT0gMCAmJiB0aGlzLnAuaXNQcm9iYWJsZVByaW1lKDEw
KSkgYnJlYWs7CisgICAgfQorICAgIGZvcig7OykgeworICAgICAgdGhpcy5xID0gbmV3IEJpZ0lu
dGVnZXIocXMsMSxybmcpOworICAgICAgaWYodGhpcy5xLnN1YnRyYWN0KEJpZ0ludGVnZXIuT05F
KS5nY2QoZWUpLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSkgPT0gMCAmJiB0aGlzLnEuaXNQcm9i
YWJsZVByaW1lKDEwKSkgYnJlYWs7CisgICAgfQorICAgIGlmKHRoaXMucC5jb21wYXJlVG8odGhp
cy5xKSA8PSAwKSB7CisgICAgICB2YXIgdCA9IHRoaXMucDsKKyAgICAgIHRoaXMucCA9IHRoaXMu
cTsKKyAgICAgIHRoaXMucSA9IHQ7CisgICAgfQorICAgIHZhciBwMSA9IHRoaXMucC5zdWJ0cmFj
dChCaWdJbnRlZ2VyLk9ORSk7CisgICAgdmFyIHExID0gdGhpcy5xLnN1YnRyYWN0KEJpZ0ludGVn
ZXIuT05FKTsKKyAgICB2YXIgcGhpID0gcDEubXVsdGlwbHkocTEpOworICAgIGlmKHBoaS5nY2Qo
ZWUpLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSkgPT0gMCkgeworICAgICAgdGhpcy5uID0gdGhp
cy5wLm11bHRpcGx5KHRoaXMucSk7CisgICAgICB0aGlzLmQgPSBlZS5tb2RJbnZlcnNlKHBoaSk7
CisgICAgICB0aGlzLmRtcDEgPSB0aGlzLmQubW9kKHAxKTsKKyAgICAgIHRoaXMuZG1xMSA9IHRo
aXMuZC5tb2QocTEpOworICAgICAgdGhpcy5jb2VmZiA9IHRoaXMucS5tb2RJbnZlcnNlKHRoaXMu
cCk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KK30KKworLy8gUGVyZm9ybSByYXcgcHJpdmF0
ZSBvcGVyYXRpb24gb24gIngiOiByZXR1cm4geF5kIChtb2QgbikKK2Z1bmN0aW9uIFJTQURvUHJp
dmF0ZSh4KSB7CisgIGlmKHRoaXMucCA9PSBudWxsIHx8IHRoaXMucSA9PSBudWxsKQorICAgIHJl
dHVybiB4Lm1vZFBvdyh0aGlzLmQsIHRoaXMubik7CisKKyAgLy8gVE9ETzogcmUtY2FsY3VsYXRl
IGFueSBtaXNzaW5nIENSVCBwYXJhbXMKKyAgdmFyIHhwID0geC5tb2QodGhpcy5wKS5tb2RQb3co
dGhpcy5kbXAxLCB0aGlzLnApOworICB2YXIgeHEgPSB4Lm1vZCh0aGlzLnEpLm1vZFBvdyh0aGlz
LmRtcTEsIHRoaXMucSk7CisKKyAgd2hpbGUoeHAuY29tcGFyZVRvKHhxKSA8IDApCisgICAgeHAg
PSB4cC5hZGQodGhpcy5wKTsKKyAgcmV0dXJuIHhwLnN1YnRyYWN0KHhxKS5tdWx0aXBseSh0aGlz
LmNvZWZmKS5tb2QodGhpcy5wKS5tdWx0aXBseSh0aGlzLnEpLmFkZCh4cSk7Cit9CisKKy8vIFJl
dHVybiB0aGUgUEtDUyMxIFJTQSBkZWNyeXB0aW9uIG9mICJjdGV4dCIuCisvLyAiY3RleHQiIGlz
IGFuIGV2ZW4tbGVuZ3RoIGhleCBzdHJpbmcgYW5kIHRoZSBvdXRwdXQgaXMgYSBwbGFpbiBzdHJp
bmcuCitmdW5jdGlvbiBSU0FEZWNyeXB0KGN0ZXh0KSB7CisgIHZhciBjID0gcGFyc2VCaWdJbnQo
Y3RleHQsIDE2KTsKKyAgdmFyIG0gPSB0aGlzLmRvUHJpdmF0ZShjKTsKKyAgaWYobSA9PSBudWxs
KSByZXR1cm4gbnVsbDsKKyAgcmV0dXJuIHBrY3MxdW5wYWQyKG0sICh0aGlzLm4uYml0TGVuZ3Ro
KCkrNyk+PjMpOworfQorCisvLyBSZXR1cm4gdGhlIFBLQ1MjMSBSU0EgZGVjcnlwdGlvbiBvZiAi
Y3RleHQiLgorLy8gImN0ZXh0IiBpcyBhIEJhc2U2NC1lbmNvZGVkIHN0cmluZyBhbmQgdGhlIG91
dHB1dCBpcyBhIHBsYWluIHN0cmluZy4KKy8vZnVuY3Rpb24gUlNBQjY0RGVjcnlwdChjdGV4dCkg
eworLy8gIHZhciBoID0gYjY0dG9oZXgoY3RleHQpOworLy8gIGlmKGgpIHJldHVybiB0aGlzLmRl
Y3J5cHQoaCk7IGVsc2UgcmV0dXJuIG51bGw7CisvL30KKworLy8gcHJvdGVjdGVkCitSU0FLZXku
cHJvdG90eXBlLmRvUHJpdmF0ZSA9IFJTQURvUHJpdmF0ZTsKKworLy8gcHVibGljCitSU0FLZXku
cHJvdG90eXBlLnNldFByaXZhdGUgPSBSU0FTZXRQcml2YXRlOworUlNBS2V5LnByb3RvdHlwZS5z
ZXRQcml2YXRlRXggPSBSU0FTZXRQcml2YXRlRXg7CitSU0FLZXkucHJvdG90eXBlLmdlbmVyYXRl
ID0gUlNBR2VuZXJhdGU7CitSU0FLZXkucHJvdG90eXBlLmRlY3J5cHQgPSBSU0FEZWNyeXB0Owor
Ly9SU0FLZXkucHJvdG90eXBlLmI2NF9kZWNyeXB0ID0gUlNBQjY0RGVjcnlwdDsKKworCituVmFs
dWU9ImE1MjYxOTM5OTc1OTQ4YmI3YTU4ZGZmZTVmZjU0ZTY1ZjA0OThmOTE3NWY1YTA5Mjg4ODEw
Yjg5NzU4NzFlOTlhZjNiNWRkOTQwNTdiMGZjMDc1MzVmNWY5NzQ0NDUwNGZhMzUxNjlkNDYxZDBk
MzBjZjAxOTJlMzA3NzI3YzA2NTE2OGM3ODg3NzFjNTYxYTk0MDBmYjQ5MTc1ZTllNmFhNGUyM2Zl
MTFhZjY5ZTk0MTJkZDIzYjBjYjY2ODRjNGMyNDI5YmNlMTM5ZTg0OGFiMjZkMDgyOTA3MzM1MWY0
YWNkMzYwNzRlYWZkMDM2YTVlYjgzMzU5ZDJhNjk4ZDMiOworZVZhbHVlPSIxMDAwMSI7CitkVmFs
dWU9IjhlOTkxMmY2ZDM2NDU4OTRlOGQzOGNiNThjMGRiODFmZjUxNmNmNGM3ZTVhMTRjN2YxZWRk
YjE0NTlkMmNkZWQ0ZDhkMjkzZmM5N2FlZTZhZWZiODYxODU5YzhiNmEzZDFkZmU3MTA0NjNlMWY5
ZGRjNzIwNDhjMDk3NTE5NzFjNGE1ODBhYTUxZWI1MjMzNTdhM2NjNDhkMzFjZmFkMWQ0YTE2NTA2
NmVkOTJkNDc0OGZiNjU3MTIxMWRhNWNiMTRiYzExYjZlMmRmN2MxYTU1OWU2ZDVhYzFjZDVjOTQ3
MDNhMjI4OTE0NjRmYmEyM2QwZDk2NTA4NjI3N2ExNjEiOworcFZhbHVlPSJkMDkwY2U1OGE5MmM3
NTIzM2E2NDg2Y2IwYTkyMDliZjM1ODNiNjRmNTQwYzc2ZjUyOTRiYjk3ZDI4NWVlZDMzYWVjMjIw
YmRlMTRiMjQxNzk1MTE3OGFjMTUyY2VhYjZkYTcwOTA5MDViNDc4MTk1NDk4YjM1MjA0OGYxNWU3
ZCI7CitxVmFsdWU9ImNhYjU3NWRjNjUyYmI2NmRmMTVhMDM1OTYwOWQ1MWQxZGIxODQ3NTBjMDBj
NjY5OGI5MGVmMzQ2NWM5OTY1NTEwM2VkYmYwZDU0YzU2YWVjMGNlM2M0ZDIyNTkyMzM4MDkyYTEy
NmEwY2M0OWY2NWE0YTMwZDIyMmI0MTFlNThmIjsKK2RtcDFWYWx1ZT0iMWEyNGJjYThlMjczZGYy
ZjBlNDdjMTk5YmJmNjc4NjA0ZTdkZjcyMTU0ODBjNzdjOGRiMzlmNDliMDAwY2UyY2Y3NTAwMDM4
YWNmZmY1NDMzYjdkNTgyYTAxZjE4MjZlNmY0ZDQyZTFjNTdmNWUxZmVmN2IxMmFhYmM1OWZkMjUi
OworZG1xMVZhbHVlPSIzZDA2OTgyZWZiYmU0NzMzOWUxZjZkMzZiMTIxNmI4YTc0MWQ0MTBiMGM2
NjJmNTRmNzExOGIyN2I5YTRlYzlkOTE0MzM3ZWIzOTg0MWQ4NjY2ZjMwMzQ0MDhjZjk0ZjViNjJm
MTFjNDAyZmM5OTRmZTE1YTA1NDkzMTUwZDlmZCI7Citjb2VmZlZhbHVlPSIzYTNlNzMxYWNkODk2
MGI3ZmY5ZWI4MWE3ZmY5M2JkMWNmYTc0Y2JkNTY5ODdkYjU4YjQ1OTRmYjA5YzA5MDg0ZGIxNzM0
YzgxNDNmOThiNjAyYjk4MWFhYTkyNDNjYTI4ZGViNjliNWIyODBlZThkY2VlMGZkMjYyNWU1MzI1
MCI7CisKK3NldHVwRW5naW5lKGFtMywgMjgpOworCit2YXIgUlNBID0gbmV3IFJTQUtleSgpOwor
dmFyIFRFWFQgPSAiVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciB0aGUgZXh0cmVtZWx5
IGxhenkgZnJvZ3MhIjsKKworUlNBLnNldFB1YmxpYyhuVmFsdWUsIGVWYWx1ZSk7CitSU0Euc2V0
UHJpdmF0ZUV4KG5WYWx1ZSwgZVZhbHVlLCBkVmFsdWUsIHBWYWx1ZSwgcVZhbHVlLCBkbXAxVmFs
dWUsIGRtcTFWYWx1ZSwgY29lZmZWYWx1ZSk7CisKK2Z1bmN0aW9uIGVuY3J5cHQoKSB7CisgIHJl
dHVybiBSU0EuZW5jcnlwdChURVhUKTsKK30KKworZnVuY3Rpb24gZGVjcnlwdCgpIHsKKyAgcmV0
dXJuIFJTQS5kZWNyeXB0KFRFWFQpOworfQorCisvLyBlbmNyeXB0KCk7CisvLyBkZWNyeXB0KCk7
CkluZGV4OiBTdW5TcGlkZXIvdGVzdHMvdjgtZGVsdGFibHVlLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFN1
blNwaWRlci90ZXN0cy92OC1kZWx0YWJsdWUuanMJKHJldmlzaW9uIDApCisrKyBTdW5TcGlkZXIv
dGVzdHMvdjgtZGVsdGFibHVlLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg3NiBAQAorLy8g
Q29weXJpZ2h0IDIwMDggR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vIENvcHly
aWdodCAxOTk2IEpvaG4gTWFsb25leSBhbmQgTWFyaW8gV29sY3prby4KKworLy8gVGhpcyBwcm9n
cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp
ZnkKKy8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5CisvLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorLy8gKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKy8vCisvLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLy8KKy8vIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisvLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQorLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAs
IEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorCisKKy8vIFRoaXMgaW1wbGVtZW50YXRpb24g
b2YgdGhlIERlbHRhQmx1ZSBiZW5jaG1hcmsgaXMgZGVyaXZlZCAKKy8vIGZyb20gdGhlIFNtYWxs
dGFsayBpbXBsZW1lbnRhdGlvbiBieSBKb2huIE1hbG9uZXkgYW5kIE1hcmlvIAorLy8gV29sY3pr
by4gU29tZSBwYXJ0cyBoYXZlIGJlZW4gdHJhbnNsYXRlZCBkaXJlY3RseSwgd2hlcmVhcyAKKy8v
IG90aGVycyBoYXZlIGJlZW4gbW9kaWZpZWQgbW9yZSBhZ2dyZXNpdmVseSB0byBtYWtlIGl0IGZl
ZWwgCisvLyBtb3JlIGxpa2UgYSBKYXZhU2NyaXB0IHByb2dyYW0uCisKKy8qKgorICogQSBKYXZh
U2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBEZWx0YUJsdWUgY29uc3RyYWluLXNvbHZpbmcK
KyAqIGFsZ29yaXRobSwgYXMgZGVzY3JpYmVkIGluOgorICoKKyAqICJUaGUgRGVsdGFCbHVlIEFs
Z29yaXRobTogQW4gSW5jcmVtZW50YWwgQ29uc3RyYWludCBIaWVyYXJjaHkgU29sdmVyIgorICog
ICBCam9ybiBOLiBGcmVlbWFuLUJlbnNvbiBhbmQgSm9obiBNYWxvbmV5CisgKiAgIEphbnVhcnkg
MTk5MCBDb21tdW5pY2F0aW9ucyBvZiB0aGUgQUNNLAorICogICBhbHNvIGF2YWlsYWJsZSBhcyBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24gVFIgODktMDgtMDYuCisgKgorICogQmV3YXJlOiB0aGlz
IGJlbmNobWFyayBpcyB3cml0dGVuIGluIGEgZ3JvdGVzcXVlIHN0eWxlIHdoZXJlCisgKiB0aGUg
Y29uc3RyYWludCBtb2RlbCBpcyBidWlsdCBieSBzaWRlLWVmZmVjdHMgZnJvbSBjb25zdHJ1Y3Rv
cnMuCisgKiBJJ3ZlIGtlcHQgaXQgdGhpcyB3YXkgdG8gYXZvaWQgZGV2aWF0aW5nIHRvbyBtdWNo
IGZyb20gdGhlIG9yaWdpbmFsCisgKiBpbXBsZW1lbnRhdGlvbi4KKyAqLworCisKKy8qIC0tLSBP
IGIgaiBlIGMgdCAgIE0gbyBkIGUgbCAtLS0gKi8KKworT2JqZWN0LnByb3RvdHlwZS5pbmhlcml0
cyA9IGZ1bmN0aW9uIChzaHVwZXIpIHsKKyAgZnVuY3Rpb24gSW5oZXJpdGVyKCkgeyB9CisgIElu
aGVyaXRlci5wcm90b3R5cGUgPSBzaHVwZXIucHJvdG90eXBlOworICB0aGlzLnByb3RvdHlwZSA9
IG5ldyBJbmhlcml0ZXIoKTsKKyAgdGhpcy5zdXBlckNvbnN0cnVjdG9yID0gc2h1cGVyOworfQor
CitmdW5jdGlvbiBPcmRlcmVkQ29sbGVjdGlvbigpIHsKKyAgdGhpcy5lbG1zID0gbmV3IEFycmF5
KCk7Cit9CisKK09yZGVyZWRDb2xsZWN0aW9uLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoZWxt
KSB7CisgIHRoaXMuZWxtcy5wdXNoKGVsbSk7Cit9CisKK09yZGVyZWRDb2xsZWN0aW9uLnByb3Rv
dHlwZS5hdCA9IGZ1bmN0aW9uIChpbmRleCkgeworICByZXR1cm4gdGhpcy5lbG1zW2luZGV4XTsK
K30KKworT3JkZXJlZENvbGxlY3Rpb24ucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiAoKSB7Cisg
IHJldHVybiB0aGlzLmVsbXMubGVuZ3RoOworfQorCitPcmRlcmVkQ29sbGVjdGlvbi5wcm90b3R5
cGUucmVtb3ZlRmlyc3QgPSBmdW5jdGlvbiAoKSB7CisgIHJldHVybiB0aGlzLmVsbXMucG9wKCk7
Cit9CisKK09yZGVyZWRDb2xsZWN0aW9uLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoZWxt
KSB7CisgIHZhciBpbmRleCA9IDAsIHNraXBwZWQgPSAwOworICBmb3IgKHZhciBpID0gMDsgaSA8
IHRoaXMuZWxtcy5sZW5ndGg7IGkrKykgeworICAgIHZhciB2YWx1ZSA9IHRoaXMuZWxtc1tpXTsK
KyAgICBpZiAodmFsdWUgIT0gZWxtKSB7CisgICAgICB0aGlzLmVsbXNbaW5kZXhdID0gdmFsdWU7
CisgICAgICBpbmRleCsrOworICAgIH0gZWxzZSB7CisgICAgICBza2lwcGVkKys7CisgICAgfQor
ICB9CisgIGZvciAodmFyIGkgPSAwOyBpIDwgc2tpcHBlZDsgaSsrKQorICAgIHRoaXMuZWxtcy5w
b3AoKTsKK30KKworLyogLS0tICoKKyAqIFMgdCByIGUgbiBnIHQgaAorICogLS0tICovCisKKy8q
KgorICogU3RyZW5ndGhzIGFyZSB1c2VkIHRvIG1lYXN1cmUgdGhlIHJlbGF0aXZlIGltcG9ydGFu
Y2Ugb2YgY29uc3RyYWludHMuCisgKiBOZXcgc3RyZW5ndGhzIG1heSBiZSBpbnNlcnRlZCBpbiB0
aGUgc3RyZW5ndGggaGllcmFyY2h5IHdpdGhvdXQKKyAqIGRpc3J1cHRpbmcgY3VycmVudCBjb25z
dHJhaW50cy4gIFN0cmVuZ3RocyBjYW5ub3QgYmUgY3JlYXRlZCBvdXRzaWRlCisgKiB0aGlzIGNs
YXNzLCBzbyBwb2ludGVyIGNvbXBhcmlzb24gY2FuIGJlIHVzZWQgZm9yIHZhbHVlIGNvbXBhcmlz
b24uCisgKi8KK2Z1bmN0aW9uIFN0cmVuZ3RoKHN0cmVuZ3RoVmFsdWUsIG5hbWUpIHsKKyAgdGhp
cy5zdHJlbmd0aFZhbHVlID0gc3RyZW5ndGhWYWx1ZTsKKyAgdGhpcy5uYW1lID0gbmFtZTsKK30K
KworU3RyZW5ndGguc3Ryb25nZXIgPSBmdW5jdGlvbiAoczEsIHMyKSB7CisgIHJldHVybiBzMS5z
dHJlbmd0aFZhbHVlIDwgczIuc3RyZW5ndGhWYWx1ZTsKK30KKworU3RyZW5ndGgud2Vha2VyID0g
ZnVuY3Rpb24gKHMxLCBzMikgeworICByZXR1cm4gczEuc3RyZW5ndGhWYWx1ZSA+IHMyLnN0cmVu
Z3RoVmFsdWU7Cit9CisKK1N0cmVuZ3RoLndlYWtlc3RPZiA9IGZ1bmN0aW9uIChzMSwgczIpIHsK
KyAgcmV0dXJuIHRoaXMud2Vha2VyKHMxLCBzMikgPyBzMSA6IHMyOworfQorCitTdHJlbmd0aC5z
dHJvbmdlc3QgPSBmdW5jdGlvbiAoczEsIHMyKSB7CisgIHJldHVybiB0aGlzLnN0cm9uZ2VyKHMx
LCBzMikgPyBzMSA6IHMyOworfQorCitTdHJlbmd0aC5wcm90b3R5cGUubmV4dFdlYWtlciA9IGZ1
bmN0aW9uICgpIHsKKyAgc3dpdGNoICh0aGlzLnN0cmVuZ3RoVmFsdWUpIHsKKyAgICBjYXNlIDA6
IHJldHVybiBTdHJlbmd0aC5XRUFLRVNUOworICAgIGNhc2UgMTogcmV0dXJuIFN0cmVuZ3RoLldF
QUtfREVGQVVMVDsKKyAgICBjYXNlIDI6IHJldHVybiBTdHJlbmd0aC5OT1JNQUw7CisgICAgY2Fz
ZSAzOiByZXR1cm4gU3RyZW5ndGguU1RST05HX0RFRkFVTFQ7CisgICAgY2FzZSA0OiByZXR1cm4g
U3RyZW5ndGguUFJFRkVSUkVEOworICAgIGNhc2UgNTogcmV0dXJuIFN0cmVuZ3RoLlJFUVVJUkVE
OworICB9Cit9CisKKy8vIFN0cmVuZ3RoIGNvbnN0YW50cy4KK1N0cmVuZ3RoLlJFUVVJUkVEICAg
ICAgICA9IG5ldyBTdHJlbmd0aCgwLCAicmVxdWlyZWQiKTsKK1N0cmVuZ3RoLlNUT05HX1BSRUZF
UlJFRCA9IG5ldyBTdHJlbmd0aCgxLCAic3Ryb25nUHJlZmVycmVkIik7CitTdHJlbmd0aC5QUkVG
RVJSRUQgICAgICAgPSBuZXcgU3RyZW5ndGgoMiwgInByZWZlcnJlZCIpOworU3RyZW5ndGguU1RS
T05HX0RFRkFVTFQgID0gbmV3IFN0cmVuZ3RoKDMsICJzdHJvbmdEZWZhdWx0Iik7CitTdHJlbmd0
aC5OT1JNQUwgICAgICAgICAgPSBuZXcgU3RyZW5ndGgoNCwgIm5vcm1hbCIpOworU3RyZW5ndGgu
V0VBS19ERUZBVUxUICAgID0gbmV3IFN0cmVuZ3RoKDUsICJ3ZWFrRGVmYXVsdCIpOworU3RyZW5n
dGguV0VBS0VTVCAgICAgICAgID0gbmV3IFN0cmVuZ3RoKDYsICJ3ZWFrZXN0Iik7CisKKy8qIC0t
LSAqCisgKiBDIG8gbiBzIHQgciBhIGkgbiB0CisgKiAtLS0gKi8KKworLyoqCisgKiBBbiBhYnN0
cmFjdCBjbGFzcyByZXByZXNlbnRpbmcgYSBzeXN0ZW0tbWFpbnRhaW5hYmxlIHJlbGF0aW9uc2hp
cAorICogKG9yICJjb25zdHJhaW50IikgYmV0d2VlbiBhIHNldCBvZiB2YXJpYWJsZXMuIEEgY29u
c3RyYWludCBzdXBwbGllcworICogYSBzdHJlbmd0aCBpbnN0YW5jZSB2YXJpYWJsZTsgY29uY3Jl
dGUgc3ViY2xhc3NlcyBwcm92aWRlIGEgbWVhbnMKKyAqIG9mIHN0b3JpbmcgdGhlIGNvbnN0cmFp
bmVkIHZhcmlhYmxlcyBhbmQgb3RoZXIgaW5mb3JtYXRpb24gcmVxdWlyZWQKKyAqIHRvIHJlcHJl
c2VudCBhIGNvbnN0cmFpbnQuCisgKi8KK2Z1bmN0aW9uIENvbnN0cmFpbnQoc3RyZW5ndGgpIHsK
KyAgdGhpcy5zdHJlbmd0aCA9IHN0cmVuZ3RoOworfQorCisvKioKKyAqIEFjdGl2YXRlIHRoaXMg
Y29uc3RyYWludCBhbmQgYXR0ZW1wdCB0byBzYXRpc2Z5IGl0LgorICovCitDb25zdHJhaW50LnBy
b3RvdHlwZS5hZGRDb25zdHJhaW50ID0gZnVuY3Rpb24gKCkgeworICB0aGlzLmFkZFRvR3JhcGgo
KTsKKyAgcGxhbm5lci5pbmNyZW1lbnRhbEFkZCh0aGlzKTsKK30KKworLyoqCisgKiBBdHRlbXB0
IHRvIGZpbmQgYSB3YXkgdG8gZW5mb3JjZSB0aGlzIGNvbnN0cmFpbnQuIElmIHN1Y2Nlc3NmdWws
CisgKiByZWNvcmQgdGhlIHNvbHV0aW9uLCBwZXJoYXBzIG1vZGlmeWluZyB0aGUgY3VycmVudCBk
YXRhZmxvdworICogZ3JhcGguIEFuc3dlciB0aGUgY29uc3RyYWludCB0aGF0IHRoaXMgY29uc3Ry
YWludCBvdmVycmlkZXMsIGlmCisgKiB0aGVyZSBpcyBvbmUsIG9yIG5pbCwgaWYgdGhlcmUgaXNu
J3QuCisgKiBBc3N1bWU6IEkgYW0gbm90IGFscmVhZHkgc2F0aXNmaWVkLgorICovCitDb25zdHJh
aW50LnByb3RvdHlwZS5zYXRpc2Z5ID0gZnVuY3Rpb24gKG1hcmspIHsKKyAgdGhpcy5jaG9vc2VN
ZXRob2QobWFyayk7CisgIGlmICghdGhpcy5pc1NhdGlzZmllZCgpKSB7CisgICAgaWYgKHRoaXMu
c3RyZW5ndGggPT0gU3RyZW5ndGguUkVRVUlSRUQpCisgICAgICBhbGVydCgiQ291bGQgbm90IHNh
dGlzZnkgYSByZXF1aXJlZCBjb25zdHJhaW50ISIpOworICAgIHJldHVybiBudWxsOworICB9Cisg
IHRoaXMubWFya0lucHV0cyhtYXJrKTsKKyAgdmFyIG91dCA9IHRoaXMub3V0cHV0KCk7CisgIHZh
ciBvdmVycmlkZGVuID0gb3V0LmRldGVybWluZWRCeTsKKyAgaWYgKG92ZXJyaWRkZW4gIT0gbnVs
bCkgb3ZlcnJpZGRlbi5tYXJrVW5zYXRpc2ZpZWQoKTsKKyAgb3V0LmRldGVybWluZWRCeSA9IHRo
aXM7CisgIGlmICghcGxhbm5lci5hZGRQcm9wYWdhdGUodGhpcywgbWFyaykpCisgICAgYWxlcnQo
IkN5Y2xlIGVuY291bnRlcmVkIik7CisgIG91dC5tYXJrID0gbWFyazsKKyAgcmV0dXJuIG92ZXJy
aWRkZW47Cit9CisKK0NvbnN0cmFpbnQucHJvdG90eXBlLmRlc3Ryb3lDb25zdHJhaW50ID0gZnVu
Y3Rpb24gKCkgeworICBpZiAodGhpcy5pc1NhdGlzZmllZCgpKSBwbGFubmVyLmluY3JlbWVudGFs
UmVtb3ZlKHRoaXMpOworICBlbHNlIHRoaXMucmVtb3ZlRnJvbUdyYXBoKCk7Cit9CisKKy8qKgor
ICogTm9ybWFsIGNvbnN0cmFpbnRzIGFyZSBub3QgaW5wdXQgY29uc3RyYWludHMuICBBbiBpbnB1
dCBjb25zdHJhaW50CisgKiBpcyBvbmUgdGhhdCBkZXBlbmRzIG9uIGV4dGVybmFsIHN0YXRlLCBz
dWNoIGFzIHRoZSBtb3VzZSwgdGhlCisgKiBrZXlib3JkLCBhIGNsb2NrLCBvciBzb21lIGFyYml0
cmF0eSBwaWVjZSBvZiBpbXBlcmF0aXZlIGNvZGUuCisgKi8KK0NvbnN0cmFpbnQucHJvdG90eXBl
LmlzSW5wdXQgPSBmdW5jdGlvbiAoKSB7CisgIHJldHVybiBmYWxzZTsKK30KKworLyogLS0tICoK
KyAqIFUgbiBhIHIgeSAgIEMgbyBuIHMgdCByIGEgaSBuIHQKKyAqIC0tLSAqLworCisvKioKKyAq
IEFic3RyYWN0IHN1cGVyY2xhc3MgZm9yIGNvbnN0cmFpbnRzIGhhdmluZyBhIHNpbmdsZSBwb3Nz
aWJsZSBvdXRwdXQKKyAqIHZhcmlhYmxlLgorICovCitmdW5jdGlvbiBVbmFyeUNvbnN0cmFpbnQo
diwgc3RyZW5ndGgpIHsKKyAgVW5hcnlDb25zdHJhaW50LnN1cGVyQ29uc3RydWN0b3IuY2FsbCh0
aGlzLCBzdHJlbmd0aCk7CisgIHRoaXMubXlPdXRwdXQgPSB2OworICB0aGlzLnNhdGlzZmllZCA9
IGZhbHNlOworICB0aGlzLmFkZENvbnN0cmFpbnQoKTsKK30KKworVW5hcnlDb25zdHJhaW50Lmlu
aGVyaXRzKENvbnN0cmFpbnQpOworCisvKioKKyAqIEFkZHMgdGhpcyBjb25zdHJhaW50IHRvIHRo
ZSBjb25zdHJhaW50IGdyYXBoCisgKi8KK1VuYXJ5Q29uc3RyYWludC5wcm90b3R5cGUuYWRkVG9H
cmFwaCA9IGZ1bmN0aW9uICgpIHsKKyAgdGhpcy5teU91dHB1dC5hZGRDb25zdHJhaW50KHRoaXMp
OworICB0aGlzLnNhdGlzZmllZCA9IGZhbHNlOworfQorCisvKioKKyAqIERlY2lkZXMgaWYgdGhp
cyBjb25zdHJhaW50IGNhbiBiZSBzYXRpc2ZpZWQgYW5kIHJlY29yZHMgdGhhdAorICogZGVjaXNp
b24uCisgKi8KK1VuYXJ5Q29uc3RyYWludC5wcm90b3R5cGUuY2hvb3NlTWV0aG9kID0gZnVuY3Rp
b24gKG1hcmspIHsKKyAgdGhpcy5zYXRpc2ZpZWQgPSAodGhpcy5teU91dHB1dC5tYXJrICE9IG1h
cmspCisgICAgJiYgU3RyZW5ndGguc3Ryb25nZXIodGhpcy5zdHJlbmd0aCwgdGhpcy5teU91dHB1
dC53YWxrU3RyZW5ndGgpOworfQorCisvKioKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGNvbnN0
cmFpbnQgaXMgc2F0aXNmaWVkIGluIHRoZSBjdXJyZW50IHNvbHV0aW9uLgorICovCitVbmFyeUNv
bnN0cmFpbnQucHJvdG90eXBlLmlzU2F0aXNmaWVkID0gZnVuY3Rpb24gKCkgeworICByZXR1cm4g
dGhpcy5zYXRpc2ZpZWQ7Cit9CisKK1VuYXJ5Q29uc3RyYWludC5wcm90b3R5cGUubWFya0lucHV0
cyA9IGZ1bmN0aW9uIChtYXJrKSB7CisgIC8vIGhhcyBubyBpbnB1dHMKK30KKworLyoqCisgKiBS
ZXR1cm5zIHRoZSBjdXJyZW50IG91dHB1dCB2YXJpYWJsZS4KKyAqLworVW5hcnlDb25zdHJhaW50
LnByb3RvdHlwZS5vdXRwdXQgPSBmdW5jdGlvbiAoKSB7CisgIHJldHVybiB0aGlzLm15T3V0cHV0
OworfQorCisvKioKKyAqIENhbGN1bGF0ZSB0aGUgd2Fsa2Fib3V0IHN0cmVuZ3RoLCB0aGUgc3Rh
eSBmbGFnLCBhbmQsIGlmIGl0IGlzCisgKiAnc3RheScsIHRoZSB2YWx1ZSBmb3IgdGhlIGN1cnJl
bnQgb3V0cHV0IG9mIHRoaXMgY29uc3RyYWludC4gQXNzdW1lCisgKiB0aGlzIGNvbnN0cmFpbnQg
aXMgc2F0aXNmaWVkLgorICovCitVbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLnJlY2FsY3VsYXRl
ID0gZnVuY3Rpb24gKCkgeworICB0aGlzLm15T3V0cHV0LndhbGtTdHJlbmd0aCA9IHRoaXMuc3Ry
ZW5ndGg7CisgIHRoaXMubXlPdXRwdXQuc3RheSA9ICF0aGlzLmlzSW5wdXQoKTsKKyAgaWYgKHRo
aXMubXlPdXRwdXQuc3RheSkgdGhpcy5leGVjdXRlKCk7IC8vIFN0YXkgb3B0aW1pemF0aW9uCit9
CisKKy8qKgorICogUmVjb3JkcyB0aGF0IHRoaXMgY29uc3RyYWludCBpcyB1bnNhdGlzZmllZAor
ICovCitVbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLm1hcmtVbnNhdGlzZmllZCA9IGZ1bmN0aW9u
ICgpIHsKKyAgdGhpcy5zYXRpc2ZpZWQgPSBmYWxzZTsKK30KKworVW5hcnlDb25zdHJhaW50LnBy
b3RvdHlwZS5pbnB1dHNLbm93biA9IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJuIHRydWU7Cit9CisK
K1VuYXJ5Q29uc3RyYWludC5wcm90b3R5cGUucmVtb3ZlRnJvbUdyYXBoID0gZnVuY3Rpb24gKCkg
eworICBpZiAodGhpcy5teU91dHB1dCAhPSBudWxsKSB0aGlzLm15T3V0cHV0LnJlbW92ZUNvbnN0
cmFpbnQodGhpcyk7CisgIHRoaXMuc2F0aXNmaWVkID0gZmFsc2U7Cit9CisKKy8qIC0tLSAqCisg
KiBTIHQgYSB5ICAgQyBvIG4gcyB0IHIgYSBpIG4gdAorICogLS0tICovCisKKy8qKgorICogVmFy
aWFibGVzIHRoYXQgc2hvdWxkLCB3aXRoIHNvbWUgbGV2ZWwgb2YgcHJlZmVyZW5jZSwgc3RheSB0
aGUgc2FtZS4KKyAqIFBsYW5uZXJzIG1heSBleHBsb2l0IHRoZSBmYWN0IHRoYXQgaW5zdGFuY2Vz
LCBpZiBzYXRpc2ZpZWQsIHdpbGwgbm90CisgKiBjaGFuZ2UgdGhlaXIgb3V0cHV0IGR1cmluZyBw
bGFuIGV4ZWN1dGlvbi4gIFRoaXMgaXMgY2FsbGVkICJzdGF5CisgKiBvcHRpbWl6YXRpb24iLgor
ICovCitmdW5jdGlvbiBTdGF5Q29uc3RyYWludCh2LCBzdHIpIHsKKyAgU3RheUNvbnN0cmFpbnQu
c3VwZXJDb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHYsIHN0cik7Cit9CisKK1N0YXlDb25zdHJhaW50
LmluaGVyaXRzKFVuYXJ5Q29uc3RyYWludCk7CisKK1N0YXlDb25zdHJhaW50LnByb3RvdHlwZS5l
eGVjdXRlID0gZnVuY3Rpb24gKCkgeworICAvLyBTdGF5IGNvbnN0cmFpbnRzIGRvIG5vdGhpbmcK
K30KKworLyogLS0tICoKKyAqIEUgZCBpIHQgICBDIG8gbiBzIHQgciBhIGkgbiB0CisgKiAtLS0g
Ki8KKworLyoqCisgKiBBIHVuYXJ5IGlucHV0IGNvbnN0cmFpbnQgdXNlZCB0byBtYXJrIGEgdmFy
aWFibGUgdGhhdCB0aGUgY2xpZW50CisgKiB3aXNoZXMgdG8gY2hhbmdlLgorICovCitmdW5jdGlv
biBFZGl0Q29uc3RyYWludCh2LCBzdHIpIHsKKyAgRWRpdENvbnN0cmFpbnQuc3VwZXJDb25zdHJ1
Y3Rvci5jYWxsKHRoaXMsIHYsIHN0cik7Cit9CisKK0VkaXRDb25zdHJhaW50LmluaGVyaXRzKFVu
YXJ5Q29uc3RyYWludCk7CisKKy8qKgorICogRWRpdHMgaW5kaWNhdGUgdGhhdCBhIHZhcmlhYmxl
IGlzIHRvIGJlIGNoYW5nZWQgYnkgaW1wZXJhdGl2ZSBjb2RlLgorICovCitFZGl0Q29uc3RyYWlu
dC5wcm90b3R5cGUuaXNJbnB1dCA9IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJuIHRydWU7Cit9CisK
K0VkaXRDb25zdHJhaW50LnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKCkgeworICAvLyBF
ZGl0IGNvbnN0cmFpbnRzIGRvIG5vdGhpbmcKK30KKworLyogLS0tICoKKyAqIEIgaSBuIGEgciB5
ICAgQyBvIG4gcyB0IHIgYSBpIG4gdAorICogLS0tICovCisKK3ZhciBEaXJlY3Rpb24gPSBuZXcg
T2JqZWN0KCk7CitEaXJlY3Rpb24uTk9ORSAgICAgPSAwOworRGlyZWN0aW9uLkZPUldBUkQgID0g
MTsKK0RpcmVjdGlvbi5CQUNLV0FSRCA9IC0xOworCisvKioKKyAqIEFic3RyYWN0IHN1cGVyY2xh
c3MgZm9yIGNvbnN0cmFpbnRzIGhhdmluZyB0d28gcG9zc2libGUgb3V0cHV0CisgKiB2YXJpYWJs
ZXMuCisgKi8KK2Z1bmN0aW9uIEJpbmFyeUNvbnN0cmFpbnQodmFyMSwgdmFyMiwgc3RyZW5ndGgp
IHsKKyAgQmluYXJ5Q29uc3RyYWludC5zdXBlckNvbnN0cnVjdG9yLmNhbGwodGhpcywgc3RyZW5n
dGgpOworICB0aGlzLnYxID0gdmFyMTsKKyAgdGhpcy52MiA9IHZhcjI7CisgIHRoaXMuZGlyZWN0
aW9uID0gRGlyZWN0aW9uLk5PTkU7CisgIHRoaXMuYWRkQ29uc3RyYWludCgpOworfQorCitCaW5h
cnlDb25zdHJhaW50LmluaGVyaXRzKENvbnN0cmFpbnQpOworCisvKioKKyAqIERlY2lkZXMgaWYg
dGhpcyBjb25zdHJhdGludCBjYW4gYmUgc2F0aXNmaWVkIGFuZCB3aGljaCB3YXkgaXQKKyAqIHNo
b3VsZCBmbG93IGJhc2VkIG9uIHRoZSByZWxhdGl2ZSBzdHJlbmd0aCBvZiB0aGUgdmFyaWFibGVz
IHJlbGF0ZWQsCisgKiBhbmQgcmVjb3JkIHRoYXQgZGVjaXNpb24uCisgKi8KK0JpbmFyeUNvbnN0
cmFpbnQucHJvdG90eXBlLmNob29zZU1ldGhvZCA9IGZ1bmN0aW9uIChtYXJrKSB7CisgIGlmICh0
aGlzLnYxLm1hcmsgPT0gbWFyaykgeworICAgIHRoaXMuZGlyZWN0aW9uID0gKHRoaXMudjEubWFy
ayAhPSBtYXJrICYmIFN0cmVuZ3RoLnN0cm9uZ2VyKHRoaXMuc3RyZW5ndGgsIHRoaXMudjIud2Fs
a1N0cmVuZ3RoKSkKKyAgICAgID8gRGlyZWN0aW9uLkZPUldBUkQKKyAgICAgIDogRGlyZWN0aW9u
Lk5PTkU7CisgIH0KKyAgaWYgKHRoaXMudjIubWFyayA9PSBtYXJrKSB7CisgICAgdGhpcy5kaXJl
Y3Rpb24gPSAodGhpcy52MS5tYXJrICE9IG1hcmsgJiYgU3RyZW5ndGguc3Ryb25nZXIodGhpcy5z
dHJlbmd0aCwgdGhpcy52MS53YWxrU3RyZW5ndGgpKQorICAgICAgPyBEaXJlY3Rpb24uQkFDS1dB
UkQKKyAgICAgIDogRGlyZWN0aW9uLk5PTkU7CisgIH0KKyAgaWYgKFN0cmVuZ3RoLndlYWtlcih0
aGlzLnYxLndhbGtTdHJlbmd0aCwgdGhpcy52Mi53YWxrU3RyZW5ndGgpKSB7CisgICAgdGhpcy5k
aXJlY3Rpb24gPSBTdHJlbmd0aC5zdHJvbmdlcih0aGlzLnN0cmVuZ3RoLCB0aGlzLnYxLndhbGtT
dHJlbmd0aCkKKyAgICAgID8gRGlyZWN0aW9uLkJBQ0tXQVJECisgICAgICA6IERpcmVjdGlvbi5O
T05FOworICB9IGVsc2UgeworICAgIHRoaXMuZGlyZWN0aW9uID0gU3RyZW5ndGguc3Ryb25nZXIo
dGhpcy5zdHJlbmd0aCwgdGhpcy52Mi53YWxrU3RyZW5ndGgpCisgICAgICA/IERpcmVjdGlvbi5G
T1JXQVJECisgICAgICA6IERpcmVjdGlvbi5CQUNLV0FSRAorICB9Cit9CisKKy8qKgorICogQWRk
IHRoaXMgY29uc3RyYWludCB0byB0aGUgY29uc3RyYWludCBncmFwaAorICovCitCaW5hcnlDb25z
dHJhaW50LnByb3RvdHlwZS5hZGRUb0dyYXBoID0gZnVuY3Rpb24gKCkgeworICB0aGlzLnYxLmFk
ZENvbnN0cmFpbnQodGhpcyk7CisgIHRoaXMudjIuYWRkQ29uc3RyYWludCh0aGlzKTsKKyAgdGhp
cy5kaXJlY3Rpb24gPSBEaXJlY3Rpb24uTk9ORTsKK30KKworLyoqCisgKiBBbnN3ZXIgdHJ1ZSBp
ZiB0aGlzIGNvbnN0cmFpbnQgaXMgc2F0aXNmaWVkIGluIHRoZSBjdXJyZW50IHNvbHV0aW9uLgor
ICovCitCaW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5pc1NhdGlzZmllZCA9IGZ1bmN0aW9uICgp
IHsKKyAgcmV0dXJuIHRoaXMuZGlyZWN0aW9uICE9IERpcmVjdGlvbi5OT05FOworfQorCisvKioK
KyAqIE1hcmsgdGhlIGlucHV0IHZhcmlhYmxlIHdpdGggdGhlIGdpdmVuIG1hcmsuCisgKi8KK0Jp
bmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLm1hcmtJbnB1dHMgPSBmdW5jdGlvbiAobWFyaykgewor
ICB0aGlzLmlucHV0KCkubWFyayA9IG1hcms7Cit9CisKKy8qKgorICogUmV0dXJucyB0aGUgY3Vy
cmVudCBpbnB1dCB2YXJpYWJsZQorICovCitCaW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5pbnB1
dCA9IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJuICh0aGlzLmRpcmVjdGlvbiA9PSBEaXJlY3Rpb24u
Rk9SV0FSRCkgPyB0aGlzLnYxIDogdGhpcy52MjsKK30KKworLyoqCisgKiBSZXR1cm5zIHRoZSBj
dXJyZW50IG91dHB1dCB2YXJpYWJsZQorICovCitCaW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5v
dXRwdXQgPSBmdW5jdGlvbiAoKSB7CisgIHJldHVybiAodGhpcy5kaXJlY3Rpb24gPT0gRGlyZWN0
aW9uLkZPUldBUkQpID8gdGhpcy52MiA6IHRoaXMudjE7Cit9CisKKy8qKgorICogQ2FsY3VsYXRl
IHRoZSB3YWxrYWJvdXQgc3RyZW5ndGgsIHRoZSBzdGF5IGZsYWcsIGFuZCwgaWYgaXQgaXMKKyAq
ICdzdGF5JywgdGhlIHZhbHVlIGZvciB0aGUgY3VycmVudCBvdXRwdXQgb2YgdGhpcworICogY29u
c3RyYWludC4gQXNzdW1lIHRoaXMgY29uc3RyYWludCBpcyBzYXRpc2ZpZWQuCisgKi8KK0JpbmFy
eUNvbnN0cmFpbnQucHJvdG90eXBlLnJlY2FsY3VsYXRlID0gZnVuY3Rpb24gKCkgeworICB2YXIg
aWhuID0gdGhpcy5pbnB1dCgpLCBvdXQgPSB0aGlzLm91dHB1dCgpOworICBvdXQud2Fsa1N0cmVu
Z3RoID0gU3RyZW5ndGgud2Vha2VzdE9mKHRoaXMuc3RyZW5ndGgsIGlobi53YWxrU3RyZW5ndGgp
OworICBvdXQuc3RheSA9IGlobi5zdGF5OworICBpZiAob3V0LnN0YXkpIHRoaXMuZXhlY3V0ZSgp
OworfQorCisvKioKKyAqIFJlY29yZCB0aGUgZmFjdCB0aGF0IHRoaXMgY29uc3RyYWludCBpcyB1
bnNhdGlzZmllZC4KKyAqLworQmluYXJ5Q29uc3RyYWludC5wcm90b3R5cGUubWFya1Vuc2F0aXNm
aWVkID0gZnVuY3Rpb24gKCkgeworICB0aGlzLmRpcmVjdGlvbiA9IERpcmVjdGlvbi5OT05FOwor
fQorCitCaW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5pbnB1dHNLbm93biA9IGZ1bmN0aW9uICht
YXJrKSB7CisgIHZhciBpID0gdGhpcy5pbnB1dCgpOworICByZXR1cm4gaS5tYXJrID09IG1hcmsg
fHwgaS5zdGF5IHx8IGkuZGV0ZXJtaW5lZEJ5ID09IG51bGw7Cit9CisKK0JpbmFyeUNvbnN0cmFp
bnQucHJvdG90eXBlLnJlbW92ZUZyb21HcmFwaCA9IGZ1bmN0aW9uICgpIHsKKyAgaWYgKHRoaXMu
djEgIT0gbnVsbCkgdGhpcy52MS5yZW1vdmVDb25zdHJhaW50KHRoaXMpOworICBpZiAodGhpcy52
MiAhPSBudWxsKSB0aGlzLnYyLnJlbW92ZUNvbnN0cmFpbnQodGhpcyk7CisgIHRoaXMuZGlyZWN0
aW9uID0gRGlyZWN0aW9uLk5PTkU7Cit9CisKKy8qIC0tLSAqCisgKiBTIGMgYSBsIGUgICBDIG8g
biBzIHQgciBhIGkgbiB0CisgKiAtLS0gKi8KKworLyoqCisgKiBSZWxhdGVzIHR3byB2YXJpYWJs
ZXMgYnkgdGhlIGxpbmVhciBzY2FsaW5nIHJlbGF0aW9uc2hpcDogInYyID0KKyAqICh2MSAqIHNj
YWxlKSArIG9mZnNldCIuIEVpdGhlciB2MSBvciB2MiBtYXkgYmUgY2hhbmdlZCB0byBtYWludGFp
bgorICogdGhpcyByZWxhdGlvbnNoaXAgYnV0IHRoZSBzY2FsZSBmYWN0b3IgYW5kIG9mZnNldCBh
cmUgY29uc2lkZXJlZAorICogcmVhZC1vbmx5LgorICovCitmdW5jdGlvbiBTY2FsZUNvbnN0cmFp
bnQoc3JjLCBzY2FsZSwgb2Zmc2V0LCBkZXN0LCBzdHJlbmd0aCkgeworICB0aGlzLmRpcmVjdGlv
biA9IERpcmVjdGlvbi5OT05FOworICB0aGlzLnNjYWxlID0gc2NhbGU7CisgIHRoaXMub2Zmc2V0
ID0gb2Zmc2V0OworICBTY2FsZUNvbnN0cmFpbnQuc3VwZXJDb25zdHJ1Y3Rvci5jYWxsKHRoaXMs
IHNyYywgZGVzdCwgc3RyZW5ndGgpOworfQorCitTY2FsZUNvbnN0cmFpbnQuaW5oZXJpdHMoQmlu
YXJ5Q29uc3RyYWludCk7CisKKy8qKgorICogQWRkcyB0aGlzIGNvbnN0cmFpbnQgdG8gdGhlIGNv
bnN0cmFpbnQgZ3JhcGguCisgKi8KK1NjYWxlQ29uc3RyYWludC5wcm90b3R5cGUuYWRkVG9HcmFw
aCA9IGZ1bmN0aW9uICgpIHsKKyAgU2NhbGVDb25zdHJhaW50LnN1cGVyQ29uc3RydWN0b3IucHJv
dG90eXBlLmFkZFRvR3JhcGguY2FsbCh0aGlzKTsKKyAgdGhpcy5zY2FsZS5hZGRDb25zdHJhaW50
KHRoaXMpOworICB0aGlzLm9mZnNldC5hZGRDb25zdHJhaW50KHRoaXMpOworfQorCitTY2FsZUNv
bnN0cmFpbnQucHJvdG90eXBlLnJlbW92ZUZyb21HcmFwaCA9IGZ1bmN0aW9uICgpIHsKKyAgU2Nh
bGVDb25zdHJhaW50LnN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLnJlbW92ZUZyb21HcmFwaC5j
YWxsKHRoaXMpOworICBpZiAodGhpcy5zY2FsZSAhPSBudWxsKSB0aGlzLnNjYWxlLnJlbW92ZUNv
bnN0cmFpbnQodGhpcyk7CisgIGlmICh0aGlzLm9mZnNldCAhPSBudWxsKSB0aGlzLm9mZnNldC5y
ZW1vdmVDb25zdHJhaW50KHRoaXMpOworfQorCitTY2FsZUNvbnN0cmFpbnQucHJvdG90eXBlLm1h
cmtJbnB1dHMgPSBmdW5jdGlvbiAobWFyaykgeworICBTY2FsZUNvbnN0cmFpbnQuc3VwZXJDb25z
dHJ1Y3Rvci5wcm90b3R5cGUubWFya0lucHV0cy5jYWxsKHRoaXMsIG1hcmspOworICB0aGlzLnNj
YWxlLm1hcmsgPSB0aGlzLm9mZnNldC5tYXJrID0gbWFyazsKK30KKworLyoqCisgKiBFbmZvcmNl
IHRoaXMgY29uc3RyYWludC4gQXNzdW1lIHRoYXQgaXQgaXMgc2F0aXNmaWVkLgorICovCitTY2Fs
ZUNvbnN0cmFpbnQucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoKSB7CisgIGlmICh0aGlz
LmRpcmVjdGlvbiA9PSBEaXJlY3Rpb24uRk9SV0FSRCkgeworICAgIHRoaXMudjIudmFsdWUgPSB0
aGlzLnYxLnZhbHVlICogdGhpcy5zY2FsZS52YWx1ZSArIHRoaXMub2Zmc2V0LnZhbHVlOworICB9
IGVsc2UgeworICAgIHRoaXMudjEudmFsdWUgPSAodGhpcy52Mi52YWx1ZSAtIHRoaXMub2Zmc2V0
LnZhbHVlKSAvIHRoaXMuc2NhbGUudmFsdWU7CisgIH0KK30KKworLyoqCisgKiBDYWxjdWxhdGUg
dGhlIHdhbGthYm91dCBzdHJlbmd0aCwgdGhlIHN0YXkgZmxhZywgYW5kLCBpZiBpdCBpcworICog
J3N0YXknLCB0aGUgdmFsdWUgZm9yIHRoZSBjdXJyZW50IG91dHB1dCBvZiB0aGlzIGNvbnN0cmFp
bnQuIEFzc3VtZQorICogdGhpcyBjb25zdHJhaW50IGlzIHNhdGlzZmllZC4KKyAqLworU2NhbGVD
b25zdHJhaW50LnByb3RvdHlwZS5yZWNhbGN1bGF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgdmFyIGlo
biA9IHRoaXMuaW5wdXQoKSwgb3V0ID0gdGhpcy5vdXRwdXQoKTsKKyAgb3V0LndhbGtTdHJlbmd0
aCA9IFN0cmVuZ3RoLndlYWtlc3RPZih0aGlzLnN0cmVuZ3RoLCBpaG4ud2Fsa1N0cmVuZ3RoKTsK
KyAgb3V0LnN0YXkgPSBpaG4uc3RheSAmJiB0aGlzLnNjYWxlLnN0YXkgJiYgdGhpcy5vZmZzZXQu
c3RheTsKKyAgaWYgKG91dC5zdGF5KSB0aGlzLmV4ZWN1dGUoKTsKK30KKworLyogLS0tICoKKyAq
IEUgcSB1IGEgbCBpIHQgIHkgICBDIG8gbiBzIHQgciBhIGkgbiB0CisgKiAtLS0gKi8KKworLyoq
CisgKiBDb25zdHJhaW5zIHR3byB2YXJpYWJsZXMgdG8gaGF2ZSB0aGUgc2FtZSB2YWx1ZS4KKyAq
LworZnVuY3Rpb24gRXF1YWxpdHlDb25zdHJhaW50KHZhcjEsIHZhcjIsIHN0cmVuZ3RoKSB7Cisg
IEVxdWFsaXR5Q29uc3RyYWludC5zdXBlckNvbnN0cnVjdG9yLmNhbGwodGhpcywgdmFyMSwgdmFy
Miwgc3RyZW5ndGgpOworfQorCitFcXVhbGl0eUNvbnN0cmFpbnQuaW5oZXJpdHMoQmluYXJ5Q29u
c3RyYWludCk7CisKKy8qKgorICogRW5mb3JjZSB0aGlzIGNvbnN0cmFpbnQuIEFzc3VtZSB0aGF0
IGl0IGlzIHNhdGlzZmllZC4KKyAqLworRXF1YWxpdHlDb25zdHJhaW50LnByb3RvdHlwZS5leGVj
dXRlID0gZnVuY3Rpb24gKCkgeworICB0aGlzLm91dHB1dCgpLnZhbHVlID0gdGhpcy5pbnB1dCgp
LnZhbHVlOworfQorCisvKiAtLS0gKgorICogViBhIHIgaSBhIGIgbCBlCisgKiAtLS0gKi8KKwor
LyoqCisgKiBBIGNvbnN0cmFpbmVkIHZhcmlhYmxlLiBJbiBhZGRpdGlvbiB0byBpdHMgdmFsdWUs
IGl0IG1haW50YWluIHRoZQorICogc3RydWN0dXJlIG9mIHRoZSBjb25zdHJhaW50IGdyYXBoLCB0
aGUgY3VycmVudCBkYXRhZmxvdyBncmFwaCwgYW5kCisgKiB2YXJpb3VzIHBhcmFtZXRlcnMgb2Yg
aW50ZXJlc3QgdG8gdGhlIERlbHRhQmx1ZSBpbmNyZW1lbnRhbAorICogY29uc3RyYWludCBzb2x2
ZXIuCisgKiovCitmdW5jdGlvbiBWYXJpYWJsZShuYW1lLCBpbml0aWFsVmFsdWUpIHsKKyAgdGhp
cy52YWx1ZSA9IGluaXRpYWxWYWx1ZSB8fCAwOworICB0aGlzLmNvbnN0cmFpbnRzID0gbmV3IE9y
ZGVyZWRDb2xsZWN0aW9uKCk7CisgIHRoaXMuZGV0ZXJtaW5lZEJ5ID0gbnVsbDsKKyAgdGhpcy5t
YXJrID0gMDsKKyAgdGhpcy53YWxrU3RyZW5ndGggPSBTdHJlbmd0aC5XRUFLRVNUOworICB0aGlz
LnN0YXkgPSB0cnVlOworICB0aGlzLm5hbWUgPSBuYW1lOworfQorCisvKioKKyAqIEFkZCB0aGUg
Z2l2ZW4gY29uc3RyYWludCB0byB0aGUgc2V0IG9mIGFsbCBjb25zdHJhaW50cyB0aGF0IHJlZmVy
CisgKiB0aGlzIHZhcmlhYmxlLgorICovCitWYXJpYWJsZS5wcm90b3R5cGUuYWRkQ29uc3RyYWlu
dCA9IGZ1bmN0aW9uIChjKSB7CisgIHRoaXMuY29uc3RyYWludHMuYWRkKGMpOworfQorCisvKioK
KyAqIFJlbW92ZXMgYWxsIHRyYWNlcyBvZiBjIGZyb20gdGhpcyB2YXJpYWJsZS4KKyAqLworVmFy
aWFibGUucHJvdG90eXBlLnJlbW92ZUNvbnN0cmFpbnQgPSBmdW5jdGlvbiAoYykgeworICB0aGlz
LmNvbnN0cmFpbnRzLnJlbW92ZShjKTsKKyAgaWYgKHRoaXMuZGV0ZXJtaW5lZEJ5ID09IGMpIHRo
aXMuZGV0ZXJtaW5lZEJ5ID0gbnVsbDsKK30KKworLyogLS0tICoKKyAqIFAgbCBhIG4gbiBlIHIK
KyAqIC0tLSAqLworCisvKioKKyAqIFRoZSBEZWx0YUJsdWUgcGxhbm5lcgorICovCitmdW5jdGlv
biBQbGFubmVyKCkgeworICB0aGlzLmN1cnJlbnRNYXJrID0gMDsKK30KKworLyoqCisgKiBBdHRl
bXB0IHRvIHNhdGlzZnkgdGhlIGdpdmVuIGNvbnN0cmFpbnQgYW5kLCBpZiBzdWNjZXNzZnVsLAor
ICogaW5jcmVtZW50YWxseSB1cGRhdGUgdGhlIGRhdGFmbG93IGdyYXBoLiAgRGV0YWlsczogSWYg
c2F0aWZ5aW5nCisgKiB0aGUgY29uc3RyYWludCBpcyBzdWNjZXNzZnVsLCBpdCBtYXkgb3ZlcnJp
ZGUgYSB3ZWFrZXIgY29uc3RyYWludAorICogb24gaXRzIG91dHB1dC4gVGhlIGFsZ29yaXRobSBh
dHRlbXB0cyB0byByZXNhdGlzZnkgdGhhdAorICogY29uc3RyYWludCB1c2luZyBzb21lIG90aGVy
IG1ldGhvZC4gVGhpcyBwcm9jZXNzIGlzIHJlcGVhdGVkCisgKiB1bnRpbCBlaXRoZXIgYSkgaXQg
cmVhY2hlcyBhIHZhcmlhYmxlIHRoYXQgd2FzIG5vdCBwcmV2aW91c2x5CisgKiBkZXRlcm1pbmVk
IGJ5IGFueSBjb25zdHJhaW50IG9yIGIpIGl0IHJlYWNoZXMgYSBjb25zdHJhaW50IHRoYXQKKyAq
IGlzIHRvbyB3ZWFrIHRvIGJlIHNhdGlzZmllZCB1c2luZyBhbnkgb2YgaXRzIG1ldGhvZHMuIFRo
ZQorICogdmFyaWFibGVzIG9mIGNvbnN0cmFpbnRzIHRoYXQgaGF2ZSBiZWVuIHByb2Nlc3NlZCBh
cmUgbWFya2VkIHdpdGgKKyAqIGEgdW5pcXVlIG1hcmsgdmFsdWUgc28gdGhhdCB3ZSBrbm93IHdo
ZXJlIHdlJ3ZlIGJlZW4uIFRoaXMgYWxsb3dzCisgKiB0aGUgYWxnb3JpdGhtIHRvIGF2b2lkIGdl
dHRpbmcgaW50byBhbiBpbmZpbml0ZSBsb29wIGV2ZW4gaWYgdGhlCisgKiBjb25zdHJhaW50IGdy
YXBoIGhhcyBhbiBpbmFkdmVydGVudCBjeWNsZS4KKyAqLworUGxhbm5lci5wcm90b3R5cGUuaW5j
cmVtZW50YWxBZGQgPSBmdW5jdGlvbiAoYykgeworICB2YXIgbWFyayA9IHRoaXMubmV3TWFyaygp
OworICB2YXIgb3ZlcnJpZGRlbiA9IGMuc2F0aXNmeShtYXJrKTsKKyAgd2hpbGUgKG92ZXJyaWRk
ZW4gIT0gbnVsbCkKKyAgICBvdmVycmlkZGVuID0gb3ZlcnJpZGRlbi5zYXRpc2Z5KG1hcmspOwor
fQorCisvKioKKyAqIEVudHJ5IHBvaW50IGZvciByZXRyYWN0aW5nIGEgY29uc3RyYWludC4gUmVt
b3ZlIHRoZSBnaXZlbgorICogY29uc3RyYWludCBhbmQgaW5jcmVtZW50YWxseSB1cGRhdGUgdGhl
IGRhdGFmbG93IGdyYXBoLgorICogRGV0YWlsczogUmV0cmFjdGluZyB0aGUgZ2l2ZW4gY29uc3Ry
YWludCBtYXkgYWxsb3cgc29tZSBjdXJyZW50bHkKKyAqIHVuc2F0aXNmaWFibGUgZG93bnN0cmVh
bSBjb25zdHJhaW50IHRvIGJlIHNhdGlzZmllZC4gV2UgdGhlcmVmb3JlIGNvbGxlY3QKKyAqIGEg
bGlzdCBvZiB1bnNhdGlzZmllZCBkb3duc3RyZWFtIGNvbnN0cmFpbnRzIGFuZCBhdHRlbXB0IHRv
CisgKiBzYXRpc2Z5IGVhY2ggb25lIGluIHR1cm4uIFRoaXMgbGlzdCBpcyB0cmF2ZXJzZWQgYnkg
Y29uc3RyYWludAorICogc3RyZW5ndGgsIHN0cm9uZ2VzdCBmaXJzdCwgYXMgYSBoZXVyaXN0aWMg
Zm9yIGF2b2lkaW5nCisgKiB1bm5lY2Vzc2FyaWx5IGFkZGluZyBhbmQgdGhlbiBvdmVycmlkaW5n
IHdlYWsgY29uc3RyYWludHMuCisgKiBBc3N1bWU6IGMgaXMgc2F0aXNmaWVkLgorICovCitQbGFu
bmVyLnByb3RvdHlwZS5pbmNyZW1lbnRhbFJlbW92ZSA9IGZ1bmN0aW9uIChjKSB7CisgIHZhciBv
dXQgPSBjLm91dHB1dCgpOworICBjLm1hcmtVbnNhdGlzZmllZCgpOworICBjLnJlbW92ZUZyb21H
cmFwaCgpOworICB2YXIgdW5zYXRpc2ZpZWQgPSB0aGlzLnJlbW92ZVByb3BhZ2F0ZUZyb20ob3V0
KTsKKyAgdmFyIHN0cmVuZ3RoID0gU3RyZW5ndGguUkVRVUlSRUQ7CisgIGRvIHsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHVuc2F0aXNmaWVkLnNpemUoKTsgaSsrKSB7CisgICAgICB2YXIgdSA9
IHVuc2F0aXNmaWVkLmF0KGkpOworICAgICAgaWYgKHUuc3RyZW5ndGggPT0gc3RyZW5ndGgpCisg
ICAgICAgIHRoaXMuaW5jcmVtZW50YWxBZGQodSk7CisgICAgfQorICAgIHN0cmVuZ3RoID0gc3Ry
ZW5ndGgubmV4dFdlYWtlcigpOworICB9IHdoaWxlIChzdHJlbmd0aCAhPSBTdHJlbmd0aC5XRUFL
RVNUKTsKK30KKworLyoqCisgKiBTZWxlY3QgYSBwcmV2aW91c2x5IHVudXNlZCBtYXJrIHZhbHVl
LgorICovCitQbGFubmVyLnByb3RvdHlwZS5uZXdNYXJrID0gZnVuY3Rpb24gKCkgeworICByZXR1
cm4gKyt0aGlzLmN1cnJlbnRNYXJrOworfQorCisvKioKKyAqIEV4dHJhY3QgYSBwbGFuIGZvciBy
ZXNhdGlzZmFjdGlvbiBzdGFydGluZyBmcm9tIHRoZSBnaXZlbiBzb3VyY2UKKyAqIGNvbnN0cmFp
bnRzLCB1c3VhbGx5IGEgc2V0IG9mIGlucHV0IGNvbnN0cmFpbnRzLiBUaGlzIG1ldGhvZAorICog
YXNzdW1lcyB0aGF0IHN0YXkgb3B0aW1pemF0aW9uIGlzIGRlc2lyZWQ7IHRoZSBwbGFuIHdpbGwg
Y29udGFpbgorICogb25seSBjb25zdHJhaW50cyB3aG9zZSBvdXRwdXQgdmFyaWFibGVzIGFyZSBu
b3Qgc3RheS4gQ29uc3RyYWludHMKKyAqIHRoYXQgZG8gbm8gY29tcHV0YXRpb24sIHN1Y2ggYXMg
c3RheSBhbmQgZWRpdCBjb25zdHJhaW50cywgYXJlCisgKiBub3QgaW5jbHVkZWQgaW4gdGhlIHBs
YW4uCisgKiBEZXRhaWxzOiBUaGUgb3V0cHV0cyBvZiBhIGNvbnN0cmFpbnQgYXJlIG1hcmtlZCB3
aGVuIGl0IGlzIGFkZGVkCisgKiB0byB0aGUgcGxhbiB1bmRlciBjb25zdHJ1Y3Rpb24uIEEgY29u
c3RyYWludCBtYXkgYmUgYXBwZW5kZWQgdG8KKyAqIHRoZSBwbGFuIHdoZW4gYWxsIGl0cyBpbnB1
dCB2YXJpYWJsZXMgYXJlIGtub3duLiBBIHZhcmlhYmxlIGlzCisgKiBrbm93biBpZiBlaXRoZXIg
YSkgdGhlIHZhcmlhYmxlIGlzIG1hcmtlZCAoaW5kaWNhdGluZyB0aGF0IGhhcworICogYmVlbiBj
b21wdXRlZCBieSBhIGNvbnN0cmFpbnQgYXBwZWFyaW5nIGVhcmxpZXIgaW4gdGhlIHBsYW4pLCBi
KQorICogdGhlIHZhcmlhYmxlIGlzICdzdGF5JyAoaS5lLiBpdCBpcyBhIGNvbnN0YW50IGF0IHBs
YW4gZXhlY3V0aW9uCisgKiB0aW1lKSwgb3IgYykgdGhlIHZhcmlhYmxlIGlzIG5vdCBkZXRlcm1p
bmVkIGJ5IGFueQorICogY29uc3RyYWludC4gVGhlIGxhc3QgcHJvdmlzaW9uIGlzIGZvciBwYXN0
IHN0YXRlcyBvZiBoaXN0b3J5CisgKiB2YXJpYWJsZXMsIHdoaWNoIGFyZSBub3Qgc3RheSBidXQg
d2hpY2ggYXJlIGFsc28gbm90IGNvbXB1dGVkIGJ5CisgKiBhbnkgY29uc3RyYWludC4KKyAqIEFz
c3VtZTogc291cmNlcyBhcmUgYWxsIHNhdGlzZmllZC4KKyAqLworUGxhbm5lci5wcm90b3R5cGUu
bWFrZVBsYW4gPSBmdW5jdGlvbiAoc291cmNlcykgeworICB2YXIgbWFyayA9IHRoaXMubmV3TWFy
aygpOworICB2YXIgcGxhbiA9IG5ldyBQbGFuKCk7CisgIHZhciB0b2RvID0gc291cmNlczsKKyAg
d2hpbGUgKHRvZG8uc2l6ZSgpID4gMCkgeworICAgIHZhciBjID0gdG9kby5yZW1vdmVGaXJzdCgp
OworICAgIGlmIChjLm91dHB1dCgpLm1hcmsgIT0gbWFyayAmJiBjLmlucHV0c0tub3duKG1hcmsp
KSB7CisgICAgICBwbGFuLmFkZENvbnN0cmFpbnQoYyk7CisgICAgICBjLm91dHB1dCgpLm1hcmsg
PSBtYXJrOworICAgICAgdGhpcy5hZGRDb25zdHJhaW50c0NvbnN1bWluZ1RvKGMub3V0cHV0KCks
IHRvZG8pOworICAgIH0KKyAgfQorICByZXR1cm4gcGxhbjsKK30KKworLyoqCisgKiBFeHRyYWN0
IGEgcGxhbiBmb3IgcmVzYXRpc2Z5aW5nIHN0YXJ0aW5nIGZyb20gdGhlIG91dHB1dCBvZiB0aGUK
KyAqIGdpdmVuIGNvbnN0cmFpbnRzLCB1c3VhbGx5IGEgc2V0IG9mIGlucHV0IGNvbnN0cmFpbnRz
LgorICovCitQbGFubmVyLnByb3RvdHlwZS5leHRyYWN0UGxhbkZyb21Db25zdHJhaW50cyA9IGZ1
bmN0aW9uIChjb25zdHJhaW50cykgeworICB2YXIgc291cmNlcyA9IG5ldyBPcmRlcmVkQ29sbGVj
dGlvbigpOworICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnN0cmFpbnRzLnNpemUoKTsgaSsrKSB7
CisgICAgdmFyIGMgPSBjb25zdHJhaW50cy5hdChpKTsKKyAgICBpZiAoYy5pc0lucHV0KCkgJiYg
Yy5pc1NhdGlzZmllZCgpKQorICAgICAgLy8gbm90IGluIHBsYW4gYWxyZWFkeSBhbmQgZWxpZ2li
bGUgZm9yIGluY2x1c2lvbgorICAgICAgc291cmNlcy5hZGQoYyk7CisgIH0KKyAgcmV0dXJuIHRo
aXMubWFrZVBsYW4oc291cmNlcyk7Cit9CisKKy8qKgorICogUmVjb21wdXRlIHRoZSB3YWxrYWJv
dXQgc3RyZW5ndGhzIGFuZCBzdGF5IGZsYWdzIG9mIGFsbCB2YXJpYWJsZXMKKyAqIGRvd25zdHJl
YW0gb2YgdGhlIGdpdmVuIGNvbnN0cmFpbnQgYW5kIHJlY29tcHV0ZSB0aGUgYWN0dWFsCisgKiB2
YWx1ZXMgb2YgYWxsIHZhcmlhYmxlcyB3aG9zZSBzdGF5IGZsYWcgaXMgdHJ1ZS4gSWYgYSBjeWNs
ZSBpcworICogZGV0ZWN0ZWQsIHJlbW92ZSB0aGUgZ2l2ZW4gY29uc3RyYWludCBhbmQgYW5zd2Vy
CisgKiBmYWxzZS4gT3RoZXJ3aXNlLCBhbnN3ZXIgdHJ1ZS4KKyAqIERldGFpbHM6IEN5Y2xlcyBh
cmUgZGV0ZWN0ZWQgd2hlbiBhIG1hcmtlZCB2YXJpYWJsZSBpcworICogZW5jb3VudGVyZWQgZG93
bnN0cmVhbSBvZiB0aGUgZ2l2ZW4gY29uc3RyYWludC4gVGhlIHNlbmRlciBpcworICogYXNzdW1l
ZCB0byBoYXZlIG1hcmtlZCB0aGUgaW5wdXRzIG9mIHRoZSBnaXZlbiBjb25zdHJhaW50IHdpdGgK
KyAqIHRoZSBnaXZlbiBtYXJrLiBUaHVzLCBlbmNvdW50ZXJpbmcgYSBtYXJrZWQgbm9kZSBkb3du
c3RyZWFtIG9mCisgKiB0aGUgb3V0cHV0IGNvbnN0cmFpbnQgbWVhbnMgdGhhdCB0aGVyZSBpcyBh
IHBhdGggZnJvbSB0aGUKKyAqIGNvbnN0cmFpbnQncyBvdXRwdXQgdG8gb25lIG9mIGl0cyBpbnB1
dHMuCisgKi8KK1BsYW5uZXIucHJvdG90eXBlLmFkZFByb3BhZ2F0ZSA9IGZ1bmN0aW9uIChjLCBt
YXJrKSB7CisgIHZhciB0b2RvID0gbmV3IE9yZGVyZWRDb2xsZWN0aW9uKCk7CisgIHRvZG8uYWRk
KGMpOworICB3aGlsZSAodG9kby5zaXplKCkgPiAwKSB7CisgICAgdmFyIGQgPSB0b2RvLnJlbW92
ZUZpcnN0KCk7CisgICAgaWYgKGQub3V0cHV0KCkubWFyayA9PSBtYXJrKSB7CisgICAgICB0aGlz
LmluY3JlbWVudGFsUmVtb3ZlKGMpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBk
LnJlY2FsY3VsYXRlKCk7CisgICAgdGhpcy5hZGRDb25zdHJhaW50c0NvbnN1bWluZ1RvKGQub3V0
cHV0KCksIHRvZG8pOworICB9CisgIHJldHVybiB0cnVlOworfQorCisKKy8qKgorICogVXBkYXRl
IHRoZSB3YWxrYWJvdXQgc3RyZW5ndGhzIGFuZCBzdGF5IGZsYWdzIG9mIGFsbCB2YXJpYWJsZXMK
KyAqIGRvd25zdHJlYW0gb2YgdGhlIGdpdmVuIGNvbnN0cmFpbnQuIEFuc3dlciBhIGNvbGxlY3Rp
b24gb2YKKyAqIHVuc2F0aXNmaWVkIGNvbnN0cmFpbnRzIHNvcnRlZCBpbiBvcmRlciBvZiBkZWNy
ZWFzaW5nIHN0cmVuZ3RoLgorICovCitQbGFubmVyLnByb3RvdHlwZS5yZW1vdmVQcm9wYWdhdGVG
cm9tID0gZnVuY3Rpb24gKG91dCkgeworICBvdXQuZGV0ZXJtaW5lZEJ5ID0gbnVsbDsKKyAgb3V0
LndhbGtTdHJlbmd0aCA9IFN0cmVuZ3RoLldFQUtFU1Q7CisgIG91dC5zdGF5ID0gdHJ1ZTsKKyAg
dmFyIHVuc2F0aXNmaWVkID0gbmV3IE9yZGVyZWRDb2xsZWN0aW9uKCk7CisgIHZhciB0b2RvID0g
bmV3IE9yZGVyZWRDb2xsZWN0aW9uKCk7CisgIHRvZG8uYWRkKG91dCk7CisgIHdoaWxlICh0b2Rv
LnNpemUoKSA+IDApIHsKKyAgICB2YXIgdiA9IHRvZG8ucmVtb3ZlRmlyc3QoKTsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHYuY29uc3RyYWludHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgIHZhciBj
ID0gdi5jb25zdHJhaW50cy5hdChpKTsKKyAgICAgIGlmICghYy5pc1NhdGlzZmllZCgpKQorICAg
ICAgICB1bnNhdGlzZmllZC5hZGQoYyk7CisgICAgfQorICAgIHZhciBkZXRlcm1pbmluZyA9IHYu
ZGV0ZXJtaW5lZEJ5OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdi5jb25zdHJhaW50cy5zaXpl
KCk7IGkrKykgeworICAgICAgdmFyIG5leHQgPSB2LmNvbnN0cmFpbnRzLmF0KGkpOworICAgICAg
aWYgKG5leHQgIT0gZGV0ZXJtaW5pbmcgJiYgbmV4dC5pc1NhdGlzZmllZCgpKSB7CisgICAgICAg
IG5leHQucmVjYWxjdWxhdGUoKTsKKyAgICAgICAgdG9kby5hZGQobmV4dC5vdXRwdXQoKSk7Cisg
ICAgICB9CisgICAgfQorICB9CisgIHJldHVybiB1bnNhdGlzZmllZDsKK30KKworUGxhbm5lci5w
cm90b3R5cGUuYWRkQ29uc3RyYWludHNDb25zdW1pbmdUbyA9IGZ1bmN0aW9uICh2LCBjb2xsKSB7
CisgIHZhciBkZXRlcm1pbmluZyA9IHYuZGV0ZXJtaW5lZEJ5OworICB2YXIgY2MgPSB2LmNvbnN0
cmFpbnRzOworICBmb3IgKHZhciBpID0gMDsgaSA8IGNjLnNpemUoKTsgaSsrKSB7CisgICAgdmFy
IGMgPSBjYy5hdChpKTsKKyAgICBpZiAoYyAhPSBkZXRlcm1pbmluZyAmJiBjLmlzU2F0aXNmaWVk
KCkpCisgICAgICBjb2xsLmFkZChjKTsKKyAgfQorfQorCisvKiAtLS0gKgorICogUCBsIGEgbgor
ICogLS0tICovCisKKy8qKgorICogQSBQbGFuIGlzIGFuIG9yZGVyZWQgbGlzdCBvZiBjb25zdHJh
aW50cyB0byBiZSBleGVjdXRlZCBpbiBzZXF1ZW5jZQorICogdG8gcmVzYXRpc2Z5IGFsbCBjdXJy
ZW50bHkgc2F0aXNmaWFibGUgY29uc3RyYWludHMgaW4gdGhlIGZhY2Ugb2YKKyAqIG9uZSBvciBt
b3JlIGNoYW5naW5nIGlucHV0cy4KKyAqLworZnVuY3Rpb24gUGxhbigpIHsKKyAgdGhpcy52ID0g
bmV3IE9yZGVyZWRDb2xsZWN0aW9uKCk7Cit9CisKK1BsYW4ucHJvdG90eXBlLmFkZENvbnN0cmFp
bnQgPSBmdW5jdGlvbiAoYykgeworICB0aGlzLnYuYWRkKGMpOworfQorCitQbGFuLnByb3RvdHlw
ZS5zaXplID0gZnVuY3Rpb24gKCkgeworICByZXR1cm4gdGhpcy52LnNpemUoKTsKK30KKworUGxh
bi5wcm90b3R5cGUuY29uc3RyYWludEF0ID0gZnVuY3Rpb24gKGluZGV4KSB7CisgIHJldHVybiB0
aGlzLnYuYXQoaW5kZXgpOworfQorCitQbGFuLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24g
KCkgeworICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc2l6ZSgpOyBpKyspIHsKKyAgICB2YXIg
YyA9IHRoaXMuY29uc3RyYWludEF0KGkpOworICAgIGMuZXhlY3V0ZSgpOworICB9Cit9CisKKy8q
IC0tLSAqCisgKiBNIGEgaSBuCisgKiAtLS0gKi8KKworLyoqCisgKiBUaGlzIGlzIHRoZSBzdGFu
ZGFyZCBEZWx0YUJsdWUgYmVuY2htYXJrLiBBIGxvbmcgY2hhaW4gb2YgZXF1YWxpdHkKKyAqIGNv
bnN0cmFpbnRzIGlzIGNvbnN0cnVjdGVkIHdpdGggYSBzdGF5IGNvbnN0cmFpbnQgb24gb25lIGVu
ZC4gQW4KKyAqIGVkaXQgY29uc3RyYWludCBpcyB0aGVuIGFkZGVkIHRvIHRoZSBvcHBvc2l0ZSBl
bmQgYW5kIHRoZSB0aW1lIGlzCisgKiBtZWFzdXJlZCBmb3IgYWRkaW5nIGFuZCByZW1vdmluZyB0
aGlzIGNvbnN0cmFpbnQsIGFuZCBleHRyYWN0aW5nCisgKiBhbmQgZXhlY3V0aW5nIGEgY29uc3Ry
YWludCBzYXRpc2ZhY3Rpb24gcGxhbi4gVGhlcmUgYXJlIHR3byBjYXNlcy4KKyAqIEluIGNhc2Ug
MSwgdGhlIGFkZGVkIGNvbnN0cmFpbnQgaXMgc3Ryb25nZXIgdGhhbiB0aGUgc3RheQorICogY29u
c3RyYWludCBhbmQgdmFsdWVzIG11c3QgcHJvcGFnYXRlIGRvd24gdGhlIGVudGlyZSBsZW5ndGgg
b2YgdGhlCisgKiBjaGFpbi4gSW4gY2FzZSAyLCB0aGUgYWRkZWQgY29uc3RyYWludCBpcyB3ZWFr
ZXIgdGhhbiB0aGUgc3RheQorICogY29uc3RyYWludCBzbyBpdCBjYW5ub3QgYmUgYWNjb21vZGF0
ZWQuIFRoZSBjb3N0IGluIHRoaXMgY2FzZSBpcywKKyAqIG9mIGNvdXJzZSwgdmVyeSBsb3cuIFR5
cGljYWwgc2l0dWF0aW9ucyBsaWUgc29tZXdoZXJlIGJldHdlZW4gdGhlc2UKKyAqIHR3byBleHRy
ZW1lcy4KKyAqLworZnVuY3Rpb24gY2hhaW5UZXN0KG4pIHsKKyAgcGxhbm5lciA9IG5ldyBQbGFu
bmVyKCk7CisgIHZhciBwcmV2ID0gbnVsbCwgZmlyc3QgPSBudWxsLCBsYXN0ID0gbnVsbDsKKwor
ICAvLyBCdWlsZCBjaGFpbiBvZiBuIGVxdWFsaXR5IGNvbnN0cmFpbnRzCisgIGZvciAodmFyIGkg
PSAwOyBpIDw9IG47IGkrKykgeworICAgIHZhciBuYW1lID0gInYiICsgaTsKKyAgICB2YXIgdiA9
IG5ldyBWYXJpYWJsZShuYW1lKTsKKyAgICBpZiAocHJldiAhPSBudWxsKQorICAgICAgbmV3IEVx
dWFsaXR5Q29uc3RyYWludChwcmV2LCB2LCBTdHJlbmd0aC5SRVFVSVJFRCk7CisgICAgaWYgKGkg
PT0gMCkgZmlyc3QgPSB2OworICAgIGlmIChpID09IG4pIGxhc3QgPSB2OworICAgIHByZXYgPSB2
OworICB9CisKKyAgbmV3IFN0YXlDb25zdHJhaW50KGxhc3QsIFN0cmVuZ3RoLlNUUk9OR19ERUZB
VUxUKTsKKyAgdmFyIGVkaXQgPSBuZXcgRWRpdENvbnN0cmFpbnQoZmlyc3QsIFN0cmVuZ3RoLlBS
RUZFUlJFRCk7CisgIHZhciBlZGl0cyA9IG5ldyBPcmRlcmVkQ29sbGVjdGlvbigpOworICBlZGl0
cy5hZGQoZWRpdCk7CisgIHZhciBwbGFuID0gcGxhbm5lci5leHRyYWN0UGxhbkZyb21Db25zdHJh
aW50cyhlZGl0cyk7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKyAgICBmaXJz
dC52YWx1ZSA9IGk7CisgICAgcGxhbi5leGVjdXRlKCk7CisgICAgaWYgKGxhc3QudmFsdWUgIT0g
aSkKKyAgICAgIGFsZXJ0KCJDaGFpbiB0ZXN0IGZhaWxlZC4iKTsKKyAgfQorfQorCisvKioKKyAq
IFRoaXMgdGVzdCBjb25zdHJ1Y3RzIGEgdHdvIHNldHMgb2YgdmFyaWFibGVzIHJlbGF0ZWQgdG8g
ZWFjaAorICogb3RoZXIgYnkgYSBzaW1wbGUgbGluZWFyIHRyYW5zZm9ybWF0aW9uIChzY2FsZSBh
bmQgb2Zmc2V0KS4gVGhlCisgKiB0aW1lIGlzIG1lYXN1cmVkIHRvIGNoYW5nZSBhIHZhcmlhYmxl
IG9uIGVpdGhlciBzaWRlIG9mIHRoZQorICogbWFwcGluZyBhbmQgdG8gY2hhbmdlIHRoZSBzY2Fs
ZSBhbmQgb2Zmc2V0IGZhY3RvcnMuCisgKi8KK2Z1bmN0aW9uIHByb2plY3Rpb25UZXN0KG4pIHsK
KyAgcGxhbm5lciA9IG5ldyBQbGFubmVyKCk7CisgIHZhciBzY2FsZSA9IG5ldyBWYXJpYWJsZSgi
c2NhbGUiLCAxMCk7CisgIHZhciBvZmZzZXQgPSBuZXcgVmFyaWFibGUoIm9mZnNldCIsIDEwMDAp
OworICB2YXIgc3JjID0gbnVsbCwgZHN0ID0gbnVsbDsKKworICB2YXIgZGVzdHMgPSBuZXcgT3Jk
ZXJlZENvbGxlY3Rpb24oKTsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICBz
cmMgPSBuZXcgVmFyaWFibGUoInNyYyIgKyBpLCBpKTsKKyAgICBkc3QgPSBuZXcgVmFyaWFibGUo
ImRzdCIgKyBpLCBpKTsKKyAgICBkZXN0cy5hZGQoZHN0KTsKKyAgICBuZXcgU3RheUNvbnN0cmFp
bnQoc3JjLCBTdHJlbmd0aC5OT1JNQUwpOworICAgIG5ldyBTY2FsZUNvbnN0cmFpbnQoc3JjLCBz
Y2FsZSwgb2Zmc2V0LCBkc3QsIFN0cmVuZ3RoLlJFUVVJUkVEKTsKKyAgfQorCisgIGNoYW5nZShz
cmMsIDE3KTsKKyAgaWYgKGRzdC52YWx1ZSAhPSAxMTcwKSBhbGVydCgiUHJvamVjdGlvbiAxIGZh
aWxlZCIpOworICBjaGFuZ2UoZHN0LCAxMDUwKTsKKyAgaWYgKHNyYy52YWx1ZSAhPSA1KSBhbGVy
dCgiUHJvamVjdGlvbiAyIGZhaWxlZCIpOworICBjaGFuZ2Uoc2NhbGUsIDUpOworICBmb3IgKHZh
ciBpID0gMDsgaSA8IG4gLSAxOyBpKyspIHsKKyAgICBpZiAoZGVzdHMuYXQoaSkudmFsdWUgIT0g
aSAqIDUgKyAxMDAwKQorICAgICAgYWxlcnQoIlByb2plY3Rpb24gMyBmYWlsZWQiKTsKKyAgfQor
ICBjaGFuZ2Uob2Zmc2V0LCAyMDAwKTsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBuIC0gMTsgaSsr
KSB7CisgICAgaWYgKGRlc3RzLmF0KGkpLnZhbHVlICE9IGkgKiA1ICsgMjAwMCkKKyAgICAgIGFs
ZXJ0KCJQcm9qZWN0aW9uIDQgZmFpbGVkIik7CisgIH0KK30KKworZnVuY3Rpb24gY2hhbmdlKHYs
IG5ld1ZhbHVlKSB7CisgIHZhciBlZGl0ID0gbmV3IEVkaXRDb25zdHJhaW50KHYsIFN0cmVuZ3Ro
LlBSRUZFUlJFRCk7CisgIHZhciBlZGl0cyA9IG5ldyBPcmRlcmVkQ29sbGVjdGlvbigpOworICBl
ZGl0cy5hZGQoZWRpdCk7CisgIHZhciBwbGFuID0gcGxhbm5lci5leHRyYWN0UGxhbkZyb21Db25z
dHJhaW50cyhlZGl0cyk7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykgeworICAgIHYu
dmFsdWUgPSBuZXdWYWx1ZTsKKyAgICBwbGFuLmV4ZWN1dGUoKTsKKyAgfQorICBlZGl0LmRlc3Ry
b3lDb25zdHJhaW50KCk7Cit9CisKKy8vIEdsb2JhbCB2YXJpYWJsZSBob2xkaW5nIHRoZSBjdXJy
ZW50IHBsYW5uZXIuCit2YXIgcGxhbm5lciA9IG51bGw7CisKK2Z1bmN0aW9uIGRlbHRhQmx1ZSgp
IHsKKyAgY2hhaW5UZXN0KDEwMCk7CisgIHByb2plY3Rpb25UZXN0KDEwMCk7Cit9CisKKy8vIGRl
bHRhQmx1ZSgpOwpJbmRleDogU3VuU3BpZGVyL3Rlc3RzL3Y4LWVhcmxleS1ib3llci5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTdW5TcGlkZXIvdGVzdHMvdjgtZWFybGV5LWJveWVyLmpzCShyZXZpc2lvbiAw
KQorKysgU3VuU3BpZGVyL3Rlc3RzL3Y4LWVhcmxleS1ib3llci5qcwkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw0Njc4IEBACisvLyBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
Ynkgc2NoZW1lMmpzLCBleGNlcHQgZm9yIHRoZQorLy8gYmVuY2htYXJrIGhhcm5lc3MgY29kZSBh
dCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIGZpbGUuCisKKy8qKioqKioqKioqKioqIEdF
TkVSQVRFRCBGSUxFIC0gRE8gTk9UIEVESVQgKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioq
IEdFTkVSQVRFRCBGSUxFIC0gRE8gTk9UIEVESVQgKioqKioqKioqKioqKi8KKy8qKioqKioqKioq
KioqIEdFTkVSQVRFRCBGSUxFIC0gRE8gTk9UIEVESVQgKioqKioqKioqKioqKi8KKy8qKioqKioq
KioqKioqIEdFTkVSQVRFRCBGSUxFIC0gRE8gTk9UIEVESVQgKioqKioqKioqKioqKi8KKy8qKioq
KioqKioqKioqIEdFTkVSQVRFRCBGSUxFIC0gRE8gTk9UIEVESVQgKioqKioqKioqKioqKi8KKy8q
KioqKioqKioqKioqIEdFTkVSQVRFRCBGSUxFIC0gRE8gTk9UIEVESVQgKioqKioqKioqKioqKi8K
Ky8qKioqKioqKioqKioqIEdFTkVSQVRFRCBGSUxFIC0gRE8gTk9UIEVESVQgKioqKioqKioqKioq
Ki8KKy8qKioqKioqKioqKioqIEdFTkVSQVRFRCBGSUxFIC0gRE8gTk9UIEVESVQgKioqKioqKioq
KioqKi8KKy8qCisgKiBUbyB1c2Ugd3JpdGUvcHJpbnRzLy4uLiB0aGUgZGVmYXVsdC1vdXRwdXQg
cG9ydCBoYXMgdG8gYmUgc2V0IGZpcnN0LgorICogU2ltcGx5IHNldHRpbmcgU0NfREVGQVVMVF9P
VVQgYW5kIFNDX0VSUk9SX09VVCB0byB0aGUgZGVzaXJlZCB2YWx1ZXMKKyAqIHNob3VsZCBkbyB0
aGUgdHJpY2suCisgKiBJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUgdGhlIHN0ZC1vdXQgYW5kIGVy
cm9yLXBvcnQgYXJlIHJlZGlyZWN0ZWQgdG8KKyAqIGEgRElWLgorZnVuY3Rpb24gaW5pdFJ1bnRp
bWUoKSB7CisgICAgZnVuY3Rpb24gZXNjYXBlSFRNTChzKSB7CisJdmFyIHRtcCA9IHM7CisJdG1w
ID0gdG1wLnJlcGxhY2UoLyYvZywgIiZhbXA7Iik7CisJdG1wID0gdG1wLnJlcGxhY2UoLzwvZywg
IiZsdDsiKTsKKwl0bXAgPSB0bXAucmVwbGFjZSgvPi9nLCAiJmd0OyIpOworCXRtcCA9IHRtcC5y
ZXBsYWNlKC8gL2csICImbmJzcDsiKTsKKwl0bXAgPSB0bXAucmVwbGFjZSgvXG4vZywgIjxiciAv
PiIpOworCXRtcCA9IHRtcC5yZXBsYWNlKC9cdC9nLCAiJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3Ai
KTsKKwlyZXR1cm4gdG1wOworCQorICAgIH0KKworICAgIGRvY3VtZW50LndyaXRlKCI8ZGl2IGlk
PSdzdGRvdXQnPjwvZGl2PiIpOworICAgIFNDX0RFRkFVTFRfT1VUID0gbmV3IHNjX0dlbmVyaWNP
dXRwdXRQb3J0KAorCWZ1bmN0aW9uKHMpIHsKKwkgICAgdmFyIHN0ZG91dCA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdzdGRvdXQnKTsKKwkgICAgc3Rkb3V0LmlubmVySFRNTCA9IHN0ZG91dC5p
bm5lckhUTUwgKyBlc2NhcGVIVE1MKHMpOworCX0pOworICAgIFNDX0VSUk9SX09VVCA9IFNDX0RF
RkFVTFRfT1VUOworfQorKi8KKworCitmdW5jdGlvbiBzY19wcmludF9kZWJ1ZygpIHsKKyAgICBz
Y19wcmludC5hcHBseShudWxsLCBhcmd1bWVudHMpOworfQorLyoqKiBNRVRBICgoZXhwb3J0ICpq
cyopKSAqLwordmFyIHNjX0pTX0dMT0JBTFMgPSB0aGlzOworCit2YXIgX19zY19MSU5FPS0xOwor
dmFyIF9fc2NfRklMRT0iIjsKKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9u
IHNjX2FsZXJ0KCkgeworICAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7CisgICB2YXIgcyA9
ICIiOworICAgdmFyIGk7CisKKyAgIGZvciggaSA9IDA7IGkgPCBsZW47IGkrKyApIHsKKyAgICAg
ICBzICs9IHNjX3RvRGlzcGxheVN0cmluZyhhcmd1bWVudHNbIGkgXSk7CisgICB9CisKKyAgIHJl
dHVybiBhbGVydCggcyApOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLworZnVuY3Rp
b24gc2NfdHlwZW9mKCB4ICkgeworICAgcmV0dXJuIHR5cGVvZiB4OworfQorCisvKioqIE1FVEEg
KChleHBvcnQgI3QpKSAqLworZnVuY3Rpb24gc2NfZXJyb3IoKSB7CisgICAgdmFyIGEgPSBbc2Nf
anNzdHJpbmcyc3ltYm9sKCIqZXJyb3IqIildOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJn
dW1lbnRzLmxlbmd0aDsgaSsrKSB7CisJYVtpKzFdID0gYXJndW1lbnRzW2ldOworICAgIH0KKyAg
ICB0aHJvdyBhOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAgIChwZWVw
aG9sZSAocHJlZml4ICJ0aHJvdyAiKSkpCisqLworZnVuY3Rpb24gc2NfcmFpc2Uob2JqKSB7Cisg
ICAgdGhyb3cgb2JqOworfQorCisvKioqIE1FVEEgKChleHBvcnQgd2l0aC1oYW5kbGVyLWxhbWJk
YSkpICovCitmdW5jdGlvbiBzY193aXRoSGFuZGxlckxhbWJkYShoYW5kbGVyLCBib2R5KSB7Cisg
ICAgdHJ5IHsKKwlyZXR1cm4gYm9keSgpOworICAgIH0gY2F0Y2goZSkgeworCWlmICghZS5faW50
ZXJuYWxFeGNlcHRpb24pCisJICAgIHJldHVybiBoYW5kbGVyKGUpOworCWVsc2UKKwkgICAgdGhy
b3cgZTsKKyAgICB9Cit9CisKK3ZhciBzY19wcm9wZXJ0aWVzID0gbmV3IE9iamVjdCgpOworCisv
KioqIE1FVEEgKChleHBvcnQgI3QpKSAqLworZnVuY3Rpb24gc2NfcHV0cHJvcEJhbmcoc3ltLCBr
ZXksIHZhbCkgeworICAgIHZhciBodCA9IHNjX3Byb3BlcnRpZXNbc3ltXTsKKyAgICBpZiAoIWh0
KSB7CisJaHQgPSBuZXcgT2JqZWN0KCk7CisJc2NfcHJvcGVydGllc1tzeW1dID0gaHQ7CisgICAg
fQorICAgIGh0W2tleV0gPSB2YWw7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCitm
dW5jdGlvbiBzY19nZXRwcm9wKHN5bSwga2V5KSB7CisgICAgdmFyIGh0ID0gc2NfcHJvcGVydGll
c1tzeW1dOworICAgIGlmIChodCkgeworCWlmIChrZXkgaW4gaHQpCisJICAgIHJldHVybiBodFtr
ZXldOworCWVsc2UKKwkgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZQorCXJldHVybiBmYWxz
ZTsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9uIHNjX3JlbXByb3BC
YW5nKHN5bSwga2V5KSB7CisgICAgdmFyIGh0ID0gc2NfcHJvcGVydGllc1tzeW1dOworICAgIGlm
IChodCkKKwlkZWxldGUgaHRba2V5XTsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8K
K2Z1bmN0aW9uIHNjX2FueTJTdHJpbmcobykgeworICAgIHJldHVybiBqc3N0cmluZzJzdHJpbmco
c2NfdG9EaXNwbGF5U3RyaW5nKG8pKTsKK30gICAgCisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkK
KyAgICAgICAgICAgKHBlZXBob2xlIChpbmZpeCAyIDIgIj09PSIpKQorICAgICAgICAgICAodHlw
ZSBib29sKSkKKyovCitmdW5jdGlvbiBzY19pc0VxdihvMSwgbzIpIHsKKyAgICByZXR1cm4gKG8x
ID09PSBvMik7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBo
b2xlIChpbmZpeCAyIDIgIj09PSIpKQorICAgICAgICAgICAodHlwZSBib29sKSkKKyovCitmdW5j
dGlvbiBzY19pc0VxKG8xLCBvMikgeworICAgIHJldHVybiAobzEgPT09IG8yKTsKK30KKworLyoq
KiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAodHlwZSBib29sKSkKKyovCitmdW5jdGlv
biBzY19pc051bWJlcihuKSB7CisgICAgcmV0dXJuICh0eXBlb2YgbiA9PT0gIm51bWJlciIpOwor
fQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAgICh0eXBlIGJvb2wpKQorKi8K
K2Z1bmN0aW9uIHNjX2lzQ29tcGxleChuKSB7CisgICAgcmV0dXJuIHNjX2lzTnVtYmVyKG4pOwor
fQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAgICh0eXBlIGJvb2wpKQorKi8K
K2Z1bmN0aW9uIHNjX2lzUmVhbChuKSB7CisgICAgcmV0dXJuIHNjX2lzTnVtYmVyKG4pOworfQor
CisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAgICh0eXBlIGJvb2wpKQorKi8KK2Z1
bmN0aW9uIHNjX2lzUmF0aW9uYWwobikgeworICAgIHJldHVybiBzY19pc1JlYWwobik7Cit9CisK
Ky8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHR5cGUgYm9vbCkpCisqLworZnVu
Y3Rpb24gc2NfaXNJbnRlZ2VyKG4pIHsKKyAgICByZXR1cm4gKHBhcnNlSW50KG4pID09PSBuKTsK
K30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAodHlwZSBib29sKQorICAg
ICAgICAgICAocGVlcGhvbGUgKHBvc3RmaXggIiwgZmFsc2UiKSkpCisqLworLy8gd2UgZG9uJ3Qg
aGF2ZSBleGFjdCBudW1iZXJzLi4uCitmdW5jdGlvbiBzY19pc0V4YWN0KG4pIHsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBo
b2xlIChwb3N0Zml4ICIsIHRydWUiKSkKKwkgICAodHlwZSBib29sKSkKKyovCitmdW5jdGlvbiBz
Y19pc0luZXhhY3QobikgeworICAgIHJldHVybiB0cnVlOworfQorCisvKioqIE1FVEEgKChleHBv
cnQgPSA9ZnggPWZsKQorICAgICAgICAgICAodHlwZSBib29sKQorICAgICAgICAgICAocGVlcGhv
bGUgKGluZml4IDIgMiAiPT09IikpKQorKi8KK2Z1bmN0aW9uIHNjX2VxdWFsKHgpIHsKKyAgICBm
b3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykKKwlpZiAoeCAhPT0gYXJn
dW1lbnRzW2ldKQorCSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8q
KiogTUVUQSAoKGV4cG9ydCA8IDxmeCA8ZmwpCisgICAgICAgICAgICh0eXBlIGJvb2wpCisgICAg
ICAgICAgIChwZWVwaG9sZSAoaW5maXggMiAyICI8IikpKQorKi8KK2Z1bmN0aW9uIHNjX2xlc3Mo
eCkgeworICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CisJ
aWYgKHggPj0gYXJndW1lbnRzW2ldKQorCSAgICByZXR1cm4gZmFsc2U7CisJeCA9IGFyZ3VtZW50
c1tpXTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCA+
ID5meCA+ZmwpCisgICAgICAgICAgICh0eXBlIGJvb2wpCisgICAgICAgICAgIChwZWVwaG9sZSAo
aW5maXggMiAyICI+IikpKQorKi8KK2Z1bmN0aW9uIHNjX2dyZWF0ZXIoeCwgeSkgeworICAgIGZv
ciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CisJaWYgKHggPD0gYXJn
dW1lbnRzW2ldKQorCSAgICByZXR1cm4gZmFsc2U7CisJeCA9IGFyZ3VtZW50c1tpXTsKKyAgICB9
CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCA8PSA8PWZ4IDw9Zmwp
CisgICAgICAgICAgICh0eXBlIGJvb2wpCisgICAgICAgICAgIChwZWVwaG9sZSAoaW5maXggMiAy
ICI8PSIpKSkKKyovCitmdW5jdGlvbiBzY19sZXNzRXF1YWwoeCwgeSkgeworICAgIGZvciAodmFy
IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CisJaWYgKHggPiBhcmd1bWVudHNb
aV0pCisJICAgIHJldHVybiBmYWxzZTsKKwl4ID0gYXJndW1lbnRzW2ldOworICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ID49ID49ZmwgPj1meCkKKyAgICAg
ICAgICAgKHR5cGUgYm9vbCkKKyAgICAgICAgICAgKHBlZXBob2xlIChpbmZpeCAyIDIgIj49Iikp
KQorKi8KK2Z1bmN0aW9uIHNjX2dyZWF0ZXJFcXVhbCh4LCB5KSB7CisgICAgZm9yICh2YXIgaSA9
IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKKwlpZiAoeCA8IGFyZ3VtZW50c1tpXSkK
KwkgICAgcmV0dXJuIGZhbHNlOworCXggPSBhcmd1bWVudHNbaV07CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAgICh0eXBlIGJv
b2wpCisgICAgICAgICAgIChwZWVwaG9sZSAocG9zdGZpeCAiPT09IDAiKSkpCisqLworZnVuY3Rp
b24gc2NfaXNaZXJvKHgpIHsKKyAgICByZXR1cm4gKHggPT09IDApOworfQorCisvKioqIE1FVEEg
KChleHBvcnQgI3QpCisgICAgICAgICAgICh0eXBlIGJvb2wpCisgICAgICAgICAgIChwZWVwaG9s
ZSAocG9zdGZpeCAiPiAwIikpKQorKi8KK2Z1bmN0aW9uIHNjX2lzUG9zaXRpdmUoeCkgeworICAg
IHJldHVybiAoeCA+IDApOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAg
ICh0eXBlIGJvb2wpCisgICAgICAgICAgIChwZWVwaG9sZSAocG9zdGZpeCAiPCAwIikpKQorKi8K
K2Z1bmN0aW9uIHNjX2lzTmVnYXRpdmUoeCkgeworICAgIHJldHVybiAoeCA8IDApOworfQorCisv
KioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAgICh0eXBlIGJvb2wpCisgICAgICAgICAg
IChwZWVwaG9sZSAocG9zdGZpeCAiJTI9PT0xIikpKQorKi8KK2Z1bmN0aW9uIHNjX2lzT2RkKHgp
IHsKKyAgICByZXR1cm4gKHggJSAyID09PSAxKTsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0
KQorICAgICAgICAgICAodHlwZSBib29sKQorICAgICAgICAgICAocGVlcGhvbGUgKHBvc3RmaXgg
IiUyPT09MCIpKSkKKyovCitmdW5jdGlvbiBzY19pc0V2ZW4oeCkgeworICAgIHJldHVybiAoeCAl
IDIgPT09IDApOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLwordmFyIHNjX21heCA9
IE1hdGgubWF4OworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK3ZhciBzY19taW4gPSBNYXRo
Lm1pbjsKKworLyoqKiBNRVRBICgoZXhwb3J0ICsgK2Z4ICtmbCkKKyAgICAgICAgICAgKHBlZXBo
b2xlIChpbmZpeCAwICNmICIrIiAiMCIpKSkKKyovCitmdW5jdGlvbiBzY19wbHVzKCkgeworICAg
IHZhciBzdW0gPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsg
aSsrKQorCXN1bSArPSBhcmd1bWVudHNbaV07CisgICAgcmV0dXJuIHN1bTsKK30KKworLyoqKiBN
RVRBICgoZXhwb3J0ICogKmZ4ICpmbCkKKyAgICAgICAgICAgKHBlZXBob2xlIChpbmZpeCAwICNm
ICIqIiAiMSIpKSkKKyovCitmdW5jdGlvbiBzY19tdWx0aSgpIHsKKyAgICB2YXIgcHJvZHVjdCA9
IDE7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspCisJcHJv
ZHVjdCAqPSBhcmd1bWVudHNbaV07CisgICAgcmV0dXJuIHByb2R1Y3Q7Cit9CisKKy8qKiogTUVU
QSAoKGV4cG9ydCAtIC1meCAtZmwpCisgICAgICAgICAgIChwZWVwaG9sZSAobWludXMpKSkKKyov
CitmdW5jdGlvbiBzY19taW51cyh4KSB7CisgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEp
CisJcmV0dXJuIC14OworICAgIGVsc2UgeworCXZhciByZXMgPSB4OworCWZvciAodmFyIGkgPSAx
OyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKQorCSAgICByZXMgLT0gYXJndW1lbnRzW2ldOwor
CXJldHVybiByZXM7CisgICAgfQorfQorCisvKioqIE1FVEEgKChleHBvcnQgLyAvZmwpCisgICAg
ICAgICAgIChwZWVwaG9sZSAoZGl2KSkpCisqLworZnVuY3Rpb24gc2NfZGl2KHgpIHsKKyAgICBp
ZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkKKwlyZXR1cm4gMS94OworICAgIGVsc2UgeworCXZh
ciByZXMgPSB4OworCWZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKQor
CSAgICByZXMgLz0gYXJndW1lbnRzW2ldOworCXJldHVybiByZXM7CisgICAgfQorfQorCisvKioq
IE1FVEEgKChleHBvcnQgI3QpKSAqLwordmFyIHNjX2FicyA9IE1hdGguYWJzOworCisvKioqIE1F
VEEgKChleHBvcnQgcXVvdGllbnQgL2Z4KQorICAgICAgICAgICAocGVlcGhvbGUgKGhvbGUgMiAi
cGFyc2VJbnQoIiB4ICIvIiB5ICIpIikpKQorKi8KK2Z1bmN0aW9uIHNjX3F1b3RpZW50KHgsIHkp
IHsKKyAgICByZXR1cm4gcGFyc2VJbnQoeCAvIHkpOworfQorCisvKioqIE1FVEEgKChleHBvcnQg
I3QpCisgICAgICAgICAgIChwZWVwaG9sZSAoaW5maXggMiAyICIlIikpKQorKi8KK2Z1bmN0aW9u
IHNjX3JlbWFpbmRlcih4LCB5KSB7CisgICAgcmV0dXJuIHggJSB5OworfQorCisvKioqIE1FVEEg
KChleHBvcnQgI3QpCisgICAgICAgICAgIChwZWVwaG9sZSAobW9kdWxvKSkpCisqLworZnVuY3Rp
b24gc2NfbW9kdWxvKHgsIHkpIHsKKyAgICB2YXIgcmVtYWluZGVyID0geCAlIHk7CisgICAgLy8g
aWYgdGhleSBkb24ndCBoYXZlIHRoZSBzYW1lIHNpZ24KKyAgICBpZiAoKHJlbWFpbmRlciAqIHkp
IDwgMCkKKwlyZXR1cm4gcmVtYWluZGVyICsgeTsKKyAgICBlbHNlCisJcmV0dXJuIHJlbWFpbmRl
cjsKK30KKworZnVuY3Rpb24gc2NfZXVjbGlkX2djZChhLCBiKSB7CisgICAgdmFyIHRlbXA7Cisg
ICAgaWYgKGEgPT09IDApIHJldHVybiBiOworICAgIGlmIChiID09PSAwKSByZXR1cm4gYTsKKyAg
ICBpZiAoYSA8IDApIHthID0gLWE7fTsKKyAgICBpZiAoYiA8IDApIHtiID0gLWI7fTsKKyAgICBp
ZiAoYiA+IGEpIHt0ZW1wID0gYTsgYSA9IGI7IGIgPSB0ZW1wO307CisgICAgd2hpbGUgKHRydWUp
IHsKKwlhICU9IGI7CisJaWYoYSA9PT0gMCkge3JldHVybiBiO307CisJYiAlPSBhOworCWlmKGIg
PT09IDApIHtyZXR1cm4gYTt9OworICAgIH07CisgICAgcmV0dXJuIGI7Cit9CisKKy8qKiogTUVU
QSAoKGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBzY19nY2QoKSB7CisgICAgdmFyIGdjZCA9IDA7
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspCisJZ2NkID0g
c2NfZXVjbGlkX2djZChnY2QsIGFyZ3VtZW50c1tpXSk7CisgICAgcmV0dXJuIGdjZDsKK30KKwor
LyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9uIHNjX2xjbSgpIHsKKyAgICB2YXIg
bGNtID0gMTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykg
eworCXZhciBmID0gTWF0aC5yb3VuZChhcmd1bWVudHNbaV0gLyBzY19ldWNsaWRfZ2NkKGFyZ3Vt
ZW50c1tpXSwgbGNtKSk7CisJbGNtICo9IE1hdGguYWJzKGYpOworICAgIH0KKyAgICByZXR1cm4g
bGNtOworfQorCisvLyBMSU1JVEFUSU9OOiBudW1lcmF0b3IgYW5kIGRlbm9taW5hdG9yIGRvbid0
IG1ha2Ugc2Vuc2UgaW4gZmxvYXRpbmcgcG9pbnQgd29ybGQuCisvL3ZhciBTQ19NQVhfREVDSU1B
TFMgPSAxMDAwMDAwCisvLworLy8gZnVuY3Rpb24gc2NfbnVtZXJhdG9yKHgpIHsKKy8vICAgICB2
YXIgcm91bmRlZCA9IE1hdGgucm91bmQoeCAqIFNDX01BWF9ERUNJTUFMUyk7CisvLyAgICAgcmV0
dXJuIE1hdGgucm91bmQocm91bmRlZCAvIHNjX2V1Y2xpZF9nY2Qocm91bmRlZCwgU0NfTUFYX0RF
Q0lNQUxTKSk7CisvLyB9CisKKy8vIGZ1bmN0aW9uIHNjX2Rlbm9taW5hdG9yKHgpIHsKKy8vICAg
ICB2YXIgcm91bmRlZCA9IE1hdGgucm91bmQoeCAqIFNDX01BWF9ERUNJTUFMUyk7CisvLyAgICAg
cmV0dXJuIE1hdGgucm91bmQoU0NfTUFYX0RFQ0lNQUxTIC8gc2NfZXVjbGlkX2djZChyb3VuZGVk
LCBTQ19NQVhfREVDSU1BTFMpKTsKKy8vIH0KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8K
K3ZhciBzY19mbG9vciA9IE1hdGguZmxvb3I7CisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLwor
dmFyIHNjX2NlaWxpbmcgPSBNYXRoLmNlaWw7CisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLwor
dmFyIHNjX3RydW5jYXRlID0gcGFyc2VJbnQ7CisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLwor
dmFyIHNjX3JvdW5kID0gTWF0aC5yb3VuZDsKKworLy8gTElNSVRBVElPTjogc2NfcmF0aW9uYWxp
emUgZG9lc24ndCBtYWtlIHNlbnNlIGluIGEgZmxvYXRpbmcgcG9pbnQgd29ybGQuCisKKy8qKiog
TUVUQSAoKGV4cG9ydCAjdCkpICovCit2YXIgc2NfZXhwID0gTWF0aC5leHA7CisvKioqIE1FVEEg
KChleHBvcnQgI3QpKSAqLwordmFyIHNjX2xvZyA9IE1hdGgubG9nOworLyoqKiBNRVRBICgoZXhw
b3J0ICN0KSkgKi8KK3ZhciBzY19zaW4gPSBNYXRoLnNpbjsKKy8qKiogTUVUQSAoKGV4cG9ydCAj
dCkpICovCit2YXIgc2NfY29zID0gTWF0aC5jb3M7CisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAq
LwordmFyIHNjX3RhbiA9IE1hdGgudGFuOworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK3Zh
ciBzY19hc2luID0gTWF0aC5hc2luOworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK3ZhciBz
Y19hY29zID0gTWF0aC5hY29zOworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK3ZhciBzY19h
dGFuID0gTWF0aC5hdGFuOworCisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLwordmFyIHNjX3Nx
cnQgPSBNYXRoLnNxcnQ7CisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLwordmFyIHNjX2V4cHQg
PSBNYXRoLnBvdzsKKworLy8gTElNSVRBVElPTjogd2UgZG9uJ3QgaGF2ZSBjb21wbGV4IG51bWJl
cnMuCisvLyBMSU1JVEFUSU9OOiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgaGVuY2Ugbm90
IGltcGxlbWVudGVkLgorLy8gTElNSVRBVElPTjogbWFrZS1yZWN0YW5ndWxhciwgbWFrZS1wb2xh
ciwgcmVhbC1wYXJ0LCBpbWFnLXBhcnQsIG1hZ25pdHVkZSwgYW5nbGUKKy8vIExJTUlUQVRJT046
IDIgYXJndW1lbnQgYXRhbgorCisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAgIChw
ZWVwaG9sZSAoaWQpKSkKKyovCitmdW5jdGlvbiBzY19leGFjdDJpbmV4YWN0KHgpIHsKKyAgICBy
ZXR1cm4geDsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAocGVlcGhv
bGUgKGlkKSkpCisqLworZnVuY3Rpb24gc2NfaW5leGFjdDJleGFjdCh4KSB7CisgICAgcmV0dXJu
IHg7Cit9CisKK2Z1bmN0aW9uIHNjX251bWJlcjJqc3N0cmluZyh4LCByYWRpeCkgeworICAgIGlm
IChyYWRpeCkKKwlyZXR1cm4geC50b1N0cmluZyhyYWRpeCk7CisgICAgZWxzZQorCXJldHVybiB4
LnRvU3RyaW5nKCk7Cit9CisKK2Z1bmN0aW9uIHNjX2pzc3RyaW5nMm51bWJlcihzLCByYWRpeCkg
eworICAgIGlmIChzID09PSAiIikgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHJhZGl4KSB7CisJ
dmFyIHQgPSBwYXJzZUludChzLCByYWRpeCk7CisJaWYgKCF0ICYmIHQgIT09IDApIHJldHVybiBm
YWxzZTsKKwkvLyB2ZXJpZnkgdGhhdCBlYWNoIGNoYXIgaXMgaW4gcmFuZ2UuIChwYXJzZUludCBp
Z25vcmVzIGxlYWRpbmcKKwkvLyB3aGl0ZSBhbmQgdHJhaWxpbmcgY2hhcnMpCisJdmFyIGFsbG93
ZWRDaGFycyA9ICIwMTIzNDU2Nzg5MGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ii5zdWJzdHJp
bmcoMCwgcmFkaXgrMSk7CisJaWYgKChuZXcgUmVnRXhwKCJeWyIrYWxsb3dlZENoYXJzKyJdKiQi
LCAiaSIpKS50ZXN0KHMpKQorCSAgICByZXR1cm4gdDsKKwllbHNlIHJldHVybiBmYWxzZTsKKyAg
ICB9IGVsc2UgeworCXZhciB0ID0gK3M7IC8vIGRvZXMgbm90IGlnbm9yZSB0cmFpbGluZyBjaGFy
cy4KKwlpZiAoIXQgJiYgdCAhPT0gMCkgcmV0dXJuIGZhbHNlOworCS8vIHNpbXBseSB2ZXJpZnkg
dGhhdCBmaXJzdCBjaGFyIGlzIG5vdCB3aGl0ZXNwYWNlLgorCXZhciBjID0gcy5jaGFyQXQoMCk7
CisJLy8gaWYgK2MgaXMgMCwgYnV0IHRoZSBjaGFyIGlzIG5vdCAiMCIsIHRoZW4gd2UgaGF2ZSBh
IHdoaXRlc3BhY2UuCisJaWYgKCtjID09PSAwICYmIGMgIT09ICIwIikgcmV0dXJuIGZhbHNlOwor
CXJldHVybiB0OworICAgIH0KK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAg
ICAodHlwZSBib29sKQorICAgICAgICAgICAocGVlcGhvbGUgKG5vdCkpKQorKi8KK2Z1bmN0aW9u
IHNjX25vdChiKSB7CisgICAgcmV0dXJuIGIgPT09IGZhbHNlOworfQorCisvKioqIE1FVEEgKChl
eHBvcnQgI3QpCisgICAgICAgICAgICh0eXBlIGJvb2wpKQorKi8KK2Z1bmN0aW9uIHNjX2lzQm9v
bGVhbihiKSB7CisgICAgcmV0dXJuIChiID09PSB0cnVlKSB8fCAoYiA9PT0gZmFsc2UpOworfQor
CitmdW5jdGlvbiBzY19QYWlyKGNhciwgY2RyKSB7CisgICAgdGhpcy5jYXIgPSBjYXI7CisgICAg
dGhpcy5jZHIgPSBjZHI7Cit9CisKK3NjX1BhaXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rp
b24oKSB7CisgICAgcmV0dXJuIHNjX3RvRGlzcGxheVN0cmluZyh0aGlzKTsKK307CitzY19QYWly
LnByb3RvdHlwZS5zY190b1dyaXRlT3JEaXNwbGF5U3RyaW5nID0gZnVuY3Rpb24od3JpdGVPckRp
c3BsYXkpIHsKKyAgICB2YXIgY3VycmVudCA9IHRoaXM7CisKKyAgICB2YXIgcmVzID0gIigiOwor
CisgICAgd2hpbGUodHJ1ZSkgeworCXJlcyArPSB3cml0ZU9yRGlzcGxheShjdXJyZW50LmNhcik7
CisJaWYgKHNjX2lzUGFpcihjdXJyZW50LmNkcikpIHsKKwkgICAgcmVzICs9ICIgIjsKKwkgICAg
Y3VycmVudCA9IGN1cnJlbnQuY2RyOworCX0gZWxzZSBpZiAoY3VycmVudC5jZHIgIT09IG51bGwp
IHsKKwkgICAgcmVzICs9ICIgLiAiICsgd3JpdGVPckRpc3BsYXkoY3VycmVudC5jZHIpOworCSAg
ICBicmVhazsKKwl9IGVsc2UgLy8gY3VycmVudC5jZHIgPT0gbnVsbAorCSAgICBicmVhazsKKyAg
ICB9CisJCisgICAgcmVzICs9ICIpIjsKKworICAgIHJldHVybiByZXM7Cit9Oworc2NfUGFpci5w
cm90b3R5cGUuc2NfdG9EaXNwbGF5U3RyaW5nID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRo
aXMuc2NfdG9Xcml0ZU9yRGlzcGxheVN0cmluZyhzY190b0Rpc3BsYXlTdHJpbmcpOworfTsKK3Nj
X1BhaXIucHJvdG90eXBlLnNjX3RvV3JpdGVTdHJpbmcgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1
cm4gdGhpcy5zY190b1dyaXRlT3JEaXNwbGF5U3RyaW5nKHNjX3RvV3JpdGVTdHJpbmcpOworfTsK
Ky8vIHNjX1BhaXIucHJvdG90eXBlLnNjX3RvV3JpdGVDaXJjbGVTdHJpbmcgaW4gSU8uanMKKwor
LyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAodHlwZSBib29sKQorICAgICAgICAg
ICAocGVlcGhvbGUgKHBvc3RmaXggIiBpbnN0YW5jZW9mIHNjX1BhaXIiKSkpCisqLworZnVuY3Rp
b24gc2NfaXNQYWlyKHApIHsKKyAgICByZXR1cm4gKHAgaW5zdGFuY2VvZiBzY19QYWlyKTsKK30K
KworZnVuY3Rpb24gc2NfaXNQYWlyRXF1YWwocDEsIHAyLCBjb21wKSB7CisgICAgcmV0dXJuIChj
b21wKHAxLmNhciwgcDIuY2FyKSAmJiBjb21wKHAxLmNkciwgcDIuY2RyKSk7Cit9CisKKy8qKiog
TUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBob2xlIChob2xlIDIgIm5ldyBzY19Q
YWlyKCIgY2FyICIsICIgY2RyICIpIikpKQorKi8KK2Z1bmN0aW9uIHNjX2NvbnMoY2FyLCBjZHIp
IHsKKyAgICByZXR1cm4gbmV3IHNjX1BhaXIoY2FyLCBjZHIpOworfQorCisvKioqIE1FVEEgKChl
eHBvcnQgY29ucyopKSAqLworZnVuY3Rpb24gc2NfY29uc1N0YXIoKSB7CisgICAgdmFyIHJlcyA9
IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07CisgICAgZm9yICh2YXIgaSA9IGFyZ3Vt
ZW50cy5sZW5ndGgtMjsgaSA+PSAwOyBpLS0pCisJcmVzID0gbmV3IHNjX1BhaXIoYXJndW1lbnRz
W2ldLCByZXMpOworICAgIHJldHVybiByZXM7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkK
KyAgICAgICAgICAgKHBlZXBob2xlIChwb3N0Zml4ICIuY2FyIikpKQorKi8KK2Z1bmN0aW9uIHNj
X2NhcihwKSB7CisgICAgcmV0dXJuIHAuY2FyOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3Qp
CisgICAgICAgICAgIChwZWVwaG9sZSAocG9zdGZpeCAiLmNkciIpKSkKKyovCitmdW5jdGlvbiBz
Y19jZHIocCkgeworICAgIHJldHVybiBwLmNkcjsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0
KQorICAgICAgICAgICAocGVlcGhvbGUgKGhvbGUgMiBwICIuY2FyID0gIiB2YWwpKSkKKyovCitm
dW5jdGlvbiBzY19zZXRDYXJCYW5nKHAsIHZhbCkgeworICAgIHAuY2FyID0gdmFsOworfQorCisv
KioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAgIChwZWVwaG9sZSAoaG9sZSAyIHAgIi5j
ZHIgPSAiIHZhbCkpKQorKi8KK2Z1bmN0aW9uIHNjX3NldENkckJhbmcocCwgdmFsKSB7CisgICAg
cC5jZHIgPSB2YWw7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBl
ZXBob2xlIChwb3N0Zml4ICIuY2FyLmNhciIpKSkKKyovCitmdW5jdGlvbiBzY19jYWFyKHApIHsg
cmV0dXJuIHAuY2FyLmNhcjsgfQorLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAo
cGVlcGhvbGUgKHBvc3RmaXggIi5jZHIuY2FyIikpKQorKi8KK2Z1bmN0aW9uIHNjX2NhZHIocCkg
eyByZXR1cm4gcC5jZHIuY2FyOyB9CisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAg
IChwZWVwaG9sZSAocG9zdGZpeCAiLmNhci5jZHIiKSkpCisqLworZnVuY3Rpb24gc2NfY2Rhcihw
KSB7IHJldHVybiBwLmNhci5jZHI7IH0KKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAg
ICAgKHBlZXBob2xlIChwb3N0Zml4ICIuY2RyLmNkciIpKSkKKyovCitmdW5jdGlvbiBzY19jZGRy
KHApIHsgcmV0dXJuIHAuY2RyLmNkcjsgfQorLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAg
ICAgICAocGVlcGhvbGUgKHBvc3RmaXggIi5jYXIuY2FyLmNhciIpKSkKKyovCitmdW5jdGlvbiBz
Y19jYWFhcihwKSB7IHJldHVybiBwLmNhci5jYXIuY2FyOyB9CisvKioqIE1FVEEgKChleHBvcnQg
I3QpCisgICAgICAgICAgIChwZWVwaG9sZSAocG9zdGZpeCAiLmNhci5jZHIuY2FyIikpKQorKi8K
K2Z1bmN0aW9uIHNjX2NhZGFyKHApIHsgcmV0dXJuIHAuY2FyLmNkci5jYXI7IH0KKy8qKiogTUVU
QSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBob2xlIChwb3N0Zml4ICIuY2RyLmNhci5j
YXIiKSkpCisqLworZnVuY3Rpb24gc2NfY2FhZHIocCkgeyByZXR1cm4gcC5jZHIuY2FyLmNhcjsg
fQorLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAocGVlcGhvbGUgKHBvc3RmaXgg
Ii5jZHIuY2RyLmNhciIpKSkKKyovCitmdW5jdGlvbiBzY19jYWRkcihwKSB7IHJldHVybiBwLmNk
ci5jZHIuY2FyOyB9CisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAgIChwZWVwaG9s
ZSAocG9zdGZpeCAiLmNhci5jYXIuY2RyIikpKQorKi8KK2Z1bmN0aW9uIHNjX2NkYWFyKHApIHsg
cmV0dXJuIHAuY2FyLmNhci5jZHI7IH0KKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAg
ICAgKHBlZXBob2xlIChwb3N0Zml4ICIuY2RyLmNhci5jZHIiKSkpCisqLworZnVuY3Rpb24gc2Nf
Y2RhZHIocCkgeyByZXR1cm4gcC5jZHIuY2FyLmNkcjsgfQorLyoqKiBNRVRBICgoZXhwb3J0ICN0
KQorICAgICAgICAgICAocGVlcGhvbGUgKHBvc3RmaXggIi5jYXIuY2RyLmNkciIpKSkKKyovCitm
dW5jdGlvbiBzY19jZGRhcihwKSB7IHJldHVybiBwLmNhci5jZHIuY2RyOyB9CisvKioqIE1FVEEg
KChleHBvcnQgI3QpCisgICAgICAgICAgIChwZWVwaG9sZSAocG9zdGZpeCAiLmNkci5jZHIuY2Ry
IikpKQorKi8KK2Z1bmN0aW9uIHNjX2NkZGRyKHApIHsgcmV0dXJuIHAuY2RyLmNkci5jZHI7IH0K
Ky8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBob2xlIChwb3N0Zml4ICIu
Y2FyLmNhci5jYXIuY2FyIikpKQorKi8KK2Z1bmN0aW9uIHNjX2NhYWFhcihwKSB7IHJldHVybiBw
LmNhci5jYXIuY2FyLmNhcjsgfQorLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAo
cGVlcGhvbGUgKHBvc3RmaXggIi5jYXIuY2RyLmNhci5jYXIiKSkpCisqLworZnVuY3Rpb24gc2Nf
Y2FhZGFyKHApIHsgcmV0dXJuIHAuY2FyLmNkci5jYXIuY2FyOyB9CisvKioqIE1FVEEgKChleHBv
cnQgI3QpCisgICAgICAgICAgIChwZWVwaG9sZSAocG9zdGZpeCAiLmNkci5jYXIuY2FyLmNhciIp
KSkKKyovCitmdW5jdGlvbiBzY19jYWFhZHIocCkgeyByZXR1cm4gcC5jZHIuY2FyLmNhci5jYXI7
IH0KKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBob2xlIChwb3N0Zml4
ICIuY2RyLmNkci5jYXIuY2FyIikpKQorKi8KK2Z1bmN0aW9uIHNjX2NhYWRkcihwKSB7IHJldHVy
biBwLmNkci5jZHIuY2FyLmNhcjsgfQorLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAg
ICAocGVlcGhvbGUgKHBvc3RmaXggIi5jYXIuY2FyLmNhci5jZHIiKSkpCisqLworZnVuY3Rpb24g
c2NfY2RhYWFyKHApIHsgcmV0dXJuIHAuY2FyLmNhci5jYXIuY2RyOyB9CisvKioqIE1FVEEgKChl
eHBvcnQgI3QpCisgICAgICAgICAgIChwZWVwaG9sZSAocG9zdGZpeCAiLmNhci5jZHIuY2FyLmNk
ciIpKSkKKyovCitmdW5jdGlvbiBzY19jZGFkYXIocCkgeyByZXR1cm4gcC5jYXIuY2RyLmNhci5j
ZHI7IH0KKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBob2xlIChwb3N0
Zml4ICIuY2RyLmNhci5jYXIuY2RyIikpKQorKi8KK2Z1bmN0aW9uIHNjX2NkYWFkcihwKSB7IHJl
dHVybiBwLmNkci5jYXIuY2FyLmNkcjsgfQorLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAg
ICAgICAocGVlcGhvbGUgKHBvc3RmaXggIi5jZHIuY2RyLmNhci5jZHIiKSkpCisqLworZnVuY3Rp
b24gc2NfY2RhZGRyKHApIHsgcmV0dXJuIHAuY2RyLmNkci5jYXIuY2RyOyB9CisvKioqIE1FVEEg
KChleHBvcnQgI3QpCisgICAgICAgICAgIChwZWVwaG9sZSAocG9zdGZpeCAiLmNhci5jYXIuY2Ry
LmNhciIpKSkKKyovCitmdW5jdGlvbiBzY19jYWRhYXIocCkgeyByZXR1cm4gcC5jYXIuY2FyLmNk
ci5jYXI7IH0KKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBob2xlIChw
b3N0Zml4ICIuY2FyLmNkci5jZHIuY2FyIikpKQorKi8KK2Z1bmN0aW9uIHNjX2NhZGRhcihwKSB7
IHJldHVybiBwLmNhci5jZHIuY2RyLmNhcjsgfQorLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAg
ICAgICAgICAocGVlcGhvbGUgKHBvc3RmaXggIi5jZHIuY2FyLmNkci5jYXIiKSkpCisqLworZnVu
Y3Rpb24gc2NfY2FkYWRyKHApIHsgcmV0dXJuIHAuY2RyLmNhci5jZHIuY2FyOyB9CisvKioqIE1F
VEEgKChleHBvcnQgI3QpCisgICAgICAgICAgIChwZWVwaG9sZSAocG9zdGZpeCAiLmNkci5jZHIu
Y2RyLmNhciIpKSkKKyovCitmdW5jdGlvbiBzY19jYWRkZHIocCkgeyByZXR1cm4gcC5jZHIuY2Ry
LmNkci5jYXI7IH0KKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBob2xl
IChwb3N0Zml4ICIuY2FyLmNhci5jZHIuY2RyIikpKQorKi8KK2Z1bmN0aW9uIHNjX2NkZGFhcihw
KSB7IHJldHVybiBwLmNhci5jYXIuY2RyLmNkcjsgfQorLyoqKiBNRVRBICgoZXhwb3J0ICN0KQor
ICAgICAgICAgICAocGVlcGhvbGUgKHBvc3RmaXggIi5jYXIuY2RyLmNkci5jZHIiKSkpCisqLwor
ZnVuY3Rpb24gc2NfY2RkZGFyKHApIHsgcmV0dXJuIHAuY2FyLmNkci5jZHIuY2RyOyB9CisvKioq
IE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAgIChwZWVwaG9sZSAocG9zdGZpeCAiLmNkci5j
YXIuY2RyLmNkciIpKSkKKyovCitmdW5jdGlvbiBzY19jZGRhZHIocCkgeyByZXR1cm4gcC5jZHIu
Y2FyLmNkci5jZHI7IH0KKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBo
b2xlIChwb3N0Zml4ICIuY2RyLmNkci5jZHIuY2RyIikpKQorKi8KK2Z1bmN0aW9uIHNjX2NkZGRk
cihwKSB7IHJldHVybiBwLmNkci5jZHIuY2RyLmNkcjsgfQorCisvKioqIE1FVEEgKChleHBvcnQg
I3QpKSAqLworZnVuY3Rpb24gc2NfbGFzdFBhaXIobCkgeworICAgIGlmICghc2NfaXNQYWlyKGwp
KSBzY19lcnJvcigic2NfbGFzdFBhaXI6IHBhaXIgZXhwZWN0ZWQiKTsKKyAgICB2YXIgcmVzID0g
bDsKKyAgICB2YXIgY2RyID0gbC5jZHI7CisgICAgd2hpbGUgKHNjX2lzUGFpcihjZHIpKSB7CisJ
cmVzID0gY2RyOworCWNkciA9IHJlcy5jZHI7CisgICAgfQorICAgIHJldHVybiByZXM7Cit9CisK
Ky8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHR5cGUgYm9vbCkKKyAgICAgICAg
ICAgKHBlZXBob2xlIChwb3N0Zml4ICIgPT09IG51bGwiKSkpCisqLworZnVuY3Rpb24gc2NfaXNO
dWxsKG8pIHsKKyAgICByZXR1cm4gKG8gPT09IG51bGwpOworfQorCisvKioqIE1FVEEgKChleHBv
cnQgI3QpCisgICAgICAgICAgICh0eXBlIGJvb2wpKQorKi8KK2Z1bmN0aW9uIHNjX2lzTGlzdChv
KSB7CisgICAgdmFyIHJhYmJpdDsKKyAgICB2YXIgdHVydGxlOworCisgICAgdmFyIHJhYmJpdCA9
IG87CisgICAgdmFyIHR1cnRsZSA9IG87CisgICAgd2hpbGUgKHRydWUpIHsKKwlpZiAocmFiYml0
ID09PSBudWxsIHx8CisJICAgIChyYWJiaXQgaW5zdGFuY2VvZiBzY19QYWlyICYmIHJhYmJpdC5j
ZHIgPT09IG51bGwpKQorCSAgICByZXR1cm4gdHJ1ZTsgIC8vIGVuZCBvZiBsaXN0CisJZWxzZSBp
ZiAoKHJhYmJpdCBpbnN0YW5jZW9mIHNjX1BhaXIpICYmCisJCSAocmFiYml0LmNkciBpbnN0YW5j
ZW9mIHNjX1BhaXIpKSB7CisJICAgIHJhYmJpdCA9IHJhYmJpdC5jZHIuY2RyOworCSAgICB0dXJ0
bGUgPSB0dXJ0bGUuY2RyOworCSAgICBpZiAocmFiYml0ID09PSB0dXJ0bGUpIHJldHVybiBmYWxz
ZTsgLy8gY3ljbGUKKwl9IGVsc2UKKwkgICAgcmV0dXJuIGZhbHNlOyAvLyBub3QgcGFpcgorICAg
IH0KK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9uIHNjX2xpc3QoKSB7
CisgICAgdmFyIHJlcyA9IG51bGw7CisgICAgdmFyIGEgPSBhcmd1bWVudHM7CisgICAgZm9yICh2
YXIgaSA9IGEubGVuZ3RoLTE7IGkgPj0gMDsgaS0tKQorCXJlcyA9IG5ldyBzY19QYWlyKGFbaV0s
IHJlcyk7CisgICAgcmV0dXJuIHJlczsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8K
K2Z1bmN0aW9uIHNjX2lvdGEobnVtLCBpbml0KSB7CisgICB2YXIgcmVzID0gbnVsbDsKKyAgIGlm
ICghaW5pdCkgaW5pdCA9IDA7CisgICBmb3IgKHZhciBpID0gbnVtIC0gMTsgaSA+PSAwOyBpLS0p
CisgICAgICByZXMgPSBuZXcgc2NfUGFpcihpICsgaW5pdCwgcmVzKTsKKyAgIHJldHVybiByZXM7
Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBzY19tYWtlTGlzdChu
YkVscywgZmlsbCkgeworICAgIHZhciByZXMgPSBudWxsOworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbmJFbHM7IGkrKykKKwlyZXMgPSBuZXcgc2NfUGFpcihmaWxsLCByZXMpOworICAgIHJldHVy
biByZXM7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBzY19sZW5n
dGgobCkgeworICAgIHZhciByZXMgPSAwOworICAgIHdoaWxlIChsICE9PSBudWxsKSB7CisJcmVz
Kys7CisJbCA9IGwuY2RyOworICAgIH0KKyAgICByZXR1cm4gcmVzOworfQorCisvKioqIE1FVEEg
KChleHBvcnQgI3QpKSAqLworZnVuY3Rpb24gc2NfcmVtcShvLCBsKSB7CisgICAgdmFyIGR1bW15
ID0geyBjZHIgOiBudWxsIH07CisgICAgdmFyIHRhaWwgPSBkdW1teTsKKyAgICB3aGlsZSAobCAh
PT0gbnVsbCkgeworCWlmIChsLmNhciAhPT0gbykgeworCSAgICB0YWlsLmNkciA9IHNjX2NvbnMo
bC5jYXIsIG51bGwpOworCSAgICB0YWlsID0gdGFpbC5jZHI7CisJfQorCWwgPSBsLmNkcjsKKyAg
ICB9CisgICAgcmV0dXJuIGR1bW15LmNkcjsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkg
Ki8KK2Z1bmN0aW9uIHNjX3JlbXFCYW5nKG8sIGwpIHsKKyAgICB2YXIgZHVtbXkgPSB7IGNkciA6
IG51bGwgfTsKKyAgICB2YXIgdGFpbCA9IGR1bW15OworICAgIHZhciBuZWVkc0Fzc2lnID0gdHJ1
ZTsKKyAgICB3aGlsZSAobCAhPT0gbnVsbCkgeworCWlmIChsLmNhciA9PT0gbykgeworCSAgICBu
ZWVkc0Fzc2lnID0gdHJ1ZTsKKwl9IGVsc2UgeworCSAgICBpZiAobmVlZHNBc3NpZykgeworCQl0
YWlsLmNkciA9IGw7CisJCW5lZWRzQXNzaWcgPSBmYWxzZTsKKwkgICAgfQorCSAgICB0YWlsID0g
bDsKKwl9CisJbCA9IGwuY2RyOworICAgIH0KKyAgICB0YWlsLmNkciA9IG51bGw7CisgICAgcmV0
dXJuIGR1bW15LmNkcjsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9u
IHNjX2RlbGV0ZShvLCBsKSB7CisgICAgdmFyIGR1bW15ID0geyBjZHIgOiBudWxsIH07CisgICAg
dmFyIHRhaWwgPSBkdW1teTsKKyAgICB3aGlsZSAobCAhPT0gbnVsbCkgeworCWlmICghc2NfaXNF
cXVhbChsLmNhciwgbykpIHsKKwkgICAgdGFpbC5jZHIgPSBzY19jb25zKGwuY2FyLCBudWxsKTsK
KwkgICAgdGFpbCA9IHRhaWwuY2RyOworCX0KKwlsID0gbC5jZHI7CisgICAgfQorICAgIHJldHVy
biBkdW1teS5jZHI7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBz
Y19kZWxldGVCYW5nKG8sIGwpIHsKKyAgICB2YXIgZHVtbXkgPSB7IGNkciA6IG51bGwgfTsKKyAg
ICB2YXIgdGFpbCA9IGR1bW15OworICAgIHZhciBuZWVkc0Fzc2lnID0gdHJ1ZTsKKyAgICB3aGls
ZSAobCAhPT0gbnVsbCkgeworCWlmIChzY19pc0VxdWFsKGwuY2FyLCBvKSkgeworCSAgICBuZWVk
c0Fzc2lnID0gdHJ1ZTsKKwl9IGVsc2UgeworCSAgICBpZiAobmVlZHNBc3NpZykgeworCQl0YWls
LmNkciA9IGw7CisJCW5lZWRzQXNzaWcgPSBmYWxzZTsKKwkgICAgfQorCSAgICB0YWlsID0gbDsK
Kwl9CisJbCA9IGwuY2RyOworICAgIH0KKyAgICB0YWlsLmNkciA9IG51bGw7CisgICAgcmV0dXJu
IGR1bW15LmNkcjsKK30KKworZnVuY3Rpb24gc2NfcmV2ZXJzZUFwcGVuZEJhbmcobDEsIGwyKSB7
CisgICAgdmFyIHJlcyA9IGwyOworICAgIHdoaWxlIChsMSAhPT0gbnVsbCkgeworCXZhciB0bXAg
PSByZXM7CisJcmVzID0gbDE7CisJbDEgPSBsMS5jZHI7CisJcmVzLmNkciA9IHRtcDsKKyAgICB9
CisgICAgcmV0dXJuIHJlczsKK30KKwkKK2Z1bmN0aW9uIHNjX2R1YWxBcHBlbmQobDEsIGwyKSB7
CisgICAgaWYgKGwxID09PSBudWxsKSByZXR1cm4gbDI7CisgICAgaWYgKGwyID09PSBudWxsKSBy
ZXR1cm4gbDE7CisgICAgdmFyIHJldiA9IHNjX3JldmVyc2UobDEpOworICAgIHJldHVybiBzY19y
ZXZlcnNlQXBwZW5kQmFuZyhyZXYsIGwyKTsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkg
Ki8KK2Z1bmN0aW9uIHNjX2FwcGVuZCgpIHsKKyAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0g
MCkKKwlyZXR1cm4gbnVsbDsKKyAgICB2YXIgcmVzID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5n
dGggLSAxXTsKKyAgICBmb3IgKHZhciBpID0gYXJndW1lbnRzLmxlbmd0aCAtIDI7IGkgPj0gMDsg
aS0tKQorCXJlcyA9IHNjX2R1YWxBcHBlbmQoYXJndW1lbnRzW2ldLCByZXMpOworICAgIHJldHVy
biByZXM7Cit9CisKK2Z1bmN0aW9uIHNjX2R1YWxBcHBlbmRCYW5nKGwxLCBsMikgeworICAgIGlm
IChsMSA9PT0gbnVsbCkgcmV0dXJuIGwyOworICAgIGlmIChsMiA9PT0gbnVsbCkgcmV0dXJuIGwx
OworICAgIHZhciB0bXAgPSBsMTsKKyAgICB3aGlsZSAodG1wLmNkciAhPT0gbnVsbCkgdG1wPXRt
cC5jZHI7CisgICAgdG1wLmNkciA9IGwyOworICAgIHJldHVybiBsMTsKK30KKyAgICAKKy8qKiog
TUVUQSAoKGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBzY19hcHBlbmRCYW5nKCkgeworICAgIHZh
ciByZXMgPSBudWxsOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsg
aSsrKQorCXJlcyA9IHNjX2R1YWxBcHBlbmRCYW5nKHJlcywgYXJndW1lbnRzW2ldKTsKKyAgICBy
ZXR1cm4gcmVzOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLworZnVuY3Rpb24gc2Nf
cmV2ZXJzZShsMSkgeworICAgIHZhciByZXMgPSBudWxsOworICAgIHdoaWxlIChsMSAhPT0gbnVs
bCkgeworCXJlcyA9IHNjX2NvbnMobDEuY2FyLCByZXMpOworCWwxID0gbDEuY2RyOworICAgIH0K
KyAgICByZXR1cm4gcmVzOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLworZnVuY3Rp
b24gc2NfcmV2ZXJzZUJhbmcobCkgeworICAgIHJldHVybiBzY19yZXZlcnNlQXBwZW5kQmFuZyhs
LCBudWxsKTsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9uIHNjX2xp
c3RUYWlsKGwsIGspIHsKKyAgICB2YXIgcmVzID0gbDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGs7IGkrKykgeworCXJlcyA9IHJlcy5jZHI7CisgICAgfQorICAgIHJldHVybiByZXM7Cit9CisK
Ky8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBzY19saXN0UmVmKGwsIGspIHsK
KyAgICByZXR1cm4gc2NfbGlzdFRhaWwobCwgaykuY2FyOworfQorCisvKiAvLyB1bm9wdGltaXpl
ZCBnZW5lcmljIHZlcnNpb25zCitmdW5jdGlvbiBzY19tZW1YKG8sIGwsIGNvbXApIHsKKyAgICB3
aGlsZSAobCAhPSBudWxsKSB7CisJaWYgKGNvbXAobC5jYXIsIG8pKQorCSAgICByZXR1cm4gbDsK
KwlsID0gbC5jZHI7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KK2Z1bmN0aW9uIHNjX21l
bXEobywgbCkgeyByZXR1cm4gc2NfbWVtWChvLCBsLCBzY19pc0VxKTsgfQorZnVuY3Rpb24gc2Nf
bWVtdihvLCBsKSB7IHJldHVybiBzY19tZW1YKG8sIGwsIHNjX2lzRXF2KTsgfQorZnVuY3Rpb24g
c2NfbWVtYmVyKG8sIGwpIHsgcmV0dXJuIHNjX21lbVgobywgbCwgc2NfaXNFcXVhbCk7IH0KKyov
CisKKy8qIG9wdGltaXplZCB2ZXJzaW9ucyAqLworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8K
K2Z1bmN0aW9uIHNjX21lbXEobywgbCkgeworICAgIHdoaWxlIChsICE9PSBudWxsKSB7CisJaWYg
KGwuY2FyID09PSBvKQorCSAgICByZXR1cm4gbDsKKwlsID0gbC5jZHI7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBzY19t
ZW12KG8sIGwpIHsKKyAgICB3aGlsZSAobCAhPT0gbnVsbCkgeworCWlmIChsLmNhciA9PT0gbykK
KwkgICAgcmV0dXJuIGw7CisJbCA9IGwuY2RyOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLworZnVuY3Rpb24gc2NfbWVtYmVyKG8sIGwpIHsK
KyAgICB3aGlsZSAobCAhPT0gbnVsbCkgeworCWlmIChzY19pc0VxdWFsKGwuY2FyLG8pKQorCSAg
ICByZXR1cm4gbDsKKwlsID0gbC5jZHI7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwor
LyogLy8gZ2VuZXJpYyB1bm9wdGltaXplZCB2ZXJzaW9ucworZnVuY3Rpb24gc2NfYXNzWChvLCBh
bCwgY29tcCkgeworICAgIHdoaWxlIChhbCAhPSBudWxsKSB7CisJaWYgKGNvbXAoYWwuY2FyLmNh
ciwgbykpCisJICAgIHJldHVybiBhbC5jYXI7CisJYWwgPSBhbC5jZHI7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KK2Z1bmN0aW9uIHNjX2Fzc3EobywgYWwpIHsgcmV0dXJuIHNjX2Fzc1go
bywgYWwsIHNjX2lzRXEpOyB9CitmdW5jdGlvbiBzY19hc3N2KG8sIGFsKSB7IHJldHVybiBzY19h
c3NYKG8sIGFsLCBzY19pc0Vxdik7IH0KK2Z1bmN0aW9uIHNjX2Fzc29jKG8sIGFsKSB7IHJldHVy
biBzY19hc3NYKG8sIGFsLCBzY19pc0VxdWFsKTsgfQorKi8KKy8vIG9wdGltaXplZCB2ZXJzaW9u
cworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9uIHNjX2Fzc3EobywgYWwpIHsK
KyAgICB3aGlsZSAoYWwgIT09IG51bGwpIHsKKwlpZiAoYWwuY2FyLmNhciA9PT0gbykKKwkgICAg
cmV0dXJuIGFsLmNhcjsKKwlhbCA9IGFsLmNkcjsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9uIHNjX2Fzc3YobywgYWwpIHsK
KyAgICB3aGlsZSAoYWwgIT09IG51bGwpIHsKKwlpZiAoYWwuY2FyLmNhciA9PT0gbykKKwkgICAg
cmV0dXJuIGFsLmNhcjsKKwlhbCA9IGFsLmNkcjsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9uIHNjX2Fzc29jKG8sIGFsKSB7
CisgICAgd2hpbGUgKGFsICE9PSBudWxsKSB7CisJaWYgKHNjX2lzRXF1YWwoYWwuY2FyLmNhciwg
bykpCisJICAgIHJldHVybiBhbC5jYXI7CisJYWwgPSBhbC5jZHI7CisgICAgfQorICAgIHJldHVy
biBmYWxzZTsKK30KKworLyogY2FuIGJlIHVzZWQgZm9yIG11dGFibGUgc3RyaW5ncyBhbmQgY2hh
cmFjdGVycyAqLworZnVuY3Rpb24gc2NfaXNDaGFyU3RyaW5nRXF1YWwoY3MxLCBjczIpIHsgcmV0
dXJuIGNzMS52YWwgPT09IGNzMi52YWw7IH0KK2Z1bmN0aW9uIHNjX2lzQ2hhclN0cmluZ0xlc3Mo
Y3MxLCBjczIpIHsgcmV0dXJuIGNzMS52YWwgPCBjczIudmFsOyB9CitmdW5jdGlvbiBzY19pc0No
YXJTdHJpbmdHcmVhdGVyKGNzMSwgY3MyKSB7IHJldHVybiBjczEudmFsID4gY3MyLnZhbDsgfQor
ZnVuY3Rpb24gc2NfaXNDaGFyU3RyaW5nTGVzc0VxdWFsKGNzMSwgY3MyKSB7IHJldHVybiBjczEu
dmFsIDw9IGNzMi52YWw7IH0KK2Z1bmN0aW9uIHNjX2lzQ2hhclN0cmluZ0dyZWF0ZXJFcXVhbChj
czEsIGNzMikgeyByZXR1cm4gY3MxLnZhbCA+PSBjczIudmFsOyB9CitmdW5jdGlvbiBzY19pc0No
YXJTdHJpbmdDSUVxdWFsKGNzMSwgY3MyKQorICAgIHsgcmV0dXJuIGNzMS52YWwudG9Mb3dlckNh
c2UoKSA9PT0gY3MyLnZhbC50b0xvd2VyQ2FzZSgpOyB9CitmdW5jdGlvbiBzY19pc0NoYXJTdHJp
bmdDSUxlc3MoY3MxLCBjczIpCisgICAgeyByZXR1cm4gY3MxLnZhbC50b0xvd2VyQ2FzZSgpIDwg
Y3MyLnZhbC50b0xvd2VyQ2FzZSgpOyB9CitmdW5jdGlvbiBzY19pc0NoYXJTdHJpbmdDSUdyZWF0
ZXIoY3MxLCBjczIpCisgICAgeyByZXR1cm4gY3MxLnZhbC50b0xvd2VyQ2FzZSgpID4gY3MyLnZh
bC50b0xvd2VyQ2FzZSgpOyB9CitmdW5jdGlvbiBzY19pc0NoYXJTdHJpbmdDSUxlc3NFcXVhbChj
czEsIGNzMikKKyAgICB7IHJldHVybiBjczEudmFsLnRvTG93ZXJDYXNlKCkgPD0gY3MyLnZhbC50
b0xvd2VyQ2FzZSgpOyB9CitmdW5jdGlvbiBzY19pc0NoYXJTdHJpbmdDSUdyZWF0ZXJFcXVhbChj
czEsIGNzMikKKyAgICB7IHJldHVybiBjczEudmFsLnRvTG93ZXJDYXNlKCkgPj0gY3MyLnZhbC50
b0xvd2VyQ2FzZSgpOyB9CisKKworCisKK2Z1bmN0aW9uIHNjX0NoYXIoYykgeworICAgIHZhciBj
YWNoZWQgPSBzY19DaGFyLmxhenlbY107CisgICAgaWYgKGNhY2hlZCkKKwlyZXR1cm4gY2FjaGVk
OworICAgIHRoaXMudmFsID0gYzsKKyAgICBzY19DaGFyLmxhenlbY10gPSB0aGlzOworICAgIC8v
IGFkZCByZXR1cm4sIHNvIEZGIGRvZXMgbm90IGNvbXBsYWluLgorICAgIHJldHVybiB1bmRlZmlu
ZWQ7Cit9CitzY19DaGFyLmxhenkgPSBuZXcgT2JqZWN0KCk7CisvLyB0aGFua3MgdG8gRXJpYwor
c2NfQ2hhci5jaGFyMnJlYWRhYmxlID0geworICAgICJcMDAwIjogIiNcXG51bGwiLAorICAgICJc
MDA3IjogIiNcXGJlbGwiLAorICAgICJcMDEwIjogIiNcXGJhY2tzcGFjZSIsCisgICAgIlwwMTEi
OiAiI1xcdGFiIiwKKyAgICAiXDAxMiI6ICIjXFxuZXdsaW5lIiwKKyAgICAiXDAxNCI6ICIjXFxw
YWdlIiwKKyAgICAiXDAxNSI6ICIjXFxyZXR1cm4iLAorICAgICJcMDMzIjogIiNcXGVzY2FwZSIs
CisgICAgIlwwNDAiOiAiI1xcc3BhY2UiLAorICAgICJcMTc3IjogIiNcXGRlbGV0ZSIsCisKKyAg
LyogcG9ldGljbGVzcyBuYW1lcyAqLworICAgICJcMDAxIjogIiNcXHNvaCIsCisgICAgIlwwMDIi
OiAiI1xcc3R4IiwKKyAgICAiXDAwMyI6ICIjXFxldHgiLAorICAgICJcMDA0IjogIiNcXGVvdCIs
CisgICAgIlwwMDUiOiAiI1xcZW5xIiwKKyAgICAiXDAwNiI6ICIjXFxhY2siLAorCisgICAgIlww
MTMiOiAiI1xcdnQiLAorICAgICJcMDE2IjogIiNcXHNvIiwKKyAgICAiXDAxNyI6ICIjXFxzaSIs
CisKKyAgICAiXDAyMCI6ICIjXFxkbGUiLAorICAgICJcMDIxIjogIiNcXGRjMSIsCisgICAgIlww
MjIiOiAiI1xcZGMyIiwKKyAgICAiXDAyMyI6ICIjXFxkYzMiLAorICAgICJcMDI0IjogIiNcXGRj
NCIsCisgICAgIlwwMjUiOiAiI1xcbmFrIiwKKyAgICAiXDAyNiI6ICIjXFxzeW4iLAorICAgICJc
MDI3IjogIiNcXGV0YiIsCisKKyAgICAiXDAzMCI6ICIjXFxjYW4iLAorICAgICJcMDMxIjogIiNc
XGVtIiwKKyAgICAiXDAzMiI6ICIjXFxzdWIiLAorICAgICJcMDMzIjogIiNcXGVzYyIsCisgICAg
IlwwMzQiOiAiI1xcZnMiLAorICAgICJcMDM1IjogIiNcXGdzIiwKKyAgICAiXDAzNiI6ICIjXFxy
cyIsCisgICAgIlwwMzciOiAiI1xcdXMifTsKKworc2NfQ2hhci5yZWFkYWJsZTJjaGFyID0gewor
ICAgICJudWxsIjogIlwwMDAiLAorICAgICJiZWxsIjogIlwwMDciLAorICAgICJiYWNrc3BhY2Ui
OiAiXDAxMCIsCisgICAgInRhYiI6ICJcMDExIiwKKyAgICAibmV3bGluZSI6ICJcMDEyIiwKKyAg
ICAicGFnZSI6ICJcMDE0IiwKKyAgICAicmV0dXJuIjogIlwwMTUiLAorICAgICJlc2NhcGUiOiAi
XDAzMyIsCisgICAgInNwYWNlIjogIlwwNDAiLAorICAgICJkZWxldGUiOiAiXDAwMCIsCisgICAg
InNvaCI6ICJcMDAxIiwKKyAgICAic3R4IjogIlwwMDIiLAorICAgICJldHgiOiAiXDAwMyIsCisg
ICAgImVvdCI6ICJcMDA0IiwKKyAgICAiZW5xIjogIlwwMDUiLAorICAgICJhY2siOiAiXDAwNiIs
CisgICAgImJlbCI6ICJcMDA3IiwKKyAgICAiYnMiOiAiXDAxMCIsCisgICAgImh0IjogIlwwMTEi
LAorICAgICJubCI6ICJcMDEyIiwKKyAgICAidnQiOiAiXDAxMyIsCisgICAgIm5wIjogIlwwMTQi
LAorICAgICJjciI6ICJcMDE1IiwKKyAgICAic28iOiAiXDAxNiIsCisgICAgInNpIjogIlwwMTci
LAorICAgICJkbGUiOiAiXDAyMCIsCisgICAgImRjMSI6ICJcMDIxIiwKKyAgICAiZGMyIjogIlww
MjIiLAorICAgICJkYzMiOiAiXDAyMyIsCisgICAgImRjNCI6ICJcMDI0IiwKKyAgICAibmFrIjog
IlwwMjUiLAorICAgICJzeW4iOiAiXDAyNiIsCisgICAgImV0YiI6ICJcMDI3IiwKKyAgICAiY2Fu
IjogIlwwMzAiLAorICAgICJlbSI6ICJcMDMxIiwKKyAgICAic3ViIjogIlwwMzIiLAorICAgICJl
c2MiOiAiXDAzMyIsCisgICAgImZzIjogIlwwMzQiLAorICAgICJncyI6ICJcMDM1IiwKKyAgICAi
cnMiOiAiXDAzNiIsCisgICAgInVzIjogIlwwMzciLAorICAgICJzcCI6ICJcMDQwIiwKKyAgICAi
ZGVsIjogIlwxNzcifTsKKyAgICAKK3NjX0NoYXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rp
b24oKSB7CisgICAgcmV0dXJuIHRoaXMudmFsOworfTsKKy8vIHNjX3RvRGlzcGxheVN0cmluZyA9
PSB0b1N0cmluZworc2NfQ2hhci5wcm90b3R5cGUuc2NfdG9Xcml0ZVN0cmluZyA9IGZ1bmN0aW9u
KCkgeworICAgIHZhciBlbnRyeSA9IHNjX0NoYXIuY2hhcjJyZWFkYWJsZVt0aGlzLnZhbF07Cisg
ICAgaWYgKGVudHJ5KQorCXJldHVybiBlbnRyeTsKKyAgICBlbHNlCisJcmV0dXJuICIjXFwiICsg
dGhpcy52YWw7Cit9OworCisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAgICh0eXBl
IGJvb2wpCisgICAgICAgICAgIChwZWVwaG9sZSAocG9zdGZpeCAiaW5zdGFuY2VvZiBzY19DaGFy
IikpKQorKi8KK2Z1bmN0aW9uIHNjX2lzQ2hhcihjKSB7CisgICAgcmV0dXJuIChjIGluc3RhbmNl
b2Ygc2NfQ2hhcik7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCBjaGFyPT8pCisgICAgICAgICAg
ICh0eXBlIGJvb2wpCisgICAgICAgICAgIChwZWVwaG9sZSAoaG9sZSAyIGMxICIudmFsID09PSAi
IGMyICIudmFsIikpKQorKi8KK3ZhciBzY19pc0NoYXJFcXVhbCA9IHNjX2lzQ2hhclN0cmluZ0Vx
dWFsOworLyoqKiBNRVRBICgoZXhwb3J0IGNoYXI8PykKKyAgICAgICAgICAgKHR5cGUgYm9vbCkK
KyAgICAgICAgICAgKHBlZXBob2xlIChob2xlIDIgYzEgIi52YWwgPCAiIGMyICIudmFsIikpKQor
Ki8KK3ZhciBzY19pc0NoYXJMZXNzID0gc2NfaXNDaGFyU3RyaW5nTGVzczsKKy8qKiogTUVUQSAo
KGV4cG9ydCBjaGFyPj8pCisgICAgICAgICAgICh0eXBlIGJvb2wpCisgICAgICAgICAgIChwZWVw
aG9sZSAoaG9sZSAyIGMxICIudmFsID4gIiBjMiAiLnZhbCIpKSkKKyovCit2YXIgc2NfaXNDaGFy
R3JlYXRlciA9IHNjX2lzQ2hhclN0cmluZ0dyZWF0ZXI7CisvKioqIE1FVEEgKChleHBvcnQgY2hh
cjw9PykKKyAgICAgICAgICAgKHR5cGUgYm9vbCkKKyAgICAgICAgICAgKHBlZXBob2xlIChob2xl
IDIgYzEgIi52YWwgPD0gIiBjMiAiLnZhbCIpKSkKKyovCit2YXIgc2NfaXNDaGFyTGVzc0VxdWFs
ID0gc2NfaXNDaGFyU3RyaW5nTGVzc0VxdWFsOworLyoqKiBNRVRBICgoZXhwb3J0IGNoYXI+PT8p
CisgICAgICAgICAgICh0eXBlIGJvb2wpCisgICAgICAgICAgIChwZWVwaG9sZSAoaG9sZSAyIGMx
ICIudmFsID49ICIgYzIgIi52YWwiKSkpCisqLwordmFyIHNjX2lzQ2hhckdyZWF0ZXJFcXVhbCA9
IHNjX2lzQ2hhclN0cmluZ0dyZWF0ZXJFcXVhbDsKKy8qKiogTUVUQSAoKGV4cG9ydCBjaGFyLWNp
PT8pCisgICAgICAgICAgICh0eXBlIGJvb2wpCisgICAgICAgICAgIChwZWVwaG9sZSAoaG9sZSAy
IGMxICIudmFsLnRvTG93ZXJDYXNlKCkgPT09ICIgYzIgIi52YWwudG9Mb3dlckNhc2UoKSIpKSkK
KyovCit2YXIgc2NfaXNDaGFyQ0lFcXVhbCA9IHNjX2lzQ2hhclN0cmluZ0NJRXF1YWw7CisvKioq
IE1FVEEgKChleHBvcnQgY2hhci1jaTw/KQorICAgICAgICAgICAodHlwZSBib29sKQorICAgICAg
ICAgICAocGVlcGhvbGUgKGhvbGUgMiBjMSAiLnZhbC50b0xvd2VyQ2FzZSgpIDwgIiBjMiAiLnZh
bC50b0xvd2VyQ2FzZSgpIikpKQorKi8KK3ZhciBzY19pc0NoYXJDSUxlc3MgPSBzY19pc0NoYXJT
dHJpbmdDSUxlc3M7CisvKioqIE1FVEEgKChleHBvcnQgY2hhci1jaT4/KQorICAgICAgICAgICAo
dHlwZSBib29sKQorICAgICAgICAgICAocGVlcGhvbGUgKGhvbGUgMiBjMSAiLnZhbC50b0xvd2Vy
Q2FzZSgpID4gIiBjMiAiLnZhbC50b0xvd2VyQ2FzZSgpIikpKQorKi8KK3ZhciBzY19pc0NoYXJD
SUdyZWF0ZXIgPSBzY19pc0NoYXJTdHJpbmdDSUdyZWF0ZXI7CisvKioqIE1FVEEgKChleHBvcnQg
Y2hhci1jaTw9PykKKyAgICAgICAgICAgKHR5cGUgYm9vbCkKKyAgICAgICAgICAgKHBlZXBob2xl
IChob2xlIDIgYzEgIi52YWwudG9Mb3dlckNhc2UoKSA8PSAiIGMyICIudmFsLnRvTG93ZXJDYXNl
KCkiKSkpCisqLwordmFyIHNjX2lzQ2hhckNJTGVzc0VxdWFsID0gc2NfaXNDaGFyU3RyaW5nQ0lM
ZXNzRXF1YWw7CisvKioqIE1FVEEgKChleHBvcnQgY2hhci1jaT49PykKKyAgICAgICAgICAgKHR5
cGUgYm9vbCkKKyAgICAgICAgICAgKHBlZXBob2xlIChob2xlIDIgYzEgIi52YWwudG9Mb3dlckNh
c2UoKSA+PSAiIGMyICIudmFsLnRvTG93ZXJDYXNlKCkiKSkpCisqLwordmFyIHNjX2lzQ2hhckNJ
R3JlYXRlckVxdWFsID0gc2NfaXNDaGFyU3RyaW5nQ0lHcmVhdGVyRXF1YWw7CisKK3ZhciBTQ19O
VU1CRVJfQ0xBU1MgPSAiMDEyMzQ1Njc4OSI7Cit2YXIgU0NfV0hJVEVTUEFDRV9DTEFTUyA9ICcg
XHJcblx0XGYnOwordmFyIFNDX0xPV0VSX0NMQVNTID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3
eHl6JzsKK3ZhciBTQ19VUFBFUl9DTEFTUyA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWic7
CisKK2Z1bmN0aW9uIHNjX2lzQ2hhck9mQ2xhc3MoYywgY2wpIHsgcmV0dXJuIChjbC5pbmRleE9m
KGMpICE9IC0xKTsgfQorLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAodHlwZSBi
b29sKSkKKyovCitmdW5jdGlvbiBzY19pc0NoYXJBbHBoYWJldGljKGMpCisgICAgeyByZXR1cm4g
c2NfaXNDaGFyT2ZDbGFzcyhjLnZhbCwgU0NfTE9XRVJfQ0xBU1MpIHx8CisJICBzY19pc0NoYXJP
ZkNsYXNzKGMudmFsLCBTQ19VUFBFUl9DTEFTUyk7IH0KKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkK
KyAgICAgICAgICAgKHR5cGUgYm9vbCkKKyAgICAgICAgICAgKHBlZXBob2xlIChob2xlIDEgIlND
X05VTUJFUl9DTEFTUy5pbmRleE9mKCIgYyAiLnZhbCkgIT0gLTEiKSkpCisqLworZnVuY3Rpb24g
c2NfaXNDaGFyTnVtZXJpYyhjKQorICAgIHsgcmV0dXJuIHNjX2lzQ2hhck9mQ2xhc3MoYy52YWws
IFNDX05VTUJFUl9DTEFTUyk7IH0KKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAg
KHR5cGUgYm9vbCkpCisqLworZnVuY3Rpb24gc2NfaXNDaGFyV2hpdGVzcGFjZShjKSB7CisgICAg
dmFyIHRtcCA9IGMudmFsOworICAgIHJldHVybiB0bXAgPT09ICIgIiB8fCB0bXAgPT09ICJcciIg
fHwgdG1wID09PSAiXG4iIHx8IHRtcCA9PT0gIlx0IiB8fCB0bXAgPT09ICJcZiI7Cit9CisvKioq
IE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAgICh0eXBlIGJvb2wpCisgICAgICAgICAgIChw
ZWVwaG9sZSAoaG9sZSAxICJTQ19VUFBFUl9DTEFTUy5pbmRleE9mKCIgYyAiLnZhbCkgIT0gLTEi
KSkpCisqLworZnVuY3Rpb24gc2NfaXNDaGFyVXBwZXJDYXNlKGMpCisgICAgeyByZXR1cm4gc2Nf
aXNDaGFyT2ZDbGFzcyhjLnZhbCwgU0NfVVBQRVJfQ0xBU1MpOyB9CisvKioqIE1FVEEgKChleHBv
cnQgI3QpCisgICAgICAgICAgICh0eXBlIGJvb2wpCisgICAgICAgICAgIChwZWVwaG9sZSAoaG9s
ZSAxICJTQ19MT1dFUl9DTEFTUy5pbmRleE9mKCIgYyAiLnZhbCkgIT0gLTEiKSkpCisqLworZnVu
Y3Rpb24gc2NfaXNDaGFyTG93ZXJDYXNlKGMpCisgICAgeyByZXR1cm4gc2NfaXNDaGFyT2ZDbGFz
cyhjLnZhbCwgU0NfTE9XRVJfQ0xBU1MpOyB9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAg
ICAgICAgICAgKHBlZXBob2xlIChwb3N0Zml4ICIudmFsLmNoYXJDb2RlQXQoMCkiKSkpCisqLwor
ZnVuY3Rpb24gc2NfY2hhcjJpbnRlZ2VyKGMpCisgICAgeyByZXR1cm4gYy52YWwuY2hhckNvZGVB
dCgwKTsgfQorLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAocGVlcGhvbGUgKGhv
bGUgMSAibmV3IHNjX0NoYXIoU3RyaW5nLmZyb21DaGFyQ29kZSgiIG4gIikpIikpKQorKi8KK2Z1
bmN0aW9uIHNjX2ludGVnZXIyY2hhcihuKQorICAgIHsgcmV0dXJuIG5ldyBzY19DaGFyKFN0cmlu
Zy5mcm9tQ2hhckNvZGUobikpOyB9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAg
ICAgKHBlZXBob2xlIChob2xlIDEgIm5ldyBzY19DaGFyKCIgYyAiLnZhbC50b1VwcGVyQ2FzZSgp
KSIpKSkKKyovCitmdW5jdGlvbiBzY19jaGFyVXBjYXNlKGMpCisgICAgeyByZXR1cm4gbmV3IHNj
X0NoYXIoYy52YWwudG9VcHBlckNhc2UoKSk7IH0KKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAg
ICAgICAgICAgKHBlZXBob2xlIChob2xlIDEgIm5ldyBzY19DaGFyKCIgYyAiLnZhbC50b0xvd2Vy
Q2FzZSgpKSIpKSkKKyovCitmdW5jdGlvbiBzY19jaGFyRG93bmNhc2UoYykKKyAgICB7IHJldHVy
biBuZXcgc2NfQ2hhcihjLnZhbC50b0xvd2VyQ2FzZSgpKTsgfQorCitmdW5jdGlvbiBzY19tYWtl
SlNTdHJpbmdPZkxlbmd0aChrLCBjKSB7CisgICAgdmFyIGZpbGw7CisgICAgaWYgKGMgPT09IHVu
ZGVmaW5lZCkKKwlmaWxsID0gIiAiOworICAgIGVsc2UKKwlmaWxsID0gYzsKKyAgICB2YXIgcmVz
ID0gIiI7CisgICAgdmFyIGxlbiA9IDE7CisgICAgLy8gZXZlcnkgcm91bmQgZG91YmxlcyB0aGUg
c2l6ZSBvZiBmaWxsLgorICAgIHdoaWxlIChrID49IGxlbikgeworCWlmIChrICYgbGVuKQorCSAg
ICByZXMgPSByZXMuY29uY2F0KGZpbGwpOworCWZpbGwgPSBmaWxsLmNvbmNhdChmaWxsKTsKKwls
ZW4gKj0gMjsKKyAgICB9CisgICAgcmV0dXJuIHJlczsKK30KKworZnVuY3Rpb24gc2NfbWFrZWpz
U3RyaW5nKGssIGMpIHsKKyAgICB2YXIgZmlsbDsKKyAgICBpZiAoYykKKwlmaWxsID0gYy52YWw7
CisgICAgZWxzZQorCWZpbGwgPSAiICI7CisgICAgcmV0dXJuIHNjX21ha2VKU1N0cmluZ09mTGVu
Z3RoKGssIGZpbGwpOworfQorCitmdW5jdGlvbiBzY19qc3N0cmluZzJsaXN0KHMpIHsKKyAgICB2
YXIgcmVzID0gbnVsbDsKKyAgICBmb3IgKHZhciBpID0gcy5sZW5ndGggLSAxOyBpID49IDA7IGkt
LSkKKwlyZXMgPSBzY19jb25zKG5ldyBzY19DaGFyKHMuY2hhckF0KGkpKSwgcmVzKTsKKyAgICBy
ZXR1cm4gcmVzOworfQorCitmdW5jdGlvbiBzY19saXN0Mmpzc3RyaW5nKGwpIHsKKyAgICB2YXIg
YSA9IG5ldyBBcnJheSgpOworICAgIHdoaWxlKGwgIT09IG51bGwpIHsKKwlhLnB1c2gobC5jYXIu
dmFsKTsKKwlsID0gbC5jZHI7CisgICAgfQorICAgIHJldHVybiAiIi5jb25jYXQuYXBwbHkoIiIs
IGEpOworfQorCit2YXIgc2NfVmVjdG9yID0gQXJyYXk7CisKK3NjX1ZlY3Rvci5wcm90b3R5cGUu
c2NfdG9Xcml0ZU9yRGlzcGxheVN0cmluZyA9IGZ1bmN0aW9uKHdyaXRlT3JEaXNwbGF5KSB7Cisg
ICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gIiMoKSI7CisKKyAgICB2YXIgcmVzID0g
IiMoIiArIHdyaXRlT3JEaXNwbGF5KHRoaXNbMF0pOworICAgIGZvciAodmFyIGkgPSAxOyBpIDwg
dGhpcy5sZW5ndGg7IGkrKykKKwlyZXMgKz0gIiAiICsgd3JpdGVPckRpc3BsYXkodGhpc1tpXSk7
CisgICAgcmVzICs9ICIpIjsKKyAgICByZXR1cm4gcmVzOworfTsKK3NjX1ZlY3Rvci5wcm90b3R5
cGUuc2NfdG9EaXNwbGF5U3RyaW5nID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuc2Nf
dG9Xcml0ZU9yRGlzcGxheVN0cmluZyhzY190b0Rpc3BsYXlTdHJpbmcpOworfTsKK3NjX1ZlY3Rv
ci5wcm90b3R5cGUuc2NfdG9Xcml0ZVN0cmluZyA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0
aGlzLnNjX3RvV3JpdGVPckRpc3BsYXlTdHJpbmcoc2NfdG9Xcml0ZVN0cmluZyk7Cit9OworCisv
KioqIE1FVEEgKChleHBvcnQgdmVjdG9yPyBhcnJheT8pCisgICAgICAgICAgICh0eXBlIGJvb2wp
CisgICAgICAgICAgIChwZWVwaG9sZSAocG9zdGZpeCAiIGluc3RhbmNlb2Ygc2NfVmVjdG9yIikp
KQorKi8KK2Z1bmN0aW9uIHNjX2lzVmVjdG9yKHYpIHsKKyAgICByZXR1cm4gKHYgaW5zdGFuY2Vv
ZiBzY19WZWN0b3IpOworfQorCisvLyBvbmx5IGFwcGxpZXMgdG8gdmVjdG9ycworZnVuY3Rpb24g
c2NfaXNWZWN0b3JFcXVhbCh2MSwgdjIsIGNvbXApIHsKKyAgICBpZiAodjEubGVuZ3RoICE9PSB2
Mi5sZW5ndGgpIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHYxLmxlbmd0
aDsgaSsrKQorCWlmICghY29tcCh2MVtpXSwgdjJbaV0pKSByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCBtYWtlLXZlY3RvciBtYWtlLWFycmF5
KSkgKi8KK2Z1bmN0aW9uIHNjX21ha2VWZWN0b3Ioc2l6ZSwgZmlsbCkgeworICAgIHZhciBhID0g
bmV3IHNjX1ZlY3RvcihzaXplKTsKKyAgICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKQorCXNjX3Zl
Y3RvckZpbGxCYW5nKGEsIGZpbGwpOworICAgIHJldHVybiBhOworfQorCisvKioqIE1FVEEgKChl
eHBvcnQgdmVjdG9yIGFycmF5KQorICAgICAgICAgICAocGVlcGhvbGUgKHZlY3RvcikpKQorKi8K
K2Z1bmN0aW9uIHNjX3ZlY3RvcigpIHsKKyAgICB2YXIgYSA9IG5ldyBzY19WZWN0b3IoKTsKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykKKwlhLnB1c2goYXJn
dW1lbnRzW2ldKTsKKyAgICByZXR1cm4gYTsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0IHZlY3Rv
ci1sZW5ndGggYXJyYXktbGVuZ3RoKQorICAgICAgICAgICAocGVlcGhvbGUgKHBvc3RmaXggIi5s
ZW5ndGgiKSkpCisqLworZnVuY3Rpb24gc2NfdmVjdG9yTGVuZ3RoKHYpIHsKKyAgICByZXR1cm4g
di5sZW5ndGg7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCB2ZWN0b3ItcmVmIGFycmF5LXJlZikK
KyAgICAgICAgICAgKHBlZXBob2xlIChob2xlIDIgdiAiWyIgcG9zICJdIikpKQorKi8KK2Z1bmN0
aW9uIHNjX3ZlY3RvclJlZih2LCBwb3MpIHsKKyAgICByZXR1cm4gdltwb3NdOworfQorCisvKioq
IE1FVEEgKChleHBvcnQgdmVjdG9yLXNldCEgYXJyYXktc2V0ISkKKyAgICAgICAgICAgKHBlZXBo
b2xlIChob2xlIDMgdiAiWyIgcG9zICJdID0gIiB2YWwpKSkKKyovCitmdW5jdGlvbiBzY192ZWN0
b3JTZXRCYW5nKHYsIHBvcywgdmFsKSB7CisgICAgdltwb3NdID0gdmFsOworfQorCisvKioqIE1F
VEEgKChleHBvcnQgdmVjdG9yLT5saXN0IGFycmF5LT5saXN0KSkgKi8KK2Z1bmN0aW9uIHNjX3Zl
Y3RvcjJsaXN0KGEpIHsKKyAgICB2YXIgcmVzID0gbnVsbDsKKyAgICBmb3IgKHZhciBpID0gYS5s
ZW5ndGgtMTsgaSA+PSAwOyBpLS0pCisJcmVzID0gc2NfY29ucyhhW2ldLCByZXMpOworICAgIHJl
dHVybiByZXM7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCBsaXN0LT52ZWN0b3IgbGlzdC0+YXJy
YXkpKSAqLworZnVuY3Rpb24gc2NfbGlzdDJ2ZWN0b3IobCkgeworICAgIHZhciBhID0gbmV3IHNj
X1ZlY3RvcigpOworICAgIHdoaWxlKGwgIT09IG51bGwpIHsKKwlhLnB1c2gobC5jYXIpOworCWwg
PSBsLmNkcjsKKyAgICB9CisgICAgcmV0dXJuIGE7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCB2
ZWN0b3ItZmlsbCEgYXJyYXktZmlsbCEpKSAqLworZnVuY3Rpb24gc2NfdmVjdG9yRmlsbEJhbmco
YSwgZmlsbCkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykKKwlhW2ld
ID0gZmlsbDsKK30KKworCisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLworZnVuY3Rpb24gc2Nf
Y29weVZlY3RvcihhLCBsZW4pIHsKKyAgICBpZiAobGVuIDw9IGEubGVuZ3RoKQorCXJldHVybiBh
LnNsaWNlKDAsIGxlbik7CisgICAgZWxzZSB7CisJdmFyIHRtcCA9IGEuY29uY2F0KCk7CisJdG1w
Lmxlbmd0aCA9IGxlbjsKKwlyZXR1cm4gdG1wOworICAgIH0KK30KKworLyoqKiBNRVRBICgoZXhw
b3J0ICN0KQorICAgICAgICAgICAocGVlcGhvbGUgKGhvbGUgMyBhICIuc2xpY2UoIiBzdGFydCAi
LCIgZW5kICIpIikpKQorKi8KK2Z1bmN0aW9uIHNjX3ZlY3RvckNvcHkoYSwgc3RhcnQsIGVuZCkg
eworICAgIHJldHVybiBhLnNsaWNlKHN0YXJ0LCBlbmQpOworfQorCisvKioqIE1FVEEgKChleHBv
cnQgI3QpKSAqLworZnVuY3Rpb24gc2NfdmVjdG9yQ29weUJhbmcodGFyZ2V0LCB0c3RhcnQsIHNv
dXJjZSwgc3N0YXJ0LCBzZW5kKSB7CisgICAgaWYgKCFzc3RhcnQpIHNzdGFydCA9IDA7CisgICAg
aWYgKCFzZW5kKSBzZW5kID0gc291cmNlLmxlbmd0aDsKKworICAgIC8vIGlmIHRhcmdldCA9PSBz
b3VyY2Ugd2UgZG9uJ3Qgd2FudCB0byBvdmVyd3JpdGUgbm90IHlldCBjb3BpZWQgZWxlbWVudHMu
CisgICAgaWYgKHRzdGFydCA8PSBzc3RhcnQpIHsKKwlmb3IgKHZhciBpID0gdHN0YXJ0LCBqID0g
c3N0YXJ0OyBqIDwgc2VuZDsgaSsrLCBqKyspIHsKKwkgICAgdGFyZ2V0W2ldID0gc291cmNlW2pd
OworCX0KKyAgICB9IGVsc2UgeworCXZhciBkaWZmID0gc2VuZCAtIHNzdGFydDsKKwlmb3IgKHZh
ciBpID0gdHN0YXJ0ICsgZGlmZiAtIDEsIGogPSBzZW5kIC0gMTsKKwkgICAgIGogPj0gc3N0YXJ0
OworCSAgICAgaS0tLCBqLS0pIHsKKwkgICAgdGFyZ2V0W2ldID0gc291cmNlW2pdOworCX0KKyAg
ICB9CisgICAgcmV0dXJuIHRhcmdldDsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAg
ICAgICAgICAodHlwZSBib29sKQorICAgICAgICAgICAocGVlcGhvbGUgKGhvbGUgMSAidHlwZW9m
ICIgbyAiID09PSAnZnVuY3Rpb24nIikpKQorKi8KK2Z1bmN0aW9uIHNjX2lzUHJvY2VkdXJlKG8p
IHsKKyAgICByZXR1cm4gKHR5cGVvZiBvID09PSAiZnVuY3Rpb24iKTsKK30KKworLyoqKiBNRVRB
ICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9uIHNjX2FwcGx5KHByb2MpIHsKKyAgICB2YXIgYXJn
cyA9IG5ldyBBcnJheSgpOworICAgIC8vIGZpcnN0IHBhcnQgb2YgYXJndW1lbnRzIGFyZSBub3Qg
aW4gbGlzdC1mb3JtLgorICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAt
IDE7IGkrKykKKwlhcmdzLnB1c2goYXJndW1lbnRzW2ldKTsKKyAgICB2YXIgbCA9IGFyZ3VtZW50
c1thcmd1bWVudHMubGVuZ3RoIC0gMV07CisgICAgd2hpbGUgKGwgIT09IG51bGwpIHsKKwlhcmdz
LnB1c2gobC5jYXIpOworCWwgPSBsLmNkcjsKKyAgICB9CisgICAgcmV0dXJuIHByb2MuYXBwbHko
bnVsbCwgYXJncyk7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBz
Y19tYXAocHJvYywgbDEpIHsKKyAgICBpZiAobDEgPT09IHVuZGVmaW5lZCkKKwlyZXR1cm4gbnVs
bDsKKyAgICAvLyBlbHNlCisgICAgdmFyIG5iQXBwbHlBcmdzID0gYXJndW1lbnRzLmxlbmd0aCAt
IDE7CisgICAgdmFyIGFwcGx5QXJncyA9IG5ldyBBcnJheShuYkFwcGx5QXJncyk7CisgICAgdmFy
IHJldnJlcyA9IG51bGw7CisgICAgd2hpbGUgKGwxICE9PSBudWxsKSB7CisJZm9yICh2YXIgaSA9
IDA7IGkgPCBuYkFwcGx5QXJnczsgaSsrKSB7CisJICAgIGFwcGx5QXJnc1tpXSA9IGFyZ3VtZW50
c1tpICsgMV0uY2FyOworCSAgICBhcmd1bWVudHNbaSArIDFdID0gYXJndW1lbnRzW2kgKyAxXS5j
ZHI7CisJfQorCXJldnJlcyA9IHNjX2NvbnMocHJvYy5hcHBseShudWxsLCBhcHBseUFyZ3MpLCBy
ZXZyZXMpOworICAgIH0KKyAgICByZXR1cm4gc2NfcmV2ZXJzZUFwcGVuZEJhbmcocmV2cmVzLCBu
dWxsKTsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9uIHNjX21hcEJh
bmcocHJvYywgbDEpIHsKKyAgICBpZiAobDEgPT09IHVuZGVmaW5lZCkKKwlyZXR1cm4gbnVsbDsK
KyAgICAvLyBlbHNlCisgICAgdmFyIGwxX29yaWcgPSBsMTsKKyAgICB2YXIgbmJBcHBseUFyZ3Mg
PSBhcmd1bWVudHMubGVuZ3RoIC0gMTsKKyAgICB2YXIgYXBwbHlBcmdzID0gbmV3IEFycmF5KG5i
QXBwbHlBcmdzKTsKKyAgICB3aGlsZSAobDEgIT09IG51bGwpIHsKKwl2YXIgdG1wID0gbDE7CisJ
Zm9yICh2YXIgaSA9IDA7IGkgPCBuYkFwcGx5QXJnczsgaSsrKSB7CisJICAgIGFwcGx5QXJnc1tp
XSA9IGFyZ3VtZW50c1tpICsgMV0uY2FyOworCSAgICBhcmd1bWVudHNbaSArIDFdID0gYXJndW1l
bnRzW2kgKyAxXS5jZHI7CisJfQorCXRtcC5jYXIgPSBwcm9jLmFwcGx5KG51bGwsIGFwcGx5QXJn
cyk7CisgICAgfQorICAgIHJldHVybiBsMV9vcmlnOworfQorICAgICAKKy8qKiogTUVUQSAoKGV4
cG9ydCAjdCkpICovCitmdW5jdGlvbiBzY19mb3JFYWNoKHByb2MsIGwxKSB7CisgICAgaWYgKGwx
ID09PSB1bmRlZmluZWQpCisJcmV0dXJuIHVuZGVmaW5lZDsKKyAgICAvLyBlbHNlCisgICAgdmFy
IG5iQXBwbHlBcmdzID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7CisgICAgdmFyIGFwcGx5QXJncyA9
IG5ldyBBcnJheShuYkFwcGx5QXJncyk7CisgICAgd2hpbGUgKGwxICE9PSBudWxsKSB7CisJZm9y
ICh2YXIgaSA9IDA7IGkgPCBuYkFwcGx5QXJnczsgaSsrKSB7CisJICAgIGFwcGx5QXJnc1tpXSA9
IGFyZ3VtZW50c1tpICsgMV0uY2FyOworCSAgICBhcmd1bWVudHNbaSArIDFdID0gYXJndW1lbnRz
W2kgKyAxXS5jZHI7CisJfQorCXByb2MuYXBwbHkobnVsbCwgYXBwbHlBcmdzKTsKKyAgICB9Cisg
ICAgLy8gYWRkIHJldHVybiBzbyBGRiBkb2VzIG5vdCBjb21wbGFpbi4KKyAgICByZXR1cm4gdW5k
ZWZpbmVkOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLworZnVuY3Rpb24gc2NfZmls
dGVyKHByb2MsIGwxKSB7CisgICAgdmFyIGR1bW15ID0geyBjZHIgOiBudWxsIH07CisgICAgdmFy
IHRhaWwgPSBkdW1teTsKKyAgICB3aGlsZSAobDEgIT09IG51bGwpIHsKKwlpZiAocHJvYyhsMS5j
YXIpICE9PSBmYWxzZSkgeworCSAgICB0YWlsLmNkciA9IHNjX2NvbnMobDEuY2FyLCBudWxsKTsK
KwkgICAgdGFpbCA9IHRhaWwuY2RyOworCX0KKwlsMSA9IGwxLmNkcjsKKyAgICB9CisgICAgcmV0
dXJuIGR1bW15LmNkcjsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9u
IHNjX2ZpbHRlckJhbmcocHJvYywgbDEpIHsKKyAgICB2YXIgaGVhZCA9IHNjX2NvbnMoImR1bW15
IiwgbDEpOworICAgIHZhciBpdCA9IGhlYWQ7CisgICAgdmFyIG5leHQgPSBsMTsKKyAgICB3aGls
ZSAobmV4dCAhPT0gbnVsbCkgeworICAgICAgICBpZiAocHJvYyhuZXh0LmNhcikgIT09IGZhbHNl
KSB7CisJICAgIGl0LmNkciA9IG5leHQKKwkgICAgaXQgPSBuZXh0OworCX0KKwluZXh0ID0gbmV4
dC5jZHI7CisgICAgfQorICAgIGl0LmNkciA9IG51bGw7CisgICAgcmV0dXJuIGhlYWQuY2RyOwor
fQorCitmdW5jdGlvbiBzY19maWx0ZXJNYXAxKHByb2MsIGwxKSB7CisgICAgdmFyIHJldnJlcyA9
IG51bGw7CisgICAgd2hpbGUgKGwxICE9PSBudWxsKSB7CisgICAgICAgIHZhciB0bXAgPSBwcm9j
KGwxLmNhcikKKyAgICAgICAgaWYgKHRtcCAhPT0gZmFsc2UpIHJldnJlcyA9IHNjX2NvbnModG1w
LCByZXZyZXMpOworICAgICAgICBsMSA9IGwxLmNkcjsKKyAgICB9CisgICAgcmV0dXJuIHNjX3Jl
dmVyc2VBcHBlbmRCYW5nKHJldnJlcywgbnVsbCk7Cit9CitmdW5jdGlvbiBzY19maWx0ZXJNYXAy
KHByb2MsIGwxLCBsMikgeworICAgIHZhciByZXZyZXMgPSBudWxsOworICAgIHdoaWxlIChsMSAh
PT0gbnVsbCkgeworICAgICAgICB2YXIgdG1wID0gcHJvYyhsMS5jYXIsIGwyLmNhcik7CisgICAg
ICAgIGlmKHRtcCAhPT0gZmFsc2UpIHJldnJlcyA9IHNjX2NvbnModG1wLCByZXZyZXMpOworCWwx
ID0gbDEuY2RyOworCWwyID0gbDIuY2RyCisgICAgfQorICAgIHJldHVybiBzY19yZXZlcnNlQXBw
ZW5kQmFuZyhyZXZyZXMsIG51bGwpOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLwor
ZnVuY3Rpb24gc2NfZmlsdGVyTWFwKHByb2MsIGwxLCBsMiwgbDMpIHsKKyAgICBpZiAobDIgPT09
IHVuZGVmaW5lZCkKKwlyZXR1cm4gc2NfZmlsdGVyTWFwMShwcm9jLCBsMSk7CisgICAgZWxzZSBp
ZiAobDMgPT09IHVuZGVmaW5lZCkKKwlyZXR1cm4gc2NfZmlsdGVyTWFwMihwcm9jLCBsMSwgbDIp
OworICAgIC8vIGVsc2UKKyAgICB2YXIgbmJBcHBseUFyZ3MgPSBhcmd1bWVudHMubGVuZ3RoIC0g
MTsKKyAgICB2YXIgYXBwbHlBcmdzID0gbmV3IEFycmF5KG5iQXBwbHlBcmdzKTsKKyAgICB2YXIg
cmV2cmVzID0gbnVsbDsKKyAgICB3aGlsZSAobDEgIT09IG51bGwpIHsKKwlmb3IgKHZhciBpID0g
MDsgaSA8IG5iQXBwbHlBcmdzOyBpKyspIHsKKwkgICAgYXBwbHlBcmdzW2ldID0gYXJndW1lbnRz
W2kgKyAxXS5jYXI7CisJICAgIGFyZ3VtZW50c1tpICsgMV0gPSBhcmd1bWVudHNbaSArIDFdLmNk
cjsKKwl9CisJdmFyIHRtcCA9IHByb2MuYXBwbHkobnVsbCwgYXBwbHlBcmdzKTsKKwlpZih0bXAg
IT09IGZhbHNlKSByZXZyZXMgPSBzY19jb25zKHRtcCwgcmV2cmVzKTsKKyAgICB9CisgICAgcmV0
dXJuIHNjX3JldmVyc2VBcHBlbmRCYW5nKHJldnJlcywgbnVsbCk7Cit9CisKKy8qKiogTUVUQSAo
KGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBzY19hbnkocHJvYywgbCkgeworICAgIHZhciByZXZy
ZXMgPSBudWxsOworICAgIHdoaWxlIChsICE9PSBudWxsKSB7CisgICAgICAgIHZhciB0bXAgPSBw
cm9jKGwuY2FyKTsKKyAgICAgICAgaWYodG1wICE9PSBmYWxzZSkgcmV0dXJuIHRtcDsKKwlsID0g
bC5jZHI7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0
IGFueT8pCisgICAgICAgICAgIChwZWVwaG9sZSAoaG9sZSAyICJzY19hbnkoIiBwcm9jICIsIiBs
ICIpICE9PSBmYWxzZSIpKSkKKyovCitmdW5jdGlvbiBzY19hbnlQcmVkKHByb2MsIGwpIHsKKyAg
ICByZXR1cm4gc2NfYW55KHByb2MsIGwpIT09IGZhbHNlOworfQorCisvKioqIE1FVEEgKChleHBv
cnQgI3QpKSAqLworZnVuY3Rpb24gc2NfZXZlcnkocHJvYywgbCkgeworICAgIHZhciByZXZyZXMg
PSBudWxsOworICAgIHZhciB0bXAgPSB0cnVlOworICAgIHdoaWxlIChsICE9PSBudWxsKSB7Cisg
ICAgICAgIHRtcCA9IHByb2MobC5jYXIpOworICAgICAgICBpZiAodG1wID09PSBmYWxzZSkgcmV0
dXJuIGZhbHNlOworCWwgPSBsLmNkcjsKKyAgICB9CisgICAgcmV0dXJuIHRtcDsKK30KKworLyoq
KiBNRVRBICgoZXhwb3J0IGV2ZXJ5PykKKyAgICAgICAgICAgKHBlZXBob2xlIChob2xlIDIgInNj
X2V2ZXJ5KCIgcHJvYyAiLCIgbCAiKSAhPT0gZmFsc2UiKSkpCisqLworZnVuY3Rpb24gc2NfZXZl
cnlQcmVkKHByb2MsIGwpIHsKKyAgICB2YXIgdG1wID0gc2NfZXZlcnkocHJvYywgbCk7CisgICAg
aWYgKHRtcCAhPT0gZmFsc2UpIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
LyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAocGVlcGhvbGUgKHBvc3RmaXggIigp
IikpKQorKi8KK2Z1bmN0aW9uIHNjX2ZvcmNlKG8pIHsKKyAgICByZXR1cm4gbygpOworfQorCisv
KioqIE1FVEEgKChleHBvcnQgI3QpKSAqLworZnVuY3Rpb24gc2NfbWFrZVByb21pc2UocHJvYykg
eworICAgIHZhciBpc1Jlc3VsdFJlYWR5ID0gZmFsc2U7CisgICAgdmFyIHJlc3VsdCA9IHVuZGVm
aW5lZDsKKyAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisJaWYgKCFpc1Jlc3VsdFJlYWR5KSB7CisJ
ICAgIHZhciB0bXAgPSBwcm9jKCk7CisJICAgIGlmICghaXNSZXN1bHRSZWFkeSkgeworCQlpc1Jl
c3VsdFJlYWR5ID0gdHJ1ZTsKKwkJcmVzdWx0ID0gdG1wOworCSAgICB9CisJfQorCXJldHVybiBy
ZXN1bHQ7CisgICAgfTsKK30KKworZnVuY3Rpb24gc2NfVmFsdWVzKHZhbHVlcykgeworICAgIHRo
aXMudmFsdWVzID0gdmFsdWVzOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAg
ICAgIChwZWVwaG9sZSAodmFsdWVzKSkpCisqLworZnVuY3Rpb24gc2NfdmFsdWVzKCkgeworICAg
IGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKQorCXJldHVybiBhcmd1bWVudHNbMF07CisgICAg
ZWxzZQorCXJldHVybiBuZXcgc2NfVmFsdWVzKGFyZ3VtZW50cyk7Cit9CisKKy8qKiogTUVUQSAo
KGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBzY19jYWxsV2l0aFZhbHVlcyhwcm9kdWNlciwgY29u
c3VtZXIpIHsKKyAgICB2YXIgcHJvZHVjZWQgPSBwcm9kdWNlcigpOworICAgIGlmIChwcm9kdWNl
ZCBpbnN0YW5jZW9mIHNjX1ZhbHVlcykKKwlyZXR1cm4gY29uc3VtZXIuYXBwbHkobnVsbCwgcHJv
ZHVjZWQudmFsdWVzKTsKKyAgICBlbHNlCisJcmV0dXJuIGNvbnN1bWVyKHByb2R1Y2VkKTsKK30K
KworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9uIHNjX2R5bmFtaWNXaW5kKGJl
Zm9yZSwgdGh1bmssIGFmdGVyKSB7CisgICAgYmVmb3JlKCk7CisgICAgdHJ5IHsKKwl2YXIgcmVz
ID0gdGh1bmsoKTsKKwlyZXR1cm4gcmVzOworICAgIH0gZmluYWxseSB7CisJYWZ0ZXIoKTsKKyAg
ICB9Cit9CisKKworLy8gVE9ETzogZXZhbC9zY2hlbWUtcmVwb3J0LWVudmlyb25tZW50L251bGwt
ZW52aXJvbm1lbnQvaW50ZXJhY3Rpb24tZW52aXJvbm1lbnQKKworLy8gTElNSVRBVElPTjogJ2xv
YWQnIGRvZXNuJ3QgZXhpc3Qgd2l0aG91dCBmaWxlcy4KKy8vIExJTUlUQVRJT046IHRyYW5zY3Jp
cHQtb24vdHJhbnNjcmlwdC1vZmYgZG9lc24ndCBleGlzdCB3aXRob3V0IGZpbGVzLgorCisKK2Z1
bmN0aW9uIHNjX1N0cnVjdChuYW1lKSB7CisgICAgdGhpcy5uYW1lID0gbmFtZTsKK30KK3NjX1N0
cnVjdC5wcm90b3R5cGUuc2NfdG9EaXNwbGF5U3RyaW5nID0gZnVuY3Rpb24oKSB7CisgICAgcmV0
dXJuICIjPHN0cnVjdCIgKyBzY19oYXNoKHRoaXMpICsgIj4iOworfTsKK3NjX1N0cnVjdC5wcm90
b3R5cGUuc2NfdG9Xcml0ZVN0cmluZyA9IHNjX1N0cnVjdC5wcm90b3R5cGUuc2NfdG9EaXNwbGF5
U3RyaW5nOworCisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAgIChwZWVwaG9sZSAo
aG9sZSAxICJuZXcgc2NfU3RydWN0KCIgbmFtZSAiKSIpKSkKKyovCitmdW5jdGlvbiBzY19tYWtl
U3RydWN0KG5hbWUpIHsKKyAgICByZXR1cm4gbmV3IHNjX1N0cnVjdChuYW1lKTsKK30KKworLyoq
KiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAodHlwZSBib29sKQorICAgICAgICAgICAo
cGVlcGhvbGUgKHBvc3RmaXggIiBpbnN0YW5jZW9mIHNjX1N0cnVjdCIpKSkKKyovCitmdW5jdGlv
biBzY19pc1N0cnVjdChvKSB7CisgICAgcmV0dXJuIChvIGluc3RhbmNlb2Ygc2NfU3RydWN0KTsK
K30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAodHlwZSBib29sKQorICAg
ICAgICAgICAocGVlcGhvbGUgKGhvbGUgMiAiKCIgMSAiIGluc3RhbmNlb2Ygc2NfU3RydWN0KSAm
JiAoICIgMSAiLm5hbWUgPT09ICIgMCAiKSIpKSkKKyovCitmdW5jdGlvbiBzY19pc1N0cnVjdE5h
bWVkKG5hbWUsIHMpIHsKKyAgICByZXR1cm4gKChzIGluc3RhbmNlb2Ygc2NfU3RydWN0KSAmJiAo
cy5uYW1lID09PSBuYW1lKSk7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCBzdHJ1Y3QtZmllbGQp
CisgICAgICAgICAgIChwZWVwaG9sZSAoaG9sZSAzIDAgIlsiIDIgIl0iKSkpCisqLworZnVuY3Rp
b24gc2NfZ2V0U3RydWN0RmllbGQocywgbmFtZSwgZmllbGQpIHsKKyAgICByZXR1cm4gc1tmaWVs
ZF07Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCBzdHJ1Y3QtZmllbGQtc2V0ISkKKyAgICAgICAg
ICAgKHBlZXBob2xlIChob2xlIDQgMCAiWyIgMiAiXSA9ICIgMykpKQorKi8KK2Z1bmN0aW9uIHNj
X3NldFN0cnVjdEZpZWxkQmFuZyhzLCBuYW1lLCBmaWVsZCwgdmFsKSB7CisgICAgc1tmaWVsZF0g
PSB2YWw7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBob2xl
IChwcmVmaXggIn4iKSkpCisqLworZnVuY3Rpb24gc2NfYml0Tm90KHgpIHsKKyAgICByZXR1cm4g
fng7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBob2xlIChp
bmZpeCAyIDIgIiYiKSkpCisqLworZnVuY3Rpb24gc2NfYml0QW5kKHgsIHkpIHsKKyAgICByZXR1
cm4geCAmIHk7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBo
b2xlIChpbmZpeCAyIDIgInwiKSkpCisqLworZnVuY3Rpb24gc2NfYml0T3IoeCwgeSkgeworICAg
IHJldHVybiB4IHwgeTsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAo
cGVlcGhvbGUgKGluZml4IDIgMiAiXiIpKSkKKyovCitmdW5jdGlvbiBzY19iaXRYb3IoeCwgeSkg
eworICAgIHJldHVybiB4IF4geTsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAg
ICAgICAocGVlcGhvbGUgKGluZml4IDIgMiAiPDwiKSkpCisqLworZnVuY3Rpb24gc2NfYml0THNo
KHgsIHkpIHsKKyAgICByZXR1cm4geCA8PCB5OworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3Qp
CisgICAgICAgICAgIChwZWVwaG9sZSAoaW5maXggMiAyICI+PiIpKSkKKyovCitmdW5jdGlvbiBz
Y19iaXRSc2goeCwgeSkgeworICAgIHJldHVybiB4ID4+IHk7Cit9CisKKy8qKiogTUVUQSAoKGV4
cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBob2xlIChpbmZpeCAyIDIgIj4+PiIpKSkKKyovCitm
dW5jdGlvbiBzY19iaXRVcnNoKHgsIHkpIHsKKyAgICByZXR1cm4geCA+Pj4geTsKK30KKworLyoq
KiBNRVRBICgoZXhwb3J0IGpzLWZpZWxkIGpzLXByb3BlcnR5KQorICAgICAgICAgICAocGVlcGhv
bGUgKGhvbGUgMiBvICJbIiBmaWVsZCAiXSIpKSkKKyovCitmdW5jdGlvbiBzY19qc0ZpZWxkKG8s
IGZpZWxkKSB7CisgICAgcmV0dXJuIG9bZmllbGRdOworfQorCisvKioqIE1FVEEgKChleHBvcnQg
anMtZmllbGQtc2V0ISBqcy1wcm9wZXJ0eS1zZXQhKQorICAgICAgICAgICAocGVlcGhvbGUgKGhv
bGUgMyBvICJbIiBmaWVsZCAiXSA9ICIgdmFsKSkpCisqLworZnVuY3Rpb24gc2Nfc2V0SnNGaWVs
ZEJhbmcobywgZmllbGQsIHZhbCkgeworICAgIHJldHVybiBvW2ZpZWxkXSA9IHZhbDsKK30KKwor
LyoqKiBNRVRBICgoZXhwb3J0IGpzLWZpZWxkLWRlbGV0ZSEganMtcHJvcGVydHktZGVsZXRlISkK
KyAgICAgICAgICAgKHBlZXBob2xlIChob2xlIDIgImRlbGV0ZSIgbyAiWyIgZmllbGQgIl0iKSkp
CisqLworZnVuY3Rpb24gc2NfZGVsZXRlSnNGaWVsZEJhbmcobywgZmllbGQpIHsKKyAgICBkZWxl
dGUgb1tmaWVsZF07Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBl
ZXBob2xlIChqc0NhbGwpKSkKKyovCitmdW5jdGlvbiBzY19qc0NhbGwobywgZnVuKSB7CisgICAg
dmFyIGFyZ3MgPSBuZXcgQXJyYXkoKTsKKyAgICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50
cy5sZW5ndGg7IGkrKykKKwlhcmdzW2ktMl0gPSBhcmd1bWVudHNbaV07CisgICAgcmV0dXJuIGZ1
bi5hcHBseShvLCBhcmdzKTsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAg
ICAocGVlcGhvbGUgKGpzTWV0aG9kQ2FsbCkpKQorKi8KK2Z1bmN0aW9uIHNjX2pzTWV0aG9kQ2Fs
bChvLCBmaWVsZCkgeworICAgIHZhciBhcmdzID0gbmV3IEFycmF5KCk7CisgICAgZm9yICh2YXIg
aSA9IDI7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspCisJYXJnc1tpLTJdID0gYXJndW1lbnRz
W2ldOworICAgIHJldHVybiBvW2ZpZWxkXS5hcHBseShvLCBhcmdzKTsKK30KKworLyoqKiBNRVRB
ICgoZXhwb3J0IG5ldyBqcy1uZXcpCisgICAgICAgICAgIChwZWVwaG9sZSAoanNOZXcpKSkKKyov
CitmdW5jdGlvbiBzY19qc05ldyhjKSB7CisgICAgdmFyIGV2YWxTdHIgPSAibmV3IGMoIjsKKyAg
ICBldmFsU3RyICs9YXJndW1lbnRzLmxlbmd0aCA+IDE/ICJhcmd1bWVudHNbMV0iOiAiIjsKKyAg
ICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykKKwlldmFsU3RyICs9
ICIsIGFyZ3VtZW50c1siICsgaSArICJdIjsKKyAgICBldmFsU3RyICs9IikiOworICAgIHJldHVy
biBldmFsKGV2YWxTdHIpOworfSAgICAKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09IFJl
Z0V4cCA9PT09PT09PT09PT09PT09PT09PQorLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1
bmN0aW9uIHNjX3ByZWdleHAocmUpIHsKKyAgICByZXR1cm4gbmV3IFJlZ0V4cChzY19zdHJpbmcy
anNzdHJpbmcocmUpKTsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9u
IHNjX3ByZWdleHBNYXRjaChyZSwgcykgeworICAgIHZhciByZWcgPSAocmUgaW5zdGFuY2VvZiBS
ZWdFeHApID8gcmUgOiBzY19wcmVnZXhwKHJlKTsKKyAgICB2YXIgdG1wID0gcmVnLmV4ZWMoc2Nf
c3RyaW5nMmpzc3RyaW5nKHMpKTsKKyAgICAKKyAgICBpZiAodG1wID09IG51bGwpIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICB2YXIgcmVzID0gbnVsbDsKKyAgICBmb3IgKHZhciBpID0gdG1wLmxl
bmd0aC0xOyBpID49IDA7IGktLSkgeworCWlmICh0bXBbaV0gIT09IG51bGwpIHsKKwkgICAgcmVz
ID0gc2NfY29ucyhzY19qc3N0cmluZzJzdHJpbmcodG1wW2ldKSwgcmVzKTsKKwl9IGVsc2Ugewor
CSAgICByZXMgPSBzY19jb25zKGZhbHNlLCByZXMpOworCX0KKyAgICB9CisgICAgcmV0dXJuIHJl
czsKK30KKyAgIAorLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9uIHNjX3ByZWdl
eHBSZXBsYWNlKHJlLCBzMSwgczIpIHsKKyAgIHZhciByZWc7CisgICB2YXIganNzMSA9IHNjX3N0
cmluZzJqc3N0cmluZyhzMSk7CisgICB2YXIganNzMiA9IHNjX3N0cmluZzJqc3N0cmluZyhzMik7
CisKKyAgIGlmIChyZSBpbnN0YW5jZW9mIFJlZ0V4cCkgeworICAgICAgIGlmIChyZS5nbG9iYWwp
CisJICAgcmVnID0gcmU7CisgICAgICAgZWxzZQorCSAgIHJlZyA9IG5ldyBSZWdFeHAocmUuc291
cmNlKTsKKyAgIH0gZWxzZSB7CisgICAgICAgcmVnID0gbmV3IFJlZ0V4cChzY19zdHJpbmcyanNz
dHJpbmcocmUpKTsKKyAgIH0KKworICAgcmV0dXJuIGpzczEucmVwbGFjZShyZWcsIGpzczIpOwor
fQorICAgCisvKioqIE1FVEEgKChleHBvcnQgcHJlZ2V4cC1yZXBsYWNlKikpICovCitmdW5jdGlv
biBzY19wcmVnZXhwUmVwbGFjZUFsbChyZSwgczEsIHMyKSB7CisgICB2YXIgcmVnOworICAgdmFy
IGpzczEgPSBzY19zdHJpbmcyanNzdHJpbmcoczEpOworICAgdmFyIGpzczIgPSBzY19zdHJpbmcy
anNzdHJpbmcoczIpOworCisgICBpZiAocmUgaW5zdGFuY2VvZiBSZWdFeHApIHsKKyAgICAgIGlm
IChyZS5nbG9iYWwpCisJICByZWcgPSByZTsKKyAgICAgIGVsc2UKKwkgIHJlZyA9IG5ldyBSZWdF
eHAocmUuc291cmNlLCAiZyIpOworICAgfSBlbHNlIHsKKyAgICAgICByZWcgPSBuZXcgUmVnRXhw
KHNjX3N0cmluZzJqc3N0cmluZyhyZSksICJnIik7CisgICB9CisKKyAgIHJldHVybiBqc3MxLnJl
cGxhY2UocmVnLCBqc3MyKTsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0
aW9uIHNjX3ByZWdleHBTcGxpdChyZSwgcykgeworICAgdmFyIHJlZyA9ICgocmUgaW5zdGFuY2Vv
ZiBSZWdFeHApID8KKwkgICAgICByZSA6CisJICAgICAgbmV3IFJlZ0V4cChzY19zdHJpbmcyanNz
dHJpbmcocmUpKSk7CisgICB2YXIganNzID0gc2Nfc3RyaW5nMmpzc3RyaW5nKHMpOworICAgdmFy
IHRtcCA9IGpzcy5zcGxpdChyZWcpOworCisgICBpZiAodG1wID09IG51bGwpIHJldHVybiBmYWxz
ZTsKKworICAgcmV0dXJuIHNjX3ZlY3RvcjJsaXN0KHRtcCk7Cit9CisgICAKKworLyogPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ICovCisvKiBPdGhlciBsaWJyYXJ5IHN0dWZmICovCisvKiA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0gKi8KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAocGVlcGhv
bGUgKGhvbGUgMSAiTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKiIgJ24gIikiKSkpCisqLworZnVu
Y3Rpb24gc2NfcmFuZG9tKG4pIHsKKyAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgp
Km4pOworfQorCisvKioqIE1FVEEgKChleHBvcnQgY3VycmVudC1kYXRlKQorICAgICAgICAgICAo
cGVlcGhvbGUgKGhvbGUgMCAibmV3IERhdGUoKSIpKSkKKyovCitmdW5jdGlvbiBzY19jdXJyZW50
RGF0ZSgpIHsKKyAgIHJldHVybiBuZXcgRGF0ZSgpOworfQorCitmdW5jdGlvbiBzY19IYXNodGFi
bGUoKSB7Cit9CitzY19IYXNodGFibGUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7
CisgICAgcmV0dXJuICIjeyVoYXNodGFibGV9IjsKK307CisvLyBzY190b1dyaXRlU3RyaW5nID09
IHNjX3RvRGlzcGxheVN0cmluZyA9PSB0b1N0cmluZworCitmdW5jdGlvbiBzY19IYXNodGFibGVF
bGVtZW50KGtleSwgdmFsKSB7CisgICAgdGhpcy5rZXkgPSBrZXk7CisgICAgdGhpcy52YWwgPSB2
YWw7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBob2xlICho
b2xlIDAgIm5ldyBzY19IYXNodGFibGUoKSIpKSkKKyovCitmdW5jdGlvbiBzY19tYWtlSGFzaHRh
YmxlKCkgeworICAgIHJldHVybiBuZXcgc2NfSGFzaHRhYmxlKCk7Cit9CisKKy8qKiogTUVUQSAo
KGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBzY19oYXNodGFibGVQdXRCYW5nKGh0LCBrZXksIHZh
bCkgeworICAgIHZhciBoYXNoID0gc2NfaGFzaChrZXkpOworICAgIGh0W2hhc2hdID0gbmV3IHNj
X0hhc2h0YWJsZUVsZW1lbnQoa2V5LCB2YWwpOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3Qp
KSAqLworZnVuY3Rpb24gc2NfaGFzaHRhYmxlR2V0KGh0LCBrZXkpIHsKKyAgICB2YXIgaGFzaCA9
IHNjX2hhc2goa2V5KTsKKyAgICBpZiAoaGFzaCBpbiBodCkKKwlyZXR1cm4gaHRbaGFzaF0udmFs
OworICAgIGVsc2UKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkp
ICovCitmdW5jdGlvbiBzY19oYXNodGFibGVGb3JFYWNoKGh0LCBmKSB7CisgICAgZm9yICh2YXIg
diBpbiBodCkgeworCWlmIChodFt2XSBpbnN0YW5jZW9mIHNjX0hhc2h0YWJsZUVsZW1lbnQpCisJ
ICAgIGYoaHRbdl0ua2V5LCBodFt2XS52YWwpOworICAgIH0KK30KKworLyoqKiBNRVRBICgoZXhw
b3J0IGhhc2h0YWJsZS1jb250YWlucz8pCisgICAgICAgICAgIChwZWVwaG9sZSAoaG9sZSAyICJz
Y19oYXNoKCIgMSAiKSBpbiAiIDApKSkKKyovCitmdW5jdGlvbiBzY19oYXNodGFibGVDb250YWlu
cyhodCwga2V5KSB7CisgICAgdmFyIGhhc2ggPSBzY19oYXNoKGtleSk7CisgICAgaWYgKGhhc2gg
aW4gaHQpCisJcmV0dXJuIHRydWU7CisgICAgZWxzZQorCXJldHVybiBmYWxzZTsKK30KKwordmFy
IFNDX0hBU0hfQ09VTlRFUiA9IDA7CisKK2Z1bmN0aW9uIHNjX2hhc2gobykgeworICAgIGlmIChv
ID09PSBudWxsKQorCXJldHVybiAibnVsbCI7CisgICAgZWxzZSBpZiAobyA9PT0gdW5kZWZpbmVk
KQorCXJldHVybiAidW5kZWZpbmVkIjsKKyAgICBlbHNlIGlmIChvID09PSB0cnVlKQorCXJldHVy
biAidHJ1ZSI7CisgICAgZWxzZSBpZiAobyA9PT0gZmFsc2UpCisJcmV0dXJuICJmYWxzZSI7Cisg
ICAgZWxzZSBpZiAodHlwZW9mIG8gPT09ICJudW1iZXIiKQorCXJldHVybiAibnVtLSIgKyBvOwor
ICAgIGVsc2UgaWYgKHR5cGVvZiBvID09PSAic3RyaW5nIikKKwlyZXR1cm4gImpzc3RyLSIgKyBv
OworICAgIGVsc2UgaWYgKG8uc2NfZ2V0SGFzaCkKKwlyZXR1cm4gby5zY19nZXRIYXNoKCk7Cisg
ICAgZWxzZQorCXJldHVybiBzY19jb3VudGVySGFzaC5jYWxsKG8pOworfQorZnVuY3Rpb24gc2Nf
Y291bnRlckhhc2goKSB7CisgICAgaWYgKCF0aGlzLnNjX2hhc2gpIHsKKwl0aGlzLnNjX2hhc2gg
PSAiaGFzaC0iICsgU0NfSEFTSF9DT1VOVEVSOworCVNDX0hBU0hfQ09VTlRFUisrOworICAgIH0K
KyAgICByZXR1cm4gdGhpcy5zY19oYXNoOworfQorCitmdW5jdGlvbiBzY19UcmFtcG9saW5lKGFy
Z3MsIG1heFRhaWxDYWxscykgeworICAgIHRoaXNbJ19fdHJhbXBvbGluZSByZXR1cm5fXyddID0g
dHJ1ZTsKKyAgICB0aGlzLmFyZ3MgPSBhcmdzOworICAgIHRoaXMuTUFYX1RBSUxfQ0FMTHMgPSBt
YXhUYWlsQ2FsbHM7Cit9CisvLyBUT0RPOiBjYWxsL2NjIHN0dWZmCitzY19UcmFtcG9saW5lLnBy
b3RvdHlwZS5yZXN0YXJ0ID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIG8gPSB0aGlzOworICAgIHdo
aWxlICh0cnVlKSB7CisJLy8gc2V0IGJvdGggZ2xvYmFscy4KKwlTQ19UQUlMX09CSkVDVC5jYWxs
cyA9IG8uTUFYX1RBSUxfQ0FMTHMtMTsKKwl2YXIgZnVuID0gby5hcmdzLmNhbGxlZTsKKwl2YXIg
cmVzID0gZnVuLmFwcGx5KFNDX1RBSUxfT0JKRUNULCBvLmFyZ3MpOworCWlmIChyZXMgaW5zdGFu
Y2VvZiBzY19UcmFtcG9saW5lKQorCSAgICBvID0gcmVzOworCWVsc2UKKwkgICAgcmV0dXJuIHJl
czsKKyAgICB9Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCBiaW5kLWV4aXQtbGFtYmRhKSkgKi8K
K2Z1bmN0aW9uIHNjX2JpbmRFeGl0TGFtYmRhKHByb2MpIHsKKyAgICB2YXIgZXNjYXBlX29iaiA9
IG5ldyBzY19CaW5kRXhpdEV4Y2VwdGlvbigpOworICAgIHZhciBlc2NhcGUgPSBmdW5jdGlvbihy
ZXMpIHsKKwllc2NhcGVfb2JqLnJlcyA9IHJlczsKKwl0aHJvdyBlc2NhcGVfb2JqOworICAgIH07
CisgICAgdHJ5IHsKKwlyZXR1cm4gcHJvYyhlc2NhcGUpOworICAgIH0gY2F0Y2goZSkgeworCWlm
IChlID09PSBlc2NhcGVfb2JqKSB7CisJICAgIHJldHVybiBlLnJlczsKKwl9CisJdGhyb3cgZTsK
KyAgICB9Cit9CitmdW5jdGlvbiBzY19CaW5kRXhpdEV4Y2VwdGlvbigpIHsKKyAgICB0aGlzLl9p
bnRlcm5hbEV4Y2VwdGlvbiA9IHRydWU7Cit9CisKK3ZhciBTQ19TQ00ySlNfR0xPQkFMUyA9IG5l
dyBPYmplY3QoKTsKKworLy8gZGVmYXVsdCB0YWlsLWNhbGwgZGVwdGguCisvLyBub3JtYWxseSB0
aGUgcHJvZ3JhbSBzaG91bGQgc2V0IGl0IGFnYWluLiBidXQganVzdCBpbiBjYXNlLi4uCit2YXIg
U0NfVEFJTF9PQkpFQ1QgPSBuZXcgT2JqZWN0KCk7CitTQ19TQ00ySlNfR0xPQkFMUy5UQUlMX09C
SkVDVCA9IFNDX1RBSUxfT0JKRUNUOworLy8gPT09PT09PT09PT09PT09PT09PT09PT09IEkvTyA9
PT09PT09PT09PT09PT09PT09PT09PQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2Z1bmN0aW9uIHNjX0VP
RigpIHsKK30KK3ZhciBTQ19FT0ZfT0JKRUNUID0gbmV3IHNjX0VPRigpOworCitmdW5jdGlvbiBz
Y19Qb3J0KCkgeworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0gSW5wdXQgcG9ydHMgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2Z1bmN0aW9uIHNjX0lucHV0UG9ydCgp
IHsKK30KK3NjX0lucHV0UG9ydC5wcm90b3R5cGUgPSBuZXcgc2NfUG9ydCgpOworCitzY19JbnB1
dFBvcnQucHJvdG90eXBlLnBlZWtDaGFyID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKCEoInBlZWtl
ZCIgaW4gdGhpcykpCisJdGhpcy5wZWVrZWQgPSB0aGlzLmdldE5leHRDaGFyKCk7CisgICAgcmV0
dXJuIHRoaXMucGVla2VkOworfQorc2NfSW5wdXRQb3J0LnByb3RvdHlwZS5yZWFkQ2hhciA9IGZ1
bmN0aW9uKCkgeworICAgIHZhciB0bXAgPSB0aGlzLnBlZWtDaGFyKCk7CisgICAgZGVsZXRlIHRo
aXMucGVla2VkOworICAgIHJldHVybiB0bXA7Cit9CitzY19JbnB1dFBvcnQucHJvdG90eXBlLmlz
Q2hhclJlYWR5ID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRydWU7Cit9CitzY19JbnB1dFBv
cnQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7CisgICAgLy8gZG8gbm90aGluZworfQor
CisvKiAuLi4uLi4uLi4uLi4uLiBTdHJpbmcgcG9ydCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
LiovCitmdW5jdGlvbiBzY19FcnJvcklucHV0UG9ydCgpIHsKK307CitzY19FcnJvcklucHV0UG9y
dC5wcm90b3R5cGUgPSBuZXcgc2NfSW5wdXRQb3J0KCk7CitzY19FcnJvcklucHV0UG9ydC5wcm90
b3R5cGUuZ2V0TmV4dENoYXIgPSBmdW5jdGlvbigpIHsKKyAgICB0aHJvdyAiY2FuJ3QgcmVhZCBm
cm9tIGVycm9yLXBvcnQuIjsKK307CitzY19FcnJvcklucHV0UG9ydC5wcm90b3R5cGUuaXNDaGFy
UmVhZHkgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gZmFsc2U7Cit9OworICAgIAorCisvKiAu
Li4uLi4uLi4uLi4uLiBTdHJpbmcgcG9ydCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiovCisK
K2Z1bmN0aW9uIHNjX1N0cmluZ0lucHV0UG9ydChqc1N0cikgeworICAgIC8vIHdlIGFyZSBnb2lu
ZyB0byBkbyBzb21lIGNoYXJBdHMgb24gdGhlIHN0ci4KKyAgICAvLyBpbnN0ZWFkIG9mIHJlY3Jl
YXRpbmcgYWxsIHRoZSB0aW1lIGEgU3RyaW5nLW9iamVjdCwgd2UKKyAgICAvLyBjcmVhdGUgb25l
IGluIHRoZSBiZWdpbm5pbmcuIChub3Qgc3VyZSwgaWYgdGhpcyBpcyByZWFsbHkgYW4gb3B0aW0p
CisgICAgdGhpcy5zdHIgPSBuZXcgU3RyaW5nKGpzU3RyKTsKKyAgICB0aGlzLnBvcyA9IDA7Cit9
CitzY19TdHJpbmdJbnB1dFBvcnQucHJvdG90eXBlID0gbmV3IHNjX0lucHV0UG9ydCgpOworc2Nf
U3RyaW5nSW5wdXRQb3J0LnByb3RvdHlwZS5nZXROZXh0Q2hhciA9IGZ1bmN0aW9uKCkgeworICAg
IGlmICh0aGlzLnBvcyA+PSB0aGlzLnN0ci5sZW5ndGgpCisJcmV0dXJuIFNDX0VPRl9PQkpFQ1Q7
CisgICAgcmV0dXJuIHRoaXMuc3RyLmNoYXJBdCh0aGlzLnBvcysrKTsKK307CisKKy8qIC0tLS0t
LS0tLS0tLS0gUmVhZCBhbmQgb3RoZXIgbGliLWZ1bnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0qLworZnVuY3Rpb24gc2NfVG9rZW4odHlwZSwgdmFsLCBwb3MpIHsKKyAgICB0aGlz
LnR5cGUgPSB0eXBlOworICAgIHRoaXMudmFsID0gdmFsOworICAgIHRoaXMucG9zID0gcG9zOwor
fQorc2NfVG9rZW4uRU9GID0gMC8qRU9GKi87CitzY19Ub2tlbi5PUEVOX1BBUiA9IDEvKk9QRU5f
UEFSKi87CitzY19Ub2tlbi5DTE9TRV9QQVIgPSAyLypDTE9TRV9QQVIqLzsKK3NjX1Rva2VuLk9Q
RU5fQlJBQ0UgPSAzLypPUEVOX0JSQUNFKi87CitzY19Ub2tlbi5DTE9TRV9CUkFDRSA9IDQvKkNM
T1NFX0JSQUNFKi87CitzY19Ub2tlbi5PUEVOX0JSQUNLRVQgPSA1LypPUEVOX0JSQUNLRVQqLzsK
K3NjX1Rva2VuLkNMT1NFX0JSQUNLRVQgPSA2LypDTE9TRV9CUkFDS0VUKi87CitzY19Ub2tlbi5X
SElURVNQQUNFID0gNy8qV0hJVEVTUEFDRSovOworc2NfVG9rZW4uUVVPVEUgPSA4LypRVU9URSov
Oworc2NfVG9rZW4uSUQgPSA5LypJRCovOworc2NfVG9rZW4uRE9UID0gMTAvKkRPVCovOworc2Nf
VG9rZW4uU1RSSU5HID0gMTEvKlNUUklORyovOworc2NfVG9rZW4uTlVNQkVSID0gMTIvKk5VTUJF
UiovOworc2NfVG9rZW4uRVJST1IgPSAxMy8qRVJST1IqLzsKK3NjX1Rva2VuLlZFQ1RPUl9CRUdJ
TiA9IDE0LypWRUNUT1JfQkVHSU4qLzsKK3NjX1Rva2VuLlRSVUUgPSAxNS8qVFJVRSovOworc2Nf
VG9rZW4uRkFMU0UgPSAxNi8qRkFMU0UqLzsKK3NjX1Rva2VuLlVOU1BFQ0lGSUVEID0gMTcvKlVO
U1BFQ0lGSUVEKi87CitzY19Ub2tlbi5SRUZFUkVOQ0UgPSAxOC8qUkVGRVJFTkNFKi87CitzY19U
b2tlbi5TVE9SRSA9IDE5LypTVE9SRSovOworc2NfVG9rZW4uQ0hBUiA9IDIwLypDSEFSKi87CisK
K3ZhciBTQ19JRF9DTEFTUyA9IFNDX0xPV0VSX0NMQVNTICsgU0NfVVBQRVJfQ0xBU1MgKyAiISQl
KistLi86PD0+P0BeX34iOworZnVuY3Rpb24gc2NfVG9rZW5pemVyKHBvcnQpIHsKKyAgICB0aGlz
LnBvcnQgPSBwb3J0OworfQorc2NfVG9rZW5pemVyLnByb3RvdHlwZS5wZWVrVG9rZW4gPSBmdW5j
dGlvbigpIHsKKyAgICBpZiAodGhpcy5wZWVrZWQpCisJcmV0dXJuIHRoaXMucGVla2VkOworICAg
IHZhciBuZXdUb2tlbiA9IHRoaXMubmV4dFRva2VuKCk7CisgICAgdGhpcy5wZWVrZWQgPSBuZXdU
b2tlbjsKKyAgICByZXR1cm4gbmV3VG9rZW47Cit9Oworc2NfVG9rZW5pemVyLnByb3RvdHlwZS5y
ZWFkVG9rZW4gPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgdG1wID0gdGhpcy5wZWVrVG9rZW4oKTsK
KyAgICBkZWxldGUgdGhpcy5wZWVrZWQ7CisgICAgcmV0dXJuIHRtcDsKK307CitzY19Ub2tlbml6
ZXIucHJvdG90eXBlLm5leHRUb2tlbiA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBwb3J0ID0gdGhp
cy5wb3J0OworICAgIAorICAgIGZ1bmN0aW9uIGlzTnVtYmVyQ2hhcihjKSB7CisJcmV0dXJuIChj
ID49ICIwIiAmJiBjIDw9ICI5Iik7CisgICAgfTsKKyAgICBmdW5jdGlvbiBpc0lkT3JOdW1iZXJD
aGFyKGMpIHsKKwlyZXR1cm4gU0NfSURfQ0xBU1MuaW5kZXhPZihjKSAhPSAtMSB8fCAvLyBJRC1j
aGFyCisJICAgIChjID49ICIwIiAmJiBjIDw9ICI5Iik7CisgICAgfQorICAgIGZ1bmN0aW9uIGlz
V2hpdGVzcGFjZShjKSB7CisJcmV0dXJuIGMgPT09ICIgIiB8fCBjID09PSAiXHIiIHx8IGMgPT09
ICJcbiIgfHwgYyA9PT0gIlx0IiB8fCBjID09PSAiXGYiOworICAgIH07CisgICAgZnVuY3Rpb24g
aXNXaGl0ZXNwYWNlT3JFT0YoYykgeworCXJldHVybiBpc1doaXRlc3BhY2UoYykgfHwgYyA9PT0g
U0NfRU9GX09CSkVDVDsKKyAgICB9OworCisgICAgZnVuY3Rpb24gcmVhZFN0cmluZygpIHsKKwly
ZXMgPSAiIjsKKwl3aGlsZSAodHJ1ZSkgeworCSAgICB2YXIgYyA9IHBvcnQucmVhZENoYXIoKTsK
KwkgICAgc3dpdGNoIChjKSB7CisJICAgIGNhc2UgJyInOgorCQlyZXR1cm4gbmV3IHNjX1Rva2Vu
KDExLypTVFJJTkcqLywgcmVzKTsKKwkgICAgY2FzZSAiXFwiOgorCQl2YXIgdG1wID0gcG9ydC5y
ZWFkQ2hhcigpOworCQlzd2l0Y2ggKHRtcCkgeworCQljYXNlICcwJzogcmVzICs9ICJcMCI7IGJy
ZWFrOworCQljYXNlICdhJzogcmVzICs9ICJcYSI7IGJyZWFrOworCQljYXNlICdiJzogcmVzICs9
ICJcYiI7IGJyZWFrOworCQljYXNlICdmJzogcmVzICs9ICJcZiI7IGJyZWFrOworCQljYXNlICdu
JzogcmVzICs9ICJcbiI7IGJyZWFrOworCQljYXNlICdyJzogcmVzICs9ICJcciI7IGJyZWFrOwor
CQljYXNlICd0JzogcmVzICs9ICJcdCI7IGJyZWFrOworCQljYXNlICd2JzogcmVzICs9ICJcdiI7
IGJyZWFrOworCQljYXNlICciJzogcmVzICs9ICciJzsgYnJlYWs7CisJCWNhc2UgJ1xcJzogcmVz
ICs9ICdcXCc7IGJyZWFrOworCQljYXNlICd4JzoKKwkJICAgIC8qIGhleGEtbnVtYmVyICovCisJ
CSAgICB2YXIgbmIgPSAwOworCQkgICAgd2hpbGUgKHRydWUpIHsKKwkJCXZhciBoZXhDID0gcG9y
dC5wZWVrQ2hhcigpOworCQkJaWYgKGhleEMgPj0gJzAnICYmIGhleEMgPD0gJzknKSB7CisJCQkg
ICAgcG9ydC5yZWFkQ2hhcigpOworCQkJICAgIG5iID0gbmIgKiAxNiArIGhleEMuY2hhckNvZGVB
dCgwKSAtICcwJy5jaGFyQ29kZUF0KDApOworCQkJfSBlbHNlIGlmIChoZXhDID49ICdhJyAmJiBo
ZXhDIDw9ICdmJykgeworCQkJICAgIHBvcnQucmVhZENoYXIoKTsKKwkJCSAgICBuYiA9IG5iICog
MTYgKyBoZXhDLmNoYXJDb2RlQXQoMCkgLSAnYScuY2hhckNvZGVBdCgwKTsKKwkJCX0gZWxzZSBp
ZiAoaGV4QyA+PSAnQScgJiYgaGV4QyA8PSAnRicpIHsKKwkJCSAgICBwb3J0LnJlYWRDaGFyKCk7
CisJCQkgICAgbmIgPSBuYiAqIDE2ICsgaGV4Qy5jaGFyQ29kZUF0KDApIC0gJ0EnLmNoYXJDb2Rl
QXQoMCk7CisJCQl9IGVsc2UgeworCQkJICAgIC8vIG5leHQgY2hhciBpc24ndCBwYXJ0IG9mIGhl
eC4KKwkJCSAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShuYik7CisJCQkgICAgYnJlYWs7
CisJCQl9CisJCSAgICB9CisJCSAgICBicmVhazsKKwkJZGVmYXVsdDoKKwkJICAgIGlmICh0bXAg
PT09IFNDX0VPRl9PQkpFQ1QpIHsKKwkJCXJldHVybiBuZXcgc2NfVG9rZW4oMTMvKkVSUk9SKi8s
ICJ1bmNsb3NlZCBzdHJpbmctbGl0ZXJhbCIgKyByZXMpOworCQkgICAgfQorCQkgICAgcmVzICs9
IHRtcDsKKwkJfQorCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJaWYgKGMgPT09IFNDX0VPRl9P
QkpFQ1QpIHsKKwkJICAgIHJldHVybiBuZXcgc2NfVG9rZW4oMTMvKkVSUk9SKi8sICJ1bmNsb3Nl
ZCBzdHJpbmctbGl0ZXJhbCIgKyByZXMpOworCQl9CisJCXJlcyArPSBjOworCSAgICB9CisJfQor
ICAgIH07CisgICAgZnVuY3Rpb24gcmVhZElkT3JOdW1iZXIoZmlyc3RDaGFyKSB7CisJdmFyIHJl
cyA9IGZpcnN0Q2hhcjsKKwl3aGlsZSAoaXNJZE9yTnVtYmVyQ2hhcihwb3J0LnBlZWtDaGFyKCkp
KQorCSAgICByZXMgKz0gcG9ydC5yZWFkQ2hhcigpOworCWlmIChpc05hTihyZXMpKQorCSAgICBy
ZXR1cm4gbmV3IHNjX1Rva2VuKDkvKklEKi8sIHJlcyk7CisJZWxzZQorCSAgICByZXR1cm4gbmV3
IHNjX1Rva2VuKDEyLypOVU1CRVIqLywgcmVzIC0gMCk7CisgICAgfTsKKyAgICAKKyAgICBmdW5j
dGlvbiBza2lwV2hpdGVzcGFjZUFuZENvbW1lbnRzKCkgeworCXZhciBkb25lID0gZmFsc2U7CisJ
d2hpbGUgKCFkb25lKSB7CisJICAgIGRvbmUgPSB0cnVlOworCSAgICB3aGlsZSAoaXNXaGl0ZXNw
YWNlKHBvcnQucGVla0NoYXIoKSkpCisJCXBvcnQucmVhZENoYXIoKTsKKwkgICAgaWYgKHBvcnQu
cGVla0NoYXIoKSA9PT0gJzsnKSB7CisJCXBvcnQucmVhZENoYXIoKTsKKwkJZG9uZSA9IGZhbHNl
OworCQl3aGlsZSAodHJ1ZSkgeworCQkgICAgY3VyQ2hhciA9IHBvcnQucmVhZENoYXIoKTsKKwkJ
ICAgIGlmIChjdXJDaGFyID09PSBTQ19FT0ZfT0JKRUNUIHx8CisJCQljdXJDaGFyID09PSAnXG4n
KQorCQkJYnJlYWs7CisJCX0KKwkgICAgfQorCX0KKyAgICB9OworICAgIAorICAgIGZ1bmN0aW9u
IHJlYWREb3QoKSB7CisJaWYgKGlzV2hpdGVzcGFjZShwb3J0LnBlZWtDaGFyKCkpKQorCSAgICBy
ZXR1cm4gbmV3IHNjX1Rva2VuKDEwLypET1QqLyk7CisJZWxzZQorCSAgICByZXR1cm4gcmVhZElk
T3JOdW1iZXIoIi4iKTsKKyAgICB9OworCisgICAgZnVuY3Rpb24gcmVhZFNoYXJwKCkgeworCXZh
ciBjID0gcG9ydC5yZWFkQ2hhcigpOworCWlmIChpc1doaXRlc3BhY2UoYykpCisJICAgIHJldHVy
biBuZXcgc2NfVG9rZW4oMTMvKkVSUk9SKi8sICJiYWQgIy1wYXR0ZXJuMC4iKTsKKworCS8vIHJl
ZmVyZW5jZQorCWlmIChpc051bWJlckNoYXIoYykpIHsKKwkgICAgdmFyIG5iID0gYyAtIDA7CisJ
ICAgIHdoaWxlIChpc051bWJlckNoYXIocG9ydC5wZWVrQ2hhcigpKSkKKwkJbmIgPSBuYioxMCAr
IChwb3J0LnJlYWRDaGFyKCkgLSAwKTsKKwkgICAgc3dpdGNoIChwb3J0LnJlYWRDaGFyKCkpIHsK
KwkgICAgY2FzZSAnIyc6CisJCXJldHVybiBuZXcgc2NfVG9rZW4oMTgvKlJFRkVSRU5DRSovLCBu
Yik7CisJICAgIGNhc2UgJz0nOgorCQlyZXR1cm4gbmV3IHNjX1Rva2VuKDE5LypTVE9SRSovLCBu
Yik7CisJICAgIGRlZmF1bHQ6CisJCXJldHVybiBuZXcgc2NfVG9rZW4oMTMvKkVSUk9SKi8sICJi
YWQgIy1wYXR0ZXJuMS4iICsgbmIpOworCSAgICB9CisJfQorCisJaWYgKGMgPT09ICIoIikKKwkg
ICAgcmV0dXJuIG5ldyBzY19Ub2tlbigxNC8qVkVDVE9SX0JFR0lOKi8pOworCQorCWlmIChjID09
PSAiXFwiKSB7IC8vIGNoYXJhY3RlcgorCSAgICB2YXIgdG1wID0gIiIKKwkgICAgd2hpbGUgKCFp
c1doaXRlc3BhY2VPckVPRihwb3J0LnBlZWtDaGFyKCkpKQorCQl0bXAgKz0gcG9ydC5yZWFkQ2hh
cigpOworCSAgICBzd2l0Y2ggKHRtcC5sZW5ndGgpIHsKKwkgICAgY2FzZSAwOiAvLyBpdCdzIGVz
Y2FwaW5nIGEgd2hpdGVzcGFjZSBjaGFyOgorCQlpZiAoc2NfaXNFT0ZPYmplY3QocG9ydC5wZWVr
Q2hhcikpCisJCSAgICByZXR1cm4gbmV3IHNjX1Rva2VuKDEzLypFUlJPUiovLCAiYmFkICMtcGF0
dGVybjIuIik7CisJCWVsc2UKKwkJICAgIHJldHVybiBuZXcgc2NfVG9rZW4oMjAvKkNIQVIqLywg
cG9ydC5yZWFkQ2hhcigpKTsKKwkgICAgY2FzZSAxOgorCQlyZXR1cm4gbmV3IHNjX1Rva2VuKDIw
LypDSEFSKi8sIHRtcCk7CisJICAgIGRlZmF1bHQ6CisJCXZhciBlbnRyeSA9IHNjX0NoYXIucmVh
ZGFibGUyY2hhclt0bXAudG9Mb3dlckNhc2UoKV07CisJCWlmIChlbnRyeSkKKwkJICAgIHJldHVy
biBuZXcgc2NfVG9rZW4oMjAvKkNIQVIqLywgZW50cnkpOworCQllbHNlCisJCSAgICByZXR1cm4g
bmV3IHNjX1Rva2VuKDEzLypFUlJPUiovLCAidW5rbm93biBjaGFyYWN0ZXIgZGVzY3JpcHRpb246
ICNcXCIgKyB0bXApOworCSAgICB9CisJfQorCisJLy8gc29tZSBjb25zdGFudHMgKCN0LCAjZiwg
I3Vuc3BlY2lmaWVkKQorCXZhciByZXM7CisJdmFyIG5lZWRpbmc7CisJc3dpdGNoIChjKSB7CisJ
Y2FzZSAndCc6IHJlcyA9IG5ldyBzY19Ub2tlbigxNS8qVFJVRSovLCB0cnVlKTsgbmVlZGluZyA9
ICIiOyBicmVhazsKKwljYXNlICdmJzogcmVzID0gbmV3IHNjX1Rva2VuKDE2LypGQUxTRSovLCBm
YWxzZSk7IG5lZWRpbmcgPSAiIjsgYnJlYWs7CisJY2FzZSAndSc6IHJlcyA9IG5ldyBzY19Ub2tl
bigxNy8qVU5TUEVDSUZJRUQqLywgdW5kZWZpbmVkKTsgbmVlZGluZyA9ICJuc3BlY2lmaWVkIjsg
YnJlYWs7CisJZGVmYXVsdDoKKwkgICAgcmV0dXJuIG5ldyBzY19Ub2tlbigxMy8qRVJST1IqLywg
ImJhZCAjLXBhdHRlcm4zOiAiICsgYyk7CisJfQorCXdoaWxlKHRydWUpIHsKKwkgICAgYyA9IHBv
cnQucGVla0NoYXIoKTsKKwkgICAgaWYgKChpc1doaXRlc3BhY2VPckVPRihjKSB8fCBjID09PSAn
KScpICYmCisJCW5lZWRpbmcgPT0gIiIpCisJCXJldHVybiByZXM7CisJICAgIGVsc2UgaWYgKGlz
V2hpdGVzcGFjZShjKSB8fCBuZWVkaW5nID09ICIiKQorCQlyZXR1cm4gbmV3IHNjX1Rva2VuKDEz
LypFUlJPUiovLCAiYmFkICMtcGF0dGVybjQgIiArIGMgKyAiICIgKyBuZWVkaW5nKTsKKwkgICAg
ZWxzZSBpZiAobmVlZGluZy5jaGFyQXQoMCkgPT0gYykgeworCQlwb3J0LnJlYWRDaGFyKCk7IC8v
IGNvbnN1bWUKKwkJbmVlZGluZyA9IG5lZWRpbmcuc2xpY2UoMSk7CisJICAgIH0gZWxzZQorCQly
ZXR1cm4gbmV3IHNjX1Rva2VuKDEzLypFUlJPUiovLCAiYmFkICMtcGF0dGVybjUiKTsKKwl9CisJ
CisgICAgfTsKKworICAgIHNraXBXaGl0ZXNwYWNlQW5kQ29tbWVudHMoKTsKKyAgICB2YXIgY3Vy
Q2hhciA9IHBvcnQucmVhZENoYXIoKTsKKyAgICBpZiAoY3VyQ2hhciA9PT0gU0NfRU9GX09CSkVD
VCkKKwlyZXR1cm4gbmV3IHNjX1Rva2VuKDAvKkVPRiovLCBjdXJDaGFyKTsKKyAgICBzd2l0Y2gg
KGN1ckNoYXIpCisgICAgeworICAgIGNhc2UgIiAiOgorICAgIGNhc2UgIlxuIjoKKyAgICBjYXNl
ICJcdCI6CisJcmV0dXJuIHJlYWRXaGl0ZXNwYWNlKCk7CisgICAgY2FzZSAiKCI6CisJcmV0dXJu
IG5ldyBzY19Ub2tlbigxLypPUEVOX1BBUiovKTsKKyAgICBjYXNlICIpIjoKKwlyZXR1cm4gbmV3
IHNjX1Rva2VuKDIvKkNMT1NFX1BBUiovKTsKKyAgICBjYXNlICJ7IjoKKwlyZXR1cm4gbmV3IHNj
X1Rva2VuKDMvKk9QRU5fQlJBQ0UqLyk7CisgICAgY2FzZSAifSI6CisJcmV0dXJuIG5ldyBzY19U
b2tlbig0LypDTE9TRV9CUkFDRSovKTsKKyAgICBjYXNlICJbIjoKKwlyZXR1cm4gbmV3IHNjX1Rv
a2VuKDUvKk9QRU5fQlJBQ0tFVCovKTsKKyAgICBjYXNlICJdIjoKKwlyZXR1cm4gbmV3IHNjX1Rv
a2VuKDYvKkNMT1NFX0JSQUNLRVQqLyk7CisgICAgY2FzZSAiJyI6CisJcmV0dXJuIG5ldyBzY19U
b2tlbig4LypRVU9URSovKTsKKyAgICBjYXNlICIjIjoKKwlyZXR1cm4gcmVhZFNoYXJwKCk7Cisg
ICAgY2FzZSAiLiI6CisJcmV0dXJuIHJlYWREb3QoKTsKKyAgICBjYXNlICciJzoKKwlyZXR1cm4g
cmVhZFN0cmluZygpOworICAgIGRlZmF1bHQ6CisJaWYgKGlzSWRPck51bWJlckNoYXIoY3VyQ2hh
cikpCisJICAgIHJldHVybiByZWFkSWRPck51bWJlcihjdXJDaGFyKTsKKwl0aHJvdyAidW5leHBl
Y3RlZCBjaGFyYWN0ZXI6ICIgKyBjdXJDaGFyOworICAgIH0KK307CisKK2Z1bmN0aW9uIHNjX1Jl
YWRlcih0b2tlbml6ZXIpIHsKKyAgICB0aGlzLnRva2VuaXplciA9IHRva2VuaXplcjsKKyAgICB0
aGlzLmJhY2tyZWYgPSBuZXcgQXJyYXkoKTsKK30KK3NjX1JlYWRlci5wcm90b3R5cGUucmVhZCA9
IGZ1bmN0aW9uKCkgeworICAgIGZ1bmN0aW9uIHJlYWRMaXN0KGxpc3RCZWdpblR5cGUpIHsKKwlm
dW5jdGlvbiBtYXRjaGVzUGVlcihvcGVuLCBjbG9zZSkgeworCSAgICByZXR1cm4gb3BlbiA9PT0g
MS8qT1BFTl9QQVIqLyAmJiBjbG9zZSA9PT0gMi8qQ0xPU0VfUEFSKi8KKwkgICAgCXx8IG9wZW4g
PT09IDMvKk9QRU5fQlJBQ0UqLyAmJiBjbG9zZSA9PT0gNC8qQ0xPU0VfQlJBQ0UqLworCQl8fCBv
cGVuID09PSA1LypPUEVOX0JSQUNLRVQqLyAmJiBjbG9zZSA9PT0gNi8qQ0xPU0VfQlJBQ0tFVCov
OworCX07CisJdmFyIHJlcyA9IG51bGw7CisKKwl3aGlsZSAodHJ1ZSkgeworCSAgICB2YXIgdG9r
ZW4gPSB0b2tlbml6ZXIucGVla1Rva2VuKCk7CisJICAgIAorCSAgICBzd2l0Y2ggKHRva2VuLnR5
cGUpIHsKKwkgICAgY2FzZSAyLypDTE9TRV9QQVIqLzoKKwkgICAgY2FzZSA0LypDTE9TRV9CUkFD
RSovOgorCSAgICBjYXNlIDYvKkNMT1NFX0JSQUNLRVQqLzoKKwkJaWYgKG1hdGNoZXNQZWVyKGxp
c3RCZWdpblR5cGUsIHRva2VuLnR5cGUpKSB7CisJCSAgICB0b2tlbml6ZXIucmVhZFRva2VuKCk7
IC8vIGNvbnN1bWUgdG9rZW4KKwkJICAgIHJldHVybiBzY19yZXZlcnNlQmFuZyhyZXMpOworCQl9
IGVsc2UKKwkJICAgIHRocm93ICJjbG9zaW5nIHBhciBkb2Vzbid0IG1hdGNoOiAiICsgbGlzdEJl
Z2luVHlwZQorCQkJKyAiICIgKyBsaXN0RW5kVHlwZTsKKworCSAgICBjYXNlIDAvKkVPRiovOgor
CQl0aHJvdyAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSI7CisKKwkgICAgY2FzZSAxMC8qRE9UKi86
CisJCXRva2VuaXplci5yZWFkVG9rZW4oKTsgLy8gY29uc3VtZSB0b2tlbgorCQl2YXIgY2RyID0g
dGhpcy5yZWFkKCk7CisJCXZhciBwYXIgPSB0b2tlbml6ZXIucmVhZFRva2VuKCk7CisJCWlmICgh
bWF0Y2hlc1BlZXIobGlzdEJlZ2luVHlwZSwgcGFyLnR5cGUpKQorCQkgICAgdGhyb3cgImNsb3Np
bmcgcGFyIGRvZXNuJ3QgbWF0Y2g6ICIgKyBsaXN0QmVnaW5UeXBlCisJCQkrICIgIiArIHBhci50
eXBlOworCQllbHNlCisJCSAgICByZXR1cm4gc2NfcmV2ZXJzZUFwcGVuZEJhbmcocmVzLCBjZHIp
OworCQkKKworCSAgICBkZWZhdWx0OgorCQlyZXMgPSBzY19jb25zKHRoaXMucmVhZCgpLCByZXMp
OworCSAgICB9CisJfQorICAgIH07CisgICAgZnVuY3Rpb24gcmVhZFF1b3RlKCkgeworCXJldHVy
biBzY19jb25zKCJxdW90ZSIsIHNjX2NvbnModGhpcy5yZWFkKCksIG51bGwpKTsKKyAgICB9Owor
ICAgIGZ1bmN0aW9uIHJlYWRWZWN0b3IoKSB7CisJLy8gb3BlbmluZy1wYXJlbnRoZXNpcyBpcyBh
bHJlYWR5IGNvbnN1bWVkCisJdmFyIGEgPSBuZXcgQXJyYXkoKTsKKwl3aGlsZSAodHJ1ZSkgewor
CSAgICB2YXIgdG9rZW4gPSB0b2tlbml6ZXIucGVla1Rva2VuKCk7CisJICAgIHN3aXRjaCAodG9r
ZW4udHlwZSkgeworCSAgICBjYXNlIDIvKkNMT1NFX1BBUiovOgorCQl0b2tlbml6ZXIucmVhZFRv
a2VuKCk7CisJCXJldHVybiBhOworCQkKKwkgICAgZGVmYXVsdDoKKwkJYS5wdXNoKHRoaXMucmVh
ZCgpKTsKKwkgICAgfQorCX0KKyAgICB9OworCisgICAgZnVuY3Rpb24gc3RvcmVSZWZlbmNlKG5i
KSB7CisJdmFyIHRtcCA9IHRoaXMucmVhZCgpOworCXRoaXMuYmFja3JlZltuYl0gPSB0bXA7CisJ
cmV0dXJuIHRtcDsKKyAgICB9OworCQorICAgIGZ1bmN0aW9uIHJlYWRSZWZlcmVuY2UobmIpIHsK
KwlpZiAobmIgaW4gdGhpcy5iYWNrcmVmKQorCSAgICByZXR1cm4gdGhpcy5iYWNrcmVmW25iXTsK
KwllbHNlCisJICAgIHRocm93ICJiYWQgcmVmZXJlbmNlOiAiICsgbmI7CisgICAgfTsKKyAgICAK
KyAgICB2YXIgdG9rZW5pemVyID0gdGhpcy50b2tlbml6ZXI7CisKKyAgICB2YXIgdG9rZW4gPSB0
b2tlbml6ZXIucmVhZFRva2VuKCk7CisKKyAgICAvLyBoYW5kbGUgZXJyb3IKKyAgICBpZiAodG9r
ZW4udHlwZSA9PT0gMTMvKkVSUk9SKi8pCisJdGhyb3cgdG9rZW4udmFsOworICAgIAorICAgIHN3
aXRjaCAodG9rZW4udHlwZSkgeworICAgIGNhc2UgMS8qT1BFTl9QQVIqLzoKKyAgICBjYXNlIDMv
Kk9QRU5fQlJBQ0UqLzoKKyAgICBjYXNlIDUvKk9QRU5fQlJBQ0tFVCovOgorCXJldHVybiByZWFk
TGlzdC5jYWxsKHRoaXMsIHRva2VuLnR5cGUpOworICAgIGNhc2UgOC8qUVVPVEUqLzoKKwlyZXR1
cm4gcmVhZFF1b3RlLmNhbGwodGhpcyk7CisgICAgY2FzZSAxMS8qU1RSSU5HKi86CisJcmV0dXJu
IHNjX2pzc3RyaW5nMnN0cmluZyh0b2tlbi52YWwpOworICAgIGNhc2UgMjAvKkNIQVIqLzoKKwly
ZXR1cm4gbmV3IHNjX0NoYXIodG9rZW4udmFsKTsKKyAgICBjYXNlIDE0LypWRUNUT1JfQkVHSU4q
LzoKKwlyZXR1cm4gcmVhZFZlY3Rvci5jYWxsKHRoaXMpOworICAgIGNhc2UgMTgvKlJFRkVSRU5D
RSovOgorCXJldHVybiByZWFkUmVmZXJlbmNlLmNhbGwodGhpcywgdG9rZW4udmFsKTsKKyAgICBj
YXNlIDE5LypTVE9SRSovOgorCXJldHVybiBzdG9yZVJlZmVuY2UuY2FsbCh0aGlzLCB0b2tlbi52
YWwpOworICAgIGNhc2UgOS8qSUQqLzoKKwlyZXR1cm4gc2NfanNzdHJpbmcyc3ltYm9sKHRva2Vu
LnZhbCk7CisgICAgY2FzZSAwLypFT0YqLzoKKyAgICBjYXNlIDEyLypOVU1CRVIqLzoKKyAgICBj
YXNlIDE1LypUUlVFKi86CisgICAgY2FzZSAxNi8qRkFMU0UqLzoKKyAgICBjYXNlIDE3LypVTlNQ
RUNJRklFRCovOgorCXJldHVybiB0b2tlbi52YWw7CisgICAgZGVmYXVsdDoKKwl0aHJvdyAidW5l
eHBlY3RlZCB0b2tlbiAiICsgdG9rZW4udHlwZSArICIgIiArIHRva2VuLnZhbDsKKyAgICB9Cit9
OworCisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLworZnVuY3Rpb24gc2NfcmVhZChwb3J0KSB7
CisgICAgaWYgKHBvcnQgPT09IHVuZGVmaW5lZCkgLy8gd2UgYXNzdW1lIHRoZSBwb3J0IGhhc24n
dCBiZWVuIGdpdmVuLgorCXBvcnQgPSBTQ19ERUZBVUxUX0lOOyAvLyBUSFJFQUQ6IHNoYXJlZCB2
YXIuLi4KKyAgICB2YXIgcmVhZGVyID0gbmV3IHNjX1JlYWRlcihuZXcgc2NfVG9rZW5pemVyKHBv
cnQpKTsKKyAgICByZXR1cm4gcmVhZGVyLnJlYWQoKTsKK30KKy8qKiogTUVUQSAoKGV4cG9ydCAj
dCkpICovCitmdW5jdGlvbiBzY19yZWFkQ2hhcihwb3J0KSB7CisgICAgaWYgKHBvcnQgPT09IHVu
ZGVmaW5lZCkgLy8gd2UgYXNzdW1lIHRoZSBwb3J0IGhhc24ndCBiZWVuIGdpdmVuLgorCXBvcnQg
PSBTQ19ERUZBVUxUX0lOOyAvLyBUSFJFQUQ6IHNoYXJlZCB2YXIuLi4KKyAgICB2YXIgdCA9IHBv
cnQucmVhZENoYXIoKTsKKyAgICByZXR1cm4gdCA9PT0gU0NfRU9GX09CSkVDVD8gdDogbmV3IHNj
X0NoYXIodCk7Cit9CisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLworZnVuY3Rpb24gc2NfcGVl
a0NoYXIocG9ydCkgeworICAgIGlmIChwb3J0ID09PSB1bmRlZmluZWQpIC8vIHdlIGFzc3VtZSB0
aGUgcG9ydCBoYXNuJ3QgYmVlbiBnaXZlbi4KKwlwb3J0ID0gU0NfREVGQVVMVF9JTjsgLy8gVEhS
RUFEOiBzaGFyZWQgdmFyLi4uCisgICAgdmFyIHQgPSBwb3J0LnBlZWtDaGFyKCk7CisgICAgcmV0
dXJuIHQgPT09IFNDX0VPRl9PQkpFQ1Q/IHQ6IG5ldyBzY19DaGFyKHQpOworfSAgICAKKy8qKiog
TUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHR5cGUgYm9vbCkpCisqLworZnVuY3Rpb24g
c2NfaXNDaGFyUmVhZHkocG9ydCkgeworICAgIGlmIChwb3J0ID09PSB1bmRlZmluZWQpIC8vIHdl
IGFzc3VtZSB0aGUgcG9ydCBoYXNuJ3QgYmVlbiBnaXZlbi4KKwlwb3J0ID0gU0NfREVGQVVMVF9J
TjsgLy8gVEhSRUFEOiBzaGFyZWQgdmFyLi4uCisgICAgcmV0dXJuIHBvcnQuaXNDaGFyUmVhZHko
KTsKK30KKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBob2xlIChwb3N0
Zml4ICIuY2xvc2UoKSIpKSkKKyovCitmdW5jdGlvbiBzY19jbG9zZUlucHV0UG9ydChwKSB7Cisg
ICAgcmV0dXJuIHAuY2xvc2UoKTsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAg
ICAgICAodHlwZSBib29sKQorICAgICAgICAgICAocGVlcGhvbGUgKHBvc3RmaXggIiBpbnN0YW5j
ZW9mIHNjX0lucHV0UG9ydCIpKSkKKyovCitmdW5jdGlvbiBzY19pc0lucHV0UG9ydChvKSB7Cisg
ICAgcmV0dXJuIChvIGluc3RhbmNlb2Ygc2NfSW5wdXRQb3J0KTsKK30KKworLyoqKiBNRVRBICgo
ZXhwb3J0IGVvZi1vYmplY3Q/KQorICAgICAgICAgICAodHlwZSBib29sKQorICAgICAgICAgICAo
cGVlcGhvbGUgKHBvc3RmaXggIiA9PT0gU0NfRU9GX09CSkVDVCIpKSkKKyovCitmdW5jdGlvbiBz
Y19pc0VPRk9iamVjdChvKSB7CisgICAgcmV0dXJuIG8gPT09IFNDX0VPRl9PQkpFQ1Q7Cit9CisK
Ky8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBob2xlIChob2xlIDAgIlND
X0RFRkFVTFRfSU4iKSkpCisqLworZnVuY3Rpb24gc2NfY3VycmVudElucHV0UG9ydCgpIHsKKyAg
ICByZXR1cm4gU0NfREVGQVVMVF9JTjsKK30KKworLyogLS0tLS0tLS0tLS0tIGZpbGUgb3BlcmF0
aW9ucyBhcmUgbm90IHN1cHBvcnRlZCAtLS0tLS0tLS0tLSovCisvKioqIE1FVEEgKChleHBvcnQg
I3QpKSAqLworZnVuY3Rpb24gc2NfY2FsbFdpdGhJbnB1dEZpbGUocywgcHJvYykgeworICAgIHRo
cm93ICJjYW4ndCBvcGVuICIgKyBzOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLwor
ZnVuY3Rpb24gc2NfY2FsbFdpdGhPdXRwdXRGaWxlKHMsIHByb2MpIHsKKyAgICB0aHJvdyAiY2Fu
J3Qgb3BlbiAiICsgczsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9u
IHNjX3dpdGhJbnB1dEZyb21GaWxlKHMsIHRodW5rKSB7CisgICAgdGhyb3cgImNhbid0IG9wZW4g
IiArIHM7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBzY193aXRo
T3V0cHV0VG9GaWxlKHMsIHRodW5rKSB7CisgICAgdGhyb3cgImNhbid0IG9wZW4gIiArIHM7Cit9
CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBzY19vcGVuSW5wdXRGaWxl
KHMpIHsKKyAgICB0aHJvdyAiY2FuJ3Qgb3BlbiAiICsgczsKK30KKworLyoqKiBNRVRBICgoZXhw
b3J0ICN0KSkgKi8KK2Z1bmN0aW9uIHNjX29wZW5PdXRwdXRGaWxlKHMpIHsKKyAgICB0aHJvdyAi
Y2FuJ3Qgb3BlbiAiICsgczsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKioqIE1F
VEEgKChleHBvcnQgI3QpKSAqLworZnVuY3Rpb24gc2NfYmFzZW5hbWUocCkgeworICAgdmFyIGkg
PSBwLmxhc3RJbmRleE9mKCcvJyk7CisKKyAgIGlmKGkgPj0gMCkKKyAgICAgIHJldHVybiBwLnN1
YnN0cmluZyhpICsgMSwgcC5sZW5ndGgpOworICAgZWxzZQorICAgICAgcmV0dXJuICcnOworfQor
CisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLworZnVuY3Rpb24gc2NfZGlybmFtZShwKSB7Cisg
ICB2YXIgaSA9IHAubGFzdEluZGV4T2YoJy8nKTsKKworICAgaWYoaSA+PSAwKQorICAgICAgcmV0
dXJuIHAuc3Vic3RyaW5nKDAsIGkpOworICAgZWxzZQorICAgICAgcmV0dXJuICcnOworfQorCisv
KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1
bmN0aW9uIHNjX3dpdGhJbnB1dEZyb21Qb3J0KHAsIHRodW5rKSB7CisgICAgdHJ5IHsKKwl2YXIg
dG1wID0gU0NfREVGQVVMVF9JTjsgLy8gVEhSRUFEOiBzaGFyZWQgdmFyLgorCVNDX0RFRkFVTFRf
SU4gPSBwOworCXJldHVybiB0aHVuaygpOworICAgIH0gZmluYWxseSB7CisJU0NfREVGQVVMVF9J
TiA9IHRtcDsKKyAgICB9Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCitmdW5jdGlv
biBzY193aXRoSW5wdXRGcm9tU3RyaW5nKHMsIHRodW5rKSB7CisgICAgcmV0dXJuIHNjX3dpdGhJ
bnB1dEZyb21Qb3J0KG5ldyBzY19TdHJpbmdJbnB1dFBvcnQoc2Nfc3RyaW5nMmpzc3RyaW5nKHMp
KSwgdGh1bmspOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLworZnVuY3Rpb24gc2Nf
d2l0aE91dHB1dFRvUG9ydChwLCB0aHVuaykgeworICAgIHRyeSB7CisJdmFyIHRtcCA9IFNDX0RF
RkFVTFRfT1VUOyAvLyBUSFJFQUQ6IHNoYXJlZCB2YXIuCisJU0NfREVGQVVMVF9PVVQgPSBwOwor
CXJldHVybiB0aHVuaygpOworICAgIH0gZmluYWxseSB7CisJU0NfREVGQVVMVF9PVVQgPSB0bXA7
CisgICAgfQorfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLworZnVuY3Rpb24gc2Nfd2l0
aE91dHB1dFRvU3RyaW5nKHRodW5rKSB7CisgICAgdmFyIHAgPSBuZXcgc2NfU3RyaW5nT3V0cHV0
UG9ydCgpOworICAgIHNjX3dpdGhPdXRwdXRUb1BvcnQocCwgdGh1bmspOworICAgIHJldHVybiBw
LmNsb3NlKCk7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBzY193
aXRoT3V0cHV0VG9Qcm9jZWR1cmUocHJvYywgdGh1bmspIHsKKyAgICB2YXIgdCA9IGZ1bmN0aW9u
KHMpIHsgcHJvYyhzY19qc3N0cmluZzJzdHJpbmcocykpOyB9OworICAgIHJldHVybiBzY193aXRo
T3V0cHV0VG9Qb3J0KG5ldyBzY19HZW5lcmljT3V0cHV0UG9ydCh0KSwgdGh1bmspOworfQorCisv
KioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAgIChwZWVwaG9sZSAoaG9sZSAwICJuZXcg
c2NfU3RyaW5nT3V0cHV0UG9ydCgpIikpKQorKi8KK2Z1bmN0aW9uIHNjX29wZW5PdXRwdXRTdHJp
bmcoKSB7CisgICAgcmV0dXJuIG5ldyBzY19TdHJpbmdPdXRwdXRQb3J0KCk7Cit9CisKKy8qKiog
TUVUQSAoKGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBzY19vcGVuSW5wdXRTdHJpbmcoc3RyKSB7
CisgICAgcmV0dXJuIG5ldyBzY19TdHJpbmdJbnB1dFBvcnQoc2Nfc3RyaW5nMmpzc3RyaW5nKHN0
cikpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworZnVuY3Rpb24gc2NfT3V0cHV0
UG9ydCgpIHsKK30KK3NjX091dHB1dFBvcnQucHJvdG90eXBlID0gbmV3IHNjX1BvcnQoKTsKK3Nj
X091dHB1dFBvcnQucHJvdG90eXBlLmFwcGVuZEpTU3RyaW5nID0gZnVuY3Rpb24ob2JqKSB7Cisg
ICAgLyogZG8gbm90aGluZyAqLworfQorc2NfT3V0cHV0UG9ydC5wcm90b3R5cGUuY2xvc2UgPSBm
dW5jdGlvbigpIHsKKyAgICAvKiBkbyBub3RoaW5nICovCit9CisKK2Z1bmN0aW9uIHNjX1N0cmlu
Z091dHB1dFBvcnQoKSB7CisgICAgdGhpcy5yZXMgPSAiIjsKK30KK3NjX1N0cmluZ091dHB1dFBv
cnQucHJvdG90eXBlID0gbmV3IHNjX091dHB1dFBvcnQoKTsKK3NjX1N0cmluZ091dHB1dFBvcnQu
cHJvdG90eXBlLmFwcGVuZEpTU3RyaW5nID0gZnVuY3Rpb24ocykgeworICAgIHRoaXMucmVzICs9
IHM7Cit9CitzY19TdHJpbmdPdXRwdXRQb3J0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkg
eworICAgIHJldHVybiBzY19qc3N0cmluZzJzdHJpbmcodGhpcy5yZXMpOworfQorCisvKioqIE1F
VEEgKChleHBvcnQgI3QpKSAqLworZnVuY3Rpb24gc2NfZ2V0T3V0cHV0U3RyaW5nKHNwKSB7Cisg
ICAgcmV0dXJuIHNjX2pzc3RyaW5nMnN0cmluZyhzcC5yZXMpOworfQorICAgIAorCitmdW5jdGlv
biBzY19FcnJvck91dHB1dFBvcnQoKSB7Cit9CitzY19FcnJvck91dHB1dFBvcnQucHJvdG90eXBl
ID0gbmV3IHNjX091dHB1dFBvcnQoKTsKK3NjX0Vycm9yT3V0cHV0UG9ydC5wcm90b3R5cGUuYXBw
ZW5kSlNTdHJpbmcgPSBmdW5jdGlvbihzKSB7CisgICAgdGhyb3cgImRvbid0IHdyaXRlIG9uIEVy
cm9yUG9ydCEiOworfQorc2NfRXJyb3JPdXRwdXRQb3J0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0
aW9uKCkgeworICAgIC8qIGRvIG5vdGhpbmcgKi8KK30KKworZnVuY3Rpb24gc2NfR2VuZXJpY091
dHB1dFBvcnQoYXBwZW5kSlNTdHJpbmcsIGNsb3NlKSB7CisgICAgdGhpcy5hcHBlbmRKU1N0cmlu
ZyA9IGFwcGVuZEpTU3RyaW5nOworICAgIGlmIChjbG9zZSkKKwl0aGlzLmNsb3NlID0gY2xvc2U7
Cit9CitzY19HZW5lcmljT3V0cHV0UG9ydC5wcm90b3R5cGUgPSBuZXcgc2NfT3V0cHV0UG9ydCgp
OworCisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAgICh0eXBlIGJvb2wpCisgICAg
ICAgICAgIChwZWVwaG9sZSAocG9zdGZpeCAiIGluc3RhbmNlb2Ygc2NfT3V0cHV0UG9ydCIpKSkK
KyovCitmdW5jdGlvbiBzY19pc091dHB1dFBvcnQobykgeworICAgIHJldHVybiAobyBpbnN0YW5j
ZW9mIHNjX091dHB1dFBvcnQpOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAg
ICAgIChwZWVwaG9sZSAocG9zdGZpeCAiLmNsb3NlKCkiKSkpCisqLworZnVuY3Rpb24gc2NfY2xv
c2VPdXRwdXRQb3J0KHApIHsKKyAgICByZXR1cm4gcC5jbG9zZSgpOworfQorCisvKiAtLS0tLS0t
LS0tLS0tLS0tLS0gd3JpdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKi8KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9uIHNj
X3dyaXRlKG8sIHApIHsKKyAgICBpZiAocCA9PT0gdW5kZWZpbmVkKSAvLyB3ZSBhc3N1bWUgbm90
IGdpdmVuCisJcCA9IFNDX0RFRkFVTFRfT1VUOworICAgIHAuYXBwZW5kSlNTdHJpbmcoc2NfdG9X
cml0ZVN0cmluZyhvKSk7Cit9CisKK2Z1bmN0aW9uIHNjX3RvV3JpdGVTdHJpbmcobykgeworICAg
IGlmIChvID09PSBudWxsKQorCXJldHVybiAiKCkiOworICAgIGVsc2UgaWYgKG8gPT09IHRydWUp
CisJcmV0dXJuICIjdCI7CisgICAgZWxzZSBpZiAobyA9PT0gZmFsc2UpCisJcmV0dXJuICIjZiI7
CisgICAgZWxzZSBpZiAobyA9PT0gdW5kZWZpbmVkKQorCXJldHVybiAiI3Vuc3BlY2lmaWVkIjsK
KyAgICBlbHNlIGlmICh0eXBlb2YgbyA9PT0gJ2Z1bmN0aW9uJykKKwlyZXR1cm4gIiM8cHJvY2Vk
dXJlICIgKyBzY19oYXNoKG8pICsgIj4iOworICAgIGVsc2UgaWYgKG8uc2NfdG9Xcml0ZVN0cmlu
ZykKKwlyZXR1cm4gby5zY190b1dyaXRlU3RyaW5nKCk7CisgICAgZWxzZQorCXJldHVybiBvLnRv
U3RyaW5nKCk7Cit9CisKK2Z1bmN0aW9uIHNjX2VzY2FwZVdyaXRlU3RyaW5nKHMpIHsKKyAgICB2
YXIgcmVzID0gIiI7CisgICAgdmFyIGogPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCBzLmxlbmd0
aDsgaSsrKSB7CisJc3dpdGNoIChzLmNoYXJBdChpKSkgeworCWNhc2UgIlwwIjogcmVzICs9IHMu
c3Vic3RyaW5nKGosIGkpICsgIlxcMCI7IGogPSBpICsgMTsgYnJlYWs7CisJY2FzZSAiXGIiOiBy
ZXMgKz0gcy5zdWJzdHJpbmcoaiwgaSkgKyAiXFxiIjsgaiA9IGkgKyAxOyBicmVhazsKKwljYXNl
ICJcZiI6IHJlcyArPSBzLnN1YnN0cmluZyhqLCBpKSArICJcXGYiOyBqID0gaSArIDE7IGJyZWFr
OworCWNhc2UgIlxuIjogcmVzICs9IHMuc3Vic3RyaW5nKGosIGkpICsgIlxcbiI7IGogPSBpICsg
MTsgYnJlYWs7CisJY2FzZSAiXHIiOiByZXMgKz0gcy5zdWJzdHJpbmcoaiwgaSkgKyAiXFxyIjsg
aiA9IGkgKyAxOyBicmVhazsKKwljYXNlICJcdCI6IHJlcyArPSBzLnN1YnN0cmluZyhqLCBpKSAr
ICJcXHQiOyBqID0gaSArIDE7IGJyZWFrOworCWNhc2UgIlx2IjogcmVzICs9IHMuc3Vic3RyaW5n
KGosIGkpICsgIlxcdiI7IGogPSBpICsgMTsgYnJlYWs7CisJY2FzZSAnIic6IHJlcyArPSBzLnN1
YnN0cmluZyhqLCBpKSArICdcXCInOyBqID0gaSArIDE7IGJyZWFrOworCWNhc2UgIlxcIjogcmVz
ICs9IHMuc3Vic3RyaW5nKGosIGkpICsgIlxcXFwiOyBqID0gaSArIDE7IGJyZWFrOworCWRlZmF1
bHQ6CisJICAgIHZhciBjID0gcy5jaGFyQXQoaSk7CisJICAgIGlmICgiXGEiICE9PSAiYSIgJiYg
YyA9PSAiXGEiKSB7CisJCXJlcyArPSBzLnN1YnN0cmluZyhqLCBpKSArICJcXGEiOyBqID0gaSAr
IDE7IGNvbnRpbnVlOworCSAgICB9CisJICAgIGlmICgiXHYiICE9PSAidiIgJiYgYyA9PSAiXHYi
KSB7CisJCXJlcyArPSBzLnN1YnN0cmluZyhqLCBpKSArICJcXHYiOyBqID0gaSArIDE7IGNvbnRp
bnVlOworCSAgICB9CisJICAgIC8vaWYgKHMuY2hhckF0KGkpIDwgJyAnIHx8IHMuY2hhckNvZGVB
dChpKSA+IDEyNykgeworCSAgICAvLyBDQVJFOiBNYW51ZWwgaXMgdGhpcyBPSyB3aXRoIEhPUD8K
KwkgICAgaWYgKHMuY2hhckF0KGkpIDwgJyAnKSB7CisJCS8qIG5vbiBwcmludGFibGUgY2hhcmFj
dGVyIGFuZCBzcGVjaWFsIGNoYXJzICovCisJCXJlcyArPSBzLnN1YnN0cmluZyhqLCBpKSArICJc
XHgiICsgcy5jaGFyQ29kZUF0KGkpLnRvU3RyaW5nKDE2KTsKKwkJaiA9IGkgKyAxOworCSAgICB9
CisJICAgIC8vIGVsc2UganVzdCBsZXQgaSBpbmNyZWFzZS4uLgorCX0KKyAgICB9CisgICAgcmVz
ICs9IHMuc3Vic3RyaW5nKGosIGkpOworICAgIHJldHVybiByZXM7Cit9CisKKy8qIC0tLS0tLS0t
LS0tLS0tLS0tLSBkaXNwbGF5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBz
Y19kaXNwbGF5KG8sIHApIHsKKyAgICBpZiAocCA9PT0gdW5kZWZpbmVkKSAvLyB3ZSBhc3N1bWUg
bm90IGdpdmVuCisJcCA9IFNDX0RFRkFVTFRfT1VUOworICAgIHAuYXBwZW5kSlNTdHJpbmcoc2Nf
dG9EaXNwbGF5U3RyaW5nKG8pKTsKK30KKworZnVuY3Rpb24gc2NfdG9EaXNwbGF5U3RyaW5nKG8p
IHsKKyAgICBpZiAobyA9PT0gbnVsbCkKKwlyZXR1cm4gIigpIjsKKyAgICBlbHNlIGlmIChvID09
PSB0cnVlKQorCXJldHVybiAiI3QiOworICAgIGVsc2UgaWYgKG8gPT09IGZhbHNlKQorCXJldHVy
biAiI2YiOworICAgIGVsc2UgaWYgKG8gPT09IHVuZGVmaW5lZCkKKwlyZXR1cm4gIiN1bnNwZWNp
ZmllZCI7CisgICAgZWxzZSBpZiAodHlwZW9mIG8gPT09ICdmdW5jdGlvbicpCisJcmV0dXJuICIj
PHByb2NlZHVyZSAiICsgc2NfaGFzaChvKSArICI+IjsKKyAgICBlbHNlIGlmIChvLnNjX3RvRGlz
cGxheVN0cmluZykKKwlyZXR1cm4gby5zY190b0Rpc3BsYXlTdHJpbmcoKTsKKyAgICBlbHNlCisJ
cmV0dXJuIG8udG9TdHJpbmcoKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tIG5ld2xpbmUg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwor
LyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9uIHNjX25ld2xpbmUocCkgeworICAg
IGlmIChwID09PSB1bmRlZmluZWQpIC8vIHdlIGFzc3VtZSBub3QgZ2l2ZW4KKwlwID0gU0NfREVG
QVVMVF9PVVQ7CisgICAgcC5hcHBlbmRKU1N0cmluZygiXG4iKTsKK30KKyAgICAKKy8qIC0tLS0t
LS0tLS0tLS0tLS0tLSB3cml0ZS1jaGFyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCitmdW5j
dGlvbiBzY193cml0ZUNoYXIoYywgcCkgeworICAgIGlmIChwID09PSB1bmRlZmluZWQpIC8vIHdl
IGFzc3VtZSBub3QgZ2l2ZW4KKwlwID0gU0NfREVGQVVMVF9PVVQ7CisgICAgcC5hcHBlbmRKU1N0
cmluZyhjLnZhbCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLSB3cml0ZS1jaXJjbGUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoq
KiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9uIHNjX3dyaXRlQ2lyY2xlKG8sIHApIHsK
KyAgICBpZiAocCA9PT0gdW5kZWZpbmVkKSAvLyB3ZSBhc3N1bWUgbm90IGdpdmVuCisJcCA9IFND
X0RFRkFVTFRfT1VUOworICAgIHAuYXBwZW5kSlNTdHJpbmcoc2NfdG9Xcml0ZUNpcmNsZVN0cmlu
ZyhvKSk7Cit9CisKK2Z1bmN0aW9uIHNjX3RvV3JpdGVDaXJjbGVTdHJpbmcobykgeworICAgIHZh
ciBzeW1iID0gc2NfZ2Vuc3ltKCJ3cml0ZUNpcmNsZSIpOworICAgIHZhciBuYlBvaW50ZXIgPSBu
ZXcgT2JqZWN0KCk7CisgICAgbmJQb2ludGVyLm5iID0gMDsKKyAgICBzY19wcmVwV3JpdGVDaXJj
bGUobywgc3ltYiwgbmJQb2ludGVyKTsKKyAgICByZXR1cm4gc2NfZ2VuVG9Xcml0ZUNpcmNsZVN0
cmluZyhvLCBzeW1iKTsKK30KKworZnVuY3Rpb24gc2NfcHJlcFdyaXRlQ2lyY2xlKG8sIHN5bWIs
IG5iUG9pbnRlcikgeworICAgIC8vIFRPRE8gc2NfU3RydWN0CisgICAgaWYgKG8gaW5zdGFuY2Vv
ZiBzY19QYWlyIHx8CisJbyBpbnN0YW5jZW9mIHNjX1ZlY3RvcikgeworCWlmIChvW3N5bWJdICE9
PSB1bmRlZmluZWQpIHsKKwkgICAgLy8gbm90IHRoZSBmaXJzdCB2aXNpdC4KKwkgICAgb1tzeW1i
XSsrOworCSAgICAvLyB1bmxlc3MgdGhlcmUgaXMgYWxyZWFkeSBhIG51bWJlciwgYXNzaWduIG9u
ZS4KKwkgICAgaWYgKCFvW3N5bWIgKyAibmIiXSkgb1tzeW1iICsgIm5iIl0gPSBuYlBvaW50ZXIu
bmIrKzsKKwkgICAgcmV0dXJuOworCX0KKwlvW3N5bWJdID0gMDsKKwlpZiAobyBpbnN0YW5jZW9m
IHNjX1BhaXIpIHsKKwkgICAgc2NfcHJlcFdyaXRlQ2lyY2xlKG8uY2FyLCBzeW1iLCBuYlBvaW50
ZXIpOworCSAgICBzY19wcmVwV3JpdGVDaXJjbGUoby5jZHIsIHN5bWIsIG5iUG9pbnRlcik7CisJ
fSBlbHNlIHsKKwkgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvLmxlbmd0aDsgaSsrKQorCQlzY19w
cmVwV3JpdGVDaXJjbGUob1tpXSwgc3ltYiwgbmJQb2ludGVyKTsKKwl9CisgICAgfQorfQorCitm
dW5jdGlvbiBzY19nZW5Ub1dyaXRlQ2lyY2xlU3RyaW5nKG8sIHN5bWIpIHsKKyAgICBpZiAoIShv
IGluc3RhbmNlb2Ygc2NfUGFpciB8fAorCSAgbyBpbnN0YW5jZW9mIHNjX1ZlY3RvcikpCisJcmV0
dXJuIHNjX3RvV3JpdGVTdHJpbmcobyk7CisgICAgcmV0dXJuIG8uc2NfdG9Xcml0ZUNpcmNsZVN0
cmluZyhzeW1iKTsKK30KK3NjX1BhaXIucHJvdG90eXBlLnNjX3RvV3JpdGVDaXJjbGVTdHJpbmcg
PSBmdW5jdGlvbihzeW1iLCBpbkxpc3QpIHsKKyAgICBpZiAodGhpc1tzeW1iICsgInVzZSJdKSB7
IC8vIHVzZS1mbGFnIGlzIHNldC4gSnVzdCB1c2UgaXQuCisJdmFyIG5iID0gdGhpc1tzeW1iICsg
Im5iIl07CisJaWYgKHRoaXNbc3ltYl0tLSA9PT0gMCkgeyAvLyBpZiB3ZSBhcmUgdGhlIGxhc3Qg
dXNlLiByZW1vdmUgYWxsIGZpZWxkcy4KKwkgICAgZGVsZXRlIHRoaXNbc3ltYl07CisJICAgIGRl
bGV0ZSB0aGlzW3N5bWIgKyAibmIiXTsKKwkgICAgZGVsZXRlIHRoaXNbc3ltYiArICJ1c2UiXTsK
Kwl9CisJaWYgKGluTGlzdCkKKwkgICAgcmV0dXJuICcuICMnICsgbmIgKyAnIyc7CisJZWxzZQor
CSAgICByZXR1cm4gJyMnICsgbmIgKyAnIyc7CisgICAgfQorICAgIGlmICh0aGlzW3N5bWJdLS0g
PT09IDApIHsgLy8gaWYgd2UgYXJlIHRoZSBsYXN0IHVzZS4gcmVtb3ZlIGFsbCBmaWVsZHMuCisJ
ZGVsZXRlIHRoaXNbc3ltYl07CisJZGVsZXRlIHRoaXNbc3ltYiArICJuYiJdOworCWRlbGV0ZSB0
aGlzW3N5bWIgKyAidXNlIl07CisgICAgfQorCisgICAgdmFyIHJlcyA9ICIiOworICAgIAorICAg
IGlmICh0aGlzW3N5bWJdICE9PSB1bmRlZmluZWQpIHsgLy8gaW1wbGllcyA+IDAKKwl0aGlzW3N5
bWIgKyAidXNlIl0gPSB0cnVlOworCWlmIChpbkxpc3QpCisJICAgIHJlcyArPSAnLiAjJyArIHRo
aXNbc3ltYiArICJuYiJdICsgJz0nOworCWVsc2UKKwkgICAgcmVzICs9ICcjJyArIHRoaXNbc3lt
YiArICJuYiJdICsgJz0nOworCWluTGlzdCA9IGZhbHNlOworICAgIH0KKworICAgIGlmICghaW5M
aXN0KQorCXJlcyArPSAiKCI7CisgICAgCisgICAgLy8gcHJpbnQgY2FyCisgICAgcmVzICs9IHNj
X2dlblRvV3JpdGVDaXJjbGVTdHJpbmcodGhpcy5jYXIsIHN5bWIpOworICAgIAorICAgIGlmIChz
Y19pc1BhaXIodGhpcy5jZHIpKSB7CisJcmVzICs9ICIgIiArIHRoaXMuY2RyLnNjX3RvV3JpdGVD
aXJjbGVTdHJpbmcoc3ltYiwgdHJ1ZSk7CisgICAgfSBlbHNlIGlmICh0aGlzLmNkciAhPT0gbnVs
bCkgeworCXJlcyArPSAiIC4gIiArIHNjX2dlblRvV3JpdGVDaXJjbGVTdHJpbmcodGhpcy5jZHIs
IHN5bWIpOworICAgIH0KKyAgICBpZiAoIWluTGlzdCkKKwlyZXMgKz0gIikiOworICAgIHJldHVy
biByZXM7Cit9Oworc2NfVmVjdG9yLnByb3RvdHlwZS5zY190b1dyaXRlQ2lyY2xlU3RyaW5nID0g
ZnVuY3Rpb24oc3ltYikgeworICAgIGlmICh0aGlzW3N5bWIgKyAidXNlIl0pIHsgLy8gdXNlLWZs
YWcgaXMgc2V0LiBKdXN0IHVzZSBpdC4KKwl2YXIgbmIgPSB0aGlzW3N5bWIgKyAibmIiXTsKKwlp
ZiAodGhpc1tzeW1iXS0tID09PSAwKSB7IC8vIGlmIHdlIGFyZSB0aGUgbGFzdCB1c2UuIHJlbW92
ZSBhbGwgZmllbGRzLgorCSAgICBkZWxldGUgdGhpc1tzeW1iXTsKKwkgICAgZGVsZXRlIHRoaXNb
c3ltYiArICJuYiJdOworCSAgICBkZWxldGUgdGhpc1tzeW1iICsgInVzZSJdOworCX0KKwlyZXR1
cm4gJyMnICsgbmIgKyAnIyc7CisgICAgfQorICAgIGlmICh0aGlzW3N5bWJdLS0gPT09IDApIHsg
Ly8gaWYgd2UgYXJlIHRoZSBsYXN0IHVzZS4gcmVtb3ZlIGFsbCBmaWVsZHMuCisJZGVsZXRlIHRo
aXNbc3ltYl07CisJZGVsZXRlIHRoaXNbc3ltYiArICJuYiJdOworCWRlbGV0ZSB0aGlzW3N5bWIg
KyAidXNlIl07CisgICAgfQorCisgICAgdmFyIHJlcyA9ICIiOworICAgIGlmICh0aGlzW3N5bWJd
ICE9PSB1bmRlZmluZWQpIHsgLy8gaW1wbGllcyA+IDAKKwl0aGlzW3N5bWIgKyAidXNlIl0gPSB0
cnVlOworCXJlcyArPSAnIycgKyB0aGlzW3N5bWIgKyAibmIiXSArICc9JzsKKyAgICB9CisgICAg
cmVzICs9ICIjKCI7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7
CisJcmVzICs9IHNjX2dlblRvV3JpdGVDaXJjbGVTdHJpbmcodGhpc1tpXSwgc3ltYik7CisJaWYg
KGkgPCB0aGlzLmxlbmd0aCAtIDEpIHJlcyArPSAiICI7CisgICAgfQorICAgIHJlcyArPSAiKSI7
CisgICAgcmV0dXJuIHJlczsKK307CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tIHByaW50IC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8q
KiogTUVUQSAoKGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBzY19wcmludChzKSB7CisgICAgaWYg
KGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHsKKwlzY19kaXNwbGF5KHMpOworCXNjX25ld2xpbmUo
KTsKKyAgICB9CisgICAgZWxzZSB7CisJZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVu
Z3RoOyBpKyspCisJICAgIHNjX2Rpc3BsYXkoYXJndW1lbnRzW2ldKTsKKwlzY19uZXdsaW5lKCk7
CisgICAgfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0gZm9ybWF0IC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKioqIE1FVEEgKChleHBv
cnQgI3QpKSAqLworZnVuY3Rpb24gc2NfZm9ybWF0KHMsIGFyZ3MpIHsKKyAgIHZhciBsZW4gPSBz
Lmxlbmd0aDsKKyAgIHZhciBwID0gbmV3IHNjX1N0cmluZ091dHB1dFBvcnQoKTsKKyAgIHZhciBp
ID0gMCwgaiA9IDE7CisKKyAgIHdoaWxlKCBpIDwgbGVuICkgeworICAgICAgdmFyIGkyID0gcy5p
bmRleE9mKCJ+IiwgaSk7CisKKyAgICAgIGlmIChpMiA9PSAtMSkgeworCSAgcC5hcHBlbmRKU1N0
cmluZyggcy5zdWJzdHJpbmcoIGksIGxlbiApICk7CisJICByZXR1cm4gcC5jbG9zZSgpOworICAg
ICAgfSBlbHNlIHsKKwkgaWYgKGkyID4gaSkgeworCSAgICBpZiAoaTIgPT0gKGxlbiAtIDEpKSB7
CisJCXAuYXBwZW5kSlNTdHJpbmcocy5zdWJzdHJpbmcoaSwgbGVuKSk7CisJCXJldHVybiBwLmNs
b3NlKCk7CisJICAgIH0gZWxzZSB7CisJICAgICAgIHAuYXBwZW5kSlNTdHJpbmcocy5zdWJzdHJp
bmcoaSwgaTIpKTsKKwkgICAgICAgaSA9IGkyOworCSAgICB9CisJIH0KKworCSBzd2l0Y2gocy5j
aGFyQ29kZUF0KGkyICsgMSkpIHsKKwkgICAgY2FzZSA2NToKKwkgICAgY2FzZSA5NzoKKwkgICAg
ICAgLy8gYQorCSAgICAgICBzY19kaXNwbGF5KGFyZ3VtZW50c1tqXSwgcCk7CisJICAgICAgIGkg
Kz0gMjsgaisrOworCSAgICAgICBicmVhazsKKworCSAgICBjYXNlIDgzOgorCSAgICBjYXNlIDEx
NToKKwkgICAgICAgLy8gcworCSAgICAgICBzY193cml0ZShhcmd1bWVudHNbal0sIHApOworCSAg
ICAgICBpICs9IDI7IGorKzsKKwkgICAgICAgYnJlYWs7CisKKwkgICAgY2FzZSA4NjoKKwkgICAg
Y2FzZSAxMTg6CisJICAgICAgIC8vIHYKKwkgICAgICAgc2NfZGlzcGxheShhcmd1bWVudHNbal0s
IHApOworCSAgICAgICBwLmFwcGVuZEpTU3RyaW5nKCJcbiIpOworCSAgICAgICBpICs9IDI7IGor
KzsKKwkgICAgICAgYnJlYWs7CisKKwkgICAgY2FzZSA2NzoKKwkgICAgY2FzZSA5OToKKwkgICAg
ICAgLy8gYworCSAgICAgICBwLmFwcGVuZEpTU3RyaW5nKFN0cmluZy5mcm9tQ2hhckNvZGUoYXJn
dW1lbnRzW2pdKSk7CisJICAgICAgIGkgKz0gMjsgaisrOworCSAgICAgICBicmVhazsKKworCSAg
ICBjYXNlIDg4OgorCSAgICBjYXNlIDEyMDoKKwkgICAgICAgLy8geAorCSAgICAgICBwLmFwcGVu
ZEpTU3RyaW5nKGFyZ3VtZW50c1tqXS50b1N0cmluZyg2KSk7CisJICAgICAgIGkgKz0gMjsgaisr
OworCSAgICAgICBicmVhazsKKworCSAgICBjYXNlIDc5OgorCSAgICBjYXNlIDExMToKKwkgICAg
ICAgLy8gbworCSAgICAgICBwLmFwcGVuZEpTU3RyaW5nKGFyZ3VtZW50c1tqXS50b1N0cmluZyg4
KSk7CisJICAgICAgIGkgKz0gMjsgaisrOworCSAgICAgICBicmVhazsKKworCSAgICBjYXNlIDY2
OgorCSAgICBjYXNlIDk4OgorCSAgICAgICAvLyBiCisJICAgICAgIHAuYXBwZW5kSlNTdHJpbmco
YXJndW1lbnRzW2pdLnRvU3RyaW5nKDIpKTsKKwkgICAgICAgaSArPSAyOyBqKys7CisJICAgICAg
IGJyZWFrOworCSAgICAgICAKKwkgICAgY2FzZSAzNzoKKwkgICAgY2FzZSAxMTA6CisJICAgICAg
IC8vICUsIG4KKwkgICAgICAgcC5hcHBlbmRKU1N0cmluZygiXG4iKTsKKwkgICAgICAgaSArPSAy
OyBicmVhazsKKworCSAgICBjYXNlIDExNDoKKwkgICAgICAgLy8gcgorCSAgICAgICBwLmFwcGVu
ZEpTU3RyaW5nKCJcciIpOworCSAgICAgICBpICs9IDI7IGJyZWFrOworCisJICAgIGNhc2UgMTI2
OgorCSAgICAgICAvLyB+CisJICAgICAgIHAuYXBwZW5kSlNTdHJpbmcoIn4iKTsKKwkgICAgICAg
aSArPSAyOyBicmVhazsKKworCSAgICBkZWZhdWx0OgorCSAgICAgICBzY19lcnJvciggImZvcm1h
dDogaWxsZWdhbCB+IgorCQkJICsgU3RyaW5nLmZyb21DaGFyQ29kZShzLmNoYXJDb2RlQXQoaTIg
KyAxKSkKKwkJCSArICIgc2VxdWVuY2UiICk7CisJICAgICAgIHJldHVybiAiIjsKKwkgfQorICAg
ICAgfQorICAgfQorCisgICByZXR1cm4gcC5jbG9zZSgpOworfQorCisvKiAtLS0tLS0tLS0tLS0t
LS0tLS0gZ2xvYmFsIHBvcnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCisKK3ZhciBTQ19ERUZBVUxUX0lOID0gbmV3IHNjX0Vycm9ySW5wdXRQ
b3J0KCk7Cit2YXIgU0NfREVGQVVMVF9PVVQgPSBuZXcgc2NfRXJyb3JPdXRwdXRQb3J0KCk7Cit2
YXIgU0NfRVJST1JfT1VUID0gbmV3IHNjX0Vycm9yT3V0cHV0UG9ydCgpOworCit2YXIgc2NfU1lN
Qk9MX1BSRUZJWCA9ICJcdTFFOUMiOwordmFyIHNjX0tFWVdPUkRfUFJFRklYID0gIlx1MUU5RCI7
CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBob2xlIChpZCkpKSAq
LworZnVuY3Rpb24gc2NfanNzdHJpbmcyc3RyaW5nKHMpIHsKKyAgICByZXR1cm4gczsKK30KKwor
LyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAocGVlcGhvbGUgKHByZWZpeCAiJ1xc
dTFFOUMnICsiKSkpCisqLworZnVuY3Rpb24gc2NfanNzdHJpbmcyc3ltYm9sKHMpIHsKKyAgICBy
ZXR1cm4gc2NfU1lNQk9MX1BSRUZJWCArIHM7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkK
KyAgICAgICAgICAgKHBlZXBob2xlIChpZCkpKQorKi8KK2Z1bmN0aW9uIHNjX3N0cmluZzJqc3N0
cmluZyhzKSB7CisgICAgcmV0dXJuIHM7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAg
ICAgICAgICAgKHBlZXBob2xlIChzeW1ib2wyanNzdHJpbmdfaW1tdXRhYmxlKSkpCisqLworZnVu
Y3Rpb24gc2Nfc3ltYm9sMmpzc3RyaW5nKHMpIHsKKyAgICByZXR1cm4gcy5zbGljZSgxKTsKK30K
KworLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAocGVlcGhvbGUgKHBvc3RmaXgg
Ii5zbGljZSgxKSIpKSkKKyovCitmdW5jdGlvbiBzY19rZXl3b3JkMmpzc3RyaW5nKGspIHsKKyAg
ICByZXR1cm4gay5zbGljZSgxKTsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAg
ICAgICAocGVlcGhvbGUgKHByZWZpeCAiJ1xcdTFFOUQnICsiKSkpCisqLworZnVuY3Rpb24gc2Nf
anNzdHJpbmcya2V5d29yZChzKSB7CisgICAgcmV0dXJuIHNjX0tFWVdPUkRfUFJFRklYICsgczsK
K30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAodHlwZSBib29sKSkKKyov
CitmdW5jdGlvbiBzY19pc0tleXdvcmQocykgeworICAgIHJldHVybiAodHlwZW9mIHMgPT09ICJz
dHJpbmciKSAmJgorCShzLmNoYXJBdCgwKSA9PT0gc2NfS0VZV09SRF9QUkVGSVgpOworfQorCisK
Ky8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCit2YXIgc2NfZ2Vuc3ltID0gZnVuY3Rpb24oKSB7
CisgICAgdmFyIGNvdW50ZXIgPSAxMDAwOworICAgIHJldHVybiBmdW5jdGlvbihzeW0pIHsKKwlj
b3VudGVyKys7CisJaWYgKCFzeW0pIHN5bSA9IHNjX1NZTUJPTF9QUkVGSVg7CisJcmV0dXJuIHN5
bSArICJzIiArIGNvdW50ZXIgKyAifiIgKyAiXnNDLUdlTnNZbSAiOworICAgIH07Cit9KCk7CisK
KworLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAodHlwZSBib29sKSkKKyovCitm
dW5jdGlvbiBzY19pc0VxdWFsKG8xLCBvMikgeworICAgIHJldHVybiAoKG8xID09PSBvMikgfHwK
KwkgICAgKHNjX2lzUGFpcihvMSkgJiYgc2NfaXNQYWlyKG8yKQorCSAgICAgJiYgc2NfaXNQYWly
RXF1YWwobzEsIG8yLCBzY19pc0VxdWFsKSkgfHwKKwkgICAgKHNjX2lzVmVjdG9yKG8xKSAmJiBz
Y19pc1ZlY3RvcihvMikKKwkgICAgICYmIHNjX2lzVmVjdG9yRXF1YWwobzEsIG8yLCBzY19pc0Vx
dWFsKSkpOworfQorCisvKioqIE1FVEEgKChleHBvcnQgbnVtYmVyLT5zeW1ib2wgaW50ZWdlci0+
c3ltYm9sKSkgKi8KK2Z1bmN0aW9uIHNjX251bWJlcjJzeW1ib2woeCwgcmFkaXgpIHsKKyAgICBy
ZXR1cm4gc2NfU1lNQk9MX1BSRUZJWCArIHNjX251bWJlcjJqc3N0cmluZyh4LCByYWRpeCk7Cit9
CisgICAgCisvKioqIE1FVEEgKChleHBvcnQgbnVtYmVyLT5zdHJpbmcgaW50ZWdlci0+c3RyaW5n
KSkgKi8KK3ZhciBzY19udW1iZXIyc3RyaW5nID0gc2NfbnVtYmVyMmpzc3RyaW5nOworCisvKioq
IE1FVEEgKChleHBvcnQgI3QpKSAqLworZnVuY3Rpb24gc2Nfc3ltYm9sMm51bWJlcihzLCByYWRp
eCkgeworICAgIHJldHVybiBzY19qc3N0cmluZzJudW1iZXIocy5zbGljZSgxKSwgcmFkaXgpOwor
fQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLwordmFyIHNjX3N0cmluZzJudW1iZXIgPSBz
Y19qc3N0cmluZzJudW1iZXI7CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAg
KHBlZXBob2xlIChwcmVmaXggIisiIHMpKSkKKyAgICAgICAgICAgOzsgcGVlcGhvbGUgd2lsbCBv
bmx5IGFwcGx5IGlmIG5vIHJhZGl4IGlzIGdpdmVuLgorKi8KK2Z1bmN0aW9uIHNjX3N0cmluZzJp
bnRlZ2VyKHMsIHJhZGl4KSB7CisgICAgaWYgKCFyYWRpeCkgcmV0dXJuICtzOworICAgIHJldHVy
biBwYXJzZUludChzLCByYWRpeCk7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAg
ICAgICAgKHBlZXBob2xlIChwcmVmaXggIisiKSkpCisqLworZnVuY3Rpb24gc2Nfc3RyaW5nMnJl
YWwocykgeworICAgIHJldHVybiArczsKK30KKworCisvKioqIE1FVEEgKChleHBvcnQgI3QpCisg
ICAgICAgICAgICh0eXBlIGJvb2wpKQorKi8KK2Z1bmN0aW9uIHNjX2lzU3ltYm9sKHMpIHsKKyAg
ICByZXR1cm4gKHR5cGVvZiBzID09PSAic3RyaW5nIikgJiYKKwkocy5jaGFyQXQoMCkgPT09IHNj
X1NZTUJPTF9QUkVGSVgpOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAg
IChwZWVwaG9sZSAoc3ltYm9sMnN0cmluZ19pbW11dGFibGUpKSkKKyovCitmdW5jdGlvbiBzY19z
eW1ib2wyc3RyaW5nKHMpIHsKKyAgICByZXR1cm4gcy5zbGljZSgxKTsKK30KKworLyoqKiBNRVRB
ICgoZXhwb3J0ICN0KQorICAgICAgICAgICAocGVlcGhvbGUgKHByZWZpeCAiJ1xcdTFFOUMnICsi
KSkpCisqLworZnVuY3Rpb24gc2Nfc3RyaW5nMnN5bWJvbChzKSB7CisgICAgcmV0dXJuIHNjX1NZ
TUJPTF9QUkVGSVggKyBzOworfQorCisvKioqIE1FVEEgKChleHBvcnQgc3ltYm9sLWFwcGVuZCkK
KyAgICAgICAgICAgKHBlZXBob2xlIChzeW1ib2xBcHBlbmRfaW1tdXRhYmxlKSkpCisqLworZnVu
Y3Rpb24gc2Nfc3ltYm9sQXBwZW5kKCkgeworICAgIHZhciByZXMgPSBzY19TWU1CT0xfUFJFRklY
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKQorCXJlcyAr
PSBhcmd1bWVudHNbaV0uc2xpY2UoMSk7CisgICAgcmV0dXJuIHJlczsKK30KKworLyoqKiBNRVRB
ICgoZXhwb3J0ICN0KQorICAgICAgICAgICAocGVlcGhvbGUgKHBvc3RmaXggIi52YWwiKSkpCisq
LworZnVuY3Rpb24gc2NfY2hhcjJzdHJpbmcoYykgeyByZXR1cm4gYy52YWw7IH0KKworLyoqKiBN
RVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAocGVlcGhvbGUgKGhvbGUgMSAiJ1xcdTFFOUMn
ICsgIiBjICIudmFsIikpKQorKi8KK2Z1bmN0aW9uIHNjX2NoYXIyc3ltYm9sKGMpIHsgcmV0dXJu
IHNjX1NZTUJPTF9QUkVGSVggKyBjLnZhbDsgfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpCisg
ICAgICAgICAgICh0eXBlIGJvb2wpKQorKi8KK2Z1bmN0aW9uIHNjX2lzU3RyaW5nKHMpIHsKKyAg
ICByZXR1cm4gKHR5cGVvZiBzID09PSAic3RyaW5nIikgJiYKKwkocy5jaGFyQXQoMCkgIT09IHNj
X1NZTUJPTF9QUkVGSVgpOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLwordmFyIHNj
X21ha2VTdHJpbmcgPSBzY19tYWtlanNTdHJpbmc7CisKKworLyoqKiBNRVRBICgoZXhwb3J0ICN0
KSkgKi8KK2Z1bmN0aW9uIHNjX3N0cmluZygpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFy
Z3VtZW50cy5sZW5ndGg7IGkrKykKKwlhcmd1bWVudHNbaV0gPSBhcmd1bWVudHNbaV0udmFsOwor
ICAgIHJldHVybiAiIi5jb25jYXQuYXBwbHkoIiIsIGFyZ3VtZW50cyk7Cit9CisKKy8qKiogTUVU
QSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBob2xlIChwb3N0Zml4ICIubGVuZ3RoIikp
KQorKi8KK2Z1bmN0aW9uIHNjX3N0cmluZ0xlbmd0aChzKSB7IHJldHVybiBzLmxlbmd0aDsgfQor
CisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLworZnVuY3Rpb24gc2Nfc3RyaW5nUmVmKHMsIGsp
IHsKKyAgICByZXR1cm4gbmV3IHNjX0NoYXIocy5jaGFyQXQoaykpOworfQorCisvKiB0aGVyZSdz
IG5vIHN0cmluZ1NldCBpbiB0aGUgaW1tdXRhYmxlIHZlcnNpb24KK2Z1bmN0aW9uIHNjX3N0cmlu
Z1NldChzLCBrLCBjKQorKi8KKworCisvKioqIE1FVEEgKChleHBvcnQgc3RyaW5nPT8pCisJICAg
KHR5cGUgYm9vbCkKKyAgICAgICAgICAgKHBlZXBob2xlIChob2xlIDIgc3RyMSAiID09PSAiIHN0
cjIpKSkKKyovCitmdW5jdGlvbiBzY19pc1N0cmluZ0VxdWFsKHMxLCBzMikgeworICAgIHJldHVy
biBzMSA9PT0gczI7Cit9CisvKioqIE1FVEEgKChleHBvcnQgc3RyaW5nPD8pCisJICAgKHR5cGUg
Ym9vbCkKKyAgICAgICAgICAgKHBlZXBob2xlIChob2xlIDIgc3RyMSAiIDwgIiBzdHIyKSkpCisq
LworZnVuY3Rpb24gc2NfaXNTdHJpbmdMZXNzKHMxLCBzMikgeworICAgIHJldHVybiBzMSA8IHMy
OworfQorLyoqKiBNRVRBICgoZXhwb3J0IHN0cmluZz4/KQorCSAgICh0eXBlIGJvb2wpCisgICAg
ICAgICAgIChwZWVwaG9sZSAoaG9sZSAyIHN0cjEgIiA+ICIgc3RyMikpKQorKi8KK2Z1bmN0aW9u
IHNjX2lzU3RyaW5nR3JlYXRlcihzMSwgczIpIHsKKyAgICByZXR1cm4gczEgPiBzMjsKK30KKy8q
KiogTUVUQSAoKGV4cG9ydCBzdHJpbmc8PT8pCisJICAgKHR5cGUgYm9vbCkKKyAgICAgICAgICAg
KHBlZXBob2xlIChob2xlIDIgc3RyMSAiIDw9ICIgc3RyMikpKQorKi8KK2Z1bmN0aW9uIHNjX2lz
U3RyaW5nTGVzc0VxdWFsKHMxLCBzMikgeworICAgIHJldHVybiBzMSA8PSBzMjsKK30KKy8qKiog
TUVUQSAoKGV4cG9ydCBzdHJpbmc+PT8pCisJICAgKHR5cGUgYm9vbCkKKyAgICAgICAgICAgKHBl
ZXBob2xlIChob2xlIDIgc3RyMSAiID49ICIgc3RyMikpKQorKi8KK2Z1bmN0aW9uIHNjX2lzU3Ry
aW5nR3JlYXRlckVxdWFsKHMxLCBzMikgeworICAgIHJldHVybiBzMSA+PSBzMjsKK30KKy8qKiog
TUVUQSAoKGV4cG9ydCBzdHJpbmctY2k9PykKKwkgICAodHlwZSBib29sKQorICAgICAgICAgICAo
cGVlcGhvbGUgKGhvbGUgMiBzdHIxICIudG9Mb3dlckNhc2UoKSA9PT0gIiBzdHIyICIudG9Mb3dl
ckNhc2UoKSIpKSkKKyovCitmdW5jdGlvbiBzY19pc1N0cmluZ0NJRXF1YWwoczEsIHMyKSB7Cisg
ICAgcmV0dXJuIHMxLnRvTG93ZXJDYXNlKCkgPT09IHMyLnRvTG93ZXJDYXNlKCk7Cit9CisvKioq
IE1FVEEgKChleHBvcnQgc3RyaW5nLWNpPD8pCisJICAgKHR5cGUgYm9vbCkKKyAgICAgICAgICAg
KHBlZXBob2xlIChob2xlIDIgc3RyMSAiLnRvTG93ZXJDYXNlKCkgPCAiIHN0cjIgIi50b0xvd2Vy
Q2FzZSgpIikpKQorKi8KK2Z1bmN0aW9uIHNjX2lzU3RyaW5nQ0lMZXNzKHMxLCBzMikgeworICAg
IHJldHVybiBzMS50b0xvd2VyQ2FzZSgpIDwgczIudG9Mb3dlckNhc2UoKTsKK30KKy8qKiogTUVU
QSAoKGV4cG9ydCBzdHJpbmctY2k+PykKKwkgICAodHlwZSBib29sKQorICAgICAgICAgICAocGVl
cGhvbGUgKGhvbGUgMiBzdHIxICIudG9Mb3dlckNhc2UoKSA+ICIgc3RyMiAiLnRvTG93ZXJDYXNl
KCkiKSkpCisqLworZnVuY3Rpb24gc2NfaXNTdHJpbmdDSUdyZWF0ZXIoczEsIHMyKSB7CisgICAg
cmV0dXJuIHMxLnRvTG93ZXJDYXNlKCkgPiBzMi50b0xvd2VyQ2FzZSgpOworfQorLyoqKiBNRVRB
ICgoZXhwb3J0IHN0cmluZy1jaTw9PykKKwkgICAodHlwZSBib29sKQorICAgICAgICAgICAocGVl
cGhvbGUgKGhvbGUgMiBzdHIxICIudG9Mb3dlckNhc2UoKSA8PSAiIHN0cjIgIi50b0xvd2VyQ2Fz
ZSgpIikpKQorKi8KK2Z1bmN0aW9uIHNjX2lzU3RyaW5nQ0lMZXNzRXF1YWwoczEsIHMyKSB7Cisg
ICAgcmV0dXJuIHMxLnRvTG93ZXJDYXNlKCkgPD0gczIudG9Mb3dlckNhc2UoKTsKK30KKy8qKiog
TUVUQSAoKGV4cG9ydCBzdHJpbmctY2k+PT8pCisJICAgKHR5cGUgYm9vbCkKKyAgICAgICAgICAg
KHBlZXBob2xlIChob2xlIDIgc3RyMSAiLnRvTG93ZXJDYXNlKCkgPj0gIiBzdHIyICIudG9Mb3dl
ckNhc2UoKSIpKSkKKyovCitmdW5jdGlvbiBzY19pc1N0cmluZ0NJR3JlYXRlckVxdWFsKHMxLCBz
MikgeworICAgIHJldHVybiBzMS50b0xvd2VyQ2FzZSgpID49IHMyLnRvTG93ZXJDYXNlKCk7Cit9
CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBob2xlIChob2xlIDMg
cyAiLnN1YnN0cmluZygiIHN0YXJ0ICIsICIgZW5kICIpIikpKQorKi8KK2Z1bmN0aW9uIHNjX3N1
YnN0cmluZyhzLCBzdGFydCwgZW5kKSB7CisgICAgcmV0dXJuIHMuc3Vic3RyaW5nKHN0YXJ0LCBl
bmQpOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpKQorKi8KK2Z1bmN0aW9uIHNjX2lzU3Vi
c3RyaW5nX2F0KHMxLCBzMiwgaSkgeworICAgIHJldHVybiBzMiA9PSBzMS5zdWJzdHJpbmcoaSwg
aSsgczIubGVuZ3RoKTsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAo
cGVlcGhvbGUgKGluZml4IDAgI2YgIisiICInJyIpKSkKKyovCitmdW5jdGlvbiBzY19zdHJpbmdB
cHBlbmQoKSB7CisgICAgcmV0dXJuICIiLmNvbmNhdC5hcHBseSgiIiwgYXJndW1lbnRzKTsKK30K
KworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK3ZhciBzY19zdHJpbmcybGlzdCA9IHNjX2pz
c3RyaW5nMmxpc3Q7CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCit2YXIgc2NfbGlzdDJz
dHJpbmcgPSBzY19saXN0Mmpzc3RyaW5nOworCisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAg
ICAgICAgIChwZWVwaG9sZSAoaWQpKSkKKyovCitmdW5jdGlvbiBzY19zdHJpbmdDb3B5KHMpIHsK
KyAgICByZXR1cm4gczsKK30KKworLyogdGhlcmUncyBubyBzdHJpbmctZmlsbCBpbiB0aGUgaW1t
dXRhYmxlIHZlcnNpb24KK2Z1bmN0aW9uIHNjX3N0cmluZ0ZpbGwocywgYykKKyovCisKKy8qKiog
TUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBob2xlIChwb3N0Zml4ICIuc2xpY2Uo
MSkiKSkpCisqLworZnVuY3Rpb24gc2Nfa2V5d29yZDJzdHJpbmcobykgeworICAgIHJldHVybiBv
LnNsaWNlKDEpOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAgIChwZWVw
aG9sZSAocHJlZml4ICInXFx1MUU5RCcgKyIpKSkKKyovCitmdW5jdGlvbiBzY19zdHJpbmcya2V5
d29yZChvKSB7CisgICAgcmV0dXJuIHNjX0tFWVdPUkRfUFJFRklYICsgbzsKK30KKworU3RyaW5n
LnByb3RvdHlwZS5zY190b0Rpc3BsYXlTdHJpbmcgPSBmdW5jdGlvbigpIHsKKyAgICBpZiAodGhp
cy5jaGFyQXQoMCkgPT09IHNjX1NZTUJPTF9QUkVGSVgpCisJLy8gVE9ETzogY2FyZSBmb3Igc3lt
Ym9scyB3aXRoIHNwYWNlcyAoZXNjYXBlLWNoYXJzIHN5bWJvbHMpLgorCXJldHVybiB0aGlzLnNs
aWNlKDEpOworICAgIGVsc2UgaWYgKHRoaXMuY2hhckF0KDApID09PSBzY19LRVlXT1JEX1BSRUZJ
WCkKKwlyZXR1cm4gIjoiICsgdGhpcy5zbGljZSgxKTsKKyAgICBlbHNlCisJcmV0dXJuIHRoaXMu
dG9TdHJpbmcoKTsKK307CisKK1N0cmluZy5wcm90b3R5cGUuc2NfdG9Xcml0ZVN0cmluZyA9IGZ1
bmN0aW9uKCkgeworICAgIGlmICh0aGlzLmNoYXJBdCgwKSA9PT0gc2NfU1lNQk9MX1BSRUZJWCkK
KwkvLyBUT0RPOiBjYXJlIGZvciBzeW1ib2xzIHdpdGggc3BhY2VzIChlc2NhcGUtY2hhcnMgc3lt
Ym9scykuCisJcmV0dXJuIHRoaXMuc2xpY2UoMSk7CisgICAgZWxzZSBpZiAodGhpcy5jaGFyQXQo
MCkgPT09IHNjX0tFWVdPUkRfUFJFRklYKQorCXJldHVybiAiOiIgKyB0aGlzLnNsaWNlKDEpOwor
ICAgIGVsc2UKKwlyZXR1cm4gJyInICsgc2NfZXNjYXBlV3JpdGVTdHJpbmcodGhpcykgKyAnIic7
Cit9OworLyogRXhwb3J0ZWQgVmFyaWFibGVzICovCit2YXIgQmdMX3Rlc3R6ZDJib3llcnpkMjsK
K3ZhciBCZ0xfbmJveWVyemQyYmVuY2htYXJremQyOwordmFyIEJnTF9zZXR1cHpkMmJveWVyemQy
OworLyogRW5kIEV4cG9ydHMgKi8KKwordmFyIHRyYW5zbGF0ZV90ZXJtX25ib3llcjsKK3ZhciB0
cmFuc2xhdGVfYXJnc19uYm95ZXI7Cit2YXIgdW50cmFuc2xhdGVfdGVybV9uYm95ZXI7Cit2YXIg
QmdMX3NjX3N5bWJvbHpkMnplM3N5bWJvbHpkMnJlY29yZF8xemUzX25ib3llcjsKK3ZhciBCZ0xf
c2NfemEyc3ltYm9semQycmVjb3Jkc3pkMmFsaXN0emEyXzJ6MDBfbmJveWVyOwordmFyIHRyYW5z
bGF0ZV9hbGlzdF9uYm95ZXI7Cit2YXIgYXBwbHlfc3Vic3RfbmJveWVyOwordmFyIGFwcGx5X3N1
YnN0X2xzdF9uYm95ZXI7Cit2YXIgdGF1dG9sb2d5cF9uYm95ZXI7Cit2YXIgaWZfY29uc3RydWN0
b3JfbmJveWVyOwordmFyIHJld3JpdGVfY291bnRfbmJveWVyOwordmFyIHJld3JpdGVfbmJveWVy
OwordmFyIHJld3JpdGVfYXJnc19uYm95ZXI7Cit2YXIgdW5pZnlfc3Vic3RfbmJveWVyOwordmFy
IG9uZV93YXlfdW5pZnkxX25ib3llcjsKK3ZhciBmYWxzZV90ZXJtX25ib3llcjsKK3ZhciB0cnVl
X3Rlcm1fbmJveWVyOwordmFyIHRyYW5zX29mX2ltcGxpZXMxX25ib3llcjsKK3ZhciBpc190ZXJt
X2VxdWFsX25ib3llcjsKK3ZhciBpc190ZXJtX21lbWJlcl9uYm95ZXI7Cit2YXIgY29uc3RfbmJv
eWVyOwordmFyIHNjX2NvbnN0XzNfbmJveWVyOwordmFyIHNjX2NvbnN0XzRfbmJveWVyOworewor
ICAgIChzY19jb25zdF80X25ib3llciA9IChuZXcgc2NfUGFpcigiXHUxRTlDaW1wbGllcyIsKG5l
dyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDYW5kIiwobmV3IHNjX1BhaXIoKG5ldyBzY19Q
YWlyKCJcdTFFOUNpbXBsaWVzIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigi
XHUxRTlDeSIsbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNhbmQi
LChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2ltcGxpZXMiLChuZXcgc2NfUGFpcigi
XHUxRTlDeSIsKG5ldyBzY19QYWlyKCJcdTFFOUN6IixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigo
bmV3IHNjX1BhaXIoIlx1MUU5Q2FuZCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlD
aW1wbGllcyIsKG5ldyBzY19QYWlyKCJcdTFFOUN6IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3UiLG51
bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDaW1wbGllcyIsKG5ldyBz
Y19QYWlyKCJcdTFFOUN1IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3ciLG51bGwpKSkpKSksbnVsbCkp
KSkpKSxudWxsKSkpKSkpLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUx
RTlDaW1wbGllcyIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3ci
LG51bGwpKSkpKSksbnVsbCkpKSkpKSk7CisgICAgKHNjX2NvbnN0XzNfbmJveWVyID0gc2NfbGlz
dCgobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJc
dTFFOUNjb21waWxlIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2Zvcm0iLG51bGwpKSkpLChuZXcgc2Nf
UGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3JldmVyc2UiLChuZXcgc2NfUGFpcigobmV3IHNjX1Bh
aXIoIlx1MUU5Q2NvZGVnZW4iLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q29wdGlt
aXplIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2Zvcm0iLG51bGwpKSkpLChuZXcgc2NfUGFpcigobmV3
IHNjX1BhaXIoIlx1MUU5Q25pbCIsbnVsbCkpLG51bGwpKSkpKSksbnVsbCkpKSksbnVsbCkpKSkp
KSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigi
XHUxRTlDZXFwIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigiXHUxRTlDeSIs
bnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBz
Y19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZml4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51
bGwpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2ZpeCIsKG5ldyBzY19QYWly
KCJcdTFFOUN5IixudWxsKSkpKSxudWxsKSkpKSkpLG51bGwpKSkpKSksIChuZXcgc2NfUGFpcigi
XHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2dyZWF0ZXJwIiwo
bmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSkpKSwo
bmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNsZXNzcCIsKG5ldyBzY19QYWlyKCJcdTFF
OUN5IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51bGwpKSkpKSksbnVsbCkpKSkpKSwgKG5ldyBz
Y19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbGVz
c2VxcCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwp
KSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbm90IiwobmV3IHNjX1BhaXIo
KG5ldyBzY19QYWlyKCJcdTFFOUNsZXNzcCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IiwobmV3IHNj
X1BhaXIoIlx1MUU5Q3giLG51bGwpKSkpKSksbnVsbCkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19Q
YWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZ3JlYXRl
cmVxcCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwp
KSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbm90IiwobmV3IHNjX1BhaXIo
KG5ldyBzY19QYWlyKCJcdTFFOUNsZXNzcCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNj
X1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpKSksbnVsbCkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19Q
YWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDYm9vbGVh
biIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IixudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19Q
YWlyKCJcdTFFOUNvciIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChu
ZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDdCIs
bnVsbCkpLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwi
LChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlD
ZiIsbnVsbCkpLG51bGwpKSkpKSksbnVsbCkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIo
Ilx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNpZmYiLChuZXcg
c2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IixudWxsKSkpKSkpLChuZXcg
c2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2FuZCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFp
cigiXHUxRTlDaW1wbGllcyIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1
MUU5Q3kiLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDaW1wbGll
cyIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51bGwpKSkp
KSksbnVsbCkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3
IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNldmVuMSIsKG5ldyBzY19QYWlyKCJcdTFFOUN4
IixudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNpZiIsKG5ldyBzY19Q
YWlyKChuZXcgc2NfUGFpcigiXHUxRTlDemVyb3AiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsbnVs
bCkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDdCIsbnVsbCkpLChuZXcgc2Nf
UGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q29kZCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigi
XHUxRTlDc3ViMSIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IixudWxsKSkpKSxudWxsKSkpKSxudWxs
KSkpKSkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19Q
YWlyKChuZXcgc2NfUGFpcigiXHUxRTlDY291bnRwcy0iLChuZXcgc2NfUGFpcigiXHUxRTlDbCIs
KG5ldyBzY19QYWlyKCJcdTFFOUNwcmVkIixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNj
X1BhaXIoIlx1MUU5Q2NvdW50cHMtbG9vcCIsKG5ldyBzY19QYWlyKCJcdTFFOUNsIiwobmV3IHNj
X1BhaXIoIlx1MUU5Q3ByZWQiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3plcm8i
LG51bGwpKSxudWxsKSkpKSkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVh
bCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZmFjdC0iLChuZXcgc2NfUGFpcigi
XHUxRTlDaSIsbnVsbCkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZmFjdC1s
b29wIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2kiLChuZXcgc2NfUGFpcigoMSksbnVsbCkpKSkpKSxu
dWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBz
Y19QYWlyKCJcdTFFOUNyZXZlcnNlLSIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IixudWxsKSkpKSwo
bmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNyZXZlcnNlLWxvb3AiLChuZXcgc2NfUGFp
cigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbmlsIixudWxsKSks
bnVsbCkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNj
X1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNkaXZpZGVzIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3gi
LChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19Q
YWlyKCJcdTFFOUN6ZXJvcCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcmVtYWlu
ZGVyIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsbnVsbCkp
KSkpKSxudWxsKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3
IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNhc3N1bWUtdHJ1ZSIsKG5ldyBzY19QYWlyKCJc
dTFFOUN2YXIiLChuZXcgc2NfUGFpcigiXHUxRTlDYWxpc3QiLG51bGwpKSkpKSksKG5ldyBzY19Q
YWlyKChuZXcgc2NfUGFpcigiXHUxRTlDY29ucyIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigi
XHUxRTlDY29ucyIsKG5ldyBzY19QYWlyKCJcdTFFOUN2YXIiLChuZXcgc2NfUGFpcigobmV3IHNj
X1BhaXIoIlx1MUU5Q3QiLG51bGwpKSxudWxsKSkpKSkpLChuZXcgc2NfUGFpcigiXHUxRTlDYWxp
c3QiLG51bGwpKSkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5l
dyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDYXNzdW1lLWZhbHNlIiwobmV3IHNjX1BhaXIo
Ilx1MUU5Q3ZhciIsKG5ldyBzY19QYWlyKCJcdTFFOUNhbGlzdCIsbnVsbCkpKSkpKSwobmV3IHNj
X1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNjb25zIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWly
KCJcdTFFOUNjb25zIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3ZhciIsKG5ldyBzY19QYWlyKChuZXcg
c2NfUGFpcigiXHUxRTlDZiIsbnVsbCkpLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKCJcdTFFOUNh
bGlzdCIsbnVsbCkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwo
bmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN0YXV0b2xvZ3ktY2hlY2tlciIsKG5ldyBz
Y19QYWlyKCJcdTFFOUN4IixudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFF
OUN0YXV0b2xvZ3lwIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNub3JtYWxpemUi
LChuZXcgc2NfUGFpcigiXHUxRTlDeCIsbnVsbCkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFp
cigiXHUxRTlDbmlsIixudWxsKSksbnVsbCkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIo
Ilx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNmYWxzaWZ5Iiwo
bmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51bGwpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIo
Ilx1MUU5Q2ZhbHNpZnkxIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNub3JtYWxp
emUiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsbnVsbCkpKSksKG5ldyBzY19QYWlyKChuZXcgc2Nf
UGFpcigiXHUxRTlDbmlsIixudWxsKSksbnVsbCkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1Bh
aXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNwcmltZSIs
KG5ldyBzY19QYWlyKCJcdTFFOUN4IixudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWly
KCJcdTFFOUNhbmQiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q25vdCIsKG5ldyBz
Y19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDemVyb3AiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIs
bnVsbCkpKSksbnVsbCkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbm90Iiwo
bmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKCJcdTFF
OUN4IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNhZGQxIiwobmV3IHNjX1BhaXIo
KG5ldyBzY19QYWlyKCJcdTFFOUN6ZXJvIixudWxsKSksbnVsbCkpKSksbnVsbCkpKSkpKSxudWxs
KSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNwcmltZTEiLChuZXcgc2NfUGFp
cigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDc3ViMSIsKG5ldyBz
Y19QYWlyKCJcdTFFOUN4IixudWxsKSkpKSxudWxsKSkpKSkpLG51bGwpKSkpKSkpKSxudWxsKSkp
KSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWly
KCJcdTFFOUNhbmQiLChuZXcgc2NfUGFpcigiXHUxRTlDcCIsKG5ldyBzY19QYWlyKCJcdTFFOUNx
IixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2lmIiwobmV3IHNj
X1BhaXIoIlx1MUU5Q3AiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2lmIiwobmV3
IHNjX1BhaXIoIlx1MUU5Q3EiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3QiLG51
bGwpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNmIixudWxsKSksbnVsbCkpKSkp
KSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2YiLG51bGwpKSxudWxsKSkpKSkp
KSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChu
ZXcgc2NfUGFpcigiXHUxRTlDb3IiLChuZXcgc2NfUGFpcigiXHUxRTlDcCIsKG5ldyBzY19QYWly
KCJcdTFFOUNxIixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2lm
IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3AiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5
Q3QiLG51bGwpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNpZiIsKG5ldyBzY19Q
YWlyKCJcdTFFOUNxIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN0IixudWxsKSks
KG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZiIsbnVsbCkpLG51bGwpKSkpKSkpKSxu
dWxsKSkpKSkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBz
Y19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbm90IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3AiLG51
bGwpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2lmIiwobmV3IHNjX1BhaXIo
Ilx1MUU5Q3AiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2YiLG51bGwpKSwobmV3
IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN0IixudWxsKSksbnVsbCkpKSkpKSkpLG51bGwp
KSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1Bh
aXIoIlx1MUU5Q2ltcGxpZXMiLChuZXcgc2NfUGFpcigiXHUxRTlDcCIsKG5ldyBzY19QYWlyKCJc
dTFFOUNxIixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2lmIiwo
bmV3IHNjX1BhaXIoIlx1MUU5Q3AiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2lm
IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3EiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5
Q3QiLG51bGwpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNmIixudWxsKSksbnVs
bCkpKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3QiLG51bGwpKSxudWxs
KSkpKSkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19Q
YWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZml4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51bGwp
KSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2lmIiwobmV3IHNjX1BhaXIoKG5l
dyBzY19QYWlyKCJcdTFFOUNudW1iZXJwIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51bGwpKSkp
LChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlD
emVybyIsbnVsbCkpLG51bGwpKSkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5
Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNpZiIsKG5ldyBzY19QYWly
KChuZXcgc2NfUGFpcigiXHUxRTlDaWYiLChuZXcgc2NfUGFpcigiXHUxRTlDYSIsKG5ldyBzY19Q
YWlyKCJcdTFFOUNiIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2MiLG51bGwpKSkpKSkpKSwobmV3IHNj
X1BhaXIoIlx1MUU5Q2QiLChuZXcgc2NfUGFpcigiXHUxRTlDZSIsbnVsbCkpKSkpKSkpLChuZXcg
c2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2lmIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2EiLChu
ZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2lmIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2Ii
LChuZXcgc2NfUGFpcigiXHUxRTlDZCIsKG5ldyBzY19QYWlyKCJcdTFFOUNlIixudWxsKSkpKSkp
KSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDaWYiLChuZXcgc2NfUGFpcigiXHUx
RTlDYyIsKG5ldyBzY19QYWlyKCJcdTFFOUNkIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2UiLG51bGwp
KSkpKSkpKSxudWxsKSkpKSkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVh
bCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDemVyb3AiLChuZXcgc2NfUGFpcigi
XHUxRTlDeCIsbnVsbCkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDb3IiLChu
ZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoIlx1MUU5
Q3giLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3plcm8iLG51bGwpKSxudWxsKSkp
KSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q25vdCIsKG5ldyBzY19QYWlyKChu
ZXcgc2NfUGFpcigiXHUxRTlDbnVtYmVycCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IixudWxsKSkp
KSxudWxsKSkpKSxudWxsKSkpKSkpLG51bGwpKSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1
YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3BsdXMiLChuZXcgc2NfUGFpcigo
bmV3IHNjX1BhaXIoIlx1MUU5Q3BsdXMiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19Q
YWlyKCJcdTFFOUN5IixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigiXHUxRTlDeiIsbnVsbCkpKSkp
KSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNwbHVzIiwobmV3IHNjX1BhaXIoIlx1
MUU5Q3giLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3BsdXMiLChuZXcgc2NfUGFp
cigiXHUxRTlDeSIsKG5ldyBzY19QYWlyKCJcdTFFOUN6IixudWxsKSkpKSkpLG51bGwpKSkpKSks
bnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcg
c2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3Bs
dXMiLChuZXcgc2NfUGFpcigiXHUxRTlDYSIsKG5ldyBzY19QYWlyKCJcdTFFOUNiIixudWxsKSkp
KSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3plcm8iLG51bGwpKSxudWxsKSkp
KSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2FuZCIsKG5ldyBzY19QYWlyKChu
ZXcgc2NfUGFpcigiXHUxRTlDemVyb3AiLChuZXcgc2NfUGFpcigiXHUxRTlDYSIsbnVsbCkpKSks
KG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDemVyb3AiLChuZXcgc2NfUGFpcigiXHUx
RTlDYiIsbnVsbCkpKSksbnVsbCkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5
Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNkaWZmZXJlbmNlIiwobmV3
IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsbnVsbCkpKSkpKSwobmV3
IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN6ZXJvIixudWxsKSksbnVsbCkpKSkpKSwgKG5l
dyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlD
ZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3BsdXMiLChuZXcgc2NfUGFp
cigiXHUxRTlDYSIsKG5ldyBzY19QYWlyKCJcdTFFOUNiIixudWxsKSkpKSkpLChuZXcgc2NfUGFp
cigobmV3IHNjX1BhaXIoIlx1MUU5Q3BsdXMiLChuZXcgc2NfUGFpcigiXHUxRTlDYSIsKG5ldyBz
Y19QYWlyKCJcdTFFOUNjIixudWxsKSkpKSkpLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcg
c2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2Zp
eCIsKG5ldyBzY19QYWlyKCJcdTFFOUNiIixudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19Q
YWlyKCJcdTFFOUNmaXgiLChuZXcgc2NfUGFpcigiXHUxRTlDYyIsbnVsbCkpKSksbnVsbCkpKSkp
KSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5l
dyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlD
emVybyIsbnVsbCkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2RpZmZlcmVuY2Ui
LChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IixudWxsKSkpKSkp
LG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbm90IiwobmV3IHNj
X1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNsZXNzcCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5Iiwo
bmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51bGwpKSkpKSksbnVsbCkpKSksbnVsbCkpKSkpKSwgKG5l
dyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlD
ZXF1YWwiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigi
XHUxRTlDZGlmZmVyZW5jZSIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1
MUU5Q3kiLG51bGwpKSkpKSksbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJc
dTFFOUNhbmQiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q251bWJlcnAiLChuZXcg
c2NfUGFpcigiXHUxRTlDeCIsbnVsbCkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUx
RTlDb3IiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1Bh
aXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3plcm8iLG51bGwp
KSxudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3plcm9wIiwobmV3
IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpLG51bGwpKSkpKSksbnVsbCkpKSkpKSxudWxsKSkp
KSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWly
KCJcdTFFOUNtZWFuaW5nIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNwbHVzLXRy
ZWUiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2FwcGVuZCIsKG5ldyBzY19QYWly
KCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpKSksbnVsbCkpKSksKG5l
dyBzY19QYWlyKCJcdTFFOUNhIixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIo
Ilx1MUU5Q3BsdXMiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q21lYW5pbmciLChu
ZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3BsdXMtdHJlZSIsKG5ldyBzY19QYWlyKCJc
dTFFOUN4IixudWxsKSkpKSwobmV3IHNjX1BhaXIoIlx1MUU5Q2EiLG51bGwpKSkpKSksKG5ldyBz
Y19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbWVhbmluZyIsKG5ldyBzY19QYWlyKChuZXcgc2Nf
UGFpcigiXHUxRTlDcGx1cy10cmVlIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpLChu
ZXcgc2NfUGFpcigiXHUxRTlDYSIsbnVsbCkpKSkpKSxudWxsKSkpKSkpLG51bGwpKSkpKSksIChu
ZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5
Q21lYW5pbmciLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3BsdXMtdHJlZSIsKG5l
dyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcGx1cy1mcmluZ2UiLChuZXcgc2NfUGFpcigi
XHUxRTlDeCIsbnVsbCkpKSksbnVsbCkpKSksKG5ldyBzY19QYWlyKCJcdTFFOUNhIixudWxsKSkp
KSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2ZpeCIsKG5ldyBzY19QYWlyKChu
ZXcgc2NfUGFpcigiXHUxRTlDbWVhbmluZyIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNj
X1BhaXIoIlx1MUU5Q2EiLG51bGwpKSkpKSksbnVsbCkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19Q
YWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDYXBwZW5k
IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNhcHBlbmQiLChuZXcgc2NfUGFpcigi
XHUxRTlDeCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigi
XHUxRTlDeiIsbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNhcHBl
bmQiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUx
RTlDYXBwZW5kIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLChuZXcgc2NfUGFpcigiXHUxRTlDeiIs
bnVsbCkpKSkpKSxudWxsKSkpKSkpLG51bGwpKSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1
YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3JldmVyc2UiLChuZXcgc2NfUGFp
cigobmV3IHNjX1BhaXIoIlx1MUU5Q2FwcGVuZCIsKG5ldyBzY19QYWlyKCJcdTFFOUNhIiwobmV3
IHNjX1BhaXIoIlx1MUU5Q2IiLG51bGwpKSkpKSksbnVsbCkpKSksKG5ldyBzY19QYWlyKChuZXcg
c2NfUGFpcigiXHUxRTlDYXBwZW5kIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNy
ZXZlcnNlIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2IiLG51bGwpKSkpLChuZXcgc2NfUGFpcigobmV3
IHNjX1BhaXIoIlx1MUU5Q3JldmVyc2UiLChuZXcgc2NfUGFpcigiXHUxRTlDYSIsbnVsbCkpKSks
bnVsbCkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNj
X1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN0aW1lcyIsKG5ldyBzY19QYWlyKCJcdTFFOUN4Iiwo
bmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNwbHVzIiwobmV3IHNjX1BhaXIoIlx1MUU5
Q3kiLChuZXcgc2NfUGFpcigiXHUxRTlDeiIsbnVsbCkpKSkpKSxudWxsKSkpKSkpLChuZXcgc2Nf
UGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3BsdXMiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIo
Ilx1MUU5Q3RpbWVzIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigiXHUxRTlD
eSIsbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN0aW1lcyIsKG5l
dyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3oiLG51bGwpKSkpKSksbnVs
bCkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1Bh
aXIoKG5ldyBzY19QYWlyKCJcdTFFOUN0aW1lcyIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigi
XHUxRTlDdGltZXMiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5
IixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigiXHUxRTlDeiIsbnVsbCkpKSkpKSwobmV3IHNjX1Bh
aXIoKG5ldyBzY19QYWlyKCJcdTFFOUN0aW1lcyIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3
IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN0aW1lcyIsKG5ldyBzY19QYWlyKCJcdTFFOUN5
IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3oiLG51bGwpKSkpKSksbnVsbCkpKSkpKSxudWxsKSkpKSkp
LCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJc
dTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDdGltZXMiLChuZXcg
c2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IixudWxsKSkpKSkpLChuZXcg
c2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3plcm8iLG51bGwpKSxudWxsKSkpKSkpLChuZXcg
c2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q29yIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWly
KCJcdTFFOUN6ZXJvcCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IixudWxsKSkpKSwobmV3IHNjX1Bh
aXIoKG5ldyBzY19QYWlyKCJcdTFFOUN6ZXJvcCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IixudWxs
KSkpKSxudWxsKSkpKSkpLG51bGwpKSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChu
ZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2V4ZWMiLChuZXcgc2NfUGFpcigobmV3IHNj
X1BhaXIoIlx1MUU5Q2FwcGVuZCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIo
Ilx1MUU5Q3kiLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKCJcdTFFOUNwZHMiLChuZXcgc2NfUGFp
cigiXHUxRTlDZW52cm4iLG51bGwpKSkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJc
dTFFOUNleGVjIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLChuZXcgc2NfUGFpcigobmV3IHNjX1Bh
aXIoIlx1MUU5Q2V4ZWMiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKCJcdTFF
OUNwZHMiLChuZXcgc2NfUGFpcigiXHUxRTlDZW52cm4iLG51bGwpKSkpKSkpKSwobmV3IHNjX1Bh
aXIoIlx1MUU5Q2VudnJuIixudWxsKSkpKSkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJc
dTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbWMtZmxhdHRlbiIs
KG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpKSks
KG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDYXBwZW5kIiwobmV3IHNjX1BhaXIoKG5l
dyBzY19QYWlyKCJcdTFFOUNmbGF0dGVuIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51bGwpKSkp
LChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1Bh
aXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNtZW1iZXIi
LChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlD
YXBwZW5kIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2EiLChuZXcgc2NfUGFpcigiXHUxRTlDYiIsbnVs
bCkpKSkpKSxudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q29yIiwo
bmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNtZW1iZXIiLChuZXcgc2NfUGFpcigiXHUx
RTlDeCIsKG5ldyBzY19QYWlyKCJcdTFFOUNhIixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3
IHNjX1BhaXIoIlx1MUU5Q21lbWJlciIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1Bh
aXIoIlx1MUU5Q2IiLG51bGwpKSkpKSksbnVsbCkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1Bh
aXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNtZW1iZXIi
LChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlD
cmV2ZXJzZSIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IixudWxsKSkpKSxudWxsKSkpKSkpLChuZXcg
c2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q21lbWJlciIsKG5ldyBzY19QYWlyKCJcdTFFOUN4
IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19Q
YWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbGVuZ3Ro
IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNyZXZlcnNlIiwobmV3IHNjX1BhaXIo
Ilx1MUU5Q3giLG51bGwpKSkpLG51bGwpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1
MUU5Q2xlbmd0aCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IixudWxsKSkpKSxudWxsKSkpKSkpLCAo
bmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFF
OUNtZW1iZXIiLChuZXcgc2NfUGFpcigiXHUxRTlDYSIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFp
cigiXHUxRTlDaW50ZXJzZWN0IiwobmV3IHNjX1BhaXIoIlx1MUU5Q2IiLChuZXcgc2NfUGFpcigi
XHUxRTlDYyIsbnVsbCkpKSkpKSxudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIo
Ilx1MUU5Q2FuZCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbWVtYmVyIiwobmV3
IHNjX1BhaXIoIlx1MUU5Q2EiLChuZXcgc2NfUGFpcigiXHUxRTlDYiIsbnVsbCkpKSkpKSwobmV3
IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNtZW1iZXIiLChuZXcgc2NfUGFpcigiXHUxRTlD
YSIsKG5ldyBzY19QYWlyKCJcdTFFOUNjIixudWxsKSkpKSkpLG51bGwpKSkpKSksbnVsbCkpKSkp
KSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigi
XHUxRTlDbnRoIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN6ZXJvIixudWxsKSks
KG5ldyBzY19QYWlyKCJcdTFFOUNpIixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1Bh
aXIoIlx1MUU5Q3plcm8iLG51bGwpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2Vx
dWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNleHAiLChuZXcgc2NfUGFpcigi
XHUxRTlDaSIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcGx1cyIsKG5ldyBzY19Q
YWlyKCJcdTFFOUNqIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2siLG51bGwpKSkpKSksbnVsbCkpKSkp
KSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN0aW1lcyIsKG5ldyBzY19QYWlyKChu
ZXcgc2NfUGFpcigiXHUxRTlDZXhwIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2kiLChuZXcgc2NfUGFp
cigiXHUxRTlDaiIsbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNl
eHAiLChuZXcgc2NfUGFpcigiXHUxRTlDaSIsKG5ldyBzY19QYWlyKCJcdTFFOUNrIixudWxsKSkp
KSkpLG51bGwpKSkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5l
dyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZXhwIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2ki
LChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3RpbWVzIiwobmV3IHNjX1BhaXIoIlx1
MUU5Q2oiLChuZXcgc2NfUGFpcigiXHUxRTlDayIsbnVsbCkpKSkpKSxudWxsKSkpKSkpLChuZXcg
c2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2V4cCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFp
cigiXHUxRTlDZXhwIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2kiLChuZXcgc2NfUGFpcigiXHUxRTlD
aiIsbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoIlx1MUU5Q2siLG51bGwpKSkpKSksbnVsbCkpKSkp
KSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigi
XHUxRTlDcmV2ZXJzZS1sb29wIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigi
XHUxRTlDeSIsbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNhcHBl
bmQiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3JldmVyc2UiLChuZXcgc2NfUGFp
cigiXHUxRTlDeCIsbnVsbCkpKSksKG5ldyBzY19QYWlyKCJcdTFFOUN5IixudWxsKSkpKSkpLG51
bGwpKSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNj
X1BhaXIoIlx1MUU5Q3JldmVyc2UtbG9vcCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNj
X1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNuaWwiLG51bGwpKSxudWxsKSkpKSkpLChuZXcgc2Nf
UGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3JldmVyc2UiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIs
bnVsbCkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19Q
YWlyKChuZXcgc2NfUGFpcigiXHUxRTlDY291bnQtbGlzdCIsKG5ldyBzY19QYWlyKCJcdTFFOUN6
IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNzb3J0LWxwIiwobmV3IHNjX1BhaXIo
Ilx1MUU5Q3giLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSkpKSxudWxsKSkpKSkpLChu
ZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3BsdXMiLChuZXcgc2NfUGFpcigobmV3IHNj
X1BhaXIoIlx1MUU5Q2NvdW50LWxpc3QiLChuZXcgc2NfUGFpcigiXHUxRTlDeiIsKG5ldyBzY19Q
YWlyKCJcdTFFOUN4IixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5
Q2NvdW50LWxpc3QiLChuZXcgc2NfUGFpcigiXHUxRTlDeiIsKG5ldyBzY19QYWlyKCJcdTFFOUN5
IixudWxsKSkpKSkpLG51bGwpKSkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNl
cXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFp
cigobmV3IHNjX1BhaXIoIlx1MUU5Q2FwcGVuZCIsKG5ldyBzY19QYWlyKCJcdTFFOUNhIiwobmV3
IHNjX1BhaXIoIlx1MUU5Q2IiLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigi
XHUxRTlDYXBwZW5kIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2EiLChuZXcgc2NfUGFpcigiXHUxRTlD
YyIsbnVsbCkpKSkpKSxudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5
Q2VxdWFsIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2IiLChuZXcgc2NfUGFpcigiXHUxRTlDYyIsbnVs
bCkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1Bh
aXIoKG5ldyBzY19QYWlyKCJcdTFFOUNwbHVzIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJc
dTFFOUNyZW1haW5kZXIiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKCJcdTFF
OUN5IixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3RpbWVzIiwo
bmV3IHNjX1BhaXIoIlx1MUU5Q3kiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3F1
b3RpZW50IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVs
bCkpKSkpKSxudWxsKSkpKSkpLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigi
XHUxRTlDZml4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51bGwpKSkpLG51bGwpKSkpKSksIChu
ZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5
Q3Bvd2VyLWV2YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2JpZy1wbHVzMSIs
KG5ldyBzY19QYWlyKCJcdTFFOUNsIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2kiLChuZXcgc2NfUGFp
cigiXHUxRTlDYmFzZSIsbnVsbCkpKSkpKSkpLChuZXcgc2NfUGFpcigiXHUxRTlDYmFzZSIsbnVs
bCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNwbHVzIiwobmV3IHNjX1Bh
aXIoKG5ldyBzY19QYWlyKCJcdTFFOUNwb3dlci1ldmFsIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2wi
LChuZXcgc2NfUGFpcigiXHUxRTlDYmFzZSIsbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoIlx1MUU5
Q2kiLG51bGwpKSkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5l
dyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcG93ZXItZXZhbCIsKG5ldyBzY19QYWlyKChu
ZXcgc2NfUGFpcigiXHUxRTlDYmlnLXBsdXMiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBz
Y19QYWlyKCJcdTFFOUN5IiwobmV3IHNjX1BhaXIoIlx1MUU5Q2kiLChuZXcgc2NfUGFpcigiXHUx
RTlDYmFzZSIsbnVsbCkpKSkpKSkpKSksKG5ldyBzY19QYWlyKCJcdTFFOUNiYXNlIixudWxsKSkp
KSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3BsdXMiLChuZXcgc2NfUGFpcigi
XHUxRTlDaSIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcGx1cyIsKG5ldyBzY19Q
YWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcG93ZXItZXZhbCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4
IiwobmV3IHNjX1BhaXIoIlx1MUU5Q2Jhc2UiLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcg
c2NfUGFpcigiXHUxRTlDcG93ZXItZXZhbCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IiwobmV3IHNj
X1BhaXIoIlx1MUU5Q2Jhc2UiLG51bGwpKSkpKSksbnVsbCkpKSkpKSxudWxsKSkpKSkpLG51bGwp
KSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1Bh
aXIoIlx1MUU5Q3JlbWFpbmRlciIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IiwobmV3IHNjX1BhaXIo
KDEpLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDemVybyIsbnVs
bCkpLG51bGwpKSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigo
bmV3IHNjX1BhaXIoIlx1MUU5Q2xlc3NwIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFF
OUNyZW1haW5kZXIiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5
IixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSkpKSwobmV3IHNjX1Bh
aXIoKG5ldyBzY19QYWlyKCJcdTFFOUNub3QiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1
MUU5Q3plcm9wIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpLG51bGwpKSkpLG51bGwp
KSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1Bh
aXIoIlx1MUU5Q3JlbWFpbmRlciIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIo
Ilx1MUU5Q3giLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDemVy
byIsbnVsbCkpLG51bGwpKSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2Nf
UGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2xlc3NwIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWly
KCJcdTFFOUNxdW90aWVudCIsKG5ldyBzY19QYWlyKCJcdTFFOUNpIiwobmV3IHNjX1BhaXIoIlx1
MUU5Q2oiLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKCJcdTFFOUNpIixudWxsKSkpKSkpLChuZXcg
c2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2FuZCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFp
cigiXHUxRTlDbm90IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN6ZXJvcCIsKG5l
dyBzY19QYWlyKCJcdTFFOUNpIixudWxsKSkpKSxudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBz
Y19QYWlyKCJcdTFFOUNvciIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDemVyb3Ai
LChuZXcgc2NfUGFpcigiXHUxRTlDaiIsbnVsbCkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFp
cigiXHUxRTlDbm90IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5l
dyBzY19QYWlyKCJcdTFFOUNqIiwobmV3IHNjX1BhaXIoKDEpLG51bGwpKSkpKSksbnVsbCkpKSks
bnVsbCkpKSkpKSxudWxsKSkpKSkpLG51bGwpKSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1
YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2xlc3NwIiwobmV3IHNjX1BhaXIo
KG5ldyBzY19QYWlyKCJcdTFFOUNyZW1haW5kZXIiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5l
dyBzY19QYWlyKCJcdTFFOUN5IixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsbnVs
bCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNhbmQiLChuZXcgc2NfUGFp
cigobmV3IHNjX1BhaXIoIlx1MUU5Q25vdCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUx
RTlDemVyb3AiLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSksbnVsbCkpKSksKG5ldyBz
Y19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbm90IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWly
KCJcdTFFOUN6ZXJvcCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IixudWxsKSkpKSxudWxsKSkpKSwo
bmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNub3QiLChuZXcgc2NfUGFpcigobmV3IHNj
X1BhaXIoIlx1MUU5Q2xlc3NwIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigi
XHUxRTlDeSIsbnVsbCkpKSkpKSxudWxsKSkpKSxudWxsKSkpKSkpKSksbnVsbCkpKSkpKSwgKG5l
dyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlD
cG93ZXItZXZhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcG93ZXItcmVwIiwo
bmV3IHNjX1BhaXIoIlx1MUU5Q2kiLChuZXcgc2NfUGFpcigiXHUxRTlDYmFzZSIsbnVsbCkpKSkp
KSwobmV3IHNjX1BhaXIoIlx1MUU5Q2Jhc2UiLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcg
c2NfUGFpcigiXHUxRTlDZml4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q2kiLG51bGwpKSkpLG51bGwp
KSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1Bh
aXIoIlx1MUU5Q3Bvd2VyLWV2YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2Jp
Zy1wbHVzIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNwb3dlci1yZXAiLChuZXcg
c2NfUGFpcigiXHUxRTlDaSIsKG5ldyBzY19QYWlyKCJcdTFFOUNiYXNlIixudWxsKSkpKSkpLChu
ZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3Bvd2VyLXJlcCIsKG5ldyBzY19QYWlyKCJc
dTFFOUNqIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2Jhc2UiLG51bGwpKSkpKSksKG5ldyBzY19QYWly
KChuZXcgc2NfUGFpcigiXHUxRTlDemVybyIsbnVsbCkpLChuZXcgc2NfUGFpcigiXHUxRTlDYmFz
ZSIsbnVsbCkpKSkpKSkpKSksKG5ldyBzY19QYWlyKCJcdTFFOUNiYXNlIixudWxsKSkpKSkpLChu
ZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3BsdXMiLChuZXcgc2NfUGFpcigiXHUxRTlD
aSIsKG5ldyBzY19QYWlyKCJcdTFFOUNqIixudWxsKSkpKSkpLG51bGwpKSkpKSksIChuZXcgc2Nf
UGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2djZCIs
KG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpKSks
KG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZ2NkIiwobmV3IHNjX1BhaXIoIlx1MUU5
Q3kiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsbnVsbCkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNj
X1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNudGgi
LChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2FwcGVuZCIsKG5ldyBzY19QYWlyKCJc
dTFFOUNhIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2IiLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKCJc
dTFFOUNpIixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2FwcGVu
ZCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbnRoIiwobmV3IHNjX1BhaXIoIlx1
MUU5Q2EiLChuZXcgc2NfUGFpcigiXHUxRTlDaSIsbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5l
dyBzY19QYWlyKCJcdTFFOUNudGgiLChuZXcgc2NfUGFpcigiXHUxRTlDYiIsKG5ldyBzY19QYWly
KChuZXcgc2NfUGFpcigiXHUxRTlDZGlmZmVyZW5jZSIsKG5ldyBzY19QYWlyKCJcdTFFOUNpIiwo
bmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNsZW5ndGgiLChuZXcgc2NfUGFpcigiXHUx
RTlDYSIsbnVsbCkpKSksbnVsbCkpKSkpKSxudWxsKSkpKSkpLG51bGwpKSkpKSksbnVsbCkpKSkp
KSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigi
XHUxRTlDZGlmZmVyZW5jZSIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcGx1cyIs
KG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpKSks
KG5ldyBzY19QYWlyKCJcdTFFOUN4IixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1Bh
aXIoIlx1MUU5Q2ZpeCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IixudWxsKSkpKSxudWxsKSkpKSkp
LCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJc
dTFFOUNkaWZmZXJlbmNlIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNwbHVzIiwo
bmV3IHNjX1BhaXIoIlx1MUU5Q3kiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsbnVsbCkpKSkpKSwo
bmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFp
cigiXHUxRTlDZml4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpLG51bGwpKSkpKSks
IChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1
MUU5Q2RpZmZlcmVuY2UiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3BsdXMiLChu
ZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IixudWxsKSkpKSkpLChu
ZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3BsdXMiLChuZXcgc2NfUGFpcigiXHUxRTlD
eCIsKG5ldyBzY19QYWlyKCJcdTFFOUN6IixudWxsKSkpKSkpLG51bGwpKSkpKSksKG5ldyBzY19Q
YWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZGlmZmVyZW5jZSIsKG5ldyBzY19QYWlyKCJcdTFFOUN5
IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3oiLG51bGwpKSkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19Q
YWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDdGltZXMi
LChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlD
ZGlmZmVyZW5jZSIsKG5ldyBzY19QYWlyKCJcdTFFOUNjIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3ci
LG51bGwpKSkpKSksbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNk
aWZmZXJlbmNlIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN0aW1lcyIsKG5ldyBz
Y19QYWlyKCJcdTFFOUNjIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51bGwpKSkpKSksKG5ldyBz
Y19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDdGltZXMiLChuZXcgc2NfUGFpcigiXHUxRTlDdyIs
KG5ldyBzY19QYWlyKCJcdTFFOUN4IixudWxsKSkpKSkpLG51bGwpKSkpKSksbnVsbCkpKSkpKSwg
KG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUx
RTlDcmVtYWluZGVyIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN0aW1lcyIsKG5l
dyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3oiLG51bGwpKSkpKSksKG5l
dyBzY19QYWlyKCJcdTFFOUN6IixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIo
Ilx1MUU5Q3plcm8iLG51bGwpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFs
IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNkaWZmZXJlbmNlIiwobmV3IHNjX1Bh
aXIoKG5ldyBzY19QYWlyKCJcdTFFOUNwbHVzIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2IiLChuZXcg
c2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3BsdXMiLChuZXcgc2NfUGFpcigiXHUxRTlDYSIs
KG5ldyBzY19QYWlyKCJcdTFFOUNjIixudWxsKSkpKSkpLG51bGwpKSkpKSksKG5ldyBzY19QYWly
KCJcdTFFOUNhIixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3Bs
dXMiLChuZXcgc2NfUGFpcigiXHUxRTlDYiIsKG5ldyBzY19QYWlyKCJcdTFFOUNjIixudWxsKSkp
KSkpLG51bGwpKSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigo
bmV3IHNjX1BhaXIoIlx1MUU5Q2RpZmZlcmVuY2UiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIo
Ilx1MUU5Q2FkZDEiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3BsdXMiLChuZXcg
c2NfUGFpcigiXHUxRTlDeSIsKG5ldyBzY19QYWlyKCJcdTFFOUN6IixudWxsKSkpKSkpLG51bGwp
KSkpLChuZXcgc2NfUGFpcigiXHUxRTlDeiIsbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBz
Y19QYWlyKCJcdTFFOUNhZGQxIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpLG51bGwp
KSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1Bh
aXIoIlx1MUU5Q2xlc3NwIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNwbHVzIiwo
bmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSkpKSwo
bmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNwbHVzIiwobmV3IHNjX1BhaXIoIlx1MUU5
Q3giLChuZXcgc2NfUGFpcigiXHUxRTlDeiIsbnVsbCkpKSkpKSxudWxsKSkpKSkpLChuZXcgc2Nf
UGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2xlc3NwIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLChu
ZXcgc2NfUGFpcigiXHUxRTlDeiIsbnVsbCkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIo
Ilx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNsZXNzcCIsKG5l
dyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDdGltZXMiLChuZXcgc2NfUGFpcigiXHUxRTlD
eCIsKG5ldyBzY19QYWlyKCJcdTFFOUN6IixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNj
X1BhaXIoIlx1MUU5Q3RpbWVzIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLChuZXcgc2NfUGFpcigi
XHUxRTlDeiIsbnVsbCkpKSkpKSxudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIo
Ilx1MUU5Q2FuZCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbm90IiwobmV3IHNj
X1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN6ZXJvcCIsKG5ldyBzY19QYWlyKCJcdTFFOUN6Iixu
dWxsKSkpKSxudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNsZXNzcCIs
KG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpKSks
bnVsbCkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNj
X1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNsZXNzcCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5Iiwo
bmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNwbHVzIiwobmV3IHNjX1BhaXIoIlx1MUU5
Q3giLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSkpKSxudWxsKSkpKSkpLChuZXcgc2Nf
UGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q25vdCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigi
XHUxRTlDemVyb3AiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsbnVsbCkpKSksbnVsbCkpKSksbnVs
bCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2Nf
UGFpcigiXHUxRTlDZ2NkIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN0aW1lcyIs
KG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3oiLG51bGwpKSkpKSks
KG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDdGltZXMiLChuZXcgc2NfUGFpcigiXHUx
RTlDeSIsKG5ldyBzY19QYWlyKCJcdTFFOUN6IixudWxsKSkpKSkpLG51bGwpKSkpKSksKG5ldyBz
Y19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDdGltZXMiLChuZXcgc2NfUGFpcigiXHUxRTlDeiIs
KG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZ2NkIiwobmV3IHNjX1BhaXIoIlx1MUU5
Q3giLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSkpKSxudWxsKSkpKSkpLG51bGwpKSkp
KSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIo
Ilx1MUU5Q3ZhbHVlIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNub3JtYWxpemUi
LChuZXcgc2NfUGFpcigiXHUxRTlDeCIsbnVsbCkpKSksKG5ldyBzY19QYWlyKCJcdTFFOUNhIixu
dWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3ZhbHVlIiwobmV3IHNj
X1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigiXHUxRTlDYSIsbnVsbCkpKSkpKSxudWxsKSkp
KSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWly
KCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZmxhdHRlbiIs
KG5ldyBzY19QYWlyKCJcdTFFOUN4IixudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWly
KCJcdTFFOUNjb25zIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLChuZXcgc2NfUGFpcigobmV3IHNj
X1BhaXIoIlx1MUU5Q25pbCIsbnVsbCkpLG51bGwpKSkpKSksbnVsbCkpKSkpKSwobmV3IHNjX1Bh
aXIoKG5ldyBzY19QYWlyKCJcdTFFOUNhbmQiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1
MUU5Q25saXN0cCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IixudWxsKSkpKSwobmV3IHNjX1BhaXIo
KG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNj
X1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpKSksbnVsbCkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNj
X1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNsaXN0
cCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZ29waGVyIiwobmV3IHNjX1BhaXIo
Ilx1MUU5Q3giLG51bGwpKSkpLG51bGwpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1
MUU5Q2xpc3RwIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51bGwpKSkpLG51bGwpKSkpKSksIChu
ZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5
Q3NhbWVmcmluZ2UiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5
IixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3
IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNmbGF0dGVuIiwobmV3IHNjX1BhaXIoIlx1MUU5
Q3giLG51bGwpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2ZsYXR0ZW4iLChu
ZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSksbnVsbCkpKSkpKSxudWxsKSkpKSkpLCAobmV3
IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNl
cXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZ3JlYXRlc3QtZmFjdG9yIiwo
bmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSkpKSwo
bmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN6ZXJvIixudWxsKSksbnVsbCkpKSkpKSwo
bmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNhbmQiLChuZXcgc2NfUGFpcigobmV3IHNj
X1BhaXIoIlx1MUU5Q29yIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN6ZXJvcCIs
KG5ldyBzY19QYWlyKCJcdTFFOUN5IixudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWly
KCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IiwobmV3IHNjX1BhaXIoKDEpLG51
bGwpKSkpKSksbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVh
bCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFF
OUN6ZXJvIixudWxsKSksbnVsbCkpKSkpKSxudWxsKSkpKSkpLG51bGwpKSkpKSksIChuZXcgc2Nf
UGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFs
IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNncmVhdGVzdC1mYWN0b3IiLChuZXcg
c2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IixudWxsKSkpKSkpLChuZXcg
c2NfUGFpcigoMSksbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNl
cXVhbCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoKDEpLG51bGwpKSkpKSks
bnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcg
c2NfUGFpcigiXHUxRTlDbnVtYmVycCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlD
Z3JlYXRlc3QtZmFjdG9yIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigiXHUx
RTlDeSIsbnVsbCkpKSkpKSxudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFF
OUNub3QiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2FuZCIsKG5ldyBzY19QYWly
KChuZXcgc2NfUGFpcigiXHUxRTlDb3IiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5
Q3plcm9wIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpLChuZXcgc2NfUGFpcigobmV3
IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLChuZXcgc2NfUGFp
cigoMSksbnVsbCkpKSkpKSxudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1
MUU5Q25vdCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbnVtYmVycCIsKG5ldyBz
Y19QYWlyKCJcdTFFOUN4IixudWxsKSkpKSxudWxsKSkpKSxudWxsKSkpKSkpLG51bGwpKSkpLG51
bGwpKSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNj
X1BhaXIoIlx1MUU5Q3RpbWVzLWxpc3QiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5
Q2FwcGVuZCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51
bGwpKSkpKSksbnVsbCkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDdGltZXMi
LChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3RpbWVzLWxpc3QiLChuZXcgc2NfUGFp
cigiXHUxRTlDeCIsbnVsbCkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDdGlt
ZXMtbGlzdCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IixudWxsKSkpKSxudWxsKSkpKSkpLG51bGwp
KSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1Bh
aXIoIlx1MUU5Q3ByaW1lLWxpc3QiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2Fw
cGVuZCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwp
KSkpKSksbnVsbCkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDYW5kIiwobmV3
IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNwcmltZS1saXN0IiwobmV3IHNjX1BhaXIoIlx1
MUU5Q3giLG51bGwpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3ByaW1lLWxp
c3QiLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSksbnVsbCkpKSkpKSxudWxsKSkpKSkp
LCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJc
dTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKCJcdTFFOUN6IiwobmV3IHNjX1BhaXIoKG5ldyBzY19Q
YWlyKCJcdTFFOUN0aW1lcyIsKG5ldyBzY19QYWlyKCJcdTFFOUN3IiwobmV3IHNjX1BhaXIoIlx1
MUU5Q3oiLG51bGwpKSkpKSksbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJc
dTFFOUNhbmQiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q251bWJlcnAiLChuZXcg
c2NfUGFpcigiXHUxRTlDeiIsbnVsbCkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUx
RTlDb3IiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1Bh
aXIoIlx1MUU5Q3oiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3plcm8iLG51bGwp
KSxudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3
IHNjX1BhaXIoIlx1MUU5Q3ciLChuZXcgc2NfUGFpcigoMSksbnVsbCkpKSkpKSxudWxsKSkpKSkp
LG51bGwpKSkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBz
Y19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZ3JlYXRlcmVxcCIsKG5ldyBzY19QYWlyKCJcdTFF
OUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcg
c2NfUGFpcigiXHUxRTlDbm90IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNsZXNz
cCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkp
KSksbnVsbCkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBz
Y19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIs
KG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDdGltZXMiLChuZXcgc2NfUGFpcigiXHUx
RTlDeCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IixudWxsKSkpKSkpLG51bGwpKSkpKSksKG5ldyBz
Y19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDb3IiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIo
Ilx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigobmV3IHNj
X1BhaXIoIlx1MUU5Q3plcm8iLG51bGwpKSxudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNj
X1BhaXIoIlx1MUU5Q2FuZCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbnVtYmVy
cCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IixudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19Q
YWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IiwobmV3IHNjX1BhaXIoKDEp
LG51bGwpKSkpKSksbnVsbCkpKSkpKSxudWxsKSkpKSkpLG51bGwpKSkpKSksIChuZXcgc2NfUGFp
cigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3JlbWFpbmRl
ciIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDdGltZXMiLChuZXcgc2NfUGFpcigi
XHUxRTlDeSIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigi
XHUxRTlDeSIsbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN6ZXJv
IixudWxsKSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19Q
YWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIo
Ilx1MUU5Q3RpbWVzIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2EiLChuZXcgc2NfUGFpcigiXHUxRTlD
YiIsbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKDEpLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKHNj
X2xpc3QoIlx1MUU5Q2FuZCIsIChuZXcgc2NfUGFpcigiXHUxRTlDbm90IiwobmV3IHNjX1BhaXIo
KG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKCJcdTFFOUNhIiwobmV3IHNj
X1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN6ZXJvIixudWxsKSksbnVsbCkpKSkpKSxudWxsKSkp
KSwgKG5ldyBzY19QYWlyKCJcdTFFOUNub3QiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1
MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2IiLChuZXcgc2NfUGFpcigobmV3IHNjX1Bh
aXIoIlx1MUU5Q3plcm8iLG51bGwpKSxudWxsKSkpKSkpLG51bGwpKSkpLCAobmV3IHNjX1BhaXIo
Ilx1MUU5Q251bWJlcnAiLChuZXcgc2NfUGFpcigiXHUxRTlDYSIsbnVsbCkpKSksIChuZXcgc2Nf
UGFpcigiXHUxRTlDbnVtYmVycCIsKG5ldyBzY19QYWlyKCJcdTFFOUNiIixudWxsKSkpKSwgKG5l
dyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlD
c3ViMSIsKG5ldyBzY19QYWlyKCJcdTFFOUNhIixudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBz
Y19QYWlyKCJcdTFFOUN6ZXJvIixudWxsKSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFF
OUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDc3ViMSIsKG5ldyBzY19Q
YWlyKCJcdTFFOUNiIixudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN6
ZXJvIixudWxsKSksbnVsbCkpKSkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNl
cXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbGVzc3AiLChuZXcgc2NfUGFp
cigobmV3IHNjX1BhaXIoIlx1MUU5Q2xlbmd0aCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigi
XHUxRTlDZGVsZXRlIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigiXHUxRTlD
bCIsbnVsbCkpKSkpKSxudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNs
ZW5ndGgiLChuZXcgc2NfUGFpcigiXHUxRTlDbCIsbnVsbCkpKSksbnVsbCkpKSkpKSwobmV3IHNj
X1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNtZW1iZXIiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIs
KG5ldyBzY19QYWlyKCJcdTFFOUNsIixudWxsKSkpKSkpLG51bGwpKSkpKSksIChuZXcgc2NfUGFp
cigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3NvcnQyIiwo
bmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNkZWxldGUiLChuZXcgc2NfUGFpcigiXHUx
RTlDeCIsKG5ldyBzY19QYWlyKCJcdTFFOUNsIixudWxsKSkpKSkpLG51bGwpKSkpLChuZXcgc2Nf
UGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2RlbGV0ZSIsKG5ldyBzY19QYWlyKCJcdTFFOUN4Iiwo
bmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNzb3J0MiIsKG5ldyBzY19QYWlyKCJcdTFF
OUNsIixudWxsKSkpKSxudWxsKSkpKSkpLG51bGwpKSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlD
ZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2Rzb3J0IiwobmV3IHNjX1Bh
aXIoIlx1MUU5Q3giLG51bGwpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3Nv
cnQyIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51bGwpKSkpLG51bGwpKSkpKSksIChuZXcgc2Nf
UGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2xlbmd0
aCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDY29ucyIsKG5ldyBzY19QYWlyKCJc
dTFFOUN4MSIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDY29ucyIsKG5ldyBzY19Q
YWlyKCJcdTFFOUN4MiIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDY29ucyIsKG5l
dyBzY19QYWlyKCJcdTFFOUN4MyIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDY29u
cyIsKG5ldyBzY19QYWlyKCJcdTFFOUN4NCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUx
RTlDY29ucyIsKG5ldyBzY19QYWlyKCJcdTFFOUN4NSIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFp
cigiXHUxRTlDY29ucyIsKG5ldyBzY19QYWlyKCJcdTFFOUN4NiIsKG5ldyBzY19QYWlyKCJcdTFF
OUN4NyIsbnVsbCkpKSkpKSxudWxsKSkpKSkpLG51bGwpKSkpKSksbnVsbCkpKSkpKSxudWxsKSkp
KSkpLG51bGwpKSkpKSksbnVsbCkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlD
cGx1cyIsKG5ldyBzY19QYWlyKCg2KSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNs
ZW5ndGgiLChuZXcgc2NfUGFpcigiXHUxRTlDeDciLG51bGwpKSkpLG51bGwpKSkpKSksbnVsbCkp
KSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFp
cigiXHUxRTlDZGlmZmVyZW5jZSIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDYWRk
MSIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDYWRkMSIsKG5ldyBzY19QYWlyKCJc
dTFFOUN4IixudWxsKSkpKSxudWxsKSkpKSwobmV3IHNjX1BhaXIoKDIpLG51bGwpKSkpKSksKG5l
dyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZml4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3gi
LG51bGwpKSkpLG51bGwpKSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2Nf
UGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3F1b3RpZW50IiwobmV3IHNjX1BhaXIoKG5ldyBzY19Q
YWlyKCJcdTFFOUNwbHVzIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigobmV3
IHNjX1BhaXIoIlx1MUU5Q3BsdXMiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWly
KCJcdTFFOUN5IixudWxsKSkpKSkpLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKCgyKSxudWxsKSkp
KSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3BsdXMiLChuZXcgc2NfUGFpcigi
XHUxRTlDeCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcXVvdGllbnQiLChuZXcg
c2NfUGFpcigiXHUxRTlDeSIsKG5ldyBzY19QYWlyKCgyKSxudWxsKSkpKSkpLG51bGwpKSkpKSks
bnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcg
c2NfUGFpcigiXHUxRTlDc2lnbWEiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3pl
cm8iLG51bGwpKSwobmV3IHNjX1BhaXIoIlx1MUU5Q2kiLG51bGwpKSkpKSksKG5ldyBzY19QYWly
KChuZXcgc2NfUGFpcigiXHUxRTlDcXVvdGllbnQiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIo
Ilx1MUU5Q3RpbWVzIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2kiLChuZXcgc2NfUGFpcigobmV3IHNj
X1BhaXIoIlx1MUU5Q2FkZDEiLChuZXcgc2NfUGFpcigiXHUxRTlDaSIsbnVsbCkpKSksbnVsbCkp
KSkpKSwobmV3IHNjX1BhaXIoKDIpLG51bGwpKSkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWly
KCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcGx1cyIsKG5l
dyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNhZGQx
IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpLG51bGwpKSkpKSksKG5ldyBzY19QYWly
KChuZXcgc2NfUGFpcigiXHUxRTlDaWYiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5
Q251bWJlcnAiLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSksKG5ldyBzY19QYWlyKChu
ZXcgc2NfUGFpcigiXHUxRTlDYWRkMSIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlD
cGx1cyIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwp
KSkpKSksbnVsbCkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDYWRkMSIsKG5l
dyBzY19QYWlyKCJcdTFFOUN4IixudWxsKSkpKSxudWxsKSkpKSkpKSksbnVsbCkpKSkpKSwgKG5l
dyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlD
ZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2RpZmZlcmVuY2UiLChuZXcg
c2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IixudWxsKSkpKSkpLChuZXcg
c2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2RpZmZlcmVuY2UiLChuZXcgc2NfUGFpcigiXHUx
RTlDeiIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IixudWxsKSkpKSkpLG51bGwpKSkpKSksKG5ldyBz
Y19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDaWYiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIo
Ilx1MUU5Q2xlc3NwIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigiXHUxRTlD
eSIsbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNub3QiLChuZXcg
c2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2xlc3NwIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3ki
LChuZXcgc2NfUGFpcigiXHUxRTlDeiIsbnVsbCkpKSkpKSxudWxsKSkpKSwobmV3IHNjX1BhaXIo
KG5ldyBzY19QYWlyKCJcdTFFOUNpZiIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlD
bGVzc3AiLChuZXcgc2NfUGFpcigiXHUxRTlDeiIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IixudWxs
KSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q25vdCIsKG5ldyBzY19QYWly
KChuZXcgc2NfUGFpcigiXHUxRTlDbGVzc3AiLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsKG5ldyBz
Y19QYWlyKCJcdTFFOUN4IixudWxsKSkpKSkpLG51bGwpKSkpLChuZXcgc2NfUGFpcigobmV3IHNj
X1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNmaXgi
LChuZXcgc2NfUGFpcigiXHUxRTlDeCIsbnVsbCkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFp
cigiXHUxRTlDZml4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3oiLG51bGwpKSkpLG51bGwpKSkpKSks
bnVsbCkpKSkpKSkpLG51bGwpKSkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5
Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNtZWFuaW5nIiwobmV3IHNj
X1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNwbHVzLXRyZWUiLChuZXcgc2NfUGFpcigobmV3IHNj
X1BhaXIoIlx1MUU5Q2RlbGV0ZSIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIo
Ilx1MUU5Q3kiLG51bGwpKSkpKSksbnVsbCkpKSksKG5ldyBzY19QYWlyKCJcdTFFOUNhIixudWxs
KSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2lmIiwobmV3IHNjX1BhaXIo
KG5ldyBzY19QYWlyKCJcdTFFOUNtZW1iZXIiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBz
Y19QYWlyKCJcdTFFOUN5IixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1
MUU5Q2RpZmZlcmVuY2UiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q21lYW5pbmci
LChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3BsdXMtdHJlZSIsKG5ldyBzY19QYWly
KCJcdTFFOUN5IixudWxsKSkpKSwobmV3IHNjX1BhaXIoIlx1MUU5Q2EiLG51bGwpKSkpKSksKG5l
dyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbWVhbmluZyIsKG5ldyBzY19QYWlyKCJcdTFF
OUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q2EiLG51bGwpKSkpKSksbnVsbCkpKSkpKSwobmV3IHNj
X1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNtZWFuaW5nIiwobmV3IHNjX1BhaXIoKG5ldyBzY19Q
YWlyKCJcdTFFOUNwbHVzLXRyZWUiLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSksKG5l
dyBzY19QYWlyKCJcdTFFOUNhIixudWxsKSkpKSkpLG51bGwpKSkpKSkpKSxudWxsKSkpKSkpLCAo
bmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFF
OUN0aW1lcyIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWly
KCJcdTFFOUNhZGQxIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpLG51bGwpKSkpKSks
KG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDaWYiLChuZXcgc2NfUGFpcigobmV3IHNj
X1BhaXIoIlx1MUU5Q251bWJlcnAiLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSksKG5l
dyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcGx1cyIsKG5ldyBzY19QYWlyKCJcdTFFOUN4
IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN0aW1lcyIsKG5ldyBzY19QYWlyKCJc
dTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpKSksbnVsbCkpKSkpKSwobmV3
IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNmaXgiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIs
bnVsbCkpKSksbnVsbCkpKSkpKSkpLG51bGwpKSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1
YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q250aCIsKG5ldyBzY19QYWlyKChu
ZXcgc2NfUGFpcigiXHUxRTlDbmlsIixudWxsKSksKG5ldyBzY19QYWlyKCJcdTFFOUNpIixudWxs
KSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2lmIiwobmV3IHNjX1BhaXIo
KG5ldyBzY19QYWlyKCJcdTFFOUN6ZXJvcCIsKG5ldyBzY19QYWlyKCJcdTFFOUNpIixudWxsKSkp
KSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNuaWwiLG51bGwpKSwobmV3IHNjX1Bh
aXIoKG5ldyBzY19QYWlyKCJcdTFFOUN6ZXJvIixudWxsKSksbnVsbCkpKSkpKSkpLG51bGwpKSkp
KSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIo
Ilx1MUU5Q2xhc3QiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2FwcGVuZCIsKG5l
dyBzY19QYWlyKCJcdTFFOUNhIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2IiLG51bGwpKSkpKSksbnVs
bCkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDaWYiLChuZXcgc2NfUGFpcigo
bmV3IHNjX1BhaXIoIlx1MUU5Q2xpc3RwIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2IiLG51bGwpKSkp
LChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2xhc3QiLChuZXcgc2NfUGFpcigiXHUx
RTlDYiIsbnVsbCkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDaWYiLChuZXcg
c2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2xpc3RwIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2Ei
LG51bGwpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2NvbnMiLChuZXcgc2Nf
UGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2NhciIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigi
XHUxRTlDbGFzdCIsKG5ldyBzY19QYWlyKCJcdTFFOUNhIixudWxsKSkpKSxudWxsKSkpKSwobmV3
IHNjX1BhaXIoIlx1MUU5Q2IiLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKCJcdTFFOUNiIixudWxs
KSkpKSkpKSksbnVsbCkpKSkpKSkpLG51bGwpKSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1
YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIo
KG5ldyBzY19QYWlyKCJcdTFFOUNsZXNzcCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNj
X1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKCJcdTFFOUN6IixudWxsKSkp
KSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2lmIiwobmV3IHNjX1BhaXIoKG5l
dyBzY19QYWlyKCJcdTFFOUNsZXNzcCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1Bh
aXIoIlx1MUU5Q3kiLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlD
ZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3QiLG51bGwpKSwobmV3IHNj
X1BhaXIoIlx1MUU5Q3oiLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUx
RTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2YiLG51bGwpKSwobmV3
IHNjX1BhaXIoIlx1MUU5Q3oiLG51bGwpKSkpKSksbnVsbCkpKSkpKSkpLG51bGwpKSkpKSksIChu
ZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5
Q2Fzc2lnbm1lbnQiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKChuZXcgc2Nf
UGFpcigiXHUxRTlDYXBwZW5kIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2EiLChuZXcgc2NfUGFpcigi
XHUxRTlDYiIsbnVsbCkpKSkpKSxudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIo
Ilx1MUU5Q2lmIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNhc3NpZ25lZHAiLChu
ZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKCJcdTFFOUNhIixudWxsKSkpKSkpLChu
ZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2Fzc2lnbm1lbnQiLChuZXcgc2NfUGFpcigi
XHUxRTlDeCIsKG5ldyBzY19QYWlyKCJcdTFFOUNhIixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigo
bmV3IHNjX1BhaXIoIlx1MUU5Q2Fzc2lnbm1lbnQiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5l
dyBzY19QYWlyKCJcdTFFOUNiIixudWxsKSkpKSkpLG51bGwpKSkpKSkpKSxudWxsKSkpKSkpLCAo
bmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFF
OUNjYXIiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2dvcGhlciIsKG5ldyBzY19Q
YWlyKCJcdTFFOUN4IixudWxsKSkpKSxudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWly
KCJcdTFFOUNpZiIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbGlzdHAiLChuZXcg
c2NfUGFpcigiXHUxRTlDeCIsbnVsbCkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUx
RTlDY2FyIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNmbGF0dGVuIiwobmV3IHNj
X1BhaXIoIlx1MUU5Q3giLG51bGwpKSkpLG51bGwpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1Bh
aXIoIlx1MUU5Q3plcm8iLG51bGwpKSxudWxsKSkpKSkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19Q
YWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZmxhdHRl
biIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDY2RyIiwobmV3IHNjX1BhaXIoKG5l
dyBzY19QYWlyKCJcdTFFOUNnb3BoZXIiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsbnVsbCkpKSks
bnVsbCkpKSksbnVsbCkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDaWYiLChu
ZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2xpc3RwIiwobmV3IHNjX1BhaXIoIlx1MUU5
Q3giLG51bGwpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2NkciIsKG5ldyBz
Y19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZmxhdHRlbiIsKG5ldyBzY19QYWlyKCJcdTFFOUN4
IixudWxsKSkpKSxudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNjb25z
IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN6ZXJvIixudWxsKSksKG5ldyBzY19Q
YWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbmlsIixudWxsKSksbnVsbCkpKSkpKSxudWxsKSkpKSkp
KSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChu
ZXcgc2NfUGFpcigiXHUxRTlDcXVvdGllbnQiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1
MUU5Q3RpbWVzIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIs
bnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpKSksKG5ldyBzY19QYWly
KChuZXcgc2NfUGFpcigiXHUxRTlDaWYiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5
Q3plcm9wIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpLChuZXcgc2NfUGFpcigobmV3
IHNjX1BhaXIoIlx1MUU5Q3plcm8iLG51bGwpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJc
dTFFOUNmaXgiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsbnVsbCkpKSksbnVsbCkpKSkpKSkpLG51
bGwpKSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNj
X1BhaXIoIlx1MUU5Q2dldCIsKG5ldyBzY19QYWlyKCJcdTFFOUNqIiwobmV3IHNjX1BhaXIoKG5l
dyBzY19QYWlyKCJcdTFFOUNzZXQiLChuZXcgc2NfUGFpcigiXHUxRTlDaSIsKG5ldyBzY19QYWly
KCJcdTFFOUN2YWwiLChuZXcgc2NfUGFpcigiXHUxRTlDbWVtIixudWxsKSkpKSkpKSksbnVsbCkp
KSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNpZiIsKG5ldyBzY19QYWlyKChu
ZXcgc2NfUGFpcigiXHUxRTlDZXFwIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2oiLChuZXcgc2NfUGFp
cigiXHUxRTlDaSIsbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoIlx1MUU5Q3ZhbCIsKG5ldyBzY19Q
YWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZ2V0IiwobmV3IHNjX1BhaXIoIlx1MUU5Q2oiLChuZXcg
c2NfUGFpcigiXHUxRTlDbWVtIixudWxsKSkpKSkpLG51bGwpKSkpKSkpKSxudWxsKSkpKSkpKSk7
CisgICAgKGNvbnN0X25ib3llciA9IChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3gi
LChuZXcgc2NfUGFpcigiXHUxRTlDZiIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlD
cGx1cyIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcGx1cyIsKG5ldyBzY19QYWly
KCJcdTFFOUNhIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2IiLG51bGwpKSkpKSksKG5ldyBzY19QYWly
KChuZXcgc2NfUGFpcigiXHUxRTlDcGx1cyIsKG5ldyBzY19QYWlyKCJcdTFFOUNjIiwobmV3IHNj
X1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN6ZXJvIixudWxsKSksbnVsbCkpKSkpKSxudWxsKSkp
KSkpLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDeSIsKG5ldyBz
Y19QYWlyKCJcdTFFOUNmIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN0aW1lcyIs
KG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDdGltZXMiLChuZXcgc2NfUGFpcigiXHUx
RTlDYSIsKG5ldyBzY19QYWlyKCJcdTFFOUNiIixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3
IHNjX1BhaXIoIlx1MUU5Q3BsdXMiLChuZXcgc2NfUGFpcigiXHUxRTlDYyIsKG5ldyBzY19QYWly
KCJcdTFFOUNkIixudWxsKSkpKSkpLG51bGwpKSkpKSksbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIo
KG5ldyBzY19QYWlyKCJcdTFFOUN6IiwobmV3IHNjX1BhaXIoIlx1MUU5Q2YiLChuZXcgc2NfUGFp
cigobmV3IHNjX1BhaXIoIlx1MUU5Q3JldmVyc2UiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIo
Ilx1MUU5Q2FwcGVuZCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDYXBwZW5kIiwo
bmV3IHNjX1BhaXIoIlx1MUU5Q2EiLChuZXcgc2NfUGFpcigiXHUxRTlDYiIsbnVsbCkpKSkpKSwo
bmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNuaWwiLG51bGwpKSxudWxsKSkpKSkpLG51
bGwpKSkpLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDdSIsKG5l
dyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlD
cGx1cyIsKG5ldyBzY19QYWlyKCJcdTFFOUNhIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2IiLG51bGwp
KSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZGlmZmVyZW5jZSIsKG5ldyBz
Y19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpKSksbnVsbCkp
KSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3ciLChuZXcgc2NfUGFpcigi
XHUxRTlDbGVzc3AiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3JlbWFpbmRlciIs
KG5ldyBzY19QYWlyKCJcdTFFOUNhIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2IiLG51bGwpKSkpKSks
KG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbWVtYmVyIiwobmV3IHNjX1BhaXIoIlx1
MUU5Q2EiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2xlbmd0aCIsKG5ldyBzY19Q
YWlyKCJcdTFFOUNiIixudWxsKSkpKSxudWxsKSkpKSkpLG51bGwpKSkpKSkpKSxudWxsKSkpKSkp
KSkpKSk7CisgICAgQmdMX25ib3llcnpkMmJlbmNobWFya3pkMiA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICB2YXIgYXJncyA9IG51bGw7CisgICAgICAgIGZvciAodmFyIHNjX3RtcCA9IGFyZ3VtZW50
cy5sZW5ndGggLSAxOyBzY190bXAgPj0gMDsgc2NfdG1wLS0pIHsKKyAgICAgICAgICAgIGFyZ3Mg
PSBzY19jb25zKGFyZ3VtZW50c1tzY190bXBdLCBhcmdzKTsKKyAgICAgICAgfQorICAgICAgICB2
YXIgbjsKKyAgICAgICAgcmV0dXJuICgobiA9ICgoYXJncyA9PT0gbnVsbCk/KDApOihhcmdzLmNh
cikpKSwgKEJnTF9zZXR1cHpkMmJveWVyemQyKCkpLCAoQmdMX3J1bnpkMmJlbmNobWFya3pkMigo
Im5ib3llciIrKHNjX251bWJlcjJzdHJpbmcobikpKSwgKDEpLCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgIHJldHVybiAoQmdMX3Rlc3R6ZDJib3llcnpkMihuKSk7CisgICAgICAgIH0sIGZ1bmN0
aW9uKHJld3JpdGVzKSB7CisgICAgICAgICAgICBpZiAoKHNjX2lzTnVtYmVyKHJld3JpdGVzKSkp
CisgICAgICAgICAgICAgICAgc3dpdGNoIChuKSB7CisgICAgICAgICAgICAgICAgY2FzZSAoMCk6
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAocmV3cml0ZXM9PT0oOTUwMjQpKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAoMSk6CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAocmV3cml0ZXM9PT0oNTkxNzc3KSk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgKDIpOgorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gKHJld3JpdGVzPT09KDE4MTM5NzUpKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAoMyk6CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAocmV3cml0ZXM9PT0oNTM3NTY3OCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlICg0KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChy
ZXdyaXRlcz09PSgxNjQ0NTQwNikpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBjYXNlICg1KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZXdyaXRl
cz09PSg1MTUwNzczOSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSkpKTsKKyAgICB9OworICAg
IEJnTF9zZXR1cHpkMmJveWVyemQyID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH07CisgICAgQmdMX3Rlc3R6ZDJib3llcnpkMiA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9OworICAgIHRyYW5zbGF0ZV90ZXJtX25ib3llciA9IGZ1bmN0
aW9uKHRlcm0pIHsKKyAgICAgICAgdmFyIGxzdDsKKyAgICAgICAgcmV0dXJuICghKHRlcm0gaW5z
dGFuY2VvZiBzY19QYWlyKT90ZXJtOihuZXcgc2NfUGFpcigoQmdMX3NjX3N5bWJvbHpkMnplM3N5
bWJvbHpkMnJlY29yZF8xemUzX25ib3llcigodGVybS5jYXIpKSksICgobHN0ID0gKHRlcm0uY2Ry
KSksICgobHN0ID09PSBudWxsKT9udWxsOihuZXcgc2NfUGFpcigodHJhbnNsYXRlX3Rlcm1fbmJv
eWVyKChsc3QuY2FyKSkpLCAodHJhbnNsYXRlX2FyZ3NfbmJveWVyKChsc3QuY2RyKSkpKSkpKSkp
KTsKKyAgICB9OworICAgIHRyYW5zbGF0ZV9hcmdzX25ib3llciA9IGZ1bmN0aW9uKGxzdCkgewor
ICAgICAgICB2YXIgc2NfbHN0XzU7CisgICAgICAgIHZhciB0ZXJtOworICAgICAgICByZXR1cm4g
KChsc3QgPT09IG51bGwpP251bGw6KG5ldyBzY19QYWlyKCgodGVybSA9IChsc3QuY2FyKSksICgh
KHRlcm0gaW5zdGFuY2VvZiBzY19QYWlyKT90ZXJtOihuZXcgc2NfUGFpcigoQmdMX3NjX3N5bWJv
bHpkMnplM3N5bWJvbHpkMnJlY29yZF8xemUzX25ib3llcigodGVybS5jYXIpKSksICh0cmFuc2xh
dGVfYXJnc19uYm95ZXIoKHRlcm0uY2RyKSkpKSkpKSwgKChzY19sc3RfNSA9IChsc3QuY2RyKSks
ICgoc2NfbHN0XzUgPT09IG51bGwpP251bGw6KG5ldyBzY19QYWlyKCh0cmFuc2xhdGVfdGVybV9u
Ym95ZXIoKHNjX2xzdF81LmNhcikpKSwgKHRyYW5zbGF0ZV9hcmdzX25ib3llcigoc2NfbHN0XzUu
Y2RyKSkpKSkpKSkpKTsKKyAgICB9OworICAgIHVudHJhbnNsYXRlX3Rlcm1fbmJveWVyID0gZnVu
Y3Rpb24odGVybSkgeworICAgICAgICB2YXIgb3B0ck9wbmQ7CisgICAgICAgIHZhciB0YWlsMTEz
MTsKKyAgICAgICAgdmFyIEwxMTI3OworICAgICAgICB2YXIgZmFsc2VIZWFkMTEzMDsKKyAgICAg
ICAgdmFyIHN5bWJvbF9yZWNvcmQ7CisgICAgICAgIGlmICghKHRlcm0gaW5zdGFuY2VvZiBzY19Q
YWlyKSkKKyAgICAgICAgICAgIHJldHVybiB0ZXJtOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgKGZhbHNlSGVhZDExMzAgPSAobmV3IHNjX1BhaXIobnVsbCwg
bnVsbCkpKTsKKyAgICAgICAgICAgICAgICAoTDExMjcgPSAodGVybS5jZHIpKTsKKyAgICAgICAg
ICAgICAgICAodGFpbDExMzEgPSBmYWxzZUhlYWQxMTMwKTsKKyAgICAgICAgICAgICAgICB3aGls
ZSAoIShMMTEyNyA9PT0gbnVsbCkpIHsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgKHRhaWwxMTMxLmNkciA9IChuZXcgc2NfUGFpcigodW50cmFuc2xhdGVf
dGVybV9uYm95ZXIoKEwxMTI3LmNhcikpKSwgbnVsbCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICh0YWlsMTEzMSA9ICh0YWlsMTEzMS5jZHIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IChMMTEyNyA9IChMMTEyNy5jZHIpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAob3B0ck9wbmQgPSAoZmFsc2VIZWFkMTEzMC5jZHIp
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKG5ldyBzY19QYWlyKCgoc3ltYm9sX3JlY29yZCA9
ICh0ZXJtLmNhcikpLCAoc3ltYm9sX3JlY29yZFsoMCldKSksIG9wdHJPcG5kKSk7CisgICAgICAg
ICAgICB9CisgICAgfTsKKyAgICBCZ0xfc2Nfc3ltYm9semQyemUzc3ltYm9semQycmVjb3JkXzF6
ZTNfbmJveWVyID0gZnVuY3Rpb24oc3ltKSB7CisgICAgICAgIHZhciByOworICAgICAgICB2YXIg
eDsKKyAgICAgICAgcmV0dXJuICgoeCA9IChzY19hc3NxKHN5bSwgQmdMX3NjX3phMnN5bWJvbHpk
MnJlY29yZHN6ZDJhbGlzdHphMl8yejAwX25ib3llcikpKSwgKCh4IT09IGZhbHNlKT8oeC5jZHIp
OigociA9IFtzeW0sIG51bGxdKSwgKEJnTF9zY196YTJzeW1ib2x6ZDJyZWNvcmRzemQyYWxpc3R6
YTJfMnowMF9uYm95ZXIgPSAobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKHN5bSwgcikpLCBCZ0xf
c2NfemEyc3ltYm9semQycmVjb3Jkc3pkMmFsaXN0emEyXzJ6MDBfbmJveWVyKSkpLCByKSkpOwor
ICAgIH07CisgICAgKEJnTF9zY196YTJzeW1ib2x6ZDJyZWNvcmRzemQyYWxpc3R6YTJfMnowMF9u
Ym95ZXIgPSBudWxsKTsKKyAgICB0cmFuc2xhdGVfYWxpc3RfbmJveWVyID0gZnVuY3Rpb24oYWxp
c3QpIHsKKyAgICAgICAgdmFyIHNjX2FsaXN0XzY7CisgICAgICAgIHZhciB0ZXJtOworICAgICAg
ICByZXR1cm4gKChhbGlzdCA9PT0gbnVsbCk/bnVsbDoobmV3IHNjX1BhaXIoKG5ldyBzY19QYWly
KChhbGlzdC5jYXIuY2FyKSwgKCh0ZXJtID0gKGFsaXN0LmNhci5jZHIpKSwgKCEodGVybSBpbnN0
YW5jZW9mIHNjX1BhaXIpP3Rlcm06KG5ldyBzY19QYWlyKChCZ0xfc2Nfc3ltYm9semQyemUzc3lt
Ym9semQycmVjb3JkXzF6ZTNfbmJveWVyKCh0ZXJtLmNhcikpKSwgKHRyYW5zbGF0ZV9hcmdzX25i
b3llcigodGVybS5jZHIpKSkpKSkpKSksICgoc2NfYWxpc3RfNiA9IChhbGlzdC5jZHIpKSwgKChz
Y19hbGlzdF82ID09PSBudWxsKT9udWxsOihuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoKHNjX2Fs
aXN0XzYuY2FyLmNhciksICh0cmFuc2xhdGVfdGVybV9uYm95ZXIoKHNjX2FsaXN0XzYuY2FyLmNk
cikpKSkpLCAodHJhbnNsYXRlX2FsaXN0X25ib3llcigoc2NfYWxpc3RfNi5jZHIpKSkpKSkpKSkp
OworICAgIH07CisgICAgYXBwbHlfc3Vic3RfbmJveWVyID0gZnVuY3Rpb24oYWxpc3QsIHRlcm0p
IHsKKyAgICAgICAgdmFyIGxzdDsKKyAgICAgICAgdmFyIHRlbXBfdGVtcDsKKyAgICAgICAgcmV0
dXJuICghKHRlcm0gaW5zdGFuY2VvZiBzY19QYWlyKT8oKHRlbXBfdGVtcCA9IChzY19hc3NxKHRl
cm0sIGFsaXN0KSkpLCAoKHRlbXBfdGVtcCE9PSBmYWxzZSk/KHRlbXBfdGVtcC5jZHIpOnRlcm0p
KToobmV3IHNjX1BhaXIoKHRlcm0uY2FyKSwgKChsc3QgPSAodGVybS5jZHIpKSwgKChsc3QgPT09
IG51bGwpP251bGw6KG5ldyBzY19QYWlyKChhcHBseV9zdWJzdF9uYm95ZXIoYWxpc3QsIChsc3Qu
Y2FyKSkpLCAoYXBwbHlfc3Vic3RfbHN0X25ib3llcihhbGlzdCwgKGxzdC5jZHIpKSkpKSkpKSkp
OworICAgIH07CisgICAgYXBwbHlfc3Vic3RfbHN0X25ib3llciA9IGZ1bmN0aW9uKGFsaXN0LCBs
c3QpIHsKKyAgICAgICAgdmFyIHNjX2xzdF83OworICAgICAgICByZXR1cm4gKChsc3QgPT09IG51
bGwpP251bGw6KG5ldyBzY19QYWlyKChhcHBseV9zdWJzdF9uYm95ZXIoYWxpc3QsIChsc3QuY2Fy
KSkpLCAoKHNjX2xzdF83ID0gKGxzdC5jZHIpKSwgKChzY19sc3RfNyA9PT0gbnVsbCk/bnVsbDoo
bmV3IHNjX1BhaXIoKGFwcGx5X3N1YnN0X25ib3llcihhbGlzdCwgKHNjX2xzdF83LmNhcikpKSwg
KGFwcGx5X3N1YnN0X2xzdF9uYm95ZXIoYWxpc3QsIChzY19sc3RfNy5jZHIpKSkpKSkpKSkpOwor
ICAgIH07CisgICAgdGF1dG9sb2d5cF9uYm95ZXIgPSBmdW5jdGlvbihzY194XzExLCB0cnVlX2xz
dCwgZmFsc2VfbHN0KSB7CisgICAgICAgIHZhciB0bXAxMTI1OworICAgICAgICB2YXIgeDsKKyAg
ICAgICAgdmFyIHRtcDExMjY7CisgICAgICAgIHZhciBzY194Xzg7CisgICAgICAgIHZhciBzY190
bXAxMTI1Xzk7CisgICAgICAgIHZhciBzY190bXAxMTI2XzEwOworICAgICAgICB2YXIgc2NfeF8x
MTsKKyAgICAgICAgdmFyIHRydWVfbHN0OworICAgICAgICB2YXIgZmFsc2VfbHN0OworICAgICAg
ICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgaWYgKCgoKHNjX3RtcDExMjZfMTAgPSAoaXNf
dGVybV9lcXVhbF9uYm95ZXIoc2NfeF8xMSwgdHJ1ZV90ZXJtX25ib3llcikpKSwgKChzY190bXAx
MTI2XzEwIT09IGZhbHNlKT9zY190bXAxMTI2XzEwOihpc190ZXJtX21lbWJlcl9uYm95ZXIoc2Nf
eF8xMSwgdHJ1ZV9sc3QpKSkpIT09IGZhbHNlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpZiAoKCgoc2NfdG1wMTEyNV85
ID0gKGlzX3Rlcm1fZXF1YWxfbmJveWVyKHNjX3hfMTEsIGZhbHNlX3Rlcm1fbmJveWVyKSkpLCAo
KHNjX3RtcDExMjVfOSE9PSBmYWxzZSk/c2NfdG1wMTEyNV85Oihpc190ZXJtX21lbWJlcl9uYm95
ZXIoc2NfeF8xMSwgZmFsc2VfbHN0KSkpKSE9PSBmYWxzZSkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IGlmICghKHNjX3hfMTEgaW5zdGFuY2VvZiBzY19QYWlyKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCgoc2NfeF8xMS5jYXIpPT09aWZfY29uc3RydWN0b3JfbmJveWVyKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCgoc2NfeF84ID0gKHNjX3hfMTEuY2Ry
LmNhcikpLCAodG1wMTEyNiA9IChpc190ZXJtX2VxdWFsX25ib3llcihzY194XzgsIHRydWVfdGVy
bV9uYm95ZXIpKSksICgodG1wMTEyNiE9PSBmYWxzZSk/dG1wMTEyNjooaXNfdGVybV9tZW1iZXJf
bmJveWVyKHNjX3hfOCwgdHJ1ZV9sc3QpKSkpIT09IGZhbHNlKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHNjX3hfMTEgPSAoc2NfeF8xMS5jZHIuY2RyLmNhcikpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCgoKHggPSAoc2NfeF8xMS5jZHIuY2FyKSksICh0bXAxMTI1ID0gKGlzX3Rlcm1fZXF1
YWxfbmJveWVyKHgsIGZhbHNlX3Rlcm1fbmJveWVyKSkpLCAoKHRtcDExMjUhPT0gZmFsc2UpP3Rt
cDExMjU6KGlzX3Rlcm1fbWVtYmVyX25ib3llcih4LCBmYWxzZV9sc3QpKSkpIT09IGZhbHNlKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzY194XzExID0gKHNjX3hfMTEu
Y2RyLmNkci5jZHIuY2FyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKHRhdXRvbG9neXBfbmJv
eWVyKChzY194XzExLmNkci5jZHIuY2FyKSwgKG5ldyBzY19QYWlyKChzY194XzExLmNkci5jYXIp
LCB0cnVlX2xzdCkpLCBmYWxzZV9sc3QpKSE9PSBmYWxzZSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoZmFsc2VfbHN0ID0gKG5ldyBzY19QYWlyKChzY194XzExLmNkci5jYXIpLCBm
YWxzZV9sc3QpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChzY194XzExID0gKHNjX3hfMTEuY2RyLmNkci5jZHIuY2FyKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9OworICAgIChpZl9jb25z
dHJ1Y3Rvcl9uYm95ZXIgPSAiXHUxRTlDKiIpOworICAgIChyZXdyaXRlX2NvdW50X25ib3llciA9
ICgwKSk7CisgICAgcmV3cml0ZV9uYm95ZXIgPSBmdW5jdGlvbih0ZXJtKSB7CisgICAgICAgIHZh
ciB0ZXJtMjsKKyAgICAgICAgdmFyIHNjX3Rlcm1fMTI7CisgICAgICAgIHZhciBsc3Q7CisgICAg
ICAgIHZhciBzeW1ib2xfcmVjb3JkOworICAgICAgICB2YXIgc2NfbHN0XzEzOworICAgICAgICB7
CisgICAgICAgICAgICAoKytyZXdyaXRlX2NvdW50X25ib3llcik7CisgICAgICAgICAgICBpZiAo
ISh0ZXJtIGluc3RhbmNlb2Ygc2NfUGFpcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRlcm07
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAoc2NfdGVybV8xMiA9IChuZXcgc2NfUGFpcigodGVybS5jYXIpLCAoKHNjX2xzdF8xMyA9ICh0
ZXJtLmNkcikpLCAoKHNjX2xzdF8xMyA9PT0gbnVsbCk/bnVsbDoobmV3IHNjX1BhaXIoKHJld3Jp
dGVfbmJveWVyKChzY19sc3RfMTMuY2FyKSkpLCAocmV3cml0ZV9hcmdzX25ib3llcigoc2NfbHN0
XzEzLmNkcikpKSkpKSkpKSk7CisgICAgICAgICAgICAgICAgICAgIChsc3QgPSAoKHN5bWJvbF9y
ZWNvcmQgPSAodGVybS5jYXIpKSwgKHN5bWJvbF9yZWNvcmRbKDEpXSkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobHN0
ID09PSBudWxsKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NfdGVybV8x
MjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoKCgodGVybTIgPSAoKGxzdC5jYXIpLmNkci5jYXIpKSwgKHVuaWZ5X3N1YnN0X25i
b3llciA9IG51bGwpLCAob25lX3dheV91bmlmeTFfbmJveWVyKHNjX3Rlcm1fMTIsIHRlcm0yKSkp
IT09IGZhbHNlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZXdy
aXRlX25ib3llcigoYXBwbHlfc3Vic3RfbmJveWVyKHVuaWZ5X3N1YnN0X25ib3llciwgKChsc3Qu
Y2FyKS5jZHIuY2RyLmNhcikpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxzdCA9IChsc3QuY2RyKSk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Owor
ICAgIHJld3JpdGVfYXJnc19uYm95ZXIgPSBmdW5jdGlvbihsc3QpIHsKKyAgICAgICAgdmFyIHNj
X2xzdF8xNDsKKyAgICAgICAgcmV0dXJuICgobHN0ID09PSBudWxsKT9udWxsOihuZXcgc2NfUGFp
cigocmV3cml0ZV9uYm95ZXIoKGxzdC5jYXIpKSksICgoc2NfbHN0XzE0ID0gKGxzdC5jZHIpKSwg
KChzY19sc3RfMTQgPT09IG51bGwpP251bGw6KG5ldyBzY19QYWlyKChyZXdyaXRlX25ib3llcigo
c2NfbHN0XzE0LmNhcikpKSwgKHJld3JpdGVfYXJnc19uYm95ZXIoKHNjX2xzdF8xNC5jZHIpKSkp
KSkpKSkpOworICAgIH07CisgICAgKHVuaWZ5X3N1YnN0X25ib3llciA9ICJcdTFFOUMqIik7Cisg
ICAgb25lX3dheV91bmlmeTFfbmJveWVyID0gZnVuY3Rpb24odGVybTEsIHRlcm0yKSB7CisgICAg
ICAgIHZhciBsc3QxOworICAgICAgICB2YXIgbHN0MjsKKyAgICAgICAgdmFyIHRlbXBfdGVtcDsK
KyAgICAgICAgaWYgKCEodGVybTIgaW5zdGFuY2VvZiBzY19QYWlyKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAodGVtcF90ZW1wID0gKHNjX2Fzc3EodGVybTIsIHVuaWZ5X3N1YnN0
X25ib3llcikpKTsKKyAgICAgICAgICAgICAgICBpZiAoKHRlbXBfdGVtcCE9PSBmYWxzZSkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAoaXNfdGVybV9lcXVhbF9uYm95ZXIodGVybTEsICh0
ZW1wX3RlbXAuY2RyKSkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKChzY19pc051bWJlcih0ZXJtMikpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIChzY19pc0VxdWFsKHRlcm0xLCB0ZXJtMikpOworICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHVuaWZ5X3N1YnN0X25ib3llciA9IChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIodGVybTIsIHRl
cm0xKSksIHVuaWZ5X3N1YnN0X25ib3llcikpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgKCEodGVybTEgaW5zdGFuY2VvZiBzY19QYWly
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgaWYgKCgodGVybTEuY2FyKT09PSh0ZXJtMi5jYXIpKSkKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgKGxzdDEgPSAodGVybTEuY2RyKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAobHN0MiA9ICh0ZXJtMi5jZHIpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKChsc3QxID09PSBudWxsKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIChsc3QyID09PSBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobHN0MiA9PT0gbnVsbCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICgoKG9uZV93YXlfdW5pZnkxX25ib3llcigobHN0MS5jYXIpLCAobHN0Mi5j
YXIpKSkhPT0gZmFsc2UpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxzdDEgPSAo
bHN0MS5jZHIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGxzdDIgPSAobHN0Mi5jZHIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKyAgICAoZmFs
c2VfdGVybV9uYm95ZXIgPSAiXHUxRTlDKiIpOworICAgICh0cnVlX3Rlcm1fbmJveWVyID0gIlx1
MUU5QyoiKTsKKyAgICB0cmFuc19vZl9pbXBsaWVzMV9uYm95ZXIgPSBmdW5jdGlvbihuKSB7Cisg
ICAgICAgIHZhciBzY19uXzE1OworICAgICAgICByZXR1cm4gKChzY19pc0VxdWFsKG4sICgxKSkp
PyhzY19saXN0KCJcdTFFOUNpbXBsaWVzIiwgKDApLCAoMSkpKTooc2NfbGlzdCgiXHUxRTlDYW5k
IiwgKHNjX2xpc3QoIlx1MUU5Q2ltcGxpZXMiLCAobi0oMSkpLCBuKSksICgoc2Nfbl8xNSA9IChu
LSgxKSkpLCAoKHNjX2lzRXF1YWwoc2Nfbl8xNSwgKDEpKSk/KHNjX2xpc3QoIlx1MUU5Q2ltcGxp
ZXMiLCAoMCksICgxKSkpOihzY19saXN0KCJcdTFFOUNhbmQiLCAoc2NfbGlzdCgiXHUxRTlDaW1w
bGllcyIsIChzY19uXzE1LSgxKSksIHNjX25fMTUpKSwgKHRyYW5zX29mX2ltcGxpZXMxX25ib3ll
cigoc2Nfbl8xNS0oMSkpKSkpKSkpKSkpOworICAgIH07CisgICAgaXNfdGVybV9lcXVhbF9uYm95
ZXIgPSBmdW5jdGlvbih4LCB5KSB7CisgICAgICAgIHZhciBsc3QxOworICAgICAgICB2YXIgbHN0
MjsKKyAgICAgICAgdmFyIHIyOworICAgICAgICB2YXIgcjE7CisgICAgICAgIGlmICgoeCBpbnN0
YW5jZW9mIHNjX1BhaXIpKQorICAgICAgICAgICAgaWYgKCh5IGluc3RhbmNlb2Ygc2NfUGFpcikp
CisgICAgICAgICAgICAgICAgaWYgKCgoKHIxID0gKHguY2FyKSksIChyMiA9ICh5LmNhcikpLCAo
cjE9PT1yMikpIT09IGZhbHNlKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgKGxzdDEgPSAoeC5jZHIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIChs
c3QyID0gKHkuY2RyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobHN0MSA9PT0gbnVsbCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobHN0MiA9PT0gbnVsbCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoKGxzdDIgPT09IG51bGwpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChpc190ZXJtX2VxdWFsX25i
b3llcigobHN0MS5jYXIpLCAobHN0Mi5jYXIpKSkhPT0gZmFsc2UpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGxzdDEgPSAobHN0MS5jZHIpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGxzdDIgPSAobHN0Mi5jZHIpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gKHNjX2lzRXF1YWwoeCwgeSkpOworICAg
IH07CisgICAgaXNfdGVybV9tZW1iZXJfbmJveWVyID0gZnVuY3Rpb24oeCwgbHN0KSB7CisgICAg
ICAgIHZhciB4OworICAgICAgICB2YXIgbHN0OworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAg
ICAgICAgICAgaWYgKChsc3QgPT09IG51bGwpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpZiAoKChpc190ZXJtX2VxdWFs
X25ib3llcih4LCAobHN0LmNhcikpKSE9PSBmYWxzZSkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgKGxz
dCA9IChsc3QuY2RyKSk7CisgICAgICAgIH0KKyAgICB9OworICAgIEJnTF9zZXR1cHpkMmJveWVy
emQyID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBzeW1ib2xfcmVjb3JkOworICAgICAgICB2
YXIgdmFsdWU7CisgICAgICAgIHZhciBCZ0xfc2Nfc3ltYm9semQycmVjb3JkXzE2emQyOworICAg
ICAgICB2YXIgc3ltOworICAgICAgICB2YXIgc2Nfc3ltXzE3OworICAgICAgICB2YXIgdGVybTsK
KyAgICAgICAgdmFyIGxzdDsKKyAgICAgICAgdmFyIHNjX3Rlcm1fMTg7CisgICAgICAgIHZhciBz
Y190ZXJtXzE5OworICAgICAgICB7CisgICAgICAgICAgICAoQmdMX3NjX3phMnN5bWJvbHpkMnJl
Y29yZHN6ZDJhbGlzdHphMl8yejAwX25ib3llciA9IG51bGwpOworICAgICAgICAgICAgKGlmX2Nv
bnN0cnVjdG9yX25ib3llciA9IChCZ0xfc2Nfc3ltYm9semQyemUzc3ltYm9semQycmVjb3JkXzF6
ZTNfbmJveWVyKCJcdTFFOUNpZiIpKSk7CisgICAgICAgICAgICAoZmFsc2VfdGVybV9uYm95ZXIg
PSAoKHNjX3Rlcm1fMTkgPSAobmV3IHNjX1BhaXIoIlx1MUU5Q2YiLG51bGwpKSksICghKHNjX3Rl
cm1fMTkgaW5zdGFuY2VvZiBzY19QYWlyKT9zY190ZXJtXzE5OihuZXcgc2NfUGFpcigoQmdMX3Nj
X3N5bWJvbHpkMnplM3N5bWJvbHpkMnJlY29yZF8xemUzX25ib3llcigoc2NfdGVybV8xOS5jYXIp
KSksICh0cmFuc2xhdGVfYXJnc19uYm95ZXIoKHNjX3Rlcm1fMTkuY2RyKSkpKSkpKSk7CisgICAg
ICAgICAgICAodHJ1ZV90ZXJtX25ib3llciA9ICgoc2NfdGVybV8xOCA9IChuZXcgc2NfUGFpcigi
XHUxRTlDdCIsbnVsbCkpKSwgKCEoc2NfdGVybV8xOCBpbnN0YW5jZW9mIHNjX1BhaXIpP3NjX3Rl
cm1fMTg6KG5ldyBzY19QYWlyKChCZ0xfc2Nfc3ltYm9semQyemUzc3ltYm9semQycmVjb3JkXzF6
ZTNfbmJveWVyKChzY190ZXJtXzE4LmNhcikpKSwgKHRyYW5zbGF0ZV9hcmdzX25ib3llcigoc2Nf
dGVybV8xOC5jZHIpKSkpKSkpKTsKKyAgICAgICAgICAgIChsc3QgPSBzY19jb25zdF8zX25ib3ll
cik7CisgICAgICAgICAgICB3aGlsZSAoIShsc3QgPT09IG51bGwpKSB7CisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAodGVybSA9IChsc3QuY2FyKSk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICgoKHRlcm0gaW5zdGFuY2VvZiBzY19QYWlyKSYmKCgodGVybS5jYXIpPT09
Ilx1MUU5Q2VxdWFsIikmJigodGVybS5jZHIuY2FyKSBpbnN0YW5jZW9mIHNjX1BhaXIpKSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNj
X3N5bV8xNyA9ICgodGVybS5jZHIuY2FyKS5jYXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAodmFsdWUgPSAobmV3IHNjX1BhaXIoKCEodGVybSBpbnN0YW5jZW9mIHNjX1BhaXIpP3Rl
cm06KG5ldyBzY19QYWlyKChCZ0xfc2Nfc3ltYm9semQyemUzc3ltYm9semQycmVjb3JkXzF6ZTNf
bmJveWVyKCh0ZXJtLmNhcikpKSwgKHRyYW5zbGF0ZV9hcmdzX25ib3llcigodGVybS5jZHIpKSkp
KSksICgoc3ltID0gKCh0ZXJtLmNkci5jYXIpLmNhcikpLCAoQmdMX3NjX3N5bWJvbHpkMnJlY29y
ZF8xNnpkMiA9IChCZ0xfc2Nfc3ltYm9semQyemUzc3ltYm9semQycmVjb3JkXzF6ZTNfbmJveWVy
KHN5bSkpKSwgKEJnTF9zY19zeW1ib2x6ZDJyZWNvcmRfMTZ6ZDJbKDEpXSkpKSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChzeW1ib2xfcmVjb3JkID0gKEJnTF9zY19zeW1ib2x6ZDJ6
ZTNzeW1ib2x6ZDJyZWNvcmRfMXplM19uYm95ZXIoc2Nfc3ltXzE3KSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChzeW1ib2xfcmVjb3JkWygxKV0gPSB2YWx1ZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgICAgIChzY19lcnJvcigiQURELUxFTU1BIGRpZCBub3QgbGlrZSB0ZXJtOiAgIiwgdGVy
bSkpOworICAgICAgICAgICAgICAgICAgICAobHN0ID0gKGxzdC5jZHIpKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgIH07CisgICAgQmdMX3Rlc3R6ZDJib3llcnpkMiA9IGZ1bmN0aW9uKG4pIHsKKyAgICAg
ICAgdmFyIG9wdHJPcG5kOworICAgICAgICB2YXIgdGVybTsKKyAgICAgICAgdmFyIHNjX25fMjA7
CisgICAgICAgIHZhciBhbnN3ZXI7CisgICAgICAgIHZhciBzY190ZXJtXzIxOworICAgICAgICB2
YXIgc2NfdGVybV8yMjsKKyAgICAgICAgeworICAgICAgICAgICAgKHJld3JpdGVfY291bnRfbmJv
eWVyID0gKDApKTsKKyAgICAgICAgICAgICh0ZXJtID0gc2NfY29uc3RfNF9uYm95ZXIpOworICAg
ICAgICAgICAgKHNjX25fMjAgPSBuKTsKKyAgICAgICAgICAgIHdoaWxlICghKHNjX25fMjA9PT0g
MCkpIHsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICh0ZXJtID0gKHNj
X2xpc3QoIlx1MUU5Q29yIiwgdGVybSwgKG5ldyBzY19QYWlyKCJcdTFFOUNmIixudWxsKSkpKSk7
CisgICAgICAgICAgICAgICAgICAgICgtLXNjX25fMjApOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIChzY190ZXJtXzIyID0gdGVybSk7CisgICAgICAgICAg
ICBpZiAoIShzY190ZXJtXzIyIGluc3RhbmNlb2Ygc2NfUGFpcikpCisgICAgICAgICAgICAgICAg
KG9wdHJPcG5kID0gc2NfdGVybV8yMik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgKG9wdHJPcG5kID0gKG5ldyBzY19QYWlyKChCZ0xfc2Nfc3ltYm9semQyemUzc3ltYm9semQy
cmVjb3JkXzF6ZTNfbmJveWVyKChzY190ZXJtXzIyLmNhcikpKSwgKHRyYW5zbGF0ZV9hcmdzX25i
b3llcigoc2NfdGVybV8yMi5jZHIpKSkpKSk7CisgICAgICAgICAgICAoc2NfdGVybV8yMSA9IChh
cHBseV9zdWJzdF9uYm95ZXIoKChjb25zdF9uYm95ZXIgPT09IG51bGwpP251bGw6KG5ldyBzY19Q
YWlyKChuZXcgc2NfUGFpcigoY29uc3RfbmJveWVyLmNhci5jYXIpLCAodHJhbnNsYXRlX3Rlcm1f
bmJveWVyKChjb25zdF9uYm95ZXIuY2FyLmNkcikpKSkpLCAodHJhbnNsYXRlX2FsaXN0X25ib3ll
cigoY29uc3RfbmJveWVyLmNkcikpKSkpKSwgb3B0ck9wbmQpKSk7CisgICAgICAgICAgICAoYW5z
d2VyID0gKHRhdXRvbG9neXBfbmJveWVyKChyZXdyaXRlX25ib3llcihzY190ZXJtXzIxKSksIG51
bGwsIG51bGwpKSk7CisgICAgICAgICAgICAoc2Nfd3JpdGUocmV3cml0ZV9jb3VudF9uYm95ZXIp
KTsKKyAgICAgICAgICAgIChzY19kaXNwbGF5KCIgcmV3cml0ZXMiKSk7CisgICAgICAgICAgICAo
c2NfbmV3bGluZSgpKTsKKyAgICAgICAgICAgIGlmICgoYW5zd2VyIT09IGZhbHNlKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcmV3cml0ZV9jb3VudF9uYm95ZXI7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfTsKK30KKy8q
IEV4cG9ydGVkIFZhcmlhYmxlcyAqLwordmFyIEJnTF9wYXJzZXpkMnplM25iemQydHJlZXN6ZTM7
Cit2YXIgQmdMX2VhcmxleXpkMmJlbmNobWFya3pkMjsKK3ZhciBCZ0xfcGFyc2V6ZDJ6ZTNwYXJz
ZWR6ZjN6YzI7Cit2YXIgdGVzdDsKK3ZhciBCZ0xfcGFyc2V6ZDJ6ZTN0cmVlc3ozMTsKK3ZhciBC
Z0xfbWFrZXpkMnBhcnNlcnpkMjsKKy8qIEVuZCBFeHBvcnRzICovCisKK3ZhciBjb25zdF9lYXJs
ZXk7Cit7CisgICAgKGNvbnN0X2VhcmxleSA9IChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1
MUU5Q3MiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2EiLG51bGwpKSwobmV3IHNj
X1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNzIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3MiLG51bGwp
KSkpLG51bGwpKSkpKSksbnVsbCkpKTsKKyAgICBCZ0xfbWFrZXpkMnBhcnNlcnpkMiA9IGZ1bmN0
aW9uKGdyYW1tYXIsIGxleGVyKSB7CisgICAgICAgIHZhciBpOworICAgICAgICB2YXIgcGFyc2Vy
X2Rlc2NyOworICAgICAgICB2YXIgZGVmX2xvb3A7CisgICAgICAgIHZhciBuYl9udHM7CisgICAg
ICAgIHZhciBuYW1lczsKKyAgICAgICAgdmFyIHN0ZXBzOworICAgICAgICB2YXIgcHJlZGljdG9y
czsKKyAgICAgICAgdmFyIGVuZGVyczsKKyAgICAgICAgdmFyIHN0YXJ0ZXJzOworICAgICAgICB2
YXIgbnRzOworICAgICAgICB2YXIgc2NfbmFtZXNfMTsKKyAgICAgICAgdmFyIHNjX3N0ZXBzXzI7
CisgICAgICAgIHZhciBzY19wcmVkaWN0b3JzXzM7CisgICAgICAgIHZhciBzY19lbmRlcnNfNDsK
KyAgICAgICAgdmFyIHNjX3N0YXJ0ZXJzXzU7CisgICAgICAgIHZhciBuYl9jb25mczsKKyAgICAg
ICAgdmFyIEJnTF9zY19kZWZ6ZDJsb29wXzZ6ZDI7CisgICAgICAgIHZhciBCZ0xfc2NfbmJ6ZDJu
dHNfN3pkMjsKKyAgICAgICAgdmFyIHNjX250c184OworICAgICAgICB2YXIgQmdMX3NjX2RlZnpk
Mmxvb3BfOXpkMjsKKyAgICAgICAgdmFyIGluZDsKKyAgICAgICAgeworICAgICAgICAgICAgaW5k
ID0gZnVuY3Rpb24obnQsIHNjX250c18xMCkgeworICAgICAgICAgICAgICAgIHZhciBpOworICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKGkgPSAoKHNjX250c18xMC5sZW5n
dGgpLSgxKSkpOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKChpPj0oMCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICgoc2NfaXNFcXVhbCgoc2NfbnRzXzEwW2ldKSwgbnQpKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLS1pKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
OworICAgICAgICAgICAgKHNjX250c184ID0gKChCZ0xfc2NfZGVmemQybG9vcF85emQyID0gZnVu
Y3Rpb24oZGVmcywgc2NfbnRzXzExKSB7CisgICAgICAgICAgICAgICAgdmFyIHJ1bGVfbG9vcDsK
KyAgICAgICAgICAgICAgICB2YXIgaGVhZDsKKyAgICAgICAgICAgICAgICB2YXIgZGVmOworICAg
ICAgICAgICAgICAgIHJldHVybiAoKGRlZnMgaW5zdGFuY2VvZiBzY19QYWlyKT8oKGRlZiA9IChk
ZWZzLmNhcikpLCAoaGVhZCA9IChkZWYuY2FyKSksIChydWxlX2xvb3AgPSBmdW5jdGlvbihydWxl
cywgc2NfbnRzXzEyKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBudDsKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIGw7CisgICAgICAgICAgICAgICAgICAgIHZhciBzY19udHNfMTM7CisgICAg
ICAgICAgICAgICAgICAgIHZhciBydWxlOworICAgICAgICAgICAgICAgICAgICBpZiAoKHJ1bGVz
IGluc3RhbmNlb2Ygc2NfUGFpcikpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHJ1bGUgPSAocnVsZXMuY2FyKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGwgPSBydWxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
c2NfbnRzXzEzID0gc2NfbnRzXzEyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGls
ZSAoKGwgaW5zdGFuY2VvZiBzY19QYWlyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnQgPSAobC5jYXIp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsID0gKGwuY2RyKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2NfbnRzXzEzID0gKCgoc2NfbWVt
YmVyKG50LCBzY19udHNfMTMpKSE9PSBmYWxzZSk/c2NfbnRzXzEzOihuZXcgc2NfUGFpcihudCwg
c2NfbnRzXzEzKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gKHJ1bGVfbG9vcCgocnVsZXMuY2RyKSwgc2NfbnRzXzEzKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAoQmdMX3NjX2RlZnpkMmxvb3BfOXpkMigoZGVmcy5jZHIpLCBzY19udHNfMTIp
KTsKKyAgICAgICAgICAgICAgICB9KSwgKHJ1bGVfbG9vcCgoZGVmLmNkciksICgoKHNjX21lbWJl
cihoZWFkLCBzY19udHNfMTEpKSE9PSBmYWxzZSk/c2NfbnRzXzExOihuZXcgc2NfUGFpcihoZWFk
LCBzY19udHNfMTEpKSkpKSk6KHNjX2xpc3QydmVjdG9yKChzY19yZXZlcnNlKHNjX250c18xMSkp
KSkpOworICAgICAgICAgICAgfSksIChCZ0xfc2NfZGVmemQybG9vcF85emQyKGdyYW1tYXIsIG51
bGwpKSkpOworICAgICAgICAgICAgKEJnTF9zY19uYnpkMm50c183emQyID0gKHNjX250c184Lmxl
bmd0aCkpOworICAgICAgICAgICAgKG5iX2NvbmZzID0gKCgoQmdMX3NjX2RlZnpkMmxvb3BfNnpk
MiA9IGZ1bmN0aW9uKGRlZnMsIEJnTF9zY19uYnpkMmNvbmZzXzE0emQyKSB7CisgICAgICAgICAg
ICAgICAgdmFyIHJ1bGVfbG9vcDsKKyAgICAgICAgICAgICAgICB2YXIgZGVmOworICAgICAgICAg
ICAgICAgIHJldHVybiAoKGRlZnMgaW5zdGFuY2VvZiBzY19QYWlyKT8oKGRlZiA9IChkZWZzLmNh
cikpLCAocnVsZV9sb29wID0gZnVuY3Rpb24ocnVsZXMsIEJnTF9zY19uYnpkMmNvbmZzXzE1emQy
KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBsOworICAgICAgICAgICAgICAgICAgICB2YXIg
QmdMX3NjX25iemQyY29uZnNfMTZ6ZDI7CisgICAgICAgICAgICAgICAgICAgIHZhciBydWxlOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoKHJ1bGVzIGluc3RhbmNlb2Ygc2NfUGFpcikpCisgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ1bGUg
PSAocnVsZXMuY2FyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGwgPSBydWxlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQmdMX3NjX25iemQyY29uZnNfMTZ6ZDIgPSBC
Z0xfc2NfbmJ6ZDJjb25mc18xNXpkMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hp
bGUgKChsIGluc3RhbmNlb2Ygc2NfUGFpcikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGwgPSAobC5jZHIp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgrK0JnTF9zY19uYnpkMmNv
bmZzXzE2emQyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
KHJ1bGVfbG9vcCgocnVsZXMuY2RyKSwgKEJnTF9zY19uYnpkMmNvbmZzXzE2emQyKygxKSkpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChCZ0xfc2NfZGVmemQybG9vcF82emQyKChkZWZz
LmNkciksIEJnTF9zY19uYnpkMmNvbmZzXzE1emQyKSk7CisgICAgICAgICAgICAgICAgfSksIChy
dWxlX2xvb3AoKGRlZi5jZHIpLCBCZ0xfc2NfbmJ6ZDJjb25mc18xNHpkMikpKTpCZ0xfc2NfbmJ6
ZDJjb25mc18xNHpkMik7CisgICAgICAgICAgICB9KSwgKEJnTF9zY19kZWZ6ZDJsb29wXzZ6ZDIo
Z3JhbW1hciwgKDApKSkpK0JnTF9zY19uYnpkMm50c183emQyKSk7CisgICAgICAgICAgICAoc2Nf
c3RhcnRlcnNfNSA9IChzY19tYWtlVmVjdG9yKEJnTF9zY19uYnpkMm50c183emQyLCBudWxsKSkp
OworICAgICAgICAgICAgKHNjX2VuZGVyc180ID0gKHNjX21ha2VWZWN0b3IoQmdMX3NjX25iemQy
bnRzXzd6ZDIsIG51bGwpKSk7CisgICAgICAgICAgICAoc2NfcHJlZGljdG9yc18zID0gKHNjX21h
a2VWZWN0b3IoQmdMX3NjX25iemQybnRzXzd6ZDIsIG51bGwpKSk7CisgICAgICAgICAgICAoc2Nf
c3RlcHNfMiA9IChzY19tYWtlVmVjdG9yKG5iX2NvbmZzLCBmYWxzZSkpKTsKKyAgICAgICAgICAg
IChzY19uYW1lc18xID0gKHNjX21ha2VWZWN0b3IobmJfY29uZnMsIGZhbHNlKSkpOworICAgICAg
ICAgICAgKG50cyA9IHNjX250c184KTsKKyAgICAgICAgICAgIChzdGFydGVycyA9IHNjX3N0YXJ0
ZXJzXzUpOworICAgICAgICAgICAgKGVuZGVycyA9IHNjX2VuZGVyc180KTsKKyAgICAgICAgICAg
IChwcmVkaWN0b3JzID0gc2NfcHJlZGljdG9yc18zKTsKKyAgICAgICAgICAgIChzdGVwcyA9IHNj
X3N0ZXBzXzIpOworICAgICAgICAgICAgKG5hbWVzID0gc2NfbmFtZXNfMSk7CisgICAgICAgICAg
ICAobmJfbnRzID0gKHNjX250c184Lmxlbmd0aCkpOworICAgICAgICAgICAgKGkgPSAobmJfbnRz
LSgxKSkpOworICAgICAgICAgICAgd2hpbGUgKChpPj0oMCkpKSB7CisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAoc2Nfc3RlcHNfMltpXSA9IChpLW5iX250cykpOworICAg
ICAgICAgICAgICAgICAgICAoc2NfbmFtZXNfMVtpXSA9IChzY19saXN0KChzY19udHNfOFtpXSks
ICgwKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgKHNjX2VuZGVyc180W2ldID0gKHNjX2xpc3Qo
aSkpKTsKKyAgICAgICAgICAgICAgICAgICAgKC0taSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZGVmX2xvb3AgPSBmdW5jdGlvbihkZWZzLCBjb25mKSB7
CisgICAgICAgICAgICAgICAgdmFyIHJ1bGVfbG9vcDsKKyAgICAgICAgICAgICAgICB2YXIgaGVh
ZDsKKyAgICAgICAgICAgICAgICB2YXIgZGVmOworICAgICAgICAgICAgICAgIHJldHVybiAoKGRl
ZnMgaW5zdGFuY2VvZiBzY19QYWlyKT8oKGRlZiA9IChkZWZzLmNhcikpLCAoaGVhZCA9IChkZWYu
Y2FyKSksIChydWxlX2xvb3AgPSBmdW5jdGlvbihydWxlcywgY29uZiwgcnVsZV9udW0pIHsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIGk7CisgICAgICAgICAgICAgICAgICAgIHZhciBzY19pXzE3
OworICAgICAgICAgICAgICAgICAgICB2YXIgbnQ7CisgICAgICAgICAgICAgICAgICAgIHZhciBs
OworICAgICAgICAgICAgICAgICAgICB2YXIgc2NfY29uZl8xODsKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIHNjX2lfMTk7CisgICAgICAgICAgICAgICAgICAgIHZhciBydWxlOworICAgICAgICAg
ICAgICAgICAgICBpZiAoKHJ1bGVzIGluc3RhbmNlb2Ygc2NfUGFpcikpCisgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ1bGUgPSAocnVsZXMu
Y2FyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWVzW2NvbmZdID0gKHNjX2xp
c3QoaGVhZCwgcnVsZV9udW0pKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNjX2lf
MTkgPSAoaW5kKGhlYWQsIG50cykpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3Rh
cnRlcnNbc2NfaV8xOV0gPSAobmV3IHNjX1BhaXIoY29uZiwgKHN0YXJ0ZXJzW3NjX2lfMTldKSkp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobCA9IHJ1bGUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChzY19jb25mXzE4ID0gY29uZik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd2hpbGUgKChsIGluc3RhbmNlb2Ygc2NfUGFpcikpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KG50ID0gKGwuY2FyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3Rl
cHNbc2NfY29uZl8xOF0gPSAoaW5kKG50LCBudHMpKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoc2NfaV8xNyA9IChpbmQobnQsIG50cykpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChwcmVkaWN0b3JzW3NjX2lfMTddID0gKG5ldyBzY19QYWly
KHNjX2NvbmZfMTgsIChwcmVkaWN0b3JzW3NjX2lfMTddKSkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChsID0gKGwuY2RyKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoKytzY19jb25mXzE4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoc3RlcHNbc2NfY29uZl8xOF0gPSAoKGluZChoZWFkLCBudHMpKS1uYl9udHMp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaSA9IChpbmQoaGVhZCwgbnRzKSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbmRlcnNbaV0gPSAobmV3IHNjX1BhaXIoc2Nf
Y29uZl8xOCwgKGVuZGVyc1tpXSkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIChydWxlX2xvb3AoKHJ1bGVzLmNkciksIChzY19jb25mXzE4KygxKSksIChydWxlX251bSso
MSkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoZGVmX2xvb3AoKGRlZnMuY2RyKSwg
Y29uZikpOworICAgICAgICAgICAgICAgIH0pLCAocnVsZV9sb29wKChkZWYuY2RyKSwgY29uZiwg
KDEpKSkpOnVuZGVmaW5lZCk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgKGRlZl9sb29w
KGdyYW1tYXIsIChzY19udHNfOC5sZW5ndGgpKSk7CisgICAgICAgICAgICAocGFyc2VyX2Rlc2Ny
ID0gW2xleGVyLCBzY19udHNfOCwgc2Nfc3RhcnRlcnNfNSwgc2NfZW5kZXJzXzQsIHNjX3ByZWRp
Y3RvcnNfMywgc2Nfc3RlcHNfMiwgc2NfbmFtZXNfMV0pOworICAgICAgICAgICAgcmV0dXJuIGZ1
bmN0aW9uKGlucHV0KSB7CisgICAgICAgICAgICAgICAgdmFyIG9wdHJPcG5kOworICAgICAgICAg
ICAgICAgIHZhciBzY19vcHRyT3BuZF8yMDsKKyAgICAgICAgICAgICAgICB2YXIgc2Nfb3B0ck9w
bmRfMjE7CisgICAgICAgICAgICAgICAgdmFyIHNjX29wdHJPcG5kXzIyOworICAgICAgICAgICAg
ICAgIHZhciBsb29wMTsKKyAgICAgICAgICAgICAgICB2YXIgQmdMX3NjX3N0YXRlemEyXzIzemEy
OworICAgICAgICAgICAgICAgIHZhciB0b2tzOworICAgICAgICAgICAgICAgIHZhciBCZ0xfc2Nf
bmJ6ZDJudHNfMjR6ZDI7CisgICAgICAgICAgICAgICAgdmFyIHNjX3N0ZXBzXzI1OworICAgICAg
ICAgICAgICAgIHZhciBzY19lbmRlcnNfMjY7CisgICAgICAgICAgICAgICAgdmFyIHN0YXRlX251
bTsKKyAgICAgICAgICAgICAgICB2YXIgQmdMX3NjX3N0YXRlc3phMl8yN3phMjsKKyAgICAgICAg
ICAgICAgICB2YXIgc3RhdGVzOworICAgICAgICAgICAgICAgIHZhciBpOworICAgICAgICAgICAg
ICAgIHZhciBjb25mOworICAgICAgICAgICAgICAgIHZhciBsOworICAgICAgICAgICAgICAgIHZh
ciB0b2tfbnRzOworICAgICAgICAgICAgICAgIHZhciBzY19pXzI4OworICAgICAgICAgICAgICAg
IHZhciBzY19pXzI5OworICAgICAgICAgICAgICAgIHZhciBsMTsKKyAgICAgICAgICAgICAgICB2
YXIgbDI7CisgICAgICAgICAgICAgICAgdmFyIHRvazsKKyAgICAgICAgICAgICAgICB2YXIgdGFp
bDExMjk7CisgICAgICAgICAgICAgICAgdmFyIEwxMTI1OworICAgICAgICAgICAgICAgIHZhciBn
b2FsX2VuZGVyczsKKyAgICAgICAgICAgICAgICB2YXIgQmdMX3NjX3N0YXRlc3phMl8zMHphMjsK
KyAgICAgICAgICAgICAgICB2YXIgQmdMX3NjX25iemQybnRzXzMxemQyOworICAgICAgICAgICAg
ICAgIHZhciBCZ0xfc2NfbmJ6ZDJjb25mc18zMnpkMjsKKyAgICAgICAgICAgICAgICB2YXIgbmJf
dG9rczsKKyAgICAgICAgICAgICAgICB2YXIgZ29hbF9zdGFydGVyczsKKyAgICAgICAgICAgICAg
ICB2YXIgc2Nfc3RhdGVzXzMzOworICAgICAgICAgICAgICAgIHZhciBCZ0xfc2NfbmJ6ZDJjb25m
c18zNHpkMjsKKyAgICAgICAgICAgICAgICB2YXIgQmdMX3NjX25iemQydG9rc18zNXpkMjsKKyAg
ICAgICAgICAgICAgICB2YXIgc2NfdG9rc18zNjsKKyAgICAgICAgICAgICAgICB2YXIgZmFsc2VI
ZWFkMTEyODsKKyAgICAgICAgICAgICAgICB2YXIgc2NfbmFtZXNfMzc7CisgICAgICAgICAgICAg
ICAgdmFyIHNjX3N0ZXBzXzM4OworICAgICAgICAgICAgICAgIHZhciBzY19wcmVkaWN0b3JzXzM5
OworICAgICAgICAgICAgICAgIHZhciBzY19lbmRlcnNfNDA7CisgICAgICAgICAgICAgICAgdmFy
IHNjX3N0YXJ0ZXJzXzQxOworICAgICAgICAgICAgICAgIHZhciBzY19udHNfNDI7CisgICAgICAg
ICAgICAgICAgdmFyIGxleGVyOworICAgICAgICAgICAgICAgIHZhciBzY19pbmRfNDM7CisgICAg
ICAgICAgICAgICAgdmFyIG1ha2Vfc3RhdGVzOworICAgICAgICAgICAgICAgIHZhciBCZ0xfc2Nf
Y29uZnpkMnNldHpkMmdldHphMl80NHphMjsKKyAgICAgICAgICAgICAgICB2YXIgY29uZl9zZXRf
bWVyZ2VfbmV3X2Jhbmc7CisgICAgICAgICAgICAgICAgdmFyIGNvbmZfc2V0X2Fkam9pbjsKKyAg
ICAgICAgICAgICAgICB2YXIgQmdMX3NjX2NvbmZ6ZDJzZXR6ZDJhZGpvaW56YTJfNDV6YTI7Cisg
ICAgICAgICAgICAgICAgdmFyIEJnTF9zY19jb25memQyc2V0emQyYWRqb2luemEyemEyXzQ2ejAw
OworICAgICAgICAgICAgICAgIHZhciBjb25mX3NldF91bmlvbjsKKyAgICAgICAgICAgICAgICB2
YXIgZm9ydzsKKyAgICAgICAgICAgICAgICB2YXIgaXNfcGFyc2VkOworICAgICAgICAgICAgICAg
IHZhciBkZXJpdl90cmVlczsKKyAgICAgICAgICAgICAgICB2YXIgQmdMX3NjX2Rlcml2emQydHJl
ZXN6YTJfNDd6NzA7CisgICAgICAgICAgICAgICAgdmFyIG5iX2Rlcml2X3RyZWVzOworICAgICAg
ICAgICAgICAgIHZhciBCZ0xfc2NfbmJ6ZDJkZXJpdnpkMnRyZWVzemEyXzQ4emEyOworICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc2NfaW5kXzQzID0gZnVuY3Rpb24obnQs
IHNjX250c180OSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkgPSAoKHNjX250
c180OS5sZW5ndGgpLSgxKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0
cnVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaT49KDApKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoc2NfaXNFcXVhbCgoc2NfbnRz
XzQ5W2ldKSwgbnQpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gaTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLS1pKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAg
ICAgICAgbWFrZV9zdGF0ZXMgPSBmdW5jdGlvbihCZ0xfc2NfbmJ6ZDJ0b2tzXzUwemQyLCBCZ0xf
c2NfbmJ6ZDJjb25mc181MXpkMikgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHY7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgaTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBzY19zdGF0ZXNfNTI7CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHNjX3N0YXRlc181MiA9IChzY19tYWtlVmVjdG9yKChCZ0xfc2NfbmJ6
ZDJ0b2tzXzUwemQyKygxKSksIGZhbHNlKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChpID0gQmdMX3NjX25iemQydG9rc181MHpkMik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd2hpbGUgKChpPj0oMCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2ID0gKHNjX21ha2VWZWN0b3Io
KEJnTF9zY19uYnpkMmNvbmZzXzUxemQyKygxKSksIGZhbHNlKSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHZbKDApXSA9ICgtMSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHNjX3N0YXRlc181MltpXSA9IHYpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKC0taSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHNjX3N0YXRlc181MjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgQmdMX3NjX2NvbmZ6
ZDJzZXR6ZDJnZXR6YTJfNDR6YTIgPSBmdW5jdGlvbihzdGF0ZSwgQmdMX3NjX3N0YXRlemQybnVt
XzUzemQyLCBzY19jb25mXzU0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29uZl9z
ZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgQmdMX3NjX2NvbmZ6ZDJzZXRfNTV6ZDI7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKChCZ0xfc2NfY29uZnpkMnNldF81NXpk
MiA9IChzdGF0ZVsoc2NfY29uZl81NCsoMSkpXSkpLCAoKEJnTF9zY19jb25memQyc2V0XzU1emQy
IT09IGZhbHNlKT9CZ0xfc2NfY29uZnpkMnNldF81NXpkMjooKGNvbmZfc2V0ID0gKHNjX21ha2VW
ZWN0b3IoKEJnTF9zY19zdGF0ZXpkMm51bV81M3pkMisoNikpLCBmYWxzZSkpKSwgKGNvbmZfc2V0
WygxKV0gPSAoLTMpKSwgKGNvbmZfc2V0WygyKV0gPSAoLTEpKSwgKGNvbmZfc2V0WygzKV0gPSAo
LTEpKSwgKGNvbmZfc2V0Wyg0KV0gPSAoLTEpKSwgKHN0YXRlWyhzY19jb25mXzU0KygxKSldID0g
Y29uZl9zZXQpLCBjb25mX3NldCkpKTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgICAgICAgICAgY29uZl9zZXRfbWVyZ2VfbmV3X2JhbmcgPSBmdW5jdGlvbihjb25mX3NldCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgoY29uZl9zZXRbKChjb25mX3NldFso
MSldKSsoNSkpXSA9IChjb25mX3NldFsoNCldKSksIChjb25mX3NldFsoMSldID0gKGNvbmZfc2V0
WygzKV0pKSwgKGNvbmZfc2V0WygzKV0gPSAoLTEpKSwgKGNvbmZfc2V0Wyg0KV0gPSAoLTEpKSk7
CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIGNvbmZfc2V0X2Fk
am9pbiA9IGZ1bmN0aW9uKHN0YXRlLCBjb25mX3NldCwgc2NfY29uZl81NiwgaSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIHRhaWw7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gKCh0YWlsID0gKGNvbmZfc2V0WygzKV0pKSwgKGNvbmZfc2V0WyhpKyg1KSldID0gKC0xKSks
IChjb25mX3NldFsodGFpbCsoNSkpXSA9IGkpLCAoY29uZl9zZXRbKDMpXSA9IGkpLCAoKHRhaWw8
KDApKT8oKGNvbmZfc2V0WygwKV0gPSAoc3RhdGVbKDApXSkpLCAoc3RhdGVbKDApXSA9IHNjX2Nv
bmZfNTYpKTp1bmRlZmluZWQpKTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
ICAgICAgICAgQmdMX3NjX2NvbmZ6ZDJzZXR6ZDJhZGpvaW56YTJfNDV6YTIgPSBmdW5jdGlvbihz
Y19zdGF0ZXNfNTcsIEJnTF9zY19zdGF0ZXpkMm51bV81OHpkMiwgbCwgaSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGNvbmZfc2V0OworICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHNjX2NvbmZfNTk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbDE7CisgICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgc3RhdGU7CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRlID0gKHNjX3N0YXRlc181N1tCZ0xfc2Nfc3Rh
dGV6ZDJudW1fNTh6ZDJdKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGwxID0gbCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChsMSBpbnN0YW5jZW9mIHNjX1Bh
aXIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChzY19jb25mXzU5ID0gKGwxLmNhcikpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbmZfc2V0ID0gKEJnTF9zY19jb25memQyc2V0
emQyZ2V0emEyXzQ0emEyKHN0YXRlLCBCZ0xfc2Nfc3RhdGV6ZDJudW1fNTh6ZDIsIHNjX2NvbmZf
NTkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChjb25mX3Nl
dFsoaSsoNSkpXSk9PT0gZmFsc2UpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNv
bmZfc2V0X2Fkam9pbihzdGF0ZSwgY29uZl9zZXQsIHNjX2NvbmZfNTksIGkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGwxID0gKGwxLmNkcikpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAobDEgPSAobDEuY2RyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgQmdMX3NjX2NvbmZ6ZDJzZXR6
ZDJhZGpvaW56YTJ6YTJfNDZ6MDAgPSBmdW5jdGlvbihzY19zdGF0ZXNfNjAsIEJnTF9zY19zdGF0
ZXN6YTJfNjF6YTIsIEJnTF9zY19zdGF0ZXpkMm51bV82MnpkMiwgc2NfY29uZl82MywgaSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEJnTF9zY19jb25memQyc2V0emEyXzY0ejcwOwor
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEJnTF9zY19zdGF0ZXphMl82NXphMjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBjb25mX3NldDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBzdGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKHN0YXRlID0gKHNj
X3N0YXRlc182MFtCZ0xfc2Nfc3RhdGV6ZDJudW1fNjJ6ZDJdKSksICgoKChjb25mX3NldCA9IChz
dGF0ZVsoc2NfY29uZl82MysoMSkpXSkpLCAoKGNvbmZfc2V0IT09IGZhbHNlKT8oY29uZl9zZXRb
KGkrKDUpKV0pOmZhbHNlKSkhPT0gZmFsc2UpPygoQmdMX3NjX3N0YXRlemEyXzY1emEyID0gKEJn
TF9zY19zdGF0ZXN6YTJfNjF6YTJbQmdMX3NjX3N0YXRlemQybnVtXzYyemQyXSkpLCAoQmdMX3Nj
X2NvbmZ6ZDJzZXR6YTJfNjR6NzAgPSAoQmdMX3NjX2NvbmZ6ZDJzZXR6ZDJnZXR6YTJfNDR6YTIo
QmdMX3NjX3N0YXRlemEyXzY1emEyLCBCZ0xfc2Nfc3RhdGV6ZDJudW1fNjJ6ZDIsIHNjX2NvbmZf
NjMpKSksICgoKEJnTF9zY19jb25memQyc2V0emEyXzY0ejcwWyhpKyg1KSldKT09PSBmYWxzZSk/
KGNvbmZfc2V0X2Fkam9pbihCZ0xfc2Nfc3RhdGV6YTJfNjV6YTIsIEJnTF9zY19jb25memQyc2V0
emEyXzY0ejcwLCBzY19jb25mXzYzLCBpKSk6dW5kZWZpbmVkKSwgdHJ1ZSk6ZmFsc2UpKTsKKyAg
ICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgY29uZl9zZXRfdW5pb24g
PSBmdW5jdGlvbihzdGF0ZSwgY29uZl9zZXQsIHNjX2NvbmZfNjYsIG90aGVyX3NldCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGk7CisgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkgPSAob3RoZXJfc2V0WygyKV0pKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGk+PSgwKSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCgoY29uZl9zZXRbKGkrKDUpKV0pPT09IGZhbHNlKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoY29uZl9zZXRfYWRqb2luKHN0YXRlLCBjb25mX3NldCwgc2Nf
Y29uZl82NiwgaSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChp
ID0gKG90aGVyX3NldFsoaSsoNSkpXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoaSA9IChvdGhlcl9zZXRbKGkrKDUpKV0pKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgZm9ydyA9IGZ1bmN0aW9uKHNjX3N0YXRl
c182NywgQmdMX3NjX3N0YXRlemQybnVtXzY4emQyLCBzY19zdGFydGVyc182OSwgc2NfZW5kZXJz
XzcwLCBzY19wcmVkaWN0b3JzXzcxLCBzY19zdGVwc183Miwgc2NfbnRzXzczKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgbmV4dF9zZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgbmV4dDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb25mX3NldDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBlbmRlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBs
OworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ZXJfc2V0OworICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIHN0YXJ0ZXI7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2Nf
bF83NDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY19sb29wMV83NTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBoZWFkOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEJn
TF9zY19jb25memQyc2V0Xzc2emQyOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEJnTF9z
Y19zdGF0ZXpkMm51bV83N3pkMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY19zdGF0ZXNfNzg7CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgcHJlZHM7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgQmdMX3Nj
X2NvbmZ6ZDJzZXRfNzl6ZDI7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RlcDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBzY19jb25mXzgwOworICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIEJnTF9zY19uYnpkMm50c184MXpkMjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBzY19zdGF0ZV84MjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoc2Nfc3RhdGVfODIgPSAoc2Nfc3RhdGVzXzY3W0JnTF9zY19zdGF0
ZXpkMm51bV82OHpkMl0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQmdMX3NjX25i
emQybnRzXzgxemQyID0gKHNjX250c183My5sZW5ndGgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2NfY29uZl84MCA9IChzY19z
dGF0ZV84MlsoMCldKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
KHNjX2NvbmZfODA+PSgwKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RlcCA9
IChzY19zdGVwc183MltzY19jb25mXzgwXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoQmdMX3NjX2NvbmZ6ZDJzZXRfNzl6ZDIgPSAoc2Nfc3RhdGVfODJb
KHNjX2NvbmZfODArKDEpKV0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGhlYWQgPSAoQmdMX3NjX2NvbmZ6ZDJzZXRfNzl6ZDJbKDQpXSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2Nfc3RhdGVfODJbKDApXSA9
IChCZ0xfc2NfY29uZnpkMnNldF83OXpkMlsoMCldKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChjb25mX3NldF9tZXJnZV9uZXdfYmFuZyhCZ0xfc2NfY29u
ZnpkMnNldF83OXpkMikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoKHN0ZXA+PSgwKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHNjX2xfNzQgPSAoc2Nfc3RhcnRlcnNfNjlbc3RlcF0pKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKHNjX2xf
NzQgaW5zdGFuY2VvZiBzY19QYWlyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhcnRlciA9IChzY19sXzc0LmNhcikp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHN0YXJ0ZXJfc2V0ID0gKEJnTF9zY19jb25memQyc2V0emQyZ2V0emEyXzQ0emEyKHNj
X3N0YXRlXzgyLCBCZ0xfc2Nfc3RhdGV6ZDJudW1fNjh6ZDIsIHN0YXJ0ZXIpKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
KChzdGFydGVyX3NldFsoQmdMX3NjX3N0YXRlemQybnVtXzY4emQyKyg1KSldKT09PSBmYWxzZSkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoY29uZl9zZXRfYWRqb2luKHNjX3N0YXRlXzgyLCBzdGFy
dGVyX3NldCwgc3RhcnRlciwgQmdMX3NjX3N0YXRlemQybnVtXzY4emQyKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChzY19sXzc0ID0gKHNjX2xfNzQuY2RyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChz
Y19sXzc0ID0gKHNjX2xfNzQuY2RyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKGwgPSAoc2NfZW5kZXJzXzcwW3N0ZXBdKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChsIGlu
c3RhbmNlb2Ygc2NfUGFpcikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVuZGVyID0gKGwuY2FyKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCgo
Y29uZl9zZXQgPSAoc2Nfc3RhdGVfODJbKGVuZGVyKygxKSldKSksICgoY29uZl9zZXQhPT0gZmFs
c2UpPyhjb25mX3NldFsoQmdMX3NjX3N0YXRlemQybnVtXzY4emQyKyg1KSldKTpmYWxzZSkpIT09
IGZhbHNlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXh0ID0gKHNjX2NvbmZfODArKDEpKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChuZXh0X3NldCA9IChCZ0xfc2NfY29uZnpkMnNldHpkMmdldHphMl80NHph
MihzY19zdGF0ZV84MiwgQmdMX3NjX3N0YXRlemQybnVtXzY4emQyLCBuZXh0KSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoY29uZl9zZXRfdW5pb24oc2Nfc3RhdGVfODIsIG5leHRfc2V0LCBuZXh0LCBCZ0xfc2Nf
Y29uZnpkMnNldF83OXpkMikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobCA9IChsLmNkcikpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAobCA9IChsLmNkcikpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHByZWRzID0gKHNjX3ByZWRpY3RvcnNfNzFbKHN0ZXArQmdMX3NjX25iemQybnRz
XzgxemQyKV0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoc2Nfc3RhdGVzXzc4ID0gc2Nfc3RhdGVzXzY3KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGUgPSBzY19zdGF0ZV84Mik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJn
TF9zY19zdGF0ZXpkMm51bV83N3pkMiA9IEJnTF9zY19zdGF0ZXpkMm51bV82OHpkMik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJnTF9zY19j
b25memQyc2V0Xzc2emQyID0gQmdMX3NjX2NvbmZ6ZDJzZXRfNzl6ZDIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjX2xvb3AxXzc1ID0gZnVu
Y3Rpb24obCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgc2Nfc3RhdGVfODM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBCZ0xfc2NfbmV4dHpkMnNldF84NHpkMjsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIHNjX25leHRfODU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBwcmVkX3NldDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmVkOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGwgaW5z
dGFuY2VvZiBzY19QYWlyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJlZCA9IChsLmNhcikpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChpID0gaGVhZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChpPj0oMCkpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChwcmVkX3NldCA9ICgoc2Nfc3RhdGVfODMgPSAoc2Nfc3RhdGVzXzc4W2ld
KSksIChzY19zdGF0ZV84M1socHJlZCsoMSkpXSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocHJl
ZF9zZXQhPT0gZmFsc2UpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHNjX25leHRfODUgPSAocHJlZCsoMSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KEJnTF9zY19uZXh0emQyc2V0Xzg0emQyID0gKEJnTF9zY19jb25memQyc2V0emQyZ2V0emEyXzQ0
emEyKHN0YXRlLCBCZ0xfc2Nfc3RhdGV6ZDJudW1fNzd6ZDIsIHNjX25leHRfODUpKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChjb25mX3NldF91bmlvbihzdGF0ZSwgQmdMX3NjX25leHR6ZDJz
ZXRfODR6ZDIsIHNjX25leHRfODUsIHByZWRfc2V0KSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGkgPSAoQmdMX3NjX2NvbmZ6ZDJzZXRfNzZ6ZDJbKGkrKDUpKV0pKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHNjX2xvb3AxXzc1KChsLmNk
cikpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzY19sb29wMV83NShwcmVkcykpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdW5kZWZpbmVkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICBpc19wYXJzZWQg
PSBmdW5jdGlvbihudCwgaSwgaiwgc2NfbnRzXzg2LCBzY19lbmRlcnNfODcsIHNjX3N0YXRlc184
OCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbmZfc2V0OworICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIHN0YXRlOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjX2Nv
bmZfODk7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBCZ0xfc2NfbnR6YTJfOTB6YTI7CisgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJnTF9zY19udHphMl85MHphMiA9IChzY19p
bmRfNDMobnQsIHNjX250c184NikpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
KEJnTF9zY19udHphMl85MHphMiE9PSBmYWxzZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzY19udHNfODYu
bGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsID0gKHNjX2Vu
ZGVyc184N1tCZ0xfc2NfbnR6YTJfOTB6YTJdKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICgobCBpbnN0YW5jZW9mIHNjX1BhaXIpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoc2NfY29uZl84OSA9IChsLmNhcikpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoKHN0YXRlID0gKHNjX3N0
YXRlc184OFtqXSkpLCAoY29uZl9zZXQgPSAoc3RhdGVbKHNjX2NvbmZfODkrKDEpKV0pKSwgKChj
b25mX3NldCE9PSBmYWxzZSk/KGNvbmZfc2V0WyhpKyg1KSldKTpmYWxzZSkpIT09IGZhbHNlKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAobCA9IChsLmNkcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgZGVy
aXZfdHJlZXMgPSBmdW5jdGlvbihzY19jb25mXzkxLCBpLCBqLCBzY19lbmRlcnNfOTIsIHNjX3N0
ZXBzXzkzLCBzY19uYW1lc185NCwgc2NfdG9rc185NSwgc2Nfc3RhdGVzXzk2LCBCZ0xfc2NfbmJ6
ZDJudHNfOTd6ZDIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY19sb29wMV85ODsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2OworICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIG5hbWU7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKChuYW1lID0gKHNj
X25hbWVzXzk0W3NjX2NvbmZfOTFdKSksICgobmFtZSE9PSBmYWxzZSk/KChzY19jb25mXzkxPEJn
TF9zY19uYnpkMm50c185N3pkMik/KHNjX2xpc3QoKHNjX2xpc3QobmFtZSwgKChzY190b2tzXzk1
W2ldKS5jYXIpKSkpKTooc2NfbGlzdCgoc2NfbGlzdChuYW1lKSkpKSk6KChwcmV2ID0gKHNjX2Nv
bmZfOTEtKDEpKSksIChzY19sb29wMV85OCA9IGZ1bmN0aW9uKGwxLCBsMikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBsb29wMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgZW5kZXJfc2V0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kZXI7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIGwxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsMjsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoKGwxIGluc3RhbmNlb2Ygc2NfUGFpcikpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGVuZGVyID0gKGwxLmNhcikpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChlbmRlcl9zZXQgPSAoKHN0YXRlID0gKHNjX3N0YXRlc185Nltq
XSkpLCAoc3RhdGVbKGVuZGVyKygxKSldKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICgoZW5kZXJfc2V0IT09IGZhbHNlKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbG9vcDIgPSBmdW5jdGlvbihrLCBsMikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb29wMzsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5k
ZXJfdHJlZXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIHByZXZfdHJlZXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIGNvbmZfc2V0OworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY19zdGF0ZV85OTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbDI7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRy
dWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKChrPj0oMCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoaz49aSkmJigoKHNjX3N0YXRlXzk5ID0gKHNj
X3N0YXRlc185NltrXSkpLCAoY29uZl9zZXQgPSAoc2Nfc3RhdGVfOTlbKHByZXYrKDEpKV0pKSwg
KChjb25mX3NldCE9PSBmYWxzZSk/KGNvbmZfc2V0WyhpKyg1KSldKTpmYWxzZSkpIT09IGZhbHNl
KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAocHJldl90cmVlcyA9IChkZXJpdl90cmVlcyhwcmV2
LCBpLCBrLCBzY19lbmRlcnNfOTIsIHNjX3N0ZXBzXzkzLCBzY19uYW1lc185NCwgc2NfdG9rc185
NSwgc2Nfc3RhdGVzXzk2LCBCZ0xfc2NfbmJ6ZDJudHNfOTd6ZDIpKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChl
bmRlcl90cmVlcyA9IChkZXJpdl90cmVlcyhlbmRlciwgaywgaiwgc2NfZW5kZXJzXzkyLCBzY19z
dGVwc185Mywgc2NfbmFtZXNfOTQsIHNjX3Rva3NfOTUsIHNjX3N0YXRlc185NiwgQmdMX3NjX25i
emQybnRzXzk3emQyKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wMyA9IGZ1bmN0aW9uKGwzLCBsMikgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGw0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjX2wyXzEwMDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBlbmRlcl90cmVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChsMyBpbnN0
YW5jZW9mIHNjX1BhaXIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGVuZGVyX3RyZWUgPSAoc2NfbGlzdCgobDMuY2FyKSkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGw0ID0gcHJldl90cmVlcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzY19s
Ml8xMDAgPSBsMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgobDQgaW5zdGFuY2Vv
ZiBzY19QYWlyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChzY19sMl8xMDAgPSAobmV3IHNjX1BhaXIoKHNjX2FwcGVuZCgo
bDQuY2FyKSwgZW5kZXJfdHJlZSkpLCBzY19sMl8xMDApKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGw0ID0gKGw0LmNkcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAobG9vcDMoKGwzLmNkciksIHNjX2wyXzEwMCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGxvb3AyKChlbmRl
cl9zZXRbKGsrKDUpKV0pLCBsMikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
KGxvb3AzKGVuZGVyX3RyZWVzLCBsMikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoayA9
IChlbmRlcl9zZXRbKGsrKDUpKV0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChzY19sb29wMV85OCgobDEu
Y2RyKSwgbDIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIChsb29wMigoZW5kZXJfc2V0WygyKV0pLCBsMikpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAobDEgPSAobDEuY2RyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBsMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9KSwgKHNjX2xvb3AxXzk4KChzY19lbmRlcnNf
OTJbKHNjX3N0ZXBzXzkzW3ByZXZdKV0pLCBudWxsKSkpKSk7CisgICAgICAgICAgICAgICAgICAg
IH07CisgICAgICAgICAgICAgICAgICAgIEJnTF9zY19kZXJpdnpkMnRyZWVzemEyXzQ3ejcwID0g
ZnVuY3Rpb24obnQsIGksIGosIHNjX250c18xMDEsIHNjX2VuZGVyc18xMDIsIHNjX3N0ZXBzXzEw
Mywgc2NfbmFtZXNfMTA0LCBzY190b2tzXzEwNSwgc2Nfc3RhdGVzXzEwNikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGNvbmZfc2V0OworICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHN0YXRlOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjX2NvbmZfMTA3OworICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIGw7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJl
ZXM7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgQmdMX3NjX25iemQybnRzXzEwOHpkMjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBCZ0xfc2NfbnR6YTJfMTA5emEyOworICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCZ0xfc2Nf
bnR6YTJfMTA5emEyID0gKHNjX2luZF80MyhudCwgc2NfbnRzXzEwMSkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoKEJnTF9zY19udHphMl8xMDl6YTIhPT0gZmFsc2UpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoQmdMX3NjX25iemQybnRzXzEwOHpkMiA9IChzY19udHNfMTAxLmxlbmd0aCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGwgPSAoc2NfZW5kZXJzXzEw
MltCZ0xfc2NfbnR6YTJfMTA5emEyXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHRyZWVzID0gbnVsbCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3aGlsZSAoKGwgaW5zdGFuY2VvZiBzY19QYWlyKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHNjX2NvbmZfMTA3ID0gKGwuY2FyKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICgoKChzdGF0ZSA9IChzY19zdGF0ZXNfMTA2W2pdKSks
IChjb25mX3NldCA9IChzdGF0ZVsoc2NfY29uZl8xMDcrKDEpKV0pKSwgKChjb25mX3NldCE9PSBm
YWxzZSk/KGNvbmZfc2V0WyhpKyg1KSldKTpmYWxzZSkpIT09IGZhbHNlKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobCA9IChsLmNkcikpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0cmVlcyA9IChz
Y19hcHBlbmQoKGRlcml2X3RyZWVzKHNjX2NvbmZfMTA3LCBpLCBqLCBzY19lbmRlcnNfMTAyLCBz
Y19zdGVwc18xMDMsIHNjX25hbWVzXzEwNCwgc2NfdG9rc18xMDUsIHNjX3N0YXRlc18xMDYsIEJn
TF9zY19uYnpkMm50c18xMDh6ZDIpKSwgdHJlZXMpKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChsID0gKGwuY2RyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyZWVzOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAg
ICAgICAgIG5iX2Rlcml2X3RyZWVzID0gZnVuY3Rpb24oc2NfY29uZl8xMTAsIGksIGosIHNjX2Vu
ZGVyc18xMTEsIHNjX3N0ZXBzXzExMiwgc2NfdG9rc18xMTMsIHNjX3N0YXRlc18xMTQsIEJnTF9z
Y19uYnpkMm50c18xMTV6ZDIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY19sb29w
MV8xMTY7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG1wMTEyNDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBwcmV2OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgo
cHJldiA9IChzY19jb25mXzExMC0oMSkpKSwgKCgoKHRtcDExMjQgPSAoc2NfY29uZl8xMTA8QmdM
X3NjX25iemQybnRzXzExNXpkMikpLCAoKHRtcDExMjQhPT0gZmFsc2UpP3RtcDExMjQ6KChzY19z
dGVwc18xMTJbcHJldl0pPCgwKSkpKSE9PSBmYWxzZSk/KDEpOigoc2NfbG9vcDFfMTE2ID0gZnVu
Y3Rpb24obCwgc2Nfbl8xMTgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmJf
ZW5kZXJfdHJlZXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5iX3ByZXZfdHJl
ZXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbmZfc2V0OworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgZW5kZXJfc2V0OworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBzY19zdGF0ZV8xMTc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVu
ZGVyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBzY19uXzExODsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGwgaW5z
dGFuY2VvZiBzY19QYWlyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZW5kZXIgPSAobC5jYXIp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZW5kZXJfc2V0ID0g
KChzY19zdGF0ZV8xMTcgPSAoc2Nfc3RhdGVzXzExNFtqXSkpLCAoc2Nfc3RhdGVfMTE3WyhlbmRl
cisoMSkpXSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
KGVuZGVyX3NldCE9PSBmYWxzZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChrID0gKGVuZGVyX3NldFsoMildKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAobiA9IHNjX25fMTE4KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoaz49KDApKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKGs+PWkpJiYo
KChzdGF0ZSA9IChzY19zdGF0ZXNfMTE0W2tdKSksIChjb25mX3NldCA9IChzdGF0ZVsocHJldiso
MSkpXSkpLCAoKGNvbmZfc2V0IT09IGZhbHNlKT8oY29uZl9zZXRbKGkrKDUpKV0pOmZhbHNlKSkh
PT0gZmFsc2UpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKG5iX3ByZXZfdHJlZXMgPSAobmJfZGVyaXZfdHJlZXMocHJldiwg
aSwgaywgc2NfZW5kZXJzXzExMSwgc2Nfc3RlcHNfMTEyLCBzY190b2tzXzExMywgc2Nfc3RhdGVz
XzExNCwgQmdMX3NjX25iemQybnRzXzExNXpkMikpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuYl9lbmRlcl90cmVlcyA9IChu
Yl9kZXJpdl90cmVlcyhlbmRlciwgaywgaiwgc2NfZW5kZXJzXzExMSwgc2Nfc3RlcHNfMTEyLCBz
Y190b2tzXzExMywgc2Nfc3RhdGVzXzExNCwgQmdMX3NjX25iemQybnRzXzExNXpkMikpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChrID0gKGVuZGVyX3NldFsoaysoNSkpXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG4gKz0obmJfcHJldl90cmVlcypuYl9l
bmRlcl90cmVlcykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoayA9IChlbmRlcl9zZXRbKGsrKDUpKV0pKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoc2NfbG9vcDFfMTE2KChsLmNk
ciksIG4pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGwgPSAobC5jZHIpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNj
X25fMTE4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0pLCAoc2NfbG9vcDFfMTE2KChzY19lbmRlcnNfMTExWyhzY19zdGVwc18xMTJbcHJl
dl0pXSksICgwKSkpKSkpOworICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAg
ICAgICBCZ0xfc2NfbmJ6ZDJkZXJpdnpkMnRyZWVzemEyXzQ4emEyID0gZnVuY3Rpb24obnQsIGks
IGosIHNjX250c18xMTksIHNjX2VuZGVyc18xMjAsIHNjX3N0ZXBzXzEyMSwgc2NfdG9rc18xMjIs
IHNjX3N0YXRlc18xMjMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb25mX3NldDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBzY19jb25mXzEyNDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsOworICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIG5iX3RyZWVzOworICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIEJnTF9zY19uYnpkMm50c18xMjV6ZDI7CisgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgQmdMX3NjX250emEyXzEyNnphMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoQmdMX3NjX250emEyXzEyNnphMiA9IChzY19pbmRfNDMo
bnQsIHNjX250c18xMTkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChCZ0xf
c2NfbnR6YTJfMTI2emEyIT09IGZhbHNlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJnTF9zY19uYnpkMm50
c18xMjV6ZDIgPSAoc2NfbnRzXzExOS5sZW5ndGgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChsID0gKHNjX2VuZGVyc18xMjBbQmdMX3NjX250emEyXzEyNnphMl0pKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuYl90cmVlcyA9ICgwKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGwgaW5zdGFuY2VvZiBz
Y19QYWlyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNjX2NvbmZfMTI0ID0g
KGwuY2FyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICgoKChzdGF0ZSA9IChzY19zdGF0ZXNfMTIzW2pdKSksIChjb25mX3NldCA9IChzdGF0ZVsoc2Nf
Y29uZl8xMjQrKDEpKV0pKSwgKChjb25mX3NldCE9PSBmYWxzZSk/KGNvbmZfc2V0WyhpKyg1KSld
KTpmYWxzZSkpIT09IGZhbHNlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAobCA9IChsLmNkcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChuYl90cmVlcyA9ICgobmJfZGVyaXZfdHJlZXMoc2NfY29u
Zl8xMjQsIGksIGosIHNjX2VuZGVyc18xMjAsIHNjX3N0ZXBzXzEyMSwgc2NfdG9rc18xMjIsIHNj
X3N0YXRlc18xMjMsIEJnTF9zY19uYnpkMm50c18xMjV6ZDIpKStuYl90cmVlcykpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobCA9IChsLmNkcikpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBu
Yl90cmVlczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9OworICAgICAgICAgICAgICAgICAgICAobGV4ZXIgPSAocGFyc2VyX2Rlc2NyWygwKV0pKTsK
KyAgICAgICAgICAgICAgICAgICAgKHNjX250c180MiA9IChwYXJzZXJfZGVzY3JbKDEpXSkpOwor
ICAgICAgICAgICAgICAgICAgICAoc2Nfc3RhcnRlcnNfNDEgPSAocGFyc2VyX2Rlc2NyWygyKV0p
KTsKKyAgICAgICAgICAgICAgICAgICAgKHNjX2VuZGVyc180MCA9IChwYXJzZXJfZGVzY3JbKDMp
XSkpOworICAgICAgICAgICAgICAgICAgICAoc2NfcHJlZGljdG9yc18zOSA9IChwYXJzZXJfZGVz
Y3JbKDQpXSkpOworICAgICAgICAgICAgICAgICAgICAoc2Nfc3RlcHNfMzggPSAocGFyc2VyX2Rl
c2NyWyg1KV0pKTsKKyAgICAgICAgICAgICAgICAgICAgKHNjX25hbWVzXzM3ID0gKHBhcnNlcl9k
ZXNjclsoNildKSk7CisgICAgICAgICAgICAgICAgICAgIChmYWxzZUhlYWQxMTI4ID0gKG5ldyBz
Y19QYWlyKG51bGwsIG51bGwpKSk7CisgICAgICAgICAgICAgICAgICAgIChMMTEyNSA9IChsZXhl
cihpbnB1dCkpKTsKKyAgICAgICAgICAgICAgICAgICAgKHRhaWwxMTI5ID0gZmFsc2VIZWFkMTEy
OCk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICghKEwxMTI1ID09PSBudWxsKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0b2sg
PSAoTDExMjUuY2FyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGwxID0gKHRvay5j
ZHIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobDIgPSBudWxsKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGwxIGluc3RhbmNlb2Ygc2NfUGFpcikpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHNjX2lfMjkgPSAoc2NfaW5kXzQzKChsMS5jYXIpLCBzY19udHNfNDIpKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHNjX2lfMjkhPT0gZmFs
c2UpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGwxID0gKGwxLmNkcikpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobDIgPSAobmV3IHNjX1Bh
aXIoc2NfaV8yOSwgbDIpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsMSA9IChsMS5jZHIpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2Nfb3B0ck9wbmRfMjIgPSAobmV3IHNjX1Bh
aXIoKHRvay5jYXIpLCAoc2NfcmV2ZXJzZShsMikpKSkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChzY19vcHRyT3BuZF8yMSA9IChuZXcgc2NfUGFpcihzY19vcHRyT3BuZF8yMiwgbnVs
bCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGFpbDExMjkuY2RyID0gc2Nfb3B0
ck9wbmRfMjEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0YWlsMTEyOSA9ICh0YWls
MTEyOS5jZHIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTDExMjUgPSAoTDExMjUu
Y2RyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgKHNjX29wdHJPcG5kXzIwID0gKGZhbHNlSGVhZDExMjguY2Ry
KSk7CisgICAgICAgICAgICAgICAgICAgIChzY190b2tzXzM2ID0gKHNjX2xpc3QydmVjdG9yKHNj
X29wdHJPcG5kXzIwKSkpOworICAgICAgICAgICAgICAgICAgICAoQmdMX3NjX25iemQydG9rc18z
NXpkMiA9IChzY190b2tzXzM2Lmxlbmd0aCkpOworICAgICAgICAgICAgICAgICAgICAoQmdMX3Nj
X25iemQyY29uZnNfMzR6ZDIgPSAoc2Nfc3RlcHNfMzgubGVuZ3RoKSk7CisgICAgICAgICAgICAg
ICAgICAgIChzY19zdGF0ZXNfMzMgPSAobWFrZV9zdGF0ZXMoQmdMX3NjX25iemQydG9rc18zNXpk
MiwgQmdMX3NjX25iemQyY29uZnNfMzR6ZDIpKSk7CisgICAgICAgICAgICAgICAgICAgIChnb2Fs
X3N0YXJ0ZXJzID0gKHNjX3N0YXJ0ZXJzXzQxWygwKV0pKTsKKyAgICAgICAgICAgICAgICAgICAg
KEJnTF9zY19jb25memQyc2V0emQyYWRqb2luemEyXzQ1emEyKHNjX3N0YXRlc18zMywgKDApLCBn
b2FsX3N0YXJ0ZXJzLCAoMCkpKTsKKyAgICAgICAgICAgICAgICAgICAgKGZvcncoc2Nfc3RhdGVz
XzMzLCAoMCksIHNjX3N0YXJ0ZXJzXzQxLCBzY19lbmRlcnNfNDAsIHNjX3ByZWRpY3RvcnNfMzks
IHNjX3N0ZXBzXzM4LCBzY19udHNfNDIpKTsKKyAgICAgICAgICAgICAgICAgICAgKHNjX2lfMjgg
PSAoMCkpOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKHNjX2lfMjg8QmdMX3NjX25iemQy
dG9rc18zNXpkMikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAodG9rX250cyA9ICgoc2NfdG9rc18zNltzY19pXzI4XSkuY2RyKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJnTF9zY19jb25memQyc2V0emQyYWRqb2luemEy
XzQ1emEyKHNjX3N0YXRlc18zMywgKHNjX2lfMjgrKDEpKSwgdG9rX250cywgc2NfaV8yOCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3J3KHNjX3N0YXRlc18zMywgKHNjX2lfMjgr
KDEpKSwgc2Nfc3RhcnRlcnNfNDEsIHNjX2VuZGVyc180MCwgc2NfcHJlZGljdG9yc18zOSwgc2Nf
c3RlcHNfMzgsIHNjX250c180MikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICgrK3Nj
X2lfMjgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIChuYl90b2tzID0gKHNjX3Rva3NfMzYubGVuZ3RoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIChCZ0xfc2NfbmJ6ZDJjb25mc18zMnpkMiA9IChzY19zdGVwc18z
OC5sZW5ndGgpKTsKKyAgICAgICAgICAgICAgICAgICAgKEJnTF9zY19uYnpkMm50c18zMXpkMiA9
IChzY19udHNfNDIubGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgICAgIChCZ0xfc2Nfc3RhdGVz
emEyXzMwemEyID0gKG1ha2Vfc3RhdGVzKG5iX3Rva3MsIEJnTF9zY19uYnpkMmNvbmZzXzMyemQy
KSkpOworICAgICAgICAgICAgICAgICAgICAoZ29hbF9lbmRlcnMgPSAoc2NfZW5kZXJzXzQwWygw
KV0pKTsKKyAgICAgICAgICAgICAgICAgICAgKGwgPSBnb2FsX2VuZGVycyk7CisgICAgICAgICAg
ICAgICAgICAgIHdoaWxlICgobCBpbnN0YW5jZW9mIHNjX1BhaXIpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbmYgPSAobC5jYXIp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQmdMX3NjX2NvbmZ6ZDJzZXR6ZDJhZGpv
aW56YTJ6YTJfNDZ6MDAoc2Nfc3RhdGVzXzMzLCBCZ0xfc2Nfc3RhdGVzemEyXzMwemEyLCBuYl90
b2tzLCBjb25mLCAoMCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobCA9IChsLmNk
cikpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIChpID0gbmJfdG9rcyk7CisgICAgICAgICAgICAgICAgICAgIHdo
aWxlICgoaT49KDApKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChzdGF0ZXMgPSBzY19zdGF0ZXNfMzMpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChCZ0xfc2Nfc3RhdGVzemEyXzI3emEyID0gQmdMX3NjX3N0YXRlc3phMl8z
MHphMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRlX251bSA9IGkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChzY19lbmRlcnNfMjYgPSBzY19lbmRlcnNfNDApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzY19zdGVwc18yNSA9IHNjX3N0ZXBzXzM4KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQmdMX3NjX25iemQybnRzXzI0emQyID0gQmdM
X3NjX25iemQybnRzXzMxemQyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodG9rcyA9
IHNjX3Rva3NfMzYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCZ0xfc2Nfc3RhdGV6
YTJfMjN6YTIgPSAoQmdMX3NjX3N0YXRlc3phMl8zMHphMltpXSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxvb3AxID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBzY19sb29wMV8xMjc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBwcmV2OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgQmdMX3Nj
X3N0YXRlc3phMl8xMjh6YTI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBz
Y19zdGF0ZXNfMTI5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgajsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBzY19pXzEzMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIGhlYWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb25mX3Nl
dDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjX2NvbmZfMTMxOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoc2NfY29uZl8xMzEgPSAoQmdMX3NjX3N0YXRlemEyXzIzemEyWygwKV0pKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoc2NfY29uZl8xMzE+PSgw
KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uZl9zZXQgPSAoQmdMX3NjX3N0
YXRlemEyXzIzemEyWyhzY19jb25mXzEzMSsoMSkpXSkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoaGVhZCA9IChjb25mX3NldFsoNCldKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCZ0xfc2Nfc3RhdGV6YTJfMjN6
YTJbKDApXSA9IChjb25mX3NldFsoMCldKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChjb25mX3NldF9tZXJnZV9uZXdfYmFuZyhjb25mX3NldCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2NfaV8xMzAgPSBoZWFk
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChz
Y19pXzEzMD49KDApKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChpID0gc2NfaV8xMzApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChqID0gc3RhdGVfbnVtKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2Nfc3RhdGVzXzEyOSA9IHN0YXRlcyk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJn
TF9zY19zdGF0ZXN6YTJfMTI4emEyID0gQmdMX3NjX3N0YXRlc3phMl8yN3phMik7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByZXYgPSAoc2Nf
Y29uZl8xMzEtKDEpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCgoc2NfY29uZl8xMzE+PUJnTF9zY19uYnpkMm50c18yNHpkMikmJigo
c2Nfc3RlcHNfMjVbcHJldl0pPj0oMCkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NfbG9vcDFfMTI3ID0gZnVuY3Rpb24o
bCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmRlcl9zZXQ7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0
YXRlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBlbmRlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoKGwgaW5zdGFuY2VvZiBzY19QYWlyKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoZW5kZXIgPSAobC5jYXIpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoZW5kZXJfc2V0ID0gKChzdGF0ZSA9IChzY19zdGF0ZXNfMTI5W2pdKSksIChzdGF0
ZVsoZW5kZXIrKDEpKV0pKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChlbmRlcl9zZXQhPT0g
ZmFsc2UpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoayA9IChlbmRlcl9zZXRbKDIpXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKChrPj0oMCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGs+PWkpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoQmdMX3NjX2NvbmZ6ZDJzZXR6ZDJhZGpv
aW56YTJ6YTJfNDZ6MDAoc2Nfc3RhdGVzXzEyOSwgQmdMX3NjX3N0YXRlc3phMl8xMjh6YTIsIGss
IHByZXYsIGkpKSE9PSBmYWxzZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKEJnTF9zY19jb25memQyc2V0emQyYWRqb2luemEyemEyXzQ2ejAwKHNjX3N0YXRl
c18xMjksIEJnTF9zY19zdGF0ZXN6YTJfMTI4emEyLCBqLCBlbmRlciwgaykpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoayA9IChlbmRlcl9zZXRbKGsrKDUpKV0pKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHNjX2xvb3AxXzEyNygobC5j
ZHIpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChsID0gKGwuY2RyKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChzY19sb29wMV8xMjcoKHNjX2VuZGVyc18yNlsoc2Nfc3RlcHNfMjVb
cHJldl0pXSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChzY19pXzEzMCA9IChjb25mX3NldFsoc2NfaV8xMzArKDUpKV0pKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGxvb3AxKCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdW5kZWZpbmVkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9v
cDEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0taSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
KG9wdHJPcG5kID0gQmdMX3NjX3N0YXRlc3phMl8zMHphMik7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBbc2NfbnRzXzQyLCBzY19zdGFydGVyc180MSwgc2NfZW5kZXJzXzQwLCBzY19wcmVk
aWN0b3JzXzM5LCBzY19zdGVwc18zOCwgc2NfbmFtZXNfMzcsIHNjX3Rva3NfMzYsIG9wdHJPcG5k
LCBpc19wYXJzZWQsIEJnTF9zY19kZXJpdnpkMnRyZWVzemEyXzQ3ejcwLCBCZ0xfc2NfbmJ6ZDJk
ZXJpdnpkMnRyZWVzemEyXzQ4emEyXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
OworICAgICAgICB9CisgICAgfTsKKyAgICBCZ0xfcGFyc2V6ZDJ6ZTNwYXJzZWR6ZjN6YzIgPSBm
dW5jdGlvbihwYXJzZSwgbnQsIGksIGopIHsKKyAgICAgICAgdmFyIGlzX3BhcnNlZDsKKyAgICAg
ICAgdmFyIHN0YXRlczsKKyAgICAgICAgdmFyIGVuZGVyczsKKyAgICAgICAgdmFyIG50czsKKyAg
ICAgICAgcmV0dXJuICgobnRzID0gKHBhcnNlWygwKV0pKSwgKGVuZGVycyA9IChwYXJzZVsoMild
KSksIChzdGF0ZXMgPSAocGFyc2VbKDcpXSkpLCAoaXNfcGFyc2VkID0gKHBhcnNlWyg4KV0pKSwg
KGlzX3BhcnNlZChudCwgaSwgaiwgbnRzLCBlbmRlcnMsIHN0YXRlcykpKTsKKyAgICB9OworICAg
IEJnTF9wYXJzZXpkMnplM3RyZWVzejMxID0gZnVuY3Rpb24ocGFyc2UsIG50LCBpLCBqKSB7Cisg
ICAgICAgIHZhciBCZ0xfc2NfZGVyaXZ6ZDJ0cmVlc3phMl8xMzJ6NzA7CisgICAgICAgIHZhciBz
dGF0ZXM7CisgICAgICAgIHZhciB0b2tzOworICAgICAgICB2YXIgbmFtZXM7CisgICAgICAgIHZh
ciBzdGVwczsKKyAgICAgICAgdmFyIGVuZGVyczsKKyAgICAgICAgdmFyIG50czsKKyAgICAgICAg
cmV0dXJuICgobnRzID0gKHBhcnNlWygwKV0pKSwgKGVuZGVycyA9IChwYXJzZVsoMildKSksIChz
dGVwcyA9IChwYXJzZVsoNCldKSksIChuYW1lcyA9IChwYXJzZVsoNSldKSksICh0b2tzID0gKHBh
cnNlWyg2KV0pKSwgKHN0YXRlcyA9IChwYXJzZVsoNyldKSksIChCZ0xfc2NfZGVyaXZ6ZDJ0cmVl
c3phMl8xMzJ6NzAgPSAocGFyc2VbKDkpXSkpLCAoQmdMX3NjX2Rlcml2emQydHJlZXN6YTJfMTMy
ejcwKG50LCBpLCBqLCBudHMsIGVuZGVycywgc3RlcHMsIG5hbWVzLCB0b2tzLCBzdGF0ZXMpKSk7
CisgICAgfTsKKyAgICBCZ0xfcGFyc2V6ZDJ6ZTNuYnpkMnRyZWVzemUzID0gZnVuY3Rpb24ocGFy
c2UsIG50LCBpLCBqKSB7CisgICAgICAgIHZhciBCZ0xfc2NfbmJ6ZDJkZXJpdnpkMnRyZWVzemEy
XzEzM3phMjsKKyAgICAgICAgdmFyIHN0YXRlczsKKyAgICAgICAgdmFyIHRva3M7CisgICAgICAg
IHZhciBzdGVwczsKKyAgICAgICAgdmFyIGVuZGVyczsKKyAgICAgICAgdmFyIG50czsKKyAgICAg
ICAgcmV0dXJuICgobnRzID0gKHBhcnNlWygwKV0pKSwgKGVuZGVycyA9IChwYXJzZVsoMildKSks
IChzdGVwcyA9IChwYXJzZVsoNCldKSksICh0b2tzID0gKHBhcnNlWyg2KV0pKSwgKHN0YXRlcyA9
IChwYXJzZVsoNyldKSksIChCZ0xfc2NfbmJ6ZDJkZXJpdnpkMnRyZWVzemEyXzEzM3phMiA9IChw
YXJzZVsoMTApXSkpLCAoQmdMX3NjX25iemQyZGVyaXZ6ZDJ0cmVlc3phMl8xMzN6YTIobnQsIGks
IGosIG50cywgZW5kZXJzLCBzdGVwcywgdG9rcywgc3RhdGVzKSkpOworICAgIH07CisgICAgdGVz
dCA9IGZ1bmN0aW9uKGspIHsKKyAgICAgICAgdmFyIHg7CisgICAgICAgIHZhciBwOworICAgICAg
ICByZXR1cm4gKChwID0gKEJnTF9tYWtlemQycGFyc2VyemQyKGNvbnN0X2VhcmxleSwgZnVuY3Rp
b24obCkgeworICAgICAgICAgICAgdmFyIHNjX3hfMTM0OworICAgICAgICAgICAgdmFyIHRhaWwx
MTM0OworICAgICAgICAgICAgdmFyIEwxMTMwOworICAgICAgICAgICAgdmFyIGZhbHNlSGVhZDEx
MzM7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKGZhbHNlSGVhZDExMzMgPSAobmV3
IHNjX1BhaXIobnVsbCwgbnVsbCkpKTsKKyAgICAgICAgICAgICAgICAodGFpbDExMzQgPSBmYWxz
ZUhlYWQxMTMzKTsKKyAgICAgICAgICAgICAgICAoTDExMzAgPSBsKTsKKyAgICAgICAgICAgICAg
ICB3aGlsZSAoIShMMTEzMCA9PT0gbnVsbCkpIHsKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgKHRhaWwxMTM0LmNkciA9IChuZXcgc2NfUGFpcigoKHNjX3hf
MTM0ID0gKEwxMTMwLmNhcikpLCAoc2NfbGlzdChzY194XzEzNCwgc2NfeF8xMzQpKSksIG51bGwp
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAodGFpbDExMzQgPSAodGFpbDExMzQuY2RyKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAoTDExMzAgPSAoTDExMzAuY2RyKSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJu
IChmYWxzZUhlYWQxMTMzLmNkcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0pKSksICh4ID0g
KHAoKHNjX3ZlY3RvcjJsaXN0KChzY19tYWtlVmVjdG9yKGssICJcdTFFOUNhIikpKSkpKSksIChz
Y19sZW5ndGgoKEJnTF9wYXJzZXpkMnplM3RyZWVzejMxKHgsICJcdTFFOUNzIiwgKDApLCBrKSkp
KSk7CisgICAgfTsKKyAgICBCZ0xfZWFybGV5emQyYmVuY2htYXJremQyID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHZhciBhcmdzID0gbnVsbDsKKyAgICAgICAgZm9yICh2YXIgc2NfdG1wID0gYXJn
dW1lbnRzLmxlbmd0aCAtIDE7IHNjX3RtcCA+PSAwOyBzY190bXAtLSkgeworICAgICAgICAgICAg
YXJncyA9IHNjX2NvbnMoYXJndW1lbnRzW3NjX3RtcF0sIGFyZ3MpOworICAgICAgICB9CisgICAg
ICAgIHZhciBrOworICAgICAgICByZXR1cm4gKChrID0gKChhcmdzID09PSBudWxsKT8oNyk6KGFy
Z3MuY2FyKSkpLCAoQmdMX3J1bnpkMmJlbmNobWFya3pkMigiZWFybGV5IiwgKDEpLCBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgIHJldHVybiAodGVzdChrKSk7CisgICAgICAgIH0sIGZ1bmN0aW9u
KHJlc3VsdCkgeworICAgICAgICAgICAgcmV0dXJuICgoc2NfZGlzcGxheShyZXN1bHQpKSwgKHNj
X25ld2xpbmUoKSksIHRydWUpOworICAgICAgICB9KSkpOworICAgIH07Cit9CisKKworLyoqKioq
KioqKioqKiogRU5EIE9GIEdFTkVSQVRFRCBDT0RFICoqKioqKioqKioqKiovCisvLyBJbnZva2Ug
dGhpcyBmdW5jdGlvbiB0byBydW4gYSBiZW5jaG1hcmsuCisvLyBUaGUgZmlyc3QgYXJndW1lbnQg
aXMgYSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIGJlbmNobWFyay4KKy8vIFRoZSBzZWNvbmQgYXJn
dW1lbnQgaXMgdGhlIG51bWJlciBvZiB0aW1lcyB0byBydW4gdGhlIGJlbmNobWFyay4KKy8vIFRo
ZSB0aGlyZCBhcmd1bWVudCBpcyBhIGZ1bmN0aW9uIHRoYXQgcnVucyB0aGUgYmVuY2htYXJrLgor
Ly8gVGhlIGZvdXJ0aCBhcmd1bWVudCBpcyBhIHVuYXJ5IGZ1bmN0aW9uIHRoYXQgd2FybnMgaWYg
dGhlIHJlc3VsdAorLy8gcmV0dXJuZWQgYnkgdGhlIGJlbmNobWFyayBpcyBpbmNvcnJlY3QuCisv
LworLy8gRXhhbXBsZToKKy8vIFJ1bkJlbmNobWFyaygibmV3IEFycmF5KCkiLAorLy8gICAgICAg
ICAgICAgIDEsCisvLyAgICAgICAgICAgICAgZnVuY3Rpb24gKCkgeyBuZXcgQXJyYXkoMTAwMDAw
MCk7IH0KKy8vICAgICAgICAgICAgICBmdW5jdGlvbiAodikgeworLy8gICAgICAgICAgICAgICAg
cmV0dXJuICh2IGluc3RhbmNlb2YgQXJyYXkpICYmICh2Lmxlbmd0aCA9PSAxMDAwMDAwKTsKKy8v
ICAgICAgICAgICAgICB9KTsKKworU0NfREVGQVVMVF9PVVQgPSBuZXcgc2NfR2VuZXJpY091dHB1
dFBvcnQoZnVuY3Rpb24ocykge30pOworU0NfRVJST1JfT1VUID0gU0NfREVGQVVMVF9PVVQ7CisK
K2Z1bmN0aW9uIFJ1bkJlbmNobWFyayhuYW1lLCBjb3VudCwgcnVuLCB3YXJuKSB7CisgIGZvciAo
dmFyIG4gPSAwOyBuIDwgY291bnQ7ICsrbikgeworICAgIHJlc3VsdCA9IHJ1bigpOworICB9Cit9
CisKK3ZhciBCZ0xfcnVuemQyYmVuY2htYXJremQyID0gUnVuQmVuY2htYXJrOworCisvLyBCZ0xf
ZWFybGV5emQyYmVuY2htYXJremQyKCk7CisvLyBCZ0xfYm95ZXJ6ZDJiZW5jaG1hcmt6ZDIoKTsK
SW5kZXg6IFN1blNwaWRlci90ZXN0cy92OC1yYXl0cmFjZS5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTdW5T
cGlkZXIvdGVzdHMvdjgtcmF5dHJhY2UuanMJKHJldmlzaW9uIDApCisrKyBTdW5TcGlkZXIvdGVz
dHMvdjgtcmF5dHJhY2UuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzQxNCBAQAorLy8gVGhl
IHJheSB0cmFjZXIgY29kZSBpbiB0aGlzIGZpbGUgaXMgd3JpdHRlbiBieSBBZGFtIEJ1cm1pc3Rl
ci4gSXQKKy8vIGlzIGF2YWlsYWJsZSBpbiBpdHMgb3JpZ2luYWwgZm9ybSBmcm9tOgorLy8KKy8v
ICAgaHR0cDovL2xhYnMuZmxvZy5uei5jby9yYXl0cmFjZXIvCisvLworLy8gSXQgaGFzIGJlZW4g
bW9kaWZpZWQgc2xpZ2h0bHkgYnkgR29vZ2xlIHRvIHdvcmsgYXMgYSBzdGFuZGFsb25lCisvLyBi
ZW5jaG1hcmssIGJ1dCB0aGUgYWxsIHRoZSBjb21wdXRhdGlvbmFsIGNvZGUgcmVtYWlucworLy8g
dW50b3VjaGVkLiBUaGlzIGZpbGUgYWxzbyBjb250YWlucyBhIGNvcHkgb2YgdGhlIFByb3RvdHlw
ZQorLy8gSmF2YVNjcmlwdCBmcmFtZXdvcmsgd2hpY2ggaXMgdXNlZCBieSB0aGUgcmF5IHRyYWNl
ci4KKworLy8gQ3JlYXRlIGR1bW15IG9iamVjdHMgaWYgd2UncmUgbm90IHJ1bm5pbmcgaW4gYSBi
cm93c2VyLgoraWYgKHR5cGVvZiBkb2N1bWVudCA9PSAndW5kZWZpbmVkJykgeworICBkb2N1bWVu
dCA9IHsgfTsKKyAgd2luZG93ID0geyBvcGVyYTogbnVsbCB9OworICBuYXZpZ2F0b3IgPSB7IHVz
ZXJBZ2VudDogbnVsbCwgYXBwVmVyc2lvbjogIiIgfTsKK30KKworCisvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKy8qICBQcm90b3R5cGUgSmF2YVNjcmlwdCBmcmFt
ZXdvcmssIHZlcnNpb24gMS41LjAKKyAqICAoYykgMjAwNS0yMDA3IFNhbSBTdGVwaGVuc29uCisg
KgorICogIFByb3RvdHlwZSBpcyBmcmVlbHkgZGlzdHJpYnV0YWJsZSB1bmRlciB0aGUgdGVybXMg
b2YgYW4gTUlULXN0eWxlIGxpY2Vuc2UuCisgKiAgRm9yIGRldGFpbHMsIHNlZSB0aGUgUHJvdG90
eXBlIHdlYiBzaXRlOiBodHRwOi8vcHJvdG90eXBlLmNvbmlvLm5ldC8KKyAqCisvKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLQordmFyIFByb3RvdHlwZSA9IHsK
KyAgVmVyc2lvbjogJzEuNS4wJywKKyAgQnJvd3NlckZlYXR1cmVzOiB7CisgICAgWFBhdGg6ICEh
ZG9jdW1lbnQuZXZhbHVhdGUKKyAgfSwKKworICBTY3JpcHRGcmFnbWVudDogJyg/OjxzY3JpcHQu
Kj8+KSgoXG58XHJ8LikqPykoPzo8XC9zY3JpcHQ+KScsCisgIGVtcHR5RnVuY3Rpb246IGZ1bmN0
aW9uKCkge30sCisgIEs6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHggfQorfQorCit2YXIgQ2xhc3Mg
PSB7CisgIGNyZWF0ZTogZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAg
ICAgdGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgfQorICB9Cit9
CisKK3ZhciBBYnN0cmFjdCA9IG5ldyBPYmplY3QoKTsKKworT2JqZWN0LmV4dGVuZCA9IGZ1bmN0
aW9uKGRlc3RpbmF0aW9uLCBzb3VyY2UpIHsKKyAgZm9yICh2YXIgcHJvcGVydHkgaW4gc291cmNl
KSB7CisgICAgZGVzdGluYXRpb25bcHJvcGVydHldID0gc291cmNlW3Byb3BlcnR5XTsKKyAgfQor
ICByZXR1cm4gZGVzdGluYXRpb247Cit9CisKK09iamVjdC5leHRlbmQoT2JqZWN0LCB7CisgIGlu
c3BlY3Q6IGZ1bmN0aW9uKG9iamVjdCkgeworICAgIHRyeSB7CisgICAgICBpZiAob2JqZWN0ID09
PSB1bmRlZmluZWQpIHJldHVybiAndW5kZWZpbmVkJzsKKyAgICAgIGlmIChvYmplY3QgPT09IG51
bGwpIHJldHVybiAnbnVsbCc7CisgICAgICByZXR1cm4gb2JqZWN0Lmluc3BlY3QgPyBvYmplY3Qu
aW5zcGVjdCgpIDogb2JqZWN0LnRvU3RyaW5nKCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAg
aWYgKGUgaW5zdGFuY2VvZiBSYW5nZUVycm9yKSByZXR1cm4gJy4uLic7CisgICAgICB0aHJvdyBl
OworICAgIH0KKyAgfSwKKworICBrZXlzOiBmdW5jdGlvbihvYmplY3QpIHsKKyAgICB2YXIga2V5
cyA9IFtdOworICAgIGZvciAodmFyIHByb3BlcnR5IGluIG9iamVjdCkKKyAgICAgIGtleXMucHVz
aChwcm9wZXJ0eSk7CisgICAgcmV0dXJuIGtleXM7CisgIH0sCisKKyAgdmFsdWVzOiBmdW5jdGlv
bihvYmplY3QpIHsKKyAgICB2YXIgdmFsdWVzID0gW107CisgICAgZm9yICh2YXIgcHJvcGVydHkg
aW4gb2JqZWN0KQorICAgICAgdmFsdWVzLnB1c2gob2JqZWN0W3Byb3BlcnR5XSk7CisgICAgcmV0
dXJuIHZhbHVlczsKKyAgfSwKKworICBjbG9uZTogZnVuY3Rpb24ob2JqZWN0KSB7CisgICAgcmV0
dXJuIE9iamVjdC5leHRlbmQoe30sIG9iamVjdCk7CisgIH0KK30pOworCitGdW5jdGlvbi5wcm90
b3R5cGUuYmluZCA9IGZ1bmN0aW9uKCkgeworICB2YXIgX19tZXRob2QgPSB0aGlzLCBhcmdzID0g
JEEoYXJndW1lbnRzKSwgb2JqZWN0ID0gYXJncy5zaGlmdCgpOworICByZXR1cm4gZnVuY3Rpb24o
KSB7CisgICAgcmV0dXJuIF9fbWV0aG9kLmFwcGx5KG9iamVjdCwgYXJncy5jb25jYXQoJEEoYXJn
dW1lbnRzKSkpOworICB9Cit9CisKK0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kQXNFdmVudExpc3Rl
bmVyID0gZnVuY3Rpb24ob2JqZWN0KSB7CisgIHZhciBfX21ldGhvZCA9IHRoaXMsIGFyZ3MgPSAk
QShhcmd1bWVudHMpLCBvYmplY3QgPSBhcmdzLnNoaWZ0KCk7CisgIHJldHVybiBmdW5jdGlvbihl
dmVudCkgeworICAgIHJldHVybiBfX21ldGhvZC5hcHBseShvYmplY3QsIFsoIGV2ZW50IHx8IHdp
bmRvdy5ldmVudCldLmNvbmNhdChhcmdzKS5jb25jYXQoJEEoYXJndW1lbnRzKSkpOworICB9Cit9
CisKK09iamVjdC5leHRlbmQoTnVtYmVyLnByb3RvdHlwZSwgeworICB0b0NvbG9yUGFydDogZnVu
Y3Rpb24oKSB7CisgICAgdmFyIGRpZ2l0cyA9IHRoaXMudG9TdHJpbmcoMTYpOworICAgIGlmICh0
aGlzIDwgMTYpIHJldHVybiAnMCcgKyBkaWdpdHM7CisgICAgcmV0dXJuIGRpZ2l0czsKKyAgfSwK
KworICBzdWNjOiBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcyArIDE7CisgIH0sCisKKyAg
dGltZXM6IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CisgICAgJFIoMCwgdGhpcywgdHJ1ZSkuZWFjaChp
dGVyYXRvcik7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KK30pOworCit2YXIgVHJ5ID0geworICB0
aGVzZTogZnVuY3Rpb24oKSB7CisgICAgdmFyIHJldHVyblZhbHVlOworCisgICAgZm9yICh2YXIg
aSA9IDAsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgeworICAg
ICAgdmFyIGxhbWJkYSA9IGFyZ3VtZW50c1tpXTsKKyAgICAgIHRyeSB7CisgICAgICAgIHJldHVy
blZhbHVlID0gbGFtYmRhKCk7CisgICAgICAgIGJyZWFrOworICAgICAgfSBjYXRjaCAoZSkge30K
KyAgICB9CisKKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgIH0KK30KKworLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCisKK3ZhciBQZXJpb2RpY2FsRXhlY3V0ZXIgPSBDbGFzcy5jcmVhdGUoKTsKK1Bl
cmlvZGljYWxFeGVjdXRlci5wcm90b3R5cGUgPSB7CisgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGNh
bGxiYWNrLCBmcmVxdWVuY3kpIHsKKyAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAg
dGhpcy5mcmVxdWVuY3kgPSBmcmVxdWVuY3k7CisgICAgdGhpcy5jdXJyZW50bHlFeGVjdXRpbmcg
PSBmYWxzZTsKKworICAgIHRoaXMucmVnaXN0ZXJDYWxsYmFjaygpOworICB9LAorCisgIHJlZ2lz
dGVyQ2FsbGJhY2s6IGZ1bmN0aW9uKCkgeworICAgIHRoaXMudGltZXIgPSBzZXRJbnRlcnZhbCh0
aGlzLm9uVGltZXJFdmVudC5iaW5kKHRoaXMpLCB0aGlzLmZyZXF1ZW5jeSAqIDEwMDApOworICB9
LAorCisgIHN0b3A6IGZ1bmN0aW9uKCkgeworICAgIGlmICghdGhpcy50aW1lcikgcmV0dXJuOwor
ICAgIGNsZWFySW50ZXJ2YWwodGhpcy50aW1lcik7CisgICAgdGhpcy50aW1lciA9IG51bGw7Cisg
IH0sCisKKyAgb25UaW1lckV2ZW50OiBmdW5jdGlvbigpIHsKKyAgICBpZiAoIXRoaXMuY3VycmVu
dGx5RXhlY3V0aW5nKSB7CisgICAgICB0cnkgeworICAgICAgICB0aGlzLmN1cnJlbnRseUV4ZWN1
dGluZyA9IHRydWU7CisgICAgICAgIHRoaXMuY2FsbGJhY2sodGhpcyk7CisgICAgICB9IGZpbmFs
bHkgeworICAgICAgICB0aGlzLmN1cnJlbnRseUV4ZWN1dGluZyA9IGZhbHNlOworICAgICAgfQor
ICAgIH0KKyAgfQorfQorU3RyaW5nLmludGVycHJldCA9IGZ1bmN0aW9uKHZhbHVlKXsKKyAgcmV0
dXJuIHZhbHVlID09IG51bGwgPyAnJyA6IFN0cmluZyh2YWx1ZSk7Cit9CisKK09iamVjdC5leHRl
bmQoU3RyaW5nLnByb3RvdHlwZSwgeworICBnc3ViOiBmdW5jdGlvbihwYXR0ZXJuLCByZXBsYWNl
bWVudCkgeworICAgIHZhciByZXN1bHQgPSAnJywgc291cmNlID0gdGhpcywgbWF0Y2g7CisgICAg
cmVwbGFjZW1lbnQgPSBhcmd1bWVudHMuY2FsbGVlLnByZXBhcmVSZXBsYWNlbWVudChyZXBsYWNl
bWVudCk7CisKKyAgICB3aGlsZSAoc291cmNlLmxlbmd0aCA+IDApIHsKKyAgICAgIGlmIChtYXRj
aCA9IHNvdXJjZS5tYXRjaChwYXR0ZXJuKSkgeworICAgICAgICByZXN1bHQgKz0gc291cmNlLnNs
aWNlKDAsIG1hdGNoLmluZGV4KTsKKyAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5pbnRlcnByZXQo
cmVwbGFjZW1lbnQobWF0Y2gpKTsKKyAgICAgICAgc291cmNlICA9IHNvdXJjZS5zbGljZShtYXRj
aC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCk7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXN1
bHQgKz0gc291cmNlLCBzb3VyY2UgPSAnJzsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJl
c3VsdDsKKyAgfSwKKworICBzdWI6IGZ1bmN0aW9uKHBhdHRlcm4sIHJlcGxhY2VtZW50LCBjb3Vu
dCkgeworICAgIHJlcGxhY2VtZW50ID0gdGhpcy5nc3ViLnByZXBhcmVSZXBsYWNlbWVudChyZXBs
YWNlbWVudCk7CisgICAgY291bnQgPSBjb3VudCA9PT0gdW5kZWZpbmVkID8gMSA6IGNvdW50Owor
CisgICAgcmV0dXJuIHRoaXMuZ3N1YihwYXR0ZXJuLCBmdW5jdGlvbihtYXRjaCkgeworICAgICAg
aWYgKC0tY291bnQgPCAwKSByZXR1cm4gbWF0Y2hbMF07CisgICAgICByZXR1cm4gcmVwbGFjZW1l
bnQobWF0Y2gpOworICAgIH0pOworICB9LAorCisgIHNjYW46IGZ1bmN0aW9uKHBhdHRlcm4sIGl0
ZXJhdG9yKSB7CisgICAgdGhpcy5nc3ViKHBhdHRlcm4sIGl0ZXJhdG9yKTsKKyAgICByZXR1cm4g
dGhpczsKKyAgfSwKKworICB0cnVuY2F0ZTogZnVuY3Rpb24obGVuZ3RoLCB0cnVuY2F0aW9uKSB7
CisgICAgbGVuZ3RoID0gbGVuZ3RoIHx8IDMwOworICAgIHRydW5jYXRpb24gPSB0cnVuY2F0aW9u
ID09PSB1bmRlZmluZWQgPyAnLi4uJyA6IHRydW5jYXRpb247CisgICAgcmV0dXJuIHRoaXMubGVu
Z3RoID4gbGVuZ3RoID8KKyAgICAgIHRoaXMuc2xpY2UoMCwgbGVuZ3RoIC0gdHJ1bmNhdGlvbi5s
ZW5ndGgpICsgdHJ1bmNhdGlvbiA6IHRoaXM7CisgIH0sCisKKyAgc3RyaXA6IGZ1bmN0aW9uKCkg
eworICAgIHJldHVybiB0aGlzLnJlcGxhY2UoL15ccysvLCAnJykucmVwbGFjZSgvXHMrJC8sICcn
KTsKKyAgfSwKKworICBzdHJpcFRhZ3M6IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLnJl
cGxhY2UoLzxcLz9bXj5dKz4vZ2ksICcnKTsKKyAgfSwKKworICBzdHJpcFNjcmlwdHM6IGZ1bmN0
aW9uKCkgeworICAgIHJldHVybiB0aGlzLnJlcGxhY2UobmV3IFJlZ0V4cChQcm90b3R5cGUuU2Ny
aXB0RnJhZ21lbnQsICdpbWcnKSwgJycpOworICB9LAorCisgIGV4dHJhY3RTY3JpcHRzOiBmdW5j
dGlvbigpIHsKKyAgICB2YXIgbWF0Y2hBbGwgPSBuZXcgUmVnRXhwKFByb3RvdHlwZS5TY3JpcHRG
cmFnbWVudCwgJ2ltZycpOworICAgIHZhciBtYXRjaE9uZSA9IG5ldyBSZWdFeHAoUHJvdG90eXBl
LlNjcmlwdEZyYWdtZW50LCAnaW0nKTsKKyAgICByZXR1cm4gKHRoaXMubWF0Y2gobWF0Y2hBbGwp
IHx8IFtdKS5tYXAoZnVuY3Rpb24oc2NyaXB0VGFnKSB7CisgICAgICByZXR1cm4gKHNjcmlwdFRh
Zy5tYXRjaChtYXRjaE9uZSkgfHwgWycnLCAnJ10pWzFdOworICAgIH0pOworICB9LAorCisgIGV2
YWxTY3JpcHRzOiBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5leHRyYWN0U2NyaXB0cygp
Lm1hcChmdW5jdGlvbihzY3JpcHQpIHsgcmV0dXJuIGV2YWwoc2NyaXB0KSB9KTsKKyAgfSwKKwor
ICBlc2NhcGVIVE1MOiBmdW5jdGlvbigpIHsKKyAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnZGl2Jyk7CisgICAgdmFyIHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0
aGlzKTsKKyAgICBkaXYuYXBwZW5kQ2hpbGQodGV4dCk7CisgICAgcmV0dXJuIGRpdi5pbm5lckhU
TUw7CisgIH0sCisKKyAgdW5lc2NhcGVIVE1MOiBmdW5jdGlvbigpIHsKKyAgICB2YXIgZGl2ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgZGl2LmlubmVySFRNTCA9IHRoaXMu
c3RyaXBUYWdzKCk7CisgICAgcmV0dXJuIGRpdi5jaGlsZE5vZGVzWzBdID8gKGRpdi5jaGlsZE5v
ZGVzLmxlbmd0aCA+IDEgPworICAgICAgJEEoZGl2LmNoaWxkTm9kZXMpLmluamVjdCgnJyxmdW5j
dGlvbihtZW1vLG5vZGUpeyByZXR1cm4gbWVtbytub2RlLm5vZGVWYWx1ZSB9KSA6CisgICAgICBk
aXYuY2hpbGROb2Rlc1swXS5ub2RlVmFsdWUpIDogJyc7CisgIH0sCisKKyAgdG9RdWVyeVBhcmFt
czogZnVuY3Rpb24oc2VwYXJhdG9yKSB7CisgICAgdmFyIG1hdGNoID0gdGhpcy5zdHJpcCgpLm1h
dGNoKC8oW14/I10qKSgjLiopPyQvKTsKKyAgICBpZiAoIW1hdGNoKSByZXR1cm4ge307CisKKyAg
ICByZXR1cm4gbWF0Y2hbMV0uc3BsaXQoc2VwYXJhdG9yIHx8ICcmJykuaW5qZWN0KHt9LCBmdW5j
dGlvbihoYXNoLCBwYWlyKSB7CisgICAgICBpZiAoKHBhaXIgPSBwYWlyLnNwbGl0KCc9JykpWzBd
KSB7CisgICAgICAgIHZhciBuYW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KHBhaXJbMF0pOworICAg
ICAgICB2YXIgdmFsdWUgPSBwYWlyWzFdID8gZGVjb2RlVVJJQ29tcG9uZW50KHBhaXJbMV0pIDog
dW5kZWZpbmVkOworCisgICAgICAgIGlmIChoYXNoW25hbWVdICE9PSB1bmRlZmluZWQpIHsKKyAg
ICAgICAgICBpZiAoaGFzaFtuYW1lXS5jb25zdHJ1Y3RvciAhPSBBcnJheSkKKyAgICAgICAgICAg
IGhhc2hbbmFtZV0gPSBbaGFzaFtuYW1lXV07CisgICAgICAgICAgaWYgKHZhbHVlKSBoYXNoW25h
bWVdLnB1c2godmFsdWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaGFzaFtuYW1lXSA9IHZh
bHVlOworICAgICAgfQorICAgICAgcmV0dXJuIGhhc2g7CisgICAgfSk7CisgIH0sCisKKyAgdG9B
cnJheTogZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuc3BsaXQoJycpOworICB9LAorCisg
IHN1Y2M6IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLnNsaWNlKDAsIHRoaXMubGVuZ3Ro
IC0gMSkgKworICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLmNoYXJDb2RlQXQodGhpcy5s
ZW5ndGggLSAxKSArIDEpOworICB9LAorCisgIGNhbWVsaXplOiBmdW5jdGlvbigpIHsKKyAgICB2
YXIgcGFydHMgPSB0aGlzLnNwbGl0KCctJyksIGxlbiA9IHBhcnRzLmxlbmd0aDsKKyAgICBpZiAo
bGVuID09IDEpIHJldHVybiBwYXJ0c1swXTsKKworICAgIHZhciBjYW1lbGl6ZWQgPSB0aGlzLmNo
YXJBdCgwKSA9PSAnLScKKyAgICAgID8gcGFydHNbMF0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkg
KyBwYXJ0c1swXS5zdWJzdHJpbmcoMSkKKyAgICAgIDogcGFydHNbMF07CisKKyAgICBmb3IgKHZh
ciBpID0gMTsgaSA8IGxlbjsgaSsrKQorICAgICAgY2FtZWxpemVkICs9IHBhcnRzW2ldLmNoYXJB
dCgwKS50b1VwcGVyQ2FzZSgpICsgcGFydHNbaV0uc3Vic3RyaW5nKDEpOworCisgICAgcmV0dXJu
IGNhbWVsaXplZDsKKyAgfSwKKworICBjYXBpdGFsaXplOiBmdW5jdGlvbigpeworICAgIHJldHVy
biB0aGlzLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGhpcy5zdWJzdHJpbmcoMSkudG9Mb3dl
ckNhc2UoKTsKKyAgfSwKKworICB1bmRlcnNjb3JlOiBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4g
dGhpcy5nc3ViKC86Oi8sICcvJykuZ3N1YigvKFtBLVpdKykoW0EtWl1bYS16XSkvLCcjezF9XyN7
Mn0nKS5nc3ViKC8oW2EtelxkXSkoW0EtWl0pLywnI3sxfV8jezJ9JykuZ3N1YigvLS8sJ18nKS50
b0xvd2VyQ2FzZSgpOworICB9LAorCisgIGRhc2hlcml6ZTogZnVuY3Rpb24oKSB7CisgICAgcmV0
dXJuIHRoaXMuZ3N1YigvXy8sJy0nKTsKKyAgfSwKKworICBpbnNwZWN0OiBmdW5jdGlvbih1c2VE
b3VibGVRdW90ZXMpIHsKKyAgICB2YXIgZXNjYXBlZFN0cmluZyA9IHRoaXMucmVwbGFjZSgvXFwv
ZywgJ1xcXFwnKTsKKyAgICBpZiAodXNlRG91YmxlUXVvdGVzKQorICAgICAgcmV0dXJuICciJyAr
IGVzY2FwZWRTdHJpbmcucmVwbGFjZSgvIi9nLCAnXFwiJykgKyAnIic7CisgICAgZWxzZQorICAg
ICAgcmV0dXJuICInIiArIGVzY2FwZWRTdHJpbmcucmVwbGFjZSgvJy9nLCAnXFxcJycpICsgIici
OworICB9Cit9KTsKKworU3RyaW5nLnByb3RvdHlwZS5nc3ViLnByZXBhcmVSZXBsYWNlbWVudCA9
IGZ1bmN0aW9uKHJlcGxhY2VtZW50KSB7CisgIGlmICh0eXBlb2YgcmVwbGFjZW1lbnQgPT0gJ2Z1
bmN0aW9uJykgcmV0dXJuIHJlcGxhY2VtZW50OworICB2YXIgdGVtcGxhdGUgPSBuZXcgVGVtcGxh
dGUocmVwbGFjZW1lbnQpOworICByZXR1cm4gZnVuY3Rpb24obWF0Y2gpIHsgcmV0dXJuIHRlbXBs
YXRlLmV2YWx1YXRlKG1hdGNoKSB9OworfQorCitTdHJpbmcucHJvdG90eXBlLnBhcnNlUXVlcnkg
PSBTdHJpbmcucHJvdG90eXBlLnRvUXVlcnlQYXJhbXM7CisKK3ZhciBUZW1wbGF0ZSA9IENsYXNz
LmNyZWF0ZSgpOworVGVtcGxhdGUuUGF0dGVybiA9IC8oXnwufFxyfFxuKSgjXHsoLio/KVx9KS87
CitUZW1wbGF0ZS5wcm90b3R5cGUgPSB7CisgIGluaXRpYWxpemU6IGZ1bmN0aW9uKHRlbXBsYXRl
LCBwYXR0ZXJuKSB7CisgICAgdGhpcy50ZW1wbGF0ZSA9IHRlbXBsYXRlLnRvU3RyaW5nKCk7Cisg
ICAgdGhpcy5wYXR0ZXJuICA9IHBhdHRlcm4gfHwgVGVtcGxhdGUuUGF0dGVybjsKKyAgfSwKKwor
ICBldmFsdWF0ZTogZnVuY3Rpb24ob2JqZWN0KSB7CisgICAgcmV0dXJuIHRoaXMudGVtcGxhdGUu
Z3N1Yih0aGlzLnBhdHRlcm4sIGZ1bmN0aW9uKG1hdGNoKSB7CisgICAgICB2YXIgYmVmb3JlID0g
bWF0Y2hbMV07CisgICAgICBpZiAoYmVmb3JlID09ICdcXCcpIHJldHVybiBtYXRjaFsyXTsKKyAg
ICAgIHJldHVybiBiZWZvcmUgKyBTdHJpbmcuaW50ZXJwcmV0KG9iamVjdFttYXRjaFszXV0pOwor
ICAgIH0pOworICB9Cit9CisKK3ZhciAkYnJlYWsgICAgPSBuZXcgT2JqZWN0KCk7Cit2YXIgJGNv
bnRpbnVlID0gbmV3IE9iamVjdCgpOworCit2YXIgRW51bWVyYWJsZSA9IHsKKyAgZWFjaDogZnVu
Y3Rpb24oaXRlcmF0b3IpIHsKKyAgICB2YXIgaW5kZXggPSAwOworICAgIHRyeSB7CisgICAgICB0
aGlzLl9lYWNoKGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgaXRl
cmF0b3IodmFsdWUsIGluZGV4KyspOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAg
aWYgKGUgIT0gJGNvbnRpbnVlKSB0aHJvdyBlOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9
IGNhdGNoIChlKSB7CisgICAgICBpZiAoZSAhPSAkYnJlYWspIHRocm93IGU7CisgICAgfQorICAg
IHJldHVybiB0aGlzOworICB9LAorCisgIGVhY2hTbGljZTogZnVuY3Rpb24obnVtYmVyLCBpdGVy
YXRvcikgeworICAgIHZhciBpbmRleCA9IC1udW1iZXIsIHNsaWNlcyA9IFtdLCBhcnJheSA9IHRo
aXMudG9BcnJheSgpOworICAgIHdoaWxlICgoaW5kZXggKz0gbnVtYmVyKSA8IGFycmF5Lmxlbmd0
aCkKKyAgICAgIHNsaWNlcy5wdXNoKGFycmF5LnNsaWNlKGluZGV4LCBpbmRleCtudW1iZXIpKTsK
KyAgICByZXR1cm4gc2xpY2VzLm1hcChpdGVyYXRvcik7CisgIH0sCisKKyAgYWxsOiBmdW5jdGlv
bihpdGVyYXRvcikgeworICAgIHZhciByZXN1bHQgPSB0cnVlOworICAgIHRoaXMuZWFjaChmdW5j
dGlvbih2YWx1ZSwgaW5kZXgpIHsKKyAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAhIShpdGVyYXRv
ciB8fCBQcm90b3R5cGUuSykodmFsdWUsIGluZGV4KTsKKyAgICAgIGlmICghcmVzdWx0KSB0aHJv
dyAkYnJlYWs7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfSwKKworICBhbnk6IGZ1
bmN0aW9uKGl0ZXJhdG9yKSB7CisgICAgdmFyIHJlc3VsdCA9IGZhbHNlOworICAgIHRoaXMuZWFj
aChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKKyAgICAgIGlmIChyZXN1bHQgPSAhIShpdGVyYXRv
ciB8fCBQcm90b3R5cGUuSykodmFsdWUsIGluZGV4KSkKKyAgICAgICAgdGhyb3cgJGJyZWFrOwor
ICAgIH0pOworICAgIHJldHVybiByZXN1bHQ7CisgIH0sCisKKyAgY29sbGVjdDogZnVuY3Rpb24o
aXRlcmF0b3IpIHsKKyAgICB2YXIgcmVzdWx0cyA9IFtdOworICAgIHRoaXMuZWFjaChmdW5jdGlv
bih2YWx1ZSwgaW5kZXgpIHsKKyAgICAgIHJlc3VsdHMucHVzaCgoaXRlcmF0b3IgfHwgUHJvdG90
eXBlLkspKHZhbHVlLCBpbmRleCkpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHRzOworICB9
LAorCisgIGRldGVjdDogZnVuY3Rpb24oaXRlcmF0b3IpIHsKKyAgICB2YXIgcmVzdWx0OworICAg
IHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKKyAgICAgIGlmIChpdGVyYXRvcih2
YWx1ZSwgaW5kZXgpKSB7CisgICAgICAgIHJlc3VsdCA9IHZhbHVlOworICAgICAgICB0aHJvdyAk
YnJlYWs7CisgICAgICB9CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfSwKKworICBm
aW5kQWxsOiBmdW5jdGlvbihpdGVyYXRvcikgeworICAgIHZhciByZXN1bHRzID0gW107CisgICAg
dGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgeworICAgICAgaWYgKGl0ZXJhdG9yKHZh
bHVlLCBpbmRleCkpCisgICAgICAgIHJlc3VsdHMucHVzaCh2YWx1ZSk7CisgICAgfSk7CisgICAg
cmV0dXJuIHJlc3VsdHM7CisgIH0sCisKKyAgZ3JlcDogZnVuY3Rpb24ocGF0dGVybiwgaXRlcmF0
b3IpIHsKKyAgICB2YXIgcmVzdWx0cyA9IFtdOworICAgIHRoaXMuZWFjaChmdW5jdGlvbih2YWx1
ZSwgaW5kZXgpIHsKKyAgICAgIHZhciBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7Cisg
ICAgICBpZiAoc3RyaW5nVmFsdWUubWF0Y2gocGF0dGVybikpCisgICAgICAgIHJlc3VsdHMucHVz
aCgoaXRlcmF0b3IgfHwgUHJvdG90eXBlLkspKHZhbHVlLCBpbmRleCkpOworICAgIH0pCisgICAg
cmV0dXJuIHJlc3VsdHM7CisgIH0sCisKKyAgaW5jbHVkZTogZnVuY3Rpb24ob2JqZWN0KSB7Cisg
ICAgdmFyIGZvdW5kID0gZmFsc2U7CisgICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlKSB7Cisg
ICAgICBpZiAodmFsdWUgPT0gb2JqZWN0KSB7CisgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAg
ICAgdGhyb3cgJGJyZWFrOworICAgICAgfQorICAgIH0pOworICAgIHJldHVybiBmb3VuZDsKKyAg
fSwKKworICBpbkdyb3Vwc09mOiBmdW5jdGlvbihudW1iZXIsIGZpbGxXaXRoKSB7CisgICAgZmls
bFdpdGggPSBmaWxsV2l0aCA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGZpbGxXaXRoOworICAgIHJl
dHVybiB0aGlzLmVhY2hTbGljZShudW1iZXIsIGZ1bmN0aW9uKHNsaWNlKSB7CisgICAgICB3aGls
ZShzbGljZS5sZW5ndGggPCBudW1iZXIpIHNsaWNlLnB1c2goZmlsbFdpdGgpOworICAgICAgcmV0
dXJuIHNsaWNlOworICAgIH0pOworICB9LAorCisgIGluamVjdDogZnVuY3Rpb24obWVtbywgaXRl
cmF0b3IpIHsKKyAgICB0aGlzLmVhY2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CisgICAgICBt
ZW1vID0gaXRlcmF0b3IobWVtbywgdmFsdWUsIGluZGV4KTsKKyAgICB9KTsKKyAgICByZXR1cm4g
bWVtbzsKKyAgfSwKKworICBpbnZva2U6IGZ1bmN0aW9uKG1ldGhvZCkgeworICAgIHZhciBhcmdz
ID0gJEEoYXJndW1lbnRzKS5zbGljZSgxKTsKKyAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24o
dmFsdWUpIHsKKyAgICAgIHJldHVybiB2YWx1ZVttZXRob2RdLmFwcGx5KHZhbHVlLCBhcmdzKTsK
KyAgICB9KTsKKyAgfSwKKworICBtYXg6IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CisgICAgdmFyIHJl
c3VsdDsKKyAgICB0aGlzLmVhY2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CisgICAgICB2YWx1
ZSA9IChpdGVyYXRvciB8fCBQcm90b3R5cGUuSykodmFsdWUsIGluZGV4KTsKKyAgICAgIGlmIChy
ZXN1bHQgPT0gdW5kZWZpbmVkIHx8IHZhbHVlID49IHJlc3VsdCkKKyAgICAgICAgcmVzdWx0ID0g
dmFsdWU7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfSwKKworICBtaW46IGZ1bmN0
aW9uKGl0ZXJhdG9yKSB7CisgICAgdmFyIHJlc3VsdDsKKyAgICB0aGlzLmVhY2goZnVuY3Rpb24o
dmFsdWUsIGluZGV4KSB7CisgICAgICB2YWx1ZSA9IChpdGVyYXRvciB8fCBQcm90b3R5cGUuSyko
dmFsdWUsIGluZGV4KTsKKyAgICAgIGlmIChyZXN1bHQgPT0gdW5kZWZpbmVkIHx8IHZhbHVlIDwg
cmVzdWx0KQorICAgICAgICByZXN1bHQgPSB2YWx1ZTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVz
dWx0OworICB9LAorCisgIHBhcnRpdGlvbjogZnVuY3Rpb24oaXRlcmF0b3IpIHsKKyAgICB2YXIg
dHJ1ZXMgPSBbXSwgZmFsc2VzID0gW107CisgICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBp
bmRleCkgeworICAgICAgKChpdGVyYXRvciB8fCBQcm90b3R5cGUuSykodmFsdWUsIGluZGV4KSA/
CisgICAgICAgIHRydWVzIDogZmFsc2VzKS5wdXNoKHZhbHVlKTsKKyAgICB9KTsKKyAgICByZXR1
cm4gW3RydWVzLCBmYWxzZXNdOworICB9LAorCisgIHBsdWNrOiBmdW5jdGlvbihwcm9wZXJ0eSkg
eworICAgIHZhciByZXN1bHRzID0gW107CisgICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBp
bmRleCkgeworICAgICAgcmVzdWx0cy5wdXNoKHZhbHVlW3Byb3BlcnR5XSk7CisgICAgfSk7Cisg
ICAgcmV0dXJuIHJlc3VsdHM7CisgIH0sCisKKyAgcmVqZWN0OiBmdW5jdGlvbihpdGVyYXRvcikg
eworICAgIHZhciByZXN1bHRzID0gW107CisgICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBp
bmRleCkgeworICAgICAgaWYgKCFpdGVyYXRvcih2YWx1ZSwgaW5kZXgpKQorICAgICAgICByZXN1
bHRzLnB1c2godmFsdWUpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHRzOworICB9LAorCisg
IHNvcnRCeTogZnVuY3Rpb24oaXRlcmF0b3IpIHsKKyAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rp
b24odmFsdWUsIGluZGV4KSB7CisgICAgICByZXR1cm4ge3ZhbHVlOiB2YWx1ZSwgY3JpdGVyaWE6
IGl0ZXJhdG9yKHZhbHVlLCBpbmRleCl9OworICAgIH0pLnNvcnQoZnVuY3Rpb24obGVmdCwgcmln
aHQpIHsKKyAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhOwor
ICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwOworICAgIH0pLnBsdWNrKCd2
YWx1ZScpOworICB9LAorCisgIHRvQXJyYXk6IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlz
Lm1hcCgpOworICB9LAorCisgIHppcDogZnVuY3Rpb24oKSB7CisgICAgdmFyIGl0ZXJhdG9yID0g
UHJvdG90eXBlLkssIGFyZ3MgPSAkQShhcmd1bWVudHMpOworICAgIGlmICh0eXBlb2YgYXJncy5s
YXN0KCkgPT0gJ2Z1bmN0aW9uJykKKyAgICAgIGl0ZXJhdG9yID0gYXJncy5wb3AoKTsKKworICAg
IHZhciBjb2xsZWN0aW9ucyA9IFt0aGlzXS5jb25jYXQoYXJncykubWFwKCRBKTsKKyAgICByZXR1
cm4gdGhpcy5tYXAoZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CisgICAgICByZXR1cm4gaXRlcmF0
b3IoY29sbGVjdGlvbnMucGx1Y2soaW5kZXgpKTsKKyAgICB9KTsKKyAgfSwKKworICBzaXplOiBm
dW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy50b0FycmF5KCkubGVuZ3RoOworICB9LAorCisg
IGluc3BlY3Q6IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiAnIzxFbnVtZXJhYmxlOicgKyB0aGlz
LnRvQXJyYXkoKS5pbnNwZWN0KCkgKyAnPic7CisgIH0KK30KKworT2JqZWN0LmV4dGVuZChFbnVt
ZXJhYmxlLCB7CisgIG1hcDogICAgIEVudW1lcmFibGUuY29sbGVjdCwKKyAgZmluZDogICAgRW51
bWVyYWJsZS5kZXRlY3QsCisgIHNlbGVjdDogIEVudW1lcmFibGUuZmluZEFsbCwKKyAgbWVtYmVy
OiAgRW51bWVyYWJsZS5pbmNsdWRlLAorICBlbnRyaWVzOiBFbnVtZXJhYmxlLnRvQXJyYXkKK30p
OwordmFyICRBID0gQXJyYXkuZnJvbSA9IGZ1bmN0aW9uKGl0ZXJhYmxlKSB7CisgIGlmICghaXRl
cmFibGUpIHJldHVybiBbXTsKKyAgaWYgKGl0ZXJhYmxlLnRvQXJyYXkpIHsKKyAgICByZXR1cm4g
aXRlcmFibGUudG9BcnJheSgpOworICB9IGVsc2UgeworICAgIHZhciByZXN1bHRzID0gW107Cisg
ICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGl0ZXJhYmxlLmxlbmd0aDsgaSA8IGxlbmd0aDsg
aSsrKQorICAgICAgcmVzdWx0cy5wdXNoKGl0ZXJhYmxlW2ldKTsKKyAgICByZXR1cm4gcmVzdWx0
czsKKyAgfQorfQorCitPYmplY3QuZXh0ZW5kKEFycmF5LnByb3RvdHlwZSwgRW51bWVyYWJsZSk7
CisKK2lmICghQXJyYXkucHJvdG90eXBlLl9yZXZlcnNlKQorICBBcnJheS5wcm90b3R5cGUuX3Jl
dmVyc2UgPSBBcnJheS5wcm90b3R5cGUucmV2ZXJzZTsKKworT2JqZWN0LmV4dGVuZChBcnJheS5w
cm90b3R5cGUsIHsKKyAgX2VhY2g6IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CisgICAgZm9yICh2YXIg
aSA9IDAsIGxlbmd0aCA9IHRoaXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspCisgICAgICBpdGVy
YXRvcih0aGlzW2ldKTsKKyAgfSwKKworICBjbGVhcjogZnVuY3Rpb24oKSB7CisgICAgdGhpcy5s
ZW5ndGggPSAwOworICAgIHJldHVybiB0aGlzOworICB9LAorCisgIGZpcnN0OiBmdW5jdGlvbigp
IHsKKyAgICByZXR1cm4gdGhpc1swXTsKKyAgfSwKKworICBsYXN0OiBmdW5jdGlvbigpIHsKKyAg
ICByZXR1cm4gdGhpc1t0aGlzLmxlbmd0aCAtIDFdOworICB9LAorCisgIGNvbXBhY3Q6IGZ1bmN0
aW9uKCkgeworICAgIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbih2YWx1ZSkgeworICAgICAg
cmV0dXJuIHZhbHVlICE9IG51bGw7CisgICAgfSk7CisgIH0sCisKKyAgZmxhdHRlbjogZnVuY3Rp
b24oKSB7CisgICAgcmV0dXJuIHRoaXMuaW5qZWN0KFtdLCBmdW5jdGlvbihhcnJheSwgdmFsdWUp
IHsKKyAgICAgIHJldHVybiBhcnJheS5jb25jYXQodmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3Ig
PT0gQXJyYXkgPworICAgICAgICB2YWx1ZS5mbGF0dGVuKCkgOiBbdmFsdWVdKTsKKyAgICB9KTsK
KyAgfSwKKworICB3aXRob3V0OiBmdW5jdGlvbigpIHsKKyAgICB2YXIgdmFsdWVzID0gJEEoYXJn
dW1lbnRzKTsKKyAgICByZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24odmFsdWUpIHsKKyAgICAg
IHJldHVybiAhdmFsdWVzLmluY2x1ZGUodmFsdWUpOworICAgIH0pOworICB9LAorCisgIGluZGV4
T2Y6IGZ1bmN0aW9uKG9iamVjdCkgeworICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSB0aGlz
Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKQorICAgICAgaWYgKHRoaXNbaV0gPT0gb2JqZWN0KSBy
ZXR1cm4gaTsKKyAgICByZXR1cm4gLTE7CisgIH0sCisKKyAgcmV2ZXJzZTogZnVuY3Rpb24oaW5s
aW5lKSB7CisgICAgcmV0dXJuIChpbmxpbmUgIT09IGZhbHNlID8gdGhpcyA6IHRoaXMudG9BcnJh
eSgpKS5fcmV2ZXJzZSgpOworICB9LAorCisgIHJlZHVjZTogZnVuY3Rpb24oKSB7CisgICAgcmV0
dXJuIHRoaXMubGVuZ3RoID4gMSA/IHRoaXMgOiB0aGlzWzBdOworICB9LAorCisgIHVuaXE6IGZ1
bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmluamVjdChbXSwgZnVuY3Rpb24oYXJyYXksIHZh
bHVlKSB7CisgICAgICByZXR1cm4gYXJyYXkuaW5jbHVkZSh2YWx1ZSkgPyBhcnJheSA6IGFycmF5
LmNvbmNhdChbdmFsdWVdKTsKKyAgICB9KTsKKyAgfSwKKworICBjbG9uZTogZnVuY3Rpb24oKSB7
CisgICAgcmV0dXJuIFtdLmNvbmNhdCh0aGlzKTsKKyAgfSwKKworICBzaXplOiBmdW5jdGlvbigp
IHsKKyAgICByZXR1cm4gdGhpcy5sZW5ndGg7CisgIH0sCisKKyAgaW5zcGVjdDogZnVuY3Rpb24o
KSB7CisgICAgcmV0dXJuICdbJyArIHRoaXMubWFwKE9iamVjdC5pbnNwZWN0KS5qb2luKCcsICcp
ICsgJ10nOworICB9Cit9KTsKKworQXJyYXkucHJvdG90eXBlLnRvQXJyYXkgPSBBcnJheS5wcm90
b3R5cGUuY2xvbmU7CisKK2Z1bmN0aW9uICR3KHN0cmluZyl7CisgIHN0cmluZyA9IHN0cmluZy5z
dHJpcCgpOworICByZXR1cm4gc3RyaW5nID8gc3RyaW5nLnNwbGl0KC9ccysvKSA6IFtdOworfQor
CitpZih3aW5kb3cub3BlcmEpeworICBBcnJheS5wcm90b3R5cGUuY29uY2F0ID0gZnVuY3Rpb24o
KXsKKyAgICB2YXIgYXJyYXkgPSBbXTsKKyAgICBmb3IodmFyIGkgPSAwLCBsZW5ndGggPSB0aGlz
Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSBhcnJheS5wdXNoKHRoaXNbaV0pOworICAgIGZvcih2
YXIgaSA9IDAsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewor
ICAgICAgaWYoYXJndW1lbnRzW2ldLmNvbnN0cnVjdG9yID09IEFycmF5KSB7CisgICAgICAgIGZv
cih2YXIgaiA9IDAsIGFycmF5TGVuZ3RoID0gYXJndW1lbnRzW2ldLmxlbmd0aDsgaiA8IGFycmF5
TGVuZ3RoOyBqKyspCisgICAgICAgICAgYXJyYXkucHVzaChhcmd1bWVudHNbaV1bal0pOworICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgYXJyYXkucHVzaChhcmd1bWVudHNbaV0pOworICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gYXJyYXk7CisgIH0KK30KK3ZhciBIYXNoID0gZnVuY3Rpb24ob2Jq
KSB7CisgIE9iamVjdC5leHRlbmQodGhpcywgb2JqIHx8IHt9KTsKK307CisKK09iamVjdC5leHRl
bmQoSGFzaCwgeworICB0b1F1ZXJ5U3RyaW5nOiBmdW5jdGlvbihvYmopIHsKKyAgICB2YXIgcGFy
dHMgPSBbXTsKKworCSAgdGhpcy5wcm90b3R5cGUuX2VhY2guY2FsbChvYmosIGZ1bmN0aW9uKHBh
aXIpIHsKKyAgICAgIGlmICghcGFpci5rZXkpIHJldHVybjsKKworICAgICAgaWYgKHBhaXIudmFs
dWUgJiYgcGFpci52YWx1ZS5jb25zdHJ1Y3RvciA9PSBBcnJheSkgeworICAgICAgICB2YXIgdmFs
dWVzID0gcGFpci52YWx1ZS5jb21wYWN0KCk7CisgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoIDwg
MikgcGFpci52YWx1ZSA9IHZhbHVlcy5yZWR1Y2UoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
IAlrZXkgPSBlbmNvZGVVUklDb21wb25lbnQocGFpci5rZXkpOworICAgICAgICAgIHZhbHVlcy5l
YWNoKGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICE9IHVuZGVm
aW5lZCA/IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkgOiAnJzsKKyAgICAgICAgICAgIHBhcnRz
LnB1c2goa2V5ICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7CisgICAgICAgICAg
fSk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICB9CisgICAgICBpZiAocGFp
ci52YWx1ZSA9PSB1bmRlZmluZWQpIHBhaXJbMV0gPSAnJzsKKyAgICAgIHBhcnRzLnB1c2gocGFp
ci5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KS5qb2luKCc9JykpOworCSAgfSk7CisKKyAgICByZXR1
cm4gcGFydHMuam9pbignJicpOworICB9Cit9KTsKKworT2JqZWN0LmV4dGVuZChIYXNoLnByb3Rv
dHlwZSwgRW51bWVyYWJsZSk7CitPYmplY3QuZXh0ZW5kKEhhc2gucHJvdG90eXBlLCB7CisgIF9l
YWNoOiBmdW5jdGlvbihpdGVyYXRvcikgeworICAgIGZvciAodmFyIGtleSBpbiB0aGlzKSB7Cisg
ICAgICB2YXIgdmFsdWUgPSB0aGlzW2tleV07CisgICAgICBpZiAodmFsdWUgJiYgdmFsdWUgPT0g
SGFzaC5wcm90b3R5cGVba2V5XSkgY29udGludWU7CisKKyAgICAgIHZhciBwYWlyID0gW2tleSwg
dmFsdWVdOworICAgICAgcGFpci5rZXkgPSBrZXk7CisgICAgICBwYWlyLnZhbHVlID0gdmFsdWU7
CisgICAgICBpdGVyYXRvcihwYWlyKTsKKyAgICB9CisgIH0sCisKKyAga2V5czogZnVuY3Rpb24o
KSB7CisgICAgcmV0dXJuIHRoaXMucGx1Y2soJ2tleScpOworICB9LAorCisgIHZhbHVlczogZnVu
Y3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMucGx1Y2soJ3ZhbHVlJyk7CisgIH0sCisKKyAgbWVy
Z2U6IGZ1bmN0aW9uKGhhc2gpIHsKKyAgICByZXR1cm4gJEgoaGFzaCkuaW5qZWN0KHRoaXMsIGZ1
bmN0aW9uKG1lcmdlZEhhc2gsIHBhaXIpIHsKKyAgICAgIG1lcmdlZEhhc2hbcGFpci5rZXldID0g
cGFpci52YWx1ZTsKKyAgICAgIHJldHVybiBtZXJnZWRIYXNoOworICAgIH0pOworICB9LAorCisg
IHJlbW92ZTogZnVuY3Rpb24oKSB7CisgICAgdmFyIHJlc3VsdDsKKyAgICBmb3IodmFyIGkgPSAw
LCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgIHZh
ciB2YWx1ZSA9IHRoaXNbYXJndW1lbnRzW2ldXTsKKyAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZp
bmVkKXsKKyAgICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSByZXN1bHQgPSB2YWx1ZTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgaWYgKHJlc3VsdC5jb25zdHJ1Y3RvciAhPSBBcnJh
eSkgcmVzdWx0ID0gW3Jlc3VsdF07CisgICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpCisgICAg
ICAgIH0KKyAgICAgIH0KKyAgICAgIGRlbGV0ZSB0aGlzW2FyZ3VtZW50c1tpXV07CisgICAgfQor
ICAgIHJldHVybiByZXN1bHQ7CisgIH0sCisKKyAgdG9RdWVyeVN0cmluZzogZnVuY3Rpb24oKSB7
CisgICAgcmV0dXJuIEhhc2gudG9RdWVyeVN0cmluZyh0aGlzKTsKKyAgfSwKKworICBpbnNwZWN0
OiBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gJyM8SGFzaDp7JyArIHRoaXMubWFwKGZ1bmN0aW9u
KHBhaXIpIHsKKyAgICAgIHJldHVybiBwYWlyLm1hcChPYmplY3QuaW5zcGVjdCkuam9pbignOiAn
KTsKKyAgICB9KS5qb2luKCcsICcpICsgJ30+JzsKKyAgfQorfSk7CisKK2Z1bmN0aW9uICRIKG9i
amVjdCkgeworICBpZiAob2JqZWN0ICYmIG9iamVjdC5jb25zdHJ1Y3RvciA9PSBIYXNoKSByZXR1
cm4gb2JqZWN0OworICByZXR1cm4gbmV3IEhhc2gob2JqZWN0KTsKK307CitPYmplY3RSYW5nZSA9
IENsYXNzLmNyZWF0ZSgpOworT2JqZWN0LmV4dGVuZChPYmplY3RSYW5nZS5wcm90b3R5cGUsIEVu
dW1lcmFibGUpOworT2JqZWN0LmV4dGVuZChPYmplY3RSYW5nZS5wcm90b3R5cGUsIHsKKyAgaW5p
dGlhbGl6ZTogZnVuY3Rpb24oc3RhcnQsIGVuZCwgZXhjbHVzaXZlKSB7CisgICAgdGhpcy5zdGFy
dCA9IHN0YXJ0OworICAgIHRoaXMuZW5kID0gZW5kOworICAgIHRoaXMuZXhjbHVzaXZlID0gZXhj
bHVzaXZlOworICB9LAorCisgIF9lYWNoOiBmdW5jdGlvbihpdGVyYXRvcikgeworICAgIHZhciB2
YWx1ZSA9IHRoaXMuc3RhcnQ7CisgICAgd2hpbGUgKHRoaXMuaW5jbHVkZSh2YWx1ZSkpIHsKKyAg
ICAgIGl0ZXJhdG9yKHZhbHVlKTsKKyAgICAgIHZhbHVlID0gdmFsdWUuc3VjYygpOworICAgIH0K
KyAgfSwKKworICBpbmNsdWRlOiBmdW5jdGlvbih2YWx1ZSkgeworICAgIGlmICh2YWx1ZSA8IHRo
aXMuc3RhcnQpCisgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHRoaXMuZXhjbHVzaXZlKQor
ICAgICAgcmV0dXJuIHZhbHVlIDwgdGhpcy5lbmQ7CisgICAgcmV0dXJuIHZhbHVlIDw9IHRoaXMu
ZW5kOworICB9Cit9KTsKKwordmFyICRSID0gZnVuY3Rpb24oc3RhcnQsIGVuZCwgZXhjbHVzaXZl
KSB7CisgIHJldHVybiBuZXcgT2JqZWN0UmFuZ2Uoc3RhcnQsIGVuZCwgZXhjbHVzaXZlKTsKK30K
KwordmFyIEFqYXggPSB7CisgIGdldFRyYW5zcG9ydDogZnVuY3Rpb24oKSB7CisgICAgcmV0dXJu
IFRyeS50aGVzZSgKKyAgICAgIGZ1bmN0aW9uKCkge3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3Qo
KX0sCisgICAgICBmdW5jdGlvbigpIHtyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01zeG1sMi5Y
TUxIVFRQJyl9LAorICAgICAgZnVuY3Rpb24oKSB7cmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCdN
aWNyb3NvZnQuWE1MSFRUUCcpfQorICAgICkgfHwgZmFsc2U7CisgIH0sCisKKyAgYWN0aXZlUmVx
dWVzdENvdW50OiAwCit9CisKK0FqYXguUmVzcG9uZGVycyA9IHsKKyAgcmVzcG9uZGVyczogW10s
CisKKyAgX2VhY2g6IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CisgICAgdGhpcy5yZXNwb25kZXJzLl9l
YWNoKGl0ZXJhdG9yKTsKKyAgfSwKKworICByZWdpc3RlcjogZnVuY3Rpb24ocmVzcG9uZGVyKSB7
CisgICAgaWYgKCF0aGlzLmluY2x1ZGUocmVzcG9uZGVyKSkKKyAgICAgIHRoaXMucmVzcG9uZGVy
cy5wdXNoKHJlc3BvbmRlcik7CisgIH0sCisKKyAgdW5yZWdpc3RlcjogZnVuY3Rpb24ocmVzcG9u
ZGVyKSB7CisgICAgdGhpcy5yZXNwb25kZXJzID0gdGhpcy5yZXNwb25kZXJzLndpdGhvdXQocmVz
cG9uZGVyKTsKKyAgfSwKKworICBkaXNwYXRjaDogZnVuY3Rpb24oY2FsbGJhY2ssIHJlcXVlc3Qs
IHRyYW5zcG9ydCwganNvbikgeworICAgIHRoaXMuZWFjaChmdW5jdGlvbihyZXNwb25kZXIpIHsK
KyAgICAgIGlmICh0eXBlb2YgcmVzcG9uZGVyW2NhbGxiYWNrXSA9PSAnZnVuY3Rpb24nKSB7Cisg
ICAgICAgIHRyeSB7CisgICAgICAgICAgcmVzcG9uZGVyW2NhbGxiYWNrXS5hcHBseShyZXNwb25k
ZXIsIFtyZXF1ZXN0LCB0cmFuc3BvcnQsIGpzb25dKTsKKyAgICAgICAgfSBjYXRjaCAoZSkge30K
KyAgICAgIH0KKyAgICB9KTsKKyAgfQorfTsKKworT2JqZWN0LmV4dGVuZChBamF4LlJlc3BvbmRl
cnMsIEVudW1lcmFibGUpOworCitBamF4LlJlc3BvbmRlcnMucmVnaXN0ZXIoeworICBvbkNyZWF0
ZTogZnVuY3Rpb24oKSB7CisgICAgQWpheC5hY3RpdmVSZXF1ZXN0Q291bnQrKzsKKyAgfSwKKyAg
b25Db21wbGV0ZTogZnVuY3Rpb24oKSB7CisgICAgQWpheC5hY3RpdmVSZXF1ZXN0Q291bnQtLTsK
KyAgfQorfSk7CisKK0FqYXguQmFzZSA9IGZ1bmN0aW9uKCkge307CitBamF4LkJhc2UucHJvdG90
eXBlID0geworICBzZXRPcHRpb25zOiBmdW5jdGlvbihvcHRpb25zKSB7CisgICAgdGhpcy5vcHRp
b25zID0geworICAgICAgbWV0aG9kOiAgICAgICAncG9zdCcsCisgICAgICBhc3luY2hyb25vdXM6
IHRydWUsCisgICAgICBjb250ZW50VHlwZTogICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVu
Y29kZWQnLAorICAgICAgZW5jb2Rpbmc6ICAgICAnVVRGLTgnLAorICAgICAgcGFyYW1ldGVyczog
ICAnJworICAgIH0KKyAgICBPYmplY3QuZXh0ZW5kKHRoaXMub3B0aW9ucywgb3B0aW9ucyB8fCB7
fSk7CisKKyAgICB0aGlzLm9wdGlvbnMubWV0aG9kID0gdGhpcy5vcHRpb25zLm1ldGhvZC50b0xv
d2VyQ2FzZSgpOworICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLnBhcmFtZXRlcnMgPT0gJ3N0
cmluZycpCisgICAgICB0aGlzLm9wdGlvbnMucGFyYW1ldGVycyA9IHRoaXMub3B0aW9ucy5wYXJh
bWV0ZXJzLnRvUXVlcnlQYXJhbXMoKTsKKyAgfQorfQorCitBamF4LlJlcXVlc3QgPSBDbGFzcy5j
cmVhdGUoKTsKK0FqYXguUmVxdWVzdC5FdmVudHMgPQorICBbJ1VuaW5pdGlhbGl6ZWQnLCAnTG9h
ZGluZycsICdMb2FkZWQnLCAnSW50ZXJhY3RpdmUnLCAnQ29tcGxldGUnXTsKKworQWpheC5SZXF1
ZXN0LnByb3RvdHlwZSA9IE9iamVjdC5leHRlbmQobmV3IEFqYXguQmFzZSgpLCB7CisgIF9jb21w
bGV0ZTogZmFsc2UsCisKKyAgaW5pdGlhbGl6ZTogZnVuY3Rpb24odXJsLCBvcHRpb25zKSB7Cisg
ICAgdGhpcy50cmFuc3BvcnQgPSBBamF4LmdldFRyYW5zcG9ydCgpOworICAgIHRoaXMuc2V0T3B0
aW9ucyhvcHRpb25zKTsKKyAgICB0aGlzLnJlcXVlc3QodXJsKTsKKyAgfSwKKworICByZXF1ZXN0
OiBmdW5jdGlvbih1cmwpIHsKKyAgICB0aGlzLnVybCA9IHVybDsKKyAgICB0aGlzLm1ldGhvZCA9
IHRoaXMub3B0aW9ucy5tZXRob2Q7CisgICAgdmFyIHBhcmFtcyA9IHRoaXMub3B0aW9ucy5wYXJh
bWV0ZXJzOworCisgICAgaWYgKCFbJ2dldCcsICdwb3N0J10uaW5jbHVkZSh0aGlzLm1ldGhvZCkp
IHsKKyAgICAgIC8vIHNpbXVsYXRlIG90aGVyIHZlcmJzIG92ZXIgcG9zdAorICAgICAgcGFyYW1z
WydfbWV0aG9kJ10gPSB0aGlzLm1ldGhvZDsKKyAgICAgIHRoaXMubWV0aG9kID0gJ3Bvc3QnOwor
ICAgIH0KKworICAgIHBhcmFtcyA9IEhhc2gudG9RdWVyeVN0cmluZyhwYXJhbXMpOworICAgIGlm
IChwYXJhbXMgJiYgL0tvbnF1ZXJvcnxTYWZhcml8S0hUTUwvLnRlc3QobmF2aWdhdG9yLnVzZXJB
Z2VudCkpIHBhcmFtcyArPSAnJl89JworCisgICAgLy8gd2hlbiBHRVQsIGFwcGVuZCBwYXJhbWV0
ZXJzIHRvIFVSTAorICAgIGlmICh0aGlzLm1ldGhvZCA9PSAnZ2V0JyAmJiBwYXJhbXMpCisgICAg
ICB0aGlzLnVybCArPSAodGhpcy51cmwuaW5kZXhPZignPycpID4gLTEgPyAnJicgOiAnPycpICsg
cGFyYW1zOworCisgICAgdHJ5IHsKKyAgICAgIEFqYXguUmVzcG9uZGVycy5kaXNwYXRjaCgnb25D
cmVhdGUnLCB0aGlzLCB0aGlzLnRyYW5zcG9ydCk7CisKKyAgICAgIHRoaXMudHJhbnNwb3J0Lm9w
ZW4odGhpcy5tZXRob2QudG9VcHBlckNhc2UoKSwgdGhpcy51cmwsCisgICAgICAgIHRoaXMub3B0
aW9ucy5hc3luY2hyb25vdXMpOworCisgICAgICBpZiAodGhpcy5vcHRpb25zLmFzeW5jaHJvbm91
cykKKyAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgdGhpcy5yZXNwb25kVG9SZWFkeVN0
YXRlKDEpIH0uYmluZCh0aGlzKSwgMTApOworCisgICAgICB0aGlzLnRyYW5zcG9ydC5vbnJlYWR5
c3RhdGVjaGFuZ2UgPSB0aGlzLm9uU3RhdGVDaGFuZ2UuYmluZCh0aGlzKTsKKyAgICAgIHRoaXMu
c2V0UmVxdWVzdEhlYWRlcnMoKTsKKworICAgICAgdmFyIGJvZHkgPSB0aGlzLm1ldGhvZCA9PSAn
cG9zdCcgPyAodGhpcy5vcHRpb25zLnBvc3RCb2R5IHx8IHBhcmFtcykgOiBudWxsOworCisgICAg
ICB0aGlzLnRyYW5zcG9ydC5zZW5kKGJvZHkpOworCisgICAgICAvKiBGb3JjZSBGaXJlZm94IHRv
IGhhbmRsZSByZWFkeSBzdGF0ZSA0IGZvciBzeW5jaHJvbm91cyByZXF1ZXN0cyAqLworICAgICAg
aWYgKCF0aGlzLm9wdGlvbnMuYXN5bmNocm9ub3VzICYmIHRoaXMudHJhbnNwb3J0Lm92ZXJyaWRl
TWltZVR5cGUpCisgICAgICAgIHRoaXMub25TdGF0ZUNoYW5nZSgpOworCisgICAgfQorICAgIGNh
dGNoIChlKSB7CisgICAgICB0aGlzLmRpc3BhdGNoRXhjZXB0aW9uKGUpOworICAgIH0KKyAgfSwK
KworICBvblN0YXRlQ2hhbmdlOiBmdW5jdGlvbigpIHsKKyAgICB2YXIgcmVhZHlTdGF0ZSA9IHRo
aXMudHJhbnNwb3J0LnJlYWR5U3RhdGU7CisgICAgaWYgKHJlYWR5U3RhdGUgPiAxICYmICEoKHJl
YWR5U3RhdGUgPT0gNCkgJiYgdGhpcy5fY29tcGxldGUpKQorICAgICAgdGhpcy5yZXNwb25kVG9S
ZWFkeVN0YXRlKHRoaXMudHJhbnNwb3J0LnJlYWR5U3RhdGUpOworICB9LAorCisgIHNldFJlcXVl
c3RIZWFkZXJzOiBmdW5jdGlvbigpIHsKKyAgICB2YXIgaGVhZGVycyA9IHsKKyAgICAgICdYLVJl
cXVlc3RlZC1XaXRoJzogJ1hNTEh0dHBSZXF1ZXN0JywKKyAgICAgICdYLVByb3RvdHlwZS1WZXJz
aW9uJzogUHJvdG90eXBlLlZlcnNpb24sCisgICAgICAnQWNjZXB0JzogJ3RleHQvamF2YXNjcmlw
dCwgdGV4dC9odG1sLCBhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sLCAqLyonCisgICAgfTsKKwor
ICAgIGlmICh0aGlzLm1ldGhvZCA9PSAncG9zdCcpIHsKKyAgICAgIGhlYWRlcnNbJ0NvbnRlbnQt
dHlwZSddID0gdGhpcy5vcHRpb25zLmNvbnRlbnRUeXBlICsKKyAgICAgICAgKHRoaXMub3B0aW9u
cy5lbmNvZGluZyA/ICc7IGNoYXJzZXQ9JyArIHRoaXMub3B0aW9ucy5lbmNvZGluZyA6ICcnKTsK
KworICAgICAgLyogRm9yY2UgIkNvbm5lY3Rpb246IGNsb3NlIiBmb3Igb2xkZXIgTW96aWxsYSBi
cm93c2VycyB0byB3b3JrCisgICAgICAgKiBhcm91bmQgYSBidWcgd2hlcmUgWE1MSHR0cFJlcXVl
c3Qgc2VuZHMgYW4gaW5jb3JyZWN0CisgICAgICAgKiBDb250ZW50LWxlbmd0aCBoZWFkZXIuIFNl
ZSBNb3ppbGxhIEJ1Z3ppbGxhICMyNDY2NTEuCisgICAgICAgKi8KKyAgICAgIGlmICh0aGlzLnRy
YW5zcG9ydC5vdmVycmlkZU1pbWVUeXBlICYmCisgICAgICAgICAgKG5hdmlnYXRvci51c2VyQWdl
bnQubWF0Y2goL0dlY2tvXC8oXGR7NH0pLykgfHwgWzAsMjAwNV0pWzFdIDwgMjAwNSkKKyAgICAg
ICAgICAgIGhlYWRlcnNbJ0Nvbm5lY3Rpb24nXSA9ICdjbG9zZSc7CisgICAgfQorCisgICAgLy8g
dXNlci1kZWZpbmVkIGhlYWRlcnMKKyAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5yZXF1ZXN0
SGVhZGVycyA9PSAnb2JqZWN0JykgeworICAgICAgdmFyIGV4dHJhcyA9IHRoaXMub3B0aW9ucy5y
ZXF1ZXN0SGVhZGVyczsKKworICAgICAgaWYgKHR5cGVvZiBleHRyYXMucHVzaCA9PSAnZnVuY3Rp
b24nKQorICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZXh0cmFzLmxlbmd0aDsgaSA8
IGxlbmd0aDsgaSArPSAyKQorICAgICAgICAgIGhlYWRlcnNbZXh0cmFzW2ldXSA9IGV4dHJhc1tp
KzFdOworICAgICAgZWxzZQorICAgICAgICAkSChleHRyYXMpLmVhY2goZnVuY3Rpb24ocGFpcikg
eyBoZWFkZXJzW3BhaXIua2V5XSA9IHBhaXIudmFsdWUgfSk7CisgICAgfQorCisgICAgZm9yICh2
YXIgbmFtZSBpbiBoZWFkZXJzKQorICAgICAgdGhpcy50cmFuc3BvcnQuc2V0UmVxdWVzdEhlYWRl
cihuYW1lLCBoZWFkZXJzW25hbWVdKTsKKyAgfSwKKworICBzdWNjZXNzOiBmdW5jdGlvbigpIHsK
KyAgICByZXR1cm4gIXRoaXMudHJhbnNwb3J0LnN0YXR1cworICAgICAgICB8fCAodGhpcy50cmFu
c3BvcnQuc3RhdHVzID49IDIwMCAmJiB0aGlzLnRyYW5zcG9ydC5zdGF0dXMgPCAzMDApOworICB9
LAorCisgIHJlc3BvbmRUb1JlYWR5U3RhdGU6IGZ1bmN0aW9uKHJlYWR5U3RhdGUpIHsKKyAgICB2
YXIgc3RhdGUgPSBBamF4LlJlcXVlc3QuRXZlbnRzW3JlYWR5U3RhdGVdOworICAgIHZhciB0cmFu
c3BvcnQgPSB0aGlzLnRyYW5zcG9ydCwganNvbiA9IHRoaXMuZXZhbEpTT04oKTsKKworICAgIGlm
IChzdGF0ZSA9PSAnQ29tcGxldGUnKSB7CisgICAgICB0cnkgeworICAgICAgICB0aGlzLl9jb21w
bGV0ZSA9IHRydWU7CisgICAgICAgICh0aGlzLm9wdGlvbnNbJ29uJyArIHRoaXMudHJhbnNwb3J0
LnN0YXR1c10KKyAgICAgICAgIHx8IHRoaXMub3B0aW9uc1snb24nICsgKHRoaXMuc3VjY2Vzcygp
ID8gJ1N1Y2Nlc3MnIDogJ0ZhaWx1cmUnKV0KKyAgICAgICAgIHx8IFByb3RvdHlwZS5lbXB0eUZ1
bmN0aW9uKSh0cmFuc3BvcnQsIGpzb24pOworICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICB0
aGlzLmRpc3BhdGNoRXhjZXB0aW9uKGUpOworICAgICAgfQorCisgICAgICBpZiAoKHRoaXMuZ2V0
SGVhZGVyKCdDb250ZW50LXR5cGUnKSB8fCAndGV4dC9qYXZhc2NyaXB0Jykuc3RyaXAoKS4KKyAg
ICAgICAgbWF0Y2goL14odGV4dHxhcHBsaWNhdGlvbilcLyh4LSk/KGphdmF8ZWNtYSlzY3JpcHQo
Oy4qKT8kL2kpKQorICAgICAgICAgIHRoaXMuZXZhbFJlc3BvbnNlKCk7CisgICAgfQorCisgICAg
dHJ5IHsKKyAgICAgICh0aGlzLm9wdGlvbnNbJ29uJyArIHN0YXRlXSB8fCBQcm90b3R5cGUuZW1w
dHlGdW5jdGlvbikodHJhbnNwb3J0LCBqc29uKTsKKyAgICAgIEFqYXguUmVzcG9uZGVycy5kaXNw
YXRjaCgnb24nICsgc3RhdGUsIHRoaXMsIHRyYW5zcG9ydCwganNvbik7CisgICAgfSBjYXRjaCAo
ZSkgeworICAgICAgdGhpcy5kaXNwYXRjaEV4Y2VwdGlvbihlKTsKKyAgICB9CisKKyAgICBpZiAo
c3RhdGUgPT0gJ0NvbXBsZXRlJykgeworICAgICAgLy8gYXZvaWQgbWVtb3J5IGxlYWsgaW4gTVNJ
RTogY2xlYW4gdXAKKyAgICAgIHRoaXMudHJhbnNwb3J0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IFBy
b3RvdHlwZS5lbXB0eUZ1bmN0aW9uOworICAgIH0KKyAgfSwKKworICBnZXRIZWFkZXI6IGZ1bmN0
aW9uKG5hbWUpIHsKKyAgICB0cnkgeworICAgICAgcmV0dXJuIHRoaXMudHJhbnNwb3J0LmdldFJl
c3BvbnNlSGVhZGVyKG5hbWUpOworICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuIG51bGwgfQorICB9
LAorCisgIGV2YWxKU09OOiBmdW5jdGlvbigpIHsKKyAgICB0cnkgeworICAgICAgdmFyIGpzb24g
PSB0aGlzLmdldEhlYWRlcignWC1KU09OJyk7CisgICAgICByZXR1cm4ganNvbiA/IGV2YWwoJygn
ICsganNvbiArICcpJykgOiBudWxsOworICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuIG51bGwgfQor
ICB9LAorCisgIGV2YWxSZXNwb25zZTogZnVuY3Rpb24oKSB7CisgICAgdHJ5IHsKKyAgICAgIHJl
dHVybiBldmFsKHRoaXMudHJhbnNwb3J0LnJlc3BvbnNlVGV4dCk7CisgICAgfSBjYXRjaCAoZSkg
eworICAgICAgdGhpcy5kaXNwYXRjaEV4Y2VwdGlvbihlKTsKKyAgICB9CisgIH0sCisKKyAgZGlz
cGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikgeworICAgICh0aGlzLm9wdGlvbnMu
b25FeGNlcHRpb24gfHwgUHJvdG90eXBlLmVtcHR5RnVuY3Rpb24pKHRoaXMsIGV4Y2VwdGlvbik7
CisgICAgQWpheC5SZXNwb25kZXJzLmRpc3BhdGNoKCdvbkV4Y2VwdGlvbicsIHRoaXMsIGV4Y2Vw
dGlvbik7CisgIH0KK30pOworCitBamF4LlVwZGF0ZXIgPSBDbGFzcy5jcmVhdGUoKTsKKworT2Jq
ZWN0LmV4dGVuZChPYmplY3QuZXh0ZW5kKEFqYXguVXBkYXRlci5wcm90b3R5cGUsIEFqYXguUmVx
dWVzdC5wcm90b3R5cGUpLCB7CisgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGNvbnRhaW5lciwgdXJs
LCBvcHRpb25zKSB7CisgICAgdGhpcy5jb250YWluZXIgPSB7CisgICAgICBzdWNjZXNzOiAoY29u
dGFpbmVyLnN1Y2Nlc3MgfHwgY29udGFpbmVyKSwKKyAgICAgIGZhaWx1cmU6IChjb250YWluZXIu
ZmFpbHVyZSB8fCAoY29udGFpbmVyLnN1Y2Nlc3MgPyBudWxsIDogY29udGFpbmVyKSkKKyAgICB9
CisKKyAgICB0aGlzLnRyYW5zcG9ydCA9IEFqYXguZ2V0VHJhbnNwb3J0KCk7CisgICAgdGhpcy5z
ZXRPcHRpb25zKG9wdGlvbnMpOworCisgICAgdmFyIG9uQ29tcGxldGUgPSB0aGlzLm9wdGlvbnMu
b25Db21wbGV0ZSB8fCBQcm90b3R5cGUuZW1wdHlGdW5jdGlvbjsKKyAgICB0aGlzLm9wdGlvbnMu
b25Db21wbGV0ZSA9IChmdW5jdGlvbih0cmFuc3BvcnQsIHBhcmFtKSB7CisgICAgICB0aGlzLnVw
ZGF0ZUNvbnRlbnQoKTsKKyAgICAgIG9uQ29tcGxldGUodHJhbnNwb3J0LCBwYXJhbSk7CisgICAg
fSkuYmluZCh0aGlzKTsKKworICAgIHRoaXMucmVxdWVzdCh1cmwpOworICB9LAorCisgIHVwZGF0
ZUNvbnRlbnQ6IGZ1bmN0aW9uKCkgeworICAgIHZhciByZWNlaXZlciA9IHRoaXMuY29udGFpbmVy
W3RoaXMuc3VjY2VzcygpID8gJ3N1Y2Nlc3MnIDogJ2ZhaWx1cmUnXTsKKyAgICB2YXIgcmVzcG9u
c2UgPSB0aGlzLnRyYW5zcG9ydC5yZXNwb25zZVRleHQ7CisKKyAgICBpZiAoIXRoaXMub3B0aW9u
cy5ldmFsU2NyaXB0cykgcmVzcG9uc2UgPSByZXNwb25zZS5zdHJpcFNjcmlwdHMoKTsKKworICAg
IGlmIChyZWNlaXZlciA9ICQocmVjZWl2ZXIpKSB7CisgICAgICBpZiAodGhpcy5vcHRpb25zLmlu
c2VydGlvbikKKyAgICAgICAgbmV3IHRoaXMub3B0aW9ucy5pbnNlcnRpb24ocmVjZWl2ZXIsIHJl
c3BvbnNlKTsKKyAgICAgIGVsc2UKKyAgICAgICAgcmVjZWl2ZXIudXBkYXRlKHJlc3BvbnNlKTsK
KyAgICB9CisKKyAgICBpZiAodGhpcy5zdWNjZXNzKCkpIHsKKyAgICAgIGlmICh0aGlzLm9uQ29t
cGxldGUpCisgICAgICAgIHNldFRpbWVvdXQodGhpcy5vbkNvbXBsZXRlLmJpbmQodGhpcyksIDEw
KTsKKyAgICB9CisgIH0KK30pOworCitBamF4LlBlcmlvZGljYWxVcGRhdGVyID0gQ2xhc3MuY3Jl
YXRlKCk7CitBamF4LlBlcmlvZGljYWxVcGRhdGVyLnByb3RvdHlwZSA9IE9iamVjdC5leHRlbmQo
bmV3IEFqYXguQmFzZSgpLCB7CisgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGNvbnRhaW5lciwgdXJs
LCBvcHRpb25zKSB7CisgICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpOworICAgIHRoaXMub25D
b21wbGV0ZSA9IHRoaXMub3B0aW9ucy5vbkNvbXBsZXRlOworCisgICAgdGhpcy5mcmVxdWVuY3kg
PSAodGhpcy5vcHRpb25zLmZyZXF1ZW5jeSB8fCAyKTsKKyAgICB0aGlzLmRlY2F5ID0gKHRoaXMu
b3B0aW9ucy5kZWNheSB8fCAxKTsKKworICAgIHRoaXMudXBkYXRlciA9IHt9OworICAgIHRoaXMu
Y29udGFpbmVyID0gY29udGFpbmVyOworICAgIHRoaXMudXJsID0gdXJsOworCisgICAgdGhpcy5z
dGFydCgpOworICB9LAorCisgIHN0YXJ0OiBmdW5jdGlvbigpIHsKKyAgICB0aGlzLm9wdGlvbnMu
b25Db21wbGV0ZSA9IHRoaXMudXBkYXRlQ29tcGxldGUuYmluZCh0aGlzKTsKKyAgICB0aGlzLm9u
VGltZXJFdmVudCgpOworICB9LAorCisgIHN0b3A6IGZ1bmN0aW9uKCkgeworICAgIHRoaXMudXBk
YXRlci5vcHRpb25zLm9uQ29tcGxldGUgPSB1bmRlZmluZWQ7CisgICAgY2xlYXJUaW1lb3V0KHRo
aXMudGltZXIpOworICAgICh0aGlzLm9uQ29tcGxldGUgfHwgUHJvdG90eXBlLmVtcHR5RnVuY3Rp
b24pLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgIH0sCisKKyAgdXBkYXRlQ29tcGxldGU6IGZ1
bmN0aW9uKHJlcXVlc3QpIHsKKyAgICBpZiAodGhpcy5vcHRpb25zLmRlY2F5KSB7CisgICAgICB0
aGlzLmRlY2F5ID0gKHJlcXVlc3QucmVzcG9uc2VUZXh0ID09IHRoaXMubGFzdFRleHQgPworICAg
ICAgICB0aGlzLmRlY2F5ICogdGhpcy5vcHRpb25zLmRlY2F5IDogMSk7CisKKyAgICAgIHRoaXMu
bGFzdFRleHQgPSByZXF1ZXN0LnJlc3BvbnNlVGV4dDsKKyAgICB9CisgICAgdGhpcy50aW1lciA9
IHNldFRpbWVvdXQodGhpcy5vblRpbWVyRXZlbnQuYmluZCh0aGlzKSwKKyAgICAgIHRoaXMuZGVj
YXkgKiB0aGlzLmZyZXF1ZW5jeSAqIDEwMDApOworICB9LAorCisgIG9uVGltZXJFdmVudDogZnVu
Y3Rpb24oKSB7CisgICAgdGhpcy51cGRhdGVyID0gbmV3IEFqYXguVXBkYXRlcih0aGlzLmNvbnRh
aW5lciwgdGhpcy51cmwsIHRoaXMub3B0aW9ucyk7CisgIH0KK30pOworZnVuY3Rpb24gJChlbGVt
ZW50KSB7CisgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgeworICAgIGZvciAodmFyIGkgPSAw
LCBlbGVtZW50cyA9IFtdLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBp
KyspCisgICAgICBlbGVtZW50cy5wdXNoKCQoYXJndW1lbnRzW2ldKSk7CisgICAgcmV0dXJuIGVs
ZW1lbnRzOworICB9CisgIGlmICh0eXBlb2YgZWxlbWVudCA9PSAnc3RyaW5nJykKKyAgICBlbGVt
ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudCk7CisgIHJldHVybiBFbGVtZW50
LmV4dGVuZChlbGVtZW50KTsKK30KKworaWYgKFByb3RvdHlwZS5Ccm93c2VyRmVhdHVyZXMuWFBh
dGgpIHsKKyAgZG9jdW1lbnQuX2dldEVsZW1lbnRzQnlYUGF0aCA9IGZ1bmN0aW9uKGV4cHJlc3Np
b24sIHBhcmVudEVsZW1lbnQpIHsKKyAgICB2YXIgcmVzdWx0cyA9IFtdOworICAgIHZhciBxdWVy
eSA9IGRvY3VtZW50LmV2YWx1YXRlKGV4cHJlc3Npb24sICQocGFyZW50RWxlbWVudCkgfHwgZG9j
dW1lbnQsCisgICAgICBudWxsLCBYUGF0aFJlc3VsdC5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQ
RSwgbnVsbCk7CisgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHF1ZXJ5LnNuYXBzaG90TGVu
Z3RoOyBpIDwgbGVuZ3RoOyBpKyspCisgICAgICByZXN1bHRzLnB1c2gocXVlcnkuc25hcHNob3RJ
dGVtKGkpKTsKKyAgICByZXR1cm4gcmVzdWx0czsKKyAgfTsKK30KKworZG9jdW1lbnQuZ2V0RWxl
bWVudHNCeUNsYXNzTmFtZSA9IGZ1bmN0aW9uKGNsYXNzTmFtZSwgcGFyZW50RWxlbWVudCkgewor
ICBpZiAoUHJvdG90eXBlLkJyb3dzZXJGZWF0dXJlcy5YUGF0aCkgeworICAgIHZhciBxID0gIi4v
LypbY29udGFpbnMoY29uY2F0KCcgJywgQGNsYXNzLCAnICcpLCAnICIgKyBjbGFzc05hbWUgKyAi
ICcpXSI7CisgICAgcmV0dXJuIGRvY3VtZW50Ll9nZXRFbGVtZW50c0J5WFBhdGgocSwgcGFyZW50
RWxlbWVudCk7CisgIH0gZWxzZSB7CisgICAgdmFyIGNoaWxkcmVuID0gKCQocGFyZW50RWxlbWVu
dCkgfHwgZG9jdW1lbnQuYm9keSkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKTsKKyAgICB2YXIg
ZWxlbWVudHMgPSBbXSwgY2hpbGQ7CisgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGNoaWxk
cmVuLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICBjaGlsZCA9IGNoaWxkcmVuW2ld
OworICAgICAgaWYgKEVsZW1lbnQuaGFzQ2xhc3NOYW1lKGNoaWxkLCBjbGFzc05hbWUpKQorICAg
ICAgICBlbGVtZW50cy5wdXNoKEVsZW1lbnQuZXh0ZW5kKGNoaWxkKSk7CisgICAgfQorICAgIHJl
dHVybiBlbGVtZW50czsKKyAgfQorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2lmICgh
d2luZG93LkVsZW1lbnQpCisgIHZhciBFbGVtZW50ID0gbmV3IE9iamVjdCgpOworCitFbGVtZW50
LmV4dGVuZCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgaWYgKCFlbGVtZW50IHx8IF9uYXRpdmVF
eHRlbnNpb25zIHx8IGVsZW1lbnQubm9kZVR5cGUgPT0gMykgcmV0dXJuIGVsZW1lbnQ7CisKKyAg
aWYgKCFlbGVtZW50Ll9leHRlbmRlZCAmJiBlbGVtZW50LnRhZ05hbWUgJiYgZWxlbWVudCAhPSB3
aW5kb3cpIHsKKyAgICB2YXIgbWV0aG9kcyA9IE9iamVjdC5jbG9uZShFbGVtZW50Lk1ldGhvZHMp
LCBjYWNoZSA9IEVsZW1lbnQuZXh0ZW5kLmNhY2hlOworCisgICAgaWYgKGVsZW1lbnQudGFnTmFt
ZSA9PSAnRk9STScpCisgICAgICBPYmplY3QuZXh0ZW5kKG1ldGhvZHMsIEZvcm0uTWV0aG9kcyk7
CisgICAgaWYgKFsnSU5QVVQnLCAnVEVYVEFSRUEnLCAnU0VMRUNUJ10uaW5jbHVkZShlbGVtZW50
LnRhZ05hbWUpKQorICAgICAgT2JqZWN0LmV4dGVuZChtZXRob2RzLCBGb3JtLkVsZW1lbnQuTWV0
aG9kcyk7CisKKyAgICBPYmplY3QuZXh0ZW5kKG1ldGhvZHMsIEVsZW1lbnQuTWV0aG9kcy5TaW11
bGF0ZWQpOworCisgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gbWV0aG9kcykgeworICAgICAgdmFy
IHZhbHVlID0gbWV0aG9kc1twcm9wZXJ0eV07CisgICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdm
dW5jdGlvbicgJiYgIShwcm9wZXJ0eSBpbiBlbGVtZW50KSkKKyAgICAgICAgZWxlbWVudFtwcm9w
ZXJ0eV0gPSBjYWNoZS5maW5kT3JTdG9yZSh2YWx1ZSk7CisgICAgfQorICB9CisKKyAgZWxlbWVu
dC5fZXh0ZW5kZWQgPSB0cnVlOworICByZXR1cm4gZWxlbWVudDsKK307CisKK0VsZW1lbnQuZXh0
ZW5kLmNhY2hlID0geworICBmaW5kT3JTdG9yZTogZnVuY3Rpb24odmFsdWUpIHsKKyAgICByZXR1
cm4gdGhpc1t2YWx1ZV0gPSB0aGlzW3ZhbHVlXSB8fCBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVy
biB2YWx1ZS5hcHBseShudWxsLCBbdGhpc10uY29uY2F0KCRBKGFyZ3VtZW50cykpKTsKKyAgICB9
CisgIH0KK307CisKK0VsZW1lbnQuTWV0aG9kcyA9IHsKKyAgdmlzaWJsZTogZnVuY3Rpb24oZWxl
bWVudCkgeworICAgIHJldHVybiAkKGVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgIT0gJ25vbmUnOwor
ICB9LAorCisgIHRvZ2dsZTogZnVuY3Rpb24oZWxlbWVudCkgeworICAgIGVsZW1lbnQgPSAkKGVs
ZW1lbnQpOworICAgIEVsZW1lbnRbRWxlbWVudC52aXNpYmxlKGVsZW1lbnQpID8gJ2hpZGUnIDog
J3Nob3cnXShlbGVtZW50KTsKKyAgICByZXR1cm4gZWxlbWVudDsKKyAgfSwKKworICBoaWRlOiBm
dW5jdGlvbihlbGVtZW50KSB7CisgICAgJChlbGVtZW50KS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUn
OworICAgIHJldHVybiBlbGVtZW50OworICB9LAorCisgIHNob3c6IGZ1bmN0aW9uKGVsZW1lbnQp
IHsKKyAgICAkKGVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgPSAnJzsKKyAgICByZXR1cm4gZWxlbWVu
dDsKKyAgfSwKKworICByZW1vdmU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICBlbGVtZW50ID0g
JChlbGVtZW50KTsKKyAgICBlbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWxlbWVudCk7
CisgICAgcmV0dXJuIGVsZW1lbnQ7CisgIH0sCisKKyAgdXBkYXRlOiBmdW5jdGlvbihlbGVtZW50
LCBodG1sKSB7CisgICAgaHRtbCA9IHR5cGVvZiBodG1sID09ICd1bmRlZmluZWQnID8gJycgOiBo
dG1sLnRvU3RyaW5nKCk7CisgICAgJChlbGVtZW50KS5pbm5lckhUTUwgPSBodG1sLnN0cmlwU2Ny
aXB0cygpOworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7aHRtbC5ldmFsU2NyaXB0cygpfSwg
MTApOworICAgIHJldHVybiBlbGVtZW50OworICB9LAorCisgIHJlcGxhY2U6IGZ1bmN0aW9uKGVs
ZW1lbnQsIGh0bWwpIHsKKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKyAgICBodG1sID0gdHlw
ZW9mIGh0bWwgPT0gJ3VuZGVmaW5lZCcgPyAnJyA6IGh0bWwudG9TdHJpbmcoKTsKKyAgICBpZiAo
ZWxlbWVudC5vdXRlckhUTUwpIHsKKyAgICAgIGVsZW1lbnQub3V0ZXJIVE1MID0gaHRtbC5zdHJp
cFNjcmlwdHMoKTsKKyAgICB9IGVsc2UgeworICAgICAgdmFyIHJhbmdlID0gZWxlbWVudC5vd25l
ckRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CisgICAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMo
ZWxlbWVudCk7CisgICAgICBlbGVtZW50LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKAorICAgICAg
ICByYW5nZS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoaHRtbC5zdHJpcFNjcmlwdHMoKSksIGVs
ZW1lbnQpOworICAgIH0KKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge2h0bWwuZXZhbFNjcmlw
dHMoKX0sIDEwKTsKKyAgICByZXR1cm4gZWxlbWVudDsKKyAgfSwKKworICBpbnNwZWN0OiBmdW5j
dGlvbihlbGVtZW50KSB7CisgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisgICAgdmFyIHJlc3Vs
dCA9ICc8JyArIGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpOworICAgICRIKHsnaWQnOiAn
aWQnLCAnY2xhc3NOYW1lJzogJ2NsYXNzJ30pLmVhY2goZnVuY3Rpb24ocGFpcikgeworICAgICAg
dmFyIHByb3BlcnR5ID0gcGFpci5maXJzdCgpLCBhdHRyaWJ1dGUgPSBwYWlyLmxhc3QoKTsKKyAg
ICAgIHZhciB2YWx1ZSA9IChlbGVtZW50W3Byb3BlcnR5XSB8fCAnJykudG9TdHJpbmcoKTsKKyAg
ICAgIGlmICh2YWx1ZSkgcmVzdWx0ICs9ICcgJyArIGF0dHJpYnV0ZSArICc9JyArIHZhbHVlLmlu
c3BlY3QodHJ1ZSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdCArICc+JzsKKyAgfSwKKwor
ICByZWN1cnNpdmVseUNvbGxlY3Q6IGZ1bmN0aW9uKGVsZW1lbnQsIHByb3BlcnR5KSB7CisgICAg
ZWxlbWVudCA9ICQoZWxlbWVudCk7CisgICAgdmFyIGVsZW1lbnRzID0gW107CisgICAgd2hpbGUg
KGVsZW1lbnQgPSBlbGVtZW50W3Byb3BlcnR5XSkKKyAgICAgIGlmIChlbGVtZW50Lm5vZGVUeXBl
ID09IDEpCisgICAgICAgIGVsZW1lbnRzLnB1c2goRWxlbWVudC5leHRlbmQoZWxlbWVudCkpOwor
ICAgIHJldHVybiBlbGVtZW50czsKKyAgfSwKKworICBhbmNlc3RvcnM6IGZ1bmN0aW9uKGVsZW1l
bnQpIHsKKyAgICByZXR1cm4gJChlbGVtZW50KS5yZWN1cnNpdmVseUNvbGxlY3QoJ3BhcmVudE5v
ZGUnKTsKKyAgfSwKKworICBkZXNjZW5kYW50czogZnVuY3Rpb24oZWxlbWVudCkgeworICAgIHJl
dHVybiAkQSgkKGVsZW1lbnQpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykpOworICB9LAorCisg
IGltbWVkaWF0ZURlc2NlbmRhbnRzOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgaWYgKCEoZWxl
bWVudCA9ICQoZWxlbWVudCkuZmlyc3RDaGlsZCkpIHJldHVybiBbXTsKKyAgICB3aGlsZSAoZWxl
bWVudCAmJiBlbGVtZW50Lm5vZGVUeXBlICE9IDEpIGVsZW1lbnQgPSBlbGVtZW50Lm5leHRTaWJs
aW5nOworICAgIGlmIChlbGVtZW50KSByZXR1cm4gW2VsZW1lbnRdLmNvbmNhdCgkKGVsZW1lbnQp
Lm5leHRTaWJsaW5ncygpKTsKKyAgICByZXR1cm4gW107CisgIH0sCisKKyAgcHJldmlvdXNTaWJs
aW5nczogZnVuY3Rpb24oZWxlbWVudCkgeworICAgIHJldHVybiAkKGVsZW1lbnQpLnJlY3Vyc2l2
ZWx5Q29sbGVjdCgncHJldmlvdXNTaWJsaW5nJyk7CisgIH0sCisKKyAgbmV4dFNpYmxpbmdzOiBm
dW5jdGlvbihlbGVtZW50KSB7CisgICAgcmV0dXJuICQoZWxlbWVudCkucmVjdXJzaXZlbHlDb2xs
ZWN0KCduZXh0U2libGluZycpOworICB9LAorCisgIHNpYmxpbmdzOiBmdW5jdGlvbihlbGVtZW50
KSB7CisgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisgICAgcmV0dXJuIGVsZW1lbnQucHJldmlv
dXNTaWJsaW5ncygpLnJldmVyc2UoKS5jb25jYXQoZWxlbWVudC5uZXh0U2libGluZ3MoKSk7Cisg
IH0sCisKKyAgbWF0Y2g6IGZ1bmN0aW9uKGVsZW1lbnQsIHNlbGVjdG9yKSB7CisgICAgaWYgKHR5
cGVvZiBzZWxlY3RvciA9PSAnc3RyaW5nJykKKyAgICAgIHNlbGVjdG9yID0gbmV3IFNlbGVjdG9y
KHNlbGVjdG9yKTsKKyAgICByZXR1cm4gc2VsZWN0b3IubWF0Y2goJChlbGVtZW50KSk7CisgIH0s
CisKKyAgdXA6IGZ1bmN0aW9uKGVsZW1lbnQsIGV4cHJlc3Npb24sIGluZGV4KSB7CisgICAgcmV0
dXJuIFNlbGVjdG9yLmZpbmRFbGVtZW50KCQoZWxlbWVudCkuYW5jZXN0b3JzKCksIGV4cHJlc3Np
b24sIGluZGV4KTsKKyAgfSwKKworICBkb3duOiBmdW5jdGlvbihlbGVtZW50LCBleHByZXNzaW9u
LCBpbmRleCkgeworICAgIHJldHVybiBTZWxlY3Rvci5maW5kRWxlbWVudCgkKGVsZW1lbnQpLmRl
c2NlbmRhbnRzKCksIGV4cHJlc3Npb24sIGluZGV4KTsKKyAgfSwKKworICBwcmV2aW91czogZnVu
Y3Rpb24oZWxlbWVudCwgZXhwcmVzc2lvbiwgaW5kZXgpIHsKKyAgICByZXR1cm4gU2VsZWN0b3Iu
ZmluZEVsZW1lbnQoJChlbGVtZW50KS5wcmV2aW91c1NpYmxpbmdzKCksIGV4cHJlc3Npb24sIGlu
ZGV4KTsKKyAgfSwKKworICBuZXh0OiBmdW5jdGlvbihlbGVtZW50LCBleHByZXNzaW9uLCBpbmRl
eCkgeworICAgIHJldHVybiBTZWxlY3Rvci5maW5kRWxlbWVudCgkKGVsZW1lbnQpLm5leHRTaWJs
aW5ncygpLCBleHByZXNzaW9uLCBpbmRleCk7CisgIH0sCisKKyAgZ2V0RWxlbWVudHNCeVNlbGVj
dG9yOiBmdW5jdGlvbigpIHsKKyAgICB2YXIgYXJncyA9ICRBKGFyZ3VtZW50cyksIGVsZW1lbnQg
PSAkKGFyZ3Muc2hpZnQoKSk7CisgICAgcmV0dXJuIFNlbGVjdG9yLmZpbmRDaGlsZEVsZW1lbnRz
KGVsZW1lbnQsIGFyZ3MpOworICB9LAorCisgIGdldEVsZW1lbnRzQnlDbGFzc05hbWU6IGZ1bmN0
aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSkgeworICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50
c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZSwgZWxlbWVudCk7CisgIH0sCisKKyAgcmVhZEF0dHJpYnV0
ZTogZnVuY3Rpb24oZWxlbWVudCwgbmFtZSkgeworICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwor
ICAgIGlmIChkb2N1bWVudC5hbGwgJiYgIXdpbmRvdy5vcGVyYSkgeworICAgICAgdmFyIHQgPSBF
bGVtZW50Ll9hdHRyaWJ1dGVUcmFuc2xhdGlvbnM7CisgICAgICBpZiAodC52YWx1ZXNbbmFtZV0p
IHJldHVybiB0LnZhbHVlc1tuYW1lXShlbGVtZW50LCBuYW1lKTsKKyAgICAgIGlmICh0Lm5hbWVz
W25hbWVdKSAgbmFtZSA9IHQubmFtZXNbbmFtZV07CisgICAgICB2YXIgYXR0cmlidXRlID0gZWxl
bWVudC5hdHRyaWJ1dGVzW25hbWVdOworICAgICAgaWYoYXR0cmlidXRlKSByZXR1cm4gYXR0cmli
dXRlLm5vZGVWYWx1ZTsKKyAgICB9CisgICAgcmV0dXJuIGVsZW1lbnQuZ2V0QXR0cmlidXRlKG5h
bWUpOworICB9LAorCisgIGdldEhlaWdodDogZnVuY3Rpb24oZWxlbWVudCkgeworICAgIHJldHVy
biAkKGVsZW1lbnQpLmdldERpbWVuc2lvbnMoKS5oZWlnaHQ7CisgIH0sCisKKyAgZ2V0V2lkdGg6
IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICByZXR1cm4gJChlbGVtZW50KS5nZXREaW1lbnNpb25z
KCkud2lkdGg7CisgIH0sCisKKyAgY2xhc3NOYW1lczogZnVuY3Rpb24oZWxlbWVudCkgeworICAg
IHJldHVybiBuZXcgRWxlbWVudC5DbGFzc05hbWVzKGVsZW1lbnQpOworICB9LAorCisgIGhhc0Ns
YXNzTmFtZTogZnVuY3Rpb24oZWxlbWVudCwgY2xhc3NOYW1lKSB7CisgICAgaWYgKCEoZWxlbWVu
dCA9ICQoZWxlbWVudCkpKSByZXR1cm47CisgICAgdmFyIGVsZW1lbnRDbGFzc05hbWUgPSBlbGVt
ZW50LmNsYXNzTmFtZTsKKyAgICBpZiAoZWxlbWVudENsYXNzTmFtZS5sZW5ndGggPT0gMCkgcmV0
dXJuIGZhbHNlOworICAgIGlmIChlbGVtZW50Q2xhc3NOYW1lID09IGNsYXNzTmFtZSB8fAorICAg
ICAgICBlbGVtZW50Q2xhc3NOYW1lLm1hdGNoKG5ldyBSZWdFeHAoIihefFxccykiICsgY2xhc3NO
YW1lICsgIihcXHN8JCkiKSkpCisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7
CisgIH0sCisKKyAgYWRkQ2xhc3NOYW1lOiBmdW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUpIHsK
KyAgICBpZiAoIShlbGVtZW50ID0gJChlbGVtZW50KSkpIHJldHVybjsKKyAgICBFbGVtZW50LmNs
YXNzTmFtZXMoZWxlbWVudCkuYWRkKGNsYXNzTmFtZSk7CisgICAgcmV0dXJuIGVsZW1lbnQ7Cisg
IH0sCisKKyAgcmVtb3ZlQ2xhc3NOYW1lOiBmdW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUpIHsK
KyAgICBpZiAoIShlbGVtZW50ID0gJChlbGVtZW50KSkpIHJldHVybjsKKyAgICBFbGVtZW50LmNs
YXNzTmFtZXMoZWxlbWVudCkucmVtb3ZlKGNsYXNzTmFtZSk7CisgICAgcmV0dXJuIGVsZW1lbnQ7
CisgIH0sCisKKyAgdG9nZ2xlQ2xhc3NOYW1lOiBmdW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUp
IHsKKyAgICBpZiAoIShlbGVtZW50ID0gJChlbGVtZW50KSkpIHJldHVybjsKKyAgICBFbGVtZW50
LmNsYXNzTmFtZXMoZWxlbWVudClbZWxlbWVudC5oYXNDbGFzc05hbWUoY2xhc3NOYW1lKSA/ICdy
ZW1vdmUnIDogJ2FkZCddKGNsYXNzTmFtZSk7CisgICAgcmV0dXJuIGVsZW1lbnQ7CisgIH0sCisK
KyAgb2JzZXJ2ZTogZnVuY3Rpb24oKSB7CisgICAgRXZlbnQub2JzZXJ2ZS5hcHBseShFdmVudCwg
YXJndW1lbnRzKTsKKyAgICByZXR1cm4gJEEoYXJndW1lbnRzKS5maXJzdCgpOworICB9LAorCisg
IHN0b3BPYnNlcnZpbmc6IGZ1bmN0aW9uKCkgeworICAgIEV2ZW50LnN0b3BPYnNlcnZpbmcuYXBw
bHkoRXZlbnQsIGFyZ3VtZW50cyk7CisgICAgcmV0dXJuICRBKGFyZ3VtZW50cykuZmlyc3QoKTsK
KyAgfSwKKworICAvLyByZW1vdmVzIHdoaXRlc3BhY2Utb25seSB0ZXh0IG5vZGUgY2hpbGRyZW4K
KyAgY2xlYW5XaGl0ZXNwYWNlOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgZWxlbWVudCA9ICQo
ZWxlbWVudCk7CisgICAgdmFyIG5vZGUgPSBlbGVtZW50LmZpcnN0Q2hpbGQ7CisgICAgd2hpbGUg
KG5vZGUpIHsKKyAgICAgIHZhciBuZXh0Tm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7CisgICAgICBp
ZiAobm9kZS5ub2RlVHlwZSA9PSAzICYmICEvXFMvLnRlc3Qobm9kZS5ub2RlVmFsdWUpKQorICAg
ICAgICBlbGVtZW50LnJlbW92ZUNoaWxkKG5vZGUpOworICAgICAgbm9kZSA9IG5leHROb2RlOwor
ICAgIH0KKyAgICByZXR1cm4gZWxlbWVudDsKKyAgfSwKKworICBlbXB0eTogZnVuY3Rpb24oZWxl
bWVudCkgeworICAgIHJldHVybiAkKGVsZW1lbnQpLmlubmVySFRNTC5tYXRjaCgvXlxzKiQvKTsK
KyAgfSwKKworICBkZXNjZW5kYW50T2Y6IGZ1bmN0aW9uKGVsZW1lbnQsIGFuY2VzdG9yKSB7Cisg
ICAgZWxlbWVudCA9ICQoZWxlbWVudCksIGFuY2VzdG9yID0gJChhbmNlc3Rvcik7CisgICAgd2hp
bGUgKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGUpCisgICAgICBpZiAoZWxlbWVudCA9PSBh
bmNlc3RvcikgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworICB9LAorCisgIHNjcm9s
bFRvOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisgICAg
dmFyIHBvcyA9IFBvc2l0aW9uLmN1bXVsYXRpdmVPZmZzZXQoZWxlbWVudCk7CisgICAgd2luZG93
LnNjcm9sbFRvKHBvc1swXSwgcG9zWzFdKTsKKyAgICByZXR1cm4gZWxlbWVudDsKKyAgfSwKKwor
ICBnZXRTdHlsZTogZnVuY3Rpb24oZWxlbWVudCwgc3R5bGUpIHsKKyAgICBlbGVtZW50ID0gJChl
bGVtZW50KTsKKyAgICBpZiAoWydmbG9hdCcsJ2Nzc0Zsb2F0J10uaW5jbHVkZShzdHlsZSkpCisg
ICAgICBzdHlsZSA9ICh0eXBlb2YgZWxlbWVudC5zdHlsZS5zdHlsZUZsb2F0ICE9ICd1bmRlZmlu
ZWQnID8gJ3N0eWxlRmxvYXQnIDogJ2Nzc0Zsb2F0Jyk7CisgICAgc3R5bGUgPSBzdHlsZS5jYW1l
bGl6ZSgpOworICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQuc3R5bGVbc3R5bGVdOworICAgIGlmICgh
dmFsdWUpIHsKKyAgICAgIGlmIChkb2N1bWVudC5kZWZhdWx0VmlldyAmJiBkb2N1bWVudC5kZWZh
dWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKSB7CisgICAgICAgIHZhciBjc3MgPSBkb2N1bWVudC5k
ZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsIG51bGwpOworICAgICAgICB2YWx1
ZSA9IGNzcyA/IGNzc1tzdHlsZV0gOiBudWxsOworICAgICAgfSBlbHNlIGlmIChlbGVtZW50LmN1
cnJlbnRTdHlsZSkgeworICAgICAgICB2YWx1ZSA9IGVsZW1lbnQuY3VycmVudFN0eWxlW3N0eWxl
XTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZigodmFsdWUgPT0gJ2F1dG8nKSAmJiBbJ3dpZHRo
JywnaGVpZ2h0J10uaW5jbHVkZShzdHlsZSkgJiYgKGVsZW1lbnQuZ2V0U3R5bGUoJ2Rpc3BsYXkn
KSAhPSAnbm9uZScpKQorICAgICAgdmFsdWUgPSBlbGVtZW50WydvZmZzZXQnK3N0eWxlLmNhcGl0
YWxpemUoKV0gKyAncHgnOworCisgICAgaWYgKHdpbmRvdy5vcGVyYSAmJiBbJ2xlZnQnLCAndG9w
JywgJ3JpZ2h0JywgJ2JvdHRvbSddLmluY2x1ZGUoc3R5bGUpKQorICAgICAgaWYgKEVsZW1lbnQu
Z2V0U3R5bGUoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0gJ3N0YXRpYycpIHZhbHVlID0gJ2F1dG8n
OworICAgIGlmKHN0eWxlID09ICdvcGFjaXR5JykgeworICAgICAgaWYodmFsdWUpIHJldHVybiBw
YXJzZUZsb2F0KHZhbHVlKTsKKyAgICAgIGlmKHZhbHVlID0gKGVsZW1lbnQuZ2V0U3R5bGUoJ2Zp
bHRlcicpIHx8ICcnKS5tYXRjaCgvYWxwaGFcKG9wYWNpdHk9KC4qKVwpLykpCisgICAgICAgIGlm
KHZhbHVlWzFdKSByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZVsxXSkgLyAxMDA7CisgICAgICByZXR1
cm4gMS4wOworICAgIH0KKyAgICByZXR1cm4gdmFsdWUgPT0gJ2F1dG8nID8gbnVsbCA6IHZhbHVl
OworICB9LAorCisgIHNldFN0eWxlOiBmdW5jdGlvbihlbGVtZW50LCBzdHlsZSkgeworICAgIGVs
ZW1lbnQgPSAkKGVsZW1lbnQpOworICAgIGZvciAodmFyIG5hbWUgaW4gc3R5bGUpIHsKKyAgICAg
IHZhciB2YWx1ZSA9IHN0eWxlW25hbWVdOworICAgICAgaWYobmFtZSA9PSAnb3BhY2l0eScpIHsK
KyAgICAgICAgaWYgKHZhbHVlID09IDEpIHsKKyAgICAgICAgICB2YWx1ZSA9ICgvR2Vja28vLnRl
c3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYKKyAgICAgICAgICAgICEvS29ucXVlcm9yfFNhZmFy
aXxLSFRNTC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkgPyAwLjk5OTk5OSA6IDEuMDsKKyAg
ICAgICAgICBpZigvTVNJRS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSAmJiAhd2luZG93Lm9w
ZXJhKQorICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5maWx0ZXIgPSBlbGVtZW50LmdldFN0eWxl
KCdmaWx0ZXInKS5yZXBsYWNlKC9hbHBoYVwoW15cKV0qXCkvZ2ksJycpOworICAgICAgICB9IGVs
c2UgaWYodmFsdWUgPT0gJycpIHsKKyAgICAgICAgICBpZigvTVNJRS8udGVzdChuYXZpZ2F0b3Iu
dXNlckFnZW50KSAmJiAhd2luZG93Lm9wZXJhKQorICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5m
aWx0ZXIgPSBlbGVtZW50LmdldFN0eWxlKCdmaWx0ZXInKS5yZXBsYWNlKC9hbHBoYVwoW15cKV0q
XCkvZ2ksJycpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGlmKHZhbHVlIDwgMC4wMDAw
MSkgdmFsdWUgPSAwOworICAgICAgICAgIGlmKC9NU0lFLy50ZXN0KG5hdmlnYXRvci51c2VyQWdl
bnQpICYmICF3aW5kb3cub3BlcmEpCisgICAgICAgICAgICBlbGVtZW50LnN0eWxlLmZpbHRlciA9
IGVsZW1lbnQuZ2V0U3R5bGUoJ2ZpbHRlcicpLnJlcGxhY2UoL2FscGhhXChbXlwpXSpcKS9naSwn
JykgKworICAgICAgICAgICAgICAnYWxwaGEob3BhY2l0eT0nK3ZhbHVlKjEwMCsnKSc7CisgICAg
ICAgIH0KKyAgICAgIH0gZWxzZSBpZihbJ2Zsb2F0JywnY3NzRmxvYXQnXS5pbmNsdWRlKG5hbWUp
KSBuYW1lID0gKHR5cGVvZiBlbGVtZW50LnN0eWxlLnN0eWxlRmxvYXQgIT0gJ3VuZGVmaW5lZCcp
ID8gJ3N0eWxlRmxvYXQnIDogJ2Nzc0Zsb2F0JzsKKyAgICAgIGVsZW1lbnQuc3R5bGVbbmFtZS5j
YW1lbGl6ZSgpXSA9IHZhbHVlOworICAgIH0KKyAgICByZXR1cm4gZWxlbWVudDsKKyAgfSwKKwor
ICBnZXREaW1lbnNpb25zOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgZWxlbWVudCA9ICQoZWxl
bWVudCk7CisgICAgdmFyIGRpc3BsYXkgPSAkKGVsZW1lbnQpLmdldFN0eWxlKCdkaXNwbGF5Jyk7
CisgICAgaWYgKGRpc3BsYXkgIT0gJ25vbmUnICYmIGRpc3BsYXkgIT0gbnVsbCkgLy8gU2FmYXJp
IGJ1ZworICAgICAgcmV0dXJuIHt3aWR0aDogZWxlbWVudC5vZmZzZXRXaWR0aCwgaGVpZ2h0OiBl
bGVtZW50Lm9mZnNldEhlaWdodH07CisKKyAgICAvLyBBbGwgKldpZHRoIGFuZCAqSGVpZ2h0IHBy
b3BlcnRpZXMgZ2l2ZSAwIG9uIGVsZW1lbnRzIHdpdGggZGlzcGxheSBub25lLAorICAgIC8vIHNv
IGVuYWJsZSB0aGUgZWxlbWVudCB0ZW1wb3JhcmlseQorICAgIHZhciBlbHMgPSBlbGVtZW50LnN0
eWxlOworICAgIHZhciBvcmlnaW5hbFZpc2liaWxpdHkgPSBlbHMudmlzaWJpbGl0eTsKKyAgICB2
YXIgb3JpZ2luYWxQb3NpdGlvbiA9IGVscy5wb3NpdGlvbjsKKyAgICB2YXIgb3JpZ2luYWxEaXNw
bGF5ID0gZWxzLmRpc3BsYXk7CisgICAgZWxzLnZpc2liaWxpdHkgPSAnaGlkZGVuJzsKKyAgICBl
bHMucG9zaXRpb24gPSAnYWJzb2x1dGUnOworICAgIGVscy5kaXNwbGF5ID0gJ2Jsb2NrJzsKKyAg
ICB2YXIgb3JpZ2luYWxXaWR0aCA9IGVsZW1lbnQuY2xpZW50V2lkdGg7CisgICAgdmFyIG9yaWdp
bmFsSGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQ7CisgICAgZWxzLmRpc3BsYXkgPSBvcmln
aW5hbERpc3BsYXk7CisgICAgZWxzLnBvc2l0aW9uID0gb3JpZ2luYWxQb3NpdGlvbjsKKyAgICBl
bHMudmlzaWJpbGl0eSA9IG9yaWdpbmFsVmlzaWJpbGl0eTsKKyAgICByZXR1cm4ge3dpZHRoOiBv
cmlnaW5hbFdpZHRoLCBoZWlnaHQ6IG9yaWdpbmFsSGVpZ2h0fTsKKyAgfSwKKworICBtYWtlUG9z
aXRpb25lZDogZnVuY3Rpb24oZWxlbWVudCkgeworICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwor
ICAgIHZhciBwb3MgPSBFbGVtZW50LmdldFN0eWxlKGVsZW1lbnQsICdwb3NpdGlvbicpOworICAg
IGlmIChwb3MgPT0gJ3N0YXRpYycgfHwgIXBvcykgeworICAgICAgZWxlbWVudC5fbWFkZVBvc2l0
aW9uZWQgPSB0cnVlOworICAgICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7
CisgICAgICAvLyBPcGVyYSByZXR1cm5zIHRoZSBvZmZzZXQgcmVsYXRpdmUgdG8gdGhlIHBvc2l0
aW9uaW5nIGNvbnRleHQsIHdoZW4gYW4KKyAgICAgIC8vIGVsZW1lbnQgaXMgcG9zaXRpb24gcmVs
YXRpdmUgYnV0IHRvcCBhbmQgbGVmdCBoYXZlIG5vdCBiZWVuIGRlZmluZWQKKyAgICAgIGlmICh3
aW5kb3cub3BlcmEpIHsKKyAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSAwOworICAgICAgICBl
bGVtZW50LnN0eWxlLmxlZnQgPSAwOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZWxlbWVu
dDsKKyAgfSwKKworICB1bmRvUG9zaXRpb25lZDogZnVuY3Rpb24oZWxlbWVudCkgeworICAgIGVs
ZW1lbnQgPSAkKGVsZW1lbnQpOworICAgIGlmIChlbGVtZW50Ll9tYWRlUG9zaXRpb25lZCkgewor
ICAgICAgZWxlbWVudC5fbWFkZVBvc2l0aW9uZWQgPSB1bmRlZmluZWQ7CisgICAgICBlbGVtZW50
LnN0eWxlLnBvc2l0aW9uID0KKyAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPQorICAgICAgICBl
bGVtZW50LnN0eWxlLmxlZnQgPQorICAgICAgICBlbGVtZW50LnN0eWxlLmJvdHRvbSA9CisgICAg
ICAgIGVsZW1lbnQuc3R5bGUucmlnaHQgPSAnJzsKKyAgICB9CisgICAgcmV0dXJuIGVsZW1lbnQ7
CisgIH0sCisKKyAgbWFrZUNsaXBwaW5nOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgZWxlbWVu
dCA9ICQoZWxlbWVudCk7CisgICAgaWYgKGVsZW1lbnQuX292ZXJmbG93KSByZXR1cm4gZWxlbWVu
dDsKKyAgICBlbGVtZW50Ll9vdmVyZmxvdyA9IGVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgfHwgJ2F1
dG8nOworICAgIGlmICgoRWxlbWVudC5nZXRTdHlsZShlbGVtZW50LCAnb3ZlcmZsb3cnKSB8fCAn
dmlzaWJsZScpICE9ICdoaWRkZW4nKQorICAgICAgZWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9ICdo
aWRkZW4nOworICAgIHJldHVybiBlbGVtZW50OworICB9LAorCisgIHVuZG9DbGlwcGluZzogZnVu
Y3Rpb24oZWxlbWVudCkgeworICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOworICAgIGlmICghZWxl
bWVudC5fb3ZlcmZsb3cpIHJldHVybiBlbGVtZW50OworICAgIGVsZW1lbnQuc3R5bGUub3ZlcmZs
b3cgPSBlbGVtZW50Ll9vdmVyZmxvdyA9PSAnYXV0bycgPyAnJyA6IGVsZW1lbnQuX292ZXJmbG93
OworICAgIGVsZW1lbnQuX292ZXJmbG93ID0gbnVsbDsKKyAgICByZXR1cm4gZWxlbWVudDsKKyAg
fQorfTsKKworT2JqZWN0LmV4dGVuZChFbGVtZW50Lk1ldGhvZHMsIHtjaGlsZE9mOiBFbGVtZW50
Lk1ldGhvZHMuZGVzY2VuZGFudE9mfSk7CisKK0VsZW1lbnQuX2F0dHJpYnV0ZVRyYW5zbGF0aW9u
cyA9IHt9OworCitFbGVtZW50Ll9hdHRyaWJ1dGVUcmFuc2xhdGlvbnMubmFtZXMgPSB7CisgIGNv
bHNwYW46ICAgImNvbFNwYW4iLAorICByb3dzcGFuOiAgICJyb3dTcGFuIiwKKyAgdmFsaWduOiAg
ICAidkFsaWduIiwKKyAgZGF0ZXRpbWU6ICAiZGF0ZVRpbWUiLAorICBhY2Nlc3NrZXk6ICJhY2Nl
c3NLZXkiLAorICB0YWJpbmRleDogICJ0YWJJbmRleCIsCisgIGVuY3R5cGU6ICAgImVuY1R5cGUi
LAorICBtYXhsZW5ndGg6ICJtYXhMZW5ndGgiLAorICByZWFkb25seTogICJyZWFkT25seSIsCisg
IGxvbmdkZXNjOiAgImxvbmdEZXNjIgorfTsKKworRWxlbWVudC5fYXR0cmlidXRlVHJhbnNsYXRp
b25zLnZhbHVlcyA9IHsKKyAgX2dldEF0dHI6IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHJpYnV0ZSkg
eworICAgIHJldHVybiBlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIDIpOworICB9LAor
CisgIF9mbGFnOiBmdW5jdGlvbihlbGVtZW50LCBhdHRyaWJ1dGUpIHsKKyAgICByZXR1cm4gJChl
bGVtZW50KS5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlKSA/IGF0dHJpYnV0ZSA6IG51bGw7CisgIH0s
CisKKyAgc3R5bGU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICByZXR1cm4gZWxlbWVudC5zdHls
ZS5jc3NUZXh0LnRvTG93ZXJDYXNlKCk7CisgIH0sCisKKyAgdGl0bGU6IGZ1bmN0aW9uKGVsZW1l
bnQpIHsKKyAgICB2YXIgbm9kZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlTm9kZSgndGl0bGUnKTsK
KyAgICByZXR1cm4gbm9kZS5zcGVjaWZpZWQgPyBub2RlLm5vZGVWYWx1ZSA6IG51bGw7CisgIH0K
K307CisKK09iamVjdC5leHRlbmQoRWxlbWVudC5fYXR0cmlidXRlVHJhbnNsYXRpb25zLnZhbHVl
cywgeworICBocmVmOiBFbGVtZW50Ll9hdHRyaWJ1dGVUcmFuc2xhdGlvbnMudmFsdWVzLl9nZXRB
dHRyLAorICBzcmM6ICBFbGVtZW50Ll9hdHRyaWJ1dGVUcmFuc2xhdGlvbnMudmFsdWVzLl9nZXRB
dHRyLAorICBkaXNhYmxlZDogRWxlbWVudC5fYXR0cmlidXRlVHJhbnNsYXRpb25zLnZhbHVlcy5f
ZmxhZywKKyAgY2hlY2tlZDogIEVsZW1lbnQuX2F0dHJpYnV0ZVRyYW5zbGF0aW9ucy52YWx1ZXMu
X2ZsYWcsCisgIHJlYWRvbmx5OiBFbGVtZW50Ll9hdHRyaWJ1dGVUcmFuc2xhdGlvbnMudmFsdWVz
Ll9mbGFnLAorICBtdWx0aXBsZTogRWxlbWVudC5fYXR0cmlidXRlVHJhbnNsYXRpb25zLnZhbHVl
cy5fZmxhZworfSk7CisKK0VsZW1lbnQuTWV0aG9kcy5TaW11bGF0ZWQgPSB7CisgIGhhc0F0dHJp
YnV0ZTogZnVuY3Rpb24oZWxlbWVudCwgYXR0cmlidXRlKSB7CisgICAgdmFyIHQgPSBFbGVtZW50
Ll9hdHRyaWJ1dGVUcmFuc2xhdGlvbnM7CisgICAgYXR0cmlidXRlID0gdC5uYW1lc1thdHRyaWJ1
dGVdIHx8IGF0dHJpYnV0ZTsKKyAgICByZXR1cm4gJChlbGVtZW50KS5nZXRBdHRyaWJ1dGVOb2Rl
KGF0dHJpYnV0ZSkuc3BlY2lmaWVkOworICB9Cit9OworCisvLyBJRSBpcyBtaXNzaW5nIC5pbm5l
ckhUTUwgc3VwcG9ydCBmb3IgVEFCTEUtcmVsYXRlZCBlbGVtZW50cworaWYgKGRvY3VtZW50LmFs
bCAmJiAhd2luZG93Lm9wZXJhKXsKKyAgRWxlbWVudC5NZXRob2RzLnVwZGF0ZSA9IGZ1bmN0aW9u
KGVsZW1lbnQsIGh0bWwpIHsKKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKyAgICBodG1sID0g
dHlwZW9mIGh0bWwgPT0gJ3VuZGVmaW5lZCcgPyAnJyA6IGh0bWwudG9TdHJpbmcoKTsKKyAgICB2
YXIgdGFnTmFtZSA9IGVsZW1lbnQudGFnTmFtZS50b1VwcGVyQ2FzZSgpOworICAgIGlmIChbJ1RI
RUFEJywnVEJPRFknLCdUUicsJ1REJ10uaW5jbHVkZSh0YWdOYW1lKSkgeworICAgICAgdmFyIGRp
diA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgc3dpdGNoICh0YWdOYW1l
KSB7CisgICAgICAgIGNhc2UgJ1RIRUFEJzoKKyAgICAgICAgY2FzZSAnVEJPRFknOgorICAgICAg
ICAgIGRpdi5pbm5lckhUTUwgPSAnPHRhYmxlPjx0Ym9keT4nICsgIGh0bWwuc3RyaXBTY3JpcHRz
KCkgKyAnPC90Ym9keT48L3RhYmxlPic7CisgICAgICAgICAgZGVwdGggPSAyOworICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlICdUUic6CisgICAgICAgICAgZGl2LmlubmVySFRNTCA9ICc8
dGFibGU+PHRib2R5Pjx0cj4nICsgIGh0bWwuc3RyaXBTY3JpcHRzKCkgKyAnPC90cj48L3Rib2R5
PjwvdGFibGU+JzsKKyAgICAgICAgICBkZXB0aCA9IDM7CisgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgJ1REJzoKKyAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gJzx0YWJsZT48dGJvZHk+
PHRyPjx0ZD4nICsgIGh0bWwuc3RyaXBTY3JpcHRzKCkgKyAnPC90ZD48L3RyPjwvdGJvZHk+PC90
YWJsZT4nOworICAgICAgICAgIGRlcHRoID0gNDsKKyAgICAgIH0KKyAgICAgICRBKGVsZW1lbnQu
Y2hpbGROb2RlcykuZWFjaChmdW5jdGlvbihub2RlKXsKKyAgICAgICAgZWxlbWVudC5yZW1vdmVD
aGlsZChub2RlKQorICAgICAgfSk7CisgICAgICBkZXB0aC50aW1lcyhmdW5jdGlvbigpeyBkaXYg
PSBkaXYuZmlyc3RDaGlsZCB9KTsKKworICAgICAgJEEoZGl2LmNoaWxkTm9kZXMpLmVhY2goCisg
ICAgICAgIGZ1bmN0aW9uKG5vZGUpeyBlbGVtZW50LmFwcGVuZENoaWxkKG5vZGUpIH0pOworICAg
IH0gZWxzZSB7CisgICAgICBlbGVtZW50LmlubmVySFRNTCA9IGh0bWwuc3RyaXBTY3JpcHRzKCk7
CisgICAgfQorICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7aHRtbC5ldmFsU2NyaXB0cygpfSwg
MTApOworICAgIHJldHVybiBlbGVtZW50OworICB9Cit9OworCitPYmplY3QuZXh0ZW5kKEVsZW1l
bnQsIEVsZW1lbnQuTWV0aG9kcyk7CisKK3ZhciBfbmF0aXZlRXh0ZW5zaW9ucyA9IGZhbHNlOwor
CitpZigvS29ucXVlcm9yfFNhZmFyaXxLSFRNTC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkK
KyAgWycnLCAnRm9ybScsICdJbnB1dCcsICdUZXh0QXJlYScsICdTZWxlY3QnXS5lYWNoKGZ1bmN0
aW9uKHRhZykgeworICAgIHZhciBjbGFzc05hbWUgPSAnSFRNTCcgKyB0YWcgKyAnRWxlbWVudCc7
CisgICAgaWYod2luZG93W2NsYXNzTmFtZV0pIHJldHVybjsKKyAgICB2YXIga2xhc3MgPSB3aW5k
b3dbY2xhc3NOYW1lXSA9IHt9OworICAgIGtsYXNzLnByb3RvdHlwZSA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQodGFnID8gdGFnLnRvTG93ZXJDYXNlKCkgOiAnZGl2JykuX19wcm90b19fOworICB9
KTsKKworRWxlbWVudC5hZGRNZXRob2RzID0gZnVuY3Rpb24obWV0aG9kcykgeworICBPYmplY3Qu
ZXh0ZW5kKEVsZW1lbnQuTWV0aG9kcywgbWV0aG9kcyB8fCB7fSk7CisKKyAgZnVuY3Rpb24gY29w
eShtZXRob2RzLCBkZXN0aW5hdGlvbiwgb25seUlmQWJzZW50KSB7CisgICAgb25seUlmQWJzZW50
ID0gb25seUlmQWJzZW50IHx8IGZhbHNlOworICAgIHZhciBjYWNoZSA9IEVsZW1lbnQuZXh0ZW5k
LmNhY2hlOworICAgIGZvciAodmFyIHByb3BlcnR5IGluIG1ldGhvZHMpIHsKKyAgICAgIHZhciB2
YWx1ZSA9IG1ldGhvZHNbcHJvcGVydHldOworICAgICAgaWYgKCFvbmx5SWZBYnNlbnQgfHwgIShw
cm9wZXJ0eSBpbiBkZXN0aW5hdGlvbikpCisgICAgICAgIGRlc3RpbmF0aW9uW3Byb3BlcnR5XSA9
IGNhY2hlLmZpbmRPclN0b3JlKHZhbHVlKTsKKyAgICB9CisgIH0KKworICBpZiAodHlwZW9mIEhU
TUxFbGVtZW50ICE9ICd1bmRlZmluZWQnKSB7CisgICAgY29weShFbGVtZW50Lk1ldGhvZHMsIEhU
TUxFbGVtZW50LnByb3RvdHlwZSk7CisgICAgY29weShFbGVtZW50Lk1ldGhvZHMuU2ltdWxhdGVk
LCBIVE1MRWxlbWVudC5wcm90b3R5cGUsIHRydWUpOworICAgIGNvcHkoRm9ybS5NZXRob2RzLCBI
VE1MRm9ybUVsZW1lbnQucHJvdG90eXBlKTsKKyAgICBbSFRNTElucHV0RWxlbWVudCwgSFRNTFRl
eHRBcmVhRWxlbWVudCwgSFRNTFNlbGVjdEVsZW1lbnRdLmVhY2goZnVuY3Rpb24oa2xhc3MpIHsK
KyAgICAgIGNvcHkoRm9ybS5FbGVtZW50Lk1ldGhvZHMsIGtsYXNzLnByb3RvdHlwZSk7CisgICAg
fSk7CisgICAgX25hdGl2ZUV4dGVuc2lvbnMgPSB0cnVlOworICB9Cit9CisKK3ZhciBUb2dnbGUg
PSBuZXcgT2JqZWN0KCk7CitUb2dnbGUuZGlzcGxheSA9IEVsZW1lbnQudG9nZ2xlOworCisvKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KKworQWJzdHJhY3QuSW5zZXJ0aW9uID0gZnVuY3Rpb24oYWRqYWNl
bmN5KSB7CisgIHRoaXMuYWRqYWNlbmN5ID0gYWRqYWNlbmN5OworfQorCitBYnN0cmFjdC5JbnNl
cnRpb24ucHJvdG90eXBlID0geworICBpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50LCBjb250
ZW50KSB7CisgICAgdGhpcy5lbGVtZW50ID0gJChlbGVtZW50KTsKKyAgICB0aGlzLmNvbnRlbnQg
PSBjb250ZW50LnN0cmlwU2NyaXB0cygpOworCisgICAgaWYgKHRoaXMuYWRqYWNlbmN5ICYmIHRo
aXMuZWxlbWVudC5pbnNlcnRBZGphY2VudEhUTUwpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIHRo
aXMuZWxlbWVudC5pbnNlcnRBZGphY2VudEhUTUwodGhpcy5hZGphY2VuY3ksIHRoaXMuY29udGVu
dCk7CisgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHZhciB0YWdOYW1lID0gdGhpcy5lbGVt
ZW50LnRhZ05hbWUudG9VcHBlckNhc2UoKTsKKyAgICAgICAgaWYgKFsnVEJPRFknLCAnVFInXS5p
bmNsdWRlKHRhZ05hbWUpKSB7CisgICAgICAgICAgdGhpcy5pbnNlcnRDb250ZW50KHRoaXMuY29u
dGVudEZyb21Bbm9ueW1vdXNUYWJsZSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0
aHJvdyBlOworICAgICAgICB9CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMucmFu
Z2UgPSB0aGlzLmVsZW1lbnQub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpOworICAgICAgaWYg
KHRoaXMuaW5pdGlhbGl6ZVJhbmdlKSB0aGlzLmluaXRpYWxpemVSYW5nZSgpOworICAgICAgdGhp
cy5pbnNlcnRDb250ZW50KFt0aGlzLnJhbmdlLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0aGlz
LmNvbnRlbnQpXSk7CisgICAgfQorCisgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtjb250ZW50
LmV2YWxTY3JpcHRzKCl9LCAxMCk7CisgIH0sCisKKyAgY29udGVudEZyb21Bbm9ueW1vdXNUYWJs
ZTogZnVuY3Rpb24oKSB7CisgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpOworICAgIGRpdi5pbm5lckhUTUwgPSAnPHRhYmxlPjx0Ym9keT4nICsgdGhpcy5jb250ZW50
ICsgJzwvdGJvZHk+PC90YWJsZT4nOworICAgIHJldHVybiAkQShkaXYuY2hpbGROb2Rlc1swXS5j
aGlsZE5vZGVzWzBdLmNoaWxkTm9kZXMpOworICB9Cit9CisKK3ZhciBJbnNlcnRpb24gPSBuZXcg
T2JqZWN0KCk7CisKK0luc2VydGlvbi5CZWZvcmUgPSBDbGFzcy5jcmVhdGUoKTsKK0luc2VydGlv
bi5CZWZvcmUucHJvdG90eXBlID0gT2JqZWN0LmV4dGVuZChuZXcgQWJzdHJhY3QuSW5zZXJ0aW9u
KCdiZWZvcmVCZWdpbicpLCB7CisgIGluaXRpYWxpemVSYW5nZTogZnVuY3Rpb24oKSB7CisgICAg
dGhpcy5yYW5nZS5zZXRTdGFydEJlZm9yZSh0aGlzLmVsZW1lbnQpOworICB9LAorCisgIGluc2Vy
dENvbnRlbnQ6IGZ1bmN0aW9uKGZyYWdtZW50cykgeworICAgIGZyYWdtZW50cy5lYWNoKChmdW5j
dGlvbihmcmFnbWVudCkgeworICAgICAgdGhpcy5lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVm
b3JlKGZyYWdtZW50LCB0aGlzLmVsZW1lbnQpOworICAgIH0pLmJpbmQodGhpcykpOworICB9Cit9
KTsKKworSW5zZXJ0aW9uLlRvcCA9IENsYXNzLmNyZWF0ZSgpOworSW5zZXJ0aW9uLlRvcC5wcm90
b3R5cGUgPSBPYmplY3QuZXh0ZW5kKG5ldyBBYnN0cmFjdC5JbnNlcnRpb24oJ2FmdGVyQmVnaW4n
KSwgeworICBpbml0aWFsaXplUmFuZ2U6IGZ1bmN0aW9uKCkgeworICAgIHRoaXMucmFuZ2Uuc2Vs
ZWN0Tm9kZUNvbnRlbnRzKHRoaXMuZWxlbWVudCk7CisgICAgdGhpcy5yYW5nZS5jb2xsYXBzZSh0
cnVlKTsKKyAgfSwKKworICBpbnNlcnRDb250ZW50OiBmdW5jdGlvbihmcmFnbWVudHMpIHsKKyAg
ICBmcmFnbWVudHMucmV2ZXJzZShmYWxzZSkuZWFjaCgoZnVuY3Rpb24oZnJhZ21lbnQpIHsKKyAg
ICAgIHRoaXMuZWxlbWVudC5pbnNlcnRCZWZvcmUoZnJhZ21lbnQsIHRoaXMuZWxlbWVudC5maXJz
dENoaWxkKTsKKyAgICB9KS5iaW5kKHRoaXMpKTsKKyAgfQorfSk7CisKK0luc2VydGlvbi5Cb3R0
b20gPSBDbGFzcy5jcmVhdGUoKTsKK0luc2VydGlvbi5Cb3R0b20ucHJvdG90eXBlID0gT2JqZWN0
LmV4dGVuZChuZXcgQWJzdHJhY3QuSW5zZXJ0aW9uKCdiZWZvcmVFbmQnKSwgeworICBpbml0aWFs
aXplUmFuZ2U6IGZ1bmN0aW9uKCkgeworICAgIHRoaXMucmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRz
KHRoaXMuZWxlbWVudCk7CisgICAgdGhpcy5yYW5nZS5jb2xsYXBzZSh0aGlzLmVsZW1lbnQpOwor
ICB9LAorCisgIGluc2VydENvbnRlbnQ6IGZ1bmN0aW9uKGZyYWdtZW50cykgeworICAgIGZyYWdt
ZW50cy5lYWNoKChmdW5jdGlvbihmcmFnbWVudCkgeworICAgICAgdGhpcy5lbGVtZW50LmFwcGVu
ZENoaWxkKGZyYWdtZW50KTsKKyAgICB9KS5iaW5kKHRoaXMpKTsKKyAgfQorfSk7CisKK0luc2Vy
dGlvbi5BZnRlciA9IENsYXNzLmNyZWF0ZSgpOworSW5zZXJ0aW9uLkFmdGVyLnByb3RvdHlwZSA9
IE9iamVjdC5leHRlbmQobmV3IEFic3RyYWN0Lkluc2VydGlvbignYWZ0ZXJFbmQnKSwgeworICBp
bml0aWFsaXplUmFuZ2U6IGZ1bmN0aW9uKCkgeworICAgIHRoaXMucmFuZ2Uuc2V0U3RhcnRBZnRl
cih0aGlzLmVsZW1lbnQpOworICB9LAorCisgIGluc2VydENvbnRlbnQ6IGZ1bmN0aW9uKGZyYWdt
ZW50cykgeworICAgIGZyYWdtZW50cy5lYWNoKChmdW5jdGlvbihmcmFnbWVudCkgeworICAgICAg
dGhpcy5lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGZyYWdtZW50LAorICAgICAgICB0
aGlzLmVsZW1lbnQubmV4dFNpYmxpbmcpOworICAgIH0pLmJpbmQodGhpcykpOworICB9Cit9KTsK
KworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK0VsZW1lbnQuQ2xhc3NOYW1lcyA9IENsYXNzLmNy
ZWF0ZSgpOworRWxlbWVudC5DbGFzc05hbWVzLnByb3RvdHlwZSA9IHsKKyAgaW5pdGlhbGl6ZTog
ZnVuY3Rpb24oZWxlbWVudCkgeworICAgIHRoaXMuZWxlbWVudCA9ICQoZWxlbWVudCk7CisgIH0s
CisKKyAgX2VhY2g6IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CisgICAgdGhpcy5lbGVtZW50LmNsYXNz
TmFtZS5zcGxpdCgvXHMrLykuc2VsZWN0KGZ1bmN0aW9uKG5hbWUpIHsKKyAgICAgIHJldHVybiBu
YW1lLmxlbmd0aCA+IDA7CisgICAgfSkuX2VhY2goaXRlcmF0b3IpOworICB9LAorCisgIHNldDog
ZnVuY3Rpb24oY2xhc3NOYW1lKSB7CisgICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9IGNsYXNz
TmFtZTsKKyAgfSwKKworICBhZGQ6IGZ1bmN0aW9uKGNsYXNzTmFtZVRvQWRkKSB7CisgICAgaWYg
KHRoaXMuaW5jbHVkZShjbGFzc05hbWVUb0FkZCkpIHJldHVybjsKKyAgICB0aGlzLnNldCgkQSh0
aGlzKS5jb25jYXQoY2xhc3NOYW1lVG9BZGQpLmpvaW4oJyAnKSk7CisgIH0sCisKKyAgcmVtb3Zl
OiBmdW5jdGlvbihjbGFzc05hbWVUb1JlbW92ZSkgeworICAgIGlmICghdGhpcy5pbmNsdWRlKGNs
YXNzTmFtZVRvUmVtb3ZlKSkgcmV0dXJuOworICAgIHRoaXMuc2V0KCRBKHRoaXMpLndpdGhvdXQo
Y2xhc3NOYW1lVG9SZW1vdmUpLmpvaW4oJyAnKSk7CisgIH0sCisKKyAgdG9TdHJpbmc6IGZ1bmN0
aW9uKCkgeworICAgIHJldHVybiAkQSh0aGlzKS5qb2luKCcgJyk7CisgIH0KK307CisKK09iamVj
dC5leHRlbmQoRWxlbWVudC5DbGFzc05hbWVzLnByb3RvdHlwZSwgRW51bWVyYWJsZSk7Cit2YXIg
U2VsZWN0b3IgPSBDbGFzcy5jcmVhdGUoKTsKK1NlbGVjdG9yLnByb3RvdHlwZSA9IHsKKyAgaW5p
dGlhbGl6ZTogZnVuY3Rpb24oZXhwcmVzc2lvbikgeworICAgIHRoaXMucGFyYW1zID0ge2NsYXNz
TmFtZXM6IFtdfTsKKyAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uLnRvU3RyaW5nKCku
c3RyaXAoKTsKKyAgICB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOworICAgIHRoaXMuY29tcGlsZU1h
dGNoZXIoKTsKKyAgfSwKKworICBwYXJzZUV4cHJlc3Npb246IGZ1bmN0aW9uKCkgeworICAgIGZ1
bmN0aW9uIGFib3J0KG1lc3NhZ2UpIHsgdGhyb3cgJ1BhcnNlIGVycm9yIGluIHNlbGVjdG9yOiAn
ICsgbWVzc2FnZTsgfQorCisgICAgaWYgKHRoaXMuZXhwcmVzc2lvbiA9PSAnJykgIGFib3J0KCdl
bXB0eSBleHByZXNzaW9uJyk7CisKKyAgICB2YXIgcGFyYW1zID0gdGhpcy5wYXJhbXMsIGV4cHIg
PSB0aGlzLmV4cHJlc3Npb24sIG1hdGNoLCBtb2RpZmllciwgY2xhdXNlLCByZXN0OworICAgIHdo
aWxlIChtYXRjaCA9IGV4cHIubWF0Y2goL14oLiopXFsoW2EtejAtOV86LV0rPykoPzooW35cfCFd
Pz0pKD86IihbXiJdKikifChbXlxdXHNdKikpKT9cXSQvaSkpIHsKKyAgICAgIHBhcmFtcy5hdHRy
aWJ1dGVzID0gcGFyYW1zLmF0dHJpYnV0ZXMgfHwgW107CisgICAgICBwYXJhbXMuYXR0cmlidXRl
cy5wdXNoKHtuYW1lOiBtYXRjaFsyXSwgb3BlcmF0b3I6IG1hdGNoWzNdLCB2YWx1ZTogbWF0Y2hb
NF0gfHwgbWF0Y2hbNV0gfHwgJyd9KTsKKyAgICAgIGV4cHIgPSBtYXRjaFsxXTsKKyAgICB9CisK
KyAgICBpZiAoZXhwciA9PSAnKicpIHJldHVybiB0aGlzLnBhcmFtcy53aWxkY2FyZCA9IHRydWU7
CisKKyAgICB3aGlsZSAobWF0Y2ggPSBleHByLm1hdGNoKC9eKFteYS16MC05Xy1dKT8oW2EtejAt
OV8tXSspKC4qKS9pKSkgeworICAgICAgbW9kaWZpZXIgPSBtYXRjaFsxXSwgY2xhdXNlID0gbWF0
Y2hbMl0sIHJlc3QgPSBtYXRjaFszXTsKKyAgICAgIHN3aXRjaCAobW9kaWZpZXIpIHsKKyAgICAg
ICAgY2FzZSAnIyc6ICAgICAgIHBhcmFtcy5pZCA9IGNsYXVzZTsgYnJlYWs7CisgICAgICAgIGNh
c2UgJy4nOiAgICAgICBwYXJhbXMuY2xhc3NOYW1lcy5wdXNoKGNsYXVzZSk7IGJyZWFrOworICAg
ICAgICBjYXNlICcnOgorICAgICAgICBjYXNlIHVuZGVmaW5lZDogcGFyYW1zLnRhZ05hbWUgPSBj
bGF1c2UudG9VcHBlckNhc2UoKTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICBhYm9y
dChleHByLmluc3BlY3QoKSk7CisgICAgICB9CisgICAgICBleHByID0gcmVzdDsKKyAgICB9CisK
KyAgICBpZiAoZXhwci5sZW5ndGggPiAwKSBhYm9ydChleHByLmluc3BlY3QoKSk7CisgIH0sCisK
KyAgYnVpbGRNYXRjaEV4cHJlc3Npb246IGZ1bmN0aW9uKCkgeworICAgIHZhciBwYXJhbXMgPSB0
aGlzLnBhcmFtcywgY29uZGl0aW9ucyA9IFtdLCBjbGF1c2U7CisKKyAgICBpZiAocGFyYW1zLndp
bGRjYXJkKQorICAgICAgY29uZGl0aW9ucy5wdXNoKCd0cnVlJyk7CisgICAgaWYgKGNsYXVzZSA9
IHBhcmFtcy5pZCkKKyAgICAgIGNvbmRpdGlvbnMucHVzaCgnZWxlbWVudC5yZWFkQXR0cmlidXRl
KCJpZCIpID09ICcgKyBjbGF1c2UuaW5zcGVjdCgpKTsKKyAgICBpZiAoY2xhdXNlID0gcGFyYW1z
LnRhZ05hbWUpCisgICAgICBjb25kaXRpb25zLnB1c2goJ2VsZW1lbnQudGFnTmFtZS50b1VwcGVy
Q2FzZSgpID09ICcgKyBjbGF1c2UuaW5zcGVjdCgpKTsKKyAgICBpZiAoKGNsYXVzZSA9IHBhcmFt
cy5jbGFzc05hbWVzKS5sZW5ndGggPiAwKQorICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9
IGNsYXVzZS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykKKyAgICAgICAgY29uZGl0aW9ucy5wdXNo
KCdlbGVtZW50Lmhhc0NsYXNzTmFtZSgnICsgY2xhdXNlW2ldLmluc3BlY3QoKSArICcpJyk7Cisg
ICAgaWYgKGNsYXVzZSA9IHBhcmFtcy5hdHRyaWJ1dGVzKSB7CisgICAgICBjbGF1c2UuZWFjaChm
dW5jdGlvbihhdHRyaWJ1dGUpIHsKKyAgICAgICAgdmFyIHZhbHVlID0gJ2VsZW1lbnQucmVhZEF0
dHJpYnV0ZSgnICsgYXR0cmlidXRlLm5hbWUuaW5zcGVjdCgpICsgJyknOworICAgICAgICB2YXIg
c3BsaXRWYWx1ZUJ5ID0gZnVuY3Rpb24oZGVsaW1pdGVyKSB7CisgICAgICAgICAgcmV0dXJuIHZh
bHVlICsgJyAmJiAnICsgdmFsdWUgKyAnLnNwbGl0KCcgKyBkZWxpbWl0ZXIuaW5zcGVjdCgpICsg
JyknOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGUub3BlcmF0b3IpIHsK
KyAgICAgICAgICBjYXNlICc9JzogICAgICAgY29uZGl0aW9ucy5wdXNoKHZhbHVlICsgJyA9PSAn
ICsgYXR0cmlidXRlLnZhbHVlLmluc3BlY3QoKSk7IGJyZWFrOworICAgICAgICAgIGNhc2UgJ349
JzogICAgICBjb25kaXRpb25zLnB1c2goc3BsaXRWYWx1ZUJ5KCcgJykgKyAnLmluY2x1ZGUoJyAr
IGF0dHJpYnV0ZS52YWx1ZS5pbnNwZWN0KCkgKyAnKScpOyBicmVhazsKKyAgICAgICAgICBjYXNl
ICd8PSc6ICAgICAgY29uZGl0aW9ucy5wdXNoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNwbGl0VmFsdWVCeSgnLScpICsgJy5maXJzdCgpLnRvVXBwZXJDYXNlKCkgPT0gJyArIGF0dHJp
YnV0ZS52YWx1ZS50b1VwcGVyQ2FzZSgpLmluc3BlY3QoKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICApOyBicmVhazsKKyAgICAgICAgICBjYXNlICchPSc6ICAgICAgY29uZGl0aW9ucy5wdXNo
KHZhbHVlICsgJyAhPSAnICsgYXR0cmlidXRlLnZhbHVlLmluc3BlY3QoKSk7IGJyZWFrOworICAg
ICAgICAgIGNhc2UgJyc6CisgICAgICAgICAgY2FzZSB1bmRlZmluZWQ6IGNvbmRpdGlvbnMucHVz
aCgnZWxlbWVudC5oYXNBdHRyaWJ1dGUoJyArIGF0dHJpYnV0ZS5uYW1lLmluc3BlY3QoKSArICcp
Jyk7IGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICB0aHJvdyAnVW5rbm93biBvcGVy
YXRvciAnICsgYXR0cmlidXRlLm9wZXJhdG9yICsgJyBpbiBzZWxlY3Rvcic7CisgICAgICAgIH0K
KyAgICAgIH0pOworICAgIH0KKworICAgIHJldHVybiBjb25kaXRpb25zLmpvaW4oJyAmJiAnKTsK
KyAgfSwKKworICBjb21waWxlTWF0Y2hlcjogZnVuY3Rpb24oKSB7CisgICAgdGhpcy5tYXRjaCA9
IG5ldyBGdW5jdGlvbignZWxlbWVudCcsICdpZiAoIWVsZW1lbnQudGFnTmFtZSkgcmV0dXJuIGZh
bHNlOyBcCisgICAgICBlbGVtZW50ID0gJChlbGVtZW50KTsgXAorICAgICAgcmV0dXJuICcgKyB0
aGlzLmJ1aWxkTWF0Y2hFeHByZXNzaW9uKCkpOworICB9LAorCisgIGZpbmRFbGVtZW50czogZnVu
Y3Rpb24oc2NvcGUpIHsKKyAgICB2YXIgZWxlbWVudDsKKworICAgIGlmIChlbGVtZW50ID0gJCh0
aGlzLnBhcmFtcy5pZCkpCisgICAgICBpZiAodGhpcy5tYXRjaChlbGVtZW50KSkKKyAgICAgICAg
aWYgKCFzY29wZSB8fCBFbGVtZW50LmNoaWxkT2YoZWxlbWVudCwgc2NvcGUpKQorICAgICAgICAg
IHJldHVybiBbZWxlbWVudF07CisKKyAgICBzY29wZSA9IChzY29wZSB8fCBkb2N1bWVudCkuZ2V0
RWxlbWVudHNCeVRhZ05hbWUodGhpcy5wYXJhbXMudGFnTmFtZSB8fCAnKicpOworCisgICAgdmFy
IHJlc3VsdHMgPSBbXTsKKyAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gc2NvcGUubGVuZ3Ro
OyBpIDwgbGVuZ3RoOyBpKyspCisgICAgICBpZiAodGhpcy5tYXRjaChlbGVtZW50ID0gc2NvcGVb
aV0pKQorICAgICAgICByZXN1bHRzLnB1c2goRWxlbWVudC5leHRlbmQoZWxlbWVudCkpOworCisg
ICAgcmV0dXJuIHJlc3VsdHM7CisgIH0sCisKKyAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkgeworICAg
IHJldHVybiB0aGlzLmV4cHJlc3Npb247CisgIH0KK30KKworT2JqZWN0LmV4dGVuZChTZWxlY3Rv
ciwgeworICBtYXRjaEVsZW1lbnRzOiBmdW5jdGlvbihlbGVtZW50cywgZXhwcmVzc2lvbikgewor
ICAgIHZhciBzZWxlY3RvciA9IG5ldyBTZWxlY3RvcihleHByZXNzaW9uKTsKKyAgICByZXR1cm4g
ZWxlbWVudHMuc2VsZWN0KHNlbGVjdG9yLm1hdGNoLmJpbmQoc2VsZWN0b3IpKS5tYXAoRWxlbWVu
dC5leHRlbmQpOworICB9LAorCisgIGZpbmRFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50cywgZXhw
cmVzc2lvbiwgaW5kZXgpIHsKKyAgICBpZiAodHlwZW9mIGV4cHJlc3Npb24gPT0gJ251bWJlcicp
IGluZGV4ID0gZXhwcmVzc2lvbiwgZXhwcmVzc2lvbiA9IGZhbHNlOworICAgIHJldHVybiBTZWxl
Y3Rvci5tYXRjaEVsZW1lbnRzKGVsZW1lbnRzLCBleHByZXNzaW9uIHx8ICcqJylbaW5kZXggfHwg
MF07CisgIH0sCisKKyAgZmluZENoaWxkRWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnQsIGV4cHJl
c3Npb25zKSB7CisgICAgcmV0dXJuIGV4cHJlc3Npb25zLm1hcChmdW5jdGlvbihleHByZXNzaW9u
KSB7CisgICAgICByZXR1cm4gZXhwcmVzc2lvbi5tYXRjaCgvW15ccyJdKyg/OiJbXiJdKiJbXlxz
Il0rKSovZykuaW5qZWN0KFtudWxsXSwgZnVuY3Rpb24ocmVzdWx0cywgZXhwcikgeworICAgICAg
ICB2YXIgc2VsZWN0b3IgPSBuZXcgU2VsZWN0b3IoZXhwcik7CisgICAgICAgIHJldHVybiByZXN1
bHRzLmluamVjdChbXSwgZnVuY3Rpb24oZWxlbWVudHMsIHJlc3VsdCkgeworICAgICAgICAgIHJl
dHVybiBlbGVtZW50cy5jb25jYXQoc2VsZWN0b3IuZmluZEVsZW1lbnRzKHJlc3VsdCB8fCBlbGVt
ZW50KSk7CisgICAgICAgIH0pOworICAgICAgfSk7CisgICAgfSkuZmxhdHRlbigpOworICB9Cit9
KTsKKworZnVuY3Rpb24gJCQoKSB7CisgIHJldHVybiBTZWxlY3Rvci5maW5kQ2hpbGRFbGVtZW50
cyhkb2N1bWVudCwgJEEoYXJndW1lbnRzKSk7Cit9Cit2YXIgRm9ybSA9IHsKKyAgcmVzZXQ6IGZ1
bmN0aW9uKGZvcm0pIHsKKyAgICAkKGZvcm0pLnJlc2V0KCk7CisgICAgcmV0dXJuIGZvcm07Cisg
IH0sCisKKyAgc2VyaWFsaXplRWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnRzLCBnZXRIYXNoKSB7
CisgICAgdmFyIGRhdGEgPSBlbGVtZW50cy5pbmplY3Qoe30sIGZ1bmN0aW9uKHJlc3VsdCwgZWxl
bWVudCkgeworICAgICAgaWYgKCFlbGVtZW50LmRpc2FibGVkICYmIGVsZW1lbnQubmFtZSkgewor
ICAgICAgICB2YXIga2V5ID0gZWxlbWVudC5uYW1lLCB2YWx1ZSA9ICQoZWxlbWVudCkuZ2V0VmFs
dWUoKTsKKyAgICAgICAgaWYgKHZhbHVlICE9IHVuZGVmaW5lZCkgeworICAgICAgICAgIGlmIChy
ZXN1bHRba2V5XSkgeworICAgICAgICAgICAgaWYgKHJlc3VsdFtrZXldLmNvbnN0cnVjdG9yICE9
IEFycmF5KSByZXN1bHRba2V5XSA9IFtyZXN1bHRba2V5XV07CisgICAgICAgICAgICByZXN1bHRb
a2V5XS5wdXNoKHZhbHVlKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSByZXN1bHRba2V5
XSA9IHZhbHVlOworICAgICAgICB9CisgICAgICB9CisgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0pOworCisgICAgcmV0dXJuIGdldEhhc2ggPyBkYXRhIDogSGFzaC50b1F1ZXJ5U3RyaW5nKGRh
dGEpOworICB9Cit9OworCitGb3JtLk1ldGhvZHMgPSB7CisgIHNlcmlhbGl6ZTogZnVuY3Rpb24o
Zm9ybSwgZ2V0SGFzaCkgeworICAgIHJldHVybiBGb3JtLnNlcmlhbGl6ZUVsZW1lbnRzKEZvcm0u
Z2V0RWxlbWVudHMoZm9ybSksIGdldEhhc2gpOworICB9LAorCisgIGdldEVsZW1lbnRzOiBmdW5j
dGlvbihmb3JtKSB7CisgICAgcmV0dXJuICRBKCQoZm9ybSkuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
JyonKSkuaW5qZWN0KFtdLAorICAgICAgZnVuY3Rpb24oZWxlbWVudHMsIGNoaWxkKSB7CisgICAg
ICAgIGlmIChGb3JtLkVsZW1lbnQuU2VyaWFsaXplcnNbY2hpbGQudGFnTmFtZS50b0xvd2VyQ2Fz
ZSgpXSkKKyAgICAgICAgICBlbGVtZW50cy5wdXNoKEVsZW1lbnQuZXh0ZW5kKGNoaWxkKSk7Cisg
ICAgICAgIHJldHVybiBlbGVtZW50czsKKyAgICAgIH0KKyAgICApOworICB9LAorCisgIGdldElu
cHV0czogZnVuY3Rpb24oZm9ybSwgdHlwZU5hbWUsIG5hbWUpIHsKKyAgICBmb3JtID0gJChmb3Jt
KTsKKyAgICB2YXIgaW5wdXRzID0gZm9ybS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKTsK
KworICAgIGlmICghdHlwZU5hbWUgJiYgIW5hbWUpIHJldHVybiAkQShpbnB1dHMpLm1hcChFbGVt
ZW50LmV4dGVuZCk7CisKKyAgICBmb3IgKHZhciBpID0gMCwgbWF0Y2hpbmdJbnB1dHMgPSBbXSwg
bGVuZ3RoID0gaW5wdXRzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICB2YXIgaW5w
dXQgPSBpbnB1dHNbaV07CisgICAgICBpZiAoKHR5cGVOYW1lICYmIGlucHV0LnR5cGUgIT0gdHlw
ZU5hbWUpIHx8IChuYW1lICYmIGlucHV0Lm5hbWUgIT0gbmFtZSkpCisgICAgICAgIGNvbnRpbnVl
OworICAgICAgbWF0Y2hpbmdJbnB1dHMucHVzaChFbGVtZW50LmV4dGVuZChpbnB1dCkpOworICAg
IH0KKworICAgIHJldHVybiBtYXRjaGluZ0lucHV0czsKKyAgfSwKKworICBkaXNhYmxlOiBmdW5j
dGlvbihmb3JtKSB7CisgICAgZm9ybSA9ICQoZm9ybSk7CisgICAgZm9ybS5nZXRFbGVtZW50cygp
LmVhY2goZnVuY3Rpb24oZWxlbWVudCkgeworICAgICAgZWxlbWVudC5ibHVyKCk7CisgICAgICBl
bGVtZW50LmRpc2FibGVkID0gJ3RydWUnOworICAgIH0pOworICAgIHJldHVybiBmb3JtOworICB9
LAorCisgIGVuYWJsZTogZnVuY3Rpb24oZm9ybSkgeworICAgIGZvcm0gPSAkKGZvcm0pOworICAg
IGZvcm0uZ2V0RWxlbWVudHMoKS5lYWNoKGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICAgIGVsZW1l
bnQuZGlzYWJsZWQgPSAnJzsKKyAgICB9KTsKKyAgICByZXR1cm4gZm9ybTsKKyAgfSwKKworICBm
aW5kRmlyc3RFbGVtZW50OiBmdW5jdGlvbihmb3JtKSB7CisgICAgcmV0dXJuICQoZm9ybSkuZ2V0
RWxlbWVudHMoKS5maW5kKGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICAgIHJldHVybiBlbGVtZW50
LnR5cGUgIT0gJ2hpZGRlbicgJiYgIWVsZW1lbnQuZGlzYWJsZWQgJiYKKyAgICAgICAgWydpbnB1
dCcsICdzZWxlY3QnLCAndGV4dGFyZWEnXS5pbmNsdWRlKGVsZW1lbnQudGFnTmFtZS50b0xvd2Vy
Q2FzZSgpKTsKKyAgICB9KTsKKyAgfSwKKworICBmb2N1c0ZpcnN0RWxlbWVudDogZnVuY3Rpb24o
Zm9ybSkgeworICAgIGZvcm0gPSAkKGZvcm0pOworICAgIGZvcm0uZmluZEZpcnN0RWxlbWVudCgp
LmFjdGl2YXRlKCk7CisgICAgcmV0dXJuIGZvcm07CisgIH0KK30KKworT2JqZWN0LmV4dGVuZChG
b3JtLCBGb3JtLk1ldGhvZHMpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworRm9ybS5FbGVt
ZW50ID0geworICBmb2N1czogZnVuY3Rpb24oZWxlbWVudCkgeworICAgICQoZWxlbWVudCkuZm9j
dXMoKTsKKyAgICByZXR1cm4gZWxlbWVudDsKKyAgfSwKKworICBzZWxlY3Q6IGZ1bmN0aW9uKGVs
ZW1lbnQpIHsKKyAgICAkKGVsZW1lbnQpLnNlbGVjdCgpOworICAgIHJldHVybiBlbGVtZW50Owor
ICB9Cit9CisKK0Zvcm0uRWxlbWVudC5NZXRob2RzID0geworICBzZXJpYWxpemU6IGZ1bmN0aW9u
KGVsZW1lbnQpIHsKKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKyAgICBpZiAoIWVsZW1lbnQu
ZGlzYWJsZWQgJiYgZWxlbWVudC5uYW1lKSB7CisgICAgICB2YXIgdmFsdWUgPSBlbGVtZW50Lmdl
dFZhbHVlKCk7CisgICAgICBpZiAodmFsdWUgIT0gdW5kZWZpbmVkKSB7CisgICAgICAgIHZhciBw
YWlyID0ge307CisgICAgICAgIHBhaXJbZWxlbWVudC5uYW1lXSA9IHZhbHVlOworICAgICAgICBy
ZXR1cm4gSGFzaC50b1F1ZXJ5U3RyaW5nKHBhaXIpOworICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gJyc7CisgIH0sCisKKyAgZ2V0VmFsdWU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICBlbGVt
ZW50ID0gJChlbGVtZW50KTsKKyAgICB2YXIgbWV0aG9kID0gZWxlbWVudC50YWdOYW1lLnRvTG93
ZXJDYXNlKCk7CisgICAgcmV0dXJuIEZvcm0uRWxlbWVudC5TZXJpYWxpemVyc1ttZXRob2RdKGVs
ZW1lbnQpOworICB9LAorCisgIGNsZWFyOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgJChlbGVt
ZW50KS52YWx1ZSA9ICcnOworICAgIHJldHVybiBlbGVtZW50OworICB9LAorCisgIHByZXNlbnQ6
IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICByZXR1cm4gJChlbGVtZW50KS52YWx1ZSAhPSAnJzsK
KyAgfSwKKworICBhY3RpdmF0ZTogZnVuY3Rpb24oZWxlbWVudCkgeworICAgIGVsZW1lbnQgPSAk
KGVsZW1lbnQpOworICAgIGVsZW1lbnQuZm9jdXMoKTsKKyAgICBpZiAoZWxlbWVudC5zZWxlY3Qg
JiYgKCBlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPSAnaW5wdXQnIHx8CisgICAgICAh
WydidXR0b24nLCAncmVzZXQnLCAnc3VibWl0J10uaW5jbHVkZShlbGVtZW50LnR5cGUpICkgKQor
ICAgICAgZWxlbWVudC5zZWxlY3QoKTsKKyAgICByZXR1cm4gZWxlbWVudDsKKyAgfSwKKworICBk
aXNhYmxlOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7Cisg
ICAgZWxlbWVudC5kaXNhYmxlZCA9IHRydWU7CisgICAgcmV0dXJuIGVsZW1lbnQ7CisgIH0sCisK
KyAgZW5hYmxlOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7
CisgICAgZWxlbWVudC5ibHVyKCk7CisgICAgZWxlbWVudC5kaXNhYmxlZCA9IGZhbHNlOworICAg
IHJldHVybiBlbGVtZW50OworICB9Cit9CisKK09iamVjdC5leHRlbmQoRm9ybS5FbGVtZW50LCBG
b3JtLkVsZW1lbnQuTWV0aG9kcyk7Cit2YXIgRmllbGQgPSBGb3JtLkVsZW1lbnQ7Cit2YXIgJEYg
PSBGb3JtLkVsZW1lbnQuZ2V0VmFsdWU7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitGb3Jt
LkVsZW1lbnQuU2VyaWFsaXplcnMgPSB7CisgIGlucHV0OiBmdW5jdGlvbihlbGVtZW50KSB7Cisg
ICAgc3dpdGNoIChlbGVtZW50LnR5cGUudG9Mb3dlckNhc2UoKSkgeworICAgICAgY2FzZSAnY2hl
Y2tib3gnOgorICAgICAgY2FzZSAncmFkaW8nOgorICAgICAgICByZXR1cm4gRm9ybS5FbGVtZW50
LlNlcmlhbGl6ZXJzLmlucHV0U2VsZWN0b3IoZWxlbWVudCk7CisgICAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gRm9ybS5FbGVtZW50LlNlcmlhbGl6ZXJzLnRleHRhcmVhKGVsZW1lbnQpOwor
ICAgIH0KKyAgfSwKKworICBpbnB1dFNlbGVjdG9yOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAg
cmV0dXJuIGVsZW1lbnQuY2hlY2tlZCA/IGVsZW1lbnQudmFsdWUgOiBudWxsOworICB9LAorCisg
IHRleHRhcmVhOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgcmV0dXJuIGVsZW1lbnQudmFsdWU7
CisgIH0sCisKKyAgc2VsZWN0OiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgcmV0dXJuIHRoaXNb
ZWxlbWVudC50eXBlID09ICdzZWxlY3Qtb25lJyA/CisgICAgICAnc2VsZWN0T25lJyA6ICdzZWxl
Y3RNYW55J10oZWxlbWVudCk7CisgIH0sCisKKyAgc2VsZWN0T25lOiBmdW5jdGlvbihlbGVtZW50
KSB7CisgICAgdmFyIGluZGV4ID0gZWxlbWVudC5zZWxlY3RlZEluZGV4OworICAgIHJldHVybiBp
bmRleCA+PSAwID8gdGhpcy5vcHRpb25WYWx1ZShlbGVtZW50Lm9wdGlvbnNbaW5kZXhdKSA6IG51
bGw7CisgIH0sCisKKyAgc2VsZWN0TWFueTogZnVuY3Rpb24oZWxlbWVudCkgeworICAgIHZhciB2
YWx1ZXMsIGxlbmd0aCA9IGVsZW1lbnQubGVuZ3RoOworICAgIGlmICghbGVuZ3RoKSByZXR1cm4g
bnVsbDsKKworICAgIGZvciAodmFyIGkgPSAwLCB2YWx1ZXMgPSBbXTsgaSA8IGxlbmd0aDsgaSsr
KSB7CisgICAgICB2YXIgb3B0ID0gZWxlbWVudC5vcHRpb25zW2ldOworICAgICAgaWYgKG9wdC5z
ZWxlY3RlZCkgdmFsdWVzLnB1c2godGhpcy5vcHRpb25WYWx1ZShvcHQpKTsKKyAgICB9CisgICAg
cmV0dXJuIHZhbHVlczsKKyAgfSwKKworICBvcHRpb25WYWx1ZTogZnVuY3Rpb24ob3B0KSB7Cisg
ICAgLy8gZXh0ZW5kIGVsZW1lbnQgYmVjYXVzZSBoYXNBdHRyaWJ1dGUgbWF5IG5vdCBiZSBuYXRp
dmUKKyAgICByZXR1cm4gRWxlbWVudC5leHRlbmQob3B0KS5oYXNBdHRyaWJ1dGUoJ3ZhbHVlJykg
PyBvcHQudmFsdWUgOiBvcHQudGV4dDsKKyAgfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
KworQWJzdHJhY3QuVGltZWRPYnNlcnZlciA9IGZ1bmN0aW9uKCkge30KK0Fic3RyYWN0LlRpbWVk
T2JzZXJ2ZXIucHJvdG90eXBlID0geworICBpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50LCBm
cmVxdWVuY3ksIGNhbGxiYWNrKSB7CisgICAgdGhpcy5mcmVxdWVuY3kgPSBmcmVxdWVuY3k7Cisg
ICAgdGhpcy5lbGVtZW50ICAgPSAkKGVsZW1lbnQpOworICAgIHRoaXMuY2FsbGJhY2sgID0gY2Fs
bGJhY2s7CisKKyAgICB0aGlzLmxhc3RWYWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTsKKyAgICB0aGlz
LnJlZ2lzdGVyQ2FsbGJhY2soKTsKKyAgfSwKKworICByZWdpc3RlckNhbGxiYWNrOiBmdW5jdGlv
bigpIHsKKyAgICBzZXRJbnRlcnZhbCh0aGlzLm9uVGltZXJFdmVudC5iaW5kKHRoaXMpLCB0aGlz
LmZyZXF1ZW5jeSAqIDEwMDApOworICB9LAorCisgIG9uVGltZXJFdmVudDogZnVuY3Rpb24oKSB7
CisgICAgdmFyIHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpOworICAgIHZhciBjaGFuZ2VkID0gKCdz
dHJpbmcnID09IHR5cGVvZiB0aGlzLmxhc3RWYWx1ZSAmJiAnc3RyaW5nJyA9PSB0eXBlb2YgdmFs
dWUKKyAgICAgID8gdGhpcy5sYXN0VmFsdWUgIT0gdmFsdWUgOiBTdHJpbmcodGhpcy5sYXN0VmFs
dWUpICE9IFN0cmluZyh2YWx1ZSkpOworICAgIGlmIChjaGFuZ2VkKSB7CisgICAgICB0aGlzLmNh
bGxiYWNrKHRoaXMuZWxlbWVudCwgdmFsdWUpOworICAgICAgdGhpcy5sYXN0VmFsdWUgPSB2YWx1
ZTsKKyAgICB9CisgIH0KK30KKworRm9ybS5FbGVtZW50Lk9ic2VydmVyID0gQ2xhc3MuY3JlYXRl
KCk7CitGb3JtLkVsZW1lbnQuT2JzZXJ2ZXIucHJvdG90eXBlID0gT2JqZWN0LmV4dGVuZChuZXcg
QWJzdHJhY3QuVGltZWRPYnNlcnZlcigpLCB7CisgIGdldFZhbHVlOiBmdW5jdGlvbigpIHsKKyAg
ICByZXR1cm4gRm9ybS5FbGVtZW50LmdldFZhbHVlKHRoaXMuZWxlbWVudCk7CisgIH0KK30pOwor
CitGb3JtLk9ic2VydmVyID0gQ2xhc3MuY3JlYXRlKCk7CitGb3JtLk9ic2VydmVyLnByb3RvdHlw
ZSA9IE9iamVjdC5leHRlbmQobmV3IEFic3RyYWN0LlRpbWVkT2JzZXJ2ZXIoKSwgeworICBnZXRW
YWx1ZTogZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIEZvcm0uc2VyaWFsaXplKHRoaXMuZWxlbWVu
dCk7CisgIH0KK30pOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworQWJzdHJhY3QuRXZlbnRP
YnNlcnZlciA9IGZ1bmN0aW9uKCkge30KK0Fic3RyYWN0LkV2ZW50T2JzZXJ2ZXIucHJvdG90eXBl
ID0geworICBpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50LCBjYWxsYmFjaykgeworICAgIHRo
aXMuZWxlbWVudCAgPSAkKGVsZW1lbnQpOworICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjazsK
KworICAgIHRoaXMubGFzdFZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpOworICAgIGlmICh0aGlzLmVs
ZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICdmb3JtJykKKyAgICAgIHRoaXMucmVnaXN0
ZXJGb3JtQ2FsbGJhY2tzKCk7CisgICAgZWxzZQorICAgICAgdGhpcy5yZWdpc3RlckNhbGxiYWNr
KHRoaXMuZWxlbWVudCk7CisgIH0sCisKKyAgb25FbGVtZW50RXZlbnQ6IGZ1bmN0aW9uKCkgewor
ICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTsKKyAgICBpZiAodGhpcy5sYXN0VmFsdWUg
IT0gdmFsdWUpIHsKKyAgICAgIHRoaXMuY2FsbGJhY2sodGhpcy5lbGVtZW50LCB2YWx1ZSk7Cisg
ICAgICB0aGlzLmxhc3RWYWx1ZSA9IHZhbHVlOworICAgIH0KKyAgfSwKKworICByZWdpc3RlckZv
cm1DYWxsYmFja3M6IGZ1bmN0aW9uKCkgeworICAgIEZvcm0uZ2V0RWxlbWVudHModGhpcy5lbGVt
ZW50KS5lYWNoKHRoaXMucmVnaXN0ZXJDYWxsYmFjay5iaW5kKHRoaXMpKTsKKyAgfSwKKworICBy
ZWdpc3RlckNhbGxiYWNrOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgaWYgKGVsZW1lbnQudHlw
ZSkgeworICAgICAgc3dpdGNoIChlbGVtZW50LnR5cGUudG9Mb3dlckNhc2UoKSkgeworICAgICAg
ICBjYXNlICdjaGVja2JveCc6CisgICAgICAgIGNhc2UgJ3JhZGlvJzoKKyAgICAgICAgICBFdmVu
dC5vYnNlcnZlKGVsZW1lbnQsICdjbGljaycsIHRoaXMub25FbGVtZW50RXZlbnQuYmluZCh0aGlz
KSk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgRXZlbnQu
b2JzZXJ2ZShlbGVtZW50LCAnY2hhbmdlJywgdGhpcy5vbkVsZW1lbnRFdmVudC5iaW5kKHRoaXMp
KTsKKyAgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworRm9ybS5FbGVt
ZW50LkV2ZW50T2JzZXJ2ZXIgPSBDbGFzcy5jcmVhdGUoKTsKK0Zvcm0uRWxlbWVudC5FdmVudE9i
c2VydmVyLnByb3RvdHlwZSA9IE9iamVjdC5leHRlbmQobmV3IEFic3RyYWN0LkV2ZW50T2JzZXJ2
ZXIoKSwgeworICBnZXRWYWx1ZTogZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIEZvcm0uRWxlbWVu
dC5nZXRWYWx1ZSh0aGlzLmVsZW1lbnQpOworICB9Cit9KTsKKworRm9ybS5FdmVudE9ic2VydmVy
ID0gQ2xhc3MuY3JlYXRlKCk7CitGb3JtLkV2ZW50T2JzZXJ2ZXIucHJvdG90eXBlID0gT2JqZWN0
LmV4dGVuZChuZXcgQWJzdHJhY3QuRXZlbnRPYnNlcnZlcigpLCB7CisgIGdldFZhbHVlOiBmdW5j
dGlvbigpIHsKKyAgICByZXR1cm4gRm9ybS5zZXJpYWxpemUodGhpcy5lbGVtZW50KTsKKyAgfQor
fSk7CitpZiAoIXdpbmRvdy5FdmVudCkgeworICB2YXIgRXZlbnQgPSBuZXcgT2JqZWN0KCk7Cit9
CisKK09iamVjdC5leHRlbmQoRXZlbnQsIHsKKyAgS0VZX0JBQ0tTUEFDRTogOCwKKyAgS0VZX1RB
QjogICAgICAgOSwKKyAgS0VZX1JFVFVSTjogICAxMywKKyAgS0VZX0VTQzogICAgICAyNywKKyAg
S0VZX0xFRlQ6ICAgICAzNywKKyAgS0VZX1VQOiAgICAgICAzOCwKKyAgS0VZX1JJR0hUOiAgICAz
OSwKKyAgS0VZX0RPV046ICAgICA0MCwKKyAgS0VZX0RFTEVURTogICA0NiwKKyAgS0VZX0hPTUU6
ICAgICAzNiwKKyAgS0VZX0VORDogICAgICAzNSwKKyAgS0VZX1BBR0VVUDogICAzMywKKyAgS0VZ
X1BBR0VET1dOOiAzNCwKKworICBlbGVtZW50OiBmdW5jdGlvbihldmVudCkgeworICAgIHJldHVy
biBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudDsKKyAgfSwKKworICBpc0xlZnRDbGlj
azogZnVuY3Rpb24oZXZlbnQpIHsKKyAgICByZXR1cm4gKCgoZXZlbnQud2hpY2gpICYmIChldmVu
dC53aGljaCA9PSAxKSkgfHwKKyAgICAgICAgICAgICgoZXZlbnQuYnV0dG9uKSAmJiAoZXZlbnQu
YnV0dG9uID09IDEpKSk7CisgIH0sCisKKyAgcG9pbnRlclg6IGZ1bmN0aW9uKGV2ZW50KSB7Cisg
ICAgcmV0dXJuIGV2ZW50LnBhZ2VYIHx8IChldmVudC5jbGllbnRYICsKKyAgICAgIChkb2N1bWVu
dC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQp
KTsKKyAgfSwKKworICBwb2ludGVyWTogZnVuY3Rpb24oZXZlbnQpIHsKKyAgICByZXR1cm4gZXZl
bnQucGFnZVkgfHwgKGV2ZW50LmNsaWVudFkgKworICAgICAgKGRvY3VtZW50LmRvY3VtZW50RWxl
bWVudC5zY3JvbGxUb3AgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApKTsKKyAgfSwKKworICBz
dG9wOiBmdW5jdGlvbihldmVudCkgeworICAgIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkgewor
ICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlv
bigpOworICAgIH0gZWxzZSB7CisgICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlOworICAg
ICAgZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTsKKyAgICB9CisgIH0sCisKKyAgLy8gZmluZCB0
aGUgZmlyc3Qgbm9kZSB3aXRoIHRoZSBnaXZlbiB0YWdOYW1lLCBzdGFydGluZyBmcm9tIHRoZQor
ICAvLyBub2RlIHRoZSBldmVudCB3YXMgdHJpZ2dlcmVkIG9uOyB0cmF2ZXJzZXMgdGhlIERPTSB1
cHdhcmRzCisgIGZpbmRFbGVtZW50OiBmdW5jdGlvbihldmVudCwgdGFnTmFtZSkgeworICAgIHZh
ciBlbGVtZW50ID0gRXZlbnQuZWxlbWVudChldmVudCk7CisgICAgd2hpbGUgKGVsZW1lbnQucGFy
ZW50Tm9kZSAmJiAoIWVsZW1lbnQudGFnTmFtZSB8fAorICAgICAgICAoZWxlbWVudC50YWdOYW1l
LnRvVXBwZXJDYXNlKCkgIT0gdGFnTmFtZS50b1VwcGVyQ2FzZSgpKSkpCisgICAgICBlbGVtZW50
ID0gZWxlbWVudC5wYXJlbnROb2RlOworICAgIHJldHVybiBlbGVtZW50OworICB9LAorCisgIG9i
c2VydmVyczogZmFsc2UsCisKKyAgX29ic2VydmVBbmRDYWNoZTogZnVuY3Rpb24oZWxlbWVudCwg
bmFtZSwgb2JzZXJ2ZXIsIHVzZUNhcHR1cmUpIHsKKyAgICBpZiAoIXRoaXMub2JzZXJ2ZXJzKSB0
aGlzLm9ic2VydmVycyA9IFtdOworICAgIGlmIChlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsK
KyAgICAgIHRoaXMub2JzZXJ2ZXJzLnB1c2goW2VsZW1lbnQsIG5hbWUsIG9ic2VydmVyLCB1c2VD
YXB0dXJlXSk7CisgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIobmFtZSwgb2JzZXJ2ZXIs
IHVzZUNhcHR1cmUpOworICAgIH0gZWxzZSBpZiAoZWxlbWVudC5hdHRhY2hFdmVudCkgeworICAg
ICAgdGhpcy5vYnNlcnZlcnMucHVzaChbZWxlbWVudCwgbmFtZSwgb2JzZXJ2ZXIsIHVzZUNhcHR1
cmVdKTsKKyAgICAgIGVsZW1lbnQuYXR0YWNoRXZlbnQoJ29uJyArIG5hbWUsIG9ic2VydmVyKTsK
KyAgICB9CisgIH0sCisKKyAgdW5sb2FkQ2FjaGU6IGZ1bmN0aW9uKCkgeworICAgIGlmICghRXZl
bnQub2JzZXJ2ZXJzKSByZXR1cm47CisgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IEV2ZW50
Lm9ic2VydmVycy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgRXZlbnQuc3RvcE9i
c2VydmluZy5hcHBseSh0aGlzLCBFdmVudC5vYnNlcnZlcnNbaV0pOworICAgICAgRXZlbnQub2Jz
ZXJ2ZXJzW2ldWzBdID0gbnVsbDsKKyAgICB9CisgICAgRXZlbnQub2JzZXJ2ZXJzID0gZmFsc2U7
CisgIH0sCisKKyAgb2JzZXJ2ZTogZnVuY3Rpb24oZWxlbWVudCwgbmFtZSwgb2JzZXJ2ZXIsIHVz
ZUNhcHR1cmUpIHsKKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKyAgICB1c2VDYXB0dXJlID0g
dXNlQ2FwdHVyZSB8fCBmYWxzZTsKKworICAgIGlmIChuYW1lID09ICdrZXlwcmVzcycgJiYKKyAg
ICAgICAgKG5hdmlnYXRvci5hcHBWZXJzaW9uLm1hdGNoKC9Lb25xdWVyb3J8U2FmYXJpfEtIVE1M
LykKKyAgICAgICAgfHwgZWxlbWVudC5hdHRhY2hFdmVudCkpCisgICAgICBuYW1lID0gJ2tleWRv
d24nOworCisgICAgRXZlbnQuX29ic2VydmVBbmRDYWNoZShlbGVtZW50LCBuYW1lLCBvYnNlcnZl
ciwgdXNlQ2FwdHVyZSk7CisgIH0sCisKKyAgc3RvcE9ic2VydmluZzogZnVuY3Rpb24oZWxlbWVu
dCwgbmFtZSwgb2JzZXJ2ZXIsIHVzZUNhcHR1cmUpIHsKKyAgICBlbGVtZW50ID0gJChlbGVtZW50
KTsKKyAgICB1c2VDYXB0dXJlID0gdXNlQ2FwdHVyZSB8fCBmYWxzZTsKKworICAgIGlmIChuYW1l
ID09ICdrZXlwcmVzcycgJiYKKyAgICAgICAgKG5hdmlnYXRvci5hcHBWZXJzaW9uLm1hdGNoKC9L
b25xdWVyb3J8U2FmYXJpfEtIVE1MLykKKyAgICAgICAgfHwgZWxlbWVudC5kZXRhY2hFdmVudCkp
CisgICAgICBuYW1lID0gJ2tleWRvd24nOworCisgICAgaWYgKGVsZW1lbnQucmVtb3ZlRXZlbnRM
aXN0ZW5lcikgeworICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIG9ic2Vy
dmVyLCB1c2VDYXB0dXJlKTsKKyAgICB9IGVsc2UgaWYgKGVsZW1lbnQuZGV0YWNoRXZlbnQpIHsK
KyAgICAgIHRyeSB7CisgICAgICAgIGVsZW1lbnQuZGV0YWNoRXZlbnQoJ29uJyArIG5hbWUsIG9i
c2VydmVyKTsKKyAgICAgIH0gY2F0Y2ggKGUpIHt9CisgICAgfQorICB9Cit9KTsKKworLyogcHJl
dmVudCBtZW1vcnkgbGVha3MgaW4gSUUgKi8KK2lmIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5tYXRj
aCgvXGJNU0lFXGIvKSkKKyAgRXZlbnQub2JzZXJ2ZSh3aW5kb3csICd1bmxvYWQnLCBFdmVudC51
bmxvYWRDYWNoZSwgZmFsc2UpOwordmFyIFBvc2l0aW9uID0geworICAvLyBzZXQgdG8gdHJ1ZSBp
ZiBuZWVkZWQsIHdhcm5pbmc6IGZpcmVmb3ggcGVyZm9ybWFuY2UgcHJvYmxlbXMKKyAgLy8gTk9U
IG5lZWVkZWQgZm9yIHBhZ2Ugc2Nyb2xsaW5nLCBvbmx5IGlmIGRyYWdnYWJsZSBjb250YWluZWQg
aW4KKyAgLy8gc2Nyb2xsYWJsZSBlbGVtZW50cworICBpbmNsdWRlU2Nyb2xsT2Zmc2V0czogZmFs
c2UsCisKKyAgLy8gbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgd2l0aGluSW5jbHVkaW5n
U2Nyb2xsb2Zmc2V0LCBldmVyeSB0aW1lIHRoZQorICAvLyBwYWdlIGlzIHNjcm9sbGVkCisgIHBy
ZXBhcmU6IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuZGVsdGFYID0gIHdpbmRvdy5wYWdlWE9mZnNl
dAorICAgICAgICAgICAgICAgIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0
CisgICAgICAgICAgICAgICAgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0CisgICAgICAgICAg
ICAgICAgfHwgMDsKKyAgICB0aGlzLmRlbHRhWSA9ICB3aW5kb3cucGFnZVlPZmZzZXQKKyAgICAg
ICAgICAgICAgICB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wCisgICAgICAg
ICAgICAgICAgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AKKyAgICAgICAgICAgICAgICB8fCAw
OworICB9LAorCisgIHJlYWxPZmZzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICB2YXIgdmFs
dWVUID0gMCwgdmFsdWVMID0gMDsKKyAgICBkbyB7CisgICAgICB2YWx1ZVQgKz0gZWxlbWVudC5z
Y3JvbGxUb3AgIHx8IDA7CisgICAgICB2YWx1ZUwgKz0gZWxlbWVudC5zY3JvbGxMZWZ0IHx8IDA7
CisgICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlOworICAgIH0gd2hpbGUgKGVsZW1l
bnQpOworICAgIHJldHVybiBbdmFsdWVMLCB2YWx1ZVRdOworICB9LAorCisgIGN1bXVsYXRpdmVP
ZmZzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICB2YXIgdmFsdWVUID0gMCwgdmFsdWVMID0g
MDsKKyAgICBkbyB7CisgICAgICB2YWx1ZVQgKz0gZWxlbWVudC5vZmZzZXRUb3AgIHx8IDA7Cisg
ICAgICB2YWx1ZUwgKz0gZWxlbWVudC5vZmZzZXRMZWZ0IHx8IDA7CisgICAgICBlbGVtZW50ID0g
ZWxlbWVudC5vZmZzZXRQYXJlbnQ7CisgICAgfSB3aGlsZSAoZWxlbWVudCk7CisgICAgcmV0dXJu
IFt2YWx1ZUwsIHZhbHVlVF07CisgIH0sCisKKyAgcG9zaXRpb25lZE9mZnNldDogZnVuY3Rpb24o
ZWxlbWVudCkgeworICAgIHZhciB2YWx1ZVQgPSAwLCB2YWx1ZUwgPSAwOworICAgIGRvIHsKKyAg
ICAgIHZhbHVlVCArPSBlbGVtZW50Lm9mZnNldFRvcCAgfHwgMDsKKyAgICAgIHZhbHVlTCArPSBl
bGVtZW50Lm9mZnNldExlZnQgfHwgMDsKKyAgICAgIGVsZW1lbnQgPSBlbGVtZW50Lm9mZnNldFBh
cmVudDsKKyAgICAgIGlmIChlbGVtZW50KSB7CisgICAgICAgIGlmKGVsZW1lbnQudGFnTmFtZT09
J0JPRFknKSBicmVhazsKKyAgICAgICAgdmFyIHAgPSBFbGVtZW50LmdldFN0eWxlKGVsZW1lbnQs
ICdwb3NpdGlvbicpOworICAgICAgICBpZiAocCA9PSAncmVsYXRpdmUnIHx8IHAgPT0gJ2Fic29s
dXRlJykgYnJlYWs7CisgICAgICB9CisgICAgfSB3aGlsZSAoZWxlbWVudCk7CisgICAgcmV0dXJu
IFt2YWx1ZUwsIHZhbHVlVF07CisgIH0sCisKKyAgb2Zmc2V0UGFyZW50OiBmdW5jdGlvbihlbGVt
ZW50KSB7CisgICAgaWYgKGVsZW1lbnQub2Zmc2V0UGFyZW50KSByZXR1cm4gZWxlbWVudC5vZmZz
ZXRQYXJlbnQ7CisgICAgaWYgKGVsZW1lbnQgPT0gZG9jdW1lbnQuYm9keSkgcmV0dXJuIGVsZW1l
bnQ7CisKKyAgICB3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGUpICYmIGVsZW1l
bnQgIT0gZG9jdW1lbnQuYm9keSkKKyAgICAgIGlmIChFbGVtZW50LmdldFN0eWxlKGVsZW1lbnQs
ICdwb3NpdGlvbicpICE9ICdzdGF0aWMnKQorICAgICAgICByZXR1cm4gZWxlbWVudDsKKworICAg
IHJldHVybiBkb2N1bWVudC5ib2R5OworICB9LAorCisgIC8vIGNhY2hlcyB4L3kgY29vcmRpbmF0
ZSBwYWlyIHRvIHVzZSB3aXRoIG92ZXJsYXAKKyAgd2l0aGluOiBmdW5jdGlvbihlbGVtZW50LCB4
LCB5KSB7CisgICAgaWYgKHRoaXMuaW5jbHVkZVNjcm9sbE9mZnNldHMpCisgICAgICByZXR1cm4g
dGhpcy53aXRoaW5JbmNsdWRpbmdTY3JvbGxvZmZzZXRzKGVsZW1lbnQsIHgsIHkpOworICAgIHRo
aXMueGNvbXAgPSB4OworICAgIHRoaXMueWNvbXAgPSB5OworICAgIHRoaXMub2Zmc2V0ID0gdGhp
cy5jdW11bGF0aXZlT2Zmc2V0KGVsZW1lbnQpOworCisgICAgcmV0dXJuICh5ID49IHRoaXMub2Zm
c2V0WzFdICYmCisgICAgICAgICAgICB5IDwgIHRoaXMub2Zmc2V0WzFdICsgZWxlbWVudC5vZmZz
ZXRIZWlnaHQgJiYKKyAgICAgICAgICAgIHggPj0gdGhpcy5vZmZzZXRbMF0gJiYKKyAgICAgICAg
ICAgIHggPCAgdGhpcy5vZmZzZXRbMF0gKyBlbGVtZW50Lm9mZnNldFdpZHRoKTsKKyAgfSwKKwor
ICB3aXRoaW5JbmNsdWRpbmdTY3JvbGxvZmZzZXRzOiBmdW5jdGlvbihlbGVtZW50LCB4LCB5KSB7
CisgICAgdmFyIG9mZnNldGNhY2hlID0gdGhpcy5yZWFsT2Zmc2V0KGVsZW1lbnQpOworCisgICAg
dGhpcy54Y29tcCA9IHggKyBvZmZzZXRjYWNoZVswXSAtIHRoaXMuZGVsdGFYOworICAgIHRoaXMu
eWNvbXAgPSB5ICsgb2Zmc2V0Y2FjaGVbMV0gLSB0aGlzLmRlbHRhWTsKKyAgICB0aGlzLm9mZnNl
dCA9IHRoaXMuY3VtdWxhdGl2ZU9mZnNldChlbGVtZW50KTsKKworICAgIHJldHVybiAodGhpcy55
Y29tcCA+PSB0aGlzLm9mZnNldFsxXSAmJgorICAgICAgICAgICAgdGhpcy55Y29tcCA8ICB0aGlz
Lm9mZnNldFsxXSArIGVsZW1lbnQub2Zmc2V0SGVpZ2h0ICYmCisgICAgICAgICAgICB0aGlzLnhj
b21wID49IHRoaXMub2Zmc2V0WzBdICYmCisgICAgICAgICAgICB0aGlzLnhjb21wIDwgIHRoaXMu
b2Zmc2V0WzBdICsgZWxlbWVudC5vZmZzZXRXaWR0aCk7CisgIH0sCisKKyAgLy8gd2l0aGluIG11
c3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJlZm9yZQorICBvdmVybGFwOiBmdW5jdGlvbihtb2RlLCBl
bGVtZW50KSB7CisgICAgaWYgKCFtb2RlKSByZXR1cm4gMDsKKyAgICBpZiAobW9kZSA9PSAndmVy
dGljYWwnKQorICAgICAgcmV0dXJuICgodGhpcy5vZmZzZXRbMV0gKyBlbGVtZW50Lm9mZnNldEhl
aWdodCkgLSB0aGlzLnljb21wKSAvCisgICAgICAgIGVsZW1lbnQub2Zmc2V0SGVpZ2h0OworICAg
IGlmIChtb2RlID09ICdob3Jpem9udGFsJykKKyAgICAgIHJldHVybiAoKHRoaXMub2Zmc2V0WzBd
ICsgZWxlbWVudC5vZmZzZXRXaWR0aCkgLSB0aGlzLnhjb21wKSAvCisgICAgICAgIGVsZW1lbnQu
b2Zmc2V0V2lkdGg7CisgIH0sCisKKyAgcGFnZTogZnVuY3Rpb24oZm9yRWxlbWVudCkgeworICAg
IHZhciB2YWx1ZVQgPSAwLCB2YWx1ZUwgPSAwOworCisgICAgdmFyIGVsZW1lbnQgPSBmb3JFbGVt
ZW50OworICAgIGRvIHsKKyAgICAgIHZhbHVlVCArPSBlbGVtZW50Lm9mZnNldFRvcCAgfHwgMDsK
KyAgICAgIHZhbHVlTCArPSBlbGVtZW50Lm9mZnNldExlZnQgfHwgMDsKKworICAgICAgLy8gU2Fm
YXJpIGZpeAorICAgICAgaWYgKGVsZW1lbnQub2Zmc2V0UGFyZW50PT1kb2N1bWVudC5ib2R5KQor
ICAgICAgICBpZiAoRWxlbWVudC5nZXRTdHlsZShlbGVtZW50LCdwb3NpdGlvbicpPT0nYWJzb2x1
dGUnKSBicmVhazsKKworICAgIH0gd2hpbGUgKGVsZW1lbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVu
dCk7CisKKyAgICBlbGVtZW50ID0gZm9yRWxlbWVudDsKKyAgICBkbyB7CisgICAgICBpZiAoIXdp
bmRvdy5vcGVyYSB8fCBlbGVtZW50LnRhZ05hbWU9PSdCT0RZJykgeworICAgICAgICB2YWx1ZVQg
LT0gZWxlbWVudC5zY3JvbGxUb3AgIHx8IDA7CisgICAgICAgIHZhbHVlTCAtPSBlbGVtZW50LnNj
cm9sbExlZnQgfHwgMDsKKyAgICAgIH0KKyAgICB9IHdoaWxlIChlbGVtZW50ID0gZWxlbWVudC5w
YXJlbnROb2RlKTsKKworICAgIHJldHVybiBbdmFsdWVMLCB2YWx1ZVRdOworICB9LAorCisgIGNs
b25lOiBmdW5jdGlvbihzb3VyY2UsIHRhcmdldCkgeworICAgIHZhciBvcHRpb25zID0gT2JqZWN0
LmV4dGVuZCh7CisgICAgICBzZXRMZWZ0OiAgICB0cnVlLAorICAgICAgc2V0VG9wOiAgICAgdHJ1
ZSwKKyAgICAgIHNldFdpZHRoOiAgIHRydWUsCisgICAgICBzZXRIZWlnaHQ6ICB0cnVlLAorICAg
ICAgb2Zmc2V0VG9wOiAgMCwKKyAgICAgIG9mZnNldExlZnQ6IDAKKyAgICB9LCBhcmd1bWVudHNb
Ml0gfHwge30pCisKKyAgICAvLyBmaW5kIHBhZ2UgcG9zaXRpb24gb2Ygc291cmNlCisgICAgc291
cmNlID0gJChzb3VyY2UpOworICAgIHZhciBwID0gUG9zaXRpb24ucGFnZShzb3VyY2UpOworCisg
ICAgLy8gZmluZCBjb29yZGluYXRlIHN5c3RlbSB0byB1c2UKKyAgICB0YXJnZXQgPSAkKHRhcmdl
dCk7CisgICAgdmFyIGRlbHRhID0gWzAsIDBdOworICAgIHZhciBwYXJlbnQgPSBudWxsOworICAg
IC8vIGRlbHRhIFswLDBdIHdpbGwgZG8gZmluZSB3aXRoIHBvc2l0aW9uOiBmaXhlZCBlbGVtZW50
cywKKyAgICAvLyBwb3NpdGlvbjphYnNvbHV0ZSBuZWVkcyBvZmZzZXRQYXJlbnQgZGVsdGFzCisg
ICAgaWYgKEVsZW1lbnQuZ2V0U3R5bGUodGFyZ2V0LCdwb3NpdGlvbicpID09ICdhYnNvbHV0ZScp
IHsKKyAgICAgIHBhcmVudCA9IFBvc2l0aW9uLm9mZnNldFBhcmVudCh0YXJnZXQpOworICAgICAg
ZGVsdGEgPSBQb3NpdGlvbi5wYWdlKHBhcmVudCk7CisgICAgfQorCisgICAgLy8gY29ycmVjdCBi
eSBib2R5IG9mZnNldHMgKGZpeGVzIFNhZmFyaSkKKyAgICBpZiAocGFyZW50ID09IGRvY3VtZW50
LmJvZHkpIHsKKyAgICAgIGRlbHRhWzBdIC09IGRvY3VtZW50LmJvZHkub2Zmc2V0TGVmdDsKKyAg
ICAgIGRlbHRhWzFdIC09IGRvY3VtZW50LmJvZHkub2Zmc2V0VG9wOworICAgIH0KKworICAgIC8v
IHNldCBwb3NpdGlvbgorICAgIGlmKG9wdGlvbnMuc2V0TGVmdCkgICB0YXJnZXQuc3R5bGUubGVm
dCAgPSAocFswXSAtIGRlbHRhWzBdICsgb3B0aW9ucy5vZmZzZXRMZWZ0KSArICdweCc7CisgICAg
aWYob3B0aW9ucy5zZXRUb3ApICAgIHRhcmdldC5zdHlsZS50b3AgICA9IChwWzFdIC0gZGVsdGFb
MV0gKyBvcHRpb25zLm9mZnNldFRvcCkgKyAncHgnOworICAgIGlmKG9wdGlvbnMuc2V0V2lkdGgp
ICB0YXJnZXQuc3R5bGUud2lkdGggPSBzb3VyY2Uub2Zmc2V0V2lkdGggKyAncHgnOworICAgIGlm
KG9wdGlvbnMuc2V0SGVpZ2h0KSB0YXJnZXQuc3R5bGUuaGVpZ2h0ID0gc291cmNlLm9mZnNldEhl
aWdodCArICdweCc7CisgIH0sCisKKyAgYWJzb2x1dGl6ZTogZnVuY3Rpb24oZWxlbWVudCkgewor
ICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOworICAgIGlmIChlbGVtZW50LnN0eWxlLnBvc2l0aW9u
ID09ICdhYnNvbHV0ZScpIHJldHVybjsKKyAgICBQb3NpdGlvbi5wcmVwYXJlKCk7CisKKyAgICB2
YXIgb2Zmc2V0cyA9IFBvc2l0aW9uLnBvc2l0aW9uZWRPZmZzZXQoZWxlbWVudCk7CisgICAgdmFy
IHRvcCAgICAgPSBvZmZzZXRzWzFdOworICAgIHZhciBsZWZ0ICAgID0gb2Zmc2V0c1swXTsKKyAg
ICB2YXIgd2lkdGggICA9IGVsZW1lbnQuY2xpZW50V2lkdGg7CisgICAgdmFyIGhlaWdodCAgPSBl
bGVtZW50LmNsaWVudEhlaWdodDsKKworICAgIGVsZW1lbnQuX29yaWdpbmFsTGVmdCAgID0gbGVm
dCAtIHBhcnNlRmxvYXQoZWxlbWVudC5zdHlsZS5sZWZ0ICB8fCAwKTsKKyAgICBlbGVtZW50Ll9v
cmlnaW5hbFRvcCAgICA9IHRvcCAgLSBwYXJzZUZsb2F0KGVsZW1lbnQuc3R5bGUudG9wIHx8IDAp
OworICAgIGVsZW1lbnQuX29yaWdpbmFsV2lkdGggID0gZWxlbWVudC5zdHlsZS53aWR0aDsKKyAg
ICBlbGVtZW50Ll9vcmlnaW5hbEhlaWdodCA9IGVsZW1lbnQuc3R5bGUuaGVpZ2h0OworCisgICAg
ZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7CisgICAgZWxlbWVudC5zdHlsZS50
b3AgICAgPSB0b3AgKyAncHgnOworICAgIGVsZW1lbnQuc3R5bGUubGVmdCAgID0gbGVmdCArICdw
eCc7CisgICAgZWxlbWVudC5zdHlsZS53aWR0aCAgPSB3aWR0aCArICdweCc7CisgICAgZWxlbWVu
dC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAncHgnOworICB9LAorCisgIHJlbGF0aXZpemU6IGZ1
bmN0aW9uKGVsZW1lbnQpIHsKKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKyAgICBpZiAoZWxl
bWVudC5zdHlsZS5wb3NpdGlvbiA9PSAncmVsYXRpdmUnKSByZXR1cm47CisgICAgUG9zaXRpb24u
cHJlcGFyZSgpOworCisgICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7Cisg
ICAgdmFyIHRvcCAgPSBwYXJzZUZsb2F0KGVsZW1lbnQuc3R5bGUudG9wICB8fCAwKSAtIChlbGVt
ZW50Ll9vcmlnaW5hbFRvcCB8fCAwKTsKKyAgICB2YXIgbGVmdCA9IHBhcnNlRmxvYXQoZWxlbWVu
dC5zdHlsZS5sZWZ0IHx8IDApIC0gKGVsZW1lbnQuX29yaWdpbmFsTGVmdCB8fCAwKTsKKworICAg
IGVsZW1lbnQuc3R5bGUudG9wICAgID0gdG9wICsgJ3B4JzsKKyAgICBlbGVtZW50LnN0eWxlLmxl
ZnQgICA9IGxlZnQgKyAncHgnOworICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gZWxlbWVudC5f
b3JpZ2luYWxIZWlnaHQ7CisgICAgZWxlbWVudC5zdHlsZS53aWR0aCAgPSBlbGVtZW50Ll9vcmln
aW5hbFdpZHRoOworICB9Cit9CisKKy8vIFNhZmFyaSByZXR1cm5zIG1hcmdpbnMgb24gYm9keSB3
aGljaCBpcyBpbmNvcnJlY3QgaWYgdGhlIGNoaWxkIGlzIGFic29sdXRlbHkKKy8vIHBvc2l0aW9u
ZWQuICBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgcmVkZWZpbmUgUG9zaXRpb24uY3VtdWxhdGl2
ZU9mZnNldCBmb3IKKy8vIEtIVE1ML1dlYktpdCBvbmx5LgoraWYgKC9Lb25xdWVyb3J8U2FmYXJp
fEtIVE1MLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKSB7CisgIFBvc2l0aW9uLmN1bXVsYXRp
dmVPZmZzZXQgPSBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgdmFyIHZhbHVlVCA9IDAsIHZhbHVl
TCA9IDA7CisgICAgZG8geworICAgICAgdmFsdWVUICs9IGVsZW1lbnQub2Zmc2V0VG9wICB8fCAw
OworICAgICAgdmFsdWVMICs9IGVsZW1lbnQub2Zmc2V0TGVmdCB8fCAwOworICAgICAgaWYgKGVs
ZW1lbnQub2Zmc2V0UGFyZW50ID09IGRvY3VtZW50LmJvZHkpCisgICAgICAgIGlmIChFbGVtZW50
LmdldFN0eWxlKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdhYnNvbHV0ZScpIGJyZWFrOworCisg
ICAgICBlbGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7CisgICAgfSB3aGlsZSAoZWxlbWVu
dCk7CisKKyAgICByZXR1cm4gW3ZhbHVlTCwgdmFsdWVUXTsKKyAgfQorfQorCitFbGVtZW50LmFk
ZE1ldGhvZHMoKTsKKworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
CisvLyBUaGUgcmVzdCBvZiB0aGlzIGZpbGUgaXMgdGhlIGFjdHVhbCByYXkgdHJhY2VyIHdyaXR0
ZW4gYnkgQWRhbQorLy8gQnVybWlzdGVyLiBJdCdzIGEgY29uY2F0ZW5hdGlvbiBvZiB0aGUgZm9s
bG93aW5nIGZpbGVzOgorLy8KKy8vICAgZmxvZy9jb2xvci5qcworLy8gICBmbG9nL2xpZ2h0Lmpz
CisvLyAgIGZsb2cvdmVjdG9yLmpzCisvLyAgIGZsb2cvcmF5LmpzCisvLyAgIGZsb2cvc2NlbmUu
anMKKy8vICAgZmxvZy9tYXRlcmlhbC9iYXNlbWF0ZXJpYWwuanMKKy8vICAgZmxvZy9tYXRlcmlh
bC9zb2xpZC5qcworLy8gICBmbG9nL21hdGVyaWFsL2NoZXNzYm9hcmQuanMKKy8vICAgZmxvZy9z
aGFwZS9iYXNlc2hhcGUuanMKKy8vICAgZmxvZy9zaGFwZS9zcGhlcmUuanMKKy8vICAgZmxvZy9z
aGFwZS9wbGFuZS5qcworLy8gICBmbG9nL2ludGVyc2VjdGlvbmluZm8uanMKKy8vICAgZmxvZy9j
YW1lcmEuanMKKy8vICAgZmxvZy9iYWNrZ3JvdW5kLmpzCisvLyAgIGZsb2cvZW5naW5lLmpzCisK
KworLyogRmFrZSBhIEZsb2cuKiBuYW1lc3BhY2UgKi8KK2lmKHR5cGVvZihGbG9nKSA9PSAndW5k
ZWZpbmVkJykgdmFyIEZsb2cgPSB7fTsKK2lmKHR5cGVvZihGbG9nLlJheVRyYWNlcikgPT0gJ3Vu
ZGVmaW5lZCcpIEZsb2cuUmF5VHJhY2VyID0ge307CisKK0Zsb2cuUmF5VHJhY2VyLkNvbG9yID0g
Q2xhc3MuY3JlYXRlKCk7CisKK0Zsb2cuUmF5VHJhY2VyLkNvbG9yLnByb3RvdHlwZSA9IHsKKyAg
ICByZWQgOiAwLjAsCisgICAgZ3JlZW4gOiAwLjAsCisgICAgYmx1ZSA6IDAuMCwKKworICAgIGlu
aXRpYWxpemUgOiBmdW5jdGlvbihyLCBnLCBiKSB7CisgICAgICAgIGlmKCFyKSByID0gMC4wOwor
ICAgICAgICBpZighZykgZyA9IDAuMDsKKyAgICAgICAgaWYoIWIpIGIgPSAwLjA7CisKKyAgICAg
ICAgdGhpcy5yZWQgPSByOworICAgICAgICB0aGlzLmdyZWVuID0gZzsKKyAgICAgICAgdGhpcy5i
bHVlID0gYjsKKyAgICB9LAorCisgICAgYWRkIDogZnVuY3Rpb24oYzEsIGMyKXsKKyAgICAgICAg
dmFyIHJlc3VsdCA9IG5ldyBGbG9nLlJheVRyYWNlci5Db2xvcigwLDAsMCk7CisKKyAgICAgICAg
cmVzdWx0LnJlZCA9IGMxLnJlZCArIGMyLnJlZDsKKyAgICAgICAgcmVzdWx0LmdyZWVuID0gYzEu
Z3JlZW4gKyBjMi5ncmVlbjsKKyAgICAgICAgcmVzdWx0LmJsdWUgPSBjMS5ibHVlICsgYzIuYmx1
ZTsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0sCisKKyAgICBhZGRTY2FsYXI6IGZ1
bmN0aW9uKGMxLCBzKXsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBGbG9nLlJheVRyYWNlci5D
b2xvcigwLDAsMCk7CisKKyAgICAgICAgcmVzdWx0LnJlZCA9IGMxLnJlZCArIHM7CisgICAgICAg
IHJlc3VsdC5ncmVlbiA9IGMxLmdyZWVuICsgczsKKyAgICAgICAgcmVzdWx0LmJsdWUgPSBjMS5i
bHVlICsgczsKKworICAgICAgICByZXN1bHQubGltaXQoKTsKKworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0sCisKKyAgICBzdWJ0cmFjdDogZnVuY3Rpb24oYzEsIGMyKXsKKyAgICAgICAg
dmFyIHJlc3VsdCA9IG5ldyBGbG9nLlJheVRyYWNlci5Db2xvcigwLDAsMCk7CisKKyAgICAgICAg
cmVzdWx0LnJlZCA9IGMxLnJlZCAtIGMyLnJlZDsKKyAgICAgICAgcmVzdWx0LmdyZWVuID0gYzEu
Z3JlZW4gLSBjMi5ncmVlbjsKKyAgICAgICAgcmVzdWx0LmJsdWUgPSBjMS5ibHVlIC0gYzIuYmx1
ZTsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0sCisKKyAgICBtdWx0aXBseSA6IGZ1
bmN0aW9uKGMxLCBjMikgeworICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEZsb2cuUmF5VHJhY2Vy
LkNvbG9yKDAsMCwwKTsKKworICAgICAgICByZXN1bHQucmVkID0gYzEucmVkICogYzIucmVkOwor
ICAgICAgICByZXN1bHQuZ3JlZW4gPSBjMS5ncmVlbiAqIGMyLmdyZWVuOworICAgICAgICByZXN1
bHQuYmx1ZSA9IGMxLmJsdWUgKiBjMi5ibHVlOworCisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfSwKKworICAgIG11bHRpcGx5U2NhbGFyIDogZnVuY3Rpb24oYzEsIGYpIHsKKyAgICAgICAg
dmFyIHJlc3VsdCA9IG5ldyBGbG9nLlJheVRyYWNlci5Db2xvcigwLDAsMCk7CisKKyAgICAgICAg
cmVzdWx0LnJlZCA9IGMxLnJlZCAqIGY7CisgICAgICAgIHJlc3VsdC5ncmVlbiA9IGMxLmdyZWVu
ICogZjsKKyAgICAgICAgcmVzdWx0LmJsdWUgPSBjMS5ibHVlICogZjsKKworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0sCisKKyAgICBkaXZpZGVGYWN0b3IgOiBmdW5jdGlvbihjMSwgZikg
eworICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEZsb2cuUmF5VHJhY2VyLkNvbG9yKDAsMCwwKTsK
KworICAgICAgICByZXN1bHQucmVkID0gYzEucmVkIC8gZjsKKyAgICAgICAgcmVzdWx0LmdyZWVu
ID0gYzEuZ3JlZW4gLyBmOworICAgICAgICByZXN1bHQuYmx1ZSA9IGMxLmJsdWUgLyBmOworCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfSwKKworICAgIGxpbWl0OiBmdW5jdGlvbigpewor
ICAgICAgICB0aGlzLnJlZCA9ICh0aGlzLnJlZCA+IDAuMCkgPyAoICh0aGlzLnJlZCA+IDEuMCkg
PyAxLjAgOiB0aGlzLnJlZCApIDogMC4wOworICAgICAgICB0aGlzLmdyZWVuID0gKHRoaXMuZ3Jl
ZW4gPiAwLjApID8gKCAodGhpcy5ncmVlbiA+IDEuMCkgPyAxLjAgOiB0aGlzLmdyZWVuICkgOiAw
LjA7CisgICAgICAgIHRoaXMuYmx1ZSA9ICh0aGlzLmJsdWUgPiAwLjApID8gKCAodGhpcy5ibHVl
ID4gMS4wKSA/IDEuMCA6IHRoaXMuYmx1ZSApIDogMC4wOworICAgIH0sCisKKyAgICBkaXN0YW5j
ZSA6IGZ1bmN0aW9uKGNvbG9yKSB7CisgICAgICAgIHZhciBkID0gTWF0aC5hYnModGhpcy5yZWQg
LSBjb2xvci5yZWQpICsgTWF0aC5hYnModGhpcy5ncmVlbiAtIGNvbG9yLmdyZWVuKSArIE1hdGgu
YWJzKHRoaXMuYmx1ZSAtIGNvbG9yLmJsdWUpOworICAgICAgICByZXR1cm4gZDsKKyAgICB9LAor
CisgICAgYmxlbmQ6IGZ1bmN0aW9uKGMxLCBjMiwgdyl7CisgICAgICAgIHZhciByZXN1bHQgPSBu
ZXcgRmxvZy5SYXlUcmFjZXIuQ29sb3IoMCwwLDApOworICAgICAgICByZXN1bHQgPSBGbG9nLlJh
eVRyYWNlci5Db2xvci5wcm90b3R5cGUuYWRkKAorICAgICAgICAgICAgICAgICAgICBGbG9nLlJh
eVRyYWNlci5Db2xvci5wcm90b3R5cGUubXVsdGlwbHlTY2FsYXIoYzEsIDEgLSB3KSwKKyAgICAg
ICAgICAgICAgICAgICAgRmxvZy5SYXlUcmFjZXIuQ29sb3IucHJvdG90eXBlLm11bHRpcGx5U2Nh
bGFyKGMyLCB3KQorICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9LAorCisgICAgdG9TdHJpbmcgOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciByID0g
TWF0aC5mbG9vcih0aGlzLnJlZCoyNTUpOworICAgICAgICB2YXIgZyA9IE1hdGguZmxvb3IodGhp
cy5ncmVlbioyNTUpOworICAgICAgICB2YXIgYiA9IE1hdGguZmxvb3IodGhpcy5ibHVlKjI1NSk7
CisKKyAgICAgICAgcmV0dXJuICJyZ2IoIisgciArIiwiKyBnICsiLCIrIGIgKyIpIjsKKyAgICB9
Cit9CisvKiBGYWtlIGEgRmxvZy4qIG5hbWVzcGFjZSAqLworaWYodHlwZW9mKEZsb2cpID09ICd1
bmRlZmluZWQnKSB2YXIgRmxvZyA9IHt9OworaWYodHlwZW9mKEZsb2cuUmF5VHJhY2VyKSA9PSAn
dW5kZWZpbmVkJykgRmxvZy5SYXlUcmFjZXIgPSB7fTsKKworRmxvZy5SYXlUcmFjZXIuTGlnaHQg
PSBDbGFzcy5jcmVhdGUoKTsKKworRmxvZy5SYXlUcmFjZXIuTGlnaHQucHJvdG90eXBlID0gewor
ICAgIHBvc2l0aW9uOiBudWxsLAorICAgIGNvbG9yOiBudWxsLAorICAgIGludGVuc2l0eTogMTAu
MCwKKworICAgIGluaXRpYWxpemUgOiBmdW5jdGlvbihwb3MsIGNvbG9yLCBpbnRlbnNpdHkpIHsK
KyAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHBvczsKKyAgICAgICAgdGhpcy5jb2xvciA9IGNvbG9y
OworICAgICAgICB0aGlzLmludGVuc2l0eSA9IChpbnRlbnNpdHkgPyBpbnRlbnNpdHkgOiAxMC4w
KTsKKyAgICB9LAorCisgICAgZ2V0SW50ZW5zaXR5OiBmdW5jdGlvbihkaXN0YW5jZSl7CisgICAg
ICAgIGlmKGRpc3RhbmNlID49IGludGVuc2l0eSkgcmV0dXJuIDA7CisKKyAgICAgICAgcmV0dXJu
IE1hdGgucG93KChpbnRlbnNpdHkgLSBkaXN0YW5jZSkgLyBzdHJlbmd0aCwgMC4yKTsKKyAgICB9
LAorCisgICAgdG9TdHJpbmcgOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAnTGlnaHQg
WycgKyB0aGlzLnBvc2l0aW9uLnggKyAnLCcgKyB0aGlzLnBvc2l0aW9uLnkgKyAnLCcgKyB0aGlz
LnBvc2l0aW9uLnogKyAnXSc7CisgICAgfQorfQorLyogRmFrZSBhIEZsb2cuKiBuYW1lc3BhY2Ug
Ki8KK2lmKHR5cGVvZihGbG9nKSA9PSAndW5kZWZpbmVkJykgdmFyIEZsb2cgPSB7fTsKK2lmKHR5
cGVvZihGbG9nLlJheVRyYWNlcikgPT0gJ3VuZGVmaW5lZCcpIEZsb2cuUmF5VHJhY2VyID0ge307
CisKK0Zsb2cuUmF5VHJhY2VyLlZlY3RvciA9IENsYXNzLmNyZWF0ZSgpOworCitGbG9nLlJheVRy
YWNlci5WZWN0b3IucHJvdG90eXBlID0geworICAgIHggOiAwLjAsCisgICAgeSA6IDAuMCwKKyAg
ICB6IDogMC4wLAorCisgICAgaW5pdGlhbGl6ZSA6IGZ1bmN0aW9uKHgsIHksIHopIHsKKyAgICAg
ICAgdGhpcy54ID0gKHggPyB4IDogMCk7CisgICAgICAgIHRoaXMueSA9ICh5ID8geSA6IDApOwor
ICAgICAgICB0aGlzLnogPSAoeiA/IHogOiAwKTsKKyAgICB9LAorCisgICAgY29weTogZnVuY3Rp
b24odmVjdG9yKXsKKyAgICAgICAgdGhpcy54ID0gdmVjdG9yLng7CisgICAgICAgIHRoaXMueSA9
IHZlY3Rvci55OworICAgICAgICB0aGlzLnogPSB2ZWN0b3IuejsKKyAgICB9LAorCisgICAgbm9y
bWFsaXplIDogZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBtID0gdGhpcy5tYWduaXR1ZGUoKTsK
KyAgICAgICAgcmV0dXJuIG5ldyBGbG9nLlJheVRyYWNlci5WZWN0b3IodGhpcy54IC8gbSwgdGhp
cy55IC8gbSwgdGhpcy56IC8gbSk7CisgICAgfSwKKworICAgIG1hZ25pdHVkZSA6IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KCh0aGlzLnggKiB0aGlzLngpICsgKHRoaXMu
eSAqIHRoaXMueSkgKyAodGhpcy56ICogdGhpcy56KSk7CisgICAgfSwKKworICAgIGNyb3NzIDog
ZnVuY3Rpb24odykgeworICAgICAgICByZXR1cm4gbmV3IEZsb2cuUmF5VHJhY2VyLlZlY3RvcigK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXRoaXMueiAqIHcu
eSArIHRoaXMueSAqIHcueiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLnogKiB3LnggLSB0aGlzLnggKiB3LnosCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAtdGhpcy55ICogdy54ICsgdGhpcy54ICogdy55KTsKKyAgICB9
LAorCisgICAgZG90IDogZnVuY3Rpb24odykgeworICAgICAgICByZXR1cm4gdGhpcy54ICogdy54
ICsgdGhpcy55ICogdy55ICsgdGhpcy56ICogdy56OworICAgIH0sCisKKyAgICBhZGQgOiBmdW5j
dGlvbih2LCB3KSB7CisgICAgICAgIHJldHVybiBuZXcgRmxvZy5SYXlUcmFjZXIuVmVjdG9yKHcu
eCArIHYueCwgdy55ICsgdi55LCB3LnogKyB2LnopOworICAgIH0sCisKKyAgICBzdWJ0cmFjdCA6
IGZ1bmN0aW9uKHYsIHcpIHsKKyAgICAgICAgaWYoIXcgfHwgIXYpIHRocm93ICdWZWN0b3JzIG11
c3QgYmUgZGVmaW5lZCBbJyArIHYgKyAnLCcgKyB3ICsgJ10nOworICAgICAgICByZXR1cm4gbmV3
IEZsb2cuUmF5VHJhY2VyLlZlY3Rvcih2LnggLSB3LngsIHYueSAtIHcueSwgdi56IC0gdy56KTsK
KyAgICB9LAorCisgICAgbXVsdGlwbHlWZWN0b3IgOiBmdW5jdGlvbih2LCB3KSB7CisgICAgICAg
IHJldHVybiBuZXcgRmxvZy5SYXlUcmFjZXIuVmVjdG9yKHYueCAqIHcueCwgdi55ICogdy55LCB2
LnogKiB3LnopOworICAgIH0sCisKKyAgICBtdWx0aXBseVNjYWxhciA6IGZ1bmN0aW9uKHYsIHcp
IHsKKyAgICAgICAgcmV0dXJuIG5ldyBGbG9nLlJheVRyYWNlci5WZWN0b3Iodi54ICogdywgdi55
ICogdywgdi56ICogdyk7CisgICAgfSwKKworICAgIHRvU3RyaW5nIDogZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gJ1ZlY3RvciBbJyArIHRoaXMueCArICcsJyArIHRoaXMueSArICcsJyAr
IHRoaXMueiArICddJzsKKyAgICB9Cit9CisvKiBGYWtlIGEgRmxvZy4qIG5hbWVzcGFjZSAqLwor
aWYodHlwZW9mKEZsb2cpID09ICd1bmRlZmluZWQnKSB2YXIgRmxvZyA9IHt9OworaWYodHlwZW9m
KEZsb2cuUmF5VHJhY2VyKSA9PSAndW5kZWZpbmVkJykgRmxvZy5SYXlUcmFjZXIgPSB7fTsKKwor
RmxvZy5SYXlUcmFjZXIuUmF5ID0gQ2xhc3MuY3JlYXRlKCk7CisKK0Zsb2cuUmF5VHJhY2VyLlJh
eS5wcm90b3R5cGUgPSB7CisgICAgcG9zaXRpb24gOiBudWxsLAorICAgIGRpcmVjdGlvbiA6IG51
bGwsCisgICAgaW5pdGlhbGl6ZSA6IGZ1bmN0aW9uKHBvcywgZGlyKSB7CisgICAgICAgIHRoaXMu
cG9zaXRpb24gPSBwb3M7CisgICAgICAgIHRoaXMuZGlyZWN0aW9uID0gZGlyOworICAgIH0sCisK
KyAgICB0b1N0cmluZyA6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICdSYXkgWycgKyB0
aGlzLnBvc2l0aW9uICsgJywnICsgdGhpcy5kaXJlY3Rpb24gKyAnXSc7CisgICAgfQorfQorLyog
RmFrZSBhIEZsb2cuKiBuYW1lc3BhY2UgKi8KK2lmKHR5cGVvZihGbG9nKSA9PSAndW5kZWZpbmVk
JykgdmFyIEZsb2cgPSB7fTsKK2lmKHR5cGVvZihGbG9nLlJheVRyYWNlcikgPT0gJ3VuZGVmaW5l
ZCcpIEZsb2cuUmF5VHJhY2VyID0ge307CisKK0Zsb2cuUmF5VHJhY2VyLlNjZW5lID0gQ2xhc3Mu
Y3JlYXRlKCk7CisKK0Zsb2cuUmF5VHJhY2VyLlNjZW5lLnByb3RvdHlwZSA9IHsKKyAgICBjYW1l
cmEgOiBudWxsLAorICAgIHNoYXBlcyA6IFtdLAorICAgIGxpZ2h0cyA6IFtdLAorICAgIGJhY2tn
cm91bmQgOiBudWxsLAorCisgICAgaW5pdGlhbGl6ZSA6IGZ1bmN0aW9uKCkgeworICAgICAgICB0
aGlzLmNhbWVyYSA9IG5ldyBGbG9nLlJheVRyYWNlci5DYW1lcmEoCisgICAgICAgICAgICBuZXcg
RmxvZy5SYXlUcmFjZXIuVmVjdG9yKDAsMCwtNSksCisgICAgICAgICAgICBuZXcgRmxvZy5SYXlU
cmFjZXIuVmVjdG9yKDAsMCwxKSwKKyAgICAgICAgICAgIG5ldyBGbG9nLlJheVRyYWNlci5WZWN0
b3IoMCwxLDApCisgICAgICAgICk7CisgICAgICAgIHRoaXMuc2hhcGVzID0gbmV3IEFycmF5KCk7
CisgICAgICAgIHRoaXMubGlnaHRzID0gbmV3IEFycmF5KCk7CisgICAgICAgIHRoaXMuYmFja2dy
b3VuZCA9IG5ldyBGbG9nLlJheVRyYWNlci5CYWNrZ3JvdW5kKG5ldyBGbG9nLlJheVRyYWNlci5D
b2xvcigwLDAsMC41KSwgMC4yKTsKKyAgICB9Cit9CisvKiBGYWtlIGEgRmxvZy4qIG5hbWVzcGFj
ZSAqLworaWYodHlwZW9mKEZsb2cpID09ICd1bmRlZmluZWQnKSB2YXIgRmxvZyA9IHt9OworaWYo
dHlwZW9mKEZsb2cuUmF5VHJhY2VyKSA9PSAndW5kZWZpbmVkJykgRmxvZy5SYXlUcmFjZXIgPSB7
fTsKK2lmKHR5cGVvZihGbG9nLlJheVRyYWNlci5NYXRlcmlhbCkgPT0gJ3VuZGVmaW5lZCcpIEZs
b2cuUmF5VHJhY2VyLk1hdGVyaWFsID0ge307CisKK0Zsb2cuUmF5VHJhY2VyLk1hdGVyaWFsLkJh
c2VNYXRlcmlhbCA9IENsYXNzLmNyZWF0ZSgpOworCitGbG9nLlJheVRyYWNlci5NYXRlcmlhbC5C
YXNlTWF0ZXJpYWwucHJvdG90eXBlID0geworCisgICAgZ2xvc3M6IDIuMCwgICAgICAgICAgICAg
Ly8gWzAuLi5pbmZpbml0eV0gMCA9IG1hdHQKKyAgICB0cmFuc3BhcmVuY3k6IDAuMCwgICAgICAv
LyAwPW9wYXF1ZQorICAgIHJlZmxlY3Rpb246IDAuMCwgICAgICAgIC8vIFswLi4uaW5maW5pdHld
IDAgPSBubyByZWZsZWN0aW9uCisgICAgcmVmcmFjdGlvbjogMC41MCwKKyAgICBoYXNUZXh0dXJl
OiBmYWxzZSwKKworICAgIGluaXRpYWxpemUgOiBmdW5jdGlvbigpIHsKKworICAgIH0sCisKKyAg
ICBnZXRDb2xvcjogZnVuY3Rpb24odSwgdil7CisKKyAgICB9LAorCisgICAgd3JhcFVwOiBmdW5j
dGlvbih0KXsKKyAgICAgICAgdCA9IHQgJSAyLjA7CisgICAgICAgIGlmKHQgPCAtMSkgdCArPSAy
LjA7CisgICAgICAgIGlmKHQgPj0gMSkgdCAtPSAyLjA7CisgICAgICAgIHJldHVybiB0OworICAg
IH0sCisKKyAgICB0b1N0cmluZyA6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICdNYXRl
cmlhbCBbZ2xvc3M9JyArIHRoaXMuZ2xvc3MgKyAnLCB0cmFuc3BhcmVuY3k9JyArIHRoaXMudHJh
bnNwYXJlbmN5ICsgJywgaGFzVGV4dHVyZT0nICsgdGhpcy5oYXNUZXh0dXJlICsnXSc7CisgICAg
fQorfQorLyogRmFrZSBhIEZsb2cuKiBuYW1lc3BhY2UgKi8KK2lmKHR5cGVvZihGbG9nKSA9PSAn
dW5kZWZpbmVkJykgdmFyIEZsb2cgPSB7fTsKK2lmKHR5cGVvZihGbG9nLlJheVRyYWNlcikgPT0g
J3VuZGVmaW5lZCcpIEZsb2cuUmF5VHJhY2VyID0ge307CisKK0Zsb2cuUmF5VHJhY2VyLk1hdGVy
aWFsLlNvbGlkID0gQ2xhc3MuY3JlYXRlKCk7CisKK0Zsb2cuUmF5VHJhY2VyLk1hdGVyaWFsLlNv
bGlkLnByb3RvdHlwZSA9IE9iamVjdC5leHRlbmQoCisgICAgbmV3IEZsb2cuUmF5VHJhY2VyLk1h
dGVyaWFsLkJhc2VNYXRlcmlhbCgpLCB7CisgICAgICAgIGluaXRpYWxpemUgOiBmdW5jdGlvbihj
b2xvciwgcmVmbGVjdGlvbiwgcmVmcmFjdGlvbiwgdHJhbnNwYXJlbmN5LCBnbG9zcykgeworICAg
ICAgICAgICAgdGhpcy5jb2xvciA9IGNvbG9yOworICAgICAgICAgICAgdGhpcy5yZWZsZWN0aW9u
ID0gcmVmbGVjdGlvbjsKKyAgICAgICAgICAgIHRoaXMudHJhbnNwYXJlbmN5ID0gdHJhbnNwYXJl
bmN5OworICAgICAgICAgICAgdGhpcy5nbG9zcyA9IGdsb3NzOworICAgICAgICAgICAgdGhpcy5o
YXNUZXh0dXJlID0gZmFsc2U7CisgICAgICAgIH0sCisKKyAgICAgICAgZ2V0Q29sb3I6IGZ1bmN0
aW9uKHUsIHYpeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sb3I7CisgICAgICAgIH0sCisK
KyAgICAgICAgdG9TdHJpbmcgOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gJ1Nv
bGlkTWF0ZXJpYWwgW2dsb3NzPScgKyB0aGlzLmdsb3NzICsgJywgdHJhbnNwYXJlbmN5PScgKyB0
aGlzLnRyYW5zcGFyZW5jeSArICcsIGhhc1RleHR1cmU9JyArIHRoaXMuaGFzVGV4dHVyZSArJ10n
OworICAgICAgICB9CisgICAgfQorKTsKKy8qIEZha2UgYSBGbG9nLiogbmFtZXNwYWNlICovCitp
Zih0eXBlb2YoRmxvZykgPT0gJ3VuZGVmaW5lZCcpIHZhciBGbG9nID0ge307CitpZih0eXBlb2Yo
RmxvZy5SYXlUcmFjZXIpID09ICd1bmRlZmluZWQnKSBGbG9nLlJheVRyYWNlciA9IHt9OworCitG
bG9nLlJheVRyYWNlci5NYXRlcmlhbC5DaGVzc2JvYXJkID0gQ2xhc3MuY3JlYXRlKCk7CisKK0Zs
b2cuUmF5VHJhY2VyLk1hdGVyaWFsLkNoZXNzYm9hcmQucHJvdG90eXBlID0gT2JqZWN0LmV4dGVu
ZCgKKyAgICBuZXcgRmxvZy5SYXlUcmFjZXIuTWF0ZXJpYWwuQmFzZU1hdGVyaWFsKCksIHsKKyAg
ICAgICAgY29sb3JFdmVuOiBudWxsLAorICAgICAgICBjb2xvck9kZDogbnVsbCwKKyAgICAgICAg
ZGVuc2l0eTogMC41LAorCisgICAgICAgIGluaXRpYWxpemUgOiBmdW5jdGlvbihjb2xvckV2ZW4s
IGNvbG9yT2RkLCByZWZsZWN0aW9uLCB0cmFuc3BhcmVuY3ksIGdsb3NzLCBkZW5zaXR5KSB7Cisg
ICAgICAgICAgICB0aGlzLmNvbG9yRXZlbiA9IGNvbG9yRXZlbjsKKyAgICAgICAgICAgIHRoaXMu
Y29sb3JPZGQgPSBjb2xvck9kZDsKKyAgICAgICAgICAgIHRoaXMucmVmbGVjdGlvbiA9IHJlZmxl
Y3Rpb247CisgICAgICAgICAgICB0aGlzLnRyYW5zcGFyZW5jeSA9IHRyYW5zcGFyZW5jeTsKKyAg
ICAgICAgICAgIHRoaXMuZ2xvc3MgPSBnbG9zczsKKyAgICAgICAgICAgIHRoaXMuZGVuc2l0eSA9
IGRlbnNpdHk7CisgICAgICAgICAgICB0aGlzLmhhc1RleHR1cmUgPSB0cnVlOworICAgICAgICB9
LAorCisgICAgICAgIGdldENvbG9yOiBmdW5jdGlvbih1LCB2KXsKKyAgICAgICAgICAgIHZhciB0
ID0gdGhpcy53cmFwVXAodSAqIHRoaXMuZGVuc2l0eSkgKiB0aGlzLndyYXBVcCh2ICogdGhpcy5k
ZW5zaXR5KTsKKworICAgICAgICAgICAgaWYodCA8IDAuMCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5jb2xvckV2ZW47CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMuY29sb3JPZGQ7CisgICAgICAgIH0sCisKKyAgICAgICAgdG9TdHJpbmcgOiBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gJ0NoZXNzTWF0ZXJpYWwgW2dsb3NzPScgKyB0
aGlzLmdsb3NzICsgJywgdHJhbnNwYXJlbmN5PScgKyB0aGlzLnRyYW5zcGFyZW5jeSArICcsIGhh
c1RleHR1cmU9JyArIHRoaXMuaGFzVGV4dHVyZSArJ10nOworICAgICAgICB9CisgICAgfQorKTsK
Ky8qIEZha2UgYSBGbG9nLiogbmFtZXNwYWNlICovCitpZih0eXBlb2YoRmxvZykgPT0gJ3VuZGVm
aW5lZCcpIHZhciBGbG9nID0ge307CitpZih0eXBlb2YoRmxvZy5SYXlUcmFjZXIpID09ICd1bmRl
ZmluZWQnKSBGbG9nLlJheVRyYWNlciA9IHt9OworaWYodHlwZW9mKEZsb2cuUmF5VHJhY2VyLlNo
YXBlKSA9PSAndW5kZWZpbmVkJykgRmxvZy5SYXlUcmFjZXIuU2hhcGUgPSB7fTsKKworRmxvZy5S
YXlUcmFjZXIuU2hhcGUuQmFzZVNoYXBlID0gQ2xhc3MuY3JlYXRlKCk7CisKK0Zsb2cuUmF5VHJh
Y2VyLlNoYXBlLkJhc2VTaGFwZS5wcm90b3R5cGUgPSB7CisgICAgcG9zaXRpb246IG51bGwsCisg
ICAgbWF0ZXJpYWw6IG51bGwsCisKKyAgICBpbml0aWFsaXplIDogZnVuY3Rpb24oKSB7CisgICAg
ICAgIHRoaXMucG9zaXRpb24gPSBuZXcgVmVjdG9yKDAsMCwwKTsKKyAgICAgICAgdGhpcy5tYXRl
cmlhbCA9IG5ldyBGbG9nLlJheVRyYWNlci5NYXRlcmlhbC5Tb2xpZE1hdGVyaWFsKAorICAgICAg
ICAgICAgbmV3IEZsb2cuUmF5VHJhY2VyLkNvbG9yKDEsMCwxKSwKKyAgICAgICAgICAgIDAsCisg
ICAgICAgICAgICAwLAorICAgICAgICAgICAgMAorICAgICAgICApOworICAgIH0sCisKKyAgICB0
b1N0cmluZyA6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICdNYXRlcmlhbCBbZ2xvc3M9
JyArIHRoaXMuZ2xvc3MgKyAnLCB0cmFuc3BhcmVuY3k9JyArIHRoaXMudHJhbnNwYXJlbmN5ICsg
JywgaGFzVGV4dHVyZT0nICsgdGhpcy5oYXNUZXh0dXJlICsnXSc7CisgICAgfQorfQorLyogRmFr
ZSBhIEZsb2cuKiBuYW1lc3BhY2UgKi8KK2lmKHR5cGVvZihGbG9nKSA9PSAndW5kZWZpbmVkJykg
dmFyIEZsb2cgPSB7fTsKK2lmKHR5cGVvZihGbG9nLlJheVRyYWNlcikgPT0gJ3VuZGVmaW5lZCcp
IEZsb2cuUmF5VHJhY2VyID0ge307CitpZih0eXBlb2YoRmxvZy5SYXlUcmFjZXIuU2hhcGUpID09
ICd1bmRlZmluZWQnKSBGbG9nLlJheVRyYWNlci5TaGFwZSA9IHt9OworCitGbG9nLlJheVRyYWNl
ci5TaGFwZS5TcGhlcmUgPSBDbGFzcy5jcmVhdGUoKTsKKworRmxvZy5SYXlUcmFjZXIuU2hhcGUu
U3BoZXJlLnByb3RvdHlwZSA9IHsKKyAgICBpbml0aWFsaXplIDogZnVuY3Rpb24ocG9zLCByYWRp
dXMsIG1hdGVyaWFsKSB7CisgICAgICAgIHRoaXMucmFkaXVzID0gcmFkaXVzOworICAgICAgICB0
aGlzLnBvc2l0aW9uID0gcG9zOworICAgICAgICB0aGlzLm1hdGVyaWFsID0gbWF0ZXJpYWw7Cisg
ICAgfSwKKworICAgIGludGVyc2VjdDogZnVuY3Rpb24ocmF5KXsKKyAgICAgICAgdmFyIGluZm8g
PSBuZXcgRmxvZy5SYXlUcmFjZXIuSW50ZXJzZWN0aW9uSW5mbygpOworICAgICAgICBpbmZvLnNo
YXBlID0gdGhpczsKKworICAgICAgICB2YXIgZHN0ID0gRmxvZy5SYXlUcmFjZXIuVmVjdG9yLnBy
b3RvdHlwZS5zdWJ0cmFjdChyYXkucG9zaXRpb24sIHRoaXMucG9zaXRpb24pOworCisgICAgICAg
IHZhciBCID0gZHN0LmRvdChyYXkuZGlyZWN0aW9uKTsKKyAgICAgICAgdmFyIEMgPSBkc3QuZG90
KGRzdCkgLSAodGhpcy5yYWRpdXMgKiB0aGlzLnJhZGl1cyk7CisgICAgICAgIHZhciBEID0gKEIg
KiBCKSAtIEM7CisKKyAgICAgICAgaWYoRCA+IDApeyAvLyBpbnRlcnNlY3Rpb24hCisgICAgICAg
ICAgICBpbmZvLmlzSGl0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGluZm8uZGlzdGFuY2UgPSAoLUIp
IC0gTWF0aC5zcXJ0KEQpOworICAgICAgICAgICAgaW5mby5wb3NpdGlvbiA9IEZsb2cuUmF5VHJh
Y2VyLlZlY3Rvci5wcm90b3R5cGUuYWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmF5LnBvc2l0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRmxvZy5SYXlUcmFjZXIuVmVjdG9yLnByb3RvdHlwZS5t
dWx0aXBseVNjYWxhcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByYXkuZGlyZWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluZm8uZGlzdGFuY2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGluZm8ubm9ybWFsID0gRmxvZy5SYXlU
cmFjZXIuVmVjdG9yLnByb3RvdHlwZS5zdWJ0cmFjdCgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5mby5wb3NpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvbgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICkubm9ybWFsaXplKCk7CisKKyAgICAgICAgICAgIGluZm8u
Y29sb3IgPSB0aGlzLm1hdGVyaWFsLmdldENvbG9yKDAsMCk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBpbmZvLmlzSGl0ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGluZm87CisgICAgfSwKKworICAgIHRvU3RyaW5nIDogZnVuY3Rpb24gKCkgeworICAgICAgICBy
ZXR1cm4gJ1NwaGVyZSBbcG9zaXRpb249JyArIHRoaXMucG9zaXRpb24gKyAnLCByYWRpdXM9JyAr
IHRoaXMucmFkaXVzICsgJ10nOworICAgIH0KK30KKy8qIEZha2UgYSBGbG9nLiogbmFtZXNwYWNl
ICovCitpZih0eXBlb2YoRmxvZykgPT0gJ3VuZGVmaW5lZCcpIHZhciBGbG9nID0ge307CitpZih0
eXBlb2YoRmxvZy5SYXlUcmFjZXIpID09ICd1bmRlZmluZWQnKSBGbG9nLlJheVRyYWNlciA9IHt9
OworaWYodHlwZW9mKEZsb2cuUmF5VHJhY2VyLlNoYXBlKSA9PSAndW5kZWZpbmVkJykgRmxvZy5S
YXlUcmFjZXIuU2hhcGUgPSB7fTsKKworRmxvZy5SYXlUcmFjZXIuU2hhcGUuUGxhbmUgPSBDbGFz
cy5jcmVhdGUoKTsKKworRmxvZy5SYXlUcmFjZXIuU2hhcGUuUGxhbmUucHJvdG90eXBlID0gewor
ICAgIGQ6IDAuMCwKKworICAgIGluaXRpYWxpemUgOiBmdW5jdGlvbihwb3MsIGQsIG1hdGVyaWFs
KSB7CisgICAgICAgIHRoaXMucG9zaXRpb24gPSBwb3M7CisgICAgICAgIHRoaXMuZCA9IGQ7Cisg
ICAgICAgIHRoaXMubWF0ZXJpYWwgPSBtYXRlcmlhbDsKKyAgICB9LAorCisgICAgaW50ZXJzZWN0
OiBmdW5jdGlvbihyYXkpeworICAgICAgICB2YXIgaW5mbyA9IG5ldyBGbG9nLlJheVRyYWNlci5J
bnRlcnNlY3Rpb25JbmZvKCk7CisKKyAgICAgICAgdmFyIFZkID0gdGhpcy5wb3NpdGlvbi5kb3Qo
cmF5LmRpcmVjdGlvbik7CisgICAgICAgIGlmKFZkID09IDApIHJldHVybiBpbmZvOyAvLyBubyBp
bnRlcnNlY3Rpb24KKworICAgICAgICB2YXIgdCA9IC0odGhpcy5wb3NpdGlvbi5kb3QocmF5LnBv
c2l0aW9uKSArIHRoaXMuZCkgLyBWZDsKKyAgICAgICAgaWYodCA8PSAwKSByZXR1cm4gaW5mbzsK
KworICAgICAgICBpbmZvLnNoYXBlID0gdGhpczsKKyAgICAgICAgaW5mby5pc0hpdCA9IHRydWU7
CisgICAgICAgIGluZm8ucG9zaXRpb24gPSBGbG9nLlJheVRyYWNlci5WZWN0b3IucHJvdG90eXBl
LmFkZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF5LnBv
c2l0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9n
LlJheVRyYWNlci5WZWN0b3IucHJvdG90eXBlLm11bHRpcGx5U2NhbGFyKAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF5LmRpcmVjdGlvbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIGluZm8ubm9ybWFsID0gdGhpcy5wb3NpdGlv
bjsKKyAgICAgICAgaW5mby5kaXN0YW5jZSA9IHQ7CisKKyAgICAgICAgaWYodGhpcy5tYXRlcmlh
bC5oYXNUZXh0dXJlKXsKKyAgICAgICAgICAgIHZhciB2VSA9IG5ldyBGbG9nLlJheVRyYWNlci5W
ZWN0b3IodGhpcy5wb3NpdGlvbi55LCB0aGlzLnBvc2l0aW9uLnosIC10aGlzLnBvc2l0aW9uLngp
OworICAgICAgICAgICAgdmFyIHZWID0gdlUuY3Jvc3ModGhpcy5wb3NpdGlvbik7CisgICAgICAg
ICAgICB2YXIgdSA9IGluZm8ucG9zaXRpb24uZG90KHZVKTsKKyAgICAgICAgICAgIHZhciB2ID0g
aW5mby5wb3NpdGlvbi5kb3QodlYpOworICAgICAgICAgICAgaW5mby5jb2xvciA9IHRoaXMubWF0
ZXJpYWwuZ2V0Q29sb3IodSx2KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGluZm8u
Y29sb3IgPSB0aGlzLm1hdGVyaWFsLmdldENvbG9yKDAsMCk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gaW5mbzsKKyAgICB9LAorCisgICAgdG9TdHJpbmcgOiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHJldHVybiAnUGxhbmUgWycgKyB0aGlzLnBvc2l0aW9uICsgJywgZD0nICsgdGhpcy5k
ICsgJ10nOworICAgIH0KK30KKy8qIEZha2UgYSBGbG9nLiogbmFtZXNwYWNlICovCitpZih0eXBl
b2YoRmxvZykgPT0gJ3VuZGVmaW5lZCcpIHZhciBGbG9nID0ge307CitpZih0eXBlb2YoRmxvZy5S
YXlUcmFjZXIpID09ICd1bmRlZmluZWQnKSBGbG9nLlJheVRyYWNlciA9IHt9OworCitGbG9nLlJh
eVRyYWNlci5JbnRlcnNlY3Rpb25JbmZvID0gQ2xhc3MuY3JlYXRlKCk7CisKK0Zsb2cuUmF5VHJh
Y2VyLkludGVyc2VjdGlvbkluZm8ucHJvdG90eXBlID0geworICAgIGlzSGl0OiBmYWxzZSwKKyAg
ICBoaXRDb3VudDogMCwKKyAgICBzaGFwZTogbnVsbCwKKyAgICBwb3NpdGlvbjogbnVsbCwKKyAg
ICBub3JtYWw6IG51bGwsCisgICAgY29sb3I6IG51bGwsCisgICAgZGlzdGFuY2U6IG51bGwsCisK
KyAgICBpbml0aWFsaXplIDogZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuY29sb3IgPSBuZXcg
RmxvZy5SYXlUcmFjZXIuQ29sb3IoMCwwLDApOworICAgIH0sCisKKyAgICB0b1N0cmluZyA6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICdJbnRlcnNlY3Rpb24gWycgKyB0aGlzLnBvc2l0
aW9uICsgJ10nOworICAgIH0KK30KKy8qIEZha2UgYSBGbG9nLiogbmFtZXNwYWNlICovCitpZih0
eXBlb2YoRmxvZykgPT0gJ3VuZGVmaW5lZCcpIHZhciBGbG9nID0ge307CitpZih0eXBlb2YoRmxv
Zy5SYXlUcmFjZXIpID09ICd1bmRlZmluZWQnKSBGbG9nLlJheVRyYWNlciA9IHt9OworCitGbG9n
LlJheVRyYWNlci5DYW1lcmEgPSBDbGFzcy5jcmVhdGUoKTsKKworRmxvZy5SYXlUcmFjZXIuQ2Ft
ZXJhLnByb3RvdHlwZSA9IHsKKyAgICBwb3NpdGlvbjogbnVsbCwKKyAgICBsb29rQXQ6IG51bGws
CisgICAgZXF1YXRvcjogbnVsbCwKKyAgICB1cDogbnVsbCwKKyAgICBzY3JlZW46IG51bGwsCisK
KyAgICBpbml0aWFsaXplIDogZnVuY3Rpb24ocG9zLCBsb29rQXQsIHVwKSB7CisgICAgICAgIHRo
aXMucG9zaXRpb24gPSBwb3M7CisgICAgICAgIHRoaXMubG9va0F0ID0gbG9va0F0OworICAgICAg
ICB0aGlzLnVwID0gdXA7CisgICAgICAgIHRoaXMuZXF1YXRvciA9IGxvb2tBdC5ub3JtYWxpemUo
KS5jcm9zcyh0aGlzLnVwKTsKKyAgICAgICAgdGhpcy5zY3JlZW4gPSBGbG9nLlJheVRyYWNlci5W
ZWN0b3IucHJvdG90eXBlLmFkZCh0aGlzLnBvc2l0aW9uLCB0aGlzLmxvb2tBdCk7CisgICAgfSwK
KworICAgIGdldFJheTogZnVuY3Rpb24odngsIHZ5KXsKKyAgICAgICAgdmFyIHBvcyA9IEZsb2cu
UmF5VHJhY2VyLlZlY3Rvci5wcm90b3R5cGUuc3VidHJhY3QoCisgICAgICAgICAgICB0aGlzLnNj
cmVlbiwKKyAgICAgICAgICAgIEZsb2cuUmF5VHJhY2VyLlZlY3Rvci5wcm90b3R5cGUuc3VidHJh
Y3QoCisgICAgICAgICAgICAgICAgRmxvZy5SYXlUcmFjZXIuVmVjdG9yLnByb3RvdHlwZS5tdWx0
aXBseVNjYWxhcih0aGlzLmVxdWF0b3IsIHZ4KSwKKyAgICAgICAgICAgICAgICBGbG9nLlJheVRy
YWNlci5WZWN0b3IucHJvdG90eXBlLm11bHRpcGx5U2NhbGFyKHRoaXMudXAsIHZ5KQorICAgICAg
ICAgICAgKQorICAgICAgICApOworICAgICAgICBwb3MueSA9IHBvcy55ICogLTE7CisgICAgICAg
IHZhciBkaXIgPSBGbG9nLlJheVRyYWNlci5WZWN0b3IucHJvdG90eXBlLnN1YnRyYWN0KAorICAg
ICAgICAgICAgcG9zLAorICAgICAgICAgICAgdGhpcy5wb3NpdGlvbgorICAgICAgICApOworCisg
ICAgICAgIHZhciByYXkgPSBuZXcgRmxvZy5SYXlUcmFjZXIuUmF5KHBvcywgZGlyLm5vcm1hbGl6
ZSgpKTsKKworICAgICAgICByZXR1cm4gcmF5OworICAgIH0sCisKKyAgICB0b1N0cmluZyA6IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICdSYXkgW10nOworICAgIH0KK30KKy8qIEZha2Ug
YSBGbG9nLiogbmFtZXNwYWNlICovCitpZih0eXBlb2YoRmxvZykgPT0gJ3VuZGVmaW5lZCcpIHZh
ciBGbG9nID0ge307CitpZih0eXBlb2YoRmxvZy5SYXlUcmFjZXIpID09ICd1bmRlZmluZWQnKSBG
bG9nLlJheVRyYWNlciA9IHt9OworCitGbG9nLlJheVRyYWNlci5CYWNrZ3JvdW5kID0gQ2xhc3Mu
Y3JlYXRlKCk7CisKK0Zsb2cuUmF5VHJhY2VyLkJhY2tncm91bmQucHJvdG90eXBlID0geworICAg
IGNvbG9yIDogbnVsbCwKKyAgICBhbWJpZW5jZSA6IDAuMCwKKworICAgIGluaXRpYWxpemUgOiBm
dW5jdGlvbihjb2xvciwgYW1iaWVuY2UpIHsKKyAgICAgICAgdGhpcy5jb2xvciA9IGNvbG9yOwor
ICAgICAgICB0aGlzLmFtYmllbmNlID0gYW1iaWVuY2U7CisgICAgfQorfQorLyogRmFrZSBhIEZs
b2cuKiBuYW1lc3BhY2UgKi8KK2lmKHR5cGVvZihGbG9nKSA9PSAndW5kZWZpbmVkJykgdmFyIEZs
b2cgPSB7fTsKK2lmKHR5cGVvZihGbG9nLlJheVRyYWNlcikgPT0gJ3VuZGVmaW5lZCcpIEZsb2cu
UmF5VHJhY2VyID0ge307CisKK0Zsb2cuUmF5VHJhY2VyLkVuZ2luZSA9IENsYXNzLmNyZWF0ZSgp
OworCitGbG9nLlJheVRyYWNlci5FbmdpbmUucHJvdG90eXBlID0geworICAgIGNhbnZhczogbnVs
bCwgLyogMmQgY29udGV4dCB3ZSBjYW4gcmVuZGVyIHRvICovCisKKyAgICBpbml0aWFsaXplOiBm
dW5jdGlvbihvcHRpb25zKXsKKyAgICAgICAgdGhpcy5vcHRpb25zID0gT2JqZWN0LmV4dGVuZCh7
CisgICAgICAgICAgICAgICAgY2FudmFzSGVpZ2h0OiAxMDAsCisgICAgICAgICAgICAgICAgY2Fu
dmFzV2lkdGg6IDEwMCwKKyAgICAgICAgICAgICAgICBwaXhlbFdpZHRoOiAyLAorICAgICAgICAg
ICAgICAgIHBpeGVsSGVpZ2h0OiAyLAorICAgICAgICAgICAgICAgIHJlbmRlckRpZmZ1c2U6IGZh
bHNlLAorICAgICAgICAgICAgICAgIHJlbmRlclNoYWRvd3M6IGZhbHNlLAorICAgICAgICAgICAg
ICAgIHJlbmRlckhpZ2hsaWdodHM6IGZhbHNlLAorICAgICAgICAgICAgICAgIHJlbmRlclJlZmxl
Y3Rpb25zOiBmYWxzZSwKKyAgICAgICAgICAgICAgICByYXlEZXB0aDogMgorICAgICAgICAgICAg
fSwgb3B0aW9ucyB8fCB7fSk7CisKKyAgICAgICAgdGhpcy5vcHRpb25zLmNhbnZhc0hlaWdodCAv
PSB0aGlzLm9wdGlvbnMucGl4ZWxIZWlnaHQ7CisgICAgICAgIHRoaXMub3B0aW9ucy5jYW52YXNX
aWR0aCAvPSB0aGlzLm9wdGlvbnMucGl4ZWxXaWR0aDsKKworICAgICAgICAvKiBUT0RPOiBkeW5h
bWljYWxseSBpbmNsdWRlIG90aGVyIHNjcmlwdHMgKi8KKyAgICB9LAorCisgICAgc2V0UGl4ZWw6
IGZ1bmN0aW9uKHgsIHksIGNvbG9yKXsKKyAgICAgICAgdmFyIHB4VywgcHhIOworICAgICAgICBw
eFcgPSB0aGlzLm9wdGlvbnMucGl4ZWxXaWR0aDsKKyAgICAgICAgcHhIID0gdGhpcy5vcHRpb25z
LnBpeGVsSGVpZ2h0OworCisgICAgICAgIGlmICh0aGlzLmNhbnZhcykgeworICAgICAgICAgIHRo
aXMuY2FudmFzLmZpbGxTdHlsZSA9IGNvbG9yLnRvU3RyaW5nKCk7CisgICAgICAgICAgdGhpcy5j
YW52YXMuZmlsbFJlY3QgKHggKiBweFcsIHkgKiBweEgsIHB4VywgcHhIKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAvLyBwcmludCh4ICogcHhXLCB5ICogcHhILCBweFcsIHB4SCk7Cisg
ICAgICAgIH0KKyAgICB9LAorCisgICAgcmVuZGVyU2NlbmU6IGZ1bmN0aW9uKHNjZW5lLCBjYW52
YXMpeworICAgICAgICAvKiBHZXQgY2FudmFzICovCisgICAgICAgIGlmIChjYW52YXMpIHsKKyAg
ICAgICAgICB0aGlzLmNhbnZhcyA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgIHRoaXMuY2FudmFzID0gbnVsbDsKKyAgICAgICAgfQorCisgICAg
ICAgIHZhciBjYW52YXNIZWlnaHQgPSB0aGlzLm9wdGlvbnMuY2FudmFzSGVpZ2h0OworICAgICAg
ICB2YXIgY2FudmFzV2lkdGggPSB0aGlzLm9wdGlvbnMuY2FudmFzV2lkdGg7CisKKyAgICAgICAg
Zm9yKHZhciB5PTA7IHkgPCBjYW52YXNIZWlnaHQ7IHkrKyl7CisgICAgICAgICAgICBmb3IodmFy
IHg9MDsgeCA8IGNhbnZhc1dpZHRoOyB4KyspeworICAgICAgICAgICAgICAgIHZhciB5cCA9IHkg
KiAxLjAgLyBjYW52YXNIZWlnaHQgKiAyIC0gMTsKKyAgICAgICAgICAJCXZhciB4cCA9IHggKiAx
LjAgLyBjYW52YXNXaWR0aCAqIDIgLSAxOworCisgICAgICAgICAgCQl2YXIgcmF5ID0gc2NlbmUu
Y2FtZXJhLmdldFJheSh4cCwgeXApOworCisgICAgICAgICAgCQl2YXIgY29sb3IgPSB0aGlzLmdl
dFBpeGVsQ29sb3IocmF5LCBzY2VuZSk7CisKKyAgICAgICAgICAgIAl0aGlzLnNldFBpeGVsKHgs
IHksIGNvbG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0sCisKKyAgICBnZXRQ
aXhlbENvbG9yOiBmdW5jdGlvbihyYXksIHNjZW5lKXsKKyAgICAgICAgdmFyIGluZm8gPSB0aGlz
LnRlc3RJbnRlcnNlY3Rpb24ocmF5LCBzY2VuZSwgbnVsbCk7CisgICAgICAgIGlmKGluZm8uaXNI
aXQpeworICAgICAgICAgICAgdmFyIGNvbG9yID0gdGhpcy5yYXlUcmFjZShpbmZvLCByYXksIHNj
ZW5lLCAwKTsKKyAgICAgICAgICAgIHJldHVybiBjb2xvcjsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gc2NlbmUuYmFja2dyb3VuZC5jb2xvcjsKKyAgICB9LAorCisgICAgdGVzdEludGVyc2Vj
dGlvbjogZnVuY3Rpb24ocmF5LCBzY2VuZSwgZXhjbHVkZSl7CisgICAgICAgIHZhciBoaXRzID0g
MDsKKyAgICAgICAgdmFyIGJlc3QgPSBuZXcgRmxvZy5SYXlUcmFjZXIuSW50ZXJzZWN0aW9uSW5m
bygpOworICAgICAgICBiZXN0LmRpc3RhbmNlID0gMjAwMDsKKworICAgICAgICBmb3IodmFyIGk9
MDsgaTxzY2VuZS5zaGFwZXMubGVuZ3RoOyBpKyspeworICAgICAgICAgICAgdmFyIHNoYXBlID0g
c2NlbmUuc2hhcGVzW2ldOworCisgICAgICAgICAgICBpZihzaGFwZSAhPSBleGNsdWRlKXsKKyAg
ICAgICAgICAgICAgICB2YXIgaW5mbyA9IHNoYXBlLmludGVyc2VjdChyYXkpOworICAgICAgICAg
ICAgICAgIGlmKGluZm8uaXNIaXQgJiYgaW5mby5kaXN0YW5jZSA+PSAwICYmIGluZm8uZGlzdGFu
Y2UgPCBiZXN0LmRpc3RhbmNlKXsKKyAgICAgICAgICAgICAgICAgICAgYmVzdCA9IGluZm87Cisg
ICAgICAgICAgICAgICAgICAgIGhpdHMrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgYmVzdC5oaXRDb3VudCA9IGhpdHM7CisgICAgICAgIHJl
dHVybiBiZXN0OworICAgIH0sCisKKyAgICBnZXRSZWZsZWN0aW9uUmF5OiBmdW5jdGlvbihQLE4s
Vil7CisgICAgICAgIHZhciBjMSA9IC1OLmRvdChWKTsKKyAgICAgICAgdmFyIFIxID0gRmxvZy5S
YXlUcmFjZXIuVmVjdG9yLnByb3RvdHlwZS5hZGQoCisgICAgICAgICAgICBGbG9nLlJheVRyYWNl
ci5WZWN0b3IucHJvdG90eXBlLm11bHRpcGx5U2NhbGFyKE4sIDIqYzEpLAorICAgICAgICAgICAg
VgorICAgICAgICApOworICAgICAgICByZXR1cm4gbmV3IEZsb2cuUmF5VHJhY2VyLlJheShQLCBS
MSk7CisgICAgfSwKKworICAgIHJheVRyYWNlOiBmdW5jdGlvbihpbmZvLCByYXksIHNjZW5lLCBk
ZXB0aCl7CisgICAgICAgIC8vIENhbGMgYW1iaWVudAorICAgICAgICB2YXIgY29sb3IgPSBGbG9n
LlJheVRyYWNlci5Db2xvci5wcm90b3R5cGUubXVsdGlwbHlTY2FsYXIoaW5mby5jb2xvciwgc2Nl
bmUuYmFja2dyb3VuZC5hbWJpZW5jZSk7CisgICAgICAgIHZhciBvbGRDb2xvciA9IGNvbG9yOwor
ICAgICAgICB2YXIgc2hpbmluZXNzID0gTWF0aC5wb3coMTAsIGluZm8uc2hhcGUubWF0ZXJpYWwu
Z2xvc3MgKyAxKTsKKworICAgICAgICBmb3IodmFyIGk9MDsgaTxzY2VuZS5saWdodHMubGVuZ3Ro
OyBpKyspeworICAgICAgICAgICAgdmFyIGxpZ2h0ID0gc2NlbmUubGlnaHRzW2ldOworCisgICAg
ICAgICAgICAvLyBDYWxjIGRpZmZ1c2UgbGlnaHRpbmcKKyAgICAgICAgICAgIHZhciB2ID0gRmxv
Zy5SYXlUcmFjZXIuVmVjdG9yLnByb3RvdHlwZS5zdWJ0cmFjdCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGlnaHQucG9zaXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZm8ucG9zaXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApLm5vcm1h
bGl6ZSgpOworCisgICAgICAgICAgICBpZih0aGlzLm9wdGlvbnMucmVuZGVyRGlmZnVzZSl7Cisg
ICAgICAgICAgICAgICAgdmFyIEwgPSB2LmRvdChpbmZvLm5vcm1hbCk7CisgICAgICAgICAgICAg
ICAgaWYoTCA+IDAuMCl7CisgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gRmxvZy5SYXlUcmFj
ZXIuQ29sb3IucHJvdG90eXBlLmFkZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG
bG9nLlJheVRyYWNlci5Db2xvci5wcm90b3R5cGUubXVsdGlwbHkoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uY29sb3IsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2cuUmF5VHJhY2VyLkNvbG9yLnByb3RvdHlw
ZS5tdWx0aXBseVNjYWxhcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxpZ2h0LmNvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFRoZSBncmVhdGVyIHRoZSBkZXB0aCB0aGUgbW9y
ZSBhY2N1cmF0ZSB0aGUgY29sb3VycywgYnV0CisgICAgICAgICAgICAvLyB0aGlzIGlzIGV4cG9u
ZW50aWFsbHkgKCEpIGV4cGVuc2l2ZQorICAgICAgICAgICAgaWYoZGVwdGggPD0gdGhpcy5vcHRp
b25zLnJheURlcHRoKXsKKyAgICAgICAgICAvLyBjYWxjdWxhdGUgcmVmbGVjdGlvbiByYXkKKyAg
ICAgICAgICBpZih0aGlzLm9wdGlvbnMucmVuZGVyUmVmbGVjdGlvbnMgJiYgaW5mby5zaGFwZS5t
YXRlcmlhbC5yZWZsZWN0aW9uID4gMCkKKyAgICAgICAgICB7CisgICAgICAgICAgICAgIHZhciBy
ZWZsZWN0aW9uUmF5ID0gdGhpcy5nZXRSZWZsZWN0aW9uUmF5KGluZm8ucG9zaXRpb24sIGluZm8u
bm9ybWFsLCByYXkuZGlyZWN0aW9uKTsKKyAgICAgICAgICAgICAgdmFyIHJlZmwgPSB0aGlzLnRl
c3RJbnRlcnNlY3Rpb24ocmVmbGVjdGlvblJheSwgc2NlbmUsIGluZm8uc2hhcGUpOworCisgICAg
ICAgICAgICAgIGlmIChyZWZsLmlzSGl0ICYmIHJlZmwuZGlzdGFuY2UgPiAwKXsKKyAgICAgICAg
ICAgICAgICAgIHJlZmwuY29sb3IgPSB0aGlzLnJheVRyYWNlKHJlZmwsIHJlZmxlY3Rpb25SYXks
IHNjZW5lLCBkZXB0aCArIDEpOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgcmVmbC5jb2xvciA9IHNjZW5lLmJhY2tncm91bmQuY29sb3I7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgIGNvbG9yID0gRmxvZy5SYXlUcmFjZXIu
Q29sb3IucHJvdG90eXBlLmJsZW5kKAorICAgICAgICAgICAgICAgICAgICBjb2xvciwKKyAgICAg
ICAgICAgICAgICAgICAgcmVmbC5jb2xvciwKKyAgICAgICAgICAgICAgICAgICAgaW5mby5zaGFw
ZS5tYXRlcmlhbC5yZWZsZWN0aW9uCisgICAgICAgICAgICAgICAgICApOworICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIC8vIFJlZnJhY3Rpb24KKyAgICAgICAgICAgICAgICAvKiBUT0RP
ICovCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIFJlbmRlciBzaGFkb3dzIGFuZCBo
aWdobGlnaHRzICovCisKKyAgICAgICAgICAgIHZhciBzaGFkb3dJbmZvID0gbmV3IEZsb2cuUmF5
VHJhY2VyLkludGVyc2VjdGlvbkluZm8oKTsKKworICAgICAgICAgICAgaWYodGhpcy5vcHRpb25z
LnJlbmRlclNoYWRvd3MpeworICAgICAgICAgICAgICAgIHZhciBzaGFkb3dSYXkgPSBuZXcgRmxv
Zy5SYXlUcmFjZXIuUmF5KGluZm8ucG9zaXRpb24sIHYpOworCisgICAgICAgICAgICAgICAgc2hh
ZG93SW5mbyA9IHRoaXMudGVzdEludGVyc2VjdGlvbihzaGFkb3dSYXksIHNjZW5lLCBpbmZvLnNo
YXBlKTsKKyAgICAgICAgICAgICAgICBpZihzaGFkb3dJbmZvLmlzSGl0ICYmIHNoYWRvd0luZm8u
c2hhcGUgIT0gaW5mby5zaGFwZSAvKiYmIHNoYWRvd0luZm8uc2hhcGUudHlwZSAhPSAnUExBTkUn
Ki8peworICAgICAgICAgICAgICAgICAgICB2YXIgdkEgPSBGbG9nLlJheVRyYWNlci5Db2xvci5w
cm90b3R5cGUubXVsdGlwbHlTY2FsYXIoY29sb3IsIDAuNSk7CisgICAgICAgICAgICAgICAgICAg
IHZhciBkQiA9ICgwLjUgKiBNYXRoLnBvdyhzaGFkb3dJbmZvLnNoYXBlLm1hdGVyaWFsLnRyYW5z
cGFyZW5jeSwgMC41KSk7CisgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gRmxvZy5SYXlUcmFj
ZXIuQ29sb3IucHJvdG90eXBlLmFkZFNjYWxhcih2QSxkQik7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAvLyBQaG9uZyBzcGVjdWxhciBoaWdobGlnaHRzCisgICAg
ICBpZih0aGlzLm9wdGlvbnMucmVuZGVySGlnaGxpZ2h0cyAmJiAhc2hhZG93SW5mby5pc0hpdCAm
JiBpbmZvLnNoYXBlLm1hdGVyaWFsLmdsb3NzID4gMCl7CisgICAgICAgIHZhciBMdiA9IEZsb2cu
UmF5VHJhY2VyLlZlY3Rvci5wcm90b3R5cGUuc3VidHJhY3QoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5mby5zaGFwZS5wb3NpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsaWdodC5wb3NpdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgKS5ub3JtYWxpemUoKTsK
KworICAgICAgICB2YXIgRSA9IEZsb2cuUmF5VHJhY2VyLlZlY3Rvci5wcm90b3R5cGUuc3VidHJh
Y3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NlbmUuY2FtZXJhLnBvc2l0aW9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uc2hhcGUucG9zaXRpb24KKyAgICAgICAg
ICAgICAgICAgICAgICAgICkubm9ybWFsaXplKCk7CisKKyAgICAgICAgdmFyIEggPSBGbG9nLlJh
eVRyYWNlci5WZWN0b3IucHJvdG90eXBlLnN1YnRyYWN0KAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTHYKKyAgICAgICAgICAgICAg
ICAgICAgICAgICkubm9ybWFsaXplKCk7CisKKyAgICAgICAgdmFyIGdsb3NzV2VpZ2h0ID0gTWF0
aC5wb3coTWF0aC5tYXgoaW5mby5ub3JtYWwuZG90KEgpLCAwKSwgc2hpbmluZXNzKTsKKyAgICAg
ICAgY29sb3IgPSBGbG9nLlJheVRyYWNlci5Db2xvci5wcm90b3R5cGUuYWRkKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEZsb2cuUmF5VHJhY2VyLkNvbG9yLnByb3RvdHlwZS5tdWx0aXBs
eVNjYWxhcihsaWdodC5jb2xvciwgZ2xvc3NXZWlnaHQpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbG9yCisgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGNvbG9yLmxpbWl0KCk7CisgICAgICAgIHJldHVybiBjb2xvcjsKKyAgICB9
Cit9OworCisKK2Z1bmN0aW9uIHJlbmRlclNjZW5lKCl7CisgICAgdmFyIHNjZW5lID0gbmV3IEZs
b2cuUmF5VHJhY2VyLlNjZW5lKCk7CisKKyAgICBzY2VuZS5jYW1lcmEgPSBuZXcgRmxvZy5SYXlU
cmFjZXIuQ2FtZXJhKAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZsb2cuUmF5VHJhY2Vy
LlZlY3RvcigwLCAwLCAtMTUpLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZsb2cuUmF5
VHJhY2VyLlZlY3RvcigtMC4yLCAwLCA1KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBG
bG9nLlJheVRyYWNlci5WZWN0b3IoMCwgMSwgMCkKKyAgICAgICAgICAgICAgICAgICAgKTsKKwor
ICAgIHNjZW5lLmJhY2tncm91bmQgPSBuZXcgRmxvZy5SYXlUcmFjZXIuQmFja2dyb3VuZCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZsb2cuUmF5VHJhY2VyLkNvbG9yKDAu
NSwgMC41LCAwLjUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjQKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgdmFyIHNwaGVyZSA9IG5ldyBGbG9nLlJh
eVRyYWNlci5TaGFwZS5TcGhlcmUoCisgICAgICAgIG5ldyBGbG9nLlJheVRyYWNlci5WZWN0b3Io
LTEuNSwgMS41LCAyKSwKKyAgICAgICAgMS41LAorICAgICAgICBuZXcgRmxvZy5SYXlUcmFjZXIu
TWF0ZXJpYWwuU29saWQoCisgICAgICAgICAgICBuZXcgRmxvZy5SYXlUcmFjZXIuQ29sb3IoMCww
LjUsMC41KSwKKyAgICAgICAgICAgIDAuMywKKyAgICAgICAgICAgIDAuMCwKKyAgICAgICAgICAg
IDAuMCwKKyAgICAgICAgICAgIDIuMAorICAgICAgICApCisgICAgKTsKKworICAgIHZhciBzcGhl
cmUxID0gbmV3IEZsb2cuUmF5VHJhY2VyLlNoYXBlLlNwaGVyZSgKKyAgICAgICAgbmV3IEZsb2cu
UmF5VHJhY2VyLlZlY3RvcigxLCAwLjI1LCAxKSwKKyAgICAgICAgMC41LAorICAgICAgICBuZXcg
RmxvZy5SYXlUcmFjZXIuTWF0ZXJpYWwuU29saWQoCisgICAgICAgICAgICBuZXcgRmxvZy5SYXlU
cmFjZXIuQ29sb3IoMC45LDAuOSwwLjkpLAorICAgICAgICAgICAgMC4xLAorICAgICAgICAgICAg
MC4wLAorICAgICAgICAgICAgMC4wLAorICAgICAgICAgICAgMS41CisgICAgICAgICkKKyAgICAp
OworCisgICAgdmFyIHBsYW5lID0gbmV3IEZsb2cuUmF5VHJhY2VyLlNoYXBlLlBsYW5lKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRmxvZy5SYXlUcmFjZXIuVmVjdG9yKDAu
MSwgMC45LCAtMC41KS5ub3JtYWxpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMS4yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRmxvZy5SYXlUcmFj
ZXIuTWF0ZXJpYWwuQ2hlc3Nib2FyZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5ldyBGbG9nLlJheVRyYWNlci5Db2xvcigxLDEsMSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuZXcgRmxvZy5SYXlUcmFjZXIuQ29sb3IoMCwwLDApLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4yLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMC4wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MS4wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC43CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwor
CisgICAgc2NlbmUuc2hhcGVzLnB1c2gocGxhbmUpOworICAgIHNjZW5lLnNoYXBlcy5wdXNoKHNw
aGVyZSk7CisgICAgc2NlbmUuc2hhcGVzLnB1c2goc3BoZXJlMSk7CisKKyAgICB2YXIgbGlnaHQg
PSBuZXcgRmxvZy5SYXlUcmFjZXIuTGlnaHQoCisgICAgICAgIG5ldyBGbG9nLlJheVRyYWNlci5W
ZWN0b3IoNSwgMTAsIC0xKSwKKyAgICAgICAgbmV3IEZsb2cuUmF5VHJhY2VyLkNvbG9yKDAuOCwg
MC44LCAwLjgpCisgICAgKTsKKworICAgIHZhciBsaWdodDEgPSBuZXcgRmxvZy5SYXlUcmFjZXIu
TGlnaHQoCisgICAgICAgIG5ldyBGbG9nLlJheVRyYWNlci5WZWN0b3IoLTMsIDUsIC0xNSksCisg
ICAgICAgIG5ldyBGbG9nLlJheVRyYWNlci5Db2xvcigwLjgsIDAuOCwgMC44KSwKKyAgICAgICAg
MTAwCisgICAgKTsKKworICAgIHNjZW5lLmxpZ2h0cy5wdXNoKGxpZ2h0KTsKKyAgICBzY2VuZS5s
aWdodHMucHVzaChsaWdodDEpOworCisgICAgdmFyIGltYWdlV2lkdGggPSAxMDA7IC8vICRGKCdp
bWFnZVdpZHRoJyk7CisgICAgdmFyIGltYWdlSGVpZ2h0ID0gMTAwOyAvLyAkRignaW1hZ2VIZWln
aHQnKTsKKyAgICB2YXIgcGl4ZWxTaXplID0gIjUsNSIuc3BsaXQoJywnKTsgLy8gICRGKCdwaXhl
bFNpemUnKS5zcGxpdCgnLCcpOworICAgIHZhciByZW5kZXJEaWZmdXNlID0gdHJ1ZTsgLy8gJEYo
J3JlbmRlckRpZmZ1c2UnKTsKKyAgICB2YXIgcmVuZGVyU2hhZG93cyA9IHRydWU7IC8vICRGKCdy
ZW5kZXJTaGFkb3dzJyk7CisgICAgdmFyIHJlbmRlckhpZ2hsaWdodHMgPSB0cnVlOyAvLyAkRign
cmVuZGVySGlnaGxpZ2h0cycpOworICAgIHZhciByZW5kZXJSZWZsZWN0aW9ucyA9IHRydWU7IC8v
ICRGKCdyZW5kZXJSZWZsZWN0aW9ucycpOworICAgIHZhciByYXlEZXB0aCA9IDI7Ly8kRigncmF5
RGVwdGgnKTsKKworICAgIHZhciByYXl0cmFjZXIgPSBuZXcgRmxvZy5SYXlUcmFjZXIuRW5naW5l
KAorICAgICAgICB7CisgICAgICAgICAgICBjYW52YXNXaWR0aDogaW1hZ2VXaWR0aCwKKyAgICAg
ICAgICAgIGNhbnZhc0hlaWdodDogaW1hZ2VIZWlnaHQsCisgICAgICAgICAgICBwaXhlbFdpZHRo
OiBwaXhlbFNpemVbMF0sCisgICAgICAgICAgICBwaXhlbEhlaWdodDogcGl4ZWxTaXplWzFdLAor
ICAgICAgICAgICAgInJlbmRlckRpZmZ1c2UiOiByZW5kZXJEaWZmdXNlLAorICAgICAgICAgICAg
InJlbmRlckhpZ2hsaWdodHMiOiByZW5kZXJIaWdobGlnaHRzLAorICAgICAgICAgICAgInJlbmRl
clNoYWRvd3MiOiByZW5kZXJTaGFkb3dzLAorICAgICAgICAgICAgInJlbmRlclJlZmxlY3Rpb25z
IjogcmVuZGVyUmVmbGVjdGlvbnMsCisgICAgICAgICAgICAicmF5RGVwdGgiOiByYXlEZXB0aAor
ICAgICAgICB9CisgICAgKTsKKworICAgIHJheXRyYWNlci5yZW5kZXJTY2VuZShzY2VuZSwgbnVs
bCwgMCk7Cit9CisKKy8vIHJlbmRlclNjZW5lKCk7CkluZGV4OiBTdW5TcGlkZXIvdGVzdHMvdjgt
cmljaGFyZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU3VuU3BpZGVyL3Rlc3RzL3Y4LXJpY2hhcmRzLmpz
CShyZXZpc2lvbiAwKQorKysgU3VuU3BpZGVyL3Rlc3RzL3Y4LXJpY2hhcmRzLmpzCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDUzNSBAQAorLy8gQ29weXJpZ2h0IDIwMDcgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0
OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKy8vIFRoaXMgaXMgYSBK
YXZhU2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBSaWNoYXJkcworLy8gYmVuY2htYXJrIGZy
b206CisvLworLy8gICAgaHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfm1yMTAvQmVuY2guaHRtbAor
Ly8gCisvLyBUaGUgYmVuY2htYXJrIHdhcyBvcmlnaW5hbGx5IGltcGxlbWVudGVkIGluIEJDUEwg
YnkKKy8vIE1hcnRpbiBSaWNoYXJkcy4KKworLyoqCisgKiBUaGUgUmljaGFyZHMgYmVuY2htYXJr
IHNpbXVsYXRlcyB0aGUgdGFzayBkaXNwYXRjaGVyIG9mIGFuCisgKiBvcGVyYXRpbmcgc3lzdGVt
LgorICoqLworZnVuY3Rpb24gcnVuUmljaGFyZHMoKSB7CisgIHZhciBzY2hlZHVsZXIgPSBuZXcg
U2NoZWR1bGVyKCk7CisgIHNjaGVkdWxlci5hZGRJZGxlVGFzayhJRF9JRExFLCAwLCBudWxsLCBD
T1VOVCk7CisKKyAgdmFyIHF1ZXVlID0gbmV3IFBhY2tldChudWxsLCBJRF9XT1JLRVIsIEtJTkRf
V09SSyk7CisgIHF1ZXVlID0gbmV3IFBhY2tldChxdWV1ZSwgIElEX1dPUktFUiwgS0lORF9XT1JL
KTsKKyAgc2NoZWR1bGVyLmFkZFdvcmtlclRhc2soSURfV09SS0VSLCAxMDAwLCBxdWV1ZSk7CisK
KyAgcXVldWUgPSBuZXcgUGFja2V0KG51bGwsIElEX0RFVklDRV9BLCBLSU5EX0RFVklDRSk7Cisg
IHF1ZXVlID0gbmV3IFBhY2tldChxdWV1ZSwgIElEX0RFVklDRV9BLCBLSU5EX0RFVklDRSk7Cisg
IHF1ZXVlID0gbmV3IFBhY2tldChxdWV1ZSwgIElEX0RFVklDRV9BLCBLSU5EX0RFVklDRSk7Cisg
IHNjaGVkdWxlci5hZGRIYW5kbGVyVGFzayhJRF9IQU5ETEVSX0EsIDIwMDAsIHF1ZXVlKTsKKwor
ICBxdWV1ZSA9IG5ldyBQYWNrZXQobnVsbCwgSURfREVWSUNFX0IsIEtJTkRfREVWSUNFKTsKKyAg
cXVldWUgPSBuZXcgUGFja2V0KHF1ZXVlLCAgSURfREVWSUNFX0IsIEtJTkRfREVWSUNFKTsKKyAg
cXVldWUgPSBuZXcgUGFja2V0KHF1ZXVlLCAgSURfREVWSUNFX0IsIEtJTkRfREVWSUNFKTsKKyAg
c2NoZWR1bGVyLmFkZEhhbmRsZXJUYXNrKElEX0hBTkRMRVJfQiwgMzAwMCwgcXVldWUpOworCisg
IHNjaGVkdWxlci5hZGREZXZpY2VUYXNrKElEX0RFVklDRV9BLCA0MDAwLCBudWxsKTsKKworICBz
Y2hlZHVsZXIuYWRkRGV2aWNlVGFzayhJRF9ERVZJQ0VfQiwgNTAwMCwgbnVsbCk7CisKKyAgc2No
ZWR1bGVyLnNjaGVkdWxlKCk7CisKKyAgaWYgKHNjaGVkdWxlci5xdWV1ZUNvdW50ICE9IEVYUEVD
VEVEX1FVRVVFX0NPVU5UIHx8CisgICAgICBzY2hlZHVsZXIuaG9sZENvdW50ICE9IEVYUEVDVEVE
X0hPTERfQ09VTlQpIHsKKyAgICB2YXIgbXNnID0KKyAgICAgICAgIkVycm9yIGR1cmluZyBleGVj
dXRpb246IHF1ZXVlQ291bnQgPSAiICsgc2NoZWR1bGVyLnF1ZXVlQ291bnQgKworICAgICAgICAi
LCBob2xkQ291bnQgPSAiICsgc2NoZWR1bGVyLmhvbGRDb3VudCArICIuIjsKKyAgICBwcmludCht
c2cpOworICB9Cit9CisKK3ZhciBDT1VOVCA9IDEwMDA7CisKKy8qKgorICogVGhlc2UgdHdvIGNv
bnN0YW50cyBzcGVjaWZ5IGhvdyBtYW55IHRpbWVzIGEgcGFja2V0IGlzIHF1ZXVlZCBhbmQKKyAq
IGhvdyBtYW55IHRpbWVzIGEgdGFzayBpcyBwdXQgb24gaG9sZCBpbiBhIGNvcnJlY3QgcnVuIG9m
IHJpY2hhcmRzLgorICogVGhleSBkb24ndCBoYXZlIGFueSBtZWFuaW5nIGEgc3VjaCBidXQgYXJl
IGNoYXJhY3RlcmlzdGljIG9mIGEKKyAqIGNvcnJlY3QgcnVuIHNvIGlmIHRoZSBhY3R1YWwgcXVl
dWUgb3IgaG9sZCBjb3VudCBpcyBkaWZmZXJlbnQgZnJvbQorICogdGhlIGV4cGVjdGVkIHRoZXJl
IG11c3QgYmUgYSBidWcgaW4gdGhlIGltcGxlbWVudGF0aW9uLgorICoqLwordmFyIEVYUEVDVEVE
X1FVRVVFX0NPVU5UID0gMjMyMjsKK3ZhciBFWFBFQ1RFRF9IT0xEX0NPVU5UID0gOTI4OworCisK
Ky8qKgorICogQSBzY2hlZHVsZXIgY2FuIGJlIHVzZWQgdG8gc2NoZWR1bGUgYSBzZXQgb2YgdGFz
a3MgYmFzZWQgb24gdGhlaXIgcmVsYXRpdmUKKyAqIHByaW9yaXRpZXMuICBTY2hlZHVsaW5nIGlz
IGRvbmUgYnkgbWFpbnRhaW5pbmcgYSBsaXN0IG9mIHRhc2sgY29udHJvbCBibG9ja3MKKyAqIHdo
aWNoIGhvbGRzIHRhc2tzIGFuZCB0aGUgZGF0YSBxdWV1ZSB0aGV5IGFyZSBwcm9jZXNzaW5nLgor
ICogQGNvbnN0cnVjdG9yCisgKi8KK2Z1bmN0aW9uIFNjaGVkdWxlcigpIHsKKyAgdGhpcy5xdWV1
ZUNvdW50ID0gMDsKKyAgdGhpcy5ob2xkQ291bnQgPSAwOworICB0aGlzLmJsb2NrcyA9IG5ldyBB
cnJheShOVU1CRVJfT0ZfSURTKTsKKyAgdGhpcy5saXN0ID0gbnVsbDsKKyAgdGhpcy5jdXJyZW50
VGNiID0gbnVsbDsKKyAgdGhpcy5jdXJyZW50SWQgPSBudWxsOworfQorCit2YXIgSURfSURMRSAg
ICAgICA9IDA7Cit2YXIgSURfV09SS0VSICAgICA9IDE7Cit2YXIgSURfSEFORExFUl9BICA9IDI7
Cit2YXIgSURfSEFORExFUl9CICA9IDM7Cit2YXIgSURfREVWSUNFX0EgICA9IDQ7Cit2YXIgSURf
REVWSUNFX0IgICA9IDU7Cit2YXIgTlVNQkVSX09GX0lEUyA9IDY7CisKK3ZhciBLSU5EX0RFVklD
RSAgID0gMDsKK3ZhciBLSU5EX1dPUksgICAgID0gMTsKKworLyoqCisgKiBBZGQgYW4gaWRsZSB0
YXNrIHRvIHRoaXMgc2NoZWR1bGVyLgorICogQHBhcmFtIHtpbnR9IGlkIHRoZSBpZGVudGl0eSBv
ZiB0aGUgdGFzaworICogQHBhcmFtIHtpbnR9IHByaW9yaXR5IHRoZSB0YXNrJ3MgcHJpb3JpdHkK
KyAqIEBwYXJhbSB7UGFja2V0fSBxdWV1ZSB0aGUgcXVldWUgb2Ygd29yayB0byBiZSBwcm9jZXNz
ZWQgYnkgdGhlIHRhc2sKKyAqIEBwYXJhbSB7aW50fSBjb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVz
IHRvIHNjaGVkdWxlIHRoZSB0YXNrCisgKi8KK1NjaGVkdWxlci5wcm90b3R5cGUuYWRkSWRsZVRh
c2sgPSBmdW5jdGlvbiAoaWQsIHByaW9yaXR5LCBxdWV1ZSwgY291bnQpIHsKKyAgdGhpcy5hZGRS
dW5uaW5nVGFzayhpZCwgcHJpb3JpdHksIHF1ZXVlLCBuZXcgSWRsZVRhc2sodGhpcywgMSwgY291
bnQpKTsKK307CisKKy8qKgorICogQWRkIGEgd29yayB0YXNrIHRvIHRoaXMgc2NoZWR1bGVyLgor
ICogQHBhcmFtIHtpbnR9IGlkIHRoZSBpZGVudGl0eSBvZiB0aGUgdGFzaworICogQHBhcmFtIHtp
bnR9IHByaW9yaXR5IHRoZSB0YXNrJ3MgcHJpb3JpdHkKKyAqIEBwYXJhbSB7UGFja2V0fSBxdWV1
ZSB0aGUgcXVldWUgb2Ygd29yayB0byBiZSBwcm9jZXNzZWQgYnkgdGhlIHRhc2sKKyAqLworU2No
ZWR1bGVyLnByb3RvdHlwZS5hZGRXb3JrZXJUYXNrID0gZnVuY3Rpb24gKGlkLCBwcmlvcml0eSwg
cXVldWUpIHsKKyAgdGhpcy5hZGRUYXNrKGlkLCBwcmlvcml0eSwgcXVldWUsIG5ldyBXb3JrZXJU
YXNrKHRoaXMsIElEX0hBTkRMRVJfQSwgMCkpOworfTsKKworLyoqCisgKiBBZGQgYSBoYW5kbGVy
IHRhc2sgdG8gdGhpcyBzY2hlZHVsZXIuCisgKiBAcGFyYW0ge2ludH0gaWQgdGhlIGlkZW50aXR5
IG9mIHRoZSB0YXNrCisgKiBAcGFyYW0ge2ludH0gcHJpb3JpdHkgdGhlIHRhc2sncyBwcmlvcml0
eQorICogQHBhcmFtIHtQYWNrZXR9IHF1ZXVlIHRoZSBxdWV1ZSBvZiB3b3JrIHRvIGJlIHByb2Nl
c3NlZCBieSB0aGUgdGFzaworICovCitTY2hlZHVsZXIucHJvdG90eXBlLmFkZEhhbmRsZXJUYXNr
ID0gZnVuY3Rpb24gKGlkLCBwcmlvcml0eSwgcXVldWUpIHsKKyAgdGhpcy5hZGRUYXNrKGlkLCBw
cmlvcml0eSwgcXVldWUsIG5ldyBIYW5kbGVyVGFzayh0aGlzKSk7Cit9OworCisvKioKKyAqIEFk
ZCBhIGhhbmRsZXIgdGFzayB0byB0aGlzIHNjaGVkdWxlci4KKyAqIEBwYXJhbSB7aW50fSBpZCB0
aGUgaWRlbnRpdHkgb2YgdGhlIHRhc2sKKyAqIEBwYXJhbSB7aW50fSBwcmlvcml0eSB0aGUgdGFz
aydzIHByaW9yaXR5CisgKiBAcGFyYW0ge1BhY2tldH0gcXVldWUgdGhlIHF1ZXVlIG9mIHdvcmsg
dG8gYmUgcHJvY2Vzc2VkIGJ5IHRoZSB0YXNrCisgKi8KK1NjaGVkdWxlci5wcm90b3R5cGUuYWRk
RGV2aWNlVGFzayA9IGZ1bmN0aW9uIChpZCwgcHJpb3JpdHksIHF1ZXVlKSB7CisgIHRoaXMuYWRk
VGFzayhpZCwgcHJpb3JpdHksIHF1ZXVlLCBuZXcgRGV2aWNlVGFzayh0aGlzKSkKK307CisKKy8q
KgorICogQWRkIHRoZSBzcGVjaWZpZWQgdGFzayBhbmQgbWFyayBpdCBhcyBydW5uaW5nLgorICog
QHBhcmFtIHtpbnR9IGlkIHRoZSBpZGVudGl0eSBvZiB0aGUgdGFzaworICogQHBhcmFtIHtpbnR9
IHByaW9yaXR5IHRoZSB0YXNrJ3MgcHJpb3JpdHkKKyAqIEBwYXJhbSB7UGFja2V0fSBxdWV1ZSB0
aGUgcXVldWUgb2Ygd29yayB0byBiZSBwcm9jZXNzZWQgYnkgdGhlIHRhc2sKKyAqIEBwYXJhbSB7
VGFza30gdGFzayB0aGUgdGFzayB0byBhZGQKKyAqLworU2NoZWR1bGVyLnByb3RvdHlwZS5hZGRS
dW5uaW5nVGFzayA9IGZ1bmN0aW9uIChpZCwgcHJpb3JpdHksIHF1ZXVlLCB0YXNrKSB7CisgIHRo
aXMuYWRkVGFzayhpZCwgcHJpb3JpdHksIHF1ZXVlLCB0YXNrKTsKKyAgdGhpcy5jdXJyZW50VGNi
LnNldFJ1bm5pbmcoKTsKK307CisKKy8qKgorICogQWRkIHRoZSBzcGVjaWZpZWQgdGFzayB0byB0
aGlzIHNjaGVkdWxlci4KKyAqIEBwYXJhbSB7aW50fSBpZCB0aGUgaWRlbnRpdHkgb2YgdGhlIHRh
c2sKKyAqIEBwYXJhbSB7aW50fSBwcmlvcml0eSB0aGUgdGFzaydzIHByaW9yaXR5CisgKiBAcGFy
YW0ge1BhY2tldH0gcXVldWUgdGhlIHF1ZXVlIG9mIHdvcmsgdG8gYmUgcHJvY2Vzc2VkIGJ5IHRo
ZSB0YXNrCisgKiBAcGFyYW0ge1Rhc2t9IHRhc2sgdGhlIHRhc2sgdG8gYWRkCisgKi8KK1NjaGVk
dWxlci5wcm90b3R5cGUuYWRkVGFzayA9IGZ1bmN0aW9uIChpZCwgcHJpb3JpdHksIHF1ZXVlLCB0
YXNrKSB7CisgIHRoaXMuY3VycmVudFRjYiA9IG5ldyBUYXNrQ29udHJvbEJsb2NrKHRoaXMubGlz
dCwgaWQsIHByaW9yaXR5LCBxdWV1ZSwgdGFzayk7CisgIHRoaXMubGlzdCA9IHRoaXMuY3VycmVu
dFRjYjsKKyAgdGhpcy5ibG9ja3NbaWRdID0gdGhpcy5jdXJyZW50VGNiOworfTsKKworLyoqCisg
KiBFeGVjdXRlIHRoZSB0YXNrcyBtYW5hZ2VkIGJ5IHRoaXMgc2NoZWR1bGVyLgorICovCitTY2hl
ZHVsZXIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKCkgeworICB0aGlzLmN1cnJlbnRU
Y2IgPSB0aGlzLmxpc3Q7CisgIHdoaWxlICh0aGlzLmN1cnJlbnRUY2IgIT0gbnVsbCkgeworICAg
IGlmICh0aGlzLmN1cnJlbnRUY2IuaXNIZWxkT3JTdXNwZW5kZWQoKSkgeworICAgICAgdGhpcy5j
dXJyZW50VGNiID0gdGhpcy5jdXJyZW50VGNiLmxpbms7CisgICAgfSBlbHNlIHsKKyAgICAgIHRo
aXMuY3VycmVudElkID0gdGhpcy5jdXJyZW50VGNiLmlkOworICAgICAgdGhpcy5jdXJyZW50VGNi
ID0gdGhpcy5jdXJyZW50VGNiLnJ1bigpOworICAgIH0KKyAgfQorfTsKKworLyoqCisgKiBSZWxl
YXNlIGEgdGFzayB0aGF0IGlzIGN1cnJlbnRseSBibG9ja2VkIGFuZCByZXR1cm4gdGhlIG5leHQg
YmxvY2sgdG8gcnVuLgorICogQHBhcmFtIHtpbnR9IGlkIHRoZSBpZCBvZiB0aGUgdGFzayB0byBz
dXNwZW5kCisgKi8KK1NjaGVkdWxlci5wcm90b3R5cGUucmVsZWFzZSA9IGZ1bmN0aW9uIChpZCkg
eworICB2YXIgdGNiID0gdGhpcy5ibG9ja3NbaWRdOworICBpZiAodGNiID09IG51bGwpIHJldHVy
biB0Y2I7CisgIHRjYi5tYXJrQXNOb3RIZWxkKCk7CisgIGlmICh0Y2IucHJpb3JpdHkgPiB0aGlz
LmN1cnJlbnRUY2IucHJpb3JpdHkpIHsKKyAgICByZXR1cm4gdGNiOworICB9IGVsc2UgeworICAg
IHJldHVybiB0aGlzLmN1cnJlbnRUY2I7CisgIH0KK307CisKKy8qKgorICogQmxvY2sgdGhlIGN1
cnJlbnRseSBleGVjdXRpbmcgdGFzayBhbmQgcmV0dXJuIHRoZSBuZXh0IHRhc2sgY29udHJvbCBi
bG9jaworICogdG8gcnVuLiAgVGhlIGJsb2NrZWQgdGFzayB3aWxsIG5vdCBiZSBtYWRlIHJ1bm5h
YmxlIHVudGlsIGl0IGlzIGV4cGxpY2l0bHkKKyAqIHJlbGVhc2VkLCBldmVuIGlmIG5ldyB3b3Jr
IGlzIGFkZGVkIHRvIGl0LgorICovCitTY2hlZHVsZXIucHJvdG90eXBlLmhvbGRDdXJyZW50ID0g
ZnVuY3Rpb24gKCkgeworICB0aGlzLmhvbGRDb3VudCsrOworICB0aGlzLmN1cnJlbnRUY2IubWFy
a0FzSGVsZCgpOworICByZXR1cm4gdGhpcy5jdXJyZW50VGNiLmxpbms7Cit9OworCisvKioKKyAq
IFN1c3BlbmQgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgdGFzayBhbmQgcmV0dXJuIHRoZSBuZXh0
IHRhc2sgY29udHJvbCBibG9jaworICogdG8gcnVuLiAgSWYgbmV3IHdvcmsgaXMgYWRkZWQgdG8g
dGhlIHN1c3BlbmRlZCB0YXNrIGl0IHdpbGwgYmUgbWFkZSBydW5uYWJsZS4KKyAqLworU2NoZWR1
bGVyLnByb3RvdHlwZS5zdXNwZW5kQ3VycmVudCA9IGZ1bmN0aW9uICgpIHsKKyAgdGhpcy5jdXJy
ZW50VGNiLm1hcmtBc1N1c3BlbmRlZCgpOworICByZXR1cm4gdGhpcy5jdXJyZW50VGNiOworfTsK
KworLyoqCisgKiBBZGQgdGhlIHNwZWNpZmllZCBwYWNrZXQgdG8gdGhlIGVuZCBvZiB0aGUgd29y
a2xpc3QgdXNlZCBieSB0aGUgdGFzaworICogYXNzb2NpYXRlZCB3aXRoIHRoZSBwYWNrZXQgYW5k
IG1ha2UgdGhlIHRhc2sgcnVubmFibGUgaWYgaXQgaXMgY3VycmVudGx5CisgKiBzdXNwZW5kZWQu
CisgKiBAcGFyYW0ge1BhY2tldH0gcGFja2V0IHRoZSBwYWNrZXQgdG8gYWRkCisgKi8KK1NjaGVk
dWxlci5wcm90b3R5cGUucXVldWUgPSBmdW5jdGlvbiAocGFja2V0KSB7CisgIHZhciB0ID0gdGhp
cy5ibG9ja3NbcGFja2V0LmlkXTsKKyAgaWYgKHQgPT0gbnVsbCkgcmV0dXJuIHQ7CisgIHRoaXMu
cXVldWVDb3VudCsrOworICBwYWNrZXQubGluayA9IG51bGw7CisgIHBhY2tldC5pZCA9IHRoaXMu
Y3VycmVudElkOworICByZXR1cm4gdC5jaGVja1ByaW9yaXR5QWRkKHRoaXMuY3VycmVudFRjYiwg
cGFja2V0KTsKK307CisKKy8qKgorICogQSB0YXNrIGNvbnRyb2wgYmxvY2sgbWFuYWdlcyBhIHRh
c2sgYW5kIHRoZSBxdWV1ZSBvZiB3b3JrIHBhY2thZ2VzIGFzc29jaWF0ZWQKKyAqIHdpdGggaXQu
CisgKiBAcGFyYW0ge1Rhc2tDb250cm9sQmxvY2t9IGxpbmsgdGhlIHByZWNlZGluZyBibG9jayBp
biB0aGUgbGlua2VkIGJsb2NrIGxpc3QKKyAqIEBwYXJhbSB7aW50fSBpZCB0aGUgaWQgb2YgdGhp
cyBibG9jaworICogQHBhcmFtIHtpbnR9IHByaW9yaXR5IHRoZSBwcmlvcml0eSBvZiB0aGlzIGJs
b2NrCisgKiBAcGFyYW0ge1BhY2tldH0gcXVldWUgdGhlIHF1ZXVlIG9mIHBhY2thZ2VzIHRvIGJl
IHByb2Nlc3NlZCBieSB0aGUgdGFzaworICogQHBhcmFtIHtUYXNrfSB0YXNrIHRoZSB0YXNrCisg
KiBAY29uc3RydWN0b3IKKyAqLworZnVuY3Rpb24gVGFza0NvbnRyb2xCbG9jayhsaW5rLCBpZCwg
cHJpb3JpdHksIHF1ZXVlLCB0YXNrKSB7CisgIHRoaXMubGluayA9IGxpbms7CisgIHRoaXMuaWQg
PSBpZDsKKyAgdGhpcy5wcmlvcml0eSA9IHByaW9yaXR5OworICB0aGlzLnF1ZXVlID0gcXVldWU7
CisgIHRoaXMudGFzayA9IHRhc2s7CisgIGlmIChxdWV1ZSA9PSBudWxsKSB7CisgICAgdGhpcy5z
dGF0ZSA9IFNUQVRFX1NVU1BFTkRFRDsKKyAgfSBlbHNlIHsKKyAgICB0aGlzLnN0YXRlID0gU1RB
VEVfU1VTUEVOREVEX1JVTk5BQkxFOworICB9Cit9CisKKy8qKgorICogVGhlIHRhc2sgaXMgcnVu
bmluZyBhbmQgaXMgY3VycmVudGx5IHNjaGVkdWxlZC4KKyAqLwordmFyIFNUQVRFX1JVTk5JTkcg
PSAwOworCisvKioKKyAqIFRoZSB0YXNrIGhhcyBwYWNrZXRzIGxlZnQgdG8gcHJvY2Vzcy4KKyAq
LwordmFyIFNUQVRFX1JVTk5BQkxFID0gMTsKKworLyoqCisgKiBUaGUgdGFzayBpcyBub3QgY3Vy
cmVudGx5IHJ1bm5pbmcuICBUaGUgdGFzayBpcyBub3QgYmxvY2tlZCBhcyBzdWNoIGFuZCBtYXkK
KyogYmUgc3RhcnRlZCBieSB0aGUgc2NoZWR1bGVyLgorICovCit2YXIgU1RBVEVfU1VTUEVOREVE
ID0gMjsKKworLyoqCisgKiBUaGUgdGFzayBpcyBibG9ja2VkIGFuZCBjYW5ub3QgYmUgcnVuIHVu
dGlsIGl0IGlzIGV4cGxpY2l0bHkgcmVsZWFzZWQuCisgKi8KK3ZhciBTVEFURV9IRUxEID0gNDsK
KwordmFyIFNUQVRFX1NVU1BFTkRFRF9SVU5OQUJMRSA9IFNUQVRFX1NVU1BFTkRFRCB8IFNUQVRF
X1JVTk5BQkxFOwordmFyIFNUQVRFX05PVF9IRUxEID0gflNUQVRFX0hFTEQ7CisKK1Rhc2tDb250
cm9sQmxvY2sucHJvdG90eXBlLnNldFJ1bm5pbmcgPSBmdW5jdGlvbiAoKSB7CisgIHRoaXMuc3Rh
dGUgPSBTVEFURV9SVU5OSU5HOworfTsKKworVGFza0NvbnRyb2xCbG9jay5wcm90b3R5cGUubWFy
a0FzTm90SGVsZCA9IGZ1bmN0aW9uICgpIHsKKyAgdGhpcy5zdGF0ZSA9IHRoaXMuc3RhdGUgJiBT
VEFURV9OT1RfSEVMRDsKK307CisKK1Rhc2tDb250cm9sQmxvY2sucHJvdG90eXBlLm1hcmtBc0hl
bGQgPSBmdW5jdGlvbiAoKSB7CisgIHRoaXMuc3RhdGUgPSB0aGlzLnN0YXRlIHwgU1RBVEVfSEVM
RDsKK307CisKK1Rhc2tDb250cm9sQmxvY2sucHJvdG90eXBlLmlzSGVsZE9yU3VzcGVuZGVkID0g
ZnVuY3Rpb24gKCkgeworICByZXR1cm4gKHRoaXMuc3RhdGUgJiBTVEFURV9IRUxEKSAhPSAwIHx8
ICh0aGlzLnN0YXRlID09IFNUQVRFX1NVU1BFTkRFRCk7Cit9OworCitUYXNrQ29udHJvbEJsb2Nr
LnByb3RvdHlwZS5tYXJrQXNTdXNwZW5kZWQgPSBmdW5jdGlvbiAoKSB7CisgIHRoaXMuc3RhdGUg
PSB0aGlzLnN0YXRlIHwgU1RBVEVfU1VTUEVOREVEOworfTsKKworVGFza0NvbnRyb2xCbG9jay5w
cm90b3R5cGUubWFya0FzUnVubmFibGUgPSBmdW5jdGlvbiAoKSB7CisgIHRoaXMuc3RhdGUgPSB0
aGlzLnN0YXRlIHwgU1RBVEVfUlVOTkFCTEU7Cit9OworCisvKioKKyAqIFJ1bnMgdGhpcyB0YXNr
LCBpZiBpdCBpcyByZWFkeSB0byBiZSBydW4sIGFuZCByZXR1cm5zIHRoZSBuZXh0IHRhc2sgdG8g
cnVuLgorICovCitUYXNrQ29udHJvbEJsb2NrLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7
CisgIHZhciBwYWNrZXQ7CisgIGlmICh0aGlzLnN0YXRlID09IFNUQVRFX1NVU1BFTkRFRF9SVU5O
QUJMRSkgeworICAgIHBhY2tldCA9IHRoaXMucXVldWU7CisgICAgdGhpcy5xdWV1ZSA9IHBhY2tl
dC5saW5rOworICAgIGlmICh0aGlzLnF1ZXVlID09IG51bGwpIHsKKyAgICAgIHRoaXMuc3RhdGUg
PSBTVEFURV9SVU5OSU5HOworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLnN0YXRlID0gU1RBVEVf
UlVOTkFCTEU7CisgICAgfQorICB9IGVsc2UgeworICAgIHBhY2tldCA9IG51bGw7CisgIH0KKyAg
cmV0dXJuIHRoaXMudGFzay5ydW4ocGFja2V0KTsKK307CisKKy8qKgorICogQWRkcyBhIHBhY2tl
dCB0byB0aGUgd29ya2xpc3Qgb2YgdGhpcyBibG9jaydzIHRhc2ssIG1hcmtzIHRoaXMgYXMgcnVu
bmFibGUgaWYKKyAqIG5lY2Vzc2FyeSwgYW5kIHJldHVybnMgdGhlIG5leHQgcnVubmFibGUgb2Jq
ZWN0IHRvIHJ1biAodGhlIG9uZQorICogd2l0aCB0aGUgaGlnaGVzdCBwcmlvcml0eSkuCisgKi8K
K1Rhc2tDb250cm9sQmxvY2sucHJvdG90eXBlLmNoZWNrUHJpb3JpdHlBZGQgPSBmdW5jdGlvbiAo
dGFzaywgcGFja2V0KSB7CisgIGlmICh0aGlzLnF1ZXVlID09IG51bGwpIHsKKyAgICB0aGlzLnF1
ZXVlID0gcGFja2V0OworICAgIHRoaXMubWFya0FzUnVubmFibGUoKTsKKyAgICBpZiAodGhpcy5w
cmlvcml0eSA+IHRhc2sucHJpb3JpdHkpIHJldHVybiB0aGlzOworICB9IGVsc2UgeworICAgIHRo
aXMucXVldWUgPSBwYWNrZXQuYWRkVG8odGhpcy5xdWV1ZSk7CisgIH0KKyAgcmV0dXJuIHRhc2s7
Cit9OworCitUYXNrQ29udHJvbEJsb2NrLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgp
IHsKKyAgcmV0dXJuICJ0Y2IgeyAiICsgdGhpcy50YXNrICsgIkAiICsgdGhpcy5zdGF0ZSArICIg
fSI7Cit9OworCisvKioKKyAqIEFuIGlkbGUgdGFzayBkb2Vzbid0IGRvIGFueSB3b3JrIGl0c2Vs
ZiBidXQgY3ljbGVzIGNvbnRyb2wgYmV0d2VlbiB0aGUgdHdvCisgKiBkZXZpY2UgdGFza3MuCisg
KiBAcGFyYW0ge1NjaGVkdWxlcn0gc2NoZWR1bGVyIHRoZSBzY2hlZHVsZXIgdGhhdCBtYW5hZ2Vz
IHRoaXMgdGFzaworICogQHBhcmFtIHtpbnR9IHYxIGEgc2VlZCB2YWx1ZSB0aGF0IGNvbnRyb2xz
IGhvdyB0aGUgZGV2aWNlIHRhc2tzIGFyZSBzY2hlZHVsZWQKKyAqIEBwYXJhbSB7aW50fSBjb3Vu
dCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoaXMgdGFzayBzaG91bGQgYmUgc2NoZWR1bGVkCisgKiBA
Y29uc3RydWN0b3IKKyAqLworZnVuY3Rpb24gSWRsZVRhc2soc2NoZWR1bGVyLCB2MSwgY291bnQp
IHsKKyAgdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7CisgIHRoaXMudjEgPSB2MTsKKyAgdGhp
cy5jb3VudCA9IGNvdW50OworfQorCitJZGxlVGFzay5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24g
KHBhY2tldCkgeworICB0aGlzLmNvdW50LS07CisgIGlmICh0aGlzLmNvdW50ID09IDApIHJldHVy
biB0aGlzLnNjaGVkdWxlci5ob2xkQ3VycmVudCgpOworICBpZiAoKHRoaXMudjEgJiAxKSA9PSAw
KSB7CisgICAgdGhpcy52MSA9IHRoaXMudjEgPj4gMTsKKyAgICByZXR1cm4gdGhpcy5zY2hlZHVs
ZXIucmVsZWFzZShJRF9ERVZJQ0VfQSk7CisgIH0gZWxzZSB7CisgICAgdGhpcy52MSA9ICh0aGlz
LnYxID4+IDEpIF4gMHhEMDA4OworICAgIHJldHVybiB0aGlzLnNjaGVkdWxlci5yZWxlYXNlKElE
X0RFVklDRV9CKTsKKyAgfQorfTsKKworSWRsZVRhc2sucHJvdG90eXBlLnRvU3RyaW5nID0gZnVu
Y3Rpb24gKCkgeworICByZXR1cm4gIklkbGVUYXNrIgorfTsKKworLyoqCisgKiBBIHRhc2sgdGhh
dCBzdXNwZW5kcyBpdHNlbGYgYWZ0ZXIgZWFjaCB0aW1lIGl0IGhhcyBiZWVuIHJ1biB0byBzaW11
bGF0ZQorICogd2FpdGluZyBmb3IgZGF0YSBmcm9tIGFuIGV4dGVybmFsIGRldmljZS4KKyAqIEBw
YXJhbSB7U2NoZWR1bGVyfSBzY2hlZHVsZXIgdGhlIHNjaGVkdWxlciB0aGF0IG1hbmFnZXMgdGhp
cyB0YXNrCisgKiBAY29uc3RydWN0b3IKKyAqLworZnVuY3Rpb24gRGV2aWNlVGFzayhzY2hlZHVs
ZXIpIHsKKyAgdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7CisgIHRoaXMudjEgPSBudWxsOwor
fQorCitEZXZpY2VUYXNrLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAocGFja2V0KSB7CisgIGlm
IChwYWNrZXQgPT0gbnVsbCkgeworICAgIGlmICh0aGlzLnYxID09IG51bGwpIHJldHVybiB0aGlz
LnNjaGVkdWxlci5zdXNwZW5kQ3VycmVudCgpOworICAgIHZhciB2ID0gdGhpcy52MTsKKyAgICB0
aGlzLnYxID0gbnVsbDsKKyAgICByZXR1cm4gdGhpcy5zY2hlZHVsZXIucXVldWUodik7CisgIH0g
ZWxzZSB7CisgICAgdGhpcy52MSA9IHBhY2tldDsKKyAgICByZXR1cm4gdGhpcy5zY2hlZHVsZXIu
aG9sZEN1cnJlbnQoKTsKKyAgfQorfTsKKworRGV2aWNlVGFzay5wcm90b3R5cGUudG9TdHJpbmcg
PSBmdW5jdGlvbiAoKSB7CisgIHJldHVybiAiRGV2aWNlVGFzayI7Cit9OworCisvKioKKyAqIEEg
dGFzayB0aGF0IG1hbmlwdWxhdGVzIHdvcmsgcGFja2V0cy4KKyAqIEBwYXJhbSB7U2NoZWR1bGVy
fSBzY2hlZHVsZXIgdGhlIHNjaGVkdWxlciB0aGF0IG1hbmFnZXMgdGhpcyB0YXNrCisgKiBAcGFy
YW0ge2ludH0gdjEgYSBzZWVkIHVzZWQgdG8gc3BlY2lmeSBob3cgd29yayBwYWNrZXRzIGFyZSBt
YW5pcHVsYXRlZAorICogQHBhcmFtIHtpbnR9IHYyIGFub3RoZXIgc2VlZCB1c2VkIHRvIHNwZWNp
ZnkgaG93IHdvcmsgcGFja2V0cyBhcmUgbWFuaXB1bGF0ZWQKKyAqIEBjb25zdHJ1Y3RvcgorICov
CitmdW5jdGlvbiBXb3JrZXJUYXNrKHNjaGVkdWxlciwgdjEsIHYyKSB7CisgIHRoaXMuc2NoZWR1
bGVyID0gc2NoZWR1bGVyOworICB0aGlzLnYxID0gdjE7CisgIHRoaXMudjIgPSB2MjsKK30KKwor
V29ya2VyVGFzay5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKHBhY2tldCkgeworICBpZiAocGFj
a2V0ID09IG51bGwpIHsKKyAgICByZXR1cm4gdGhpcy5zY2hlZHVsZXIuc3VzcGVuZEN1cnJlbnQo
KTsKKyAgfSBlbHNlIHsKKyAgICBpZiAodGhpcy52MSA9PSBJRF9IQU5ETEVSX0EpIHsKKyAgICAg
IHRoaXMudjEgPSBJRF9IQU5ETEVSX0I7CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMudjEgPSBJ
RF9IQU5ETEVSX0E7CisgICAgfQorICAgIHBhY2tldC5pZCA9IHRoaXMudjE7CisgICAgcGFja2V0
LmExID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IERBVEFfU0laRTsgaSsrKSB7CisgICAg
ICB0aGlzLnYyKys7CisgICAgICBpZiAodGhpcy52MiA+IDI2KSB0aGlzLnYyID0gMTsKKyAgICAg
IHBhY2tldC5hMltpXSA9IHRoaXMudjI7CisgICAgfQorICAgIHJldHVybiB0aGlzLnNjaGVkdWxl
ci5xdWV1ZShwYWNrZXQpOworICB9Cit9OworCitXb3JrZXJUYXNrLnByb3RvdHlwZS50b1N0cmlu
ZyA9IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJuICJXb3JrZXJUYXNrIjsKK307CisKKy8qKgorICog
QSB0YXNrIHRoYXQgbWFuaXB1bGF0ZXMgd29yayBwYWNrZXRzIGFuZCB0aGVuIHN1c3BlbmRzIGl0
c2VsZi4KKyAqIEBwYXJhbSB7U2NoZWR1bGVyfSBzY2hlZHVsZXIgdGhlIHNjaGVkdWxlciB0aGF0
IG1hbmFnZXMgdGhpcyB0YXNrCisgKiBAY29uc3RydWN0b3IKKyAqLworZnVuY3Rpb24gSGFuZGxl
clRhc2soc2NoZWR1bGVyKSB7CisgIHRoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyOworICB0aGlz
LnYxID0gbnVsbDsKKyAgdGhpcy52MiA9IG51bGw7Cit9CisKK0hhbmRsZXJUYXNrLnByb3RvdHlw
ZS5ydW4gPSBmdW5jdGlvbiAocGFja2V0KSB7CisgIGlmIChwYWNrZXQgIT0gbnVsbCkgeworICAg
IGlmIChwYWNrZXQua2luZCA9PSBLSU5EX1dPUkspIHsKKyAgICAgIHRoaXMudjEgPSBwYWNrZXQu
YWRkVG8odGhpcy52MSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMudjIgPSBwYWNrZXQuYWRk
VG8odGhpcy52Mik7CisgICAgfQorICB9CisgIGlmICh0aGlzLnYxICE9IG51bGwpIHsKKyAgICB2
YXIgY291bnQgPSB0aGlzLnYxLmExOworICAgIHZhciB2OworICAgIGlmIChjb3VudCA8IERBVEFf
U0laRSkgeworICAgICAgaWYgKHRoaXMudjIgIT0gbnVsbCkgeworICAgICAgICB2ID0gdGhpcy52
MjsKKyAgICAgICAgdGhpcy52MiA9IHRoaXMudjIubGluazsKKyAgICAgICAgdi5hMSA9IHRoaXMu
djEuYTJbY291bnRdOworICAgICAgICB0aGlzLnYxLmExID0gY291bnQgKyAxOworICAgICAgICBy
ZXR1cm4gdGhpcy5zY2hlZHVsZXIucXVldWUodik7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgIHYgPSB0aGlzLnYxOworICAgICAgdGhpcy52MSA9IHRoaXMudjEubGluazsKKyAgICAgIHJl
dHVybiB0aGlzLnNjaGVkdWxlci5xdWV1ZSh2KTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHRoaXMu
c2NoZWR1bGVyLnN1c3BlbmRDdXJyZW50KCk7Cit9OworCitIYW5kbGVyVGFzay5wcm90b3R5cGUu
dG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7CisgIHJldHVybiAiSGFuZGxlclRhc2siOworfTsKKwor
LyogLS0tICoKKyAqIFAgYSBjIGsgZSB0CisgKiAtLS0gKi8KKwordmFyIERBVEFfU0laRSA9IDQ7
CisKKy8qKgorICogQSBzaW1wbGUgcGFja2FnZSBvZiBkYXRhIHRoYXQgaXMgbWFuaXB1bGF0ZWQg
YnkgdGhlIHRhc2tzLiAgVGhlIGV4YWN0IGxheW91dAorICogb2YgdGhlIHBheWxvYWQgZGF0YSBj
YXJyaWVkIGJ5IGEgcGFja2V0IGlzIG5vdCBpbXBvcnRhaW50LCBhbmQgbmVpdGhlciBpcyB0aGUK
KyAqIG5hdHVyZSBvZiB0aGUgd29yayBwZXJmb3JtZWQgb24gcGFja2V0cyBieSB0aGUgdGFza3Mu
CisgKgorICogQmVzaWRlcyBjYXJyeWluZyBkYXRhLCBwYWNrZXRzIGZvcm0gbGlua2VkIGxpc3Rz
IGFuZCBhcmUgaGVuY2UgdXNlZCBib3RoIGFzCisgKiBkYXRhIGFuZCB3b3JrbGlzdHMuCisgKiBA
cGFyYW0ge1BhY2tldH0gbGluayB0aGUgdGFpbCBvZiB0aGUgbGlua2VkIGxpc3Qgb2YgcGFja2V0
cworICogQHBhcmFtIHtpbnR9IGlkIGFuIElEIGZvciB0aGlzIHBhY2tldAorICogQHBhcmFtIHtp
bnR9IGtpbmQgdGhlIHR5cGUgb2YgdGhpcyBwYWNrZXQKKyAqIEBjb25zdHJ1Y3RvcgorICovCitm
dW5jdGlvbiBQYWNrZXQobGluaywgaWQsIGtpbmQpIHsKKyAgdGhpcy5saW5rID0gbGluazsKKyAg
dGhpcy5pZCA9IGlkOworICB0aGlzLmtpbmQgPSBraW5kOworICB0aGlzLmExID0gMDsKKyAgdGhp
cy5hMiA9IG5ldyBBcnJheShEQVRBX1NJWkUpOworfQorCisvKioKKyAqIEFkZCB0aGlzIHBhY2tl
dCB0byB0aGUgZW5kIG9mIGEgd29ya2xpc3QsIGFuZCByZXR1cm4gdGhlIHdvcmtsaXN0LgorICog
QHBhcmFtIHtQYWNrZXR9IHF1ZXVlIHRoZSB3b3JrbGlzdCB0byBhZGQgdGhpcyBwYWNrZXQgdG8K
KyAqLworUGFja2V0LnByb3RvdHlwZS5hZGRUbyA9IGZ1bmN0aW9uIChxdWV1ZSkgeworICB0aGlz
LmxpbmsgPSBudWxsOworICBpZiAocXVldWUgPT0gbnVsbCkgcmV0dXJuIHRoaXM7CisgIHZhciBw
ZWVrLCBuZXh0ID0gcXVldWU7CisgIHdoaWxlICgocGVlayA9IG5leHQubGluaykgIT0gbnVsbCkK
KyAgICBuZXh0ID0gcGVlazsKKyAgbmV4dC5saW5rID0gdGhpczsKKyAgcmV0dXJuIHF1ZXVlOwor
fTsKKworUGFja2V0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJu
ICJQYWNrZXQiOworfTsKKworLy8gcnVuUmljaGFyZHMoKTsKSW5kZXg6IFdlYktpdFRvb2xzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDM2
MDgzKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTQgQEAKKzIwMDgtMDktMDQgIENhbWVyb24gWndhcmljaCAgPGN3endhcmljaEB1d2F0ZXJsb28u
Y2E+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVn
IDIwNjE2OiBJbmNvcnBvcmF0ZSBWOCBiZW5jaG1hcmtzIGluIHRlc3RpbmcKKyAgICAgICAgPGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDYxNj4KKworICAgICAgICBB
ZGQgc3VwcG9ydCBmb3IgdGhlIC0tdjggb3B0aW9uIHRvIHJ1bi1zdW5zcGlkZXIuCisKKyAgICAg
ICAgKiBTY3JpcHRzL3J1bi1zdW5zcGlkZXI6CisKIDIwMDgtMDktMDMgIE1hcmsgUm93ZSAgPG1y
b3dlQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3JlIE1hYyBidWlsZCBmaXhlcy4KSW5kZXg6IFdl
YktpdFRvb2xzL1NjcmlwdHMvcnVuLXN1bnNwaWRlcgo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29s
cy9TY3JpcHRzL3J1bi1zdW5zcGlkZXIJKHJldmlzaW9uIDM2MDgyKQorKysgV2ViS2l0VG9vbHMv
U2NyaXB0cy9ydW4tc3Vuc3BpZGVyCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBAIG15
ICRydW5TaGFyayA9IDA7CiBteSAkcnVuU2hhcmsyMCA9IDA7CiBteSAkcnVuU2hhcmtDYWNoZSA9
IDA7CiBteSAkdWJlbmNoID0gMDsKK215ICR2OCA9IDA7CiBteSAkc2V0QmFzZWxpbmUgPSAwOwog
bXkgJHNob3dIZWxwID0gMDsKIG15ICR0ZXN0c1BhdHRlcm47CkBAIC01OCw2ICs1OSw3IEBAIFVz
YWdlOiAkcHJvZ3JhbU5hbWUgW29wdGlvbnNdIFtvcHRpb25zIHQKICAgLS1zaGFyazIwICAgICAg
ICAgTGlrZSAtLXNoYXJrLCBidXQgd2l0aCBhIDIwIG1pY3Jvc2Vjb25kIHNhbXBsaW5nIGludGVy
dmFsCiAgIC0tc2hhcmstY2FjaGUgICAgIExpa2UgLS1zaGFyaywgYnV0IHBlcmZvcm1zIGEgTDIg
Y2FjaGUtbWlzcyBzYW1wbGUgaW5zdGVhZCBvZiB0aW1lIHNhbXBsZQogICAtLXViZW5jaCAgICAg
ICAgICBVc2UgbWljcm9iZW5jaG1hcmsgc3VpdGUgaW5zdGVhZCBvZiByZWd1bGFyIHRlc3RzICh0
byBjaGVjayBmb3IgY29yZSBleGVjdXRpb24gcmVncmVzc2lvbnMpCisgIC0tdjggICAgICAgICAg
ICAgIFVzZSB0aGUgVjggYmVuY2htYXJrIHN1aXRlLgogRU9GCiAKIEdldE9wdGlvbnMoJ3Jvb3Q9
cycgPT4gc3ViIHsgbXkgKCR4LCAkdmFsdWUpID0gQF87ICRyb290ID0gJHZhbHVlOyBzZXRDb25m
aWd1cmF0aW9uUHJvZHVjdERpcihDd2Q6OmFic19wYXRoKCRyb290KSk7IH0sCkBAIC02Nyw2ICs2
OSw3IEBAIEdldE9wdGlvbnMoJ3Jvb3Q9cycgPT4gc3ViIHsgbXkgKCR4LCAkdmEKICAgICAgICAg
ICAgJ3NoYXJrMjAnID0+IFwkcnVuU2hhcmsyMCwKICAgICAgICAgICAgJ3NoYXJrLWNhY2hlJyA9
PiBcJHJ1blNoYXJrQ2FjaGUsCiAgICAgICAgICAgICd1YmVuY2gnID0+IFwkdWJlbmNoLAorICAg
ICAgICAgICAndjgnID0+IFwkdjgsCiAgICAgICAgICAgICd0ZXN0cz1zJyA9PiBcJHRlc3RzUGF0
dGVybiwKICAgICAgICAgICAgJ2hlbHAnID0+IFwkc2hvd0hlbHApOwogCkBAIC0xMjIsNiArMTI1
LDcgQEAgcHVzaCBAYXJncywgIi0tc2hhcmsiIGlmICRydW5TaGFyazsKIHB1c2ggQGFyZ3MsICIt
LXNoYXJrMjAiIGlmICRydW5TaGFyazIwOwogcHVzaCBAYXJncywgIi0tc2hhcmstY2FjaGUiIGlm
ICRydW5TaGFya0NhY2hlOwogcHVzaCBAYXJncywgIi0tdWJlbmNoIiBpZiAkdWJlbmNoOworcHVz
aCBAYXJncywgIi0tdjgiIGlmICR2ODsKIHB1c2ggQGFyZ3MsICItLXRlc3RzIiwgJHRlc3RzUGF0
dGVybiBpZiAkdGVzdHNQYXR0ZXJuOwogCiBleGVjICIuL3N1bnNwaWRlciIsIEBhcmdzOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23165</attachid>
            <date>2008-09-04 04:24:29 -0700</date>
            <delta_ts>2008-09-04 04:26:18 -0700</delta_ts>
            <desc>Revised proposed patch</desc>
            <filename>v8benchmarks.diff</filename>
            <type>text/plain</type>
            <size>400463</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IFN1blNwaWRlci9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU3VuU3BpZGVyL0NoYW5n
ZUxvZwkocmV2aXNpb24gMzYwODMpCisrKyBTdW5TcGlkZXIvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMDgtMDktMDQgIENhbWVyb24gWndhcmljaCAgPGN3endh
cmljaEB1d2F0ZXJsb28uY2E+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQnVnIDIwNjE2OiBJbmNvcnBvcmF0ZSBWOCBiZW5jaG1hcmtzIGluIHRlc3Rp
bmcKKyAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDYx
Nj4KKworICAgICAgICBUaGlzIGlzIGEgZmlyc3QgYXR0ZW1wdCBhdCBydW5uaW5nIHRoZSBWOCBi
ZW5jaG1hcmtzIHdpdGhpbiBTdW5TcGlkZXIsCisgICAgICAgIHdpdGggdGhlIC0tdjggb3B0aW9u
LiBUaGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgaXMgZml4ZWQgZm9yIGVhY2gKKyAgICAgICAgYmVu
Y2htYXJrLCBhbmQgd2FzIGNob3NlbiB0byBtYWtlIGVhY2ggb2YgdGhlIGJlbmNobWFya3MgcnVu
IGJldHdlZW4KKyAgICAgICAgNTAwIG1zIGFuZCA2MDAgbXMgaW4gVjggb24gbXkgbWFjaGluZSwg
YSAyLjE2IEdIeiBNYWNCb29rIFByby4KKworICAgICAgICAqIHN1bnNwaWRlcjoKKyAgICAgICAg
KiB0ZXN0cy9MSVNULVY4OiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy92OC1jcnlwdG8uanM6IEFk
ZGVkLgorICAgICAgICAqIHRlc3RzL3Y4LWRlbHRhYmx1ZS5qczogQWRkZWQuCisgICAgICAgICog
dGVzdHMvdjgtZWFybGV5LWJveWVyLmpzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy92OC1yYXl0
cmFjZS5qczogQWRkZWQuCisgICAgICAgICogdGVzdHMvdjgtcmljaGFyZHMuanM6IEFkZGVkLgor
CiAyMDA4LTA5LTAyICBDYW1lcm9uIFp3YXJpY2ggIDxjd3p3YXJpY2hAdXdhdGVybG9vLmNhPgog
CiAgICAgICAgIE5vdCByZXZpZXdlZC4KSW5kZXg6IFN1blNwaWRlci9zdW5zcGlkZXIKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU3VuU3BpZGVyL3N1bnNwaWRlcgkocmV2aXNpb24gMzYwODIpCisrKyBTdW5TcGlk
ZXIvc3Vuc3BpZGVyCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBAIG15ICRydW5TaGFy
ayA9IDA7CiBteSAkcnVuU2hhcmsyMCA9IDA7CiBteSAkcnVuU2hhcmtDYWNoZSA9IDA7CiBteSAk
dWJlbmNoID0gMDsKK215ICR2OCA9IDA7CiBteSAkanNTaGVsbFBhdGg7CiBteSAkc2V0QmFzZWxp
bmUgPSAwOwogbXkgJHRlc3RzUGF0dGVybjsKQEAgLTU0LDYgKzU1LDcgQEAgVXNhZ2U6ICRwcm9n
cmFtTmFtZSAtLXNoZWxsPVtwYXRoXSBbb3B0aQogICAtLXNoYXJrMjAgICAgICAgICBMaWtlIC0t
c2hhcmssIGJ1dCB3aXRoIGEgMjAgbWljcm9zZWNvbmQgc2FtcGxpbmcgaW50ZXJ2YWwKICAgLS1z
aGFyay1jYWNoZSAgICAgTGlrZSAtLXNoYXJrLCBidXQgcGVyZm9ybXMgYSBMMiBjYWNoZS1taXNz
IHNhbXBsZSBpbnN0ZWFkIG9mIHRpbWUgc2FtcGxlCiAgIC0tdWJlbmNoICAgICAgICAgIFVzZSBt
aWNyb2JlbmNobWFyayBzdWl0ZSBpbnN0ZWFkIG9mIHJlZ3VsYXIgdGVzdHMgKHRvIGNoZWNrIGZv
ciBjb3JlIGV4ZWN1dGlvbiByZWdyZXNzaW9ucykKKyAgLS12OCAgICAgICAgICAgICAgVXNlIHRo
ZSBWOCBiZW5jaG1hcmsgc3VpdGUuCiBFT0YKIAogR2V0T3B0aW9ucygncnVucz1pJyA9PiBcJHRl
c3RSdW5zLApAQCAtNjMsNiArNjUsNyBAQCBHZXRPcHRpb25zKCdydW5zPWknID0+IFwkdGVzdFJ1
bnMsCiAgICAgICAgICAgICdzaGFyazIwJyA9PiBcJHJ1blNoYXJrMjAsCiAgICAgICAgICAgICdz
aGFyay1jYWNoZScgPT4gXCRydW5TaGFya0NhY2hlLAogICAgICAgICAgICAndWJlbmNoJyA9PiBc
JHViZW5jaCwKKyAgICAgICAgICAgJ3Y4JyA9PiBcJHY4LAogICAgICAgICAgICAndGVzdHM9cycg
PT4gXCR0ZXN0c1BhdHRlcm4sCiAgICAgICAgICAgICdoZWxwJyA9PiBcJHNob3dIZWxwKTsKIApA
QCAtMTExLDYgKzExNCw3IEBAIHN1YiBsb2FkVGVzdHNMaXN0KCkKIHsKICAgICBteSAkdGVzdGxp
c3QgPSAiTElTVCI7CiAgICAgJHRlc3RsaXN0ID0gIkxJU1QtVUJFTkNIIiBpZiAoJHViZW5jaCk7
CisgICAgJHRlc3RsaXN0ID0gIkxJU1QtVjgiIGlmICgkdjgpOwogCiAgICAgb3BlbiBURVNUTElT
VCwgIjwiLCAidGVzdHMvJHt0ZXN0bGlzdH0iIG9yIGRpZSAiQ2FuJ3QgZmluZCAuL3Rlc3RzL0xJ
U1QiOwogICAgIHdoaWxlICg8VEVTVExJU1Q+KSB7CkluZGV4OiBTdW5TcGlkZXIvcmVzb3VyY2Vz
L3N1bnNwaWRlci1zdGFuZGFsb25lLWRyaXZlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTdW5TcGlkZXIv
cmVzb3VyY2VzL3N1bnNwaWRlci1zdGFuZGFsb25lLWRyaXZlci5qcwkocmV2aXNpb24gMzYwODIp
CisrKyBTdW5TcGlkZXIvcmVzb3VyY2VzL3N1bnNwaWRlci1zdGFuZGFsb25lLWRyaXZlci5qcwko
d29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBmb3IgKHZhciBqID0gMDsgaiA8IHRlc3Rz
Lmxlbmd0aDsgaisrKSB7CiAgICAgdmFyIHN0YXJ0VGltZSA9IG5ldyBEYXRlOwogICAgIGxvYWQo
dGVzdE5hbWUpOwogICAgIHRpbWVzW2pdID0gbmV3IERhdGUoKSAtIHN0YXJ0VGltZTsKLSAgICBn
YygpOworICAgIC8vIGdjKCk7CiB9CiAKIGZ1bmN0aW9uIHJlY29yZFJlc3VsdHModGVzdHMsIHRp
bWVzKQpJbmRleDogU3VuU3BpZGVyL3Rlc3RzL0xJU1QtVjgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU3VuU3Bp
ZGVyL3Rlc3RzL0xJU1QtVjgJKHJldmlzaW9uIDApCisrKyBTdW5TcGlkZXIvdGVzdHMvTElTVC1W
OAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1IEBACit2OC1jcnlwdG8KK3Y4LWRlbHRhYmx1ZQor
djgtZWFybGV5LWJveWVyCit2OC1yYXl0cmFjZQordjgtcmljaGFyZHMKSW5kZXg6IFN1blNwaWRl
ci90ZXN0cy92OC1jcnlwdG8uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU3VuU3BpZGVyL3Rlc3RzL3Y4LWNy
eXB0by5qcwkocmV2aXNpb24gMCkKKysrIFN1blNwaWRlci90ZXN0cy92OC1jcnlwdG8uanMJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTY4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMy0y
MDA1ICBUb20gV3UKKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBp
cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n
CisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u
IGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo
b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmln
aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUs
IHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwor
ICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv
IHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhl
IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwg
YmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Yg
dGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMtSVMiIEFO
RCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUywgSU1QTElFRCBPUiBP
VEhFUldJU0UsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIEFOWQorICogV0FSUkFOVFkg
T0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgor
ICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRPTSBXVSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFM
LCBJTkNJREVOVEFMLAorICogSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFO
WSBLSU5ELCBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSCisgKiBSRVNVTFRJTkcgRlJPTSBMT1NT
IE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIE9SIE5PVCBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgREFNQUdFLCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJG
T1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICoKKyAqIEluIGFkZGl0aW9uLCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbiBhcHBsaWVzOgorICoKKyAqIEFsbCByZWRpc3RyaWJ1dGlvbnMgbXVzdCBy
ZXRhaW4gYW4gaW50YWN0IGNvcHkgb2YgdGhpcyBjb3B5cmlnaHQgbm90aWNlCisgKiBhbmQgZGlz
Y2xhaW1lci4KKyAqLworCisvLyBCYXNpYyBKYXZhU2NyaXB0IEJOIGxpYnJhcnkgLSBzdWJzZXQg
dXNlZnVsIGZvciBSU0EgZW5jcnlwdGlvbi4KKworLy8gQml0cyBwZXIgZGlnaXQKK3ZhciBkYml0
czsKK3ZhciBCSV9EQjsKK3ZhciBCSV9ETTsKK3ZhciBCSV9EVjsKKwordmFyIEJJX0ZQOwordmFy
IEJJX0ZWOwordmFyIEJJX0YxOwordmFyIEJJX0YyOworCisvLyBKYXZhU2NyaXB0IGVuZ2luZSBh
bmFseXNpcwordmFyIGNhbmFyeSA9IDB4ZGVhZGJlZWZjYWZlOwordmFyIGpfbG0gPSAoKGNhbmFy
eSYweGZmZmZmZik9PTB4ZWZjYWZlKTsKKworLy8gKHB1YmxpYykgQ29uc3RydWN0b3IKK2Z1bmN0
aW9uIEJpZ0ludGVnZXIoYSxiLGMpIHsKKyAgdGhpcy5hcnJheSA9IG5ldyBBcnJheSgpOworICBp
ZihhICE9IG51bGwpCisgICAgaWYoIm51bWJlciIgPT0gdHlwZW9mIGEpIHRoaXMuZnJvbU51bWJl
cihhLGIsYyk7CisgICAgZWxzZSBpZihiID09IG51bGwgJiYgInN0cmluZyIgIT0gdHlwZW9mIGEp
IHRoaXMuZnJvbVN0cmluZyhhLDI1Nik7CisgICAgZWxzZSB0aGlzLmZyb21TdHJpbmcoYSxiKTsK
K30KKworLy8gcmV0dXJuIG5ldywgdW5zZXQgQmlnSW50ZWdlcgorZnVuY3Rpb24gbmJpKCkgeyBy
ZXR1cm4gbmV3IEJpZ0ludGVnZXIobnVsbCk7IH0KKworLy8gYW06IENvbXB1dGUgd19qICs9ICh4
KnRoaXNfaSksIHByb3BhZ2F0ZSBjYXJyaWVzLAorLy8gYyBpcyBpbml0aWFsIGNhcnJ5LCByZXR1
cm5zIGZpbmFsIGNhcnJ5LgorLy8gYyA8IDMqZHZhbHVlLCB4IDwgMipkdmFsdWUsIHRoaXNfaSA8
IGR2YWx1ZQorLy8gV2UgbmVlZCB0byBzZWxlY3QgdGhlIGZhc3Rlc3Qgb25lIHRoYXQgd29ya3Mg
aW4gdGhpcyBlbnZpcm9ubWVudC4KKworLy8gYW0xOiB1c2UgYSBzaW5nbGUgbXVsdCBhbmQgZGl2
aWRlIHRvIGdldCB0aGUgaGlnaCBiaXRzLAorLy8gbWF4IGRpZ2l0IGJpdHMgc2hvdWxkIGJlIDI2
IGJlY2F1c2UKKy8vIG1heCBpbnRlcm5hbCB2YWx1ZSA9IDIqZHZhbHVlXjItMipkdmFsdWUgKDwg
Ml41MykKK2Z1bmN0aW9uIGFtMShpLHgsdyxqLGMsbikgeworICB2YXIgdGhpc19hcnJheSA9IHRo
aXMuYXJyYXk7CisgIHZhciB3X2FycmF5ICAgID0gdy5hcnJheTsKKyAgd2hpbGUoLS1uID49IDAp
IHsKKyAgICB2YXIgdiA9IHgqdGhpc19hcnJheVtpKytdK3dfYXJyYXlbal0rYzsKKyAgICBjID0g
TWF0aC5mbG9vcih2LzB4NDAwMDAwMCk7CisgICAgd19hcnJheVtqKytdID0gdiYweDNmZmZmZmY7
CisgIH0KKyAgcmV0dXJuIGM7Cit9CisKKy8vIGFtMiBhdm9pZHMgYSBiaWcgbXVsdC1hbmQtZXh0
cmFjdCBjb21wbGV0ZWx5LgorLy8gTWF4IGRpZ2l0IGJpdHMgc2hvdWxkIGJlIDw9IDMwIGJlY2F1
c2Ugd2UgZG8gYml0d2lzZSBvcHMKKy8vIG9uIHZhbHVlcyB1cCB0byAyKmhkdmFsdWVeMi1oZHZh
bHVlLTEgKDwgMl4zMSkKK2Z1bmN0aW9uIGFtMihpLHgsdyxqLGMsbikgeworICB2YXIgdGhpc19h
cnJheSA9IHRoaXMuYXJyYXk7CisgIHZhciB3X2FycmF5ICAgID0gdy5hcnJheTsKKyAgdmFyIHhs
ID0geCYweDdmZmYsIHhoID0geD4+MTU7CisgIHdoaWxlKC0tbiA+PSAwKSB7CisgICAgdmFyIGwg
PSB0aGlzX2FycmF5W2ldJjB4N2ZmZjsKKyAgICB2YXIgaCA9IHRoaXNfYXJyYXlbaSsrXT4+MTU7
CisgICAgdmFyIG0gPSB4aCpsK2gqeGw7CisgICAgbCA9IHhsKmwrKChtJjB4N2ZmZik8PDE1KSt3
X2FycmF5W2pdKyhjJjB4M2ZmZmZmZmYpOworICAgIGMgPSAobD4+PjMwKSsobT4+PjE1KSt4aCpo
KyhjPj4+MzApOworICAgIHdfYXJyYXlbaisrXSA9IGwmMHgzZmZmZmZmZjsKKyAgfQorICByZXR1
cm4gYzsKK30KKworLy8gQWx0ZXJuYXRlbHksIHNldCBtYXggZGlnaXQgYml0cyB0byAyOCBzaW5j
ZSBzb21lCisvLyBicm93c2VycyBzbG93IGRvd24gd2hlbiBkZWFsaW5nIHdpdGggMzItYml0IG51
bWJlcnMuCitmdW5jdGlvbiBhbTMoaSx4LHcsaixjLG4pIHsKKyAgdmFyIHRoaXNfYXJyYXkgPSB0
aGlzLmFycmF5OworICB2YXIgd19hcnJheSAgICA9IHcuYXJyYXk7CisKKyAgdmFyIHhsID0geCYw
eDNmZmYsIHhoID0geD4+MTQ7CisgIHdoaWxlKC0tbiA+PSAwKSB7CisgICAgdmFyIGwgPSB0aGlz
X2FycmF5W2ldJjB4M2ZmZjsKKyAgICB2YXIgaCA9IHRoaXNfYXJyYXlbaSsrXT4+MTQ7CisgICAg
dmFyIG0gPSB4aCpsK2gqeGw7CisgICAgbCA9IHhsKmwrKChtJjB4M2ZmZik8PDE0KSt3X2FycmF5
W2pdK2M7CisgICAgYyA9IChsPj4yOCkrKG0+PjE0KSt4aCpoOworICAgIHdfYXJyYXlbaisrXSA9
IGwmMHhmZmZmZmZmOworICB9CisgIHJldHVybiBjOworfQorCisvLyBUaGlzIGlzIHRhaWxvcmVk
IHRvIFZNcyB3aXRoIDItYml0IHRhZ2dpbmcuIEl0IG1ha2VzIHN1cmUKKy8vIHRoYXQgYWxsIHRo
ZSBjb21wdXRhdGlvbnMgc3RheSB3aXRoaW4gdGhlIDI5IGJpdHMgYXZhaWxhYmxlLgorZnVuY3Rp
b24gYW00KGkseCx3LGosYyxuKSB7CisgIHZhciB0aGlzX2FycmF5ID0gdGhpcy5hcnJheTsKKyAg
dmFyIHdfYXJyYXkgICAgPSB3LmFycmF5OworCisgIHZhciB4bCA9IHgmMHgxZmZmLCB4aCA9IHg+
PjEzOworICB3aGlsZSgtLW4gPj0gMCkgeworICAgIHZhciBsID0gdGhpc19hcnJheVtpXSYweDFm
ZmY7CisgICAgdmFyIGggPSB0aGlzX2FycmF5W2krK10+PjEzOworICAgIHZhciBtID0geGgqbCto
KnhsOworICAgIGwgPSB4bCpsKygobSYweDFmZmYpPDwxMykrd19hcnJheVtqXStjOworICAgIGMg
PSAobD4+MjYpKyhtPj4xMykreGgqaDsKKyAgICB3X2FycmF5W2orK10gPSBsJjB4M2ZmZmZmZjsK
KyAgfQorICByZXR1cm4gYzsKK30KKworLy8gYW0zLzI4IGlzIGJlc3QgZm9yIFNNLCBSaGlubywg
YnV0IGFtNC8yNiBpcyBiZXN0IGZvciB2OC4KKy8vIEtlc3RyZWwgKE9wZXJhIDkuNSkgZ2V0cyBp
dHMgYmVzdCByZXN1bHQgd2l0aCBhbTQvMjYuCisvLyBJRTcgZG9lcyA5JSBiZXR0ZXIgd2l0aCBh
bTMvMjggdGhhbiB3aXRoIGFtNC8yNi4KKy8vIEZpcmVmb3ggKFNNKSBnZXRzIDEwJSBmYXN0ZXIg
d2l0aCBhbTMvMjggdGhhbiB3aXRoIGFtNC8yNi4KKworc2V0dXBFbmdpbmUgPSBmdW5jdGlvbihm
biwgYml0cykgeworICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5hbSA9IGZuOworICBkYml0cyA9IGJp
dHM7CisKKyAgQklfREIgPSBkYml0czsKKyAgQklfRE0gPSAoKDE8PGRiaXRzKS0xKTsKKyAgQklf
RFYgPSAoMTw8ZGJpdHMpOworCisgIEJJX0ZQID0gNTI7CisgIEJJX0ZWID0gTWF0aC5wb3coMixC
SV9GUCk7CisgIEJJX0YxID0gQklfRlAtZGJpdHM7CisgIEJJX0YyID0gMipkYml0cy1CSV9GUDsK
K30KKworCisvLyBEaWdpdCBjb252ZXJzaW9ucwordmFyIEJJX1JNID0gIjAxMjM0NTY3ODlhYmNk
ZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7Cit2YXIgQklfUkMgPSBuZXcgQXJyYXkoKTsKK3ZhciBy
cix2djsKK3JyID0gIjAiLmNoYXJDb2RlQXQoMCk7Citmb3IodnYgPSAwOyB2diA8PSA5OyArK3Z2
KSBCSV9SQ1tycisrXSA9IHZ2OworcnIgPSAiYSIuY2hhckNvZGVBdCgwKTsKK2Zvcih2diA9IDEw
OyB2diA8IDM2OyArK3Z2KSBCSV9SQ1tycisrXSA9IHZ2OworcnIgPSAiQSIuY2hhckNvZGVBdCgw
KTsKK2Zvcih2diA9IDEwOyB2diA8IDM2OyArK3Z2KSBCSV9SQ1tycisrXSA9IHZ2OworCitmdW5j
dGlvbiBpbnQyY2hhcihuKSB7IHJldHVybiBCSV9STS5jaGFyQXQobik7IH0KK2Z1bmN0aW9uIGlu
dEF0KHMsaSkgeworICB2YXIgYyA9IEJJX1JDW3MuY2hhckNvZGVBdChpKV07CisgIHJldHVybiAo
Yz09bnVsbCk/LTE6YzsKK30KKworLy8gKHByb3RlY3RlZCkgY29weSB0aGlzIHRvIHIKK2Z1bmN0
aW9uIGJucENvcHlUbyhyKSB7CisgIHZhciB0aGlzX2FycmF5ID0gdGhpcy5hcnJheTsKKyAgdmFy
IHJfYXJyYXkgICAgPSByLmFycmF5OworCisgIGZvcih2YXIgaSA9IHRoaXMudC0xOyBpID49IDA7
IC0taSkgcl9hcnJheVtpXSA9IHRoaXNfYXJyYXlbaV07CisgIHIudCA9IHRoaXMudDsKKyAgci5z
ID0gdGhpcy5zOworfQorCisvLyAocHJvdGVjdGVkKSBzZXQgZnJvbSBpbnRlZ2VyIHZhbHVlIHgs
IC1EViA8PSB4IDwgRFYKK2Z1bmN0aW9uIGJucEZyb21JbnQoeCkgeworICB2YXIgdGhpc19hcnJh
eSA9IHRoaXMuYXJyYXk7CisgIHRoaXMudCA9IDE7CisgIHRoaXMucyA9ICh4PDApPy0xOjA7Cisg
IGlmKHggPiAwKSB0aGlzX2FycmF5WzBdID0geDsKKyAgZWxzZSBpZih4IDwgLTEpIHRoaXNfYXJy
YXlbMF0gPSB4K0RWOworICBlbHNlIHRoaXMudCA9IDA7Cit9CisKKy8vIHJldHVybiBiaWdpbnQg
aW5pdGlhbGl6ZWQgdG8gdmFsdWUKK2Z1bmN0aW9uIG5idihpKSB7IHZhciByID0gbmJpKCk7IHIu
ZnJvbUludChpKTsgcmV0dXJuIHI7IH0KKworLy8gKHByb3RlY3RlZCkgc2V0IGZyb20gc3RyaW5n
IGFuZCByYWRpeAorZnVuY3Rpb24gYm5wRnJvbVN0cmluZyhzLGIpIHsKKyAgdmFyIHRoaXNfYXJy
YXkgPSB0aGlzLmFycmF5OworICB2YXIgazsKKyAgaWYoYiA9PSAxNikgayA9IDQ7CisgIGVsc2Ug
aWYoYiA9PSA4KSBrID0gMzsKKyAgZWxzZSBpZihiID09IDI1NikgayA9IDg7IC8vIGJ5dGUgYXJy
YXkKKyAgZWxzZSBpZihiID09IDIpIGsgPSAxOworICBlbHNlIGlmKGIgPT0gMzIpIGsgPSA1Owor
ICBlbHNlIGlmKGIgPT0gNCkgayA9IDI7CisgIGVsc2UgeyB0aGlzLmZyb21SYWRpeChzLGIpOyBy
ZXR1cm47IH0KKyAgdGhpcy50ID0gMDsKKyAgdGhpcy5zID0gMDsKKyAgdmFyIGkgPSBzLmxlbmd0
aCwgbWkgPSBmYWxzZSwgc2ggPSAwOworICB3aGlsZSgtLWkgPj0gMCkgeworICAgIHZhciB4ID0g
KGs9PTgpP3NbaV0mMHhmZjppbnRBdChzLGkpOworICAgIGlmKHggPCAwKSB7CisgICAgICBpZihz
LmNoYXJBdChpKSA9PSAiLSIpIG1pID0gdHJ1ZTsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAg
ICBtaSA9IGZhbHNlOworICAgIGlmKHNoID09IDApCisgICAgICB0aGlzX2FycmF5W3RoaXMudCsr
XSA9IHg7CisgICAgZWxzZSBpZihzaCtrID4gQklfREIpIHsKKyAgICAgIHRoaXNfYXJyYXlbdGhp
cy50LTFdIHw9ICh4JigoMTw8KEJJX0RCLXNoKSktMSkpPDxzaDsKKyAgICAgIHRoaXNfYXJyYXlb
dGhpcy50KytdID0gKHg+PihCSV9EQi1zaCkpOworICAgIH0KKyAgICBlbHNlCisgICAgICB0aGlz
X2FycmF5W3RoaXMudC0xXSB8PSB4PDxzaDsKKyAgICBzaCArPSBrOworICAgIGlmKHNoID49IEJJ
X0RCKSBzaCAtPSBCSV9EQjsKKyAgfQorICBpZihrID09IDggJiYgKHNbMF0mMHg4MCkgIT0gMCkg
eworICAgIHRoaXMucyA9IC0xOworICAgIGlmKHNoID4gMCkgdGhpc19hcnJheVt0aGlzLnQtMV0g
fD0gKCgxPDwoQklfREItc2gpKS0xKTw8c2g7CisgIH0KKyAgdGhpcy5jbGFtcCgpOworICBpZiht
aSkgQmlnSW50ZWdlci5aRVJPLnN1YlRvKHRoaXMsdGhpcyk7Cit9CisKKy8vIChwcm90ZWN0ZWQp
IGNsYW1wIG9mZiBleGNlc3MgaGlnaCB3b3JkcworZnVuY3Rpb24gYm5wQ2xhbXAoKSB7CisgIHZh
ciB0aGlzX2FycmF5ID0gdGhpcy5hcnJheTsKKyAgdmFyIGMgPSB0aGlzLnMmQklfRE07CisgIHdo
aWxlKHRoaXMudCA+IDAgJiYgdGhpc19hcnJheVt0aGlzLnQtMV0gPT0gYykgLS10aGlzLnQ7Cit9
CisKKy8vIChwdWJsaWMpIHJldHVybiBzdHJpbmcgcmVwcmVzZW50YXRpb24gaW4gZ2l2ZW4gcmFk
aXgKK2Z1bmN0aW9uIGJuVG9TdHJpbmcoYikgeworICB2YXIgdGhpc19hcnJheSA9IHRoaXMuYXJy
YXk7CisgIGlmKHRoaXMucyA8IDApIHJldHVybiAiLSIrdGhpcy5uZWdhdGUoKS50b1N0cmluZyhi
KTsKKyAgdmFyIGs7CisgIGlmKGIgPT0gMTYpIGsgPSA0OworICBlbHNlIGlmKGIgPT0gOCkgayA9
IDM7CisgIGVsc2UgaWYoYiA9PSAyKSBrID0gMTsKKyAgZWxzZSBpZihiID09IDMyKSBrID0gNTsK
KyAgZWxzZSBpZihiID09IDQpIGsgPSAyOworICBlbHNlIHJldHVybiB0aGlzLnRvUmFkaXgoYik7
CisgIHZhciBrbSA9ICgxPDxrKS0xLCBkLCBtID0gZmFsc2UsIHIgPSAiIiwgaSA9IHRoaXMudDsK
KyAgdmFyIHAgPSBCSV9EQi0oaSpCSV9EQiklazsKKyAgaWYoaS0tID4gMCkgeworICAgIGlmKHAg
PCBCSV9EQiAmJiAoZCA9IHRoaXNfYXJyYXlbaV0+PnApID4gMCkgeyBtID0gdHJ1ZTsgciA9IGlu
dDJjaGFyKGQpOyB9CisgICAgd2hpbGUoaSA+PSAwKSB7CisgICAgICBpZihwIDwgaykgeworICAg
ICAgICBkID0gKHRoaXNfYXJyYXlbaV0mKCgxPDxwKS0xKSk8PChrLXApOworICAgICAgICBkIHw9
IHRoaXNfYXJyYXlbLS1pXT4+KHArPUJJX0RCLWspOworICAgICAgfQorICAgICAgZWxzZSB7Cisg
ICAgICAgIGQgPSAodGhpc19hcnJheVtpXT4+KHAtPWspKSZrbTsKKyAgICAgICAgaWYocCA8PSAw
KSB7IHAgKz0gQklfREI7IC0taTsgfQorICAgICAgfQorICAgICAgaWYoZCA+IDApIG0gPSB0cnVl
OworICAgICAgaWYobSkgciArPSBpbnQyY2hhcihkKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIG0/
cjoiMCI7Cit9CisKKy8vIChwdWJsaWMpIC10aGlzCitmdW5jdGlvbiBibk5lZ2F0ZSgpIHsgdmFy
IHIgPSBuYmkoKTsgQmlnSW50ZWdlci5aRVJPLnN1YlRvKHRoaXMscik7IHJldHVybiByOyB9CisK
Ky8vIChwdWJsaWMpIHx0aGlzfAorZnVuY3Rpb24gYm5BYnMoKSB7IHJldHVybiAodGhpcy5zPDAp
P3RoaXMubmVnYXRlKCk6dGhpczsgfQorCisvLyAocHVibGljKSByZXR1cm4gKyBpZiB0aGlzID4g
YSwgLSBpZiB0aGlzIDwgYSwgMCBpZiBlcXVhbAorZnVuY3Rpb24gYm5Db21wYXJlVG8oYSkgewor
ICB2YXIgdGhpc19hcnJheSA9IHRoaXMuYXJyYXk7CisgIHZhciBhX2FycmF5ID0gYS5hcnJheTsK
KworICB2YXIgciA9IHRoaXMucy1hLnM7CisgIGlmKHIgIT0gMCkgcmV0dXJuIHI7CisgIHZhciBp
ID0gdGhpcy50OworICByID0gaS1hLnQ7CisgIGlmKHIgIT0gMCkgcmV0dXJuIHI7CisgIHdoaWxl
KC0taSA+PSAwKSBpZigocj10aGlzX2FycmF5W2ldLWFfYXJyYXlbaV0pICE9IDApIHJldHVybiBy
OworICByZXR1cm4gMDsKK30KKworLy8gcmV0dXJucyBiaXQgbGVuZ3RoIG9mIHRoZSBpbnRlZ2Vy
IHgKK2Z1bmN0aW9uIG5iaXRzKHgpIHsKKyAgdmFyIHIgPSAxLCB0OworICBpZigodD14Pj4+MTYp
ICE9IDApIHsgeCA9IHQ7IHIgKz0gMTY7IH0KKyAgaWYoKHQ9eD4+OCkgIT0gMCkgeyB4ID0gdDsg
ciArPSA4OyB9CisgIGlmKCh0PXg+PjQpICE9IDApIHsgeCA9IHQ7IHIgKz0gNDsgfQorICBpZigo
dD14Pj4yKSAhPSAwKSB7IHggPSB0OyByICs9IDI7IH0KKyAgaWYoKHQ9eD4+MSkgIT0gMCkgeyB4
ID0gdDsgciArPSAxOyB9CisgIHJldHVybiByOworfQorCisvLyAocHVibGljKSByZXR1cm4gdGhl
IG51bWJlciBvZiBiaXRzIGluICJ0aGlzIgorZnVuY3Rpb24gYm5CaXRMZW5ndGgoKSB7CisgIHZh
ciB0aGlzX2FycmF5ID0gdGhpcy5hcnJheTsKKyAgaWYodGhpcy50IDw9IDApIHJldHVybiAwOwor
ICByZXR1cm4gQklfREIqKHRoaXMudC0xKStuYml0cyh0aGlzX2FycmF5W3RoaXMudC0xXV4odGhp
cy5zJkJJX0RNKSk7Cit9CisKKy8vIChwcm90ZWN0ZWQpIHIgPSB0aGlzIDw8IG4qREIKK2Z1bmN0
aW9uIGJucERMU2hpZnRUbyhuLHIpIHsKKyAgdmFyIHRoaXNfYXJyYXkgPSB0aGlzLmFycmF5Owor
ICB2YXIgcl9hcnJheSA9IHIuYXJyYXk7CisgIHZhciBpOworICBmb3IoaSA9IHRoaXMudC0xOyBp
ID49IDA7IC0taSkgcl9hcnJheVtpK25dID0gdGhpc19hcnJheVtpXTsKKyAgZm9yKGkgPSBuLTE7
IGkgPj0gMDsgLS1pKSByX2FycmF5W2ldID0gMDsKKyAgci50ID0gdGhpcy50K247CisgIHIucyA9
IHRoaXMuczsKK30KKworLy8gKHByb3RlY3RlZCkgciA9IHRoaXMgPj4gbipEQgorZnVuY3Rpb24g
Ym5wRFJTaGlmdFRvKG4scikgeworICB2YXIgdGhpc19hcnJheSA9IHRoaXMuYXJyYXk7CisgIHZh
ciByX2FycmF5ID0gci5hcnJheTsKKyAgZm9yKHZhciBpID0gbjsgaSA8IHRoaXMudDsgKytpKSBy
X2FycmF5W2ktbl0gPSB0aGlzX2FycmF5W2ldOworICByLnQgPSBNYXRoLm1heCh0aGlzLnQtbiww
KTsKKyAgci5zID0gdGhpcy5zOworfQorCisvLyAocHJvdGVjdGVkKSByID0gdGhpcyA8PCBuCitm
dW5jdGlvbiBibnBMU2hpZnRUbyhuLHIpIHsKKyAgdmFyIHRoaXNfYXJyYXkgPSB0aGlzLmFycmF5
OworICB2YXIgcl9hcnJheSA9IHIuYXJyYXk7CisgIHZhciBicyA9IG4lQklfREI7CisgIHZhciBj
YnMgPSBCSV9EQi1iczsKKyAgdmFyIGJtID0gKDE8PGNicyktMTsKKyAgdmFyIGRzID0gTWF0aC5m
bG9vcihuL0JJX0RCKSwgYyA9ICh0aGlzLnM8PGJzKSZCSV9ETSwgaTsKKyAgZm9yKGkgPSB0aGlz
LnQtMTsgaSA+PSAwOyAtLWkpIHsKKyAgICByX2FycmF5W2krZHMrMV0gPSAodGhpc19hcnJheVtp
XT4+Y2JzKXxjOworICAgIGMgPSAodGhpc19hcnJheVtpXSZibSk8PGJzOworICB9CisgIGZvcihp
ID0gZHMtMTsgaSA+PSAwOyAtLWkpIHJfYXJyYXlbaV0gPSAwOworICByX2FycmF5W2RzXSA9IGM7
CisgIHIudCA9IHRoaXMudCtkcysxOworICByLnMgPSB0aGlzLnM7CisgIHIuY2xhbXAoKTsKK30K
KworLy8gKHByb3RlY3RlZCkgciA9IHRoaXMgPj4gbgorZnVuY3Rpb24gYm5wUlNoaWZ0VG8obixy
KSB7CisgIHZhciB0aGlzX2FycmF5ID0gdGhpcy5hcnJheTsKKyAgdmFyIHJfYXJyYXkgPSByLmFy
cmF5OworICByLnMgPSB0aGlzLnM7CisgIHZhciBkcyA9IE1hdGguZmxvb3Iobi9CSV9EQik7Cisg
IGlmKGRzID49IHRoaXMudCkgeyByLnQgPSAwOyByZXR1cm47IH0KKyAgdmFyIGJzID0gbiVCSV9E
QjsKKyAgdmFyIGNicyA9IEJJX0RCLWJzOworICB2YXIgYm0gPSAoMTw8YnMpLTE7CisgIHJfYXJy
YXlbMF0gPSB0aGlzX2FycmF5W2RzXT4+YnM7CisgIGZvcih2YXIgaSA9IGRzKzE7IGkgPCB0aGlz
LnQ7ICsraSkgeworICAgIHJfYXJyYXlbaS1kcy0xXSB8PSAodGhpc19hcnJheVtpXSZibSk8PGNi
czsKKyAgICByX2FycmF5W2ktZHNdID0gdGhpc19hcnJheVtpXT4+YnM7CisgIH0KKyAgaWYoYnMg
PiAwKSByX2FycmF5W3RoaXMudC1kcy0xXSB8PSAodGhpcy5zJmJtKTw8Y2JzOworICByLnQgPSB0
aGlzLnQtZHM7CisgIHIuY2xhbXAoKTsKK30KKworLy8gKHByb3RlY3RlZCkgciA9IHRoaXMgLSBh
CitmdW5jdGlvbiBibnBTdWJUbyhhLHIpIHsKKyAgdmFyIHRoaXNfYXJyYXkgPSB0aGlzLmFycmF5
OworICB2YXIgcl9hcnJheSA9IHIuYXJyYXk7CisgIHZhciBhX2FycmF5ID0gYS5hcnJheTsKKyAg
dmFyIGkgPSAwLCBjID0gMCwgbSA9IE1hdGgubWluKGEudCx0aGlzLnQpOworICB3aGlsZShpIDwg
bSkgeworICAgIGMgKz0gdGhpc19hcnJheVtpXS1hX2FycmF5W2ldOworICAgIHJfYXJyYXlbaSsr
XSA9IGMmQklfRE07CisgICAgYyA+Pj0gQklfREI7CisgIH0KKyAgaWYoYS50IDwgdGhpcy50KSB7
CisgICAgYyAtPSBhLnM7CisgICAgd2hpbGUoaSA8IHRoaXMudCkgeworICAgICAgYyArPSB0aGlz
X2FycmF5W2ldOworICAgICAgcl9hcnJheVtpKytdID0gYyZCSV9ETTsKKyAgICAgIGMgPj49IEJJ
X0RCOworICAgIH0KKyAgICBjICs9IHRoaXMuczsKKyAgfQorICBlbHNlIHsKKyAgICBjICs9IHRo
aXMuczsKKyAgICB3aGlsZShpIDwgYS50KSB7CisgICAgICBjIC09IGFfYXJyYXlbaV07CisgICAg
ICByX2FycmF5W2krK10gPSBjJkJJX0RNOworICAgICAgYyA+Pj0gQklfREI7CisgICAgfQorICAg
IGMgLT0gYS5zOworICB9CisgIHIucyA9IChjPDApPy0xOjA7CisgIGlmKGMgPCAtMSkgcl9hcnJh
eVtpKytdID0gQklfRFYrYzsKKyAgZWxzZSBpZihjID4gMCkgcl9hcnJheVtpKytdID0gYzsKKyAg
ci50ID0gaTsKKyAgci5jbGFtcCgpOworfQorCisvLyAocHJvdGVjdGVkKSByID0gdGhpcyAqIGEs
IHIgIT0gdGhpcyxhIChIQUMgMTQuMTIpCisvLyAidGhpcyIgc2hvdWxkIGJlIHRoZSBsYXJnZXIg
b25lIGlmIGFwcHJvcHJpYXRlLgorZnVuY3Rpb24gYm5wTXVsdGlwbHlUbyhhLHIpIHsKKyAgdmFy
IHRoaXNfYXJyYXkgPSB0aGlzLmFycmF5OworICB2YXIgcl9hcnJheSA9IHIuYXJyYXk7CisgIHZh
ciB4ID0gdGhpcy5hYnMoKSwgeSA9IGEuYWJzKCk7CisgIHZhciB5X2FycmF5ID0geS5hcnJheTsK
KworICB2YXIgaSA9IHgudDsKKyAgci50ID0gaSt5LnQ7CisgIHdoaWxlKC0taSA+PSAwKSByX2Fy
cmF5W2ldID0gMDsKKyAgZm9yKGkgPSAwOyBpIDwgeS50OyArK2kpIHJfYXJyYXlbaSt4LnRdID0g
eC5hbSgwLHlfYXJyYXlbaV0scixpLDAseC50KTsKKyAgci5zID0gMDsKKyAgci5jbGFtcCgpOwor
ICBpZih0aGlzLnMgIT0gYS5zKSBCaWdJbnRlZ2VyLlpFUk8uc3ViVG8ocixyKTsKK30KKworLy8g
KHByb3RlY3RlZCkgciA9IHRoaXNeMiwgciAhPSB0aGlzIChIQUMgMTQuMTYpCitmdW5jdGlvbiBi
bnBTcXVhcmVUbyhyKSB7CisgIHZhciB4ID0gdGhpcy5hYnMoKTsKKyAgdmFyIHhfYXJyYXkgPSB4
LmFycmF5OworICB2YXIgcl9hcnJheSA9IHIuYXJyYXk7CisKKyAgdmFyIGkgPSByLnQgPSAyKngu
dDsKKyAgd2hpbGUoLS1pID49IDApIHJfYXJyYXlbaV0gPSAwOworICBmb3IoaSA9IDA7IGkgPCB4
LnQtMTsgKytpKSB7CisgICAgdmFyIGMgPSB4LmFtKGkseF9hcnJheVtpXSxyLDIqaSwwLDEpOwor
ICAgIGlmKChyX2FycmF5W2kreC50XSs9eC5hbShpKzEsMip4X2FycmF5W2ldLHIsMippKzEsYyx4
LnQtaS0xKSkgPj0gQklfRFYpIHsKKyAgICAgIHJfYXJyYXlbaSt4LnRdIC09IEJJX0RWOworICAg
ICAgcl9hcnJheVtpK3gudCsxXSA9IDE7CisgICAgfQorICB9CisgIGlmKHIudCA+IDApIHJfYXJy
YXlbci50LTFdICs9IHguYW0oaSx4X2FycmF5W2ldLHIsMippLDAsMSk7CisgIHIucyA9IDA7Cisg
IHIuY2xhbXAoKTsKK30KKworLy8gKHByb3RlY3RlZCkgZGl2aWRlIHRoaXMgYnkgbSwgcXVvdGll
bnQgYW5kIHJlbWFpbmRlciB0byBxLCByIChIQUMgMTQuMjApCisvLyByICE9IHEsIHRoaXMgIT0g
bS4gIHEgb3IgciBtYXkgYmUgbnVsbC4KK2Z1bmN0aW9uIGJucERpdlJlbVRvKG0scSxyKSB7Cisg
IHZhciBwbSA9IG0uYWJzKCk7CisgIGlmKHBtLnQgPD0gMCkgcmV0dXJuOworICB2YXIgcHQgPSB0
aGlzLmFicygpOworICBpZihwdC50IDwgcG0udCkgeworICAgIGlmKHEgIT0gbnVsbCkgcS5mcm9t
SW50KDApOworICAgIGlmKHIgIT0gbnVsbCkgdGhpcy5jb3B5VG8ocik7CisgICAgcmV0dXJuOwor
ICB9CisgIGlmKHIgPT0gbnVsbCkgciA9IG5iaSgpOworICB2YXIgeSA9IG5iaSgpLCB0cyA9IHRo
aXMucywgbXMgPSBtLnM7CisgIHZhciBwbV9hcnJheSA9IHBtLmFycmF5OworICB2YXIgbnNoID0g
QklfREItbmJpdHMocG1fYXJyYXlbcG0udC0xXSk7CS8vIG5vcm1hbGl6ZSBtb2R1bHVzCisgIGlm
KG5zaCA+IDApIHsgcG0ubFNoaWZ0VG8obnNoLHkpOyBwdC5sU2hpZnRUbyhuc2gscik7IH0KKyAg
ZWxzZSB7IHBtLmNvcHlUbyh5KTsgcHQuY29weVRvKHIpOyB9CisgIHZhciB5cyA9IHkudDsKKwor
ICB2YXIgeV9hcnJheSA9IHkuYXJyYXk7CisgIHZhciB5MCA9IHlfYXJyYXlbeXMtMV07CisgIGlm
KHkwID09IDApIHJldHVybjsKKyAgdmFyIHl0ID0geTAqKDE8PEJJX0YxKSsoKHlzPjEpP3lfYXJy
YXlbeXMtMl0+PkJJX0YyOjApOworICB2YXIgZDEgPSBCSV9GVi95dCwgZDIgPSAoMTw8QklfRjEp
L3l0LCBlID0gMTw8QklfRjI7CisgIHZhciBpID0gci50LCBqID0gaS15cywgdCA9IChxPT1udWxs
KT9uYmkoKTpxOworICB5LmRsU2hpZnRUbyhqLHQpOworCisgIHZhciByX2FycmF5ID0gci5hcnJh
eTsKKyAgaWYoci5jb21wYXJlVG8odCkgPj0gMCkgeworICAgIHJfYXJyYXlbci50KytdID0gMTsK
KyAgICByLnN1YlRvKHQscik7CisgIH0KKyAgQmlnSW50ZWdlci5PTkUuZGxTaGlmdFRvKHlzLHQp
OworICB0LnN1YlRvKHkseSk7CS8vICJuZWdhdGl2ZSIgeSBzbyB3ZSBjYW4gcmVwbGFjZSBzdWIg
d2l0aCBhbSBsYXRlcgorICB3aGlsZSh5LnQgPCB5cykgeV9hcnJheVt5LnQrK10gPSAwOworICB3
aGlsZSgtLWogPj0gMCkgeworICAgIC8vIEVzdGltYXRlIHF1b3RpZW50IGRpZ2l0CisgICAgdmFy
IHFkID0gKHJfYXJyYXlbLS1pXT09eTApP0JJX0RNOk1hdGguZmxvb3Iocl9hcnJheVtpXSpkMSso
cl9hcnJheVtpLTFdK2UpKmQyKTsKKyAgICBpZigocl9hcnJheVtpXSs9eS5hbSgwLHFkLHIsaiww
LHlzKSkgPCBxZCkgewkvLyBUcnkgaXQgb3V0CisgICAgICB5LmRsU2hpZnRUbyhqLHQpOworICAg
ICAgci5zdWJUbyh0LHIpOworICAgICAgd2hpbGUocl9hcnJheVtpXSA8IC0tcWQpIHIuc3ViVG8o
dCxyKTsKKyAgICB9CisgIH0KKyAgaWYocSAhPSBudWxsKSB7CisgICAgci5kclNoaWZ0VG8oeXMs
cSk7CisgICAgaWYodHMgIT0gbXMpIEJpZ0ludGVnZXIuWkVSTy5zdWJUbyhxLHEpOworICB9Cisg
IHIudCA9IHlzOworICByLmNsYW1wKCk7CisgIGlmKG5zaCA+IDApIHIuclNoaWZ0VG8obnNoLHIp
OwkvLyBEZW5vcm1hbGl6ZSByZW1haW5kZXIKKyAgaWYodHMgPCAwKSBCaWdJbnRlZ2VyLlpFUk8u
c3ViVG8ocixyKTsKK30KKworLy8gKHB1YmxpYykgdGhpcyBtb2QgYQorZnVuY3Rpb24gYm5Nb2Qo
YSkgeworICB2YXIgciA9IG5iaSgpOworICB0aGlzLmFicygpLmRpdlJlbVRvKGEsbnVsbCxyKTsK
KyAgaWYodGhpcy5zIDwgMCAmJiByLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLlpFUk8pID4gMCkgYS5z
dWJUbyhyLHIpOworICByZXR1cm4gcjsKK30KKworLy8gTW9kdWxhciByZWR1Y3Rpb24gdXNpbmcg
ImNsYXNzaWMiIGFsZ29yaXRobQorZnVuY3Rpb24gQ2xhc3NpYyhtKSB7IHRoaXMubSA9IG07IH0K
K2Z1bmN0aW9uIGNDb252ZXJ0KHgpIHsKKyAgaWYoeC5zIDwgMCB8fCB4LmNvbXBhcmVUbyh0aGlz
Lm0pID49IDApIHJldHVybiB4Lm1vZCh0aGlzLm0pOworICBlbHNlIHJldHVybiB4OworfQorZnVu
Y3Rpb24gY1JldmVydCh4KSB7IHJldHVybiB4OyB9CitmdW5jdGlvbiBjUmVkdWNlKHgpIHsgeC5k
aXZSZW1Ubyh0aGlzLm0sbnVsbCx4KTsgfQorZnVuY3Rpb24gY011bFRvKHgseSxyKSB7IHgubXVs
dGlwbHlUbyh5LHIpOyB0aGlzLnJlZHVjZShyKTsgfQorZnVuY3Rpb24gY1NxclRvKHgscikgeyB4
LnNxdWFyZVRvKHIpOyB0aGlzLnJlZHVjZShyKTsgfQorCitDbGFzc2ljLnByb3RvdHlwZS5jb252
ZXJ0ID0gY0NvbnZlcnQ7CitDbGFzc2ljLnByb3RvdHlwZS5yZXZlcnQgPSBjUmV2ZXJ0OworQ2xh
c3NpYy5wcm90b3R5cGUucmVkdWNlID0gY1JlZHVjZTsKK0NsYXNzaWMucHJvdG90eXBlLm11bFRv
ID0gY011bFRvOworQ2xhc3NpYy5wcm90b3R5cGUuc3FyVG8gPSBjU3FyVG87CisKKy8vIChwcm90
ZWN0ZWQpIHJldHVybiAiLTEvdGhpcyAlIDJeREIiOyB1c2VmdWwgZm9yIE1vbnQuIHJlZHVjdGlv
bgorLy8ganVzdGlmaWNhdGlvbjoKKy8vICAgICAgICAgeHkgPT0gMSAobW9kIG0pCisvLyAgICAg
ICAgIHh5ID0gIDEra20KKy8vICAgeHkoMi14eSkgPSAoMStrbSkoMS1rbSkKKy8vIHhbeSgyLXh5
KV0gPSAxLWteMm1eMgorLy8geFt5KDIteHkpXSA9PSAxIChtb2QgbV4yKQorLy8gaWYgeSBpcyAx
L3ggbW9kIG0sIHRoZW4geSgyLXh5KSBpcyAxL3ggbW9kIG1eMgorLy8gc2hvdWxkIHJlZHVjZSB4
IGFuZCB5KDIteHkpIGJ5IG1eMiBhdCBlYWNoIHN0ZXAgdG8ga2VlcCBzaXplIGJvdW5kZWQuCisv
LyBKUyBtdWx0aXBseSAib3ZlcmZsb3dzIiBkaWZmZXJlbnRseSBmcm9tIEMvQysrLCBzbyBjYXJl
IGlzIG5lZWRlZCBoZXJlLgorZnVuY3Rpb24gYm5wSW52RGlnaXQoKSB7CisgIHZhciB0aGlzX2Fy
cmF5ID0gdGhpcy5hcnJheTsKKyAgaWYodGhpcy50IDwgMSkgcmV0dXJuIDA7CisgIHZhciB4ID0g
dGhpc19hcnJheVswXTsKKyAgaWYoKHgmMSkgPT0gMCkgcmV0dXJuIDA7CisgIHZhciB5ID0geCYz
OwkJLy8geSA9PSAxL3ggbW9kIDJeMgorICB5ID0gKHkqKDItKHgmMHhmKSp5KSkmMHhmOwkvLyB5
ID09IDEveCBtb2QgMl40CisgIHkgPSAoeSooMi0oeCYweGZmKSp5KSkmMHhmZjsJLy8geSA9PSAx
L3ggbW9kIDJeOAorICB5ID0gKHkqKDItKCgoeCYweGZmZmYpKnkpJjB4ZmZmZikpKSYweGZmZmY7
CS8vIHkgPT0gMS94IG1vZCAyXjE2CisgIC8vIGxhc3Qgc3RlcCAtIGNhbGN1bGF0ZSBpbnZlcnNl
IG1vZCBEViBkaXJlY3RseTsKKyAgLy8gYXNzdW1lcyAxNiA8IERCIDw9IDMyIGFuZCBhc3N1bWVz
IGFiaWxpdHkgdG8gaGFuZGxlIDQ4LWJpdCBpbnRzCisgIHkgPSAoeSooMi14KnklQklfRFYpKSVC
SV9EVjsJCS8vIHkgPT0gMS94IG1vZCAyXmRiaXRzCisgIC8vIHdlIHJlYWxseSB3YW50IHRoZSBu
ZWdhdGl2ZSBpbnZlcnNlLCBhbmQgLURWIDwgeSA8IERWCisgIHJldHVybiAoeT4wKT9CSV9EVi15
Oi15OworfQorCisvLyBNb250Z29tZXJ5IHJlZHVjdGlvbgorZnVuY3Rpb24gTW9udGdvbWVyeSht
KSB7CisgIHRoaXMubSA9IG07CisgIHRoaXMubXAgPSBtLmludkRpZ2l0KCk7CisgIHRoaXMubXBs
ID0gdGhpcy5tcCYweDdmZmY7CisgIHRoaXMubXBoID0gdGhpcy5tcD4+MTU7CisgIHRoaXMudW0g
PSAoMTw8KEJJX0RCLTE1KSktMTsKKyAgdGhpcy5tdDIgPSAyKm0udDsKK30KKworLy8geFIgbW9k
IG0KK2Z1bmN0aW9uIG1vbnRDb252ZXJ0KHgpIHsKKyAgdmFyIHIgPSBuYmkoKTsKKyAgeC5hYnMo
KS5kbFNoaWZ0VG8odGhpcy5tLnQscik7CisgIHIuZGl2UmVtVG8odGhpcy5tLG51bGwscik7Cisg
IGlmKHgucyA8IDAgJiYgci5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKSA+IDApIHRoaXMubS5z
dWJUbyhyLHIpOworICByZXR1cm4gcjsKK30KKworLy8geC9SIG1vZCBtCitmdW5jdGlvbiBtb250
UmV2ZXJ0KHgpIHsKKyAgdmFyIHIgPSBuYmkoKTsKKyAgeC5jb3B5VG8ocik7CisgIHRoaXMucmVk
dWNlKHIpOworICByZXR1cm4gcjsKK30KKworLy8geCA9IHgvUiBtb2QgbSAoSEFDIDE0LjMyKQor
ZnVuY3Rpb24gbW9udFJlZHVjZSh4KSB7CisgIHZhciB4X2FycmF5ID0geC5hcnJheTsKKyAgd2hp
bGUoeC50IDw9IHRoaXMubXQyKQkvLyBwYWQgeCBzbyBhbSBoYXMgZW5vdWdoIHJvb20gbGF0ZXIK
KyAgICB4X2FycmF5W3gudCsrXSA9IDA7CisgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLm0udDsg
KytpKSB7CisgICAgLy8gZmFzdGVyIHdheSBvZiBjYWxjdWxhdGluZyB1MCA9IHhbaV0qbXAgbW9k
IERWCisgICAgdmFyIGogPSB4X2FycmF5W2ldJjB4N2ZmZjsKKyAgICB2YXIgdTAgPSAoaip0aGlz
Lm1wbCsoKChqKnRoaXMubXBoKyh4X2FycmF5W2ldPj4xNSkqdGhpcy5tcGwpJnRoaXMudW0pPDwx
NSkpJkJJX0RNOworICAgIC8vIHVzZSBhbSB0byBjb21iaW5lIHRoZSBtdWx0aXBseS1zaGlmdC1h
ZGQgaW50byBvbmUgY2FsbAorICAgIGogPSBpK3RoaXMubS50OworICAgIHhfYXJyYXlbal0gKz0g
dGhpcy5tLmFtKDAsdTAseCxpLDAsdGhpcy5tLnQpOworICAgIC8vIHByb3BhZ2F0ZSBjYXJyeQor
ICAgIHdoaWxlKHhfYXJyYXlbal0gPj0gQklfRFYpIHsgeF9hcnJheVtqXSAtPSBCSV9EVjsgeF9h
cnJheVsrK2pdKys7IH0KKyAgfQorICB4LmNsYW1wKCk7CisgIHguZHJTaGlmdFRvKHRoaXMubS50
LHgpOworICBpZih4LmNvbXBhcmVUbyh0aGlzLm0pID49IDApIHguc3ViVG8odGhpcy5tLHgpOwor
fQorCisvLyByID0gInheMi9SIG1vZCBtIjsgeCAhPSByCitmdW5jdGlvbiBtb250U3FyVG8oeCxy
KSB7IHguc3F1YXJlVG8ocik7IHRoaXMucmVkdWNlKHIpOyB9CisKKy8vIHIgPSAieHkvUiBtb2Qg
bSI7IHgseSAhPSByCitmdW5jdGlvbiBtb250TXVsVG8oeCx5LHIpIHsgeC5tdWx0aXBseVRvKHks
cik7IHRoaXMucmVkdWNlKHIpOyB9CisKK01vbnRnb21lcnkucHJvdG90eXBlLmNvbnZlcnQgPSBt
b250Q29udmVydDsKK01vbnRnb21lcnkucHJvdG90eXBlLnJldmVydCA9IG1vbnRSZXZlcnQ7CitN
b250Z29tZXJ5LnByb3RvdHlwZS5yZWR1Y2UgPSBtb250UmVkdWNlOworTW9udGdvbWVyeS5wcm90
b3R5cGUubXVsVG8gPSBtb250TXVsVG87CitNb250Z29tZXJ5LnByb3RvdHlwZS5zcXJUbyA9IG1v
bnRTcXJUbzsKKworLy8gKHByb3RlY3RlZCkgdHJ1ZSBpZmYgdGhpcyBpcyBldmVuCitmdW5jdGlv
biBibnBJc0V2ZW4oKSB7CisgIHZhciB0aGlzX2FycmF5ID0gdGhpcy5hcnJheTsKKyAgcmV0dXJu
ICgodGhpcy50PjApPyh0aGlzX2FycmF5WzBdJjEpOnRoaXMucykgPT0gMDsKK30KKworLy8gKHBy
b3RlY3RlZCkgdGhpc15lLCBlIDwgMl4zMiwgZG9pbmcgc3FyIGFuZCBtdWwgd2l0aCAiciIgKEhB
QyAxNC43OSkKK2Z1bmN0aW9uIGJucEV4cChlLHopIHsKKyAgaWYoZSA+IDB4ZmZmZmZmZmYgfHwg
ZSA8IDEpIHJldHVybiBCaWdJbnRlZ2VyLk9ORTsKKyAgdmFyIHIgPSBuYmkoKSwgcjIgPSBuYmko
KSwgZyA9IHouY29udmVydCh0aGlzKSwgaSA9IG5iaXRzKGUpLTE7CisgIGcuY29weVRvKHIpOwor
ICB3aGlsZSgtLWkgPj0gMCkgeworICAgIHouc3FyVG8ocixyMik7CisgICAgaWYoKGUmKDE8PGkp
KSA+IDApIHoubXVsVG8ocjIsZyxyKTsKKyAgICBlbHNlIHsgdmFyIHQgPSByOyByID0gcjI7IHIy
ID0gdDsgfQorICB9CisgIHJldHVybiB6LnJldmVydChyKTsKK30KKworLy8gKHB1YmxpYykgdGhp
c15lICUgbSwgMCA8PSBlIDwgMl4zMgorZnVuY3Rpb24gYm5Nb2RQb3dJbnQoZSxtKSB7CisgIHZh
ciB6OworICBpZihlIDwgMjU2IHx8IG0uaXNFdmVuKCkpIHogPSBuZXcgQ2xhc3NpYyhtKTsgZWxz
ZSB6ID0gbmV3IE1vbnRnb21lcnkobSk7CisgIHJldHVybiB0aGlzLmV4cChlLHopOworfQorCisv
LyBwcm90ZWN0ZWQKK0JpZ0ludGVnZXIucHJvdG90eXBlLmNvcHlUbyA9IGJucENvcHlUbzsKK0Jp
Z0ludGVnZXIucHJvdG90eXBlLmZyb21JbnQgPSBibnBGcm9tSW50OworQmlnSW50ZWdlci5wcm90
b3R5cGUuZnJvbVN0cmluZyA9IGJucEZyb21TdHJpbmc7CitCaWdJbnRlZ2VyLnByb3RvdHlwZS5j
bGFtcCA9IGJucENsYW1wOworQmlnSW50ZWdlci5wcm90b3R5cGUuZGxTaGlmdFRvID0gYm5wRExT
aGlmdFRvOworQmlnSW50ZWdlci5wcm90b3R5cGUuZHJTaGlmdFRvID0gYm5wRFJTaGlmdFRvOwor
QmlnSW50ZWdlci5wcm90b3R5cGUubFNoaWZ0VG8gPSBibnBMU2hpZnRUbzsKK0JpZ0ludGVnZXIu
cHJvdG90eXBlLnJTaGlmdFRvID0gYm5wUlNoaWZ0VG87CitCaWdJbnRlZ2VyLnByb3RvdHlwZS5z
dWJUbyA9IGJucFN1YlRvOworQmlnSW50ZWdlci5wcm90b3R5cGUubXVsdGlwbHlUbyA9IGJucE11
bHRpcGx5VG87CitCaWdJbnRlZ2VyLnByb3RvdHlwZS5zcXVhcmVUbyA9IGJucFNxdWFyZVRvOwor
QmlnSW50ZWdlci5wcm90b3R5cGUuZGl2UmVtVG8gPSBibnBEaXZSZW1UbzsKK0JpZ0ludGVnZXIu
cHJvdG90eXBlLmludkRpZ2l0ID0gYm5wSW52RGlnaXQ7CitCaWdJbnRlZ2VyLnByb3RvdHlwZS5p
c0V2ZW4gPSBibnBJc0V2ZW47CitCaWdJbnRlZ2VyLnByb3RvdHlwZS5leHAgPSBibnBFeHA7CisK
Ky8vIHB1YmxpYworQmlnSW50ZWdlci5wcm90b3R5cGUudG9TdHJpbmcgPSBiblRvU3RyaW5nOwor
QmlnSW50ZWdlci5wcm90b3R5cGUubmVnYXRlID0gYm5OZWdhdGU7CitCaWdJbnRlZ2VyLnByb3Rv
dHlwZS5hYnMgPSBibkFiczsKK0JpZ0ludGVnZXIucHJvdG90eXBlLmNvbXBhcmVUbyA9IGJuQ29t
cGFyZVRvOworQmlnSW50ZWdlci5wcm90b3R5cGUuYml0TGVuZ3RoID0gYm5CaXRMZW5ndGg7CitC
aWdJbnRlZ2VyLnByb3RvdHlwZS5tb2QgPSBibk1vZDsKK0JpZ0ludGVnZXIucHJvdG90eXBlLm1v
ZFBvd0ludCA9IGJuTW9kUG93SW50OworCisvLyAiY29uc3RhbnRzIgorQmlnSW50ZWdlci5aRVJP
ID0gbmJ2KDApOworQmlnSW50ZWdlci5PTkUgPSBuYnYoMSk7CisvLyBDb3B5cmlnaHQgKGMpIDIw
MDUgIFRvbSBXdQorLy8gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vIFNlZSAiTElDRU5TRSIgZm9y
IGRldGFpbHMuCisKKy8vIEV4dGVuZGVkIEphdmFTY3JpcHQgQk4gZnVuY3Rpb25zLCByZXF1aXJl
ZCBmb3IgUlNBIHByaXZhdGUgb3BzLgorCisvLyAocHVibGljKQorZnVuY3Rpb24gYm5DbG9uZSgp
IHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5jb3B5VG8ocik7IHJldHVybiByOyB9CisKKy8vIChwdWJs
aWMpIHJldHVybiB2YWx1ZSBhcyBpbnRlZ2VyCitmdW5jdGlvbiBibkludFZhbHVlKCkgeworICB2
YXIgdGhpc19hcnJheSA9IHRoaXMuYXJyYXk7CisgIGlmKHRoaXMucyA8IDApIHsKKyAgICBpZih0
aGlzLnQgPT0gMSkgcmV0dXJuIHRoaXNfYXJyYXlbMF0tQklfRFY7CisgICAgZWxzZSBpZih0aGlz
LnQgPT0gMCkgcmV0dXJuIC0xOworICB9CisgIGVsc2UgaWYodGhpcy50ID09IDEpIHJldHVybiB0
aGlzX2FycmF5WzBdOworICBlbHNlIGlmKHRoaXMudCA9PSAwKSByZXR1cm4gMDsKKyAgLy8gYXNz
dW1lcyAxNiA8IERCIDwgMzIKKyAgcmV0dXJuICgodGhpc19hcnJheVsxXSYoKDE8PCgzMi1CSV9E
QikpLTEpKTw8QklfREIpfHRoaXNfYXJyYXlbMF07Cit9CisKKy8vIChwdWJsaWMpIHJldHVybiB2
YWx1ZSBhcyBieXRlCitmdW5jdGlvbiBibkJ5dGVWYWx1ZSgpIHsKKyAgdmFyIHRoaXNfYXJyYXkg
PSB0aGlzLmFycmF5OworICByZXR1cm4gKHRoaXMudD09MCk/dGhpcy5zOih0aGlzX2FycmF5WzBd
PDwyNCk+PjI0OworfQorCisvLyAocHVibGljKSByZXR1cm4gdmFsdWUgYXMgc2hvcnQgKGFzc3Vt
ZXMgREI+PTE2KQorZnVuY3Rpb24gYm5TaG9ydFZhbHVlKCkgeworICB2YXIgdGhpc19hcnJheSA9
IHRoaXMuYXJyYXk7CisgIHJldHVybiAodGhpcy50PT0wKT90aGlzLnM6KHRoaXNfYXJyYXlbMF08
PDE2KT4+MTY7Cit9CisKKy8vIChwcm90ZWN0ZWQpIHJldHVybiB4IHMudC4gcl54IDwgRFYKK2Z1
bmN0aW9uIGJucENodW5rU2l6ZShyKSB7IHJldHVybiBNYXRoLmZsb29yKE1hdGguTE4yKkJJX0RC
L01hdGgubG9nKHIpKTsgfQorCisvLyAocHVibGljKSAwIGlmIHRoaXMgPT0gMCwgMSBpZiB0aGlz
ID4gMAorZnVuY3Rpb24gYm5TaWdOdW0oKSB7CisgIHZhciB0aGlzX2FycmF5ID0gdGhpcy5hcnJh
eTsKKyAgaWYodGhpcy5zIDwgMCkgcmV0dXJuIC0xOworICBlbHNlIGlmKHRoaXMudCA8PSAwIHx8
ICh0aGlzLnQgPT0gMSAmJiB0aGlzX2FycmF5WzBdIDw9IDApKSByZXR1cm4gMDsKKyAgZWxzZSBy
ZXR1cm4gMTsKK30KKworLy8gKHByb3RlY3RlZCkgY29udmVydCB0byByYWRpeCBzdHJpbmcKK2Z1
bmN0aW9uIGJucFRvUmFkaXgoYikgeworICBpZihiID09IG51bGwpIGIgPSAxMDsKKyAgaWYodGhp
cy5zaWdudW0oKSA9PSAwIHx8IGIgPCAyIHx8IGIgPiAzNikgcmV0dXJuICIwIjsKKyAgdmFyIGNz
ID0gdGhpcy5jaHVua1NpemUoYik7CisgIHZhciBhID0gTWF0aC5wb3coYixjcyk7CisgIHZhciBk
ID0gbmJ2KGEpLCB5ID0gbmJpKCksIHogPSBuYmkoKSwgciA9ICIiOworICB0aGlzLmRpdlJlbVRv
KGQseSx6KTsKKyAgd2hpbGUoeS5zaWdudW0oKSA+IDApIHsKKyAgICByID0gKGErei5pbnRWYWx1
ZSgpKS50b1N0cmluZyhiKS5zdWJzdHIoMSkgKyByOworICAgIHkuZGl2UmVtVG8oZCx5LHopOwor
ICB9CisgIHJldHVybiB6LmludFZhbHVlKCkudG9TdHJpbmcoYikgKyByOworfQorCisvLyAocHJv
dGVjdGVkKSBjb252ZXJ0IGZyb20gcmFkaXggc3RyaW5nCitmdW5jdGlvbiBibnBGcm9tUmFkaXgo
cyxiKSB7CisgIHRoaXMuZnJvbUludCgwKTsKKyAgaWYoYiA9PSBudWxsKSBiID0gMTA7CisgIHZh
ciBjcyA9IHRoaXMuY2h1bmtTaXplKGIpOworICB2YXIgZCA9IE1hdGgucG93KGIsY3MpLCBtaSA9
IGZhbHNlLCBqID0gMCwgdyA9IDA7CisgIGZvcih2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgKytp
KSB7CisgICAgdmFyIHggPSBpbnRBdChzLGkpOworICAgIGlmKHggPCAwKSB7CisgICAgICBpZihz
LmNoYXJBdChpKSA9PSAiLSIgJiYgdGhpcy5zaWdudW0oKSA9PSAwKSBtaSA9IHRydWU7CisgICAg
ICBjb250aW51ZTsKKyAgICB9CisgICAgdyA9IGIqdyt4OworICAgIGlmKCsraiA+PSBjcykgewor
ICAgICAgdGhpcy5kTXVsdGlwbHkoZCk7CisgICAgICB0aGlzLmRBZGRPZmZzZXQodywwKTsKKyAg
ICAgIGogPSAwOworICAgICAgdyA9IDA7CisgICAgfQorICB9CisgIGlmKGogPiAwKSB7CisgICAg
dGhpcy5kTXVsdGlwbHkoTWF0aC5wb3coYixqKSk7CisgICAgdGhpcy5kQWRkT2Zmc2V0KHcsMCk7
CisgIH0KKyAgaWYobWkpIEJpZ0ludGVnZXIuWkVSTy5zdWJUbyh0aGlzLHRoaXMpOworfQorCisv
LyAocHJvdGVjdGVkKSBhbHRlcm5hdGUgY29uc3RydWN0b3IKK2Z1bmN0aW9uIGJucEZyb21OdW1i
ZXIoYSxiLGMpIHsKKyAgaWYoIm51bWJlciIgPT0gdHlwZW9mIGIpIHsKKyAgICAvLyBuZXcgQmln
SW50ZWdlcihpbnQsaW50LFJORykKKyAgICBpZihhIDwgMikgdGhpcy5mcm9tSW50KDEpOworICAg
IGVsc2UgeworICAgICAgdGhpcy5mcm9tTnVtYmVyKGEsYyk7CisgICAgICBpZighdGhpcy50ZXN0
Qml0KGEtMSkpCS8vIGZvcmNlIE1TQiBzZXQKKyAgICAgICAgdGhpcy5iaXR3aXNlVG8oQmlnSW50
ZWdlci5PTkUuc2hpZnRMZWZ0KGEtMSksb3Bfb3IsdGhpcyk7CisgICAgICBpZih0aGlzLmlzRXZl
bigpKSB0aGlzLmRBZGRPZmZzZXQoMSwwKTsgLy8gZm9yY2Ugb2RkCisgICAgICB3aGlsZSghdGhp
cy5pc1Byb2JhYmxlUHJpbWUoYikpIHsKKyAgICAgICAgdGhpcy5kQWRkT2Zmc2V0KDIsMCk7Cisg
ICAgICAgIGlmKHRoaXMuYml0TGVuZ3RoKCkgPiBhKSB0aGlzLnN1YlRvKEJpZ0ludGVnZXIuT05F
LnNoaWZ0TGVmdChhLTEpLHRoaXMpOworICAgICAgfQorICAgIH0KKyAgfQorICBlbHNlIHsKKyAg
ICAvLyBuZXcgQmlnSW50ZWdlcihpbnQsUk5HKQorICAgIHZhciB4ID0gbmV3IEFycmF5KCksIHQg
PSBhJjc7CisgICAgeC5sZW5ndGggPSAoYT4+MykrMTsKKyAgICBiLm5leHRCeXRlcyh4KTsKKyAg
ICBpZih0ID4gMCkgeFswXSAmPSAoKDE8PHQpLTEpOyBlbHNlIHhbMF0gPSAwOworICAgIHRoaXMu
ZnJvbVN0cmluZyh4LDI1Nik7CisgIH0KK30KKworLy8gKHB1YmxpYykgY29udmVydCB0byBiaWdl
bmRpYW4gYnl0ZSBhcnJheQorZnVuY3Rpb24gYm5Ub0J5dGVBcnJheSgpIHsKKyAgdmFyIHRoaXNf
YXJyYXkgPSB0aGlzLmFycmF5OworICB2YXIgaSA9IHRoaXMudCwgciA9IG5ldyBBcnJheSgpOwor
ICByWzBdID0gdGhpcy5zOworICB2YXIgcCA9IEJJX0RCLShpKkJJX0RCKSU4LCBkLCBrID0gMDsK
KyAgaWYoaS0tID4gMCkgeworICAgIGlmKHAgPCBCSV9EQiAmJiAoZCA9IHRoaXNfYXJyYXlbaV0+
PnApICE9ICh0aGlzLnMmQklfRE0pPj5wKQorICAgICAgcltrKytdID0gZHwodGhpcy5zPDwoQklf
REItcCkpOworICAgIHdoaWxlKGkgPj0gMCkgeworICAgICAgaWYocCA8IDgpIHsKKyAgICAgICAg
ZCA9ICh0aGlzX2FycmF5W2ldJigoMTw8cCktMSkpPDwoOC1wKTsKKyAgICAgICAgZCB8PSB0aGlz
X2FycmF5Wy0taV0+PihwKz1CSV9EQi04KTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAg
ICBkID0gKHRoaXNfYXJyYXlbaV0+PihwLT04KSkmMHhmZjsKKyAgICAgICAgaWYocCA8PSAwKSB7
IHAgKz0gQklfREI7IC0taTsgfQorICAgICAgfQorICAgICAgaWYoKGQmMHg4MCkgIT0gMCkgZCB8
PSAtMjU2OworICAgICAgaWYoayA9PSAwICYmICh0aGlzLnMmMHg4MCkgIT0gKGQmMHg4MCkpICsr
azsKKyAgICAgIGlmKGsgPiAwIHx8IGQgIT0gdGhpcy5zKSByW2srK10gPSBkOworICAgIH0KKyAg
fQorICByZXR1cm4gcjsKK30KKworZnVuY3Rpb24gYm5FcXVhbHMoYSkgeyByZXR1cm4odGhpcy5j
b21wYXJlVG8oYSk9PTApOyB9CitmdW5jdGlvbiBibk1pbihhKSB7IHJldHVybih0aGlzLmNvbXBh
cmVUbyhhKTwwKT90aGlzOmE7IH0KK2Z1bmN0aW9uIGJuTWF4KGEpIHsgcmV0dXJuKHRoaXMuY29t
cGFyZVRvKGEpPjApP3RoaXM6YTsgfQorCisvLyAocHJvdGVjdGVkKSByID0gdGhpcyBvcCBhIChi
aXR3aXNlKQorZnVuY3Rpb24gYm5wQml0d2lzZVRvKGEsb3AscikgeworICB2YXIgdGhpc19hcnJh
eSA9IHRoaXMuYXJyYXk7CisgIHZhciBhX2FycmF5ICAgID0gYS5hcnJheTsKKyAgdmFyIHJfYXJy
YXkgICAgPSByLmFycmF5OworICB2YXIgaSwgZiwgbSA9IE1hdGgubWluKGEudCx0aGlzLnQpOwor
ICBmb3IoaSA9IDA7IGkgPCBtOyArK2kpIHJfYXJyYXlbaV0gPSBvcCh0aGlzX2FycmF5W2ldLGFf
YXJyYXlbaV0pOworICBpZihhLnQgPCB0aGlzLnQpIHsKKyAgICBmID0gYS5zJkJJX0RNOworICAg
IGZvcihpID0gbTsgaSA8IHRoaXMudDsgKytpKSByX2FycmF5W2ldID0gb3AodGhpc19hcnJheVtp
XSxmKTsKKyAgICByLnQgPSB0aGlzLnQ7CisgIH0KKyAgZWxzZSB7CisgICAgZiA9IHRoaXMucyZC
SV9ETTsKKyAgICBmb3IoaSA9IG07IGkgPCBhLnQ7ICsraSkgcl9hcnJheVtpXSA9IG9wKGYsYV9h
cnJheVtpXSk7CisgICAgci50ID0gYS50OworICB9CisgIHIucyA9IG9wKHRoaXMucyxhLnMpOwor
ICByLmNsYW1wKCk7Cit9CisKKy8vIChwdWJsaWMpIHRoaXMgJiBhCitmdW5jdGlvbiBvcF9hbmQo
eCx5KSB7IHJldHVybiB4Jnk7IH0KK2Z1bmN0aW9uIGJuQW5kKGEpIHsgdmFyIHIgPSBuYmkoKTsg
dGhpcy5iaXR3aXNlVG8oYSxvcF9hbmQscik7IHJldHVybiByOyB9CisKKy8vIChwdWJsaWMpIHRo
aXMgfCBhCitmdW5jdGlvbiBvcF9vcih4LHkpIHsgcmV0dXJuIHh8eTsgfQorZnVuY3Rpb24gYm5P
cihhKSB7IHZhciByID0gbmJpKCk7IHRoaXMuYml0d2lzZVRvKGEsb3Bfb3Iscik7IHJldHVybiBy
OyB9CisKKy8vIChwdWJsaWMpIHRoaXMgXiBhCitmdW5jdGlvbiBvcF94b3IoeCx5KSB7IHJldHVy
biB4Xnk7IH0KK2Z1bmN0aW9uIGJuWG9yKGEpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5iaXR3aXNl
VG8oYSxvcF94b3Iscik7IHJldHVybiByOyB9CisKKy8vIChwdWJsaWMpIHRoaXMgJiB+YQorZnVu
Y3Rpb24gb3BfYW5kbm90KHgseSkgeyByZXR1cm4geCZ+eTsgfQorZnVuY3Rpb24gYm5BbmROb3Qo
YSkgeyB2YXIgciA9IG5iaSgpOyB0aGlzLmJpdHdpc2VUbyhhLG9wX2FuZG5vdCxyKTsgcmV0dXJu
IHI7IH0KKworLy8gKHB1YmxpYykgfnRoaXMKK2Z1bmN0aW9uIGJuTm90KCkgeworICB2YXIgdGhp
c19hcnJheSA9IHRoaXMuYXJyYXk7CisgIHZhciByID0gbmJpKCk7CisgIHZhciByX2FycmF5ID0g
ci5hcnJheTsKKworICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy50OyArK2kpIHJfYXJyYXlbaV0g
PSBCSV9ETSZ+dGhpc19hcnJheVtpXTsKKyAgci50ID0gdGhpcy50OworICByLnMgPSB+dGhpcy5z
OworICByZXR1cm4gcjsKK30KKworLy8gKHB1YmxpYykgdGhpcyA8PCBuCitmdW5jdGlvbiBiblNo
aWZ0TGVmdChuKSB7CisgIHZhciByID0gbmJpKCk7CisgIGlmKG4gPCAwKSB0aGlzLnJTaGlmdFRv
KC1uLHIpOyBlbHNlIHRoaXMubFNoaWZ0VG8obixyKTsKKyAgcmV0dXJuIHI7Cit9CisKKy8vIChw
dWJsaWMpIHRoaXMgPj4gbgorZnVuY3Rpb24gYm5TaGlmdFJpZ2h0KG4pIHsKKyAgdmFyIHIgPSBu
YmkoKTsKKyAgaWYobiA8IDApIHRoaXMubFNoaWZ0VG8oLW4scik7IGVsc2UgdGhpcy5yU2hpZnRU
byhuLHIpOworICByZXR1cm4gcjsKK30KKworLy8gcmV0dXJuIGluZGV4IG9mIGxvd2VzdCAxLWJp
dCBpbiB4LCB4IDwgMl4zMQorZnVuY3Rpb24gbGJpdCh4KSB7CisgIGlmKHggPT0gMCkgcmV0dXJu
IC0xOworICB2YXIgciA9IDA7CisgIGlmKCh4JjB4ZmZmZikgPT0gMCkgeyB4ID4+PSAxNjsgciAr
PSAxNjsgfQorICBpZigoeCYweGZmKSA9PSAwKSB7IHggPj49IDg7IHIgKz0gODsgfQorICBpZigo
eCYweGYpID09IDApIHsgeCA+Pj0gNDsgciArPSA0OyB9CisgIGlmKCh4JjMpID09IDApIHsgeCA+
Pj0gMjsgciArPSAyOyB9CisgIGlmKCh4JjEpID09IDApICsrcjsKKyAgcmV0dXJuIHI7Cit9CisK
Ky8vIChwdWJsaWMpIHJldHVybnMgaW5kZXggb2YgbG93ZXN0IDEtYml0IChvciAtMSBpZiBub25l
KQorZnVuY3Rpb24gYm5HZXRMb3dlc3RTZXRCaXQoKSB7CisgIHZhciB0aGlzX2FycmF5ID0gdGhp
cy5hcnJheTsKKyAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMudDsgKytpKQorICAgIGlmKHRoaXNf
YXJyYXlbaV0gIT0gMCkgcmV0dXJuIGkqQklfREIrbGJpdCh0aGlzX2FycmF5W2ldKTsKKyAgaWYo
dGhpcy5zIDwgMCkgcmV0dXJuIHRoaXMudCpCSV9EQjsKKyAgcmV0dXJuIC0xOworfQorCisvLyBy
ZXR1cm4gbnVtYmVyIG9mIDEgYml0cyBpbiB4CitmdW5jdGlvbiBjYml0KHgpIHsKKyAgdmFyIHIg
PSAwOworICB3aGlsZSh4ICE9IDApIHsgeCAmPSB4LTE7ICsrcjsgfQorICByZXR1cm4gcjsKK30K
KworLy8gKHB1YmxpYykgcmV0dXJuIG51bWJlciBvZiBzZXQgYml0cworZnVuY3Rpb24gYm5CaXRD
b3VudCgpIHsKKyAgdmFyIHIgPSAwLCB4ID0gdGhpcy5zJkJJX0RNOworICBmb3IodmFyIGkgPSAw
OyBpIDwgdGhpcy50OyArK2kpIHIgKz0gY2JpdCh0aGlzX2FycmF5W2ldXngpOworICByZXR1cm4g
cjsKK30KKworLy8gKHB1YmxpYykgdHJ1ZSBpZmYgbnRoIGJpdCBpcyBzZXQKK2Z1bmN0aW9uIGJu
VGVzdEJpdChuKSB7CisgIHZhciB0aGlzX2FycmF5ID0gdGhpcy5hcnJheTsKKyAgdmFyIGogPSBN
YXRoLmZsb29yKG4vQklfREIpOworICBpZihqID49IHRoaXMudCkgcmV0dXJuKHRoaXMucyE9MCk7
CisgIHJldHVybigodGhpc19hcnJheVtqXSYoMTw8KG4lQklfREIpKSkhPTApOworfQorCisvLyAo
cHJvdGVjdGVkKSB0aGlzIG9wICgxPDxuKQorZnVuY3Rpb24gYm5wQ2hhbmdlQml0KG4sb3ApIHsK
KyAgdmFyIHIgPSBCaWdJbnRlZ2VyLk9ORS5zaGlmdExlZnQobik7CisgIHRoaXMuYml0d2lzZVRv
KHIsb3Ascik7CisgIHJldHVybiByOworfQorCisvLyAocHVibGljKSB0aGlzIHwgKDE8PG4pCitm
dW5jdGlvbiBiblNldEJpdChuKSB7IHJldHVybiB0aGlzLmNoYW5nZUJpdChuLG9wX29yKTsgfQor
CisvLyAocHVibGljKSB0aGlzICYgfigxPDxuKQorZnVuY3Rpb24gYm5DbGVhckJpdChuKSB7IHJl
dHVybiB0aGlzLmNoYW5nZUJpdChuLG9wX2FuZG5vdCk7IH0KKworLy8gKHB1YmxpYykgdGhpcyBe
ICgxPDxuKQorZnVuY3Rpb24gYm5GbGlwQml0KG4pIHsgcmV0dXJuIHRoaXMuY2hhbmdlQml0KG4s
b3BfeG9yKTsgfQorCisvLyAocHJvdGVjdGVkKSByID0gdGhpcyArIGEKK2Z1bmN0aW9uIGJucEFk
ZFRvKGEscikgeworICB2YXIgdGhpc19hcnJheSA9IHRoaXMuYXJyYXk7CisgIHZhciBhX2FycmF5
ID0gYS5hcnJheTsKKyAgdmFyIHJfYXJyYXkgPSByLmFycmF5OworICB2YXIgaSA9IDAsIGMgPSAw
LCBtID0gTWF0aC5taW4oYS50LHRoaXMudCk7CisgIHdoaWxlKGkgPCBtKSB7CisgICAgYyArPSB0
aGlzX2FycmF5W2ldK2FfYXJyYXlbaV07CisgICAgcl9hcnJheVtpKytdID0gYyZCSV9ETTsKKyAg
ICBjID4+PSBCSV9EQjsKKyAgfQorICBpZihhLnQgPCB0aGlzLnQpIHsKKyAgICBjICs9IGEuczsK
KyAgICB3aGlsZShpIDwgdGhpcy50KSB7CisgICAgICBjICs9IHRoaXNfYXJyYXlbaV07CisgICAg
ICByX2FycmF5W2krK10gPSBjJkJJX0RNOworICAgICAgYyA+Pj0gQklfREI7CisgICAgfQorICAg
IGMgKz0gdGhpcy5zOworICB9CisgIGVsc2UgeworICAgIGMgKz0gdGhpcy5zOworICAgIHdoaWxl
KGkgPCBhLnQpIHsKKyAgICAgIGMgKz0gYV9hcnJheVtpXTsKKyAgICAgIHJfYXJyYXlbaSsrXSA9
IGMmQklfRE07CisgICAgICBjID4+PSBCSV9EQjsKKyAgICB9CisgICAgYyArPSBhLnM7CisgIH0K
KyAgci5zID0gKGM8MCk/LTE6MDsKKyAgaWYoYyA+IDApIHJfYXJyYXlbaSsrXSA9IGM7CisgIGVs
c2UgaWYoYyA8IC0xKSByX2FycmF5W2krK10gPSBCSV9EVitjOworICByLnQgPSBpOworICByLmNs
YW1wKCk7Cit9CisKKy8vIChwdWJsaWMpIHRoaXMgKyBhCitmdW5jdGlvbiBibkFkZChhKSB7IHZh
ciByID0gbmJpKCk7IHRoaXMuYWRkVG8oYSxyKTsgcmV0dXJuIHI7IH0KKworLy8gKHB1YmxpYykg
dGhpcyAtIGEKK2Z1bmN0aW9uIGJuU3VidHJhY3QoYSkgeyB2YXIgciA9IG5iaSgpOyB0aGlzLnN1
YlRvKGEscik7IHJldHVybiByOyB9CisKKy8vIChwdWJsaWMpIHRoaXMgKiBhCitmdW5jdGlvbiBi
bk11bHRpcGx5KGEpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5tdWx0aXBseVRvKGEscik7IHJldHVy
biByOyB9CisKKy8vIChwdWJsaWMpIHRoaXMgLyBhCitmdW5jdGlvbiBibkRpdmlkZShhKSB7IHZh
ciByID0gbmJpKCk7IHRoaXMuZGl2UmVtVG8oYSxyLG51bGwpOyByZXR1cm4gcjsgfQorCisvLyAo
cHVibGljKSB0aGlzICUgYQorZnVuY3Rpb24gYm5SZW1haW5kZXIoYSkgeyB2YXIgciA9IG5iaSgp
OyB0aGlzLmRpdlJlbVRvKGEsbnVsbCxyKTsgcmV0dXJuIHI7IH0KKworLy8gKHB1YmxpYykgW3Ro
aXMvYSx0aGlzJWFdCitmdW5jdGlvbiBibkRpdmlkZUFuZFJlbWFpbmRlcihhKSB7CisgIHZhciBx
ID0gbmJpKCksIHIgPSBuYmkoKTsKKyAgdGhpcy5kaXZSZW1UbyhhLHEscik7CisgIHJldHVybiBu
ZXcgQXJyYXkocSxyKTsKK30KKworLy8gKHByb3RlY3RlZCkgdGhpcyAqPSBuLCB0aGlzID49IDAs
IDEgPCBuIDwgRFYKK2Z1bmN0aW9uIGJucERNdWx0aXBseShuKSB7CisgIHZhciB0aGlzX2FycmF5
ID0gdGhpcy5hcnJheTsKKyAgdGhpc19hcnJheVt0aGlzLnRdID0gdGhpcy5hbSgwLG4tMSx0aGlz
LDAsMCx0aGlzLnQpOworICArK3RoaXMudDsKKyAgdGhpcy5jbGFtcCgpOworfQorCisvLyAocHJv
dGVjdGVkKSB0aGlzICs9IG4gPDwgdyB3b3JkcywgdGhpcyA+PSAwCitmdW5jdGlvbiBibnBEQWRk
T2Zmc2V0KG4sdykgeworICB2YXIgdGhpc19hcnJheSA9IHRoaXMuYXJyYXk7CisgIHdoaWxlKHRo
aXMudCA8PSB3KSB0aGlzX2FycmF5W3RoaXMudCsrXSA9IDA7CisgIHRoaXNfYXJyYXlbd10gKz0g
bjsKKyAgd2hpbGUodGhpc19hcnJheVt3XSA+PSBCSV9EVikgeworICAgIHRoaXNfYXJyYXlbd10g
LT0gQklfRFY7CisgICAgaWYoKyt3ID49IHRoaXMudCkgdGhpc19hcnJheVt0aGlzLnQrK10gPSAw
OworICAgICsrdGhpc19hcnJheVt3XTsKKyAgfQorfQorCisvLyBBICJudWxsIiByZWR1Y2VyCitm
dW5jdGlvbiBOdWxsRXhwKCkge30KK2Z1bmN0aW9uIG5Ob3AoeCkgeyByZXR1cm4geDsgfQorZnVu
Y3Rpb24gbk11bFRvKHgseSxyKSB7IHgubXVsdGlwbHlUbyh5LHIpOyB9CitmdW5jdGlvbiBuU3Fy
VG8oeCxyKSB7IHguc3F1YXJlVG8ocik7IH0KKworTnVsbEV4cC5wcm90b3R5cGUuY29udmVydCA9
IG5Ob3A7CitOdWxsRXhwLnByb3RvdHlwZS5yZXZlcnQgPSBuTm9wOworTnVsbEV4cC5wcm90b3R5
cGUubXVsVG8gPSBuTXVsVG87CitOdWxsRXhwLnByb3RvdHlwZS5zcXJUbyA9IG5TcXJUbzsKKwor
Ly8gKHB1YmxpYykgdGhpc15lCitmdW5jdGlvbiBiblBvdyhlKSB7IHJldHVybiB0aGlzLmV4cChl
LG5ldyBOdWxsRXhwKCkpOyB9CisKKy8vIChwcm90ZWN0ZWQpIHIgPSBsb3dlciBuIHdvcmRzIG9m
ICJ0aGlzICogYSIsIGEudCA8PSBuCisvLyAidGhpcyIgc2hvdWxkIGJlIHRoZSBsYXJnZXIgb25l
IGlmIGFwcHJvcHJpYXRlLgorZnVuY3Rpb24gYm5wTXVsdGlwbHlMb3dlclRvKGEsbixyKSB7Cisg
IHZhciByX2FycmF5ID0gci5hcnJheTsKKyAgdmFyIGFfYXJyYXkgPSBhLmFycmF5OworICB2YXIg
aSA9IE1hdGgubWluKHRoaXMudCthLnQsbik7CisgIHIucyA9IDA7IC8vIGFzc3VtZXMgYSx0aGlz
ID49IDAKKyAgci50ID0gaTsKKyAgd2hpbGUoaSA+IDApIHJfYXJyYXlbLS1pXSA9IDA7CisgIHZh
ciBqOworICBmb3IoaiA9IHIudC10aGlzLnQ7IGkgPCBqOyArK2kpIHJfYXJyYXlbaSt0aGlzLnRd
ID0gdGhpcy5hbSgwLGFfYXJyYXlbaV0scixpLDAsdGhpcy50KTsKKyAgZm9yKGogPSBNYXRoLm1p
bihhLnQsbik7IGkgPCBqOyArK2kpIHRoaXMuYW0oMCxhX2FycmF5W2ldLHIsaSwwLG4taSk7Cisg
IHIuY2xhbXAoKTsKK30KKworLy8gKHByb3RlY3RlZCkgciA9ICJ0aGlzICogYSIgd2l0aG91dCBs
b3dlciBuIHdvcmRzLCBuID4gMAorLy8gInRoaXMiIHNob3VsZCBiZSB0aGUgbGFyZ2VyIG9uZSBp
ZiBhcHByb3ByaWF0ZS4KK2Z1bmN0aW9uIGJucE11bHRpcGx5VXBwZXJUbyhhLG4scikgeworICB2
YXIgcl9hcnJheSA9IHIuYXJyYXk7CisgIHZhciBhX2FycmF5ID0gYS5hcnJheTsKKyAgLS1uOwor
ICB2YXIgaSA9IHIudCA9IHRoaXMudCthLnQtbjsKKyAgci5zID0gMDsgLy8gYXNzdW1lcyBhLHRo
aXMgPj0gMAorICB3aGlsZSgtLWkgPj0gMCkgcl9hcnJheVtpXSA9IDA7CisgIGZvcihpID0gTWF0
aC5tYXgobi10aGlzLnQsMCk7IGkgPCBhLnQ7ICsraSkKKyAgICByX2FycmF5W3RoaXMudCtpLW5d
ID0gdGhpcy5hbShuLWksYV9hcnJheVtpXSxyLDAsMCx0aGlzLnQraS1uKTsKKyAgci5jbGFtcCgp
OworICByLmRyU2hpZnRUbygxLHIpOworfQorCisvLyBCYXJyZXR0IG1vZHVsYXIgcmVkdWN0aW9u
CitmdW5jdGlvbiBCYXJyZXR0KG0pIHsKKyAgLy8gc2V0dXAgQmFycmV0dAorICB0aGlzLnIyID0g
bmJpKCk7CisgIHRoaXMucTMgPSBuYmkoKTsKKyAgQmlnSW50ZWdlci5PTkUuZGxTaGlmdFRvKDIq
bS50LHRoaXMucjIpOworICB0aGlzLm11ID0gdGhpcy5yMi5kaXZpZGUobSk7CisgIHRoaXMubSA9
IG07Cit9CisKK2Z1bmN0aW9uIGJhcnJldHRDb252ZXJ0KHgpIHsKKyAgaWYoeC5zIDwgMCB8fCB4
LnQgPiAyKnRoaXMubS50KSByZXR1cm4geC5tb2QodGhpcy5tKTsKKyAgZWxzZSBpZih4LmNvbXBh
cmVUbyh0aGlzLm0pIDwgMCkgcmV0dXJuIHg7CisgIGVsc2UgeyB2YXIgciA9IG5iaSgpOyB4LmNv
cHlUbyhyKTsgdGhpcy5yZWR1Y2Uocik7IHJldHVybiByOyB9Cit9CisKK2Z1bmN0aW9uIGJhcnJl
dHRSZXZlcnQoeCkgeyByZXR1cm4geDsgfQorCisvLyB4ID0geCBtb2QgbSAoSEFDIDE0LjQyKQor
ZnVuY3Rpb24gYmFycmV0dFJlZHVjZSh4KSB7CisgIHguZHJTaGlmdFRvKHRoaXMubS50LTEsdGhp
cy5yMik7CisgIGlmKHgudCA+IHRoaXMubS50KzEpIHsgeC50ID0gdGhpcy5tLnQrMTsgeC5jbGFt
cCgpOyB9CisgIHRoaXMubXUubXVsdGlwbHlVcHBlclRvKHRoaXMucjIsdGhpcy5tLnQrMSx0aGlz
LnEzKTsKKyAgdGhpcy5tLm11bHRpcGx5TG93ZXJUbyh0aGlzLnEzLHRoaXMubS50KzEsdGhpcy5y
Mik7CisgIHdoaWxlKHguY29tcGFyZVRvKHRoaXMucjIpIDwgMCkgeC5kQWRkT2Zmc2V0KDEsdGhp
cy5tLnQrMSk7CisgIHguc3ViVG8odGhpcy5yMix4KTsKKyAgd2hpbGUoeC5jb21wYXJlVG8odGhp
cy5tKSA+PSAwKSB4LnN1YlRvKHRoaXMubSx4KTsKK30KKworLy8gciA9IHheMiBtb2QgbTsgeCAh
PSByCitmdW5jdGlvbiBiYXJyZXR0U3FyVG8oeCxyKSB7IHguc3F1YXJlVG8ocik7IHRoaXMucmVk
dWNlKHIpOyB9CisKKy8vIHIgPSB4KnkgbW9kIG07IHgseSAhPSByCitmdW5jdGlvbiBiYXJyZXR0
TXVsVG8oeCx5LHIpIHsgeC5tdWx0aXBseVRvKHkscik7IHRoaXMucmVkdWNlKHIpOyB9CisKK0Jh
cnJldHQucHJvdG90eXBlLmNvbnZlcnQgPSBiYXJyZXR0Q29udmVydDsKK0JhcnJldHQucHJvdG90
eXBlLnJldmVydCA9IGJhcnJldHRSZXZlcnQ7CitCYXJyZXR0LnByb3RvdHlwZS5yZWR1Y2UgPSBi
YXJyZXR0UmVkdWNlOworQmFycmV0dC5wcm90b3R5cGUubXVsVG8gPSBiYXJyZXR0TXVsVG87CitC
YXJyZXR0LnByb3RvdHlwZS5zcXJUbyA9IGJhcnJldHRTcXJUbzsKKworLy8gKHB1YmxpYykgdGhp
c15lICUgbSAoSEFDIDE0Ljg1KQorZnVuY3Rpb24gYm5Nb2RQb3coZSxtKSB7CisgIHZhciBlX2Fy
cmF5ID0gZS5hcnJheTsKKyAgdmFyIGkgPSBlLmJpdExlbmd0aCgpLCBrLCByID0gbmJ2KDEpLCB6
OworICBpZihpIDw9IDApIHJldHVybiByOworICBlbHNlIGlmKGkgPCAxOCkgayA9IDE7CisgIGVs
c2UgaWYoaSA8IDQ4KSBrID0gMzsKKyAgZWxzZSBpZihpIDwgMTQ0KSBrID0gNDsKKyAgZWxzZSBp
ZihpIDwgNzY4KSBrID0gNTsKKyAgZWxzZSBrID0gNjsKKyAgaWYoaSA8IDgpCisgICAgeiA9IG5l
dyBDbGFzc2ljKG0pOworICBlbHNlIGlmKG0uaXNFdmVuKCkpCisgICAgeiA9IG5ldyBCYXJyZXR0
KG0pOworICBlbHNlCisgICAgeiA9IG5ldyBNb250Z29tZXJ5KG0pOworCisgIC8vIHByZWNvbXB1
dGF0aW9uCisgIHZhciBnID0gbmV3IEFycmF5KCksIG4gPSAzLCBrMSA9IGstMSwga20gPSAoMTw8
ayktMTsKKyAgZ1sxXSA9IHouY29udmVydCh0aGlzKTsKKyAgaWYoayA+IDEpIHsKKyAgICB2YXIg
ZzIgPSBuYmkoKTsKKyAgICB6LnNxclRvKGdbMV0sZzIpOworICAgIHdoaWxlKG4gPD0ga20pIHsK
KyAgICAgIGdbbl0gPSBuYmkoKTsKKyAgICAgIHoubXVsVG8oZzIsZ1tuLTJdLGdbbl0pOworICAg
ICAgbiArPSAyOworICAgIH0KKyAgfQorCisgIHZhciBqID0gZS50LTEsIHcsIGlzMSA9IHRydWUs
IHIyID0gbmJpKCksIHQ7CisgIGkgPSBuYml0cyhlX2FycmF5W2pdKS0xOworICB3aGlsZShqID49
IDApIHsKKyAgICBpZihpID49IGsxKSB3ID0gKGVfYXJyYXlbal0+PihpLWsxKSkma207CisgICAg
ZWxzZSB7CisgICAgICB3ID0gKGVfYXJyYXlbal0mKCgxPDwoaSsxKSktMSkpPDwoazEtaSk7Cisg
ICAgICBpZihqID4gMCkgdyB8PSBlX2FycmF5W2otMV0+PihCSV9EQitpLWsxKTsKKyAgICB9CisK
KyAgICBuID0gazsKKyAgICB3aGlsZSgodyYxKSA9PSAwKSB7IHcgPj49IDE7IC0tbjsgfQorICAg
IGlmKChpIC09IG4pIDwgMCkgeyBpICs9IEJJX0RCOyAtLWo7IH0KKyAgICBpZihpczEpIHsJLy8g
cmV0ID09IDEsIGRvbid0IGJvdGhlciBzcXVhcmluZyBvciBtdWx0aXBseWluZyBpdAorICAgICAg
Z1t3XS5jb3B5VG8ocik7CisgICAgICBpczEgPSBmYWxzZTsKKyAgICB9CisgICAgZWxzZSB7Cisg
ICAgICB3aGlsZShuID4gMSkgeyB6LnNxclRvKHIscjIpOyB6LnNxclRvKHIyLHIpOyBuIC09IDI7
IH0KKyAgICAgIGlmKG4gPiAwKSB6LnNxclRvKHIscjIpOyBlbHNlIHsgdCA9IHI7IHIgPSByMjsg
cjIgPSB0OyB9CisgICAgICB6Lm11bFRvKHIyLGdbd10scik7CisgICAgfQorCisgICAgd2hpbGUo
aiA+PSAwICYmIChlX2FycmF5W2pdJigxPDxpKSkgPT0gMCkgeworICAgICAgei5zcXJUbyhyLHIy
KTsgdCA9IHI7IHIgPSByMjsgcjIgPSB0OworICAgICAgaWYoLS1pIDwgMCkgeyBpID0gQklfREIt
MTsgLS1qOyB9CisgICAgfQorICB9CisgIHJldHVybiB6LnJldmVydChyKTsKK30KKworLy8gKHB1
YmxpYykgZ2NkKHRoaXMsYSkgKEhBQyAxNC41NCkKK2Z1bmN0aW9uIGJuR0NEKGEpIHsKKyAgdmFy
IHggPSAodGhpcy5zPDApP3RoaXMubmVnYXRlKCk6dGhpcy5jbG9uZSgpOworICB2YXIgeSA9IChh
LnM8MCk/YS5uZWdhdGUoKTphLmNsb25lKCk7CisgIGlmKHguY29tcGFyZVRvKHkpIDwgMCkgeyB2
YXIgdCA9IHg7IHggPSB5OyB5ID0gdDsgfQorICB2YXIgaSA9IHguZ2V0TG93ZXN0U2V0Qml0KCks
IGcgPSB5LmdldExvd2VzdFNldEJpdCgpOworICBpZihnIDwgMCkgcmV0dXJuIHg7CisgIGlmKGkg
PCBnKSBnID0gaTsKKyAgaWYoZyA+IDApIHsKKyAgICB4LnJTaGlmdFRvKGcseCk7CisgICAgeS5y
U2hpZnRUbyhnLHkpOworICB9CisgIHdoaWxlKHguc2lnbnVtKCkgPiAwKSB7CisgICAgaWYoKGkg
PSB4LmdldExvd2VzdFNldEJpdCgpKSA+IDApIHguclNoaWZ0VG8oaSx4KTsKKyAgICBpZigoaSA9
IHkuZ2V0TG93ZXN0U2V0Qml0KCkpID4gMCkgeS5yU2hpZnRUbyhpLHkpOworICAgIGlmKHguY29t
cGFyZVRvKHkpID49IDApIHsKKyAgICAgIHguc3ViVG8oeSx4KTsKKyAgICAgIHguclNoaWZ0VG8o
MSx4KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICB5LnN1YlRvKHgseSk7CisgICAgICB5LnJT
aGlmdFRvKDEseSk7CisgICAgfQorICB9CisgIGlmKGcgPiAwKSB5LmxTaGlmdFRvKGcseSk7Cisg
IHJldHVybiB5OworfQorCisvLyAocHJvdGVjdGVkKSB0aGlzICUgbiwgbiA8IDJeMjYKK2Z1bmN0
aW9uIGJucE1vZEludChuKSB7CisgIHZhciB0aGlzX2FycmF5ID0gdGhpcy5hcnJheTsKKyAgaWYo
biA8PSAwKSByZXR1cm4gMDsKKyAgdmFyIGQgPSBCSV9EViVuLCByID0gKHRoaXMuczwwKT9uLTE6
MDsKKyAgaWYodGhpcy50ID4gMCkKKyAgICBpZihkID09IDApIHIgPSB0aGlzX2FycmF5WzBdJW47
CisgICAgZWxzZSBmb3IodmFyIGkgPSB0aGlzLnQtMTsgaSA+PSAwOyAtLWkpIHIgPSAoZCpyK3Ro
aXNfYXJyYXlbaV0pJW47CisgIHJldHVybiByOworfQorCisvLyAocHVibGljKSAxL3RoaXMgJSBt
IChIQUMgMTQuNjEpCitmdW5jdGlvbiBibk1vZEludmVyc2UobSkgeworICB2YXIgYWMgPSBtLmlz
RXZlbigpOworICBpZigodGhpcy5pc0V2ZW4oKSAmJiBhYykgfHwgbS5zaWdudW0oKSA9PSAwKSBy
ZXR1cm4gQmlnSW50ZWdlci5aRVJPOworICB2YXIgdSA9IG0uY2xvbmUoKSwgdiA9IHRoaXMuY2xv
bmUoKTsKKyAgdmFyIGEgPSBuYnYoMSksIGIgPSBuYnYoMCksIGMgPSBuYnYoMCksIGQgPSBuYnYo
MSk7CisgIHdoaWxlKHUuc2lnbnVtKCkgIT0gMCkgeworICAgIHdoaWxlKHUuaXNFdmVuKCkpIHsK
KyAgICAgIHUuclNoaWZ0VG8oMSx1KTsKKyAgICAgIGlmKGFjKSB7CisgICAgICAgIGlmKCFhLmlz
RXZlbigpIHx8ICFiLmlzRXZlbigpKSB7IGEuYWRkVG8odGhpcyxhKTsgYi5zdWJUbyhtLGIpOyB9
CisgICAgICAgIGEuclNoaWZ0VG8oMSxhKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYoIWIuaXNF
dmVuKCkpIGIuc3ViVG8obSxiKTsKKyAgICAgIGIuclNoaWZ0VG8oMSxiKTsKKyAgICB9CisgICAg
d2hpbGUodi5pc0V2ZW4oKSkgeworICAgICAgdi5yU2hpZnRUbygxLHYpOworICAgICAgaWYoYWMp
IHsKKyAgICAgICAgaWYoIWMuaXNFdmVuKCkgfHwgIWQuaXNFdmVuKCkpIHsgYy5hZGRUbyh0aGlz
LGMpOyBkLnN1YlRvKG0sZCk7IH0KKyAgICAgICAgYy5yU2hpZnRUbygxLGMpOworICAgICAgfQor
ICAgICAgZWxzZSBpZighZC5pc0V2ZW4oKSkgZC5zdWJUbyhtLGQpOworICAgICAgZC5yU2hpZnRU
bygxLGQpOworICAgIH0KKyAgICBpZih1LmNvbXBhcmVUbyh2KSA+PSAwKSB7CisgICAgICB1LnN1
YlRvKHYsdSk7CisgICAgICBpZihhYykgYS5zdWJUbyhjLGEpOworICAgICAgYi5zdWJUbyhkLGIp
OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHYuc3ViVG8odSx2KTsKKyAgICAgIGlmKGFjKSBj
LnN1YlRvKGEsYyk7CisgICAgICBkLnN1YlRvKGIsZCk7CisgICAgfQorICB9CisgIGlmKHYuY29t
cGFyZVRvKEJpZ0ludGVnZXIuT05FKSAhPSAwKSByZXR1cm4gQmlnSW50ZWdlci5aRVJPOworICBp
ZihkLmNvbXBhcmVUbyhtKSA+PSAwKSByZXR1cm4gZC5zdWJ0cmFjdChtKTsKKyAgaWYoZC5zaWdu
dW0oKSA8IDApIGQuYWRkVG8obSxkKTsgZWxzZSByZXR1cm4gZDsKKyAgaWYoZC5zaWdudW0oKSA8
IDApIHJldHVybiBkLmFkZChtKTsgZWxzZSByZXR1cm4gZDsKK30KKwordmFyIGxvd3ByaW1lcyA9
IFsyLDMsNSw3LDExLDEzLDE3LDE5LDIzLDI5LDMxLDM3LDQxLDQzLDQ3LDUzLDU5LDYxLDY3LDcx
LDczLDc5LDgzLDg5LDk3LDEwMSwxMDMsMTA3LDEwOSwxMTMsMTI3LDEzMSwxMzcsMTM5LDE0OSwx
NTEsMTU3LDE2MywxNjcsMTczLDE3OSwxODEsMTkxLDE5MywxOTcsMTk5LDIxMSwyMjMsMjI3LDIy
OSwyMzMsMjM5LDI0MSwyNTEsMjU3LDI2MywyNjksMjcxLDI3NywyODEsMjgzLDI5MywzMDcsMzEx
LDMxMywzMTcsMzMxLDMzNywzNDcsMzQ5LDM1MywzNTksMzY3LDM3MywzNzksMzgzLDM4OSwzOTcs
NDAxLDQwOSw0MTksNDIxLDQzMSw0MzMsNDM5LDQ0Myw0NDksNDU3LDQ2MSw0NjMsNDY3LDQ3OSw0
ODcsNDkxLDQ5OSw1MDMsNTA5XTsKK3ZhciBscGxpbSA9ICgxPDwyNikvbG93cHJpbWVzW2xvd3By
aW1lcy5sZW5ndGgtMV07CisKKy8vIChwdWJsaWMpIHRlc3QgcHJpbWFsaXR5IHdpdGggY2VydGFp
bnR5ID49IDEtLjVedAorZnVuY3Rpb24gYm5Jc1Byb2JhYmxlUHJpbWUodCkgeworICB2YXIgaSwg
eCA9IHRoaXMuYWJzKCk7CisgIHZhciB4X2FycmF5ID0geC5hcnJheTsKKyAgaWYoeC50ID09IDEg
JiYgeF9hcnJheVswXSA8PSBsb3dwcmltZXNbbG93cHJpbWVzLmxlbmd0aC0xXSkgeworICAgIGZv
cihpID0gMDsgaSA8IGxvd3ByaW1lcy5sZW5ndGg7ICsraSkKKyAgICAgIGlmKHhfYXJyYXlbMF0g
PT0gbG93cHJpbWVzW2ldKSByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAg
aWYoeC5pc0V2ZW4oKSkgcmV0dXJuIGZhbHNlOworICBpID0gMTsKKyAgd2hpbGUoaSA8IGxvd3By
aW1lcy5sZW5ndGgpIHsKKyAgICB2YXIgbSA9IGxvd3ByaW1lc1tpXSwgaiA9IGkrMTsKKyAgICB3
aGlsZShqIDwgbG93cHJpbWVzLmxlbmd0aCAmJiBtIDwgbHBsaW0pIG0gKj0gbG93cHJpbWVzW2or
K107CisgICAgbSA9IHgubW9kSW50KG0pOworICAgIHdoaWxlKGkgPCBqKSBpZihtJWxvd3ByaW1l
c1tpKytdID09IDApIHJldHVybiBmYWxzZTsKKyAgfQorICByZXR1cm4geC5taWxsZXJSYWJpbih0
KTsKK30KKworLy8gKHByb3RlY3RlZCkgdHJ1ZSBpZiBwcm9iYWJseSBwcmltZSAoSEFDIDQuMjQs
IE1pbGxlci1SYWJpbikKK2Z1bmN0aW9uIGJucE1pbGxlclJhYmluKHQpIHsKKyAgdmFyIG4xID0g
dGhpcy5zdWJ0cmFjdChCaWdJbnRlZ2VyLk9ORSk7CisgIHZhciBrID0gbjEuZ2V0TG93ZXN0U2V0
Qml0KCk7CisgIGlmKGsgPD0gMCkgcmV0dXJuIGZhbHNlOworICB2YXIgciA9IG4xLnNoaWZ0Umln
aHQoayk7CisgIHQgPSAodCsxKT4+MTsKKyAgaWYodCA+IGxvd3ByaW1lcy5sZW5ndGgpIHQgPSBs
b3dwcmltZXMubGVuZ3RoOworICB2YXIgYSA9IG5iaSgpOworICBmb3IodmFyIGkgPSAwOyBpIDwg
dDsgKytpKSB7CisgICAgYS5mcm9tSW50KGxvd3ByaW1lc1tpXSk7CisgICAgdmFyIHkgPSBhLm1v
ZFBvdyhyLHRoaXMpOworICAgIGlmKHkuY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKSAhPSAwICYm
IHkuY29tcGFyZVRvKG4xKSAhPSAwKSB7CisgICAgICB2YXIgaiA9IDE7CisgICAgICB3aGlsZShq
KysgPCBrICYmIHkuY29tcGFyZVRvKG4xKSAhPSAwKSB7CisgICAgICAgIHkgPSB5Lm1vZFBvd0lu
dCgyLHRoaXMpOworICAgICAgICBpZih5LmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSkgPT0gMCkg
cmV0dXJuIGZhbHNlOworICAgICAgfQorICAgICAgaWYoeS5jb21wYXJlVG8objEpICE9IDApIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHRydWU7Cit9CisKKy8vIHByb3RlY3Rl
ZAorQmlnSW50ZWdlci5wcm90b3R5cGUuY2h1bmtTaXplID0gYm5wQ2h1bmtTaXplOworQmlnSW50
ZWdlci5wcm90b3R5cGUudG9SYWRpeCA9IGJucFRvUmFkaXg7CitCaWdJbnRlZ2VyLnByb3RvdHlw
ZS5mcm9tUmFkaXggPSBibnBGcm9tUmFkaXg7CitCaWdJbnRlZ2VyLnByb3RvdHlwZS5mcm9tTnVt
YmVyID0gYm5wRnJvbU51bWJlcjsKK0JpZ0ludGVnZXIucHJvdG90eXBlLmJpdHdpc2VUbyA9IGJu
cEJpdHdpc2VUbzsKK0JpZ0ludGVnZXIucHJvdG90eXBlLmNoYW5nZUJpdCA9IGJucENoYW5nZUJp
dDsKK0JpZ0ludGVnZXIucHJvdG90eXBlLmFkZFRvID0gYm5wQWRkVG87CitCaWdJbnRlZ2VyLnBy
b3RvdHlwZS5kTXVsdGlwbHkgPSBibnBETXVsdGlwbHk7CitCaWdJbnRlZ2VyLnByb3RvdHlwZS5k
QWRkT2Zmc2V0ID0gYm5wREFkZE9mZnNldDsKK0JpZ0ludGVnZXIucHJvdG90eXBlLm11bHRpcGx5
TG93ZXJUbyA9IGJucE11bHRpcGx5TG93ZXJUbzsKK0JpZ0ludGVnZXIucHJvdG90eXBlLm11bHRp
cGx5VXBwZXJUbyA9IGJucE11bHRpcGx5VXBwZXJUbzsKK0JpZ0ludGVnZXIucHJvdG90eXBlLm1v
ZEludCA9IGJucE1vZEludDsKK0JpZ0ludGVnZXIucHJvdG90eXBlLm1pbGxlclJhYmluID0gYm5w
TWlsbGVyUmFiaW47CisKKy8vIHB1YmxpYworQmlnSW50ZWdlci5wcm90b3R5cGUuY2xvbmUgPSBi
bkNsb25lOworQmlnSW50ZWdlci5wcm90b3R5cGUuaW50VmFsdWUgPSBibkludFZhbHVlOworQmln
SW50ZWdlci5wcm90b3R5cGUuYnl0ZVZhbHVlID0gYm5CeXRlVmFsdWU7CitCaWdJbnRlZ2VyLnBy
b3RvdHlwZS5zaG9ydFZhbHVlID0gYm5TaG9ydFZhbHVlOworQmlnSW50ZWdlci5wcm90b3R5cGUu
c2lnbnVtID0gYm5TaWdOdW07CitCaWdJbnRlZ2VyLnByb3RvdHlwZS50b0J5dGVBcnJheSA9IGJu
VG9CeXRlQXJyYXk7CitCaWdJbnRlZ2VyLnByb3RvdHlwZS5lcXVhbHMgPSBibkVxdWFsczsKK0Jp
Z0ludGVnZXIucHJvdG90eXBlLm1pbiA9IGJuTWluOworQmlnSW50ZWdlci5wcm90b3R5cGUubWF4
ID0gYm5NYXg7CitCaWdJbnRlZ2VyLnByb3RvdHlwZS5hbmQgPSBibkFuZDsKK0JpZ0ludGVnZXIu
cHJvdG90eXBlLm9yID0gYm5PcjsKK0JpZ0ludGVnZXIucHJvdG90eXBlLnhvciA9IGJuWG9yOwor
QmlnSW50ZWdlci5wcm90b3R5cGUuYW5kTm90ID0gYm5BbmROb3Q7CitCaWdJbnRlZ2VyLnByb3Rv
dHlwZS5ub3QgPSBibk5vdDsKK0JpZ0ludGVnZXIucHJvdG90eXBlLnNoaWZ0TGVmdCA9IGJuU2hp
ZnRMZWZ0OworQmlnSW50ZWdlci5wcm90b3R5cGUuc2hpZnRSaWdodCA9IGJuU2hpZnRSaWdodDsK
K0JpZ0ludGVnZXIucHJvdG90eXBlLmdldExvd2VzdFNldEJpdCA9IGJuR2V0TG93ZXN0U2V0Qml0
OworQmlnSW50ZWdlci5wcm90b3R5cGUuYml0Q291bnQgPSBibkJpdENvdW50OworQmlnSW50ZWdl
ci5wcm90b3R5cGUudGVzdEJpdCA9IGJuVGVzdEJpdDsKK0JpZ0ludGVnZXIucHJvdG90eXBlLnNl
dEJpdCA9IGJuU2V0Qml0OworQmlnSW50ZWdlci5wcm90b3R5cGUuY2xlYXJCaXQgPSBibkNsZWFy
Qml0OworQmlnSW50ZWdlci5wcm90b3R5cGUuZmxpcEJpdCA9IGJuRmxpcEJpdDsKK0JpZ0ludGVn
ZXIucHJvdG90eXBlLmFkZCA9IGJuQWRkOworQmlnSW50ZWdlci5wcm90b3R5cGUuc3VidHJhY3Qg
PSBiblN1YnRyYWN0OworQmlnSW50ZWdlci5wcm90b3R5cGUubXVsdGlwbHkgPSBibk11bHRpcGx5
OworQmlnSW50ZWdlci5wcm90b3R5cGUuZGl2aWRlID0gYm5EaXZpZGU7CitCaWdJbnRlZ2VyLnBy
b3RvdHlwZS5yZW1haW5kZXIgPSBiblJlbWFpbmRlcjsKK0JpZ0ludGVnZXIucHJvdG90eXBlLmRp
dmlkZUFuZFJlbWFpbmRlciA9IGJuRGl2aWRlQW5kUmVtYWluZGVyOworQmlnSW50ZWdlci5wcm90
b3R5cGUubW9kUG93ID0gYm5Nb2RQb3c7CitCaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2RJbnZlcnNl
ID0gYm5Nb2RJbnZlcnNlOworQmlnSW50ZWdlci5wcm90b3R5cGUucG93ID0gYm5Qb3c7CitCaWdJ
bnRlZ2VyLnByb3RvdHlwZS5nY2QgPSBibkdDRDsKK0JpZ0ludGVnZXIucHJvdG90eXBlLmlzUHJv
YmFibGVQcmltZSA9IGJuSXNQcm9iYWJsZVByaW1lOworCisvLyBCaWdJbnRlZ2VyIGludGVyZmFj
ZXMgbm90IGltcGxlbWVudGVkIGluIGpzYm46CisKKy8vIEJpZ0ludGVnZXIoaW50IHNpZ251bSwg
Ynl0ZVtdIG1hZ25pdHVkZSkKKy8vIGRvdWJsZSBkb3VibGVWYWx1ZSgpCisvLyBmbG9hdCBmbG9h
dFZhbHVlKCkKKy8vIGludCBoYXNoQ29kZSgpCisvLyBsb25nIGxvbmdWYWx1ZSgpCisvLyBzdGF0
aWMgQmlnSW50ZWdlciB2YWx1ZU9mKGxvbmcgdmFsKQorLy8gcHJuZzQuanMgLSB1c2VzIEFyY2Zv
dXIgYXMgYSBQUk5HCisKK2Z1bmN0aW9uIEFyY2ZvdXIoKSB7CisgIHRoaXMuaSA9IDA7CisgIHRo
aXMuaiA9IDA7CisgIHRoaXMuUyA9IG5ldyBBcnJheSgpOworfQorCisvLyBJbml0aWFsaXplIGFy
Y2ZvdXIgY29udGV4dCBmcm9tIGtleSwgYW4gYXJyYXkgb2YgaW50cywgZWFjaCBmcm9tIFswLi4y
NTVdCitmdW5jdGlvbiBBUkM0aW5pdChrZXkpIHsKKyAgdmFyIGksIGosIHQ7CisgIGZvcihpID0g
MDsgaSA8IDI1NjsgKytpKQorICAgIHRoaXMuU1tpXSA9IGk7CisgIGogPSAwOworICBmb3IoaSA9
IDA7IGkgPCAyNTY7ICsraSkgeworICAgIGogPSAoaiArIHRoaXMuU1tpXSArIGtleVtpICUga2V5
Lmxlbmd0aF0pICYgMjU1OworICAgIHQgPSB0aGlzLlNbaV07CisgICAgdGhpcy5TW2ldID0gdGhp
cy5TW2pdOworICAgIHRoaXMuU1tqXSA9IHQ7CisgIH0KKyAgdGhpcy5pID0gMDsKKyAgdGhpcy5q
ID0gMDsKK30KKworZnVuY3Rpb24gQVJDNG5leHQoKSB7CisgIHZhciB0OworICB0aGlzLmkgPSAo
dGhpcy5pICsgMSkgJiAyNTU7CisgIHRoaXMuaiA9ICh0aGlzLmogKyB0aGlzLlNbdGhpcy5pXSkg
JiAyNTU7CisgIHQgPSB0aGlzLlNbdGhpcy5pXTsKKyAgdGhpcy5TW3RoaXMuaV0gPSB0aGlzLlNb
dGhpcy5qXTsKKyAgdGhpcy5TW3RoaXMual0gPSB0OworICByZXR1cm4gdGhpcy5TWyh0ICsgdGhp
cy5TW3RoaXMuaV0pICYgMjU1XTsKK30KKworQXJjZm91ci5wcm90b3R5cGUuaW5pdCA9IEFSQzRp
bml0OworQXJjZm91ci5wcm90b3R5cGUubmV4dCA9IEFSQzRuZXh0OworCisvLyBQbHVnIGluIHlv
dXIgUk5HIGNvbnN0cnVjdG9yIGhlcmUKK2Z1bmN0aW9uIHBybmdfbmV3c3RhdGUoKSB7CisgIHJl
dHVybiBuZXcgQXJjZm91cigpOworfQorCisvLyBQb29sIHNpemUgbXVzdCBiZSBhIG11bHRpcGxl
IG9mIDQgYW5kIGdyZWF0ZXIgdGhhbiAzMi4KKy8vIEFuIGFycmF5IG9mIGJ5dGVzIHRoZSBzaXpl
IG9mIHRoZSBwb29sIHdpbGwgYmUgcGFzc2VkIHRvIGluaXQoKQordmFyIHJuZ19wc2l6ZSA9IDI1
NjsKKy8vIFJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIC0gcmVxdWlyZXMgYSBQUk5HIGJhY2tlbmQs
IGUuZy4gcHJuZzQuanMKKworLy8gRm9yIGJlc3QgcmVzdWx0cywgcHV0IGNvZGUgbGlrZQorLy8g
PGJvZHkgb25DbGljaz0ncm5nX3NlZWRfdGltZSgpOycgb25LZXlQcmVzcz0ncm5nX3NlZWRfdGlt
ZSgpOyc+CisvLyBpbiB5b3VyIG1haW4gSFRNTCBkb2N1bWVudC4KKwordmFyIHJuZ19zdGF0ZTsK
K3ZhciBybmdfcG9vbDsKK3ZhciBybmdfcHB0cjsKKworLy8gTWl4IGluIGEgMzItYml0IGludGVn
ZXIgaW50byB0aGUgcG9vbAorZnVuY3Rpb24gcm5nX3NlZWRfaW50KHgpIHsKKyAgcm5nX3Bvb2xb
cm5nX3BwdHIrK10gXj0geCAmIDI1NTsKKyAgcm5nX3Bvb2xbcm5nX3BwdHIrK10gXj0gKHggPj4g
OCkgJiAyNTU7CisgIHJuZ19wb29sW3JuZ19wcHRyKytdIF49ICh4ID4+IDE2KSAmIDI1NTsKKyAg
cm5nX3Bvb2xbcm5nX3BwdHIrK10gXj0gKHggPj4gMjQpICYgMjU1OworICBpZihybmdfcHB0ciA+
PSBybmdfcHNpemUpIHJuZ19wcHRyIC09IHJuZ19wc2l6ZTsKK30KKworLy8gTWl4IGluIHRoZSBj
dXJyZW50IHRpbWUgKHcvbWlsbGlzZWNvbmRzKSBpbnRvIHRoZSBwb29sCitmdW5jdGlvbiBybmdf
c2VlZF90aW1lKCkgeworICBybmdfc2VlZF9pbnQobmV3IERhdGUoKS5nZXRUaW1lKCkpOworfQor
CisvLyBJbml0aWFsaXplIHRoZSBwb29sIHdpdGgganVuayBpZiBuZWVkZWQuCitpZihybmdfcG9v
bCA9PSBudWxsKSB7CisgIHJuZ19wb29sID0gbmV3IEFycmF5KCk7CisgIHJuZ19wcHRyID0gMDsK
KyAgdmFyIHQ7CisgIHdoaWxlKHJuZ19wcHRyIDwgcm5nX3BzaXplKSB7ICAvLyBleHRyYWN0IHNv
bWUgcmFuZG9tbmVzcyBmcm9tIE1hdGgucmFuZG9tKCkKKyAgICB0ID0gTWF0aC5mbG9vcig2NTUz
NiAqIE1hdGgucmFuZG9tKCkpOworICAgIHJuZ19wb29sW3JuZ19wcHRyKytdID0gdCA+Pj4gODsK
KyAgICBybmdfcG9vbFtybmdfcHB0cisrXSA9IHQgJiAyNTU7CisgIH0KKyAgcm5nX3BwdHIgPSAw
OworICBybmdfc2VlZF90aW1lKCk7CisgIC8vcm5nX3NlZWRfaW50KHdpbmRvdy5zY3JlZW5YKTsK
KyAgLy9ybmdfc2VlZF9pbnQod2luZG93LnNjcmVlblkpOworfQorCitmdW5jdGlvbiBybmdfZ2V0
X2J5dGUoKSB7CisgIGlmKHJuZ19zdGF0ZSA9PSBudWxsKSB7CisgICAgcm5nX3NlZWRfdGltZSgp
OworICAgIHJuZ19zdGF0ZSA9IHBybmdfbmV3c3RhdGUoKTsKKyAgICBybmdfc3RhdGUuaW5pdChy
bmdfcG9vbCk7CisgICAgZm9yKHJuZ19wcHRyID0gMDsgcm5nX3BwdHIgPCBybmdfcG9vbC5sZW5n
dGg7ICsrcm5nX3BwdHIpCisgICAgICBybmdfcG9vbFtybmdfcHB0cl0gPSAwOworICAgIHJuZ19w
cHRyID0gMDsKKyAgICAvL3JuZ19wb29sID0gbnVsbDsKKyAgfQorICAvLyBUT0RPOiBhbGxvdyBy
ZXNlZWRpbmcgYWZ0ZXIgZmlyc3QgcmVxdWVzdAorICByZXR1cm4gcm5nX3N0YXRlLm5leHQoKTsK
K30KKworZnVuY3Rpb24gcm5nX2dldF9ieXRlcyhiYSkgeworICB2YXIgaTsKKyAgZm9yKGkgPSAw
OyBpIDwgYmEubGVuZ3RoOyArK2kpIGJhW2ldID0gcm5nX2dldF9ieXRlKCk7Cit9CisKK2Z1bmN0
aW9uIFNlY3VyZVJhbmRvbSgpIHt9CisKK1NlY3VyZVJhbmRvbS5wcm90b3R5cGUubmV4dEJ5dGVz
ID0gcm5nX2dldF9ieXRlczsKKy8vIERlcGVuZHMgb24ganNibi5qcyBhbmQgcm5nLmpzCisKKy8v
IGNvbnZlcnQgYSAoaGV4KSBzdHJpbmcgdG8gYSBiaWdudW0gb2JqZWN0CitmdW5jdGlvbiBwYXJz
ZUJpZ0ludChzdHIscikgeworICByZXR1cm4gbmV3IEJpZ0ludGVnZXIoc3RyLHIpOworfQorCitm
dW5jdGlvbiBsaW5lYnJrKHMsbikgeworICB2YXIgcmV0ID0gIiI7CisgIHZhciBpID0gMDsKKyAg
d2hpbGUoaSArIG4gPCBzLmxlbmd0aCkgeworICAgIHJldCArPSBzLnN1YnN0cmluZyhpLGkrbikg
KyAiXG4iOworICAgIGkgKz0gbjsKKyAgfQorICByZXR1cm4gcmV0ICsgcy5zdWJzdHJpbmcoaSxz
Lmxlbmd0aCk7Cit9CisKK2Z1bmN0aW9uIGJ5dGUySGV4KGIpIHsKKyAgaWYoYiA8IDB4MTApCisg
ICAgcmV0dXJuICIwIiArIGIudG9TdHJpbmcoMTYpOworICBlbHNlCisgICAgcmV0dXJuIGIudG9T
dHJpbmcoMTYpOworfQorCisvLyBQS0NTIzEgKHR5cGUgMiwgcmFuZG9tKSBwYWQgaW5wdXQgc3Ry
aW5nIHMgdG8gbiBieXRlcywgYW5kIHJldHVybiBhIGJpZ2ludAorZnVuY3Rpb24gcGtjczFwYWQy
KHMsbikgeworICBpZihuIDwgcy5sZW5ndGggKyAxMSkgeworICAgIGFsZXJ0KCJNZXNzYWdlIHRv
byBsb25nIGZvciBSU0EiKTsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorICB2YXIgYmEgPSBuZXcg
QXJyYXkoKTsKKyAgdmFyIGkgPSBzLmxlbmd0aCAtIDE7CisgIHdoaWxlKGkgPj0gMCAmJiBuID4g
MCkgYmFbLS1uXSA9IHMuY2hhckNvZGVBdChpLS0pOworICBiYVstLW5dID0gMDsKKyAgdmFyIHJu
ZyA9IG5ldyBTZWN1cmVSYW5kb20oKTsKKyAgdmFyIHggPSBuZXcgQXJyYXkoKTsKKyAgd2hpbGUo
biA+IDIpIHsgLy8gcmFuZG9tIG5vbi16ZXJvIHBhZAorICAgIHhbMF0gPSAwOworICAgIHdoaWxl
KHhbMF0gPT0gMCkgcm5nLm5leHRCeXRlcyh4KTsKKyAgICBiYVstLW5dID0geFswXTsKKyAgfQor
ICBiYVstLW5dID0gMjsKKyAgYmFbLS1uXSA9IDA7CisgIHJldHVybiBuZXcgQmlnSW50ZWdlcihi
YSk7Cit9CisKKy8vICJlbXB0eSIgUlNBIGtleSBjb25zdHJ1Y3RvcgorZnVuY3Rpb24gUlNBS2V5
KCkgeworICB0aGlzLm4gPSBudWxsOworICB0aGlzLmUgPSAwOworICB0aGlzLmQgPSBudWxsOwor
ICB0aGlzLnAgPSBudWxsOworICB0aGlzLnEgPSBudWxsOworICB0aGlzLmRtcDEgPSBudWxsOwor
ICB0aGlzLmRtcTEgPSBudWxsOworICB0aGlzLmNvZWZmID0gbnVsbDsKK30KKworLy8gU2V0IHRo
ZSBwdWJsaWMga2V5IGZpZWxkcyBOIGFuZCBlIGZyb20gaGV4IHN0cmluZ3MKK2Z1bmN0aW9uIFJT
QVNldFB1YmxpYyhOLEUpIHsKKyAgaWYoTiAhPSBudWxsICYmIEUgIT0gbnVsbCAmJiBOLmxlbmd0
aCA+IDAgJiYgRS5sZW5ndGggPiAwKSB7CisgICAgdGhpcy5uID0gcGFyc2VCaWdJbnQoTiwxNik7
CisgICAgdGhpcy5lID0gcGFyc2VJbnQoRSwxNik7CisgIH0KKyAgZWxzZQorICAgIGFsZXJ0KCJJ
bnZhbGlkIFJTQSBwdWJsaWMga2V5Iik7Cit9CisKKy8vIFBlcmZvcm0gcmF3IHB1YmxpYyBvcGVy
YXRpb24gb24gIngiOiByZXR1cm4geF5lIChtb2QgbikKK2Z1bmN0aW9uIFJTQURvUHVibGljKHgp
IHsKKyAgcmV0dXJuIHgubW9kUG93SW50KHRoaXMuZSwgdGhpcy5uKTsKK30KKworLy8gUmV0dXJu
IHRoZSBQS0NTIzEgUlNBIGVuY3J5cHRpb24gb2YgInRleHQiIGFzIGFuIGV2ZW4tbGVuZ3RoIGhl
eCBzdHJpbmcKK2Z1bmN0aW9uIFJTQUVuY3J5cHQodGV4dCkgeworICB2YXIgbSA9IHBrY3MxcGFk
Mih0ZXh0LCh0aGlzLm4uYml0TGVuZ3RoKCkrNyk+PjMpOworICBpZihtID09IG51bGwpIHJldHVy
biBudWxsOworICB2YXIgYyA9IHRoaXMuZG9QdWJsaWMobSk7CisgIGlmKGMgPT0gbnVsbCkgcmV0
dXJuIG51bGw7CisgIHZhciBoID0gYy50b1N0cmluZygxNik7CisgIGlmKChoLmxlbmd0aCAmIDEp
ID09IDApIHJldHVybiBoOyBlbHNlIHJldHVybiAiMCIgKyBoOworfQorCisvLyBSZXR1cm4gdGhl
IFBLQ1MjMSBSU0EgZW5jcnlwdGlvbiBvZiAidGV4dCIgYXMgYSBCYXNlNjQtZW5jb2RlZCBzdHJp
bmcKKy8vZnVuY3Rpb24gUlNBRW5jcnlwdEI2NCh0ZXh0KSB7CisvLyAgdmFyIGggPSB0aGlzLmVu
Y3J5cHQodGV4dCk7CisvLyAgaWYoaCkgcmV0dXJuIGhleDJiNjQoaCk7IGVsc2UgcmV0dXJuIG51
bGw7CisvL30KKworLy8gcHJvdGVjdGVkCitSU0FLZXkucHJvdG90eXBlLmRvUHVibGljID0gUlNB
RG9QdWJsaWM7CisKKy8vIHB1YmxpYworUlNBS2V5LnByb3RvdHlwZS5zZXRQdWJsaWMgPSBSU0FT
ZXRQdWJsaWM7CitSU0FLZXkucHJvdG90eXBlLmVuY3J5cHQgPSBSU0FFbmNyeXB0OworLy9SU0FL
ZXkucHJvdG90eXBlLmVuY3J5cHRfYjY0ID0gUlNBRW5jcnlwdEI2NDsKKy8vIERlcGVuZHMgb24g
cnNhLmpzIGFuZCBqc2JuMi5qcworCisvLyBVbmRvIFBLQ1MjMSAodHlwZSAyLCByYW5kb20pIHBh
ZGRpbmcgYW5kLCBpZiB2YWxpZCwgcmV0dXJuIHRoZSBwbGFpbnRleHQKK2Z1bmN0aW9uIHBrY3Mx
dW5wYWQyKGQsbikgeworICB2YXIgYiA9IGQudG9CeXRlQXJyYXkoKTsKKyAgdmFyIGkgPSAwOwor
ICB3aGlsZShpIDwgYi5sZW5ndGggJiYgYltpXSA9PSAwKSArK2k7CisgIGlmKGIubGVuZ3RoLWkg
IT0gbi0xIHx8IGJbaV0gIT0gMikKKyAgICByZXR1cm4gbnVsbDsKKyAgKytpOworICB3aGlsZShi
W2ldICE9IDApCisgICAgaWYoKytpID49IGIubGVuZ3RoKSByZXR1cm4gbnVsbDsKKyAgdmFyIHJl
dCA9ICIiOworICB3aGlsZSgrK2kgPCBiLmxlbmd0aCkKKyAgICByZXQgKz0gU3RyaW5nLmZyb21D
aGFyQ29kZShiW2ldKTsKKyAgcmV0dXJuIHJldDsKK30KKworLy8gU2V0IHRoZSBwcml2YXRlIGtl
eSBmaWVsZHMgTiwgZSwgYW5kIGQgZnJvbSBoZXggc3RyaW5ncworZnVuY3Rpb24gUlNBU2V0UHJp
dmF0ZShOLEUsRCkgeworICBpZihOICE9IG51bGwgJiYgRSAhPSBudWxsICYmIE4ubGVuZ3RoID4g
MCAmJiBFLmxlbmd0aCA+IDApIHsKKyAgICB0aGlzLm4gPSBwYXJzZUJpZ0ludChOLDE2KTsKKyAg
ICB0aGlzLmUgPSBwYXJzZUludChFLDE2KTsKKyAgICB0aGlzLmQgPSBwYXJzZUJpZ0ludChELDE2
KTsKKyAgfQorICBlbHNlCisgICAgYWxlcnQoIkludmFsaWQgUlNBIHByaXZhdGUga2V5Iik7Cit9
CisKKy8vIFNldCB0aGUgcHJpdmF0ZSBrZXkgZmllbGRzIE4sIGUsIGQgYW5kIENSVCBwYXJhbXMg
ZnJvbSBoZXggc3RyaW5ncworZnVuY3Rpb24gUlNBU2V0UHJpdmF0ZUV4KE4sRSxELFAsUSxEUCxE
USxDKSB7CisgIGlmKE4gIT0gbnVsbCAmJiBFICE9IG51bGwgJiYgTi5sZW5ndGggPiAwICYmIEUu
bGVuZ3RoID4gMCkgeworICAgIHRoaXMubiA9IHBhcnNlQmlnSW50KE4sMTYpOworICAgIHRoaXMu
ZSA9IHBhcnNlSW50KEUsMTYpOworICAgIHRoaXMuZCA9IHBhcnNlQmlnSW50KEQsMTYpOworICAg
IHRoaXMucCA9IHBhcnNlQmlnSW50KFAsMTYpOworICAgIHRoaXMucSA9IHBhcnNlQmlnSW50KFEs
MTYpOworICAgIHRoaXMuZG1wMSA9IHBhcnNlQmlnSW50KERQLDE2KTsKKyAgICB0aGlzLmRtcTEg
PSBwYXJzZUJpZ0ludChEUSwxNik7CisgICAgdGhpcy5jb2VmZiA9IHBhcnNlQmlnSW50KEMsMTYp
OworICB9CisgIGVsc2UKKyAgICBhbGVydCgiSW52YWxpZCBSU0EgcHJpdmF0ZSBrZXkiKTsKK30K
KworLy8gR2VuZXJhdGUgYSBuZXcgcmFuZG9tIHByaXZhdGUga2V5IEIgYml0cyBsb25nLCB1c2lu
ZyBwdWJsaWMgZXhwdCBFCitmdW5jdGlvbiBSU0FHZW5lcmF0ZShCLEUpIHsKKyAgdmFyIHJuZyA9
IG5ldyBTZWN1cmVSYW5kb20oKTsKKyAgdmFyIHFzID0gQj4+MTsKKyAgdGhpcy5lID0gcGFyc2VJ
bnQoRSwxNik7CisgIHZhciBlZSA9IG5ldyBCaWdJbnRlZ2VyKEUsMTYpOworICBmb3IoOzspIHsK
KyAgICBmb3IoOzspIHsKKyAgICAgIHRoaXMucCA9IG5ldyBCaWdJbnRlZ2VyKEItcXMsMSxybmcp
OworICAgICAgaWYodGhpcy5wLnN1YnRyYWN0KEJpZ0ludGVnZXIuT05FKS5nY2QoZWUpLmNvbXBh
cmVUbyhCaWdJbnRlZ2VyLk9ORSkgPT0gMCAmJiB0aGlzLnAuaXNQcm9iYWJsZVByaW1lKDEwKSkg
YnJlYWs7CisgICAgfQorICAgIGZvcig7OykgeworICAgICAgdGhpcy5xID0gbmV3IEJpZ0ludGVn
ZXIocXMsMSxybmcpOworICAgICAgaWYodGhpcy5xLnN1YnRyYWN0KEJpZ0ludGVnZXIuT05FKS5n
Y2QoZWUpLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSkgPT0gMCAmJiB0aGlzLnEuaXNQcm9iYWJs
ZVByaW1lKDEwKSkgYnJlYWs7CisgICAgfQorICAgIGlmKHRoaXMucC5jb21wYXJlVG8odGhpcy5x
KSA8PSAwKSB7CisgICAgICB2YXIgdCA9IHRoaXMucDsKKyAgICAgIHRoaXMucCA9IHRoaXMucTsK
KyAgICAgIHRoaXMucSA9IHQ7CisgICAgfQorICAgIHZhciBwMSA9IHRoaXMucC5zdWJ0cmFjdChC
aWdJbnRlZ2VyLk9ORSk7CisgICAgdmFyIHExID0gdGhpcy5xLnN1YnRyYWN0KEJpZ0ludGVnZXIu
T05FKTsKKyAgICB2YXIgcGhpID0gcDEubXVsdGlwbHkocTEpOworICAgIGlmKHBoaS5nY2QoZWUp
LmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSkgPT0gMCkgeworICAgICAgdGhpcy5uID0gdGhpcy5w
Lm11bHRpcGx5KHRoaXMucSk7CisgICAgICB0aGlzLmQgPSBlZS5tb2RJbnZlcnNlKHBoaSk7Cisg
ICAgICB0aGlzLmRtcDEgPSB0aGlzLmQubW9kKHAxKTsKKyAgICAgIHRoaXMuZG1xMSA9IHRoaXMu
ZC5tb2QocTEpOworICAgICAgdGhpcy5jb2VmZiA9IHRoaXMucS5tb2RJbnZlcnNlKHRoaXMucCk7
CisgICAgICBicmVhazsKKyAgICB9CisgIH0KK30KKworLy8gUGVyZm9ybSByYXcgcHJpdmF0ZSBv
cGVyYXRpb24gb24gIngiOiByZXR1cm4geF5kIChtb2QgbikKK2Z1bmN0aW9uIFJTQURvUHJpdmF0
ZSh4KSB7CisgIGlmKHRoaXMucCA9PSBudWxsIHx8IHRoaXMucSA9PSBudWxsKQorICAgIHJldHVy
biB4Lm1vZFBvdyh0aGlzLmQsIHRoaXMubik7CisKKyAgLy8gVE9ETzogcmUtY2FsY3VsYXRlIGFu
eSBtaXNzaW5nIENSVCBwYXJhbXMKKyAgdmFyIHhwID0geC5tb2QodGhpcy5wKS5tb2RQb3codGhp
cy5kbXAxLCB0aGlzLnApOworICB2YXIgeHEgPSB4Lm1vZCh0aGlzLnEpLm1vZFBvdyh0aGlzLmRt
cTEsIHRoaXMucSk7CisKKyAgd2hpbGUoeHAuY29tcGFyZVRvKHhxKSA8IDApCisgICAgeHAgPSB4
cC5hZGQodGhpcy5wKTsKKyAgcmV0dXJuIHhwLnN1YnRyYWN0KHhxKS5tdWx0aXBseSh0aGlzLmNv
ZWZmKS5tb2QodGhpcy5wKS5tdWx0aXBseSh0aGlzLnEpLmFkZCh4cSk7Cit9CisKKy8vIFJldHVy
biB0aGUgUEtDUyMxIFJTQSBkZWNyeXB0aW9uIG9mICJjdGV4dCIuCisvLyAiY3RleHQiIGlzIGFu
IGV2ZW4tbGVuZ3RoIGhleCBzdHJpbmcgYW5kIHRoZSBvdXRwdXQgaXMgYSBwbGFpbiBzdHJpbmcu
CitmdW5jdGlvbiBSU0FEZWNyeXB0KGN0ZXh0KSB7CisgIHZhciBjID0gcGFyc2VCaWdJbnQoY3Rl
eHQsIDE2KTsKKyAgdmFyIG0gPSB0aGlzLmRvUHJpdmF0ZShjKTsKKyAgaWYobSA9PSBudWxsKSBy
ZXR1cm4gbnVsbDsKKyAgcmV0dXJuIHBrY3MxdW5wYWQyKG0sICh0aGlzLm4uYml0TGVuZ3RoKCkr
Nyk+PjMpOworfQorCisvLyBSZXR1cm4gdGhlIFBLQ1MjMSBSU0EgZGVjcnlwdGlvbiBvZiAiY3Rl
eHQiLgorLy8gImN0ZXh0IiBpcyBhIEJhc2U2NC1lbmNvZGVkIHN0cmluZyBhbmQgdGhlIG91dHB1
dCBpcyBhIHBsYWluIHN0cmluZy4KKy8vZnVuY3Rpb24gUlNBQjY0RGVjcnlwdChjdGV4dCkgewor
Ly8gIHZhciBoID0gYjY0dG9oZXgoY3RleHQpOworLy8gIGlmKGgpIHJldHVybiB0aGlzLmRlY3J5
cHQoaCk7IGVsc2UgcmV0dXJuIG51bGw7CisvL30KKworLy8gcHJvdGVjdGVkCitSU0FLZXkucHJv
dG90eXBlLmRvUHJpdmF0ZSA9IFJTQURvUHJpdmF0ZTsKKworLy8gcHVibGljCitSU0FLZXkucHJv
dG90eXBlLnNldFByaXZhdGUgPSBSU0FTZXRQcml2YXRlOworUlNBS2V5LnByb3RvdHlwZS5zZXRQ
cml2YXRlRXggPSBSU0FTZXRQcml2YXRlRXg7CitSU0FLZXkucHJvdG90eXBlLmdlbmVyYXRlID0g
UlNBR2VuZXJhdGU7CitSU0FLZXkucHJvdG90eXBlLmRlY3J5cHQgPSBSU0FEZWNyeXB0OworLy9S
U0FLZXkucHJvdG90eXBlLmI2NF9kZWNyeXB0ID0gUlNBQjY0RGVjcnlwdDsKKworCituVmFsdWU9
ImE1MjYxOTM5OTc1OTQ4YmI3YTU4ZGZmZTVmZjU0ZTY1ZjA0OThmOTE3NWY1YTA5Mjg4ODEwYjg5
NzU4NzFlOTlhZjNiNWRkOTQwNTdiMGZjMDc1MzVmNWY5NzQ0NDUwNGZhMzUxNjlkNDYxZDBkMzBj
ZjAxOTJlMzA3NzI3YzA2NTE2OGM3ODg3NzFjNTYxYTk0MDBmYjQ5MTc1ZTllNmFhNGUyM2ZlMTFh
ZjY5ZTk0MTJkZDIzYjBjYjY2ODRjNGMyNDI5YmNlMTM5ZTg0OGFiMjZkMDgyOTA3MzM1MWY0YWNk
MzYwNzRlYWZkMDM2YTVlYjgzMzU5ZDJhNjk4ZDMiOworZVZhbHVlPSIxMDAwMSI7CitkVmFsdWU9
IjhlOTkxMmY2ZDM2NDU4OTRlOGQzOGNiNThjMGRiODFmZjUxNmNmNGM3ZTVhMTRjN2YxZWRkYjE0
NTlkMmNkZWQ0ZDhkMjkzZmM5N2FlZTZhZWZiODYxODU5YzhiNmEzZDFkZmU3MTA0NjNlMWY5ZGRj
NzIwNDhjMDk3NTE5NzFjNGE1ODBhYTUxZWI1MjMzNTdhM2NjNDhkMzFjZmFkMWQ0YTE2NTA2NmVk
OTJkNDc0OGZiNjU3MTIxMWRhNWNiMTRiYzExYjZlMmRmN2MxYTU1OWU2ZDVhYzFjZDVjOTQ3MDNh
MjI4OTE0NjRmYmEyM2QwZDk2NTA4NjI3N2ExNjEiOworcFZhbHVlPSJkMDkwY2U1OGE5MmM3NTIz
M2E2NDg2Y2IwYTkyMDliZjM1ODNiNjRmNTQwYzc2ZjUyOTRiYjk3ZDI4NWVlZDMzYWVjMjIwYmRl
MTRiMjQxNzk1MTE3OGFjMTUyY2VhYjZkYTcwOTA5MDViNDc4MTk1NDk4YjM1MjA0OGYxNWU3ZCI7
CitxVmFsdWU9ImNhYjU3NWRjNjUyYmI2NmRmMTVhMDM1OTYwOWQ1MWQxZGIxODQ3NTBjMDBjNjY5
OGI5MGVmMzQ2NWM5OTY1NTEwM2VkYmYwZDU0YzU2YWVjMGNlM2M0ZDIyNTkyMzM4MDkyYTEyNmEw
Y2M0OWY2NWE0YTMwZDIyMmI0MTFlNThmIjsKK2RtcDFWYWx1ZT0iMWEyNGJjYThlMjczZGYyZjBl
NDdjMTk5YmJmNjc4NjA0ZTdkZjcyMTU0ODBjNzdjOGRiMzlmNDliMDAwY2UyY2Y3NTAwMDM4YWNm
ZmY1NDMzYjdkNTgyYTAxZjE4MjZlNmY0ZDQyZTFjNTdmNWUxZmVmN2IxMmFhYmM1OWZkMjUiOwor
ZG1xMVZhbHVlPSIzZDA2OTgyZWZiYmU0NzMzOWUxZjZkMzZiMTIxNmI4YTc0MWQ0MTBiMGM2NjJm
NTRmNzExOGIyN2I5YTRlYzlkOTE0MzM3ZWIzOTg0MWQ4NjY2ZjMwMzQ0MDhjZjk0ZjViNjJmMTFj
NDAyZmM5OTRmZTE1YTA1NDkzMTUwZDlmZCI7Citjb2VmZlZhbHVlPSIzYTNlNzMxYWNkODk2MGI3
ZmY5ZWI4MWE3ZmY5M2JkMWNmYTc0Y2JkNTY5ODdkYjU4YjQ1OTRmYjA5YzA5MDg0ZGIxNzM0Yzgx
NDNmOThiNjAyYjk4MWFhYTkyNDNjYTI4ZGViNjliNWIyODBlZThkY2VlMGZkMjYyNWU1MzI1MCI7
CisKK3NldHVwRW5naW5lKGFtMywgMjgpOworCit2YXIgUlNBID0gbmV3IFJTQUtleSgpOwordmFy
IFRFWFQgPSAiVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciB0aGUgZXh0cmVtZWx5IGxh
enkgZnJvZ3MhIjsKKworUlNBLnNldFB1YmxpYyhuVmFsdWUsIGVWYWx1ZSk7CitSU0Euc2V0UHJp
dmF0ZUV4KG5WYWx1ZSwgZVZhbHVlLCBkVmFsdWUsIHBWYWx1ZSwgcVZhbHVlLCBkbXAxVmFsdWUs
IGRtcTFWYWx1ZSwgY29lZmZWYWx1ZSk7CisKK2Z1bmN0aW9uIGVuY3J5cHQoKSB7CisgIHJldHVy
biBSU0EuZW5jcnlwdChURVhUKTsKK30KKworZnVuY3Rpb24gZGVjcnlwdCgpIHsKKyAgcmV0dXJu
IFJTQS5kZWNyeXB0KFRFWFQpOworfQorCitmb3IgKHZhciBpID0gMDsgaSA8IDg7ICsraSkgewor
ICBlbmNyeXB0KCk7CisgIGRlY3J5cHQoKTsgICAgCit9CkluZGV4OiBTdW5TcGlkZXIvdGVzdHMv
djgtZGVsdGFibHVlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFN1blNwaWRlci90ZXN0cy92OC1kZWx0YWJs
dWUuanMJKHJldmlzaW9uIDApCisrKyBTdW5TcGlkZXIvdGVzdHMvdjgtZGVsdGFibHVlLmpzCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg3NyBAQAorLy8gQ29weXJpZ2h0IDIwMDggR29vZ2xlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vIENvcHlyaWdodCAxOTk2IEpvaG4gTWFsb25leSBh
bmQgTWFyaW8gV29sY3prby4KKworLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy8vIGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisvLyB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvcgorLy8gKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKy8vCisvLyBU
aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorLy8KKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisvLyBhbG9uZyB3aXRoIHRoaXMgcHJv
Z3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbiwg
SW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcg
IFVTQQorCisKKy8vIFRoaXMgaW1wbGVtZW50YXRpb24gb2YgdGhlIERlbHRhQmx1ZSBiZW5jaG1h
cmsgaXMgZGVyaXZlZCAKKy8vIGZyb20gdGhlIFNtYWxsdGFsayBpbXBsZW1lbnRhdGlvbiBieSBK
b2huIE1hbG9uZXkgYW5kIE1hcmlvIAorLy8gV29sY3prby4gU29tZSBwYXJ0cyBoYXZlIGJlZW4g
dHJhbnNsYXRlZCBkaXJlY3RseSwgd2hlcmVhcyAKKy8vIG90aGVycyBoYXZlIGJlZW4gbW9kaWZp
ZWQgbW9yZSBhZ2dyZXNpdmVseSB0byBtYWtlIGl0IGZlZWwgCisvLyBtb3JlIGxpa2UgYSBKYXZh
U2NyaXB0IHByb2dyYW0uCisKKy8qKgorICogQSBKYXZhU2NyaXB0IGltcGxlbWVudGF0aW9uIG9m
IHRoZSBEZWx0YUJsdWUgY29uc3RyYWluLXNvbHZpbmcKKyAqIGFsZ29yaXRobSwgYXMgZGVzY3Jp
YmVkIGluOgorICoKKyAqICJUaGUgRGVsdGFCbHVlIEFsZ29yaXRobTogQW4gSW5jcmVtZW50YWwg
Q29uc3RyYWludCBIaWVyYXJjaHkgU29sdmVyIgorICogICBCam9ybiBOLiBGcmVlbWFuLUJlbnNv
biBhbmQgSm9obiBNYWxvbmV5CisgKiAgIEphbnVhcnkgMTk5MCBDb21tdW5pY2F0aW9ucyBvZiB0
aGUgQUNNLAorICogICBhbHNvIGF2YWlsYWJsZSBhcyBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24g
VFIgODktMDgtMDYuCisgKgorICogQmV3YXJlOiB0aGlzIGJlbmNobWFyayBpcyB3cml0dGVuIGlu
IGEgZ3JvdGVzcXVlIHN0eWxlIHdoZXJlCisgKiB0aGUgY29uc3RyYWludCBtb2RlbCBpcyBidWls
dCBieSBzaWRlLWVmZmVjdHMgZnJvbSBjb25zdHJ1Y3RvcnMuCisgKiBJJ3ZlIGtlcHQgaXQgdGhp
cyB3YXkgdG8gYXZvaWQgZGV2aWF0aW5nIHRvbyBtdWNoIGZyb20gdGhlIG9yaWdpbmFsCisgKiBp
bXBsZW1lbnRhdGlvbi4KKyAqLworCisKKy8qIC0tLSBPIGIgaiBlIGMgdCAgIE0gbyBkIGUgbCAt
LS0gKi8KKworT2JqZWN0LnByb3RvdHlwZS5pbmhlcml0cyA9IGZ1bmN0aW9uIChzaHVwZXIpIHsK
KyAgZnVuY3Rpb24gSW5oZXJpdGVyKCkgeyB9CisgIEluaGVyaXRlci5wcm90b3R5cGUgPSBzaHVw
ZXIucHJvdG90eXBlOworICB0aGlzLnByb3RvdHlwZSA9IG5ldyBJbmhlcml0ZXIoKTsKKyAgdGhp
cy5zdXBlckNvbnN0cnVjdG9yID0gc2h1cGVyOworfQorCitmdW5jdGlvbiBPcmRlcmVkQ29sbGVj
dGlvbigpIHsKKyAgdGhpcy5lbG1zID0gbmV3IEFycmF5KCk7Cit9CisKK09yZGVyZWRDb2xsZWN0
aW9uLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoZWxtKSB7CisgIHRoaXMuZWxtcy5wdXNoKGVs
bSk7Cit9CisKK09yZGVyZWRDb2xsZWN0aW9uLnByb3RvdHlwZS5hdCA9IGZ1bmN0aW9uIChpbmRl
eCkgeworICByZXR1cm4gdGhpcy5lbG1zW2luZGV4XTsKK30KKworT3JkZXJlZENvbGxlY3Rpb24u
cHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiAoKSB7CisgIHJldHVybiB0aGlzLmVsbXMubGVuZ3Ro
OworfQorCitPcmRlcmVkQ29sbGVjdGlvbi5wcm90b3R5cGUucmVtb3ZlRmlyc3QgPSBmdW5jdGlv
biAoKSB7CisgIHJldHVybiB0aGlzLmVsbXMucG9wKCk7Cit9CisKK09yZGVyZWRDb2xsZWN0aW9u
LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoZWxtKSB7CisgIHZhciBpbmRleCA9IDAsIHNr
aXBwZWQgPSAwOworICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxtcy5sZW5ndGg7IGkrKykg
eworICAgIHZhciB2YWx1ZSA9IHRoaXMuZWxtc1tpXTsKKyAgICBpZiAodmFsdWUgIT0gZWxtKSB7
CisgICAgICB0aGlzLmVsbXNbaW5kZXhdID0gdmFsdWU7CisgICAgICBpbmRleCsrOworICAgIH0g
ZWxzZSB7CisgICAgICBza2lwcGVkKys7CisgICAgfQorICB9CisgIGZvciAodmFyIGkgPSAwOyBp
IDwgc2tpcHBlZDsgaSsrKQorICAgIHRoaXMuZWxtcy5wb3AoKTsKK30KKworLyogLS0tICoKKyAq
IFMgdCByIGUgbiBnIHQgaAorICogLS0tICovCisKKy8qKgorICogU3RyZW5ndGhzIGFyZSB1c2Vk
IHRvIG1lYXN1cmUgdGhlIHJlbGF0aXZlIGltcG9ydGFuY2Ugb2YgY29uc3RyYWludHMuCisgKiBO
ZXcgc3RyZW5ndGhzIG1heSBiZSBpbnNlcnRlZCBpbiB0aGUgc3RyZW5ndGggaGllcmFyY2h5IHdp
dGhvdXQKKyAqIGRpc3J1cHRpbmcgY3VycmVudCBjb25zdHJhaW50cy4gIFN0cmVuZ3RocyBjYW5u
b3QgYmUgY3JlYXRlZCBvdXRzaWRlCisgKiB0aGlzIGNsYXNzLCBzbyBwb2ludGVyIGNvbXBhcmlz
b24gY2FuIGJlIHVzZWQgZm9yIHZhbHVlIGNvbXBhcmlzb24uCisgKi8KK2Z1bmN0aW9uIFN0cmVu
Z3RoKHN0cmVuZ3RoVmFsdWUsIG5hbWUpIHsKKyAgdGhpcy5zdHJlbmd0aFZhbHVlID0gc3RyZW5n
dGhWYWx1ZTsKKyAgdGhpcy5uYW1lID0gbmFtZTsKK30KKworU3RyZW5ndGguc3Ryb25nZXIgPSBm
dW5jdGlvbiAoczEsIHMyKSB7CisgIHJldHVybiBzMS5zdHJlbmd0aFZhbHVlIDwgczIuc3RyZW5n
dGhWYWx1ZTsKK30KKworU3RyZW5ndGgud2Vha2VyID0gZnVuY3Rpb24gKHMxLCBzMikgeworICBy
ZXR1cm4gczEuc3RyZW5ndGhWYWx1ZSA+IHMyLnN0cmVuZ3RoVmFsdWU7Cit9CisKK1N0cmVuZ3Ro
LndlYWtlc3RPZiA9IGZ1bmN0aW9uIChzMSwgczIpIHsKKyAgcmV0dXJuIHRoaXMud2Vha2VyKHMx
LCBzMikgPyBzMSA6IHMyOworfQorCitTdHJlbmd0aC5zdHJvbmdlc3QgPSBmdW5jdGlvbiAoczEs
IHMyKSB7CisgIHJldHVybiB0aGlzLnN0cm9uZ2VyKHMxLCBzMikgPyBzMSA6IHMyOworfQorCitT
dHJlbmd0aC5wcm90b3R5cGUubmV4dFdlYWtlciA9IGZ1bmN0aW9uICgpIHsKKyAgc3dpdGNoICh0
aGlzLnN0cmVuZ3RoVmFsdWUpIHsKKyAgICBjYXNlIDA6IHJldHVybiBTdHJlbmd0aC5XRUFLRVNU
OworICAgIGNhc2UgMTogcmV0dXJuIFN0cmVuZ3RoLldFQUtfREVGQVVMVDsKKyAgICBjYXNlIDI6
IHJldHVybiBTdHJlbmd0aC5OT1JNQUw7CisgICAgY2FzZSAzOiByZXR1cm4gU3RyZW5ndGguU1RS
T05HX0RFRkFVTFQ7CisgICAgY2FzZSA0OiByZXR1cm4gU3RyZW5ndGguUFJFRkVSUkVEOworICAg
IGNhc2UgNTogcmV0dXJuIFN0cmVuZ3RoLlJFUVVJUkVEOworICB9Cit9CisKKy8vIFN0cmVuZ3Ro
IGNvbnN0YW50cy4KK1N0cmVuZ3RoLlJFUVVJUkVEICAgICAgICA9IG5ldyBTdHJlbmd0aCgwLCAi
cmVxdWlyZWQiKTsKK1N0cmVuZ3RoLlNUT05HX1BSRUZFUlJFRCA9IG5ldyBTdHJlbmd0aCgxLCAi
c3Ryb25nUHJlZmVycmVkIik7CitTdHJlbmd0aC5QUkVGRVJSRUQgICAgICAgPSBuZXcgU3RyZW5n
dGgoMiwgInByZWZlcnJlZCIpOworU3RyZW5ndGguU1RST05HX0RFRkFVTFQgID0gbmV3IFN0cmVu
Z3RoKDMsICJzdHJvbmdEZWZhdWx0Iik7CitTdHJlbmd0aC5OT1JNQUwgICAgICAgICAgPSBuZXcg
U3RyZW5ndGgoNCwgIm5vcm1hbCIpOworU3RyZW5ndGguV0VBS19ERUZBVUxUICAgID0gbmV3IFN0
cmVuZ3RoKDUsICJ3ZWFrRGVmYXVsdCIpOworU3RyZW5ndGguV0VBS0VTVCAgICAgICAgID0gbmV3
IFN0cmVuZ3RoKDYsICJ3ZWFrZXN0Iik7CisKKy8qIC0tLSAqCisgKiBDIG8gbiBzIHQgciBhIGkg
biB0CisgKiAtLS0gKi8KKworLyoqCisgKiBBbiBhYnN0cmFjdCBjbGFzcyByZXByZXNlbnRpbmcg
YSBzeXN0ZW0tbWFpbnRhaW5hYmxlIHJlbGF0aW9uc2hpcAorICogKG9yICJjb25zdHJhaW50Iikg
YmV0d2VlbiBhIHNldCBvZiB2YXJpYWJsZXMuIEEgY29uc3RyYWludCBzdXBwbGllcworICogYSBz
dHJlbmd0aCBpbnN0YW5jZSB2YXJpYWJsZTsgY29uY3JldGUgc3ViY2xhc3NlcyBwcm92aWRlIGEg
bWVhbnMKKyAqIG9mIHN0b3JpbmcgdGhlIGNvbnN0cmFpbmVkIHZhcmlhYmxlcyBhbmQgb3RoZXIg
aW5mb3JtYXRpb24gcmVxdWlyZWQKKyAqIHRvIHJlcHJlc2VudCBhIGNvbnN0cmFpbnQuCisgKi8K
K2Z1bmN0aW9uIENvbnN0cmFpbnQoc3RyZW5ndGgpIHsKKyAgdGhpcy5zdHJlbmd0aCA9IHN0cmVu
Z3RoOworfQorCisvKioKKyAqIEFjdGl2YXRlIHRoaXMgY29uc3RyYWludCBhbmQgYXR0ZW1wdCB0
byBzYXRpc2Z5IGl0LgorICovCitDb25zdHJhaW50LnByb3RvdHlwZS5hZGRDb25zdHJhaW50ID0g
ZnVuY3Rpb24gKCkgeworICB0aGlzLmFkZFRvR3JhcGgoKTsKKyAgcGxhbm5lci5pbmNyZW1lbnRh
bEFkZCh0aGlzKTsKK30KKworLyoqCisgKiBBdHRlbXB0IHRvIGZpbmQgYSB3YXkgdG8gZW5mb3Jj
ZSB0aGlzIGNvbnN0cmFpbnQuIElmIHN1Y2Nlc3NmdWwsCisgKiByZWNvcmQgdGhlIHNvbHV0aW9u
LCBwZXJoYXBzIG1vZGlmeWluZyB0aGUgY3VycmVudCBkYXRhZmxvdworICogZ3JhcGguIEFuc3dl
ciB0aGUgY29uc3RyYWludCB0aGF0IHRoaXMgY29uc3RyYWludCBvdmVycmlkZXMsIGlmCisgKiB0
aGVyZSBpcyBvbmUsIG9yIG5pbCwgaWYgdGhlcmUgaXNuJ3QuCisgKiBBc3N1bWU6IEkgYW0gbm90
IGFscmVhZHkgc2F0aXNmaWVkLgorICovCitDb25zdHJhaW50LnByb3RvdHlwZS5zYXRpc2Z5ID0g
ZnVuY3Rpb24gKG1hcmspIHsKKyAgdGhpcy5jaG9vc2VNZXRob2QobWFyayk7CisgIGlmICghdGhp
cy5pc1NhdGlzZmllZCgpKSB7CisgICAgaWYgKHRoaXMuc3RyZW5ndGggPT0gU3RyZW5ndGguUkVR
VUlSRUQpCisgICAgICBhbGVydCgiQ291bGQgbm90IHNhdGlzZnkgYSByZXF1aXJlZCBjb25zdHJh
aW50ISIpOworICAgIHJldHVybiBudWxsOworICB9CisgIHRoaXMubWFya0lucHV0cyhtYXJrKTsK
KyAgdmFyIG91dCA9IHRoaXMub3V0cHV0KCk7CisgIHZhciBvdmVycmlkZGVuID0gb3V0LmRldGVy
bWluZWRCeTsKKyAgaWYgKG92ZXJyaWRkZW4gIT0gbnVsbCkgb3ZlcnJpZGRlbi5tYXJrVW5zYXRp
c2ZpZWQoKTsKKyAgb3V0LmRldGVybWluZWRCeSA9IHRoaXM7CisgIGlmICghcGxhbm5lci5hZGRQ
cm9wYWdhdGUodGhpcywgbWFyaykpCisgICAgYWxlcnQoIkN5Y2xlIGVuY291bnRlcmVkIik7Cisg
IG91dC5tYXJrID0gbWFyazsKKyAgcmV0dXJuIG92ZXJyaWRkZW47Cit9CisKK0NvbnN0cmFpbnQu
cHJvdG90eXBlLmRlc3Ryb3lDb25zdHJhaW50ID0gZnVuY3Rpb24gKCkgeworICBpZiAodGhpcy5p
c1NhdGlzZmllZCgpKSBwbGFubmVyLmluY3JlbWVudGFsUmVtb3ZlKHRoaXMpOworICBlbHNlIHRo
aXMucmVtb3ZlRnJvbUdyYXBoKCk7Cit9CisKKy8qKgorICogTm9ybWFsIGNvbnN0cmFpbnRzIGFy
ZSBub3QgaW5wdXQgY29uc3RyYWludHMuICBBbiBpbnB1dCBjb25zdHJhaW50CisgKiBpcyBvbmUg
dGhhdCBkZXBlbmRzIG9uIGV4dGVybmFsIHN0YXRlLCBzdWNoIGFzIHRoZSBtb3VzZSwgdGhlCisg
KiBrZXlib3JkLCBhIGNsb2NrLCBvciBzb21lIGFyYml0cmF0eSBwaWVjZSBvZiBpbXBlcmF0aXZl
IGNvZGUuCisgKi8KK0NvbnN0cmFpbnQucHJvdG90eXBlLmlzSW5wdXQgPSBmdW5jdGlvbiAoKSB7
CisgIHJldHVybiBmYWxzZTsKK30KKworLyogLS0tICoKKyAqIFUgbiBhIHIgeSAgIEMgbyBuIHMg
dCByIGEgaSBuIHQKKyAqIC0tLSAqLworCisvKioKKyAqIEFic3RyYWN0IHN1cGVyY2xhc3MgZm9y
IGNvbnN0cmFpbnRzIGhhdmluZyBhIHNpbmdsZSBwb3NzaWJsZSBvdXRwdXQKKyAqIHZhcmlhYmxl
LgorICovCitmdW5jdGlvbiBVbmFyeUNvbnN0cmFpbnQodiwgc3RyZW5ndGgpIHsKKyAgVW5hcnlD
b25zdHJhaW50LnN1cGVyQ29uc3RydWN0b3IuY2FsbCh0aGlzLCBzdHJlbmd0aCk7CisgIHRoaXMu
bXlPdXRwdXQgPSB2OworICB0aGlzLnNhdGlzZmllZCA9IGZhbHNlOworICB0aGlzLmFkZENvbnN0
cmFpbnQoKTsKK30KKworVW5hcnlDb25zdHJhaW50LmluaGVyaXRzKENvbnN0cmFpbnQpOworCisv
KioKKyAqIEFkZHMgdGhpcyBjb25zdHJhaW50IHRvIHRoZSBjb25zdHJhaW50IGdyYXBoCisgKi8K
K1VuYXJ5Q29uc3RyYWludC5wcm90b3R5cGUuYWRkVG9HcmFwaCA9IGZ1bmN0aW9uICgpIHsKKyAg
dGhpcy5teU91dHB1dC5hZGRDb25zdHJhaW50KHRoaXMpOworICB0aGlzLnNhdGlzZmllZCA9IGZh
bHNlOworfQorCisvKioKKyAqIERlY2lkZXMgaWYgdGhpcyBjb25zdHJhaW50IGNhbiBiZSBzYXRp
c2ZpZWQgYW5kIHJlY29yZHMgdGhhdAorICogZGVjaXNpb24uCisgKi8KK1VuYXJ5Q29uc3RyYWlu
dC5wcm90b3R5cGUuY2hvb3NlTWV0aG9kID0gZnVuY3Rpb24gKG1hcmspIHsKKyAgdGhpcy5zYXRp
c2ZpZWQgPSAodGhpcy5teU91dHB1dC5tYXJrICE9IG1hcmspCisgICAgJiYgU3RyZW5ndGguc3Ry
b25nZXIodGhpcy5zdHJlbmd0aCwgdGhpcy5teU91dHB1dC53YWxrU3RyZW5ndGgpOworfQorCisv
KioKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGNvbnN0cmFpbnQgaXMgc2F0aXNmaWVkIGluIHRo
ZSBjdXJyZW50IHNvbHV0aW9uLgorICovCitVbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLmlzU2F0
aXNmaWVkID0gZnVuY3Rpb24gKCkgeworICByZXR1cm4gdGhpcy5zYXRpc2ZpZWQ7Cit9CisKK1Vu
YXJ5Q29uc3RyYWludC5wcm90b3R5cGUubWFya0lucHV0cyA9IGZ1bmN0aW9uIChtYXJrKSB7Cisg
IC8vIGhhcyBubyBpbnB1dHMKK30KKworLyoqCisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IG91dHB1
dCB2YXJpYWJsZS4KKyAqLworVW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5vdXRwdXQgPSBmdW5j
dGlvbiAoKSB7CisgIHJldHVybiB0aGlzLm15T3V0cHV0OworfQorCisvKioKKyAqIENhbGN1bGF0
ZSB0aGUgd2Fsa2Fib3V0IHN0cmVuZ3RoLCB0aGUgc3RheSBmbGFnLCBhbmQsIGlmIGl0IGlzCisg
KiAnc3RheScsIHRoZSB2YWx1ZSBmb3IgdGhlIGN1cnJlbnQgb3V0cHV0IG9mIHRoaXMgY29uc3Ry
YWludC4gQXNzdW1lCisgKiB0aGlzIGNvbnN0cmFpbnQgaXMgc2F0aXNmaWVkLgorICovCitVbmFy
eUNvbnN0cmFpbnQucHJvdG90eXBlLnJlY2FsY3VsYXRlID0gZnVuY3Rpb24gKCkgeworICB0aGlz
Lm15T3V0cHV0LndhbGtTdHJlbmd0aCA9IHRoaXMuc3RyZW5ndGg7CisgIHRoaXMubXlPdXRwdXQu
c3RheSA9ICF0aGlzLmlzSW5wdXQoKTsKKyAgaWYgKHRoaXMubXlPdXRwdXQuc3RheSkgdGhpcy5l
eGVjdXRlKCk7IC8vIFN0YXkgb3B0aW1pemF0aW9uCit9CisKKy8qKgorICogUmVjb3JkcyB0aGF0
IHRoaXMgY29uc3RyYWludCBpcyB1bnNhdGlzZmllZAorICovCitVbmFyeUNvbnN0cmFpbnQucHJv
dG90eXBlLm1hcmtVbnNhdGlzZmllZCA9IGZ1bmN0aW9uICgpIHsKKyAgdGhpcy5zYXRpc2ZpZWQg
PSBmYWxzZTsKK30KKworVW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5pbnB1dHNLbm93biA9IGZ1
bmN0aW9uICgpIHsKKyAgcmV0dXJuIHRydWU7Cit9CisKK1VuYXJ5Q29uc3RyYWludC5wcm90b3R5
cGUucmVtb3ZlRnJvbUdyYXBoID0gZnVuY3Rpb24gKCkgeworICBpZiAodGhpcy5teU91dHB1dCAh
PSBudWxsKSB0aGlzLm15T3V0cHV0LnJlbW92ZUNvbnN0cmFpbnQodGhpcyk7CisgIHRoaXMuc2F0
aXNmaWVkID0gZmFsc2U7Cit9CisKKy8qIC0tLSAqCisgKiBTIHQgYSB5ICAgQyBvIG4gcyB0IHIg
YSBpIG4gdAorICogLS0tICovCisKKy8qKgorICogVmFyaWFibGVzIHRoYXQgc2hvdWxkLCB3aXRo
IHNvbWUgbGV2ZWwgb2YgcHJlZmVyZW5jZSwgc3RheSB0aGUgc2FtZS4KKyAqIFBsYW5uZXJzIG1h
eSBleHBsb2l0IHRoZSBmYWN0IHRoYXQgaW5zdGFuY2VzLCBpZiBzYXRpc2ZpZWQsIHdpbGwgbm90
CisgKiBjaGFuZ2UgdGhlaXIgb3V0cHV0IGR1cmluZyBwbGFuIGV4ZWN1dGlvbi4gIFRoaXMgaXMg
Y2FsbGVkICJzdGF5CisgKiBvcHRpbWl6YXRpb24iLgorICovCitmdW5jdGlvbiBTdGF5Q29uc3Ry
YWludCh2LCBzdHIpIHsKKyAgU3RheUNvbnN0cmFpbnQuc3VwZXJDb25zdHJ1Y3Rvci5jYWxsKHRo
aXMsIHYsIHN0cik7Cit9CisKK1N0YXlDb25zdHJhaW50LmluaGVyaXRzKFVuYXJ5Q29uc3RyYWlu
dCk7CisKK1N0YXlDb25zdHJhaW50LnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKCkgewor
ICAvLyBTdGF5IGNvbnN0cmFpbnRzIGRvIG5vdGhpbmcKK30KKworLyogLS0tICoKKyAqIEUgZCBp
IHQgICBDIG8gbiBzIHQgciBhIGkgbiB0CisgKiAtLS0gKi8KKworLyoqCisgKiBBIHVuYXJ5IGlu
cHV0IGNvbnN0cmFpbnQgdXNlZCB0byBtYXJrIGEgdmFyaWFibGUgdGhhdCB0aGUgY2xpZW50Cisg
KiB3aXNoZXMgdG8gY2hhbmdlLgorICovCitmdW5jdGlvbiBFZGl0Q29uc3RyYWludCh2LCBzdHIp
IHsKKyAgRWRpdENvbnN0cmFpbnQuc3VwZXJDb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHYsIHN0cik7
Cit9CisKK0VkaXRDb25zdHJhaW50LmluaGVyaXRzKFVuYXJ5Q29uc3RyYWludCk7CisKKy8qKgor
ICogRWRpdHMgaW5kaWNhdGUgdGhhdCBhIHZhcmlhYmxlIGlzIHRvIGJlIGNoYW5nZWQgYnkgaW1w
ZXJhdGl2ZSBjb2RlLgorICovCitFZGl0Q29uc3RyYWludC5wcm90b3R5cGUuaXNJbnB1dCA9IGZ1
bmN0aW9uICgpIHsKKyAgcmV0dXJuIHRydWU7Cit9CisKK0VkaXRDb25zdHJhaW50LnByb3RvdHlw
ZS5leGVjdXRlID0gZnVuY3Rpb24gKCkgeworICAvLyBFZGl0IGNvbnN0cmFpbnRzIGRvIG5vdGhp
bmcKK30KKworLyogLS0tICoKKyAqIEIgaSBuIGEgciB5ICAgQyBvIG4gcyB0IHIgYSBpIG4gdAor
ICogLS0tICovCisKK3ZhciBEaXJlY3Rpb24gPSBuZXcgT2JqZWN0KCk7CitEaXJlY3Rpb24uTk9O
RSAgICAgPSAwOworRGlyZWN0aW9uLkZPUldBUkQgID0gMTsKK0RpcmVjdGlvbi5CQUNLV0FSRCA9
IC0xOworCisvKioKKyAqIEFic3RyYWN0IHN1cGVyY2xhc3MgZm9yIGNvbnN0cmFpbnRzIGhhdmlu
ZyB0d28gcG9zc2libGUgb3V0cHV0CisgKiB2YXJpYWJsZXMuCisgKi8KK2Z1bmN0aW9uIEJpbmFy
eUNvbnN0cmFpbnQodmFyMSwgdmFyMiwgc3RyZW5ndGgpIHsKKyAgQmluYXJ5Q29uc3RyYWludC5z
dXBlckNvbnN0cnVjdG9yLmNhbGwodGhpcywgc3RyZW5ndGgpOworICB0aGlzLnYxID0gdmFyMTsK
KyAgdGhpcy52MiA9IHZhcjI7CisgIHRoaXMuZGlyZWN0aW9uID0gRGlyZWN0aW9uLk5PTkU7Cisg
IHRoaXMuYWRkQ29uc3RyYWludCgpOworfQorCitCaW5hcnlDb25zdHJhaW50LmluaGVyaXRzKENv
bnN0cmFpbnQpOworCisvKioKKyAqIERlY2lkZXMgaWYgdGhpcyBjb25zdHJhdGludCBjYW4gYmUg
c2F0aXNmaWVkIGFuZCB3aGljaCB3YXkgaXQKKyAqIHNob3VsZCBmbG93IGJhc2VkIG9uIHRoZSBy
ZWxhdGl2ZSBzdHJlbmd0aCBvZiB0aGUgdmFyaWFibGVzIHJlbGF0ZWQsCisgKiBhbmQgcmVjb3Jk
IHRoYXQgZGVjaXNpb24uCisgKi8KK0JpbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLmNob29zZU1l
dGhvZCA9IGZ1bmN0aW9uIChtYXJrKSB7CisgIGlmICh0aGlzLnYxLm1hcmsgPT0gbWFyaykgewor
ICAgIHRoaXMuZGlyZWN0aW9uID0gKHRoaXMudjEubWFyayAhPSBtYXJrICYmIFN0cmVuZ3RoLnN0
cm9uZ2VyKHRoaXMuc3RyZW5ndGgsIHRoaXMudjIud2Fsa1N0cmVuZ3RoKSkKKyAgICAgID8gRGly
ZWN0aW9uLkZPUldBUkQKKyAgICAgIDogRGlyZWN0aW9uLk5PTkU7CisgIH0KKyAgaWYgKHRoaXMu
djIubWFyayA9PSBtYXJrKSB7CisgICAgdGhpcy5kaXJlY3Rpb24gPSAodGhpcy52MS5tYXJrICE9
IG1hcmsgJiYgU3RyZW5ndGguc3Ryb25nZXIodGhpcy5zdHJlbmd0aCwgdGhpcy52MS53YWxrU3Ry
ZW5ndGgpKQorICAgICAgPyBEaXJlY3Rpb24uQkFDS1dBUkQKKyAgICAgIDogRGlyZWN0aW9uLk5P
TkU7CisgIH0KKyAgaWYgKFN0cmVuZ3RoLndlYWtlcih0aGlzLnYxLndhbGtTdHJlbmd0aCwgdGhp
cy52Mi53YWxrU3RyZW5ndGgpKSB7CisgICAgdGhpcy5kaXJlY3Rpb24gPSBTdHJlbmd0aC5zdHJv
bmdlcih0aGlzLnN0cmVuZ3RoLCB0aGlzLnYxLndhbGtTdHJlbmd0aCkKKyAgICAgID8gRGlyZWN0
aW9uLkJBQ0tXQVJECisgICAgICA6IERpcmVjdGlvbi5OT05FOworICB9IGVsc2UgeworICAgIHRo
aXMuZGlyZWN0aW9uID0gU3RyZW5ndGguc3Ryb25nZXIodGhpcy5zdHJlbmd0aCwgdGhpcy52Mi53
YWxrU3RyZW5ndGgpCisgICAgICA/IERpcmVjdGlvbi5GT1JXQVJECisgICAgICA6IERpcmVjdGlv
bi5CQUNLV0FSRAorICB9Cit9CisKKy8qKgorICogQWRkIHRoaXMgY29uc3RyYWludCB0byB0aGUg
Y29uc3RyYWludCBncmFwaAorICovCitCaW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5hZGRUb0dy
YXBoID0gZnVuY3Rpb24gKCkgeworICB0aGlzLnYxLmFkZENvbnN0cmFpbnQodGhpcyk7CisgIHRo
aXMudjIuYWRkQ29uc3RyYWludCh0aGlzKTsKKyAgdGhpcy5kaXJlY3Rpb24gPSBEaXJlY3Rpb24u
Tk9ORTsKK30KKworLyoqCisgKiBBbnN3ZXIgdHJ1ZSBpZiB0aGlzIGNvbnN0cmFpbnQgaXMgc2F0
aXNmaWVkIGluIHRoZSBjdXJyZW50IHNvbHV0aW9uLgorICovCitCaW5hcnlDb25zdHJhaW50LnBy
b3RvdHlwZS5pc1NhdGlzZmllZCA9IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJuIHRoaXMuZGlyZWN0
aW9uICE9IERpcmVjdGlvbi5OT05FOworfQorCisvKioKKyAqIE1hcmsgdGhlIGlucHV0IHZhcmlh
YmxlIHdpdGggdGhlIGdpdmVuIG1hcmsuCisgKi8KK0JpbmFyeUNvbnN0cmFpbnQucHJvdG90eXBl
Lm1hcmtJbnB1dHMgPSBmdW5jdGlvbiAobWFyaykgeworICB0aGlzLmlucHV0KCkubWFyayA9IG1h
cms7Cit9CisKKy8qKgorICogUmV0dXJucyB0aGUgY3VycmVudCBpbnB1dCB2YXJpYWJsZQorICov
CitCaW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5pbnB1dCA9IGZ1bmN0aW9uICgpIHsKKyAgcmV0
dXJuICh0aGlzLmRpcmVjdGlvbiA9PSBEaXJlY3Rpb24uRk9SV0FSRCkgPyB0aGlzLnYxIDogdGhp
cy52MjsKK30KKworLyoqCisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IG91dHB1dCB2YXJpYWJsZQor
ICovCitCaW5hcnlDb25zdHJhaW50LnByb3RvdHlwZS5vdXRwdXQgPSBmdW5jdGlvbiAoKSB7Cisg
IHJldHVybiAodGhpcy5kaXJlY3Rpb24gPT0gRGlyZWN0aW9uLkZPUldBUkQpID8gdGhpcy52MiA6
IHRoaXMudjE7Cit9CisKKy8qKgorICogQ2FsY3VsYXRlIHRoZSB3YWxrYWJvdXQgc3RyZW5ndGgs
IHRoZSBzdGF5IGZsYWcsIGFuZCwgaWYgaXQgaXMKKyAqICdzdGF5JywgdGhlIHZhbHVlIGZvciB0
aGUgY3VycmVudCBvdXRwdXQgb2YgdGhpcworICogY29uc3RyYWludC4gQXNzdW1lIHRoaXMgY29u
c3RyYWludCBpcyBzYXRpc2ZpZWQuCisgKi8KK0JpbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLnJl
Y2FsY3VsYXRlID0gZnVuY3Rpb24gKCkgeworICB2YXIgaWhuID0gdGhpcy5pbnB1dCgpLCBvdXQg
PSB0aGlzLm91dHB1dCgpOworICBvdXQud2Fsa1N0cmVuZ3RoID0gU3RyZW5ndGgud2Vha2VzdE9m
KHRoaXMuc3RyZW5ndGgsIGlobi53YWxrU3RyZW5ndGgpOworICBvdXQuc3RheSA9IGlobi5zdGF5
OworICBpZiAob3V0LnN0YXkpIHRoaXMuZXhlY3V0ZSgpOworfQorCisvKioKKyAqIFJlY29yZCB0
aGUgZmFjdCB0aGF0IHRoaXMgY29uc3RyYWludCBpcyB1bnNhdGlzZmllZC4KKyAqLworQmluYXJ5
Q29uc3RyYWludC5wcm90b3R5cGUubWFya1Vuc2F0aXNmaWVkID0gZnVuY3Rpb24gKCkgeworICB0
aGlzLmRpcmVjdGlvbiA9IERpcmVjdGlvbi5OT05FOworfQorCitCaW5hcnlDb25zdHJhaW50LnBy
b3RvdHlwZS5pbnB1dHNLbm93biA9IGZ1bmN0aW9uIChtYXJrKSB7CisgIHZhciBpID0gdGhpcy5p
bnB1dCgpOworICByZXR1cm4gaS5tYXJrID09IG1hcmsgfHwgaS5zdGF5IHx8IGkuZGV0ZXJtaW5l
ZEJ5ID09IG51bGw7Cit9CisKK0JpbmFyeUNvbnN0cmFpbnQucHJvdG90eXBlLnJlbW92ZUZyb21H
cmFwaCA9IGZ1bmN0aW9uICgpIHsKKyAgaWYgKHRoaXMudjEgIT0gbnVsbCkgdGhpcy52MS5yZW1v
dmVDb25zdHJhaW50KHRoaXMpOworICBpZiAodGhpcy52MiAhPSBudWxsKSB0aGlzLnYyLnJlbW92
ZUNvbnN0cmFpbnQodGhpcyk7CisgIHRoaXMuZGlyZWN0aW9uID0gRGlyZWN0aW9uLk5PTkU7Cit9
CisKKy8qIC0tLSAqCisgKiBTIGMgYSBsIGUgICBDIG8gbiBzIHQgciBhIGkgbiB0CisgKiAtLS0g
Ki8KKworLyoqCisgKiBSZWxhdGVzIHR3byB2YXJpYWJsZXMgYnkgdGhlIGxpbmVhciBzY2FsaW5n
IHJlbGF0aW9uc2hpcDogInYyID0KKyAqICh2MSAqIHNjYWxlKSArIG9mZnNldCIuIEVpdGhlciB2
MSBvciB2MiBtYXkgYmUgY2hhbmdlZCB0byBtYWludGFpbgorICogdGhpcyByZWxhdGlvbnNoaXAg
YnV0IHRoZSBzY2FsZSBmYWN0b3IgYW5kIG9mZnNldCBhcmUgY29uc2lkZXJlZAorICogcmVhZC1v
bmx5LgorICovCitmdW5jdGlvbiBTY2FsZUNvbnN0cmFpbnQoc3JjLCBzY2FsZSwgb2Zmc2V0LCBk
ZXN0LCBzdHJlbmd0aCkgeworICB0aGlzLmRpcmVjdGlvbiA9IERpcmVjdGlvbi5OT05FOworICB0
aGlzLnNjYWxlID0gc2NhbGU7CisgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0OworICBTY2FsZUNvbnN0
cmFpbnQuc3VwZXJDb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHNyYywgZGVzdCwgc3RyZW5ndGgpOwor
fQorCitTY2FsZUNvbnN0cmFpbnQuaW5oZXJpdHMoQmluYXJ5Q29uc3RyYWludCk7CisKKy8qKgor
ICogQWRkcyB0aGlzIGNvbnN0cmFpbnQgdG8gdGhlIGNvbnN0cmFpbnQgZ3JhcGguCisgKi8KK1Nj
YWxlQ29uc3RyYWludC5wcm90b3R5cGUuYWRkVG9HcmFwaCA9IGZ1bmN0aW9uICgpIHsKKyAgU2Nh
bGVDb25zdHJhaW50LnN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLmFkZFRvR3JhcGguY2FsbCh0
aGlzKTsKKyAgdGhpcy5zY2FsZS5hZGRDb25zdHJhaW50KHRoaXMpOworICB0aGlzLm9mZnNldC5h
ZGRDb25zdHJhaW50KHRoaXMpOworfQorCitTY2FsZUNvbnN0cmFpbnQucHJvdG90eXBlLnJlbW92
ZUZyb21HcmFwaCA9IGZ1bmN0aW9uICgpIHsKKyAgU2NhbGVDb25zdHJhaW50LnN1cGVyQ29uc3Ry
dWN0b3IucHJvdG90eXBlLnJlbW92ZUZyb21HcmFwaC5jYWxsKHRoaXMpOworICBpZiAodGhpcy5z
Y2FsZSAhPSBudWxsKSB0aGlzLnNjYWxlLnJlbW92ZUNvbnN0cmFpbnQodGhpcyk7CisgIGlmICh0
aGlzLm9mZnNldCAhPSBudWxsKSB0aGlzLm9mZnNldC5yZW1vdmVDb25zdHJhaW50KHRoaXMpOwor
fQorCitTY2FsZUNvbnN0cmFpbnQucHJvdG90eXBlLm1hcmtJbnB1dHMgPSBmdW5jdGlvbiAobWFy
aykgeworICBTY2FsZUNvbnN0cmFpbnQuc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGUubWFya0lu
cHV0cy5jYWxsKHRoaXMsIG1hcmspOworICB0aGlzLnNjYWxlLm1hcmsgPSB0aGlzLm9mZnNldC5t
YXJrID0gbWFyazsKK30KKworLyoqCisgKiBFbmZvcmNlIHRoaXMgY29uc3RyYWludC4gQXNzdW1l
IHRoYXQgaXQgaXMgc2F0aXNmaWVkLgorICovCitTY2FsZUNvbnN0cmFpbnQucHJvdG90eXBlLmV4
ZWN1dGUgPSBmdW5jdGlvbiAoKSB7CisgIGlmICh0aGlzLmRpcmVjdGlvbiA9PSBEaXJlY3Rpb24u
Rk9SV0FSRCkgeworICAgIHRoaXMudjIudmFsdWUgPSB0aGlzLnYxLnZhbHVlICogdGhpcy5zY2Fs
ZS52YWx1ZSArIHRoaXMub2Zmc2V0LnZhbHVlOworICB9IGVsc2UgeworICAgIHRoaXMudjEudmFs
dWUgPSAodGhpcy52Mi52YWx1ZSAtIHRoaXMub2Zmc2V0LnZhbHVlKSAvIHRoaXMuc2NhbGUudmFs
dWU7CisgIH0KK30KKworLyoqCisgKiBDYWxjdWxhdGUgdGhlIHdhbGthYm91dCBzdHJlbmd0aCwg
dGhlIHN0YXkgZmxhZywgYW5kLCBpZiBpdCBpcworICogJ3N0YXknLCB0aGUgdmFsdWUgZm9yIHRo
ZSBjdXJyZW50IG91dHB1dCBvZiB0aGlzIGNvbnN0cmFpbnQuIEFzc3VtZQorICogdGhpcyBjb25z
dHJhaW50IGlzIHNhdGlzZmllZC4KKyAqLworU2NhbGVDb25zdHJhaW50LnByb3RvdHlwZS5yZWNh
bGN1bGF0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgdmFyIGlobiA9IHRoaXMuaW5wdXQoKSwgb3V0ID0g
dGhpcy5vdXRwdXQoKTsKKyAgb3V0LndhbGtTdHJlbmd0aCA9IFN0cmVuZ3RoLndlYWtlc3RPZih0
aGlzLnN0cmVuZ3RoLCBpaG4ud2Fsa1N0cmVuZ3RoKTsKKyAgb3V0LnN0YXkgPSBpaG4uc3RheSAm
JiB0aGlzLnNjYWxlLnN0YXkgJiYgdGhpcy5vZmZzZXQuc3RheTsKKyAgaWYgKG91dC5zdGF5KSB0
aGlzLmV4ZWN1dGUoKTsKK30KKworLyogLS0tICoKKyAqIEUgcSB1IGEgbCBpIHQgIHkgICBDIG8g
biBzIHQgciBhIGkgbiB0CisgKiAtLS0gKi8KKworLyoqCisgKiBDb25zdHJhaW5zIHR3byB2YXJp
YWJsZXMgdG8gaGF2ZSB0aGUgc2FtZSB2YWx1ZS4KKyAqLworZnVuY3Rpb24gRXF1YWxpdHlDb25z
dHJhaW50KHZhcjEsIHZhcjIsIHN0cmVuZ3RoKSB7CisgIEVxdWFsaXR5Q29uc3RyYWludC5zdXBl
ckNvbnN0cnVjdG9yLmNhbGwodGhpcywgdmFyMSwgdmFyMiwgc3RyZW5ndGgpOworfQorCitFcXVh
bGl0eUNvbnN0cmFpbnQuaW5oZXJpdHMoQmluYXJ5Q29uc3RyYWludCk7CisKKy8qKgorICogRW5m
b3JjZSB0aGlzIGNvbnN0cmFpbnQuIEFzc3VtZSB0aGF0IGl0IGlzIHNhdGlzZmllZC4KKyAqLwor
RXF1YWxpdHlDb25zdHJhaW50LnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKCkgeworICB0
aGlzLm91dHB1dCgpLnZhbHVlID0gdGhpcy5pbnB1dCgpLnZhbHVlOworfQorCisvKiAtLS0gKgor
ICogViBhIHIgaSBhIGIgbCBlCisgKiAtLS0gKi8KKworLyoqCisgKiBBIGNvbnN0cmFpbmVkIHZh
cmlhYmxlLiBJbiBhZGRpdGlvbiB0byBpdHMgdmFsdWUsIGl0IG1haW50YWluIHRoZQorICogc3Ry
dWN0dXJlIG9mIHRoZSBjb25zdHJhaW50IGdyYXBoLCB0aGUgY3VycmVudCBkYXRhZmxvdyBncmFw
aCwgYW5kCisgKiB2YXJpb3VzIHBhcmFtZXRlcnMgb2YgaW50ZXJlc3QgdG8gdGhlIERlbHRhQmx1
ZSBpbmNyZW1lbnRhbAorICogY29uc3RyYWludCBzb2x2ZXIuCisgKiovCitmdW5jdGlvbiBWYXJp
YWJsZShuYW1lLCBpbml0aWFsVmFsdWUpIHsKKyAgdGhpcy52YWx1ZSA9IGluaXRpYWxWYWx1ZSB8
fCAwOworICB0aGlzLmNvbnN0cmFpbnRzID0gbmV3IE9yZGVyZWRDb2xsZWN0aW9uKCk7CisgIHRo
aXMuZGV0ZXJtaW5lZEJ5ID0gbnVsbDsKKyAgdGhpcy5tYXJrID0gMDsKKyAgdGhpcy53YWxrU3Ry
ZW5ndGggPSBTdHJlbmd0aC5XRUFLRVNUOworICB0aGlzLnN0YXkgPSB0cnVlOworICB0aGlzLm5h
bWUgPSBuYW1lOworfQorCisvKioKKyAqIEFkZCB0aGUgZ2l2ZW4gY29uc3RyYWludCB0byB0aGUg
c2V0IG9mIGFsbCBjb25zdHJhaW50cyB0aGF0IHJlZmVyCisgKiB0aGlzIHZhcmlhYmxlLgorICov
CitWYXJpYWJsZS5wcm90b3R5cGUuYWRkQ29uc3RyYWludCA9IGZ1bmN0aW9uIChjKSB7CisgIHRo
aXMuY29uc3RyYWludHMuYWRkKGMpOworfQorCisvKioKKyAqIFJlbW92ZXMgYWxsIHRyYWNlcyBv
ZiBjIGZyb20gdGhpcyB2YXJpYWJsZS4KKyAqLworVmFyaWFibGUucHJvdG90eXBlLnJlbW92ZUNv
bnN0cmFpbnQgPSBmdW5jdGlvbiAoYykgeworICB0aGlzLmNvbnN0cmFpbnRzLnJlbW92ZShjKTsK
KyAgaWYgKHRoaXMuZGV0ZXJtaW5lZEJ5ID09IGMpIHRoaXMuZGV0ZXJtaW5lZEJ5ID0gbnVsbDsK
K30KKworLyogLS0tICoKKyAqIFAgbCBhIG4gbiBlIHIKKyAqIC0tLSAqLworCisvKioKKyAqIFRo
ZSBEZWx0YUJsdWUgcGxhbm5lcgorICovCitmdW5jdGlvbiBQbGFubmVyKCkgeworICB0aGlzLmN1
cnJlbnRNYXJrID0gMDsKK30KKworLyoqCisgKiBBdHRlbXB0IHRvIHNhdGlzZnkgdGhlIGdpdmVu
IGNvbnN0cmFpbnQgYW5kLCBpZiBzdWNjZXNzZnVsLAorICogaW5jcmVtZW50YWxseSB1cGRhdGUg
dGhlIGRhdGFmbG93IGdyYXBoLiAgRGV0YWlsczogSWYgc2F0aWZ5aW5nCisgKiB0aGUgY29uc3Ry
YWludCBpcyBzdWNjZXNzZnVsLCBpdCBtYXkgb3ZlcnJpZGUgYSB3ZWFrZXIgY29uc3RyYWludAor
ICogb24gaXRzIG91dHB1dC4gVGhlIGFsZ29yaXRobSBhdHRlbXB0cyB0byByZXNhdGlzZnkgdGhh
dAorICogY29uc3RyYWludCB1c2luZyBzb21lIG90aGVyIG1ldGhvZC4gVGhpcyBwcm9jZXNzIGlz
IHJlcGVhdGVkCisgKiB1bnRpbCBlaXRoZXIgYSkgaXQgcmVhY2hlcyBhIHZhcmlhYmxlIHRoYXQg
d2FzIG5vdCBwcmV2aW91c2x5CisgKiBkZXRlcm1pbmVkIGJ5IGFueSBjb25zdHJhaW50IG9yIGIp
IGl0IHJlYWNoZXMgYSBjb25zdHJhaW50IHRoYXQKKyAqIGlzIHRvbyB3ZWFrIHRvIGJlIHNhdGlz
ZmllZCB1c2luZyBhbnkgb2YgaXRzIG1ldGhvZHMuIFRoZQorICogdmFyaWFibGVzIG9mIGNvbnN0
cmFpbnRzIHRoYXQgaGF2ZSBiZWVuIHByb2Nlc3NlZCBhcmUgbWFya2VkIHdpdGgKKyAqIGEgdW5p
cXVlIG1hcmsgdmFsdWUgc28gdGhhdCB3ZSBrbm93IHdoZXJlIHdlJ3ZlIGJlZW4uIFRoaXMgYWxs
b3dzCisgKiB0aGUgYWxnb3JpdGhtIHRvIGF2b2lkIGdldHRpbmcgaW50byBhbiBpbmZpbml0ZSBs
b29wIGV2ZW4gaWYgdGhlCisgKiBjb25zdHJhaW50IGdyYXBoIGhhcyBhbiBpbmFkdmVydGVudCBj
eWNsZS4KKyAqLworUGxhbm5lci5wcm90b3R5cGUuaW5jcmVtZW50YWxBZGQgPSBmdW5jdGlvbiAo
YykgeworICB2YXIgbWFyayA9IHRoaXMubmV3TWFyaygpOworICB2YXIgb3ZlcnJpZGRlbiA9IGMu
c2F0aXNmeShtYXJrKTsKKyAgd2hpbGUgKG92ZXJyaWRkZW4gIT0gbnVsbCkKKyAgICBvdmVycmlk
ZGVuID0gb3ZlcnJpZGRlbi5zYXRpc2Z5KG1hcmspOworfQorCisvKioKKyAqIEVudHJ5IHBvaW50
IGZvciByZXRyYWN0aW5nIGEgY29uc3RyYWludC4gUmVtb3ZlIHRoZSBnaXZlbgorICogY29uc3Ry
YWludCBhbmQgaW5jcmVtZW50YWxseSB1cGRhdGUgdGhlIGRhdGFmbG93IGdyYXBoLgorICogRGV0
YWlsczogUmV0cmFjdGluZyB0aGUgZ2l2ZW4gY29uc3RyYWludCBtYXkgYWxsb3cgc29tZSBjdXJy
ZW50bHkKKyAqIHVuc2F0aXNmaWFibGUgZG93bnN0cmVhbSBjb25zdHJhaW50IHRvIGJlIHNhdGlz
ZmllZC4gV2UgdGhlcmVmb3JlIGNvbGxlY3QKKyAqIGEgbGlzdCBvZiB1bnNhdGlzZmllZCBkb3du
c3RyZWFtIGNvbnN0cmFpbnRzIGFuZCBhdHRlbXB0IHRvCisgKiBzYXRpc2Z5IGVhY2ggb25lIGlu
IHR1cm4uIFRoaXMgbGlzdCBpcyB0cmF2ZXJzZWQgYnkgY29uc3RyYWludAorICogc3RyZW5ndGgs
IHN0cm9uZ2VzdCBmaXJzdCwgYXMgYSBoZXVyaXN0aWMgZm9yIGF2b2lkaW5nCisgKiB1bm5lY2Vz
c2FyaWx5IGFkZGluZyBhbmQgdGhlbiBvdmVycmlkaW5nIHdlYWsgY29uc3RyYWludHMuCisgKiBB
c3N1bWU6IGMgaXMgc2F0aXNmaWVkLgorICovCitQbGFubmVyLnByb3RvdHlwZS5pbmNyZW1lbnRh
bFJlbW92ZSA9IGZ1bmN0aW9uIChjKSB7CisgIHZhciBvdXQgPSBjLm91dHB1dCgpOworICBjLm1h
cmtVbnNhdGlzZmllZCgpOworICBjLnJlbW92ZUZyb21HcmFwaCgpOworICB2YXIgdW5zYXRpc2Zp
ZWQgPSB0aGlzLnJlbW92ZVByb3BhZ2F0ZUZyb20ob3V0KTsKKyAgdmFyIHN0cmVuZ3RoID0gU3Ry
ZW5ndGguUkVRVUlSRUQ7CisgIGRvIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuc2F0aXNm
aWVkLnNpemUoKTsgaSsrKSB7CisgICAgICB2YXIgdSA9IHVuc2F0aXNmaWVkLmF0KGkpOworICAg
ICAgaWYgKHUuc3RyZW5ndGggPT0gc3RyZW5ndGgpCisgICAgICAgIHRoaXMuaW5jcmVtZW50YWxB
ZGQodSk7CisgICAgfQorICAgIHN0cmVuZ3RoID0gc3RyZW5ndGgubmV4dFdlYWtlcigpOworICB9
IHdoaWxlIChzdHJlbmd0aCAhPSBTdHJlbmd0aC5XRUFLRVNUKTsKK30KKworLyoqCisgKiBTZWxl
Y3QgYSBwcmV2aW91c2x5IHVudXNlZCBtYXJrIHZhbHVlLgorICovCitQbGFubmVyLnByb3RvdHlw
ZS5uZXdNYXJrID0gZnVuY3Rpb24gKCkgeworICByZXR1cm4gKyt0aGlzLmN1cnJlbnRNYXJrOwor
fQorCisvKioKKyAqIEV4dHJhY3QgYSBwbGFuIGZvciByZXNhdGlzZmFjdGlvbiBzdGFydGluZyBm
cm9tIHRoZSBnaXZlbiBzb3VyY2UKKyAqIGNvbnN0cmFpbnRzLCB1c3VhbGx5IGEgc2V0IG9mIGlu
cHV0IGNvbnN0cmFpbnRzLiBUaGlzIG1ldGhvZAorICogYXNzdW1lcyB0aGF0IHN0YXkgb3B0aW1p
emF0aW9uIGlzIGRlc2lyZWQ7IHRoZSBwbGFuIHdpbGwgY29udGFpbgorICogb25seSBjb25zdHJh
aW50cyB3aG9zZSBvdXRwdXQgdmFyaWFibGVzIGFyZSBub3Qgc3RheS4gQ29uc3RyYWludHMKKyAq
IHRoYXQgZG8gbm8gY29tcHV0YXRpb24sIHN1Y2ggYXMgc3RheSBhbmQgZWRpdCBjb25zdHJhaW50
cywgYXJlCisgKiBub3QgaW5jbHVkZWQgaW4gdGhlIHBsYW4uCisgKiBEZXRhaWxzOiBUaGUgb3V0
cHV0cyBvZiBhIGNvbnN0cmFpbnQgYXJlIG1hcmtlZCB3aGVuIGl0IGlzIGFkZGVkCisgKiB0byB0
aGUgcGxhbiB1bmRlciBjb25zdHJ1Y3Rpb24uIEEgY29uc3RyYWludCBtYXkgYmUgYXBwZW5kZWQg
dG8KKyAqIHRoZSBwbGFuIHdoZW4gYWxsIGl0cyBpbnB1dCB2YXJpYWJsZXMgYXJlIGtub3duLiBB
IHZhcmlhYmxlIGlzCisgKiBrbm93biBpZiBlaXRoZXIgYSkgdGhlIHZhcmlhYmxlIGlzIG1hcmtl
ZCAoaW5kaWNhdGluZyB0aGF0IGhhcworICogYmVlbiBjb21wdXRlZCBieSBhIGNvbnN0cmFpbnQg
YXBwZWFyaW5nIGVhcmxpZXIgaW4gdGhlIHBsYW4pLCBiKQorICogdGhlIHZhcmlhYmxlIGlzICdz
dGF5JyAoaS5lLiBpdCBpcyBhIGNvbnN0YW50IGF0IHBsYW4gZXhlY3V0aW9uCisgKiB0aW1lKSwg
b3IgYykgdGhlIHZhcmlhYmxlIGlzIG5vdCBkZXRlcm1pbmVkIGJ5IGFueQorICogY29uc3RyYWlu
dC4gVGhlIGxhc3QgcHJvdmlzaW9uIGlzIGZvciBwYXN0IHN0YXRlcyBvZiBoaXN0b3J5CisgKiB2
YXJpYWJsZXMsIHdoaWNoIGFyZSBub3Qgc3RheSBidXQgd2hpY2ggYXJlIGFsc28gbm90IGNvbXB1
dGVkIGJ5CisgKiBhbnkgY29uc3RyYWludC4KKyAqIEFzc3VtZTogc291cmNlcyBhcmUgYWxsIHNh
dGlzZmllZC4KKyAqLworUGxhbm5lci5wcm90b3R5cGUubWFrZVBsYW4gPSBmdW5jdGlvbiAoc291
cmNlcykgeworICB2YXIgbWFyayA9IHRoaXMubmV3TWFyaygpOworICB2YXIgcGxhbiA9IG5ldyBQ
bGFuKCk7CisgIHZhciB0b2RvID0gc291cmNlczsKKyAgd2hpbGUgKHRvZG8uc2l6ZSgpID4gMCkg
eworICAgIHZhciBjID0gdG9kby5yZW1vdmVGaXJzdCgpOworICAgIGlmIChjLm91dHB1dCgpLm1h
cmsgIT0gbWFyayAmJiBjLmlucHV0c0tub3duKG1hcmspKSB7CisgICAgICBwbGFuLmFkZENvbnN0
cmFpbnQoYyk7CisgICAgICBjLm91dHB1dCgpLm1hcmsgPSBtYXJrOworICAgICAgdGhpcy5hZGRD
b25zdHJhaW50c0NvbnN1bWluZ1RvKGMub3V0cHV0KCksIHRvZG8pOworICAgIH0KKyAgfQorICBy
ZXR1cm4gcGxhbjsKK30KKworLyoqCisgKiBFeHRyYWN0IGEgcGxhbiBmb3IgcmVzYXRpc2Z5aW5n
IHN0YXJ0aW5nIGZyb20gdGhlIG91dHB1dCBvZiB0aGUKKyAqIGdpdmVuIGNvbnN0cmFpbnRzLCB1
c3VhbGx5IGEgc2V0IG9mIGlucHV0IGNvbnN0cmFpbnRzLgorICovCitQbGFubmVyLnByb3RvdHlw
ZS5leHRyYWN0UGxhbkZyb21Db25zdHJhaW50cyA9IGZ1bmN0aW9uIChjb25zdHJhaW50cykgewor
ICB2YXIgc291cmNlcyA9IG5ldyBPcmRlcmVkQ29sbGVjdGlvbigpOworICBmb3IgKHZhciBpID0g
MDsgaSA8IGNvbnN0cmFpbnRzLnNpemUoKTsgaSsrKSB7CisgICAgdmFyIGMgPSBjb25zdHJhaW50
cy5hdChpKTsKKyAgICBpZiAoYy5pc0lucHV0KCkgJiYgYy5pc1NhdGlzZmllZCgpKQorICAgICAg
Ly8gbm90IGluIHBsYW4gYWxyZWFkeSBhbmQgZWxpZ2libGUgZm9yIGluY2x1c2lvbgorICAgICAg
c291cmNlcy5hZGQoYyk7CisgIH0KKyAgcmV0dXJuIHRoaXMubWFrZVBsYW4oc291cmNlcyk7Cit9
CisKKy8qKgorICogUmVjb21wdXRlIHRoZSB3YWxrYWJvdXQgc3RyZW5ndGhzIGFuZCBzdGF5IGZs
YWdzIG9mIGFsbCB2YXJpYWJsZXMKKyAqIGRvd25zdHJlYW0gb2YgdGhlIGdpdmVuIGNvbnN0cmFp
bnQgYW5kIHJlY29tcHV0ZSB0aGUgYWN0dWFsCisgKiB2YWx1ZXMgb2YgYWxsIHZhcmlhYmxlcyB3
aG9zZSBzdGF5IGZsYWcgaXMgdHJ1ZS4gSWYgYSBjeWNsZSBpcworICogZGV0ZWN0ZWQsIHJlbW92
ZSB0aGUgZ2l2ZW4gY29uc3RyYWludCBhbmQgYW5zd2VyCisgKiBmYWxzZS4gT3RoZXJ3aXNlLCBh
bnN3ZXIgdHJ1ZS4KKyAqIERldGFpbHM6IEN5Y2xlcyBhcmUgZGV0ZWN0ZWQgd2hlbiBhIG1hcmtl
ZCB2YXJpYWJsZSBpcworICogZW5jb3VudGVyZWQgZG93bnN0cmVhbSBvZiB0aGUgZ2l2ZW4gY29u
c3RyYWludC4gVGhlIHNlbmRlciBpcworICogYXNzdW1lZCB0byBoYXZlIG1hcmtlZCB0aGUgaW5w
dXRzIG9mIHRoZSBnaXZlbiBjb25zdHJhaW50IHdpdGgKKyAqIHRoZSBnaXZlbiBtYXJrLiBUaHVz
LCBlbmNvdW50ZXJpbmcgYSBtYXJrZWQgbm9kZSBkb3duc3RyZWFtIG9mCisgKiB0aGUgb3V0cHV0
IGNvbnN0cmFpbnQgbWVhbnMgdGhhdCB0aGVyZSBpcyBhIHBhdGggZnJvbSB0aGUKKyAqIGNvbnN0
cmFpbnQncyBvdXRwdXQgdG8gb25lIG9mIGl0cyBpbnB1dHMuCisgKi8KK1BsYW5uZXIucHJvdG90
eXBlLmFkZFByb3BhZ2F0ZSA9IGZ1bmN0aW9uIChjLCBtYXJrKSB7CisgIHZhciB0b2RvID0gbmV3
IE9yZGVyZWRDb2xsZWN0aW9uKCk7CisgIHRvZG8uYWRkKGMpOworICB3aGlsZSAodG9kby5zaXpl
KCkgPiAwKSB7CisgICAgdmFyIGQgPSB0b2RvLnJlbW92ZUZpcnN0KCk7CisgICAgaWYgKGQub3V0
cHV0KCkubWFyayA9PSBtYXJrKSB7CisgICAgICB0aGlzLmluY3JlbWVudGFsUmVtb3ZlKGMpOwor
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBkLnJlY2FsY3VsYXRlKCk7CisgICAgdGhp
cy5hZGRDb25zdHJhaW50c0NvbnN1bWluZ1RvKGQub3V0cHV0KCksIHRvZG8pOworICB9CisgIHJl
dHVybiB0cnVlOworfQorCisKKy8qKgorICogVXBkYXRlIHRoZSB3YWxrYWJvdXQgc3RyZW5ndGhz
IGFuZCBzdGF5IGZsYWdzIG9mIGFsbCB2YXJpYWJsZXMKKyAqIGRvd25zdHJlYW0gb2YgdGhlIGdp
dmVuIGNvbnN0cmFpbnQuIEFuc3dlciBhIGNvbGxlY3Rpb24gb2YKKyAqIHVuc2F0aXNmaWVkIGNv
bnN0cmFpbnRzIHNvcnRlZCBpbiBvcmRlciBvZiBkZWNyZWFzaW5nIHN0cmVuZ3RoLgorICovCitQ
bGFubmVyLnByb3RvdHlwZS5yZW1vdmVQcm9wYWdhdGVGcm9tID0gZnVuY3Rpb24gKG91dCkgewor
ICBvdXQuZGV0ZXJtaW5lZEJ5ID0gbnVsbDsKKyAgb3V0LndhbGtTdHJlbmd0aCA9IFN0cmVuZ3Ro
LldFQUtFU1Q7CisgIG91dC5zdGF5ID0gdHJ1ZTsKKyAgdmFyIHVuc2F0aXNmaWVkID0gbmV3IE9y
ZGVyZWRDb2xsZWN0aW9uKCk7CisgIHZhciB0b2RvID0gbmV3IE9yZGVyZWRDb2xsZWN0aW9uKCk7
CisgIHRvZG8uYWRkKG91dCk7CisgIHdoaWxlICh0b2RvLnNpemUoKSA+IDApIHsKKyAgICB2YXIg
diA9IHRvZG8ucmVtb3ZlRmlyc3QoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHYuY29uc3Ry
YWludHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgIHZhciBjID0gdi5jb25zdHJhaW50cy5hdChpKTsK
KyAgICAgIGlmICghYy5pc1NhdGlzZmllZCgpKQorICAgICAgICB1bnNhdGlzZmllZC5hZGQoYyk7
CisgICAgfQorICAgIHZhciBkZXRlcm1pbmluZyA9IHYuZGV0ZXJtaW5lZEJ5OworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgdi5jb25zdHJhaW50cy5zaXplKCk7IGkrKykgeworICAgICAgdmFyIG5l
eHQgPSB2LmNvbnN0cmFpbnRzLmF0KGkpOworICAgICAgaWYgKG5leHQgIT0gZGV0ZXJtaW5pbmcg
JiYgbmV4dC5pc1NhdGlzZmllZCgpKSB7CisgICAgICAgIG5leHQucmVjYWxjdWxhdGUoKTsKKyAg
ICAgICAgdG9kby5hZGQobmV4dC5vdXRwdXQoKSk7CisgICAgICB9CisgICAgfQorICB9CisgIHJl
dHVybiB1bnNhdGlzZmllZDsKK30KKworUGxhbm5lci5wcm90b3R5cGUuYWRkQ29uc3RyYWludHND
b25zdW1pbmdUbyA9IGZ1bmN0aW9uICh2LCBjb2xsKSB7CisgIHZhciBkZXRlcm1pbmluZyA9IHYu
ZGV0ZXJtaW5lZEJ5OworICB2YXIgY2MgPSB2LmNvbnN0cmFpbnRzOworICBmb3IgKHZhciBpID0g
MDsgaSA8IGNjLnNpemUoKTsgaSsrKSB7CisgICAgdmFyIGMgPSBjYy5hdChpKTsKKyAgICBpZiAo
YyAhPSBkZXRlcm1pbmluZyAmJiBjLmlzU2F0aXNmaWVkKCkpCisgICAgICBjb2xsLmFkZChjKTsK
KyAgfQorfQorCisvKiAtLS0gKgorICogUCBsIGEgbgorICogLS0tICovCisKKy8qKgorICogQSBQ
bGFuIGlzIGFuIG9yZGVyZWQgbGlzdCBvZiBjb25zdHJhaW50cyB0byBiZSBleGVjdXRlZCBpbiBz
ZXF1ZW5jZQorICogdG8gcmVzYXRpc2Z5IGFsbCBjdXJyZW50bHkgc2F0aXNmaWFibGUgY29uc3Ry
YWludHMgaW4gdGhlIGZhY2Ugb2YKKyAqIG9uZSBvciBtb3JlIGNoYW5naW5nIGlucHV0cy4KKyAq
LworZnVuY3Rpb24gUGxhbigpIHsKKyAgdGhpcy52ID0gbmV3IE9yZGVyZWRDb2xsZWN0aW9uKCk7
Cit9CisKK1BsYW4ucHJvdG90eXBlLmFkZENvbnN0cmFpbnQgPSBmdW5jdGlvbiAoYykgeworICB0
aGlzLnYuYWRkKGMpOworfQorCitQbGFuLnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gKCkgewor
ICByZXR1cm4gdGhpcy52LnNpemUoKTsKK30KKworUGxhbi5wcm90b3R5cGUuY29uc3RyYWludEF0
ID0gZnVuY3Rpb24gKGluZGV4KSB7CisgIHJldHVybiB0aGlzLnYuYXQoaW5kZXgpOworfQorCitQ
bGFuLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKCkgeworICBmb3IgKHZhciBpID0gMDsg
aSA8IHRoaXMuc2l6ZSgpOyBpKyspIHsKKyAgICB2YXIgYyA9IHRoaXMuY29uc3RyYWludEF0KGkp
OworICAgIGMuZXhlY3V0ZSgpOworICB9Cit9CisKKy8qIC0tLSAqCisgKiBNIGEgaSBuCisgKiAt
LS0gKi8KKworLyoqCisgKiBUaGlzIGlzIHRoZSBzdGFuZGFyZCBEZWx0YUJsdWUgYmVuY2htYXJr
LiBBIGxvbmcgY2hhaW4gb2YgZXF1YWxpdHkKKyAqIGNvbnN0cmFpbnRzIGlzIGNvbnN0cnVjdGVk
IHdpdGggYSBzdGF5IGNvbnN0cmFpbnQgb24gb25lIGVuZC4gQW4KKyAqIGVkaXQgY29uc3RyYWlu
dCBpcyB0aGVuIGFkZGVkIHRvIHRoZSBvcHBvc2l0ZSBlbmQgYW5kIHRoZSB0aW1lIGlzCisgKiBt
ZWFzdXJlZCBmb3IgYWRkaW5nIGFuZCByZW1vdmluZyB0aGlzIGNvbnN0cmFpbnQsIGFuZCBleHRy
YWN0aW5nCisgKiBhbmQgZXhlY3V0aW5nIGEgY29uc3RyYWludCBzYXRpc2ZhY3Rpb24gcGxhbi4g
VGhlcmUgYXJlIHR3byBjYXNlcy4KKyAqIEluIGNhc2UgMSwgdGhlIGFkZGVkIGNvbnN0cmFpbnQg
aXMgc3Ryb25nZXIgdGhhbiB0aGUgc3RheQorICogY29uc3RyYWludCBhbmQgdmFsdWVzIG11c3Qg
cHJvcGFnYXRlIGRvd24gdGhlIGVudGlyZSBsZW5ndGggb2YgdGhlCisgKiBjaGFpbi4gSW4gY2Fz
ZSAyLCB0aGUgYWRkZWQgY29uc3RyYWludCBpcyB3ZWFrZXIgdGhhbiB0aGUgc3RheQorICogY29u
c3RyYWludCBzbyBpdCBjYW5ub3QgYmUgYWNjb21vZGF0ZWQuIFRoZSBjb3N0IGluIHRoaXMgY2Fz
ZSBpcywKKyAqIG9mIGNvdXJzZSwgdmVyeSBsb3cuIFR5cGljYWwgc2l0dWF0aW9ucyBsaWUgc29t
ZXdoZXJlIGJldHdlZW4gdGhlc2UKKyAqIHR3byBleHRyZW1lcy4KKyAqLworZnVuY3Rpb24gY2hh
aW5UZXN0KG4pIHsKKyAgcGxhbm5lciA9IG5ldyBQbGFubmVyKCk7CisgIHZhciBwcmV2ID0gbnVs
bCwgZmlyc3QgPSBudWxsLCBsYXN0ID0gbnVsbDsKKworICAvLyBCdWlsZCBjaGFpbiBvZiBuIGVx
dWFsaXR5IGNvbnN0cmFpbnRzCisgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKykgeworICAg
IHZhciBuYW1lID0gInYiICsgaTsKKyAgICB2YXIgdiA9IG5ldyBWYXJpYWJsZShuYW1lKTsKKyAg
ICBpZiAocHJldiAhPSBudWxsKQorICAgICAgbmV3IEVxdWFsaXR5Q29uc3RyYWludChwcmV2LCB2
LCBTdHJlbmd0aC5SRVFVSVJFRCk7CisgICAgaWYgKGkgPT0gMCkgZmlyc3QgPSB2OworICAgIGlm
IChpID09IG4pIGxhc3QgPSB2OworICAgIHByZXYgPSB2OworICB9CisKKyAgbmV3IFN0YXlDb25z
dHJhaW50KGxhc3QsIFN0cmVuZ3RoLlNUUk9OR19ERUZBVUxUKTsKKyAgdmFyIGVkaXQgPSBuZXcg
RWRpdENvbnN0cmFpbnQoZmlyc3QsIFN0cmVuZ3RoLlBSRUZFUlJFRCk7CisgIHZhciBlZGl0cyA9
IG5ldyBPcmRlcmVkQ29sbGVjdGlvbigpOworICBlZGl0cy5hZGQoZWRpdCk7CisgIHZhciBwbGFu
ID0gcGxhbm5lci5leHRyYWN0UGxhbkZyb21Db25zdHJhaW50cyhlZGl0cyk7CisgIGZvciAodmFy
IGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKyAgICBmaXJzdC52YWx1ZSA9IGk7CisgICAgcGxhbi5l
eGVjdXRlKCk7CisgICAgaWYgKGxhc3QudmFsdWUgIT0gaSkKKyAgICAgIGFsZXJ0KCJDaGFpbiB0
ZXN0IGZhaWxlZC4iKTsKKyAgfQorfQorCisvKioKKyAqIFRoaXMgdGVzdCBjb25zdHJ1Y3RzIGEg
dHdvIHNldHMgb2YgdmFyaWFibGVzIHJlbGF0ZWQgdG8gZWFjaAorICogb3RoZXIgYnkgYSBzaW1w
bGUgbGluZWFyIHRyYW5zZm9ybWF0aW9uIChzY2FsZSBhbmQgb2Zmc2V0KS4gVGhlCisgKiB0aW1l
IGlzIG1lYXN1cmVkIHRvIGNoYW5nZSBhIHZhcmlhYmxlIG9uIGVpdGhlciBzaWRlIG9mIHRoZQor
ICogbWFwcGluZyBhbmQgdG8gY2hhbmdlIHRoZSBzY2FsZSBhbmQgb2Zmc2V0IGZhY3RvcnMuCisg
Ki8KK2Z1bmN0aW9uIHByb2plY3Rpb25UZXN0KG4pIHsKKyAgcGxhbm5lciA9IG5ldyBQbGFubmVy
KCk7CisgIHZhciBzY2FsZSA9IG5ldyBWYXJpYWJsZSgic2NhbGUiLCAxMCk7CisgIHZhciBvZmZz
ZXQgPSBuZXcgVmFyaWFibGUoIm9mZnNldCIsIDEwMDApOworICB2YXIgc3JjID0gbnVsbCwgZHN0
ID0gbnVsbDsKKworICB2YXIgZGVzdHMgPSBuZXcgT3JkZXJlZENvbGxlY3Rpb24oKTsKKyAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICBzcmMgPSBuZXcgVmFyaWFibGUoInNyYyIg
KyBpLCBpKTsKKyAgICBkc3QgPSBuZXcgVmFyaWFibGUoImRzdCIgKyBpLCBpKTsKKyAgICBkZXN0
cy5hZGQoZHN0KTsKKyAgICBuZXcgU3RheUNvbnN0cmFpbnQoc3JjLCBTdHJlbmd0aC5OT1JNQUwp
OworICAgIG5ldyBTY2FsZUNvbnN0cmFpbnQoc3JjLCBzY2FsZSwgb2Zmc2V0LCBkc3QsIFN0cmVu
Z3RoLlJFUVVJUkVEKTsKKyAgfQorCisgIGNoYW5nZShzcmMsIDE3KTsKKyAgaWYgKGRzdC52YWx1
ZSAhPSAxMTcwKSBhbGVydCgiUHJvamVjdGlvbiAxIGZhaWxlZCIpOworICBjaGFuZ2UoZHN0LCAx
MDUwKTsKKyAgaWYgKHNyYy52YWx1ZSAhPSA1KSBhbGVydCgiUHJvamVjdGlvbiAyIGZhaWxlZCIp
OworICBjaGFuZ2Uoc2NhbGUsIDUpOworICBmb3IgKHZhciBpID0gMDsgaSA8IG4gLSAxOyBpKysp
IHsKKyAgICBpZiAoZGVzdHMuYXQoaSkudmFsdWUgIT0gaSAqIDUgKyAxMDAwKQorICAgICAgYWxl
cnQoIlByb2plY3Rpb24gMyBmYWlsZWQiKTsKKyAgfQorICBjaGFuZ2Uob2Zmc2V0LCAyMDAwKTsK
KyAgZm9yICh2YXIgaSA9IDA7IGkgPCBuIC0gMTsgaSsrKSB7CisgICAgaWYgKGRlc3RzLmF0KGkp
LnZhbHVlICE9IGkgKiA1ICsgMjAwMCkKKyAgICAgIGFsZXJ0KCJQcm9qZWN0aW9uIDQgZmFpbGVk
Iik7CisgIH0KK30KKworZnVuY3Rpb24gY2hhbmdlKHYsIG5ld1ZhbHVlKSB7CisgIHZhciBlZGl0
ID0gbmV3IEVkaXRDb25zdHJhaW50KHYsIFN0cmVuZ3RoLlBSRUZFUlJFRCk7CisgIHZhciBlZGl0
cyA9IG5ldyBPcmRlcmVkQ29sbGVjdGlvbigpOworICBlZGl0cy5hZGQoZWRpdCk7CisgIHZhciBw
bGFuID0gcGxhbm5lci5leHRyYWN0UGxhbkZyb21Db25zdHJhaW50cyhlZGl0cyk7CisgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMTA7IGkrKykgeworICAgIHYudmFsdWUgPSBuZXdWYWx1ZTsKKyAgICBw
bGFuLmV4ZWN1dGUoKTsKKyAgfQorICBlZGl0LmRlc3Ryb3lDb25zdHJhaW50KCk7Cit9CisKKy8v
IEdsb2JhbCB2YXJpYWJsZSBob2xkaW5nIHRoZSBjdXJyZW50IHBsYW5uZXIuCit2YXIgcGxhbm5l
ciA9IG51bGw7CisKK2Z1bmN0aW9uIGRlbHRhQmx1ZSgpIHsKKyAgY2hhaW5UZXN0KDEwMCk7Cisg
IHByb2plY3Rpb25UZXN0KDEwMCk7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTU1OyArK2kp
CisgICAgZGVsdGFCbHVlKCk7CkluZGV4OiBTdW5TcGlkZXIvdGVzdHMvdjgtZWFybGV5LWJveWVy
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFN1blNwaWRlci90ZXN0cy92OC1lYXJsZXktYm95ZXIuanMJKHJl
dmlzaW9uIDApCisrKyBTdW5TcGlkZXIvdGVzdHMvdjgtZWFybGV5LWJveWVyLmpzCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDQ2ODAgQEAKKy8vIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBieSBzY2hlbWUyanMsIGV4Y2VwdCBmb3IgdGhlCisvLyBiZW5jaG1hcmsgaGFybmVz
cyBjb2RlIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgZmlsZS4KKworLyoqKioqKioq
KioqKiogR0VORVJBVEVEIEZJTEUgLSBETyBOT1QgRURJVCAqKioqKioqKioqKioqLworLyoqKioq
KioqKioqKiogR0VORVJBVEVEIEZJTEUgLSBETyBOT1QgRURJVCAqKioqKioqKioqKioqLworLyoq
KioqKioqKioqKiogR0VORVJBVEVEIEZJTEUgLSBETyBOT1QgRURJVCAqKioqKioqKioqKioqLwor
LyoqKioqKioqKioqKiogR0VORVJBVEVEIEZJTEUgLSBETyBOT1QgRURJVCAqKioqKioqKioqKioq
LworLyoqKioqKioqKioqKiogR0VORVJBVEVEIEZJTEUgLSBETyBOT1QgRURJVCAqKioqKioqKioq
KioqLworLyoqKioqKioqKioqKiogR0VORVJBVEVEIEZJTEUgLSBETyBOT1QgRURJVCAqKioqKioq
KioqKioqLworLyoqKioqKioqKioqKiogR0VORVJBVEVEIEZJTEUgLSBETyBOT1QgRURJVCAqKioq
KioqKioqKioqLworLyoqKioqKioqKioqKiogR0VORVJBVEVEIEZJTEUgLSBETyBOT1QgRURJVCAq
KioqKioqKioqKioqLworLyoKKyAqIFRvIHVzZSB3cml0ZS9wcmludHMvLi4uIHRoZSBkZWZhdWx0
LW91dHB1dCBwb3J0IGhhcyB0byBiZSBzZXQgZmlyc3QuCisgKiBTaW1wbHkgc2V0dGluZyBTQ19E
RUZBVUxUX09VVCBhbmQgU0NfRVJST1JfT1VUIHRvIHRoZSBkZXNpcmVkIHZhbHVlcworICogc2hv
dWxkIGRvIHRoZSB0cmljay4KKyAqIEluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSB0aGUgc3RkLW91
dCBhbmQgZXJyb3ItcG9ydCBhcmUgcmVkaXJlY3RlZCB0bworICogYSBESVYuCitmdW5jdGlvbiBp
bml0UnVudGltZSgpIHsKKyAgICBmdW5jdGlvbiBlc2NhcGVIVE1MKHMpIHsKKwl2YXIgdG1wID0g
czsKKwl0bXAgPSB0bXAucmVwbGFjZSgvJi9nLCAiJmFtcDsiKTsKKwl0bXAgPSB0bXAucmVwbGFj
ZSgvPC9nLCAiJmx0OyIpOworCXRtcCA9IHRtcC5yZXBsYWNlKC8+L2csICImZ3Q7Iik7CisJdG1w
ID0gdG1wLnJlcGxhY2UoLyAvZywgIiZuYnNwOyIpOworCXRtcCA9IHRtcC5yZXBsYWNlKC9cbi9n
LCAiPGJyIC8+Iik7CisJdG1wID0gdG1wLnJlcGxhY2UoL1x0L2csICImbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcCIpOworCXJldHVybiB0bXA7CisJCisgICAgfQorCisgICAgZG9jdW1lbnQud3JpdGUo
IjxkaXYgaWQ9J3N0ZG91dCc+PC9kaXY+Iik7CisgICAgU0NfREVGQVVMVF9PVVQgPSBuZXcgc2Nf
R2VuZXJpY091dHB1dFBvcnQoCisJZnVuY3Rpb24ocykgeworCSAgICB2YXIgc3Rkb3V0ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0ZG91dCcpOworCSAgICBzdGRvdXQuaW5uZXJIVE1MID0g
c3Rkb3V0LmlubmVySFRNTCArIGVzY2FwZUhUTUwocyk7CisJfSk7CisgICAgU0NfRVJST1JfT1VU
ID0gU0NfREVGQVVMVF9PVVQ7Cit9CisqLworCisKK2Z1bmN0aW9uIHNjX3ByaW50X2RlYnVnKCkg
eworICAgIHNjX3ByaW50LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Cit9CisvKioqIE1FVEEgKChl
eHBvcnQgKmpzKikpICovCit2YXIgc2NfSlNfR0xPQkFMUyA9IHRoaXM7CisKK3ZhciBfX3NjX0xJ
TkU9LTE7Cit2YXIgX19zY19GSUxFPSIiOworCisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLwor
ZnVuY3Rpb24gc2NfYWxlcnQoKSB7CisgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsKKyAg
IHZhciBzID0gIiI7CisgICB2YXIgaTsKKworICAgZm9yKCBpID0gMDsgaSA8IGxlbjsgaSsrICkg
eworICAgICAgIHMgKz0gc2NfdG9EaXNwbGF5U3RyaW5nKGFyZ3VtZW50c1sgaSBdKTsKKyAgIH0K
KworICAgcmV0dXJuIGFsZXJ0KCBzICk7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICov
CitmdW5jdGlvbiBzY190eXBlb2YoIHggKSB7CisgICByZXR1cm4gdHlwZW9mIHg7Cit9CisKKy8q
KiogTUVUQSAoKGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBzY19lcnJvcigpIHsKKyAgICB2YXIg
YSA9IFtzY19qc3N0cmluZzJzeW1ib2woIiplcnJvcioiKV07CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKKwlhW2krMV0gPSBhcmd1bWVudHNbaV07Cisg
ICAgfQorICAgIHRocm93IGE7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAg
ICAgKHBlZXBob2xlIChwcmVmaXggInRocm93ICIpKSkKKyovCitmdW5jdGlvbiBzY19yYWlzZShv
YmopIHsKKyAgICB0aHJvdyBvYmo7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCB3aXRoLWhhbmRs
ZXItbGFtYmRhKSkgKi8KK2Z1bmN0aW9uIHNjX3dpdGhIYW5kbGVyTGFtYmRhKGhhbmRsZXIsIGJv
ZHkpIHsKKyAgICB0cnkgeworCXJldHVybiBib2R5KCk7CisgICAgfSBjYXRjaChlKSB7CisJaWYg
KCFlLl9pbnRlcm5hbEV4Y2VwdGlvbikKKwkgICAgcmV0dXJuIGhhbmRsZXIoZSk7CisJZWxzZQor
CSAgICB0aHJvdyBlOworICAgIH0KK30KKwordmFyIHNjX3Byb3BlcnRpZXMgPSBuZXcgT2JqZWN0
KCk7CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBzY19wdXRwcm9wQmFu
ZyhzeW0sIGtleSwgdmFsKSB7CisgICAgdmFyIGh0ID0gc2NfcHJvcGVydGllc1tzeW1dOworICAg
IGlmICghaHQpIHsKKwlodCA9IG5ldyBPYmplY3QoKTsKKwlzY19wcm9wZXJ0aWVzW3N5bV0gPSBo
dDsKKyAgICB9CisgICAgaHRba2V5XSA9IHZhbDsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0
KSkgKi8KK2Z1bmN0aW9uIHNjX2dldHByb3Aoc3ltLCBrZXkpIHsKKyAgICB2YXIgaHQgPSBzY19w
cm9wZXJ0aWVzW3N5bV07CisgICAgaWYgKGh0KSB7CisJaWYgKGtleSBpbiBodCkKKwkgICAgcmV0
dXJuIGh0W2tleV07CisJZWxzZQorCSAgICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlCisJcmV0
dXJuIGZhbHNlOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLworZnVuY3Rpb24gc2Nf
cmVtcHJvcEJhbmcoc3ltLCBrZXkpIHsKKyAgICB2YXIgaHQgPSBzY19wcm9wZXJ0aWVzW3N5bV07
CisgICAgaWYgKGh0KQorCWRlbGV0ZSBodFtrZXldOworfQorCisvKioqIE1FVEEgKChleHBvcnQg
I3QpKSAqLworZnVuY3Rpb24gc2NfYW55MlN0cmluZyhvKSB7CisgICAgcmV0dXJuIGpzc3RyaW5n
MnN0cmluZyhzY190b0Rpc3BsYXlTdHJpbmcobykpOworfSAgICAKKworLyoqKiBNRVRBICgoZXhw
b3J0ICN0KQorICAgICAgICAgICAocGVlcGhvbGUgKGluZml4IDIgMiAiPT09IikpCisgICAgICAg
ICAgICh0eXBlIGJvb2wpKQorKi8KK2Z1bmN0aW9uIHNjX2lzRXF2KG8xLCBvMikgeworICAgIHJl
dHVybiAobzEgPT09IG8yKTsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAg
ICAocGVlcGhvbGUgKGluZml4IDIgMiAiPT09IikpCisgICAgICAgICAgICh0eXBlIGJvb2wpKQor
Ki8KK2Z1bmN0aW9uIHNjX2lzRXEobzEsIG8yKSB7CisgICAgcmV0dXJuIChvMSA9PT0gbzIpOwor
fQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAgICh0eXBlIGJvb2wpKQorKi8K
K2Z1bmN0aW9uIHNjX2lzTnVtYmVyKG4pIHsKKyAgICByZXR1cm4gKHR5cGVvZiBuID09PSAibnVt
YmVyIik7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHR5cGUgYm9v
bCkpCisqLworZnVuY3Rpb24gc2NfaXNDb21wbGV4KG4pIHsKKyAgICByZXR1cm4gc2NfaXNOdW1i
ZXIobik7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHR5cGUgYm9v
bCkpCisqLworZnVuY3Rpb24gc2NfaXNSZWFsKG4pIHsKKyAgICByZXR1cm4gc2NfaXNOdW1iZXIo
bik7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHR5cGUgYm9vbCkp
CisqLworZnVuY3Rpb24gc2NfaXNSYXRpb25hbChuKSB7CisgICAgcmV0dXJuIHNjX2lzUmVhbChu
KTsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAodHlwZSBib29sKSkK
KyovCitmdW5jdGlvbiBzY19pc0ludGVnZXIobikgeworICAgIHJldHVybiAocGFyc2VJbnQobikg
PT09IG4pOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAgICh0eXBlIGJv
b2wpCisgICAgICAgICAgIChwZWVwaG9sZSAocG9zdGZpeCAiLCBmYWxzZSIpKSkKKyovCisvLyB3
ZSBkb24ndCBoYXZlIGV4YWN0IG51bWJlcnMuLi4KK2Z1bmN0aW9uIHNjX2lzRXhhY3Qobikgewor
ICAgIHJldHVybiBmYWxzZTsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAg
ICAocGVlcGhvbGUgKHBvc3RmaXggIiwgdHJ1ZSIpKQorCSAgICh0eXBlIGJvb2wpKQorKi8KK2Z1
bmN0aW9uIHNjX2lzSW5leGFjdChuKSB7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8qKiogTUVU
QSAoKGV4cG9ydCA9ID1meCA9ZmwpCisgICAgICAgICAgICh0eXBlIGJvb2wpCisgICAgICAgICAg
IChwZWVwaG9sZSAoaW5maXggMiAyICI9PT0iKSkpCisqLworZnVuY3Rpb24gc2NfZXF1YWwoeCkg
eworICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKQorCWlmICh4
ICE9PSBhcmd1bWVudHNbaV0pCisJICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworLyoqKiBNRVRBICgoZXhwb3J0IDwgPGZ4IDxmbCkKKyAgICAgICAgICAgKHR5cGUgYm9v
bCkKKyAgICAgICAgICAgKHBlZXBob2xlIChpbmZpeCAyIDIgIjwiKSkpCisqLworZnVuY3Rpb24g
c2NfbGVzcyh4KSB7CisgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBp
KyspIHsKKwlpZiAoeCA+PSBhcmd1bWVudHNbaV0pCisJICAgIHJldHVybiBmYWxzZTsKKwl4ID0g
YXJndW1lbnRzW2ldOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLyoqKiBNRVRBICgo
ZXhwb3J0ID4gPmZ4ID5mbCkKKyAgICAgICAgICAgKHR5cGUgYm9vbCkKKyAgICAgICAgICAgKHBl
ZXBob2xlIChpbmZpeCAyIDIgIj4iKSkpCisqLworZnVuY3Rpb24gc2NfZ3JlYXRlcih4LCB5KSB7
CisgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKKwlpZiAo
eCA8PSBhcmd1bWVudHNbaV0pCisJICAgIHJldHVybiBmYWxzZTsKKwl4ID0gYXJndW1lbnRzW2ld
OworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0IDw9IDw9
ZnggPD1mbCkKKyAgICAgICAgICAgKHR5cGUgYm9vbCkKKyAgICAgICAgICAgKHBlZXBob2xlIChp
bmZpeCAyIDIgIjw9IikpKQorKi8KK2Z1bmN0aW9uIHNjX2xlc3NFcXVhbCh4LCB5KSB7CisgICAg
Zm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKKwlpZiAoeCA+IGFy
Z3VtZW50c1tpXSkKKwkgICAgcmV0dXJuIGZhbHNlOworCXggPSBhcmd1bWVudHNbaV07CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCisvKioqIE1FVEEgKChleHBvcnQgPj0gPj1mbCA+PWZ4
KQorICAgICAgICAgICAodHlwZSBib29sKQorICAgICAgICAgICAocGVlcGhvbGUgKGluZml4IDIg
MiAiPj0iKSkpCisqLworZnVuY3Rpb24gc2NfZ3JlYXRlckVxdWFsKHgsIHkpIHsKKyAgICBmb3Ig
KHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeworCWlmICh4IDwgYXJndW1l
bnRzW2ldKQorCSAgICByZXR1cm4gZmFsc2U7CisJeCA9IGFyZ3VtZW50c1tpXTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAg
KHR5cGUgYm9vbCkKKyAgICAgICAgICAgKHBlZXBob2xlIChwb3N0Zml4ICI9PT0gMCIpKSkKKyov
CitmdW5jdGlvbiBzY19pc1plcm8oeCkgeworICAgIHJldHVybiAoeCA9PT0gMCk7Cit9CisKKy8q
KiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHR5cGUgYm9vbCkKKyAgICAgICAgICAg
KHBlZXBob2xlIChwb3N0Zml4ICI+IDAiKSkpCisqLworZnVuY3Rpb24gc2NfaXNQb3NpdGl2ZSh4
KSB7CisgICAgcmV0dXJuICh4ID4gMCk7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAg
ICAgICAgICAgKHR5cGUgYm9vbCkKKyAgICAgICAgICAgKHBlZXBob2xlIChwb3N0Zml4ICI8IDAi
KSkpCisqLworZnVuY3Rpb24gc2NfaXNOZWdhdGl2ZSh4KSB7CisgICAgcmV0dXJuICh4IDwgMCk7
Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHR5cGUgYm9vbCkKKyAg
ICAgICAgICAgKHBlZXBob2xlIChwb3N0Zml4ICIlMj09PTEiKSkpCisqLworZnVuY3Rpb24gc2Nf
aXNPZGQoeCkgeworICAgIHJldHVybiAoeCAlIDIgPT09IDEpOworfQorCisvKioqIE1FVEEgKChl
eHBvcnQgI3QpCisgICAgICAgICAgICh0eXBlIGJvb2wpCisgICAgICAgICAgIChwZWVwaG9sZSAo
cG9zdGZpeCAiJTI9PT0wIikpKQorKi8KK2Z1bmN0aW9uIHNjX2lzRXZlbih4KSB7CisgICAgcmV0
dXJuICh4ICUgMiA9PT0gMCk7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCit2YXIg
c2NfbWF4ID0gTWF0aC5tYXg7CisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLwordmFyIHNjX21p
biA9IE1hdGgubWluOworCisvKioqIE1FVEEgKChleHBvcnQgKyArZnggK2ZsKQorICAgICAgICAg
ICAocGVlcGhvbGUgKGluZml4IDAgI2YgIisiICIwIikpKQorKi8KK2Z1bmN0aW9uIHNjX3BsdXMo
KSB7CisgICAgdmFyIHN1bSA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMu
bGVuZ3RoOyBpKyspCisJc3VtICs9IGFyZ3VtZW50c1tpXTsKKyAgICByZXR1cm4gc3VtOworfQor
CisvKioqIE1FVEEgKChleHBvcnQgKiAqZnggKmZsKQorICAgICAgICAgICAocGVlcGhvbGUgKGlu
Zml4IDAgI2YgIioiICIxIikpKQorKi8KK2Z1bmN0aW9uIHNjX211bHRpKCkgeworICAgIHZhciBw
cm9kdWN0ID0gMTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkr
KykKKwlwcm9kdWN0ICo9IGFyZ3VtZW50c1tpXTsKKyAgICByZXR1cm4gcHJvZHVjdDsKK30KKwor
LyoqKiBNRVRBICgoZXhwb3J0IC0gLWZ4IC1mbCkKKyAgICAgICAgICAgKHBlZXBob2xlIChtaW51
cykpKQorKi8KK2Z1bmN0aW9uIHNjX21pbnVzKHgpIHsKKyAgICBpZiAoYXJndW1lbnRzLmxlbmd0
aCA9PT0gMSkKKwlyZXR1cm4gLXg7CisgICAgZWxzZSB7CisJdmFyIHJlcyA9IHg7CisJZm9yICh2
YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspCisJICAgIHJlcyAtPSBhcmd1bWVu
dHNbaV07CisJcmV0dXJuIHJlczsKKyAgICB9Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAvIC9m
bCkKKyAgICAgICAgICAgKHBlZXBob2xlIChkaXYpKSkKKyovCitmdW5jdGlvbiBzY19kaXYoeCkg
eworICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKQorCXJldHVybiAxL3g7CisgICAgZWxz
ZSB7CisJdmFyIHJlcyA9IHg7CisJZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3Ro
OyBpKyspCisJICAgIHJlcyAvPSBhcmd1bWVudHNbaV07CisJcmV0dXJuIHJlczsKKyAgICB9Cit9
CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCit2YXIgc2NfYWJzID0gTWF0aC5hYnM7CisK
Ky8qKiogTUVUQSAoKGV4cG9ydCBxdW90aWVudCAvZngpCisgICAgICAgICAgIChwZWVwaG9sZSAo
aG9sZSAyICJwYXJzZUludCgiIHggIi8iIHkgIikiKSkpCisqLworZnVuY3Rpb24gc2NfcXVvdGll
bnQoeCwgeSkgeworICAgIHJldHVybiBwYXJzZUludCh4IC8geSk7Cit9CisKKy8qKiogTUVUQSAo
KGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBob2xlIChpbmZpeCAyIDIgIiUiKSkpCisqLwor
ZnVuY3Rpb24gc2NfcmVtYWluZGVyKHgsIHkpIHsKKyAgICByZXR1cm4geCAlIHk7Cit9CisKKy8q
KiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBob2xlIChtb2R1bG8pKSkKKyov
CitmdW5jdGlvbiBzY19tb2R1bG8oeCwgeSkgeworICAgIHZhciByZW1haW5kZXIgPSB4ICUgeTsK
KyAgICAvLyBpZiB0aGV5IGRvbid0IGhhdmUgdGhlIHNhbWUgc2lnbgorICAgIGlmICgocmVtYWlu
ZGVyICogeSkgPCAwKQorCXJldHVybiByZW1haW5kZXIgKyB5OworICAgIGVsc2UKKwlyZXR1cm4g
cmVtYWluZGVyOworfQorCitmdW5jdGlvbiBzY19ldWNsaWRfZ2NkKGEsIGIpIHsKKyAgICB2YXIg
dGVtcDsKKyAgICBpZiAoYSA9PT0gMCkgcmV0dXJuIGI7CisgICAgaWYgKGIgPT09IDApIHJldHVy
biBhOworICAgIGlmIChhIDwgMCkge2EgPSAtYTt9OworICAgIGlmIChiIDwgMCkge2IgPSAtYjt9
OworICAgIGlmIChiID4gYSkge3RlbXAgPSBhOyBhID0gYjsgYiA9IHRlbXA7fTsKKyAgICB3aGls
ZSAodHJ1ZSkgeworCWEgJT0gYjsKKwlpZihhID09PSAwKSB7cmV0dXJuIGI7fTsKKwliICU9IGE7
CisJaWYoYiA9PT0gMCkge3JldHVybiBhO307CisgICAgfTsKKyAgICByZXR1cm4gYjsKK30KKwor
LyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9uIHNjX2djZCgpIHsKKyAgICB2YXIg
Z2NkID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykK
KwlnY2QgPSBzY19ldWNsaWRfZ2NkKGdjZCwgYXJndW1lbnRzW2ldKTsKKyAgICByZXR1cm4gZ2Nk
OworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLworZnVuY3Rpb24gc2NfbGNtKCkgewor
ICAgIHZhciBsY20gPSAxOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0
aDsgaSsrKSB7CisJdmFyIGYgPSBNYXRoLnJvdW5kKGFyZ3VtZW50c1tpXSAvIHNjX2V1Y2xpZF9n
Y2QoYXJndW1lbnRzW2ldLCBsY20pKTsKKwlsY20gKj0gTWF0aC5hYnMoZik7CisgICAgfQorICAg
IHJldHVybiBsY207Cit9CisKKy8vIExJTUlUQVRJT046IG51bWVyYXRvciBhbmQgZGVub21pbmF0
b3IgZG9uJ3QgbWFrZSBzZW5zZSBpbiBmbG9hdGluZyBwb2ludCB3b3JsZC4KKy8vdmFyIFNDX01B
WF9ERUNJTUFMUyA9IDEwMDAwMDAKKy8vCisvLyBmdW5jdGlvbiBzY19udW1lcmF0b3IoeCkgewor
Ly8gICAgIHZhciByb3VuZGVkID0gTWF0aC5yb3VuZCh4ICogU0NfTUFYX0RFQ0lNQUxTKTsKKy8v
ICAgICByZXR1cm4gTWF0aC5yb3VuZChyb3VuZGVkIC8gc2NfZXVjbGlkX2djZChyb3VuZGVkLCBT
Q19NQVhfREVDSU1BTFMpKTsKKy8vIH0KKworLy8gZnVuY3Rpb24gc2NfZGVub21pbmF0b3IoeCkg
eworLy8gICAgIHZhciByb3VuZGVkID0gTWF0aC5yb3VuZCh4ICogU0NfTUFYX0RFQ0lNQUxTKTsK
Ky8vICAgICByZXR1cm4gTWF0aC5yb3VuZChTQ19NQVhfREVDSU1BTFMgLyBzY19ldWNsaWRfZ2Nk
KHJvdW5kZWQsIFNDX01BWF9ERUNJTUFMUykpOworLy8gfQorCisvKioqIE1FVEEgKChleHBvcnQg
I3QpKSAqLwordmFyIHNjX2Zsb29yID0gTWF0aC5mbG9vcjsKKy8qKiogTUVUQSAoKGV4cG9ydCAj
dCkpICovCit2YXIgc2NfY2VpbGluZyA9IE1hdGguY2VpbDsKKy8qKiogTUVUQSAoKGV4cG9ydCAj
dCkpICovCit2YXIgc2NfdHJ1bmNhdGUgPSBwYXJzZUludDsKKy8qKiogTUVUQSAoKGV4cG9ydCAj
dCkpICovCit2YXIgc2Nfcm91bmQgPSBNYXRoLnJvdW5kOworCisvLyBMSU1JVEFUSU9OOiBzY19y
YXRpb25hbGl6ZSBkb2Vzbid0IG1ha2Ugc2Vuc2UgaW4gYSBmbG9hdGluZyBwb2ludCB3b3JsZC4K
KworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK3ZhciBzY19leHAgPSBNYXRoLmV4cDsKKy8q
KiogTUVUQSAoKGV4cG9ydCAjdCkpICovCit2YXIgc2NfbG9nID0gTWF0aC5sb2c7CisvKioqIE1F
VEEgKChleHBvcnQgI3QpKSAqLwordmFyIHNjX3NpbiA9IE1hdGguc2luOworLyoqKiBNRVRBICgo
ZXhwb3J0ICN0KSkgKi8KK3ZhciBzY19jb3MgPSBNYXRoLmNvczsKKy8qKiogTUVUQSAoKGV4cG9y
dCAjdCkpICovCit2YXIgc2NfdGFuID0gTWF0aC50YW47CisvKioqIE1FVEEgKChleHBvcnQgI3Qp
KSAqLwordmFyIHNjX2FzaW4gPSBNYXRoLmFzaW47CisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAq
LwordmFyIHNjX2Fjb3MgPSBNYXRoLmFjb3M7CisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLwor
dmFyIHNjX2F0YW4gPSBNYXRoLmF0YW47CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCit2
YXIgc2Nfc3FydCA9IE1hdGguc3FydDsKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCit2YXIg
c2NfZXhwdCA9IE1hdGgucG93OworCisvLyBMSU1JVEFUSU9OOiB3ZSBkb24ndCBoYXZlIGNvbXBs
ZXggbnVtYmVycy4KKy8vIExJTUlUQVRJT046IHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBo
ZW5jZSBub3QgaW1wbGVtZW50ZWQuCisvLyBMSU1JVEFUSU9OOiBtYWtlLXJlY3Rhbmd1bGFyLCBt
YWtlLXBvbGFyLCByZWFsLXBhcnQsIGltYWctcGFydCwgbWFnbml0dWRlLCBhbmdsZQorLy8gTElN
SVRBVElPTjogMiBhcmd1bWVudCBhdGFuCisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAg
ICAgICAgKHBlZXBob2xlIChpZCkpKQorKi8KK2Z1bmN0aW9uIHNjX2V4YWN0MmluZXhhY3QoeCkg
eworICAgIHJldHVybiB4OworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAg
IChwZWVwaG9sZSAoaWQpKSkKKyovCitmdW5jdGlvbiBzY19pbmV4YWN0MmV4YWN0KHgpIHsKKyAg
ICByZXR1cm4geDsKK30KKworZnVuY3Rpb24gc2NfbnVtYmVyMmpzc3RyaW5nKHgsIHJhZGl4KSB7
CisgICAgaWYgKHJhZGl4KQorCXJldHVybiB4LnRvU3RyaW5nKHJhZGl4KTsKKyAgICBlbHNlCisJ
cmV0dXJuIHgudG9TdHJpbmcoKTsKK30KKworZnVuY3Rpb24gc2NfanNzdHJpbmcybnVtYmVyKHMs
IHJhZGl4KSB7CisgICAgaWYgKHMgPT09ICIiKSByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAocmFk
aXgpIHsKKwl2YXIgdCA9IHBhcnNlSW50KHMsIHJhZGl4KTsKKwlpZiAoIXQgJiYgdCAhPT0gMCkg
cmV0dXJuIGZhbHNlOworCS8vIHZlcmlmeSB0aGF0IGVhY2ggY2hhciBpcyBpbiByYW5nZS4gKHBh
cnNlSW50IGlnbm9yZXMgbGVhZGluZworCS8vIHdoaXRlIGFuZCB0cmFpbGluZyBjaGFycykKKwl2
YXIgYWxsb3dlZENoYXJzID0gIjAxMjM0NTY3ODkwYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoi
LnN1YnN0cmluZygwLCByYWRpeCsxKTsKKwlpZiAoKG5ldyBSZWdFeHAoIl5bIithbGxvd2VkQ2hh
cnMrIl0qJCIsICJpIikpLnRlc3QocykpCisJICAgIHJldHVybiB0OworCWVsc2UgcmV0dXJuIGZh
bHNlOworICAgIH0gZWxzZSB7CisJdmFyIHQgPSArczsgLy8gZG9lcyBub3QgaWdub3JlIHRyYWls
aW5nIGNoYXJzLgorCWlmICghdCAmJiB0ICE9PSAwKSByZXR1cm4gZmFsc2U7CisJLy8gc2ltcGx5
IHZlcmlmeSB0aGF0IGZpcnN0IGNoYXIgaXMgbm90IHdoaXRlc3BhY2UuCisJdmFyIGMgPSBzLmNo
YXJBdCgwKTsKKwkvLyBpZiArYyBpcyAwLCBidXQgdGhlIGNoYXIgaXMgbm90ICIwIiwgdGhlbiB3
ZSBoYXZlIGEgd2hpdGVzcGFjZS4KKwlpZiAoK2MgPT09IDAgJiYgYyAhPT0gIjAiKSByZXR1cm4g
ZmFsc2U7CisJcmV0dXJuIHQ7CisgICAgfQorfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpCisg
ICAgICAgICAgICh0eXBlIGJvb2wpCisgICAgICAgICAgIChwZWVwaG9sZSAobm90KSkpCisqLwor
ZnVuY3Rpb24gc2Nfbm90KGIpIHsKKyAgICByZXR1cm4gYiA9PT0gZmFsc2U7Cit9CisKKy8qKiog
TUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHR5cGUgYm9vbCkpCisqLworZnVuY3Rpb24g
c2NfaXNCb29sZWFuKGIpIHsKKyAgICByZXR1cm4gKGIgPT09IHRydWUpIHx8IChiID09PSBmYWxz
ZSk7Cit9CisKK2Z1bmN0aW9uIHNjX1BhaXIoY2FyLCBjZHIpIHsKKyAgICB0aGlzLmNhciA9IGNh
cjsKKyAgICB0aGlzLmNkciA9IGNkcjsKK30KKworc2NfUGFpci5wcm90b3R5cGUudG9TdHJpbmcg
PSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gc2NfdG9EaXNwbGF5U3RyaW5nKHRoaXMpOworfTsK
K3NjX1BhaXIucHJvdG90eXBlLnNjX3RvV3JpdGVPckRpc3BsYXlTdHJpbmcgPSBmdW5jdGlvbih3
cml0ZU9yRGlzcGxheSkgeworICAgIHZhciBjdXJyZW50ID0gdGhpczsKKworICAgIHZhciByZXMg
PSAiKCI7CisKKyAgICB3aGlsZSh0cnVlKSB7CisJcmVzICs9IHdyaXRlT3JEaXNwbGF5KGN1cnJl
bnQuY2FyKTsKKwlpZiAoc2NfaXNQYWlyKGN1cnJlbnQuY2RyKSkgeworCSAgICByZXMgKz0gIiAi
OworCSAgICBjdXJyZW50ID0gY3VycmVudC5jZHI7CisJfSBlbHNlIGlmIChjdXJyZW50LmNkciAh
PT0gbnVsbCkgeworCSAgICByZXMgKz0gIiAuICIgKyB3cml0ZU9yRGlzcGxheShjdXJyZW50LmNk
cik7CisJICAgIGJyZWFrOworCX0gZWxzZSAvLyBjdXJyZW50LmNkciA9PSBudWxsCisJICAgIGJy
ZWFrOworICAgIH0KKwkKKyAgICByZXMgKz0gIikiOworCisgICAgcmV0dXJuIHJlczsKK307Citz
Y19QYWlyLnByb3RvdHlwZS5zY190b0Rpc3BsYXlTdHJpbmcgPSBmdW5jdGlvbigpIHsKKyAgICBy
ZXR1cm4gdGhpcy5zY190b1dyaXRlT3JEaXNwbGF5U3RyaW5nKHNjX3RvRGlzcGxheVN0cmluZyk7
Cit9Oworc2NfUGFpci5wcm90b3R5cGUuc2NfdG9Xcml0ZVN0cmluZyA9IGZ1bmN0aW9uKCkgewor
ICAgIHJldHVybiB0aGlzLnNjX3RvV3JpdGVPckRpc3BsYXlTdHJpbmcoc2NfdG9Xcml0ZVN0cmlu
Zyk7Cit9OworLy8gc2NfUGFpci5wcm90b3R5cGUuc2NfdG9Xcml0ZUNpcmNsZVN0cmluZyBpbiBJ
Ty5qcworCisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAgICh0eXBlIGJvb2wpCisg
ICAgICAgICAgIChwZWVwaG9sZSAocG9zdGZpeCAiIGluc3RhbmNlb2Ygc2NfUGFpciIpKSkKKyov
CitmdW5jdGlvbiBzY19pc1BhaXIocCkgeworICAgIHJldHVybiAocCBpbnN0YW5jZW9mIHNjX1Bh
aXIpOworfQorCitmdW5jdGlvbiBzY19pc1BhaXJFcXVhbChwMSwgcDIsIGNvbXApIHsKKyAgICBy
ZXR1cm4gKGNvbXAocDEuY2FyLCBwMi5jYXIpICYmIGNvbXAocDEuY2RyLCBwMi5jZHIpKTsKK30K
KworLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAocGVlcGhvbGUgKGhvbGUgMiAi
bmV3IHNjX1BhaXIoIiBjYXIgIiwgIiBjZHIgIikiKSkpCisqLworZnVuY3Rpb24gc2NfY29ucyhj
YXIsIGNkcikgeworICAgIHJldHVybiBuZXcgc2NfUGFpcihjYXIsIGNkcik7Cit9CisKKy8qKiog
TUVUQSAoKGV4cG9ydCBjb25zKikpICovCitmdW5jdGlvbiBzY19jb25zU3RhcigpIHsKKyAgICB2
YXIgcmVzID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTsKKyAgICBmb3IgKHZhciBp
ID0gYXJndW1lbnRzLmxlbmd0aC0yOyBpID49IDA7IGktLSkKKwlyZXMgPSBuZXcgc2NfUGFpcihh
cmd1bWVudHNbaV0sIHJlcyk7CisgICAgcmV0dXJuIHJlczsKK30KKworLyoqKiBNRVRBICgoZXhw
b3J0ICN0KQorICAgICAgICAgICAocGVlcGhvbGUgKHBvc3RmaXggIi5jYXIiKSkpCisqLworZnVu
Y3Rpb24gc2NfY2FyKHApIHsKKyAgICByZXR1cm4gcC5jYXI7Cit9CisKKy8qKiogTUVUQSAoKGV4
cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBob2xlIChwb3N0Zml4ICIuY2RyIikpKQorKi8KK2Z1
bmN0aW9uIHNjX2NkcihwKSB7CisgICAgcmV0dXJuIHAuY2RyOworfQorCisvKioqIE1FVEEgKChl
eHBvcnQgI3QpCisgICAgICAgICAgIChwZWVwaG9sZSAoaG9sZSAyIHAgIi5jYXIgPSAiIHZhbCkp
KQorKi8KK2Z1bmN0aW9uIHNjX3NldENhckJhbmcocCwgdmFsKSB7CisgICAgcC5jYXIgPSB2YWw7
Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBob2xlIChob2xl
IDIgcCAiLmNkciA9ICIgdmFsKSkpCisqLworZnVuY3Rpb24gc2Nfc2V0Q2RyQmFuZyhwLCB2YWwp
IHsKKyAgICBwLmNkciA9IHZhbDsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAg
ICAgICAocGVlcGhvbGUgKHBvc3RmaXggIi5jYXIuY2FyIikpKQorKi8KK2Z1bmN0aW9uIHNjX2Nh
YXIocCkgeyByZXR1cm4gcC5jYXIuY2FyOyB9CisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAg
ICAgICAgIChwZWVwaG9sZSAocG9zdGZpeCAiLmNkci5jYXIiKSkpCisqLworZnVuY3Rpb24gc2Nf
Y2FkcihwKSB7IHJldHVybiBwLmNkci5jYXI7IH0KKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAg
ICAgICAgICAgKHBlZXBob2xlIChwb3N0Zml4ICIuY2FyLmNkciIpKSkKKyovCitmdW5jdGlvbiBz
Y19jZGFyKHApIHsgcmV0dXJuIHAuY2FyLmNkcjsgfQorLyoqKiBNRVRBICgoZXhwb3J0ICN0KQor
ICAgICAgICAgICAocGVlcGhvbGUgKHBvc3RmaXggIi5jZHIuY2RyIikpKQorKi8KK2Z1bmN0aW9u
IHNjX2NkZHIocCkgeyByZXR1cm4gcC5jZHIuY2RyOyB9CisvKioqIE1FVEEgKChleHBvcnQgI3Qp
CisgICAgICAgICAgIChwZWVwaG9sZSAocG9zdGZpeCAiLmNhci5jYXIuY2FyIikpKQorKi8KK2Z1
bmN0aW9uIHNjX2NhYWFyKHApIHsgcmV0dXJuIHAuY2FyLmNhci5jYXI7IH0KKy8qKiogTUVUQSAo
KGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBob2xlIChwb3N0Zml4ICIuY2FyLmNkci5jYXIi
KSkpCisqLworZnVuY3Rpb24gc2NfY2FkYXIocCkgeyByZXR1cm4gcC5jYXIuY2RyLmNhcjsgfQor
LyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAocGVlcGhvbGUgKHBvc3RmaXggIi5j
ZHIuY2FyLmNhciIpKSkKKyovCitmdW5jdGlvbiBzY19jYWFkcihwKSB7IHJldHVybiBwLmNkci5j
YXIuY2FyOyB9CisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAgIChwZWVwaG9sZSAo
cG9zdGZpeCAiLmNkci5jZHIuY2FyIikpKQorKi8KK2Z1bmN0aW9uIHNjX2NhZGRyKHApIHsgcmV0
dXJuIHAuY2RyLmNkci5jYXI7IH0KKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAg
KHBlZXBob2xlIChwb3N0Zml4ICIuY2FyLmNhci5jZHIiKSkpCisqLworZnVuY3Rpb24gc2NfY2Rh
YXIocCkgeyByZXR1cm4gcC5jYXIuY2FyLmNkcjsgfQorLyoqKiBNRVRBICgoZXhwb3J0ICN0KQor
ICAgICAgICAgICAocGVlcGhvbGUgKHBvc3RmaXggIi5jZHIuY2FyLmNkciIpKSkKKyovCitmdW5j
dGlvbiBzY19jZGFkcihwKSB7IHJldHVybiBwLmNkci5jYXIuY2RyOyB9CisvKioqIE1FVEEgKChl
eHBvcnQgI3QpCisgICAgICAgICAgIChwZWVwaG9sZSAocG9zdGZpeCAiLmNhci5jZHIuY2RyIikp
KQorKi8KK2Z1bmN0aW9uIHNjX2NkZGFyKHApIHsgcmV0dXJuIHAuY2FyLmNkci5jZHI7IH0KKy8q
KiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBob2xlIChwb3N0Zml4ICIuY2Ry
LmNkci5jZHIiKSkpCisqLworZnVuY3Rpb24gc2NfY2RkZHIocCkgeyByZXR1cm4gcC5jZHIuY2Ry
LmNkcjsgfQorLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAocGVlcGhvbGUgKHBv
c3RmaXggIi5jYXIuY2FyLmNhci5jYXIiKSkpCisqLworZnVuY3Rpb24gc2NfY2FhYWFyKHApIHsg
cmV0dXJuIHAuY2FyLmNhci5jYXIuY2FyOyB9CisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAg
ICAgICAgIChwZWVwaG9sZSAocG9zdGZpeCAiLmNhci5jZHIuY2FyLmNhciIpKSkKKyovCitmdW5j
dGlvbiBzY19jYWFkYXIocCkgeyByZXR1cm4gcC5jYXIuY2RyLmNhci5jYXI7IH0KKy8qKiogTUVU
QSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBob2xlIChwb3N0Zml4ICIuY2RyLmNhci5j
YXIuY2FyIikpKQorKi8KK2Z1bmN0aW9uIHNjX2NhYWFkcihwKSB7IHJldHVybiBwLmNkci5jYXIu
Y2FyLmNhcjsgfQorLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAocGVlcGhvbGUg
KHBvc3RmaXggIi5jZHIuY2RyLmNhci5jYXIiKSkpCisqLworZnVuY3Rpb24gc2NfY2FhZGRyKHAp
IHsgcmV0dXJuIHAuY2RyLmNkci5jYXIuY2FyOyB9CisvKioqIE1FVEEgKChleHBvcnQgI3QpCisg
ICAgICAgICAgIChwZWVwaG9sZSAocG9zdGZpeCAiLmNhci5jYXIuY2FyLmNkciIpKSkKKyovCitm
dW5jdGlvbiBzY19jZGFhYXIocCkgeyByZXR1cm4gcC5jYXIuY2FyLmNhci5jZHI7IH0KKy8qKiog
TUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBob2xlIChwb3N0Zml4ICIuY2FyLmNk
ci5jYXIuY2RyIikpKQorKi8KK2Z1bmN0aW9uIHNjX2NkYWRhcihwKSB7IHJldHVybiBwLmNhci5j
ZHIuY2FyLmNkcjsgfQorLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAocGVlcGhv
bGUgKHBvc3RmaXggIi5jZHIuY2FyLmNhci5jZHIiKSkpCisqLworZnVuY3Rpb24gc2NfY2RhYWRy
KHApIHsgcmV0dXJuIHAuY2RyLmNhci5jYXIuY2RyOyB9CisvKioqIE1FVEEgKChleHBvcnQgI3Qp
CisgICAgICAgICAgIChwZWVwaG9sZSAocG9zdGZpeCAiLmNkci5jZHIuY2FyLmNkciIpKSkKKyov
CitmdW5jdGlvbiBzY19jZGFkZHIocCkgeyByZXR1cm4gcC5jZHIuY2RyLmNhci5jZHI7IH0KKy8q
KiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBob2xlIChwb3N0Zml4ICIuY2Fy
LmNhci5jZHIuY2FyIikpKQorKi8KK2Z1bmN0aW9uIHNjX2NhZGFhcihwKSB7IHJldHVybiBwLmNh
ci5jYXIuY2RyLmNhcjsgfQorLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAocGVl
cGhvbGUgKHBvc3RmaXggIi5jYXIuY2RyLmNkci5jYXIiKSkpCisqLworZnVuY3Rpb24gc2NfY2Fk
ZGFyKHApIHsgcmV0dXJuIHAuY2FyLmNkci5jZHIuY2FyOyB9CisvKioqIE1FVEEgKChleHBvcnQg
I3QpCisgICAgICAgICAgIChwZWVwaG9sZSAocG9zdGZpeCAiLmNkci5jYXIuY2RyLmNhciIpKSkK
KyovCitmdW5jdGlvbiBzY19jYWRhZHIocCkgeyByZXR1cm4gcC5jZHIuY2FyLmNkci5jYXI7IH0K
Ky8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBob2xlIChwb3N0Zml4ICIu
Y2RyLmNkci5jZHIuY2FyIikpKQorKi8KK2Z1bmN0aW9uIHNjX2NhZGRkcihwKSB7IHJldHVybiBw
LmNkci5jZHIuY2RyLmNhcjsgfQorLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAo
cGVlcGhvbGUgKHBvc3RmaXggIi5jYXIuY2FyLmNkci5jZHIiKSkpCisqLworZnVuY3Rpb24gc2Nf
Y2RkYWFyKHApIHsgcmV0dXJuIHAuY2FyLmNhci5jZHIuY2RyOyB9CisvKioqIE1FVEEgKChleHBv
cnQgI3QpCisgICAgICAgICAgIChwZWVwaG9sZSAocG9zdGZpeCAiLmNhci5jZHIuY2RyLmNkciIp
KSkKKyovCitmdW5jdGlvbiBzY19jZGRkYXIocCkgeyByZXR1cm4gcC5jYXIuY2RyLmNkci5jZHI7
IH0KKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBob2xlIChwb3N0Zml4
ICIuY2RyLmNhci5jZHIuY2RyIikpKQorKi8KK2Z1bmN0aW9uIHNjX2NkZGFkcihwKSB7IHJldHVy
biBwLmNkci5jYXIuY2RyLmNkcjsgfQorLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAg
ICAocGVlcGhvbGUgKHBvc3RmaXggIi5jZHIuY2RyLmNkci5jZHIiKSkpCisqLworZnVuY3Rpb24g
c2NfY2RkZGRyKHApIHsgcmV0dXJuIHAuY2RyLmNkci5jZHIuY2RyOyB9CisKKy8qKiogTUVUQSAo
KGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBzY19sYXN0UGFpcihsKSB7CisgICAgaWYgKCFzY19p
c1BhaXIobCkpIHNjX2Vycm9yKCJzY19sYXN0UGFpcjogcGFpciBleHBlY3RlZCIpOworICAgIHZh
ciByZXMgPSBsOworICAgIHZhciBjZHIgPSBsLmNkcjsKKyAgICB3aGlsZSAoc2NfaXNQYWlyKGNk
cikpIHsKKwlyZXMgPSBjZHI7CisJY2RyID0gcmVzLmNkcjsKKyAgICB9CisgICAgcmV0dXJuIHJl
czsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAodHlwZSBib29sKQor
ICAgICAgICAgICAocGVlcGhvbGUgKHBvc3RmaXggIiA9PT0gbnVsbCIpKSkKKyovCitmdW5jdGlv
biBzY19pc051bGwobykgeworICAgIHJldHVybiAobyA9PT0gbnVsbCk7Cit9CisKKy8qKiogTUVU
QSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHR5cGUgYm9vbCkpCisqLworZnVuY3Rpb24gc2Nf
aXNMaXN0KG8pIHsKKyAgICB2YXIgcmFiYml0OworICAgIHZhciB0dXJ0bGU7CisKKyAgICB2YXIg
cmFiYml0ID0gbzsKKyAgICB2YXIgdHVydGxlID0gbzsKKyAgICB3aGlsZSAodHJ1ZSkgeworCWlm
IChyYWJiaXQgPT09IG51bGwgfHwKKwkgICAgKHJhYmJpdCBpbnN0YW5jZW9mIHNjX1BhaXIgJiYg
cmFiYml0LmNkciA9PT0gbnVsbCkpCisJICAgIHJldHVybiB0cnVlOyAgLy8gZW5kIG9mIGxpc3QK
KwllbHNlIGlmICgocmFiYml0IGluc3RhbmNlb2Ygc2NfUGFpcikgJiYKKwkJIChyYWJiaXQuY2Ry
IGluc3RhbmNlb2Ygc2NfUGFpcikpIHsKKwkgICAgcmFiYml0ID0gcmFiYml0LmNkci5jZHI7CisJ
ICAgIHR1cnRsZSA9IHR1cnRsZS5jZHI7CisJICAgIGlmIChyYWJiaXQgPT09IHR1cnRsZSkgcmV0
dXJuIGZhbHNlOyAvLyBjeWNsZQorCX0gZWxzZQorCSAgICByZXR1cm4gZmFsc2U7IC8vIG5vdCBw
YWlyCisgICAgfQorfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLworZnVuY3Rpb24gc2Nf
bGlzdCgpIHsKKyAgICB2YXIgcmVzID0gbnVsbDsKKyAgICB2YXIgYSA9IGFyZ3VtZW50czsKKyAg
ICBmb3IgKHZhciBpID0gYS5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pCisJcmVzID0gbmV3IHNjX1Bh
aXIoYVtpXSwgcmVzKTsKKyAgICByZXR1cm4gcmVzOworfQorCisvKioqIE1FVEEgKChleHBvcnQg
I3QpKSAqLworZnVuY3Rpb24gc2NfaW90YShudW0sIGluaXQpIHsKKyAgIHZhciByZXMgPSBudWxs
OworICAgaWYgKCFpbml0KSBpbml0ID0gMDsKKyAgIGZvciAodmFyIGkgPSBudW0gLSAxOyBpID49
IDA7IGktLSkKKyAgICAgIHJlcyA9IG5ldyBzY19QYWlyKGkgKyBpbml0LCByZXMpOworICAgcmV0
dXJuIHJlczsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9uIHNjX21h
a2VMaXN0KG5iRWxzLCBmaWxsKSB7CisgICAgdmFyIHJlcyA9IG51bGw7CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBuYkVsczsgaSsrKQorCXJlcyA9IG5ldyBzY19QYWlyKGZpbGwsIHJlcyk7Cisg
ICAgcmV0dXJuIHJlczsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9u
IHNjX2xlbmd0aChsKSB7CisgICAgdmFyIHJlcyA9IDA7CisgICAgd2hpbGUgKGwgIT09IG51bGwp
IHsKKwlyZXMrKzsKKwlsID0gbC5jZHI7CisgICAgfQorICAgIHJldHVybiByZXM7Cit9CisKKy8q
KiogTUVUQSAoKGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBzY19yZW1xKG8sIGwpIHsKKyAgICB2
YXIgZHVtbXkgPSB7IGNkciA6IG51bGwgfTsKKyAgICB2YXIgdGFpbCA9IGR1bW15OworICAgIHdo
aWxlIChsICE9PSBudWxsKSB7CisJaWYgKGwuY2FyICE9PSBvKSB7CisJICAgIHRhaWwuY2RyID0g
c2NfY29ucyhsLmNhciwgbnVsbCk7CisJICAgIHRhaWwgPSB0YWlsLmNkcjsKKwl9CisJbCA9IGwu
Y2RyOworICAgIH0KKyAgICByZXR1cm4gZHVtbXkuY2RyOworfQorCisvKioqIE1FVEEgKChleHBv
cnQgI3QpKSAqLworZnVuY3Rpb24gc2NfcmVtcUJhbmcobywgbCkgeworICAgIHZhciBkdW1teSA9
IHsgY2RyIDogbnVsbCB9OworICAgIHZhciB0YWlsID0gZHVtbXk7CisgICAgdmFyIG5lZWRzQXNz
aWcgPSB0cnVlOworICAgIHdoaWxlIChsICE9PSBudWxsKSB7CisJaWYgKGwuY2FyID09PSBvKSB7
CisJICAgIG5lZWRzQXNzaWcgPSB0cnVlOworCX0gZWxzZSB7CisJICAgIGlmIChuZWVkc0Fzc2ln
KSB7CisJCXRhaWwuY2RyID0gbDsKKwkJbmVlZHNBc3NpZyA9IGZhbHNlOworCSAgICB9CisJICAg
IHRhaWwgPSBsOworCX0KKwlsID0gbC5jZHI7CisgICAgfQorICAgIHRhaWwuY2RyID0gbnVsbDsK
KyAgICByZXR1cm4gZHVtbXkuY2RyOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLwor
ZnVuY3Rpb24gc2NfZGVsZXRlKG8sIGwpIHsKKyAgICB2YXIgZHVtbXkgPSB7IGNkciA6IG51bGwg
fTsKKyAgICB2YXIgdGFpbCA9IGR1bW15OworICAgIHdoaWxlIChsICE9PSBudWxsKSB7CisJaWYg
KCFzY19pc0VxdWFsKGwuY2FyLCBvKSkgeworCSAgICB0YWlsLmNkciA9IHNjX2NvbnMobC5jYXIs
IG51bGwpOworCSAgICB0YWlsID0gdGFpbC5jZHI7CisJfQorCWwgPSBsLmNkcjsKKyAgICB9Cisg
ICAgcmV0dXJuIGR1bW15LmNkcjsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1
bmN0aW9uIHNjX2RlbGV0ZUJhbmcobywgbCkgeworICAgIHZhciBkdW1teSA9IHsgY2RyIDogbnVs
bCB9OworICAgIHZhciB0YWlsID0gZHVtbXk7CisgICAgdmFyIG5lZWRzQXNzaWcgPSB0cnVlOwor
ICAgIHdoaWxlIChsICE9PSBudWxsKSB7CisJaWYgKHNjX2lzRXF1YWwobC5jYXIsIG8pKSB7CisJ
ICAgIG5lZWRzQXNzaWcgPSB0cnVlOworCX0gZWxzZSB7CisJICAgIGlmIChuZWVkc0Fzc2lnKSB7
CisJCXRhaWwuY2RyID0gbDsKKwkJbmVlZHNBc3NpZyA9IGZhbHNlOworCSAgICB9CisJICAgIHRh
aWwgPSBsOworCX0KKwlsID0gbC5jZHI7CisgICAgfQorICAgIHRhaWwuY2RyID0gbnVsbDsKKyAg
ICByZXR1cm4gZHVtbXkuY2RyOworfQorCitmdW5jdGlvbiBzY19yZXZlcnNlQXBwZW5kQmFuZyhs
MSwgbDIpIHsKKyAgICB2YXIgcmVzID0gbDI7CisgICAgd2hpbGUgKGwxICE9PSBudWxsKSB7CisJ
dmFyIHRtcCA9IHJlczsKKwlyZXMgPSBsMTsKKwlsMSA9IGwxLmNkcjsKKwlyZXMuY2RyID0gdG1w
OworICAgIH0KKyAgICByZXR1cm4gcmVzOworfQorCQorZnVuY3Rpb24gc2NfZHVhbEFwcGVuZChs
MSwgbDIpIHsKKyAgICBpZiAobDEgPT09IG51bGwpIHJldHVybiBsMjsKKyAgICBpZiAobDIgPT09
IG51bGwpIHJldHVybiBsMTsKKyAgICB2YXIgcmV2ID0gc2NfcmV2ZXJzZShsMSk7CisgICAgcmV0
dXJuIHNjX3JldmVyc2VBcHBlbmRCYW5nKHJldiwgbDIpOworfQorCisvKioqIE1FVEEgKChleHBv
cnQgI3QpKSAqLworZnVuY3Rpb24gc2NfYXBwZW5kKCkgeworICAgIGlmIChhcmd1bWVudHMubGVu
Z3RoID09PSAwKQorCXJldHVybiBudWxsOworICAgIHZhciByZXMgPSBhcmd1bWVudHNbYXJndW1l
bnRzLmxlbmd0aCAtIDFdOworICAgIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMjsg
aSA+PSAwOyBpLS0pCisJcmVzID0gc2NfZHVhbEFwcGVuZChhcmd1bWVudHNbaV0sIHJlcyk7Cisg
ICAgcmV0dXJuIHJlczsKK30KKworZnVuY3Rpb24gc2NfZHVhbEFwcGVuZEJhbmcobDEsIGwyKSB7
CisgICAgaWYgKGwxID09PSBudWxsKSByZXR1cm4gbDI7CisgICAgaWYgKGwyID09PSBudWxsKSBy
ZXR1cm4gbDE7CisgICAgdmFyIHRtcCA9IGwxOworICAgIHdoaWxlICh0bXAuY2RyICE9PSBudWxs
KSB0bXA9dG1wLmNkcjsKKyAgICB0bXAuY2RyID0gbDI7CisgICAgcmV0dXJuIGwxOworfQorICAg
IAorLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9uIHNjX2FwcGVuZEJhbmcoKSB7
CisgICAgdmFyIHJlcyA9IG51bGw7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMu
bGVuZ3RoOyBpKyspCisJcmVzID0gc2NfZHVhbEFwcGVuZEJhbmcocmVzLCBhcmd1bWVudHNbaV0p
OworICAgIHJldHVybiByZXM7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCitmdW5j
dGlvbiBzY19yZXZlcnNlKGwxKSB7CisgICAgdmFyIHJlcyA9IG51bGw7CisgICAgd2hpbGUgKGwx
ICE9PSBudWxsKSB7CisJcmVzID0gc2NfY29ucyhsMS5jYXIsIHJlcyk7CisJbDEgPSBsMS5jZHI7
CisgICAgfQorICAgIHJldHVybiByZXM7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICov
CitmdW5jdGlvbiBzY19yZXZlcnNlQmFuZyhsKSB7CisgICAgcmV0dXJuIHNjX3JldmVyc2VBcHBl
bmRCYW5nKGwsIG51bGwpOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLworZnVuY3Rp
b24gc2NfbGlzdFRhaWwobCwgaykgeworICAgIHZhciByZXMgPSBsOworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgazsgaSsrKSB7CisJcmVzID0gcmVzLmNkcjsKKyAgICB9CisgICAgcmV0dXJuIHJl
czsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9uIHNjX2xpc3RSZWYo
bCwgaykgeworICAgIHJldHVybiBzY19saXN0VGFpbChsLCBrKS5jYXI7Cit9CisKKy8qIC8vIHVu
b3B0aW1pemVkIGdlbmVyaWMgdmVyc2lvbnMKK2Z1bmN0aW9uIHNjX21lbVgobywgbCwgY29tcCkg
eworICAgIHdoaWxlIChsICE9IG51bGwpIHsKKwlpZiAoY29tcChsLmNhciwgbykpCisJICAgIHJl
dHVybiBsOworCWwgPSBsLmNkcjsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorZnVuY3Rp
b24gc2NfbWVtcShvLCBsKSB7IHJldHVybiBzY19tZW1YKG8sIGwsIHNjX2lzRXEpOyB9CitmdW5j
dGlvbiBzY19tZW12KG8sIGwpIHsgcmV0dXJuIHNjX21lbVgobywgbCwgc2NfaXNFcXYpOyB9Citm
dW5jdGlvbiBzY19tZW1iZXIobywgbCkgeyByZXR1cm4gc2NfbWVtWChvLCBsLCBzY19pc0VxdWFs
KTsgfQorKi8KKworLyogb3B0aW1pemVkIHZlcnNpb25zICovCisvKioqIE1FVEEgKChleHBvcnQg
I3QpKSAqLworZnVuY3Rpb24gc2NfbWVtcShvLCBsKSB7CisgICAgd2hpbGUgKGwgIT09IG51bGwp
IHsKKwlpZiAobC5jYXIgPT09IG8pCisJICAgIHJldHVybiBsOworCWwgPSBsLmNkcjsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0
aW9uIHNjX21lbXYobywgbCkgeworICAgIHdoaWxlIChsICE9PSBudWxsKSB7CisJaWYgKGwuY2Fy
ID09PSBvKQorCSAgICByZXR1cm4gbDsKKwlsID0gbC5jZHI7CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBzY19tZW1iZXIo
bywgbCkgeworICAgIHdoaWxlIChsICE9PSBudWxsKSB7CisJaWYgKHNjX2lzRXF1YWwobC5jYXIs
bykpCisJICAgIHJldHVybiBsOworCWwgPSBsLmNkcjsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCisvKiAvLyBnZW5lcmljIHVub3B0aW1pemVkIHZlcnNpb25zCitmdW5jdGlvbiBzY19h
c3NYKG8sIGFsLCBjb21wKSB7CisgICAgd2hpbGUgKGFsICE9IG51bGwpIHsKKwlpZiAoY29tcChh
bC5jYXIuY2FyLCBvKSkKKwkgICAgcmV0dXJuIGFsLmNhcjsKKwlhbCA9IGFsLmNkcjsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorZnVuY3Rpb24gc2NfYXNzcShvLCBhbCkgeyByZXR1cm4g
c2NfYXNzWChvLCBhbCwgc2NfaXNFcSk7IH0KK2Z1bmN0aW9uIHNjX2Fzc3YobywgYWwpIHsgcmV0
dXJuIHNjX2Fzc1gobywgYWwsIHNjX2lzRXF2KTsgfQorZnVuY3Rpb24gc2NfYXNzb2MobywgYWwp
IHsgcmV0dXJuIHNjX2Fzc1gobywgYWwsIHNjX2lzRXF1YWwpOyB9CisqLworLy8gb3B0aW1pemVk
IHZlcnNpb25zCisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLworZnVuY3Rpb24gc2NfYXNzcShv
LCBhbCkgeworICAgIHdoaWxlIChhbCAhPT0gbnVsbCkgeworCWlmIChhbC5jYXIuY2FyID09PSBv
KQorCSAgICByZXR1cm4gYWwuY2FyOworCWFsID0gYWwuY2RyOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLworZnVuY3Rpb24gc2NfYXNzdihv
LCBhbCkgeworICAgIHdoaWxlIChhbCAhPT0gbnVsbCkgeworCWlmIChhbC5jYXIuY2FyID09PSBv
KQorCSAgICByZXR1cm4gYWwuY2FyOworCWFsID0gYWwuY2RyOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLworZnVuY3Rpb24gc2NfYXNzb2Mo
bywgYWwpIHsKKyAgICB3aGlsZSAoYWwgIT09IG51bGwpIHsKKwlpZiAoc2NfaXNFcXVhbChhbC5j
YXIuY2FyLCBvKSkKKwkgICAgcmV0dXJuIGFsLmNhcjsKKwlhbCA9IGFsLmNkcjsKKyAgICB9Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCisvKiBjYW4gYmUgdXNlZCBmb3IgbXV0YWJsZSBzdHJpbmdz
IGFuZCBjaGFyYWN0ZXJzICovCitmdW5jdGlvbiBzY19pc0NoYXJTdHJpbmdFcXVhbChjczEsIGNz
MikgeyByZXR1cm4gY3MxLnZhbCA9PT0gY3MyLnZhbDsgfQorZnVuY3Rpb24gc2NfaXNDaGFyU3Ry
aW5nTGVzcyhjczEsIGNzMikgeyByZXR1cm4gY3MxLnZhbCA8IGNzMi52YWw7IH0KK2Z1bmN0aW9u
IHNjX2lzQ2hhclN0cmluZ0dyZWF0ZXIoY3MxLCBjczIpIHsgcmV0dXJuIGNzMS52YWwgPiBjczIu
dmFsOyB9CitmdW5jdGlvbiBzY19pc0NoYXJTdHJpbmdMZXNzRXF1YWwoY3MxLCBjczIpIHsgcmV0
dXJuIGNzMS52YWwgPD0gY3MyLnZhbDsgfQorZnVuY3Rpb24gc2NfaXNDaGFyU3RyaW5nR3JlYXRl
ckVxdWFsKGNzMSwgY3MyKSB7IHJldHVybiBjczEudmFsID49IGNzMi52YWw7IH0KK2Z1bmN0aW9u
IHNjX2lzQ2hhclN0cmluZ0NJRXF1YWwoY3MxLCBjczIpCisgICAgeyByZXR1cm4gY3MxLnZhbC50
b0xvd2VyQ2FzZSgpID09PSBjczIudmFsLnRvTG93ZXJDYXNlKCk7IH0KK2Z1bmN0aW9uIHNjX2lz
Q2hhclN0cmluZ0NJTGVzcyhjczEsIGNzMikKKyAgICB7IHJldHVybiBjczEudmFsLnRvTG93ZXJD
YXNlKCkgPCBjczIudmFsLnRvTG93ZXJDYXNlKCk7IH0KK2Z1bmN0aW9uIHNjX2lzQ2hhclN0cmlu
Z0NJR3JlYXRlcihjczEsIGNzMikKKyAgICB7IHJldHVybiBjczEudmFsLnRvTG93ZXJDYXNlKCkg
PiBjczIudmFsLnRvTG93ZXJDYXNlKCk7IH0KK2Z1bmN0aW9uIHNjX2lzQ2hhclN0cmluZ0NJTGVz
c0VxdWFsKGNzMSwgY3MyKQorICAgIHsgcmV0dXJuIGNzMS52YWwudG9Mb3dlckNhc2UoKSA8PSBj
czIudmFsLnRvTG93ZXJDYXNlKCk7IH0KK2Z1bmN0aW9uIHNjX2lzQ2hhclN0cmluZ0NJR3JlYXRl
ckVxdWFsKGNzMSwgY3MyKQorICAgIHsgcmV0dXJuIGNzMS52YWwudG9Mb3dlckNhc2UoKSA+PSBj
czIudmFsLnRvTG93ZXJDYXNlKCk7IH0KKworCisKKworZnVuY3Rpb24gc2NfQ2hhcihjKSB7Cisg
ICAgdmFyIGNhY2hlZCA9IHNjX0NoYXIubGF6eVtjXTsKKyAgICBpZiAoY2FjaGVkKQorCXJldHVy
biBjYWNoZWQ7CisgICAgdGhpcy52YWwgPSBjOworICAgIHNjX0NoYXIubGF6eVtjXSA9IHRoaXM7
CisgICAgLy8gYWRkIHJldHVybiwgc28gRkYgZG9lcyBub3QgY29tcGxhaW4uCisgICAgcmV0dXJu
IHVuZGVmaW5lZDsKK30KK3NjX0NoYXIubGF6eSA9IG5ldyBPYmplY3QoKTsKKy8vIHRoYW5rcyB0
byBFcmljCitzY19DaGFyLmNoYXIycmVhZGFibGUgPSB7CisgICAgIlwwMDAiOiAiI1xcbnVsbCIs
CisgICAgIlwwMDciOiAiI1xcYmVsbCIsCisgICAgIlwwMTAiOiAiI1xcYmFja3NwYWNlIiwKKyAg
ICAiXDAxMSI6ICIjXFx0YWIiLAorICAgICJcMDEyIjogIiNcXG5ld2xpbmUiLAorICAgICJcMDE0
IjogIiNcXHBhZ2UiLAorICAgICJcMDE1IjogIiNcXHJldHVybiIsCisgICAgIlwwMzMiOiAiI1xc
ZXNjYXBlIiwKKyAgICAiXDA0MCI6ICIjXFxzcGFjZSIsCisgICAgIlwxNzciOiAiI1xcZGVsZXRl
IiwKKworICAvKiBwb2V0aWNsZXNzIG5hbWVzICovCisgICAgIlwwMDEiOiAiI1xcc29oIiwKKyAg
ICAiXDAwMiI6ICIjXFxzdHgiLAorICAgICJcMDAzIjogIiNcXGV0eCIsCisgICAgIlwwMDQiOiAi
I1xcZW90IiwKKyAgICAiXDAwNSI6ICIjXFxlbnEiLAorICAgICJcMDA2IjogIiNcXGFjayIsCisK
KyAgICAiXDAxMyI6ICIjXFx2dCIsCisgICAgIlwwMTYiOiAiI1xcc28iLAorICAgICJcMDE3Ijog
IiNcXHNpIiwKKworICAgICJcMDIwIjogIiNcXGRsZSIsCisgICAgIlwwMjEiOiAiI1xcZGMxIiwK
KyAgICAiXDAyMiI6ICIjXFxkYzIiLAorICAgICJcMDIzIjogIiNcXGRjMyIsCisgICAgIlwwMjQi
OiAiI1xcZGM0IiwKKyAgICAiXDAyNSI6ICIjXFxuYWsiLAorICAgICJcMDI2IjogIiNcXHN5biIs
CisgICAgIlwwMjciOiAiI1xcZXRiIiwKKworICAgICJcMDMwIjogIiNcXGNhbiIsCisgICAgIlww
MzEiOiAiI1xcZW0iLAorICAgICJcMDMyIjogIiNcXHN1YiIsCisgICAgIlwwMzMiOiAiI1xcZXNj
IiwKKyAgICAiXDAzNCI6ICIjXFxmcyIsCisgICAgIlwwMzUiOiAiI1xcZ3MiLAorICAgICJcMDM2
IjogIiNcXHJzIiwKKyAgICAiXDAzNyI6ICIjXFx1cyJ9OworCitzY19DaGFyLnJlYWRhYmxlMmNo
YXIgPSB7CisgICAgIm51bGwiOiAiXDAwMCIsCisgICAgImJlbGwiOiAiXDAwNyIsCisgICAgImJh
Y2tzcGFjZSI6ICJcMDEwIiwKKyAgICAidGFiIjogIlwwMTEiLAorICAgICJuZXdsaW5lIjogIlww
MTIiLAorICAgICJwYWdlIjogIlwwMTQiLAorICAgICJyZXR1cm4iOiAiXDAxNSIsCisgICAgImVz
Y2FwZSI6ICJcMDMzIiwKKyAgICAic3BhY2UiOiAiXDA0MCIsCisgICAgImRlbGV0ZSI6ICJcMDAw
IiwKKyAgICAic29oIjogIlwwMDEiLAorICAgICJzdHgiOiAiXDAwMiIsCisgICAgImV0eCI6ICJc
MDAzIiwKKyAgICAiZW90IjogIlwwMDQiLAorICAgICJlbnEiOiAiXDAwNSIsCisgICAgImFjayI6
ICJcMDA2IiwKKyAgICAiYmVsIjogIlwwMDciLAorICAgICJicyI6ICJcMDEwIiwKKyAgICAiaHQi
OiAiXDAxMSIsCisgICAgIm5sIjogIlwwMTIiLAorICAgICJ2dCI6ICJcMDEzIiwKKyAgICAibnAi
OiAiXDAxNCIsCisgICAgImNyIjogIlwwMTUiLAorICAgICJzbyI6ICJcMDE2IiwKKyAgICAic2ki
OiAiXDAxNyIsCisgICAgImRsZSI6ICJcMDIwIiwKKyAgICAiZGMxIjogIlwwMjEiLAorICAgICJk
YzIiOiAiXDAyMiIsCisgICAgImRjMyI6ICJcMDIzIiwKKyAgICAiZGM0IjogIlwwMjQiLAorICAg
ICJuYWsiOiAiXDAyNSIsCisgICAgInN5biI6ICJcMDI2IiwKKyAgICAiZXRiIjogIlwwMjciLAor
ICAgICJjYW4iOiAiXDAzMCIsCisgICAgImVtIjogIlwwMzEiLAorICAgICJzdWIiOiAiXDAzMiIs
CisgICAgImVzYyI6ICJcMDMzIiwKKyAgICAiZnMiOiAiXDAzNCIsCisgICAgImdzIjogIlwwMzUi
LAorICAgICJycyI6ICJcMDM2IiwKKyAgICAidXMiOiAiXDAzNyIsCisgICAgInNwIjogIlwwNDAi
LAorICAgICJkZWwiOiAiXDE3NyJ9OworICAgIAorc2NfQ2hhci5wcm90b3R5cGUudG9TdHJpbmcg
PSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy52YWw7Cit9OworLy8gc2NfdG9EaXNwbGF5
U3RyaW5nID09IHRvU3RyaW5nCitzY19DaGFyLnByb3RvdHlwZS5zY190b1dyaXRlU3RyaW5nID0g
ZnVuY3Rpb24oKSB7CisgICAgdmFyIGVudHJ5ID0gc2NfQ2hhci5jaGFyMnJlYWRhYmxlW3RoaXMu
dmFsXTsKKyAgICBpZiAoZW50cnkpCisJcmV0dXJuIGVudHJ5OworICAgIGVsc2UKKwlyZXR1cm4g
IiNcXCIgKyB0aGlzLnZhbDsKK307CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAg
ICAgKHR5cGUgYm9vbCkKKyAgICAgICAgICAgKHBlZXBob2xlIChwb3N0Zml4ICJpbnN0YW5jZW9m
IHNjX0NoYXIiKSkpCisqLworZnVuY3Rpb24gc2NfaXNDaGFyKGMpIHsKKyAgICByZXR1cm4gKGMg
aW5zdGFuY2VvZiBzY19DaGFyKTsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0IGNoYXI9PykKKyAg
ICAgICAgICAgKHR5cGUgYm9vbCkKKyAgICAgICAgICAgKHBlZXBob2xlIChob2xlIDIgYzEgIi52
YWwgPT09ICIgYzIgIi52YWwiKSkpCisqLwordmFyIHNjX2lzQ2hhckVxdWFsID0gc2NfaXNDaGFy
U3RyaW5nRXF1YWw7CisvKioqIE1FVEEgKChleHBvcnQgY2hhcjw/KQorICAgICAgICAgICAodHlw
ZSBib29sKQorICAgICAgICAgICAocGVlcGhvbGUgKGhvbGUgMiBjMSAiLnZhbCA8ICIgYzIgIi52
YWwiKSkpCisqLwordmFyIHNjX2lzQ2hhckxlc3MgPSBzY19pc0NoYXJTdHJpbmdMZXNzOworLyoq
KiBNRVRBICgoZXhwb3J0IGNoYXI+PykKKyAgICAgICAgICAgKHR5cGUgYm9vbCkKKyAgICAgICAg
ICAgKHBlZXBob2xlIChob2xlIDIgYzEgIi52YWwgPiAiIGMyICIudmFsIikpKQorKi8KK3ZhciBz
Y19pc0NoYXJHcmVhdGVyID0gc2NfaXNDaGFyU3RyaW5nR3JlYXRlcjsKKy8qKiogTUVUQSAoKGV4
cG9ydCBjaGFyPD0/KQorICAgICAgICAgICAodHlwZSBib29sKQorICAgICAgICAgICAocGVlcGhv
bGUgKGhvbGUgMiBjMSAiLnZhbCA8PSAiIGMyICIudmFsIikpKQorKi8KK3ZhciBzY19pc0NoYXJM
ZXNzRXF1YWwgPSBzY19pc0NoYXJTdHJpbmdMZXNzRXF1YWw7CisvKioqIE1FVEEgKChleHBvcnQg
Y2hhcj49PykKKyAgICAgICAgICAgKHR5cGUgYm9vbCkKKyAgICAgICAgICAgKHBlZXBob2xlICho
b2xlIDIgYzEgIi52YWwgPj0gIiBjMiAiLnZhbCIpKSkKKyovCit2YXIgc2NfaXNDaGFyR3JlYXRl
ckVxdWFsID0gc2NfaXNDaGFyU3RyaW5nR3JlYXRlckVxdWFsOworLyoqKiBNRVRBICgoZXhwb3J0
IGNoYXItY2k9PykKKyAgICAgICAgICAgKHR5cGUgYm9vbCkKKyAgICAgICAgICAgKHBlZXBob2xl
IChob2xlIDIgYzEgIi52YWwudG9Mb3dlckNhc2UoKSA9PT0gIiBjMiAiLnZhbC50b0xvd2VyQ2Fz
ZSgpIikpKQorKi8KK3ZhciBzY19pc0NoYXJDSUVxdWFsID0gc2NfaXNDaGFyU3RyaW5nQ0lFcXVh
bDsKKy8qKiogTUVUQSAoKGV4cG9ydCBjaGFyLWNpPD8pCisgICAgICAgICAgICh0eXBlIGJvb2wp
CisgICAgICAgICAgIChwZWVwaG9sZSAoaG9sZSAyIGMxICIudmFsLnRvTG93ZXJDYXNlKCkgPCAi
IGMyICIudmFsLnRvTG93ZXJDYXNlKCkiKSkpCisqLwordmFyIHNjX2lzQ2hhckNJTGVzcyA9IHNj
X2lzQ2hhclN0cmluZ0NJTGVzczsKKy8qKiogTUVUQSAoKGV4cG9ydCBjaGFyLWNpPj8pCisgICAg
ICAgICAgICh0eXBlIGJvb2wpCisgICAgICAgICAgIChwZWVwaG9sZSAoaG9sZSAyIGMxICIudmFs
LnRvTG93ZXJDYXNlKCkgPiAiIGMyICIudmFsLnRvTG93ZXJDYXNlKCkiKSkpCisqLwordmFyIHNj
X2lzQ2hhckNJR3JlYXRlciA9IHNjX2lzQ2hhclN0cmluZ0NJR3JlYXRlcjsKKy8qKiogTUVUQSAo
KGV4cG9ydCBjaGFyLWNpPD0/KQorICAgICAgICAgICAodHlwZSBib29sKQorICAgICAgICAgICAo
cGVlcGhvbGUgKGhvbGUgMiBjMSAiLnZhbC50b0xvd2VyQ2FzZSgpIDw9ICIgYzIgIi52YWwudG9M
b3dlckNhc2UoKSIpKSkKKyovCit2YXIgc2NfaXNDaGFyQ0lMZXNzRXF1YWwgPSBzY19pc0NoYXJT
dHJpbmdDSUxlc3NFcXVhbDsKKy8qKiogTUVUQSAoKGV4cG9ydCBjaGFyLWNpPj0/KQorICAgICAg
ICAgICAodHlwZSBib29sKQorICAgICAgICAgICAocGVlcGhvbGUgKGhvbGUgMiBjMSAiLnZhbC50
b0xvd2VyQ2FzZSgpID49ICIgYzIgIi52YWwudG9Mb3dlckNhc2UoKSIpKSkKKyovCit2YXIgc2Nf
aXNDaGFyQ0lHcmVhdGVyRXF1YWwgPSBzY19pc0NoYXJTdHJpbmdDSUdyZWF0ZXJFcXVhbDsKKwor
dmFyIFNDX05VTUJFUl9DTEFTUyA9ICIwMTIzNDU2Nzg5IjsKK3ZhciBTQ19XSElURVNQQUNFX0NM
QVNTID0gJyBcclxuXHRcZic7Cit2YXIgU0NfTE9XRVJfQ0xBU1MgPSAnYWJjZGVmZ2hpamtsbW5v
cHFyc3R1dnd4eXonOwordmFyIFNDX1VQUEVSX0NMQVNTID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNU
VVZXWFlaJzsKKworZnVuY3Rpb24gc2NfaXNDaGFyT2ZDbGFzcyhjLCBjbCkgeyByZXR1cm4gKGNs
LmluZGV4T2YoYykgIT0gLTEpOyB9CisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAg
ICh0eXBlIGJvb2wpKQorKi8KK2Z1bmN0aW9uIHNjX2lzQ2hhckFscGhhYmV0aWMoYykKKyAgICB7
IHJldHVybiBzY19pc0NoYXJPZkNsYXNzKGMudmFsLCBTQ19MT1dFUl9DTEFTUykgfHwKKwkgIHNj
X2lzQ2hhck9mQ2xhc3MoYy52YWwsIFNDX1VQUEVSX0NMQVNTKTsgfQorLyoqKiBNRVRBICgoZXhw
b3J0ICN0KQorICAgICAgICAgICAodHlwZSBib29sKQorICAgICAgICAgICAocGVlcGhvbGUgKGhv
bGUgMSAiU0NfTlVNQkVSX0NMQVNTLmluZGV4T2YoIiBjICIudmFsKSAhPSAtMSIpKSkKKyovCitm
dW5jdGlvbiBzY19pc0NoYXJOdW1lcmljKGMpCisgICAgeyByZXR1cm4gc2NfaXNDaGFyT2ZDbGFz
cyhjLnZhbCwgU0NfTlVNQkVSX0NMQVNTKTsgfQorLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAg
ICAgICAgICAodHlwZSBib29sKSkKKyovCitmdW5jdGlvbiBzY19pc0NoYXJXaGl0ZXNwYWNlKGMp
IHsKKyAgICB2YXIgdG1wID0gYy52YWw7CisgICAgcmV0dXJuIHRtcCA9PT0gIiAiIHx8IHRtcCA9
PT0gIlxyIiB8fCB0bXAgPT09ICJcbiIgfHwgdG1wID09PSAiXHQiIHx8IHRtcCA9PT0gIlxmIjsK
K30KKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHR5cGUgYm9vbCkKKyAgICAg
ICAgICAgKHBlZXBob2xlIChob2xlIDEgIlNDX1VQUEVSX0NMQVNTLmluZGV4T2YoIiBjICIudmFs
KSAhPSAtMSIpKSkKKyovCitmdW5jdGlvbiBzY19pc0NoYXJVcHBlckNhc2UoYykKKyAgICB7IHJl
dHVybiBzY19pc0NoYXJPZkNsYXNzKGMudmFsLCBTQ19VUFBFUl9DTEFTUyk7IH0KKy8qKiogTUVU
QSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHR5cGUgYm9vbCkKKyAgICAgICAgICAgKHBlZXBo
b2xlIChob2xlIDEgIlNDX0xPV0VSX0NMQVNTLmluZGV4T2YoIiBjICIudmFsKSAhPSAtMSIpKSkK
KyovCitmdW5jdGlvbiBzY19pc0NoYXJMb3dlckNhc2UoYykKKyAgICB7IHJldHVybiBzY19pc0No
YXJPZkNsYXNzKGMudmFsLCBTQ19MT1dFUl9DTEFTUyk7IH0KKworLyoqKiBNRVRBICgoZXhwb3J0
ICN0KQorICAgICAgICAgICAocGVlcGhvbGUgKHBvc3RmaXggIi52YWwuY2hhckNvZGVBdCgwKSIp
KSkKKyovCitmdW5jdGlvbiBzY19jaGFyMmludGVnZXIoYykKKyAgICB7IHJldHVybiBjLnZhbC5j
aGFyQ29kZUF0KDApOyB9CisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAgIChwZWVw
aG9sZSAoaG9sZSAxICJuZXcgc2NfQ2hhcihTdHJpbmcuZnJvbUNoYXJDb2RlKCIgbiAiKSkiKSkp
CisqLworZnVuY3Rpb24gc2NfaW50ZWdlcjJjaGFyKG4pCisgICAgeyByZXR1cm4gbmV3IHNjX0No
YXIoU3RyaW5nLmZyb21DaGFyQ29kZShuKSk7IH0KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KQor
ICAgICAgICAgICAocGVlcGhvbGUgKGhvbGUgMSAibmV3IHNjX0NoYXIoIiBjICIudmFsLnRvVXBw
ZXJDYXNlKCkpIikpKQorKi8KK2Z1bmN0aW9uIHNjX2NoYXJVcGNhc2UoYykKKyAgICB7IHJldHVy
biBuZXcgc2NfQ2hhcihjLnZhbC50b1VwcGVyQ2FzZSgpKTsgfQorLyoqKiBNRVRBICgoZXhwb3J0
ICN0KQorICAgICAgICAgICAocGVlcGhvbGUgKGhvbGUgMSAibmV3IHNjX0NoYXIoIiBjICIudmFs
LnRvTG93ZXJDYXNlKCkpIikpKQorKi8KK2Z1bmN0aW9uIHNjX2NoYXJEb3duY2FzZShjKQorICAg
IHsgcmV0dXJuIG5ldyBzY19DaGFyKGMudmFsLnRvTG93ZXJDYXNlKCkpOyB9CisKK2Z1bmN0aW9u
IHNjX21ha2VKU1N0cmluZ09mTGVuZ3RoKGssIGMpIHsKKyAgICB2YXIgZmlsbDsKKyAgICBpZiAo
YyA9PT0gdW5kZWZpbmVkKQorCWZpbGwgPSAiICI7CisgICAgZWxzZQorCWZpbGwgPSBjOworICAg
IHZhciByZXMgPSAiIjsKKyAgICB2YXIgbGVuID0gMTsKKyAgICAvLyBldmVyeSByb3VuZCBkb3Vi
bGVzIHRoZSBzaXplIG9mIGZpbGwuCisgICAgd2hpbGUgKGsgPj0gbGVuKSB7CisJaWYgKGsgJiBs
ZW4pCisJICAgIHJlcyA9IHJlcy5jb25jYXQoZmlsbCk7CisJZmlsbCA9IGZpbGwuY29uY2F0KGZp
bGwpOworCWxlbiAqPSAyOworICAgIH0KKyAgICByZXR1cm4gcmVzOworfQorCitmdW5jdGlvbiBz
Y19tYWtlanNTdHJpbmcoaywgYykgeworICAgIHZhciBmaWxsOworICAgIGlmIChjKQorCWZpbGwg
PSBjLnZhbDsKKyAgICBlbHNlCisJZmlsbCA9ICIgIjsKKyAgICByZXR1cm4gc2NfbWFrZUpTU3Ry
aW5nT2ZMZW5ndGgoaywgZmlsbCk7Cit9CisKK2Z1bmN0aW9uIHNjX2pzc3RyaW5nMmxpc3Qocykg
eworICAgIHZhciByZXMgPSBudWxsOworICAgIGZvciAodmFyIGkgPSBzLmxlbmd0aCAtIDE7IGkg
Pj0gMDsgaS0tKQorCXJlcyA9IHNjX2NvbnMobmV3IHNjX0NoYXIocy5jaGFyQXQoaSkpLCByZXMp
OworICAgIHJldHVybiByZXM7Cit9CisKK2Z1bmN0aW9uIHNjX2xpc3QyanNzdHJpbmcobCkgewor
ICAgIHZhciBhID0gbmV3IEFycmF5KCk7CisgICAgd2hpbGUobCAhPT0gbnVsbCkgeworCWEucHVz
aChsLmNhci52YWwpOworCWwgPSBsLmNkcjsKKyAgICB9CisgICAgcmV0dXJuICIiLmNvbmNhdC5h
cHBseSgiIiwgYSk7Cit9CisKK3ZhciBzY19WZWN0b3IgPSBBcnJheTsKKworc2NfVmVjdG9yLnBy
b3RvdHlwZS5zY190b1dyaXRlT3JEaXNwbGF5U3RyaW5nID0gZnVuY3Rpb24od3JpdGVPckRpc3Bs
YXkpIHsKKyAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHJldHVybiAiIygpIjsKKworICAgIHZh
ciByZXMgPSAiIygiICsgd3JpdGVPckRpc3BsYXkodGhpc1swXSk7CisgICAgZm9yICh2YXIgaSA9
IDE7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKQorCXJlcyArPSAiICIgKyB3cml0ZU9yRGlzcGxheSh0
aGlzW2ldKTsKKyAgICByZXMgKz0gIikiOworICAgIHJldHVybiByZXM7Cit9Oworc2NfVmVjdG9y
LnByb3RvdHlwZS5zY190b0Rpc3BsYXlTdHJpbmcgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4g
dGhpcy5zY190b1dyaXRlT3JEaXNwbGF5U3RyaW5nKHNjX3RvRGlzcGxheVN0cmluZyk7Cit9Owor
c2NfVmVjdG9yLnByb3RvdHlwZS5zY190b1dyaXRlU3RyaW5nID0gZnVuY3Rpb24oKSB7CisgICAg
cmV0dXJuIHRoaXMuc2NfdG9Xcml0ZU9yRGlzcGxheVN0cmluZyhzY190b1dyaXRlU3RyaW5nKTsK
K307CisKKy8qKiogTUVUQSAoKGV4cG9ydCB2ZWN0b3I/IGFycmF5PykKKyAgICAgICAgICAgKHR5
cGUgYm9vbCkKKyAgICAgICAgICAgKHBlZXBob2xlIChwb3N0Zml4ICIgaW5zdGFuY2VvZiBzY19W
ZWN0b3IiKSkpCisqLworZnVuY3Rpb24gc2NfaXNWZWN0b3IodikgeworICAgIHJldHVybiAodiBp
bnN0YW5jZW9mIHNjX1ZlY3Rvcik7Cit9CisKKy8vIG9ubHkgYXBwbGllcyB0byB2ZWN0b3JzCitm
dW5jdGlvbiBzY19pc1ZlY3RvckVxdWFsKHYxLCB2MiwgY29tcCkgeworICAgIGlmICh2MS5sZW5n
dGggIT09IHYyLmxlbmd0aCkgcmV0dXJuIGZhbHNlOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
djEubGVuZ3RoOyBpKyspCisJaWYgKCFjb21wKHYxW2ldLCB2MltpXSkpIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0IG1ha2UtdmVjdG9yIG1h
a2UtYXJyYXkpKSAqLworZnVuY3Rpb24gc2NfbWFrZVZlY3RvcihzaXplLCBmaWxsKSB7CisgICAg
dmFyIGEgPSBuZXcgc2NfVmVjdG9yKHNpemUpOworICAgIGlmIChmaWxsICE9PSB1bmRlZmluZWQp
CisJc2NfdmVjdG9yRmlsbEJhbmcoYSwgZmlsbCk7CisgICAgcmV0dXJuIGE7Cit9CisKKy8qKiog
TUVUQSAoKGV4cG9ydCB2ZWN0b3IgYXJyYXkpCisgICAgICAgICAgIChwZWVwaG9sZSAodmVjdG9y
KSkpCisqLworZnVuY3Rpb24gc2NfdmVjdG9yKCkgeworICAgIHZhciBhID0gbmV3IHNjX1ZlY3Rv
cigpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKQorCWEu
cHVzaChhcmd1bWVudHNbaV0pOworICAgIHJldHVybiBhOworfQorCisvKioqIE1FVEEgKChleHBv
cnQgdmVjdG9yLWxlbmd0aCBhcnJheS1sZW5ndGgpCisgICAgICAgICAgIChwZWVwaG9sZSAocG9z
dGZpeCAiLmxlbmd0aCIpKSkKKyovCitmdW5jdGlvbiBzY192ZWN0b3JMZW5ndGgodikgeworICAg
IHJldHVybiB2Lmxlbmd0aDsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0IHZlY3Rvci1yZWYgYXJy
YXktcmVmKQorICAgICAgICAgICAocGVlcGhvbGUgKGhvbGUgMiB2ICJbIiBwb3MgIl0iKSkpCisq
LworZnVuY3Rpb24gc2NfdmVjdG9yUmVmKHYsIHBvcykgeworICAgIHJldHVybiB2W3Bvc107Cit9
CisKKy8qKiogTUVUQSAoKGV4cG9ydCB2ZWN0b3Itc2V0ISBhcnJheS1zZXQhKQorICAgICAgICAg
ICAocGVlcGhvbGUgKGhvbGUgMyB2ICJbIiBwb3MgIl0gPSAiIHZhbCkpKQorKi8KK2Z1bmN0aW9u
IHNjX3ZlY3RvclNldEJhbmcodiwgcG9zLCB2YWwpIHsKKyAgICB2W3Bvc10gPSB2YWw7Cit9CisK
Ky8qKiogTUVUQSAoKGV4cG9ydCB2ZWN0b3ItPmxpc3QgYXJyYXktPmxpc3QpKSAqLworZnVuY3Rp
b24gc2NfdmVjdG9yMmxpc3QoYSkgeworICAgIHZhciByZXMgPSBudWxsOworICAgIGZvciAodmFy
IGkgPSBhLmxlbmd0aC0xOyBpID49IDA7IGktLSkKKwlyZXMgPSBzY19jb25zKGFbaV0sIHJlcyk7
CisgICAgcmV0dXJuIHJlczsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0IGxpc3QtPnZlY3RvciBs
aXN0LT5hcnJheSkpICovCitmdW5jdGlvbiBzY19saXN0MnZlY3RvcihsKSB7CisgICAgdmFyIGEg
PSBuZXcgc2NfVmVjdG9yKCk7CisgICAgd2hpbGUobCAhPT0gbnVsbCkgeworCWEucHVzaChsLmNh
cik7CisJbCA9IGwuY2RyOworICAgIH0KKyAgICByZXR1cm4gYTsKK30KKworLyoqKiBNRVRBICgo
ZXhwb3J0IHZlY3Rvci1maWxsISBhcnJheS1maWxsISkpICovCitmdW5jdGlvbiBzY192ZWN0b3JG
aWxsQmFuZyhhLCBmaWxsKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsr
KQorCWFbaV0gPSBmaWxsOworfQorCisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCitmdW5j
dGlvbiBzY19jb3B5VmVjdG9yKGEsIGxlbikgeworICAgIGlmIChsZW4gPD0gYS5sZW5ndGgpCisJ
cmV0dXJuIGEuc2xpY2UoMCwgbGVuKTsKKyAgICBlbHNlIHsKKwl2YXIgdG1wID0gYS5jb25jYXQo
KTsKKwl0bXAubGVuZ3RoID0gbGVuOworCXJldHVybiB0bXA7CisgICAgfQorfQorCisvKioqIE1F
VEEgKChleHBvcnQgI3QpCisgICAgICAgICAgIChwZWVwaG9sZSAoaG9sZSAzIGEgIi5zbGljZSgi
IHN0YXJ0ICIsIiBlbmQgIikiKSkpCisqLworZnVuY3Rpb24gc2NfdmVjdG9yQ29weShhLCBzdGFy
dCwgZW5kKSB7CisgICAgcmV0dXJuIGEuc2xpY2Uoc3RhcnQsIGVuZCk7Cit9CisKKy8qKiogTUVU
QSAoKGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBzY192ZWN0b3JDb3B5QmFuZyh0YXJnZXQsIHRz
dGFydCwgc291cmNlLCBzc3RhcnQsIHNlbmQpIHsKKyAgICBpZiAoIXNzdGFydCkgc3N0YXJ0ID0g
MDsKKyAgICBpZiAoIXNlbmQpIHNlbmQgPSBzb3VyY2UubGVuZ3RoOworCisgICAgLy8gaWYgdGFy
Z2V0ID09IHNvdXJjZSB3ZSBkb24ndCB3YW50IHRvIG92ZXJ3cml0ZSBub3QgeWV0IGNvcGllZCBl
bGVtZW50cy4KKyAgICBpZiAodHN0YXJ0IDw9IHNzdGFydCkgeworCWZvciAodmFyIGkgPSB0c3Rh
cnQsIGogPSBzc3RhcnQ7IGogPCBzZW5kOyBpKyssIGorKykgeworCSAgICB0YXJnZXRbaV0gPSBz
b3VyY2Vbal07CisJfQorICAgIH0gZWxzZSB7CisJdmFyIGRpZmYgPSBzZW5kIC0gc3N0YXJ0Owor
CWZvciAodmFyIGkgPSB0c3RhcnQgKyBkaWZmIC0gMSwgaiA9IHNlbmQgLSAxOworCSAgICAgaiA+
PSBzc3RhcnQ7CisJICAgICBpLS0sIGotLSkgeworCSAgICB0YXJnZXRbaV0gPSBzb3VyY2Vbal07
CisJfQorICAgIH0KKyAgICByZXR1cm4gdGFyZ2V0OworfQorCisvKioqIE1FVEEgKChleHBvcnQg
I3QpCisgICAgICAgICAgICh0eXBlIGJvb2wpCisgICAgICAgICAgIChwZWVwaG9sZSAoaG9sZSAx
ICJ0eXBlb2YgIiBvICIgPT09ICdmdW5jdGlvbiciKSkpCisqLworZnVuY3Rpb24gc2NfaXNQcm9j
ZWR1cmUobykgeworICAgIHJldHVybiAodHlwZW9mIG8gPT09ICJmdW5jdGlvbiIpOworfQorCisv
KioqIE1FVEEgKChleHBvcnQgI3QpKSAqLworZnVuY3Rpb24gc2NfYXBwbHkocHJvYykgeworICAg
IHZhciBhcmdzID0gbmV3IEFycmF5KCk7CisgICAgLy8gZmlyc3QgcGFydCBvZiBhcmd1bWVudHMg
YXJlIG5vdCBpbiBsaXN0LWZvcm0uCisgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMu
bGVuZ3RoIC0gMTsgaSsrKQorCWFyZ3MucHVzaChhcmd1bWVudHNbaV0pOworICAgIHZhciBsID0g
YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTsKKyAgICB3aGlsZSAobCAhPT0gbnVsbCkg
eworCWFyZ3MucHVzaChsLmNhcik7CisJbCA9IGwuY2RyOworICAgIH0KKyAgICByZXR1cm4gcHJv
Yy5hcHBseShudWxsLCBhcmdzKTsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1
bmN0aW9uIHNjX21hcChwcm9jLCBsMSkgeworICAgIGlmIChsMSA9PT0gdW5kZWZpbmVkKQorCXJl
dHVybiBudWxsOworICAgIC8vIGVsc2UKKyAgICB2YXIgbmJBcHBseUFyZ3MgPSBhcmd1bWVudHMu
bGVuZ3RoIC0gMTsKKyAgICB2YXIgYXBwbHlBcmdzID0gbmV3IEFycmF5KG5iQXBwbHlBcmdzKTsK
KyAgICB2YXIgcmV2cmVzID0gbnVsbDsKKyAgICB3aGlsZSAobDEgIT09IG51bGwpIHsKKwlmb3Ig
KHZhciBpID0gMDsgaSA8IG5iQXBwbHlBcmdzOyBpKyspIHsKKwkgICAgYXBwbHlBcmdzW2ldID0g
YXJndW1lbnRzW2kgKyAxXS5jYXI7CisJICAgIGFyZ3VtZW50c1tpICsgMV0gPSBhcmd1bWVudHNb
aSArIDFdLmNkcjsKKwl9CisJcmV2cmVzID0gc2NfY29ucyhwcm9jLmFwcGx5KG51bGwsIGFwcGx5
QXJncyksIHJldnJlcyk7CisgICAgfQorICAgIHJldHVybiBzY19yZXZlcnNlQXBwZW5kQmFuZyhy
ZXZyZXMsIG51bGwpOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLworZnVuY3Rpb24g
c2NfbWFwQmFuZyhwcm9jLCBsMSkgeworICAgIGlmIChsMSA9PT0gdW5kZWZpbmVkKQorCXJldHVy
biBudWxsOworICAgIC8vIGVsc2UKKyAgICB2YXIgbDFfb3JpZyA9IGwxOworICAgIHZhciBuYkFw
cGx5QXJncyA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOworICAgIHZhciBhcHBseUFyZ3MgPSBuZXcg
QXJyYXkobmJBcHBseUFyZ3MpOworICAgIHdoaWxlIChsMSAhPT0gbnVsbCkgeworCXZhciB0bXAg
PSBsMTsKKwlmb3IgKHZhciBpID0gMDsgaSA8IG5iQXBwbHlBcmdzOyBpKyspIHsKKwkgICAgYXBw
bHlBcmdzW2ldID0gYXJndW1lbnRzW2kgKyAxXS5jYXI7CisJICAgIGFyZ3VtZW50c1tpICsgMV0g
PSBhcmd1bWVudHNbaSArIDFdLmNkcjsKKwl9CisJdG1wLmNhciA9IHByb2MuYXBwbHkobnVsbCwg
YXBwbHlBcmdzKTsKKyAgICB9CisgICAgcmV0dXJuIGwxX29yaWc7Cit9CisgICAgIAorLyoqKiBN
RVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9uIHNjX2ZvckVhY2gocHJvYywgbDEpIHsKKyAg
ICBpZiAobDEgPT09IHVuZGVmaW5lZCkKKwlyZXR1cm4gdW5kZWZpbmVkOworICAgIC8vIGVsc2UK
KyAgICB2YXIgbmJBcHBseUFyZ3MgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsKKyAgICB2YXIgYXBw
bHlBcmdzID0gbmV3IEFycmF5KG5iQXBwbHlBcmdzKTsKKyAgICB3aGlsZSAobDEgIT09IG51bGwp
IHsKKwlmb3IgKHZhciBpID0gMDsgaSA8IG5iQXBwbHlBcmdzOyBpKyspIHsKKwkgICAgYXBwbHlB
cmdzW2ldID0gYXJndW1lbnRzW2kgKyAxXS5jYXI7CisJICAgIGFyZ3VtZW50c1tpICsgMV0gPSBh
cmd1bWVudHNbaSArIDFdLmNkcjsKKwl9CisJcHJvYy5hcHBseShudWxsLCBhcHBseUFyZ3MpOwor
ICAgIH0KKyAgICAvLyBhZGQgcmV0dXJuIHNvIEZGIGRvZXMgbm90IGNvbXBsYWluLgorICAgIHJl
dHVybiB1bmRlZmluZWQ7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCitmdW5jdGlv
biBzY19maWx0ZXIocHJvYywgbDEpIHsKKyAgICB2YXIgZHVtbXkgPSB7IGNkciA6IG51bGwgfTsK
KyAgICB2YXIgdGFpbCA9IGR1bW15OworICAgIHdoaWxlIChsMSAhPT0gbnVsbCkgeworCWlmIChw
cm9jKGwxLmNhcikgIT09IGZhbHNlKSB7CisJICAgIHRhaWwuY2RyID0gc2NfY29ucyhsMS5jYXIs
IG51bGwpOworCSAgICB0YWlsID0gdGFpbC5jZHI7CisJfQorCWwxID0gbDEuY2RyOworICAgIH0K
KyAgICByZXR1cm4gZHVtbXkuY2RyOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLwor
ZnVuY3Rpb24gc2NfZmlsdGVyQmFuZyhwcm9jLCBsMSkgeworICAgIHZhciBoZWFkID0gc2NfY29u
cygiZHVtbXkiLCBsMSk7CisgICAgdmFyIGl0ID0gaGVhZDsKKyAgICB2YXIgbmV4dCA9IGwxOwor
ICAgIHdoaWxlIChuZXh0ICE9PSBudWxsKSB7CisgICAgICAgIGlmIChwcm9jKG5leHQuY2FyKSAh
PT0gZmFsc2UpIHsKKwkgICAgaXQuY2RyID0gbmV4dAorCSAgICBpdCA9IG5leHQ7CisJfQorCW5l
eHQgPSBuZXh0LmNkcjsKKyAgICB9CisgICAgaXQuY2RyID0gbnVsbDsKKyAgICByZXR1cm4gaGVh
ZC5jZHI7Cit9CisKK2Z1bmN0aW9uIHNjX2ZpbHRlck1hcDEocHJvYywgbDEpIHsKKyAgICB2YXIg
cmV2cmVzID0gbnVsbDsKKyAgICB3aGlsZSAobDEgIT09IG51bGwpIHsKKyAgICAgICAgdmFyIHRt
cCA9IHByb2MobDEuY2FyKQorICAgICAgICBpZiAodG1wICE9PSBmYWxzZSkgcmV2cmVzID0gc2Nf
Y29ucyh0bXAsIHJldnJlcyk7CisgICAgICAgIGwxID0gbDEuY2RyOworICAgIH0KKyAgICByZXR1
cm4gc2NfcmV2ZXJzZUFwcGVuZEJhbmcocmV2cmVzLCBudWxsKTsKK30KK2Z1bmN0aW9uIHNjX2Zp
bHRlck1hcDIocHJvYywgbDEsIGwyKSB7CisgICAgdmFyIHJldnJlcyA9IG51bGw7CisgICAgd2hp
bGUgKGwxICE9PSBudWxsKSB7CisgICAgICAgIHZhciB0bXAgPSBwcm9jKGwxLmNhciwgbDIuY2Fy
KTsKKyAgICAgICAgaWYodG1wICE9PSBmYWxzZSkgcmV2cmVzID0gc2NfY29ucyh0bXAsIHJldnJl
cyk7CisJbDEgPSBsMS5jZHI7CisJbDIgPSBsMi5jZHIKKyAgICB9CisgICAgcmV0dXJuIHNjX3Jl
dmVyc2VBcHBlbmRCYW5nKHJldnJlcywgbnVsbCk7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAj
dCkpICovCitmdW5jdGlvbiBzY19maWx0ZXJNYXAocHJvYywgbDEsIGwyLCBsMykgeworICAgIGlm
IChsMiA9PT0gdW5kZWZpbmVkKQorCXJldHVybiBzY19maWx0ZXJNYXAxKHByb2MsIGwxKTsKKyAg
ICBlbHNlIGlmIChsMyA9PT0gdW5kZWZpbmVkKQorCXJldHVybiBzY19maWx0ZXJNYXAyKHByb2Ms
IGwxLCBsMik7CisgICAgLy8gZWxzZQorICAgIHZhciBuYkFwcGx5QXJncyA9IGFyZ3VtZW50cy5s
ZW5ndGggLSAxOworICAgIHZhciBhcHBseUFyZ3MgPSBuZXcgQXJyYXkobmJBcHBseUFyZ3MpOwor
ICAgIHZhciByZXZyZXMgPSBudWxsOworICAgIHdoaWxlIChsMSAhPT0gbnVsbCkgeworCWZvciAo
dmFyIGkgPSAwOyBpIDwgbmJBcHBseUFyZ3M7IGkrKykgeworCSAgICBhcHBseUFyZ3NbaV0gPSBh
cmd1bWVudHNbaSArIDFdLmNhcjsKKwkgICAgYXJndW1lbnRzW2kgKyAxXSA9IGFyZ3VtZW50c1tp
ICsgMV0uY2RyOworCX0KKwl2YXIgdG1wID0gcHJvYy5hcHBseShudWxsLCBhcHBseUFyZ3MpOwor
CWlmKHRtcCAhPT0gZmFsc2UpIHJldnJlcyA9IHNjX2NvbnModG1wLCByZXZyZXMpOworICAgIH0K
KyAgICByZXR1cm4gc2NfcmV2ZXJzZUFwcGVuZEJhbmcocmV2cmVzLCBudWxsKTsKK30KKworLyoq
KiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9uIHNjX2FueShwcm9jLCBsKSB7CisgICAg
dmFyIHJldnJlcyA9IG51bGw7CisgICAgd2hpbGUgKGwgIT09IG51bGwpIHsKKyAgICAgICAgdmFy
IHRtcCA9IHByb2MobC5jYXIpOworICAgICAgICBpZih0bXAgIT09IGZhbHNlKSByZXR1cm4gdG1w
OworCWwgPSBsLmNkcjsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvKioqIE1FVEEg
KChleHBvcnQgYW55PykKKyAgICAgICAgICAgKHBlZXBob2xlIChob2xlIDIgInNjX2FueSgiIHBy
b2MgIiwiIGwgIikgIT09IGZhbHNlIikpKQorKi8KK2Z1bmN0aW9uIHNjX2FueVByZWQocHJvYywg
bCkgeworICAgIHJldHVybiBzY19hbnkocHJvYywgbCkhPT0gZmFsc2U7Cit9CisKKy8qKiogTUVU
QSAoKGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBzY19ldmVyeShwcm9jLCBsKSB7CisgICAgdmFy
IHJldnJlcyA9IG51bGw7CisgICAgdmFyIHRtcCA9IHRydWU7CisgICAgd2hpbGUgKGwgIT09IG51
bGwpIHsKKyAgICAgICAgdG1wID0gcHJvYyhsLmNhcik7CisgICAgICAgIGlmICh0bXAgPT09IGZh
bHNlKSByZXR1cm4gZmFsc2U7CisJbCA9IGwuY2RyOworICAgIH0KKyAgICByZXR1cm4gdG1wOwor
fQorCisvKioqIE1FVEEgKChleHBvcnQgZXZlcnk/KQorICAgICAgICAgICAocGVlcGhvbGUgKGhv
bGUgMiAic2NfZXZlcnkoIiBwcm9jICIsIiBsICIpICE9PSBmYWxzZSIpKSkKKyovCitmdW5jdGlv
biBzY19ldmVyeVByZWQocHJvYywgbCkgeworICAgIHZhciB0bXAgPSBzY19ldmVyeShwcm9jLCBs
KTsKKyAgICBpZiAodG1wICE9PSBmYWxzZSkgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAgIChwZWVwaG9sZSAocG9z
dGZpeCAiKCkiKSkpCisqLworZnVuY3Rpb24gc2NfZm9yY2UobykgeworICAgIHJldHVybiBvKCk7
Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBzY19tYWtlUHJvbWlz
ZShwcm9jKSB7CisgICAgdmFyIGlzUmVzdWx0UmVhZHkgPSBmYWxzZTsKKyAgICB2YXIgcmVzdWx0
ID0gdW5kZWZpbmVkOworICAgIHJldHVybiBmdW5jdGlvbigpIHsKKwlpZiAoIWlzUmVzdWx0UmVh
ZHkpIHsKKwkgICAgdmFyIHRtcCA9IHByb2MoKTsKKwkgICAgaWYgKCFpc1Jlc3VsdFJlYWR5KSB7
CisJCWlzUmVzdWx0UmVhZHkgPSB0cnVlOworCQlyZXN1bHQgPSB0bXA7CisJICAgIH0KKwl9CisJ
cmV0dXJuIHJlc3VsdDsKKyAgICB9OworfQorCitmdW5jdGlvbiBzY19WYWx1ZXModmFsdWVzKSB7
CisgICAgdGhpcy52YWx1ZXMgPSB2YWx1ZXM7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkK
KyAgICAgICAgICAgKHBlZXBob2xlICh2YWx1ZXMpKSkKKyovCitmdW5jdGlvbiBzY192YWx1ZXMo
KSB7CisgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpCisJcmV0dXJuIGFyZ3VtZW50c1sw
XTsKKyAgICBlbHNlCisJcmV0dXJuIG5ldyBzY19WYWx1ZXMoYXJndW1lbnRzKTsKK30KKworLyoq
KiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9uIHNjX2NhbGxXaXRoVmFsdWVzKHByb2R1
Y2VyLCBjb25zdW1lcikgeworICAgIHZhciBwcm9kdWNlZCA9IHByb2R1Y2VyKCk7CisgICAgaWYg
KHByb2R1Y2VkIGluc3RhbmNlb2Ygc2NfVmFsdWVzKQorCXJldHVybiBjb25zdW1lci5hcHBseShu
dWxsLCBwcm9kdWNlZC52YWx1ZXMpOworICAgIGVsc2UKKwlyZXR1cm4gY29uc3VtZXIocHJvZHVj
ZWQpOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLworZnVuY3Rpb24gc2NfZHluYW1p
Y1dpbmQoYmVmb3JlLCB0aHVuaywgYWZ0ZXIpIHsKKyAgICBiZWZvcmUoKTsKKyAgICB0cnkgewor
CXZhciByZXMgPSB0aHVuaygpOworCXJldHVybiByZXM7CisgICAgfSBmaW5hbGx5IHsKKwlhZnRl
cigpOworICAgIH0KK30KKworCisvLyBUT0RPOiBldmFsL3NjaGVtZS1yZXBvcnQtZW52aXJvbm1l
bnQvbnVsbC1lbnZpcm9ubWVudC9pbnRlcmFjdGlvbi1lbnZpcm9ubWVudAorCisvLyBMSU1JVEFU
SU9OOiAnbG9hZCcgZG9lc24ndCBleGlzdCB3aXRob3V0IGZpbGVzLgorLy8gTElNSVRBVElPTjog
dHJhbnNjcmlwdC1vbi90cmFuc2NyaXB0LW9mZiBkb2Vzbid0IGV4aXN0IHdpdGhvdXQgZmlsZXMu
CisKKworZnVuY3Rpb24gc2NfU3RydWN0KG5hbWUpIHsKKyAgICB0aGlzLm5hbWUgPSBuYW1lOwor
fQorc2NfU3RydWN0LnByb3RvdHlwZS5zY190b0Rpc3BsYXlTdHJpbmcgPSBmdW5jdGlvbigpIHsK
KyAgICByZXR1cm4gIiM8c3RydWN0IiArIHNjX2hhc2godGhpcykgKyAiPiI7Cit9Oworc2NfU3Ry
dWN0LnByb3RvdHlwZS5zY190b1dyaXRlU3RyaW5nID0gc2NfU3RydWN0LnByb3RvdHlwZS5zY190
b0Rpc3BsYXlTdHJpbmc7CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBl
ZXBob2xlIChob2xlIDEgIm5ldyBzY19TdHJ1Y3QoIiBuYW1lICIpIikpKQorKi8KK2Z1bmN0aW9u
IHNjX21ha2VTdHJ1Y3QobmFtZSkgeworICAgIHJldHVybiBuZXcgc2NfU3RydWN0KG5hbWUpOwor
fQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAgICh0eXBlIGJvb2wpCisgICAg
ICAgICAgIChwZWVwaG9sZSAocG9zdGZpeCAiIGluc3RhbmNlb2Ygc2NfU3RydWN0IikpKQorKi8K
K2Z1bmN0aW9uIHNjX2lzU3RydWN0KG8pIHsKKyAgICByZXR1cm4gKG8gaW5zdGFuY2VvZiBzY19T
dHJ1Y3QpOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAgICh0eXBlIGJv
b2wpCisgICAgICAgICAgIChwZWVwaG9sZSAoaG9sZSAyICIoIiAxICIgaW5zdGFuY2VvZiBzY19T
dHJ1Y3QpICYmICggIiAxICIubmFtZSA9PT0gIiAwICIpIikpKQorKi8KK2Z1bmN0aW9uIHNjX2lz
U3RydWN0TmFtZWQobmFtZSwgcykgeworICAgIHJldHVybiAoKHMgaW5zdGFuY2VvZiBzY19TdHJ1
Y3QpICYmIChzLm5hbWUgPT09IG5hbWUpKTsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0IHN0cnVj
dC1maWVsZCkKKyAgICAgICAgICAgKHBlZXBob2xlIChob2xlIDMgMCAiWyIgMiAiXSIpKSkKKyov
CitmdW5jdGlvbiBzY19nZXRTdHJ1Y3RGaWVsZChzLCBuYW1lLCBmaWVsZCkgeworICAgIHJldHVy
biBzW2ZpZWxkXTsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0IHN0cnVjdC1maWVsZC1zZXQhKQor
ICAgICAgICAgICAocGVlcGhvbGUgKGhvbGUgNCAwICJbIiAyICJdID0gIiAzKSkpCisqLworZnVu
Y3Rpb24gc2Nfc2V0U3RydWN0RmllbGRCYW5nKHMsIG5hbWUsIGZpZWxkLCB2YWwpIHsKKyAgICBz
W2ZpZWxkXSA9IHZhbDsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAo
cGVlcGhvbGUgKHByZWZpeCAifiIpKSkKKyovCitmdW5jdGlvbiBzY19iaXROb3QoeCkgeworICAg
IHJldHVybiB+eDsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAocGVl
cGhvbGUgKGluZml4IDIgMiAiJiIpKSkKKyovCitmdW5jdGlvbiBzY19iaXRBbmQoeCwgeSkgewor
ICAgIHJldHVybiB4ICYgeTsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAg
ICAocGVlcGhvbGUgKGluZml4IDIgMiAifCIpKSkKKyovCitmdW5jdGlvbiBzY19iaXRPcih4LCB5
KSB7CisgICAgcmV0dXJuIHggfCB5OworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAg
ICAgICAgIChwZWVwaG9sZSAoaW5maXggMiAyICJeIikpKQorKi8KK2Z1bmN0aW9uIHNjX2JpdFhv
cih4LCB5KSB7CisgICAgcmV0dXJuIHggXiB5OworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3Qp
CisgICAgICAgICAgIChwZWVwaG9sZSAoaW5maXggMiAyICI8PCIpKSkKKyovCitmdW5jdGlvbiBz
Y19iaXRMc2goeCwgeSkgeworICAgIHJldHVybiB4IDw8IHk7Cit9CisKKy8qKiogTUVUQSAoKGV4
cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBob2xlIChpbmZpeCAyIDIgIj4+IikpKQorKi8KK2Z1
bmN0aW9uIHNjX2JpdFJzaCh4LCB5KSB7CisgICAgcmV0dXJuIHggPj4geTsKK30KKworLyoqKiBN
RVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAocGVlcGhvbGUgKGluZml4IDIgMiAiPj4+Iikp
KQorKi8KK2Z1bmN0aW9uIHNjX2JpdFVyc2goeCwgeSkgeworICAgIHJldHVybiB4ID4+PiB5Owor
fQorCisvKioqIE1FVEEgKChleHBvcnQganMtZmllbGQganMtcHJvcGVydHkpCisgICAgICAgICAg
IChwZWVwaG9sZSAoaG9sZSAyIG8gIlsiIGZpZWxkICJdIikpKQorKi8KK2Z1bmN0aW9uIHNjX2pz
RmllbGQobywgZmllbGQpIHsKKyAgICByZXR1cm4gb1tmaWVsZF07Cit9CisKKy8qKiogTUVUQSAo
KGV4cG9ydCBqcy1maWVsZC1zZXQhIGpzLXByb3BlcnR5LXNldCEpCisgICAgICAgICAgIChwZWVw
aG9sZSAoaG9sZSAzIG8gIlsiIGZpZWxkICJdID0gIiB2YWwpKSkKKyovCitmdW5jdGlvbiBzY19z
ZXRKc0ZpZWxkQmFuZyhvLCBmaWVsZCwgdmFsKSB7CisgICAgcmV0dXJuIG9bZmllbGRdID0gdmFs
OworfQorCisvKioqIE1FVEEgKChleHBvcnQganMtZmllbGQtZGVsZXRlISBqcy1wcm9wZXJ0eS1k
ZWxldGUhKQorICAgICAgICAgICAocGVlcGhvbGUgKGhvbGUgMiAiZGVsZXRlIiBvICJbIiBmaWVs
ZCAiXSIpKSkKKyovCitmdW5jdGlvbiBzY19kZWxldGVKc0ZpZWxkQmFuZyhvLCBmaWVsZCkgewor
ICAgIGRlbGV0ZSBvW2ZpZWxkXTsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAg
ICAgICAocGVlcGhvbGUgKGpzQ2FsbCkpKQorKi8KK2Z1bmN0aW9uIHNjX2pzQ2FsbChvLCBmdW4p
IHsKKyAgICB2YXIgYXJncyA9IG5ldyBBcnJheSgpOworICAgIGZvciAodmFyIGkgPSAyOyBpIDwg
YXJndW1lbnRzLmxlbmd0aDsgaSsrKQorCWFyZ3NbaS0yXSA9IGFyZ3VtZW50c1tpXTsKKyAgICBy
ZXR1cm4gZnVuLmFwcGx5KG8sIGFyZ3MpOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpCisg
ICAgICAgICAgIChwZWVwaG9sZSAoanNNZXRob2RDYWxsKSkpCisqLworZnVuY3Rpb24gc2NfanNN
ZXRob2RDYWxsKG8sIGZpZWxkKSB7CisgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoKTsKKyAgICBm
b3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykKKwlhcmdzW2ktMl0gPSBh
cmd1bWVudHNbaV07CisgICAgcmV0dXJuIG9bZmllbGRdLmFwcGx5KG8sIGFyZ3MpOworfQorCisv
KioqIE1FVEEgKChleHBvcnQgbmV3IGpzLW5ldykKKyAgICAgICAgICAgKHBlZXBob2xlIChqc05l
dykpKQorKi8KK2Z1bmN0aW9uIHNjX2pzTmV3KGMpIHsKKyAgICB2YXIgZXZhbFN0ciA9ICJuZXcg
YygiOworICAgIGV2YWxTdHIgKz1hcmd1bWVudHMubGVuZ3RoID4gMT8gImFyZ3VtZW50c1sxXSI6
ICIiOworICAgIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKQorCWV2
YWxTdHIgKz0gIiwgYXJndW1lbnRzWyIgKyBpICsgIl0iOworICAgIGV2YWxTdHIgKz0iKSI7Cisg
ICAgcmV0dXJuIGV2YWwoZXZhbFN0cik7Cit9ICAgIAorCisvLyA9PT09PT09PT09PT09PT09PT09
PT09PT0gUmVnRXhwID09PT09PT09PT09PT09PT09PT09CisvKioqIE1FVEEgKChleHBvcnQgI3Qp
KSAqLworZnVuY3Rpb24gc2NfcHJlZ2V4cChyZSkgeworICAgIHJldHVybiBuZXcgUmVnRXhwKHNj
X3N0cmluZzJqc3N0cmluZyhyZSkpOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLwor
ZnVuY3Rpb24gc2NfcHJlZ2V4cE1hdGNoKHJlLCBzKSB7CisgICAgdmFyIHJlZyA9IChyZSBpbnN0
YW5jZW9mIFJlZ0V4cCkgPyByZSA6IHNjX3ByZWdleHAocmUpOworICAgIHZhciB0bXAgPSByZWcu
ZXhlYyhzY19zdHJpbmcyanNzdHJpbmcocykpOworICAgIAorICAgIGlmICh0bXAgPT0gbnVsbCkg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIHZhciByZXMgPSBudWxsOworICAgIGZvciAodmFyIGkg
PSB0bXAubGVuZ3RoLTE7IGkgPj0gMDsgaS0tKSB7CisJaWYgKHRtcFtpXSAhPT0gbnVsbCkgewor
CSAgICByZXMgPSBzY19jb25zKHNjX2pzc3RyaW5nMnN0cmluZyh0bXBbaV0pLCByZXMpOworCX0g
ZWxzZSB7CisJICAgIHJlcyA9IHNjX2NvbnMoZmFsc2UsIHJlcyk7CisJfQorICAgIH0KKyAgICBy
ZXR1cm4gcmVzOworfQorICAgCisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLworZnVuY3Rpb24g
c2NfcHJlZ2V4cFJlcGxhY2UocmUsIHMxLCBzMikgeworICAgdmFyIHJlZzsKKyAgIHZhciBqc3Mx
ID0gc2Nfc3RyaW5nMmpzc3RyaW5nKHMxKTsKKyAgIHZhciBqc3MyID0gc2Nfc3RyaW5nMmpzc3Ry
aW5nKHMyKTsKKworICAgaWYgKHJlIGluc3RhbmNlb2YgUmVnRXhwKSB7CisgICAgICAgaWYgKHJl
Lmdsb2JhbCkKKwkgICByZWcgPSByZTsKKyAgICAgICBlbHNlCisJICAgcmVnID0gbmV3IFJlZ0V4
cChyZS5zb3VyY2UpOworICAgfSBlbHNlIHsKKyAgICAgICByZWcgPSBuZXcgUmVnRXhwKHNjX3N0
cmluZzJqc3N0cmluZyhyZSkpOworICAgfQorCisgICByZXR1cm4ganNzMS5yZXBsYWNlKHJlZywg
anNzMik7Cit9CisgICAKKy8qKiogTUVUQSAoKGV4cG9ydCBwcmVnZXhwLXJlcGxhY2UqKSkgKi8K
K2Z1bmN0aW9uIHNjX3ByZWdleHBSZXBsYWNlQWxsKHJlLCBzMSwgczIpIHsKKyAgIHZhciByZWc7
CisgICB2YXIganNzMSA9IHNjX3N0cmluZzJqc3N0cmluZyhzMSk7CisgICB2YXIganNzMiA9IHNj
X3N0cmluZzJqc3N0cmluZyhzMik7CisKKyAgIGlmIChyZSBpbnN0YW5jZW9mIFJlZ0V4cCkgewor
ICAgICAgaWYgKHJlLmdsb2JhbCkKKwkgIHJlZyA9IHJlOworICAgICAgZWxzZQorCSAgcmVnID0g
bmV3IFJlZ0V4cChyZS5zb3VyY2UsICJnIik7CisgICB9IGVsc2UgeworICAgICAgIHJlZyA9IG5l
dyBSZWdFeHAoc2Nfc3RyaW5nMmpzc3RyaW5nKHJlKSwgImciKTsKKyAgIH0KKworICAgcmV0dXJu
IGpzczEucmVwbGFjZShyZWcsIGpzczIpOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAq
LworZnVuY3Rpb24gc2NfcHJlZ2V4cFNwbGl0KHJlLCBzKSB7CisgICB2YXIgcmVnID0gKChyZSBp
bnN0YW5jZW9mIFJlZ0V4cCkgPworCSAgICAgIHJlIDoKKwkgICAgICBuZXcgUmVnRXhwKHNjX3N0
cmluZzJqc3N0cmluZyhyZSkpKTsKKyAgIHZhciBqc3MgPSBzY19zdHJpbmcyanNzdHJpbmcocyk7
CisgICB2YXIgdG1wID0ganNzLnNwbGl0KHJlZyk7CisKKyAgIGlmICh0bXAgPT0gbnVsbCkgcmV0
dXJuIGZhbHNlOworCisgICByZXR1cm4gc2NfdmVjdG9yMmxpc3QodG1wKTsKK30KKyAgIAorCisv
KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qIE90aGVyIGxpYnJhcnkgc3R1ZmYgKi8KKy8qID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PSAqLworCisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAg
IChwZWVwaG9sZSAoaG9sZSAxICJNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqIiAnbiAiKSIpKSkK
KyovCitmdW5jdGlvbiBzY19yYW5kb20obikgeworICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgu
cmFuZG9tKCkqbik7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCBjdXJyZW50LWRhdGUpCisgICAg
ICAgICAgIChwZWVwaG9sZSAoaG9sZSAwICJuZXcgRGF0ZSgpIikpKQorKi8KK2Z1bmN0aW9uIHNj
X2N1cnJlbnREYXRlKCkgeworICAgcmV0dXJuIG5ldyBEYXRlKCk7Cit9CisKK2Z1bmN0aW9uIHNj
X0hhc2h0YWJsZSgpIHsKK30KK3NjX0hhc2h0YWJsZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5j
dGlvbigpIHsKKyAgICByZXR1cm4gIiN7JWhhc2h0YWJsZX0iOworfTsKKy8vIHNjX3RvV3JpdGVT
dHJpbmcgPT0gc2NfdG9EaXNwbGF5U3RyaW5nID09IHRvU3RyaW5nCisKK2Z1bmN0aW9uIHNjX0hh
c2h0YWJsZUVsZW1lbnQoa2V5LCB2YWwpIHsKKyAgICB0aGlzLmtleSA9IGtleTsKKyAgICB0aGlz
LnZhbCA9IHZhbDsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAocGVl
cGhvbGUgKGhvbGUgMCAibmV3IHNjX0hhc2h0YWJsZSgpIikpKQorKi8KK2Z1bmN0aW9uIHNjX21h
a2VIYXNodGFibGUoKSB7CisgICAgcmV0dXJuIG5ldyBzY19IYXNodGFibGUoKTsKK30KKworLyoq
KiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9uIHNjX2hhc2h0YWJsZVB1dEJhbmcoaHQs
IGtleSwgdmFsKSB7CisgICAgdmFyIGhhc2ggPSBzY19oYXNoKGtleSk7CisgICAgaHRbaGFzaF0g
PSBuZXcgc2NfSGFzaHRhYmxlRWxlbWVudChrZXksIHZhbCk7Cit9CisKKy8qKiogTUVUQSAoKGV4
cG9ydCAjdCkpICovCitmdW5jdGlvbiBzY19oYXNodGFibGVHZXQoaHQsIGtleSkgeworICAgIHZh
ciBoYXNoID0gc2NfaGFzaChrZXkpOworICAgIGlmIChoYXNoIGluIGh0KQorCXJldHVybiBodFto
YXNoXS52YWw7CisgICAgZWxzZQorCXJldHVybiBmYWxzZTsKK30KKworLyoqKiBNRVRBICgoZXhw
b3J0ICN0KSkgKi8KK2Z1bmN0aW9uIHNjX2hhc2h0YWJsZUZvckVhY2goaHQsIGYpIHsKKyAgICBm
b3IgKHZhciB2IGluIGh0KSB7CisJaWYgKGh0W3ZdIGluc3RhbmNlb2Ygc2NfSGFzaHRhYmxlRWxl
bWVudCkKKwkgICAgZihodFt2XS5rZXksIGh0W3ZdLnZhbCk7CisgICAgfQorfQorCisvKioqIE1F
VEEgKChleHBvcnQgaGFzaHRhYmxlLWNvbnRhaW5zPykKKyAgICAgICAgICAgKHBlZXBob2xlICho
b2xlIDIgInNjX2hhc2goIiAxICIpIGluICIgMCkpKQorKi8KK2Z1bmN0aW9uIHNjX2hhc2h0YWJs
ZUNvbnRhaW5zKGh0LCBrZXkpIHsKKyAgICB2YXIgaGFzaCA9IHNjX2hhc2goa2V5KTsKKyAgICBp
ZiAoaGFzaCBpbiBodCkKKwlyZXR1cm4gdHJ1ZTsKKyAgICBlbHNlCisJcmV0dXJuIGZhbHNlOwor
fQorCit2YXIgU0NfSEFTSF9DT1VOVEVSID0gMDsKKworZnVuY3Rpb24gc2NfaGFzaChvKSB7Cisg
ICAgaWYgKG8gPT09IG51bGwpCisJcmV0dXJuICJudWxsIjsKKyAgICBlbHNlIGlmIChvID09PSB1
bmRlZmluZWQpCisJcmV0dXJuICJ1bmRlZmluZWQiOworICAgIGVsc2UgaWYgKG8gPT09IHRydWUp
CisJcmV0dXJuICJ0cnVlIjsKKyAgICBlbHNlIGlmIChvID09PSBmYWxzZSkKKwlyZXR1cm4gImZh
bHNlIjsKKyAgICBlbHNlIGlmICh0eXBlb2YgbyA9PT0gIm51bWJlciIpCisJcmV0dXJuICJudW0t
IiArIG87CisgICAgZWxzZSBpZiAodHlwZW9mIG8gPT09ICJzdHJpbmciKQorCXJldHVybiAianNz
dHItIiArIG87CisgICAgZWxzZSBpZiAoby5zY19nZXRIYXNoKQorCXJldHVybiBvLnNjX2dldEhh
c2goKTsKKyAgICBlbHNlCisJcmV0dXJuIHNjX2NvdW50ZXJIYXNoLmNhbGwobyk7Cit9CitmdW5j
dGlvbiBzY19jb3VudGVySGFzaCgpIHsKKyAgICBpZiAoIXRoaXMuc2NfaGFzaCkgeworCXRoaXMu
c2NfaGFzaCA9ICJoYXNoLSIgKyBTQ19IQVNIX0NPVU5URVI7CisJU0NfSEFTSF9DT1VOVEVSKys7
CisgICAgfQorICAgIHJldHVybiB0aGlzLnNjX2hhc2g7Cit9CisKK2Z1bmN0aW9uIHNjX1RyYW1w
b2xpbmUoYXJncywgbWF4VGFpbENhbGxzKSB7CisgICAgdGhpc1snX190cmFtcG9saW5lIHJldHVy
bl9fJ10gPSB0cnVlOworICAgIHRoaXMuYXJncyA9IGFyZ3M7CisgICAgdGhpcy5NQVhfVEFJTF9D
QUxMcyA9IG1heFRhaWxDYWxsczsKK30KKy8vIFRPRE86IGNhbGwvY2Mgc3R1ZmYKK3NjX1RyYW1w
b2xpbmUucHJvdG90eXBlLnJlc3RhcnQgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgbyA9IHRoaXM7
CisgICAgd2hpbGUgKHRydWUpIHsKKwkvLyBzZXQgYm90aCBnbG9iYWxzLgorCVNDX1RBSUxfT0JK
RUNULmNhbGxzID0gby5NQVhfVEFJTF9DQUxMcy0xOworCXZhciBmdW4gPSBvLmFyZ3MuY2FsbGVl
OworCXZhciByZXMgPSBmdW4uYXBwbHkoU0NfVEFJTF9PQkpFQ1QsIG8uYXJncyk7CisJaWYgKHJl
cyBpbnN0YW5jZW9mIHNjX1RyYW1wb2xpbmUpCisJICAgIG8gPSByZXM7CisJZWxzZQorCSAgICBy
ZXR1cm4gcmVzOworICAgIH0KK30KKworLyoqKiBNRVRBICgoZXhwb3J0IGJpbmQtZXhpdC1sYW1i
ZGEpKSAqLworZnVuY3Rpb24gc2NfYmluZEV4aXRMYW1iZGEocHJvYykgeworICAgIHZhciBlc2Nh
cGVfb2JqID0gbmV3IHNjX0JpbmRFeGl0RXhjZXB0aW9uKCk7CisgICAgdmFyIGVzY2FwZSA9IGZ1
bmN0aW9uKHJlcykgeworCWVzY2FwZV9vYmoucmVzID0gcmVzOworCXRocm93IGVzY2FwZV9vYmo7
CisgICAgfTsKKyAgICB0cnkgeworCXJldHVybiBwcm9jKGVzY2FwZSk7CisgICAgfSBjYXRjaChl
KSB7CisJaWYgKGUgPT09IGVzY2FwZV9vYmopIHsKKwkgICAgcmV0dXJuIGUucmVzOworCX0KKwl0
aHJvdyBlOworICAgIH0KK30KK2Z1bmN0aW9uIHNjX0JpbmRFeGl0RXhjZXB0aW9uKCkgeworICAg
IHRoaXMuX2ludGVybmFsRXhjZXB0aW9uID0gdHJ1ZTsKK30KKwordmFyIFNDX1NDTTJKU19HTE9C
QUxTID0gbmV3IE9iamVjdCgpOworCisvLyBkZWZhdWx0IHRhaWwtY2FsbCBkZXB0aC4KKy8vIG5v
cm1hbGx5IHRoZSBwcm9ncmFtIHNob3VsZCBzZXQgaXQgYWdhaW4uIGJ1dCBqdXN0IGluIGNhc2Uu
Li4KK3ZhciBTQ19UQUlMX09CSkVDVCA9IG5ldyBPYmplY3QoKTsKK1NDX1NDTTJKU19HTE9CQUxT
LlRBSUxfT0JKRUNUID0gU0NfVEFJTF9PQkpFQ1Q7CisvLyA9PT09PT09PT09PT09PT09PT09PT09
PT0gSS9PID09PT09PT09PT09PT09PT09PT09PT09CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworZnVuY3Rp
b24gc2NfRU9GKCkgeworfQordmFyIFNDX0VPRl9PQkpFQ1QgPSBuZXcgc2NfRU9GKCk7CisKK2Z1
bmN0aW9uIHNjX1BvcnQoKSB7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLSBJbnB1dCBwb3J0cyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworZnVuY3Rpb24gc2NfSW5w
dXRQb3J0KCkgeworfQorc2NfSW5wdXRQb3J0LnByb3RvdHlwZSA9IG5ldyBzY19Qb3J0KCk7CisK
K3NjX0lucHV0UG9ydC5wcm90b3R5cGUucGVla0NoYXIgPSBmdW5jdGlvbigpIHsKKyAgICBpZiAo
ISgicGVla2VkIiBpbiB0aGlzKSkKKwl0aGlzLnBlZWtlZCA9IHRoaXMuZ2V0TmV4dENoYXIoKTsK
KyAgICByZXR1cm4gdGhpcy5wZWVrZWQ7Cit9CitzY19JbnB1dFBvcnQucHJvdG90eXBlLnJlYWRD
aGFyID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHRtcCA9IHRoaXMucGVla0NoYXIoKTsKKyAgICBk
ZWxldGUgdGhpcy5wZWVrZWQ7CisgICAgcmV0dXJuIHRtcDsKK30KK3NjX0lucHV0UG9ydC5wcm90
b3R5cGUuaXNDaGFyUmVhZHkgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdHJ1ZTsKK30KK3Nj
X0lucHV0UG9ydC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHsKKyAgICAvLyBkbyBub3Ro
aW5nCit9CisKKy8qIC4uLi4uLi4uLi4uLi4uIFN0cmluZyBwb3J0IC4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uKi8KK2Z1bmN0aW9uIHNjX0Vycm9ySW5wdXRQb3J0KCkgeworfTsKK3NjX0Vycm9y
SW5wdXRQb3J0LnByb3RvdHlwZSA9IG5ldyBzY19JbnB1dFBvcnQoKTsKK3NjX0Vycm9ySW5wdXRQ
b3J0LnByb3RvdHlwZS5nZXROZXh0Q2hhciA9IGZ1bmN0aW9uKCkgeworICAgIHRocm93ICJjYW4n
dCByZWFkIGZyb20gZXJyb3ItcG9ydC4iOworfTsKK3NjX0Vycm9ySW5wdXRQb3J0LnByb3RvdHlw
ZS5pc0NoYXJSZWFkeSA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBmYWxzZTsKK307CisgICAg
CisKKy8qIC4uLi4uLi4uLi4uLi4uIFN0cmluZyBwb3J0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uKi8KKworZnVuY3Rpb24gc2NfU3RyaW5nSW5wdXRQb3J0KGpzU3RyKSB7CisgICAgLy8gd2Ug
YXJlIGdvaW5nIHRvIGRvIHNvbWUgY2hhckF0cyBvbiB0aGUgc3RyLgorICAgIC8vIGluc3RlYWQg
b2YgcmVjcmVhdGluZyBhbGwgdGhlIHRpbWUgYSBTdHJpbmctb2JqZWN0LCB3ZQorICAgIC8vIGNy
ZWF0ZSBvbmUgaW4gdGhlIGJlZ2lubmluZy4gKG5vdCBzdXJlLCBpZiB0aGlzIGlzIHJlYWxseSBh
biBvcHRpbSkKKyAgICB0aGlzLnN0ciA9IG5ldyBTdHJpbmcoanNTdHIpOworICAgIHRoaXMucG9z
ID0gMDsKK30KK3NjX1N0cmluZ0lucHV0UG9ydC5wcm90b3R5cGUgPSBuZXcgc2NfSW5wdXRQb3J0
KCk7CitzY19TdHJpbmdJbnB1dFBvcnQucHJvdG90eXBlLmdldE5leHRDaGFyID0gZnVuY3Rpb24o
KSB7CisgICAgaWYgKHRoaXMucG9zID49IHRoaXMuc3RyLmxlbmd0aCkKKwlyZXR1cm4gU0NfRU9G
X09CSkVDVDsKKyAgICByZXR1cm4gdGhpcy5zdHIuY2hhckF0KHRoaXMucG9zKyspOworfTsKKwor
LyogLS0tLS0tLS0tLS0tLSBSZWFkIGFuZCBvdGhlciBsaWItZnVucyAgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCitmdW5jdGlvbiBzY19Ub2tlbih0eXBlLCB2YWwsIHBvcykgewor
ICAgIHRoaXMudHlwZSA9IHR5cGU7CisgICAgdGhpcy52YWwgPSB2YWw7CisgICAgdGhpcy5wb3Mg
PSBwb3M7Cit9CitzY19Ub2tlbi5FT0YgPSAwLypFT0YqLzsKK3NjX1Rva2VuLk9QRU5fUEFSID0g
MS8qT1BFTl9QQVIqLzsKK3NjX1Rva2VuLkNMT1NFX1BBUiA9IDIvKkNMT1NFX1BBUiovOworc2Nf
VG9rZW4uT1BFTl9CUkFDRSA9IDMvKk9QRU5fQlJBQ0UqLzsKK3NjX1Rva2VuLkNMT1NFX0JSQUNF
ID0gNC8qQ0xPU0VfQlJBQ0UqLzsKK3NjX1Rva2VuLk9QRU5fQlJBQ0tFVCA9IDUvKk9QRU5fQlJB
Q0tFVCovOworc2NfVG9rZW4uQ0xPU0VfQlJBQ0tFVCA9IDYvKkNMT1NFX0JSQUNLRVQqLzsKK3Nj
X1Rva2VuLldISVRFU1BBQ0UgPSA3LypXSElURVNQQUNFKi87CitzY19Ub2tlbi5RVU9URSA9IDgv
KlFVT1RFKi87CitzY19Ub2tlbi5JRCA9IDkvKklEKi87CitzY19Ub2tlbi5ET1QgPSAxMC8qRE9U
Ki87CitzY19Ub2tlbi5TVFJJTkcgPSAxMS8qU1RSSU5HKi87CitzY19Ub2tlbi5OVU1CRVIgPSAx
Mi8qTlVNQkVSKi87CitzY19Ub2tlbi5FUlJPUiA9IDEzLypFUlJPUiovOworc2NfVG9rZW4uVkVD
VE9SX0JFR0lOID0gMTQvKlZFQ1RPUl9CRUdJTiovOworc2NfVG9rZW4uVFJVRSA9IDE1LypUUlVF
Ki87CitzY19Ub2tlbi5GQUxTRSA9IDE2LypGQUxTRSovOworc2NfVG9rZW4uVU5TUEVDSUZJRUQg
PSAxNy8qVU5TUEVDSUZJRUQqLzsKK3NjX1Rva2VuLlJFRkVSRU5DRSA9IDE4LypSRUZFUkVOQ0Uq
LzsKK3NjX1Rva2VuLlNUT1JFID0gMTkvKlNUT1JFKi87CitzY19Ub2tlbi5DSEFSID0gMjAvKkNI
QVIqLzsKKwordmFyIFNDX0lEX0NMQVNTID0gU0NfTE9XRVJfQ0xBU1MgKyBTQ19VUFBFUl9DTEFT
UyArICIhJCUqKy0uLzo8PT4/QF5ffiI7CitmdW5jdGlvbiBzY19Ub2tlbml6ZXIocG9ydCkgewor
ICAgIHRoaXMucG9ydCA9IHBvcnQ7Cit9CitzY19Ub2tlbml6ZXIucHJvdG90eXBlLnBlZWtUb2tl
biA9IGZ1bmN0aW9uKCkgeworICAgIGlmICh0aGlzLnBlZWtlZCkKKwlyZXR1cm4gdGhpcy5wZWVr
ZWQ7CisgICAgdmFyIG5ld1Rva2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKKyAgICB0aGlzLnBlZWtl
ZCA9IG5ld1Rva2VuOworICAgIHJldHVybiBuZXdUb2tlbjsKK307CitzY19Ub2tlbml6ZXIucHJv
dG90eXBlLnJlYWRUb2tlbiA9IGZ1bmN0aW9uKCkgeworICAgIHZhciB0bXAgPSB0aGlzLnBlZWtU
b2tlbigpOworICAgIGRlbGV0ZSB0aGlzLnBlZWtlZDsKKyAgICByZXR1cm4gdG1wOworfTsKK3Nj
X1Rva2VuaXplci5wcm90b3R5cGUubmV4dFRva2VuID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHBv
cnQgPSB0aGlzLnBvcnQ7CisgICAgCisgICAgZnVuY3Rpb24gaXNOdW1iZXJDaGFyKGMpIHsKKwly
ZXR1cm4gKGMgPj0gIjAiICYmIGMgPD0gIjkiKTsKKyAgICB9OworICAgIGZ1bmN0aW9uIGlzSWRP
ck51bWJlckNoYXIoYykgeworCXJldHVybiBTQ19JRF9DTEFTUy5pbmRleE9mKGMpICE9IC0xIHx8
IC8vIElELWNoYXIKKwkgICAgKGMgPj0gIjAiICYmIGMgPD0gIjkiKTsKKyAgICB9CisgICAgZnVu
Y3Rpb24gaXNXaGl0ZXNwYWNlKGMpIHsKKwlyZXR1cm4gYyA9PT0gIiAiIHx8IGMgPT09ICJcciIg
fHwgYyA9PT0gIlxuIiB8fCBjID09PSAiXHQiIHx8IGMgPT09ICJcZiI7CisgICAgfTsKKyAgICBm
dW5jdGlvbiBpc1doaXRlc3BhY2VPckVPRihjKSB7CisJcmV0dXJuIGlzV2hpdGVzcGFjZShjKSB8
fCBjID09PSBTQ19FT0ZfT0JKRUNUOworICAgIH07CisKKyAgICBmdW5jdGlvbiByZWFkU3RyaW5n
KCkgeworCXJlcyA9ICIiOworCXdoaWxlICh0cnVlKSB7CisJICAgIHZhciBjID0gcG9ydC5yZWFk
Q2hhcigpOworCSAgICBzd2l0Y2ggKGMpIHsKKwkgICAgY2FzZSAnIic6CisJCXJldHVybiBuZXcg
c2NfVG9rZW4oMTEvKlNUUklORyovLCByZXMpOworCSAgICBjYXNlICJcXCI6CisJCXZhciB0bXAg
PSBwb3J0LnJlYWRDaGFyKCk7CisJCXN3aXRjaCAodG1wKSB7CisJCWNhc2UgJzAnOiByZXMgKz0g
IlwwIjsgYnJlYWs7CisJCWNhc2UgJ2EnOiByZXMgKz0gIlxhIjsgYnJlYWs7CisJCWNhc2UgJ2In
OiByZXMgKz0gIlxiIjsgYnJlYWs7CisJCWNhc2UgJ2YnOiByZXMgKz0gIlxmIjsgYnJlYWs7CisJ
CWNhc2UgJ24nOiByZXMgKz0gIlxuIjsgYnJlYWs7CisJCWNhc2UgJ3InOiByZXMgKz0gIlxyIjsg
YnJlYWs7CisJCWNhc2UgJ3QnOiByZXMgKz0gIlx0IjsgYnJlYWs7CisJCWNhc2UgJ3YnOiByZXMg
Kz0gIlx2IjsgYnJlYWs7CisJCWNhc2UgJyInOiByZXMgKz0gJyInOyBicmVhazsKKwkJY2FzZSAn
XFwnOiByZXMgKz0gJ1xcJzsgYnJlYWs7CisJCWNhc2UgJ3gnOgorCQkgICAgLyogaGV4YS1udW1i
ZXIgKi8KKwkJICAgIHZhciBuYiA9IDA7CisJCSAgICB3aGlsZSAodHJ1ZSkgeworCQkJdmFyIGhl
eEMgPSBwb3J0LnBlZWtDaGFyKCk7CisJCQlpZiAoaGV4QyA+PSAnMCcgJiYgaGV4QyA8PSAnOScp
IHsKKwkJCSAgICBwb3J0LnJlYWRDaGFyKCk7CisJCQkgICAgbmIgPSBuYiAqIDE2ICsgaGV4Qy5j
aGFyQ29kZUF0KDApIC0gJzAnLmNoYXJDb2RlQXQoMCk7CisJCQl9IGVsc2UgaWYgKGhleEMgPj0g
J2EnICYmIGhleEMgPD0gJ2YnKSB7CisJCQkgICAgcG9ydC5yZWFkQ2hhcigpOworCQkJICAgIG5i
ID0gbmIgKiAxNiArIGhleEMuY2hhckNvZGVBdCgwKSAtICdhJy5jaGFyQ29kZUF0KDApOworCQkJ
fSBlbHNlIGlmIChoZXhDID49ICdBJyAmJiBoZXhDIDw9ICdGJykgeworCQkJICAgIHBvcnQucmVh
ZENoYXIoKTsKKwkJCSAgICBuYiA9IG5iICogMTYgKyBoZXhDLmNoYXJDb2RlQXQoMCkgLSAnQScu
Y2hhckNvZGVBdCgwKTsKKwkJCX0gZWxzZSB7CisJCQkgICAgLy8gbmV4dCBjaGFyIGlzbid0IHBh
cnQgb2YgaGV4LgorCQkJICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKG5iKTsKKwkJCSAg
ICBicmVhazsKKwkJCX0KKwkJICAgIH0KKwkJICAgIGJyZWFrOworCQlkZWZhdWx0OgorCQkgICAg
aWYgKHRtcCA9PT0gU0NfRU9GX09CSkVDVCkgeworCQkJcmV0dXJuIG5ldyBzY19Ub2tlbigxMy8q
RVJST1IqLywgInVuY2xvc2VkIHN0cmluZy1saXRlcmFsIiArIHJlcyk7CisJCSAgICB9CisJCSAg
ICByZXMgKz0gdG1wOworCQl9CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgorCQlpZiAoYyA9PT0g
U0NfRU9GX09CSkVDVCkgeworCQkgICAgcmV0dXJuIG5ldyBzY19Ub2tlbigxMy8qRVJST1IqLywg
InVuY2xvc2VkIHN0cmluZy1saXRlcmFsIiArIHJlcyk7CisJCX0KKwkJcmVzICs9IGM7CisJICAg
IH0KKwl9CisgICAgfTsKKyAgICBmdW5jdGlvbiByZWFkSWRPck51bWJlcihmaXJzdENoYXIpIHsK
Kwl2YXIgcmVzID0gZmlyc3RDaGFyOworCXdoaWxlIChpc0lkT3JOdW1iZXJDaGFyKHBvcnQucGVl
a0NoYXIoKSkpCisJICAgIHJlcyArPSBwb3J0LnJlYWRDaGFyKCk7CisJaWYgKGlzTmFOKHJlcykp
CisJICAgIHJldHVybiBuZXcgc2NfVG9rZW4oOS8qSUQqLywgcmVzKTsKKwllbHNlCisJICAgIHJl
dHVybiBuZXcgc2NfVG9rZW4oMTIvKk5VTUJFUiovLCByZXMgLSAwKTsKKyAgICB9OworICAgIAor
ICAgIGZ1bmN0aW9uIHNraXBXaGl0ZXNwYWNlQW5kQ29tbWVudHMoKSB7CisJdmFyIGRvbmUgPSBm
YWxzZTsKKwl3aGlsZSAoIWRvbmUpIHsKKwkgICAgZG9uZSA9IHRydWU7CisJICAgIHdoaWxlIChp
c1doaXRlc3BhY2UocG9ydC5wZWVrQ2hhcigpKSkKKwkJcG9ydC5yZWFkQ2hhcigpOworCSAgICBp
ZiAocG9ydC5wZWVrQ2hhcigpID09PSAnOycpIHsKKwkJcG9ydC5yZWFkQ2hhcigpOworCQlkb25l
ID0gZmFsc2U7CisJCXdoaWxlICh0cnVlKSB7CisJCSAgICBjdXJDaGFyID0gcG9ydC5yZWFkQ2hh
cigpOworCQkgICAgaWYgKGN1ckNoYXIgPT09IFNDX0VPRl9PQkpFQ1QgfHwKKwkJCWN1ckNoYXIg
PT09ICdcbicpCisJCQlicmVhazsKKwkJfQorCSAgICB9CisJfQorICAgIH07CisgICAgCisgICAg
ZnVuY3Rpb24gcmVhZERvdCgpIHsKKwlpZiAoaXNXaGl0ZXNwYWNlKHBvcnQucGVla0NoYXIoKSkp
CisJICAgIHJldHVybiBuZXcgc2NfVG9rZW4oMTAvKkRPVCovKTsKKwllbHNlCisJICAgIHJldHVy
biByZWFkSWRPck51bWJlcigiLiIpOworICAgIH07CisKKyAgICBmdW5jdGlvbiByZWFkU2hhcnAo
KSB7CisJdmFyIGMgPSBwb3J0LnJlYWRDaGFyKCk7CisJaWYgKGlzV2hpdGVzcGFjZShjKSkKKwkg
ICAgcmV0dXJuIG5ldyBzY19Ub2tlbigxMy8qRVJST1IqLywgImJhZCAjLXBhdHRlcm4wLiIpOwor
CisJLy8gcmVmZXJlbmNlCisJaWYgKGlzTnVtYmVyQ2hhcihjKSkgeworCSAgICB2YXIgbmIgPSBj
IC0gMDsKKwkgICAgd2hpbGUgKGlzTnVtYmVyQ2hhcihwb3J0LnBlZWtDaGFyKCkpKQorCQluYiA9
IG5iKjEwICsgKHBvcnQucmVhZENoYXIoKSAtIDApOworCSAgICBzd2l0Y2ggKHBvcnQucmVhZENo
YXIoKSkgeworCSAgICBjYXNlICcjJzoKKwkJcmV0dXJuIG5ldyBzY19Ub2tlbigxOC8qUkVGRVJF
TkNFKi8sIG5iKTsKKwkgICAgY2FzZSAnPSc6CisJCXJldHVybiBuZXcgc2NfVG9rZW4oMTkvKlNU
T1JFKi8sIG5iKTsKKwkgICAgZGVmYXVsdDoKKwkJcmV0dXJuIG5ldyBzY19Ub2tlbigxMy8qRVJS
T1IqLywgImJhZCAjLXBhdHRlcm4xLiIgKyBuYik7CisJICAgIH0KKwl9CisKKwlpZiAoYyA9PT0g
IigiKQorCSAgICByZXR1cm4gbmV3IHNjX1Rva2VuKDE0LypWRUNUT1JfQkVHSU4qLyk7CisJCisJ
aWYgKGMgPT09ICJcXCIpIHsgLy8gY2hhcmFjdGVyCisJICAgIHZhciB0bXAgPSAiIgorCSAgICB3
aGlsZSAoIWlzV2hpdGVzcGFjZU9yRU9GKHBvcnQucGVla0NoYXIoKSkpCisJCXRtcCArPSBwb3J0
LnJlYWRDaGFyKCk7CisJICAgIHN3aXRjaCAodG1wLmxlbmd0aCkgeworCSAgICBjYXNlIDA6IC8v
IGl0J3MgZXNjYXBpbmcgYSB3aGl0ZXNwYWNlIGNoYXI6CisJCWlmIChzY19pc0VPRk9iamVjdChw
b3J0LnBlZWtDaGFyKSkKKwkJICAgIHJldHVybiBuZXcgc2NfVG9rZW4oMTMvKkVSUk9SKi8sICJi
YWQgIy1wYXR0ZXJuMi4iKTsKKwkJZWxzZQorCQkgICAgcmV0dXJuIG5ldyBzY19Ub2tlbigyMC8q
Q0hBUiovLCBwb3J0LnJlYWRDaGFyKCkpOworCSAgICBjYXNlIDE6CisJCXJldHVybiBuZXcgc2Nf
VG9rZW4oMjAvKkNIQVIqLywgdG1wKTsKKwkgICAgZGVmYXVsdDoKKwkJdmFyIGVudHJ5ID0gc2Nf
Q2hhci5yZWFkYWJsZTJjaGFyW3RtcC50b0xvd2VyQ2FzZSgpXTsKKwkJaWYgKGVudHJ5KQorCQkg
ICAgcmV0dXJuIG5ldyBzY19Ub2tlbigyMC8qQ0hBUiovLCBlbnRyeSk7CisJCWVsc2UKKwkJICAg
IHJldHVybiBuZXcgc2NfVG9rZW4oMTMvKkVSUk9SKi8sICJ1bmtub3duIGNoYXJhY3RlciBkZXNj
cmlwdGlvbjogI1xcIiArIHRtcCk7CisJICAgIH0KKwl9CisKKwkvLyBzb21lIGNvbnN0YW50cyAo
I3QsICNmLCAjdW5zcGVjaWZpZWQpCisJdmFyIHJlczsKKwl2YXIgbmVlZGluZzsKKwlzd2l0Y2gg
KGMpIHsKKwljYXNlICd0JzogcmVzID0gbmV3IHNjX1Rva2VuKDE1LypUUlVFKi8sIHRydWUpOyBu
ZWVkaW5nID0gIiI7IGJyZWFrOworCWNhc2UgJ2YnOiByZXMgPSBuZXcgc2NfVG9rZW4oMTYvKkZB
TFNFKi8sIGZhbHNlKTsgbmVlZGluZyA9ICIiOyBicmVhazsKKwljYXNlICd1JzogcmVzID0gbmV3
IHNjX1Rva2VuKDE3LypVTlNQRUNJRklFRCovLCB1bmRlZmluZWQpOyBuZWVkaW5nID0gIm5zcGVj
aWZpZWQiOyBicmVhazsKKwlkZWZhdWx0OgorCSAgICByZXR1cm4gbmV3IHNjX1Rva2VuKDEzLypF
UlJPUiovLCAiYmFkICMtcGF0dGVybjM6ICIgKyBjKTsKKwl9CisJd2hpbGUodHJ1ZSkgeworCSAg
ICBjID0gcG9ydC5wZWVrQ2hhcigpOworCSAgICBpZiAoKGlzV2hpdGVzcGFjZU9yRU9GKGMpIHx8
IGMgPT09ICcpJykgJiYKKwkJbmVlZGluZyA9PSAiIikKKwkJcmV0dXJuIHJlczsKKwkgICAgZWxz
ZSBpZiAoaXNXaGl0ZXNwYWNlKGMpIHx8IG5lZWRpbmcgPT0gIiIpCisJCXJldHVybiBuZXcgc2Nf
VG9rZW4oMTMvKkVSUk9SKi8sICJiYWQgIy1wYXR0ZXJuNCAiICsgYyArICIgIiArIG5lZWRpbmcp
OworCSAgICBlbHNlIGlmIChuZWVkaW5nLmNoYXJBdCgwKSA9PSBjKSB7CisJCXBvcnQucmVhZENo
YXIoKTsgLy8gY29uc3VtZQorCQluZWVkaW5nID0gbmVlZGluZy5zbGljZSgxKTsKKwkgICAgfSBl
bHNlCisJCXJldHVybiBuZXcgc2NfVG9rZW4oMTMvKkVSUk9SKi8sICJiYWQgIy1wYXR0ZXJuNSIp
OworCX0KKwkKKyAgICB9OworCisgICAgc2tpcFdoaXRlc3BhY2VBbmRDb21tZW50cygpOworICAg
IHZhciBjdXJDaGFyID0gcG9ydC5yZWFkQ2hhcigpOworICAgIGlmIChjdXJDaGFyID09PSBTQ19F
T0ZfT0JKRUNUKQorCXJldHVybiBuZXcgc2NfVG9rZW4oMC8qRU9GKi8sIGN1ckNoYXIpOworICAg
IHN3aXRjaCAoY3VyQ2hhcikKKyAgICB7CisgICAgY2FzZSAiICI6CisgICAgY2FzZSAiXG4iOgor
ICAgIGNhc2UgIlx0IjoKKwlyZXR1cm4gcmVhZFdoaXRlc3BhY2UoKTsKKyAgICBjYXNlICIoIjoK
KwlyZXR1cm4gbmV3IHNjX1Rva2VuKDEvKk9QRU5fUEFSKi8pOworICAgIGNhc2UgIikiOgorCXJl
dHVybiBuZXcgc2NfVG9rZW4oMi8qQ0xPU0VfUEFSKi8pOworICAgIGNhc2UgInsiOgorCXJldHVy
biBuZXcgc2NfVG9rZW4oMy8qT1BFTl9CUkFDRSovKTsKKyAgICBjYXNlICJ9IjoKKwlyZXR1cm4g
bmV3IHNjX1Rva2VuKDQvKkNMT1NFX0JSQUNFKi8pOworICAgIGNhc2UgIlsiOgorCXJldHVybiBu
ZXcgc2NfVG9rZW4oNS8qT1BFTl9CUkFDS0VUKi8pOworICAgIGNhc2UgIl0iOgorCXJldHVybiBu
ZXcgc2NfVG9rZW4oNi8qQ0xPU0VfQlJBQ0tFVCovKTsKKyAgICBjYXNlICInIjoKKwlyZXR1cm4g
bmV3IHNjX1Rva2VuKDgvKlFVT1RFKi8pOworICAgIGNhc2UgIiMiOgorCXJldHVybiByZWFkU2hh
cnAoKTsKKyAgICBjYXNlICIuIjoKKwlyZXR1cm4gcmVhZERvdCgpOworICAgIGNhc2UgJyInOgor
CXJldHVybiByZWFkU3RyaW5nKCk7CisgICAgZGVmYXVsdDoKKwlpZiAoaXNJZE9yTnVtYmVyQ2hh
cihjdXJDaGFyKSkKKwkgICAgcmV0dXJuIHJlYWRJZE9yTnVtYmVyKGN1ckNoYXIpOworCXRocm93
ICJ1bmV4cGVjdGVkIGNoYXJhY3RlcjogIiArIGN1ckNoYXI7CisgICAgfQorfTsKKworZnVuY3Rp
b24gc2NfUmVhZGVyKHRva2VuaXplcikgeworICAgIHRoaXMudG9rZW5pemVyID0gdG9rZW5pemVy
OworICAgIHRoaXMuYmFja3JlZiA9IG5ldyBBcnJheSgpOworfQorc2NfUmVhZGVyLnByb3RvdHlw
ZS5yZWFkID0gZnVuY3Rpb24oKSB7CisgICAgZnVuY3Rpb24gcmVhZExpc3QobGlzdEJlZ2luVHlw
ZSkgeworCWZ1bmN0aW9uIG1hdGNoZXNQZWVyKG9wZW4sIGNsb3NlKSB7CisJICAgIHJldHVybiBv
cGVuID09PSAxLypPUEVOX1BBUiovICYmIGNsb3NlID09PSAyLypDTE9TRV9QQVIqLworCSAgICAJ
fHwgb3BlbiA9PT0gMy8qT1BFTl9CUkFDRSovICYmIGNsb3NlID09PSA0LypDTE9TRV9CUkFDRSov
CisJCXx8IG9wZW4gPT09IDUvKk9QRU5fQlJBQ0tFVCovICYmIGNsb3NlID09PSA2LypDTE9TRV9C
UkFDS0VUKi87CisJfTsKKwl2YXIgcmVzID0gbnVsbDsKKworCXdoaWxlICh0cnVlKSB7CisJICAg
IHZhciB0b2tlbiA9IHRva2VuaXplci5wZWVrVG9rZW4oKTsKKwkgICAgCisJICAgIHN3aXRjaCAo
dG9rZW4udHlwZSkgeworCSAgICBjYXNlIDIvKkNMT1NFX1BBUiovOgorCSAgICBjYXNlIDQvKkNM
T1NFX0JSQUNFKi86CisJICAgIGNhc2UgNi8qQ0xPU0VfQlJBQ0tFVCovOgorCQlpZiAobWF0Y2hl
c1BlZXIobGlzdEJlZ2luVHlwZSwgdG9rZW4udHlwZSkpIHsKKwkJICAgIHRva2VuaXplci5yZWFk
VG9rZW4oKTsgLy8gY29uc3VtZSB0b2tlbgorCQkgICAgcmV0dXJuIHNjX3JldmVyc2VCYW5nKHJl
cyk7CisJCX0gZWxzZQorCQkgICAgdGhyb3cgImNsb3NpbmcgcGFyIGRvZXNuJ3QgbWF0Y2g6ICIg
KyBsaXN0QmVnaW5UeXBlCisJCQkrICIgIiArIGxpc3RFbmRUeXBlOworCisJICAgIGNhc2UgMC8q
RU9GKi86CisJCXRocm93ICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIjsKKworCSAgICBjYXNlIDEw
LypET1QqLzoKKwkJdG9rZW5pemVyLnJlYWRUb2tlbigpOyAvLyBjb25zdW1lIHRva2VuCisJCXZh
ciBjZHIgPSB0aGlzLnJlYWQoKTsKKwkJdmFyIHBhciA9IHRva2VuaXplci5yZWFkVG9rZW4oKTsK
KwkJaWYgKCFtYXRjaGVzUGVlcihsaXN0QmVnaW5UeXBlLCBwYXIudHlwZSkpCisJCSAgICB0aHJv
dyAiY2xvc2luZyBwYXIgZG9lc24ndCBtYXRjaDogIiArIGxpc3RCZWdpblR5cGUKKwkJCSsgIiAi
ICsgcGFyLnR5cGU7CisJCWVsc2UKKwkJICAgIHJldHVybiBzY19yZXZlcnNlQXBwZW5kQmFuZyhy
ZXMsIGNkcik7CisJCQorCisJICAgIGRlZmF1bHQ6CisJCXJlcyA9IHNjX2NvbnModGhpcy5yZWFk
KCksIHJlcyk7CisJICAgIH0KKwl9CisgICAgfTsKKyAgICBmdW5jdGlvbiByZWFkUXVvdGUoKSB7
CisJcmV0dXJuIHNjX2NvbnMoInF1b3RlIiwgc2NfY29ucyh0aGlzLnJlYWQoKSwgbnVsbCkpOwor
ICAgIH07CisgICAgZnVuY3Rpb24gcmVhZFZlY3RvcigpIHsKKwkvLyBvcGVuaW5nLXBhcmVudGhl
c2lzIGlzIGFscmVhZHkgY29uc3VtZWQKKwl2YXIgYSA9IG5ldyBBcnJheSgpOworCXdoaWxlICh0
cnVlKSB7CisJICAgIHZhciB0b2tlbiA9IHRva2VuaXplci5wZWVrVG9rZW4oKTsKKwkgICAgc3dp
dGNoICh0b2tlbi50eXBlKSB7CisJICAgIGNhc2UgMi8qQ0xPU0VfUEFSKi86CisJCXRva2VuaXpl
ci5yZWFkVG9rZW4oKTsKKwkJcmV0dXJuIGE7CisJCQorCSAgICBkZWZhdWx0OgorCQlhLnB1c2go
dGhpcy5yZWFkKCkpOworCSAgICB9CisJfQorICAgIH07CisKKyAgICBmdW5jdGlvbiBzdG9yZVJl
ZmVuY2UobmIpIHsKKwl2YXIgdG1wID0gdGhpcy5yZWFkKCk7CisJdGhpcy5iYWNrcmVmW25iXSA9
IHRtcDsKKwlyZXR1cm4gdG1wOworICAgIH07CisJCisgICAgZnVuY3Rpb24gcmVhZFJlZmVyZW5j
ZShuYikgeworCWlmIChuYiBpbiB0aGlzLmJhY2tyZWYpCisJICAgIHJldHVybiB0aGlzLmJhY2ty
ZWZbbmJdOworCWVsc2UKKwkgICAgdGhyb3cgImJhZCByZWZlcmVuY2U6ICIgKyBuYjsKKyAgICB9
OworICAgIAorICAgIHZhciB0b2tlbml6ZXIgPSB0aGlzLnRva2VuaXplcjsKKworICAgIHZhciB0
b2tlbiA9IHRva2VuaXplci5yZWFkVG9rZW4oKTsKKworICAgIC8vIGhhbmRsZSBlcnJvcgorICAg
IGlmICh0b2tlbi50eXBlID09PSAxMy8qRVJST1IqLykKKwl0aHJvdyB0b2tlbi52YWw7CisgICAg
CisgICAgc3dpdGNoICh0b2tlbi50eXBlKSB7CisgICAgY2FzZSAxLypPUEVOX1BBUiovOgorICAg
IGNhc2UgMy8qT1BFTl9CUkFDRSovOgorICAgIGNhc2UgNS8qT1BFTl9CUkFDS0VUKi86CisJcmV0
dXJuIHJlYWRMaXN0LmNhbGwodGhpcywgdG9rZW4udHlwZSk7CisgICAgY2FzZSA4LypRVU9URSov
OgorCXJldHVybiByZWFkUXVvdGUuY2FsbCh0aGlzKTsKKyAgICBjYXNlIDExLypTVFJJTkcqLzoK
KwlyZXR1cm4gc2NfanNzdHJpbmcyc3RyaW5nKHRva2VuLnZhbCk7CisgICAgY2FzZSAyMC8qQ0hB
UiovOgorCXJldHVybiBuZXcgc2NfQ2hhcih0b2tlbi52YWwpOworICAgIGNhc2UgMTQvKlZFQ1RP
Ul9CRUdJTiovOgorCXJldHVybiByZWFkVmVjdG9yLmNhbGwodGhpcyk7CisgICAgY2FzZSAxOC8q
UkVGRVJFTkNFKi86CisJcmV0dXJuIHJlYWRSZWZlcmVuY2UuY2FsbCh0aGlzLCB0b2tlbi52YWwp
OworICAgIGNhc2UgMTkvKlNUT1JFKi86CisJcmV0dXJuIHN0b3JlUmVmZW5jZS5jYWxsKHRoaXMs
IHRva2VuLnZhbCk7CisgICAgY2FzZSA5LypJRCovOgorCXJldHVybiBzY19qc3N0cmluZzJzeW1i
b2wodG9rZW4udmFsKTsKKyAgICBjYXNlIDAvKkVPRiovOgorICAgIGNhc2UgMTIvKk5VTUJFUiov
OgorICAgIGNhc2UgMTUvKlRSVUUqLzoKKyAgICBjYXNlIDE2LypGQUxTRSovOgorICAgIGNhc2Ug
MTcvKlVOU1BFQ0lGSUVEKi86CisJcmV0dXJuIHRva2VuLnZhbDsKKyAgICBkZWZhdWx0OgorCXRo
cm93ICJ1bmV4cGVjdGVkIHRva2VuICIgKyB0b2tlbi50eXBlICsgIiAiICsgdG9rZW4udmFsOwor
ICAgIH0KK307CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBzY19yZWFk
KHBvcnQpIHsKKyAgICBpZiAocG9ydCA9PT0gdW5kZWZpbmVkKSAvLyB3ZSBhc3N1bWUgdGhlIHBv
cnQgaGFzbid0IGJlZW4gZ2l2ZW4uCisJcG9ydCA9IFNDX0RFRkFVTFRfSU47IC8vIFRIUkVBRDog
c2hhcmVkIHZhci4uLgorICAgIHZhciByZWFkZXIgPSBuZXcgc2NfUmVhZGVyKG5ldyBzY19Ub2tl
bml6ZXIocG9ydCkpOworICAgIHJldHVybiByZWFkZXIucmVhZCgpOworfQorLyoqKiBNRVRBICgo
ZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9uIHNjX3JlYWRDaGFyKHBvcnQpIHsKKyAgICBpZiAocG9y
dCA9PT0gdW5kZWZpbmVkKSAvLyB3ZSBhc3N1bWUgdGhlIHBvcnQgaGFzbid0IGJlZW4gZ2l2ZW4u
CisJcG9ydCA9IFNDX0RFRkFVTFRfSU47IC8vIFRIUkVBRDogc2hhcmVkIHZhci4uLgorICAgIHZh
ciB0ID0gcG9ydC5yZWFkQ2hhcigpOworICAgIHJldHVybiB0ID09PSBTQ19FT0ZfT0JKRUNUPyB0
OiBuZXcgc2NfQ2hhcih0KTsKK30KKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCitmdW5jdGlv
biBzY19wZWVrQ2hhcihwb3J0KSB7CisgICAgaWYgKHBvcnQgPT09IHVuZGVmaW5lZCkgLy8gd2Ug
YXNzdW1lIHRoZSBwb3J0IGhhc24ndCBiZWVuIGdpdmVuLgorCXBvcnQgPSBTQ19ERUZBVUxUX0lO
OyAvLyBUSFJFQUQ6IHNoYXJlZCB2YXIuLi4KKyAgICB2YXIgdCA9IHBvcnQucGVla0NoYXIoKTsK
KyAgICByZXR1cm4gdCA9PT0gU0NfRU9GX09CSkVDVD8gdDogbmV3IHNjX0NoYXIodCk7Cit9ICAg
IAorLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAodHlwZSBib29sKSkKKyovCitm
dW5jdGlvbiBzY19pc0NoYXJSZWFkeShwb3J0KSB7CisgICAgaWYgKHBvcnQgPT09IHVuZGVmaW5l
ZCkgLy8gd2UgYXNzdW1lIHRoZSBwb3J0IGhhc24ndCBiZWVuIGdpdmVuLgorCXBvcnQgPSBTQ19E
RUZBVUxUX0lOOyAvLyBUSFJFQUQ6IHNoYXJlZCB2YXIuLi4KKyAgICByZXR1cm4gcG9ydC5pc0No
YXJSZWFkeSgpOworfQorLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAocGVlcGhv
bGUgKHBvc3RmaXggIi5jbG9zZSgpIikpKQorKi8KK2Z1bmN0aW9uIHNjX2Nsb3NlSW5wdXRQb3J0
KHApIHsKKyAgICByZXR1cm4gcC5jbG9zZSgpOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3Qp
CisgICAgICAgICAgICh0eXBlIGJvb2wpCisgICAgICAgICAgIChwZWVwaG9sZSAocG9zdGZpeCAi
IGluc3RhbmNlb2Ygc2NfSW5wdXRQb3J0IikpKQorKi8KK2Z1bmN0aW9uIHNjX2lzSW5wdXRQb3J0
KG8pIHsKKyAgICByZXR1cm4gKG8gaW5zdGFuY2VvZiBzY19JbnB1dFBvcnQpOworfQorCisvKioq
IE1FVEEgKChleHBvcnQgZW9mLW9iamVjdD8pCisgICAgICAgICAgICh0eXBlIGJvb2wpCisgICAg
ICAgICAgIChwZWVwaG9sZSAocG9zdGZpeCAiID09PSBTQ19FT0ZfT0JKRUNUIikpKQorKi8KK2Z1
bmN0aW9uIHNjX2lzRU9GT2JqZWN0KG8pIHsKKyAgICByZXR1cm4gbyA9PT0gU0NfRU9GX09CSkVD
VDsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAocGVlcGhvbGUgKGhv
bGUgMCAiU0NfREVGQVVMVF9JTiIpKSkKKyovCitmdW5jdGlvbiBzY19jdXJyZW50SW5wdXRQb3J0
KCkgeworICAgIHJldHVybiBTQ19ERUZBVUxUX0lOOworfQorCisvKiAtLS0tLS0tLS0tLS0gZmls
ZSBvcGVyYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIC0tLS0tLS0tLS0tKi8KKy8qKiogTUVUQSAo
KGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBzY19jYWxsV2l0aElucHV0RmlsZShzLCBwcm9jKSB7
CisgICAgdGhyb3cgImNhbid0IG9wZW4gIiArIHM7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAj
dCkpICovCitmdW5jdGlvbiBzY19jYWxsV2l0aE91dHB1dEZpbGUocywgcHJvYykgeworICAgIHRo
cm93ICJjYW4ndCBvcGVuICIgKyBzOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLwor
ZnVuY3Rpb24gc2Nfd2l0aElucHV0RnJvbUZpbGUocywgdGh1bmspIHsKKyAgICB0aHJvdyAiY2Fu
J3Qgb3BlbiAiICsgczsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9u
IHNjX3dpdGhPdXRwdXRUb0ZpbGUocywgdGh1bmspIHsKKyAgICB0aHJvdyAiY2FuJ3Qgb3BlbiAi
ICsgczsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9uIHNjX29wZW5J
bnB1dEZpbGUocykgeworICAgIHRocm93ICJjYW4ndCBvcGVuICIgKyBzOworfQorCisvKioqIE1F
VEEgKChleHBvcnQgI3QpKSAqLworZnVuY3Rpb24gc2Nfb3Blbk91dHB1dEZpbGUocykgeworICAg
IHRocm93ICJjYW4ndCBvcGVuICIgKyBzOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
Ky8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBzY19iYXNlbmFtZShwKSB7Cisg
ICB2YXIgaSA9IHAubGFzdEluZGV4T2YoJy8nKTsKKworICAgaWYoaSA+PSAwKQorICAgICAgcmV0
dXJuIHAuc3Vic3RyaW5nKGkgKyAxLCBwLmxlbmd0aCk7CisgICBlbHNlCisgICAgICByZXR1cm4g
Jyc7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBzY19kaXJuYW1l
KHApIHsKKyAgIHZhciBpID0gcC5sYXN0SW5kZXhPZignLycpOworCisgICBpZihpID49IDApCisg
ICAgICByZXR1cm4gcC5zdWJzdHJpbmcoMCwgaSk7CisgICBlbHNlCisgICAgICByZXR1cm4gJyc7
Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKioqIE1FVEEgKChleHBvcnQgI3Qp
KSAqLworZnVuY3Rpb24gc2Nfd2l0aElucHV0RnJvbVBvcnQocCwgdGh1bmspIHsKKyAgICB0cnkg
eworCXZhciB0bXAgPSBTQ19ERUZBVUxUX0lOOyAvLyBUSFJFQUQ6IHNoYXJlZCB2YXIuCisJU0Nf
REVGQVVMVF9JTiA9IHA7CisJcmV0dXJuIHRodW5rKCk7CisgICAgfSBmaW5hbGx5IHsKKwlTQ19E
RUZBVUxUX0lOID0gdG1wOworICAgIH0KK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8K
K2Z1bmN0aW9uIHNjX3dpdGhJbnB1dEZyb21TdHJpbmcocywgdGh1bmspIHsKKyAgICByZXR1cm4g
c2Nfd2l0aElucHV0RnJvbVBvcnQobmV3IHNjX1N0cmluZ0lucHV0UG9ydChzY19zdHJpbmcyanNz
dHJpbmcocykpLCB0aHVuayk7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCitmdW5j
dGlvbiBzY193aXRoT3V0cHV0VG9Qb3J0KHAsIHRodW5rKSB7CisgICAgdHJ5IHsKKwl2YXIgdG1w
ID0gU0NfREVGQVVMVF9PVVQ7IC8vIFRIUkVBRDogc2hhcmVkIHZhci4KKwlTQ19ERUZBVUxUX09V
VCA9IHA7CisJcmV0dXJuIHRodW5rKCk7CisgICAgfSBmaW5hbGx5IHsKKwlTQ19ERUZBVUxUX09V
VCA9IHRtcDsKKyAgICB9Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCitmdW5jdGlv
biBzY193aXRoT3V0cHV0VG9TdHJpbmcodGh1bmspIHsKKyAgICB2YXIgcCA9IG5ldyBzY19TdHJp
bmdPdXRwdXRQb3J0KCk7CisgICAgc2Nfd2l0aE91dHB1dFRvUG9ydChwLCB0aHVuayk7CisgICAg
cmV0dXJuIHAuY2xvc2UoKTsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0
aW9uIHNjX3dpdGhPdXRwdXRUb1Byb2NlZHVyZShwcm9jLCB0aHVuaykgeworICAgIHZhciB0ID0g
ZnVuY3Rpb24ocykgeyBwcm9jKHNjX2pzc3RyaW5nMnN0cmluZyhzKSk7IH07CisgICAgcmV0dXJu
IHNjX3dpdGhPdXRwdXRUb1BvcnQobmV3IHNjX0dlbmVyaWNPdXRwdXRQb3J0KHQpLCB0aHVuayk7
Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHBlZXBob2xlIChob2xl
IDAgIm5ldyBzY19TdHJpbmdPdXRwdXRQb3J0KCkiKSkpCisqLworZnVuY3Rpb24gc2Nfb3Blbk91
dHB1dFN0cmluZygpIHsKKyAgICByZXR1cm4gbmV3IHNjX1N0cmluZ091dHB1dFBvcnQoKTsKK30K
KworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9uIHNjX29wZW5JbnB1dFN0cmlu
ZyhzdHIpIHsKKyAgICByZXR1cm4gbmV3IHNjX1N0cmluZ0lucHV0UG9ydChzY19zdHJpbmcyanNz
dHJpbmcoc3RyKSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitmdW5jdGlvbiBz
Y19PdXRwdXRQb3J0KCkgeworfQorc2NfT3V0cHV0UG9ydC5wcm90b3R5cGUgPSBuZXcgc2NfUG9y
dCgpOworc2NfT3V0cHV0UG9ydC5wcm90b3R5cGUuYXBwZW5kSlNTdHJpbmcgPSBmdW5jdGlvbihv
YmopIHsKKyAgICAvKiBkbyBub3RoaW5nICovCit9CitzY19PdXRwdXRQb3J0LnByb3RvdHlwZS5j
bG9zZSA9IGZ1bmN0aW9uKCkgeworICAgIC8qIGRvIG5vdGhpbmcgKi8KK30KKworZnVuY3Rpb24g
c2NfU3RyaW5nT3V0cHV0UG9ydCgpIHsKKyAgICB0aGlzLnJlcyA9ICIiOworfQorc2NfU3RyaW5n
T3V0cHV0UG9ydC5wcm90b3R5cGUgPSBuZXcgc2NfT3V0cHV0UG9ydCgpOworc2NfU3RyaW5nT3V0
cHV0UG9ydC5wcm90b3R5cGUuYXBwZW5kSlNTdHJpbmcgPSBmdW5jdGlvbihzKSB7CisgICAgdGhp
cy5yZXMgKz0gczsKK30KK3NjX1N0cmluZ091dHB1dFBvcnQucHJvdG90eXBlLmNsb3NlID0gZnVu
Y3Rpb24oKSB7CisgICAgcmV0dXJuIHNjX2pzc3RyaW5nMnN0cmluZyh0aGlzLnJlcyk7Cit9CisK
Ky8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBzY19nZXRPdXRwdXRTdHJpbmco
c3ApIHsKKyAgICByZXR1cm4gc2NfanNzdHJpbmcyc3RyaW5nKHNwLnJlcyk7Cit9CisgICAgCisK
K2Z1bmN0aW9uIHNjX0Vycm9yT3V0cHV0UG9ydCgpIHsKK30KK3NjX0Vycm9yT3V0cHV0UG9ydC5w
cm90b3R5cGUgPSBuZXcgc2NfT3V0cHV0UG9ydCgpOworc2NfRXJyb3JPdXRwdXRQb3J0LnByb3Rv
dHlwZS5hcHBlbmRKU1N0cmluZyA9IGZ1bmN0aW9uKHMpIHsKKyAgICB0aHJvdyAiZG9uJ3Qgd3Jp
dGUgb24gRXJyb3JQb3J0ISI7Cit9CitzY19FcnJvck91dHB1dFBvcnQucHJvdG90eXBlLmNsb3Nl
ID0gZnVuY3Rpb24oKSB7CisgICAgLyogZG8gbm90aGluZyAqLworfQorCitmdW5jdGlvbiBzY19H
ZW5lcmljT3V0cHV0UG9ydChhcHBlbmRKU1N0cmluZywgY2xvc2UpIHsKKyAgICB0aGlzLmFwcGVu
ZEpTU3RyaW5nID0gYXBwZW5kSlNTdHJpbmc7CisgICAgaWYgKGNsb3NlKQorCXRoaXMuY2xvc2Ug
PSBjbG9zZTsKK30KK3NjX0dlbmVyaWNPdXRwdXRQb3J0LnByb3RvdHlwZSA9IG5ldyBzY19PdXRw
dXRQb3J0KCk7CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAgICAgKHR5cGUgYm9v
bCkKKyAgICAgICAgICAgKHBlZXBob2xlIChwb3N0Zml4ICIgaW5zdGFuY2VvZiBzY19PdXRwdXRQ
b3J0IikpKQorKi8KK2Z1bmN0aW9uIHNjX2lzT3V0cHV0UG9ydChvKSB7CisgICAgcmV0dXJuIChv
IGluc3RhbmNlb2Ygc2NfT3V0cHV0UG9ydCk7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkK
KyAgICAgICAgICAgKHBlZXBob2xlIChwb3N0Zml4ICIuY2xvc2UoKSIpKSkKKyovCitmdW5jdGlv
biBzY19jbG9zZU91dHB1dFBvcnQocCkgeworICAgIHJldHVybiBwLmNsb3NlKCk7Cit9CisKKy8q
IC0tLS0tLS0tLS0tLS0tLS0tLSB3cml0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLworZnVu
Y3Rpb24gc2Nfd3JpdGUobywgcCkgeworICAgIGlmIChwID09PSB1bmRlZmluZWQpIC8vIHdlIGFz
c3VtZSBub3QgZ2l2ZW4KKwlwID0gU0NfREVGQVVMVF9PVVQ7CisgICAgcC5hcHBlbmRKU1N0cmlu
ZyhzY190b1dyaXRlU3RyaW5nKG8pKTsKK30KKworZnVuY3Rpb24gc2NfdG9Xcml0ZVN0cmluZyhv
KSB7CisgICAgaWYgKG8gPT09IG51bGwpCisJcmV0dXJuICIoKSI7CisgICAgZWxzZSBpZiAobyA9
PT0gdHJ1ZSkKKwlyZXR1cm4gIiN0IjsKKyAgICBlbHNlIGlmIChvID09PSBmYWxzZSkKKwlyZXR1
cm4gIiNmIjsKKyAgICBlbHNlIGlmIChvID09PSB1bmRlZmluZWQpCisJcmV0dXJuICIjdW5zcGVj
aWZpZWQiOworICAgIGVsc2UgaWYgKHR5cGVvZiBvID09PSAnZnVuY3Rpb24nKQorCXJldHVybiAi
Izxwcm9jZWR1cmUgIiArIHNjX2hhc2gobykgKyAiPiI7CisgICAgZWxzZSBpZiAoby5zY190b1dy
aXRlU3RyaW5nKQorCXJldHVybiBvLnNjX3RvV3JpdGVTdHJpbmcoKTsKKyAgICBlbHNlCisJcmV0
dXJuIG8udG9TdHJpbmcoKTsKK30KKworZnVuY3Rpb24gc2NfZXNjYXBlV3JpdGVTdHJpbmcocykg
eworICAgIHZhciByZXMgPSAiIjsKKyAgICB2YXIgaiA9IDA7CisgICAgZm9yIChpID0gMDsgaSA8
IHMubGVuZ3RoOyBpKyspIHsKKwlzd2l0Y2ggKHMuY2hhckF0KGkpKSB7CisJY2FzZSAiXDAiOiBy
ZXMgKz0gcy5zdWJzdHJpbmcoaiwgaSkgKyAiXFwwIjsgaiA9IGkgKyAxOyBicmVhazsKKwljYXNl
ICJcYiI6IHJlcyArPSBzLnN1YnN0cmluZyhqLCBpKSArICJcXGIiOyBqID0gaSArIDE7IGJyZWFr
OworCWNhc2UgIlxmIjogcmVzICs9IHMuc3Vic3RyaW5nKGosIGkpICsgIlxcZiI7IGogPSBpICsg
MTsgYnJlYWs7CisJY2FzZSAiXG4iOiByZXMgKz0gcy5zdWJzdHJpbmcoaiwgaSkgKyAiXFxuIjsg
aiA9IGkgKyAxOyBicmVhazsKKwljYXNlICJcciI6IHJlcyArPSBzLnN1YnN0cmluZyhqLCBpKSAr
ICJcXHIiOyBqID0gaSArIDE7IGJyZWFrOworCWNhc2UgIlx0IjogcmVzICs9IHMuc3Vic3RyaW5n
KGosIGkpICsgIlxcdCI7IGogPSBpICsgMTsgYnJlYWs7CisJY2FzZSAiXHYiOiByZXMgKz0gcy5z
dWJzdHJpbmcoaiwgaSkgKyAiXFx2IjsgaiA9IGkgKyAxOyBicmVhazsKKwljYXNlICciJzogcmVz
ICs9IHMuc3Vic3RyaW5nKGosIGkpICsgJ1xcIic7IGogPSBpICsgMTsgYnJlYWs7CisJY2FzZSAi
XFwiOiByZXMgKz0gcy5zdWJzdHJpbmcoaiwgaSkgKyAiXFxcXCI7IGogPSBpICsgMTsgYnJlYWs7
CisJZGVmYXVsdDoKKwkgICAgdmFyIGMgPSBzLmNoYXJBdChpKTsKKwkgICAgaWYgKCJcYSIgIT09
ICJhIiAmJiBjID09ICJcYSIpIHsKKwkJcmVzICs9IHMuc3Vic3RyaW5nKGosIGkpICsgIlxcYSI7
IGogPSBpICsgMTsgY29udGludWU7CisJICAgIH0KKwkgICAgaWYgKCJcdiIgIT09ICJ2IiAmJiBj
ID09ICJcdiIpIHsKKwkJcmVzICs9IHMuc3Vic3RyaW5nKGosIGkpICsgIlxcdiI7IGogPSBpICsg
MTsgY29udGludWU7CisJICAgIH0KKwkgICAgLy9pZiAocy5jaGFyQXQoaSkgPCAnICcgfHwgcy5j
aGFyQ29kZUF0KGkpID4gMTI3KSB7CisJICAgIC8vIENBUkU6IE1hbnVlbCBpcyB0aGlzIE9LIHdp
dGggSE9QPworCSAgICBpZiAocy5jaGFyQXQoaSkgPCAnICcpIHsKKwkJLyogbm9uIHByaW50YWJs
ZSBjaGFyYWN0ZXIgYW5kIHNwZWNpYWwgY2hhcnMgKi8KKwkJcmVzICs9IHMuc3Vic3RyaW5nKGos
IGkpICsgIlxceCIgKyBzLmNoYXJDb2RlQXQoaSkudG9TdHJpbmcoMTYpOworCQlqID0gaSArIDE7
CisJICAgIH0KKwkgICAgLy8gZWxzZSBqdXN0IGxldCBpIGluY3JlYXNlLi4uCisJfQorICAgIH0K
KyAgICByZXMgKz0gcy5zdWJzdHJpbmcoaiwgaSk7CisgICAgcmV0dXJuIHJlczsKK30KKworLyog
LS0tLS0tLS0tLS0tLS0tLS0tIGRpc3BsYXkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1
bmN0aW9uIHNjX2Rpc3BsYXkobywgcCkgeworICAgIGlmIChwID09PSB1bmRlZmluZWQpIC8vIHdl
IGFzc3VtZSBub3QgZ2l2ZW4KKwlwID0gU0NfREVGQVVMVF9PVVQ7CisgICAgcC5hcHBlbmRKU1N0
cmluZyhzY190b0Rpc3BsYXlTdHJpbmcobykpOworfQorCitmdW5jdGlvbiBzY190b0Rpc3BsYXlT
dHJpbmcobykgeworICAgIGlmIChvID09PSBudWxsKQorCXJldHVybiAiKCkiOworICAgIGVsc2Ug
aWYgKG8gPT09IHRydWUpCisJcmV0dXJuICIjdCI7CisgICAgZWxzZSBpZiAobyA9PT0gZmFsc2Up
CisJcmV0dXJuICIjZiI7CisgICAgZWxzZSBpZiAobyA9PT0gdW5kZWZpbmVkKQorCXJldHVybiAi
I3Vuc3BlY2lmaWVkIjsKKyAgICBlbHNlIGlmICh0eXBlb2YgbyA9PT0gJ2Z1bmN0aW9uJykKKwly
ZXR1cm4gIiM8cHJvY2VkdXJlICIgKyBzY19oYXNoKG8pICsgIj4iOworICAgIGVsc2UgaWYgKG8u
c2NfdG9EaXNwbGF5U3RyaW5nKQorCXJldHVybiBvLnNjX3RvRGlzcGxheVN0cmluZygpOworICAg
IGVsc2UKKwlyZXR1cm4gby50b1N0cmluZygpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0g
bmV3bGluZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLworCisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLworZnVuY3Rpb24gc2NfbmV3bGluZShw
KSB7CisgICAgaWYgKHAgPT09IHVuZGVmaW5lZCkgLy8gd2UgYXNzdW1lIG5vdCBnaXZlbgorCXAg
PSBTQ19ERUZBVUxUX09VVDsKKyAgICBwLmFwcGVuZEpTU3RyaW5nKCJcbiIpOworfQorICAgIAor
LyogLS0tLS0tLS0tLS0tLS0tLS0tIHdyaXRlLWNoYXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkg
Ki8KK2Z1bmN0aW9uIHNjX3dyaXRlQ2hhcihjLCBwKSB7CisgICAgaWYgKHAgPT09IHVuZGVmaW5l
ZCkgLy8gd2UgYXNzdW1lIG5vdCBnaXZlbgorCXAgPSBTQ19ERUZBVUxUX09VVDsKKyAgICBwLmFw
cGVuZEpTU3RyaW5nKGMudmFsKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tIHdyaXRlLWNp
cmNsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LworCisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLworZnVuY3Rpb24gc2Nfd3JpdGVDaXJjbGUo
bywgcCkgeworICAgIGlmIChwID09PSB1bmRlZmluZWQpIC8vIHdlIGFzc3VtZSBub3QgZ2l2ZW4K
KwlwID0gU0NfREVGQVVMVF9PVVQ7CisgICAgcC5hcHBlbmRKU1N0cmluZyhzY190b1dyaXRlQ2ly
Y2xlU3RyaW5nKG8pKTsKK30KKworZnVuY3Rpb24gc2NfdG9Xcml0ZUNpcmNsZVN0cmluZyhvKSB7
CisgICAgdmFyIHN5bWIgPSBzY19nZW5zeW0oIndyaXRlQ2lyY2xlIik7CisgICAgdmFyIG5iUG9p
bnRlciA9IG5ldyBPYmplY3QoKTsKKyAgICBuYlBvaW50ZXIubmIgPSAwOworICAgIHNjX3ByZXBX
cml0ZUNpcmNsZShvLCBzeW1iLCBuYlBvaW50ZXIpOworICAgIHJldHVybiBzY19nZW5Ub1dyaXRl
Q2lyY2xlU3RyaW5nKG8sIHN5bWIpOworfQorCitmdW5jdGlvbiBzY19wcmVwV3JpdGVDaXJjbGUo
bywgc3ltYiwgbmJQb2ludGVyKSB7CisgICAgLy8gVE9ETyBzY19TdHJ1Y3QKKyAgICBpZiAobyBp
bnN0YW5jZW9mIHNjX1BhaXIgfHwKKwlvIGluc3RhbmNlb2Ygc2NfVmVjdG9yKSB7CisJaWYgKG9b
c3ltYl0gIT09IHVuZGVmaW5lZCkgeworCSAgICAvLyBub3QgdGhlIGZpcnN0IHZpc2l0LgorCSAg
ICBvW3N5bWJdKys7CisJICAgIC8vIHVubGVzcyB0aGVyZSBpcyBhbHJlYWR5IGEgbnVtYmVyLCBh
c3NpZ24gb25lLgorCSAgICBpZiAoIW9bc3ltYiArICJuYiJdKSBvW3N5bWIgKyAibmIiXSA9IG5i
UG9pbnRlci5uYisrOworCSAgICByZXR1cm47CisJfQorCW9bc3ltYl0gPSAwOworCWlmIChvIGlu
c3RhbmNlb2Ygc2NfUGFpcikgeworCSAgICBzY19wcmVwV3JpdGVDaXJjbGUoby5jYXIsIHN5bWIs
IG5iUG9pbnRlcik7CisJICAgIHNjX3ByZXBXcml0ZUNpcmNsZShvLmNkciwgc3ltYiwgbmJQb2lu
dGVyKTsKKwl9IGVsc2UgeworCSAgICBmb3IgKHZhciBpID0gMDsgaSA8IG8ubGVuZ3RoOyBpKysp
CisJCXNjX3ByZXBXcml0ZUNpcmNsZShvW2ldLCBzeW1iLCBuYlBvaW50ZXIpOworCX0KKyAgICB9
Cit9CisKK2Z1bmN0aW9uIHNjX2dlblRvV3JpdGVDaXJjbGVTdHJpbmcobywgc3ltYikgeworICAg
IGlmICghKG8gaW5zdGFuY2VvZiBzY19QYWlyIHx8CisJICBvIGluc3RhbmNlb2Ygc2NfVmVjdG9y
KSkKKwlyZXR1cm4gc2NfdG9Xcml0ZVN0cmluZyhvKTsKKyAgICByZXR1cm4gby5zY190b1dyaXRl
Q2lyY2xlU3RyaW5nKHN5bWIpOworfQorc2NfUGFpci5wcm90b3R5cGUuc2NfdG9Xcml0ZUNpcmNs
ZVN0cmluZyA9IGZ1bmN0aW9uKHN5bWIsIGluTGlzdCkgeworICAgIGlmICh0aGlzW3N5bWIgKyAi
dXNlIl0pIHsgLy8gdXNlLWZsYWcgaXMgc2V0LiBKdXN0IHVzZSBpdC4KKwl2YXIgbmIgPSB0aGlz
W3N5bWIgKyAibmIiXTsKKwlpZiAodGhpc1tzeW1iXS0tID09PSAwKSB7IC8vIGlmIHdlIGFyZSB0
aGUgbGFzdCB1c2UuIHJlbW92ZSBhbGwgZmllbGRzLgorCSAgICBkZWxldGUgdGhpc1tzeW1iXTsK
KwkgICAgZGVsZXRlIHRoaXNbc3ltYiArICJuYiJdOworCSAgICBkZWxldGUgdGhpc1tzeW1iICsg
InVzZSJdOworCX0KKwlpZiAoaW5MaXN0KQorCSAgICByZXR1cm4gJy4gIycgKyBuYiArICcjJzsK
KwllbHNlCisJICAgIHJldHVybiAnIycgKyBuYiArICcjJzsKKyAgICB9CisgICAgaWYgKHRoaXNb
c3ltYl0tLSA9PT0gMCkgeyAvLyBpZiB3ZSBhcmUgdGhlIGxhc3QgdXNlLiByZW1vdmUgYWxsIGZp
ZWxkcy4KKwlkZWxldGUgdGhpc1tzeW1iXTsKKwlkZWxldGUgdGhpc1tzeW1iICsgIm5iIl07CisJ
ZGVsZXRlIHRoaXNbc3ltYiArICJ1c2UiXTsKKyAgICB9CisKKyAgICB2YXIgcmVzID0gIiI7Cisg
ICAgCisgICAgaWYgKHRoaXNbc3ltYl0gIT09IHVuZGVmaW5lZCkgeyAvLyBpbXBsaWVzID4gMAor
CXRoaXNbc3ltYiArICJ1c2UiXSA9IHRydWU7CisJaWYgKGluTGlzdCkKKwkgICAgcmVzICs9ICcu
ICMnICsgdGhpc1tzeW1iICsgIm5iIl0gKyAnPSc7CisJZWxzZQorCSAgICByZXMgKz0gJyMnICsg
dGhpc1tzeW1iICsgIm5iIl0gKyAnPSc7CisJaW5MaXN0ID0gZmFsc2U7CisgICAgfQorCisgICAg
aWYgKCFpbkxpc3QpCisJcmVzICs9ICIoIjsKKyAgICAKKyAgICAvLyBwcmludCBjYXIKKyAgICBy
ZXMgKz0gc2NfZ2VuVG9Xcml0ZUNpcmNsZVN0cmluZyh0aGlzLmNhciwgc3ltYik7CisgICAgCisg
ICAgaWYgKHNjX2lzUGFpcih0aGlzLmNkcikpIHsKKwlyZXMgKz0gIiAiICsgdGhpcy5jZHIuc2Nf
dG9Xcml0ZUNpcmNsZVN0cmluZyhzeW1iLCB0cnVlKTsKKyAgICB9IGVsc2UgaWYgKHRoaXMuY2Ry
ICE9PSBudWxsKSB7CisJcmVzICs9ICIgLiAiICsgc2NfZ2VuVG9Xcml0ZUNpcmNsZVN0cmluZyh0
aGlzLmNkciwgc3ltYik7CisgICAgfQorICAgIGlmICghaW5MaXN0KQorCXJlcyArPSAiKSI7Cisg
ICAgcmV0dXJuIHJlczsKK307CitzY19WZWN0b3IucHJvdG90eXBlLnNjX3RvV3JpdGVDaXJjbGVT
dHJpbmcgPSBmdW5jdGlvbihzeW1iKSB7CisgICAgaWYgKHRoaXNbc3ltYiArICJ1c2UiXSkgeyAv
LyB1c2UtZmxhZyBpcyBzZXQuIEp1c3QgdXNlIGl0LgorCXZhciBuYiA9IHRoaXNbc3ltYiArICJu
YiJdOworCWlmICh0aGlzW3N5bWJdLS0gPT09IDApIHsgLy8gaWYgd2UgYXJlIHRoZSBsYXN0IHVz
ZS4gcmVtb3ZlIGFsbCBmaWVsZHMuCisJICAgIGRlbGV0ZSB0aGlzW3N5bWJdOworCSAgICBkZWxl
dGUgdGhpc1tzeW1iICsgIm5iIl07CisJICAgIGRlbGV0ZSB0aGlzW3N5bWIgKyAidXNlIl07CisJ
fQorCXJldHVybiAnIycgKyBuYiArICcjJzsKKyAgICB9CisgICAgaWYgKHRoaXNbc3ltYl0tLSA9
PT0gMCkgeyAvLyBpZiB3ZSBhcmUgdGhlIGxhc3QgdXNlLiByZW1vdmUgYWxsIGZpZWxkcy4KKwlk
ZWxldGUgdGhpc1tzeW1iXTsKKwlkZWxldGUgdGhpc1tzeW1iICsgIm5iIl07CisJZGVsZXRlIHRo
aXNbc3ltYiArICJ1c2UiXTsKKyAgICB9CisKKyAgICB2YXIgcmVzID0gIiI7CisgICAgaWYgKHRo
aXNbc3ltYl0gIT09IHVuZGVmaW5lZCkgeyAvLyBpbXBsaWVzID4gMAorCXRoaXNbc3ltYiArICJ1
c2UiXSA9IHRydWU7CisJcmVzICs9ICcjJyArIHRoaXNbc3ltYiArICJuYiJdICsgJz0nOworICAg
IH0KKyAgICByZXMgKz0gIiMoIjsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3Ro
OyBpKyspIHsKKwlyZXMgKz0gc2NfZ2VuVG9Xcml0ZUNpcmNsZVN0cmluZyh0aGlzW2ldLCBzeW1i
KTsKKwlpZiAoaSA8IHRoaXMubGVuZ3RoIC0gMSkgcmVzICs9ICIgIjsKKyAgICB9CisgICAgcmVz
ICs9ICIpIjsKKyAgICByZXR1cm4gcmVzOworfTsKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0g
cHJpbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ki8KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK2Z1bmN0aW9uIHNjX3ByaW50KHMpIHsK
KyAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkgeworCXNjX2Rpc3BsYXkocyk7CisJc2Nf
bmV3bGluZSgpOworICAgIH0KKyAgICBlbHNlIHsKKwlmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3Vt
ZW50cy5sZW5ndGg7IGkrKykKKwkgICAgc2NfZGlzcGxheShhcmd1bWVudHNbaV0pOworCXNjX25l
d2xpbmUoKTsKKyAgICB9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLSBmb3JtYXQgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKiogTUVU
QSAoKGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBzY19mb3JtYXQocywgYXJncykgeworICAgdmFy
IGxlbiA9IHMubGVuZ3RoOworICAgdmFyIHAgPSBuZXcgc2NfU3RyaW5nT3V0cHV0UG9ydCgpOwor
ICAgdmFyIGkgPSAwLCBqID0gMTsKKworICAgd2hpbGUoIGkgPCBsZW4gKSB7CisgICAgICB2YXIg
aTIgPSBzLmluZGV4T2YoIn4iLCBpKTsKKworICAgICAgaWYgKGkyID09IC0xKSB7CisJICBwLmFw
cGVuZEpTU3RyaW5nKCBzLnN1YnN0cmluZyggaSwgbGVuICkgKTsKKwkgIHJldHVybiBwLmNsb3Nl
KCk7CisgICAgICB9IGVsc2UgeworCSBpZiAoaTIgPiBpKSB7CisJICAgIGlmIChpMiA9PSAobGVu
IC0gMSkpIHsKKwkJcC5hcHBlbmRKU1N0cmluZyhzLnN1YnN0cmluZyhpLCBsZW4pKTsKKwkJcmV0
dXJuIHAuY2xvc2UoKTsKKwkgICAgfSBlbHNlIHsKKwkgICAgICAgcC5hcHBlbmRKU1N0cmluZyhz
LnN1YnN0cmluZyhpLCBpMikpOworCSAgICAgICBpID0gaTI7CisJICAgIH0KKwkgfQorCisJIHN3
aXRjaChzLmNoYXJDb2RlQXQoaTIgKyAxKSkgeworCSAgICBjYXNlIDY1OgorCSAgICBjYXNlIDk3
OgorCSAgICAgICAvLyBhCisJICAgICAgIHNjX2Rpc3BsYXkoYXJndW1lbnRzW2pdLCBwKTsKKwkg
ICAgICAgaSArPSAyOyBqKys7CisJICAgICAgIGJyZWFrOworCisJICAgIGNhc2UgODM6CisJICAg
IGNhc2UgMTE1OgorCSAgICAgICAvLyBzCisJICAgICAgIHNjX3dyaXRlKGFyZ3VtZW50c1tqXSwg
cCk7CisJICAgICAgIGkgKz0gMjsgaisrOworCSAgICAgICBicmVhazsKKworCSAgICBjYXNlIDg2
OgorCSAgICBjYXNlIDExODoKKwkgICAgICAgLy8gdgorCSAgICAgICBzY19kaXNwbGF5KGFyZ3Vt
ZW50c1tqXSwgcCk7CisJICAgICAgIHAuYXBwZW5kSlNTdHJpbmcoIlxuIik7CisJICAgICAgIGkg
Kz0gMjsgaisrOworCSAgICAgICBicmVhazsKKworCSAgICBjYXNlIDY3OgorCSAgICBjYXNlIDk5
OgorCSAgICAgICAvLyBjCisJICAgICAgIHAuYXBwZW5kSlNTdHJpbmcoU3RyaW5nLmZyb21DaGFy
Q29kZShhcmd1bWVudHNbal0pKTsKKwkgICAgICAgaSArPSAyOyBqKys7CisJICAgICAgIGJyZWFr
OworCisJICAgIGNhc2UgODg6CisJICAgIGNhc2UgMTIwOgorCSAgICAgICAvLyB4CisJICAgICAg
IHAuYXBwZW5kSlNTdHJpbmcoYXJndW1lbnRzW2pdLnRvU3RyaW5nKDYpKTsKKwkgICAgICAgaSAr
PSAyOyBqKys7CisJICAgICAgIGJyZWFrOworCisJICAgIGNhc2UgNzk6CisJICAgIGNhc2UgMTEx
OgorCSAgICAgICAvLyBvCisJICAgICAgIHAuYXBwZW5kSlNTdHJpbmcoYXJndW1lbnRzW2pdLnRv
U3RyaW5nKDgpKTsKKwkgICAgICAgaSArPSAyOyBqKys7CisJICAgICAgIGJyZWFrOworCisJICAg
IGNhc2UgNjY6CisJICAgIGNhc2UgOTg6CisJICAgICAgIC8vIGIKKwkgICAgICAgcC5hcHBlbmRK
U1N0cmluZyhhcmd1bWVudHNbal0udG9TdHJpbmcoMikpOworCSAgICAgICBpICs9IDI7IGorKzsK
KwkgICAgICAgYnJlYWs7CisJICAgICAgIAorCSAgICBjYXNlIDM3OgorCSAgICBjYXNlIDExMDoK
KwkgICAgICAgLy8gJSwgbgorCSAgICAgICBwLmFwcGVuZEpTU3RyaW5nKCJcbiIpOworCSAgICAg
ICBpICs9IDI7IGJyZWFrOworCisJICAgIGNhc2UgMTE0OgorCSAgICAgICAvLyByCisJICAgICAg
IHAuYXBwZW5kSlNTdHJpbmcoIlxyIik7CisJICAgICAgIGkgKz0gMjsgYnJlYWs7CisKKwkgICAg
Y2FzZSAxMjY6CisJICAgICAgIC8vIH4KKwkgICAgICAgcC5hcHBlbmRKU1N0cmluZygifiIpOwor
CSAgICAgICBpICs9IDI7IGJyZWFrOworCisJICAgIGRlZmF1bHQ6CisJICAgICAgIHNjX2Vycm9y
KCAiZm9ybWF0OiBpbGxlZ2FsIH4iCisJCQkgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKHMuY2hhckNv
ZGVBdChpMiArIDEpKQorCQkJICsgIiBzZXF1ZW5jZSIgKTsKKwkgICAgICAgcmV0dXJuICIiOwor
CSB9CisgICAgICB9CisgICB9CisKKyAgIHJldHVybiBwLmNsb3NlKCk7Cit9CisKKy8qIC0tLS0t
LS0tLS0tLS0tLS0tLSBnbG9iYWwgcG9ydHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordmFyIFNDX0RFRkFVTFRfSU4gPSBuZXcgc2NfRXJy
b3JJbnB1dFBvcnQoKTsKK3ZhciBTQ19ERUZBVUxUX09VVCA9IG5ldyBzY19FcnJvck91dHB1dFBv
cnQoKTsKK3ZhciBTQ19FUlJPUl9PVVQgPSBuZXcgc2NfRXJyb3JPdXRwdXRQb3J0KCk7CisKK3Zh
ciBzY19TWU1CT0xfUFJFRklYID0gIlx1MUU5QyI7Cit2YXIgc2NfS0VZV09SRF9QUkVGSVggPSAi
XHUxRTlEIjsKKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAocGVlcGhvbGUg
KGlkKSkpICovCitmdW5jdGlvbiBzY19qc3N0cmluZzJzdHJpbmcocykgeworICAgIHJldHVybiBz
OworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAgIChwZWVwaG9sZSAocHJl
Zml4ICInXFx1MUU5QycgKyIpKSkKKyovCitmdW5jdGlvbiBzY19qc3N0cmluZzJzeW1ib2wocykg
eworICAgIHJldHVybiBzY19TWU1CT0xfUFJFRklYICsgczsKK30KKworLyoqKiBNRVRBICgoZXhw
b3J0ICN0KQorICAgICAgICAgICAocGVlcGhvbGUgKGlkKSkpCisqLworZnVuY3Rpb24gc2Nfc3Ry
aW5nMmpzc3RyaW5nKHMpIHsKKyAgICByZXR1cm4gczsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0
ICN0KQorICAgICAgICAgICAocGVlcGhvbGUgKHN5bWJvbDJqc3N0cmluZ19pbW11dGFibGUpKSkK
KyovCitmdW5jdGlvbiBzY19zeW1ib2wyanNzdHJpbmcocykgeworICAgIHJldHVybiBzLnNsaWNl
KDEpOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAgIChwZWVwaG9sZSAo
cG9zdGZpeCAiLnNsaWNlKDEpIikpKQorKi8KK2Z1bmN0aW9uIHNjX2tleXdvcmQyanNzdHJpbmco
aykgeworICAgIHJldHVybiBrLnNsaWNlKDEpOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3Qp
CisgICAgICAgICAgIChwZWVwaG9sZSAocHJlZml4ICInXFx1MUU5RCcgKyIpKSkKKyovCitmdW5j
dGlvbiBzY19qc3N0cmluZzJrZXl3b3JkKHMpIHsKKyAgICByZXR1cm4gc2NfS0VZV09SRF9QUkVG
SVggKyBzOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAgICh0eXBlIGJv
b2wpKQorKi8KK2Z1bmN0aW9uIHNjX2lzS2V5d29yZChzKSB7CisgICAgcmV0dXJuICh0eXBlb2Yg
cyA9PT0gInN0cmluZyIpICYmCisJKHMuY2hhckF0KDApID09PSBzY19LRVlXT1JEX1BSRUZJWCk7
Cit9CisKKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK3ZhciBzY19nZW5zeW0gPSBmdW5j
dGlvbigpIHsKKyAgICB2YXIgY291bnRlciA9IDEwMDA7CisgICAgcmV0dXJuIGZ1bmN0aW9uKHN5
bSkgeworCWNvdW50ZXIrKzsKKwlpZiAoIXN5bSkgc3ltID0gc2NfU1lNQk9MX1BSRUZJWDsKKwly
ZXR1cm4gc3ltICsgInMiICsgY291bnRlciArICJ+IiArICJec0MtR2VOc1ltICI7CisgICAgfTsK
K30oKTsKKworCisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAgICh0eXBlIGJvb2wp
KQorKi8KK2Z1bmN0aW9uIHNjX2lzRXF1YWwobzEsIG8yKSB7CisgICAgcmV0dXJuICgobzEgPT09
IG8yKSB8fAorCSAgICAoc2NfaXNQYWlyKG8xKSAmJiBzY19pc1BhaXIobzIpCisJICAgICAmJiBz
Y19pc1BhaXJFcXVhbChvMSwgbzIsIHNjX2lzRXF1YWwpKSB8fAorCSAgICAoc2NfaXNWZWN0b3Io
bzEpICYmIHNjX2lzVmVjdG9yKG8yKQorCSAgICAgJiYgc2NfaXNWZWN0b3JFcXVhbChvMSwgbzIs
IHNjX2lzRXF1YWwpKSk7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCBudW1iZXItPnN5bWJvbCBp
bnRlZ2VyLT5zeW1ib2wpKSAqLworZnVuY3Rpb24gc2NfbnVtYmVyMnN5bWJvbCh4LCByYWRpeCkg
eworICAgIHJldHVybiBzY19TWU1CT0xfUFJFRklYICsgc2NfbnVtYmVyMmpzc3RyaW5nKHgsIHJh
ZGl4KTsKK30KKyAgICAKKy8qKiogTUVUQSAoKGV4cG9ydCBudW1iZXItPnN0cmluZyBpbnRlZ2Vy
LT5zdHJpbmcpKSAqLwordmFyIHNjX251bWJlcjJzdHJpbmcgPSBzY19udW1iZXIyanNzdHJpbmc7
CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBzY19zeW1ib2wybnVtYmVy
KHMsIHJhZGl4KSB7CisgICAgcmV0dXJuIHNjX2pzc3RyaW5nMm51bWJlcihzLnNsaWNlKDEpLCBy
YWRpeCk7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCit2YXIgc2Nfc3RyaW5nMm51
bWJlciA9IHNjX2pzc3RyaW5nMm51bWJlcjsKKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAg
ICAgICAgICAocGVlcGhvbGUgKHByZWZpeCAiKyIgcykpKQorICAgICAgICAgICA7OyBwZWVwaG9s
ZSB3aWxsIG9ubHkgYXBwbHkgaWYgbm8gcmFkaXggaXMgZ2l2ZW4uCisqLworZnVuY3Rpb24gc2Nf
c3RyaW5nMmludGVnZXIocywgcmFkaXgpIHsKKyAgICBpZiAoIXJhZGl4KSByZXR1cm4gK3M7Cisg
ICAgcmV0dXJuIHBhcnNlSW50KHMsIHJhZGl4KTsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0
KQorICAgICAgICAgICAocGVlcGhvbGUgKHByZWZpeCAiKyIpKSkKKyovCitmdW5jdGlvbiBzY19z
dHJpbmcycmVhbChzKSB7CisgICAgcmV0dXJuICtzOworfQorCisKKy8qKiogTUVUQSAoKGV4cG9y
dCAjdCkKKyAgICAgICAgICAgKHR5cGUgYm9vbCkpCisqLworZnVuY3Rpb24gc2NfaXNTeW1ib2wo
cykgeworICAgIHJldHVybiAodHlwZW9mIHMgPT09ICJzdHJpbmciKSAmJgorCShzLmNoYXJBdCgw
KSA9PT0gc2NfU1lNQk9MX1BSRUZJWCk7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAg
ICAgICAgICAgKHBlZXBob2xlIChzeW1ib2wyc3RyaW5nX2ltbXV0YWJsZSkpKQorKi8KK2Z1bmN0
aW9uIHNjX3N5bWJvbDJzdHJpbmcocykgeworICAgIHJldHVybiBzLnNsaWNlKDEpOworfQorCisv
KioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAgIChwZWVwaG9sZSAocHJlZml4ICInXFx1
MUU5QycgKyIpKSkKKyovCitmdW5jdGlvbiBzY19zdHJpbmcyc3ltYm9sKHMpIHsKKyAgICByZXR1
cm4gc2NfU1lNQk9MX1BSRUZJWCArIHM7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCBzeW1ib2wt
YXBwZW5kKQorICAgICAgICAgICAocGVlcGhvbGUgKHN5bWJvbEFwcGVuZF9pbW11dGFibGUpKSkK
KyovCitmdW5jdGlvbiBzY19zeW1ib2xBcHBlbmQoKSB7CisgICAgdmFyIHJlcyA9IHNjX1NZTUJP
TF9QUkVGSVg7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKysp
CisJcmVzICs9IGFyZ3VtZW50c1tpXS5zbGljZSgxKTsKKyAgICByZXR1cm4gcmVzOworfQorCisv
KioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAgIChwZWVwaG9sZSAocG9zdGZpeCAiLnZh
bCIpKSkKKyovCitmdW5jdGlvbiBzY19jaGFyMnN0cmluZyhjKSB7IHJldHVybiBjLnZhbDsgfQor
CisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAgICAgICAgIChwZWVwaG9sZSAoaG9sZSAxICIn
XFx1MUU5QycgKyAiIGMgIi52YWwiKSkpCisqLworZnVuY3Rpb24gc2NfY2hhcjJzeW1ib2woYykg
eyByZXR1cm4gc2NfU1lNQk9MX1BSRUZJWCArIGMudmFsOyB9CisKKy8qKiogTUVUQSAoKGV4cG9y
dCAjdCkKKyAgICAgICAgICAgKHR5cGUgYm9vbCkpCisqLworZnVuY3Rpb24gc2NfaXNTdHJpbmco
cykgeworICAgIHJldHVybiAodHlwZW9mIHMgPT09ICJzdHJpbmciKSAmJgorCShzLmNoYXJBdCgw
KSAhPT0gc2NfU1lNQk9MX1BSRUZJWCk7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICov
Cit2YXIgc2NfbWFrZVN0cmluZyA9IHNjX21ha2Vqc1N0cmluZzsKKworCisvKioqIE1FVEEgKChl
eHBvcnQgI3QpKSAqLworZnVuY3Rpb24gc2Nfc3RyaW5nKCkgeworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKQorCWFyZ3VtZW50c1tpXSA9IGFyZ3VtZW50c1tp
XS52YWw7CisgICAgcmV0dXJuICIiLmNvbmNhdC5hcHBseSgiIiwgYXJndW1lbnRzKTsKK30KKwor
LyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAocGVlcGhvbGUgKHBvc3RmaXggIi5s
ZW5ndGgiKSkpCisqLworZnVuY3Rpb24gc2Nfc3RyaW5nTGVuZ3RoKHMpIHsgcmV0dXJuIHMubGVu
Z3RoOyB9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpICovCitmdW5jdGlvbiBzY19zdHJpbmdS
ZWYocywgaykgeworICAgIHJldHVybiBuZXcgc2NfQ2hhcihzLmNoYXJBdChrKSk7Cit9CisKKy8q
IHRoZXJlJ3Mgbm8gc3RyaW5nU2V0IGluIHRoZSBpbW11dGFibGUgdmVyc2lvbgorZnVuY3Rpb24g
c2Nfc3RyaW5nU2V0KHMsIGssIGMpCisqLworCisKKy8qKiogTUVUQSAoKGV4cG9ydCBzdHJpbmc9
PykKKwkgICAodHlwZSBib29sKQorICAgICAgICAgICAocGVlcGhvbGUgKGhvbGUgMiBzdHIxICIg
PT09ICIgc3RyMikpKQorKi8KK2Z1bmN0aW9uIHNjX2lzU3RyaW5nRXF1YWwoczEsIHMyKSB7Cisg
ICAgcmV0dXJuIHMxID09PSBzMjsKK30KKy8qKiogTUVUQSAoKGV4cG9ydCBzdHJpbmc8PykKKwkg
ICAodHlwZSBib29sKQorICAgICAgICAgICAocGVlcGhvbGUgKGhvbGUgMiBzdHIxICIgPCAiIHN0
cjIpKSkKKyovCitmdW5jdGlvbiBzY19pc1N0cmluZ0xlc3MoczEsIHMyKSB7CisgICAgcmV0dXJu
IHMxIDwgczI7Cit9CisvKioqIE1FVEEgKChleHBvcnQgc3RyaW5nPj8pCisJICAgKHR5cGUgYm9v
bCkKKyAgICAgICAgICAgKHBlZXBob2xlIChob2xlIDIgc3RyMSAiID4gIiBzdHIyKSkpCisqLwor
ZnVuY3Rpb24gc2NfaXNTdHJpbmdHcmVhdGVyKHMxLCBzMikgeworICAgIHJldHVybiBzMSA+IHMy
OworfQorLyoqKiBNRVRBICgoZXhwb3J0IHN0cmluZzw9PykKKwkgICAodHlwZSBib29sKQorICAg
ICAgICAgICAocGVlcGhvbGUgKGhvbGUgMiBzdHIxICIgPD0gIiBzdHIyKSkpCisqLworZnVuY3Rp
b24gc2NfaXNTdHJpbmdMZXNzRXF1YWwoczEsIHMyKSB7CisgICAgcmV0dXJuIHMxIDw9IHMyOwor
fQorLyoqKiBNRVRBICgoZXhwb3J0IHN0cmluZz49PykKKwkgICAodHlwZSBib29sKQorICAgICAg
ICAgICAocGVlcGhvbGUgKGhvbGUgMiBzdHIxICIgPj0gIiBzdHIyKSkpCisqLworZnVuY3Rpb24g
c2NfaXNTdHJpbmdHcmVhdGVyRXF1YWwoczEsIHMyKSB7CisgICAgcmV0dXJuIHMxID49IHMyOwor
fQorLyoqKiBNRVRBICgoZXhwb3J0IHN0cmluZy1jaT0/KQorCSAgICh0eXBlIGJvb2wpCisgICAg
ICAgICAgIChwZWVwaG9sZSAoaG9sZSAyIHN0cjEgIi50b0xvd2VyQ2FzZSgpID09PSAiIHN0cjIg
Ii50b0xvd2VyQ2FzZSgpIikpKQorKi8KK2Z1bmN0aW9uIHNjX2lzU3RyaW5nQ0lFcXVhbChzMSwg
czIpIHsKKyAgICByZXR1cm4gczEudG9Mb3dlckNhc2UoKSA9PT0gczIudG9Mb3dlckNhc2UoKTsK
K30KKy8qKiogTUVUQSAoKGV4cG9ydCBzdHJpbmctY2k8PykKKwkgICAodHlwZSBib29sKQorICAg
ICAgICAgICAocGVlcGhvbGUgKGhvbGUgMiBzdHIxICIudG9Mb3dlckNhc2UoKSA8ICIgc3RyMiAi
LnRvTG93ZXJDYXNlKCkiKSkpCisqLworZnVuY3Rpb24gc2NfaXNTdHJpbmdDSUxlc3MoczEsIHMy
KSB7CisgICAgcmV0dXJuIHMxLnRvTG93ZXJDYXNlKCkgPCBzMi50b0xvd2VyQ2FzZSgpOworfQor
LyoqKiBNRVRBICgoZXhwb3J0IHN0cmluZy1jaT4/KQorCSAgICh0eXBlIGJvb2wpCisgICAgICAg
ICAgIChwZWVwaG9sZSAoaG9sZSAyIHN0cjEgIi50b0xvd2VyQ2FzZSgpID4gIiBzdHIyICIudG9M
b3dlckNhc2UoKSIpKSkKKyovCitmdW5jdGlvbiBzY19pc1N0cmluZ0NJR3JlYXRlcihzMSwgczIp
IHsKKyAgICByZXR1cm4gczEudG9Mb3dlckNhc2UoKSA+IHMyLnRvTG93ZXJDYXNlKCk7Cit9Cisv
KioqIE1FVEEgKChleHBvcnQgc3RyaW5nLWNpPD0/KQorCSAgICh0eXBlIGJvb2wpCisgICAgICAg
ICAgIChwZWVwaG9sZSAoaG9sZSAyIHN0cjEgIi50b0xvd2VyQ2FzZSgpIDw9ICIgc3RyMiAiLnRv
TG93ZXJDYXNlKCkiKSkpCisqLworZnVuY3Rpb24gc2NfaXNTdHJpbmdDSUxlc3NFcXVhbChzMSwg
czIpIHsKKyAgICByZXR1cm4gczEudG9Mb3dlckNhc2UoKSA8PSBzMi50b0xvd2VyQ2FzZSgpOwor
fQorLyoqKiBNRVRBICgoZXhwb3J0IHN0cmluZy1jaT49PykKKwkgICAodHlwZSBib29sKQorICAg
ICAgICAgICAocGVlcGhvbGUgKGhvbGUgMiBzdHIxICIudG9Mb3dlckNhc2UoKSA+PSAiIHN0cjIg
Ii50b0xvd2VyQ2FzZSgpIikpKQorKi8KK2Z1bmN0aW9uIHNjX2lzU3RyaW5nQ0lHcmVhdGVyRXF1
YWwoczEsIHMyKSB7CisgICAgcmV0dXJuIHMxLnRvTG93ZXJDYXNlKCkgPj0gczIudG9Mb3dlckNh
c2UoKTsKK30KKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAocGVlcGhvbGUg
KGhvbGUgMyBzICIuc3Vic3RyaW5nKCIgc3RhcnQgIiwgIiBlbmQgIikiKSkpCisqLworZnVuY3Rp
b24gc2Nfc3Vic3RyaW5nKHMsIHN0YXJ0LCBlbmQpIHsKKyAgICByZXR1cm4gcy5zdWJzdHJpbmco
c3RhcnQsIGVuZCk7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkpCisqLworZnVuY3Rpb24g
c2NfaXNTdWJzdHJpbmdfYXQoczEsIHMyLCBpKSB7CisgICAgcmV0dXJuIHMyID09IHMxLnN1YnN0
cmluZyhpLCBpKyBzMi5sZW5ndGgpOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpCisgICAg
ICAgICAgIChwZWVwaG9sZSAoaW5maXggMCAjZiAiKyIgIicnIikpKQorKi8KK2Z1bmN0aW9uIHNj
X3N0cmluZ0FwcGVuZCgpIHsKKyAgICByZXR1cm4gIiIuY29uY2F0LmFwcGx5KCIiLCBhcmd1bWVu
dHMpOworfQorCisvKioqIE1FVEEgKChleHBvcnQgI3QpKSAqLwordmFyIHNjX3N0cmluZzJsaXN0
ID0gc2NfanNzdHJpbmcybGlzdDsKKworLyoqKiBNRVRBICgoZXhwb3J0ICN0KSkgKi8KK3ZhciBz
Y19saXN0MnN0cmluZyA9IHNjX2xpc3QyanNzdHJpbmc7CisKKy8qKiogTUVUQSAoKGV4cG9ydCAj
dCkKKyAgICAgICAgICAgKHBlZXBob2xlIChpZCkpKQorKi8KK2Z1bmN0aW9uIHNjX3N0cmluZ0Nv
cHkocykgeworICAgIHJldHVybiBzOworfQorCisvKiB0aGVyZSdzIG5vIHN0cmluZy1maWxsIGlu
IHRoZSBpbW11dGFibGUgdmVyc2lvbgorZnVuY3Rpb24gc2Nfc3RyaW5nRmlsbChzLCBjKQorKi8K
KworLyoqKiBNRVRBICgoZXhwb3J0ICN0KQorICAgICAgICAgICAocGVlcGhvbGUgKHBvc3RmaXgg
Ii5zbGljZSgxKSIpKSkKKyovCitmdW5jdGlvbiBzY19rZXl3b3JkMnN0cmluZyhvKSB7CisgICAg
cmV0dXJuIG8uc2xpY2UoMSk7Cit9CisKKy8qKiogTUVUQSAoKGV4cG9ydCAjdCkKKyAgICAgICAg
ICAgKHBlZXBob2xlIChwcmVmaXggIidcXHUxRTlEJyArIikpKQorKi8KK2Z1bmN0aW9uIHNjX3N0
cmluZzJrZXl3b3JkKG8pIHsKKyAgICByZXR1cm4gc2NfS0VZV09SRF9QUkVGSVggKyBvOworfQor
CitTdHJpbmcucHJvdG90eXBlLnNjX3RvRGlzcGxheVN0cmluZyA9IGZ1bmN0aW9uKCkgeworICAg
IGlmICh0aGlzLmNoYXJBdCgwKSA9PT0gc2NfU1lNQk9MX1BSRUZJWCkKKwkvLyBUT0RPOiBjYXJl
IGZvciBzeW1ib2xzIHdpdGggc3BhY2VzIChlc2NhcGUtY2hhcnMgc3ltYm9scykuCisJcmV0dXJu
IHRoaXMuc2xpY2UoMSk7CisgICAgZWxzZSBpZiAodGhpcy5jaGFyQXQoMCkgPT09IHNjX0tFWVdP
UkRfUFJFRklYKQorCXJldHVybiAiOiIgKyB0aGlzLnNsaWNlKDEpOworICAgIGVsc2UKKwlyZXR1
cm4gdGhpcy50b1N0cmluZygpOworfTsKKworU3RyaW5nLnByb3RvdHlwZS5zY190b1dyaXRlU3Ry
aW5nID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKHRoaXMuY2hhckF0KDApID09PSBzY19TWU1CT0xf
UFJFRklYKQorCS8vIFRPRE86IGNhcmUgZm9yIHN5bWJvbHMgd2l0aCBzcGFjZXMgKGVzY2FwZS1j
aGFycyBzeW1ib2xzKS4KKwlyZXR1cm4gdGhpcy5zbGljZSgxKTsKKyAgICBlbHNlIGlmICh0aGlz
LmNoYXJBdCgwKSA9PT0gc2NfS0VZV09SRF9QUkVGSVgpCisJcmV0dXJuICI6IiArIHRoaXMuc2xp
Y2UoMSk7CisgICAgZWxzZQorCXJldHVybiAnIicgKyBzY19lc2NhcGVXcml0ZVN0cmluZyh0aGlz
KSArICciJzsKK307CisvKiBFeHBvcnRlZCBWYXJpYWJsZXMgKi8KK3ZhciBCZ0xfdGVzdHpkMmJv
eWVyemQyOwordmFyIEJnTF9uYm95ZXJ6ZDJiZW5jaG1hcmt6ZDI7Cit2YXIgQmdMX3NldHVwemQy
Ym95ZXJ6ZDI7CisvKiBFbmQgRXhwb3J0cyAqLworCit2YXIgdHJhbnNsYXRlX3Rlcm1fbmJveWVy
OwordmFyIHRyYW5zbGF0ZV9hcmdzX25ib3llcjsKK3ZhciB1bnRyYW5zbGF0ZV90ZXJtX25ib3ll
cjsKK3ZhciBCZ0xfc2Nfc3ltYm9semQyemUzc3ltYm9semQycmVjb3JkXzF6ZTNfbmJveWVyOwor
dmFyIEJnTF9zY196YTJzeW1ib2x6ZDJyZWNvcmRzemQyYWxpc3R6YTJfMnowMF9uYm95ZXI7Cit2
YXIgdHJhbnNsYXRlX2FsaXN0X25ib3llcjsKK3ZhciBhcHBseV9zdWJzdF9uYm95ZXI7Cit2YXIg
YXBwbHlfc3Vic3RfbHN0X25ib3llcjsKK3ZhciB0YXV0b2xvZ3lwX25ib3llcjsKK3ZhciBpZl9j
b25zdHJ1Y3Rvcl9uYm95ZXI7Cit2YXIgcmV3cml0ZV9jb3VudF9uYm95ZXI7Cit2YXIgcmV3cml0
ZV9uYm95ZXI7Cit2YXIgcmV3cml0ZV9hcmdzX25ib3llcjsKK3ZhciB1bmlmeV9zdWJzdF9uYm95
ZXI7Cit2YXIgb25lX3dheV91bmlmeTFfbmJveWVyOwordmFyIGZhbHNlX3Rlcm1fbmJveWVyOwor
dmFyIHRydWVfdGVybV9uYm95ZXI7Cit2YXIgdHJhbnNfb2ZfaW1wbGllczFfbmJveWVyOwordmFy
IGlzX3Rlcm1fZXF1YWxfbmJveWVyOwordmFyIGlzX3Rlcm1fbWVtYmVyX25ib3llcjsKK3ZhciBj
b25zdF9uYm95ZXI7Cit2YXIgc2NfY29uc3RfM19uYm95ZXI7Cit2YXIgc2NfY29uc3RfNF9uYm95
ZXI7Cit7CisgICAgKHNjX2NvbnN0XzRfbmJveWVyID0gKG5ldyBzY19QYWlyKCJcdTFFOUNpbXBs
aWVzIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNhbmQiLChuZXcgc2NfUGFpcigo
bmV3IHNjX1BhaXIoIlx1MUU5Q2ltcGxpZXMiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBz
Y19QYWlyKCJcdTFFOUN5IixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1
MUU5Q2FuZCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDaW1wbGllcyIsKG5ldyBz
Y19QYWlyKCJcdTFFOUN5IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3oiLG51bGwpKSkpKSksKG5ldyBz
Y19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDYW5kIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWly
KCJcdTFFOUNpbXBsaWVzIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3oiLChuZXcgc2NfUGFpcigiXHUx
RTlDdSIsbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNpbXBsaWVz
IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3UiLChuZXcgc2NfUGFpcigiXHUxRTlDdyIsbnVsbCkpKSkp
KSxudWxsKSkpKSkpLG51bGwpKSkpKSksbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19Q
YWlyKCJcdTFFOUNpbXBsaWVzIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigi
XHUxRTlDdyIsbnVsbCkpKSkpKSxudWxsKSkpKSkpKTsKKyAgICAoc2NfY29uc3RfM19uYm95ZXIg
PSBzY19saXN0KChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNj
X1BhaXIoIlx1MUU5Q2NvbXBpbGUiLChuZXcgc2NfUGFpcigiXHUxRTlDZm9ybSIsbnVsbCkpKSks
KG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcmV2ZXJzZSIsKG5ldyBzY19QYWlyKChu
ZXcgc2NfUGFpcigiXHUxRTlDY29kZWdlbiIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUx
RTlDb3B0aW1pemUiLChuZXcgc2NfUGFpcigiXHUxRTlDZm9ybSIsbnVsbCkpKSksKG5ldyBzY19Q
YWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbmlsIixudWxsKSksbnVsbCkpKSkpKSxudWxsKSkpKSxu
dWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBz
Y19QYWlyKCJcdTFFOUNlcXAiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKCJc
dTFFOUN5IixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFs
IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNmaXgiLChuZXcgc2NfUGFpcigiXHUx
RTlDeCIsbnVsbCkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZml4IiwobmV3
IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpLG51bGwpKSkpKSksbnVsbCkpKSkpKSwgKG5ldyBz
Y19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZ3Jl
YXRlcnAiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IixudWxs
KSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2xlc3NwIiwobmV3IHNjX1Bh
aXIoIlx1MUU5Q3kiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsbnVsbCkpKSkpKSxudWxsKSkpKSkp
LCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJc
dTFFOUNsZXNzZXFwIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigiXHUxRTlD
eSIsbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNub3QiLChuZXcg
c2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2xlc3NwIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3ki
LChuZXcgc2NfUGFpcigiXHUxRTlDeCIsbnVsbCkpKSkpKSxudWxsKSkpKSxudWxsKSkpKSkpLCAo
bmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFF
OUNncmVhdGVyZXFwIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigiXHUxRTlD
eSIsbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNub3QiLChuZXcg
c2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2xlc3NwIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3gi
LChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSkpKSxudWxsKSkpKSxudWxsKSkpKSkpLCAo
bmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFF
OUNib29sZWFuIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51bGwpKSkpLChuZXcgc2NfUGFpcigo
bmV3IHNjX1BhaXIoIlx1MUU5Q29yIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNl
cXVhbCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJc
dTFFOUN0IixudWxsKSksbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFF
OUNlcXVhbCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWly
KCJcdTFFOUNmIixudWxsKSksbnVsbCkpKSkpKSxudWxsKSkpKSkpLG51bGwpKSkpKSksIChuZXcg
c2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2lm
ZiIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkp
KSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDYW5kIiwobmV3IHNjX1BhaXIoKG5l
dyBzY19QYWlyKCJcdTFFOUNpbXBsaWVzIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2Nf
UGFpcigiXHUxRTlDeSIsbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFF
OUNpbXBsaWVzIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIs
bnVsbCkpKSkpKSxudWxsKSkpKSkpLG51bGwpKSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1
YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2V2ZW4xIiwobmV3IHNjX1BhaXIo
Ilx1MUU5Q3giLG51bGwpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2lmIiwo
bmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN6ZXJvcCIsKG5ldyBzY19QYWlyKCJcdTFF
OUN4IixudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN0IixudWxsKSks
KG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDb2RkIiwobmV3IHNjX1BhaXIoKG5ldyBz
Y19QYWlyKCJcdTFFOUNzdWIxIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51bGwpKSkpLG51bGwp
KSkpLG51bGwpKSkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwo
bmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNjb3VudHBzLSIsKG5ldyBzY19QYWlyKCJc
dTFFOUNsIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3ByZWQiLG51bGwpKSkpKSksKG5ldyBzY19QYWly
KChuZXcgc2NfUGFpcigiXHUxRTlDY291bnRwcy1sb29wIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2wi
LChuZXcgc2NfUGFpcigiXHUxRTlDcHJlZCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUx
RTlDemVybyIsbnVsbCkpLG51bGwpKSkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1
MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNmYWN0LSIsKG5ldyBz
Y19QYWlyKCJcdTFFOUNpIixudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFF
OUNmYWN0LWxvb3AiLChuZXcgc2NfUGFpcigiXHUxRTlDaSIsKG5ldyBzY19QYWlyKCgxKSxudWxs
KSkpKSkpLG51bGwpKSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFp
cigobmV3IHNjX1BhaXIoIlx1MUU5Q3JldmVyc2UtIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51
bGwpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3JldmVyc2UtbG9vcCIsKG5l
dyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNuaWwi
LG51bGwpKSxudWxsKSkpKSkpLG51bGwpKSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwi
LChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2RpdmlkZXMiLChuZXcgc2NfUGFpcigi
XHUxRTlDeCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigo
bmV3IHNjX1BhaXIoIlx1MUU5Q3plcm9wIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFF
OUNyZW1haW5kZXIiLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsKG5ldyBzY19QYWlyKCJcdTFFOUN4
IixudWxsKSkpKSkpLG51bGwpKSkpLG51bGwpKSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1
YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2Fzc3VtZS10cnVlIiwobmV3IHNj
X1BhaXIoIlx1MUU5Q3ZhciIsKG5ldyBzY19QYWlyKCJcdTFFOUNhbGlzdCIsbnVsbCkpKSkpKSwo
bmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNjb25zIiwobmV3IHNjX1BhaXIoKG5ldyBz
Y19QYWlyKCJcdTFFOUNjb25zIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3ZhciIsKG5ldyBzY19QYWly
KChuZXcgc2NfUGFpcigiXHUxRTlDdCIsbnVsbCkpLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKCJc
dTFFOUNhbGlzdCIsbnVsbCkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2Vx
dWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNhc3N1bWUtZmFsc2UiLChuZXcg
c2NfUGFpcigiXHUxRTlDdmFyIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2FsaXN0IixudWxsKSkpKSkp
LChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2NvbnMiLChuZXcgc2NfUGFpcigobmV3
IHNjX1BhaXIoIlx1MUU5Q2NvbnMiLChuZXcgc2NfUGFpcigiXHUxRTlDdmFyIiwobmV3IHNjX1Bh
aXIoKG5ldyBzY19QYWlyKCJcdTFFOUNmIixudWxsKSksbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIo
Ilx1MUU5Q2FsaXN0IixudWxsKSkpKSkpLG51bGwpKSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlD
ZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3RhdXRvbG9neS1jaGVja2Vy
IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51bGwpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1Bh
aXIoIlx1MUU5Q3RhdXRvbG9neXAiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q25v
cm1hbGl6ZSIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IixudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5l
dyBzY19QYWlyKCJcdTFFOUNuaWwiLG51bGwpKSxudWxsKSkpKSkpLG51bGwpKSkpKSksIChuZXcg
c2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2Zh
bHNpZnkiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsbnVsbCkpKSksKG5ldyBzY19QYWlyKChuZXcg
c2NfUGFpcigiXHUxRTlDZmFsc2lmeTEiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5
Q25vcm1hbGl6ZSIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IixudWxsKSkpKSwobmV3IHNjX1BhaXIo
KG5ldyBzY19QYWlyKCJcdTFFOUNuaWwiLG51bGwpKSxudWxsKSkpKSkpLG51bGwpKSkpKSksIChu
ZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5
Q3ByaW1lIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51bGwpKSkpLChuZXcgc2NfUGFpcigobmV3
IHNjX1BhaXIoIlx1MUU5Q2FuZCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbm90
IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN6ZXJvcCIsKG5ldyBzY19QYWlyKCJc
dTFFOUN4IixudWxsKSkpKSxudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFF
OUNub3QiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1Bh
aXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2FkZDEiLChuZXcg
c2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3plcm8iLG51bGwpKSxudWxsKSkpKSxudWxsKSkp
KSkpLG51bGwpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3ByaW1lMSIsKG5l
dyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNzdWIx
IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51bGwpKSkpLG51bGwpKSkpKSksbnVsbCkpKSkpKSkp
LG51bGwpKSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3
IHNjX1BhaXIoIlx1MUU5Q2FuZCIsKG5ldyBzY19QYWlyKCJcdTFFOUNwIiwobmV3IHNjX1BhaXIo
Ilx1MUU5Q3EiLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDaWYi
LChuZXcgc2NfUGFpcigiXHUxRTlDcCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlD
aWYiLChuZXcgc2NfUGFpcigiXHUxRTlDcSIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUx
RTlDdCIsbnVsbCkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2YiLG51bGwpKSxu
dWxsKSkpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZiIsbnVsbCkpLG51
bGwpKSkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNj
X1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNvciIsKG5ldyBzY19QYWlyKCJcdTFFOUNwIiwobmV3
IHNjX1BhaXIoIlx1MUU5Q3EiLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigi
XHUxRTlDaWYiLChuZXcgc2NfUGFpcigiXHUxRTlDcCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFp
cigiXHUxRTlDdCIsbnVsbCkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2lmIiwo
bmV3IHNjX1BhaXIoIlx1MUU5Q3EiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3Qi
LG51bGwpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNmIixudWxsKSksbnVsbCkp
KSkpKSkpLG51bGwpKSkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFs
IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNub3QiLChuZXcgc2NfUGFpcigiXHUx
RTlDcCIsbnVsbCkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDaWYiLChuZXcg
c2NfUGFpcigiXHUxRTlDcCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZiIsbnVs
bCkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3QiLG51bGwpKSxudWxsKSkpKSkp
KSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChu
ZXcgc2NfUGFpcigiXHUxRTlDaW1wbGllcyIsKG5ldyBzY19QYWlyKCJcdTFFOUNwIiwobmV3IHNj
X1BhaXIoIlx1MUU5Q3EiLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUx
RTlDaWYiLChuZXcgc2NfUGFpcigiXHUxRTlDcCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigi
XHUxRTlDaWYiLChuZXcgc2NfUGFpcigiXHUxRTlDcSIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFp
cigiXHUxRTlDdCIsbnVsbCkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2YiLG51
bGwpKSxudWxsKSkpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDdCIsbnVs
bCkpLG51bGwpKSkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwo
bmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNmaXgiLChuZXcgc2NfUGFpcigiXHUxRTlD
eCIsbnVsbCkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDaWYiLChuZXcgc2Nf
UGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q251bWJlcnAiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIs
bnVsbCkpKSksKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWly
KCJcdTFFOUN6ZXJvIixudWxsKSksbnVsbCkpKSkpKSkpLG51bGwpKSkpKSksIChuZXcgc2NfUGFp
cigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2lmIiwobmV3
IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNpZiIsKG5ldyBzY19QYWlyKCJcdTFFOUNhIiwo
bmV3IHNjX1BhaXIoIlx1MUU5Q2IiLChuZXcgc2NfUGFpcigiXHUxRTlDYyIsbnVsbCkpKSkpKSkp
LChuZXcgc2NfUGFpcigiXHUxRTlDZCIsKG5ldyBzY19QYWlyKCJcdTFFOUNlIixudWxsKSkpKSkp
KSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDaWYiLChuZXcgc2NfUGFpcigiXHUx
RTlDYSIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDaWYiLChuZXcgc2NfUGFpcigi
XHUxRTlDYiIsKG5ldyBzY19QYWlyKCJcdTFFOUNkIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2UiLG51
bGwpKSkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNpZiIsKG5ldyBzY19Q
YWlyKCJcdTFFOUNjIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2QiLChuZXcgc2NfUGFpcigiXHUxRTlD
ZSIsbnVsbCkpKSkpKSkpLG51bGwpKSkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1
MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN6ZXJvcCIsKG5ldyBz
Y19QYWlyKCJcdTFFOUN4IixudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFF
OUNvciIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFp
cigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDemVybyIsbnVsbCkp
LG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbm90IiwobmV3IHNj
X1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNudW1iZXJwIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3gi
LG51bGwpKSkpLG51bGwpKSkpLG51bGwpKSkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJc
dTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcGx1cyIsKG5ldyBz
Y19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcGx1cyIsKG5ldyBzY19QYWlyKCJcdTFFOUN4Iiwo
bmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKCJcdTFFOUN6Iixu
dWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3BsdXMiLChuZXcgc2Nf
UGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcGx1cyIsKG5l
dyBzY19QYWlyKCJcdTFFOUN5IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3oiLG51bGwpKSkpKSksbnVs
bCkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1Bh
aXIoKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigi
XHUxRTlDcGx1cyIsKG5ldyBzY19QYWlyKCJcdTFFOUNhIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2Ii
LG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDemVybyIsbnVsbCkp
LG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDYW5kIiwobmV3IHNj
X1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN6ZXJvcCIsKG5ldyBzY19QYWlyKCJcdTFFOUNhIixu
dWxsKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN6ZXJvcCIsKG5ldyBzY19Q
YWlyKCJcdTFFOUNiIixudWxsKSkpKSxudWxsKSkpKSkpLG51bGwpKSkpKSksIChuZXcgc2NfUGFp
cigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2RpZmZlcmVu
Y2UiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IixudWxsKSkp
KSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3plcm8iLG51bGwpKSxudWxsKSkp
KSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWly
KCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcGx1cyIsKG5l
dyBzY19QYWlyKCJcdTFFOUNhIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2IiLG51bGwpKSkpKSksKG5l
dyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcGx1cyIsKG5ldyBzY19QYWlyKCJcdTFFOUNh
IiwobmV3IHNjX1BhaXIoIlx1MUU5Q2MiLG51bGwpKSkpKSksbnVsbCkpKSkpKSwobmV3IHNjX1Bh
aXIoKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigi
XHUxRTlDZml4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q2IiLG51bGwpKSkpLChuZXcgc2NfUGFpcigo
bmV3IHNjX1BhaXIoIlx1MUU5Q2ZpeCIsKG5ldyBzY19QYWlyKCJcdTFFOUNjIixudWxsKSkpKSxu
dWxsKSkpKSkpLG51bGwpKSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2Nf
UGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWly
KCJcdTFFOUN6ZXJvIixudWxsKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZGlm
ZmVyZW5jZSIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51
bGwpKSkpKSksbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNub3Qi
LChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2xlc3NwIiwobmV3IHNjX1BhaXIoIlx1
MUU5Q3kiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsbnVsbCkpKSkpKSxudWxsKSkpKSxudWxsKSkp
KSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWly
KCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoKG5ldyBz
Y19QYWlyKCJcdTFFOUNkaWZmZXJlbmNlIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2Nf
UGFpcigiXHUxRTlDeSIsbnVsbCkpKSkpKSxudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNj
X1BhaXIoIlx1MUU5Q2FuZCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbnVtYmVy
cCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IixudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19Q
YWlyKCJcdTFFOUNvciIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChu
ZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDemVy
byIsbnVsbCkpLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDemVy
b3AiLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSksbnVsbCkpKSkpKSxudWxsKSkpKSkp
LG51bGwpKSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3
IHNjX1BhaXIoIlx1MUU5Q21lYW5pbmciLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5
Q3BsdXMtdHJlZSIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDYXBwZW5kIiwobmV3
IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSkpKSxudWxs
KSkpKSwobmV3IHNjX1BhaXIoIlx1MUU5Q2EiLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcg
c2NfUGFpcigiXHUxRTlDcGx1cyIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbWVh
bmluZyIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcGx1cy10cmVlIiwobmV3IHNj
X1BhaXIoIlx1MUU5Q3giLG51bGwpKSkpLChuZXcgc2NfUGFpcigiXHUxRTlDYSIsbnVsbCkpKSkp
KSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNtZWFuaW5nIiwobmV3IHNjX1BhaXIo
KG5ldyBzY19QYWlyKCJcdTFFOUNwbHVzLXRyZWUiLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVs
bCkpKSksKG5ldyBzY19QYWlyKCJcdTFFOUNhIixudWxsKSkpKSkpLG51bGwpKSkpKSksbnVsbCkp
KSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFp
cigiXHUxRTlDbWVhbmluZyIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcGx1cy10
cmVlIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNwbHVzLWZyaW5nZSIsKG5ldyBz
Y19QYWlyKCJcdTFFOUN4IixudWxsKSkpKSxudWxsKSkpKSwobmV3IHNjX1BhaXIoIlx1MUU5Q2Ei
LG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZml4IiwobmV3IHNj
X1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNtZWFuaW5nIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3gi
LChuZXcgc2NfUGFpcigiXHUxRTlDYSIsbnVsbCkpKSkpKSxudWxsKSkpKSxudWxsKSkpKSkpLCAo
bmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFF
OUNhcHBlbmQiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2FwcGVuZCIsKG5ldyBz
Y19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpKSksKG5ldyBz
Y19QYWlyKCJcdTFFOUN6IixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1
MUU5Q2FwcGVuZCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoKG5ldyBzY19Q
YWlyKCJcdTFFOUNhcHBlbmQiLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsKG5ldyBzY19QYWlyKCJc
dTFFOUN6IixudWxsKSkpKSkpLG51bGwpKSkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJc
dTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcmV2ZXJzZSIsKG5l
dyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDYXBwZW5kIiwobmV3IHNjX1BhaXIoIlx1MUU5
Q2EiLChuZXcgc2NfUGFpcigiXHUxRTlDYiIsbnVsbCkpKSkpKSxudWxsKSkpKSwobmV3IHNjX1Bh
aXIoKG5ldyBzY19QYWlyKCJcdTFFOUNhcHBlbmQiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIo
Ilx1MUU5Q3JldmVyc2UiLChuZXcgc2NfUGFpcigiXHUxRTlDYiIsbnVsbCkpKSksKG5ldyBzY19Q
YWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcmV2ZXJzZSIsKG5ldyBzY19QYWlyKCJcdTFFOUNhIixu
dWxsKSkpKSxudWxsKSkpKSkpLG51bGwpKSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwi
LChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3RpbWVzIiwobmV3IHNjX1BhaXIoIlx1
MUU5Q3giLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3BsdXMiLChuZXcgc2NfUGFp
cigiXHUxRTlDeSIsKG5ldyBzY19QYWlyKCJcdTFFOUN6IixudWxsKSkpKSkpLG51bGwpKSkpKSks
KG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcGx1cyIsKG5ldyBzY19QYWlyKChuZXcg
c2NfUGFpcigiXHUxRTlDdGltZXMiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWly
KCJcdTFFOUN5IixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3Rp
bWVzIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigiXHUxRTlDeiIsbnVsbCkp
KSkpKSxudWxsKSkpKSkpLG51bGwpKSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChu
ZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3RpbWVzIiwobmV3IHNjX1BhaXIoKG5ldyBz
Y19QYWlyKCJcdTFFOUN0aW1lcyIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIo
Ilx1MUU5Q3kiLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKCJcdTFFOUN6IixudWxsKSkpKSkpLChu
ZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3RpbWVzIiwobmV3IHNjX1BhaXIoIlx1MUU5
Q3giLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3RpbWVzIiwobmV3IHNjX1BhaXIo
Ilx1MUU5Q3kiLChuZXcgc2NfUGFpcigiXHUxRTlDeiIsbnVsbCkpKSkpKSxudWxsKSkpKSkpLG51
bGwpKSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNj
X1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN0aW1l
cyIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkp
KSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDemVybyIsbnVsbCkpLG51bGwpKSkp
KSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDb3IiLChuZXcgc2NfUGFpcigobmV3
IHNjX1BhaXIoIlx1MUU5Q3plcm9wIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51bGwpKSkpLChu
ZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3plcm9wIiwobmV3IHNjX1BhaXIoIlx1MUU5
Q3kiLG51bGwpKSkpLG51bGwpKSkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNl
cXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZXhlYyIsKG5ldyBzY19QYWly
KChuZXcgc2NfUGFpcigiXHUxRTlDYXBwZW5kIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcg
c2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoIlx1MUU5Q3BkcyIsKG5l
dyBzY19QYWlyKCJcdTFFOUNlbnZybiIsbnVsbCkpKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNj
X1BhaXIoIlx1MUU5Q2V4ZWMiLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsKG5ldyBzY19QYWlyKChu
ZXcgc2NfUGFpcigiXHUxRTlDZXhlYyIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1Bh
aXIoIlx1MUU5Q3BkcyIsKG5ldyBzY19QYWlyKCJcdTFFOUNlbnZybiIsbnVsbCkpKSkpKSkpLChu
ZXcgc2NfUGFpcigiXHUxRTlDZW52cm4iLG51bGwpKSkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNj
X1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNtYy1m
bGF0dGVuIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVs
bCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNhcHBlbmQiLChuZXcgc2Nf
UGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2ZsYXR0ZW4iLChuZXcgc2NfUGFpcigiXHUxRTlDeCIs
bnVsbCkpKSksKG5ldyBzY19QYWlyKCJcdTFFOUN5IixudWxsKSkpKSkpLG51bGwpKSkpKSksIChu
ZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5
Q21lbWJlciIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWly
KCJcdTFFOUNhcHBlbmQiLChuZXcgc2NfUGFpcigiXHUxRTlDYSIsKG5ldyBzY19QYWlyKCJcdTFF
OUNiIixudWxsKSkpKSkpLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUx
RTlDb3IiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q21lbWJlciIsKG5ldyBzY19Q
YWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q2EiLG51bGwpKSkpKSksKG5ldyBzY19Q
YWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbWVtYmVyIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChu
ZXcgc2NfUGFpcigiXHUxRTlDYiIsbnVsbCkpKSkpKSxudWxsKSkpKSkpLG51bGwpKSkpKSksIChu
ZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5
Q21lbWJlciIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWly
KCJcdTFFOUNyZXZlcnNlIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpLG51bGwpKSkp
KSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbWVtYmVyIiwobmV3IHNjX1BhaXIo
Ilx1MUU5Q3giLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSkpKSxudWxsKSkpKSkpLCAo
bmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFF
OUNsZW5ndGgiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3JldmVyc2UiLChuZXcg
c2NfUGFpcigiXHUxRTlDeCIsbnVsbCkpKSksbnVsbCkpKSksKG5ldyBzY19QYWlyKChuZXcgc2Nf
UGFpcigiXHUxRTlDbGVuZ3RoIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51bGwpKSkpLG51bGwp
KSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1Bh
aXIoIlx1MUU5Q21lbWJlciIsKG5ldyBzY19QYWlyKCJcdTFFOUNhIiwobmV3IHNjX1BhaXIoKG5l
dyBzY19QYWlyKCJcdTFFOUNpbnRlcnNlY3QiLChuZXcgc2NfUGFpcigiXHUxRTlDYiIsKG5ldyBz
Y19QYWlyKCJcdTFFOUNjIixudWxsKSkpKSkpLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcg
c2NfUGFpcigiXHUxRTlDYW5kIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNtZW1i
ZXIiLChuZXcgc2NfUGFpcigiXHUxRTlDYSIsKG5ldyBzY19QYWlyKCJcdTFFOUNiIixudWxsKSkp
KSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q21lbWJlciIsKG5ldyBzY19QYWly
KCJcdTFFOUNhIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2MiLG51bGwpKSkpKSksbnVsbCkpKSkpKSxu
dWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBz
Y19QYWlyKCJcdTFFOUNudGgiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3plcm8i
LG51bGwpKSwobmV3IHNjX1BhaXIoIlx1MUU5Q2kiLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChu
ZXcgc2NfUGFpcigiXHUxRTlDemVybyIsbnVsbCkpLG51bGwpKSkpKSksIChuZXcgc2NfUGFpcigi
XHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2V4cCIsKG5ldyBz
Y19QYWlyKCJcdTFFOUNpIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNwbHVzIiwo
bmV3IHNjX1BhaXIoIlx1MUU5Q2oiLChuZXcgc2NfUGFpcigiXHUxRTlDayIsbnVsbCkpKSkpKSxu
dWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3RpbWVzIiwobmV3IHNj
X1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNleHAiLChuZXcgc2NfUGFpcigiXHUxRTlDaSIsKG5l
dyBzY19QYWlyKCJcdTFFOUNqIixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIo
Ilx1MUU5Q2V4cCIsKG5ldyBzY19QYWlyKCJcdTFFOUNpIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2si
LG51bGwpKSkpKSksbnVsbCkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2Vx
dWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNleHAiLChuZXcgc2NfUGFpcigi
XHUxRTlDaSIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDdGltZXMiLChuZXcgc2Nf
UGFpcigiXHUxRTlDaiIsKG5ldyBzY19QYWlyKCJcdTFFOUNrIixudWxsKSkpKSkpLG51bGwpKSkp
KSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZXhwIiwobmV3IHNjX1BhaXIoKG5l
dyBzY19QYWlyKCJcdTFFOUNleHAiLChuZXcgc2NfUGFpcigiXHUxRTlDaSIsKG5ldyBzY19QYWly
KCJcdTFFOUNqIixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigiXHUxRTlDayIsbnVsbCkpKSkpKSxu
dWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBz
Y19QYWlyKCJcdTFFOUNyZXZlcnNlLWxvb3AiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBz
Y19QYWlyKCJcdTFFOUN5IixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1
MUU5Q2FwcGVuZCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcmV2ZXJzZSIsKG5l
dyBzY19QYWlyKCJcdTFFOUN4IixudWxsKSkpKSwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwp
KSkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWly
KChuZXcgc2NfUGFpcigiXHUxRTlDcmV2ZXJzZS1sb29wIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3gi
LChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q25pbCIsbnVsbCkpLG51bGwpKSkpKSks
KG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcmV2ZXJzZSIsKG5ldyBzY19QYWlyKCJc
dTFFOUN4IixudWxsKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwo
bmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNjb3VudC1saXN0IiwobmV3IHNjX1BhaXIo
Ilx1MUU5Q3oiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3NvcnQtbHAiLChuZXcg
c2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IixudWxsKSkpKSkpLG51bGwp
KSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcGx1cyIsKG5ldyBzY19QYWly
KChuZXcgc2NfUGFpcigiXHUxRTlDY291bnQtbGlzdCIsKG5ldyBzY19QYWlyKCJcdTFFOUN6Iiwo
bmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFp
cigiXHUxRTlDY291bnQtbGlzdCIsKG5ldyBzY19QYWlyKCJcdTFFOUN6IiwobmV3IHNjX1BhaXIo
Ilx1MUU5Q3kiLG51bGwpKSkpKSksbnVsbCkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIo
Ilx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5l
dyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDYXBwZW5kIiwobmV3IHNjX1BhaXIoIlx1MUU5
Q2EiLChuZXcgc2NfUGFpcigiXHUxRTlDYiIsbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBz
Y19QYWlyKCJcdTFFOUNhcHBlbmQiLChuZXcgc2NfUGFpcigiXHUxRTlDYSIsKG5ldyBzY19QYWly
KCJcdTFFOUNjIixudWxsKSkpKSkpLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFp
cigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigiXHUxRTlDYiIsKG5ldyBzY19QYWlyKCJcdTFF
OUNjIixudWxsKSkpKSkpLG51bGwpKSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChu
ZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3BsdXMiLChuZXcgc2NfUGFpcigobmV3IHNj
X1BhaXIoIlx1MUU5Q3JlbWFpbmRlciIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1Bh
aXIoIlx1MUU5Q3kiLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlD
dGltZXMiLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigi
XHUxRTlDcXVvdGllbnQiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKCJcdTFF
OUN5IixudWxsKSkpKSkpLG51bGwpKSkpKSksbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBz
Y19QYWlyKCJcdTFFOUNmaXgiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsbnVsbCkpKSksbnVsbCkp
KSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFp
cigiXHUxRTlDcG93ZXItZXZhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDYmln
LXBsdXMxIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2wiLChuZXcgc2NfUGFpcigiXHUxRTlDaSIsKG5l
dyBzY19QYWlyKCJcdTFFOUNiYXNlIixudWxsKSkpKSkpKSksKG5ldyBzY19QYWlyKCJcdTFFOUNi
YXNlIixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3BsdXMiLChu
ZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3Bvd2VyLWV2YWwiLChuZXcgc2NfUGFpcigi
XHUxRTlDbCIsKG5ldyBzY19QYWlyKCJcdTFFOUNiYXNlIixudWxsKSkpKSkpLChuZXcgc2NfUGFp
cigiXHUxRTlDaSIsbnVsbCkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2Vx
dWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNwb3dlci1ldmFsIiwobmV3IHNj
X1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNiaWctcGx1cyIsKG5ldyBzY19QYWlyKCJcdTFFOUN4
IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLChuZXcgc2NfUGFpcigiXHUxRTlDaSIsKG5ldyBzY19Q
YWlyKCJcdTFFOUNiYXNlIixudWxsKSkpKSkpKSkpKSwobmV3IHNjX1BhaXIoIlx1MUU5Q2Jhc2Ui
LG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcGx1cyIsKG5ldyBz
Y19QYWlyKCJcdTFFOUNpIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNwbHVzIiwo
bmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNwb3dlci1ldmFsIiwobmV3IHNjX1BhaXIo
Ilx1MUU5Q3giLChuZXcgc2NfUGFpcigiXHUxRTlDYmFzZSIsbnVsbCkpKSkpKSwobmV3IHNjX1Bh
aXIoKG5ldyBzY19QYWlyKCJcdTFFOUNwb3dlci1ldmFsIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3ki
LChuZXcgc2NfUGFpcigiXHUxRTlDYmFzZSIsbnVsbCkpKSkpKSxudWxsKSkpKSkpLG51bGwpKSkp
KSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChu
ZXcgc2NfUGFpcigiXHUxRTlDcmVtYWluZGVyIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLChuZXcg
c2NfUGFpcigoMSksbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN6
ZXJvIixudWxsKSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBz
Y19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbGVzc3AiLChuZXcgc2NfUGFpcigobmV3IHNjX1Bh
aXIoIlx1MUU5Q3JlbWFpbmRlciIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIo
Ilx1MUU5Q3kiLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKCJcdTFFOUN5IixudWxsKSkpKSkpLChu
ZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q25vdCIsKG5ldyBzY19QYWlyKChuZXcgc2Nf
UGFpcigiXHUxRTlDemVyb3AiLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSksbnVsbCkp
KSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChu
ZXcgc2NfUGFpcigiXHUxRTlDcmVtYWluZGVyIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcg
c2NfUGFpcigiXHUxRTlDeCIsbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJc
dTFFOUN6ZXJvIixudWxsKSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIs
KG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbGVzc3AiLChuZXcgc2NfUGFpcigobmV3
IHNjX1BhaXIoIlx1MUU5Q3F1b3RpZW50IiwobmV3IHNjX1BhaXIoIlx1MUU5Q2kiLChuZXcgc2Nf
UGFpcigiXHUxRTlDaiIsbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoIlx1MUU5Q2kiLG51bGwpKSkp
KSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDYW5kIiwobmV3IHNjX1BhaXIoKG5l
dyBzY19QYWlyKCJcdTFFOUNub3QiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3pl
cm9wIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2kiLG51bGwpKSkpLG51bGwpKSkpLChuZXcgc2NfUGFp
cigobmV3IHNjX1BhaXIoIlx1MUU5Q29yIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFF
OUN6ZXJvcCIsKG5ldyBzY19QYWlyKCJcdTFFOUNqIixudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5l
dyBzY19QYWlyKCJcdTFFOUNub3QiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2Vx
dWFsIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2oiLChuZXcgc2NfUGFpcigoMSksbnVsbCkpKSkpKSxu
dWxsKSkpKSxudWxsKSkpKSkpLG51bGwpKSkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJc
dTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbGVzc3AiLChuZXcg
c2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3JlbWFpbmRlciIsKG5ldyBzY19QYWlyKCJcdTFF
OUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKCJcdTFF
OUN4IixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2FuZCIsKG5l
dyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbm90IiwobmV3IHNjX1BhaXIoKG5ldyBzY19Q
YWlyKCJcdTFFOUN6ZXJvcCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IixudWxsKSkpKSxudWxsKSkp
KSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNub3QiLChuZXcgc2NfUGFpcigobmV3
IHNjX1BhaXIoIlx1MUU5Q3plcm9wIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51bGwpKSkpLG51
bGwpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q25vdCIsKG5ldyBzY19QYWly
KChuZXcgc2NfUGFpcigiXHUxRTlDbGVzc3AiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBz
Y19QYWlyKCJcdTFFOUN5IixudWxsKSkpKSkpLG51bGwpKSkpLG51bGwpKSkpKSkpKSxudWxsKSkp
KSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWly
KCJcdTFFOUNwb3dlci1ldmFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNwb3dl
ci1yZXAiLChuZXcgc2NfUGFpcigiXHUxRTlDaSIsKG5ldyBzY19QYWlyKCJcdTFFOUNiYXNlIixu
dWxsKSkpKSkpLChuZXcgc2NfUGFpcigiXHUxRTlDYmFzZSIsbnVsbCkpKSkpKSwobmV3IHNjX1Bh
aXIoKG5ldyBzY19QYWlyKCJcdTFFOUNmaXgiLChuZXcgc2NfUGFpcigiXHUxRTlDaSIsbnVsbCkp
KSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChu
ZXcgc2NfUGFpcigiXHUxRTlDcG93ZXItZXZhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigi
XHUxRTlDYmlnLXBsdXMiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3Bvd2VyLXJl
cCIsKG5ldyBzY19QYWlyKCJcdTFFOUNpIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2Jhc2UiLG51bGwp
KSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcG93ZXItcmVwIiwobmV3IHNj
X1BhaXIoIlx1MUU5Q2oiLChuZXcgc2NfUGFpcigiXHUxRTlDYmFzZSIsbnVsbCkpKSkpKSwobmV3
IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN6ZXJvIixudWxsKSksKG5ldyBzY19QYWlyKCJc
dTFFOUNiYXNlIixudWxsKSkpKSkpKSkpKSwobmV3IHNjX1BhaXIoIlx1MUU5Q2Jhc2UiLG51bGwp
KSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcGx1cyIsKG5ldyBzY19QYWly
KCJcdTFFOUNpIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2oiLG51bGwpKSkpKSksbnVsbCkpKSkpKSwg
KG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUx
RTlDZ2NkIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVs
bCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNnY2QiLChuZXcgc2NfUGFp
cigiXHUxRTlDeSIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IixudWxsKSkpKSkpLG51bGwpKSkpKSks
IChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1
MUU5Q250aCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDYXBwZW5kIiwobmV3IHNj
X1BhaXIoIlx1MUU5Q2EiLChuZXcgc2NfUGFpcigiXHUxRTlDYiIsbnVsbCkpKSkpKSwobmV3IHNj
X1BhaXIoIlx1MUU5Q2kiLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUx
RTlDYXBwZW5kIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNudGgiLChuZXcgc2Nf
UGFpcigiXHUxRTlDYSIsKG5ldyBzY19QYWlyKCJcdTFFOUNpIixudWxsKSkpKSkpLChuZXcgc2Nf
UGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q250aCIsKG5ldyBzY19QYWlyKCJcdTFFOUNiIiwobmV3
IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNkaWZmZXJlbmNlIiwobmV3IHNjX1BhaXIoIlx1
MUU5Q2kiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2xlbmd0aCIsKG5ldyBzY19Q
YWlyKCJcdTFFOUNhIixudWxsKSkpKSxudWxsKSkpKSkpLG51bGwpKSkpKSksbnVsbCkpKSkpKSxu
dWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBz
Y19QYWlyKCJcdTFFOUNkaWZmZXJlbmNlIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFF
OUNwbHVzIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVs
bCkpKSkpKSwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChu
ZXcgc2NfUGFpcigiXHUxRTlDZml4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpLG51
bGwpKSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNj
X1BhaXIoIlx1MUU5Q2RpZmZlcmVuY2UiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5
Q3BsdXMiLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IixudWxs
KSkpKSkpLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5l
dyBzY19QYWlyKCJcdTFFOUNmaXgiLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSksbnVs
bCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2Nf
UGFpcigiXHUxRTlDZGlmZmVyZW5jZSIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlD
cGx1cyIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwp
KSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcGx1cyIsKG5ldyBzY19QYWly
KCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3oiLG51bGwpKSkpKSksbnVsbCkpKSkpKSwo
bmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNkaWZmZXJlbmNlIiwobmV3IHNjX1BhaXIo
Ilx1MUU5Q3kiLChuZXcgc2NfUGFpcigiXHUxRTlDeiIsbnVsbCkpKSkpKSxudWxsKSkpKSkpLCAo
bmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFF
OUN0aW1lcyIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWly
KCJcdTFFOUNkaWZmZXJlbmNlIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2MiLChuZXcgc2NfUGFpcigi
XHUxRTlDdyIsbnVsbCkpKSkpKSxudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIo
Ilx1MUU5Q2RpZmZlcmVuY2UiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3RpbWVz
IiwobmV3IHNjX1BhaXIoIlx1MUU5Q2MiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsbnVsbCkpKSkp
KSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN0aW1lcyIsKG5ldyBzY19QYWlyKCJc
dTFFOUN3IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51bGwpKSkpKSksbnVsbCkpKSkpKSxudWxs
KSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19Q
YWlyKCJcdTFFOUNyZW1haW5kZXIiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3Rp
bWVzIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigiXHUxRTlDeiIsbnVsbCkp
KSkpKSwobmV3IHNjX1BhaXIoIlx1MUU5Q3oiLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcg
c2NfUGFpcigiXHUxRTlDemVybyIsbnVsbCkpLG51bGwpKSkpKSksIChuZXcgc2NfUGFpcigiXHUx
RTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2RpZmZlcmVuY2UiLChu
ZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3BsdXMiLChuZXcgc2NfUGFpcigiXHUxRTlD
YiIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcGx1cyIsKG5ldyBzY19QYWlyKCJc
dTFFOUNhIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2MiLG51bGwpKSkpKSksbnVsbCkpKSkpKSwobmV3
IHNjX1BhaXIoIlx1MUU5Q2EiLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigi
XHUxRTlDcGx1cyIsKG5ldyBzY19QYWlyKCJcdTFFOUNiIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2Mi
LG51bGwpKSkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBz
Y19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZGlmZmVyZW5jZSIsKG5ldyBzY19QYWlyKChuZXcg
c2NfUGFpcigiXHUxRTlDYWRkMSIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcGx1
cyIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3oiLG51bGwpKSkp
KSksbnVsbCkpKSksKG5ldyBzY19QYWlyKCJcdTFFOUN6IixudWxsKSkpKSkpLChuZXcgc2NfUGFp
cigobmV3IHNjX1BhaXIoIlx1MUU5Q2FkZDEiLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkp
KSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChu
ZXcgc2NfUGFpcigiXHUxRTlDbGVzc3AiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5
Q3BsdXMiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IixudWxs
KSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3BsdXMiLChuZXcgc2NfUGFp
cigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKCJcdTFFOUN6IixudWxsKSkpKSkpLG51bGwpKSkpKSks
KG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbGVzc3AiLChuZXcgc2NfUGFpcigiXHUx
RTlDeSIsKG5ldyBzY19QYWlyKCJcdTFFOUN6IixudWxsKSkpKSkpLG51bGwpKSkpKSksIChuZXcg
c2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2xl
c3NwIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN0aW1lcyIsKG5ldyBzY19QYWly
KCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3oiLG51bGwpKSkpKSksKG5ldyBzY19QYWly
KChuZXcgc2NfUGFpcigiXHUxRTlDdGltZXMiLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsKG5ldyBz
Y19QYWlyKCJcdTFFOUN6IixudWxsKSkpKSkpLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcg
c2NfUGFpcigiXHUxRTlDYW5kIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNub3Qi
LChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3plcm9wIiwobmV3IHNjX1BhaXIoIlx1
MUU5Q3oiLG51bGwpKSkpLG51bGwpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5
Q2xlc3NwIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVs
bCkpKSkpKSxudWxsKSkpKSkpLG51bGwpKSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwi
LChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2xlc3NwIiwobmV3IHNjX1BhaXIoIlx1
MUU5Q3kiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3BsdXMiLChuZXcgc2NfUGFp
cigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IixudWxsKSkpKSkpLG51bGwpKSkpKSks
KG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbm90IiwobmV3IHNjX1BhaXIoKG5ldyBz
Y19QYWlyKCJcdTFFOUN6ZXJvcCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IixudWxsKSkpKSxudWxs
KSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIo
KG5ldyBzY19QYWlyKCJcdTFFOUNnY2QiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5
Q3RpbWVzIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigiXHUxRTlDeiIsbnVs
bCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN0aW1lcyIsKG5ldyBzY19Q
YWlyKCJcdTFFOUN5IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3oiLG51bGwpKSkpKSksbnVsbCkpKSkp
KSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN0aW1lcyIsKG5ldyBzY19QYWlyKCJc
dTFFOUN6IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNnY2QiLChuZXcgc2NfUGFp
cigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IixudWxsKSkpKSkpLG51bGwpKSkpKSks
bnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcg
c2NfUGFpcigiXHUxRTlDdmFsdWUiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q25v
cm1hbGl6ZSIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IixudWxsKSkpKSwobmV3IHNjX1BhaXIoIlx1
MUU5Q2EiLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDdmFsdWUi
LChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKCJcdTFFOUNhIixudWxsKSkpKSkp
LG51bGwpKSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3
IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNm
bGF0dGVuIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51bGwpKSkpLChuZXcgc2NfUGFpcigobmV3
IHNjX1BhaXIoIlx1MUU5Q2NvbnMiLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsKG5ldyBzY19QYWly
KChuZXcgc2NfUGFpcigiXHUxRTlDbmlsIixudWxsKSksbnVsbCkpKSkpKSxudWxsKSkpKSkpLChu
ZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2FuZCIsKG5ldyBzY19QYWlyKChuZXcgc2Nf
UGFpcigiXHUxRTlDbmxpc3RwIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51bGwpKSkpLChuZXcg
c2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3gi
LChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSkpKSxudWxsKSkpKSkpLG51bGwpKSkpKSks
IChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1
MUU5Q2xpc3RwIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNnb3BoZXIiLChuZXcg
c2NfUGFpcigiXHUxRTlDeCIsbnVsbCkpKSksbnVsbCkpKSksKG5ldyBzY19QYWlyKChuZXcgc2Nf
UGFpcigiXHUxRTlDbGlzdHAiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsbnVsbCkpKSksbnVsbCkp
KSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFp
cigiXHUxRTlDc2FtZWZyaW5nZSIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIo
Ilx1MUU5Q3kiLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZXF1
YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2ZsYXR0ZW4iLChuZXcgc2NfUGFp
cigiXHUxRTlDeCIsbnVsbCkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZmxh
dHRlbiIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IixudWxsKSkpKSxudWxsKSkpKSkpLG51bGwpKSkp
KSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIo
Ilx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNncmVhdGVzdC1m
YWN0b3IiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IixudWxs
KSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3plcm8iLG51bGwpKSxudWxs
KSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2FuZCIsKG5ldyBzY19QYWly
KChuZXcgc2NfUGFpcigiXHUxRTlDb3IiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5
Q3plcm9wIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpLChuZXcgc2NfUGFpcigobmV3
IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLChuZXcgc2NfUGFp
cigoMSksbnVsbCkpKSkpKSxudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1
MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigobmV3IHNjX1Bh
aXIoIlx1MUU5Q3plcm8iLG51bGwpKSxudWxsKSkpKSkpLG51bGwpKSkpKSksbnVsbCkpKSkpKSwg
KG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUx
RTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2dyZWF0ZXN0LWZhY3Rv
ciIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkp
KSksKG5ldyBzY19QYWlyKCgxKSxudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIo
Ilx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigoMSksbnVs
bCkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1Bh
aXIoKG5ldyBzY19QYWlyKCJcdTFFOUNudW1iZXJwIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWly
KCJcdTFFOUNncmVhdGVzdC1mYWN0b3IiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19Q
YWlyKCJcdTFFOUN5IixudWxsKSkpKSkpLG51bGwpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1Bh
aXIoIlx1MUU5Q25vdCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDYW5kIiwobmV3
IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNvciIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFp
cigiXHUxRTlDemVyb3AiLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSksKG5ldyBzY19Q
YWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsKG5l
dyBzY19QYWlyKCgxKSxudWxsKSkpKSkpLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2Nf
UGFpcigiXHUxRTlDbm90IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNudW1iZXJw
IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51bGwpKSkpLG51bGwpKSkpLG51bGwpKSkpKSksbnVs
bCkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWly
KChuZXcgc2NfUGFpcigiXHUxRTlDdGltZXMtbGlzdCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFp
cigiXHUxRTlDYXBwZW5kIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigiXHUx
RTlDeSIsbnVsbCkpKSkpKSxudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFF
OUN0aW1lcyIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDdGltZXMtbGlzdCIsKG5l
dyBzY19QYWlyKCJcdTFFOUN4IixudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJc
dTFFOUN0aW1lcy1saXN0IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpLG51bGwpKSkp
KSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChu
ZXcgc2NfUGFpcigiXHUxRTlDcHJpbWUtbGlzdCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigi
XHUxRTlDYXBwZW5kIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigiXHUxRTlD
eSIsbnVsbCkpKSkpKSxudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNh
bmQiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3ByaW1lLWxpc3QiLChuZXcgc2Nf
UGFpcigiXHUxRTlDeCIsbnVsbCkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlD
cHJpbWUtbGlzdCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IixudWxsKSkpKSxudWxsKSkpKSkpLG51
bGwpKSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNj
X1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3oiLChuZXcgc2NfUGFpcigo
bmV3IHNjX1BhaXIoIlx1MUU5Q3RpbWVzIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3ciLChuZXcgc2Nf
UGFpcigiXHUxRTlDeiIsbnVsbCkpKSkpKSxudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNj
X1BhaXIoIlx1MUU5Q2FuZCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbnVtYmVy
cCIsKG5ldyBzY19QYWlyKCJcdTFFOUN6IixudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19Q
YWlyKCJcdTFFOUNvciIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChu
ZXcgc2NfUGFpcigiXHUxRTlDeiIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDemVy
byIsbnVsbCkpLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZXF1
YWwiLChuZXcgc2NfUGFpcigiXHUxRTlDdyIsKG5ldyBzY19QYWlyKCgxKSxudWxsKSkpKSkpLG51
bGwpKSkpKSksbnVsbCkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFs
IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNncmVhdGVyZXFwIiwobmV3IHNjX1Bh
aXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSkpKSwobmV3IHNjX1Bh
aXIoKG5ldyBzY19QYWlyKCJcdTFFOUNub3QiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1
MUU5Q2xlc3NwIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigiXHUxRTlDeSIs
bnVsbCkpKSkpKSxudWxsKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFs
IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKCJc
dTFFOUN4IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN0aW1lcyIsKG5ldyBzY19Q
YWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpKSksbnVsbCkpKSkp
KSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNvciIsKG5ldyBzY19QYWlyKChuZXcg
c2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWly
KChuZXcgc2NfUGFpcigiXHUxRTlDemVybyIsbnVsbCkpLG51bGwpKSkpKSksKG5ldyBzY19QYWly
KChuZXcgc2NfUGFpcigiXHUxRTlDYW5kIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFF
OUNudW1iZXJwIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51bGwpKSkpLChuZXcgc2NfUGFpcigo
bmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLChuZXcgc2Nf
UGFpcigoMSksbnVsbCkpKSkpKSxudWxsKSkpKSkpLG51bGwpKSkpKSksbnVsbCkpKSkpKSwgKG5l
dyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlD
cmVtYWluZGVyIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN0aW1lcyIsKG5ldyBz
Y19QYWlyKCJcdTFFOUN5IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51bGwpKSkpKSksKG5ldyBz
Y19QYWlyKCJcdTFFOUN5IixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1
MUU5Q3plcm8iLG51bGwpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwo
bmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcg
c2NfUGFpcigiXHUxRTlDdGltZXMiLChuZXcgc2NfUGFpcigiXHUxRTlDYSIsKG5ldyBzY19QYWly
KCJcdTFFOUNiIixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigoMSksbnVsbCkpKSkpKSwobmV3IHNj
X1BhaXIoc2NfbGlzdCgiXHUxRTlDYW5kIiwgKG5ldyBzY19QYWlyKCJcdTFFOUNub3QiLChuZXcg
c2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2Ei
LChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3plcm8iLG51bGwpKSxudWxsKSkpKSkp
LG51bGwpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q25vdCIsKG5ldyBzY19QYWlyKChuZXcgc2Nf
UGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigiXHUxRTlDYiIsKG5ldyBzY19QYWlyKChu
ZXcgc2NfUGFpcigiXHUxRTlDemVybyIsbnVsbCkpLG51bGwpKSkpKSksbnVsbCkpKSksIChuZXcg
c2NfUGFpcigiXHUxRTlDbnVtYmVycCIsKG5ldyBzY19QYWlyKCJcdTFFOUNhIixudWxsKSkpKSwg
KG5ldyBzY19QYWlyKCJcdTFFOUNudW1iZXJwIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2IiLG51bGwp
KSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWly
KCJcdTFFOUNzdWIxIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2EiLG51bGwpKSkpLChuZXcgc2NfUGFp
cigobmV3IHNjX1BhaXIoIlx1MUU5Q3plcm8iLG51bGwpKSxudWxsKSkpKSkpLCAobmV3IHNjX1Bh
aXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNzdWIxIiwo
bmV3IHNjX1BhaXIoIlx1MUU5Q2IiLG51bGwpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIo
Ilx1MUU5Q3plcm8iLG51bGwpKSxudWxsKSkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIo
Ilx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNsZXNzcCIsKG5l
dyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbGVuZ3RoIiwobmV3IHNjX1BhaXIoKG5ldyBz
Y19QYWlyKCJcdTFFOUNkZWxldGUiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWly
KCJcdTFFOUNsIixudWxsKSkpKSkpLG51bGwpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIo
Ilx1MUU5Q2xlbmd0aCIsKG5ldyBzY19QYWlyKCJcdTFFOUNsIixudWxsKSkpKSxudWxsKSkpKSkp
LChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q21lbWJlciIsKG5ldyBzY19QYWlyKCJc
dTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q2wiLG51bGwpKSkpKSksbnVsbCkpKSkpKSwgKG5l
dyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlD
c29ydDIiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2RlbGV0ZSIsKG5ldyBzY19Q
YWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q2wiLG51bGwpKSkpKSksbnVsbCkpKSks
KG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZGVsZXRlIiwobmV3IHNjX1BhaXIoIlx1
MUU5Q3giLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3NvcnQyIiwobmV3IHNjX1Bh
aXIoIlx1MUU5Q2wiLG51bGwpKSkpLG51bGwpKSkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWly
KCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZHNvcnQiLChu
ZXcgc2NfUGFpcigiXHUxRTlDeCIsbnVsbCkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigi
XHUxRTlDc29ydDIiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsbnVsbCkpKSksbnVsbCkpKSkpKSwg
KG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUx
RTlDbGVuZ3RoIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNjb25zIiwobmV3IHNj
X1BhaXIoIlx1MUU5Q3gxIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNjb25zIiwo
bmV3IHNjX1BhaXIoIlx1MUU5Q3gyIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNj
b25zIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3gzIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJc
dTFFOUNjb25zIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3g0IiwobmV3IHNjX1BhaXIoKG5ldyBzY19Q
YWlyKCJcdTFFOUNjb25zIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3g1IiwobmV3IHNjX1BhaXIoKG5l
dyBzY19QYWlyKCJcdTFFOUNjb25zIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3g2IiwobmV3IHNjX1Bh
aXIoIlx1MUU5Q3g3IixudWxsKSkpKSkpLG51bGwpKSkpKSksbnVsbCkpKSkpKSxudWxsKSkpKSkp
LG51bGwpKSkpKSksbnVsbCkpKSkpKSxudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWly
KCJcdTFFOUNwbHVzIiwobmV3IHNjX1BhaXIoKDYpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIo
Ilx1MUU5Q2xlbmd0aCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4NyIsbnVsbCkpKSksbnVsbCkpKSkp
KSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5l
dyBzY19QYWlyKCJcdTFFOUNkaWZmZXJlbmNlIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJc
dTFFOUNhZGQxIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNhZGQxIiwobmV3IHNj
X1BhaXIoIlx1MUU5Q3giLG51bGwpKSkpLG51bGwpKSkpLChuZXcgc2NfUGFpcigoMiksbnVsbCkp
KSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNmaXgiLChuZXcgc2NfUGFpcigi
XHUxRTlDeCIsbnVsbCkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIs
KG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcXVvdGllbnQiLChuZXcgc2NfUGFpcigo
bmV3IHNjX1BhaXIoIlx1MUU5Q3BsdXMiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19Q
YWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcGx1cyIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3
IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpKSksbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKDIp
LG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcGx1cyIsKG5ldyBz
Y19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNxdW90aWVu
dCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IiwobmV3IHNjX1BhaXIoKDIpLG51bGwpKSkpKSksbnVs
bCkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1Bh
aXIoKG5ldyBzY19QYWlyKCJcdTFFOUNzaWdtYSIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigi
XHUxRTlDemVybyIsbnVsbCkpLChuZXcgc2NfUGFpcigiXHUxRTlDaSIsbnVsbCkpKSkpKSwobmV3
IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNxdW90aWVudCIsKG5ldyBzY19QYWlyKChuZXcg
c2NfUGFpcigiXHUxRTlDdGltZXMiLChuZXcgc2NfUGFpcigiXHUxRTlDaSIsKG5ldyBzY19QYWly
KChuZXcgc2NfUGFpcigiXHUxRTlDYWRkMSIsKG5ldyBzY19QYWlyKCJcdTFFOUNpIixudWxsKSkp
KSxudWxsKSkpKSkpLChuZXcgc2NfUGFpcigoMiksbnVsbCkpKSkpKSxudWxsKSkpKSkpLCAobmV3
IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNw
bHVzIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1
MUU5Q2FkZDEiLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSksbnVsbCkpKSkpKSwobmV3
IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNpZiIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFp
cigiXHUxRTlDbnVtYmVycCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IixudWxsKSkpKSwobmV3IHNj
X1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNhZGQxIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWly
KCJcdTFFOUNwbHVzIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigiXHUxRTlD
eSIsbnVsbCkpKSkpKSxudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNh
ZGQxIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51bGwpKSkpLG51bGwpKSkpKSkpKSxudWxsKSkp
KSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWly
KCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZGlmZmVyZW5j
ZSIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkp
KSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZGlmZmVyZW5jZSIsKG5ldyBzY19Q
YWlyKCJcdTFFOUN6IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpKSksbnVsbCkpKSkp
KSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNpZiIsKG5ldyBzY19QYWlyKChuZXcg
c2NfUGFpcigiXHUxRTlDbGVzc3AiLChuZXcgc2NfUGFpcigiXHUxRTlDeCIsKG5ldyBzY19QYWly
KCJcdTFFOUN5IixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q25v
dCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbGVzc3AiLChuZXcgc2NfUGFpcigi
XHUxRTlDeSIsKG5ldyBzY19QYWlyKCJcdTFFOUN6IixudWxsKSkpKSkpLG51bGwpKSkpLChuZXcg
c2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2lmIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWly
KCJcdTFFOUNsZXNzcCIsKG5ldyBzY19QYWlyKCJcdTFFOUN6IiwobmV3IHNjX1BhaXIoIlx1MUU5
Q3kiLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbm90IiwobmV3
IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNsZXNzcCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5
IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51bGwpKSkpKSksbnVsbCkpKSksKG5ldyBzY19QYWly
KChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1
MUU5Q2ZpeCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IixudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5l
dyBzY19QYWlyKCJcdTFFOUNmaXgiLChuZXcgc2NfUGFpcigiXHUxRTlDeiIsbnVsbCkpKSksbnVs
bCkpKSkpKSxudWxsKSkpKSkpKSksbnVsbCkpKSkpKSkpLG51bGwpKSkpKSksIChuZXcgc2NfUGFp
cigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q21lYW5pbmci
LChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3BsdXMtdHJlZSIsKG5ldyBzY19QYWly
KChuZXcgc2NfUGFpcigiXHUxRTlDZGVsZXRlIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcg
c2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSkpKSxudWxsKSkpKSwobmV3IHNjX1BhaXIoIlx1MUU5
Q2EiLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDaWYiLChuZXcg
c2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q21lbWJlciIsKG5ldyBzY19QYWlyKCJcdTFFOUN4
IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2Nf
UGFpcigiXHUxRTlDZGlmZmVyZW5jZSIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlD
bWVhbmluZyIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcGx1cy10cmVlIiwobmV3
IHNjX1BhaXIoIlx1MUU5Q3kiLG51bGwpKSkpLChuZXcgc2NfUGFpcigiXHUxRTlDYSIsbnVsbCkp
KSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNtZWFuaW5nIiwobmV3IHNjX1Bh
aXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigiXHUxRTlDYSIsbnVsbCkpKSkpKSxudWxsKSkpKSkp
LChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q21lYW5pbmciLChuZXcgc2NfUGFpcigo
bmV3IHNjX1BhaXIoIlx1MUU5Q3BsdXMtdHJlZSIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IixudWxs
KSkpKSwobmV3IHNjX1BhaXIoIlx1MUU5Q2EiLG51bGwpKSkpKSksbnVsbCkpKSkpKSkpLG51bGwp
KSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1Bh
aXIoIlx1MUU5Q3RpbWVzIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigobmV3
IHNjX1BhaXIoIlx1MUU5Q2FkZDEiLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSksbnVs
bCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNpZiIsKG5ldyBzY19QYWly
KChuZXcgc2NfUGFpcigiXHUxRTlDbnVtYmVycCIsKG5ldyBzY19QYWlyKCJcdTFFOUN5IixudWxs
KSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNwbHVzIiwobmV3IHNjX1BhaXIo
Ilx1MUU5Q3giLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3RpbWVzIiwobmV3IHNj
X1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSkpKSxudWxsKSkp
KSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2ZpeCIsKG5ldyBzY19QYWlyKCJc
dTFFOUN4IixudWxsKSkpKSxudWxsKSkpKSkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJc
dTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbnRoIiwobmV3IHNj
X1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNuaWwiLG51bGwpKSwobmV3IHNjX1BhaXIoIlx1MUU5
Q2kiLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDaWYiLChuZXcg
c2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3plcm9wIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2ki
LG51bGwpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q25pbCIsbnVsbCkpLChu
ZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3plcm8iLG51bGwpKSxudWxsKSkpKSkpKSks
bnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcg
c2NfUGFpcigiXHUxRTlDbGFzdCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDYXBw
ZW5kIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2EiLChuZXcgc2NfUGFpcigiXHUxRTlDYiIsbnVsbCkp
KSkpKSxudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNpZiIsKG5ldyBz
Y19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbGlzdHAiLChuZXcgc2NfUGFpcigiXHUxRTlDYiIs
bnVsbCkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbGFzdCIsKG5ldyBzY19Q
YWlyKCJcdTFFOUNiIixudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNp
ZiIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbGlzdHAiLChuZXcgc2NfUGFpcigi
XHUxRTlDYSIsbnVsbCkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDY29ucyIs
KG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDY2FyIiwobmV3IHNjX1BhaXIoKG5ldyBz
Y19QYWlyKCJcdTFFOUNsYXN0IiwobmV3IHNjX1BhaXIoIlx1MUU5Q2EiLG51bGwpKSkpLG51bGwp
KSkpLChuZXcgc2NfUGFpcigiXHUxRTlDYiIsbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoIlx1MUU5
Q2IiLG51bGwpKSkpKSkpKSxudWxsKSkpKSkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJc
dTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcg
c2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2xlc3NwIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3gi
LChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoIlx1MUU5Q3oi
LG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDaWYiLChuZXcgc2Nf
UGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2xlc3NwIiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChu
ZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWly
KCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDdCIsbnVsbCkp
LChuZXcgc2NfUGFpcigiXHUxRTlDeiIsbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19Q
YWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZiIsbnVs
bCkpLChuZXcgc2NfUGFpcigiXHUxRTlDeiIsbnVsbCkpKSkpKSxudWxsKSkpKSkpKSksbnVsbCkp
KSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFp
cigiXHUxRTlDYXNzaWdubWVudCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIo
KG5ldyBzY19QYWlyKCJcdTFFOUNhcHBlbmQiLChuZXcgc2NfUGFpcigiXHUxRTlDYSIsKG5ldyBz
Y19QYWlyKCJcdTFFOUNiIixudWxsKSkpKSkpLG51bGwpKSkpKSksKG5ldyBzY19QYWlyKChuZXcg
c2NfUGFpcigiXHUxRTlDaWYiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2Fzc2ln
bmVkcCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q2EiLG51bGwp
KSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDYXNzaWdubWVudCIsKG5ldyBz
Y19QYWlyKCJcdTFFOUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q2EiLG51bGwpKSkpKSksKG5ldyBz
Y19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDYXNzaWdubWVudCIsKG5ldyBzY19QYWlyKCJcdTFF
OUN4IiwobmV3IHNjX1BhaXIoIlx1MUU5Q2IiLG51bGwpKSkpKSksbnVsbCkpKSkpKSkpLG51bGwp
KSkpKSksIChuZXcgc2NfUGFpcigiXHUxRTlDZXF1YWwiLChuZXcgc2NfUGFpcigobmV3IHNjX1Bh
aXIoIlx1MUU5Q2NhciIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDZ29waGVyIiwo
bmV3IHNjX1BhaXIoIlx1MUU5Q3giLG51bGwpKSkpLG51bGwpKSkpLChuZXcgc2NfUGFpcigobmV3
IHNjX1BhaXIoIlx1MUU5Q2lmIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNsaXN0
cCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IixudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19Q
YWlyKCJcdTFFOUNjYXIiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2ZsYXR0ZW4i
LChuZXcgc2NfUGFpcigiXHUxRTlDeCIsbnVsbCkpKSksbnVsbCkpKSksKG5ldyBzY19QYWlyKChu
ZXcgc2NfUGFpcigiXHUxRTlDemVybyIsbnVsbCkpLG51bGwpKSkpKSkpKSxudWxsKSkpKSkpLCAo
bmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFF
OUNmbGF0dGVuIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNjZHIiLChuZXcgc2Nf
UGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2dvcGhlciIsKG5ldyBzY19QYWlyKCJcdTFFOUN4Iixu
dWxsKSkpKSxudWxsKSkpKSxudWxsKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFF
OUNpZiIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbGlzdHAiLChuZXcgc2NfUGFp
cigiXHUxRTlDeCIsbnVsbCkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDY2Ry
IiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNmbGF0dGVuIiwobmV3IHNjX1BhaXIo
Ilx1MUU5Q3giLG51bGwpKSkpLG51bGwpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1
MUU5Q2NvbnMiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3plcm8iLG51bGwpKSwo
bmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNuaWwiLG51bGwpKSxudWxsKSkpKSkpLG51
bGwpKSkpKSkpKSxudWxsKSkpKSkpLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNj
X1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNxdW90aWVudCIsKG5ldyBzY19QYWlyKChuZXcgc2Nf
UGFpcigiXHUxRTlDdGltZXMiLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsKG5ldyBzY19QYWlyKCJc
dTFFOUN4IixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSkpKSwobmV3
IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNpZiIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFp
cigiXHUxRTlDemVyb3AiLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSksKG5ldyBzY19Q
YWlyKChuZXcgc2NfUGFpcigiXHUxRTlDemVybyIsbnVsbCkpLChuZXcgc2NfUGFpcigobmV3IHNj
X1BhaXIoIlx1MUU5Q2ZpeCIsKG5ldyBzY19QYWlyKCJcdTFFOUN4IixudWxsKSkpKSxudWxsKSkp
KSkpKSksbnVsbCkpKSkpKSwgKG5ldyBzY19QYWlyKCJcdTFFOUNlcXVhbCIsKG5ldyBzY19QYWly
KChuZXcgc2NfUGFpcigiXHUxRTlDZ2V0IiwobmV3IHNjX1BhaXIoIlx1MUU5Q2oiLChuZXcgc2Nf
UGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3NldCIsKG5ldyBzY19QYWlyKCJcdTFFOUNpIiwobmV3
IHNjX1BhaXIoIlx1MUU5Q3ZhbCIsKG5ldyBzY19QYWlyKCJcdTFFOUNtZW0iLG51bGwpKSkpKSkp
KSxudWxsKSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q2lmIiwobmV3IHNj
X1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNlcXAiLChuZXcgc2NfUGFpcigiXHUxRTlDaiIsKG5l
dyBzY19QYWlyKCJcdTFFOUNpIixudWxsKSkpKSkpLChuZXcgc2NfUGFpcigiXHUxRTlDdmFsIiwo
bmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNnZXQiLChuZXcgc2NfUGFpcigiXHUxRTlD
aiIsKG5ldyBzY19QYWlyKCJcdTFFOUNtZW0iLG51bGwpKSkpKSksbnVsbCkpKSkpKSkpLG51bGwp
KSkpKSkpKTsKKyAgICAoY29uc3RfbmJveWVyID0gKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigi
XHUxRTlDeCIsKG5ldyBzY19QYWlyKCJcdTFFOUNmIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWly
KCJcdTFFOUNwbHVzIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNwbHVzIiwobmV3
IHNjX1BhaXIoIlx1MUU5Q2EiLChuZXcgc2NfUGFpcigiXHUxRTlDYiIsbnVsbCkpKSkpKSwobmV3
IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNwbHVzIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2Mi
LChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3plcm8iLG51bGwpKSxudWxsKSkpKSkp
LG51bGwpKSkpKSksbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN5
IiwobmV3IHNjX1BhaXIoIlx1MUU5Q2YiLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5
Q3RpbWVzIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUN0aW1lcyIsKG5ldyBzY19Q
YWlyKCJcdTFFOUNhIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2IiLG51bGwpKSkpKSksKG5ldyBzY19Q
YWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcGx1cyIsKG5ldyBzY19QYWlyKCJcdTFFOUNjIiwobmV3
IHNjX1BhaXIoIlx1MUU5Q2QiLG51bGwpKSkpKSksbnVsbCkpKSkpKSxudWxsKSkpKSkpLChuZXcg
c2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3oiLChuZXcgc2NfUGFpcigiXHUxRTlDZiIsKG5l
dyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcmV2ZXJzZSIsKG5ldyBzY19QYWlyKChuZXcg
c2NfUGFpcigiXHUxRTlDYXBwZW5kIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNh
cHBlbmQiLChuZXcgc2NfUGFpcigiXHUxRTlDYSIsKG5ldyBzY19QYWlyKCJcdTFFOUNiIixudWxs
KSkpKSkpLChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q25pbCIsbnVsbCkpLG51bGwp
KSkpKSksbnVsbCkpKSksbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFF
OUN1IiwobmV3IHNjX1BhaXIoIlx1MUU5Q2VxdWFsIiwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWly
KCJcdTFFOUNwbHVzIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2EiLChuZXcgc2NfUGFpcigiXHUxRTlD
YiIsbnVsbCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNkaWZmZXJlbmNl
IiwobmV3IHNjX1BhaXIoIlx1MUU5Q3giLChuZXcgc2NfUGFpcigiXHUxRTlDeSIsbnVsbCkpKSkp
KSxudWxsKSkpKSkpKSksKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDdyIsKG5ldyBz
Y19QYWlyKCJcdTFFOUNsZXNzcCIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDcmVt
YWluZGVyIiwobmV3IHNjX1BhaXIoIlx1MUU5Q2EiLChuZXcgc2NfUGFpcigiXHUxRTlDYiIsbnVs
bCkpKSkpKSwobmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKCJcdTFFOUNtZW1iZXIiLChuZXcgc2Nf
UGFpcigiXHUxRTlDYSIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDbGVuZ3RoIiwo
bmV3IHNjX1BhaXIoIlx1MUU5Q2IiLG51bGwpKSkpLG51bGwpKSkpKSksbnVsbCkpKSkpKSkpLG51
bGwpKSkpKSkpKSkpKTsKKyAgICBCZ0xfbmJveWVyemQyYmVuY2htYXJremQyID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHZhciBhcmdzID0gbnVsbDsKKyAgICAgICAgZm9yICh2YXIgc2NfdG1wID0g
YXJndW1lbnRzLmxlbmd0aCAtIDE7IHNjX3RtcCA+PSAwOyBzY190bXAtLSkgeworICAgICAgICAg
ICAgYXJncyA9IHNjX2NvbnMoYXJndW1lbnRzW3NjX3RtcF0sIGFyZ3MpOworICAgICAgICB9Cisg
ICAgICAgIHZhciBuOworICAgICAgICByZXR1cm4gKChuID0gKChhcmdzID09PSBudWxsKT8oMCk6
KGFyZ3MuY2FyKSkpLCAoQmdMX3NldHVwemQyYm95ZXJ6ZDIoKSksIChCZ0xfcnVuemQyYmVuY2ht
YXJremQyKCgibmJveWVyIisoc2NfbnVtYmVyMnN0cmluZyhuKSkpLCAoMSksIGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgcmV0dXJuIChCZ0xfdGVzdHpkMmJveWVyemQyKG4pKTsKKyAgICAgICAg
fSwgZnVuY3Rpb24ocmV3cml0ZXMpIHsKKyAgICAgICAgICAgIGlmICgoc2NfaXNOdW1iZXIocmV3
cml0ZXMpKSkKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG4pIHsKKyAgICAgICAgICAgICAgICBj
YXNlICgwKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZXdyaXRlcz09PSg5NTAyNCkp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICgxKToK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZXdyaXRlcz09PSg1OTE3NzcpKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAoMik6CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAocmV3cml0ZXM9PT0oMTgxMzk3NSkpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICgzKToKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIChyZXdyaXRlcz09PSg1Mzc1Njc4KSk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgKDQpOgorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gKHJld3JpdGVzPT09KDE2NDQ1NDA2KSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgKDUpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
KHJld3JpdGVzPT09KDUxNTA3NzM5KSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9KSkpOworICAg
IH07CisgICAgQmdMX3NldHVwemQyYm95ZXJ6ZDIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfTsKKyAgICBCZ0xfdGVzdHpkMmJveWVyemQyID0gZnVuY3Rpb24oKSB7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisgICAgdHJhbnNsYXRlX3Rlcm1fbmJveWVy
ID0gZnVuY3Rpb24odGVybSkgeworICAgICAgICB2YXIgbHN0OworICAgICAgICByZXR1cm4gKCEo
dGVybSBpbnN0YW5jZW9mIHNjX1BhaXIpP3Rlcm06KG5ldyBzY19QYWlyKChCZ0xfc2Nfc3ltYm9s
emQyemUzc3ltYm9semQycmVjb3JkXzF6ZTNfbmJveWVyKCh0ZXJtLmNhcikpKSwgKChsc3QgPSAo
dGVybS5jZHIpKSwgKChsc3QgPT09IG51bGwpP251bGw6KG5ldyBzY19QYWlyKCh0cmFuc2xhdGVf
dGVybV9uYm95ZXIoKGxzdC5jYXIpKSksICh0cmFuc2xhdGVfYXJnc19uYm95ZXIoKGxzdC5jZHIp
KSkpKSkpKSkpOworICAgIH07CisgICAgdHJhbnNsYXRlX2FyZ3NfbmJveWVyID0gZnVuY3Rpb24o
bHN0KSB7CisgICAgICAgIHZhciBzY19sc3RfNTsKKyAgICAgICAgdmFyIHRlcm07CisgICAgICAg
IHJldHVybiAoKGxzdCA9PT0gbnVsbCk/bnVsbDoobmV3IHNjX1BhaXIoKCh0ZXJtID0gKGxzdC5j
YXIpKSwgKCEodGVybSBpbnN0YW5jZW9mIHNjX1BhaXIpP3Rlcm06KG5ldyBzY19QYWlyKChCZ0xf
c2Nfc3ltYm9semQyemUzc3ltYm9semQycmVjb3JkXzF6ZTNfbmJveWVyKCh0ZXJtLmNhcikpKSwg
KHRyYW5zbGF0ZV9hcmdzX25ib3llcigodGVybS5jZHIpKSkpKSkpLCAoKHNjX2xzdF81ID0gKGxz
dC5jZHIpKSwgKChzY19sc3RfNSA9PT0gbnVsbCk/bnVsbDoobmV3IHNjX1BhaXIoKHRyYW5zbGF0
ZV90ZXJtX25ib3llcigoc2NfbHN0XzUuY2FyKSkpLCAodHJhbnNsYXRlX2FyZ3NfbmJveWVyKChz
Y19sc3RfNS5jZHIpKSkpKSkpKSkpOworICAgIH07CisgICAgdW50cmFuc2xhdGVfdGVybV9uYm95
ZXIgPSBmdW5jdGlvbih0ZXJtKSB7CisgICAgICAgIHZhciBvcHRyT3BuZDsKKyAgICAgICAgdmFy
IHRhaWwxMTMxOworICAgICAgICB2YXIgTDExMjc7CisgICAgICAgIHZhciBmYWxzZUhlYWQxMTMw
OworICAgICAgICB2YXIgc3ltYm9sX3JlY29yZDsKKyAgICAgICAgaWYgKCEodGVybSBpbnN0YW5j
ZW9mIHNjX1BhaXIpKQorICAgICAgICAgICAgcmV0dXJuIHRlcm07CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAoZmFsc2VIZWFkMTEzMCA9IChuZXcgc2NfUGFp
cihudWxsLCBudWxsKSkpOworICAgICAgICAgICAgICAgIChMMTEyNyA9ICh0ZXJtLmNkcikpOwor
ICAgICAgICAgICAgICAgICh0YWlsMTEzMSA9IGZhbHNlSGVhZDExMzApOworICAgICAgICAgICAg
ICAgIHdoaWxlICghKEwxMTI3ID09PSBudWxsKSkgeworICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAodGFpbDExMzEuY2RyID0gKG5ldyBzY19QYWlyKCh1bnRy
YW5zbGF0ZV90ZXJtX25ib3llcigoTDExMjcuY2FyKSkpLCBudWxsKSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgKHRhaWwxMTMxID0gKHRhaWwxMTMxLmNkcikpOworICAgICAgICAgICAgICAg
ICAgICAgICAgKEwxMTI3ID0gKEwxMTI3LmNkcikpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIChvcHRyT3BuZCA9IChmYWxzZUhlYWQx
MTMwLmNkcikpOworICAgICAgICAgICAgICAgIHJldHVybiAobmV3IHNjX1BhaXIoKChzeW1ib2xf
cmVjb3JkID0gKHRlcm0uY2FyKSksIChzeW1ib2xfcmVjb3JkWygwKV0pKSwgb3B0ck9wbmQpKTsK
KyAgICAgICAgICAgIH0KKyAgICB9OworICAgIEJnTF9zY19zeW1ib2x6ZDJ6ZTNzeW1ib2x6ZDJy
ZWNvcmRfMXplM19uYm95ZXIgPSBmdW5jdGlvbihzeW0pIHsKKyAgICAgICAgdmFyIHI7CisgICAg
ICAgIHZhciB4OworICAgICAgICByZXR1cm4gKCh4ID0gKHNjX2Fzc3Eoc3ltLCBCZ0xfc2NfemEy
c3ltYm9semQycmVjb3Jkc3pkMmFsaXN0emEyXzJ6MDBfbmJveWVyKSkpLCAoKHghPT0gZmFsc2Up
Pyh4LmNkcik6KChyID0gW3N5bSwgbnVsbF0pLCAoQmdMX3NjX3phMnN5bWJvbHpkMnJlY29yZHN6
ZDJhbGlzdHphMl8yejAwX25ib3llciA9IChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoc3ltLCBy
KSksIEJnTF9zY196YTJzeW1ib2x6ZDJyZWNvcmRzemQyYWxpc3R6YTJfMnowMF9uYm95ZXIpKSks
IHIpKSk7CisgICAgfTsKKyAgICAoQmdMX3NjX3phMnN5bWJvbHpkMnJlY29yZHN6ZDJhbGlzdHph
Ml8yejAwX25ib3llciA9IG51bGwpOworICAgIHRyYW5zbGF0ZV9hbGlzdF9uYm95ZXIgPSBmdW5j
dGlvbihhbGlzdCkgeworICAgICAgICB2YXIgc2NfYWxpc3RfNjsKKyAgICAgICAgdmFyIHRlcm07
CisgICAgICAgIHJldHVybiAoKGFsaXN0ID09PSBudWxsKT9udWxsOihuZXcgc2NfUGFpcigobmV3
IHNjX1BhaXIoKGFsaXN0LmNhci5jYXIpLCAoKHRlcm0gPSAoYWxpc3QuY2FyLmNkcikpLCAoISh0
ZXJtIGluc3RhbmNlb2Ygc2NfUGFpcik/dGVybToobmV3IHNjX1BhaXIoKEJnTF9zY19zeW1ib2x6
ZDJ6ZTNzeW1ib2x6ZDJyZWNvcmRfMXplM19uYm95ZXIoKHRlcm0uY2FyKSkpLCAodHJhbnNsYXRl
X2FyZ3NfbmJveWVyKCh0ZXJtLmNkcikpKSkpKSkpKSwgKChzY19hbGlzdF82ID0gKGFsaXN0LmNk
cikpLCAoKHNjX2FsaXN0XzYgPT09IG51bGwpP251bGw6KG5ldyBzY19QYWlyKChuZXcgc2NfUGFp
cigoc2NfYWxpc3RfNi5jYXIuY2FyKSwgKHRyYW5zbGF0ZV90ZXJtX25ib3llcigoc2NfYWxpc3Rf
Ni5jYXIuY2RyKSkpKSksICh0cmFuc2xhdGVfYWxpc3RfbmJveWVyKChzY19hbGlzdF82LmNkcikp
KSkpKSkpKSk7CisgICAgfTsKKyAgICBhcHBseV9zdWJzdF9uYm95ZXIgPSBmdW5jdGlvbihhbGlz
dCwgdGVybSkgeworICAgICAgICB2YXIgbHN0OworICAgICAgICB2YXIgdGVtcF90ZW1wOworICAg
ICAgICByZXR1cm4gKCEodGVybSBpbnN0YW5jZW9mIHNjX1BhaXIpPygodGVtcF90ZW1wID0gKHNj
X2Fzc3EodGVybSwgYWxpc3QpKSksICgodGVtcF90ZW1wIT09IGZhbHNlKT8odGVtcF90ZW1wLmNk
cik6dGVybSkpOihuZXcgc2NfUGFpcigodGVybS5jYXIpLCAoKGxzdCA9ICh0ZXJtLmNkcikpLCAo
KGxzdCA9PT0gbnVsbCk/bnVsbDoobmV3IHNjX1BhaXIoKGFwcGx5X3N1YnN0X25ib3llcihhbGlz
dCwgKGxzdC5jYXIpKSksIChhcHBseV9zdWJzdF9sc3RfbmJveWVyKGFsaXN0LCAobHN0LmNkcikp
KSkpKSkpKSk7CisgICAgfTsKKyAgICBhcHBseV9zdWJzdF9sc3RfbmJveWVyID0gZnVuY3Rpb24o
YWxpc3QsIGxzdCkgeworICAgICAgICB2YXIgc2NfbHN0Xzc7CisgICAgICAgIHJldHVybiAoKGxz
dCA9PT0gbnVsbCk/bnVsbDoobmV3IHNjX1BhaXIoKGFwcGx5X3N1YnN0X25ib3llcihhbGlzdCwg
KGxzdC5jYXIpKSksICgoc2NfbHN0XzcgPSAobHN0LmNkcikpLCAoKHNjX2xzdF83ID09PSBudWxs
KT9udWxsOihuZXcgc2NfUGFpcigoYXBwbHlfc3Vic3RfbmJveWVyKGFsaXN0LCAoc2NfbHN0Xzcu
Y2FyKSkpLCAoYXBwbHlfc3Vic3RfbHN0X25ib3llcihhbGlzdCwgKHNjX2xzdF83LmNkcikpKSkp
KSkpKSk7CisgICAgfTsKKyAgICB0YXV0b2xvZ3lwX25ib3llciA9IGZ1bmN0aW9uKHNjX3hfMTEs
IHRydWVfbHN0LCBmYWxzZV9sc3QpIHsKKyAgICAgICAgdmFyIHRtcDExMjU7CisgICAgICAgIHZh
ciB4OworICAgICAgICB2YXIgdG1wMTEyNjsKKyAgICAgICAgdmFyIHNjX3hfODsKKyAgICAgICAg
dmFyIHNjX3RtcDExMjVfOTsKKyAgICAgICAgdmFyIHNjX3RtcDExMjZfMTA7CisgICAgICAgIHZh
ciBzY194XzExOworICAgICAgICB2YXIgdHJ1ZV9sc3Q7CisgICAgICAgIHZhciBmYWxzZV9sc3Q7
CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBpZiAoKCgoc2NfdG1wMTEyNl8x
MCA9IChpc190ZXJtX2VxdWFsX25ib3llcihzY194XzExLCB0cnVlX3Rlcm1fbmJveWVyKSkpLCAo
KHNjX3RtcDExMjZfMTAhPT0gZmFsc2UpP3NjX3RtcDExMjZfMTA6KGlzX3Rlcm1fbWVtYmVyX25i
b3llcihzY194XzExLCB0cnVlX2xzdCkpKSkhPT0gZmFsc2UpKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmICgoKChzY190
bXAxMTI1XzkgPSAoaXNfdGVybV9lcXVhbF9uYm95ZXIoc2NfeF8xMSwgZmFsc2VfdGVybV9uYm95
ZXIpKSksICgoc2NfdG1wMTEyNV85IT09IGZhbHNlKT9zY190bXAxMTI1Xzk6KGlzX3Rlcm1fbWVt
YmVyX25ib3llcihzY194XzExLCBmYWxzZV9sc3QpKSkpIT09IGZhbHNlKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCEoc2NfeF8xMSBpbnN0YW5jZW9mIHNjX1BhaXIpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoKChzY194XzExLmNhcik9PT1pZl9jb25zdHJ1Y3Rvcl9u
Ym95ZXIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKChzY194XzggPSAoc2Nf
eF8xMS5jZHIuY2FyKSksICh0bXAxMTI2ID0gKGlzX3Rlcm1fZXF1YWxfbmJveWVyKHNjX3hfOCwg
dHJ1ZV90ZXJtX25ib3llcikpKSwgKCh0bXAxMTI2IT09IGZhbHNlKT90bXAxMTI2Oihpc190ZXJt
X21lbWJlcl9uYm95ZXIoc2NfeF84LCB0cnVlX2xzdCkpKSkhPT0gZmFsc2UpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoc2NfeF8xMSA9IChzY194XzExLmNkci5jZHIuY2FyKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoKCgoeCA9IChzY194XzExLmNkci5jYXIpKSwgKHRtcDExMjUgPSAoaXNf
dGVybV9lcXVhbF9uYm95ZXIoeCwgZmFsc2VfdGVybV9uYm95ZXIpKSksICgodG1wMTEyNSE9PSBm
YWxzZSk/dG1wMTEyNTooaXNfdGVybV9tZW1iZXJfbmJveWVyKHgsIGZhbHNlX2xzdCkpKSkhPT0g
ZmFsc2UpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNjX3hfMTEgPSAo
c2NfeF8xMS5jZHIuY2RyLmNkci5jYXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgodGF1dG9s
b2d5cF9uYm95ZXIoKHNjX3hfMTEuY2RyLmNkci5jYXIpLCAobmV3IHNjX1BhaXIoKHNjX3hfMTEu
Y2RyLmNhciksIHRydWVfbHN0KSksIGZhbHNlX2xzdCkpIT09IGZhbHNlKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChmYWxzZV9sc3QgPSAobmV3IHNjX1BhaXIoKHNjX3hfMTEuY2Ry
LmNhciksIGZhbHNlX2xzdCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHNjX3hfMTEgPSAoc2NfeF8xMS5jZHIuY2RyLmNkci5jYXIpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH07CisgICAg
KGlmX2NvbnN0cnVjdG9yX25ib3llciA9ICJcdTFFOUMqIik7CisgICAgKHJld3JpdGVfY291bnRf
bmJveWVyID0gKDApKTsKKyAgICByZXdyaXRlX25ib3llciA9IGZ1bmN0aW9uKHRlcm0pIHsKKyAg
ICAgICAgdmFyIHRlcm0yOworICAgICAgICB2YXIgc2NfdGVybV8xMjsKKyAgICAgICAgdmFyIGxz
dDsKKyAgICAgICAgdmFyIHN5bWJvbF9yZWNvcmQ7CisgICAgICAgIHZhciBzY19sc3RfMTM7Cisg
ICAgICAgIHsKKyAgICAgICAgICAgICgrK3Jld3JpdGVfY291bnRfbmJveWVyKTsKKyAgICAgICAg
ICAgIGlmICghKHRlcm0gaW5zdGFuY2VvZiBzY19QYWlyKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGVybTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIChzY190ZXJtXzEyID0gKG5ldyBzY19QYWlyKCh0ZXJtLmNhciksICgoc2NfbHN0
XzEzID0gKHRlcm0uY2RyKSksICgoc2NfbHN0XzEzID09PSBudWxsKT9udWxsOihuZXcgc2NfUGFp
cigocmV3cml0ZV9uYm95ZXIoKHNjX2xzdF8xMy5jYXIpKSksIChyZXdyaXRlX2FyZ3NfbmJveWVy
KChzY19sc3RfMTMuY2RyKSkpKSkpKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgKGxzdCA9ICgo
c3ltYm9sX3JlY29yZCA9ICh0ZXJtLmNhcikpLCAoc3ltYm9sX3JlY29yZFsoMSldKSkpOworICAg
ICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKChsc3QgPT09IG51bGwpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBz
Y190ZXJtXzEyOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICgoKCh0ZXJtMiA9ICgobHN0LmNhcikuY2RyLmNhcikpLCAodW5pZnlf
c3Vic3RfbmJveWVyID0gbnVsbCksIChvbmVfd2F5X3VuaWZ5MV9uYm95ZXIoc2NfdGVybV8xMiwg
dGVybTIpKSkhPT0gZmFsc2UpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gKHJld3JpdGVfbmJveWVyKChhcHBseV9zdWJzdF9uYm95ZXIodW5pZnlfc3Vic3RfbmJveWVy
LCAoKGxzdC5jYXIpLmNkci5jZHIuY2FyKSkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobHN0ID0gKGxzdC5jZHIp
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH07CisgICAgcmV3cml0ZV9hcmdzX25ib3llciA9IGZ1bmN0aW9uKGxzdCkgeworICAgICAg
ICB2YXIgc2NfbHN0XzE0OworICAgICAgICByZXR1cm4gKChsc3QgPT09IG51bGwpP251bGw6KG5l
dyBzY19QYWlyKChyZXdyaXRlX25ib3llcigobHN0LmNhcikpKSwgKChzY19sc3RfMTQgPSAobHN0
LmNkcikpLCAoKHNjX2xzdF8xNCA9PT0gbnVsbCk/bnVsbDoobmV3IHNjX1BhaXIoKHJld3JpdGVf
bmJveWVyKChzY19sc3RfMTQuY2FyKSkpLCAocmV3cml0ZV9hcmdzX25ib3llcigoc2NfbHN0XzE0
LmNkcikpKSkpKSkpKSk7CisgICAgfTsKKyAgICAodW5pZnlfc3Vic3RfbmJveWVyID0gIlx1MUU5
QyoiKTsKKyAgICBvbmVfd2F5X3VuaWZ5MV9uYm95ZXIgPSBmdW5jdGlvbih0ZXJtMSwgdGVybTIp
IHsKKyAgICAgICAgdmFyIGxzdDE7CisgICAgICAgIHZhciBsc3QyOworICAgICAgICB2YXIgdGVt
cF90ZW1wOworICAgICAgICBpZiAoISh0ZXJtMiBpbnN0YW5jZW9mIHNjX1BhaXIpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICh0ZW1wX3RlbXAgPSAoc2NfYXNzcSh0ZXJtMiwgdW5p
Znlfc3Vic3RfbmJveWVyKSkpOworICAgICAgICAgICAgICAgIGlmICgodGVtcF90ZW1wIT09IGZh
bHNlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpc190ZXJtX2VxdWFsX25ib3llcih0
ZXJtMSwgKHRlbXBfdGVtcC5jZHIpKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICBpZiAoKHNjX2lzTnVtYmVyKHRlcm0yKSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gKHNjX2lzRXF1YWwodGVybTEsIHRlcm0yKSk7CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAodW5pZnlfc3Vic3RfbmJveWVyID0gKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcih0
ZXJtMiwgdGVybTEpKSwgdW5pZnlfc3Vic3RfbmJveWVyKSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiAoISh0ZXJtMSBpbnN0YW5jZW9m
IHNjX1BhaXIpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBpZiAoKCh0ZXJtMS5jYXIpPT09KHRlcm0yLmNhcikpKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAobHN0MSA9ICh0ZXJt
MS5jZHIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIChsc3QyID0gKHRlcm0yLmNkcikpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoKGxzdDEgPT09IG51bGwpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gKGxzdDIgPT09IG51bGwpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChsc3QyID09PSBu
dWxsKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCgob25lX3dheV91bmlmeTFfbmJveWVyKChsc3QxLmNhciks
IChsc3QyLmNhcikpKSE9PSBmYWxzZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
bHN0MSA9IChsc3QxLmNkcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAobHN0MiA9IChsc3QyLmNkcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Owor
ICAgIChmYWxzZV90ZXJtX25ib3llciA9ICJcdTFFOUMqIik7CisgICAgKHRydWVfdGVybV9uYm95
ZXIgPSAiXHUxRTlDKiIpOworICAgIHRyYW5zX29mX2ltcGxpZXMxX25ib3llciA9IGZ1bmN0aW9u
KG4pIHsKKyAgICAgICAgdmFyIHNjX25fMTU7CisgICAgICAgIHJldHVybiAoKHNjX2lzRXF1YWwo
biwgKDEpKSk/KHNjX2xpc3QoIlx1MUU5Q2ltcGxpZXMiLCAoMCksICgxKSkpOihzY19saXN0KCJc
dTFFOUNhbmQiLCAoc2NfbGlzdCgiXHUxRTlDaW1wbGllcyIsIChuLSgxKSksIG4pKSwgKChzY19u
XzE1ID0gKG4tKDEpKSksICgoc2NfaXNFcXVhbChzY19uXzE1LCAoMSkpKT8oc2NfbGlzdCgiXHUx
RTlDaW1wbGllcyIsICgwKSwgKDEpKSk6KHNjX2xpc3QoIlx1MUU5Q2FuZCIsIChzY19saXN0KCJc
dTFFOUNpbXBsaWVzIiwgKHNjX25fMTUtKDEpKSwgc2Nfbl8xNSkpLCAodHJhbnNfb2ZfaW1wbGll
czFfbmJveWVyKChzY19uXzE1LSgxKSkpKSkpKSkpKSk7CisgICAgfTsKKyAgICBpc190ZXJtX2Vx
dWFsX25ib3llciA9IGZ1bmN0aW9uKHgsIHkpIHsKKyAgICAgICAgdmFyIGxzdDE7CisgICAgICAg
IHZhciBsc3QyOworICAgICAgICB2YXIgcjI7CisgICAgICAgIHZhciByMTsKKyAgICAgICAgaWYg
KCh4IGluc3RhbmNlb2Ygc2NfUGFpcikpCisgICAgICAgICAgICBpZiAoKHkgaW5zdGFuY2VvZiBz
Y19QYWlyKSkKKyAgICAgICAgICAgICAgICBpZiAoKCgocjEgPSAoeC5jYXIpKSwgKHIyID0gKHku
Y2FyKSksIChyMT09PXIyKSkhPT0gZmFsc2UpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAobHN0MSA9ICh4LmNkcikpOworICAgICAgICAgICAgICAgICAg
ICAgICAgKGxzdDIgPSAoeS5jZHIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0
cnVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChsc3QxID09PSBudWxsKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChsc3QyID09PSBudWxsKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICgobHN0MiA9PT0gbnVsbCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKGlzX3Rlcm1f
ZXF1YWxfbmJveWVyKChsc3QxLmNhciksIChsc3QyLmNhcikpKSE9PSBmYWxzZSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAobHN0MSA9IChsc3QxLmNkcikpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobHN0MiA9IChsc3QyLmNkcikpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAoc2NfaXNFcXVhbCh4LCB5
KSk7CisgICAgfTsKKyAgICBpc190ZXJtX21lbWJlcl9uYm95ZXIgPSBmdW5jdGlvbih4LCBsc3Qp
IHsKKyAgICAgICAgdmFyIHg7CisgICAgICAgIHZhciBsc3Q7CisgICAgICAgIHdoaWxlICh0cnVl
KSB7CisgICAgICAgICAgICBpZiAoKGxzdCA9PT0gbnVsbCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmICgoKGlzX3Rl
cm1fZXF1YWxfbmJveWVyKHgsIChsc3QuY2FyKSkpIT09IGZhbHNlKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICAobHN0ID0gKGxzdC5jZHIpKTsKKyAgICAgICAgfQorICAgIH07CisgICAgQmdMX3NldHVw
emQyYm95ZXJ6ZDIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHN5bWJvbF9yZWNvcmQ7Cisg
ICAgICAgIHZhciB2YWx1ZTsKKyAgICAgICAgdmFyIEJnTF9zY19zeW1ib2x6ZDJyZWNvcmRfMTZ6
ZDI7CisgICAgICAgIHZhciBzeW07CisgICAgICAgIHZhciBzY19zeW1fMTc7CisgICAgICAgIHZh
ciB0ZXJtOworICAgICAgICB2YXIgbHN0OworICAgICAgICB2YXIgc2NfdGVybV8xODsKKyAgICAg
ICAgdmFyIHNjX3Rlcm1fMTk7CisgICAgICAgIHsKKyAgICAgICAgICAgIChCZ0xfc2NfemEyc3lt
Ym9semQycmVjb3Jkc3pkMmFsaXN0emEyXzJ6MDBfbmJveWVyID0gbnVsbCk7CisgICAgICAgICAg
ICAoaWZfY29uc3RydWN0b3JfbmJveWVyID0gKEJnTF9zY19zeW1ib2x6ZDJ6ZTNzeW1ib2x6ZDJy
ZWNvcmRfMXplM19uYm95ZXIoIlx1MUU5Q2lmIikpKTsKKyAgICAgICAgICAgIChmYWxzZV90ZXJt
X25ib3llciA9ICgoc2NfdGVybV8xOSA9IChuZXcgc2NfUGFpcigiXHUxRTlDZiIsbnVsbCkpKSwg
KCEoc2NfdGVybV8xOSBpbnN0YW5jZW9mIHNjX1BhaXIpP3NjX3Rlcm1fMTk6KG5ldyBzY19QYWly
KChCZ0xfc2Nfc3ltYm9semQyemUzc3ltYm9semQycmVjb3JkXzF6ZTNfbmJveWVyKChzY190ZXJt
XzE5LmNhcikpKSwgKHRyYW5zbGF0ZV9hcmdzX25ib3llcigoc2NfdGVybV8xOS5jZHIpKSkpKSkp
KTsKKyAgICAgICAgICAgICh0cnVlX3Rlcm1fbmJveWVyID0gKChzY190ZXJtXzE4ID0gKG5ldyBz
Y19QYWlyKCJcdTFFOUN0IixudWxsKSkpLCAoIShzY190ZXJtXzE4IGluc3RhbmNlb2Ygc2NfUGFp
cik/c2NfdGVybV8xODoobmV3IHNjX1BhaXIoKEJnTF9zY19zeW1ib2x6ZDJ6ZTNzeW1ib2x6ZDJy
ZWNvcmRfMXplM19uYm95ZXIoKHNjX3Rlcm1fMTguY2FyKSkpLCAodHJhbnNsYXRlX2FyZ3NfbmJv
eWVyKChzY190ZXJtXzE4LmNkcikpKSkpKSkpOworICAgICAgICAgICAgKGxzdCA9IHNjX2NvbnN0
XzNfbmJveWVyKTsKKyAgICAgICAgICAgIHdoaWxlICghKGxzdCA9PT0gbnVsbCkpIHsKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICh0ZXJtID0gKGxzdC5jYXIpKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCgodGVybSBpbnN0YW5jZW9mIHNjX1BhaXIpJiYoKCh0ZXJt
LmNhcik9PT0iXHUxRTlDZXF1YWwiKSYmKCh0ZXJtLmNkci5jYXIpIGluc3RhbmNlb2Ygc2NfUGFp
cikpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoc2Nfc3ltXzE3ID0gKCh0ZXJtLmNkci5jYXIpLmNhcikpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICh2YWx1ZSA9IChuZXcgc2NfUGFpcigoISh0ZXJtIGluc3RhbmNlb2Ygc2Nf
UGFpcik/dGVybToobmV3IHNjX1BhaXIoKEJnTF9zY19zeW1ib2x6ZDJ6ZTNzeW1ib2x6ZDJyZWNv
cmRfMXplM19uYm95ZXIoKHRlcm0uY2FyKSkpLCAodHJhbnNsYXRlX2FyZ3NfbmJveWVyKCh0ZXJt
LmNkcikpKSkpKSwgKChzeW0gPSAoKHRlcm0uY2RyLmNhcikuY2FyKSksIChCZ0xfc2Nfc3ltYm9s
emQycmVjb3JkXzE2emQyID0gKEJnTF9zY19zeW1ib2x6ZDJ6ZTNzeW1ib2x6ZDJyZWNvcmRfMXpl
M19uYm95ZXIoc3ltKSkpLCAoQmdMX3NjX3N5bWJvbHpkMnJlY29yZF8xNnpkMlsoMSldKSkpKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN5bWJvbF9yZWNvcmQgPSAoQmdMX3NjX3N5
bWJvbHpkMnplM3N5bWJvbHpkMnJlY29yZF8xemUzX25ib3llcihzY19zeW1fMTcpKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHN5bWJvbF9yZWNvcmRbKDEpXSA9IHZhbHVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICAgICAgKHNjX2Vycm9yKCJBREQtTEVNTUEgZGlkIG5vdCBsaWtlIHRlcm06
ICAiLCB0ZXJtKSk7CisgICAgICAgICAgICAgICAgICAgIChsc3QgPSAobHN0LmNkcikpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgfTsKKyAgICBCZ0xfdGVzdHpkMmJveWVyemQyID0gZnVuY3Rpb24obikg
eworICAgICAgICB2YXIgb3B0ck9wbmQ7CisgICAgICAgIHZhciB0ZXJtOworICAgICAgICB2YXIg
c2Nfbl8yMDsKKyAgICAgICAgdmFyIGFuc3dlcjsKKyAgICAgICAgdmFyIHNjX3Rlcm1fMjE7Cisg
ICAgICAgIHZhciBzY190ZXJtXzIyOworICAgICAgICB7CisgICAgICAgICAgICAocmV3cml0ZV9j
b3VudF9uYm95ZXIgPSAoMCkpOworICAgICAgICAgICAgKHRlcm0gPSBzY19jb25zdF80X25ib3ll
cik7CisgICAgICAgICAgICAoc2Nfbl8yMCA9IG4pOworICAgICAgICAgICAgd2hpbGUgKCEoc2Nf
bl8yMD09PSAwKSkgeworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKHRl
cm0gPSAoc2NfbGlzdCgiXHUxRTlDb3IiLCB0ZXJtLCAobmV3IHNjX1BhaXIoIlx1MUU5Q2YiLG51
bGwpKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgKC0tc2Nfbl8yMCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgKHNjX3Rlcm1fMjIgPSB0ZXJtKTsKKyAg
ICAgICAgICAgIGlmICghKHNjX3Rlcm1fMjIgaW5zdGFuY2VvZiBzY19QYWlyKSkKKyAgICAgICAg
ICAgICAgICAob3B0ck9wbmQgPSBzY190ZXJtXzIyKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAob3B0ck9wbmQgPSAobmV3IHNjX1BhaXIoKEJnTF9zY19zeW1ib2x6ZDJ6ZTNz
eW1ib2x6ZDJyZWNvcmRfMXplM19uYm95ZXIoKHNjX3Rlcm1fMjIuY2FyKSkpLCAodHJhbnNsYXRl
X2FyZ3NfbmJveWVyKChzY190ZXJtXzIyLmNkcikpKSkpKTsKKyAgICAgICAgICAgIChzY190ZXJt
XzIxID0gKGFwcGx5X3N1YnN0X25ib3llcigoKGNvbnN0X25ib3llciA9PT0gbnVsbCk/bnVsbDoo
bmV3IHNjX1BhaXIoKG5ldyBzY19QYWlyKChjb25zdF9uYm95ZXIuY2FyLmNhciksICh0cmFuc2xh
dGVfdGVybV9uYm95ZXIoKGNvbnN0X25ib3llci5jYXIuY2RyKSkpKSksICh0cmFuc2xhdGVfYWxp
c3RfbmJveWVyKChjb25zdF9uYm95ZXIuY2RyKSkpKSkpLCBvcHRyT3BuZCkpKTsKKyAgICAgICAg
ICAgIChhbnN3ZXIgPSAodGF1dG9sb2d5cF9uYm95ZXIoKHJld3JpdGVfbmJveWVyKHNjX3Rlcm1f
MjEpKSwgbnVsbCwgbnVsbCkpKTsKKyAgICAgICAgICAgIChzY193cml0ZShyZXdyaXRlX2NvdW50
X25ib3llcikpOworICAgICAgICAgICAgKHNjX2Rpc3BsYXkoIiByZXdyaXRlcyIpKTsKKyAgICAg
ICAgICAgIChzY19uZXdsaW5lKCkpOworICAgICAgICAgICAgaWYgKChhbnN3ZXIhPT0gZmFsc2Up
KQorICAgICAgICAgICAgICAgIHJldHVybiByZXdyaXRlX2NvdW50X25ib3llcjsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9
OworfQorLyogRXhwb3J0ZWQgVmFyaWFibGVzICovCit2YXIgQmdMX3BhcnNlemQyemUzbmJ6ZDJ0
cmVlc3plMzsKK3ZhciBCZ0xfZWFybGV5emQyYmVuY2htYXJremQyOwordmFyIEJnTF9wYXJzZXpk
MnplM3BhcnNlZHpmM3pjMjsKK3ZhciB0ZXN0OwordmFyIEJnTF9wYXJzZXpkMnplM3RyZWVzejMx
OwordmFyIEJnTF9tYWtlemQycGFyc2VyemQyOworLyogRW5kIEV4cG9ydHMgKi8KKwordmFyIGNv
bnN0X2VhcmxleTsKK3sKKyAgICAoY29uc3RfZWFybGV5ID0gKG5ldyBzY19QYWlyKChuZXcgc2Nf
UGFpcigiXHUxRTlDcyIsKG5ldyBzY19QYWlyKChuZXcgc2NfUGFpcigiXHUxRTlDYSIsbnVsbCkp
LChuZXcgc2NfUGFpcigobmV3IHNjX1BhaXIoIlx1MUU5Q3MiLChuZXcgc2NfUGFpcigiXHUxRTlD
cyIsbnVsbCkpKSksbnVsbCkpKSkpKSxudWxsKSkpOworICAgIEJnTF9tYWtlemQycGFyc2VyemQy
ID0gZnVuY3Rpb24oZ3JhbW1hciwgbGV4ZXIpIHsKKyAgICAgICAgdmFyIGk7CisgICAgICAgIHZh
ciBwYXJzZXJfZGVzY3I7CisgICAgICAgIHZhciBkZWZfbG9vcDsKKyAgICAgICAgdmFyIG5iX250
czsKKyAgICAgICAgdmFyIG5hbWVzOworICAgICAgICB2YXIgc3RlcHM7CisgICAgICAgIHZhciBw
cmVkaWN0b3JzOworICAgICAgICB2YXIgZW5kZXJzOworICAgICAgICB2YXIgc3RhcnRlcnM7Cisg
ICAgICAgIHZhciBudHM7CisgICAgICAgIHZhciBzY19uYW1lc18xOworICAgICAgICB2YXIgc2Nf
c3RlcHNfMjsKKyAgICAgICAgdmFyIHNjX3ByZWRpY3RvcnNfMzsKKyAgICAgICAgdmFyIHNjX2Vu
ZGVyc180OworICAgICAgICB2YXIgc2Nfc3RhcnRlcnNfNTsKKyAgICAgICAgdmFyIG5iX2NvbmZz
OworICAgICAgICB2YXIgQmdMX3NjX2RlZnpkMmxvb3BfNnpkMjsKKyAgICAgICAgdmFyIEJnTF9z
Y19uYnpkMm50c183emQyOworICAgICAgICB2YXIgc2NfbnRzXzg7CisgICAgICAgIHZhciBCZ0xf
c2NfZGVmemQybG9vcF85emQyOworICAgICAgICB2YXIgaW5kOworICAgICAgICB7CisgICAgICAg
ICAgICBpbmQgPSBmdW5jdGlvbihudCwgc2NfbnRzXzEwKSB7CisgICAgICAgICAgICAgICAgdmFy
IGk7CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAoaSA9ICgoc2NfbnRz
XzEwLmxlbmd0aCktKDEpKSk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGk+PSgwKSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKChzY19pc0VxdWFsKChzY19udHNfMTBbaV0pLCBudCkpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtLWkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH07CisgICAgICAgICAgICAoc2NfbnRzXzggPSAoKEJnTF9zY19kZWZ6ZDJsb29wXzl6
ZDIgPSBmdW5jdGlvbihkZWZzLCBzY19udHNfMTEpIHsKKyAgICAgICAgICAgICAgICB2YXIgcnVs
ZV9sb29wOworICAgICAgICAgICAgICAgIHZhciBoZWFkOworICAgICAgICAgICAgICAgIHZhciBk
ZWY7CisgICAgICAgICAgICAgICAgcmV0dXJuICgoZGVmcyBpbnN0YW5jZW9mIHNjX1BhaXIpPygo
ZGVmID0gKGRlZnMuY2FyKSksIChoZWFkID0gKGRlZi5jYXIpKSwgKHJ1bGVfbG9vcCA9IGZ1bmN0
aW9uKHJ1bGVzLCBzY19udHNfMTIpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG50OworICAg
ICAgICAgICAgICAgICAgICB2YXIgbDsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHNjX250c18x
MzsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHJ1bGU7CisgICAgICAgICAgICAgICAgICAgIGlm
ICgocnVsZXMgaW5zdGFuY2VvZiBzY19QYWlyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnVsZSA9IChydWxlcy5jYXIpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAobCA9IHJ1bGUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChzY19udHNfMTMgPSBzY19udHNfMTIpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdoaWxlICgobCBpbnN0YW5jZW9mIHNjX1BhaXIpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudCA9
IChsLmNhcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGwgPSAobC5j
ZHIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzY19udHNfMTMgPSAo
KChzY19tZW1iZXIobnQsIHNjX250c18xMykpIT09IGZhbHNlKT9zY19udHNfMTM6KG5ldyBzY19Q
YWlyKG50LCBzY19udHNfMTMpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAocnVsZV9sb29wKChydWxlcy5jZHIpLCBzY19udHNfMTMpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIChCZ0xfc2NfZGVmemQybG9vcF85emQyKChkZWZzLmNkciksIHNj
X250c18xMikpOworICAgICAgICAgICAgICAgIH0pLCAocnVsZV9sb29wKChkZWYuY2RyKSwgKCgo
c2NfbWVtYmVyKGhlYWQsIHNjX250c18xMSkpIT09IGZhbHNlKT9zY19udHNfMTE6KG5ldyBzY19Q
YWlyKGhlYWQsIHNjX250c18xMSkpKSkpKTooc2NfbGlzdDJ2ZWN0b3IoKHNjX3JldmVyc2Uoc2Nf
bnRzXzExKSkpKSk7CisgICAgICAgICAgICB9KSwgKEJnTF9zY19kZWZ6ZDJsb29wXzl6ZDIoZ3Jh
bW1hciwgbnVsbCkpKSk7CisgICAgICAgICAgICAoQmdMX3NjX25iemQybnRzXzd6ZDIgPSAoc2Nf
bnRzXzgubGVuZ3RoKSk7CisgICAgICAgICAgICAobmJfY29uZnMgPSAoKChCZ0xfc2NfZGVmemQy
bG9vcF82emQyID0gZnVuY3Rpb24oZGVmcywgQmdMX3NjX25iemQyY29uZnNfMTR6ZDIpIHsKKyAg
ICAgICAgICAgICAgICB2YXIgcnVsZV9sb29wOworICAgICAgICAgICAgICAgIHZhciBkZWY7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICgoZGVmcyBpbnN0YW5jZW9mIHNjX1BhaXIpPygoZGVmID0g
KGRlZnMuY2FyKSksIChydWxlX2xvb3AgPSBmdW5jdGlvbihydWxlcywgQmdMX3NjX25iemQyY29u
ZnNfMTV6ZDIpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGw7CisgICAgICAgICAgICAgICAg
ICAgIHZhciBCZ0xfc2NfbmJ6ZDJjb25mc18xNnpkMjsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IHJ1bGU7CisgICAgICAgICAgICAgICAgICAgIGlmICgocnVsZXMgaW5zdGFuY2VvZiBzY19QYWly
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAocnVsZSA9IChydWxlcy5jYXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobCA9
IHJ1bGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCZ0xfc2NfbmJ6ZDJjb25mc18x
NnpkMiA9IEJnTF9zY19uYnpkMmNvbmZzXzE1emQyKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3aGlsZSAoKGwgaW5zdGFuY2VvZiBzY19QYWlyKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobCA9
IChsLmNkcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCsrQmdMX3Nj
X25iemQyY29uZnNfMTZ6ZDIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAocnVsZV9sb29wKChydWxlcy5jZHIpLCAoQmdMX3NjX25iemQyY29uZnNfMTZ6ZDIr
KDEpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKEJnTF9zY19kZWZ6ZDJsb29wXzZ6
ZDIoKGRlZnMuY2RyKSwgQmdMX3NjX25iemQyY29uZnNfMTV6ZDIpKTsKKyAgICAgICAgICAgICAg
ICB9KSwgKHJ1bGVfbG9vcCgoZGVmLmNkciksIEJnTF9zY19uYnpkMmNvbmZzXzE0emQyKSkpOkJn
TF9zY19uYnpkMmNvbmZzXzE0emQyKTsKKyAgICAgICAgICAgIH0pLCAoQmdMX3NjX2RlZnpkMmxv
b3BfNnpkMihncmFtbWFyLCAoMCkpKSkrQmdMX3NjX25iemQybnRzXzd6ZDIpKTsKKyAgICAgICAg
ICAgIChzY19zdGFydGVyc181ID0gKHNjX21ha2VWZWN0b3IoQmdMX3NjX25iemQybnRzXzd6ZDIs
IG51bGwpKSk7CisgICAgICAgICAgICAoc2NfZW5kZXJzXzQgPSAoc2NfbWFrZVZlY3RvcihCZ0xf
c2NfbmJ6ZDJudHNfN3pkMiwgbnVsbCkpKTsKKyAgICAgICAgICAgIChzY19wcmVkaWN0b3JzXzMg
PSAoc2NfbWFrZVZlY3RvcihCZ0xfc2NfbmJ6ZDJudHNfN3pkMiwgbnVsbCkpKTsKKyAgICAgICAg
ICAgIChzY19zdGVwc18yID0gKHNjX21ha2VWZWN0b3IobmJfY29uZnMsIGZhbHNlKSkpOworICAg
ICAgICAgICAgKHNjX25hbWVzXzEgPSAoc2NfbWFrZVZlY3RvcihuYl9jb25mcywgZmFsc2UpKSk7
CisgICAgICAgICAgICAobnRzID0gc2NfbnRzXzgpOworICAgICAgICAgICAgKHN0YXJ0ZXJzID0g
c2Nfc3RhcnRlcnNfNSk7CisgICAgICAgICAgICAoZW5kZXJzID0gc2NfZW5kZXJzXzQpOworICAg
ICAgICAgICAgKHByZWRpY3RvcnMgPSBzY19wcmVkaWN0b3JzXzMpOworICAgICAgICAgICAgKHN0
ZXBzID0gc2Nfc3RlcHNfMik7CisgICAgICAgICAgICAobmFtZXMgPSBzY19uYW1lc18xKTsKKyAg
ICAgICAgICAgIChuYl9udHMgPSAoc2NfbnRzXzgubGVuZ3RoKSk7CisgICAgICAgICAgICAoaSA9
IChuYl9udHMtKDEpKSk7CisgICAgICAgICAgICB3aGlsZSAoKGk+PSgwKSkpIHsKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIChzY19zdGVwc18yW2ldID0gKGktbmJfbnRz
KSk7CisgICAgICAgICAgICAgICAgICAgIChzY19uYW1lc18xW2ldID0gKHNjX2xpc3QoKHNjX250
c184W2ldKSwgKDApKSkpOworICAgICAgICAgICAgICAgICAgICAoc2NfZW5kZXJzXzRbaV0gPSAo
c2NfbGlzdChpKSkpOworICAgICAgICAgICAgICAgICAgICAoLS1pKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZfbG9vcCA9IGZ1bmN0aW9uKGRlZnMs
IGNvbmYpIHsKKyAgICAgICAgICAgICAgICB2YXIgcnVsZV9sb29wOworICAgICAgICAgICAgICAg
IHZhciBoZWFkOworICAgICAgICAgICAgICAgIHZhciBkZWY7CisgICAgICAgICAgICAgICAgcmV0
dXJuICgoZGVmcyBpbnN0YW5jZW9mIHNjX1BhaXIpPygoZGVmID0gKGRlZnMuY2FyKSksIChoZWFk
ID0gKGRlZi5jYXIpKSwgKHJ1bGVfbG9vcCA9IGZ1bmN0aW9uKHJ1bGVzLCBjb25mLCBydWxlX251
bSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgaTsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IHNjX2lfMTc7CisgICAgICAgICAgICAgICAgICAgIHZhciBudDsKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIGw7CisgICAgICAgICAgICAgICAgICAgIHZhciBzY19jb25mXzE4OworICAgICAgICAg
ICAgICAgICAgICB2YXIgc2NfaV8xOTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHJ1bGU7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICgocnVsZXMgaW5zdGFuY2VvZiBzY19QYWlyKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnVsZSA9
IChydWxlcy5jYXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZXNbY29uZl0g
PSAoc2NfbGlzdChoZWFkLCBydWxlX251bSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoc2NfaV8xOSA9IChpbmQoaGVhZCwgbnRzKSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChzdGFydGVyc1tzY19pXzE5XSA9IChuZXcgc2NfUGFpcihjb25mLCAoc3RhcnRlcnNbc2Nf
aV8xOV0pKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsID0gcnVsZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHNjX2NvbmZfMTggPSBjb25mKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3aGlsZSAoKGwgaW5zdGFuY2VvZiBzY19QYWlyKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAobnQgPSAobC5jYXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChzdGVwc1tzY19jb25mXzE4XSA9IChpbmQobnQsIG50cykpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChzY19pXzE3ID0gKGluZChudCwgbnRzKSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByZWRpY3RvcnNbc2NfaV8xN10gPSAobmV3
IHNjX1BhaXIoc2NfY29uZl8xOCwgKHByZWRpY3RvcnNbc2NfaV8xN10pKSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGwgPSAobC5jZHIpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICgrK3NjX2NvbmZfMTgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChzdGVwc1tzY19jb25mXzE4XSA9ICgoaW5kKGhlYWQsIG50cykp
LW5iX250cykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpID0gKGluZChoZWFkLCBu
dHMpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVuZGVyc1tpXSA9IChuZXcgc2Nf
UGFpcihzY19jb25mXzE4LCAoZW5kZXJzW2ldKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gKHJ1bGVfbG9vcCgocnVsZXMuY2RyKSwgKHNjX2NvbmZfMTgrKDEpKSwgKHJ1
bGVfbnVtKygxKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChkZWZfbG9vcCgoZGVm
cy5jZHIpLCBjb25mKSk7CisgICAgICAgICAgICAgICAgfSksIChydWxlX2xvb3AoKGRlZi5jZHIp
LCBjb25mLCAoMSkpKSk6dW5kZWZpbmVkKTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICAo
ZGVmX2xvb3AoZ3JhbW1hciwgKHNjX250c184Lmxlbmd0aCkpKTsKKyAgICAgICAgICAgIChwYXJz
ZXJfZGVzY3IgPSBbbGV4ZXIsIHNjX250c184LCBzY19zdGFydGVyc181LCBzY19lbmRlcnNfNCwg
c2NfcHJlZGljdG9yc18zLCBzY19zdGVwc18yLCBzY19uYW1lc18xXSk7CisgICAgICAgICAgICBy
ZXR1cm4gZnVuY3Rpb24oaW5wdXQpIHsKKyAgICAgICAgICAgICAgICB2YXIgb3B0ck9wbmQ7Cisg
ICAgICAgICAgICAgICAgdmFyIHNjX29wdHJPcG5kXzIwOworICAgICAgICAgICAgICAgIHZhciBz
Y19vcHRyT3BuZF8yMTsKKyAgICAgICAgICAgICAgICB2YXIgc2Nfb3B0ck9wbmRfMjI7CisgICAg
ICAgICAgICAgICAgdmFyIGxvb3AxOworICAgICAgICAgICAgICAgIHZhciBCZ0xfc2Nfc3RhdGV6
YTJfMjN6YTI7CisgICAgICAgICAgICAgICAgdmFyIHRva3M7CisgICAgICAgICAgICAgICAgdmFy
IEJnTF9zY19uYnpkMm50c18yNHpkMjsKKyAgICAgICAgICAgICAgICB2YXIgc2Nfc3RlcHNfMjU7
CisgICAgICAgICAgICAgICAgdmFyIHNjX2VuZGVyc18yNjsKKyAgICAgICAgICAgICAgICB2YXIg
c3RhdGVfbnVtOworICAgICAgICAgICAgICAgIHZhciBCZ0xfc2Nfc3RhdGVzemEyXzI3emEyOwor
ICAgICAgICAgICAgICAgIHZhciBzdGF0ZXM7CisgICAgICAgICAgICAgICAgdmFyIGk7CisgICAg
ICAgICAgICAgICAgdmFyIGNvbmY7CisgICAgICAgICAgICAgICAgdmFyIGw7CisgICAgICAgICAg
ICAgICAgdmFyIHRva19udHM7CisgICAgICAgICAgICAgICAgdmFyIHNjX2lfMjg7CisgICAgICAg
ICAgICAgICAgdmFyIHNjX2lfMjk7CisgICAgICAgICAgICAgICAgdmFyIGwxOworICAgICAgICAg
ICAgICAgIHZhciBsMjsKKyAgICAgICAgICAgICAgICB2YXIgdG9rOworICAgICAgICAgICAgICAg
IHZhciB0YWlsMTEyOTsKKyAgICAgICAgICAgICAgICB2YXIgTDExMjU7CisgICAgICAgICAgICAg
ICAgdmFyIGdvYWxfZW5kZXJzOworICAgICAgICAgICAgICAgIHZhciBCZ0xfc2Nfc3RhdGVzemEy
XzMwemEyOworICAgICAgICAgICAgICAgIHZhciBCZ0xfc2NfbmJ6ZDJudHNfMzF6ZDI7CisgICAg
ICAgICAgICAgICAgdmFyIEJnTF9zY19uYnpkMmNvbmZzXzMyemQyOworICAgICAgICAgICAgICAg
IHZhciBuYl90b2tzOworICAgICAgICAgICAgICAgIHZhciBnb2FsX3N0YXJ0ZXJzOworICAgICAg
ICAgICAgICAgIHZhciBzY19zdGF0ZXNfMzM7CisgICAgICAgICAgICAgICAgdmFyIEJnTF9zY19u
YnpkMmNvbmZzXzM0emQyOworICAgICAgICAgICAgICAgIHZhciBCZ0xfc2NfbmJ6ZDJ0b2tzXzM1
emQyOworICAgICAgICAgICAgICAgIHZhciBzY190b2tzXzM2OworICAgICAgICAgICAgICAgIHZh
ciBmYWxzZUhlYWQxMTI4OworICAgICAgICAgICAgICAgIHZhciBzY19uYW1lc18zNzsKKyAgICAg
ICAgICAgICAgICB2YXIgc2Nfc3RlcHNfMzg7CisgICAgICAgICAgICAgICAgdmFyIHNjX3ByZWRp
Y3RvcnNfMzk7CisgICAgICAgICAgICAgICAgdmFyIHNjX2VuZGVyc180MDsKKyAgICAgICAgICAg
ICAgICB2YXIgc2Nfc3RhcnRlcnNfNDE7CisgICAgICAgICAgICAgICAgdmFyIHNjX250c180MjsK
KyAgICAgICAgICAgICAgICB2YXIgbGV4ZXI7CisgICAgICAgICAgICAgICAgdmFyIHNjX2luZF80
MzsKKyAgICAgICAgICAgICAgICB2YXIgbWFrZV9zdGF0ZXM7CisgICAgICAgICAgICAgICAgdmFy
IEJnTF9zY19jb25memQyc2V0emQyZ2V0emEyXzQ0emEyOworICAgICAgICAgICAgICAgIHZhciBj
b25mX3NldF9tZXJnZV9uZXdfYmFuZzsKKyAgICAgICAgICAgICAgICB2YXIgY29uZl9zZXRfYWRq
b2luOworICAgICAgICAgICAgICAgIHZhciBCZ0xfc2NfY29uZnpkMnNldHpkMmFkam9pbnphMl80
NXphMjsKKyAgICAgICAgICAgICAgICB2YXIgQmdMX3NjX2NvbmZ6ZDJzZXR6ZDJhZGpvaW56YTJ6
YTJfNDZ6MDA7CisgICAgICAgICAgICAgICAgdmFyIGNvbmZfc2V0X3VuaW9uOworICAgICAgICAg
ICAgICAgIHZhciBmb3J3OworICAgICAgICAgICAgICAgIHZhciBpc19wYXJzZWQ7CisgICAgICAg
ICAgICAgICAgdmFyIGRlcml2X3RyZWVzOworICAgICAgICAgICAgICAgIHZhciBCZ0xfc2NfZGVy
aXZ6ZDJ0cmVlc3phMl80N3o3MDsKKyAgICAgICAgICAgICAgICB2YXIgbmJfZGVyaXZfdHJlZXM7
CisgICAgICAgICAgICAgICAgdmFyIEJnTF9zY19uYnpkMmRlcml2emQydHJlZXN6YTJfNDh6YTI7
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzY19pbmRfNDMgPSBmdW5j
dGlvbihudCwgc2NfbnRzXzQ5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaSA9
ICgoc2NfbnRzXzQ5Lmxlbmd0aCktKDEpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChpPj0o
MCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChzY19pc0VxdWFs
KChzY19udHNfNDlbaV0pLCBudCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtLWkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgICAgICAgICBtYWtlX3N0YXRlcyA9IGZ1bmN0aW9uKEJnTF9zY19uYnpkMnRva3NfNTB6
ZDIsIEJnTF9zY19uYnpkMmNvbmZzXzUxemQyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgdjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpOworICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIHNjX3N0YXRlc181MjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoc2Nfc3RhdGVzXzUyID0gKHNjX21ha2VWZWN0b3IoKEJn
TF9zY19uYnpkMnRva3NfNTB6ZDIrKDEpKSwgZmFsc2UpKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGkgPSBCZ0xfc2NfbmJ6ZDJ0b2tzXzUwemQyKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3aGlsZSAoKGk+PSgwKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHYgPSAoc2NfbWFr
ZVZlY3RvcigoQmdMX3NjX25iemQyY29uZnNfNTF6ZDIrKDEpKSwgZmFsc2UpKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodlsoMCldID0gKC0xKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoc2Nfc3RhdGVzXzUyW2ldID0gdik7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLS1pKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gc2Nfc3RhdGVzXzUyOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICBCZ0xf
c2NfY29uZnpkMnNldHpkMmdldHphMl80NHphMiA9IGZ1bmN0aW9uKHN0YXRlLCBCZ0xfc2Nfc3Rh
dGV6ZDJudW1fNTN6ZDIsIHNjX2NvbmZfNTQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBjb25mX3NldDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBCZ0xfc2NfY29uZnpkMnNl
dF81NXpkMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKEJnTF9zY19jb25memQy
c2V0XzU1emQyID0gKHN0YXRlWyhzY19jb25mXzU0KygxKSldKSksICgoQmdMX3NjX2NvbmZ6ZDJz
ZXRfNTV6ZDIhPT0gZmFsc2UpP0JnTF9zY19jb25memQyc2V0XzU1emQyOigoY29uZl9zZXQgPSAo
c2NfbWFrZVZlY3RvcigoQmdMX3NjX3N0YXRlemQybnVtXzUzemQyKyg2KSksIGZhbHNlKSkpLCAo
Y29uZl9zZXRbKDEpXSA9ICgtMykpLCAoY29uZl9zZXRbKDIpXSA9ICgtMSkpLCAoY29uZl9zZXRb
KDMpXSA9ICgtMSkpLCAoY29uZl9zZXRbKDQpXSA9ICgtMSkpLCAoc3RhdGVbKHNjX2NvbmZfNTQr
KDEpKV0gPSBjb25mX3NldCksIGNvbmZfc2V0KSkpOworICAgICAgICAgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgICAgICAgICBjb25mX3NldF9tZXJnZV9uZXdfYmFuZyA9IGZ1bmN0aW9uKGNv
bmZfc2V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKChjb25mX3NldFsoKGNv
bmZfc2V0WygxKV0pKyg1KSldID0gKGNvbmZfc2V0Wyg0KV0pKSwgKGNvbmZfc2V0WygxKV0gPSAo
Y29uZl9zZXRbKDMpXSkpLCAoY29uZl9zZXRbKDMpXSA9ICgtMSkpLCAoY29uZl9zZXRbKDQpXSA9
ICgtMSkpKTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgY29u
Zl9zZXRfYWRqb2luID0gZnVuY3Rpb24oc3RhdGUsIGNvbmZfc2V0LCBzY19jb25mXzU2LCBpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFpbDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAoKHRhaWwgPSAoY29uZl9zZXRbKDMpXSkpLCAoY29uZl9zZXRbKGkrKDUpKV0g
PSAoLTEpKSwgKGNvbmZfc2V0Wyh0YWlsKyg1KSldID0gaSksIChjb25mX3NldFsoMyldID0gaSks
ICgodGFpbDwoMCkpPygoY29uZl9zZXRbKDApXSA9IChzdGF0ZVsoMCldKSksIChzdGF0ZVsoMCld
ID0gc2NfY29uZl81NikpOnVuZGVmaW5lZCkpOworICAgICAgICAgICAgICAgICAgICB9OworICAg
ICAgICAgICAgICAgICAgICBCZ0xfc2NfY29uZnpkMnNldHpkMmFkam9pbnphMl80NXphMiA9IGZ1
bmN0aW9uKHNjX3N0YXRlc181NywgQmdMX3NjX3N0YXRlemQybnVtXzU4emQyLCBsLCBpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29uZl9zZXQ7CisgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgc2NfY29uZl81OTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsMTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGUgPSAoc2Nfc3RhdGVzXzU3W0Jn
TF9zY19zdGF0ZXpkMm51bV81OHpkMl0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
bDEgPSBsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGwxIGluc3RhbmNl
b2Ygc2NfUGFpcikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNjX2NvbmZfNTkgPSAobDEuY2FyKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uZl9zZXQgPSAoQmdMX3NjX2Nv
bmZ6ZDJzZXR6ZDJnZXR6YTJfNDR6YTIoc3RhdGUsIEJnTF9zY19zdGF0ZXpkMm51bV81OHpkMiwg
c2NfY29uZl81OSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgo
KGNvbmZfc2V0WyhpKyg1KSldKT09PSBmYWxzZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoY29uZl9zZXRfYWRqb2luKHN0YXRlLCBjb25mX3NldCwgc2NfY29uZl81OSwgaSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobDEgPSAobDEuY2Ry
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChsMSA9IChsMS5jZHIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICBCZ0xfc2NfY29u
ZnpkMnNldHpkMmFkam9pbnphMnphMl80NnowMCA9IGZ1bmN0aW9uKHNjX3N0YXRlc182MCwgQmdM
X3NjX3N0YXRlc3phMl82MXphMiwgQmdMX3NjX3N0YXRlemQybnVtXzYyemQyLCBzY19jb25mXzYz
LCBpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgQmdMX3NjX2NvbmZ6ZDJzZXR6YTJf
NjR6NzA7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgQmdMX3NjX3N0YXRlemEyXzY1emEy
OworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbmZfc2V0OworICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIHN0YXRlOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgoc3Rh
dGUgPSAoc2Nfc3RhdGVzXzYwW0JnTF9zY19zdGF0ZXpkMm51bV82MnpkMl0pKSwgKCgoKGNvbmZf
c2V0ID0gKHN0YXRlWyhzY19jb25mXzYzKygxKSldKSksICgoY29uZl9zZXQhPT0gZmFsc2UpPyhj
b25mX3NldFsoaSsoNSkpXSk6ZmFsc2UpKSE9PSBmYWxzZSk/KChCZ0xfc2Nfc3RhdGV6YTJfNjV6
YTIgPSAoQmdMX3NjX3N0YXRlc3phMl82MXphMltCZ0xfc2Nfc3RhdGV6ZDJudW1fNjJ6ZDJdKSks
IChCZ0xfc2NfY29uZnpkMnNldHphMl82NHo3MCA9IChCZ0xfc2NfY29uZnpkMnNldHpkMmdldHph
Ml80NHphMihCZ0xfc2Nfc3RhdGV6YTJfNjV6YTIsIEJnTF9zY19zdGF0ZXpkMm51bV82MnpkMiwg
c2NfY29uZl82MykpKSwgKCgoQmdMX3NjX2NvbmZ6ZDJzZXR6YTJfNjR6NzBbKGkrKDUpKV0pPT09
IGZhbHNlKT8oY29uZl9zZXRfYWRqb2luKEJnTF9zY19zdGF0ZXphMl82NXphMiwgQmdMX3NjX2Nv
bmZ6ZDJzZXR6YTJfNjR6NzAsIHNjX2NvbmZfNjMsIGkpKTp1bmRlZmluZWQpLCB0cnVlKTpmYWxz
ZSkpOworICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICBjb25mX3Nl
dF91bmlvbiA9IGZ1bmN0aW9uKHN0YXRlLCBjb25mX3NldCwgc2NfY29uZl82Niwgb3RoZXJfc2V0
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaSA9IChvdGhlcl9zZXRbKDIpXSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoaT49KDApKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChjb25mX3NldFsoaSsoNSkpXSk9PT0gZmFs
c2UpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25mX3NldF9hZGpvaW4oc3RhdGUsIGNvbmZf
c2V0LCBzY19jb25mXzY2LCBpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGkgPSAob3RoZXJfc2V0WyhpKyg1KSldKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpID0gKG90aGVyX3NldFsoaSsoNSkp
XSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdW5kZWZpbmVkOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICBmb3J3ID0gZnVuY3Rpb24o
c2Nfc3RhdGVzXzY3LCBCZ0xfc2Nfc3RhdGV6ZDJudW1fNjh6ZDIsIHNjX3N0YXJ0ZXJzXzY5LCBz
Y19lbmRlcnNfNzAsIHNjX3ByZWRpY3RvcnNfNzEsIHNjX3N0ZXBzXzcyLCBzY19udHNfNzMpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXh0X3NldDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBuZXh0OworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbmZfc2V0Owor
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZGVyOworICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIGw7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRlcl9zZXQ7CisgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRlcjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBzY19sXzc0OworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjX2xvb3AxXzc1Owor
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlYWQ7CisgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgQmdMX3NjX2NvbmZ6ZDJzZXRfNzZ6ZDI7CisgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgQmdMX3NjX3N0YXRlemQybnVtXzc3emQyOworICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHN0YXRlOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjX3N0YXRlc183ODsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBwcmVkczsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBCZ0xfc2NfY29uZnpkMnNldF83OXpkMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBz
dGVwOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjX2NvbmZfODA7CisgICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgQmdMX3NjX25iemQybnRzXzgxemQyOworICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIHNjX3N0YXRlXzgyOworICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChzY19zdGF0ZV84MiA9IChzY19zdGF0ZXNfNjdbQmdM
X3NjX3N0YXRlemQybnVtXzY4emQyXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIChC
Z0xfc2NfbmJ6ZDJudHNfODF6ZDIgPSAoc2NfbnRzXzczLmxlbmd0aCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzY19jb25mXzgw
ID0gKHNjX3N0YXRlXzgyWygwKV0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICgoc2NfY29uZl84MD49KDApKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChzdGVwID0gKHNjX3N0ZXBzXzcyW3NjX2NvbmZfODBdKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChCZ0xfc2NfY29uZnpkMnNldF83OXpkMiA9IChzY19z
dGF0ZV84Mlsoc2NfY29uZl84MCsoMSkpXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoaGVhZCA9IChCZ0xfc2NfY29uZnpkMnNldF83OXpkMlsoNCldKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzY19zdGF0ZV84
MlsoMCldID0gKEJnTF9zY19jb25memQyc2V0Xzc5emQyWygwKV0pKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbmZfc2V0X21lcmdlX25ld19iYW5nKEJn
TF9zY19jb25memQyc2V0Xzc5emQyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICgoc3RlcD49KDApKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoc2NfbF83NCA9IChzY19zdGFydGVyc182OVtzdGVwXSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxl
ICgoc2NfbF83NCBpbnN0YW5jZW9mIHNjX1BhaXIpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGFydGVyID0gKHNjX2xf
NzQuY2FyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoc3RhcnRlcl9zZXQgPSAoQmdMX3NjX2NvbmZ6ZDJzZXR6ZDJnZXR6YTJf
NDR6YTIoc2Nfc3RhdGVfODIsIEJnTF9zY19zdGF0ZXpkMm51bV82OHpkMiwgc3RhcnRlcikpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICgoKHN0YXJ0ZXJfc2V0WyhCZ0xfc2Nfc3RhdGV6ZDJudW1fNjh6ZDIrKDUpKV0pPT09
IGZhbHNlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25mX3NldF9hZGpvaW4oc2Nfc3RhdGVf
ODIsIHN0YXJ0ZXJfc2V0LCBzdGFydGVyLCBCZ0xfc2Nfc3RhdGV6ZDJudW1fNjh6ZDIpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHNjX2xfNzQgPSAoc2NfbF83NC5jZHIpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHNjX2xfNzQgPSAoc2NfbF83NC5jZHIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobCA9IChzY19lbmRlcnNfNzBbc3RlcF0pKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGls
ZSAoKGwgaW5zdGFuY2VvZiBzY19QYWlyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZW5kZXIgPSAobC5jYXIpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICgoKChjb25mX3NldCA9IChzY19zdGF0ZV84MlsoZW5kZXIrKDEpKV0pKSwgKChjb25mX3Nl
dCE9PSBmYWxzZSk/KGNvbmZfc2V0WyhCZ0xfc2Nfc3RhdGV6ZDJudW1fNjh6ZDIrKDUpKV0pOmZh
bHNlKSkhPT0gZmFsc2UpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5leHQgPSAoc2NfY29uZl84
MCsoMSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKG5leHRfc2V0ID0gKEJnTF9zY19jb25memQyc2V0emQyZ2V0
emEyXzQ0emEyKHNjX3N0YXRlXzgyLCBCZ0xfc2Nfc3RhdGV6ZDJudW1fNjh6ZDIsIG5leHQpKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChjb25mX3NldF91bmlvbihzY19zdGF0ZV84MiwgbmV4dF9zZXQsIG5leHQs
IEJnTF9zY19jb25memQyc2V0Xzc5emQyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsID0gKGwuY2RyKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChsID0gKGwuY2RyKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAocHJlZHMgPSAoc2NfcHJlZGljdG9yc183MVsoc3RlcCtCZ0xfc2Nf
bmJ6ZDJudHNfODF6ZDIpXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChzY19zdGF0ZXNfNzggPSBzY19zdGF0ZXNfNjcpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0ZSA9IHNjX3N0
YXRlXzgyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoQmdMX3NjX3N0YXRlemQybnVtXzc3emQyID0gQmdMX3NjX3N0YXRlemQybnVtXzY4emQy
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
QmdMX3NjX2NvbmZ6ZDJzZXRfNzZ6ZDIgPSBCZ0xfc2NfY29uZnpkMnNldF83OXpkMik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NfbG9vcDFf
NzUgPSBmdW5jdGlvbihsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBzY19zdGF0ZV84MzsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEJnTF9zY19uZXh0emQyc2V0
Xzg0emQyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgc2NfbmV4dF84NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZWRfc2V0OworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZWQ7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICgobCBpbnN0YW5jZW9mIHNjX1BhaXIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcmVkID0gKGwuY2FyKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGkgPSBoZWFkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGk+PSgwKSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHByZWRfc2V0ID0gKChzY19zdGF0ZV84MyA9IChzY19zdGF0
ZXNfNzhbaV0pKSwgKHNjX3N0YXRlXzgzWyhwcmVkKygxKSldKSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKChwcmVkX3NldCE9PSBmYWxzZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoc2NfbmV4dF84NSA9IChwcmVkKygxKSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoQmdMX3NjX25leHR6ZDJzZXRfODR6ZDIgPSAoQmdMX3NjX2NvbmZ6ZDJzZXR6ZDJn
ZXR6YTJfNDR6YTIoc3RhdGUsIEJnTF9zY19zdGF0ZXpkMm51bV83N3pkMiwgc2NfbmV4dF84NSkp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbmZfc2V0X3VuaW9uKHN0YXRlLCBCZ0xfc2Nf
bmV4dHpkMnNldF84NHpkMiwgc2NfbmV4dF84NSwgcHJlZF9zZXQpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoaSA9IChCZ0xfc2NfY29uZnpkMnNldF83NnpkMlsoaSso
NSkpXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoc2NfbG9vcDFf
NzUoKGwuY2RyKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNjX2xvb3AxXzc1KHBy
ZWRzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIGlz
X3BhcnNlZCA9IGZ1bmN0aW9uKG50LCBpLCBqLCBzY19udHNfODYsIHNjX2VuZGVyc184Nywgc2Nf
c3RhdGVzXzg4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29uZl9zZXQ7CisgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGU7CisgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgc2NfY29uZl84OTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsOworICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIEJnTF9zY19udHphMl85MHphMjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQmdMX3NjX250emEyXzkwemEy
ID0gKHNjX2luZF80MyhudCwgc2NfbnRzXzg2KSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICgoQmdMX3NjX250emEyXzkwemEyIT09IGZhbHNlKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNj
X250c184Ni5sZW5ndGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGwg
PSAoc2NfZW5kZXJzXzg3W0JnTF9zY19udHphMl85MHphMl0pKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKChsIGluc3RhbmNlb2Ygc2NfUGFpcikpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzY19jb25mXzg5ID0gKGwuY2FyKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCgoc3RhdGUg
PSAoc2Nfc3RhdGVzXzg4W2pdKSksIChjb25mX3NldCA9IChzdGF0ZVsoc2NfY29uZl84OSsoMSkp
XSkpLCAoKGNvbmZfc2V0IT09IGZhbHNlKT8oY29uZl9zZXRbKGkrKDUpKV0pOmZhbHNlKSkhPT0g
ZmFsc2UpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChsID0gKGwuY2RyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAg
ICAgICBkZXJpdl90cmVlcyA9IGZ1bmN0aW9uKHNjX2NvbmZfOTEsIGksIGosIHNjX2VuZGVyc185
Miwgc2Nfc3RlcHNfOTMsIHNjX25hbWVzXzk0LCBzY190b2tzXzk1LCBzY19zdGF0ZXNfOTYsIEJn
TF9zY19uYnpkMm50c185N3pkMikgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjX2xv
b3AxXzk4OworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZXY7CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgbmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKG5h
bWUgPSAoc2NfbmFtZXNfOTRbc2NfY29uZl85MV0pKSwgKChuYW1lIT09IGZhbHNlKT8oKHNjX2Nv
bmZfOTE8QmdMX3NjX25iemQybnRzXzk3emQyKT8oc2NfbGlzdCgoc2NfbGlzdChuYW1lLCAoKHNj
X3Rva3NfOTVbaV0pLmNhcikpKSkpOihzY19saXN0KChzY19saXN0KG5hbWUpKSkpKTooKHByZXYg
PSAoc2NfY29uZl85MS0oMSkpKSwgKHNjX2xvb3AxXzk4ID0gZnVuY3Rpb24obDEsIGwyKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvb3AyOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBlbmRlcl9zZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHN0YXRlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmRlcjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgbDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIGwyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobDEgaW5zdGFuY2VvZiBzY19QYWlyKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoZW5kZXIgPSAobDEuY2FyKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVuZGVyX3NldCA9ICgoc3RhdGUgPSAoc2Nfc3Rh
dGVzXzk2W2pdKSksIChzdGF0ZVsoZW5kZXIrKDEpKV0pKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKChlbmRlcl9zZXQhPT0gZmFsc2UpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wMiA9IGZ1bmN0aW9uKGssIGwyKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxv
b3AzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBlbmRlcl90cmVlczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgcHJldl90cmVlczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29uZl9zZXQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjX3N0YXRlXzk5OworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBs
MjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoKGs+PSgwKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChrPj1pKSYmKCgoc2Nfc3RhdGVf
OTkgPSAoc2Nfc3RhdGVzXzk2W2tdKSksIChjb25mX3NldCA9IChzY19zdGF0ZV85OVsocHJldiso
MSkpXSkpLCAoKGNvbmZfc2V0IT09IGZhbHNlKT8oY29uZl9zZXRbKGkrKDUpKV0pOmZhbHNlKSkh
PT0gZmFsc2UpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcmV2X3RyZWVzID0gKGRlcml2X3Ry
ZWVzKHByZXYsIGksIGssIHNjX2VuZGVyc185Miwgc2Nfc3RlcHNfOTMsIHNjX25hbWVzXzk0LCBz
Y190b2tzXzk1LCBzY19zdGF0ZXNfOTYsIEJnTF9zY19uYnpkMm50c185N3pkMikpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGVuZGVyX3RyZWVzID0gKGRlcml2X3RyZWVzKGVuZGVyLCBrLCBqLCBzY19lbmRlcnNf
OTIsIHNjX3N0ZXBzXzkzLCBzY19uYW1lc185NCwgc2NfdG9rc185NSwgc2Nfc3RhdGVzXzk2LCBC
Z0xfc2NfbmJ6ZDJudHNfOTd6ZDIpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3AzID0gZnVuY3Rpb24obDMs
IGwyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgbDQ7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NfbDJf
MTAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZGVyX3RyZWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
KGwzIGluc3RhbmNlb2Ygc2NfUGFpcikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoZW5kZXJfdHJlZSA9IChzY19saXN0KChsMy5jYXIpKSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAobDQgPSBwcmV2X3RyZWVzKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKHNjX2wyXzEwMCA9IGwyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChsNCBp
bnN0YW5jZW9mIHNjX1BhaXIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNjX2wyXzEwMCA9IChuZXcgc2NfUGFpcigoc2Nf
YXBwZW5kKChsNC5jYXIpLCBlbmRlcl90cmVlKSksIHNjX2wyXzEwMCkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAobDQgPSAobDQuY2RyKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIChsb29wMygobDMuY2RyKSwgc2NfbDJfMTAwKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobG9v
cDIoKGVuZGVyX3NldFsoaysoNSkpXSksIGwyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAobG9vcDMoZW5kZXJfdHJlZXMsIGwyKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChrID0gKGVuZGVyX3NldFsoaysoNSkpXSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHNjX2xvb3Ax
Xzk4KChsMS5jZHIpLCBsMikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gKGxvb3AyKChlbmRlcl9zZXRbKDIpXSksIGwyKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChsMSA9IChsMS5jZHIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGwyOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0pLCAoc2NfbG9vcDFfOTgoKHNj
X2VuZGVyc185Mlsoc2Nfc3RlcHNfOTNbcHJldl0pXSksIG51bGwpKSkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgQmdMX3NjX2Rlcml2emQydHJlZXN6YTJf
NDd6NzAgPSBmdW5jdGlvbihudCwgaSwgaiwgc2NfbnRzXzEwMSwgc2NfZW5kZXJzXzEwMiwgc2Nf
c3RlcHNfMTAzLCBzY19uYW1lc18xMDQsIHNjX3Rva3NfMTA1LCBzY19zdGF0ZXNfMTA2KSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29uZl9zZXQ7CisgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgc3RhdGU7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NfY29uZl8xMDc7
CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZhciB0cmVlczsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBCZ0xfc2NfbmJ6ZDJudHNf
MTA4emQyOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEJnTF9zY19udHphMl8xMDl6YTI7
CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KEJnTF9zY19udHphMl8xMDl6YTIgPSAoc2NfaW5kXzQzKG50LCBzY19udHNfMTAxKSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoQmdMX3NjX250emEyXzEwOXphMiE9PSBmYWxz
ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChCZ0xfc2NfbmJ6ZDJudHNfMTA4emQyID0gKHNjX250c18xMDEu
bGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobCA9IChzY19l
bmRlcnNfMTAyW0JnTF9zY19udHphMl8xMDl6YTJdKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAodHJlZXMgPSBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdoaWxlICgobCBpbnN0YW5jZW9mIHNjX1BhaXIpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoc2NfY29uZl8xMDcgPSAobC5jYXIpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoKHN0YXRlID0gKHNjX3N0YXRlc18x
MDZbal0pKSwgKGNvbmZfc2V0ID0gKHN0YXRlWyhzY19jb25mXzEwNysoMSkpXSkpLCAoKGNvbmZf
c2V0IT09IGZhbHNlKT8oY29uZl9zZXRbKGkrKDUpKV0pOmZhbHNlKSkhPT0gZmFsc2UpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsID0gKGwuY2RyKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRy
ZWVzID0gKHNjX2FwcGVuZCgoZGVyaXZfdHJlZXMoc2NfY29uZl8xMDcsIGksIGosIHNjX2VuZGVy
c18xMDIsIHNjX3N0ZXBzXzEwMywgc2NfbmFtZXNfMTA0LCBzY190b2tzXzEwNSwgc2Nfc3RhdGVz
XzEwNiwgQmdMX3NjX25iemQybnRzXzEwOHpkMikpLCB0cmVlcykpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKGwgPSAobC5jZHIpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJlZXM7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgICAgICAgICAgbmJfZGVyaXZfdHJlZXMgPSBmdW5jdGlvbihzY19jb25mXzExMCwgaSwg
aiwgc2NfZW5kZXJzXzExMSwgc2Nfc3RlcHNfMTEyLCBzY190b2tzXzExMywgc2Nfc3RhdGVzXzEx
NCwgQmdMX3NjX25iemQybnRzXzExNXpkMikgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IHNjX2xvb3AxXzExNjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0bXAxMTI0OworICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIHByZXY7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gKChwcmV2ID0gKHNjX2NvbmZfMTEwLSgxKSkpLCAoKCgodG1wMTEyNCA9IChzY19jb25m
XzExMDxCZ0xfc2NfbmJ6ZDJudHNfMTE1emQyKSksICgodG1wMTEyNCE9PSBmYWxzZSk/dG1wMTEy
NDooKHNjX3N0ZXBzXzExMltwcmV2XSk8KDApKSkpIT09IGZhbHNlKT8oMSk6KChzY19sb29wMV8x
MTYgPSBmdW5jdGlvbihsLCBzY19uXzExOCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBuYl9lbmRlcl90cmVlczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmJf
cHJldl90cmVlczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29uZl9zZXQ7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmRlcl9zZXQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIHNjX3N0YXRlXzExNzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgZW5kZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGw7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIHNjX25fMTE4OworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICgobCBpbnN0YW5jZW9mIHNjX1BhaXIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbmRlciA9
IChsLmNhcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbmRl
cl9zZXQgPSAoKHNjX3N0YXRlXzExNyA9IChzY19zdGF0ZXNfMTE0W2pdKSksIChzY19zdGF0ZV8x
MTdbKGVuZGVyKygxKSldKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICgoZW5kZXJfc2V0IT09IGZhbHNlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGsgPSAoZW5kZXJfc2V0WygyKV0pKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuID0gc2Nfbl8xMTgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChrPj0oMCkpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgo
az49aSkmJigoKHN0YXRlID0gKHNjX3N0YXRlc18xMTRba10pKSwgKGNvbmZfc2V0ID0gKHN0YXRl
WyhwcmV2KygxKSldKSksICgoY29uZl9zZXQhPT0gZmFsc2UpPyhjb25mX3NldFsoaSsoNSkpXSk6
ZmFsc2UpKSE9PSBmYWxzZSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAobmJfcHJldl90cmVlcyA9IChuYl9kZXJpdl90cmVl
cyhwcmV2LCBpLCBrLCBzY19lbmRlcnNfMTExLCBzY19zdGVwc18xMTIsIHNjX3Rva3NfMTEzLCBz
Y19zdGF0ZXNfMTE0LCBCZ0xfc2NfbmJ6ZDJudHNfMTE1emQyKSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5iX2VuZGVyX3Ry
ZWVzID0gKG5iX2Rlcml2X3RyZWVzKGVuZGVyLCBrLCBqLCBzY19lbmRlcnNfMTExLCBzY19zdGVw
c18xMTIsIHNjX3Rva3NfMTEzLCBzY19zdGF0ZXNfMTE0LCBCZ0xfc2NfbmJ6ZDJudHNfMTE1emQy
KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGsgPSAoZW5kZXJfc2V0WyhrKyg1KSldKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobiArPShuYl9wcmV2X3Ry
ZWVzKm5iX2VuZGVyX3RyZWVzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChrID0gKGVuZGVyX3NldFsoaysoNSkpXSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChzY19sb29wMV8x
MTYoKGwuY2RyKSwgbikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobCA9IChsLmNkcikpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gc2Nfbl8xMTg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfSksIChzY19sb29wMV8xMTYoKHNjX2VuZGVyc18xMTFbKHNjX3N0ZXBz
XzExMltwcmV2XSldKSwgKDApKSkpKSk7CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAg
ICAgICAgICAgICAgIEJnTF9zY19uYnpkMmRlcml2emQydHJlZXN6YTJfNDh6YTIgPSBmdW5jdGlv
bihudCwgaSwgaiwgc2NfbnRzXzExOSwgc2NfZW5kZXJzXzEyMCwgc2Nfc3RlcHNfMTIxLCBzY190
b2tzXzEyMiwgc2Nfc3RhdGVzXzEyMykgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNv
bmZfc2V0OworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlOworICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIHNjX2NvbmZfMTI0OworICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IGw7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmJfdHJlZXM7CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgQmdMX3NjX25iemQybnRzXzEyNXpkMjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBCZ0xfc2NfbnR6YTJfMTI2emEyOworICAgICAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCZ0xfc2NfbnR6YTJfMTI2emEyID0gKHNj
X2luZF80MyhudCwgc2NfbnRzXzExOSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoKEJnTF9zY19udHphMl8xMjZ6YTIhPT0gZmFsc2UpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQmdMX3Nj
X25iemQybnRzXzEyNXpkMiA9IChzY19udHNfMTE5Lmxlbmd0aCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKGwgPSAoc2NfZW5kZXJzXzEyMFtCZ0xfc2NfbnR6YTJfMTI2
emEyXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5iX3RyZWVzID0g
KDApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgobCBpbnN0
YW5jZW9mIHNjX1BhaXIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2NfY29u
Zl8xMjQgPSAobC5jYXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCgoKHN0YXRlID0gKHNjX3N0YXRlc18xMjNbal0pKSwgKGNvbmZfc2V0ID0gKHN0
YXRlWyhzY19jb25mXzEyNCsoMSkpXSkpLCAoKGNvbmZfc2V0IT09IGZhbHNlKT8oY29uZl9zZXRb
KGkrKDUpKV0pOmZhbHNlKSkhPT0gZmFsc2UpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChsID0gKGwuY2RyKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5iX3RyZWVzID0gKChuYl9kZXJpdl90cmVl
cyhzY19jb25mXzEyNCwgaSwgaiwgc2NfZW5kZXJzXzEyMCwgc2Nfc3RlcHNfMTIxLCBzY190b2tz
XzEyMiwgc2Nfc3RhdGVzXzEyMywgQmdMX3NjX25iemQybnRzXzEyNXpkMikpK25iX3RyZWVzKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsID0gKGwuY2RyKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG5iX3RyZWVzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIChsZXhlciA9IChwYXJzZXJfZGVzY3Jb
KDApXSkpOworICAgICAgICAgICAgICAgICAgICAoc2NfbnRzXzQyID0gKHBhcnNlcl9kZXNjclso
MSldKSk7CisgICAgICAgICAgICAgICAgICAgIChzY19zdGFydGVyc180MSA9IChwYXJzZXJfZGVz
Y3JbKDIpXSkpOworICAgICAgICAgICAgICAgICAgICAoc2NfZW5kZXJzXzQwID0gKHBhcnNlcl9k
ZXNjclsoMyldKSk7CisgICAgICAgICAgICAgICAgICAgIChzY19wcmVkaWN0b3JzXzM5ID0gKHBh
cnNlcl9kZXNjclsoNCldKSk7CisgICAgICAgICAgICAgICAgICAgIChzY19zdGVwc18zOCA9IChw
YXJzZXJfZGVzY3JbKDUpXSkpOworICAgICAgICAgICAgICAgICAgICAoc2NfbmFtZXNfMzcgPSAo
cGFyc2VyX2Rlc2NyWyg2KV0pKTsKKyAgICAgICAgICAgICAgICAgICAgKGZhbHNlSGVhZDExMjgg
PSAobmV3IHNjX1BhaXIobnVsbCwgbnVsbCkpKTsKKyAgICAgICAgICAgICAgICAgICAgKEwxMTI1
ID0gKGxleGVyKGlucHV0KSkpOworICAgICAgICAgICAgICAgICAgICAodGFpbDExMjkgPSBmYWxz
ZUhlYWQxMTI4KTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCEoTDExMjUgPT09IG51bGwp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKHRvayA9IChMMTEyNS5jYXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobDEg
PSAodG9rLmNkcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsMiA9IG51bGwpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgobDEgaW5zdGFuY2VvZiBzY19QYWly
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoc2NfaV8yOSA9IChzY19pbmRfNDMoKGwxLmNhciksIHNjX250
c180MikpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoc2NfaV8y
OSE9PSBmYWxzZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobDEgPSAobDEuY2Ry
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsMiA9IChu
ZXcgc2NfUGFpcihzY19pXzI5LCBsMikpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGwxID0gKGwxLmNkcikpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzY19vcHRyT3BuZF8yMiA9IChu
ZXcgc2NfUGFpcigodG9rLmNhciksIChzY19yZXZlcnNlKGwyKSkpKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHNjX29wdHJPcG5kXzIxID0gKG5ldyBzY19QYWlyKHNjX29wdHJPcG5k
XzIyLCBudWxsKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0YWlsMTEyOS5jZHIg
PSBzY19vcHRyT3BuZF8yMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRhaWwxMTI5
ID0gKHRhaWwxMTI5LmNkcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIChMMTEyNSA9
IChMMTEyNS5jZHIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAoc2Nfb3B0ck9wbmRfMjAgPSAoZmFsc2VIZWFk
MTEyOC5jZHIpKTsKKyAgICAgICAgICAgICAgICAgICAgKHNjX3Rva3NfMzYgPSAoc2NfbGlzdDJ2
ZWN0b3Ioc2Nfb3B0ck9wbmRfMjApKSk7CisgICAgICAgICAgICAgICAgICAgIChCZ0xfc2NfbmJ6
ZDJ0b2tzXzM1emQyID0gKHNjX3Rva3NfMzYubGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgICAg
IChCZ0xfc2NfbmJ6ZDJjb25mc18zNHpkMiA9IChzY19zdGVwc18zOC5sZW5ndGgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgKHNjX3N0YXRlc18zMyA9IChtYWtlX3N0YXRlcyhCZ0xfc2NfbmJ6ZDJ0
b2tzXzM1emQyLCBCZ0xfc2NfbmJ6ZDJjb25mc18zNHpkMikpKTsKKyAgICAgICAgICAgICAgICAg
ICAgKGdvYWxfc3RhcnRlcnMgPSAoc2Nfc3RhcnRlcnNfNDFbKDApXSkpOworICAgICAgICAgICAg
ICAgICAgICAoQmdMX3NjX2NvbmZ6ZDJzZXR6ZDJhZGpvaW56YTJfNDV6YTIoc2Nfc3RhdGVzXzMz
LCAoMCksIGdvYWxfc3RhcnRlcnMsICgwKSkpOworICAgICAgICAgICAgICAgICAgICAoZm9ydyhz
Y19zdGF0ZXNfMzMsICgwKSwgc2Nfc3RhcnRlcnNfNDEsIHNjX2VuZGVyc180MCwgc2NfcHJlZGlj
dG9yc18zOSwgc2Nfc3RlcHNfMzgsIHNjX250c180MikpOworICAgICAgICAgICAgICAgICAgICAo
c2NfaV8yOCA9ICgwKSk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoc2NfaV8yODxCZ0xf
c2NfbmJ6ZDJ0b2tzXzM1emQyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICh0b2tfbnRzID0gKChzY190b2tzXzM2W3NjX2lfMjhdKS5j
ZHIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQmdMX3NjX2NvbmZ6ZDJzZXR6ZDJh
ZGpvaW56YTJfNDV6YTIoc2Nfc3RhdGVzXzMzLCAoc2NfaV8yOCsoMSkpLCB0b2tfbnRzLCBzY19p
XzI4KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvcncoc2Nfc3RhdGVzXzMzLCAo
c2NfaV8yOCsoMSkpLCBzY19zdGFydGVyc180MSwgc2NfZW5kZXJzXzQwLCBzY19wcmVkaWN0b3Jz
XzM5LCBzY19zdGVwc18zOCwgc2NfbnRzXzQyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKCsrc2NfaV8yOCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKG5iX3Rva3MgPSAoc2NfdG9rc18zNi5sZW5n
dGgpKTsKKyAgICAgICAgICAgICAgICAgICAgKEJnTF9zY19uYnpkMmNvbmZzXzMyemQyID0gKHNj
X3N0ZXBzXzM4Lmxlbmd0aCkpOworICAgICAgICAgICAgICAgICAgICAoQmdMX3NjX25iemQybnRz
XzMxemQyID0gKHNjX250c180Mi5sZW5ndGgpKTsKKyAgICAgICAgICAgICAgICAgICAgKEJnTF9z
Y19zdGF0ZXN6YTJfMzB6YTIgPSAobWFrZV9zdGF0ZXMobmJfdG9rcywgQmdMX3NjX25iemQyY29u
ZnNfMzJ6ZDIpKSk7CisgICAgICAgICAgICAgICAgICAgIChnb2FsX2VuZGVycyA9IChzY19lbmRl
cnNfNDBbKDApXSkpOworICAgICAgICAgICAgICAgICAgICAobCA9IGdvYWxfZW5kZXJzKTsKKyAg
ICAgICAgICAgICAgICAgICAgd2hpbGUgKChsIGluc3RhbmNlb2Ygc2NfUGFpcikpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uZiA9
IChsLmNhcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCZ0xfc2NfY29uZnpkMnNl
dHpkMmFkam9pbnphMnphMl80NnowMChzY19zdGF0ZXNfMzMsIEJnTF9zY19zdGF0ZXN6YTJfMzB6
YTIsIG5iX3Rva3MsIGNvbmYsICgwKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIChs
ID0gKGwuY2RyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKGkgPSBuYl90b2tzKTsKKyAgICAgICAgICAgICAg
ICAgICAgd2hpbGUgKChpPj0oMCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRlcyA9IHNjX3N0YXRlc18zMyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKEJnTF9zY19zdGF0ZXN6YTJfMjd6YTIgPSBCZ0xfc2Nfc3Rh
dGVzemEyXzMwemEyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGVfbnVtID0g
aSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNjX2VuZGVyc18yNiA9IHNjX2VuZGVy
c180MCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNjX3N0ZXBzXzI1ID0gc2Nfc3Rl
cHNfMzgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCZ0xfc2NfbmJ6ZDJudHNfMjR6
ZDIgPSBCZ0xfc2NfbmJ6ZDJudHNfMzF6ZDIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICh0b2tzID0gc2NfdG9rc18zNik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJnTF9z
Y19zdGF0ZXphMl8yM3phMiA9IChCZ0xfc2Nfc3RhdGVzemEyXzMwemEyW2ldKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbG9vcDEgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIHNjX2xvb3AxXzEyNzsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIHByZXY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBCZ0xfc2Nfc3RhdGVzemEyXzEyOHphMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIHNjX3N0YXRlc18xMjk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBqOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIHNjX2lfMTMwOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgaGVhZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IGNvbmZfc2V0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NfY29uZl8x
MzE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChzY19jb25mXzEzMSA9IChCZ0xfc2Nfc3RhdGV6YTJfMjN6YTJb
KDApXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChzY19jb25m
XzEzMT49KDApKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25mX3NldCA9IChC
Z0xfc2Nfc3RhdGV6YTJfMjN6YTJbKHNjX2NvbmZfMTMxKygxKSldKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoZWFkID0gKGNvbmZfc2V0Wyg0KV0pKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJnTF9zY19zdGF0
ZXphMl8yM3phMlsoMCldID0gKGNvbmZfc2V0WygwKV0pKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGNvbmZfc2V0X21lcmdlX25ld19iYW5nKGNvbmZfc2V0
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzY19pXzEz
MCA9IGhlYWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
aGlsZSAoKHNjX2lfMTMwPj0oMCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGkgPSBzY19pXzEzMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGogPSBzdGF0ZV9udW0pOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzY19zdGF0ZXNfMTI5ID0g
c3RhdGVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoQmdMX3NjX3N0YXRlc3phMl8xMjh6YTIgPSBCZ0xfc2Nfc3RhdGVzemEyXzI3emEyKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJl
diA9IChzY19jb25mXzEzMS0oMSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoKChzY19jb25mXzEzMT49QmdMX3NjX25iemQybnRzXzI0
emQyKSYmKChzY19zdGVwc18yNVtwcmV2XSk+PSgwKSkpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY19sb29wMV8xMjcgPSBm
dW5jdGlvbihsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZGVyX3NldDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgc3RhdGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZGVyOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdo
aWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobCBpbnN0YW5jZW9mIHNjX1BhaXIpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbmRlciA9IChsLmNhcikpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChlbmRlcl9zZXQgPSAoKHN0YXRlID0gKHNjX3N0YXRlc18xMjlbal0p
KSwgKHN0YXRlWyhlbmRlcisoMSkpXSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGVuZGVy
X3NldCE9PSBmYWxzZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChrID0gKGVuZGVyX3NldFsoMildKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3aGlsZSAoKGs+PSgwKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaz49aSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChCZ0xfc2NfY29uZnpkMnNl
dHpkMmFkam9pbnphMnphMl80NnowMChzY19zdGF0ZXNfMTI5LCBCZ0xfc2Nfc3RhdGVzemEyXzEy
OHphMiwgaywgcHJldiwgaSkpIT09IGZhbHNlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoQmdMX3NjX2NvbmZ6ZDJzZXR6ZDJhZGpvaW56YTJ6YTJfNDZ6MDAo
c2Nfc3RhdGVzXzEyOSwgQmdMX3NjX3N0YXRlc3phMl8xMjh6YTIsIGosIGVuZGVyLCBrKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrID0gKGVuZGVyX3NldFsoaysoNSkp
XSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoc2NfbG9vcDFf
MTI3KChsLmNkcikpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGwgPSAobC5jZHIpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5l
ZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHNjX2xvb3AxXzEyNygoc2NfZW5kZXJzXzI2WyhzY19z
dGVwc18yNVtwcmV2XSldKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHNjX2lfMTMwID0gKGNvbmZfc2V0WyhzY19pXzEzMCsoNSkpXSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobG9vcDEoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChsb29wMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLS1pKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAob3B0ck9wbmQgPSBCZ0xfc2Nfc3RhdGVzemEyXzMwemEyKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFtzY19udHNfNDIsIHNjX3N0YXJ0ZXJzXzQxLCBzY19lbmRlcnNfNDAs
IHNjX3ByZWRpY3RvcnNfMzksIHNjX3N0ZXBzXzM4LCBzY19uYW1lc18zNywgc2NfdG9rc18zNiwg
b3B0ck9wbmQsIGlzX3BhcnNlZCwgQmdMX3NjX2Rlcml2emQydHJlZXN6YTJfNDd6NzAsIEJnTF9z
Y19uYnpkMmRlcml2emQydHJlZXN6YTJfNDh6YTJdOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH07CisgICAgICAgIH0KKyAgICB9OworICAgIEJnTF9wYXJzZXpkMnplM3BhcnNlZHpm
M3pjMiA9IGZ1bmN0aW9uKHBhcnNlLCBudCwgaSwgaikgeworICAgICAgICB2YXIgaXNfcGFyc2Vk
OworICAgICAgICB2YXIgc3RhdGVzOworICAgICAgICB2YXIgZW5kZXJzOworICAgICAgICB2YXIg
bnRzOworICAgICAgICByZXR1cm4gKChudHMgPSAocGFyc2VbKDApXSkpLCAoZW5kZXJzID0gKHBh
cnNlWygyKV0pKSwgKHN0YXRlcyA9IChwYXJzZVsoNyldKSksIChpc19wYXJzZWQgPSAocGFyc2Vb
KDgpXSkpLCAoaXNfcGFyc2VkKG50LCBpLCBqLCBudHMsIGVuZGVycywgc3RhdGVzKSkpOworICAg
IH07CisgICAgQmdMX3BhcnNlemQyemUzdHJlZXN6MzEgPSBmdW5jdGlvbihwYXJzZSwgbnQsIGks
IGopIHsKKyAgICAgICAgdmFyIEJnTF9zY19kZXJpdnpkMnRyZWVzemEyXzEzMno3MDsKKyAgICAg
ICAgdmFyIHN0YXRlczsKKyAgICAgICAgdmFyIHRva3M7CisgICAgICAgIHZhciBuYW1lczsKKyAg
ICAgICAgdmFyIHN0ZXBzOworICAgICAgICB2YXIgZW5kZXJzOworICAgICAgICB2YXIgbnRzOwor
ICAgICAgICByZXR1cm4gKChudHMgPSAocGFyc2VbKDApXSkpLCAoZW5kZXJzID0gKHBhcnNlWygy
KV0pKSwgKHN0ZXBzID0gKHBhcnNlWyg0KV0pKSwgKG5hbWVzID0gKHBhcnNlWyg1KV0pKSwgKHRv
a3MgPSAocGFyc2VbKDYpXSkpLCAoc3RhdGVzID0gKHBhcnNlWyg3KV0pKSwgKEJnTF9zY19kZXJp
dnpkMnRyZWVzemEyXzEzMno3MCA9IChwYXJzZVsoOSldKSksIChCZ0xfc2NfZGVyaXZ6ZDJ0cmVl
c3phMl8xMzJ6NzAobnQsIGksIGosIG50cywgZW5kZXJzLCBzdGVwcywgbmFtZXMsIHRva3MsIHN0
YXRlcykpKTsKKyAgICB9OworICAgIEJnTF9wYXJzZXpkMnplM25iemQydHJlZXN6ZTMgPSBmdW5j
dGlvbihwYXJzZSwgbnQsIGksIGopIHsKKyAgICAgICAgdmFyIEJnTF9zY19uYnpkMmRlcml2emQy
dHJlZXN6YTJfMTMzemEyOworICAgICAgICB2YXIgc3RhdGVzOworICAgICAgICB2YXIgdG9rczsK
KyAgICAgICAgdmFyIHN0ZXBzOworICAgICAgICB2YXIgZW5kZXJzOworICAgICAgICB2YXIgbnRz
OworICAgICAgICByZXR1cm4gKChudHMgPSAocGFyc2VbKDApXSkpLCAoZW5kZXJzID0gKHBhcnNl
WygyKV0pKSwgKHN0ZXBzID0gKHBhcnNlWyg0KV0pKSwgKHRva3MgPSAocGFyc2VbKDYpXSkpLCAo
c3RhdGVzID0gKHBhcnNlWyg3KV0pKSwgKEJnTF9zY19uYnpkMmRlcml2emQydHJlZXN6YTJfMTMz
emEyID0gKHBhcnNlWygxMCldKSksIChCZ0xfc2NfbmJ6ZDJkZXJpdnpkMnRyZWVzemEyXzEzM3ph
MihudCwgaSwgaiwgbnRzLCBlbmRlcnMsIHN0ZXBzLCB0b2tzLCBzdGF0ZXMpKSk7CisgICAgfTsK
KyAgICB0ZXN0ID0gZnVuY3Rpb24oaykgeworICAgICAgICB2YXIgeDsKKyAgICAgICAgdmFyIHA7
CisgICAgICAgIHJldHVybiAoKHAgPSAoQmdMX21ha2V6ZDJwYXJzZXJ6ZDIoY29uc3RfZWFybGV5
LCBmdW5jdGlvbihsKSB7CisgICAgICAgICAgICB2YXIgc2NfeF8xMzQ7CisgICAgICAgICAgICB2
YXIgdGFpbDExMzQ7CisgICAgICAgICAgICB2YXIgTDExMzA7CisgICAgICAgICAgICB2YXIgZmFs
c2VIZWFkMTEzMzsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAoZmFsc2VIZWFkMTEz
MyA9IChuZXcgc2NfUGFpcihudWxsLCBudWxsKSkpOworICAgICAgICAgICAgICAgICh0YWlsMTEz
NCA9IGZhbHNlSGVhZDExMzMpOworICAgICAgICAgICAgICAgIChMMTEzMCA9IGwpOworICAgICAg
ICAgICAgICAgIHdoaWxlICghKEwxMTMwID09PSBudWxsKSkgeworICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAodGFpbDExMzQuY2RyID0gKG5ldyBzY19QYWly
KCgoc2NfeF8xMzQgPSAoTDExMzAuY2FyKSksIChzY19saXN0KHNjX3hfMTM0LCBzY194XzEzNCkp
KSwgbnVsbCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICh0YWlsMTEzNCA9ICh0YWlsMTEz
NC5jZHIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIChMMTEzMCA9IChMMTEzMC5jZHIpKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICByZXR1cm4gKGZhbHNlSGVhZDExMzMuY2RyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSkp
KSwgKHggPSAocCgoc2NfdmVjdG9yMmxpc3QoKHNjX21ha2VWZWN0b3IoaywgIlx1MUU5Q2EiKSkp
KSkpKSwgKHNjX2xlbmd0aCgoQmdMX3BhcnNlemQyemUzdHJlZXN6MzEoeCwgIlx1MUU5Q3MiLCAo
MCksIGspKSkpKTsKKyAgICB9OworICAgIEJnTF9lYXJsZXl6ZDJiZW5jaG1hcmt6ZDIgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgdmFyIGFyZ3MgPSBudWxsOworICAgICAgICBmb3IgKHZhciBzY190
bXAgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgc2NfdG1wID49IDA7IHNjX3RtcC0tKSB7CisgICAg
ICAgICAgICBhcmdzID0gc2NfY29ucyhhcmd1bWVudHNbc2NfdG1wXSwgYXJncyk7CisgICAgICAg
IH0KKyAgICAgICAgdmFyIGs7CisgICAgICAgIHJldHVybiAoKGsgPSAoKGFyZ3MgPT09IG51bGwp
Pyg3KTooYXJncy5jYXIpKSksIChCZ0xfcnVuemQyYmVuY2htYXJremQyKCJlYXJsZXkiLCAoMSks
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcmV0dXJuICh0ZXN0KGspKTsKKyAgICAgICAgfSwg
ZnVuY3Rpb24ocmVzdWx0KSB7CisgICAgICAgICAgICByZXR1cm4gKChzY19kaXNwbGF5KHJlc3Vs
dCkpLCAoc2NfbmV3bGluZSgpKSwgdHJ1ZSk7CisgICAgICAgIH0pKSk7CisgICAgfTsKK30KKwor
CisvKioqKioqKioqKioqKiBFTkQgT0YgR0VORVJBVEVEIENPREUgKioqKioqKioqKioqKi8KKy8v
IEludm9rZSB0aGlzIGZ1bmN0aW9uIHRvIHJ1biBhIGJlbmNobWFyay4KKy8vIFRoZSBmaXJzdCBh
cmd1bWVudCBpcyBhIHN0cmluZyBpZGVudGlmeWluZyB0aGUgYmVuY2htYXJrLgorLy8gVGhlIHNl
Y29uZCBhcmd1bWVudCBpcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJ1biB0aGUgYmVuY2htYXJr
LgorLy8gVGhlIHRoaXJkIGFyZ3VtZW50IGlzIGEgZnVuY3Rpb24gdGhhdCBydW5zIHRoZSBiZW5j
aG1hcmsuCisvLyBUaGUgZm91cnRoIGFyZ3VtZW50IGlzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCB3
YXJucyBpZiB0aGUgcmVzdWx0CisvLyByZXR1cm5lZCBieSB0aGUgYmVuY2htYXJrIGlzIGluY29y
cmVjdC4KKy8vCisvLyBFeGFtcGxlOgorLy8gUnVuQmVuY2htYXJrKCJuZXcgQXJyYXkoKSIsCisv
LyAgICAgICAgICAgICAgMSwKKy8vICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7IG5ldyBBcnJh
eSgxMDAwMDAwKTsgfQorLy8gICAgICAgICAgICAgIGZ1bmN0aW9uICh2KSB7CisvLyAgICAgICAg
ICAgICAgICByZXR1cm4gKHYgaW5zdGFuY2VvZiBBcnJheSkgJiYgKHYubGVuZ3RoID09IDEwMDAw
MDApOworLy8gICAgICAgICAgICAgIH0pOworCitTQ19ERUZBVUxUX09VVCA9IG5ldyBzY19HZW5l
cmljT3V0cHV0UG9ydChmdW5jdGlvbihzKSB7fSk7CitTQ19FUlJPUl9PVVQgPSBTQ19ERUZBVUxU
X09VVDsKKworZnVuY3Rpb24gUnVuQmVuY2htYXJrKG5hbWUsIGNvdW50LCBydW4sIHdhcm4pIHsK
KyAgZm9yICh2YXIgbiA9IDA7IG4gPCBjb3VudDsgKytuKSB7CisgICAgcmVzdWx0ID0gcnVuKCk7
CisgIH0KK30KKwordmFyIEJnTF9ydW56ZDJiZW5jaG1hcmt6ZDIgPSBSdW5CZW5jaG1hcms7CisK
K2ZvciAodmFyIGkgPSAwOyBpIDwgNDsgKytpKSB7CisgIEJnTF9lYXJsZXl6ZDJiZW5jaG1hcmt6
ZDIoKTsKKyAgQmdMX25ib3llcnpkMmJlbmNobWFya3pkMigpOworfQpJbmRleDogU3VuU3BpZGVy
L3Rlc3RzL3Y4LXJheXRyYWNlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFN1blNwaWRlci90ZXN0cy92OC1y
YXl0cmFjZS5qcwkocmV2aXNpb24gMCkKKysrIFN1blNwaWRlci90ZXN0cy92OC1yYXl0cmFjZS5q
cwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNDE1IEBACisvLyBUaGUgcmF5IHRyYWNlciBjb2Rl
IGluIHRoaXMgZmlsZSBpcyB3cml0dGVuIGJ5IEFkYW0gQnVybWlzdGVyLiBJdAorLy8gaXMgYXZh
aWxhYmxlIGluIGl0cyBvcmlnaW5hbCBmb3JtIGZyb206CisvLworLy8gICBodHRwOi8vbGFicy5m
bG9nLm56LmNvL3JheXRyYWNlci8KKy8vCisvLyBJdCBoYXMgYmVlbiBtb2RpZmllZCBzbGlnaHRs
eSBieSBHb29nbGUgdG8gd29yayBhcyBhIHN0YW5kYWxvbmUKKy8vIGJlbmNobWFyaywgYnV0IHRo
ZSBhbGwgdGhlIGNvbXB1dGF0aW9uYWwgY29kZSByZW1haW5zCisvLyB1bnRvdWNoZWQuIFRoaXMg
ZmlsZSBhbHNvIGNvbnRhaW5zIGEgY29weSBvZiB0aGUgUHJvdG90eXBlCisvLyBKYXZhU2NyaXB0
IGZyYW1ld29yayB3aGljaCBpcyB1c2VkIGJ5IHRoZSByYXkgdHJhY2VyLgorCisvLyBDcmVhdGUg
ZHVtbXkgb2JqZWN0cyBpZiB3ZSdyZSBub3QgcnVubmluZyBpbiBhIGJyb3dzZXIuCitpZiAodHlw
ZW9mIGRvY3VtZW50ID09ICd1bmRlZmluZWQnKSB7CisgIGRvY3VtZW50ID0geyB9OworICB3aW5k
b3cgPSB7IG9wZXJhOiBudWxsIH07CisgIG5hdmlnYXRvciA9IHsgdXNlckFnZW50OiBudWxsLCBh
cHBWZXJzaW9uOiAiIiB9OworfQorCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKKworLyogIFByb3RvdHlwZSBKYXZhU2NyaXB0IGZyYW1ld29yaywgdmVyc2lvbiAx
LjUuMAorICogIChjKSAyMDA1LTIwMDcgU2FtIFN0ZXBoZW5zb24KKyAqCisgKiAgUHJvdG90eXBl
IGlzIGZyZWVseSBkaXN0cmlidXRhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbiBNSVQtc3R5bGUg
bGljZW5zZS4KKyAqICBGb3IgZGV0YWlscywgc2VlIHRoZSBQcm90b3R5cGUgd2ViIHNpdGU6IGh0
dHA6Ly9wcm90b3R5cGUuY29uaW8ubmV0LworICoKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tCit2YXIgUHJvdG90eXBlID0geworICBWZXJzaW9uOiAnMS41
LjAnLAorICBCcm93c2VyRmVhdHVyZXM6IHsKKyAgICBYUGF0aDogISFkb2N1bWVudC5ldmFsdWF0
ZQorICB9LAorCisgIFNjcmlwdEZyYWdtZW50OiAnKD86PHNjcmlwdC4qPz4pKChcbnxccnwuKSo/
KSg/OjxcL3NjcmlwdD4pJywKKyAgZW1wdHlGdW5jdGlvbjogZnVuY3Rpb24oKSB7fSwKKyAgSzog
ZnVuY3Rpb24oeCkgeyByZXR1cm4geCB9Cit9CisKK3ZhciBDbGFzcyA9IHsKKyAgY3JlYXRlOiBm
dW5jdGlvbigpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICB0aGlzLmluaXRpYWxp
emUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICB9CisgIH0KK30KKwordmFyIEFic3RyYWN0
ID0gbmV3IE9iamVjdCgpOworCitPYmplY3QuZXh0ZW5kID0gZnVuY3Rpb24oZGVzdGluYXRpb24s
IHNvdXJjZSkgeworICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBzb3VyY2UpIHsKKyAgICBkZXN0aW5h
dGlvbltwcm9wZXJ0eV0gPSBzb3VyY2VbcHJvcGVydHldOworICB9CisgIHJldHVybiBkZXN0aW5h
dGlvbjsKK30KKworT2JqZWN0LmV4dGVuZChPYmplY3QsIHsKKyAgaW5zcGVjdDogZnVuY3Rpb24o
b2JqZWN0KSB7CisgICAgdHJ5IHsKKyAgICAgIGlmIChvYmplY3QgPT09IHVuZGVmaW5lZCkgcmV0
dXJuICd1bmRlZmluZWQnOworICAgICAgaWYgKG9iamVjdCA9PT0gbnVsbCkgcmV0dXJuICdudWxs
JzsKKyAgICAgIHJldHVybiBvYmplY3QuaW5zcGVjdCA/IG9iamVjdC5pbnNwZWN0KCkgOiBvYmpl
Y3QudG9TdHJpbmcoKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICBpZiAoZSBpbnN0YW5jZW9m
IFJhbmdlRXJyb3IpIHJldHVybiAnLi4uJzsKKyAgICAgIHRocm93IGU7CisgICAgfQorICB9LAor
CisgIGtleXM6IGZ1bmN0aW9uKG9iamVjdCkgeworICAgIHZhciBrZXlzID0gW107CisgICAgZm9y
ICh2YXIgcHJvcGVydHkgaW4gb2JqZWN0KQorICAgICAga2V5cy5wdXNoKHByb3BlcnR5KTsKKyAg
ICByZXR1cm4ga2V5czsKKyAgfSwKKworICB2YWx1ZXM6IGZ1bmN0aW9uKG9iamVjdCkgeworICAg
IHZhciB2YWx1ZXMgPSBbXTsKKyAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBvYmplY3QpCisgICAg
ICB2YWx1ZXMucHVzaChvYmplY3RbcHJvcGVydHldKTsKKyAgICByZXR1cm4gdmFsdWVzOworICB9
LAorCisgIGNsb25lOiBmdW5jdGlvbihvYmplY3QpIHsKKyAgICByZXR1cm4gT2JqZWN0LmV4dGVu
ZCh7fSwgb2JqZWN0KTsKKyAgfQorfSk7CisKK0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kID0gZnVu
Y3Rpb24oKSB7CisgIHZhciBfX21ldGhvZCA9IHRoaXMsIGFyZ3MgPSAkQShhcmd1bWVudHMpLCBv
YmplY3QgPSBhcmdzLnNoaWZ0KCk7CisgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4g
X19tZXRob2QuYXBwbHkob2JqZWN0LCBhcmdzLmNvbmNhdCgkQShhcmd1bWVudHMpKSk7CisgIH0K
K30KKworRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRBc0V2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihv
YmplY3QpIHsKKyAgdmFyIF9fbWV0aG9kID0gdGhpcywgYXJncyA9ICRBKGFyZ3VtZW50cyksIG9i
amVjdCA9IGFyZ3Muc2hpZnQoKTsKKyAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgcmV0
dXJuIF9fbWV0aG9kLmFwcGx5KG9iamVjdCwgWyggZXZlbnQgfHwgd2luZG93LmV2ZW50KV0uY29u
Y2F0KGFyZ3MpLmNvbmNhdCgkQShhcmd1bWVudHMpKSk7CisgIH0KK30KKworT2JqZWN0LmV4dGVu
ZChOdW1iZXIucHJvdG90eXBlLCB7CisgIHRvQ29sb3JQYXJ0OiBmdW5jdGlvbigpIHsKKyAgICB2
YXIgZGlnaXRzID0gdGhpcy50b1N0cmluZygxNik7CisgICAgaWYgKHRoaXMgPCAxNikgcmV0dXJu
ICcwJyArIGRpZ2l0czsKKyAgICByZXR1cm4gZGlnaXRzOworICB9LAorCisgIHN1Y2M6IGZ1bmN0
aW9uKCkgeworICAgIHJldHVybiB0aGlzICsgMTsKKyAgfSwKKworICB0aW1lczogZnVuY3Rpb24o
aXRlcmF0b3IpIHsKKyAgICAkUigwLCB0aGlzLCB0cnVlKS5lYWNoKGl0ZXJhdG9yKTsKKyAgICBy
ZXR1cm4gdGhpczsKKyAgfQorfSk7CisKK3ZhciBUcnkgPSB7CisgIHRoZXNlOiBmdW5jdGlvbigp
IHsKKyAgICB2YXIgcmV0dXJuVmFsdWU7CisKKyAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0g
YXJndW1lbnRzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICB2YXIgbGFtYmRhID0g
YXJndW1lbnRzW2ldOworICAgICAgdHJ5IHsKKyAgICAgICAgcmV0dXJuVmFsdWUgPSBsYW1iZGEo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9IGNhdGNoIChlKSB7fQorICAgIH0KKworICAgIHJl
dHVybiByZXR1cm5WYWx1ZTsKKyAgfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordmFy
IFBlcmlvZGljYWxFeGVjdXRlciA9IENsYXNzLmNyZWF0ZSgpOworUGVyaW9kaWNhbEV4ZWN1dGVy
LnByb3RvdHlwZSA9IHsKKyAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oY2FsbGJhY2ssIGZyZXF1ZW5j
eSkgeworICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICB0aGlzLmZyZXF1ZW5jeSA9
IGZyZXF1ZW5jeTsKKyAgICB0aGlzLmN1cnJlbnRseUV4ZWN1dGluZyA9IGZhbHNlOworCisgICAg
dGhpcy5yZWdpc3RlckNhbGxiYWNrKCk7CisgIH0sCisKKyAgcmVnaXN0ZXJDYWxsYmFjazogZnVu
Y3Rpb24oKSB7CisgICAgdGhpcy50aW1lciA9IHNldEludGVydmFsKHRoaXMub25UaW1lckV2ZW50
LmJpbmQodGhpcyksIHRoaXMuZnJlcXVlbmN5ICogMTAwMCk7CisgIH0sCisKKyAgc3RvcDogZnVu
Y3Rpb24oKSB7CisgICAgaWYgKCF0aGlzLnRpbWVyKSByZXR1cm47CisgICAgY2xlYXJJbnRlcnZh
bCh0aGlzLnRpbWVyKTsKKyAgICB0aGlzLnRpbWVyID0gbnVsbDsKKyAgfSwKKworICBvblRpbWVy
RXZlbnQ6IGZ1bmN0aW9uKCkgeworICAgIGlmICghdGhpcy5jdXJyZW50bHlFeGVjdXRpbmcpIHsK
KyAgICAgIHRyeSB7CisgICAgICAgIHRoaXMuY3VycmVudGx5RXhlY3V0aW5nID0gdHJ1ZTsKKyAg
ICAgICAgdGhpcy5jYWxsYmFjayh0aGlzKTsKKyAgICAgIH0gZmluYWxseSB7CisgICAgICAgIHRo
aXMuY3VycmVudGx5RXhlY3V0aW5nID0gZmFsc2U7CisgICAgICB9CisgICAgfQorICB9Cit9CitT
dHJpbmcuaW50ZXJwcmV0ID0gZnVuY3Rpb24odmFsdWUpeworICByZXR1cm4gdmFsdWUgPT0gbnVs
bCA/ICcnIDogU3RyaW5nKHZhbHVlKTsKK30KKworT2JqZWN0LmV4dGVuZChTdHJpbmcucHJvdG90
eXBlLCB7CisgIGdzdWI6IGZ1bmN0aW9uKHBhdHRlcm4sIHJlcGxhY2VtZW50KSB7CisgICAgdmFy
IHJlc3VsdCA9ICcnLCBzb3VyY2UgPSB0aGlzLCBtYXRjaDsKKyAgICByZXBsYWNlbWVudCA9IGFy
Z3VtZW50cy5jYWxsZWUucHJlcGFyZVJlcGxhY2VtZW50KHJlcGxhY2VtZW50KTsKKworICAgIHdo
aWxlIChzb3VyY2UubGVuZ3RoID4gMCkgeworICAgICAgaWYgKG1hdGNoID0gc291cmNlLm1hdGNo
KHBhdHRlcm4pKSB7CisgICAgICAgIHJlc3VsdCArPSBzb3VyY2Uuc2xpY2UoMCwgbWF0Y2guaW5k
ZXgpOworICAgICAgICByZXN1bHQgKz0gU3RyaW5nLmludGVycHJldChyZXBsYWNlbWVudChtYXRj
aCkpOworICAgICAgICBzb3VyY2UgID0gc291cmNlLnNsaWNlKG1hdGNoLmluZGV4ICsgbWF0Y2hb
MF0ubGVuZ3RoKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3VsdCArPSBzb3VyY2UsIHNv
dXJjZSA9ICcnOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworICB9LAorCisg
IHN1YjogZnVuY3Rpb24ocGF0dGVybiwgcmVwbGFjZW1lbnQsIGNvdW50KSB7CisgICAgcmVwbGFj
ZW1lbnQgPSB0aGlzLmdzdWIucHJlcGFyZVJlcGxhY2VtZW50KHJlcGxhY2VtZW50KTsKKyAgICBj
b3VudCA9IGNvdW50ID09PSB1bmRlZmluZWQgPyAxIDogY291bnQ7CisKKyAgICByZXR1cm4gdGhp
cy5nc3ViKHBhdHRlcm4sIGZ1bmN0aW9uKG1hdGNoKSB7CisgICAgICBpZiAoLS1jb3VudCA8IDAp
IHJldHVybiBtYXRjaFswXTsKKyAgICAgIHJldHVybiByZXBsYWNlbWVudChtYXRjaCk7CisgICAg
fSk7CisgIH0sCisKKyAgc2NhbjogZnVuY3Rpb24ocGF0dGVybiwgaXRlcmF0b3IpIHsKKyAgICB0
aGlzLmdzdWIocGF0dGVybiwgaXRlcmF0b3IpOworICAgIHJldHVybiB0aGlzOworICB9LAorCisg
IHRydW5jYXRlOiBmdW5jdGlvbihsZW5ndGgsIHRydW5jYXRpb24pIHsKKyAgICBsZW5ndGggPSBs
ZW5ndGggfHwgMzA7CisgICAgdHJ1bmNhdGlvbiA9IHRydW5jYXRpb24gPT09IHVuZGVmaW5lZCA/
ICcuLi4nIDogdHJ1bmNhdGlvbjsKKyAgICByZXR1cm4gdGhpcy5sZW5ndGggPiBsZW5ndGggPwor
ICAgICAgdGhpcy5zbGljZSgwLCBsZW5ndGggLSB0cnVuY2F0aW9uLmxlbmd0aCkgKyB0cnVuY2F0
aW9uIDogdGhpczsKKyAgfSwKKworICBzdHJpcDogZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRo
aXMucmVwbGFjZSgvXlxzKy8sICcnKS5yZXBsYWNlKC9ccyskLywgJycpOworICB9LAorCisgIHN0
cmlwVGFnczogZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMucmVwbGFjZSgvPFwvP1tePl0r
Pi9naSwgJycpOworICB9LAorCisgIHN0cmlwU2NyaXB0czogZnVuY3Rpb24oKSB7CisgICAgcmV0
dXJuIHRoaXMucmVwbGFjZShuZXcgUmVnRXhwKFByb3RvdHlwZS5TY3JpcHRGcmFnbWVudCwgJ2lt
ZycpLCAnJyk7CisgIH0sCisKKyAgZXh0cmFjdFNjcmlwdHM6IGZ1bmN0aW9uKCkgeworICAgIHZh
ciBtYXRjaEFsbCA9IG5ldyBSZWdFeHAoUHJvdG90eXBlLlNjcmlwdEZyYWdtZW50LCAnaW1nJyk7
CisgICAgdmFyIG1hdGNoT25lID0gbmV3IFJlZ0V4cChQcm90b3R5cGUuU2NyaXB0RnJhZ21lbnQs
ICdpbScpOworICAgIHJldHVybiAodGhpcy5tYXRjaChtYXRjaEFsbCkgfHwgW10pLm1hcChmdW5j
dGlvbihzY3JpcHRUYWcpIHsKKyAgICAgIHJldHVybiAoc2NyaXB0VGFnLm1hdGNoKG1hdGNoT25l
KSB8fCBbJycsICcnXSlbMV07CisgICAgfSk7CisgIH0sCisKKyAgZXZhbFNjcmlwdHM6IGZ1bmN0
aW9uKCkgeworICAgIHJldHVybiB0aGlzLmV4dHJhY3RTY3JpcHRzKCkubWFwKGZ1bmN0aW9uKHNj
cmlwdCkgeyByZXR1cm4gZXZhbChzY3JpcHQpIH0pOworICB9LAorCisgIGVzY2FwZUhUTUw6IGZ1
bmN0aW9uKCkgeworICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsK
KyAgICB2YXIgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMpOworICAgIGRpdi5h
cHBlbmRDaGlsZCh0ZXh0KTsKKyAgICByZXR1cm4gZGl2LmlubmVySFRNTDsKKyAgfSwKKworICB1
bmVzY2FwZUhUTUw6IGZ1bmN0aW9uKCkgeworICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdkaXYnKTsKKyAgICBkaXYuaW5uZXJIVE1MID0gdGhpcy5zdHJpcFRhZ3MoKTsKKyAg
ICByZXR1cm4gZGl2LmNoaWxkTm9kZXNbMF0gPyAoZGl2LmNoaWxkTm9kZXMubGVuZ3RoID4gMSA/
CisgICAgICAkQShkaXYuY2hpbGROb2RlcykuaW5qZWN0KCcnLGZ1bmN0aW9uKG1lbW8sbm9kZSl7
IHJldHVybiBtZW1vK25vZGUubm9kZVZhbHVlIH0pIDoKKyAgICAgIGRpdi5jaGlsZE5vZGVzWzBd
Lm5vZGVWYWx1ZSkgOiAnJzsKKyAgfSwKKworICB0b1F1ZXJ5UGFyYW1zOiBmdW5jdGlvbihzZXBh
cmF0b3IpIHsKKyAgICB2YXIgbWF0Y2ggPSB0aGlzLnN0cmlwKCkubWF0Y2goLyhbXj8jXSopKCMu
Kik/JC8pOworICAgIGlmICghbWF0Y2gpIHJldHVybiB7fTsKKworICAgIHJldHVybiBtYXRjaFsx
XS5zcGxpdChzZXBhcmF0b3IgfHwgJyYnKS5pbmplY3Qoe30sIGZ1bmN0aW9uKGhhc2gsIHBhaXIp
IHsKKyAgICAgIGlmICgocGFpciA9IHBhaXIuc3BsaXQoJz0nKSlbMF0pIHsKKyAgICAgICAgdmFy
IG5hbWUgPSBkZWNvZGVVUklDb21wb25lbnQocGFpclswXSk7CisgICAgICAgIHZhciB2YWx1ZSA9
IHBhaXJbMV0gPyBkZWNvZGVVUklDb21wb25lbnQocGFpclsxXSkgOiB1bmRlZmluZWQ7CisKKyAg
ICAgICAgaWYgKGhhc2hbbmFtZV0gIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgIGlmIChoYXNo
W25hbWVdLmNvbnN0cnVjdG9yICE9IEFycmF5KQorICAgICAgICAgICAgaGFzaFtuYW1lXSA9IFto
YXNoW25hbWVdXTsKKyAgICAgICAgICBpZiAodmFsdWUpIGhhc2hbbmFtZV0ucHVzaCh2YWx1ZSk7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBoYXNoW25hbWVdID0gdmFsdWU7CisgICAgICB9Cisg
ICAgICByZXR1cm4gaGFzaDsKKyAgICB9KTsKKyAgfSwKKworICB0b0FycmF5OiBmdW5jdGlvbigp
IHsKKyAgICByZXR1cm4gdGhpcy5zcGxpdCgnJyk7CisgIH0sCisKKyAgc3VjYzogZnVuY3Rpb24o
KSB7CisgICAgcmV0dXJuIHRoaXMuc2xpY2UoMCwgdGhpcy5sZW5ndGggLSAxKSArCisgICAgICBT
dHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuY2hhckNvZGVBdCh0aGlzLmxlbmd0aCAtIDEpICsgMSk7
CisgIH0sCisKKyAgY2FtZWxpemU6IGZ1bmN0aW9uKCkgeworICAgIHZhciBwYXJ0cyA9IHRoaXMu
c3BsaXQoJy0nKSwgbGVuID0gcGFydHMubGVuZ3RoOworICAgIGlmIChsZW4gPT0gMSkgcmV0dXJu
IHBhcnRzWzBdOworCisgICAgdmFyIGNhbWVsaXplZCA9IHRoaXMuY2hhckF0KDApID09ICctJwor
ICAgICAgPyBwYXJ0c1swXS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHBhcnRzWzBdLnN1YnN0
cmluZygxKQorICAgICAgOiBwYXJ0c1swXTsKKworICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbGVu
OyBpKyspCisgICAgICBjYW1lbGl6ZWQgKz0gcGFydHNbaV0uY2hhckF0KDApLnRvVXBwZXJDYXNl
KCkgKyBwYXJ0c1tpXS5zdWJzdHJpbmcoMSk7CisKKyAgICByZXR1cm4gY2FtZWxpemVkOworICB9
LAorCisgIGNhcGl0YWxpemU6IGZ1bmN0aW9uKCl7CisgICAgcmV0dXJuIHRoaXMuY2hhckF0KDAp
LnRvVXBwZXJDYXNlKCkgKyB0aGlzLnN1YnN0cmluZygxKS50b0xvd2VyQ2FzZSgpOworICB9LAor
CisgIHVuZGVyc2NvcmU6IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmdzdWIoLzo6Lywg
Jy8nKS5nc3ViKC8oW0EtWl0rKShbQS1aXVthLXpdKS8sJyN7MX1fI3syfScpLmdzdWIoLyhbYS16
XGRdKShbQS1aXSkvLCcjezF9XyN7Mn0nKS5nc3ViKC8tLywnXycpLnRvTG93ZXJDYXNlKCk7Cisg
IH0sCisKKyAgZGFzaGVyaXplOiBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5nc3ViKC9f
LywnLScpOworICB9LAorCisgIGluc3BlY3Q6IGZ1bmN0aW9uKHVzZURvdWJsZVF1b3Rlcykgewor
ICAgIHZhciBlc2NhcGVkU3RyaW5nID0gdGhpcy5yZXBsYWNlKC9cXC9nLCAnXFxcXCcpOworICAg
IGlmICh1c2VEb3VibGVRdW90ZXMpCisgICAgICByZXR1cm4gJyInICsgZXNjYXBlZFN0cmluZy5y
ZXBsYWNlKC8iL2csICdcXCInKSArICciJzsKKyAgICBlbHNlCisgICAgICByZXR1cm4gIiciICsg
ZXNjYXBlZFN0cmluZy5yZXBsYWNlKC8nL2csICdcXFwnJykgKyAiJyI7CisgIH0KK30pOworCitT
dHJpbmcucHJvdG90eXBlLmdzdWIucHJlcGFyZVJlcGxhY2VtZW50ID0gZnVuY3Rpb24ocmVwbGFj
ZW1lbnQpIHsKKyAgaWYgKHR5cGVvZiByZXBsYWNlbWVudCA9PSAnZnVuY3Rpb24nKSByZXR1cm4g
cmVwbGFjZW1lbnQ7CisgIHZhciB0ZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZShyZXBsYWNlbWVudCk7
CisgIHJldHVybiBmdW5jdGlvbihtYXRjaCkgeyByZXR1cm4gdGVtcGxhdGUuZXZhbHVhdGUobWF0
Y2gpIH07Cit9CisKK1N0cmluZy5wcm90b3R5cGUucGFyc2VRdWVyeSA9IFN0cmluZy5wcm90b3R5
cGUudG9RdWVyeVBhcmFtczsKKwordmFyIFRlbXBsYXRlID0gQ2xhc3MuY3JlYXRlKCk7CitUZW1w
bGF0ZS5QYXR0ZXJuID0gLyhefC58XHJ8XG4pKCNceyguKj8pXH0pLzsKK1RlbXBsYXRlLnByb3Rv
dHlwZSA9IHsKKyAgaW5pdGlhbGl6ZTogZnVuY3Rpb24odGVtcGxhdGUsIHBhdHRlcm4pIHsKKyAg
ICB0aGlzLnRlbXBsYXRlID0gdGVtcGxhdGUudG9TdHJpbmcoKTsKKyAgICB0aGlzLnBhdHRlcm4g
ID0gcGF0dGVybiB8fCBUZW1wbGF0ZS5QYXR0ZXJuOworICB9LAorCisgIGV2YWx1YXRlOiBmdW5j
dGlvbihvYmplY3QpIHsKKyAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZS5nc3ViKHRoaXMucGF0dGVy
biwgZnVuY3Rpb24obWF0Y2gpIHsKKyAgICAgIHZhciBiZWZvcmUgPSBtYXRjaFsxXTsKKyAgICAg
IGlmIChiZWZvcmUgPT0gJ1xcJykgcmV0dXJuIG1hdGNoWzJdOworICAgICAgcmV0dXJuIGJlZm9y
ZSArIFN0cmluZy5pbnRlcnByZXQob2JqZWN0W21hdGNoWzNdXSk7CisgICAgfSk7CisgIH0KK30K
KwordmFyICRicmVhayAgICA9IG5ldyBPYmplY3QoKTsKK3ZhciAkY29udGludWUgPSBuZXcgT2Jq
ZWN0KCk7CisKK3ZhciBFbnVtZXJhYmxlID0geworICBlYWNoOiBmdW5jdGlvbihpdGVyYXRvcikg
eworICAgIHZhciBpbmRleCA9IDA7CisgICAgdHJ5IHsKKyAgICAgIHRoaXMuX2VhY2goZnVuY3Rp
b24odmFsdWUpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICBpdGVyYXRvcih2YWx1ZSwgaW5k
ZXgrKyk7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICBpZiAoZSAhPSAkY29udGlu
dWUpIHRocm93IGU7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0gY2F0Y2ggKGUpIHsKKyAg
ICAgIGlmIChlICE9ICRicmVhaykgdGhyb3cgZTsKKyAgICB9CisgICAgcmV0dXJuIHRoaXM7Cisg
IH0sCisKKyAgZWFjaFNsaWNlOiBmdW5jdGlvbihudW1iZXIsIGl0ZXJhdG9yKSB7CisgICAgdmFy
IGluZGV4ID0gLW51bWJlciwgc2xpY2VzID0gW10sIGFycmF5ID0gdGhpcy50b0FycmF5KCk7Cisg
ICAgd2hpbGUgKChpbmRleCArPSBudW1iZXIpIDwgYXJyYXkubGVuZ3RoKQorICAgICAgc2xpY2Vz
LnB1c2goYXJyYXkuc2xpY2UoaW5kZXgsIGluZGV4K251bWJlcikpOworICAgIHJldHVybiBzbGlj
ZXMubWFwKGl0ZXJhdG9yKTsKKyAgfSwKKworICBhbGw6IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7Cisg
ICAgdmFyIHJlc3VsdCA9IHRydWU7CisgICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRl
eCkgeworICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICEhKGl0ZXJhdG9yIHx8IFByb3RvdHlwZS5L
KSh2YWx1ZSwgaW5kZXgpOworICAgICAgaWYgKCFyZXN1bHQpIHRocm93ICRicmVhazsKKyAgICB9
KTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9LAorCisgIGFueTogZnVuY3Rpb24oaXRlcmF0b3Ip
IHsKKyAgICB2YXIgcmVzdWx0ID0gZmFsc2U7CisgICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVl
LCBpbmRleCkgeworICAgICAgaWYgKHJlc3VsdCA9ICEhKGl0ZXJhdG9yIHx8IFByb3RvdHlwZS5L
KSh2YWx1ZSwgaW5kZXgpKQorICAgICAgICB0aHJvdyAkYnJlYWs7CisgICAgfSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKKyAgfSwKKworICBjb2xsZWN0OiBmdW5jdGlvbihpdGVyYXRvcikgeworICAg
IHZhciByZXN1bHRzID0gW107CisgICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkg
eworICAgICAgcmVzdWx0cy5wdXNoKChpdGVyYXRvciB8fCBQcm90b3R5cGUuSykodmFsdWUsIGlu
ZGV4KSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdHM7CisgIH0sCisKKyAgZGV0ZWN0OiBm
dW5jdGlvbihpdGVyYXRvcikgeworICAgIHZhciByZXN1bHQ7CisgICAgdGhpcy5lYWNoKGZ1bmN0
aW9uKHZhbHVlLCBpbmRleCkgeworICAgICAgaWYgKGl0ZXJhdG9yKHZhbHVlLCBpbmRleCkpIHsK
KyAgICAgICAgcmVzdWx0ID0gdmFsdWU7CisgICAgICAgIHRocm93ICRicmVhazsKKyAgICAgIH0K
KyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9LAorCisgIGZpbmRBbGw6IGZ1bmN0aW9u
KGl0ZXJhdG9yKSB7CisgICAgdmFyIHJlc3VsdHMgPSBbXTsKKyAgICB0aGlzLmVhY2goZnVuY3Rp
b24odmFsdWUsIGluZGV4KSB7CisgICAgICBpZiAoaXRlcmF0b3IodmFsdWUsIGluZGV4KSkKKyAg
ICAgICAgcmVzdWx0cy5wdXNoKHZhbHVlKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0czsK
KyAgfSwKKworICBncmVwOiBmdW5jdGlvbihwYXR0ZXJuLCBpdGVyYXRvcikgeworICAgIHZhciBy
ZXN1bHRzID0gW107CisgICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgeworICAg
ICAgdmFyIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTsKKyAgICAgIGlmIChzdHJpbmdW
YWx1ZS5tYXRjaChwYXR0ZXJuKSkKKyAgICAgICAgcmVzdWx0cy5wdXNoKChpdGVyYXRvciB8fCBQ
cm90b3R5cGUuSykodmFsdWUsIGluZGV4KSk7CisgICAgfSkKKyAgICByZXR1cm4gcmVzdWx0czsK
KyAgfSwKKworICBpbmNsdWRlOiBmdW5jdGlvbihvYmplY3QpIHsKKyAgICB2YXIgZm91bmQgPSBm
YWxzZTsKKyAgICB0aGlzLmVhY2goZnVuY3Rpb24odmFsdWUpIHsKKyAgICAgIGlmICh2YWx1ZSA9
PSBvYmplY3QpIHsKKyAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICB0aHJvdyAkYnJlYWs7
CisgICAgICB9CisgICAgfSk7CisgICAgcmV0dXJuIGZvdW5kOworICB9LAorCisgIGluR3JvdXBz
T2Y6IGZ1bmN0aW9uKG51bWJlciwgZmlsbFdpdGgpIHsKKyAgICBmaWxsV2l0aCA9IGZpbGxXaXRo
ID09PSB1bmRlZmluZWQgPyBudWxsIDogZmlsbFdpdGg7CisgICAgcmV0dXJuIHRoaXMuZWFjaFNs
aWNlKG51bWJlciwgZnVuY3Rpb24oc2xpY2UpIHsKKyAgICAgIHdoaWxlKHNsaWNlLmxlbmd0aCA8
IG51bWJlcikgc2xpY2UucHVzaChmaWxsV2l0aCk7CisgICAgICByZXR1cm4gc2xpY2U7CisgICAg
fSk7CisgIH0sCisKKyAgaW5qZWN0OiBmdW5jdGlvbihtZW1vLCBpdGVyYXRvcikgeworICAgIHRo
aXMuZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKKyAgICAgIG1lbW8gPSBpdGVyYXRvciht
ZW1vLCB2YWx1ZSwgaW5kZXgpOworICAgIH0pOworICAgIHJldHVybiBtZW1vOworICB9LAorCisg
IGludm9rZTogZnVuY3Rpb24obWV0aG9kKSB7CisgICAgdmFyIGFyZ3MgPSAkQShhcmd1bWVudHMp
LnNsaWNlKDEpOworICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbih2YWx1ZSkgeworICAgICAg
cmV0dXJuIHZhbHVlW21ldGhvZF0uYXBwbHkodmFsdWUsIGFyZ3MpOworICAgIH0pOworICB9LAor
CisgIG1heDogZnVuY3Rpb24oaXRlcmF0b3IpIHsKKyAgICB2YXIgcmVzdWx0OworICAgIHRoaXMu
ZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKKyAgICAgIHZhbHVlID0gKGl0ZXJhdG9yIHx8
IFByb3RvdHlwZS5LKSh2YWx1ZSwgaW5kZXgpOworICAgICAgaWYgKHJlc3VsdCA9PSB1bmRlZmlu
ZWQgfHwgdmFsdWUgPj0gcmVzdWx0KQorICAgICAgICByZXN1bHQgPSB2YWx1ZTsKKyAgICB9KTsK
KyAgICByZXR1cm4gcmVzdWx0OworICB9LAorCisgIG1pbjogZnVuY3Rpb24oaXRlcmF0b3IpIHsK
KyAgICB2YXIgcmVzdWx0OworICAgIHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsK
KyAgICAgIHZhbHVlID0gKGl0ZXJhdG9yIHx8IFByb3RvdHlwZS5LKSh2YWx1ZSwgaW5kZXgpOwor
ICAgICAgaWYgKHJlc3VsdCA9PSB1bmRlZmluZWQgfHwgdmFsdWUgPCByZXN1bHQpCisgICAgICAg
IHJlc3VsdCA9IHZhbHVlOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQ7CisgIH0sCisKKyAg
cGFydGl0aW9uOiBmdW5jdGlvbihpdGVyYXRvcikgeworICAgIHZhciB0cnVlcyA9IFtdLCBmYWxz
ZXMgPSBbXTsKKyAgICB0aGlzLmVhY2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CisgICAgICAo
KGl0ZXJhdG9yIHx8IFByb3RvdHlwZS5LKSh2YWx1ZSwgaW5kZXgpID8KKyAgICAgICAgdHJ1ZXMg
OiBmYWxzZXMpLnB1c2godmFsdWUpOworICAgIH0pOworICAgIHJldHVybiBbdHJ1ZXMsIGZhbHNl
c107CisgIH0sCisKKyAgcGx1Y2s6IGZ1bmN0aW9uKHByb3BlcnR5KSB7CisgICAgdmFyIHJlc3Vs
dHMgPSBbXTsKKyAgICB0aGlzLmVhY2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CisgICAgICBy
ZXN1bHRzLnB1c2godmFsdWVbcHJvcGVydHldKTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0
czsKKyAgfSwKKworICByZWplY3Q6IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CisgICAgdmFyIHJlc3Vs
dHMgPSBbXTsKKyAgICB0aGlzLmVhY2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CisgICAgICBp
ZiAoIWl0ZXJhdG9yKHZhbHVlLCBpbmRleCkpCisgICAgICAgIHJlc3VsdHMucHVzaCh2YWx1ZSk7
CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdHM7CisgIH0sCisKKyAgc29ydEJ5OiBmdW5jdGlv
bihpdGVyYXRvcikgeworICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbih2YWx1ZSwgaW5kZXgp
IHsKKyAgICAgIHJldHVybiB7dmFsdWU6IHZhbHVlLCBjcml0ZXJpYTogaXRlcmF0b3IodmFsdWUs
IGluZGV4KX07CisgICAgfSkuc29ydChmdW5jdGlvbihsZWZ0LCByaWdodCkgeworICAgICAgdmFy
IGEgPSBsZWZ0LmNyaXRlcmlhLCBiID0gcmlnaHQuY3JpdGVyaWE7CisgICAgICByZXR1cm4gYSA8
IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7CisgICAgfSkucGx1Y2soJ3ZhbHVlJyk7CisgIH0sCisK
KyAgdG9BcnJheTogZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMubWFwKCk7CisgIH0sCisK
KyAgemlwOiBmdW5jdGlvbigpIHsKKyAgICB2YXIgaXRlcmF0b3IgPSBQcm90b3R5cGUuSywgYXJn
cyA9ICRBKGFyZ3VtZW50cyk7CisgICAgaWYgKHR5cGVvZiBhcmdzLmxhc3QoKSA9PSAnZnVuY3Rp
b24nKQorICAgICAgaXRlcmF0b3IgPSBhcmdzLnBvcCgpOworCisgICAgdmFyIGNvbGxlY3Rpb25z
ID0gW3RoaXNdLmNvbmNhdChhcmdzKS5tYXAoJEEpOworICAgIHJldHVybiB0aGlzLm1hcChmdW5j
dGlvbih2YWx1ZSwgaW5kZXgpIHsKKyAgICAgIHJldHVybiBpdGVyYXRvcihjb2xsZWN0aW9ucy5w
bHVjayhpbmRleCkpOworICAgIH0pOworICB9LAorCisgIHNpemU6IGZ1bmN0aW9uKCkgeworICAg
IHJldHVybiB0aGlzLnRvQXJyYXkoKS5sZW5ndGg7CisgIH0sCisKKyAgaW5zcGVjdDogZnVuY3Rp
b24oKSB7CisgICAgcmV0dXJuICcjPEVudW1lcmFibGU6JyArIHRoaXMudG9BcnJheSgpLmluc3Bl
Y3QoKSArICc+JzsKKyAgfQorfQorCitPYmplY3QuZXh0ZW5kKEVudW1lcmFibGUsIHsKKyAgbWFw
OiAgICAgRW51bWVyYWJsZS5jb2xsZWN0LAorICBmaW5kOiAgICBFbnVtZXJhYmxlLmRldGVjdCwK
KyAgc2VsZWN0OiAgRW51bWVyYWJsZS5maW5kQWxsLAorICBtZW1iZXI6ICBFbnVtZXJhYmxlLmlu
Y2x1ZGUsCisgIGVudHJpZXM6IEVudW1lcmFibGUudG9BcnJheQorfSk7Cit2YXIgJEEgPSBBcnJh
eS5mcm9tID0gZnVuY3Rpb24oaXRlcmFibGUpIHsKKyAgaWYgKCFpdGVyYWJsZSkgcmV0dXJuIFtd
OworICBpZiAoaXRlcmFibGUudG9BcnJheSkgeworICAgIHJldHVybiBpdGVyYWJsZS50b0FycmF5
KCk7CisgIH0gZWxzZSB7CisgICAgdmFyIHJlc3VsdHMgPSBbXTsKKyAgICBmb3IgKHZhciBpID0g
MCwgbGVuZ3RoID0gaXRlcmFibGUubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspCisgICAgICByZXN1
bHRzLnB1c2goaXRlcmFibGVbaV0pOworICAgIHJldHVybiByZXN1bHRzOworICB9Cit9CisKK09i
amVjdC5leHRlbmQoQXJyYXkucHJvdG90eXBlLCBFbnVtZXJhYmxlKTsKKworaWYgKCFBcnJheS5w
cm90b3R5cGUuX3JldmVyc2UpCisgIEFycmF5LnByb3RvdHlwZS5fcmV2ZXJzZSA9IEFycmF5LnBy
b3RvdHlwZS5yZXZlcnNlOworCitPYmplY3QuZXh0ZW5kKEFycmF5LnByb3RvdHlwZSwgeworICBf
ZWFjaDogZnVuY3Rpb24oaXRlcmF0b3IpIHsKKyAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0g
dGhpcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykKKyAgICAgIGl0ZXJhdG9yKHRoaXNbaV0pOwor
ICB9LAorCisgIGNsZWFyOiBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmxlbmd0aCA9IDA7CisgICAg
cmV0dXJuIHRoaXM7CisgIH0sCisKKyAgZmlyc3Q6IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0
aGlzWzBdOworICB9LAorCisgIGxhc3Q6IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzW3Ro
aXMubGVuZ3RoIC0gMV07CisgIH0sCisKKyAgY29tcGFjdDogZnVuY3Rpb24oKSB7CisgICAgcmV0
dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICByZXR1cm4gdmFsdWUgIT0g
bnVsbDsKKyAgICB9KTsKKyAgfSwKKworICBmbGF0dGVuOiBmdW5jdGlvbigpIHsKKyAgICByZXR1
cm4gdGhpcy5pbmplY3QoW10sIGZ1bmN0aW9uKGFycmF5LCB2YWx1ZSkgeworICAgICAgcmV0dXJu
IGFycmF5LmNvbmNhdCh2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvciA9PSBBcnJheSA/CisgICAg
ICAgIHZhbHVlLmZsYXR0ZW4oKSA6IFt2YWx1ZV0pOworICAgIH0pOworICB9LAorCisgIHdpdGhv
dXQ6IGZ1bmN0aW9uKCkgeworICAgIHZhciB2YWx1ZXMgPSAkQShhcmd1bWVudHMpOworICAgIHJl
dHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbih2YWx1ZSkgeworICAgICAgcmV0dXJuICF2YWx1ZXMu
aW5jbHVkZSh2YWx1ZSk7CisgICAgfSk7CisgIH0sCisKKyAgaW5kZXhPZjogZnVuY3Rpb24ob2Jq
ZWN0KSB7CisgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHRoaXMubGVuZ3RoOyBpIDwgbGVu
Z3RoOyBpKyspCisgICAgICBpZiAodGhpc1tpXSA9PSBvYmplY3QpIHJldHVybiBpOworICAgIHJl
dHVybiAtMTsKKyAgfSwKKworICByZXZlcnNlOiBmdW5jdGlvbihpbmxpbmUpIHsKKyAgICByZXR1
cm4gKGlubGluZSAhPT0gZmFsc2UgPyB0aGlzIDogdGhpcy50b0FycmF5KCkpLl9yZXZlcnNlKCk7
CisgIH0sCisKKyAgcmVkdWNlOiBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5sZW5ndGgg
PiAxID8gdGhpcyA6IHRoaXNbMF07CisgIH0sCisKKyAgdW5pcTogZnVuY3Rpb24oKSB7CisgICAg
cmV0dXJuIHRoaXMuaW5qZWN0KFtdLCBmdW5jdGlvbihhcnJheSwgdmFsdWUpIHsKKyAgICAgIHJl
dHVybiBhcnJheS5pbmNsdWRlKHZhbHVlKSA/IGFycmF5IDogYXJyYXkuY29uY2F0KFt2YWx1ZV0p
OworICAgIH0pOworICB9LAorCisgIGNsb25lOiBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gW10u
Y29uY2F0KHRoaXMpOworICB9LAorCisgIHNpemU6IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0
aGlzLmxlbmd0aDsKKyAgfSwKKworICBpbnNwZWN0OiBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4g
J1snICsgdGhpcy5tYXAoT2JqZWN0Lmluc3BlY3QpLmpvaW4oJywgJykgKyAnXSc7CisgIH0KK30p
OworCitBcnJheS5wcm90b3R5cGUudG9BcnJheSA9IEFycmF5LnByb3RvdHlwZS5jbG9uZTsKKwor
ZnVuY3Rpb24gJHcoc3RyaW5nKXsKKyAgc3RyaW5nID0gc3RyaW5nLnN0cmlwKCk7CisgIHJldHVy
biBzdHJpbmcgPyBzdHJpbmcuc3BsaXQoL1xzKy8pIDogW107Cit9CisKK2lmKHdpbmRvdy5vcGVy
YSl7CisgIEFycmF5LnByb3RvdHlwZS5jb25jYXQgPSBmdW5jdGlvbigpeworICAgIHZhciBhcnJh
eSA9IFtdOworICAgIGZvcih2YXIgaSA9IDAsIGxlbmd0aCA9IHRoaXMubGVuZ3RoOyBpIDwgbGVu
Z3RoOyBpKyspIGFycmF5LnB1c2godGhpc1tpXSk7CisgICAgZm9yKHZhciBpID0gMCwgbGVuZ3Ro
ID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICBpZihhcmd1bWVu
dHNbaV0uY29uc3RydWN0b3IgPT0gQXJyYXkpIHsKKyAgICAgICAgZm9yKHZhciBqID0gMCwgYXJy
YXlMZW5ndGggPSBhcmd1bWVudHNbaV0ubGVuZ3RoOyBqIDwgYXJyYXlMZW5ndGg7IGorKykKKyAg
ICAgICAgICBhcnJheS5wdXNoKGFyZ3VtZW50c1tpXVtqXSk7CisgICAgICB9IGVsc2UgeworICAg
ICAgICBhcnJheS5wdXNoKGFyZ3VtZW50c1tpXSk7CisgICAgICB9CisgICAgfQorICAgIHJldHVy
biBhcnJheTsKKyAgfQorfQordmFyIEhhc2ggPSBmdW5jdGlvbihvYmopIHsKKyAgT2JqZWN0LmV4
dGVuZCh0aGlzLCBvYmogfHwge30pOworfTsKKworT2JqZWN0LmV4dGVuZChIYXNoLCB7CisgIHRv
UXVlcnlTdHJpbmc6IGZ1bmN0aW9uKG9iaikgeworICAgIHZhciBwYXJ0cyA9IFtdOworCisJICB0
aGlzLnByb3RvdHlwZS5fZWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24ocGFpcikgeworICAgICAgaWYg
KCFwYWlyLmtleSkgcmV0dXJuOworCisgICAgICBpZiAocGFpci52YWx1ZSAmJiBwYWlyLnZhbHVl
LmNvbnN0cnVjdG9yID09IEFycmF5KSB7CisgICAgICAgIHZhciB2YWx1ZXMgPSBwYWlyLnZhbHVl
LmNvbXBhY3QoKTsKKyAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPCAyKSBwYWlyLnZhbHVlID0g
dmFsdWVzLnJlZHVjZSgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgCWtleSA9IGVuY29kZVVS
SUNvbXBvbmVudChwYWlyLmtleSk7CisgICAgICAgICAgdmFsdWVzLmVhY2goZnVuY3Rpb24odmFs
dWUpIHsKKyAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgIT0gdW5kZWZpbmVkID8gZW5jb2RlVVJJ
Q29tcG9uZW50KHZhbHVlKSA6ICcnOworICAgICAgICAgICAgcGFydHMucHVzaChrZXkgKyAnPScg
KyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGlmIChwYWlyLnZhbHVlID09IHVuZGVm
aW5lZCkgcGFpclsxXSA9ICcnOworICAgICAgcGFydHMucHVzaChwYWlyLm1hcChlbmNvZGVVUklD
b21wb25lbnQpLmpvaW4oJz0nKSk7CisJICB9KTsKKworICAgIHJldHVybiBwYXJ0cy5qb2luKCcm
Jyk7CisgIH0KK30pOworCitPYmplY3QuZXh0ZW5kKEhhc2gucHJvdG90eXBlLCBFbnVtZXJhYmxl
KTsKK09iamVjdC5leHRlbmQoSGFzaC5wcm90b3R5cGUsIHsKKyAgX2VhY2g6IGZ1bmN0aW9uKGl0
ZXJhdG9yKSB7CisgICAgZm9yICh2YXIga2V5IGluIHRoaXMpIHsKKyAgICAgIHZhciB2YWx1ZSA9
IHRoaXNba2V5XTsKKyAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSA9PSBIYXNoLnByb3RvdHlwZVtr
ZXldKSBjb250aW51ZTsKKworICAgICAgdmFyIHBhaXIgPSBba2V5LCB2YWx1ZV07CisgICAgICBw
YWlyLmtleSA9IGtleTsKKyAgICAgIHBhaXIudmFsdWUgPSB2YWx1ZTsKKyAgICAgIGl0ZXJhdG9y
KHBhaXIpOworICAgIH0KKyAgfSwKKworICBrZXlzOiBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4g
dGhpcy5wbHVjaygna2V5Jyk7CisgIH0sCisKKyAgdmFsdWVzOiBmdW5jdGlvbigpIHsKKyAgICBy
ZXR1cm4gdGhpcy5wbHVjaygndmFsdWUnKTsKKyAgfSwKKworICBtZXJnZTogZnVuY3Rpb24oaGFz
aCkgeworICAgIHJldHVybiAkSChoYXNoKS5pbmplY3QodGhpcywgZnVuY3Rpb24obWVyZ2VkSGFz
aCwgcGFpcikgeworICAgICAgbWVyZ2VkSGFzaFtwYWlyLmtleV0gPSBwYWlyLnZhbHVlOworICAg
ICAgcmV0dXJuIG1lcmdlZEhhc2g7CisgICAgfSk7CisgIH0sCisKKyAgcmVtb3ZlOiBmdW5jdGlv
bigpIHsKKyAgICB2YXIgcmVzdWx0OworICAgIGZvcih2YXIgaSA9IDAsIGxlbmd0aCA9IGFyZ3Vt
ZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgdmFyIHZhbHVlID0gdGhpc1th
cmd1bWVudHNbaV1dOworICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpeworICAgICAgICBp
ZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHJlc3VsdCA9IHZhbHVlOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICBpZiAocmVzdWx0LmNvbnN0cnVjdG9yICE9IEFycmF5KSByZXN1bHQgPSBbcmVz
dWx0XTsKKyAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSkKKyAgICAgICAgfQorICAgICAgfQor
ICAgICAgZGVsZXRlIHRoaXNbYXJndW1lbnRzW2ldXTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgfSwKKworICB0b1F1ZXJ5U3RyaW5nOiBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gSGFz
aC50b1F1ZXJ5U3RyaW5nKHRoaXMpOworICB9LAorCisgIGluc3BlY3Q6IGZ1bmN0aW9uKCkgewor
ICAgIHJldHVybiAnIzxIYXNoOnsnICsgdGhpcy5tYXAoZnVuY3Rpb24ocGFpcikgeworICAgICAg
cmV0dXJuIHBhaXIubWFwKE9iamVjdC5pbnNwZWN0KS5qb2luKCc6ICcpOworICAgIH0pLmpvaW4o
JywgJykgKyAnfT4nOworICB9Cit9KTsKKworZnVuY3Rpb24gJEgob2JqZWN0KSB7CisgIGlmIChv
YmplY3QgJiYgb2JqZWN0LmNvbnN0cnVjdG9yID09IEhhc2gpIHJldHVybiBvYmplY3Q7CisgIHJl
dHVybiBuZXcgSGFzaChvYmplY3QpOworfTsKK09iamVjdFJhbmdlID0gQ2xhc3MuY3JlYXRlKCk7
CitPYmplY3QuZXh0ZW5kKE9iamVjdFJhbmdlLnByb3RvdHlwZSwgRW51bWVyYWJsZSk7CitPYmpl
Y3QuZXh0ZW5kKE9iamVjdFJhbmdlLnByb3RvdHlwZSwgeworICBpbml0aWFsaXplOiBmdW5jdGlv
bihzdGFydCwgZW5kLCBleGNsdXNpdmUpIHsKKyAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7CisgICAg
dGhpcy5lbmQgPSBlbmQ7CisgICAgdGhpcy5leGNsdXNpdmUgPSBleGNsdXNpdmU7CisgIH0sCisK
KyAgX2VhY2g6IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CisgICAgdmFyIHZhbHVlID0gdGhpcy5zdGFy
dDsKKyAgICB3aGlsZSAodGhpcy5pbmNsdWRlKHZhbHVlKSkgeworICAgICAgaXRlcmF0b3IodmFs
dWUpOworICAgICAgdmFsdWUgPSB2YWx1ZS5zdWNjKCk7CisgICAgfQorICB9LAorCisgIGluY2x1
ZGU6IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgaWYgKHZhbHVlIDwgdGhpcy5zdGFydCkKKyAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAodGhpcy5leGNsdXNpdmUpCisgICAgICByZXR1cm4gdmFs
dWUgPCB0aGlzLmVuZDsKKyAgICByZXR1cm4gdmFsdWUgPD0gdGhpcy5lbmQ7CisgIH0KK30pOwor
Cit2YXIgJFIgPSBmdW5jdGlvbihzdGFydCwgZW5kLCBleGNsdXNpdmUpIHsKKyAgcmV0dXJuIG5l
dyBPYmplY3RSYW5nZShzdGFydCwgZW5kLCBleGNsdXNpdmUpOworfQorCit2YXIgQWpheCA9IHsK
KyAgZ2V0VHJhbnNwb3J0OiBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gVHJ5LnRoZXNlKAorICAg
ICAgZnVuY3Rpb24oKSB7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdCgpfSwKKyAgICAgIGZ1bmN0
aW9uKCkge3JldHVybiBuZXcgQWN0aXZlWE9iamVjdCgnTXN4bWwyLlhNTEhUVFAnKX0sCisgICAg
ICBmdW5jdGlvbigpIHtyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01pY3Jvc29mdC5YTUxIVFRQ
Jyl9CisgICAgKSB8fCBmYWxzZTsKKyAgfSwKKworICBhY3RpdmVSZXF1ZXN0Q291bnQ6IDAKK30K
KworQWpheC5SZXNwb25kZXJzID0geworICByZXNwb25kZXJzOiBbXSwKKworICBfZWFjaDogZnVu
Y3Rpb24oaXRlcmF0b3IpIHsKKyAgICB0aGlzLnJlc3BvbmRlcnMuX2VhY2goaXRlcmF0b3IpOwor
ICB9LAorCisgIHJlZ2lzdGVyOiBmdW5jdGlvbihyZXNwb25kZXIpIHsKKyAgICBpZiAoIXRoaXMu
aW5jbHVkZShyZXNwb25kZXIpKQorICAgICAgdGhpcy5yZXNwb25kZXJzLnB1c2gocmVzcG9uZGVy
KTsKKyAgfSwKKworICB1bnJlZ2lzdGVyOiBmdW5jdGlvbihyZXNwb25kZXIpIHsKKyAgICB0aGlz
LnJlc3BvbmRlcnMgPSB0aGlzLnJlc3BvbmRlcnMud2l0aG91dChyZXNwb25kZXIpOworICB9LAor
CisgIGRpc3BhdGNoOiBmdW5jdGlvbihjYWxsYmFjaywgcmVxdWVzdCwgdHJhbnNwb3J0LCBqc29u
KSB7CisgICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHJlc3BvbmRlcikgeworICAgICAgaWYgKHR5cGVv
ZiByZXNwb25kZXJbY2FsbGJhY2tdID09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgdHJ5IHsKKyAg
ICAgICAgICByZXNwb25kZXJbY2FsbGJhY2tdLmFwcGx5KHJlc3BvbmRlciwgW3JlcXVlc3QsIHRy
YW5zcG9ydCwganNvbl0pOworICAgICAgICB9IGNhdGNoIChlKSB7fQorICAgICAgfQorICAgIH0p
OworICB9Cit9OworCitPYmplY3QuZXh0ZW5kKEFqYXguUmVzcG9uZGVycywgRW51bWVyYWJsZSk7
CisKK0FqYXguUmVzcG9uZGVycy5yZWdpc3Rlcih7CisgIG9uQ3JlYXRlOiBmdW5jdGlvbigpIHsK
KyAgICBBamF4LmFjdGl2ZVJlcXVlc3RDb3VudCsrOworICB9LAorICBvbkNvbXBsZXRlOiBmdW5j
dGlvbigpIHsKKyAgICBBamF4LmFjdGl2ZVJlcXVlc3RDb3VudC0tOworICB9Cit9KTsKKworQWph
eC5CYXNlID0gZnVuY3Rpb24oKSB7fTsKK0FqYXguQmFzZS5wcm90b3R5cGUgPSB7CisgIHNldE9w
dGlvbnM6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKKyAgICB0aGlzLm9wdGlvbnMgPSB7CisgICAgICBt
ZXRob2Q6ICAgICAgICdwb3N0JywKKyAgICAgIGFzeW5jaHJvbm91czogdHJ1ZSwKKyAgICAgIGNv
bnRlbnRUeXBlOiAgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsCisgICAgICBl
bmNvZGluZzogICAgICdVVEYtOCcsCisgICAgICBwYXJhbWV0ZXJzOiAgICcnCisgICAgfQorICAg
IE9iamVjdC5leHRlbmQodGhpcy5vcHRpb25zLCBvcHRpb25zIHx8IHt9KTsKKworICAgIHRoaXMu
b3B0aW9ucy5tZXRob2QgPSB0aGlzLm9wdGlvbnMubWV0aG9kLnRvTG93ZXJDYXNlKCk7CisgICAg
aWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMucGFyYW1ldGVycyA9PSAnc3RyaW5nJykKKyAgICAgIHRo
aXMub3B0aW9ucy5wYXJhbWV0ZXJzID0gdGhpcy5vcHRpb25zLnBhcmFtZXRlcnMudG9RdWVyeVBh
cmFtcygpOworICB9Cit9CisKK0FqYXguUmVxdWVzdCA9IENsYXNzLmNyZWF0ZSgpOworQWpheC5S
ZXF1ZXN0LkV2ZW50cyA9CisgIFsnVW5pbml0aWFsaXplZCcsICdMb2FkaW5nJywgJ0xvYWRlZCcs
ICdJbnRlcmFjdGl2ZScsICdDb21wbGV0ZSddOworCitBamF4LlJlcXVlc3QucHJvdG90eXBlID0g
T2JqZWN0LmV4dGVuZChuZXcgQWpheC5CYXNlKCksIHsKKyAgX2NvbXBsZXRlOiBmYWxzZSwKKwor
ICBpbml0aWFsaXplOiBmdW5jdGlvbih1cmwsIG9wdGlvbnMpIHsKKyAgICB0aGlzLnRyYW5zcG9y
dCA9IEFqYXguZ2V0VHJhbnNwb3J0KCk7CisgICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpOwor
ICAgIHRoaXMucmVxdWVzdCh1cmwpOworICB9LAorCisgIHJlcXVlc3Q6IGZ1bmN0aW9uKHVybCkg
eworICAgIHRoaXMudXJsID0gdXJsOworICAgIHRoaXMubWV0aG9kID0gdGhpcy5vcHRpb25zLm1l
dGhvZDsKKyAgICB2YXIgcGFyYW1zID0gdGhpcy5vcHRpb25zLnBhcmFtZXRlcnM7CisKKyAgICBp
ZiAoIVsnZ2V0JywgJ3Bvc3QnXS5pbmNsdWRlKHRoaXMubWV0aG9kKSkgeworICAgICAgLy8gc2lt
dWxhdGUgb3RoZXIgdmVyYnMgb3ZlciBwb3N0CisgICAgICBwYXJhbXNbJ19tZXRob2QnXSA9IHRo
aXMubWV0aG9kOworICAgICAgdGhpcy5tZXRob2QgPSAncG9zdCc7CisgICAgfQorCisgICAgcGFy
YW1zID0gSGFzaC50b1F1ZXJ5U3RyaW5nKHBhcmFtcyk7CisgICAgaWYgKHBhcmFtcyAmJiAvS29u
cXVlcm9yfFNhZmFyaXxLSFRNTC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkgcGFyYW1zICs9
ICcmXz0nCisKKyAgICAvLyB3aGVuIEdFVCwgYXBwZW5kIHBhcmFtZXRlcnMgdG8gVVJMCisgICAg
aWYgKHRoaXMubWV0aG9kID09ICdnZXQnICYmIHBhcmFtcykKKyAgICAgIHRoaXMudXJsICs9ICh0
aGlzLnVybC5pbmRleE9mKCc/JykgPiAtMSA/ICcmJyA6ICc/JykgKyBwYXJhbXM7CisKKyAgICB0
cnkgeworICAgICAgQWpheC5SZXNwb25kZXJzLmRpc3BhdGNoKCdvbkNyZWF0ZScsIHRoaXMsIHRo
aXMudHJhbnNwb3J0KTsKKworICAgICAgdGhpcy50cmFuc3BvcnQub3Blbih0aGlzLm1ldGhvZC50
b1VwcGVyQ2FzZSgpLCB0aGlzLnVybCwKKyAgICAgICAgdGhpcy5vcHRpb25zLmFzeW5jaHJvbm91
cyk7CisKKyAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXN5bmNocm9ub3VzKQorICAgICAgICBzZXRU
aW1lb3V0KGZ1bmN0aW9uKCkgeyB0aGlzLnJlc3BvbmRUb1JlYWR5U3RhdGUoMSkgfS5iaW5kKHRo
aXMpLCAxMCk7CisKKyAgICAgIHRoaXMudHJhbnNwb3J0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHRo
aXMub25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMpOworICAgICAgdGhpcy5zZXRSZXF1ZXN0SGVhZGVy
cygpOworCisgICAgICB2YXIgYm9keSA9IHRoaXMubWV0aG9kID09ICdwb3N0JyA/ICh0aGlzLm9w
dGlvbnMucG9zdEJvZHkgfHwgcGFyYW1zKSA6IG51bGw7CisKKyAgICAgIHRoaXMudHJhbnNwb3J0
LnNlbmQoYm9keSk7CisKKyAgICAgIC8qIEZvcmNlIEZpcmVmb3ggdG8gaGFuZGxlIHJlYWR5IHN0
YXRlIDQgZm9yIHN5bmNocm9ub3VzIHJlcXVlc3RzICovCisgICAgICBpZiAoIXRoaXMub3B0aW9u
cy5hc3luY2hyb25vdXMgJiYgdGhpcy50cmFuc3BvcnQub3ZlcnJpZGVNaW1lVHlwZSkKKyAgICAg
ICAgdGhpcy5vblN0YXRlQ2hhbmdlKCk7CisKKyAgICB9CisgICAgY2F0Y2ggKGUpIHsKKyAgICAg
IHRoaXMuZGlzcGF0Y2hFeGNlcHRpb24oZSk7CisgICAgfQorICB9LAorCisgIG9uU3RhdGVDaGFu
Z2U6IGZ1bmN0aW9uKCkgeworICAgIHZhciByZWFkeVN0YXRlID0gdGhpcy50cmFuc3BvcnQucmVh
ZHlTdGF0ZTsKKyAgICBpZiAocmVhZHlTdGF0ZSA+IDEgJiYgISgocmVhZHlTdGF0ZSA9PSA0KSAm
JiB0aGlzLl9jb21wbGV0ZSkpCisgICAgICB0aGlzLnJlc3BvbmRUb1JlYWR5U3RhdGUodGhpcy50
cmFuc3BvcnQucmVhZHlTdGF0ZSk7CisgIH0sCisKKyAgc2V0UmVxdWVzdEhlYWRlcnM6IGZ1bmN0
aW9uKCkgeworICAgIHZhciBoZWFkZXJzID0geworICAgICAgJ1gtUmVxdWVzdGVkLVdpdGgnOiAn
WE1MSHR0cFJlcXVlc3QnLAorICAgICAgJ1gtUHJvdG90eXBlLVZlcnNpb24nOiBQcm90b3R5cGUu
VmVyc2lvbiwKKyAgICAgICdBY2NlcHQnOiAndGV4dC9qYXZhc2NyaXB0LCB0ZXh0L2h0bWwsIGFw
cGxpY2F0aW9uL3htbCwgdGV4dC94bWwsICovKicKKyAgICB9OworCisgICAgaWYgKHRoaXMubWV0
aG9kID09ICdwb3N0JykgeworICAgICAgaGVhZGVyc1snQ29udGVudC10eXBlJ10gPSB0aGlzLm9w
dGlvbnMuY29udGVudFR5cGUgKworICAgICAgICAodGhpcy5vcHRpb25zLmVuY29kaW5nID8gJzsg
Y2hhcnNldD0nICsgdGhpcy5vcHRpb25zLmVuY29kaW5nIDogJycpOworCisgICAgICAvKiBGb3Jj
ZSAiQ29ubmVjdGlvbjogY2xvc2UiIGZvciBvbGRlciBNb3ppbGxhIGJyb3dzZXJzIHRvIHdvcmsK
KyAgICAgICAqIGFyb3VuZCBhIGJ1ZyB3aGVyZSBYTUxIdHRwUmVxdWVzdCBzZW5kcyBhbiBpbmNv
cnJlY3QKKyAgICAgICAqIENvbnRlbnQtbGVuZ3RoIGhlYWRlci4gU2VlIE1vemlsbGEgQnVnemls
bGEgIzI0NjY1MS4KKyAgICAgICAqLworICAgICAgaWYgKHRoaXMudHJhbnNwb3J0Lm92ZXJyaWRl
TWltZVR5cGUgJiYKKyAgICAgICAgICAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvR2Vja29c
LyhcZHs0fSkvKSB8fCBbMCwyMDA1XSlbMV0gPCAyMDA1KQorICAgICAgICAgICAgaGVhZGVyc1sn
Q29ubmVjdGlvbiddID0gJ2Nsb3NlJzsKKyAgICB9CisKKyAgICAvLyB1c2VyLWRlZmluZWQgaGVh
ZGVycworICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLnJlcXVlc3RIZWFkZXJzID09ICdvYmpl
Y3QnKSB7CisgICAgICB2YXIgZXh0cmFzID0gdGhpcy5vcHRpb25zLnJlcXVlc3RIZWFkZXJzOwor
CisgICAgICBpZiAodHlwZW9mIGV4dHJhcy5wdXNoID09ICdmdW5jdGlvbicpCisgICAgICAgIGZv
ciAodmFyIGkgPSAwLCBsZW5ndGggPSBleHRyYXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpICs9IDIp
CisgICAgICAgICAgaGVhZGVyc1tleHRyYXNbaV1dID0gZXh0cmFzW2krMV07CisgICAgICBlbHNl
CisgICAgICAgICRIKGV4dHJhcykuZWFjaChmdW5jdGlvbihwYWlyKSB7IGhlYWRlcnNbcGFpci5r
ZXldID0gcGFpci52YWx1ZSB9KTsKKyAgICB9CisKKyAgICBmb3IgKHZhciBuYW1lIGluIGhlYWRl
cnMpCisgICAgICB0aGlzLnRyYW5zcG9ydC5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIGhlYWRlcnNb
bmFtZV0pOworICB9LAorCisgIHN1Y2Nlc3M6IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiAhdGhp
cy50cmFuc3BvcnQuc3RhdHVzCisgICAgICAgIHx8ICh0aGlzLnRyYW5zcG9ydC5zdGF0dXMgPj0g
MjAwICYmIHRoaXMudHJhbnNwb3J0LnN0YXR1cyA8IDMwMCk7CisgIH0sCisKKyAgcmVzcG9uZFRv
UmVhZHlTdGF0ZTogZnVuY3Rpb24ocmVhZHlTdGF0ZSkgeworICAgIHZhciBzdGF0ZSA9IEFqYXgu
UmVxdWVzdC5FdmVudHNbcmVhZHlTdGF0ZV07CisgICAgdmFyIHRyYW5zcG9ydCA9IHRoaXMudHJh
bnNwb3J0LCBqc29uID0gdGhpcy5ldmFsSlNPTigpOworCisgICAgaWYgKHN0YXRlID09ICdDb21w
bGV0ZScpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIHRoaXMuX2NvbXBsZXRlID0gdHJ1ZTsKKyAg
ICAgICAgKHRoaXMub3B0aW9uc1snb24nICsgdGhpcy50cmFuc3BvcnQuc3RhdHVzXQorICAgICAg
ICAgfHwgdGhpcy5vcHRpb25zWydvbicgKyAodGhpcy5zdWNjZXNzKCkgPyAnU3VjY2VzcycgOiAn
RmFpbHVyZScpXQorICAgICAgICAgfHwgUHJvdG90eXBlLmVtcHR5RnVuY3Rpb24pKHRyYW5zcG9y
dCwganNvbik7CisgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFeGNl
cHRpb24oZSk7CisgICAgICB9CisKKyAgICAgIGlmICgodGhpcy5nZXRIZWFkZXIoJ0NvbnRlbnQt
dHlwZScpIHx8ICd0ZXh0L2phdmFzY3JpcHQnKS5zdHJpcCgpLgorICAgICAgICBtYXRjaCgvXih0
ZXh0fGFwcGxpY2F0aW9uKVwvKHgtKT8oamF2YXxlY21hKXNjcmlwdCg7LiopPyQvaSkpCisgICAg
ICAgICAgdGhpcy5ldmFsUmVzcG9uc2UoKTsKKyAgICB9CisKKyAgICB0cnkgeworICAgICAgKHRo
aXMub3B0aW9uc1snb24nICsgc3RhdGVdIHx8IFByb3RvdHlwZS5lbXB0eUZ1bmN0aW9uKSh0cmFu
c3BvcnQsIGpzb24pOworICAgICAgQWpheC5SZXNwb25kZXJzLmRpc3BhdGNoKCdvbicgKyBzdGF0
ZSwgdGhpcywgdHJhbnNwb3J0LCBqc29uKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICB0aGlz
LmRpc3BhdGNoRXhjZXB0aW9uKGUpOworICAgIH0KKworICAgIGlmIChzdGF0ZSA9PSAnQ29tcGxl
dGUnKSB7CisgICAgICAvLyBhdm9pZCBtZW1vcnkgbGVhayBpbiBNU0lFOiBjbGVhbiB1cAorICAg
ICAgdGhpcy50cmFuc3BvcnQub25yZWFkeXN0YXRlY2hhbmdlID0gUHJvdG90eXBlLmVtcHR5RnVu
Y3Rpb247CisgICAgfQorICB9LAorCisgIGdldEhlYWRlcjogZnVuY3Rpb24obmFtZSkgeworICAg
IHRyeSB7CisgICAgICByZXR1cm4gdGhpcy50cmFuc3BvcnQuZ2V0UmVzcG9uc2VIZWFkZXIobmFt
ZSk7CisgICAgfSBjYXRjaCAoZSkgeyByZXR1cm4gbnVsbCB9CisgIH0sCisKKyAgZXZhbEpTT046
IGZ1bmN0aW9uKCkgeworICAgIHRyeSB7CisgICAgICB2YXIganNvbiA9IHRoaXMuZ2V0SGVhZGVy
KCdYLUpTT04nKTsKKyAgICAgIHJldHVybiBqc29uID8gZXZhbCgnKCcgKyBqc29uICsgJyknKSA6
IG51bGw7CisgICAgfSBjYXRjaCAoZSkgeyByZXR1cm4gbnVsbCB9CisgIH0sCisKKyAgZXZhbFJl
c3BvbnNlOiBmdW5jdGlvbigpIHsKKyAgICB0cnkgeworICAgICAgcmV0dXJuIGV2YWwodGhpcy50
cmFuc3BvcnQucmVzcG9uc2VUZXh0KTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICB0aGlzLmRp
c3BhdGNoRXhjZXB0aW9uKGUpOworICAgIH0KKyAgfSwKKworICBkaXNwYXRjaEV4Y2VwdGlvbjog
ZnVuY3Rpb24oZXhjZXB0aW9uKSB7CisgICAgKHRoaXMub3B0aW9ucy5vbkV4Y2VwdGlvbiB8fCBQ
cm90b3R5cGUuZW1wdHlGdW5jdGlvbikodGhpcywgZXhjZXB0aW9uKTsKKyAgICBBamF4LlJlc3Bv
bmRlcnMuZGlzcGF0Y2goJ29uRXhjZXB0aW9uJywgdGhpcywgZXhjZXB0aW9uKTsKKyAgfQorfSk7
CisKK0FqYXguVXBkYXRlciA9IENsYXNzLmNyZWF0ZSgpOworCitPYmplY3QuZXh0ZW5kKE9iamVj
dC5leHRlbmQoQWpheC5VcGRhdGVyLnByb3RvdHlwZSwgQWpheC5SZXF1ZXN0LnByb3RvdHlwZSks
IHsKKyAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oY29udGFpbmVyLCB1cmwsIG9wdGlvbnMpIHsKKyAg
ICB0aGlzLmNvbnRhaW5lciA9IHsKKyAgICAgIHN1Y2Nlc3M6IChjb250YWluZXIuc3VjY2VzcyB8
fCBjb250YWluZXIpLAorICAgICAgZmFpbHVyZTogKGNvbnRhaW5lci5mYWlsdXJlIHx8IChjb250
YWluZXIuc3VjY2VzcyA/IG51bGwgOiBjb250YWluZXIpKQorICAgIH0KKworICAgIHRoaXMudHJh
bnNwb3J0ID0gQWpheC5nZXRUcmFuc3BvcnQoKTsKKyAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9u
cyk7CisKKyAgICB2YXIgb25Db21wbGV0ZSA9IHRoaXMub3B0aW9ucy5vbkNvbXBsZXRlIHx8IFBy
b3RvdHlwZS5lbXB0eUZ1bmN0aW9uOworICAgIHRoaXMub3B0aW9ucy5vbkNvbXBsZXRlID0gKGZ1
bmN0aW9uKHRyYW5zcG9ydCwgcGFyYW0pIHsKKyAgICAgIHRoaXMudXBkYXRlQ29udGVudCgpOwor
ICAgICAgb25Db21wbGV0ZSh0cmFuc3BvcnQsIHBhcmFtKTsKKyAgICB9KS5iaW5kKHRoaXMpOwor
CisgICAgdGhpcy5yZXF1ZXN0KHVybCk7CisgIH0sCisKKyAgdXBkYXRlQ29udGVudDogZnVuY3Rp
b24oKSB7CisgICAgdmFyIHJlY2VpdmVyID0gdGhpcy5jb250YWluZXJbdGhpcy5zdWNjZXNzKCkg
PyAnc3VjY2VzcycgOiAnZmFpbHVyZSddOworICAgIHZhciByZXNwb25zZSA9IHRoaXMudHJhbnNw
b3J0LnJlc3BvbnNlVGV4dDsKKworICAgIGlmICghdGhpcy5vcHRpb25zLmV2YWxTY3JpcHRzKSBy
ZXNwb25zZSA9IHJlc3BvbnNlLnN0cmlwU2NyaXB0cygpOworCisgICAgaWYgKHJlY2VpdmVyID0g
JChyZWNlaXZlcikpIHsKKyAgICAgIGlmICh0aGlzLm9wdGlvbnMuaW5zZXJ0aW9uKQorICAgICAg
ICBuZXcgdGhpcy5vcHRpb25zLmluc2VydGlvbihyZWNlaXZlciwgcmVzcG9uc2UpOworICAgICAg
ZWxzZQorICAgICAgICByZWNlaXZlci51cGRhdGUocmVzcG9uc2UpOworICAgIH0KKworICAgIGlm
ICh0aGlzLnN1Y2Nlc3MoKSkgeworICAgICAgaWYgKHRoaXMub25Db21wbGV0ZSkKKyAgICAgICAg
c2V0VGltZW91dCh0aGlzLm9uQ29tcGxldGUuYmluZCh0aGlzKSwgMTApOworICAgIH0KKyAgfQor
fSk7CisKK0FqYXguUGVyaW9kaWNhbFVwZGF0ZXIgPSBDbGFzcy5jcmVhdGUoKTsKK0FqYXguUGVy
aW9kaWNhbFVwZGF0ZXIucHJvdG90eXBlID0gT2JqZWN0LmV4dGVuZChuZXcgQWpheC5CYXNlKCks
IHsKKyAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oY29udGFpbmVyLCB1cmwsIG9wdGlvbnMpIHsKKyAg
ICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7CisgICAgdGhpcy5vbkNvbXBsZXRlID0gdGhpcy5v
cHRpb25zLm9uQ29tcGxldGU7CisKKyAgICB0aGlzLmZyZXF1ZW5jeSA9ICh0aGlzLm9wdGlvbnMu
ZnJlcXVlbmN5IHx8IDIpOworICAgIHRoaXMuZGVjYXkgPSAodGhpcy5vcHRpb25zLmRlY2F5IHx8
IDEpOworCisgICAgdGhpcy51cGRhdGVyID0ge307CisgICAgdGhpcy5jb250YWluZXIgPSBjb250
YWluZXI7CisgICAgdGhpcy51cmwgPSB1cmw7CisKKyAgICB0aGlzLnN0YXJ0KCk7CisgIH0sCisK
KyAgc3RhcnQ6IGZ1bmN0aW9uKCkgeworICAgIHRoaXMub3B0aW9ucy5vbkNvbXBsZXRlID0gdGhp
cy51cGRhdGVDb21wbGV0ZS5iaW5kKHRoaXMpOworICAgIHRoaXMub25UaW1lckV2ZW50KCk7Cisg
IH0sCisKKyAgc3RvcDogZnVuY3Rpb24oKSB7CisgICAgdGhpcy51cGRhdGVyLm9wdGlvbnMub25D
b21wbGV0ZSA9IHVuZGVmaW5lZDsKKyAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lcik7CisgICAg
KHRoaXMub25Db21wbGV0ZSB8fCBQcm90b3R5cGUuZW1wdHlGdW5jdGlvbikuYXBwbHkodGhpcywg
YXJndW1lbnRzKTsKKyAgfSwKKworICB1cGRhdGVDb21wbGV0ZTogZnVuY3Rpb24ocmVxdWVzdCkg
eworICAgIGlmICh0aGlzLm9wdGlvbnMuZGVjYXkpIHsKKyAgICAgIHRoaXMuZGVjYXkgPSAocmVx
dWVzdC5yZXNwb25zZVRleHQgPT0gdGhpcy5sYXN0VGV4dCA/CisgICAgICAgIHRoaXMuZGVjYXkg
KiB0aGlzLm9wdGlvbnMuZGVjYXkgOiAxKTsKKworICAgICAgdGhpcy5sYXN0VGV4dCA9IHJlcXVl
c3QucmVzcG9uc2VUZXh0OworICAgIH0KKyAgICB0aGlzLnRpbWVyID0gc2V0VGltZW91dCh0aGlz
Lm9uVGltZXJFdmVudC5iaW5kKHRoaXMpLAorICAgICAgdGhpcy5kZWNheSAqIHRoaXMuZnJlcXVl
bmN5ICogMTAwMCk7CisgIH0sCisKKyAgb25UaW1lckV2ZW50OiBmdW5jdGlvbigpIHsKKyAgICB0
aGlzLnVwZGF0ZXIgPSBuZXcgQWpheC5VcGRhdGVyKHRoaXMuY29udGFpbmVyLCB0aGlzLnVybCwg
dGhpcy5vcHRpb25zKTsKKyAgfQorfSk7CitmdW5jdGlvbiAkKGVsZW1lbnQpIHsKKyAgaWYgKGFy
Z3VtZW50cy5sZW5ndGggPiAxKSB7CisgICAgZm9yICh2YXIgaSA9IDAsIGVsZW1lbnRzID0gW10s
IGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykKKyAgICAgIGVsZW1l
bnRzLnB1c2goJChhcmd1bWVudHNbaV0pKTsKKyAgICByZXR1cm4gZWxlbWVudHM7CisgIH0KKyAg
aWYgKHR5cGVvZiBlbGVtZW50ID09ICdzdHJpbmcnKQorICAgIGVsZW1lbnQgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZChlbGVtZW50KTsKKyAgcmV0dXJuIEVsZW1lbnQuZXh0ZW5kKGVsZW1lbnQp
OworfQorCitpZiAoUHJvdG90eXBlLkJyb3dzZXJGZWF0dXJlcy5YUGF0aCkgeworICBkb2N1bWVu
dC5fZ2V0RWxlbWVudHNCeVhQYXRoID0gZnVuY3Rpb24oZXhwcmVzc2lvbiwgcGFyZW50RWxlbWVu
dCkgeworICAgIHZhciByZXN1bHRzID0gW107CisgICAgdmFyIHF1ZXJ5ID0gZG9jdW1lbnQuZXZh
bHVhdGUoZXhwcmVzc2lvbiwgJChwYXJlbnRFbGVtZW50KSB8fCBkb2N1bWVudCwKKyAgICAgIG51
bGwsIFhQYXRoUmVzdWx0Lk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFLCBudWxsKTsKKyAgICBm
b3IgKHZhciBpID0gMCwgbGVuZ3RoID0gcXVlcnkuc25hcHNob3RMZW5ndGg7IGkgPCBsZW5ndGg7
IGkrKykKKyAgICAgIHJlc3VsdHMucHVzaChxdWVyeS5zbmFwc2hvdEl0ZW0oaSkpOworICAgIHJl
dHVybiByZXN1bHRzOworICB9OworfQorCitkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1l
ID0gZnVuY3Rpb24oY2xhc3NOYW1lLCBwYXJlbnRFbGVtZW50KSB7CisgIGlmIChQcm90b3R5cGUu
QnJvd3NlckZlYXR1cmVzLlhQYXRoKSB7CisgICAgdmFyIHEgPSAiLi8vKltjb250YWlucyhjb25j
YXQoJyAnLCBAY2xhc3MsICcgJyksICcgIiArIGNsYXNzTmFtZSArICIgJyldIjsKKyAgICByZXR1
cm4gZG9jdW1lbnQuX2dldEVsZW1lbnRzQnlYUGF0aChxLCBwYXJlbnRFbGVtZW50KTsKKyAgfSBl
bHNlIHsKKyAgICB2YXIgY2hpbGRyZW4gPSAoJChwYXJlbnRFbGVtZW50KSB8fCBkb2N1bWVudC5i
b2R5KS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpOworICAgIHZhciBlbGVtZW50cyA9IFtdLCBj
aGlsZDsKKyAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwg
bGVuZ3RoOyBpKyspIHsKKyAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07CisgICAgICBpZiAoRWxl
bWVudC5oYXNDbGFzc05hbWUoY2hpbGQsIGNsYXNzTmFtZSkpCisgICAgICAgIGVsZW1lbnRzLnB1
c2goRWxlbWVudC5leHRlbmQoY2hpbGQpKTsKKyAgICB9CisgICAgcmV0dXJuIGVsZW1lbnRzOwor
ICB9Cit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworaWYgKCF3aW5kb3cuRWxlbWVudCkK
KyAgdmFyIEVsZW1lbnQgPSBuZXcgT2JqZWN0KCk7CisKK0VsZW1lbnQuZXh0ZW5kID0gZnVuY3Rp
b24oZWxlbWVudCkgeworICBpZiAoIWVsZW1lbnQgfHwgX25hdGl2ZUV4dGVuc2lvbnMgfHwgZWxl
bWVudC5ub2RlVHlwZSA9PSAzKSByZXR1cm4gZWxlbWVudDsKKworICBpZiAoIWVsZW1lbnQuX2V4
dGVuZGVkICYmIGVsZW1lbnQudGFnTmFtZSAmJiBlbGVtZW50ICE9IHdpbmRvdykgeworICAgIHZh
ciBtZXRob2RzID0gT2JqZWN0LmNsb25lKEVsZW1lbnQuTWV0aG9kcyksIGNhY2hlID0gRWxlbWVu
dC5leHRlbmQuY2FjaGU7CisKKyAgICBpZiAoZWxlbWVudC50YWdOYW1lID09ICdGT1JNJykKKyAg
ICAgIE9iamVjdC5leHRlbmQobWV0aG9kcywgRm9ybS5NZXRob2RzKTsKKyAgICBpZiAoWydJTlBV
VCcsICdURVhUQVJFQScsICdTRUxFQ1QnXS5pbmNsdWRlKGVsZW1lbnQudGFnTmFtZSkpCisgICAg
ICBPYmplY3QuZXh0ZW5kKG1ldGhvZHMsIEZvcm0uRWxlbWVudC5NZXRob2RzKTsKKworICAgIE9i
amVjdC5leHRlbmQobWV0aG9kcywgRWxlbWVudC5NZXRob2RzLlNpbXVsYXRlZCk7CisKKyAgICBm
b3IgKHZhciBwcm9wZXJ0eSBpbiBtZXRob2RzKSB7CisgICAgICB2YXIgdmFsdWUgPSBtZXRob2Rz
W3Byb3BlcnR5XTsKKyAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJyAmJiAhKHBy
b3BlcnR5IGluIGVsZW1lbnQpKQorICAgICAgICBlbGVtZW50W3Byb3BlcnR5XSA9IGNhY2hlLmZp
bmRPclN0b3JlKHZhbHVlKTsKKyAgICB9CisgIH0KKworICBlbGVtZW50Ll9leHRlbmRlZCA9IHRy
dWU7CisgIHJldHVybiBlbGVtZW50OworfTsKKworRWxlbWVudC5leHRlbmQuY2FjaGUgPSB7Cisg
IGZpbmRPclN0b3JlOiBmdW5jdGlvbih2YWx1ZSkgeworICAgIHJldHVybiB0aGlzW3ZhbHVlXSA9
IHRoaXNbdmFsdWVdIHx8IGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJuIHZhbHVlLmFwcGx5KG51
bGwsIFt0aGlzXS5jb25jYXQoJEEoYXJndW1lbnRzKSkpOworICAgIH0KKyAgfQorfTsKKworRWxl
bWVudC5NZXRob2RzID0geworICB2aXNpYmxlOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgcmV0
dXJuICQoZWxlbWVudCkuc3R5bGUuZGlzcGxheSAhPSAnbm9uZSc7CisgIH0sCisKKyAgdG9nZ2xl
OiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisgICAgRWxl
bWVudFtFbGVtZW50LnZpc2libGUoZWxlbWVudCkgPyAnaGlkZScgOiAnc2hvdyddKGVsZW1lbnQp
OworICAgIHJldHVybiBlbGVtZW50OworICB9LAorCisgIGhpZGU6IGZ1bmN0aW9uKGVsZW1lbnQp
IHsKKyAgICAkKGVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgcmV0dXJuIGVs
ZW1lbnQ7CisgIH0sCisKKyAgc2hvdzogZnVuY3Rpb24oZWxlbWVudCkgeworICAgICQoZWxlbWVu
dCkuc3R5bGUuZGlzcGxheSA9ICcnOworICAgIHJldHVybiBlbGVtZW50OworICB9LAorCisgIHJl
bW92ZTogZnVuY3Rpb24oZWxlbWVudCkgeworICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOworICAg
IGVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbGVtZW50KTsKKyAgICByZXR1cm4gZWxl
bWVudDsKKyAgfSwKKworICB1cGRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGh0bWwpIHsKKyAgICBo
dG1sID0gdHlwZW9mIGh0bWwgPT0gJ3VuZGVmaW5lZCcgPyAnJyA6IGh0bWwudG9TdHJpbmcoKTsK
KyAgICAkKGVsZW1lbnQpLmlubmVySFRNTCA9IGh0bWwuc3RyaXBTY3JpcHRzKCk7CisgICAgc2V0
VGltZW91dChmdW5jdGlvbigpIHtodG1sLmV2YWxTY3JpcHRzKCl9LCAxMCk7CisgICAgcmV0dXJu
IGVsZW1lbnQ7CisgIH0sCisKKyAgcmVwbGFjZTogZnVuY3Rpb24oZWxlbWVudCwgaHRtbCkgewor
ICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOworICAgIGh0bWwgPSB0eXBlb2YgaHRtbCA9PSAndW5k
ZWZpbmVkJyA/ICcnIDogaHRtbC50b1N0cmluZygpOworICAgIGlmIChlbGVtZW50Lm91dGVySFRN
TCkgeworICAgICAgZWxlbWVudC5vdXRlckhUTUwgPSBodG1sLnN0cmlwU2NyaXB0cygpOworICAg
IH0gZWxzZSB7CisgICAgICB2YXIgcmFuZ2UgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRl
UmFuZ2UoKTsKKyAgICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlbGVtZW50KTsKKyAgICAg
IGVsZW1lbnQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoCisgICAgICAgIHJhbmdlLmNyZWF0ZUNv
bnRleHR1YWxGcmFnbWVudChodG1sLnN0cmlwU2NyaXB0cygpKSwgZWxlbWVudCk7CisgICAgfQor
ICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7aHRtbC5ldmFsU2NyaXB0cygpfSwgMTApOworICAg
IHJldHVybiBlbGVtZW50OworICB9LAorCisgIGluc3BlY3Q6IGZ1bmN0aW9uKGVsZW1lbnQpIHsK
KyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKyAgICB2YXIgcmVzdWx0ID0gJzwnICsgZWxlbWVu
dC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7CisgICAgJEgoeydpZCc6ICdpZCcsICdjbGFzc05hbWUn
OiAnY2xhc3MnfSkuZWFjaChmdW5jdGlvbihwYWlyKSB7CisgICAgICB2YXIgcHJvcGVydHkgPSBw
YWlyLmZpcnN0KCksIGF0dHJpYnV0ZSA9IHBhaXIubGFzdCgpOworICAgICAgdmFyIHZhbHVlID0g
KGVsZW1lbnRbcHJvcGVydHldIHx8ICcnKS50b1N0cmluZygpOworICAgICAgaWYgKHZhbHVlKSBy
ZXN1bHQgKz0gJyAnICsgYXR0cmlidXRlICsgJz0nICsgdmFsdWUuaW5zcGVjdCh0cnVlKTsKKyAg
ICB9KTsKKyAgICByZXR1cm4gcmVzdWx0ICsgJz4nOworICB9LAorCisgIHJlY3Vyc2l2ZWx5Q29s
bGVjdDogZnVuY3Rpb24oZWxlbWVudCwgcHJvcGVydHkpIHsKKyAgICBlbGVtZW50ID0gJChlbGVt
ZW50KTsKKyAgICB2YXIgZWxlbWVudHMgPSBbXTsKKyAgICB3aGlsZSAoZWxlbWVudCA9IGVsZW1l
bnRbcHJvcGVydHldKQorICAgICAgaWYgKGVsZW1lbnQubm9kZVR5cGUgPT0gMSkKKyAgICAgICAg
ZWxlbWVudHMucHVzaChFbGVtZW50LmV4dGVuZChlbGVtZW50KSk7CisgICAgcmV0dXJuIGVsZW1l
bnRzOworICB9LAorCisgIGFuY2VzdG9yczogZnVuY3Rpb24oZWxlbWVudCkgeworICAgIHJldHVy
biAkKGVsZW1lbnQpLnJlY3Vyc2l2ZWx5Q29sbGVjdCgncGFyZW50Tm9kZScpOworICB9LAorCisg
IGRlc2NlbmRhbnRzOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgcmV0dXJuICRBKCQoZWxlbWVu
dCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKSk7CisgIH0sCisKKyAgaW1tZWRpYXRlRGVzY2Vu
ZGFudHM6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICBpZiAoIShlbGVtZW50ID0gJChlbGVtZW50
KS5maXJzdENoaWxkKSkgcmV0dXJuIFtdOworICAgIHdoaWxlIChlbGVtZW50ICYmIGVsZW1lbnQu
bm9kZVR5cGUgIT0gMSkgZWxlbWVudCA9IGVsZW1lbnQubmV4dFNpYmxpbmc7CisgICAgaWYgKGVs
ZW1lbnQpIHJldHVybiBbZWxlbWVudF0uY29uY2F0KCQoZWxlbWVudCkubmV4dFNpYmxpbmdzKCkp
OworICAgIHJldHVybiBbXTsKKyAgfSwKKworICBwcmV2aW91c1NpYmxpbmdzOiBmdW5jdGlvbihl
bGVtZW50KSB7CisgICAgcmV0dXJuICQoZWxlbWVudCkucmVjdXJzaXZlbHlDb2xsZWN0KCdwcmV2
aW91c1NpYmxpbmcnKTsKKyAgfSwKKworICBuZXh0U2libGluZ3M6IGZ1bmN0aW9uKGVsZW1lbnQp
IHsKKyAgICByZXR1cm4gJChlbGVtZW50KS5yZWN1cnNpdmVseUNvbGxlY3QoJ25leHRTaWJsaW5n
Jyk7CisgIH0sCisKKyAgc2libGluZ3M6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICBlbGVtZW50
ID0gJChlbGVtZW50KTsKKyAgICByZXR1cm4gZWxlbWVudC5wcmV2aW91c1NpYmxpbmdzKCkucmV2
ZXJzZSgpLmNvbmNhdChlbGVtZW50Lm5leHRTaWJsaW5ncygpKTsKKyAgfSwKKworICBtYXRjaDog
ZnVuY3Rpb24oZWxlbWVudCwgc2VsZWN0b3IpIHsKKyAgICBpZiAodHlwZW9mIHNlbGVjdG9yID09
ICdzdHJpbmcnKQorICAgICAgc2VsZWN0b3IgPSBuZXcgU2VsZWN0b3Ioc2VsZWN0b3IpOworICAg
IHJldHVybiBzZWxlY3Rvci5tYXRjaCgkKGVsZW1lbnQpKTsKKyAgfSwKKworICB1cDogZnVuY3Rp
b24oZWxlbWVudCwgZXhwcmVzc2lvbiwgaW5kZXgpIHsKKyAgICByZXR1cm4gU2VsZWN0b3IuZmlu
ZEVsZW1lbnQoJChlbGVtZW50KS5hbmNlc3RvcnMoKSwgZXhwcmVzc2lvbiwgaW5kZXgpOworICB9
LAorCisgIGRvd246IGZ1bmN0aW9uKGVsZW1lbnQsIGV4cHJlc3Npb24sIGluZGV4KSB7CisgICAg
cmV0dXJuIFNlbGVjdG9yLmZpbmRFbGVtZW50KCQoZWxlbWVudCkuZGVzY2VuZGFudHMoKSwgZXhw
cmVzc2lvbiwgaW5kZXgpOworICB9LAorCisgIHByZXZpb3VzOiBmdW5jdGlvbihlbGVtZW50LCBl
eHByZXNzaW9uLCBpbmRleCkgeworICAgIHJldHVybiBTZWxlY3Rvci5maW5kRWxlbWVudCgkKGVs
ZW1lbnQpLnByZXZpb3VzU2libGluZ3MoKSwgZXhwcmVzc2lvbiwgaW5kZXgpOworICB9LAorCisg
IG5leHQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGV4cHJlc3Npb24sIGluZGV4KSB7CisgICAgcmV0dXJu
IFNlbGVjdG9yLmZpbmRFbGVtZW50KCQoZWxlbWVudCkubmV4dFNpYmxpbmdzKCksIGV4cHJlc3Np
b24sIGluZGV4KTsKKyAgfSwKKworICBnZXRFbGVtZW50c0J5U2VsZWN0b3I6IGZ1bmN0aW9uKCkg
eworICAgIHZhciBhcmdzID0gJEEoYXJndW1lbnRzKSwgZWxlbWVudCA9ICQoYXJncy5zaGlmdCgp
KTsKKyAgICByZXR1cm4gU2VsZWN0b3IuZmluZENoaWxkRWxlbWVudHMoZWxlbWVudCwgYXJncyk7
CisgIH0sCisKKyAgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZTogZnVuY3Rpb24oZWxlbWVudCwgY2xh
c3NOYW1lKSB7CisgICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xh
c3NOYW1lLCBlbGVtZW50KTsKKyAgfSwKKworICByZWFkQXR0cmlidXRlOiBmdW5jdGlvbihlbGVt
ZW50LCBuYW1lKSB7CisgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisgICAgaWYgKGRvY3VtZW50
LmFsbCAmJiAhd2luZG93Lm9wZXJhKSB7CisgICAgICB2YXIgdCA9IEVsZW1lbnQuX2F0dHJpYnV0
ZVRyYW5zbGF0aW9uczsKKyAgICAgIGlmICh0LnZhbHVlc1tuYW1lXSkgcmV0dXJuIHQudmFsdWVz
W25hbWVdKGVsZW1lbnQsIG5hbWUpOworICAgICAgaWYgKHQubmFtZXNbbmFtZV0pICBuYW1lID0g
dC5uYW1lc1tuYW1lXTsKKyAgICAgIHZhciBhdHRyaWJ1dGUgPSBlbGVtZW50LmF0dHJpYnV0ZXNb
bmFtZV07CisgICAgICBpZihhdHRyaWJ1dGUpIHJldHVybiBhdHRyaWJ1dGUubm9kZVZhbHVlOwor
ICAgIH0KKyAgICByZXR1cm4gZWxlbWVudC5nZXRBdHRyaWJ1dGUobmFtZSk7CisgIH0sCisKKyAg
Z2V0SGVpZ2h0OiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgcmV0dXJuICQoZWxlbWVudCkuZ2V0
RGltZW5zaW9ucygpLmhlaWdodDsKKyAgfSwKKworICBnZXRXaWR0aDogZnVuY3Rpb24oZWxlbWVu
dCkgeworICAgIHJldHVybiAkKGVsZW1lbnQpLmdldERpbWVuc2lvbnMoKS53aWR0aDsKKyAgfSwK
KworICBjbGFzc05hbWVzOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgcmV0dXJuIG5ldyBFbGVt
ZW50LkNsYXNzTmFtZXMoZWxlbWVudCk7CisgIH0sCisKKyAgaGFzQ2xhc3NOYW1lOiBmdW5jdGlv
bihlbGVtZW50LCBjbGFzc05hbWUpIHsKKyAgICBpZiAoIShlbGVtZW50ID0gJChlbGVtZW50KSkp
IHJldHVybjsKKyAgICB2YXIgZWxlbWVudENsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1lOwor
ICAgIGlmIChlbGVtZW50Q2xhc3NOYW1lLmxlbmd0aCA9PSAwKSByZXR1cm4gZmFsc2U7CisgICAg
aWYgKGVsZW1lbnRDbGFzc05hbWUgPT0gY2xhc3NOYW1lIHx8CisgICAgICAgIGVsZW1lbnRDbGFz
c05hbWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58XFxzKSIgKyBjbGFzc05hbWUgKyAiKFxcc3wkKSIp
KSkKKyAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKKyAgfSwKKworICBhZGRD
bGFzc05hbWU6IGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSkgeworICAgIGlmICghKGVsZW1l
bnQgPSAkKGVsZW1lbnQpKSkgcmV0dXJuOworICAgIEVsZW1lbnQuY2xhc3NOYW1lcyhlbGVtZW50
KS5hZGQoY2xhc3NOYW1lKTsKKyAgICByZXR1cm4gZWxlbWVudDsKKyAgfSwKKworICByZW1vdmVD
bGFzc05hbWU6IGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSkgeworICAgIGlmICghKGVsZW1l
bnQgPSAkKGVsZW1lbnQpKSkgcmV0dXJuOworICAgIEVsZW1lbnQuY2xhc3NOYW1lcyhlbGVtZW50
KS5yZW1vdmUoY2xhc3NOYW1lKTsKKyAgICByZXR1cm4gZWxlbWVudDsKKyAgfSwKKworICB0b2dn
bGVDbGFzc05hbWU6IGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSkgeworICAgIGlmICghKGVs
ZW1lbnQgPSAkKGVsZW1lbnQpKSkgcmV0dXJuOworICAgIEVsZW1lbnQuY2xhc3NOYW1lcyhlbGVt
ZW50KVtlbGVtZW50Lmhhc0NsYXNzTmFtZShjbGFzc05hbWUpID8gJ3JlbW92ZScgOiAnYWRkJ10o
Y2xhc3NOYW1lKTsKKyAgICByZXR1cm4gZWxlbWVudDsKKyAgfSwKKworICBvYnNlcnZlOiBmdW5j
dGlvbigpIHsKKyAgICBFdmVudC5vYnNlcnZlLmFwcGx5KEV2ZW50LCBhcmd1bWVudHMpOworICAg
IHJldHVybiAkQShhcmd1bWVudHMpLmZpcnN0KCk7CisgIH0sCisKKyAgc3RvcE9ic2VydmluZzog
ZnVuY3Rpb24oKSB7CisgICAgRXZlbnQuc3RvcE9ic2VydmluZy5hcHBseShFdmVudCwgYXJndW1l
bnRzKTsKKyAgICByZXR1cm4gJEEoYXJndW1lbnRzKS5maXJzdCgpOworICB9LAorCisgIC8vIHJl
bW92ZXMgd2hpdGVzcGFjZS1vbmx5IHRleHQgbm9kZSBjaGlsZHJlbgorICBjbGVhbldoaXRlc3Bh
Y2U6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKyAgICB2
YXIgbm9kZSA9IGVsZW1lbnQuZmlyc3RDaGlsZDsKKyAgICB3aGlsZSAobm9kZSkgeworICAgICAg
dmFyIG5leHROb2RlID0gbm9kZS5uZXh0U2libGluZzsKKyAgICAgIGlmIChub2RlLm5vZGVUeXBl
ID09IDMgJiYgIS9cUy8udGVzdChub2RlLm5vZGVWYWx1ZSkpCisgICAgICAgIGVsZW1lbnQucmVt
b3ZlQ2hpbGQobm9kZSk7CisgICAgICBub2RlID0gbmV4dE5vZGU7CisgICAgfQorICAgIHJldHVy
biBlbGVtZW50OworICB9LAorCisgIGVtcHR5OiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgcmV0
dXJuICQoZWxlbWVudCkuaW5uZXJIVE1MLm1hdGNoKC9eXHMqJC8pOworICB9LAorCisgIGRlc2Nl
bmRhbnRPZjogZnVuY3Rpb24oZWxlbWVudCwgYW5jZXN0b3IpIHsKKyAgICBlbGVtZW50ID0gJChl
bGVtZW50KSwgYW5jZXN0b3IgPSAkKGFuY2VzdG9yKTsKKyAgICB3aGlsZSAoZWxlbWVudCA9IGVs
ZW1lbnQucGFyZW50Tm9kZSkKKyAgICAgIGlmIChlbGVtZW50ID09IGFuY2VzdG9yKSByZXR1cm4g
dHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0sCisKKyAgc2Nyb2xsVG86IGZ1bmN0aW9uKGVs
ZW1lbnQpIHsKKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKyAgICB2YXIgcG9zID0gUG9zaXRp
b24uY3VtdWxhdGl2ZU9mZnNldChlbGVtZW50KTsKKyAgICB3aW5kb3cuc2Nyb2xsVG8ocG9zWzBd
LCBwb3NbMV0pOworICAgIHJldHVybiBlbGVtZW50OworICB9LAorCisgIGdldFN0eWxlOiBmdW5j
dGlvbihlbGVtZW50LCBzdHlsZSkgeworICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOworICAgIGlm
IChbJ2Zsb2F0JywnY3NzRmxvYXQnXS5pbmNsdWRlKHN0eWxlKSkKKyAgICAgIHN0eWxlID0gKHR5
cGVvZiBlbGVtZW50LnN0eWxlLnN0eWxlRmxvYXQgIT0gJ3VuZGVmaW5lZCcgPyAnc3R5bGVGbG9h
dCcgOiAnY3NzRmxvYXQnKTsKKyAgICBzdHlsZSA9IHN0eWxlLmNhbWVsaXplKCk7CisgICAgdmFy
IHZhbHVlID0gZWxlbWVudC5zdHlsZVtzdHlsZV07CisgICAgaWYgKCF2YWx1ZSkgeworICAgICAg
aWYgKGRvY3VtZW50LmRlZmF1bHRWaWV3ICYmIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1
dGVkU3R5bGUpIHsKKyAgICAgICAgdmFyIGNzcyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENv
bXB1dGVkU3R5bGUoZWxlbWVudCwgbnVsbCk7CisgICAgICAgIHZhbHVlID0gY3NzID8gY3NzW3N0
eWxlXSA6IG51bGw7CisgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuY3VycmVudFN0eWxlKSB7Cisg
ICAgICAgIHZhbHVlID0gZWxlbWVudC5jdXJyZW50U3R5bGVbc3R5bGVdOworICAgICAgfQorICAg
IH0KKworICAgIGlmKCh2YWx1ZSA9PSAnYXV0bycpICYmIFsnd2lkdGgnLCdoZWlnaHQnXS5pbmNs
dWRlKHN0eWxlKSAmJiAoZWxlbWVudC5nZXRTdHlsZSgnZGlzcGxheScpICE9ICdub25lJykpCisg
ICAgICB2YWx1ZSA9IGVsZW1lbnRbJ29mZnNldCcrc3R5bGUuY2FwaXRhbGl6ZSgpXSArICdweCc7
CisKKyAgICBpZiAod2luZG93Lm9wZXJhICYmIFsnbGVmdCcsICd0b3AnLCAncmlnaHQnLCAnYm90
dG9tJ10uaW5jbHVkZShzdHlsZSkpCisgICAgICBpZiAoRWxlbWVudC5nZXRTdHlsZShlbGVtZW50
LCAncG9zaXRpb24nKSA9PSAnc3RhdGljJykgdmFsdWUgPSAnYXV0byc7CisgICAgaWYoc3R5bGUg
PT0gJ29wYWNpdHknKSB7CisgICAgICBpZih2YWx1ZSkgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUp
OworICAgICAgaWYodmFsdWUgPSAoZWxlbWVudC5nZXRTdHlsZSgnZmlsdGVyJykgfHwgJycpLm1h
dGNoKC9hbHBoYVwob3BhY2l0eT0oLiopXCkvKSkKKyAgICAgICAgaWYodmFsdWVbMV0pIHJldHVy
biBwYXJzZUZsb2F0KHZhbHVlWzFdKSAvIDEwMDsKKyAgICAgIHJldHVybiAxLjA7CisgICAgfQor
ICAgIHJldHVybiB2YWx1ZSA9PSAnYXV0bycgPyBudWxsIDogdmFsdWU7CisgIH0sCisKKyAgc2V0
U3R5bGU6IGZ1bmN0aW9uKGVsZW1lbnQsIHN0eWxlKSB7CisgICAgZWxlbWVudCA9ICQoZWxlbWVu
dCk7CisgICAgZm9yICh2YXIgbmFtZSBpbiBzdHlsZSkgeworICAgICAgdmFyIHZhbHVlID0gc3R5
bGVbbmFtZV07CisgICAgICBpZihuYW1lID09ICdvcGFjaXR5JykgeworICAgICAgICBpZiAodmFs
dWUgPT0gMSkgeworICAgICAgICAgIHZhbHVlID0gKC9HZWNrby8udGVzdChuYXZpZ2F0b3IudXNl
ckFnZW50KSAmJgorICAgICAgICAgICAgIS9Lb25xdWVyb3J8U2FmYXJpfEtIVE1MLy50ZXN0KG5h
dmlnYXRvci51c2VyQWdlbnQpKSA/IDAuOTk5OTk5IDogMS4wOworICAgICAgICAgIGlmKC9NU0lF
Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpICYmICF3aW5kb3cub3BlcmEpCisgICAgICAgICAg
ICBlbGVtZW50LnN0eWxlLmZpbHRlciA9IGVsZW1lbnQuZ2V0U3R5bGUoJ2ZpbHRlcicpLnJlcGxh
Y2UoL2FscGhhXChbXlwpXSpcKS9naSwnJyk7CisgICAgICAgIH0gZWxzZSBpZih2YWx1ZSA9PSAn
JykgeworICAgICAgICAgIGlmKC9NU0lFLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpICYmICF3
aW5kb3cub3BlcmEpCisgICAgICAgICAgICBlbGVtZW50LnN0eWxlLmZpbHRlciA9IGVsZW1lbnQu
Z2V0U3R5bGUoJ2ZpbHRlcicpLnJlcGxhY2UoL2FscGhhXChbXlwpXSpcKS9naSwnJyk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgaWYodmFsdWUgPCAwLjAwMDAxKSB2YWx1ZSA9IDA7Cisg
ICAgICAgICAgaWYoL01TSUUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgIXdpbmRvdy5v
cGVyYSkKKyAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUuZmlsdGVyID0gZWxlbWVudC5nZXRTdHls
ZSgnZmlsdGVyJykucmVwbGFjZSgvYWxwaGFcKFteXCldKlwpL2dpLCcnKSArCisgICAgICAgICAg
ICAgICdhbHBoYShvcGFjaXR5PScrdmFsdWUqMTAwKycpJzsKKyAgICAgICAgfQorICAgICAgfSBl
bHNlIGlmKFsnZmxvYXQnLCdjc3NGbG9hdCddLmluY2x1ZGUobmFtZSkpIG5hbWUgPSAodHlwZW9m
IGVsZW1lbnQuc3R5bGUuc3R5bGVGbG9hdCAhPSAndW5kZWZpbmVkJykgPyAnc3R5bGVGbG9hdCcg
OiAnY3NzRmxvYXQnOworICAgICAgZWxlbWVudC5zdHlsZVtuYW1lLmNhbWVsaXplKCldID0gdmFs
dWU7CisgICAgfQorICAgIHJldHVybiBlbGVtZW50OworICB9LAorCisgIGdldERpbWVuc2lvbnM6
IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKyAgICB2YXIg
ZGlzcGxheSA9ICQoZWxlbWVudCkuZ2V0U3R5bGUoJ2Rpc3BsYXknKTsKKyAgICBpZiAoZGlzcGxh
eSAhPSAnbm9uZScgJiYgZGlzcGxheSAhPSBudWxsKSAvLyBTYWZhcmkgYnVnCisgICAgICByZXR1
cm4ge3dpZHRoOiBlbGVtZW50Lm9mZnNldFdpZHRoLCBoZWlnaHQ6IGVsZW1lbnQub2Zmc2V0SGVp
Z2h0fTsKKworICAgIC8vIEFsbCAqV2lkdGggYW5kICpIZWlnaHQgcHJvcGVydGllcyBnaXZlIDAg
b24gZWxlbWVudHMgd2l0aCBkaXNwbGF5IG5vbmUsCisgICAgLy8gc28gZW5hYmxlIHRoZSBlbGVt
ZW50IHRlbXBvcmFyaWx5CisgICAgdmFyIGVscyA9IGVsZW1lbnQuc3R5bGU7CisgICAgdmFyIG9y
aWdpbmFsVmlzaWJpbGl0eSA9IGVscy52aXNpYmlsaXR5OworICAgIHZhciBvcmlnaW5hbFBvc2l0
aW9uID0gZWxzLnBvc2l0aW9uOworICAgIHZhciBvcmlnaW5hbERpc3BsYXkgPSBlbHMuZGlzcGxh
eTsKKyAgICBlbHMudmlzaWJpbGl0eSA9ICdoaWRkZW4nOworICAgIGVscy5wb3NpdGlvbiA9ICdh
YnNvbHV0ZSc7CisgICAgZWxzLmRpc3BsYXkgPSAnYmxvY2snOworICAgIHZhciBvcmlnaW5hbFdp
ZHRoID0gZWxlbWVudC5jbGllbnRXaWR0aDsKKyAgICB2YXIgb3JpZ2luYWxIZWlnaHQgPSBlbGVt
ZW50LmNsaWVudEhlaWdodDsKKyAgICBlbHMuZGlzcGxheSA9IG9yaWdpbmFsRGlzcGxheTsKKyAg
ICBlbHMucG9zaXRpb24gPSBvcmlnaW5hbFBvc2l0aW9uOworICAgIGVscy52aXNpYmlsaXR5ID0g
b3JpZ2luYWxWaXNpYmlsaXR5OworICAgIHJldHVybiB7d2lkdGg6IG9yaWdpbmFsV2lkdGgsIGhl
aWdodDogb3JpZ2luYWxIZWlnaHR9OworICB9LAorCisgIG1ha2VQb3NpdGlvbmVkOiBmdW5jdGlv
bihlbGVtZW50KSB7CisgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisgICAgdmFyIHBvcyA9IEVs
ZW1lbnQuZ2V0U3R5bGUoZWxlbWVudCwgJ3Bvc2l0aW9uJyk7CisgICAgaWYgKHBvcyA9PSAnc3Rh
dGljJyB8fCAhcG9zKSB7CisgICAgICBlbGVtZW50Ll9tYWRlUG9zaXRpb25lZCA9IHRydWU7Cisg
ICAgICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJzsKKyAgICAgIC8vIE9wZXJh
IHJldHVybnMgdGhlIG9mZnNldCByZWxhdGl2ZSB0byB0aGUgcG9zaXRpb25pbmcgY29udGV4dCwg
d2hlbiBhbgorICAgICAgLy8gZWxlbWVudCBpcyBwb3NpdGlvbiByZWxhdGl2ZSBidXQgdG9wIGFu
ZCBsZWZ0IGhhdmUgbm90IGJlZW4gZGVmaW5lZAorICAgICAgaWYgKHdpbmRvdy5vcGVyYSkgewor
ICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IDA7CisgICAgICAgIGVsZW1lbnQuc3R5bGUubGVm
dCA9IDA7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBlbGVtZW50OworICB9LAorCisgIHVu
ZG9Qb3NpdGlvbmVkOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgZWxlbWVudCA9ICQoZWxlbWVu
dCk7CisgICAgaWYgKGVsZW1lbnQuX21hZGVQb3NpdGlvbmVkKSB7CisgICAgICBlbGVtZW50Ll9t
YWRlUG9zaXRpb25lZCA9IHVuZGVmaW5lZDsKKyAgICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24g
PQorICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9CisgICAgICAgIGVsZW1lbnQuc3R5bGUubGVm
dCA9CisgICAgICAgIGVsZW1lbnQuc3R5bGUuYm90dG9tID0KKyAgICAgICAgZWxlbWVudC5zdHls
ZS5yaWdodCA9ICcnOworICAgIH0KKyAgICByZXR1cm4gZWxlbWVudDsKKyAgfSwKKworICBtYWtl
Q2xpcHBpbmc6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsK
KyAgICBpZiAoZWxlbWVudC5fb3ZlcmZsb3cpIHJldHVybiBlbGVtZW50OworICAgIGVsZW1lbnQu
X292ZXJmbG93ID0gZWxlbWVudC5zdHlsZS5vdmVyZmxvdyB8fCAnYXV0byc7CisgICAgaWYgKChF
bGVtZW50LmdldFN0eWxlKGVsZW1lbnQsICdvdmVyZmxvdycpIHx8ICd2aXNpYmxlJykgIT0gJ2hp
ZGRlbicpCisgICAgICBlbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7CisgICAgcmV0
dXJuIGVsZW1lbnQ7CisgIH0sCisKKyAgdW5kb0NsaXBwaW5nOiBmdW5jdGlvbihlbGVtZW50KSB7
CisgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisgICAgaWYgKCFlbGVtZW50Ll9vdmVyZmxvdykg
cmV0dXJuIGVsZW1lbnQ7CisgICAgZWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9IGVsZW1lbnQuX292
ZXJmbG93ID09ICdhdXRvJyA/ICcnIDogZWxlbWVudC5fb3ZlcmZsb3c7CisgICAgZWxlbWVudC5f
b3ZlcmZsb3cgPSBudWxsOworICAgIHJldHVybiBlbGVtZW50OworICB9Cit9OworCitPYmplY3Qu
ZXh0ZW5kKEVsZW1lbnQuTWV0aG9kcywge2NoaWxkT2Y6IEVsZW1lbnQuTWV0aG9kcy5kZXNjZW5k
YW50T2Z9KTsKKworRWxlbWVudC5fYXR0cmlidXRlVHJhbnNsYXRpb25zID0ge307CisKK0VsZW1l
bnQuX2F0dHJpYnV0ZVRyYW5zbGF0aW9ucy5uYW1lcyA9IHsKKyAgY29sc3BhbjogICAiY29sU3Bh
biIsCisgIHJvd3NwYW46ICAgInJvd1NwYW4iLAorICB2YWxpZ246ICAgICJ2QWxpZ24iLAorICBk
YXRldGltZTogICJkYXRlVGltZSIsCisgIGFjY2Vzc2tleTogImFjY2Vzc0tleSIsCisgIHRhYmlu
ZGV4OiAgInRhYkluZGV4IiwKKyAgZW5jdHlwZTogICAiZW5jVHlwZSIsCisgIG1heGxlbmd0aDog
Im1heExlbmd0aCIsCisgIHJlYWRvbmx5OiAgInJlYWRPbmx5IiwKKyAgbG9uZ2Rlc2M6ICAibG9u
Z0Rlc2MiCit9OworCitFbGVtZW50Ll9hdHRyaWJ1dGVUcmFuc2xhdGlvbnMudmFsdWVzID0gewor
ICBfZ2V0QXR0cjogZnVuY3Rpb24oZWxlbWVudCwgYXR0cmlidXRlKSB7CisgICAgcmV0dXJuIGVs
ZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgMik7CisgIH0sCisKKyAgX2ZsYWc6IGZ1bmN0
aW9uKGVsZW1lbnQsIGF0dHJpYnV0ZSkgeworICAgIHJldHVybiAkKGVsZW1lbnQpLmhhc0F0dHJp
YnV0ZShhdHRyaWJ1dGUpID8gYXR0cmlidXRlIDogbnVsbDsKKyAgfSwKKworICBzdHlsZTogZnVu
Y3Rpb24oZWxlbWVudCkgeworICAgIHJldHVybiBlbGVtZW50LnN0eWxlLmNzc1RleHQudG9Mb3dl
ckNhc2UoKTsKKyAgfSwKKworICB0aXRsZTogZnVuY3Rpb24oZWxlbWVudCkgeworICAgIHZhciBu
b2RlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlKCd0aXRsZScpOworICAgIHJldHVybiBub2Rl
LnNwZWNpZmllZCA/IG5vZGUubm9kZVZhbHVlIDogbnVsbDsKKyAgfQorfTsKKworT2JqZWN0LmV4
dGVuZChFbGVtZW50Ll9hdHRyaWJ1dGVUcmFuc2xhdGlvbnMudmFsdWVzLCB7CisgIGhyZWY6IEVs
ZW1lbnQuX2F0dHJpYnV0ZVRyYW5zbGF0aW9ucy52YWx1ZXMuX2dldEF0dHIsCisgIHNyYzogIEVs
ZW1lbnQuX2F0dHJpYnV0ZVRyYW5zbGF0aW9ucy52YWx1ZXMuX2dldEF0dHIsCisgIGRpc2FibGVk
OiBFbGVtZW50Ll9hdHRyaWJ1dGVUcmFuc2xhdGlvbnMudmFsdWVzLl9mbGFnLAorICBjaGVja2Vk
OiAgRWxlbWVudC5fYXR0cmlidXRlVHJhbnNsYXRpb25zLnZhbHVlcy5fZmxhZywKKyAgcmVhZG9u
bHk6IEVsZW1lbnQuX2F0dHJpYnV0ZVRyYW5zbGF0aW9ucy52YWx1ZXMuX2ZsYWcsCisgIG11bHRp
cGxlOiBFbGVtZW50Ll9hdHRyaWJ1dGVUcmFuc2xhdGlvbnMudmFsdWVzLl9mbGFnCit9KTsKKwor
RWxlbWVudC5NZXRob2RzLlNpbXVsYXRlZCA9IHsKKyAgaGFzQXR0cmlidXRlOiBmdW5jdGlvbihl
bGVtZW50LCBhdHRyaWJ1dGUpIHsKKyAgICB2YXIgdCA9IEVsZW1lbnQuX2F0dHJpYnV0ZVRyYW5z
bGF0aW9uczsKKyAgICBhdHRyaWJ1dGUgPSB0Lm5hbWVzW2F0dHJpYnV0ZV0gfHwgYXR0cmlidXRl
OworICAgIHJldHVybiAkKGVsZW1lbnQpLmdldEF0dHJpYnV0ZU5vZGUoYXR0cmlidXRlKS5zcGVj
aWZpZWQ7CisgIH0KK307CisKKy8vIElFIGlzIG1pc3NpbmcgLmlubmVySFRNTCBzdXBwb3J0IGZv
ciBUQUJMRS1yZWxhdGVkIGVsZW1lbnRzCitpZiAoZG9jdW1lbnQuYWxsICYmICF3aW5kb3cub3Bl
cmEpeworICBFbGVtZW50Lk1ldGhvZHMudXBkYXRlID0gZnVuY3Rpb24oZWxlbWVudCwgaHRtbCkg
eworICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOworICAgIGh0bWwgPSB0eXBlb2YgaHRtbCA9PSAn
dW5kZWZpbmVkJyA/ICcnIDogaHRtbC50b1N0cmluZygpOworICAgIHZhciB0YWdOYW1lID0gZWxl
bWVudC50YWdOYW1lLnRvVXBwZXJDYXNlKCk7CisgICAgaWYgKFsnVEhFQUQnLCdUQk9EWScsJ1RS
JywnVEQnXS5pbmNsdWRlKHRhZ05hbWUpKSB7CisgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICBzd2l0Y2ggKHRhZ05hbWUpIHsKKyAgICAgICAgY2Fz
ZSAnVEhFQUQnOgorICAgICAgICBjYXNlICdUQk9EWSc6CisgICAgICAgICAgZGl2LmlubmVySFRN
TCA9ICc8dGFibGU+PHRib2R5PicgKyAgaHRtbC5zdHJpcFNjcmlwdHMoKSArICc8L3Rib2R5Pjwv
dGFibGU+JzsKKyAgICAgICAgICBkZXB0aCA9IDI7CisgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgJ1RSJzoKKyAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gJzx0YWJsZT48dGJvZHk+PHRy
PicgKyAgaHRtbC5zdHJpcFNjcmlwdHMoKSArICc8L3RyPjwvdGJvZHk+PC90YWJsZT4nOworICAg
ICAgICAgIGRlcHRoID0gMzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnVEQnOgor
ICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSAnPHRhYmxlPjx0Ym9keT48dHI+PHRkPicgKyAgaHRt
bC5zdHJpcFNjcmlwdHMoKSArICc8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPic7CisgICAgICAg
ICAgZGVwdGggPSA0OworICAgICAgfQorICAgICAgJEEoZWxlbWVudC5jaGlsZE5vZGVzKS5lYWNo
KGZ1bmN0aW9uKG5vZGUpeworICAgICAgICBlbGVtZW50LnJlbW92ZUNoaWxkKG5vZGUpCisgICAg
ICB9KTsKKyAgICAgIGRlcHRoLnRpbWVzKGZ1bmN0aW9uKCl7IGRpdiA9IGRpdi5maXJzdENoaWxk
IH0pOworCisgICAgICAkQShkaXYuY2hpbGROb2RlcykuZWFjaCgKKyAgICAgICAgZnVuY3Rpb24o
bm9kZSl7IGVsZW1lbnQuYXBwZW5kQ2hpbGQobm9kZSkgfSk7CisgICAgfSBlbHNlIHsKKyAgICAg
IGVsZW1lbnQuaW5uZXJIVE1MID0gaHRtbC5zdHJpcFNjcmlwdHMoKTsKKyAgICB9CisgICAgc2V0
VGltZW91dChmdW5jdGlvbigpIHtodG1sLmV2YWxTY3JpcHRzKCl9LCAxMCk7CisgICAgcmV0dXJu
IGVsZW1lbnQ7CisgIH0KK307CisKK09iamVjdC5leHRlbmQoRWxlbWVudCwgRWxlbWVudC5NZXRo
b2RzKTsKKwordmFyIF9uYXRpdmVFeHRlbnNpb25zID0gZmFsc2U7CisKK2lmKC9Lb25xdWVyb3J8
U2FmYXJpfEtIVE1MLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKQorICBbJycsICdGb3JtJywg
J0lucHV0JywgJ1RleHRBcmVhJywgJ1NlbGVjdCddLmVhY2goZnVuY3Rpb24odGFnKSB7CisgICAg
dmFyIGNsYXNzTmFtZSA9ICdIVE1MJyArIHRhZyArICdFbGVtZW50JzsKKyAgICBpZih3aW5kb3db
Y2xhc3NOYW1lXSkgcmV0dXJuOworICAgIHZhciBrbGFzcyA9IHdpbmRvd1tjbGFzc05hbWVdID0g
e307CisgICAga2xhc3MucHJvdG90eXBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcgPyB0
YWcudG9Mb3dlckNhc2UoKSA6ICdkaXYnKS5fX3Byb3RvX187CisgIH0pOworCitFbGVtZW50LmFk
ZE1ldGhvZHMgPSBmdW5jdGlvbihtZXRob2RzKSB7CisgIE9iamVjdC5leHRlbmQoRWxlbWVudC5N
ZXRob2RzLCBtZXRob2RzIHx8IHt9KTsKKworICBmdW5jdGlvbiBjb3B5KG1ldGhvZHMsIGRlc3Rp
bmF0aW9uLCBvbmx5SWZBYnNlbnQpIHsKKyAgICBvbmx5SWZBYnNlbnQgPSBvbmx5SWZBYnNlbnQg
fHwgZmFsc2U7CisgICAgdmFyIGNhY2hlID0gRWxlbWVudC5leHRlbmQuY2FjaGU7CisgICAgZm9y
ICh2YXIgcHJvcGVydHkgaW4gbWV0aG9kcykgeworICAgICAgdmFyIHZhbHVlID0gbWV0aG9kc1tw
cm9wZXJ0eV07CisgICAgICBpZiAoIW9ubHlJZkFic2VudCB8fCAhKHByb3BlcnR5IGluIGRlc3Rp
bmF0aW9uKSkKKyAgICAgICAgZGVzdGluYXRpb25bcHJvcGVydHldID0gY2FjaGUuZmluZE9yU3Rv
cmUodmFsdWUpOworICAgIH0KKyAgfQorCisgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT0gJ3Vu
ZGVmaW5lZCcpIHsKKyAgICBjb3B5KEVsZW1lbnQuTWV0aG9kcywgSFRNTEVsZW1lbnQucHJvdG90
eXBlKTsKKyAgICBjb3B5KEVsZW1lbnQuTWV0aG9kcy5TaW11bGF0ZWQsIEhUTUxFbGVtZW50LnBy
b3RvdHlwZSwgdHJ1ZSk7CisgICAgY29weShGb3JtLk1ldGhvZHMsIEhUTUxGb3JtRWxlbWVudC5w
cm90b3R5cGUpOworICAgIFtIVE1MSW5wdXRFbGVtZW50LCBIVE1MVGV4dEFyZWFFbGVtZW50LCBI
VE1MU2VsZWN0RWxlbWVudF0uZWFjaChmdW5jdGlvbihrbGFzcykgeworICAgICAgY29weShGb3Jt
LkVsZW1lbnQuTWV0aG9kcywga2xhc3MucHJvdG90eXBlKTsKKyAgICB9KTsKKyAgICBfbmF0aXZl
RXh0ZW5zaW9ucyA9IHRydWU7CisgIH0KK30KKwordmFyIFRvZ2dsZSA9IG5ldyBPYmplY3QoKTsK
K1RvZ2dsZS5kaXNwbGF5ID0gRWxlbWVudC50b2dnbGU7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LworCitBYnN0cmFjdC5JbnNlcnRpb24gPSBmdW5jdGlvbihhZGphY2VuY3kpIHsKKyAgdGhpcy5h
ZGphY2VuY3kgPSBhZGphY2VuY3k7Cit9CisKK0Fic3RyYWN0Lkluc2VydGlvbi5wcm90b3R5cGUg
PSB7CisgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbnRlbnQpIHsKKyAgICB0aGlz
LmVsZW1lbnQgPSAkKGVsZW1lbnQpOworICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQuc3RyaXBT
Y3JpcHRzKCk7CisKKyAgICBpZiAodGhpcy5hZGphY2VuY3kgJiYgdGhpcy5lbGVtZW50Lmluc2Vy
dEFkamFjZW50SFRNTCkgeworICAgICAgdHJ5IHsKKyAgICAgICAgdGhpcy5lbGVtZW50Lmluc2Vy
dEFkamFjZW50SFRNTCh0aGlzLmFkamFjZW5jeSwgdGhpcy5jb250ZW50KTsKKyAgICAgIH0gY2F0
Y2ggKGUpIHsKKyAgICAgICAgdmFyIHRhZ05hbWUgPSB0aGlzLmVsZW1lbnQudGFnTmFtZS50b1Vw
cGVyQ2FzZSgpOworICAgICAgICBpZiAoWydUQk9EWScsICdUUiddLmluY2x1ZGUodGFnTmFtZSkp
IHsKKyAgICAgICAgICB0aGlzLmluc2VydENvbnRlbnQodGhpcy5jb250ZW50RnJvbUFub255bW91
c1RhYmxlKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHRocm93IGU7CisgICAgICAg
IH0KKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgdGhpcy5yYW5nZSA9IHRoaXMuZWxlbWVu
dC5vd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CisgICAgICBpZiAodGhpcy5pbml0aWFsaXpl
UmFuZ2UpIHRoaXMuaW5pdGlhbGl6ZVJhbmdlKCk7CisgICAgICB0aGlzLmluc2VydENvbnRlbnQo
W3RoaXMucmFuZ2UuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KHRoaXMuY29udGVudCldKTsKKyAg
ICB9CisKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge2NvbnRlbnQuZXZhbFNjcmlwdHMoKX0s
IDEwKTsKKyAgfSwKKworICBjb250ZW50RnJvbUFub255bW91c1RhYmxlOiBmdW5jdGlvbigpIHsK
KyAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgZGl2Lmlu
bmVySFRNTCA9ICc8dGFibGU+PHRib2R5PicgKyB0aGlzLmNvbnRlbnQgKyAnPC90Ym9keT48L3Rh
YmxlPic7CisgICAgcmV0dXJuICRBKGRpdi5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF0uY2hp
bGROb2Rlcyk7CisgIH0KK30KKwordmFyIEluc2VydGlvbiA9IG5ldyBPYmplY3QoKTsKKworSW5z
ZXJ0aW9uLkJlZm9yZSA9IENsYXNzLmNyZWF0ZSgpOworSW5zZXJ0aW9uLkJlZm9yZS5wcm90b3R5
cGUgPSBPYmplY3QuZXh0ZW5kKG5ldyBBYnN0cmFjdC5JbnNlcnRpb24oJ2JlZm9yZUJlZ2luJyks
IHsKKyAgaW5pdGlhbGl6ZVJhbmdlOiBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnJhbmdlLnNldFN0
YXJ0QmVmb3JlKHRoaXMuZWxlbWVudCk7CisgIH0sCisKKyAgaW5zZXJ0Q29udGVudDogZnVuY3Rp
b24oZnJhZ21lbnRzKSB7CisgICAgZnJhZ21lbnRzLmVhY2goKGZ1bmN0aW9uKGZyYWdtZW50KSB7
CisgICAgICB0aGlzLmVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZnJhZ21lbnQsIHRo
aXMuZWxlbWVudCk7CisgICAgfSkuYmluZCh0aGlzKSk7CisgIH0KK30pOworCitJbnNlcnRpb24u
VG9wID0gQ2xhc3MuY3JlYXRlKCk7CitJbnNlcnRpb24uVG9wLnByb3RvdHlwZSA9IE9iamVjdC5l
eHRlbmQobmV3IEFic3RyYWN0Lkluc2VydGlvbignYWZ0ZXJCZWdpbicpLCB7CisgIGluaXRpYWxp
emVSYW5nZTogZnVuY3Rpb24oKSB7CisgICAgdGhpcy5yYW5nZS5zZWxlY3ROb2RlQ29udGVudHMo
dGhpcy5lbGVtZW50KTsKKyAgICB0aGlzLnJhbmdlLmNvbGxhcHNlKHRydWUpOworICB9LAorCisg
IGluc2VydENvbnRlbnQ6IGZ1bmN0aW9uKGZyYWdtZW50cykgeworICAgIGZyYWdtZW50cy5yZXZl
cnNlKGZhbHNlKS5lYWNoKChmdW5jdGlvbihmcmFnbWVudCkgeworICAgICAgdGhpcy5lbGVtZW50
Lmluc2VydEJlZm9yZShmcmFnbWVudCwgdGhpcy5lbGVtZW50LmZpcnN0Q2hpbGQpOworICAgIH0p
LmJpbmQodGhpcykpOworICB9Cit9KTsKKworSW5zZXJ0aW9uLkJvdHRvbSA9IENsYXNzLmNyZWF0
ZSgpOworSW5zZXJ0aW9uLkJvdHRvbS5wcm90b3R5cGUgPSBPYmplY3QuZXh0ZW5kKG5ldyBBYnN0
cmFjdC5JbnNlcnRpb24oJ2JlZm9yZUVuZCcpLCB7CisgIGluaXRpYWxpemVSYW5nZTogZnVuY3Rp
b24oKSB7CisgICAgdGhpcy5yYW5nZS5zZWxlY3ROb2RlQ29udGVudHModGhpcy5lbGVtZW50KTsK
KyAgICB0aGlzLnJhbmdlLmNvbGxhcHNlKHRoaXMuZWxlbWVudCk7CisgIH0sCisKKyAgaW5zZXJ0
Q29udGVudDogZnVuY3Rpb24oZnJhZ21lbnRzKSB7CisgICAgZnJhZ21lbnRzLmVhY2goKGZ1bmN0
aW9uKGZyYWdtZW50KSB7CisgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoZnJhZ21lbnQp
OworICAgIH0pLmJpbmQodGhpcykpOworICB9Cit9KTsKKworSW5zZXJ0aW9uLkFmdGVyID0gQ2xh
c3MuY3JlYXRlKCk7CitJbnNlcnRpb24uQWZ0ZXIucHJvdG90eXBlID0gT2JqZWN0LmV4dGVuZChu
ZXcgQWJzdHJhY3QuSW5zZXJ0aW9uKCdhZnRlckVuZCcpLCB7CisgIGluaXRpYWxpemVSYW5nZTog
ZnVuY3Rpb24oKSB7CisgICAgdGhpcy5yYW5nZS5zZXRTdGFydEFmdGVyKHRoaXMuZWxlbWVudCk7
CisgIH0sCisKKyAgaW5zZXJ0Q29udGVudDogZnVuY3Rpb24oZnJhZ21lbnRzKSB7CisgICAgZnJh
Z21lbnRzLmVhY2goKGZ1bmN0aW9uKGZyYWdtZW50KSB7CisgICAgICB0aGlzLmVsZW1lbnQucGFy
ZW50Tm9kZS5pbnNlcnRCZWZvcmUoZnJhZ21lbnQsCisgICAgICAgIHRoaXMuZWxlbWVudC5uZXh0
U2libGluZyk7CisgICAgfSkuYmluZCh0aGlzKSk7CisgIH0KK30pOworCisvKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KKworRWxlbWVudC5DbGFzc05hbWVzID0gQ2xhc3MuY3JlYXRlKCk7CitFbGVtZW50
LkNsYXNzTmFtZXMucHJvdG90eXBlID0geworICBpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50
KSB7CisgICAgdGhpcy5lbGVtZW50ID0gJChlbGVtZW50KTsKKyAgfSwKKworICBfZWFjaDogZnVu
Y3Rpb24oaXRlcmF0b3IpIHsKKyAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lLnNwbGl0KC9ccysv
KS5zZWxlY3QoZnVuY3Rpb24obmFtZSkgeworICAgICAgcmV0dXJuIG5hbWUubGVuZ3RoID4gMDsK
KyAgICB9KS5fZWFjaChpdGVyYXRvcik7CisgIH0sCisKKyAgc2V0OiBmdW5jdGlvbihjbGFzc05h
bWUpIHsKKyAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gY2xhc3NOYW1lOworICB9LAorCisg
IGFkZDogZnVuY3Rpb24oY2xhc3NOYW1lVG9BZGQpIHsKKyAgICBpZiAodGhpcy5pbmNsdWRlKGNs
YXNzTmFtZVRvQWRkKSkgcmV0dXJuOworICAgIHRoaXMuc2V0KCRBKHRoaXMpLmNvbmNhdChjbGFz
c05hbWVUb0FkZCkuam9pbignICcpKTsKKyAgfSwKKworICByZW1vdmU6IGZ1bmN0aW9uKGNsYXNz
TmFtZVRvUmVtb3ZlKSB7CisgICAgaWYgKCF0aGlzLmluY2x1ZGUoY2xhc3NOYW1lVG9SZW1vdmUp
KSByZXR1cm47CisgICAgdGhpcy5zZXQoJEEodGhpcykud2l0aG91dChjbGFzc05hbWVUb1JlbW92
ZSkuam9pbignICcpKTsKKyAgfSwKKworICB0b1N0cmluZzogZnVuY3Rpb24oKSB7CisgICAgcmV0
dXJuICRBKHRoaXMpLmpvaW4oJyAnKTsKKyAgfQorfTsKKworT2JqZWN0LmV4dGVuZChFbGVtZW50
LkNsYXNzTmFtZXMucHJvdG90eXBlLCBFbnVtZXJhYmxlKTsKK3ZhciBTZWxlY3RvciA9IENsYXNz
LmNyZWF0ZSgpOworU2VsZWN0b3IucHJvdG90eXBlID0geworICBpbml0aWFsaXplOiBmdW5jdGlv
bihleHByZXNzaW9uKSB7CisgICAgdGhpcy5wYXJhbXMgPSB7Y2xhc3NOYW1lczogW119OworICAg
IHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24udG9TdHJpbmcoKS5zdHJpcCgpOworICAgIHRo
aXMucGFyc2VFeHByZXNzaW9uKCk7CisgICAgdGhpcy5jb21waWxlTWF0Y2hlcigpOworICB9LAor
CisgIHBhcnNlRXhwcmVzc2lvbjogZnVuY3Rpb24oKSB7CisgICAgZnVuY3Rpb24gYWJvcnQobWVz
c2FnZSkgeyB0aHJvdyAnUGFyc2UgZXJyb3IgaW4gc2VsZWN0b3I6ICcgKyBtZXNzYWdlOyB9CisK
KyAgICBpZiAodGhpcy5leHByZXNzaW9uID09ICcnKSAgYWJvcnQoJ2VtcHR5IGV4cHJlc3Npb24n
KTsKKworICAgIHZhciBwYXJhbXMgPSB0aGlzLnBhcmFtcywgZXhwciA9IHRoaXMuZXhwcmVzc2lv
biwgbWF0Y2gsIG1vZGlmaWVyLCBjbGF1c2UsIHJlc3Q7CisgICAgd2hpbGUgKG1hdGNoID0gZXhw
ci5tYXRjaCgvXiguKilcWyhbYS16MC05XzotXSs/KSg/Oihbflx8IV0/PSkoPzoiKFteIl0qKSJ8
KFteXF1cc10qKSkpP1xdJC9pKSkgeworICAgICAgcGFyYW1zLmF0dHJpYnV0ZXMgPSBwYXJhbXMu
YXR0cmlidXRlcyB8fCBbXTsKKyAgICAgIHBhcmFtcy5hdHRyaWJ1dGVzLnB1c2goe25hbWU6IG1h
dGNoWzJdLCBvcGVyYXRvcjogbWF0Y2hbM10sIHZhbHVlOiBtYXRjaFs0XSB8fCBtYXRjaFs1XSB8
fCAnJ30pOworICAgICAgZXhwciA9IG1hdGNoWzFdOworICAgIH0KKworICAgIGlmIChleHByID09
ICcqJykgcmV0dXJuIHRoaXMucGFyYW1zLndpbGRjYXJkID0gdHJ1ZTsKKworICAgIHdoaWxlICht
YXRjaCA9IGV4cHIubWF0Y2goL14oW15hLXowLTlfLV0pPyhbYS16MC05Xy1dKykoLiopL2kpKSB7
CisgICAgICBtb2RpZmllciA9IG1hdGNoWzFdLCBjbGF1c2UgPSBtYXRjaFsyXSwgcmVzdCA9IG1h
dGNoWzNdOworICAgICAgc3dpdGNoIChtb2RpZmllcikgeworICAgICAgICBjYXNlICcjJzogICAg
ICAgcGFyYW1zLmlkID0gY2xhdXNlOyBicmVhazsKKyAgICAgICAgY2FzZSAnLic6ICAgICAgIHBh
cmFtcy5jbGFzc05hbWVzLnB1c2goY2xhdXNlKTsgYnJlYWs7CisgICAgICAgIGNhc2UgJyc6Cisg
ICAgICAgIGNhc2UgdW5kZWZpbmVkOiBwYXJhbXMudGFnTmFtZSA9IGNsYXVzZS50b1VwcGVyQ2Fz
ZSgpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogICAgICAgIGFib3J0KGV4cHIuaW5zcGVjdCgp
KTsKKyAgICAgIH0KKyAgICAgIGV4cHIgPSByZXN0OworICAgIH0KKworICAgIGlmIChleHByLmxl
bmd0aCA+IDApIGFib3J0KGV4cHIuaW5zcGVjdCgpKTsKKyAgfSwKKworICBidWlsZE1hdGNoRXhw
cmVzc2lvbjogZnVuY3Rpb24oKSB7CisgICAgdmFyIHBhcmFtcyA9IHRoaXMucGFyYW1zLCBjb25k
aXRpb25zID0gW10sIGNsYXVzZTsKKworICAgIGlmIChwYXJhbXMud2lsZGNhcmQpCisgICAgICBj
b25kaXRpb25zLnB1c2goJ3RydWUnKTsKKyAgICBpZiAoY2xhdXNlID0gcGFyYW1zLmlkKQorICAg
ICAgY29uZGl0aW9ucy5wdXNoKCdlbGVtZW50LnJlYWRBdHRyaWJ1dGUoImlkIikgPT0gJyArIGNs
YXVzZS5pbnNwZWN0KCkpOworICAgIGlmIChjbGF1c2UgPSBwYXJhbXMudGFnTmFtZSkKKyAgICAg
IGNvbmRpdGlvbnMucHVzaCgnZWxlbWVudC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT0gJyArIGNs
YXVzZS5pbnNwZWN0KCkpOworICAgIGlmICgoY2xhdXNlID0gcGFyYW1zLmNsYXNzTmFtZXMpLmxl
bmd0aCA+IDApCisgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gY2xhdXNlLmxlbmd0aDsg
aSA8IGxlbmd0aDsgaSsrKQorICAgICAgICBjb25kaXRpb25zLnB1c2goJ2VsZW1lbnQuaGFzQ2xh
c3NOYW1lKCcgKyBjbGF1c2VbaV0uaW5zcGVjdCgpICsgJyknKTsKKyAgICBpZiAoY2xhdXNlID0g
cGFyYW1zLmF0dHJpYnV0ZXMpIHsKKyAgICAgIGNsYXVzZS5lYWNoKGZ1bmN0aW9uKGF0dHJpYnV0
ZSkgeworICAgICAgICB2YXIgdmFsdWUgPSAnZWxlbWVudC5yZWFkQXR0cmlidXRlKCcgKyBhdHRy
aWJ1dGUubmFtZS5pbnNwZWN0KCkgKyAnKSc7CisgICAgICAgIHZhciBzcGxpdFZhbHVlQnkgPSBm
dW5jdGlvbihkZWxpbWl0ZXIpIHsKKyAgICAgICAgICByZXR1cm4gdmFsdWUgKyAnICYmICcgKyB2
YWx1ZSArICcuc3BsaXQoJyArIGRlbGltaXRlci5pbnNwZWN0KCkgKyAnKSc7CisgICAgICAgIH0K
KworICAgICAgICBzd2l0Y2ggKGF0dHJpYnV0ZS5vcGVyYXRvcikgeworICAgICAgICAgIGNhc2Ug
Jz0nOiAgICAgICBjb25kaXRpb25zLnB1c2godmFsdWUgKyAnID09ICcgKyBhdHRyaWJ1dGUudmFs
dWUuaW5zcGVjdCgpKTsgYnJlYWs7CisgICAgICAgICAgY2FzZSAnfj0nOiAgICAgIGNvbmRpdGlv
bnMucHVzaChzcGxpdFZhbHVlQnkoJyAnKSArICcuaW5jbHVkZSgnICsgYXR0cmlidXRlLnZhbHVl
Lmluc3BlY3QoKSArICcpJyk7IGJyZWFrOworICAgICAgICAgIGNhc2UgJ3w9JzogICAgICBjb25k
aXRpb25zLnB1c2goCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXRWYWx1ZUJ5KCct
JykgKyAnLmZpcnN0KCkudG9VcHBlckNhc2UoKSA9PSAnICsgYXR0cmlidXRlLnZhbHVlLnRvVXBw
ZXJDYXNlKCkuaW5zcGVjdCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICk7IGJyZWFrOwor
ICAgICAgICAgIGNhc2UgJyE9JzogICAgICBjb25kaXRpb25zLnB1c2godmFsdWUgKyAnICE9ICcg
KyBhdHRyaWJ1dGUudmFsdWUuaW5zcGVjdCgpKTsgYnJlYWs7CisgICAgICAgICAgY2FzZSAnJzoK
KyAgICAgICAgICBjYXNlIHVuZGVmaW5lZDogY29uZGl0aW9ucy5wdXNoKCdlbGVtZW50Lmhhc0F0
dHJpYnV0ZSgnICsgYXR0cmlidXRlLm5hbWUuaW5zcGVjdCgpICsgJyknKTsgYnJlYWs7CisgICAg
ICAgICAgZGVmYXVsdDogICAgICAgIHRocm93ICdVbmtub3duIG9wZXJhdG9yICcgKyBhdHRyaWJ1
dGUub3BlcmF0b3IgKyAnIGluIHNlbGVjdG9yJzsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAg
fQorCisgICAgcmV0dXJuIGNvbmRpdGlvbnMuam9pbignICYmICcpOworICB9LAorCisgIGNvbXBp
bGVNYXRjaGVyOiBmdW5jdGlvbigpIHsKKyAgICB0aGlzLm1hdGNoID0gbmV3IEZ1bmN0aW9uKCdl
bGVtZW50JywgJ2lmICghZWxlbWVudC50YWdOYW1lKSByZXR1cm4gZmFsc2U7IFwKKyAgICAgIGVs
ZW1lbnQgPSAkKGVsZW1lbnQpOyBcCisgICAgICByZXR1cm4gJyArIHRoaXMuYnVpbGRNYXRjaEV4
cHJlc3Npb24oKSk7CisgIH0sCisKKyAgZmluZEVsZW1lbnRzOiBmdW5jdGlvbihzY29wZSkgewor
ICAgIHZhciBlbGVtZW50OworCisgICAgaWYgKGVsZW1lbnQgPSAkKHRoaXMucGFyYW1zLmlkKSkK
KyAgICAgIGlmICh0aGlzLm1hdGNoKGVsZW1lbnQpKQorICAgICAgICBpZiAoIXNjb3BlIHx8IEVs
ZW1lbnQuY2hpbGRPZihlbGVtZW50LCBzY29wZSkpCisgICAgICAgICAgcmV0dXJuIFtlbGVtZW50
XTsKKworICAgIHNjb3BlID0gKHNjb3BlIHx8IGRvY3VtZW50KS5nZXRFbGVtZW50c0J5VGFnTmFt
ZSh0aGlzLnBhcmFtcy50YWdOYW1lIHx8ICcqJyk7CisKKyAgICB2YXIgcmVzdWx0cyA9IFtdOwor
ICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBzY29wZS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkr
KykKKyAgICAgIGlmICh0aGlzLm1hdGNoKGVsZW1lbnQgPSBzY29wZVtpXSkpCisgICAgICAgIHJl
c3VsdHMucHVzaChFbGVtZW50LmV4dGVuZChlbGVtZW50KSk7CisKKyAgICByZXR1cm4gcmVzdWx0
czsKKyAgfSwKKworICB0b1N0cmluZzogZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuZXhw
cmVzc2lvbjsKKyAgfQorfQorCitPYmplY3QuZXh0ZW5kKFNlbGVjdG9yLCB7CisgIG1hdGNoRWxl
bWVudHM6IGZ1bmN0aW9uKGVsZW1lbnRzLCBleHByZXNzaW9uKSB7CisgICAgdmFyIHNlbGVjdG9y
ID0gbmV3IFNlbGVjdG9yKGV4cHJlc3Npb24pOworICAgIHJldHVybiBlbGVtZW50cy5zZWxlY3Qo
c2VsZWN0b3IubWF0Y2guYmluZChzZWxlY3RvcikpLm1hcChFbGVtZW50LmV4dGVuZCk7CisgIH0s
CisKKyAgZmluZEVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnRzLCBleHByZXNzaW9uLCBpbmRleCkg
eworICAgIGlmICh0eXBlb2YgZXhwcmVzc2lvbiA9PSAnbnVtYmVyJykgaW5kZXggPSBleHByZXNz
aW9uLCBleHByZXNzaW9uID0gZmFsc2U7CisgICAgcmV0dXJuIFNlbGVjdG9yLm1hdGNoRWxlbWVu
dHMoZWxlbWVudHMsIGV4cHJlc3Npb24gfHwgJyonKVtpbmRleCB8fCAwXTsKKyAgfSwKKworICBm
aW5kQ2hpbGRFbGVtZW50czogZnVuY3Rpb24oZWxlbWVudCwgZXhwcmVzc2lvbnMpIHsKKyAgICBy
ZXR1cm4gZXhwcmVzc2lvbnMubWFwKGZ1bmN0aW9uKGV4cHJlc3Npb24pIHsKKyAgICAgIHJldHVy
biBleHByZXNzaW9uLm1hdGNoKC9bXlxzIl0rKD86IlteIl0qIlteXHMiXSspKi9nKS5pbmplY3Qo
W251bGxdLCBmdW5jdGlvbihyZXN1bHRzLCBleHByKSB7CisgICAgICAgIHZhciBzZWxlY3RvciA9
IG5ldyBTZWxlY3RvcihleHByKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdHMuaW5qZWN0KFtdLCBm
dW5jdGlvbihlbGVtZW50cywgcmVzdWx0KSB7CisgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzLmNv
bmNhdChzZWxlY3Rvci5maW5kRWxlbWVudHMocmVzdWx0IHx8IGVsZW1lbnQpKTsKKyAgICAgICAg
fSk7CisgICAgICB9KTsKKyAgICB9KS5mbGF0dGVuKCk7CisgIH0KK30pOworCitmdW5jdGlvbiAk
JCgpIHsKKyAgcmV0dXJuIFNlbGVjdG9yLmZpbmRDaGlsZEVsZW1lbnRzKGRvY3VtZW50LCAkQShh
cmd1bWVudHMpKTsKK30KK3ZhciBGb3JtID0geworICByZXNldDogZnVuY3Rpb24oZm9ybSkgewor
ICAgICQoZm9ybSkucmVzZXQoKTsKKyAgICByZXR1cm4gZm9ybTsKKyAgfSwKKworICBzZXJpYWxp
emVFbGVtZW50czogZnVuY3Rpb24oZWxlbWVudHMsIGdldEhhc2gpIHsKKyAgICB2YXIgZGF0YSA9
IGVsZW1lbnRzLmluamVjdCh7fSwgZnVuY3Rpb24ocmVzdWx0LCBlbGVtZW50KSB7CisgICAgICBp
ZiAoIWVsZW1lbnQuZGlzYWJsZWQgJiYgZWxlbWVudC5uYW1lKSB7CisgICAgICAgIHZhciBrZXkg
PSBlbGVtZW50Lm5hbWUsIHZhbHVlID0gJChlbGVtZW50KS5nZXRWYWx1ZSgpOworICAgICAgICBp
ZiAodmFsdWUgIT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgaWYgKHJlc3VsdFtrZXldKSB7Cisg
ICAgICAgICAgICBpZiAocmVzdWx0W2tleV0uY29uc3RydWN0b3IgIT0gQXJyYXkpIHJlc3VsdFtr
ZXldID0gW3Jlc3VsdFtrZXldXTsKKyAgICAgICAgICAgIHJlc3VsdFtrZXldLnB1c2godmFsdWUp
OworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHJlc3VsdFtrZXldID0gdmFsdWU7CisgICAg
ICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfSk7CisKKyAgICByZXR1
cm4gZ2V0SGFzaCA/IGRhdGEgOiBIYXNoLnRvUXVlcnlTdHJpbmcoZGF0YSk7CisgIH0KK307CisK
K0Zvcm0uTWV0aG9kcyA9IHsKKyAgc2VyaWFsaXplOiBmdW5jdGlvbihmb3JtLCBnZXRIYXNoKSB7
CisgICAgcmV0dXJuIEZvcm0uc2VyaWFsaXplRWxlbWVudHMoRm9ybS5nZXRFbGVtZW50cyhmb3Jt
KSwgZ2V0SGFzaCk7CisgIH0sCisKKyAgZ2V0RWxlbWVudHM6IGZ1bmN0aW9uKGZvcm0pIHsKKyAg
ICByZXR1cm4gJEEoJChmb3JtKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpKS5pbmplY3QoW10s
CisgICAgICBmdW5jdGlvbihlbGVtZW50cywgY2hpbGQpIHsKKyAgICAgICAgaWYgKEZvcm0uRWxl
bWVudC5TZXJpYWxpemVyc1tjaGlsZC50YWdOYW1lLnRvTG93ZXJDYXNlKCldKQorICAgICAgICAg
IGVsZW1lbnRzLnB1c2goRWxlbWVudC5leHRlbmQoY2hpbGQpKTsKKyAgICAgICAgcmV0dXJuIGVs
ZW1lbnRzOworICAgICAgfQorICAgICk7CisgIH0sCisKKyAgZ2V0SW5wdXRzOiBmdW5jdGlvbihm
b3JtLCB0eXBlTmFtZSwgbmFtZSkgeworICAgIGZvcm0gPSAkKGZvcm0pOworICAgIHZhciBpbnB1
dHMgPSBmb3JtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpOworCisgICAgaWYgKCF0eXBl
TmFtZSAmJiAhbmFtZSkgcmV0dXJuICRBKGlucHV0cykubWFwKEVsZW1lbnQuZXh0ZW5kKTsKKwor
ICAgIGZvciAodmFyIGkgPSAwLCBtYXRjaGluZ0lucHV0cyA9IFtdLCBsZW5ndGggPSBpbnB1dHMu
bGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgIHZhciBpbnB1dCA9IGlucHV0c1tpXTsK
KyAgICAgIGlmICgodHlwZU5hbWUgJiYgaW5wdXQudHlwZSAhPSB0eXBlTmFtZSkgfHwgKG5hbWUg
JiYgaW5wdXQubmFtZSAhPSBuYW1lKSkKKyAgICAgICAgY29udGludWU7CisgICAgICBtYXRjaGlu
Z0lucHV0cy5wdXNoKEVsZW1lbnQuZXh0ZW5kKGlucHV0KSk7CisgICAgfQorCisgICAgcmV0dXJu
IG1hdGNoaW5nSW5wdXRzOworICB9LAorCisgIGRpc2FibGU6IGZ1bmN0aW9uKGZvcm0pIHsKKyAg
ICBmb3JtID0gJChmb3JtKTsKKyAgICBmb3JtLmdldEVsZW1lbnRzKCkuZWFjaChmdW5jdGlvbihl
bGVtZW50KSB7CisgICAgICBlbGVtZW50LmJsdXIoKTsKKyAgICAgIGVsZW1lbnQuZGlzYWJsZWQg
PSAndHJ1ZSc7CisgICAgfSk7CisgICAgcmV0dXJuIGZvcm07CisgIH0sCisKKyAgZW5hYmxlOiBm
dW5jdGlvbihmb3JtKSB7CisgICAgZm9ybSA9ICQoZm9ybSk7CisgICAgZm9ybS5nZXRFbGVtZW50
cygpLmVhY2goZnVuY3Rpb24oZWxlbWVudCkgeworICAgICAgZWxlbWVudC5kaXNhYmxlZCA9ICcn
OworICAgIH0pOworICAgIHJldHVybiBmb3JtOworICB9LAorCisgIGZpbmRGaXJzdEVsZW1lbnQ6
IGZ1bmN0aW9uKGZvcm0pIHsKKyAgICByZXR1cm4gJChmb3JtKS5nZXRFbGVtZW50cygpLmZpbmQo
ZnVuY3Rpb24oZWxlbWVudCkgeworICAgICAgcmV0dXJuIGVsZW1lbnQudHlwZSAhPSAnaGlkZGVu
JyAmJiAhZWxlbWVudC5kaXNhYmxlZCAmJgorICAgICAgICBbJ2lucHV0JywgJ3NlbGVjdCcsICd0
ZXh0YXJlYSddLmluY2x1ZGUoZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpOworICAgIH0p
OworICB9LAorCisgIGZvY3VzRmlyc3RFbGVtZW50OiBmdW5jdGlvbihmb3JtKSB7CisgICAgZm9y
bSA9ICQoZm9ybSk7CisgICAgZm9ybS5maW5kRmlyc3RFbGVtZW50KCkuYWN0aXZhdGUoKTsKKyAg
ICByZXR1cm4gZm9ybTsKKyAgfQorfQorCitPYmplY3QuZXh0ZW5kKEZvcm0sIEZvcm0uTWV0aG9k
cyk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitGb3JtLkVsZW1lbnQgPSB7CisgIGZvY3Vz
OiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgJChlbGVtZW50KS5mb2N1cygpOworICAgIHJldHVy
biBlbGVtZW50OworICB9LAorCisgIHNlbGVjdDogZnVuY3Rpb24oZWxlbWVudCkgeworICAgICQo
ZWxlbWVudCkuc2VsZWN0KCk7CisgICAgcmV0dXJuIGVsZW1lbnQ7CisgIH0KK30KKworRm9ybS5F
bGVtZW50Lk1ldGhvZHMgPSB7CisgIHNlcmlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudCkgeworICAg
IGVsZW1lbnQgPSAkKGVsZW1lbnQpOworICAgIGlmICghZWxlbWVudC5kaXNhYmxlZCAmJiBlbGVt
ZW50Lm5hbWUpIHsKKyAgICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQuZ2V0VmFsdWUoKTsKKyAgICAg
IGlmICh2YWx1ZSAhPSB1bmRlZmluZWQpIHsKKyAgICAgICAgdmFyIHBhaXIgPSB7fTsKKyAgICAg
ICAgcGFpcltlbGVtZW50Lm5hbWVdID0gdmFsdWU7CisgICAgICAgIHJldHVybiBIYXNoLnRvUXVl
cnlTdHJpbmcocGFpcik7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiAnJzsKKyAgfSwKKwor
ICBnZXRWYWx1ZTogZnVuY3Rpb24oZWxlbWVudCkgeworICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQp
OworICAgIHZhciBtZXRob2QgPSBlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTsKKyAgICBy
ZXR1cm4gRm9ybS5FbGVtZW50LlNlcmlhbGl6ZXJzW21ldGhvZF0oZWxlbWVudCk7CisgIH0sCisK
KyAgY2xlYXI6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICAkKGVsZW1lbnQpLnZhbHVlID0gJyc7
CisgICAgcmV0dXJuIGVsZW1lbnQ7CisgIH0sCisKKyAgcHJlc2VudDogZnVuY3Rpb24oZWxlbWVu
dCkgeworICAgIHJldHVybiAkKGVsZW1lbnQpLnZhbHVlICE9ICcnOworICB9LAorCisgIGFjdGl2
YXRlOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisgICAg
ZWxlbWVudC5mb2N1cygpOworICAgIGlmIChlbGVtZW50LnNlbGVjdCAmJiAoIGVsZW1lbnQudGFn
TmFtZS50b0xvd2VyQ2FzZSgpICE9ICdpbnB1dCcgfHwKKyAgICAgICFbJ2J1dHRvbicsICdyZXNl
dCcsICdzdWJtaXQnXS5pbmNsdWRlKGVsZW1lbnQudHlwZSkgKSApCisgICAgICBlbGVtZW50LnNl
bGVjdCgpOworICAgIHJldHVybiBlbGVtZW50OworICB9LAorCisgIGRpc2FibGU6IGZ1bmN0aW9u
KGVsZW1lbnQpIHsKKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKyAgICBlbGVtZW50LmRpc2Fi
bGVkID0gdHJ1ZTsKKyAgICByZXR1cm4gZWxlbWVudDsKKyAgfSwKKworICBlbmFibGU6IGZ1bmN0
aW9uKGVsZW1lbnQpIHsKKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKyAgICBlbGVtZW50LmJs
dXIoKTsKKyAgICBlbGVtZW50LmRpc2FibGVkID0gZmFsc2U7CisgICAgcmV0dXJuIGVsZW1lbnQ7
CisgIH0KK30KKworT2JqZWN0LmV4dGVuZChGb3JtLkVsZW1lbnQsIEZvcm0uRWxlbWVudC5NZXRo
b2RzKTsKK3ZhciBGaWVsZCA9IEZvcm0uRWxlbWVudDsKK3ZhciAkRiA9IEZvcm0uRWxlbWVudC5n
ZXRWYWx1ZTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK0Zvcm0uRWxlbWVudC5TZXJpYWxp
emVycyA9IHsKKyAgaW5wdXQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICBzd2l0Y2ggKGVsZW1l
bnQudHlwZS50b0xvd2VyQ2FzZSgpKSB7CisgICAgICBjYXNlICdjaGVja2JveCc6CisgICAgICBj
YXNlICdyYWRpbyc6CisgICAgICAgIHJldHVybiBGb3JtLkVsZW1lbnQuU2VyaWFsaXplcnMuaW5w
dXRTZWxlY3RvcihlbGVtZW50KTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBGb3Jt
LkVsZW1lbnQuU2VyaWFsaXplcnMudGV4dGFyZWEoZWxlbWVudCk7CisgICAgfQorICB9LAorCisg
IGlucHV0U2VsZWN0b3I6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICByZXR1cm4gZWxlbWVudC5j
aGVja2VkID8gZWxlbWVudC52YWx1ZSA6IG51bGw7CisgIH0sCisKKyAgdGV4dGFyZWE6IGZ1bmN0
aW9uKGVsZW1lbnQpIHsKKyAgICByZXR1cm4gZWxlbWVudC52YWx1ZTsKKyAgfSwKKworICBzZWxl
Y3Q6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICByZXR1cm4gdGhpc1tlbGVtZW50LnR5cGUgPT0g
J3NlbGVjdC1vbmUnID8KKyAgICAgICdzZWxlY3RPbmUnIDogJ3NlbGVjdE1hbnknXShlbGVtZW50
KTsKKyAgfSwKKworICBzZWxlY3RPbmU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICB2YXIgaW5k
ZXggPSBlbGVtZW50LnNlbGVjdGVkSW5kZXg7CisgICAgcmV0dXJuIGluZGV4ID49IDAgPyB0aGlz
Lm9wdGlvblZhbHVlKGVsZW1lbnQub3B0aW9uc1tpbmRleF0pIDogbnVsbDsKKyAgfSwKKworICBz
ZWxlY3RNYW55OiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgdmFyIHZhbHVlcywgbGVuZ3RoID0g
ZWxlbWVudC5sZW5ndGg7CisgICAgaWYgKCFsZW5ndGgpIHJldHVybiBudWxsOworCisgICAgZm9y
ICh2YXIgaSA9IDAsIHZhbHVlcyA9IFtdOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgIHZhciBv
cHQgPSBlbGVtZW50Lm9wdGlvbnNbaV07CisgICAgICBpZiAob3B0LnNlbGVjdGVkKSB2YWx1ZXMu
cHVzaCh0aGlzLm9wdGlvblZhbHVlKG9wdCkpOworICAgIH0KKyAgICByZXR1cm4gdmFsdWVzOwor
ICB9LAorCisgIG9wdGlvblZhbHVlOiBmdW5jdGlvbihvcHQpIHsKKyAgICAvLyBleHRlbmQgZWxl
bWVudCBiZWNhdXNlIGhhc0F0dHJpYnV0ZSBtYXkgbm90IGJlIG5hdGl2ZQorICAgIHJldHVybiBF
bGVtZW50LmV4dGVuZChvcHQpLmhhc0F0dHJpYnV0ZSgndmFsdWUnKSA/IG9wdC52YWx1ZSA6IG9w
dC50ZXh0OworICB9Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitBYnN0cmFjdC5UaW1l
ZE9ic2VydmVyID0gZnVuY3Rpb24oKSB7fQorQWJzdHJhY3QuVGltZWRPYnNlcnZlci5wcm90b3R5
cGUgPSB7CisgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1lbnQsIGZyZXF1ZW5jeSwgY2FsbGJh
Y2spIHsKKyAgICB0aGlzLmZyZXF1ZW5jeSA9IGZyZXF1ZW5jeTsKKyAgICB0aGlzLmVsZW1lbnQg
ICA9ICQoZWxlbWVudCk7CisgICAgdGhpcy5jYWxsYmFjayAgPSBjYWxsYmFjazsKKworICAgIHRo
aXMubGFzdFZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpOworICAgIHRoaXMucmVnaXN0ZXJDYWxsYmFj
aygpOworICB9LAorCisgIHJlZ2lzdGVyQ2FsbGJhY2s6IGZ1bmN0aW9uKCkgeworICAgIHNldElu
dGVydmFsKHRoaXMub25UaW1lckV2ZW50LmJpbmQodGhpcyksIHRoaXMuZnJlcXVlbmN5ICogMTAw
MCk7CisgIH0sCisKKyAgb25UaW1lckV2ZW50OiBmdW5jdGlvbigpIHsKKyAgICB2YXIgdmFsdWUg
PSB0aGlzLmdldFZhbHVlKCk7CisgICAgdmFyIGNoYW5nZWQgPSAoJ3N0cmluZycgPT0gdHlwZW9m
IHRoaXMubGFzdFZhbHVlICYmICdzdHJpbmcnID09IHR5cGVvZiB2YWx1ZQorICAgICAgPyB0aGlz
Lmxhc3RWYWx1ZSAhPSB2YWx1ZSA6IFN0cmluZyh0aGlzLmxhc3RWYWx1ZSkgIT0gU3RyaW5nKHZh
bHVlKSk7CisgICAgaWYgKGNoYW5nZWQpIHsKKyAgICAgIHRoaXMuY2FsbGJhY2sodGhpcy5lbGVt
ZW50LCB2YWx1ZSk7CisgICAgICB0aGlzLmxhc3RWYWx1ZSA9IHZhbHVlOworICAgIH0KKyAgfQor
fQorCitGb3JtLkVsZW1lbnQuT2JzZXJ2ZXIgPSBDbGFzcy5jcmVhdGUoKTsKK0Zvcm0uRWxlbWVu
dC5PYnNlcnZlci5wcm90b3R5cGUgPSBPYmplY3QuZXh0ZW5kKG5ldyBBYnN0cmFjdC5UaW1lZE9i
c2VydmVyKCksIHsKKyAgZ2V0VmFsdWU6IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBGb3JtLkVs
ZW1lbnQuZ2V0VmFsdWUodGhpcy5lbGVtZW50KTsKKyAgfQorfSk7CisKK0Zvcm0uT2JzZXJ2ZXIg
PSBDbGFzcy5jcmVhdGUoKTsKK0Zvcm0uT2JzZXJ2ZXIucHJvdG90eXBlID0gT2JqZWN0LmV4dGVu
ZChuZXcgQWJzdHJhY3QuVGltZWRPYnNlcnZlcigpLCB7CisgIGdldFZhbHVlOiBmdW5jdGlvbigp
IHsKKyAgICByZXR1cm4gRm9ybS5zZXJpYWxpemUodGhpcy5lbGVtZW50KTsKKyAgfQorfSk7CisK
Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitBYnN0cmFjdC5FdmVudE9ic2VydmVyID0gZnVuY3Rp
b24oKSB7fQorQWJzdHJhY3QuRXZlbnRPYnNlcnZlci5wcm90b3R5cGUgPSB7CisgIGluaXRpYWxp
emU6IGZ1bmN0aW9uKGVsZW1lbnQsIGNhbGxiYWNrKSB7CisgICAgdGhpcy5lbGVtZW50ICA9ICQo
ZWxlbWVudCk7CisgICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrOworCisgICAgdGhpcy5sYXN0
VmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7CisgICAgaWYgKHRoaXMuZWxlbWVudC50YWdOYW1lLnRv
TG93ZXJDYXNlKCkgPT0gJ2Zvcm0nKQorICAgICAgdGhpcy5yZWdpc3RlckZvcm1DYWxsYmFja3Mo
KTsKKyAgICBlbHNlCisgICAgICB0aGlzLnJlZ2lzdGVyQ2FsbGJhY2sodGhpcy5lbGVtZW50KTsK
KyAgfSwKKworICBvbkVsZW1lbnRFdmVudDogZnVuY3Rpb24oKSB7CisgICAgdmFyIHZhbHVlID0g
dGhpcy5nZXRWYWx1ZSgpOworICAgIGlmICh0aGlzLmxhc3RWYWx1ZSAhPSB2YWx1ZSkgeworICAg
ICAgdGhpcy5jYWxsYmFjayh0aGlzLmVsZW1lbnQsIHZhbHVlKTsKKyAgICAgIHRoaXMubGFzdFZh
bHVlID0gdmFsdWU7CisgICAgfQorICB9LAorCisgIHJlZ2lzdGVyRm9ybUNhbGxiYWNrczogZnVu
Y3Rpb24oKSB7CisgICAgRm9ybS5nZXRFbGVtZW50cyh0aGlzLmVsZW1lbnQpLmVhY2godGhpcy5y
ZWdpc3RlckNhbGxiYWNrLmJpbmQodGhpcykpOworICB9LAorCisgIHJlZ2lzdGVyQ2FsbGJhY2s6
IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICBpZiAoZWxlbWVudC50eXBlKSB7CisgICAgICBzd2l0
Y2ggKGVsZW1lbnQudHlwZS50b0xvd2VyQ2FzZSgpKSB7CisgICAgICAgIGNhc2UgJ2NoZWNrYm94
JzoKKyAgICAgICAgY2FzZSAncmFkaW8nOgorICAgICAgICAgIEV2ZW50Lm9ic2VydmUoZWxlbWVu
dCwgJ2NsaWNrJywgdGhpcy5vbkVsZW1lbnRFdmVudC5iaW5kKHRoaXMpKTsKKyAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBFdmVudC5vYnNlcnZlKGVsZW1lbnQs
ICdjaGFuZ2UnLCB0aGlzLm9uRWxlbWVudEV2ZW50LmJpbmQodGhpcykpOworICAgICAgICAgIGJy
ZWFrOworICAgICAgfQorICAgIH0KKyAgfQorfQorCitGb3JtLkVsZW1lbnQuRXZlbnRPYnNlcnZl
ciA9IENsYXNzLmNyZWF0ZSgpOworRm9ybS5FbGVtZW50LkV2ZW50T2JzZXJ2ZXIucHJvdG90eXBl
ID0gT2JqZWN0LmV4dGVuZChuZXcgQWJzdHJhY3QuRXZlbnRPYnNlcnZlcigpLCB7CisgIGdldFZh
bHVlOiBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gRm9ybS5FbGVtZW50LmdldFZhbHVlKHRoaXMu
ZWxlbWVudCk7CisgIH0KK30pOworCitGb3JtLkV2ZW50T2JzZXJ2ZXIgPSBDbGFzcy5jcmVhdGUo
KTsKK0Zvcm0uRXZlbnRPYnNlcnZlci5wcm90b3R5cGUgPSBPYmplY3QuZXh0ZW5kKG5ldyBBYnN0
cmFjdC5FdmVudE9ic2VydmVyKCksIHsKKyAgZ2V0VmFsdWU6IGZ1bmN0aW9uKCkgeworICAgIHJl
dHVybiBGb3JtLnNlcmlhbGl6ZSh0aGlzLmVsZW1lbnQpOworICB9Cit9KTsKK2lmICghd2luZG93
LkV2ZW50KSB7CisgIHZhciBFdmVudCA9IG5ldyBPYmplY3QoKTsKK30KKworT2JqZWN0LmV4dGVu
ZChFdmVudCwgeworICBLRVlfQkFDS1NQQUNFOiA4LAorICBLRVlfVEFCOiAgICAgICA5LAorICBL
RVlfUkVUVVJOOiAgIDEzLAorICBLRVlfRVNDOiAgICAgIDI3LAorICBLRVlfTEVGVDogICAgIDM3
LAorICBLRVlfVVA6ICAgICAgIDM4LAorICBLRVlfUklHSFQ6ICAgIDM5LAorICBLRVlfRE9XTjog
ICAgIDQwLAorICBLRVlfREVMRVRFOiAgIDQ2LAorICBLRVlfSE9NRTogICAgIDM2LAorICBLRVlf
RU5EOiAgICAgIDM1LAorICBLRVlfUEFHRVVQOiAgIDMzLAorICBLRVlfUEFHRURPV046IDM0LAor
CisgIGVsZW1lbnQ6IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgcmV0dXJuIGV2ZW50LnRhcmdldCB8
fCBldmVudC5zcmNFbGVtZW50OworICB9LAorCisgIGlzTGVmdENsaWNrOiBmdW5jdGlvbihldmVu
dCkgeworICAgIHJldHVybiAoKChldmVudC53aGljaCkgJiYgKGV2ZW50LndoaWNoID09IDEpKSB8
fAorICAgICAgICAgICAgKChldmVudC5idXR0b24pICYmIChldmVudC5idXR0b24gPT0gMSkpKTsK
KyAgfSwKKworICBwb2ludGVyWDogZnVuY3Rpb24oZXZlbnQpIHsKKyAgICByZXR1cm4gZXZlbnQu
cGFnZVggfHwgKGV2ZW50LmNsaWVudFggKworICAgICAgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVu
dC5zY3JvbGxMZWZ0IHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCkpOworICB9LAorCisgIHBv
aW50ZXJZOiBmdW5jdGlvbihldmVudCkgeworICAgIHJldHVybiBldmVudC5wYWdlWSB8fCAoZXZl
bnQuY2xpZW50WSArCisgICAgICAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCB8
fCBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCkpOworICB9LAorCisgIHN0b3A6IGZ1bmN0aW9uKGV2
ZW50KSB7CisgICAgaWYgKGV2ZW50LnByZXZlbnREZWZhdWx0KSB7CisgICAgICBldmVudC5wcmV2
ZW50RGVmYXVsdCgpOworICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7CisgICAgICBldmVudC5jYW5jZWxC
dWJibGUgPSB0cnVlOworICAgIH0KKyAgfSwKKworICAvLyBmaW5kIHRoZSBmaXJzdCBub2RlIHdp
dGggdGhlIGdpdmVuIHRhZ05hbWUsIHN0YXJ0aW5nIGZyb20gdGhlCisgIC8vIG5vZGUgdGhlIGV2
ZW50IHdhcyB0cmlnZ2VyZWQgb247IHRyYXZlcnNlcyB0aGUgRE9NIHVwd2FyZHMKKyAgZmluZEVs
ZW1lbnQ6IGZ1bmN0aW9uKGV2ZW50LCB0YWdOYW1lKSB7CisgICAgdmFyIGVsZW1lbnQgPSBFdmVu
dC5lbGVtZW50KGV2ZW50KTsKKyAgICB3aGlsZSAoZWxlbWVudC5wYXJlbnROb2RlICYmICghZWxl
bWVudC50YWdOYW1lIHx8CisgICAgICAgIChlbGVtZW50LnRhZ05hbWUudG9VcHBlckNhc2UoKSAh
PSB0YWdOYW1lLnRvVXBwZXJDYXNlKCkpKSkKKyAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVu
dE5vZGU7CisgICAgcmV0dXJuIGVsZW1lbnQ7CisgIH0sCisKKyAgb2JzZXJ2ZXJzOiBmYWxzZSwK
KworICBfb2JzZXJ2ZUFuZENhY2hlOiBmdW5jdGlvbihlbGVtZW50LCBuYW1lLCBvYnNlcnZlciwg
dXNlQ2FwdHVyZSkgeworICAgIGlmICghdGhpcy5vYnNlcnZlcnMpIHRoaXMub2JzZXJ2ZXJzID0g
W107CisgICAgaWYgKGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikgeworICAgICAgdGhpcy5vYnNl
cnZlcnMucHVzaChbZWxlbWVudCwgbmFtZSwgb2JzZXJ2ZXIsIHVzZUNhcHR1cmVdKTsKKyAgICAg
IGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBvYnNlcnZlciwgdXNlQ2FwdHVyZSk7Cisg
ICAgfSBlbHNlIGlmIChlbGVtZW50LmF0dGFjaEV2ZW50KSB7CisgICAgICB0aGlzLm9ic2VydmVy
cy5wdXNoKFtlbGVtZW50LCBuYW1lLCBvYnNlcnZlciwgdXNlQ2FwdHVyZV0pOworICAgICAgZWxl
bWVudC5hdHRhY2hFdmVudCgnb24nICsgbmFtZSwgb2JzZXJ2ZXIpOworICAgIH0KKyAgfSwKKwor
ICB1bmxvYWRDYWNoZTogZnVuY3Rpb24oKSB7CisgICAgaWYgKCFFdmVudC5vYnNlcnZlcnMpIHJl
dHVybjsKKyAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gRXZlbnQub2JzZXJ2ZXJzLmxlbmd0
aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICBFdmVudC5zdG9wT2JzZXJ2aW5nLmFwcGx5KHRo
aXMsIEV2ZW50Lm9ic2VydmVyc1tpXSk7CisgICAgICBFdmVudC5vYnNlcnZlcnNbaV1bMF0gPSBu
dWxsOworICAgIH0KKyAgICBFdmVudC5vYnNlcnZlcnMgPSBmYWxzZTsKKyAgfSwKKworICBvYnNl
cnZlOiBmdW5jdGlvbihlbGVtZW50LCBuYW1lLCBvYnNlcnZlciwgdXNlQ2FwdHVyZSkgeworICAg
IGVsZW1lbnQgPSAkKGVsZW1lbnQpOworICAgIHVzZUNhcHR1cmUgPSB1c2VDYXB0dXJlIHx8IGZh
bHNlOworCisgICAgaWYgKG5hbWUgPT0gJ2tleXByZXNzJyAmJgorICAgICAgICAobmF2aWdhdG9y
LmFwcFZlcnNpb24ubWF0Y2goL0tvbnF1ZXJvcnxTYWZhcml8S0hUTUwvKQorICAgICAgICB8fCBl
bGVtZW50LmF0dGFjaEV2ZW50KSkKKyAgICAgIG5hbWUgPSAna2V5ZG93bic7CisKKyAgICBFdmVu
dC5fb2JzZXJ2ZUFuZENhY2hlKGVsZW1lbnQsIG5hbWUsIG9ic2VydmVyLCB1c2VDYXB0dXJlKTsK
KyAgfSwKKworICBzdG9wT2JzZXJ2aW5nOiBmdW5jdGlvbihlbGVtZW50LCBuYW1lLCBvYnNlcnZl
ciwgdXNlQ2FwdHVyZSkgeworICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOworICAgIHVzZUNhcHR1
cmUgPSB1c2VDYXB0dXJlIHx8IGZhbHNlOworCisgICAgaWYgKG5hbWUgPT0gJ2tleXByZXNzJyAm
JgorICAgICAgICAobmF2aWdhdG9yLmFwcFZlcnNpb24ubWF0Y2goL0tvbnF1ZXJvcnxTYWZhcml8
S0hUTUwvKQorICAgICAgICB8fCBlbGVtZW50LmRldGFjaEV2ZW50KSkKKyAgICAgIG5hbWUgPSAn
a2V5ZG93bic7CisKKyAgICBpZiAoZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKSB7CisgICAg
ICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgb2JzZXJ2ZXIsIHVzZUNhcHR1cmUp
OworICAgIH0gZWxzZSBpZiAoZWxlbWVudC5kZXRhY2hFdmVudCkgeworICAgICAgdHJ5IHsKKyAg
ICAgICAgZWxlbWVudC5kZXRhY2hFdmVudCgnb24nICsgbmFtZSwgb2JzZXJ2ZXIpOworICAgICAg
fSBjYXRjaCAoZSkge30KKyAgICB9CisgIH0KK30pOworCisvKiBwcmV2ZW50IG1lbW9yeSBsZWFr
cyBpbiBJRSAqLworaWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLm1hdGNoKC9cYk1TSUVcYi8pKQor
ICBFdmVudC5vYnNlcnZlKHdpbmRvdywgJ3VubG9hZCcsIEV2ZW50LnVubG9hZENhY2hlLCBmYWxz
ZSk7Cit2YXIgUG9zaXRpb24gPSB7CisgIC8vIHNldCB0byB0cnVlIGlmIG5lZWRlZCwgd2Fybmlu
ZzogZmlyZWZveCBwZXJmb3JtYW5jZSBwcm9ibGVtcworICAvLyBOT1QgbmVlZWRlZCBmb3IgcGFn
ZSBzY3JvbGxpbmcsIG9ubHkgaWYgZHJhZ2dhYmxlIGNvbnRhaW5lZCBpbgorICAvLyBzY3JvbGxh
YmxlIGVsZW1lbnRzCisgIGluY2x1ZGVTY3JvbGxPZmZzZXRzOiBmYWxzZSwKKworICAvLyBtdXN0
IGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyB3aXRoaW5JbmNsdWRpbmdTY3JvbGxvZmZzZXQsIGV2
ZXJ5IHRpbWUgdGhlCisgIC8vIHBhZ2UgaXMgc2Nyb2xsZWQKKyAgcHJlcGFyZTogZnVuY3Rpb24o
KSB7CisgICAgdGhpcy5kZWx0YVggPSAgd2luZG93LnBhZ2VYT2Zmc2V0CisgICAgICAgICAgICAg
ICAgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQKKyAgICAgICAgICAgICAg
ICB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQKKyAgICAgICAgICAgICAgICB8fCAwOworICAg
IHRoaXMuZGVsdGFZID0gIHdpbmRvdy5wYWdlWU9mZnNldAorICAgICAgICAgICAgICAgIHx8IGRv
Y3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AKKyAgICAgICAgICAgICAgICB8fCBkb2N1
bWVudC5ib2R5LnNjcm9sbFRvcAorICAgICAgICAgICAgICAgIHx8IDA7CisgIH0sCisKKyAgcmVh
bE9mZnNldDogZnVuY3Rpb24oZWxlbWVudCkgeworICAgIHZhciB2YWx1ZVQgPSAwLCB2YWx1ZUwg
PSAwOworICAgIGRvIHsKKyAgICAgIHZhbHVlVCArPSBlbGVtZW50LnNjcm9sbFRvcCAgfHwgMDsK
KyAgICAgIHZhbHVlTCArPSBlbGVtZW50LnNjcm9sbExlZnQgfHwgMDsKKyAgICAgIGVsZW1lbnQg
PSBlbGVtZW50LnBhcmVudE5vZGU7CisgICAgfSB3aGlsZSAoZWxlbWVudCk7CisgICAgcmV0dXJu
IFt2YWx1ZUwsIHZhbHVlVF07CisgIH0sCisKKyAgY3VtdWxhdGl2ZU9mZnNldDogZnVuY3Rpb24o
ZWxlbWVudCkgeworICAgIHZhciB2YWx1ZVQgPSAwLCB2YWx1ZUwgPSAwOworICAgIGRvIHsKKyAg
ICAgIHZhbHVlVCArPSBlbGVtZW50Lm9mZnNldFRvcCAgfHwgMDsKKyAgICAgIHZhbHVlTCArPSBl
bGVtZW50Lm9mZnNldExlZnQgfHwgMDsKKyAgICAgIGVsZW1lbnQgPSBlbGVtZW50Lm9mZnNldFBh
cmVudDsKKyAgICB9IHdoaWxlIChlbGVtZW50KTsKKyAgICByZXR1cm4gW3ZhbHVlTCwgdmFsdWVU
XTsKKyAgfSwKKworICBwb3NpdGlvbmVkT2Zmc2V0OiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAg
dmFyIHZhbHVlVCA9IDAsIHZhbHVlTCA9IDA7CisgICAgZG8geworICAgICAgdmFsdWVUICs9IGVs
ZW1lbnQub2Zmc2V0VG9wICB8fCAwOworICAgICAgdmFsdWVMICs9IGVsZW1lbnQub2Zmc2V0TGVm
dCB8fCAwOworICAgICAgZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50OworICAgICAgaWYg
KGVsZW1lbnQpIHsKKyAgICAgICAgaWYoZWxlbWVudC50YWdOYW1lPT0nQk9EWScpIGJyZWFrOwor
ICAgICAgICB2YXIgcCA9IEVsZW1lbnQuZ2V0U3R5bGUoZWxlbWVudCwgJ3Bvc2l0aW9uJyk7Cisg
ICAgICAgIGlmIChwID09ICdyZWxhdGl2ZScgfHwgcCA9PSAnYWJzb2x1dGUnKSBicmVhazsKKyAg
ICAgIH0KKyAgICB9IHdoaWxlIChlbGVtZW50KTsKKyAgICByZXR1cm4gW3ZhbHVlTCwgdmFsdWVU
XTsKKyAgfSwKKworICBvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKyAgICBpZiAo
ZWxlbWVudC5vZmZzZXRQYXJlbnQpIHJldHVybiBlbGVtZW50Lm9mZnNldFBhcmVudDsKKyAgICBp
ZiAoZWxlbWVudCA9PSBkb2N1bWVudC5ib2R5KSByZXR1cm4gZWxlbWVudDsKKworICAgIHdoaWxl
ICgoZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZSkgJiYgZWxlbWVudCAhPSBkb2N1bWVudC5i
b2R5KQorICAgICAgaWYgKEVsZW1lbnQuZ2V0U3R5bGUoZWxlbWVudCwgJ3Bvc2l0aW9uJykgIT0g
J3N0YXRpYycpCisgICAgICAgIHJldHVybiBlbGVtZW50OworCisgICAgcmV0dXJuIGRvY3VtZW50
LmJvZHk7CisgIH0sCisKKyAgLy8gY2FjaGVzIHgveSBjb29yZGluYXRlIHBhaXIgdG8gdXNlIHdp
dGggb3ZlcmxhcAorICB3aXRoaW46IGZ1bmN0aW9uKGVsZW1lbnQsIHgsIHkpIHsKKyAgICBpZiAo
dGhpcy5pbmNsdWRlU2Nyb2xsT2Zmc2V0cykKKyAgICAgIHJldHVybiB0aGlzLndpdGhpbkluY2x1
ZGluZ1Njcm9sbG9mZnNldHMoZWxlbWVudCwgeCwgeSk7CisgICAgdGhpcy54Y29tcCA9IHg7Cisg
ICAgdGhpcy55Y29tcCA9IHk7CisgICAgdGhpcy5vZmZzZXQgPSB0aGlzLmN1bXVsYXRpdmVPZmZz
ZXQoZWxlbWVudCk7CisKKyAgICByZXR1cm4gKHkgPj0gdGhpcy5vZmZzZXRbMV0gJiYKKyAgICAg
ICAgICAgIHkgPCAgdGhpcy5vZmZzZXRbMV0gKyBlbGVtZW50Lm9mZnNldEhlaWdodCAmJgorICAg
ICAgICAgICAgeCA+PSB0aGlzLm9mZnNldFswXSAmJgorICAgICAgICAgICAgeCA8ICB0aGlzLm9m
ZnNldFswXSArIGVsZW1lbnQub2Zmc2V0V2lkdGgpOworICB9LAorCisgIHdpdGhpbkluY2x1ZGlu
Z1Njcm9sbG9mZnNldHM6IGZ1bmN0aW9uKGVsZW1lbnQsIHgsIHkpIHsKKyAgICB2YXIgb2Zmc2V0
Y2FjaGUgPSB0aGlzLnJlYWxPZmZzZXQoZWxlbWVudCk7CisKKyAgICB0aGlzLnhjb21wID0geCAr
IG9mZnNldGNhY2hlWzBdIC0gdGhpcy5kZWx0YVg7CisgICAgdGhpcy55Y29tcCA9IHkgKyBvZmZz
ZXRjYWNoZVsxXSAtIHRoaXMuZGVsdGFZOworICAgIHRoaXMub2Zmc2V0ID0gdGhpcy5jdW11bGF0
aXZlT2Zmc2V0KGVsZW1lbnQpOworCisgICAgcmV0dXJuICh0aGlzLnljb21wID49IHRoaXMub2Zm
c2V0WzFdICYmCisgICAgICAgICAgICB0aGlzLnljb21wIDwgIHRoaXMub2Zmc2V0WzFdICsgZWxl
bWVudC5vZmZzZXRIZWlnaHQgJiYKKyAgICAgICAgICAgIHRoaXMueGNvbXAgPj0gdGhpcy5vZmZz
ZXRbMF0gJiYKKyAgICAgICAgICAgIHRoaXMueGNvbXAgPCAgdGhpcy5vZmZzZXRbMF0gKyBlbGVt
ZW50Lm9mZnNldFdpZHRoKTsKKyAgfSwKKworICAvLyB3aXRoaW4gbXVzdCBiZSBjYWxsZWQgZGly
ZWN0bHkgYmVmb3JlCisgIG92ZXJsYXA6IGZ1bmN0aW9uKG1vZGUsIGVsZW1lbnQpIHsKKyAgICBp
ZiAoIW1vZGUpIHJldHVybiAwOworICAgIGlmIChtb2RlID09ICd2ZXJ0aWNhbCcpCisgICAgICBy
ZXR1cm4gKCh0aGlzLm9mZnNldFsxXSArIGVsZW1lbnQub2Zmc2V0SGVpZ2h0KSAtIHRoaXMueWNv
bXApIC8KKyAgICAgICAgZWxlbWVudC5vZmZzZXRIZWlnaHQ7CisgICAgaWYgKG1vZGUgPT0gJ2hv
cml6b250YWwnKQorICAgICAgcmV0dXJuICgodGhpcy5vZmZzZXRbMF0gKyBlbGVtZW50Lm9mZnNl
dFdpZHRoKSAtIHRoaXMueGNvbXApIC8KKyAgICAgICAgZWxlbWVudC5vZmZzZXRXaWR0aDsKKyAg
fSwKKworICBwYWdlOiBmdW5jdGlvbihmb3JFbGVtZW50KSB7CisgICAgdmFyIHZhbHVlVCA9IDAs
IHZhbHVlTCA9IDA7CisKKyAgICB2YXIgZWxlbWVudCA9IGZvckVsZW1lbnQ7CisgICAgZG8gewor
ICAgICAgdmFsdWVUICs9IGVsZW1lbnQub2Zmc2V0VG9wICB8fCAwOworICAgICAgdmFsdWVMICs9
IGVsZW1lbnQub2Zmc2V0TGVmdCB8fCAwOworCisgICAgICAvLyBTYWZhcmkgZml4CisgICAgICBp
ZiAoZWxlbWVudC5vZmZzZXRQYXJlbnQ9PWRvY3VtZW50LmJvZHkpCisgICAgICAgIGlmIChFbGVt
ZW50LmdldFN0eWxlKGVsZW1lbnQsJ3Bvc2l0aW9uJyk9PSdhYnNvbHV0ZScpIGJyZWFrOworCisg
ICAgfSB3aGlsZSAoZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50KTsKKworICAgIGVsZW1l
bnQgPSBmb3JFbGVtZW50OworICAgIGRvIHsKKyAgICAgIGlmICghd2luZG93Lm9wZXJhIHx8IGVs
ZW1lbnQudGFnTmFtZT09J0JPRFknKSB7CisgICAgICAgIHZhbHVlVCAtPSBlbGVtZW50LnNjcm9s
bFRvcCAgfHwgMDsKKyAgICAgICAgdmFsdWVMIC09IGVsZW1lbnQuc2Nyb2xsTGVmdCB8fCAwOwor
ICAgICAgfQorICAgIH0gd2hpbGUgKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGUpOworCisg
ICAgcmV0dXJuIFt2YWx1ZUwsIHZhbHVlVF07CisgIH0sCisKKyAgY2xvbmU6IGZ1bmN0aW9uKHNv
dXJjZSwgdGFyZ2V0KSB7CisgICAgdmFyIG9wdGlvbnMgPSBPYmplY3QuZXh0ZW5kKHsKKyAgICAg
IHNldExlZnQ6ICAgIHRydWUsCisgICAgICBzZXRUb3A6ICAgICB0cnVlLAorICAgICAgc2V0V2lk
dGg6ICAgdHJ1ZSwKKyAgICAgIHNldEhlaWdodDogIHRydWUsCisgICAgICBvZmZzZXRUb3A6ICAw
LAorICAgICAgb2Zmc2V0TGVmdDogMAorICAgIH0sIGFyZ3VtZW50c1syXSB8fCB7fSkKKworICAg
IC8vIGZpbmQgcGFnZSBwb3NpdGlvbiBvZiBzb3VyY2UKKyAgICBzb3VyY2UgPSAkKHNvdXJjZSk7
CisgICAgdmFyIHAgPSBQb3NpdGlvbi5wYWdlKHNvdXJjZSk7CisKKyAgICAvLyBmaW5kIGNvb3Jk
aW5hdGUgc3lzdGVtIHRvIHVzZQorICAgIHRhcmdldCA9ICQodGFyZ2V0KTsKKyAgICB2YXIgZGVs
dGEgPSBbMCwgMF07CisgICAgdmFyIHBhcmVudCA9IG51bGw7CisgICAgLy8gZGVsdGEgWzAsMF0g
d2lsbCBkbyBmaW5lIHdpdGggcG9zaXRpb246IGZpeGVkIGVsZW1lbnRzLAorICAgIC8vIHBvc2l0
aW9uOmFic29sdXRlIG5lZWRzIG9mZnNldFBhcmVudCBkZWx0YXMKKyAgICBpZiAoRWxlbWVudC5n
ZXRTdHlsZSh0YXJnZXQsJ3Bvc2l0aW9uJykgPT0gJ2Fic29sdXRlJykgeworICAgICAgcGFyZW50
ID0gUG9zaXRpb24ub2Zmc2V0UGFyZW50KHRhcmdldCk7CisgICAgICBkZWx0YSA9IFBvc2l0aW9u
LnBhZ2UocGFyZW50KTsKKyAgICB9CisKKyAgICAvLyBjb3JyZWN0IGJ5IGJvZHkgb2Zmc2V0cyAo
Zml4ZXMgU2FmYXJpKQorICAgIGlmIChwYXJlbnQgPT0gZG9jdW1lbnQuYm9keSkgeworICAgICAg
ZGVsdGFbMF0gLT0gZG9jdW1lbnQuYm9keS5vZmZzZXRMZWZ0OworICAgICAgZGVsdGFbMV0gLT0g
ZG9jdW1lbnQuYm9keS5vZmZzZXRUb3A7CisgICAgfQorCisgICAgLy8gc2V0IHBvc2l0aW9uCisg
ICAgaWYob3B0aW9ucy5zZXRMZWZ0KSAgIHRhcmdldC5zdHlsZS5sZWZ0ICA9IChwWzBdIC0gZGVs
dGFbMF0gKyBvcHRpb25zLm9mZnNldExlZnQpICsgJ3B4JzsKKyAgICBpZihvcHRpb25zLnNldFRv
cCkgICAgdGFyZ2V0LnN0eWxlLnRvcCAgID0gKHBbMV0gLSBkZWx0YVsxXSArIG9wdGlvbnMub2Zm
c2V0VG9wKSArICdweCc7CisgICAgaWYob3B0aW9ucy5zZXRXaWR0aCkgIHRhcmdldC5zdHlsZS53
aWR0aCA9IHNvdXJjZS5vZmZzZXRXaWR0aCArICdweCc7CisgICAgaWYob3B0aW9ucy5zZXRIZWln
aHQpIHRhcmdldC5zdHlsZS5oZWlnaHQgPSBzb3VyY2Uub2Zmc2V0SGVpZ2h0ICsgJ3B4JzsKKyAg
fSwKKworICBhYnNvbHV0aXplOiBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgZWxlbWVudCA9ICQo
ZWxlbWVudCk7CisgICAgaWYgKGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPT0gJ2Fic29sdXRlJykg
cmV0dXJuOworICAgIFBvc2l0aW9uLnByZXBhcmUoKTsKKworICAgIHZhciBvZmZzZXRzID0gUG9z
aXRpb24ucG9zaXRpb25lZE9mZnNldChlbGVtZW50KTsKKyAgICB2YXIgdG9wICAgICA9IG9mZnNl
dHNbMV07CisgICAgdmFyIGxlZnQgICAgPSBvZmZzZXRzWzBdOworICAgIHZhciB3aWR0aCAgID0g
ZWxlbWVudC5jbGllbnRXaWR0aDsKKyAgICB2YXIgaGVpZ2h0ICA9IGVsZW1lbnQuY2xpZW50SGVp
Z2h0OworCisgICAgZWxlbWVudC5fb3JpZ2luYWxMZWZ0ICAgPSBsZWZ0IC0gcGFyc2VGbG9hdChl
bGVtZW50LnN0eWxlLmxlZnQgIHx8IDApOworICAgIGVsZW1lbnQuX29yaWdpbmFsVG9wICAgID0g
dG9wICAtIHBhcnNlRmxvYXQoZWxlbWVudC5zdHlsZS50b3AgfHwgMCk7CisgICAgZWxlbWVudC5f
b3JpZ2luYWxXaWR0aCAgPSBlbGVtZW50LnN0eWxlLndpZHRoOworICAgIGVsZW1lbnQuX29yaWdp
bmFsSGVpZ2h0ID0gZWxlbWVudC5zdHlsZS5oZWlnaHQ7CisKKyAgICBlbGVtZW50LnN0eWxlLnBv
c2l0aW9uID0gJ2Fic29sdXRlJzsKKyAgICBlbGVtZW50LnN0eWxlLnRvcCAgICA9IHRvcCArICdw
eCc7CisgICAgZWxlbWVudC5zdHlsZS5sZWZ0ICAgPSBsZWZ0ICsgJ3B4JzsKKyAgICBlbGVtZW50
LnN0eWxlLndpZHRoICA9IHdpZHRoICsgJ3B4JzsKKyAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9
IGhlaWdodCArICdweCc7CisgIH0sCisKKyAgcmVsYXRpdml6ZTogZnVuY3Rpb24oZWxlbWVudCkg
eworICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOworICAgIGlmIChlbGVtZW50LnN0eWxlLnBvc2l0
aW9uID09ICdyZWxhdGl2ZScpIHJldHVybjsKKyAgICBQb3NpdGlvbi5wcmVwYXJlKCk7CisKKyAg
ICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJzsKKyAgICB2YXIgdG9wICA9IHBh
cnNlRmxvYXQoZWxlbWVudC5zdHlsZS50b3AgIHx8IDApIC0gKGVsZW1lbnQuX29yaWdpbmFsVG9w
IHx8IDApOworICAgIHZhciBsZWZ0ID0gcGFyc2VGbG9hdChlbGVtZW50LnN0eWxlLmxlZnQgfHwg
MCkgLSAoZWxlbWVudC5fb3JpZ2luYWxMZWZ0IHx8IDApOworCisgICAgZWxlbWVudC5zdHlsZS50
b3AgICAgPSB0b3AgKyAncHgnOworICAgIGVsZW1lbnQuc3R5bGUubGVmdCAgID0gbGVmdCArICdw
eCc7CisgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBlbGVtZW50Ll9vcmlnaW5hbEhlaWdodDsK
KyAgICBlbGVtZW50LnN0eWxlLndpZHRoICA9IGVsZW1lbnQuX29yaWdpbmFsV2lkdGg7CisgIH0K
K30KKworLy8gU2FmYXJpIHJldHVybnMgbWFyZ2lucyBvbiBib2R5IHdoaWNoIGlzIGluY29ycmVj
dCBpZiB0aGUgY2hpbGQgaXMgYWJzb2x1dGVseQorLy8gcG9zaXRpb25lZC4gIEZvciBwZXJmb3Jt
YW5jZSByZWFzb25zLCByZWRlZmluZSBQb3NpdGlvbi5jdW11bGF0aXZlT2Zmc2V0IGZvcgorLy8g
S0hUTUwvV2ViS2l0IG9ubHkuCitpZiAoL0tvbnF1ZXJvcnxTYWZhcml8S0hUTUwvLnRlc3QobmF2
aWdhdG9yLnVzZXJBZ2VudCkpIHsKKyAgUG9zaXRpb24uY3VtdWxhdGl2ZU9mZnNldCA9IGZ1bmN0
aW9uKGVsZW1lbnQpIHsKKyAgICB2YXIgdmFsdWVUID0gMCwgdmFsdWVMID0gMDsKKyAgICBkbyB7
CisgICAgICB2YWx1ZVQgKz0gZWxlbWVudC5vZmZzZXRUb3AgIHx8IDA7CisgICAgICB2YWx1ZUwg
Kz0gZWxlbWVudC5vZmZzZXRMZWZ0IHx8IDA7CisgICAgICBpZiAoZWxlbWVudC5vZmZzZXRQYXJl
bnQgPT0gZG9jdW1lbnQuYm9keSkKKyAgICAgICAgaWYgKEVsZW1lbnQuZ2V0U3R5bGUoZWxlbWVu
dCwgJ3Bvc2l0aW9uJykgPT0gJ2Fic29sdXRlJykgYnJlYWs7CisKKyAgICAgIGVsZW1lbnQgPSBl
bGVtZW50Lm9mZnNldFBhcmVudDsKKyAgICB9IHdoaWxlIChlbGVtZW50KTsKKworICAgIHJldHVy
biBbdmFsdWVMLCB2YWx1ZVRdOworICB9Cit9CisKK0VsZW1lbnQuYWRkTWV0aG9kcygpOworCisK
Ky8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIFRoZSByZXN0IG9m
IHRoaXMgZmlsZSBpcyB0aGUgYWN0dWFsIHJheSB0cmFjZXIgd3JpdHRlbiBieSBBZGFtCisvLyBC
dXJtaXN0ZXIuIEl0J3MgYSBjb25jYXRlbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgZmlsZXM6Cisv
LworLy8gICBmbG9nL2NvbG9yLmpzCisvLyAgIGZsb2cvbGlnaHQuanMKKy8vICAgZmxvZy92ZWN0
b3IuanMKKy8vICAgZmxvZy9yYXkuanMKKy8vICAgZmxvZy9zY2VuZS5qcworLy8gICBmbG9nL21h
dGVyaWFsL2Jhc2VtYXRlcmlhbC5qcworLy8gICBmbG9nL21hdGVyaWFsL3NvbGlkLmpzCisvLyAg
IGZsb2cvbWF0ZXJpYWwvY2hlc3Nib2FyZC5qcworLy8gICBmbG9nL3NoYXBlL2Jhc2VzaGFwZS5q
cworLy8gICBmbG9nL3NoYXBlL3NwaGVyZS5qcworLy8gICBmbG9nL3NoYXBlL3BsYW5lLmpzCisv
LyAgIGZsb2cvaW50ZXJzZWN0aW9uaW5mby5qcworLy8gICBmbG9nL2NhbWVyYS5qcworLy8gICBm
bG9nL2JhY2tncm91bmQuanMKKy8vICAgZmxvZy9lbmdpbmUuanMKKworCisvKiBGYWtlIGEgRmxv
Zy4qIG5hbWVzcGFjZSAqLworaWYodHlwZW9mKEZsb2cpID09ICd1bmRlZmluZWQnKSB2YXIgRmxv
ZyA9IHt9OworaWYodHlwZW9mKEZsb2cuUmF5VHJhY2VyKSA9PSAndW5kZWZpbmVkJykgRmxvZy5S
YXlUcmFjZXIgPSB7fTsKKworRmxvZy5SYXlUcmFjZXIuQ29sb3IgPSBDbGFzcy5jcmVhdGUoKTsK
KworRmxvZy5SYXlUcmFjZXIuQ29sb3IucHJvdG90eXBlID0geworICAgIHJlZCA6IDAuMCwKKyAg
ICBncmVlbiA6IDAuMCwKKyAgICBibHVlIDogMC4wLAorCisgICAgaW5pdGlhbGl6ZSA6IGZ1bmN0
aW9uKHIsIGcsIGIpIHsKKyAgICAgICAgaWYoIXIpIHIgPSAwLjA7CisgICAgICAgIGlmKCFnKSBn
ID0gMC4wOworICAgICAgICBpZighYikgYiA9IDAuMDsKKworICAgICAgICB0aGlzLnJlZCA9IHI7
CisgICAgICAgIHRoaXMuZ3JlZW4gPSBnOworICAgICAgICB0aGlzLmJsdWUgPSBiOworICAgIH0s
CisKKyAgICBhZGQgOiBmdW5jdGlvbihjMSwgYzIpeworICAgICAgICB2YXIgcmVzdWx0ID0gbmV3
IEZsb2cuUmF5VHJhY2VyLkNvbG9yKDAsMCwwKTsKKworICAgICAgICByZXN1bHQucmVkID0gYzEu
cmVkICsgYzIucmVkOworICAgICAgICByZXN1bHQuZ3JlZW4gPSBjMS5ncmVlbiArIGMyLmdyZWVu
OworICAgICAgICByZXN1bHQuYmx1ZSA9IGMxLmJsdWUgKyBjMi5ibHVlOworCisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfSwKKworICAgIGFkZFNjYWxhcjogZnVuY3Rpb24oYzEsIHMpewor
ICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEZsb2cuUmF5VHJhY2VyLkNvbG9yKDAsMCwwKTsKKwor
ICAgICAgICByZXN1bHQucmVkID0gYzEucmVkICsgczsKKyAgICAgICAgcmVzdWx0LmdyZWVuID0g
YzEuZ3JlZW4gKyBzOworICAgICAgICByZXN1bHQuYmx1ZSA9IGMxLmJsdWUgKyBzOworCisgICAg
ICAgIHJlc3VsdC5saW1pdCgpOworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfSwKKwor
ICAgIHN1YnRyYWN0OiBmdW5jdGlvbihjMSwgYzIpeworICAgICAgICB2YXIgcmVzdWx0ID0gbmV3
IEZsb2cuUmF5VHJhY2VyLkNvbG9yKDAsMCwwKTsKKworICAgICAgICByZXN1bHQucmVkID0gYzEu
cmVkIC0gYzIucmVkOworICAgICAgICByZXN1bHQuZ3JlZW4gPSBjMS5ncmVlbiAtIGMyLmdyZWVu
OworICAgICAgICByZXN1bHQuYmx1ZSA9IGMxLmJsdWUgLSBjMi5ibHVlOworCisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfSwKKworICAgIG11bHRpcGx5IDogZnVuY3Rpb24oYzEsIGMyKSB7
CisgICAgICAgIHZhciByZXN1bHQgPSBuZXcgRmxvZy5SYXlUcmFjZXIuQ29sb3IoMCwwLDApOwor
CisgICAgICAgIHJlc3VsdC5yZWQgPSBjMS5yZWQgKiBjMi5yZWQ7CisgICAgICAgIHJlc3VsdC5n
cmVlbiA9IGMxLmdyZWVuICogYzIuZ3JlZW47CisgICAgICAgIHJlc3VsdC5ibHVlID0gYzEuYmx1
ZSAqIGMyLmJsdWU7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9LAorCisgICAgbXVs
dGlwbHlTY2FsYXIgOiBmdW5jdGlvbihjMSwgZikgeworICAgICAgICB2YXIgcmVzdWx0ID0gbmV3
IEZsb2cuUmF5VHJhY2VyLkNvbG9yKDAsMCwwKTsKKworICAgICAgICByZXN1bHQucmVkID0gYzEu
cmVkICogZjsKKyAgICAgICAgcmVzdWx0LmdyZWVuID0gYzEuZ3JlZW4gKiBmOworICAgICAgICBy
ZXN1bHQuYmx1ZSA9IGMxLmJsdWUgKiBmOworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fSwKKworICAgIGRpdmlkZUZhY3RvciA6IGZ1bmN0aW9uKGMxLCBmKSB7CisgICAgICAgIHZhciBy
ZXN1bHQgPSBuZXcgRmxvZy5SYXlUcmFjZXIuQ29sb3IoMCwwLDApOworCisgICAgICAgIHJlc3Vs
dC5yZWQgPSBjMS5yZWQgLyBmOworICAgICAgICByZXN1bHQuZ3JlZW4gPSBjMS5ncmVlbiAvIGY7
CisgICAgICAgIHJlc3VsdC5ibHVlID0gYzEuYmx1ZSAvIGY7CisKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9LAorCisgICAgbGltaXQ6IGZ1bmN0aW9uKCl7CisgICAgICAgIHRoaXMucmVk
ID0gKHRoaXMucmVkID4gMC4wKSA/ICggKHRoaXMucmVkID4gMS4wKSA/IDEuMCA6IHRoaXMucmVk
ICkgOiAwLjA7CisgICAgICAgIHRoaXMuZ3JlZW4gPSAodGhpcy5ncmVlbiA+IDAuMCkgPyAoICh0
aGlzLmdyZWVuID4gMS4wKSA/IDEuMCA6IHRoaXMuZ3JlZW4gKSA6IDAuMDsKKyAgICAgICAgdGhp
cy5ibHVlID0gKHRoaXMuYmx1ZSA+IDAuMCkgPyAoICh0aGlzLmJsdWUgPiAxLjApID8gMS4wIDog
dGhpcy5ibHVlICkgOiAwLjA7CisgICAgfSwKKworICAgIGRpc3RhbmNlIDogZnVuY3Rpb24oY29s
b3IpIHsKKyAgICAgICAgdmFyIGQgPSBNYXRoLmFicyh0aGlzLnJlZCAtIGNvbG9yLnJlZCkgKyBN
YXRoLmFicyh0aGlzLmdyZWVuIC0gY29sb3IuZ3JlZW4pICsgTWF0aC5hYnModGhpcy5ibHVlIC0g
Y29sb3IuYmx1ZSk7CisgICAgICAgIHJldHVybiBkOworICAgIH0sCisKKyAgICBibGVuZDogZnVu
Y3Rpb24oYzEsIGMyLCB3KXsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBGbG9nLlJheVRyYWNl
ci5Db2xvcigwLDAsMCk7CisgICAgICAgIHJlc3VsdCA9IEZsb2cuUmF5VHJhY2VyLkNvbG9yLnBy
b3RvdHlwZS5hZGQoCisgICAgICAgICAgICAgICAgICAgIEZsb2cuUmF5VHJhY2VyLkNvbG9yLnBy
b3RvdHlwZS5tdWx0aXBseVNjYWxhcihjMSwgMSAtIHcpLAorICAgICAgICAgICAgICAgICAgICBG
bG9nLlJheVRyYWNlci5Db2xvci5wcm90b3R5cGUubXVsdGlwbHlTY2FsYXIoYzIsIHcpCisgICAg
ICAgICAgICAgICAgICApOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0sCisKKyAgICB0
b1N0cmluZyA6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHIgPSBNYXRoLmZsb29yKHRoaXMu
cmVkKjI1NSk7CisgICAgICAgIHZhciBnID0gTWF0aC5mbG9vcih0aGlzLmdyZWVuKjI1NSk7Cisg
ICAgICAgIHZhciBiID0gTWF0aC5mbG9vcih0aGlzLmJsdWUqMjU1KTsKKworICAgICAgICByZXR1
cm4gInJnYigiKyByICsiLCIrIGcgKyIsIisgYiArIikiOworICAgIH0KK30KKy8qIEZha2UgYSBG
bG9nLiogbmFtZXNwYWNlICovCitpZih0eXBlb2YoRmxvZykgPT0gJ3VuZGVmaW5lZCcpIHZhciBG
bG9nID0ge307CitpZih0eXBlb2YoRmxvZy5SYXlUcmFjZXIpID09ICd1bmRlZmluZWQnKSBGbG9n
LlJheVRyYWNlciA9IHt9OworCitGbG9nLlJheVRyYWNlci5MaWdodCA9IENsYXNzLmNyZWF0ZSgp
OworCitGbG9nLlJheVRyYWNlci5MaWdodC5wcm90b3R5cGUgPSB7CisgICAgcG9zaXRpb246IG51
bGwsCisgICAgY29sb3I6IG51bGwsCisgICAgaW50ZW5zaXR5OiAxMC4wLAorCisgICAgaW5pdGlh
bGl6ZSA6IGZ1bmN0aW9uKHBvcywgY29sb3IsIGludGVuc2l0eSkgeworICAgICAgICB0aGlzLnBv
c2l0aW9uID0gcG9zOworICAgICAgICB0aGlzLmNvbG9yID0gY29sb3I7CisgICAgICAgIHRoaXMu
aW50ZW5zaXR5ID0gKGludGVuc2l0eSA/IGludGVuc2l0eSA6IDEwLjApOworICAgIH0sCisKKyAg
ICBnZXRJbnRlbnNpdHk6IGZ1bmN0aW9uKGRpc3RhbmNlKXsKKyAgICAgICAgaWYoZGlzdGFuY2Ug
Pj0gaW50ZW5zaXR5KSByZXR1cm4gMDsKKworICAgICAgICByZXR1cm4gTWF0aC5wb3coKGludGVu
c2l0eSAtIGRpc3RhbmNlKSAvIHN0cmVuZ3RoLCAwLjIpOworICAgIH0sCisKKyAgICB0b1N0cmlu
ZyA6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICdMaWdodCBbJyArIHRoaXMucG9zaXRp
b24ueCArICcsJyArIHRoaXMucG9zaXRpb24ueSArICcsJyArIHRoaXMucG9zaXRpb24ueiArICdd
JzsKKyAgICB9Cit9CisvKiBGYWtlIGEgRmxvZy4qIG5hbWVzcGFjZSAqLworaWYodHlwZW9mKEZs
b2cpID09ICd1bmRlZmluZWQnKSB2YXIgRmxvZyA9IHt9OworaWYodHlwZW9mKEZsb2cuUmF5VHJh
Y2VyKSA9PSAndW5kZWZpbmVkJykgRmxvZy5SYXlUcmFjZXIgPSB7fTsKKworRmxvZy5SYXlUcmFj
ZXIuVmVjdG9yID0gQ2xhc3MuY3JlYXRlKCk7CisKK0Zsb2cuUmF5VHJhY2VyLlZlY3Rvci5wcm90
b3R5cGUgPSB7CisgICAgeCA6IDAuMCwKKyAgICB5IDogMC4wLAorICAgIHogOiAwLjAsCisKKyAg
ICBpbml0aWFsaXplIDogZnVuY3Rpb24oeCwgeSwgeikgeworICAgICAgICB0aGlzLnggPSAoeCA/
IHggOiAwKTsKKyAgICAgICAgdGhpcy55ID0gKHkgPyB5IDogMCk7CisgICAgICAgIHRoaXMueiA9
ICh6ID8geiA6IDApOworICAgIH0sCisKKyAgICBjb3B5OiBmdW5jdGlvbih2ZWN0b3IpeworICAg
ICAgICB0aGlzLnggPSB2ZWN0b3IueDsKKyAgICAgICAgdGhpcy55ID0gdmVjdG9yLnk7CisgICAg
ICAgIHRoaXMueiA9IHZlY3Rvci56OworICAgIH0sCisKKyAgICBub3JtYWxpemUgOiBmdW5jdGlv
bigpIHsKKyAgICAgICAgdmFyIG0gPSB0aGlzLm1hZ25pdHVkZSgpOworICAgICAgICByZXR1cm4g
bmV3IEZsb2cuUmF5VHJhY2VyLlZlY3Rvcih0aGlzLnggLyBtLCB0aGlzLnkgLyBtLCB0aGlzLnog
LyBtKTsKKyAgICB9LAorCisgICAgbWFnbml0dWRlIDogZnVuY3Rpb24oKSB7CisgICAgICAgIHJl
dHVybiBNYXRoLnNxcnQoKHRoaXMueCAqIHRoaXMueCkgKyAodGhpcy55ICogdGhpcy55KSArICh0
aGlzLnogKiB0aGlzLnopKTsKKyAgICB9LAorCisgICAgY3Jvc3MgOiBmdW5jdGlvbih3KSB7Cisg
ICAgICAgIHJldHVybiBuZXcgRmxvZy5SYXlUcmFjZXIuVmVjdG9yKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtdGhpcy56ICogdy55ICsgdGhpcy55ICogdy56
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueiAqIHcu
eCAtIHRoaXMueCAqIHcueiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC10aGlzLnkgKiB3LnggKyB0aGlzLnggKiB3LnkpOworICAgIH0sCisKKyAgICBkb3QgOiBm
dW5jdGlvbih3KSB7CisgICAgICAgIHJldHVybiB0aGlzLnggKiB3LnggKyB0aGlzLnkgKiB3Lnkg
KyB0aGlzLnogKiB3Lno7CisgICAgfSwKKworICAgIGFkZCA6IGZ1bmN0aW9uKHYsIHcpIHsKKyAg
ICAgICAgcmV0dXJuIG5ldyBGbG9nLlJheVRyYWNlci5WZWN0b3Iody54ICsgdi54LCB3LnkgKyB2
LnksIHcueiArIHYueik7CisgICAgfSwKKworICAgIHN1YnRyYWN0IDogZnVuY3Rpb24odiwgdykg
eworICAgICAgICBpZighdyB8fCAhdikgdGhyb3cgJ1ZlY3RvcnMgbXVzdCBiZSBkZWZpbmVkIFsn
ICsgdiArICcsJyArIHcgKyAnXSc7CisgICAgICAgIHJldHVybiBuZXcgRmxvZy5SYXlUcmFjZXIu
VmVjdG9yKHYueCAtIHcueCwgdi55IC0gdy55LCB2LnogLSB3LnopOworICAgIH0sCisKKyAgICBt
dWx0aXBseVZlY3RvciA6IGZ1bmN0aW9uKHYsIHcpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBGbG9n
LlJheVRyYWNlci5WZWN0b3Iodi54ICogdy54LCB2LnkgKiB3LnksIHYueiAqIHcueik7CisgICAg
fSwKKworICAgIG11bHRpcGx5U2NhbGFyIDogZnVuY3Rpb24odiwgdykgeworICAgICAgICByZXR1
cm4gbmV3IEZsb2cuUmF5VHJhY2VyLlZlY3Rvcih2LnggKiB3LCB2LnkgKiB3LCB2LnogKiB3KTsK
KyAgICB9LAorCisgICAgdG9TdHJpbmcgOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAn
VmVjdG9yIFsnICsgdGhpcy54ICsgJywnICsgdGhpcy55ICsgJywnICsgdGhpcy56ICsgJ10nOwor
ICAgIH0KK30KKy8qIEZha2UgYSBGbG9nLiogbmFtZXNwYWNlICovCitpZih0eXBlb2YoRmxvZykg
PT0gJ3VuZGVmaW5lZCcpIHZhciBGbG9nID0ge307CitpZih0eXBlb2YoRmxvZy5SYXlUcmFjZXIp
ID09ICd1bmRlZmluZWQnKSBGbG9nLlJheVRyYWNlciA9IHt9OworCitGbG9nLlJheVRyYWNlci5S
YXkgPSBDbGFzcy5jcmVhdGUoKTsKKworRmxvZy5SYXlUcmFjZXIuUmF5LnByb3RvdHlwZSA9IHsK
KyAgICBwb3NpdGlvbiA6IG51bGwsCisgICAgZGlyZWN0aW9uIDogbnVsbCwKKyAgICBpbml0aWFs
aXplIDogZnVuY3Rpb24ocG9zLCBkaXIpIHsKKyAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHBvczsK
KyAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSBkaXI7CisgICAgfSwKKworICAgIHRvU3RyaW5nIDog
ZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gJ1JheSBbJyArIHRoaXMucG9zaXRpb24gKyAn
LCcgKyB0aGlzLmRpcmVjdGlvbiArICddJzsKKyAgICB9Cit9CisvKiBGYWtlIGEgRmxvZy4qIG5h
bWVzcGFjZSAqLworaWYodHlwZW9mKEZsb2cpID09ICd1bmRlZmluZWQnKSB2YXIgRmxvZyA9IHt9
OworaWYodHlwZW9mKEZsb2cuUmF5VHJhY2VyKSA9PSAndW5kZWZpbmVkJykgRmxvZy5SYXlUcmFj
ZXIgPSB7fTsKKworRmxvZy5SYXlUcmFjZXIuU2NlbmUgPSBDbGFzcy5jcmVhdGUoKTsKKworRmxv
Zy5SYXlUcmFjZXIuU2NlbmUucHJvdG90eXBlID0geworICAgIGNhbWVyYSA6IG51bGwsCisgICAg
c2hhcGVzIDogW10sCisgICAgbGlnaHRzIDogW10sCisgICAgYmFja2dyb3VuZCA6IG51bGwsCisK
KyAgICBpbml0aWFsaXplIDogZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuY2FtZXJhID0gbmV3
IEZsb2cuUmF5VHJhY2VyLkNhbWVyYSgKKyAgICAgICAgICAgIG5ldyBGbG9nLlJheVRyYWNlci5W
ZWN0b3IoMCwwLC01KSwKKyAgICAgICAgICAgIG5ldyBGbG9nLlJheVRyYWNlci5WZWN0b3IoMCww
LDEpLAorICAgICAgICAgICAgbmV3IEZsb2cuUmF5VHJhY2VyLlZlY3RvcigwLDEsMCkKKyAgICAg
ICAgKTsKKyAgICAgICAgdGhpcy5zaGFwZXMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdGhpcy5s
aWdodHMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgdGhpcy5iYWNrZ3JvdW5kID0gbmV3IEZsb2cu
UmF5VHJhY2VyLkJhY2tncm91bmQobmV3IEZsb2cuUmF5VHJhY2VyLkNvbG9yKDAsMCwwLjUpLCAw
LjIpOworICAgIH0KK30KKy8qIEZha2UgYSBGbG9nLiogbmFtZXNwYWNlICovCitpZih0eXBlb2Yo
RmxvZykgPT0gJ3VuZGVmaW5lZCcpIHZhciBGbG9nID0ge307CitpZih0eXBlb2YoRmxvZy5SYXlU
cmFjZXIpID09ICd1bmRlZmluZWQnKSBGbG9nLlJheVRyYWNlciA9IHt9OworaWYodHlwZW9mKEZs
b2cuUmF5VHJhY2VyLk1hdGVyaWFsKSA9PSAndW5kZWZpbmVkJykgRmxvZy5SYXlUcmFjZXIuTWF0
ZXJpYWwgPSB7fTsKKworRmxvZy5SYXlUcmFjZXIuTWF0ZXJpYWwuQmFzZU1hdGVyaWFsID0gQ2xh
c3MuY3JlYXRlKCk7CisKK0Zsb2cuUmF5VHJhY2VyLk1hdGVyaWFsLkJhc2VNYXRlcmlhbC5wcm90
b3R5cGUgPSB7CisKKyAgICBnbG9zczogMi4wLCAgICAgICAgICAgICAvLyBbMC4uLmluZmluaXR5
XSAwID0gbWF0dAorICAgIHRyYW5zcGFyZW5jeTogMC4wLCAgICAgIC8vIDA9b3BhcXVlCisgICAg
cmVmbGVjdGlvbjogMC4wLCAgICAgICAgLy8gWzAuLi5pbmZpbml0eV0gMCA9IG5vIHJlZmxlY3Rp
b24KKyAgICByZWZyYWN0aW9uOiAwLjUwLAorICAgIGhhc1RleHR1cmU6IGZhbHNlLAorCisgICAg
aW5pdGlhbGl6ZSA6IGZ1bmN0aW9uKCkgeworCisgICAgfSwKKworICAgIGdldENvbG9yOiBmdW5j
dGlvbih1LCB2KXsKKworICAgIH0sCisKKyAgICB3cmFwVXA6IGZ1bmN0aW9uKHQpeworICAgICAg
ICB0ID0gdCAlIDIuMDsKKyAgICAgICAgaWYodCA8IC0xKSB0ICs9IDIuMDsKKyAgICAgICAgaWYo
dCA+PSAxKSB0IC09IDIuMDsKKyAgICAgICAgcmV0dXJuIHQ7CisgICAgfSwKKworICAgIHRvU3Ry
aW5nIDogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gJ01hdGVyaWFsIFtnbG9zcz0nICsg
dGhpcy5nbG9zcyArICcsIHRyYW5zcGFyZW5jeT0nICsgdGhpcy50cmFuc3BhcmVuY3kgKyAnLCBo
YXNUZXh0dXJlPScgKyB0aGlzLmhhc1RleHR1cmUgKyddJzsKKyAgICB9Cit9CisvKiBGYWtlIGEg
RmxvZy4qIG5hbWVzcGFjZSAqLworaWYodHlwZW9mKEZsb2cpID09ICd1bmRlZmluZWQnKSB2YXIg
RmxvZyA9IHt9OworaWYodHlwZW9mKEZsb2cuUmF5VHJhY2VyKSA9PSAndW5kZWZpbmVkJykgRmxv
Zy5SYXlUcmFjZXIgPSB7fTsKKworRmxvZy5SYXlUcmFjZXIuTWF0ZXJpYWwuU29saWQgPSBDbGFz
cy5jcmVhdGUoKTsKKworRmxvZy5SYXlUcmFjZXIuTWF0ZXJpYWwuU29saWQucHJvdG90eXBlID0g
T2JqZWN0LmV4dGVuZCgKKyAgICBuZXcgRmxvZy5SYXlUcmFjZXIuTWF0ZXJpYWwuQmFzZU1hdGVy
aWFsKCksIHsKKyAgICAgICAgaW5pdGlhbGl6ZSA6IGZ1bmN0aW9uKGNvbG9yLCByZWZsZWN0aW9u
LCByZWZyYWN0aW9uLCB0cmFuc3BhcmVuY3ksIGdsb3NzKSB7CisgICAgICAgICAgICB0aGlzLmNv
bG9yID0gY29sb3I7CisgICAgICAgICAgICB0aGlzLnJlZmxlY3Rpb24gPSByZWZsZWN0aW9uOwor
ICAgICAgICAgICAgdGhpcy50cmFuc3BhcmVuY3kgPSB0cmFuc3BhcmVuY3k7CisgICAgICAgICAg
ICB0aGlzLmdsb3NzID0gZ2xvc3M7CisgICAgICAgICAgICB0aGlzLmhhc1RleHR1cmUgPSBmYWxz
ZTsKKyAgICAgICAgfSwKKworICAgICAgICBnZXRDb2xvcjogZnVuY3Rpb24odSwgdil7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5jb2xvcjsKKyAgICAgICAgfSwKKworICAgICAgICB0b1N0cmlu
ZyA6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiAnU29saWRNYXRlcmlhbCBbZ2xv
c3M9JyArIHRoaXMuZ2xvc3MgKyAnLCB0cmFuc3BhcmVuY3k9JyArIHRoaXMudHJhbnNwYXJlbmN5
ICsgJywgaGFzVGV4dHVyZT0nICsgdGhpcy5oYXNUZXh0dXJlICsnXSc7CisgICAgICAgIH0KKyAg
ICB9CispOworLyogRmFrZSBhIEZsb2cuKiBuYW1lc3BhY2UgKi8KK2lmKHR5cGVvZihGbG9nKSA9
PSAndW5kZWZpbmVkJykgdmFyIEZsb2cgPSB7fTsKK2lmKHR5cGVvZihGbG9nLlJheVRyYWNlcikg
PT0gJ3VuZGVmaW5lZCcpIEZsb2cuUmF5VHJhY2VyID0ge307CisKK0Zsb2cuUmF5VHJhY2VyLk1h
dGVyaWFsLkNoZXNzYm9hcmQgPSBDbGFzcy5jcmVhdGUoKTsKKworRmxvZy5SYXlUcmFjZXIuTWF0
ZXJpYWwuQ2hlc3Nib2FyZC5wcm90b3R5cGUgPSBPYmplY3QuZXh0ZW5kKAorICAgIG5ldyBGbG9n
LlJheVRyYWNlci5NYXRlcmlhbC5CYXNlTWF0ZXJpYWwoKSwgeworICAgICAgICBjb2xvckV2ZW46
IG51bGwsCisgICAgICAgIGNvbG9yT2RkOiBudWxsLAorICAgICAgICBkZW5zaXR5OiAwLjUsCisK
KyAgICAgICAgaW5pdGlhbGl6ZSA6IGZ1bmN0aW9uKGNvbG9yRXZlbiwgY29sb3JPZGQsIHJlZmxl
Y3Rpb24sIHRyYW5zcGFyZW5jeSwgZ2xvc3MsIGRlbnNpdHkpIHsKKyAgICAgICAgICAgIHRoaXMu
Y29sb3JFdmVuID0gY29sb3JFdmVuOworICAgICAgICAgICAgdGhpcy5jb2xvck9kZCA9IGNvbG9y
T2RkOworICAgICAgICAgICAgdGhpcy5yZWZsZWN0aW9uID0gcmVmbGVjdGlvbjsKKyAgICAgICAg
ICAgIHRoaXMudHJhbnNwYXJlbmN5ID0gdHJhbnNwYXJlbmN5OworICAgICAgICAgICAgdGhpcy5n
bG9zcyA9IGdsb3NzOworICAgICAgICAgICAgdGhpcy5kZW5zaXR5ID0gZGVuc2l0eTsKKyAgICAg
ICAgICAgIHRoaXMuaGFzVGV4dHVyZSA9IHRydWU7CisgICAgICAgIH0sCisKKyAgICAgICAgZ2V0
Q29sb3I6IGZ1bmN0aW9uKHUsIHYpeworICAgICAgICAgICAgdmFyIHQgPSB0aGlzLndyYXBVcCh1
ICogdGhpcy5kZW5zaXR5KSAqIHRoaXMud3JhcFVwKHYgKiB0aGlzLmRlbnNpdHkpOworCisgICAg
ICAgICAgICBpZih0IDwgMC4wKQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbG9yRXZl
bjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb2xvck9k
ZDsKKyAgICAgICAgfSwKKworICAgICAgICB0b1N0cmluZyA6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiAnQ2hlc3NNYXRlcmlhbCBbZ2xvc3M9JyArIHRoaXMuZ2xvc3MgKyAnLCB0
cmFuc3BhcmVuY3k9JyArIHRoaXMudHJhbnNwYXJlbmN5ICsgJywgaGFzVGV4dHVyZT0nICsgdGhp
cy5oYXNUZXh0dXJlICsnXSc7CisgICAgICAgIH0KKyAgICB9CispOworLyogRmFrZSBhIEZsb2cu
KiBuYW1lc3BhY2UgKi8KK2lmKHR5cGVvZihGbG9nKSA9PSAndW5kZWZpbmVkJykgdmFyIEZsb2cg
PSB7fTsKK2lmKHR5cGVvZihGbG9nLlJheVRyYWNlcikgPT0gJ3VuZGVmaW5lZCcpIEZsb2cuUmF5
VHJhY2VyID0ge307CitpZih0eXBlb2YoRmxvZy5SYXlUcmFjZXIuU2hhcGUpID09ICd1bmRlZmlu
ZWQnKSBGbG9nLlJheVRyYWNlci5TaGFwZSA9IHt9OworCitGbG9nLlJheVRyYWNlci5TaGFwZS5C
YXNlU2hhcGUgPSBDbGFzcy5jcmVhdGUoKTsKKworRmxvZy5SYXlUcmFjZXIuU2hhcGUuQmFzZVNo
YXBlLnByb3RvdHlwZSA9IHsKKyAgICBwb3NpdGlvbjogbnVsbCwKKyAgICBtYXRlcmlhbDogbnVs
bCwKKworICAgIGluaXRpYWxpemUgOiBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5wb3NpdGlv
biA9IG5ldyBWZWN0b3IoMCwwLDApOworICAgICAgICB0aGlzLm1hdGVyaWFsID0gbmV3IEZsb2cu
UmF5VHJhY2VyLk1hdGVyaWFsLlNvbGlkTWF0ZXJpYWwoCisgICAgICAgICAgICBuZXcgRmxvZy5S
YXlUcmFjZXIuQ29sb3IoMSwwLDEpLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDAsCisg
ICAgICAgICAgICAwCisgICAgICAgICk7CisgICAgfSwKKworICAgIHRvU3RyaW5nIDogZnVuY3Rp
b24gKCkgeworICAgICAgICByZXR1cm4gJ01hdGVyaWFsIFtnbG9zcz0nICsgdGhpcy5nbG9zcyAr
ICcsIHRyYW5zcGFyZW5jeT0nICsgdGhpcy50cmFuc3BhcmVuY3kgKyAnLCBoYXNUZXh0dXJlPScg
KyB0aGlzLmhhc1RleHR1cmUgKyddJzsKKyAgICB9Cit9CisvKiBGYWtlIGEgRmxvZy4qIG5hbWVz
cGFjZSAqLworaWYodHlwZW9mKEZsb2cpID09ICd1bmRlZmluZWQnKSB2YXIgRmxvZyA9IHt9Owor
aWYodHlwZW9mKEZsb2cuUmF5VHJhY2VyKSA9PSAndW5kZWZpbmVkJykgRmxvZy5SYXlUcmFjZXIg
PSB7fTsKK2lmKHR5cGVvZihGbG9nLlJheVRyYWNlci5TaGFwZSkgPT0gJ3VuZGVmaW5lZCcpIEZs
b2cuUmF5VHJhY2VyLlNoYXBlID0ge307CisKK0Zsb2cuUmF5VHJhY2VyLlNoYXBlLlNwaGVyZSA9
IENsYXNzLmNyZWF0ZSgpOworCitGbG9nLlJheVRyYWNlci5TaGFwZS5TcGhlcmUucHJvdG90eXBl
ID0geworICAgIGluaXRpYWxpemUgOiBmdW5jdGlvbihwb3MsIHJhZGl1cywgbWF0ZXJpYWwpIHsK
KyAgICAgICAgdGhpcy5yYWRpdXMgPSByYWRpdXM7CisgICAgICAgIHRoaXMucG9zaXRpb24gPSBw
b3M7CisgICAgICAgIHRoaXMubWF0ZXJpYWwgPSBtYXRlcmlhbDsKKyAgICB9LAorCisgICAgaW50
ZXJzZWN0OiBmdW5jdGlvbihyYXkpeworICAgICAgICB2YXIgaW5mbyA9IG5ldyBGbG9nLlJheVRy
YWNlci5JbnRlcnNlY3Rpb25JbmZvKCk7CisgICAgICAgIGluZm8uc2hhcGUgPSB0aGlzOworCisg
ICAgICAgIHZhciBkc3QgPSBGbG9nLlJheVRyYWNlci5WZWN0b3IucHJvdG90eXBlLnN1YnRyYWN0
KHJheS5wb3NpdGlvbiwgdGhpcy5wb3NpdGlvbik7CisKKyAgICAgICAgdmFyIEIgPSBkc3QuZG90
KHJheS5kaXJlY3Rpb24pOworICAgICAgICB2YXIgQyA9IGRzdC5kb3QoZHN0KSAtICh0aGlzLnJh
ZGl1cyAqIHRoaXMucmFkaXVzKTsKKyAgICAgICAgdmFyIEQgPSAoQiAqIEIpIC0gQzsKKworICAg
ICAgICBpZihEID4gMCl7IC8vIGludGVyc2VjdGlvbiEKKyAgICAgICAgICAgIGluZm8uaXNIaXQg
PSB0cnVlOworICAgICAgICAgICAgaW5mby5kaXN0YW5jZSA9ICgtQikgLSBNYXRoLnNxcnQoRCk7
CisgICAgICAgICAgICBpbmZvLnBvc2l0aW9uID0gRmxvZy5SYXlUcmFjZXIuVmVjdG9yLnByb3Rv
dHlwZS5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByYXkucG9zaXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBGbG9nLlJheVRyYWNlci5WZWN0b3IucHJvdG90eXBlLm11bHRpcGx5U2NhbGFyKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJheS5k
aXJlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5mby5kaXN0YW5jZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICApOworICAgICAgICAgICAgaW5mby5ub3JtYWwgPSBGbG9nLlJheVRyYWNlci5WZWN0b3IucHJv
dG90eXBlLnN1YnRyYWN0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmZvLnBvc2l0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLnBvc2l0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKS5ub3JtYWxpemUoKTsKKworICAgICAgICAgICAgaW5mby5jb2xvciA9IHRoaXMubWF0
ZXJpYWwuZ2V0Q29sb3IoMCwwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGluZm8u
aXNIaXQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW5mbzsKKyAgICB9LAor
CisgICAgdG9TdHJpbmcgOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAnU3BoZXJlIFtw
b3NpdGlvbj0nICsgdGhpcy5wb3NpdGlvbiArICcsIHJhZGl1cz0nICsgdGhpcy5yYWRpdXMgKyAn
XSc7CisgICAgfQorfQorLyogRmFrZSBhIEZsb2cuKiBuYW1lc3BhY2UgKi8KK2lmKHR5cGVvZihG
bG9nKSA9PSAndW5kZWZpbmVkJykgdmFyIEZsb2cgPSB7fTsKK2lmKHR5cGVvZihGbG9nLlJheVRy
YWNlcikgPT0gJ3VuZGVmaW5lZCcpIEZsb2cuUmF5VHJhY2VyID0ge307CitpZih0eXBlb2YoRmxv
Zy5SYXlUcmFjZXIuU2hhcGUpID09ICd1bmRlZmluZWQnKSBGbG9nLlJheVRyYWNlci5TaGFwZSA9
IHt9OworCitGbG9nLlJheVRyYWNlci5TaGFwZS5QbGFuZSA9IENsYXNzLmNyZWF0ZSgpOworCitG
bG9nLlJheVRyYWNlci5TaGFwZS5QbGFuZS5wcm90b3R5cGUgPSB7CisgICAgZDogMC4wLAorCisg
ICAgaW5pdGlhbGl6ZSA6IGZ1bmN0aW9uKHBvcywgZCwgbWF0ZXJpYWwpIHsKKyAgICAgICAgdGhp
cy5wb3NpdGlvbiA9IHBvczsKKyAgICAgICAgdGhpcy5kID0gZDsKKyAgICAgICAgdGhpcy5tYXRl
cmlhbCA9IG1hdGVyaWFsOworICAgIH0sCisKKyAgICBpbnRlcnNlY3Q6IGZ1bmN0aW9uKHJheSl7
CisgICAgICAgIHZhciBpbmZvID0gbmV3IEZsb2cuUmF5VHJhY2VyLkludGVyc2VjdGlvbkluZm8o
KTsKKworICAgICAgICB2YXIgVmQgPSB0aGlzLnBvc2l0aW9uLmRvdChyYXkuZGlyZWN0aW9uKTsK
KyAgICAgICAgaWYoVmQgPT0gMCkgcmV0dXJuIGluZm87IC8vIG5vIGludGVyc2VjdGlvbgorCisg
ICAgICAgIHZhciB0ID0gLSh0aGlzLnBvc2l0aW9uLmRvdChyYXkucG9zaXRpb24pICsgdGhpcy5k
KSAvIFZkOworICAgICAgICBpZih0IDw9IDApIHJldHVybiBpbmZvOworCisgICAgICAgIGluZm8u
c2hhcGUgPSB0aGlzOworICAgICAgICBpbmZvLmlzSGl0ID0gdHJ1ZTsKKyAgICAgICAgaW5mby5w
b3NpdGlvbiA9IEZsb2cuUmF5VHJhY2VyLlZlY3Rvci5wcm90b3R5cGUuYWRkKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXkucG9zaXRpb24sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2cuUmF5VHJhY2VyLlZlY3Rv
ci5wcm90b3R5cGUubXVsdGlwbHlTY2FsYXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByYXkuZGlyZWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKTsKKyAgICAgICAgaW5mby5ub3JtYWwgPSB0aGlzLnBvc2l0aW9uOworICAgICAgICBpbmZv
LmRpc3RhbmNlID0gdDsKKworICAgICAgICBpZih0aGlzLm1hdGVyaWFsLmhhc1RleHR1cmUpewor
ICAgICAgICAgICAgdmFyIHZVID0gbmV3IEZsb2cuUmF5VHJhY2VyLlZlY3Rvcih0aGlzLnBvc2l0
aW9uLnksIHRoaXMucG9zaXRpb24ueiwgLXRoaXMucG9zaXRpb24ueCk7CisgICAgICAgICAgICB2
YXIgdlYgPSB2VS5jcm9zcyh0aGlzLnBvc2l0aW9uKTsKKyAgICAgICAgICAgIHZhciB1ID0gaW5m
by5wb3NpdGlvbi5kb3QodlUpOworICAgICAgICAgICAgdmFyIHYgPSBpbmZvLnBvc2l0aW9uLmRv
dCh2Vik7CisgICAgICAgICAgICBpbmZvLmNvbG9yID0gdGhpcy5tYXRlcmlhbC5nZXRDb2xvcih1
LHYpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW5mby5jb2xvciA9IHRoaXMubWF0
ZXJpYWwuZ2V0Q29sb3IoMCwwKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBpbmZvOwor
ICAgIH0sCisKKyAgICB0b1N0cmluZyA6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuICdQ
bGFuZSBbJyArIHRoaXMucG9zaXRpb24gKyAnLCBkPScgKyB0aGlzLmQgKyAnXSc7CisgICAgfQor
fQorLyogRmFrZSBhIEZsb2cuKiBuYW1lc3BhY2UgKi8KK2lmKHR5cGVvZihGbG9nKSA9PSAndW5k
ZWZpbmVkJykgdmFyIEZsb2cgPSB7fTsKK2lmKHR5cGVvZihGbG9nLlJheVRyYWNlcikgPT0gJ3Vu
ZGVmaW5lZCcpIEZsb2cuUmF5VHJhY2VyID0ge307CisKK0Zsb2cuUmF5VHJhY2VyLkludGVyc2Vj
dGlvbkluZm8gPSBDbGFzcy5jcmVhdGUoKTsKKworRmxvZy5SYXlUcmFjZXIuSW50ZXJzZWN0aW9u
SW5mby5wcm90b3R5cGUgPSB7CisgICAgaXNIaXQ6IGZhbHNlLAorICAgIGhpdENvdW50OiAwLAor
ICAgIHNoYXBlOiBudWxsLAorICAgIHBvc2l0aW9uOiBudWxsLAorICAgIG5vcm1hbDogbnVsbCwK
KyAgICBjb2xvcjogbnVsbCwKKyAgICBkaXN0YW5jZTogbnVsbCwKKworICAgIGluaXRpYWxpemUg
OiBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5jb2xvciA9IG5ldyBGbG9nLlJheVRyYWNlci5D
b2xvcigwLDAsMCk7CisgICAgfSwKKworICAgIHRvU3RyaW5nIDogZnVuY3Rpb24gKCkgeworICAg
ICAgICByZXR1cm4gJ0ludGVyc2VjdGlvbiBbJyArIHRoaXMucG9zaXRpb24gKyAnXSc7CisgICAg
fQorfQorLyogRmFrZSBhIEZsb2cuKiBuYW1lc3BhY2UgKi8KK2lmKHR5cGVvZihGbG9nKSA9PSAn
dW5kZWZpbmVkJykgdmFyIEZsb2cgPSB7fTsKK2lmKHR5cGVvZihGbG9nLlJheVRyYWNlcikgPT0g
J3VuZGVmaW5lZCcpIEZsb2cuUmF5VHJhY2VyID0ge307CisKK0Zsb2cuUmF5VHJhY2VyLkNhbWVy
YSA9IENsYXNzLmNyZWF0ZSgpOworCitGbG9nLlJheVRyYWNlci5DYW1lcmEucHJvdG90eXBlID0g
eworICAgIHBvc2l0aW9uOiBudWxsLAorICAgIGxvb2tBdDogbnVsbCwKKyAgICBlcXVhdG9yOiBu
dWxsLAorICAgIHVwOiBudWxsLAorICAgIHNjcmVlbjogbnVsbCwKKworICAgIGluaXRpYWxpemUg
OiBmdW5jdGlvbihwb3MsIGxvb2tBdCwgdXApIHsKKyAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHBv
czsKKyAgICAgICAgdGhpcy5sb29rQXQgPSBsb29rQXQ7CisgICAgICAgIHRoaXMudXAgPSB1cDsK
KyAgICAgICAgdGhpcy5lcXVhdG9yID0gbG9va0F0Lm5vcm1hbGl6ZSgpLmNyb3NzKHRoaXMudXAp
OworICAgICAgICB0aGlzLnNjcmVlbiA9IEZsb2cuUmF5VHJhY2VyLlZlY3Rvci5wcm90b3R5cGUu
YWRkKHRoaXMucG9zaXRpb24sIHRoaXMubG9va0F0KTsKKyAgICB9LAorCisgICAgZ2V0UmF5OiBm
dW5jdGlvbih2eCwgdnkpeworICAgICAgICB2YXIgcG9zID0gRmxvZy5SYXlUcmFjZXIuVmVjdG9y
LnByb3RvdHlwZS5zdWJ0cmFjdCgKKyAgICAgICAgICAgIHRoaXMuc2NyZWVuLAorICAgICAgICAg
ICAgRmxvZy5SYXlUcmFjZXIuVmVjdG9yLnByb3RvdHlwZS5zdWJ0cmFjdCgKKyAgICAgICAgICAg
ICAgICBGbG9nLlJheVRyYWNlci5WZWN0b3IucHJvdG90eXBlLm11bHRpcGx5U2NhbGFyKHRoaXMu
ZXF1YXRvciwgdngpLAorICAgICAgICAgICAgICAgIEZsb2cuUmF5VHJhY2VyLlZlY3Rvci5wcm90
b3R5cGUubXVsdGlwbHlTY2FsYXIodGhpcy51cCwgdnkpCisgICAgICAgICAgICApCisgICAgICAg
ICk7CisgICAgICAgIHBvcy55ID0gcG9zLnkgKiAtMTsKKyAgICAgICAgdmFyIGRpciA9IEZsb2cu
UmF5VHJhY2VyLlZlY3Rvci5wcm90b3R5cGUuc3VidHJhY3QoCisgICAgICAgICAgICBwb3MsCisg
ICAgICAgICAgICB0aGlzLnBvc2l0aW9uCisgICAgICAgICk7CisKKyAgICAgICAgdmFyIHJheSA9
IG5ldyBGbG9nLlJheVRyYWNlci5SYXkocG9zLCBkaXIubm9ybWFsaXplKCkpOworCisgICAgICAg
IHJldHVybiByYXk7CisgICAgfSwKKworICAgIHRvU3RyaW5nIDogZnVuY3Rpb24gKCkgeworICAg
ICAgICByZXR1cm4gJ1JheSBbXSc7CisgICAgfQorfQorLyogRmFrZSBhIEZsb2cuKiBuYW1lc3Bh
Y2UgKi8KK2lmKHR5cGVvZihGbG9nKSA9PSAndW5kZWZpbmVkJykgdmFyIEZsb2cgPSB7fTsKK2lm
KHR5cGVvZihGbG9nLlJheVRyYWNlcikgPT0gJ3VuZGVmaW5lZCcpIEZsb2cuUmF5VHJhY2VyID0g
e307CisKK0Zsb2cuUmF5VHJhY2VyLkJhY2tncm91bmQgPSBDbGFzcy5jcmVhdGUoKTsKKworRmxv
Zy5SYXlUcmFjZXIuQmFja2dyb3VuZC5wcm90b3R5cGUgPSB7CisgICAgY29sb3IgOiBudWxsLAor
ICAgIGFtYmllbmNlIDogMC4wLAorCisgICAgaW5pdGlhbGl6ZSA6IGZ1bmN0aW9uKGNvbG9yLCBh
bWJpZW5jZSkgeworICAgICAgICB0aGlzLmNvbG9yID0gY29sb3I7CisgICAgICAgIHRoaXMuYW1i
aWVuY2UgPSBhbWJpZW5jZTsKKyAgICB9Cit9CisvKiBGYWtlIGEgRmxvZy4qIG5hbWVzcGFjZSAq
LworaWYodHlwZW9mKEZsb2cpID09ICd1bmRlZmluZWQnKSB2YXIgRmxvZyA9IHt9OworaWYodHlw
ZW9mKEZsb2cuUmF5VHJhY2VyKSA9PSAndW5kZWZpbmVkJykgRmxvZy5SYXlUcmFjZXIgPSB7fTsK
KworRmxvZy5SYXlUcmFjZXIuRW5naW5lID0gQ2xhc3MuY3JlYXRlKCk7CisKK0Zsb2cuUmF5VHJh
Y2VyLkVuZ2luZS5wcm90b3R5cGUgPSB7CisgICAgY2FudmFzOiBudWxsLCAvKiAyZCBjb250ZXh0
IHdlIGNhbiByZW5kZXIgdG8gKi8KKworICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKG9wdGlvbnMp
eworICAgICAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuZXh0ZW5kKHsKKyAgICAgICAgICAgICAg
ICBjYW52YXNIZWlnaHQ6IDEwMCwKKyAgICAgICAgICAgICAgICBjYW52YXNXaWR0aDogMTAwLAor
ICAgICAgICAgICAgICAgIHBpeGVsV2lkdGg6IDIsCisgICAgICAgICAgICAgICAgcGl4ZWxIZWln
aHQ6IDIsCisgICAgICAgICAgICAgICAgcmVuZGVyRGlmZnVzZTogZmFsc2UsCisgICAgICAgICAg
ICAgICAgcmVuZGVyU2hhZG93czogZmFsc2UsCisgICAgICAgICAgICAgICAgcmVuZGVySGlnaGxp
Z2h0czogZmFsc2UsCisgICAgICAgICAgICAgICAgcmVuZGVyUmVmbGVjdGlvbnM6IGZhbHNlLAor
ICAgICAgICAgICAgICAgIHJheURlcHRoOiAyCisgICAgICAgICAgICB9LCBvcHRpb25zIHx8IHt9
KTsKKworICAgICAgICB0aGlzLm9wdGlvbnMuY2FudmFzSGVpZ2h0IC89IHRoaXMub3B0aW9ucy5w
aXhlbEhlaWdodDsKKyAgICAgICAgdGhpcy5vcHRpb25zLmNhbnZhc1dpZHRoIC89IHRoaXMub3B0
aW9ucy5waXhlbFdpZHRoOworCisgICAgICAgIC8qIFRPRE86IGR5bmFtaWNhbGx5IGluY2x1ZGUg
b3RoZXIgc2NyaXB0cyAqLworICAgIH0sCisKKyAgICBzZXRQaXhlbDogZnVuY3Rpb24oeCwgeSwg
Y29sb3IpeworICAgICAgICB2YXIgcHhXLCBweEg7CisgICAgICAgIHB4VyA9IHRoaXMub3B0aW9u
cy5waXhlbFdpZHRoOworICAgICAgICBweEggPSB0aGlzLm9wdGlvbnMucGl4ZWxIZWlnaHQ7CisK
KyAgICAgICAgaWYgKHRoaXMuY2FudmFzKSB7CisgICAgICAgICAgdGhpcy5jYW52YXMuZmlsbFN0
eWxlID0gY29sb3IudG9TdHJpbmcoKTsKKyAgICAgICAgICB0aGlzLmNhbnZhcy5maWxsUmVjdCAo
eCAqIHB4VywgeSAqIHB4SCwgcHhXLCBweEgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
IC8vIHByaW50KHggKiBweFcsIHkgKiBweEgsIHB4VywgcHhIKTsKKyAgICAgICAgfQorICAgIH0s
CisKKyAgICByZW5kZXJTY2VuZTogZnVuY3Rpb24oc2NlbmUsIGNhbnZhcyl7CisgICAgICAgIC8q
IEdldCBjYW52YXMgKi8KKyAgICAgICAgaWYgKGNhbnZhcykgeworICAgICAgICAgIHRoaXMuY2Fu
dmFzID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgdGhpcy5jYW52YXMgPSBudWxsOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGNhbnZhc0hl
aWdodCA9IHRoaXMub3B0aW9ucy5jYW52YXNIZWlnaHQ7CisgICAgICAgIHZhciBjYW52YXNXaWR0
aCA9IHRoaXMub3B0aW9ucy5jYW52YXNXaWR0aDsKKworICAgICAgICBmb3IodmFyIHk9MDsgeSA8
IGNhbnZhc0hlaWdodDsgeSsrKXsKKyAgICAgICAgICAgIGZvcih2YXIgeD0wOyB4IDwgY2FudmFz
V2lkdGg7IHgrKyl7CisgICAgICAgICAgICAgICAgdmFyIHlwID0geSAqIDEuMCAvIGNhbnZhc0hl
aWdodCAqIDIgLSAxOworICAgICAgICAgIAkJdmFyIHhwID0geCAqIDEuMCAvIGNhbnZhc1dpZHRo
ICogMiAtIDE7CisKKyAgICAgICAgICAJCXZhciByYXkgPSBzY2VuZS5jYW1lcmEuZ2V0UmF5KHhw
LCB5cCk7CisKKyAgICAgICAgICAJCXZhciBjb2xvciA9IHRoaXMuZ2V0UGl4ZWxDb2xvcihyYXks
IHNjZW5lKTsKKworICAgICAgICAgICAgCXRoaXMuc2V0UGl4ZWwoeCwgeSwgY29sb3IpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfSwKKworICAgIGdldFBpeGVsQ29sb3I6IGZ1bmN0
aW9uKHJheSwgc2NlbmUpeworICAgICAgICB2YXIgaW5mbyA9IHRoaXMudGVzdEludGVyc2VjdGlv
bihyYXksIHNjZW5lLCBudWxsKTsKKyAgICAgICAgaWYoaW5mby5pc0hpdCl7CisgICAgICAgICAg
ICB2YXIgY29sb3IgPSB0aGlzLnJheVRyYWNlKGluZm8sIHJheSwgc2NlbmUsIDApOworICAgICAg
ICAgICAgcmV0dXJuIGNvbG9yOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzY2VuZS5iYWNr
Z3JvdW5kLmNvbG9yOworICAgIH0sCisKKyAgICB0ZXN0SW50ZXJzZWN0aW9uOiBmdW5jdGlvbihy
YXksIHNjZW5lLCBleGNsdWRlKXsKKyAgICAgICAgdmFyIGhpdHMgPSAwOworICAgICAgICB2YXIg
YmVzdCA9IG5ldyBGbG9nLlJheVRyYWNlci5JbnRlcnNlY3Rpb25JbmZvKCk7CisgICAgICAgIGJl
c3QuZGlzdGFuY2UgPSAyMDAwOworCisgICAgICAgIGZvcih2YXIgaT0wOyBpPHNjZW5lLnNoYXBl
cy5sZW5ndGg7IGkrKyl7CisgICAgICAgICAgICB2YXIgc2hhcGUgPSBzY2VuZS5zaGFwZXNbaV07
CisKKyAgICAgICAgICAgIGlmKHNoYXBlICE9IGV4Y2x1ZGUpeworICAgICAgICAgICAgICAgIHZh
ciBpbmZvID0gc2hhcGUuaW50ZXJzZWN0KHJheSk7CisgICAgICAgICAgICAgICAgaWYoaW5mby5p
c0hpdCAmJiBpbmZvLmRpc3RhbmNlID49IDAgJiYgaW5mby5kaXN0YW5jZSA8IGJlc3QuZGlzdGFu
Y2UpeworICAgICAgICAgICAgICAgICAgICBiZXN0ID0gaW5mbzsKKyAgICAgICAgICAgICAgICAg
ICAgaGl0cysrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBiZXN0LmhpdENvdW50ID0gaGl0czsKKyAgICAgICAgcmV0dXJuIGJlc3Q7CisgICAg
fSwKKworICAgIGdldFJlZmxlY3Rpb25SYXk6IGZ1bmN0aW9uKFAsTixWKXsKKyAgICAgICAgdmFy
IGMxID0gLU4uZG90KFYpOworICAgICAgICB2YXIgUjEgPSBGbG9nLlJheVRyYWNlci5WZWN0b3Iu
cHJvdG90eXBlLmFkZCgKKyAgICAgICAgICAgIEZsb2cuUmF5VHJhY2VyLlZlY3Rvci5wcm90b3R5
cGUubXVsdGlwbHlTY2FsYXIoTiwgMipjMSksCisgICAgICAgICAgICBWCisgICAgICAgICk7Cisg
ICAgICAgIHJldHVybiBuZXcgRmxvZy5SYXlUcmFjZXIuUmF5KFAsIFIxKTsKKyAgICB9LAorCisg
ICAgcmF5VHJhY2U6IGZ1bmN0aW9uKGluZm8sIHJheSwgc2NlbmUsIGRlcHRoKXsKKyAgICAgICAg
Ly8gQ2FsYyBhbWJpZW50CisgICAgICAgIHZhciBjb2xvciA9IEZsb2cuUmF5VHJhY2VyLkNvbG9y
LnByb3RvdHlwZS5tdWx0aXBseVNjYWxhcihpbmZvLmNvbG9yLCBzY2VuZS5iYWNrZ3JvdW5kLmFt
YmllbmNlKTsKKyAgICAgICAgdmFyIG9sZENvbG9yID0gY29sb3I7CisgICAgICAgIHZhciBzaGlu
aW5lc3MgPSBNYXRoLnBvdygxMCwgaW5mby5zaGFwZS5tYXRlcmlhbC5nbG9zcyArIDEpOworCisg
ICAgICAgIGZvcih2YXIgaT0wOyBpPHNjZW5lLmxpZ2h0cy5sZW5ndGg7IGkrKyl7CisgICAgICAg
ICAgICB2YXIgbGlnaHQgPSBzY2VuZS5saWdodHNbaV07CisKKyAgICAgICAgICAgIC8vIENhbGMg
ZGlmZnVzZSBsaWdodGluZworICAgICAgICAgICAgdmFyIHYgPSBGbG9nLlJheVRyYWNlci5WZWN0
b3IucHJvdG90eXBlLnN1YnRyYWN0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
aWdodC5wb3NpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5wb3Np
dGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICkubm9ybWFsaXplKCk7CisKKyAgICAg
ICAgICAgIGlmKHRoaXMub3B0aW9ucy5yZW5kZXJEaWZmdXNlKXsKKyAgICAgICAgICAgICAgICB2
YXIgTCA9IHYuZG90KGluZm8ubm9ybWFsKTsKKyAgICAgICAgICAgICAgICBpZihMID4gMC4wKXsK
KyAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBGbG9nLlJheVRyYWNlci5Db2xvci5wcm90b3R5
cGUuYWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2cuUmF5VHJhY2VyLkNv
bG9yLnByb3RvdHlwZS5tdWx0aXBseSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5mby5jb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRmxvZy5SYXlUcmFjZXIuQ29sb3IucHJvdG90eXBlLm11bHRpcGx5U2NhbGFy
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHQu
Y29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBM
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gVGhlIGdyZWF0ZXIgdGhlIGRlcHRoIHRoZSBtb3JlIGFjY3VyYXRlIHRoZSBj
b2xvdXJzLCBidXQKKyAgICAgICAgICAgIC8vIHRoaXMgaXMgZXhwb25lbnRpYWxseSAoISkgZXhw
ZW5zaXZlCisgICAgICAgICAgICBpZihkZXB0aCA8PSB0aGlzLm9wdGlvbnMucmF5RGVwdGgpewor
ICAgICAgICAgIC8vIGNhbGN1bGF0ZSByZWZsZWN0aW9uIHJheQorICAgICAgICAgIGlmKHRoaXMu
b3B0aW9ucy5yZW5kZXJSZWZsZWN0aW9ucyAmJiBpbmZvLnNoYXBlLm1hdGVyaWFsLnJlZmxlY3Rp
b24gPiAwKQorICAgICAgICAgIHsKKyAgICAgICAgICAgICAgdmFyIHJlZmxlY3Rpb25SYXkgPSB0
aGlzLmdldFJlZmxlY3Rpb25SYXkoaW5mby5wb3NpdGlvbiwgaW5mby5ub3JtYWwsIHJheS5kaXJl
Y3Rpb24pOworICAgICAgICAgICAgICB2YXIgcmVmbCA9IHRoaXMudGVzdEludGVyc2VjdGlvbihy
ZWZsZWN0aW9uUmF5LCBzY2VuZSwgaW5mby5zaGFwZSk7CisKKyAgICAgICAgICAgICAgaWYgKHJl
ZmwuaXNIaXQgJiYgcmVmbC5kaXN0YW5jZSA+IDApeworICAgICAgICAgICAgICAgICAgcmVmbC5j
b2xvciA9IHRoaXMucmF5VHJhY2UocmVmbCwgcmVmbGVjdGlvblJheSwgc2NlbmUsIGRlcHRoICsg
MSk7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICByZWZsLmNvbG9y
ID0gc2NlbmUuYmFja2dyb3VuZC5jb2xvcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgY29sb3IgPSBGbG9nLlJheVRyYWNlci5Db2xvci5wcm90b3R5cGUu
YmxlbmQoCisgICAgICAgICAgICAgICAgICAgIGNvbG9yLAorICAgICAgICAgICAgICAgICAgICBy
ZWZsLmNvbG9yLAorICAgICAgICAgICAgICAgICAgICBpbmZvLnNoYXBlLm1hdGVyaWFsLnJlZmxl
Y3Rpb24KKyAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgLy8gUmVmcmFjdGlvbgorICAgICAgICAgICAgICAgIC8qIFRPRE8gKi8KKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLyogUmVuZGVyIHNoYWRvd3MgYW5kIGhpZ2hsaWdodHMgKi8KKwor
ICAgICAgICAgICAgdmFyIHNoYWRvd0luZm8gPSBuZXcgRmxvZy5SYXlUcmFjZXIuSW50ZXJzZWN0
aW9uSW5mbygpOworCisgICAgICAgICAgICBpZih0aGlzLm9wdGlvbnMucmVuZGVyU2hhZG93cyl7
CisgICAgICAgICAgICAgICAgdmFyIHNoYWRvd1JheSA9IG5ldyBGbG9nLlJheVRyYWNlci5SYXko
aW5mby5wb3NpdGlvbiwgdik7CisKKyAgICAgICAgICAgICAgICBzaGFkb3dJbmZvID0gdGhpcy50
ZXN0SW50ZXJzZWN0aW9uKHNoYWRvd1JheSwgc2NlbmUsIGluZm8uc2hhcGUpOworICAgICAgICAg
ICAgICAgIGlmKHNoYWRvd0luZm8uaXNIaXQgJiYgc2hhZG93SW5mby5zaGFwZSAhPSBpbmZvLnNo
YXBlIC8qJiYgc2hhZG93SW5mby5zaGFwZS50eXBlICE9ICdQTEFORScqLyl7CisgICAgICAgICAg
ICAgICAgICAgIHZhciB2QSA9IEZsb2cuUmF5VHJhY2VyLkNvbG9yLnByb3RvdHlwZS5tdWx0aXBs
eVNjYWxhcihjb2xvciwgMC41KTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGRCID0gKDAuNSAq
IE1hdGgucG93KHNoYWRvd0luZm8uc2hhcGUubWF0ZXJpYWwudHJhbnNwYXJlbmN5LCAwLjUpKTsK
KyAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBGbG9nLlJheVRyYWNlci5Db2xvci5wcm90b3R5
cGUuYWRkU2NhbGFyKHZBLGRCKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgIC8vIFBob25nIHNwZWN1bGFyIGhpZ2hsaWdodHMKKyAgICAgIGlmKHRoaXMub3B0aW9u
cy5yZW5kZXJIaWdobGlnaHRzICYmICFzaGFkb3dJbmZvLmlzSGl0ICYmIGluZm8uc2hhcGUubWF0
ZXJpYWwuZ2xvc3MgPiAwKXsKKyAgICAgICAgdmFyIEx2ID0gRmxvZy5SYXlUcmFjZXIuVmVjdG9y
LnByb3RvdHlwZS5zdWJ0cmFjdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLnNo
YXBlLnBvc2l0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZ2h0LnBvc2l0aW9u
CisgICAgICAgICAgICAgICAgICAgICAgICApLm5vcm1hbGl6ZSgpOworCisgICAgICAgIHZhciBF
ID0gRmxvZy5SYXlUcmFjZXIuVmVjdG9yLnByb3RvdHlwZS5zdWJ0cmFjdCgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzY2VuZS5jYW1lcmEucG9zaXRpb24sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5mby5zaGFwZS5wb3NpdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAg
KS5ub3JtYWxpemUoKTsKKworICAgICAgICB2YXIgSCA9IEZsb2cuUmF5VHJhY2VyLlZlY3Rvci5w
cm90b3R5cGUuc3VidHJhY3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBMdgorICAgICAgICAgICAgICAgICAgICAgICAgKS5ub3Jt
YWxpemUoKTsKKworICAgICAgICB2YXIgZ2xvc3NXZWlnaHQgPSBNYXRoLnBvdyhNYXRoLm1heChp
bmZvLm5vcm1hbC5kb3QoSCksIDApLCBzaGluaW5lc3MpOworICAgICAgICBjb2xvciA9IEZsb2cu
UmF5VHJhY2VyLkNvbG9yLnByb3RvdHlwZS5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRmxvZy5SYXlUcmFjZXIuQ29sb3IucHJvdG90eXBlLm11bHRpcGx5U2NhbGFyKGxpZ2h0LmNv
bG9yLCBnbG9zc1dlaWdodCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IKKyAg
ICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY29s
b3IubGltaXQoKTsKKyAgICAgICAgcmV0dXJuIGNvbG9yOworICAgIH0KK307CisKKworZnVuY3Rp
b24gcmVuZGVyU2NlbmUoKXsKKyAgICB2YXIgc2NlbmUgPSBuZXcgRmxvZy5SYXlUcmFjZXIuU2Nl
bmUoKTsKKworICAgIHNjZW5lLmNhbWVyYSA9IG5ldyBGbG9nLlJheVRyYWNlci5DYW1lcmEoCisg
ICAgICAgICAgICAgICAgICAgICAgICBuZXcgRmxvZy5SYXlUcmFjZXIuVmVjdG9yKDAsIDAsIC0x
NSksCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRmxvZy5SYXlUcmFjZXIuVmVjdG9yKC0w
LjIsIDAsIDUpLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZsb2cuUmF5VHJhY2VyLlZl
Y3RvcigwLCAxLCAwKQorICAgICAgICAgICAgICAgICAgICApOworCisgICAgc2NlbmUuYmFja2dy
b3VuZCA9IG5ldyBGbG9nLlJheVRyYWNlci5CYWNrZ3JvdW5kKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuZXcgRmxvZy5SYXlUcmFjZXIuQ29sb3IoMC41LCAwLjUsIDAuNSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICk7CisKKyAgICB2YXIgc3BoZXJlID0gbmV3IEZsb2cuUmF5VHJhY2VyLlNoYXBlLlNw
aGVyZSgKKyAgICAgICAgbmV3IEZsb2cuUmF5VHJhY2VyLlZlY3RvcigtMS41LCAxLjUsIDIpLAor
ICAgICAgICAxLjUsCisgICAgICAgIG5ldyBGbG9nLlJheVRyYWNlci5NYXRlcmlhbC5Tb2xpZCgK
KyAgICAgICAgICAgIG5ldyBGbG9nLlJheVRyYWNlci5Db2xvcigwLDAuNSwwLjUpLAorICAgICAg
ICAgICAgMC4zLAorICAgICAgICAgICAgMC4wLAorICAgICAgICAgICAgMC4wLAorICAgICAgICAg
ICAgMi4wCisgICAgICAgICkKKyAgICApOworCisgICAgdmFyIHNwaGVyZTEgPSBuZXcgRmxvZy5S
YXlUcmFjZXIuU2hhcGUuU3BoZXJlKAorICAgICAgICBuZXcgRmxvZy5SYXlUcmFjZXIuVmVjdG9y
KDEsIDAuMjUsIDEpLAorICAgICAgICAwLjUsCisgICAgICAgIG5ldyBGbG9nLlJheVRyYWNlci5N
YXRlcmlhbC5Tb2xpZCgKKyAgICAgICAgICAgIG5ldyBGbG9nLlJheVRyYWNlci5Db2xvcigwLjks
MC45LDAuOSksCisgICAgICAgICAgICAwLjEsCisgICAgICAgICAgICAwLjAsCisgICAgICAgICAg
ICAwLjAsCisgICAgICAgICAgICAxLjUKKyAgICAgICAgKQorICAgICk7CisKKyAgICB2YXIgcGxh
bmUgPSBuZXcgRmxvZy5SYXlUcmFjZXIuU2hhcGUuUGxhbmUoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5ldyBGbG9nLlJheVRyYWNlci5WZWN0b3IoMC4xLCAwLjksIC0wLjUpLm5v
cm1hbGl6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGbG9nLlJheVRyYWNlci5NYXRlcmlhbC5DaGVz
c2JvYXJkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZsb2cuUmF5
VHJhY2VyLkNvbG9yKDEsMSwxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5ldyBGbG9nLlJheVRyYWNlci5Db2xvcigwLDAsMCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLjIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjAsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLjcKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBzY2VuZS5zaGFw
ZXMucHVzaChwbGFuZSk7CisgICAgc2NlbmUuc2hhcGVzLnB1c2goc3BoZXJlKTsKKyAgICBzY2Vu
ZS5zaGFwZXMucHVzaChzcGhlcmUxKTsKKworICAgIHZhciBsaWdodCA9IG5ldyBGbG9nLlJheVRy
YWNlci5MaWdodCgKKyAgICAgICAgbmV3IEZsb2cuUmF5VHJhY2VyLlZlY3Rvcig1LCAxMCwgLTEp
LAorICAgICAgICBuZXcgRmxvZy5SYXlUcmFjZXIuQ29sb3IoMC44LCAwLjgsIDAuOCkKKyAgICAp
OworCisgICAgdmFyIGxpZ2h0MSA9IG5ldyBGbG9nLlJheVRyYWNlci5MaWdodCgKKyAgICAgICAg
bmV3IEZsb2cuUmF5VHJhY2VyLlZlY3RvcigtMywgNSwgLTE1KSwKKyAgICAgICAgbmV3IEZsb2cu
UmF5VHJhY2VyLkNvbG9yKDAuOCwgMC44LCAwLjgpLAorICAgICAgICAxMDAKKyAgICApOworCisg
ICAgc2NlbmUubGlnaHRzLnB1c2gobGlnaHQpOworICAgIHNjZW5lLmxpZ2h0cy5wdXNoKGxpZ2h0
MSk7CisKKyAgICB2YXIgaW1hZ2VXaWR0aCA9IDEwMDsgLy8gJEYoJ2ltYWdlV2lkdGgnKTsKKyAg
ICB2YXIgaW1hZ2VIZWlnaHQgPSAxMDA7IC8vICRGKCdpbWFnZUhlaWdodCcpOworICAgIHZhciBw
aXhlbFNpemUgPSAiNSw1Ii5zcGxpdCgnLCcpOyAvLyAgJEYoJ3BpeGVsU2l6ZScpLnNwbGl0KCcs
Jyk7CisgICAgdmFyIHJlbmRlckRpZmZ1c2UgPSB0cnVlOyAvLyAkRigncmVuZGVyRGlmZnVzZScp
OworICAgIHZhciByZW5kZXJTaGFkb3dzID0gdHJ1ZTsgLy8gJEYoJ3JlbmRlclNoYWRvd3MnKTsK
KyAgICB2YXIgcmVuZGVySGlnaGxpZ2h0cyA9IHRydWU7IC8vICRGKCdyZW5kZXJIaWdobGlnaHRz
Jyk7CisgICAgdmFyIHJlbmRlclJlZmxlY3Rpb25zID0gdHJ1ZTsgLy8gJEYoJ3JlbmRlclJlZmxl
Y3Rpb25zJyk7CisgICAgdmFyIHJheURlcHRoID0gMjsvLyRGKCdyYXlEZXB0aCcpOworCisgICAg
dmFyIHJheXRyYWNlciA9IG5ldyBGbG9nLlJheVRyYWNlci5FbmdpbmUoCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNhbnZhc1dpZHRoOiBpbWFnZVdpZHRoLAorICAgICAgICAgICAgY2FudmFzSGVp
Z2h0OiBpbWFnZUhlaWdodCwKKyAgICAgICAgICAgIHBpeGVsV2lkdGg6IHBpeGVsU2l6ZVswXSwK
KyAgICAgICAgICAgIHBpeGVsSGVpZ2h0OiBwaXhlbFNpemVbMV0sCisgICAgICAgICAgICAicmVu
ZGVyRGlmZnVzZSI6IHJlbmRlckRpZmZ1c2UsCisgICAgICAgICAgICAicmVuZGVySGlnaGxpZ2h0
cyI6IHJlbmRlckhpZ2hsaWdodHMsCisgICAgICAgICAgICAicmVuZGVyU2hhZG93cyI6IHJlbmRl
clNoYWRvd3MsCisgICAgICAgICAgICAicmVuZGVyUmVmbGVjdGlvbnMiOiByZW5kZXJSZWZsZWN0
aW9ucywKKyAgICAgICAgICAgICJyYXlEZXB0aCI6IHJheURlcHRoCisgICAgICAgIH0KKyAgICAp
OworCisgICAgcmF5dHJhY2VyLnJlbmRlclNjZW5lKHNjZW5lLCBudWxsLCAwKTsKK30KKworZm9y
ICh2YXIgaSA9IDA7IGkgPCA2OyArK2kpCisgIHJlbmRlclNjZW5lKCk7CkluZGV4OiBTdW5TcGlk
ZXIvdGVzdHMvdjgtcmljaGFyZHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU3VuU3BpZGVyL3Rlc3RzL3Y4
LXJpY2hhcmRzLmpzCShyZXZpc2lvbiAwKQorKysgU3VuU3BpZGVyL3Rlc3RzL3Y4LXJpY2hhcmRz
LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUzNiBAQAorLy8gQ29weXJpZ2h0IDIwMDcgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8g
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKKy8v
IFRoaXMgaXMgYSBKYXZhU2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBSaWNoYXJkcworLy8g
YmVuY2htYXJrIGZyb206CisvLworLy8gICAgaHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfm1yMTAv
QmVuY2guaHRtbAorLy8gCisvLyBUaGUgYmVuY2htYXJrIHdhcyBvcmlnaW5hbGx5IGltcGxlbWVu
dGVkIGluIEJDUEwgYnkKKy8vIE1hcnRpbiBSaWNoYXJkcy4KKworLyoqCisgKiBUaGUgUmljaGFy
ZHMgYmVuY2htYXJrIHNpbXVsYXRlcyB0aGUgdGFzayBkaXNwYXRjaGVyIG9mIGFuCisgKiBvcGVy
YXRpbmcgc3lzdGVtLgorICoqLworZnVuY3Rpb24gcnVuUmljaGFyZHMoKSB7CisgIHZhciBzY2hl
ZHVsZXIgPSBuZXcgU2NoZWR1bGVyKCk7CisgIHNjaGVkdWxlci5hZGRJZGxlVGFzayhJRF9JRExF
LCAwLCBudWxsLCBDT1VOVCk7CisKKyAgdmFyIHF1ZXVlID0gbmV3IFBhY2tldChudWxsLCBJRF9X
T1JLRVIsIEtJTkRfV09SSyk7CisgIHF1ZXVlID0gbmV3IFBhY2tldChxdWV1ZSwgIElEX1dPUktF
UiwgS0lORF9XT1JLKTsKKyAgc2NoZWR1bGVyLmFkZFdvcmtlclRhc2soSURfV09SS0VSLCAxMDAw
LCBxdWV1ZSk7CisKKyAgcXVldWUgPSBuZXcgUGFja2V0KG51bGwsIElEX0RFVklDRV9BLCBLSU5E
X0RFVklDRSk7CisgIHF1ZXVlID0gbmV3IFBhY2tldChxdWV1ZSwgIElEX0RFVklDRV9BLCBLSU5E
X0RFVklDRSk7CisgIHF1ZXVlID0gbmV3IFBhY2tldChxdWV1ZSwgIElEX0RFVklDRV9BLCBLSU5E
X0RFVklDRSk7CisgIHNjaGVkdWxlci5hZGRIYW5kbGVyVGFzayhJRF9IQU5ETEVSX0EsIDIwMDAs
IHF1ZXVlKTsKKworICBxdWV1ZSA9IG5ldyBQYWNrZXQobnVsbCwgSURfREVWSUNFX0IsIEtJTkRf
REVWSUNFKTsKKyAgcXVldWUgPSBuZXcgUGFja2V0KHF1ZXVlLCAgSURfREVWSUNFX0IsIEtJTkRf
REVWSUNFKTsKKyAgcXVldWUgPSBuZXcgUGFja2V0KHF1ZXVlLCAgSURfREVWSUNFX0IsIEtJTkRf
REVWSUNFKTsKKyAgc2NoZWR1bGVyLmFkZEhhbmRsZXJUYXNrKElEX0hBTkRMRVJfQiwgMzAwMCwg
cXVldWUpOworCisgIHNjaGVkdWxlci5hZGREZXZpY2VUYXNrKElEX0RFVklDRV9BLCA0MDAwLCBu
dWxsKTsKKworICBzY2hlZHVsZXIuYWRkRGV2aWNlVGFzayhJRF9ERVZJQ0VfQiwgNTAwMCwgbnVs
bCk7CisKKyAgc2NoZWR1bGVyLnNjaGVkdWxlKCk7CisKKyAgaWYgKHNjaGVkdWxlci5xdWV1ZUNv
dW50ICE9IEVYUEVDVEVEX1FVRVVFX0NPVU5UIHx8CisgICAgICBzY2hlZHVsZXIuaG9sZENvdW50
ICE9IEVYUEVDVEVEX0hPTERfQ09VTlQpIHsKKyAgICB2YXIgbXNnID0KKyAgICAgICAgIkVycm9y
IGR1cmluZyBleGVjdXRpb246IHF1ZXVlQ291bnQgPSAiICsgc2NoZWR1bGVyLnF1ZXVlQ291bnQg
KworICAgICAgICAiLCBob2xkQ291bnQgPSAiICsgc2NoZWR1bGVyLmhvbGRDb3VudCArICIuIjsK
KyAgICBwcmludChtc2cpOworICB9Cit9CisKK3ZhciBDT1VOVCA9IDEwMDA7CisKKy8qKgorICog
VGhlc2UgdHdvIGNvbnN0YW50cyBzcGVjaWZ5IGhvdyBtYW55IHRpbWVzIGEgcGFja2V0IGlzIHF1
ZXVlZCBhbmQKKyAqIGhvdyBtYW55IHRpbWVzIGEgdGFzayBpcyBwdXQgb24gaG9sZCBpbiBhIGNv
cnJlY3QgcnVuIG9mIHJpY2hhcmRzLgorICogVGhleSBkb24ndCBoYXZlIGFueSBtZWFuaW5nIGEg
c3VjaCBidXQgYXJlIGNoYXJhY3RlcmlzdGljIG9mIGEKKyAqIGNvcnJlY3QgcnVuIHNvIGlmIHRo
ZSBhY3R1YWwgcXVldWUgb3IgaG9sZCBjb3VudCBpcyBkaWZmZXJlbnQgZnJvbQorICogdGhlIGV4
cGVjdGVkIHRoZXJlIG11c3QgYmUgYSBidWcgaW4gdGhlIGltcGxlbWVudGF0aW9uLgorICoqLwor
dmFyIEVYUEVDVEVEX1FVRVVFX0NPVU5UID0gMjMyMjsKK3ZhciBFWFBFQ1RFRF9IT0xEX0NPVU5U
ID0gOTI4OworCisKKy8qKgorICogQSBzY2hlZHVsZXIgY2FuIGJlIHVzZWQgdG8gc2NoZWR1bGUg
YSBzZXQgb2YgdGFza3MgYmFzZWQgb24gdGhlaXIgcmVsYXRpdmUKKyAqIHByaW9yaXRpZXMuICBT
Y2hlZHVsaW5nIGlzIGRvbmUgYnkgbWFpbnRhaW5pbmcgYSBsaXN0IG9mIHRhc2sgY29udHJvbCBi
bG9ja3MKKyAqIHdoaWNoIGhvbGRzIHRhc2tzIGFuZCB0aGUgZGF0YSBxdWV1ZSB0aGV5IGFyZSBw
cm9jZXNzaW5nLgorICogQGNvbnN0cnVjdG9yCisgKi8KK2Z1bmN0aW9uIFNjaGVkdWxlcigpIHsK
KyAgdGhpcy5xdWV1ZUNvdW50ID0gMDsKKyAgdGhpcy5ob2xkQ291bnQgPSAwOworICB0aGlzLmJs
b2NrcyA9IG5ldyBBcnJheShOVU1CRVJfT0ZfSURTKTsKKyAgdGhpcy5saXN0ID0gbnVsbDsKKyAg
dGhpcy5jdXJyZW50VGNiID0gbnVsbDsKKyAgdGhpcy5jdXJyZW50SWQgPSBudWxsOworfQorCit2
YXIgSURfSURMRSAgICAgICA9IDA7Cit2YXIgSURfV09SS0VSICAgICA9IDE7Cit2YXIgSURfSEFO
RExFUl9BICA9IDI7Cit2YXIgSURfSEFORExFUl9CICA9IDM7Cit2YXIgSURfREVWSUNFX0EgICA9
IDQ7Cit2YXIgSURfREVWSUNFX0IgICA9IDU7Cit2YXIgTlVNQkVSX09GX0lEUyA9IDY7CisKK3Zh
ciBLSU5EX0RFVklDRSAgID0gMDsKK3ZhciBLSU5EX1dPUksgICAgID0gMTsKKworLyoqCisgKiBB
ZGQgYW4gaWRsZSB0YXNrIHRvIHRoaXMgc2NoZWR1bGVyLgorICogQHBhcmFtIHtpbnR9IGlkIHRo
ZSBpZGVudGl0eSBvZiB0aGUgdGFzaworICogQHBhcmFtIHtpbnR9IHByaW9yaXR5IHRoZSB0YXNr
J3MgcHJpb3JpdHkKKyAqIEBwYXJhbSB7UGFja2V0fSBxdWV1ZSB0aGUgcXVldWUgb2Ygd29yayB0
byBiZSBwcm9jZXNzZWQgYnkgdGhlIHRhc2sKKyAqIEBwYXJhbSB7aW50fSBjb3VudCB0aGUgbnVt
YmVyIG9mIHRpbWVzIHRvIHNjaGVkdWxlIHRoZSB0YXNrCisgKi8KK1NjaGVkdWxlci5wcm90b3R5
cGUuYWRkSWRsZVRhc2sgPSBmdW5jdGlvbiAoaWQsIHByaW9yaXR5LCBxdWV1ZSwgY291bnQpIHsK
KyAgdGhpcy5hZGRSdW5uaW5nVGFzayhpZCwgcHJpb3JpdHksIHF1ZXVlLCBuZXcgSWRsZVRhc2so
dGhpcywgMSwgY291bnQpKTsKK307CisKKy8qKgorICogQWRkIGEgd29yayB0YXNrIHRvIHRoaXMg
c2NoZWR1bGVyLgorICogQHBhcmFtIHtpbnR9IGlkIHRoZSBpZGVudGl0eSBvZiB0aGUgdGFzawor
ICogQHBhcmFtIHtpbnR9IHByaW9yaXR5IHRoZSB0YXNrJ3MgcHJpb3JpdHkKKyAqIEBwYXJhbSB7
UGFja2V0fSBxdWV1ZSB0aGUgcXVldWUgb2Ygd29yayB0byBiZSBwcm9jZXNzZWQgYnkgdGhlIHRh
c2sKKyAqLworU2NoZWR1bGVyLnByb3RvdHlwZS5hZGRXb3JrZXJUYXNrID0gZnVuY3Rpb24gKGlk
LCBwcmlvcml0eSwgcXVldWUpIHsKKyAgdGhpcy5hZGRUYXNrKGlkLCBwcmlvcml0eSwgcXVldWUs
IG5ldyBXb3JrZXJUYXNrKHRoaXMsIElEX0hBTkRMRVJfQSwgMCkpOworfTsKKworLyoqCisgKiBB
ZGQgYSBoYW5kbGVyIHRhc2sgdG8gdGhpcyBzY2hlZHVsZXIuCisgKiBAcGFyYW0ge2ludH0gaWQg
dGhlIGlkZW50aXR5IG9mIHRoZSB0YXNrCisgKiBAcGFyYW0ge2ludH0gcHJpb3JpdHkgdGhlIHRh
c2sncyBwcmlvcml0eQorICogQHBhcmFtIHtQYWNrZXR9IHF1ZXVlIHRoZSBxdWV1ZSBvZiB3b3Jr
IHRvIGJlIHByb2Nlc3NlZCBieSB0aGUgdGFzaworICovCitTY2hlZHVsZXIucHJvdG90eXBlLmFk
ZEhhbmRsZXJUYXNrID0gZnVuY3Rpb24gKGlkLCBwcmlvcml0eSwgcXVldWUpIHsKKyAgdGhpcy5h
ZGRUYXNrKGlkLCBwcmlvcml0eSwgcXVldWUsIG5ldyBIYW5kbGVyVGFzayh0aGlzKSk7Cit9Owor
CisvKioKKyAqIEFkZCBhIGhhbmRsZXIgdGFzayB0byB0aGlzIHNjaGVkdWxlci4KKyAqIEBwYXJh
bSB7aW50fSBpZCB0aGUgaWRlbnRpdHkgb2YgdGhlIHRhc2sKKyAqIEBwYXJhbSB7aW50fSBwcmlv
cml0eSB0aGUgdGFzaydzIHByaW9yaXR5CisgKiBAcGFyYW0ge1BhY2tldH0gcXVldWUgdGhlIHF1
ZXVlIG9mIHdvcmsgdG8gYmUgcHJvY2Vzc2VkIGJ5IHRoZSB0YXNrCisgKi8KK1NjaGVkdWxlci5w
cm90b3R5cGUuYWRkRGV2aWNlVGFzayA9IGZ1bmN0aW9uIChpZCwgcHJpb3JpdHksIHF1ZXVlKSB7
CisgIHRoaXMuYWRkVGFzayhpZCwgcHJpb3JpdHksIHF1ZXVlLCBuZXcgRGV2aWNlVGFzayh0aGlz
KSkKK307CisKKy8qKgorICogQWRkIHRoZSBzcGVjaWZpZWQgdGFzayBhbmQgbWFyayBpdCBhcyBy
dW5uaW5nLgorICogQHBhcmFtIHtpbnR9IGlkIHRoZSBpZGVudGl0eSBvZiB0aGUgdGFzaworICog
QHBhcmFtIHtpbnR9IHByaW9yaXR5IHRoZSB0YXNrJ3MgcHJpb3JpdHkKKyAqIEBwYXJhbSB7UGFj
a2V0fSBxdWV1ZSB0aGUgcXVldWUgb2Ygd29yayB0byBiZSBwcm9jZXNzZWQgYnkgdGhlIHRhc2sK
KyAqIEBwYXJhbSB7VGFza30gdGFzayB0aGUgdGFzayB0byBhZGQKKyAqLworU2NoZWR1bGVyLnBy
b3RvdHlwZS5hZGRSdW5uaW5nVGFzayA9IGZ1bmN0aW9uIChpZCwgcHJpb3JpdHksIHF1ZXVlLCB0
YXNrKSB7CisgIHRoaXMuYWRkVGFzayhpZCwgcHJpb3JpdHksIHF1ZXVlLCB0YXNrKTsKKyAgdGhp
cy5jdXJyZW50VGNiLnNldFJ1bm5pbmcoKTsKK307CisKKy8qKgorICogQWRkIHRoZSBzcGVjaWZp
ZWQgdGFzayB0byB0aGlzIHNjaGVkdWxlci4KKyAqIEBwYXJhbSB7aW50fSBpZCB0aGUgaWRlbnRp
dHkgb2YgdGhlIHRhc2sKKyAqIEBwYXJhbSB7aW50fSBwcmlvcml0eSB0aGUgdGFzaydzIHByaW9y
aXR5CisgKiBAcGFyYW0ge1BhY2tldH0gcXVldWUgdGhlIHF1ZXVlIG9mIHdvcmsgdG8gYmUgcHJv
Y2Vzc2VkIGJ5IHRoZSB0YXNrCisgKiBAcGFyYW0ge1Rhc2t9IHRhc2sgdGhlIHRhc2sgdG8gYWRk
CisgKi8KK1NjaGVkdWxlci5wcm90b3R5cGUuYWRkVGFzayA9IGZ1bmN0aW9uIChpZCwgcHJpb3Jp
dHksIHF1ZXVlLCB0YXNrKSB7CisgIHRoaXMuY3VycmVudFRjYiA9IG5ldyBUYXNrQ29udHJvbEJs
b2NrKHRoaXMubGlzdCwgaWQsIHByaW9yaXR5LCBxdWV1ZSwgdGFzayk7CisgIHRoaXMubGlzdCA9
IHRoaXMuY3VycmVudFRjYjsKKyAgdGhpcy5ibG9ja3NbaWRdID0gdGhpcy5jdXJyZW50VGNiOwor
fTsKKworLyoqCisgKiBFeGVjdXRlIHRoZSB0YXNrcyBtYW5hZ2VkIGJ5IHRoaXMgc2NoZWR1bGVy
LgorICovCitTY2hlZHVsZXIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKCkgeworICB0
aGlzLmN1cnJlbnRUY2IgPSB0aGlzLmxpc3Q7CisgIHdoaWxlICh0aGlzLmN1cnJlbnRUY2IgIT0g
bnVsbCkgeworICAgIGlmICh0aGlzLmN1cnJlbnRUY2IuaXNIZWxkT3JTdXNwZW5kZWQoKSkgewor
ICAgICAgdGhpcy5jdXJyZW50VGNiID0gdGhpcy5jdXJyZW50VGNiLmxpbms7CisgICAgfSBlbHNl
IHsKKyAgICAgIHRoaXMuY3VycmVudElkID0gdGhpcy5jdXJyZW50VGNiLmlkOworICAgICAgdGhp
cy5jdXJyZW50VGNiID0gdGhpcy5jdXJyZW50VGNiLnJ1bigpOworICAgIH0KKyAgfQorfTsKKwor
LyoqCisgKiBSZWxlYXNlIGEgdGFzayB0aGF0IGlzIGN1cnJlbnRseSBibG9ja2VkIGFuZCByZXR1
cm4gdGhlIG5leHQgYmxvY2sgdG8gcnVuLgorICogQHBhcmFtIHtpbnR9IGlkIHRoZSBpZCBvZiB0
aGUgdGFzayB0byBzdXNwZW5kCisgKi8KK1NjaGVkdWxlci5wcm90b3R5cGUucmVsZWFzZSA9IGZ1
bmN0aW9uIChpZCkgeworICB2YXIgdGNiID0gdGhpcy5ibG9ja3NbaWRdOworICBpZiAodGNiID09
IG51bGwpIHJldHVybiB0Y2I7CisgIHRjYi5tYXJrQXNOb3RIZWxkKCk7CisgIGlmICh0Y2IucHJp
b3JpdHkgPiB0aGlzLmN1cnJlbnRUY2IucHJpb3JpdHkpIHsKKyAgICByZXR1cm4gdGNiOworICB9
IGVsc2UgeworICAgIHJldHVybiB0aGlzLmN1cnJlbnRUY2I7CisgIH0KK307CisKKy8qKgorICog
QmxvY2sgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgdGFzayBhbmQgcmV0dXJuIHRoZSBuZXh0IHRh
c2sgY29udHJvbCBibG9jaworICogdG8gcnVuLiAgVGhlIGJsb2NrZWQgdGFzayB3aWxsIG5vdCBi
ZSBtYWRlIHJ1bm5hYmxlIHVudGlsIGl0IGlzIGV4cGxpY2l0bHkKKyAqIHJlbGVhc2VkLCBldmVu
IGlmIG5ldyB3b3JrIGlzIGFkZGVkIHRvIGl0LgorICovCitTY2hlZHVsZXIucHJvdG90eXBlLmhv
bGRDdXJyZW50ID0gZnVuY3Rpb24gKCkgeworICB0aGlzLmhvbGRDb3VudCsrOworICB0aGlzLmN1
cnJlbnRUY2IubWFya0FzSGVsZCgpOworICByZXR1cm4gdGhpcy5jdXJyZW50VGNiLmxpbms7Cit9
OworCisvKioKKyAqIFN1c3BlbmQgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgdGFzayBhbmQgcmV0
dXJuIHRoZSBuZXh0IHRhc2sgY29udHJvbCBibG9jaworICogdG8gcnVuLiAgSWYgbmV3IHdvcmsg
aXMgYWRkZWQgdG8gdGhlIHN1c3BlbmRlZCB0YXNrIGl0IHdpbGwgYmUgbWFkZSBydW5uYWJsZS4K
KyAqLworU2NoZWR1bGVyLnByb3RvdHlwZS5zdXNwZW5kQ3VycmVudCA9IGZ1bmN0aW9uICgpIHsK
KyAgdGhpcy5jdXJyZW50VGNiLm1hcmtBc1N1c3BlbmRlZCgpOworICByZXR1cm4gdGhpcy5jdXJy
ZW50VGNiOworfTsKKworLyoqCisgKiBBZGQgdGhlIHNwZWNpZmllZCBwYWNrZXQgdG8gdGhlIGVu
ZCBvZiB0aGUgd29ya2xpc3QgdXNlZCBieSB0aGUgdGFzaworICogYXNzb2NpYXRlZCB3aXRoIHRo
ZSBwYWNrZXQgYW5kIG1ha2UgdGhlIHRhc2sgcnVubmFibGUgaWYgaXQgaXMgY3VycmVudGx5Cisg
KiBzdXNwZW5kZWQuCisgKiBAcGFyYW0ge1BhY2tldH0gcGFja2V0IHRoZSBwYWNrZXQgdG8gYWRk
CisgKi8KK1NjaGVkdWxlci5wcm90b3R5cGUucXVldWUgPSBmdW5jdGlvbiAocGFja2V0KSB7Cisg
IHZhciB0ID0gdGhpcy5ibG9ja3NbcGFja2V0LmlkXTsKKyAgaWYgKHQgPT0gbnVsbCkgcmV0dXJu
IHQ7CisgIHRoaXMucXVldWVDb3VudCsrOworICBwYWNrZXQubGluayA9IG51bGw7CisgIHBhY2tl
dC5pZCA9IHRoaXMuY3VycmVudElkOworICByZXR1cm4gdC5jaGVja1ByaW9yaXR5QWRkKHRoaXMu
Y3VycmVudFRjYiwgcGFja2V0KTsKK307CisKKy8qKgorICogQSB0YXNrIGNvbnRyb2wgYmxvY2sg
bWFuYWdlcyBhIHRhc2sgYW5kIHRoZSBxdWV1ZSBvZiB3b3JrIHBhY2thZ2VzIGFzc29jaWF0ZWQK
KyAqIHdpdGggaXQuCisgKiBAcGFyYW0ge1Rhc2tDb250cm9sQmxvY2t9IGxpbmsgdGhlIHByZWNl
ZGluZyBibG9jayBpbiB0aGUgbGlua2VkIGJsb2NrIGxpc3QKKyAqIEBwYXJhbSB7aW50fSBpZCB0
aGUgaWQgb2YgdGhpcyBibG9jaworICogQHBhcmFtIHtpbnR9IHByaW9yaXR5IHRoZSBwcmlvcml0
eSBvZiB0aGlzIGJsb2NrCisgKiBAcGFyYW0ge1BhY2tldH0gcXVldWUgdGhlIHF1ZXVlIG9mIHBh
Y2thZ2VzIHRvIGJlIHByb2Nlc3NlZCBieSB0aGUgdGFzaworICogQHBhcmFtIHtUYXNrfSB0YXNr
IHRoZSB0YXNrCisgKiBAY29uc3RydWN0b3IKKyAqLworZnVuY3Rpb24gVGFza0NvbnRyb2xCbG9j
ayhsaW5rLCBpZCwgcHJpb3JpdHksIHF1ZXVlLCB0YXNrKSB7CisgIHRoaXMubGluayA9IGxpbms7
CisgIHRoaXMuaWQgPSBpZDsKKyAgdGhpcy5wcmlvcml0eSA9IHByaW9yaXR5OworICB0aGlzLnF1
ZXVlID0gcXVldWU7CisgIHRoaXMudGFzayA9IHRhc2s7CisgIGlmIChxdWV1ZSA9PSBudWxsKSB7
CisgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX1NVU1BFTkRFRDsKKyAgfSBlbHNlIHsKKyAgICB0aGlz
LnN0YXRlID0gU1RBVEVfU1VTUEVOREVEX1JVTk5BQkxFOworICB9Cit9CisKKy8qKgorICogVGhl
IHRhc2sgaXMgcnVubmluZyBhbmQgaXMgY3VycmVudGx5IHNjaGVkdWxlZC4KKyAqLwordmFyIFNU
QVRFX1JVTk5JTkcgPSAwOworCisvKioKKyAqIFRoZSB0YXNrIGhhcyBwYWNrZXRzIGxlZnQgdG8g
cHJvY2Vzcy4KKyAqLwordmFyIFNUQVRFX1JVTk5BQkxFID0gMTsKKworLyoqCisgKiBUaGUgdGFz
ayBpcyBub3QgY3VycmVudGx5IHJ1bm5pbmcuICBUaGUgdGFzayBpcyBub3QgYmxvY2tlZCBhcyBz
dWNoIGFuZCBtYXkKKyogYmUgc3RhcnRlZCBieSB0aGUgc2NoZWR1bGVyLgorICovCit2YXIgU1RB
VEVfU1VTUEVOREVEID0gMjsKKworLyoqCisgKiBUaGUgdGFzayBpcyBibG9ja2VkIGFuZCBjYW5u
b3QgYmUgcnVuIHVudGlsIGl0IGlzIGV4cGxpY2l0bHkgcmVsZWFzZWQuCisgKi8KK3ZhciBTVEFU
RV9IRUxEID0gNDsKKwordmFyIFNUQVRFX1NVU1BFTkRFRF9SVU5OQUJMRSA9IFNUQVRFX1NVU1BF
TkRFRCB8IFNUQVRFX1JVTk5BQkxFOwordmFyIFNUQVRFX05PVF9IRUxEID0gflNUQVRFX0hFTEQ7
CisKK1Rhc2tDb250cm9sQmxvY2sucHJvdG90eXBlLnNldFJ1bm5pbmcgPSBmdW5jdGlvbiAoKSB7
CisgIHRoaXMuc3RhdGUgPSBTVEFURV9SVU5OSU5HOworfTsKKworVGFza0NvbnRyb2xCbG9jay5w
cm90b3R5cGUubWFya0FzTm90SGVsZCA9IGZ1bmN0aW9uICgpIHsKKyAgdGhpcy5zdGF0ZSA9IHRo
aXMuc3RhdGUgJiBTVEFURV9OT1RfSEVMRDsKK307CisKK1Rhc2tDb250cm9sQmxvY2sucHJvdG90
eXBlLm1hcmtBc0hlbGQgPSBmdW5jdGlvbiAoKSB7CisgIHRoaXMuc3RhdGUgPSB0aGlzLnN0YXRl
IHwgU1RBVEVfSEVMRDsKK307CisKK1Rhc2tDb250cm9sQmxvY2sucHJvdG90eXBlLmlzSGVsZE9y
U3VzcGVuZGVkID0gZnVuY3Rpb24gKCkgeworICByZXR1cm4gKHRoaXMuc3RhdGUgJiBTVEFURV9I
RUxEKSAhPSAwIHx8ICh0aGlzLnN0YXRlID09IFNUQVRFX1NVU1BFTkRFRCk7Cit9OworCitUYXNr
Q29udHJvbEJsb2NrLnByb3RvdHlwZS5tYXJrQXNTdXNwZW5kZWQgPSBmdW5jdGlvbiAoKSB7Cisg
IHRoaXMuc3RhdGUgPSB0aGlzLnN0YXRlIHwgU1RBVEVfU1VTUEVOREVEOworfTsKKworVGFza0Nv
bnRyb2xCbG9jay5wcm90b3R5cGUubWFya0FzUnVubmFibGUgPSBmdW5jdGlvbiAoKSB7CisgIHRo
aXMuc3RhdGUgPSB0aGlzLnN0YXRlIHwgU1RBVEVfUlVOTkFCTEU7Cit9OworCisvKioKKyAqIFJ1
bnMgdGhpcyB0YXNrLCBpZiBpdCBpcyByZWFkeSB0byBiZSBydW4sIGFuZCByZXR1cm5zIHRoZSBu
ZXh0IHRhc2sgdG8gcnVuLgorICovCitUYXNrQ29udHJvbEJsb2NrLnByb3RvdHlwZS5ydW4gPSBm
dW5jdGlvbiAoKSB7CisgIHZhciBwYWNrZXQ7CisgIGlmICh0aGlzLnN0YXRlID09IFNUQVRFX1NV
U1BFTkRFRF9SVU5OQUJMRSkgeworICAgIHBhY2tldCA9IHRoaXMucXVldWU7CisgICAgdGhpcy5x
dWV1ZSA9IHBhY2tldC5saW5rOworICAgIGlmICh0aGlzLnF1ZXVlID09IG51bGwpIHsKKyAgICAg
IHRoaXMuc3RhdGUgPSBTVEFURV9SVU5OSU5HOworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLnN0
YXRlID0gU1RBVEVfUlVOTkFCTEU7CisgICAgfQorICB9IGVsc2UgeworICAgIHBhY2tldCA9IG51
bGw7CisgIH0KKyAgcmV0dXJuIHRoaXMudGFzay5ydW4ocGFja2V0KTsKK307CisKKy8qKgorICog
QWRkcyBhIHBhY2tldCB0byB0aGUgd29ya2xpc3Qgb2YgdGhpcyBibG9jaydzIHRhc2ssIG1hcmtz
IHRoaXMgYXMgcnVubmFibGUgaWYKKyAqIG5lY2Vzc2FyeSwgYW5kIHJldHVybnMgdGhlIG5leHQg
cnVubmFibGUgb2JqZWN0IHRvIHJ1biAodGhlIG9uZQorICogd2l0aCB0aGUgaGlnaGVzdCBwcmlv
cml0eSkuCisgKi8KK1Rhc2tDb250cm9sQmxvY2sucHJvdG90eXBlLmNoZWNrUHJpb3JpdHlBZGQg
PSBmdW5jdGlvbiAodGFzaywgcGFja2V0KSB7CisgIGlmICh0aGlzLnF1ZXVlID09IG51bGwpIHsK
KyAgICB0aGlzLnF1ZXVlID0gcGFja2V0OworICAgIHRoaXMubWFya0FzUnVubmFibGUoKTsKKyAg
ICBpZiAodGhpcy5wcmlvcml0eSA+IHRhc2sucHJpb3JpdHkpIHJldHVybiB0aGlzOworICB9IGVs
c2UgeworICAgIHRoaXMucXVldWUgPSBwYWNrZXQuYWRkVG8odGhpcy5xdWV1ZSk7CisgIH0KKyAg
cmV0dXJuIHRhc2s7Cit9OworCitUYXNrQ29udHJvbEJsb2NrLnByb3RvdHlwZS50b1N0cmluZyA9
IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJuICJ0Y2IgeyAiICsgdGhpcy50YXNrICsgIkAiICsgdGhp
cy5zdGF0ZSArICIgfSI7Cit9OworCisvKioKKyAqIEFuIGlkbGUgdGFzayBkb2Vzbid0IGRvIGFu
eSB3b3JrIGl0c2VsZiBidXQgY3ljbGVzIGNvbnRyb2wgYmV0d2VlbiB0aGUgdHdvCisgKiBkZXZp
Y2UgdGFza3MuCisgKiBAcGFyYW0ge1NjaGVkdWxlcn0gc2NoZWR1bGVyIHRoZSBzY2hlZHVsZXIg
dGhhdCBtYW5hZ2VzIHRoaXMgdGFzaworICogQHBhcmFtIHtpbnR9IHYxIGEgc2VlZCB2YWx1ZSB0
aGF0IGNvbnRyb2xzIGhvdyB0aGUgZGV2aWNlIHRhc2tzIGFyZSBzY2hlZHVsZWQKKyAqIEBwYXJh
bSB7aW50fSBjb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoaXMgdGFzayBzaG91bGQgYmUgc2No
ZWR1bGVkCisgKiBAY29uc3RydWN0b3IKKyAqLworZnVuY3Rpb24gSWRsZVRhc2soc2NoZWR1bGVy
LCB2MSwgY291bnQpIHsKKyAgdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7CisgIHRoaXMudjEg
PSB2MTsKKyAgdGhpcy5jb3VudCA9IGNvdW50OworfQorCitJZGxlVGFzay5wcm90b3R5cGUucnVu
ID0gZnVuY3Rpb24gKHBhY2tldCkgeworICB0aGlzLmNvdW50LS07CisgIGlmICh0aGlzLmNvdW50
ID09IDApIHJldHVybiB0aGlzLnNjaGVkdWxlci5ob2xkQ3VycmVudCgpOworICBpZiAoKHRoaXMu
djEgJiAxKSA9PSAwKSB7CisgICAgdGhpcy52MSA9IHRoaXMudjEgPj4gMTsKKyAgICByZXR1cm4g
dGhpcy5zY2hlZHVsZXIucmVsZWFzZShJRF9ERVZJQ0VfQSk7CisgIH0gZWxzZSB7CisgICAgdGhp
cy52MSA9ICh0aGlzLnYxID4+IDEpIF4gMHhEMDA4OworICAgIHJldHVybiB0aGlzLnNjaGVkdWxl
ci5yZWxlYXNlKElEX0RFVklDRV9CKTsKKyAgfQorfTsKKworSWRsZVRhc2sucHJvdG90eXBlLnRv
U3RyaW5nID0gZnVuY3Rpb24gKCkgeworICByZXR1cm4gIklkbGVUYXNrIgorfTsKKworLyoqCisg
KiBBIHRhc2sgdGhhdCBzdXNwZW5kcyBpdHNlbGYgYWZ0ZXIgZWFjaCB0aW1lIGl0IGhhcyBiZWVu
IHJ1biB0byBzaW11bGF0ZQorICogd2FpdGluZyBmb3IgZGF0YSBmcm9tIGFuIGV4dGVybmFsIGRl
dmljZS4KKyAqIEBwYXJhbSB7U2NoZWR1bGVyfSBzY2hlZHVsZXIgdGhlIHNjaGVkdWxlciB0aGF0
IG1hbmFnZXMgdGhpcyB0YXNrCisgKiBAY29uc3RydWN0b3IKKyAqLworZnVuY3Rpb24gRGV2aWNl
VGFzayhzY2hlZHVsZXIpIHsKKyAgdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7CisgIHRoaXMu
djEgPSBudWxsOworfQorCitEZXZpY2VUYXNrLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAocGFj
a2V0KSB7CisgIGlmIChwYWNrZXQgPT0gbnVsbCkgeworICAgIGlmICh0aGlzLnYxID09IG51bGwp
IHJldHVybiB0aGlzLnNjaGVkdWxlci5zdXNwZW5kQ3VycmVudCgpOworICAgIHZhciB2ID0gdGhp
cy52MTsKKyAgICB0aGlzLnYxID0gbnVsbDsKKyAgICByZXR1cm4gdGhpcy5zY2hlZHVsZXIucXVl
dWUodik7CisgIH0gZWxzZSB7CisgICAgdGhpcy52MSA9IHBhY2tldDsKKyAgICByZXR1cm4gdGhp
cy5zY2hlZHVsZXIuaG9sZEN1cnJlbnQoKTsKKyAgfQorfTsKKworRGV2aWNlVGFzay5wcm90b3R5
cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7CisgIHJldHVybiAiRGV2aWNlVGFzayI7Cit9Owor
CisvKioKKyAqIEEgdGFzayB0aGF0IG1hbmlwdWxhdGVzIHdvcmsgcGFja2V0cy4KKyAqIEBwYXJh
bSB7U2NoZWR1bGVyfSBzY2hlZHVsZXIgdGhlIHNjaGVkdWxlciB0aGF0IG1hbmFnZXMgdGhpcyB0
YXNrCisgKiBAcGFyYW0ge2ludH0gdjEgYSBzZWVkIHVzZWQgdG8gc3BlY2lmeSBob3cgd29yayBw
YWNrZXRzIGFyZSBtYW5pcHVsYXRlZAorICogQHBhcmFtIHtpbnR9IHYyIGFub3RoZXIgc2VlZCB1
c2VkIHRvIHNwZWNpZnkgaG93IHdvcmsgcGFja2V0cyBhcmUgbWFuaXB1bGF0ZWQKKyAqIEBjb25z
dHJ1Y3RvcgorICovCitmdW5jdGlvbiBXb3JrZXJUYXNrKHNjaGVkdWxlciwgdjEsIHYyKSB7Cisg
IHRoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyOworICB0aGlzLnYxID0gdjE7CisgIHRoaXMudjIg
PSB2MjsKK30KKworV29ya2VyVGFzay5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKHBhY2tldCkg
eworICBpZiAocGFja2V0ID09IG51bGwpIHsKKyAgICByZXR1cm4gdGhpcy5zY2hlZHVsZXIuc3Vz
cGVuZEN1cnJlbnQoKTsKKyAgfSBlbHNlIHsKKyAgICBpZiAodGhpcy52MSA9PSBJRF9IQU5ETEVS
X0EpIHsKKyAgICAgIHRoaXMudjEgPSBJRF9IQU5ETEVSX0I7CisgICAgfSBlbHNlIHsKKyAgICAg
IHRoaXMudjEgPSBJRF9IQU5ETEVSX0E7CisgICAgfQorICAgIHBhY2tldC5pZCA9IHRoaXMudjE7
CisgICAgcGFja2V0LmExID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IERBVEFfU0laRTsg
aSsrKSB7CisgICAgICB0aGlzLnYyKys7CisgICAgICBpZiAodGhpcy52MiA+IDI2KSB0aGlzLnYy
ID0gMTsKKyAgICAgIHBhY2tldC5hMltpXSA9IHRoaXMudjI7CisgICAgfQorICAgIHJldHVybiB0
aGlzLnNjaGVkdWxlci5xdWV1ZShwYWNrZXQpOworICB9Cit9OworCitXb3JrZXJUYXNrLnByb3Rv
dHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJuICJXb3JrZXJUYXNrIjsKK307
CisKKy8qKgorICogQSB0YXNrIHRoYXQgbWFuaXB1bGF0ZXMgd29yayBwYWNrZXRzIGFuZCB0aGVu
IHN1c3BlbmRzIGl0c2VsZi4KKyAqIEBwYXJhbSB7U2NoZWR1bGVyfSBzY2hlZHVsZXIgdGhlIHNj
aGVkdWxlciB0aGF0IG1hbmFnZXMgdGhpcyB0YXNrCisgKiBAY29uc3RydWN0b3IKKyAqLworZnVu
Y3Rpb24gSGFuZGxlclRhc2soc2NoZWR1bGVyKSB7CisgIHRoaXMuc2NoZWR1bGVyID0gc2NoZWR1
bGVyOworICB0aGlzLnYxID0gbnVsbDsKKyAgdGhpcy52MiA9IG51bGw7Cit9CisKK0hhbmRsZXJU
YXNrLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAocGFja2V0KSB7CisgIGlmIChwYWNrZXQgIT0g
bnVsbCkgeworICAgIGlmIChwYWNrZXQua2luZCA9PSBLSU5EX1dPUkspIHsKKyAgICAgIHRoaXMu
djEgPSBwYWNrZXQuYWRkVG8odGhpcy52MSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMudjIg
PSBwYWNrZXQuYWRkVG8odGhpcy52Mik7CisgICAgfQorICB9CisgIGlmICh0aGlzLnYxICE9IG51
bGwpIHsKKyAgICB2YXIgY291bnQgPSB0aGlzLnYxLmExOworICAgIHZhciB2OworICAgIGlmIChj
b3VudCA8IERBVEFfU0laRSkgeworICAgICAgaWYgKHRoaXMudjIgIT0gbnVsbCkgeworICAgICAg
ICB2ID0gdGhpcy52MjsKKyAgICAgICAgdGhpcy52MiA9IHRoaXMudjIubGluazsKKyAgICAgICAg
di5hMSA9IHRoaXMudjEuYTJbY291bnRdOworICAgICAgICB0aGlzLnYxLmExID0gY291bnQgKyAx
OworICAgICAgICByZXR1cm4gdGhpcy5zY2hlZHVsZXIucXVldWUodik7CisgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgIHYgPSB0aGlzLnYxOworICAgICAgdGhpcy52MSA9IHRoaXMudjEubGlu
azsKKyAgICAgIHJldHVybiB0aGlzLnNjaGVkdWxlci5xdWV1ZSh2KTsKKyAgICB9CisgIH0KKyAg
cmV0dXJuIHRoaXMuc2NoZWR1bGVyLnN1c3BlbmRDdXJyZW50KCk7Cit9OworCitIYW5kbGVyVGFz
ay5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7CisgIHJldHVybiAiSGFuZGxlclRh
c2siOworfTsKKworLyogLS0tICoKKyAqIFAgYSBjIGsgZSB0CisgKiAtLS0gKi8KKwordmFyIERB
VEFfU0laRSA9IDQ7CisKKy8qKgorICogQSBzaW1wbGUgcGFja2FnZSBvZiBkYXRhIHRoYXQgaXMg
bWFuaXB1bGF0ZWQgYnkgdGhlIHRhc2tzLiAgVGhlIGV4YWN0IGxheW91dAorICogb2YgdGhlIHBh
eWxvYWQgZGF0YSBjYXJyaWVkIGJ5IGEgcGFja2V0IGlzIG5vdCBpbXBvcnRhaW50LCBhbmQgbmVp
dGhlciBpcyB0aGUKKyAqIG5hdHVyZSBvZiB0aGUgd29yayBwZXJmb3JtZWQgb24gcGFja2V0cyBi
eSB0aGUgdGFza3MuCisgKgorICogQmVzaWRlcyBjYXJyeWluZyBkYXRhLCBwYWNrZXRzIGZvcm0g
bGlua2VkIGxpc3RzIGFuZCBhcmUgaGVuY2UgdXNlZCBib3RoIGFzCisgKiBkYXRhIGFuZCB3b3Jr
bGlzdHMuCisgKiBAcGFyYW0ge1BhY2tldH0gbGluayB0aGUgdGFpbCBvZiB0aGUgbGlua2VkIGxp
c3Qgb2YgcGFja2V0cworICogQHBhcmFtIHtpbnR9IGlkIGFuIElEIGZvciB0aGlzIHBhY2tldAor
ICogQHBhcmFtIHtpbnR9IGtpbmQgdGhlIHR5cGUgb2YgdGhpcyBwYWNrZXQKKyAqIEBjb25zdHJ1
Y3RvcgorICovCitmdW5jdGlvbiBQYWNrZXQobGluaywgaWQsIGtpbmQpIHsKKyAgdGhpcy5saW5r
ID0gbGluazsKKyAgdGhpcy5pZCA9IGlkOworICB0aGlzLmtpbmQgPSBraW5kOworICB0aGlzLmEx
ID0gMDsKKyAgdGhpcy5hMiA9IG5ldyBBcnJheShEQVRBX1NJWkUpOworfQorCisvKioKKyAqIEFk
ZCB0aGlzIHBhY2tldCB0byB0aGUgZW5kIG9mIGEgd29ya2xpc3QsIGFuZCByZXR1cm4gdGhlIHdv
cmtsaXN0LgorICogQHBhcmFtIHtQYWNrZXR9IHF1ZXVlIHRoZSB3b3JrbGlzdCB0byBhZGQgdGhp
cyBwYWNrZXQgdG8KKyAqLworUGFja2V0LnByb3RvdHlwZS5hZGRUbyA9IGZ1bmN0aW9uIChxdWV1
ZSkgeworICB0aGlzLmxpbmsgPSBudWxsOworICBpZiAocXVldWUgPT0gbnVsbCkgcmV0dXJuIHRo
aXM7CisgIHZhciBwZWVrLCBuZXh0ID0gcXVldWU7CisgIHdoaWxlICgocGVlayA9IG5leHQubGlu
aykgIT0gbnVsbCkKKyAgICBuZXh0ID0gcGVlazsKKyAgbmV4dC5saW5rID0gdGhpczsKKyAgcmV0
dXJuIHF1ZXVlOworfTsKKworUGFja2V0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgp
IHsKKyAgcmV0dXJuICJQYWNrZXQiOworfTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAzNTA7ICsr
aSkKKyAgcnVuUmljaGFyZHMoKTsKSW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDM2MDgzKQorKysgV2ViS2l0
VG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDgtMDkt
MDQgIENhbWVyb24gWndhcmljaCAgPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDIwNjE2OiBJbmNvcnBv
cmF0ZSBWOCBiZW5jaG1hcmtzIGluIHRlc3RpbmcKKyAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDYxNj4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3Ig
dGhlIC0tdjggb3B0aW9uIHRvIHJ1bi1zdW5zcGlkZXIuCisKKyAgICAgICAgKiBTY3JpcHRzL3J1
bi1zdW5zcGlkZXI6CisKIDIwMDgtMDktMDMgIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNvbT4K
IAogICAgICAgICBNb3JlIE1hYyBidWlsZCBmaXhlcy4KSW5kZXg6IFdlYktpdFRvb2xzL1Njcmlw
dHMvcnVuLXN1bnNwaWRlcgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3J1bi1z
dW5zcGlkZXIJKHJldmlzaW9uIDM2MDgyKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4tc3Vu
c3BpZGVyCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBAIG15ICRydW5TaGFyayA9IDA7
CiBteSAkcnVuU2hhcmsyMCA9IDA7CiBteSAkcnVuU2hhcmtDYWNoZSA9IDA7CiBteSAkdWJlbmNo
ID0gMDsKK215ICR2OCA9IDA7CiBteSAkc2V0QmFzZWxpbmUgPSAwOwogbXkgJHNob3dIZWxwID0g
MDsKIG15ICR0ZXN0c1BhdHRlcm47CkBAIC01OCw2ICs1OSw3IEBAIFVzYWdlOiAkcHJvZ3JhbU5h
bWUgW29wdGlvbnNdIFtvcHRpb25zIHQKICAgLS1zaGFyazIwICAgICAgICAgTGlrZSAtLXNoYXJr
LCBidXQgd2l0aCBhIDIwIG1pY3Jvc2Vjb25kIHNhbXBsaW5nIGludGVydmFsCiAgIC0tc2hhcmst
Y2FjaGUgICAgIExpa2UgLS1zaGFyaywgYnV0IHBlcmZvcm1zIGEgTDIgY2FjaGUtbWlzcyBzYW1w
bGUgaW5zdGVhZCBvZiB0aW1lIHNhbXBsZQogICAtLXViZW5jaCAgICAgICAgICBVc2UgbWljcm9i
ZW5jaG1hcmsgc3VpdGUgaW5zdGVhZCBvZiByZWd1bGFyIHRlc3RzICh0byBjaGVjayBmb3IgY29y
ZSBleGVjdXRpb24gcmVncmVzc2lvbnMpCisgIC0tdjggICAgICAgICAgICAgIFVzZSB0aGUgVjgg
YmVuY2htYXJrIHN1aXRlLgogRU9GCiAKIEdldE9wdGlvbnMoJ3Jvb3Q9cycgPT4gc3ViIHsgbXkg
KCR4LCAkdmFsdWUpID0gQF87ICRyb290ID0gJHZhbHVlOyBzZXRDb25maWd1cmF0aW9uUHJvZHVj
dERpcihDd2Q6OmFic19wYXRoKCRyb290KSk7IH0sCkBAIC02Nyw2ICs2OSw3IEBAIEdldE9wdGlv
bnMoJ3Jvb3Q9cycgPT4gc3ViIHsgbXkgKCR4LCAkdmEKICAgICAgICAgICAgJ3NoYXJrMjAnID0+
IFwkcnVuU2hhcmsyMCwKICAgICAgICAgICAgJ3NoYXJrLWNhY2hlJyA9PiBcJHJ1blNoYXJrQ2Fj
aGUsCiAgICAgICAgICAgICd1YmVuY2gnID0+IFwkdWJlbmNoLAorICAgICAgICAgICAndjgnID0+
IFwkdjgsCiAgICAgICAgICAgICd0ZXN0cz1zJyA9PiBcJHRlc3RzUGF0dGVybiwKICAgICAgICAg
ICAgJ2hlbHAnID0+IFwkc2hvd0hlbHApOwogCkBAIC0xMjIsNiArMTI1LDcgQEAgcHVzaCBAYXJn
cywgIi0tc2hhcmsiIGlmICRydW5TaGFyazsKIHB1c2ggQGFyZ3MsICItLXNoYXJrMjAiIGlmICRy
dW5TaGFyazIwOwogcHVzaCBAYXJncywgIi0tc2hhcmstY2FjaGUiIGlmICRydW5TaGFya0NhY2hl
OwogcHVzaCBAYXJncywgIi0tdWJlbmNoIiBpZiAkdWJlbmNoOworcHVzaCBAYXJncywgIi0tdjgi
IGlmICR2ODsKIHB1c2ggQGFyZ3MsICItLXRlc3RzIiwgJHRlc3RzUGF0dGVybiBpZiAkdGVzdHNQ
YXR0ZXJuOwogCiBleGVjICIuL3N1bnNwaWRlciIsIEBhcmdzOwo=
</data>
<flag name="review"
          id="10308"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>