<?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>229674</bug_id>
          
          <creation_ts>2021-08-30 10:45:50 -0700</creation_ts>
          <short_desc>Null pointer dereference in JSC::GetByStatus</short_desc>
          <delta_ts>2021-09-22 23:59:04 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mikhail R. Gadelha">mikhail</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>ews-feeder</cc>
    
    <cc>mark.lam</cc>
    
    <cc>product-security</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1788565</commentid>
    <comment_count>0</comment_count>
    <who name="Mikhail R. Gadelha">mikhail</who>
    <bug_when>2021-08-30 10:45:50 -0700</bug_when>
    <thetext>In GetByStatus::computeForStubInfoWithoutExitSiteFeedback, there are several places that dereference the stubInfo argument when calling the GetByStatus constructor. Here&apos;s the backtrace:


#0  JSC::GetByStatus::GetByStatus (this=0xfffe9438, summary=JSC::StubInfoSummary::NoInformation, stubInfo=0x0) at ../../Source/JavaScriptCore/bytecode/GetByStatus.cpp:177
#1  0xf27896e6 in JSC::GetByStatus::computeForStubInfoWithoutExitSiteFeedback (locker=..., profiledBlock=0xec49b560, stubInfo=0x0, callExitSiteData=...)
    at ../../Source/JavaScriptCore/bytecode/GetByStatus.cpp:207
#2  0xf2788fa4 in JSC::GetByStatus::computeFor (profiledBlock=0xec49b560, map=..., bytecodeIndex=..., didExit=..., callExitSiteData=...) at ../../Source/JavaScriptCore/bytecode/GetByStatus.cpp:155
#3  0xf278aeb4 in JSC::GetByStatus::computeFor (profiledBlock=0xec49b560, baselineMap=..., icContextStack=..., codeOrigin=...) at ../../Source/JavaScriptCore/bytecode/GetByStatus.cpp:402
#4  0xf2c1d286 in JSC::DFG::ByteCodeParser::parseBlock (this=0xfffecd6c, limit=251) at ../../Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:6278
#5  0xf2c60b34 in JSC::DFG::ByteCodeParser::parseCodeBlock (this=0xfffecd6c) at ../../Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:8804
#6  0xf2c61c18 in JSC::DFG::ByteCodeParser::parse (this=0xfffecd6c) at ../../Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:9006
#7  0xf2c64000 in JSC::DFG::parse (graph=...) at ../../Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:9165
#8  0xf31f490a in JSC::DFG::Plan::compileInThreadImpl (this=0xeb01e8d0) at ../../Source/JavaScriptCore/dfg/DFGPlan.cpp:199
#9  0xf4055450 in JSC::JITPlan::compileInThread (this=0xeb01e8d0, thread=0x0) at ../../Source/JavaScriptCore/jit/JITPlan.cpp:165
#10 0xf40ed054 in JSC::JITWorklist::enqueue (this=0xedcc71b0, plan=...) at ../../Source/JavaScriptCore/jit/JITWorklist.cpp:83
#11 0xf2f5931a in JSC::DFG::compileImpl (vm=..., codeBlock=0xec49aca0, profiledDFGCodeBlock=0x0, mode=JSC::JITCompilationMode::DFG, osrEntryBytecodeIndex=..., mustHandleValues=..., callback=...)
    at ../../Source/JavaScriptCore/dfg/DFGDriver.cpp:90
#12 0xf2f5944a in JSC::DFG::compile (vm=..., codeBlock=0xec49aca0, profiledDFGCodeBlock=0x0, mode=JSC::JITCompilationMode::DFG, osrEntryBytecodeIndex=..., mustHandleValues=..., callback=...)
    at ../../Source/JavaScriptCore/dfg/DFGDriver.cpp:106
#13 0xf4045c08 in JSC::operationOptimize (vmPointer=0xecaf5000, bytecodeIndexBits=0) at ../../Source/JavaScriptCore/jit/JITOperations.cpp:2096
#14 0xecc320aa in ?? ()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1788566</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-08-30 10:46:04 -0700</bug_when>
    <thetext>&lt;rdar://problem/82535652&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1788570</commentid>
    <comment_count>2</comment_count>
      <attachid>436793</attachid>
    <who name="Mikhail R. Gadelha">mikhail</who>
    <bug_when>2021-08-30 10:53:06 -0700</bug_when>
    <thetext>Created attachment 436793
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1795225</commentid>
    <comment_count>3</comment_count>
      <attachid>436793</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-09-20 13:04:05 -0700</bug_when>
    <thetext>Comment on attachment 436793
Patch

Can you upload a test for review too? (while, maybe, we should not land it together)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1795226</commentid>
    <comment_count>4</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-09-20 13:05:01 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #3)
&gt; Comment on attachment 436793 [details]
&gt; Patch
&gt; 
&gt; Can you upload a test for review too? (while, maybe, we should not land it
&gt; together)

I&apos;m assuming that you found this bug based on some tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1795237</commentid>
    <comment_count>5</comment_count>
      <attachid>438719</attachid>
    <who name="Mikhail R. Gadelha">mikhail</who>
    <bug_when>2021-09-20 13:26:13 -0700</bug_when>
    <thetext>Created attachment 438719
Test

Sure, that&apos;s the testcase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1795241</commentid>
    <comment_count>6</comment_count>
    <who name="Mikhail R. Gadelha">mikhail</who>
    <bug_when>2021-09-20 13:31:43 -0700</bug_when>
    <thetext>It was found by our fuzzer, let me know if you need a reduced testcase.

I reproduced the null pointer dereference in mips, armv7 and x86_64. I didn&apos;t test it in arm 64.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1795651</commentid>
    <comment_count>7</comment_count>
      <attachid>436793</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-09-21 10:53:37 -0700</bug_when>
    <thetext>Comment on attachment 436793
Patch

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

r=me

&gt; Source/JavaScriptCore/bytecode/GetByStatus.cpp:184
&gt; +        RELEASE_ASSERT(stubInfo);

Make it ASSERT. I don&apos;t think it is worth RELEASE_ASSERT.

&gt; Source/JavaScriptCore/bytecode/GetByStatus.cpp:188
&gt; +        RELEASE_ASSERT(stubInfo);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1795660</commentid>
    <comment_count>8</comment_count>
      <attachid>438837</attachid>
    <who name="Mikhail R. Gadelha">mikhail</who>
    <bug_when>2021-09-21 11:06:24 -0700</bug_when>
    <thetext>Created attachment 438837
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1796376</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-09-22 23:31:22 -0700</bug_when>
    <thetext>Is this patch ready to land?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1796379</commentid>
    <comment_count>10</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-09-22 23:42:00 -0700</bug_when>
    <thetext>This crash does not happen in usual build, so changing it to non security issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1796381</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-09-22 23:58:59 -0700</bug_when>
    <thetext>Committed r282950 (242040@main): &lt;https://commits.webkit.org/242040@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 438837.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436793</attachid>
            <date>2021-08-30 10:53:06 -0700</date>
            <delta_ts>2021-09-21 11:06:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229674-20210830175305.patch</filename>
            <type>text/plain</type>
            <size>9874</size>
            <attacher name="Mikhail R. Gadelha">mikhail</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNjk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
NmZiYTg4MjJhZGU2MWRlYTk5NTcxYTc0M2Q4MTRlYzNhM2I5YWI2Li4yNDk3ZDVjNDM2MmJkY2Q4
NWViMGQ1YmM0Y2MzNzJjODNmMGIzZDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMSBAQAorMjAyMS0wOC0zMCAgTWlraGFpbCBSLiBHYWRlbGhhICA8bWlraGFpbEBpZ2Fs
aWEuY29tPgorCisgICAgICAgIE51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBKU0M6OkdldEJ5
U3RhdHVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
Mjk2NzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
biBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2ss
IHRoZXJlIGFyZQorICAgICAgICBzZXZlcmFsIHBsYWNlcyB0aGF0IGRlcmVmZXJlbmNlIHRoZSBz
dHViSW5mbyBhcmd1bWVudCB3aGVuIGNhbGxpbmcgdGhlCisgICAgICAgIEdldEJ5U3RhdHVzIGNv
bnN0cnVjdG9yLiBUbyBwcmV2ZW50IGEgbnVsbHB0ciBkZXJlZmVyZW5jZSwgdGhlIHBvaW50ZXIK
KyAgICAgICAgaXMgbm90IGRlcmVmZXJlbmNlZCBhbnltb3JlLCBhbmQgYSBjaGVjayB3YXMgYWRk
ZWQgdG8gY2hlY2sgaWYgc3R1YkluZm8KKyAgICAgICAgaXMgYSB2YWxpZCBwb2ludGVyIGJlZm9y
ZSBhY2Nlc3NpbmcgaXQuCisKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeVN0YXR1cy5jcHA6Cisg
ICAgICAgIChKU0M6OkdldEJ5U3RhdHVzOjpHZXRCeVN0YXR1cyk6CisgICAgICAgIChKU0M6Okdl
dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVkYmFjayk6Cisg
ICAgICAgICogYnl0ZWNvZGUvR2V0QnlTdGF0dXMuaDoKKwogMjAyMS0wOC0yNyAgTWlraGFpbCBS
LiBHYWRlbGhhICA8bWlraGFpbEBpZ2FsaWEuY29tPgogCiAgICAgICAgIEF2b2lkIGluY3JlYXNp
bmcgcmVxdWlyZWQgYWxpZ25tZW50IG9mIHRhcmdldCB0eXBlIHdhcm5pbmcgb24gQVJNIDMyIGJp
dHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCmlu
ZGV4IDdlYTg2ZGQ4Yjg5ZmQ0YTZlNzA3ZWEzZDFkYzQwZWIxMjg2NGM2NzcuLjQxNDQ2MjJlNmQy
ZWU1YTE5MDQ2YjI1N2FhYmNjZmI4NGZjZDEzYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcApAQCAtMTY5LDcgKzE2OSw3IEBAIEdldEJ5U3Rh
dHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNT
dGF0dXNNYXAmIG1hcCwKIH0KIAogI2lmIEVOQUJMRShKSVQpCi1HZXRCeVN0YXR1czo6R2V0QnlT
dGF0dXMoU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnksIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bykKK0dldEJ5U3RhdHVzOjpHZXRCeVN0YXR1cyhTdHViSW5mb1N1bW1hcnkgc3VtbWFyeSwgU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKQogICAgIDogbV93YXNTZWVuSW5KSVQodHJ1ZSkKIHsK
ICAgICBzd2l0Y2ggKHN1bW1hcnkpIHsKQEAgLTE4MSwxMCArMTgxLDEyIEBAIEdldEJ5U3RhdHVz
OjpHZXRCeVN0YXR1cyhTdHViSW5mb1N1bW1hcnkgc3VtbWFyeSwgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvKQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICByZXR1cm47CiAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlRha2VzU2xvd1BhdGg6Ci0gICAg
ICAgIG1fc3RhdGUgPSBzdHViSW5mby50b29rU2xvd1BhdGggPyBPYnNlcnZlZFRha2VzU2xvd1Bh
dGggOiBMaWtlbHlUYWtlc1Nsb3dQYXRoOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5m
byk7CisgICAgICAgIG1fc3RhdGUgPSBzdHViSW5mby0+dG9va1Nsb3dQYXRoID8gT2JzZXJ2ZWRU
YWtlc1Nsb3dQYXRoIDogTGlrZWx5VGFrZXNTbG93UGF0aDsKICAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgU3R1YkluZm9TdW1tYXJ5OjpUYWtlc1Nsb3dQYXRoQW5kTWFrZXNDYWxsczoKLSAgICAg
ICAgbV9zdGF0ZSA9IHN0dWJJbmZvLnRvb2tTbG93UGF0aCA/IE9ic2VydmVkU2xvd1BhdGhBbmRN
YWtlc0NhbGxzIDogTWFrZXNDYWxsczsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8p
OworICAgICAgICBtX3N0YXRlID0gc3R1YkluZm8tPnRvb2tTbG93UGF0aCA/IE9ic2VydmVkU2xv
d1BhdGhBbmRNYWtlc0NhbGxzIDogTWFrZXNDYWxsczsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjAyLDcgKzIwNCw3IEBAIEdl
dEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVG
ZWVkYmFjaygKIHsKICAgICBTdHViSW5mb1N1bW1hcnkgc3VtbWFyeSA9IFN0cnVjdHVyZVN0dWJJ
bmZvOjpzdW1tYXJ5KHByb2ZpbGVkQmxvY2stPnZtKCksIHN0dWJJbmZvKTsKICAgICBpZiAoIWlz
SW5saW5lYWJsZShzdW1tYXJ5KSkKLSAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKHN1bW1hcnks
ICpzdHViSW5mbyk7CisgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhzdW1tYXJ5LCBzdHViSW5m
byk7CiAgICAgCiAgICAgLy8gRmluYWxseSBmaWd1cmUgb3V0IGlmIHdlIGNhbiBkZXJpdmUgYW4g
YWNjZXNzIHN0cmF0ZWd5LgogICAgIEdldEJ5U3RhdHVzIHJlc3VsdDsKQEAgLTIxNSw3ICsyMTcs
NyBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4
aXRTaXRlRmVlZGJhY2soCiAgICAgY2FzZSBDYWNoZVR5cGU6OkdldEJ5SWRTZWxmOiB7CiAgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8tPm1faW5saW5lQWNjZXNzQmFzZVN0
cnVjdHVyZS5nZXQoKTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZH
Rm9ySW1wdXJlUHJvcGVydHkoKSkKLSAgICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6
OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOworICAgICAgICAgICAgcmV0dXJuIEdl
dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksIHN0dWJJbmZvKTsKICAgICAgICAg
Q2FjaGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyID0gc3R1YkluZm8tPmlkZW50aWZpZXIoKTsK
ICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IGlkZW50aWZpZXIudWlkKCk7CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHVpZCk7CkBAIC0yMjMsOSArMjI1LDkgQEAgR2V0QnlTdGF0dXMg
R2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKAog
ICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwogICAgICAgICB2YXJpYW50Lm1fb2Zmc2V0ID0g
c3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgaWYg
KCFpc1ZhbGlkT2Zmc2V0KHZhcmlhbnQubV9vZmZzZXQpKQotICAgICAgICAgICAgcmV0dXJuIEdl
dEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7CisgICAgICAg
ICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgc3R1Yklu
Zm8pOwogICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21B
Y2Nlc3Nvck9yVmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93
VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBHZXRCeVN0
YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCBzdHViSW5mbyk7CiAgICAgICAgIAogICAg
ICAgICB2YXJpYW50Lm1fc3RydWN0dXJlU2V0LmFkZChzdHJ1Y3R1cmUpOwogICAgICAgICBib29s
IGRpZEFwcGVuZCA9IHJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpOwpAQCAtMjQ4LDE2ICsy
NTAsMTYgQEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhv
dXRFeGl0U2l0ZUZlZWRiYWNrKAogICAgICAgICBmb3IgKHVuc2lnbmVkIGxpc3RJbmRleCA9IDA7
IGxpc3RJbmRleCA8IGxpc3QtPnNpemUoKTsgKytsaXN0SW5kZXgpIHsKICAgICAgICAgICAgIGNv
bnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0KGxpc3RJbmRleCk7CiAgICAgICAgICAg
ICBpZiAoYWNjZXNzLnZpYVByb3h5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3Rh
dHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksIHN0dWJJbmZv
KTsKIAogICAgICAgICAgICAgaWYgKGFjY2Vzcy51c2VzUG9seVByb3RvKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHVi
SW5mbyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNp
b24oc3VtbWFyeSksIHN0dWJJbmZvKTsKIAogICAgICAgICAgICAgaWYgKCFhY2Nlc3MucmVxdWly
ZXNJZGVudGlmaWVyTmFtZU1hdGNoKCkpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ug
Y291bGQgdXNlIHRoaXMgZm9yIGluZGV4ZWQgbG9hZHMgaW4gdGhlIGZ1dHVyZS4gVGhpcyBpcyBw
cmV0dHkgc29saWQgcHJvZmlsaW5nCiAgICAgICAgICAgICAgICAgLy8gaW5mb3JtYXRpb24sIGFu
ZCBwcm9iYWJseSBiZXR0ZXIgdGhhbiBBcnJheVByb2ZpbGUgd2hlbiBpdCdzIGF2YWlsYWJsZS4K
ICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjA0MjE1Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1Zl
cnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5
U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksIHN0dWJJbmZvKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nl
c3Muc3RydWN0dXJlKCk7CkBAIC0yNjgsNyArMjcwLDcgQEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0
dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKAogICAgICAgICAg
ICAgICAgIC8vIHNob3VsZG4ndCBoYXZlIHRvIHVzZSB2YWx1ZSBwcm9maWxpbmcgdG8gZGlzY292
ZXIgc29tZXRoaW5nIHRoYXQgdGhlIEFjY2Vzc0Nhc2UKICAgICAgICAgICAgICAgICAvLyBjb3Vs
ZCBoYXZlIHRvbGQgdXMuIEJ1dCwgaXQgd29ya3Mgd2VsbCBlbm91Z2guIFNvLCBvdXIgb25seSBj
b25jZXJuIGhlcmUgaXMgdG8gbm90CiAgICAgICAgICAgICAgICAgLy8gY3Jhc2ggb24gbnVsbCBz
dHJ1Y3R1cmUuCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1Zl
cnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5
U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksIHN0dWJJbmZvKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgQ29tcGxleEdldFN0YXR1cyBjb21wbGV4R2V0
U3RhdHVzID0gQ29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcigKQEAgLTI3OSw3ICsyODEsNyBA
QCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRT
aXRlRmVlZGJhY2soCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpUYWtlc1Nsb3dQYXRoOgotICAg
ICAgICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkp
LCAqc3R1YkluZm8pOworICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNs
b3dWZXJzaW9uKHN1bW1hcnkpLCBzdHViSW5mbyk7CiAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpJbmxpbmVhYmxlOiB7CiAgICAgICAgICAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1czsKQEAgLTMw
OSw3ICszMTEsNyBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZv
V2l0aG91dEV4aXRTaXRlRmVlZGJhY2soCiAgICAgICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNl
OjpDdXN0b21BY2Nlc3NvckdldHRlcjogewogICAgICAgICAgICAgICAgICAgICBjdXN0b21BY2Nl
c3NvckdldHRlciA9IGFjY2Vzcy5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpLmN1c3RvbUFj
Y2Vzc29yKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghYWNjZXNzLmFzPEdldHRlclNldHRl
ckFjY2Vzc0Nhc2U+KCkuZG9tQXR0cmlidXRlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJz
aW9uKHN1bW1hcnkpLCBzdHViSW5mbyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbUF0dHJpYnV0
ZSA9IFdURjo6bWFrZVVuaXF1ZTxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPigqYWNjZXNzLmFzPEdl
dHRlclNldHRlckFjY2Vzc0Nhc2U+KCkuZG9tQXR0cmlidXRlKCkpOwogICAgICAgICAgICAgICAg
ICAgICBoYXZlRE9NQXR0cmlidXRlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
Lm1fc3RhdGUgPSBDdXN0b207CkBAIC0zMTgsNyArMzIwLDcgQEAgR2V0QnlTdGF0dXMgR2V0QnlT
dGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKAogICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6IHsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEl0IHdv
dWxkIGJlIHRvdGFsbHkgc3dlZXQgdG8gc3VwcG9ydCBtb3JlIG9mIHRoZXNlIGF0IHNvbWUgcG9p
bnQgaW4gdGhlCiAgICAgICAgICAgICAgICAgICAgIC8vIGZ1dHVyZS4gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzA1MgotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3Vt
bWFyeSksIHN0dWJJbmZvKTsKICAgICAgICAgICAgICAgICB9IH0KIAogICAgICAgICAgICAgICAg
IEFTU0VSVCgoQWNjZXNzQ2FzZTo6TWlzcyA9PSBhY2Nlc3MudHlwZSgpIHx8IGFjY2Vzcy5pc0N1
c3RvbSgpKSA9PSAoYWNjZXNzLm9mZnNldCgpID09IGludmFsaWRPZmZzZXQpKTsKQEAgLTMyOSwx
NiArMzMxLDE2IEBAIEdldEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm9X
aXRob3V0RXhpdFNpdGVGZWVkYmFjaygKICAgICAgICAgICAgICAgICAgICAgV1RGTW92ZShkb21B
dHRyaWJ1dGUpKTsKIAogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQo
dmFyaWFudCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNs
b3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgc3R1YkluZm8pOwogCiAg
ICAgICAgICAgICAgICAgaWYgKGhhdmVET01BdHRyaWJ1dGUpIHsKICAgICAgICAgICAgICAgICAg
ICAgLy8gR2l2ZSB1cCB3aGVuIGN1c3RvbSBhY2Nlc3NlcyBhcmUgbm90IG1lcmdlZCBpbnRvIG9u
ZS4KICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5udW1WYXJpYW50cygpICE9IDEpCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lv
bihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBH
ZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCBzdHViSW5mbyk7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgLy8gR2l2ZSB1cCB3aGVuIGN1
c3RvbSBhY2Nlc3MgYW5kIHNpbXBsZSBhY2Nlc3MgYXJlIG1peGVkLgogICAgICAgICAgICAgICAg
ICAgICBpZiAocmVzdWx0Lm1fc3RhdGUgPT0gQ3VzdG9tKQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5m
byk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93
VmVyc2lvbihzdW1tYXJ5KSwgc3R1YkluZm8pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0gfQpAQCAtMzQ5LDcgKzM1MSw3IEBAIEdldEJ5
U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVk
YmFjaygKICAgICB9CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBHZXRC
eVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOworICAgICAgICBy
ZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgc3R1YkluZm8pOwog
ICAgIH0KICAgICAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuaAppbmRleCAzNjY5MmQ5YzA4NDQ3
NGMzNGUxNDhkYjhiOWU5ZDc4YTQ5NjFjOGVhLi41ZDAyMWJjZTk4NTk4ZDQ1NmMwNjA3MTQ4ZWVk
ZGU4YWZjZjk2ZjI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlTdGF0dXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlT
dGF0dXMuaApAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChzdGF0ZSA9
PSBOb0luZm9ybWF0aW9uIHx8IHN0YXRlID09IExpa2VseVRha2VzU2xvd1BhdGggfHwgc3RhdGUg
PT0gT2JzZXJ2ZWRUYWtlc1Nsb3dQYXRoIHx8IHN0YXRlID09IE1ha2VzQ2FsbHMgfHwgc3RhdGUg
PT0gT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2FsbHMpOwogICAgIH0KICAgICAKLSAgICBleHBs
aWNpdCBHZXRCeVN0YXR1cyhTdHViSW5mb1N1bW1hcnksIFN0cnVjdHVyZVN0dWJJbmZvJik7Cisg
ICAgZXhwbGljaXQgR2V0QnlTdGF0dXMoU3R1YkluZm9TdW1tYXJ5LCBTdHJ1Y3R1cmVTdHViSW5m
byopOwogICAgIAogICAgIEdldEJ5U3RhdHVzKAogICAgICAgICBTdGF0ZSBzdGF0ZSwgYm9vbCB3
YXNTZWVuSW5KSVQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>438719</attachid>
            <date>2021-09-20 13:26:13 -0700</date>
            <delta_ts>2021-09-20 13:26:13 -0700</delta_ts>
            <desc>Test</desc>
            <filename>fuzz_gl10.js</filename>
            <type>text/javascript</type>
            <size>80516</size>
            <attacher name="Mikhail R. Gadelha">mikhail</attacher>
            
              <data encoding="base64">Ly8gT3JpZ2luYWw6IHJlc291cmNlcy9zdHVicy5qcwpmdW5jdGlvbiBub3AoKSB7CiAgcmV0dXJu
IGZhbHNlOwp9Cgp0cnkgewogIGdjOwp9IGNhdGNoIChlKSB7CiAgdGhpcy5nYyA9IGZ1bmN0aW9u
ICgpIHsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgewogICAgICBsZXQgcyA9
IG5ldyBTdHJpbmcoIkFBQUEiICsgTWF0aC5yYW5kb20oKSk7CiAgICB9CiAgfTsKfQoKdHJ5IHsK
ICB1bmV2YWw7Cn0gY2F0Y2ggKGUpIHsKICB0aGlzLnVuZXZhbCA9IHRoaXMubm9wOwp9Cgp0cnkg
ewogIFdTY3JpcHQ7Cn0gY2F0Y2ggKGUpIHsKICB0aGlzLldTY3JpcHQgPSBuZXcgUHJveHkoe30s
IHsKICAgIGdldCh0YXJnZXQsIG5hbWUpIHsKICAgICAgc3dpdGNoIChuYW1lKSB7CiAgICAgICAg
Y2FzZSAnRWNobyc6CiAgICAgICAgICByZXR1cm4gcHJpbnQ7CgogICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICByZXR1cm4ge307CiAgICAgIH0KICAgIH0KCiAgfSk7Cn0KCnRyeSB7CiAgdGhpcy5h
bGVydCA9IGNvbnNvbGUubG9nOwp9IGNhdGNoIChlKSB7fQoKdHJ5IHsKICB0aGlzLnByaW50ID0g
Y29uc29sZS5sb2c7Cn0gY2F0Y2ggKGUpIHt9CgovLyBPcmlnaW5hbDogcmVzb3VyY2VzL2pzdGVz
dF9zdHVicy5qcwpmdW5jdGlvbiBkZXNjcmlwdGlvbihtc2cpIHt9CgpmdW5jdGlvbiBkZWJ1Zyht
c2cpIHt9CgpmdW5jdGlvbiBzaG91bGRCZShfYSkgewogIHByaW50KHR5cGVvZiBfYSA9PSAiZnVu
Y3Rpb24iID8gX2EoKSA6IGV2YWwoX2EpKTsKfQoKZnVuY3Rpb24gc2hvdWxkQmVUcnVlKF9hKSB7
CiAgc2hvdWxkQmUoX2EpOwp9CgpmdW5jdGlvbiBzaG91bGRCZUZhbHNlKF9hKSB7CiAgc2hvdWxk
QmUoX2EpOwp9CgpmdW5jdGlvbiBzaG91bGRCZU5hTihfYSkgewogIHNob3VsZEJlKF9hKTsKfQoK
ZnVuY3Rpb24gc2hvdWxkQmVOdWxsKF9hKSB7CiAgc2hvdWxkQmUoX2EpOwp9CgpmdW5jdGlvbiBz
aG91bGROb3RUaHJvdyhfYSkgewogIHNob3VsZEJlKF9hKTsKfQoKZnVuY3Rpb24gc2hvdWxkVGhy
b3coX2EpIHsKICBzaG91bGRCZShfYSk7Cn0KCmZ1bmN0aW9uIG5vSW5saW5lKCkge30KCmZ1bmN0
aW9uIGZpbmlzaEpTVGVzdCgpIHt9Cgp0cnkgewogICR2bTsKfSBjYXRjaCAoZSkgewogIGNvbnN0
IGhhbmRsZXIgPSB7CiAgICBnZXQ6IGZ1bmN0aW9uICh4LCBwcm9wKSB7CiAgICAgIGlmIChwcm9w
ID09IFN5bWJvbC50b1ByaW1pdGl2ZSkgewogICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7CiAg
ICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgICAgIH07CiAgICAgIH0KCiAgICAgIHJldHVy
biBkdW1teTsKICAgIH0KICB9OwogIGNvbnN0IGR1bW15ID0gbmV3IFByb3h5KGZ1bmN0aW9uICgp
IHsKICAgIHJldHVybiBkdW1teTsKICB9LCBoYW5kbGVyKTsKICB0aGlzLiR2bSA9IGR1bW15Owp9
CgpmdW5jdGlvbiBlbnN1cmVBcnJheVN0b3JhZ2UoKSB7fQoKZnVuY3Rpb24gdHJhbnNmZXJBcnJh
eUJ1ZmZlcigpIHt9CgovLyBPcmlnaW5hbDogc3BpZGVybW9ua2V5L3NoZWxsLmpzCihmdW5jdGlv
biAoZ2xvYmFsKSB7CiAgInVzZSBzdHJpY3QiOwoKICB2YXIgdW5kZWZpbmVkOwogIHZhciBFcnJv
ciA9IGdsb2JhbC5FcnJvcjsKICB2YXIgRnVuY3Rpb24gPSBnbG9iYWwuRnVuY3Rpb247CiAgdmFy
IE51bWJlciA9IGdsb2JhbC5OdW1iZXI7CiAgdmFyIFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7CiAg
dmFyIFN0cmluZyA9IGdsb2JhbC5TdHJpbmc7CiAgdmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7
CiAgdmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7CiAgdmFyIEFycmF5SXNBcnJheSA9
IGdsb2JhbC5BcnJheS5pc0FycmF5OwogIHZhciBNYXRoQWJzID0gZ2xvYmFsLk1hdGguYWJzOwog
IHZhciBPYmplY3RDcmVhdGUgPSBnbG9iYWwuT2JqZWN0LmNyZWF0ZTsKICB2YXIgT2JqZWN0RGVm
aW5lUHJvcGVydHkgPSBnbG9iYWwuT2JqZWN0LmRlZmluZVByb3BlcnR5OwogIHZhciBSZWZsZWN0
QXBwbHkgPSBnbG9iYWwuUmVmbGVjdC5hcHBseTsKICB2YXIgUmVnRXhwUHJvdG90eXBlRXhlYyA9
IGdsb2JhbC5SZWdFeHAucHJvdG90eXBlLmV4ZWM7CiAgdmFyIFN0cmluZ1Byb3RvdHlwZUNoYXJD
b2RlQXQgPSBnbG9iYWwuU3RyaW5nLnByb3RvdHlwZS5jaGFyQ29kZUF0OwogIHZhciBTdHJpbmdQ
cm90b3R5cGVJbmRleE9mID0gZ2xvYmFsLlN0cmluZy5wcm90b3R5cGUuaW5kZXhPZjsKICB2YXIg
U3RyaW5nUHJvdG90eXBlU3Vic3RyaW5nID0gZ2xvYmFsLlN0cmluZy5wcm90b3R5cGUuc3Vic3Ry
aW5nOwogIHZhciBydW5uaW5nSW5Ccm93c2VyID0gdHlwZW9mIGdsb2JhbC53aW5kb3cgIT09ICJ1
bmRlZmluZWQiOwoKICBpZiAocnVubmluZ0luQnJvd3NlcikgewogICAgdmFyIFNwZWNpYWxQb3dl
cnNTZXRHQ1plYWwgPSBnbG9iYWwuU3BlY2lhbFBvd2VycyA/IGdsb2JhbC5TcGVjaWFsUG93ZXJz
LnNldEdDWmVhbCA6IHVuZGVmaW5lZDsKICB9CgogIHZhciBldmFsdWF0ZSA9IGdsb2JhbC5ldmFs
dWF0ZTsKICB2YXIgb3B0aW9ucyA9IGdsb2JhbC5vcHRpb25zOwoKICBmdW5jdGlvbiBBcnJheVB1
c2goYXJyLCB2YWwpIHsKICAgIGFzc2VydEVxKEFycmF5SXNBcnJheShhcnIpLCB0cnVlLCAiQXJy
YXlQdXNoIG11c3Qgb25seSBiZSB1c2VkIG9uIGFjdHVhbCBhcnJheXMiKTsKICAgIHZhciBkZXNj
ID0gT2JqZWN0Q3JlYXRlKG51bGwpOwogICAgZGVzYy52YWx1ZSA9IHZhbDsKICAgIGRlc2MuZW51
bWVyYWJsZSA9IHRydWU7CiAgICBkZXNjLmNvbmZpZ3VyYWJsZSA9IHRydWU7CiAgICBkZXNjLndy
aXRhYmxlID0gdHJ1ZTsKICAgIE9iamVjdERlZmluZVByb3BlcnR5KGFyciwgYXJyLmxlbmd0aCwg
ZGVzYyk7CiAgfQoKICBmdW5jdGlvbiBTdHJpbmdDaGFyQ29kZUF0KHN0ciwgaW5kZXgpIHsKICAg
IHJldHVybiBSZWZsZWN0QXBwbHkoU3RyaW5nUHJvdG90eXBlQ2hhckNvZGVBdCwgc3RyLCBbaW5k
ZXhdKTsKICB9CgogIGZ1bmN0aW9uIFN0cmluZ1NwbGl0KHN0ciwgZGVsaW1pdGVyKSB7CiAgICBh
c3NlcnRFcSh0eXBlb2Ygc3RyID09PSAic3RyaW5nIiAmJiB0eXBlb2YgZGVsaW1pdGVyID09PSAi
c3RyaW5nIiwgdHJ1ZSwgIlN0cmluZ1NwbGl0IG11c3QgYmUgY2FsbGVkIHdpdGggdHdvIHN0cmlu
ZyBhcmd1bWVudHMiKTsKICAgIGFzc2VydEVxKGRlbGltaXRlci5sZW5ndGggPiAwLCB0cnVlLCAi
U3RyaW5nU3BsaXQgZG9lc24ndCBzdXBwb3J0IGFuIGVtcHR5IGRlbGltaXRlciBzdHJpbmciKTsK
ICAgIHZhciBwYXJ0cyA9IFtdOwogICAgdmFyIGxhc3QgPSAwOwoKICAgIHdoaWxlICh0cnVlKSB7
CiAgICAgIHZhciBpID0gUmVmbGVjdEFwcGx5KFN0cmluZ1Byb3RvdHlwZUluZGV4T2YsIHN0ciwg
W2RlbGltaXRlciwgbGFzdF0pOwoKICAgICAgaWYgKGkgPCAwKSB7CiAgICAgICAgaWYgKGxhc3Qg
PCBzdHIubGVuZ3RoKSBBcnJheVB1c2gocGFydHMsIFJlZmxlY3RBcHBseShTdHJpbmdQcm90b3R5
cGVTdWJzdHJpbmcsIHN0ciwgW2xhc3RdKSk7CiAgICAgICAgcmV0dXJuIHBhcnRzOwogICAgICB9
CgogICAgICBBcnJheVB1c2gocGFydHMsIFJlZmxlY3RBcHBseShTdHJpbmdQcm90b3R5cGVTdWJz
dHJpbmcsIHN0ciwgW2xhc3QsIGldKSk7CiAgICAgIGxhc3QgPSBpICsgZGVsaW1pdGVyLmxlbmd0
aDsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHNoZWxsT3B0aW9uc0NsZWFyKCkgewogICAgYXNzZXJ0
RXEocnVubmluZ0luQnJvd3NlciwgZmFsc2UsICJPbmx5IGNhbGxlZCB3aGVuIHJ1bm5pbmcgaW4g
dGhlIHNoZWxsLiIpOwogICAgdmFyIGN1cnJlbnRPcHRpb25zID0gb3B0aW9ucyA/IG9wdGlvbnMo
KSA6ICIiOwogICAgaWYgKGN1cnJlbnRPcHRpb25zID09PSAiIikgcmV0dXJuOwogICAgdmFyIG9w
dGlvbk5hbWVzID0gU3RyaW5nU3BsaXQoY3VycmVudE9wdGlvbnMsICIsIik7CgogICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBvcHRpb25OYW1lcy5sZW5ndGg7IGkrKykgewogICAgICBvcHRpb25zKG9w
dGlvbk5hbWVzW2ldKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIFNhbWVWYWx1ZSh2MSwgdjIpIHsK
ICAgIGlmICh2MSA9PT0gMCAmJiB2MiA9PT0gMCkgcmV0dXJuIDEgLyB2MSA9PT0gMSAvIHYyOwog
ICAgaWYgKHYxICE9PSB2MSAmJiB2MiAhPT0gdjIpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIHYx
ID09PSB2MjsKICB9CgogIHZhciBhc3NlcnRFcSA9IGdsb2JhbC5hc3NlcnRFcTsKCiAgaWYgKHR5
cGVvZiBhc3NlcnRFcSAhPT0gImZ1bmN0aW9uIikgewogICAgYXNzZXJ0RXEgPSBmdW5jdGlvbiBh
c3NlcnRFcShhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7CiAgICAgIGlmICghU2FtZVZhbHVl
KGFjdHVhbCwgZXhwZWN0ZWQpKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQSoqKip0
aW9uIGZhaWxlZDogZ290ICIke2FjdHVhbH0iLCBleHBlY3RlZCAiJHtleHBlY3RlZH0iYCArICht
ZXNzYWdlID8gIjogIiArIG1lc3NhZ2UgOiAiIikpOwogICAgICB9CiAgICB9OwoKICAgIGdsb2Jh
bC5hc3NlcnRFcSA9IGFzc2VydEVxOwogIH0KCiAgZnVuY3Rpb24gYXNzZXJ0RXFBcnJheShhY3R1
YWwsIGV4cGVjdGVkKSB7CiAgICB2YXIgbGVuID0gYWN0dWFsLmxlbmd0aDsKICAgIGFzc2VydEVx
KGxlbiwgZXhwZWN0ZWQubGVuZ3RoLCAibWlzbWF0Y2hpbmcgYXJyYXkgbGVuZ3RocyIpOwogICAg
dmFyIGkgPSAwOwoKICAgIHRyeSB7CiAgICAgIGZvciAoOyBpIDwgbGVuOyBpKyspIGFzc2VydEVx
KGFjdHVhbFtpXSwgZXhwZWN0ZWRbaV0sICJtaXNtYXRjaCBhdCBlbGVtZW50ICIgKyBpKTsKICAg
IH0gY2F0Y2ggKGUpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeGNlcHRpb24gdGhyb3duIGF0
IGluZGV4ICR7aX06ICR7ZX1gKTsKICAgIH0KICB9CgogIGdsb2JhbC5hc3NlcnRFcUFycmF5ID0g
YXNzZXJ0RXFBcnJheTsKCiAgZnVuY3Rpb24gYXNzZXJ0VGhyb3dzKGYpIHsKICAgIGlmIChhcmd1
bWVudHMubGVuZ3RoICE9IDEpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJUb28gbWFueSBhcmd1
bWVudHMgdG8gYXNzZXJ0VGhyb3dzOyBtYXliZSB5b3UgbWVhbnQgYXNzZXJ0VGhyb3dzSW5zdGFu
Y2VPZj8iKTsKICAgIH0KCiAgICB2YXIgb2sgPSBmYWxzZTsKCiAgICB0cnkgewogICAgICBmKCk7
CiAgICB9IGNhdGNoIChleGMpIHsKICAgICAgb2sgPSB0cnVlOwogICAgfQoKICAgIGlmICghb2sp
IHRocm93IG5ldyBFcnJvcihgQSoqKip0aW9uIGZhaWxlZDogJHtmfSBkaWQgbm90IHRocm93IGFz
IGV4cGVjdGVkYCk7CiAgfQoKICBnbG9iYWwuYXNzZXJ0VGhyb3dzID0gYXNzZXJ0VGhyb3dzOwoK
ICBmdW5jdGlvbiBhc3NlcnRUaHJvd3NJbnN0YW5jZU9mKGYsIGN0b3IsIG1zZykgewogICAgdmFy
IGZ1bGxtc2c7CgogICAgdHJ5IHsKICAgICAgZigpOwogICAgfSBjYXRjaCAoZXhjKSB7CiAgICAg
IGlmIChleGMgaW5zdGFuY2VvZiBjdG9yKSByZXR1cm47CiAgICAgIGZ1bGxtc2cgPSBgQSoqKip0
aW9uIGZhaWxlZDogZXhwZWN0ZWQgZXhjZXB0aW9uICR7Y3Rvci5uYW1lfSwgZ290ICR7ZXhjfWA7
CiAgICB9CgogICAgaWYgKGZ1bGxtc2cgPT09IHVuZGVmaW5lZCkgZnVsbG1zZyA9IGBBKioqKnRp
b24gZmFpbGVkOiBleHBlY3RlZCBleGNlcHRpb24gJHtjdG9yLm5hbWV9LCBubyBleGNlcHRpb24g
dGhyb3duYDsKICAgIGlmIChtc2cgIT09IHVuZGVmaW5lZCkgZnVsbG1zZyArPSAiIC0gIiArIG1z
ZzsKICAgIHRocm93IG5ldyBFcnJvcihmdWxsbXNnKTsKICB9CgogIGdsb2JhbC5hc3NlcnRUaHJv
d3NJbnN0YW5jZU9mID0gYXNzZXJ0VGhyb3dzSW5zdGFuY2VPZjsKICB2YXIgZHVtcCA9IGdsb2Jh
bC5kdW1wOwoKICBpZiAodHlwZW9mIGdsb2JhbC5kdW1wID09PSAiZnVuY3Rpb24iKSB7fSBlbHNl
IHsKICAgIGlmIChydW5uaW5nSW5Ccm93c2VyKSB7CiAgICAgIGR1bXAgPSBmdW5jdGlvbiAoKSB7
fTsKICAgIH0gZWxzZSB7CiAgICAgIGR1bXAgPSBnbG9iYWwucHJpbnQ7CiAgICB9CgogICAgZ2xv
YmFsLmR1bXAgPSBkdW1wOwogIH0KCiAgdmFyIHByaW50OwoKICBpZiAocnVubmluZ0luQnJvd3Nl
cikgewogICAgcHJpbnQgPSBmdW5jdGlvbiBwcmludCgpIHsKICAgICAgdmFyIHMgPSAiVEVTVC1J
TkZPIHwgIjsKCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsr
KSBzICs9IFN0cmluZyhhcmd1bWVudHNbaV0pICsgIiAiOwoKICAgICAgZHVtcChzICsgIlxuIik7
CiAgICAgIGdsb2JhbC5BZGRQcmludE91dHB1dChzKTsKICAgIH07CgogICAgZ2xvYmFsLnByaW50
ID0gcHJpbnQ7CiAgfSBlbHNlIHsKICAgIHByaW50ID0gZ2xvYmFsLnByaW50OwogIH0KCiAgdmFy
IGdjemVhbCA9IGdsb2JhbC5nY3plYWw7CgogIGlmICh0eXBlb2YgZ2N6ZWFsICE9PSAiZnVuY3Rp
b24iKSB7CiAgICBpZiAodHlwZW9mIFNwZWNpYWxQb3dlcnNTZXRHQ1plYWwgPT09ICJmdW5jdGlv
biIpIHsKICAgICAgZ2N6ZWFsID0gZnVuY3Rpb24gZ2N6ZWFsKHopIHsKICAgICAgICBTcGVjaWFs
UG93ZXJzU2V0R0NaZWFsKHopOwogICAgICB9OwogICAgfSBlbHNlIHsKICAgICAgZ2N6ZWFsID0g
ZnVuY3Rpb24gKCkge307CiAgICB9CgogICAgZ2xvYmFsLmdjemVhbCA9IGdjemVhbDsKICB9Cgog
IHZhciBldmFsdWF0ZVNjcmlwdCA9IGdsb2JhbC5ldmFsdWF0ZVNjcmlwdDsKCiAgaWYgKHR5cGVv
ZiBldmFsdWF0ZSA9PT0gImZ1bmN0aW9uIiAmJiB0eXBlb2YgZXZhbHVhdGVTY3JpcHQgIT09ICJm
dW5jdGlvbiIpIHsKICAgIGV2YWx1YXRlU2NyaXB0ID0gZnVuY3Rpb24gZXZhbHVhdGVTY3JpcHQo
Y29kZSkgewogICAgICBldmFsdWF0ZShTdHJpbmcoY29kZSkpOwogICAgfTsKCiAgICBnbG9iYWwu
ZXZhbHVhdGVTY3JpcHQgPSBldmFsdWF0ZVNjcmlwdDsKICB9CgogIGZ1bmN0aW9uIHRvUHJpbnRl
ZCh2YWx1ZSkgewogICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpOwogICAgdmFyIGRpZ2l0cyA9ICIw
MTIzNDU2Nzg5QUJDREVGIjsKICAgIHZhciByZXN1bHQgPSAiIjsKCiAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBjaCA9IFN0cmluZ0NoYXJDb2Rl
QXQodmFsdWUsIGkpOwoKICAgICAgaWYgKGNoID09PSAweDVDICYmIGkgKyAxIDwgdmFsdWUubGVu
Z3RoKSB7CiAgICAgICAgdmFyIGQgPSB2YWx1ZVtpICsgMV07CgogICAgICAgIGlmIChkID09PSAi
biIpIHsKICAgICAgICAgIHJlc3VsdCArPSAiTkwiOwogICAgICAgICAgaSsrOwogICAgICAgIH0g
ZWxzZSBpZiAoZCA9PT0gInIiKSB7CiAgICAgICAgICByZXN1bHQgKz0gIkNSIjsKICAgICAgICAg
IGkrKzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVzdWx0ICs9ICJcXCI7CiAgICAgICAg
fQogICAgICB9IGVsc2UgaWYgKGNoID09PSAweDBBKSB7CiAgICAgICAgcmVzdWx0ICs9ICJOTCI7
CiAgICAgIH0gZWxzZSBpZiAoY2ggPCAweDIwIHx8IGNoID4gMHg3RSkgewogICAgICAgIHZhciBh
ID0gZGlnaXRzW2NoICYgMHhmXTsKICAgICAgICBjaCA+Pj0gNDsKICAgICAgICB2YXIgYiA9IGRp
Z2l0c1tjaCAmIDB4Zl07CiAgICAgICAgY2ggPj49IDQ7CgogICAgICAgIGlmIChjaCkgewogICAg
ICAgICAgdmFyIGMgPSBkaWdpdHNbY2ggJiAweGZdOwogICAgICAgICAgY2ggPj49IDQ7CiAgICAg
ICAgICB2YXIgZCA9IGRpZ2l0c1tjaCAmIDB4Zl07CiAgICAgICAgICByZXN1bHQgKz0gIlxcdSIg
KyBkICsgYyArIGIgKyBhOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXN1bHQgKz0gIlxc
eCIgKyBiICsgYTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVzdWx0ICs9IHZh
bHVlW2ldOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGZ1bmN0aW9u
KiBYb3JTaGlmdEdlbmVyYXRvcihzZWVkLCBzaXplKSB7CiAgICBsZXQgeCA9IHNlZWQ7CgogICAg
Zm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKICAgICAgeCBePSB4ID4+IDEyOwogICAg
ICB4IF49IHggPDwgMjU7CiAgICAgIHggXj0geCA+PiAyNzsKICAgICAgeWllbGQgeCAlIDI1NjsK
ICAgIH0KICB9CgogIGdsb2JhbC5Yb3JTaGlmdEdlbmVyYXRvciA9IFhvclNoaWZ0R2VuZXJhdG9y
OwogIHZhciBQQVNTRUQgPSAiIFBBU1NFRCEgIjsKICB2YXIgRkFJTEVEID0gIiBGQUlMRUQhICI7
CgogIGZ1bmN0aW9uIEFkZFRlc3RDYXNlKGRlc2NyaXB0aW9uLCBleHBlY3QsIGFjdHVhbCkgewog
ICAgbmV3IFRlc3RDYXNlKGRlc2NyaXB0aW9uLCBleHBlY3QsIGFjdHVhbCk7CiAgfQoKICBnbG9i
YWwuQWRkVGVzdENhc2UgPSBBZGRUZXN0Q2FzZTsKICB2YXIgdGVzdENhc2VzQXJyYXkgPSBbXTsK
CiAgZnVuY3Rpb24gVGVzdENhc2UoZCwgZSwgYSwgcikgewogICAgdGhpcy5kZXNjcmlwdGlvbiA9
IGQ7CiAgICB0aGlzLmV4cGVjdCA9IGU7CiAgICB0aGlzLmFjdHVhbCA9IGE7CiAgICB0aGlzLnBh
c3NlZCA9IGdldFRlc3RDYXNlUmVzdWx0KGUsIGEpOwogICAgdGhpcy5yZWFzb24gPSB0eXBlb2Yg
ciAhPT0gJ3VuZGVmaW5lZCcgPyBTdHJpbmcocikgOiAnJzsKICAgIEFycmF5UHVzaCh0ZXN0Q2Fz
ZXNBcnJheSwgdGhpcyk7CiAgfQoKICBnbG9iYWwuVGVzdENhc2UgPSBUZXN0Q2FzZTsKICBUZXN0
Q2FzZS5wcm90b3R5cGUgPSBPYmplY3RDcmVhdGUobnVsbCk7CgogIFRlc3RDYXNlLnByb3RvdHlw
ZS50ZXN0UGFzc2VkID0gZnVuY3Rpb24gVGVzdENhc2VfdGVzdFBhc3NlZCgpIHsKICAgIHJldHVy
biB0aGlzLnBhc3NlZDsKICB9OwoKICBUZXN0Q2FzZS5wcm90b3R5cGUudGVzdEZhaWxlZCA9IGZ1
bmN0aW9uIFRlc3RDYXNlX3Rlc3RGYWlsZWQoKSB7CiAgICByZXR1cm4gIXRoaXMucGFzc2VkOwog
IH07CgogIFRlc3RDYXNlLnByb3RvdHlwZS50ZXN0RGVzY3JpcHRpb24gPSBmdW5jdGlvbiBUZXN0
Q2FzZV90ZXN0RGVzY3JpcHRpb24oKSB7CiAgICByZXR1cm4gdGhpcy5kZXNjcmlwdGlvbiArICcg
JyArIHRoaXMucmVhc29uOwogIH07CgogIGZ1bmN0aW9uIGdldFRlc3RDYXNlUmVzdWx0KGV4cGVj
dGVkLCBhY3R1YWwpIHsKICAgIGlmICh0eXBlb2YgZXhwZWN0ZWQgIT09IHR5cGVvZiBhY3R1YWwp
IHJldHVybiBmYWxzZTsKICAgIGlmICh0eXBlb2YgZXhwZWN0ZWQgIT09ICdudW1iZXInKSByZXR1
cm4gYWN0dWFsID09IGV4cGVjdGVkOwogICAgaWYgKGFjdHVhbCAhPT0gYWN0dWFsKSByZXR1cm4g
ZXhwZWN0ZWQgIT09IGV4cGVjdGVkOwogICAgaWYgKGV4cGVjdGVkICE9PSBleHBlY3RlZCkgcmV0
dXJuIGZhbHNlOwogICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpIHJldHVybiBNYXRoQWJzKGFj
dHVhbCAtIGV4cGVjdGVkKSA8PSAxRS0xMDsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgZnVuY3Rp
b24gcmVwb3J0VGVzdENhc2VSZXN1bHQoZGVzY3JpcHRpb24sIGV4cGVjdGVkLCBhY3R1YWwsIG91
dHB1dCkgewogICAgdmFyIHRlc3RjYXNlID0gbmV3IFRlc3RDYXNlKGRlc2NyaXB0aW9uLCBleHBl
Y3RlZCwgYWN0dWFsLCBvdXRwdXQpOwoKICAgIGlmICghcnVubmluZ0luQnJvd3NlcikgewogICAg
ICBpZiAodGVzdGNhc2UucGFzc2VkKSB7CiAgICAgICAgcHJpbnQoUEFTU0VEICsgZGVzY3JpcHRp
b24pOwogICAgICB9IGVsc2UgewogICAgICAgIHJlcG9ydEZhaWx1cmUoZGVzY3JpcHRpb24gKyAi
IDogIiArIG91dHB1dCk7CiAgICAgIH0KICAgIH0KICB9CgogIGZ1bmN0aW9uIGdldFRlc3RDYXNl
cygpIHsKICAgIHJldHVybiB0ZXN0Q2FzZXNBcnJheTsKICB9CgogIGdsb2JhbC5nZXRUZXN0Q2Fz
ZXMgPSBnZXRUZXN0Q2FzZXM7CgogIGZ1bmN0aW9uIGV4cGVjdEV4aXRDb2RlKG4pIHsKICAgIHBy
aW50KCctLS0gTk9URTogSU4gVEhJUyBURVNUQ0FTRSwgV0UgRVhQRUNUIEVYSVQgQ09ERSAnICsg
biArICcgLS0tJyk7CiAgfQoKICBnbG9iYWwuZXhwZWN0RXhpdENvZGUgPSBleHBlY3RFeGl0Q29k
ZTsKCiAgZnVuY3Rpb24gaW5TZWN0aW9uKHgpIHsKICAgIHJldHVybiAiU2VjdGlvbiAiICsgeCAr
ICIgb2YgdGVzdCAtICI7CiAgfQoKICBnbG9iYWwuaW5TZWN0aW9uID0gaW5TZWN0aW9uOwoKICBm
dW5jdGlvbiByZXBvcnRGYWlsdXJlKG1zZykgewogICAgbXNnID0gU3RyaW5nKG1zZyk7CiAgICB2
YXIgbGluZXMgPSBTdHJpbmdTcGxpdChtc2csICJcbiIpOwoKICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbGluZXMubGVuZ3RoOyBpKyspIHByaW50KEZBSUxFRCArICIgIiArIGxpbmVzW2ldKTsKICB9
CgogIGdsb2JhbC5yZXBvcnRGYWlsdXJlID0gcmVwb3J0RmFpbHVyZTsKCiAgZnVuY3Rpb24gcHJp
bnRTdGF0dXMobXNnKSB7CiAgICBtc2cgPSBTdHJpbmcobXNnKTsKICAgIHZhciBsaW5lcyA9IFN0
cmluZ1NwbGl0KG1zZywgIlxuIik7CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5n
dGg7IGkrKykgcHJpbnQoIlNUQVRVUzogIiArIGxpbmVzW2ldKTsKICB9CgogIGdsb2JhbC5wcmlu
dFN0YXR1cyA9IHByaW50U3RhdHVzOwoKICBmdW5jdGlvbiBwcmludEJ1Z051bWJlcihudW0pIHsK
ICAgIHByaW50KCdCVUdOVU1CRVI6ICcgKyBudW0pOwogIH0KCiAgZ2xvYmFsLnByaW50QnVnTnVt
YmVyID0gcHJpbnRCdWdOdW1iZXI7CgogIGZ1bmN0aW9uIHJlcG9ydENvbXBhcmUoZXhwZWN0ZWQs
IGFjdHVhbCwgZGVzY3JpcHRpb24pIHsKICAgIHZhciBleHBlY3RlZF90ID0gdHlwZW9mIGV4cGVj
dGVkOwogICAgdmFyIGFjdHVhbF90ID0gdHlwZW9mIGFjdHVhbDsKICAgIHZhciBvdXRwdXQgPSAi
IjsKICAgIGlmICh0eXBlb2YgZGVzY3JpcHRpb24gPT09ICJ1bmRlZmluZWQiKSBkZXNjcmlwdGlv
biA9ICIiOwogICAgaWYgKGV4cGVjdGVkX3QgIT09IGFjdHVhbF90KSBvdXRwdXQgKz0gYFR5cGUg
bWlzbWF0Y2gsIGV4cGVjdGVkIHR5cGUgJHtleHBlY3RlZF90fSwgYWN0dWFsIHR5cGUgJHthY3R1
YWxfdH0gYDsKICAgIGlmIChleHBlY3RlZCAhPSBhY3R1YWwpIG91dHB1dCArPSBgRXhwZWN0ZWQg
dmFsdWUgJyR7dG9QcmludGVkKGV4cGVjdGVkKX0nLCBBY3R1YWwgdmFsdWUgJyR7dG9QcmludGVk
KGFjdHVhbCl9JyBgOwogICAgcmVwb3J0VGVzdENhc2VSZXN1bHQoZGVzY3JpcHRpb24sIGV4cGVj
dGVkLCBhY3R1YWwsIG91dHB1dCk7CiAgfQoKICBnbG9iYWwucmVwb3J0Q29tcGFyZSA9IHJlcG9y
dENvbXBhcmU7CgogIGZ1bmN0aW9uIHJlcG9ydE1hdGNoKGV4cGVjdGVkUmVnRXhwLCBhY3R1YWws
IGRlc2NyaXB0aW9uKSB7CiAgICB2YXIgZXhwZWN0ZWRfdCA9ICJzdHJpbmciOwogICAgdmFyIGFj
dHVhbF90ID0gdHlwZW9mIGFjdHVhbDsKICAgIHZhciBvdXRwdXQgPSAiIjsKICAgIGlmICh0eXBl
b2YgZGVzY3JpcHRpb24gPT09ICJ1bmRlZmluZWQiKSBkZXNjcmlwdGlvbiA9ICIiOwogICAgaWYg
KGV4cGVjdGVkX3QgIT09IGFjdHVhbF90KSBvdXRwdXQgKz0gYFR5cGUgbWlzbWF0Y2gsIGV4cGVj
dGVkIHR5cGUgJHtleHBlY3RlZF90fSwgYWN0dWFsIHR5cGUgJHthY3R1YWxfdH0gYDsKICAgIHZh
ciBtYXRjaGVzID0gUmVmbGVjdEFwcGx5KFJlZ0V4cFByb3RvdHlwZUV4ZWMsIGV4cGVjdGVkUmVn
RXhwLCBbYWN0dWFsXSkgIT09IG51bGw7CgogICAgaWYgKCFtYXRjaGVzKSB7CiAgICAgIG91dHB1
dCArPSBgRXhwZWN0ZWQgbWF0Y2ggdG8gJyR7dG9QcmludGVkKGV4cGVjdGVkUmVnRXhwKX0nLCBB
Y3R1YWwgdmFsdWUgJyR7dG9QcmludGVkKGFjdHVhbCl9JyBgOwogICAgfQoKICAgIHJlcG9ydFRl
c3RDYXNlUmVzdWx0KGRlc2NyaXB0aW9uLCB0cnVlLCBtYXRjaGVzLCBvdXRwdXQpOwogIH0KCiAg
Z2xvYmFsLnJlcG9ydE1hdGNoID0gcmVwb3J0TWF0Y2g7CgogIGZ1bmN0aW9uIGNvbXBhcmVTb3Vy
Y2UoZXhwZWN0LCBhY3R1YWwsIHN1bW1hcnkpIHsKICAgIHZhciBleHBlY3RQID0gU3RyaW5nKGV4
cGVjdCk7CiAgICB2YXIgYWN0dWFsUCA9IFN0cmluZyhhY3R1YWwpOwogICAgcHJpbnQoJ2V4cGVj
dDpcbicgKyBleHBlY3RQKTsKICAgIHByaW50KCdhY3R1YWw6XG4nICsgYWN0dWFsUCk7CiAgICBy
ZXBvcnRDb21wYXJlKGV4cGVjdFAsIGFjdHVhbFAsIHN1bW1hcnkpOwoKICAgIHRyeSB7CiAgICAg
IHZhciBleHBlY3RDb21waWxlID0gJ05vIEVycm9yJzsKICAgICAgdmFyIGFjdHVhbENvbXBpbGU7
CiAgICAgIEZ1bmN0aW9uKGV4cGVjdCk7CgogICAgICB0cnkgewogICAgICAgIEZ1bmN0aW9uKGFj
dHVhbCk7CiAgICAgICAgYWN0dWFsQ29tcGlsZSA9ICdObyBFcnJvcic7CiAgICAgIH0gY2F0Y2gg
KGV4MSkgewogICAgICAgIGFjdHVhbENvbXBpbGUgPSBleDEgKyAnJzsKICAgICAgfQoKICAgICAg
cmVwb3J0Q29tcGFyZShleHBlY3RDb21waWxlLCBhY3R1YWxDb21waWxlLCBzdW1tYXJ5ICsgJzog
Y29tcGlsZSBhY3R1YWwnKTsKICAgIH0gY2F0Y2ggKGV4KSB7fQogIH0KCiAgZ2xvYmFsLmNvbXBh
cmVTb3VyY2UgPSBjb21wYXJlU291cmNlOwoKICBmdW5jdGlvbiB0ZXN0KCkgewogICAgdmFyIHRl
c3RDYXNlcyA9IGdldFRlc3RDYXNlcygpOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVzdENh
c2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciB0ZXN0Q2FzZSA9IHRlc3RDYXNlc1tpXTsKICAg
ICAgdGVzdENhc2UucmVhc29uICs9IHRlc3RDYXNlLnBhc3NlZCA/ICIiIDogIndyb25nIHZhbHVl
ICI7CgogICAgICBpZiAoIXJ1bm5pbmdJbkJyb3dzZXIpIHsKICAgICAgICB2YXIgbWVzc2FnZSA9
IGAke3Rlc3RDYXNlLmRlc2NyaXB0aW9ufSA9ICR7dGVzdENhc2UuYWN0dWFsfSBleHBlY3RlZDog
JHt0ZXN0Q2FzZS5leHBlY3R9YDsKICAgICAgICBwcmludCgodGVzdENhc2UucGFzc2VkID8gUEFT
U0VEIDogRkFJTEVEKSArIG1lc3NhZ2UpOwogICAgICB9CiAgICB9CiAgfQoKICBnbG9iYWwudGVz
dCA9IHRlc3Q7CgogIGZ1bmN0aW9uIHdyaXRlSGVhZGVyVG9Mb2coc3RyaW5nKSB7CiAgICBwcmlu
dChzdHJpbmcpOwogIH0KCiAgZ2xvYmFsLndyaXRlSGVhZGVyVG9Mb2cgPSB3cml0ZUhlYWRlclRv
TG9nOwoKICBmdW5jdGlvbiBnZXRQcm9taXNlUmVzdWx0KHByb21pc2UpIHsKICAgIHZhciByZXN1
bHQsCiAgICAgICAgZXJyb3IsCiAgICAgICAgY2F1Z2h0ID0gZmFsc2U7CiAgICBwcm9taXNlLnRo
ZW4ociA9PiB7CiAgICAgIHJlc3VsdCA9IHI7CiAgICB9LCBlID0+IHsKICAgICAgY2F1Z2h0ID0g
dHJ1ZTsKICAgICAgZXJyb3IgPSBlOwogICAgfSk7CiAgICBkcmFpbkpvYlF1ZXVlKCk7CiAgICBp
ZiAoY2F1Z2h0KSB0aHJvdyBlcnJvcjsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBnbG9iYWwu
Z2V0UHJvbWlzZVJlc3VsdCA9IGdldFByb21pc2VSZXN1bHQ7CgogIGZ1bmN0aW9uIGFzc2VydEV2
ZW50dWFsbHlFcShwcm9taXNlLCBleHBlY3RlZCkgewogICAgYXNzZXJ0RXEoZ2V0UHJvbWlzZVJl
c3VsdChwcm9taXNlKSwgZXhwZWN0ZWQpOwogIH0KCiAgZ2xvYmFsLmFzc2VydEV2ZW50dWFsbHlF
cSA9IGFzc2VydEV2ZW50dWFsbHlFcTsKCiAgZnVuY3Rpb24gYXNzZXJ0RXZlbnR1YWxseVRocm93
cyhwcm9taXNlLCBleHBlY3RlZEVycm9yVHlwZSkgewogICAgYXNzZXJ0VGhyb3dzSW5zdGFuY2VP
ZigoKSA9PiBnZXRQcm9taXNlUmVzdWx0KHByb21pc2UpLCBleHBlY3RlZEVycm9yVHlwZSk7CiAg
fQoKICA7CiAgZ2xvYmFsLmFzc2VydEV2ZW50dWFsbHlUaHJvd3MgPSBhc3NlcnRFdmVudHVhbGx5
VGhyb3dzOwoKICBmdW5jdGlvbiBhc3NlcnRFdmVudHVhbGx5RGVlcEVxKHByb21pc2UsIGV4cGVj
dGVkKSB7CiAgICBhc3NlcnREZWVwRXEoZ2V0UHJvbWlzZVJlc3VsdChwcm9taXNlKSwgZXhwZWN0
ZWQpOwogIH0KCiAgOwogIGdsb2JhbC5hc3NlcnRFdmVudHVhbGx5RGVlcEVxID0gYXNzZXJ0RXZl
bnR1YWxseURlZXBFcTsKICBpZiAoIXJ1bm5pbmdJbkJyb3dzZXIpIHNoZWxsT3B0aW9uc0NsZWFy
KCk7Cn0pKHRoaXMpOwoKdmFyIERFU0NSSVBUSU9OOwoKLy8gT3JpZ2luYWw6IHNwaWRlcm1vbmtl
eS9ub24yNjIvc2hlbGwuanMKKGZ1bmN0aW9uIChnbG9iYWwpIHsKICBjb25zdCB1bmRlZmluZWQg
PSB2b2lkIDA7CgogIGdsb2JhbC5jb21wbGV0ZXNOb3JtYWxseSA9IGZ1bmN0aW9uIGNvbXBsZXRl
c05vcm1hbGx5KGNvZGUpIHsKICAgIHRyeSB7CiAgICAgIGV2YWwoY29kZSk7CiAgICAgIHJldHVy
biB0cnVlOwogICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAg
IH0KICB9OwoKICBnbG9iYWwucmFpc2VzRXhjZXB0aW9uID0gZnVuY3Rpb24gcmFpc2VzRXhjZXB0
aW9uKGV4Y2VwdGlvbikgewogICAgcmV0dXJuIGZ1bmN0aW9uIChjb2RlKSB7CiAgICAgIHRyeSB7
CiAgICAgICAgZXZhbChjb2RlKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0gY2F0Y2gg
KGFjdHVhbCkgewogICAgICAgIHJldHVybiBhY3R1YWwgaW5zdGFuY2VvZiBleGNlcHRpb247CiAg
ICAgIH0KICAgIH07CiAgfTsKCiAgZ2xvYmFsLmRlZXBFcXVhbCA9IGZ1bmN0aW9uIGRlZXBFcXVh
bChhLCBiKSB7CiAgICBpZiAodHlwZW9mIGEgIT0gdHlwZW9mIGIpIHJldHVybiBmYWxzZTsKCiAg
ICBpZiAodHlwZW9mIGEgPT0gJ29iamVjdCcpIHsKICAgICAgdmFyIHByb3BzID0ge307CgogICAg
ICBmb3IgKHZhciBwcm9wIGluIGEpIHsKICAgICAgICBpZiAoIWRlZXBFcXVhbChhW3Byb3BdLCBi
W3Byb3BdKSkgcmV0dXJuIGZhbHNlOwogICAgICAgIHByb3BzW3Byb3BdID0gdHJ1ZTsKICAgICAg
fQoKICAgICAgZm9yICh2YXIgcHJvcCBpbiBiKSBpZiAoIXByb3BzW3Byb3BdKSByZXR1cm4gZmFs
c2U7CgogICAgICByZXR1cm4gYS5sZW5ndGggPT0gYi5sZW5ndGg7CiAgICB9CgogICAgaWYgKGEg
PT09IGIpIHsKICAgICAgcmV0dXJuIGEgIT09IDAgfHwgMSAvIGEgPT09IDEgLyBiOwogICAgfQoK
ICAgIHJldHVybiBhICE9PSBhICYmIGIgIT09IGI7CiAgfTsKCiAgZ2xvYmFsLm1ha2VJdGVyYXRv
ciA9IGZ1bmN0aW9uIG1ha2VJdGVyYXRvcihvdmVycmlkZXMpIHsKICAgIHZhciB0aHJvd01ldGhv
ZDsKICAgIGlmIChvdmVycmlkZXMgJiYgb3ZlcnJpZGVzLnRocm93KSB0aHJvd01ldGhvZCA9IG92
ZXJyaWRlcy50aHJvdzsKICAgIHZhciBpdGVyYXRvciA9IHsKICAgICAgdGhyb3c6IHRocm93TWV0
aG9kLAogICAgICBuZXh0OiBmdW5jdGlvbiAoeCkgewogICAgICAgIGlmIChvdmVycmlkZXMgJiYg
b3ZlcnJpZGVzLm5leHQpIHJldHVybiBvdmVycmlkZXMubmV4dCh4KTsKICAgICAgICByZXR1cm4g
ewogICAgICAgICAgZG9uZTogZmFsc2UKICAgICAgICB9OwogICAgICB9LAogICAgICByZXR1cm46
IGZ1bmN0aW9uICh4KSB7CiAgICAgICAgaWYgKG92ZXJyaWRlcyAmJiBvdmVycmlkZXMucmV0KSBy
ZXR1cm4gb3ZlcnJpZGVzLnJldCh4KTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgZG9uZTog
dHJ1ZQogICAgICAgIH07CiAgICAgIH0KICAgIH07CiAgICByZXR1cm4gZnVuY3Rpb24gKCkgewog
ICAgICByZXR1cm4gaXRlcmF0b3I7CiAgICB9OwogIH07CgogIGdsb2JhbC5QZXJtdXRhdGlvbnMg
PSBmdW5jdGlvbiogUGVybXV0YXRpb25zKGl0ZW1zKSB7CiAgICBpZiAoaXRlbXMubGVuZ3RoID09
IDApIHsKICAgICAgeWllbGQgW107CiAgICB9IGVsc2UgewogICAgICBpdGVtcyA9IGl0ZW1zLnNs
aWNlKDApOwoKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykgewog
ICAgICAgIGxldCBzd2FwID0gaXRlbXNbMF07CiAgICAgICAgaXRlbXNbMF0gPSBpdGVtc1tpXTsK
ICAgICAgICBpdGVtc1tpXSA9IHN3YXA7CgogICAgICAgIGZvciAobGV0IGUgb2YgUGVybXV0YXRp
b25zKGl0ZW1zLnNsaWNlKDEsIGl0ZW1zLmxlbmd0aCkpKSB5aWVsZCBbaXRlbXNbMF1dLmNvbmNh
dChlKTsKICAgICAgfQogICAgfQogIH07CgogIGlmICh0eXBlb2YgZ2xvYmFsLmFzc2VydFRocm93
c1ZhbHVlID09PSAndW5kZWZpbmVkJykgewogICAgZ2xvYmFsLmFzc2VydFRocm93c1ZhbHVlID0g
ZnVuY3Rpb24gYXNzZXJ0VGhyb3dzVmFsdWUoZiwgdmFsLCBtc2cpIHsKICAgICAgdmFyIGZ1bGxt
c2c7CgogICAgICB0cnkgewogICAgICAgIGYoKTsKICAgICAgfSBjYXRjaCAoZXhjKSB7CiAgICAg
ICAgaWYgKGV4YyA9PT0gdmFsID09PSAodmFsID09PSB2YWwpICYmICh2YWwgIT09IDAgfHwgMSAv
IGV4YyA9PT0gMSAvIHZhbCkpIHJldHVybjsKICAgICAgICBmdWxsbXNnID0gIkEqKioqdGlvbiBm
YWlsZWQ6IGV4cGVjdGVkIGV4Y2VwdGlvbiAiICsgdmFsICsgIiwgZ290ICIgKyBleGM7CiAgICAg
IH0KCiAgICAgIGlmIChmdWxsbXNnID09PSB1bmRlZmluZWQpIGZ1bGxtc2cgPSAiQSoqKip0aW9u
IGZhaWxlZDogZXhwZWN0ZWQgZXhjZXB0aW9uICIgKyB2YWwgKyAiLCBubyBleGNlcHRpb24gdGhy
b3duIjsKICAgICAgaWYgKG1zZyAhPT0gdW5kZWZpbmVkKSBmdWxsbXNnICs9ICIgLSAiICsgbXNn
OwogICAgICB0aHJvdyBuZXcgRXJyb3IoZnVsbG1zZyk7CiAgICB9OwogIH0KCiAgaWYgKHR5cGVv
ZiBnbG9iYWwuYXNzZXJ0VGhyb3dzSW5zdGFuY2VPZiA9PT0gJ3VuZGVmaW5lZCcpIHsKICAgIGds
b2JhbC5hc3NlcnRUaHJvd3NJbnN0YW5jZU9mID0gZnVuY3Rpb24gYXNzZXJ0VGhyb3dzSW5zdGFu
Y2VPZihmLCBjdG9yLCBtc2cpIHsKICAgICAgdmFyIGZ1bGxtc2c7CgogICAgICB0cnkgewogICAg
ICAgIGYoKTsKICAgICAgfSBjYXRjaCAoZXhjKSB7CiAgICAgICAgaWYgKGV4YyBpbnN0YW5jZW9m
IGN0b3IpIHJldHVybjsKICAgICAgICBmdWxsbXNnID0gYEEqKioqdGlvbiBmYWlsZWQ6IGV4cGVj
dGVkIGV4Y2VwdGlvbiAke2N0b3IubmFtZX0sIGdvdCAke2V4Y31gOwogICAgICB9CgogICAgICBp
ZiAoZnVsbG1zZyA9PT0gdW5kZWZpbmVkKSBmdWxsbXNnID0gYEEqKioqdGlvbiBmYWlsZWQ6IGV4
cGVjdGVkIGV4Y2VwdGlvbiAke2N0b3IubmFtZX0sIG5vIGV4Y2VwdGlvbiB0aHJvd25gOwogICAg
ICBpZiAobXNnICE9PSB1bmRlZmluZWQpIGZ1bGxtc2cgKz0gIiAtICIgKyBtc2c7CiAgICAgIHRo
cm93IG5ldyBFcnJvcihmdWxsbXNnKTsKICAgIH07CiAgfQoKICBnbG9iYWwuYXNzZXJ0RGVlcEVx
ID0gZnVuY3Rpb24gKCkgewogICAgdmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCwK
ICAgICAgICBBcnJheV9pc0FycmF5ID0gQXJyYXkuaXNBcnJheSwKICAgICAgICBBcnJheV9pbmNs
dWRlcyA9IGNhbGwuYmluZChBcnJheS5wcm90b3R5cGUuaW5jbHVkZXMpLAogICAgICAgIE1hcF8g
PSBNYXAsCiAgICAgICAgRXJyb3JfID0gRXJyb3IsCiAgICAgICAgU3ltYm9sXyA9IFN5bWJvbCwK
ICAgICAgICBTeW1ib2xfa2V5Rm9yID0gU3ltYm9sLmtleUZvciwKICAgICAgICBTeW1ib2xfZGVz
Y3JpcHRpb24gPSBjYWxsLmJpbmQoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihTeW1i
b2wucHJvdG90eXBlLCAiZGVzY3JpcHRpb24iKS5nZXQpLAogICAgICAgIE1hcF9oYXMgPSBjYWxs
LmJpbmQoTWFwLnByb3RvdHlwZS5oYXMpLAogICAgICAgIE1hcF9nZXQgPSBjYWxsLmJpbmQoTWFw
LnByb3RvdHlwZS5nZXQpLAogICAgICAgIE1hcF9zZXQgPSBjYWxsLmJpbmQoTWFwLnByb3RvdHlw
ZS5zZXQpLAogICAgICAgIE9iamVjdF90b1N0cmluZyA9IGNhbGwuYmluZChPYmplY3QucHJvdG90
eXBlLnRvU3RyaW5nKSwKICAgICAgICBGdW5jdGlvbl90b1N0cmluZyA9IGNhbGwuYmluZChGdW5j
dGlvbi5wcm90b3R5cGUudG9TdHJpbmcpLAogICAgICAgIE9iamVjdF9nZXRQcm90b3R5cGVPZiA9
IE9iamVjdC5nZXRQcm90b3R5cGVPZiwKICAgICAgICBPYmplY3RfaGFzT3duUHJvcGVydHkgPSBj
YWxsLmJpbmQoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSksCiAgICAgICAgT2JqZWN0
X2dldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IsCiAgICAgICAgT2JqZWN0X2lzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUsCiAg
ICAgICAgT2JqZWN0X2dldE93blByb3BlcnR5TmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlO
YW1lczsKCiAgICBmdW5jdGlvbiBpc1ByaW1pdGl2ZSh2KSB7CiAgICAgIHJldHVybiB2ID09PSBu
dWxsIHx8IHYgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdiA9PT0gImJvb2xlYW4iIHx8IHR5cGVv
ZiB2ID09PSAibnVtYmVyIiB8fCB0eXBlb2YgdiA9PT0gInN0cmluZyIgfHwgdHlwZW9mIHYgPT09
ICJzeW1ib2wiOwogICAgfQoKICAgIGZ1bmN0aW9uIGFzc2VydFNhbWVWYWx1ZShhLCBiLCBtc2cp
IHsKICAgICAgdHJ5IHsKICAgICAgICBhc3NlcnRFcShhLCBiKTsKICAgICAgfSBjYXRjaCAoZXhj
KSB7CiAgICAgICAgdGhyb3cgRXJyb3JfKGV4Yy5tZXNzYWdlICsgKG1zZyA/ICIgIiArIG1zZyA6
ICIiKSk7CiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBhc3NlcnRTYW1lQ2xhc3MoYSwgYiwg
bXNnKSB7CiAgICAgIHZhciBhYyA9IE9iamVjdF90b1N0cmluZyhhKSwKICAgICAgICAgIGJjID0g
T2JqZWN0X3RvU3RyaW5nKGIpOwogICAgICBhc3NlcnRTYW1lVmFsdWUoYWMsIGJjLCBtc2cpOwoK
ICAgICAgc3dpdGNoIChhYykgewogICAgICAgIGNhc2UgIltvYmplY3QgRnVuY3Rpb25dIjoKICAg
ICAgICAgIGlmICh0eXBlb2YgaXNQcm94eSAhPT0gInVuZGVmaW5lZCIgJiYgIWlzUHJveHkoYSkg
JiYgIWlzUHJveHkoYikpIGFzc2VydFNhbWVWYWx1ZShGdW5jdGlvbl90b1N0cmluZyhhKSwgRnVu
Y3Rpb25fdG9TdHJpbmcoYiksIG1zZyk7CiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBhdChw
cmV2bXNnLCBzZWdtZW50KSB7CiAgICAgIHJldHVybiBwcmV2bXNnID8gcHJldm1zZyArIHNlZ21l
bnQgOiAiYXQgXyIgKyBzZWdtZW50OwogICAgfQoKICAgIHJldHVybiBmdW5jdGlvbiBhc3NlcnRE
ZWVwRXEoYSwgYiwgb3B0aW9ucykgewogICAgICB2YXIgc3RyaWN0RXF1aXZhbGVuY2UgPSBvcHRp
b25zID8gb3B0aW9ucy5zdHJpY3RFcXVpdmFsZW5jZSA6IGZhbHNlOwoKICAgICAgZnVuY3Rpb24g
YXNzZXJ0U2FtZVByb3RvKGEsIGIsIG1zZykgewogICAgICAgIGNoZWNrKE9iamVjdF9nZXRQcm90
b3R5cGVPZihhKSwgT2JqZWN0X2dldFByb3RvdHlwZU9mKGIpLCBhdChtc2csICIuX19wcm90b19f
IikpOwogICAgICB9CgogICAgICBmdW5jdGlvbiBmYWlsUHJvcExpc3QobmEsIG5iLCBtc2cpIHsK
ICAgICAgICB0aHJvdyBFcnJvcl8oImdvdCBvd24gcHJvcGVydGllcyAiICsgSlNPTi5zdHJpbmdp
ZnkobmEpICsgIiwgZXhwZWN0ZWQgIiArIEpTT04uc3RyaW5naWZ5KG5iKSArIChtc2cgPyAiICIg
KyBtc2cgOiAiIikpOwogICAgICB9CgogICAgICBmdW5jdGlvbiBhc3NlcnRTYW1lUHJvcHMoYSwg
YiwgbXNnKSB7CiAgICAgICAgdmFyIG5hID0gT2JqZWN0X2dldE93blByb3BlcnR5TmFtZXMoYSks
CiAgICAgICAgICAgIG5iID0gT2JqZWN0X2dldE93blByb3BlcnR5TmFtZXMoYik7CiAgICAgICAg
aWYgKG5hLmxlbmd0aCAhPT0gbmIubGVuZ3RoKSBmYWlsUHJvcExpc3QobmEsIG5iLCBtc2cpOwoK
ICAgICAgICBpZiAoQXJyYXlfaXNBcnJheShhKSkgewogICAgICAgICAgbmEuc29ydCgpOwogICAg
ICAgICAgbmIuc29ydCgpOwogICAgICAgIH0KCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBu
YS5sZW5ndGg7IGkrKykgewogICAgICAgICAgdmFyIG5hbWUgPSBuYVtpXTsKICAgICAgICAgIGlm
IChuYW1lICE9PSBuYltpXSkgZmFpbFByb3BMaXN0KG5hLCBuYiwgbXNnKTsKICAgICAgICAgIHZh
ciBkYSA9IE9iamVjdF9nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYSwgbmFtZSksCiAgICAgICAg
ICAgICAgZGIgPSBPYmplY3RfZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGIsIG5hbWUpOwogICAg
ICAgICAgdmFyIHBtc2cgPSBhdChtc2csIC9eW18kQS1aYS16MC05XSskLy50ZXN0KG5hbWUpID8g
LzB8WzEtOV1bMC05XSovLnRlc3QobmFtZSkgPyAiWyIgKyBuYW1lICsgIl0iIDogIi4iICsgbmFt
ZSA6ICJbIiArIEpTT04uc3RyaW5naWZ5KG5hbWUpICsgIl0iKTsKICAgICAgICAgIGFzc2VydFNh
bWVWYWx1ZShkYS5jb25maWd1cmFibGUsIGRiLmNvbmZpZ3VyYWJsZSwgYXQocG1zZywgIi5bW0Nv
bmZpZ3VyYWJsZV1dIikpOwogICAgICAgICAgYXNzZXJ0U2FtZVZhbHVlKGRhLmVudW1lcmFibGUs
IGRiLmVudW1lcmFibGUsIGF0KHBtc2csICIuW1tFbnVtZXJhYmxlXV0iKSk7CgogICAgICAgICAg
aWYgKE9iamVjdF9oYXNPd25Qcm9wZXJ0eShkYSwgInZhbHVlIikpIHsKICAgICAgICAgICAgaWYg
KCFPYmplY3RfaGFzT3duUHJvcGVydHkoZGIsICJ2YWx1ZSIpKSB0aHJvdyBFcnJvcl8oImdvdCBk
YXRhIHByb3BlcnR5LCBleHBlY3RlZCBhY2Nlc3NvciBwcm9wZXJ0eSIgKyBwbXNnKTsKICAgICAg
ICAgICAgY2hlY2soZGEudmFsdWUsIGRiLnZhbHVlLCBwbXNnKTsKICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgIGlmIChPYmplY3RfaGFzT3duUHJvcGVydHkoZGIsICJ2YWx1ZSIpKSB0aHJv
dyBFcnJvcl8oImdvdCBhY2Nlc3NvciBwcm9wZXJ0eSwgZXhwZWN0ZWQgZGF0YSBwcm9wZXJ0eSIg
KyBwbXNnKTsKICAgICAgICAgICAgY2hlY2soZGEuZ2V0LCBkYi5nZXQsIGF0KHBtc2csICIuW1tH
ZXRdXSIpKTsKICAgICAgICAgICAgY2hlY2soZGEuc2V0LCBkYi5zZXQsIGF0KHBtc2csICIuW1tT
ZXRdXSIpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIDsKICAgICAgY29u
c3Qgd2VsbEtub3duU3ltYm9scyA9IFJlZmxlY3Qub3duS2V5cyhTeW1ib2wpLm1hcChrZXkgPT4g
U3ltYm9sW2tleV0pLmZpbHRlcih2YWx1ZSA9PiB0eXBlb2YgdmFsdWUgPT09ICJzeW1ib2wiKTsK
CiAgICAgIGZ1bmN0aW9uIGlzU2ltaWxhclN5bWJvbChhLCBiKSB7CiAgICAgICAgaWYgKGEgPT09
IGIpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFN5
bWJvbF9kZXNjcmlwdGlvbihhKSA9PT0gU3ltYm9sX2Rlc2NyaXB0aW9uKGIpICYmIFN5bWJvbF9r
ZXlGb3IoYSkgPT09IFN5bWJvbF9rZXlGb3IoYikgJiYgIUFycmF5X2luY2x1ZGVzKHdlbGxLbm93
blN5bWJvbHMsIGEpICYmICFBcnJheV9pbmNsdWRlcyh3ZWxsS25vd25TeW1ib2xzLCBiKTsKICAg
ICAgfQoKICAgICAgdmFyIGFiID0gbmV3IE1hcF8oKTsKICAgICAgdmFyIGJwYXRoID0gbmV3IE1h
cF8oKTsKCiAgICAgIGZ1bmN0aW9uIGNoZWNrKGEsIGIsIHBhdGgpIHsKICAgICAgICBpZiAodHlw
ZW9mIGEgPT09ICJzeW1ib2wiKSB7CiAgICAgICAgICBpZiAodHlwZW9mIGIgIT09ICJzeW1ib2wi
KSB7CiAgICAgICAgICAgIHRocm93IEVycm9yXygiZ290ICIgKyBTdHJpbmcoYSkgKyAiLCBleHBl
Y3RlZCAiICsgU3RyaW5nKGIpICsgIiAiICsgcGF0aCk7CiAgICAgICAgICB9IGVsc2UgaWYgKCFp
c1NpbWlsYXJTeW1ib2woYSwgYikpIHsKICAgICAgICAgICAgdGhyb3cgRXJyb3JfKCJnb3QgIiAr
IFN0cmluZyhhKSArICIsIGV4cGVjdGVkICIgKyBTdHJpbmcoYikgKyAiICIgKyBwYXRoKTsKICAg
ICAgICAgIH0gZWxzZSBpZiAoTWFwX2hhcyhhYiwgYSkpIHsKICAgICAgICAgICAgYXNzZXJ0U2Ft
ZVZhbHVlKE1hcF9nZXQoYWIsIGEpLCBiLCBwYXRoKTsKICAgICAgICAgIH0gZWxzZSBpZiAoTWFw
X2hhcyhicGF0aCwgYikpIHsKICAgICAgICAgICAgdmFyIGJQcmV2UGF0aCA9IE1hcF9nZXQoYnBh
dGgsIGIpIHx8ICJfIjsKICAgICAgICAgICAgdGhyb3cgRXJyb3JfKCJnb3QgZGlzdGluY3Qgc3lt
Ym9scyAiICsgYXQocGF0aCwgIiIpICsgIiBhbmQgIiArIGF0KGJQcmV2UGF0aCwgIiIpICsgIiwg
ZXhwZWN0ZWQgdGhlIHNhbWUgc3ltYm9sIGJvdGggcGxhY2VzIik7CiAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICBNYXBfc2V0KGFiLCBhLCBiKTsKICAgICAgICAgICAgTWFwX3NldChicGF0
aCwgYiwgcGF0aCk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChpc1ByaW1pdGl2ZShh
KSkgewogICAgICAgICAgYXNzZXJ0U2FtZVZhbHVlKGEsIGIsIHBhdGgpOwogICAgICAgIH0gZWxz
ZSBpZiAoaXNQcmltaXRpdmUoYikpIHsKICAgICAgICAgIHRocm93IEVycm9yXygiZ290ICIgKyBP
YmplY3RfdG9TdHJpbmcoYSkgKyAiLCBleHBlY3RlZCAiICsgU3RyaW5nKGIpICsgIiAiICsgcGF0
aCk7CiAgICAgICAgfSBlbHNlIGlmIChNYXBfaGFzKGFiLCBhKSkgewogICAgICAgICAgYXNzZXJ0
U2FtZVZhbHVlKE1hcF9nZXQoYWIsIGEpLCBiLCBwYXRoKTsKICAgICAgICB9IGVsc2UgaWYgKE1h
cF9oYXMoYnBhdGgsIGIpKSB7CiAgICAgICAgICB2YXIgYlByZXZQYXRoID0gTWFwX2dldChicGF0
aCwgYikgfHwgIl8iOwogICAgICAgICAgdGhyb3cgRXJyb3JfKCJnb3QgZGlzdGluY3Qgb2JqZWN0
cyAiICsgYXQocGF0aCwgIiIpICsgIiBhbmQgIiArIGF0KGJQcmV2UGF0aCwgIiIpICsgIiwgZXhw
ZWN0ZWQgdGhlIHNhbWUgb2JqZWN0IGJvdGggcGxhY2VzIik7CiAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgIE1hcF9zZXQoYWIsIGEsIGIpOwogICAgICAgICAgTWFwX3NldChicGF0aCwgYiwgcGF0
aCk7CgogICAgICAgICAgaWYgKGEgIT09IGIgfHwgc3RyaWN0RXF1aXZhbGVuY2UpIHsKICAgICAg
ICAgICAgYXNzZXJ0U2FtZUNsYXNzKGEsIGIsIHBhdGgpOwogICAgICAgICAgICBhc3NlcnRTYW1l
UHJvdG8oYSwgYiwgcGF0aCk7CiAgICAgICAgICAgIGFzc2VydFNhbWVQcm9wcyhhLCBiLCBwYXRo
KTsKICAgICAgICAgICAgYXNzZXJ0U2FtZVZhbHVlKE9iamVjdF9pc0V4dGVuc2libGUoYSksIE9i
amVjdF9pc0V4dGVuc2libGUoYiksIGF0KHBhdGgsICIuW1tFeHRlbnNpYmxlXV0iKSk7CiAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICBjaGVjayhhLCBiLCAiIik7CiAgICB9Owog
IH0oKTsKfSkodGhpcyk7CgovLyBPcmlnaW5hbDogc3BpZGVybW9ua2V5L25vbjI2Mi9nZW5lcmF0
b3JzL3NoZWxsLmpzCmZ1bmN0aW9uIGFzc2VydEZhbHNlKGEpIHsKICBhc3NlcnRFcShhLCBmYWxz
ZSk7Cn0KCmZ1bmN0aW9uIGFzc2VydFRydWUoYSkgewogIGFzc2VydEVxKGEsIHRydWUpOwp9Cgpm
dW5jdGlvbiBhc3NlcnROb3RFcShmb3VuZCwgbm90X2V4cGVjdGVkKSB7CiAgYXNzZXJ0RXEoT2Jq
ZWN0LmlzKGZvdW5kLCBub3RfZXhwZWN0ZWQpLCBmYWxzZSk7Cn0KCmZ1bmN0aW9uIGFzc2VydEl0
ZXJhdG9yUmVzdWx0KHJlc3VsdCwgdmFsdWUsIGRvbmUpIHsKICBhc3NlcnREZWVwRXEocmVzdWx0
LnZhbHVlLCB2YWx1ZSk7CiAgYXNzZXJ0RXEocmVzdWx0LmRvbmUsIGRvbmUpOwp9CgpmdW5jdGlv
biBhc3NlcnRJdGVyYXRvck5leHQoaXRlciwgdmFsdWUpIHsKICBhc3NlcnRJdGVyYXRvclJlc3Vs
dChpdGVyLm5leHQoKSwgdmFsdWUsIGZhbHNlKTsKfQoKZnVuY3Rpb24gYXNzZXJ0SXRlcmF0b3JE
b25lKGl0ZXIsIHZhbHVlKSB7CiAgYXNzZXJ0SXRlcmF0b3JSZXN1bHQoaXRlci5uZXh0KCksIHZh
bHVlLCB0cnVlKTsKfQoKLy8gT3JpZ2luYWw6IHNwaWRlcm1vbmtleS9ub24yNjIvUmVnRXhwL3No
ZWxsLmpzCihmdW5jdGlvbiAoZ2xvYmFsKSB7CiAgdmFyIE1TR19QQVRURVJOID0gJ1xucmVnZXhw
ID0gJzsKICB2YXIgTVNHX1NUUklORyA9ICdcbnN0cmluZyA9ICc7CiAgdmFyIE1TR19FWFBFQ1Qg
PSAnXG5FeHBlY3Q6ICc7CiAgdmFyIE1TR19BQ1RVQUwgPSAnXG5BY3R1YWw6ICc7CiAgdmFyIEVS
Ul9MRU5HVEggPSAnXG5FUlJPUiAhISEgbWF0Y2ggYXJyYXlzIGhhdmUgZGlmZmVyZW50IGxlbmd0
aHM6JzsKICB2YXIgRVJSX01BVENIID0gJ1xuRVJST1IgISEhIHJlZ2V4cCBmYWlsZWQgdG8gZ2l2
ZSBleHBlY3RlZCBtYXRjaCBhcnJheTonOwogIHZhciBFUlJfTk9fTUFUQ0ggPSAnXG5FUlJPUiAh
ISEgcmVnZXhwIEZBSUxFRCB0byBtYXRjaCBhbnl0aGluZyAhISEnOwogIHZhciBFUlJfVU5FWFBf
TUFUQ0ggPSAnXG5FUlJPUiAhISEgcmVnZXhwIE1BVENIRUQgd2hlbiB3ZSBleHBlY3RlZCBpdCB0
byBmYWlsICEhISc7CiAgdmFyIENIQVJfTEJSQUNLRVQgPSAnWyc7CiAgdmFyIENIQVJfUkJSQUNL
RVQgPSAnXSc7CiAgdmFyIENIQVJfUVRfREJMID0gJyInOwogIHZhciBDSEFSX1FUID0gIiciOwog
IHZhciBDSEFSX05MID0gJ1xuJzsKICB2YXIgQ0hBUl9DT01NQSA9ICcsJzsKICB2YXIgQ0hBUl9T
UEFDRSA9ICcgJzsKICB2YXIgVFlQRV9TVFJJTkcgPSB0eXBlb2YgJ2FiYyc7CgogIGdsb2JhbC50
ZXN0UmVnRXhwID0gZnVuY3Rpb24gdGVzdFJlZ0V4cChzdGF0dXNlcywgcGF0dGVybnMsIHN0cmlu
Z3MsIGFjdHVhbG1hdGNoZXMsIGV4cGVjdGVkbWF0Y2hlcykgewogICAgdmFyIHN0YXR1cyA9ICcn
OwogICAgdmFyIHBhdHRlcm4gPSBuZXcgUmVnRXhwKCk7CiAgICB2YXIgc3RyaW5nID0gJyc7CiAg
ICB2YXIgYWN0dWFsbWF0Y2ggPSBuZXcgQXJyYXkoKTsKICAgIHZhciBleHBlY3RlZG1hdGNoID0g
bmV3IEFycmF5KCk7CiAgICB2YXIgc3RhdGUgPSAnJzsKICAgIHZhciBsQWN0dWFsID0gLTE7CiAg
ICB2YXIgbEV4cGVjdCA9IC0xOwoKICAgIGZvciAodmFyIGkgPSAwOyBpICE9IHBhdHRlcm5zLmxl
bmd0aDsgaSsrKSB7CiAgICAgIHN0YXR1cyA9IHN0YXR1c2VzW2ldOwogICAgICBwYXR0ZXJuID0g
cGF0dGVybnNbaV07CiAgICAgIHN0cmluZyA9IHN0cmluZ3NbaV07CiAgICAgIGFjdHVhbG1hdGNo
ID0gYWN0dWFsbWF0Y2hlc1tpXTsKICAgICAgZXhwZWN0ZWRtYXRjaCA9IGV4cGVjdGVkbWF0Y2hl
c1tpXTsKICAgICAgc3RhdGUgPSBnZXRTdGF0ZShzdGF0dXMsIHBhdHRlcm4sIHN0cmluZyk7CiAg
ICAgIGRlc2NyaXB0aW9uID0gc3RhdHVzOwoKICAgICAgaWYgKGFjdHVhbG1hdGNoKSB7CiAgICAg
ICAgYWN0dWFsID0gZm9ybWF0QXJyYXkoYWN0dWFsbWF0Y2gpOwoKICAgICAgICBpZiAoZXhwZWN0
ZWRtYXRjaCkgewogICAgICAgICAgbEV4cGVjdCA9IGV4cGVjdGVkbWF0Y2gubGVuZ3RoOwogICAg
ICAgICAgbEFjdHVhbCA9IGFjdHVhbG1hdGNoLmxlbmd0aDsKICAgICAgICAgIHZhciBleHBlY3Rl
ZCA9IGZvcm1hdEFycmF5KGV4cGVjdGVkbWF0Y2gpOwoKICAgICAgICAgIGlmIChsQWN0dWFsICE9
IGxFeHBlY3QpIHsKICAgICAgICAgICAgcmVwb3J0Q29tcGFyZShsRXhwZWN0LCBsQWN0dWFsLCBz
dGF0ZSArIEVSUl9MRU5HVEggKyBNU0dfRVhQRUNUICsgZXhwZWN0ZWQgKyBNU0dfQUNUVUFMICsg
YWN0dWFsICsgQ0hBUl9OTCk7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQoKICAg
ICAgICAgIGlmIChleHBlY3RlZCAhPSBhY3R1YWwpIHsKICAgICAgICAgICAgcmVwb3J0Q29tcGFy
ZShleHBlY3RlZCwgYWN0dWFsLCBzdGF0ZSArIEVSUl9NQVRDSCArIE1TR19FWFBFQ1QgKyBleHBl
Y3RlZCArIE1TR19BQ1RVQUwgKyBhY3R1YWwgKyBDSEFSX05MKTsKICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgIHJlcG9ydENvbXBhcmUoZXhwZWN0ZWQsIGFjdHVhbCwgc3RhdGUpOwogICAg
ICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBleHBlY3RlZCA9IGV4cGVjdGVkbWF0
Y2g7CiAgICAgICAgICByZXBvcnRDb21wYXJlKGV4cGVjdGVkLCBhY3R1YWwsIHN0YXRlICsgRVJS
X1VORVhQX01BVENIICsgTVNHX0VYUEVDVCArIGV4cGVjdGVkbWF0Y2ggKyBNU0dfQUNUVUFMICsg
YWN0dWFsICsgQ0hBUl9OTCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGlmIChl
eHBlY3RlZG1hdGNoKSB7CiAgICAgICAgICBhY3R1YWwgPSBhY3R1YWxtYXRjaDsKICAgICAgICAg
IHJlcG9ydENvbXBhcmUoZXhwZWN0ZWQsIGFjdHVhbCwgc3RhdGUgKyBFUlJfTk9fTUFUQ0ggKyBN
U0dfRVhQRUNUICsgZXhwZWN0ZWRtYXRjaCArIE1TR19BQ1RVQUwgKyBhY3R1YWxtYXRjaCArIENI
QVJfTkwpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBleHBlY3RlZCA9IGV4cGVjdGVkbWF0
Y2g7CiAgICAgICAgICBhY3R1YWwgPSBhY3R1YWxtYXRjaDsKICAgICAgICAgIHJlcG9ydENvbXBh
cmUoZXhwZWN0ZWRtYXRjaCwgYWN0dWFsbWF0Y2gsIHN0YXRlKTsKICAgICAgICB9CiAgICAgIH0K
ICAgIH0KICB9OwoKICBmdW5jdGlvbiBnZXRTdGF0ZShzdGF0dXMsIHBhdHRlcm4sIHN0cmluZykg
ewogICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1xuL2csICdcXG4nKTsKICAgIHN0cmluZyA9
IHN0cmluZy5yZXBsYWNlKC9cci9nLCAnXFxyJyk7CiAgICBzdHJpbmcgPSBzdHJpbmcucmVwbGFj
ZSgvXHQvZywgJ1xcdCcpOwogICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1x2L2csICdcXHYn
KTsKICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC9cZi9nLCAnXFxmJyk7CiAgICByZXR1cm4g
c3RhdHVzICsgTVNHX1BBVFRFUk4gKyBwYXR0ZXJuICsgTVNHX1NUUklORyArIHNpbmdsZVF1b3Rl
KHN0cmluZyk7CiAgfQoKICBmdW5jdGlvbiBmb3JtYXRBcnJheShhcnIpIHsKICAgIHRyeSB7CiAg
ICAgIHJldHVybiBhcnIudG9Tb3VyY2UoKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgcmV0dXJu
IHRvU291cmNlKGFycik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiB0b1NvdXJjZShhcnIpIHsKICAg
IHZhciBkZWxpbSA9IENIQVJfQ09NTUEgKyBDSEFSX1NQQUNFOwogICAgdmFyIGVsdCA9ICcnOwog
ICAgdmFyIHJldCA9ICcnOwogICAgdmFyIGxlbiA9IGFyci5sZW5ndGg7CgogICAgZm9yIChpID0g
MDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgIGVsdCA9IGFycltpXTsKCiAgICAgIHN3aXRjaCAodHJ1
ZSkgewogICAgICAgIGNhc2UgdHlwZW9mIGVsdCA9PT0gVFlQRV9TVFJJTkc6CiAgICAgICAgICBy
ZXQgKz0gZG91YmxlUXVvdGUoZWx0KTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIGVs
dCA9PT0gdW5kZWZpbmVkIHx8IGVsdCA9PT0gbnVsbDoKICAgICAgICAgIGJyZWFrOwoKICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgcmV0ICs9IGVsdC50b1N0cmluZygpOwogICAgICB9CgogICAg
ICBpZiAoaSA8IGxlbiAtIDEgfHwgZWx0ID09PSB1bmRlZmluZWQpIHJldCArPSBkZWxpbTsKICAg
IH0KCiAgICByZXR1cm4gQ0hBUl9MQlJBQ0tFVCArIHJldCArIENIQVJfUkJSQUNLRVQ7CiAgfQoK
ICBmdW5jdGlvbiBkb3VibGVRdW90ZSh0ZXh0KSB7CiAgICByZXR1cm4gQ0hBUl9RVF9EQkwgKyB0
ZXh0ICsgQ0hBUl9RVF9EQkw7CiAgfQoKICBmdW5jdGlvbiBzaW5nbGVRdW90ZSh0ZXh0KSB7CiAg
ICByZXR1cm4gQ0hBUl9RVCArIHRleHQgKyBDSEFSX1FUOwogIH0KCiAgZ2xvYmFsLm1ha2VFeHBl
Y3RlZE1hdGNoID0gZnVuY3Rpb24gbWFrZUV4cGVjdGVkTWF0Y2goYXJyLCBpbmRleCwgaW5wdXQp
IHsKICAgIHZhciBleHBlY3RlZE1hdGNoID0gewogICAgICBpbmRleDogaW5kZXgsCiAgICAgIGlu
cHV0OiBpbnB1dCwKICAgICAgbGVuZ3RoOiBhcnIubGVuZ3RoCiAgICB9OwoKICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgKytpKSBleHBlY3RlZE1hdGNoW2ldID0gYXJyW2ldOwoK
ICAgIHJldHVybiBleHBlY3RlZE1hdGNoOwogIH07CgogIGdsb2JhbC5jaGVja1JlZ0V4cE1hdGNo
ID0gZnVuY3Rpb24gY2hlY2tSZWdFeHBNYXRjaChhY3R1YWwsIGV4cGVjdGVkKSB7CiAgICBhc3Nl
cnRFcShhY3R1YWwubGVuZ3RoLCBleHBlY3RlZC5sZW5ndGgpOwoKICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgYWN0dWFsLmxlbmd0aDsgKytpKSBhc3NlcnRFcShhY3R1YWxbaV0sIGV4cGVjdGVkW2ld
KTsKCiAgICBhc3NlcnRFcShhY3R1YWwuaW5kZXgsIGV4cGVjdGVkLmluZGV4KTsKICAgIGFzc2Vy
dEVxKGFjdHVhbC5pbnB1dCwgZXhwZWN0ZWQuaW5wdXQpOwogIH07Cn0pKHRoaXMpOwoKLy8gT3Jp
Z2luYWw6IHJlc291cmNlcy9mdXp6X2xpYnJhcnkuanMKZnVuY3Rpb24gX19pc1Byb3BlcnR5T2ZU
eXBlKG9iaiwgbmFtZSwgdHlwZSkgewogIGxldCBkZXNjOwoKICB0cnkgewogICAgZGVzYyA9IE9i
amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBuYW1lKTsKICB9IGNhdGNoIChlKSB7
CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBpZiAoIWRlc2MpIHJldHVybiBmYWxzZTsKICByZXR1
cm4gdHlwZW9mIHR5cGUgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBkZXNjLnZhbHVlID09PSB0
eXBlOwp9CgpmdW5jdGlvbiBfX2dldFByb3BlcnRpZXMob2JqLCB0eXBlKSB7CiAgaWYgKHR5cGVv
ZiBvYmogPT09ICJ1bmRlZmluZWQiIHx8IG9iaiA9PT0gbnVsbCkgcmV0dXJuIFtdOwogIGxldCBw
cm9wZXJ0aWVzID0gW107CgogIGZvciAobGV0IG5hbWUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5
TmFtZXMob2JqKSkgewogICAgaWYgKF9faXNQcm9wZXJ0eU9mVHlwZShvYmosIG5hbWUsIHR5cGUp
KSBwcm9wZXJ0aWVzLnB1c2gobmFtZSk7CiAgfQoKICBsZXQgcHJvdG8gPSBPYmplY3QuZ2V0UHJv
dG90eXBlT2Yob2JqKTsKCiAgd2hpbGUgKHByb3RvICYmIHByb3RvICE9IE9iamVjdC5wcm90b3R5
cGUpIHsKICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvKS5mb3JFYWNoKG5hbWUg
PT4gewogICAgICBpZiAobmFtZSAhPT0gJ2NvbnN0cnVjdG9yJykgewogICAgICAgIGlmIChfX2lz
UHJvcGVydHlPZlR5cGUocHJvdG8sIG5hbWUsIHR5cGUpKSBwcm9wZXJ0aWVzLnB1c2gobmFtZSk7
CiAgICAgIH0KICAgIH0pOwogICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8p
OwogIH0KCiAgcmV0dXJuIHByb3BlcnRpZXM7Cn0KCmZ1bmN0aW9uKiBfX2dldE9iamVjdHMocm9v
dCA9IHRoaXMsIGxldmVsID0gMCkgewogIGlmIChsZXZlbCA+IDQpIHJldHVybjsKCiAgbGV0IG9i
al9uYW1lcyA9IF9fZ2V0UHJvcGVydGllcyhyb290LCAnb2JqZWN0Jyk7CgogIGZvciAobGV0IG9i
al9uYW1lIG9mIG9ial9uYW1lcykgewogICAgbGV0IG9iaiA9IHJvb3Rbb2JqX25hbWVdOwogICAg
aWYgKG9iaiA9PT0gcm9vdCkgY29udGludWU7CiAgICB5aWVsZCBvYmo7CiAgICB5aWVsZCogX19n
ZXRPYmplY3RzKG9iaiwgbGV2ZWwgKyAxKTsKICB9Cn0KCmZ1bmN0aW9uIF9fZ2V0UmFuZG9tT2Jq
ZWN0KHNlZWQpIHsKICBsZXQgb2JqZWN0cyA9IFtdOwoKICBmb3IgKGxldCBvYmogb2YgX19nZXRP
YmplY3RzKCkpIHsKICAgIG9iamVjdHMucHVzaChvYmopOwogIH0KCiAgcmV0dXJuIG9iamVjdHNb
c2VlZCAlIG9iamVjdHMubGVuZ3RoXTsKfQoKZnVuY3Rpb24gX19nZXRSYW5kb21Qcm9wZXJ0eShv
YmosIHNlZWQpIHsKICBsZXQgcHJvcGVydGllcyA9IF9fZ2V0UHJvcGVydGllcyhvYmopOwoKICBp
ZiAoIXByb3BlcnRpZXMubGVuZ3RoKSByZXR1cm4gdW5kZWZpbmVkOwogIHJldHVybiBwcm9wZXJ0
aWVzW3NlZWQgJSBwcm9wZXJ0aWVzLmxlbmd0aF07Cn0KCmZ1bmN0aW9uIF9fY2FsbFJhbmRvbUZ1
bmN0aW9uKG9iaiwgc2VlZCwgLi4uYXJncykgewogIGxldCBmdW5jdGlvbnMgPSBfX2dldFByb3Bl
cnRpZXMob2JqLCAnZnVuY3Rpb24nKTsKCiAgaWYgKCFmdW5jdGlvbnMubGVuZ3RoKSByZXR1cm47
CiAgbGV0IHJhbmRvbV9mdW5jdGlvbiA9IGZ1bmN0aW9uc1tzZWVkICUgZnVuY3Rpb25zLmxlbmd0
aF07CgogIHRyeSB7CiAgICBvYmpbcmFuZG9tX2Z1bmN0aW9uXSguLi5hcmdzKTsKICB9IGNhdGNo
IChlKSB7fQp9CgpmdW5jdGlvbiBydW5OZWFyU3RhY2tMaW1pdChmKSB7CiAgZnVuY3Rpb24gdCgp
IHsKICAgIHRyeSB7CiAgICAgIHJldHVybiB0KCk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHJl
dHVybiBmKCk7CiAgICB9CiAgfQoKICA7CgogIHRyeSB7CiAgICByZXR1cm4gdCgpOwogIH0gY2F0
Y2ggKGUpIHt9Cn0KCmxldCBfX2NhbGxHQzsKCihmdW5jdGlvbiAoKSB7CiAgbGV0IGNvdW50R0Mg
PSAwOwoKICBfX2NhbGxHQyA9IGZ1bmN0aW9uICgpIHsKICAgIGlmIChjb3VudEdDKysgPCA1MCkg
ewogICAgICBnYygpOwogICAgfQogIH07Cn0pKCk7Cgp0cnkgewogIHRoaXMuZmFpbFdpdGhNZXNz
YWdlID0gbm9wOwp9IGNhdGNoIChlKSB7fQoKdHJ5IHsKICB0aGlzLnRyaWdnZXJBc3NlcnRGYWxz
ZSA9IG5vcDsKfSBjYXRjaCAoZSkge30KCnRyeSB7CiAgdGhpcy5xdWl0ID0gbm9wOwp9IGNhdGNo
IChlKSB7fQoKLy8gT3JpZ2luYWw6IFdlYktpdC9KU1Rlc3RzL3N0cmVzcy9hcmd1bWVudHMtaW50
ZXJmZXJlbmNlLWNmZy5qcwpmdW5jdGlvbiBfX2ZfMCgpIHsKICByZXR1cm4gYXJndW1lbnRzOwp9
CgpmdW5jdGlvbiBfX2ZfMShfX3ZfNCkgewogIHRyeSB7CiAgICB2YXIgX192XzUgPSBfX2ZfMCgx
LCAyLCAzKTsKICB9IGNhdGNoIChlKSB7fQoKICB0cnkgewogICAgdmFyIF9fdl82OwogIH0gY2F0
Y2ggKGUpIHt9CgogIHRyeSB7CiAgICBpZiAoCiAgICAvKiBWYXJpYWJsZU11dGF0b3I6IFJlcGxh
Y2VkIF9fdl80IHdpdGggX192XzQgKi8KICAgIF9fdl80KSB0cnkgewogICAgICBfX3ZfNiA9IF9f
Zl8wKDQsIDUsIDYpOwogICAgfSBjYXRjaCAoZSkge30gZWxzZSB0cnkgewogICAgICAvKiBWYXJp
YWJsZU11dGF0b3I6IFJlcGxhY2VkIF9fdl82IHdpdGggX192XzUgKi8KICAgICAgX192XzUgPSBb
NywgOCwgOV07CiAgICB9IGNhdGNoIChlKSB7fQogIH0gY2F0Y2ggKGUpIHt9CgogIHJldHVybiAo
X192XzVbMF0gPDwKICAvKiBOdW1iZXJNdXRhdG9yOiBSZXBsYWNlZCAwIHdpdGggNiAqLwogIDYp
ICsgKF9fdl81WzFdIDw8IDEpICsgKF9fdl81WzJdIDw8IDIpICsgKF9fdl82WzBdIDw8IDMpICsg
KF9fdl82WzFdIDw8IDQpICsgKF9fdl82WzJdIDw8IDUpOwp9Cgp0cnkgewogIG5vSW5saW5lKF9f
Zl8xKTsKfSBjYXRjaCAoZSkge30KCnRyeSB7CiAgZm9yICh2YXIgX192XzAgPSAwOyBfX3ZfMCA8
IDIwMDAwOyArK19fdl8wKSB7CiAgICB0cnkgewogICAgICB2YXIgX192XzEgPSBfX3ZfMCAmIDE7
CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIHRyeSB7CiAgICAgIHZhciBfX3ZfMiA9ICFfX3ZfMSAq
IDM7CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIHRyeSB7CiAgICAgIHZhciBfX3ZfMyA9IF9fZl8x
KF9fdl8xKTsKICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgdHJ5IHsKICAgICAgaWYgKAogICAgICAv
KiBWYXJpYWJsZU11dGF0b3I6IFJlcGxhY2VkIF9fdl8zIHdpdGggX192XzIgKi8KICAgICAgX192
XzIgIT0gKDEgPDwgMCkgKyAoMiA8PCAxKSArICgzIDw8IDIpICsgKDQgKyBfX3ZfMiA8PCAzKSAr
ICg1ICsgX192XzIgPDwgNCkgKyAoCiAgICAgIC8qIE51bWJlck11dGF0b3I6IFJlcGxhY2VkIDYg
d2l0aCAxMSAqLwogICAgICAxMSArIF9fdl8yIDw8IDUpKSB0aHJvdyAiRXJyb3I6IGJhZCByZXN1
bHQ6ICIgKyBfX3ZfMzsKICAgIH0gY2F0Y2ggKGUpIHt9CiAgfQp9IGNhdGNoIChlKSB7fQoKLy8g
T3JpZ2luYWw6IFdlYktpdC9KU1Rlc3RzL3N0cmVzcy9yZXN0LXBhcmFtZXRlci1hbGxvY2F0aW9u
LWVsaW1pbmF0aW9uLXdhdGNocG9pbnRzLTIuanMKZnVuY3Rpb24gX19mXzIoX192XzcpIHsKICB0
cnkgewogICAgaWYgKCFfX3ZfNykgdGhyb3cgbmV3IEVycm9yKCk7CiAgfSBjYXRjaCAoZSkge30K
fQoKdHJ5IHsKICBub0lubGluZShfX2ZfMik7Cn0gY2F0Y2ggKGUpIHt9CgovKiBWYXJpYWJsZU9y
T2JqZWN0TXV0YXRvcjogUmFuZG9tIG11dGF0aW9uICovCnRyeSB7CiAgZGVsZXRlIF9fdl8yW19f
Z2V0UmFuZG9tUHJvcGVydHkoX192XzIsIDg2OTAyMCldLCBfX2NhbGxHQygpOwp9IGNhdGNoIChl
KSB7fQoKdHJ5IHsKICBfX3ZfMltfX2dldFJhbmRvbVByb3BlcnR5KF9fdl8yLCAxNzYxNjcpXSA9
IHVuZGVmaW5lZCwgX19jYWxsR0MoKTsKfSBjYXRjaCAoZSkge30KCmZ1bmN0aW9uIF9fZl8zKC4u
Ll9fdl84KSB7CiAgcmV0dXJuIF9fdl84WzBdOwp9Cgp0cnkgewogIG5vSW5saW5lKF9fZl8zKTsK
fSBjYXRjaCAoZSkge30KCnRyeSB7CiAgZm9yIChsZXQgX192XzkgPSAwOyBfX3ZfOSA8IDEwMDAw
OyBfX3ZfOSsrKSB7CiAgICB0cnkgewogICAgICBfX2ZfMihfX2ZfMyhfX3ZfOSkgPT09IF9fdl85
KTsKICAgIH0gY2F0Y2ggKGUpIHt9CiAgfQp9IGNhdGNoIChlKSB7fQoKdHJ5IHsKICBBcnJheS5w
cm90b3R5cGVbMF0gPSA1MDsKfSBjYXRjaCAoZSkge30KCnRyeSB7CiAgZm9yIChsZXQgX192XzEw
ID0gMDsgX192XzEwIDwgMTAwMDA7IF9fdl8xMCsrKSB7CiAgICB0cnkgewogICAgICBfX2ZfMihf
X2ZfMygpID09PSA1MCk7CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIC8qIENyb3NzT3Zlck11dGF0
b3I6IENyb3Nzb3ZlciBmcm9tIGNoYWtyYS9EYXRlL0RhdGVHZXRTZXQuanMgKi8KICAgIHRyeSB7
CiAgICAgIF9fdl8xLnNldFVUQ0hvdXJzKDQsIDIsIDMpOwogICAgfSBjYXRjaCAoZSkge30KCiAg
ICAvKiBWYXJpYWJsZU9yT2JqZWN0TXV0YXRvcjogUmFuZG9tIG11dGF0aW9uICovCiAgICB0cnkg
ewogICAgICBfX2NhbGxSYW5kb21GdW5jdGlvbihfX3ZfMCwgOTY4MjU3LCA0Mjk0OTY3Mjk3LCB7
CiAgICAgICAgdmFsdWVPZjogZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuICIwIjsKICAg
ICAgICB9CiAgICAgIH0sIHsKICAgICAgICB2YWx1ZU9mOiBmdW5jdGlvbiAoKSB7CiAgICAgICAg
ICByZXR1cm4gIjAiOwogICAgICAgIH0KICAgICAgfSwgX19nZXRSYW5kb21PYmplY3QoMjk3Njk4
KSwgX192XzEpOwogICAgfSBjYXRjaCAoZSkge30KICB9Cn0gY2F0Y2ggKGUpIHt9CgovLyBPcmln
aW5hbDogV2ViS2l0L0pTVGVzdHMvZXM2L09iamVjdF9zdGF0aWNfbWV0aG9kc19hY2NlcHRfcHJp
bWl0aXZlc19PYmplY3Qua2V5cy5qcwpmdW5jdGlvbiBfX2ZfNCgpIHsKICB0cnkgewogICAgdmFy
IF9fdl8xMSA9IE9iamVjdC5rZXlzKCdhJyk7CiAgfSBjYXRjaCAoZSkge30KCiAgcmV0dXJuIF9f
dl8xMS5sZW5ndGggPT09IDEgJiYgX192XzExWzBdID09PSAnMCc7Cn0KCnRyeSB7CiAgaWYgKCFf
X2ZfNCgpKSB0aHJvdyBuZXcgRXJyb3IoIlRlc3QgZmFpbGVkIik7Cn0gY2F0Y2ggKGUpIHt9Cgov
LyBPcmlnaW5hbDogc3BpZGVybW9ua2V5L25vbjI2Mi9nZW5lcmF0b3JzL2l0ZXJhdGlvbi5qcwp0
cnkgewogIHZhciBfX3ZfMTIgPSBmdW5jdGlvbiogKCkgewogICAgdHJ5IHsKICAgICAgeWllbGQg
MTsKICAgIH0gY2F0Y2ggKGUpIHt9CiAgfS5jb25zdHJ1Y3RvcjsKfSBjYXRjaCAoZSkge30KCmZ1
bmN0aW9uIF9fZl81KCkgewogIGZ1bmN0aW9uKiBfX2ZfMTEoKSB7CiAgICAvKiBDcm9zc092ZXJN
dXRhdG9yOiBDcm9zc292ZXIgZnJvbSB2OC90ZXN0L21qc3VuaXQvZXM2L3JlZmxlY3QuanMgKi8K
ICAgIHRyeSB7CiAgICAgIFJlZmxlY3Quc2V0KF9fdl8xLCBfX3ZfMSwgNDIpOwogICAgfSBjYXRj
aCAoZSkge30KCiAgICB0cnkgewogICAgICB5aWVsZCAxOwogICAgfSBjYXRjaCAoZSkge30KICB9
CgogIHRyeSB7CiAgICB2YXIgX192XzEzID0gX19mXzExKCk7CiAgfSBjYXRjaCAoZSkge30KCiAg
LyogVmFyaWFibGVPck9iamVjdE11dGF0b3I6IFJhbmRvbSBtdXRhdGlvbiAqLwogIHRyeSB7CiAg
ICBfX3ZfMltfX2dldFJhbmRvbVByb3BlcnR5KF9fdl8yLCAxNDQyMzYpXSA9IC1JbmZpbml0eSwg
X19jYWxsR0MoKTsKICB9IGNhdGNoIChlKSB7fQoKICB0cnkgewogICAgYXNzZXJ0SXRlcmF0b3JO
ZXh0KF9fdl8xMywgMSk7CiAgfSBjYXRjaCAoZSkge30KCiAgdHJ5IHsKICAgIGFzc2VydEl0ZXJh
dG9yRG9uZShfX3ZfMTMsIHVuZGVmaW5lZCk7CiAgfSBjYXRjaCAoZSkge30KCiAgdHJ5IHsKICAg
IGFzc2VydEl0ZXJhdG9yRG9uZShfX3ZfMTMsIHVuZGVmaW5lZCk7CiAgfSBjYXRjaCAoZSkge30K
fQoKdHJ5IHsKICBfX2ZfNSgpOwp9IGNhdGNoIChlKSB7fQoKLyogRXhwcmVzc2lvbk11dGF0b3I6
IENsb25lZCBzaWJsaW5nICovCnRyeSB7CiAgbm9JbmxpbmUoX19mXzEpOwp9IGNhdGNoIChlKSB7
fQoKLyogVmFyaWFibGVPck9iamVjdE11dGF0b3I6IFJhbmRvbSBtdXRhdGlvbiAqLwp0cnkgewog
IGlmIChfX3ZfMTIgIT0gbnVsbCAmJiB0eXBlb2YgX192XzEyID09ICJvYmplY3QiKSB0cnkgewog
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fdl8xMiwgX19nZXRSYW5kb21Qcm9wZXJ0eShfX3Zf
MTIsIDI2NDkyOCksIHsKICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgdHJ5IHsKICAg
ICAgICAgIF9fdl8yID0gX192XzAsIF9fY2FsbEdDKCk7CiAgICAgICAgfSBjYXRjaCAoZSkge30K
CiAgICAgICAgcmV0dXJuIDEwNzM3NDE4MjM7CiAgICAgIH0sCiAgICAgIHNldDogZnVuY3Rpb24g
KHZhbHVlKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIF9fdl8xMltfX2dldFJhbmRvbVByb3Bl
cnR5KF9fdl8xMiwgNTQ5NzQ4KV0gPSBfX3ZfMTIsIF9fY2FsbEdDKCk7CiAgICAgICAgfSBjYXRj
aCAoZSkge30KICAgICAgfQogICAgfSk7CiAgfSBjYXRjaCAoZSkge30KfSBjYXRjaCAoZSkge30K
Ci8qIEV4cHJlc3Npb25NdXRhdG9yOiBDbG9uZWQgc2libGluZyAqLwpfX2ZfNihmdW5jdGlvbiog
X19mXzIyKCkgewogIGZvciAodmFyIF9fdl8zMSA9IDA7IF9fdl8zMSA8IDQ7IF9fdl8zMSsrKSB7
CiAgICB5aWVsZCBfX3ZfMzE7CiAgfQp9LAovKiBBcnJheU11dGF0b3I6IER1cGxpY2F0ZSBhbiBl
bGVtZW50ICovClswLCAwLCAxLCAyLCAzLCB1bmRlZmluZWRdLCAiZm9vIiwgWzAsIDEsIDIsIDMs
IHVuZGVmaW5lZF0pOwoKZnVuY3Rpb24gX19mXzYoX192XzE0LCBfX3ZfMTUsIF9fdl8xNiwgX192
XzE3KSB7CiAgZnVuY3Rpb24gX19mXzEyKF9fdl8xOCkgewogICAgdHJ5IHsKICAgICAgdmFyIF9f
dl8xOSA9IF9fdl8xOCgpOwogICAgfSBjYXRjaCAoZSkge30KCiAgICBmb3IgKHZhciBfX3ZfMjAg
PSAwOyBfX3ZfMjAgPCBfX3ZfMTUubGVuZ3RoOyBfX3ZfMjArKykgewogICAgICBhc3NlcnRJdGVy
YXRvclJlc3VsdChfX3ZfMTkubmV4dCgpLCBfX3ZfMTVbX192XzIwXSwgX192XzIwID09IF9fdl8x
NS5sZW5ndGggLSAxKTsKICAgIH0KCiAgICAvKiBFeHByZXNzaW9uTXV0YXRvcjogUmVwZWF0ZWQg
Ki8KICAgIHRyeSB7CiAgICAgIGFzc2VydEl0ZXJhdG9yRG9uZShfX3ZfMTksIHVuZGVmaW5lZCk7
CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIHRyeSB7CiAgICAgIGFzc2VydEl0ZXJhdG9yRG9uZShf
X3ZfMTksIHVuZGVmaW5lZCk7CiAgICB9IGNhdGNoIChlKSB7fQogIH0KCiAgZnVuY3Rpb24gX19m
XzEzKF9fdl8yMSkgewogICAgdHJ5IHsKICAgICAgdmFyIF9fdl8yMiA9IF9fdl8yMSgpOwogICAg
fSBjYXRjaCAoZSkge30KCiAgICB0cnkgewogICAgICBmb3IgKHZhciBfX3ZfMjMgPSAwOyBfX3Zf
MjMgPCBfX3ZfMTcubGVuZ3RoOyBfX3ZfMjMrKykgewogICAgICAgIHRyeSB7CiAgICAgICAgICBh
c3NlcnRJdGVyYXRvclJlc3VsdChfX3ZfMjIubmV4dChfX3ZfMTYpLCBfX3ZfMTdbX192XzIzXSwg
X192XzIzID09IF9fdl8xNy5sZW5ndGggLSAxKTsKICAgICAgICB9IGNhdGNoIChlKSB7fQogICAg
ICB9CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIHRyeSB7CiAgICAgIGFzc2VydEl0ZXJhdG9yRG9u
ZShfX3ZfMjIsIHVuZGVmaW5lZCk7CiAgICB9IGNhdGNoIChlKSB7fQogIH0KCiAgZnVuY3Rpb24g
X19mXzE0KF9fdl8yNCkgewogICAgdHJ5IHsKICAgICAgZm9yICh2YXIgX192XzI1ID0gMDsgX192
XzI1IDwgX192XzE1Lmxlbmd0aDsgX192XzI1KyspIHsKICAgICAgICB0cnkgewogICAgICAgICAg
dmFyIF9fdl8yNiA9IF9fdl8yNCgpOwogICAgICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgICAgIHRy
eSB7CiAgICAgICAgICBmb3IgKHZhciBfX3ZfMjcgPSAwOyBfX3ZfMjcgPCBfX3ZfMjU7IF9fdl8y
NysrKSB7CiAgICAgICAgICAgIGFzc2VydEl0ZXJhdG9yUmVzdWx0KAogICAgICAgICAgICAvKiBW
YXJpYWJsZU11dGF0b3I6IFJlcGxhY2VkIF9fdl8yNiB3aXRoIF9fdl8yNyAqLwogICAgICAgICAg
ICBfX3ZfMjcubmV4dCgpLCBfX3ZfMTVbX192XzI3XSwgX192XzI3ID09IF9fdl8xNS5sZW5ndGgg
LSAxKTsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlKSB7fQoKICAgICAgICB0cnkgewog
ICAgICAgICAgdmFyIF9fdl8yOCA9IGZ1bmN0aW9uICgpIHt9OwogICAgICAgIH0gY2F0Y2ggKGUp
IHt9CgogICAgICAgIC8qIEV4cHJlc3Npb25NdXRhdG9yOiBSZXBlYXRlZCAqLwogICAgICAgIHRy
eSB7CiAgICAgICAgICBhc3NlcnRUaHJvd3NJbnN0YW5jZU9mKGZ1bmN0aW9uICgpIHsKICAgICAg
ICAgICAgX192XzI2LnRocm93KG5ldyBfX3ZfMjgoKSk7CiAgICAgICAgICB9LCBfX3ZfMjgpOwog
ICAgICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgICAgIHRyeSB7CiAgICAgICAgICBhc3NlcnRUaHJv
d3NJbnN0YW5jZU9mKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgLyogRXhwcmVzc2lvbk11dGF0
b3I6IFJlcGVhdGVkICovCiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgX192XzI2LnRo
cm93KG5ldyBfX3ZfMjgoKSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgICAgICAg
ICB0cnkgewogICAgICAgICAgICAgIF9fdl8yNi50aHJvdyhuZXcgX192XzI4KCkpOwogICAgICAg
ICAgICB9IGNhdGNoIChlKSB7fQogICAgICAgICAgfSwgX192XzI4KTsKICAgICAgICB9IGNhdGNo
IChlKSB7fQoKICAgICAgICB0cnkgewogICAgICAgICAgYXNzZXJ0SXRlcmF0b3JEb25lKF9fdl8y
NiwgdW5kZWZpbmVkKTsKICAgICAgICB9IGNhdGNoIChlKSB7fQogICAgICB9CiAgICB9IGNhdGNo
IChlKSB7fQogIH0KCiAgLyogRXhwcmVzc2lvbk11dGF0b3I6IFJlcGVhdGVkICovCiAgdHJ5IHsK
ICAgIF9fZl8xMihfX3ZfMTQpOwogIH0gY2F0Y2ggKGUpIHt9CgogIHRyeSB7CiAgICBfX2ZfMTIo
X192XzE0KTsKICB9IGNhdGNoIChlKSB7fQoKICB0cnkgewogICAgX19mXzEzKF9fdl8xNCk7CiAg
fSBjYXRjaCAoZSkge30KCiAgdHJ5IHsKICAgIF9fZl8xNChfX3ZfMTQpOwogIH0gY2F0Y2ggKGUp
IHt9CgogIC8qIFZhcmlhYmxlT3JPYmplY3RNdXRhdG9yOiBSYW5kb20gbXV0YXRpb24gKi8KICB0
cnkgewogICAgX192XzEyW19fZ2V0UmFuZG9tUHJvcGVydHkoX192XzEyLCAxMTY3NTQpXSA9IEFy
cmF5KDB4ODAwMCkuam9pbigiYSIpLCBfX2NhbGxHQygpOwogIH0gY2F0Y2ggKGUpIHt9CgogIHRy
eSB7CiAgICBfX3ZfMTJbX19nZXRSYW5kb21Qcm9wZXJ0eShfX3ZfMTIsIDEwNDM3NjApXSA9IF9f
Z2V0UmFuZG9tT2JqZWN0KDg2MDE4NiksIF9fY2FsbEdDKCk7CiAgfSBjYXRjaCAoZSkge30KCiAg
dHJ5IHsKICAgIF9fZ2V0UmFuZG9tT2JqZWN0KDY4NTEyMilbX19nZXRSYW5kb21Qcm9wZXJ0eShf
X2dldFJhbmRvbU9iamVjdCg2ODUxMjIpLCA5MTIzNzMpXSwgX19jYWxsR0MoKTsKICB9IGNhdGNo
IChlKSB7fQoKICB0cnkgewogICAgaWYgKF9fdl8zICE9IG51bGwgJiYgdHlwZW9mIF9fdl8zID09
ICJvYmplY3QiKSB0cnkgewogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX192XzMsIF9fZ2V0
UmFuZG9tUHJvcGVydHkoX192XzMsIDUwODI5MCksIHsKICAgICAgICB2YWx1ZTogbmV3IE51bWJl
cigtMCkKICAgICAgfSk7CiAgICB9IGNhdGNoIChlKSB7fQogIH0gY2F0Y2ggKGUpIHt9CgogIHRy
eSB7CiAgICBfX3ZfMltfX2dldFJhbmRvbVByb3BlcnR5KF9fdl8yLCAzMjM5MzApXSA9IF9fZ2V0
UmFuZG9tT2JqZWN0KDQ3NTgzNiksIF9fY2FsbEdDKCk7CiAgfSBjYXRjaCAoZSkge30KCiAgdHJ5
IHsKICAgIGRlbGV0ZSBfX3ZfMFtfX2dldFJhbmRvbVByb3BlcnR5KF9fdl8wLCA3MTg0MzgpXSwg
X19jYWxsR0MoKTsKICB9IGNhdGNoIChlKSB7fQoKICB0cnkgewogICAgX192XzIgPSBfX3ZfMywg
X19jYWxsR0MoKTsKICB9IGNhdGNoIChlKSB7fQoKICB0cnkgewogICAgX19mXzEyKGZ1bmN0aW9u
KiAoKSB7CiAgICAgIHJldHVybiB5aWVsZCogX192XzE0KCk7CiAgICB9KTsKICB9IGNhdGNoIChl
KSB7fQoKICB0cnkgewogICAgX19mXzEzKGZ1bmN0aW9uKiAoKSB7CiAgICAgIHJldHVybiB5aWVs
ZCogX192XzE0KCk7CiAgICB9KTsKICB9IGNhdGNoIChlKSB7fQoKICAvKiBWYXJpYWJsZU9yT2Jq
ZWN0TXV0YXRvcjogUmFuZG9tIG11dGF0aW9uICovCiAgdHJ5IHsKICAgIGRlbGV0ZSBfX3ZfMTZb
X19nZXRSYW5kb21Qcm9wZXJ0eShfX3ZfMTYsIDM5NDI0NSldLCBfX2NhbGxHQygpOwogIH0gY2F0
Y2ggKGUpIHt9CgogIHRyeSB7CiAgICBfX2ZfMTQoZnVuY3Rpb24qICgpIHsKICAgICAgcmV0dXJu
IHlpZWxkKiAoCiAgICAgICAgLyogVmFyaWFibGVNdXRhdG9yOiBSZXBsYWNlZCBfX3ZfMTQgd2l0
aCBfX3ZfMTIgKi8KICAgICAgICBfX3ZfMTIoKQogICAgICApOwogICAgfSk7CiAgfSBjYXRjaCAo
ZSkge30KCiAgdHJ5IHsKICAgIGlmIChfX3ZfMTQgaW5zdGFuY2VvZiBfX3ZfMTIpIHsKICAgICAg
LyogRXhwcmVzc2lvbk11dGF0b3I6IFJlcGVhdGVkICovCiAgICAgIF9fZl8xMihmdW5jdGlvbiAo
KSB7CiAgICAgICAgcmV0dXJuIF9fdl8xNCgpOwogICAgICB9KTsKCiAgICAgIF9fZl8xMihmdW5j
dGlvbiAoKSB7CiAgICAgICAgcmV0dXJuIF9fdl8xNCgpOwogICAgICB9KTsKCiAgICAgIC8qIENy
b3NzT3Zlck11dGF0b3I6IENyb3Nzb3ZlciBmcm9tIHY4L3Rlc3QvbWpzdW5pdC9pbmRleGVkLWFj
Y2Vzc29ycy5qcyAqLwogICAgICBfX3ZfMS5fX2xvb2t1cFNldHRlcl9fKDApKDcpOwoKICAgICAg
X19mXzEzKGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gX192XzE0KCk7CiAgICAgIH0pOwoK
ICAgICAgX19mXzE0KGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gX192XzE0KCk7CiAgICAg
IH0pOwogICAgfQogIH0gY2F0Y2ggKGUpIHt9Cn0KCnRyeSB7CiAgX19mXzYoZnVuY3Rpb24qIF9f
Zl8xNSgpIHt9LCBbdW5kZWZpbmVkXSwgImZvbyIsIFt1bmRlZmluZWRdKTsKfSBjYXRjaCAoZSkg
e30KCnRyeSB7CiAgX19mXzYoZnVuY3Rpb24qIF9fZl8xNigpIHsKICAgIHlpZWxkIDE7CiAgfSwK
ICAvKiBBcnJheU11dGF0b3I6IER1cGxpY2F0ZSBhbiBlbGVtZW50IChyZXBsYWNlZCkgKi8KICBb
MSwgMV0sICJmb28iLAogIC8qIEFycmF5TXV0YXRvcjogRHVwbGljYXRlIGFuIGVsZW1lbnQgKHJl
cGxhY2VkKSAqLwogIFsxLCB1bmRlZmluZWRdKTsKfSBjYXRjaCAoZSkge30KCnRyeSB7CiAgX19m
XzYoZnVuY3Rpb24qIF9fZl8xNygpIHsKICAgIHRyeSB7CiAgICAgIHlpZWxkIDE7CiAgICB9IGNh
dGNoIChlKSB7fQoKICAgIHRyeSB7CiAgICAgIHlpZWxkIDI7CiAgICB9IGNhdGNoIChlKSB7fQoK
ICAgIC8qIFZhcmlhYmxlT3JPYmplY3RNdXRhdG9yOiBSYW5kb20gbXV0YXRpb24gKi8KICAgIHRy
eSB7CiAgICAgIGlmIChfX3ZfMTIgIT0gbnVsbCAmJiB0eXBlb2YgX192XzEyID09ICJvYmplY3Qi
KSB0cnkgewogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3ZfMTIsIF9fZ2V0UmFuZG9t
UHJvcGVydHkoX192XzEyLCAxMTY2MjkpLCB7CiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
ICAgICAgICAgICAgX192XzBbX19nZXRSYW5kb21Qcm9wZXJ0eShfX3ZfMCwgMzMxNTM0KV0sIF9f
Y2FsbEdDKCk7CiAgICAgICAgICAgIHJldHVybiBfX3ZfMTI7CiAgICAgICAgICB9LAogICAgICAg
ICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKICAgICAgICAgICAgX19jYWxsUmFuZG9tRnVuY3Rp
b24oX192XzEyLCA1Njk1NzEsIF9fdl8xMiwgX19nZXRSYW5kb21PYmplY3QoMTAzNTU2NSksIF9f
dl8yLCAxMDczNzQxODIzLCBfX2dldFJhbmRvbU9iamVjdCg3MjAyODYpLCBfX2dldFJhbmRvbU9i
amVjdCg2NDQ3MjEpLCBfX3ZfMTIpOwoKICAgICAgICAgICAgX192XzJbX19nZXRSYW5kb21Qcm9w
ZXJ0eShfX3ZfMiwgNDIwNjg2KV0sIF9fY2FsbEdDKCk7CiAgICAgICAgICAgIGRlbGV0ZSBfX3Zf
MFtfX2dldFJhbmRvbVByb3BlcnR5KF9fdl8wLCAyMzQxNTYpXSwgX19jYWxsR0MoKTsKICAgICAg
ICAgIH0KICAgICAgICB9KTsKICAgICAgfSBjYXRjaCAoZSkge30KICAgIH0gY2F0Y2ggKGUpIHt9
CiAgfSwKICAvKiBBcnJheU11dGF0b3I6IFNodWZmbGUgYXJyYXkgKi8KICBbMiwgdW5kZWZpbmVk
LCAxXSwgImZvbyIsIFsxLCAyLCB1bmRlZmluZWRdKTsKfSBjYXRjaCAoZSkge30KCnRyeSB7CiAg
X19mXzYoZnVuY3Rpb24qIF9fZl8xOCgpIHsKICAgIC8qIEV4cHJlc3Npb25NdXRhdG9yOiBSZXBl
YXRlZCAqLwogICAgdHJ5IHsKICAgICAgeWllbGQgMTsKICAgIH0gY2F0Y2ggKGUpIHt9CgogICAg
eWllbGQgMTsKCiAgICAvKiBDcm9zc092ZXJNdXRhdG9yOiBDcm9zc292ZXIgZnJvbSBjaGFrcmEv
ZXM2L3Byb3RvX2Jhc2ljLmpzICovCiAgICB0cnkgewogICAgICBfX3ZfMi5fX3Byb3RvX18uX19w
cm90b19fID0gL2FfcmVnZXgvOwogICAgfSBjYXRjaCAoZSkge30KCiAgICB0cnkgewogICAgICB5
aWVsZCAyOwogICAgfSBjYXRjaCAoZSkge30KCiAgICByZXR1cm4gMzsKICB9LCBbMSwgMiwKICAv
KiBOdW1iZXJNdXRhdG9yOiBSZXBsYWNlZCAzIHdpdGggLTIgKi8KICAtMl0sICJmb28iLCBbMSwg
MiwgM10pOwp9IGNhdGNoIChlKSB7fQoKX19mXzYoZnVuY3Rpb24qIF9fZl8xOSgpIHsKICByZXR1
cm4gMTsKfSwgWzFdLCAiZm9vIiwgWzFdKTsKCnRyeSB7CiAgX19mXzYoZnVuY3Rpb24qIF9fZl8y
MCgpIHsKICAgIHRyeSB7CiAgICAgIHZhciBfX3ZfMjkgPSB5aWVsZCAxOwogICAgfSBjYXRjaCAo
ZSkge30KCiAgICByZXR1cm4gX192XzI5OwogIH0sIFsxLCB1bmRlZmluZWRdLCAiZm9vIiwgWzEs
ICJmb28iXSk7Cn0gY2F0Y2ggKGUpIHt9Cgp0cnkgewogIF9fZl82KGZ1bmN0aW9uKiBfX2ZfMjEo
KSB7CiAgICB0cnkgewogICAgICB2YXIgX192XzMwID0geWllbGQgMTsKICAgIH0gY2F0Y2ggKGUp
IHt9CgogICAgLyogRXhwcmVzc2lvbk11dGF0b3I6IENsb25lZCBzaWJsaW5nICovCiAgICB0cnkg
ewogICAgICB5aWVsZCAyOwogICAgfSBjYXRjaCAoZSkge30KCiAgICB0cnkgewogICAgICB5aWVs
ZCAyOwogICAgfSBjYXRjaCAoZSkge30KCiAgICByZXR1cm4gX192XzMwOwogIH0sIFsxLCAyLCB1
bmRlZmluZWRdLCAiZm9vIiwgWzEsIDIsICJmb28iXSk7Cn0gY2F0Y2ggKGUpIHt9Cgp0cnkgewog
IF9fZl82KGZ1bmN0aW9uKiBfX2ZfMjIoKSB7CiAgICB0cnkgewogICAgICBmb3IgKHZhciBfX3Zf
MzEgPSAwOyBfX3ZfMzEgPCA0OyBfX3ZfMzErKykgewogICAgICAgIC8qIFZhcmlhYmxlT3JPYmpl
Y3RNdXRhdG9yOiBSYW5kb20gbXV0YXRpb24gKi8KICAgICAgICB0cnkgewogICAgICAgICAgX192
XzNbX19nZXRSYW5kb21Qcm9wZXJ0eShfX3ZfMywgMTAzMjk1KV0gPSBfX2dldFJhbmRvbU9iamVj
dCg3NjE4ODMpLCBfX2NhbGxHQygpOwogICAgICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgICAgIF9f
dl8wW19fZ2V0UmFuZG9tUHJvcGVydHkoX192XzAsIDgzMTUzMCldID0gX192XzMxLCBfX2NhbGxH
QygpOwoKICAgICAgICB0cnkgewogICAgICAgICAgeWllbGQgX192XzMxOwogICAgICAgIH0gY2F0
Y2ggKGUpIHt9CiAgICAgIH0KICAgIH0gY2F0Y2ggKGUpIHt9CiAgfSwgWzAsIDAsIDEsIDIsIDMs
IHVuZGVmaW5lZF0sICJmb28iLCBbMCwgMSwgMiwgMywgdW5kZWZpbmVkXSk7Cn0gY2F0Y2ggKGUp
IHt9Cgp0cnkgewogIF9fZl82KGZ1bmN0aW9uIF9fZl8yMygpIHsKICAgIHJldHVybiBmdW5jdGlv
biogKF9fdl8zMiwgX192XzMzLCBfX3ZfMzQsIF9fdl8zNSkgewogICAgICB0cnkgewogICAgICAg
IHlpZWxkIF9fdl8zMjsKICAgICAgfSBjYXRjaCAoZSkge30KCiAgICAgIHlpZWxkIF9fdl8zMzsK
CiAgICAgIHRyeSB7CiAgICAgICAgeWllbGQgX192XzM0OwogICAgICB9IGNhdGNoIChlKSB7fQoK
ICAgICAgdHJ5IHsKICAgICAgICB5aWVsZCBfX3ZfMzU7CiAgICAgIH0gY2F0Y2ggKGUpIHt9CiAg
ICB9KCJmZWUiLCAiZmkiLCAiZm8iLCAiZnVtIik7CiAgfSwgWyJmZWUiLCAiZmkiLCAiZm8iLCAi
ZnVtIiwgdW5kZWZpbmVkXSwgImZvbyIsIFsiZmVlIiwgImZpIiwgImZvIiwgImZ1bSIsIHVuZGVm
aW5lZF0pOwp9IGNhdGNoIChlKSB7fQoKLyogVmFyaWFibGVPck9iamVjdE11dGF0b3I6IFJhbmRv
bSBtdXRhdGlvbiAqLwp0cnkgewogIF9fY2FsbFJhbmRvbUZ1bmN0aW9uKF9fdl8xLCAxNDg1MTYs
IF9fZ2V0UmFuZG9tT2JqZWN0KDE0NDQzMCksIC0xLCBfX3ZfMiwgX192XzMsIF9fZ2V0UmFuZG9t
T2JqZWN0KDEwMjkwMzUpLCBfX2dldFJhbmRvbU9iamVjdCg1MzA1ODIpLCBfX2dldFJhbmRvbU9i
amVjdCg0OTY5MDcpLCBfX3ZfMiwgX19nZXRSYW5kb21PYmplY3QoMTQ4NTU0KSk7Cn0gY2F0Y2gg
KGUpIHt9Cgp0cnkgewogIF9fZl82KGZ1bmN0aW9uIF9fZl8yNCgpIHsKICAgIHJldHVybiBmdW5j
dGlvbiogKF9fdl8zNiwgX192XzM3LCBfX3ZfMzgsIF9fdl8zOSkgewogICAgICAvKiBFeHByZXNz
aW9uTXV0YXRvcjogQ2xvbmVkIHNpYmxpbmcgKi8KICAgICAgdHJ5IHsKICAgICAgICB5aWVsZCBf
X3ZfMzg7CiAgICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgICB0cnkgewogICAgICAgIHlpZWxkIF9f
dl8zNjsKICAgICAgfSBjYXRjaCAoZSkge30KCiAgICAgIHRyeSB7CiAgICAgICAgeWllbGQgX192
XzM3OwogICAgICB9IGNhdGNoIChlKSB7fQoKICAgICAgLyogRXhwcmVzc2lvbk11dGF0b3I6IENs
b25lZCBzaWJsaW5nICovCiAgICAgIHRyeSB7CiAgICAgICAgeWllbGQgX192XzM2OwogICAgICB9
IGNhdGNoIChlKSB7fQoKICAgICAgdHJ5IHsKICAgICAgICB5aWVsZCBfX3ZfMzg7CiAgICAgIH0g
Y2F0Y2ggKGUpIHt9CgogICAgICB0cnkgewogICAgICAgIHlpZWxkIF9fdl8zOTsKICAgICAgfSBj
YXRjaCAoZSkge30KICAgIH0oImZlZSIsICJmaSIpOwogIH0sIFsiZmVlIiwgImZpIiwgdW5kZWZp
bmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZF0sICJmb28iLCBbImZlZSIsICJmaSIsIHVuZGVmaW5l
ZCwgdW5kZWZpbmVkLCB1bmRlZmluZWRdKTsKfSBjYXRjaCAoZSkge30KCnRyeSB7CiAgX19mXzYo
ZnVuY3Rpb24gX19mXzI1KCkgewogICAgcmV0dXJuIGZ1bmN0aW9uKiAoX192XzQwLCBfX3ZfNDEs
IF9fdl80MiwgX192XzQzKSB7CiAgICAgIHRyeSB7CiAgICAgICAgeWllbGQgX192XzQwOwogICAg
ICB9IGNhdGNoIChlKSB7fQoKICAgICAgLyogQ3Jvc3NPdmVyTXV0YXRvcjogQ3Jvc3NvdmVyIGZy
b20gV2ViS2l0L0pTVGVzdHMvc3RyZXNzL3Y4LXJlZ2V4cC1zdHJpY3QuanMgKi8KICAgICAgdHJ5
IHsKICAgICAgICBfX3ZfMTIuZXhlYygndWdnYzovL3NldnJhcWYuemxmY25wci5wYnovdmFxcmsu
cHN6Jyk7CiAgICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgICAvKiBWYXJpYWJsZU9yT2JqZWN0TXV0
YXRvcjogUmFuZG9tIG11dGF0aW9uICovCiAgICAgIHRyeSB7CiAgICAgICAgX192XzQzW19fZ2V0
UmFuZG9tUHJvcGVydHkoX192XzQzLCA3NzU4MTUpXSwgX19jYWxsR0MoKTsKICAgICAgfSBjYXRj
aCAoZSkge30KCiAgICAgIHRyeSB7CiAgICAgICAgeWllbGQgKAogICAgICAgICAgLyogVmFyaWFi
bGVNdXRhdG9yOiBSZXBsYWNlZCBfX3ZfNDEgd2l0aCBfX3ZfNDMgKi8KICAgICAgICAgIF9fdl80
MwogICAgICAgICk7CiAgICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgICAvKiBFeHByZXNzaW9uTXV0
YXRvcjogUmVwZWF0ZWQgKi8KICAgICAgeWllbGQgX192XzQyOwoKICAgICAgdHJ5IHsKICAgICAg
ICB5aWVsZCBfX3ZfNDI7CiAgICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgICB0cnkgewogICAgICAg
IHlpZWxkIF9fdl80MzsKICAgICAgfSBjYXRjaCAoZSkge30KICAgIH0oImZlZSIsICJmaSIsICJm
byIsICJmdW0iLCAiSSBzbWVsbCB0aGUgYmxvb2Qgb2YgYW4gRW5nbGlzaG1hbiIpOwogIH0sIFsi
ZmVlIiwgImZpIiwgImZvIiwgImZ1bSIsIHVuZGVmaW5lZF0sICJmb28iLCBbImZlZSIsICJmaSIs
ICJmbyIsICJmdW0iLCB1bmRlZmluZWRdKTsKfSBjYXRjaCAoZSkge30KCnRyeSB7CiAgX19mXzYo
ZnVuY3Rpb24gX19mXzI2KCkgewogICAgcmV0dXJuIGZ1bmN0aW9uKiAoX192XzQ0LCBfX3ZfNDUs
IF9fdl80NiwgX192XzQ3KSB7CiAgICAgIHRyeSB7CiAgICAgICAgZm9yICh2YXIgX192XzQ4ID0g
MDsgX192XzQ4IDwgYXJndW1lbnRzLmxlbmd0aDsgX192XzQ4KyspIHsKICAgICAgICAgIHlpZWxk
IGFyZ3VtZW50c1tfX3ZfNDhdOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZSkge30KICAgIH0o
ImZlZSIsICJmaSIsICJmbyIsICJmdW0iLCAiSSBzbWVsbCB0aGUgYmxvb2Qgb2YgYW4gRW5nbGlz
aG1hbiIpOwogIH0sIFsiZmVlIiwgImZpIiwgImZvIiwgImZ1bSIsICJJIHNtZWxsIHRoZSBibG9v
ZCBvZiBhbiBFbmdsaXNobWFuIiwgdW5kZWZpbmVkXSwgImZvbyIsCiAgLyogQXJyYXlNdXRhdG9y
OiBEdXBsaWNhdGUgYW4gZWxlbWVudCAocmVwbGFjZWQpICovCiAgWyJmZWUiLCAiZmkiLCAiZm8i
LCAiZnVtIiwgImZlZSIsIHVuZGVmaW5lZF0pOwp9IGNhdGNoIChlKSB7fQoKLyogVmFyaWFibGVP
ck9iamVjdE11dGF0b3I6IFJhbmRvbSBtdXRhdGlvbiAqLwp0cnkgewogIF9fY2FsbFJhbmRvbUZ1
bmN0aW9uKF9fdl8xLCAxMDM1MTAyLCBfX2dldFJhbmRvbU9iamVjdCg1MTU1NDUpLCBfX2dldFJh
bmRvbU9iamVjdCg0MDAyOCksICJmb28iLCB1bmRlZmluZWQsIF9fZ2V0UmFuZG9tT2JqZWN0KDc1
NzI1MyksIDQyOTQ5NjcyOTUsIC0yMTQ3NDgzNjQ5LCBfX2dldFJhbmRvbU9iamVjdCg4MTEwNjUp
LCAiIiwgX192XzEyKTsKfSBjYXRjaCAoZSkge30KCnRyeSB7CiAgX19mXzYoZnVuY3Rpb24gX19m
XzI3KCkgewogICAgcmV0dXJuIGZ1bmN0aW9uIChfX3ZfNDksIF9fdl81MCwgX192XzUxLCBfX3Zf
NTIpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKiAoKSB7CiAgICAgICAgeWllbGQgX192XzQ5Owog
ICAgICAgIHlpZWxkIF9fdl81MDsKICAgICAgICB5aWVsZCBfX3ZfNTE7CgogICAgICAgIC8qIEV4
cHJlc3Npb25NdXRhdG9yOiBSZXBlYXRlZCAqLwogICAgICAgIHlpZWxkIF9fdl81MjsKICAgICAg
ICB5aWVsZCBfX3ZfNTI7CiAgICAgIH0oKTsKICAgIH0oImZlZSIsICJmaSIsICJmbyIsICJmdW0i
KTsKICB9LCBbImZlZSIsICJmaSIsICJmbyIsICJmdW0iLCB1bmRlZmluZWRdLCAiZm9vIiwgWyJm
ZWUiLCAiZmkiLCAiZm8iLCAiZnVtIiwgdW5kZWZpbmVkXSk7Cn0gY2F0Y2ggKGUpIHt9Cgp0cnkg
ewogIF9fZl82KGZ1bmN0aW9uIF9fZl8yOCgpIHsKICAgIHJldHVybiBmdW5jdGlvbiogKF9fdl81
MywgX192XzU0LCBfX3ZfNTUsIF9fdl81NikgewogICAgICB0cnkgewogICAgICAgIGFyZ3VtZW50
c1swXSA9ICJCZSBoZSBsaXZlIjsKICAgICAgfSBjYXRjaCAoZSkge30KCiAgICAgIC8qIEV4cHJl
c3Npb25NdXRhdG9yOiBDbG9uZWQgc2libGluZyAqLwogICAgICB0cnkgewogICAgICAgIGFyZ3Vt
ZW50c1sxXSA9ICJvciBiZSBoZSBkZWFkIjsKICAgICAgfSBjYXRjaCAoZSkge30KCiAgICAgIHRy
eSB7CiAgICAgICAgYXJndW1lbnRzWzFdID0gIm9yIGJlIGhlIGRlYWQiOwogICAgICB9IGNhdGNo
IChlKSB7fQoKICAgICAgdHJ5IHsKICAgICAgICBhcmd1bWVudHNbMl0gPSAiSSdsbCBncmluZCBo
aXMgYm9uZXMiOwogICAgICB9IGNhdGNoIChlKSB7fQoKICAgICAgdHJ5IHsKICAgICAgICBhcmd1
bWVudHNbM10gPSAidG8gbWFrZSBteSBicmVhZCI7CiAgICAgIH0gY2F0Y2ggKGUpIHt9CgogICAg
ICB0cnkgewogICAgICAgIHlpZWxkIF9fdl81MzsKICAgICAgfSBjYXRjaCAoZSkge30KCiAgICAg
IHRyeSB7CiAgICAgICAgeWllbGQgX192XzU0OwogICAgICB9IGNhdGNoIChlKSB7fQoKICAgICAg
dHJ5IHsKICAgICAgICB5aWVsZCBfX3ZfNTU7CiAgICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgICB0
cnkgewogICAgICAgIHlpZWxkIF9fdl81NjsKICAgICAgfSBjYXRjaCAoZSkge30KICAgIH0oImZl
ZSIsICJmaSIsICJmbyIsICJmdW0iKTsKICB9LCBbIkJlIGhlIGxpdmUiLCAib3IgYmUgaGUgZGVh
ZCIsICJJJ2xsIGdyaW5kIGhpcyBib25lcyIsICJ0byBtYWtlIG15IGJyZWFkIiwgdW5kZWZpbmVk
XSwgImZvbyIsIFsiQmUgaGUgbGl2ZSIsICJvciBiZSBoZSBkZWFkIiwgIkknbGwgZ3JpbmQgaGlz
IGJvbmVzIiwgInRvIG1ha2UgbXkgYnJlYWQiLCB1bmRlZmluZWRdKTsKfSBjYXRjaCAoZSkge30K
CnRyeSB7CiAgX19mXzYoZnVuY3Rpb24gX19mXzI5KCkgewogICAgcmV0dXJuIGZ1bmN0aW9uKiAo
X192XzU3LCBfX3ZfNTgsIF9fdl81OSwgX192XzYwKSB7CiAgICAgICJ1c2Ugc3RyaWN0IjsKCiAg
ICAgIHRyeSB7CiAgICAgICAgYXJndW1lbnRzWzBdID0gIkJlIGhlIGxpdmUiOwogICAgICB9IGNh
dGNoIChlKSB7fQoKICAgICAgdHJ5IHsKICAgICAgICBhcmd1bWVudHNbMV0gPSAib3IgYmUgaGUg
ZGVhZCI7CiAgICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgICAvKiBFeHByZXNzaW9uTXV0YXRvcjog
Q2xvbmVkIHNpYmxpbmcgKi8KICAgICAgdHJ5IHsKICAgICAgICB5aWVsZCAoCiAgICAgICAgICAv
KiBWYXJpYWJsZU11dGF0b3I6IFJlcGxhY2VkIF9fdl81OCB3aXRoIF9fdl8yICovCiAgICAgICAg
ICBfX3ZfMgogICAgICAgICk7CiAgICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgICB0cnkgewogICAg
ICAgIGFyZ3VtZW50c1syXSA9ICJJJ2xsIGdyaW5kIGhpcyBib25lcyI7CiAgICAgIH0gY2F0Y2gg
KGUpIHt9CgogICAgICAvKiBWYXJpYWJsZU9yT2JqZWN0TXV0YXRvcjogUmFuZG9tIG11dGF0aW9u
ICovCiAgICAgIHRyeSB7CiAgICAgICAgaWYgKF9fdl82MCAhPSBudWxsICYmIHR5cGVvZiBfX3Zf
NjAgPT0gIm9iamVjdCIpIHRyeSB7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX192
XzYwLCBfX2dldFJhbmRvbVByb3BlcnR5KF9fdl82MCwgOTkzNjgwKSwgewogICAgICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICBpZiAoX192XzAgIT0gbnVsbCAmJiB0eXBl
b2YgX192XzAgPT0gIm9iamVjdCIpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3ZfMCwgX19nZXRS
YW5kb21Qcm9wZXJ0eShfX3ZfMCwgMTA0MzE4KSwgewogICAgICAgICAgICAgICAgdmFsdWU6IF9f
Z2V0UmFuZG9tT2JqZWN0KDI3Nzc0NCkKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBy
ZXR1cm4gLTIxNDc0ODI0OTY7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHNldDogZnVuY3Rp
b24gKHZhbHVlKSB7CiAgICAgICAgICAgICAgX19jYWxsUmFuZG9tRnVuY3Rpb24oX192XzYwLCA2
NTkzMjQsIC0xLjc5NzY5MzEzNDg2MjMxNTdlKzMwOCwgX19nZXRSYW5kb21PYmplY3QoMTA0MTE1
NCksIF9fZ2V0UmFuZG9tT2JqZWN0KDMwMTA2NCksIC0xZS0xNSk7CgogICAgICAgICAgICAgIF9f
dl8xMiA9IF9fdl8yLCBfX2NhbGxHQygpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAg
ICAgICB9IGNhdGNoIChlKSB7fQogICAgICB9IGNhdGNoIChlKSB7fQoKICAgICAgdHJ5IHsKICAg
ICAgICBpZiAoX192XzAgIT0gbnVsbCAmJiB0eXBlb2YgX192XzAgPT0gIm9iamVjdCIpIHRyeSB7
CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX192XzAsIF9fZ2V0UmFuZG9tUHJvcGVy
dHkoX192XzU4LCA3OTEwNjgpLCB7CiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewogICAg
ICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBfX2NhbGxSYW5kb21GdW5jdGlvbihfX3Zf
MiwgMzMwMDkyLCAtMjE0NzQ4MzY0NywgX192XzIsIF9fdl82MCwgX192XzMsIF9fdl8wLCBfX3Zf
MTIsIG5ldyBTdHJpbmcoIiIpLCBfX3ZfMCk7CiAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge30K
CiAgICAgICAgICAgICAgcmV0dXJuIF9fZ2V0UmFuZG9tT2JqZWN0KDM4MDU4Nik7CiAgICAgICAg
ICAgIH0sCiAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CiAgICAgICAgICAgICAg
dHJ5IHsKICAgICAgICAgICAgICAgIF9fdl8zID0gX192XzIsIF9fY2FsbEdDKCk7CiAgICAgICAg
ICAgICAgfSBjYXRjaCAoZSkge30KCiAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAg
IF9fY2FsbFJhbmRvbUZ1bmN0aW9uKF9fdl81OSwgNDcwMjAsIHRoaXNbMV0sIF9fZ2V0UmFuZG9t
T2JqZWN0KDU5OTE1KSwgX192XzU3LCB7CiAgICAgICAgICAgICAgICAgIHZhbHVlT2Y6IGZ1bmN0
aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gIjAiOwogICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICB9LCB7fSk7CiAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge30K
ICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfSBjYXRjaCAoZSkge30KICAgICAg
fSBjYXRjaCAoZSkge30KCiAgICAgIHRyeSB7CiAgICAgICAgYXJndW1lbnRzWzNdID0gInRvIG1h
a2UgbXkgYnJlYWQiOwogICAgICB9IGNhdGNoIChlKSB7fQoKICAgICAgdHJ5IHsKICAgICAgICB5
aWVsZCBfX3ZfNTc7CiAgICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgICB5aWVsZCBfX3ZfMjsKICAg
ICAgeWllbGQgX192XzU5OwoKICAgICAgLyogVmFyaWFibGVPck9iamVjdE11dGF0b3I6IFJhbmRv
bSBtdXRhdGlvbiAqLwogICAgICB0cnkgewogICAgICAgIF9fdl82MFtfX2dldFJhbmRvbVByb3Bl
cnR5KF9fdl82MCwgMzgyOTIyKV0gPSB0aGlzWzFdLCBfX2NhbGxHQygpOwogICAgICB9IGNhdGNo
IChlKSB7fQoKICAgICAgdHJ5IHsKICAgICAgICBpZiAoX192XzU4ICE9IG51bGwgJiYgdHlwZW9m
IF9fdl81OCA9PSAib2JqZWN0IikgdHJ5IHsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShfX3ZfNTgsIF9fZ2V0UmFuZG9tUHJvcGVydHkoX192XzU4LCA5MzQzNDkpLCB7CiAgICAgICAg
ICAgIHZhbHVlOiBfX2dldFJhbmRvbU9iamVjdCgzOTY5ODEpCiAgICAgICAgICB9KTsKICAgICAg
ICB9IGNhdGNoIChlKSB7fQogICAgICB9IGNhdGNoIChlKSB7fQoKICAgICAgdHJ5IHsKICAgICAg
ICB5aWVsZCBfX3ZfNjA7CiAgICAgIH0gY2F0Y2ggKGUpIHt9CiAgICB9KCJmZWUiLCAiZmkiLCAi
Zm8iLCAiZnVtIik7CiAgfSwgWyJmZWUiLCAiZmkiLCAiZm8iLCAiZnVtIiwgdW5kZWZpbmVkXSwg
ImZvbyIsIFsiZmVlIiwgImZpIiwgImZvIiwgImZ1bSIsIHVuZGVmaW5lZF0pOwp9IGNhdGNoIChl
KSB7fQoKdHJ5IHsKICBpZiAodHlwZW9mIGdjID09ICdmdW5jdGlvbicpIHsKICAgIC8qIENyb3Nz
T3Zlck11dGF0b3I6IENyb3Nzb3ZlciBmcm9tIGNoYWtyYS9lczYvRVM2QXJyYXlBUEkuanMgKi8K
ICAgIHRyeSB7CiAgICAgIF9fdl8xMi5wdXNoKGBnZXQ6JHtfX3ZfMn1gKTsKICAgIH0gY2F0Y2gg
KGUpIHt9CgogICAgdHJ5IHsKICAgICAgX19mXzYoZnVuY3Rpb24qIF9fZl8zMCgpIHsKICAgICAg
ICB0cnkgewogICAgICAgICAgeWllbGQgImJheiI7CiAgICAgICAgfSBjYXRjaCAoZSkge30KCiAg
ICAgICAgdHJ5IHsKICAgICAgICAgIGdjKCk7CiAgICAgICAgfSBjYXRjaCAoZSkge30KCiAgICAg
ICAgdHJ5IHsKICAgICAgICAgIHlpZWxkICJxdXgiOwogICAgICAgIH0gY2F0Y2ggKGUpIHt9CiAg
ICAgIH0sIFsiYmF6IiwgInF1eCIsIHVuZGVmaW5lZF0sICJmb28iLCBbImJheiIsICJxdXgiLCB1
bmRlZmluZWRdKTsKICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgLyogRXhwcmVzc2lvbk11dGF0b3I6
IENsb25lZCBzaWJsaW5nICovCiAgICB0cnkgewogICAgICBfX3ZfMTIucHVzaChgZ2V0OiR7X192
XzJ9YCk7CiAgICB9IGNhdGNoIChlKSB7fQogIH0KfSBjYXRjaCAoZSkge30KCnRyeSB7CiAgX19m
XzYoZnVuY3Rpb24gX19mXzMxKCkgewogICAgZnVuY3Rpb24qIF9fZl8zMigpIHsKICAgICAgdHJ5
IHsKICAgICAgICB5aWVsZCB0aGlzLng7CiAgICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgICAvKiBF
eHByZXNzaW9uTXV0YXRvcjogUmVwZWF0ZWQgKi8KICAgICAgdHJ5IHsKICAgICAgICB5aWVsZCB0
aGlzLnk7CiAgICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgICB0cnkgewogICAgICAgIHlpZWxkIHRo
aXMueTsKICAgICAgfSBjYXRjaCAoZSkge30KICAgIH0KCiAgICB0cnkgewogICAgICB2YXIgX192
XzYxID0gewogICAgICAgIHN0YXJ0OiBfX2ZfMzIsCiAgICAgICAgeDoKICAgICAgICAvKiBOdW1i
ZXJNdXRhdG9yOiBSZXBsYWNlZCAxIHdpdGggMyAqLwogICAgICAgIDMsCiAgICAgICAgeTogMgog
ICAgICB9OwogICAgfSBjYXRjaCAoZSkge30KCiAgICByZXR1cm4gKAogICAgICAvKiBWYXJpYWJs
ZU11dGF0b3I6IFJlcGxhY2VkIF9fdl82MSB3aXRoIF9fdl8zICovCiAgICAgIF9fdl8zLnN0YXJ0
KCkKICAgICk7CiAgfSwgWzEsIDIsIHVuZGVmaW5lZF0sICJmb28iLCBbMSwgMiwgdW5kZWZpbmVk
XSk7Cn0gY2F0Y2ggKGUpIHt9Cgp0cnkgewogIF9fZl82KGZ1bmN0aW9uKiBfX2ZfMzMoKSB7CiAg
ICB0cnkgewogICAgICB2YXIgX192XzYyID0gMTsKICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgdHJ5
IHsKICAgICAgeWllbGQgX192XzYyOwogICAgfSBjYXRjaCAoZSkge30KCiAgICB0cnkgewogICAg
ICB3aXRoICh7CiAgICAgICAgeDogMgogICAgICB9KSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAg
IHlpZWxkIF9fdl82MjsKICAgICAgICB9IGNhdGNoIChlKSB7fQogICAgICB9CiAgICB9IGNhdGNo
IChlKSB7fQoKICAgIHRyeSB7CiAgICAgIHlpZWxkIF9fdl82MjsKICAgIH0gY2F0Y2ggKGUpIHt9
CiAgfSwgWzEsCiAgLyogTnVtYmVyTXV0YXRvcjogUmVwbGFjZWQgMiB3aXRoIE5hTiAqLwogIE5h
TiwgMSwgdW5kZWZpbmVkXSwgImZvbyIsIFsxLCAyLCAxLCB1bmRlZmluZWRdKTsKfSBjYXRjaCAo
ZSkge30KCnRyeSB7CiAgX19mXzYoZnVuY3Rpb24qIF9fZl8zNCgpIHsKICAgIHlpZWxkICgKICAg
ICAgLyogTnVtYmVyTXV0YXRvcjogUmVwbGFjZWQgMSB3aXRoIC0xNSAqLwogICAgICAtMTUgKyAo
eWllbGQgMikgKyAzCiAgICApOwogIH0sIFsyLCBOYU4sIHVuZGVmaW5lZF0sICJmb28iLCBbMiwg
IjFmb28zIiwgdW5kZWZpbmVkXSk7Cn0gY2F0Y2ggKGUpIHt9Cgp0cnkgewogIF9fZl82KGZ1bmN0
aW9uKiBfX2ZfMzUoKSB7CiAgICByZXR1cm4gMSArICh5aWVsZCAyKSArIDM7CiAgfSwgWzIsIE5h
Tl0sICJmb28iLCBbMiwgIjFmb28zIl0pOwp9IGNhdGNoIChlKSB7fQoKdHJ5IHsKICBfX2ZfNihm
dW5jdGlvbiogX19mXzM2KCkgewogICAgLyogVmFyaWFibGVPck9iamVjdE11dGF0b3I6IFJhbmRv
bSBtdXRhdGlvbiAqLwogICAgaWYgKF9fdl8xMiAhPSBudWxsICYmIHR5cGVvZiBfX3ZfMTIgPT0g
Im9iamVjdCIpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3ZfMTIsIF9fZ2V0UmFuZG9tUHJvcGVy
dHkoX192XzEyLCA5OTc0OTkpLCB7CiAgICAgIGdldDogZnVuY3Rpb24gKCkgewogICAgICAgIGlm
IChfX3ZfMTIgIT0gbnVsbCAmJiB0eXBlb2YgX192XzEyID09ICJvYmplY3QiKSBPYmplY3QuZGVm
aW5lUHJvcGVydHkoX192XzEyLCBfX2dldFJhbmRvbVByb3BlcnR5KF9fdl8xMiwgMzc4MTIxKSwg
ewogICAgICAgICAgdmFsdWU6IF9fdl8zCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIF9fZ2V0
UmFuZG9tT2JqZWN0KDQxNTA1Mik7CiAgICAgIH0sCiAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVl
KSB7fQogICAgfSk7CiAgICBfX3ZfM1tfX2dldFJhbmRvbVByb3BlcnR5KF9fdl8zLCA4MDM0Mzcp
XSA9IC0xZS0xNSwgX19jYWxsR0MoKTsKICAgIGlmIChfX3ZfMiAhPSBudWxsICYmIHR5cGVvZiBf
X3ZfMiA9PSAib2JqZWN0IikgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fdl8yLCBfX2dldFJhbmRv
bVByb3BlcnR5KF9fdl8yLCAxMzI5NjYpLCB7CiAgICAgIHZhbHVlOiBfX2dldFJhbmRvbU9iamVj
dCg1MjgzNzQpCiAgICB9KTsKICAgIGRlbGV0ZSBfX3ZfMTJbX19nZXRSYW5kb21Qcm9wZXJ0eShf
X3ZfMTIsIDE3MjI1NSldLCBfX2NhbGxHQygpOwoKICAgIF9fY2FsbFJhbmRvbUZ1bmN0aW9uKF9f
dl8zLCA2MTUwNDQsIDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4LCAxZS0xNSwgX19nZXRSYW5kb21P
YmplY3QoNjM1NTApLCBmdW5jdGlvbiAoKSB7CiAgICAgIHJldHVybiAwOwogICAgfSwgLTIxNDc0
ODM2NDksIF9fZ2V0UmFuZG9tT2JqZWN0KDEwNzk2NyksIHRydWUsIF9fZ2V0UmFuZG9tT2JqZWN0
KDM0MzUwOSksIHsKICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4g
IjAiOwogICAgICB9CiAgICB9LCB1bmRlZmluZWQpOwoKICAgIHlpZWxkIDEgKyAoeWllbGQgMikg
KyAzOwogICAgeWllbGQgNCArICh5aWVsZCA1KSArIDY7CiAgfSwKICAvKiBBcnJheU11dGF0b3I6
IFJlbW92ZSBlbGVtZW50cyAqLwoKICAvKiBBcnJheU11dGF0b3I6IER1cGxpY2F0ZSBhbiBlbGVt
ZW50IChyZXBsYWNlZCkgKi8KICBbTmFOLCA1LCBOYU4sIDJdLCAiZm9vIiwgWzIsICIxZm9vMyIs
IDUsICI0Zm9vNiIsIHVuZGVmaW5lZF0pOwp9IGNhdGNoIChlKSB7fQoKLyogRXhwcmVzc2lvbk11
dGF0b3I6IFJlcGVhdGVkICovCnRyeSB7CiAgX19mXzYoZnVuY3Rpb24qIF9fZl8zNygpIHsKICAg
IHJldHVybiAoeWllbGQgMSArICh5aWVsZCAyKSArIDMpICsgKHlpZWxkIDQgKyAoeWllbGQgNSkg
KyA2KTsKICB9LCBbMiwgTmFOLCA1LCBOYU4sIE5hTl0sICJmb28iLAogIC8qIEFycmF5TXV0YXRv
cjogSW5zZXJ0IGEgaG9sZSAqLwogIFsyLCAiMWZvbzMiLCA1LCAiNGZvbzYiLCwgImZvb2ZvbyJd
KTsKfSBjYXRjaCAoZSkge30KCnRyeSB7CiAgX19mXzYoZnVuY3Rpb24qIF9fZl8zNygpIHsKICAg
IHJldHVybiAoeWllbGQgMSArICh5aWVsZCAyKSArIDMpICsgKHlpZWxkIDQgKyAoeWllbGQgNSkg
KyA2KTsKICB9LCBbMiwgTmFOLCA1LCBOYU4sIE5hTl0sICJmb28iLCBbMiwgIjFmb28zIiwgNSwg
IjRmb282IiwsICJmb29mb28iXSk7Cn0gY2F0Y2ggKGUpIHt9CgovKiBFeHByZXNzaW9uTXV0YXRv
cjogUmVwZWF0ZWQgKi8KdHJ5IHsKICBfX2ZfNihmdW5jdGlvbiogX19mXzM4KCkgewogICAgdHJ5
IHsKICAgICAgcmV0dXJuICh5aWVsZCAxICsgKHlpZWxkIDIpICsgMykgKyAoeWllbGQgNCArICh5
aWVsZCA1KSArIDYpOwogICAgfSBjYXRjaCAoX192XzYzKSB7CiAgICAgIHRocm93IF9fdl82MzsK
ICAgIH0KICB9LCBbMiwgTmFOLCA1LCBOYU4sIE5hTl0sICJmb28iLCBbMiwgIjFmb28zIiwgNSwg
IjRmb282IiwgImZvb2ZvbyJdKTsKfSBjYXRjaCAoZSkge30KCi8qIEV4cHJlc3Npb25NdXRhdG9y
OiBDbG9uZWQgc2libGluZyAqLwp0cnkgewogIF9fZl82KGZ1bmN0aW9uICgpIHsKICAgIHJldHVy
biB7CiAgICAgIHg6IDQyLAogICAgICBnOiBmdW5jdGlvbiogKF9fdl82NSkgewogICAgICAgIHlp
ZWxkIHRoaXMueDsKICAgICAgfQogICAgfS5nKDApOwogIH0sIFs0MiwgdW5kZWZpbmVkXSwgImZv
byIsIFs0MiwgdW5kZWZpbmVkXSk7Cn0gY2F0Y2ggKGUpIHt9Cgp0cnkgewogIF9fZl82KGZ1bmN0
aW9uKiBfX2ZfMzgoKSB7CiAgICB0cnkgewogICAgICByZXR1cm4gKHlpZWxkIDEgKyAoeWllbGQg
MikgKyAzKSArICh5aWVsZCA0ICsgKHlpZWxkIDUpICsgNik7CiAgICB9IGNhdGNoIChfX3ZfNjMp
IHsKICAgICAgdGhyb3cgX192XzYzOwogICAgfQogIH0sIFsyLCBOYU4sIDUsIE5hTiwgTmFOXSwg
ImZvbyIsIFsyLCAiMWZvbzMiLCA1LCAiNGZvbzYiLCAiZm9vZm9vIl0pOwp9IGNhdGNoIChlKSB7
fQoKdHJ5IHsKICBfX2ZfNihmdW5jdGlvbiogX19mXzM5KCkgewogICAgdHJ5IHsKICAgICAgdGhy
b3cgeWllbGQgMSArICh5aWVsZCAyKSArIDM7CiAgICB9IGNhdGNoIChfX3ZfNjQpIHsKICAgICAg
aWYgKHR5cGVvZiBfX3ZfNjQgPT0gJ29iamVjdCcpIHRocm93IF9fdl82NDsKICAgICAgcmV0dXJu
IF9fdl82NCArICh5aWVsZCA0ICsgKHlpZWxkIDUpICsgNik7CiAgICB9CiAgfSwgWzIsIE5hTiwg
NSwgTmFOLCBOYU5dLCAiZm9vIiwgWzIsICIxZm9vMyIsIDUsICI0Zm9vNiIsICJmb29mb28iXSk7
Cn0gY2F0Y2ggKGUpIHt9CgovKiBWYXJpYWJsZU9yT2JqZWN0TXV0YXRvcjogUmFuZG9tIG11dGF0
aW9uICovCnRyeSB7CiAgaWYgKF9fdl8zICE9IG51bGwgJiYgdHlwZW9mIF9fdl8zID09ICJvYmpl
Y3QiKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX192XzMsIF9fZ2V0UmFuZG9tUHJvcGVydHkoX192
XzMsIDk2OTYwOSksIHsKICAgIHZhbHVlOiAxZS0xNQogIH0pOwp9IGNhdGNoIChlKSB7fQoKdHJ5
IHsKICBfX2ZfNihfX3ZfMTIoKSwKICAvKiBBcnJheU11dGF0b3I6IEluc2VydCBhIGhvbGUgKHJl
cGxhY2VkKSAqLwoKICAvKiBBcnJheU11dGF0b3I6IEluc2VydCBhIGhvbGUgKi8KCiAgLyogQXJy
YXlNdXRhdG9yOiBJbnNlcnQgYSBob2xlICovCiAgWywsIHVuZGVmaW5lZF0sICJmb28iLCBbdW5k
ZWZpbmVkXSk7Cn0gY2F0Y2ggKGUpIHt9CgpfX2ZfNihuZXcgX192XzEyKCksIFt1bmRlZmluZWRd
LCAiZm9vIiwgW3VuZGVmaW5lZF0pOwoKdHJ5IHsKICBfX2ZfNihfX3ZfMTIoJ3lpZWxkIDE7Jyks
IFsxLCB1bmRlZmluZWRdLCAiZm9vIiwgWzEsIHVuZGVmaW5lZF0pOwp9IGNhdGNoIChlKSB7fQoK
dHJ5IHsKICBfX2ZfNihmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gX192XzEyKCd4JywgJ3knLCAn
eWllbGQgeCArIHk7JykoMSwgMik7CiAgfSwgWzMsIHVuZGVmaW5lZF0sICJmb28iLCBbMywgdW5k
ZWZpbmVkXSk7Cn0gY2F0Y2ggKGUpIHt9Cgp0cnkgewogIF9fZl82KGZ1bmN0aW9uICgpIHsKICAg
IHJldHVybiB7CiAgICAgIHg6IDQyLAogICAgICBnOiBmdW5jdGlvbiogKF9fdl82NSkgewogICAg
ICAgIHRyeSB7CiAgICAgICAgICB5aWVsZCB0aGlzLng7CiAgICAgICAgfSBjYXRjaCAoZSkge30K
ICAgICAgfQogICAgfS5nKDApOwogIH0sIFs0MiwgdW5kZWZpbmVkXSwgImZvbyIsIFs0MiwgdW5k
ZWZpbmVkXSk7Cn0gY2F0Y2ggKGUpIHt9CgpmdW5jdGlvbiBfX2ZfNyhfX3ZfNjYpIHsKICBmdW5j
dGlvbiogX19mXzQwKCkgewogICAgeWllbGQgMTsKCiAgICB0cnkgewogICAgICAvKiBWYXJpYWJs
ZU9yT2JqZWN0TXV0YXRvcjogUmFuZG9tIG11dGF0aW9uICovCiAgICAgIHRyeSB7CiAgICAgICAg
X192XzY2ID0gX192XzEyLCBfX2NhbGxHQygpOwogICAgICB9IGNhdGNoIChlKSB7fQoKICAgICAg
dHJ5IHsKICAgICAgICBpZiAoX192XzY2ICE9IG51bGwgJiYgdHlwZW9mIF9fdl82NiA9PSAib2Jq
ZWN0IikgdHJ5IHsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3ZfNjYsIF9fZ2V0
UmFuZG9tUHJvcGVydHkoX192XzY2LCAyNTY2OTIpLCB7CiAgICAgICAgICAgIHZhbHVlOiB7fQog
ICAgICAgICAgfSk7CiAgICAgICAgfSBjYXRjaCAoZSkge30KICAgICAgfSBjYXRjaCAoZSkge30K
CiAgICAgIHRyeSB7CiAgICAgICAgeWllbGQgMjsKICAgICAgfSBjYXRjaCAoZSkge30KICAgIH0g
Y2F0Y2ggKAogICAgLyogVmFyaWFibGVNdXRhdG9yOiBSZXBsYWNlZCBfX3ZfNjcgd2l0aCBfX3Zf
MTIgKi8KICAgIF9fdl8xMikgewogICAgICAvKiBFeHByZXNzaW9uTXV0YXRvcjogUmVwZWF0ZWQg
Ki8KICAgICAgdHJ5IHsKICAgICAgICB5aWVsZCBfX3ZfNjc7CiAgICAgIH0gY2F0Y2ggKGUpIHt9
CgogICAgICB0cnkgewogICAgICAgIHlpZWxkIF9fdl82NzsKICAgICAgfSBjYXRjaCAoZSkge30K
ICAgIH0KCiAgICB5aWVsZCAzOwogIH0KCiAgZnVuY3Rpb24gX19mXzQxKCkge30KCiAgZnVuY3Rp
b24gX19mXzQyKF9fdl82OCkgewogICAgdHJ5IHsKICAgICAgYXNzZXJ0SXRlcmF0b3JOZXh0KF9f
dl82OCwgMSk7CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIGFzc2VydEl0ZXJhdG9yTmV4dChfX3Zf
NjgsIDIpOwoKICAgIC8qIEV4cHJlc3Npb25NdXRhdG9yOiBSZXBlYXRlZCAqLwogICAgdHJ5IHsK
ICAgICAgYXNzZXJ0SXRlcmF0b3JOZXh0KF9fdl82OCwgMyk7CiAgICB9IGNhdGNoIChlKSB7fQoK
ICAgIHRyeSB7CiAgICAgIGFzc2VydEl0ZXJhdG9yTmV4dChfX3ZfNjgsIDMpOwogICAgfSBjYXRj
aCAoZSkge30KCiAgICB0cnkgewogICAgICBhc3NlcnRJdGVyYXRvckRvbmUoX192XzY4LCB1bmRl
ZmluZWQpOwogICAgfSBjYXRjaCAoZSkge30KCiAgICAvKiBWYXJpYWJsZU9yT2JqZWN0TXV0YXRv
cjogUmFuZG9tIG11dGF0aW9uICovCiAgICB0cnkgewogICAgICBfX2NhbGxSYW5kb21GdW5jdGlv
bihfX3ZfMiwgNDA0NTU0LCBfX2dldFJhbmRvbU9iamVjdCgyNDI5NTgpLCAtNWUtMzI0LCAtNDI5
NDk2NzI5NiwgX19nZXRSYW5kb21PYmplY3QoNDk5MTg2KSwgX192XzEyLCBmdW5jdGlvbiAoKSB7
CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0sIF9fdl8xLCAxKTsKICAgIH0gY2F0Y2ggKGUpIHt9
CgogICAgdHJ5IHsKICAgICAgYXNzZXJ0SXRlcmF0b3JEb25lKF9fdl82OCwgdW5kZWZpbmVkKTsK
ICAgIH0gY2F0Y2ggKGUpIHt9CiAgfQoKICB0cnkgewogICAgX19mXzQyKF9fdl82NihfX2ZfNDAp
KTsKICB9IGNhdGNoIChlKSB7fQoKICBmdW5jdGlvbiBfX2ZfNDMoX192XzY5KSB7CiAgICB0cnkg
ewogICAgICBhc3NlcnRUaHJvd3NJbnN0YW5jZU9mKGZ1bmN0aW9uICgpIHsKICAgICAgICAvKiBF
eHByZXNzaW9uTXV0YXRvcjogUmVwZWF0ZWQgKi8KICAgICAgICB0cnkgewogICAgICAgICAgX192
XzY5LnRocm93KG5ldyBfX2ZfNDEoKSk7CiAgICAgICAgfSBjYXRjaCAoZSkge30KCiAgICAgICAg
dHJ5IHsKICAgICAgICAgIF9fdl82OS50aHJvdyhuZXcgX19mXzQxKCkpOwogICAgICAgIH0gY2F0
Y2ggKGUpIHt9CiAgICAgIH0sIF9fZl80MSk7CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIGFzc2Vy
dEl0ZXJhdG9yRG9uZShfX3ZfNjksIHVuZGVmaW5lZCk7CiAgfQoKICAvKiBWYXJpYWJsZU9yT2Jq
ZWN0TXV0YXRvcjogUmFuZG9tIG11dGF0aW9uICovCiAgdHJ5IHsKICAgIGRlbGV0ZSBfX3ZfMFtf
X2dldFJhbmRvbVByb3BlcnR5KF9fdl8wLCA3ODEwMTIpXSwgX19jYWxsR0MoKTsKICB9IGNhdGNo
IChlKSB7fQoKICBfX3ZfMVtfX2dldFJhbmRvbVByb3BlcnR5KF9fdl8xLCA5NjM4MjIpXSA9IF9f
dl8xMiwgX19jYWxsR0MoKTsKCiAgdHJ5IHsKICAgIF9fZl80MyhfX3ZfNjYoX19mXzQwKSk7CiAg
fSBjYXRjaCAoZSkge30KCiAgZnVuY3Rpb24gX19mXzQ0KF9fdl83MCkgewogICAgdHJ5IHsKICAg
ICAgYXNzZXJ0SXRlcmF0b3JOZXh0KF9fdl83MCwgMSk7CiAgICB9IGNhdGNoIChlKSB7fQoKICAg
IHRyeSB7CiAgICAgIGFzc2VydFRocm93c0luc3RhbmNlT2YoZnVuY3Rpb24gKCkgewogICAgICAg
IHRyeSB7CiAgICAgICAgICBfX3ZfNzAudGhyb3cobmV3IF9fZl80MSgpKTsKICAgICAgICB9IGNh
dGNoIChlKSB7fQogICAgICB9LCBfX2ZfNDEpOwogICAgfSBjYXRjaCAoZSkge30KCiAgICB0cnkg
ewogICAgICBhc3NlcnRJdGVyYXRvckRvbmUoX192XzcwLCB1bmRlZmluZWQpOwogICAgfSBjYXRj
aCAoZSkge30KICB9CgogIHRyeSB7CiAgICBfX2ZfNDQoX192XzY2KF9fZl80MCkpOwogIH0gY2F0
Y2ggKGUpIHt9CgogIC8qIFZhcmlhYmxlT3JPYmplY3RNdXRhdG9yOiBSYW5kb20gbXV0YXRpb24g
Ki8KICB0cnkgewogICAgX19nZXRSYW5kb21PYmplY3QoNDY5MzcpW19fZ2V0UmFuZG9tUHJvcGVy
dHkoX19nZXRSYW5kb21PYmplY3QoNDY5MzcpLCAyNjg3NDcpXSwgX19jYWxsR0MoKTsKICB9IGNh
dGNoIChlKSB7fQoKICBmdW5jdGlvbiBfX2ZfNDUoX192XzcxKSB7CiAgICB0cnkgewogICAgICBh
c3NlcnRJdGVyYXRvck5leHQoX192XzcxLCAxKTsKICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgdHJ5
IHsKICAgICAgYXNzZXJ0SXRlcmF0b3JOZXh0KF9fdl83MSwgMik7CiAgICB9IGNhdGNoIChlKSB7
fQoKICAgIHRyeSB7CiAgICAgIHZhciBfX3ZfNzIgPSBuZXcgX19mXzQxKCk7CiAgICB9IGNhdGNo
IChlKSB7fQoKICAgIHRyeSB7CiAgICAgIGFzc2VydEl0ZXJhdG9yUmVzdWx0KF9fdl83MS50aHJv
dyhfX3ZfNzIpLCBfX3ZfNzIsIGZhbHNlKTsKICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgLyogRXhw
cmVzc2lvbk11dGF0b3I6IFJlcGVhdGVkICovCiAgICB0cnkgewogICAgICBhc3NlcnRJdGVyYXRv
ck5leHQoX192XzcxLCAzKTsKICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgdHJ5IHsKICAgICAgYXNz
ZXJ0SXRlcmF0b3JOZXh0KF9fdl83MSwgMyk7CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIHRyeSB7
CiAgICAgIGFzc2VydEl0ZXJhdG9yRG9uZShfX3ZfNzEsIHVuZGVmaW5lZCk7CiAgICB9IGNhdGNo
IChlKSB7fQoKICAgIC8qIFZhcmlhYmxlT3JPYmplY3RNdXRhdG9yOiBSYW5kb20gbXV0YXRpb24g
Ki8KICAgIHRyeSB7CiAgICAgIF9fdl82NltfX2dldFJhbmRvbVByb3BlcnR5KF9fdl82NiwgMjM5
NTY1KV0sIF9fY2FsbEdDKCk7CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIHRyeSB7CiAgICAgIGFz
c2VydEl0ZXJhdG9yRG9uZShfX3ZfNzEsIHVuZGVmaW5lZCk7CiAgICB9IGNhdGNoIChlKSB7fQog
IH0KCiAgdHJ5IHsKICAgIF9fZl80NShfX3ZfNjYoX19mXzQwKSk7CiAgfSBjYXRjaCAoZSkge30K
CiAgZnVuY3Rpb24gX19mXzQ2KF9fdl83MykgewogICAgdHJ5IHsKICAgICAgYXNzZXJ0SXRlcmF0
b3JOZXh0KF9fdl83MywgMSk7CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIHRyeSB7CiAgICAgIGFz
c2VydEl0ZXJhdG9yTmV4dChfX3ZfNzMsIDIpOwogICAgfSBjYXRjaCAoZSkge30KCiAgICB0cnkg
ewogICAgICB2YXIgX192Xzc0ID0gbmV3IF9fZl80MSgpOwogICAgfSBjYXRjaCAoZSkge30KCiAg
ICB0cnkgewogICAgICBhc3NlcnRJdGVyYXRvclJlc3VsdChfX3ZfNzMudGhyb3coX192Xzc0KSwg
X192Xzc0LCBmYWxzZSk7CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIC8qIFZhcmlhYmxlT3JPYmpl
Y3RNdXRhdG9yOiBSYW5kb20gbXV0YXRpb24gKi8KICAgIF9fdl8zW19fZ2V0UmFuZG9tUHJvcGVy
dHkoX192XzMsIDEwMTE5OSldID0gX19nZXRSYW5kb21PYmplY3QoODk0NTY1KSwgX19jYWxsR0Mo
KTsKCiAgICB0cnkgewogICAgICBhc3NlcnRJdGVyYXRvck5leHQoX192XzczLCAzKTsKICAgIH0g
Y2F0Y2ggKGUpIHt9CgogICAgYXNzZXJ0VGhyb3dzSW5zdGFuY2VPZihmdW5jdGlvbiAoKSB7CiAg
ICAgIC8qIEV4cHJlc3Npb25NdXRhdG9yOiBSZXBlYXRlZCAqLwogICAgICBfX3ZfNzMudGhyb3co
bmV3IF9fZl80MSgpKTsKCiAgICAgIC8qIFZhcmlhYmxlT3JPYmplY3RNdXRhdG9yOiBSYW5kb20g
bXV0YXRpb24gKi8KICAgICAgZGVsZXRlIF9fdl83M1tfX2dldFJhbmRvbVByb3BlcnR5KF9fdl83
MywgMTAwMjI3NyldLCBfX2NhbGxHQygpOwogICAgICBfX3ZfMCA9IF9fdl82NiwgX19jYWxsR0Mo
KTsKICAgICAgX192XzEyW19fZ2V0UmFuZG9tUHJvcGVydHkoX192XzEyLCAxOTEzMDYpXSwgX19j
YWxsR0MoKTsKCiAgICAgIF9fdl83My50aHJvdyhuZXcgX19mXzQxKCkpOwogICAgfSwgX19mXzQx
KTsKCiAgICB0cnkgewogICAgICBhc3NlcnRJdGVyYXRvckRvbmUoX192XzczLCB1bmRlZmluZWQp
OwogICAgfSBjYXRjaCAoZSkge30KICB9CgogIHRyeSB7CiAgICBfX2ZfNDYoX192XzY2KF9fZl80
MCkpOwogIH0gY2F0Y2ggKGUpIHt9CgogIGZ1bmN0aW9uIF9fZl80NyhfX3ZfNzUpIHsKICAgIC8q
IENyb3NzT3Zlck11dGF0b3I6IENyb3Nzb3ZlciBmcm9tIFdlYktpdC9KU1Rlc3RzL3N0cmVzcy92
OC1yZWdleHAtc3RyaWN0LmpzICovCiAgICB0cnkgewogICAgICAndmFmdnFyJy5yZXBsYWNlKF9f
dl8wLCAnJyk7CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIC8qIFZhcmlhYmxlT3JPYmplY3RNdXRh
dG9yOiBSYW5kb20gbXV0YXRpb24gKi8KICAgIHRyeSB7CiAgICAgIF9fdl82NltfX2dldFJhbmRv
bVByb3BlcnR5KF9fdl82NiwgNzExOTEpXSA9IF9fdl8yLCBfX2NhbGxHQygpOwogICAgfSBjYXRj
aCAoZSkge30KCiAgICB0cnkgewogICAgICBhc3NlcnRJdGVyYXRvck5leHQoX192Xzc1LCAxKTsK
ICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgdHJ5IHsKICAgICAgYXNzZXJ0SXRlcmF0b3JOZXh0KF9f
dl83NSwgMik7CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIHRyeSB7CiAgICAgIHZhciBfX3ZfNzYg
PSBuZXcgX19mXzQxKCk7CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIHRyeSB7CiAgICAgIGFzc2Vy
dEl0ZXJhdG9yUmVzdWx0KF9fdl83NS50aHJvdyhfX3ZfNzYpLCBfX3ZfNzYsIGZhbHNlKTsKICAg
IH0gY2F0Y2ggKGUpIHt9CgogICAgdHJ5IHsKICAgICAgYXNzZXJ0VGhyb3dzSW5zdGFuY2VPZihm
dW5jdGlvbiAoKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIF9fdl83NS50aHJvdyhuZXcgX19m
XzQxKCkpOwogICAgICAgIH0gY2F0Y2ggKGUpIHt9CiAgICAgIH0sIF9fZl80MSk7CiAgICB9IGNh
dGNoIChlKSB7fQoKICAgIHRyeSB7CiAgICAgIGFzc2VydEl0ZXJhdG9yRG9uZSgKICAgICAgLyog
VmFyaWFibGVNdXRhdG9yOiBSZXBsYWNlZCBfX3ZfNzUgd2l0aCBfX3ZfMyAqLwogICAgICBfX3Zf
MywgdW5kZWZpbmVkKTsKICAgIH0gY2F0Y2ggKGUpIHt9CiAgfQoKICB0cnkgewogICAgX19mXzQ3
KF9fdl82NihfX2ZfNDApKTsKICB9IGNhdGNoIChlKSB7fQp9Cgp0cnkgewogIF9fZl83KGZ1bmN0
aW9uIChfX3ZfNzcpIHsKICAgIHJldHVybiBfX3ZfNzcoKTsKICB9KTsKfSBjYXRjaCAoZSkge30K
Ci8qIEV4cHJlc3Npb25NdXRhdG9yOiBSZXBlYXRlZCAqLwp0cnkgewogIF9fZl83KGZ1bmN0aW9u
KiAoX192Xzc4KSB7CiAgICByZXR1cm4geWllbGQqIF9fdl83OCgpOwogIH0pOwp9IGNhdGNoIChl
KSB7fQoKdHJ5IHsKICBfX2ZfNyhmdW5jdGlvbiogKF9fdl83OCkgewogICAgcmV0dXJuIHlpZWxk
KiBfX3ZfNzgoKTsKICB9KTsKfSBjYXRjaCAoZSkge30KCmZ1bmN0aW9uIF9fZl84KF9fdl83OSkg
ewogIGZ1bmN0aW9uKiBfX2ZfNDgoKSB7CiAgICAvKiBFeHByZXNzaW9uTXV0YXRvcjogUmVwZWF0
ZWQgKi8KICAgIHRyeSB7CiAgICAgIHlpZWxkIDE7CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIHRy
eSB7CiAgICAgIHlpZWxkIDE7CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIC8qIFZhcmlhYmxlT3JP
YmplY3RNdXRhdG9yOiBSYW5kb20gbXV0YXRpb24gKi8KICAgIHRyeSB7CiAgICAgIF9fdl8xW19f
Z2V0UmFuZG9tUHJvcGVydHkoX192XzEsIDg1MjU0MCldLCBfX2NhbGxHQygpOwogICAgfSBjYXRj
aCAoZSkge30KCiAgICB0cnkgewogICAgICB0cnkgewogICAgICAgIHlpZWxkIDI7CiAgICAgIH0g
Y2F0Y2ggKGUpIHt9CiAgICB9IGZpbmFsbHkgewogICAgICB0cnkgewogICAgICAgIHlpZWxkIDM7
CiAgICAgIH0gY2F0Y2ggKGUpIHt9CiAgICB9CgogICAgLyogVmFyaWFibGVPck9iamVjdE11dGF0
b3I6IFJhbmRvbSBtdXRhdGlvbiAqLwogICAgdHJ5IHsKICAgICAgZGVsZXRlIF9fdl8xW19fZ2V0
UmFuZG9tUHJvcGVydHkoX192XzEsIDY1MTQ1NCldLCBfX2NhbGxHQygpOwogICAgfSBjYXRjaCAo
ZSkge30KCiAgICB5aWVsZCA0OwogIH0KCiAgZnVuY3Rpb24gX19mXzQ5KCkge30KCiAgZnVuY3Rp
b24gX19mXzUwKCkge30KCiAgZnVuY3Rpb24gX19mXzUxKF9fdl84MCkgewogICAgdHJ5IHsKICAg
ICAgYXNzZXJ0SXRlcmF0b3JOZXh0KF9fdl84MCwgMSk7CiAgICB9IGNhdGNoIChlKSB7fQoKICAg
IC8qIEV4cHJlc3Npb25NdXRhdG9yOiBSZXBlYXRlZCAqLwogICAgdHJ5IHsKICAgICAgYXNzZXJ0
SXRlcmF0b3JOZXh0KF9fdl84MCwgMik7CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIC8qIFZhcmlh
YmxlT3JPYmplY3RNdXRhdG9yOiBSYW5kb20gbXV0YXRpb24gKi8KICAgIHRyeSB7CiAgICAgIF9f
dl8xID0gX192XzEyLCBfX2NhbGxHQygpOwogICAgfSBjYXRjaCAoZSkge30KCiAgICB0cnkgewog
ICAgICBhc3NlcnRJdGVyYXRvck5leHQoX192XzgwLCAyKTsKICAgIH0gY2F0Y2ggKGUpIHt9Cgog
ICAgdHJ5IHsKICAgICAgYXNzZXJ0SXRlcmF0b3JOZXh0KF9fdl84MCwKICAgICAgLyogTnVtYmVy
TXV0YXRvcjogUmVwbGFjZWQgMyB3aXRoIDE5ICovCiAgICAgIDE5KTsKICAgIH0gY2F0Y2ggKGUp
IHt9CgogICAgdHJ5IHsKICAgICAgYXNzZXJ0SXRlcmF0b3JOZXh0KF9fdl84MCwgNCk7CiAgICB9
IGNhdGNoIChlKSB7fQoKICAgIHRyeSB7CiAgICAgIGFzc2VydEl0ZXJhdG9yRG9uZSgKICAgICAg
LyogVmFyaWFibGVNdXRhdG9yOiBSZXBsYWNlZCBfX3ZfODAgd2l0aCBfX3ZfMCAqLwogICAgICBf
X3ZfMCwgdW5kZWZpbmVkKTsKICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgdHJ5IHsKICAgICAgYXNz
ZXJ0SXRlcmF0b3JEb25lKF9fdl84MCwgdW5kZWZpbmVkKTsKICAgIH0gY2F0Y2ggKGUpIHt9CiAg
fQoKICB0cnkgewogICAgX19mXzUxKF9fdl83OShfX2ZfNDgpKTsKICB9IGNhdGNoIChlKSB7fQoK
ICBmdW5jdGlvbiBfX2ZfNTIoX192XzgxKSB7CiAgICAvKiBWYXJpYWJsZU9yT2JqZWN0TXV0YXRv
cjogUmFuZG9tIG11dGF0aW9uICovCiAgICB0cnkgewogICAgICBfX3ZfNzkgPSBfX3ZfODEsIF9f
Y2FsbEdDKCk7CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIHRyeSB7CiAgICAgIGFzc2VydFRocm93
c0luc3RhbmNlT2YoZnVuY3Rpb24gKCkgewogICAgICAgIF9fdl84MS50aHJvdyhuZXcgX19mXzQ5
KCkpOwogICAgICB9LCBfX2ZfNDkpOwogICAgfSBjYXRjaCAoZSkge30KCiAgICB0cnkgewogICAg
ICBhc3NlcnRJdGVyYXRvckRvbmUoX192XzgxLCB1bmRlZmluZWQpOwogICAgfSBjYXRjaCAoZSkg
e30KICB9CgogIHRyeSB7CiAgICBfX2ZfNTIoX192Xzc5KF9fZl80OCkpOwogIH0gY2F0Y2ggKGUp
IHt9CgogIGZ1bmN0aW9uIF9fZl81MyhfX3ZfODIpIHsKICAgIC8qIEV4cHJlc3Npb25NdXRhdG9y
OiBDbG9uZWQgc2libGluZyAqLwogICAgdHJ5IHsKICAgICAgYXNzZXJ0VGhyb3dzSW5zdGFuY2VP
ZihmdW5jdGlvbiAoKSB7CiAgICAgICAgX192XzgyLnRocm93KG5ldyBfX2ZfNDkoKSk7CiAgICAg
IH0sIF9fZl80OSk7CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIC8qIEV4cHJlc3Npb25NdXRhdG9y
OiBSZXBlYXRlZCAqLwogICAgdHJ5IHsKICAgICAgYXNzZXJ0SXRlcmF0b3JOZXh0KF9fdl84Miwg
MSk7CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIHRyeSB7CiAgICAgIGFzc2VydEl0ZXJhdG9yTmV4
dChfX3ZfODIsIDEpOwogICAgfSBjYXRjaCAoZSkge30KCiAgICB0cnkgewogICAgICBhc3NlcnRU
aHJvd3NJbnN0YW5jZU9mKGZ1bmN0aW9uICgpIHsKICAgICAgICBfX3ZfODIudGhyb3cobmV3IF9f
Zl80OSgpKTsKICAgICAgfSwgX19mXzQ5KTsKICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgdHJ5IHsK
ICAgICAgYXNzZXJ0SXRlcmF0b3JEb25lKF9fdl84MiwgdW5kZWZpbmVkKTsKICAgIH0gY2F0Y2gg
KGUpIHt9CiAgfQoKICAvKiBWYXJpYWJsZU9yT2JqZWN0TXV0YXRvcjogUmFuZG9tIG11dGF0aW9u
ICovCiAgdHJ5IHsKICAgIGRlbGV0ZSBfX3ZfMFtfX2dldFJhbmRvbVByb3BlcnR5KF9fdl8wLCA4
MjQzNjkpXSwgX19jYWxsR0MoKTsKICB9IGNhdGNoIChlKSB7fQoKICB0cnkgewogICAgX19mXzUz
KF9fdl83OShfX2ZfNDgpKTsKICB9IGNhdGNoIChlKSB7fQoKICBmdW5jdGlvbiBfX2ZfNTQoX192
XzgzKSB7CiAgICB0cnkgewogICAgICBhc3NlcnRJdGVyYXRvck5leHQoX192XzgzLCAxKTsKICAg
IH0gY2F0Y2ggKGUpIHt9CgogICAgdHJ5IHsKICAgICAgYXNzZXJ0SXRlcmF0b3JOZXh0KAogICAg
ICAvKiBWYXJpYWJsZU11dGF0b3I6IFJlcGxhY2VkIF9fdl84MyB3aXRoIF9fdl84MyAqLwogICAg
ICBfX3ZfODMsIDIpOwogICAgfSBjYXRjaCAoZSkge30KCiAgICAvKiBWYXJpYWJsZU9yT2JqZWN0
TXV0YXRvcjogUmFuZG9tIG11dGF0aW9uICovCiAgICB0cnkgewogICAgICBpZiAoX192XzEgIT0g
bnVsbCAmJiB0eXBlb2YgX192XzEgPT0gIm9iamVjdCIpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShf
X3ZfMSwgX19nZXRSYW5kb21Qcm9wZXJ0eShfX3ZfMSwgNTA5MyksIHsKICAgICAgICBnZXQ6IGZ1
bmN0aW9uICgpIHsKICAgICAgICAgIGlmIChfX3ZfMSAhPSBudWxsICYmIHR5cGVvZiBfX3ZfMSA9
PSAib2JqZWN0IikgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fdl8xLCBfX2dldFJhbmRvbVByb3Bl
cnR5KF9fdl8xLCA4MzU3NzcpLCB7CiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewogICAg
ICAgICAgICAgIF9fdl8wW19fZ2V0UmFuZG9tUHJvcGVydHkoX192XzAsIDY5MzQ2MCldID0gLTEw
NzM3NDE4MjQsIF9fY2FsbEdDKCk7CiAgICAgICAgICAgICAgX192Xzc5W19fZ2V0UmFuZG9tUHJv
cGVydHkoX192Xzc5LCA5NzgxMDgpXSwgX19jYWxsR0MoKTsKICAgICAgICAgICAgICByZXR1cm4g
LTE7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7CiAg
ICAgICAgICAgICAgX192XzMgPSBfX3ZfMTIsIF9fY2FsbEdDKCk7CiAgICAgICAgICAgIH0KICAg
ICAgICAgIH0pOwogICAgICAgICAgcmV0dXJuIEFycmF5KDB4ODAwMCkuZmlsbCgiYSIpOwogICAg
ICAgIH0sCiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKICAgICAgICAgIF9fY2FsbFJh
bmRvbUZ1bmN0aW9uKF9fdl83OSwgMTAxNDI0NywgX19nZXRSYW5kb21PYmplY3QoNTQwNDEzKSwg
X192XzgzLCBfX2dldFJhbmRvbU9iamVjdCg2ODQ0NTIpLCAyMTQ3NDgzNjQ4LCB7CiAgICAgICAg
ICAgIHZhbHVlT2Y6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0gY2F0Y2ggKGUp
IHt9CgogICAgdHJ5IHsKICAgICAgYXNzZXJ0SXRlcmF0b3JSZXN1bHQoX192XzgzLnRocm93KG5l
dyBfX2ZfNDkoKSksIDMsIGZhbHNlKTsKICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgdHJ5IHsKICAg
ICAgYXNzZXJ0VGhyb3dzSW5zdGFuY2VPZihmdW5jdGlvbiAoKSB7CiAgICAgICAgdHJ5IHsKICAg
ICAgICAgIF9fdl84My5uZXh0KCk7CiAgICAgICAgfSBjYXRjaCAoZSkge30KCiAgICAgICAgLyog
VmFyaWFibGVPck9iamVjdE11dGF0b3I6IFJhbmRvbSBtdXRhdGlvbiAqLwogICAgICAgIHRyeSB7
CiAgICAgICAgICBkZWxldGUgX192XzNbX19nZXRSYW5kb21Qcm9wZXJ0eShfX3ZfMywgNjE3NTUp
XSwgX19jYWxsR0MoKTsKICAgICAgICB9IGNhdGNoIChlKSB7fQogICAgICB9LCBfX2ZfNDkpOwog
ICAgfSBjYXRjaCAoZSkge30KCiAgICB0cnkgewogICAgICBhc3NlcnRJdGVyYXRvckRvbmUoX192
XzgzLCB1bmRlZmluZWQpOwogICAgfSBjYXRjaCAoZSkge30KICB9CgogIC8qIFZhcmlhYmxlT3JP
YmplY3RNdXRhdG9yOiBSYW5kb20gbXV0YXRpb24gKi8KICB0cnkgewogICAgZGVsZXRlIF9fdl83
OVtfX2dldFJhbmRvbVByb3BlcnR5KF9fdl83OSwgODU2MCldLCBfX2NhbGxHQygpOwogIH0gY2F0
Y2ggKGUpIHt9CgogIHRyeSB7CiAgICBfX2ZfNTQoX192Xzc5KF9fZl80OCkpOwogIH0gY2F0Y2gg
KGUpIHt9CgogIGZ1bmN0aW9uIF9fZl81NShfX3ZfODQpIHsKICAgIC8qIEV4cHJlc3Npb25NdXRh
dG9yOiBSZXBlYXRlZCAqLwogICAgdHJ5IHsKICAgICAgYXNzZXJ0SXRlcmF0b3JOZXh0KF9fdl84
NCwgMSk7CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIHRyeSB7CiAgICAgIGFzc2VydEl0ZXJhdG9y
TmV4dChfX3ZfODQsIDEpOwogICAgfSBjYXRjaCAoZSkge30KCiAgICB0cnkgewogICAgICBhc3Nl
cnRJdGVyYXRvck5leHQoX192Xzg0LCAyKTsKICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgdHJ5IHsK
ICAgICAgYXNzZXJ0SXRlcmF0b3JSZXN1bHQoX192Xzg0LnRocm93KG5ldyBfX2ZfNDkoKSksIDMs
IGZhbHNlKTsKICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgdHJ5IHsKICAgICAgYXNzZXJ0VGhyb3dz
SW5zdGFuY2VPZihmdW5jdGlvbiAoKSB7CiAgICAgICAgX192Xzg0LnRocm93KG5ldyBfX2ZfNTAo
KSk7CiAgICAgIH0sIF9fZl81MCk7CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIGFzc2VydEl0ZXJh
dG9yRG9uZShfX3ZfODQsIHVuZGVmaW5lZCk7CiAgfQoKICB0cnkgewogICAgX19mXzU1KF9fdl83
OShfX2ZfNDgpKTsKICB9IGNhdGNoIChlKSB7fQoKICBmdW5jdGlvbiBfX2ZfNTYoX192Xzg1KSB7
CiAgICB0cnkgewogICAgICBhc3NlcnRJdGVyYXRvck5leHQoX192Xzg1LCAxKTsKICAgIH0gY2F0
Y2ggKGUpIHt9CgogICAgdHJ5IHsKICAgICAgYXNzZXJ0SXRlcmF0b3JOZXh0KF9fdl84NSwgMik7
CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIHRyeSB7CiAgICAgIGFzc2VydEl0ZXJhdG9yTmV4dChf
X3ZfODUsIDMpOwogICAgfSBjYXRjaCAoZSkge30KCiAgICB0cnkgewogICAgICBhc3NlcnRUaHJv
d3NJbnN0YW5jZU9mKGZ1bmN0aW9uICgpIHsKICAgICAgICB0cnkgewogICAgICAgICAgX192Xzg1
LnRocm93KG5ldyBfX2ZfNDkoKSk7CiAgICAgICAgfSBjYXRjaCAoZSkge30KICAgICAgfSwgX19m
XzQ5KTsKICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgdHJ5IHsKICAgICAgYXNzZXJ0SXRlcmF0b3JE
b25lKF9fdl84NSwgdW5kZWZpbmVkKTsKICAgIH0gY2F0Y2ggKGUpIHt9CiAgfQoKICB0cnkgewog
ICAgX19mXzU2KF9fdl83OShfX2ZfNDgpKTsKICB9IGNhdGNoIChlKSB7fQoKICBmdW5jdGlvbiBf
X2ZfNTcoX192Xzg2KSB7CiAgICB0cnkgewogICAgICBhc3NlcnRJdGVyYXRvck5leHQoX192Xzg2
LCAxKTsKICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgdHJ5IHsKICAgICAgYXNzZXJ0SXRlcmF0b3JO
ZXh0KF9fdl84NiwgMik7CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIHRyeSB7CiAgICAgIGFzc2Vy
dEl0ZXJhdG9yTmV4dChfX3ZfODYsIDMpOwogICAgfSBjYXRjaCAoZSkge30KCiAgICB0cnkgewog
ICAgICBhc3NlcnRJdGVyYXRvck5leHQoX192Xzg2LCA0KTsKICAgIH0gY2F0Y2ggKGUpIHt9Cgog
ICAgLyogVmFyaWFibGVPck9iamVjdE11dGF0b3I6IFJhbmRvbSBtdXRhdGlvbiAqLwogICAgdHJ5
IHsKICAgICAgZGVsZXRlIF9fdl8zW19fZ2V0UmFuZG9tUHJvcGVydHkoX192XzMsIDM1MDgxKV0s
IF9fY2FsbEdDKCk7CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIHRyeSB7CiAgICAgIGFzc2VydFRo
cm93c0luc3RhbmNlT2YoZnVuY3Rpb24gKCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBfX3Zf
ODYudGhyb3cobmV3IF9fZl80OSgpKTsKICAgICAgICB9IGNhdGNoIChlKSB7fQogICAgICB9LCBf
X2ZfNDkpOwogICAgfSBjYXRjaCAoZSkge30KCiAgICAvKiBFeHByZXNzaW9uTXV0YXRvcjogUmVw
ZWF0ZWQgKi8KICAgIHRyeSB7CiAgICAgIGFzc2VydEl0ZXJhdG9yRG9uZSgKICAgICAgLyogVmFy
aWFibGVNdXRhdG9yOiBSZXBsYWNlZCBfX3ZfODYgd2l0aCBfX3ZfODYgKi8KICAgICAgX192Xzg2
LCB1bmRlZmluZWQpOwogICAgfSBjYXRjaCAoZSkge30KCiAgICB0cnkgewogICAgICBhc3NlcnRJ
dGVyYXRvckRvbmUoX192Xzg2LCB1bmRlZmluZWQpOwogICAgfSBjYXRjaCAoZSkge30KICB9Cgog
IHRyeSB7CiAgICBfX2ZfNTcoX192Xzc5KF9fZl80OCkpOwogIH0gY2F0Y2ggKGUpIHt9Cn0KCl9f
Zl84KGZ1bmN0aW9uIChfX3ZfODcpIHsKICByZXR1cm4gX192Xzg3KCk7Cn0pOwoKLyogRXhwcmVz
c2lvbk11dGF0b3I6IFJlcGVhdGVkICovCnRyeSB7CiAgX19mXzgoZnVuY3Rpb24qIChfX3ZfODgp
IHsKICAgIHJldHVybiB5aWVsZCogX192Xzg4KCk7CiAgfSk7Cn0gY2F0Y2ggKGUpIHt9Cgp0cnkg
ewogIF9fZl84KGZ1bmN0aW9uKiAoX192Xzg4KSB7CiAgICByZXR1cm4geWllbGQqIF9fdl84OCgp
OwogIH0pOwp9IGNhdGNoIChlKSB7fQoKZnVuY3Rpb24gX19mXzkoX192Xzg5KSB7CiAgZnVuY3Rp
b24qIF9fZl81OCgpIHsKICAgIHRyeSB7CiAgICAgIHRyeSB7CiAgICAgICAgeWllbGQgMTsKICAg
ICAgfSBjYXRjaCAoZSkge30KCiAgICAgIHRyeSB7CiAgICAgICAgLyogRXhwcmVzc2lvbk11dGF0
b3I6IFJlcGVhdGVkICovCiAgICAgICAgdHJ5IHsKICAgICAgICAgIHlpZWxkIDI7CiAgICAgICAg
fSBjYXRjaCAoZSkge30KCiAgICAgICAgdHJ5IHsKICAgICAgICAgIHlpZWxkIDI7CiAgICAgICAg
fSBjYXRjaCAoZSkge30KICAgICAgfSBjYXRjaCAoX192XzkwKSB7CiAgICAgICAgdHJ5IHsKICAg
ICAgICAgIHlpZWxkIF9fdl85MDsKICAgICAgICB9IGNhdGNoIChlKSB7fQogICAgICB9CgogICAg
ICB0cnkgewogICAgICAgIHlpZWxkIDM7CiAgICAgIH0gY2F0Y2ggKGUpIHt9CiAgICB9IGZpbmFs
bHkgewogICAgICAvKiBFeHByZXNzaW9uTXV0YXRvcjogUmVwZWF0ZWQgKi8KICAgICAgdHJ5IHsK
ICAgICAgICB5aWVsZCA0OwogICAgICB9IGNhdGNoIChlKSB7fQoKICAgICAgdHJ5IHsKICAgICAg
ICB5aWVsZCA0OwogICAgICB9IGNhdGNoIChlKSB7fQogICAgfQoKICAgIHRyeSB7CiAgICAgIHlp
ZWxkIDU7CiAgICB9IGNhdGNoIChlKSB7fQogIH0KCiAgZnVuY3Rpb24gX19mXzU5KCkge30KCiAg
ZnVuY3Rpb24gX19mXzYwKCkge30KCiAgZnVuY3Rpb24gX19mXzYxKF9fdl85MSkgewogICAgdHJ5
IHsKICAgICAgYXNzZXJ0SXRlcmF0b3JOZXh0KF9fdl85MSwgMSk7CiAgICB9IGNhdGNoIChlKSB7
fQoKICAgIHRyeSB7CiAgICAgIGFzc2VydEl0ZXJhdG9yTmV4dChfX3ZfOTEsIDIpOwogICAgfSBj
YXRjaCAoZSkge30KCiAgICB0cnkgewogICAgICBhc3NlcnRJdGVyYXRvck5leHQoX192XzkxLCAz
KTsKICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgdHJ5IHsKICAgICAgYXNzZXJ0SXRlcmF0b3JOZXh0
KF9fdl85MSwgNCk7CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIHRyeSB7CiAgICAgIGFzc2VydEl0
ZXJhdG9yTmV4dChfX3ZfOTEsIDUpOwogICAgfSBjYXRjaCAoZSkge30KCiAgICAvKiBFeHByZXNz
aW9uTXV0YXRvcjogQ2xvbmVkIHNpYmxpbmcgKi8KICAgIHRyeSB7CiAgICAgIGFzc2VydEl0ZXJh
dG9yTmV4dChfX3ZfOTEsIDIpOwogICAgfSBjYXRjaCAoZSkge30KCiAgICB0cnkgewogICAgICBh
c3NlcnRJdGVyYXRvckRvbmUoX192XzkxLCB1bmRlZmluZWQpOwogICAgfSBjYXRjaCAoZSkge30K
CiAgICB0cnkgewogICAgICBhc3NlcnRJdGVyYXRvckRvbmUoX192XzkxLCB1bmRlZmluZWQpOwog
ICAgfSBjYXRjaCAoZSkge30KICB9CgogIHRyeSB7CiAgICBfX2ZfNjEoX192Xzg5KF9fZl81OCkp
OwogIH0gY2F0Y2ggKGUpIHt9CgogIGZ1bmN0aW9uIF9fZl82MihfX3ZfOTIpIHsKICAgIHRyeSB7
CiAgICAgIGFzc2VydFRocm93c0luc3RhbmNlT2YoZnVuY3Rpb24gKCkgewogICAgICAgIF9fdl85
Mi50aHJvdyhuZXcgX19mXzU5KCkpOwogICAgICB9LCBfX2ZfNTkpOwogICAgfSBjYXRjaCAoZSkg
e30KCiAgICB0cnkgewogICAgICBhc3NlcnRJdGVyYXRvckRvbmUoX192XzkyLCB1bmRlZmluZWQp
OwogICAgfSBjYXRjaCAoZSkge30KICB9CgogIHRyeSB7CiAgICBfX2ZfNjIoX192Xzg5KF9fZl81
OCkpOwogIH0gY2F0Y2ggKGUpIHt9CgogIGZ1bmN0aW9uIF9fZl82MyhfX3ZfOTMpIHsKICAgIHRy
eSB7CiAgICAgIGFzc2VydEl0ZXJhdG9yTmV4dChfX3ZfOTMsIDEpOwogICAgfSBjYXRjaCAoZSkg
e30KCiAgICB0cnkgewogICAgICBhc3NlcnRJdGVyYXRvclJlc3VsdChfX3ZfOTMudGhyb3cobmV3
IF9fZl81OSgpKSwgNCwgZmFsc2UpOwogICAgfSBjYXRjaCAoZSkge30KCiAgICAvKiBDcm9zc092
ZXJNdXRhdG9yOiBDcm9zc292ZXIgZnJvbSB2OC90ZXN0L21qc3VuaXQvYXN5bmMtaG9va3MvZXhl
Y3V0aW9uLW9yZGVyLmpzICovCiAgICB0cnkgewogICAgICBfX3ZfMy5wdXNoKFsncmVzb2x2ZScs
IF9fdl8xMl0pOwogICAgfSBjYXRjaCAoZSkge30KCiAgICB0cnkgewogICAgICBhc3NlcnRUaHJv
d3NJbnN0YW5jZU9mKGZ1bmN0aW9uICgpIHsKICAgICAgICBfX3ZfOTMubmV4dCgpOwogICAgICB9
LCBfX2ZfNTkpOwogICAgfSBjYXRjaCAoZSkge30KCiAgICB0cnkgewogICAgICBhc3NlcnRJdGVy
YXRvckRvbmUoCiAgICAgIC8qIFZhcmlhYmxlTXV0YXRvcjogUmVwbGFjZWQgX192XzkzIHdpdGgg
X192XzMgKi8KICAgICAgX192XzMsIHVuZGVmaW5lZCk7CiAgICB9IGNhdGNoIChlKSB7fQogIH0K
CiAgdHJ5IHsKICAgIF9fZl82MyhfX3ZfODkoX19mXzU4KSk7CiAgfSBjYXRjaCAoZSkge30KCiAg
ZnVuY3Rpb24gX19mXzY0KF9fdl85NCkgewogICAgdHJ5IHsKICAgICAgYXNzZXJ0SXRlcmF0b3JO
ZXh0KF9fdl85NCwgMSk7CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIHRyeSB7CiAgICAgIGFzc2Vy
dEl0ZXJhdG9yUmVzdWx0KF9fdl85NC50aHJvdyhuZXcgX19mXzU5KCkpLCA0LCBmYWxzZSk7CiAg
ICB9IGNhdGNoIChlKSB7fQoKICAgIHRyeSB7CiAgICAgIGFzc2VydFRocm93c0luc3RhbmNlT2Yo
ZnVuY3Rpb24gKCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBfX3ZfOTQudGhyb3cobmV3IF9f
Zl82MCgpKTsKICAgICAgICB9IGNhdGNoIChlKSB7fQogICAgICB9LCBfX2ZfNjApOwogICAgfSBj
YXRjaCAoZSkge30KCiAgICAvKiBWYXJpYWJsZU9yT2JqZWN0TXV0YXRvcjogUmFuZG9tIG11dGF0
aW9uICovCiAgICB0cnkgewogICAgICBkZWxldGUgX192XzBbX19nZXRSYW5kb21Qcm9wZXJ0eShf
X3ZfMCwgNTk5NDM1KV0sIF9fY2FsbEdDKCk7CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIGFzc2Vy
dEl0ZXJhdG9yRG9uZSgKICAgIC8qIFZhcmlhYmxlTXV0YXRvcjogUmVwbGFjZWQgX192Xzk0IHdp
dGggX192XzEgKi8KICAgIF9fdl8xLCB1bmRlZmluZWQpOwogIH0KCiAgLyogVmFyaWFibGVPck9i
amVjdE11dGF0b3I6IFJhbmRvbSBtdXRhdGlvbiAqLwogIHRyeSB7CiAgICBkZWxldGUgX192XzNb
X19nZXRSYW5kb21Qcm9wZXJ0eShfX3ZfMywgMTA1MTUxKV0sIF9fY2FsbEdDKCk7CiAgfSBjYXRj
aCAoZSkge30KCiAgdHJ5IHsKICAgIGlmIChfX3ZfMiAhPSBudWxsICYmIHR5cGVvZiBfX3ZfMiA9
PSAib2JqZWN0IikgdHJ5IHsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fdl8yLCBfX2dl
dFJhbmRvbVByb3BlcnR5KF9fZ2V0UmFuZG9tT2JqZWN0KDY3NzYyOCksIDE0MzYzMiksIHsKICAg
ICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGRlbGV0
ZSBfX3ZfM1tfX2dldFJhbmRvbVByb3BlcnR5KF9fdl8zLCA2MDA2OTMpXSwgX19jYWxsR0MoKTsK
ICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgICAgICAgcmV0dXJuIF9fdl8yOwogICAgICAg
IH0sCiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHsKICAgICAgICAgIHRyeSB7CiAgICAg
ICAgICAgIF9fdl8wID0gX192XzEyLCBfX2NhbGxHQygpOwogICAgICAgICAgfSBjYXRjaCAoZSkg
e30KCiAgICAgICAgICB0cnkgewogICAgICAgICAgICBfX3ZfMTJbX19nZXRSYW5kb21Qcm9wZXJ0
eShfX3ZfMTIsIDU3MzAxKV0sIF9fY2FsbEdDKCk7CiAgICAgICAgICB9IGNhdGNoIChlKSB7fQog
ICAgICAgIH0KICAgICAgfSk7CiAgICB9IGNhdGNoIChlKSB7fQogIH0gY2F0Y2ggKGUpIHt9Cgog
IHRyeSB7CiAgICBfX2ZfNjQoX192Xzg5KF9fZl81OCkpOwogIH0gY2F0Y2ggKGUpIHt9CgogIGZ1
bmN0aW9uIF9fZl82NShfX3ZfOTUpIHsKICAgIHRyeSB7CiAgICAgIGFzc2VydEl0ZXJhdG9yTmV4
dChfX3ZfOTUsIDEpOwogICAgfSBjYXRjaCAoZSkge30KCiAgICB0cnkgewogICAgICBhc3NlcnRJ
dGVyYXRvck5leHQoX192Xzk1LCAyKTsKICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgdHJ5IHsKICAg
ICAgdmFyIF9fdl85NiA9IG5ldyBfX2ZfNTkoKTsKICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgLyog
RXhwcmVzc2lvbk11dGF0b3I6IFJlcGVhdGVkICovCiAgICB0cnkgewogICAgICBhc3NlcnRJdGVy
YXRvclJlc3VsdChfX3ZfOTUudGhyb3coX192Xzk2KSwgX192Xzk2LCBmYWxzZSk7CiAgICB9IGNh
dGNoIChlKSB7fQoKICAgIHRyeSB7CiAgICAgIGFzc2VydEl0ZXJhdG9yUmVzdWx0KF9fdl85NS50
aHJvdyhfX3ZfOTYpLCBfX3ZfOTYsIGZhbHNlKTsKICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgYXNz
ZXJ0SXRlcmF0b3JOZXh0KF9fdl85NSwgMyk7CiAgICBhc3NlcnRJdGVyYXRvck5leHQoX192Xzk1
LCA0KTsKCiAgICB0cnkgewogICAgICBhc3NlcnRJdGVyYXRvck5leHQoX192Xzk1LCA1KTsKICAg
IH0gY2F0Y2ggKGUpIHt9CgogICAgdHJ5IHsKICAgICAgYXNzZXJ0SXRlcmF0b3JEb25lKF9fdl85
NSwgdW5kZWZpbmVkKTsKICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgdHJ5IHsKICAgICAgYXNzZXJ0
SXRlcmF0b3JEb25lKAogICAgICAvKiBWYXJpYWJsZU11dGF0b3I6IFJlcGxhY2VkIF9fdl85NSB3
aXRoIF9fdl8xICovCiAgICAgIF9fdl8xLCB1bmRlZmluZWQpOwogICAgfSBjYXRjaCAoZSkge30K
ICB9CgogIHRyeSB7CiAgICBfX2ZfNjUoX192Xzg5KF9fZl81OCkpOwogIH0gY2F0Y2ggKGUpIHt9
CgogIGZ1bmN0aW9uIF9fZl82NihfX3ZfOTcpIHsKICAgIHRyeSB7CiAgICAgIGFzc2VydEl0ZXJh
dG9yTmV4dChfX3ZfOTcsIDEpOwogICAgfSBjYXRjaCAoZSkge30KCiAgICB0cnkgewogICAgICBh
c3NlcnRJdGVyYXRvck5leHQoX192Xzk3LCAyKTsKICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgdHJ5
IHsKICAgICAgdmFyIF9fdl85OCA9IG5ldyBfX2ZfNTkoKTsKICAgIH0gY2F0Y2ggKGUpIHt9Cgog
ICAgdHJ5IHsKICAgICAgYXNzZXJ0SXRlcmF0b3JSZXN1bHQoX192Xzk3LnRocm93KF9fdl85OCks
IF9fdl85OCwgZmFsc2UpOwogICAgfSBjYXRjaCAoZSkge30KCiAgICB0cnkgewogICAgICBhc3Nl
cnRJdGVyYXRvclJlc3VsdChfX3ZfOTcudGhyb3cobmV3IF9fZl82MCgpKSwgNCwgZmFsc2UpOwog
ICAgfSBjYXRjaCAoZSkge30KCiAgICB0cnkgewogICAgICBhc3NlcnRUaHJvd3NJbnN0YW5jZU9m
KGZ1bmN0aW9uICgpIHsKICAgICAgICB0cnkgewogICAgICAgICAgX192Xzk3Lm5leHQoKTsKICAg
ICAgICB9IGNhdGNoIChlKSB7fQogICAgICB9LCBfX2ZfNjApOwogICAgfSBjYXRjaCAoZSkge30K
CiAgICB0cnkgewogICAgICBhc3NlcnRJdGVyYXRvckRvbmUoX192Xzk3LCB1bmRlZmluZWQpOwog
ICAgfSBjYXRjaCAoZSkge30KICB9CgogIC8qIENyb3NzT3Zlck11dGF0b3I6IENyb3Nzb3ZlciBm
cm9tIHY4L3Rlc3QvbWpzdW5pdC9yZWdyZXNzL3JlZ3Jlc3MtMTM3NzY4LmpzICovCiAgdHJ5IHsK
ICAgIHRoaXNbMl0gPSAzOwogIH0gY2F0Y2ggKGUpIHt9CgogIC8qIFZhcmlhYmxlT3JPYmplY3RN
dXRhdG9yOiBSYW5kb20gbXV0YXRpb24gKi8KICB0cnkgewogICAgX192Xzg5W19fZ2V0UmFuZG9t
UHJvcGVydHkoX192Xzg5LCA3MDIzMTgpXSwgX19jYWxsR0MoKTsKICB9IGNhdGNoIChlKSB7fQoK
ICB0cnkgewogICAgaWYgKF9fdl8xMiAhPSBudWxsICYmIHR5cGVvZiBfX3ZfMTIgPT0gIm9iamVj
dCIpIHRyeSB7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3ZfMTIsIF9fZ2V0UmFuZG9t
UHJvcGVydHkoX192XzEyLCA5NTk0MjYpLCB7CiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CiAg
ICAgICAgICB0cnkgewogICAgICAgICAgICBpZiAoX192XzEgIT0gbnVsbCAmJiB0eXBlb2YgX192
XzEgPT0gIm9iamVjdCIpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3ZfMSwgX19nZXRSYW5kb21Q
cm9wZXJ0eShfX3ZfMCwgOTE1MDk1KSwgewogICAgICAgICAgICAgIHZhbHVlOiBfX2dldFJhbmRv
bU9iamVjdCg5NTM5MjcpCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSBjYXRjaCAoZSkge30K
CiAgICAgICAgICByZXR1cm4gNDI5NDk2NzI5NzsKICAgICAgICB9LAogICAgICAgIHNldDogZnVu
Y3Rpb24gKHZhbHVlKSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBkZWxldGUgX192XzNb
X19nZXRSYW5kb21Qcm9wZXJ0eShfX3ZfMywgNzc1ODg1KV0sIF9fY2FsbEdDKCk7CiAgICAgICAg
ICB9IGNhdGNoIChlKSB7fQogICAgICAgIH0KICAgICAgfSk7CiAgICB9IGNhdGNoIChlKSB7fQog
IH0gY2F0Y2ggKGUpIHt9CgogIF9fZl82NihfX3ZfODkoX19mXzU4KSk7CgogIGZ1bmN0aW9uIF9f
Zl82NyhfX3ZfOTkpIHsKICAgIHRyeSB7CiAgICAgIGFzc2VydEl0ZXJhdG9yTmV4dChfX3ZfOTks
IDEpOwogICAgfSBjYXRjaCAoZSkge30KCiAgICB0cnkgewogICAgICBhc3NlcnRJdGVyYXRvck5l
eHQoCiAgICAgIC8qIFZhcmlhYmxlTXV0YXRvcjogUmVwbGFjZWQgX192Xzk5IHdpdGggX192XzEy
ICovCiAgICAgIF9fdl8xMiwgMik7CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIHRyeSB7CiAgICAg
IHZhciBfX3ZfMTAwID0gbmV3IF9fZl81OSgpOwogICAgfSBjYXRjaCAoZSkge30KCiAgICAvKiBD
cm9zc092ZXJNdXRhdG9yOiBDcm9zc292ZXIgZnJvbSBjaGFrcmEvZXM2L3NldF9mdW5jdGlvbmFs
aXR5LmpzICovCiAgICBTZXQucHJvdG90eXBlLmhhcy5jYWxsKHVuZGVmaW5lZCwgMSk7CgogICAg
dHJ5IHsKICAgICAgYXNzZXJ0SXRlcmF0b3JSZXN1bHQoX192Xzk5LnRocm93KF9fdl8xMDApLCBf
X3ZfMTAwLCBmYWxzZSk7CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIHRyeSB7CiAgICAgIGFzc2Vy
dEl0ZXJhdG9yTmV4dChfX3ZfOTksCiAgICAgIC8qIE51bWJlck11dGF0b3I6IFJlcGxhY2VkIDMg
d2l0aCAtOCAqLwogICAgICAtOCk7CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIC8qIFZhcmlhYmxl
T3JPYmplY3RNdXRhdG9yOiBSYW5kb20gbXV0YXRpb24gKi8KICAgIHRyeSB7CiAgICAgIF9fY2Fs
bFJhbmRvbUZ1bmN0aW9uKF9fdl8wLCA1NjY2MTUsIHsKICAgICAgICB0b1N0cmluZzogZnVuY3Rp
b24gKCkgewogICAgICAgICAgcmV0dXJuICIwIjsKICAgICAgICB9CiAgICAgIH0sIC00Mjk0OTY3
Mjk1LCB1bmRlZmluZWQsIHt9LCAxMDczNzQxODIzLCAtMTA3Mzc0MTgyNSwgX192XzEyLCBfX3Zf
OTksIDEpOwogICAgfSBjYXRjaCAoZSkge30KCiAgICB0cnkgewogICAgICBfX3ZfMTAwW19fZ2V0
UmFuZG9tUHJvcGVydHkoX192XzEwMCwgMzMyMzU0KV0sIF9fY2FsbEdDKCk7CiAgICB9IGNhdGNo
IChlKSB7fQoKICAgIHRyeSB7CiAgICAgIGFzc2VydEl0ZXJhdG9yUmVzdWx0KAogICAgICAvKiBW
YXJpYWJsZU11dGF0b3I6IFJlcGxhY2VkIF9fdl85OSB3aXRoIF9fdl8xICovCiAgICAgIF9fdl8x
LnRocm93KG5ldyBfX2ZfNjAoKSksIDQsIGZhbHNlKTsKICAgIH0gY2F0Y2ggKGUpIHt9CgogICAg
dHJ5IHsKICAgICAgYXNzZXJ0VGhyb3dzSW5zdGFuY2VPZihmdW5jdGlvbiAoKSB7CiAgICAgICAg
X192Xzk5Lm5leHQoKTsKICAgICAgfSwgX19mXzYwKTsKICAgIH0gY2F0Y2ggKGUpIHt9CgogICAg
dHJ5IHsKICAgICAgYXNzZXJ0SXRlcmF0b3JEb25lKF9fdl85OSwgdW5kZWZpbmVkKTsKICAgIH0g
Y2F0Y2ggKGUpIHt9CiAgfQoKICB0cnkgewogICAgX19mXzY3KF9fdl84OShfX2ZfNTgpKTsKICB9
IGNhdGNoIChlKSB7fQp9CgovKiBDcm9zc092ZXJNdXRhdG9yOiBDcm9zc292ZXIgZnJvbSB2OC90
ZXN0L21qc3VuaXQvdmFsdWUtY2FsbGljLXByb3RvdHlwZS1jaGFuZ2UuanMgKi8KQm9vbGVhbi5w
cm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7CiAgcmV0dXJuIDA7Cn07Cgp0cnkgewog
IF9fZl85KGZ1bmN0aW9uIChfX3ZfMTAxKSB7CiAgICByZXR1cm4gX192XzEwMSgpOwogIH0pOwp9
IGNhdGNoIChlKSB7fQoKLyogRnVuY3Rpb25DYWxsTXV0YXRvcjogUnVuIHRvIHN0YWNrIGxpbWl0
IF9fZl85ICovCnJ1bk5lYXJTdGFja0xpbWl0KCgpID0+IHsKICByZXR1cm4gX19mXzkoZnVuY3Rp
b24qIChfX3ZfMTAyKSB7CiAgICByZXR1cm4geWllbGQqIF9fdl8xMDIoKTsKICB9KTsKfSk7Cgpm
dW5jdGlvbiBfX2ZfMTAoKSB7CiAgZnVuY3Rpb24gX19mXzY4KCkgewogICAgZnVuY3Rpb24qIF9f
Zl83MSgpIHsKICAgICAgdHJ5IHsKICAgICAgICB5aWVsZCAoCiAgICAgICAgICAvKiBWYXJpYWJs
ZU11dGF0b3I6IFJlcGxhY2VkIF9fdl8xMDMgd2l0aCBfX3ZfMyAqLwogICAgICAgICAgX192XzMu
bmV4dCgpCiAgICAgICAgKTsKICAgICAgfSBjYXRjaCAoZSkge30KICAgIH0KCiAgICB2YXIgX192
XzEwMyA9IF9fZl83MSgpOwoKICAgIHJldHVybiBfX3ZfMTAzLm5leHQoKTsKICB9CgogIGZ1bmN0
aW9uIF9fZl82OSgpIHsKICAgIGZ1bmN0aW9uKiBfX2ZfNzIoKSB7CiAgICAgIC8qIEV4cHJlc3Np
b25NdXRhdG9yOiBSZXBlYXRlZCAqLwogICAgICB0cnkgewogICAgICAgIHlpZWxkIF9fdl8xMDQu
bmV4dCg0Mik7CiAgICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgICB0cnkgewogICAgICAgIHlpZWxk
IF9fdl8xMDQubmV4dCg0Mik7CiAgICAgIH0gY2F0Y2ggKGUpIHt9CiAgICB9CgogICAgdHJ5IHsK
ICAgICAgdmFyIF9fdl8xMDQgPSBfX2ZfNzIoKTsKICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgcmV0
dXJuIF9fdl8xMDQubmV4dCgpOwogIH0KCiAgZnVuY3Rpb24gX19mXzcwKCkgewogICAgZnVuY3Rp
b24qIF9fZl83MygpIHsKICAgICAgLyogVmFyaWFibGVPck9iamVjdE11dGF0b3I6IFJhbmRvbSBt
dXRhdGlvbiAqLwogICAgICBfX2NhbGxSYW5kb21GdW5jdGlvbihfX3ZfMSwgNzYwMzQsIGZhbHNl
LCBfX3ZfMCwgLTEwNzM3NDE4MjUsIDkwMDcxOTkyNTQ3NDA5OTApOwoKICAgICAgdHJ5IHsKICAg
ICAgICB5aWVsZCBfX3ZfMTA1LnRocm93KDEpOwogICAgICB9IGNhdGNoIChlKSB7fQogICAgfQoK
ICAgIHRyeSB7CiAgICAgIHZhciBfX3ZfMTA1ID0gX19mXzczKCk7CiAgICB9IGNhdGNoIChlKSB7
fQoKICAgIHJldHVybiBfX3ZfMTA1Lm5leHQoKTsKICB9CgogIC8qIFZhcmlhYmxlT3JPYmplY3RN
dXRhdG9yOiBSYW5kb20gbXV0YXRpb24gKi8KICB0cnkgewogICAgX192XzNbX19nZXRSYW5kb21Q
cm9wZXJ0eShfX3ZfMywgMjAwMTE5KV0sIF9fY2FsbEdDKCk7CiAgfSBjYXRjaCAoZSkge30KCiAg
YXNzZXJ0VGhyb3dzSW5zdGFuY2VPZihfX2ZfNjgsIFR5cGVFcnJvcik7CgogIC8qIENyb3NzT3Zl
ck11dGF0b3I6IENyb3Nzb3ZlciBmcm9tIHY4L3Rlc3QvbWpzdW5pdC9oYXJtb255L2FycmF5LXNv
cnQtY29tcGFyZWZuLmpzICovCiAgdHJ5IHsKICAgIF9fdl8wLnNvcnQobnVsbCk7CiAgfSBjYXRj
aCAoZSkge30KCiAgdHJ5IHsKICAgIGFzc2VydFRocm93c0luc3RhbmNlT2YoX19mXzY5LCBUeXBl
RXJyb3IpOwogIH0gY2F0Y2ggKGUpIHt9CgogIHRyeSB7CiAgICBhc3NlcnRUaHJvd3NJbnN0YW5j
ZU9mKF9fZl83MCwgVHlwZUVycm9yKTsKICB9IGNhdGNoIChlKSB7fQp9CgpfX2ZfMTAoKTsKCnRy
eSB7CiAgaWYgKHR5cGVvZiByZXBvcnRDb21wYXJlID09ICJmdW5jdGlvbiIpIHRyeSB7CiAgICBy
ZXBvcnRDb21wYXJlKHRydWUsIHRydWUpOwogIH0gY2F0Y2ggKGUpIHt9Cn0gY2F0Y2ggKGUpIHt9
CgovLyBPcmlnaW5hbDogc3BpZGVybW9ua2V5L25vbjI2Mi9SZWdFeHAvdW5pY29kZS1pZ25vcmVD
YXNlLWVzY2FwZS5qcwp0cnkgewogIHZhciBfX3ZfMTA2ID0gMTEzNTM3NzsKfSBjYXRjaCAoZSkg
e30KCnRyeSB7CiAgdmFyIF9fdl8xMDcgPSAiSW1wbGVtZW50IFJlZ0V4cCB1bmljb2RlIGZsYWcg
LS0gaWdub3JlQ2FzZSBmbGFnIHdpdGggY2hhcmFjdGVyIGNsYXNzIGVzY2FwZS4iOwp9IGNhdGNo
IChlKSB7fQoKdHJ5IHsKICBwcmludChfX3ZfMTA2ICsgIjogIiArIF9fdl8xMDcpOwp9IGNhdGNo
IChlKSB7fQoKdHJ5IHsKICBhc3NlcnRFcUFycmF5KC9cdy9pdS5leGVjKCJTIiksIFsiUyJdKTsK
fSBjYXRjaCAoZSkge30KCnRyeSB7CiAgYXNzZXJ0RXFBcnJheSgvXHcvaXUuZXhlYygicyIpLCBb
InMiXSk7Cn0gY2F0Y2ggKGUpIHt9CgovKiBWYXJpYWJsZU9yT2JqZWN0TXV0YXRvcjogUmFuZG9t
IG11dGF0aW9uICovCnRyeSB7CiAgX192XzFbX19nZXRSYW5kb21Qcm9wZXJ0eShfX3ZfMSwgMTAw
NjI2NyldID0gQXJyYXkoMHg4MDAwKS5maWxsKCJhIiksIF9fY2FsbEdDKCk7Cn0gY2F0Y2ggKGUp
IHt9Cgphc3NlcnRFcUFycmF5KC9cdy9pdS5leGVjKCJcdTAxN0YiKSwgWyJcdTAxN0YiXSk7Cgp0
cnkgewogIGFzc2VydEVxQXJyYXkoL1teXFddL2l1LmV4ZWMoIlMiKSwKICAvKiBBcnJheU11dGF0
b3I6IER1cGxpY2F0ZSBhbiBlbGVtZW50IChyZXBsYWNlZCkgKi8KCiAgLyogQXJyYXlNdXRhdG9y
OiBEdXBsaWNhdGUgYW4gZWxlbWVudCAocmVwbGFjZWQpICovCiAgWyJTIl0pOwp9IGNhdGNoIChl
KSB7fQoKdHJ5IHsKICBhc3NlcnRFcUFycmF5KC9bXlxXXS9pdS5leGVjKCJzIiksIFsicyJdKTsK
fSBjYXRjaCAoZSkge30KCnRyeSB7CiAgYXNzZXJ0RXFBcnJheSgvW15cV10vaXUuZXhlYygiXHUw
MTdGIiksIFsiXHUwMTdGIl0pOwp9IGNhdGNoIChlKSB7fQoKdHJ5IHsKICBhc3NlcnRFcSgvXFcv
aXUuZXhlYygiUyIpLCBudWxsKTsKfSBjYXRjaCAoZSkge30KCnRyeSB7CiAgYXNzZXJ0RXEoL1xX
L2l1LmV4ZWMoInMiKSwgbnVsbCk7Cn0gY2F0Y2ggKGUpIHt9Cgp0cnkgewogIGFzc2VydEVxKC9c
Vy9pdS5leGVjKCJcdTAxN0YiKSwgbnVsbCk7Cn0gY2F0Y2ggKGUpIHt9Cgp0cnkgewogIGFzc2Vy
dEVxKC9bXlx3XS9pdS5leGVjKCJTIiksIG51bGwpOwp9IGNhdGNoIChlKSB7fQoKdHJ5IHsKICBh
c3NlcnRFcSgvW15cd10vaXUuZXhlYygicyIpLCBudWxsKTsKfSBjYXRjaCAoZSkge30KCi8qIFZh
cmlhYmxlT3JPYmplY3RNdXRhdG9yOiBSYW5kb20gbXV0YXRpb24gKi8KdHJ5IHsKICBpZiAoX192
XzAgIT0gbnVsbCAmJiB0eXBlb2YgX192XzAgPT0gIm9iamVjdCIpIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShfX3ZfMCwgX19nZXRSYW5kb21Qcm9wZXJ0eShfX3ZfMCwgODc0MjgzKSwgewogICAgdmFs
dWU6IF9fdl8xMDYKICB9KTsKfSBjYXRjaCAoZSkge30KCnRyeSB7CiAgX192XzNbX19nZXRSYW5k
b21Qcm9wZXJ0eShfX3ZfMywgNDAzMDEzKV0sIF9fY2FsbEdDKCk7Cn0gY2F0Y2ggKGUpIHt9Cgp0
cnkgewogIGFzc2VydEVxKC9bXlx3XS9pdS5leGVjKCJcdTAxN0YiKSwgbnVsbCk7Cn0gY2F0Y2gg
KGUpIHt9Cgp0cnkgewogIGFzc2VydEVxQXJyYXkoL1x3L2l1LmV4ZWMoImsiKSwgWyJrIl0pOwp9
IGNhdGNoIChlKSB7fQoKdHJ5IHsKICBhc3NlcnRFcUFycmF5KC9cdy9pdS5leGVjKCJrIiksIFsi
ayJdKTsKfSBjYXRjaCAoZSkge30KCnRyeSB7CiAgYXNzZXJ0RXFBcnJheSgvXHcvaXUuZXhlYygi
XHUyMTJBIiksIFsiXHUyMTJBIl0pOwp9IGNhdGNoIChlKSB7fQoKYXNzZXJ0RXFBcnJheSgvW15c
V10vaXUuZXhlYygiayIpLCBbImsiXSk7CmFzc2VydEVxQXJyYXkoL1teXFddL2l1LmV4ZWMoImsi
KSwgWyJrIl0pOwoKdHJ5IHsKICBhc3NlcnRFcUFycmF5KC9bXlxXXS9pdS5leGVjKCJcdTIxMkEi
KSwgWyJcdTIxMkEiXSk7Cn0gY2F0Y2ggKGUpIHt9Cgp0cnkgewogIGFzc2VydEVxKC9cVy9pdS5l
eGVjKCJrIiksIG51bGwpOwp9IGNhdGNoIChlKSB7fQoKdHJ5IHsKICBhc3NlcnRFcSgvXFcvaXUu
ZXhlYygiayIpLCBudWxsKTsKfSBjYXRjaCAoZSkge30KCnRyeSB7CiAgYXNzZXJ0RXEoL1xXL2l1
LmV4ZWMoIlx1MjEyQSIpLCBudWxsKTsKfSBjYXRjaCAoZSkge30KCnRyeSB7CiAgYXNzZXJ0RXEo
L1teXHddL2l1LmV4ZWMoImsiKSwgbnVsbCk7Cn0gY2F0Y2ggKGUpIHt9Cgp0cnkgewogIGFzc2Vy
dEVxKC9bXlx3XS9pdS5leGVjKCJrIiksIG51bGwpOwp9IGNhdGNoIChlKSB7fQoKdHJ5IHsKICBh
c3NlcnRFcSgvW15cd10vaXUuZXhlYygiXHUyMTJBIiksIG51bGwpOwp9IGNhdGNoIChlKSB7fQoK
dHJ5IHsKICBpZiAodHlwZW9mIHJlcG9ydENvbXBhcmUgPT09ICJmdW5jdGlvbiIpIHJlcG9ydENv
bXBhcmUodHJ1ZSwgdHJ1ZSk7Cn0gY2F0Y2ggKGUpIHt9CgovLyBPcmlnaW5hbDogV2ViS2l0L0pT
VGVzdHMvc3RyZXNzL3B1dC1pbmxpbmUtY2FjaGUtc2lkZS1lZmZlY3RzLmpzCmxldCBfX3ZfMTA4
ID0gbmV3IEFycmF5KDEwMDApOwoKdHJ5IHsKICBmb3IgKGxldCBfX3ZfMTA5IG9mIF9fdl8xMDgu
a2V5cygpKSB7CiAgICBsZXQgX192XzExMCA9IHt9OwoKICAgIHRyeSB7CiAgICAgIF9fdl8xMTAu
Zm9vID0KICAgICAgLyogTnVtYmVyTXV0YXRvcjogUmVwbGFjZWQgMSB3aXRoIDE1ICovCiAgICAg
IDE1OwogICAgfSBjYXRjaCAoZSkge30KCiAgICB0cnkgewogICAgICBkZWxldGUgX192XzExMC5m
b287CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIHRyeSB7CiAgICAgIF9fdl8xMDhbX192XzEwOV0g
PSBfX3ZfMTEwOwogICAgfSBjYXRjaCAoZSkge30KICB9Cn0gY2F0Y2ggKGUpIHt9CgpmdW5jdGlv
biBfX2ZfNzQoX192XzExMSkgewogIHRyeSB7CiAgICBfX3ZfMTExLmZvbyA9IDQyOwogIH0gY2F0
Y2ggKGUpIHt9Cn0KCnRyeSB7CiAgZm9yIChsZXQgX192XzExMiBvZgogIC8qIFZhcmlhYmxlTXV0
YXRvcjogUmVwbGFjZWQgX192XzEwOCB3aXRoIF9fdl8xMDYgKi8KICBfX3ZfMTA2KSB7CiAgICBs
ZXQgX192XzExMyA9IG5ldyBGdW5jdGlvbihgCiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KHRoaXMsICJmb28iLCB7CiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICBj
b25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiBudWxsCiAgICAgICAgfSk7CiAg
ICAgICAgbGV0IG8gPSBPYmplY3QuY3JlYXRlKHRoaXMpOwogICAgICAgIC8vIE5lZWQgZXZhbCB0
byBnZXQgYSBuZXcgSUMgdG8gZmxhdHRlbiBvYmouCiAgICAgICAgbGV0IHN0ciA9ICJmb3IgKGxl
dCBpID0gMDsgaSA8IDEwMDA7IGkrKykgby5mb28iOwogICAgICAgIGV2YWwoc3RyKTsKICAgIGAp
OwoKICAgIHRyeSB7CiAgICAgIF9fdl8xMTIuX19kZWZpbmVTZXR0ZXJfXygiZm9vIiwgX192XzEx
Myk7CiAgICB9IGNhdGNoIChlKSB7fQoKICAgIHRyeSB7CiAgICAgIC8qIEZ1bmN0aW9uQ2FsbE11
dGF0b3I6IFJlcGxhY2VkIF9fZl83NCB3aXRoIF9fZl8xICovCiAgICAgIF9fZl8xKF9fdl8xMTIp
OwogICAgfSBjYXRjaCAoZSkge30KCiAgICB0cnkgewogICAgICAvKiBGdW5jdGlvbkNhbGxNdXRh
dG9yOiBSdW4gdG8gc3RhY2sgbGltaXQgX19mXzc0ICovCiAgICAgIHJ1bk5lYXJTdGFja0xpbWl0
KCgpID0+IHsKICAgICAgICByZXR1cm4gX19mXzc0KF9fdl8xMTIpOwogICAgICB9KTsKICAgIH0g
Y2F0Y2ggKGUpIHt9CiAgfQp9IGNhdGNoIChlKSB7fQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438837</attachid>
            <date>2021-09-21 11:06:24 -0700</date>
            <delta_ts>2021-09-22 23:59:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229674-20210921180623.patch</filename>
            <type>text/plain</type>
            <size>9858</size>
            <attacher name="Mikhail R. Gadelha">mikhail</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNjk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
NmZiYTg4MjJhZGU2MWRlYTk5NTcxYTc0M2Q4MTRlYzNhM2I5YWI2Li5hNGZkZWM4ZmEwY2RmYmNm
YjA0NDU2ODMwYWQ2Y2U3MWFhNWJjNjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMSBAQAorMjAyMS0wOC0zMCAgTWlraGFpbCBSLiBHYWRlbGhhICA8bWlraGFpbEBpZ2Fs
aWEuY29tPgorCisgICAgICAgIE51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBKU0M6OkdldEJ5
U3RhdHVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
Mjk2NzQKKworICAgICAgICBSZXZpZXdlZCBieSBZdXN1a2UgU3V6dWtpLiAKKworICAgICAgICBJ
biBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2ss
IHRoZXJlIGFyZQorICAgICAgICBzZXZlcmFsIHBsYWNlcyB0aGF0IGRlcmVmZXJlbmNlIHRoZSBz
dHViSW5mbyBhcmd1bWVudCB3aGVuIGNhbGxpbmcgdGhlCisgICAgICAgIEdldEJ5U3RhdHVzIGNv
bnN0cnVjdG9yLiBUbyBwcmV2ZW50IGEgbnVsbHB0ciBkZXJlZmVyZW5jZSwgdGhlIHBvaW50ZXIK
KyAgICAgICAgaXMgbm90IGRlcmVmZXJlbmNlZCBhbnltb3JlLCBhbmQgYSBjaGVjayB3YXMgYWRk
ZWQgdG8gY2hlY2sgaWYgc3R1YkluZm8KKyAgICAgICAgaXMgYSB2YWxpZCBwb2ludGVyIGJlZm9y
ZSBhY2Nlc3NpbmcgaXQuCisKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeVN0YXR1cy5jcHA6Cisg
ICAgICAgIChKU0M6OkdldEJ5U3RhdHVzOjpHZXRCeVN0YXR1cyk6CisgICAgICAgIChKU0M6Okdl
dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVkYmFjayk6Cisg
ICAgICAgICogYnl0ZWNvZGUvR2V0QnlTdGF0dXMuaDoKKwogMjAyMS0wOC0yNyAgTWlraGFpbCBS
LiBHYWRlbGhhICA8bWlraGFpbEBpZ2FsaWEuY29tPgogCiAgICAgICAgIEF2b2lkIGluY3JlYXNp
bmcgcmVxdWlyZWQgYWxpZ25tZW50IG9mIHRhcmdldCB0eXBlIHdhcm5pbmcgb24gQVJNIDMyIGJp
dHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuY3BwCmlu
ZGV4IDdlYTg2ZGQ4Yjg5ZmQ0YTZlNzA3ZWEzZDFkYzQwZWIxMjg2NGM2NzcuLjlkODQyNzM5Y2M2
OWFjNDhiNmJlZjFiNTUyYWVkYWM0MGQ2NzYzZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5U3RhdHVzLmNwcApAQCAtMTY5LDcgKzE2OSw3IEBAIEdldEJ5U3Rh
dHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNT
dGF0dXNNYXAmIG1hcCwKIH0KIAogI2lmIEVOQUJMRShKSVQpCi1HZXRCeVN0YXR1czo6R2V0QnlT
dGF0dXMoU3R1YkluZm9TdW1tYXJ5IHN1bW1hcnksIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bykKK0dldEJ5U3RhdHVzOjpHZXRCeVN0YXR1cyhTdHViSW5mb1N1bW1hcnkgc3VtbWFyeSwgU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKQogICAgIDogbV93YXNTZWVuSW5KSVQodHJ1ZSkKIHsK
ICAgICBzd2l0Y2ggKHN1bW1hcnkpIHsKQEAgLTE4MSwxMCArMTgxLDEyIEBAIEdldEJ5U3RhdHVz
OjpHZXRCeVN0YXR1cyhTdHViSW5mb1N1bW1hcnkgc3VtbWFyeSwgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvKQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICByZXR1cm47CiAgICAgY2FzZSBTdHViSW5mb1N1bW1hcnk6OlRha2VzU2xvd1BhdGg6Ci0gICAg
ICAgIG1fc3RhdGUgPSBzdHViSW5mby50b29rU2xvd1BhdGggPyBPYnNlcnZlZFRha2VzU2xvd1Bh
dGggOiBMaWtlbHlUYWtlc1Nsb3dQYXRoOworICAgICAgICBBU1NFUlQoc3R1YkluZm8pOworICAg
ICAgICBtX3N0YXRlID0gc3R1YkluZm8tPnRvb2tTbG93UGF0aCA/IE9ic2VydmVkVGFrZXNTbG93
UGF0aCA6IExpa2VseVRha2VzU2xvd1BhdGg7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFN0
dWJJbmZvU3VtbWFyeTo6VGFrZXNTbG93UGF0aEFuZE1ha2VzQ2FsbHM6Ci0gICAgICAgIG1fc3Rh
dGUgPSBzdHViSW5mby50b29rU2xvd1BhdGggPyBPYnNlcnZlZFNsb3dQYXRoQW5kTWFrZXNDYWxs
cyA6IE1ha2VzQ2FsbHM7CisgICAgICAgIEFTU0VSVChzdHViSW5mbyk7CisgICAgICAgIG1fc3Rh
dGUgPSBzdHViSW5mby0+dG9va1Nsb3dQYXRoID8gT2JzZXJ2ZWRTbG93UGF0aEFuZE1ha2VzQ2Fs
bHMgOiBNYWtlc0NhbGxzOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yMDIsNyArMjA0LDcgQEAgR2V0QnlTdGF0dXMgR2V0QnlT
dGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKAogewogICAg
IFN0dWJJbmZvU3VtbWFyeSBzdW1tYXJ5ID0gU3RydWN0dXJlU3R1YkluZm86OnN1bW1hcnkocHJv
ZmlsZWRCbG9jay0+dm0oKSwgc3R1YkluZm8pOwogICAgIGlmICghaXNJbmxpbmVhYmxlKHN1bW1h
cnkpKQotICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoc3VtbWFyeSwgKnN0dWJJbmZvKTsKKyAg
ICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKHN1bW1hcnksIHN0dWJJbmZvKTsKICAgICAKICAgICAv
LyBGaW5hbGx5IGZpZ3VyZSBvdXQgaWYgd2UgY2FuIGRlcml2ZSBhbiBhY2Nlc3Mgc3RyYXRlZ3ku
CiAgICAgR2V0QnlTdGF0dXMgcmVzdWx0OwpAQCAtMjE1LDcgKzIxNyw3IEBAIEdldEJ5U3RhdHVz
IEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVkYmFjaygK
ICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6IHsKICAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBzdHViSW5mby0+bV9pbmxpbmVBY2Nlc3NCYXNlU3RydWN0dXJlLmdldCgpOwog
ICAgICAgICBpZiAoc3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0
eSgpKQotICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3Vt
bWFyeSksICpzdHViSW5mbyk7CisgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpz
bG93VmVyc2lvbihzdW1tYXJ5KSwgc3R1YkluZm8pOwogICAgICAgICBDYWNoZWFibGVJZGVudGlm
aWVyIGlkZW50aWZpZXIgPSBzdHViSW5mby0+aWRlbnRpZmllcigpOwogICAgICAgICBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkID0gaWRlbnRpZmllci51aWQoKTsKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQodWlkKTsKQEAgLTIyMyw5ICsyMjUsOSBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29t
cHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2soCiAgICAgICAgIHVuc2lnbmVk
IGF0dHJpYnV0ZXM7CiAgICAgICAgIHZhcmlhbnQubV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENv
bmN1cnJlbnRseSh1aWQsIGF0dHJpYnV0ZXMpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQo
dmFyaWFudC5tX29mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpz
bG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBHZXRC
eVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCBzdHViSW5mbyk7CiAgICAgICAgIGlm
IChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yT3JWYWx1ZSkK
LSAgICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkp
LCAqc3R1YkluZm8pOworICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1Zl
cnNpb24oc3VtbWFyeSksIHN0dWJJbmZvKTsKICAgICAgICAgCiAgICAgICAgIHZhcmlhbnQubV9z
dHJ1Y3R1cmVTZXQuYWRkKHN0cnVjdHVyZSk7CiAgICAgICAgIGJvb2wgZGlkQXBwZW5kID0gcmVz
dWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCk7CkBAIC0yNDgsMTYgKzI1MCwxNiBAQCBHZXRCeVN0
YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJh
Y2soCiAgICAgICAgIGZvciAodW5zaWduZWQgbGlzdEluZGV4ID0gMDsgbGlzdEluZGV4IDwgbGlz
dC0+c2l6ZSgpOyArK2xpc3RJbmRleCkgewogICAgICAgICAgICAgY29uc3QgQWNjZXNzQ2FzZSYg
YWNjZXNzID0gbGlzdC0+YXQobGlzdEluZGV4KTsKICAgICAgICAgICAgIGlmIChhY2Nlc3Mudmlh
UHJveHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVy
c2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlT
dGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgc3R1YkluZm8pOwogCiAgICAgICAgICAg
ICBpZiAoYWNjZXNzLnVzZXNQb2x5UHJvdG8oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2V0
QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgc3R1
YkluZm8pOwogCiAgICAgICAgICAgICBpZiAoIWFjY2Vzcy5yZXF1aXJlc0lkZW50aWZpZXJOYW1l
TWF0Y2goKSkgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCB1c2UgdGhpcyBm
b3IgaW5kZXhlZCBsb2FkcyBpbiB0aGUgZnV0dXJlLiBUaGlzIGlzIHByZXR0eSBzb2xpZCBwcm9m
aWxpbmcKICAgICAgICAgICAgICAgICAvLyBpbmZvcm1hdGlvbiwgYW5kIHByb2JhYmx5IGJldHRl
ciB0aGFuIEFycmF5UHJvZmlsZSB3aGVuIGl0J3MgYXZhaWxhYmxlLgogICAgICAgICAgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQyMTUKLSAgICAg
ICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwg
KnN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93
VmVyc2lvbihzdW1tYXJ5KSwgc3R1YkluZm8pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsK
QEAgLTI2OCw3ICsyNzAsNyBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZvclN0
dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2soCiAgICAgICAgICAgICAgICAgLy8gc2hvdWxk
bid0IGhhdmUgdG8gdXNlIHZhbHVlIHByb2ZpbGluZyB0byBkaXNjb3ZlciBzb21ldGhpbmcgdGhh
dCB0aGUgQWNjZXNzQ2FzZQogICAgICAgICAgICAgICAgIC8vIGNvdWxkIGhhdmUgdG9sZCB1cy4g
QnV0LCBpdCB3b3JrcyB3ZWxsIGVub3VnaC4gU28sIG91ciBvbmx5IGNvbmNlcm4gaGVyZSBpcyB0
byBub3QKICAgICAgICAgICAgICAgICAvLyBjcmFzaCBvbiBudWxsIHN0cnVjdHVyZS4KLSAgICAg
ICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwg
KnN0dWJJbmZvKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93
VmVyc2lvbihzdW1tYXJ5KSwgc3R1YkluZm8pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgICAgICBDb21wbGV4R2V0U3RhdHVzIGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4
R2V0U3RhdHVzOjpjb21wdXRlRm9yKApAQCAtMjc5LDcgKzI4MSw3IEBAIEdldEJ5U3RhdHVzIEdl
dEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVkYmFjaygKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBj
YXNlIENvbXBsZXhHZXRTdGF0dXM6OlRha2VzU2xvd1BhdGg6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFy
eSksIHN0dWJJbmZvKTsKICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIENvbXBs
ZXhHZXRTdGF0dXM6OklubGluZWFibGU6IHsKICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzOwpAQCAtMzA5LDcgKzMxMSw3IEBAIEdl
dEJ5U3RhdHVzIEdldEJ5U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVG
ZWVkYmFjaygKICAgICAgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkN1c3RvbUFjY2Vzc29y
R2V0dGVyOiB7CiAgICAgICAgICAgICAgICAgICAgIGN1c3RvbUFjY2Vzc29yR2V0dGVyID0gYWNj
ZXNzLmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkuY3VzdG9tQWNjZXNzb3IoKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFhY2Nlc3MuYXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKS5k
b21BdHRyaWJ1dGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1
cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSksIHN0
dWJJbmZvKTsKICAgICAgICAgICAgICAgICAgICAgZG9tQXR0cmlidXRlID0gV1RGOjptYWtlVW5p
cXVlPERPTUF0dHJpYnV0ZUFubm90YXRpb24+KCphY2Nlc3MuYXM8R2V0dGVyU2V0dGVyQWNjZXNz
Q2FzZT4oKS5kb21BdHRyaWJ1dGUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGhhdmVET01BdHRy
aWJ1dGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICByZXN1bHQubV9zdGF0ZSA9IEN1c3Rv
bTsKQEAgLTMxOCw3ICszMjAsNyBAQCBHZXRCeVN0YXR1cyBHZXRCeVN0YXR1czo6Y29tcHV0ZUZv
clN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2soCiAgICAgICAgICAgICAgICAgZGVmYXVs
dDogewogICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgdG90YWxseSBz
d2VldCB0byBzdXBwb3J0IG1vcmUgb2YgdGhlc2UgYXQgc29tZSBwb2ludCBpbiB0aGUKICAgICAg
ICAgICAgICAgICAgICAgLy8gZnV0dXJlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTMzMDUyCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhK
U0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1YkluZm8pOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR2V0QnlTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgc3R1YkluZm8p
OwogICAgICAgICAgICAgICAgIH0gfQogCiAgICAgICAgICAgICAgICAgQVNTRVJUKChBY2Nlc3ND
YXNlOjpNaXNzID09IGFjY2Vzcy50eXBlKCkgfHwgYWNjZXNzLmlzQ3VzdG9tKCkpID09IChhY2Nl
c3Mub2Zmc2V0KCkgPT0gaW52YWxpZE9mZnNldCkpOwpAQCAtMzI5LDE2ICszMzEsMTYgQEAgR2V0
QnlTdGF0dXMgR2V0QnlTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZl
ZWRiYWNrKAogICAgICAgICAgICAgICAgICAgICBXVEZNb3ZlKGRvbUF0dHJpYnV0ZSkpOwogCiAg
ICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFy
eSksICpzdHViSW5mbyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhK
U0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCBzdHViSW5mbyk7CiAKICAgICAgICAgICAgICAgICBp
ZiAoaGF2ZURPTUF0dHJpYnV0ZSkgewogICAgICAgICAgICAgICAgICAgICAvLyBHaXZlIHVwIHdo
ZW4gY3VzdG9tIGFjY2Vzc2VzIGFyZSBub3QgbWVyZ2VkIGludG8gb25lLgogICAgICAgICAgICAg
ICAgICAgICBpZiAocmVzdWx0Lm51bVZhcmlhbnRzKCkgIT0gMSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCAqc3R1
YkluZm8pOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6
c2xvd1ZlcnNpb24oc3VtbWFyeSksIHN0dWJJbmZvKTsKICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgICAgICAvLyBHaXZlIHVwIHdoZW4gY3VzdG9tIGFjY2VzcyBhbmQg
c2ltcGxlIGFjY2VzcyBhcmUgbWl4ZWQuCiAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQu
bV9zdGF0ZSA9PSBDdXN0b20pCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlT
dGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSwgKnN0dWJJbmZvKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBHZXRCeVN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkp
LCBzdHViSW5mbyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfSB9CkBAIC0zNDksNyArMzUxLDcgQEAgR2V0QnlTdGF0dXMgR2V0QnlTdGF0
dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKAogICAgIH0KICAg
ICAgICAgCiAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIEdldEJ5U3RhdHVzKEpTQzo6c2xv
d1ZlcnNpb24oc3VtbWFyeSksICpzdHViSW5mbyk7CisgICAgICAgIHJldHVybiBHZXRCeVN0YXR1
cyhKU0M6OnNsb3dWZXJzaW9uKHN1bW1hcnkpLCBzdHViSW5mbyk7CiAgICAgfQogICAgIAogICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlTdGF0dXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeVN0YXR1cy5oCmluZGV4IDM2NjkyZDljMDg0NDc0YzM0ZTE0OGRiOGI5ZTlk
NzhhNDk2MWM4ZWEuLjVkMDIxYmNlOTg1OThkNDU2YzA2MDcxNDhlZWRkZThhZmNmOTZmMjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeVN0YXR1cy5oCkBAIC03OCw3
ICs3OCw3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHN0YXRlID09IE5vSW5mb3JtYXRpb24g
fHwgc3RhdGUgPT0gTGlrZWx5VGFrZXNTbG93UGF0aCB8fCBzdGF0ZSA9PSBPYnNlcnZlZFRha2Vz
U2xvd1BhdGggfHwgc3RhdGUgPT0gTWFrZXNDYWxscyB8fCBzdGF0ZSA9PSBPYnNlcnZlZFNsb3dQ
YXRoQW5kTWFrZXNDYWxscyk7CiAgICAgfQogICAgIAotICAgIGV4cGxpY2l0IEdldEJ5U3RhdHVz
KFN0dWJJbmZvU3VtbWFyeSwgU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICBleHBsaWNpdCBHZXRC
eVN0YXR1cyhTdHViSW5mb1N1bW1hcnksIFN0cnVjdHVyZVN0dWJJbmZvKik7CiAgICAgCiAgICAg
R2V0QnlTdGF0dXMoCiAgICAgICAgIFN0YXRlIHN0YXRlLCBib29sIHdhc1NlZW5JbkpJVCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>