<?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>200350</bug_id>
          
          <creation_ts>2019-08-01 10:18:33 -0700</creation_ts>
          <short_desc>[WHLSL] Inline all native function calls</short_desc>
          <delta_ts>2019-08-05 17:04:19 -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>WebGPU</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>
          
          <blocked>200332</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>graouts</cc>
    
    <cc>jonlee</cc>
    
    <cc>justin_fan</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>rmorisset</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1557639</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-01 10:18:33 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1557770</commentid>
    <comment_count>1</comment_count>
      <attachid>375353</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-01 15:14:03 -0700</bug_when>
    <thetext>Created attachment 375353
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1557784</commentid>
    <comment_count>2</comment_count>
      <attachid>375360</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-01 15:58:03 -0700</bug_when>
    <thetext>Created attachment 375360
WIP

just need to finish up a few more of the native functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558243</commentid>
    <comment_count>3</comment_count>
      <attachid>375477</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-02 19:30:17 -0700</bug_when>
    <thetext>Created attachment 375477
WIP

I think it&apos;s done. It passes all our tests. Just need to clean up the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558558</commentid>
    <comment_count>4</comment_count>
      <attachid>375559</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-05 14:32:47 -0700</bug_when>
    <thetext>Created attachment 375559
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558559</commentid>
    <comment_count>5</comment_count>
      <attachid>375559</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-05 14:33:34 -0700</bug_when>
    <thetext>Comment on attachment 375559
patch

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

&gt; Source/WebCore/platform/graphics/gpu/cocoa/GPUComputePipelineMetal.mm:38
&gt; +#import &lt;wtf/MonotonicTime.h&gt;

will revert changes in this file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558560</commentid>
    <comment_count>6</comment_count>
      <attachid>375559</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-05 14:33:53 -0700</bug_when>
    <thetext>Comment on attachment 375559
patch

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

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.h:30
&gt; +#include &lt;wtf/text/WTFString.h&gt;

will revert</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558564</commentid>
    <comment_count>7</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-08-05 14:35:52 -0700</bug_when>
    <thetext>Attachment 375559 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/gpu/cocoa/GPUComputePipelineMetal.mm:38:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/gpu/cocoa/GPUComputePipelineMetal.mm:38:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/graphics/gpu/cocoa/GPUComputePipelineMetal.mm:94:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WebCore/platform/graphics/gpu/cocoa/GPUComputePipelineMetal.mm:97:  Should have a space between // and comment  [whitespace/comments] [4]
Total errors found: 4 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558565</commentid>
    <comment_count>8</comment_count>
      <attachid>375560</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-05 14:43:34 -0700</bug_when>
    <thetext>Created attachment 375560
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558586</commentid>
    <comment_count>9</comment_count>
      <attachid>375560</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-08-05 15:35:29 -0700</bug_when>
    <thetext>Comment on attachment 375560
patch

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

r=me

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:247
&gt; +            &quot;if (&quot;, args[1], &quot; &lt; &quot;, args[0], &quot;.length) &quot;, returnName, &quot; = &amp;(&quot;, args[0], &quot;.pointer[&quot;, args[1], &quot;]);\n&quot;

nit: might be simpler/shorter with a ternary conditional.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558591</commentid>
    <comment_count>10</comment_count>
      <attachid>375560</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-05 15:45:31 -0700</bug_when>
    <thetext>Comment on attachment 375560
patch

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

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:247
&gt;&gt; +            &quot;if (&quot;, args[1], &quot; &lt; &quot;, args[0], &quot;.length) &quot;, returnName, &quot; = &amp;(&quot;, args[0], &quot;.pointer[&quot;, args[1], &quot;]);\n&quot;
&gt; 
&gt; nit: might be simpler/shorter with a ternary conditional.

sounds good</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558594</commentid>
    <comment_count>11</comment_count>
      <attachid>375573</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-05 15:50:59 -0700</bug_when>
    <thetext>Created attachment 375573
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558637</commentid>
    <comment_count>12</comment_count>
      <attachid>375573</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-05 17:03:40 -0700</bug_when>
    <thetext>Comment on attachment 375573
patch for landing

Clearing flags on attachment: 375573

Committed r248280: &lt;https://trac.webkit.org/changeset/248280&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558638</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-05 17:03:42 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558639</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-05 17:04:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/53965153&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375353</attachid>
            <date>2019-08-01 15:14:03 -0700</date>
            <delta_ts>2019-08-01 15:58:03 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>35669</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0ODEyNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDE5LTA4LTAxICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gRG8gc2ltcGxlIG51
bGxwdHIgY2hlY2sgZWxpbWluYXRpb24gdXNpbmcgYmFzaWMgZGF0YSBmbG93IGFuYWx5c2lzIHdo
ZW4gZ2VuZXJhdGluZyBtZXRhbCBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDAzNTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBXaGVuIGRvaW5nIG1ldGFsIGNvZGUgZ2VuZXJhdGlvbiwgd2UgZnJl
cXVlbnRseSBrbm93IHdoZXRoZXIgc29tZXRoaW5nCisgICAgICAgIGlzIG51bGwgb3Igbm90LiBU
aGlzIHBhdGNoIGRvZXMgYSBiYXNpYyBwcm9wYWdhdGlvbiBvZiB0aGlzIGluZm9ybWF0aW9uCisg
ICAgICAgIHRvIGF2b2lkIGVtaXR0aW5nIGV4Y2Vzc2l2ZSBudWxsIGNoZWNrcyBpbiB0aGUgZ2Vu
ZXJhdGVkIE1ldGFsIGNvZGUuCisgICAgICAgIFRoaXMgaXMgYSA2JSBzcGVlZHVwICh3aXRoIGEg
cCB2YWx1ZSBvZiAwLjAwMDEpIGluIE1ldGFsIGNvbXBpbGUgdGltZXMKKyAgICAgICAgb24gY29t
cHV0ZV9ib2lkcy4KKworICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNM
RnVuY3Rpb25Xcml0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXI6OmFwcGVuZFJpZ2h0VmFsdWVXaXRoTnVsbGFiaWxpdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6
OmFwcGVuZFJpZ2h0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXI6OmFwcGVuZExlZnRWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dGFrZUxhc3RWYWx1ZUFu
ZE51bGxhYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25E
ZWZpbml0aW9uV3JpdGVyOjp0YWtlTGFzdExlZnRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQpOgorCiAyMDE5LTA4
LTAxICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFtU
ZXh0IGF1dG9zaXppbmddIFtpUGFkT1NdIEFkZCB0YXJnZXRlZCBoYWNrcyB0byBhZGRyZXNzIHNv
bWUgcmVtYWluaW5nIHRleHQgYXV0b3NpemluZyBpc3N1ZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAkocmV2aXNp
b24gMjQ4MTA1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
cmVwYXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgZHVtcEFTVEFmdGVyUGFyc2luCiBzdGF0aWMgY29uc3RleHByIGJvb2wgZHVtcEFT
VEF0RW5kID0gZmFsc2U7CiBzdGF0aWMgY29uc3RleHByIGJvb2wgYWx3YXlzRHVtcFBhc3NGYWls
dXJlcyA9IGZhbHNlOwogc3RhdGljIGNvbnN0ZXhwciBib29sIGR1bXBQYXNzRmFpbHVyZSA9IGR1
bXBBU1RCZWZvcmVFYWNoUGFzcyB8fCBkdW1wQVNUQWZ0ZXJQYXJzaW5nIHx8IGR1bXBBU1RBdEVu
ZCB8fCBhbHdheXNEdW1wUGFzc0ZhaWx1cmVzOwotc3RhdGljIGNvbnN0ZXhwciBib29sIGR1bXBQ
aGFzZVRpbWVzID0gZmFsc2U7CitzdGF0aWMgY29uc3RleHByIGJvb2wgZHVtcFBoYXNlVGltZXMg
PSB0cnVlOwogCiBzdGF0aWMgY29uc3RleHByIGJvb2wgcGFyc2VGdWxsU3RhbmRhcmRMaWJyYXJ5
ID0gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01l
dGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCShyZXZp
c2lvbiAyNDgxMDUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRh
bC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDIwICsxNTUs
MzcgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gbWFrZVN0cmluZygidmFyaWFibGUiLCBt
X3ZhcmlhYmxlQ291bnQrKyk7CiAgICAgfQogCisgICAgZW51bSBjbGFzcyBOdWxsYWJpbGl0eSA6
IHVpbnQ4X3QgeworICAgICAgICBOb3ROdWxsLAorICAgICAgICBDYW5CZU51bGwKKyAgICB9Owor
CiAgICAgc3RydWN0IFN0YWNrSXRlbSB7CiAgICAgICAgIFN0cmluZyB2YWx1ZTsKICAgICAgICAg
U3RyaW5nIGxlZnRWYWx1ZTsKKyAgICAgICAgTnVsbGFiaWxpdHkgdmFsdWVOdWxsYWJpbGl0eTsK
KyAgICAgICAgTnVsbGFiaWxpdHkgbGVmdFZhbHVlTnVsbGFiaWxpdHk7CiAgICAgfTsKIAotICAg
IHZvaWQgYXBwZW5kUmlnaHRWYWx1ZShBU1Q6OkV4cHJlc3Npb24mLCBTdHJpbmcgdmFsdWUpCisg
ICAgLy8gVGhpcyBpcyB0aGUgaW1wb3J0YW50IGRhdGEgZmxvdyBzdGVwIHdoZXJlIHdlIGNhbiB0
YWtlIHRoZSBudWxsYWJpbGl0eSBvZiBhbiBsdmFsdWUKKyAgICAvLyBhbmQgdHJhbnNmZXIgaXQg
aW50byB0aGUgbnVsbGFiaWxpdHkgb2YgYW4gcnZhbHVlLiBUaGlzIGlzIGNvbnZleWVkIGluIE1h
a2VQb2ludGVyRXhwcmVzc2lvbgorICAgIC8vIGFuZCBEZXJlZmVyZW5jZUV4cHJlc3Npb24uIE1h
a2VQb2ludGVyRXhwcmVzc2lvbiB3aWxsIHRyeSB0byBwcm9kdWNlIHJ2YWx1ZXMgd2hpY2ggYXJl
CisgICAgLy8gbm9uLW51bGwsIGFuZCBEZXJlZmVyZW5jZUV4cHJlc3Npb24gd2lsbCB0YWtlIGEg
bm9uLW51bGwgcnZhbHVlIGFuZCB0cnkgdG8gcHJvZHVjZQorICAgIC8vIGEgbm9uLW51bGwgbHZh
bHVlLgorICAgIHZvaWQgYXBwZW5kUmlnaHRWYWx1ZVdpdGhOdWxsYWJpbGl0eShBU1Q6OkV4cHJl
c3Npb24mLCBTdHJpbmcgdmFsdWUsIE51bGxhYmlsaXR5IG51bGxhYmlsaXR5KQogICAgIHsKLSAg
ICAgICAgbV9zdGFjay5hcHBlbmQoeyBXVEZNb3ZlKHZhbHVlKSwgU3RyaW5nKCkgfSk7CisgICAg
ICAgIG1fc3RhY2suYXBwZW5kKHsgV1RGTW92ZSh2YWx1ZSksIFN0cmluZygpLCBudWxsYWJpbGl0
eSwgTnVsbGFiaWxpdHk6OkNhbkJlTnVsbCB9KTsKICAgICB9CiAKLSAgICB2b2lkIGFwcGVuZExl
ZnRWYWx1ZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFN0cmluZyB2YWx1ZSwgU3RyaW5n
IGxlZnRWYWx1ZSkKKyAgICB2b2lkIGFwcGVuZFJpZ2h0VmFsdWUoQVNUOjpFeHByZXNzaW9uJiBl
eHByZXNzaW9uLCBTdHJpbmcgdmFsdWUpCisgICAgeworICAgICAgICBhcHBlbmRSaWdodFZhbHVl
V2l0aE51bGxhYmlsaXR5KGV4cHJlc3Npb24sIFdURk1vdmUodmFsdWUpLCBOdWxsYWJpbGl0eTo6
Q2FuQmVOdWxsKTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZExlZnRWYWx1ZShBU1Q6OkV4cHJl
c3Npb24mIGV4cHJlc3Npb24sIFN0cmluZyB2YWx1ZSwgU3RyaW5nIGxlZnRWYWx1ZSwgTnVsbGFi
aWxpdHkgbnVsbGFiaWxpdHkpCiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKGV4cHJlc3Np
b24sIGV4cHJlc3Npb24udHlwZUFubm90YXRpb24oKS5sZWZ0QWRkcmVzc1NwYWNlKCkpOwotICAg
ICAgICBtX3N0YWNrLmFwcGVuZCh7IFdURk1vdmUodmFsdWUpLCBXVEZNb3ZlKGxlZnRWYWx1ZSkg
fSk7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHsgV1RGTW92ZSh2YWx1ZSksIFdURk1vdmUobGVm
dFZhbHVlKSwgTnVsbGFiaWxpdHk6OkNhbkJlTnVsbCwgbnVsbGFiaWxpdHkgfSk7CiAgICAgfQog
CiAgICAgU3RyaW5nIHRha2VMYXN0VmFsdWUoKQpAQCAtMTc2LDExICsxOTMsMTggQEAgcHJvdGVj
dGVkOgogICAgICAgICBBU1NFUlQobV9zdGFjay5sYXN0KCkudmFsdWUpOwogICAgICAgICByZXR1
cm4gbV9zdGFjay50YWtlTGFzdCgpLnZhbHVlOwogICAgIH0KKyAgICBzdGQ6OnBhaXI8U3RyaW5n
LCBOdWxsYWJpbGl0eT4gdGFrZUxhc3RWYWx1ZUFuZE51bGxhYmlsaXR5KCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX3N0YWNrLmxhc3QoKS52YWx1ZSk7CisgICAgICAgIGF1dG8gbGFzdCA9IG1f
c3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgcmV0dXJuIHsgbGFzdC52YWx1ZSwgbGFzdC52YWx1
ZU51bGxhYmlsaXR5IH07CisgICAgfQogCi0gICAgU3RyaW5nIHRha2VMYXN0TGVmdFZhbHVlKCkK
KyAgICBzdGQ6OnBhaXI8U3RyaW5nLCBOdWxsYWJpbGl0eT4gdGFrZUxhc3RMZWZ0VmFsdWUoKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKG1fc3RhY2subGFzdCgpLmxlZnRWYWx1ZSk7Ci0gICAgICAg
IHJldHVybiBtX3N0YWNrLnRha2VMYXN0KCkubGVmdFZhbHVlOworICAgICAgICBhdXRvIGxhc3Qg
PSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIHJldHVybiB7IGxhc3QubGVmdFZhbHVlLCBs
YXN0LmxlZnRWYWx1ZU51bGxhYmlsaXR5IH07CiAgICAgfQogCiAgICAgZW51bSBjbGFzcyBCcmVh
a0NvbnRleHQgewpAQCAtMjAzLDExICsyMjcsMTQgQEAgcHJvdGVjdGVkOgogICAgIFN0cmluZyBt
X2JyZWFrT3V0T2ZDdXJyZW50TG9vcEVhcmx5VmFyaWFibGU7CiB9OwogCi12b2lkIEZ1bmN0aW9u
RGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKQordm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6
OnZpc2l0KEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYpCiB7Ci0gICAgYXV0byBpdGVy
YXRvciA9IG1fZnVuY3Rpb25NYXBwaW5nLmZpbmQoJm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24p
OwotICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX2Z1bmN0aW9uTWFwcGluZy5lbmQoKSk7Ci0gICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZCh3cml0ZU5hdGl2ZUZ1bmN0aW9uKG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24sIGl0ZXJhdG9yLT52YWx1ZSwgbV9pbnRyaW5zaWNzLCBtX3R5cGVOYW1lcikp
OworICAgIC8vIFdlIGlubGluZSBuYXRpdmUgZnVuY3Rpb24gY2FsbHMuCisKKyAgICAvLyBPT1BT
OiByZW1vdmUgaXQgZnJvbSBtX2Z1bmN0aW9uTWFwcGluZyB0byBwcmV2ZW50IGJ1Z3MKKyAgICAv
L2F1dG8gaXRlcmF0b3IgPSBtX2Z1bmN0aW9uTWFwcGluZy5maW5kKCZuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uKTsKKyAgICAvL0FTU0VSVChpdGVyYXRvciAhPSBtX2Z1bmN0aW9uTWFwcGluZy5l
bmQoKSk7CisgICAgLy9tX3N0cmluZ0J1aWxkZXIuYXBwZW5kKHdyaXRlTmF0aXZlRnVuY3Rpb24o
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiwgaXRlcmF0b3ItPnZhbHVlLCBtX2ludHJpbnNpY3Ms
IG1fdHlwZU5hbWVyKSk7CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNp
dChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQpAQCAtNDk5LDcg
KzUyNiw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKICAgICAg
ICAgInRocmVhZCAiLCBtYW5nbGVkVHlwZU5hbWUsICIqICIsIHBvaW50ZXJOYW1lLCAiID0gJiIs
IHRha2VMYXN0VmFsdWUoKSwgIi0+IiwgbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JTdHJ1Y3R1
cmVFbGVtZW50KGdsb2JhbFZhcmlhYmxlUmVmZXJlbmNlLnN0cnVjdEZpZWxkKCkpLCAiO1xuIiwK
ICAgICAgICAgbWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhbHVlTmFtZSwgIiA9ICIsICIqIiwgcG9p
bnRlck5hbWUsICI7XG4iCiAgICAgKTsKLSAgICBhcHBlbmRMZWZ0VmFsdWUoZ2xvYmFsVmFyaWFi
bGVSZWZlcmVuY2UsIHZhbHVlTmFtZSwgcG9pbnRlck5hbWUpOworICAgIGFwcGVuZExlZnRWYWx1
ZShnbG9iYWxWYXJpYWJsZVJlZmVyZW5jZSwgdmFsdWVOYW1lLCBwb2ludGVyTmFtZSwgTnVsbGFi
aWxpdHk6Ok5vdE51bGwpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlz
aXQoQVNUOjpJbmRleEV4cHJlc3Npb24mIGluZGV4RXhwcmVzc2lvbikKQEAgLTUzNSwxMSArNTYy
LDE0IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKIHZvaWQgRnVu
Y3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiBh
c3NpZ25tZW50RXhwcmVzc2lvbikKIHsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXNzaWdubWVu
dEV4cHJlc3Npb24ubGVmdCgpKTsKLSAgICBhdXRvIHBvaW50ZXJOYW1lID0gdGFrZUxhc3RMZWZ0
VmFsdWUoKTsKKyAgICBhdXRvIFtwb2ludGVyTmFtZSwgbnVsbGFiaWxpdHldID0gdGFrZUxhc3RM
ZWZ0VmFsdWUoKTsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24u
cmlnaHQoKSk7Ci0gICAgYXV0byByaWdodE5hbWUgPSB0YWtlTGFzdFZhbHVlKCk7Ci0gICAgbV9z
dHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCJpZiAoIiwgcG9pbnRlck5hbWUsICIpICoiLCBw
b2ludGVyTmFtZSwgIiA9ICIsIHJpZ2h0TmFtZSwgIjtcbiIpOwotICAgIGFwcGVuZFJpZ2h0VmFs
dWUoYXNzaWdubWVudEV4cHJlc3Npb24sIHJpZ2h0TmFtZSk7CisgICAgYXV0byBbcmlnaHROYW1l
LCByaWdodE51bGxhYmlsaXR5XSA9IHRha2VMYXN0VmFsdWVBbmROdWxsYWJpbGl0eSgpOworICAg
IGlmIChudWxsYWJpbGl0eSA9PSBOdWxsYWJpbGl0eTo6Q2FuQmVOdWxsKQorICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoImlmICgiLCBwb2ludGVyTmFtZSwgIikgKiIsIHBv
aW50ZXJOYW1lLCAiID0gIiwgcmlnaHROYW1lLCAiO1xuIik7CisgICAgZWxzZQorICAgICAgICBt
X3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIioiLCBwb2ludGVyTmFtZSwgIiA9ICIsIHJp
Z2h0TmFtZSwgIjtcbiIpOworICAgIGFwcGVuZFJpZ2h0VmFsdWVXaXRoTnVsbGFiaWxpdHkoYXNz
aWdubWVudEV4cHJlc3Npb24sIHJpZ2h0TmFtZSwgcmlnaHROdWxsYWJpbGl0eSk7CiB9CiAKIHZv
aWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJiBj
YWxsRXhwcmVzc2lvbikKQEAgLTU0OSwxOSArNTc5LDMwIEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0
aW9uV3JpdGVyOjp2aXNpdChBU1QKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFyZ3VtZW50
KTsKICAgICAgICAgYXJndW1lbnROYW1lcy5hcHBlbmQodGFrZUxhc3RWYWx1ZSgpKTsKICAgICB9
Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fZnVuY3Rpb25NYXBwaW5nLmZpbmQoJmNhbGxFeHByZXNz
aW9uLmZ1bmN0aW9uKCkpOwotICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX2Z1bmN0aW9uTWFwcGlu
Zy5lbmQoKSk7Ci0gICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5h
bWUoKTsKLSAgICBpZiAoIW1hdGNoZXMoY2FsbEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCksIG1f
aW50cmluc2ljcy52b2lkVHlwZSgpKSkKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmZsZXhpYmxl
QXBwZW5kKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShjYWxsRXhwcmVzc2lvbi5yZXNv
bHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gIik7Ci0gICAgbV9zdHJpbmdCdWls
ZGVyLmZsZXhpYmxlQXBwZW5kKGl0ZXJhdG9yLT52YWx1ZSwgJygnKTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGFyZ3VtZW50TmFtZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGkp
Ci0gICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIsICIpOwotICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKGFyZ3VtZW50TmFtZXNbaV0pOworCisgICAgYm9vbCBpc1ZvaWQg
PSBtYXRjaGVzKGNhbGxFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpLCBtX2ludHJpbnNpY3Mudm9p
ZFR5cGUoKSk7CisgICAgU3RyaW5nIHJldHVybk5hbWU7CisgICAgaWYgKCFpc1ZvaWQpCisgICAg
ICAgIHJldHVybk5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKworICAgIGlmIChp
czxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+KGNhbGxFeHByZXNzaW9uLmZ1bmN0aW9u
KCkpKSB7CisgICAgICAgIGlubGluZU5hdGl2ZUZ1bmN0aW9uKG1fc3RyaW5nQnVpbGRlciwgZG93
bmNhc3Q8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPihjYWxsRXhwcmVzc2lvbi5mdW5j
dGlvbigpKSwgcmV0dXJuTmFtZSwgYXJndW1lbnROYW1lcywgbV9pbnRyaW5zaWNzLCBtX3R5cGVO
YW1lcik7CisgICAgICAgIC8vbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCh3cml0ZU5hdGl2ZUZ1bmN0
aW9uKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24sIGl0ZXJhdG9yLT52YWx1ZSwgbV9pbnRyaW5z
aWNzLCBtX3R5cGVOYW1lcikpOworICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8gaXRlcmF0b3Ig
PSBtX2Z1bmN0aW9uTWFwcGluZy5maW5kKCZjYWxsRXhwcmVzc2lvbi5mdW5jdGlvbigpKTsKKyAg
ICAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fZnVuY3Rpb25NYXBwaW5nLmVuZCgpKTsKKyAgICAg
ICAgaWYgKCFpc1ZvaWQpCisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBl
bmQobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGNhbGxFeHByZXNzaW9uLnJlc29sdmVk
VHlwZSgpKSwgJyAnLCByZXR1cm5OYW1lLCAiID0gIik7CisgICAgICAgIG1fc3RyaW5nQnVpbGRl
ci5mbGV4aWJsZUFwcGVuZChpdGVyYXRvci0+dmFsdWUsICcoJyk7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYXJndW1lbnROYW1lcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
aWYgKGkpCisgICAgICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCAiKTsKKyAg
ICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoYXJndW1lbnROYW1lc1tpXSk7CisgICAg
ICAgIH0KKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiKTtcbiIpOwogICAgIH0KLSAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIpO1xuIik7Ci0gICAgYXBwZW5kUmlnaHRWYWx1ZShj
YWxsRXhwcmVzc2lvbiwgdmFyaWFibGVOYW1lKTsKKworICAgIGFwcGVuZFJpZ2h0VmFsdWUoY2Fs
bEV4cHJlc3Npb24sIHJldHVybk5hbWUpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldy
aXRlcjo6dmlzaXQoQVNUOjpDb21tYUV4cHJlc3Npb24mIGNvbW1hRXhwcmVzc2lvbikKQEAgLTU3
NywxNiArNjE4LDE5IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QK
IHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhw
cmVzc2lvbiYgZGVyZWZlcmVuY2VFeHByZXNzaW9uKQogewogICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChkZXJlZmVyZW5jZUV4cHJlc3Npb24ucG9pbnRlcigpKTsKLSAgICBhdXRvIHJpZ2h0ID0gdGFr
ZUxhc3RWYWx1ZSgpOwotICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFi
bGVOYW1lKCk7Ci0gICAgYXV0byBwb2ludGVyTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFt
ZSgpOworICAgIGF1dG8gW2lucHV0UG9pbnRlciwgbnVsbGFiaWxpdHldID0gdGFrZUxhc3RWYWx1
ZUFuZE51bGxhYmlsaXR5KCk7CisgICAgYXV0byByZXN1bHRWYWx1ZSA9IGdlbmVyYXRlTmV4dFZh
cmlhYmxlTmFtZSgpOworICAgIGF1dG8gcmVzdWx0UG9pbnRlciA9IGdlbmVyYXRlTmV4dFZhcmlh
YmxlTmFtZSgpOwogICAgIG1fc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAgICAgICAg
bV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbi5wb2lu
dGVyKCkucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHBvaW50ZXJOYW1lLCAiID0gIiwgcmlnaHQsICI7
XG4iLAotICAgICAgICBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZGVyZWZlcmVuY2VF
eHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUsICI7XG4iLAotICAg
ICAgICAiaWYgKCIsIHBvaW50ZXJOYW1lLCAiKSAiLCB2YXJpYWJsZU5hbWUsICIgPSAqIiwgcmln
aHQsICI7XG4iLAotICAgICAgICAiZWxzZSAiLCB2YXJpYWJsZU5hbWUsICIgPSB7IH07XG4iCi0g
ICAgKTsKLSAgICBhcHBlbmRMZWZ0VmFsdWUoZGVyZWZlcmVuY2VFeHByZXNzaW9uLCB2YXJpYWJs
ZU5hbWUsIHBvaW50ZXJOYW1lKTsKKyAgICAgICAgbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JU
eXBlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbi5wb2ludGVyKCkucmVzb2x2ZWRUeXBlKCkpLCAnICcs
IHJlc3VsdFBvaW50ZXIsICIgPSAiLCBpbnB1dFBvaW50ZXIsICI7XG4iLAorICAgICAgICBtX3R5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZGVyZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVk
VHlwZSgpKSwgJyAnLCByZXN1bHRWYWx1ZSwgIjtcbiIpOworICAgIGlmIChudWxsYWJpbGl0eSA9
PSBOdWxsYWJpbGl0eTo6Q2FuQmVOdWxsKSB7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5mbGV4
aWJsZUFwcGVuZCgKKyAgICAgICAgICAgICJpZiAoIiwgcmVzdWx0UG9pbnRlciwgIikgIiwgcmVz
dWx0VmFsdWUsICIgPSAqIiwgaW5wdXRQb2ludGVyLCAiO1xuIiwKKyAgICAgICAgICAgICJlbHNl
ICIsIHJlc3VsdFZhbHVlLCAiID0geyB9O1xuIik7CisgICAgfSBlbHNlCisgICAgICAgIG1fc3Ry
aW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZChyZXN1bHRWYWx1ZSwgIiA9ICoiLCBpbnB1dFBvaW50
ZXIsICI7XG4iKTsKKyAgICBhcHBlbmRMZWZ0VmFsdWUoZGVyZWZlcmVuY2VFeHByZXNzaW9uLCBy
ZXN1bHRWYWx1ZSwgcmVzdWx0UG9pbnRlciwgbnVsbGFiaWxpdHkpOwogfQogCiB2b2lkIEZ1bmN0
aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpMb2dpY2FsRXhwcmVzc2lvbiYgbG9naWNh
bEV4cHJlc3Npb24pCkBAIC02MzUsMTEgKzY3OSwxMSBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlv
bldyaXRlcjo6dmlzaXQoQVNUCiAgICAgICAgICAgICAiZWxzZSAiLCB2YXJpYWJsZU5hbWUsICIg
PSB7IG51bGxwdHIsIDAgfTtcbiIKICAgICAgICAgKTsKICAgICB9IGVsc2UgaWYgKGlzPEFTVDo6
QXJyYXlUeXBlPihtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLnJlc29s
dmVkVHlwZSgpKSkgewotICAgICAgICBhdXRvIGxWYWx1ZSA9IHRha2VMYXN0TGVmdFZhbHVlKCk7
CisgICAgICAgIGF1dG8gbFZhbHVlID0gdGFrZUxhc3RMZWZ0VmFsdWUoKS5maXJzdDsKICAgICAg
ICAgYXV0byYgYXJyYXlUeXBlID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KG1ha2VBcnJheVJl
ZmVyZW5jZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkucmVzb2x2ZWRUeXBlKCkpOwogICAgICAgICBt
X3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlh
YmxlTmFtZSwgIiA9IHsgIiwgbFZhbHVlLCAiLT5kYXRhKCksICIsIGFycmF5VHlwZS5udW1FbGVt
ZW50cygpLCAiIH07XG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBhdXRvIGxWYWx1ZSA9IHRh
a2VMYXN0TGVmdFZhbHVlKCk7CisgICAgICAgIGF1dG8gbFZhbHVlID0gdGFrZUxhc3RMZWZ0VmFs
dWUoKS5maXJzdDsKICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKG1hbmds
ZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSB7ICIsIGxWYWx1ZSwgIiwgMSB9O1xu
Iik7CiAgICAgfQogICAgIGFwcGVuZFJpZ2h0VmFsdWUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVz
c2lvbiwgdmFyaWFibGVOYW1lKTsKQEAgLTY0OCwxMCArNjkyLDEwIEBAIHZvaWQgRnVuY3Rpb25E
ZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVy
Ojp2aXNpdChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYgbWFrZVBvaW50ZXJFeHByZXNzaW9u
KQogewogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlUG9pbnRlckV4cHJlc3Npb24ubGVmdFZh
bHVlKCkpOwotICAgIGF1dG8gcG9pbnRlciA9IHRha2VMYXN0TGVmdFZhbHVlKCk7CisgICAgYXV0
byBbcG9pbnRlciwgbnVsbGFiaWxpdHldID0gdGFrZUxhc3RMZWZ0VmFsdWUoKTsKICAgICBhdXRv
IHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwogICAgIG1fc3RyaW5n
QnVpbGRlci5mbGV4aWJsZUFwcGVuZChtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobWFr
ZVBvaW50ZXJFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUsICIg
PSAiLCBwb2ludGVyLCAiO1xuIik7Ci0gICAgYXBwZW5kUmlnaHRWYWx1ZShtYWtlUG9pbnRlckV4
cHJlc3Npb24sIHZhcmlhYmxlTmFtZSk7CisgICAgYXBwZW5kUmlnaHRWYWx1ZVdpdGhOdWxsYWJp
bGl0eShtYWtlUG9pbnRlckV4cHJlc3Npb24sIHZhcmlhYmxlTmFtZSwgbnVsbGFiaWxpdHkpOwog
fQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpSZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uJikKQEAgLTY5MCw3ICs3MzQsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5p
dGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fdmFyaWFibGVN
YXBwaW5nLmVuZCgpKTsKICAgICBhdXRvIHBvaW50ZXJOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFi
bGVOYW1lKCk7CiAgICAgbV9zdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCJ0aHJlYWQgIiwg
bV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKHZhcmlhYmxlUmVmZXJlbmNlLnJlc29sdmVk
VHlwZSgpKSwgIiogIiwgcG9pbnRlck5hbWUsICIgPSAmIiwgaXRlcmF0b3ItPnZhbHVlLCAiO1xu
Iik7Ci0gICAgYXBwZW5kTGVmdFZhbHVlKHZhcmlhYmxlUmVmZXJlbmNlLCBpdGVyYXRvci0+dmFs
dWUsIHBvaW50ZXJOYW1lKTsKKyAgICBhcHBlbmRMZWZ0VmFsdWUodmFyaWFibGVSZWZlcmVuY2Us
IGl0ZXJhdG9yLT52YWx1ZSwgcG9pbnRlck5hbWUsIE51bGxhYmlsaXR5OjpOb3ROdWxsKTsKIH0K
IAogU3RyaW5nIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6Y29uc3RhbnRFeHByZXNzaW9uU3Ry
aW5nKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uJiBjb25zdGFudEV4cHJlc3Npb24pCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0
aW9uV3JpdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcAkocmV2aXNpb24gMjQ4
MTA1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xO
YXRpdmVGdW5jdGlvbldyaXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDcgQEAg
c3RhdGljIFN0cmluZyBtYXBGdW5jdGlvbk5hbWUoU3RyaW5nJiBmdQogICAgIHJldHVybiBmdW5j
dGlvbk5hbWU7CiB9CiAKKy8qCiBzdGF0aWMgU3RyaW5nIGF0b21pY05hbWUoU3RyaW5nIGlucHV0
KQogewogICAgIGlmIChpbnB1dCA9PSAiQWRkIikKQEAgLTExOSwyNyArMTIwLDI5IEBAIHN0YXRp
YyBjb25zdCBjaGFyKiB2ZWN0b3JTdWZmaXgoaW50IHZlY3QKICAgICAgICAgcmV0dXJuICI0IjsK
ICAgICB9CiB9CisqLwogCi1TdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24sIFN0cmluZyYgb3V0
cHV0RnVuY3Rpb25OYW1lLCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzLCBUeXBlTmFtZXImIHR5cGVO
YW1lcikKK3ZvaWQgaW5saW5lTmF0aXZlRnVuY3Rpb24oU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVp
bGRlciwgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLCBTdHJpbmcgcmV0dXJuTmFtZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFyZ3MsIElu
dHJpbnNpY3MmIGludHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyKQogewotICAgIFN0cmlu
Z0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5pc0Nhc3QoKSkgewogICAgICAgICBhdXRvJiByZXR1cm5UeXBlID0gbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi50eXBlKCk7CiAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZShyZXR1cm5UeXBlKTsKICAgICAgICAgaWYgKCFuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkpIHsKLSAgICAgICAgICAgIHN0
cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoCi0gICAgICAgICAgICAgICAgbWV0YWxSZXR1cm5O
YW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgIigpIHtcbiIKLSAgICAgICAgICAgICAgICAi
ICAgICIsIG1ldGFsUmV0dXJuTmFtZSwgIiB4ID0geyB9O1xuIgotICAgICAgICAgICAgICAgICIg
ICAgcmV0dXJuIHg7XG4iCi0gICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICk7Ci0g
ICAgICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgICAgICAgICAg
c3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZChyZXR1cm5OYW1lLCAiID0geyB9O1xuIik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAvL3N0cmluZ0J1aWxkZXIuZmxleGlibGVB
cHBlbmQoCisgICAgICAgICAgICAvLyAgICBtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVu
Y3Rpb25OYW1lLCAiKCkge1xuIgorICAgICAgICAgICAgLy8gICAgIiAgICAiLCBtZXRhbFJldHVy
bk5hbWUsICIgeCA9IHsgfTtcbiIKKyAgICAgICAgICAgIC8vICAgICIgICAgcmV0dXJuIHg7XG4i
CisgICAgICAgICAgICAvLyAgICAifVxuIgorICAgICAgICAgICAgLy8pOworICAgICAgICAgICAg
Ly9yZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwogICAgICAgICB9CiAKICAgICAgICAg
QVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAx
KTsKICAgICAgICAgYXV0byYgcGFyYW1ldGVyVHlwZSA9ICpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpOwogICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVy
TmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUocGFyYW1ldGVyVHlwZSk7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91
dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIgeCkge1xuIik7Cisg
ICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIntcbiIsIG1ldGFsUGFyYW1ldGVy
TmFtZSwgIiB4ID0gIiwgYXJnc1swXSwgIjtcbiIpOwogCiAgICAgICAgIHsKICAgICAgICAgICAg
IGF1dG8gaXNFbnVtZXJhdGlvbkRlZmluaXRpb24gPSBbXSAoYXV0byYgdHlwZSkgewpAQCAtMTYw
LDI0ICsxNjMsMjMgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdQog
ICAgICAgICB9CiAKICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAgICAg
ICAgICAgICIgICAgcmV0dXJuIHN0YXRpY19jYXN0PCIsIG1ldGFsUmV0dXJuTmFtZSwgIj4oeCk7
XG4iCi0gICAgICAgICAgICAifVxuIgotICAgICAgICApOwotICAgICAgICByZXR1cm4gc3RyaW5n
QnVpbGRlci50b1N0cmluZygpOwotICAgIH0KKyAgICAgICAgICAgIHJldHVybk5hbWUsICIgPSBz
dGF0aWNfY2FzdDwiLCBtZXRhbFJldHVybk5hbWUsICI+KHgpO1xufVxuIik7CiAKLSAgICBpZiAo
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yLnZhbHVlIikgewot
ICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6
ZSgpID09IDEpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
WzBdLT50eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwotICAg
ICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgbWV0YWxSZXR1
cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUs
ICIgeCkge1xuIgotICAgICAgICAgICAgIiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IiwgbWV0YWxS
ZXR1cm5OYW1lLCAiPih4KTtcbiIKLSAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICk7Ci0gICAg
ICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIHJldHVybjsKICAg
ICB9CiAKKyAgICAvL2lmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAib3Bl
cmF0b3IudmFsdWUiKSB7CisgICAgLy8gICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxKTsKKyAgICAvLyAgICBhdXRvIG1ldGFsUGFyYW1l
dGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOworICAgIC8vICAgIGF1dG8gbWV0YWxS
ZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnR5cGUoKSk7CisgICAgLy8gICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVu
ZCgKKyAgICAvLyAgICAgICAgbWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFt
ZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIgeCkge1xuIgorICAgIC8vICAgICAgICAiICAg
IHJldHVybiBzdGF0aWNfY2FzdDwiLCBtZXRhbFJldHVybk5hbWUsICI+KHgpO1xuIgorICAgIC8v
ICAgICAgICAifVxuIgorICAgIC8vICAgICk7CisgICAgLy8gICAgcmV0dXJuIHN0cmluZ0J1aWxk
ZXIudG9TdHJpbmcoKTsKKyAgICAvL30KKwogICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MDc3IEF1dGhvcnMgY2FuIG1ha2UgYSBzdHJ1Y3Qg
ZmllbGQgbmFtZWQgImxlbmd0aCIgdG9vLiBBdXRvZ2VuZXJhdGVkIGdldHRlcnMgZm9yIHRob3Nl
IHNob3VsZG4ndCB0YWtlIHRoaXMgY29kZXBhdGguCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ubmFtZSgpID09ICJvcGVyYXRvci5sZW5ndGgiKSB7CiAgICAgICAgIEFTU0VSVF9V
TlVTRUQoaW50cmluc2ljcywgbWF0Y2hlcyhuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUo
KSwgaW50cmluc2ljcy51aW50VHlwZSgpKSk7CkBAIC0xODgsMjAgKzE5MCwxNCBAQCBTdHJpbmcg
d3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1CiAgICAgICAgIGlmIChpczxBU1Q6OkFy
cmF5VHlwZT4odW5uYW1lZFBhcmFtZXRlclR5cGUpKSB7CiAgICAgICAgICAgICBhdXRvJiBhcnJh
eVBhcmFtZXRlclR5cGUgPSBkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFBhcmFtZXRl
clR5cGUpOwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAgICAg
ICAgICAgICAgICAidWludCAiLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0
ZXJOYW1lLCAiKSB7XG4iCi0gICAgICAgICAgICAgICAgIiAgICByZXR1cm4gIiwgYXJyYXlQYXJh
bWV0ZXJUeXBlLm51bUVsZW1lbnRzKCksICI7XG4iCi0gICAgICAgICAgICAgICAgIn1cbiIKLSAg
ICAgICAgICAgICk7Ci0gICAgICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygp
OworICAgICAgICAgICAgICAgIHJldHVybk5hbWUsICIgPSAiLCBhcnJheVBhcmFtZXRlclR5cGUu
bnVtRWxlbWVudHMoKSwgIjtcbiIpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
ICAgICAgICAgQVNTRVJUKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkUGFyYW1l
dGVyVHlwZSkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAg
ICAgICAgInVpbnQgIiwgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFt
ZSwgIiB2KSB7XG4iCi0gICAgICAgICAgICAiICAgIHJldHVybiB2Lmxlbmd0aDtcbiIKLSAgICAg
ICAgICAgICJ9XG4iCi0gICAgICAgICk7Ci0gICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRv
U3RyaW5nKCk7CisgICAgICAgICAgICByZXR1cm5OYW1lLCAiID0gIiwgYXJnc1swXSwgIi5sZW5n
dGg7XG4iKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJvcGVyYXRvci4iX3N0cikpIHsKQEAgLTIy
MCwzOCArMjE2LDM0IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnUK
IAogICAgICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuZW5kc1dpdGgo
Ij0iKSkgewogICAgICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpLnNpemUoKSA9PSAyKTsKLSAgICAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIx
TmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwotICAgICAgICAgICAgYXV0byBtZXRhbFBh
cmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7Ci0gICAgICAgICAgICBhdXRv
IG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICAgICAgYXV0byBmaWVsZE5hbWUgPSBu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yLiJfc3Ry
Lmxlbmd0aCgpKTsKICAgICAgICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkTmFtZS5zdWJzdHJpbmco
MCwgZmllbGROYW1lLmxlbmd0aCgpIC0gMSk7CiAgICAgICAgICAgICBhdXRvIG1ldGFsRmllbGRO
YW1lID0gbWFuZ2xlZEZpZWxkTmFtZShmaWVsZE5hbWUpOworCiAgICAgICAgICAgICBzdHJpbmdC
dWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgICAgIG1ldGFsUmV0dXJuTmFtZSwg
JyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiB2LCAi
LCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIG4pIHtcbiIKLSAgICAgICAgICAgICAgICAiICAgIHYu
IiwgbWV0YWxGaWVsZE5hbWUsICIgPSBuO1xuIgotICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHY7XG4iCi0gICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICk7Ci0gICAgICAgICAg
ICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgICAgICAgICAgICAgIGFyZ3Nb
MF0sICcuJywgbWV0YWxGaWVsZE5hbWUsICIgPSAiLCBhcmdzWzFdLCAiO1xuIiwKKyAgICAgICAg
ICAgICAgICByZXR1cm5OYW1lLCAiID0gIiwgYXJnc1swXSwgIjtcbiIpOworCisgICAgICAgICAg
ICAvL3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoCisgICAgICAgICAgICAvLyAgICBtZXRh
bFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVy
MU5hbWUsICIgdiwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBuKSB7XG4iCisgICAgICAgICAg
ICAvLyAgICAiICAgIHYuIiwgbWV0YWxGaWVsZE5hbWUsICIgPSBuO1xuIgorICAgICAgICAgICAg
Ly8gICAgIiAgICByZXR1cm4gdjtcbiIKKyAgICAgICAgICAgIC8vICAgICJ9XG4iCisgICAgICAg
ICAgICAvLyk7CisKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIEFT
U0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMSk7
CiAgICAgICAgIGF1dG8gZmllbGROYW1lID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1l
KCkuc3Vic3RyaW5nKCJvcGVyYXRvci4iX3N0ci5sZW5ndGgoKSk7Ci0gICAgICAgIGF1dG8gbWV0
YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7Ci0gICAgICAgIGF1dG8g
bWV0YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7CiAgICAgICAgIGF1dG8gbWV0YWxGaWVsZE5hbWUgPSBt
YW5nbGVkRmllbGROYW1lKGZpZWxkTmFtZSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGli
bGVBcHBlbmQoCi0gICAgICAgICAgICBtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rp
b25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIiB2KSB7XG4iCi0gICAgICAgICAgICAi
ICAgIHJldHVybiB2LiIsIG1ldGFsRmllbGROYW1lLCAiO1xuIgotICAgICAgICAgICAgIn1cbiIK
LSAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAg
ICAgICAgICAgIHJldHVybk5hbWUsICIgPSAiLCBhcmdzWzBdLCAnLicsIG1ldGFsRmllbGROYW1l
LCAiO1xuIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAobmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5uYW1lKCkuc3RhcnRzV2l0aCgib3BlcmF0b3ImLiJfc3RyKSkgewogICAg
ICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgp
ID09IDEpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBd
LT50eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAg
ICBhdXRvIGZpZWxkTmFtZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0
cmluZygib3BlcmF0b3ImLiJfc3RyLmxlbmd0aCgpKTsKIAogICAgICAgICBTdHJpbmcgbWV0YWxG
aWVsZE5hbWU7CkBAIC0yNjYsMTIgKzI1OCwxOCBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlv
bihBU1Q6Ok5hdGl2ZUZ1CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbWV0YWxGaWVsZE5h
bWUgPSBmaWVsZE5hbWU7CiAKKyAgICAgICAgLy8gT09QUzogbm8gbnVsbCBjaGVjayBuZWVkZWQg
aGVyZT8KICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAgICAgICAgICAg
IG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJh
bWV0ZXJOYW1lLCAiIHYpIHtcbiIKLSAgICAgICAgICAgICIgICAgcmV0dXJuICYodi0+IiwgbWV0
YWxGaWVsZE5hbWUsICIpO1xuIgotICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgKTsKLSAgICAg
ICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIHJldHVybk5h
bWUsICIgPSAmKCIsIGFyZ3NbMF0sICItPiIsIG1ldGFsRmllbGROYW1lLCAiKTtcbiIpOworCisg
ICAgICAgIHJldHVybjsKKworICAgICAgICAvL3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQo
CisgICAgICAgIC8vICAgIG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUs
ICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1lLCAiIHYpIHtcbiIKKyAgICAgICAgLy8gICAgIiAgICBy
ZXR1cm4gJih2LT4iLCBtZXRhbEZpZWxkTmFtZSwgIik7XG4iCisgICAgICAgIC8vICAgICJ9XG4i
CisgICAgICAgIC8vKTsKKyAgICAgICAgLy9yZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygp
OwogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAi
b3BlcmF0b3ImW10iKSB7CkBAIC0yODAsMTMgKzI3OCwxOSBAQCBTdHJpbmcgd3JpdGVOYXRpdmVG
dW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1CiAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9
IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
cGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwogICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9
IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50
eXBlKCkpOwogICAgICAgICBBU1NFUlQoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KCpuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKSk7CisKICAgICAg
ICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAgICAgICAgICAgIG1ldGFsUmV0dXJu
TmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwg
IiB2LCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIG4pIHtcbiIKLSAgICAgICAgICAgICIgICAg
aWYgKG4gPCB2Lmxlbmd0aCkgcmV0dXJuICYodi5wb2ludGVyW25dKTtcbiIKLSAgICAgICAgICAg
ICIgICAgcmV0dXJuIG51bGxwdHI7XG4iCi0gICAgICAgICAgICAifVxuIgotICAgICAgICApOwot
ICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgICAgICAgICAgImlm
ICgiLCBhcmdzWzFdLCAiIDwgIiwgYXJnc1swXSwgIi5sZW5ndGgpICIsIHJldHVybk5hbWUsICIg
PSAmIiwgYXJnc1swXSwgIi5wb2ludGVyWyIsIGFyZ3NbMV0sICJdO1xuIgorICAgICAgICAgICAg
ImVsc2UgIiwgcmV0dXJuTmFtZSwgIiA9IG51bGxwdHI7XG4iKTsKKworICAgICAgICByZXR1cm47
CisKKyAgICAgICAgLy8gICAgbWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFt
ZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAiIHYsICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUs
ICIgbikge1xuIgorICAgICAgICAvLyAgICAiICAgIGlmIChuIDwgdi5sZW5ndGgpIHJldHVybiAm
KHYucG9pbnRlcltuXSk7XG4iCisgICAgICAgIC8vICAgICIgICAgcmV0dXJuIG51bGxwdHI7XG4i
CisgICAgICAgIC8vICAgICJ9XG4iCisgICAgICAgIC8vKTsKKyAgICAgICAgLy9yZXR1cm4gc3Ry
aW5nQnVpbGRlci50b1N0cmluZygpOwogICAgIH0KIAogICAgIGF1dG8gbWF0cml4RGltZW5zaW9u
ID0gWyZdICh1bnNpZ25lZCB0eXBlQXJndW1lbnRJbmRleCkgLT4gdW5zaWduZWQgewpAQCAtMzEx
LDIzICszMTUsMzEgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdQog
CiAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mUm93cyA9IG51bWJlck9mTWF0cml4Um93cygpOwog
ICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkNvbHVtbnMgPSBudW1iZXJPZk1hdHJpeENvbHVtbnMo
KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiZG8ge1xuIiwgbWV0YWxS
ZXR1cm5OYW1lLCAiIHJlc3VsdDtcbiIpOwogCiAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGli
bGVBcHBlbmQoCi0gICAgICAgICAgICBtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rp
b25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUsICIgbSwgIiwgbWV0YWxQYXJhbWV0ZXIy
TmFtZSwgIiBpKSB7XG4iCi0gICAgICAgICAgICAiICAgIGlmIChpID49ICIsIG51bWJlck9mUm93
cywgIikgcmV0dXJuICIsIG1ldGFsUmV0dXJuTmFtZSwgIigwKTtcbiIKLSAgICAgICAgICAgICIg
ICAgIiwgbWV0YWxSZXR1cm5OYW1lLCAiIHJlc3VsdDtcbiIKLSAgICAgICAgICAgICIgICAgcmVz
dWx0WzBdID0gbVtpXTtcbiIKLSAgICAgICAgICAgICIgICAgcmVzdWx0WzFdID0gbVtpICsgIiwg
bnVtYmVyT2ZSb3dzLCAiXTtcbiIKLSAgICAgICAgKTsKKyAgICAgICAgICAgICIgICAgaWYgKCIs
IGFyZ3NbMV0sICIgPj0gIiwgbnVtYmVyT2ZSb3dzLCAiKSAiLCByZXR1cm5OYW1lLCAiID0gIiwg
bWV0YWxSZXR1cm5OYW1lLCAiKDApOyBicmVhaztcbiIsCisgICAgICAgICAgICAiICAgIHJlc3Vs
dFswXSA9ICIsIGFyZ3NbMF0sICdbJywgYXJnc1sxXSwgIl07XG4iLAorICAgICAgICAgICAgIiAg
ICByZXN1bHRbMV0gPSAiLCBhcmdzWzBdLCAnWycsIGFyZ3NbMV0sICIgKyAiLCBudW1iZXJPZlJv
d3MsICJdO1xuIik7CisKKyAgICAgICAgLy9zdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAor
ICAgICAgICAvLyAgICBtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAn
KCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUsICIgbSwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBp
KSB7XG4iCisgICAgICAgIC8vICAgICIgICAgaWYgKGkgPj0gIiwgbnVtYmVyT2ZSb3dzLCAiKSBy
ZXR1cm4gIiwgbWV0YWxSZXR1cm5OYW1lLCAiKDApO1xuIgorICAgICAgICAvLyAgICAiICAgICIs
IG1ldGFsUmV0dXJuTmFtZSwgIiByZXN1bHQ7XG4iCisgICAgICAgIC8vICAgICIgICAgcmVzdWx0
WzBdID0gbVtpXTtcbiIKKyAgICAgICAgLy8gICAgIiAgICByZXN1bHRbMV0gPSBtW2kgKyAiLCBu
dW1iZXJPZlJvd3MsICJdO1xuIgorICAgICAgICAvLyk7CisKICAgICAgICAgaWYgKG51bWJlck9m
Q29sdW1ucyA+PSAzKQotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgi
ICAgIHJlc3VsdFsyXSA9IG1baSArICIsIG51bWJlck9mUm93cyAqIDIsICJdO1xuIik7CisgICAg
ICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIgICAgcmVzdWx0WzJdID0gIiwg
YXJnc1swXSwgJ1snLCBhcmdzWzFdLCAiICsgIiwgbnVtYmVyT2ZSb3dzICogMiwgIl07XG4iKTsK
ICAgICAgICAgaWYgKG51bWJlck9mQ29sdW1ucyA+PSA0KQotICAgICAgICAgICAgc3RyaW5nQnVp
bGRlci5mbGV4aWJsZUFwcGVuZCgiICAgIHJlc3VsdFszXSA9IG1baSArICIsIG51bWJlck9mUm93
cyAqIDMsICJdO1xuIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKAotICAgICAgICAg
ICAgIiAgICByZXR1cm4gcmVzdWx0O1xuIgotICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgKTsK
LSAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIHN0
cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiAgICByZXN1bHRbM10gPSAiLCBhcmdzWzBdLCAn
WycsIGFyZ3NbMV0sICIgKyAiLCBudW1iZXJPZlJvd3MgKiAzLCAiXTtcbiIpOworCisgICAgICAg
IHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoCisgICAgICAgICAgICAiICAgICIsIHJldHVy
bk5hbWUsICIgPSByZXN1bHQ7XG4iLAorICAgICAgICAgICAgIn0gd2hpbGUgKDApO1xuIik7CisK
KyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLm5hbWUoKSA9PSAib3BlcmF0b3JbXT0iKSB7CkBAIC0zNDAsNDcgKzM1Miw1MCBAQCBTdHJp
bmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1CiAgICAgICAgIHVuc2lnbmVkIG51
bWJlck9mUm93cyA9IG51bWJlck9mTWF0cml4Um93cygpOwogICAgICAgICB1bnNpZ25lZCBudW1i
ZXJPZkNvbHVtbnMgPSBudW1iZXJPZk1hdHJpeENvbHVtbnMoKTsKIAorICAgICAgICAvL3N0cmlu
Z0J1aWxkZXIuZmxleGlibGVBcHBlbmQoCisgICAgICAgIC8vICAgIG1ldGFsUmV0dXJuTmFtZSwg
JyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiBtLCAi
LCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIGksICIsIG1ldGFsUGFyYW1ldGVyM05hbWUsICIgdikg
e1xuIgorICAgICAgICAvLyAgICAiICAgIGlmIChpID49ICIsIG51bWJlck9mUm93cywgIikgcmV0
dXJuIG07XG4iCisgICAgICAgIC8vICAgICIgICAgbVtpXSA9IHZbMF07XG4iCisgICAgICAgIC8v
ICAgICIgICAgbVtpICsgIiwgbnVtYmVyT2ZSb3dzLCAiXSA9IHZbMV07XG4iCisgICAgICAgIC8v
KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiZG8ge1xuIiwgbWV0YWxS
ZXR1cm5OYW1lLCAiIG0gPSAiLCBhcmdzWzBdLCAiO1xuIiwKKyAgICAgICAgICAgIG1ldGFsUGFy
YW1ldGVyMk5hbWUsICIgaSA9ICIsIGFyZ3NbMV0sICI7XG4iKTsKKwogICAgICAgICBzdHJpbmdC
dWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgbWV0YWxSZXR1cm5OYW1lLCAnICcs
IG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAiIG0sICIsIG1l
dGFsUGFyYW1ldGVyMk5hbWUsICIgaSwgIiwgbWV0YWxQYXJhbWV0ZXIzTmFtZSwgIiB2KSB7XG4i
Ci0gICAgICAgICAgICAiICAgIGlmIChpID49ICIsIG51bWJlck9mUm93cywgIikgcmV0dXJuIG07
XG4iCi0gICAgICAgICAgICAiICAgIG1baV0gPSB2WzBdO1xuIgotICAgICAgICAgICAgIiAgICBt
W2kgKyAiLCBudW1iZXJPZlJvd3MsICJdID0gdlsxXTtcbiIKLSAgICAgICAgKTsKKyAgICAgICAg
ICAgICIgICAgaWYgKGkgPj0gIiwgbnVtYmVyT2ZSb3dzLCAiKSAiLCByZXR1cm5OYW1lLCAiID0g
bTtcbmJyZWFrO1xuIiwKKyAgICAgICAgICAgICIgICAgbVtpXSA9ICIsIGFyZ3NbMl0sICJbMF07
XG4iLAorICAgICAgICAgICAgIiAgICBtW2kgKyAiLCBudW1iZXJPZlJvd3MsICJdID0gIiwgYXJn
c1syXSwgIlsxXTtcbiIpOwogICAgICAgICBpZiAobnVtYmVyT2ZDb2x1bW5zID49IDMpCi0gICAg
ICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIgICAgbVtpICsgIiwgbnVtYmVy
T2ZSb3dzICogMiwgIl0gPSB2WzJdO1xuIik7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZs
ZXhpYmxlQXBwZW5kKCIgICAgbVtpICsgIiwgbnVtYmVyT2ZSb3dzICogMiwgIl0gPSAiLCBhcmdz
WzJdLCAiWzJdO1xuIik7CiAgICAgICAgIGlmIChudW1iZXJPZkNvbHVtbnMgPj0gNCkKLSAgICAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiAgICBtW2kgKyAiLCBudW1iZXJP
ZlJvd3MgKiAzLCAiXSA9IHZbM107XG4iKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
Ci0gICAgICAgICAgICAiICAgIHJldHVybiBtOyIKLSAgICAgICAgICAgICJ9XG4iCi0gICAgICAg
ICk7Ci0gICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgICAg
ICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIgICAgbVtpICsgIiwgbnVtYmVyT2ZSb3dz
ICogMywgIl0gPSAiLCBhcmdzWzJdLCAiWzNdO1xuIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIu
ZmxleGlibGVBcHBlbmQoCisgICAgICAgICAgICAiICAgICIsIHJldHVybk5hbWUsICIgPSBtO1xu
IiwKKyAgICAgICAgICAgICJ9IHdoaWxlKDApO1xuIik7CisgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5pc09wZXJhdG9yKCkpIHsKKyAg
ICAgICAgYXV0byBvcGVyYXRvck5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUo
KS5zdWJzdHJpbmcoIm9wZXJhdG9yIl9zdHIubGVuZ3RoKCkpOwogICAgICAgICBpZiAobmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEpIHsKLSAgICAgICAg
ICAgIGF1dG8gb3BlcmF0b3JOYW1lID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCku
c3Vic3RyaW5nKCJvcGVyYXRvciJfc3RyLmxlbmd0aCgpKTsKICAgICAgICAgICAgIGF1dG8gbWV0
YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7Ci0gICAgICAgICAgICBh
dXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5m
bGV4aWJsZUFwcGVuZCgKLSAgICAgICAgICAgICAgICBtZXRhbFJldHVybk5hbWUsICcgJywgb3V0
cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIiB4KSB7XG4iCi0gICAg
ICAgICAgICAgICAgIiAgICByZXR1cm4gIiwgb3BlcmF0b3JOYW1lLCAieDtcbiIKLSAgICAgICAg
ICAgICAgICAifVxuIgotICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIHJldHVybiBzdHJpbmdC
dWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgIntcbiIsIG1ldGFsUGFyYW1ldGVy
TmFtZSwgIiB4ID0gIiwgYXJnc1swXSwgIjtcbiIsIAorICAgICAgICAgICAgICAgIHJldHVybk5h
bWUsICIgPSAiLCBvcGVyYXRvck5hbWUsICJ4O1xufVxuIik7CisgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5w
YXJhbWV0ZXJzKCkuc2l6ZSgpID09IDIpOwotICAgICAgICBhdXRvIG9wZXJhdG9yTmFtZSA9IG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0cmluZygib3BlcmF0b3IiX3N0ci5s
ZW5ndGgoKSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
WzBdLT50eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFt
ZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKVsxXS0+dHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFt
ZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsK
KyAgICAgICAgLy9hdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5h
bWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlw
ZSgpKTsKKyAgICAgICAgLy9hdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsx
XS0+dHlwZSgpKTsKKyAgICAgICAgLy9zdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAorICAg
ICAgICAvLyAgICBtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcs
IG1ldGFsUGFyYW1ldGVyMU5hbWUsICIgeCwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiB5KSB7
XG4iCisgICAgICAgIC8vICAgICIgICAgcmV0dXJuIHggIiwgb3BlcmF0b3JOYW1lLCAiIHk7XG4i
CisgICAgICAgIC8vICAgICJ9XG4iCisgICAgICAgIC8vKTsKICAgICAgICAgc3RyaW5nQnVpbGRl
ci5mbGV4aWJsZUFwcGVuZCgKLSAgICAgICAgICAgIG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRw
dXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiB4LCAiLCBtZXRhbFBh
cmFtZXRlcjJOYW1lLCAiIHkpIHtcbiIKLSAgICAgICAgICAgICIgICAgcmV0dXJuIHggIiwgb3Bl
cmF0b3JOYW1lLCAiIHk7XG4iCi0gICAgICAgICAgICAifVxuIgotICAgICAgICApOwotICAgICAg
ICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgICAgICAgICAgcmV0dXJuTmFt
ZSwgIiA9ICIsIGFyZ3NbMF0sICcgJywgb3BlcmF0b3JOYW1lLCAnICcsIGFyZ3NbMV0sICI7XG4i
KTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLm5hbWUoKSA9PSAiY29zIgpAQCAtNDA4LDI5ICs0MjMsMzUgQEAgU3RyaW5nIHdyaXRl
TmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdQogICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLm5hbWUoKSA9PSAiYXN1aW50IgogICAgICAgICB8fCBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLm5hbWUoKSA9PSAiYXNmbG9hdCIpIHsKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxKTsKLSAgICAgICAgYXV0
byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKLSAgICAgICAg
YXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICAgICAgLy9hdXRvIG1ldGFsUGFyYW1l
dGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOworICAgICAgICAvL2F1dG8gbWV0YWxS
ZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnR5cGUoKSk7CisgICAgICAgIC8vc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVu
ZCgKKyAgICAgICAgLy8gICAgbWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFt
ZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIgeCkge1xuIgorICAgICAgICAvLyAgICAiICAg
IHJldHVybiAiLCBtYXBGdW5jdGlvbk5hbWUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1l
KCkpLCAiKHgpO1xuIgorICAgICAgICAvLyAgICAifVxuIgorICAgICAgICAvLyk7CisKICAgICAg
ICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAgICAgICAgICAgIG1ldGFsUmV0dXJu
TmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1lLCAi
IHgpIHtcbiIKLSAgICAgICAgICAgICIgICAgcmV0dXJuICIsIG1hcEZ1bmN0aW9uTmFtZShuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSksICIoeCk7XG4iCi0gICAgICAgICAgICAifVxu
IgotICAgICAgICApOwotICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwor
ICAgICAgICAgICAgcmV0dXJuTmFtZSwgIiA9ICIsIG1hcEZ1bmN0aW9uTmFtZShuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLm5hbWUoKSksICcoJywgYXJnc1swXSwgIik7XG4iKTsKKyAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUo
KSA9PSAicG93IiB8fCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiYXRhbjIi
KSB7CiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMo
KS5zaXplKCkgPT0gMik7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1l
dGVycygpWzBdLT50eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBh
cmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlw
ZSgpKTsKKyAgICAgICAgLy9hdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsw
XS0+dHlwZSgpKTsKKyAgICAgICAgLy9hdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFt
ZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKVsxXS0+dHlwZSgpKTsKKyAgICAgICAgLy9hdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkp
OworICAgICAgICAvL3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoCisgICAgICAgIC8vICAg
IG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJh
bWV0ZXIxTmFtZSwgIiB4LCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIHkpIHtcbiIKKyAgICAg
ICAgLy8gICAgIiAgICByZXR1cm4gIiwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCks
ICIoeCwgeSk7XG4iCisgICAgICAgIC8vICAgICJ9XG4iCisgICAgICAgIC8vKTsKICAgICAgICAg
c3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAgICAgICAgICAgIG1ldGFsUmV0dXJuTmFt
ZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiB4
LCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIHkpIHtcbiIKLSAgICAgICAgICAgICIgICAgcmV0
dXJuICIsIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLCAiKHgsIHkpO1xuIgotICAg
ICAgICAgICAgIn1cbiIKLSAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIu
dG9TdHJpbmcoKTsKKyAgICAgICAgICAgIHJldHVybk5hbWUsICIgPSAiLCBuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKSwgIigiLCBhcmdzWzBdLCAiLCAiLCBhcmdzWzFdLCAiKTtcbiIp
OworICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgLyoKICAgICBpZiAobmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIkFsbE1lbW9yeUJhcnJpZXJXaXRoR3JvdXBTeW5jIikg
ewogICAgICAgICBBU1NFUlQoIW5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
LnNpemUoKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoCkBAIC04MTAs
NyArODMxLDkgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdQogICAg
IH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKKyAg
ICAqLworCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgTWV0YWwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01l
dGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVy
LmgJKHJldmlzaW9uIDI0ODEwNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNyArNDUsNyBAQCBuYW1lc3BhY2UgTWV0YWwgewogCiBjbGFzcyBUeXBlTmFtZXI7CiAKLVN0
cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYs
IFN0cmluZyYgb3V0cHV0RnVuY3Rpb25OYW1lLCBJbnRyaW5zaWNzJiwgVHlwZU5hbWVyJik7Cit2
b2lkIGlubGluZU5hdGl2ZUZ1bmN0aW9uKFN0cmluZ0J1aWxkZXImLCBBU1Q6Ok5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24mLCBTdHJpbmcgcmV0dXJuTmFtZSwgY29uc3QgVmVjdG9yPFN0cmluZz4m
IGFyZ3VtZW50TmFtZXMsIEludHJpbnNpY3MmLCBUeXBlTmFtZXImKTsKIAogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29tcHV0ZVBpcGVs
aW5lTWV0YWwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L2NvY29hL0dQVUNvbXB1dGVQaXBlbGluZU1ldGFsLm1tCShyZXZpc2lvbiAyNDgwOTMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29tcHV0
ZVBpcGVsaW5lTWV0YWwubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDggQEAKICNpbXBv
cnQgPE1ldGFsL01ldGFsLmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgog
I2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KKyNpbXBvcnQgPHd0Zi9Nb25v
dG9uaWNUaW1lLmg+CisjaW1wb3J0IDx3dGYvRGF0YUxvZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTg1LDcgKzg3LDkgQEAgc3RhdGljIE9wdGlvbmFsPFdITFNMOjpDb21wdXRlRGlt
ZW5zaW9ucwogICAgICAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKIAogICAgICAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgICAgIGF1dG8gc3RhcnQgPSBNb25vdG9uaWNUaW1l
Ojpub3coKTsKICAgICAgICAgY29tcHV0ZUxpYnJhcnkgPSBhZG9wdE5TKFtkZXZpY2UucGxhdGZv
cm1EZXZpY2UoKSBuZXdMaWJyYXJ5V2l0aFNvdXJjZTp3aGxzbENvbXBpbGVSZXN1bHQtPm1ldGFs
U291cmNlIG9wdGlvbnM6bmlsIGVycm9yOiZlcnJvcl0pOworICAgICAgICBkYXRhTG9nTG4oIm1l
dGFsIGNvbXBpbGUgdG9vazogIiwgKE1vbm90b25pY1RpbWU6Om5vdygpIC0gc3RhcnQpLm1pbGxp
c2Vjb25kcygpLCAiIG1zIik7CiAgICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAj
aWZuZGVmIE5ERUJVRwogICAgICAgICBpZiAoIWNvbXB1dGVMaWJyYXJ5KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375360</attachid>
            <date>2019-08-01 15:58:03 -0700</date>
            <delta_ts>2019-08-02 19:30:17 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>36019</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0ODEyNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDE5LTA4LTAxICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gRG8gc2ltcGxlIG51
bGxwdHIgY2hlY2sgZWxpbWluYXRpb24gdXNpbmcgYmFzaWMgZGF0YSBmbG93IGFuYWx5c2lzIHdo
ZW4gZ2VuZXJhdGluZyBtZXRhbCBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDAzNTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBXaGVuIGRvaW5nIG1ldGFsIGNvZGUgZ2VuZXJhdGlvbiwgd2UgZnJl
cXVlbnRseSBrbm93IHdoZXRoZXIgc29tZXRoaW5nCisgICAgICAgIGlzIG51bGwgb3Igbm90LiBU
aGlzIHBhdGNoIGRvZXMgYSBiYXNpYyBwcm9wYWdhdGlvbiBvZiB0aGlzIGluZm9ybWF0aW9uCisg
ICAgICAgIHRvIGF2b2lkIGVtaXR0aW5nIGV4Y2Vzc2l2ZSBudWxsIGNoZWNrcyBpbiB0aGUgZ2Vu
ZXJhdGVkIE1ldGFsIGNvZGUuCisgICAgICAgIFRoaXMgaXMgYSA2JSBzcGVlZHVwICh3aXRoIGEg
cCB2YWx1ZSBvZiAwLjAwMDEpIGluIE1ldGFsIGNvbXBpbGUgdGltZXMKKyAgICAgICAgb24gY29t
cHV0ZV9ib2lkcy4KKworICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNM
RnVuY3Rpb25Xcml0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXI6OmFwcGVuZFJpZ2h0VmFsdWVXaXRoTnVsbGFiaWxpdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6
OmFwcGVuZFJpZ2h0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXI6OmFwcGVuZExlZnRWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dGFrZUxhc3RWYWx1ZUFu
ZE51bGxhYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25E
ZWZpbml0aW9uV3JpdGVyOjp0YWtlTGFzdExlZnRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQpOgorCiAyMDE5LTA4
LTAxICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFtU
ZXh0IGF1dG9zaXppbmddIFtpUGFkT1NdIEFkZCB0YXJnZXRlZCBoYWNrcyB0byBhZGRyZXNzIHNv
bWUgcmVtYWluaW5nIHRleHQgYXV0b3NpemluZyBpc3N1ZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAkocmV2aXNp
b24gMjQ4MTA1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
cmVwYXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgZHVtcEFTVEFmdGVyUGFyc2luCiBzdGF0aWMgY29uc3RleHByIGJvb2wgZHVtcEFT
VEF0RW5kID0gZmFsc2U7CiBzdGF0aWMgY29uc3RleHByIGJvb2wgYWx3YXlzRHVtcFBhc3NGYWls
dXJlcyA9IGZhbHNlOwogc3RhdGljIGNvbnN0ZXhwciBib29sIGR1bXBQYXNzRmFpbHVyZSA9IGR1
bXBBU1RCZWZvcmVFYWNoUGFzcyB8fCBkdW1wQVNUQWZ0ZXJQYXJzaW5nIHx8IGR1bXBBU1RBdEVu
ZCB8fCBhbHdheXNEdW1wUGFzc0ZhaWx1cmVzOwotc3RhdGljIGNvbnN0ZXhwciBib29sIGR1bXBQ
aGFzZVRpbWVzID0gZmFsc2U7CitzdGF0aWMgY29uc3RleHByIGJvb2wgZHVtcFBoYXNlVGltZXMg
PSB0cnVlOwogCiBzdGF0aWMgY29uc3RleHByIGJvb2wgcGFyc2VGdWxsU3RhbmRhcmRMaWJyYXJ5
ID0gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01l
dGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCShyZXZp
c2lvbiAyNDgxMDUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRh
bC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDIwICsxNTUs
MzcgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gbWFrZVN0cmluZygidmFyaWFibGUiLCBt
X3ZhcmlhYmxlQ291bnQrKyk7CiAgICAgfQogCisgICAgZW51bSBjbGFzcyBOdWxsYWJpbGl0eSA6
IHVpbnQ4X3QgeworICAgICAgICBOb3ROdWxsLAorICAgICAgICBDYW5CZU51bGwKKyAgICB9Owor
CiAgICAgc3RydWN0IFN0YWNrSXRlbSB7CiAgICAgICAgIFN0cmluZyB2YWx1ZTsKICAgICAgICAg
U3RyaW5nIGxlZnRWYWx1ZTsKKyAgICAgICAgTnVsbGFiaWxpdHkgdmFsdWVOdWxsYWJpbGl0eTsK
KyAgICAgICAgTnVsbGFiaWxpdHkgbGVmdFZhbHVlTnVsbGFiaWxpdHk7CiAgICAgfTsKIAotICAg
IHZvaWQgYXBwZW5kUmlnaHRWYWx1ZShBU1Q6OkV4cHJlc3Npb24mLCBTdHJpbmcgdmFsdWUpCisg
ICAgLy8gVGhpcyBpcyB0aGUgaW1wb3J0YW50IGRhdGEgZmxvdyBzdGVwIHdoZXJlIHdlIGNhbiB0
YWtlIHRoZSBudWxsYWJpbGl0eSBvZiBhbiBsdmFsdWUKKyAgICAvLyBhbmQgdHJhbnNmZXIgaXQg
aW50byB0aGUgbnVsbGFiaWxpdHkgb2YgYW4gcnZhbHVlLiBUaGlzIGlzIGNvbnZleWVkIGluIE1h
a2VQb2ludGVyRXhwcmVzc2lvbgorICAgIC8vIGFuZCBEZXJlZmVyZW5jZUV4cHJlc3Npb24uIE1h
a2VQb2ludGVyRXhwcmVzc2lvbiB3aWxsIHRyeSB0byBwcm9kdWNlIHJ2YWx1ZXMgd2hpY2ggYXJl
CisgICAgLy8gbm9uLW51bGwsIGFuZCBEZXJlZmVyZW5jZUV4cHJlc3Npb24gd2lsbCB0YWtlIGEg
bm9uLW51bGwgcnZhbHVlIGFuZCB0cnkgdG8gcHJvZHVjZQorICAgIC8vIGEgbm9uLW51bGwgbHZh
bHVlLgorICAgIHZvaWQgYXBwZW5kUmlnaHRWYWx1ZVdpdGhOdWxsYWJpbGl0eShBU1Q6OkV4cHJl
c3Npb24mLCBTdHJpbmcgdmFsdWUsIE51bGxhYmlsaXR5IG51bGxhYmlsaXR5KQogICAgIHsKLSAg
ICAgICAgbV9zdGFjay5hcHBlbmQoeyBXVEZNb3ZlKHZhbHVlKSwgU3RyaW5nKCkgfSk7CisgICAg
ICAgIG1fc3RhY2suYXBwZW5kKHsgV1RGTW92ZSh2YWx1ZSksIFN0cmluZygpLCBudWxsYWJpbGl0
eSwgTnVsbGFiaWxpdHk6OkNhbkJlTnVsbCB9KTsKICAgICB9CiAKLSAgICB2b2lkIGFwcGVuZExl
ZnRWYWx1ZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFN0cmluZyB2YWx1ZSwgU3RyaW5n
IGxlZnRWYWx1ZSkKKyAgICB2b2lkIGFwcGVuZFJpZ2h0VmFsdWUoQVNUOjpFeHByZXNzaW9uJiBl
eHByZXNzaW9uLCBTdHJpbmcgdmFsdWUpCisgICAgeworICAgICAgICBhcHBlbmRSaWdodFZhbHVl
V2l0aE51bGxhYmlsaXR5KGV4cHJlc3Npb24sIFdURk1vdmUodmFsdWUpLCBOdWxsYWJpbGl0eTo6
Q2FuQmVOdWxsKTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZExlZnRWYWx1ZShBU1Q6OkV4cHJl
c3Npb24mIGV4cHJlc3Npb24sIFN0cmluZyB2YWx1ZSwgU3RyaW5nIGxlZnRWYWx1ZSwgTnVsbGFi
aWxpdHkgbnVsbGFiaWxpdHkpCiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKGV4cHJlc3Np
b24sIGV4cHJlc3Npb24udHlwZUFubm90YXRpb24oKS5sZWZ0QWRkcmVzc1NwYWNlKCkpOwotICAg
ICAgICBtX3N0YWNrLmFwcGVuZCh7IFdURk1vdmUodmFsdWUpLCBXVEZNb3ZlKGxlZnRWYWx1ZSkg
fSk7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHsgV1RGTW92ZSh2YWx1ZSksIFdURk1vdmUobGVm
dFZhbHVlKSwgTnVsbGFiaWxpdHk6OkNhbkJlTnVsbCwgbnVsbGFiaWxpdHkgfSk7CiAgICAgfQog
CiAgICAgU3RyaW5nIHRha2VMYXN0VmFsdWUoKQpAQCAtMTc2LDExICsxOTMsMTggQEAgcHJvdGVj
dGVkOgogICAgICAgICBBU1NFUlQobV9zdGFjay5sYXN0KCkudmFsdWUpOwogICAgICAgICByZXR1
cm4gbV9zdGFjay50YWtlTGFzdCgpLnZhbHVlOwogICAgIH0KKyAgICBzdGQ6OnBhaXI8U3RyaW5n
LCBOdWxsYWJpbGl0eT4gdGFrZUxhc3RWYWx1ZUFuZE51bGxhYmlsaXR5KCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX3N0YWNrLmxhc3QoKS52YWx1ZSk7CisgICAgICAgIGF1dG8gbGFzdCA9IG1f
c3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgcmV0dXJuIHsgbGFzdC52YWx1ZSwgbGFzdC52YWx1
ZU51bGxhYmlsaXR5IH07CisgICAgfQogCi0gICAgU3RyaW5nIHRha2VMYXN0TGVmdFZhbHVlKCkK
KyAgICBzdGQ6OnBhaXI8U3RyaW5nLCBOdWxsYWJpbGl0eT4gdGFrZUxhc3RMZWZ0VmFsdWUoKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKG1fc3RhY2subGFzdCgpLmxlZnRWYWx1ZSk7Ci0gICAgICAg
IHJldHVybiBtX3N0YWNrLnRha2VMYXN0KCkubGVmdFZhbHVlOworICAgICAgICBhdXRvIGxhc3Qg
PSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIHJldHVybiB7IGxhc3QubGVmdFZhbHVlLCBs
YXN0LmxlZnRWYWx1ZU51bGxhYmlsaXR5IH07CiAgICAgfQogCiAgICAgZW51bSBjbGFzcyBCcmVh
a0NvbnRleHQgewpAQCAtMjAzLDExICsyMjcsMTQgQEAgcHJvdGVjdGVkOgogICAgIFN0cmluZyBt
X2JyZWFrT3V0T2ZDdXJyZW50TG9vcEVhcmx5VmFyaWFibGU7CiB9OwogCi12b2lkIEZ1bmN0aW9u
RGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKQordm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6
OnZpc2l0KEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYpCiB7Ci0gICAgYXV0byBpdGVy
YXRvciA9IG1fZnVuY3Rpb25NYXBwaW5nLmZpbmQoJm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24p
OwotICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX2Z1bmN0aW9uTWFwcGluZy5lbmQoKSk7Ci0gICAg
bV9zdHJpbmdCdWlsZGVyLmFwcGVuZCh3cml0ZU5hdGl2ZUZ1bmN0aW9uKG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24sIGl0ZXJhdG9yLT52YWx1ZSwgbV9pbnRyaW5zaWNzLCBtX3R5cGVOYW1lcikp
OworICAgIC8vIFdlIGlubGluZSBuYXRpdmUgZnVuY3Rpb24gY2FsbHMuCisKKyAgICAvLyBPT1BT
OiByZW1vdmUgaXQgZnJvbSBtX2Z1bmN0aW9uTWFwcGluZyB0byBwcmV2ZW50IGJ1Z3MKKyAgICAv
L2F1dG8gaXRlcmF0b3IgPSBtX2Z1bmN0aW9uTWFwcGluZy5maW5kKCZuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uKTsKKyAgICAvL0FTU0VSVChpdGVyYXRvciAhPSBtX2Z1bmN0aW9uTWFwcGluZy5l
bmQoKSk7CisgICAgLy9tX3N0cmluZ0J1aWxkZXIuYXBwZW5kKHdyaXRlTmF0aXZlRnVuY3Rpb24o
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiwgaXRlcmF0b3ItPnZhbHVlLCBtX2ludHJpbnNpY3Ms
IG1fdHlwZU5hbWVyKSk7CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNp
dChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQpAQCAtNDk5LDcg
KzUyNiw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKICAgICAg
ICAgInRocmVhZCAiLCBtYW5nbGVkVHlwZU5hbWUsICIqICIsIHBvaW50ZXJOYW1lLCAiID0gJiIs
IHRha2VMYXN0VmFsdWUoKSwgIi0+IiwgbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JTdHJ1Y3R1
cmVFbGVtZW50KGdsb2JhbFZhcmlhYmxlUmVmZXJlbmNlLnN0cnVjdEZpZWxkKCkpLCAiO1xuIiwK
ICAgICAgICAgbWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhbHVlTmFtZSwgIiA9ICIsICIqIiwgcG9p
bnRlck5hbWUsICI7XG4iCiAgICAgKTsKLSAgICBhcHBlbmRMZWZ0VmFsdWUoZ2xvYmFsVmFyaWFi
bGVSZWZlcmVuY2UsIHZhbHVlTmFtZSwgcG9pbnRlck5hbWUpOworICAgIGFwcGVuZExlZnRWYWx1
ZShnbG9iYWxWYXJpYWJsZVJlZmVyZW5jZSwgdmFsdWVOYW1lLCBwb2ludGVyTmFtZSwgTnVsbGFi
aWxpdHk6Ok5vdE51bGwpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlz
aXQoQVNUOjpJbmRleEV4cHJlc3Npb24mIGluZGV4RXhwcmVzc2lvbikKQEAgLTUzNSwxMSArNTYy
LDE0IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKIHZvaWQgRnVu
Y3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiBh
c3NpZ25tZW50RXhwcmVzc2lvbikKIHsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXNzaWdubWVu
dEV4cHJlc3Npb24ubGVmdCgpKTsKLSAgICBhdXRvIHBvaW50ZXJOYW1lID0gdGFrZUxhc3RMZWZ0
VmFsdWUoKTsKKyAgICBhdXRvIFtwb2ludGVyTmFtZSwgbnVsbGFiaWxpdHldID0gdGFrZUxhc3RM
ZWZ0VmFsdWUoKTsKICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24u
cmlnaHQoKSk7Ci0gICAgYXV0byByaWdodE5hbWUgPSB0YWtlTGFzdFZhbHVlKCk7Ci0gICAgbV9z
dHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCJpZiAoIiwgcG9pbnRlck5hbWUsICIpICoiLCBw
b2ludGVyTmFtZSwgIiA9ICIsIHJpZ2h0TmFtZSwgIjtcbiIpOwotICAgIGFwcGVuZFJpZ2h0VmFs
dWUoYXNzaWdubWVudEV4cHJlc3Npb24sIHJpZ2h0TmFtZSk7CisgICAgYXV0byBbcmlnaHROYW1l
LCByaWdodE51bGxhYmlsaXR5XSA9IHRha2VMYXN0VmFsdWVBbmROdWxsYWJpbGl0eSgpOworICAg
IGlmIChudWxsYWJpbGl0eSA9PSBOdWxsYWJpbGl0eTo6Q2FuQmVOdWxsKQorICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoImlmICgiLCBwb2ludGVyTmFtZSwgIikgKiIsIHBv
aW50ZXJOYW1lLCAiID0gIiwgcmlnaHROYW1lLCAiO1xuIik7CisgICAgZWxzZQorICAgICAgICBt
X3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIioiLCBwb2ludGVyTmFtZSwgIiA9ICIsIHJp
Z2h0TmFtZSwgIjtcbiIpOworICAgIGFwcGVuZFJpZ2h0VmFsdWVXaXRoTnVsbGFiaWxpdHkoYXNz
aWdubWVudEV4cHJlc3Npb24sIHJpZ2h0TmFtZSwgcmlnaHROdWxsYWJpbGl0eSk7CiB9CiAKIHZv
aWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJiBj
YWxsRXhwcmVzc2lvbikKQEAgLTU0OSwxOSArNTc5LDMyIEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0
aW9uV3JpdGVyOjp2aXNpdChBU1QKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFyZ3VtZW50
KTsKICAgICAgICAgYXJndW1lbnROYW1lcy5hcHBlbmQodGFrZUxhc3RWYWx1ZSgpKTsKICAgICB9
Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fZnVuY3Rpb25NYXBwaW5nLmZpbmQoJmNhbGxFeHByZXNz
aW9uLmZ1bmN0aW9uKCkpOwotICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX2Z1bmN0aW9uTWFwcGlu
Zy5lbmQoKSk7Ci0gICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5h
bWUoKTsKLSAgICBpZiAoIW1hdGNoZXMoY2FsbEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCksIG1f
aW50cmluc2ljcy52b2lkVHlwZSgpKSkKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmZsZXhpYmxl
QXBwZW5kKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShjYWxsRXhwcmVzc2lvbi5yZXNv
bHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gIik7Ci0gICAgbV9zdHJpbmdCdWls
ZGVyLmZsZXhpYmxlQXBwZW5kKGl0ZXJhdG9yLT52YWx1ZSwgJygnKTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGFyZ3VtZW50TmFtZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGkp
Ci0gICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIsICIpOwotICAgICAgICBtX3N0
cmluZ0J1aWxkZXIuYXBwZW5kKGFyZ3VtZW50TmFtZXNbaV0pOworCisgICAgYm9vbCBpc1ZvaWQg
PSBtYXRjaGVzKGNhbGxFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpLCBtX2ludHJpbnNpY3Mudm9p
ZFR5cGUoKSk7CisgICAgU3RyaW5nIHJldHVybk5hbWU7CisgICAgaWYgKCFpc1ZvaWQpIHsKKyAg
ICAgICAgcmV0dXJuTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICBt
X3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JU
eXBlKGNhbGxFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCByZXR1cm5OYW1lLCAiO1xu
Iik7CiAgICAgfQotICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIik7XG4iKTsKLSAgICBhcHBl
bmRSaWdodFZhbHVlKGNhbGxFeHByZXNzaW9uLCB2YXJpYWJsZU5hbWUpOworCisgICAgaWYgKGlz
PEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4oY2FsbEV4cHJlc3Npb24uZnVuY3Rpb24o
KSkpIHsKKyAgICAgICAgaW5saW5lTmF0aXZlRnVuY3Rpb24obV9zdHJpbmdCdWlsZGVyLCBkb3du
Y2FzdDxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+KGNhbGxFeHByZXNzaW9uLmZ1bmN0
aW9uKCkpLCByZXR1cm5OYW1lLCBhcmd1bWVudE5hbWVzLCBtX2ludHJpbnNpY3MsIG1fdHlwZU5h
bWVyKTsKKyAgICAgICAgLy9tX3N0cmluZ0J1aWxkZXIuYXBwZW5kKHdyaXRlTmF0aXZlRnVuY3Rp
b24obmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiwgaXRlcmF0b3ItPnZhbHVlLCBtX2ludHJpbnNp
Y3MsIG1fdHlwZU5hbWVyKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byBpdGVyYXRvciA9
IG1fZnVuY3Rpb25NYXBwaW5nLmZpbmQoJmNhbGxFeHByZXNzaW9uLmZ1bmN0aW9uKCkpOworICAg
ICAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV9mdW5jdGlvbk1hcHBpbmcuZW5kKCkpOworICAgICAg
ICBpZiAoIWlzVm9pZCkKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVu
ZChyZXR1cm5OYW1lLCAiID0gIik7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFw
cGVuZChpdGVyYXRvci0+dmFsdWUsICcoJyk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYXJndW1lbnROYW1lcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGkpCisgICAg
ICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCAiKTsKKyAgICAgICAgICAgIG1f
c3RyaW5nQnVpbGRlci5hcHBlbmQoYXJndW1lbnROYW1lc1tpXSk7CisgICAgICAgIH0KKyAgICAg
ICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiKTtcbiIpOworICAgIH0KKworICAgIGFwcGVuZFJp
Z2h0VmFsdWUoY2FsbEV4cHJlc3Npb24sIHJldHVybk5hbWUpOwogfQogCiB2b2lkIEZ1bmN0aW9u
RGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpDb21tYUV4cHJlc3Npb24mIGNvbW1hRXhwcmVz
c2lvbikKQEAgLTU3NywxNiArNjIwLDE5IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVy
Ojp2aXNpdChBU1QKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkRl
cmVmZXJlbmNlRXhwcmVzc2lvbiYgZGVyZWZlcmVuY2VFeHByZXNzaW9uKQogewogICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChkZXJlZmVyZW5jZUV4cHJlc3Npb24ucG9pbnRlcigpKTsKLSAgICBhdXRv
IHJpZ2h0ID0gdGFrZUxhc3RWYWx1ZSgpOwotICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJh
dGVOZXh0VmFyaWFibGVOYW1lKCk7Ci0gICAgYXV0byBwb2ludGVyTmFtZSA9IGdlbmVyYXRlTmV4
dFZhcmlhYmxlTmFtZSgpOworICAgIGF1dG8gW2lucHV0UG9pbnRlciwgbnVsbGFiaWxpdHldID0g
dGFrZUxhc3RWYWx1ZUFuZE51bGxhYmlsaXR5KCk7CisgICAgYXV0byByZXN1bHRWYWx1ZSA9IGdl
bmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgIGF1dG8gcmVzdWx0UG9pbnRlciA9IGdlbmVy
YXRlTmV4dFZhcmlhYmxlTmFtZSgpOwogICAgIG1fc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVu
ZCgKLSAgICAgICAgbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGRlcmVmZXJlbmNlRXhw
cmVzc2lvbi5wb2ludGVyKCkucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHBvaW50ZXJOYW1lLCAiID0g
IiwgcmlnaHQsICI7XG4iLAotICAgICAgICBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUo
ZGVyZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUs
ICI7XG4iLAotICAgICAgICAiaWYgKCIsIHBvaW50ZXJOYW1lLCAiKSAiLCB2YXJpYWJsZU5hbWUs
ICIgPSAqIiwgcmlnaHQsICI7XG4iLAotICAgICAgICAiZWxzZSAiLCB2YXJpYWJsZU5hbWUsICIg
PSB7IH07XG4iCi0gICAgKTsKLSAgICBhcHBlbmRMZWZ0VmFsdWUoZGVyZWZlcmVuY2VFeHByZXNz
aW9uLCB2YXJpYWJsZU5hbWUsIHBvaW50ZXJOYW1lKTsKKyAgICAgICAgbV90eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbi5wb2ludGVyKCkucmVzb2x2ZWRU
eXBlKCkpLCAnICcsIHJlc3VsdFBvaW50ZXIsICIgPSAiLCBpbnB1dFBvaW50ZXIsICI7XG4iLAor
ICAgICAgICBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZGVyZWZlcmVuY2VFeHByZXNz
aW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCByZXN1bHRWYWx1ZSwgIjtcbiIpOworICAgIGlmIChu
dWxsYWJpbGl0eSA9PSBOdWxsYWJpbGl0eTo6Q2FuQmVOdWxsKSB7CisgICAgICAgIG1fc3RyaW5n
QnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKKyAgICAgICAgICAgICJpZiAoIiwgcmVzdWx0UG9pbnRl
ciwgIikgIiwgcmVzdWx0VmFsdWUsICIgPSAqIiwgaW5wdXRQb2ludGVyLCAiO1xuIiwKKyAgICAg
ICAgICAgICJlbHNlICIsIHJlc3VsdFZhbHVlLCAiID0geyB9O1xuIik7CisgICAgfSBlbHNlCisg
ICAgICAgIG1fc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZChyZXN1bHRWYWx1ZSwgIiA9ICoi
LCBpbnB1dFBvaW50ZXIsICI7XG4iKTsKKyAgICBhcHBlbmRMZWZ0VmFsdWUoZGVyZWZlcmVuY2VF
eHByZXNzaW9uLCByZXN1bHRWYWx1ZSwgcmVzdWx0UG9pbnRlciwgbnVsbGFiaWxpdHkpOwogfQog
CiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpMb2dpY2FsRXhwcmVz
c2lvbiYgbG9naWNhbEV4cHJlc3Npb24pCkBAIC02MzUsMTEgKzY4MSwxMSBAQCB2b2lkIEZ1bmN0
aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAgICAgICAgICAiZWxzZSAiLCB2YXJp
YWJsZU5hbWUsICIgPSB7IG51bGxwdHIsIDAgfTtcbiIKICAgICAgICAgKTsKICAgICB9IGVsc2Ug
aWYgKGlzPEFTVDo6QXJyYXlUeXBlPihtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxlZnRW
YWx1ZSgpLnJlc29sdmVkVHlwZSgpKSkgewotICAgICAgICBhdXRvIGxWYWx1ZSA9IHRha2VMYXN0
TGVmdFZhbHVlKCk7CisgICAgICAgIGF1dG8gbFZhbHVlID0gdGFrZUxhc3RMZWZ0VmFsdWUoKS5m
aXJzdDsKICAgICAgICAgYXV0byYgYXJyYXlUeXBlID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+
KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubGVmdFZhbHVlKCkucmVzb2x2ZWRUeXBlKCkp
OwogICAgICAgICBtX3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQobWFuZ2xlZFR5cGVOYW1l
LCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHsgIiwgbFZhbHVlLCAiLT5kYXRhKCksICIsIGFycmF5
VHlwZS5udW1FbGVtZW50cygpLCAiIH07XG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBhdXRv
IGxWYWx1ZSA9IHRha2VMYXN0TGVmdFZhbHVlKCk7CisgICAgICAgIGF1dG8gbFZhbHVlID0gdGFr
ZUxhc3RMZWZ0VmFsdWUoKS5maXJzdDsKICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmZsZXhpYmxl
QXBwZW5kKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSB7ICIsIGxWYWx1
ZSwgIiwgMSB9O1xuIik7CiAgICAgfQogICAgIGFwcGVuZFJpZ2h0VmFsdWUobWFrZUFycmF5UmVm
ZXJlbmNlRXhwcmVzc2lvbiwgdmFyaWFibGVOYW1lKTsKQEAgLTY0OCwxMCArNjk0LDEwIEBAIHZv
aWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKIHZvaWQgRnVuY3Rpb25EZWZp
bml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYgbWFrZVBvaW50
ZXJFeHByZXNzaW9uKQogewogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlUG9pbnRlckV4cHJl
c3Npb24ubGVmdFZhbHVlKCkpOwotICAgIGF1dG8gcG9pbnRlciA9IHRha2VMYXN0TGVmdFZhbHVl
KCk7CisgICAgYXV0byBbcG9pbnRlciwgbnVsbGFiaWxpdHldID0gdGFrZUxhc3RMZWZ0VmFsdWUo
KTsKICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwog
ICAgIG1fc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZChtX3R5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUobWFrZVBvaW50ZXJFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCB2YXJp
YWJsZU5hbWUsICIgPSAiLCBwb2ludGVyLCAiO1xuIik7Ci0gICAgYXBwZW5kUmlnaHRWYWx1ZSht
YWtlUG9pbnRlckV4cHJlc3Npb24sIHZhcmlhYmxlTmFtZSk7CisgICAgYXBwZW5kUmlnaHRWYWx1
ZVdpdGhOdWxsYWJpbGl0eShtYWtlUG9pbnRlckV4cHJlc3Npb24sIHZhcmlhYmxlTmFtZSwgbnVs
bGFiaWxpdHkpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNU
OjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJikKQEAgLTY5MCw3ICs3MzYsNyBAQCB2b2lkIEZ1
bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAgQVNTRVJUKGl0ZXJhdG9yICE9
IG1fdmFyaWFibGVNYXBwaW5nLmVuZCgpKTsKICAgICBhdXRvIHBvaW50ZXJOYW1lID0gZ2VuZXJh
dGVOZXh0VmFyaWFibGVOYW1lKCk7CiAgICAgbV9zdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5k
KCJ0aHJlYWQgIiwgbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKHZhcmlhYmxlUmVmZXJl
bmNlLnJlc29sdmVkVHlwZSgpKSwgIiogIiwgcG9pbnRlck5hbWUsICIgPSAmIiwgaXRlcmF0b3It
PnZhbHVlLCAiO1xuIik7Ci0gICAgYXBwZW5kTGVmdFZhbHVlKHZhcmlhYmxlUmVmZXJlbmNlLCBp
dGVyYXRvci0+dmFsdWUsIHBvaW50ZXJOYW1lKTsKKyAgICBhcHBlbmRMZWZ0VmFsdWUodmFyaWFi
bGVSZWZlcmVuY2UsIGl0ZXJhdG9yLT52YWx1ZSwgcG9pbnRlck5hbWUsIE51bGxhYmlsaXR5OjpO
b3ROdWxsKTsKIH0KIAogU3RyaW5nIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6Y29uc3RhbnRF
eHByZXNzaW9uU3RyaW5nKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uJiBjb25zdGFudEV4cHJlc3Np
b24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExT
TE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcAko
cmV2aXNpb24gMjQ4MTA1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
TWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2
LDYgKzY2LDcgQEAgc3RhdGljIFN0cmluZyBtYXBGdW5jdGlvbk5hbWUoU3RyaW5nJiBmdQogICAg
IHJldHVybiBmdW5jdGlvbk5hbWU7CiB9CiAKKy8qCiBzdGF0aWMgU3RyaW5nIGF0b21pY05hbWUo
U3RyaW5nIGlucHV0KQogewogICAgIGlmIChpbnB1dCA9PSAiQWRkIikKQEAgLTExOSwyNyArMTIw
LDI5IEBAIHN0YXRpYyBjb25zdCBjaGFyKiB2ZWN0b3JTdWZmaXgoaW50IHZlY3QKICAgICAgICAg
cmV0dXJuICI0IjsKICAgICB9CiB9CisqLwogCi1TdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihB
U1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24s
IFN0cmluZyYgb3V0cHV0RnVuY3Rpb25OYW1lLCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzLCBUeXBl
TmFtZXImIHR5cGVOYW1lcikKK3ZvaWQgaW5saW5lTmF0aXZlRnVuY3Rpb24oU3RyaW5nQnVpbGRl
ciYgc3RyaW5nQnVpbGRlciwgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLCBTdHJpbmcgcmV0dXJuTmFtZSwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGFyZ3MsIEludHJpbnNpY3MmIGludHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyKQog
ewotICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBpZiAobmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5pc0Nhc3QoKSkgewogICAgICAgICBhdXRvJiByZXR1cm5UeXBlID0gbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCk7CiAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5O
YW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShyZXR1cm5UeXBlKTsKICAgICAgICAg
aWYgKCFuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkpIHsKLSAg
ICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoCi0gICAgICAgICAgICAgICAg
bWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgIigpIHtcbiIKLSAgICAg
ICAgICAgICAgICAiICAgICIsIG1ldGFsUmV0dXJuTmFtZSwgIiB4ID0geyB9O1xuIgotICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHg7XG4iCi0gICAgICAgICAgICAgICAgIn1cbiIKLSAgICAg
ICAgICAgICk7Ci0gICAgICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwor
ICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZChyZXR1cm5OYW1lLCAiID0g
eyB9O1xuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAvL3N0cmluZ0J1aWxk
ZXIuZmxleGlibGVBcHBlbmQoCisgICAgICAgICAgICAvLyAgICBtZXRhbFJldHVybk5hbWUsICcg
Jywgb3V0cHV0RnVuY3Rpb25OYW1lLCAiKCkge1xuIgorICAgICAgICAgICAgLy8gICAgIiAgICAi
LCBtZXRhbFJldHVybk5hbWUsICIgeCA9IHsgfTtcbiIKKyAgICAgICAgICAgIC8vICAgICIgICAg
cmV0dXJuIHg7XG4iCisgICAgICAgICAgICAvLyAgICAifVxuIgorICAgICAgICAgICAgLy8pOwor
ICAgICAgICAgICAgLy9yZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwogICAgICAgICB9
CiAKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
LnNpemUoKSA9PSAxKTsKICAgICAgICAgYXV0byYgcGFyYW1ldGVyVHlwZSA9ICpuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpOwogICAgICAgICBhdXRvIG1l
dGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUocGFyYW1ldGVy
VHlwZSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQobWV0YWxSZXR1cm5O
YW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIg
eCkge1xuIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIntcbiIsIG1l
dGFsUGFyYW1ldGVyTmFtZSwgIiB4ID0gIiwgYXJnc1swXSwgIjtcbiIpOwogCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGF1dG8gaXNFbnVtZXJhdGlvbkRlZmluaXRpb24gPSBbXSAoYXV0byYgdHlw
ZSkgewpAQCAtMTYwLDI0ICsxNjMsMjMgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNU
OjpOYXRpdmVGdQogICAgICAgICB9CiAKICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFw
cGVuZCgKLSAgICAgICAgICAgICIgICAgcmV0dXJuIHN0YXRpY19jYXN0PCIsIG1ldGFsUmV0dXJu
TmFtZSwgIj4oeCk7XG4iCi0gICAgICAgICAgICAifVxuIgotICAgICAgICApOwotICAgICAgICBy
ZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwotICAgIH0KKyAgICAgICAgICAgIHJldHVy
bk5hbWUsICIgPSBzdGF0aWNfY2FzdDwiLCBtZXRhbFJldHVybk5hbWUsICI+KHgpO1xufVxuIik7
CiAKLSAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9y
LnZhbHVlIikgewotICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKCkuc2l6ZSgpID09IDEpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9
IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
cGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9
IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50
eXBlKCkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAg
ICAgbWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBh
cmFtZXRlck5hbWUsICIgeCkge1xuIgotICAgICAgICAgICAgIiAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8IiwgbWV0YWxSZXR1cm5OYW1lLCAiPih4KTtcbiIKLSAgICAgICAgICAgICJ9XG4iCi0gICAg
ICAgICk7Ci0gICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAg
IHJldHVybjsKICAgICB9CiAKKyAgICAvL2lmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5h
bWUoKSA9PSAib3BlcmF0b3IudmFsdWUiKSB7CisgICAgLy8gICAgQVNTRVJUKG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxKTsKKyAgICAvLyAgICBhdXRv
IG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOworICAgIC8vICAg
IGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7CisgICAgLy8gICAgc3RyaW5nQnVpbGRlci5m
bGV4aWJsZUFwcGVuZCgKKyAgICAvLyAgICAgICAgbWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1
dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIgeCkge1xuIgorICAgIC8v
ICAgICAgICAiICAgIHJldHVybiBzdGF0aWNfY2FzdDwiLCBtZXRhbFJldHVybk5hbWUsICI+KHgp
O1xuIgorICAgIC8vICAgICAgICAifVxuIgorICAgIC8vICAgICk7CisgICAgLy8gICAgcmV0dXJu
IHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAvL30KKwogICAgIC8vIEZJWE1FOiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MDc3IEF1dGhvcnMgY2FuIG1h
a2UgYSBzdHJ1Y3QgZmllbGQgbmFtZWQgImxlbmd0aCIgdG9vLiBBdXRvZ2VuZXJhdGVkIGdldHRl
cnMgZm9yIHRob3NlIHNob3VsZG4ndCB0YWtlIHRoaXMgY29kZXBhdGguCiAgICAgaWYgKG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJvcGVyYXRvci5sZW5ndGgiKSB7CiAgICAg
ICAgIEFTU0VSVF9VTlVTRUQoaW50cmluc2ljcywgbWF0Y2hlcyhuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnR5cGUoKSwgaW50cmluc2ljcy51aW50VHlwZSgpKSk7CkBAIC0xODgsMjAgKzE5MCwx
NCBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1CiAgICAgICAgIGlm
IChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFBhcmFtZXRlclR5cGUpKSB7CiAgICAgICAgICAg
ICBhdXRvJiBhcnJheVBhcmFtZXRlclR5cGUgPSBkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5u
YW1lZFBhcmFtZXRlclR5cGUpOwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFw
cGVuZCgKLSAgICAgICAgICAgICAgICAidWludCAiLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywg
bWV0YWxQYXJhbWV0ZXJOYW1lLCAiKSB7XG4iCi0gICAgICAgICAgICAgICAgIiAgICByZXR1cm4g
IiwgYXJyYXlQYXJhbWV0ZXJUeXBlLm51bUVsZW1lbnRzKCksICI7XG4iCi0gICAgICAgICAgICAg
ICAgIn1cbiIKLSAgICAgICAgICAgICk7Ci0gICAgICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRl
ci50b1N0cmluZygpOworICAgICAgICAgICAgICAgIHJldHVybk5hbWUsICIgPSAiLCBhcnJheVBh
cmFtZXRlclR5cGUubnVtRWxlbWVudHMoKSwgIjtcbiIpOworICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1
bm5hbWVkUGFyYW1ldGVyVHlwZSkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBw
ZW5kKAotICAgICAgICAgICAgInVpbnQgIiwgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFs
UGFyYW1ldGVyTmFtZSwgIiB2KSB7XG4iCi0gICAgICAgICAgICAiICAgIHJldHVybiB2Lmxlbmd0
aDtcbiIKLSAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICk7Ci0gICAgICAgIHJldHVybiBzdHJp
bmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgICAgICByZXR1cm5OYW1lLCAiID0gIiwgYXJn
c1swXSwgIi5sZW5ndGg7XG4iKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJvcGVyYXRvci4iX3N0
cikpIHsKQEAgLTIyMCwzOCArMjE2LDM0IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFT
VDo6TmF0aXZlRnUKIAogICAgICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1l
KCkuZW5kc1dpdGgoIj0iKSkgewogICAgICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsKLSAgICAgICAgICAgIGF1dG8gbWV0
YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwotICAgICAgICAgICAg
YXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgq
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7Ci0gICAg
ICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5
cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICAgICAgYXV0byBm
aWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9w
ZXJhdG9yLiJfc3RyLmxlbmd0aCgpKTsKICAgICAgICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkTmFt
ZS5zdWJzdHJpbmcoMCwgZmllbGROYW1lLmxlbmd0aCgpIC0gMSk7CiAgICAgICAgICAgICBhdXRv
IG1ldGFsRmllbGROYW1lID0gbWFuZ2xlZEZpZWxkTmFtZShmaWVsZE5hbWUpOworCiAgICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgICAgIG1ldGFs
UmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIx
TmFtZSwgIiB2LCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIG4pIHtcbiIKLSAgICAgICAgICAg
ICAgICAiICAgIHYuIiwgbWV0YWxGaWVsZE5hbWUsICIgPSBuO1xuIgotICAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIHY7XG4iCi0gICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICk7
Ci0gICAgICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgICAgICAg
ICAgICAgIHJldHVybk5hbWUsICIgPSAiLCBhcmdzWzBdLCAiO1xuIiwKKyAgICAgICAgICAgICAg
ICByZXR1cm5OYW1lLCAnLicsIG1ldGFsRmllbGROYW1lLCAiID0gIiwgYXJnc1sxXSwgIjtcbiIp
OworCisgICAgICAgICAgICAvL3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoCisgICAgICAg
ICAgICAvLyAgICBtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcs
IG1ldGFsUGFyYW1ldGVyMU5hbWUsICIgdiwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBuKSB7
XG4iCisgICAgICAgICAgICAvLyAgICAiICAgIHYuIiwgbWV0YWxGaWVsZE5hbWUsICIgPSBuO1xu
IgorICAgICAgICAgICAgLy8gICAgIiAgICByZXR1cm4gdjtcbiIKKyAgICAgICAgICAgIC8vICAg
ICJ9XG4iCisgICAgICAgICAgICAvLyk7CisKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMo
KS5zaXplKCkgPT0gMSk7CiAgICAgICAgIGF1dG8gZmllbGROYW1lID0gbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3RyaW5nKCJvcGVyYXRvci4iX3N0ci5sZW5ndGgoKSk7Ci0g
ICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9y
VHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7
Ci0gICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9y
VHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7CiAgICAgICAgIGF1dG8gbWV0
YWxGaWVsZE5hbWUgPSBtYW5nbGVkRmllbGROYW1lKGZpZWxkTmFtZSk7CiAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuZmxleGlibGVBcHBlbmQoCi0gICAgICAgICAgICBtZXRhbFJldHVybk5hbWUsICcg
Jywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIiB2KSB7XG4i
Ci0gICAgICAgICAgICAiICAgIHJldHVybiB2LiIsIG1ldGFsRmllbGROYW1lLCAiO1xuIgotICAg
ICAgICAgICAgIn1cbiIKLSAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIu
dG9TdHJpbmcoKTsKKyAgICAgICAgICAgIHJldHVybk5hbWUsICIgPSAiLCBhcmdzWzBdLCAnLics
IG1ldGFsRmllbGROYW1lLCAiO1xuIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
ZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3RhcnRzV2l0aCgib3BlcmF0b3Im
LiJfc3RyKSkgewogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKCkuc2l6ZSgpID09IDEpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9
IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
cGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9
IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50
eXBlKCkpOwogICAgICAgICBhdXRvIGZpZWxkTmFtZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ubmFtZSgpLnN1YnN0cmluZygib3BlcmF0b3ImLiJfc3RyLmxlbmd0aCgpKTsKIAogICAgICAg
ICBTdHJpbmcgbWV0YWxGaWVsZE5hbWU7CkBAIC0yNjYsMTIgKzI1OCwxOCBAQCBTdHJpbmcgd3Jp
dGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1CiAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgbWV0YWxGaWVsZE5hbWUgPSBmaWVsZE5hbWU7CiAKKyAgICAgICAgLy8gT09QUzogbm8gbnVs
bCBjaGVjayBuZWVkZWQgaGVyZT8KICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVu
ZCgKLSAgICAgICAgICAgIG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUs
ICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1lLCAiIHYpIHtcbiIKLSAgICAgICAgICAgICIgICAgcmV0
dXJuICYodi0+IiwgbWV0YWxGaWVsZE5hbWUsICIpO1xuIgotICAgICAgICAgICAgIn1cbiIKLSAg
ICAgICAgKTsKLSAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAg
ICAgICAgIHJldHVybk5hbWUsICIgPSAmKCIsIGFyZ3NbMF0sICItPiIsIG1ldGFsRmllbGROYW1l
LCAiKTtcbiIpOworCisgICAgICAgIHJldHVybjsKKworICAgICAgICAvL3N0cmluZ0J1aWxkZXIu
ZmxleGlibGVBcHBlbmQoCisgICAgICAgIC8vICAgIG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRw
dXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1lLCAiIHYpIHtcbiIKKyAgICAg
ICAgLy8gICAgIiAgICByZXR1cm4gJih2LT4iLCBtZXRhbEZpZWxkTmFtZSwgIik7XG4iCisgICAg
ICAgIC8vICAgICJ9XG4iCisgICAgICAgIC8vKTsKKyAgICAgICAgLy9yZXR1cm4gc3RyaW5nQnVp
bGRlci50b1N0cmluZygpOwogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLm5hbWUoKSA9PSAib3BlcmF0b3ImW10iKSB7CkBAIC0yODAsMTMgKzI3OCwxOSBAQCBTdHJp
bmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1CiAgICAgICAgIGF1dG8gbWV0YWxQ
YXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwogICAgICAgICBhdXRvIG1l
dGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICBBU1NFUlQoaXM8QVNUOjpBcnJheVJlZmVy
ZW5jZVR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlw
ZSgpKSk7CisKICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAgICAgICAg
ICAgIG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQ
YXJhbWV0ZXIxTmFtZSwgIiB2LCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIG4pIHtcbiIKLSAg
ICAgICAgICAgICIgICAgaWYgKG4gPCB2Lmxlbmd0aCkgcmV0dXJuICYodi5wb2ludGVyW25dKTtc
biIKLSAgICAgICAgICAgICIgICAgcmV0dXJuIG51bGxwdHI7XG4iCi0gICAgICAgICAgICAifVxu
IgotICAgICAgICApOwotICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOwor
ICAgICAgICAgICAgImlmICgiLCBhcmdzWzFdLCAiIDwgIiwgYXJnc1swXSwgIi5sZW5ndGgpICIs
IHJldHVybk5hbWUsICIgPSAmKCIsIGFyZ3NbMF0sICIucG9pbnRlclsiLCBhcmdzWzFdLCAiXSk7
XG4iCisgICAgICAgICAgICAiZWxzZSAiLCByZXR1cm5OYW1lLCAiID0gbnVsbHB0cjtcbiIpOwor
CisgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyAgICBtZXRhbFJldHVybk5hbWUsICcgJywg
b3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUsICIgdiwgIiwgbWV0
YWxQYXJhbWV0ZXIyTmFtZSwgIiBuKSB7XG4iCisgICAgICAgIC8vICAgICIgICAgaWYgKG4gPCB2
Lmxlbmd0aCkgcmV0dXJuICYodi5wb2ludGVyW25dKTtcbiIKKyAgICAgICAgLy8gICAgIiAgICBy
ZXR1cm4gbnVsbHB0cjtcbiIKKyAgICAgICAgLy8gICAgIn1cbiIKKyAgICAgICAgLy8pOworICAg
ICAgICAvL3JldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgfQogCiAgICAgYXV0
byBtYXRyaXhEaW1lbnNpb24gPSBbJl0gKHVuc2lnbmVkIHR5cGVBcmd1bWVudEluZGV4KSAtPiB1
bnNpZ25lZCB7CkBAIC0zMTEsMjMgKzMxNSwzMSBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlv
bihBU1Q6Ok5hdGl2ZUZ1CiAKICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZSb3dzID0gbnVtYmVy
T2ZNYXRyaXhSb3dzKCk7CiAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQ29sdW1ucyA9IG51bWJl
ck9mTWF0cml4Q29sdW1ucygpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5k
KCJkbyB7XG4iLCBtZXRhbFJldHVybk5hbWUsICIgcmVzdWx0O1xuIik7CiAKICAgICAgICAgc3Ry
aW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAgICAgICAgICAgIG1ldGFsUmV0dXJuTmFtZSwg
JyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiBtLCAi
LCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIGkpIHtcbiIKLSAgICAgICAgICAgICIgICAgaWYgKGkg
Pj0gIiwgbnVtYmVyT2ZSb3dzLCAiKSByZXR1cm4gIiwgbWV0YWxSZXR1cm5OYW1lLCAiKDApO1xu
IgotICAgICAgICAgICAgIiAgICAiLCBtZXRhbFJldHVybk5hbWUsICIgcmVzdWx0O1xuIgotICAg
ICAgICAgICAgIiAgICByZXN1bHRbMF0gPSBtW2ldO1xuIgotICAgICAgICAgICAgIiAgICByZXN1
bHRbMV0gPSBtW2kgKyAiLCBudW1iZXJPZlJvd3MsICJdO1xuIgotICAgICAgICApOworICAgICAg
ICAgICAgIiAgICBpZiAoIiwgYXJnc1sxXSwgIiA+PSAiLCBudW1iZXJPZlJvd3MsICIpICIsIHJl
dHVybk5hbWUsICIgPSAiLCBtZXRhbFJldHVybk5hbWUsICIoMCk7IGJyZWFrO1xuIiwKKyAgICAg
ICAgICAgICIgICAgcmVzdWx0WzBdID0gIiwgYXJnc1swXSwgJ1snLCBhcmdzWzFdLCAiXTtcbiIs
CisgICAgICAgICAgICAiICAgIHJlc3VsdFsxXSA9ICIsIGFyZ3NbMF0sICdbJywgYXJnc1sxXSwg
IiArICIsIG51bWJlck9mUm93cywgIl07XG4iKTsKKworICAgICAgICAvL3N0cmluZ0J1aWxkZXIu
ZmxleGlibGVBcHBlbmQoCisgICAgICAgIC8vICAgIG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRw
dXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiBtLCAiLCBtZXRhbFBh
cmFtZXRlcjJOYW1lLCAiIGkpIHtcbiIKKyAgICAgICAgLy8gICAgIiAgICBpZiAoaSA+PSAiLCBu
dW1iZXJPZlJvd3MsICIpIHJldHVybiAiLCBtZXRhbFJldHVybk5hbWUsICIoMCk7XG4iCisgICAg
ICAgIC8vICAgICIgICAgIiwgbWV0YWxSZXR1cm5OYW1lLCAiIHJlc3VsdDtcbiIKKyAgICAgICAg
Ly8gICAgIiAgICByZXN1bHRbMF0gPSBtW2ldO1xuIgorICAgICAgICAvLyAgICAiICAgIHJlc3Vs
dFsxXSA9IG1baSArICIsIG51bWJlck9mUm93cywgIl07XG4iCisgICAgICAgIC8vKTsKKwogICAg
ICAgICBpZiAobnVtYmVyT2ZDb2x1bW5zID49IDMpCi0gICAgICAgICAgICBzdHJpbmdCdWlsZGVy
LmZsZXhpYmxlQXBwZW5kKCIgICAgcmVzdWx0WzJdID0gbVtpICsgIiwgbnVtYmVyT2ZSb3dzICog
MiwgIl07XG4iKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiAg
ICByZXN1bHRbMl0gPSAiLCBhcmdzWzBdLCAnWycsIGFyZ3NbMV0sICIgKyAiLCBudW1iZXJPZlJv
d3MgKiAyLCAiXTtcbiIpOwogICAgICAgICBpZiAobnVtYmVyT2ZDb2x1bW5zID49IDQpCi0gICAg
ICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIgICAgcmVzdWx0WzNdID0gbVtp
ICsgIiwgbnVtYmVyT2ZSb3dzICogMywgIl07XG4iKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoCi0gICAgICAgICAgICAiICAgIHJldHVybiByZXN1bHQ7XG4iCi0gICAgICAgICAgICAi
fVxuIgotICAgICAgICApOwotICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygp
OworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiICAgIHJlc3VsdFsz
XSA9ICIsIGFyZ3NbMF0sICdbJywgYXJnc1sxXSwgIiArICIsIG51bWJlck9mUm93cyAqIDMsICJd
O1xuIik7CisKKyAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKKyAgICAgICAg
ICAgICIgICAgIiwgcmV0dXJuTmFtZSwgIiA9IHJlc3VsdDtcbiIsCisgICAgICAgICAgICAifSB3
aGlsZSAoMCk7XG4iKTsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJvcGVyYXRvcltdPSIpIHsKQEAgLTM0MCw0
NyArMzUyLDUwIEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnUKICAg
ICAgICAgdW5zaWduZWQgbnVtYmVyT2ZSb3dzID0gbnVtYmVyT2ZNYXRyaXhSb3dzKCk7CiAgICAg
ICAgIHVuc2lnbmVkIG51bWJlck9mQ29sdW1ucyA9IG51bWJlck9mTWF0cml4Q29sdW1ucygpOwog
CisgICAgICAgIC8vc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKKyAgICAgICAgLy8gICAg
bWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFt
ZXRlcjFOYW1lLCAiIG0sICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgaSwgIiwgbWV0YWxQYXJh
bWV0ZXIzTmFtZSwgIiB2KSB7XG4iCisgICAgICAgIC8vICAgICIgICAgaWYgKGkgPj0gIiwgbnVt
YmVyT2ZSb3dzLCAiKSByZXR1cm4gbTtcbiIKKyAgICAgICAgLy8gICAgIiAgICBtW2ldID0gdlsw
XTtcbiIKKyAgICAgICAgLy8gICAgIiAgICBtW2kgKyAiLCBudW1iZXJPZlJvd3MsICJdID0gdlsx
XTtcbiIKKyAgICAgICAgLy8pOworICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5k
KCJkbyB7XG4iLCBtZXRhbFJldHVybk5hbWUsICIgbSA9ICIsIGFyZ3NbMF0sICI7XG4iLAorICAg
ICAgICAgICAgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBpID0gIiwgYXJnc1sxXSwgIjtcbiIpOwor
CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoCi0gICAgICAgICAgICBtZXRh
bFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVy
MU5hbWUsICIgbSwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBpLCAiLCBtZXRhbFBhcmFtZXRl
cjNOYW1lLCAiIHYpIHtcbiIKLSAgICAgICAgICAgICIgICAgaWYgKGkgPj0gIiwgbnVtYmVyT2ZS
b3dzLCAiKSByZXR1cm4gbTtcbiIKLSAgICAgICAgICAgICIgICAgbVtpXSA9IHZbMF07XG4iCi0g
ICAgICAgICAgICAiICAgIG1baSArICIsIG51bWJlck9mUm93cywgIl0gPSB2WzFdO1xuIgotICAg
ICAgICApOworICAgICAgICAgICAgIiAgICBpZiAoaSA+PSAiLCBudW1iZXJPZlJvd3MsICIpICIs
IHJldHVybk5hbWUsICIgPSBtO1xuYnJlYWs7XG4iLAorICAgICAgICAgICAgIiAgICBtW2ldID0g
IiwgYXJnc1syXSwgIlswXTtcbiIsCisgICAgICAgICAgICAiICAgIG1baSArICIsIG51bWJlck9m
Um93cywgIl0gPSAiLCBhcmdzWzJdLCAiWzFdO1xuIik7CiAgICAgICAgIGlmIChudW1iZXJPZkNv
bHVtbnMgPj0gMykKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiAg
ICBtW2kgKyAiLCBudW1iZXJPZlJvd3MgKiAyLCAiXSA9IHZbMl07XG4iKTsKKyAgICAgICAgICAg
IHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiAgICBtW2kgKyAiLCBudW1iZXJPZlJvd3Mg
KiAyLCAiXSA9ICIsIGFyZ3NbMl0sICJbMl07XG4iKTsKICAgICAgICAgaWYgKG51bWJlck9mQ29s
dW1ucyA+PSA0KQotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiICAg
IG1baSArICIsIG51bWJlck9mUm93cyAqIDMsICJdID0gdlszXTtcbiIpOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgKLSAgICAgICAgICAgICIgICAgcmV0dXJuIG07IgotICAgICAgICAg
ICAgIn1cbiIKLSAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiAgICBtW2kg
KyAiLCBudW1iZXJPZlJvd3MgKiAzLCAiXSA9ICIsIGFyZ3NbMl0sICJbM107XG4iKTsKKyAgICAg
ICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKKyAgICAgICAgICAgICIgICAgIiwgcmV0
dXJuTmFtZSwgIiA9IG07XG4iLAorICAgICAgICAgICAgIn0gd2hpbGUoMCk7XG4iKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmlz
T3BlcmF0b3IoKSkgeworICAgICAgICBhdXRvIG9wZXJhdG9yTmFtZSA9IG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0cmluZygib3BlcmF0b3IiX3N0ci5sZW5ndGgoKSk7CiAg
ICAgICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkg
PT0gMSkgewotICAgICAgICAgICAgYXV0byBvcGVyYXRvck5hbWUgPSBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yIl9zdHIubGVuZ3RoKCkpOwogICAg
ICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVG
b3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgp
KTsKLSAgICAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7CiAgICAgICAgICAg
ICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgICAgIG1ldGFsUmV0
dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1l
LCAiIHgpIHtcbiIKLSAgICAgICAgICAgICAgICAiICAgIHJldHVybiAiLCBvcGVyYXRvck5hbWUs
ICJ4O1xuIgotICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICApOwotICAgICAgICAg
ICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAie1xu
IiwgbWV0YWxQYXJhbWV0ZXJOYW1lLCAiIHggPSAiLCBhcmdzWzBdLCAiO1xuIiwgCisgICAgICAg
ICAgICAgICAgcmV0dXJuTmFtZSwgIiA9ICIsIG9wZXJhdG9yTmFtZSwgIng7XG59XG4iKTsKKyAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7Ci0gICAgICAgIGF1dG8g
b3BlcmF0b3JOYW1lID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3RyaW5n
KCJvcGVyYXRvciJfc3RyLmxlbmd0aCgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFO
YW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0
ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFsUmV0
dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi50eXBlKCkpOworICAgICAgICAvL2F1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpWzBdLT50eXBlKCkpOworICAgICAgICAvL2F1dG8gbWV0YWxQYXJhbWV0ZXIyTmFt
ZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOworICAgICAgICAvL3N0cmluZ0J1aWxkZXIuZmxl
eGlibGVBcHBlbmQoCisgICAgICAgIC8vICAgIG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRG
dW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiB4LCAiLCBtZXRhbFBhcmFt
ZXRlcjJOYW1lLCAiIHkpIHtcbiIKKyAgICAgICAgLy8gICAgIiAgICByZXR1cm4geCAiLCBvcGVy
YXRvck5hbWUsICIgeTtcbiIKKyAgICAgICAgLy8gICAgIn1cbiIKKyAgICAgICAgLy8pOwogICAg
ICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgbWV0YWxSZXR1
cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1l
LCAiIHgsICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgeSkge1xuIgotICAgICAgICAgICAgIiAg
ICByZXR1cm4geCAiLCBvcGVyYXRvck5hbWUsICIgeTtcbiIKLSAgICAgICAgICAgICJ9XG4iCi0g
ICAgICAgICk7Ci0gICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAg
ICAgICAgICByZXR1cm5OYW1lLCAiID0gIiwgYXJnc1swXSwgJyAnLCBvcGVyYXRvck5hbWUsICcg
JywgYXJnc1sxXSwgIjtcbiIpOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJjb3MiCkBAIC00MDgsMjkgKzQyMywz
NSBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1CiAgICAgICAgIHx8
IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJhc3VpbnQiCiAgICAgICAgIHx8
IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJhc2Zsb2F0IikgewogICAgICAg
ICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09
IDEpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50
eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOworICAgICAgICAv
L2F1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgq
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CisgICAg
ICAgIC8vYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBl
KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICAgICAgLy9zdHJpbmdCdWls
ZGVyLmZsZXhpYmxlQXBwZW5kKAorICAgICAgICAvLyAgICBtZXRhbFJldHVybk5hbWUsICcgJywg
b3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIiB4KSB7XG4iCisg
ICAgICAgIC8vICAgICIgICAgcmV0dXJuICIsIG1hcEZ1bmN0aW9uTmFtZShuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKSksICIoeCk7XG4iCisgICAgICAgIC8vICAgICJ9XG4iCisgICAg
ICAgIC8vKTsKKwogICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAg
ICAgICAgbWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRh
bFBhcmFtZXRlck5hbWUsICIgeCkge1xuIgotICAgICAgICAgICAgIiAgICByZXR1cm4gIiwgbWFw
RnVuY3Rpb25OYW1lKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpKSwgIih4KTtcbiIK
LSAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICk7Ci0gICAgICAgIHJldHVybiBzdHJpbmdCdWls
ZGVyLnRvU3RyaW5nKCk7CisgICAgICAgICAgICByZXR1cm5OYW1lLCAiID0gIiwgbWFwRnVuY3Rp
b25OYW1lKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpKSwgJygnLCBhcmdzWzBdLCAi
KTtcbiIpOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ubmFtZSgpID09ICJwb3ciIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpID09ICJhdGFuMiIpIHsKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFt
ZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQ
YXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwotICAgICAgICBhdXRvIG1l
dGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi50eXBlKCkpOworICAgICAgICAvL2F1dG8gbWV0YWxQYXJhbWV0ZXIxTmFt
ZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOworICAgICAgICAvL2F1dG8gbWV0YWxQYXJhbWV0
ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOworICAgICAgICAvL2F1dG8gbWV0YWxS
ZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnR5cGUoKSk7CisgICAgICAgIC8vc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVu
ZCgKKyAgICAgICAgLy8gICAgbWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFt
ZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAiIHgsICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUs
ICIgeSkge1xuIgorICAgICAgICAvLyAgICAiICAgIHJldHVybiAiLCBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLm5hbWUoKSwgIih4LCB5KTtcbiIKKyAgICAgICAgLy8gICAgIn1cbiIKKyAgICAg
ICAgLy8pOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAg
ICAgbWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBh
cmFtZXRlcjFOYW1lLCAiIHgsICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgeSkge1xuIgotICAg
ICAgICAgICAgIiAgICByZXR1cm4gIiwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCks
ICIoeCwgeSk7XG4iCi0gICAgICAgICAgICAifVxuIgotICAgICAgICApOwotICAgICAgICByZXR1
cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgICAgICAgICAgcmV0dXJuTmFtZSwgIiA9
ICIsIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLCAiKCIsIGFyZ3NbMF0sICIsICIs
IGFyZ3NbMV0sICIpO1xuIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICAvKgogICAg
IGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiQWxsTWVtb3J5QmFycmll
cldpdGhHcm91cFN5bmMiKSB7CiAgICAgICAgIEFTU0VSVCghbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJs
ZUFwcGVuZCgKQEAgLTgxMCw3ICs4MzEsOSBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihB
U1Q6Ok5hdGl2ZUZ1CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIFN0cmluZygpOworICAgICovCisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBNZXRhbApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0
aXZlRnVuY3Rpb25Xcml0ZXIuaAkocmV2aXNpb24gMjQ4MTA1KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIG5hbWVzcGFjZSBNZXRhbCB7CiAKIGNsYXNz
IFR5cGVOYW1lcjsKIAotU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uJiwgU3RyaW5nJiBvdXRwdXRGdW5jdGlvbk5hbWUsIEludHJpbnNpY3Mm
LCBUeXBlTmFtZXImKTsKK3ZvaWQgaW5saW5lTmF0aXZlRnVuY3Rpb24oU3RyaW5nQnVpbGRlciYs
IEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYsIFN0cmluZyByZXR1cm5OYW1lLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgYXJndW1lbnROYW1lcywgSW50cmluc2ljcyYsIFR5cGVOYW1lciYp
OwogCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2Nv
YS9HUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29tcHV0ZVBpcGVsaW5lTWV0YWwubW0J
KHJldmlzaW9uIDI0ODA5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9jb2NvYS9HUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzUs
NiArMzUsOCBAQAogI2ltcG9ydCA8TWV0YWwvTWV0YWwuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja09i
akNFeGNlcHRpb25zLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgor
I2ltcG9ydCA8d3RmL01vbm90b25pY1RpbWUuaD4KKyNpbXBvcnQgPHd0Zi9EYXRhTG9nLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODUsMTIgKzg3LDE0IEBAIHN0YXRpYyBPcHRpb25h
bDxXSExTTDo6Q29tcHV0ZURpbWVuc2lvbnMKICAgICAgICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7
CiAKICAgICAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgICAgICBhdXRvIHN0
YXJ0ID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiAgICAgICAgIGNvbXB1dGVMaWJyYXJ5ID0gYWRv
cHROUyhbZGV2aWNlLnBsYXRmb3JtRGV2aWNlKCkgbmV3TGlicmFyeVdpdGhTb3VyY2U6d2hsc2xD
b21waWxlUmVzdWx0LT5tZXRhbFNvdXJjZSBvcHRpb25zOm5pbCBlcnJvcjomZXJyb3JdKTsKKyAg
ICAgICAgZGF0YUxvZ0xuKCJtZXRhbCBjb21waWxlIHRvb2s6ICIsIChNb25vdG9uaWNUaW1lOjpu
b3coKSAtIHN0YXJ0KS5taWxsaXNlY29uZHMoKSwgIiBtcyIpOwogICAgICAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwotI2lmbmRlZiBOREVCVUcKKy8vI2lmbmRlZiBOREVCVUcKICAgICAg
ICAgaWYgKCFjb21wdXRlTGlicmFyeSkKICAgICAgICAgICAgIE5TTG9nKEAiJUAiLCBlcnJvcik7
Ci0jZW5kaWYKKy8vI2VuZGlmCiAgICAgICAgIEFTU0VSVChjb21wdXRlTGlicmFyeSk7CiAgICAg
ICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1
NzcxIE9uY2Ugd2UgemVyby1maWxsIHZhcmlhYmxlcywgdGhlcmUgc2hvdWxkIGJlIG5vIHdhcm5p
bmdzLCBzbyB3ZSBzaG91bGQgYmUgYWJsZSB0byBBU1NFUlQoIWVycm9yKSBoZXJlLgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375477</attachid>
            <date>2019-08-02 19:30:17 -0700</date>
            <delta_ts>2019-08-05 14:32:47 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>69707</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0ODEyNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDE5LTA4LTAxICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gRG8gc2ltcGxlIG51
bGxwdHIgY2hlY2sgZWxpbWluYXRpb24gdXNpbmcgYmFzaWMgZGF0YSBmbG93IGFuYWx5c2lzIHdo
ZW4gZ2VuZXJhdGluZyBtZXRhbCBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDAzNTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBXaGVuIGRvaW5nIG1ldGFsIGNvZGUgZ2VuZXJhdGlvbiwgd2UgZnJl
cXVlbnRseSBrbm93IHdoZXRoZXIgc29tZXRoaW5nCisgICAgICAgIGlzIG51bGwgb3Igbm90LiBU
aGlzIHBhdGNoIGRvZXMgYSBiYXNpYyBwcm9wYWdhdGlvbiBvZiB0aGlzIGluZm9ybWF0aW9uCisg
ICAgICAgIHRvIGF2b2lkIGVtaXR0aW5nIGV4Y2Vzc2l2ZSBudWxsIGNoZWNrcyBpbiB0aGUgZ2Vu
ZXJhdGVkIE1ldGFsIGNvZGUuCisgICAgICAgIFRoaXMgaXMgYSA2JSBzcGVlZHVwICh3aXRoIGEg
cCB2YWx1ZSBvZiAwLjAwMDEpIGluIE1ldGFsIGNvbXBpbGUgdGltZXMKKyAgICAgICAgb24gY29t
cHV0ZV9ib2lkcy4KKworICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNM
RnVuY3Rpb25Xcml0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXI6OmFwcGVuZFJpZ2h0VmFsdWVXaXRoTnVsbGFiaWxpdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6
OmFwcGVuZFJpZ2h0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5j
dGlvbkRlZmluaXRpb25Xcml0ZXI6OmFwcGVuZExlZnRWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dGFrZUxhc3RWYWx1ZUFu
ZE51bGxhYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25E
ZWZpbml0aW9uV3JpdGVyOjp0YWtlTGFzdExlZnRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQpOgorCiAyMDE5LTA4
LTAxICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFtU
ZXh0IGF1dG9zaXppbmddIFtpUGFkT1NdIEFkZCB0YXJnZXRlZCBoYWNrcyB0byBhZGRyZXNzIHNv
bWUgcmVtYWluaW5nIHRleHQgYXV0b3NpemluZyBpc3N1ZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNM
RnVuY3Rpb25Xcml0ZXIuY3BwCShyZXZpc2lvbiAyNDgxMDUpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTU1LDIwICsxNTUsMzcgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4g
bWFrZVN0cmluZygidmFyaWFibGUiLCBtX3ZhcmlhYmxlQ291bnQrKyk7CiAgICAgfQogCisgICAg
ZW51bSBjbGFzcyBOdWxsYWJpbGl0eSA6IHVpbnQ4X3QgeworICAgICAgICBOb3ROdWxsLAorICAg
ICAgICBDYW5CZU51bGwKKyAgICB9OworCiAgICAgc3RydWN0IFN0YWNrSXRlbSB7CiAgICAgICAg
IFN0cmluZyB2YWx1ZTsKICAgICAgICAgU3RyaW5nIGxlZnRWYWx1ZTsKKyAgICAgICAgTnVsbGFi
aWxpdHkgdmFsdWVOdWxsYWJpbGl0eTsKKyAgICAgICAgTnVsbGFiaWxpdHkgbGVmdFZhbHVlTnVs
bGFiaWxpdHk7CiAgICAgfTsKIAotICAgIHZvaWQgYXBwZW5kUmlnaHRWYWx1ZShBU1Q6OkV4cHJl
c3Npb24mLCBTdHJpbmcgdmFsdWUpCisgICAgLy8gVGhpcyBpcyB0aGUgaW1wb3J0YW50IGRhdGEg
ZmxvdyBzdGVwIHdoZXJlIHdlIGNhbiB0YWtlIHRoZSBudWxsYWJpbGl0eSBvZiBhbiBsdmFsdWUK
KyAgICAvLyBhbmQgdHJhbnNmZXIgaXQgaW50byB0aGUgbnVsbGFiaWxpdHkgb2YgYW4gcnZhbHVl
LiBUaGlzIGlzIGNvbnZleWVkIGluIE1ha2VQb2ludGVyRXhwcmVzc2lvbgorICAgIC8vIGFuZCBE
ZXJlZmVyZW5jZUV4cHJlc3Npb24uIE1ha2VQb2ludGVyRXhwcmVzc2lvbiB3aWxsIHRyeSB0byBw
cm9kdWNlIHJ2YWx1ZXMgd2hpY2ggYXJlCisgICAgLy8gbm9uLW51bGwsIGFuZCBEZXJlZmVyZW5j
ZUV4cHJlc3Npb24gd2lsbCB0YWtlIGEgbm9uLW51bGwgcnZhbHVlIGFuZCB0cnkgdG8gcHJvZHVj
ZQorICAgIC8vIGEgbm9uLW51bGwgbHZhbHVlLgorICAgIHZvaWQgYXBwZW5kUmlnaHRWYWx1ZVdp
dGhOdWxsYWJpbGl0eShBU1Q6OkV4cHJlc3Npb24mLCBTdHJpbmcgdmFsdWUsIE51bGxhYmlsaXR5
IG51bGxhYmlsaXR5KQogICAgIHsKLSAgICAgICAgbV9zdGFjay5hcHBlbmQoeyBXVEZNb3ZlKHZh
bHVlKSwgU3RyaW5nKCkgfSk7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHsgV1RGTW92ZSh2YWx1
ZSksIFN0cmluZygpLCBudWxsYWJpbGl0eSwgTnVsbGFiaWxpdHk6OkNhbkJlTnVsbCB9KTsKICAg
ICB9CiAKLSAgICB2b2lkIGFwcGVuZExlZnRWYWx1ZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Np
b24sIFN0cmluZyB2YWx1ZSwgU3RyaW5nIGxlZnRWYWx1ZSkKKyAgICB2b2lkIGFwcGVuZFJpZ2h0
VmFsdWUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBTdHJpbmcgdmFsdWUpCisgICAgewor
ICAgICAgICBhcHBlbmRSaWdodFZhbHVlV2l0aE51bGxhYmlsaXR5KGV4cHJlc3Npb24sIFdURk1v
dmUodmFsdWUpLCBOdWxsYWJpbGl0eTo6Q2FuQmVOdWxsKTsKKyAgICB9CisKKyAgICB2b2lkIGFw
cGVuZExlZnRWYWx1ZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFN0cmluZyB2YWx1ZSwg
U3RyaW5nIGxlZnRWYWx1ZSwgTnVsbGFiaWxpdHkgbnVsbGFiaWxpdHkpCiAgICAgewogICAgICAg
ICBBU1NFUlRfVU5VU0VEKGV4cHJlc3Npb24sIGV4cHJlc3Npb24udHlwZUFubm90YXRpb24oKS5s
ZWZ0QWRkcmVzc1NwYWNlKCkpOwotICAgICAgICBtX3N0YWNrLmFwcGVuZCh7IFdURk1vdmUodmFs
dWUpLCBXVEZNb3ZlKGxlZnRWYWx1ZSkgfSk7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKHsgV1RG
TW92ZSh2YWx1ZSksIFdURk1vdmUobGVmdFZhbHVlKSwgTnVsbGFiaWxpdHk6OkNhbkJlTnVsbCwg
bnVsbGFiaWxpdHkgfSk7CiAgICAgfQogCiAgICAgU3RyaW5nIHRha2VMYXN0VmFsdWUoKQpAQCAt
MTc2LDExICsxOTMsMTggQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQobV9zdGFjay5sYXN0
KCkudmFsdWUpOwogICAgICAgICByZXR1cm4gbV9zdGFjay50YWtlTGFzdCgpLnZhbHVlOwogICAg
IH0KKyAgICBzdGQ6OnBhaXI8U3RyaW5nLCBOdWxsYWJpbGl0eT4gdGFrZUxhc3RWYWx1ZUFuZE51
bGxhYmlsaXR5KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3N0YWNrLmxhc3QoKS52YWx1ZSk7
CisgICAgICAgIGF1dG8gbGFzdCA9IG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgcmV0dXJu
IHsgbGFzdC52YWx1ZSwgbGFzdC52YWx1ZU51bGxhYmlsaXR5IH07CisgICAgfQogCi0gICAgU3Ry
aW5nIHRha2VMYXN0TGVmdFZhbHVlKCkKKyAgICBzdGQ6OnBhaXI8U3RyaW5nLCBOdWxsYWJpbGl0
eT4gdGFrZUxhc3RMZWZ0VmFsdWUoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fc3RhY2subGFz
dCgpLmxlZnRWYWx1ZSk7Ci0gICAgICAgIHJldHVybiBtX3N0YWNrLnRha2VMYXN0KCkubGVmdFZh
bHVlOworICAgICAgICBhdXRvIGxhc3QgPSBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIHJl
dHVybiB7IGxhc3QubGVmdFZhbHVlLCBsYXN0LmxlZnRWYWx1ZU51bGxhYmlsaXR5IH07CiAgICAg
fQogCiAgICAgZW51bSBjbGFzcyBCcmVha0NvbnRleHQgewpAQCAtMjAzLDExICsyMjcsMTQgQEAg
cHJvdGVjdGVkOgogICAgIFN0cmluZyBtX2JyZWFrT3V0T2ZDdXJyZW50TG9vcEVhcmx5VmFyaWFi
bGU7CiB9OwogCi12b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKQordm9pZCBG
dW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbiYpCiB7Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fZnVuY3Rpb25NYXBwaW5nLmZpbmQoJm5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOwotICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX2Z1bmN0
aW9uTWFwcGluZy5lbmQoKSk7Ci0gICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCh3cml0ZU5hdGl2
ZUZ1bmN0aW9uKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24sIGl0ZXJhdG9yLT52YWx1ZSwgbV9p
bnRyaW5zaWNzLCBtX3R5cGVOYW1lcikpOworICAgIC8vIFdlIGlubGluZSBuYXRpdmUgZnVuY3Rp
b24gY2FsbHMuCisKKyAgICAvLyBPT1BTOiByZW1vdmUgaXQgZnJvbSBtX2Z1bmN0aW9uTWFwcGlu
ZyB0byBwcmV2ZW50IGJ1Z3MKKyAgICAvL2F1dG8gaXRlcmF0b3IgPSBtX2Z1bmN0aW9uTWFwcGlu
Zy5maW5kKCZuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKTsKKyAgICAvL0FTU0VSVChpdGVyYXRv
ciAhPSBtX2Z1bmN0aW9uTWFwcGluZy5lbmQoKSk7CisgICAgLy9tX3N0cmluZ0J1aWxkZXIuYXBw
ZW5kKHdyaXRlTmF0aXZlRnVuY3Rpb24obmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiwgaXRlcmF0
b3ItPnZhbHVlLCBtX2ludHJpbnNpY3MsIG1fdHlwZU5hbWVyKSk7CiB9CiAKIHZvaWQgRnVuY3Rp
b25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rp
b25EZWZpbml0aW9uKQpAQCAtNDk5LDcgKzUyNiw3IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9u
V3JpdGVyOjp2aXNpdChBU1QKICAgICAgICAgInRocmVhZCAiLCBtYW5nbGVkVHlwZU5hbWUsICIq
ICIsIHBvaW50ZXJOYW1lLCAiID0gJiIsIHRha2VMYXN0VmFsdWUoKSwgIi0+IiwgbV90eXBlTmFt
ZXIubWFuZ2xlZE5hbWVGb3JTdHJ1Y3R1cmVFbGVtZW50KGdsb2JhbFZhcmlhYmxlUmVmZXJlbmNl
LnN0cnVjdEZpZWxkKCkpLCAiO1xuIiwKICAgICAgICAgbWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZh
bHVlTmFtZSwgIiA9ICIsICIqIiwgcG9pbnRlck5hbWUsICI7XG4iCiAgICAgKTsKLSAgICBhcHBl
bmRMZWZ0VmFsdWUoZ2xvYmFsVmFyaWFibGVSZWZlcmVuY2UsIHZhbHVlTmFtZSwgcG9pbnRlck5h
bWUpOworICAgIGFwcGVuZExlZnRWYWx1ZShnbG9iYWxWYXJpYWJsZVJlZmVyZW5jZSwgdmFsdWVO
YW1lLCBwb2ludGVyTmFtZSwgTnVsbGFiaWxpdHk6Ok5vdE51bGwpOwogfQogCiB2b2lkIEZ1bmN0
aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpJbmRleEV4cHJlc3Npb24mIGluZGV4RXhw
cmVzc2lvbikKQEAgLTUzNSwxMSArNTYyLDE0IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3Jp
dGVyOjp2aXNpdChBU1QKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6
OkFzc2lnbm1lbnRFeHByZXNzaW9uJiBhc3NpZ25tZW50RXhwcmVzc2lvbikKIHsKICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpKTsKLSAgICBhdXRvIHBv
aW50ZXJOYW1lID0gdGFrZUxhc3RMZWZ0VmFsdWUoKTsKKyAgICBhdXRvIFtwb2ludGVyTmFtZSwg
bnVsbGFiaWxpdHldID0gdGFrZUxhc3RMZWZ0VmFsdWUoKTsKICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoYXNzaWdubWVudEV4cHJlc3Npb24ucmlnaHQoKSk7Ci0gICAgYXV0byByaWdodE5hbWUgPSB0
YWtlTGFzdFZhbHVlKCk7Ci0gICAgbV9zdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCJpZiAo
IiwgcG9pbnRlck5hbWUsICIpICoiLCBwb2ludGVyTmFtZSwgIiA9ICIsIHJpZ2h0TmFtZSwgIjtc
biIpOwotICAgIGFwcGVuZFJpZ2h0VmFsdWUoYXNzaWdubWVudEV4cHJlc3Npb24sIHJpZ2h0TmFt
ZSk7CisgICAgYXV0byBbcmlnaHROYW1lLCByaWdodE51bGxhYmlsaXR5XSA9IHRha2VMYXN0VmFs
dWVBbmROdWxsYWJpbGl0eSgpOworICAgIGlmIChudWxsYWJpbGl0eSA9PSBOdWxsYWJpbGl0eTo6
Q2FuQmVOdWxsKQorICAgICAgICBtX3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoImlmICgi
LCBwb2ludGVyTmFtZSwgIikgKiIsIHBvaW50ZXJOYW1lLCAiID0gIiwgcmlnaHROYW1lLCAiO1xu
Iik7CisgICAgZWxzZQorICAgICAgICBtX3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIioi
LCBwb2ludGVyTmFtZSwgIiA9ICIsIHJpZ2h0TmFtZSwgIjtcbiIpOworICAgIGFwcGVuZFJpZ2h0
VmFsdWVXaXRoTnVsbGFiaWxpdHkoYXNzaWdubWVudEV4cHJlc3Npb24sIHJpZ2h0TmFtZSwgcmln
aHROdWxsYWJpbGl0eSk7CiB9CiAKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNp
dChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbikKQEAgLTU0OSwxOSArNTc5LDMy
IEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKICAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KGFyZ3VtZW50KTsKICAgICAgICAgYXJndW1lbnROYW1lcy5hcHBlbmQo
dGFrZUxhc3RWYWx1ZSgpKTsKICAgICB9Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fZnVuY3Rpb25N
YXBwaW5nLmZpbmQoJmNhbGxFeHByZXNzaW9uLmZ1bmN0aW9uKCkpOwotICAgIEFTU0VSVChpdGVy
YXRvciAhPSBtX2Z1bmN0aW9uTWFwcGluZy5lbmQoKSk7Ci0gICAgYXV0byB2YXJpYWJsZU5hbWUg
PSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKLSAgICBpZiAoIW1hdGNoZXMoY2FsbEV4cHJl
c3Npb24ucmVzb2x2ZWRUeXBlKCksIG1faW50cmluc2ljcy52b2lkVHlwZSgpKSkKLSAgICAgICAg
bV9zdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9y
VHlwZShjYWxsRXhwcmVzc2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAi
ID0gIik7Ci0gICAgbV9zdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKGl0ZXJhdG9yLT52YWx1
ZSwgJygnKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50TmFtZXMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgaWYgKGkpCi0gICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBw
ZW5kKCIsICIpOwotICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKGFyZ3VtZW50TmFtZXNb
aV0pOworCisgICAgYm9vbCBpc1ZvaWQgPSBtYXRjaGVzKGNhbGxFeHByZXNzaW9uLnJlc29sdmVk
VHlwZSgpLCBtX2ludHJpbnNpY3Mudm9pZFR5cGUoKSk7CisgICAgU3RyaW5nIHJldHVybk5hbWU7
CisgICAgaWYgKCFpc1ZvaWQpIHsKKyAgICAgICAgcmV0dXJuTmFtZSA9IGdlbmVyYXRlTmV4dFZh
cmlhYmxlTmFtZSgpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQobV90
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGNhbGxFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgp
KSwgJyAnLCByZXR1cm5OYW1lLCAiO1xuIik7CiAgICAgfQotICAgIG1fc3RyaW5nQnVpbGRlci5h
cHBlbmQoIik7XG4iKTsKLSAgICBhcHBlbmRSaWdodFZhbHVlKGNhbGxFeHByZXNzaW9uLCB2YXJp
YWJsZU5hbWUpOworCisgICAgaWYgKGlzPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4o
Y2FsbEV4cHJlc3Npb24uZnVuY3Rpb24oKSkpIHsKKyAgICAgICAgaW5saW5lTmF0aXZlRnVuY3Rp
b24obV9zdHJpbmdCdWlsZGVyLCBkb3duY2FzdDxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24+KGNhbGxFeHByZXNzaW9uLmZ1bmN0aW9uKCkpLCByZXR1cm5OYW1lLCBhcmd1bWVudE5hbWVz
LCBtX2ludHJpbnNpY3MsIG1fdHlwZU5hbWVyKTsKKyAgICAgICAgLy9tX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKHdyaXRlTmF0aXZlRnVuY3Rpb24obmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiwgaXRl
cmF0b3ItPnZhbHVlLCBtX2ludHJpbnNpY3MsIG1fdHlwZU5hbWVyKSk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fZnVuY3Rpb25NYXBwaW5nLmZpbmQoJmNhbGxFeHBy
ZXNzaW9uLmZ1bmN0aW9uKCkpOworICAgICAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV9mdW5jdGlv
bk1hcHBpbmcuZW5kKCkpOworICAgICAgICBpZiAoIWlzVm9pZCkKKyAgICAgICAgICAgIG1fc3Ry
aW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZChyZXR1cm5OYW1lLCAiID0gIik7CisgICAgICAgIG1f
c3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZChpdGVyYXRvci0+dmFsdWUsICcoJyk7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnROYW1lcy5zaXplKCk7ICsraSkgewor
ICAgICAgICAgICAgaWYgKGkpCisgICAgICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVu
ZCgiLCAiKTsKKyAgICAgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoYXJndW1lbnROYW1l
c1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiKTtcbiIp
OworICAgIH0KKworICAgIGFwcGVuZFJpZ2h0VmFsdWUoY2FsbEV4cHJlc3Npb24sIHJldHVybk5h
bWUpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpDb21t
YUV4cHJlc3Npb24mIGNvbW1hRXhwcmVzc2lvbikKQEAgLTU3NywxNiArNjIwLDE5IEBAIHZvaWQg
RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKIHZvaWQgRnVuY3Rpb25EZWZpbml0
aW9uV3JpdGVyOjp2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYgZGVyZWZlcmVuY2VF
eHByZXNzaW9uKQogewogICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkZXJlZmVyZW5jZUV4cHJlc3Np
b24ucG9pbnRlcigpKTsKLSAgICBhdXRvIHJpZ2h0ID0gdGFrZUxhc3RWYWx1ZSgpOwotICAgIGF1
dG8gdmFyaWFibGVOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7Ci0gICAgYXV0byBw
b2ludGVyTmFtZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgIGF1dG8gW2lucHV0
UG9pbnRlciwgbnVsbGFiaWxpdHldID0gdGFrZUxhc3RWYWx1ZUFuZE51bGxhYmlsaXR5KCk7Cisg
ICAgYXV0byByZXN1bHRWYWx1ZSA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOworICAgIGF1
dG8gcmVzdWx0UG9pbnRlciA9IGdlbmVyYXRlTmV4dFZhcmlhYmxlTmFtZSgpOwogICAgIG1fc3Ry
aW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAgICAgICAgbV90eXBlTmFtZXIubWFuZ2xlZE5h
bWVGb3JUeXBlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbi5wb2ludGVyKCkucmVzb2x2ZWRUeXBlKCkp
LCAnICcsIHBvaW50ZXJOYW1lLCAiID0gIiwgcmlnaHQsICI7XG4iLAotICAgICAgICBtX3R5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZGVyZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlw
ZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUsICI7XG4iLAotICAgICAgICAiaWYgKCIsIHBvaW50ZXJO
YW1lLCAiKSAiLCB2YXJpYWJsZU5hbWUsICIgPSAqIiwgcmlnaHQsICI7XG4iLAotICAgICAgICAi
ZWxzZSAiLCB2YXJpYWJsZU5hbWUsICIgPSB7IH07XG4iCi0gICAgKTsKLSAgICBhcHBlbmRMZWZ0
VmFsdWUoZGVyZWZlcmVuY2VFeHByZXNzaW9uLCB2YXJpYWJsZU5hbWUsIHBvaW50ZXJOYW1lKTsK
KyAgICAgICAgbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGRlcmVmZXJlbmNlRXhwcmVz
c2lvbi5wb2ludGVyKCkucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHJlc3VsdFBvaW50ZXIsICIgPSAi
LCBpbnB1dFBvaW50ZXIsICI7XG4iLAorICAgICAgICBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoZGVyZWZlcmVuY2VFeHByZXNzaW9uLnJlc29sdmVkVHlwZSgpKSwgJyAnLCByZXN1bHRW
YWx1ZSwgIjtcbiIpOworICAgIGlmIChudWxsYWJpbGl0eSA9PSBOdWxsYWJpbGl0eTo6Q2FuQmVO
dWxsKSB7CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKKyAgICAgICAg
ICAgICJpZiAoIiwgcmVzdWx0UG9pbnRlciwgIikgIiwgcmVzdWx0VmFsdWUsICIgPSAqIiwgaW5w
dXRQb2ludGVyLCAiO1xuIiwKKyAgICAgICAgICAgICJlbHNlICIsIHJlc3VsdFZhbHVlLCAiID0g
eyB9O1xuIik7CisgICAgfSBlbHNlCisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFw
cGVuZChyZXN1bHRWYWx1ZSwgIiA9ICoiLCBpbnB1dFBvaW50ZXIsICI7XG4iKTsKKyAgICBhcHBl
bmRMZWZ0VmFsdWUoZGVyZWZlcmVuY2VFeHByZXNzaW9uLCByZXN1bHRWYWx1ZSwgcmVzdWx0UG9p
bnRlciwgbnVsbGFiaWxpdHkpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6
dmlzaXQoQVNUOjpMb2dpY2FsRXhwcmVzc2lvbiYgbG9naWNhbEV4cHJlc3Npb24pCkBAIC02MzUs
MTEgKzY4MSwxMSBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAg
ICAgICAgICAgICAiZWxzZSAiLCB2YXJpYWJsZU5hbWUsICIgPSB7IG51bGxwdHIsIDAgfTtcbiIK
ICAgICAgICAgKTsKICAgICB9IGVsc2UgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPihtYWtlQXJyYXlS
ZWZlcmVuY2VFeHByZXNzaW9uLmxlZnRWYWx1ZSgpLnJlc29sdmVkVHlwZSgpKSkgewotICAgICAg
ICBhdXRvIGxWYWx1ZSA9IHRha2VMYXN0TGVmdFZhbHVlKCk7CisgICAgICAgIGF1dG8gbFZhbHVl
ID0gdGFrZUxhc3RMZWZ0VmFsdWUoKS5maXJzdDsKICAgICAgICAgYXV0byYgYXJyYXlUeXBlID0g
ZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubGVm
dFZhbHVlKCkucmVzb2x2ZWRUeXBlKCkpOwogICAgICAgICBtX3N0cmluZ0J1aWxkZXIuZmxleGli
bGVBcHBlbmQobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9IHsgIiwgbFZh
bHVlLCAiLT5kYXRhKCksICIsIGFycmF5VHlwZS5udW1FbGVtZW50cygpLCAiIH07XG4iKTsKICAg
ICB9IGVsc2UgewotICAgICAgICBhdXRvIGxWYWx1ZSA9IHRha2VMYXN0TGVmdFZhbHVlKCk7Cisg
ICAgICAgIGF1dG8gbFZhbHVlID0gdGFrZUxhc3RMZWZ0VmFsdWUoKS5maXJzdDsKICAgICAgICAg
bV9zdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJp
YWJsZU5hbWUsICIgPSB7ICIsIGxWYWx1ZSwgIiwgMSB9O1xuIik7CiAgICAgfQogICAgIGFwcGVu
ZFJpZ2h0VmFsdWUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgdmFyaWFibGVOYW1lKTsK
QEAgLTY0OCwxMCArNjk0LDEwIEBAIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNp
dChBU1QKIHZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6Ok1ha2VQb2lu
dGVyRXhwcmVzc2lvbiYgbWFrZVBvaW50ZXJFeHByZXNzaW9uKQogewogICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChtYWtlUG9pbnRlckV4cHJlc3Npb24ubGVmdFZhbHVlKCkpOwotICAgIGF1dG8gcG9p
bnRlciA9IHRha2VMYXN0TGVmdFZhbHVlKCk7CisgICAgYXV0byBbcG9pbnRlciwgbnVsbGFiaWxp
dHldID0gdGFrZUxhc3RMZWZ0VmFsdWUoKTsKICAgICBhdXRvIHZhcmlhYmxlTmFtZSA9IGdlbmVy
YXRlTmV4dFZhcmlhYmxlTmFtZSgpOwogICAgIG1fc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVu
ZChtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobWFrZVBvaW50ZXJFeHByZXNzaW9uLnJl
c29sdmVkVHlwZSgpKSwgJyAnLCB2YXJpYWJsZU5hbWUsICIgPSAiLCBwb2ludGVyLCAiO1xuIik7
Ci0gICAgYXBwZW5kUmlnaHRWYWx1ZShtYWtlUG9pbnRlckV4cHJlc3Npb24sIHZhcmlhYmxlTmFt
ZSk7CisgICAgYXBwZW5kUmlnaHRWYWx1ZVdpdGhOdWxsYWJpbGl0eShtYWtlUG9pbnRlckV4cHJl
c3Npb24sIHZhcmlhYmxlTmFtZSwgbnVsbGFiaWxpdHkpOwogfQogCiB2b2lkIEZ1bmN0aW9uRGVm
aW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJikKQEAg
LTY5MCw3ICs3MzYsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNU
CiAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fdmFyaWFibGVNYXBwaW5nLmVuZCgpKTsKICAgICBh
dXRvIHBvaW50ZXJOYW1lID0gZ2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CiAgICAgbV9zdHJp
bmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCJ0aHJlYWQgIiwgbV90eXBlTmFtZXIubWFuZ2xlZE5h
bWVGb3JUeXBlKHZhcmlhYmxlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKSwgIiogIiwgcG9pbnRl
ck5hbWUsICIgPSAmIiwgaXRlcmF0b3ItPnZhbHVlLCAiO1xuIik7Ci0gICAgYXBwZW5kTGVmdFZh
bHVlKHZhcmlhYmxlUmVmZXJlbmNlLCBpdGVyYXRvci0+dmFsdWUsIHBvaW50ZXJOYW1lKTsKKyAg
ICBhcHBlbmRMZWZ0VmFsdWUodmFyaWFibGVSZWZlcmVuY2UsIGl0ZXJhdG9yLT52YWx1ZSwgcG9p
bnRlck5hbWUsIE51bGxhYmlsaXR5OjpOb3ROdWxsKTsKIH0KIAogU3RyaW5nIEZ1bmN0aW9uRGVm
aW5pdGlvbldyaXRlcjo6Y29uc3RhbnRFeHByZXNzaW9uU3RyaW5nKEFTVDo6Q29uc3RhbnRFeHBy
ZXNzaW9uJiBjb25zdGFudEV4cHJlc3Npb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5h
dGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcAkocmV2aXNpb24gMjQ4MTA1KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCwyNiArMTIwLDI3IEBAIHN0YXRpYyBjb25zdCBjaGFy
KiB2ZWN0b3JTdWZmaXgoaW50IHZlY3QKICAgICB9CiB9CiAKLVN0cmluZyB3cml0ZU5hdGl2ZUZ1
bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbiwgU3RyaW5nJiBvdXRwdXRGdW5jdGlvbk5hbWUsIEludHJpbnNpY3MmIGludHJpbnNp
Y3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyKQordm9pZCBpbmxpbmVOYXRpdmVGdW5jdGlvbihTdHJp
bmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyLCBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24m
IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24sIFN0cmluZyByZXR1cm5OYW1lLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgYXJncywgSW50cmluc2ljcyYgaW50cmluc2ljcywgVHlwZU5hbWVyJiB0eXBl
TmFtZXIpCiB7Ci0gICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgIGlmIChuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLmlzQ2FzdCgpKSB7CiAgICAgICAgIGF1dG8mIHJldHVyblR5
cGUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKTsKICAgICAgICAgYXV0byBtZXRh
bFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKHJldHVyblR5cGUpOwog
ICAgICAgICBpZiAoIW5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUo
KSkgewotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAgICAgICAg
ICAgICAgICBtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAiKCkge1xu
IgotICAgICAgICAgICAgICAgICIgICAgIiwgbWV0YWxSZXR1cm5OYW1lLCAiIHggPSB7IH07XG4i
Ci0gICAgICAgICAgICAgICAgIiAgICByZXR1cm4geDtcbiIKLSAgICAgICAgICAgICAgICAifVxu
IgotICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3Ry
aW5nKCk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKHJldHVybk5h
bWUsICIgPSB7IH07XG4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIC8vc3Ry
aW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKKyAgICAgICAgICAgIC8vICAgIG1ldGFsUmV0dXJu
TmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICIoKSB7XG4iCisgICAgICAgICAgICAvLyAg
ICAiICAgICIsIG1ldGFsUmV0dXJuTmFtZSwgIiB4ID0geyB9O1xuIgorICAgICAgICAgICAgLy8g
ICAgIiAgICByZXR1cm4geDtcbiIKKyAgICAgICAgICAgIC8vICAgICJ9XG4iCisgICAgICAgICAg
ICAvLyk7CisgICAgICAgICAgICAvL3JldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiAg
ICAgICAgIH0KIAogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKCkuc2l6ZSgpID09IDEpOwogICAgICAgICBhdXRvJiBwYXJhbWV0ZXJUeXBlID0gKm5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCk7CiAgICAgICAg
IGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShw
YXJhbWV0ZXJUeXBlKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZChtZXRh
bFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVy
TmFtZSwgIiB4KSB7XG4iKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgi
e1xuIiwgbWV0YWxQYXJhbWV0ZXJOYW1lLCAiIHggPSAiLCBhcmdzWzBdLCAiO1xuIik7CiAKICAg
ICAgICAgewogICAgICAgICAgICAgYXV0byBpc0VudW1lcmF0aW9uRGVmaW5pdGlvbiA9IFtdIChh
dXRvJiB0eXBlKSB7CkBAIC0xNjAsMjQgKzE2MSwyMyBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5j
dGlvbihBU1Q6Ok5hdGl2ZUZ1CiAgICAgICAgIH0KIAogICAgICAgICBzdHJpbmdCdWlsZGVyLmZs
ZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgIiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IiwgbWV0
YWxSZXR1cm5OYW1lLCAiPih4KTtcbiIKLSAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICk7Ci0g
ICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgfQorICAgICAgICAg
ICAgcmV0dXJuTmFtZSwgIiA9IHN0YXRpY19jYXN0PCIsIG1ldGFsUmV0dXJuTmFtZSwgIj4oeCk7
XG59XG4iKTsKIAotICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAi
b3BlcmF0b3IudmFsdWUiKSB7Ci0gICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0
ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7Ci0gICAgICAgIGF1dG8gbWV0YWxSZXR1
cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnR5cGUoKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoCi0g
ICAgICAgICAgICBtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcs
IG1ldGFsUGFyYW1ldGVyTmFtZSwgIiB4KSB7XG4iCi0gICAgICAgICAgICAiICAgIHJldHVybiBz
dGF0aWNfY2FzdDwiLCBtZXRhbFJldHVybk5hbWUsICI+KHgpO1xuIgotICAgICAgICAgICAgIn1c
biIKLSAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsK
KyAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIC8vaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ubmFtZSgpID09ICJvcGVyYXRvci52YWx1ZSIpIHsKKyAgICAvLyAgICBBU1NFUlQobmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEpOworICAgIC8v
ICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlw
ZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7Cisg
ICAgLy8gICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JU
eXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICAvLyAgICBzdHJpbmdC
dWlsZGVyLmZsZXhpYmxlQXBwZW5kKAorICAgIC8vICAgICAgICBtZXRhbFJldHVybk5hbWUsICcg
Jywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIiB4KSB7XG4i
CisgICAgLy8gICAgICAgICIgICAgcmV0dXJuIHN0YXRpY19jYXN0PCIsIG1ldGFsUmV0dXJuTmFt
ZSwgIj4oeCk7XG4iCisgICAgLy8gICAgICAgICJ9XG4iCisgICAgLy8gICAgKTsKKyAgICAvLyAg
ICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgIC8vfQorCiAgICAgLy8gRklY
TUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgwNzcgQXV0aG9y
cyBjYW4gbWFrZSBhIHN0cnVjdCBmaWVsZCBuYW1lZCAibGVuZ3RoIiB0b28uIEF1dG9nZW5lcmF0
ZWQgZ2V0dGVycyBmb3IgdGhvc2Ugc2hvdWxkbid0IHRha2UgdGhpcyBjb2RlcGF0aC4KICAgICBp
ZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yLmxlbmd0aCIp
IHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChpbnRyaW5zaWNzLCBtYXRjaGVzKG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24udHlwZSgpLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpKTsKQEAgLTE4OCwy
MCArMTg4LDE0IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnUKICAg
ICAgICAgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkUGFyYW1ldGVyVHlwZSkpIHsKICAg
ICAgICAgICAgIGF1dG8mIGFycmF5UGFyYW1ldGVyVHlwZSA9IGRvd25jYXN0PEFTVDo6QXJyYXlU
eXBlPih1bm5hbWVkUGFyYW1ldGVyVHlwZSk7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZs
ZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgICAgICJ1aW50ICIsIG91dHB1dEZ1bmN0aW9uTmFt
ZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIpIHtcbiIKLSAgICAgICAgICAgICAgICAiICAg
IHJldHVybiAiLCBhcnJheVBhcmFtZXRlclR5cGUubnVtRWxlbWVudHMoKSwgIjtcbiIKLSAgICAg
ICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIHJldHVybiBzdHJp
bmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuTmFtZSwgIiA9ICIs
IGFycmF5UGFyYW1ldGVyVHlwZS5udW1FbGVtZW50cygpLCAiO1xuIik7CisgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQoaXM8QVNUOjpBcnJheVJlZmVyZW5j
ZVR5cGU+KHVubmFtZWRQYXJhbWV0ZXJUeXBlKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxl
eGlibGVBcHBlbmQoCi0gICAgICAgICAgICAidWludCAiLCBvdXRwdXRGdW5jdGlvbk5hbWUsICco
JywgbWV0YWxQYXJhbWV0ZXJOYW1lLCAiIHYpIHtcbiIKLSAgICAgICAgICAgICIgICAgcmV0dXJu
IHYubGVuZ3RoO1xuIgotICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgKTsKLSAgICAgICAgcmV0
dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIHJldHVybk5hbWUsICIg
PSAiLCBhcmdzWzBdLCAiLmxlbmd0aDtcbiIpOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN0YXJ0c1dpdGgoIm9wZXJh
dG9yLiJfc3RyKSkgewpAQCAtMjIwLDM4ICsyMTQsMzQgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVu
Y3Rpb24oQVNUOjpOYXRpdmVGdQogCiAgICAgICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLm5hbWUoKS5lbmRzV2l0aCgiPSIpKSB7CiAgICAgICAgICAgICBBU1NFUlQobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDIpOwotICAgICAgICAgICAg
YXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgq
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7Ci0gICAg
ICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVG
b3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgp
KTsKLSAgICAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7CiAgICAgICAgICAg
ICBhdXRvIGZpZWxkTmFtZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0
cmluZygib3BlcmF0b3IuIl9zdHIubGVuZ3RoKCkpOwogICAgICAgICAgICAgZmllbGROYW1lID0g
ZmllbGROYW1lLnN1YnN0cmluZygwLCBmaWVsZE5hbWUubGVuZ3RoKCkgLSAxKTsKICAgICAgICAg
ICAgIGF1dG8gbWV0YWxGaWVsZE5hbWUgPSBtYW5nbGVkRmllbGROYW1lKGZpZWxkTmFtZSk7CisK
ICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoCi0gICAgICAgICAgICAg
ICAgbWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBh
cmFtZXRlcjFOYW1lLCAiIHYsICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgbikge1xuIgotICAg
ICAgICAgICAgICAgICIgICAgdi4iLCBtZXRhbEZpZWxkTmFtZSwgIiA9IG47XG4iCi0gICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gdjtcbiIKLSAgICAgICAgICAgICAgICAifVxuIgotICAgICAg
ICAgICAgKTsKLSAgICAgICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuTmFtZSwgIiA9ICIsIGFyZ3NbMF0sICI7XG4iLAorICAgICAg
ICAgICAgICAgIHJldHVybk5hbWUsICcuJywgbWV0YWxGaWVsZE5hbWUsICIgPSAiLCBhcmdzWzFd
LCAiO1xuIik7CisKKyAgICAgICAgICAgIC8vc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgK
KyAgICAgICAgICAgIC8vICAgIG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5h
bWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiB2LCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1l
LCAiIG4pIHtcbiIKKyAgICAgICAgICAgIC8vICAgICIgICAgdi4iLCBtZXRhbEZpZWxkTmFtZSwg
IiA9IG47XG4iCisgICAgICAgICAgICAvLyAgICAiICAgIHJldHVybiB2O1xuIgorICAgICAgICAg
ICAgLy8gICAgIn1cbiIKKyAgICAgICAgICAgIC8vKTsKKworICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpLnNpemUoKSA9PSAxKTsKICAgICAgICAgYXV0byBmaWVsZE5hbWUgPSBuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yLiJfc3RyLmxlbmd0
aCgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+
dHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAgICAg
YXV0byBtZXRhbEZpZWxkTmFtZSA9IG1hbmdsZWRGaWVsZE5hbWUoZmllbGROYW1lKTsKICAgICAg
ICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAgICAgICAgICAgIG1ldGFsUmV0dXJu
TmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1lLCAi
IHYpIHtcbiIKLSAgICAgICAgICAgICIgICAgcmV0dXJuIHYuIiwgbWV0YWxGaWVsZE5hbWUsICI7
XG4iCi0gICAgICAgICAgICAifVxuIgotICAgICAgICApOwotICAgICAgICByZXR1cm4gc3RyaW5n
QnVpbGRlci50b1N0cmluZygpOworICAgICAgICAgICAgcmV0dXJuTmFtZSwgIiA9ICIsIGFyZ3Nb
MF0sICcuJywgbWV0YWxGaWVsZE5hbWUsICI7XG4iKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJv
cGVyYXRvciYuIl9zdHIpKSB7CiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0
ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7Ci0gICAgICAgIGF1dG8gbWV0YWxSZXR1
cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnR5cGUoKSk7CiAgICAgICAgIGF1dG8gZmllbGROYW1lID0gbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3RyaW5nKCJvcGVyYXRvciYuIl9zdHIubGVuZ3RoKCkpOwog
CiAgICAgICAgIFN0cmluZyBtZXRhbEZpZWxkTmFtZTsKQEAgLTI2NiwxMiArMjU2LDE4IEBAIFN0
cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnUKICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICBtZXRhbEZpZWxkTmFtZSA9IGZpZWxkTmFtZTsKIAorICAgICAgICAvLyBPT1BT
OiBubyBudWxsIGNoZWNrIG5lZWRlZCBoZXJlPwogICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhp
YmxlQXBwZW5kKAotICAgICAgICAgICAgbWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0
aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIgdikge1xuIgotICAgICAgICAgICAg
IiAgICByZXR1cm4gJih2LT4iLCBtZXRhbEZpZWxkTmFtZSwgIik7XG4iCi0gICAgICAgICAgICAi
fVxuIgotICAgICAgICApOwotICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygp
OworICAgICAgICAgICAgcmV0dXJuTmFtZSwgIiA9ICYoIiwgYXJnc1swXSwgIi0+IiwgbWV0YWxG
aWVsZE5hbWUsICIpO1xuIik7CisKKyAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vc3RyaW5n
QnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKKyAgICAgICAgLy8gICAgbWV0YWxSZXR1cm5OYW1lLCAn
ICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIgdikge1xu
IgorICAgICAgICAvLyAgICAiICAgIHJldHVybiAmKHYtPiIsIG1ldGFsRmllbGROYW1lLCAiKTtc
biIKKyAgICAgICAgLy8gICAgIn1cbiIKKyAgICAgICAgLy8pOworICAgICAgICAvL3JldHVybiBz
dHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgfQogCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ubmFtZSgpID09ICJvcGVyYXRvciZbXSIpIHsKQEAgLTI4MCwxMyArMjc2LDE5
IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnUKICAgICAgICAgYXV0
byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7CiAgICAgICAg
IGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7CiAgICAgICAgIEFTU0VSVChpczxBU1Q6OkFy
cmF5UmVmZXJlbmNlVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
WzBdLT50eXBlKCkpKTsKKwogICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAot
ICAgICAgICAgICAgbWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygn
LCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAiIHYsICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgbikg
e1xuIgotICAgICAgICAgICAgIiAgICBpZiAobiA8IHYubGVuZ3RoKSByZXR1cm4gJih2LnBvaW50
ZXJbbl0pO1xuIgotICAgICAgICAgICAgIiAgICByZXR1cm4gbnVsbHB0cjtcbiIKLSAgICAgICAg
ICAgICJ9XG4iCi0gICAgICAgICk7Ci0gICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3Ry
aW5nKCk7CisgICAgICAgICAgICAiaWYgKCIsIGFyZ3NbMV0sICIgPCAiLCBhcmdzWzBdLCAiLmxl
bmd0aCkgIiwgcmV0dXJuTmFtZSwgIiA9ICYoIiwgYXJnc1swXSwgIi5wb2ludGVyWyIsIGFyZ3Nb
MV0sICJdKTtcbiIKKyAgICAgICAgICAgICJlbHNlICIsIHJldHVybk5hbWUsICIgPSBudWxscHRy
O1xuIik7CisKKyAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vICAgIG1ldGFsUmV0dXJuTmFt
ZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiB2
LCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIG4pIHtcbiIKKyAgICAgICAgLy8gICAgIiAgICBp
ZiAobiA8IHYubGVuZ3RoKSByZXR1cm4gJih2LnBvaW50ZXJbbl0pO1xuIgorICAgICAgICAvLyAg
ICAiICAgIHJldHVybiBudWxscHRyO1xuIgorICAgICAgICAvLyAgICAifVxuIgorICAgICAgICAv
Lyk7CisgICAgICAgIC8vcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKICAgICB9CiAK
ICAgICBhdXRvIG1hdHJpeERpbWVuc2lvbiA9IFsmXSAodW5zaWduZWQgdHlwZUFyZ3VtZW50SW5k
ZXgpIC0+IHVuc2lnbmVkIHsKQEAgLTMxMSwyMyArMzEzLDMxIEBAIFN0cmluZyB3cml0ZU5hdGl2
ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnUKIAogICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlJvd3Mg
PSBudW1iZXJPZk1hdHJpeFJvd3MoKTsKICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZDb2x1bW5z
ID0gbnVtYmVyT2ZNYXRyaXhDb2x1bW5zKCk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGli
bGVBcHBlbmQoImRvIHtcbiIsIG1ldGFsUmV0dXJuTmFtZSwgIiByZXN1bHQ7XG4iKTsKIAogICAg
ICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgbWV0YWxSZXR1
cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1l
LCAiIG0sICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgaSkge1xuIgotICAgICAgICAgICAgIiAg
ICBpZiAoaSA+PSAiLCBudW1iZXJPZlJvd3MsICIpIHJldHVybiAiLCBtZXRhbFJldHVybk5hbWUs
ICIoMCk7XG4iCi0gICAgICAgICAgICAiICAgICIsIG1ldGFsUmV0dXJuTmFtZSwgIiByZXN1bHQ7
XG4iCi0gICAgICAgICAgICAiICAgIHJlc3VsdFswXSA9IG1baV07XG4iCi0gICAgICAgICAgICAi
ICAgIHJlc3VsdFsxXSA9IG1baSArICIsIG51bWJlck9mUm93cywgIl07XG4iCi0gICAgICAgICk7
CisgICAgICAgICAgICAiICAgIGlmICgiLCBhcmdzWzFdLCAiID49ICIsIG51bWJlck9mUm93cywg
IikgeyIsIHJldHVybk5hbWUsICIgPSAiLCBtZXRhbFJldHVybk5hbWUsICIoMCk7IGJyZWFrO31c
biIsCisgICAgICAgICAgICAiICAgIHJlc3VsdFswXSA9ICIsIGFyZ3NbMF0sICdbJywgYXJnc1sx
XSwgIl07XG4iLAorICAgICAgICAgICAgIiAgICByZXN1bHRbMV0gPSAiLCBhcmdzWzBdLCAnWycs
IGFyZ3NbMV0sICIgKyAiLCBudW1iZXJPZlJvd3MsICJdO1xuIik7CisKKyAgICAgICAgLy9zdHJp
bmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAorICAgICAgICAvLyAgICBtZXRhbFJldHVybk5hbWUs
ICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUsICIgbSwg
IiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBpKSB7XG4iCisgICAgICAgIC8vICAgICIgICAgaWYg
KGkgPj0gIiwgbnVtYmVyT2ZSb3dzLCAiKSByZXR1cm4gIiwgbWV0YWxSZXR1cm5OYW1lLCAiKDAp
O1xuIgorICAgICAgICAvLyAgICAiICAgICIsIG1ldGFsUmV0dXJuTmFtZSwgIiByZXN1bHQ7XG4i
CisgICAgICAgIC8vICAgICIgICAgcmVzdWx0WzBdID0gbVtpXTtcbiIKKyAgICAgICAgLy8gICAg
IiAgICByZXN1bHRbMV0gPSBtW2kgKyAiLCBudW1iZXJPZlJvd3MsICJdO1xuIgorICAgICAgICAv
Lyk7CisKICAgICAgICAgaWYgKG51bWJlck9mQ29sdW1ucyA+PSAzKQotICAgICAgICAgICAgc3Ry
aW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiICAgIHJlc3VsdFsyXSA9IG1baSArICIsIG51bWJl
ck9mUm93cyAqIDIsICJdO1xuIik7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxl
QXBwZW5kKCIgICAgcmVzdWx0WzJdID0gIiwgYXJnc1swXSwgJ1snLCBhcmdzWzFdLCAiICsgIiwg
bnVtYmVyT2ZSb3dzICogMiwgIl07XG4iKTsKICAgICAgICAgaWYgKG51bWJlck9mQ29sdW1ucyA+
PSA0KQotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiICAgIHJlc3Vs
dFszXSA9IG1baSArICIsIG51bWJlck9mUm93cyAqIDMsICJdO1xuIik7Ci0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKAotICAgICAgICAgICAgIiAgICByZXR1cm4gcmVzdWx0O1xuIgotICAg
ICAgICAgICAgIn1cbiIKLSAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIu
dG9TdHJpbmcoKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiAg
ICByZXN1bHRbM10gPSAiLCBhcmdzWzBdLCAnWycsIGFyZ3NbMV0sICIgKyAiLCBudW1iZXJPZlJv
d3MgKiAzLCAiXTtcbiIpOworCisgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQo
CisgICAgICAgICAgICAiICAgICIsIHJldHVybk5hbWUsICIgPSByZXN1bHQ7XG4iLAorICAgICAg
ICAgICAgIn0gd2hpbGUgKDApO1xuIik7CisKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3JbXT0iKSB7
CkBAIC0zNDAsNDcgKzM1MCw1MCBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5h
dGl2ZUZ1CiAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mUm93cyA9IG51bWJlck9mTWF0cml4Um93
cygpOwogICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkNvbHVtbnMgPSBudW1iZXJPZk1hdHJpeENv
bHVtbnMoKTsKIAorICAgICAgICAvL3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoCisgICAg
ICAgIC8vICAgIG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywg
bWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiBtLCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIGksICIs
IG1ldGFsUGFyYW1ldGVyM05hbWUsICIgdikge1xuIgorICAgICAgICAvLyAgICAiICAgIGlmIChp
ID49ICIsIG51bWJlck9mUm93cywgIikgcmV0dXJuIG07XG4iCisgICAgICAgIC8vICAgICIgICAg
bVtpXSA9IHZbMF07XG4iCisgICAgICAgIC8vICAgICIgICAgbVtpICsgIiwgbnVtYmVyT2ZSb3dz
LCAiXSA9IHZbMV07XG4iCisgICAgICAgIC8vKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4
aWJsZUFwcGVuZCgiZG8ge1xuIiwgbWV0YWxSZXR1cm5OYW1lLCAiIG0gPSAiLCBhcmdzWzBdLCAi
O1xuIiwKKyAgICAgICAgICAgIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgaSA9ICIsIGFyZ3NbMV0s
ICI7XG4iKTsKKwogICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAg
ICAgICAgbWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRh
bFBhcmFtZXRlcjFOYW1lLCAiIG0sICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgaSwgIiwgbWV0
YWxQYXJhbWV0ZXIzTmFtZSwgIiB2KSB7XG4iCi0gICAgICAgICAgICAiICAgIGlmIChpID49ICIs
IG51bWJlck9mUm93cywgIikgcmV0dXJuIG07XG4iCi0gICAgICAgICAgICAiICAgIG1baV0gPSB2
WzBdO1xuIgotICAgICAgICAgICAgIiAgICBtW2kgKyAiLCBudW1iZXJPZlJvd3MsICJdID0gdlsx
XTtcbiIKLSAgICAgICAgKTsKKyAgICAgICAgICAgICIgICAgaWYgKGkgPj0gIiwgbnVtYmVyT2ZS
b3dzLCAiKSB7IiwgcmV0dXJuTmFtZSwgIiA9IG07XG5icmVhazt9XG4iLAorICAgICAgICAgICAg
IiAgICBtW2ldID0gIiwgYXJnc1syXSwgIlswXTtcbiIsCisgICAgICAgICAgICAiICAgIG1baSAr
ICIsIG51bWJlck9mUm93cywgIl0gPSAiLCBhcmdzWzJdLCAiWzFdO1xuIik7CiAgICAgICAgIGlm
IChudW1iZXJPZkNvbHVtbnMgPj0gMykKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGli
bGVBcHBlbmQoIiAgICBtW2kgKyAiLCBudW1iZXJPZlJvd3MgKiAyLCAiXSA9IHZbMl07XG4iKTsK
KyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiAgICBtW2kgKyAiLCBu
dW1iZXJPZlJvd3MgKiAyLCAiXSA9ICIsIGFyZ3NbMl0sICJbMl07XG4iKTsKICAgICAgICAgaWYg
KG51bWJlck9mQ29sdW1ucyA+PSA0KQotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJs
ZUFwcGVuZCgiICAgIG1baSArICIsIG51bWJlck9mUm93cyAqIDMsICJdID0gdlszXTtcbiIpOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgKLSAgICAgICAgICAgICIgICAgcmV0dXJuIG07
IgotICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuIHN0cmluZ0J1
aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBl
bmQoIiAgICBtW2kgKyAiLCBudW1iZXJPZlJvd3MgKiAzLCAiXSA9ICIsIGFyZ3NbMl0sICJbM107
XG4iKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKKyAgICAgICAgICAg
ICIgICAgIiwgcmV0dXJuTmFtZSwgIiA9IG07XG4iLAorICAgICAgICAgICAgIn0gd2hpbGUoMCk7
XG4iKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLmlzT3BlcmF0b3IoKSkgeworICAgICAgICBhdXRvIG9wZXJhdG9yTmFtZSA9IG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0cmluZygib3BlcmF0b3IiX3N0ci5s
ZW5ndGgoKSk7CiAgICAgICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKS5zaXplKCkgPT0gMSkgewotICAgICAgICAgICAgYXV0byBvcGVyYXRvck5hbWUgPSBuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yIl9zdHIubGVu
Z3RoKCkpOwogICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIu
bWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMo
KVswXS0+dHlwZSgpKTsKLSAgICAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7
CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAg
ICAgIG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQ
YXJhbWV0ZXJOYW1lLCAiIHgpIHtcbiIKLSAgICAgICAgICAgICAgICAiICAgIHJldHVybiAiLCBv
cGVyYXRvck5hbWUsICJ4O1xuIgotICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAp
OwotICAgICAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAg
ICAgICAgICAie1xuIiwgbWV0YWxQYXJhbWV0ZXJOYW1lLCAiIHggPSAiLCBhcmdzWzBdLCAiO1xu
IiwgCisgICAgICAgICAgICAgICAgcmV0dXJuTmFtZSwgIiA9ICIsIG9wZXJhdG9yTmFtZSwgIng7
XG59XG4iKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VS
VChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7Ci0g
ICAgICAgIGF1dG8gb3BlcmF0b3JOYW1lID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1l
KCkuc3Vic3RyaW5nKCJvcGVyYXRvciJfc3RyLmxlbmd0aCgpKTsKLSAgICAgICAgYXV0byBtZXRh
bFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7Ci0gICAgICAgIGF1dG8g
bWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwotICAgICAgICBh
dXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOworICAgICAgICAvL2F1dG8gbWV0YWxQYXJhbWV0
ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOworICAgICAgICAvL2F1dG8gbWV0YWxQ
YXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOworICAgICAgICAvL3N0cmlu
Z0J1aWxkZXIuZmxleGlibGVBcHBlbmQoCisgICAgICAgIC8vICAgIG1ldGFsUmV0dXJuTmFtZSwg
JyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiB4LCAi
LCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIHkpIHtcbiIKKyAgICAgICAgLy8gICAgIiAgICByZXR1
cm4geCAiLCBvcGVyYXRvck5hbWUsICIgeTtcbiIKKyAgICAgICAgLy8gICAgIn1cbiIKKyAgICAg
ICAgLy8pOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAg
ICAgbWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBh
cmFtZXRlcjFOYW1lLCAiIHgsICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgeSkge1xuIgotICAg
ICAgICAgICAgIiAgICByZXR1cm4geCAiLCBvcGVyYXRvck5hbWUsICIgeTtcbiIKLSAgICAgICAg
ICAgICJ9XG4iCi0gICAgICAgICk7Ci0gICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3Ry
aW5nKCk7CisgICAgICAgICAgICByZXR1cm5OYW1lLCAiID0gIiwgYXJnc1swXSwgJyAnLCBvcGVy
YXRvck5hbWUsICcgJywgYXJnc1sxXSwgIjtcbiIpOworICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJjb3MiCkBAIC00
MDgsOTYgKzQyMSw5OCBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1
CiAgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJhc3VpbnQi
CiAgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJhc2Zsb2F0
IikgewogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJz
KCkuc2l6ZSgpID09IDEpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1l
dGVycygpWzBdLT50eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkp
OworICAgICAgICAvL2F1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5
cGUoKSk7CisgICAgICAgIC8vYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICAgICAg
Ly9zdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAorICAgICAgICAvLyAgICBtZXRhbFJldHVy
bk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwg
IiB4KSB7XG4iCisgICAgICAgIC8vICAgICIgICAgcmV0dXJuICIsIG1hcEZ1bmN0aW9uTmFtZShu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSksICIoeCk7XG4iCisgICAgICAgIC8vICAg
ICJ9XG4iCisgICAgICAgIC8vKTsKKwogICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBw
ZW5kKAotICAgICAgICAgICAgbWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFt
ZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIgeCkge1xuIgotICAgICAgICAgICAgIiAgICBy
ZXR1cm4gIiwgbWFwRnVuY3Rpb25OYW1lKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgp
KSwgIih4KTtcbiIKLSAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICk7Ci0gICAgICAgIHJldHVy
biBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgICAgICByZXR1cm5OYW1lLCAiID0g
IiwgbWFwRnVuY3Rpb25OYW1lKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpKSwgJygn
LCBhcmdzWzBdLCAiKTtcbiIpOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJwb3ciIHx8IG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ubmFtZSgpID09ICJhdGFuMiIpIHsKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsKLSAgICAgICAgYXV0
byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7Ci0gICAgICAg
IGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUo
Km5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwotICAg
ICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUo
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOworICAgICAgICAvL2F1dG8gbWV0YWxQ
YXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOworICAgICAgICAvL2F1dG8g
bWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOworICAgICAgICAv
L2F1dG8gbWV0YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7CisgICAgICAgIC8vc3RyaW5nQnVpbGRlci5m
bGV4aWJsZUFwcGVuZCgKKyAgICAgICAgLy8gICAgbWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1
dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAiIHgsICIsIG1ldGFsUGFy
YW1ldGVyMk5hbWUsICIgeSkge1xuIgorICAgICAgICAvLyAgICAiICAgIHJldHVybiAiLCBuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSwgIih4LCB5KTtcbiIKKyAgICAgICAgLy8gICAg
In1cbiIKKyAgICAgICAgLy8pOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5k
KAotICAgICAgICAgICAgbWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwg
JygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAiIHgsICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIg
eSkge1xuIgotICAgICAgICAgICAgIiAgICByZXR1cm4gIiwgbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5uYW1lKCksICIoeCwgeSk7XG4iCi0gICAgICAgICAgICAifVxuIgotICAgICAgICApOwot
ICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgICAgICAgICAgcmV0
dXJuTmFtZSwgIiA9ICIsIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLCAiKCIsIGFy
Z3NbMF0sICIsICIsIGFyZ3NbMV0sICIpO1xuIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIkFsbE1lbW9yeUJh
cnJpZXJXaXRoR3JvdXBTeW5jIikgewogICAgICAgICBBU1NFUlQoIW5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuZmxl
eGlibGVBcHBlbmQoCi0gICAgICAgICAgICAidm9pZCAiLCBvdXRwdXRGdW5jdGlvbk5hbWUsICIo
KSB7XG4iCi0gICAgICAgICAgICAiICAgIHRocmVhZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdzOjpt
ZW1fZGV2aWNlKTtcbiIKLSAgICAgICAgICAgICIgICAgdGhyZWFkZ3JvdXBfYmFycmllcihtZW1f
ZmxhZ3M6Om1lbV90aHJlYWRncm91cCk7XG4iCi0gICAgICAgICAgICAiICAgIHRocmVhZGdyb3Vw
X2JhcnJpZXIobWVtX2ZsYWdzOjptZW1fdGV4dHVyZSk7XG4iCi0gICAgICAgICAgICAifVxuIgot
ICAgICAgICApOwotICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgKKyAgICAgICAgICAgICJ0aHJlYWRncm91cF9iYXJy
aWVyKG1lbV9mbGFnczo6bWVtX2RldmljZSk7XG4iCisgICAgICAgICAgICAidGhyZWFkZ3JvdXBf
YmFycmllcihtZW1fZmxhZ3M6Om1lbV90aHJlYWRncm91cCk7XG4iCisgICAgICAgICAgICAidGhy
ZWFkZ3JvdXBfYmFycmllcihtZW1fZmxhZ3M6Om1lbV90ZXh0dXJlKTtcbiIpOworICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgp
ID09ICJEZXZpY2VNZW1vcnlCYXJyaWVyV2l0aEdyb3VwU3luYyIpIHsKICAgICAgICAgQVNTRVJU
KCFuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkpOwotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgInZvaWQgIiwgb3V0
cHV0RnVuY3Rpb25OYW1lLCAiKCkge1xuIgotICAgICAgICAgICAgIiAgICB0aHJlYWRncm91cF9i
YXJyaWVyKG1lbV9mbGFnczo6bWVtX2RldmljZSk7XG4iCi0gICAgICAgICAgICAifVxuIgotICAg
ICAgICApOwotICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgKKyAgICAgICAgICAgICJ0aHJlYWRncm91cF9iYXJyaWVy
KG1lbV9mbGFnczo6bWVtX2RldmljZSk7XG4iKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiR3JvdXBNZW1vcnlC
YXJyaWVyV2l0aEdyb3VwU3luYyIpIHsKICAgICAgICAgQVNTRVJUKCFuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmZs
ZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgInZvaWQgIiwgb3V0cHV0RnVuY3Rpb25OYW1lLCAi
KCkge1xuIgotICAgICAgICAgICAgIiAgICB0aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6
bWVtX3RocmVhZGdyb3VwKTtcbiIKLSAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICk7Ci0gICAg
ICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKAorICAgICAgICAgICAgInRocmVhZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdzOjpt
ZW1fdGhyZWFkZ3JvdXApO1xuIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAo
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3RhcnRzV2l0aCgiSW50ZXJsb2NrZWQi
X3N0cikpIHsKICAgICAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09
ICJJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZSIpIHsKICAgICAgICAgICAgIEFTU0VSVChuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gNCk7Ci0gICAgICAg
ICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50UG9pbnRlciA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5
cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsK
LSAgICAgICAgICAgIGF1dG8gZmlyc3RBcmd1bWVudEFkZHJlc3NTcGFjZSA9IGZpcnN0QXJndW1l
bnRQb2ludGVyLmFkZHJlc3NTcGFjZSgpOwotICAgICAgICAgICAgYXV0byBmaXJzdEFyZ3VtZW50
UG9pbnRlZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZmlyc3RBcmd1bWVudFBvaW50
ZXIuZWxlbWVudFR5cGUoKSk7Ci0gICAgICAgICAgICBhdXRvIHNlY29uZEFyZ3VtZW50ID0gdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbMV0tPnR5cGUoKSk7Ci0gICAgICAgICAgICBhdXRvIHRoaXJkQXJndW1lbnQgPSB0
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBh
cmFtZXRlcnMoKVsyXS0+dHlwZSgpKTsKLSAgICAgICAgICAgIGF1dG8mIGZvdXJ0aEFyZ3VtZW50
UG9pbnRlciA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnBhcmFtZXRlcnMoKVszXS0+dHlwZSgpKTsKLSAgICAgICAgICAgIGF1dG8gZm91cnRo
QXJndW1lbnRBZGRyZXNzU3BhY2UgPSBmb3VydGhBcmd1bWVudFBvaW50ZXIuYWRkcmVzc1NwYWNl
KCk7Ci0gICAgICAgICAgICBhdXRvIGZvdXJ0aEFyZ3VtZW50UG9pbnRlZSA9IHR5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUoZm91cnRoQXJndW1lbnRQb2ludGVyLmVsZW1lbnRUeXBlKCkpOwor
ICAgICAgICAgICAgLy9hdXRvJiBmaXJzdEFyZ3VtZW50UG9pbnRlciA9IGRvd25jYXN0PEFTVDo6
UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+
dHlwZSgpKTsKKyAgICAgICAgICAgIC8vYXV0byBmaXJzdEFyZ3VtZW50QWRkcmVzc1NwYWNlID0g
Zmlyc3RBcmd1bWVudFBvaW50ZXIuYWRkcmVzc1NwYWNlKCk7CisgICAgICAgICAgICAvL2F1dG8g
Zmlyc3RBcmd1bWVudFBvaW50ZWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGZpcnN0
QXJndW1lbnRQb2ludGVyLmVsZW1lbnRUeXBlKCkpOworICAgICAgICAgICAgLy9hdXRvIHNlY29u
ZEFyZ3VtZW50ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7CisgICAgICAgICAgICAvL2F1dG8g
dGhpcmRBcmd1bWVudCA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzJdLT50eXBlKCkpOworICAgICAgICAgICAgLy9h
dXRvJiBmb3VydGhBcmd1bWVudFBvaW50ZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigq
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbM10tPnR5cGUoKSk7CisgICAg
ICAgICAgICAvL2F1dG8gZm91cnRoQXJndW1lbnRBZGRyZXNzU3BhY2UgPSBmb3VydGhBcmd1bWVu
dFBvaW50ZXIuYWRkcmVzc1NwYWNlKCk7CisgICAgICAgICAgICAvL2F1dG8gZm91cnRoQXJndW1l
bnRQb2ludGVlID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShmb3VydGhBcmd1bWVudFBv
aW50ZXIuZWxlbWVudFR5cGUoKSk7CisgICAgICAgICAgICAvL3N0cmluZ0J1aWxkZXIuZmxleGli
bGVBcHBlbmQoCisgICAgICAgICAgICAvLyAgICAidm9pZCAiLCBvdXRwdXRGdW5jdGlvbk5hbWUs
ICcoJywgdG9TdHJpbmcoZmlyc3RBcmd1bWVudEFkZHJlc3NTcGFjZSksICcgJywgZmlyc3RBcmd1
bWVudFBvaW50ZWUsICIqIG9iamVjdCwgIiwgc2Vjb25kQXJndW1lbnQsICIgY29tcGFyZSwgIiwg
dGhpcmRBcmd1bWVudCwgIiBkZXNpcmVkLCAiLCB0b1N0cmluZyhmb3VydGhBcmd1bWVudEFkZHJl
c3NTcGFjZSksICcgJywgZm91cnRoQXJndW1lbnRQb2ludGVlLCAiKiBvdXQpIHtcbiIKKyAgICAg
ICAgICAgIC8vICAgICIgICAgYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19leHBsaWNpdChv
YmplY3QsICZjb21wYXJlLCBkZXNpcmVkLCBtZW1vcnlfb3JkZXJfcmVsYXhlZCwgbWVtb3J5X29y
ZGVyX3JlbGF4ZWQpO1xuIgorICAgICAgICAgICAgLy8gICAgIiAgICAqb3V0ID0gY29tcGFyZTtc
biIKKyAgICAgICAgICAgIC8vICAgICJ9XG4iCisgICAgICAgICAgICAvLyk7CiAgICAgICAgICAg
ICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgICAgICJ2b2lkICIs
IG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCB0b1N0cmluZyhmaXJzdEFyZ3VtZW50QWRkcmVzc1Nw
YWNlKSwgJyAnLCBmaXJzdEFyZ3VtZW50UG9pbnRlZSwgIiogb2JqZWN0LCAiLCBzZWNvbmRBcmd1
bWVudCwgIiBjb21wYXJlLCAiLCB0aGlyZEFyZ3VtZW50LCAiIGRlc2lyZWQsICIsIHRvU3RyaW5n
KGZvdXJ0aEFyZ3VtZW50QWRkcmVzc1NwYWNlKSwgJyAnLCBmb3VydGhBcmd1bWVudFBvaW50ZWUs
ICIqIG91dCkge1xuIgotICAgICAgICAgICAgICAgICIgICAgYXRvbWljX2NvbXBhcmVfZXhjaGFu
Z2Vfd2Vha19leHBsaWNpdChvYmplY3QsICZjb21wYXJlLCBkZXNpcmVkLCBtZW1vcnlfb3JkZXJf
cmVsYXhlZCwgbWVtb3J5X29yZGVyX3JlbGF4ZWQpO1xuIgotICAgICAgICAgICAgICAgICIgICAg
Km91dCA9IGNvbXBhcmU7XG4iCi0gICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICk7
Ci0gICAgICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgICAgICAg
ICAgICAgICJhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrX2V4cGxpY2l0KCIsIGFyZ3NbMF0s
ICIsICYiLCBhcmdzWzFdLCAiLCAiLCBhcmdzWzJdLCAiLCBtZW1vcnlfb3JkZXJfcmVsYXhlZCwg
bWVtb3J5X29yZGVyX3JlbGF4ZWQpO1xuIiwKKyAgICAgICAgICAgICAgICAnKicsIGFyZ3NbM10s
ICIgPSAiLCBhcmdzWzFdLCAiO1xuIik7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCku
c2l6ZSgpID09IDMpOwotICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50UG9pbnRlciA9IGRvd25j
YXN0PEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKVswXS0+dHlwZSgpKTsKLSAgICAgICAgYXV0byBmaXJzdEFyZ3VtZW50QWRkcmVzc1NwYWNl
ID0gZmlyc3RBcmd1bWVudFBvaW50ZXIuYWRkcmVzc1NwYWNlKCk7Ci0gICAgICAgIGF1dG8gZmly
c3RBcmd1bWVudFBvaW50ZWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGZpcnN0QXJn
dW1lbnRQb2ludGVyLmVsZW1lbnRUeXBlKCkpOwotICAgICAgICBhdXRvIHNlY29uZEFyZ3VtZW50
ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7Ci0gICAgICAgIGF1dG8mIHRoaXJkQXJndW1lbnRQ
b2ludGVyID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpWzJdLT50eXBlKCkpOwotICAgICAgICBhdXRvIHRoaXJkQXJndW1l
bnRBZGRyZXNzU3BhY2UgPSB0aGlyZEFyZ3VtZW50UG9pbnRlci5hZGRyZXNzU3BhY2UoKTsKLSAg
ICAgICAgYXV0byB0aGlyZEFyZ3VtZW50UG9pbnRlZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUodGhpcmRBcmd1bWVudFBvaW50ZXIuZWxlbWVudFR5cGUoKSk7CisgICAgICAgIC8vYXV0
byYgZmlyc3RBcmd1bWVudFBvaW50ZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CisgICAgICAg
IC8vYXV0byBmaXJzdEFyZ3VtZW50QWRkcmVzc1NwYWNlID0gZmlyc3RBcmd1bWVudFBvaW50ZXIu
YWRkcmVzc1NwYWNlKCk7CisgICAgICAgIC8vYXV0byBmaXJzdEFyZ3VtZW50UG9pbnRlZSA9IHR5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZmlyc3RBcmd1bWVudFBvaW50ZXIuZWxlbWVudFR5
cGUoKSk7CisgICAgICAgIC8vYXV0byBzZWNvbmRBcmd1bWVudCA9IHR5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50
eXBlKCkpOworICAgICAgICAvL2F1dG8mIHRoaXJkQXJndW1lbnRQb2ludGVyID0gZG93bmNhc3Q8
QVNUOjpQb2ludGVyVHlwZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
WzJdLT50eXBlKCkpOworICAgICAgICAvL2F1dG8gdGhpcmRBcmd1bWVudEFkZHJlc3NTcGFjZSA9
IHRoaXJkQXJndW1lbnRQb2ludGVyLmFkZHJlc3NTcGFjZSgpOworICAgICAgICAvL2F1dG8gdGhp
cmRBcmd1bWVudFBvaW50ZWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKHRoaXJkQXJn
dW1lbnRQb2ludGVyLmVsZW1lbnRUeXBlKCkpOwogICAgICAgICBhdXRvIG5hbWUgPSBhdG9taWNO
YW1lKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0cmluZygiSW50ZXJsb2Nr
ZWQiX3N0ci5sZW5ndGgoKSkpOworICAgICAgICAvL3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBl
bmQoCisgICAgICAgIC8vICAgICJ2b2lkICIsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCB0b1N0
cmluZyhmaXJzdEFyZ3VtZW50QWRkcmVzc1NwYWNlKSwgJyAnLCBmaXJzdEFyZ3VtZW50UG9pbnRl
ZSwgIiogb2JqZWN0LCAiLCBzZWNvbmRBcmd1bWVudCwgIiBvcGVyYW5kLCAiLCB0b1N0cmluZyh0
aGlyZEFyZ3VtZW50QWRkcmVzc1NwYWNlKSwgJyAnLCB0aGlyZEFyZ3VtZW50UG9pbnRlZSwgIiog
b3V0KSB7XG4iCisgICAgICAgIC8vICAgICIgICAgKm91dCA9IGF0b21pY18iLCBuYW1lLCAiX2V4
cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgbWVtb3J5X29yZGVyX3JlbGF4ZWQpO1xuIgorICAgICAg
ICAvLyAgICAifVxuIgorICAgICAgICAvLyk7CisKICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4
aWJsZUFwcGVuZCgKLSAgICAgICAgICAgICJ2b2lkICIsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygn
LCB0b1N0cmluZyhmaXJzdEFyZ3VtZW50QWRkcmVzc1NwYWNlKSwgJyAnLCBmaXJzdEFyZ3VtZW50
UG9pbnRlZSwgIiogb2JqZWN0LCAiLCBzZWNvbmRBcmd1bWVudCwgIiBvcGVyYW5kLCAiLCB0b1N0
cmluZyh0aGlyZEFyZ3VtZW50QWRkcmVzc1NwYWNlKSwgJyAnLCB0aGlyZEFyZ3VtZW50UG9pbnRl
ZSwgIiogb3V0KSB7XG4iCi0gICAgICAgICAgICAiICAgICpvdXQgPSBhdG9taWNfIiwgbmFtZSwg
Il9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG1lbW9yeV9vcmRlcl9yZWxheGVkKTtcbiIKLSAg
ICAgICAgICAgICJ9XG4iCi0gICAgICAgICk7Ci0gICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVy
LnRvU3RyaW5nKCk7CisgICAgICAgICAgICAnKicsIGFyZ3NbMl0sICIgPSBhdG9taWNfIiwgbmFt
ZSwgIl9leHBsaWNpdCgiLCBhcmdzWzBdLCAiLCAiLCBhcmdzWzFdLCAiLCBtZW1vcnlfb3JkZXJf
cmVsYXhlZCk7XG4iKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiU2FtcGxlIikgewpAQCAtNTA5LDM1ICs1MjQs
NTEgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdQogICAgICAgICBh
dXRvJiByZXR1cm5UeXBlID0gZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KGRv
d25jYXN0PEFTVDo6TmFtZWRUeXBlPihuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKS51
bmlmeU5vZGUoKSkpOwogICAgICAgICBhdXRvIHJldHVyblZlY3Rvckxlbmd0aCA9IHZlY3Rvckxl
bmd0aChyZXR1cm5UeXBlKTsKIAotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKHRleHR1cmVUeXBlKTsKLSAgICAgICAgYXV0byBt
ZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7Ci0gICAgICAgIGF1
dG8gbWV0YWxQYXJhbWV0ZXIzTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobG9j
YXRpb25UeXBlKTsKLSAgICAgICAgU3RyaW5nIG1ldGFsUGFyYW1ldGVyNE5hbWU7Ci0gICAgICAg
IGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gNCkK
LSAgICAgICAgICAgIG1ldGFsUGFyYW1ldGVyNE5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVG
b3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVszXS0+dHlwZSgp
KTsKLSAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVG
b3JUeXBlKHJldHVyblR5cGUpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5k
KG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJh
bWV0ZXIxTmFtZSwgIiB0aGVUZXh0dXJlLCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIHRoZVNh
bXBsZXIsICIsIG1ldGFsUGFyYW1ldGVyM05hbWUsICIgbG9jYXRpb24iKTsKLSAgICAgICAgaWYg
KCFtZXRhbFBhcmFtZXRlcjROYW1lLmlzTnVsbCgpKQotICAgICAgICAgICAgc3RyaW5nQnVpbGRl
ci5mbGV4aWJsZUFwcGVuZCgiLCAiLCBtZXRhbFBhcmFtZXRlcjROYW1lLCAiIG9mZnNldCIpOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgKLSAgICAgICAgICAgICIpIHtcbiIKLSAgICAg
ICAgICAgICIgICAgcmV0dXJuIHRoZVRleHR1cmUuc2FtcGxlKHRoZVNhbXBsZXIsICIKLSAgICAg
ICAgKTsKKyAgICAgICAgLy9hdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKHRleHR1cmVUeXBlKTsKKyAgICAgICAgLy9hdXRvIG1ldGFsUGFyYW1l
dGVyMk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKKyAgICAgICAgLy9hdXRvIG1ldGFs
UGFyYW1ldGVyM05hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGxvY2F0aW9uVHlw
ZSk7CisgICAgICAgIC8vU3RyaW5nIG1ldGFsUGFyYW1ldGVyNE5hbWU7CisgICAgICAgIC8vaWYg
KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSA0KQorICAg
ICAgICAvLyAgICBtZXRhbFBhcmFtZXRlcjROYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9y
VHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbM10tPnR5cGUoKSk7
CisgICAgICAgIC8vYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVG
b3JUeXBlKHJldHVyblR5cGUpOworICAgICAgICAvL3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBl
bmQobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBh
cmFtZXRlcjFOYW1lLCAiIHRoZVRleHR1cmUsICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgdGhl
U2FtcGxlciwgIiwgbWV0YWxQYXJhbWV0ZXIzTmFtZSwgIiBsb2NhdGlvbiIpOworICAgICAgICAv
L2lmICghbWV0YWxQYXJhbWV0ZXI0TmFtZS5pc051bGwoKSkKKyAgICAgICAgLy8gICAgc3RyaW5n
QnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiLCAiLCBtZXRhbFBhcmFtZXRlcjROYW1lLCAiIG9mZnNl
dCIpOworICAgICAgICAvL3N0cmluZ0J1aWxkZXIuYXBwZW5kKAorICAgICAgICAvLyAgICAiKSB7
XG4iCisgICAgICAgIC8vICAgICIgICAgcmV0dXJuIHRoZVRleHR1cmUuc2FtcGxlKHRoZVNhbXBs
ZXIsICIKKyAgICAgICAgLy8pOworICAgICAgICAvL2lmICh0ZXh0dXJlVHlwZS5pc1RleHR1cmVB
cnJheSgpKSB7CisgICAgICAgIC8vICAgIEFTU0VSVChsb2NhdGlvblZlY3Rvckxlbmd0aCA+IDEp
OworICAgICAgICAvLyAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCJsb2NhdGlvbi4i
LCAieHl6dyJfc3RyLnN1YnN0cmluZygwLCBsb2NhdGlvblZlY3Rvckxlbmd0aCAtIDEpLCAiLCBs
b2NhdGlvbi4iLCAieHl6dyJfc3RyLnN1YnN0cmluZyhsb2NhdGlvblZlY3Rvckxlbmd0aCAtIDEs
IDEpKTsKKyAgICAgICAgLy99IGVsc2UKKyAgICAgICAgLy8gICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoImxvY2F0aW9uIik7CisgICAgICAgIC8vaWYgKCFtZXRhbFBhcmFtZXRlcjROYW1lLmlzTnVs
bCgpKQorICAgICAgICAvLyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCBvZmZzZXQiKTsKKyAg
ICAgICAgLy9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiKSIpOworICAgICAgICAvL2lmICghdGV4dHVy
ZVR5cGUuaXNEZXB0aFRleHR1cmUoKSkKKyAgICAgICAgLy8gICAgc3RyaW5nQnVpbGRlci5mbGV4
aWJsZUFwcGVuZCgiLiIsICJ4eXp3Il9zdHIuc3Vic3RyaW5nKDAsIHJldHVyblZlY3Rvckxlbmd0
aCkpOworICAgICAgICAvL3N0cmluZ0J1aWxkZXIuYXBwZW5kKAorICAgICAgICAvLyAgICAiO1xu
IgorICAgICAgICAvLyAgICAifVxuIgorICAgICAgICAvLyk7CisKKyAgICAgICAgc3RyaW5nQnVp
bGRlci5mbGV4aWJsZUFwcGVuZCgKKyAgICAgICAgICAgIHJldHVybk5hbWUsICIgPSAiLCBhcmdz
WzBdLCAiLnNhbXBsZSgiLCBhcmdzWzFdLCAiLCAiKTsKKwogICAgICAgICBpZiAodGV4dHVyZVR5
cGUuaXNUZXh0dXJlQXJyYXkoKSkgewogICAgICAgICAgICAgQVNTRVJUKGxvY2F0aW9uVmVjdG9y
TGVuZ3RoID4gMSk7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCJs
b2NhdGlvbi4iLCAieHl6dyJfc3RyLnN1YnN0cmluZygwLCBsb2NhdGlvblZlY3Rvckxlbmd0aCAt
IDEpLCAiLCBsb2NhdGlvbi4iLCAieHl6dyJfc3RyLnN1YnN0cmluZyhsb2NhdGlvblZlY3Rvckxl
bmd0aCAtIDEsIDEpKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQo
YXJnc1syXSwgJy4nLCAieHl6dyJfc3RyLnN1YnN0cmluZygwLCBsb2NhdGlvblZlY3Rvckxlbmd0
aCAtIDEpLCAiLCAiLCBhcmdzWzJdLCAnLicsICJ4eXp3Il9zdHIuc3Vic3RyaW5nKGxvY2F0aW9u
VmVjdG9yTGVuZ3RoIC0gMSwgMSkpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKCJsb2NhdGlvbiIpOwotICAgICAgICBpZiAoIW1ldGFsUGFyYW1ldGVy
NE5hbWUuaXNOdWxsKCkpCi0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCBvZmZz
ZXQiKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGFyZ3NbMl0pOworICAgICAg
ICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDQp
CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIsICIsIGFyZ3NbM10p
OwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiKSIpOwogICAgICAgICBpZiAoIXRleHR1
cmVUeXBlLmlzRGVwdGhUZXh0dXJlKCkpCiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhp
YmxlQXBwZW5kKCIuIiwgInh5enciX3N0ci5zdWJzdHJpbmcoMCwgcmV0dXJuVmVjdG9yTGVuZ3Ro
KSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKAotICAgICAgICAgICAgIjtcbiIKLSAg
ICAgICAgICAgICJ9XG4iCi0gICAgICAgICk7Ci0gICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVy
LnRvU3RyaW5nKCk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCI7XG4iKTsKKworICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpID09ICJMb2FkIikgewpAQCAtNTQ5LDE1MiArNTgwLDE3OCBAQCBTdHJpbmcgd3JpdGVO
YXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1CiAgICAgICAgIGF1dG8mIHJldHVyblR5cGUgPSBk
b3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oZG93bmNhc3Q8QVNUOjpOYW1lZFR5
cGU+KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpLnVuaWZ5Tm9kZSgpKSk7CiAgICAg
ICAgIGF1dG8gcmV0dXJuVmVjdG9yTGVuZ3RoID0gdmVjdG9yTGVuZ3RoKHJldHVyblR5cGUpOwog
Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUodGV4dHVyZVR5cGUpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUg
PSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGxvY2F0aW9uVHlwZSk7CisgICAgICAgIC8v
YXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSh0
ZXh0dXJlVHlwZSk7CisgICAgICAgIC8vYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZShsb2NhdGlvblR5cGUpOwogICAgICAgICBhdXRvIG1ldGFs
UmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUocmV0dXJuVHlwZSk7Ci0g
ICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQobWV0YWxSZXR1cm5OYW1lLCAnICcs
IG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAiIHRoZVRleHR1
cmUsICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgbG9jYXRpb24pIHtcbiIpOworICAgICAgICAv
L3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1
dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAiIHRoZVRleHR1cmUsICIs
IG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgbG9jYXRpb24pIHtcbiIpOworICAgICAgICAvL2lmICh0
ZXh0dXJlVHlwZS5pc1RleHR1cmVBcnJheSgpKSB7CisgICAgICAgIC8vICAgIEFTU0VSVChsb2Nh
dGlvblZlY3Rvckxlbmd0aCA+IDEpOworICAgICAgICAvLyAgICBTdHJpbmcgZGltZW5zaW9uc1td
ID0geyAid2lkdGgiX3N0ciwgImhlaWdodCJfc3RyLCAiZGVwdGgiX3N0ciB9OworICAgICAgICAv
LyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxvY2F0aW9uVmVjdG9yTGVuZ3RoIC0gMTsgKytpKSB7
CisgICAgICAgIC8vICAgICAgICBhdXRvIHN1ZmZpeCA9ICJ4eXp3Il9zdHIuc3Vic3RyaW5nKGks
IDEpOworICAgICAgICAvLyAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiICAg
IGlmIChsb2NhdGlvbi4iLCBzdWZmaXgsICIgPCAwIHx8IHN0YXRpY19jYXN0PHVpbnQzMl90Pihs
b2NhdGlvbi4iLCBzdWZmaXgsICIpID49IHRoZVRleHR1cmUuZ2V0XyIsIGRpbWVuc2lvbnNbaV0s
ICIoKSkgcmV0dXJuICIsIG1ldGFsUmV0dXJuTmFtZSwgIigwKTtcbiIpOworICAgICAgICAvLyAg
ICB9CisgICAgICAgIC8vICAgIGF1dG8gc3VmZml4ID0gInh5enciX3N0ci5zdWJzdHJpbmcobG9j
YXRpb25WZWN0b3JMZW5ndGggLSAxLCAxKTsKKyAgICAgICAgLy8gICAgc3RyaW5nQnVpbGRlci5m
bGV4aWJsZUFwcGVuZCgiICAgIGlmIChsb2NhdGlvbi4iLCBzdWZmaXgsICIgPCAwIHx8IHN0YXRp
Y19jYXN0PHVpbnQzMl90Pihsb2NhdGlvbi4iLCBzdWZmaXgsICIpID49IHRoZVRleHR1cmUuZ2V0
X2FycmF5X3NpemUoKSkgcmV0dXJuICIsIG1ldGFsUmV0dXJuTmFtZSwgIigwKTtcbiIpOworICAg
ICAgICAvL30gZWxzZSB7CisgICAgICAgIC8vICAgIGlmIChsb2NhdGlvblZlY3Rvckxlbmd0aCA9
PSAxKQorICAgICAgICAvLyAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiICAg
IGlmIChsb2NhdGlvbiA8IDAgfHwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGxvY2F0aW9uKSA+PSB0
aGVUZXh0dXJlLmdldF93aWR0aCgpKSByZXR1cm4gIiwgbWV0YWxSZXR1cm5OYW1lLCAiKDApO1xu
Iik7CisgICAgICAgIC8vICAgIGVsc2UgeworICAgICAgICAvLyAgICAgICAgc3RyaW5nQnVpbGRl
ci5mbGV4aWJsZUFwcGVuZCgKKyAgICAgICAgLy8gICAgICAgICAgICAiICAgIGlmIChsb2NhdGlv
bi54IDwgMCB8fCBzdGF0aWNfY2FzdDx1aW50MzJfdD4obG9jYXRpb24ueCkgPj0gdGhlVGV4dHVy
ZS5nZXRfd2lkdGgoKSkgcmV0dXJuICIsIG1ldGFsUmV0dXJuTmFtZSwgIigwKTtcbiIKKyAgICAg
ICAgLy8gICAgICAgICAgICAiICAgIGlmIChsb2NhdGlvbi55IDwgMCB8fCBzdGF0aWNfY2FzdDx1
aW50MzJfdD4obG9jYXRpb24ueSkgPj0gdGhlVGV4dHVyZS5nZXRfaGVpZ2h0KCkpIHJldHVybiAi
LCBtZXRhbFJldHVybk5hbWUsICIoMCk7XG4iCisgICAgICAgIC8vICAgICAgICApOworICAgICAg
ICAvLyAgICAgICAgaWYgKGxvY2F0aW9uVmVjdG9yTGVuZ3RoID49IDMpCisgICAgICAgIC8vICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiICAgIGlmIChsb2NhdGlvbi56
IDwgMCB8fCBzdGF0aWNfY2FzdDx1aW50MzJfdD4obG9jYXRpb24ueikgPj0gdGhlVGV4dHVyZS5n
ZXRfZGVwdGgoKSkgcmV0dXJuICIsIG1ldGFsUmV0dXJuTmFtZSwgIigwKTtcbiIpOworICAgICAg
ICAvLyAgICB9CisgICAgICAgIC8vfQorICAgICAgICAvL3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIg
ICAgcmV0dXJuIHRoZVRleHR1cmUucmVhZCgiKTsKKyAgICAgICAgLy9pZiAodGV4dHVyZVR5cGUu
aXNUZXh0dXJlQXJyYXkoKSkgeworICAgICAgICAvLyAgICBBU1NFUlQobG9jYXRpb25WZWN0b3JM
ZW5ndGggPiAxKTsKKyAgICAgICAgLy8gICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgi
dWludCIsIHZlY3RvclN1ZmZpeChsb2NhdGlvblZlY3Rvckxlbmd0aCAtIDEpLCAiKGxvY2F0aW9u
LiIsICJ4eXp3Il9zdHIuc3Vic3RyaW5nKDAsIGxvY2F0aW9uVmVjdG9yTGVuZ3RoIC0gMSksICIp
LCB1aW50KGxvY2F0aW9uLiIsICJ4eXp3Il9zdHIuc3Vic3RyaW5nKGxvY2F0aW9uVmVjdG9yTGVu
Z3RoIC0gMSwgMSksICcpJyk7CisgICAgICAgIC8vfSBlbHNlCisgICAgICAgIC8vICAgIHN0cmlu
Z0J1aWxkZXIuZmxleGlibGVBcHBlbmQoInVpbnQiLCB2ZWN0b3JTdWZmaXgobG9jYXRpb25WZWN0
b3JMZW5ndGgpLCAiKGxvY2F0aW9uKSIpOworICAgICAgICAvL3N0cmluZ0J1aWxkZXIuYXBwZW5k
KCcpJyk7CisgICAgICAgIC8vaWYgKCF0ZXh0dXJlVHlwZS5pc0RlcHRoVGV4dHVyZSgpKQorICAg
ICAgICAvLyAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCcuJywgInh5enciX3N0ci5z
dWJzdHJpbmcoMCwgcmV0dXJuVmVjdG9yTGVuZ3RoKSk7CisgICAgICAgIC8vc3RyaW5nQnVpbGRl
ci5hcHBlbmQoCisgICAgICAgIC8vICAgICI7XG4iCisgICAgICAgIC8vICAgICJ9XG4iCisgICAg
ICAgIC8vKTsKKyAgICAgICAgLy9zdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKG1ldGFsUmV0
dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFt
ZSwgIiB0aGVUZXh0dXJlLCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIGxvY2F0aW9uKSB7XG4i
KTsKKworCisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJkbyB7XG4iKTsKKwogICAgICAg
ICBpZiAodGV4dHVyZVR5cGUuaXNUZXh0dXJlQXJyYXkoKSkgewogICAgICAgICAgICAgQVNTRVJU
KGxvY2F0aW9uVmVjdG9yTGVuZ3RoID4gMSk7CiAgICAgICAgICAgICBTdHJpbmcgZGltZW5zaW9u
c1tdID0geyAid2lkdGgiX3N0ciwgImhlaWdodCJfc3RyLCAiZGVwdGgiX3N0ciB9OwogICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsb2NhdGlvblZlY3Rvckxlbmd0aCAtIDE7ICsraSkg
ewogICAgICAgICAgICAgICAgIGF1dG8gc3VmZml4ID0gInh5enciX3N0ci5zdWJzdHJpbmcoaSwg
MSk7Ci0gICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiICAgIGlm
IChsb2NhdGlvbi4iLCBzdWZmaXgsICIgPCAwIHx8IHN0YXRpY19jYXN0PHVpbnQzMl90Pihsb2Nh
dGlvbi4iLCBzdWZmaXgsICIpID49IHRoZVRleHR1cmUuZ2V0XyIsIGRpbWVuc2lvbnNbaV0sICIo
KSkgcmV0dXJuICIsIG1ldGFsUmV0dXJuTmFtZSwgIigwKTtcbiIpOworICAgICAgICAgICAgICAg
IHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiAgICBpZiAoIiwgYXJnc1sxXSwgJy4nLCBz
dWZmaXgsICIgPCAwIHx8IHN0YXRpY19jYXN0PHVpbnQzMl90PigiLCBhcmdzWzFdLCAnLicsIHN1
ZmZpeCwgIikgPj0gIiwgYXJnc1swXSwgIi5nZXRfIiwgZGltZW5zaW9uc1tpXSwgIigpKSB7Iiwg
cmV0dXJuTmFtZSwgIiA9ICIsIG1ldGFsUmV0dXJuTmFtZSwgIigwKTsgYnJlYWs7fVxuIik7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBhdXRvIHN1ZmZpeCA9ICJ4eXp3Il9zdHIuc3Vic3Ry
aW5nKGxvY2F0aW9uVmVjdG9yTGVuZ3RoIC0gMSwgMSk7Ci0gICAgICAgICAgICBzdHJpbmdCdWls
ZGVyLmZsZXhpYmxlQXBwZW5kKCIgICAgaWYgKGxvY2F0aW9uLiIsIHN1ZmZpeCwgIiA8IDAgfHwg
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KGxvY2F0aW9uLiIsIHN1ZmZpeCwgIikgPj0gdGhlVGV4dHVy
ZS5nZXRfYXJyYXlfc2l6ZSgpKSByZXR1cm4gIiwgbWV0YWxSZXR1cm5OYW1lLCAiKDApO1xuIik7
CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIgICAgaWYgKCIsIGFy
Z3NbMV0sICcuJywgc3VmZml4LCAiIDwgMCB8fCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oIiwgYXJn
c1sxXSwgJy4nLCBzdWZmaXgsICIpID49ICIsIGFyZ3NbMF0sICIuZ2V0X2FycmF5X3NpemUoKSkg
eyIsIHJldHVybk5hbWUsICIgPSAiLCBtZXRhbFJldHVybk5hbWUsICIoMCk7IGJyZWFrO31cbiIp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGxvY2F0aW9uVmVjdG9yTGVuZ3Ro
ID09IDEpCi0gICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiICAg
IGlmIChsb2NhdGlvbiA8IDAgfHwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGxvY2F0aW9uKSA+PSB0
aGVUZXh0dXJlLmdldF93aWR0aCgpKSByZXR1cm4gIiwgbWV0YWxSZXR1cm5OYW1lLCAiKDApO1xu
Iik7CisgICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiICAgIGlm
ICgiLCBhcmdzWzFdLCAiIDwgMCB8fCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oIiwgYXJnc1sxXSwg
IikgPj0gIiwgYXJnc1swXSwgIi5nZXRfd2lkdGgoKSkgeyAiLCByZXR1cm5OYW1lLCAiID0gIiwg
bWV0YWxSZXR1cm5OYW1lLCAiKDApOyBicmVhazt9XG4iKTsKICAgICAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoCi0gICAgICAgICAg
ICAgICAgICAgICIgICAgaWYgKGxvY2F0aW9uLnggPCAwIHx8IHN0YXRpY19jYXN0PHVpbnQzMl90
Pihsb2NhdGlvbi54KSA+PSB0aGVUZXh0dXJlLmdldF93aWR0aCgpKSByZXR1cm4gIiwgbWV0YWxS
ZXR1cm5OYW1lLCAiKDApO1xuIgotICAgICAgICAgICAgICAgICAgICAiICAgIGlmIChsb2NhdGlv
bi55IDwgMCB8fCBzdGF0aWNfY2FzdDx1aW50MzJfdD4obG9jYXRpb24ueSkgPj0gdGhlVGV4dHVy
ZS5nZXRfaGVpZ2h0KCkpIHJldHVybiAiLCBtZXRhbFJldHVybk5hbWUsICIoMCk7XG4iCi0gICAg
ICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgIiAgICBpZiAoIiwgYXJnc1sxXSwg
Ii54IDwgMCB8fCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oIiwgYXJnc1sxXSwgIi54KSA+PSAiLCBh
cmdzWzBdLCAiLmdldF93aWR0aCgpKSB7IiwgcmV0dXJuTmFtZSwgIiA9ICIsIG1ldGFsUmV0dXJu
TmFtZSwgIigwKTsgYnJlYWs7fVxuIgorICAgICAgICAgICAgICAgICAgICAiICAgIGlmICgiLCBh
cmdzWzFdLCAiLnkgPCAwIHx8IHN0YXRpY19jYXN0PHVpbnQzMl90PigiLCBhcmdzWzFdLCAiLnkp
ID49ICIsIGFyZ3NbMF0sICIuZ2V0X2hlaWdodCgpKSB7IiwgcmV0dXJuTmFtZSwgIiA9ICIsIG1l
dGFsUmV0dXJuTmFtZSwgIigwKTsgYnJlYWs7fVxuIik7CisKICAgICAgICAgICAgICAgICBpZiAo
bG9jYXRpb25WZWN0b3JMZW5ndGggPj0gMykKLSAgICAgICAgICAgICAgICAgICAgc3RyaW5nQnVp
bGRlci5mbGV4aWJsZUFwcGVuZCgiICAgIGlmIChsb2NhdGlvbi56IDwgMCB8fCBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4obG9jYXRpb24ueikgPj0gdGhlVGV4dHVyZS5nZXRfZGVwdGgoKSkgcmV0dXJu
ICIsIG1ldGFsUmV0dXJuTmFtZSwgIigwKTtcbiIpOworICAgICAgICAgICAgICAgICAgICBzdHJp
bmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIgICAgaWYgKCIsIGFyZ3NbMV0sICIueiA8IDAgfHwg
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KCIsIGFyZ3NbMV0sICIueikgPj0gIiwgYXJnc1swXSwgIi5n
ZXRfZGVwdGgoKSkgeyIsIHJldHVybk5hbWUsICIgPSAiLCBtZXRhbFJldHVybk5hbWUsICIoMCk7
IGJyZWFrO31cbiIpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCIgICAgcmV0dXJuIHRoZVRleHR1cmUucmVhZCgiKTsKKyAgICAgICAgc3Ry
aW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiICAgICIsIHJldHVybk5hbWUsICIgPSAiLCBhcmdz
WzBdLCAiLnJlYWQoIik7CiAgICAgICAgIGlmICh0ZXh0dXJlVHlwZS5pc1RleHR1cmVBcnJheSgp
KSB7CiAgICAgICAgICAgICBBU1NFUlQobG9jYXRpb25WZWN0b3JMZW5ndGggPiAxKTsKLSAgICAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoInVpbnQiLCB2ZWN0b3JTdWZmaXgo
bG9jYXRpb25WZWN0b3JMZW5ndGggLSAxKSwgIihsb2NhdGlvbi4iLCAieHl6dyJfc3RyLnN1YnN0
cmluZygwLCBsb2NhdGlvblZlY3Rvckxlbmd0aCAtIDEpLCAiKSwgdWludChsb2NhdGlvbi4iLCAi
eHl6dyJfc3RyLnN1YnN0cmluZyhsb2NhdGlvblZlY3Rvckxlbmd0aCAtIDEsIDEpLCAnKScpOwor
ICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgidWludCIsIHZlY3RvclN1
ZmZpeChsb2NhdGlvblZlY3Rvckxlbmd0aCAtIDEpLCAnKCcsIGFyZ3NbMV0sICcuJywgInh5enci
X3N0ci5zdWJzdHJpbmcoMCwgbG9jYXRpb25WZWN0b3JMZW5ndGggLSAxKSwgIiksIHVpbnQoIiwg
YXJnc1sxXSwgJy4nLCAieHl6dyJfc3RyLnN1YnN0cmluZyhsb2NhdGlvblZlY3Rvckxlbmd0aCAt
IDEsIDEpLCAnKScpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIu
ZmxleGlibGVBcHBlbmQoInVpbnQiLCB2ZWN0b3JTdWZmaXgobG9jYXRpb25WZWN0b3JMZW5ndGgp
LCAiKGxvY2F0aW9uKSIpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVu
ZCgidWludCIsIHZlY3RvclN1ZmZpeChsb2NhdGlvblZlY3Rvckxlbmd0aCksICcoJywgYXJnc1sx
XSwgJyknKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJyknKTsKICAgICAgICAgaWYg
KCF0ZXh0dXJlVHlwZS5pc0RlcHRoVGV4dHVyZSgpKQogICAgICAgICAgICAgc3RyaW5nQnVpbGRl
ci5mbGV4aWJsZUFwcGVuZCgnLicsICJ4eXp3Il9zdHIuc3Vic3RyaW5nKDAsIHJldHVyblZlY3Rv
ckxlbmd0aCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgKICAgICAgICAgICAgICI7
XG4iCi0gICAgICAgICAgICAifVxuIgotICAgICAgICApOwotICAgICAgICByZXR1cm4gc3RyaW5n
QnVpbGRlci50b1N0cmluZygpOworICAgICAgICAgICAgIn0gd2hpbGUoMCk7XG4iKTsKKworICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpID09ICJsb2FkIikgewogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1l
dGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFsUmV0
dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi50eXBlKCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAot
ICAgICAgICAgICAgbWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygn
LCBtZXRhbFBhcmFtZXRlck5hbWUsICIgeCkge1xuIgotICAgICAgICAgICAgIiAgICByZXR1cm4g
YXRvbWljX2xvYWRfZXhwbGljaXQoeCwgbWVtb3J5X29yZGVyX3JlbGF4ZWQpO1xuIgotICAgICAg
ICAgICAgIn1cbiIKLSAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9T
dHJpbmcoKTsKKyAgICAgICAgICAgIHJldHVybk5hbWUsICIgPSBhdG9taWNfbG9hZF9leHBsaWNp
dCgiLCBhcmdzWzBdLCAiLCBtZW1vcnlfb3JkZXJfcmVsYXhlZCk7XG4iKTsKKyAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9
PSAic3RvcmUiKSB7CiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBh
cmFtZXRlcnMoKS5zaXplKCkgPT0gMik7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFt
ZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVy
Mk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5m
bGV4aWJsZUFwcGVuZCgidm9pZCAiLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJh
bWV0ZXIxTmFtZSwgIiB4LCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIHkpIHtcbiIKLSAgICAg
ICAgICAgICIgICAgYXRvbWljX3N0b3JlX2V4cGxpY2l0KHgsIHksIG1lbW9yeV9vcmRlcl9yZWxh
eGVkKTtcbiIKLSAgICAgICAgICAgICJ9XG4iKTsKLSAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxk
ZXIudG9TdHJpbmcoKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKKyAg
ICAgICAgICAgICJhdG9taWNfc3RvcmVfZXhwbGljaXQoIiwgYXJnc1swXSwgIiwgIiwgYXJnc1sx
XSwgIiwgbWVtb3J5X29yZGVyX3JlbGF4ZWQpO1xuIik7CisgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIkdldERpbWVu
c2lvbnMiKSB7CiAgICAgICAgIGF1dG8mIHRleHR1cmVUeXBlID0gZG93bmNhc3Q8QVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24+KGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPihuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpLT51bmlmeU5vZGUoKSkpOwogCiAg
ICAgICAgIHNpemVfdCBpbmRleCA9IDE7Ci0gICAgICAgIGlmICghdGV4dHVyZVR5cGUuaXNXcml0
YWJsZVRleHR1cmUoKSAmJiB0ZXh0dXJlVHlwZS50ZXh0dXJlRGltZW5zaW9uKCkgIT0gMSkKKyAg
ICAgICAgYm9vbCBoYXNNaXBMZXZlbCA9ICF0ZXh0dXJlVHlwZS5pc1dyaXRhYmxlVGV4dHVyZSgp
ICYmIHRleHR1cmVUeXBlLnRleHR1cmVEaW1lbnNpb24oKSAhPSAxOworICAgICAgICBpZiAoaGFz
TWlwTGV2ZWwpCiAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICBhdXRvIHdpZHRoVHlwZU5h
bWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLnBhcmFtZXRlcnMoKVtpbmRleF0tPnR5cGUoKSk7CisgICAgICAgIGNvbnN0IFN0cmluZyYg
d2lkdGhOYW1lID0gYXJnc1tpbmRleF07CiAgICAgICAgICsraW5kZXg7Ci0gICAgICAgIFN0cmlu
ZyBoZWlnaHRUeXBlTmFtZTsKKyAgICAgICAgU3RyaW5nIGhlaWdodE5hbWU7CiAgICAgICAgIGlm
ICh0ZXh0dXJlVHlwZS50ZXh0dXJlRGltZW5zaW9uKCkgPj0gMikgewotICAgICAgICAgICAgaGVp
Z2h0VHlwZU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVtpbmRleF0tPnR5cGUoKSk7CisgICAgICAgICAgICBo
ZWlnaHROYW1lID0gYXJnc1tpbmRleF07CiAgICAgICAgICAgICArK2luZGV4OwogICAgICAgICB9
Ci0gICAgICAgIFN0cmluZyBkZXB0aFR5cGVOYW1lOworICAgICAgICBTdHJpbmcgZGVwdGhOYW1l
OwogICAgICAgICBpZiAodGV4dHVyZVR5cGUudGV4dHVyZURpbWVuc2lvbigpID49IDMpIHsKLSAg
ICAgICAgICAgIGRlcHRoVHlwZU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVtpbmRleF0tPnR5cGUoKSk7Cisg
ICAgICAgICAgICBkZXB0aE5hbWUgPSBhcmdzW2luZGV4XTsKICAgICAgICAgICAgICsraW5kZXg7
CiAgICAgICAgIH0KLSAgICAgICAgU3RyaW5nIGVsZW1lbnRzVHlwZU5hbWU7CisgICAgICAgIFN0
cmluZyBlbGVtZW50c05hbWU7CiAgICAgICAgIGlmICh0ZXh0dXJlVHlwZS5pc1RleHR1cmVBcnJh
eSgpKSB7Ci0gICAgICAgICAgICBlbGVtZW50c1R5cGVOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbaW5kZXhd
LT50eXBlKCkpOworICAgICAgICAgICAgZWxlbWVudHNOYW1lID0gYXJnc1tpbmRleF07CiAgICAg
ICAgICAgICArK2luZGV4OwogICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBudW1iZXJPZkxldmVs
c1R5cGVOYW1lOworICAgICAgICBTdHJpbmcgbnVtYmVyT2ZMZXZlbHNOYW1lOwogICAgICAgICBp
ZiAoIXRleHR1cmVUeXBlLmlzV3JpdGFibGVUZXh0dXJlKCkgJiYgdGV4dHVyZVR5cGUudGV4dHVy
ZURpbWVuc2lvbigpICE9IDEpIHsKLSAgICAgICAgICAgIG51bWJlck9mTGV2ZWxzVHlwZU5hbWUg
PSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnBhcmFtZXRlcnMoKVtpbmRleF0tPnR5cGUoKSk7CisgICAgICAgICAgICBudW1iZXJPZkxldmVs
c05hbWUgPSBhcmdzW2luZGV4XTsKICAgICAgICAgICAgICsraW5kZXg7CiAgICAgICAgIH0KICAg
ICAgICAgQVNTRVJUKGluZGV4ID09IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVy
cygpLnNpemUoKSk7CiAKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZSh0ZXh0dXJlVHlwZSk7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuZmxleGlibGVBcHBlbmQoInZvaWQgIiwgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFs
UGFyYW1ldGVyMU5hbWUsICIgdGhlVGV4dHVyZSIpOwotICAgICAgICBpZiAoIXRleHR1cmVUeXBl
LmlzV3JpdGFibGVUZXh0dXJlKCkgJiYgdGV4dHVyZVR5cGUudGV4dHVyZURpbWVuc2lvbigpICE9
IDEpCi0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiLCB1aW50IG1pcExldmVsIik7
Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiwgIiwgd2lkdGhUeXBlTmFt
ZSwgIiB3aWR0aCIpOwotICAgICAgICBpZiAoIWhlaWdodFR5cGVOYW1lLmlzTnVsbCgpKQotICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiLCAiLCBoZWlnaHRUeXBlTmFt
ZSwgIiBoZWlnaHQiKTsKLSAgICAgICAgaWYgKCFkZXB0aFR5cGVOYW1lLmlzTnVsbCgpKQotICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiLCAiLCBkZXB0aFR5cGVOYW1l
LCAiIGRlcHRoIik7Ci0gICAgICAgIGlmICghZWxlbWVudHNUeXBlTmFtZS5pc051bGwoKSkKLSAg
ICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiwgIiwgZWxlbWVudHNUeXBl
TmFtZSwgIiBlbGVtZW50cyIpOwotICAgICAgICBpZiAoIW51bWJlck9mTGV2ZWxzVHlwZU5hbWUu
aXNOdWxsKCkpCi0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIsICIs
IG51bWJlck9mTGV2ZWxzVHlwZU5hbWUsICIgbnVtYmVyT2ZMZXZlbHMiKTsKLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoCi0gICAgICAgICAgICAiKSB7XG4iCi0gICAgICAgICAgICAiICAg
IGlmICh3aWR0aClcbiIKLSAgICAgICAgICAgICIgICAgICAgICp3aWR0aCA9IHRoZVRleHR1cmUu
Z2V0X3dpZHRoKCIKLSAgICAgICAgKTsKLSAgICAgICAgaWYgKCF0ZXh0dXJlVHlwZS5pc1dyaXRh
YmxlVGV4dHVyZSgpICYmIHRleHR1cmVUeXBlLnRleHR1cmVEaW1lbnNpb24oKSAhPSAxKQotICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIm1pcExldmVsIik7CisgICAgICAgIC8vYXV0
byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSh0ZXh0
dXJlVHlwZSk7CisgICAgICAgIC8vc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgidm9pZCAi
LCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiB0aGVUZXh0
dXJlIik7CisgICAgICAgIC8vaWYgKCF0ZXh0dXJlVHlwZS5pc1dyaXRhYmxlVGV4dHVyZSgpICYm
IHRleHR1cmVUeXBlLnRleHR1cmVEaW1lbnNpb24oKSAhPSAxKQorICAgICAgICAvLyAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgiLCB1aW50IG1pcExldmVsIik7CisgICAgICAgIC8vc3RyaW5nQnVp
bGRlci5mbGV4aWJsZUFwcGVuZCgiLCAiLCB3aWR0aFR5cGVOYW1lLCAiIHdpZHRoIik7CisgICAg
ICAgIC8vaWYgKCFoZWlnaHRUeXBlTmFtZS5pc051bGwoKSkKKyAgICAgICAgLy8gICAgc3RyaW5n
QnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiLCAiLCBoZWlnaHRUeXBlTmFtZSwgIiBoZWlnaHQiKTsK
KyAgICAgICAgLy9pZiAoIWRlcHRoVHlwZU5hbWUuaXNOdWxsKCkpCisgICAgICAgIC8vICAgIHN0
cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiwgIiwgZGVwdGhUeXBlTmFtZSwgIiBkZXB0aCIp
OworICAgICAgICAvL2lmICghZWxlbWVudHNUeXBlTmFtZS5pc051bGwoKSkKKyAgICAgICAgLy8g
ICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiLCAiLCBlbGVtZW50c1R5cGVOYW1lLCAi
IGVsZW1lbnRzIik7CisgICAgICAgIC8vaWYgKCFudW1iZXJPZkxldmVsc1R5cGVOYW1lLmlzTnVs
bCgpKQorICAgICAgICAvLyAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIsICIsIG51
bWJlck9mTGV2ZWxzVHlwZU5hbWUsICIgbnVtYmVyT2ZMZXZlbHMiKTsKKyAgICAgICAgc3RyaW5n
QnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKKyAgICAgICAgICAgICJpZiAoIiwgd2lkdGhOYW1lLCAi
KVxuIgorICAgICAgICAgICAgIiAgICAqIiwgd2lkdGhOYW1lLCAiID0gIiwgYXJnc1swXSwgIi5n
ZXRfd2lkdGgoIik7CisKKyAgICAgICAgaWYgKGhhc01pcExldmVsKQorICAgICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoYXJnc1sxXSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCIpO1xuIik7Ci0gICAgICAgIGlmICghaGVpZ2h0VHlwZU5hbWUuaXNOdWxsKCkpIHsKLSAgICAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKAotICAgICAgICAgICAgICAgICIgICAgaWYgKGhl
aWdodClcbiIKLSAgICAgICAgICAgICAgICAiICAgICAgICAqaGVpZ2h0ID0gdGhlVGV4dHVyZS5n
ZXRfaGVpZ2h0KCIKLSAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBpZiAoIXRleHR1cmVUeXBl
LmlzV3JpdGFibGVUZXh0dXJlKCkgJiYgdGV4dHVyZVR5cGUudGV4dHVyZURpbWVuc2lvbigpICE9
IDEpCi0gICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIm1pcExldmVsIik7Cisg
ICAgICAgIGlmICghaGVpZ2h0TmFtZS5pc051bGwoKSkgeworICAgICAgICAgICAgc3RyaW5nQnVp
bGRlci5mbGV4aWJsZUFwcGVuZCgKKyAgICAgICAgICAgICAgICAiICAgIGlmICgiLCBoZWlnaHRO
YW1lLCAiKVxuIgorICAgICAgICAgICAgICAgICIgICAgICAgICoiLCBoZWlnaHROYW1lLCAiID0g
IiwgYXJnc1swXSwgIi5nZXRfaGVpZ2h0KCIpOworICAgICAgICAgICAgaWYgKGhhc01pcExldmVs
KQorICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGFyZ3NbMV0pOwogICAgICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIik7XG4iKTsKICAgICAgICAgfQotICAgICAgICBp
ZiAoIWRlcHRoVHlwZU5hbWUuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKAotICAgICAgICAgICAgICAgICIgICAgaWYgKGRlcHRoKVxuIgotICAgICAgICAgICAg
ICAgICIgICAgICAgICpkZXB0aCA9IHRoZVRleHR1cmUuZ2V0X2RlcHRoKCIKLSAgICAgICAgICAg
ICk7Ci0gICAgICAgICAgICBpZiAoIXRleHR1cmVUeXBlLmlzV3JpdGFibGVUZXh0dXJlKCkgJiYg
dGV4dHVyZVR5cGUudGV4dHVyZURpbWVuc2lvbigpICE9IDEpCi0gICAgICAgICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoIm1pcExldmVsIik7CisgICAgICAgIGlmICghZGVwdGhOYW1lLmlz
TnVsbCgpKSB7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAorICAg
ICAgICAgICAgICAgICIgICAgaWYgKCIsIGRlcHRoTmFtZSwgIilcbiIKKyAgICAgICAgICAgICAg
ICAiICAgICAgICAqIiwgZGVwdGhOYW1lLCAiID0gIiwgYXJnc1swXSwgIi5nZXRfZGVwdGgoIik7
CisgICAgICAgICAgICBpZiAoaGFzTWlwTGV2ZWwpCisgICAgICAgICAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoYXJnc1sxXSk7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgi
KTtcbiIpOwogICAgICAgICB9Ci0gICAgICAgIGlmICghZWxlbWVudHNUeXBlTmFtZS5pc051bGwo
KSkgewotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoCi0gICAgICAgICAgICAgICAg
IiAgICBpZiAoZWxlbWVudHMpXG4iCi0gICAgICAgICAgICAgICAgIiAgICAgICAgKmVsZW1lbnRz
ID0gdGhlVGV4dHVyZS5nZXRfYXJyYXlfc2l6ZSgpO1xuIgotICAgICAgICAgICAgKTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoIW51bWJlck9mTGV2ZWxzVHlwZU5hbWUuaXNOdWxsKCkpIHsKLSAg
ICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKAotICAgICAgICAgICAgICAgICIgICAgaWYg
KG51bWJlck9mTGV2ZWxzKVxuIgotICAgICAgICAgICAgICAgICIgICAgICAgICpudW1iZXJPZkxl
dmVscyA9IHRoZVRleHR1cmUuZ2V0X251bV9taXBfbGV2ZWxzKCk7XG4iCi0gICAgICAgICAgICAp
OworICAgICAgICBpZiAoIWVsZW1lbnRzTmFtZS5pc051bGwoKSkgeworICAgICAgICAgICAgc3Ry
aW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKKyAgICAgICAgICAgICAgICAiICAgIGlmICgiLCBl
bGVtZW50c05hbWUsICIpXG4iCisgICAgICAgICAgICAgICAgIiAgICAgICAgKiIsIGVsZW1lbnRz
TmFtZSwgIiA9ICIsIGFyZ3NbMF0sICIuZ2V0X2FycmF5X3NpemUoKTtcbiIpOworICAgICAgICB9
CisgICAgICAgIGlmICghbnVtYmVyT2ZMZXZlbHNOYW1lLmlzTnVsbCgpKSB7CisgICAgICAgICAg
ICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAorICAgICAgICAgICAgICAgICIgICAgaWYg
KCIsIG51bWJlck9mTGV2ZWxzTmFtZSwgIilcbiIKKyAgICAgICAgICAgICAgICAiICAgICAgICAq
IiwgbnVtYmVyT2ZMZXZlbHNOYW1lLCAiID0gIiwgYXJnc1swXSwgIi5nZXRfbnVtX21pcF9sZXZl
bHMoKTtcbiIpOwogICAgICAgICB9Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4i
KTsKLSAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9
PSAiU2FtcGxlQmlhcyIpIHsKQEAgLTc0Miw0NiArNzk5LDgzIEBAIFN0cmluZyB3cml0ZU5hdGl2
ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnUKICAgICAgICAgYXV0byYgbG9jYXRpb25UeXBlID0gZG93
bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KGRvd25jYXN0PEFTVDo6TmFtZWRUeXBl
PihuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsyXS0+dHlwZSgpLT51bmlm
eU5vZGUoKSkpOwogICAgICAgICBhdXRvIGxvY2F0aW9uVmVjdG9yTGVuZ3RoID0gdmVjdG9yTGVu
Z3RoKGxvY2F0aW9uVHlwZSk7CiAKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0g
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSh0ZXh0dXJlVHlwZSk7Ci0gICAgICAgIGF1dG8g
bWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoaXRlbVR5
cGUpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyM05hbWUgPSB0eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKGxvY2F0aW9uVHlwZSk7CisgICAgICAgIC8vYXV0byBtZXRhbFBhcmFtZXRl
cjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSh0ZXh0dXJlVHlwZSk7CisgICAg
ICAgIC8vYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9y
VHlwZShpdGVtVHlwZSk7CisgICAgICAgIC8vYXV0byBtZXRhbFBhcmFtZXRlcjNOYW1lID0gdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShsb2NhdGlvblR5cGUpOwogICAgICAgICBhdXRvIG1l
dGFsSW5uZXJUeXBlTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoaXRlbVZlY3Rv
cklubmVyVHlwZSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoInZvaWQg
Iiwgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUsICIgdGhlVGV4
dHVyZSwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBpdGVtLCAiLCBtZXRhbFBhcmFtZXRlcjNO
YW1lLCAiIGxvY2F0aW9uKSB7XG4iKTsKKyAgICAgICAgLy9zdHJpbmdCdWlsZGVyLmZsZXhpYmxl
QXBwZW5kKCJ2b2lkICIsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFO
YW1lLCAiIHRoZVRleHR1cmUsICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgaXRlbSwgIiwgbWV0
YWxQYXJhbWV0ZXIzTmFtZSwgIiBsb2NhdGlvbikge1xuIik7CisgICAgICAgIC8vaWYgKHRleHR1
cmVUeXBlLmlzVGV4dHVyZUFycmF5KCkpIHsKKyAgICAgICAgLy8gICAgQVNTRVJUKGxvY2F0aW9u
VmVjdG9yTGVuZ3RoID4gMSk7CisgICAgICAgIC8vICAgIFN0cmluZyBkaW1lbnNpb25zW10gPSB7
ICJ3aWR0aCJfc3RyLCAiaGVpZ2h0Il9zdHIsICJkZXB0aCJfc3RyIH07CisgICAgICAgIC8vICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbG9jYXRpb25WZWN0b3JMZW5ndGggLSAxOyArK2kpIHsKKyAg
ICAgICAgLy8gICAgICAgIGF1dG8gc3VmZml4ID0gInh5enciX3N0ci5zdWJzdHJpbmcoaSwgMSk7
CisgICAgICAgIC8vICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIgICAgaWYg
KGxvY2F0aW9uLiIsIHN1ZmZpeCwgIiA+PSB0aGVUZXh0dXJlLmdldF8iLCBkaW1lbnNpb25zW2ld
LCAiKCkpIHJldHVybjtcbiIpOworICAgICAgICAvLyAgICB9CisgICAgICAgIC8vICAgIGF1dG8g
c3VmZml4ID0gInh5enciX3N0ci5zdWJzdHJpbmcobG9jYXRpb25WZWN0b3JMZW5ndGggLSAxLCAx
KTsKKyAgICAgICAgLy8gICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiICAgIGlmIChs
b2NhdGlvbi4iLCBzdWZmaXgsICIgPj0gdGhlVGV4dHVyZS5nZXRfYXJyYXlfc2l6ZSgpKSByZXR1
cm47XG4iKTsKKyAgICAgICAgLy99IGVsc2UgeworICAgICAgICAvLyAgICBpZiAobG9jYXRpb25W
ZWN0b3JMZW5ndGggPT0gMSkKKyAgICAgICAgLy8gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCIgICAgaWYgKGxvY2F0aW9uID49IHRoZVRleHR1cmUuZ2V0X3dpZHRoKCkpIHJldHVybjtcbiIp
OworICAgICAgICAvLyAgICBlbHNlIHsKKyAgICAgICAgLy8gICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKAorICAgICAgICAvLyAgICAgICAgICAgICIgICAgaWYgKGxvY2F0aW9uLnggPj0gdGhl
VGV4dHVyZS5nZXRfd2lkdGgoKSkgcmV0dXJuO1xuIgorICAgICAgICAvLyAgICAgICAgICAgICIg
ICAgaWYgKGxvY2F0aW9uLnkgPj0gdGhlVGV4dHVyZS5nZXRfaGVpZ2h0KCkpIHJldHVybjtcbiIK
KyAgICAgICAgLy8gICAgICAgICk7CisgICAgICAgIC8vICAgICAgICBpZiAobG9jYXRpb25WZWN0
b3JMZW5ndGggPj0gMykKKyAgICAgICAgLy8gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgiICAgIGlmIChsb2NhdGlvbi56ID49IHRoZVRleHR1cmUuZ2V0X2RlcHRoKCkpIHJldHVybjtc
biIpOworICAgICAgICAvLyAgICB9CisgICAgICAgIC8vfQorICAgICAgICAvL3N0cmluZ0J1aWxk
ZXIuZmxleGlibGVBcHBlbmQoIiAgICB0aGVUZXh0dXJlLndyaXRlKHZlYzwiLCBtZXRhbElubmVy
VHlwZU5hbWUsICIsIDQ+KGl0ZW0iKTsKKyAgICAgICAgLy9mb3IgKGludCBpID0gMDsgaSA8IDQg
LSBpdGVtVmVjdG9yTGVuZ3RoOyArK2kpCisgICAgICAgIC8vICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKCIsIDAiKTsKKyAgICAgICAgLy9zdHJpbmdCdWlsZGVyLmFwcGVuZCgiKSwgIik7CisgICAg
ICAgIC8vaWYgKHRleHR1cmVUeXBlLmlzVGV4dHVyZUFycmF5KCkpIHsKKyAgICAgICAgLy8gICAg
QVNTRVJUKGxvY2F0aW9uVmVjdG9yTGVuZ3RoID4gMSk7CisgICAgICAgIC8vICAgIHN0cmluZ0J1
aWxkZXIuZmxleGlibGVBcHBlbmQoInVpbnQiLCB2ZWN0b3JTdWZmaXgobG9jYXRpb25WZWN0b3JM
ZW5ndGggLSAxKSwgIihsb2NhdGlvbi4iLCAieHl6dyJfc3RyLnN1YnN0cmluZygwLCBsb2NhdGlv
blZlY3Rvckxlbmd0aCAtIDEpLCAiKSwgdWludChsb2NhdGlvbi4iLCAieHl6dyJfc3RyLnN1YnN0
cmluZyhsb2NhdGlvblZlY3Rvckxlbmd0aCAtIDEsIDEpLCAnKScpOworICAgICAgICAvL30gZWxz
ZQorICAgICAgICAvLyAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCJ1aW50IiwgdmVj
dG9yU3VmZml4KGxvY2F0aW9uVmVjdG9yTGVuZ3RoKSwgIihsb2NhdGlvbikiKTsKKyAgICAgICAg
Ly9zdHJpbmdCdWlsZGVyLmFwcGVuZCgKKyAgICAgICAgLy8gICAgIik7XG4iCisgICAgICAgIC8v
ICAgICJ9XG4iCisgICAgICAgIC8vKTsKKyAgICAgICAgLy9yZXR1cm4gc3RyaW5nQnVpbGRlci50
b1N0cmluZygpOworCisKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoImRvIHtcbiIpOwog
ICAgICAgICBpZiAodGV4dHVyZVR5cGUuaXNUZXh0dXJlQXJyYXkoKSkgewogICAgICAgICAgICAg
QVNTRVJUKGxvY2F0aW9uVmVjdG9yTGVuZ3RoID4gMSk7CiAgICAgICAgICAgICBTdHJpbmcgZGlt
ZW5zaW9uc1tdID0geyAid2lkdGgiX3N0ciwgImhlaWdodCJfc3RyLCAiZGVwdGgiX3N0ciB9Owog
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsb2NhdGlvblZlY3Rvckxlbmd0aCAtIDE7
ICsraSkgewogICAgICAgICAgICAgICAgIGF1dG8gc3VmZml4ID0gInh5enciX3N0ci5zdWJzdHJp
bmcoaSwgMSk7Ci0gICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgi
ICAgIGlmIChsb2NhdGlvbi4iLCBzdWZmaXgsICIgPj0gdGhlVGV4dHVyZS5nZXRfIiwgZGltZW5z
aW9uc1tpXSwgIigpKSByZXR1cm47XG4iKTsKKyAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVy
LmZsZXhpYmxlQXBwZW5kKCIgICAgaWYgKCIsIGFyZ3NbMl0sICIuIiwgc3VmZml4LCAiID49ICIs
IGFyZ3NbMF0sICIuZ2V0XyIsIGRpbWVuc2lvbnNbaV0sICIoKSkgYnJlYWs7XG4iKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGF1dG8gc3VmZml4ID0gInh5enciX3N0ci5zdWJzdHJpbmco
bG9jYXRpb25WZWN0b3JMZW5ndGggLSAxLCAxKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIu
ZmxleGlibGVBcHBlbmQoIiAgICBpZiAobG9jYXRpb24uIiwgc3VmZml4LCAiID49IHRoZVRleHR1
cmUuZ2V0X2FycmF5X3NpemUoKSkgcmV0dXJuO1xuIik7CisgICAgICAgICAgICBzdHJpbmdCdWls
ZGVyLmZsZXhpYmxlQXBwZW5kKCIgICAgaWYgKCIsIGFyZ3NbMl0sICcuJywgc3VmZml4LCAiID49
ICIsIGFyZ3NbMF0sICIuZ2V0X2FycmF5X3NpemUoKSkgYnJlYWs7XG4iKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIGlmIChsb2NhdGlvblZlY3Rvckxlbmd0aCA9PSAxKQotICAgICAg
ICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAgaWYgKGxvY2F0aW9uID49IHRoZVRl
eHR1cmUuZ2V0X3dpZHRoKCkpIHJldHVybjtcbiIpOworICAgICAgICAgICAgICAgIHN0cmluZ0J1
aWxkZXIuZmxleGlibGVBcHBlbmQoIiAgICBpZiAoIiwgYXJnc1syXSwgIiA+PSAiLCBhcmdzWzBd
LCAiLmdldF93aWR0aCgpKSBicmVhaztcbiIpOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICIgICAg
aWYgKGxvY2F0aW9uLnggPj0gdGhlVGV4dHVyZS5nZXRfd2lkdGgoKSkgcmV0dXJuO1xuIgotICAg
ICAgICAgICAgICAgICAgICAiICAgIGlmIChsb2NhdGlvbi55ID49IHRoZVRleHR1cmUuZ2V0X2hl
aWdodCgpKSByZXR1cm47XG4iCi0gICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICBz
dHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAorICAgICAgICAgICAgICAgICAgICAiICAgIGlm
ICgiLCBhcmdzWzJdLCAiLnggPj0gIiwgYXJnc1swXSwgIi5nZXRfd2lkdGgoKSkgYnJlYWs7XG4i
CisgICAgICAgICAgICAgICAgICAgICIgICAgaWYgKCIsIGFyZ3NbMl0sICIueSA+PSAiLCBhcmdz
WzBdLCAiLmdldF9oZWlnaHQoKSkgYnJlYWs7XG4iKTsKICAgICAgICAgICAgICAgICBpZiAobG9j
YXRpb25WZWN0b3JMZW5ndGggPj0gMykKLSAgICAgICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoIiAgICBpZiAobG9jYXRpb24ueiA+PSB0aGVUZXh0dXJlLmdldF9kZXB0aCgpKSBy
ZXR1cm47XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFw
cGVuZCgiICAgIGlmICgiLCBhcmdzWzJdLCAiLnogPj0gIiwgYXJnc1swXSwgIi5nZXRfZGVwdGgo
KSkgYnJlYWs7XG4iKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBzdHJpbmdC
dWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIgICAgdGhlVGV4dHVyZS53cml0ZSh2ZWM8IiwgbWV0YWxJ
bm5lclR5cGVOYW1lLCAiLCA0PihpdGVtIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGli
bGVBcHBlbmQoIiAgICAiLCBhcmdzWzBdLCAiLndyaXRlKHZlYzwiLCBtZXRhbElubmVyVHlwZU5h
bWUsICIsIDQ+KCIsIGFyZ3NbMV0pOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQgLSBp
dGVtVmVjdG9yTGVuZ3RoOyArK2kpCiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgi
LCAwIik7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIpLCAiKTsKICAgICAgICAgaWYg
KHRleHR1cmVUeXBlLmlzVGV4dHVyZUFycmF5KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChsb2Nh
dGlvblZlY3Rvckxlbmd0aCA+IDEpOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJs
ZUFwcGVuZCgidWludCIsIHZlY3RvclN1ZmZpeChsb2NhdGlvblZlY3Rvckxlbmd0aCAtIDEpLCAi
KGxvY2F0aW9uLiIsICJ4eXp3Il9zdHIuc3Vic3RyaW5nKDAsIGxvY2F0aW9uVmVjdG9yTGVuZ3Ro
IC0gMSksICIpLCB1aW50KGxvY2F0aW9uLiIsICJ4eXp3Il9zdHIuc3Vic3RyaW5nKGxvY2F0aW9u
VmVjdG9yTGVuZ3RoIC0gMSwgMSksICcpJyk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZs
ZXhpYmxlQXBwZW5kKCJ1aW50IiwgdmVjdG9yU3VmZml4KGxvY2F0aW9uVmVjdG9yTGVuZ3RoIC0g
MSksICcoJywgYXJnc1syXSwgJy4nLCAieHl6dyJfc3RyLnN1YnN0cmluZygwLCBsb2NhdGlvblZl
Y3Rvckxlbmd0aCAtIDEpLCAiKSwgdWludCgiLCBhcmdzWzJdLCAiLiIsICJ4eXp3Il9zdHIuc3Vi
c3RyaW5nKGxvY2F0aW9uVmVjdG9yTGVuZ3RoIC0gMSwgMSksICcpJyk7CiAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgidWludCIsIHZlY3Rv
clN1ZmZpeChsb2NhdGlvblZlY3Rvckxlbmd0aCksICIobG9jYXRpb24pIik7CisgICAgICAgICAg
ICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCJ1aW50IiwgdmVjdG9yU3VmZml4KGxvY2F0
aW9uVmVjdG9yTGVuZ3RoKSwgJygnLCBhcmdzWzJdLCAnKScpOwogICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCgKICAgICAgICAgICAgICIpO1xuIgotICAgICAgICAgICAgIn1cbiIKLSAgICAg
ICAgKTsKLSAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAg
ICAgICJ9IHdoaWxlKDApO1xuIik7CisKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlm
IChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiR2F0aGVyQWxwaGEiKSB7CkBA
IC04MTAsNyArOTA0LDYgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVG
dQogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBTdHJpbmco
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgTWV0YWwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5h
dGl2ZUZ1bmN0aW9uV3JpdGVyLmgJKHJldmlzaW9uIDI0ODEwNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBuYW1lc3BhY2UgTWV0YWwgewogCiBjbGFz
cyBUeXBlTmFtZXI7CiAKLVN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbiYsIFN0cmluZyYgb3V0cHV0RnVuY3Rpb25OYW1lLCBJbnRyaW5zaWNz
JiwgVHlwZU5hbWVyJik7Cit2b2lkIGlubGluZU5hdGl2ZUZ1bmN0aW9uKFN0cmluZ0J1aWxkZXIm
LCBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mLCBTdHJpbmcgcmV0dXJuTmFtZSwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGFyZ3VtZW50TmFtZXMsIEludHJpbnNpY3MmLCBUeXBlTmFtZXIm
KTsKIAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29j
b2EvR1BVQ29tcHV0ZVBpcGVsaW5lTWV0YWwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbXB1dGVQaXBlbGluZU1ldGFsLm1t
CShyZXZpc2lvbiAyNDgwOTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvY29jb2EvR1BVQ29tcHV0ZVBpcGVsaW5lTWV0YWwubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1
LDYgKzM1LDggQEAKICNpbXBvcnQgPE1ldGFsL01ldGFsLmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tP
YmpDRXhjZXB0aW9ucy5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4K
KyNpbXBvcnQgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CisjaW1wb3J0IDx3dGYvRGF0YUxvZy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTg1LDEyICs4NywxNCBAQCBzdGF0aWMgT3B0aW9u
YWw8V0hMU0w6OkNvbXB1dGVEaW1lbnNpb25zCiAgICAgICAgIE5TRXJyb3IgKmVycm9yID0gbmls
OwogCiAgICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICAgICAgYXV0byBz
dGFydCA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogICAgICAgICBjb21wdXRlTGlicmFyeSA9IGFk
b3B0TlMoW2RldmljZS5wbGF0Zm9ybURldmljZSgpIG5ld0xpYnJhcnlXaXRoU291cmNlOndobHNs
Q29tcGlsZVJlc3VsdC0+bWV0YWxTb3VyY2Ugb3B0aW9uczpuaWwgZXJyb3I6JmVycm9yXSk7Cisg
ICAgICAgIGRhdGFMb2dMbigibWV0YWwgY29tcGlsZSB0b29rOiAiLCAoTW9ub3RvbmljVGltZTo6
bm93KCkgLSBzdGFydCkubWlsbGlzZWNvbmRzKCksICIgbXMiKTsKICAgICAgICAgRU5EX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKLSNpZm5kZWYgTkRFQlVHCisvLyNpZm5kZWYgTkRFQlVHCiAgICAg
ICAgIGlmICghY29tcHV0ZUxpYnJhcnkpCiAgICAgICAgICAgICBOU0xvZyhAIiVAIiwgZXJyb3Ip
OwotI2VuZGlmCisvLyNlbmRpZgogICAgICAgICBBU1NFUlQoY29tcHV0ZUxpYnJhcnkpOwogICAg
ICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
NTc3MSBPbmNlIHdlIHplcm8tZmlsbCB2YXJpYWJsZXMsIHRoZXJlIHNob3VsZCBiZSBubyB3YXJu
aW5ncywgc28gd2Ugc2hvdWxkIGJlIGFibGUgdG8gQVNTRVJUKCFlcnJvcikgaGVyZS4KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375559</attachid>
            <date>2019-08-05 14:32:47 -0700</date>
            <delta_ts>2019-08-05 14:43:34 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>49554</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0ODI3MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDE5LTA4LTA1ICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gSW5saW5lIGFsbCBu
YXRpdmUgZnVuY3Rpb24gY2FsbHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMDM1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE5hdGl2ZSBmdW5jdGlvbnMgY2FsbHMgdGVuZCB0byBiZSByZWFsbHkgc21h
bGwuIElmIHdlIGlubGluZSBpbiB0aGUgZ2VuZXJhdGVkCisgICAgICAgIE1ldGFsIGNvZGUsIHdl
IGVuZCB1cCB3aXRoIGZhc3RlciBNZXRhbCBjb21waWxlIHRpbWVzLiBPbiBjb21wdXRlX2JvaWRz
LCB0aGlzCisgICAgICAgIHByb3ZpZGVzIGEgfjEwbXMgaW1wcm92ZW1lbnQuCisKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2
aXNpdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OnNoYXJlZE1ldGFsRnVuY3Rp
b25zKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1
bmN0aW9uV3JpdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6aW5saW5l
TmF0aXZlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjp3cml0ZU5h
dGl2ZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9N
ZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L2NvY29hL0dQVUNvbXB1dGVQaXBlbGluZU1ldGFsLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6dHJ5U2V0RnVuY3Rpb25zKToKKwogMjAxOS0wOC0wNSAgVGFrYXNoaSBLb21vcmkgIDxU
YWthc2hpLktvbW9yaUBzb255LmNvbT4KIAogICAgICAgICBbQ3VybF0gaW1wbGVtZW50IENlcnRp
ZmljYXRlSW5mbzo6c3VtbWFyeUluZm8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0
ZXIuY3BwCShyZXZpc2lvbiAyNDgyNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjI4LDExICsyMjgsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgT3B0aW9uYWw8TWFuZ2xlZFZhcmlhYmxl
TmFtZT4gbV9icmVha091dE9mQ3VycmVudExvb3BFYXJseVZhcmlhYmxlOwogfTsKIAotdm9pZCBG
dW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikKK3ZvaWQgRnVuY3Rpb25EZWZpbml0aW9u
V3JpdGVyOjp2aXNpdChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mKQogewotICAgIGF1
dG8gaXRlcmF0b3IgPSBtX2Z1bmN0aW9uTWFwcGluZy5maW5kKCZuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uKTsKLSAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV9mdW5jdGlvbk1hcHBpbmcuZW5kKCkp
OwotICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQod3JpdGVOYXRpdmVGdW5jdGlvbihuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLCBpdGVyYXRvci0+dmFsdWUsIG1faW50cmluc2ljcywgbV90eXBl
TmFtZXIpKTsKKyAgICAvLyBXZSBpbmxpbmUgbmF0aXZlIGZ1bmN0aW9uIGNhbGxzLgogfQogCiB2
b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRp
b24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKQEAgLTU3NywxOSArNTc1LDMxIEBAIHZvaWQgRnVuY3Rp
b25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1QKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KGFyZ3VtZW50KTsKICAgICAgICAgYXJndW1lbnROYW1lcy5hcHBlbmQodGFrZUxhc3RWYWx1ZSgp
KTsKICAgICB9Ci0gICAgYXV0byBpdGVyYXRvciA9IG1fZnVuY3Rpb25NYXBwaW5nLmZpbmQoJmNh
bGxFeHByZXNzaW9uLmZ1bmN0aW9uKCkpOwotICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX2Z1bmN0
aW9uTWFwcGluZy5lbmQoKSk7Ci0gICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRW
YXJpYWJsZU5hbWUoKTsKLSAgICBpZiAoIW1hdGNoZXMoY2FsbEV4cHJlc3Npb24ucmVzb2x2ZWRU
eXBlKCksIG1faW50cmluc2ljcy52b2lkVHlwZSgpKSkKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVy
LmZsZXhpYmxlQXBwZW5kKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShjYWxsRXhwcmVz
c2lvbi5yZXNvbHZlZFR5cGUoKSksICcgJywgdmFyaWFibGVOYW1lLCAiID0gIik7Ci0gICAgbV9z
dHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKGl0ZXJhdG9yLT52YWx1ZSwgJygnKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50TmFtZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgaWYgKGkpCi0gICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIsICIpOwotICAg
ICAgICBtX3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoYXJndW1lbnROYW1lc1tpXSk7CisK
KyAgICBib29sIGlzVm9pZCA9IG1hdGNoZXMoY2FsbEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCks
IG1faW50cmluc2ljcy52b2lkVHlwZSgpKTsKKyAgICBNYW5nbGVkVmFyaWFibGVOYW1lIHJldHVy
bk5hbWU7CisgICAgaWYgKCFpc1ZvaWQpIHsKKyAgICAgICAgcmV0dXJuTmFtZSA9IGdlbmVyYXRl
TmV4dFZhcmlhYmxlTmFtZSgpOworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBl
bmQobV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGNhbGxFeHByZXNzaW9uLnJlc29sdmVk
VHlwZSgpKSwgJyAnLCByZXR1cm5OYW1lLCAiO1xuIik7CisgICAgfQorCisgICAgaWYgKGlzPEFT
VDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4oY2FsbEV4cHJlc3Npb24uZnVuY3Rpb24oKSkp
CisgICAgICAgIGlubGluZU5hdGl2ZUZ1bmN0aW9uKG1fc3RyaW5nQnVpbGRlciwgZG93bmNhc3Q8
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPihjYWxsRXhwcmVzc2lvbi5mdW5jdGlvbigp
KSwgcmV0dXJuTmFtZSwgYXJndW1lbnROYW1lcywgbV9pbnRyaW5zaWNzLCBtX3R5cGVOYW1lcik7
CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Z1bmN0aW9uTWFwcGluZy5m
aW5kKCZjYWxsRXhwcmVzc2lvbi5mdW5jdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKGl0ZXJhdG9y
ICE9IG1fZnVuY3Rpb25NYXBwaW5nLmVuZCgpKTsKKyAgICAgICAgaWYgKCFpc1ZvaWQpCisgICAg
ICAgICAgICBtX3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQocmV0dXJuTmFtZSwgIiA9ICIp
OworICAgICAgICBtX3N0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoaXRlcmF0b3ItPnZhbHVl
LCAnKCcpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50TmFtZXMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpKQorICAgICAgICAgICAgICAgIG1fc3RyaW5n
QnVpbGRlci5hcHBlbmQoIiwgIik7CisgICAgICAgICAgICBtX3N0cmluZ0J1aWxkZXIuZmxleGli
bGVBcHBlbmQoYXJndW1lbnROYW1lc1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgbV9zdHJpbmdC
dWlsZGVyLmFwcGVuZCgiKTtcbiIpOwogICAgIH0KLSAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KCIpO1xuIik7Ci0gICAgYXBwZW5kUmlnaHRWYWx1ZShjYWxsRXhwcmVzc2lvbiwgdmFyaWFibGVO
YW1lKTsKKworICAgIGFwcGVuZFJpZ2h0VmFsdWUoY2FsbEV4cHJlc3Npb24sIHJldHVybk5hbWUp
OwogfQogCiB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpDb21tYUV4
cHJlc3Npb24mIGNvbW1hRXhwcmVzc2lvbikKQEAgLTgwNCwxMCArODE0LDYgQEAgc3RhdGljIFNo
YXJlZE1ldGFsRnVuY3Rpb25zUmVzdWx0IHNoYXJlZAogCiAgICAgdW5zaWduZWQgbnVtRnVuY3Rp
b25zID0gMDsKICAgICBIYXNoTWFwPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiosIE1hbmdsZWRG
dW5jdGlvbk5hbWU+IGZ1bmN0aW9uTWFwcGluZzsKLSAgICBmb3IgKGF1dG8mIG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkpIHsK
LSAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBmdW5jdGlvbk1hcHBpbmcuYWRkKCZuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLCBNYW5nbGVkRnVuY3Rpb25OYW1lIHsgbnVtRnVuY3Rpb25zKysgfSk7
Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7
Ci0gICAgfQogICAgIGZvciAoYXV0byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5j
dGlvbkRlZmluaXRpb25zKCkpIHsKICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBmdW5jdGlvbk1h
cHBpbmcuYWRkKCZmdW5jdGlvbkRlZmluaXRpb24sIE1hbmdsZWRGdW5jdGlvbk5hbWUgeyBudW1G
dW5jdGlvbnMrKyB9KTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3Vs
dC5pc05ld0VudHJ5KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25X
cml0ZXIuY3BwCShyZXZpc2lvbiAyNDgyNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTIwLDI2ICsxMjAsMjAgQEAgc3RhdGljIGNvbnN0IGNoYXIqIHZlY3RvclN1ZmZp
eChpbnQgdmVjdAogICAgIH0KIH0KIAotU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLCBNYW5n
bGVkRnVuY3Rpb25OYW1lIG91dHB1dEZ1bmN0aW9uTmFtZSwgSW50cmluc2ljcyYgaW50cmluc2lj
cywgVHlwZU5hbWVyJiB0eXBlTmFtZXIpCit2b2lkIGlubGluZU5hdGl2ZUZ1bmN0aW9uKFN0cmlu
Z0J1aWxkZXImIHN0cmluZ0J1aWxkZXIsIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYg
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiwgTWFuZ2xlZFZhcmlhYmxlTmFtZSByZXR1cm5OYW1l
LCBjb25zdCBWZWN0b3I8TWFuZ2xlZFZhcmlhYmxlTmFtZT4mIGFyZ3MsIEludHJpbnNpY3MmIGlu
dHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyKQogewotICAgIFN0cmluZ0J1aWxkZXIgc3Ry
aW5nQnVpbGRlcjsKICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5pc0Nhc3QoKSkg
ewogICAgICAgICBhdXRvJiByZXR1cm5UeXBlID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50
eXBlKCk7CiAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZShyZXR1cm5UeXBlKTsKICAgICAgICAgaWYgKCFuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkpIHsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIu
ZmxleGlibGVBcHBlbmQoCi0gICAgICAgICAgICAgICAgbWV0YWxSZXR1cm5OYW1lLCAnICcsIG91
dHB1dEZ1bmN0aW9uTmFtZSwgIigpIHtcbiIKLSAgICAgICAgICAgICAgICAiICAgICIsIG1ldGFs
UmV0dXJuTmFtZSwgIiB4ID0geyB9O1xuIgotICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHg7
XG4iCi0gICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBy
ZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRl
ci5mbGV4aWJsZUFwcGVuZChyZXR1cm5OYW1lLCAiID0geyB9O1xuIik7CisgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEpOwogICAgICAgICBhdXRvJiBwYXJhbWV0ZXJU
eXBlID0gKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCk7
CiAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1l
Rm9yVHlwZShwYXJhbWV0ZXJUeXBlKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFw
cGVuZChtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFs
UGFyYW1ldGVyTmFtZSwgIiB4KSB7XG4iKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJs
ZUFwcGVuZCgie1xuIiwgbWV0YWxQYXJhbWV0ZXJOYW1lLCAiIHggPSAiLCBhcmdzWzBdLCAiO1xu
Iik7CiAKICAgICAgICAgewogICAgICAgICAgICAgYXV0byBpc0VudW1lcmF0aW9uRGVmaW5pdGlv
biA9IFtdIChhdXRvJiB0eXBlKSB7CkBAIC0xNjAsNTIgKzE1NCwzMiBAQCBTdHJpbmcgd3JpdGVO
YXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1CiAgICAgICAgIH0KIAogICAgICAgICBzdHJpbmdC
dWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgIiAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8IiwgbWV0YWxSZXR1cm5OYW1lLCAiPih4KTtcbiIKLSAgICAgICAgICAgICJ9XG4iCi0gICAg
ICAgICk7Ci0gICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgfQor
ICAgICAgICAgICAgcmV0dXJuTmFtZSwgIiA9IHN0YXRpY19jYXN0PCIsIG1ldGFsUmV0dXJuTmFt
ZSwgIj4oeCk7XG59XG4iKTsKIAotICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5h
bWUoKSA9PSAib3BlcmF0b3IudmFsdWUiKSB7Ci0gICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMSk7Ci0gICAgICAgIGF1dG8gbWV0
YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7Ci0gICAgICAgIGF1dG8g
bWV0YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVB
cHBlbmQoCi0gICAgICAgICAgICBtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25O
YW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIiB4KSB7XG4iCi0gICAgICAgICAgICAiICAg
IHJldHVybiBzdGF0aWNfY2FzdDwiLCBtZXRhbFJldHVybk5hbWUsICI+KHgpO1xuIgotICAgICAg
ICAgICAgIn1cbiIKLSAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9T
dHJpbmcoKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MDc3IEF1dGhvcnMgY2FuIG1ha2Ug
YSBzdHJ1Y3QgZmllbGQgbmFtZWQgImxlbmd0aCIgdG9vLiBBdXRvZ2VuZXJhdGVkIGdldHRlcnMg
Zm9yIHRob3NlIHNob3VsZG4ndCB0YWtlIHRoaXMgY29kZXBhdGguCiAgICAgaWYgKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJvcGVyYXRvci5sZW5ndGgiKSB7CiAgICAgICAg
IEFTU0VSVF9VTlVTRUQoaW50cmluc2ljcywgbWF0Y2hlcyhuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLnR5cGUoKSwgaW50cmluc2ljcy51aW50VHlwZSgpKSk7CiAgICAgICAgIEFTU0VSVChuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMSk7Ci0gICAgICAg
IGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgq
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CiAgICAg
ICAgIGF1dG8mIHBhcmFtZXRlclR5cGUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKVswXS0+dHlwZSgpLT51bmlmeU5vZGUoKTsKICAgICAgICAgYXV0byYgdW5uYW1lZFBh
cmFtZXRlclR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPihwYXJhbWV0ZXJUeXBlKTsK
ICAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkUGFyYW1ldGVyVHlwZSkpIHsK
ICAgICAgICAgICAgIGF1dG8mIGFycmF5UGFyYW1ldGVyVHlwZSA9IGRvd25jYXN0PEFTVDo6QXJy
YXlUeXBlPih1bm5hbWVkUGFyYW1ldGVyVHlwZSk7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVy
LmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgICAgICJ1aW50ICIsIG91dHB1dEZ1bmN0aW9u
TmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIpIHtcbiIKLSAgICAgICAgICAgICAgICAi
ICAgIHJldHVybiAiLCBhcnJheVBhcmFtZXRlclR5cGUubnVtRWxlbWVudHMoKSwgIjtcbiIKLSAg
ICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIHJldHVybiBz
dHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuTmFtZSwgIiA9
ICIsIGFycmF5UGFyYW1ldGVyVHlwZS5udW1FbGVtZW50cygpLCAiO1xuIik7CisgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQoaXM8QVNUOjpBcnJheVJlZmVy
ZW5jZVR5cGU+KHVubmFtZWRQYXJhbWV0ZXJUeXBlKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIu
ZmxleGlibGVBcHBlbmQoCi0gICAgICAgICAgICAidWludCAiLCBvdXRwdXRGdW5jdGlvbk5hbWUs
ICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1lLCAiIHYpIHtcbiIKLSAgICAgICAgICAgICIgICAgcmV0
dXJuIHYubGVuZ3RoO1xuIgotICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgKTsKLSAgICAgICAg
cmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIHJldHVybk5hbWUs
ICIgPSAiLCBhcmdzWzBdLCAiLmxlbmd0aDtcbiIpOworICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN0YXJ0c1dpdGgoIm9w
ZXJhdG9yLiJfc3RyKSkgewotICAgICAgICBhdXRvIGFwcGVuZE1hbmdsZWRGaWVsZE5hbWUgPSBb
Jl0oU3RyaW5nQnVpbGRlciYgc3RyaW5nQnVpbGRlciwgY29uc3QgU3RyaW5nJiBmaWVsZE5hbWUp
IHsKKyAgICAgICAgYXV0byBhcHBlbmRNYW5nbGVkRmllbGROYW1lID0gWyZdIChjb25zdCBTdHJp
bmcmIGZpZWxkTmFtZSkgewogICAgICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKS0+dW5pZnlOb2RlKCk7CiAg
ICAgICAgICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5p
ZnlOb2RlKTsKICAgICAgICAgICAgIGlmIChpczxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5h
bWVkVHlwZSkpIHsKQEAgLTIyMSw1MyArMTk1LDM0IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0
aW9uKEFTVDo6TmF0aXZlRnUKIAogICAgICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5uYW1lKCkuZW5kc1dpdGgoIj0iKSkgewogICAgICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsKLSAgICAgICAgICAgIGF1
dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwotICAgICAg
ICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9y
VHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7
Ci0gICAgICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwotICAgICAgICAgICAg
c3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAgICAgICAgICAgICAgICBtZXRhbFJldHVy
bk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUs
ICIgdiwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBuKSB7XG4iCi0gICAgICAgICAgICAgICAg
IiAgICB2LiIKLSAgICAgICAgICAgICk7Ci0KICAgICAgICAgICAgIGF1dG8gZmllbGROYW1lID0g
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3RyaW5nKCJvcGVyYXRvci4iX3N0
ci5sZW5ndGgoKSk7CiAgICAgICAgICAgICBmaWVsZE5hbWUgPSBmaWVsZE5hbWUuc3Vic3RyaW5n
KDAsIGZpZWxkTmFtZS5sZW5ndGgoKSAtIDEpOwotICAgICAgICAgICAgYXBwZW5kTWFuZ2xlZEZp
ZWxkTmFtZShzdHJpbmdCdWlsZGVyLCBmaWVsZE5hbWUpOwogCi0gICAgICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCgiID0gbjtcbiIKLSAgICAgICAgICAgICAgICAiICAgIHJldHVybiB2O1xu
IgotICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICApOwotICAgICAgICAgICAgcmV0
dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIu
ZmxleGlibGVBcHBlbmQoCisgICAgICAgICAgICAgICAgcmV0dXJuTmFtZSwgIiA9ICIsIGFyZ3Nb
MF0sICI7XG4iLAorICAgICAgICAgICAgICAgIHJldHVybk5hbWUsICcuJyk7CisgICAgICAgICAg
ICBhcHBlbmRNYW5nbGVkRmllbGROYW1lKGZpZWxkTmFtZSk7CisgICAgICAgICAgICBzdHJpbmdC
dWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIgPSAiLCBhcmdzWzFdLCAiO1xuIik7CisKKyAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQ
YXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7Ci0gICAgICAgIGF1dG8gbWV0
YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLnR5cGUoKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBl
bmQoCi0gICAgICAgICAgICBtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1l
LCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIiB2KSB7XG4iCi0gICAgICAgICAgICAiICAgIHJl
dHVybiB2LiIKLSAgICAgICAgKTsKLQogICAgICAgICBhdXRvIGZpZWxkTmFtZSA9IG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0cmluZygib3BlcmF0b3IuIl9zdHIubGVuZ3Ro
KCkpOwotICAgICAgICBhcHBlbmRNYW5nbGVkRmllbGROYW1lKHN0cmluZ0J1aWxkZXIsIGZpZWxk
TmFtZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIjtcbiIK
LSAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICk7Ci0gICAgICAgIHJldHVybiBzdHJpbmdCdWls
ZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoCisg
ICAgICAgICAgICByZXR1cm5OYW1lLCAiID0gIiwgYXJnc1swXSwgJy4nKTsKKyAgICAgICAgYXBw
ZW5kTWFuZ2xlZEZpZWxkTmFtZShmaWVsZE5hbWUpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCgiO1xuIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3RhcnRzV2l0aCgib3BlcmF0b3ImLiJfc3RyKSkgewog
ICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6
ZSgpID09IDEpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
WzBdLT50eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOworICAg
ICAgICBhdXRvIGZpZWxkTmFtZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1
YnN0cmluZygib3BlcmF0b3ImLiJfc3RyLmxlbmd0aCgpKTsKIAogICAgICAgICBzdHJpbmdCdWls
ZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgbWV0YWxSZXR1cm5OYW1lLCAnICcsIG91
dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIgdikge1xuIgotICAg
ICAgICAgICAgIiAgICByZXR1cm4gJih2LT4iCi0gICAgICAgICk7CisgICAgICAgICAgICByZXR1
cm5OYW1lLCAiID0gJigiLCBhcmdzWzBdLCAiLT4iKTsKIAotICAgICAgICBhdXRvIGZpZWxkTmFt
ZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0cmluZygib3BlcmF0b3Im
LiJfc3RyLmxlbmd0aCgpKTsKICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSAqbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKTsKICAgICAgICAgYXV0byYg
dW5pZnlOb2RlID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpLmVsZW1l
bnRUeXBlKCkudW5pZnlOb2RlKCk7CiAgICAgICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0
PEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpOwpAQCAtMjc5LDI2ICsyMzQsMjAgQEAgU3RyaW5n
IHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdQogICAgICAgICB9IGVsc2UKICAgICAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoZmllbGROYW1lKTsKIAotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgKLSAgICAgICAgICAgICIpO1xuIgotICAgICAgICAgICAg
In1cbiIKLSAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmco
KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIik7XG4iKTsKKworICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09
ICJvcGVyYXRvciZbXSIpIHsKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRl
cjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJh
bWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFs
UmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICBBU1NFUlQoaXM8QVNUOjpBcnJheVJlZmVyZW5j
ZVR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgp
KSk7CisKICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAgICAgICAgICAg
IG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJh
bWV0ZXIxTmFtZSwgIiB2LCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIG4pIHtcbiIKLSAgICAg
ICAgICAgICIgICAgaWYgKG4gPCB2Lmxlbmd0aCkgcmV0dXJuICYodi5wb2ludGVyW25dKTtcbiIK
LSAgICAgICAgICAgICIgICAgcmV0dXJuIG51bGxwdHI7XG4iCi0gICAgICAgICAgICAifVxuIgot
ICAgICAgICApOwotICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAg
ICAgICAgICAgImlmICgiLCBhcmdzWzFdLCAiIDwgIiwgYXJnc1swXSwgIi5sZW5ndGgpICIsIHJl
dHVybk5hbWUsICIgPSAmKCIsIGFyZ3NbMF0sICIucG9pbnRlclsiLCBhcmdzWzFdLCAiXSk7XG4i
CisgICAgICAgICAgICAiZWxzZSAiLCByZXR1cm5OYW1lLCAiID0gbnVsbHB0cjtcbiIpOworCisg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBhdXRvIG1hdHJpeERpbWVuc2lvbiA9IFsmXSAo
dW5zaWduZWQgdHlwZUFyZ3VtZW50SW5kZXgpIC0+IHVuc2lnbmVkIHsKQEAgLTMxNyw4MiArMjY2
LDY4IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnUKIAogICAgIGlm
IChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3JbXSIpIHsKICAg
ICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUo
KSA9PSAyKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1h
bmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClb
MF0tPnR5cGUoKSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVy
cygpWzFdLT50eXBlKCkpOwogICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwog
CiAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mUm93cyA9IG51bWJlck9mTWF0cml4Um93cygpOwog
ICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkNvbHVtbnMgPSBudW1iZXJPZk1hdHJpeENvbHVtbnMo
KTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiZG8ge1xuIiwgbWV0YWxS
ZXR1cm5OYW1lLCAiIHJlc3VsdDtcbiIpOwogCiAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGli
bGVBcHBlbmQoCi0gICAgICAgICAgICBtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rp
b25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUsICIgbSwgIiwgbWV0YWxQYXJhbWV0ZXIy
TmFtZSwgIiBpKSB7XG4iCi0gICAgICAgICAgICAiICAgIGlmIChpID49ICIsIG51bWJlck9mUm93
cywgIikgcmV0dXJuICIsIG1ldGFsUmV0dXJuTmFtZSwgIigwKTtcbiIKLSAgICAgICAgICAgICIg
ICAgIiwgbWV0YWxSZXR1cm5OYW1lLCAiIHJlc3VsdDtcbiIKLSAgICAgICAgICAgICIgICAgcmVz
dWx0WzBdID0gbVtpXTtcbiIKLSAgICAgICAgICAgICIgICAgcmVzdWx0WzFdID0gbVtpICsgIiwg
bnVtYmVyT2ZSb3dzLCAiXTtcbiIKLSAgICAgICAgKTsKKyAgICAgICAgICAgICIgICAgaWYgKCIs
IGFyZ3NbMV0sICIgPj0gIiwgbnVtYmVyT2ZSb3dzLCAiKSB7IiwgcmV0dXJuTmFtZSwgIiA9ICIs
IG1ldGFsUmV0dXJuTmFtZSwgIigwKTsgYnJlYWs7fVxuIiwKKyAgICAgICAgICAgICIgICAgcmVz
dWx0WzBdID0gIiwgYXJnc1swXSwgJ1snLCBhcmdzWzFdLCAiXTtcbiIsCisgICAgICAgICAgICAi
ICAgIHJlc3VsdFsxXSA9ICIsIGFyZ3NbMF0sICdbJywgYXJnc1sxXSwgIiArICIsIG51bWJlck9m
Um93cywgIl07XG4iKTsKKwogICAgICAgICBpZiAobnVtYmVyT2ZDb2x1bW5zID49IDMpCi0gICAg
ICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIgICAgcmVzdWx0WzJdID0gbVtp
ICsgIiwgbnVtYmVyT2ZSb3dzICogMiwgIl07XG4iKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuZmxleGlibGVBcHBlbmQoIiAgICByZXN1bHRbMl0gPSAiLCBhcmdzWzBdLCAnWycsIGFyZ3Nb
MV0sICIgKyAiLCBudW1iZXJPZlJvd3MgKiAyLCAiXTtcbiIpOwogICAgICAgICBpZiAobnVtYmVy
T2ZDb2x1bW5zID49IDQpCi0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5k
KCIgICAgcmVzdWx0WzNdID0gbVtpICsgIiwgbnVtYmVyT2ZSb3dzICogMywgIl07XG4iKTsKLSAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoCi0gICAgICAgICAgICAiICAgIHJldHVybiByZXN1
bHQ7XG4iCi0gICAgICAgICAgICAifVxuIgotICAgICAgICApOwotICAgICAgICByZXR1cm4gc3Ry
aW5nQnVpbGRlci50b1N0cmluZygpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJs
ZUFwcGVuZCgiICAgIHJlc3VsdFszXSA9ICIsIGFyZ3NbMF0sICdbJywgYXJnc1sxXSwgIiArICIs
IG51bWJlck9mUm93cyAqIDMsICJdO1xuIik7CisKKyAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4
aWJsZUFwcGVuZCgKKyAgICAgICAgICAgICIgICAgIiwgcmV0dXJuTmFtZSwgIiA9IHJlc3VsdDtc
biIsCisgICAgICAgICAgICAifSB3aGlsZSAoMCk7XG4iKTsKKworICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJvcGVy
YXRvcltdPSIpIHsKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpLnNpemUoKSA9PSAzKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1l
ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7CiAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIy
TmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1l
dGVyM05hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsyXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJl
dHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24udHlwZSgpKTsKIAogICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlJvd3MgPSBudW1i
ZXJPZk1hdHJpeFJvd3MoKTsKICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZDb2x1bW5zID0gbnVt
YmVyT2ZNYXRyaXhDb2x1bW5zKCk7CiAKKyAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFw
cGVuZCgiZG8ge1xuIiwgbWV0YWxSZXR1cm5OYW1lLCAiIG0gPSAiLCBhcmdzWzBdLCAiO1xuIiwK
KyAgICAgICAgICAgIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgaSA9ICIsIGFyZ3NbMV0sICI7XG4i
KTsKKwogICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAg
bWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFt
ZXRlcjFOYW1lLCAiIG0sICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgaSwgIiwgbWV0YWxQYXJh
bWV0ZXIzTmFtZSwgIiB2KSB7XG4iCi0gICAgICAgICAgICAiICAgIGlmIChpID49ICIsIG51bWJl
ck9mUm93cywgIikgcmV0dXJuIG07XG4iCi0gICAgICAgICAgICAiICAgIG1baV0gPSB2WzBdO1xu
IgotICAgICAgICAgICAgIiAgICBtW2kgKyAiLCBudW1iZXJPZlJvd3MsICJdID0gdlsxXTtcbiIK
LSAgICAgICAgKTsKKyAgICAgICAgICAgICIgICAgaWYgKGkgPj0gIiwgbnVtYmVyT2ZSb3dzLCAi
KSB7IiwgcmV0dXJuTmFtZSwgIiA9IG07XG5icmVhazt9XG4iLAorICAgICAgICAgICAgIiAgICBt
W2ldID0gIiwgYXJnc1syXSwgIlswXTtcbiIsCisgICAgICAgICAgICAiICAgIG1baSArICIsIG51
bWJlck9mUm93cywgIl0gPSAiLCBhcmdzWzJdLCAiWzFdO1xuIik7CiAgICAgICAgIGlmIChudW1i
ZXJPZkNvbHVtbnMgPj0gMykKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBl
bmQoIiAgICBtW2kgKyAiLCBudW1iZXJPZlJvd3MgKiAyLCAiXSA9IHZbMl07XG4iKTsKKyAgICAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiAgICBtW2kgKyAiLCBudW1iZXJP
ZlJvd3MgKiAyLCAiXSA9ICIsIGFyZ3NbMl0sICJbMl07XG4iKTsKICAgICAgICAgaWYgKG51bWJl
ck9mQ29sdW1ucyA+PSA0KQotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVu
ZCgiICAgIG1baSArICIsIG51bWJlck9mUm93cyAqIDMsICJdID0gdlszXTtcbiIpOwotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgKLSAgICAgICAgICAgICIgICAgcmV0dXJuIG07IgotICAg
ICAgICAgICAgIn1cbiIKLSAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIu
dG9TdHJpbmcoKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiAg
ICBtW2kgKyAiLCBudW1iZXJPZlJvd3MgKiAzLCAiXSA9ICIsIGFyZ3NbMl0sICJbM107XG4iKTsK
KyAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKKyAgICAgICAgICAgICIgICAg
IiwgcmV0dXJuTmFtZSwgIiA9IG07XG4iLAorICAgICAgICAgICAgIn0gd2hpbGUoMCk7XG4iKTsK
KyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLmlzT3BlcmF0b3IoKSkgeworICAgICAgICBhdXRvIG9wZXJhdG9yTmFtZSA9IG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0cmluZygib3BlcmF0b3IiX3N0ci5sZW5ndGgo
KSk7CiAgICAgICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5z
aXplKCkgPT0gMSkgewotICAgICAgICAgICAgYXV0byBvcGVyYXRvck5hbWUgPSBuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yIl9zdHIubGVuZ3RoKCkp
OwogICAgICAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+
dHlwZSgpKTsKLSAgICAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1h
bmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7CiAgICAg
ICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgICAgIG1l
dGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0
ZXJOYW1lLCAiIHgpIHtcbiIKLSAgICAgICAgICAgICAgICAiICAgIHJldHVybiAiLCBvcGVyYXRv
ck5hbWUsICJ4O1xuIgotICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICApOwotICAg
ICAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAg
ICAie1xuIiwgbWV0YWxQYXJhbWV0ZXJOYW1lLCAiIHggPSAiLCBhcmdzWzBdLCAiO1xuIiwgCisg
ICAgICAgICAgICAgICAgcmV0dXJuTmFtZSwgIiA9ICIsIG9wZXJhdG9yTmFtZSwgIng7XG59XG4i
KTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVChuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7Ci0gICAgICAg
IGF1dG8gb3BlcmF0b3JOYW1lID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3Vi
c3RyaW5nKCJvcGVyYXRvciJfc3RyLmxlbmd0aCgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFt
ZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQ
YXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwotICAgICAgICBhdXRvIG1l
dGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBw
ZW5kKAotICAgICAgICAgICAgbWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFt
ZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAiIHgsICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUs
ICIgeSkge1xuIgotICAgICAgICAgICAgIiAgICByZXR1cm4geCAiLCBvcGVyYXRvck5hbWUsICIg
eTtcbiIKLSAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICk7Ci0gICAgICAgIHJldHVybiBzdHJp
bmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgICAgICByZXR1cm5OYW1lLCAiID0gIiwgYXJn
c1swXSwgJyAnLCBvcGVyYXRvck5hbWUsICcgJywgYXJnc1sxXSwgIjtcbiIpOworICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgp
ID09ICJjb3MiCkBAIC00MjAsOTYgKzM1NSw1NSBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlv
bihBU1Q6Ok5hdGl2ZUZ1CiAgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFt
ZSgpID09ICJhc3VpbnQiCiAgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFt
ZSgpID09ICJhc2Zsb2F0IikgewogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1l
dGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFsUmV0
dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi50eXBlKCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAot
ICAgICAgICAgICAgbWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygn
LCBtZXRhbFBhcmFtZXRlck5hbWUsICIgeCkge1xuIgotICAgICAgICAgICAgIiAgICByZXR1cm4g
IiwgbWFwRnVuY3Rpb25OYW1lKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpKSwgIih4
KTtcbiIKLSAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICk7Ci0gICAgICAgIHJldHVybiBzdHJp
bmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgICAgICByZXR1cm5OYW1lLCAiID0gIiwgbWFw
RnVuY3Rpb25OYW1lKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpKSwgJygnLCBhcmdz
WzBdLCAiKTtcbiIpOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJwb3ciIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ubmFtZSgpID09ICJhdGFuMiIpIHsKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsKLSAgICAgICAgYXV0byBtZXRh
bFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7Ci0gICAgICAgIGF1dG8g
bWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwotICAgICAgICBh
dXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhp
YmxlQXBwZW5kKAotICAgICAgICAgICAgbWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0
aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAiIHgsICIsIG1ldGFsUGFyYW1ldGVy
Mk5hbWUsICIgeSkge1xuIgotICAgICAgICAgICAgIiAgICByZXR1cm4gIiwgbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5uYW1lKCksICIoeCwgeSk7XG4iCi0gICAgICAgICAgICAifVxuIgotICAg
ICAgICApOwotICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgICAg
ICAgICAgcmV0dXJuTmFtZSwgIiA9ICIsIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgp
LCAiKCIsIGFyZ3NbMF0sICIsICIsIGFyZ3NbMV0sICIpO1xuIik7CisgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIkFs
bE1lbW9yeUJhcnJpZXJXaXRoR3JvdXBTeW5jIikgewogICAgICAgICBBU1NFUlQoIW5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSk7Ci0gICAgICAgIHN0cmluZ0J1
aWxkZXIuZmxleGlibGVBcHBlbmQoCi0gICAgICAgICAgICAidm9pZCAiLCBvdXRwdXRGdW5jdGlv
bk5hbWUsICIoKSB7XG4iCi0gICAgICAgICAgICAiICAgIHRocmVhZGdyb3VwX2JhcnJpZXIobWVt
X2ZsYWdzOjptZW1fZGV2aWNlKTtcbiIKLSAgICAgICAgICAgICIgICAgdGhyZWFkZ3JvdXBfYmFy
cmllcihtZW1fZmxhZ3M6Om1lbV90aHJlYWRncm91cCk7XG4iCi0gICAgICAgICAgICAiICAgIHRo
cmVhZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdzOjptZW1fdGV4dHVyZSk7XG4iCi0gICAgICAgICAg
ICAifVxuIgotICAgICAgICApOwotICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmlu
ZygpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgKKyAgICAgICAgICAgICJ0aHJlYWRn
cm91cF9iYXJyaWVyKG1lbV9mbGFnczo6bWVtX2RldmljZSk7XG4iCisgICAgICAgICAgICAidGhy
ZWFkZ3JvdXBfYmFycmllcihtZW1fZmxhZ3M6Om1lbV90aHJlYWRncm91cCk7XG4iCisgICAgICAg
ICAgICAidGhyZWFkZ3JvdXBfYmFycmllcihtZW1fZmxhZ3M6Om1lbV90ZXh0dXJlKTtcbiIpOwor
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ubmFtZSgpID09ICJEZXZpY2VNZW1vcnlCYXJyaWVyV2l0aEdyb3VwU3luYyIpIHsKICAgICAg
ICAgQVNTRVJUKCFuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkp
OwotICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgInZv
aWQgIiwgb3V0cHV0RnVuY3Rpb25OYW1lLCAiKCkge1xuIgotICAgICAgICAgICAgIiAgICB0aHJl
YWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6bWVtX2RldmljZSk7XG4iCi0gICAgICAgICAgICAi
fVxuIgotICAgICAgICApOwotICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygp
OworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgKKyAgICAgICAgICAgICJ0aHJlYWRncm91
cF9iYXJyaWVyKG1lbV9mbGFnczo6bWVtX2RldmljZSk7XG4iKTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiR3Jv
dXBNZW1vcnlCYXJyaWVyV2l0aEdyb3VwU3luYyIpIHsKICAgICAgICAgQVNTRVJUKCFuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkpOwotICAgICAgICBzdHJpbmdC
dWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgInZvaWQgIiwgb3V0cHV0RnVuY3Rp
b25OYW1lLCAiKCkge1xuIgotICAgICAgICAgICAgIiAgICB0aHJlYWRncm91cF9iYXJyaWVyKG1l
bV9mbGFnczo6bWVtX3RocmVhZGdyb3VwKTtcbiIKLSAgICAgICAgICAgICJ9XG4iCi0gICAgICAg
ICk7Ci0gICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKAorICAgICAgICAgICAgInRocmVhZGdyb3VwX2JhcnJpZXIobWVt
X2ZsYWdzOjptZW1fdGhyZWFkZ3JvdXApO1xuIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3RhcnRzV2l0aCgiSW50
ZXJsb2NrZWQiX3N0cikpIHsKICAgICAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpID09ICJJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZSIpIHsKICAgICAgICAgICAgIEFT
U0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gNCk7
Ci0gICAgICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50UG9pbnRlciA9IGRvd25jYXN0PEFTVDo6
UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+
dHlwZSgpKTsKLSAgICAgICAgICAgIGF1dG8gZmlyc3RBcmd1bWVudEFkZHJlc3NTcGFjZSA9IGZp
cnN0QXJndW1lbnRQb2ludGVyLmFkZHJlc3NTcGFjZSgpOwotICAgICAgICAgICAgYXV0byBmaXJz
dEFyZ3VtZW50UG9pbnRlZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZmlyc3RBcmd1
bWVudFBvaW50ZXIuZWxlbWVudFR5cGUoKSk7Ci0gICAgICAgICAgICBhdXRvIHNlY29uZEFyZ3Vt
ZW50ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7Ci0gICAgICAgICAgICBhdXRvIHRoaXJkQXJn
dW1lbnQgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnBhcmFtZXRlcnMoKVsyXS0+dHlwZSgpKTsKLSAgICAgICAgICAgIGF1dG8mIGZvdXJ0
aEFyZ3VtZW50UG9pbnRlciA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVszXS0+dHlwZSgpKTsKLSAgICAgICAgICAgIGF1
dG8gZm91cnRoQXJndW1lbnRBZGRyZXNzU3BhY2UgPSBmb3VydGhBcmd1bWVudFBvaW50ZXIuYWRk
cmVzc1NwYWNlKCk7Ci0gICAgICAgICAgICBhdXRvIGZvdXJ0aEFyZ3VtZW50UG9pbnRlZSA9IHR5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZm91cnRoQXJndW1lbnRQb2ludGVyLmVsZW1lbnRU
eXBlKCkpOwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAgICAg
ICAgICAgICAgICAidm9pZCAiLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgdG9TdHJpbmcoZmly
c3RBcmd1bWVudEFkZHJlc3NTcGFjZSksICcgJywgZmlyc3RBcmd1bWVudFBvaW50ZWUsICIqIG9i
amVjdCwgIiwgc2Vjb25kQXJndW1lbnQsICIgY29tcGFyZSwgIiwgdGhpcmRBcmd1bWVudCwgIiBk
ZXNpcmVkLCAiLCB0b1N0cmluZyhmb3VydGhBcmd1bWVudEFkZHJlc3NTcGFjZSksICcgJywgZm91
cnRoQXJndW1lbnRQb2ludGVlLCAiKiBvdXQpIHtcbiIKLSAgICAgICAgICAgICAgICAiICAgIGF0
b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQob2JqZWN0LCAmY29tcGFyZSwgZGVz
aXJlZCwgbWVtb3J5X29yZGVyX3JlbGF4ZWQsIG1lbW9yeV9vcmRlcl9yZWxheGVkKTtcbiIKLSAg
ICAgICAgICAgICAgICAiICAgICpvdXQgPSBjb21wYXJlO1xuIgotICAgICAgICAgICAgICAgICJ9
XG4iCi0gICAgICAgICAgICApOwotICAgICAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9T
dHJpbmcoKTsKKyAgICAgICAgICAgICAgICAiYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19l
eHBsaWNpdCgiLCBhcmdzWzBdLCAiLCAmIiwgYXJnc1sxXSwgIiwgIiwgYXJnc1syXSwgIiwgbWVt
b3J5X29yZGVyX3JlbGF4ZWQsIG1lbW9yeV9vcmRlcl9yZWxheGVkKTtcbiIsCisgICAgICAgICAg
ICAgICAgJyonLCBhcmdzWzNdLCAiID0gIiwgYXJnc1sxXSwgIjtcbiIpOworICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAzKTsKLSAgICAgICAgYXV0byYgZmlyc3RBcmd1
bWVudFBvaW50ZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7Ci0gICAgICAgIGF1dG8gZmlyc3RB
cmd1bWVudEFkZHJlc3NTcGFjZSA9IGZpcnN0QXJndW1lbnRQb2ludGVyLmFkZHJlc3NTcGFjZSgp
OwotICAgICAgICBhdXRvIGZpcnN0QXJndW1lbnRQb2ludGVlID0gdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZShmaXJzdEFyZ3VtZW50UG9pbnRlci5lbGVtZW50VHlwZSgpKTsKLSAgICAgICAg
YXV0byBzZWNvbmRBcmd1bWVudCA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwotICAgICAgICBh
dXRvJiB0aGlyZEFyZ3VtZW50UG9pbnRlciA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCpu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsyXS0+dHlwZSgpKTsKLSAgICAg
ICAgYXV0byB0aGlyZEFyZ3VtZW50QWRkcmVzc1NwYWNlID0gdGhpcmRBcmd1bWVudFBvaW50ZXIu
YWRkcmVzc1NwYWNlKCk7Ci0gICAgICAgIGF1dG8gdGhpcmRBcmd1bWVudFBvaW50ZWUgPSB0eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKHRoaXJkQXJndW1lbnRQb2ludGVyLmVsZW1lbnRUeXBl
KCkpOwogICAgICAgICBhdXRvIG5hbWUgPSBhdG9taWNOYW1lKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ubmFtZSgpLnN1YnN0cmluZygiSW50ZXJsb2NrZWQiX3N0ci5sZW5ndGgoKSkpOwogICAg
ICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgInZvaWQgIiwg
b3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIHRvU3RyaW5nKGZpcnN0QXJndW1lbnRBZGRyZXNzU3Bh
Y2UpLCAnICcsIGZpcnN0QXJndW1lbnRQb2ludGVlLCAiKiBvYmplY3QsICIsIHNlY29uZEFyZ3Vt
ZW50LCAiIG9wZXJhbmQsICIsIHRvU3RyaW5nKHRoaXJkQXJndW1lbnRBZGRyZXNzU3BhY2UpLCAn
ICcsIHRoaXJkQXJndW1lbnRQb2ludGVlLCAiKiBvdXQpIHtcbiIKLSAgICAgICAgICAgICIgICAg
Km91dCA9IGF0b21pY18iLCBuYW1lLCAiX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgbWVtb3J5
X29yZGVyX3JlbGF4ZWQpO1xuIgotICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgKTsKLSAgICAg
ICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICcqJywgYXJn
c1syXSwgIiA9IGF0b21pY18iLCBuYW1lLCAiX2V4cGxpY2l0KCIsIGFyZ3NbMF0sICIsICIsIGFy
Z3NbMV0sICIsIG1lbW9yeV9vcmRlcl9yZWxheGVkKTtcbiIpOworICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJTYW1w
bGUiKSB7CkBAIC01MjEsMzUgKzQxNSwyMiBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihB
U1Q6Ok5hdGl2ZUZ1CiAgICAgICAgIGF1dG8mIHJldHVyblR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5h
dGl2ZVR5cGVEZWNsYXJhdGlvbj4oZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24udHlwZSgpLnVuaWZ5Tm9kZSgpKSk7CiAgICAgICAgIGF1dG8gcmV0dXJu
VmVjdG9yTGVuZ3RoID0gdmVjdG9yTGVuZ3RoKHJldHVyblR5cGUpOwogCi0gICAgICAgIGF1dG8g
bWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUodGV4dHVy
ZVR5cGUpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsx
XS0+dHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjNOYW1lID0gdHlwZU5hbWVy
Lm1hbmdsZWROYW1lRm9yVHlwZShsb2NhdGlvblR5cGUpOwotICAgICAgICBPcHRpb25hbDxNYW5n
bGVkVHlwZU5hbWU+IG1ldGFsUGFyYW1ldGVyNE5hbWU7Ci0gICAgICAgIGlmIChuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gNCkKLSAgICAgICAgICAgIG1l
dGFsUGFyYW1ldGVyNE5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVszXS0+dHlwZSgpKTsKLSAgICAgICAgYXV0
byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKHJldHVyblR5
cGUpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKG1ldGFsUmV0dXJuTmFt
ZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiB0
aGVUZXh0dXJlLCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIHRoZVNhbXBsZXIsICIsIG1ldGFs
UGFyYW1ldGVyM05hbWUsICIgbG9jYXRpb24iKTsKLSAgICAgICAgaWYgKG1ldGFsUGFyYW1ldGVy
NE5hbWUpCi0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIsICIsICpt
ZXRhbFBhcmFtZXRlcjROYW1lLCAiIG9mZnNldCIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCgKLSAgICAgICAgICAgICIpIHtcbiIKLSAgICAgICAgICAgICIgICAgcmV0dXJuIHRoZVRl
eHR1cmUuc2FtcGxlKHRoZVNhbXBsZXIsICIKLSAgICAgICAgKTsKKyAgICAgICAgc3RyaW5nQnVp
bGRlci5mbGV4aWJsZUFwcGVuZCgKKyAgICAgICAgICAgIHJldHVybk5hbWUsICIgPSAiLCBhcmdz
WzBdLCAiLnNhbXBsZSgiLCBhcmdzWzFdLCAiLCAiKTsKKwogICAgICAgICBpZiAodGV4dHVyZVR5
cGUuaXNUZXh0dXJlQXJyYXkoKSkgewogICAgICAgICAgICAgQVNTRVJUKGxvY2F0aW9uVmVjdG9y
TGVuZ3RoID4gMSk7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCJs
b2NhdGlvbi4iLCAieHl6dyJfc3RyLnN1YnN0cmluZygwLCBsb2NhdGlvblZlY3Rvckxlbmd0aCAt
IDEpLCAiLCBsb2NhdGlvbi4iLCAieHl6dyJfc3RyLnN1YnN0cmluZyhsb2NhdGlvblZlY3Rvckxl
bmd0aCAtIDEsIDEpKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQo
YXJnc1syXSwgJy4nLCAieHl6dyJfc3RyLnN1YnN0cmluZygwLCBsb2NhdGlvblZlY3Rvckxlbmd0
aCAtIDEpLCAiLCAiLCBhcmdzWzJdLCAnLicsICJ4eXp3Il9zdHIuc3Vic3RyaW5nKGxvY2F0aW9u
VmVjdG9yTGVuZ3RoIC0gMSwgMSkpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKCJsb2NhdGlvbiIpOwotICAgICAgICBpZiAobWV0YWxQYXJhbWV0ZXI0
TmFtZSkKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIsIG9mZnNldCIpOworICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZChhcmdzWzJdKTsKKyAgICAgICAg
aWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSA0KQor
ICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiLCAiLCBhcmdzWzNdKTsK
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIikiKTsKICAgICAgICAgaWYgKCF0ZXh0dXJl
VHlwZS5pc0RlcHRoVGV4dHVyZSgpKQogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJs
ZUFwcGVuZCgiLiIsICJ4eXp3Il9zdHIuc3Vic3RyaW5nKDAsIHJldHVyblZlY3Rvckxlbmd0aCkp
OwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgKLSAgICAgICAgICAgICI7XG4iCi0gICAg
ICAgICAgICAifVxuIgotICAgICAgICApOwotICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50
b1N0cmluZygpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiO1xuIik7CisKKyAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5h
bWUoKSA9PSAiTG9hZCIpIHsKQEAgLTU2MSwxNTIgKzQ0MiwxMjUgQEAgU3RyaW5nIHdyaXRlTmF0
aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdQogICAgICAgICBhdXRvJiByZXR1cm5UeXBlID0gZG93
bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KGRvd25jYXN0PEFTVDo6TmFtZWRUeXBl
PihuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKS51bmlmeU5vZGUoKSkpOwogICAgICAg
ICBhdXRvIHJldHVyblZlY3Rvckxlbmd0aCA9IHZlY3Rvckxlbmd0aChyZXR1cm5UeXBlKTsKIAot
ICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVG
b3JUeXBlKHRleHR1cmVUeXBlKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0g
dHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShsb2NhdGlvblR5cGUpOwogICAgICAgICBhdXRv
IG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUocmV0dXJuVHlw
ZSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQobWV0YWxSZXR1cm5OYW1l
LCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAiIHRo
ZVRleHR1cmUsICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgbG9jYXRpb24pIHtcbiIpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiZG8ge1xuIik7CisKICAgICAgICAgaWYgKHRleHR1
cmVUeXBlLmlzVGV4dHVyZUFycmF5KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChsb2NhdGlvblZl
Y3Rvckxlbmd0aCA+IDEpOwogICAgICAgICAgICAgU3RyaW5nIGRpbWVuc2lvbnNbXSA9IHsgIndp
ZHRoIl9zdHIsICJoZWlnaHQiX3N0ciwgImRlcHRoIl9zdHIgfTsKICAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbG9jYXRpb25WZWN0b3JMZW5ndGggLSAxOyArK2kpIHsKICAgICAgICAg
ICAgICAgICBhdXRvIHN1ZmZpeCA9ICJ4eXp3Il9zdHIuc3Vic3RyaW5nKGksIDEpOwotICAgICAg
ICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiAgICBpZiAobG9jYXRpb24u
Iiwgc3VmZml4LCAiIDwgMCB8fCBzdGF0aWNfY2FzdDx1aW50MzJfdD4obG9jYXRpb24uIiwgc3Vm
Zml4LCAiKSA+PSB0aGVUZXh0dXJlLmdldF8iLCBkaW1lbnNpb25zW2ldLCAiKCkpIHJldHVybiAi
LCBtZXRhbFJldHVybk5hbWUsICIoMCk7XG4iKTsKKyAgICAgICAgICAgICAgICBzdHJpbmdCdWls
ZGVyLmZsZXhpYmxlQXBwZW5kKCIgICAgaWYgKCIsIGFyZ3NbMV0sICcuJywgc3VmZml4LCAiIDwg
MCB8fCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oIiwgYXJnc1sxXSwgJy4nLCBzdWZmaXgsICIpID49
ICIsIGFyZ3NbMF0sICIuZ2V0XyIsIGRpbWVuc2lvbnNbaV0sICIoKSkgeyIsIHJldHVybk5hbWUs
ICIgPSAiLCBtZXRhbFJldHVybk5hbWUsICIoMCk7IGJyZWFrO31cbiIpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgYXV0byBzdWZmaXggPSAieHl6dyJfc3RyLnN1YnN0cmluZyhsb2NhdGlv
blZlY3Rvckxlbmd0aCAtIDEsIDEpOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJs
ZUFwcGVuZCgiICAgIGlmIChsb2NhdGlvbi4iLCBzdWZmaXgsICIgPCAwIHx8IHN0YXRpY19jYXN0
PHVpbnQzMl90Pihsb2NhdGlvbi4iLCBzdWZmaXgsICIpID49IHRoZVRleHR1cmUuZ2V0X2FycmF5
X3NpemUoKSkgcmV0dXJuICIsIG1ldGFsUmV0dXJuTmFtZSwgIigwKTtcbiIpOworICAgICAgICAg
ICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiICAgIGlmICgiLCBhcmdzWzFdLCAnLics
IHN1ZmZpeCwgIiA8IDAgfHwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KCIsIGFyZ3NbMV0sICcuJywg
c3VmZml4LCAiKSA+PSAiLCBhcmdzWzBdLCAiLmdldF9hcnJheV9zaXplKCkpIHsiLCByZXR1cm5O
YW1lLCAiID0gIiwgbWV0YWxSZXR1cm5OYW1lLCAiKDApOyBicmVhazt9XG4iKTsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIGlmIChsb2NhdGlvblZlY3Rvckxlbmd0aCA9PSAxKQotICAg
ICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiAgICBpZiAobG9jYXRp
b24gPCAwIHx8IHN0YXRpY19jYXN0PHVpbnQzMl90Pihsb2NhdGlvbikgPj0gdGhlVGV4dHVyZS5n
ZXRfd2lkdGgoKSkgcmV0dXJuICIsIG1ldGFsUmV0dXJuTmFtZSwgIigwKTtcbiIpOworICAgICAg
ICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiAgICBpZiAoIiwgYXJnc1sx
XSwgIiA8IDAgfHwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KCIsIGFyZ3NbMV0sICIpID49ICIsIGFy
Z3NbMF0sICIuZ2V0X3dpZHRoKCkpIHsgIiwgcmV0dXJuTmFtZSwgIiA9ICIsIG1ldGFsUmV0dXJu
TmFtZSwgIigwKTsgYnJlYWs7fVxuIik7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgICAgICAgICAi
ICAgIGlmIChsb2NhdGlvbi54IDwgMCB8fCBzdGF0aWNfY2FzdDx1aW50MzJfdD4obG9jYXRpb24u
eCkgPj0gdGhlVGV4dHVyZS5nZXRfd2lkdGgoKSkgcmV0dXJuICIsIG1ldGFsUmV0dXJuTmFtZSwg
IigwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgIiAgICBpZiAobG9jYXRpb24ueSA8IDAgfHwg
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KGxvY2F0aW9uLnkpID49IHRoZVRleHR1cmUuZ2V0X2hlaWdo
dCgpKSByZXR1cm4gIiwgbWV0YWxSZXR1cm5OYW1lLCAiKDApO1xuIgotICAgICAgICAgICAgICAg
ICk7CisgICAgICAgICAgICAgICAgICAgICIgICAgaWYgKCIsIGFyZ3NbMV0sICIueCA8IDAgfHwg
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KCIsIGFyZ3NbMV0sICIueCkgPj0gIiwgYXJnc1swXSwgIi5n
ZXRfd2lkdGgoKSkgeyIsIHJldHVybk5hbWUsICIgPSAiLCBtZXRhbFJldHVybk5hbWUsICIoMCk7
IGJyZWFrO31cbiIKKyAgICAgICAgICAgICAgICAgICAgIiAgICBpZiAoIiwgYXJnc1sxXSwgIi55
IDwgMCB8fCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oIiwgYXJnc1sxXSwgIi55KSA+PSAiLCBhcmdz
WzBdLCAiLmdldF9oZWlnaHQoKSkgeyIsIHJldHVybk5hbWUsICIgPSAiLCBtZXRhbFJldHVybk5h
bWUsICIoMCk7IGJyZWFrO31cbiIpOworCiAgICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uVmVj
dG9yTGVuZ3RoID49IDMpCi0gICAgICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGli
bGVBcHBlbmQoIiAgICBpZiAobG9jYXRpb24ueiA8IDAgfHwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KGxvY2F0aW9uLnopID49IHRoZVRleHR1cmUuZ2V0X2RlcHRoKCkpIHJldHVybiAiLCBtZXRhbFJl
dHVybk5hbWUsICIoMCk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5m
bGV4aWJsZUFwcGVuZCgiICAgIGlmICgiLCBhcmdzWzFdLCAiLnogPCAwIHx8IHN0YXRpY19jYXN0
PHVpbnQzMl90PigiLCBhcmdzWzFdLCAiLnopID49ICIsIGFyZ3NbMF0sICIuZ2V0X2RlcHRoKCkp
IHsiLCByZXR1cm5OYW1lLCAiID0gIiwgbWV0YWxSZXR1cm5OYW1lLCAiKDApOyBicmVhazt9XG4i
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgiICAgIHJldHVybiB0aGVUZXh0dXJlLnJlYWQoIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIu
ZmxleGlibGVBcHBlbmQoIiAgICAiLCByZXR1cm5OYW1lLCAiID0gIiwgYXJnc1swXSwgIi5yZWFk
KCIpOwogICAgICAgICBpZiAodGV4dHVyZVR5cGUuaXNUZXh0dXJlQXJyYXkoKSkgewogICAgICAg
ICAgICAgQVNTRVJUKGxvY2F0aW9uVmVjdG9yTGVuZ3RoID4gMSk7Ci0gICAgICAgICAgICBzdHJp
bmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCJ1aW50IiwgdmVjdG9yU3VmZml4KGxvY2F0aW9uVmVj
dG9yTGVuZ3RoIC0gMSksICIobG9jYXRpb24uIiwgInh5enciX3N0ci5zdWJzdHJpbmcoMCwgbG9j
YXRpb25WZWN0b3JMZW5ndGggLSAxKSwgIiksIHVpbnQobG9jYXRpb24uIiwgInh5enciX3N0ci5z
dWJzdHJpbmcobG9jYXRpb25WZWN0b3JMZW5ndGggLSAxLCAxKSwgJyknKTsKKyAgICAgICAgICAg
IHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoInVpbnQiLCB2ZWN0b3JTdWZmaXgobG9jYXRp
b25WZWN0b3JMZW5ndGggLSAxKSwgJygnLCBhcmdzWzFdLCAnLicsICJ4eXp3Il9zdHIuc3Vic3Ry
aW5nKDAsIGxvY2F0aW9uVmVjdG9yTGVuZ3RoIC0gMSksICIpLCB1aW50KCIsIGFyZ3NbMV0sICcu
JywgInh5enciX3N0ci5zdWJzdHJpbmcobG9jYXRpb25WZWN0b3JMZW5ndGggLSAxLCAxKSwgJykn
KTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBw
ZW5kKCJ1aW50IiwgdmVjdG9yU3VmZml4KGxvY2F0aW9uVmVjdG9yTGVuZ3RoKSwgIihsb2NhdGlv
bikiKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoInVpbnQiLCB2
ZWN0b3JTdWZmaXgobG9jYXRpb25WZWN0b3JMZW5ndGgpLCAnKCcsIGFyZ3NbMV0sICcpJyk7CiAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCcpJyk7CiAgICAgICAgIGlmICghdGV4dHVyZVR5
cGUuaXNEZXB0aFRleHR1cmUoKSkKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVB
cHBlbmQoJy4nLCAieHl6dyJfc3RyLnN1YnN0cmluZygwLCByZXR1cm5WZWN0b3JMZW5ndGgpKTsK
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoCiAgICAgICAgICAgICAiO1xuIgotICAgICAg
ICAgICAgIn1cbiIKLSAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9T
dHJpbmcoKTsKKyAgICAgICAgICAgICJ9IHdoaWxlKDApO1xuIik7CisKKyAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAi
bG9hZCIpIHsKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1l
dGVycygpLnNpemUoKSA9PSAxKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBh
cmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlw
ZSgpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAgICAgICAgICAg
IG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJh
bWV0ZXJOYW1lLCAiIHgpIHtcbiIKLSAgICAgICAgICAgICIgICAgcmV0dXJuIGF0b21pY19sb2Fk
X2V4cGxpY2l0KHgsIG1lbW9yeV9vcmRlcl9yZWxheGVkKTtcbiIKLSAgICAgICAgICAgICJ9XG4i
Ci0gICAgICAgICk7Ci0gICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7Cisg
ICAgICAgICAgICByZXR1cm5OYW1lLCAiID0gYXRvbWljX2xvYWRfZXhwbGljaXQoIiwgYXJnc1sw
XSwgIiwgbWVtb3J5X29yZGVyX3JlbGF4ZWQpO1xuIik7CisgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gInN0b3JlIikg
ewogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCku
c2l6ZSgpID09IDIpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFt
ZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKVswXS0+dHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbMV0tPnR5cGUoKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBl
bmQoInZvaWQgIiwgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUs
ICIgeCwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiB5KSB7XG4iCi0gICAgICAgICAgICAiICAg
IGF0b21pY19zdG9yZV9leHBsaWNpdCh4LCB5LCBtZW1vcnlfb3JkZXJfcmVsYXhlZCk7XG4iCi0g
ICAgICAgICAgICAifVxuIik7Ci0gICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5n
KCk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoCisgICAgICAgICAgICAi
YXRvbWljX3N0b3JlX2V4cGxpY2l0KCIsIGFyZ3NbMF0sICIsICIsIGFyZ3NbMV0sICIsIG1lbW9y
eV9vcmRlcl9yZWxheGVkKTtcbiIpOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYg
KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJHZXREaW1lbnNpb25zIikgewog
ICAgICAgICBhdXRvJiB0ZXh0dXJlVHlwZSA9IGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uPihkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4obmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKS0+dW5pZnlOb2RlKCkpKTsKIAogICAgICAgICBzaXpl
X3QgaW5kZXggPSAxOwotICAgICAgICBpZiAoIXRleHR1cmVUeXBlLmlzV3JpdGFibGVUZXh0dXJl
KCkgJiYgdGV4dHVyZVR5cGUudGV4dHVyZURpbWVuc2lvbigpICE9IDEpCisgICAgICAgIGJvb2wg
aGFzTWlwTGV2ZWwgPSAhdGV4dHVyZVR5cGUuaXNXcml0YWJsZVRleHR1cmUoKSAmJiB0ZXh0dXJl
VHlwZS50ZXh0dXJlRGltZW5zaW9uKCkgIT0gMTsKKyAgICAgICAgaWYgKGhhc01pcExldmVsKQog
ICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAgYXV0byB3aWR0aFR5cGVOYW1lID0gdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0
ZXJzKClbaW5kZXhdLT50eXBlKCkpOworICAgICAgICBjb25zdCBNYW5nbGVkVmFyaWFibGVOYW1l
JiB3aWR0aE5hbWUgPSBhcmdzW2luZGV4XTsKICAgICAgICAgKytpbmRleDsKLSAgICAgICAgT3B0
aW9uYWw8TWFuZ2xlZFR5cGVOYW1lPiBoZWlnaHRUeXBlTmFtZTsKKyAgICAgICAgT3B0aW9uYWw8
TWFuZ2xlZFZhcmlhYmxlTmFtZT4gaGVpZ2h0TmFtZTsKICAgICAgICAgaWYgKHRleHR1cmVUeXBl
LnRleHR1cmVEaW1lbnNpb24oKSA+PSAyKSB7Ci0gICAgICAgICAgICBoZWlnaHRUeXBlTmFtZSA9
IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
cGFyYW1ldGVycygpW2luZGV4XS0+dHlwZSgpKTsKKyAgICAgICAgICAgIGhlaWdodE5hbWUgPSBh
cmdzW2luZGV4XTsKICAgICAgICAgICAgICsraW5kZXg7CiAgICAgICAgIH0KLSAgICAgICAgT3B0
aW9uYWw8TWFuZ2xlZFR5cGVOYW1lPiBkZXB0aFR5cGVOYW1lOworICAgICAgICBPcHRpb25hbDxN
YW5nbGVkVmFyaWFibGVOYW1lPiBkZXB0aE5hbWU7CiAgICAgICAgIGlmICh0ZXh0dXJlVHlwZS50
ZXh0dXJlRGltZW5zaW9uKCkgPj0gMykgewotICAgICAgICAgICAgZGVwdGhUeXBlTmFtZSA9IHR5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpW2luZGV4XS0+dHlwZSgpKTsKKyAgICAgICAgICAgIGRlcHRoTmFtZSA9IGFyZ3Nb
aW5kZXhdOwogICAgICAgICAgICAgKytpbmRleDsKICAgICAgICAgfQotICAgICAgICBPcHRpb25h
bDxNYW5nbGVkVHlwZU5hbWU+IGVsZW1lbnRzVHlwZU5hbWU7CisgICAgICAgIE9wdGlvbmFsPE1h
bmdsZWRWYXJpYWJsZU5hbWU+IGVsZW1lbnRzTmFtZTsKICAgICAgICAgaWYgKHRleHR1cmVUeXBl
LmlzVGV4dHVyZUFycmF5KCkpIHsKLSAgICAgICAgICAgIGVsZW1lbnRzVHlwZU5hbWUgPSB0eXBl
TmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKVtpbmRleF0tPnR5cGUoKSk7CisgICAgICAgICAgICBlbGVtZW50c05hbWUgPSBhcmdz
W2luZGV4XTsKICAgICAgICAgICAgICsraW5kZXg7CiAgICAgICAgIH0KLSAgICAgICAgT3B0aW9u
YWw8TWFuZ2xlZFR5cGVOYW1lPiBudW1iZXJPZkxldmVsc1R5cGVOYW1lOworICAgICAgICBPcHRp
b25hbDxNYW5nbGVkVmFyaWFibGVOYW1lPiBudW1iZXJPZkxldmVsc05hbWU7CiAgICAgICAgIGlm
ICghdGV4dHVyZVR5cGUuaXNXcml0YWJsZVRleHR1cmUoKSAmJiB0ZXh0dXJlVHlwZS50ZXh0dXJl
RGltZW5zaW9uKCkgIT0gMSkgewotICAgICAgICAgICAgbnVtYmVyT2ZMZXZlbHNUeXBlTmFtZSA9
IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
cGFyYW1ldGVycygpW2luZGV4XS0+dHlwZSgpKTsKKyAgICAgICAgICAgIG51bWJlck9mTGV2ZWxz
TmFtZSA9IGFyZ3NbaW5kZXhdOwogICAgICAgICAgICAgKytpbmRleDsKICAgICAgICAgfQogICAg
ICAgICBBU1NFUlQoaW5kZXggPT0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJz
KCkuc2l6ZSgpKTsKIAotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFt
ZXIubWFuZ2xlZE5hbWVGb3JUeXBlKHRleHR1cmVUeXBlKTsKLSAgICAgICAgc3RyaW5nQnVpbGRl
ci5mbGV4aWJsZUFwcGVuZCgidm9pZCAiLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQ
YXJhbWV0ZXIxTmFtZSwgIiB0aGVUZXh0dXJlIik7Ci0gICAgICAgIGlmICghdGV4dHVyZVR5cGUu
aXNXcml0YWJsZVRleHR1cmUoKSAmJiB0ZXh0dXJlVHlwZS50ZXh0dXJlRGltZW5zaW9uKCkgIT0g
MSkKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIsIHVpbnQgbWlwTGV2ZWwiKTsK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiLCAiLCB3aWR0aFR5cGVOYW1l
LCAiIHdpZHRoIik7Ci0gICAgICAgIGlmIChoZWlnaHRUeXBlTmFtZSkKLSAgICAgICAgICAgIHN0
cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiwgIiwgKmhlaWdodFR5cGVOYW1lLCAiIGhlaWdo
dCIpOwotICAgICAgICBpZiAoZGVwdGhUeXBlTmFtZSkKLSAgICAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuZmxleGlibGVBcHBlbmQoIiwgIiwgKmRlcHRoVHlwZU5hbWUsICIgZGVwdGgiKTsKLSAgICAg
ICAgaWYgKGVsZW1lbnRzVHlwZU5hbWUpCi0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhp
YmxlQXBwZW5kKCIsICIsICplbGVtZW50c1R5cGVOYW1lLCAiIGVsZW1lbnRzIik7Ci0gICAgICAg
IGlmIChudW1iZXJPZkxldmVsc1R5cGVOYW1lKQotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5m
bGV4aWJsZUFwcGVuZCgiLCAiLCAqbnVtYmVyT2ZMZXZlbHNUeXBlTmFtZSwgIiBudW1iZXJPZkxl
dmVscyIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgKLSAgICAgICAgICAgICIpIHtc
biIKLSAgICAgICAgICAgICIgICAgaWYgKHdpZHRoKVxuIgotICAgICAgICAgICAgIiAgICAgICAg
KndpZHRoID0gdGhlVGV4dHVyZS5nZXRfd2lkdGgoIgotICAgICAgICApOwotICAgICAgICBpZiAo
IXRleHR1cmVUeXBlLmlzV3JpdGFibGVUZXh0dXJlKCkgJiYgdGV4dHVyZVR5cGUudGV4dHVyZURp
bWVuc2lvbigpICE9IDEpCi0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgibWlwTGV2
ZWwiKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKKyAgICAgICAgICAg
ICJpZiAoIiwgd2lkdGhOYW1lLCAiKVxuIgorICAgICAgICAgICAgIiAgICAqIiwgd2lkdGhOYW1l
LCAiID0gIiwgYXJnc1swXSwgIi5nZXRfd2lkdGgoIik7CisKKyAgICAgICAgaWYgKGhhc01pcExl
dmVsKQorICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZChhcmdzWzFdKTsK
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIik7XG4iKTsKLSAgICAgICAgaWYgKGhlaWdo
dFR5cGVOYW1lKSB7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgKLSAgICAgICAg
ICAgICAgICAiICAgIGlmIChoZWlnaHQpXG4iCi0gICAgICAgICAgICAgICAgIiAgICAgICAgKmhl
aWdodCA9IHRoZVRleHR1cmUuZ2V0X2hlaWdodCgiCi0gICAgICAgICAgICApOwotICAgICAgICAg
ICAgaWYgKCF0ZXh0dXJlVHlwZS5pc1dyaXRhYmxlVGV4dHVyZSgpICYmIHRleHR1cmVUeXBlLnRl
eHR1cmVEaW1lbnNpb24oKSAhPSAxKQotICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kKCJtaXBMZXZlbCIpOworICAgICAgICBpZiAoaGVpZ2h0TmFtZSkgeworICAgICAgICAgICAg
c3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKKyAgICAgICAgICAgICAgICAiICAgIGlmICgi
LCAqaGVpZ2h0TmFtZSwgIilcbiIKKyAgICAgICAgICAgICAgICAiICAgICAgICAqIiwgKmhlaWdo
dE5hbWUsICIgPSAiLCBhcmdzWzBdLCAiLmdldF9oZWlnaHQoIik7CisgICAgICAgICAgICBpZiAo
aGFzTWlwTGV2ZWwpCisgICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVu
ZChhcmdzWzFdKTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIpO1xuIik7CiAg
ICAgICAgIH0KLSAgICAgICAgaWYgKGRlcHRoVHlwZU5hbWUpIHsKLSAgICAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKAotICAgICAgICAgICAgICAgICIgICAgaWYgKGRlcHRoKVxuIgotICAg
ICAgICAgICAgICAgICIgICAgICAgICpkZXB0aCA9IHRoZVRleHR1cmUuZ2V0X2RlcHRoKCIKLSAg
ICAgICAgICAgICk7Ci0gICAgICAgICAgICBpZiAoIXRleHR1cmVUeXBlLmlzV3JpdGFibGVUZXh0
dXJlKCkgJiYgdGV4dHVyZVR5cGUudGV4dHVyZURpbWVuc2lvbigpICE9IDEpCi0gICAgICAgICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIm1pcExldmVsIik7CisgICAgICAgIGlmIChkZXB0
aE5hbWUpIHsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoCisgICAg
ICAgICAgICAgICAgIiAgICBpZiAoIiwgKmRlcHRoTmFtZSwgIilcbiIKKyAgICAgICAgICAgICAg
ICAiICAgICAgICAqIiwgKmRlcHRoTmFtZSwgIiA9ICIsIGFyZ3NbMF0sICIuZ2V0X2RlcHRoKCIp
OworICAgICAgICAgICAgaWYgKGhhc01pcExldmVsKQorICAgICAgICAgICAgICAgIHN0cmluZ0J1
aWxkZXIuZmxleGlibGVBcHBlbmQoYXJnc1sxXSk7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCgiKTtcbiIpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChlbGVtZW50c1R5cGVOYW1l
KSB7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAi
ICAgIGlmIChlbGVtZW50cylcbiIKLSAgICAgICAgICAgICAgICAiICAgICAgICAqZWxlbWVudHMg
PSB0aGVUZXh0dXJlLmdldF9hcnJheV9zaXplKCk7XG4iCi0gICAgICAgICAgICApOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChudW1iZXJPZkxldmVsc1R5cGVOYW1lKSB7Ci0gICAgICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAiICAgIGlmIChudW1iZXJPZkxl
dmVscylcbiIKLSAgICAgICAgICAgICAgICAiICAgICAgICAqbnVtYmVyT2ZMZXZlbHMgPSB0aGVU
ZXh0dXJlLmdldF9udW1fbWlwX2xldmVscygpO1xuIgotICAgICAgICAgICAgKTsKKyAgICAgICAg
aWYgKGVsZW1lbnRzTmFtZSkgeworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFw
cGVuZCgKKyAgICAgICAgICAgICAgICAiICAgIGlmICgiLCAqZWxlbWVudHNOYW1lLCAiKVxuIgor
ICAgICAgICAgICAgICAgICIgICAgICAgICoiLCAqZWxlbWVudHNOYW1lLCAiID0gIiwgYXJnc1sw
XSwgIi5nZXRfYXJyYXlfc2l6ZSgpO1xuIik7CiAgICAgICAgIH0KLSAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoIn1cbiIpOwotICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmlu
ZygpOworICAgICAgICBpZiAobnVtYmVyT2ZMZXZlbHNOYW1lKSB7CisgICAgICAgICAgICBzdHJp
bmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAorICAgICAgICAgICAgICAgICIgICAgaWYgKCIsICpu
dW1iZXJPZkxldmVsc05hbWUsICIpXG4iCisgICAgICAgICAgICAgICAgIiAgICAgICAgKiIsICpu
dW1iZXJPZkxldmVsc05hbWUsICIgPSAiLCBhcmdzWzBdLCAiLmdldF9udW1fbWlwX2xldmVscygp
O1xuIik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiU2FtcGxlQmlhcyIpIHsKQEAgLTc1NCw0
NiArNjA4LDQzIEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnUKICAg
ICAgICAgYXV0byYgbG9jYXRpb25UeXBlID0gZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFy
YXRpb24+KGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPihuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnBhcmFtZXRlcnMoKVsyXS0+dHlwZSgpLT51bmlmeU5vZGUoKSkpOwogICAgICAgICBhdXRvIGxv
Y2F0aW9uVmVjdG9yTGVuZ3RoID0gdmVjdG9yTGVuZ3RoKGxvY2F0aW9uVHlwZSk7CiAKLSAgICAg
ICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlw
ZSh0ZXh0dXJlVHlwZSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUoaXRlbVR5cGUpOwotICAgICAgICBhdXRvIG1ldGFsUGFy
YW1ldGVyM05hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGxvY2F0aW9uVHlwZSk7
CiAgICAgICAgIGF1dG8gbWV0YWxJbm5lclR5cGVOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1l
Rm9yVHlwZShpdGVtVmVjdG9ySW5uZXJUeXBlKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4
aWJsZUFwcGVuZCgidm9pZCAiLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0
ZXIxTmFtZSwgIiB0aGVUZXh0dXJlLCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIGl0ZW0sICIs
IG1ldGFsUGFyYW1ldGVyM05hbWUsICIgbG9jYXRpb24pIHtcbiIpOworCisgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKCJkbyB7XG4iKTsKICAgICAgICAgaWYgKHRleHR1cmVUeXBlLmlzVGV4
dHVyZUFycmF5KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChsb2NhdGlvblZlY3Rvckxlbmd0aCA+
IDEpOwogICAgICAgICAgICAgU3RyaW5nIGRpbWVuc2lvbnNbXSA9IHsgIndpZHRoIl9zdHIsICJo
ZWlnaHQiX3N0ciwgImRlcHRoIl9zdHIgfTsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbG9jYXRpb25WZWN0b3JMZW5ndGggLSAxOyArK2kpIHsKICAgICAgICAgICAgICAgICBhdXRv
IHN1ZmZpeCA9ICJ4eXp3Il9zdHIuc3Vic3RyaW5nKGksIDEpOwotICAgICAgICAgICAgICAgIHN0
cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiAgICBpZiAobG9jYXRpb24uIiwgc3VmZml4LCAi
ID49IHRoZVRleHR1cmUuZ2V0XyIsIGRpbWVuc2lvbnNbaV0sICIoKSkgcmV0dXJuO1xuIik7Cisg
ICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiICAgIGlmICgiLCBh
cmdzWzJdLCAiLiIsIHN1ZmZpeCwgIiA+PSAiLCBhcmdzWzBdLCAiLmdldF8iLCBkaW1lbnNpb25z
W2ldLCAiKCkpIGJyZWFrO1xuIik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBhdXRvIHN1
ZmZpeCA9ICJ4eXp3Il9zdHIuc3Vic3RyaW5nKGxvY2F0aW9uVmVjdG9yTGVuZ3RoIC0gMSwgMSk7
Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIgICAgaWYgKGxvY2F0
aW9uLiIsIHN1ZmZpeCwgIiA+PSB0aGVUZXh0dXJlLmdldF9hcnJheV9zaXplKCkpIHJldHVybjtc
biIpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiICAgIGlmICgi
LCBhcmdzWzJdLCAnLicsIHN1ZmZpeCwgIiA+PSAiLCBhcmdzWzBdLCAiLmdldF9hcnJheV9zaXpl
KCkpIGJyZWFrO1xuIik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAobG9jYXRp
b25WZWN0b3JMZW5ndGggPT0gMSkKLSAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgiICAgIGlmIChsb2NhdGlvbiA+PSB0aGVUZXh0dXJlLmdldF93aWR0aCgpKSByZXR1cm47XG4i
KTsKKyAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIgICAgaWYg
KCIsIGFyZ3NbMl0sICIgPj0gIiwgYXJnc1swXSwgIi5nZXRfd2lkdGgoKSkgYnJlYWs7XG4iKTsK
ICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KAotICAgICAgICAgICAgICAgICAgICAiICAgIGlmIChsb2NhdGlvbi54ID49IHRoZVRleHR1cmUu
Z2V0X3dpZHRoKCkpIHJldHVybjtcbiIKLSAgICAgICAgICAgICAgICAgICAgIiAgICBpZiAobG9j
YXRpb24ueSA+PSB0aGVUZXh0dXJlLmdldF9oZWlnaHQoKSkgcmV0dXJuO1xuIgotICAgICAgICAg
ICAgICAgICk7CisgICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgK
KyAgICAgICAgICAgICAgICAgICAgIiAgICBpZiAoIiwgYXJnc1syXSwgIi54ID49ICIsIGFyZ3Nb
MF0sICIuZ2V0X3dpZHRoKCkpIGJyZWFrO1xuIgorICAgICAgICAgICAgICAgICAgICAiICAgIGlm
ICgiLCBhcmdzWzJdLCAiLnkgPj0gIiwgYXJnc1swXSwgIi5nZXRfaGVpZ2h0KCkpIGJyZWFrO1xu
Iik7CiAgICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uVmVjdG9yTGVuZ3RoID49IDMpCi0gICAg
ICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAgaWYgKGxvY2F0aW9uLnog
Pj0gdGhlVGV4dHVyZS5nZXRfZGVwdGgoKSkgcmV0dXJuO1xuIik7CisgICAgICAgICAgICAgICAg
ICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiAgICBpZiAoIiwgYXJnc1syXSwgIi56
ID49ICIsIGFyZ3NbMF0sICIuZ2V0X2RlcHRoKCkpIGJyZWFrO1xuIik7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KLSAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiICAgIHRo
ZVRleHR1cmUud3JpdGUodmVjPCIsIG1ldGFsSW5uZXJUeXBlTmFtZSwgIiwgND4oaXRlbSIpOwor
ICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIgICAgIiwgYXJnc1swXSwgIi53
cml0ZSh2ZWM8IiwgbWV0YWxJbm5lclR5cGVOYW1lLCAiLCA0PigiLCBhcmdzWzFdKTsKICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0IC0gaXRlbVZlY3Rvckxlbmd0aDsgKytpKQogICAgICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiwgMCIpOwogICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCgiKSwgIik7CiAgICAgICAgIGlmICh0ZXh0dXJlVHlwZS5pc1RleHR1cmVBcnJheSgp
KSB7CiAgICAgICAgICAgICBBU1NFUlQobG9jYXRpb25WZWN0b3JMZW5ndGggPiAxKTsKLSAgICAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoInVpbnQiLCB2ZWN0b3JTdWZmaXgo
bG9jYXRpb25WZWN0b3JMZW5ndGggLSAxKSwgIihsb2NhdGlvbi4iLCAieHl6dyJfc3RyLnN1YnN0
cmluZygwLCBsb2NhdGlvblZlY3Rvckxlbmd0aCAtIDEpLCAiKSwgdWludChsb2NhdGlvbi4iLCAi
eHl6dyJfc3RyLnN1YnN0cmluZyhsb2NhdGlvblZlY3Rvckxlbmd0aCAtIDEsIDEpLCAnKScpOwor
ICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgidWludCIsIHZlY3RvclN1
ZmZpeChsb2NhdGlvblZlY3Rvckxlbmd0aCAtIDEpLCAnKCcsIGFyZ3NbMl0sICcuJywgInh5enci
X3N0ci5zdWJzdHJpbmcoMCwgbG9jYXRpb25WZWN0b3JMZW5ndGggLSAxKSwgIiksIHVpbnQoIiwg
YXJnc1syXSwgIi4iLCAieHl6dyJfc3RyLnN1YnN0cmluZyhsb2NhdGlvblZlY3Rvckxlbmd0aCAt
IDEsIDEpLCAnKScpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIu
ZmxleGlibGVBcHBlbmQoInVpbnQiLCB2ZWN0b3JTdWZmaXgobG9jYXRpb25WZWN0b3JMZW5ndGgp
LCAiKGxvY2F0aW9uKSIpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVu
ZCgidWludCIsIHZlY3RvclN1ZmZpeChsb2NhdGlvblZlY3Rvckxlbmd0aCksICcoJywgYXJnc1sy
XSwgJyknKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoCiAgICAgICAgICAgICAiKTtc
biIKLSAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICk7Ci0gICAgICAgIHJldHVybiBzdHJpbmdC
dWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAifSB3aGlsZSgwKTtcbiIpOworCisgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5u
YW1lKCkgPT0gIkdhdGhlckFscGhhIikgewpAQCAtODIyLDcgKzY3Myw2IEBAIFN0cmluZyB3cml0
ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnUKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIE1ldGFs
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5h
dGl2ZUZ1bmN0aW9uV3JpdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5oCShyZXZpc2lv
biAyNDgyNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9X
SExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcg
QEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KICNpbmNsdWRlICJXSExTTE1hbmdsZWROYW1lcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC00NSw3ICs0Niw3IEBAIG5hbWVzcGFjZSBNZXRhbCB7CiAKIGNsYXNzIFR5cGVOYW1lcjsK
IAotU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uJiwgTWFuZ2xlZEZ1bmN0aW9uTmFtZSBvdXRwdXRGdW5jdGlvbk5hbWUsIEludHJpbnNpY3Mm
LCBUeXBlTmFtZXImKTsKK3ZvaWQgaW5saW5lTmF0aXZlRnVuY3Rpb24oU3RyaW5nQnVpbGRlciYs
IEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYsIE1hbmdsZWRWYXJpYWJsZU5hbWUgcmV0
dXJuTmFtZSwgY29uc3QgVmVjdG9yPE1hbmdsZWRWYXJpYWJsZU5hbWU+JiBhcmd1bWVudE5hbWVz
LCBJbnRyaW5zaWNzJiwgVHlwZU5hbWVyJik7CiAKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbXB1dGVQaXBlbGluZU1ldGFsLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9H
UFVDb21wdXRlUGlwZWxpbmVNZXRhbC5tbQkocmV2aXNpb24gMjQ4MjcxKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbXB1dGVQaXBlbGluZU1ldGFs
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw4IEBACiAjaW1wb3J0IDxNZXRhbC9NZXRh
bC5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KICNpbXBvcnQgPHd0Zi90
ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CisjaW1wb3J0IDx3dGYvTW9ub3RvbmljVGltZS5oPgor
I2ltcG9ydCA8d3RmL0RhdGFMb2cuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC04NSwx
MiArODcsMTQgQEAgc3RhdGljIE9wdGlvbmFsPFdITFNMOjpDb21wdXRlRGltZW5zaW9ucwogICAg
ICAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKIAogICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7CisgICAgICAgIGF1dG8gc3RhcnQgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKICAg
ICAgICAgY29tcHV0ZUxpYnJhcnkgPSBhZG9wdE5TKFtkZXZpY2UucGxhdGZvcm1EZXZpY2UoKSBu
ZXdMaWJyYXJ5V2l0aFNvdXJjZTp3aGxzbENvbXBpbGVSZXN1bHQtPm1ldGFsU291cmNlIG9wdGlv
bnM6bmlsIGVycm9yOiZlcnJvcl0pOworICAgICAgICBkYXRhTG9nTG4oIm1ldGFsIGNvbXBpbGUg
dG9vazogIiwgKE1vbm90b25pY1RpbWU6Om5vdygpIC0gc3RhcnQpLm1pbGxpc2Vjb25kcygpLCAi
IG1zIik7CiAgICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0jaWZuZGVmIE5ERUJV
RworLy8jaWZuZGVmIE5ERUJVRwogICAgICAgICBpZiAoIWNvbXB1dGVMaWJyYXJ5KQogICAgICAg
ICAgICAgTlNMb2coQCIlQCIsIGVycm9yKTsKLSNlbmRpZgorLy8jZW5kaWYKICAgICAgICAgQVNT
RVJUKGNvbXB1dGVMaWJyYXJ5KTsKICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU3NzEgT25jZSB3ZSB6ZXJvLWZpbGwgdmFyaWFibGVz
LCB0aGVyZSBzaG91bGQgYmUgbm8gd2FybmluZ3MsIHNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIEFT
U0VSVCghZXJyb3IpIGhlcmUuCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375560</attachid>
            <date>2019-08-05 14:43:34 -0700</date>
            <delta_ts>2019-08-05 15:50:59 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>50141</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0ODI3MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE5LTA4LTA1ICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gSW5saW5lIGFsbCBu
YXRpdmUgZnVuY3Rpb24gY2FsbHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMDM1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE5hdGl2ZSBmdW5jdGlvbnMgY2FsbHMgdGVuZCB0byBiZSByZWFsbHkgc21h
bGwuIElmIHdlIGlubGluZSBpbiB0aGUgZ2VuZXJhdGVkCisgICAgICAgIE1ldGFsIGNvZGUsIHdl
IGVuZCB1cCB3aXRoIGZhc3RlciBNZXRhbCBjb21waWxlIHRpbWVzLiBPbiBjb21wdXRlX2JvaWRz
LCB0aGlzCisgICAgICAgIHByb3ZpZGVzIGEgfjEwbXMgaW1wcm92ZW1lbnQuCisKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2
aXNpdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OnNoYXJlZE1ldGFsRnVuY3Rp
b25zKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1
bmN0aW9uV3JpdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6aW5saW5l
TmF0aXZlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjp3cml0ZU5h
dGl2ZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9N
ZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmg6CisKIDIwMTktMDgtMDUgIFRha2FzaGkg
S29tb3JpICA8VGFrYXNoaS5Lb21vcmlAc29ueS5jb20+CiAKICAgICAgICAgW0N1cmxdIGltcGxl
bWVudCBDZXJ0aWZpY2F0ZUluZm86OnN1bW1hcnlJbmZvCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1
bmN0aW9uV3JpdGVyLmNwcAkocmV2aXNpb24gMjQ4MjcxKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyOCwxMSArMjI4LDkgQEAgcHJvdGVjdGVkOgogICAgIE9wdGlvbmFsPE1hbmds
ZWRWYXJpYWJsZU5hbWU+IG1fYnJlYWtPdXRPZkN1cnJlbnRMb29wRWFybHlWYXJpYWJsZTsKIH07
CiAKLXZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6Ok5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCit2b2lkIEZ1bmN0aW9u
RGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJikK
IHsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9mdW5jdGlvbk1hcHBpbmcuZmluZCgmbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbik7Ci0gICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fZnVuY3Rpb25NYXBw
aW5nLmVuZCgpKTsKLSAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKHdyaXRlTmF0aXZlRnVuY3Rp
b24obmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiwgaXRlcmF0b3ItPnZhbHVlLCBtX2ludHJpbnNp
Y3MsIG1fdHlwZU5hbWVyKSk7CisgICAgLy8gV2UgaW5saW5lIG5hdGl2ZSBmdW5jdGlvbiBjYWxs
cy4KIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RnVuY3Rp
b25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pCkBAIC01NzcsMTkgKzU3NSwzMSBAQCB2
b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChhcmd1bWVudCk7CiAgICAgICAgIGFyZ3VtZW50TmFtZXMuYXBwZW5kKHRha2VM
YXN0VmFsdWUoKSk7CiAgICAgfQotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Z1bmN0aW9uTWFwcGlu
Zy5maW5kKCZjYWxsRXhwcmVzc2lvbi5mdW5jdGlvbigpKTsKLSAgICBBU1NFUlQoaXRlcmF0b3Ig
IT0gbV9mdW5jdGlvbk1hcHBpbmcuZW5kKCkpOwotICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2Vu
ZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7Ci0gICAgaWYgKCFtYXRjaGVzKGNhbGxFeHByZXNzaW9u
LnJlc29sdmVkVHlwZSgpLCBtX2ludHJpbnNpY3Mudm9pZFR5cGUoKSkpCi0gICAgICAgIG1fc3Ry
aW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZChtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUo
Y2FsbEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICIp
OwotICAgIG1fc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZChpdGVyYXRvci0+dmFsdWUsICco
Jyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1bWVudE5hbWVzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIGlmIChpKQotICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgi
LCAiKTsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKGFyZ3VtZW50TmFt
ZXNbaV0pOworCisgICAgYm9vbCBpc1ZvaWQgPSBtYXRjaGVzKGNhbGxFeHByZXNzaW9uLnJlc29s
dmVkVHlwZSgpLCBtX2ludHJpbnNpY3Mudm9pZFR5cGUoKSk7CisgICAgTWFuZ2xlZFZhcmlhYmxl
TmFtZSByZXR1cm5OYW1lOworICAgIGlmICghaXNWb2lkKSB7CisgICAgICAgIHJldHVybk5hbWUg
PSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmZs
ZXhpYmxlQXBwZW5kKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShjYWxsRXhwcmVzc2lv
bi5yZXNvbHZlZFR5cGUoKSksICcgJywgcmV0dXJuTmFtZSwgIjtcbiIpOworICAgIH0KKworICAg
IGlmIChpczxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+KGNhbGxFeHByZXNzaW9uLmZ1
bmN0aW9uKCkpKQorICAgICAgICBpbmxpbmVOYXRpdmVGdW5jdGlvbihtX3N0cmluZ0J1aWxkZXIs
IGRvd25jYXN0PEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4oY2FsbEV4cHJlc3Npb24u
ZnVuY3Rpb24oKSksIHJldHVybk5hbWUsIGFyZ3VtZW50TmFtZXMsIG1faW50cmluc2ljcywgbV90
eXBlTmFtZXIpOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9mdW5jdGlv
bk1hcHBpbmcuZmluZCgmY2FsbEV4cHJlc3Npb24uZnVuY3Rpb24oKSk7CisgICAgICAgIEFTU0VS
VChpdGVyYXRvciAhPSBtX2Z1bmN0aW9uTWFwcGluZy5lbmQoKSk7CisgICAgICAgIGlmICghaXNW
b2lkKQorICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKHJldHVybk5h
bWUsICIgPSAiKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKGl0ZXJh
dG9yLT52YWx1ZSwgJygnKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1bWVu
dE5hbWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoaSkKKyAgICAgICAgICAgICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIsICIpOworICAgICAgICAgICAgbV9zdHJpbmdCdWls
ZGVyLmZsZXhpYmxlQXBwZW5kKGFyZ3VtZW50TmFtZXNbaV0pOworICAgICAgICB9CisgICAgICAg
IG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIik7XG4iKTsKICAgICB9Ci0gICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZCgiKTtcbiIpOwotICAgIGFwcGVuZFJpZ2h0VmFsdWUoY2FsbEV4cHJlc3Npb24s
IHZhcmlhYmxlTmFtZSk7CisKKyAgICBhcHBlbmRSaWdodFZhbHVlKGNhbGxFeHByZXNzaW9uLCBy
ZXR1cm5OYW1lKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFT
VDo6Q29tbWFFeHByZXNzaW9uJiBjb21tYUV4cHJlc3Npb24pCkBAIC04MDQsMTAgKzgxNCw2IEBA
IHN0YXRpYyBTaGFyZWRNZXRhbEZ1bmN0aW9uc1Jlc3VsdCBzaGFyZWQKIAogICAgIHVuc2lnbmVk
IG51bUZ1bmN0aW9ucyA9IDA7CiAgICAgSGFzaE1hcDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24q
LCBNYW5nbGVkRnVuY3Rpb25OYW1lPiBmdW5jdGlvbk1hcHBpbmc7Ci0gICAgZm9yIChhdXRvJiBu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9ucygpKSB7Ci0gICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gZnVuY3Rpb25NYXBwaW5nLmFkZCgm
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiwgTWFuZ2xlZEZ1bmN0aW9uTmFtZSB7IG51bUZ1bmN0
aW9ucysrIH0pOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0Lmlz
TmV3RW50cnkpOwotICAgIH0KICAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5pdGlvbiA6IHBy
b2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKSB7CiAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0g
ZnVuY3Rpb25NYXBwaW5nLmFkZCgmZnVuY3Rpb25EZWZpbml0aW9uLCBNYW5nbGVkRnVuY3Rpb25O
YW1lIHsgbnVtRnVuY3Rpb25zKysgfSk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0
LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CkBAIC04MTUsMTAgKzgyMSw2IEBAIHN0YXRpYyBTaGFy
ZWRNZXRhbEZ1bmN0aW9uc1Jlc3VsdCBzaGFyZWQKIAogICAgIHsKICAgICAgICAgRnVuY3Rpb25E
ZWNsYXJhdGlvbldyaXRlciBmdW5jdGlvbkRlY2xhcmF0aW9uV3JpdGVyKHR5cGVOYW1lciwgZnVu
Y3Rpb25NYXBwaW5nKTsKLSAgICAgICAgZm9yIChhdXRvJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpKSB7Ci0gICAgICAgICAg
ICBpZiAocmVhY2hhYmxlRnVuY3Rpb25zLmNvbnRhaW5zKCZuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uKSkKLSAgICAgICAgICAgICAgICBmdW5jdGlvbkRlY2xhcmF0aW9uV3JpdGVyLnZpc2l0KG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOwotICAgICAgICB9CiAgICAgICAgIGZvciAoYXV0byYg
ZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkpIHsKICAg
ICAgICAgICAgIGlmICghZnVuY3Rpb25EZWZpbml0aW9uLT5lbnRyeVBvaW50VHlwZSgpICYmIHJl
YWNoYWJsZUZ1bmN0aW9ucy5jb250YWlucygmZnVuY3Rpb25EZWZpbml0aW9uKSkKICAgICAgICAg
ICAgICAgICBmdW5jdGlvbkRlY2xhcmF0aW9uV3JpdGVyLnZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlv
bik7CkBAIC04NjksMTAgKzg3MSw2IEBAIFJlbmRlck1ldGFsRnVuY3Rpb25zIG1ldGFsRnVuY3Rp
b25zKFByb2cKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzaGFyZWRNZXRhbEZ1bmN0aW9ucy5t
ZXRhbEZ1bmN0aW9ucyk7CiAKICAgICBSZW5kZXJGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIgZnVu
Y3Rpb25EZWZpbml0aW9uV3JpdGVyKHByb2dyYW0uaW50cmluc2ljcygpLCB0eXBlTmFtZXIsIHNo
YXJlZE1ldGFsRnVuY3Rpb25zLmZ1bmN0aW9uTWFwcGluZywgV1RGTW92ZShtYXRjaGVkU2VtYW50
aWNzKSwgbGF5b3V0KTsKLSAgICBmb3IgKGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24g
OiBwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkpIHsKLSAgICAgICAgaWYgKHJl
YWNoYWJsZUZ1bmN0aW9ucy5jb250YWlucygmbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpCi0g
ICAgICAgICAgICBmdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIudmlzaXQobmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbik7Ci0gICAgfQogICAgIGZvciAoYXV0byYgZnVuY3Rpb25EZWZpbml0aW9uIDog
cHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkpIHsKICAgICAgICAgaWYgKHJlYWNoYWJsZUZ1
bmN0aW9ucy5jb250YWlucygmZnVuY3Rpb25EZWZpbml0aW9uKSkKICAgICAgICAgICAgIGZ1bmN0
aW9uRGVmaW5pdGlvbldyaXRlci52aXNpdChmdW5jdGlvbkRlZmluaXRpb24pOwpAQCAtOTAwLDEw
ICs4OTgsNiBAQCBDb21wdXRlTWV0YWxGdW5jdGlvbnMgbWV0YWxGdW5jdGlvbnMoUHJvCiAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoc2hhcmVkTWV0YWxGdW5jdGlvbnMubWV0YWxGdW5jdGlvbnMp
OwogCiAgICAgQ29tcHV0ZUZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlciBmdW5jdGlvbkRlZmluaXRp
b25Xcml0ZXIocHJvZ3JhbS5pbnRyaW5zaWNzKCksIHR5cGVOYW1lciwgc2hhcmVkTWV0YWxGdW5j
dGlvbnMuZnVuY3Rpb25NYXBwaW5nLCBXVEZNb3ZlKG1hdGNoZWRTZW1hbnRpY3MpLCBsYXlvdXQp
OwotICAgIGZvciAoYXV0byYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSkgewotICAgICAgICBpZiAocmVhY2hhYmxlRnVuY3Rp
b25zLmNvbnRhaW5zKCZuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSkKLSAgICAgICAgICAgIGZ1
bmN0aW9uRGVmaW5pdGlvbldyaXRlci52aXNpdChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKTsK
LSAgICB9CiAgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0
aW9uRGVmaW5pdGlvbnMoKSkgewogICAgICAgICBpZiAocmVhY2hhYmxlRnVuY3Rpb25zLmNvbnRh
aW5zKCZmdW5jdGlvbkRlZmluaXRpb24pKQogICAgICAgICAgICAgZnVuY3Rpb25EZWZpbml0aW9u
V3JpdGVyLnZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9X
SExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcAkocmV2aXNpb24gMjQ4MjcxKQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldy
aXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCwyNiArMTIwLDIwIEBAIHN0YXRpYyBjb25z
dCBjaGFyKiB2ZWN0b3JTdWZmaXgoaW50IHZlY3QKICAgICB9CiB9CiAKLVN0cmluZyB3cml0ZU5h
dGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbiwgTWFuZ2xlZEZ1bmN0aW9uTmFtZSBvdXRwdXRGdW5jdGlvbk5hbWUsIElu
dHJpbnNpY3MmIGludHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyKQordm9pZCBpbmxpbmVO
YXRpdmVGdW5jdGlvbihTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyLCBBU1Q6Ok5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24sIE1hbmdsZWRWYXJp
YWJsZU5hbWUgcmV0dXJuTmFtZSwgY29uc3QgVmVjdG9yPE1hbmdsZWRWYXJpYWJsZU5hbWU+JiBh
cmdzLCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzLCBUeXBlTmFtZXImIHR5cGVOYW1lcikKIHsKLSAg
ICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24uaXNDYXN0KCkpIHsKICAgICAgICAgYXV0byYgcmV0dXJuVHlwZSA9IG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpOwogICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9
IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUocmV0dXJuVHlwZSk7CiAgICAgICAgIGlmICgh
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpKSB7Ci0gICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgICAgIG1ldGFs
UmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICIoKSB7XG4iCi0gICAgICAgICAg
ICAgICAgIiAgICAiLCBtZXRhbFJldHVybk5hbWUsICIgeCA9IHsgfTtcbiIKLSAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB4O1xuIgotICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAg
ICApOwotICAgICAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQocmV0dXJuTmFtZSwgIiA9IHsgfTtc
biIpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxKTsKICAgICAg
ICAgYXV0byYgcGFyYW1ldGVyVHlwZSA9ICpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKVswXS0+dHlwZSgpOwogICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUocGFyYW1ldGVyVHlwZSk7Ci0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuZmxleGlibGVBcHBlbmQobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0
aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIgeCkge1xuIik7CisgICAgICAgIHN0
cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIntcbiIsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIiB4
ID0gIiwgYXJnc1swXSwgIjtcbiIpOwogCiAgICAgICAgIHsKICAgICAgICAgICAgIGF1dG8gaXNF
bnVtZXJhdGlvbkRlZmluaXRpb24gPSBbXSAoYXV0byYgdHlwZSkgewpAQCAtMTYwLDUyICsxNTQs
MzIgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdQogICAgICAgICB9
CiAKICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAgICAgICAgICAgICIg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PCIsIG1ldGFsUmV0dXJuTmFtZSwgIj4oeCk7XG4iCi0gICAg
ICAgICAgICAifVxuIgotICAgICAgICApOwotICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50
b1N0cmluZygpOwotICAgIH0KKyAgICAgICAgICAgIHJldHVybk5hbWUsICIgPSBzdGF0aWNfY2Fz
dDwiLCBtZXRhbFJldHVybk5hbWUsICI+KHgpO1xufVxuIik7CiAKLSAgICBpZiAobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yLnZhbHVlIikgewotICAgICAgICBB
U1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEp
OwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBl
KCkpOwotICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgbWV0YWxSZXR1cm5OYW1lLCAn
ICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIgeCkge1xu
IgotICAgICAgICAgICAgIiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IiwgbWV0YWxSZXR1cm5OYW1l
LCAiPih4KTtcbiIKLSAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICk7Ci0gICAgICAgIHJldHVy
biBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODA3
NyBBdXRob3JzIGNhbiBtYWtlIGEgc3RydWN0IGZpZWxkIG5hbWVkICJsZW5ndGgiIHRvby4gQXV0
b2dlbmVyYXRlZCBnZXR0ZXJzIGZvciB0aG9zZSBzaG91bGRuJ3QgdGFrZSB0aGlzIGNvZGVwYXRo
LgogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3Iu
bGVuZ3RoIikgewogICAgICAgICBBU1NFUlRfVU5VU0VEKGludHJpbnNpY3MsIG1hdGNoZXMobmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCksIGludHJpbnNpY3MudWludFR5cGUoKSkpOwog
ICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6
ZSgpID09IDEpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
WzBdLT50eXBlKCkpOwogICAgICAgICBhdXRvJiBwYXJhbWV0ZXJUeXBlID0gbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKS0+dW5pZnlOb2RlKCk7CiAgICAg
ICAgIGF1dG8mIHVubmFtZWRQYXJhbWV0ZXJUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlw
ZT4ocGFyYW1ldGVyVHlwZSk7CiAgICAgICAgIGlmIChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1l
ZFBhcmFtZXRlclR5cGUpKSB7CiAgICAgICAgICAgICBhdXRvJiBhcnJheVBhcmFtZXRlclR5cGUg
PSBkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFBhcmFtZXRlclR5cGUpOwogICAgICAg
ICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAgICAgICAgICAgICAgICAidWlu
dCAiLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1lLCAiKSB7XG4i
Ci0gICAgICAgICAgICAgICAgIiAgICByZXR1cm4gIiwgYXJyYXlQYXJhbWV0ZXJUeXBlLm51bUVs
ZW1lbnRzKCksICI7XG4iCi0gICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICk7Ci0g
ICAgICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgICAgICAgICAg
ICAgIHJldHVybk5hbWUsICIgPSAiLCBhcnJheVBhcmFtZXRlclR5cGUubnVtRWxlbWVudHMoKSwg
IjtcbiIpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJU
KGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkUGFyYW1ldGVyVHlwZSkpOwogICAg
ICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgInVpbnQgIiwg
b3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIiB2KSB7XG4iCi0g
ICAgICAgICAgICAiICAgIHJldHVybiB2Lmxlbmd0aDtcbiIKLSAgICAgICAgICAgICJ9XG4iCi0g
ICAgICAgICk7Ci0gICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAg
ICAgICAgICByZXR1cm5OYW1lLCAiID0gIiwgYXJnc1swXSwgIi5sZW5ndGg7XG4iKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5h
bWUoKS5zdGFydHNXaXRoKCJvcGVyYXRvci4iX3N0cikpIHsKLSAgICAgICAgYXV0byBhcHBlbmRN
YW5nbGVkRmllbGROYW1lID0gWyZdKFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIsIGNvbnN0
IFN0cmluZyYgZmllbGROYW1lKSB7CisgICAgICAgIGF1dG8gYXBwZW5kTWFuZ2xlZEZpZWxkTmFt
ZSA9IFsmXSAoY29uc3QgU3RyaW5nJiBmaWVsZE5hbWUpIHsKICAgICAgICAgICAgIGF1dG8mIHVu
aWZ5Tm9kZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBl
KCktPnVuaWZ5Tm9kZSgpOwogICAgICAgICAgICAgYXV0byYgbmFtZWRUeXBlID0gZG93bmNhc3Q8
QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CiAgICAgICAgICAgICBpZiAoaXM8QVNUOjpTdHJ1
Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpKSB7CkBAIC0yMjEsNTMgKzE5NSwzNCBAQCBTdHJp
bmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1CiAKICAgICAgICAgaWYgKG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLmVuZHNXaXRoKCI9IikpIHsKICAgICAgICAgICAg
IEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0g
Mik7Ci0gICAgICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsw
XS0+dHlwZSgpKTsKLSAgICAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1l
dGVycygpWzFdLT50eXBlKCkpOwotICAgICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlw
ZSgpKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoCi0gICAgICAg
ICAgICAgICAgbWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBt
ZXRhbFBhcmFtZXRlcjFOYW1lLCAiIHYsICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgbikge1xu
IgotICAgICAgICAgICAgICAgICIgICAgdi4iCi0gICAgICAgICAgICApOwotCiAgICAgICAgICAg
ICBhdXRvIGZpZWxkTmFtZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0
cmluZygib3BlcmF0b3IuIl9zdHIubGVuZ3RoKCkpOwogICAgICAgICAgICAgZmllbGROYW1lID0g
ZmllbGROYW1lLnN1YnN0cmluZygwLCBmaWVsZE5hbWUubGVuZ3RoKCkgLSAxKTsKLSAgICAgICAg
ICAgIGFwcGVuZE1hbmdsZWRGaWVsZE5hbWUoc3RyaW5nQnVpbGRlciwgZmllbGROYW1lKTsKIAot
ICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiA9IG47XG4iCi0gICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdjtcbiIKLSAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAg
KTsKLSAgICAgICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAorICAgICAgICAgICAgICAgIHJldHVy
bk5hbWUsICIgPSAiLCBhcmdzWzBdLCAiO1xuIiwKKyAgICAgICAgICAgICAgICByZXR1cm5OYW1l
LCAnLicpOworICAgICAgICAgICAgYXBwZW5kTWFuZ2xlZEZpZWxkTmFtZShmaWVsZE5hbWUpOwor
ICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiID0gIiwgYXJnc1sxXSwg
IjtcbiIpOworCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBBU1NF
UlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEpOwot
ICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkp
OwotICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwotICAgICAgICBzdHJpbmdC
dWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgbWV0YWxSZXR1cm5OYW1lLCAnICcs
IG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIgdikge1xuIgot
ICAgICAgICAgICAgIiAgICByZXR1cm4gdi4iCi0gICAgICAgICk7Ci0KICAgICAgICAgYXV0byBm
aWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9w
ZXJhdG9yLiJfc3RyLmxlbmd0aCgpKTsKLSAgICAgICAgYXBwZW5kTWFuZ2xlZEZpZWxkTmFtZShz
dHJpbmdCdWlsZGVyLCBmaWVsZE5hbWUpOwotICAgICAgICAgICAgCi0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCI7XG4iCi0gICAgICAgICAgICAifVxuIgotICAgICAgICApOwotICAgICAg
ICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgICAgICBzdHJpbmdCdWlsZGVy
LmZsZXhpYmxlQXBwZW5kKAorICAgICAgICAgICAgcmV0dXJuTmFtZSwgIiA9ICIsIGFyZ3NbMF0s
ICcuJyk7CisgICAgICAgIGFwcGVuZE1hbmdsZWRGaWVsZE5hbWUoZmllbGROYW1lKTsKKyAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIjtcbiIpOworICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN0YXJ0c1dpdGgoIm9w
ZXJhdG9yJi4iX3N0cikpIHsKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRl
ck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFJldHVy
bk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24udHlwZSgpKTsKKyAgICAgICAgYXV0byBmaWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yJi4iX3N0ci5sZW5ndGgoKSk7CiAK
ICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAgICAgICAgICAgIG1ldGFs
UmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJO
YW1lLCAiIHYpIHtcbiIKLSAgICAgICAgICAgICIgICAgcmV0dXJuICYodi0+IgotICAgICAgICAp
OworICAgICAgICAgICAgcmV0dXJuTmFtZSwgIiA9ICYoIiwgYXJnc1swXSwgIi0+Iik7CiAKLSAg
ICAgICAgYXV0byBmaWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5z
dWJzdHJpbmcoIm9wZXJhdG9yJi4iX3N0ci5sZW5ndGgoKSk7CiAgICAgICAgIGF1dG8mIHVubmFt
ZWRUeXBlID0gKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBl
KCk7CiAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+
KHVubmFtZWRUeXBlKS5lbGVtZW50VHlwZSgpLnVuaWZ5Tm9kZSgpOwogICAgICAgICBhdXRvJiBu
YW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKTsKQEAgLTI3OSwy
NiArMjM0LDIwIEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnUKICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKGZp
ZWxkTmFtZSk7CiAKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoCi0gICAgICAgICAgICAi
KTtcbiIKLSAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICk7Ci0gICAgICAgIHJldHVybiBzdHJp
bmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIpO1xu
Iik7CisKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3ImW10iKSB7CiAgICAgICAgIEFTU0VSVChuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7Ci0gICAgICAg
IGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUo
Km5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwotICAg
ICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JU
eXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsK
LSAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JU
eXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAgICAgQVNTRVJUKGlz
PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbMF0tPnR5cGUoKSkpOworCiAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVB
cHBlbmQoCi0gICAgICAgICAgICBtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25O
YW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUsICIgdiwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFt
ZSwgIiBuKSB7XG4iCi0gICAgICAgICAgICAiICAgIGlmIChuIDwgdi5sZW5ndGgpIHJldHVybiAm
KHYucG9pbnRlcltuXSk7XG4iCi0gICAgICAgICAgICAiICAgIHJldHVybiBudWxscHRyO1xuIgot
ICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxk
ZXIudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICJpZiAoIiwgYXJnc1sxXSwgIiA8ICIsIGFyZ3Nb
MF0sICIubGVuZ3RoKSAiLCByZXR1cm5OYW1lLCAiID0gJigiLCBhcmdzWzBdLCAiLnBvaW50ZXJb
IiwgYXJnc1sxXSwgIl0pO1xuIgorICAgICAgICAgICAgImVsc2UgIiwgcmV0dXJuTmFtZSwgIiA9
IG51bGxwdHI7XG4iKTsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgYXV0byBtYXRy
aXhEaW1lbnNpb24gPSBbJl0gKHVuc2lnbmVkIHR5cGVBcmd1bWVudEluZGV4KSAtPiB1bnNpZ25l
ZCB7CkBAIC0zMTcsODIgKzI2Niw2OCBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6
Ok5hdGl2ZUZ1CiAKICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0g
Im9wZXJhdG9yW10iKSB7CiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIx
TmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1l
dGVyMk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJl
dHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24udHlwZSgpKTsKIAogICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlJvd3MgPSBudW1i
ZXJPZk1hdHJpeFJvd3MoKTsKICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZDb2x1bW5zID0gbnVt
YmVyT2ZNYXRyaXhDb2x1bW5zKCk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBl
bmQoImRvIHtcbiIsIG1ldGFsUmV0dXJuTmFtZSwgIiByZXN1bHQ7XG4iKTsKIAogICAgICAgICBz
dHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgbWV0YWxSZXR1cm5OYW1l
LCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAiIG0s
ICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgaSkge1xuIgotICAgICAgICAgICAgIiAgICBpZiAo
aSA+PSAiLCBudW1iZXJPZlJvd3MsICIpIHJldHVybiAiLCBtZXRhbFJldHVybk5hbWUsICIoMCk7
XG4iCi0gICAgICAgICAgICAiICAgICIsIG1ldGFsUmV0dXJuTmFtZSwgIiByZXN1bHQ7XG4iCi0g
ICAgICAgICAgICAiICAgIHJlc3VsdFswXSA9IG1baV07XG4iCi0gICAgICAgICAgICAiICAgIHJl
c3VsdFsxXSA9IG1baSArICIsIG51bWJlck9mUm93cywgIl07XG4iCi0gICAgICAgICk7CisgICAg
ICAgICAgICAiICAgIGlmICgiLCBhcmdzWzFdLCAiID49ICIsIG51bWJlck9mUm93cywgIikgeyIs
IHJldHVybk5hbWUsICIgPSAiLCBtZXRhbFJldHVybk5hbWUsICIoMCk7IGJyZWFrO31cbiIsCisg
ICAgICAgICAgICAiICAgIHJlc3VsdFswXSA9ICIsIGFyZ3NbMF0sICdbJywgYXJnc1sxXSwgIl07
XG4iLAorICAgICAgICAgICAgIiAgICByZXN1bHRbMV0gPSAiLCBhcmdzWzBdLCAnWycsIGFyZ3Nb
MV0sICIgKyAiLCBudW1iZXJPZlJvd3MsICJdO1xuIik7CisKICAgICAgICAgaWYgKG51bWJlck9m
Q29sdW1ucyA+PSAzKQotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgi
ICAgIHJlc3VsdFsyXSA9IG1baSArICIsIG51bWJlck9mUm93cyAqIDIsICJdO1xuIik7CisgICAg
ICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIgICAgcmVzdWx0WzJdID0gIiwg
YXJnc1swXSwgJ1snLCBhcmdzWzFdLCAiICsgIiwgbnVtYmVyT2ZSb3dzICogMiwgIl07XG4iKTsK
ICAgICAgICAgaWYgKG51bWJlck9mQ29sdW1ucyA+PSA0KQotICAgICAgICAgICAgc3RyaW5nQnVp
bGRlci5mbGV4aWJsZUFwcGVuZCgiICAgIHJlc3VsdFszXSA9IG1baSArICIsIG51bWJlck9mUm93
cyAqIDMsICJdO1xuIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKAotICAgICAgICAg
ICAgIiAgICByZXR1cm4gcmVzdWx0O1xuIgotICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgKTsK
LSAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIHN0
cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiAgICByZXN1bHRbM10gPSAiLCBhcmdzWzBdLCAn
WycsIGFyZ3NbMV0sICIgKyAiLCBudW1iZXJPZlJvd3MgKiAzLCAiXTtcbiIpOworCisgICAgICAg
IHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoCisgICAgICAgICAgICAiICAgICIsIHJldHVy
bk5hbWUsICIgPSByZXN1bHQ7XG4iLAorICAgICAgICAgICAgIn0gd2hpbGUgKDApO1xuIik7CisK
KyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLm5hbWUoKSA9PSAib3BlcmF0b3JbXT0iKSB7CiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMyk7Ci0gICAgICAgIGF1dG8g
bWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwogICAgICAgICBh
dXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsKLSAgICAg
ICAgYXV0byBtZXRhbFBhcmFtZXRlcjNOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlw
ZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMl0tPnR5cGUoKSk7CiAg
ICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlw
ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7CiAKICAgICAgICAgdW5zaWduZWQg
bnVtYmVyT2ZSb3dzID0gbnVtYmVyT2ZNYXRyaXhSb3dzKCk7CiAgICAgICAgIHVuc2lnbmVkIG51
bWJlck9mQ29sdW1ucyA9IG51bWJlck9mTWF0cml4Q29sdW1ucygpOwogCisgICAgICAgIHN0cmlu
Z0J1aWxkZXIuZmxleGlibGVBcHBlbmQoImRvIHtcbiIsIG1ldGFsUmV0dXJuTmFtZSwgIiBtID0g
IiwgYXJnc1swXSwgIjtcbiIsCisgICAgICAgICAgICBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIGkg
PSAiLCBhcmdzWzFdLCAiO1xuIik7CisKICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFw
cGVuZCgKLSAgICAgICAgICAgIG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5h
bWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiBtLCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1l
LCAiIGksICIsIG1ldGFsUGFyYW1ldGVyM05hbWUsICIgdikge1xuIgotICAgICAgICAgICAgIiAg
ICBpZiAoaSA+PSAiLCBudW1iZXJPZlJvd3MsICIpIHJldHVybiBtO1xuIgotICAgICAgICAgICAg
IiAgICBtW2ldID0gdlswXTtcbiIKLSAgICAgICAgICAgICIgICAgbVtpICsgIiwgbnVtYmVyT2ZS
b3dzLCAiXSA9IHZbMV07XG4iCi0gICAgICAgICk7CisgICAgICAgICAgICAiICAgIGlmIChpID49
ICIsIG51bWJlck9mUm93cywgIikgeyIsIHJldHVybk5hbWUsICIgPSBtO1xuYnJlYWs7fVxuIiwK
KyAgICAgICAgICAgICIgICAgbVtpXSA9ICIsIGFyZ3NbMl0sICJbMF07XG4iLAorICAgICAgICAg
ICAgIiAgICBtW2kgKyAiLCBudW1iZXJPZlJvd3MsICJdID0gIiwgYXJnc1syXSwgIlsxXTtcbiIp
OwogICAgICAgICBpZiAobnVtYmVyT2ZDb2x1bW5zID49IDMpCi0gICAgICAgICAgICBzdHJpbmdC
dWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIgICAgbVtpICsgIiwgbnVtYmVyT2ZSb3dzICogMiwgIl0g
PSB2WzJdO1xuIik7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIg
ICAgbVtpICsgIiwgbnVtYmVyT2ZSb3dzICogMiwgIl0gPSAiLCBhcmdzWzJdLCAiWzJdO1xuIik7
CiAgICAgICAgIGlmIChudW1iZXJPZkNvbHVtbnMgPj0gNCkKLSAgICAgICAgICAgIHN0cmluZ0J1
aWxkZXIuZmxleGlibGVBcHBlbmQoIiAgICBtW2kgKyAiLCBudW1iZXJPZlJvd3MgKiAzLCAiXSA9
IHZbM107XG4iKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoCi0gICAgICAgICAgICAi
ICAgIHJldHVybiBtOyIKLSAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICk7Ci0gICAgICAgIHJl
dHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVy
LmZsZXhpYmxlQXBwZW5kKCIgICAgbVtpICsgIiwgbnVtYmVyT2ZSb3dzICogMywgIl0gPSAiLCBh
cmdzWzJdLCAiWzNdO1xuIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQo
CisgICAgICAgICAgICAiICAgICIsIHJldHVybk5hbWUsICIgPSBtO1xuIiwKKyAgICAgICAgICAg
ICJ9IHdoaWxlKDApO1xuIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAobmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5pc09wZXJhdG9yKCkpIHsKKyAgICAgICAgYXV0byBvcGVy
YXRvck5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9w
ZXJhdG9yIl9zdHIubGVuZ3RoKCkpOwogICAgICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgICAgIGF1dG8gb3BlcmF0
b3JOYW1lID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3RyaW5nKCJvcGVy
YXRvciJfc3RyLmxlbmd0aCgpKTsKICAgICAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXJOYW1l
ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7Ci0gICAgICAgICAgICBhdXRvIG1ldGFsUmV0dXJu
TmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi50eXBlKCkpOwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgK
LSAgICAgICAgICAgICAgICBtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1l
LCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIiB4KSB7XG4iCi0gICAgICAgICAgICAgICAgIiAg
ICByZXR1cm4gIiwgb3BlcmF0b3JOYW1lLCAieDtcbiIKLSAgICAgICAgICAgICAgICAifVxuIgot
ICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5n
KCk7CisgICAgICAgICAgICAgICAgIntcbiIsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIiB4ID0gIiwg
YXJnc1swXSwgIjtcbiIsIAorICAgICAgICAgICAgICAgIHJldHVybk5hbWUsICIgPSAiLCBvcGVy
YXRvck5hbWUsICJ4O1xufVxuIik7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAog
ICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6
ZSgpID09IDIpOwotICAgICAgICBhdXRvIG9wZXJhdG9yTmFtZSA9IG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ubmFtZSgpLnN1YnN0cmluZygib3BlcmF0b3IiX3N0ci5sZW5ndGgoKSk7Ci0gICAg
ICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5
cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwot
ICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVG
b3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgp
KTsKLSAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVG
b3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAgICAgc3RyaW5n
QnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAgICAgICAgICAgIG1ldGFsUmV0dXJuTmFtZSwgJyAn
LCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiB4LCAiLCBt
ZXRhbFBhcmFtZXRlcjJOYW1lLCAiIHkpIHtcbiIKLSAgICAgICAgICAgICIgICAgcmV0dXJuIHgg
Iiwgb3BlcmF0b3JOYW1lLCAiIHk7XG4iCi0gICAgICAgICAgICAifVxuIgotICAgICAgICApOwot
ICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgICAgICAgICAgcmV0
dXJuTmFtZSwgIiA9ICIsIGFyZ3NbMF0sICcgJywgb3BlcmF0b3JOYW1lLCAnICcsIGFyZ3NbMV0s
ICI7XG4iKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiY29zIgpAQCAtNDIwLDk2ICszNTUsNTUgQEAgU3RyaW5n
IHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdQogICAgICAgICB8fCBuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiYXN1aW50IgogICAgICAgICB8fCBuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiYXNmbG9hdCIpIHsKICAgICAgICAgQVNTRVJUKG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxKTsKLSAgICAg
ICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBl
KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKLSAg
ICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBl
KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAgICAgc3RyaW5nQnVpbGRl
ci5mbGV4aWJsZUFwcGVuZCgKLSAgICAgICAgICAgIG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRw
dXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1lLCAiIHgpIHtcbiIKLSAgICAg
ICAgICAgICIgICAgcmV0dXJuICIsIG1hcEZ1bmN0aW9uTmFtZShuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLm5hbWUoKSksICIoeCk7XG4iCi0gICAgICAgICAgICAifVxuIgotICAgICAgICApOwot
ICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgICAgICAgICAgcmV0
dXJuTmFtZSwgIiA9ICIsIG1hcEZ1bmN0aW9uTmFtZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
Lm5hbWUoKSksICcoJywgYXJnc1swXSwgIik7XG4iKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAicG93IiB8fCBu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiYXRhbjIiKSB7CiAgICAgICAgIEFT
U0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7
Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBl
KCkpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS0+
dHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAgICAg
c3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAgICAgICAgICAgIG1ldGFsUmV0dXJuTmFt
ZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiB4
LCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIHkpIHtcbiIKLSAgICAgICAgICAgICIgICAgcmV0
dXJuICIsIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLCAiKHgsIHkpO1xuIgotICAg
ICAgICAgICAgIn1cbiIKLSAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIu
dG9TdHJpbmcoKTsKKyAgICAgICAgICAgIHJldHVybk5hbWUsICIgPSAiLCBuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKSwgIigiLCBhcmdzWzBdLCAiLCAiLCBhcmdzWzFdLCAiKTtcbiIp
OworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ubmFtZSgpID09ICJBbGxNZW1vcnlCYXJyaWVyV2l0aEdyb3VwU3luYyIpIHsKICAgICAg
ICAgQVNTRVJUKCFuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkp
OwotICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgInZv
aWQgIiwgb3V0cHV0RnVuY3Rpb25OYW1lLCAiKCkge1xuIgotICAgICAgICAgICAgIiAgICB0aHJl
YWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6bWVtX2RldmljZSk7XG4iCi0gICAgICAgICAgICAi
ICAgIHRocmVhZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdzOjptZW1fdGhyZWFkZ3JvdXApO1xuIgot
ICAgICAgICAgICAgIiAgICB0aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6bWVtX3RleHR1
cmUpO1xuIgotICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuIHN0
cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoCisg
ICAgICAgICAgICAidGhyZWFkZ3JvdXBfYmFycmllcihtZW1fZmxhZ3M6Om1lbV9kZXZpY2UpO1xu
IgorICAgICAgICAgICAgInRocmVhZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdzOjptZW1fdGhyZWFk
Z3JvdXApO1xuIgorICAgICAgICAgICAgInRocmVhZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdzOjpt
ZW1fdGV4dHVyZSk7XG4iKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiRGV2aWNlTWVtb3J5QmFycmllcldpdGhH
cm91cFN5bmMiKSB7CiAgICAgICAgIEFTU0VSVCghbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5w
YXJhbWV0ZXJzKCkuc2l6ZSgpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVu
ZCgKLSAgICAgICAgICAgICJ2b2lkICIsIG91dHB1dEZ1bmN0aW9uTmFtZSwgIigpIHtcbiIKLSAg
ICAgICAgICAgICIgICAgdGhyZWFkZ3JvdXBfYmFycmllcihtZW1fZmxhZ3M6Om1lbV9kZXZpY2Up
O1xuIgotICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuIHN0cmlu
Z0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoCisgICAg
ICAgICAgICAidGhyZWFkZ3JvdXBfYmFycmllcihtZW1fZmxhZ3M6Om1lbV9kZXZpY2UpO1xuIik7
CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5uYW1lKCkgPT0gIkdyb3VwTWVtb3J5QmFycmllcldpdGhHcm91cFN5bmMiKSB7CiAgICAg
ICAgIEFTU0VSVCghbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgp
KTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAgICAgICAgICAgICJ2
b2lkICIsIG91dHB1dEZ1bmN0aW9uTmFtZSwgIigpIHtcbiIKLSAgICAgICAgICAgICIgICAgdGhy
ZWFkZ3JvdXBfYmFycmllcihtZW1fZmxhZ3M6Om1lbV90aHJlYWRncm91cCk7XG4iCi0gICAgICAg
ICAgICAifVxuIgotICAgICAgICApOwotICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0
cmluZygpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgKKyAgICAgICAgICAgICJ0aHJl
YWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6bWVtX3RocmVhZGdyb3VwKTtcbiIpOworICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFt
ZSgpLnN0YXJ0c1dpdGgoIkludGVybG9ja2VkIl9zdHIpKSB7CiAgICAgICAgIGlmIChuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2Ui
KSB7CiAgICAgICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0
ZXJzKCkuc2l6ZSgpID09IDQpOwotICAgICAgICAgICAgYXV0byYgZmlyc3RBcmd1bWVudFBvaW50
ZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7Ci0gICAgICAgICAgICBhdXRvIGZpcnN0QXJndW1l
bnRBZGRyZXNzU3BhY2UgPSBmaXJzdEFyZ3VtZW50UG9pbnRlci5hZGRyZXNzU3BhY2UoKTsKLSAg
ICAgICAgICAgIGF1dG8gZmlyc3RBcmd1bWVudFBvaW50ZWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5h
bWVGb3JUeXBlKGZpcnN0QXJndW1lbnRQb2ludGVyLmVsZW1lbnRUeXBlKCkpOwotICAgICAgICAg
ICAgYXV0byBzZWNvbmRBcmd1bWVudCA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwotICAgICAg
ICAgICAgYXV0byB0aGlyZEFyZ3VtZW50ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgq
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMl0tPnR5cGUoKSk7Ci0gICAg
ICAgICAgICBhdXRvJiBmb3VydGhBcmd1bWVudFBvaW50ZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50
ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbM10tPnR5cGUo
KSk7Ci0gICAgICAgICAgICBhdXRvIGZvdXJ0aEFyZ3VtZW50QWRkcmVzc1NwYWNlID0gZm91cnRo
QXJndW1lbnRQb2ludGVyLmFkZHJlc3NTcGFjZSgpOwotICAgICAgICAgICAgYXV0byBmb3VydGhB
cmd1bWVudFBvaW50ZWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGZvdXJ0aEFyZ3Vt
ZW50UG9pbnRlci5lbGVtZW50VHlwZSgpKTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxl
eGlibGVBcHBlbmQoCi0gICAgICAgICAgICAgICAgInZvaWQgIiwgb3V0cHV0RnVuY3Rpb25OYW1l
LCAnKCcsIHRvU3RyaW5nKGZpcnN0QXJndW1lbnRBZGRyZXNzU3BhY2UpLCAnICcsIGZpcnN0QXJn
dW1lbnRQb2ludGVlLCAiKiBvYmplY3QsICIsIHNlY29uZEFyZ3VtZW50LCAiIGNvbXBhcmUsICIs
IHRoaXJkQXJndW1lbnQsICIgZGVzaXJlZCwgIiwgdG9TdHJpbmcoZm91cnRoQXJndW1lbnRBZGRy
ZXNzU3BhY2UpLCAnICcsIGZvdXJ0aEFyZ3VtZW50UG9pbnRlZSwgIiogb3V0KSB7XG4iCi0gICAg
ICAgICAgICAgICAgIiAgICBhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrX2V4cGxpY2l0KG9i
amVjdCwgJmNvbXBhcmUsIGRlc2lyZWQsIG1lbW9yeV9vcmRlcl9yZWxheGVkLCBtZW1vcnlfb3Jk
ZXJfcmVsYXhlZCk7XG4iCi0gICAgICAgICAgICAgICAgIiAgICAqb3V0ID0gY29tcGFyZTtcbiIK
LSAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIHJldHVy
biBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgImF0b21pY19jb21w
YXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQoIiwgYXJnc1swXSwgIiwgJiIsIGFyZ3NbMV0sICIs
ICIsIGFyZ3NbMl0sICIsIG1lbW9yeV9vcmRlcl9yZWxheGVkLCBtZW1vcnlfb3JkZXJfcmVsYXhl
ZCk7XG4iLAorICAgICAgICAgICAgICAgICcqJywgYXJnc1szXSwgIiA9ICIsIGFyZ3NbMV0sICI7
XG4iKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVChu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMyk7Ci0gICAg
ICAgIGF1dG8mIGZpcnN0QXJndW1lbnRQb2ludGVyID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlw
ZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwot
ICAgICAgICBhdXRvIGZpcnN0QXJndW1lbnRBZGRyZXNzU3BhY2UgPSBmaXJzdEFyZ3VtZW50UG9p
bnRlci5hZGRyZXNzU3BhY2UoKTsKLSAgICAgICAgYXV0byBmaXJzdEFyZ3VtZW50UG9pbnRlZSA9
IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZmlyc3RBcmd1bWVudFBvaW50ZXIuZWxlbWVu
dFR5cGUoKSk7Ci0gICAgICAgIGF1dG8gc2Vjb25kQXJndW1lbnQgPSB0eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS0+
dHlwZSgpKTsKLSAgICAgICAgYXV0byYgdGhpcmRBcmd1bWVudFBvaW50ZXIgPSBkb3duY2FzdDxB
U1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClb
Ml0tPnR5cGUoKSk7Ci0gICAgICAgIGF1dG8gdGhpcmRBcmd1bWVudEFkZHJlc3NTcGFjZSA9IHRo
aXJkQXJndW1lbnRQb2ludGVyLmFkZHJlc3NTcGFjZSgpOwotICAgICAgICBhdXRvIHRoaXJkQXJn
dW1lbnRQb2ludGVlID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSh0aGlyZEFyZ3VtZW50
UG9pbnRlci5lbGVtZW50VHlwZSgpKTsKICAgICAgICAgYXV0byBuYW1lID0gYXRvbWljTmFtZShu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIkludGVybG9ja2VkIl9z
dHIubGVuZ3RoKCkpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAg
ICAgICAgICAgICJ2b2lkICIsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCB0b1N0cmluZyhmaXJz
dEFyZ3VtZW50QWRkcmVzc1NwYWNlKSwgJyAnLCBmaXJzdEFyZ3VtZW50UG9pbnRlZSwgIiogb2Jq
ZWN0LCAiLCBzZWNvbmRBcmd1bWVudCwgIiBvcGVyYW5kLCAiLCB0b1N0cmluZyh0aGlyZEFyZ3Vt
ZW50QWRkcmVzc1NwYWNlKSwgJyAnLCB0aGlyZEFyZ3VtZW50UG9pbnRlZSwgIiogb3V0KSB7XG4i
Ci0gICAgICAgICAgICAiICAgICpvdXQgPSBhdG9taWNfIiwgbmFtZSwgIl9leHBsaWNpdChvYmpl
Y3QsIG9wZXJhbmQsIG1lbW9yeV9vcmRlcl9yZWxheGVkKTtcbiIKLSAgICAgICAgICAgICJ9XG4i
Ci0gICAgICAgICk7Ci0gICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7Cisg
ICAgICAgICAgICAnKicsIGFyZ3NbMl0sICIgPSBhdG9taWNfIiwgbmFtZSwgIl9leHBsaWNpdCgi
LCBhcmdzWzBdLCAiLCAiLCBhcmdzWzFdLCAiLCBtZW1vcnlfb3JkZXJfcmVsYXhlZCk7XG4iKTsK
KyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLm5hbWUoKSA9PSAiU2FtcGxlIikgewpAQCAtNTIxLDM1ICs0MTUsMjIgQEAgU3RyaW5nIHdy
aXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdQogICAgICAgICBhdXRvJiByZXR1cm5UeXBl
ID0gZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KGRvd25jYXN0PEFTVDo6TmFt
ZWRUeXBlPihuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKS51bmlmeU5vZGUoKSkpOwog
ICAgICAgICBhdXRvIHJldHVyblZlY3Rvckxlbmd0aCA9IHZlY3Rvckxlbmd0aChyZXR1cm5UeXBl
KTsKIAotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKHRleHR1cmVUeXBlKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJO
YW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0
ZXIzTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobG9jYXRpb25UeXBlKTsKLSAg
ICAgICAgT3B0aW9uYWw8TWFuZ2xlZFR5cGVOYW1lPiBtZXRhbFBhcmFtZXRlcjROYW1lOwotICAg
ICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09
IDQpCi0gICAgICAgICAgICBtZXRhbFBhcmFtZXRlcjROYW1lID0gdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbM10tPnR5
cGUoKSk7Ci0gICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZShyZXR1cm5UeXBlKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFw
cGVuZChtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFs
UGFyYW1ldGVyMU5hbWUsICIgdGhlVGV4dHVyZSwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiB0
aGVTYW1wbGVyLCAiLCBtZXRhbFBhcmFtZXRlcjNOYW1lLCAiIGxvY2F0aW9uIik7Ci0gICAgICAg
IGlmIChtZXRhbFBhcmFtZXRlcjROYW1lKQotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4
aWJsZUFwcGVuZCgiLCAiLCAqbWV0YWxQYXJhbWV0ZXI0TmFtZSwgIiBvZmZzZXQiKTsKLSAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoCi0gICAgICAgICAgICAiKSB7XG4iCi0gICAgICAgICAg
ICAiICAgIHJldHVybiB0aGVUZXh0dXJlLnNhbXBsZSh0aGVTYW1wbGVyLCAiCi0gICAgICAgICk7
CisgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoCisgICAgICAgICAgICByZXR1
cm5OYW1lLCAiID0gIiwgYXJnc1swXSwgIi5zYW1wbGUoIiwgYXJnc1sxXSwgIiwgIik7CisKICAg
ICAgICAgaWYgKHRleHR1cmVUeXBlLmlzVGV4dHVyZUFycmF5KCkpIHsKICAgICAgICAgICAgIEFT
U0VSVChsb2NhdGlvblZlY3Rvckxlbmd0aCA+IDEpOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRl
ci5mbGV4aWJsZUFwcGVuZCgibG9jYXRpb24uIiwgInh5enciX3N0ci5zdWJzdHJpbmcoMCwgbG9j
YXRpb25WZWN0b3JMZW5ndGggLSAxKSwgIiwgbG9jYXRpb24uIiwgInh5enciX3N0ci5zdWJzdHJp
bmcobG9jYXRpb25WZWN0b3JMZW5ndGggLSAxLCAxKSk7CisgICAgICAgICAgICBzdHJpbmdCdWls
ZGVyLmZsZXhpYmxlQXBwZW5kKGFyZ3NbMl0sICcuJywgInh5enciX3N0ci5zdWJzdHJpbmcoMCwg
bG9jYXRpb25WZWN0b3JMZW5ndGggLSAxKSwgIiwgIiwgYXJnc1syXSwgJy4nLCAieHl6dyJfc3Ry
LnN1YnN0cmluZyhsb2NhdGlvblZlY3Rvckxlbmd0aCAtIDEsIDEpKTsKICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgibG9jYXRpb24iKTsKLSAgICAgICAg
aWYgKG1ldGFsUGFyYW1ldGVyNE5hbWUpCi0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgiLCBvZmZzZXQiKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQo
YXJnc1syXSk7CisgICAgICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKS5zaXplKCkgPT0gNCkKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBl
bmQoIiwgIiwgYXJnc1szXSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIpIik7CiAg
ICAgICAgIGlmICghdGV4dHVyZVR5cGUuaXNEZXB0aFRleHR1cmUoKSkKICAgICAgICAgICAgIHN0
cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIi4iLCAieHl6dyJfc3RyLnN1YnN0cmluZygwLCBy
ZXR1cm5WZWN0b3JMZW5ndGgpKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoCi0gICAg
ICAgICAgICAiO1xuIgotICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgKTsKLSAgICAgICAgcmV0
dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoIjtcbiIpOworCisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIkxvYWQiKSB7CkBAIC01NjEsMTUyICs0NDIsMTI1
IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnUKICAgICAgICAgYXV0
byYgcmV0dXJuVHlwZSA9IGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihkb3du
Y2FzdDxBU1Q6Ok5hbWVkVHlwZT4obmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkudW5p
ZnlOb2RlKCkpKTsKICAgICAgICAgYXV0byByZXR1cm5WZWN0b3JMZW5ndGggPSB2ZWN0b3JMZW5n
dGgocmV0dXJuVHlwZSk7CiAKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSh0ZXh0dXJlVHlwZSk7Ci0gICAgICAgIGF1dG8gbWV0
YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobG9jYXRpb25U
eXBlKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5h
bWVGb3JUeXBlKHJldHVyblR5cGUpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBw
ZW5kKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQ
YXJhbWV0ZXIxTmFtZSwgIiB0aGVUZXh0dXJlLCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIGxv
Y2F0aW9uKSB7XG4iKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoImRvIHtcbiIpOwor
CiAgICAgICAgIGlmICh0ZXh0dXJlVHlwZS5pc1RleHR1cmVBcnJheSgpKSB7CiAgICAgICAgICAg
ICBBU1NFUlQobG9jYXRpb25WZWN0b3JMZW5ndGggPiAxKTsKICAgICAgICAgICAgIFN0cmluZyBk
aW1lbnNpb25zW10gPSB7ICJ3aWR0aCJfc3RyLCAiaGVpZ2h0Il9zdHIsICJkZXB0aCJfc3RyIH07
CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxvY2F0aW9uVmVjdG9yTGVuZ3RoIC0g
MTsgKytpKSB7CiAgICAgICAgICAgICAgICAgYXV0byBzdWZmaXggPSAieHl6dyJfc3RyLnN1YnN0
cmluZyhpLCAxKTsKLSAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5k
KCIgICAgaWYgKGxvY2F0aW9uLiIsIHN1ZmZpeCwgIiA8IDAgfHwgc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KGxvY2F0aW9uLiIsIHN1ZmZpeCwgIikgPj0gdGhlVGV4dHVyZS5nZXRfIiwgZGltZW5zaW9u
c1tpXSwgIigpKSByZXR1cm4gIiwgbWV0YWxSZXR1cm5OYW1lLCAiKDApO1xuIik7CisgICAgICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiICAgIGlmICgiLCBhcmdzWzFd
LCAnLicsIHN1ZmZpeCwgIiA8IDAgfHwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KCIsIGFyZ3NbMV0s
ICcuJywgc3VmZml4LCAiKSA+PSAiLCBhcmdzWzBdLCAiLmdldF8iLCBkaW1lbnNpb25zW2ldLCAi
KCkpIHsiLCByZXR1cm5OYW1lLCAiID0gIiwgbWV0YWxSZXR1cm5OYW1lLCAiKDApOyBicmVhazt9
XG4iKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGF1dG8gc3VmZml4ID0gInh5enciX3N0
ci5zdWJzdHJpbmcobG9jYXRpb25WZWN0b3JMZW5ndGggLSAxLCAxKTsKLSAgICAgICAgICAgIHN0
cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiAgICBpZiAobG9jYXRpb24uIiwgc3VmZml4LCAi
IDwgMCB8fCBzdGF0aWNfY2FzdDx1aW50MzJfdD4obG9jYXRpb24uIiwgc3VmZml4LCAiKSA+PSB0
aGVUZXh0dXJlLmdldF9hcnJheV9zaXplKCkpIHJldHVybiAiLCBtZXRhbFJldHVybk5hbWUsICIo
MCk7XG4iKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiAgICBp
ZiAoIiwgYXJnc1sxXSwgJy4nLCBzdWZmaXgsICIgPCAwIHx8IHN0YXRpY19jYXN0PHVpbnQzMl90
PigiLCBhcmdzWzFdLCAnLicsIHN1ZmZpeCwgIikgPj0gIiwgYXJnc1swXSwgIi5nZXRfYXJyYXlf
c2l6ZSgpKSB7IiwgcmV0dXJuTmFtZSwgIiA9ICIsIG1ldGFsUmV0dXJuTmFtZSwgIigwKTsgYnJl
YWs7fVxuIik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAobG9jYXRpb25WZWN0
b3JMZW5ndGggPT0gMSkKLSAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBw
ZW5kKCIgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBzdGF0aWNfY2FzdDx1aW50MzJfdD4obG9jYXRp
b24pID49IHRoZVRleHR1cmUuZ2V0X3dpZHRoKCkpIHJldHVybiAiLCBtZXRhbFJldHVybk5hbWUs
ICIoMCk7XG4iKTsKKyAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5k
KCIgICAgaWYgKCIsIGFyZ3NbMV0sICIgPCAwIHx8IHN0YXRpY19jYXN0PHVpbnQzMl90PigiLCBh
cmdzWzFdLCAiKSA+PSAiLCBhcmdzWzBdLCAiLmdldF93aWR0aCgpKSB7ICIsIHJldHVybk5hbWUs
ICIgPSAiLCBtZXRhbFJldHVybk5hbWUsICIoMCk7IGJyZWFrO31cbiIpOwogICAgICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAg
ICAgICAgICAgICAgICAgICAgIiAgICBpZiAobG9jYXRpb24ueCA8IDAgfHwgc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KGxvY2F0aW9uLngpID49IHRoZVRleHR1cmUuZ2V0X3dpZHRoKCkpIHJldHVybiAi
LCBtZXRhbFJldHVybk5hbWUsICIoMCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICIgICAgaWYg
KGxvY2F0aW9uLnkgPCAwIHx8IHN0YXRpY19jYXN0PHVpbnQzMl90Pihsb2NhdGlvbi55KSA+PSB0
aGVUZXh0dXJlLmdldF9oZWlnaHQoKSkgcmV0dXJuICIsIG1ldGFsUmV0dXJuTmFtZSwgIigwKTtc
biIKLSAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAiICAgIGlmICgiLCBh
cmdzWzFdLCAiLnggPCAwIHx8IHN0YXRpY19jYXN0PHVpbnQzMl90PigiLCBhcmdzWzFdLCAiLngp
ID49ICIsIGFyZ3NbMF0sICIuZ2V0X3dpZHRoKCkpIHsiLCByZXR1cm5OYW1lLCAiID0gIiwgbWV0
YWxSZXR1cm5OYW1lLCAiKDApOyBicmVhazt9XG4iCisgICAgICAgICAgICAgICAgICAgICIgICAg
aWYgKCIsIGFyZ3NbMV0sICIueSA8IDAgfHwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KCIsIGFyZ3Nb
MV0sICIueSkgPj0gIiwgYXJnc1swXSwgIi5nZXRfaGVpZ2h0KCkpIHsiLCByZXR1cm5OYW1lLCAi
ID0gIiwgbWV0YWxSZXR1cm5OYW1lLCAiKDApOyBicmVhazt9XG4iKTsKKwogICAgICAgICAgICAg
ICAgIGlmIChsb2NhdGlvblZlY3Rvckxlbmd0aCA+PSAzKQotICAgICAgICAgICAgICAgICAgICBz
dHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIgICAgaWYgKGxvY2F0aW9uLnogPCAwIHx8IHN0
YXRpY19jYXN0PHVpbnQzMl90Pihsb2NhdGlvbi56KSA+PSB0aGVUZXh0dXJlLmdldF9kZXB0aCgp
KSByZXR1cm4gIiwgbWV0YWxSZXR1cm5OYW1lLCAiKDApO1xuIik7CisgICAgICAgICAgICAgICAg
ICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiAgICBpZiAoIiwgYXJnc1sxXSwgIi56
IDwgMCB8fCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oIiwgYXJnc1sxXSwgIi56KSA+PSAiLCBhcmdz
WzBdLCAiLmdldF9kZXB0aCgpKSB7IiwgcmV0dXJuTmFtZSwgIiA9ICIsIG1ldGFsUmV0dXJuTmFt
ZSwgIigwKTsgYnJlYWs7fVxuIik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICByZXR1cm4gdGhlVGV4dHVyZS5yZWFkKCIpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIgICAgIiwgcmV0dXJuTmFtZSwgIiA9
ICIsIGFyZ3NbMF0sICIucmVhZCgiKTsKICAgICAgICAgaWYgKHRleHR1cmVUeXBlLmlzVGV4dHVy
ZUFycmF5KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChsb2NhdGlvblZlY3Rvckxlbmd0aCA+IDEp
OwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgidWludCIsIHZlY3Rv
clN1ZmZpeChsb2NhdGlvblZlY3Rvckxlbmd0aCAtIDEpLCAiKGxvY2F0aW9uLiIsICJ4eXp3Il9z
dHIuc3Vic3RyaW5nKDAsIGxvY2F0aW9uVmVjdG9yTGVuZ3RoIC0gMSksICIpLCB1aW50KGxvY2F0
aW9uLiIsICJ4eXp3Il9zdHIuc3Vic3RyaW5nKGxvY2F0aW9uVmVjdG9yTGVuZ3RoIC0gMSwgMSks
ICcpJyk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCJ1aW50Iiwg
dmVjdG9yU3VmZml4KGxvY2F0aW9uVmVjdG9yTGVuZ3RoIC0gMSksICcoJywgYXJnc1sxXSwgJy4n
LCAieHl6dyJfc3RyLnN1YnN0cmluZygwLCBsb2NhdGlvblZlY3Rvckxlbmd0aCAtIDEpLCAiKSwg
dWludCgiLCBhcmdzWzFdLCAnLicsICJ4eXp3Il9zdHIuc3Vic3RyaW5nKGxvY2F0aW9uVmVjdG9y
TGVuZ3RoIC0gMSwgMSksICcpJyk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgc3RyaW5n
QnVpbGRlci5mbGV4aWJsZUFwcGVuZCgidWludCIsIHZlY3RvclN1ZmZpeChsb2NhdGlvblZlY3Rv
ckxlbmd0aCksICIobG9jYXRpb24pIik7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhp
YmxlQXBwZW5kKCJ1aW50IiwgdmVjdG9yU3VmZml4KGxvY2F0aW9uVmVjdG9yTGVuZ3RoKSwgJygn
LCBhcmdzWzFdLCAnKScpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnKScpOwogICAg
ICAgICBpZiAoIXRleHR1cmVUeXBlLmlzRGVwdGhUZXh0dXJlKCkpCiAgICAgICAgICAgICBzdHJp
bmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCcuJywgInh5enciX3N0ci5zdWJzdHJpbmcoMCwgcmV0
dXJuVmVjdG9yTGVuZ3RoKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKAogICAgICAg
ICAgICAgIjtcbiIKLSAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICk7Ci0gICAgICAgIHJldHVy
biBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAifSB3aGlsZSgwKTtcbiIp
OworCisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5uYW1lKCkgPT0gImxvYWQiKSB7CiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMSk7Ci0gICAgICAgIGF1dG8gbWV0
YWxQYXJhbWV0ZXJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7Ci0gICAgICAgIGF1dG8g
bWV0YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVB
cHBlbmQoCi0gICAgICAgICAgICBtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25O
YW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIiB4KSB7XG4iCi0gICAgICAgICAgICAiICAg
IHJldHVybiBhdG9taWNfbG9hZF9leHBsaWNpdCh4LCBtZW1vcnlfb3JkZXJfcmVsYXhlZCk7XG4i
Ci0gICAgICAgICAgICAifVxuIgotICAgICAgICApOwotICAgICAgICByZXR1cm4gc3RyaW5nQnVp
bGRlci50b1N0cmluZygpOworICAgICAgICAgICAgcmV0dXJuTmFtZSwgIiA9IGF0b21pY19sb2Fk
X2V4cGxpY2l0KCIsIGFyZ3NbMF0sICIsIG1lbW9yeV9vcmRlcl9yZWxheGVkKTtcbiIpOworICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpID09ICJzdG9yZSIpIHsKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFt
ZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQ
YXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwotICAgICAgICBzdHJpbmdC
dWlsZGVyLmZsZXhpYmxlQXBwZW5kKCJ2b2lkICIsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBt
ZXRhbFBhcmFtZXRlcjFOYW1lLCAiIHgsICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgeSkge1xu
IgotICAgICAgICAgICAgIiAgICBhdG9taWNfc3RvcmVfZXhwbGljaXQoeCwgeSwgbWVtb3J5X29y
ZGVyX3JlbGF4ZWQpO1xuIgotICAgICAgICAgICAgIn1cbiIpOwotICAgICAgICByZXR1cm4gc3Ry
aW5nQnVpbGRlci50b1N0cmluZygpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBw
ZW5kKAorICAgICAgICAgICAgImF0b21pY19zdG9yZV9leHBsaWNpdCgiLCBhcmdzWzBdLCAiLCAi
LCBhcmdzWzFdLCAiLCBtZW1vcnlfb3JkZXJfcmVsYXhlZCk7XG4iKTsKKyAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAi
R2V0RGltZW5zaW9ucyIpIHsKICAgICAgICAgYXV0byYgdGV4dHVyZVR5cGUgPSBkb3duY2FzdDxB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCktPnVuaWZ5Tm9kZSgp
KSk7CiAKICAgICAgICAgc2l6ZV90IGluZGV4ID0gMTsKLSAgICAgICAgaWYgKCF0ZXh0dXJlVHlw
ZS5pc1dyaXRhYmxlVGV4dHVyZSgpICYmIHRleHR1cmVUeXBlLnRleHR1cmVEaW1lbnNpb24oKSAh
PSAxKQorICAgICAgICBib29sIGhhc01pcExldmVsID0gIXRleHR1cmVUeXBlLmlzV3JpdGFibGVU
ZXh0dXJlKCkgJiYgdGV4dHVyZVR5cGUudGV4dHVyZURpbWVuc2lvbigpICE9IDE7CisgICAgICAg
IGlmIChoYXNNaXBMZXZlbCkKICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgIGF1dG8gd2lk
dGhUeXBlTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpW2luZGV4XS0+dHlwZSgpKTsKKyAgICAgICAgY29uc3Qg
TWFuZ2xlZFZhcmlhYmxlTmFtZSYgd2lkdGhOYW1lID0gYXJnc1tpbmRleF07CiAgICAgICAgICsr
aW5kZXg7Ci0gICAgICAgIE9wdGlvbmFsPE1hbmdsZWRUeXBlTmFtZT4gaGVpZ2h0VHlwZU5hbWU7
CisgICAgICAgIE9wdGlvbmFsPE1hbmdsZWRWYXJpYWJsZU5hbWU+IGhlaWdodE5hbWU7CiAgICAg
ICAgIGlmICh0ZXh0dXJlVHlwZS50ZXh0dXJlRGltZW5zaW9uKCkgPj0gMikgewotICAgICAgICAg
ICAgaGVpZ2h0VHlwZU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVtpbmRleF0tPnR5cGUoKSk7CisgICAgICAg
ICAgICBoZWlnaHROYW1lID0gYXJnc1tpbmRleF07CiAgICAgICAgICAgICArK2luZGV4OwogICAg
ICAgICB9Ci0gICAgICAgIE9wdGlvbmFsPE1hbmdsZWRUeXBlTmFtZT4gZGVwdGhUeXBlTmFtZTsK
KyAgICAgICAgT3B0aW9uYWw8TWFuZ2xlZFZhcmlhYmxlTmFtZT4gZGVwdGhOYW1lOwogICAgICAg
ICBpZiAodGV4dHVyZVR5cGUudGV4dHVyZURpbWVuc2lvbigpID49IDMpIHsKLSAgICAgICAgICAg
IGRlcHRoVHlwZU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVtpbmRleF0tPnR5cGUoKSk7CisgICAgICAgICAg
ICBkZXB0aE5hbWUgPSBhcmdzW2luZGV4XTsKICAgICAgICAgICAgICsraW5kZXg7CiAgICAgICAg
IH0KLSAgICAgICAgT3B0aW9uYWw8TWFuZ2xlZFR5cGVOYW1lPiBlbGVtZW50c1R5cGVOYW1lOwor
ICAgICAgICBPcHRpb25hbDxNYW5nbGVkVmFyaWFibGVOYW1lPiBlbGVtZW50c05hbWU7CiAgICAg
ICAgIGlmICh0ZXh0dXJlVHlwZS5pc1RleHR1cmVBcnJheSgpKSB7Ci0gICAgICAgICAgICBlbGVt
ZW50c1R5cGVOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbaW5kZXhdLT50eXBlKCkpOworICAgICAgICAgICAg
ZWxlbWVudHNOYW1lID0gYXJnc1tpbmRleF07CiAgICAgICAgICAgICArK2luZGV4OwogICAgICAg
ICB9Ci0gICAgICAgIE9wdGlvbmFsPE1hbmdsZWRUeXBlTmFtZT4gbnVtYmVyT2ZMZXZlbHNUeXBl
TmFtZTsKKyAgICAgICAgT3B0aW9uYWw8TWFuZ2xlZFZhcmlhYmxlTmFtZT4gbnVtYmVyT2ZMZXZl
bHNOYW1lOwogICAgICAgICBpZiAoIXRleHR1cmVUeXBlLmlzV3JpdGFibGVUZXh0dXJlKCkgJiYg
dGV4dHVyZVR5cGUudGV4dHVyZURpbWVuc2lvbigpICE9IDEpIHsKLSAgICAgICAgICAgIG51bWJl
ck9mTGV2ZWxzVHlwZU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVtpbmRleF0tPnR5cGUoKSk7CisgICAgICAg
ICAgICBudW1iZXJPZkxldmVsc05hbWUgPSBhcmdzW2luZGV4XTsKICAgICAgICAgICAgICsraW5k
ZXg7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKGluZGV4ID09IG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSk7CiAKLSAgICAgICAgYXV0byBtZXRhbFBhcmFt
ZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSh0ZXh0dXJlVHlwZSk7Ci0g
ICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoInZvaWQgIiwgb3V0cHV0RnVuY3Rp
b25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUsICIgdGhlVGV4dHVyZSIpOwotICAgICAg
ICBpZiAoIXRleHR1cmVUeXBlLmlzV3JpdGFibGVUZXh0dXJlKCkgJiYgdGV4dHVyZVR5cGUudGV4
dHVyZURpbWVuc2lvbigpICE9IDEpCi0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgi
LCB1aW50IG1pcExldmVsIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQo
IiwgIiwgd2lkdGhUeXBlTmFtZSwgIiB3aWR0aCIpOwotICAgICAgICBpZiAoaGVpZ2h0VHlwZU5h
bWUpCi0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIsICIsICpoZWln
aHRUeXBlTmFtZSwgIiBoZWlnaHQiKTsKLSAgICAgICAgaWYgKGRlcHRoVHlwZU5hbWUpCi0gICAg
ICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIsICIsICpkZXB0aFR5cGVOYW1l
LCAiIGRlcHRoIik7Ci0gICAgICAgIGlmIChlbGVtZW50c1R5cGVOYW1lKQotICAgICAgICAgICAg
c3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiLCAiLCAqZWxlbWVudHNUeXBlTmFtZSwgIiBl
bGVtZW50cyIpOwotICAgICAgICBpZiAobnVtYmVyT2ZMZXZlbHNUeXBlTmFtZSkKLSAgICAgICAg
ICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiwgIiwgKm51bWJlck9mTGV2ZWxzVHlw
ZU5hbWUsICIgbnVtYmVyT2ZMZXZlbHMiKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
Ci0gICAgICAgICAgICAiKSB7XG4iCi0gICAgICAgICAgICAiICAgIGlmICh3aWR0aClcbiIKLSAg
ICAgICAgICAgICIgICAgICAgICp3aWR0aCA9IHRoZVRleHR1cmUuZ2V0X3dpZHRoKCIKLSAgICAg
ICAgKTsKLSAgICAgICAgaWYgKCF0ZXh0dXJlVHlwZS5pc1dyaXRhYmxlVGV4dHVyZSgpICYmIHRl
eHR1cmVUeXBlLnRleHR1cmVEaW1lbnNpb24oKSAhPSAxKQotICAgICAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoIm1pcExldmVsIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVB
cHBlbmQoCisgICAgICAgICAgICAiaWYgKCIsIHdpZHRoTmFtZSwgIilcbiIKKyAgICAgICAgICAg
ICIgICAgKiIsIHdpZHRoTmFtZSwgIiA9ICIsIGFyZ3NbMF0sICIuZ2V0X3dpZHRoKCIpOworCisg
ICAgICAgIGlmIChoYXNNaXBMZXZlbCkKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGli
bGVBcHBlbmQoYXJnc1sxXSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIpO1xuIik7
Ci0gICAgICAgIGlmIChoZWlnaHRUeXBlTmFtZSkgewotICAgICAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoCi0gICAgICAgICAgICAgICAgIiAgICBpZiAoaGVpZ2h0KVxuIgotICAgICAgICAg
ICAgICAgICIgICAgICAgICpoZWlnaHQgPSB0aGVUZXh0dXJlLmdldF9oZWlnaHQoIgotICAgICAg
ICAgICAgKTsKLSAgICAgICAgICAgIGlmICghdGV4dHVyZVR5cGUuaXNXcml0YWJsZVRleHR1cmUo
KSAmJiB0ZXh0dXJlVHlwZS50ZXh0dXJlRGltZW5zaW9uKCkgIT0gMSkKLSAgICAgICAgICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgibWlwTGV2ZWwiKTsKKyAgICAgICAgaWYgKGhlaWdodE5h
bWUpIHsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoCisgICAgICAg
ICAgICAgICAgIiAgICBpZiAoIiwgKmhlaWdodE5hbWUsICIpXG4iCisgICAgICAgICAgICAgICAg
IiAgICAgICAgKiIsICpoZWlnaHROYW1lLCAiID0gIiwgYXJnc1swXSwgIi5nZXRfaGVpZ2h0KCIp
OworICAgICAgICAgICAgaWYgKGhhc01pcExldmVsKQorICAgICAgICAgICAgICAgIHN0cmluZ0J1
aWxkZXIuZmxleGlibGVBcHBlbmQoYXJnc1sxXSk7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCgiKTtcbiIpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChkZXB0aFR5cGVOYW1lKSB7
Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAiICAg
IGlmIChkZXB0aClcbiIKLSAgICAgICAgICAgICAgICAiICAgICAgICAqZGVwdGggPSB0aGVUZXh0
dXJlLmdldF9kZXB0aCgiCi0gICAgICAgICAgICApOwotICAgICAgICAgICAgaWYgKCF0ZXh0dXJl
VHlwZS5pc1dyaXRhYmxlVGV4dHVyZSgpICYmIHRleHR1cmVUeXBlLnRleHR1cmVEaW1lbnNpb24o
KSAhPSAxKQotICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJtaXBMZXZlbCIp
OworICAgICAgICBpZiAoZGVwdGhOYW1lKSB7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZs
ZXhpYmxlQXBwZW5kKAorICAgICAgICAgICAgICAgICIgICAgaWYgKCIsICpkZXB0aE5hbWUsICIp
XG4iCisgICAgICAgICAgICAgICAgIiAgICAgICAgKiIsICpkZXB0aE5hbWUsICIgPSAiLCBhcmdz
WzBdLCAiLmdldF9kZXB0aCgiKTsKKyAgICAgICAgICAgIGlmIChoYXNNaXBMZXZlbCkKKyAgICAg
ICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKGFyZ3NbMV0pOwogICAgICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIik7XG4iKTsKICAgICAgICAgfQotICAgICAgICBp
ZiAoZWxlbWVudHNUeXBlTmFtZSkgewotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
Ci0gICAgICAgICAgICAgICAgIiAgICBpZiAoZWxlbWVudHMpXG4iCi0gICAgICAgICAgICAgICAg
IiAgICAgICAgKmVsZW1lbnRzID0gdGhlVGV4dHVyZS5nZXRfYXJyYXlfc2l6ZSgpO1xuIgotICAg
ICAgICAgICAgKTsKLSAgICAgICAgfQotICAgICAgICBpZiAobnVtYmVyT2ZMZXZlbHNUeXBlTmFt
ZSkgewotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoCi0gICAgICAgICAgICAgICAg
IiAgICBpZiAobnVtYmVyT2ZMZXZlbHMpXG4iCi0gICAgICAgICAgICAgICAgIiAgICAgICAgKm51
bWJlck9mTGV2ZWxzID0gdGhlVGV4dHVyZS5nZXRfbnVtX21pcF9sZXZlbHMoKTtcbiIKLSAgICAg
ICAgICAgICk7CisgICAgICAgIGlmIChlbGVtZW50c05hbWUpIHsKKyAgICAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuZmxleGlibGVBcHBlbmQoCisgICAgICAgICAgICAgICAgIiAgICBpZiAoIiwgKmVs
ZW1lbnRzTmFtZSwgIilcbiIKKyAgICAgICAgICAgICAgICAiICAgICAgICAqIiwgKmVsZW1lbnRz
TmFtZSwgIiA9ICIsIGFyZ3NbMF0sICIuZ2V0X2FycmF5X3NpemUoKTtcbiIpOwogICAgICAgICB9
Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKLSAgICAgICAgcmV0dXJuIHN0
cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgaWYgKG51bWJlck9mTGV2ZWxzTmFtZSkg
eworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKKyAgICAgICAgICAg
ICAgICAiICAgIGlmICgiLCAqbnVtYmVyT2ZMZXZlbHNOYW1lLCAiKVxuIgorICAgICAgICAgICAg
ICAgICIgICAgICAgICoiLCAqbnVtYmVyT2ZMZXZlbHNOYW1lLCAiID0gIiwgYXJnc1swXSwgIi5n
ZXRfbnVtX21pcF9sZXZlbHMoKTtcbiIpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlNhbXBs
ZUJpYXMiKSB7CkBAIC03NTQsNDYgKzYwOCw0MyBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlv
bihBU1Q6Ok5hdGl2ZUZ1CiAgICAgICAgIGF1dG8mIGxvY2F0aW9uVHlwZSA9IGRvd25jYXN0PEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4obmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMl0tPnR5cGUoKS0+dW5pZnlOb2RlKCkp
KTsKICAgICAgICAgYXV0byBsb2NhdGlvblZlY3Rvckxlbmd0aCA9IHZlY3Rvckxlbmd0aChsb2Nh
dGlvblR5cGUpOwogCi0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclR5cGUodGV4dHVyZVR5cGUpOwotICAgICAgICBhdXRvIG1ldGFsUGFy
YW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGl0ZW1UeXBlKTsKLSAg
ICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjNOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9y
VHlwZShsb2NhdGlvblR5cGUpOwogICAgICAgICBhdXRvIG1ldGFsSW5uZXJUeXBlTmFtZSA9IHR5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoaXRlbVZlY3RvcklubmVyVHlwZSk7Ci0gICAgICAg
IHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoInZvaWQgIiwgb3V0cHV0RnVuY3Rpb25OYW1l
LCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUsICIgdGhlVGV4dHVyZSwgIiwgbWV0YWxQYXJhbWV0
ZXIyTmFtZSwgIiBpdGVtLCAiLCBtZXRhbFBhcmFtZXRlcjNOYW1lLCAiIGxvY2F0aW9uKSB7XG4i
KTsKKworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiZG8ge1xuIik7CiAgICAgICAgIGlm
ICh0ZXh0dXJlVHlwZS5pc1RleHR1cmVBcnJheSgpKSB7CiAgICAgICAgICAgICBBU1NFUlQobG9j
YXRpb25WZWN0b3JMZW5ndGggPiAxKTsKICAgICAgICAgICAgIFN0cmluZyBkaW1lbnNpb25zW10g
PSB7ICJ3aWR0aCJfc3RyLCAiaGVpZ2h0Il9zdHIsICJkZXB0aCJfc3RyIH07CiAgICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGxvY2F0aW9uVmVjdG9yTGVuZ3RoIC0gMTsgKytpKSB7CiAg
ICAgICAgICAgICAgICAgYXV0byBzdWZmaXggPSAieHl6dyJfc3RyLnN1YnN0cmluZyhpLCAxKTsK
LSAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIgICAgaWYgKGxv
Y2F0aW9uLiIsIHN1ZmZpeCwgIiA+PSB0aGVUZXh0dXJlLmdldF8iLCBkaW1lbnNpb25zW2ldLCAi
KCkpIHJldHVybjtcbiIpOworICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVB
cHBlbmQoIiAgICBpZiAoIiwgYXJnc1syXSwgIi4iLCBzdWZmaXgsICIgPj0gIiwgYXJnc1swXSwg
Ii5nZXRfIiwgZGltZW5zaW9uc1tpXSwgIigpKSBicmVhaztcbiIpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgYXV0byBzdWZmaXggPSAieHl6dyJfc3RyLnN1YnN0cmluZyhsb2NhdGlvblZl
Y3Rvckxlbmd0aCAtIDEsIDEpOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFw
cGVuZCgiICAgIGlmIChsb2NhdGlvbi4iLCBzdWZmaXgsICIgPj0gdGhlVGV4dHVyZS5nZXRfYXJy
YXlfc2l6ZSgpKSByZXR1cm47XG4iKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGli
bGVBcHBlbmQoIiAgICBpZiAoIiwgYXJnc1syXSwgJy4nLCBzdWZmaXgsICIgPj0gIiwgYXJnc1sw
XSwgIi5nZXRfYXJyYXlfc2l6ZSgpKSBicmVhaztcbiIpOwogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgaWYgKGxvY2F0aW9uVmVjdG9yTGVuZ3RoID09IDEpCi0gICAgICAgICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICBpZiAobG9jYXRpb24gPj0gdGhlVGV4dHVyZS5nZXRf
d2lkdGgoKSkgcmV0dXJuO1xuIik7CisgICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4
aWJsZUFwcGVuZCgiICAgIGlmICgiLCBhcmdzWzJdLCAiID49ICIsIGFyZ3NbMF0sICIuZ2V0X3dp
ZHRoKCkpIGJyZWFrO1xuIik7CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgIiAgICBpZiAobG9jYXRp
b24ueCA+PSB0aGVUZXh0dXJlLmdldF93aWR0aCgpKSByZXR1cm47XG4iCi0gICAgICAgICAgICAg
ICAgICAgICIgICAgaWYgKGxvY2F0aW9uLnkgPj0gdGhlVGV4dHVyZS5nZXRfaGVpZ2h0KCkpIHJl
dHVybjtcbiIKLSAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuZmxleGlibGVBcHBlbmQoCisgICAgICAgICAgICAgICAgICAgICIgICAgaWYgKCIsIGFyZ3Nb
Ml0sICIueCA+PSAiLCBhcmdzWzBdLCAiLmdldF93aWR0aCgpKSBicmVhaztcbiIKKyAgICAgICAg
ICAgICAgICAgICAgIiAgICBpZiAoIiwgYXJnc1syXSwgIi55ID49ICIsIGFyZ3NbMF0sICIuZ2V0
X2hlaWdodCgpKSBicmVhaztcbiIpOwogICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvblZlY3Rv
ckxlbmd0aCA+PSAzKQotICAgICAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgi
ICAgIGlmIChsb2NhdGlvbi56ID49IHRoZVRleHR1cmUuZ2V0X2RlcHRoKCkpIHJldHVybjtcbiIp
OworICAgICAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIgICAg
aWYgKCIsIGFyZ3NbMl0sICIueiA+PSAiLCBhcmdzWzBdLCAiLmdldF9kZXB0aCgpKSBicmVhaztc
biIpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuZmxl
eGlibGVBcHBlbmQoIiAgICB0aGVUZXh0dXJlLndyaXRlKHZlYzwiLCBtZXRhbElubmVyVHlwZU5h
bWUsICIsIDQ+KGl0ZW0iKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgi
ICAgICIsIGFyZ3NbMF0sICIud3JpdGUodmVjPCIsIG1ldGFsSW5uZXJUeXBlTmFtZSwgIiwgND4o
IiwgYXJnc1sxXSk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNCAtIGl0ZW1WZWN0b3JM
ZW5ndGg7ICsraSkKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIsIDAiKTsKICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiksICIpOwogICAgICAgICBpZiAodGV4dHVyZVR5
cGUuaXNUZXh0dXJlQXJyYXkoKSkgewogICAgICAgICAgICAgQVNTRVJUKGxvY2F0aW9uVmVjdG9y
TGVuZ3RoID4gMSk7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCJ1
aW50IiwgdmVjdG9yU3VmZml4KGxvY2F0aW9uVmVjdG9yTGVuZ3RoIC0gMSksICIobG9jYXRpb24u
IiwgInh5enciX3N0ci5zdWJzdHJpbmcoMCwgbG9jYXRpb25WZWN0b3JMZW5ndGggLSAxKSwgIiks
IHVpbnQobG9jYXRpb24uIiwgInh5enciX3N0ci5zdWJzdHJpbmcobG9jYXRpb25WZWN0b3JMZW5n
dGggLSAxLCAxKSwgJyknKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBl
bmQoInVpbnQiLCB2ZWN0b3JTdWZmaXgobG9jYXRpb25WZWN0b3JMZW5ndGggLSAxKSwgJygnLCBh
cmdzWzJdLCAnLicsICJ4eXp3Il9zdHIuc3Vic3RyaW5nKDAsIGxvY2F0aW9uVmVjdG9yTGVuZ3Ro
IC0gMSksICIpLCB1aW50KCIsIGFyZ3NbMl0sICIuIiwgInh5enciX3N0ci5zdWJzdHJpbmcobG9j
YXRpb25WZWN0b3JMZW5ndGggLSAxLCAxKSwgJyknKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCJ1aW50IiwgdmVjdG9yU3VmZml4KGxv
Y2F0aW9uVmVjdG9yTGVuZ3RoKSwgIihsb2NhdGlvbikiKTsKKyAgICAgICAgICAgIHN0cmluZ0J1
aWxkZXIuZmxleGlibGVBcHBlbmQoInVpbnQiLCB2ZWN0b3JTdWZmaXgobG9jYXRpb25WZWN0b3JM
ZW5ndGgpLCAnKCcsIGFyZ3NbMl0sICcpJyk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KAogICAgICAgICAgICAgIik7XG4iCi0gICAgICAgICAgICAifVxuIgotICAgICAgICApOwotICAg
ICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgICAgICAgICAgIn0gd2hp
bGUoMCk7XG4iKTsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJHYXRoZXJBbHBoYSIpIHsKQEAgLTgyMiw3ICs2
NzMsNiBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1CiAgICAgfQog
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBNZXRhbApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rp
b25Xcml0ZXIuaAkocmV2aXNpb24gMjQ4MjcxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NSw3ICs0NSw3IEBAIG5hbWVzcGFjZSBNZXRhbCB7CiAKIGNsYXNzIFR5cGVOYW1l
cjsKIAotU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uJiwgTWFuZ2xlZEZ1bmN0aW9uTmFtZSBvdXRwdXRGdW5jdGlvbk5hbWUsIEludHJpbnNp
Y3MmLCBUeXBlTmFtZXImKTsKK3ZvaWQgaW5saW5lTmF0aXZlRnVuY3Rpb24oU3RyaW5nQnVpbGRl
ciYsIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYsIE1hbmdsZWRWYXJpYWJsZU5hbWUg
cmV0dXJuTmFtZSwgY29uc3QgVmVjdG9yPE1hbmdsZWRWYXJpYWJsZU5hbWU+JiBhcmd1bWVudE5h
bWVzLCBJbnRyaW5zaWNzJiwgVHlwZU5hbWVyJik7CiAKIH0KIAo=
</data>
<flag name="review"
          id="391341"
          type_id="1"
          status="+"
          setter="rmorisset"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375573</attachid>
            <date>2019-08-05 15:50:59 -0700</date>
            <delta_ts>2019-08-05 17:03:40 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>50113</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0ODI3MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE5LTA4LTA1ICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gSW5saW5lIGFsbCBu
YXRpdmUgZnVuY3Rpb24gY2FsbHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMDM1MAorCisgICAgICAgIFJldmlld2VkIGJ5IFJvYmluIE1vcmlzc2V0
LgorCisgICAgICAgIE5hdGl2ZSBmdW5jdGlvbnMgY2FsbHMgdGVuZCB0byBiZSByZWFsbHkgc21h
bGwuIElmIHdlIGlubGluZSBpbiB0aGUgZ2VuZXJhdGVkCisgICAgICAgIE1ldGFsIGNvZGUsIHdl
IGVuZCB1cCB3aXRoIGZhc3RlciBNZXRhbCBjb21waWxlIHRpbWVzLiBPbiBjb21wdXRlX2JvaWRz
LCB0aGlzCisgICAgICAgIHByb3ZpZGVzIGEgfjEwbXMgaW1wcm92ZW1lbnQuCisKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2
aXNpdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OnNoYXJlZE1ldGFsRnVuY3Rp
b25zKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1
bmN0aW9uV3JpdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6aW5saW5l
TmF0aXZlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjp3cml0ZU5h
dGl2ZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9N
ZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmg6CisKIDIwMTktMDgtMDUgIFRha2FzaGkg
S29tb3JpICA8VGFrYXNoaS5Lb21vcmlAc29ueS5jb20+CiAKICAgICAgICAgW0N1cmxdIGltcGxl
bWVudCBDZXJ0aWZpY2F0ZUluZm86OnN1bW1hcnlJbmZvCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1
bmN0aW9uV3JpdGVyLmNwcAkocmV2aXNpb24gMjQ4MjcxKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyOCwxMSArMjI4LDkgQEAgcHJvdGVjdGVkOgogICAgIE9wdGlvbmFsPE1hbmds
ZWRWYXJpYWJsZU5hbWU+IG1fYnJlYWtPdXRPZkN1cnJlbnRMb29wRWFybHlWYXJpYWJsZTsKIH07
CiAKLXZvaWQgRnVuY3Rpb25EZWZpbml0aW9uV3JpdGVyOjp2aXNpdChBU1Q6Ok5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCit2b2lkIEZ1bmN0aW9u
RGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJikK
IHsKLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9mdW5jdGlvbk1hcHBpbmcuZmluZCgmbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbik7Ci0gICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fZnVuY3Rpb25NYXBw
aW5nLmVuZCgpKTsKLSAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKHdyaXRlTmF0aXZlRnVuY3Rp
b24obmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiwgaXRlcmF0b3ItPnZhbHVlLCBtX2ludHJpbnNp
Y3MsIG1fdHlwZU5hbWVyKSk7CisgICAgLy8gV2UgaW5saW5lIG5hdGl2ZSBmdW5jdGlvbiBjYWxs
cy4KIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVDo6RnVuY3Rp
b25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pCkBAIC01NzcsMTkgKzU3NSwzMSBAQCB2
b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChhcmd1bWVudCk7CiAgICAgICAgIGFyZ3VtZW50TmFtZXMuYXBwZW5kKHRha2VM
YXN0VmFsdWUoKSk7CiAgICAgfQotICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Z1bmN0aW9uTWFwcGlu
Zy5maW5kKCZjYWxsRXhwcmVzc2lvbi5mdW5jdGlvbigpKTsKLSAgICBBU1NFUlQoaXRlcmF0b3Ig
IT0gbV9mdW5jdGlvbk1hcHBpbmcuZW5kKCkpOwotICAgIGF1dG8gdmFyaWFibGVOYW1lID0gZ2Vu
ZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7Ci0gICAgaWYgKCFtYXRjaGVzKGNhbGxFeHByZXNzaW9u
LnJlc29sdmVkVHlwZSgpLCBtX2ludHJpbnNpY3Mudm9pZFR5cGUoKSkpCi0gICAgICAgIG1fc3Ry
aW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZChtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUo
Y2FsbEV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCkpLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICIp
OwotICAgIG1fc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZChpdGVyYXRvci0+dmFsdWUsICco
Jyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1bWVudE5hbWVzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIGlmIChpKQotICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZCgi
LCAiKTsKLSAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKGFyZ3VtZW50TmFt
ZXNbaV0pOworCisgICAgYm9vbCBpc1ZvaWQgPSBtYXRjaGVzKGNhbGxFeHByZXNzaW9uLnJlc29s
dmVkVHlwZSgpLCBtX2ludHJpbnNpY3Mudm9pZFR5cGUoKSk7CisgICAgTWFuZ2xlZFZhcmlhYmxl
TmFtZSByZXR1cm5OYW1lOworICAgIGlmICghaXNWb2lkKSB7CisgICAgICAgIHJldHVybk5hbWUg
PSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmZs
ZXhpYmxlQXBwZW5kKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShjYWxsRXhwcmVzc2lv
bi5yZXNvbHZlZFR5cGUoKSksICcgJywgcmV0dXJuTmFtZSwgIjtcbiIpOworICAgIH0KKworICAg
IGlmIChpczxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+KGNhbGxFeHByZXNzaW9uLmZ1
bmN0aW9uKCkpKQorICAgICAgICBpbmxpbmVOYXRpdmVGdW5jdGlvbihtX3N0cmluZ0J1aWxkZXIs
IGRvd25jYXN0PEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4oY2FsbEV4cHJlc3Npb24u
ZnVuY3Rpb24oKSksIHJldHVybk5hbWUsIGFyZ3VtZW50TmFtZXMsIG1faW50cmluc2ljcywgbV90
eXBlTmFtZXIpOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9mdW5jdGlv
bk1hcHBpbmcuZmluZCgmY2FsbEV4cHJlc3Npb24uZnVuY3Rpb24oKSk7CisgICAgICAgIEFTU0VS
VChpdGVyYXRvciAhPSBtX2Z1bmN0aW9uTWFwcGluZy5lbmQoKSk7CisgICAgICAgIGlmICghaXNW
b2lkKQorICAgICAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKHJldHVybk5h
bWUsICIgPSAiKTsKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKGl0ZXJh
dG9yLT52YWx1ZSwgJygnKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1bWVu
dE5hbWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoaSkKKyAgICAgICAgICAgICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCIsICIpOworICAgICAgICAgICAgbV9zdHJpbmdCdWls
ZGVyLmZsZXhpYmxlQXBwZW5kKGFyZ3VtZW50TmFtZXNbaV0pOworICAgICAgICB9CisgICAgICAg
IG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoIik7XG4iKTsKICAgICB9Ci0gICAgbV9zdHJpbmdCdWls
ZGVyLmFwcGVuZCgiKTtcbiIpOwotICAgIGFwcGVuZFJpZ2h0VmFsdWUoY2FsbEV4cHJlc3Npb24s
IHZhcmlhYmxlTmFtZSk7CisKKyAgICBhcHBlbmRSaWdodFZhbHVlKGNhbGxFeHByZXNzaW9uLCBy
ZXR1cm5OYW1lKTsKIH0KIAogdm9pZCBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFT
VDo6Q29tbWFFeHByZXNzaW9uJiBjb21tYUV4cHJlc3Npb24pCkBAIC04MDQsMTAgKzgxNCw2IEBA
IHN0YXRpYyBTaGFyZWRNZXRhbEZ1bmN0aW9uc1Jlc3VsdCBzaGFyZWQKIAogICAgIHVuc2lnbmVk
IG51bUZ1bmN0aW9ucyA9IDA7CiAgICAgSGFzaE1hcDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24q
LCBNYW5nbGVkRnVuY3Rpb25OYW1lPiBmdW5jdGlvbk1hcHBpbmc7Ci0gICAgZm9yIChhdXRvJiBu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9ucygpKSB7Ci0gICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gZnVuY3Rpb25NYXBwaW5nLmFkZCgm
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiwgTWFuZ2xlZEZ1bmN0aW9uTmFtZSB7IG51bUZ1bmN0
aW9ucysrIH0pOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0Lmlz
TmV3RW50cnkpOwotICAgIH0KICAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5pdGlvbiA6IHBy
b2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKSB7CiAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0g
ZnVuY3Rpb25NYXBwaW5nLmFkZCgmZnVuY3Rpb25EZWZpbml0aW9uLCBNYW5nbGVkRnVuY3Rpb25O
YW1lIHsgbnVtRnVuY3Rpb25zKysgfSk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0
LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CkBAIC04MTUsMTAgKzgyMSw2IEBAIHN0YXRpYyBTaGFy
ZWRNZXRhbEZ1bmN0aW9uc1Jlc3VsdCBzaGFyZWQKIAogICAgIHsKICAgICAgICAgRnVuY3Rpb25E
ZWNsYXJhdGlvbldyaXRlciBmdW5jdGlvbkRlY2xhcmF0aW9uV3JpdGVyKHR5cGVOYW1lciwgZnVu
Y3Rpb25NYXBwaW5nKTsKLSAgICAgICAgZm9yIChhdXRvJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpKSB7Ci0gICAgICAgICAg
ICBpZiAocmVhY2hhYmxlRnVuY3Rpb25zLmNvbnRhaW5zKCZuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uKSkKLSAgICAgICAgICAgICAgICBmdW5jdGlvbkRlY2xhcmF0aW9uV3JpdGVyLnZpc2l0KG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOwotICAgICAgICB9CiAgICAgICAgIGZvciAoYXV0byYg
ZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkpIHsKICAg
ICAgICAgICAgIGlmICghZnVuY3Rpb25EZWZpbml0aW9uLT5lbnRyeVBvaW50VHlwZSgpICYmIHJl
YWNoYWJsZUZ1bmN0aW9ucy5jb250YWlucygmZnVuY3Rpb25EZWZpbml0aW9uKSkKICAgICAgICAg
ICAgICAgICBmdW5jdGlvbkRlY2xhcmF0aW9uV3JpdGVyLnZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlv
bik7CkBAIC04NjksMTAgKzg3MSw2IEBAIFJlbmRlck1ldGFsRnVuY3Rpb25zIG1ldGFsRnVuY3Rp
b25zKFByb2cKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzaGFyZWRNZXRhbEZ1bmN0aW9ucy5t
ZXRhbEZ1bmN0aW9ucyk7CiAKICAgICBSZW5kZXJGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIgZnVu
Y3Rpb25EZWZpbml0aW9uV3JpdGVyKHByb2dyYW0uaW50cmluc2ljcygpLCB0eXBlTmFtZXIsIHNo
YXJlZE1ldGFsRnVuY3Rpb25zLmZ1bmN0aW9uTWFwcGluZywgV1RGTW92ZShtYXRjaGVkU2VtYW50
aWNzKSwgbGF5b3V0KTsKLSAgICBmb3IgKGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24g
OiBwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkpIHsKLSAgICAgICAgaWYgKHJl
YWNoYWJsZUZ1bmN0aW9ucy5jb250YWlucygmbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpCi0g
ICAgICAgICAgICBmdW5jdGlvbkRlZmluaXRpb25Xcml0ZXIudmlzaXQobmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbik7Ci0gICAgfQogICAgIGZvciAoYXV0byYgZnVuY3Rpb25EZWZpbml0aW9uIDog
cHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkpIHsKICAgICAgICAgaWYgKHJlYWNoYWJsZUZ1
bmN0aW9ucy5jb250YWlucygmZnVuY3Rpb25EZWZpbml0aW9uKSkKICAgICAgICAgICAgIGZ1bmN0
aW9uRGVmaW5pdGlvbldyaXRlci52aXNpdChmdW5jdGlvbkRlZmluaXRpb24pOwpAQCAtOTAwLDEw
ICs4OTgsNiBAQCBDb21wdXRlTWV0YWxGdW5jdGlvbnMgbWV0YWxGdW5jdGlvbnMoUHJvCiAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoc2hhcmVkTWV0YWxGdW5jdGlvbnMubWV0YWxGdW5jdGlvbnMp
OwogCiAgICAgQ29tcHV0ZUZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlciBmdW5jdGlvbkRlZmluaXRp
b25Xcml0ZXIocHJvZ3JhbS5pbnRyaW5zaWNzKCksIHR5cGVOYW1lciwgc2hhcmVkTWV0YWxGdW5j
dGlvbnMuZnVuY3Rpb25NYXBwaW5nLCBXVEZNb3ZlKG1hdGNoZWRTZW1hbnRpY3MpLCBsYXlvdXQp
OwotICAgIGZvciAoYXV0byYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSkgewotICAgICAgICBpZiAocmVhY2hhYmxlRnVuY3Rp
b25zLmNvbnRhaW5zKCZuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSkKLSAgICAgICAgICAgIGZ1
bmN0aW9uRGVmaW5pdGlvbldyaXRlci52aXNpdChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKTsK
LSAgICB9CiAgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0
aW9uRGVmaW5pdGlvbnMoKSkgewogICAgICAgICBpZiAocmVhY2hhYmxlRnVuY3Rpb25zLmNvbnRh
aW5zKCZmdW5jdGlvbkRlZmluaXRpb24pKQogICAgICAgICAgICAgZnVuY3Rpb25EZWZpbml0aW9u
V3JpdGVyLnZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9X
SExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcAkocmV2aXNpb24gMjQ4MjcxKQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldy
aXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCwyNiArMTIwLDIwIEBAIHN0YXRpYyBjb25z
dCBjaGFyKiB2ZWN0b3JTdWZmaXgoaW50IHZlY3QKICAgICB9CiB9CiAKLVN0cmluZyB3cml0ZU5h
dGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbiwgTWFuZ2xlZEZ1bmN0aW9uTmFtZSBvdXRwdXRGdW5jdGlvbk5hbWUsIElu
dHJpbnNpY3MmIGludHJpbnNpY3MsIFR5cGVOYW1lciYgdHlwZU5hbWVyKQordm9pZCBpbmxpbmVO
YXRpdmVGdW5jdGlvbihTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyLCBBU1Q6Ok5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24sIE1hbmdsZWRWYXJp
YWJsZU5hbWUgcmV0dXJuTmFtZSwgY29uc3QgVmVjdG9yPE1hbmdsZWRWYXJpYWJsZU5hbWU+JiBh
cmdzLCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzLCBUeXBlTmFtZXImIHR5cGVOYW1lcikKIHsKLSAg
ICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24uaXNDYXN0KCkpIHsKICAgICAgICAgYXV0byYgcmV0dXJuVHlwZSA9IG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpOwogICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9
IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUocmV0dXJuVHlwZSk7CiAgICAgICAgIGlmICgh
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpKSB7Ci0gICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgICAgIG1ldGFs
UmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICIoKSB7XG4iCi0gICAgICAgICAg
ICAgICAgIiAgICAiLCBtZXRhbFJldHVybk5hbWUsICIgeCA9IHsgfTtcbiIKLSAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB4O1xuIgotICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAg
ICApOwotICAgICAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQocmV0dXJuTmFtZSwgIiA9IHsgfTtc
biIpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxKTsKICAgICAg
ICAgYXV0byYgcGFyYW1ldGVyVHlwZSA9ICpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKVswXS0+dHlwZSgpOwogICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUocGFyYW1ldGVyVHlwZSk7Ci0gICAgICAgIHN0cmlu
Z0J1aWxkZXIuZmxleGlibGVBcHBlbmQobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0
aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIgeCkge1xuIik7CisgICAgICAgIHN0
cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIntcbiIsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIiB4
ID0gIiwgYXJnc1swXSwgIjtcbiIpOwogCiAgICAgICAgIHsKICAgICAgICAgICAgIGF1dG8gaXNF
bnVtZXJhdGlvbkRlZmluaXRpb24gPSBbXSAoYXV0byYgdHlwZSkgewpAQCAtMTYwLDUyICsxNTQs
MzIgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdQogICAgICAgICB9
CiAKICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAgICAgICAgICAgICIg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PCIsIG1ldGFsUmV0dXJuTmFtZSwgIj4oeCk7XG4iCi0gICAg
ICAgICAgICAifVxuIgotICAgICAgICApOwotICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50
b1N0cmluZygpOwotICAgIH0KKyAgICAgICAgICAgIHJldHVybk5hbWUsICIgPSBzdGF0aWNfY2Fz
dDwiLCBtZXRhbFJldHVybk5hbWUsICI+KHgpO1xufVxuIik7CiAKLSAgICBpZiAobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yLnZhbHVlIikgewotICAgICAgICBB
U1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEp
OwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBl
KCkpOwotICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFt
ZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwotICAgICAgICBzdHJp
bmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgbWV0YWxSZXR1cm5OYW1lLCAn
ICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIgeCkge1xu
IgotICAgICAgICAgICAgIiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IiwgbWV0YWxSZXR1cm5OYW1l
LCAiPih4KTtcbiIKLSAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICk7Ci0gICAgICAgIHJldHVy
biBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODA3
NyBBdXRob3JzIGNhbiBtYWtlIGEgc3RydWN0IGZpZWxkIG5hbWVkICJsZW5ndGgiIHRvby4gQXV0
b2dlbmVyYXRlZCBnZXR0ZXJzIGZvciB0aG9zZSBzaG91bGRuJ3QgdGFrZSB0aGlzIGNvZGVwYXRo
LgogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3Iu
bGVuZ3RoIikgewogICAgICAgICBBU1NFUlRfVU5VU0VEKGludHJpbnNpY3MsIG1hdGNoZXMobmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCksIGludHJpbnNpY3MudWludFR5cGUoKSkpOwog
ICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6
ZSgpID09IDEpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
WzBdLT50eXBlKCkpOwogICAgICAgICBhdXRvJiBwYXJhbWV0ZXJUeXBlID0gbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKS0+dW5pZnlOb2RlKCk7CiAgICAg
ICAgIGF1dG8mIHVubmFtZWRQYXJhbWV0ZXJUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlw
ZT4ocGFyYW1ldGVyVHlwZSk7CiAgICAgICAgIGlmIChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1l
ZFBhcmFtZXRlclR5cGUpKSB7CiAgICAgICAgICAgICBhdXRvJiBhcnJheVBhcmFtZXRlclR5cGUg
PSBkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFBhcmFtZXRlclR5cGUpOwogICAgICAg
ICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAgICAgICAgICAgICAgICAidWlu
dCAiLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1lLCAiKSB7XG4i
Ci0gICAgICAgICAgICAgICAgIiAgICByZXR1cm4gIiwgYXJyYXlQYXJhbWV0ZXJUeXBlLm51bUVs
ZW1lbnRzKCksICI7XG4iCi0gICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICk7Ci0g
ICAgICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgICAgICAgICAg
ICAgIHJldHVybk5hbWUsICIgPSAiLCBhcnJheVBhcmFtZXRlclR5cGUubnVtRWxlbWVudHMoKSwg
IjtcbiIpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJU
KGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkUGFyYW1ldGVyVHlwZSkpOwogICAg
ICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgInVpbnQgIiwg
b3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyTmFtZSwgIiB2KSB7XG4iCi0g
ICAgICAgICAgICAiICAgIHJldHVybiB2Lmxlbmd0aDtcbiIKLSAgICAgICAgICAgICJ9XG4iCi0g
ICAgICAgICk7Ci0gICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAg
ICAgICAgICByZXR1cm5OYW1lLCAiID0gIiwgYXJnc1swXSwgIi5sZW5ndGg7XG4iKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5h
bWUoKS5zdGFydHNXaXRoKCJvcGVyYXRvci4iX3N0cikpIHsKLSAgICAgICAgYXV0byBhcHBlbmRN
YW5nbGVkRmllbGROYW1lID0gWyZdKFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIsIGNvbnN0
IFN0cmluZyYgZmllbGROYW1lKSB7CisgICAgICAgIGF1dG8gYXBwZW5kTWFuZ2xlZEZpZWxkTmFt
ZSA9IFsmXSAoY29uc3QgU3RyaW5nJiBmaWVsZE5hbWUpIHsKICAgICAgICAgICAgIGF1dG8mIHVu
aWZ5Tm9kZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBl
KCktPnVuaWZ5Tm9kZSgpOwogICAgICAgICAgICAgYXV0byYgbmFtZWRUeXBlID0gZG93bmNhc3Q8
QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CiAgICAgICAgICAgICBpZiAoaXM8QVNUOjpTdHJ1
Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpKSB7CkBAIC0yMjEsNTMgKzE5NSwzNCBAQCBTdHJp
bmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2ZUZ1CiAKICAgICAgICAgaWYgKG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLmVuZHNXaXRoKCI9IikpIHsKICAgICAgICAgICAg
IEFTU0VSVChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0g
Mik7Ci0gICAgICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsw
XS0+dHlwZSgpKTsKLSAgICAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1l
dGVycygpWzFdLT50eXBlKCkpOwotICAgICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlw
ZSgpKTsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoCi0gICAgICAg
ICAgICAgICAgbWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBt
ZXRhbFBhcmFtZXRlcjFOYW1lLCAiIHYsICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgbikge1xu
IgotICAgICAgICAgICAgICAgICIgICAgdi4iCi0gICAgICAgICAgICApOwotCiAgICAgICAgICAg
ICBhdXRvIGZpZWxkTmFtZSA9IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN1YnN0
cmluZygib3BlcmF0b3IuIl9zdHIubGVuZ3RoKCkpOwogICAgICAgICAgICAgZmllbGROYW1lID0g
ZmllbGROYW1lLnN1YnN0cmluZygwLCBmaWVsZE5hbWUubGVuZ3RoKCkgLSAxKTsKLSAgICAgICAg
ICAgIGFwcGVuZE1hbmdsZWRGaWVsZE5hbWUoc3RyaW5nQnVpbGRlciwgZmllbGROYW1lKTsKIAot
ICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiA9IG47XG4iCi0gICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdjtcbiIKLSAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAg
KTsKLSAgICAgICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAorICAgICAgICAgICAgICAgIHJldHVy
bk5hbWUsICIgPSAiLCBhcmdzWzBdLCAiO1xuIiwKKyAgICAgICAgICAgICAgICByZXR1cm5OYW1l
LCAnLicpOworICAgICAgICAgICAgYXBwZW5kTWFuZ2xlZEZpZWxkTmFtZShmaWVsZE5hbWUpOwor
ICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiID0gIiwgYXJnc1sxXSwg
IjtcbiIpOworCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBBU1NF
UlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEpOwot
ICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkp
OwotICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZv
clR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwotICAgICAgICBzdHJpbmdC
dWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgbWV0YWxSZXR1cm5OYW1lLCAnICcs
IG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlck5hbWUsICIgdikge1xuIgot
ICAgICAgICAgICAgIiAgICByZXR1cm4gdi4iCi0gICAgICAgICk7Ci0KICAgICAgICAgYXV0byBm
aWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9w
ZXJhdG9yLiJfc3RyLmxlbmd0aCgpKTsKLSAgICAgICAgYXBwZW5kTWFuZ2xlZEZpZWxkTmFtZShz
dHJpbmdCdWlsZGVyLCBmaWVsZE5hbWUpOwotICAgICAgICAgICAgCi0gICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCI7XG4iCi0gICAgICAgICAgICAifVxuIgotICAgICAgICApOwotICAgICAg
ICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgICAgICBzdHJpbmdCdWlsZGVy
LmZsZXhpYmxlQXBwZW5kKAorICAgICAgICAgICAgcmV0dXJuTmFtZSwgIiA9ICIsIGFyZ3NbMF0s
ICcuJyk7CisgICAgICAgIGFwcGVuZE1hbmdsZWRGaWVsZE5hbWUoZmllbGROYW1lKTsKKyAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIjtcbiIpOworICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLnN0YXJ0c1dpdGgoIm9w
ZXJhdG9yJi4iX3N0cikpIHsKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRl
ck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFJldHVy
bk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24udHlwZSgpKTsKKyAgICAgICAgYXV0byBmaWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yJi4iX3N0ci5sZW5ndGgoKSk7CiAK
ICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAgICAgICAgICAgIG1ldGFs
UmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJO
YW1lLCAiIHYpIHtcbiIKLSAgICAgICAgICAgICIgICAgcmV0dXJuICYodi0+IgotICAgICAgICAp
OworICAgICAgICAgICAgcmV0dXJuTmFtZSwgIiA9ICYoIiwgYXJnc1swXSwgIi0+Iik7CiAKLSAg
ICAgICAgYXV0byBmaWVsZE5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKS5z
dWJzdHJpbmcoIm9wZXJhdG9yJi4iX3N0ci5sZW5ndGgoKSk7CiAgICAgICAgIGF1dG8mIHVubmFt
ZWRUeXBlID0gKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBl
KCk7CiAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+
KHVubmFtZWRUeXBlKS5lbGVtZW50VHlwZSgpLnVuaWZ5Tm9kZSgpOwogICAgICAgICBhdXRvJiBu
YW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKTsKQEAgLTI3OSwy
NiArMjM0LDE5IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnUKICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKGZp
ZWxkTmFtZSk7CiAKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoCi0gICAgICAgICAgICAi
KTtcbiIKLSAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICk7Ci0gICAgICAgIHJldHVybiBzdHJp
bmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIpO1xu
Iik7CisKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3ImW10iKSB7CiAgICAgICAgIEFTU0VSVChuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7Ci0gICAgICAg
IGF1dG8gbWV0YWxQYXJhbWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUo
Km5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwotICAg
ICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JU
eXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgpKTsK
LSAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JU
eXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKICAgICAgICAgQVNTRVJUKGlz
PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbMF0tPnR5cGUoKSkpOworCiAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVB
cHBlbmQoCi0gICAgICAgICAgICBtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25O
YW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUsICIgdiwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFt
ZSwgIiBuKSB7XG4iCi0gICAgICAgICAgICAiICAgIGlmIChuIDwgdi5sZW5ndGgpIHJldHVybiAm
KHYucG9pbnRlcltuXSk7XG4iCi0gICAgICAgICAgICAiICAgIHJldHVybiBudWxscHRyO1xuIgot
ICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxk
ZXIudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIHJldHVybk5hbWUsICIgPSAoIiwgYXJnc1sxXSwg
IiA8ICIsIGFyZ3NbMF0sICIubGVuZ3RoKSA/ICIsICIgJigiLCBhcmdzWzBdLCAiLnBvaW50ZXJb
IiwgYXJnc1sxXSwgIl0pIDogbnVsbHB0cjtcbiIpOworICAgICAgICAgICAgCisgICAgICAgIHJl
dHVybjsKICAgICB9CiAKICAgICBhdXRvIG1hdHJpeERpbWVuc2lvbiA9IFsmXSAodW5zaWduZWQg
dHlwZUFyZ3VtZW50SW5kZXgpIC0+IHVuc2lnbmVkIHsKQEAgLTMxNyw4MiArMjY1LDY4IEBAIFN0
cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnUKIAogICAgIGlmIChuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3JbXSIpIHsKICAgICAgICAgQVNT
RVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsK
LSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1l
Rm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUo
KSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50
eXBlKCkpOwogICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVk
TmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwogCiAgICAgICAg
IHVuc2lnbmVkIG51bWJlck9mUm93cyA9IG51bWJlck9mTWF0cml4Um93cygpOwogICAgICAgICB1
bnNpZ25lZCBudW1iZXJPZkNvbHVtbnMgPSBudW1iZXJPZk1hdHJpeENvbHVtbnMoKTsKKyAgICAg
ICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiZG8ge1xuIiwgbWV0YWxSZXR1cm5OYW1l
LCAiIHJlc3VsdDtcbiIpOwogCiAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQo
Ci0gICAgICAgICAgICBtZXRhbFJldHVybk5hbWUsICcgJywgb3V0cHV0RnVuY3Rpb25OYW1lLCAn
KCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUsICIgbSwgIiwgbWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiBp
KSB7XG4iCi0gICAgICAgICAgICAiICAgIGlmIChpID49ICIsIG51bWJlck9mUm93cywgIikgcmV0
dXJuICIsIG1ldGFsUmV0dXJuTmFtZSwgIigwKTtcbiIKLSAgICAgICAgICAgICIgICAgIiwgbWV0
YWxSZXR1cm5OYW1lLCAiIHJlc3VsdDtcbiIKLSAgICAgICAgICAgICIgICAgcmVzdWx0WzBdID0g
bVtpXTtcbiIKLSAgICAgICAgICAgICIgICAgcmVzdWx0WzFdID0gbVtpICsgIiwgbnVtYmVyT2ZS
b3dzLCAiXTtcbiIKLSAgICAgICAgKTsKKyAgICAgICAgICAgICIgICAgaWYgKCIsIGFyZ3NbMV0s
ICIgPj0gIiwgbnVtYmVyT2ZSb3dzLCAiKSB7IiwgcmV0dXJuTmFtZSwgIiA9ICIsIG1ldGFsUmV0
dXJuTmFtZSwgIigwKTsgYnJlYWs7fVxuIiwKKyAgICAgICAgICAgICIgICAgcmVzdWx0WzBdID0g
IiwgYXJnc1swXSwgJ1snLCBhcmdzWzFdLCAiXTtcbiIsCisgICAgICAgICAgICAiICAgIHJlc3Vs
dFsxXSA9ICIsIGFyZ3NbMF0sICdbJywgYXJnc1sxXSwgIiArICIsIG51bWJlck9mUm93cywgIl07
XG4iKTsKKwogICAgICAgICBpZiAobnVtYmVyT2ZDb2x1bW5zID49IDMpCi0gICAgICAgICAgICBz
dHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIgICAgcmVzdWx0WzJdID0gbVtpICsgIiwgbnVt
YmVyT2ZSb3dzICogMiwgIl07XG4iKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGli
bGVBcHBlbmQoIiAgICByZXN1bHRbMl0gPSAiLCBhcmdzWzBdLCAnWycsIGFyZ3NbMV0sICIgKyAi
LCBudW1iZXJPZlJvd3MgKiAyLCAiXTtcbiIpOwogICAgICAgICBpZiAobnVtYmVyT2ZDb2x1bW5z
ID49IDQpCi0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIgICAgcmVz
dWx0WzNdID0gbVtpICsgIiwgbnVtYmVyT2ZSb3dzICogMywgIl07XG4iKTsKLSAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoCi0gICAgICAgICAgICAiICAgIHJldHVybiByZXN1bHQ7XG4iCi0g
ICAgICAgICAgICAifVxuIgotICAgICAgICApOwotICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRl
ci50b1N0cmluZygpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgi
ICAgIHJlc3VsdFszXSA9ICIsIGFyZ3NbMF0sICdbJywgYXJnc1sxXSwgIiArICIsIG51bWJlck9m
Um93cyAqIDMsICJdO1xuIik7CisKKyAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVu
ZCgKKyAgICAgICAgICAgICIgICAgIiwgcmV0dXJuTmFtZSwgIiA9IHJlc3VsdDtcbiIsCisgICAg
ICAgICAgICAifSB3aGlsZSAoMCk7XG4iKTsKKworICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJvcGVyYXRvcltdPSIp
IHsKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
LnNpemUoKSA9PSAzKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0
ZXJzKClbMF0tPnR5cGUoKSk7CiAgICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5
cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpWzFdLT50eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyM05hbWUg
PSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LnBhcmFtZXRlcnMoKVsyXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUg
PSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
dHlwZSgpKTsKIAogICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlJvd3MgPSBudW1iZXJPZk1hdHJp
eFJvd3MoKTsKICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZDb2x1bW5zID0gbnVtYmVyT2ZNYXRy
aXhDb2x1bW5zKCk7CiAKKyAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiZG8g
e1xuIiwgbWV0YWxSZXR1cm5OYW1lLCAiIG0gPSAiLCBhcmdzWzBdLCAiO1xuIiwKKyAgICAgICAg
ICAgIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgaSA9ICIsIGFyZ3NbMV0sICI7XG4iKTsKKwogICAg
ICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgbWV0YWxSZXR1
cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1l
LCAiIG0sICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgaSwgIiwgbWV0YWxQYXJhbWV0ZXIzTmFt
ZSwgIiB2KSB7XG4iCi0gICAgICAgICAgICAiICAgIGlmIChpID49ICIsIG51bWJlck9mUm93cywg
IikgcmV0dXJuIG07XG4iCi0gICAgICAgICAgICAiICAgIG1baV0gPSB2WzBdO1xuIgotICAgICAg
ICAgICAgIiAgICBtW2kgKyAiLCBudW1iZXJPZlJvd3MsICJdID0gdlsxXTtcbiIKLSAgICAgICAg
KTsKKyAgICAgICAgICAgICIgICAgaWYgKGkgPj0gIiwgbnVtYmVyT2ZSb3dzLCAiKSB7IiwgcmV0
dXJuTmFtZSwgIiA9IG07XG5icmVhazt9XG4iLAorICAgICAgICAgICAgIiAgICBtW2ldID0gIiwg
YXJnc1syXSwgIlswXTtcbiIsCisgICAgICAgICAgICAiICAgIG1baSArICIsIG51bWJlck9mUm93
cywgIl0gPSAiLCBhcmdzWzJdLCAiWzFdO1xuIik7CiAgICAgICAgIGlmIChudW1iZXJPZkNvbHVt
bnMgPj0gMykKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiAgICBt
W2kgKyAiLCBudW1iZXJPZlJvd3MgKiAyLCAiXSA9IHZbMl07XG4iKTsKKyAgICAgICAgICAgIHN0
cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiAgICBtW2kgKyAiLCBudW1iZXJPZlJvd3MgKiAy
LCAiXSA9ICIsIGFyZ3NbMl0sICJbMl07XG4iKTsKICAgICAgICAgaWYgKG51bWJlck9mQ29sdW1u
cyA+PSA0KQotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiICAgIG1b
aSArICIsIG51bWJlck9mUm93cyAqIDMsICJdID0gdlszXTtcbiIpOwotICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCgKLSAgICAgICAgICAgICIgICAgcmV0dXJuIG07IgotICAgICAgICAgICAg
In1cbiIKLSAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmco
KTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiAgICBtW2kgKyAi
LCBudW1iZXJPZlJvd3MgKiAzLCAiXSA9ICIsIGFyZ3NbMl0sICJbM107XG4iKTsKKyAgICAgICAg
c3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKKyAgICAgICAgICAgICIgICAgIiwgcmV0dXJu
TmFtZSwgIiA9IG07XG4iLAorICAgICAgICAgICAgIn0gd2hpbGUoMCk7XG4iKTsKKyAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmlzT3Bl
cmF0b3IoKSkgeworICAgICAgICBhdXRvIG9wZXJhdG9yTmFtZSA9IG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ubmFtZSgpLnN1YnN0cmluZygib3BlcmF0b3IiX3N0ci5sZW5ndGgoKSk7CiAgICAg
ICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0g
MSkgewotICAgICAgICAgICAgYXV0byBvcGVyYXRvck5hbWUgPSBuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLm5hbWUoKS5zdWJzdHJpbmcoIm9wZXJhdG9yIl9zdHIubGVuZ3RoKCkpOwogICAgICAg
ICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JU
eXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsK
LSAgICAgICAgICAgIGF1dG8gbWV0YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1l
Rm9yVHlwZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7CiAgICAgICAgICAgICBz
dHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgICAgIG1ldGFsUmV0dXJu
TmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1lLCAi
IHgpIHtcbiIKLSAgICAgICAgICAgICAgICAiICAgIHJldHVybiAiLCBvcGVyYXRvck5hbWUsICJ4
O1xuIgotICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICApOwotICAgICAgICAgICAg
cmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAie1xuIiwg
bWV0YWxQYXJhbWV0ZXJOYW1lLCAiIHggPSAiLCBhcmdzWzBdLCAiO1xuIiwgCisgICAgICAgICAg
ICAgICAgcmV0dXJuTmFtZSwgIiA9ICIsIG9wZXJhdG9yTmFtZSwgIng7XG59XG4iKTsKKyAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVChuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMik7Ci0gICAgICAgIGF1dG8gb3Bl
cmF0b3JOYW1lID0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3Vic3RyaW5nKCJv
cGVyYXRvciJfc3RyLmxlbmd0aCgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjFOYW1l
ID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIy
TmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFsUmV0dXJu
TmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi50eXBlKCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAg
ICAgICAgICAgbWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBt
ZXRhbFBhcmFtZXRlcjFOYW1lLCAiIHgsICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgeSkge1xu
IgotICAgICAgICAgICAgIiAgICByZXR1cm4geCAiLCBvcGVyYXRvck5hbWUsICIgeTtcbiIKLSAg
ICAgICAgICAgICJ9XG4iCi0gICAgICAgICk7Ci0gICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVy
LnRvU3RyaW5nKCk7CisgICAgICAgICAgICByZXR1cm5OYW1lLCAiID0gIiwgYXJnc1swXSwgJyAn
LCBvcGVyYXRvck5hbWUsICcgJywgYXJnc1sxXSwgIjtcbiIpOworICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJjb3Mi
CkBAIC00MjAsOTYgKzM1NCw1NSBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5h
dGl2ZUZ1CiAgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJh
c3VpbnQiCiAgICAgICAgIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJh
c2Zsb2F0IikgewogICAgICAgICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKCkuc2l6ZSgpID09IDEpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyTmFtZSA9
IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
cGFyYW1ldGVycygpWzBdLT50eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9
IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50
eXBlKCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAg
ICAgbWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBh
cmFtZXRlck5hbWUsICIgeCkge1xuIgotICAgICAgICAgICAgIiAgICByZXR1cm4gIiwgbWFwRnVu
Y3Rpb25OYW1lKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpKSwgIih4KTtcbiIKLSAg
ICAgICAgICAgICJ9XG4iCi0gICAgICAgICk7Ci0gICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVy
LnRvU3RyaW5nKCk7CisgICAgICAgICAgICByZXR1cm5OYW1lLCAiID0gIiwgbWFwRnVuY3Rpb25O
YW1lKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpKSwgJygnLCBhcmdzWzBdLCAiKTtc
biIpOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ubmFtZSgpID09ICJwb3ciIHx8IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFt
ZSgpID09ICJhdGFuMiIpIHsKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRl
cjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJh
bWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwotICAgICAgICBhdXRvIG1ldGFs
UmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUobmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi50eXBlKCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5k
KAotICAgICAgICAgICAgbWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFtZSwg
JygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAiIHgsICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIg
eSkge1xuIgotICAgICAgICAgICAgIiAgICByZXR1cm4gIiwgbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbi5uYW1lKCksICIoeCwgeSk7XG4iCi0gICAgICAgICAgICAifVxuIgotICAgICAgICApOwot
ICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgICAgICAgICAgcmV0
dXJuTmFtZSwgIiA9ICIsIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLCAiKCIsIGFy
Z3NbMF0sICIsICIsIGFyZ3NbMV0sICIpO1xuIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gIkFsbE1lbW9yeUJh
cnJpZXJXaXRoR3JvdXBTeW5jIikgewogICAgICAgICBBU1NFUlQoIW5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuZmxl
eGlibGVBcHBlbmQoCi0gICAgICAgICAgICAidm9pZCAiLCBvdXRwdXRGdW5jdGlvbk5hbWUsICIo
KSB7XG4iCi0gICAgICAgICAgICAiICAgIHRocmVhZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdzOjpt
ZW1fZGV2aWNlKTtcbiIKLSAgICAgICAgICAgICIgICAgdGhyZWFkZ3JvdXBfYmFycmllcihtZW1f
ZmxhZ3M6Om1lbV90aHJlYWRncm91cCk7XG4iCi0gICAgICAgICAgICAiICAgIHRocmVhZGdyb3Vw
X2JhcnJpZXIobWVtX2ZsYWdzOjptZW1fdGV4dHVyZSk7XG4iCi0gICAgICAgICAgICAifVxuIgot
ICAgICAgICApOwotICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgKKyAgICAgICAgICAgICJ0aHJlYWRncm91cF9iYXJy
aWVyKG1lbV9mbGFnczo6bWVtX2RldmljZSk7XG4iCisgICAgICAgICAgICAidGhyZWFkZ3JvdXBf
YmFycmllcihtZW1fZmxhZ3M6Om1lbV90aHJlYWRncm91cCk7XG4iCisgICAgICAgICAgICAidGhy
ZWFkZ3JvdXBfYmFycmllcihtZW1fZmxhZ3M6Om1lbV90ZXh0dXJlKTtcbiIpOworICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgp
ID09ICJEZXZpY2VNZW1vcnlCYXJyaWVyV2l0aEdyb3VwU3luYyIpIHsKICAgICAgICAgQVNTRVJU
KCFuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkpOwotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgInZvaWQgIiwgb3V0
cHV0RnVuY3Rpb25OYW1lLCAiKCkge1xuIgotICAgICAgICAgICAgIiAgICB0aHJlYWRncm91cF9i
YXJyaWVyKG1lbV9mbGFnczo6bWVtX2RldmljZSk7XG4iCi0gICAgICAgICAgICAifVxuIgotICAg
ICAgICApOwotICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgKKyAgICAgICAgICAgICJ0aHJlYWRncm91cF9iYXJyaWVy
KG1lbV9mbGFnczo6bWVtX2RldmljZSk7XG4iKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiR3JvdXBNZW1vcnlC
YXJyaWVyV2l0aEdyb3VwU3luYyIpIHsKICAgICAgICAgQVNTRVJUKCFuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmZs
ZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgInZvaWQgIiwgb3V0cHV0RnVuY3Rpb25OYW1lLCAi
KCkge1xuIgotICAgICAgICAgICAgIiAgICB0aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6
bWVtX3RocmVhZGdyb3VwKTtcbiIKLSAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICk7Ci0gICAg
ICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKAorICAgICAgICAgICAgInRocmVhZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdzOjpt
ZW1fdGhyZWFkZ3JvdXApO1xuIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAo
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkuc3RhcnRzV2l0aCgiSW50ZXJsb2NrZWQi
X3N0cikpIHsKICAgICAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09
ICJJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZSIpIHsKICAgICAgICAgICAgIEFTU0VSVChuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gNCk7Ci0gICAgICAg
ICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50UG9pbnRlciA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5
cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsK
LSAgICAgICAgICAgIGF1dG8gZmlyc3RBcmd1bWVudEFkZHJlc3NTcGFjZSA9IGZpcnN0QXJndW1l
bnRQb2ludGVyLmFkZHJlc3NTcGFjZSgpOwotICAgICAgICAgICAgYXV0byBmaXJzdEFyZ3VtZW50
UG9pbnRlZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZmlyc3RBcmd1bWVudFBvaW50
ZXIuZWxlbWVudFR5cGUoKSk7Ci0gICAgICAgICAgICBhdXRvIHNlY29uZEFyZ3VtZW50ID0gdHlw
ZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJh
bWV0ZXJzKClbMV0tPnR5cGUoKSk7Ci0gICAgICAgICAgICBhdXRvIHRoaXJkQXJndW1lbnQgPSB0
eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBh
cmFtZXRlcnMoKVsyXS0+dHlwZSgpKTsKLSAgICAgICAgICAgIGF1dG8mIGZvdXJ0aEFyZ3VtZW50
UG9pbnRlciA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnBhcmFtZXRlcnMoKVszXS0+dHlwZSgpKTsKLSAgICAgICAgICAgIGF1dG8gZm91cnRo
QXJndW1lbnRBZGRyZXNzU3BhY2UgPSBmb3VydGhBcmd1bWVudFBvaW50ZXIuYWRkcmVzc1NwYWNl
KCk7Ci0gICAgICAgICAgICBhdXRvIGZvdXJ0aEFyZ3VtZW50UG9pbnRlZSA9IHR5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUoZm91cnRoQXJndW1lbnRQb2ludGVyLmVsZW1lbnRUeXBlKCkpOwog
ICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAgICAgICAgICAgICAg
ICAidm9pZCAiLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgdG9TdHJpbmcoZmlyc3RBcmd1bWVu
dEFkZHJlc3NTcGFjZSksICcgJywgZmlyc3RBcmd1bWVudFBvaW50ZWUsICIqIG9iamVjdCwgIiwg
c2Vjb25kQXJndW1lbnQsICIgY29tcGFyZSwgIiwgdGhpcmRBcmd1bWVudCwgIiBkZXNpcmVkLCAi
LCB0b1N0cmluZyhmb3VydGhBcmd1bWVudEFkZHJlc3NTcGFjZSksICcgJywgZm91cnRoQXJndW1l
bnRQb2ludGVlLCAiKiBvdXQpIHtcbiIKLSAgICAgICAgICAgICAgICAiICAgIGF0b21pY19jb21w
YXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQob2JqZWN0LCAmY29tcGFyZSwgZGVzaXJlZCwgbWVt
b3J5X29yZGVyX3JlbGF4ZWQsIG1lbW9yeV9vcmRlcl9yZWxheGVkKTtcbiIKLSAgICAgICAgICAg
ICAgICAiICAgICpvdXQgPSBjb21wYXJlO1xuIgotICAgICAgICAgICAgICAgICJ9XG4iCi0gICAg
ICAgICAgICApOwotICAgICAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsK
KyAgICAgICAgICAgICAgICAiYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19leHBsaWNpdCgi
LCBhcmdzWzBdLCAiLCAmIiwgYXJnc1sxXSwgIiwgIiwgYXJnc1syXSwgIiwgbWVtb3J5X29yZGVy
X3JlbGF4ZWQsIG1lbW9yeV9vcmRlcl9yZWxheGVkKTtcbiIsCisgICAgICAgICAgICAgICAgJyon
LCBhcmdzWzNdLCAiID0gIiwgYXJnc1sxXSwgIjtcbiIpOworICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFy
YW1ldGVycygpLnNpemUoKSA9PSAzKTsKLSAgICAgICAgYXV0byYgZmlyc3RBcmd1bWVudFBvaW50
ZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPigqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5wYXJhbWV0ZXJzKClbMF0tPnR5cGUoKSk7Ci0gICAgICAgIGF1dG8gZmlyc3RBcmd1bWVudEFk
ZHJlc3NTcGFjZSA9IGZpcnN0QXJndW1lbnRQb2ludGVyLmFkZHJlc3NTcGFjZSgpOwotICAgICAg
ICBhdXRvIGZpcnN0QXJndW1lbnRQb2ludGVlID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlw
ZShmaXJzdEFyZ3VtZW50UG9pbnRlci5lbGVtZW50VHlwZSgpKTsKLSAgICAgICAgYXV0byBzZWNv
bmRBcmd1bWVudCA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzFdLT50eXBlKCkpOwotICAgICAgICBhdXRvJiB0aGly
ZEFyZ3VtZW50UG9pbnRlciA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KCpuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsyXS0+dHlwZSgpKTsKLSAgICAgICAgYXV0byB0
aGlyZEFyZ3VtZW50QWRkcmVzc1NwYWNlID0gdGhpcmRBcmd1bWVudFBvaW50ZXIuYWRkcmVzc1Nw
YWNlKCk7Ci0gICAgICAgIGF1dG8gdGhpcmRBcmd1bWVudFBvaW50ZWUgPSB0eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKHRoaXJkQXJndW1lbnRQb2ludGVyLmVsZW1lbnRUeXBlKCkpOwogICAg
ICAgICBhdXRvIG5hbWUgPSBhdG9taWNOYW1lKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFt
ZSgpLnN1YnN0cmluZygiSW50ZXJsb2NrZWQiX3N0ci5sZW5ndGgoKSkpOwogICAgICAgICBzdHJp
bmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgInZvaWQgIiwgb3V0cHV0RnVu
Y3Rpb25OYW1lLCAnKCcsIHRvU3RyaW5nKGZpcnN0QXJndW1lbnRBZGRyZXNzU3BhY2UpLCAnICcs
IGZpcnN0QXJndW1lbnRQb2ludGVlLCAiKiBvYmplY3QsICIsIHNlY29uZEFyZ3VtZW50LCAiIG9w
ZXJhbmQsICIsIHRvU3RyaW5nKHRoaXJkQXJndW1lbnRBZGRyZXNzU3BhY2UpLCAnICcsIHRoaXJk
QXJndW1lbnRQb2ludGVlLCAiKiBvdXQpIHtcbiIKLSAgICAgICAgICAgICIgICAgKm91dCA9IGF0
b21pY18iLCBuYW1lLCAiX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgbWVtb3J5X29yZGVyX3Jl
bGF4ZWQpO1xuIgotICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgKTsKLSAgICAgICAgcmV0dXJu
IHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICcqJywgYXJnc1syXSwgIiA9
IGF0b21pY18iLCBuYW1lLCAiX2V4cGxpY2l0KCIsIGFyZ3NbMF0sICIsICIsIGFyZ3NbMV0sICIs
IG1lbW9yeV9vcmRlcl9yZWxheGVkKTtcbiIpOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJTYW1wbGUiKSB7CkBA
IC01MjEsMzUgKzQxNCwyMiBAQCBTdHJpbmcgd3JpdGVOYXRpdmVGdW5jdGlvbihBU1Q6Ok5hdGl2
ZUZ1CiAgICAgICAgIGF1dG8mIHJldHVyblR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbj4oZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24udHlwZSgpLnVuaWZ5Tm9kZSgpKSk7CiAgICAgICAgIGF1dG8gcmV0dXJuVmVjdG9yTGVu
Z3RoID0gdmVjdG9yTGVuZ3RoKHJldHVyblR5cGUpOwogCi0gICAgICAgIGF1dG8gbWV0YWxQYXJh
bWV0ZXIxTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUodGV4dHVyZVR5cGUpOwot
ICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVG
b3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVsxXS0+dHlwZSgp
KTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjNOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWRO
YW1lRm9yVHlwZShsb2NhdGlvblR5cGUpOwotICAgICAgICBPcHRpb25hbDxNYW5nbGVkVHlwZU5h
bWU+IG1ldGFsUGFyYW1ldGVyNE5hbWU7Ci0gICAgICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gNCkKLSAgICAgICAgICAgIG1ldGFsUGFyYW1l
dGVyNE5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLnBhcmFtZXRlcnMoKVszXS0+dHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFJl
dHVybk5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKHJldHVyblR5cGUpOwotICAg
ICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBv
dXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiB0aGVUZXh0dXJl
LCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIHRoZVNhbXBsZXIsICIsIG1ldGFsUGFyYW1ldGVy
M05hbWUsICIgbG9jYXRpb24iKTsKLSAgICAgICAgaWYgKG1ldGFsUGFyYW1ldGVyNE5hbWUpCi0g
ICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIsICIsICptZXRhbFBhcmFt
ZXRlcjROYW1lLCAiIG9mZnNldCIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgKLSAg
ICAgICAgICAgICIpIHtcbiIKLSAgICAgICAgICAgICIgICAgcmV0dXJuIHRoZVRleHR1cmUuc2Ft
cGxlKHRoZVNhbXBsZXIsICIKLSAgICAgICAgKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4
aWJsZUFwcGVuZCgKKyAgICAgICAgICAgIHJldHVybk5hbWUsICIgPSAiLCBhcmdzWzBdLCAiLnNh
bXBsZSgiLCBhcmdzWzFdLCAiLCAiKTsKKwogICAgICAgICBpZiAodGV4dHVyZVR5cGUuaXNUZXh0
dXJlQXJyYXkoKSkgewogICAgICAgICAgICAgQVNTRVJUKGxvY2F0aW9uVmVjdG9yTGVuZ3RoID4g
MSk7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCJsb2NhdGlvbi4i
LCAieHl6dyJfc3RyLnN1YnN0cmluZygwLCBsb2NhdGlvblZlY3Rvckxlbmd0aCAtIDEpLCAiLCBs
b2NhdGlvbi4iLCAieHl6dyJfc3RyLnN1YnN0cmluZyhsb2NhdGlvblZlY3Rvckxlbmd0aCAtIDEs
IDEpKTsKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoYXJnc1syXSwg
Jy4nLCAieHl6dyJfc3RyLnN1YnN0cmluZygwLCBsb2NhdGlvblZlY3Rvckxlbmd0aCAtIDEpLCAi
LCAiLCBhcmdzWzJdLCAnLicsICJ4eXp3Il9zdHIuc3Vic3RyaW5nKGxvY2F0aW9uVmVjdG9yTGVu
Z3RoIC0gMSwgMSkpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCJsb2NhdGlvbiIpOwotICAgICAgICBpZiAobWV0YWxQYXJhbWV0ZXI0TmFtZSkKLSAg
ICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIsIG9mZnNldCIpOworICAgICAgICAgICAg
c3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZChhcmdzWzJdKTsKKyAgICAgICAgaWYgKG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSA0KQorICAgICAgICAg
ICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiLCAiLCBhcmdzWzNdKTsKICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoIikiKTsKICAgICAgICAgaWYgKCF0ZXh0dXJlVHlwZS5pc0Rl
cHRoVGV4dHVyZSgpKQogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgi
LiIsICJ4eXp3Il9zdHIuc3Vic3RyaW5nKDAsIHJldHVyblZlY3Rvckxlbmd0aCkpOwotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgKLSAgICAgICAgICAgICI7XG4iCi0gICAgICAgICAgICAi
fVxuIgotICAgICAgICApOwotICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygp
OworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiO1xuIik7CisKKyAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAi
TG9hZCIpIHsKQEAgLTU2MSwxNTIgKzQ0MSwxMjUgQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rp
b24oQVNUOjpOYXRpdmVGdQogICAgICAgICBhdXRvJiByZXR1cm5UeXBlID0gZG93bmNhc3Q8QVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPihuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKS51bmlmeU5vZGUoKSkpOwogICAgICAgICBhdXRvIHJl
dHVyblZlY3Rvckxlbmd0aCA9IHZlY3Rvckxlbmd0aChyZXR1cm5UeXBlKTsKIAotICAgICAgICBh
dXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKHRl
eHR1cmVUeXBlKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVy
Lm1hbmdsZWROYW1lRm9yVHlwZShsb2NhdGlvblR5cGUpOwogICAgICAgICBhdXRvIG1ldGFsUmV0
dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUocmV0dXJuVHlwZSk7Ci0gICAg
ICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91
dHB1dEZ1bmN0aW9uTmFtZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAiIHRoZVRleHR1cmUs
ICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUsICIgbG9jYXRpb24pIHtcbiIpOworICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgiZG8ge1xuIik7CisKICAgICAgICAgaWYgKHRleHR1cmVUeXBlLmlz
VGV4dHVyZUFycmF5KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChsb2NhdGlvblZlY3Rvckxlbmd0
aCA+IDEpOwogICAgICAgICAgICAgU3RyaW5nIGRpbWVuc2lvbnNbXSA9IHsgIndpZHRoIl9zdHIs
ICJoZWlnaHQiX3N0ciwgImRlcHRoIl9zdHIgfTsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbG9jYXRpb25WZWN0b3JMZW5ndGggLSAxOyArK2kpIHsKICAgICAgICAgICAgICAgICBh
dXRvIHN1ZmZpeCA9ICJ4eXp3Il9zdHIuc3Vic3RyaW5nKGksIDEpOwotICAgICAgICAgICAgICAg
IHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiAgICBpZiAobG9jYXRpb24uIiwgc3VmZml4
LCAiIDwgMCB8fCBzdGF0aWNfY2FzdDx1aW50MzJfdD4obG9jYXRpb24uIiwgc3VmZml4LCAiKSA+
PSB0aGVUZXh0dXJlLmdldF8iLCBkaW1lbnNpb25zW2ldLCAiKCkpIHJldHVybiAiLCBtZXRhbFJl
dHVybk5hbWUsICIoMCk7XG4iKTsKKyAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhp
YmxlQXBwZW5kKCIgICAgaWYgKCIsIGFyZ3NbMV0sICcuJywgc3VmZml4LCAiIDwgMCB8fCBzdGF0
aWNfY2FzdDx1aW50MzJfdD4oIiwgYXJnc1sxXSwgJy4nLCBzdWZmaXgsICIpID49ICIsIGFyZ3Nb
MF0sICIuZ2V0XyIsIGRpbWVuc2lvbnNbaV0sICIoKSkgeyIsIHJldHVybk5hbWUsICIgPSAiLCBt
ZXRhbFJldHVybk5hbWUsICIoMCk7IGJyZWFrO31cbiIpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgYXV0byBzdWZmaXggPSAieHl6dyJfc3RyLnN1YnN0cmluZyhsb2NhdGlvblZlY3Rvckxl
bmd0aCAtIDEsIDEpOwotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgi
ICAgIGlmIChsb2NhdGlvbi4iLCBzdWZmaXgsICIgPCAwIHx8IHN0YXRpY19jYXN0PHVpbnQzMl90
Pihsb2NhdGlvbi4iLCBzdWZmaXgsICIpID49IHRoZVRleHR1cmUuZ2V0X2FycmF5X3NpemUoKSkg
cmV0dXJuICIsIG1ldGFsUmV0dXJuTmFtZSwgIigwKTtcbiIpOworICAgICAgICAgICAgc3RyaW5n
QnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiICAgIGlmICgiLCBhcmdzWzFdLCAnLicsIHN1ZmZpeCwg
IiA8IDAgfHwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KCIsIGFyZ3NbMV0sICcuJywgc3VmZml4LCAi
KSA+PSAiLCBhcmdzWzBdLCAiLmdldF9hcnJheV9zaXplKCkpIHsiLCByZXR1cm5OYW1lLCAiID0g
IiwgbWV0YWxSZXR1cm5OYW1lLCAiKDApOyBicmVhazt9XG4iKTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIGlmIChsb2NhdGlvblZlY3Rvckxlbmd0aCA9PSAxKQotICAgICAgICAgICAg
ICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiAgICBpZiAobG9jYXRpb24gPCAwIHx8
IHN0YXRpY19jYXN0PHVpbnQzMl90Pihsb2NhdGlvbikgPj0gdGhlVGV4dHVyZS5nZXRfd2lkdGgo
KSkgcmV0dXJuICIsIG1ldGFsUmV0dXJuTmFtZSwgIigwKTtcbiIpOworICAgICAgICAgICAgICAg
IHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiAgICBpZiAoIiwgYXJnc1sxXSwgIiA8IDAg
fHwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KCIsIGFyZ3NbMV0sICIpID49ICIsIGFyZ3NbMF0sICIu
Z2V0X3dpZHRoKCkpIHsgIiwgcmV0dXJuTmFtZSwgIiA9ICIsIG1ldGFsUmV0dXJuTmFtZSwgIigw
KTsgYnJlYWs7fVxuIik7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBzdHJp
bmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKAotICAgICAgICAgICAgICAgICAgICAiICAgIGlmIChs
b2NhdGlvbi54IDwgMCB8fCBzdGF0aWNfY2FzdDx1aW50MzJfdD4obG9jYXRpb24ueCkgPj0gdGhl
VGV4dHVyZS5nZXRfd2lkdGgoKSkgcmV0dXJuICIsIG1ldGFsUmV0dXJuTmFtZSwgIigwKTtcbiIK
LSAgICAgICAgICAgICAgICAgICAgIiAgICBpZiAobG9jYXRpb24ueSA8IDAgfHwgc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KGxvY2F0aW9uLnkpID49IHRoZVRleHR1cmUuZ2V0X2hlaWdodCgpKSByZXR1
cm4gIiwgbWV0YWxSZXR1cm5OYW1lLCAiKDApO1xuIgotICAgICAgICAgICAgICAgICk7CisgICAg
ICAgICAgICAgICAgICAgICIgICAgaWYgKCIsIGFyZ3NbMV0sICIueCA8IDAgfHwgc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KCIsIGFyZ3NbMV0sICIueCkgPj0gIiwgYXJnc1swXSwgIi5nZXRfd2lkdGgo
KSkgeyIsIHJldHVybk5hbWUsICIgPSAiLCBtZXRhbFJldHVybk5hbWUsICIoMCk7IGJyZWFrO31c
biIKKyAgICAgICAgICAgICAgICAgICAgIiAgICBpZiAoIiwgYXJnc1sxXSwgIi55IDwgMCB8fCBz
dGF0aWNfY2FzdDx1aW50MzJfdD4oIiwgYXJnc1sxXSwgIi55KSA+PSAiLCBhcmdzWzBdLCAiLmdl
dF9oZWlnaHQoKSkgeyIsIHJldHVybk5hbWUsICIgPSAiLCBtZXRhbFJldHVybk5hbWUsICIoMCk7
IGJyZWFrO31cbiIpOworCiAgICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uVmVjdG9yTGVuZ3Ro
ID49IDMpCi0gICAgICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQo
IiAgICBpZiAobG9jYXRpb24ueiA8IDAgfHwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGxvY2F0aW9u
LnopID49IHRoZVRleHR1cmUuZ2V0X2RlcHRoKCkpIHJldHVybiAiLCBtZXRhbFJldHVybk5hbWUs
ICIoMCk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFw
cGVuZCgiICAgIGlmICgiLCBhcmdzWzFdLCAiLnogPCAwIHx8IHN0YXRpY19jYXN0PHVpbnQzMl90
PigiLCBhcmdzWzFdLCAiLnopID49ICIsIGFyZ3NbMF0sICIuZ2V0X2RlcHRoKCkpIHsiLCByZXR1
cm5OYW1lLCAiID0gIiwgbWV0YWxSZXR1cm5OYW1lLCAiKDApOyBicmVhazt9XG4iKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiICAgIHJl
dHVybiB0aGVUZXh0dXJlLnJlYWQoIik7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVB
cHBlbmQoIiAgICAiLCByZXR1cm5OYW1lLCAiID0gIiwgYXJnc1swXSwgIi5yZWFkKCIpOwogICAg
ICAgICBpZiAodGV4dHVyZVR5cGUuaXNUZXh0dXJlQXJyYXkoKSkgewogICAgICAgICAgICAgQVNT
RVJUKGxvY2F0aW9uVmVjdG9yTGVuZ3RoID4gMSk7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVy
LmZsZXhpYmxlQXBwZW5kKCJ1aW50IiwgdmVjdG9yU3VmZml4KGxvY2F0aW9uVmVjdG9yTGVuZ3Ro
IC0gMSksICIobG9jYXRpb24uIiwgInh5enciX3N0ci5zdWJzdHJpbmcoMCwgbG9jYXRpb25WZWN0
b3JMZW5ndGggLSAxKSwgIiksIHVpbnQobG9jYXRpb24uIiwgInh5enciX3N0ci5zdWJzdHJpbmco
bG9jYXRpb25WZWN0b3JMZW5ndGggLSAxLCAxKSwgJyknKTsKKyAgICAgICAgICAgIHN0cmluZ0J1
aWxkZXIuZmxleGlibGVBcHBlbmQoInVpbnQiLCB2ZWN0b3JTdWZmaXgobG9jYXRpb25WZWN0b3JM
ZW5ndGggLSAxKSwgJygnLCBhcmdzWzFdLCAnLicsICJ4eXp3Il9zdHIuc3Vic3RyaW5nKDAsIGxv
Y2F0aW9uVmVjdG9yTGVuZ3RoIC0gMSksICIpLCB1aW50KCIsIGFyZ3NbMV0sICcuJywgInh5enci
X3N0ci5zdWJzdHJpbmcobG9jYXRpb25WZWN0b3JMZW5ndGggLSAxLCAxKSwgJyknKTsKICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCJ1aW50
IiwgdmVjdG9yU3VmZml4KGxvY2F0aW9uVmVjdG9yTGVuZ3RoKSwgIihsb2NhdGlvbikiKTsKKyAg
ICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoInVpbnQiLCB2ZWN0b3JTdWZm
aXgobG9jYXRpb25WZWN0b3JMZW5ndGgpLCAnKCcsIGFyZ3NbMV0sICcpJyk7CiAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCcpJyk7CiAgICAgICAgIGlmICghdGV4dHVyZVR5cGUuaXNEZXB0
aFRleHR1cmUoKSkKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoJy4n
LCAieHl6dyJfc3RyLnN1YnN0cmluZygwLCByZXR1cm5WZWN0b3JMZW5ndGgpKTsKICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoCiAgICAgICAgICAgICAiO1xuIgotICAgICAgICAgICAgIn1c
biIKLSAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsK
KyAgICAgICAgICAgICJ9IHdoaWxlKDApO1xuIik7CisKKyAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAibG9hZCIpIHsK
ICAgICAgICAgQVNTRVJUKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpLnNp
emUoKSA9PSAxKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlck5hbWUgPSB0eXBlTmFtZXIu
bWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMo
KVswXS0+dHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFJldHVybk5hbWUgPSB0eXBlTmFtZXIu
bWFuZ2xlZE5hbWVGb3JUeXBlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKICAg
ICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKLSAgICAgICAgICAgIG1ldGFsUmV0
dXJuTmFtZSwgJyAnLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXJOYW1l
LCAiIHgpIHtcbiIKLSAgICAgICAgICAgICIgICAgcmV0dXJuIGF0b21pY19sb2FkX2V4cGxpY2l0
KHgsIG1lbW9yeV9vcmRlcl9yZWxheGVkKTtcbiIKLSAgICAgICAgICAgICJ9XG4iCi0gICAgICAg
ICk7Ci0gICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgICAg
ICByZXR1cm5OYW1lLCAiID0gYXRvbWljX2xvYWRfZXhwbGljaXQoIiwgYXJnc1swXSwgIiwgbWVt
b3J5X29yZGVyX3JlbGF4ZWQpO1xuIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
ZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0gInN0b3JlIikgewogICAgICAg
ICBBU1NFUlQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09
IDIpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+
dHlwZSgpKTsKLSAgICAgICAgYXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1h
bmdsZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClb
MV0tPnR5cGUoKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoInZvaWQg
Iiwgb3V0cHV0RnVuY3Rpb25OYW1lLCAnKCcsIG1ldGFsUGFyYW1ldGVyMU5hbWUsICIgeCwgIiwg
bWV0YWxQYXJhbWV0ZXIyTmFtZSwgIiB5KSB7XG4iCi0gICAgICAgICAgICAiICAgIGF0b21pY19z
dG9yZV9leHBsaWNpdCh4LCB5LCBtZW1vcnlfb3JkZXJfcmVsYXhlZCk7XG4iCi0gICAgICAgICAg
ICAifVxuIik7Ci0gICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisgICAg
ICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoCisgICAgICAgICAgICAiYXRvbWljX3N0
b3JlX2V4cGxpY2l0KCIsIGFyZ3NbMF0sICIsICIsIGFyZ3NbMV0sICIsIG1lbW9yeV9vcmRlcl9y
ZWxheGVkKTtcbiIpOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpID09ICJHZXREaW1lbnNpb25zIikgewogICAgICAgICBh
dXRvJiB0ZXh0dXJlVHlwZSA9IGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihk
b3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4obmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0
ZXJzKClbMF0tPnR5cGUoKS0+dW5pZnlOb2RlKCkpKTsKIAogICAgICAgICBzaXplX3QgaW5kZXgg
PSAxOwotICAgICAgICBpZiAoIXRleHR1cmVUeXBlLmlzV3JpdGFibGVUZXh0dXJlKCkgJiYgdGV4
dHVyZVR5cGUudGV4dHVyZURpbWVuc2lvbigpICE9IDEpCisgICAgICAgIGJvb2wgaGFzTWlwTGV2
ZWwgPSAhdGV4dHVyZVR5cGUuaXNXcml0YWJsZVRleHR1cmUoKSAmJiB0ZXh0dXJlVHlwZS50ZXh0
dXJlRGltZW5zaW9uKCkgIT0gMTsKKyAgICAgICAgaWYgKGhhc01pcExldmVsKQogICAgICAgICAg
ICAgKytpbmRleDsKLSAgICAgICAgYXV0byB3aWR0aFR5cGVOYW1lID0gdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yVHlwZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbaW5k
ZXhdLT50eXBlKCkpOworICAgICAgICBjb25zdCBNYW5nbGVkVmFyaWFibGVOYW1lJiB3aWR0aE5h
bWUgPSBhcmdzW2luZGV4XTsKICAgICAgICAgKytpbmRleDsKLSAgICAgICAgT3B0aW9uYWw8TWFu
Z2xlZFR5cGVOYW1lPiBoZWlnaHRUeXBlTmFtZTsKKyAgICAgICAgT3B0aW9uYWw8TWFuZ2xlZFZh
cmlhYmxlTmFtZT4gaGVpZ2h0TmFtZTsKICAgICAgICAgaWYgKHRleHR1cmVUeXBlLnRleHR1cmVE
aW1lbnNpb24oKSA+PSAyKSB7Ci0gICAgICAgICAgICBoZWlnaHRUeXBlTmFtZSA9IHR5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVy
cygpW2luZGV4XS0+dHlwZSgpKTsKKyAgICAgICAgICAgIGhlaWdodE5hbWUgPSBhcmdzW2luZGV4
XTsKICAgICAgICAgICAgICsraW5kZXg7CiAgICAgICAgIH0KLSAgICAgICAgT3B0aW9uYWw8TWFu
Z2xlZFR5cGVOYW1lPiBkZXB0aFR5cGVOYW1lOworICAgICAgICBPcHRpb25hbDxNYW5nbGVkVmFy
aWFibGVOYW1lPiBkZXB0aE5hbWU7CiAgICAgICAgIGlmICh0ZXh0dXJlVHlwZS50ZXh0dXJlRGlt
ZW5zaW9uKCkgPj0gMykgewotICAgICAgICAgICAgZGVwdGhUeXBlTmFtZSA9IHR5cGVOYW1lci5t
YW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
W2luZGV4XS0+dHlwZSgpKTsKKyAgICAgICAgICAgIGRlcHRoTmFtZSA9IGFyZ3NbaW5kZXhdOwog
ICAgICAgICAgICAgKytpbmRleDsKICAgICAgICAgfQotICAgICAgICBPcHRpb25hbDxNYW5nbGVk
VHlwZU5hbWU+IGVsZW1lbnRzVHlwZU5hbWU7CisgICAgICAgIE9wdGlvbmFsPE1hbmdsZWRWYXJp
YWJsZU5hbWU+IGVsZW1lbnRzTmFtZTsKICAgICAgICAgaWYgKHRleHR1cmVUeXBlLmlzVGV4dHVy
ZUFycmF5KCkpIHsKLSAgICAgICAgICAgIGVsZW1lbnRzVHlwZU5hbWUgPSB0eXBlTmFtZXIubWFu
Z2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVtp
bmRleF0tPnR5cGUoKSk7CisgICAgICAgICAgICBlbGVtZW50c05hbWUgPSBhcmdzW2luZGV4XTsK
ICAgICAgICAgICAgICsraW5kZXg7CiAgICAgICAgIH0KLSAgICAgICAgT3B0aW9uYWw8TWFuZ2xl
ZFR5cGVOYW1lPiBudW1iZXJPZkxldmVsc1R5cGVOYW1lOworICAgICAgICBPcHRpb25hbDxNYW5n
bGVkVmFyaWFibGVOYW1lPiBudW1iZXJPZkxldmVsc05hbWU7CiAgICAgICAgIGlmICghdGV4dHVy
ZVR5cGUuaXNXcml0YWJsZVRleHR1cmUoKSAmJiB0ZXh0dXJlVHlwZS50ZXh0dXJlRGltZW5zaW9u
KCkgIT0gMSkgewotICAgICAgICAgICAgbnVtYmVyT2ZMZXZlbHNUeXBlTmFtZSA9IHR5cGVOYW1l
ci5tYW5nbGVkTmFtZUZvclR5cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVy
cygpW2luZGV4XS0+dHlwZSgpKTsKKyAgICAgICAgICAgIG51bWJlck9mTGV2ZWxzTmFtZSA9IGFy
Z3NbaW5kZXhdOwogICAgICAgICAgICAgKytpbmRleDsKICAgICAgICAgfQogICAgICAgICBBU1NF
UlQoaW5kZXggPT0gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgp
KTsKIAotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xl
ZE5hbWVGb3JUeXBlKHRleHR1cmVUeXBlKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJs
ZUFwcGVuZCgidm9pZCAiLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIx
TmFtZSwgIiB0aGVUZXh0dXJlIik7Ci0gICAgICAgIGlmICghdGV4dHVyZVR5cGUuaXNXcml0YWJs
ZVRleHR1cmUoKSAmJiB0ZXh0dXJlVHlwZS50ZXh0dXJlRGltZW5zaW9uKCkgIT0gMSkKLSAgICAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIsIHVpbnQgbWlwTGV2ZWwiKTsKLSAgICAgICAg
c3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiLCAiLCB3aWR0aFR5cGVOYW1lLCAiIHdpZHRo
Iik7Ci0gICAgICAgIGlmIChoZWlnaHRUeXBlTmFtZSkKLSAgICAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuZmxleGlibGVBcHBlbmQoIiwgIiwgKmhlaWdodFR5cGVOYW1lLCAiIGhlaWdodCIpOwotICAg
ICAgICBpZiAoZGVwdGhUeXBlTmFtZSkKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGli
bGVBcHBlbmQoIiwgIiwgKmRlcHRoVHlwZU5hbWUsICIgZGVwdGgiKTsKLSAgICAgICAgaWYgKGVs
ZW1lbnRzVHlwZU5hbWUpCi0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5k
KCIsICIsICplbGVtZW50c1R5cGVOYW1lLCAiIGVsZW1lbnRzIik7Ci0gICAgICAgIGlmIChudW1i
ZXJPZkxldmVsc1R5cGVOYW1lKQotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFw
cGVuZCgiLCAiLCAqbnVtYmVyT2ZMZXZlbHNUeXBlTmFtZSwgIiBudW1iZXJPZkxldmVscyIpOwot
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgKLSAgICAgICAgICAgICIpIHtcbiIKLSAgICAg
ICAgICAgICIgICAgaWYgKHdpZHRoKVxuIgotICAgICAgICAgICAgIiAgICAgICAgKndpZHRoID0g
dGhlVGV4dHVyZS5nZXRfd2lkdGgoIgotICAgICAgICApOwotICAgICAgICBpZiAoIXRleHR1cmVU
eXBlLmlzV3JpdGFibGVUZXh0dXJlKCkgJiYgdGV4dHVyZVR5cGUudGV4dHVyZURpbWVuc2lvbigp
ICE9IDEpCi0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgibWlwTGV2ZWwiKTsKKyAg
ICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKKyAgICAgICAgICAgICJpZiAoIiwg
d2lkdGhOYW1lLCAiKVxuIgorICAgICAgICAgICAgIiAgICAqIiwgd2lkdGhOYW1lLCAiID0gIiwg
YXJnc1swXSwgIi5nZXRfd2lkdGgoIik7CisKKyAgICAgICAgaWYgKGhhc01pcExldmVsKQorICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZChhcmdzWzFdKTsKICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoIik7XG4iKTsKLSAgICAgICAgaWYgKGhlaWdodFR5cGVOYW1l
KSB7Ci0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAi
ICAgIGlmIChoZWlnaHQpXG4iCi0gICAgICAgICAgICAgICAgIiAgICAgICAgKmhlaWdodCA9IHRo
ZVRleHR1cmUuZ2V0X2hlaWdodCgiCi0gICAgICAgICAgICApOwotICAgICAgICAgICAgaWYgKCF0
ZXh0dXJlVHlwZS5pc1dyaXRhYmxlVGV4dHVyZSgpICYmIHRleHR1cmVUeXBlLnRleHR1cmVEaW1l
bnNpb24oKSAhPSAxKQotICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJtaXBM
ZXZlbCIpOworICAgICAgICBpZiAoaGVpZ2h0TmFtZSkgeworICAgICAgICAgICAgc3RyaW5nQnVp
bGRlci5mbGV4aWJsZUFwcGVuZCgKKyAgICAgICAgICAgICAgICAiICAgIGlmICgiLCAqaGVpZ2h0
TmFtZSwgIilcbiIKKyAgICAgICAgICAgICAgICAiICAgICAgICAqIiwgKmhlaWdodE5hbWUsICIg
PSAiLCBhcmdzWzBdLCAiLmdldF9oZWlnaHQoIik7CisgICAgICAgICAgICBpZiAoaGFzTWlwTGV2
ZWwpCisgICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZChhcmdzWzFd
KTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIpO1xuIik7CiAgICAgICAgIH0K
LSAgICAgICAgaWYgKGRlcHRoVHlwZU5hbWUpIHsKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKAotICAgICAgICAgICAgICAgICIgICAgaWYgKGRlcHRoKVxuIgotICAgICAgICAgICAg
ICAgICIgICAgICAgICpkZXB0aCA9IHRoZVRleHR1cmUuZ2V0X2RlcHRoKCIKLSAgICAgICAgICAg
ICk7Ci0gICAgICAgICAgICBpZiAoIXRleHR1cmVUeXBlLmlzV3JpdGFibGVUZXh0dXJlKCkgJiYg
dGV4dHVyZVR5cGUudGV4dHVyZURpbWVuc2lvbigpICE9IDEpCi0gICAgICAgICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoIm1pcExldmVsIik7CisgICAgICAgIGlmIChkZXB0aE5hbWUpIHsK
KyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoCisgICAgICAgICAgICAg
ICAgIiAgICBpZiAoIiwgKmRlcHRoTmFtZSwgIilcbiIKKyAgICAgICAgICAgICAgICAiICAgICAg
ICAqIiwgKmRlcHRoTmFtZSwgIiA9ICIsIGFyZ3NbMF0sICIuZ2V0X2RlcHRoKCIpOworICAgICAg
ICAgICAgaWYgKGhhc01pcExldmVsKQorICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxl
eGlibGVBcHBlbmQoYXJnc1sxXSk7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgi
KTtcbiIpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChlbGVtZW50c1R5cGVOYW1lKSB7Ci0gICAg
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAiICAgIGlmIChl
bGVtZW50cylcbiIKLSAgICAgICAgICAgICAgICAiICAgICAgICAqZWxlbWVudHMgPSB0aGVUZXh0
dXJlLmdldF9hcnJheV9zaXplKCk7XG4iCi0gICAgICAgICAgICApOwotICAgICAgICB9Ci0gICAg
ICAgIGlmIChudW1iZXJPZkxldmVsc1R5cGVOYW1lKSB7Ci0gICAgICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAiICAgIGlmIChudW1iZXJPZkxldmVscylcbiIK
LSAgICAgICAgICAgICAgICAiICAgICAgICAqbnVtYmVyT2ZMZXZlbHMgPSB0aGVUZXh0dXJlLmdl
dF9udW1fbWlwX2xldmVscygpO1xuIgotICAgICAgICAgICAgKTsKKyAgICAgICAgaWYgKGVsZW1l
bnRzTmFtZSkgeworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKKyAg
ICAgICAgICAgICAgICAiICAgIGlmICgiLCAqZWxlbWVudHNOYW1lLCAiKVxuIgorICAgICAgICAg
ICAgICAgICIgICAgICAgICoiLCAqZWxlbWVudHNOYW1lLCAiID0gIiwgYXJnc1swXSwgIi5nZXRf
YXJyYXlfc2l6ZSgpO1xuIik7CiAgICAgICAgIH0KLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoIn1cbiIpOwotICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygpOworICAg
ICAgICBpZiAobnVtYmVyT2ZMZXZlbHNOYW1lKSB7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVy
LmZsZXhpYmxlQXBwZW5kKAorICAgICAgICAgICAgICAgICIgICAgaWYgKCIsICpudW1iZXJPZkxl
dmVsc05hbWUsICIpXG4iCisgICAgICAgICAgICAgICAgIiAgICAgICAgKiIsICpudW1iZXJPZkxl
dmVsc05hbWUsICIgPSAiLCBhcmdzWzBdLCAiLmdldF9udW1fbWlwX2xldmVscygpO1xuIik7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKSA9PSAiU2FtcGxlQmlhcyIpIHsKQEAgLTc1NCw0NiArNjA3LDQz
IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnUKICAgICAgICAgYXV0
byYgbG9jYXRpb25UeXBlID0gZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KGRv
d25jYXN0PEFTVDo6TmFtZWRUeXBlPihuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRl
cnMoKVsyXS0+dHlwZSgpLT51bmlmeU5vZGUoKSkpOwogICAgICAgICBhdXRvIGxvY2F0aW9uVmVj
dG9yTGVuZ3RoID0gdmVjdG9yTGVuZ3RoKGxvY2F0aW9uVHlwZSk7CiAKLSAgICAgICAgYXV0byBt
ZXRhbFBhcmFtZXRlcjFOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSh0ZXh0dXJl
VHlwZSk7Ci0gICAgICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIyTmFtZSA9IHR5cGVOYW1lci5tYW5n
bGVkTmFtZUZvclR5cGUoaXRlbVR5cGUpOwotICAgICAgICBhdXRvIG1ldGFsUGFyYW1ldGVyM05h
bWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKGxvY2F0aW9uVHlwZSk7CiAgICAgICAg
IGF1dG8gbWV0YWxJbm5lclR5cGVOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShp
dGVtVmVjdG9ySW5uZXJUeXBlKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVu
ZCgidm9pZCAiLCBvdXRwdXRGdW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwg
IiB0aGVUZXh0dXJlLCAiLCBtZXRhbFBhcmFtZXRlcjJOYW1lLCAiIGl0ZW0sICIsIG1ldGFsUGFy
YW1ldGVyM05hbWUsICIgbG9jYXRpb24pIHtcbiIpOworCisgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCJkbyB7XG4iKTsKICAgICAgICAgaWYgKHRleHR1cmVUeXBlLmlzVGV4dHVyZUFycmF5
KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChsb2NhdGlvblZlY3Rvckxlbmd0aCA+IDEpOwogICAg
ICAgICAgICAgU3RyaW5nIGRpbWVuc2lvbnNbXSA9IHsgIndpZHRoIl9zdHIsICJoZWlnaHQiX3N0
ciwgImRlcHRoIl9zdHIgfTsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbG9jYXRp
b25WZWN0b3JMZW5ndGggLSAxOyArK2kpIHsKICAgICAgICAgICAgICAgICBhdXRvIHN1ZmZpeCA9
ICJ4eXp3Il9zdHIuc3Vic3RyaW5nKGksIDEpOwotICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuZmxleGlibGVBcHBlbmQoIiAgICBpZiAobG9jYXRpb24uIiwgc3VmZml4LCAiID49IHRoZVRl
eHR1cmUuZ2V0XyIsIGRpbWVuc2lvbnNbaV0sICIoKSkgcmV0dXJuO1xuIik7CisgICAgICAgICAg
ICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiICAgIGlmICgiLCBhcmdzWzJdLCAi
LiIsIHN1ZmZpeCwgIiA+PSAiLCBhcmdzWzBdLCAiLmdldF8iLCBkaW1lbnNpb25zW2ldLCAiKCkp
IGJyZWFrO1xuIik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBhdXRvIHN1ZmZpeCA9ICJ4
eXp3Il9zdHIuc3Vic3RyaW5nKGxvY2F0aW9uVmVjdG9yTGVuZ3RoIC0gMSwgMSk7Ci0gICAgICAg
ICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIgICAgaWYgKGxvY2F0aW9uLiIsIHN1
ZmZpeCwgIiA+PSB0aGVUZXh0dXJlLmdldF9hcnJheV9zaXplKCkpIHJldHVybjtcbiIpOworICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiICAgIGlmICgiLCBhcmdzWzJd
LCAnLicsIHN1ZmZpeCwgIiA+PSAiLCBhcmdzWzBdLCAiLmdldF9hcnJheV9zaXplKCkpIGJyZWFr
O1xuIik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAobG9jYXRpb25WZWN0b3JM
ZW5ndGggPT0gMSkKLSAgICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiICAgIGlm
IChsb2NhdGlvbiA+PSB0aGVUZXh0dXJlLmdldF93aWR0aCgpKSByZXR1cm47XG4iKTsKKyAgICAg
ICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIgICAgaWYgKCIsIGFyZ3Nb
Ml0sICIgPj0gIiwgYXJnc1swXSwgIi5nZXRfd2lkdGgoKSkgYnJlYWs7XG4iKTsKICAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKAotICAgICAg
ICAgICAgICAgICAgICAiICAgIGlmIChsb2NhdGlvbi54ID49IHRoZVRleHR1cmUuZ2V0X3dpZHRo
KCkpIHJldHVybjtcbiIKLSAgICAgICAgICAgICAgICAgICAgIiAgICBpZiAobG9jYXRpb24ueSA+
PSB0aGVUZXh0dXJlLmdldF9oZWlnaHQoKSkgcmV0dXJuO1xuIgotICAgICAgICAgICAgICAgICk7
CisgICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKKyAgICAgICAg
ICAgICAgICAgICAgIiAgICBpZiAoIiwgYXJnc1syXSwgIi54ID49ICIsIGFyZ3NbMF0sICIuZ2V0
X3dpZHRoKCkpIGJyZWFrO1xuIgorICAgICAgICAgICAgICAgICAgICAiICAgIGlmICgiLCBhcmdz
WzJdLCAiLnkgPj0gIiwgYXJnc1swXSwgIi5nZXRfaGVpZ2h0KCkpIGJyZWFrO1xuIik7CiAgICAg
ICAgICAgICAgICAgaWYgKGxvY2F0aW9uVmVjdG9yTGVuZ3RoID49IDMpCi0gICAgICAgICAgICAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCIgICAgaWYgKGxvY2F0aW9uLnogPj0gdGhlVGV4
dHVyZS5nZXRfZGVwdGgoKSkgcmV0dXJuO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuZmxleGlibGVBcHBlbmQoIiAgICBpZiAoIiwgYXJnc1syXSwgIi56ID49ICIsIGFy
Z3NbMF0sICIuZ2V0X2RlcHRoKCkpIGJyZWFrO1xuIik7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgiICAgIHRoZVRleHR1cmUu
d3JpdGUodmVjPCIsIG1ldGFsSW5uZXJUeXBlTmFtZSwgIiwgND4oaXRlbSIpOworICAgICAgICBz
dHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCIgICAgIiwgYXJnc1swXSwgIi53cml0ZSh2ZWM8
IiwgbWV0YWxJbm5lclR5cGVOYW1lLCAiLCA0PigiLCBhcmdzWzFdKTsKICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCA0IC0gaXRlbVZlY3Rvckxlbmd0aDsgKytpKQogICAgICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoIiwgMCIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgi
KSwgIik7CiAgICAgICAgIGlmICh0ZXh0dXJlVHlwZS5pc1RleHR1cmVBcnJheSgpKSB7CiAgICAg
ICAgICAgICBBU1NFUlQobG9jYXRpb25WZWN0b3JMZW5ndGggPiAxKTsKLSAgICAgICAgICAgIHN0
cmluZ0J1aWxkZXIuZmxleGlibGVBcHBlbmQoInVpbnQiLCB2ZWN0b3JTdWZmaXgobG9jYXRpb25W
ZWN0b3JMZW5ndGggLSAxKSwgIihsb2NhdGlvbi4iLCAieHl6dyJfc3RyLnN1YnN0cmluZygwLCBs
b2NhdGlvblZlY3Rvckxlbmd0aCAtIDEpLCAiKSwgdWludChsb2NhdGlvbi4iLCAieHl6dyJfc3Ry
LnN1YnN0cmluZyhsb2NhdGlvblZlY3Rvckxlbmd0aCAtIDEsIDEpLCAnKScpOworICAgICAgICAg
ICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgidWludCIsIHZlY3RvclN1ZmZpeChsb2Nh
dGlvblZlY3Rvckxlbmd0aCAtIDEpLCAnKCcsIGFyZ3NbMl0sICcuJywgInh5enciX3N0ci5zdWJz
dHJpbmcoMCwgbG9jYXRpb25WZWN0b3JMZW5ndGggLSAxKSwgIiksIHVpbnQoIiwgYXJnc1syXSwg
Ii4iLCAieHl6dyJfc3RyLnN1YnN0cmluZyhsb2NhdGlvblZlY3Rvckxlbmd0aCAtIDEsIDEpLCAn
KScpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuZmxleGlibGVB
cHBlbmQoInVpbnQiLCB2ZWN0b3JTdWZmaXgobG9jYXRpb25WZWN0b3JMZW5ndGgpLCAiKGxvY2F0
aW9uKSIpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgidWludCIs
IHZlY3RvclN1ZmZpeChsb2NhdGlvblZlY3Rvckxlbmd0aCksICcoJywgYXJnc1syXSwgJyknKTsK
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoCiAgICAgICAgICAgICAiKTtcbiIKLSAgICAg
ICAgICAgICJ9XG4iCi0gICAgICAgICk7Ci0gICAgICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLnRv
U3RyaW5nKCk7CisgICAgICAgICAgICAifSB3aGlsZSgwKTtcbiIpOworCisgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkgPT0g
IkdhdGhlckFscGhhIikgewpAQCAtODIyLDcgKzY3Miw2IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1
bmN0aW9uKEFTVDo6TmF0aXZlRnUKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIE1ldGFsCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0
aW9uV3JpdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVGdW5jdGlvbldyaXRlci5oCShyZXZpc2lvbiAyNDgyNzEp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2
ZUZ1bmN0aW9uV3JpdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgbmFtZXNw
YWNlIE1ldGFsIHsKIAogY2xhc3MgVHlwZU5hbWVyOwogCi1TdHJpbmcgd3JpdGVOYXRpdmVGdW5j
dGlvbihBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mLCBNYW5nbGVkRnVuY3Rpb25OYW1l
IG91dHB1dEZ1bmN0aW9uTmFtZSwgSW50cmluc2ljcyYsIFR5cGVOYW1lciYpOwordm9pZCBpbmxp
bmVOYXRpdmVGdW5jdGlvbihTdHJpbmdCdWlsZGVyJiwgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uJiwgTWFuZ2xlZFZhcmlhYmxlTmFtZSByZXR1cm5OYW1lLCBjb25zdCBWZWN0b3I8TWFu
Z2xlZFZhcmlhYmxlTmFtZT4mIGFyZ3VtZW50TmFtZXMsIEludHJpbnNpY3MmLCBUeXBlTmFtZXIm
KTsKIAogfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>