<?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>74994</bug_id>
          
          <creation_ts>2011-12-20 22:46:38 -0800</creation_ts>
          <short_desc>Add a unittest for the Perl parser of prepare-ChangeLog</short_desc>
          <delta_ts>2011-12-22 05:37:39 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>74992</dependson>
          <blocked>73531</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kentaro Hara">haraken</reporter>
          <assigned_to name="Kentaro Hara">haraken</assigned_to>
          <cc>darin</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>525112</commentid>
    <comment_count>0</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-12-20 22:46:38 -0800</bug_when>
    <thetext>We can add unittests for the parsers of prepare-ChangeLog. In this bug, we add a unittest for the Perl parser, i.e. get_function_line_ranges_for_perl() in prepare-ChangeLog.

If this unittest looks good, I&apos;ll add unittests for C, Java, JavaScript and CSS in upcoming patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525118</commentid>
    <comment_count>1</comment_count>
      <attachid>120147</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-12-20 22:59:43 -0800</bug_when>
    <thetext>Created attachment 120147
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525139</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-21 00:05:13 -0800</bug_when>
    <thetext>Can we split this into few pieces? It&apos;s hard to review such a large patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525141</commentid>
    <comment_count>3</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-12-21 00:08:25 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Can we split this into few pieces? It&apos;s hard to review such a large patch.

Thanks for the review. But as commented, actually this patch is just 30 lines (get_function_line_ranges_for_perl.pl). CodeGeneratorJS.pm is just copied from WebCore/bindings/scripts/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525145</commentid>
    <comment_count>4</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-12-21 00:10:14 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; Can we split this into few pieces? It&apos;s hard to review such a large patch.
&gt; 
&gt; Thanks for the review. But as commented, actually this patch is just 30 lines (get_function_line_ranges_for_perl.pl). CodeGeneratorJS.pm is just copied from WebCore/bindings/scripts/.

Ah, do you mean we should start from a more smaller unittest?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525148</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-21 00:12:02 -0800</bug_when>
    <thetext>Ah now I see what you&apos;re doing. Thanks for the clarification.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525149</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-21 00:12:43 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Ah now I see what you&apos;re doing. Thanks for the clarification.

Starting from a smaller unit test will be nice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525152</commentid>
    <comment_count>7</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-12-21 00:15:10 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; Ah now I see what you&apos;re doing. Thanks for the clarification.
&gt; 
&gt; Starting from a smaller unit test will be nice.

Sure, the patch is coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525170</commentid>
    <comment_count>8</comment_count>
      <attachid>120158</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-12-21 00:48:38 -0800</bug_when>
    <thetext>Created attachment 120158
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525180</commentid>
    <comment_count>9</comment_count>
      <attachid>120158</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-21 01:14:59 -0800</bug_when>
    <thetext>Comment on attachment 120158
Patch

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

&gt; Tools/Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl:56
&gt; +    if ($resetResults) {
&gt; +        open FH, &quot;&gt; $expectedFile&quot; or die &quot;Cannot open $expectedFile: $!&quot;;
&gt; +        print FH Data::Dumper-&gt;new([\@actualOutput])-&gt;Terse(1)-&gt;Indent(1)-&gt;Dump();
&gt; +        close FH;
&gt; +        next;
&gt; +    }

Do we really want to support resetting the results? If anything, we should be adding some unit-test framework feature that allows us to do this. Otherwise, we&apos;ll end up duplicating this code in other unit tests, no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525188</commentid>
    <comment_count>10</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-12-21 01:31:14 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 120158 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=120158&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl:56
&gt; &gt; +    if ($resetResults) {
&gt; &gt; +        open FH, &quot;&gt; $expectedFile&quot; or die &quot;Cannot open $expectedFile: $!&quot;;
&gt; &gt; +        print FH Data::Dumper-&gt;new([\@actualOutput])-&gt;Terse(1)-&gt;Indent(1)-&gt;Dump();
&gt; &gt; +        close FH;
&gt; &gt; +        next;
&gt; &gt; +    }
&gt; 
&gt; Do we really want to support resetting the results? If anything, we should be adding some unit-test framework feature that allows us to do this. Otherwise, we&apos;ll end up duplicating this code in other unit tests, no?

- As for prepare-ChangeLog unittests, there should be some way to reset results when we add a new unittest. Manually copying the test results to *-expected.txt is cumbersome and error-prone. So we should somehow support --reset-results.

- However, supporting --reset-results in ./Tools/Scripts/test-webkitperl is not a good idea. This is because in other existing unittests (VCSUtils_unittest and run-leaks_unittest), expected results are directly written in their Perl scripts, and thus they cannot support the --reset-results option.

In summary, --reset-results is a specific option to unittests for the prepare-ChangeLog parser. With this observation, I guess that supporting --reset-results in parser_unittests.pl would be a modest solution.

&gt; we&apos;ll end up duplicating this code in other unit tests, no?

I think that parser_unittests.pl can (or should) handle all unittests for the parser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525465</commentid>
    <comment_count>11</comment_count>
      <attachid>120158</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2011-12-21 12:26:33 -0800</bug_when>
    <thetext>Comment on attachment 120158
Patch

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

r=me, but consider the comments.  Thanks!

&gt; Tools/Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl:34
&gt; +my @testFiles = (&quot;perl_unittests.pl&quot;);

Could use qw(perl_unittests.pl) here so you don&apos;t have to use as many double quotes and commas later.

If you create a naming convention for tests (much like you did for expected results), this script could simply read the files that match the naming convention without even listing them here.

(Both of these are suggestions that don&apos;t block the review.)

&gt; Tools/Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl:37
&gt; +my @expectedFiles = map { File::Spec-&gt;catdir($FindBin::Bin, &quot;resources&quot;, $_ . &quot;-expected.txt&quot;) } @testFiles;

Instead of naming the expected results &quot;perl_unittests.pl-expected.txt&quot;, it would be a little nicer to strip off the file extension from the original name:

use File::Basename;
my $fileName = fileparse($_, qw(.pl));
# or without a temp variable:

my @expectedFiles = map { File::Spec-&gt;catdir($FindBin::Bin, &quot;resources&quot;, scalar(fileparse($_, qw(.pl))) . &quot;-expected.txt&quot;) } @testFiles;

(Maybe that&apos;s too hard to read in one line, though.)

&gt; Tools/Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl:43
&gt; +plan(tests =&gt; scalar @testFiles);
&gt; +for (my $index = 0; $index &lt; @testFiles; $index++) {

You could pull &quot;scalar @testFiles&quot; out into a $testCount variable to make this read a little better:

my $testCount = scalar @testFiles;
plan(tests =&gt; $testCount);
for (my $index = 0; $index &lt; $testCount; $index++) {

&gt;&gt;&gt; Tools/Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl:56
&gt;&gt;&gt; +    }
&gt;&gt; 
&gt;&gt; Do we really want to support resetting the results? If anything, we should be adding some unit-test framework feature that allows us to do this. Otherwise, we&apos;ll end up duplicating this code in other unit tests, no?
&gt; 
&gt; - As for prepare-ChangeLog unittests, there should be some way to reset results when we add a new unittest. Manually copying the test results to *-expected.txt is cumbersome and error-prone. So we should somehow support --reset-results.
&gt; 
&gt; - However, supporting --reset-results in ./Tools/Scripts/test-webkitperl is not a good idea. This is because in other existing unittests (VCSUtils_unittest and run-leaks_unittest), expected results are directly written in their Perl scripts, and thus they cannot support the --reset-results option.
&gt; 
&gt; In summary, --reset-results is a specific option to unittests for the prepare-ChangeLog parser. With this observation, I guess that supporting --reset-results in parser_unittests.pl would be a modest solution.

I think --reset-results on this script is fine for now.  We can always revisit this decision later.

&gt; Tools/Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl:63
&gt; +    is_deeply(\@actualOutput, $expectedOutput, &quot;Tests get_function_line_ranges_for_perl() using CodeGenerator.pm&quot;);

This comment needs to be updated so it&apos;s more generic.  I suggest using the $inputFile name, for example:

is_deeply(\@actualOutput, $expectedOutput, &quot;Tests $inputFile&quot;);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525796</commentid>
    <comment_count>12</comment_count>
      <attachid>120235</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-12-21 16:21:33 -0800</bug_when>
    <thetext>Created attachment 120235
patch for commit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525799</commentid>
    <comment_count>13</comment_count>
      <attachid>120158</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2011-12-21 16:22:02 -0800</bug_when>
    <thetext>Comment on attachment 120158
Patch

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

&gt;&gt; Tools/Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl:34
&gt;&gt; +my @testFiles = (&quot;perl_unittests.pl&quot;);
&gt; 
&gt; Could use qw(perl_unittests.pl) here so you don&apos;t have to use as many double quotes and commas later.
&gt; 
&gt; If you create a naming convention for tests (much like you did for expected results), this script could simply read the files that match the naming convention without even listing them here.
&gt; 
&gt; (Both of these are suggestions that don&apos;t block the review.)

&gt; Could use qw(perl_unittests.pl) here so you don&apos;t have to use as many double quotes and commas later.

Done.

&gt; If you create a naming convention for tests (much like you did for expected results), this script could simply read the files that match the naming convention without even listing them here.

Hmm... the idea is OK but I would prefer explicitly describing the list of unittests here, to make it clear what you are testing. For now, I leave it as it is.

&gt;&gt; Tools/Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl:37
&gt;&gt; +my @expectedFiles = map { File::Spec-&gt;catdir($FindBin::Bin, &quot;resources&quot;, $_ . &quot;-expected.txt&quot;) } @testFiles;
&gt; 
&gt; Instead of naming the expected results &quot;perl_unittests.pl-expected.txt&quot;, it would be a little nicer to strip off the file extension from the original name:
&gt; 
&gt; use File::Basename;
&gt; my $fileName = fileparse($_, qw(.pl));
&gt; # or without a temp variable:
&gt; 
&gt; my @expectedFiles = map { File::Spec-&gt;catdir($FindBin::Bin, &quot;resources&quot;, scalar(fileparse($_, qw(.pl))) . &quot;-expected.txt&quot;) } @testFiles;
&gt; 
&gt; (Maybe that&apos;s too hard to read in one line, though.)

Done. But instead of fileparse, I used s/^(.*)\.[^\.]*$/$1/, in order to prevent people who will add a new test from adding the test extension here.

&gt;&gt; Tools/Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl:43
&gt;&gt; +for (my $index = 0; $index &lt; @testFiles; $index++) {
&gt; 
&gt; You could pull &quot;scalar @testFiles&quot; out into a $testCount variable to make this read a little better:
&gt; 
&gt; my $testCount = scalar @testFiles;
&gt; plan(tests =&gt; $testCount);
&gt; for (my $index = 0; $index &lt; $testCount; $index++) {

Done.

&gt;&gt;&gt;&gt; Tools/Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl:56
&gt;&gt;&gt;&gt; +    }
&gt;&gt;&gt; 
&gt;&gt;&gt; Do we really want to support resetting the results? If anything, we should be adding some unit-test framework feature that allows us to do this. Otherwise, we&apos;ll end up duplicating this code in other unit tests, no?
&gt;&gt; 
&gt;&gt; - As for prepare-ChangeLog unittests, there should be some way to reset results when we add a new unittest. Manually copying the test results to *-expected.txt is cumbersome and error-prone. So we should somehow support --reset-results.
&gt;&gt; 
&gt;&gt; - However, supporting --reset-results in ./Tools/Scripts/test-webkitperl is not a good idea. This is because in other existing unittests (VCSUtils_unittest and run-leaks_unittest), expected results are directly written in their Perl scripts, and thus they cannot support the --reset-results option.
&gt;&gt; 
&gt;&gt; In summary, --reset-results is a specific option to unittests for the prepare-ChangeLog parser. With this observation, I guess that supporting --reset-results in parser_unittests.pl would be a modest solution.
&gt; 
&gt; I think --reset-results on this script is fine for now.  We can always revisit this decision later.

Agreed.

&gt;&gt; Tools/Scripts/webkitperl/prepare-ChangeLog_unittest/parser_unittests.pl:63
&gt;&gt; +    is_deeply(\@actualOutput, $expectedOutput, &quot;Tests get_function_line_ranges_for_perl() using CodeGenerator.pm&quot;);
&gt; 
&gt; This comment needs to be updated so it&apos;s more generic.  I suggest using the $inputFile name, for example:
&gt; 
&gt; is_deeply(\@actualOutput, $expectedOutput, &quot;Tests $inputFile&quot;);

Done. Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526134</commentid>
    <comment_count>14</comment_count>
      <attachid>120235</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-22 02:55:40 -0800</bug_when>
    <thetext>Comment on attachment 120235
patch for commit

Clearing flags on attachment: 120235

Committed r103515: &lt;http://trac.webkit.org/changeset/103515&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120147</attachid>
            <date>2011-12-20 22:59:43 -0800</date>
            <delta_ts>2011-12-21 00:48:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74994-20111221155930.patch</filename>
            <type>text/plain</type>
            <size>196591</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMzY2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZWFlNTY4YTRmMWYzZmIxZjFkZWIxZjJmYmU2NDgyY2Q2
MjM3Mjc3Yi4uMWZkZGI0OGFiZWVmNTE5MzA4ZjA2ZDBiZjc0Zjg4NGQ3NDVkMWQzNyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3
IEBACisyMDExLTEyLTIwICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBBZGQgYSB1bml0dGVzdCBmb3IgdGhlIFBlcmwgcGFyc2VyIG9mIHByZXBhcmUtQ2hh
bmdlTG9nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
NDk5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggYWRkcyBhIHVuaXR0ZXN0IGZvciBnZXRfZnVuY3Rpb25fbGluZV9yYW5nZXNfZm9y
X3BlcmwoKSBvZiBwcmVwYXJlLUNoYW5nZUxvZy4KKworICAgICAgICBUZXN0OiBTY3JpcHRzL3dl
YmtpdHBlcmwvcHJlcGFyZS1DaGFuZ2VMb2dfdW5pdHRlc3QvZ2V0X2Z1bmN0aW9uX2xpbmVfcmFu
Z2VzX2Zvcl9wZXJsLnBsCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHBlcmwvcHJlcGFyZS1D
aGFuZ2VMb2dfdW5pdHRlc3QvZ2V0X2Z1bmN0aW9uX2xpbmVfcmFuZ2VzX2Zvcl9wZXJsLnBsOiBB
ZGRlZC4KKyAgICAgICAgWW91IGNhbiByZXNldCB0aGUgZXhwZWN0ZWQgcmVzdWx0IGJ5IHNwZWNp
ZnlpbmcgYSAtLXJlc2V0LXJlc3VsdHMgb3B0aW9uLgorCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRwZXJsL3ByZXBhcmUtQ2hhbmdlTG9nX3VuaXR0ZXN0L3Jlc291cmNlcy9Db2RlR2VuZXJhdG9y
SlMucG06IEFkZGVkLgorICAgICAgICBDb3BpZWQgZnJvbSBXZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtLgorICAgICAgICAobmV3KToKKyAgICAgICAgKGZpbmlzaCk6
CisgICAgICAgICgpOgorICAgICAgICAoR2VuZXJhdGVJbnRlcmZhY2UpOgorICAgICAgICAoR2Vu
ZXJhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyQ2FsbCk6CisgICAgICAgIChHZW5lcmF0ZUV2ZW50
TGlzdGVuZXJDYWxsKToKKyAgICAgICAgKEdlbmVyYXRlTW9kdWxlKToKKyAgICAgICAgKEdldFBh
cmVudENsYXNzTmFtZSk6CisgICAgICAgIChHZXRWaXNpYmxlQ2xhc3NOYW1lKToKKyAgICAgICAg
KEdldENhbGxiYWNrQ2xhc3NOYW1lKToKKyAgICAgICAgKEluZGV4R2V0dGVyUmV0dXJuc1N0cmlu
Z3MpOgorICAgICAgICAoQWRkSW5jbHVkZXNGb3JUeXBlSW5JbXBsKToKKyAgICAgICAgKEFkZElu
Y2x1ZGVzRm9yVHlwZUluSGVhZGVyKToKKyAgICAgICAgKEFkZEluY2x1ZGVzRm9yVHlwZSk6Cisg
ICAgICAgIChBZGRJbmNsdWRlc0ZvclNWR0FuaW1hdGVkVHlwZSk6CisgICAgICAgIChBZGRUb0lt
cGxJbmNsdWRlcyk6CisgICAgICAgIChJc1NjcmlwdFByb2ZpbGVUeXBlKToKKyAgICAgICAgKElz
VHlwZWRBcnJheVR5cGUpOgorICAgICAgICAoQWRkVHlwZWRlZkZvclNjcmlwdFByb2ZpbGVUeXBl
KToKKyAgICAgICAgKEFkZENsYXNzRm9yd2FyZElmTmVlZGVkKToKKyAgICAgICAgKEhhc2hWYWx1
ZUZvckNsYXNzQW5kTmFtZSk6CisgICAgICAgIChoYXNoVGFibGVBY2Nlc3Nvcik6CisgICAgICAg
IChwcm90b3R5cGVIYXNoVGFibGVBY2Nlc3Nvcik6CisgICAgICAgIChHZW5lcmF0ZUNvbmRpdGlv
bmFsU3RyaW5nKToKKyAgICAgICAgKEdlbmVyYXRlR2V0T3duUHJvcGVydHlTbG90Qm9keSk6Cisg
ICAgICAgIChHZW5lcmF0ZUdldE93blByb3BlcnR5RGVzY3JpcHRvckJvZHkpOgorICAgICAgICAo
R2VuZXJhdGVIZWFkZXJDb250ZW50SGVhZGVyKToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50
YXRpb25Db250ZW50SGVhZGVyKToKKyAgICAgICAgKEdldEZ1bmN0aW9uTmFtZSk6CisgICAgICAg
IChHZW5lcmF0ZUhlYWRlcik6CisgICAgICAgIChHZW5lcmF0ZUF0dHJpYnV0ZXNIYXNoVGFibGUp
OgorICAgICAgICAoR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2tFeHByZXNzaW9uKToKKyAgICAgICAg
KEdlbmVyYXRlRnVuY3Rpb25QYXJhbWV0ZXJzQ2hlY2spOgorICAgICAgICAoR2VuZXJhdGVPdmVy
bG9hZGVkRnVuY3Rpb24pOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisgICAg
ICAgIChHZW5lcmF0ZUFyZ3VtZW50c0NvdW50Q2hlY2spOgorICAgICAgICAoR2VuZXJhdGVQYXJh
bWV0ZXJzQ2hlY2spOgorICAgICAgICAoR2VuZXJhdGVDYWxsYmFja0hlYWRlcik6CisgICAgICAg
IChHZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJhdGVJbXBs
ZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChHZXROYXRpdmVUeXBlRnJvbVNpZ25h
dHVyZSk6CisgICAgICAgIChHZXROYXRpdmVUeXBlKToKKyAgICAgICAgKEdldFNWR1Byb3BlcnR5
VHlwZXMpOgorICAgICAgICAoSXNOYXRpdmVUeXBlKToKKyAgICAgICAgKElzQXJyYXlUeXBlKToK
KyAgICAgICAgKEpTVmFsdWVUb05hdGl2ZSk6CisgICAgICAgIChOYXRpdmVUb0pTVmFsdWUpOgor
ICAgICAgICAoY2VpbGluZ1RvUG93ZXJPZjIpOgorICAgICAgICAoR2VuZXJhdGVIYXNoVGFibGUp
OgorICAgICAgICAoR2VuZXJhdGVIYXNoVmFsdWUpOgorICAgICAgICAoV3JpdGVEYXRhKToKKyAg
ICAgICAgKEdlbmVyYXRlQ29uc3RydWN0b3JEZWNsYXJhdGlvbik6CisgICAgICAgIChHZW5lcmF0
ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbik6CisgICAgICAgIChJc0NvbnN0cnVjdGFibGUpOgorICAg
ICAgICAoSXNDb25zdHJ1Y3RvclRlbXBsYXRlKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHBl
cmwvcHJlcGFyZS1DaGFuZ2VMb2dfdW5pdHRlc3QvcmVzb3VyY2VzL0NvZGVHZW5lcmF0b3JKUy5w
bS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICBUaGlzIHRlc3QgcmVzdWx0IGlzIGdlbmVy
YXRlZCBieSB0aGUgLS1yZXNldC1yZXN1bHRzIG9wdGlvbi4KKwogMjAxMS0xMi0yMCAgRGlyayBQ
cmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4KIAogICAgICAgICBucnd0OiByZW5hbWUgZmll
bGQgcmVmZXJlbmNlcyBmcm9tIF9mcyB0byBfZmlsZXN5c3RlbQpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRwZXJsL3ByZXBhcmUtQ2hhbmdlTG9nX3VuaXR0ZXN0L2dldF9mdW5jdGlv
bl9saW5lX3Jhbmdlc19mb3JfcGVybC5wbCBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9wcmVw
YXJlLUNoYW5nZUxvZ191bml0dGVzdC9nZXRfZnVuY3Rpb25fbGluZV9yYW5nZXNfZm9yX3Blcmwu
cGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZGRiNWZmYzAyZmUwYmIyMWE2MTgwYjY0YmIzNDAxYzViMjZiZGY4YQot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9wcmVwYXJlLUNoYW5n
ZUxvZ191bml0dGVzdC9nZXRfZnVuY3Rpb25fbGluZV9yYW5nZXNfZm9yX3BlcmwucGwKQEAgLTAs
MCArMSw1NyBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisjCisjIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIyBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyMgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorIworIyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyMgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisjIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFRlc3RzIGdldF9mdW5jdGlvbl9saW5lX3Jhbmdlc19mb3JfcGVybCgpIG9m
IHByZXBhcmUtQ2hhbmdlTG9nCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBE
YXRhOjpEdW1wZXI7Cit1c2UgRmlsZTo6U3BlYzsKK3VzZSBGaW5kQmluOwordXNlIEdldG9wdDo6
TG9uZzsKK3VzZSBUZXN0OjpNb3JlOwordXNlIGxpYiBGaWxlOjpTcGVjLT5jYXRkaXIoJEZpbmRC
aW46OkJpbiwgIi4uIik7Cit1c2UgTG9hZEFzTW9kdWxlIHF3KFByZXBhcmVDaGFuZ2VMb2cgcHJl
cGFyZS1DaGFuZ2VMb2cpOworCitteSAkaW5wdXRGaWxlID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKCRG
aW5kQmluOjpCaW4sICJyZXNvdXJjZXMiLCAiQ29kZUdlbmVyYXRvckpTLnBtIik7CitteSAkZXhw
ZWN0ZWRGaWxlID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKCRGaW5kQmluOjpCaW4sICJyZXNvdXJjZXMi
LCAiQ29kZUdlbmVyYXRvckpTLnBtLWV4cGVjdGVkLnR4dCIpOworCitteSAkcmVzZXRSZXN1bHRz
OworR2V0T3B0aW9ucygncmVzZXQtcmVzdWx0cycgPT4gXCRyZXNldFJlc3VsdHMpOworCitvcGVu
IEZILCAiPCAkaW5wdXRGaWxlIiBvciBkaWUgIkNhbm5vdCBvcGVuICRpbnB1dEZpbGU6ICQhIjsK
K215IEBhY3R1YWxPdXRwdXQgPSBQcmVwYXJlQ2hhbmdlTG9nOjpnZXRfZnVuY3Rpb25fbGluZV9y
YW5nZXNfZm9yX3BlcmwoXCpGSCwgJGlucHV0RmlsZSk7CitjbG9zZSBGSDsKKworaWYgKCRyZXNl
dFJlc3VsdHMpIHsKKyAgICBvcGVuIEZILCAiPiAkZXhwZWN0ZWRGaWxlIiBvciBkaWUgIkNhbm5v
dCBvcGVuICRleHBlY3RlZEZpbGU6ICQhIjsKKyAgICBwcmludCBGSCBEYXRhOjpEdW1wZXItPm5l
dyhbXEBhY3R1YWxPdXRwdXRdKS0+VGVyc2UoMSktPkluZGVudCgxKS0+RHVtcCgpOworICAgIGNs
b3NlIEZIOworICAgIGV4aXQgMDsKK30KKworb3BlbiBGSCwgIjwgJGV4cGVjdGVkRmlsZSIgb3Ig
ZGllICJDYW5ub3Qgb3BlbiAkZXhwZWN0ZWRGaWxlOiAkISI7Citsb2NhbCAkLyA9IHVuZGVmOwor
bXkgJGV4cGVjdGVkT3V0cHV0ID0gZXZhbCA8Rkg+OworY2xvc2UgRkg7CisKK3BsYW4odGVzdHMg
PT4gMSk7Citpc19kZWVwbHkoXEBhY3R1YWxPdXRwdXQsICRleHBlY3RlZE91dHB1dCwgIlRlc3Rz
IGdldF9mdW5jdGlvbl9saW5lX3Jhbmdlc19mb3JfcGVybCgpIHVzaW5nIENvZGVHZW5lcmF0b3Iu
cG0iKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9wcmVwYXJlLUNoYW5n
ZUxvZ191bml0dGVzdC9yZXNvdXJjZXMvQ29kZUdlbmVyYXRvckpTLnBtIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRwZXJsL3ByZXBhcmUtQ2hhbmdlTG9nX3VuaXR0ZXN0L3Jlc291cmNlcy9Db2RlR2Vu
ZXJhdG9ySlMucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTY5NjIzZTJjNjE1NWQyMzQ2YzFjMzE1Y2M4MDMwZTQx
YzViNTBmOAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9wcmVw
YXJlLUNoYW5nZUxvZ191bml0dGVzdC9yZXNvdXJjZXMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC0w
LDAgKzEsMzYyMyBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisjIENvcHlyaWdodCAoQykg
MjAwNiBBbmRlcnMgQ2FybHNzb24gPGFuZGVyc2NhQG1hYy5jb20+CisjIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9yZz4KKyMgQ29weXJpZ2h0IChD
KSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQHdlYmtpdC5vcmc+CisjIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAwOSBDYW1lcm9uIE1jQ29ybWFjayA8Y2FtQG1jYy5p
ZC5hdT4KKyMgQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisjIENvcHlyaWdodCAoQykgMjAxMSBQYXRy
aWNrIEdhbnN0ZXJlciA8cGFyb2dhQHdlYmtpdC5vcmc+CisjCisjIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyMgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisjIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisjIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorCitwYWNrYWdlIENvZGVHZW5lcmF0b3JKUzsKKwordXNlIHN0cmljdDsKKwor
bXkgKCRjb2RlR2VuZXJhdG9yLCAkSU1QTCwgJEhFQURFUiwgJERFUFMpOworCitteSAkbW9kdWxl
ID0gIiI7CitteSAkb3V0cHV0RGlyID0gIiI7CitteSAkd3JpdGVEZXBlbmRlbmNpZXMgPSAwOwor
CitteSBAaGVhZGVyQ29udGVudEhlYWRlciA9ICgpOworbXkgQGhlYWRlckNvbnRlbnQgPSAoKTsK
K215ICVoZWFkZXJJbmNsdWRlcyA9ICgpOworbXkgJWhlYWRlclRyYWlsaW5nSW5jbHVkZXMgPSAo
KTsKKworbXkgQGltcGxDb250ZW50SGVhZGVyID0gKCk7CitteSBAaW1wbENvbnRlbnQgPSAoKTsK
K215ICVpbXBsSW5jbHVkZXMgPSAoKTsKK215IEBkZXBzQ29udGVudCA9ICgpOworbXkgJG51bUNh
Y2hlZEF0dHJpYnV0ZXMgPSAwOworbXkgJGN1cnJlbnRDYWNoZWRBdHRyaWJ1dGUgPSAwOworCisj
IERlZmF1bHQgLmggdGVtcGxhdGUKK215ICRoZWFkZXJUZW1wbGF0ZSA9IDw8ICJFT0YiOworLyoK
KyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisqLworRU9GCisKKyMgRGVmYXVsdCBjb25zdHJ1Y3Rvcgorc3ViIG5l
dworeworICAgIG15ICRvYmplY3QgPSBzaGlmdDsKKyAgICBteSAkcmVmZXJlbmNlID0geyB9Owor
CisgICAgJGNvZGVHZW5lcmF0b3IgPSBzaGlmdDsKKyAgICAkb3V0cHV0RGlyID0gc2hpZnQ7Cisg
ICAgc2hpZnQ7ICMgJG91dHB1dEhlYWRlcnNEaXIKKyAgICBzaGlmdDsgIyAkdXNlTGF5ZXJPblRv
cAorICAgIHNoaWZ0OyAjICRwcmVwcm9jZXNzb3IKKyAgICAkd3JpdGVEZXBlbmRlbmNpZXMgPSBz
aGlmdDsKKworICAgIGJsZXNzKCRyZWZlcmVuY2UsICRvYmplY3QpOworICAgIHJldHVybiAkcmVm
ZXJlbmNlOworfQorCitzdWIgZmluaXNoCit7CisgICAgbXkgJG9iamVjdCA9IHNoaWZ0OworCisg
ICAgIyBDb21taXQgY2hhbmdlcyEKKyAgICAkb2JqZWN0LT5Xcml0ZURhdGEoKTsKK30KKworc3Vi
IGxlZnRTaGlmdCgkJCkgeworICAgIG15ICgkdmFsdWUsICRkaXN0YW5jZSkgPSBAXzsKKyAgICBy
ZXR1cm4gKCgkdmFsdWUgPDwgJGRpc3RhbmNlKSAmIDB4RkZGRkZGRkYpOworfQorCisjIFBhcmFt
czogJ2RvbUNsYXNzJyBzdHJ1Y3QKK3N1YiBHZW5lcmF0ZUludGVyZmFjZQoreworICAgIG15ICRv
YmplY3QgPSBzaGlmdDsKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKyAgICBteSAkZGVmaW5l
cyA9IHNoaWZ0OworCisgICAgJGNvZGVHZW5lcmF0b3ItPkxpbmtPdmVybG9hZGVkRnVuY3Rpb25z
KCRkYXRhTm9kZSk7CisKKyAgICAjIFN0YXJ0IGFjdHVhbCBnZW5lcmF0aW9uCisgICAgaWYgKCRk
YXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxiYWNrIn0pIHsKKyAgICAgICAgJG9i
amVjdC0+R2VuZXJhdGVDYWxsYmFja0hlYWRlcigkZGF0YU5vZGUpOworICAgICAgICAkb2JqZWN0
LT5HZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRpb24oJGRhdGFOb2RlKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICAkb2JqZWN0LT5HZW5lcmF0ZUhlYWRlcigkZGF0YU5vZGUpOworICAgICAgICAk
b2JqZWN0LT5HZW5lcmF0ZUltcGxlbWVudGF0aW9uKCRkYXRhTm9kZSk7CisgICAgfQorCisgICAg
bXkgJG5hbWUgPSAkZGF0YU5vZGUtPm5hbWU7CisKKyAgICAjIE9wZW4gZmlsZXMgZm9yIHdyaXRp
bmcKKyAgICBteSAkaGVhZGVyRmlsZU5hbWUgPSAiJG91dHB1dERpci9KUyRuYW1lLmgiOworICAg
IG15ICRpbXBsRmlsZU5hbWUgPSAiJG91dHB1dERpci9KUyRuYW1lLmNwcCI7CisgICAgbXkgJGRl
cHNGaWxlTmFtZSA9ICIkb3V0cHV0RGlyL0pTJG5hbWUuZGVwIjsKKworICAgICMgUmVtb3ZlIG9s
ZCBkZXBlbmRlbmN5IGZpbGUuCisgICAgdW5saW5rKCRkZXBzRmlsZU5hbWUpOworCisgICAgb3Bl
bigkSU1QTCwgIj4kaW1wbEZpbGVOYW1lIikgfHwgZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJGlt
cGxGaWxlTmFtZSI7CisgICAgb3BlbigkSEVBREVSLCAiPiRoZWFkZXJGaWxlTmFtZSIpIHx8IGRp
ZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRoZWFkZXJGaWxlTmFtZSI7CisgICAgaWYgKEBkZXBzQ29u
dGVudCkgeworICAgICAgICBvcGVuKCRERVBTLCAiPiRkZXBzRmlsZU5hbWUiKSB8fCBkaWUgIkNv
dWxkbid0IG9wZW4gZmlsZSAkZGVwc0ZpbGVOYW1lIjsKKyAgICB9Cit9CisKK3N1YiBHZW5lcmF0
ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXJDYWxsCit7CisgICAgbXkgJGNsYXNzTmFtZSA9IHNoaWZ0
OworICAgIG15ICRpbXBsU2V0dGVyRnVuY3Rpb25OYW1lID0gc2hpZnQ7CisgICAgbXkgJHdpbmRv
d0V2ZW50TGlzdGVuZXIgPSBzaGlmdDsKKworICAgIG15ICR3cmFwcGVyT2JqZWN0ID0gJHdpbmRv
d0V2ZW50TGlzdGVuZXIgPyAiZ2xvYmFsT2JqZWN0IiA6ICJ0aGlzT2JqZWN0IjsKKyAgICBteSBA
R2VuZXJhdGVFdmVudExpc3RlbmVySW1wbCA9ICgpOworCisgICAgaWYgKCRjbGFzc05hbWUgZXEg
IkpTU1ZHRWxlbWVudEluc3RhbmNlIikgeworICAgICAgICAjIFNWR0VsZW1lbnRJbnN0YW5jZXMg
aGF2ZSB0byBjcmVhdGUgSlNFdmVudExpc3RlbmVycyB3aXRoIHRoZSB3cmFwcGVyIGVxdWFsIHRv
IHRoZSBjb3JyZXNwb25kaW5nRWxlbWVudAorICAgICAgICAkd3JhcHBlck9iamVjdCA9ICJhc09i
amVjdChjb3JyZXNwb25kaW5nRWxlbWVudFdyYXBwZXIpIjsKKworICAgICAgICBwdXNoKEBHZW5l
cmF0ZUV2ZW50TGlzdGVuZXJJbXBsLCA8PEVORCk7CisgICAgSlNWYWx1ZSBjb3JyZXNwb25kaW5n
RWxlbWVudFdyYXBwZXIgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBp
bXBsLT5jb3JyZXNwb25kaW5nRWxlbWVudCgpKTsKKyAgICBpZiAoY29ycmVzcG9uZGluZ0VsZW1l
bnRXcmFwcGVyLmlzT2JqZWN0KCkpCitFTkQKKworICAgICAgICAjIEFkZCBsZWFkaW5nIHdoaXRl
c3BhY2UgdG8gZm9ybWF0IHRoZSBpbXBsLT5zZXQuLi4gbGluZSBjb3JyZWN0bHkKKyAgICAgICAg
cHVzaChAR2VuZXJhdGVFdmVudExpc3RlbmVySW1wbCwgIiAgICAiKTsKKyAgICB9CisKKyAgICBw
dXNoKEBHZW5lcmF0ZUV2ZW50TGlzdGVuZXJJbXBsLCAiICAgIGltcGwtPnNldCRpbXBsU2V0dGVy
RnVuY3Rpb25OYW1lKGNyZWF0ZUpTQXR0cmlidXRlRXZlbnRMaXN0ZW5lcihleGVjLCB2YWx1ZSwg
JHdyYXBwZXJPYmplY3QpKTtcbiIpOworICAgIHJldHVybiBAR2VuZXJhdGVFdmVudExpc3RlbmVy
SW1wbDsKK30KKworc3ViIEdlbmVyYXRlRXZlbnRMaXN0ZW5lckNhbGwKK3sKKyAgICBteSAkY2xh
c3NOYW1lID0gc2hpZnQ7CisgICAgbXkgJGZ1bmN0aW9uTmFtZSA9IHNoaWZ0OworICAgIG15ICRw
YXNzUmVmUHRySGFuZGxpbmcgPSAoJGZ1bmN0aW9uTmFtZSBlcSAiYWRkIikgPyAiIiA6ICIuZ2V0
KCkiOworCisgICAgJGltcGxJbmNsdWRlc3siSlNFdmVudExpc3RlbmVyLmgifSA9IDE7CisKKyAg
ICBteSBAR2VuZXJhdGVFdmVudExpc3RlbmVySW1wbCA9ICgpOworICAgIG15ICR3cmFwcGVyT2Jq
ZWN0ID0gImNhc3RlZFRoaXMiOworICAgIGlmICgkY2xhc3NOYW1lIGVxICJKU1NWR0VsZW1lbnRJ
bnN0YW5jZSIpIHsKKyAgICAgICAgIyBTVkdFbGVtZW50SW5zdGFuY2VzIGhhdmUgdG8gY3JlYXRl
IEpTRXZlbnRMaXN0ZW5lcnMgd2l0aCB0aGUgd3JhcHBlciBlcXVhbCB0byB0aGUgY29ycmVzcG9u
ZGluZ0VsZW1lbnQKKyAgICAgICAgJHdyYXBwZXJPYmplY3QgPSAiYXNPYmplY3QoY29ycmVzcG9u
ZGluZ0VsZW1lbnRXcmFwcGVyKSI7CisKKyAgICAgICAgcHVzaChAR2VuZXJhdGVFdmVudExpc3Rl
bmVySW1wbCwgPDxFTkQpOworICAgIEpTVmFsdWUgY29ycmVzcG9uZGluZ0VsZW1lbnRXcmFwcGVy
ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC0+Y29ycmVzcG9u
ZGluZ0VsZW1lbnQoKSk7CisgICAgaWYgKCFjb3JyZXNwb25kaW5nRWxlbWVudFdyYXBwZXIuaXNP
YmplY3QoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
K0VORAorICAgIH0KKworICAgIHB1c2goQEdlbmVyYXRlRXZlbnRMaXN0ZW5lckltcGwsIDw8RU5E
KTsKKyAgICBKU1ZhbHVlIGxpc3RlbmVyID0gZXhlYy0+YXJndW1lbnQoMSk7CisgICAgaWYgKCFs
aXN0ZW5lci5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgIGltcGwtPiR7ZnVuY3Rpb25OYW1lfUV2ZW50TGlzdGVuZXIodXN0cmlu
Z1RvQXRvbWljU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSwgSlNFdmVu
dExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCAkd3JhcHBlck9iamVjdCwgZmFs
c2UsIGN1cnJlbnRXb3JsZChleGVjKSkkcGFzc1JlZlB0ckhhbmRsaW5nLCBleGVjLT5hcmd1bWVu
dCgyKS50b0Jvb2xlYW4oZXhlYykpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CitFTkQKKyAgICByZXR1cm4gQEdlbmVyYXRlRXZlbnRMaXN0ZW5lckltcGw7Cit9
CisKKyMgUGFyYW1zOiAnaWRsRG9jdW1lbnQnIHN0cnVjdAorc3ViIEdlbmVyYXRlTW9kdWxlCit7
CisgICAgbXkgJG9iamVjdCA9IHNoaWZ0OworICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OworCisg
ICAgJG1vZHVsZSA9ICRkYXRhTm9kZS0+bW9kdWxlOworfQorCitzdWIgR2V0UGFyZW50Q2xhc3NO
YW1lCit7CisgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CisKKyAgICByZXR1cm4gJGRhdGFOb2Rl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTGVnYWN5UGFyZW50In0gaWYgJGRhdGFOb2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiTGVnYWN5UGFyZW50In07CisgICAgcmV0dXJuICJKU0RPTVdyYXBw
ZXIiIGlmIChAeyRkYXRhTm9kZS0+cGFyZW50c30gZXEgMCk7CisgICAgcmV0dXJuICJKUyIgLiAk
Y29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoJGRhdGFOb2RlLT5wYXJlbnRzKDApKTsKK30KKwor
c3ViIEdldFZpc2libGVDbGFzc05hbWUKK3sKKyAgICBteSAkY2xhc3NOYW1lID0gc2hpZnQ7CisK
KyAgICByZXR1cm4gIkRPTUV4Y2VwdGlvbiIgaWYgJGNsYXNzTmFtZSBlcSAiRE9NQ29yZUV4Y2Vw
dGlvbiI7CisgICAgcmV0dXJuICJGb3JtRGF0YSIgaWYgJGNsYXNzTmFtZSBlcSAiRE9NRm9ybURh
dGEiOworICAgIHJldHVybiAiTWltZVR5cGUiIGlmICRjbGFzc05hbWUgZXEgIkRPTU1pbWVUeXBl
IjsKKyAgICByZXR1cm4gIk1pbWVUeXBlQXJyYXkiIGlmICRjbGFzc05hbWUgZXEgIkRPTU1pbWVU
eXBlQXJyYXkiOworICAgIHJldHVybiAiUGx1Z2luIiBpZiAkY2xhc3NOYW1lIGVxICJET01QbHVn
aW4iOworICAgIHJldHVybiAiUGx1Z2luQXJyYXkiIGlmICRjbGFzc05hbWUgZXEgIkRPTVBsdWdp
bkFycmF5IjsKKyAgICAKKyAgICByZXR1cm4gJGNsYXNzTmFtZTsKK30KKworc3ViIEdldENhbGxi
YWNrQ2xhc3NOYW1lCit7CisgICAgbXkgJGNsYXNzTmFtZSA9IHNoaWZ0OworCisgICAgcmV0dXJu
ICJKU0N1c3RvbVZvaWRDYWxsYmFjayIgaWYgJGNsYXNzTmFtZSBlcSAiVm9pZENhbGxiYWNrIjsK
KyAgICByZXR1cm4gIkpTJGNsYXNzTmFtZSI7Cit9CisKK3N1YiBJbmRleEdldHRlclJldHVybnNT
dHJpbmdzCit7CisgICAgbXkgJHR5cGUgPSBzaGlmdDsKKworICAgIHJldHVybiAxIGlmICR0eXBl
IGVxICJDU1NTdHlsZURlY2xhcmF0aW9uIiBvciAkdHlwZSBlcSAiTWVkaWFMaXN0IiBvciAkdHlw
ZSBlcSAiRE9NU3RyaW5nTGlzdCIgb3IgJHR5cGUgZXEgIkRPTVRva2VuTGlzdCIgb3IgJHR5cGUg
ZXEgIkRPTVNldHRhYmxlVG9rZW5MaXN0IjsKKyAgICByZXR1cm4gMDsKK30KKworc3ViIEFkZElu
Y2x1ZGVzRm9yVHlwZUluSW1wbAoreworICAgIG15ICR0eXBlID0gJGNvZGVHZW5lcmF0b3ItPlN0
cmlwTW9kdWxlKHNoaWZ0KTsKKyAgICBteSAkaXNDYWxsYmFjayA9IEBfID8gc2hpZnQgOiAwOwor
ICAgIAorICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkdHlwZSwgJGlzQ2FsbGJhY2ssIFwlaW1wbElu
Y2x1ZGVzKTsKKyAgICAKKyAgICAjIGFkZGl0aW9uYWwgaW5jbHVkZXMgKHRoaW5ncyBuZWVkZWQg
dG8gY29tcGlsZSB0aGUgYmluZGluZ3MgYnV0IG5vdCB0aGUgaGVhZGVyKQorICAgIGlmICgkdHlw
ZSBlcSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIikgeworICAgICAgICAkaW1wbEluY2x1ZGVz
eyJDYW52YXNHcmFkaWVudC5oIn0gPSAxOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJDYW52YXNQ
YXR0ZXJuLmgifSA9IDE7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IkNhbnZhc1N0eWxlLmgifSA9
IDE7CisgICAgfQorCisgICAgaWYgKCR0eXBlIGVxICJDYW52YXNHcmFkaWVudCIgb3IgJHR5cGUg
ZXEgIlhQYXRoTlNSZXNvbHZlciIgb3IgJHR5cGUgZXEgIk1lc3NhZ2VQb3J0IikgeworICAgICAg
ICAkaW1wbEluY2x1ZGVzeyJQbGF0Zm9ybVN0cmluZy5oIn0gPSAxOworICAgIH0KKworICAgIGlm
ICgkdHlwZSBlcSAiRG9jdW1lbnQiKSB7CisgICAgICAgICRpbXBsSW5jbHVkZXN7Ik5vZGVGaWx0
ZXIuaCJ9ID0gMTsKKyAgICB9CisKKyAgICBpZiAoJHR5cGUgZXEgIk1lZGlhUXVlcnlMaXN0TGlz
dGVuZXIiKSB7CisgICAgICAgICRpbXBsSW5jbHVkZXN7Ik1lZGlhUXVlcnlMaXN0TGlzdGVuZXIu
aCJ9ID0gMTsKKyAgICB9Cit9CisKK3N1YiBBZGRJbmNsdWRlc0ZvclR5cGVJbkhlYWRlcgorewor
ICAgIG15ICR0eXBlID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKHNoaWZ0KTsKKyAgICBt
eSAkaXNDYWxsYmFjayA9IEBfID8gc2hpZnQgOiAwOworICAgIAorICAgIEFkZEluY2x1ZGVzRm9y
VHlwZSgkdHlwZSwgJGlzQ2FsbGJhY2ssIFwlaGVhZGVySW5jbHVkZXMpOworfQorCitzdWIgQWRk
SW5jbHVkZXNGb3JUeXBlCit7CisgICAgbXkgJHR5cGUgPSBzaGlmdDsKKyAgICBteSAkaXNDYWxs
YmFjayA9IHNoaWZ0OworICAgIG15ICRpbmNsdWRlc1JlZiA9IHNoaWZ0OworCisgICAgIyBXaGVu
IHdlJ3JlIGZpbmlzaGVkIHdpdGggdGhlIG9uZS1maWxlLXBlci1jbGFzcworICAgICMgcmVvcmdh
bml6YXRpb24sIHdlIHdvbid0IG5lZWQgdGhlc2Ugc3BlY2lhbCBjYXNlcy4KKyAgICBpZiAoJGNv
ZGVHZW5lcmF0b3ItPklzUHJpbWl0aXZlVHlwZSgkdHlwZSkgb3IgJGNvZGVHZW5lcmF0b3ItPkF2
b2lkSW5jbHVzaW9uT2ZUeXBlKCR0eXBlKQorICAgICAgICBvciAkdHlwZSBlcSAiRE9NU3RyaW5n
IiBvciAkdHlwZSBlcSAiRE9NT2JqZWN0IiBvciAkdHlwZSBlcSAiQXJyYXkiIG9yICR0eXBlIGVx
ICJET01UaW1lU3RhbXAiKSB7CisgICAgfSBlbHNpZiAoJHR5cGUgPX4gL1NWR1BhdGhTZWcvKSB7
CisgICAgICAgIG15ICRqb2luZWROYW1lID0gJHR5cGU7CisgICAgICAgICRqb2luZWROYW1lID1+
IHMvQWJzfFJlbC8vOworICAgICAgICAkaW5jbHVkZXNSZWYtPnsiJHtqb2luZWROYW1lfS5oIn0g
PSAxOworICAgIH0gZWxzaWYgKCR0eXBlIGVxICJYUGF0aE5TUmVzb2x2ZXIiKSB7CisgICAgICAg
ICRpbmNsdWRlc1JlZi0+eyJKU1hQYXRoTlNSZXNvbHZlci5oIn0gPSAxOworICAgICAgICAkaW5j
bHVkZXNSZWYtPnsiSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaCJ9ID0gMTsKKyAgICB9IGVsc2lm
ICgkdHlwZSBlcSAiRE9NU3RyaW5nW10iKSB7CisgICAgICAgICMgRklYTUU6IEFkZCBwcm9wZXIg
c3VwcG9ydCBmb3IgVFtdLCBUW10/LCBzZXF1ZW5jZTxUPgorICAgICAgICAkaW5jbHVkZXNSZWYt
PnsiSlNET01TdHJpbmdMaXN0LmgifSA9IDE7CisgICAgfSBlbHNpZiAoJGlzQ2FsbGJhY2spIHsK
KyAgICAgICAgJGluY2x1ZGVzUmVmLT57IkpTJHt0eXBlfS5oIn0gPSAxOworICAgIH0gZWxzaWYg
KElzVHlwZWRBcnJheVR5cGUoJHR5cGUpKSB7CisgICAgICAgICRpbmNsdWRlc1JlZi0+eyI8d3Rm
LyR7dHlwZX0uaD4ifSA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgIyBkZWZhdWx0LCBpbmNs
dWRlIHRoZSBzYW1lIG5hbWVkIGZpbGUKKyAgICAgICAgJGluY2x1ZGVzUmVmLT57IiR7dHlwZX0u
aCJ9ID0gMTsKKyAgICB9Cit9CisKKyMgRklYTUU6IFRoaXMgbWV0aG9kIHdpbGwgZ28gYXdheSBv
bmNlIGFsbCBTVkcgYW5pbWF0ZWQgcHJvcGVydGllcyBhcmUgY29udmVydGVkIHRvIHRoZSBuZXcg
c2NoZW1lLgorc3ViIEFkZEluY2x1ZGVzRm9yU1ZHQW5pbWF0ZWRUeXBlCit7CisgICAgbXkgJHR5
cGUgPSBzaGlmdDsKKyAgICAkdHlwZSA9fiBzL1NWR0FuaW1hdGVkLy87CisKKyAgICBpZiAoJHR5
cGUgZXEgIlBvaW50IiBvciAkdHlwZSBlcSAiUmVjdCIpIHsKKyAgICAgICAgJGltcGxJbmNsdWRl
c3siRmxvYXQkdHlwZS5oIn0gPSAxOworICAgIH0gZWxzaWYgKCR0eXBlIGVxICJTdHJpbmciKSB7
CisgICAgICAgICRpbXBsSW5jbHVkZXN7IlBsYXRmb3JtU3RyaW5nLmgifSA9IDE7CisgICAgfQor
fQorCitzdWIgQWRkVG9JbXBsSW5jbHVkZXMKK3sKKyAgICBteSAkaGVhZGVyID0gc2hpZnQ7Cisg
ICAgbXkgJGNvbmRpdGlvbmFsID0gc2hpZnQ7CisKKyAgICBpZiAobm90ICRjb25kaXRpb25hbCkg
eworICAgICAgICAkaW1wbEluY2x1ZGVzeyRoZWFkZXJ9ID0gMTsKKyAgICB9IGVsc2lmIChub3Qg
ZXhpc3RzKCRpbXBsSW5jbHVkZXN7JGhlYWRlcn0pKSB7CisgICAgICAgICRpbXBsSW5jbHVkZXN7
JGhlYWRlcn0gPSAkY29uZGl0aW9uYWw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbXkgJG9sZFZh
bHVlID0gJGltcGxJbmNsdWRlc3skaGVhZGVyfTsKKyAgICAgICAgaWYgKCRvbGRWYWx1ZSBuZSAx
KSB7CisgICAgICAgICAgICBteSAlbmV3VmFsdWUgPSAoKTsKKyAgICAgICAgICAgICRuZXdWYWx1
ZXskY29uZGl0aW9uYWx9ID0gMTsKKyAgICAgICAgICAgIGZvcmVhY2ggbXkgJGNvbmRpdGlvbiAo
c3BsaXQoL1x8LywgJG9sZFZhbHVlKSkgeworICAgICAgICAgICAgICAgICRuZXdWYWx1ZXskY29u
ZGl0aW9ufSA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyRo
ZWFkZXJ9ID0gam9pbigifCIsIHNvcnQga2V5cyAlbmV3VmFsdWUpOworICAgICAgICB9CisgICAg
fQorfQorCitzdWIgSXNTY3JpcHRQcm9maWxlVHlwZQoreworICAgIG15ICR0eXBlID0gc2hpZnQ7
CisgICAgcmV0dXJuIDEgaWYgKCR0eXBlIGVxICJTY3JpcHRQcm9maWxlTm9kZSIpOworICAgIHJl
dHVybiAwOworfQorCitzdWIgSXNUeXBlZEFycmF5VHlwZQoreworICAgIG15ICR0eXBlID0gc2hp
ZnQ7CisgICAgcmV0dXJuIDEgaWYgKCgkdHlwZSBlcSAiQXJyYXlCdWZmZXIiKSBvciAoJHR5cGUg
ZXEgIkFycmF5QnVmZmVyVmlldyIpKTsKKyAgICByZXR1cm4gMSBpZiAoKCR0eXBlIGVxICJVaW50
OEFycmF5Iikgb3IgKCR0eXBlIGVxICJVaW50MTZBcnJheSIpIG9yICgkdHlwZSBlcSAiVWludDMy
QXJyYXkiKSk7CisgICAgcmV0dXJuIDEgaWYgKCgkdHlwZSBlcSAiSW50OEFycmF5Iikgb3IgKCR0
eXBlIGVxICJJbnQxNkFycmF5Iikgb3IgKCR0eXBlIGVxICJJbnQzMkFycmF5IikpOworICAgIHJl
dHVybiAxIGlmICgoJHR5cGUgZXEgIkZsb2F0MzJBcnJheSIpIG9yICgkdHlwZSBlcSAiRmxvYXQ2
NEFycmF5IikpOworICAgIHJldHVybiAwOworfQorCitzdWIgQWRkVHlwZWRlZkZvclNjcmlwdFBy
b2ZpbGVUeXBlCit7CisgICAgbXkgJHR5cGUgPSBzaGlmdDsKKyAgICAobXkgJGpzY1R5cGUgPSAk
dHlwZSkgPX4gcy9TY3JpcHQvLzsKKworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ0eXBlZGVm
IEpTQzo6JGpzY1R5cGUgJHR5cGU7XG5cbiIpOworfQorCitzdWIgQWRkQ2xhc3NGb3J3YXJkSWZO
ZWVkZWQKK3sKKyAgICBteSAkaW1wbENsYXNzTmFtZSA9IHNoaWZ0OworCisgICAgIyBTVkdBbmlt
YXRlZExlbmd0aC9OdW1iZXIvZXRjLiBhcmUgdHlwZWRlZnMgdG8gU1ZHQW5pbWF0ZWRUZW1wbGF0
ZSwgc28gZG9uJ3QgdXNlIGNsYXNzIGZvcndhcmRzIGZvciB0aGVtIQorICAgIHVubGVzcyAoJGNv
ZGVHZW5lcmF0b3ItPklzU1ZHQW5pbWF0ZWRUeXBlKCRpbXBsQ2xhc3NOYW1lKSBvciBJc1Njcmlw
dFByb2ZpbGVUeXBlKCRpbXBsQ2xhc3NOYW1lKSBvciBJc1R5cGVkQXJyYXlUeXBlKCRpbXBsQ2xh
c3NOYW1lKSkgeworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiY2xhc3MgJGltcGxDbGFz
c05hbWU7XG5cbiIpOworICAgICMgU2NyaXB0UHJvZmlsZSBhbmQgU2NyaXB0UHJvZmlsZU5vZGUg
YXJlIHR5cGVkZWZzIHRvIEpTQzo6UHJvZmlsZSBhbmQgSlNDOjpQcm9maWxlTm9kZS4KKyAgICB9
IGVsc2lmIChJc1NjcmlwdFByb2ZpbGVUeXBlKCRpbXBsQ2xhc3NOYW1lKSkgeworICAgICAgICAk
aGVhZGVySW5jbHVkZXN7Ijxwcm9maWxlci9Qcm9maWxlTm9kZS5oPiJ9ID0gMTsKKyAgICAgICAg
QWRkVHlwZWRlZkZvclNjcmlwdFByb2ZpbGVUeXBlKCRpbXBsQ2xhc3NOYW1lKTsKKyAgICB9Cit9
CisKK3N1YiBIYXNoVmFsdWVGb3JDbGFzc0FuZE5hbWUKK3sKKyAgICBteSAkY2xhc3MgPSBzaGlm
dDsKKyAgICBteSAkbmFtZSA9IHNoaWZ0OworCisgICAgIyBTVkcgRmlsdGVyIGVudW1zIGxpdmUg
aW4gV2ViQ29yZSBuYW1lc3BhY2UgKHBsYXRmb3JtL2dyYXBoaWNzLykKKyAgICBpZiAoJGNsYXNz
ID1+IC9eU1ZHRkUqLyBvciAkY2xhc3MgPX4gL15TVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
RWxlbWVudCQvKSB7CisgICAgICAgIHJldHVybiAiV2ViQ29yZTo6JG5hbWUiOworICAgIH0KKwor
ICAgIHJldHVybiAiJHtjbGFzc306OiRuYW1lIjsKK30KKworc3ViIGhhc2hUYWJsZUFjY2Vzc29y
Cit7CisgICAgbXkgJG5vU3RhdGljVGFibGVzID0gc2hpZnQ7CisgICAgbXkgJGNsYXNzTmFtZSA9
IHNoaWZ0OworICAgIGlmICgkbm9TdGF0aWNUYWJsZXMpIHsKKyAgICAgICAgcmV0dXJuICJnZXQk
e2NsYXNzTmFtZX1UYWJsZShleGVjKSI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuICIm
JHtjbGFzc05hbWV9VGFibGUiOworICAgIH0KK30KKworc3ViIHByb3RvdHlwZUhhc2hUYWJsZUFj
Y2Vzc29yCit7CisgICAgbXkgJG5vU3RhdGljVGFibGVzID0gc2hpZnQ7CisgICAgbXkgJGNsYXNz
TmFtZSA9IHNoaWZ0OworICAgIGlmICgkbm9TdGF0aWNUYWJsZXMpIHsKKyAgICAgICAgcmV0dXJu
ICJnZXQke2NsYXNzTmFtZX1Qcm90b3R5cGVUYWJsZShleGVjKSI7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgcmV0dXJuICImJHtjbGFzc05hbWV9UHJvdG90eXBlVGFibGUiOworICAgIH0KK30KKwor
c3ViIEdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcKK3sKKyAgICBteSAkbm9kZSA9IHNoaWZ0Owor
ICAgIG15ICRjb25kaXRpb25hbCA9ICRub2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uZGl0
aW9uYWwifTsKKyAgICBpZiAoJGNvbmRpdGlvbmFsKSB7CisgICAgICAgIHJldHVybiAkY29kZUdl
bmVyYXRvci0+R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZ0Zyb21BdHRyaWJ1dGVWYWx1ZSgkY29u
ZGl0aW9uYWwpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9Cit9CisK
K3N1YiBHZW5lcmF0ZUdldE93blByb3BlcnR5U2xvdEJvZHkKK3sKKyAgICBteSAoJGRhdGFOb2Rl
LCAkaW50ZXJmYWNlTmFtZSwgJGNsYXNzTmFtZSwgJGltcGxDbGFzc05hbWUsICRoYXNBdHRyaWJ1
dGVzLCAkaW5saW5lZCkgPSBAXzsKKworICAgIG15ICRuYW1lc3BhY2VNYXliZSA9ICgkaW5saW5l
ZCA/ICJKU0M6OiIgOiAiIik7CisKKyAgICBteSBAZ2V0T3duUHJvcGVydHlTbG90SW1wbCA9ICgp
OworCisgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJOYW1lZE5vZGVNYXAiIG9yICRpbnRlcmZh
Y2VOYW1lIGVxICJIVE1MQ29sbGVjdGlvbiIgb3IgJGludGVyZmFjZU5hbWUgZXEgIkhUTUxBbGxD
b2xsZWN0aW9uIikgeworICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAg
ICR7bmFtZXNwYWNlTWF5YmV9SlNWYWx1ZSBwcm90byA9IHRoaXNPYmplY3QtPnByb3RvdHlwZSgp
O1xuIik7CisgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgaWYgKHBy
b3RvLmlzT2JqZWN0KCkgJiYgc3RhdGljX2Nhc3Q8JHtuYW1lc3BhY2VNYXliZX1KU09iamVjdCo+
KGFzT2JqZWN0KHByb3RvKSktPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpXG4iKTsK
KyAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICAgICAgcmV0dXJuIGZh
bHNlO1xuXG4iKTsKKyAgICB9CisKKyAgICBteSAkbWFudWFsTG9va3VwR2V0dGVyR2VuZXJhdGlv
biA9IHN1YiB7CisgICAgICAgIG15ICRyZXF1aXJlc01hbnVhbExvb2t1cCA9ICRkYXRhTm9kZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc0luZGV4R2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiSGFzTmFtZUdldHRlciJ9OworICAgICAgICBpZiAoJHJlcXVpcmVz
TWFudWFsTG9va3VwKSB7CisgICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBs
LCAiICAgIGNvbnN0ICR7bmFtZXNwYWNlTWF5YmV9SGFzaEVudHJ5KiBlbnRyeSA9ICR7Y2xhc3NO
YW1lfVRhYmxlLmVudHJ5KGV4ZWMsIHByb3BlcnR5TmFtZSk7XG4iKTsKKyAgICAgICAgICAgIHB1
c2goQGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgaWYgKGVudHJ5KSB7XG4iKTsKKyAgICAg
ICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgICAgIHNsb3Quc2V0Q3Vz
dG9tKHRoaXNPYmplY3QsIGVudHJ5LT5wcm9wZXJ0eUdldHRlcigpKTtcbiIpOworICAgICAgICAg
ICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICAgICAgcmV0dXJuIHRydWU7XG4i
KTsKKyAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgfVxuIik7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgaWYgKCEkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJIYXNPdmVycmlkaW5nTmFtZUdldHRlciJ9KSB7CisgICAgICAgICYkbWFudWFsTG9v
a3VwR2V0dGVyR2VuZXJhdGlvbigpOworICAgIH0KKworICAgIGlmICgkZGF0YU5vZGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJIYXNJbmRleEdldHRlciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57Ikhhc0N1c3RvbUluZGV4R2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiSGFzTnVtZXJpY0luZGV4R2V0dGVyIn0pIHsKKyAgICAgICAgcHVzaChA
Z2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICBib29sIG9rO1xuIik7CisgICAgICAgIHB1c2go
QGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5h
bWUudG9VSW50MzIob2spO1xuIik7CisKKyAgICAgICAgIyBJZiB0aGUgaXRlbSBmdW5jdGlvbiBy
ZXR1cm5zIGEgc3RyaW5nIHRoZW4gd2UgbGV0IHRoZSBDb252ZXJ0TnVsbFN0cmluZ1RvIGhhbmRs
ZSB0aGUgY2FzZXMKKyAgICAgICAgIyB3aGVyZSB0aGUgaW5kZXggaXMgb3V0IG9mIHJhbmdlLgor
ICAgICAgICBpZiAoSW5kZXhHZXR0ZXJSZXR1cm5zU3RyaW5ncygkaW1wbENsYXNzTmFtZSkpIHsK
KyAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgaWYgKG9rKSB7
XG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5
U2xvdEltcGwsICIgICAgaWYgKG9rICYmIGluZGV4IDwgc3RhdGljX2Nhc3Q8JGltcGxDbGFzc05h
bWUqPih0aGlzT2JqZWN0LT5pbXBsKCkpLT5sZW5ndGgoKSkge1xuIik7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc0N1c3RvbUluZGV4
R2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzTnVtZXJpY0lu
ZGV4R2V0dGVyIn0pIHsKKyAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGws
ICIgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdC0+Z2V0QnlJbmRleChleGVjLCBpbmRl
eCkpO1xuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9w
ZXJ0eVNsb3RJbXBsLCAiICAgICAgICBzbG90LnNldEN1c3RvbUluZGV4KHRoaXNPYmplY3QsIGlu
ZGV4LCBpbmRleEdldHRlcik7XG4iKTsKKyAgICAgICAgfQorICAgICAgICBwdXNoKEBnZXRPd25Q
cm9wZXJ0eVNsb3RJbXBsLCAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOworICAgICAgICBwdXNo
KEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgIH1cbiIpOworICAgIH0KKworICAgIGlmICgk
ZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNOYW1lR2V0dGVyIn0gfHwgJGRhdGFO
b2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzT3ZlcnJpZGluZ05hbWVHZXR0ZXIifSkgewor
ICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsLCAiICAgIGlmIChjYW5HZXRJdGVt
c0Zvck5hbWUoZXhlYywgc3RhdGljX2Nhc3Q8JGltcGxDbGFzc05hbWUqPih0aGlzT2JqZWN0LT5p
bXBsKCkpLCBwcm9wZXJ0eU5hbWUpKSB7XG4iKTsKKyAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVy
dHlTbG90SW1wbCwgIiAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVj
dC0+bmFtZUdldHRlcik7XG4iKTsKKyAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1w
bCwgIiAgICAgICAgcmV0dXJuIHRydWU7XG4iKTsKKyAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVy
dHlTbG90SW1wbCwgIiAgICB9XG4iKTsKKyAgICAgICAgaWYgKCRpbmxpbmVkKSB7CisgICAgICAg
ICAgICAkaGVhZGVySW5jbHVkZXN7Ind0Zi90ZXh0L0F0b21pY1N0cmluZy5oIn0gPSAxOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgJGltcGxJbmNsdWRlc3sid3RmL3RleHQvQXRvbWlj
U3RyaW5nLmgifSA9IDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoJGRhdGFOb2RlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzT3ZlcnJpZGluZ05hbWVHZXR0ZXIifSkgeworICAgICAg
ICAmJG1hbnVhbExvb2t1cEdldHRlckdlbmVyYXRpb24oKTsKKyAgICB9CisKKyAgICBpZiAoJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRGVsZWdhdGluZ0dldE93blByb3BlcnR5U2xv
dCJ9KSB7CisgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgaWYgKHRo
aXNPYmplY3QtPmdldE93blByb3BlcnR5U2xvdERlbGVnYXRlKGV4ZWMsIHByb3BlcnR5TmFtZSwg
c2xvdCkpXG4iKTsKKyAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICAg
ICAgcmV0dXJuIHRydWU7XG4iKTsKKyAgICB9CisKKyAgICBpZiAoJGhhc0F0dHJpYnV0ZXMpIHsK
KyAgICAgICAgaWYgKCRpbmxpbmVkKSB7CisgICAgICAgICAgICBkaWUgIkNhbm5vdCBpbmxpbmUg
aWYgTm9TdGF0aWNUYWJsZXMgaXMgc2V0LiIgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57Ik5vU3RhdGljVGFibGVzIn0pOworICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVy
dHlTbG90SW1wbCwgIiAgICByZXR1cm4gJHtuYW1lc3BhY2VNYXliZX1nZXRTdGF0aWNWYWx1ZVNs
b3Q8JGNsYXNzTmFtZSwgQmFzZT4oZXhlYywgc19pbmZvLnN0YXRpY1Byb3BIYXNoVGFibGUsIHRo
aXNPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7XG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgcmV0dXJuICR7bmFt
ZXNwYWNlTWF5YmV9Z2V0U3RhdGljVmFsdWVTbG90PCRjbGFzc05hbWUsIEJhc2U+KGV4ZWMsICIg
LiBoYXNoVGFibGVBY2Nlc3NvcigkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOb1N0
YXRpY1RhYmxlcyJ9LCAkY2xhc3NOYW1lKSAuICIsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwg
c2xvdCk7XG4iKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHB1c2goQGdldE93
blByb3BlcnR5U2xvdEltcGwsICIgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0
aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpO1xuIik7CisgICAgfQorCisgICAg
cmV0dXJuIEBnZXRPd25Qcm9wZXJ0eVNsb3RJbXBsOworfQorCitzdWIgR2VuZXJhdGVHZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3JCb2R5Cit7CisgICAgbXkgKCRkYXRhTm9kZSwgJGludGVyZmFjZU5h
bWUsICRjbGFzc05hbWUsICRpbXBsQ2xhc3NOYW1lLCAkaGFzQXR0cmlidXRlcywgJGlubGluZWQp
ID0gQF87CisgICAgCisgICAgbXkgJG5hbWVzcGFjZU1heWJlID0gKCRpbmxpbmVkID8gIkpTQzo6
IiA6ICIiKTsKKyAgICAKKyAgICBteSBAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCA9ICgp
OworICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDaGVja0RvbWFpblNl
Y3VyaXR5In0pIHsKKyAgICAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7
CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIXRoaXNPYmplY3QtPmFs
bG93c0FjY2Vzc0Zyb20oZXhlYykpXG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghYWxsb3dzQWNjZXNzRnJvbUZyYW1lKGV4ZWMs
IHRoaXNPYmplY3QtPmltcGwoKS0+ZnJhbWUoKSkpXG4iKTsKKyAgICAgICAgfQorICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIGZhbHNlO1xuIik7CisgICAgfQorICAg
IAorICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiTmFtZWROb2RlTWFwIiBvciAkaW50ZXJmYWNl
TmFtZSBlcSAiSFRNTENvbGxlY3Rpb24iIG9yICRpbnRlcmZhY2VOYW1lIGVxICJIVE1MQWxsQ29s
bGVjdGlvbiIpIHsKKyAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwg
IiAgICAke25hbWVzcGFjZU1heWJlfUpTVmFsdWUgcHJvdG8gPSB0aGlzT2JqZWN0LT5wcm90b3R5
cGUoKTtcbiIpOworICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBsLCAi
ICAgIGlmIChwcm90by5pc09iamVjdCgpICYmIHN0YXRpY19jYXN0PCR7bmFtZXNwYWNlTWF5YmV9
SlNPYmplY3QqPihhc09iamVjdChwcm90bykpLT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5h
bWUpKVxuIik7CisgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIg
ICAgICAgIHJldHVybiBmYWxzZTtcblxuIik7CisgICAgfQorICAgIAorICAgIG15ICRtYW51YWxM
b29rdXBHZXR0ZXJHZW5lcmF0aW9uID0gc3ViIHsKKyAgICAgICAgbXkgJHJlcXVpcmVzTWFudWFs
TG9va3VwID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzSW5kZXhHZXR0ZXIi
fSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNOYW1lR2V0dGVyIn07Cisg
ICAgICAgIGlmICgkcmVxdWlyZXNNYW51YWxMb29rdXApIHsKKyAgICAgICAgICAgIHB1c2goQGdl
dE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgY29uc3QgJHtuYW1lc3BhY2VNYXliZX1I
YXNoRW50cnkqIGVudHJ5ID0gJHtjbGFzc05hbWV9VGFibGUuZW50cnkoZXhlYywgcHJvcGVydHlO
YW1lKTtcbiIpOworICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1w
bCwgIiAgICBpZiAoZW50cnkpIHtcbiIpOworICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9ySW1wbCwgIiAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7XG4iKTsKKyAgICAg
ICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgICAgIHNsb3Qu
c2V0Q3VzdG9tKHRoaXNPYmplY3QsIGVudHJ5LT5wcm9wZXJ0eUdldHRlcigpKTtcbiIpOworICAg
ICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICAgICAgZGVz
Y3JpcHRvci5zZXREZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwg
ZW50cnktPmF0dHJpYnV0ZXMoKSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGdldE93blByb3Bl
cnR5RGVzY3JpcHRvckltcGwsICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7CisgICAgICAgICAg
ICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBsLCAiICAgIH1cbiIpOworICAgICAg
ICB9CisgICAgfTsKKyAgICAKKyAgICBpZiAoISRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57Ikhhc092ZXJyaWRpbmdOYW1lR2V0dGVyIn0pIHsKKyAgICAgICAgJiRtYW51YWxMb29rdXBH
ZXR0ZXJHZW5lcmF0aW9uKCk7CisgICAgfQorICAgIAorICAgIGlmICgkZGF0YU5vZGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJIYXNJbmRleEdldHRlciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57Ikhhc0N1c3RvbUluZGV4R2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiSGFzTnVtZXJpY0luZGV4R2V0dGVyIn0pIHsKKyAgICAgICAgcHVzaChA
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICBib29sIG9rO1xuIik7CisgICAgICAg
IHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgdW5zaWduZWQgaW5kZXgg
PSBwcm9wZXJ0eU5hbWUudG9VSW50MzIob2spO1xuIik7CisgICAgICAgIHB1c2goQGdldE93blBy
b3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgaWYgKG9rICYmIGluZGV4IDwgc3RhdGljX2Nhc3Q8
JGltcGxDbGFzc05hbWUqPih0aGlzT2JqZWN0LT5pbXBsKCkpLT5sZW5ndGgoKSkge1xuIik7Cisg
ICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNDdXN0b21JbmRl
eEdldHRlciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc051bWVyaWNJ
bmRleEdldHRlciJ9KSB7CisgICAgICAgICAgICAjIEFzc3VtZSB0aGF0IGlmIHRoZXJlJ3MgYSBz
ZXR0ZXIsIHRoZSBpbmRleCB3aWxsIGJlIHdyaXRhYmxlCisgICAgICAgICAgICBpZiAoJGRhdGFO
b2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzSW5kZXhTZXR0ZXIifSB8fCAkZGF0YU5vZGUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNDdXN0b21JbmRleFNldHRlciJ9KSB7CisgICAgICAg
ICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICAgICAgZGVz
Y3JpcHRvci5zZXREZXNjcmlwdG9yKHRoaXNPYmplY3QtPmdldEJ5SW5kZXgoZXhlYywgaW5kZXgp
LCAke25hbWVzcGFjZU1heWJlfURvbnREZWxldGUpO1xuIik7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIg
ICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih0aGlzT2JqZWN0LT5nZXRCeUluZGV4KGV4
ZWMsIGluZGV4KSwgJHtuYW1lc3BhY2VNYXliZX1Eb250RGVsZXRlIHwgJHtuYW1lc3BhY2VNYXli
ZX1SZWFkT25seSk7XG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgICAgICR7bmFt
ZXNwYWNlTWF5YmV9UHJvcGVydHlTbG90IHNsb3Q7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGdl
dE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgo
dGhpc09iamVjdCwgaW5kZXgsIGluZGV4R2V0dGVyKTtcbiIpOworICAgICAgICAgICAgIyBBc3N1
bWUgdGhhdCBpZiB0aGVyZSdzIGEgc2V0dGVyLCB0aGUgaW5kZXggd2lsbCBiZSB3cml0YWJsZQor
ICAgICAgICAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc0luZGV4
U2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzQ3VzdG9tSW5k
ZXhTZXR0ZXIifSkgeworICAgICAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3Jp
cHRvckltcGwsICIgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVl
KGV4ZWMsIHByb3BlcnR5TmFtZSksICR7bmFtZXNwYWNlTWF5YmV9RG9udERlbGV0ZSk7XG4iKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9ySW1wbCwgIiAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHNsb3Qu
Z2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgJHtuYW1lc3BhY2VNYXliZX1Eb250RGVsZXRl
IHwgJHtuYW1lc3BhY2VNYXliZX1SZWFkT25seSk7XG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBsLCAiICAgICAg
ICByZXR1cm4gdHJ1ZTtcbiIpOworICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3JJbXBsLCAiICAgIH1cbiIpOworICAgIH0KKyAgICAKKyAgICBpZiAoJGRhdGFOb2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiSGFzTmFtZUdldHRlciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57Ikhhc092ZXJyaWRpbmdOYW1lR2V0dGVyIn0pIHsKKyAgICAgICAgcHVzaChA
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICBpZiAoY2FuR2V0SXRlbXNGb3JOYW1l
KGV4ZWMsIHN0YXRpY19jYXN0PCRpbXBsQ2xhc3NOYW1lKj4odGhpc09iamVjdC0+aW1wbCgpKSwg
cHJvcGVydHlOYW1lKSkge1xuIik7CisgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3Jp
cHRvckltcGwsICIgICAgICAgICR7bmFtZXNwYWNlTWF5YmV9UHJvcGVydHlTbG90IHNsb3Q7XG4i
KTsKKyAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICAgICAg
c2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgbmFtZUdldHRlcik7XG4iKTsKKyAgICAgICAgcHVz
aChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICAgICAgZGVzY3JpcHRvci5zZXRE
ZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgUmVhZE9ubHkgfCBE
b250RGVsZXRlIHwgRG9udEVudW0pO1xuIik7CisgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5
RGVzY3JpcHRvckltcGwsICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7CisgICAgICAgIHB1c2go
QGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgfVxuIik7CisgICAgICAgIGlmICgk
aW5saW5lZCkgeworICAgICAgICAgICAgJGhlYWRlckluY2x1ZGVzeyJ3dGYvdGV4dC9BdG9taWNT
dHJpbmcuaCJ9ID0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICRpbXBsSW5jbHVk
ZXN7Ind0Zi90ZXh0L0F0b21pY1N0cmluZy5oIn0gPSAxOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNPdmVycmlkaW5n
TmFtZUdldHRlciJ9KSB7CisgICAgICAgICYkbWFudWFsTG9va3VwR2V0dGVyR2VuZXJhdGlvbigp
OworICAgIH0KKyAgICAKKyAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
RGVsZWdhdGluZ0dldE93blByb3BlcnR5U2xvdCJ9KSB7CisgICAgICAgIHB1c2goQGdldE93blBy
b3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgaWYgKHRoaXNPYmplY3QtPmdldE93blByb3BlcnR5
RGVzY3JpcHRvckRlbGVnYXRlKGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcikpXG4iKTsK
KyAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICAgICAgcmV0
dXJuIHRydWU7XG4iKTsKKyAgICB9CisgICAgCisgICAgaWYgKCRoYXNBdHRyaWJ1dGVzKSB7Cisg
ICAgICAgIGlmICgkaW5saW5lZCkgeworICAgICAgICAgICAgZGllICJDYW5ub3QgaW5saW5lIGlm
IE5vU3RhdGljVGFibGVzIGlzIHNldC4iIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJOb1N0YXRpY1RhYmxlcyJ9KTsKKyAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5
RGVzY3JpcHRvckltcGwsICIgICAgcmV0dXJuICR7bmFtZXNwYWNlTWF5YmV9Z2V0U3RhdGljVmFs
dWVEZXNjcmlwdG9yPCRjbGFzc05hbWUsIEJhc2U+KGV4ZWMsIHNfaW5mby5zdGF0aWNQcm9wSGFz
aFRhYmxlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpO1xuIik7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJ
bXBsLCAiICAgIHJldHVybiAke25hbWVzcGFjZU1heWJlfWdldFN0YXRpY1ZhbHVlRGVzY3JpcHRv
cjwkY2xhc3NOYW1lLCBCYXNlPihleGVjLCAiIC4gaGFzaFRhYmxlQWNjZXNzb3IoJGRhdGFOb2Rl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTm9TdGF0aWNUYWJsZXMifSwgJGNsYXNzTmFtZSkgLiAi
LCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpO1xuIik7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBs
LCAiICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTtcbiIpOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGw7Cit9CisKK3N1YiBHZW5lcmF0ZUhl
YWRlckNvbnRlbnRIZWFkZXIKK3sKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKyAgICBteSAk
Y2xhc3NOYW1lID0gIkpTIiAuICRkYXRhTm9kZS0+bmFtZTsKKworICAgIG15IEBoZWFkZXJDb250
ZW50SGVhZGVyID0gc3BsaXQoIlxyIiwgJGhlYWRlclRlbXBsYXRlKTsKKworICAgICMgLSBBZGQg
aGVhZGVyIHByb3RlY3Rpb24KKyAgICBwdXNoKEBoZWFkZXJDb250ZW50SGVhZGVyLCAiXG4jaWZu
ZGVmICRjbGFzc05hbWUiIC4gIl9oIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudEhlYWRlciwg
IlxuI2RlZmluZSAkY2xhc3NOYW1lIiAuICJfaFxuXG4iKTsKKworICAgIG15ICRjb25kaXRpb25h
bFN0cmluZyA9IEdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGRhdGFOb2RlKTsKKyAgICBwdXNo
KEBoZWFkZXJDb250ZW50SGVhZGVyLCAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIpIGlm
ICRjb25kaXRpb25hbFN0cmluZzsKKyAgICByZXR1cm4gQGhlYWRlckNvbnRlbnRIZWFkZXI7Cit9
CisKK3N1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uQ29udGVudEhlYWRlcgoreworICAgIG15ICRk
YXRhTm9kZSA9IHNoaWZ0OworICAgIG15ICRjbGFzc05hbWUgPSAiSlMiIC4gJGRhdGFOb2RlLT5u
YW1lOworCisgICAgbXkgQGltcGxDb250ZW50SGVhZGVyID0gc3BsaXQoIlxyIiwgJGhlYWRlclRl
bXBsYXRlKTsKKworICAgIHB1c2goQGltcGxDb250ZW50SGVhZGVyLCAiXG4jaW5jbHVkZSBcImNv
bmZpZy5oXCJcbiIpOworICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9IEdlbmVyYXRlQ29uZGl0
aW9uYWxTdHJpbmcoJGRhdGFOb2RlKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudEhlYWRlciwgIlxu
I2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKKyAg
ICBwdXNoKEBpbXBsQ29udGVudEhlYWRlciwgIiNpbmNsdWRlIFwiJGNsYXNzTmFtZS5oXCJcblxu
Iik7CisgICAgcmV0dXJuIEBpbXBsQ29udGVudEhlYWRlcjsKK30KKworbXkgJXVzZXNUb0pTTmV3
bHlDcmVhdGVkID0gKAorICAgICJDREFUQVNlY3Rpb24iID0+IDEsCisgICAgIkVsZW1lbnQiID0+
IDEsCisgICAgIk5vZGUiID0+IDEsCisgICAgIlRleHQiID0+IDEsCisgICAgIlRvdWNoIiA9PiAx
LAorICAgICJUb3VjaExpc3QiID0+IDEKKyk7CisKK3N1YiBHZXRGdW5jdGlvbk5hbWUKK3sKKyAg
ICBteSAoJGNsYXNzTmFtZSwgJGZ1bmN0aW9uKSA9IEBfOworICAgIG15ICRraW5kID0gJGZ1bmN0
aW9uLT5pc1N0YXRpYyA/ICJDb25zdHJ1Y3RvciIgOiAiUHJvdG90eXBlIjsKKyAgICByZXR1cm4g
JGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGNsYXNzTmFtZSkgLiAka2luZCAuICJGdW5jdGlv
biIgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFt
ZSk7Cit9CisKK3N1YiBHZW5lcmF0ZUhlYWRlcgoreworICAgIG15ICRvYmplY3QgPSBzaGlmdDsK
KyAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKworICAgIG15ICRpbnRlcmZhY2VOYW1lID0gJGRh
dGFOb2RlLT5uYW1lOworICAgIG15ICRjbGFzc05hbWUgPSAiSlMkaW50ZXJmYWNlTmFtZSI7Cisg
ICAgbXkgJGltcGxDbGFzc05hbWUgPSAkaW50ZXJmYWNlTmFtZTsKKyAgICBteSBAYW5jZXN0b3JJ
bnRlcmZhY2VOYW1lcyA9ICgpOworICAgIG15ICVzdHJ1Y3R1cmVGbGFncyA9ICgpOworCisgICAg
IyBXZSBvbmx5IHN1cHBvcnQgbXVsdGlwbGUgcGFyZW50cyB3aXRoIFNWRyAoZm9yIG5vdykuCisg
ICAgaWYgKEB7JGRhdGFOb2RlLT5wYXJlbnRzfSA+IDEpIHsKKyAgICAgICAgZGllICJBIGNsYXNz
IGNhbid0IGhhdmUgbW9yZSB0aGFuIG9uZSBwYXJlbnQiIHVubGVzcyAkaW50ZXJmYWNlTmFtZSA9
fiAvU1ZHLzsKKyAgICAgICAgJGNvZGVHZW5lcmF0b3ItPkFkZE1ldGhvZHNDb25zdGFudHNBbmRB
dHRyaWJ1dGVzRnJvbVBhcmVudENsYXNzZXMoJGRhdGFOb2RlLCBcQGFuY2VzdG9ySW50ZXJmYWNl
TmFtZXMpOworICAgIH0KKworICAgIG15ICRoYXNMZWdhY3lQYXJlbnQgPSAkZGF0YU5vZGUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJMZWdhY3lQYXJlbnQifTsKKyAgICBteSAkaGFzUmVhbFBhcmVu
dCA9IEB7JGRhdGFOb2RlLT5wYXJlbnRzfSA+IDA7CisgICAgbXkgJGhhc1BhcmVudCA9ICRoYXNM
ZWdhY3lQYXJlbnQgfHwgJGhhc1JlYWxQYXJlbnQ7CisgICAgbXkgJHBhcmVudENsYXNzTmFtZSA9
IEdldFBhcmVudENsYXNzTmFtZSgkZGF0YU5vZGUpOworICAgIG15ICRldmVudFRhcmdldCA9ICRk
YXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkV2ZW50VGFyZ2V0In07CisgICAgbXkgJG5l
ZWRzTWFya0NoaWxkcmVuID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9t
TWFya0Z1bmN0aW9uIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRXZlbnRU
YXJnZXQifTsKKyAgICAKKyAgICAjIC0gQWRkIGRlZmF1bHQgaGVhZGVyIHRlbXBsYXRlIGFuZCBo
ZWFkZXIgcHJvdGVjdGlvbgorICAgIHB1c2goQGhlYWRlckNvbnRlbnRIZWFkZXIsIEdlbmVyYXRl
SGVhZGVyQ29udGVudEhlYWRlcigkZGF0YU5vZGUpKTsKKworICAgIGlmICgkaGFzUGFyZW50KSB7
CisgICAgICAgICRoZWFkZXJJbmNsdWRlc3siJHBhcmVudENsYXNzTmFtZS5oIn0gPSAxOworICAg
IH0gZWxzZSB7CisgICAgICAgICRoZWFkZXJJbmNsdWRlc3siSlNET01CaW5kaW5nLmgifSA9IDE7
CisgICAgICAgICRoZWFkZXJJbmNsdWRlc3siPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4ifSA9
IDE7CisgICAgICAgICRoZWFkZXJJbmNsdWRlc3siPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+
In0gPSAxOworICAgIH0KKworICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJDdXN0b21DYWxsIn0pIHsKKyAgICAgICAgJGhlYWRlckluY2x1ZGVzeyI8cnVudGltZS9DYWxs
RGF0YS5oPiJ9ID0gMTsKKyAgICB9CisKKyAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiSW5saW5lR2V0T3duUHJvcGVydHlTbG90In0pIHsKKyAgICAgICAgJGhlYWRlcklu
Y2x1ZGVzeyI8cnVudGltZS9Mb29rdXAuaD4ifSA9IDE7CisgICAgICAgICRoZWFkZXJJbmNsdWRl
c3siPHd0Zi9BbHdheXNJbmxpbmUuaD4ifSA9IDE7CisgICAgfQorCisgICAgaWYgKCRoYXNQYXJl
bnQgJiYgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiR2VuZXJhdGVOYXRpdmVDb252
ZXJ0ZXIifSkgeworICAgICAgICBpZiAoSXNUeXBlZEFycmF5VHlwZSgkaW1wbENsYXNzTmFtZSkp
IHsKKyAgICAgICAgICAgICRoZWFkZXJJbmNsdWRlc3siPHd0Zi8kaW1wbENsYXNzTmFtZS5oPiJ9
ID0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICRoZWFkZXJJbmNsdWRlc3siJGlt
cGxDbGFzc05hbWUuaCJ9ID0gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAkaGVhZGVy
SW5jbHVkZXN7IjxydW50aW1lL0pTT2JqZWN0Lmg+In0gPSAxOworICAgICRoZWFkZXJJbmNsdWRl
c3siU1ZHRWxlbWVudC5oIn0gPSAxIGlmICRjbGFzc05hbWUgPX4gL15KU1NWRy87CisKKyAgICBt
eSAkaW1wbFR5cGUgPSAkaW1wbENsYXNzTmFtZTsKKyAgICBteSAoJHN2Z1Byb3BlcnR5VHlwZSwg
JHN2Z0xpc3RQcm9wZXJ0eVR5cGUsICRzdmdOYXRpdmVUeXBlKSA9IEdldFNWR1Byb3BlcnR5VHlw
ZXMoJGltcGxUeXBlKTsKKyAgICAkaW1wbFR5cGUgPSAkc3ZnTmF0aXZlVHlwZSBpZiAkc3ZnTmF0
aXZlVHlwZTsKKworICAgIG15ICRzdmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5VHlwZTsKKyAgICAk
c3ZnUHJvcGVydHlPckxpc3RQcm9wZXJ0eVR5cGUgPSAkc3ZnUHJvcGVydHlUeXBlIGlmICRzdmdQ
cm9wZXJ0eVR5cGU7CisgICAgJHN2Z1Byb3BlcnR5T3JMaXN0UHJvcGVydHlUeXBlID0gJHN2Z0xp
c3RQcm9wZXJ0eVR5cGUgaWYgJHN2Z0xpc3RQcm9wZXJ0eVR5cGU7CisKKyAgICBteSAkbnVtQ29u
c3RhbnRzID0gQHskZGF0YU5vZGUtPmNvbnN0YW50c307CisgICAgbXkgJG51bUF0dHJpYnV0ZXMg
PSBAeyRkYXRhTm9kZS0+YXR0cmlidXRlc307CisgICAgbXkgJG51bUZ1bmN0aW9ucyA9IEB7JGRh
dGFOb2RlLT5mdW5jdGlvbnN9OworCisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxubmFtZXNw
YWNlIFdlYkNvcmUge1xuXG4iKTsKKworICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNTVkdBbmlt
YXRlZFR5cGUoJGltcGxDbGFzc05hbWUpKSB7CisgICAgICAgICRoZWFkZXJJbmNsdWRlc3siJGlt
cGxDbGFzc05hbWUuaCJ9ID0gMTsKKyAgICB9IGVsc2UgeworICAgICAgICAjIEltcGxlbWVudGF0
aW9uIGNsYXNzIGZvcndhcmQgZGVjbGFyYXRpb24KKyAgICAgICAgaWYgKCRpbnRlcmZhY2VOYW1l
IGVxICJET01XaW5kb3ciIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IklzV29y
a2VyQ29udGV4dCJ9KSB7CisgICAgICAgICAgICBBZGRDbGFzc0ZvcndhcmRJZk5lZWRlZCgkaW1w
bENsYXNzTmFtZSkgdW5sZXNzICRzdmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5VHlwZTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIEFkZENsYXNzRm9yd2FyZElmTmVlZGVkKCJKU0RPTVdpbmRvd1No
ZWxsIikgaWYgJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyI7CisgICAgQWRkQ2xhc3NGb3J3
YXJkSWZOZWVkZWQoIkpTRGljdGlvbmFyeSIpIGlmIElzQ29uc3RydWN0b3JUZW1wbGF0ZSgkZGF0
YU5vZGUsICJFdmVudCIpOworCisgICAgIyBDbGFzcyBkZWNsYXJhdGlvbgorICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICJjbGFzcyAkY2xhc3NOYW1lIDogcHVibGljICRwYXJlbnRDbGFzc05hbWUg
e1xuIik7CisKKyAgICAjIFN0YXRpYyBjcmVhdGUgbWV0aG9kcworICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICJwdWJsaWM6XG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHR5cGVk
ZWYgJHBhcmVudENsYXNzTmFtZSBCYXNlO1xuIik7CisgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVx
ICJET01XaW5kb3ciKSB7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGlj
ICRjbGFzc05hbWUqIGNyZWF0ZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjwkaW1wbFR5cGU+IGltcGwsIEpTRE9NV2lu
ZG93U2hlbGwqIHdpbmRvd1NoZWxsKVxuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICIgICAge1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgICRjbGFz
c05hbWUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8JGNsYXNzTmFtZT4o
Z2xvYmFsRGF0YS5oZWFwKSkgJHtjbGFzc05hbWV9KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgaW1w
bCwgd2luZG93U2hlbGwpO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
ICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSwgd2luZG93U2hlbGwpO1xuIik7Cisg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgIHJldHVybiBwdHI7XG4iKTsKKyAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB9XG5cbiIpOworICAgIH0gZWxzaWYgKCRk
YXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IklzV29ya2VyQ29udGV4dCJ9KSB7CisgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljICRjbGFzc05hbWUqIGNyZWF0ZShK
U0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
UGFzc1JlZlB0cjwkaW1wbFR5cGU+IGltcGwpXG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiAgICB7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAg
JGNsYXNzTmFtZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDwkY2xhc3NO
YW1lPihnbG9iYWxEYXRhLmhlYXApKSAke2NsYXNzTmFtZX0oZ2xvYmFsRGF0YSwgc3RydWN0dXJl
LCBpbXBsKTtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICBwdHIt
PmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgICAgIHJldHVybiBwdHI7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiAgICB9XG5cbiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFkZEluY2x1ZGVzRm9y
VHlwZUluSGVhZGVyKCRpbXBsVHlwZSkgdW5sZXNzICRzdmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5
VHlwZTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgJGNsYXNzTmFt
ZSogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8JGltcGxUeXBlPiBpbXBsKVxuIik7CisgICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIgICAge1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIgICAgICAgICRjbGFzc05hbWUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0
ZUNlbGw8JGNsYXNzTmFtZT4oZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCkuaGVhcCkpICRjbGFz
c05hbWUoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpO1xuIik7CisgICAgICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0
LT5nbG9iYWxEYXRhKCkpO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
ICAgIHJldHVybiBwdHI7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB9
XG5cbiIpOworICAgIH0KKworICAgICMgUHJvdG90eXBlCisgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopO1xuIikgdW5sZXNzICgkZGF0YU5vZGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJFeHRlbmRzRE9NR2xvYmFsT2JqZWN0In0pOworCisgICAgJGhlYWRl
clRyYWlsaW5nSW5jbHVkZXN7IiR7Y2xhc3NOYW1lfUN1c3RvbS5oIn0gPSAxIGlmICRkYXRhTm9k
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUhlYWRlciJ9OworCisgICAgJGltcGxJbmNs
dWRlc3siJHtjbGFzc05hbWV9Q3VzdG9tLmgifSA9IDEgaWYgISRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkN1c3RvbUhlYWRlciJ9ICYmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJDdXN0b21QdXRGdW5jdGlvbiJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkRlbGVnYXRpbmdQdXRGdW5jdGlvbiJ9KTsKKworICAgIG15ICRoYXNHZXR0ZXIgPSAk
bnVtQXR0cmlidXRlcyA+IDAgCisgICAgICAgICAgICAgICAgIHx8ICEkZGF0YU5vZGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJPbWl0Q29uc3RydWN0b3IifQorICAgICAgICAgICAgICAgICB8fCAk
ZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNJbmRleEdldHRlciJ9CisgICAgICAg
ICAgICAgICAgIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc0N1c3RvbUlu
ZGV4R2V0dGVyIn0KKyAgICAgICAgICAgICAgICAgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiSGFzTnVtZXJpY0luZGV4R2V0dGVyIn0KKyAgICAgICAgICAgICAgICAgfHwgJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90In0K
KyAgICAgICAgICAgICAgICAgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRGVs
ZWdhdGluZ0dldE93blByb3BlcnR5U2xvdCJ9CisgICAgICAgICAgICAgICAgIHx8ICRkYXRhTm9k
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc05hbWVHZXR0ZXIifQorICAgICAgICAgICAgICAg
ICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNPdmVycmlkaW5nTmFtZUdl
dHRlciJ9OworCisgICAgIyBHZXR0ZXJzCisgICAgaWYgKCRoYXNHZXR0ZXIpIHsKKyAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICIgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6
SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpO1xuIik7CisgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChK
U0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6
OlByb3BlcnR5U2xvdCYpO1xuIikgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
Ikhhc0luZGV4R2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFz
Q3VzdG9tSW5kZXhHZXR0ZXIifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJI
YXNOdW1lcmljSW5kZXhHZXR0ZXIifSkgJiYgISRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57Ikhhc092ZXJyaWRpbmdOYW1lR2V0dGVyIn07CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3REZWxlZ2F0ZShKU0M6OkV4ZWNTdGF0ZSos
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlTbG90Jik7XG4iKSBpZiAkZGF0
YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJEZWxlZ2F0aW5nR2V0T3duUHJvcGVydHlTbG90
In07CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgYm9vbCBnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3JEZWxlZ2F0ZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmll
ciYsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7XG4iKSBpZiAkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJEZWxlZ2F0aW5nR2V0T3duUHJvcGVydHlTbG90In07CisgICAgICAgICRz
dHJ1Y3R1cmVGbGFnc3siSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QifSA9IDE7Cisg
ICAgfQorCisgICAgIyBDaGVjayBpZiB3ZSBoYXZlIGFueSB3cml0YWJsZSBwcm9wZXJ0aWVzCisg
ICAgbXkgJGhhc1JlYWRXcml0ZVByb3BlcnRpZXMgPSAwOworICAgIGZvcmVhY2ggKEB7JGRhdGFO
b2RlLT5hdHRyaWJ1dGVzfSkgeworICAgICAgICBpZiAoJF8tPnR5cGUgIX4gL15yZWFkb25seVwg
YXR0cmlidXRlJC8pIHsKKyAgICAgICAgICAgICRoYXNSZWFkV3JpdGVQcm9wZXJ0aWVzID0gMTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIG15ICRoYXNTZXR0ZXIgPSAkaGFzUmVhZFdyaXRlUHJv
cGVydGllcworICAgICAgICAgICAgICAgICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJDdXN0b21QdXRGdW5jdGlvbiJ9CisgICAgICAgICAgICAgICAgIHx8ICRkYXRhTm9kZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkRlbGVnYXRpbmdQdXRGdW5jdGlvbiJ9CisgICAgICAgICAg
ICAgICAgIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc0N1c3RvbUluZGV4
U2V0dGVyIn07CisKKyAgICAjIEdldHRlcnMKKyAgICBpZiAoJGhhc1NldHRlcikgeworICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2b2lkIHB1dChKU0M6OkpTQ2VsbCos
IEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpT
Qzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTtcbiIpOworICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBK
U0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlKTtcbiIp
IGlmICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc0N1c3RvbUluZGV4U2V0dGVy
In07CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgYm9vbCBwdXREZWxlZ2F0ZShK
U0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6SlNWYWx1ZSwgSlND
OjpQdXRQcm9wZXJ0eVNsb3QmKTtcbiIpIGlmICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkRlbGVnYXRpbmdQdXRGdW5jdGlvbiJ9OworICAgIH0KKworICAgICMgQ2xhc3MgaW5mbwor
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZv
IHNfaW5mbztcblxuIik7CisKKyAgICAjIFN0cnVjdHVyZSBJRAorICAgIGlmICgkaW50ZXJmYWNl
TmFtZSBlcSAiRE9NV2luZG93IikgeworICAgICAgICAkc3RydWN0dXJlRmxhZ3N7IkpTQzo6SW1w
bGVtZW50c0hhc0luc3RhbmNlIn0gPSAxOworICAgIH0KKyAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpXG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAg
IHtcbiIpOworICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IiB8fCAkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJc1dvcmtlckNvbnRleHQifSkgeworICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0
ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Okdsb2JhbE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7XG4iKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICByZXR1cm4gSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
XG4iKTsKKyAgICB9CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB9XG5cbiIpOworCisg
ICAgIyBDdXN0b20gcHVzaEV2ZW50SGFuZGxlclNjb3BlIGZ1bmN0aW9uCisgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICBKU0M6OlNjb3BlQ2hhaW5Ob2RlKiBwdXNoRXZlbnRIYW5kbGVyU2Nv
cGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlNjb3BlQ2hhaW5Ob2RlKikgY29uc3Q7XG5cbiIpIGlm
ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbVB1c2hFdmVudEhhbmRsZXJT
Y29wZSJ9OworCisgICAgIyBDdXN0b20gY2FsbCBmdW5jdGlvbnMKKyAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgIHN0YXRpYyBKU0M6OkNhbGxUeXBlIGdldENhbGxEYXRhKEpTQzo6SlNDZWxs
KiwgSlNDOjpDYWxsRGF0YSYpO1xuXG4iKSBpZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJDdXN0b21DYWxsIn07CisKKyAgICAjIEN1c3RvbSBkZWxldGVQcm9wZXJ0eSBmdW5jdGlv
bgorICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVy
dHkoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYp
O1xuIikgaWYgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tRGVsZXRlUHJv
cGVydHkifTsKKworICAgICMgQ3VzdG9tIGdldFByb3BlcnR5TmFtZXMgZnVuY3Rpb24gZXhpc3Rz
IG9uIERPTVdpbmRvdworICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93Iikgewor
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5
TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVB
cnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlIG1vZGUgPSBKU0M6OkV4Y2x1ZGVEb250RW51bVBy
b3BlcnRpZXMpO1xuIik7CisgICAgICAgICRzdHJ1Y3R1cmVGbGFnc3siSlNDOjpPdmVycmlkZXNH
ZXRQcm9wZXJ0eU5hbWVzIn0gPSAxOworICAgIH0KKworICAgICMgQ3VzdG9tIGRlZmluZVByb3Bl
cnR5IGZ1bmN0aW9uIGV4aXN0cyBvbiBET01XaW5kb3cKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3QqLCBKU0M6
OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OlBy
b3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpO1xuIikgaWYgJGludGVyZmFjZU5h
bWUgZXEgIkRPTVdpbmRvdyI7CisKKyAgICAjIEN1c3RvbSBnZXRPd25Qcm9wZXJ0eU5hbWVzIGZ1
bmN0aW9uCisgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUdl
dFByb3BlcnR5TmFtZXMifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNJ
bmRleEdldHRlciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc0N1c3Rv
bUluZGV4R2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzTnVt
ZXJpY0luZGV4R2V0dGVyIn0pIHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBz
dGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSBtb2Rl
ID0gSlNDOjpFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTtcbiIpOworICAgICAgICAkc3RydWN0
dXJlRmxhZ3N7IkpTQzo6T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyJ9ID0gMTsgICAgICAgCisg
ICAgfQorCisgICAgIyBDdXN0b20gZGVmaW5lR2V0dGVyIGZ1bmN0aW9uCisgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCBkZWZpbmVHZXR0ZXIoSlNDOjpKU09iamVjdCos
IEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpT
Qzo6SlNPYmplY3QqIGdldHRlckZ1bmN0aW9uLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTtcbiIpIGlm
ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbURlZmluZUdldHRlciJ9Owor
CisgICAgIyBDdXN0b20gZGVmaW5lU2V0dGVyIGZ1bmN0aW9uCisgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiAgICBzdGF0aWMgdm9pZCBkZWZpbmVTZXR0ZXIoSlNDOjpKU09iamVjdCosIEpTQzo6
RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNP
YmplY3QqIHNldHRlckZ1bmN0aW9uLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTtcbiIpIGlmICRkYXRh
Tm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbURlZmluZVNldHRlciJ9OworCisgICAg
IyBPdmVycmlkZSB0b0Jvb2xlYW4gdG8gcmV0dXJuIGZhbHNlIGZvciBvYmplY3RzIHRoYXQgd2Fu
dCB0byAnTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCcuCisgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Ik1hc3F1ZXJhZGVzQXNVbmRlZmluZWQifSkgeworICAgICAgICAkc3Ry
dWN0dXJlRmxhZ3N7IkpTQzo6TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCJ9ID0gMTsKKyAgICB9CisK
KyAgICAjIENvbnN0cnVjdG9yIG9iamVjdCBnZXR0ZXIKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7XG4iKSBpZiAhJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiT21pdENvbnN0cnVjdG9yIn07CisKKyAgICBteSAkbnVtQ3VzdG9tRnVuY3Rpb25z
ID0gMDsKKyAgICBteSAkbnVtQ3VzdG9tQXR0cmlidXRlcyA9IDA7CisKKyAgICAjIEF0dHJpYnV0
ZSBhbmQgZnVuY3Rpb24gZW51bXMKKyAgICBpZiAoJG51bUF0dHJpYnV0ZXMgPiAwKSB7CisgICAg
ICAgIGZvcmVhY2ggKEB7JGRhdGFOb2RlLT5hdHRyaWJ1dGVzfSkgeworICAgICAgICAgICAgbXkg
JGF0dHJpYnV0ZSA9ICRfOworICAgICAgICAgICAgJG51bUN1c3RvbUF0dHJpYnV0ZXMrKyBpZiAk
YXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b20ifSB8fCAk
YXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0NDdXN0b20ifTsK
KyAgICAgICAgICAgICRudW1DdXN0b21BdHRyaWJ1dGVzKysgaWYgKCRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUdldHRlciJ9IHx8ICRhdHRyaWJ1dGUt
PnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ0N1c3RvbUdldHRlciJ9KTsKKyAg
ICAgICAgICAgICRudW1DdXN0b21BdHRyaWJ1dGVzKysgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbVNldHRlciJ9IHx8ICRhdHRyaWJ1dGUtPnNp
Z25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ0N1c3RvbVNldHRlciJ9KTsKKyAgICAg
ICAgICAgIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJD
YWNoZWRBdHRyaWJ1dGUifSkgeworICAgICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICIgICAgSlNDOjpXcml0ZUJhcnJpZXI8SlNDOjpVbmtub3duPiBtXyIgLiAkYXR0cmlidXRlLT5z
aWduYXR1cmUtPm5hbWUgLiAiO1xuIik7CisgICAgICAgICAgICAgICAgJG51bUNhY2hlZEF0dHJp
YnV0ZXMrKzsKKyAgICAgICAgICAgICAgICAkbmVlZHNNYXJrQ2hpbGRyZW4gPSAxOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgIyB2aXNpdCBmdW5jdGlvbgorICAgIGlm
ICgkbmVlZHNNYXJrQ2hpbGRyZW4pIHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTtc
blxuIik7CisgICAgICAgICRzdHJ1Y3R1cmVGbGFnc3siSlNDOjpPdmVycmlkZXNWaXNpdENoaWxk
cmVuIn0gPSAxOworICAgIH0KKworICAgIGlmICgkbnVtQ3VzdG9tQXR0cmlidXRlcyA+IDApIHsK
KyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlxuICAgIC8vIEN1c3RvbSBhdHRyaWJ1dGVz
XG4iKTsKKworICAgICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7JGRhdGFOb2RlLT5hdHRy
aWJ1dGVzfSkgeworICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkN1c3RvbSJ9IHx8ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkpTQ0N1c3RvbSJ9KSB7CisgICAgICAgICAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICBKU0M6OkpTVmFsdWUgIiAuICRjb2RlR2VuZXJhdG9yLT5XS19sY2Zp
cnN0KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSkgLiAiKEpTQzo6RXhlY1N0YXRlKikgY29u
c3Q7XG4iKTsKKyAgICAgICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+dHlwZSAhfiAvXnJlYWRv
bmx5LykgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZv
aWQgc2V0IiAuICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZS0+bmFtZSkgLiAiKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKTtcbiIpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzaWYgKCgkYXR0cmlidXRlLT5zaWduYXR1cmUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21HZXR0ZXIifSB8fCAkYXR0cmlidXRlLT5zaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0NDdXN0b21HZXR0ZXIifSkpIHsKKyAgICAg
ICAgICAgICAgICBteSAkbWV0aG9kTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRh
dHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKCRhdHRyaWJ1
dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxlbWVudGVkQnkifSkgewor
ICAgICAgICAgICAgICAgICAgICAjIEZJWE1FKGhhcmFrZW4pOiBUaGlzIGlzIGEgdGVtcG9yYWwg
aGFjayB0byBlbmFibGUgdGhlIFtTdXBwbGVtZW50YWxdIElETAorICAgICAgICAgICAgICAgICAg
ICAjIG9uIGFsbCBidWlsZCBzeXN0ZW1zIGluY3JlbWVudGFsbHkuIFRoaXMgaGFjayBpcyBnb2lu
ZyB0byBiZSByZW1vdmVkIGFmdGVyIGFsbCBidWlsZAorICAgICAgICAgICAgICAgICAgICAjIHN5
c3RlbXMgc3VwcG9ydCB0aGUgW1N1cHBsZW1lbnRhbF0gSURMLiAoU2VlIGJ1ZyA3NDU5OSkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCRtZXRob2ROYW1lIGVxICJ3ZWJTb2NrZXQiIG9yICRtZXRo
b2ROYW1lIGVxICJ3ZWJraXRBdWRpb0NvbnRleHQiKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIEpTQzo6SlNWYWx1ZSAiIC4gJG1ldGhvZE5hbWUg
LiAiKEpTQzo6RXhlY1N0YXRlKikgY29uc3Q7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgSlNDOjpKU1Zh
bHVlICIgLiAkbWV0aG9kTmFtZSAuICIoIiAuICRpbnRlcmZhY2VOYW1lIC4gIiosIEpTQzo6RXhl
Y1N0YXRlKikgY29uc3Q7XG4iKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIEpTQzo6SlNWYWx1ZSAiIC4gJG1l
dGhvZE5hbWUgLiAiKEpTQzo6RXhlY1N0YXRlKikgY29uc3Q7XG4iKTsKKworICAgICAgICAgICAg
ICAgICAgICAjIEZJWE1FKGhhcmFrZW4pOiBUaGlzIGlzIGEgdGVtcG9yYWwgaGFjayB0byBlbmFi
bGUgdGhlIFtTdXBwbGVtZW50YWxdIElETAorICAgICAgICAgICAgICAgICAgICAjIG9uIGFsbCBi
dWlsZCBzeXN0ZW1zIGluY3JlbWVudGFsbHkuIFRoaXMgaGFjayBpcyBnb2luZyB0byBiZSByZW1v
dmVkIGFmdGVyIGFsbCBidWlsZAorICAgICAgICAgICAgICAgICAgICAjIHN5c3RlbXMgc3VwcG9y
dCB0aGUgW1N1cHBsZW1lbnRhbF0gSURMLiAoU2VlIGJ1ZyA3NDU5OSkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCRtZXRob2ROYW1lIGVxICJ3ZWJTb2NrZXQiIG9yICRtZXRob2ROYW1lIGVxICJ3
ZWJraXRBdWRpb0NvbnRleHQiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgIEpTQzo6SlNWYWx1ZSAiIC4gJG1ldGhvZE5hbWUgLiAiKCIgLiAkaW50
ZXJmYWNlTmFtZSAuICIqLCBKU0M6OkV4ZWNTdGF0ZSopIGNvbnN0O1xuIik7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2lmICgoJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tU2V0dGVyIn0g
fHwgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNDQ3VzdG9t
U2V0dGVyIn0pKSB7CisgICAgICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnR5cGUgIX4gL15y
ZWFkb25seS8pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxlbWVudGVkQnkifSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2b2lkIHNldCIgLiAkY29kZUdl
bmVyYXRvci0+V0tfdWNmaXJzdCgkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUpIC4gIigiIC4g
JGludGVyZmFjZU5hbWUgLiAiKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpO1xuIik7
CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQgc2V0IiAuICRjb2RlR2VuZXJhdG9yLT5XS191
Y2ZpcnN0KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSkgLiAiKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU1ZhbHVlKTtcbiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZm9yZWFjaCBteSAk
ZnVuY3Rpb24gKEB7JGRhdGFOb2RlLT5mdW5jdGlvbnN9KSB7CisgICAgICAgICRudW1DdXN0b21G
dW5jdGlvbnMrKyBpZiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkN1c3RvbSJ9IHx8ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
SlNDQ3VzdG9tIn07CisgICAgfQorCisgICAgaWYgKCRudW1DdXN0b21GdW5jdGlvbnMgPiAwKSB7
CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiAgICAvLyBDdXN0b20gZnVuY3Rpb25z
XG4iKTsKKyAgICAgICAgZm9yZWFjaCBteSAkZnVuY3Rpb24gKEB7JGRhdGFOb2RlLT5mdW5jdGlv
bnN9KSB7CisgICAgICAgICAgICBuZXh0IHVubGVzcyAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbSJ9IG9yICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiSlNDQ3VzdG9tIn07CisgICAgICAgICAgICBuZXh0IGlmICRmdW5j
dGlvbi0+e292ZXJsb2Fkc30gJiYgJGZ1bmN0aW9uLT57b3ZlcmxvYWRJbmRleH0gIT0gMTsKKyAg
ICAgICAgICAgIG15ICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZSA9ICRmdW5jdGlvbi0+c2ln
bmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50YXRpb25GdW5jdGlvbiJ9IHx8
ICRjb2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lKTsK
KyAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgSlNDOjpKU1ZhbHVlICIgLiAk
ZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUgLiAiKEpTQzo6RXhlY1N0YXRlKik7XG4iKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmICghJGhhc1BhcmVudCkgeworICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgICRpbXBsVHlwZSogaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1w
bDsgfVxuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdm9pZCByZWxlYXNl
SW1wbCgpIHsgbV9pbXBsLT5kZXJlZigpOyBtX2ltcGwgPSAwOyB9XG5cbiIpOworICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAicHJpdmF0ZTpcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgICRpbXBsVHlwZSogbV9pbXBsO1xuIik7CisgICAgfSBlbHNpZiAoJGRhdGFO
b2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiR2VuZXJhdGVOYXRpdmVDb252ZXJ0ZXIifSkgewor
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRpbXBsQ2xhc3NOYW1lKiBpbXBsKCkg
Y29uc3RcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHtcbiIpOworICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8JGlt
cGxDbGFzc05hbWUqPihCYXNlOjppbXBsKCkpO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgfVxuIik7CisgICAgfQorCisgICAgaWYgKElzVHlwZWRBcnJheVR5cGUoJGlt
cGxUeXBlKSBhbmQgKCRpbXBsVHlwZSBuZSAiQXJyYXlCdWZmZXJWaWV3IikgYW5kICgkaW1wbFR5
cGUgbmUgIkFycmF5QnVmZmVyIikpIHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICBzdGF0aWMgY29uc3QgSlNDOjpUeXBlZEFycmF5VHlwZSBUeXBlZEFycmF5U3RvcmFnZVR5cGUg
PSBKU0M6OiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiVHlwZWRBcnJheUludDgi
KSBpZiAkaW1wbFR5cGUgZXEgIkludDhBcnJheSI7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICJUeXBlZEFycmF5SW50MTYiKSBpZiAkaW1wbFR5cGUgZXEgIkludDE2QXJyYXkiOworICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiVHlwZWRBcnJheUludDMyIikgaWYgJGltcGxUeXBl
IGVxICJJbnQzMkFycmF5IjsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlR5cGVkQXJy
YXlVaW50OCIpIGlmICRpbXBsVHlwZSBlcSAiVWludDhBcnJheSI7CisgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICJUeXBlZEFycmF5VWludDE2IikgaWYgJGltcGxUeXBlIGVxICJVaW50MTZB
cnJheSI7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJUeXBlZEFycmF5VWludDMyIikg
aWYgJGltcGxUeXBlIGVxICJVaW50MzJBcnJheSI7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICJUeXBlZEFycmF5RmxvYXQzMiIpIGlmICRpbXBsVHlwZSBlcSAiRmxvYXQzMkFycmF5IjsK
KyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlR5cGVkQXJyYXlGbG9hdDY0IikgaWYgJGlt
cGxUeXBlIGVxICJGbG9hdDY0QXJyYXkiOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
O1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgaW50cHRyX3QgbV9zdG9y
YWdlTGVuZ3RoO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdm9pZCog
bV9zdG9yYWdlO1xuIik7CisgICAgfQorCisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgInByb3Rl
Y3RlZDpcbiIpOworICAgICMgQ29uc3RydWN0b3IKKyAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEg
IkRPTVdpbmRvdyIpIHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAkY2xhc3NO
YW1lKEpTQzo6SlNHbG9iYWxEYXRhJiwgSlNDOjpTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPCRpbXBs
VHlwZT4sIEpTRE9NV2luZG93U2hlbGwqKTtcbiIpOworICAgIH0gZWxzaWYgKCRkYXRhTm9kZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IklzV29ya2VyQ29udGV4dCJ9KSB7CisgICAgICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIgICAgJGNsYXNzTmFtZShKU0M6OkpTR2xvYmFsRGF0YSYsIEpTQzo6
U3RydWN0dXJlKiwgUGFzc1JlZlB0cjwkaW1wbFR5cGU+KTtcbiIpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGNsYXNzTmFtZShKU0M6OlN0cnVjdHVy
ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjwkaW1wbFR5cGU+KTtcbiIpOworICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpK
U0dsb2JhbERhdGEmKTtcbiIpOworICAgIH0KKworICAgICMgc3RydWN0dXJlIGZsYWdzCisgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSAiKTsKKyAgICBmb3JlYWNoIG15ICRzdHJ1Y3R1cmVGbGFnIChrZXlzICVzdHJ1Y3R1
cmVGbGFncykgeworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAkc3RydWN0dXJlRmxhZyAu
ICIgfCAiKTsKKyAgICB9CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIkJhc2U6OlN0cnVjdHVy
ZUZsYWdzO1xuIik7CisKKyAgICAjIEluZGV4IGdldHRlcgorICAgIGlmICgkZGF0YU5vZGUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNJbmRleEdldHRlciJ9KSB7CisgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBpbmRleEdldHRlcihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgdW5zaWduZWQpO1xuIik7CisgICAgfQorICAgIGlmICgk
ZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNDdXN0b21JbmRleEdldHRlciJ9IHx8
ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc051bWVyaWNJbmRleEdldHRlciJ9
KSB7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgSlNDOjpKU1ZhbHVlIGdldEJ5
SW5kZXgoSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleCk7XG4iKTsKKyAgICAgICAgCisg
ICAgfQorICAgIAorICAgICMgSW5kZXggc2V0dGVyCisgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Ikhhc0N1c3RvbUluZGV4U2V0dGVyIn0pIHsKKyAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiAgICB2b2lkIGluZGV4U2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgdW5z
aWduZWQgaW5kZXgsIEpTQzo6SlNWYWx1ZSk7XG4iKTsKKyAgICB9CisgICAgIyBOYW1lIGdldHRl
cgorICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNOYW1lR2V0dGVy
In0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzT3ZlcnJpZGluZ05hbWVH
ZXR0ZXIifSkgeworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAicHJpdmF0ZTpcbiIpOwor
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBib29sIGNhbkdldEl0ZW1z
Rm9yTmFtZShKU0M6OkV4ZWNTdGF0ZSosICRpbXBsQ2xhc3NOYW1lKiwgY29uc3QgSlNDOjpJZGVu
dGlmaWVyJik7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIG5hbWVHZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNv
bnN0IEpTQzo6SWRlbnRpZmllciYpO1xuIik7CisgICAgfQorCisgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIn07XG5cbiIpOworCisgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IklubGluZUdldE93blByb3BlcnR5U2xvdCJ9ICYmICEkZGF0YU5vZGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QifSkgeworICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiQUxXQVlTX0lOTElORSBib29sICR7Y2xhc3NOYW1lfTo6Z2V0T3duUHJv
cGVydHlTbG90KEpTQzo6SlNDZWxsKiBjZWxsLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90JiBzbG90KVxu
Iik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ7XG4iKTsKKyAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiAgICAke2NsYXNzTmFtZX0qIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2Fz
dDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7XG4i
KTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eVNs
b3RCb2R5KCRkYXRhTm9kZSwgJGludGVyZmFjZU5hbWUsICRjbGFzc05hbWUsICRpbXBsQ2xhc3NO
YW1lLCAkbnVtQXR0cmlidXRlcyA+IDAsIDEpKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIn1cblxuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJBTFdBWVNfSU5MSU5F
IGJvb2wgJHtjbGFzc05hbWV9OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVj
dCogb2JqZWN0LCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKVxuIik7Cisg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICAke2NsYXNzTmFtZX0qIHRoaXNPYmplY3QgPSBKU0M6OmpzQ2FzdDwke2Ns
YXNzTmFtZX0qPihvYmplY3QpO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTtcbiIpOwor
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCBHZW5lcmF0ZUdldE93blByb3BlcnR5RGVzY3Jp
cHRvckJvZHkoJGRhdGFOb2RlLCAkaW50ZXJmYWNlTmFtZSwgJGNsYXNzTmFtZSwgJGltcGxDbGFz
c05hbWUsICRudW1BdHRyaWJ1dGVzID4gMCwgMSkpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAifVxuXG4iKTsKKyAgICB9CisKKyAgICBpZiAoISRoYXNQYXJlbnQgfHwKKyAgICAgICAg
JGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiR2VuZXJhdGVJc1JlYWNoYWJsZSJ9IHx8
IAorICAgICAgICAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Jc1JlYWNo
YWJsZSJ9IHx8IAorICAgICAgICAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0
b21GaW5hbGl6ZSJ9IHx8CisgICAgICAgICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkFjdGl2ZURPTU9iamVjdCJ9KSB7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJjbGFz
cyBKUyR7aW1wbENsYXNzTmFtZX1Pd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7
XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsIGJvb2wgaXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCog
Y29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYpO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQpO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJ9
O1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbiIpOworICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3du
ZXIoRE9NV3JhcHBlcldvcmxkKiwgJGltcGxUeXBlKilcbiIpOworICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAie1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChKUyR7aW1wbENsYXNzTmFtZX1Pd25lciwganMke2ltcGxDbGFzc05h
bWV9T3duZXIsICgpKTtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHJl
dHVybiAmanMke2ltcGxDbGFzc05hbWV9T3duZXI7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIn1cbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4iKTsKKyAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgImlubGluZSB2b2lkKiB3cmFwcGVyQ29udGV4dChE
T01XcmFwcGVyV29ybGQqIHdvcmxkLCAkaW1wbFR5cGUqKVxuIik7CisgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICJ7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBy
ZXR1cm4gd29ybGQ7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIn1cbiIpOwor
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG4iKTsKKyAgICB9CisKKyAgICBpZiAoISRo
YXNQYXJlbnQgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiR2VuZXJhdGVUb0pT
In0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tVG9KUyJ9KSB7Cisg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgJGltcGxUeXBlKik7XG4iKTsKKyAgICB9CisgICAg
aWYgKCEkaGFzUGFyZW50IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkdlbmVy
YXRlTmF0aXZlQ29udmVydGVyIn0pIHsKKyAgICAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJO
b2RlRmlsdGVyIikgeworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlBhc3NSZWZQ
dHI8Tm9kZUZpbHRlcj4gdG9Ob2RlRmlsdGVyKEpTQzo6SlNHbG9iYWxEYXRhJiwgSlNDOjpKU1Zh
bHVlKTtcbiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiRpbXBsVHlwZSogdG8ke2ludGVyZmFjZU5hbWV9KEpTQzo6SlNWYWx1ZSk7XG4iKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoJHVzZXNUb0pTTmV3bHlDcmVhdGVkeyRpbnRlcmZh
Y2VOYW1lfSkgeworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiSlNDOjpKU1ZhbHVlIHRv
SlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosICRpbnRl
cmZhY2VOYW1lKik7XG4iKTsKKyAgICB9CisgICAgCisgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IlxuIik7CisKKyAgICAjIEFkZCBwcm90b3R5cGUgZGVjbGFyYXRpb24uCisgICAgJXN0cnVjdHVy
ZUZsYWdzID0gKCk7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgImNsYXNzICR7Y2xhc3NOYW1l
fVByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3Qge1xuIik7CisgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgInB1YmxpYzpcbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICIgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTtcbiIpOworICAgIGlmICgk
aW50ZXJmYWNlTmFtZSBuZSAiRE9NV2luZG93IiAmJiAhJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiSXNXb3JrZXJDb250ZXh0In0pIHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNHbG9iYWxPYmplY3QqKTtcbiIpOworICAgIH0KKworICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICIgICAgc3RhdGljICR7Y2xhc3NOYW1lfVByb3RvdHlwZSogY3JlYXRlKEpTQzo6SlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpXG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAg
IHtcbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgICAgICR7Y2xhc3NOYW1lfVBy
b3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDwke2NsYXNzTmFt
ZX1Qcm90b3R5cGU+KGdsb2JhbERhdGEuaGVhcCkpICR7Y2xhc3NOYW1lfVByb3RvdHlwZShnbG9i
YWxEYXRhLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7XG4iKTsKKyAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpO1xuIik7Cisg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHB0cjtcbiIpOworICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIgICAgfVxuXG4iKTsKKworICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbztcbiIpOworICAgIGlm
ICgkbnVtRnVuY3Rpb25zID4gMCB8fCAkbnVtQ29uc3RhbnRzID4gMCB8fCAkZGF0YU5vZGUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJEZWxlZ2F0aW5nUHJvdG90eXBlR2V0T3duUHJvcGVydHlTbG90
In0pIHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6
SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlTbG90Jik7XG4iKTsKKyAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlND
OjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlND
OjpQcm9wZXJ0eURlc2NyaXB0b3ImKTtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90RGVsZWdhdGUoSlNDOjpFeGVjU3RhdGUqLCBj
b25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5U2xvdCYpO1xuIikgaWYgJGRhdGFO
b2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRGVsZWdhdGluZ1Byb3RvdHlwZUdldE93blByb3Bl
cnR5U2xvdCJ9OworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIGJvb2wgZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yRGVsZWdhdGUoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6Oklk
ZW50aWZpZXImLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpO1xuIikgaWYgJGRhdGFOb2RlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiRGVsZWdhdGluZ1Byb3RvdHlwZUdldE93blByb3BlcnR5U2xv
dCJ9OworICAgICAgICAkc3RydWN0dXJlRmxhZ3N7IkpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90In0gPSAxOworICAgIH0KKyAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiQ3VzdG9tTWFya0Z1bmN0aW9uIn0gb3IgJG5lZWRzTWFya0NoaWxkcmVuKSB7CisgICAg
ICAgICRzdHJ1Y3R1cmVGbGFnc3siSlNDOjpPdmVycmlkZXNWaXNpdENoaWxkcmVuIn0gPSAxOwor
ICAgIH0KKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LAorICAgICAgICAiICAgIHN0YXRpYyBKU0M6
OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpXG4iIC4KKyAgICAgICAgIiAgICB7XG4iIC4KKyAgICAgICAgIiAgICAgICAgcmV0dXJuIEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8p
O1xuIiAuCisgICAgICAgICIgICAgfVxuIik7CisgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkRlbGVnYXRpbmdQcm90b3R5cGVQdXRGdW5jdGlvbiJ9KSB7CisgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgcHV0KEpTQzo6SlNDZWxsKiwg
SlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlND
OjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpO1xuIik7CisgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgYm9vbCBwdXREZWxlZ2F0ZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTtc
biIpOworICAgIH0KKworICAgICMgQ3VzdG9tIGRlZmluZUdldHRlciBmdW5jdGlvbgorICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgZGVmaW5lR2V0dGVyKEpTQzo6SlNP
YmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBKU0M6OkpTT2JqZWN0KiBnZXR0ZXJGdW5jdGlvbiwgdW5zaWduZWQgYXR0cmlidXRlcyk7
XG4iKSBpZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Qcm90b3R5cGVE
ZWZpbmVHZXR0ZXIifTsKKworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJcbnByaXZhdGU6XG4i
KTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICR7Y2xhc3NOYW1lfVByb3RvdHlwZShK
U0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEs
IHN0cnVjdHVyZSkgeyB9XG4iKTsKKworICAgICMgc3RydWN0dXJlIGZsYWdzCisgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgInByb3RlY3RlZDpcbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICIgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gIik7CisgICAgZm9y
ZWFjaCBteSAkc3RydWN0dXJlRmxhZyAoa2V5cyAlc3RydWN0dXJlRmxhZ3MpIHsKKyAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgJHN0cnVjdHVyZUZsYWcgLiAiIHwgIik7CisgICAgfQorICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICJCYXNlOjpTdHJ1Y3R1cmVGbGFncztcbiIpOworCisgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIn07XG5cbiIpOworCisgICAgaWYgKCEkZGF0YU5vZGUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJPbWl0Q29uc3RydWN0b3IifSkgeworICAgICAgICAkaGVhZGVy
SW5jbHVkZXN7IkpTRE9NQmluZGluZy5oIn0gPSAxOworICAgICAgICBHZW5lcmF0ZUNvbnN0cnVj
dG9yRGVjbGFyYXRpb24oXEBoZWFkZXJDb250ZW50LCAkY2xhc3NOYW1lLCAkZGF0YU5vZGUsICRp
bnRlcmZhY2VOYW1lKTsKKyAgICB9CisKKyAgICBpZiAoJG51bUZ1bmN0aW9ucyA+IDApIHsKKyAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwiLy8gRnVuY3Rpb25zXG5cbiIpOworICAgICAgICBm
b3JlYWNoIG15ICRmdW5jdGlvbiAoQHskZGF0YU5vZGUtPmZ1bmN0aW9uc30pIHsKKyAgICAgICAg
ICAgIG5leHQgaWYgJGZ1bmN0aW9uLT57b3ZlcmxvYWRJbmRleH0gJiYgJGZ1bmN0aW9uLT57b3Zl
cmxvYWRJbmRleH0gPiAxOworICAgICAgICAgICAgbXkgJGZ1bmN0aW9uTmFtZSA9IEdldEZ1bmN0
aW9uTmFtZSgkY2xhc3NOYW1lLCAkZnVuY3Rpb24pOworICAgICAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIkpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke2Z1bmN0aW9uTmFt
ZX0oSlNDOjpFeGVjU3RhdGUqKTtcbiIpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCRu
dW1BdHRyaWJ1dGVzID4gMCB8fCAhJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiT21p
dENvbnN0cnVjdG9yIn0pIHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwiLy8gQXR0cmli
dXRlc1xuXG4iKTsKKyAgICAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRkYXRhTm9kZS0+
YXR0cmlidXRlc30pIHsKKyAgICAgICAgICAgIG15ICRnZXR0ZXIgPSAianMiIC4gJGludGVyZmFj
ZU5hbWUgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkYXR0cmlidXRlLT5zaWduYXR1cmUt
Pm5hbWUpIC4gKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSA9fiAvQ29uc3RydWN0b3IkLyA/
ICJDb25zdHJ1Y3RvciIgOiAiIik7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
SlNDOjpKU1ZhbHVlICR7Z2V0dGVyfShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29u
c3QgSlNDOjpJZGVudGlmaWVyJik7XG4iKTsKKyAgICAgICAgICAgIHVubGVzcyAoJGF0dHJpYnV0
ZS0+dHlwZSA9fiAvcmVhZG9ubHkvKSB7CisgICAgICAgICAgICAgICAgbXkgJHNldHRlciA9ICJz
ZXRKUyIgLiAkaW50ZXJmYWNlTmFtZSAuICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRhdHRy
aWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSkgLiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlID1+
IC9Db25zdHJ1Y3RvciQvID8gIkNvbnN0cnVjdG9yIiA6ICIiKTsKKyAgICAgICAgICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAidm9pZCAke3NldHRlcn0oSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlKTtcbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBpZiAoISRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
Ik9taXRDb25zdHJ1Y3RvciJ9KSB7CisgICAgICAgICAgICBteSAkZ2V0dGVyID0gImpzIiAuICRp
bnRlcmZhY2VOYW1lIC4gIkNvbnN0cnVjdG9yIjsKKyAgICAgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICJKU0M6OkpTVmFsdWUgJHtnZXR0ZXJ9KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Zh
bHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTtcbiIpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJlcGxhY2VhYmxlQ29uc3RydWN0
b3IifSkgeworICAgICAgICAgICAgbXkgJGNvbnN0cnVjdG9yRnVuY3Rpb25OYW1lID0gInNldEpT
IiAuICRpbnRlcmZhY2VOYW1lIC4gIkNvbnN0cnVjdG9yIjsKKyAgICAgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICJ2b2lkICR7Y29uc3RydWN0b3JGdW5jdGlvbk5hbWV9KEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSk7XG4iKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmICgkbnVtQ29uc3RhbnRzID4gMCkgeworICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCIvLyBDb25zdGFudHNcblxuIik7CisgICAgICAgIGZvcmVhY2ggbXkgJGNvbnN0YW50
IChAeyRkYXRhTm9kZS0+Y29uc3RhbnRzfSkgeworICAgICAgICAgICAgbXkgJGdldHRlciA9ICJq
cyIgLiAkaW50ZXJmYWNlTmFtZSAuICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRjb25zdGFu
dC0+bmFtZSk7CisgICAgICAgICAgICBteSAkY29uZGl0aW9uYWwgPSAkY29uc3RhbnQtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJDb25kaXRpb25hbCJ9OworICAgICAgICAgICAgaWYgKCRjb25kaXRp
b25hbCkgeworICAgICAgICAgICAgICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2Vu
ZXJhdG9yLT5HZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nRnJvbUF0dHJpYnV0ZVZhbHVlKCRjb25k
aXRpb25hbCk7CisgICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNpZiAke2Nv
bmRpdGlvbmFsU3RyaW5nfVxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiSlNDOjpKU1ZhbHVlICR7Z2V0dGVyfShKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7XG4iKTsKKyAgICAgICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIjZW5kaWZcbiIpIGlmICRjb25kaXRpb25hbDsKKyAgICAgICAg
fQorICAgIH0KKworICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9IEdlbmVyYXRlQ29uZGl0aW9u
YWxTdHJpbmcoJGRhdGFOb2RlKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiXG59IC8vIG5h
bWVzcGFjZSBXZWJDb3JlXG5cbiIpOworICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIjZW5kaWYg
Ly8gJHtjb25kaXRpb25hbFN0cmluZ31cblxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOworICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIjZW5kaWZcbiIpOworCisgICAgIyAtIEdlbmVyYXRlIGRl
cGVuZGVuY2llcy4KKyAgICBpZiAoJHdyaXRlRGVwZW5kZW5jaWVzICYmIEBhbmNlc3RvckludGVy
ZmFjZU5hbWVzKSB7CisgICAgICAgIHB1c2goQGRlcHNDb250ZW50LCAiJGNsYXNzTmFtZS5oIDog
Iiwgam9pbigiICIsIG1hcCB7ICIkXy5pZGwiIH0gQGFuY2VzdG9ySW50ZXJmYWNlTmFtZXMpLCAi
XG4iKTsKKyAgICAgICAgcHVzaChAZGVwc0NvbnRlbnQsIG1hcCB7ICIkXy5pZGwgOlxuIiB9IEBh
bmNlc3RvckludGVyZmFjZU5hbWVzKTsgCisgICAgfQorfQorCitzdWIgR2VuZXJhdGVBdHRyaWJ1
dGVzSGFzaFRhYmxlKCQkKQoreworICAgIG15ICgkb2JqZWN0LCAkZGF0YU5vZGUpID0gQF87CisK
KyAgICAjIEZJWE1FOiBUaGVzZSBzaG91bGQgYmUgZnVuY3Rpb25zIG9uICRkYXRhTm9kZS4KKyAg
ICBteSAkaW50ZXJmYWNlTmFtZSA9ICRkYXRhTm9kZS0+bmFtZTsKKyAgICBteSAkY2xhc3NOYW1l
ID0gIkpTJGludGVyZmFjZU5hbWUiOworICAgIAorICAgICMgLSBBZGQgYWxsIGF0dHJpYnV0ZXMg
aW4gYSBoYXNodGFibGUgZGVmaW5pdGlvbgorICAgIG15ICRudW1BdHRyaWJ1dGVzID0gQHskZGF0
YU5vZGUtPmF0dHJpYnV0ZXN9OworICAgICRudW1BdHRyaWJ1dGVzKysgaWYgISRkYXRhTm9kZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik9taXRDb25zdHJ1Y3RvciJ9OworCisgICAgcmV0dXJuIDAg
IGlmICEkbnVtQXR0cmlidXRlczsKKworICAgIG15ICRoYXNoU2l6ZSA9ICRudW1BdHRyaWJ1dGVz
OworICAgIG15ICRoYXNoTmFtZSA9ICRjbGFzc05hbWUgLiAiVGFibGUiOworCisgICAgbXkgQGhh
c2hLZXlzID0gKCk7CisgICAgbXkgQGhhc2hTcGVjaWFscyA9ICgpOworICAgIG15IEBoYXNoVmFs
dWUxID0gKCk7CisgICAgbXkgQGhhc2hWYWx1ZTIgPSAoKTsKKyAgICBteSAlY29uZGl0aW9uYWxz
ID0gKCk7CisKKyAgICBteSBAZW50cmllcyA9ICgpOworCisgICAgZm9yZWFjaCBteSAkYXR0cmli
dXRlIChAeyRkYXRhTm9kZS0+YXR0cmlidXRlc30pIHsKKyAgICAgICAgbXkgJG5hbWUgPSAkYXR0
cmlidXRlLT5zaWduYXR1cmUtPm5hbWU7CisgICAgICAgIHB1c2goQGhhc2hLZXlzLCAkbmFtZSk7
CisKKyAgICAgICAgbXkgQHNwZWNpYWxzID0gKCk7CisgICAgICAgIHB1c2goQHNwZWNpYWxzLCAi
RG9udERlbGV0ZSIpIHVubGVzcyAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJEZWxldGFibGUifTsKKyAgICAgICAgcHVzaChAc3BlY2lhbHMsICJEb250RW51bSIp
IGlmICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkRvbnRFbnVt
In07CisgICAgICAgIHB1c2goQHNwZWNpYWxzLCAiUmVhZE9ubHkiKSBpZiAkYXR0cmlidXRlLT50
eXBlID1+IC9yZWFkb25seS87CisgICAgICAgIG15ICRzcGVjaWFsID0gKEBzcGVjaWFscyA+IDAp
ID8gam9pbigiIHwgIiwgQHNwZWNpYWxzKSA6ICIwIjsKKyAgICAgICAgcHVzaChAaGFzaFNwZWNp
YWxzLCAkc3BlY2lhbCk7CisKKyAgICAgICAgbXkgJGdldHRlciA9ICJqcyIgLiAkaW50ZXJmYWNl
TmFtZSAuICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+
bmFtZSkgLiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlID1+IC9Db25zdHJ1Y3RvciQvID8g
IkNvbnN0cnVjdG9yIiA6ICIiKTsKKyAgICAgICAgcHVzaChAaGFzaFZhbHVlMSwgJGdldHRlcik7
CisKKyAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnR5cGUgPX4gL3JlYWRvbmx5LykgeworICAgICAg
ICAgICAgcHVzaChAaGFzaFZhbHVlMiwgIjAiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIG15ICRzZXR0ZXIgPSAic2V0SlMiIC4gJGludGVyZmFjZU5hbWUgLiAkY29kZUdlbmVyYXRv
ci0+V0tfdWNmaXJzdCgkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUpIC4gKCRhdHRyaWJ1dGUt
PnNpZ25hdHVyZS0+dHlwZSA9fiAvQ29uc3RydWN0b3IkLyA/ICJDb25zdHJ1Y3RvciIgOiAiIik7
CisgICAgICAgICAgICBwdXNoKEBoYXNoVmFsdWUyLCAkc2V0dGVyKTsKKyAgICAgICAgfQorCisg
ICAgICAgIG15ICRjb25kaXRpb25hbCA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkNvbmRpdGlvbmFsIn07CisgICAgICAgIGlmICgkY29uZGl0aW9uYWwpIHsK
KyAgICAgICAgICAgICRjb25kaXRpb25hbHN7JG5hbWV9ID0gJGNvbmRpdGlvbmFsOworICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKCEkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJP
bWl0Q29uc3RydWN0b3IifSkgeworICAgICAgICBwdXNoKEBoYXNoS2V5cywgImNvbnN0cnVjdG9y
Iik7CisgICAgICAgIG15ICRnZXR0ZXIgPSAianMiIC4gJGludGVyZmFjZU5hbWUgLiAiQ29uc3Ry
dWN0b3IiOworICAgICAgICBwdXNoKEBoYXNoVmFsdWUxLCAkZ2V0dGVyKTsKKyAgICAgICAgaWYg
KCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJlcGxhY2VhYmxlQ29uc3RydWN0b3Ii
fSkgeworICAgICAgICAgICAgbXkgJHNldHRlciA9ICJzZXRKUyIgLiAkaW50ZXJmYWNlTmFtZSAu
ICJDb25zdHJ1Y3RvciI7CisgICAgICAgICAgICBwdXNoKEBoYXNoVmFsdWUyLCAkc2V0dGVyKTsK
KyAgICAgICAgICAgIHB1c2goQGhhc2hTcGVjaWFscywgIkRvbnRFbnVtIHwgRG9udERlbGV0ZSIp
OworICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgIAorICAgICAgICAgICAgcHVzaChAaGFzaFZh
bHVlMiwgIjAiKTsKKyAgICAgICAgICAgIHB1c2goQGhhc2hTcGVjaWFscywgIkRvbnRFbnVtIHwg
UmVhZE9ubHkiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgICRvYmplY3QtPkdlbmVyYXRlSGFz
aFRhYmxlKCRoYXNoTmFtZSwgJGhhc2hTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFxAaGFzaEtleXMsIFxAaGFzaFNwZWNpYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFxAaGFzaFZhbHVlMSwgXEBoYXNoVmFsdWUyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwlY29uZGl0aW9uYWxzKTsKKyAgICByZXR1cm4gJG51bUF0dHJpYnV0ZXM7Cit9
CisKK3N1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVja0V4cHJlc3Npb24KK3sKKyAgICBteSAkbnVt
UGFyYW1ldGVycyA9IHNoaWZ0OworICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0OworCisgICAgbXkg
QGFuZEV4cHJlc3Npb24gPSAoKTsKKyAgICBwdXNoKEBhbmRFeHByZXNzaW9uLCAiYXJnc0NvdW50
ID09ICRudW1QYXJhbWV0ZXJzIik7CisgICAgbXkgJHBhcmFtZXRlckluZGV4ID0gMDsKKyAgICBt
eSAldXNlZEFyZ3VtZW50cyA9ICgpOworICAgIGZvcmVhY2ggbXkgJHBhcmFtZXRlciAoQHskZnVu
Y3Rpb24tPnBhcmFtZXRlcnN9KSB7CisgICAgICAgIGxhc3QgaWYgJHBhcmFtZXRlckluZGV4ID49
ICRudW1QYXJhbWV0ZXJzOworICAgICAgICBteSAkdmFsdWUgPSAiYXJnJHBhcmFtZXRlckluZGV4
IjsKKyAgICAgICAgbXkgJHR5cGUgPSAkY29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoJHBhcmFt
ZXRlci0+dHlwZSk7CisKKyAgICAgICAgIyBPbmx5IERPTVN0cmluZyBvciB3cmFwcGVyIHR5cGVz
IGFyZSBjaGVja2VkLgorICAgICAgICAjIEZvciBET01TdHJpbmcsIE51bGwsIFVuZGVmaW5lZCBh
bmQgYW55IE9iamVjdCBhcmUgYWNjZXB0ZWQgdG9vLCBhcworICAgICAgICAjIHRoZXNlIGFyZSBh
Y2NlcHRhYmxlIHZhbHVlcyBmb3IgYSBET01TdHJpbmcgYXJndW1lbnQgKGFueSBPYmplY3QgY2Fu
CisgICAgICAgICMgYmUgY29udmVydGVkIHRvIGEgc3RyaW5nIHZpYSAudG9TdHJpbmcpLgorICAg
ICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzU3RyaW5nVHlwZSgkdHlwZSkpIHsKKyAgICAgICAg
ICAgIHB1c2goQGFuZEV4cHJlc3Npb24sICIoJHt2YWx1ZX0uaXNVbmRlZmluZWRPck51bGwoKSB8
fCAke3ZhbHVlfS5pc1N0cmluZygpIHx8ICR7dmFsdWV9LmlzT2JqZWN0KCkpIik7CisgICAgICAg
ICAgICAkdXNlZEFyZ3VtZW50c3skcGFyYW1ldGVySW5kZXh9ID0gMTsKKyAgICAgICAgfSBlbHNp
ZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxiYWNrIn0pIHsKKyAgICAg
ICAgICAgICMgRm9yIENhbGxiYWNrcyBvbmx5IGNoZWNrcyBpZiB0aGUgdmFsdWUgaXMgbnVsbCBv
ciBvYmplY3QuCisgICAgICAgICAgICBwdXNoKEBhbmRFeHByZXNzaW9uLCAiKCR7dmFsdWV9Lmlz
TnVsbCgpIHx8ICR7dmFsdWV9LmlzT2JqZWN0KCkpIik7CisgICAgICAgICAgICAkdXNlZEFyZ3Vt
ZW50c3skcGFyYW1ldGVySW5kZXh9ID0gMTsKKyAgICAgICAgfSBlbHNpZiAoSXNBcnJheVR5cGUo
JHR5cGUpKSB7CisgICAgICAgICAgICAjIEZJWE1FOiBBZGQgcHJvcGVyIHN1cHBvcnQgZm9yIFRb
XSwgVFtdPywgc2VxdWVuY2U8VD4KKyAgICAgICAgICAgIHB1c2goQGFuZEV4cHJlc3Npb24sICIo
JHt2YWx1ZX0uaXNOdWxsKCkgfHwgKCR7dmFsdWV9LmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoJHt2
YWx1ZX0pLT5pbmhlcml0cygmSlNBcnJheTo6c19pbmZvKSkpIik7CisgICAgICAgICAgICAkdXNl
ZEFyZ3VtZW50c3skcGFyYW1ldGVySW5kZXh9ID0gMTsKKyAgICAgICAgfSBlbHNpZiAoIUlzTmF0
aXZlVHlwZSgkdHlwZSkpIHsKKyAgICAgICAgICAgIHB1c2goQGFuZEV4cHJlc3Npb24sICIoJHt2
YWx1ZX0uaXNOdWxsKCkgfHwgKCR7dmFsdWV9LmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoJHt2YWx1
ZX0pLT5pbmhlcml0cygmSlMke3R5cGV9OjpzX2luZm8pKSkiKTsKKyAgICAgICAgICAgICR1c2Vk
QXJndW1lbnRzeyRwYXJhbWV0ZXJJbmRleH0gPSAxOworICAgICAgICB9CisgICAgICAgICRwYXJh
bWV0ZXJJbmRleCsrOworICAgIH0KKyAgICBteSAkcmVzID0gam9pbigiICYmICIsIEBhbmRFeHBy
ZXNzaW9uKTsKKyAgICAkcmVzID0gIigkcmVzKSIgaWYgQGFuZEV4cHJlc3Npb24gPiAxOworICAg
IHJldHVybiAoJHJlcywga2V5cyAldXNlZEFyZ3VtZW50cyk7Cit9CisKK3N1YiBHZW5lcmF0ZUZ1
bmN0aW9uUGFyYW1ldGVyc0NoZWNrCit7CisgICAgbXkgJGZ1bmN0aW9uID0gc2hpZnQ7CisKKyAg
ICBteSBAb3JFeHByZXNzaW9uID0gKCk7CisgICAgbXkgJG51bVBhcmFtZXRlcnMgPSAwOworICAg
IG15IEBuZWVkZWRBcmd1bWVudHMgPSAoKTsKKworICAgIGZvcmVhY2ggbXkgJHBhcmFtZXRlciAo
QHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KSB7CisgICAgICAgIGlmICgkcGFyYW1ldGVyLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiT3B0aW9uYWwifSkgeworICAgICAgICAgICAgbXkgKCRleHByZXNz
aW9uLCBAdXNlZEFyZ3VtZW50cykgPSBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVja0V4cHJlc3Npb24o
JG51bVBhcmFtZXRlcnMsICRmdW5jdGlvbik7CisgICAgICAgICAgICBwdXNoKEBvckV4cHJlc3Np
b24sICRleHByZXNzaW9uKTsKKyAgICAgICAgICAgIHB1c2goQG5lZWRlZEFyZ3VtZW50cywgQHVz
ZWRBcmd1bWVudHMpOworICAgICAgICB9CisgICAgICAgICRudW1QYXJhbWV0ZXJzKys7CisgICAg
fQorICAgIG15ICgkZXhwcmVzc2lvbiwgQHVzZWRBcmd1bWVudHMpID0gR2VuZXJhdGVQYXJhbWV0
ZXJzQ2hlY2tFeHByZXNzaW9uKCRudW1QYXJhbWV0ZXJzLCAkZnVuY3Rpb24pOworICAgIHB1c2go
QG9yRXhwcmVzc2lvbiwgJGV4cHJlc3Npb24pOworICAgIHB1c2goQG5lZWRlZEFyZ3VtZW50cywg
QHVzZWRBcmd1bWVudHMpOworICAgIHJldHVybiAoam9pbigiIHx8ICIsIEBvckV4cHJlc3Npb24p
LCBAbmVlZGVkQXJndW1lbnRzKTsKK30KKworc3ViIEdlbmVyYXRlT3ZlcmxvYWRlZEZ1bmN0aW9u
Cit7CisgICAgbXkgJGZ1bmN0aW9uID0gc2hpZnQ7CisgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7
CisgICAgbXkgJGltcGxDbGFzc05hbWUgPSBzaGlmdDsKKworICAgICMgR2VuZXJhdGUgY29kZSBm
b3IgY2hvb3NpbmcgdGhlIGNvcnJlY3Qgb3ZlcmxvYWQgdG8gY2FsbC4gT3ZlcmxvYWRzIGFyZQor
ICAgICMgY2hvc2VuIGJhc2VkIG9uIHRoZSB0b3RhbCBudW1iZXIgb2YgYXJndW1lbnRzIHBhc3Nl
ZCBhbmQgdGhlIHR5cGUgb2YKKyAgICAjIHZhbHVlcyBwYXNzZWQgaW4gbm9uLXByaW1pdGl2ZSBh
cmd1bWVudCBzbG90cy4gV2hlbiBtb3JlIHRoYW4gYSBzaW5nbGUKKyAgICAjIG92ZXJsb2FkIGlz
IGFwcGxpY2FibGUsIHByZWNlZGVuY2UgaXMgZ2l2ZW4gYWNjb3JkaW5nIHRvIHRoZSBvcmRlciBv
ZgorICAgICMgZGVjbGFyYXRpb24gaW4gdGhlIElETC4KKworICAgIG15ICRraW5kID0gJGZ1bmN0
aW9uLT5pc1N0YXRpYyA/ICJDb25zdHJ1Y3RvciIgOiAiUHJvdG90eXBlIjsKKyAgICBteSAkZnVu
Y3Rpb25OYW1lID0gImpzJHtpbXBsQ2xhc3NOYW1lfSR7a2luZH1GdW5jdGlvbiIgLiAkY29kZUdl
bmVyYXRvci0+V0tfdWNmaXJzdCgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSk7CisKKyAgICBw
dXNoKEBpbXBsQ29udGVudCwgIkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtmdW5jdGlv
bk5hbWV9KEV4ZWNTdGF0ZSogZXhlYylcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVO
RCk7Cit7CisgICAgc2l6ZV90IGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKK0VO
RAorCisgICAgbXkgJWZldGNoZWRBcmd1bWVudHMgPSAoKTsKKworICAgIGZvcmVhY2ggbXkgJG92
ZXJsb2FkIChAeyRmdW5jdGlvbi0+e292ZXJsb2Fkc319KSB7CisgICAgICAgIG15ICgkcGFyYW1l
dGVyc0NoZWNrLCBAbmVlZGVkQXJndW1lbnRzKSA9IEdlbmVyYXRlRnVuY3Rpb25QYXJhbWV0ZXJz
Q2hlY2soJG92ZXJsb2FkKTsKKworICAgICAgICBmb3JlYWNoIG15ICRwYXJhbWV0ZXJJbmRleCAo
QG5lZWRlZEFyZ3VtZW50cykgeworICAgICAgICAgICAgbmV4dCBpZiBleGlzdHMgJGZldGNoZWRB
cmd1bWVudHN7JHBhcmFtZXRlckluZGV4fTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIEpTVmFsdWUgYXJnJHBhcmFtZXRlckluZGV4KGV4ZWMtPmFyZ3VtZW50KCRwYXJhbWV0
ZXJJbmRleCkpO1xuIik7CisgICAgICAgICAgICAkZmV0Y2hlZEFyZ3VtZW50c3skcGFyYW1ldGVy
SW5kZXh9ID0gMTsKKyAgICAgICAgfQorCisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IGlmICgkcGFyYW1ldGVyc0NoZWNrKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICByZXR1cm4gJHtmdW5jdGlvbk5hbWV9JG92ZXJsb2FkLT57b3ZlcmxvYWRJbmRleH0o
ZXhlYyk7XG4iKTsKKyAgICB9CisgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKyAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKK30KKworRU5ECit9CisKK3N1YiBHZW5lcmF0
ZUltcGxlbWVudGF0aW9uCit7CisgICAgbXkgKCRvYmplY3QsICRkYXRhTm9kZSkgPSBAXzsKKwor
ICAgIG15ICRpbnRlcmZhY2VOYW1lID0gJGRhdGFOb2RlLT5uYW1lOworICAgIG15ICRjbGFzc05h
bWUgPSAiSlMkaW50ZXJmYWNlTmFtZSI7CisgICAgbXkgJGltcGxDbGFzc05hbWUgPSAkaW50ZXJm
YWNlTmFtZTsKKworICAgIG15ICRoYXNMZWdhY3lQYXJlbnQgPSAkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJMZWdhY3lQYXJlbnQifTsKKyAgICBteSAkaGFzUmVhbFBhcmVudCA9IEB7
JGRhdGFOb2RlLT5wYXJlbnRzfSA+IDA7CisgICAgbXkgJGhhc1BhcmVudCA9ICRoYXNMZWdhY3lQ
YXJlbnQgfHwgJGhhc1JlYWxQYXJlbnQ7CisgICAgbXkgJHBhcmVudENsYXNzTmFtZSA9IEdldFBh
cmVudENsYXNzTmFtZSgkZGF0YU5vZGUpOworICAgIG15ICR2aXNpYmxlQ2xhc3NOYW1lID0gR2V0
VmlzaWJsZUNsYXNzTmFtZSgkaW50ZXJmYWNlTmFtZSk7CisgICAgbXkgJGV2ZW50VGFyZ2V0ID0g
JGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRXZlbnRUYXJnZXQifTsKKyAgICBteSAk
bmVlZHNNYXJrQ2hpbGRyZW4gPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0
b21NYXJrRnVuY3Rpb24ifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJFdmVu
dFRhcmdldCJ9OworCisgICAgIyAtIEFkZCBkZWZhdWx0IGhlYWRlciB0ZW1wbGF0ZQorICAgIHB1
c2goQGltcGxDb250ZW50SGVhZGVyLCBHZW5lcmF0ZUltcGxlbWVudGF0aW9uQ29udGVudEhlYWRl
cigkZGF0YU5vZGUpKTsKKworICAgIEFkZEluY2x1ZGVzRm9yU1ZHQW5pbWF0ZWRUeXBlKCRpbnRl
cmZhY2VOYW1lKSBpZiAkY2xhc3NOYW1lID1+IC9eSlNTVkdBbmltYXRlZC87CisKKyAgICAkaW1w
bEluY2x1ZGVzeyI8d3RmL0dldFB0ci5oPiJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyI8cnVu
dGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5oPiJ9ID0gMSBpZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJIYXNJbmRleEdldHRlciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57Ikhhc0N1c3RvbUluZGV4R2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiSGFzTnVtZXJpY0luZGV4R2V0dGVyIn07CisKKyAgICBBZGRJbmNsdWRlc0ZvclR5
cGVJbkltcGwoJGludGVyZmFjZU5hbWUpOworCisgICAgQGltcGxDb250ZW50ID0gKCk7CisKKyAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIlxudXNpbmcgbmFtZXNwYWNlIEpTQztcblxuIik7CisgICAg
cHVzaChAaW1wbENvbnRlbnQsICJuYW1lc3BhY2UgV2ViQ29yZSB7XG5cbiIpOworCisgICAgcHVz
aChAaW1wbENvbnRlbnQsICJBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKCRjbGFzc05hbWUpO1xu
Iik7CisgICAgaWYgKCRpbnRlcmZhY2VOYW1lIG5lICJET01XaW5kb3ciICYmICEkZGF0YU5vZGUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJc1dvcmtlckNvbnRleHQifSkgeworICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIkFTU0VSVF9IQVNfVFJJVklBTF9ERVNUUlVDVE9SKCRjbGFzc05hbWUp
O1xuXG4iKTsKKyAgICB9CisKKyAgICBteSAkbnVtQXR0cmlidXRlcyA9IEdlbmVyYXRlQXR0cmli
dXRlc0hhc2hUYWJsZSgkb2JqZWN0LCAkZGF0YU5vZGUpOworCisgICAgbXkgJG51bUNvbnN0YW50
cyA9IEB7JGRhdGFOb2RlLT5jb25zdGFudHN9OworICAgIG15ICRudW1GdW5jdGlvbnMgPSBAeyRk
YXRhTm9kZS0+ZnVuY3Rpb25zfTsKKworICAgICMgLSBBZGQgYWxsIGNvbnN0YW50cworICAgIGlm
ICghJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiT21pdENvbnN0cnVjdG9yIn0pIHsK
KyAgICAgICAgbXkgJGhhc2hTaXplID0gJG51bUNvbnN0YW50czsKKyAgICAgICAgbXkgJGhhc2hO
YW1lID0gJGNsYXNzTmFtZSAuICJDb25zdHJ1Y3RvclRhYmxlIjsKKworICAgICAgICBteSBAaGFz
aEtleXMgPSAoKTsKKyAgICAgICAgbXkgQGhhc2hWYWx1ZTEgPSAoKTsKKyAgICAgICAgbXkgQGhh
c2hWYWx1ZTIgPSAoKTsKKyAgICAgICAgbXkgQGhhc2hTcGVjaWFscyA9ICgpOworICAgICAgICBt
eSAlY29uZGl0aW9uYWxzID0gKCk7CisKKyAgICAgICAgIyBGSVhNRTogd2Ugc2hvdWxkIG5vdCBu
ZWVkIGEgZnVuY3Rpb24gZm9yIGV2ZXJ5IGNvbnN0YW50LgorICAgICAgICBmb3JlYWNoIG15ICRj
b25zdGFudCAoQHskZGF0YU5vZGUtPmNvbnN0YW50c30pIHsKKyAgICAgICAgICAgIG15ICRuYW1l
ID0gJGNvbnN0YW50LT5uYW1lOworICAgICAgICAgICAgcHVzaChAaGFzaEtleXMsICRuYW1lKTsK
KyAgICAgICAgICAgIG15ICRnZXR0ZXIgPSAianMiIC4gJGludGVyZmFjZU5hbWUgLiAkY29kZUdl
bmVyYXRvci0+V0tfdWNmaXJzdCgkbmFtZSk7CisgICAgICAgICAgICBwdXNoKEBoYXNoVmFsdWUx
LCAkZ2V0dGVyKTsKKyAgICAgICAgICAgIHB1c2goQGhhc2hWYWx1ZTIsICIwIik7CisgICAgICAg
ICAgICBwdXNoKEBoYXNoU3BlY2lhbHMsICJEb250RGVsZXRlIHwgUmVhZE9ubHkiKTsKKworICAg
ICAgICAgICAgbXkgJGNvbmRpdGlvbmFsID0gJGNvbnN0YW50LT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiQ29uZGl0aW9uYWwifTsKKyAgICAgICAgICAgIGlmICgkY29uZGl0aW9uYWwpIHsKKyAgICAg
ICAgICAgICAgICAkY29uZGl0aW9uYWxzeyRuYW1lfSA9ICRjb25kaXRpb25hbDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChAeyRkYXRh
Tm9kZS0+ZnVuY3Rpb25zfSkgeworICAgICAgICAgICAgbmV4dCB1bmxlc3MgKCRmdW5jdGlvbi0+
aXNTdGF0aWMpOworICAgICAgICAgICAgbmV4dCBpZiAkZnVuY3Rpb24tPntvdmVybG9hZEluZGV4
fSAmJiAkZnVuY3Rpb24tPntvdmVybG9hZEluZGV4fSA+IDE7CisgICAgICAgICAgICBteSAkbmFt
ZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lOworICAgICAgICAgICAgcHVzaChAaGFzaEtl
eXMsICRuYW1lKTsKKworICAgICAgICAgICAgbXkgJGZ1bmN0aW9uTmFtZSA9IEdldEZ1bmN0aW9u
TmFtZSgkY2xhc3NOYW1lLCAkZnVuY3Rpb24pOworICAgICAgICAgICAgcHVzaChAaGFzaFZhbHVl
MSwgJGZ1bmN0aW9uTmFtZSk7CisKKyAgICAgICAgICAgIG15ICRudW1QYXJhbWV0ZXJzID0gQHsk
ZnVuY3Rpb24tPnBhcmFtZXRlcnN9OworICAgICAgICAgICAgcHVzaChAaGFzaFZhbHVlMiwgJG51
bVBhcmFtZXRlcnMpOworCisgICAgICAgICAgICBteSBAc3BlY2lhbHMgPSAoKTsKKyAgICAgICAg
ICAgIHB1c2goQHNwZWNpYWxzLCAiRG9udERlbGV0ZSIpIHVubGVzcyAkZnVuY3Rpb24tPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkRlbGV0YWJsZSJ9OworICAgICAgICAgICAgcHVz
aChAc3BlY2lhbHMsICJEb250RW51bSIpIGlmICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiRG9udEVudW0ifTsKKyAgICAgICAgICAgIHB1c2goQHNwZWNpYWxzLCAi
SlNDOjpGdW5jdGlvbiIpOworICAgICAgICAgICAgbXkgJHNwZWNpYWwgPSAoQHNwZWNpYWxzID4g
MCkgPyBqb2luKCIgfCAiLCBAc3BlY2lhbHMpIDogIjAiOworICAgICAgICAgICAgcHVzaChAaGFz
aFNwZWNpYWxzLCAkc3BlY2lhbCk7CisKKyAgICAgICAgICAgIG15ICRjb25kaXRpb25hbCA9ICRm
dW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uZGl0aW9uYWwifTsK
KyAgICAgICAgICAgIGlmICgkY29uZGl0aW9uYWwpIHsKKyAgICAgICAgICAgICAgICAkY29uZGl0
aW9uYWxzeyRuYW1lfSA9ICRjb25kaXRpb25hbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgICRvYmplY3QtPkdlbmVyYXRlSGFzaFRhYmxlKCRoYXNoTmFtZSwgJGhhc2hTaXpl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcQGhhc2hLZXlzLCBcQGhhc2hT
cGVjaWFscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXEBoYXNoVmFsdWUx
LCBcQGhhc2hWYWx1ZTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwlY29u
ZGl0aW9uYWxzKTsKKworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGNvZGVHZW5lcmF0b3It
PkdlbmVyYXRlQ29tcGlsZVRpbWVDaGVja0ZvckVudW1zSWZOZWVkZWQoJGRhdGFOb2RlKSk7CisK
KyAgICAgICAgbXkgJHByb3RvQ2xhc3NOYW1lID0gIiR7Y2xhc3NOYW1lfVByb3RvdHlwZSI7Cisg
ICAgICAgIEdlbmVyYXRlQ29uc3RydWN0b3JEZWZpbml0aW9uKFxAaW1wbENvbnRlbnQsICRjbGFz
c05hbWUsICRwcm90b0NsYXNzTmFtZSwgJGludGVyZmFjZU5hbWUsICR2aXNpYmxlQ2xhc3NOYW1l
LCAkZGF0YU5vZGUpOworICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiTmFtZWRDb25zdHJ1Y3RvciJ9KSB7CisgICAgICAgICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9y
RGVmaW5pdGlvbihcQGltcGxDb250ZW50LCAkY2xhc3NOYW1lLCAkcHJvdG9DbGFzc05hbWUsICRp
bnRlcmZhY2VOYW1lLCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZENvbnN0
cnVjdG9yIn0sICRkYXRhTm9kZSwgIkdlbmVyYXRpbmdOYW1lZENvbnN0cnVjdG9yIik7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAjIC0gQWRkIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzIHRvIGEg
aGFzaHRhYmxlIGRlZmluaXRpb24KKyAgICBteSAkaGFzaFNpemUgPSAkbnVtRnVuY3Rpb25zICsg
JG51bUNvbnN0YW50czsKKyAgICBteSAkaGFzaE5hbWUgPSAkY2xhc3NOYW1lIC4gIlByb3RvdHlw
ZVRhYmxlIjsKKworICAgIG15IEBoYXNoS2V5cyA9ICgpOworICAgIG15IEBoYXNoVmFsdWUxID0g
KCk7CisgICAgbXkgQGhhc2hWYWx1ZTIgPSAoKTsKKyAgICBteSBAaGFzaFNwZWNpYWxzID0gKCk7
CisgICAgbXkgJWNvbmRpdGlvbmFscyA9ICgpOworCisgICAgIyBGSVhNRTogd2Ugc2hvdWxkIG5v
dCBuZWVkIGEgZnVuY3Rpb24gZm9yIGV2ZXJ5IGNvbnN0YW50LgorICAgIGZvcmVhY2ggbXkgJGNv
bnN0YW50IChAeyRkYXRhTm9kZS0+Y29uc3RhbnRzfSkgeworICAgICAgICBteSAkbmFtZSA9ICRj
b25zdGFudC0+bmFtZTsKKyAgICAgICAgcHVzaChAaGFzaEtleXMsICRuYW1lKTsKKyAgICAgICAg
bXkgJGdldHRlciA9ICJqcyIgLiAkaW50ZXJmYWNlTmFtZSAuICRjb2RlR2VuZXJhdG9yLT5XS191
Y2ZpcnN0KCRuYW1lKTsKKyAgICAgICAgcHVzaChAaGFzaFZhbHVlMSwgJGdldHRlcik7CisgICAg
ICAgIHB1c2goQGhhc2hWYWx1ZTIsICIwIik7CisgICAgICAgIHB1c2goQGhhc2hTcGVjaWFscywg
IkRvbnREZWxldGUgfCBSZWFkT25seSIpOworCisgICAgICAgIG15ICRjb25kaXRpb25hbCA9ICRj
b25zdGFudC0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbmRpdGlvbmFsIn07CisgICAgICAgIGlm
ICgkY29uZGl0aW9uYWwpIHsKKyAgICAgICAgICAgICRjb25kaXRpb25hbHN7JG5hbWV9ID0gJGNv
bmRpdGlvbmFsOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yZWFjaCBteSAkZnVuY3Rpb24g
KEB7JGRhdGFOb2RlLT5mdW5jdGlvbnN9KSB7CisgICAgICAgIG5leHQgaWYgKCRmdW5jdGlvbi0+
aXNTdGF0aWMpOworICAgICAgICBuZXh0IGlmICRmdW5jdGlvbi0+e292ZXJsb2FkSW5kZXh9ICYm
ICRmdW5jdGlvbi0+e292ZXJsb2FkSW5kZXh9ID4gMTsKKyAgICAgICAgbXkgJG5hbWUgPSAkZnVu
Y3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsKKyAgICAgICAgcHVzaChAaGFzaEtleXMsICRuYW1lKTsK
KworICAgICAgICBteSAkZnVuY3Rpb25OYW1lID0gR2V0RnVuY3Rpb25OYW1lKCRjbGFzc05hbWUs
ICRmdW5jdGlvbik7CisgICAgICAgIHB1c2goQGhhc2hWYWx1ZTEsICRmdW5jdGlvbk5hbWUpOwor
CisgICAgICAgIG15ICRudW1QYXJhbWV0ZXJzID0gQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9Owor
ICAgICAgICBwdXNoKEBoYXNoVmFsdWUyLCAkbnVtUGFyYW1ldGVycyk7CisKKyAgICAgICAgbXkg
QHNwZWNpYWxzID0gKCk7CisgICAgICAgIHB1c2goQHNwZWNpYWxzLCAiRG9udERlbGV0ZSIpIHVu
bGVzcyAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkRlbGV0YWJs
ZSJ9OworICAgICAgICBwdXNoKEBzcGVjaWFscywgIkRvbnRFbnVtIikgaWYgJGZ1bmN0aW9uLT5z
aWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJEb250RW51bSJ9OworICAgICAgICBwdXNo
KEBzcGVjaWFscywgIkpTQzo6RnVuY3Rpb24iKTsKKyAgICAgICAgbXkgJHNwZWNpYWwgPSAoQHNw
ZWNpYWxzID4gMCkgPyBqb2luKCIgfCAiLCBAc3BlY2lhbHMpIDogIjAiOworICAgICAgICBwdXNo
KEBoYXNoU3BlY2lhbHMsICRzcGVjaWFsKTsKKworICAgICAgICBteSAkY29uZGl0aW9uYWwgPSAk
ZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbmRpdGlvbmFsIn07
CisgICAgICAgIGlmICgkY29uZGl0aW9uYWwpIHsKKyAgICAgICAgICAgICRjb25kaXRpb25hbHN7
JG5hbWV9ID0gJGNvbmRpdGlvbmFsOworICAgICAgICB9CisgICAgfQorCisgICAgJG9iamVjdC0+
R2VuZXJhdGVIYXNoVGFibGUoJGhhc2hOYW1lLCAkaGFzaFNpemUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXEBoYXNoS2V5cywgXEBoYXNoU3BlY2lhbHMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXEBoYXNoVmFsdWUxLCBcQGhhc2hWYWx1ZTIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXCVjb25kaXRpb25hbHMpOworCisgICAgaWYgKCRkYXRhTm9k
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5vU3RhdGljVGFibGVzIn0pIHsKKyAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBnZXQke2NsYXNzTmFtZX1Q
cm90b3R5cGVUYWJsZShFeGVjU3RhdGUqIGV4ZWMpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIGdl
dEhhc2hUYWJsZUZvckdsb2JhbERhdGEoZXhlYy0+Z2xvYmFsRGF0YSgpLCAmJHtjbGFzc05hbWV9
UHJvdG90eXBlVGFibGUpO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4i
KTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJjb25zdCBDbGFzc0luZm8gJHtjbGFzc05h
bWV9UHJvdG90eXBlOjpzX2luZm8gPSB7IFwiJHt2aXNpYmxlQ2xhc3NOYW1lfVByb3RvdHlwZVwi
LCAmQmFzZTo6c19pbmZvLCAwLCBnZXQke2NsYXNzTmFtZX1Qcm90b3R5cGVUYWJsZSwgQ1JFQVRF
X01FVEhPRF9UQUJMRSgke2NsYXNzTmFtZX1Qcm90b3R5cGUpIH07XG5cbiIpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiY29uc3QgQ2xhc3NJbmZvICR7Y2xhc3NO
YW1lfVByb3RvdHlwZTo6c19pbmZvID0geyBcIiR7dmlzaWJsZUNsYXNzTmFtZX1Qcm90b3R5cGVc
IiwgJkJhc2U6OnNfaW5mbywgJiR7Y2xhc3NOYW1lfVByb3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKCR7Y2xhc3NOYW1lfVByb3RvdHlwZSkgfTtcblxuIik7CisgICAgfQorICAg
IGlmICgkaW50ZXJmYWNlTmFtZSBuZSAiRE9NV2luZG93IiAmJiAhJGRhdGFOb2RlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiSXNXb3JrZXJDb250ZXh0In0pIHsKKyAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJKU09iamVjdCogJHtjbGFzc05hbWV9UHJvdG90eXBlOjpzZWxmKEV4ZWNTdGF0ZSog
ZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdClcbiIpOworICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIntcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1
cm4gZ2V0RE9NUHJvdG90eXBlPCR7Y2xhc3NOYW1lfT4oZXhlYywgZ2xvYmFsT2JqZWN0KTtcbiIp
OworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisgICAgfQorCisgICAgaWYg
KCRudW1Db25zdGFudHMgPiAwIHx8ICRudW1GdW5jdGlvbnMgPiAwIHx8ICRkYXRhTm9kZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkRlbGVnYXRpbmdQcm90b3R5cGVHZXRPd25Qcm9wZXJ0eVNsb3Qi
fSkgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgJHtjbGFzc05hbWV9UHJvdG90
eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KVxuIik7Cisg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICR7Y2xhc3NOYW1lfVByb3RvdHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDwke2Ns
YXNzTmFtZX1Qcm90b3R5cGUqPihjZWxsKTtcbiIpOworCisgICAgICAgIGlmICgkZGF0YU5vZGUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJEZWxlZ2F0aW5nUHJvdG90eXBlR2V0T3duUHJvcGVydHlT
bG90In0pIHsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICh0aGlzT2Jq
ZWN0LT5nZXRPd25Qcm9wZXJ0eVNsb3REZWxlZ2F0ZShleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
KVxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRy
dWU7XG4iKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgkbnVtQ29uc3RhbnRzIGVxIDAgJiYg
JG51bUZ1bmN0aW9ucyBlcSAwKSB7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgc2xvdCk7XG4iKTsgICAgICAgIAorICAgICAgICB9IGVsc2lmICgkbnVtQ29uc3Rh
bnRzIGVxIDApIHsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBn
ZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNPYmplY3Q+KGV4ZWMsICIgLiBwcm90b3R5cGVIYXNoVGFi
bGVBY2Nlc3NvcigkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOb1N0YXRpY1RhYmxl
cyJ9LCAkY2xhc3NOYW1lKSAuICIsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7XG4i
KTsKKyAgICAgICAgfSBlbHNpZiAoJG51bUZ1bmN0aW9ucyBlcSAwKSB7CisgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PCR7Y2xhc3NO
YW1lfVByb3RvdHlwZSwgSlNPYmplY3Q+KGV4ZWMsICIgLiBwcm90b3R5cGVIYXNoVGFibGVBY2Nl
c3NvcigkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOb1N0YXRpY1RhYmxlcyJ9LCAk
Y2xhc3NOYW1lKSAuICIsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7XG4iKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVy
biBnZXRTdGF0aWNQcm9wZXJ0eVNsb3Q8JHtjbGFzc05hbWV9UHJvdG90eXBlLCBKU09iamVjdD4o
ZXhlYywgIiAuIHByb3RvdHlwZUhhc2hUYWJsZUFjY2Vzc29yKCRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57Ik5vU3RhdGljVGFibGVzIn0sICRjbGFzc05hbWUpIC4gIiwgdGhpc09iamVj
dCwgcHJvcGVydHlOYW1lLCBzbG90KTtcbiIpOworICAgICAgICB9CisgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAifVxuXG4iKTsKKworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wg
JHtjbGFzc05hbWV9UHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcilcbiIpOworICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIntcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAke2NsYXNz
TmFtZX1Qcm90b3R5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9UHJvdG90eXBl
Kj4ob2JqZWN0KTtcbiIpOworCisgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJEZWxlZ2F0aW5nUHJvdG90eXBlR2V0T3duUHJvcGVydHlTbG90In0pIHsKKyAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICh0aGlzT2JqZWN0LT5nZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3JEZWxlZ2F0ZShleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpKVxu
Iik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRydWU7
XG4iKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCRudW1Db25zdGFudHMgZXEg
MCAmJiAkbnVtRnVuY3Rpb25zIGVxIDApIHsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTtcbiIpOyAgICAgICAgCisgICAgICAgIH0g
ZWxzaWYgKCRudW1Db25zdGFudHMgZXEgMCkgeworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxKU09iamVjdD4oZXhl
YywgIiAuIHByb3RvdHlwZUhhc2hUYWJsZUFjY2Vzc29yKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57Ik5vU3RhdGljVGFibGVzIn0sICRjbGFzc05hbWUpIC4gIiwgdGhpc09iamVjdCwg
cHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTtcbiIpOworICAgICAgICB9IGVsc2lmICgkbnVtRnVu
Y3Rpb25zIGVxIDApIHsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVy
biBnZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8JHtjbGFzc05hbWV9UHJvdG90eXBlLCBKU09iamVj
dD4oZXhlYywgIiAuIHByb3RvdHlwZUhhc2hUYWJsZUFjY2Vzc29yKCRkYXRhTm9kZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Ik5vU3RhdGljVGFibGVzIn0sICRjbGFzc05hbWUpIC4gIiwgdGhpc09i
amVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTtcbiIpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIGdldFN0YXRpY1Byb3Bl
cnR5RGVzY3JpcHRvcjwke2NsYXNzTmFtZX1Qcm90b3R5cGUsIEpTT2JqZWN0PihleGVjLCAiIC4g
cHJvdG90eXBlSGFzaFRhYmxlQWNjZXNzb3IoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiTm9TdGF0aWNUYWJsZXMifSwgJGNsYXNzTmFtZSkgLiAiLCB0aGlzT2JqZWN0LCBwcm9wZXJ0
eU5hbWUsIGRlc2NyaXB0b3IpO1xuIik7CisgICAgICAgIH0KKyAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ9XG5cbiIpOworICAgIH0KKworICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJEZWxlZ2F0aW5nUHJvdG90eXBlUHV0RnVuY3Rpb24ifSkgeworICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9UHJvdG90eXBlOjpwdXQoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KVxuIik7CisgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAie1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7
Y2xhc3NOYW1lfVByb3RvdHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX1Qcm90
b3R5cGUqPihjZWxsKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAo
dGhpc09iamVjdC0+cHV0RGVsZWdhdGUoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkp
XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybjtcbiIpOwor
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ9XG5cbiIpOworICAgIH0KKworICAgICMgLSBJbml0aWFsaXplIHN0YXRpYyBDbGFz
c0luZm8gb2JqZWN0CisgICAgaWYgKCRudW1BdHRyaWJ1dGVzID4gMCAmJiAkZGF0YU5vZGUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJOb1N0YXRpY1RhYmxlcyJ9KSB7CisgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAic3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZ2V0JHtjbGFzc05hbWV9VGFibGUo
RXhlY1N0YXRlKiBleGVjKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7
CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBnZXRIYXNoVGFibGVGb3JH
bG9iYWxEYXRhKGV4ZWMtPmdsb2JhbERhdGEoKSwgJiR7Y2xhc3NOYW1lfVRhYmxlKTtcbiIpOwor
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisgICAgfQorCisgICAgcHVzaChA
aW1wbENvbnRlbnQsICJjb25zdCBDbGFzc0luZm8gJGNsYXNzTmFtZSIgLiAiOjpzX2luZm8gPSB7
IFwiJHt2aXNpYmxlQ2xhc3NOYW1lfVwiLCAmQmFzZTo6c19pbmZvLCAiKTsKKworICAgIGlmICgk
bnVtQXR0cmlidXRlcyA+IDAgJiYgISRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5v
U3RhdGljVGFibGVzIn0pIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICImJHtjbGFzc05h
bWV9VGFibGUiKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIjAi
KTsKKyAgICB9CisgICAgaWYgKCRudW1BdHRyaWJ1dGVzID4gMCAmJiAkZGF0YU5vZGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJOb1N0YXRpY1RhYmxlcyJ9KSB7CisgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiLCBnZXQke2NsYXNzTmFtZX1UYWJsZSAiKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiwgMCAiKTsKKyAgICB9CisgICAgcHVzaChAaW1wbENvbnRl
bnQsICIsIENSRUFURV9NRVRIT0RfVEFCTEUoJGNsYXNzTmFtZSkgfTtcblxuIik7CisKKyAgICBt
eSAkaW1wbFR5cGUgPSAkaW1wbENsYXNzTmFtZTsKKyAgICBteSAoJHN2Z1Byb3BlcnR5VHlwZSwg
JHN2Z0xpc3RQcm9wZXJ0eVR5cGUsICRzdmdOYXRpdmVUeXBlKSA9IEdldFNWR1Byb3BlcnR5VHlw
ZXMoJGltcGxUeXBlKTsKKyAgICAkaW1wbFR5cGUgPSAkc3ZnTmF0aXZlVHlwZSBpZiAkc3ZnTmF0
aXZlVHlwZTsKKworICAgIG15ICRzdmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5VHlwZTsKKyAgICAk
c3ZnUHJvcGVydHlPckxpc3RQcm9wZXJ0eVR5cGUgPSAkc3ZnUHJvcGVydHlUeXBlIGlmICRzdmdQ
cm9wZXJ0eVR5cGU7CisgICAgJHN2Z1Byb3BlcnR5T3JMaXN0UHJvcGVydHlUeXBlID0gJHN2Z0xp
c3RQcm9wZXJ0eVR5cGUgaWYgJHN2Z0xpc3RQcm9wZXJ0eVR5cGU7CisKKyAgICAjIENvbnN0cnVj
dG9yCisgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7CisgICAgICAgIEFk
ZEluY2x1ZGVzRm9yVHlwZUluSW1wbCgiSlNET01XaW5kb3dTaGVsbCIpOworICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiR7Y2xhc3NOYW1lfTo6JGNsYXNzTmFtZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPCRpbXBsVHlwZT4gaW1w
bCwgSlNET01XaW5kb3dTaGVsbCogc2hlbGwpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgOiAkcGFyZW50Q2xhc3NOYW1lKGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgaW1wbCwg
c2hlbGwpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworICAgIH0gZWxzaWYgKCRkYXRhTm9kZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IklzV29ya2VyQ29udGV4dCJ9KSB7CisgICAgICAgIEFkZEluY2x1
ZGVzRm9yVHlwZUluSW1wbCgkaW50ZXJmYWNlTmFtZSk7CisgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiJHtjbGFzc05hbWV9OjokY2xhc3NOYW1lKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8JGltcGxUeXBlPiBpbXBsKVxuIik7Cisg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIDogJHBhcmVudENsYXNzTmFtZShnbG9iYWxE
YXRhLCBzdHJ1Y3R1cmUsIGltcGwpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7
XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworICAgIH0gZWxzZSB7
CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtjbGFzc05hbWV9OjokY2xhc3NOYW1lKFN0
cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNz
UmVmUHRyPCRpbXBsVHlwZT4gaW1wbClcbiIpOworICAgICAgICBpZiAoJGhhc1BhcmVudCkgewor
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgOiAkcGFyZW50Q2xhc3NOYW1lKHN0
cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKVxuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICA6ICRwYXJlbnRDbGFzc05hbWUoc3RydWN0
dXJlLCBnbG9iYWxPYmplY3QpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICwgbV9pbXBsKGltcGwubGVha1JlZigpKVxuIik7CisgICAgICAgIH0KKyAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5c
biIpOworCisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OmZp
bmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSlcbiIpOworICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIntcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTtcbiIpOworICAgICAgICBpZiAoSXNUeXBl
ZEFycmF5VHlwZSgkaW1wbFR5cGUpIGFuZCAoJGltcGxUeXBlIG5lICJBcnJheUJ1ZmZlclZpZXci
KSBhbmQgKCRpbXBsVHlwZSBuZSAiQXJyYXlCdWZmZXIiKSkgeworICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgZGVzY3JpcHRvcigmJHtjbGFz
c05hbWV9OjpzX2luZm8sIE9CSkVDVF9PRkZTRVRPRigke2NsYXNzTmFtZX0sIG1fc3RvcmFnZSks
IE9CSkVDVF9PRkZTRVRPRigke2NsYXNzTmFtZX0sIG1fc3RvcmFnZUxlbmd0aCkpO1xuIik7Cisg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBnbG9iYWxEYXRhLnJlZ2lzdGVyVHlw
ZWRBcnJheURlc2NyaXB0b3IoaW1wbCgpLCBkZXNjcmlwdG9yKTtcbiIpOworICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgbV9zdG9yYWdlID0gaW1wbCgpLT5kYXRhKCk7XG4iKTsK
KyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIG1fc3RvcmFnZUxlbmd0aCA9IGlt
cGwoKS0+bGVuZ3RoKCk7XG4iKTsKKyAgICAgICAgfQorICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpO1xuIik7CisgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAifVxuXG4iKTsKKyAgICB9CisKKyAgICBpZiAoISRkYXRhTm9kZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkV4dGVuZHNET01HbG9iYWxPYmplY3QifSkgeworICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIkpTT2JqZWN0KiAke2NsYXNzTmFtZX06OmNyZWF0ZVByb3RvdHlwZShF
eGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpXG4iKTsKKyAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICAgICAgaWYgKCRoYXNQYXJlbnQgJiYg
JHBhcmVudENsYXNzTmFtZSBuZSAiSlNDOjpET01Ob2RlRmlsdGVyIikgeworICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6Y3Jl
YXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCAke2NsYXNzTmFtZX1Qcm90b3R5
cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgJHtw
YXJlbnRDbGFzc05hbWV9UHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCkpKTtcbiIp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
cmV0dXJuICR7Y2xhc3NOYW1lfVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
Z2xvYmFsT2JqZWN0LCAke2NsYXNzTmFtZX1Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShnbG9i
YWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVj
dFByb3RvdHlwZSgpKSk7XG4iKTsKKyAgICAgICAgfQorICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIn1cblxuIik7CisgICAgfQorCisgICAgbXkgJGhhc0dldHRlciA9ICRudW1BdHRyaWJ1dGVz
ID4gMCAKKyAgICAgICAgICAgICAgICAgfHwgISRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57Ik9taXRDb25zdHJ1Y3RvciJ9IAorICAgICAgICAgICAgICAgICB8fCAkZGF0YU5vZGUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNJbmRleEdldHRlciJ9CisgICAgICAgICAgICAgICAgIHx8
ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc0N1c3RvbUluZGV4R2V0dGVyIn0K
KyAgICAgICAgICAgICAgICAgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFz
TnVtZXJpY0luZGV4R2V0dGVyIn0KKyAgICAgICAgICAgICAgICAgfHwgJGRhdGFOb2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiRGVsZWdhdGluZ0dldE93blByb3BlcnR5U2xvdCJ9CisgICAgICAg
ICAgICAgICAgIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUdldE93
blByb3BlcnR5U2xvdCJ9CisgICAgICAgICAgICAgICAgIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57Ikhhc05hbWVHZXR0ZXIifQorICAgICAgICAgICAgICAgICB8fCAkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNPdmVycmlkaW5nTmFtZUdldHRlciJ9OworCisg
ICAgIyBBdHRyaWJ1dGVzCisgICAgaWYgKCRoYXNHZXR0ZXIpIHsKKyAgICAgICAgaWYgKCEkZGF0
YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QifSAm
JiAhJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tR2V0T3duUHJvcGVydHlT
bG90In0pIHsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiYm9vbCAke2NsYXNzTmFt
ZX06OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpXG4iKTsKKyAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAke2NsYXNzTmFtZX0qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFz
c05hbWV9Kj4oY2VsbCk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7XG4iKTsKKyAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCBHZW5lcmF0ZUdldE93blByb3BlcnR5U2xvdEJv
ZHkoJGRhdGFOb2RlLCAkaW50ZXJmYWNlTmFtZSwgJGNsYXNzTmFtZSwgJGltcGxDbGFzc05hbWUs
ICRudW1BdHRyaWJ1dGVzID4gMCwgMCkpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ9XG5cbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJib29sICR7Y2xhc3NO
YW1lfTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xu
Iik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAke2NsYXNzTmFtZX0qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4ob2JqZWN0KTtcbiIpOworICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCAmc19pbmZvKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIEdl
bmVyYXRlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yQm9keSgkZGF0YU5vZGUsICRpbnRlcmZhY2VO
YW1lLCAkY2xhc3NOYW1lLCAkaW1wbENsYXNzTmFtZSwgJG51bUF0dHJpYnV0ZXMgPiAwLCAwKSk7
CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc0luZGV4R2V0
dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzQ3VzdG9tSW5kZXhH
ZXR0ZXIifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNOdW1lcmljSW5k
ZXhHZXR0ZXIifSkgCisgICAgICAgICAgICAgICAgJiYgISRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57Ikhhc092ZXJyaWRpbmdOYW1lR2V0dGVyIn0pIHsKKyAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiYm9vbCAke2NsYXNzTmFtZX06OmdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90JiBzbG90KVxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IntcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9
KiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xuIik7CisgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsICZzX2luZm8pO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBpZiAocHJvcGVydHlOYW1lIDwgc3RhdGljX2Nhc3Q8JGltcGxDbGFzc05hbWUqPih0aGlz
T2JqZWN0LT5pbXBsKCkpLT5sZW5ndGgoKSkge1xuIik7CisgICAgICAgICAgICBpZiAoJGRhdGFO
b2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzQ3VzdG9tSW5kZXhHZXR0ZXIifSB8fCAkZGF0
YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNOdW1lcmljSW5kZXhHZXR0ZXIifSkgewor
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBzbG90LnNldFZhbHVl
KHRoaXNPYmplY3QtPmdldEJ5SW5kZXgoZXhlYywgcHJvcGVydHlOYW1lKSk7XG4iKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCB0aGlzT2Jq
ZWN0LT5pbmRleEdldHRlcik7XG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOworICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgfVxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlT
bG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1l
KSwgc2xvdCk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCRudW1BdHRyaWJ1dGVzID4gMCkgewor
ICAgICAgICAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRkYXRhTm9kZS0+YXR0cmlidXRl
c30pIHsKKyAgICAgICAgICAgICAgICBteSAkbmFtZSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+
bmFtZTsKKyAgICAgICAgICAgICAgICBteSAkdHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1v
ZHVsZSgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUpOworICAgICAgICAgICAgICAgIG15ICRn
ZXRGdW5jdGlvbk5hbWUgPSAianMiIC4gJGludGVyZmFjZU5hbWUgLiAgJGNvZGVHZW5lcmF0b3It
PldLX3VjZmlyc3QoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lKSAuICgkYXR0cmlidXRlLT5z
aWduYXR1cmUtPnR5cGUgPX4gL0NvbnN0cnVjdG9yJC8gPyAiQ29uc3RydWN0b3IiIDogIiIpOwor
ICAgICAgICAgICAgICAgIG15ICRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lID0gJGNvZGVHZW5lcmF0
b3ItPldLX2xjZmlyc3QoJG5hbWUpOworCisgICAgICAgICAgICAgICAgbXkgJGF0dHJpYnV0ZUNv
bmRpdGlvbmFsU3RyaW5nID0gR2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygkYXR0cmlidXRlLT5z
aWduYXR1cmUpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2lmICR7YXR0
cmlidXRlQ29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkYXR0cmlidXRlQ29uZGl0aW9uYWxTdHJp
bmc7CisKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTVmFsdWUgJHtnZXRG
dW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRl
bnRpZmllciYpXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIp
OworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7Y2xhc3NOYW1lfSog
Y2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PCRjbGFzc05hbWUqPihhc09iamVjdChzbG90QmFzZSkp
O1xuIik7CisKKyAgICAgICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiQ2FjaGVkQXR0cmlidXRlIn0pIHsKKyAgICAgICAgICAgICAgICAg
ICAgJG5lZWRzTWFya0NoaWxkcmVuID0gMTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2hlY2tEb21haW5T
ZWN1cml0eSJ9ICYmIAorICAgICAgICAgICAgICAgICAgICAgICAgISRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkRvTm90Q2hlY2tEb21haW5TZWN1cml0eSJ9ICYm
CisgICAgICAgICAgICAgICAgICAgICAgICAhJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiRG9Ob3RDaGVja0RvbWFpblNlY3VyaXR5T25HZXQifSkgeworICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIWNhc3RlZFRoaXMtPmFs
bG93c0FjY2Vzc0Zyb20oZXhlYykpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpO1xuIik7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbSJ9IHx8ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ0N1c3RvbSJ9IHx8ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUdldHRlciJ9IHx8ICRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ0N1c3RvbUdldHRlciJ9KSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJJbXBsZW1lbnRlZEJ5In0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICR7aW50ZXJmYWNlTmFtZX0qIGltcGwgPSBzdGF0aWNfY2FzdDwke2lu
dGVyZmFjZU5hbWV9Kj4oY2FzdGVkVGhpcy0+aW1wbCgpKTtcbiIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIGNhc3RlZFRoaXMtPiRpbXBs
R2V0dGVyRnVuY3Rpb25OYW1lKGltcGwsIGV4ZWMpO1xuIik7CisgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICByZXR1cm4gY2FzdGVkVGhpcy0+JGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoZXhlYyk7XG4iKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1
dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNoZWNrTm9kZVNlY3VyaXR5In0p
IHsKKyAgICAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siSlNET01CaW5kaW5nLmgifSA9
IDE7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRpbXBsQ2xh
c3NOYW1lKiBpbXBsID0gc3RhdGljX2Nhc3Q8JGltcGxDbGFzc05hbWUqPihjYXN0ZWRUaGlzLT5p
bXBsKCkpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IHJldHVybiBjaGVja05vZGVTZWN1cml0eShleGVjLCBpbXBsLT4kaW1wbEdldHRlckZ1bmN0aW9u
TmFtZSgpKSA/ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAk
aW1wbENsYXNzTmFtZSwgImltcGwtPiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCkiLCAiY2FzdGVk
VGhpcyIpIC4gIiA6IGpzVW5kZWZpbmVkKCk7XG4iKTsKKyAgICAgICAgICAgICAgICB9IGVsc2lm
ICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDaGVja0ZyYW1l
U2VjdXJpdHkifSkgeworICAgICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJEb2N1bWVu
dC5oIn0gPSAxOworICAgICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJKU0RPTUJpbmRp
bmcuaCJ9ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
JGltcGxDbGFzc05hbWUqIGltcGwgPSBzdGF0aWNfY2FzdDwkaW1wbENsYXNzTmFtZSo+KGNhc3Rl
ZFRoaXMtPmltcGwoKSk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgcmV0dXJuIGNoZWNrTm9kZVNlY3VyaXR5KGV4ZWMsIGltcGwtPmNvbnRlbnREb2N1
bWVudCgpKSA/ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAk
aW1wbENsYXNzTmFtZSwgImltcGwtPiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCkiLCAiY2FzdGVk
VGhpcyIpIC4gIiA6IGpzVW5kZWZpbmVkKCk7XG4iKTsKKyAgICAgICAgICAgICAgICB9IGVsc2lm
ICgkdHlwZSBlcSAiRXZlbnRMaXN0ZW5lciIpIHsKKyAgICAgICAgICAgICAgICAgICAgJGltcGxJ
bmNsdWRlc3siRXZlbnRMaXN0ZW5lci5oIn0gPSAxOworICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0oZXhlYyk7XG4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGltcGxDbGFzc05hbWUqIGltcGwgPSBz
dGF0aWNfY2FzdDwkaW1wbENsYXNzTmFtZSo+KGNhc3RlZFRoaXMtPmltcGwoKSk7XG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKEV2ZW50TGlzdGVu
ZXIqIGxpc3RlbmVyID0gaW1wbC0+JGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoKSkge1xuIik7Cisg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBpZiAoY29uc3Qg
SlNFdmVudExpc3RlbmVyKiBqc0xpc3RlbmVyID0gSlNFdmVudExpc3RlbmVyOjpjYXN0KGxpc3Rl
bmVyKSkge1xuIik7CisgICAgICAgICAgICAgICAgICAgIGlmICgkaW1wbENsYXNzTmFtZSBlcSAi
RG9jdW1lbnQiIHx8ICRpbXBsQ2xhc3NOYW1lIGVxICJXb3JrZXJDb250ZXh0IiB8fCAkaW1wbENs
YXNzTmFtZSBlcSAiU2hhcmVkV29ya2VyQ29udGV4dCIgfHwgJGltcGxDbGFzc05hbWUgZXEgIkRl
ZGljYXRlZFdvcmtlckNvbnRleHQiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAgICAgICAgIGlmIChKU09iamVjdCoganNGdW5jdGlvbiA9IGpzTGlz
dGVuZXItPmpzRnVuY3Rpb24oaW1wbCkpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAg
ICAgaWYgKEpTT2JqZWN0KiBqc0Z1bmN0aW9uID0ganNMaXN0ZW5lci0+anNGdW5jdGlvbihpbXBs
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKVxuIik7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAgICAgICAg
cmV0dXJuIGpzRnVuY3Rpb247XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgIH1cbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICB9XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgcmV0dXJuIGpzTnVsbCgpO1xuIik7CisgICAgICAgICAgICAgICAgfSBlbHNpZiAoJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlID1+IC9Db25zdHJ1Y3RvciQvKSB7CisgICAgICAgICAg
ICAgICAgICAgIG15ICRjb25zdHJ1Y3RvclR5cGUgPSAkY29kZUdlbmVyYXRvci0+U3RyaXBNb2R1
bGUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgJGNv
bnN0cnVjdG9yVHlwZSA9fiBzL0NvbnN0cnVjdG9yJC8vOworICAgICAgICAgICAgICAgICAgICAj
IENvbnN0cnVjdG9yIGF0dHJpYnV0ZSBpcyBvbmx5IHVzZWQgYnkgRE9NV2luZG93LmlkbCwgc28g
aXQncyBjb3JyZWN0IHRvIHBhc3MgY2FzdGVkVGhpcyBhcyB0aGUgZ2xvYmFsIG9iamVjdAorICAg
ICAgICAgICAgICAgICAgICAjIE9uY2UgSlNET01XcmFwcGVycyBoYXZlIGEgYmFjay1wb2ludGVy
IHRvIHRoZSBnbG9iYWxPYmplY3Qgd2UgY2FuIHBhc3MgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCkKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpT
IiAuICRjb25zdHJ1Y3RvclR5cGUgLiAiOjpnZXRDb25zdHJ1Y3RvcihleGVjLCBjYXN0ZWRUaGlz
KTtcbiIpOworICAgICAgICAgICAgICAgIH0gZWxzaWYgKCFAeyRhdHRyaWJ1dGUtPmdldHRlckV4
Y2VwdGlvbnN9KSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IFVOVVNFRF9QQVJBTShleGVjKTtcbiIpOworICAgICAgICAgICAgICAgICAgICBteSAkY2FjaGVJ
bmRleCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWNoZWRBdHRyaWJ1dGUifSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgJGNhY2hlSW5kZXggPSAkY3VycmVudENhY2hlZEF0dHJpYnV0ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICRjdXJyZW50Q2FjaGVkQXR0cmlidXRlKys7CisgICAgICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoSlNWYWx1ZSBjYWNoZWRW
YWx1ZSA9IG1fIiAuICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSAuICIuZ2V0KCkpXG4iKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1
cm4gY2FjaGVkVmFsdWU7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgIGlmICgkc3ZnTGlzdFByb3BlcnR5VHlwZSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSAgIiAuIE5hdGl2
ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbXBsQ2xhc3NOYW1lLCAiY2Fz
dGVkVGhpcy0+aW1wbCgpLT4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZSgpIiwgImNhc3RlZFRoaXMi
KSAuICI7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNpZiAoJHN2Z1Byb3BlcnR5T3JM
aXN0UHJvcGVydHlUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAkc3ZnUHJvcGVydHlPckxpc3RQcm9wZXJ0eVR5cGUmIGltcGwgPSBjYXN0ZWRU
aGlzLT5pbXBsKCktPnByb3BlcnR5UmVmZXJlbmNlKCk7XG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICgkc3ZnUHJvcGVydHlPckxpc3RQcm9wZXJ0eVR5cGUgZXEgImZsb2F0IikgeyAj
IFNwZWNpYWwgY2FzZSBmb3IgSlNTVkdOdW1iZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHJlc3VsdCA9ICAiIC4gTmF0aXZlVG9K
U1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGltcGxDbGFzc05hbWUsICJpbXBsIiwg
ImNhc3RlZFRoaXMiKSAuICI7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNW
YWx1ZSByZXN1bHQgPSAgIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUs
IDAsICRpbXBsQ2xhc3NOYW1lLCAiaW1wbC4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZSgpIiwgImNh
c3RlZFRoaXMiKSAuICI7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG15ICgkZnVuY3Rp
b25OYW1lLCBAYXJndW1lbnRzKSA9ICRjb2RlR2VuZXJhdG9yLT5HZXR0ZXJFeHByZXNzaW9uKFwl
aW1wbEluY2x1ZGVzLCAkaW50ZXJmYWNlTmFtZSwgJGF0dHJpYnV0ZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiSW1wbGVtZW50ZWRCeSJ9KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGlt
cGxlbWVudGVkQnkgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJJbXBsZW1lbnRlZEJ5In07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxJbmNs
dWRlc3siJHtpbXBsZW1lbnRlZEJ5fS5oIn0gPSAxOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICRmdW5jdGlvbk5hbWUgPSAiJHtpbXBsZW1lbnRlZEJ5fTo6JHtmdW5jdGlvbk5hbWV9IjsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNoaWZ0KEBhcmd1bWVudHMsICJpbXBsIik7
CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICRmdW5jdGlvbk5hbWUgPSAiaW1wbC0+JHtmdW5jdGlvbk5hbWV9IjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGpzVHlwZSA9
IE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbXBsQ2xhc3NOYW1l
LCAiJHtmdW5jdGlvbk5hbWV9KCIgLiBqb2luKCIsICIsIEBhcmd1bWVudHMpIC4gIikiLCAiY2Fz
dGVkVGhpcyIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgJGltcGxDbGFzc05hbWUqIGltcGwgPSBzdGF0aWNfY2FzdDwkaW1wbENsYXNzTmFtZSo+KGNh
c3RlZFRoaXMtPmltcGwoKSk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkY29k
ZUdlbmVyYXRvci0+SXNTVkdBbmltYXRlZFR5cGUoJHR5cGUpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUmVmUHRyPCR0eXBlPiBvYmogPSAk
anNUeXBlO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSAgdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgb2JqLmdldCgpKTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBK
U1ZhbHVlIHJlc3VsdCA9ICRqc1R5cGU7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIG1fIiAuICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSAuICIuc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgcmVzdWx0KTtcbiIpIGlmICgkYXR0cmlidXRlLT5zaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWNoZWRBdHRyaWJ1dGUifSk7CisgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiByZXN1bHQ7XG4iKTsK
KworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwO1xuIik7ICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKCRzdmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5
VHlwZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
JHN2Z1Byb3BlcnR5T3JMaXN0UHJvcGVydHlUeXBlIGltcGwoKmNhc3RlZFRoaXMtPmltcGwoKSk7
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpT
Qzo6SlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25h
dHVyZSwgMCwgJGltcGxDbGFzc05hbWUsICJpbXBsLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKGVj
KSIsICJjYXN0ZWRUaGlzIikgLiAiO1xuIik7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkaW1wbENs
YXNzTmFtZSogaW1wbCA9IHN0YXRpY19jYXN0PCRpbXBsQ2xhc3NOYW1lKj4oY2FzdGVkVGhpcy0+
aW1wbCgpKTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0
ZS0+c2lnbmF0dXJlLCAwLCAkaW1wbENsYXNzTmFtZSwgImltcGwtPiRpbXBsR2V0dGVyRnVuY3Rp
b25OYW1lKGVjKSIsICJjYXN0ZWRUaGlzIikgLiAiO1xuIik7CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBzZXRET01F
eGNlcHRpb24oZXhlYywgZWMpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHJldHVybiByZXN1bHQ7XG4iKTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisKKyAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNlbmRpZlxuIikgaWYgJGF0dHJpYnV0ZUNvbmRpdGlv
bmFsU3RyaW5nOworCisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoISRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57Ik9taXRDb25zdHJ1Y3RvciJ9KSB7CisgICAgICAgICAgICAgICAgbXkgJGNvbnN0
cnVjdG9yRnVuY3Rpb25OYW1lID0gImpzIiAuICRpbnRlcmZhY2VOYW1lIC4gIkNvbnN0cnVjdG9y
IjsKKworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNWYWx1ZSAke2NvbnN0
cnVjdG9yRnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNv
bnN0IElkZW50aWZpZXImKVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAke2NsYXNz
TmFtZX0qIGRvbU9iamVjdCA9IHN0YXRpY19jYXN0PCRjbGFzc05hbWUqPihhc09iamVjdChzbG90
QmFzZSkpO1xuIik7CisKKyAgICAgICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiQ2hlY2tEb21haW5TZWN1cml0eSJ9KSB7CisgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghZG9tT2JqZWN0LT5hbGxvd3NBY2Nlc3NGcm9t
KGV4ZWMpKVxuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTtcbiIpOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiAke2NsYXNzTmFtZX06
OmdldENvbnN0cnVjdG9yKGV4ZWMsIGRvbU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpO1xuIik7Cisg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgIyBDaGVjayBpZiB3ZSBoYXZlIGFueSB3cml0YWJsZSBh
dHRyaWJ1dGVzCisgICAgICAgIG15ICRoYXNSZWFkV3JpdGVQcm9wZXJ0aWVzID0gMDsKKyAgICAg
ICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRkYXRhTm9kZS0+YXR0cmlidXRlc30pIHsKKyAg
ICAgICAgICAgICRoYXNSZWFkV3JpdGVQcm9wZXJ0aWVzID0gMSBpZiAkYXR0cmlidXRlLT50eXBl
ICF+IC9ecmVhZG9ubHkvOworICAgICAgICB9CisKKyAgICAgICAgbXkgJGhhc1NldHRlciA9ICRo
YXNSZWFkV3JpdGVQcm9wZXJ0aWVzCisgICAgICAgICAgICAgICAgICAgICB8fCAkZGF0YU5vZGUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJEZWxlZ2F0aW5nUHV0RnVuY3Rpb24ifQorICAgICAgICAg
ICAgICAgICAgICAgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzQ3VzdG9t
SW5kZXhTZXR0ZXIifTsKKworICAgICAgICBpZiAoJGhhc1NldHRlcikgeworICAgICAgICAgICAg
aWYgKCEkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21QdXRGdW5jdGlvbiJ9
KSB7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1l
fTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOwor
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9KiB0aGlzT2JqZWN0ID0ganND
YXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19p
bmZvKTtcbiIpOworICAgICAgICAgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJIYXNDdXN0b21JbmRleFNldHRlciJ9KSB7CisgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGJvb2wgb2s7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUudG9V
SW50MzIob2spO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIGlmIChvaykge1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICAgICB0aGlzT2JqZWN0LT5pbmRleFNldHRlcihleGVjLCBpbmRleCwgdmFsdWUpO1xu
Iik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1
cm47XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfVxu
Iik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJEZWxlZ2F0aW5nUHV0RnVuY3Rpb24ifSkgeworICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAodGhpc09iamVjdC0+cHV0RGVs
ZWdhdGUoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCkpXG4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybjtcbiIpOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICgkaGFzUmVhZFdyaXRlUHJvcGVydGll
cykgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBsb29rdXBQ
dXQ8JGNsYXNzTmFtZSwgQmFzZT4oZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgIiAuIGhhc2hU
YWJsZUFjY2Vzc29yKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5vU3RhdGljVGFi
bGVzIn0sICRjbGFzc05hbWUpIC4gIiwgdGhpc09iamVjdCwgc2xvdCk7XG4iKTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xv
dCk7XG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ9XG5cbiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoJGRhdGFO
b2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzQ3VzdG9tSW5kZXhTZXR0ZXIifSkgeworICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnB1dEJ5
SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSB2YWx1ZSlcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAie1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtjbGFz
c05hbWV9KiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xuIik7Cisg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIHRoaXNPYmplY3QtPmluZGV4U2V0dGVyKGV4ZWMsIHByb3BlcnR5
TmFtZSwgdmFsdWUpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgcmV0dXJuO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5c
biIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoJGhhc1JlYWRXcml0ZVByb3Bl
cnRpZXMpIHsKKyAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7JGRhdGFO
b2RlLT5hdHRyaWJ1dGVzfSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+
dHlwZSAhfiAvXnJlYWRvbmx5LykgeworICAgICAgICAgICAgICAgICAgICAgICAgbXkgJG5hbWUg
PSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWU7CisgICAgICAgICAgICAgICAgICAgICAgICBt
eSAkdHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZSgkYXR0cmlidXRlLT5zaWduYXR1
cmUtPnR5cGUpOworICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHB1dEZ1bmN0aW9uTmFtZSA9
ICJzZXRKUyIgLiAkaW50ZXJmYWNlTmFtZSAuICAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgk
bmFtZSkgLiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlID1+IC9Db25zdHJ1Y3RvciQvID8g
IkNvbnN0cnVjdG9yIiA6ICIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG15ICRpbXBsU2V0
dGVyRnVuY3Rpb25OYW1lID0gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJG5hbWUpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICBteSAkYXR0cmlidXRlQ29uZGl0aW9uYWxTdHJpbmcgPSBH
ZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNpZiAke2F0dHJpYnV0ZUNvbmRp
dGlvbmFsU3RyaW5nfVxuIikgaWYgJGF0dHJpYnV0ZUNvbmRpdGlvbmFsU3RyaW5nOworCisgICAg
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtwdXRGdW5jdGlv
bk5hbWV9KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xu
Iik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJDaGVja0RvbWFpblNlY3VyaXR5In0gJiYgISRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkRvTm90Q2hlY2tEb21haW5TZWN1cml0eSJ9KSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5k
b3ciKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIGlmICghc3RhdGljX2Nhc3Q8JGNsYXNzTmFtZSo+KHRoaXNPYmplY3QpLT5hbGxvd3NB
Y2Nlc3NGcm9tKGV4ZWMpKVxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgaWYgKCFhbGxvd3NBY2Nlc3NGcm9tRnJhbWUoZXhlYywgc3RhdGljX2Nhc3Q8JGNsYXNzTmFt
ZSo+KHRoaXNPYmplY3QpLT5pbXBsKCktPmZyYW1lKCkpKVxuIik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICAgICByZXR1cm47XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkN1c3RvbSJ9IHx8ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkpTQ0N1c3RvbSJ9IHx8ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbVNldHRlciJ9IHx8ICRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQ0N1c3RvbVNldHRlciJ9KSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkltcGxlbWVudGVkQnkifSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAke2NsYXNzTmFtZX0qIGNhc3RlZFRoaXMgPSBz
dGF0aWNfY2FzdDwke2NsYXNzTmFtZX0qPih0aGlzT2JqZWN0KTtcbiIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAke2ludGVyZmFjZU5h
bWV9KiBpbXBsID0gc3RhdGljX2Nhc3Q8JHtpbnRlcmZhY2VOYW1lfSo+KGNhc3RlZFRoaXMtPmlt
cGwoKSk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgY2FzdGVkVGhpcy0+c2V0JGltcGxTZXR0ZXJGdW5jdGlvbk5hbWUoaW1wbCwg
ZXhlYywgdmFsdWUpO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
c3RhdGljX2Nhc3Q8JGNsYXNzTmFtZSo+KHRoaXNPYmplY3QpLT5zZXQkaW1wbFNldHRlckZ1bmN0
aW9uTmFtZShleGVjLCB2YWx1ZSk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2lmICgkdHlwZSBlcSAiRXZlbnRMaXN0ZW5l
ciIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJKU0V2ZW50
TGlzdGVuZXIuaCJ9ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBVTlVTRURfUEFSQU0oZXhlYyk7XG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAke2NsYXNzTmFtZX0qIGNhc3RlZFRo
aXMgPSBzdGF0aWNfY2FzdDwke2NsYXNzTmFtZX0qPih0aGlzT2JqZWN0KTtcbiIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG15ICR3aW5kb3dFdmVudExpc3RlbmVyID0gJGF0dHJpYnV0
ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiV2luZG93RXZlbnRMaXN0ZW5lciJ9
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkd2luZG93RXZlbnRMaXN0ZW5lcikg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY2FzdGVkVGhpcy0+Z2xvYmFsT2Jq
ZWN0KCk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGltcGxDbGFzc05hbWUqIGlt
cGwgPSBzdGF0aWNfY2FzdDwkaW1wbENsYXNzTmFtZSo+KGNhc3RlZFRoaXMtPmltcGwoKSk7XG4i
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCgkaW50ZXJmYWNlTmFtZSBlcSAi
RE9NV2luZG93Iikgb3IgKCRpbnRlcmZhY2VOYW1lIGVxICJXb3JrZXJDb250ZXh0IikpIGFuZCAk
bmFtZSBlcSAib25lcnJvciIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlt
cGxJbmNsdWRlc3siSlNFcnJvckhhbmRsZXIuaCJ9ID0gMTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaW1wbC0+c2V0JGltcGxTZXR0ZXJG
dW5jdGlvbk5hbWUoY3JlYXRlSlNFcnJvckhhbmRsZXIoZXhlYywgdmFsdWUsIHRoaXNPYmplY3Qp
KTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCBHZW5lcmF0ZUF0dHJpYnV0
ZUV2ZW50TGlzdGVuZXJDYWxsKCRjbGFzc05hbWUsICRpbXBsU2V0dGVyRnVuY3Rpb25OYW1lLCAk
d2luZG93RXZlbnRMaXN0ZW5lcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlw
ZSA9fiAvQ29uc3RydWN0b3IkLykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRj
b25zdHJ1Y3RvclR5cGUgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGU7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJGNvbnN0cnVjdG9yVHlwZSA9fiBzL0NvbnN0cnVjdG9yJC8vOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgJGNvbnN0cnVjdG9yVHlwZSB+PSAvQ29uc3Ry
dWN0b3IkLyBpbmRpY2F0ZXMgdGhhdCBpdCBpcyBOYW1lZENvbnN0cnVjdG9yLgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICMgV2UgZG8gbm90IGdlbmVyYXRlIHRoZSBoZWFkZXIgZmlsZSBm
b3IgTmFtZWRDb25zdHJ1Y3RvciBvZiBjbGFzcyBYWFhYLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICMgc2luY2Ugd2UgZ2VuZXJhdGUgdGhlIE5hbWVkQ29uc3RydWN0b3IgZGVjbGFyYXRp
b24gaW50byB0aGUgaGVhZGVyIGZpbGUgb2YgY2xhc3MgWFhYWC4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoJGNvbnN0cnVjdG9yVHlwZSBuZSAiRE9NT2JqZWN0IiBhbmQgJGNvbnN0
cnVjdG9yVHlwZSAhfiAvQ29uc3RydWN0b3IkLykgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlMiIC4gJGNvbnN0cnVjdG9yVHlwZSAuICIuaCIs
ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbmRpdGlvbmFs
In0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBj
b25zdHJ1Y3RvclxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRpbnRlcmZh
Y2VOYW1lIGVxICJET01XaW5kb3ciICYmICRjbGFzc05hbWUgZXEgIkpTYmxhaCIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogVGhpcyBicmFuY2ggbmV2ZXIgZXhl
Y3V0ZXMgYW5kIHNob3VsZCBiZSByZW1vdmVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBzdGF0aWNfY2FzdDwkY2xhc3NOYW1lKj4odGhp
c09iamVjdCktPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5jb25zdHJ1Y3RvciwgdmFsdWUpO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgc3RhdGljX2Nhc3Q8JGNsYXNzTmFtZSo+KHRoaXNPYmplY3QpLT5wdXREaXJl
Y3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsIFwiJG5hbWVcIiksIHZhbHVl
KTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IlJlcGxhY2VhYmxlIn0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBvYmplY3RcbiIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHN0YXRpY19j
YXN0PCRjbGFzc05hbWUqPih0aGlzT2JqZWN0KS0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgSWRlbnRpZmllcihleGVjLCBcIiRuYW1lXCIpLCB2YWx1ZSk7XG4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgJGNsYXNzTmFtZSogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PCRj
bGFzc05hbWUqPih0aGlzT2JqZWN0KTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICRpbXBsVHlwZSogaW1wbCA9IHN0YXRpY19jYXN0PCRp
bXBsVHlwZSo+KGNhc3RlZFRoaXMtPmltcGwoKSk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBFeGNlcHRpb25Db2RlIGVjID0gMDtcbiIp
IGlmIEB7JGF0dHJpYnV0ZS0+c2V0dGVyRXhjZXB0aW9uc307CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAjIElmIHRoZSAiU3RyaWN0VHlwZUNoZWNraW5nIiBleHRlbmRlZCBhdHRyaWJ1
dGUgaXMgcHJlc2VudCwgYW5kIHRoZSBhdHRyaWJ1dGUncyB0eXBlIGlzIGFuCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIyBpbnRlcmZhY2UgdHlwZSwgdGhlbiBpZiB0aGUgaW5jb21pbmcg
dmFsdWUgZG9lcyBub3QgaW1wbGVtZW50IHRoYXQgaW50ZXJmYWNlLCBhIFR5cGVFcnJvcgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICMgaXMgdGhyb3duIHJhdGhlciB0aGFuIHNpbGVudGx5
IHBhc3NpbmcgTlVMTCB0byB0aGUgQysrIGNvZGUuCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIyBQZXIgdGhlIFdlYiBJREwgYW5kIEVDTUFTY3JpcHQgc3BlY2lmaWNhdGlvbnMsIGluY29t
aW5nIHZhbHVlcyBjYW4gYWx3YXlzIGJlIGNvbnZlcnRlZCB0bworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICMgYm90aCBzdHJpbmdzIGFuZCBudW1iZXJzLCBzbyBkbyBub3QgdGhyb3cgVHlw
ZUVycm9yIGlmIHRoZSBhdHRyaWJ1dGUgaXMgb2YgdGhlc2UgdHlwZXMuCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IlN0cmljdFR5cGVDaGVja2luZyJ9KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICRpbXBsSW5jbHVkZXN7IjxydW50aW1lL0Vycm9yLmg+In0gPSAxOworCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRhcmdUeXBlID0gJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLT50eXBlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUlzTmF0aXZl
VHlwZSgkYXJnVHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGlmICghdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSAmJiAh
dmFsdWUuaW5oZXJpdHMoJkpTJHthcmdUeXBlfTo6c19pbmZvKSkge1xuIik7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgdGhy
b3dWTVR5cGVFcnJvcihleGVjKTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybjtcbiIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfTtcbiIp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJG5hdGl2ZVZhbHVl
ID0gSlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgInZhbHVlIik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRzdmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5VHlw
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHN2Z1Byb3BlcnR5VHlw
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgaWYgKGltcGwtPnJvbGUoKSA9PSBBbmltVmFsUm9sZSkge1xuIik7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAg
c2V0RE9NRXhjZXB0aW9uKGV4ZWMsIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUik7XG4iKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICByZXR1cm47XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siRXhjZXB0aW9uQ29kZS5oIn0gPSAxOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRzdmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5VHlw
ZSYgcG9kSW1wbCA9IGltcGwtPnByb3BlcnR5UmVmZXJlbmNlKCk7XG4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCRzdmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5VHlwZSBl
cSAiZmxvYXQiKSB7ICMgU3BlY2lhbCBjYXNlIGZvciBKU1NWR051bWJlcgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcG9kSW1wbCA9
ICRuYXRpdmVWYWx1ZTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgcG9kSW1wbC5zZXQkaW1wbFNldHRlckZ1bmN0aW9uTmFtZSgkbmF0aXZlVmFsdWUi
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiLCBlYyIpIGlmIEB7JGF0dHJpYnV0ZS0+c2V0dGVyRXhjZXB0aW9uc307CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIik7XG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7XG4iKSBpZiBAeyRhdHRyaWJ1dGUtPnNldHRlckV4
Y2VwdGlvbnN9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICgkc3ZnUHJvcGVydHlUeXBlKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQHskYXR0cmlidXRlLT5zZXR0ZXJFeGNlcHRp
b25zfSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIGlmICghZWMpXG4iKTsgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGltcGwtPmNvbW1pdENo
YW5nZSgpO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGltcGwtPmNvbW1pdENoYW5nZSgpO1xuIik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBteSAoJGZ1bmN0aW9uTmFtZSwgQGFyZ3VtZW50cykgPSAkY29kZUdlbmVyYXRv
ci0+U2V0dGVyRXhwcmVzc2lvbihcJWltcGxJbmNsdWRlcywgJGludGVyZmFjZU5hbWUsICRhdHRy
aWJ1dGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBhcmd1bWVudHMs
ICRuYXRpdmVWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYXR0
cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbXBsZW1lbnRlZEJ5In0p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRpbXBsZW1lbnRlZEJ5
ID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50
ZWRCeSJ9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRl
c3siJHtpbXBsZW1lbnRlZEJ5fS5oIn0gPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaGlmdChAYXJndW1lbnRzLCAiaW1wbCIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJGZ1bmN0aW9uTmFtZSA9ICIke2ltcGxlbWVudGVkQnl9Ojoke2Z1
bmN0aW9uTmFtZX0iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZ1bmN0aW9uTmFtZSA9ICJpbXBs
LT4ke2Z1bmN0aW9uTmFtZX0iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGFyZ3VtZW50cywgImVjIikgaWYg
QHskYXR0cmlidXRlLT5zZXR0ZXJFeGNlcHRpb25zfTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtmdW5jdGlvbk5hbWV9KCIgLiBqb2lu
KCIsICIsIEBhcmd1bWVudHMpIC4gIik7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTtc
biIpIGlmIEB7JGF0dHJpYnV0ZS0+c2V0dGVyRXhjZXB0aW9uc307CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisgICAgICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNlbmRpZlxuIikgaWYgJGF0dHJpYnV0ZUNvbmRp
dGlvbmFsU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJcbiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiUmVwbGFjZWFibGVDb25zdHJ1Y3RvciJ9KSB7CisgICAgICAgICAgICAgICAgbXkgJGNvbnN0
cnVjdG9yRnVuY3Rpb25OYW1lID0gInNldEpTIiAuICRpbnRlcmZhY2VOYW1lIC4gIkNvbnN0cnVj
dG9yIjsKKworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NvbnN0
cnVjdG9yRnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlKVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ7XG4iKTsKKyAgICAgICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiQ2hlY2tEb21haW5TZWN1cml0eSJ9KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgk
aW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IikgeworICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFzdGF0aWNfY2FzdDwkY2xhc3NOYW1lKj4odGhp
c09iamVjdCktPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykpXG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIGlmICghYWxsb3dzQWNjZXNzRnJvbUZyYW1lKGV4ZWMsIHN0YXRpY19jYXN0PCRjbGFzc05h
bWUqPih0aGlzT2JqZWN0KS0+aW1wbCgpLT5mcmFtZSgpKSlcbiIpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBy
ZXR1cm47XG4iKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvclxuIik7
CisKKyAgICAgICAgICAgICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsK
KyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgc3RhdGljX2Nhc3Q8
JGNsYXNzTmFtZSo+KHRoaXNPYmplY3QpLT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIHZhbHVlKTtcbiIpOworICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRpZSAiTm8gd2F5IHRvIGhhbmRs
ZSBpbnRlcmZhY2Ugd2l0aCBSZXBsYWNlYWJsZUNvbnN0cnVjdG9yIGV4dGVuZGVkIGF0dHJpYnV0
ZTogJGludGVyZmFjZU5hbWUiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisgICAgICAgICAgICB9ICAgICAgICAKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmICgoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
SGFzSW5kZXhHZXR0ZXIifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIYXND
dXN0b21JbmRleEdldHRlciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhh
c051bWVyaWNJbmRleEdldHRlciJ9KSAmJiAhJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiQ3VzdG9tR2V0UHJvcGVydHlOYW1lcyJ9KSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAidm9pZCAke2NsYXNzTmFtZX06OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51
bWVyYXRpb25Nb2RlIG1vZGUpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4i
KTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KG9iamVjdCk7XG4iKTsKKyAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAm
c19pbmZvKTtcbiIpOworICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiSGFzSW5kZXhHZXR0ZXIifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJI
YXNDdXN0b21JbmRleEdldHRlciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
Ikhhc051bWVyaWNJbmRleEdldHRlciJ9KSB7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8JHtpbXBsQ2xhc3NO
YW1lfSo+KHRoaXNPYmplY3QtPmltcGwoKSktPmxlbmd0aCgpOyArK2kpXG4iKTsKKyAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlm
aWVyOjpmcm9tKGV4ZWMsIGkpKTtcbiIpOworICAgICAgICB9CisgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZXMsIG1vZGUpO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
fVxuXG4iKTsKKyAgICB9CisKKyAgICBpZiAoISRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57Ik9taXRDb25zdHJ1Y3RvciJ9KSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNW
YWx1ZSAke2NsYXNzTmFtZX06OmdldENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdClcbntcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8JHtjbGFzc05hbWV9Q29uc3RydWN0b3I+
KGV4ZWMsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7XG4i
KTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworICAgIH0KKworICAgICMg
RnVuY3Rpb25zCisgICAgaWYgKCRudW1GdW5jdGlvbnMgPiAwKSB7CisgICAgICAgIGZvcmVhY2gg
bXkgJGZ1bmN0aW9uIChAeyRkYXRhTm9kZS0+ZnVuY3Rpb25zfSkgeworICAgICAgICAgICAgQWRk
SW5jbHVkZXNGb3JUeXBlSW5JbXBsKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKTsKKworICAg
ICAgICAgICAgbXkgJGlzQ3VzdG9tID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJDdXN0b20ifSB8fCAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkpTQ0N1c3RvbSJ9OworICAgICAgICAgICAgbXkgJGlzT3ZlcmxvYWRlZCA9ICRm
dW5jdGlvbi0+e292ZXJsb2Fkc30gJiYgQHskZnVuY3Rpb24tPntvdmVybG9hZHN9fSA+IDE7CisK
KyAgICAgICAgICAgIG5leHQgaWYgJGlzQ3VzdG9tICYmICRpc092ZXJsb2FkZWQgJiYgJGZ1bmN0
aW9uLT57b3ZlcmxvYWRJbmRleH0gPiAxOworCisgICAgICAgICAgICBteSAkZnVuY3Rpb25OYW1l
ID0gR2V0RnVuY3Rpb25OYW1lKCRjbGFzc05hbWUsICRmdW5jdGlvbik7CisKKyAgICAgICAgICAg
IG15ICRjb25kaXRpb25hbCA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiQ29uZGl0aW9uYWwifTsKKyAgICAgICAgICAgIGlmICgkY29uZGl0aW9uYWwpIHsKKyAg
ICAgICAgICAgICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2Vu
ZXJhdGVDb25kaXRpb25hbFN0cmluZ0Zyb21BdHRyaWJ1dGVWYWx1ZSgkY29uZGl0aW9uYWwpOwor
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2lmICR7Y29uZGl0aW9uYWxTdHJp
bmd9XG4iKTsKKyAgICAgICAgICAgIH0KKworCisgICAgICAgICAgICBpZiAoISRpc0N1c3RvbSAm
JiAkaXNPdmVybG9hZGVkKSB7CisgICAgICAgICAgICAgICAgIyBBcHBlbmQgYSBudW1iZXIgdG8g
YW4gb3ZlcmxvYWRlZCBtZXRob2QncyBuYW1lIHRvIG1ha2UgaXQgdW5pcXVlOgorICAgICAgICAg
ICAgICAgICRmdW5jdGlvbk5hbWUgPSAkZnVuY3Rpb25OYW1lIC4gJGZ1bmN0aW9uLT57b3Zlcmxv
YWRJbmRleH07CisgICAgICAgICAgICAgICAgIyBNYWtlIHRoaXMgZnVuY3Rpb24gc3RhdGljIHRv
IGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzLCBzaW5jZSB3ZQorICAgICAgICAgICAgICAgICMgZG9u
J3QgZ2VuZXJhdGUgYSBwcm90b3R5cGUgZm9yIGl0IGluIHRoZSBoZWFkZXIuCisgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0aWMgIik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIG15ICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZSA9ICRmdW5jdGlvbi0+c2ln
bmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50YXRpb25GdW5jdGlvbiJ9IHx8
ICRjb2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lKTsK
KworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMICR7ZnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIGV4ZWMpXG4iKTsKKyAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisKKyAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7
IjxydW50aW1lL0Vycm9yLmg+In0gPSAxOworCisgICAgICAgICAgICBpZiAoJGludGVyZmFjZU5h
bWUgZXEgIkRPTVdpbmRvdyIpIHsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAkY2xhc3NOYW1lKiBjYXN0ZWRUaGlzID0gdG9KU0RPTVdpbmRvdyhleGVjLT5ob3N0VGhp
c1ZhbHVlKCkudG9UaGlzT2JqZWN0KGV4ZWMpKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIGlmICghY2FzdGVkVGhpcylcbiIpOworICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVj
KTtcbiIpOworICAgICAgICAgICAgfSBlbHNpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiSXNXb3JrZXJDb250ZXh0In0pIHsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAkY2xhc3NOYW1lKiBjYXN0ZWRUaGlzID0gdG8ke2NsYXNzTmFtZX0oZXhlYy0+
aG9zdFRoaXNWYWx1ZSgpLnRvVGhpc09iamVjdChleGVjKSk7XG4iKTsKKyAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIWNhc3RlZFRoaXMpXG4iKTsKKyAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZXhlYyk7XG4iKTsKKyAgICAgICAgICAgIH0gZWxzaWYgKCEkZnVuY3Rpb24tPmlzU3RhdGlj
KSB7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmJHtjbGFzc05hbWV9
OjpzX2luZm8pKVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpO1xuIik7CisgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgJGNsYXNzTmFtZSogY2FzdGVkVGhpcyA9IHN0YXRpY19j
YXN0PCRjbGFzc05hbWUqPihhc09iamVjdCh0aGlzVmFsdWUpKTtcbiIpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKGNhc3RlZFRoaXMsICYke2NsYXNzTmFtZX06OnNfaW5mbyk7XG4iKSB1bmxlc3Mg
KCRmdW5jdGlvbi0+aXNTdGF0aWMpOworCisgICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiQ2hlY2tEb21haW5TZWN1cml0eSJ9IGFuZAorICAgICAgICAgICAg
ICAgICEkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkRvTm90Q2hl
Y2tEb21haW5TZWN1cml0eSJ9IGFuZAorICAgICAgICAgICAgICAgICEkZnVuY3Rpb24tPmlzU3Rh
dGljKSB7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFjYXN0
ZWRUaGlzLT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKVxuIik7CisgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7XG4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCRpc0N1c3RvbSkg
eworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoY2FzdGVkVGhpcy0+IiAuICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZSAuICIo
ZXhlYykpO1xuIikgdW5sZXNzICgkZnVuY3Rpb24tPmlzU3RhdGljKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGltcGxUeXBl
KiBpbXBsID0gc3RhdGljX2Nhc3Q8JGltcGxUeXBlKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTtcbiIp
IHVubGVzcyAoJGZ1bmN0aW9uLT5pc1N0YXRpYyk7CisgICAgICAgICAgICAgICAgaWYgKCRzdmdQ
cm9wZXJ0eVR5cGUgYW5kICEkZnVuY3Rpb24tPmlzU3RhdGljKSB7CisgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChpbXBsLT5yb2xlKCkgPT0gQW5pbVZhbFJv
bGUpIHtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUik7XG4i
KTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfVxuIik7CisgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICRzdmdQcm9wZXJ0eVR5cGUmIHBvZEltcGwgPSBpbXBsLT5w
cm9wZXJ0eVJlZmVyZW5jZSgpO1xuIik7CisgICAgICAgICAgICAgICAgICAgICRpbXBsSW5jbHVk
ZXN7IkV4Y2VwdGlvbkNvZGUuaCJ9ID0gMTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBHZW5lcmF0ZUFyZ3VtZW50c0NvdW50Q2hlY2soXEBpbXBsQ29udGVudCwgJGZ1bmN0
aW9uLCAkZGF0YU5vZGUpOworCisgICAgICAgICAgICAgICAgaWYgKEB7JGZ1bmN0aW9uLT5yYWlz
ZXNFeGNlcHRpb25zfSkgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBFeGNlcHRpb25Db2RlIGVjID0gMDtcbiIpOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IlNWR0NoZWNrU2VjdXJpdHlEb2N1bWVudCJ9IGFuZCAhJGZ1bmN0aW9uLT5pc1N0YXRpYykg
eworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIWNoZWNr
Tm9kZVNlY3VyaXR5KGV4ZWMsIGltcGwtPmdldFNWR0RvY3VtZW50KCIgLiAoQHskZnVuY3Rpb24t
PnJhaXNlc0V4Y2VwdGlvbnN9ID8gImVjIiA6ICIiKSAuIikpKVxuIik7CisgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpO1xuIik7CisgICAgICAgICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7
IkpTRE9NQmluZGluZy5oIn0gPSAxOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSBlcSAiYWRkRXZlbnRMaXN0ZW5lciIp
IHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIEdlbmVyYXRlRXZlbnRM
aXN0ZW5lckNhbGwoJGNsYXNzTmFtZSwgImFkZCIpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2lm
ICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSBlcSAicmVtb3ZlRXZlbnRMaXN0ZW5lciIpIHsK
KyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIEdlbmVyYXRlRXZlbnRMaXN0
ZW5lckNhbGwoJGNsYXNzTmFtZSwgInJlbW92ZSIpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBteSAkbnVtUGFyYW1ldGVycyA9IEB7JGZ1bmN0aW9uLT5w
YXJhbWV0ZXJzfTsKKyAgICAgICAgICAgICAgICAgICAgbXkgKCRmdW5jdGlvblN0cmluZywgJHBh
cmFtSW5kZXgpID0gR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2soXEBpbXBsQ29udGVudCwgJGZ1bmN0
aW9uLCAkZGF0YU5vZGUsICRudW1QYXJhbWV0ZXJzLCAkaW1wbENsYXNzTmFtZSwgJGZ1bmN0aW9u
SW1wbGVtZW50YXRpb25OYW1lLCAkc3ZnUHJvcGVydHlUeXBlLCAkc3ZnUHJvcGVydHlPckxpc3RQ
cm9wZXJ0eVR5cGUsICRzdmdMaXN0UHJvcGVydHlUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAg
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCgkZnVuY3Rpb24sICRmdW5jdGlvblN0
cmluZywgJHBhcmFtSW5kZXgsICIgICAgIiwgJHN2Z1Byb3BlcnR5VHlwZSwgJGltcGxDbGFzc05h
bWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworCisgICAgICAgICAgICBpZiAoISRpc0N1c3RvbSAm
JiAkaXNPdmVybG9hZGVkICYmICRmdW5jdGlvbi0+e292ZXJsb2FkSW5kZXh9ID09IEB7JGZ1bmN0
aW9uLT57b3ZlcmxvYWRzfX0pIHsKKyAgICAgICAgICAgICAgICAjIEdlbmVyYXRlIGEgZnVuY3Rp
b24gZGlzcGF0Y2hpbmcgY2FsbCB0byB0aGUgcmVzdCBvZiB0aGUgb3ZlcmxvYWRzLgorICAgICAg
ICAgICAgICAgIEdlbmVyYXRlT3ZlcmxvYWRlZEZ1bmN0aW9uKCRmdW5jdGlvbiwgJGRhdGFOb2Rl
LCAkaW1wbENsYXNzTmFtZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiI2VuZGlmXG5cbiIpIGlmICRjb25kaXRpb25hbDsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKCRuZWVkc01hcmtDaGlsZHJlbiAmJiAhJGRhdGFOb2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTWFya0Z1bmN0aW9uIn0pIHsKKyAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcilcbiIpOworICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJ7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7
Y2xhc3NOYW1lfSogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIp
OworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgQ09NUElMRV9BU1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNW
aXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTtc
biIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUKHRoaXNPYmpl
Y3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7XG4i
KTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEJhc2U6OnZpc2l0Q2hpbGRy
ZW4odGhpc09iamVjdCwgdmlzaXRvcik7XG4iKTsKKyAgICAgICAgICAgIGlmICgkZGF0YU5vZGUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJFdmVudFRhcmdldCJ9KSB7CisgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgdGhpc09iamVjdC0+aW1wbCgpLT52aXNpdEpTRXZlbnRM
aXN0ZW5lcnModmlzaXRvcik7XG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgk
bnVtQ2FjaGVkQXR0cmlidXRlcyA+IDApIHsKKyAgICAgICAgICAgICAgICBmb3JlYWNoIChAeyRk
YXRhTm9kZS0+YXR0cmlidXRlc30pIHsKKyAgICAgICAgICAgICAgICAgICAgbXkgJGF0dHJpYnV0
ZSA9ICRfOworICAgICAgICAgICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FjaGVkQXR0cmlidXRlIn0pIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICh0aGlzT2JqZWN0LT5tXyIgLiAk
YXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUgLiAiKVxuIik7CisgICAgICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmpl
Y3QtPm1fIiAuICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSAuICIpO1xuIik7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisgICAgICAgIH0KKyAgICAgICAgIyBD
YWNoZWQgYXR0cmlidXRlcyBhcmUgaW5kZWVkIGFsbG93ZWQgd2hlbiB0aGVyZSBpcyBhIGN1c3Rv
bSBtYXJrL3Zpc2l0Q2hpbGRyZW4gZnVuY3Rpb24uCisgICAgICAgICMgVGhlIGN1c3RvbSBmdW5j
dGlvbiBtdXN0IG1ha2Ugc3VyZSB0byBhY2NvdW50IGZvciB0aGUgY2FjaGVkIGF0dHJpYnV0ZS4K
KyAgICAgICAgIyBVbmNvbW1lbnQgdGhlIGJlbG93IGxpbmUgdG8gdGVtcG9yYXJpbHkgZW5mb3Jj
ZSBnZW5lcmF0ZWQgbWFyayBmdW5jdGlvbnMgd2hlbiBjYWNoZWQgYXR0cmlidXRlcyBhcmUgcHJl
c2VudC4KKyAgICAgICAgIyBkaWUgIkNhbid0IGdlbmVyYXRlIGJpbmRpbmcgZm9yIGNsYXNzIHdp
dGggY2FjaGVkIGF0dHJpYnV0ZSBhbmQgY3VzdG9tIG1hcmsuIiBpZiAoKCRudW1DYWNoZWRBdHRy
aWJ1dGVzID4gMCkgYW5kICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21N
YXJrRnVuY3Rpb24ifSkpOworICAgIH0KKworICAgIGlmICgkbnVtQ29uc3RhbnRzID4gMCkgewor
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIi8vIENvbnN0YW50IGdldHRlcnNcblxuIik7CisK
KyAgICAgICAgZm9yZWFjaCBteSAkY29uc3RhbnQgKEB7JGRhdGFOb2RlLT5jb25zdGFudHN9KSB7
CisgICAgICAgICAgICBteSAkZ2V0dGVyID0gImpzIiAuICRpbnRlcmZhY2VOYW1lIC4gJGNvZGVH
ZW5lcmF0b3ItPldLX3VjZmlyc3QoJGNvbnN0YW50LT5uYW1lKTsKKyAgICAgICAgICAgIG15ICRj
b25kaXRpb25hbCA9ICRjb25zdGFudC0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbmRpdGlvbmFs
In07CisKKyAgICAgICAgICAgIGlmICgkY29uZGl0aW9uYWwpIHsKKyAgICAgICAgICAgICAgICBt
eSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb25kaXRpb25h
bFN0cmluZ0Zyb21BdHRyaWJ1dGVWYWx1ZSgkY29uZGl0aW9uYWwpOworICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgIyBGSVhNRTogdGhpcyBjYXN0cyBpbnRvIGludCB0byBt
YXRjaCBvdXIgcHJldmlvdXMgYmVoYXZpb3Igd2hpY2ggdHVybmVkIDB4RkZGRkZGRkYgaW4gLTEg
Zm9yIE5vZGVGaWx0ZXIuU0hPV19BTEwKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
SlNWYWx1ZSAke2dldHRlcn0oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlm
aWVyJilcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICAg
ICAgICAgIGlmICgkY29uc3RhbnQtPnR5cGUgZXEgIkRPTVN0cmluZyIpIHsKKyAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4ganNTdHJpbmdPck51bGwoZXhlYywg
U3RyaW5nKCIgLiAkY29uc3RhbnQtPnZhbHVlIC4gIikpO1xuIik7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJB
TShleGVjKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJl
dHVybiBqc051bWJlcihzdGF0aWNfY2FzdDxpbnQ+KCIgLiAkY29uc3RhbnQtPnZhbHVlIC4gIikp
O1xuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1c
blxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNlbmRpZlxuIikgaWYgJGNv
bmRpdGlvbmFsOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Ikhhc0luZGV4R2V0dGVyIn0pIHsKKyAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJcbkpTVmFsdWUgJHtjbGFzc05hbWV9OjppbmRleEdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIHVuc2lnbmVkIGluZGV4KVxuIik7CisgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAie1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7
Y2xhc3NOYW1lfSogdGhpc09iaiA9IHN0YXRpY19jYXN0PCRjbGFzc05hbWUqPihhc09iamVjdChz
bG90QmFzZSkpO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iaiwgJnNfaW5mbyk7XG4iKTsKKyAgICAgICAgaWYgKElu
ZGV4R2V0dGVyUmV0dXJuc1N0cmluZ3MoJGltcGxDbGFzc05hbWUpKSB7CisgICAgICAgICAgICAk
aW1wbEluY2x1ZGVzeyJLVVJMLmgifSA9IDE7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICByZXR1cm4ganNTdHJpbmdPck51bGwoZXhlYywgdGhpc09iai0+aW1wbCgpLT5pdGVt
KGluZGV4KSk7XG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHJldHVybiB0b0pTKGV4ZWMsIHRoaXNPYmotPmdsb2JhbE9iamVjdCgpLCBz
dGF0aWNfY2FzdDwkaW1wbENsYXNzTmFtZSo+KHRoaXNPYmotPmltcGwoKSktPml0ZW0oaW5kZXgp
KTtcbiIpOworICAgICAgICB9CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsK
KyAgICAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJIVE1MQ29sbGVjdGlvbiIgb3IgJGludGVy
ZmFjZU5hbWUgZXEgIkhUTUxBbGxDb2xsZWN0aW9uIikgeworICAgICAgICAgICAgJGltcGxJbmNs
dWRlc3siSlNOb2RlLmgifSA9IDE7CisgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJOb2RlLmgi
fSA9IDE7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Ikhhc051bWVyaWNJbmRleEdldHRlciJ9KSB7CisgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiXG5KU1ZhbHVlICR7Y2xhc3NOYW1lfTo6Z2V0QnlJbmRleChFeGVjU3Rh
dGUqLCB1bnNpZ25lZCBpbmRleClcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntc
biIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXMsICZzX2luZm8pO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIGRvdWJsZSByZXN1bHQgPSBzdGF0aWNfY2FzdDwkaW1wbENsYXNzTmFtZSo+KGltcGwoKSkt
Pml0ZW0oaW5kZXgpO1xuIik7CisgICAgICAgICMganNOdW1iZXIgY29udmVyc2lvbiBkb2Vzbid0
IHN1cHByZXNzIHNpZ25hbGxpbmcgTmFOcywgc28gZW5mb3JjZSB0aGF0IGhlcmUuCisgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChpc25hbihyZXN1bHQpKVxuIik7CisgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4ganNOYU4oKTtcbiIpOworICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZShyZXN1bHQpO1xuIik7Cisg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKKyAgICAgICAgaWYgKCRpbnRlcmZh
Y2VOYW1lIGVxICJIVE1MQ29sbGVjdGlvbiIgb3IgJGludGVyZmFjZU5hbWUgZXEgIkhUTUxBbGxD
b2xsZWN0aW9uIikgeworICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siSlNOb2RlLmgifSA9IDE7
CisgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJOb2RlLmgifSA9IDE7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAoKCEkaGFzUGFyZW50ICYmICEkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJDdXN0b21Jc1JlYWNoYWJsZSJ9KXx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkdlbmVyYXRlSXNSZWFjaGFibGUifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJBY3RpdmVET01PYmplY3QifSkgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
InN0YXRpYyBpbmxpbmUgYm9vbCBpc09ic2VydmFibGUoSlMke2ltcGxDbGFzc05hbWV9KiBqcyR7
aW1wbENsYXNzTmFtZX0pXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsK
KyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKGpzJHtpbXBsQ2xhc3NOYW1lfS0+
aGFzQ3VzdG9tUHJvcGVydGllcygpKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOworICAgICAgICBpZiAoJGV2ZW50VGFyZ2V0KSB7Cisg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoanMke2ltcGxDbGFzc05hbWV9
LT5pbXBsKCktPmhhc0V2ZW50TGlzdGVuZXJzKCkpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOworICAgICAgICB9CisgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBmYWxzZTtcbiIpOworICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIn1cblxuIik7CisKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJi
b29sIEpTJHtpbXBsQ2xhc3NOYW1lfU93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIEpTJHtpbXBsQ2xhc3NOYW1lfSoganMke2ltcGxDbGFzc05h
bWV9ID0gc3RhdGljX2Nhc3Q8SlMke2ltcGxDbGFzc05hbWV9Kj4oaGFuZGxlLmdldCgpLmFzQ2Vs
bCgpKTtcbiIpOworICAgICAgICAjIEFsbCBBY3RpdmVET01PYmplY3RzIGltcGxlbWVudCBoYXNQ
ZW5kaW5nQWN0aXZpdHkoKSwgYnV0IG5vdCBhbGwgb2YgdGhlbQorICAgICAgICAjIGluY3JlbWVu
dCB0aGVpciBDKysgcmVmZXJlbmNlIGNvdW50cyB3aGVuIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGJl
Y29tZXMKKyAgICAgICAgIyB0cnVlLiBBcyBhIHJlc3VsdCwgQWN0aXZlRE9NT2JqZWN0cyBjYW4g
YmUgcHJlbWF0dXJlbHkgZGVzdHJveWVkIGJlZm9yZQorICAgICAgICAjIHRoZWlyIHBlbmRpbmcg
YWN0aXZpdGllcyBjb21wbGV0ZS4gVG8gd2FsbHBhcGVyIG92ZXIgdGhpcyBidWcsIEphdmFTY3Jp
cHQKKyAgICAgICAgIyB3cmFwcGVycyB1bmNvbmRpdGlvbmFsbHkga2VlcCBBY3RpdmVET01PYmpl
Y3RzIHdpdGggcGVuZGluZyBhY3Rpdml0eSBhbGl2ZS4KKyAgICAgICAgIyBGSVhNRTogRml4IHRo
aXMgbGlmZXRpbWUgaXNzdWUgaW4gdGhlIERPTSwgYW5kIG1vdmUgdGhpcyBoYXNQZW5kaW5nQWN0
aXZpdHkKKyAgICAgICAgIyBjaGVjayBiZWxvdyB0aGUgaXNPYnNlcnZhYmxlIGNoZWNrLgorICAg
ICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQWN0aXZlRE9NT2JqZWN0
In0pIHsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChqcyR7aW1wbENs
YXNzTmFtZX0tPmltcGwoKS0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpXG4iKTsKKyAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOworICAgICAgICB9
CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghaXNPYnNlcnZhYmxlKGpzJHtp
bXBsQ2xhc3NOYW1lfSkpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAg
IHJldHVybiBmYWxzZTtcbiIpOworICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiR2VuZXJhdGVJc1JlYWNoYWJsZSJ9KSB7CisgICAgICAgICAgICBteSAkcm9vdFN0
cmluZzsKKyAgICAgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJH
ZW5lcmF0ZUlzUmVhY2hhYmxlIn0gZXEgIkltcGwiKSB7CisgICAgICAgICAgICAgICAgJHJvb3RT
dHJpbmcgID0gIiAgICAke2ltcGxUeXBlfSogcm9vdCA9IGpzJHtpbXBsQ2xhc3NOYW1lfS0+aW1w
bCgpO1xuIjsKKyAgICAgICAgICAgIH0gZWxzaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkdlbmVyYXRlSXNSZWFjaGFibGUifSBlcSAiSW1wbENvbnRleHQiKSB7CisgICAgICAg
ICAgICAgICAgJHJvb3RTdHJpbmcgID0gIiAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIHJvb3Qg
PSBqcyR7aW1wbENsYXNzTmFtZX0tPmltcGwoKS0+Y29udGV4dCgpO1xuIjsKKyAgICAgICAgICAg
IH0gZWxzaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkdlbmVyYXRlSXNSZWFj
aGFibGUifSBlcSAiSW1wbEZyYW1lIikgeworICAgICAgICAgICAgICAgICRyb290U3RyaW5nICA9
ICIgICAgRnJhbWUqIHJvb3QgPSBqcyR7aW1wbENsYXNzTmFtZX0tPmltcGwoKS0+ZnJhbWUoKTtc
biI7CisgICAgICAgICAgICAgICAgJHJvb3RTdHJpbmcgLj0gIiAgICBpZiAoIXJvb3QpXG4iOwor
ICAgICAgICAgICAgICAgICRyb290U3RyaW5nIC49ICIgICAgICAgIHJldHVybiBmYWxzZTtcbiI7
CisgICAgICAgICAgICB9IGVsc2lmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJH
ZW5lcmF0ZUlzUmVhY2hhYmxlIn0gZXEgIkltcGxEb2N1bWVudCIpIHsKKyAgICAgICAgICAgICAg
ICAkcm9vdFN0cmluZyAgPSAiICAgIERvY3VtZW50KiByb290ID0ganMke2ltcGxDbGFzc05hbWV9
LT5pbXBsKCktPmRvY3VtZW50KCk7XG4iOworICAgICAgICAgICAgICAgICRyb290U3RyaW5nIC49
ICIgICAgaWYgKCFyb290KVxuIjsKKyAgICAgICAgICAgICAgICAkcm9vdFN0cmluZyAuPSAiICAg
ICAgICByZXR1cm4gZmFsc2U7XG4iOworICAgICAgICAgICAgfSBlbHNpZiAoJGRhdGFOb2RlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiR2VuZXJhdGVJc1JlYWNoYWJsZSJ9IGVxICJJbXBsRWxlbWVu
dFJvb3QiKSB7CisgICAgICAgICAgICAgICAgJHJvb3RTdHJpbmcgID0gIiAgICBFbGVtZW50KiBl
bGVtZW50ID0ganMke2ltcGxDbGFzc05hbWV9LT5pbXBsKCktPmVsZW1lbnQoKTtcbiI7CisgICAg
ICAgICAgICAgICAgJHJvb3RTdHJpbmcgLj0gIiAgICBpZiAoIWVsZW1lbnQpXG4iOworICAgICAg
ICAgICAgICAgICRyb290U3RyaW5nIC49ICIgICAgICAgIHJldHVybiBmYWxzZTtcbiI7CisgICAg
ICAgICAgICAgICAgJHJvb3RTdHJpbmcgLj0gIiAgICB2b2lkKiByb290ID0gV2ViQ29yZTo6cm9v
dChlbGVtZW50KTtcbiI7CisgICAgICAgICAgICB9IGVsc2lmICgkaW50ZXJmYWNlTmFtZSBlcSAi
Q2FudmFzUmVuZGVyaW5nQ29udGV4dCIpIHsKKyAgICAgICAgICAgICAgICAkcm9vdFN0cmluZyAg
PSAiICAgIHZvaWQqIHJvb3QgPSBXZWJDb3JlOjpyb290KGpzJHtpbXBsQ2xhc3NOYW1lfS0+aW1w
bCgpLT5jYW52YXMoKSk7XG4iOworICAgICAgICAgICAgfSBlbHNpZiAoJGludGVyZmFjZU5hbWUg
ZXEgIkhUTUxDb2xsZWN0aW9uIiBvciAkaW50ZXJmYWNlTmFtZSBlcSAiSFRNTEFsbENvbGxlY3Rp
b24iKSB7CisgICAgICAgICAgICAgICAgJHJvb3RTdHJpbmcgID0gIiAgICB2b2lkKiByb290ID0g
V2ViQ29yZTo6cm9vdChqcyR7aW1wbENsYXNzTmFtZX0tPmltcGwoKS0+YmFzZSgpKTtcbiI7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICRyb290U3RyaW5nICA9ICIgICAg
dm9pZCogcm9vdCA9IFdlYkNvcmU6OnJvb3QoanMke2ltcGxDbGFzc05hbWV9LT5pbXBsKCkpO1xu
IjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRyb290
U3RyaW5nKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiB2aXNp
dG9yLmNvbnRhaW5zT3BhcXVlUm9vdChyb290KTtcbiIpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpO1xu
Iik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gZmFsc2U7XG4i
KTsKKyAgICAgICAgfQorICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CisgICAg
fQorCisgICAgaWYgKCEkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21GaW5h
bGl6ZSJ9ICYmCisgICAgICAgICghJGhhc1BhcmVudCB8fCAKKyAgICAgICAgICRkYXRhTm9kZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkdlbmVyYXRlSXNSZWFjaGFibGUifSB8fCAKKyAgICAgICAg
ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUlzUmVhY2hhYmxlIn0gfHwK
KyAgICAgICAgICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkFjdGl2ZURPTU9iamVj
dCJ9KSkgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgSlMke2ltcGxDbGFzc05h
bWV9T3duZXI6OmZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lk
KiBjb250ZXh0KVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTJHtpbXBsQ2xhc3NOYW1lfSoganMke2ltcGxD
bGFzc05hbWV9ID0gc3RhdGljX2Nhc3Q8SlMke2ltcGxDbGFzc05hbWV9Kj4oaGFuZGxlLmdldCgp
LmFzQ2VsbCgpKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBET01XcmFw
cGVyV29ybGQqIHdvcmxkID0gc3RhdGljX2Nhc3Q8RE9NV3JhcHBlcldvcmxkKj4oY29udGV4dCk7
XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdW5jYWNoZVdyYXBwZXIod29y
bGQsIGpzJHtpbXBsQ2xhc3NOYW1lfS0+aW1wbCgpLCBqcyR7aW1wbENsYXNzTmFtZX0pO1xuIik7
CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGpzJHtpbXBsQ2xhc3NOYW1lfS0+cmVs
ZWFzZUltcGwoKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7Cisg
ICAgfQorCisgICAgaWYgKCghJGhhc1BhcmVudCBvciAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJHZW5lcmF0ZVRvSlMifSkgYW5kICEkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJDdXN0b21Ub0pTIn0pIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgJGltcGxUeXBlKiBpbXBsKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAie1xuIik7CisgICAgICAgIGlmICgkc3ZnUHJvcGVydHlUeXBlKSB7CisgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gd3JhcDwkY2xhc3NOYW1lLCAkaW1wbFR5cGU+
KGV4ZWMsIGdsb2JhbE9iamVjdCwgaW1wbCk7XG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiB3cmFwPCRjbGFzc05hbWU+KGV4
ZWMsIGdsb2JhbE9iamVjdCwgaW1wbCk7XG4iKTsKKyAgICAgICAgfQorICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIn1cblxuIik7CisgICAgfQorCisgICAgaWYgKCghJGhhc1BhcmVudCBvciAk
ZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJHZW5lcmF0ZU5hdGl2ZUNvbnZlcnRlciJ9
KSBhbmQgISRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5hdGl2ZUNvbnZl
cnRlciJ9KSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiJGltcGxUeXBlKiB0byR7aW50
ZXJmYWNlTmFtZX0oSlNDOjpKU1ZhbHVlIHZhbHVlKVxuIik7CisgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAie1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiB2
YWx1ZS5pbmhlcml0cygmJHtjbGFzc05hbWV9OjpzX2luZm8pID8gc3RhdGljX2Nhc3Q8JGNsYXNz
TmFtZSo+KGFzT2JqZWN0KHZhbHVlKSktPmltcGwoKSA6IDAiKTsKKyAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICI7XG59XG4iKTsKKyAgICB9CisKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxu
fVxuIik7CisKKyAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSBHZW5lcmF0ZUNvbmRpdGlvbmFs
U3RyaW5nKCRkYXRhTm9kZSk7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiNlbmRpZiAvLyAk
e2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOworfQorCitzdWIg
R2VuZXJhdGVBcmd1bWVudHNDb3VudENoZWNrCit7CisgICAgbXkgJG91dHB1dEFycmF5ID0gc2hp
ZnQ7CisgICAgbXkgJGZ1bmN0aW9uID0gc2hpZnQ7CisgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7
CisKKyAgICBteSAkbnVtTWFuZGF0b3J5UGFyYW1zID0gQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9
OworICAgIGZvcmVhY2ggbXkgJHBhcmFtIChyZXZlcnNlKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJz
fSkpIHsKKyAgICAgICAgaWYgKCRwYXJhbS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik9wdGlvbmFs
In0pIHsKKyAgICAgICAgICAgICRudW1NYW5kYXRvcnlQYXJhbXMtLTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGxhc3Q7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCRudW1NYW5k
YXRvcnlQYXJhbXMgPj0gMSkKKyAgICB7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgJG51bU1hbmRhdG9yeVBhcmFtcylcbiIpOwor
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
ZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIFwiTm90IGVub3VnaCBhcmd1bWVudHNcIikpO1xu
Iik7CisgICAgfQorfQorCitzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKK3sKKyAgICBteSAk
b3V0cHV0QXJyYXkgPSBzaGlmdDsKKyAgICBteSAkZnVuY3Rpb24gPSBzaGlmdDsKKyAgICBteSAk
ZGF0YU5vZGUgPSBzaGlmdDsKKyAgICBteSAkbnVtUGFyYW1ldGVycyA9IHNoaWZ0OworICAgIG15
ICRpbXBsQ2xhc3NOYW1lID0gc2hpZnQ7CisgICAgbXkgJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25O
YW1lID0gc2hpZnQ7CisgICAgbXkgJHN2Z1Byb3BlcnR5VHlwZSA9IHNoaWZ0OworICAgIG15ICRz
dmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5VHlwZSA9IHNoaWZ0OworICAgIG15ICRzdmdMaXN0UHJv
cGVydHlUeXBlID0gc2hpZnQ7CisKKyAgICBteSAkcGFyYW1JbmRleCA9IDA7CisgICAgbXkgJGFy
Z3NJbmRleCA9IDA7CisgICAgbXkgJGhhc09wdGlvbmFsQXJndW1lbnRzID0gMDsKKworICAgIG15
ICRmdW5jdGlvbkJhc2UgPSAiIjsKKyAgICBpZiAoJGZ1bmN0aW9uLT5pc1N0YXRpYykgeworICAg
ICAgICAkZnVuY3Rpb25CYXNlID0gIiR7aW1wbENsYXNzTmFtZX06OiI7CisgICAgfSBlbHNpZiAo
JHN2Z1Byb3BlcnR5T3JMaXN0UHJvcGVydHlUeXBlIGFuZCAhJHN2Z0xpc3RQcm9wZXJ0eVR5cGUp
IHsKKyAgICAgICAgJGZ1bmN0aW9uQmFzZSA9ICJwb2RJbXBsLiI7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgJGZ1bmN0aW9uQmFzZSA9ICJpbXBsLT4iOworICAgIH0KKyAgICBteSAkZnVuY3Rpb25T
dHJpbmcgPSAiJGZ1bmN0aW9uQmFzZSRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZSgiOworCisg
ICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9t
QXJndW1lbnRIYW5kbGluZyJ9IGFuZCAhJGZ1bmN0aW9uLT5pc1N0YXRpYykgeworICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgUmVmUHRyPFNjcmlwdEFyZ3VtZW50cz4gc2NyaXB0QXJn
dW1lbnRzKGNyZWF0ZVNjcmlwdEFyZ3VtZW50cyhleGVjLCAkbnVtUGFyYW1ldGVycykpO1xuIik7
CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBSZWZQdHI8U2NyaXB0Q2FsbFN0YWNr
PiBjYWxsU3RhY2soY3JlYXRlU2NyaXB0Q2FsbFN0YWNrRm9ySW5zcGVjdG9yKGV4ZWMpKTtcbiIp
OworICAgICAgICAkaW1wbEluY2x1ZGVzeyJTY3JpcHRBcmd1bWVudHMuaCJ9ID0gMTsKKyAgICAg
ICAgJGltcGxJbmNsdWRlc3siU2NyaXB0Q2FsbFN0YWNrLmgifSA9IDE7CisgICAgICAgICRpbXBs
SW5jbHVkZXN7IlNjcmlwdENhbGxTdGFja0ZhY3RvcnkuaCJ9ID0gMTsKKyAgICB9CisKKyAgICBt
eSAkY2FsbFdpdGggPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkNhbGxXaXRoIn07CisgICAgaWYgKCRjYWxsV2l0aCBhbmQgISRmdW5jdGlvbi0+c2lnbmF0dXJl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0b3IifSkgeworICAgICAgICBteSAkY2Fs
bFdpdGhBcmcgPSAiQ09NUElMRV9BU1NFUlQoZmFsc2UpIjsKKyAgICAgICAgaWYgKCRjYWxsV2l0
aCBlcSAiRHluYW1pY0ZyYW1lIikgeworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIEZyYW1lKiBkeW5hbWljRnJhbWUgPSB0b0R5bmFtaWNGcmFtZShleGVjKTtcbiIpOworICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmICghZHluYW1pY0ZyYW1lKVxuIik7
CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKKyAgICAgICAgICAgICRjYWxsV2l0aEFyZyA9
ICJkeW5hbWljRnJhbWUiOworICAgICAgICB9IGVsc2lmICgkY2FsbFdpdGggZXEgIlNjcmlwdFN0
YXRlIikgeworICAgICAgICAgICAgJGNhbGxXaXRoQXJnID0gImV4ZWMiOworICAgICAgICB9IGVs
c2lmICgkY2FsbFdpdGggZXEgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQiKSB7CisgICAgICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
Q29udGV4dCA9IHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpO1xuIik7CisgICAgICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKCFzY3JpcHRDb250ZXh0KVxuIik7CisgICAg
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKKyAgICAgICAgICAgICRjYWxsV2l0aEFyZyA9ICJzY3Jp
cHRDb250ZXh0IjsgCisgICAgICAgIH0KKyAgICAgICAgJGZ1bmN0aW9uU3RyaW5nIC49ICIsICIg
aWYgJHBhcmFtSW5kZXg7CisgICAgICAgICRmdW5jdGlvblN0cmluZyAuPSAkY2FsbFdpdGhBcmc7
CisgICAgICAgICRwYXJhbUluZGV4Kys7CisgICAgfQorCisgICAgJGltcGxJbmNsdWRlc3siRXhj
ZXB0aW9uQ29kZS5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7IkpTRE9NQmluZGluZy5oIn0g
PSAxOworCisgICAgZm9yZWFjaCBteSAkcGFyYW1ldGVyIChAeyRmdW5jdGlvbi0+cGFyYW1ldGVy
c30pIHsKKyAgICAgICAgIyBPcHRpb25hbCBjYWxsYmFja3Mgc2hvdWxkIGJlIHRyZWF0ZWQgZGlm
ZmVyZW50bHksIGJlY2F1c2UgdGhleSBhbHdheXMgaGF2ZSBhIGRlZmF1bHQgdmFsdWUgKDApLAor
ICAgICAgICAjIGFuZCB3ZSBjYW4gcmVkdWNlIHRoZSBudW1iZXIgb2Ygb3ZlcmxvYWRlZCBmdW5j
dGlvbnMgdGhhdCB0YWtlIGEgZGlmZmVyZW50IG51bWJlciBvZiBwYXJhbWV0ZXJzLgorICAgICAg
ICAjIE9wdGlvbmFsIGFyZ3VtZW50cyB3aXRoIFtPcHRpb25hbD1DYWxsV2l0aERlZmF1bHRWYWx1
ZV0gb3IgW09wdGlvbmFsPUNhbGxXaXRoTnVsbFZhbHVlXQorICAgICAgICAjIHNob3VsZCBub3Qg
Z2VuZXJhdGUgYW4gZWFybHkgY2FsbC4KKyAgICAgICAgbXkgJG9wdGlvbmFsID0gJHBhcmFtZXRl
ci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik9wdGlvbmFsIn07CisgICAgICAgIGlmICgkb3B0aW9u
YWwgJiYgJG9wdGlvbmFsIG5lICJDYWxsV2l0aERlZmF1bHRWYWx1ZSIgJiYgJG9wdGlvbmFsIG5l
ICJDYWxsV2l0aE51bGxWYWx1ZSIgJiYgISRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJDYWxsYmFjayJ9KSB7CisgICAgICAgICAgICAjIEdlbmVyYXRlIGVhcmx5IGNhbGwgaWYgdGhl
cmUgYXJlIGVub3VnaCBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgaWYgKCEkaGFzT3B0aW9uYWxB
cmd1bWVudHMpIHsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJcbiAgICBz
aXplX3QgYXJnc0NvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpO1xuIik7CisgICAgICAgICAg
ICAgICAgJGhhc09wdGlvbmFsQXJndW1lbnRzID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoYXJnc0NvdW50IDw9ICRhcmdzSW5kZXgp
IHtcbiIpOworICAgICAgICAgICAgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCgk
ZnVuY3Rpb24sICRmdW5jdGlvblN0cmluZywgJHBhcmFtSW5kZXgsICIgICAgIiB4IDIsICRzdmdQ
cm9wZXJ0eVR5cGUsICRpbXBsQ2xhc3NOYW1lKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICB9XG5cbiIpOworICAgICAgICB9CisKKyAgICAgICAgbXkgJG5hbWUgPSAkcGFy
YW1ldGVyLT5uYW1lOworICAgICAgICBteSAkYXJnVHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJp
cE1vZHVsZSgkcGFyYW1ldGVyLT50eXBlKTsKKworICAgICAgICBpZiAoJGFyZ1R5cGUgZXEgIlhQ
YXRoTlNSZXNvbHZlciIpIHsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBS
ZWZQdHI8WFBhdGhOU1Jlc29sdmVyPiBjdXN0b21SZXNvbHZlcjtcbiIpOworICAgICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIFhQYXRoTlNSZXNvbHZlciogcmVzb2x2ZXIgPSB0b1hQ
YXRoTlNSZXNvbHZlcihleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KSk7XG4iKTsKKyAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoIXJlc29sdmVyKSB7XG4iKTsKKyAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgY3VzdG9tUmVzb2x2ZXIgPSBKU0N1
c3RvbVhQYXRoTlNSZXNvbHZlcjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5k
ZXgpKTtcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4i
KTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmVzb2x2ZXIgPSBj
dXN0b21SZXNvbHZlci5nZXQoKTtcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIH1cbiIpOworICAgICAgICB9IGVsc2lmICgkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ2FsbGJhY2sifSkgeworICAgICAgICAgICAgbXkgJGNhbGxiYWNrQ2xhc3NOYW1l
ID0gR2V0Q2FsbGJhY2tDbGFzc05hbWUoJGFyZ1R5cGUpOworICAgICAgICAgICAgJGltcGxJbmNs
dWRlc3siJGNhbGxiYWNrQ2xhc3NOYW1lLmgifSA9IDE7CisgICAgICAgICAgICBpZiAoJHBhcmFt
ZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik9wdGlvbmFsIn0pIHsKKyAgICAgICAgICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgUmVmUHRyPCRhcmdUeXBlPiAkbmFtZTtcbiIpOwor
ICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpID4gJGFyZ3NJbmRleCAmJiAhZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkuaXNV
bmRlZmluZWRPck51bGwoKSkge1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpLmlzT2JqZWN0KCkp
IHtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7XG4iKTsKKyAgICAgICAg
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgICAgICB9XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgICAgICRuYW1lID0gJHtjYWxsYmFja0NsYXNzTmFtZX06OmNyZWF0ZShhc09iamVj
dChleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
KTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9XG4iKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPD0gJGFyZ3NJbmRleCB8fCAhZXhlYy0+
YXJndW1lbnQoJGFyZ3NJbmRleCkuaXNPYmplY3QoKSkge1xuIik7CisgICAgICAgICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9N
SVNNQVRDSF9FUlIpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CisgICAg
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIH1cbiIpOworICAgICAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBSZWZQdHI8JGFyZ1R5cGU+ICRuYW1lID0gJHtj
YWxsYmFja0NsYXNzTmFtZX06OmNyZWF0ZShhc09iamVjdChleGVjLT5hcmd1bWVudCgkYXJnc0lu
ZGV4KSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTtcbiIpOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgIyBJZiB0aGUgIlN0cmljdFR5cGVDaGVja2lu
ZyIgZXh0ZW5kZWQgYXR0cmlidXRlIGlzIHByZXNlbnQsIGFuZCB0aGUgYXJndW1lbnQncyB0eXBl
IGlzIGFuCisgICAgICAgICAgICAjIGludGVyZmFjZSB0eXBlLCB0aGVuIGlmIHRoZSBpbmNvbWlu
ZyB2YWx1ZSBkb2VzIG5vdCBpbXBsZW1lbnQgdGhhdCBpbnRlcmZhY2UsIGEgVHlwZUVycm9yCisg
ICAgICAgICAgICAjIGlzIHRocm93biByYXRoZXIgdGhhbiBzaWxlbnRseSBwYXNzaW5nIE5VTEwg
dG8gdGhlIEMrKyBjb2RlLgorICAgICAgICAgICAgIyBQZXIgdGhlIFdlYiBJREwgYW5kIEVDTUFT
Y3JpcHQgc2VtYW50aWNzLCBpbmNvbWluZyB2YWx1ZXMgY2FuIGFsd2F5cyBiZSBjb252ZXJ0ZWQg
dG8gYm90aAorICAgICAgICAgICAgIyBzdHJpbmdzIGFuZCBudW1iZXJzLCBzbyBkbyBub3QgdGhy
b3cgVHlwZUVycm9yIGlmIHRoZSBhcmd1bWVudCBpcyBvZiB0aGVzZSB0eXBlcy4KKyAgICAgICAg
ICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlN0cmlj
dFR5cGVDaGVja2luZyJ9KSB7CisgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siPHJ1bnRp
bWUvRXJyb3IuaD4ifSA9IDE7CisKKyAgICAgICAgICAgICAgICBteSAkYXJnVmFsdWUgPSAiZXhl
Yy0+YXJndW1lbnQoJGFyZ3NJbmRleCkiOworICAgICAgICAgICAgICAgIGlmICghSXNOYXRpdmVU
eXBlKCRhcmdUeXBlKSkgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+ICRhcmdzSW5kZXggJiYgISR7YXJnVmFs
dWV9LmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYgISR7YXJnVmFsdWV9LmluaGVyaXRzKCZKUyR7YXJn
VHlwZX06OnNfaW5mbykpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTtcbiIpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbXkgJG9wdGlvbmFsID0g
JHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik9wdGlvbmFsIn07CisgICAgICAgICAg
ICBteSAkcGFyYW1ldGVyTWlzc2luZ1BvbGljeSA9ICJNaXNzaW5nSXNVbmRlZmluZWQiOworICAg
ICAgICAgICAgaWYgKCRvcHRpb25hbCAmJiAkb3B0aW9uYWwgZXEgIkNhbGxXaXRoTnVsbFZhbHVl
IikgeworICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJNaXNzaW5nUG9saWN5ID0gIk1pc3NpbmdJ
c0VtcHR5IjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgICIgLiBHZXROYXRpdmVUeXBlRnJvbVNpZ25hdHVyZSgkcGFyYW1ldGVyKSAuICIgJG5h
bWUoIiAuIEpTVmFsdWVUb05hdGl2ZSgkcGFyYW1ldGVyLCAiTUFZQkVfTUlTU0lOR19QQVJBTUVU
RVIoZXhlYywgJGFyZ3NJbmRleCwgJHBhcmFtZXRlck1pc3NpbmdQb2xpY3kpIikgLiAiKTtcbiIp
OworCisgICAgICAgICAgICAjIElmIGEgcGFyYW1ldGVyIGlzICJhbiBpbmRleCIgYW5kIGl0J3Mg
bmVnYXRpdmUgaXQgc2hvdWxkIHRocm93IGFuIElOREVYX1NJWkVfRVJSIGV4Y2VwdGlvbi4KKyAg
ICAgICAgICAgICMgQnV0IHRoaXMgbmVlZHMgdG8gYmUgZG9uZSBpbiB0aGUgYmluZGluZ3MsIGJl
Y2F1c2UgdGhlIHR5cGUgaXMgdW5zaWduZWQgYW5kIHRoZSBmYWN0IHRoYXQgaXQKKyAgICAgICAg
ICAgICMgd2FzIG5lZ2F0aXZlIHdpbGwgYmUgbG9zdCBieSB0aGUgdGltZSB3ZSdyZSBpbnNpZGUg
dGhlIERPTS4KKyAgICAgICAgICAgIGlmICgkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiSXNJbmRleCJ9KSB7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IGlmICgkbmFtZSA8IDApIHtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIElOREVYX1NJWkVfRVJSKTtcbiIpOwor
ICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICB9XG4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgIyBD
aGVjayBpZiB0aGUgdHlwZSBjb252ZXJzaW9uIHN1Y2NlZWRlZC4KKyAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpXG4iKTsKKyAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTtcbiIpOworCisgICAgICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3It
PklzU1ZHVHlwZU5lZWRpbmdUZWFyT2ZmKCRhcmdUeXBlKSBhbmQgbm90ICRpbXBsQ2xhc3NOYW1l
ID1+IC9MaXN0JC8pIHsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
aWYgKCEkbmFtZSkge1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpO1xuIik7Cisg
ICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIH1cbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgJGZ1bmN0aW9uU3RyaW5nIC49ICIsICIgaWYgJHBhcmFtSW5kZXg7CisKKyAgICAgICAgaWYg
KCRhcmdUeXBlIGVxICJOb2RlRmlsdGVyIikgeworICAgICAgICAgICAgJGZ1bmN0aW9uU3RyaW5n
IC49ICIkbmFtZS5nZXQoKSI7CisgICAgICAgIH0gZWxzaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1NW
R1R5cGVOZWVkaW5nVGVhck9mZigkYXJnVHlwZSkgYW5kIG5vdCAkaW1wbENsYXNzTmFtZSA9fiAv
TGlzdCQvKSB7CisgICAgICAgICAgICAkZnVuY3Rpb25TdHJpbmcgLj0gIiRuYW1lLT5wcm9wZXJ0
eVJlZmVyZW5jZSgpIjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICRmdW5jdGlvblN0
cmluZyAuPSAkbmFtZTsKKyAgICAgICAgfQorICAgICAgICAkYXJnc0luZGV4Kys7CisgICAgICAg
ICRwYXJhbUluZGV4Kys7CisgICAgfQorCisgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmVlZHNVc2VyR2VzdHVyZUNoZWNrIn0pIHsKKyAgICAgICAg
JGZ1bmN0aW9uU3RyaW5nIC49ICIsICIgaWYgJHBhcmFtSW5kZXg7CisgICAgICAgICRmdW5jdGlv
blN0cmluZyAuPSAiU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkiOwor
ICAgICAgICAkcGFyYW1JbmRleCsrOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJTY3JpcHRDb250
cm9sbGVyLmgifSA9IDE7CisgICAgfQorCisgICAgcmV0dXJuICgkZnVuY3Rpb25TdHJpbmcsICRw
YXJhbUluZGV4KTsKK30KKworc3ViIEdlbmVyYXRlQ2FsbGJhY2tIZWFkZXIKK3sKKyAgICBteSAk
b2JqZWN0ID0gc2hpZnQ7CisgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CisKKyAgICBteSAkaW50
ZXJmYWNlTmFtZSA9ICRkYXRhTm9kZS0+bmFtZTsKKyAgICBteSAkY2xhc3NOYW1lID0gIkpTJGlu
dGVyZmFjZU5hbWUiOworCisgICAgIyAtIEFkZCBkZWZhdWx0IGhlYWRlciB0ZW1wbGF0ZSBhbmQg
aGVhZGVyIHByb3RlY3Rpb24KKyAgICBwdXNoKEBoZWFkZXJDb250ZW50SGVhZGVyLCBHZW5lcmF0
ZUhlYWRlckNvbnRlbnRIZWFkZXIoJGRhdGFOb2RlKSk7CisKKyAgICAkaGVhZGVySW5jbHVkZXN7
IkFjdGl2ZURPTUNhbGxiYWNrLmgifSA9IDE7CisgICAgJGhlYWRlckluY2x1ZGVzeyIkaW50ZXJm
YWNlTmFtZS5oIn0gPSAxOworICAgICRoZWFkZXJJbmNsdWRlc3siSlNDYWxsYmFja0RhdGEuaCJ9
ID0gMTsKKyAgICAkaGVhZGVySW5jbHVkZXN7Ijx3dGYvRm9yd2FyZC5oPiJ9ID0gMTsKKworICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICJcbm5hbWVzcGFjZSBXZWJDb3JlIHtcblxuIik7CisgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgImNsYXNzICRjbGFzc05hbWUgOiBwdWJsaWMgJGludGVyZmFj
ZU5hbWUsIHB1YmxpYyBBY3RpdmVET01DYWxsYmFjayB7XG4iKTsKKyAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAicHVibGljOlxuIik7CisKKyAgICAjIFRoZSBzdGF0aWMgY3JlYXRlKCkgbWV0aG9k
LgorICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIFBhc3NSZWZQdHI8JGNsYXNz
TmFtZT4gY3JlYXRlKEpTQzo6SlNPYmplY3QqIGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KVxuIik7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB7XG4iKTsK
KyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3ICRj
bGFzc05hbWUoY2FsbGJhY2ssIGdsb2JhbE9iamVjdCkpO1xuIik7CisgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICB9XG5cbiIpOworCisgICAgIyBEZXN0cnVjdG9yCisgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICB2aXJ0dWFsIH4kY2xhc3NOYW1lKCk7XG4iKTsKKworICAgICMgRnVu
Y3Rpb25zCisgICAgbXkgJG51bUZ1bmN0aW9ucyA9IEB7JGRhdGFOb2RlLT5mdW5jdGlvbnN9Owor
ICAgIGlmICgkbnVtRnVuY3Rpb25zID4gMCkgeworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiXG4gICAgLy8gRnVuY3Rpb25zXG4iKTsKKyAgICAgICAgZm9yZWFjaCBteSAkZnVuY3Rpb24g
KEB7JGRhdGFOb2RlLT5mdW5jdGlvbnN9KSB7CisgICAgICAgICAgICBteSBAcGFyYW1zID0gQHsk
ZnVuY3Rpb24tPnBhcmFtZXRlcnN9OworICAgICAgICAgICAgaWYgKCEkZnVuY3Rpb24tPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbSJ9ICYmCisgICAgICAgICAgICAgICAg
IShHZXROYXRpdmVUeXBlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKSBlcSAiYm9vbCIpKSB7
CisgICAgICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBDT01QSUxFX0FTU0VS
VChmYWxzZSkiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiAgICB2aXJ0dWFsICIgLiBHZXROYXRpdmVUeXBlKCRmdW5jdGlvbi0+c2lnbmF0dXJl
LT50eXBlKSAuICIgIiAuICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lIC4gIigiKTsKKworICAg
ICAgICAgICAgbXkgQGFyZ3MgPSAoKTsKKyAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBhcmFtIChA
cGFyYW1zKSB7CisgICAgICAgICAgICAgICAgcHVzaChAYXJncywgR2V0TmF0aXZlVHlwZSgkcGFy
YW0tPnR5cGUpIC4gIiAiIC4gJHBhcmFtLT5uYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIGpvaW4oIiwgIiwgQGFyZ3MpKTsKKworICAgICAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIik7XG4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICJcbnByaXZhdGU6XG4iKTsKKworICAgICMgQ29uc3RydWN0
b3IKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRjbGFzc05hbWUoSlNDOjpKU09iamVj
dCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0Kik7XG5cbiIpOworCisgICAgIyBQcml2YXRl
IG1lbWJlcnMKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIEpTQ2FsbGJhY2tEYXRhKiBt
X2RhdGE7XG4iKTsKKyAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAifTtcblxuIik7CisKKyAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAifSAvLyBuYW1lc3BhY2UgV2ViQ29yZVxuXG4iKTsKKyAgICBt
eSAkY29uZGl0aW9uYWxTdHJpbmcgPSBHZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRkYXRhTm9k
ZSk7CisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNlbmRpZiAvLyAke2NvbmRpdGlvbmFsU3Ry
aW5nfVxuXG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CisgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiNlbmRpZlxuIik7Cit9CisKK3N1YiBHZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRpb24K
K3sKKyAgICBteSAoJG9iamVjdCwgJGRhdGFOb2RlKSA9IEBfOworCisgICAgbXkgJGludGVyZmFj
ZU5hbWUgPSAkZGF0YU5vZGUtPm5hbWU7CisgICAgbXkgJGNsYXNzTmFtZSA9ICJKUyRpbnRlcmZh
Y2VOYW1lIjsKKworICAgICMgLSBBZGQgZGVmYXVsdCBoZWFkZXIgdGVtcGxhdGUKKyAgICBwdXNo
KEBpbXBsQ29udGVudEhlYWRlciwgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkNvbnRlbnRIZWFkZXIo
JGRhdGFOb2RlKSk7CisKKyAgICAkaW1wbEluY2x1ZGVzeyJTY3JpcHRFeGVjdXRpb25Db250ZXh0
LmgifSA9IDE7CisgICAgJGltcGxJbmNsdWRlc3siPHJ1bnRpbWUvSlNMb2NrLmg+In0gPSAxOwor
CisgICAgQGltcGxDb250ZW50ID0gKCk7CisKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxudXNp
bmcgbmFtZXNwYWNlIEpTQztcblxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJuYW1lc3Bh
Y2UgV2ViQ29yZSB7XG5cbiIpOworCisgICAgIyBDb25zdHJ1Y3RvcgorICAgIHB1c2goQGltcGxD
b250ZW50LCAiJHtjbGFzc05hbWV9Ojoke2NsYXNzTmFtZX0oSlNPYmplY3QqIGNhbGxiYWNrLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KVxuIik7CisgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgOiBBY3RpdmVET01DYWxsYmFjayhnbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSlcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICwgbV9kYXRhKG5l
dyBKU0NhbGxiYWNrRGF0YShjYWxsYmFjaywgZ2xvYmFsT2JqZWN0KSlcbiIpOworICAgIHB1c2go
QGltcGxDb250ZW50LCAie1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwor
CisgICAgIyBEZXN0cnVjdG9yCisgICAgcHVzaChAaW1wbENvbnRlbnQsICIke2NsYXNzTmFtZX06
On4ke2NsYXNzTmFtZX0oKVxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgLy8gV2hlbiB0aGUgY29udGV4dCBpcyBkZXN0cm95ZWQsIGFsbCB0YXNrcyB3aXRoIGEg
cmVmZXJlbmNlIHRvIGEgY2FsbGJhY2tcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IC8vIHNob3VsZCBiZSBkZWxldGVkLiBTbyBpZiB0aGUgY29udGV4dCBpcyAwLCB3ZSBhcmUgb24g
dGhlIGNvbnRleHQgdGhyZWFkLlxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYg
KCFjb250ZXh0IHx8IGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKVxuIik7CisgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgICAgIGRlbGV0ZSBtX2RhdGE7XG4iKTsKKyAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBlbHNlXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAg
Y29udGV4dC0+cG9zdFRhc2soRGVsZXRlQ2FsbGJhY2tEYXRhVGFzazo6Y3JlYXRlKG1fZGF0YSkp
O1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIjaWZuZGVmIE5ERUJVR1xuIik7CisgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgbV9kYXRhID0gMDtcbiIpOworICAgIHB1c2goQGltcGxD
b250ZW50LCAiI2VuZGlmXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cbiIpOworCisg
ICAgIyBGdW5jdGlvbnMKKyAgICBteSAkbnVtRnVuY3Rpb25zID0gQHskZGF0YU5vZGUtPmZ1bmN0
aW9uc307CisgICAgaWYgKCRudW1GdW5jdGlvbnMgPiAwKSB7CisgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiXG4vLyBGdW5jdGlvbnNcbiIpOworICAgICAgICBmb3JlYWNoIG15ICRmdW5jdGlv
biAoQHskZGF0YU5vZGUtPmZ1bmN0aW9uc30pIHsKKyAgICAgICAgICAgIG15IEBwYXJhbXMgPSBA
eyRmdW5jdGlvbi0+cGFyYW1ldGVyc307CisgICAgICAgICAgICBpZiAoJGZ1bmN0aW9uLT5zaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b20ifSB8fAorICAgICAgICAgICAgICAg
ICEoR2V0TmF0aXZlVHlwZSgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSkgZXEgImJvb2wiKSkg
eworICAgICAgICAgICAgICAgIG5leHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEFk
ZEluY2x1ZGVzRm9yVHlwZUluSW1wbCgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSk7CisgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIiAuIEdldE5hdGl2ZVR5cGUoJGZ1bmN0aW9u
LT5zaWduYXR1cmUtPnR5cGUpIC4gIiAke2NsYXNzTmFtZX06OiIgLiAkZnVuY3Rpb24tPnNpZ25h
dHVyZS0+bmFtZSAuICIoIik7CisKKyAgICAgICAgICAgIG15IEBhcmdzID0gKCk7CisgICAgICAg
ICAgICBmb3JlYWNoIG15ICRwYXJhbSAoQHBhcmFtcykgeworICAgICAgICAgICAgICAgIEFkZElu
Y2x1ZGVzRm9yVHlwZUluSW1wbCgkcGFyYW0tPnR5cGUsIDEpOworICAgICAgICAgICAgICAgIHB1
c2goQGFyZ3MsIEdldE5hdGl2ZVR5cGUoJHBhcmFtLT50eXBlKSAuICIgIiAuICRwYXJhbS0+bmFt
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgam9pbigi
LCAiLCBAYXJncykpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIpXG4iKTsKKwor
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIGlmICghY2FuSW52b2tlQ2FsbGJhY2soKSlcbiIpOworICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiB0cnVlO1xuXG4iKTsKKyAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFJlZlB0cjwkY2xhc3NOYW1lPiBwcm90
ZWN0KHRoaXMpO1xuXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpT
TG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7XG5cbiIpOworICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRXhlYygpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzO1xuIik7CisKKyAgICAgICAgICAgIGZvcmVh
Y2ggbXkgJHBhcmFtIChAcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgbXkgJHBhcmFtTmFtZSA9
ICRwYXJhbS0+bmFtZTsKKyAgICAgICAgICAgICAgICBpZiAoJHBhcmFtLT50eXBlIGVxICJET01T
dHJpbmciKSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGFy
Z3MuYXBwZW5kKGpzU3RyaW5nKGV4ZWMsICR7cGFyYW1OYW1lfSkpO1xuIik7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgYXJncy5hcHBlbmQodG9KUyhleGVjLCBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLCAke3BhcmFt
TmFtZX0pKTtcbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiAgICBib29sIHJhaXNlZEV4Y2VwdGlvbiA9IGZh
bHNlO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBtX2RhdGEtPmlu
dm9rZUNhbGxiYWNrKGFyZ3MsICZyYWlzZWRFeGNlcHRpb24pO1xuIik7CisgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gIXJhaXNlZEV4Y2VwdGlvbjtcbiIpOworICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG4iKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHB1c2goQGltcGxDb250ZW50LCAiXG59XG4iKTsKKyAgICBteSAkY29uZGl0aW9uYWxTdHJp
bmcgPSBHZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRkYXRhTm9kZSk7CisgICAgcHVzaChAaW1w
bENvbnRlbnQsICJcbiNlbmRpZiAvLyAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRp
dGlvbmFsU3RyaW5nOworfQorCitzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2Fs
bCgpCit7CisgICAgbXkgJGZ1bmN0aW9uID0gc2hpZnQ7CisgICAgbXkgJGZ1bmN0aW9uU3RyaW5n
ID0gc2hpZnQ7CisgICAgbXkgJHBhcmFtSW5kZXggPSBzaGlmdDsKKyAgICBteSAkaW5kZW50ID0g
c2hpZnQ7CisgICAgbXkgJHN2Z1Byb3BlcnR5VHlwZSA9IHNoaWZ0OworICAgIG15ICRpbXBsQ2xh
c3NOYW1lID0gc2hpZnQ7CisKKyAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJDdXN0b21Bcmd1bWVudEhhbmRsaW5nIn0pIHsKKyAgICAgICAgJGZ1bmN0
aW9uU3RyaW5nIC49ICIsICIgaWYgJHBhcmFtSW5kZXg7CisgICAgICAgICRwYXJhbUluZGV4ICs9
IDI7CisgICAgICAgICRmdW5jdGlvblN0cmluZyAuPSAic2NyaXB0QXJndW1lbnRzLCBjYWxsU3Rh
Y2siOworICAgIH0KKworICAgIGlmIChAeyRmdW5jdGlvbi0+cmFpc2VzRXhjZXB0aW9uc30pIHsK
KyAgICAgICAgJGZ1bmN0aW9uU3RyaW5nIC49ICIsICIgaWYgJHBhcmFtSW5kZXg7CisgICAgICAg
ICRmdW5jdGlvblN0cmluZyAuPSAiZWMiOworICAgIH0KKyAgICAkZnVuY3Rpb25TdHJpbmcgLj0g
IikiOworCisgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlIGVxICJ2b2lkIikgewor
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICIkZnVuY3Rpb25TdHJpbmc7XG4i
KTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAic2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIGVjKTtcbiIpIGlmIEB7JGZ1bmN0aW9uLT5yYWlzZXNFeGNlcHRpb25zfTsKKworICAg
ICAgICBpZiAoJHN2Z1Byb3BlcnR5VHlwZSBhbmQgISRmdW5jdGlvbi0+aXNTdGF0aWMpIHsKKyAg
ICAgICAgICAgIGlmIChAeyRmdW5jdGlvbi0+cmFpc2VzRXhjZXB0aW9uc30pIHsKKyAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICJpZiAoIWVjKVxuIik7IAorICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gIiAgICBpbXBsLT5jb21t
aXRDaGFuZ2UoKTtcbiIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICJpbXBsLT5jb21taXRDaGFuZ2UoKTtcbiIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRp
bmRlbnQgLiAicmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOworICAg
IH0gZWxzZSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iIC4gJGluZGVudCAuICJK
U0M6OkpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkZnVuY3Rpb24tPnNpZ25h
dHVyZSwgMSwgJGltcGxDbGFzc05hbWUsICRmdW5jdGlvblN0cmluZywgImNhc3RlZFRoaXMiKSAu
ICI7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAic2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIGVjKTtcbiIpIGlmIEB7JGZ1bmN0aW9uLT5yYWlzZXNFeGNlcHRpb25zfTsK
KworICAgICAgICBteSAkY2FsbFdpdGggPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkNhbGxXaXRoIn07CisgICAgICAgIGlmICgkY2FsbFdpdGggYW5kICRjYWxs
V2l0aCBlcSAiU2NyaXB0U3RhdGUiKSB7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
JGluZGVudCAuICJpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpXG4iKTsKKyAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpO1xuIik7CisgICAgICAgIH0KKworICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgJGluZGVudCAuICJyZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7XG4iKTsKKyAgICB9
Cit9CisKK3N1YiBHZXROYXRpdmVUeXBlRnJvbVNpZ25hdHVyZQoreworICAgIG15ICRzaWduYXR1
cmUgPSBzaGlmdDsKKyAgICBteSAkdHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZSgk
c2lnbmF0dXJlLT50eXBlKTsKKworICAgIGlmICgkdHlwZSBlcSAidW5zaWduZWQgbG9uZyIgYW5k
ICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJc0luZGV4In0pIHsKKyAgICAgICAg
IyBTcGVjaWFsLWNhc2UgaW5kZXggYXJndW1lbnRzIGJlY2F1c2Ugd2UgbmVlZCB0byBjaGVjayB0
aGF0IHRoZXkgYXJlbid0IDwgMC4KKyAgICAgICAgcmV0dXJuICJpbnQiOworICAgIH0KKworICAg
IHJldHVybiBHZXROYXRpdmVUeXBlKCR0eXBlKTsKK30KKworbXkgJW5hdGl2ZVR5cGUgPSAoCisg
ICAgIkNvbXBhcmVIb3ciID0+ICJSYW5nZTo6Q29tcGFyZUhvdyIsCisgICAgIkRPTVN0cmluZyIg
PT4gImNvbnN0IFN0cmluZyYiLAorICAgICMgRklYTUU6IEFkZCBwcm9wZXIgc3VwcG9ydCBmb3Ig
VFtdLCBUW10/LCBzZXF1ZW5jZTxUPgorICAgICJET01TdHJpbmdbXSIgPT4gIkRPTVN0cmluZ0xp
c3QqIiwKKyAgICAiRE9NT2JqZWN0IiA9PiAiU2NyaXB0VmFsdWUiLAorICAgICJOb2RlRmlsdGVy
IiA9PiAiUmVmUHRyPE5vZGVGaWx0ZXI+IiwKKyAgICAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIiA9
PiAiUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4iLAorICAgICJJREJLZXkiID0+ICJSZWZQ
dHI8SURCS2V5PiIsCisgICAgImJvb2xlYW4iID0+ICJib29sIiwKKyAgICAiZG91YmxlIiA9PiAi
ZG91YmxlIiwKKyAgICAiZmxvYXQiID0+ICJmbG9hdCIsCisgICAgInNob3J0IiA9PiAic2hvcnQi
LAorICAgICJsb25nIiA9PiAiaW50IiwKKyAgICAidW5zaWduZWQgbG9uZyIgPT4gInVuc2lnbmVk
IiwKKyAgICAidW5zaWduZWQgc2hvcnQiID0+ICJ1bnNpZ25lZCBzaG9ydCIsCisgICAgImxvbmcg
bG9uZyIgPT4gImxvbmcgbG9uZyIsCisgICAgInVuc2lnbmVkIGxvbmcgbG9uZyIgPT4gInVuc2ln
bmVkIGxvbmcgbG9uZyIsCisgICAgIk1lZGlhUXVlcnlMaXN0TGlzdGVuZXIiID0+ICJSZWZQdHI8
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4iLAorICAgICJET01UaW1lU3RhbXAiID0+ICJET01UaW1l
U3RhbXAiCispOworCitzdWIgR2V0TmF0aXZlVHlwZQoreworICAgIG15ICR0eXBlID0gc2hpZnQ7
CisKKyAgICBteSAkc3ZnTmF0aXZlVHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRTVkdUeXBlTmVl
ZGluZ1RlYXJPZmYoJHR5cGUpOworICAgIHJldHVybiAiJHtzdmdOYXRpdmVUeXBlfSoiIGlmICRz
dmdOYXRpdmVUeXBlOworICAgIHJldHVybiAkbmF0aXZlVHlwZXskdHlwZX0gaWYgZXhpc3RzICRu
YXRpdmVUeXBleyR0eXBlfTsKKworICAgICMgRm9yIGFsbCBvdGhlciB0eXBlcywgdGhlIG5hdGl2
ZSB0eXBlIGlzIGEgcG9pbnRlciB3aXRoIHNhbWUgdHlwZSBuYW1lIGFzIHRoZSBJREwgdHlwZS4K
KyAgICByZXR1cm4gIiR7dHlwZX0qIjsKK30KKworc3ViIEdldFNWR1Byb3BlcnR5VHlwZXMKK3sK
KyAgICBteSAkaW1wbFR5cGUgPSBzaGlmdDsKKworICAgIG15ICRzdmdQcm9wZXJ0eVR5cGU7Cisg
ICAgbXkgJHN2Z0xpc3RQcm9wZXJ0eVR5cGU7CisgICAgbXkgJHN2Z05hdGl2ZVR5cGU7CisKKyAg
ICByZXR1cm4gKCRzdmdQcm9wZXJ0eVR5cGUsICRzdmdMaXN0UHJvcGVydHlUeXBlLCAkc3ZnTmF0
aXZlVHlwZSkgaWYgbm90ICRpbXBsVHlwZSA9fiAvU1ZHLzsKKyAgICAKKyAgICAkc3ZnTmF0aXZl
VHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRTVkdUeXBlTmVlZGluZ1RlYXJPZmYoJGltcGxUeXBl
KTsKKyAgICByZXR1cm4gKCRzdmdQcm9wZXJ0eVR5cGUsICRzdmdMaXN0UHJvcGVydHlUeXBlLCAk
c3ZnTmF0aXZlVHlwZSkgaWYgbm90ICRzdmdOYXRpdmVUeXBlOworCisgICAgIyBBcHBlbmQgc3Bh
Y2UgdG8gYXZvaWQgY29tcGlsYXRpb24gZXJyb3JzIHdoZW4gdXNpbmcgIFBhc3NSZWZQdHI8JHN2
Z05hdGl2ZVR5cGU+CisgICAgJHN2Z05hdGl2ZVR5cGUgPSAiJHN2Z05hdGl2ZVR5cGUgIjsKKwor
ICAgIG15ICRzdmdXcmFwcGVkTmF0aXZlVHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRTVkdXcmFw
cGVkVHlwZU5lZWRpbmdUZWFyT2ZmKCRpbXBsVHlwZSk7CisgICAgaWYgKCRzdmdOYXRpdmVUeXBl
ID1+IC9TVkdQcm9wZXJ0eVRlYXJPZmYvKSB7CisgICAgICAgICRzdmdQcm9wZXJ0eVR5cGUgPSAk
c3ZnV3JhcHBlZE5hdGl2ZVR5cGU7CisgICAgICAgICRoZWFkZXJJbmNsdWRlc3siJHN2Z1dyYXBw
ZWROYXRpdmVUeXBlLmgifSA9IDE7CisgICAgICAgICRoZWFkZXJJbmNsdWRlc3siU1ZHQW5pbWF0
ZWRQcm9wZXJ0eVRlYXJPZmYuaCJ9ID0gMTsKKyAgICB9IGVsc2lmICgkc3ZnTmF0aXZlVHlwZSA9
fiAvU1ZHTGlzdFByb3BlcnR5VGVhck9mZi8gb3IgJHN2Z05hdGl2ZVR5cGUgPX4gL1NWR1N0YXRp
Y0xpc3RQcm9wZXJ0eVRlYXJPZmYvKSB7CisgICAgICAgICRzdmdMaXN0UHJvcGVydHlUeXBlID0g
JHN2Z1dyYXBwZWROYXRpdmVUeXBlOworICAgICAgICAkaGVhZGVySW5jbHVkZXN7IiRzdmdXcmFw
cGVkTmF0aXZlVHlwZS5oIn0gPSAxOworICAgICAgICAkaGVhZGVySW5jbHVkZXN7IlNWR0FuaW1h
dGVkTGlzdFByb3BlcnR5VGVhck9mZi5oIn0gPSAxOworICAgIH0gZWxzaWYgKCRzdmdOYXRpdmVU
eXBlID1+IC9TVkdUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmLykgeworICAgICAgICAkc3Zn
TGlzdFByb3BlcnR5VHlwZSA9ICRzdmdXcmFwcGVkTmF0aXZlVHlwZTsKKyAgICAgICAgJGhlYWRl
ckluY2x1ZGVzeyIkc3ZnV3JhcHBlZE5hdGl2ZVR5cGUuaCJ9ID0gMTsKKyAgICAgICAgJGhlYWRl
ckluY2x1ZGVzeyJTVkdBbmltYXRlZExpc3RQcm9wZXJ0eVRlYXJPZmYuaCJ9ID0gMTsKKyAgICAg
ICAgJGhlYWRlckluY2x1ZGVzeyJTVkdUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmLmgifSA9
IDE7CisgICAgfSBlbHNpZiAoJHN2Z05hdGl2ZVR5cGUgPX4gL1NWR1BhdGhTZWdMaXN0UHJvcGVy
dHlUZWFyT2ZmLykgeworICAgICAgICAkc3ZnTGlzdFByb3BlcnR5VHlwZSA9ICRzdmdXcmFwcGVk
TmF0aXZlVHlwZTsKKyAgICAgICAgJGhlYWRlckluY2x1ZGVzeyIkc3ZnV3JhcHBlZE5hdGl2ZVR5
cGUuaCJ9ID0gMTsKKyAgICAgICAgJGhlYWRlckluY2x1ZGVzeyJTVkdBbmltYXRlZExpc3RQcm9w
ZXJ0eVRlYXJPZmYuaCJ9ID0gMTsKKyAgICAgICAgJGhlYWRlckluY2x1ZGVzeyJTVkdQYXRoU2Vn
TGlzdFByb3BlcnR5VGVhck9mZi5oIn0gPSAxOworICAgIH0KKworICAgIHJldHVybiAoJHN2Z1By
b3BlcnR5VHlwZSwgJHN2Z0xpc3RQcm9wZXJ0eVR5cGUsICRzdmdOYXRpdmVUeXBlKTsKK30KKwor
c3ViIElzTmF0aXZlVHlwZQoreworICAgIG15ICR0eXBlID0gc2hpZnQ7CisgICAgcmV0dXJuIGV4
aXN0cyAkbmF0aXZlVHlwZXskdHlwZX07Cit9CisKK3N1YiBJc0FycmF5VHlwZQoreworICAgIG15
ICR0eXBlID0gc2hpZnQ7CisgICAgIyBGSVhNRTogQWRkIHByb3BlciBzdXBwb3J0IGZvciBUW10s
IFRbXT8sIHNlcXVlbmNlPFQ+LgorICAgIHJldHVybiAkdHlwZSA9fiBtL1xbXF0kLzsKK30KKwor
c3ViIEpTVmFsdWVUb05hdGl2ZQoreworICAgIG15ICRzaWduYXR1cmUgPSBzaGlmdDsKKyAgICBt
eSAkdmFsdWUgPSBzaGlmdDsKKworICAgIG15ICRjb25kaXRpb25hbCA9ICRzaWduYXR1cmUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJDb25kaXRpb25hbCJ9OworICAgIG15ICR0eXBlID0gJGNvZGVH
ZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRzaWduYXR1cmUtPnR5cGUpOworCisgICAgcmV0dXJuICIk
dmFsdWUudG9Cb29sZWFuKGV4ZWMpIiBpZiAkdHlwZSBlcSAiYm9vbGVhbiI7CisgICAgcmV0dXJu
ICIkdmFsdWUudG9OdW1iZXIoZXhlYykiIGlmICR0eXBlIGVxICJkb3VibGUiOworICAgIHJldHVy
biAiJHZhbHVlLnRvRmxvYXQoZXhlYykiIGlmICR0eXBlIGVxICJmbG9hdCI7CisgICAgcmV0dXJu
ICIkdmFsdWUudG9JbnQzMihleGVjKSIgaWYgJHR5cGUgZXEgImxvbmciIG9yICR0eXBlIGVxICJz
aG9ydCI7CisgICAgcmV0dXJuICIkdmFsdWUudG9VSW50MzIoZXhlYykiIGlmICR0eXBlIGVxICJ1
bnNpZ25lZCBsb25nIiBvciAkdHlwZSBlcSAidW5zaWduZWQgc2hvcnQiOworICAgIHJldHVybiAi
c3RhdGljX2Nhc3Q8JHR5cGU+KCR2YWx1ZS50b0ludGVnZXIoZXhlYykpIiBpZiAkdHlwZSBlcSAi
bG9uZyBsb25nIiBvciAkdHlwZSBlcSAidW5zaWduZWQgbG9uZyBsb25nIjsKKworICAgIHJldHVy
biAidmFsdWVUb0RhdGUoZXhlYywgJHZhbHVlKSIgaWYgJHR5cGUgZXEgIkRhdGUiOworICAgIHJl
dHVybiAic3RhdGljX2Nhc3Q8UmFuZ2U6OkNvbXBhcmVIb3c+KCR2YWx1ZS50b0ludDMyKGV4ZWMp
KSIgaWYgJHR5cGUgZXEgIkNvbXBhcmVIb3ciOworCisgICAgaWYgKCR0eXBlIGVxICJET01TdHJp
bmciKSB7CisgICAgICAgIHJldHVybiAidmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soZXhlYywg
JHZhbHVlKSIgaWYgJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnZlcnROdWxs
VG9OdWxsU3RyaW5nIn0gfHwgJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJlZmxl
Y3QifTsKKyAgICAgICAgcmV0dXJuICJ2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENo
ZWNrKGV4ZWMsICR2YWx1ZSkiIGlmICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJD
b252ZXJ0VW5kZWZpbmVkT3JOdWxsVG9OdWxsU3RyaW5nIn07CisgICAgICAgIHJldHVybiAidXN0
cmluZ1RvU3RyaW5nKCR2YWx1ZS5pc0VtcHR5KCkgPyBVU3RyaW5nKCkgOiAkdmFsdWUudG9TdHJp
bmcoZXhlYykpIjsKKyAgICB9CisKKyAgICBpZiAoJHR5cGUgZXEgIkRPTU9iamVjdCIpIHsKKyAg
ICAgICAgcmV0dXJuICJleGVjLT5nbG9iYWxEYXRhKCksICR2YWx1ZSI7CisgICAgfQorCisgICAg
aWYgKCR0eXBlIGVxICJOb2RlRmlsdGVyIikgeworICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygi
SlMkdHlwZS5oIiwgJGNvbmRpdGlvbmFsKTsKKyAgICAgICAgcmV0dXJuICJ0byR0eXBlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgJHZhbHVlKSI7CisgICAgfQorCisgICAgaWYgKCR0eXBlIGVxICJNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyIikgeworICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiTWVkaWFR
dWVyeUxpc3RMaXN0ZW5lci5oIiwgJGNvbmRpdGlvbmFsKTsKKyAgICAgICAgcmV0dXJuICJNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyOjpjcmVhdGUoU2NyaXB0VmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCAiIC4gJHZhbHVlIC4iKSkiOworICAgIH0KKworICAgIGlmICgkdHlwZSBlcSAiU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlIiBvciAkdHlwZSBlcSAiYW55IikgeworICAgICAgICBBZGRUb0ltcGxJbmNs
dWRlcygiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiLCAkY29uZGl0aW9uYWwpOworICAgICAgICBy
ZXR1cm4gIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsICR2YWx1ZSkiOworICAg
IH0KKworICAgIGlmICgkdHlwZSBlcSAiSURCS2V5IikgeworICAgICAgICBBZGRUb0ltcGxJbmNs
dWRlcygiSURCQmluZGluZ1V0aWxpdGllcy5oIiwgJGNvbmRpdGlvbmFsKTsKKyAgICAgICAgQWRk
VG9JbXBsSW5jbHVkZXMoIklEQktleS5oIiwgJGNvbmRpdGlvbmFsKTsKKyAgICAgICAgcmV0dXJu
ICJjcmVhdGVJREJLZXlGcm9tVmFsdWUoZXhlYywgJHZhbHVlKSI7CisgICAgfQorCisgICAgaWYg
KCR0eXBlIGVxICJET01TdHJpbmdbXSIpIHsKKyAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpT
RE9NU3RyaW5nTGlzdC5oIiwgJGNvbmRpdGlvbmFsKTsKKyAgICAgICAgcmV0dXJuICJ0b0RPTVN0
cmluZ0xpc3QoJHZhbHVlKSI7CisgICAgfQorCisgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkhUTUxP
cHRpb25FbGVtZW50LmgiLCAkY29uZGl0aW9uYWwpIGlmICR0eXBlIGVxICJIVE1MT3B0aW9uRWxl
bWVudCI7CisgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTQ3VzdG9tVm9pZENhbGxiYWNrLmgiLCAk
Y29uZGl0aW9uYWwpIGlmICR0eXBlIGVxICJWb2lkQ2FsbGJhY2siOworICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCJFdmVudC5oIiwgJGNvbmRpdGlvbmFsKSBpZiAkdHlwZSBlcSAiRXZlbnQiOworCisg
ICAgIyBEZWZhdWx0LCBhc3N1bWUgYXV0b2dlbmVyYXRlZCB0eXBlIGNvbnZlcnNpb24gcm91dGlu
ZXMKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlMkdHlwZS5oIiwgJGNvbmRpdGlvbmFsKTsKKyAg
ICByZXR1cm4gInRvJHR5cGUoJHZhbHVlKSI7Cit9CisKK3N1YiBOYXRpdmVUb0pTVmFsdWUKK3sK
KyAgICBteSAkc2lnbmF0dXJlID0gc2hpZnQ7CisgICAgbXkgJGluRnVuY3Rpb25DYWxsID0gc2hp
ZnQ7CisgICAgbXkgJGltcGxDbGFzc05hbWUgPSBzaGlmdDsKKyAgICBteSAkdmFsdWUgPSBzaGlm
dDsKKyAgICBteSAkdGhpc1ZhbHVlID0gc2hpZnQ7CisKKyAgICBteSAkY29uZGl0aW9uYWwgPSAk
c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uZGl0aW9uYWwifTsKKyAgICBteSAk
dHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZSgkc2lnbmF0dXJlLT50eXBlKTsKKwor
ICAgIHJldHVybiAianNCb29sZWFuKCR2YWx1ZSkiIGlmICR0eXBlIGVxICJib29sZWFuIjsKKwor
ICAgICMgTmVlZCB0byBjaGVjayBEYXRlIHR5cGUgYmVmb3JlIElzUHJpbWl0aXZlVHlwZSgpLgor
ICAgIGlmICgkdHlwZSBlcSAiRGF0ZSIpIHsKKyAgICAgICAgcmV0dXJuICJqc0RhdGVPck51bGwo
ZXhlYywgJHZhbHVlKSI7CisgICAgfQorCisgICAgaWYgKCRzaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJSZWZsZWN0In0gYW5kICgkdHlwZSBlcSAidW5zaWduZWQgbG9uZyIgb3IgJHR5
cGUgZXEgInVuc2lnbmVkIHNob3J0IikpIHsKKyAgICAgICAgJHZhbHVlID1+IHMvZ2V0VW5zaWdu
ZWRJbnRlZ3JhbEF0dHJpYnV0ZS9nZXRJbnRlZ3JhbEF0dHJpYnV0ZS9nOworICAgICAgICByZXR1
cm4gImpzTnVtYmVyKHN0ZDo6bWF4KDAsICIgLiAkdmFsdWUgLiAiKSkiOworICAgIH0KKworICAg
IGlmICgkY29kZUdlbmVyYXRvci0+SXNQcmltaXRpdmVUeXBlKCR0eXBlKSBvciAkdHlwZSBlcSAi
RE9NVGltZVN0YW1wIikgeworICAgICAgICByZXR1cm4gImpzTnVtYmVyKCR2YWx1ZSkiOworICAg
IH0KKworICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNTdHJpbmdUeXBlKCR0eXBlKSkgeworICAg
ICAgICBBZGRUb0ltcGxJbmNsdWRlcygiS1VSTC5oIiwgJGNvbmRpdGlvbmFsKTsKKyAgICAgICAg
bXkgJGNvbnYgPSAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29udmVydE51bGxT
dHJpbmdUbyJ9OworICAgICAgICBpZiAoZGVmaW5lZCAkY29udikgeworICAgICAgICAgICAgcmV0
dXJuICJqc1N0cmluZ09yTnVsbChleGVjLCAkdmFsdWUpIiBpZiAkY29udiBlcSAiTnVsbCI7Cisg
ICAgICAgICAgICByZXR1cm4gImpzU3RyaW5nT3JVbmRlZmluZWQoZXhlYywgJHZhbHVlKSIgaWYg
JGNvbnYgZXEgIlVuZGVmaW5lZCI7CisgICAgICAgICAgICByZXR1cm4gImpzU3RyaW5nT3JGYWxz
ZShleGVjLCAkdmFsdWUpIiBpZiAkY29udiBlcSAiRmFsc2UiOworCisgICAgICAgICAgICBkaWUg
IlVua25vd24gdmFsdWUgZm9yIENvbnZlcnROdWxsU3RyaW5nVG8gZXh0ZW5kZWQgYXR0cmlidXRl
IjsKKyAgICAgICAgfQorICAgICAgICAkY29udiA9ICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJDb252ZXJ0U2NyaXB0U3RyaW5nIn07CisgICAgICAgIHJldHVybiAianNPd25lZFN0
cmluZ09yTnVsbChleGVjLCAkdmFsdWUpIiBpZiAkY29udjsKKyAgICAgICAgQWRkVG9JbXBsSW5j
bHVkZXMoIjxydW50aW1lL0pTU3RyaW5nLmg+IiwgJGNvbmRpdGlvbmFsKTsKKyAgICAgICAgcmV0
dXJuICJqc1N0cmluZyhleGVjLCAkdmFsdWUpIjsKKyAgICB9CisgICAgCisgICAgbXkgJGdsb2Jh
bE9iamVjdCA9ICIkdGhpc1ZhbHVlLT5nbG9iYWxPYmplY3QoKSI7CisKKyAgICBpZiAoJHR5cGUg
ZXEgIkNTU1N0eWxlRGVjbGFyYXRpb24iKSB7CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIiwgJGNvbmRpdGlvbmFsKTsKKyAgICB9CisKKyAg
ICBpZiAoJHR5cGUgZXEgIk5vZGVMaXN0IikgeworICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygi
TmFtZU5vZGVMaXN0LmgiLCAkY29uZGl0aW9uYWwpOworICAgIH0KKworICAgIGlmICgkdHlwZSBl
cSAiRE9NT2JqZWN0IikgeworICAgICAgICBpZiAoJGltcGxDbGFzc05hbWUgZXEgIkRvY3VtZW50
IikgeworICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmgiLCAkY29uZGl0aW9uYWwpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
cmV0dXJuICIoJHZhbHVlLmhhc05vVmFsdWUoKSA/IGpzTnVsbCgpIDogJHZhbHVlLmpzVmFsdWUo
KSkiOworICAgICAgICB9CisgICAgfSBlbHNpZiAoJHR5cGUgPX4gL1NWR1BhdGhTZWcvKSB7Cisg
ICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKUyR0eXBlLmgiLCAkY29uZGl0aW9uYWwpOworICAg
ICAgICBteSAkam9pbmVkTmFtZSA9ICR0eXBlOworICAgICAgICAkam9pbmVkTmFtZSA9fiBzL0Fi
c3xSZWwvLzsKKyAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIiRqb2luZWROYW1lLmgiLCAkY29u
ZGl0aW9uYWwpOworICAgIH0gZWxzaWYgKCR0eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUi
IG9yICR0eXBlIGVxICJhbnkiKSB7CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJTZXJpYWxp
emVkU2NyaXB0VmFsdWUuaCIsICRjb25kaXRpb25hbCk7CisgICAgICAgIHJldHVybiAiJHZhbHVl
ID8gJHZhbHVlLT5kZXNlcmlhbGl6ZShleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSkg
OiBqc051bGwoKSI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgIyBEZWZhdWx0LCBpbmNsdWRlIGhl
YWRlciB3aXRoIHNhbWUgbmFtZS4KKyAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTJHR5cGUu
aCIsICRjb25kaXRpb25hbCk7CisgICAgICAgIGlmIChJc1R5cGVkQXJyYXlUeXBlKCR0eXBlKSkg
eworICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjx3dGYvJHR5cGUuaD4iLCAkY29uZGl0
aW9uYWwpIGlmIG5vdCAkY29kZUdlbmVyYXRvci0+QXZvaWRJbmNsdXNpb25PZlR5cGUoJHR5cGUp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIiR0eXBl
LmgiLCAkY29uZGl0aW9uYWwpIGlmIG5vdCAkY29kZUdlbmVyYXRvci0+QXZvaWRJbmNsdXNpb25P
ZlR5cGUoJHR5cGUpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICR2YWx1ZSBpZiAk
Y29kZUdlbmVyYXRvci0+SXNTVkdBbmltYXRlZFR5cGUoJHR5cGUpOworCisgICAgaWYgKCRzaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZXR1cm5zTmV3In0pIHsgICAgICAgIAorICAg
ICAgICByZXR1cm4gInRvSlNOZXdseUNyZWF0ZWQoZXhlYywgJGdsb2JhbE9iamVjdCwgV1RGOjpn
ZXRQdHIoJHZhbHVlKSkiOworICAgIH0KKworICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNTVkdB
bmltYXRlZFR5cGUoJGltcGxDbGFzc05hbWUpKSB7CisgICAgICAgICMgQ29udmVydCBmcm9tIGFi
c3RyYWN0IFNWR1Byb3BlcnR5IHRvIHJlYWwgdHlwZSwgc28gdGhlIHJpZ2h0IHRvSlMoKSBtZXRo
b2QgY2FuIGJlIGludm9rZWQuCisgICAgICAgICR2YWx1ZSA9ICJzdGF0aWNfY2FzdDwiIC4gR2V0
TmF0aXZlVHlwZSgkdHlwZSkgLiAiPigkdmFsdWUpIjsKKyAgICB9IGVsc2lmICgkY29kZUdlbmVy
YXRvci0+SXNTVkdUeXBlTmVlZGluZ1RlYXJPZmYoJHR5cGUpIGFuZCBub3QgJGltcGxDbGFzc05h
bWUgPX4gL0xpc3QkLykgeworICAgICAgICBteSAkdGVhck9mZlR5cGUgPSAkY29kZUdlbmVyYXRv
ci0+R2V0U1ZHVHlwZU5lZWRpbmdUZWFyT2ZmKCR0eXBlKTsKKyAgICAgICAgaWYgKCRjb2RlR2Vu
ZXJhdG9yLT5Jc1NWR1R5cGVXaXRoV3JpdGFibGVQcm9wZXJ0aWVzTmVlZGluZ1RlYXJPZmYoJHR5
cGUpIGFuZCAkaW5GdW5jdGlvbkNhbGwgZXEgMCBhbmQgbm90IGRlZmluZWQgJHNpZ25hdHVyZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltbXV0YWJsZSJ9KSB7CisgICAgICAgICAgICBteSAkZ2V0
dGVyID0gJHZhbHVlOworICAgICAgICAgICAgJGdldHRlciA9fiBzL2ltcGxcLi8vOworICAgICAg
ICAgICAgJGdldHRlciA9fiBzL2ltcGwtPi8vOworICAgICAgICAgICAgJGdldHRlciA9fiBzL1wo
XCkvLzsKKyAgICAgICAgICAgIG15ICR1cGRhdGVNZXRob2QgPSAiJiR7aW1wbENsYXNzTmFtZX06
OnVwZGF0ZSIgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkZ2V0dGVyKTsKKworICAgICAg
ICAgICAgbXkgJHNlbGZJc1RlYXJPZmZUeXBlID0gJGNvZGVHZW5lcmF0b3ItPklzU1ZHVHlwZU5l
ZWRpbmdUZWFyT2ZmKCRpbXBsQ2xhc3NOYW1lKTsKKyAgICAgICAgICAgIGlmICgkc2VsZklzVGVh
ck9mZlR5cGUpIHsKKyAgICAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiU1ZHU3RhdGlj
UHJvcGVydHlXaXRoUGFyZW50VGVhck9mZi5oIiwgJGNvbmRpdGlvbmFsKTsKKyAgICAgICAgICAg
ICAgICAkdGVhck9mZlR5cGUgPX4gcy9TVkdQcm9wZXJ0eVRlYXJPZmY8L1NWR1N0YXRpY1Byb3Bl
cnR5V2l0aFBhcmVudFRlYXJPZmY8JGltcGxDbGFzc05hbWUsIC87CisKKyAgICAgICAgICAgICAg
ICBpZiAoJHZhbHVlID1+IC9tYXRyaXgvIGFuZCAkaW1wbENsYXNzTmFtZSBlcSAiU1ZHVHJhbnNm
b3JtIikgeworICAgICAgICAgICAgICAgICAgICAjIFNWR1RyYW5zZm9ybSBvZmZlcnMgYSBtYXRy
aXgoKSBtZXRob2QgZm9yIGludGVybmFsIHVzYWdlIHRoYXQgcmV0dXJucyBhbiBBZmZpbmVUcmFu
c2Zvcm0KKyAgICAgICAgICAgICAgICAgICAgIyBhbmQgYSBzdmdNYXRyaXgoKSBtZXRob2QgcmV0
dXJuaW5nIGEgU1ZHTWF0cml4LCB1c2VkIGZvciB0aGUgYmluZGluZ3MuCisgICAgICAgICAgICAg
ICAgICAgICR2YWx1ZSA9fiBzL21hdHJpeC9zdmdNYXRyaXgvOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICR2YWx1ZSA9ICIke3RlYXJPZmZUeXBlfTo6Y3JlYXRlKGNhc3Rl
ZFRoaXMtPmltcGwoKSwgJHZhbHVlLCAkdXBkYXRlTWV0aG9kKSI7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJTVkdTdGF0aWNQcm9wZXJ0
eVRlYXJPZmYuaCIsICRjb25kaXRpb25hbCk7CisgICAgICAgICAgICAgICAgJHRlYXJPZmZUeXBl
ID1+IHMvU1ZHUHJvcGVydHlUZWFyT2ZmPC9TVkdTdGF0aWNQcm9wZXJ0eVRlYXJPZmY8JGltcGxD
bGFzc05hbWUsIC87CisgICAgICAgICAgICAgICAgJHZhbHVlID0gIiR7dGVhck9mZlR5cGV9Ojpj
cmVhdGUoaW1wbCwgJHZhbHVlLCAkdXBkYXRlTWV0aG9kKSI7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzaWYgKCR0ZWFyT2ZmVHlwZSA9fiAvU1ZHU3RhdGljTGlzdFByb3BlcnR5VGVhck9m
Zi8pIHsKKyAgICAgICAgICAgICR2YWx1ZSA9ICIke3RlYXJPZmZUeXBlfTo6Y3JlYXRlKGltcGws
ICR2YWx1ZSkiOworICAgICAgICB9IGVsc2lmIChub3QgJHRlYXJPZmZUeXBlID1+IC9TVkcoUG9p
bnR8UGF0aFNlZylMaXN0LykgeworICAgICAgICAgICAgJHZhbHVlID0gIiR7dGVhck9mZlR5cGV9
OjpjcmVhdGUoJHZhbHVlKSI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gInRvSlMo
ZXhlYywgJGdsb2JhbE9iamVjdCwgV1RGOjpnZXRQdHIoJHZhbHVlKSkiOworfQorCitzdWIgY2Vp
bGluZ1RvUG93ZXJPZjIKK3sKKyAgICBteSAoJHNpemUpID0gQF87CisKKyAgICBteSAkcG93ZXJP
ZjIgPSAxOworICAgIHdoaWxlICgkc2l6ZSA+ICRwb3dlck9mMikgeworICAgICAgICAkcG93ZXJP
ZjIgPDw9IDE7CisgICAgfQorCisgICAgcmV0dXJuICRwb3dlck9mMjsKK30KKworIyBJbnRlcm5h
bCBIZWxwZXIKK3N1YiBHZW5lcmF0ZUhhc2hUYWJsZQoreworICAgIG15ICRvYmplY3QgPSBzaGlm
dDsKKworICAgIG15ICRuYW1lID0gc2hpZnQ7CisgICAgbXkgJHNpemUgPSBzaGlmdDsKKyAgICBt
eSAka2V5cyA9IHNoaWZ0OworICAgIG15ICRzcGVjaWFscyA9IHNoaWZ0OworICAgIG15ICR2YWx1
ZTEgPSBzaGlmdDsKKyAgICBteSAkdmFsdWUyID0gc2hpZnQ7CisgICAgbXkgJGNvbmRpdGlvbmFs
cyA9IHNoaWZ0OworCisgICAgIyBHZW5lcmF0ZSBzaXplIGRhdGEgZm9yIGNvbXBhY3QnIHNpemUg
aGFzaCB0YWJsZQorCisgICAgbXkgQHRhYmxlID0gKCk7CisgICAgbXkgQGxpbmtzID0gKCk7CisK
KyAgICBteSAkY29tcGFjdFNpemUgPSBjZWlsaW5nVG9Qb3dlck9mMigkc2l6ZSAqIDIpOworCisg
ICAgbXkgJG1heERlcHRoID0gMDsKKyAgICBteSAkY29sbGlzaW9ucyA9IDA7CisgICAgbXkgJG51
bUVudHJpZXMgPSAkY29tcGFjdFNpemU7CisKKyAgICBteSAkaSA9IDA7CisgICAgZm9yZWFjaCAo
QHska2V5c30pIHsKKyAgICAgICAgbXkgJGRlcHRoID0gMDsKKyAgICAgICAgbXkgJGggPSAkb2Jq
ZWN0LT5HZW5lcmF0ZUhhc2hWYWx1ZSgkXykgJSAkbnVtRW50cmllczsKKworICAgICAgICB3aGls
ZSAoZGVmaW5lZCgkdGFibGVbJGhdKSkgeworICAgICAgICAgICAgaWYgKGRlZmluZWQoJGxpbmtz
WyRoXSkpIHsKKyAgICAgICAgICAgICAgICAkaCA9ICRsaW5rc1skaF07CisgICAgICAgICAgICAg
ICAgJGRlcHRoKys7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICRjb2xs
aXNpb25zKys7CisgICAgICAgICAgICAgICAgJGxpbmtzWyRoXSA9ICRjb21wYWN0U2l6ZTsKKyAg
ICAgICAgICAgICAgICAkaCA9ICRjb21wYWN0U2l6ZTsKKyAgICAgICAgICAgICAgICAkY29tcGFj
dFNpemUrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgICR0YWJsZVskaF0g
PSAkaTsKKworICAgICAgICAkaSsrOworICAgICAgICAkbWF4RGVwdGggPSAkZGVwdGggaWYgKCRk
ZXB0aCA+ICRtYXhEZXB0aCk7CisgICAgfQorCisgICAgIyBTdGFydCBvdXRwdXRpbmcgdGhlIGhh
c2h0YWJsZXMKKyAgICBteSAkbmFtZUVudHJpZXMgPSAiJHtuYW1lfVZhbHVlcyI7CisgICAgJG5h
bWVFbnRyaWVzID1+IHMvOi9fL2c7CisKKyAgICBpZiAoKCRuYW1lID1+IC9Qcm90b3R5cGUvKSBv
ciAoJG5hbWUgPX4gL0NvbnN0cnVjdG9yLykpIHsKKyAgICAgICAgbXkgJHR5cGUgPSAkbmFtZTsK
KyAgICAgICAgbXkgJGltcGxDbGFzczsKKworICAgICAgICBpZiAoJG5hbWUgPX4gL1Byb3RvdHlw
ZS8pIHsKKyAgICAgICAgICAgICR0eXBlID1+IHMvUHJvdG90eXBlLiovLzsKKyAgICAgICAgICAg
ICRpbXBsQ2xhc3MgPSAkdHlwZTsgJGltcGxDbGFzcyA9fiBzL1dyYXBwZXIkLy87CisgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIi8qIEhhc2ggdGFibGUgZm9yIHByb3RvdHlwZSAqL1xu
Iik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkdHlwZSA9fiBzL0NvbnN0cnVjdG9y
LiovLzsKKyAgICAgICAgICAgICRpbXBsQ2xhc3MgPSAkdHlwZTsgJGltcGxDbGFzcyA9fiBzL0Nv
bnN0cnVjdG9yJC8vOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIvKiBIYXNoIHRh
YmxlIGZvciBjb25zdHJ1Y3RvciAqL1xuIik7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIi8qIEhhc2ggdGFibGUgKi9cbiIpOworICAgIH0KKwor
ICAgICMgRHVtcCB0aGUgaGFzaCB0YWJsZQorICAgIHB1c2goQGltcGxDb250ZW50LCAiXG5zdGF0
aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgJG5hbWVFbnRyaWVzXFtcXSA9XG5ce1xuIik7CisgICAg
JGkgPSAwOworICAgIGZvcmVhY2ggbXkgJGtleSAoQHska2V5c30pIHsKKyAgICAgICAgbXkgJGNv
bmRpdGlvbmFsOworICAgICAgICBteSAkdGFyZ2V0VHlwZTsKKworICAgICAgICBpZiAoJGNvbmRp
dGlvbmFscykgeworICAgICAgICAgICAgJGNvbmRpdGlvbmFsID0gJGNvbmRpdGlvbmFscy0+eyRr
ZXl9OworICAgICAgICB9CisgICAgICAgIGlmICgkY29uZGl0aW9uYWwpIHsKKyAgICAgICAgICAg
IG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUNvbmRpdGlv
bmFsU3RyaW5nRnJvbUF0dHJpYnV0ZVZhbHVlKCRjb25kaXRpb25hbCk7CisgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIik7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGlmICgiQCRzcGVjaWFsc1skaV0iID1+IG0vRnVuY3Rpb24v
KSB7CisgICAgICAgICAgICAkdGFyZ2V0VHlwZSA9ICJzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlv
bj4iOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJHRhcmdldFR5cGUgPSAic3RhdGlj
X2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+IjsKKyAgICAgICAgfQorICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICB7IFwiJGtleVwiLCBAJHNwZWNpYWxzWyRpXSwgKGludHB0
cl90KSIgLiAkdGFyZ2V0VHlwZSAuICIoQCR2YWx1ZTFbJGldKSwgKGludHB0cl90KUAkdmFsdWUy
WyRpXSwgTm9JbnRyaW5zaWMgfSxcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNl
bmRpZlxuIikgaWYgJGNvbmRpdGlvbmFsOworICAgICAgICArKyRpOworICAgIH0KKyAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICB7IDAsIDAsIDAsIDAsIE5vSW50cmluc2ljIH1cbiIpOworICAg
IHB1c2goQGltcGxDb250ZW50LCAifTtcblxuIik7CisgICAgbXkgJGNvbXBhY3RTaXplTWFzayA9
ICRudW1FbnRyaWVzIC0gMTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgInN0YXRpYyBjb25zdCBI
YXNoVGFibGUgJG5hbWUgPSB7ICRjb21wYWN0U2l6ZSwgJGNvbXBhY3RTaXplTWFzaywgJG5hbWVF
bnRyaWVzLCAwIH07XG4iKTsKK30KKworIyBQYXVsIEhzaWVoJ3MgU3VwZXJGYXN0SGFzaAorIyBo
dHRwOi8vd3d3LmF6aWxsaW9ubW9ua2V5cy5jb20vcWVkL2hhc2guaHRtbAorc3ViIEdlbmVyYXRl
SGFzaFZhbHVlCit7CisgICAgbXkgJG9iamVjdCA9IHNoaWZ0OworCisgICAgbXkgQGNoYXJzID0g
c3BsaXQoLyAqLywgJF9bMF0pOworCisgICAgIyBUaGlzIGhhc2ggaXMgZGVzaWduZWQgdG8gd29y
ayBvbiAxNi1iaXQgY2h1bmtzIGF0IGEgdGltZS4gQnV0IHNpbmNlIHRoZSBub3JtYWwgY2FzZQor
ICAgICMgKGFib3ZlKSBpcyB0byBoYXNoIFVURi0xNiBjaGFyYWN0ZXJzLCB3ZSBqdXN0IHRyZWF0
IHRoZSA4LWJpdCBjaGFycyBhcyBpZiB0aGV5CisgICAgIyB3ZXJlIDE2LWJpdCBjaHVua3MsIHdo
aWNoIHNob3VsZCBnaXZlIG1hdGNoaW5nIHJlc3VsdHMKKyAgICAKKyAgICBteSAkRVhQMl8zMiA9
IDQyOTQ5NjcyOTY7CisgICAgCisgICAgbXkgJGhhc2ggPSAweDllMzc3OWI5OworICAgIG15ICRs
ICAgID0gc2NhbGFyIEBjaGFyczsgI0kgd2lzaCB0aGlzIHdhcyBpbiBSdWJ5IC0tLSBNYWtzCisg
ICAgbXkgJHJlbSAgPSAkbCAmIDE7CisgICAgJGwgPSAkbCA+PiAxOworICAgIAorICAgIG15ICRz
ID0gMDsKKyAgICAKKyAgICAjIE1haW4gbG9vcAorICAgIGZvciAoOyAkbCA+IDA7ICRsLS0pIHsK
KyAgICAgICAgJGhhc2ggICArPSBvcmQoJGNoYXJzWyRzXSk7CisgICAgICAgIG15ICR0bXAgPSBs
ZWZ0U2hpZnQob3JkKCRjaGFyc1skcysxXSksIDExKSBeICRoYXNoOworICAgICAgICAkaGFzaCAg
ID0gKGxlZnRTaGlmdCgkaGFzaCwgMTYpJSAkRVhQMl8zMikgXiAkdG1wOworICAgICAgICAkcyAr
PSAyOworICAgICAgICAkaGFzaCArPSAkaGFzaCA+PiAxMTsKKyAgICAgICAgJGhhc2ggJT0gJEVY
UDJfMzI7CisgICAgfQorICAgIAorICAgICMgSGFuZGxlIGVuZCBjYXNlCisgICAgaWYgKCRyZW0g
IT0gMCkgeworICAgICAgICAkaGFzaCArPSBvcmQoJGNoYXJzWyRzXSk7CisgICAgICAgICRoYXNo
IF49IChsZWZ0U2hpZnQoJGhhc2gsIDExKSUgJEVYUDJfMzIpOworICAgICAgICAkaGFzaCArPSAk
aGFzaCA+PiAxNzsKKyAgICB9CisgICAgCisgICAgIyBGb3JjZSAiYXZhbGFuY2hpbmciIG9mIGZp
bmFsIDEyNyBiaXRzCisgICAgJGhhc2ggXj0gbGVmdFNoaWZ0KCRoYXNoLCAzKTsKKyAgICAkaGFz
aCArPSAoJGhhc2ggPj4gNSk7CisgICAgJGhhc2ggPSAoJGhhc2glICRFWFAyXzMyKTsKKyAgICAk
aGFzaCBePSAobGVmdFNoaWZ0KCRoYXNoLCAyKSUgJEVYUDJfMzIpOworICAgICRoYXNoICs9ICgk
aGFzaCA+PiAxNSk7CisgICAgJGhhc2ggPSAkaGFzaCUgJEVYUDJfMzI7CisgICAgJGhhc2ggXj0g
KGxlZnRTaGlmdCgkaGFzaCwgMTApJSAkRVhQMl8zMik7CisgICAgCisgICAgIyBTYXZlIDggYml0
cyBmb3IgU3RyaW5nSW1wbCB0byB1c2UgYXMgZmxhZ3MuCisgICAgJGhhc2ggJj0gMHhmZmZmZmY7
CisgICAgCisgICAgIyBUaGlzIGF2b2lkcyBldmVyIHJldHVybmluZyBhIGhhc2ggY29kZSBvZiAw
LCBzaW5jZSB0aGF0IGlzIHVzZWQgdG8KKyAgICAjIHNpZ25hbCAiaGFzaCBub3QgY29tcHV0ZWQg
eWV0Ii4gU2V0dGluZyB0aGUgaGlnaCBiaXQgbWFpbnRhaW5zCisgICAgIyByZWFzb25hYmxlIGZp
ZGVsaXR5IHRvIGEgaGFzaCBjb2RlIG9mIDAgYmVjYXVzZSBpdCBpcyBsaWtlbHkgdG8geWllbGQK
KyAgICAjIGV4YWN0bHkgMCB3aGVuIGhhc2ggbG9va3VwIG1hc2tzIG91dCB0aGUgaGlnaCBiaXRz
LgorICAgICRoYXNoID0gKDB4ODAwMDAwMDAgPj4gOCkgaWYgKCRoYXNoID09IDApOworICAgIAor
ICAgIHJldHVybiAkaGFzaDsKK30KKworIyBJbnRlcm5hbCBoZWxwZXIKK3N1YiBXcml0ZURhdGEK
K3sKKyAgICBpZiAoZGVmaW5lZCgkSU1QTCkpIHsKKyAgICAgICAgIyBXcml0ZSBjb250ZW50IHRv
IGZpbGUuCisgICAgICAgIHByaW50ICRJTVBMIEBpbXBsQ29udGVudEhlYWRlcjsKKworICAgICAg
ICBteSBAaW5jbHVkZXMgPSAoKTsKKyAgICAgICAgbXkgJWltcGxJbmNsdWRlQ29uZGl0aW9ucyA9
ICgpOworICAgICAgICBmb3JlYWNoIG15ICRpbmNsdWRlIChrZXlzICVpbXBsSW5jbHVkZXMpIHsK
KyAgICAgICAgICAgIG15ICRjb25kaXRpb24gPSAkaW1wbEluY2x1ZGVzeyRpbmNsdWRlfTsKKyAg
ICAgICAgICAgIG15ICRjaGVja1R5cGUgPSAkaW5jbHVkZTsKKyAgICAgICAgICAgICRjaGVja1R5
cGUgPX4gcy9cLmgvLzsKKyAgICAgICAgICAgIG5leHQgaWYgJGNvZGVHZW5lcmF0b3ItPklzU1ZH
QW5pbWF0ZWRUeXBlKCRjaGVja1R5cGUpOworCisgICAgICAgICAgICAkaW5jbHVkZSA9ICJcIiRp
bmNsdWRlXCIiIHVubGVzcyAkaW5jbHVkZSA9fiAvXlsiPF0vOyAjICIKKworICAgICAgICAgICAg
aWYgKCRjb25kaXRpb24gZXEgMSkgeworICAgICAgICAgICAgICAgIHB1c2ggQGluY2x1ZGVzLCAk
aW5jbHVkZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHVzaCBAeyRp
bXBsSW5jbHVkZUNvbmRpdGlvbnN7JGNvbmRpdGlvbn19LCAkaW5jbHVkZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBmb3JlYWNoIG15ICRpbmNsdWRlIChzb3J0IEBpbmNsdWRl
cykgeworICAgICAgICAgICAgcHJpbnQgJElNUEwgIiNpbmNsdWRlICRpbmNsdWRlXG4iOworICAg
ICAgICB9CisgICAgICAgIGZvcmVhY2ggbXkgJGNvbmRpdGlvbiAoc29ydCBrZXlzICVpbXBsSW5j
bHVkZUNvbmRpdGlvbnMpIHsKKyAgICAgICAgICAgIHByaW50ICRJTVBMICJcbiNpZiAiIC4gJGNv
ZGVHZW5lcmF0b3ItPkdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmdGcm9tQXR0cmlidXRlVmFsdWUo
JGNvbmRpdGlvbikgLiAiXG4iOworICAgICAgICAgICAgZm9yZWFjaCBteSAkaW5jbHVkZSAoc29y
dCBAeyRpbXBsSW5jbHVkZUNvbmRpdGlvbnN7JGNvbmRpdGlvbn19KSB7CisgICAgICAgICAgICAg
ICAgcHJpbnQgJElNUEwgIiNpbmNsdWRlICRpbmNsdWRlXG4iOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcHJpbnQgJElNUEwgIiNlbmRpZlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIHBy
aW50ICRJTVBMIEBpbXBsQ29udGVudDsKKyAgICAgICAgY2xvc2UoJElNUEwpOworICAgICAgICB1
bmRlZigkSU1QTCk7CisKKyAgICAgICAgQGltcGxDb250ZW50SGVhZGVyID0gKCk7CisgICAgICAg
IEBpbXBsQ29udGVudCA9ICgpOworICAgICAgICAlaW1wbEluY2x1ZGVzID0gKCk7CisgICAgfQor
CisgICAgaWYgKGRlZmluZWQoJEhFQURFUikpIHsKKyAgICAgICAgIyBXcml0ZSBjb250ZW50IHRv
IGZpbGUuCisgICAgICAgIHByaW50ICRIRUFERVIgQGhlYWRlckNvbnRlbnRIZWFkZXI7CisKKyAg
ICAgICAgbXkgQGluY2x1ZGVzID0gKCk7CisgICAgICAgIGZvcmVhY2ggbXkgJGluY2x1ZGUgKGtl
eXMgJWhlYWRlckluY2x1ZGVzKSB7CisgICAgICAgICAgICAkaW5jbHVkZSA9ICJcIiRpbmNsdWRl
XCIiIHVubGVzcyAkaW5jbHVkZSA9fiAvXlsiPF0vOyAjICIKKyAgICAgICAgICAgIHB1c2ggQGlu
Y2x1ZGVzLCAkaW5jbHVkZTsKKyAgICAgICAgfQorICAgICAgICBmb3JlYWNoIG15ICRpbmNsdWRl
IChzb3J0IEBpbmNsdWRlcykgeworICAgICAgICAgICAgcHJpbnQgJEhFQURFUiAiI2luY2x1ZGUg
JGluY2x1ZGVcbiI7CisgICAgICAgIH0KKworICAgICAgICBwcmludCAkSEVBREVSIEBoZWFkZXJD
b250ZW50OworCisgICAgICAgIEBpbmNsdWRlcyA9ICgpOworICAgICAgICBmb3JlYWNoIG15ICRp
bmNsdWRlIChrZXlzICVoZWFkZXJUcmFpbGluZ0luY2x1ZGVzKSB7CisgICAgICAgICAgICAkaW5j
bHVkZSA9ICJcIiRpbmNsdWRlXCIiIHVubGVzcyAkaW5jbHVkZSA9fiAvXlsiPF0vOyAjICIKKyAg
ICAgICAgICAgIHB1c2ggQGluY2x1ZGVzLCAkaW5jbHVkZTsKKyAgICAgICAgfQorICAgICAgICBm
b3JlYWNoIG15ICRpbmNsdWRlIChzb3J0IEBpbmNsdWRlcykgeworICAgICAgICAgICAgcHJpbnQg
JEhFQURFUiAiI2luY2x1ZGUgJGluY2x1ZGVcbiI7CisgICAgICAgIH0KKworICAgICAgICBjbG9z
ZSgkSEVBREVSKTsKKyAgICAgICAgdW5kZWYoJEhFQURFUik7CisKKyAgICAgICAgQGhlYWRlckNv
bnRlbnRIZWFkZXIgPSAoKTsKKyAgICAgICAgQGhlYWRlckNvbnRlbnQgPSAoKTsKKyAgICAgICAg
JWhlYWRlckluY2x1ZGVzID0gKCk7CisgICAgICAgICVoZWFkZXJUcmFpbGluZ0luY2x1ZGVzID0g
KCk7CisgICAgfQorCisgICAgaWYgKGRlZmluZWQoJERFUFMpKSB7CisgICAgICAgICMgV3JpdGUg
ZGVwZW5kZW5jeSBmaWxlLgorICAgICAgICBwcmludCAkREVQUyBAZGVwc0NvbnRlbnQ7CisgICAg
ICAgIGNsb3NlKCRERVBTKTsKKyAgICAgICAgdW5kZWYoJERFUFMpOworCisgICAgICAgIEBkZXBz
Q29udGVudCA9ICgpOworICAgIH0KK30KKworc3ViIEdlbmVyYXRlQ29uc3RydWN0b3JEZWNsYXJh
dGlvbgoreworICAgIG15ICRvdXRwdXRBcnJheSA9IHNoaWZ0OworICAgIG15ICRjbGFzc05hbWUg
PSBzaGlmdDsKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKyAgICBteSAkaW50ZXJmYWNlTmFt
ZSA9IHNoaWZ0OworCisgICAgbXkgJGNvbnN0cnVjdG9yQ2xhc3NOYW1lID0gIiR7Y2xhc3NOYW1l
fUNvbnN0cnVjdG9yIjsKKyAgICBteSAkY2FsbFdpdGggPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJDYWxsV2l0aCJ9OworCisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiY2xhc3Mg
JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0gOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3Qge1xu
Iik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAicHJpdmF0ZTpcbiIpOworICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICAke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfShKU0M6OlN0cnVjdHVyZSos
IEpTRE9NR2xvYmFsT2JqZWN0Kik7XG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7
XG5cbiIpOworCisgICAgcHVzaChAJG91dHB1dEFycmF5LCAicHVibGljOlxuIik7CisgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTtc
biIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBzdGF0aWMgJGNvbnN0cnVjdG9yQ2xh
c3NOYW1lKiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpXG4iKTsKKyAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAge1xuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAg
ICAkY29uc3RydWN0b3JDbGFzc05hbWUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0
ZUNlbGw8JGNvbnN0cnVjdG9yQ2xhc3NOYW1lPigqZXhlYy0+aGVhcCgpKSkgJGNvbnN0cnVjdG9y
Q2xhc3NOYW1lKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTtcbiIpOworICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihleGVjLCBnbG9iYWxPYmplY3Qp
O1xuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gcHRyO1xuIik7
CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIH1cblxuIik7CisKKyAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxs
KiwgSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5
U2xvdCYpO1xuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBj
b25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpO1xuIik7Cisg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBz
X2luZm87XG4iKTsKKworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBzdGF0aWMgSlNDOjpT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
KVxuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHtcbiIpOworICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFs
RGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pO1xuIik7CisgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIH1cbiIpOworCisgICAgcHVzaChAJG91dHB1dEFycmF5LCAicHJvdGVjdGVkOlxu
Iik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpJ
bXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBET01Db25zdHJ1Y3Rvck9iamVjdDo6U3RydWN0dXJlRmxh
Z3M7XG4iKTsKKworICAgIGlmIChJc0NvbnN0cnVjdGFibGUoJGRhdGFOb2RlKSAmJiAhJGRhdGFO
b2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRDb25zdHJ1Y3RvciJ9KSB7CisgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnN0cnVjdCR7Y2xhc3NOYW1lfShKU0M6OkV4ZWNTdGF0ZSopO1xuIik7Cisg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBl
IGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTtcbiIp
OworICAgIH0KKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9O1xuXG4iKTsKKworICAgIGlmIChJ
c0NvbnN0cnVjdG9yVGVtcGxhdGUoJGRhdGFOb2RlLCAiRXZlbnQiKSkgeworICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICJib29sIGZpbGwke2ludGVyZmFjZU5hbWV9SW5pdCgke2ludGVyZmFj
ZU5hbWV9SW5pdCYsIEpTRGljdGlvbmFyeSYpO1xuXG4iKTsKKyAgICB9CisKKyAgICBpZiAoJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRDb25zdHJ1Y3RvciJ9KSB7CisgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgPDxFTkQpOworY2xhc3MgSlMke2ludGVyZmFjZU5hbWV9
TmFtZWRDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudCB7Citw
dWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudCBCYXNlOworCisg
ICAgc3RhdGljIEpTJHtpbnRlcmZhY2VOYW1lfU5hbWVkQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIEpTJHtpbnRlcmZhY2VOYW1lfU5h
bWVkQ29uc3RydWN0b3IqIGNvbnN0cnVjdG9yID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRl
Q2VsbDxKUyR7aW50ZXJmYWNlTmFtZX1OYW1lZENvbnN0cnVjdG9yPigqZXhlYy0+aGVhcCgpKSkg
SlMke2ludGVyZmFjZU5hbWV9TmFtZWRDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVj
dCk7CisgICAgICAgIGNvbnN0cnVjdG9yLT5maW5pc2hDcmVhdGlvbihleGVjLCBnbG9iYWxPYmpl
Y3QpOworICAgICAgICByZXR1cm4gY29uc3RydWN0b3I7CisgICAgfQorCisgICAgc3RhdGljIEpT
Qzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2Jh
bERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29u
c3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOworCitwcml2YXRlOgorICAgIEpTJHtpbnRlcmZhY2VO
YW1lfU5hbWVkQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCop
OworICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0
SlMke2ludGVyZmFjZU5hbWV9KEpTQzo6RXhlY1N0YXRlKik7CisgICAgc3RhdGljIEpTQzo6Q29u
c3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpDb25zdHJ1Y3RE
YXRhJik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xv
YmFsT2JqZWN0Kik7Cit9OworCitFTkQKKyAgICB9Cit9CisKK3N1YiBHZW5lcmF0ZUNvbnN0cnVj
dG9yRGVmaW5pdGlvbgoreworICAgIG15ICRvdXRwdXRBcnJheSA9IHNoaWZ0OworCisgICAgbXkg
JGNsYXNzTmFtZSA9IHNoaWZ0OworICAgIG15ICRwcm90b0NsYXNzTmFtZSA9IHNoaWZ0OworICAg
IG15ICRpbnRlcmZhY2VOYW1lID0gc2hpZnQ7CisgICAgbXkgJHZpc2libGVDbGFzc05hbWUgPSBz
aGlmdDsKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKyAgICBteSAkZ2VuZXJhdGluZ05hbWVk
Q29uc3RydWN0b3IgPSBzaGlmdDsKKworICAgIG15ICRjb25zdHJ1Y3RvckNsYXNzTmFtZSA9ICRn
ZW5lcmF0aW5nTmFtZWRDb25zdHJ1Y3RvciA/ICIke2NsYXNzTmFtZX1OYW1lZENvbnN0cnVjdG9y
IiA6ICIke2NsYXNzTmFtZX1Db25zdHJ1Y3RvciI7CisgICAgbXkgJG51bWJlck9mY29uc3RydWN0
UGFyYW1ldGVycyA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVjdG9y
UGFyYW1ldGVycyJ9OworCisgICAgaWYgKCRnZW5lcmF0aW5nTmFtZWRDb25zdHJ1Y3Rvcikgewor
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJjb25zdCBDbGFzc0luZm8gJHtjb25zdHJ1Y3Rv
ckNsYXNzTmFtZX06OnNfaW5mbyA9IHsgXCIke3Zpc2libGVDbGFzc05hbWV9Q29uc3RydWN0b3Jc
IiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRSgkY29uc3RydWN0b3JD
bGFzc05hbWUpIH07XG5cbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIke2NvbnN0
cnVjdG9yQ2xhc3NOYW1lfTo6JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0oU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpXG4iKTsKKyAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIDogRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQoc3RydWN0
dXJlLCBnbG9iYWxPYmplY3QpXG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAie1xu
Iik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1cblxuIik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiQVNTRVJUX0hBU19UUklWSUFMX0RFU1RSVUNU
T1IoJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0pO1xuXG4iKTsKKworICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICJjb25zdCBDbGFzc0luZm8gJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OnNfaW5m
byA9IHsgXCIke3Zpc2libGVDbGFzc05hbWV9Q29uc3RydWN0b3JcIiwgJkJhc2U6OnNfaW5mbywg
JiR7Y29uc3RydWN0b3JDbGFzc05hbWV9VGFibGUsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoJGNv
bnN0cnVjdG9yQ2xhc3NOYW1lKSB9O1xuXG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OiR7Y29uc3RydWN0b3JDbGFzc05hbWV9KFN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KVxuIik7Cisg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0KHN0
cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KVxuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IntcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIpOworICAgIH0KKwor
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInZvaWQgJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OmZp
bmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdClcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOworICAgIGlmICgkaW50
ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IikgeworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTtcbiIpOworICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTtc
biIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcHV0RGlyZWN0KGV4ZWMtPmds
b2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgZ2xvYmFsT2JqZWN0
LT5wcm90b3R5cGUoKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTtcbiIpOworICAgIH0gZWxzaWYg
KCRnZW5lcmF0aW5nTmFtZWRDb25zdHJ1Y3RvcikgeworICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0KTtcbiIpOworICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTtcbiIp
OworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgJHtjbGFzc05hbWV9UHJv
dG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIE5vbmUpO1xuIik7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KGV4ZWMtPmdsb2JhbERhdGEoKSk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5wcm90b3R5cGUsICR7cHJvdG9DbGFzc05hbWV9OjpzZWxmKGV4ZWMsIGdsb2JhbE9i
amVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7XG4iKTsKKyAgICB9CisgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKCR7bnVtYmVyT2Zjb25zdHJ1Y3RQYXJhbWV0ZXJz
fSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTtcbiIpIGlmICRudW1iZXJPZmNv
bnN0cnVjdFBhcmFtZXRlcnM7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuXG4iKTsKKwor
ICAgIGlmICghJGdlbmVyYXRpbmdOYW1lZENvbnN0cnVjdG9yKSB7CisgICAgICAgIG15ICRoYXNT
dGF0aWNGdW5jdGlvbnMgPSAwOworICAgICAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQHskZGF0
YU5vZGUtPmZ1bmN0aW9uc30pIHsKKyAgICAgICAgICAgIGlmICgkZnVuY3Rpb24tPmlzU3RhdGlj
KSB7CisgICAgICAgICAgICAgICAgJGhhc1N0YXRpY0Z1bmN0aW9ucyA9IDE7CisgICAgICAgICAg
ICAgICAgbGFzdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG15ICRraW5k
ID0gJGhhc1N0YXRpY0Z1bmN0aW9ucyA/ICJQcm9wZXJ0eSIgOiAiVmFsdWUiOworCisgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgImJvb2wgJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OmdldE93
blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpXG4iKTsKKyAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAie1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICByZXR1cm4gZ2V0U3RhdGljJHtraW5kfVNsb3Q8JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0sIEpT
RE9NV3JhcHBlcj4oZXhlYywgJiR7Y29uc3RydWN0b3JDbGFzc05hbWV9VGFibGUsIHN0YXRpY19j
YXN0PCR7Y29uc3RydWN0b3JDbGFzc05hbWV9Kj4oY2VsbCksIHByb3BlcnR5TmFtZSwgc2xvdCk7
XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuXG4iKTsKKworICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICJib29sICR7Y29uc3RydWN0b3JDbGFzc05hbWV9OjpnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRv
cilcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsKKyAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiBnZXRTdGF0aWMke2tpbmR9RGVzY3JpcHRvcjwk
e2NvbnN0cnVjdG9yQ2xhc3NOYW1lfSwgSlNET01XcmFwcGVyPihleGVjLCAmJHtjb25zdHJ1Y3Rv
ckNsYXNzTmFtZX1UYWJsZSwgc3RhdGljX2Nhc3Q8JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0qPihv
YmplY3QpLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpO1xuIik7CisgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIn1cblxuIik7CisgICAgfQorCisgICAgaWYgKElzQ29uc3RydWN0YWJsZSgk
ZGF0YU5vZGUpKSB7CisgICAgICAgIGlmIChJc0NvbnN0cnVjdG9yVGVtcGxhdGUoJGRhdGFOb2Rl
LCAiRXZlbnQiKSkgeworICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siSlNEaWN0aW9uYXJ5Lmgi
fSA9IDE7CisgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyI8cnVudGltZS9FcnJvci5oPiJ9ID0g
MTsKKworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCA8PEVORCk7CitFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMICR7Y29uc3RydWN0b3JDbGFzc05hbWV9Ojpjb25zdHJ1Y3Qke2Ns
YXNzTmFtZX0oRXhlY1N0YXRlKiBleGVjKQoreworICAgICR7Y29uc3RydWN0b3JDbGFzc05hbWV9
KiBqc0NvbnN0cnVjdG9yID0gc3RhdGljX2Nhc3Q8JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0qPihl
eGVjLT5jYWxsZWUoKSk7CisKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBleGVjdXRpb25D
b250ZXh0ID0ganNDb25zdHJ1Y3Rvci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlm
ICghZXhlY3V0aW9uQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBj
cmVhdGVSZWZlcmVuY2VFcnJvcihleGVjLCAiQ29uc3RydWN0b3IgYXNzb2NpYXRlZCBleGVjdXRp
b24gY29udGV4dCBpcyB1bmF2YWlsYWJsZSIpKTsKKworICAgIEF0b21pY1N0cmluZyBldmVudFR5
cGUgPSB1c3RyaW5nVG9BdG9taWNTdHJpbmcoZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YykpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKworICAgICR7aW50ZXJmYWNlTmFtZX1Jbml0IGV2
ZW50SW5pdDsKKworICAgIEpTVmFsdWUgaW5pdGlhbGl6ZXJWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50
KDEpOworICAgIGlmICghaW5pdGlhbGl6ZXJWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Cisg
ICAgICAgIC8vIEdpdmVuIHRoZSBhYm92ZSB0ZXN0LCB0aGlzIHdpbGwgYWx3YXlzIHlpZWxkIGFu
IG9iamVjdC4KKyAgICAgICAgSlNPYmplY3QqIGluaXRpYWxpemVyT2JqZWN0ID0gaW5pdGlhbGl6
ZXJWYWx1ZS50b09iamVjdChleGVjKTsKKworICAgICAgICAvLyBDcmVhdGUgdGhlIGRpY3Rpb25h
cnkgd3JhcHBlciBmcm9tIHRoZSBpbml0aWFsaXplciBvYmplY3QuCisgICAgICAgIEpTRGljdGlv
bmFyeSBkaWN0aW9uYXJ5KGV4ZWMsIGluaXRpYWxpemVyT2JqZWN0KTsKKworICAgICAgICAvLyBB
dHRlbXB0IHRvIGZpbGwgaW4gdGhlIEV2ZW50SW5pdC4KKyAgICAgICAgaWYgKCFmaWxsJHtpbnRl
cmZhY2VOYW1lfUluaXQoZXZlbnRJbml0LCBkaWN0aW9uYXJ5KSkKKyAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQorCisgICAgUmVmUHRyPCR7
aW50ZXJmYWNlTmFtZX0+IGV2ZW50ID0gJHtpbnRlcmZhY2VOYW1lfTo6Y3JlYXRlKGV2ZW50VHlw
ZSwgZXZlbnRJbml0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMoZXhlYywganND
b25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIGV2ZW50LmdldCgpKSk7Cit9CisKK2Jvb2wgZmls
bCR7aW50ZXJmYWNlTmFtZX1Jbml0KCR7aW50ZXJmYWNlTmFtZX1Jbml0JiBldmVudEluaXQsIEpT
RGljdGlvbmFyeSYgZGljdGlvbmFyeSkKK3sKK0VORAorCisgICAgICAgICAgICBmb3JlYWNoIG15
ICRpbnRlcmZhY2VCYXNlIChAeyRkYXRhTm9kZS0+cGFyZW50c30pIHsKKyAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworICAgIGlmICghZmlsbCR7aW50ZXJmYWNlQmFz
ZX1Jbml0KGV2ZW50SW5pdCwgZGljdGlvbmFyeSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
RU5ECisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAobXkgJGluZGV4ID0gMDsgJGlu
ZGV4IDwgQHskZGF0YU5vZGUtPmF0dHJpYnV0ZXN9OyAkaW5kZXgrKykgeworICAgICAgICAgICAg
ICAgIG15ICRhdHRyaWJ1dGUgPSBAeyRkYXRhTm9kZS0+YXR0cmlidXRlc31bJGluZGV4XTsKKyAg
ICAgICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiSW5pdGlhbGl6ZWRCeUNvbnN0cnVjdG9yIn0pIHsKKyAgICAgICAgICAgICAgICAgICAg
bXkgJGF0dHJpYnV0ZU5hbWUgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWU7CisgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CisgICAgaWYgKCFkaWN0aW9u
YXJ5LnRyeUdldFByb3BlcnR5KCIke2F0dHJpYnV0ZU5hbWV9IiwgZXZlbnRJbml0LiR7YXR0cmli
dXRlTmFtZX0pKQorICAgICAgICByZXR1cm4gZmFsc2U7CitFTkQKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgPDxFTkQp
OworICAgIHJldHVybiB0cnVlOworfQorCitFTkQKKyAgICAgICAgfSBlbHNpZiAoISgkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0N1c3RvbUNvbnN0cnVjdG9yIn0gfHwgJGRhdGFO
b2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tQ29uc3RydWN0b3IifSkgJiYgKCEkZGF0
YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZENvbnN0cnVjdG9yIn0gfHwgJGdlbmVy
YXRpbmdOYW1lZENvbnN0cnVjdG9yKSkgeworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfTo6
Y29uc3RydWN0JHtjbGFzc05hbWV9KEV4ZWNTdGF0ZSogZXhlYylcbiIpOworICAgICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAie1xuIik7CisKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICAke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfSoganNDb25zdHJ1Y3RvciA9IHN0YXRp
Y19jYXN0PCR7Y29uc3RydWN0b3JDbGFzc05hbWV9Kj4oZXhlYy0+Y2FsbGVlKCkpO1xuIik7CisK
KyAgICAgICAgICAgIG15ICRmdW5jdGlvbiA9ICRkYXRhTm9kZS0+Y29uc3RydWN0b3I7CisgICAg
ICAgICAgICBteSBAY29uc3RydWN0b3JBcmdMaXN0OworCisgICAgICAgICAgICAkaW1wbEluY2x1
ZGVzeyI8cnVudGltZS9FcnJvci5oPiJ9ID0gMTsKKworICAgICAgICAgICAgR2VuZXJhdGVBcmd1
bWVudHNDb3VudENoZWNrKCRvdXRwdXRBcnJheSwgJGZ1bmN0aW9uLCAkZGF0YU5vZGUpOworCisg
ICAgICAgICAgICBpZiAoQHskZnVuY3Rpb24tPnJhaXNlc0V4Y2VwdGlvbnN9IHx8ICRkYXRhTm9k
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVjdG9yUmFpc2VzRXhjZXB0aW9uIn0pIHsK
KyAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJFeGNlcHRpb25Db2RlLmgifSA9IDE7Cisg
ICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwO1xuIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICMgRm9yIG5vdywgd2UgZG8g
bm90IHN1cHBvcnQgU1ZHIGNvbnN0cnVjdG9ycy4KKyAgICAgICAgICAgICMgV2UgZG8gbm90IGFs
c28gc3VwcG9ydCBhIGNvbnN0cnVjdG9yIFtPcHRpb25hbF0gYXJndW1lbnQgd2l0aG91dCBDYWxs
V2l0aERlZmF1bHRWYWx1ZQorICAgICAgICAgICAgIyBub3IgQ2FsbFdpdGhOdWxsVmFsdWUuCisg
ICAgICAgICAgICBteSAkbnVtUGFyYW1ldGVycyA9IEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfTsK
KyAgICAgICAgICAgIG15ICgkZHVtbXksICRwYXJhbUluZGV4KSA9IEdlbmVyYXRlUGFyYW1ldGVy
c0NoZWNrKCRvdXRwdXRBcnJheSwgJGZ1bmN0aW9uLCAkZGF0YU5vZGUsICRudW1QYXJhbWV0ZXJz
LCAkaW50ZXJmYWNlTmFtZSwgImNvbnN0cnVjdG9yQ2FsbGJhY2siLCB1bmRlZiwgdW5kZWYsIHVu
ZGVmKTsKKworICAgICAgICAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkNhbGxXaXRoIn0gJiYgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgi
fSBlcSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dCIpIHsKKyAgICAgICAgICAgICAgICBwdXNoKEBj
b25zdHJ1Y3RvckFyZ0xpc3QsICJjb250ZXh0Iik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBqc0NvbnN0
cnVjdG9yLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7XG4iKTsKKyAgICAgICAgICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKCFjb250ZXh0KVxuIik7CisgICAgICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMsIFwiJHtpbnRlcmZhY2VOYW1lfSBjb25zdHJ1Y3Rv
ciBhc3NvY2lhdGVkIGRvY3VtZW50IGlzIHVuYXZhaWxhYmxlXCIpKTtcbiIpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKCRnZW5lcmF0aW5nTmFtZWRDb25zdHJ1Y3RvcikgeworICAg
ICAgICAgICAgICAgIHB1c2goQGNvbnN0cnVjdG9yQXJnTGlzdCwgImpzQ29uc3RydWN0b3ItPmRv
Y3VtZW50KCkiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbXkgJGluZGV4ID0gMDsK
KyAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBhcmFtZXRlciAoQHskZnVuY3Rpb24tPnBhcmFtZXRl
cnN9KSB7CisgICAgICAgICAgICAgICAgbGFzdCBpZiAkaW5kZXggZXEgJHBhcmFtSW5kZXg7Cisg
ICAgICAgICAgICAgICAgcHVzaChAY29uc3RydWN0b3JBcmdMaXN0LCAkcGFyYW1ldGVyLT5uYW1l
KTsKKyAgICAgICAgICAgICAgICAkaW5kZXgrKzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVjdG9yUmFpc2Vz
RXhjZXB0aW9uIn0pIHsKKyAgICAgICAgICAgICAgICBwdXNoKEBjb25zdHJ1Y3RvckFyZ0xpc3Qs
ICJlYyIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbXkgJGNvbnN0cnVjdG9yQXJnID0g
am9pbigiLCAiLCBAY29uc3RydWN0b3JBcmdMaXN0KTsKKyAgICAgICAgICAgIGlmICgkZ2VuZXJh
dGluZ05hbWVkQ29uc3RydWN0b3IpIHsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgUmVmUHRyPCR7aW50ZXJmYWNlTmFtZX0+IG9iamVjdCA9ICR7aW50ZXJmYWNlTmFt
ZX06OmNyZWF0ZUZvckpTQ29uc3RydWN0b3IoJHtjb25zdHJ1Y3RvckFyZ30pO1xuIik7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBSZWZQdHI8JHtpbnRlcmZhY2VOYW1lfT4gb2JqZWN0ID0gJHtpbnRlcmZhY2VOYW1lfTo6Y3Jl
YXRlKCR7Y29uc3RydWN0b3JBcmd9KTtcbiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0b3JSYWlzZXNF
eGNlcHRpb24ifSkgeworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBp
ZiAoZWMpIHtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
O1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIH1cbiIpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmds
b2JhbE9iamVjdCgpLCBvYmplY3QuZ2V0KCkpKSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIn1cblxuIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoISRkYXRhTm9k
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkQ29uc3RydWN0b3IifSB8fCAkZ2VuZXJhdGlu
Z05hbWVkQ29uc3RydWN0b3IpIHsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIkNv
bnN0cnVjdFR5cGUgJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OmdldENvbnN0cnVjdERhdGEoSlND
ZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSlcbiIpOworICAgICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAie1xuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3Qke2NsYXNzTmFt
ZX07XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gQ29u
c3RydWN0VHlwZUhvc3Q7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1c
blxuIik7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N1YiBJc0NvbnN0cnVjdGFibGUKK3sKKyAg
ICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKworICAgIHJldHVybiAkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJDdXN0b21Db25zdHJ1Y3RvciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkpTQ3VzdG9tQ29uc3RydWN0b3IifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57Ik5hbWVkQ29uc3RydWN0b3IifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJKU0NvbnN0cnVjdG9yVGVtcGxhdGUifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJDb25zdHJ1Y3RvclRlbXBsYXRlIn07Cit9CisKK3N1YiBJc0NvbnN0cnVjdG9yVGVt
cGxhdGUKK3sKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKyAgICBteSAkdGVtcGxhdGUgPSBz
aGlmdDsKKworICAgIHJldHVybiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlND
b25zdHJ1Y3RvclRlbXBsYXRlIn0gJiYgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
SlNDb25zdHJ1Y3RvclRlbXBsYXRlIn0gZXEgJHRlbXBsYXRlKSB8fCAoJGRhdGFOb2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0b3JUZW1wbGF0ZSJ9ICYmICRkYXRhTm9kZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVjdG9yVGVtcGxhdGUifSBlcSAkdGVtcGxhdGUpOwor
fQorCisxOwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL3ByZXBhcmUtQ2hh
bmdlTG9nX3VuaXR0ZXN0L3Jlc291cmNlcy9Db2RlR2VuZXJhdG9ySlMucG0tZXhwZWN0ZWQudHh0
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL3ByZXBhcmUtQ2hhbmdlTG9nX3VuaXR0ZXN0L3Jl
c291cmNlcy9Db2RlR2VuZXJhdG9ySlMucG0tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdkY2I4
MDBlMGNiMjA2ZjczMjJkYjE1ZTdmZWQzNGY0ZTBhYTZiZDUKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHBlcmwvcHJlcGFyZS1DaGFuZ2VMb2dfdW5pdHRlc3QvcmVzb3Vy
Y2VzL0NvZGVHZW5lcmF0b3JKUy5wbS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNzcgQEAKK1sK
KyAgWworICAgICc3MycsCisgICAgJzg3JywKKyAgICAnbmV3JworICBdLAorICBbCisgICAgJzg5
JywKKyAgICAnOTUnLAorICAgICdmaW5pc2gnCisgIF0sCisgIFsKKyAgICAnOTcnLAorICAgICcx
MDAnLAorICAgIHVuZGVmCisgIF0sCisgIFsKKyAgICAnMTAzJywKKyAgICAnMTM1JywKKyAgICAn
R2VuZXJhdGVJbnRlcmZhY2UnCisgIF0sCisgIFsKKyAgICAnMTM3JywKKyAgICAnMTYxJywKKyAg
ICAnR2VuZXJhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyQ2FsbCcKKyAgXSwKKyAgWworICAgICcx
NjMnLAorICAgICcxOTInLAorICAgICdHZW5lcmF0ZUV2ZW50TGlzdGVuZXJDYWxsJworICBdLAor
ICBbCisgICAgJzE5NScsCisgICAgJzIwMScsCisgICAgJ0dlbmVyYXRlTW9kdWxlJworICBdLAor
ICBbCisgICAgJzIwMycsCisgICAgJzIxMCcsCisgICAgJ0dldFBhcmVudENsYXNzTmFtZScKKyAg
XSwKKyAgWworICAgICcyMTInLAorICAgICcyMjQnLAorICAgICdHZXRWaXNpYmxlQ2xhc3NOYW1l
JworICBdLAorICBbCisgICAgJzIyNicsCisgICAgJzIzMicsCisgICAgJ0dldENhbGxiYWNrQ2xh
c3NOYW1lJworICBdLAorICBbCisgICAgJzIzNCcsCisgICAgJzI0MCcsCisgICAgJ0luZGV4R2V0
dGVyUmV0dXJuc1N0cmluZ3MnCisgIF0sCisgIFsKKyAgICAnMjQyJywKKyAgICAnMjY3JywKKyAg
ICAnQWRkSW5jbHVkZXNGb3JUeXBlSW5JbXBsJworICBdLAorICBbCisgICAgJzI2OScsCisgICAg
JzI3NScsCisgICAgJ0FkZEluY2x1ZGVzRm9yVHlwZUluSGVhZGVyJworICBdLAorICBbCisgICAg
JzI3NycsCisgICAgJzMwNScsCisgICAgJ0FkZEluY2x1ZGVzRm9yVHlwZScKKyAgXSwKKyAgWwor
ICAgICczMDgnLAorICAgICczMTgnLAorICAgICdBZGRJbmNsdWRlc0ZvclNWR0FuaW1hdGVkVHlw
ZScKKyAgXSwKKyAgWworICAgICczMjAnLAorICAgICczNDAnLAorICAgICdBZGRUb0ltcGxJbmNs
dWRlcycKKyAgXSwKKyAgWworICAgICczNDInLAorICAgICczNDcnLAorICAgICdJc1NjcmlwdFBy
b2ZpbGVUeXBlJworICBdLAorICBbCisgICAgJzM0OScsCisgICAgJzM1NycsCisgICAgJ0lzVHlw
ZWRBcnJheVR5cGUnCisgIF0sCisgIFsKKyAgICAnMzU5JywKKyAgICAnMzY1JywKKyAgICAnQWRk
VHlwZWRlZkZvclNjcmlwdFByb2ZpbGVUeXBlJworICBdLAorICBbCisgICAgJzM2NycsCisgICAg
JzM3OScsCisgICAgJ0FkZENsYXNzRm9yd2FyZElmTmVlZGVkJworICBdLAorICBbCisgICAgJzM4
MScsCisgICAgJzM5MicsCisgICAgJ0hhc2hWYWx1ZUZvckNsYXNzQW5kTmFtZScKKyAgXSwKKyAg
WworICAgICczOTQnLAorICAgICc0MDMnLAorICAgICdoYXNoVGFibGVBY2Nlc3NvcicKKyAgXSwK
KyAgWworICAgICc0MDUnLAorICAgICc0MTQnLAorICAgICdwcm90b3R5cGVIYXNoVGFibGVBY2Nl
c3NvcicKKyAgXSwKKyAgWworICAgICc0MTYnLAorICAgICc0MjUnLAorICAgICdHZW5lcmF0ZUNv
bmRpdGlvbmFsU3RyaW5nJworICBdLAorICBbCisgICAgJzQyNycsCisgICAgJzUwOScsCisgICAg
J0dlbmVyYXRlR2V0T3duUHJvcGVydHlTbG90Qm9keScKKyAgXSwKKyAgWworICAgICc1MTEnLAor
ICAgICc2MTAnLAorICAgICdHZW5lcmF0ZUdldE93blByb3BlcnR5RGVzY3JpcHRvckJvZHknCisg
IF0sCisgIFsKKyAgICAnNjEyJywKKyAgICAnNjI2JywKKyAgICAnR2VuZXJhdGVIZWFkZXJDb250
ZW50SGVhZGVyJworICBdLAorICBbCisgICAgJzYyOCcsCisgICAgJzY0MCcsCisgICAgJ0dlbmVy
YXRlSW1wbGVtZW50YXRpb25Db250ZW50SGVhZGVyJworICBdLAorICBbCisgICAgJzY1MScsCisg
ICAgJzY1NicsCisgICAgJ0dldEZ1bmN0aW9uTmFtZScKKyAgXSwKKyAgWworICAgICc2NTgnLAor
ICAgICcxMTg0JywKKyAgICAnR2VuZXJhdGVIZWFkZXInCisgIF0sCisgIFsKKyAgICAnMTE4Nics
CisgICAgJzEyNTcnLAorICAgICdHZW5lcmF0ZUF0dHJpYnV0ZXNIYXNoVGFibGUnCisgIF0sCisg
IFsKKyAgICAnMTI1OScsCisgICAgJzEyOTcnLAorICAgICdHZW5lcmF0ZVBhcmFtZXRlcnNDaGVj
a0V4cHJlc3Npb24nCisgIF0sCisgIFsKKyAgICAnMTI5OScsCisgICAgJzEzMTknLAorICAgICdH
ZW5lcmF0ZUZ1bmN0aW9uUGFyYW1ldGVyc0NoZWNrJworICBdLAorICBbCisgICAgJzEzMjEnLAor
ICAgICcxMzU4JywKKyAgICAnR2VuZXJhdGVPdmVybG9hZGVkRnVuY3Rpb24nCisgIF0sCisgIFsK
KyAgICAnMTM2MycsCisgICAgJzIzNzknLAorICAgICdHZW5lcmF0ZUltcGxlbWVudGF0aW9uJwor
ICBdLAorICBbCisgICAgJzIzODEnLAorICAgICcyNDAwJywKKyAgICAnR2VuZXJhdGVBcmd1bWVu
dHNDb3VudENoZWNrJworICBdLAorICBbCisgICAgJzI0MDInLAorICAgICcyNTc1JywKKyAgICAn
R2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2snCisgIF0sCisgIFsKKyAgICAnMjU3NycsCisgICAgJzI2
NDInLAorICAgICdHZW5lcmF0ZUNhbGxiYWNrSGVhZGVyJworICBdLAorICBbCisgICAgJzI2NDQn
LAorICAgICcyNzMzJywKKyAgICAnR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uJworICBd
LAorICBbCisgICAgJzI3MzUnLAorICAgICcyNzgyJywKKyAgICAnR2VuZXJhdGVJbXBsZW1lbnRh
dGlvbkZ1bmN0aW9uQ2FsbCcKKyAgXSwKKyAgWworICAgICcyNzg0JywKKyAgICAnMjc5NScsCisg
ICAgJ0dldE5hdGl2ZVR5cGVGcm9tU2lnbmF0dXJlJworICBdLAorICBbCisgICAgJzI4MTknLAor
ICAgICcyODI5JywKKyAgICAnR2V0TmF0aXZlVHlwZScKKyAgXSwKKyAgWworICAgICcyODMxJywK
KyAgICAnMjg2OScsCisgICAgJ0dldFNWR1Byb3BlcnR5VHlwZXMnCisgIF0sCisgIFsKKyAgICAn
Mjg3MScsCisgICAgJzI4NzUnLAorICAgICdJc05hdGl2ZVR5cGUnCisgIF0sCisgIFsKKyAgICAn
Mjg3NycsCisgICAgJzI4ODInLAorICAgICdJc0FycmF5VHlwZScKKyAgXSwKKyAgWworICAgICcy
ODg0JywKKyAgICAnMjk0NScsCisgICAgJ0pTVmFsdWVUb05hdGl2ZScKKyAgXSwKKyAgWworICAg
ICcyOTQ3JywKKyAgICAnMzA2NycsCisgICAgJ05hdGl2ZVRvSlNWYWx1ZScKKyAgXSwKKyAgWwor
ICAgICczMDY5JywKKyAgICAnMzA3OScsCisgICAgJ2NlaWxpbmdUb1Bvd2VyT2YyJworICBdLAor
ICBbCisgICAgJzMwODInLAorICAgICczMTc3JywKKyAgICAnR2VuZXJhdGVIYXNoVGFibGUnCisg
IF0sCisgIFsKKyAgICAnMzE4MScsCisgICAgJzMyMzYnLAorICAgICdHZW5lcmF0ZUhhc2hWYWx1
ZScKKyAgXSwKKyAgWworICAgICczMjM5JywKKyAgICAnMzMyMicsCisgICAgJ1dyaXRlRGF0YScK
KyAgXSwKKyAgWworICAgICczMzI0JywKKyAgICAnMzM5NScsCisgICAgJ0dlbmVyYXRlQ29uc3Ry
dWN0b3JEZWNsYXJhdGlvbicKKyAgXSwKKyAgWworICAgICczNDAxJywKKyAgICAnMzUwNicsCisg
ICAgJ0dlbmVyYXRlQ29uc3RydWN0b3JEZWZpbml0aW9uJworICBdLAorICBbCisgICAgJzM2MDgn
LAorICAgICczNjEzJywKKyAgICAnSXNDb25zdHJ1Y3RhYmxlJworICBdLAorICBbCisgICAgJzM2
MTUnLAorICAgICczNjIxJywKKyAgICAnSXNDb25zdHJ1Y3RvclRlbXBsYXRlJworICBdCitdCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120158</attachid>
            <date>2011-12-21 00:48:38 -0800</date>
            <delta_ts>2011-12-22 05:37:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74994-20111221174837.patch</filename>
            <type>text/plain</type>
            <size>6330</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMzY2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZWFlNTY4YTRmMWYzZmIxZjFkZWIxZjJmYmU2NDgyY2Q2
MjM3Mjc3Yi4uZjAwOWUzOWNhNDk1MTAyOTVjODYxODMwY2EwNDhlMTQ2YTYzNmIxYSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4
IEBACisyMDExLTEyLTIxICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBBZGQgdW5pdHRlc3RzIGZvciB0aGUgUGVybCBwYXJzZXIgb2YgcHJlcGFyZS1DaGFu
Z2VMb2cKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0
OTk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBhZGRzIHVuaXR0ZXN0cyBmb3IgZ2V0X2Z1bmN0aW9uX2xpbmVfcmFuZ2VzX2Zvcl9w
ZXJsKCkgb2YgcHJlcGFyZS1DaGFuZ2VMb2cuCisKKyAgICAgICAgVGVzdDogU2NyaXB0cy93ZWJr
aXRwZXJsL3ByZXBhcmUtQ2hhbmdlTG9nX3VuaXR0ZXN0L3Jlc291cmNlcy9wZXJsX3VuaXR0ZXN0
cy5wbAorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRwZXJsL3ByZXBhcmUtQ2hhbmdlTG9nX3Vu
aXR0ZXN0L3BhcnNlcl91bml0dGVzdHMucGw6IEFkZGVkLgorICAgICAgICBSdW5zIHVuaXR0ZXN0
cyBzcGVjaWZpZWQgaW4gQHRlc3RGaWxlcy4KKyAgICAgICAgWW91IGNhbiByZXNldCBleHBlY3Rl
ZCByZXN1bHRzIGJ5IHNwZWNpZnlpbmcgYSAtLXJlc2V0LXJlc3VsdHMgb3B0aW9uLgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cGVybC9wcmVwYXJlLUNoYW5nZUxvZ191bml0dGVzdC9yZXNvdXJj
ZXMvcGVybF91bml0dGVzdHMucGw6IEFkZGVkLgorICAgICAgICBDb250YWlucyBzaW1wbGUgbWV0
aG9kcy4KKyAgICAgICAgKGZ1bmMxKToKKyAgICAgICAgKGZ1bmMyKToKKyAgICAgICAgKGZ1bmMz
KToKKyAgICAgICAgKGZ1bmM0KToKKyAgICAgICAgKGZ1bmM1KToKKyAgICAgICAgKGZ1bmM2KToK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHBlcmwvcHJlcGFyZS1DaGFuZ2VMb2dfdW5pdHRlc3Qv
cmVzb3VyY2VzL3BlcmxfdW5pdHRlc3RzLnBsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
IFRoaXMgdGVzdCByZXN1bHQgaXMgZ2VuZXJhdGVkIGJ5IHRoZSAtLXJlc2V0LXJlc3VsdHMgb3B0
aW9uLgorCiAyMDExLTEyLTIwICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIG5yd3Q6IHJlbmFtZSBmaWVsZCByZWZlcmVuY2VzIGZyb20gX2ZzIHRvIF9maWxl
c3lzdGVtCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvcHJlcGFyZS1DaGFu
Z2VMb2dfdW5pdHRlc3QvcGFyc2VyX3VuaXR0ZXN0cy5wbCBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cGVybC9wcmVwYXJlLUNoYW5nZUxvZ191bml0dGVzdC9wYXJzZXJfdW5pdHRlc3RzLnBsCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjZlNDMzMzNkNDczZTMxZmRlZTlkZDlkZGNkYzQ4ZmVhNzk2NWQ1ODEKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvcHJlcGFyZS1DaGFuZ2VMb2dfdW5p
dHRlc3QvcGFyc2VyX3VuaXR0ZXN0cy5wbApAQCAtMCwwICsxLDY0IEBACisjIS91c3IvYmluL3Bl
cmwgLXcKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
IyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorIyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIyB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorIyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworIyBUaGlzIHNjcmlw
dCB0ZXN0cyB0aGUgcGFyc2VyIG9mIHByZXBhcmUtQ2hhbmdlTG9nIChpLmUuIGdldF9mdW5jdGlv
bl9saW5lX3Jhbmdlc19mb3JfWFhYWCgpKS4KKyMgVGhpcyBzY3JpcHQgcnVucyB0aGUgdW5pdHRl
c3RzIHNwZWNpZmllZCBpbiBAdGVzdEZpbGVzLgorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdz
OworCit1c2UgRGF0YTo6RHVtcGVyOwordXNlIEZpbGU6OlNwZWM7Cit1c2UgRmluZEJpbjsKK3Vz
ZSBHZXRvcHQ6Okxvbmc7Cit1c2UgVGVzdDo6TW9yZTsKK3VzZSBsaWIgRmlsZTo6U3BlYy0+Y2F0
ZGlyKCRGaW5kQmluOjpCaW4sICIuLiIpOwordXNlIExvYWRBc01vZHVsZSBxdyhQcmVwYXJlQ2hh
bmdlTG9nIHByZXBhcmUtQ2hhbmdlTG9nKTsKKworbXkgQHRlc3RGaWxlcyA9ICgicGVybF91bml0
dGVzdHMucGwiKTsKKworbXkgQGlucHV0RmlsZXMgPSBtYXAgeyBGaWxlOjpTcGVjLT5jYXRkaXIo
JEZpbmRCaW46OkJpbiwgInJlc291cmNlcyIsICRfKSB9IEB0ZXN0RmlsZXM7CitteSBAZXhwZWN0
ZWRGaWxlcyA9IG1hcCB7IEZpbGU6OlNwZWMtPmNhdGRpcigkRmluZEJpbjo6QmluLCAicmVzb3Vy
Y2VzIiwgJF8gLiAiLWV4cGVjdGVkLnR4dCIpIH0gQHRlc3RGaWxlczsKKworbXkgJHJlc2V0UmVz
dWx0czsKK0dldE9wdGlvbnMoJ3Jlc2V0LXJlc3VsdHMnID0+IFwkcmVzZXRSZXN1bHRzKTsKKwor
cGxhbih0ZXN0cyA9PiBzY2FsYXIgQHRlc3RGaWxlcyk7Citmb3IgKG15ICRpbmRleCA9IDA7ICRp
bmRleCA8IEB0ZXN0RmlsZXM7ICRpbmRleCsrKSB7CisgICAgbXkgJGlucHV0RmlsZSA9ICRpbnB1
dEZpbGVzWyRpbmRleF07CisgICAgbXkgJGV4cGVjdGVkRmlsZSA9ICRleHBlY3RlZEZpbGVzWyRp
bmRleF07CisKKyAgICBvcGVuIEZILCAiPCAkaW5wdXRGaWxlIiBvciBkaWUgIkNhbm5vdCBvcGVu
ICRpbnB1dEZpbGU6ICQhIjsKKyAgICBteSBAYWN0dWFsT3V0cHV0ID0gUHJlcGFyZUNoYW5nZUxv
Zzo6Z2V0X2Z1bmN0aW9uX2xpbmVfcmFuZ2VzX2Zvcl9wZXJsKFwqRkgsICRpbnB1dEZpbGUpOwor
ICAgIGNsb3NlIEZIOworCisgICAgaWYgKCRyZXNldFJlc3VsdHMpIHsKKyAgICAgICAgb3BlbiBG
SCwgIj4gJGV4cGVjdGVkRmlsZSIgb3IgZGllICJDYW5ub3Qgb3BlbiAkZXhwZWN0ZWRGaWxlOiAk
ISI7CisgICAgICAgIHByaW50IEZIIERhdGE6OkR1bXBlci0+bmV3KFtcQGFjdHVhbE91dHB1dF0p
LT5UZXJzZSgxKS0+SW5kZW50KDEpLT5EdW1wKCk7CisgICAgICAgIGNsb3NlIEZIOworICAgICAg
ICBuZXh0OworICAgIH0KKworICAgIG9wZW4gRkgsICI8ICRleHBlY3RlZEZpbGUiIG9yIGRpZSAi
Q2Fubm90IG9wZW4gJGV4cGVjdGVkRmlsZTogJCEiOworICAgIGxvY2FsICQvID0gdW5kZWY7Cisg
ICAgbXkgJGV4cGVjdGVkT3V0cHV0ID0gZXZhbCA8Rkg+OworICAgIGNsb3NlIEZIOworCisgICAg
aXNfZGVlcGx5KFxAYWN0dWFsT3V0cHV0LCAkZXhwZWN0ZWRPdXRwdXQsICJUZXN0cyBnZXRfZnVu
Y3Rpb25fbGluZV9yYW5nZXNfZm9yX3BlcmwoKSB1c2luZyBDb2RlR2VuZXJhdG9yLnBtIik7Cit9
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvcHJlcGFyZS1DaGFuZ2VMb2df
dW5pdHRlc3QvcmVzb3VyY2VzL3BlcmxfdW5pdHRlc3RzLnBsIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRwZXJsL3ByZXBhcmUtQ2hhbmdlTG9nX3VuaXR0ZXN0L3Jlc291cmNlcy9wZXJsX3VuaXR0ZXN0
cy5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5hYTQzNDE5ZGFmNTI3YTllYjQ4YjMyNDgwYmRiNDYyMTMzYzJiZmZj
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL3ByZXBhcmUtQ2hh
bmdlTG9nX3VuaXR0ZXN0L3Jlc291cmNlcy9wZXJsX3VuaXR0ZXN0cy5wbApAQCAtMCwwICsxLDQ2
IEBACisjIS91c3IvYmluL3BlcmwgLXcKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIyB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisjCisjIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
IyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyMKKworc3ViIGZ1bmMxCit7Cit9CisKK3N1YiBmdW5jMgoreworICAgIHJldHVybiAxMjM7
Cit9CisKK3N1YiBmdW5jMworeworICAgIHJldHVybiAxMjM7CisgICAgcmV0dXJuIDQ1NjsKK30K
Kworc3ViIGZ1bmM0KCkKK3sKK30KKworc3ViIGZ1bmM1KCQkJCQpCit7Cit9CisKK3N1YiBmdW5j
NihcQFxAXCRcJFwkXCQpCit7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHBl
cmwvcHJlcGFyZS1DaGFuZ2VMb2dfdW5pdHRlc3QvcmVzb3VyY2VzL3BlcmxfdW5pdHRlc3RzLnBs
LWV4cGVjdGVkLnR4dCBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9wcmVwYXJlLUNoYW5nZUxv
Z191bml0dGVzdC9yZXNvdXJjZXMvcGVybF91bml0dGVzdHMucGwtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjAwOTJmZGFhZGNkM2QxZjBhYjUwYTcyODY3ODllMzIxN2EwYjc3ZTIKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvcHJlcGFyZS1DaGFuZ2VMb2dfdW5p
dHRlc3QvcmVzb3VyY2VzL3BlcmxfdW5pdHRlc3RzLnBsLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDMyIEBACitbCisgIFsKKyAgICAnMjEnLAorICAgICcyMycsCisgICAgJ2Z1bmMxJworICBdLAor
ICBbCisgICAgJzI1JywKKyAgICAnMjgnLAorICAgICdmdW5jMicKKyAgXSwKKyAgWworICAgICcz
MCcsCisgICAgJzM0JywKKyAgICAnZnVuYzMnCisgIF0sCisgIFsKKyAgICAnMzYnLAorICAgICcz
OCcsCisgICAgJ2Z1bmM0JworICBdLAorICBbCisgICAgJzQwJywKKyAgICAnNDInLAorICAgICdm
dW5jNScKKyAgXSwKKyAgWworICAgICc0NCcsCisgICAgJzQ2JywKKyAgICAnZnVuYzYnCisgIF0K
K10K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120235</attachid>
            <date>2011-12-21 16:21:33 -0800</date>
            <delta_ts>2011-12-22 02:55:40 -0800</delta_ts>
            <desc>patch for commit</desc>
            <filename>bug-74994-20111222092130.patch</filename>
            <type>text/plain</type>
            <size>6359</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzNDY1CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggN2ZlOTU5MTIyNThmMzYwMWY1MGM4ZjNiMWJhMDc2ZTFk
NjM1ZDI1Yi4uZGY1NDcxYzA5MjlmYjFmYjdiZGM0NzcxODMyNzg2ZGMwMTA3OTc5OSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4
IEBACisyMDExLTEyLTIxICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBBZGQgdW5pdHRlc3RzIGZvciB0aGUgUGVybCBwYXJzZXIgb2YgcHJlcGFyZS1DaGFu
Z2VMb2cKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0
OTk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgS2lsemVyLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggYWRkcyB1bml0dGVzdHMgZm9yIGdldF9mdW5jdGlvbl9saW5lX3Jhbmdlc19mb3JfcGVy
bCgpIG9mIHByZXBhcmUtQ2hhbmdlTG9nLgorCisgICAgICAgIFRlc3Q6IFNjcmlwdHMvd2Via2l0
cGVybC9wcmVwYXJlLUNoYW5nZUxvZ191bml0dGVzdC9yZXNvdXJjZXMvcGVybF91bml0dGVzdHMu
cGwKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cGVybC9wcmVwYXJlLUNoYW5nZUxvZ191bml0
dGVzdC9wYXJzZXJfdW5pdHRlc3RzLnBsOiBBZGRlZC4KKyAgICAgICAgUnVucyB1bml0dGVzdHMg
c3BlY2lmaWVkIGluIEB0ZXN0RmlsZXMuCisgICAgICAgIFlvdSBjYW4gcmVzZXQgZXhwZWN0ZWQg
cmVzdWx0cyBieSBzcGVjaWZ5aW5nIGEgLS1yZXNldC1yZXN1bHRzIG9wdGlvbi4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHBlcmwvcHJlcGFyZS1DaGFuZ2VMb2dfdW5pdHRlc3QvcmVzb3VyY2Vz
L3BlcmxfdW5pdHRlc3RzLnBsOiBBZGRlZC4KKyAgICAgICAgQ29udGFpbnMgc2ltcGxlIG1ldGhv
ZHMuCisgICAgICAgIChmdW5jMSk6CisgICAgICAgIChmdW5jMik6CisgICAgICAgIChmdW5jMyk6
CisgICAgICAgIChmdW5jNCk6CisgICAgICAgIChmdW5jNSk6CisgICAgICAgIChmdW5jNik6Cisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRwZXJsL3ByZXBhcmUtQ2hhbmdlTG9nX3VuaXR0ZXN0L3Jl
c291cmNlcy9wZXJsX3VuaXR0ZXN0cy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICBUaGlz
IHRlc3QgcmVzdWx0IGlzIGdlbmVyYXRlZCBieSB0aGUgLS1yZXNldC1yZXN1bHRzIG9wdGlvbi4K
KwogMjAxMS0xMi0yMSAgRGFuaWVsIEJhdGVzICA8ZGJhdGVzQHJpbS5jb20+CiAKICAgICAgICAg
VGVhY2ggYnVpbGQtanNjIGhvdyB0byBidWlsZCBKYXZhU2NyaXB0Q29yZSBmb3IgdGhlIEVGTCwg
QmxhY2tCZXJyeSwgYW5kIFdpbkNFIHBvcnRzCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHBlcmwvcHJlcGFyZS1DaGFuZ2VMb2dfdW5pdHRlc3QvcGFyc2VyX3VuaXR0ZXN0cy5wbCBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9wcmVwYXJlLUNoYW5nZUxvZ191bml0dGVzdC9wYXJz
ZXJfdW5pdHRlc3RzLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEwMDg4ZDI3NjUxNDk5YzRjOGM1NzkwZWU3ZGVl
NWE2MjViMTc4NDQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwv
cHJlcGFyZS1DaGFuZ2VMb2dfdW5pdHRlc3QvcGFyc2VyX3VuaXR0ZXN0cy5wbApAQCAtMCwwICsx
LDY2IEBACisjIS91c3IvYmluL3BlcmwgLXcKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIyB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisjCisjIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorIyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIyBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKworIyBUaGlzIHNjcmlwdCB0ZXN0cyB0aGUgcGFyc2VyIG9mIHByZXBhcmUtQ2hhbmdl
TG9nIChpLmUuIGdldF9mdW5jdGlvbl9saW5lX3Jhbmdlc19mb3JfWFhYWCgpKS4KKyMgVGhpcyBz
Y3JpcHQgcnVucyB0aGUgdW5pdHRlc3RzIHNwZWNpZmllZCBpbiBAdGVzdEZpbGVzLgorCit1c2Ug
c3RyaWN0OwordXNlIHdhcm5pbmdzOworCit1c2UgRGF0YTo6RHVtcGVyOwordXNlIEZpbGU6OkJh
c2VuYW1lOwordXNlIEZpbGU6OlNwZWM7Cit1c2UgRmluZEJpbjsKK3VzZSBHZXRvcHQ6Okxvbmc7
Cit1c2UgVGVzdDo6TW9yZTsKK3VzZSBsaWIgRmlsZTo6U3BlYy0+Y2F0ZGlyKCRGaW5kQmluOjpC
aW4sICIuLiIpOwordXNlIExvYWRBc01vZHVsZSBxdyhQcmVwYXJlQ2hhbmdlTG9nIHByZXBhcmUt
Q2hhbmdlTG9nKTsKKworbXkgQHRlc3RGaWxlcyA9IHF3KHBlcmxfdW5pdHRlc3RzLnBsKTsKKwor
bXkgQGlucHV0RmlsZXMgPSBtYXAgeyBGaWxlOjpTcGVjLT5jYXRkaXIoJEZpbmRCaW46OkJpbiwg
InJlc291cmNlcyIsICRfKSB9IEB0ZXN0RmlsZXM7CitteSBAZXhwZWN0ZWRGaWxlcyA9IG1hcCB7
IHMvXiguKilcLlteXC5dKiQvJDEvOyBGaWxlOjpTcGVjLT5jYXRkaXIoJEZpbmRCaW46OkJpbiwg
InJlc291cmNlcyIsICRfIC4gIi1leHBlY3RlZC50eHQiKSB9IEB0ZXN0RmlsZXM7CisKK215ICRy
ZXNldFJlc3VsdHM7CitHZXRPcHRpb25zKCdyZXNldC1yZXN1bHRzJyA9PiBcJHJlc2V0UmVzdWx0
cyk7CisKK215ICR0ZXN0Q291bnQgPSBAdGVzdEZpbGVzOworcGxhbih0ZXN0cyA9PiAkdGVzdENv
dW50KTsKK2ZvciAobXkgJGluZGV4ID0gMDsgJGluZGV4IDwgJHRlc3RDb3VudDsgJGluZGV4Kysp
IHsKKyAgICBteSAkaW5wdXRGaWxlID0gJGlucHV0RmlsZXNbJGluZGV4XTsKKyAgICBteSAkZXhw
ZWN0ZWRGaWxlID0gJGV4cGVjdGVkRmlsZXNbJGluZGV4XTsKKworICAgIG9wZW4gRkgsICI8ICRp
bnB1dEZpbGUiIG9yIGRpZSAiQ2Fubm90IG9wZW4gJGlucHV0RmlsZTogJCEiOworICAgIG15IEBh
Y3R1YWxPdXRwdXQgPSBQcmVwYXJlQ2hhbmdlTG9nOjpnZXRfZnVuY3Rpb25fbGluZV9yYW5nZXNf
Zm9yX3BlcmwoXCpGSCwgJGlucHV0RmlsZSk7CisgICAgY2xvc2UgRkg7CisKKyAgICBpZiAoJHJl
c2V0UmVzdWx0cykgeworICAgICAgICBvcGVuIEZILCAiPiAkZXhwZWN0ZWRGaWxlIiBvciBkaWUg
IkNhbm5vdCBvcGVuICRleHBlY3RlZEZpbGU6ICQhIjsKKyAgICAgICAgcHJpbnQgRkggRGF0YTo6
RHVtcGVyLT5uZXcoW1xAYWN0dWFsT3V0cHV0XSktPlRlcnNlKDEpLT5JbmRlbnQoMSktPkR1bXAo
KTsKKyAgICAgICAgY2xvc2UgRkg7CisgICAgICAgIG5leHQ7CisgICAgfQorCisgICAgb3BlbiBG
SCwgIjwgJGV4cGVjdGVkRmlsZSIgb3IgZGllICJDYW5ub3Qgb3BlbiAkZXhwZWN0ZWRGaWxlOiAk
ISI7CisgICAgbG9jYWwgJC8gPSB1bmRlZjsKKyAgICBteSAkZXhwZWN0ZWRPdXRwdXQgPSBldmFs
IDxGSD47CisgICAgY2xvc2UgRkg7CisKKyAgICBpc19kZWVwbHkoXEBhY3R1YWxPdXRwdXQsICRl
eHBlY3RlZE91dHB1dCwgIlRlc3RzICRpbnB1dEZpbGUiKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cGVybC9wcmVwYXJlLUNoYW5nZUxvZ191bml0dGVzdC9yZXNvdXJjZXMv
cGVybF91bml0dGVzdHMtZXhwZWN0ZWQudHh0IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL3By
ZXBhcmUtQ2hhbmdlTG9nX3VuaXR0ZXN0L3Jlc291cmNlcy9wZXJsX3VuaXR0ZXN0cy1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMDA5MmZkYWFkY2QzZDFmMGFiNTBhNzI4Njc4OWUzMjE3YTBiNzdl
MgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9wcmVwYXJlLUNo
YW5nZUxvZ191bml0dGVzdC9yZXNvdXJjZXMvcGVybF91bml0dGVzdHMtZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsMzIgQEAKK1sKKyAgWworICAgICcyMScsCisgICAgJzIzJywKKyAgICAnZnVuYzEn
CisgIF0sCisgIFsKKyAgICAnMjUnLAorICAgICcyOCcsCisgICAgJ2Z1bmMyJworICBdLAorICBb
CisgICAgJzMwJywKKyAgICAnMzQnLAorICAgICdmdW5jMycKKyAgXSwKKyAgWworICAgICczNics
CisgICAgJzM4JywKKyAgICAnZnVuYzQnCisgIF0sCisgIFsKKyAgICAnNDAnLAorICAgICc0Mics
CisgICAgJ2Z1bmM1JworICBdLAorICBbCisgICAgJzQ0JywKKyAgICAnNDYnLAorICAgICdmdW5j
NicKKyAgXQorXQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL3ByZXBhcmUt
Q2hhbmdlTG9nX3VuaXR0ZXN0L3Jlc291cmNlcy9wZXJsX3VuaXR0ZXN0cy5wbCBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cGVybC9wcmVwYXJlLUNoYW5nZUxvZ191bml0dGVzdC9yZXNvdXJjZXMvcGVy
bF91bml0dGVzdHMucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWE0MzQxOWRhZjUyN2E5ZWI0OGIzMjQ4MGJkYjQ2
MjEzM2MyYmZmYwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9w
cmVwYXJlLUNoYW5nZUxvZ191bml0dGVzdC9yZXNvdXJjZXMvcGVybF91bml0dGVzdHMucGwKQEAg
LTAsMCArMSw0NiBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisjCisjIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIyBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyMgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorIworIyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyMgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisjCisKK3N1YiBmdW5jMQoreworfQorCitzdWIgZnVuYzIKK3sKKyAgICBy
ZXR1cm4gMTIzOworfQorCitzdWIgZnVuYzMKK3sKKyAgICByZXR1cm4gMTIzOworICAgIHJldHVy
biA0NTY7Cit9CisKK3N1YiBmdW5jNCgpCit7Cit9CisKK3N1YiBmdW5jNSgkJCQkKQoreworfQor
CitzdWIgZnVuYzYoXEBcQFwkXCRcJFwkKQoreworfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>