<?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>57957</bug_id>
          
          <creation_ts>2011-04-06 09:43:31 -0700</creation_ts>
          <short_desc>Web Inspector: migrate Inspector protocol messages format to JSON-RPC</short_desc>
          <delta_ts>2011-04-07 07:17:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://groups.google.com/group/json-rpc/web/json-rpc-2-0</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ilya Tikhonovsky">loislo</reporter>
          <assigned_to name="Ilya Tikhonovsky">loislo</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>380498</commentid>
    <comment_count>0</comment_count>
      <attachid>88449</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-04-06 09:43:31 -0700</bug_when>
    <thetext>Created attachment 88449
errors sample

There is not a significant difference between  inspector messages spec and and JSON-RPC 2.0 messages spec.
Also JSON-RPC has a pretty clear specification for error descriptions which we haven&apos;t.
It was decided that we will use it.

the list of renames:

1) type-&gt; /dev/null
2) domain + &apos;.&apos; + event =&gt; method // for events
3) domain + &apos;.&apos; + command =&gt; method // for requests
4) requestId =&gt; id // for responses

5) arguments =&gt; params // for requests
6) data =&gt; params // for events 
7) body =&gt; result // for responses

protocolErrors and error properties will be converted to JSON-RPC error format.
The order of properties in messages also will be adjusted.
The only thing that looks unnecessary is jsonrpc property.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380500</commentid>
    <comment_count>1</comment_count>
      <attachid>88450</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-04-06 09:44:12 -0700</bug_when>
    <thetext>Created attachment 88450
protocol messages sample</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380505</commentid>
    <comment_count>2</comment_count>
      <attachid>88452</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-04-06 09:47:46 -0700</bug_when>
    <thetext>Created attachment 88452
InspectorBackendDispatcher.cpp sample</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380506</commentid>
    <comment_count>3</comment_count>
      <attachid>88453</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-04-06 09:48:13 -0700</bug_when>
    <thetext>Created attachment 88453
InspectorBackendStub.js</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380509</commentid>
    <comment_count>4</comment_count>
      <attachid>88455</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-04-06 09:49:22 -0700</bug_when>
    <thetext>Created attachment 88455
[patch] initial version</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380511</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-06 09:50:55 -0700</bug_when>
    <thetext>Attachment 88455 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1

LayoutTests/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
Source/WebCore/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
Total errors found: 2 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380515</commentid>
    <comment_count>6</comment_count>
      <attachid>88457</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-04-06 09:53:31 -0700</bug_when>
    <thetext>Created attachment 88457
[patch] initial version with fixed ChangeLogs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380652</commentid>
    <comment_count>7</comment_count>
      <attachid>88457</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-04-06 11:15:54 -0700</bug_when>
    <thetext>Comment on attachment 88457
[patch] initial version with fixed ChangeLogs

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

&gt; LayoutTests/inspector/report-protocol-errors-expected.txt:37
&gt; +        data : {

Shouldn&apos;t the data be an array instead of object with properties 0, 1, 2,... ?

&gt; Source/WebCore/inspector/CodeGeneratorInspector.pm:508
&gt; +        commonErrors.insert(ParseError, &quot;{\\\&quot;code\\\&quot;:-32700,\\\&quot;message\\\&quot;:\\\&quot;Parse error.\\\&quot;}&quot;);

Would be nice to have a link to the spec defining all these constants.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380656</commentid>
    <comment_count>8</comment_count>
      <attachid>88457</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-04-06 11:24:46 -0700</bug_when>
    <thetext>Comment on attachment 88457
[patch] initial version with fixed ChangeLogs

Note that this needs coordinated landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380675</commentid>
    <comment_count>9</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-04-06 11:46:08 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 88457 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=88457&amp;action=review
&gt; 
&gt; &gt; LayoutTests/inspector/report-protocol-errors-expected.txt:37
&gt; &gt; +        data : {
&gt; 
&gt; Shouldn&apos;t the data be an array instead of object with properties 0, 1, 2,... ?

Really it is the array but there is a bug in InspectorTest.addObject. 
As far as such fix will affect a number of expectations it&apos;d be better do do that in another patch.

&gt; 
&gt; &gt; Source/WebCore/inspector/CodeGeneratorInspector.pm:508
&gt; &gt; +        commonErrors.insert(ParseError, &quot;{\\\&quot;code\\\&quot;:-32700,\\\&quot;message\\\&quot;:\\\&quot;Parse error.\\\&quot;}&quot;);
&gt; 
&gt; Would be nice to have a link to the spec defining all these constants.

all these codes are described in the the spec. 
You can see the url to it in URL property of the bug. 

http://groups.google.com/group/json-rpc/web/json-rpc-2-0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381121</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-06 21:49:40 -0700</bug_when>
    <thetext>Attachment 88457 did not build on mac:
Build output: http://queues.webkit.org/results/8341528</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381278</commentid>
    <comment_count>11</comment_count>
      <attachid>88457</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-04-07 06:27:12 -0700</bug_when>
    <thetext>Comment on attachment 88457
[patch] initial version with fixed ChangeLogs

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

&gt; Source/WebCore/inspector/CodeGeneratorInspector.pm:966
&gt; +    push(@backendHead, &quot;        ParseError = 0,&quot;);

Why not use same constant values as defined in the spec?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381280</commentid>
    <comment_count>12</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-04-07 06:28:35 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #7)
&gt; &gt; (From update of attachment 88457 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=88457&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; LayoutTests/inspector/report-protocol-errors-expected.txt:37
&gt; &gt; &gt; +        data : {
&gt; &gt; 
&gt; &gt; Shouldn&apos;t the data be an array instead of object with properties 0, 1, 2,... ?
&gt; 
&gt; Really it is the array but there is a bug in InspectorTest.addObject. 
&gt; As far as such fix will affect a number of expectations it&apos;d be better do do that in another patch.
&gt; 
Please file a bug on this.

&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/inspector/CodeGeneratorInspector.pm:508
&gt; &gt; &gt; +        commonErrors.insert(ParseError, &quot;{\\\&quot;code\\\&quot;:-32700,\\\&quot;message\\\&quot;:\\\&quot;Parse error.\\\&quot;}&quot;);
&gt; &gt; 
&gt; &gt; Would be nice to have a link to the spec defining all these constants.
&gt; 
&gt; all these codes are described in the the spec. 
&gt; You can see the url to it in URL property of the bug. 
&gt; 
&gt; http://groups.google.com/group/json-rpc/web/json-rpc-2-0
I meant putting the URL into code so that it&apos;s easier to find the spec when you are reading the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381316</commentid>
    <comment_count>13</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-04-07 07:17:15 -0700</bug_when>
    <thetext>Committed r83171: &lt;http://trac.webkit.org/changeset/83171&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>88449</attachid>
            <date>2011-04-06 09:43:31 -0700</date>
            <delta_ts>2011-04-06 09:43:31 -0700</delta_ts>
            <desc>errors sample</desc>
            <filename>report-protocol-errors-expected.txt</filename>
            <type>text/plain</type>
            <size>2088</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">VGVzdHMgdGhhdCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciBpcyBjYXRjaGluZyBpbmNvcnJl
Y3QgbWVzc2FnZXMuCgp7CiAgICBlcnJvciA6IHsKICAgICAgICBjb2RlIDogLTMyNzAwCiAgICAg
ICAgbWVzc2FnZSA6ICJQYXJzZSBlcnJvci4iCiAgICAgICAgZGF0YSA6IHsKICAgICAgICAgICAg
MCA6ICJNZXNzYWdlIHNob3VsZCBiZSBpbiBKU09OIGZvcm1hdC4iCiAgICAgICAgfQogICAgfQog
ICAgaWQgOiAwCn0KewogICAgZXJyb3IgOiB7CiAgICAgICAgY29kZSA6IC0zMjYwMAogICAgICAg
IG1lc3NhZ2UgOiAiSW52YWxpZCBSZXF1ZXN0LiIKICAgICAgICBkYXRhIDogewogICAgICAgICAg
ICAwIDogIkludmFsaWQgbWVzc2FnZSBmb3JtYXQuICdtZXRob2QnIHByb3BlcnR5IHdhc24ndCBm
b3VuZC4iCiAgICAgICAgfQogICAgfQogICAgaWQgOiAwCn0KewogICAgZXJyb3IgOiB7CiAgICAg
ICAgY29kZSA6IC0zMjYwMAogICAgICAgIG1lc3NhZ2UgOiAiSW52YWxpZCBSZXF1ZXN0LiIKICAg
ICAgICBkYXRhIDogewogICAgICAgICAgICAwIDogIkludmFsaWQgbWVzc2FnZSBmb3JtYXQuIFRo
ZSB0eXBlIG9mICdtZXRob2QnIHByb3BlcnR5IHNob3VsZCBiZSBzdHJpbmcuIgogICAgICAgIH0K
ICAgIH0KICAgIGlkIDogMAp9CnsKICAgIGVycm9yIDogewogICAgICAgIGNvZGUgOiAtMzI2MDAK
ICAgICAgICBtZXNzYWdlIDogIkludmFsaWQgUmVxdWVzdC4iCiAgICAgICAgZGF0YSA6IHsKICAg
ICAgICAgICAgMCA6ICJJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0LiAnaWQnIHByb3BlcnR5IHdhcyBu
b3QgZm91bmQgaW4gdGhlIHJlcXVlc3QuIgogICAgICAgIH0KICAgIH0KICAgIGlkIDogMAp9CnsK
ICAgIGVycm9yIDogewogICAgICAgIGNvZGUgOiAtMzI2MDAKICAgICAgICBtZXNzYWdlIDogIklu
dmFsaWQgUmVxdWVzdC4iCiAgICAgICAgZGF0YSA6IHsKICAgICAgICAgICAgMCA6ICJJbnZhbGlk
IG1lc3NhZ2UgZm9ybWF0LiBUaGUgdHlwZSBvZiAnaWQnIHByb3BlcnR5IHNob3VsZCBiZSBudW1i
ZXIuIgogICAgICAgIH0KICAgIH0KICAgIGlkIDogMAp9CnsKICAgIGVycm9yIDogewogICAgICAg
IGNvZGUgOiAtMzI2MDEKICAgICAgICBtZXNzYWdlIDogIk1ldGhvZCBub3QgZm91bmQuIgogICAg
ICAgIGRhdGEgOiB7CiAgICAgICAgICAgIDAgOiAiSW52YWxpZCBtZXRob2QgbmFtZSB3YXMgcmVj
ZWl2ZWQuICdET00udGVzdCcgd2Fzbid0IGZvdW5kLiIKICAgICAgICB9CiAgICB9CiAgICBpZCA6
IDEKfQp7CiAgICBlcnJvciA6IHsKICAgICAgICBjb2RlIDogLTMyNjAyCiAgICAgICAgbWVzc2Fn
ZSA6ICJJbnZhbGlkIHBhcmFtcy4iCiAgICAgICAgZGF0YSA6IHsKICAgICAgICAgICAgMCA6ICIn
cGFyYW1zJyBwcm9wZXJ0eSB3aXRoIHR5cGUgJ29iamVjdCcgd2FzIG5vdCBmb3VuZC4iCiAgICAg
ICAgfQogICAgfQogICAgaWQgOiAyCn0KewogICAgZXJyb3IgOiB7CiAgICAgICAgY29kZSA6IC0z
MjYwMgogICAgICAgIG1lc3NhZ2UgOiAiSW52YWxpZCBwYXJhbXMuIgogICAgICAgIGRhdGEgOiB7
CiAgICAgICAgICAgIDAgOiAiJ3BhcmFtcycgcHJvcGVydHkgd2l0aCB0eXBlICdvYmplY3QnIHdh
cyBub3QgZm91bmQuIgogICAgICAgIH0KICAgIH0KICAgIGlkIDogMwp9CnsKICAgIGVycm9yIDog
ewogICAgICAgIGNvZGUgOiAtMzI2MDIKICAgICAgICBtZXNzYWdlIDogIkludmFsaWQgcGFyYW1z
LiIKICAgICAgICBkYXRhIDogewogICAgICAgICAgICAwIDogIlBhcmFtZXRlciAnZnJhbWVJZCcg
d2l0aCB0eXBlICdTdHJpbmcnIHdhcyBub3QgZm91bmQuIgogICAgICAgICAgICAxIDogIlBhcmFt
ZXRlciAndXJsJyB3aXRoIHR5cGUgJ1N0cmluZycgd2FzIG5vdCBmb3VuZC4iCiAgICAgICAgfQog
ICAgfQogICAgaWQgOiA0Cn0KewogICAgZXJyb3IgOiB7CiAgICAgICAgY29kZSA6IC0zMjYwMgog
ICAgICAgIG1lc3NhZ2UgOiAiSW52YWxpZCBwYXJhbXMuIgogICAgICAgIGRhdGEgOiB7CiAgICAg
ICAgICAgIDAgOiAiUGFyYW1ldGVyICd1cmwnIHdpdGggdHlwZSAnU3RyaW5nJyB3YXMgbm90IGZv
dW5kLiIKICAgICAgICB9CiAgICB9CiAgICBpZCA6IDUKfQoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>88450</attachid>
            <date>2011-04-06 09:44:12 -0700</date>
            <delta_ts>2011-04-06 09:44:12 -0700</delta_ts>
            <desc>protocol messages sample</desc>
            <filename>runtime-agent-expected.txt</filename>
            <type>text/plain</type>
            <size>4217</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">UHJvdG9jb2wgc3RhYmlsaXR5IHRlc3QuIEl0IGlzIGR1bXBpbmcgcmVxdWVzdC9yZXNwb25zZSBw
YWlycyBvZiBSdW50aW1lQWdlbnQgZnVuY3Rpb25zLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KUnVudGltZUFnZW50LmV2YWx1YXRl
KCJ0ZXN0T2JqZWN0IiwidGVzdCIsZmFsc2UpCgpyZXF1ZXN0Ogp7CiAgICBtZXRob2QgOiAiUnVu
dGltZS5ldmFsdWF0ZSIKICAgIHBhcmFtcyA6IHsKICAgICAgICBleHByZXNzaW9uIDogInRlc3RP
YmplY3QiCiAgICAgICAgb2JqZWN0R3JvdXAgOiAidGVzdCIKICAgICAgICBpbmNsdWRlQ29tbWFu
ZExpbmVBUEkgOiBmYWxzZQogICAgfQogICAgaWQgOiA8bnVtYmVyPgp9CgpyZXNwb25zZToKewog
ICAgcmVzdWx0IDogewogICAgICAgIHJlc3VsdCA6IHsKICAgICAgICAgICAgb2JqZWN0SWQgOiA8
c3RyaW5nPgogICAgICAgICAgICBoYXNDaGlsZHJlbiA6IHRydWUKICAgICAgICAgICAgdHlwZSA6
ICJvYmplY3QiCiAgICAgICAgICAgIGRlc2NyaXB0aW9uIDogIlRlc3RPYmplY3QiCiAgICAgICAg
fQogICAgfQogICAgaWQgOiA8bnVtYmVyPgp9CgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpSdW50aW1lQWdlbnQuZXZhbHVhdGUoInRl
c3RPYmplY3QiLCJ0ZXN0IikKCnJlcXVlc3Q6CnsKICAgIG1ldGhvZCA6ICJSdW50aW1lLmV2YWx1
YXRlIgogICAgcGFyYW1zIDogewogICAgICAgIGV4cHJlc3Npb24gOiAidGVzdE9iamVjdCIKICAg
ICAgICBvYmplY3RHcm91cCA6ICJ0ZXN0IgogICAgfQogICAgaWQgOiA8bnVtYmVyPgp9CgpyZXNw
b25zZToKewogICAgcmVzdWx0IDogewogICAgICAgIHJlc3VsdCA6IHsKICAgICAgICAgICAgb2Jq
ZWN0SWQgOiA8c3RyaW5nPgogICAgICAgICAgICBoYXNDaGlsZHJlbiA6IHRydWUKICAgICAgICAg
ICAgdHlwZSA6ICJvYmplY3QiCiAgICAgICAgICAgIGRlc2NyaXB0aW9uIDogIlRlc3RPYmplY3Qi
CiAgICAgICAgfQogICAgfQogICAgaWQgOiA8bnVtYmVyPgp9CgotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpSdW50aW1lQWdlbnQuZXZh
bHVhdGVPbig8c3RyaW5nPiwidGhpcy5hc3NpZ25lZEJ5RXZhbHVhdGVPbiA9IFwiZXZhbHVhdGVP
biBmdW5jdGlvbiB3b3JrcyBmaW5lXCI7IikKCnJlcXVlc3Q6CnsKICAgIG1ldGhvZCA6ICJSdW50
aW1lLmV2YWx1YXRlT24iCiAgICBwYXJhbXMgOiB7CiAgICAgICAgb2JqZWN0SWQgOiA8c3RyaW5n
PgogICAgICAgIGV4cHJlc3Npb24gOiAidGhpcy5hc3NpZ25lZEJ5RXZhbHVhdGVPbiA9ICJldmFs
dWF0ZU9uIGZ1bmN0aW9uIHdvcmtzIGZpbmUiOyIKICAgIH0KICAgIGlkIDogPG51bWJlcj4KfQoK
cmVzcG9uc2U6CnsKICAgIHJlc3VsdCA6IHsKICAgICAgICByZXN1bHQgOiB7CiAgICAgICAgICAg
IHR5cGUgOiAidW5kZWZpbmVkIgogICAgICAgICAgICBkZXNjcmlwdGlvbiA6ICJ1bmRlZmluZWQi
CiAgICAgICAgfQogICAgfQogICAgaWQgOiA8bnVtYmVyPgp9CgotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpSdW50aW1lQWdlbnQuc2V0
UHJvcGVydHlWYWx1ZSg8c3RyaW5nPiwiYXNzaWduZWRCeVNldFByb3BlcnR5VmFsdWUiLCJ0cnVl
IikKCnJlcXVlc3Q6CnsKICAgIG1ldGhvZCA6ICJSdW50aW1lLnNldFByb3BlcnR5VmFsdWUiCiAg
ICBwYXJhbXMgOiB7CiAgICAgICAgb2JqZWN0SWQgOiA8c3RyaW5nPgogICAgICAgIHByb3BlcnR5
TmFtZSA6ICJhc3NpZ25lZEJ5U2V0UHJvcGVydHlWYWx1ZSIKICAgICAgICBleHByZXNzaW9uIDog
InRydWUiCiAgICB9CiAgICBpZCA6IDxudW1iZXI+Cn0KCnJlc3BvbnNlOgp7CiAgICByZXN1bHQg
OiB7CiAgICB9CiAgICBpZCA6IDxudW1iZXI+Cn0KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClJ1bnRpbWVBZ2VudC5zZXRQcm9wZXJ0
eVZhbHVlKDxzdHJpbmc+LCJyZW1vdmVkQnlTZXRQcm9wZXJ0eVZhbHVlIiwiIikKCnJlcXVlc3Q6
CnsKICAgIG1ldGhvZCA6ICJSdW50aW1lLnNldFByb3BlcnR5VmFsdWUiCiAgICBwYXJhbXMgOiB7
CiAgICAgICAgb2JqZWN0SWQgOiA8c3RyaW5nPgogICAgICAgIHByb3BlcnR5TmFtZSA6ICJyZW1v
dmVkQnlTZXRQcm9wZXJ0eVZhbHVlIgogICAgICAgIGV4cHJlc3Npb24gOiAiIgogICAgfQogICAg
aWQgOiA8bnVtYmVyPgp9CgpyZXNwb25zZToKewogICAgcmVzdWx0IDogewogICAgfQogICAgaWQg
OiA8bnVtYmVyPgp9CgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQpSdW50aW1lQWdlbnQuZ2V0UHJvcGVydGllcyg8c3RyaW5nPixmYWxz
ZSkKCnJlcXVlc3Q6CnsKICAgIG1ldGhvZCA6ICJSdW50aW1lLmdldFByb3BlcnRpZXMiCiAgICBw
YXJhbXMgOiB7CiAgICAgICAgb2JqZWN0SWQgOiA8c3RyaW5nPgogICAgICAgIGlnbm9yZUhhc093
blByb3BlcnR5IDogZmFsc2UKICAgIH0KICAgIGlkIDogPG51bWJlcj4KfQoKcmVzcG9uc2U6CnsK
ICAgIHJlc3VsdCA6IHsKICAgICAgICByZXN1bHQgOiB7CiAgICAgICAgICAgIDAgOiB7CiAgICAg
ICAgICAgICAgICBuYW1lIDogImFzc2lnbmVkQnlFdmFsdWF0ZU9uIgogICAgICAgICAgICAgICAg
dmFsdWUgOiB7CiAgICAgICAgICAgICAgICAgICAgdHlwZSA6ICJzdHJpbmciCiAgICAgICAgICAg
ICAgICAgICAgZGVzY3JpcHRpb24gOiAiZXZhbHVhdGVPbiBmdW5jdGlvbiB3b3JrcyBmaW5lIgog
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIDEgOiB7CiAgICAgICAg
ICAgICAgICBuYW1lIDogImFzc2lnbmVkQnlTZXRQcm9wZXJ0eVZhbHVlIgogICAgICAgICAgICAg
ICAgdmFsdWUgOiB7CiAgICAgICAgICAgICAgICAgICAgdHlwZSA6ICJib29sZWFuIgogICAgICAg
ICAgICAgICAgICAgIGRlc2NyaXB0aW9uIDogInRydWUiCiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgIH0KICAgICAgICAgICAgMiA6IHsKICAgICAgICAgICAgICAgIG5hbWUgOiAiX19wcm90
b19fIgogICAgICAgICAgICAgICAgdmFsdWUgOiB7CiAgICAgICAgICAgICAgICAgICAgb2JqZWN0
SWQgOiA8c3RyaW5nPgogICAgICAgICAgICAgICAgICAgIGhhc0NoaWxkcmVuIDogdHJ1ZQogICAg
ICAgICAgICAgICAgICAgIHR5cGUgOiAib2JqZWN0IgogICAgICAgICAgICAgICAgICAgIGRlc2Ny
aXB0aW9uIDogIlRlc3RPYmplY3QiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICB9CiAgICBpZCA6IDxudW1iZXI+Cn0KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClJ1bnRpbWVBZ2VudC5yZWxlYXNl
T2JqZWN0KDxzdHJpbmc+KQoKcmVxdWVzdDoKewogICAgbWV0aG9kIDogIlJ1bnRpbWUucmVsZWFz
ZU9iamVjdCIKICAgIHBhcmFtcyA6IHsKICAgICAgICBvYmplY3RJZCA6IDxzdHJpbmc+CiAgICB9
CiAgICBpZCA6IDxudW1iZXI+Cn0KCnJlc3BvbnNlOgp7CiAgICByZXN1bHQgOiB7CiAgICB9CiAg
ICBpZCA6IDxudW1iZXI+Cn0KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tClJ1bnRpbWVBZ2VudC5yZWxlYXNlT2JqZWN0R3JvdXAoInRl
c3QiKQoKcmVxdWVzdDoKewogICAgbWV0aG9kIDogIlJ1bnRpbWUucmVsZWFzZU9iamVjdEdyb3Vw
IgogICAgcGFyYW1zIDogewogICAgICAgIG9iamVjdEdyb3VwIDogInRlc3QiCiAgICB9CiAgICBp
ZCA6IDxudW1iZXI+Cn0KCnJlc3BvbnNlOgp7CiAgICByZXN1bHQgOiB7CiAgICB9CiAgICBpZCA6
IDxudW1iZXI+Cn0KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CkNvdmVyYWdlIGZvciBSdW50aW1lQWdlbnQKewogICAgZXZhbHVhdGUg
OiAiY2hlY2tlZCIKICAgIGV2YWx1YXRlT24gOiAiY2hlY2tlZCIKICAgIGdldFByb3BlcnRpZXMg
OiAiY2hlY2tlZCIKICAgIHNldFByb3BlcnR5VmFsdWUgOiAiY2hlY2tlZCIKICAgIHJlbGVhc2VP
YmplY3QgOiAiY2hlY2tlZCIKICAgIHJlbGVhc2VPYmplY3RHcm91cCA6ICJjaGVja2VkIgp9Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>88452</attachid>
            <date>2011-04-06 09:47:46 -0700</date>
            <delta_ts>2011-04-06 09:47:46 -0700</delta_ts>
            <desc>InspectorBackendDispatcher.cpp sample</desc>
            <filename>InspectorBackendDispatcher.cpp</filename>
            <type>text/x-c++src</type>
            <size>163267</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">Ly8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgovLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgoK
I2luY2x1ZGUgImNvbmZpZy5oIgojaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aCIKI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CiNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CgojaWYgRU5BQkxFKElOU1BFQ1RPUikKCiNpbmNsdWRlICJJbnNwZWN0
b3JBZ2VudC5oIgojaW5jbHVkZSAiSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmgiCiNp
bmNsdWRlICJJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oIgojaW5jbHVkZSAiSW5zcGVj
dG9yQ1NTQWdlbnQuaCIKI2luY2x1ZGUgIkluc3BlY3RvckNvbnNvbGVBZ2VudC5oIgojaW5jbHVk
ZSAiSW5zcGVjdG9yRE9NQWdlbnQuaCIKI2luY2x1ZGUgIkluc3BlY3RvckRPTVN0b3JhZ2VBZ2Vu
dC5oIgojaW5jbHVkZSAiSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oIgojaW5jbHVkZSAiSW5zcGVj
dG9yRGVidWdnZXJBZ2VudC5oIgojaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmgi
CiNpbmNsdWRlICJJbnNwZWN0b3JQYWdlQWdlbnQuaCIKI2luY2x1ZGUgIkluc3BlY3RvclByb2Zp
bGVyQWdlbnQuaCIKI2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNlQWdlbnQuaCIKI2luY2x1ZGUg
Ikluc3BlY3RvclJ1bnRpbWVBZ2VudC5oIgojaW5jbHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dC5oIgojaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgoKbmFtZXNwYWNlIFdlYkNvcmUgewoKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6Okluc3BlY3Rvcl9kaWRFdmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kQ21kID0gIklu
c3BlY3Rvci5kaWRFdmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kIjsKY29uc3QgY2hhciogSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OlBhZ2VfYWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZENtZCA9
ICJQYWdlLmFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQiOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6UGFnZV9yZW1vdmVBbGxTY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZENt
ZCA9ICJQYWdlLnJlbW92ZUFsbFNjcmlwdHNUb0V2YWx1YXRlT25Mb2FkIjsKY29uc3QgY2hhciog
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlBhZ2VfcmVsb2FkUGFnZUNtZCA9ICJQYWdlLnJl
bG9hZFBhZ2UiOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UGFnZV9v
cGVuSW5JbnNwZWN0ZWRXaW5kb3dDbWQgPSAiUGFnZS5vcGVuSW5JbnNwZWN0ZWRXaW5kb3ciOwpj
b25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UGFnZV9zZXRVc2VyQWdlbnRP
dmVycmlkZUNtZCA9ICJQYWdlLnNldFVzZXJBZ2VudE92ZXJyaWRlIjsKY29uc3QgY2hhciogSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlBhZ2VfZ2V0Q29va2llc0NtZCA9ICJQYWdlLmdldENv
b2tpZXMiOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UGFnZV9kZWxl
dGVDb29raWVDbWQgPSAiUGFnZS5kZWxldGVDb29raWUiOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6UnVudGltZV9ldmFsdWF0ZUNtZCA9ICJSdW50aW1lLmV2YWx1YXRl
IjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlJ1bnRpbWVfZXZhbHVh
dGVPbkNtZCA9ICJSdW50aW1lLmV2YWx1YXRlT24iOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6UnVudGltZV9nZXRQcm9wZXJ0aWVzQ21kID0gIlJ1bnRpbWUuZ2V0UHJv
cGVydGllcyI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpSdW50aW1l
X3NldFByb3BlcnR5VmFsdWVDbWQgPSAiUnVudGltZS5zZXRQcm9wZXJ0eVZhbHVlIjsKY29uc3Qg
Y2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlJ1bnRpbWVfcmVsZWFzZU9iamVjdENt
ZCA9ICJSdW50aW1lLnJlbGVhc2VPYmplY3QiOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6UnVudGltZV9yZWxlYXNlT2JqZWN0R3JvdXBDbWQgPSAiUnVudGltZS5yZWxl
YXNlT2JqZWN0R3JvdXAiOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Q29uc29sZV9lbmFibGVDbWQgPSAiQ29uc29sZS5lbmFibGUiOwpjb25zdCBjaGFyKiBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q29uc29sZV9kaXNhYmxlQ21kID0gIkNvbnNvbGUuZGlzYWJs
ZSI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDb25zb2xlX2NsZWFy
Q29uc29sZU1lc3NhZ2VzQ21kID0gIkNvbnNvbGUuY2xlYXJDb25zb2xlTWVzc2FnZXMiOwpjb25z
dCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q29uc29sZV9zZXRNb25pdG9yaW5n
WEhSRW5hYmxlZENtZCA9ICJDb25zb2xlLnNldE1vbml0b3JpbmdYSFJFbmFibGVkIjsKY29uc3Qg
Y2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNvbnNvbGVfYWRkSW5zcGVjdGVkTm9k
ZUNtZCA9ICJDb25zb2xlLmFkZEluc3BlY3RlZE5vZGUiOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29ya19lbmFibGVDbWQgPSAiTmV0d29yay5lbmFibGUiOwpj
b25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29ya19kaXNhYmxlQ21k
ID0gIk5ldHdvcmsuZGlzYWJsZSI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpOZXR3b3JrX2dldENhY2hlZFJlc291cmNlc0NtZCA9ICJOZXR3b3JrLmdldENhY2hlZFJl
c291cmNlcyI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3Jr
X2dldFJlc291cmNlQ29udGVudENtZCA9ICJOZXR3b3JrLmdldFJlc291cmNlQ29udGVudCI7CmNv
bnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrX3NldEV4dHJhSGVh
ZGVyc0NtZCA9ICJOZXR3b3JrLnNldEV4dHJhSGVhZGVycyI7CmNvbnN0IGNoYXIqIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpEYXRhYmFzZV9nZXREYXRhYmFzZVRhYmxlTmFtZXNDbWQgPSAi
RGF0YWJhc2UuZ2V0RGF0YWJhc2VUYWJsZU5hbWVzIjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OkRhdGFiYXNlX2V4ZWN1dGVTUUxDbWQgPSAiRGF0YWJhc2UuZXhlY3V0
ZVNRTCI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01TdG9yYWdl
X2dldERPTVN0b3JhZ2VFbnRyaWVzQ21kID0gIkRPTVN0b3JhZ2UuZ2V0RE9NU3RvcmFnZUVudHJp
ZXMiOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9NU3RvcmFnZV9z
ZXRET01TdG9yYWdlSXRlbUNtZCA9ICJET01TdG9yYWdlLnNldERPTVN0b3JhZ2VJdGVtIjsKY29u
c3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRPTVN0b3JhZ2VfcmVtb3ZlRE9N
U3RvcmFnZUl0ZW1DbWQgPSAiRE9NU3RvcmFnZS5yZW1vdmVET01TdG9yYWdlSXRlbSI7CmNvbnN0
IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpBcHBsaWNhdGlvbkNhY2hlX2dldEFw
cGxpY2F0aW9uQ2FjaGVzQ21kID0gIkFwcGxpY2F0aW9uQ2FjaGUuZ2V0QXBwbGljYXRpb25DYWNo
ZXMiOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9NX2dldERvY3Vt
ZW50Q21kID0gIkRPTS5nZXREb2N1bWVudCI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpET01fZ2V0Q2hpbGROb2Rlc0NtZCA9ICJET00uZ2V0Q2hpbGROb2RlcyI7CmNv
bnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01fcXVlcnlTZWxlY3RvckNt
ZCA9ICJET00ucXVlcnlTZWxlY3RvciI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpET01fcXVlcnlTZWxlY3RvckFsbENtZCA9ICJET00ucXVlcnlTZWxlY3RvckFsbCI7
CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01fc2V0Tm9kZU5hbWVD
bWQgPSAiRE9NLnNldE5vZGVOYW1lIjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OkRPTV9zZXROb2RlVmFsdWVDbWQgPSAiRE9NLnNldE5vZGVWYWx1ZSI7CmNvbnN0IGNo
YXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01fcmVtb3ZlTm9kZUNtZCA9ICJET00u
cmVtb3ZlTm9kZSI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01f
c2V0QXR0cmlidXRlQ21kID0gIkRPTS5zZXRBdHRyaWJ1dGUiOwpjb25zdCBjaGFyKiBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9NX3JlbW92ZUF0dHJpYnV0ZUNtZCA9ICJET00ucmVtb3Zl
QXR0cmlidXRlIjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRPTV9n
ZXRFdmVudExpc3RlbmVyc0Zvck5vZGVDbWQgPSAiRE9NLmdldEV2ZW50TGlzdGVuZXJzRm9yTm9k
ZSI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01fY29weU5vZGVD
bWQgPSAiRE9NLmNvcHlOb2RlIjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OkRPTV9nZXRPdXRlckhUTUxDbWQgPSAiRE9NLmdldE91dGVySFRNTCI7CmNvbnN0IGNoYXIq
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01fc2V0T3V0ZXJIVE1MQ21kID0gIkRPTS5z
ZXRPdXRlckhUTUwiOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9N
X3BlcmZvcm1TZWFyY2hDbWQgPSAiRE9NLnBlcmZvcm1TZWFyY2giOwpjb25zdCBjaGFyKiBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9NX2NhbmNlbFNlYXJjaENtZCA9ICJET00uY2FuY2Vs
U2VhcmNoIjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRPTV9wdXNo
Tm9kZVRvRnJvbnRlbmRDbWQgPSAiRE9NLnB1c2hOb2RlVG9Gcm9udGVuZCI7CmNvbnN0IGNoYXIq
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01fc2V0U2VhcmNoaW5nRm9yTm9kZUNtZCA9
ICJET00uc2V0U2VhcmNoaW5nRm9yTm9kZSI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpET01faGlnaGxpZ2h0RE9NTm9kZUNtZCA9ICJET00uaGlnaGxpZ2h0RE9NTm9k
ZSI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01faGlkZURPTU5v
ZGVIaWdobGlnaHRDbWQgPSAiRE9NLmhpZGVET01Ob2RlSGlnaGxpZ2h0IjsKY29uc3QgY2hhciog
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRPTV9oaWdobGlnaHRGcmFtZUNtZCA9ICJET00u
aGlnaGxpZ2h0RnJhbWUiOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
RE9NX2hpZGVGcmFtZUhpZ2hsaWdodENtZCA9ICJET00uaGlkZUZyYW1lSGlnaGxpZ2h0IjsKY29u
c3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRPTV9wdXNoTm9kZUJ5UGF0aFRv
RnJvbnRlbmRDbWQgPSAiRE9NLnB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZCI7CmNvbnN0IGNoYXIq
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01fcmVzb2x2ZU5vZGVDbWQgPSAiRE9NLnJl
c29sdmVOb2RlIjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNTU19n
ZXRTdHlsZXNGb3JOb2RlQ21kID0gIkNTUy5nZXRTdHlsZXNGb3JOb2RlIjsKY29uc3QgY2hhciog
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNTU19nZXRDb21wdXRlZFN0eWxlRm9yTm9kZUNt
ZCA9ICJDU1MuZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUiOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Q1NTX2dldElubGluZVN0eWxlRm9yTm9kZUNtZCA9ICJDU1MuZ2V0
SW5saW5lU3R5bGVGb3JOb2RlIjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OkNTU19nZXRBbGxTdHlsZVNoZWV0c0NtZCA9ICJDU1MuZ2V0QWxsU3R5bGVTaGVldHMiOwpj
b25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q1NTX2dldFN0eWxlU2hlZXRD
bWQgPSAiQ1NTLmdldFN0eWxlU2hlZXQiOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Q1NTX2dldFN0eWxlU2hlZXRUZXh0Q21kID0gIkNTUy5nZXRTdHlsZVNoZWV0VGV4
dCI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDU1Nfc2V0U3R5bGVT
aGVldFRleHRDbWQgPSAiQ1NTLnNldFN0eWxlU2hlZXRUZXh0IjsKY29uc3QgY2hhciogSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OkNTU19zZXRQcm9wZXJ0eVRleHRDbWQgPSAiQ1NTLnNldFBy
b3BlcnR5VGV4dCI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDU1Nf
dG9nZ2xlUHJvcGVydHlDbWQgPSAiQ1NTLnRvZ2dsZVByb3BlcnR5IjsKY29uc3QgY2hhciogSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNTU19zZXRSdWxlU2VsZWN0b3JDbWQgPSAiQ1NTLnNl
dFJ1bGVTZWxlY3RvciI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpD
U1NfYWRkUnVsZUNtZCA9ICJDU1MuYWRkUnVsZSI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpDU1NfZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllc0NtZCA9ICJDU1MuZ2V0
U3VwcG9ydGVkQ1NTUHJvcGVydGllcyI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpUaW1lbGluZV9zdGFydENtZCA9ICJUaW1lbGluZS5zdGFydCI7CmNvbnN0IGNoYXIq
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpUaW1lbGluZV9zdG9wQ21kID0gIlRpbWVsaW5l
LnN0b3AiOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RGVidWdnZXJf
ZW5hYmxlQ21kID0gIkRlYnVnZ2VyLmVuYWJsZSI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpEZWJ1Z2dlcl9kaXNhYmxlQ21kID0gIkRlYnVnZ2VyLmRpc2FibGUiOwpj
b25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RGVidWdnZXJfc2V0QnJlYWtw
b2ludHNBY3RpdmVDbWQgPSAiRGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUiOwpjb25zdCBj
aGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RGVidWdnZXJfc2V0QnJlYWtwb2ludEJ5
VXJsQ21kID0gIkRlYnVnZ2VyLnNldEJyZWFrcG9pbnRCeVVybCI7CmNvbnN0IGNoYXIqIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpEZWJ1Z2dlcl9zZXRCcmVha3BvaW50Q21kID0gIkRlYnVn
Z2VyLnNldEJyZWFrcG9pbnQiOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6RGVidWdnZXJfcmVtb3ZlQnJlYWtwb2ludENtZCA9ICJEZWJ1Z2dlci5yZW1vdmVCcmVha3Bv
aW50IjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRlYnVnZ2VyX2Nv
bnRpbnVlVG9Mb2NhdGlvbkNtZCA9ICJEZWJ1Z2dlci5jb250aW51ZVRvTG9jYXRpb24iOwpjb25z
dCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RGVidWdnZXJfc3RlcE92ZXJDbWQg
PSAiRGVidWdnZXIuc3RlcE92ZXIiOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6RGVidWdnZXJfc3RlcEludG9DbWQgPSAiRGVidWdnZXIuc3RlcEludG8iOwpjb25zdCBj
aGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RGVidWdnZXJfc3RlcE91dENtZCA9ICJE
ZWJ1Z2dlci5zdGVwT3V0IjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OkRlYnVnZ2VyX3BhdXNlQ21kID0gIkRlYnVnZ2VyLnBhdXNlIjsKY29uc3QgY2hhciogSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OkRlYnVnZ2VyX3Jlc3VtZUNtZCA9ICJEZWJ1Z2dlci5yZXN1
bWUiOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RGVidWdnZXJfZWRp
dFNjcmlwdFNvdXJjZUNtZCA9ICJEZWJ1Z2dlci5lZGl0U2NyaXB0U291cmNlIjsKY29uc3QgY2hh
ciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRlYnVnZ2VyX2dldFNjcmlwdFNvdXJjZUNt
ZCA9ICJEZWJ1Z2dlci5nZXRTY3JpcHRTb3VyY2UiOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6RGVidWdnZXJfc2V0UGF1c2VPbkV4Y2VwdGlvbnNDbWQgPSAiRGVidWdn
ZXIuc2V0UGF1c2VPbkV4Y2VwdGlvbnMiOwpjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6RGVidWdnZXJfZXZhbHVhdGVPbkNhbGxGcmFtZUNtZCA9ICJEZWJ1Z2dlci5ldmFs
dWF0ZU9uQ2FsbEZyYW1lIjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OkJyb3dzZXJEZWJ1Z2dlcl9zZXRET01CcmVha3BvaW50Q21kID0gIkJyb3dzZXJEZWJ1Z2dlci5z
ZXRET01CcmVha3BvaW50IjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OkJyb3dzZXJEZWJ1Z2dlcl9yZW1vdmVET01CcmVha3BvaW50Q21kID0gIkJyb3dzZXJEZWJ1Z2dl
ci5yZW1vdmVET01CcmVha3BvaW50IjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OkJyb3dzZXJEZWJ1Z2dlcl9zZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludENtZCA9ICJC
cm93c2VyRGVidWdnZXIuc2V0RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQiOwpjb25zdCBjaGFyKiBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6QnJvd3NlckRlYnVnZ2VyX3JlbW92ZUV2ZW50TGlz
dGVuZXJCcmVha3BvaW50Q21kID0gIkJyb3dzZXJEZWJ1Z2dlci5yZW1vdmVFdmVudExpc3RlbmVy
QnJlYWtwb2ludCI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpCcm93
c2VyRGVidWdnZXJfc2V0WEhSQnJlYWtwb2ludENtZCA9ICJCcm93c2VyRGVidWdnZXIuc2V0WEhS
QnJlYWtwb2ludCI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpCcm93
c2VyRGVidWdnZXJfcmVtb3ZlWEhSQnJlYWtwb2ludENtZCA9ICJCcm93c2VyRGVidWdnZXIucmVt
b3ZlWEhSQnJlYWtwb2ludCI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpQcm9maWxlcl9lbmFibGVDbWQgPSAiUHJvZmlsZXIuZW5hYmxlIjsKY29uc3QgY2hhciogSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlByb2ZpbGVyX2Rpc2FibGVDbWQgPSAiUHJvZmlsZXIu
ZGlzYWJsZSI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpQcm9maWxl
cl9pc0VuYWJsZWRDbWQgPSAiUHJvZmlsZXIuaXNFbmFibGVkIjsKY29uc3QgY2hhciogSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OlByb2ZpbGVyX3N0YXJ0Q21kID0gIlByb2ZpbGVyLnN0YXJ0
IjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlByb2ZpbGVyX3N0b3BD
bWQgPSAiUHJvZmlsZXIuc3RvcCI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpQcm9maWxlcl9nZXRQcm9maWxlSGVhZGVyc0NtZCA9ICJQcm9maWxlci5nZXRQcm9maWxl
SGVhZGVycyI7CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpQcm9maWxl
cl9nZXRQcm9maWxlQ21kID0gIlByb2ZpbGVyLmdldFByb2ZpbGUiOwpjb25zdCBjaGFyKiBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UHJvZmlsZXJfcmVtb3ZlUHJvZmlsZUNtZCA9ICJQcm9m
aWxlci5yZW1vdmVQcm9maWxlIjsKY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OlByb2ZpbGVyX2NsZWFyUHJvZmlsZXNDbWQgPSAiUHJvZmlsZXIuY2xlYXJQcm9maWxlcyI7
CmNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpQcm9maWxlcl90YWtlSGVh
cFNuYXBzaG90Q21kID0gIlByb2ZpbGVyLnRha2VIZWFwU25hcHNob3QiOwpjb25zdCBjaGFyKiBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UHJvZmlsZXJfY29sbGVjdEdhcmJhZ2VDbWQgPSAi
UHJvZmlsZXIuY29sbGVjdEdhcmJhZ2UiOwoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6SW5zcGVjdG9yX2RpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQobG9uZyBjYWxsSWQsIElu
c3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAg
aWYgKCFtX2luc3BlY3RvckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5n
KCJJbnNwZWN0b3IgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5n
IGVycm9yOwoKICAgIGlmIChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIg
PSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKSkgewogICAgICAgIGlu
dCBpbl90ZXN0Q2FsbElkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgInRlc3RDYWxs
SWQiLCBmYWxzZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwogICAgICAgIFN0cmluZyBpbl9qc29u
UmVzdWx0ID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgImpzb25SZXN1bHQiLCBm
YWxzZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwoKICAgICAgICBpZiAoIXByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSkKICAgICAgICAgICAgbV9pbnNwZWN0b3JBZ2VudC0+ZGlkRXZhbHVhdGVGb3JU
ZXN0SW5Gcm9udGVuZCgmZXJyb3IsIGluX3Rlc3RDYWxsSWQsIGluX2pzb25SZXN1bHQpOwogICAg
fSBlbHNlCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIidwYXJhbXMnIHByb3Bl
cnR5IHdpdGggdHlwZSAnb2JqZWN0JyB3YXMgbm90IGZvdW5kLiIpOwoKICAgIC8vIHVzZSBJbnNw
ZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNwZWN0b3IgYXZhaWxhYmlsaXR5Cgog
ICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29s
RXJyb3IoY2FsbElkLCBJbnZhbGlkUGFyYW1zLCBwcm90b2NvbEVycm9ycyk7CiAgICAgICAgcmV0
dXJuOwogICAgfQoKICAgIGlmIChlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3Rv
Y29sRXJyb3IoY2FsbElkLCBTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgIHJldHVybjsKICAg
IH0KCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0
KCJyZXN1bHQiLCByZXN1bHQpOwoKICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIs
IGNhbGxJZCk7CiAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zy
b250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpQYWdlX2FkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CgogICAgaWYgKCFtX3BhZ2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZygiUGFnZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcg
ZXJyb3I7CgogICAgaWYgKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9
IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpKSB7CiAgICAgICAgU3Ry
aW5nIGluX3NjcmlwdFNvdXJjZSA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXIuZ2V0KCksICJz
Y3JpcHRTb3VyY2UiLCBmYWxzZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwoKICAgICAgICBpZiAo
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgbV9wYWdlQWdlbnQtPmFkZFNj
cmlwdFRvRXZhbHVhdGVPbkxvYWQoJmVycm9yLCBpbl9zY3JpcHRTb3VyY2UpOwogICAgfSBlbHNl
CiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIidwYXJhbXMnIHByb3BlcnR5IHdp
dGggdHlwZSAnb2JqZWN0JyB3YXMgbm90IGZvdW5kLiIpOwoKICAgIC8vIHVzZSBJbnNwZWN0b3JG
cm9udGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNwZWN0b3IgYXZhaWxhYmlsaXR5CgogICAgaWYg
KHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3Io
Y2FsbElkLCBJbnZhbGlkUGFyYW1zLCBwcm90b2NvbEVycm9ycyk7CiAgICAgICAgcmV0dXJuOwog
ICAgfQoKICAgIGlmIChlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJy
b3IoY2FsbElkLCBTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJyZXN1
bHQiLCByZXN1bHQpOwoKICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsIGNhbGxJ
ZCk7CiAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpQYWdlX3JlbW92ZUFsbFNjcmlwdHNUb0V2YWx1YXRlT25Mb2FkKGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBy
b3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9wYWdl
QWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlBhZ2UgaGFuZGxlciBp
cyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcGFnZUFnZW50LT5yZW1vdmVBbGxTY3Jp
cHRzVG9FdmFsdWF0ZU9uTG9hZCgmZXJyb3IpOwoKICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVu
ZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNwZWN0b3IgYXZhaWxhYmlsaXR5CgogICAgaWYgKHByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElk
LCBJbnZhbGlkUGFyYW1zLCBwcm90b2NvbEVycm9ycyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoK
ICAgIGlmIChlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2Fs
bElkLCBTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJyZXN1bHQiLCBy
ZXN1bHQpOwoKICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsIGNhbGxJZCk7CiAg
ICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3Bv
bnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpQYWdlX3JlbG9hZFBhZ2UobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVx
dWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3BhZ2VBZ2VudCkK
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUGFnZSBoYW5kbGVyIGlzIG5vdCBh
dmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRP
YmplY3QoInBhcmFtcyIpKSB7CiAgICAgICAgYm9vbCBpbl9pZ25vcmVDYWNoZSA9IGdldEJvb2xl
YW4ocGFyYW1zQ29udGFpbmVyLmdldCgpLCAiaWdub3JlQ2FjaGUiLCB0cnVlLCBwcm90b2NvbEVy
cm9ycy5nZXQoKSk7CgogICAgICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAg
ICAgICAgICBtX3BhZ2VBZ2VudC0+cmVsb2FkUGFnZSgmZXJyb3IsICZpbl9pZ25vcmVDYWNoZSk7
CiAgICB9IGVsc2UKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiJ3BhcmFtcycg
cHJvcGVydHkgd2l0aCB0eXBlICdvYmplY3QnIHdhcyBub3QgZm91bmQuIik7CgogICAgLy8gdXNl
IEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxp
dHkKCiAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJv
dG9jb2xFcnJvcihjYWxsSWQsIEludmFsaWRQYXJhbXMsIHByb3RvY29sRXJyb3JzKTsKICAgICAg
ICByZXR1cm47CiAgICB9CgogICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0
UHJvdG9jb2xFcnJvcihjYWxsSWQsIFNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgcmV0dXJu
OwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRP
YmplY3QoInJlc3VsdCIsIHJlc3VsdCk7CgogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXROdW1iZXIo
ImlkIiwgY2FsbElkKTsKICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2Fn
ZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlBhZ2Vfb3BlbkluSW5zcGVjdGVkV2luZG93KGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0
ZSgpOwoKICAgIGlmICghbV9wYWdlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoIlBhZ2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5n
IGVycm9yOwoKICAgIGlmIChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIg
PSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKSkgewogICAgICAgIFN0
cmluZyBpbl91cmwgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyLmdldCgpLCAidXJsIiwgZmFs
c2UsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKCiAgICAgICAgaWYgKCFwcm90b2NvbEVycm9ycy0+
bGVuZ3RoKCkpCiAgICAgICAgICAgIG1fcGFnZUFnZW50LT5vcGVuSW5JbnNwZWN0ZWRXaW5kb3co
JmVycm9yLCBpbl91cmwpOwogICAgfSBlbHNlCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoIidwYXJhbXMnIHByb3BlcnR5IHdpdGggdHlwZSAnb2JqZWN0JyB3YXMgbm90IGZvdW5k
LiIpOwoKICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNw
ZWN0b3IgYXZhaWxhYmlsaXR5CgogICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewog
ICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBJbnZhbGlkUGFyYW1zLCBwcm90b2Nv
bEVycm9ycyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChlcnJvci5sZW5ndGgoKSkg
ewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBTZXJ2ZXJFcnJvciwgZXJyb3Ip
OwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNw
b25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHJlc3Bv
bnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1bHQpOwoKICAgIHJlc3BvbnNlTWVz
c2FnZS0+c2V0TnVtYmVyKCJpZCIsIGNhbGxJZCk7CiAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpQYWdlX3NldFVzZXJBZ2Vu
dE92ZXJyaWRlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9wYWdlQWdlbnQpCiAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoIlBhZ2UgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoK
ICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmIChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMi
KSkgewogICAgICAgIFN0cmluZyBpbl91c2VyQWdlbnQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFp
bmVyLmdldCgpLCAidXNlckFnZW50IiwgZmFsc2UsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKCiAg
ICAgICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgICAgIG1fcGFnZUFn
ZW50LT5zZXRVc2VyQWdlbnRPdmVycmlkZSgmZXJyb3IsIGluX3VzZXJBZ2VudCk7CiAgICB9IGVs
c2UKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiJ3BhcmFtcycgcHJvcGVydHkg
d2l0aCB0eXBlICdvYmplY3QnIHdhcyBub3QgZm91bmQuIik7CgogICAgLy8gdXNlIEluc3BlY3Rv
ckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKCiAgICBp
ZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJv
cihjYWxsSWQsIEludmFsaWRQYXJhbXMsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICByZXR1cm47
CiAgICB9CgogICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xF
cnJvcihjYWxsSWQsIFNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgcmV0dXJuOwogICAgfQoK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoInJl
c3VsdCIsIHJlc3VsdCk7CgogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgY2Fs
bElkKTsKICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRl
bmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OlBhZ2VfZ2V0Q29va2llcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcGFnZUFnZW50KQogICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQYWdlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsK
CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG91dF9jb29raWVzID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOwogICAgU3RyaW5nIG91dF9jb29raWVzU3RyaW5nID0gIiI7CgogICAgRXJyb3JT
dHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAg
bV9wYWdlQWdlbnQtPmdldENvb2tpZXMoJmVycm9yLCAmb3V0X2Nvb2tpZXMsICZvdXRfY29va2ll
c1N0cmluZyk7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdl
Ykluc3BlY3RvciBhdmFpbGFiaWxpdHkKCiAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIEludmFsaWRQYXJhbXMsIHBy
b3RvY29sRXJyb3JzKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGVycm9yLmxlbmd0
aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIFNlcnZlckVycm9yLCBl
cnJvcik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
ICAgIHJlc3VsdC0+c2V0QXJyYXkoImNvb2tpZXMiLCBvdXRfY29va2llcyk7CiAgICAgICAgcmVz
dWx0LT5zZXRTdHJpbmcoImNvb2tpZXNTdHJpbmciLCBvdXRfY29va2llc1N0cmluZyk7CiAgICBy
ZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgicmVzdWx0IiwgcmVzdWx0KTsKCiAgICByZXNwb25z
ZU1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCBjYWxsSWQpOwogICAgbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0
cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UGFnZV9kZWxldGVD
b29raWUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3Qp
CnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3BhZ2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZygiUGFnZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAg
RXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFt
c0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpKSB7
CiAgICAgICAgU3RyaW5nIGluX2Nvb2tpZU5hbWUgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVy
LmdldCgpLCAiY29va2llTmFtZSIsIGZhbHNlLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CiAgICAg
ICAgU3RyaW5nIGluX2RvbWFpbiA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXIuZ2V0KCksICJk
b21haW4iLCBmYWxzZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwoKICAgICAgICBpZiAoIXByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgbV9wYWdlQWdlbnQtPmRlbGV0ZUNvb2tp
ZSgmZXJyb3IsIGluX2Nvb2tpZU5hbWUsIGluX2RvbWFpbik7CiAgICB9IGVsc2UKICAgICAgICBw
cm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiJ3BhcmFtcycgcHJvcGVydHkgd2l0aCB0eXBlICdv
YmplY3QnIHdhcyBub3QgZm91bmQuIik7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFz
IGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKCiAgICBpZiAocHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIElu
dmFsaWRQYXJhbXMsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAg
aWYgKGVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQs
IFNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoInJlc3VsdCIsIHJlc3Vs
dCk7CgogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgY2FsbElkKTsKICAgIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VN
ZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OlJ1bnRpbWVfZXZhbHVhdGUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVz
dE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJv
cnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3J1bnRpbWVBZ2VudCkK
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUnVudGltZSBoYW5kbGVyIGlzIG5v
dCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb3V0X3Jlc3VsdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAg
aWYgKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNz
YWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpKSB7CiAgICAgICAgU3RyaW5nIGluX2V4cHJl
c3Npb24gPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyLmdldCgpLCAiZXhwcmVzc2lvbiIsIGZh
bHNlLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CiAgICAgICAgU3RyaW5nIGluX29iamVjdEdyb3Vw
ID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgIm9iamVjdEdyb3VwIiwgZmFsc2Us
IHByb3RvY29sRXJyb3JzLmdldCgpKTsKICAgICAgICBib29sIGluX2luY2x1ZGVDb21tYW5kTGlu
ZUFQSSA9IGdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVyLmdldCgpLCAiaW5jbHVkZUNvbW1hbmRM
aW5lQVBJIiwgdHJ1ZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwoKICAgICAgICBpZiAoIXByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgbV9ydW50aW1lQWdlbnQtPmV2YWx1YXRl
KCZlcnJvciwgaW5fZXhwcmVzc2lvbiwgaW5fb2JqZWN0R3JvdXAsICZpbl9pbmNsdWRlQ29tbWFu
ZExpbmVBUEksICZvdXRfcmVzdWx0KTsKICAgIH0gZWxzZQogICAgICAgIHByb3RvY29sRXJyb3Jz
LT5wdXNoU3RyaW5nKCIncGFyYW1zJyBwcm9wZXJ0eSB3aXRoIHR5cGUgJ29iamVjdCcgd2FzIG5v
dCBmb3VuZC4iKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIgb2Yg
V2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQoKICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3Ro
KCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgSW52YWxpZFBhcmFtcywg
cHJvdG9jb2xFcnJvcnMpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoZXJyb3IubGVu
Z3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgU2VydmVyRXJyb3Is
IGVycm9yKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInJlc3VsdCIsIG91dF9yZXN1bHQpOwogICAgcmVzcG9u
c2VNZXNzYWdlLT5zZXRPYmplY3QoInJlc3VsdCIsIHJlc3VsdCk7CgogICAgcmVzcG9uc2VNZXNz
YWdlLT5zZXROdW1iZXIoImlkIiwgY2FsbElkKTsKICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlJ1bnRpbWVfZXZhbHVhdGVP
bihsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewog
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcnVudGltZUFnZW50KQogICAgICAgIHByb3RvY29sRXJy
b3JzLT5wdXNoU3RyaW5nKCJSdW50aW1lIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvdXRfcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVj
dCgicGFyYW1zIikpIHsKICAgICAgICBTdHJpbmcgaW5fb2JqZWN0SWQgPSBnZXRTdHJpbmcocGFy
YW1zQ29udGFpbmVyLmdldCgpLCAib2JqZWN0SWQiLCBmYWxzZSwgcHJvdG9jb2xFcnJvcnMuZ2V0
KCkpOwogICAgICAgIFN0cmluZyBpbl9leHByZXNzaW9uID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRh
aW5lci5nZXQoKSwgImV4cHJlc3Npb24iLCBmYWxzZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwoK
ICAgICAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgbV9ydW50
aW1lQWdlbnQtPmV2YWx1YXRlT24oJmVycm9yLCBpbl9vYmplY3RJZCwgaW5fZXhwcmVzc2lvbiwg
Jm91dF9yZXN1bHQpOwogICAgfSBlbHNlCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoIidwYXJhbXMnIHByb3BlcnR5IHdpdGggdHlwZSAnb2JqZWN0JyB3YXMgbm90IGZvdW5kLiIp
OwoKICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNwZWN0
b3IgYXZhaWxhYmlsaXR5CgogICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAg
ICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBJbnZhbGlkUGFyYW1zLCBwcm90b2NvbEVy
cm9ycyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChlcnJvci5sZW5ndGgoKSkgewog
ICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBTZXJ2ZXJFcnJvciwgZXJyb3IpOwog
ICAgICAgIHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25z
ZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICByZXN1
bHQtPnNldE9iamVjdCgicmVzdWx0Iiwgb3V0X3Jlc3VsdCk7CiAgICByZXNwb25zZU1lc3NhZ2Ut
PnNldE9iamVjdCgicmVzdWx0IiwgcmVzdWx0KTsKCiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51
bWJlcigiaWQiLCBjYWxsSWQpOwogICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UnVudGltZV9nZXRQcm9wZXJ0aWVzKGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0
ZSgpOwoKICAgIGlmICghbV9ydW50aW1lQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoIlJ1bnRpbWUgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gb3V0X3Jlc3VsdCA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1z
IikpIHsKICAgICAgICBTdHJpbmcgaW5fb2JqZWN0SWQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFp
bmVyLmdldCgpLCAib2JqZWN0SWQiLCBmYWxzZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwogICAg
ICAgIGJvb2wgaW5faWdub3JlSGFzT3duUHJvcGVydHkgPSBnZXRCb29sZWFuKHBhcmFtc0NvbnRh
aW5lci5nZXQoKSwgImlnbm9yZUhhc093blByb3BlcnR5IiwgZmFsc2UsIHByb3RvY29sRXJyb3Jz
LmdldCgpKTsKCiAgICAgICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAg
ICAgIG1fcnVudGltZUFnZW50LT5nZXRQcm9wZXJ0aWVzKCZlcnJvciwgaW5fb2JqZWN0SWQsIGlu
X2lnbm9yZUhhc093blByb3BlcnR5LCAmb3V0X3Jlc3VsdCk7CiAgICB9IGVsc2UKICAgICAgICBw
cm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiJ3BhcmFtcycgcHJvcGVydHkgd2l0aCB0eXBlICdv
YmplY3QnIHdhcyBub3QgZm91bmQuIik7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFz
IGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKCiAgICBpZiAocHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIElu
dmFsaWRQYXJhbXMsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAg
aWYgKGVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQs
IFNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoInJlc3VsdCIsIG91dF9yZXN1bHQp
OwogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoInJlc3VsdCIsIHJlc3VsdCk7CgogICAg
cmVzcG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgY2FsbElkKTsKICAgIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50
b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlJ1bnRp
bWVfc2V0UHJvcGVydHlWYWx1ZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0
TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcnVudGltZUFnZW50KQog
ICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJSdW50aW1lIGhhbmRsZXIgaXMgbm90
IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdl
dE9iamVjdCgicGFyYW1zIikpIHsKICAgICAgICBTdHJpbmcgaW5fb2JqZWN0SWQgPSBnZXRTdHJp
bmcocGFyYW1zQ29udGFpbmVyLmdldCgpLCAib2JqZWN0SWQiLCBmYWxzZSwgcHJvdG9jb2xFcnJv
cnMuZ2V0KCkpOwogICAgICAgIFN0cmluZyBpbl9wcm9wZXJ0eU5hbWUgPSBnZXRTdHJpbmcocGFy
YW1zQ29udGFpbmVyLmdldCgpLCAicHJvcGVydHlOYW1lIiwgZmFsc2UsIHByb3RvY29sRXJyb3Jz
LmdldCgpKTsKICAgICAgICBTdHJpbmcgaW5fZXhwcmVzc2lvbiA9IGdldFN0cmluZyhwYXJhbXND
b250YWluZXIuZ2V0KCksICJleHByZXNzaW9uIiwgZmFsc2UsIHByb3RvY29sRXJyb3JzLmdldCgp
KTsKCiAgICAgICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgICAgIG1f
cnVudGltZUFnZW50LT5zZXRQcm9wZXJ0eVZhbHVlKCZlcnJvciwgaW5fb2JqZWN0SWQsIGluX3By
b3BlcnR5TmFtZSwgaW5fZXhwcmVzc2lvbik7CiAgICB9IGVsc2UKICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZygiJ3BhcmFtcycgcHJvcGVydHkgd2l0aCB0eXBlICdvYmplY3QnIHdh
cyBub3QgZm91bmQuIik7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2Vy
IG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKCiAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIEludmFsaWRQYXJh
bXMsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGVycm9y
Lmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIFNlcnZlckVy
cm9yLCBlcnJvcik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoInJlc3VsdCIsIHJlc3VsdCk7CgogICAg
cmVzcG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgY2FsbElkKTsKICAgIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50
b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlJ1bnRp
bWVfcmVsZWFzZU9iamVjdChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVz
c2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcnVudGltZUFnZW50KQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJSdW50aW1lIGhhbmRsZXIgaXMgbm90IGF2
YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9i
amVjdCgicGFyYW1zIikpIHsKICAgICAgICBTdHJpbmcgaW5fb2JqZWN0SWQgPSBnZXRTdHJpbmco
cGFyYW1zQ29udGFpbmVyLmdldCgpLCAib2JqZWN0SWQiLCBmYWxzZSwgcHJvdG9jb2xFcnJvcnMu
Z2V0KCkpOwoKICAgICAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAg
ICAgbV9ydW50aW1lQWdlbnQtPnJlbGVhc2VPYmplY3QoJmVycm9yLCBpbl9vYmplY3RJZCk7CiAg
ICB9IGVsc2UKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiJ3BhcmFtcycgcHJv
cGVydHkgd2l0aCB0eXBlICdvYmplY3QnIHdhcyBub3QgZm91bmQuIik7CgogICAgLy8gdXNlIElu
c3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkK
CiAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9j
b2xFcnJvcihjYWxsSWQsIEludmFsaWRQYXJhbXMsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICBy
ZXR1cm47CiAgICB9CgogICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJv
dG9jb2xFcnJvcihjYWxsSWQsIFNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgcmV0dXJuOwog
ICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmpl
Y3QoInJlc3VsdCIsIHJlc3VsdCk7CgogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoImlk
IiwgY2FsbElkKTsKICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRv
RnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OlJ1bnRpbWVfcmVsZWFzZU9iamVjdEdyb3VwKGxvbmcgY2Fs
bElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OwoKICAgIGlmICghbV9ydW50aW1lQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoIlJ1bnRpbWUgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3Ry
aW5nIGVycm9yOwoKICAgIGlmIChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWlu
ZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKSkgewogICAgICAg
IFN0cmluZyBpbl9vYmplY3RHcm91cCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXIuZ2V0KCks
ICJvYmplY3RHcm91cCIsIGZhbHNlLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CgogICAgICAgIGlm
ICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgICAgICBtX3J1bnRpbWVBZ2VudC0+
cmVsZWFzZU9iamVjdEdyb3VwKCZlcnJvciwgaW5fb2JqZWN0R3JvdXApOwogICAgfSBlbHNlCiAg
ICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIidwYXJhbXMnIHByb3BlcnR5IHdpdGgg
dHlwZSAnb2JqZWN0JyB3YXMgbm90IGZvdW5kLiIpOwoKICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9u
dGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNwZWN0b3IgYXZhaWxhYmlsaXR5CgogICAgaWYgKHBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2Fs
bElkLCBJbnZhbGlkUGFyYW1zLCBwcm90b2NvbEVycm9ycyk7CiAgICAgICAgcmV0dXJuOwogICAg
fQoKICAgIGlmIChlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3Io
Y2FsbElkLCBTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJyZXN1bHQi
LCByZXN1bHQpOwoKICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsIGNhbGxJZCk7
CiAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJl
c3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpDb25zb2xlX2VuYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikK
ewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY29uc29sZUFnZW50KQogICAgICAgIHByb3RvY29s
RXJyb3JzLT5wdXNoU3RyaW5nKCJDb25zb2xlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsK
CiAgICBpbnQgb3V0X2V4cGlyZWRNZXNzYWdlc0NvdW50ID0gMDsKCiAgICBFcnJvclN0cmluZyBl
cnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2NvbnNv
bGVBZ2VudC0+ZW5hYmxlKCZlcnJvciwgJm91dF9leHBpcmVkTWVzc2FnZXNDb3VudCk7CgogICAg
Ly8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFp
bGFiaWxpdHkKCiAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgcmVw
b3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIEludmFsaWRQYXJhbXMsIHByb3RvY29sRXJyb3JzKTsK
ICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAg
cmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIFNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAg
cmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2Fn
ZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgIHJlc3VsdC0+c2V0
TnVtYmVyKCJleHBpcmVkTWVzc2FnZXNDb3VudCIsIG91dF9leHBpcmVkTWVzc2FnZXNDb3VudCk7
CiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgicmVzdWx0IiwgcmVzdWx0KTsKCiAgICBy
ZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCBjYWxsSWQpOwogICAgbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRv
SlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q29uc29s
ZV9kaXNhYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoK
ICAgIGlmICghbV9jb25zb2xlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoIkNvbnNvbGUgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5n
IGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fY29u
c29sZUFnZW50LT5kaXNhYmxlKCZlcnJvcik7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5k
IGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKCiAgICBpZiAocHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQs
IEludmFsaWRQYXJhbXMsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICByZXR1cm47CiAgICB9Cgog
ICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxs
SWQsIFNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoInJlc3VsdCIsIHJl
c3VsdCk7CgogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgY2FsbElkKTsKICAg
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9u
c2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OkNvbnNvbGVfY2xlYXJDb25zb2xlTWVzc2FnZXMobG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2NvbnNvbGVBZ2VudCkKICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiQ29uc29sZSBoYW5kbGVyIGlzIG5vdCBhdmFp
bGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9y
cy0+bGVuZ3RoKCkpCiAgICAgICAgbV9jb25zb2xlQWdlbnQtPmNsZWFyQ29uc29sZU1lc3NhZ2Vz
KCZlcnJvcik7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdl
Ykluc3BlY3RvciBhdmFpbGFiaWxpdHkKCiAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIEludmFsaWRQYXJhbXMsIHBy
b3RvY29sRXJyb3JzKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGVycm9yLmxlbmd0
aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIFNlcnZlckVycm9yLCBl
cnJvcik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
cmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoInJlc3VsdCIsIHJlc3VsdCk7CgogICAgcmVzcG9u
c2VNZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgY2FsbElkKTsKICAgIG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNvbnNvbGVfc2V0
TW9uaXRvcmluZ1hIUkVuYWJsZWQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVz
dE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJv
cnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2NvbnNvbGVBZ2VudCkK
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiQ29uc29sZSBoYW5kbGVyIGlzIG5v
dCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5n
ZXRPYmplY3QoInBhcmFtcyIpKSB7CiAgICAgICAgYm9vbCBpbl9lbmFibGVkID0gZ2V0Qm9vbGVh
bihwYXJhbXNDb250YWluZXIuZ2V0KCksICJlbmFibGVkIiwgZmFsc2UsIHByb3RvY29sRXJyb3Jz
LmdldCgpKTsKCiAgICAgICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAg
ICAgIG1fY29uc29sZUFnZW50LT5zZXRNb25pdG9yaW5nWEhSRW5hYmxlZCgmZXJyb3IsIGluX2Vu
YWJsZWQpOwogICAgfSBlbHNlCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIidw
YXJhbXMnIHByb3BlcnR5IHdpdGggdHlwZSAnb2JqZWN0JyB3YXMgbm90IGZvdW5kLiIpOwoKICAg
IC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNwZWN0b3IgYXZh
aWxhYmlsaXR5CgogICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIHJl
cG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBJbnZhbGlkUGFyYW1zLCBwcm90b2NvbEVycm9ycyk7
CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChlcnJvci5sZW5ndGgoKSkgewogICAgICAg
IHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAg
IHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3Nh
Z2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHJlc3BvbnNlTWVzc2Fn
ZS0+c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1bHQpOwoKICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0
TnVtYmVyKCJpZCIsIGNhbGxJZCk7CiAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2Vu
ZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2
b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDb25zb2xlX2FkZEluc3BlY3RlZE5vZGUo
bG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CgogICAgaWYgKCFtX2NvbnNvbGVBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZygiQ29uc29sZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAg
RXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFt
c0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpKSB7
CiAgICAgICAgaW50IGluX25vZGVJZCA9IGdldEludChwYXJhbXNDb250YWluZXIuZ2V0KCksICJu
b2RlSWQiLCBmYWxzZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwoKICAgICAgICBpZiAoIXByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgbV9jb25zb2xlQWdlbnQtPmFkZEluc3Bl
Y3RlZE5vZGUoJmVycm9yLCBpbl9ub2RlSWQpOwogICAgfSBlbHNlCiAgICAgICAgcHJvdG9jb2xF
cnJvcnMtPnB1c2hTdHJpbmcoIidwYXJhbXMnIHByb3BlcnR5IHdpdGggdHlwZSAnb2JqZWN0JyB3
YXMgbm90IGZvdW5kLiIpOwoKICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtl
ciBvZiBXZWJJbnNwZWN0b3IgYXZhaWxhYmlsaXR5CgogICAgaWYgKHByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBJbnZhbGlkUGFy
YW1zLCBwcm90b2NvbEVycm9ycyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChlcnJv
ci5sZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBTZXJ2ZXJF
cnJvciwgZXJyb3IpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1bHQpOwoKICAg
IHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsIGNhbGxJZCk7CiAgICBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+
dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpOZXR3
b3JrX2VuYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBpZiAoIW1fcmVzb3VyY2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZygiTmV0d29yayBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJp
bmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9y
ZXNvdXJjZUFnZW50LT5lbmFibGUoJmVycm9yKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRl
bmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQoKICAgIGlmIChwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJ
ZCwgSW52YWxpZFBhcmFtcywgcHJvdG9jb2xFcnJvcnMpOwogICAgICAgIHJldHVybjsKICAgIH0K
CiAgICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNh
bGxJZCwgU2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgicmVzdWx0Iiwg
cmVzdWx0KTsKCiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCBjYWxsSWQpOwog
ICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNw
b25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6TmV0d29ya19kaXNhYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9yZXNvdXJjZUFnZW50KQogICAgICAgIHByb3RvY29s
RXJyb3JzLT5wdXNoU3RyaW5nKCJOZXR3b3JrIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsK
CiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgo
KSkKICAgICAgICBtX3Jlc291cmNlQWdlbnQtPmRpc2FibGUoJmVycm9yKTsKCiAgICAvLyB1c2Ug
SW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0
eQoKICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90
b2NvbEVycm9yKGNhbGxJZCwgSW52YWxpZFBhcmFtcywgcHJvdG9jb2xFcnJvcnMpOwogICAgICAg
IHJldHVybjsKICAgIH0KCiAgICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQ
cm90b2NvbEVycm9yKGNhbGxJZCwgU2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICByZXR1cm47
CiAgICB9CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Vs
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9i
amVjdCgicmVzdWx0IiwgcmVzdWx0KTsKCiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigi
aWQiLCBjYWxsSWQpOwogICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29ya19nZXRDYWNoZWRSZXNvdXJjZXMobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
dG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3Jlc291
cmNlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIk5ldHdvcmsgaGFu
ZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG91
dF9mcmFtZVRyZWUgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwoKICAgIEVycm9yU3RyaW5n
IGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fcmVz
b3VyY2VBZ2VudC0+Z2V0Q2FjaGVkUmVzb3VyY2VzKCZlcnJvciwgJm91dF9mcmFtZVRyZWUpOwoK
ICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNwZWN0b3Ig
YXZhaWxhYmlsaXR5CgogICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAg
IHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBJbnZhbGlkUGFyYW1zLCBwcm90b2NvbEVycm9y
cyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChlcnJvci5sZW5ndGgoKSkgewogICAg
ICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAg
ICAgIHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1l
c3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICByZXN1bHQt
PnNldE9iamVjdCgiZnJhbWVUcmVlIiwgb3V0X2ZyYW1lVHJlZSk7CiAgICByZXNwb25zZU1lc3Nh
Z2UtPnNldE9iamVjdCgicmVzdWx0IiwgcmVzdWx0KTsKCiAgICByZXNwb25zZU1lc3NhZ2UtPnNl
dE51bWJlcigiaWQiLCBjYWxsSWQpOwogICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNl
bmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoK
dm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29ya19nZXRSZXNvdXJjZUNvbnRl
bnQobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3Jlc291cmNlQWdlbnQpCiAgICAgICAgcHJvdG9jb2xF
cnJvcnMtPnB1c2hTdHJpbmcoIk5ldHdvcmsgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoK
ICAgIFN0cmluZyBvdXRfY29udGVudCA9ICIiOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAg
IGlmIChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVz
c2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKSkgewogICAgICAgIFN0cmluZyBpbl9mcmFt
ZUlkID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgImZyYW1lSWQiLCBmYWxzZSwg
cHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwogICAgICAgIFN0cmluZyBpbl91cmwgPSBnZXRTdHJpbmco
cGFyYW1zQ29udGFpbmVyLmdldCgpLCAidXJsIiwgZmFsc2UsIHByb3RvY29sRXJyb3JzLmdldCgp
KTsKICAgICAgICBib29sIGluX2Jhc2U2NEVuY29kZSA9IGdldEJvb2xlYW4ocGFyYW1zQ29udGFp
bmVyLmdldCgpLCAiYmFzZTY0RW5jb2RlIiwgdHJ1ZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwoK
ICAgICAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgbV9yZXNv
dXJjZUFnZW50LT5nZXRSZXNvdXJjZUNvbnRlbnQoJmVycm9yLCBpbl9mcmFtZUlkLCBpbl91cmws
ICZpbl9iYXNlNjRFbmNvZGUsICZvdXRfY29udGVudCk7CiAgICB9IGVsc2UKICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZygiJ3BhcmFtcycgcHJvcGVydHkgd2l0aCB0eXBlICdvYmpl
Y3QnIHdhcyBub3QgZm91bmQuIik7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEg
bWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKCiAgICBpZiAocHJvdG9jb2xFcnJv
cnMtPmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIEludmFs
aWRQYXJhbXMsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYg
KGVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIFNl
cnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJjb250ZW50Iiwgb3V0X2NvbnRlbnQp
OwogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoInJlc3VsdCIsIHJlc3VsdCk7CgogICAg
cmVzcG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgY2FsbElkKTsKICAgIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50
b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdv
cmtfc2V0RXh0cmFIZWFkZXJzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RN
ZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3Jz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9yZXNvdXJjZUFnZW50KQog
ICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJOZXR3b3JrIGhhbmRsZXIgaXMgbm90
IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdl
dE9iamVjdCgicGFyYW1zIikpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbl9o
ZWFkZXJzID0gZ2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgImhlYWRlcnMiLCBmYWxz
ZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwoKICAgICAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkKICAgICAgICAgICAgbV9yZXNvdXJjZUFnZW50LT5zZXRFeHRyYUhlYWRlcnMoJmVy
cm9yLCBpbl9oZWFkZXJzKTsKICAgIH0gZWxzZQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKCIncGFyYW1zJyBwcm9wZXJ0eSB3aXRoIHR5cGUgJ29iamVjdCcgd2FzIG5vdCBmb3Vu
ZC4iKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5z
cGVjdG9yIGF2YWlsYWJpbGl0eQoKICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsK
ICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgSW52YWxpZFBhcmFtcywgcHJvdG9j
b2xFcnJvcnMpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoZXJyb3IubGVuZ3RoKCkp
IHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgU2VydmVyRXJyb3IsIGVycm9y
KTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
cG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICByZXNw
b25zZU1lc3NhZ2UtPnNldE9iamVjdCgicmVzdWx0IiwgcmVzdWx0KTsKCiAgICByZXNwb25zZU1l
c3NhZ2UtPnNldE51bWJlcigiaWQiLCBjYWxsSWQpOwogICAgbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RGF0YWJhc2VfZ2V0RGF0
YWJhc2VUYWJsZU5hbWVzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNz
YWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kYXRhYmFzZUFnZW50KQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEYXRhYmFzZSBoYW5kbGVyIGlzIG5vdCBh
dmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBvdXRfdGFibGVOYW1lcyA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBp
ZiAoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3Nh
Z2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIikpIHsKICAgICAgICBpbnQgaW5fZGF0YWJhc2VJ
ZCA9IGdldEludChwYXJhbXNDb250YWluZXIuZ2V0KCksICJkYXRhYmFzZUlkIiwgZmFsc2UsIHBy
b3RvY29sRXJyb3JzLmdldCgpKTsKCiAgICAgICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3Ro
KCkpCiAgICAgICAgICAgIG1fZGF0YWJhc2VBZ2VudC0+Z2V0RGF0YWJhc2VUYWJsZU5hbWVzKCZl
cnJvciwgaW5fZGF0YWJhc2VJZCwgJm91dF90YWJsZU5hbWVzKTsKICAgIH0gZWxzZQogICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCIncGFyYW1zJyBwcm9wZXJ0eSB3aXRoIHR5cGUg
J29iamVjdCcgd2FzIG5vdCBmb3VuZC4iKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQg
YXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQoKICAgIGlmIChwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwg
SW52YWxpZFBhcmFtcywgcHJvdG9jb2xFcnJvcnMpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAg
ICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJ
ZCwgU2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgidGFibGVOYW1lcyIsIG91dF90
YWJsZU5hbWVzKTsKICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1
bHQpOwoKICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsIGNhbGxJZCk7CiAgICBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNl
TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpEYXRhYmFzZV9leGVjdXRlU1FMKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJl
cXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29s
RXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kYXRhYmFzZUFn
ZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEYXRhYmFzZSBoYW5kbGVy
IGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgYm9vbCBvdXRfc3VjY2VzcyA9IGZhbHNlOwogICAg
aW50IG91dF90cmFuc2FjdGlvbklkID0gMDsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBp
ZiAoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3Nh
Z2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIikpIHsKICAgICAgICBpbnQgaW5fZGF0YWJhc2VJ
ZCA9IGdldEludChwYXJhbXNDb250YWluZXIuZ2V0KCksICJkYXRhYmFzZUlkIiwgZmFsc2UsIHBy
b3RvY29sRXJyb3JzLmdldCgpKTsKICAgICAgICBTdHJpbmcgaW5fcXVlcnkgPSBnZXRTdHJpbmco
cGFyYW1zQ29udGFpbmVyLmdldCgpLCAicXVlcnkiLCBmYWxzZSwgcHJvdG9jb2xFcnJvcnMuZ2V0
KCkpOwoKICAgICAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAg
bV9kYXRhYmFzZUFnZW50LT5leGVjdXRlU1FMKCZlcnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVl
cnksICZvdXRfc3VjY2VzcywgJm91dF90cmFuc2FjdGlvbklkKTsKICAgIH0gZWxzZQogICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCIncGFyYW1zJyBwcm9wZXJ0eSB3aXRoIHR5cGUg
J29iamVjdCcgd2FzIG5vdCBmb3VuZC4iKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQg
YXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQoKICAgIGlmIChwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwg
SW52YWxpZFBhcmFtcywgcHJvdG9jb2xFcnJvcnMpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAg
ICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJ
ZCwgU2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKCJzdWNjZXNzIiwgb3V0X3N1
Y2Nlc3MpOwogICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJ0cmFuc2FjdGlvbklkIiwgb3V0X3Ry
YW5zYWN0aW9uSWQpOwogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoInJlc3VsdCIsIHJl
c3VsdCk7CgogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgY2FsbElkKTsKICAg
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9u
c2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OkRPTVN0b3JhZ2VfZ2V0RE9NU3RvcmFnZUVudHJpZXMobG9uZyBjYWxsSWQsIEluc3Bl
Y3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYg
KCFtX2RvbVN0b3JhZ2VBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygi
RE9NU3RvcmFnZSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBvdXRfZW50cmllcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBF
cnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1z
Q29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIikpIHsK
ICAgICAgICBpbnQgaW5fc3RvcmFnZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lci5nZXQoKSwg
InN0b3JhZ2VJZCIsIGZhbHNlLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CgogICAgICAgIGlmICgh
cHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgICAgICBtX2RvbVN0b3JhZ2VBZ2VudC0+
Z2V0RE9NU3RvcmFnZUVudHJpZXMoJmVycm9yLCBpbl9zdG9yYWdlSWQsICZvdXRfZW50cmllcyk7
CiAgICB9IGVsc2UKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiJ3BhcmFtcycg
cHJvcGVydHkgd2l0aCB0eXBlICdvYmplY3QnIHdhcyBub3QgZm91bmQuIik7CgogICAgLy8gdXNl
IEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxp
dHkKCiAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJv
dG9jb2xFcnJvcihjYWxsSWQsIEludmFsaWRQYXJhbXMsIHByb3RvY29sRXJyb3JzKTsKICAgICAg
ICByZXR1cm47CiAgICB9CgogICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0
UHJvdG9jb2xFcnJvcihjYWxsSWQsIFNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgcmV0dXJu
OwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgIHJlc3VsdC0+c2V0QXJyYXko
ImVudHJpZXMiLCBvdXRfZW50cmllcyk7CiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgi
cmVzdWx0IiwgcmVzdWx0KTsKCiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCBj
YWxsSWQpOwogICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6RE9NU3RvcmFnZV9zZXRET01TdG9yYWdlSXRlbShsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBpZiAoIW1fZG9tU3RvcmFnZUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKCJET01TdG9yYWdlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBib29s
IG91dF9zdWNjZXNzID0gZmFsc2U7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpKSB7CiAgICAgICAgaW50IGluX3N0b3JhZ2VJZCA9IGdl
dEludChwYXJhbXNDb250YWluZXIuZ2V0KCksICJzdG9yYWdlSWQiLCBmYWxzZSwgcHJvdG9jb2xF
cnJvcnMuZ2V0KCkpOwogICAgICAgIFN0cmluZyBpbl9rZXkgPSBnZXRTdHJpbmcocGFyYW1zQ29u
dGFpbmVyLmdldCgpLCAia2V5IiwgZmFsc2UsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKICAgICAg
ICBTdHJpbmcgaW5fdmFsdWUgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyLmdldCgpLCAidmFs
dWUiLCBmYWxzZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwoKICAgICAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgbV9kb21TdG9yYWdlQWdlbnQtPnNldERPTVN0
b3JhZ2VJdGVtKCZlcnJvciwgaW5fc3RvcmFnZUlkLCBpbl9rZXksIGluX3ZhbHVlLCAmb3V0X3N1
Y2Nlc3MpOwogICAgfSBlbHNlCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIidw
YXJhbXMnIHByb3BlcnR5IHdpdGggdHlwZSAnb2JqZWN0JyB3YXMgbm90IGZvdW5kLiIpOwoKICAg
IC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNwZWN0b3IgYXZh
aWxhYmlsaXR5CgogICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIHJl
cG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBJbnZhbGlkUGFyYW1zLCBwcm90b2NvbEVycm9ycyk7
CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChlcnJvci5sZW5ndGgoKSkgewogICAgICAg
IHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAg
IHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3Nh
Z2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICByZXN1bHQtPnNl
dEJvb2xlYW4oInN1Y2Nlc3MiLCBvdXRfc3VjY2Vzcyk7CiAgICByZXNwb25zZU1lc3NhZ2UtPnNl
dE9iamVjdCgicmVzdWx0IiwgcmVzdWx0KTsKCiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJl
cigiaWQiLCBjYWxsSWQpOwogICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNz
YWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9NU3RvcmFnZV9yZW1vdmVET01TdG9yYWdlSXRl
bShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewog
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tU3RvcmFnZUFnZW50KQogICAgICAgIHByb3RvY29s
RXJyb3JzLT5wdXNoU3RyaW5nKCJET01TdG9yYWdlIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4i
KTsKCiAgICBib29sIG91dF9zdWNjZXNzID0gZmFsc2U7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7
CgogICAgaWYgKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVl
c3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpKSB7CiAgICAgICAgaW50IGluX3N0
b3JhZ2VJZCA9IGdldEludChwYXJhbXNDb250YWluZXIuZ2V0KCksICJzdG9yYWdlSWQiLCBmYWxz
ZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwogICAgICAgIFN0cmluZyBpbl9rZXkgPSBnZXRTdHJp
bmcocGFyYW1zQ29udGFpbmVyLmdldCgpLCAia2V5IiwgZmFsc2UsIHByb3RvY29sRXJyb3JzLmdl
dCgpKTsKCiAgICAgICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgICAg
IG1fZG9tU3RvcmFnZUFnZW50LT5yZW1vdmVET01TdG9yYWdlSXRlbSgmZXJyb3IsIGluX3N0b3Jh
Z2VJZCwgaW5fa2V5LCAmb3V0X3N1Y2Nlc3MpOwogICAgfSBlbHNlCiAgICAgICAgcHJvdG9jb2xF
cnJvcnMtPnB1c2hTdHJpbmcoIidwYXJhbXMnIHByb3BlcnR5IHdpdGggdHlwZSAnb2JqZWN0JyB3
YXMgbm90IGZvdW5kLiIpOwoKICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtl
ciBvZiBXZWJJbnNwZWN0b3IgYXZhaWxhYmlsaXR5CgogICAgaWYgKHByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBJbnZhbGlkUGFy
YW1zLCBwcm90b2NvbEVycm9ycyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChlcnJv
ci5sZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBTZXJ2ZXJF
cnJvciwgZXJyb3IpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oInN1Y2Nlc3MiLCBvdXRfc3VjY2Vzcyk7CiAg
ICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgicmVzdWx0IiwgcmVzdWx0KTsKCiAgICByZXNw
b25zZU1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCBjYWxsSWQpOwogICAgbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6QXBwbGljYXRp
b25DYWNoZV9nZXRBcHBsaWNhdGlvbkNhY2hlcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fYXBwbGljYXRpb25DYWNoZUFnZW50KQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJBcHBsaWNhdGlvbkNhY2hlIGhhbmRsZXIg
aXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvdXRfYXBw
bGljYXRpb25DYWNoZXMgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwoKICAgIEVycm9yU3Ry
aW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1f
YXBwbGljYXRpb25DYWNoZUFnZW50LT5nZXRBcHBsaWNhdGlvbkNhY2hlcygmZXJyb3IsICZvdXRf
YXBwbGljYXRpb25DYWNoZXMpOwoKICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1h
cmtlciBvZiBXZWJJbnNwZWN0b3IgYXZhaWxhYmlsaXR5CgogICAgaWYgKHByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBJbnZhbGlk
UGFyYW1zLCBwcm90b2NvbEVycm9ycyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChl
cnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBTZXJ2
ZXJFcnJvciwgZXJyb3IpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgICAgICByZXN1bHQtPnNldE9iamVjdCgiYXBwbGljYXRpb25DYWNoZXMiLCBvdXRf
YXBwbGljYXRpb25DYWNoZXMpOwogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoInJlc3Vs
dCIsIHJlc3VsdCk7CgogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgY2FsbElk
KTsKICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQo
cmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OkRPTV9nZXREb2N1bWVudChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xF
cnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb3V0X3Jvb3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpKQogICAgICAgIG1fZG9tQWdlbnQtPmdldERvY3VtZW50KCZlcnJvciwgJm91dF9yb290
KTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVj
dG9yIGF2YWlsYWJpbGl0eQoKICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAg
ICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgSW52YWxpZFBhcmFtcywgcHJvdG9jb2xF
cnJvcnMpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsK
ICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgU2VydmVyRXJyb3IsIGVycm9yKTsK
ICAgICAgICByZXR1cm47CiAgICB9CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9u
c2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgcmVz
dWx0LT5zZXRPYmplY3QoInJvb3QiLCBvdXRfcm9vdCk7CiAgICByZXNwb25zZU1lc3NhZ2UtPnNl
dE9iamVjdCgicmVzdWx0IiwgcmVzdWx0KTsKCiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJl
cigiaWQiLCBjYWxsSWQpOwogICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNz
YWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9NX2dldENoaWxkTm9kZXMobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Cgog
ICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJE
T00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoK
ICAgIGlmIChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0
TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKSkgewogICAgICAgIGludCBpbl9ub2Rl
SWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyLmdldCgpLCAibm9kZUlkIiwgZmFsc2UsIHByb3Rv
Y29sRXJyb3JzLmdldCgpKTsKCiAgICAgICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkp
CiAgICAgICAgICAgIG1fZG9tQWdlbnQtPmdldENoaWxkTm9kZXMoJmVycm9yLCBpbl9ub2RlSWQp
OwogICAgfSBlbHNlCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIidwYXJhbXMn
IHByb3BlcnR5IHdpdGggdHlwZSAnb2JqZWN0JyB3YXMgbm90IGZvdW5kLiIpOwoKICAgIC8vIHVz
ZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNwZWN0b3IgYXZhaWxhYmls
aXR5CgogICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFBy
b3RvY29sRXJyb3IoY2FsbElkLCBJbnZhbGlkUGFyYW1zLCBwcm90b2NvbEVycm9ycyk7CiAgICAg
ICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlcG9y
dFByb3RvY29sRXJyb3IoY2FsbElkLCBTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgIHJldHVy
bjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0
T2JqZWN0KCJyZXN1bHQiLCByZXN1bHQpOwoKICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVy
KCJpZCIsIGNhbGxJZCk7CiAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3Nh
Z2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01fcXVlcnlTZWxlY3Rvcihsb25nIGNhbGxJZCwg
SW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAg
ICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRP
TSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgaW50IG91dF9ub2RlSWQgPSAwOwoK
ICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmIChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMi
KSkgewogICAgICAgIGludCBpbl9ub2RlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyLmdldCgp
LCAibm9kZUlkIiwgZmFsc2UsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKICAgICAgICBTdHJpbmcg
aW5fc2VsZWN0b3JzID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgInNlbGVjdG9y
cyIsIGZhbHNlLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CgogICAgICAgIGlmICghcHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpKQogICAgICAgICAgICBtX2RvbUFnZW50LT5xdWVyeVNlbGVjdG9yKCZl
cnJvciwgaW5fbm9kZUlkLCBpbl9zZWxlY3RvcnMsICZvdXRfbm9kZUlkKTsKICAgIH0gZWxzZQog
ICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCIncGFyYW1zJyBwcm9wZXJ0eSB3aXRo
IHR5cGUgJ29iamVjdCcgd2FzIG5vdCBmb3VuZC4iKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJv
bnRlbmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQoKICAgIGlmIChw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNh
bGxJZCwgSW52YWxpZFBhcmFtcywgcHJvdG9jb2xFcnJvcnMpOwogICAgICAgIHJldHVybjsKICAg
IH0KCiAgICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9y
KGNhbGxJZCwgU2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoIm5vZGVJZCIsIG91
dF9ub2RlSWQpOwogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoInJlc3VsdCIsIHJlc3Vs
dCk7CgogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgY2FsbElkKTsKICAgIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VN
ZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OkRPTV9xdWVyeVNlbGVjdG9yQWxsKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJl
cXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29s
RXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21BZ2VudCkK
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NIGhhbmRsZXIgaXMgbm90IGF2
YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG91dF9ub2RlSWRzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmIChS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9i
amVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKSkgewogICAgICAgIGludCBpbl9ub2RlSWQgPSBnZXRJ
bnQocGFyYW1zQ29udGFpbmVyLmdldCgpLCAibm9kZUlkIiwgZmFsc2UsIHByb3RvY29sRXJyb3Jz
LmdldCgpKTsKICAgICAgICBTdHJpbmcgaW5fc2VsZWN0b3JzID0gZ2V0U3RyaW5nKHBhcmFtc0Nv
bnRhaW5lci5nZXQoKSwgInNlbGVjdG9ycyIsIGZhbHNlLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7
CgogICAgICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgICAgICBtX2Rv
bUFnZW50LT5xdWVyeVNlbGVjdG9yQWxsKCZlcnJvciwgaW5fbm9kZUlkLCBpbl9zZWxlY3RvcnMs
ICZvdXRfbm9kZUlkcyk7CiAgICB9IGVsc2UKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZygiJ3BhcmFtcycgcHJvcGVydHkgd2l0aCB0eXBlICdvYmplY3QnIHdhcyBub3QgZm91bmQu
Iik7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3Bl
Y3RvciBhdmFpbGFiaWxpdHkKCiAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAg
ICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIEludmFsaWRQYXJhbXMsIHByb3RvY29s
RXJyb3JzKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7
CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIFNlcnZlckVycm9yLCBlcnJvcik7
CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Bv
bnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgIHJl
c3VsdC0+c2V0QXJyYXkoIm5vZGVJZHMiLCBvdXRfbm9kZUlkcyk7CiAgICByZXNwb25zZU1lc3Nh
Z2UtPnNldE9iamVjdCgicmVzdWx0IiwgcmVzdWx0KTsKCiAgICByZXNwb25zZU1lc3NhZ2UtPnNl
dE51bWJlcigiaWQiLCBjYWxsSWQpOwogICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNl
bmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoK
dm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9NX3NldE5vZGVOYW1lKGxvbmcgY2Fs
bElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OwoKICAgIGlmICghbV9kb21BZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmlu
ZygiRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBpbnQgb3V0X291dE5vZGVJ
ZCA9IDA7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3Qo
InBhcmFtcyIpKSB7CiAgICAgICAgaW50IGluX25vZGVJZCA9IGdldEludChwYXJhbXNDb250YWlu
ZXIuZ2V0KCksICJub2RlSWQiLCBmYWxzZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwogICAgICAg
IFN0cmluZyBpbl9uYW1lID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgIm5hbWUi
LCBmYWxzZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwoKICAgICAgICBpZiAoIXByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgbV9kb21BZ2VudC0+c2V0Tm9kZU5hbWUoJmVycm9y
LCBpbl9ub2RlSWQsIGluX25hbWUsICZvdXRfb3V0Tm9kZUlkKTsKICAgIH0gZWxzZQogICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCIncGFyYW1zJyBwcm9wZXJ0eSB3aXRoIHR5cGUg
J29iamVjdCcgd2FzIG5vdCBmb3VuZC4iKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQg
YXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQoKICAgIGlmIChwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwg
SW52YWxpZFBhcmFtcywgcHJvdG9jb2xFcnJvcnMpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAg
ICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJ
ZCwgU2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoIm91dE5vZGVJZCIsIG91dF9v
dXROb2RlSWQpOwogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoInJlc3VsdCIsIHJlc3Vs
dCk7CgogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgY2FsbElkKTsKICAgIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VN
ZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OkRPTV9zZXROb2RlVmFsdWUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVz
dE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJv
cnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxh
YmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmIChSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0
KCJwYXJhbXMiKSkgewogICAgICAgIGludCBpbl9ub2RlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFp
bmVyLmdldCgpLCAibm9kZUlkIiwgZmFsc2UsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKICAgICAg
ICBTdHJpbmcgaW5fdmFsdWUgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyLmdldCgpLCAidmFs
dWUiLCBmYWxzZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwoKICAgICAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgbV9kb21BZ2VudC0+c2V0Tm9kZVZhbHVlKCZl
cnJvciwgaW5fbm9kZUlkLCBpbl92YWx1ZSk7CiAgICB9IGVsc2UKICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZygiJ3BhcmFtcycgcHJvcGVydHkgd2l0aCB0eXBlICdvYmplY3QnIHdh
cyBub3QgZm91bmQuIik7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2Vy
IG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKCiAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIEludmFsaWRQYXJh
bXMsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGVycm9y
Lmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIFNlcnZlckVy
cm9yLCBlcnJvcik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoInJlc3VsdCIsIHJlc3VsdCk7CgogICAg
cmVzcG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgY2FsbElkKTsKICAgIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50
b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRPTV9y
ZW1vdmVOb2RlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21BZ2VudCkKICAgICAgICBwcm90b2Nv
bEVycm9ycy0+cHVzaFN0cmluZygiRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAg
ICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFy
YW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIikp
IHsKICAgICAgICBpbnQgaW5fbm9kZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lci5nZXQoKSwg
Im5vZGVJZCIsIGZhbHNlLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CgogICAgICAgIGlmICghcHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgICAgICBtX2RvbUFnZW50LT5yZW1vdmVOb2Rl
KCZlcnJvciwgaW5fbm9kZUlkKTsKICAgIH0gZWxzZQogICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKCIncGFyYW1zJyBwcm9wZXJ0eSB3aXRoIHR5cGUgJ29iamVjdCcgd2FzIG5vdCBm
b3VuZC4iKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIgb2YgV2Vi
SW5zcGVjdG9yIGF2YWlsYWJpbGl0eQoKICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkp
IHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgSW52YWxpZFBhcmFtcywgcHJv
dG9jb2xFcnJvcnMpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoZXJyb3IubGVuZ3Ro
KCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgU2VydmVyRXJyb3IsIGVy
cm9yKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBy
ZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgicmVzdWx0IiwgcmVzdWx0KTsKCiAgICByZXNwb25z
ZU1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCBjYWxsSWQpOwogICAgbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0
cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9NX3NldEF0dHJp
YnV0ZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkK
ewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJv
cnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJy
b3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0Nv
bnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpKSB7CiAg
ICAgICAgaW50IGluX2VsZW1lbnRJZCA9IGdldEludChwYXJhbXNDb250YWluZXIuZ2V0KCksICJl
bGVtZW50SWQiLCBmYWxzZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwogICAgICAgIFN0cmluZyBp
bl9uYW1lID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgIm5hbWUiLCBmYWxzZSwg
cHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwogICAgICAgIFN0cmluZyBpbl92YWx1ZSA9IGdldFN0cmlu
ZyhwYXJhbXNDb250YWluZXIuZ2V0KCksICJ2YWx1ZSIsIGZhbHNlLCBwcm90b2NvbEVycm9ycy5n
ZXQoKSk7CgogICAgICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgICAg
ICBtX2RvbUFnZW50LT5zZXRBdHRyaWJ1dGUoJmVycm9yLCBpbl9lbGVtZW50SWQsIGluX25hbWUs
IGluX3ZhbHVlKTsKICAgIH0gZWxzZQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5n
KCIncGFyYW1zJyBwcm9wZXJ0eSB3aXRoIHR5cGUgJ29iamVjdCcgd2FzIG5vdCBmb3VuZC4iKTsK
CiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9y
IGF2YWlsYWJpbGl0eQoKICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAg
ICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgSW52YWxpZFBhcmFtcywgcHJvdG9jb2xFcnJv
cnMpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsKICAg
ICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgU2VydmVyRXJyb3IsIGVycm9yKTsKICAg
ICAgICByZXR1cm47CiAgICB9CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VN
ZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICByZXNwb25zZU1l
c3NhZ2UtPnNldE9iamVjdCgicmVzdWx0IiwgcmVzdWx0KTsKCiAgICByZXNwb25zZU1lc3NhZ2Ut
PnNldE51bWJlcigiaWQiLCBjYWxsSWQpOwogICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwt
PnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsK
fQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9NX3JlbW92ZUF0dHJpYnV0ZShs
b25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJp
bmcgZXJyb3I7CgogICAgaWYgKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5l
ciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpKSB7CiAgICAgICAg
aW50IGluX2VsZW1lbnRJZCA9IGdldEludChwYXJhbXNDb250YWluZXIuZ2V0KCksICJlbGVtZW50
SWQiLCBmYWxzZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwogICAgICAgIFN0cmluZyBpbl9uYW1l
ID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgIm5hbWUiLCBmYWxzZSwgcHJvdG9j
b2xFcnJvcnMuZ2V0KCkpOwoKICAgICAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkK
ICAgICAgICAgICAgbV9kb21BZ2VudC0+cmVtb3ZlQXR0cmlidXRlKCZlcnJvciwgaW5fZWxlbWVu
dElkLCBpbl9uYW1lKTsKICAgIH0gZWxzZQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3Ry
aW5nKCIncGFyYW1zJyBwcm9wZXJ0eSB3aXRoIHR5cGUgJ29iamVjdCcgd2FzIG5vdCBmb3VuZC4i
KTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVj
dG9yIGF2YWlsYWJpbGl0eQoKICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAg
ICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgSW52YWxpZFBhcmFtcywgcHJvdG9jb2xF
cnJvcnMpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsK
ICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgU2VydmVyRXJyb3IsIGVycm9yKTsK
ICAgICAgICByZXR1cm47CiAgICB9CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9u
c2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICByZXNwb25z
ZU1lc3NhZ2UtPnNldE9iamVjdCgicmVzdWx0IiwgcmVzdWx0KTsKCiAgICByZXNwb25zZU1lc3Nh
Z2UtPnNldE51bWJlcigiaWQiLCBjYWxsSWQpOwogICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9NX2dldEV2ZW50TGlzdGVu
ZXJzRm9yTm9kZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9i
amVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7Cgog
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBvdXRfbGlzdGVuZXJzQXJyYXkgPSBJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKCk7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5n
ZXRPYmplY3QoInBhcmFtcyIpKSB7CiAgICAgICAgaW50IGluX25vZGVJZCA9IGdldEludChwYXJh
bXNDb250YWluZXIuZ2V0KCksICJub2RlSWQiLCBmYWxzZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkp
OwoKICAgICAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgbV9k
b21BZ2VudC0+Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKCZlcnJvciwgaW5fbm9kZUlkLCAmb3V0
X2xpc3RlbmVyc0FycmF5KTsKICAgIH0gZWxzZQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKCIncGFyYW1zJyBwcm9wZXJ0eSB3aXRoIHR5cGUgJ29iamVjdCcgd2FzIG5vdCBmb3Vu
ZC4iKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5z
cGVjdG9yIGF2YWlsYWJpbGl0eQoKICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsK
ICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgSW52YWxpZFBhcmFtcywgcHJvdG9j
b2xFcnJvcnMpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoZXJyb3IubGVuZ3RoKCkp
IHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgU2VydmVyRXJyb3IsIGVycm9y
KTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
cG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAg
cmVzdWx0LT5zZXRBcnJheSgibGlzdGVuZXJzQXJyYXkiLCBvdXRfbGlzdGVuZXJzQXJyYXkpOwog
ICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoInJlc3VsdCIsIHJlc3VsdCk7CgogICAgcmVz
cG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgY2FsbElkKTsKICAgIG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pT
T05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRPTV9jb3B5
Tm9kZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkK
ewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJv
cnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJy
b3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0Nv
bnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpKSB7CiAg
ICAgICAgaW50IGluX25vZGVJZCA9IGdldEludChwYXJhbXNDb250YWluZXIuZ2V0KCksICJub2Rl
SWQiLCBmYWxzZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwoKICAgICAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgbV9kb21BZ2VudC0+Y29weU5vZGUoJmVycm9y
LCBpbl9ub2RlSWQpOwogICAgfSBlbHNlCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoIidwYXJhbXMnIHByb3BlcnR5IHdpdGggdHlwZSAnb2JqZWN0JyB3YXMgbm90IGZvdW5kLiIp
OwoKICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNwZWN0
b3IgYXZhaWxhYmlsaXR5CgogICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAg
ICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBJbnZhbGlkUGFyYW1zLCBwcm90b2NvbEVy
cm9ycyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChlcnJvci5sZW5ndGgoKSkgewog
ICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBTZXJ2ZXJFcnJvciwgZXJyb3IpOwog
ICAgICAgIHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25z
ZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHJlc3BvbnNl
TWVzc2FnZS0+c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1bHQpOwoKICAgIHJlc3BvbnNlTWVzc2Fn
ZS0+c2V0TnVtYmVyKCJpZCIsIGNhbGxJZCk7CiAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
Owp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01fZ2V0T3V0ZXJIVE1MKGxv
bmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOwoKICAgIGlmICghbV9kb21BZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVz
aFN0cmluZygiRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBTdHJpbmcgb3V0
X291dGVySFRNTCA9ICIiOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmIChSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+
Z2V0T2JqZWN0KCJwYXJhbXMiKSkgewogICAgICAgIGludCBpbl9ub2RlSWQgPSBnZXRJbnQocGFy
YW1zQ29udGFpbmVyLmdldCgpLCAibm9kZUlkIiwgZmFsc2UsIHByb3RvY29sRXJyb3JzLmdldCgp
KTsKCiAgICAgICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgICAgIG1f
ZG9tQWdlbnQtPmdldE91dGVySFRNTCgmZXJyb3IsIGluX25vZGVJZCwgJm91dF9vdXRlckhUTUwp
OwogICAgfSBlbHNlCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIidwYXJhbXMn
IHByb3BlcnR5IHdpdGggdHlwZSAnb2JqZWN0JyB3YXMgbm90IGZvdW5kLiIpOwoKICAgIC8vIHVz
ZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNwZWN0b3IgYXZhaWxhYmls
aXR5CgogICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFBy
b3RvY29sRXJyb3IoY2FsbElkLCBJbnZhbGlkUGFyYW1zLCBwcm90b2NvbEVycm9ycyk7CiAgICAg
ICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlcG9y
dFByb3RvY29sRXJyb3IoY2FsbElkLCBTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgIHJldHVy
bjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICByZXN1bHQtPnNldFN0cmlu
Zygib3V0ZXJIVE1MIiwgb3V0X291dGVySFRNTCk7CiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9i
amVjdCgicmVzdWx0IiwgcmVzdWx0KTsKCiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigi
aWQiLCBjYWxsSWQpOwogICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9NX3NldE91dGVySFRNTChsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBp
ZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBo
YW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgaW50IG91dF9vdXROb2RlSWQgPSAwOwoK
ICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmIChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMi
KSkgewogICAgICAgIGludCBpbl9ub2RlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyLmdldCgp
LCAibm9kZUlkIiwgZmFsc2UsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKICAgICAgICBTdHJpbmcg
aW5fb3V0ZXJIVE1MID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgIm91dGVySFRN
TCIsIGZhbHNlLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CgogICAgICAgIGlmICghcHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpKQogICAgICAgICAgICBtX2RvbUFnZW50LT5zZXRPdXRlckhUTUwoJmVy
cm9yLCBpbl9ub2RlSWQsIGluX291dGVySFRNTCwgJm91dF9vdXROb2RlSWQpOwogICAgfSBlbHNl
CiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIidwYXJhbXMnIHByb3BlcnR5IHdp
dGggdHlwZSAnb2JqZWN0JyB3YXMgbm90IGZvdW5kLiIpOwoKICAgIC8vIHVzZSBJbnNwZWN0b3JG
cm9udGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNwZWN0b3IgYXZhaWxhYmlsaXR5CgogICAgaWYg
KHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3Io
Y2FsbElkLCBJbnZhbGlkUGFyYW1zLCBwcm90b2NvbEVycm9ycyk7CiAgICAgICAgcmV0dXJuOwog
ICAgfQoKICAgIGlmIChlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJy
b3IoY2FsbElkLCBTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICByZXN1bHQtPnNldE51bWJlcigib3V0Tm9kZUlk
Iiwgb3V0X291dE5vZGVJZCk7CiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgicmVzdWx0
IiwgcmVzdWx0KTsKCiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCBjYWxsSWQp
OwogICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChy
ZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6RE9NX3BlcmZvcm1TZWFyY2gobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
dG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbUFn
ZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET00gaGFuZGxlciBpcyBu
b3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmIChSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+
Z2V0T2JqZWN0KCJwYXJhbXMiKSkgewogICAgICAgIFN0cmluZyBpbl9xdWVyeSA9IGdldFN0cmlu
ZyhwYXJhbXNDb250YWluZXIuZ2V0KCksICJxdWVyeSIsIGZhbHNlLCBwcm90b2NvbEVycm9ycy5n
ZXQoKSk7CiAgICAgICAgYm9vbCBpbl9ydW5TeW5jaHJvbm91c2x5ID0gZ2V0Qm9vbGVhbihwYXJh
bXNDb250YWluZXIuZ2V0KCksICJydW5TeW5jaHJvbm91c2x5IiwgZmFsc2UsIHByb3RvY29sRXJy
b3JzLmdldCgpKTsKCiAgICAgICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAg
ICAgICAgIG1fZG9tQWdlbnQtPnBlcmZvcm1TZWFyY2goJmVycm9yLCBpbl9xdWVyeSwgaW5fcnVu
U3luY2hyb25vdXNseSk7CiAgICB9IGVsc2UKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZygiJ3BhcmFtcycgcHJvcGVydHkgd2l0aCB0eXBlICdvYmplY3QnIHdhcyBub3QgZm91bmQu
Iik7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3Bl
Y3RvciBhdmFpbGFiaWxpdHkKCiAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAg
ICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIEludmFsaWRQYXJhbXMsIHByb3RvY29s
RXJyb3JzKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7
CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIFNlcnZlckVycm9yLCBlcnJvcik7
CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Bv
bnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcmVzcG9u
c2VNZXNzYWdlLT5zZXRPYmplY3QoInJlc3VsdCIsIHJlc3VsdCk7CgogICAgcmVzcG9uc2VNZXNz
YWdlLT5zZXROdW1iZXIoImlkIiwgY2FsbElkKTsKICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRPTV9jYW5jZWxTZWFyY2go
bG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFt
X2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET00gaGFuZGxl
ciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICgh
cHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tQWdlbnQtPmNhbmNlbFNlYXJj
aCgmZXJyb3IpOwoKICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBX
ZWJJbnNwZWN0b3IgYXZhaWxhYmlsaXR5CgogICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgo
KSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBJbnZhbGlkUGFyYW1zLCBw
cm90b2NvbEVycm9ycyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChlcnJvci5sZW5n
dGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBTZXJ2ZXJFcnJvciwg
ZXJyb3IpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1bHQpOwoKICAgIHJlc3Bv
bnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsIGNhbGxJZCk7CiAgICBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01fcHVzaE5v
ZGVUb0Zyb250ZW5kKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdl
T2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21BZ2VudCkKICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsK
CiAgICBpbnQgb3V0X25vZGVJZCA9IDA7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYg
KFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdl
T2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpKSB7CiAgICAgICAgU3RyaW5nIGluX29iamVjdElk
ID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgIm9iamVjdElkIiwgZmFsc2UsIHBy
b3RvY29sRXJyb3JzLmdldCgpKTsKCiAgICAgICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3Ro
KCkpCiAgICAgICAgICAgIG1fZG9tQWdlbnQtPnB1c2hOb2RlVG9Gcm9udGVuZCgmZXJyb3IsIGlu
X29iamVjdElkLCAmb3V0X25vZGVJZCk7CiAgICB9IGVsc2UKICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZygiJ3BhcmFtcycgcHJvcGVydHkgd2l0aCB0eXBlICdvYmplY3QnIHdhcyBu
b3QgZm91bmQuIik7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9m
IFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKCiAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIEludmFsaWRQYXJhbXMs
IHByb3RvY29sRXJyb3JzKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGVycm9yLmxl
bmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIFNlcnZlckVycm9y
LCBlcnJvcik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJub2RlSWQiLCBvdXRfbm9kZUlkKTsKICAgIHJlc3Bv
bnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1bHQpOwoKICAgIHJlc3BvbnNlTWVz
c2FnZS0+c2V0TnVtYmVyKCJpZCIsIGNhbGxJZCk7CiAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01fc2V0U2VhcmNoaW5n
Rm9yTm9kZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVj
dCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xF
cnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAg
Ym9vbCBvdXRfbmV3U3RhdGUgPSBmYWxzZTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBp
ZiAoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3Nh
Z2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIikpIHsKICAgICAgICBib29sIGluX2VuYWJsZWQg
PSBnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgImVuYWJsZWQiLCBmYWxzZSwgcHJv
dG9jb2xFcnJvcnMuZ2V0KCkpOwoKICAgICAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgo
KSkKICAgICAgICAgICAgbV9kb21BZ2VudC0+c2V0U2VhcmNoaW5nRm9yTm9kZSgmZXJyb3IsIGlu
X2VuYWJsZWQsICZvdXRfbmV3U3RhdGUpOwogICAgfSBlbHNlCiAgICAgICAgcHJvdG9jb2xFcnJv
cnMtPnB1c2hTdHJpbmcoIidwYXJhbXMnIHByb3BlcnR5IHdpdGggdHlwZSAnb2JqZWN0JyB3YXMg
bm90IGZvdW5kLiIpOwoKICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBv
ZiBXZWJJbnNwZWN0b3IgYXZhaWxhYmlsaXR5CgogICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5n
dGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBJbnZhbGlkUGFyYW1z
LCBwcm90b2NvbEVycm9ycyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChlcnJvci5s
ZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBTZXJ2ZXJFcnJv
ciwgZXJyb3IpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oIm5ld1N0YXRlIiwgb3V0X25ld1N0YXRlKTsKICAg
IHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1bHQpOwoKICAgIHJlc3Bv
bnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsIGNhbGxJZCk7CiAgICBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01faGlnaGxp
Z2h0RE9NTm9kZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9i
amVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7Cgog
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIp
KSB7CiAgICAgICAgaW50IGluX25vZGVJZCA9IGdldEludChwYXJhbXNDb250YWluZXIuZ2V0KCks
ICJub2RlSWQiLCBmYWxzZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwoKICAgICAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgbV9kb21BZ2VudC0+aGlnaGxpZ2h0
RE9NTm9kZSgmZXJyb3IsIGluX25vZGVJZCk7CiAgICB9IGVsc2UKICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZygiJ3BhcmFtcycgcHJvcGVydHkgd2l0aCB0eXBlICdvYmplY3QnIHdh
cyBub3QgZm91bmQuIik7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2Vy
IG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKCiAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIEludmFsaWRQYXJh
bXMsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGVycm9y
Lmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIFNlcnZlckVy
cm9yLCBlcnJvcik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoInJlc3VsdCIsIHJlc3VsdCk7CgogICAg
cmVzcG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgY2FsbElkKTsKICAgIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50
b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRPTV9o
aWRlRE9NTm9kZUhpZ2hsaWdodChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKCiAgICBpZiAoIW1fZG9tQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoIkRPTSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJp
bmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9k
b21BZ2VudC0+aGlkZURPTU5vZGVIaWdobGlnaHQoJmVycm9yKTsKCiAgICAvLyB1c2UgSW5zcGVj
dG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQoKICAg
IGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVy
cm9yKGNhbGxJZCwgSW52YWxpZFBhcmFtcywgcHJvdG9jb2xFcnJvcnMpOwogICAgICAgIHJldHVy
bjsKICAgIH0KCiAgICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2Nv
bEVycm9yKGNhbGxJZCwgU2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICByZXR1cm47CiAgICB9
CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgi
cmVzdWx0IiwgcmVzdWx0KTsKCiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCBj
YWxsSWQpOwogICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6RE9NX2hpZ2hsaWdodEZyYW1lKGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICgh
bV9kb21BZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NIGhhbmRs
ZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAo
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VP
YmplY3QtPmdldE9iamVjdCgicGFyYW1zIikpIHsKICAgICAgICBTdHJpbmcgaW5fZnJhbWVJZCA9
IGdldFN0cmluZyhwYXJhbXNDb250YWluZXIuZ2V0KCksICJmcmFtZUlkIiwgZmFsc2UsIHByb3Rv
Y29sRXJyb3JzLmdldCgpKTsKCiAgICAgICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkp
CiAgICAgICAgICAgIG1fZG9tQWdlbnQtPmhpZ2hsaWdodEZyYW1lKCZlcnJvciwgaW5fZnJhbWVJ
ZCk7CiAgICB9IGVsc2UKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiJ3BhcmFt
cycgcHJvcGVydHkgd2l0aCB0eXBlICdvYmplY3QnIHdhcyBub3QgZm91bmQuIik7CgogICAgLy8g
dXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFi
aWxpdHkKCiAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0
UHJvdG9jb2xFcnJvcihjYWxsSWQsIEludmFsaWRQYXJhbXMsIHByb3RvY29sRXJyb3JzKTsKICAg
ICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVw
b3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIFNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgcmV0
dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcmVzcG9uc2VNZXNzYWdlLT5z
ZXRPYmplY3QoInJlc3VsdCIsIHJlc3VsdCk7CgogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXROdW1i
ZXIoImlkIiwgY2FsbElkKTsKICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVz
c2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRPTV9oaWRlRnJhbWVIaWdobGlnaHQobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
dG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbUFn
ZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJET00gaGFuZGxlciBpcyBu
b3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgIG1fZG9tQWdlbnQtPmhpZGVGcmFtZUhpZ2hsaWdo
dCgmZXJyb3IpOwoKICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBX
ZWJJbnNwZWN0b3IgYXZhaWxhYmlsaXR5CgogICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgo
KSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBJbnZhbGlkUGFyYW1zLCBw
cm90b2NvbEVycm9ycyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChlcnJvci5sZW5n
dGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBTZXJ2ZXJFcnJvciwg
ZXJyb3IpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1bHQpOwoKICAgIHJlc3Bv
bnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsIGNhbGxJZCk7CiAgICBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01fcHVzaE5v
ZGVCeVBhdGhUb0Zyb250ZW5kKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RN
ZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3Jz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kb21BZ2VudCkKICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRE9NIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJs
ZS4iKTsKCiAgICBpbnQgb3V0X25vZGVJZCA9IDA7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7Cgog
ICAgaWYgKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RN
ZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpKSB7CiAgICAgICAgU3RyaW5nIGluX3Bh
dGggPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyLmdldCgpLCAicGF0aCIsIGZhbHNlLCBwcm90
b2NvbEVycm9ycy5nZXQoKSk7CgogICAgICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KQogICAgICAgICAgICBtX2RvbUFnZW50LT5wdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQoJmVycm9y
LCBpbl9wYXRoLCAmb3V0X25vZGVJZCk7CiAgICB9IGVsc2UKICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZygiJ3BhcmFtcycgcHJvcGVydHkgd2l0aCB0eXBlICdvYmplY3QnIHdhcyBu
b3QgZm91bmQuIik7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9m
IFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKCiAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIEludmFsaWRQYXJhbXMs
IHByb3RvY29sRXJyb3JzKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGVycm9yLmxl
bmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIFNlcnZlckVycm9y
LCBlcnJvcik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJub2RlSWQiLCBvdXRfbm9kZUlkKTsKICAgIHJlc3Bv
bnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1bHQpOwoKICAgIHJlc3BvbnNlTWVz
c2FnZS0+c2V0TnVtYmVyKCJpZCIsIGNhbGxJZCk7CiAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01fcmVzb2x2ZU5vZGUo
bG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RvbUFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKCJET00gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG91dF9vYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwoK
ICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmIChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMi
KSkgewogICAgICAgIGludCBpbl9ub2RlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyLmdldCgp
LCAibm9kZUlkIiwgZmFsc2UsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKCiAgICAgICAgaWYgKCFw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgICAgIG1fZG9tQWdlbnQtPnJlc29sdmVO
b2RlKCZlcnJvciwgaW5fbm9kZUlkLCAmb3V0X29iamVjdCk7CiAgICB9IGVsc2UKICAgICAgICBw
cm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiJ3BhcmFtcycgcHJvcGVydHkgd2l0aCB0eXBlICdv
YmplY3QnIHdhcyBub3QgZm91bmQuIik7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFz
IGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKCiAgICBpZiAocHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIElu
dmFsaWRQYXJhbXMsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAg
aWYgKGVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQs
IFNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJvYmplY3QiLCBvdXRfb2JqZWN0
KTsKICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1bHQpOwoKICAg
IHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsIGNhbGxJZCk7CiAgICBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+
dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDU1Nf
Z2V0U3R5bGVzRm9yTm9kZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVz
c2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY3NzQWdlbnQpCiAgICAgICAg
cHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkNTUyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUu
Iik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb3V0X3N0eWxlcyA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5n
ZXRPYmplY3QoInBhcmFtcyIpKSB7CiAgICAgICAgaW50IGluX25vZGVJZCA9IGdldEludChwYXJh
bXNDb250YWluZXIuZ2V0KCksICJub2RlSWQiLCBmYWxzZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkp
OwoKICAgICAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgbV9j
c3NBZ2VudC0+Z2V0U3R5bGVzRm9yTm9kZSgmZXJyb3IsIGluX25vZGVJZCwgJm91dF9zdHlsZXMp
OwogICAgfSBlbHNlCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIidwYXJhbXMn
IHByb3BlcnR5IHdpdGggdHlwZSAnb2JqZWN0JyB3YXMgbm90IGZvdW5kLiIpOwoKICAgIC8vIHVz
ZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNwZWN0b3IgYXZhaWxhYmls
aXR5CgogICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFBy
b3RvY29sRXJyb3IoY2FsbElkLCBJbnZhbGlkUGFyYW1zLCBwcm90b2NvbEVycm9ycyk7CiAgICAg
ICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlcG9y
dFByb3RvY29sRXJyb3IoY2FsbElkLCBTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgIHJldHVy
bjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICByZXN1bHQtPnNldE9iamVj
dCgic3R5bGVzIiwgb3V0X3N0eWxlcyk7CiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgi
cmVzdWx0IiwgcmVzdWx0KTsKCiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCBj
YWxsSWQpOwogICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Q1NTX2dldENvbXB1dGVkU3R5bGVGb3JOb2RlKGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoK
ICAgIGlmICghbV9jc3NBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygi
Q1NTIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBvdXRfc3R5bGUgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwoKICAgIEVycm9yU3Ry
aW5nIGVycm9yOwoKICAgIGlmIChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWlu
ZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKSkgewogICAgICAg
IGludCBpbl9ub2RlSWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyLmdldCgpLCAibm9kZUlkIiwg
ZmFsc2UsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKCiAgICAgICAgaWYgKCFwcm90b2NvbEVycm9y
cy0+bGVuZ3RoKCkpCiAgICAgICAgICAgIG1fY3NzQWdlbnQtPmdldENvbXB1dGVkU3R5bGVGb3JO
b2RlKCZlcnJvciwgaW5fbm9kZUlkLCAmb3V0X3N0eWxlKTsKICAgIH0gZWxzZQogICAgICAgIHBy
b3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCIncGFyYW1zJyBwcm9wZXJ0eSB3aXRoIHR5cGUgJ29i
amVjdCcgd2FzIG5vdCBmb3VuZC4iKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMg
YSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQoKICAgIGlmIChwcm90b2NvbEVy
cm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgSW52
YWxpZFBhcmFtcywgcHJvdG9jb2xFcnJvcnMpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBp
ZiAoZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwg
U2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInN0eWxlIiwgb3V0X3N0eWxlKTsK
ICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1bHQpOwoKICAgIHJl
c3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsIGNhbGxJZCk7CiAgICBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDU1NfZ2V0
SW5saW5lU3R5bGVGb3JOb2RlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RN
ZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3Jz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9jc3NBZ2VudCkKICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiQ1NTIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJs
ZS4iKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvdXRfc3R5bGUgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmIChSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+
Z2V0T2JqZWN0KCJwYXJhbXMiKSkgewogICAgICAgIGludCBpbl9ub2RlSWQgPSBnZXRJbnQocGFy
YW1zQ29udGFpbmVyLmdldCgpLCAibm9kZUlkIiwgZmFsc2UsIHByb3RvY29sRXJyb3JzLmdldCgp
KTsKCiAgICAgICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgICAgIG1f
Y3NzQWdlbnQtPmdldElubGluZVN0eWxlRm9yTm9kZSgmZXJyb3IsIGluX25vZGVJZCwgJm91dF9z
dHlsZSk7CiAgICB9IGVsc2UKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiJ3Bh
cmFtcycgcHJvcGVydHkgd2l0aCB0eXBlICdvYmplY3QnIHdhcyBub3QgZm91bmQuIik7CgogICAg
Ly8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFp
bGFiaWxpdHkKCiAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgcmVw
b3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIEludmFsaWRQYXJhbXMsIHByb3RvY29sRXJyb3JzKTsK
ICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAg
cmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIFNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAg
cmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2Fn
ZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgIHJlc3VsdC0+c2V0
T2JqZWN0KCJzdHlsZSIsIG91dF9zdHlsZSk7CiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVj
dCgicmVzdWx0IiwgcmVzdWx0KTsKCiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigiaWQi
LCBjYWxsSWQpOwogICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9G
cm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q1NTX2dldEFsbFN0eWxlU2hlZXRzKGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJy
b3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9jc3NBZ2VudCkKICAg
ICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiQ1NTIGhhbmRsZXIgaXMgbm90IGF2YWls
YWJsZS4iKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG91dF9zdHlsZVNoZWV0SW5mb3Mg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAg
aWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9jc3NBZ2VudC0+Z2V0QWxs
U3R5bGVTaGVldHMoJmVycm9yLCAmb3V0X3N0eWxlU2hlZXRJbmZvcyk7CgogICAgLy8gdXNlIElu
c3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkK
CiAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9j
b2xFcnJvcihjYWxsSWQsIEludmFsaWRQYXJhbXMsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICBy
ZXR1cm47CiAgICB9CgogICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJv
dG9jb2xFcnJvcihjYWxsSWQsIFNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgcmV0dXJuOwog
ICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoInN0
eWxlU2hlZXRJbmZvcyIsIG91dF9zdHlsZVNoZWV0SW5mb3MpOwogICAgcmVzcG9uc2VNZXNzYWdl
LT5zZXRPYmplY3QoInJlc3VsdCIsIHJlc3VsdCk7CgogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRO
dW1iZXIoImlkIiwgY2FsbElkKTsKICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5k
TWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZv
aWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNTU19nZXRTdHlsZVNoZWV0KGxvbmcgY2Fs
bElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OwoKICAgIGlmICghbV9jc3NBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmlu
ZygiQ1NTIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBvdXRfc3R5bGVTaGVldCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CgogICAg
RXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFt
c0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpKSB7
CiAgICAgICAgU3RyaW5nIGluX3N0eWxlU2hlZXRJZCA9IGdldFN0cmluZyhwYXJhbXNDb250YWlu
ZXIuZ2V0KCksICJzdHlsZVNoZWV0SWQiLCBmYWxzZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwoK
ICAgICAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgbV9jc3NB
Z2VudC0+Z2V0U3R5bGVTaGVldCgmZXJyb3IsIGluX3N0eWxlU2hlZXRJZCwgJm91dF9zdHlsZVNo
ZWV0KTsKICAgIH0gZWxzZQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCIncGFy
YW1zJyBwcm9wZXJ0eSB3aXRoIHR5cGUgJ29iamVjdCcgd2FzIG5vdCBmb3VuZC4iKTsKCiAgICAv
LyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWls
YWJpbGl0eQoKICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICByZXBv
cnRQcm90b2NvbEVycm9yKGNhbGxJZCwgSW52YWxpZFBhcmFtcywgcHJvdG9jb2xFcnJvcnMpOwog
ICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICBy
ZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgU2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICBy
ZXR1cm47CiAgICB9CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdl
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgcmVzdWx0LT5zZXRP
YmplY3QoInN0eWxlU2hlZXQiLCBvdXRfc3R5bGVTaGVldCk7CiAgICByZXNwb25zZU1lc3NhZ2Ut
PnNldE9iamVjdCgicmVzdWx0IiwgcmVzdWx0KTsKCiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51
bWJlcigiaWQiLCBjYWxsSWQpOwogICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q1NTX2dldFN0eWxlU2hlZXRUZXh0KGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0
ZSgpOwoKICAgIGlmICghbV9jc3NBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZygiQ1NTIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBTdHJpbmcgb3V0X3Vy
bCA9ICIiOwogICAgU3RyaW5nIG91dF90ZXh0ID0gIiI7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7
CgogICAgaWYgKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVl
c3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpKSB7CiAgICAgICAgU3RyaW5nIGlu
X3N0eWxlU2hlZXRJZCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXIuZ2V0KCksICJzdHlsZVNo
ZWV0SWQiLCBmYWxzZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwoKICAgICAgICBpZiAoIXByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgbV9jc3NBZ2VudC0+Z2V0U3R5bGVTaGVl
dFRleHQoJmVycm9yLCBpbl9zdHlsZVNoZWV0SWQsICZvdXRfdXJsLCAmb3V0X3RleHQpOwogICAg
fSBlbHNlCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIidwYXJhbXMnIHByb3Bl
cnR5IHdpdGggdHlwZSAnb2JqZWN0JyB3YXMgbm90IGZvdW5kLiIpOwoKICAgIC8vIHVzZSBJbnNw
ZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNwZWN0b3IgYXZhaWxhYmlsaXR5Cgog
ICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29s
RXJyb3IoY2FsbElkLCBJbnZhbGlkUGFyYW1zLCBwcm90b2NvbEVycm9ycyk7CiAgICAgICAgcmV0
dXJuOwogICAgfQoKICAgIGlmIChlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3Rv
Y29sRXJyb3IoY2FsbElkLCBTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgIHJldHVybjsKICAg
IH0KCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICByZXN1bHQtPnNldFN0cmluZygidXJs
Iiwgb3V0X3VybCk7CiAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInRleHQiLCBvdXRfdGV4dCk7
CiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgicmVzdWx0IiwgcmVzdWx0KTsKCiAgICBy
ZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCBjYWxsSWQpOwogICAgbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRv
SlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q1NTX3Nl
dFN0eWxlU2hlZXRUZXh0KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNz
YWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9jc3NBZ2VudCkKICAgICAgICBw
cm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiQ1NTIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4i
KTsKCiAgICBib29sIG91dF9zdWNjZXNzID0gZmFsc2U7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7
CgogICAgaWYgKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVl
c3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpKSB7CiAgICAgICAgU3RyaW5nIGlu
X3N0eWxlU2hlZXRJZCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXIuZ2V0KCksICJzdHlsZVNo
ZWV0SWQiLCBmYWxzZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwogICAgICAgIFN0cmluZyBpbl90
ZXh0ID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgInRleHQiLCBmYWxzZSwgcHJv
dG9jb2xFcnJvcnMuZ2V0KCkpOwoKICAgICAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgo
KSkKICAgICAgICAgICAgbV9jc3NBZ2VudC0+c2V0U3R5bGVTaGVldFRleHQoJmVycm9yLCBpbl9z
dHlsZVNoZWV0SWQsIGluX3RleHQsICZvdXRfc3VjY2Vzcyk7CiAgICB9IGVsc2UKICAgICAgICBw
cm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiJ3BhcmFtcycgcHJvcGVydHkgd2l0aCB0eXBlICdv
YmplY3QnIHdhcyBub3QgZm91bmQuIik7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFz
IGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKCiAgICBpZiAocHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIElu
dmFsaWRQYXJhbXMsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAg
aWYgKGVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQs
IFNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgICAgIHJlc3VsdC0+c2V0Qm9vbGVhbigic3VjY2VzcyIsIG91dF9zdWNj
ZXNzKTsKICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1bHQpOwoK
ICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsIGNhbGxJZCk7CiAgICBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpD
U1Nfc2V0UHJvcGVydHlUZXh0KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RN
ZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3Jz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9jc3NBZ2VudCkKICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiQ1NTIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJs
ZS4iKTsKCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvdXRfc3R5bGUgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmIChSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+
Z2V0T2JqZWN0KCJwYXJhbXMiKSkgewogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGlu
X3N0eWxlSWQgPSBnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyLmdldCgpLCAic3R5bGVJZCIsIGZh
bHNlLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CiAgICAgICAgaW50IGluX3Byb3BlcnR5SW5kZXgg
PSBnZXRJbnQocGFyYW1zQ29udGFpbmVyLmdldCgpLCAicHJvcGVydHlJbmRleCIsIGZhbHNlLCBw
cm90b2NvbEVycm9ycy5nZXQoKSk7CiAgICAgICAgU3RyaW5nIGluX3RleHQgPSBnZXRTdHJpbmco
cGFyYW1zQ29udGFpbmVyLmdldCgpLCAidGV4dCIsIGZhbHNlLCBwcm90b2NvbEVycm9ycy5nZXQo
KSk7CiAgICAgICAgYm9vbCBpbl9vdmVyd3JpdGUgPSBnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5l
ci5nZXQoKSwgIm92ZXJ3cml0ZSIsIGZhbHNlLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CgogICAg
ICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgICAgICBtX2Nzc0FnZW50
LT5zZXRQcm9wZXJ0eVRleHQoJmVycm9yLCBpbl9zdHlsZUlkLCBpbl9wcm9wZXJ0eUluZGV4LCBp
bl90ZXh0LCBpbl9vdmVyd3JpdGUsICZvdXRfc3R5bGUpOwogICAgfSBlbHNlCiAgICAgICAgcHJv
dG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIidwYXJhbXMnIHByb3BlcnR5IHdpdGggdHlwZSAnb2Jq
ZWN0JyB3YXMgbm90IGZvdW5kLiIpOwoKICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBh
IG1hcmtlciBvZiBXZWJJbnNwZWN0b3IgYXZhaWxhYmlsaXR5CgogICAgaWYgKHByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBJbnZh
bGlkUGFyYW1zLCBwcm90b2NvbEVycm9ycyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlm
IChlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBT
ZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgICAgICByZXN1bHQtPnNldE9iamVjdCgic3R5bGUiLCBvdXRfc3R5bGUpOwog
ICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoInJlc3VsdCIsIHJlc3VsdCk7CgogICAgcmVz
cG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgY2FsbElkKTsKICAgIG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pT
T05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNTU190b2dn
bGVQcm9wZXJ0eShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9i
amVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fY3NzQWdlbnQpCiAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoIkNTUyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb3V0X3N0eWxlID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVj
dCgicGFyYW1zIikpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbl9zdHlsZUlk
ID0gZ2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgInN0eWxlSWQiLCBmYWxzZSwgcHJv
dG9jb2xFcnJvcnMuZ2V0KCkpOwogICAgICAgIGludCBpbl9wcm9wZXJ0eUluZGV4ID0gZ2V0SW50
KHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgInByb3BlcnR5SW5kZXgiLCBmYWxzZSwgcHJvdG9jb2xF
cnJvcnMuZ2V0KCkpOwogICAgICAgIGJvb2wgaW5fZGlzYWJsZSA9IGdldEJvb2xlYW4ocGFyYW1z
Q29udGFpbmVyLmdldCgpLCAiZGlzYWJsZSIsIGZhbHNlLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7
CgogICAgICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgICAgICBtX2Nz
c0FnZW50LT50b2dnbGVQcm9wZXJ0eSgmZXJyb3IsIGluX3N0eWxlSWQsIGluX3Byb3BlcnR5SW5k
ZXgsIGluX2Rpc2FibGUsICZvdXRfc3R5bGUpOwogICAgfSBlbHNlCiAgICAgICAgcHJvdG9jb2xF
cnJvcnMtPnB1c2hTdHJpbmcoIidwYXJhbXMnIHByb3BlcnR5IHdpdGggdHlwZSAnb2JqZWN0JyB3
YXMgbm90IGZvdW5kLiIpOwoKICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtl
ciBvZiBXZWJJbnNwZWN0b3IgYXZhaWxhYmlsaXR5CgogICAgaWYgKHByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBJbnZhbGlkUGFy
YW1zLCBwcm90b2NvbEVycm9ycyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChlcnJv
ci5sZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBTZXJ2ZXJF
cnJvciwgZXJyb3IpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgICAgICByZXN1bHQtPnNldE9iamVjdCgic3R5bGUiLCBvdXRfc3R5bGUpOwogICAgcmVz
cG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoInJlc3VsdCIsIHJlc3VsdCk7CgogICAgcmVzcG9uc2VN
ZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgY2FsbElkKTsKICAgIG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJp
bmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNTU19zZXRSdWxlU2Vs
ZWN0b3IobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3Qp
CnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2Nzc0FnZW50KQogICAgICAgIHByb3RvY29sRXJy
b3JzLT5wdXNoU3RyaW5nKCJDU1MgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG91dF9ydWxlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFy
YW1zIikpIHsKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbl9ydWxlSWQgPSBnZXRP
YmplY3QocGFyYW1zQ29udGFpbmVyLmdldCgpLCAicnVsZUlkIiwgZmFsc2UsIHByb3RvY29sRXJy
b3JzLmdldCgpKTsKICAgICAgICBTdHJpbmcgaW5fc2VsZWN0b3IgPSBnZXRTdHJpbmcocGFyYW1z
Q29udGFpbmVyLmdldCgpLCAic2VsZWN0b3IiLCBmYWxzZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkp
OwoKICAgICAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgbV9j
c3NBZ2VudC0+c2V0UnVsZVNlbGVjdG9yKCZlcnJvciwgaW5fcnVsZUlkLCBpbl9zZWxlY3Rvciwg
Jm91dF9ydWxlKTsKICAgIH0gZWxzZQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5n
KCIncGFyYW1zJyBwcm9wZXJ0eSB3aXRoIHR5cGUgJ29iamVjdCcgd2FzIG5vdCBmb3VuZC4iKTsK
CiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9y
IGF2YWlsYWJpbGl0eQoKICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAg
ICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgSW52YWxpZFBhcmFtcywgcHJvdG9jb2xFcnJv
cnMpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsKICAg
ICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgU2VydmVyRXJyb3IsIGVycm9yKTsKICAg
ICAgICByZXR1cm47CiAgICB9CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VN
ZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgcmVzdWx0
LT5zZXRPYmplY3QoInJ1bGUiLCBvdXRfcnVsZSk7CiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9i
amVjdCgicmVzdWx0IiwgcmVzdWx0KTsKCiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigi
aWQiLCBjYWxsSWQpOwogICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q1NTX2FkZFJ1bGUobG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFt
X2Nzc0FnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJDU1MgaGFuZGxl
ciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG91dF9y
dWxlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsK
CiAgICBpZiAoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVz
dE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIikpIHsKICAgICAgICBpbnQgaW5fY29u
dGV4dE5vZGVJZCA9IGdldEludChwYXJhbXNDb250YWluZXIuZ2V0KCksICJjb250ZXh0Tm9kZUlk
IiwgZmFsc2UsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKICAgICAgICBTdHJpbmcgaW5fc2VsZWN0
b3IgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyLmdldCgpLCAic2VsZWN0b3IiLCBmYWxzZSwg
cHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwoKICAgICAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5n
dGgoKSkKICAgICAgICAgICAgbV9jc3NBZ2VudC0+YWRkUnVsZSgmZXJyb3IsIGluX2NvbnRleHRO
b2RlSWQsIGluX3NlbGVjdG9yLCAmb3V0X3J1bGUpOwogICAgfSBlbHNlCiAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoIidwYXJhbXMnIHByb3BlcnR5IHdpdGggdHlwZSAnb2JqZWN0
JyB3YXMgbm90IGZvdW5kLiIpOwoKICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1h
cmtlciBvZiBXZWJJbnNwZWN0b3IgYXZhaWxhYmlsaXR5CgogICAgaWYgKHByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBJbnZhbGlk
UGFyYW1zLCBwcm90b2NvbEVycm9ycyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChl
cnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBTZXJ2
ZXJFcnJvciwgZXJyb3IpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKICAgICAgICByZXN1bHQtPnNldE9iamVjdCgicnVsZSIsIG91dF9ydWxlKTsKICAgIHJl
c3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1bHQpOwoKICAgIHJlc3BvbnNl
TWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsIGNhbGxJZCk7CiAgICBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3Ry
aW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDU1NfZ2V0U3VwcG9y
dGVkQ1NTUHJvcGVydGllcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKCiAgICBpZiAoIW1fY3NzQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoIkNTUyBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBvdXRfY3NzUHJvcGVydGllcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgo
KSkKICAgICAgICBtX2Nzc0FnZW50LT5nZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKCZlcnJvciwg
Jm91dF9jc3NQcm9wZXJ0aWVzKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBt
YXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQoKICAgIGlmIChwcm90b2NvbEVycm9y
cy0+bGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgSW52YWxp
ZFBhcmFtcywgcHJvdG9jb2xFcnJvcnMpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAo
ZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgU2Vy
dmVyRXJyb3IsIGVycm9yKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiY3NzUHJvcGVydGllcyIsIG91dF9jc3NQ
cm9wZXJ0aWVzKTsKICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1
bHQpOwoKICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsIGNhbGxJZCk7CiAgICBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNl
TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpUaW1lbGluZV9zdGFydChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KikKewogICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKCiAgICBpZiAoIW1fdGltZWxpbmVBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZygiVGltZWxpbmUgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAg
IEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQog
ICAgICAgIG1fdGltZWxpbmVBZ2VudC0+c3RhcnQoJmVycm9yKTsKCiAgICAvLyB1c2UgSW5zcGVj
dG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQoKICAg
IGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVy
cm9yKGNhbGxJZCwgSW52YWxpZFBhcmFtcywgcHJvdG9jb2xFcnJvcnMpOwogICAgICAgIHJldHVy
bjsKICAgIH0KCiAgICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2Nv
bEVycm9yKGNhbGxJZCwgU2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICByZXR1cm47CiAgICB9
CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgi
cmVzdWx0IiwgcmVzdWx0KTsKCiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCBj
YWxsSWQpOwogICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6VGltZWxpbmVfc3RvcChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fdGltZWxpbmVBZ2VudCkKICAgICAgICBw
cm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiVGltZWxpbmUgaGFuZGxlciBpcyBub3QgYXZhaWxh
YmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKQogICAgICAgIG1fdGltZWxpbmVBZ2VudC0+c3RvcCgmZXJyb3IpOwoKICAgIC8v
IHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNwZWN0b3IgYXZhaWxh
YmlsaXR5CgogICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIHJlcG9y
dFByb3RvY29sRXJyb3IoY2FsbElkLCBJbnZhbGlkUGFyYW1zLCBwcm90b2NvbEVycm9ycyk7CiAg
ICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJl
cG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgIHJl
dHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2Ug
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHJlc3BvbnNlTWVzc2FnZS0+
c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1bHQpOwoKICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVt
YmVyKCJpZCIsIGNhbGxJZCk7CiAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1l
c3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lk
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpEZWJ1Z2dlcl9lbmFibGUobG9uZyBjYWxsSWQs
IEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RlYnVnZ2VyQWdl
bnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRlYnVnZ2VyIGhhbmRsZXIg
aXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPmVuYWJsZSgm
ZXJyb3IpOwoKICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJ
bnNwZWN0b3IgYXZhaWxhYmlsaXR5CgogICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkg
ewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBJbnZhbGlkUGFyYW1zLCBwcm90
b2NvbEVycm9ycyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChlcnJvci5sZW5ndGgo
KSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBTZXJ2ZXJFcnJvciwgZXJy
b3IpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHJl
c3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1bHQpOwoKICAgIHJlc3BvbnNl
TWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsIGNhbGxJZCk7CiAgICBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3Ry
aW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpEZWJ1Z2dlcl9kaXNh
YmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlm
ICghbV9kZWJ1Z2dlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJE
ZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJy
b3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kZWJ1Z2dl
ckFnZW50LT5kaXNhYmxlKCZlcnJvcik7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFz
IGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKCiAgICBpZiAocHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIElu
dmFsaWRQYXJhbXMsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAg
aWYgKGVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQs
IFNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoInJlc3VsdCIsIHJlc3Vs
dCk7CgogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgY2FsbElkKTsKICAgIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VN
ZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OkRlYnVnZ2VyX3NldEJyZWFrcG9pbnRzQWN0aXZlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JP
YmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9k
ZWJ1Z2dlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEZWJ1Z2dl
ciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7Cgog
ICAgaWYgKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RN
ZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpKSB7CiAgICAgICAgYm9vbCBpbl9hY3Rp
dmUgPSBnZXRCb29sZWFuKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgImFjdGl2ZSIsIGZhbHNlLCBw
cm90b2NvbEVycm9ycy5nZXQoKSk7CgogICAgICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpKQogICAgICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPnNldEJyZWFrcG9pbnRzQWN0aXZlKCZl
cnJvciwgaW5fYWN0aXZlKTsKICAgIH0gZWxzZQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKCIncGFyYW1zJyBwcm9wZXJ0eSB3aXRoIHR5cGUgJ29iamVjdCcgd2FzIG5vdCBmb3Vu
ZC4iKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5z
cGVjdG9yIGF2YWlsYWJpbGl0eQoKICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsK
ICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgSW52YWxpZFBhcmFtcywgcHJvdG9j
b2xFcnJvcnMpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoZXJyb3IubGVuZ3RoKCkp
IHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgU2VydmVyRXJyb3IsIGVycm9y
KTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
cG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICByZXNw
b25zZU1lc3NhZ2UtPnNldE9iamVjdCgicmVzdWx0IiwgcmVzdWx0KTsKCiAgICByZXNwb25zZU1l
c3NhZ2UtPnNldE51bWJlcigiaWQiLCBjYWxsSWQpOwogICAgbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RGVidWdnZXJfc2V0QnJl
YWtwb2ludEJ5VXJsKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdl
T2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFnZW50KQogICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBhdmFp
bGFibGUuIik7CgogICAgU3RyaW5nIG91dF9icmVha3BvaW50SWQgPSAiIjsKICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gb3V0X2xvY2F0aW9ucyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1z
IikpIHsKICAgICAgICBTdHJpbmcgaW5fdXJsID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5n
ZXQoKSwgInVybCIsIGZhbHNlLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CiAgICAgICAgaW50IGlu
X2xpbmVOdW1iZXIgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyLmdldCgpLCAibGluZU51bWJlciIs
IGZhbHNlLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CiAgICAgICAgaW50IGluX2NvbHVtbk51bWJl
ciA9IGdldEludChwYXJhbXNDb250YWluZXIuZ2V0KCksICJjb2x1bW5OdW1iZXIiLCB0cnVlLCBw
cm90b2NvbEVycm9ycy5nZXQoKSk7CiAgICAgICAgU3RyaW5nIGluX2NvbmRpdGlvbiA9IGdldFN0
cmluZyhwYXJhbXNDb250YWluZXIuZ2V0KCksICJjb25kaXRpb24iLCB0cnVlLCBwcm90b2NvbEVy
cm9ycy5nZXQoKSk7CiAgICAgICAgYm9vbCBpbl9lbmFibGVkID0gZ2V0Qm9vbGVhbihwYXJhbXND
b250YWluZXIuZ2V0KCksICJlbmFibGVkIiwgdHJ1ZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwoK
ICAgICAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgbV9kZWJ1
Z2dlckFnZW50LT5zZXRCcmVha3BvaW50QnlVcmwoJmVycm9yLCBpbl91cmwsIGluX2xpbmVOdW1i
ZXIsICZpbl9jb2x1bW5OdW1iZXIsICZpbl9jb25kaXRpb24sICZpbl9lbmFibGVkLCAmb3V0X2Jy
ZWFrcG9pbnRJZCwgJm91dF9sb2NhdGlvbnMpOwogICAgfSBlbHNlCiAgICAgICAgcHJvdG9jb2xF
cnJvcnMtPnB1c2hTdHJpbmcoIidwYXJhbXMnIHByb3BlcnR5IHdpdGggdHlwZSAnb2JqZWN0JyB3
YXMgbm90IGZvdW5kLiIpOwoKICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtl
ciBvZiBXZWJJbnNwZWN0b3IgYXZhaWxhYmlsaXR5CgogICAgaWYgKHByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBJbnZhbGlkUGFy
YW1zLCBwcm90b2NvbEVycm9ycyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChlcnJv
ci5sZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBTZXJ2ZXJF
cnJvciwgZXJyb3IpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgICAgICByZXN1bHQtPnNldFN0cmluZygiYnJlYWtwb2ludElkIiwgb3V0X2JyZWFrcG9p
bnRJZCk7CiAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgibG9jYXRpb25zIiwgb3V0X2xvY2F0aW9u
cyk7CiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgicmVzdWx0IiwgcmVzdWx0KTsKCiAg
ICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCBjYWxsSWQpOwogICAgbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RGVi
dWdnZXJfc2V0QnJlYWtwb2ludChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0
TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fZGVidWdnZXJBZ2VudCkK
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiRGVidWdnZXIgaGFuZGxlciBpcyBu
b3QgYXZhaWxhYmxlLiIpOwoKICAgIFN0cmluZyBvdXRfYnJlYWtwb2ludElkID0gIiI7CiAgICBp
bnQgb3V0X2FjdHVhbExpbmVOdW1iZXIgPSAwOwogICAgaW50IG91dF9hY3R1YWxDb2x1bW5OdW1i
ZXIgPSAwOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmIChSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0
KCJwYXJhbXMiKSkgewogICAgICAgIFN0cmluZyBpbl9zb3VyY2VJZCA9IGdldFN0cmluZyhwYXJh
bXNDb250YWluZXIuZ2V0KCksICJzb3VyY2VJZCIsIGZhbHNlLCBwcm90b2NvbEVycm9ycy5nZXQo
KSk7CiAgICAgICAgaW50IGluX2xpbmVOdW1iZXIgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyLmdl
dCgpLCAibGluZU51bWJlciIsIGZhbHNlLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CiAgICAgICAg
aW50IGluX2NvbHVtbk51bWJlciA9IGdldEludChwYXJhbXNDb250YWluZXIuZ2V0KCksICJjb2x1
bW5OdW1iZXIiLCB0cnVlLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CiAgICAgICAgU3RyaW5nIGlu
X2NvbmRpdGlvbiA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXIuZ2V0KCksICJjb25kaXRpb24i
LCB0cnVlLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CiAgICAgICAgYm9vbCBpbl9lbmFibGVkID0g
Z2V0Qm9vbGVhbihwYXJhbXNDb250YWluZXIuZ2V0KCksICJlbmFibGVkIiwgdHJ1ZSwgcHJvdG9j
b2xFcnJvcnMuZ2V0KCkpOwoKICAgICAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkK
ICAgICAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5zZXRCcmVha3BvaW50KCZlcnJvciwgaW5fc291
cmNlSWQsIGluX2xpbmVOdW1iZXIsICZpbl9jb2x1bW5OdW1iZXIsICZpbl9jb25kaXRpb24sICZp
bl9lbmFibGVkLCAmb3V0X2JyZWFrcG9pbnRJZCwgJm91dF9hY3R1YWxMaW5lTnVtYmVyLCAmb3V0
X2FjdHVhbENvbHVtbk51bWJlcik7CiAgICB9IGVsc2UKICAgICAgICBwcm90b2NvbEVycm9ycy0+
cHVzaFN0cmluZygiJ3BhcmFtcycgcHJvcGVydHkgd2l0aCB0eXBlICdvYmplY3QnIHdhcyBub3Qg
Zm91bmQuIik7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdl
Ykluc3BlY3RvciBhdmFpbGFiaWxpdHkKCiAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIEludmFsaWRQYXJhbXMsIHBy
b3RvY29sRXJyb3JzKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGVycm9yLmxlbmd0
aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIFNlcnZlckVycm9yLCBl
cnJvcik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
ICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJicmVha3BvaW50SWQiLCBvdXRfYnJlYWtwb2ludElkKTsK
ICAgICAgICByZXN1bHQtPnNldE51bWJlcigiYWN0dWFsTGluZU51bWJlciIsIG91dF9hY3R1YWxM
aW5lTnVtYmVyKTsKICAgICAgICByZXN1bHQtPnNldE51bWJlcigiYWN0dWFsQ29sdW1uTnVtYmVy
Iiwgb3V0X2FjdHVhbENvbHVtbk51bWJlcik7CiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVj
dCgicmVzdWx0IiwgcmVzdWx0KTsKCiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigiaWQi
LCBjYWxsSWQpOwogICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9G
cm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RGVidWdnZXJfcmVtb3ZlQnJlYWtwb2ludChsb25nIGNhbGxJ
ZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
CiAgICBpZiAoIW1fZGVidWdnZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZygiRGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3Ry
aW5nIGVycm9yOwoKICAgIGlmIChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWlu
ZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKSkgewogICAgICAg
IFN0cmluZyBpbl9icmVha3BvaW50SWQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyLmdldCgp
LCAiYnJlYWtwb2ludElkIiwgZmFsc2UsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKCiAgICAgICAg
aWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgICAgIG1fZGVidWdnZXJBZ2Vu
dC0+cmVtb3ZlQnJlYWtwb2ludCgmZXJyb3IsIGluX2JyZWFrcG9pbnRJZCk7CiAgICB9IGVsc2UK
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiJ3BhcmFtcycgcHJvcGVydHkgd2l0
aCB0eXBlICdvYmplY3QnIHdhcyBub3QgZm91bmQuIik7CgogICAgLy8gdXNlIEluc3BlY3RvckZy
b250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKCiAgICBpZiAo
cHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihj
YWxsSWQsIEludmFsaWRQYXJhbXMsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICByZXR1cm47CiAg
ICB9CgogICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJv
cihjYWxsSWQsIFNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoInJlc3Vs
dCIsIHJlc3VsdCk7CgogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgY2FsbElk
KTsKICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQo
cmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OkRlYnVnZ2VyX2NvbnRpbnVlVG9Mb2NhdGlvbihsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBp
ZiAoIW1fZGVidWdnZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygi
RGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVy
cm9yOwoKICAgIGlmIChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBy
ZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKSkgewogICAgICAgIFN0cmlu
ZyBpbl9zb3VyY2VJZCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXIuZ2V0KCksICJzb3VyY2VJ
ZCIsIGZhbHNlLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CiAgICAgICAgaW50IGluX2xpbmVOdW1i
ZXIgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyLmdldCgpLCAibGluZU51bWJlciIsIGZhbHNlLCBw
cm90b2NvbEVycm9ycy5nZXQoKSk7CiAgICAgICAgaW50IGluX2NvbHVtbk51bWJlciA9IGdldElu
dChwYXJhbXNDb250YWluZXIuZ2V0KCksICJjb2x1bW5OdW1iZXIiLCBmYWxzZSwgcHJvdG9jb2xF
cnJvcnMuZ2V0KCkpOwoKICAgICAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAg
ICAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5jb250aW51ZVRvTG9jYXRpb24oJmVycm9yLCBpbl9z
b3VyY2VJZCwgaW5fbGluZU51bWJlciwgaW5fY29sdW1uTnVtYmVyKTsKICAgIH0gZWxzZQogICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCIncGFyYW1zJyBwcm9wZXJ0eSB3aXRoIHR5
cGUgJ29iamVjdCcgd2FzIG5vdCBmb3VuZC4iKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRl
bmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQoKICAgIGlmIChwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJ
ZCwgSW52YWxpZFBhcmFtcywgcHJvdG9jb2xFcnJvcnMpOwogICAgICAgIHJldHVybjsKICAgIH0K
CiAgICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNh
bGxJZCwgU2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgicmVzdWx0Iiwg
cmVzdWx0KTsKCiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCBjYWxsSWQpOwog
ICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNw
b25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6RGVidWdnZXJfc3RlcE92ZXIobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCop
CnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4i
KTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5n
dGgoKSkKICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPnN0ZXBPdmVyKCZlcnJvcik7CgogICAgLy8g
dXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFi
aWxpdHkKCiAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0
UHJvdG9jb2xFcnJvcihjYWxsSWQsIEludmFsaWRQYXJhbXMsIHByb3RvY29sRXJyb3JzKTsKICAg
ICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVw
b3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIFNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgcmV0
dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcmVzcG9uc2VNZXNzYWdlLT5z
ZXRPYmplY3QoInJlc3VsdCIsIHJlc3VsdCk7CgogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXROdW1i
ZXIoImlkIiwgY2FsbElkKTsKICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVz
c2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRlYnVnZ2VyX3N0ZXBJbnRvKGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29s
RXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFn
ZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVy
IGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5zdGVwSW50
bygmZXJyb3IpOwoKICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBX
ZWJJbnNwZWN0b3IgYXZhaWxhYmlsaXR5CgogICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgo
KSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBJbnZhbGlkUGFyYW1zLCBw
cm90b2NvbEVycm9ycyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChlcnJvci5sZW5n
dGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBTZXJ2ZXJFcnJvciwg
ZXJyb3IpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1bHQpOwoKICAgIHJlc3Bv
bnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsIGNhbGxJZCk7CiAgICBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpEZWJ1Z2dlcl9z
dGVwT3V0KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAg
IGlmICghbV9kZWJ1Z2dlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5n
KCJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcg
ZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9kZWJ1
Z2dlckFnZW50LT5zdGVwT3V0KCZlcnJvcik7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5k
IGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKCiAgICBpZiAocHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQs
IEludmFsaWRQYXJhbXMsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICByZXR1cm47CiAgICB9Cgog
ICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxs
SWQsIFNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoInJlc3VsdCIsIHJl
c3VsdCk7CgogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgY2FsbElkKTsKICAg
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9u
c2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OkRlYnVnZ2VyX3BhdXNlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFnZW50KQogICAgICAgIHByb3RvY29sRXJy
b3JzLT5wdXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7Cgog
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkp
CiAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5wYXVzZSgmZXJyb3IpOwoKICAgIC8vIHVzZSBJbnNw
ZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNwZWN0b3IgYXZhaWxhYmlsaXR5Cgog
ICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29s
RXJyb3IoY2FsbElkLCBJbnZhbGlkUGFyYW1zLCBwcm90b2NvbEVycm9ycyk7CiAgICAgICAgcmV0
dXJuOwogICAgfQoKICAgIGlmIChlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3Rv
Y29sRXJyb3IoY2FsbElkLCBTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgIHJldHVybjsKICAg
IH0KCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0
KCJyZXN1bHQiLCByZXN1bHQpOwoKICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIs
IGNhbGxJZCk7CiAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zy
b250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpEZWJ1Z2dlcl9yZXN1bWUobG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RlYnVnZ2VyQWdlbnQpCiAgICAg
ICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2
YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSkKICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPnJlc3VtZSgmZXJyb3IpOwoK
ICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNwZWN0b3Ig
YXZhaWxhYmlsaXR5CgogICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAg
IHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBJbnZhbGlkUGFyYW1zLCBwcm90b2NvbEVycm9y
cyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChlcnJvci5sZW5ndGgoKSkgewogICAg
ICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAg
ICAgIHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1l
c3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHJlc3BvbnNlTWVz
c2FnZS0+c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1bHQpOwoKICAgIHJlc3BvbnNlTWVzc2FnZS0+
c2V0TnVtYmVyKCJpZCIsIGNhbGxJZCk7CiAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+
c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9
Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpEZWJ1Z2dlcl9lZGl0U2NyaXB0U291
cmNlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7
CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFnZW50KQogICAgICAgIHByb3RvY29s
RXJyb3JzLT5wdXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7
CgogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBvdXRfY2FsbEZyYW1lcyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdl
dE9iamVjdCgicGFyYW1zIikpIHsKICAgICAgICBTdHJpbmcgaW5fc291cmNlSUQgPSBnZXRTdHJp
bmcocGFyYW1zQ29udGFpbmVyLmdldCgpLCAic291cmNlSUQiLCBmYWxzZSwgcHJvdG9jb2xFcnJv
cnMuZ2V0KCkpOwogICAgICAgIFN0cmluZyBpbl9uZXdDb250ZW50ID0gZ2V0U3RyaW5nKHBhcmFt
c0NvbnRhaW5lci5nZXQoKSwgIm5ld0NvbnRlbnQiLCBmYWxzZSwgcHJvdG9jb2xFcnJvcnMuZ2V0
KCkpOwoKICAgICAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAg
bV9kZWJ1Z2dlckFnZW50LT5lZGl0U2NyaXB0U291cmNlKCZlcnJvciwgaW5fc291cmNlSUQsIGlu
X25ld0NvbnRlbnQsICZvdXRfY2FsbEZyYW1lcyk7CiAgICB9IGVsc2UKICAgICAgICBwcm90b2Nv
bEVycm9ycy0+cHVzaFN0cmluZygiJ3BhcmFtcycgcHJvcGVydHkgd2l0aCB0eXBlICdvYmplY3Qn
IHdhcyBub3QgZm91bmQuIik7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFy
a2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKCiAgICBpZiAocHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIEludmFsaWRQ
YXJhbXMsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGVy
cm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIFNlcnZl
ckVycm9yLCBlcnJvcik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwogICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImNhbGxGcmFtZXMiLCBvdXRfY2FsbEZyYW1l
cyk7CiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgicmVzdWx0IiwgcmVzdWx0KTsKCiAg
ICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCBjYWxsSWQpOwogICAgbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RGVi
dWdnZXJfZ2V0U2NyaXB0U291cmNlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVl
c3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJy
b3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9kZWJ1Z2dlckFnZW50
KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJEZWJ1Z2dlciBoYW5kbGVyIGlz
IG5vdCBhdmFpbGFibGUuIik7CgogICAgU3RyaW5nIG91dF9zY3JpcHRTb3VyY2UgPSAiIjsKCiAg
ICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFy
YW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIikp
IHsKICAgICAgICBTdHJpbmcgaW5fc291cmNlSUQgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVy
LmdldCgpLCAic291cmNlSUQiLCBmYWxzZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwoKICAgICAg
ICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgbV9kZWJ1Z2dlckFn
ZW50LT5nZXRTY3JpcHRTb3VyY2UoJmVycm9yLCBpbl9zb3VyY2VJRCwgJm91dF9zY3JpcHRTb3Vy
Y2UpOwogICAgfSBlbHNlCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIidwYXJh
bXMnIHByb3BlcnR5IHdpdGggdHlwZSAnb2JqZWN0JyB3YXMgbm90IGZvdW5kLiIpOwoKICAgIC8v
IHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNwZWN0b3IgYXZhaWxh
YmlsaXR5CgogICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIHJlcG9y
dFByb3RvY29sRXJyb3IoY2FsbElkLCBJbnZhbGlkUGFyYW1zLCBwcm90b2NvbEVycm9ycyk7CiAg
ICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJl
cG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgIHJl
dHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2Ug
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICByZXN1bHQtPnNldFN0
cmluZygic2NyaXB0U291cmNlIiwgb3V0X3NjcmlwdFNvdXJjZSk7CiAgICByZXNwb25zZU1lc3Nh
Z2UtPnNldE9iamVjdCgicmVzdWx0IiwgcmVzdWx0KTsKCiAgICByZXNwb25zZU1lc3NhZ2UtPnNl
dE51bWJlcigiaWQiLCBjYWxsSWQpOwogICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNl
bmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoK
dm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RGVidWdnZXJfc2V0UGF1c2VPbkV4Y2Vw
dGlvbnMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3Qp
CnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX2RlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoIkRlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4i
KTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFy
YW1zIikpIHsKICAgICAgICBTdHJpbmcgaW5fc3RhdGUgPSBnZXRTdHJpbmcocGFyYW1zQ29udGFp
bmVyLmdldCgpLCAic3RhdGUiLCBmYWxzZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwoKICAgICAg
ICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgbV9kZWJ1Z2dlckFn
ZW50LT5zZXRQYXVzZU9uRXhjZXB0aW9ucygmZXJyb3IsIGluX3N0YXRlKTsKICAgIH0gZWxzZQog
ICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCIncGFyYW1zJyBwcm9wZXJ0eSB3aXRo
IHR5cGUgJ29iamVjdCcgd2FzIG5vdCBmb3VuZC4iKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJv
bnRlbmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQoKICAgIGlmIChw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNh
bGxJZCwgSW52YWxpZFBhcmFtcywgcHJvdG9jb2xFcnJvcnMpOwogICAgICAgIHJldHVybjsKICAg
IH0KCiAgICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9y
KGNhbGxJZCwgU2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgicmVzdWx0
IiwgcmVzdWx0KTsKCiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCBjYWxsSWQp
OwogICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChy
ZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6RGVidWdnZXJfZXZhbHVhdGVPbkNhbGxGcmFtZShsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBp
ZiAoIW1fZGVidWdnZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygi
RGVidWdnZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG91dF9yZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwoKICAgIEVy
cm9yU3RyaW5nIGVycm9yOwoKICAgIGlmIChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXND
b250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKSkgewog
ICAgICAgIFN0cmluZyBpbl9jYWxsRnJhbWVJZCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXIu
Z2V0KCksICJjYWxsRnJhbWVJZCIsIGZhbHNlLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CiAgICAg
ICAgU3RyaW5nIGluX2V4cHJlc3Npb24gPSBnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyLmdldCgp
LCAiZXhwcmVzc2lvbiIsIGZhbHNlLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CiAgICAgICAgU3Ry
aW5nIGluX29iamVjdEdyb3VwID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgIm9i
amVjdEdyb3VwIiwgZmFsc2UsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKICAgICAgICBib29sIGlu
X2luY2x1ZGVDb21tYW5kTGluZUFQSSA9IGdldEJvb2xlYW4ocGFyYW1zQ29udGFpbmVyLmdldCgp
LCAiaW5jbHVkZUNvbW1hbmRMaW5lQVBJIiwgdHJ1ZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwoK
ICAgICAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgbV9kZWJ1
Z2dlckFnZW50LT5ldmFsdWF0ZU9uQ2FsbEZyYW1lKCZlcnJvciwgaW5fY2FsbEZyYW1lSWQsIGlu
X2V4cHJlc3Npb24sIGluX29iamVjdEdyb3VwLCAmaW5faW5jbHVkZUNvbW1hbmRMaW5lQVBJLCAm
b3V0X3Jlc3VsdCk7CiAgICB9IGVsc2UKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmlu
ZygiJ3BhcmFtcycgcHJvcGVydHkgd2l0aCB0eXBlICdvYmplY3QnIHdhcyBub3QgZm91bmQuIik7
CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3Rv
ciBhdmFpbGFiaWxpdHkKCiAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAg
ICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIEludmFsaWRQYXJhbXMsIHByb3RvY29sRXJy
b3JzKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7CiAg
ICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIFNlcnZlckVycm9yLCBlcnJvcik7CiAg
ICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNl
TWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgIHJlc3Vs
dC0+c2V0T2JqZWN0KCJyZXN1bHQiLCBvdXRfcmVzdWx0KTsKICAgIHJlc3BvbnNlTWVzc2FnZS0+
c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1bHQpOwoKICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVt
YmVyKCJpZCIsIGNhbGxJZCk7CiAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1l
c3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lk
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpCcm93c2VyRGVidWdnZXJfc2V0RE9NQnJlYWtw
b2ludChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkK
ewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fYnJvd3NlckRlYnVnZ2VyQWdlbnQpCiAgICAgICAg
cHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkJyb3dzZXJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5v
dCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5n
ZXRPYmplY3QoInBhcmFtcyIpKSB7CiAgICAgICAgaW50IGluX25vZGVJZCA9IGdldEludChwYXJh
bXNDb250YWluZXIuZ2V0KCksICJub2RlSWQiLCBmYWxzZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkp
OwogICAgICAgIGludCBpbl90eXBlID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgInR5
cGUiLCBmYWxzZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwoKICAgICAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgbV9icm93c2VyRGVidWdnZXJBZ2VudC0+c2V0
RE9NQnJlYWtwb2ludCgmZXJyb3IsIGluX25vZGVJZCwgaW5fdHlwZSk7CiAgICB9IGVsc2UKICAg
ICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiJ3BhcmFtcycgcHJvcGVydHkgd2l0aCB0
eXBlICdvYmplY3QnIHdhcyBub3QgZm91bmQuIik7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250
ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKCiAgICBpZiAocHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxs
SWQsIEludmFsaWRQYXJhbXMsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICByZXR1cm47CiAgICB9
CgogICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihj
YWxsSWQsIFNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoInJlc3VsdCIs
IHJlc3VsdCk7CgogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgY2FsbElkKTsK
ICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVz
cG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OkJyb3dzZXJEZWJ1Z2dlcl9yZW1vdmVET01CcmVha3BvaW50KGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoK
ICAgIGlmICghbV9icm93c2VyRGVidWdnZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+
cHVzaFN0cmluZygiQnJvd3NlckRlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsK
CiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1z
IikpIHsKICAgICAgICBpbnQgaW5fbm9kZUlkID0gZ2V0SW50KHBhcmFtc0NvbnRhaW5lci5nZXQo
KSwgIm5vZGVJZCIsIGZhbHNlLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CiAgICAgICAgaW50IGlu
X3R5cGUgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyLmdldCgpLCAidHlwZSIsIGZhbHNlLCBwcm90
b2NvbEVycm9ycy5nZXQoKSk7CgogICAgICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KQogICAgICAgICAgICBtX2Jyb3dzZXJEZWJ1Z2dlckFnZW50LT5yZW1vdmVET01CcmVha3BvaW50
KCZlcnJvciwgaW5fbm9kZUlkLCBpbl90eXBlKTsKICAgIH0gZWxzZQogICAgICAgIHByb3RvY29s
RXJyb3JzLT5wdXNoU3RyaW5nKCIncGFyYW1zJyBwcm9wZXJ0eSB3aXRoIHR5cGUgJ29iamVjdCcg
d2FzIG5vdCBmb3VuZC4iKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJr
ZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQoKICAgIGlmIChwcm90b2NvbEVycm9ycy0+
bGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgSW52YWxpZFBh
cmFtcywgcHJvdG9jb2xFcnJvcnMpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoZXJy
b3IubGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgU2VydmVy
RXJyb3IsIGVycm9yKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgicmVzdWx0IiwgcmVzdWx0KTsKCiAg
ICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCBjYWxsSWQpOwogICAgbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6QnJv
d3NlckRlYnVnZ2VyX3NldEV2ZW50TGlzdGVuZXJCcmVha3BvaW50KGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlm
ICghbV9icm93c2VyRGVidWdnZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZygiQnJvd3NlckRlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBF
cnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1z
Q29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIikpIHsK
ICAgICAgICBTdHJpbmcgaW5fZXZlbnROYW1lID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5n
ZXQoKSwgImV2ZW50TmFtZSIsIGZhbHNlLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CgogICAgICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQogICAgICAgICAgICBtX2Jyb3dzZXJEZWJ1
Z2dlckFnZW50LT5zZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludCgmZXJyb3IsIGluX2V2ZW50TmFt
ZSk7CiAgICB9IGVsc2UKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiJ3BhcmFt
cycgcHJvcGVydHkgd2l0aCB0eXBlICdvYmplY3QnIHdhcyBub3QgZm91bmQuIik7CgogICAgLy8g
dXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFi
aWxpdHkKCiAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0
UHJvdG9jb2xFcnJvcihjYWxsSWQsIEludmFsaWRQYXJhbXMsIHByb3RvY29sRXJyb3JzKTsKICAg
ICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVw
b3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIFNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgcmV0
dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgcmVzcG9uc2VNZXNzYWdlLT5z
ZXRPYmplY3QoInJlc3VsdCIsIHJlc3VsdCk7CgogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXROdW1i
ZXIoImlkIiwgY2FsbElkKTsKICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVz
c2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkJyb3dzZXJEZWJ1Z2dlcl9yZW1vdmVFdmVudExp
c3RlbmVyQnJlYWtwb2ludChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVz
c2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fYnJvd3NlckRlYnVnZ2VyQWdl
bnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIkJyb3dzZXJEZWJ1Z2dlciBo
YW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAg
aWYgKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNz
YWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpKSB7CiAgICAgICAgU3RyaW5nIGluX2V2ZW50
TmFtZSA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXIuZ2V0KCksICJldmVudE5hbWUiLCBmYWxz
ZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwoKICAgICAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkKICAgICAgICAgICAgbV9icm93c2VyRGVidWdnZXJBZ2VudC0+cmVtb3ZlRXZlbnRM
aXN0ZW5lckJyZWFrcG9pbnQoJmVycm9yLCBpbl9ldmVudE5hbWUpOwogICAgfSBlbHNlCiAgICAg
ICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIidwYXJhbXMnIHByb3BlcnR5IHdpdGggdHlw
ZSAnb2JqZWN0JyB3YXMgbm90IGZvdW5kLiIpOwoKICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVu
ZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNwZWN0b3IgYXZhaWxhYmlsaXR5CgogICAgaWYgKHByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElk
LCBJbnZhbGlkUGFyYW1zLCBwcm90b2NvbEVycm9ycyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoK
ICAgIGlmIChlcnJvci5sZW5ndGgoKSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2Fs
bElkLCBTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJyZXN1bHQiLCBy
ZXN1bHQpOwoKICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsIGNhbGxJZCk7CiAg
ICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3Bv
bnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpCcm93c2VyRGVidWdnZXJfc2V0WEhSQnJlYWtwb2ludChsb25nIGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBp
ZiAoIW1fYnJvd3NlckRlYnVnZ2VyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoIkJyb3dzZXJEZWJ1Z2dlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAg
RXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFt
c0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpKSB7
CiAgICAgICAgU3RyaW5nIGluX3VybCA9IGdldFN0cmluZyhwYXJhbXNDb250YWluZXIuZ2V0KCks
ICJ1cmwiLCBmYWxzZSwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwoKICAgICAgICBpZiAoIXByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICAgICAgbV9icm93c2VyRGVidWdnZXJBZ2VudC0+
c2V0WEhSQnJlYWtwb2ludCgmZXJyb3IsIGluX3VybCk7CiAgICB9IGVsc2UKICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZygiJ3BhcmFtcycgcHJvcGVydHkgd2l0aCB0eXBlICdvYmpl
Y3QnIHdhcyBub3QgZm91bmQuIik7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEg
bWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKCiAgICBpZiAocHJvdG9jb2xFcnJv
cnMtPmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIEludmFs
aWRQYXJhbXMsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYg
KGVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIFNl
cnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoInJlc3VsdCIsIHJlc3VsdCk7
CgogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgY2FsbElkKTsKICAgIG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OkJyb3dzZXJEZWJ1Z2dlcl9yZW1vdmVYSFJCcmVha3BvaW50KGxvbmcgY2FsbElkLCBJbnNwZWN0
b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICgh
bV9icm93c2VyRGVidWdnZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmlu
ZygiQnJvd3NlckRlYnVnZ2VyIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJv
clN0cmluZyBlcnJvcjsKCiAgICBpZiAoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29u
dGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIikpIHsKICAg
ICAgICBTdHJpbmcgaW5fdXJsID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgInVy
bCIsIGZhbHNlLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CgogICAgICAgIGlmICghcHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpKQogICAgICAgICAgICBtX2Jyb3dzZXJEZWJ1Z2dlckFnZW50LT5yZW1v
dmVYSFJCcmVha3BvaW50KCZlcnJvciwgaW5fdXJsKTsKICAgIH0gZWxzZQogICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKCIncGFyYW1zJyBwcm9wZXJ0eSB3aXRoIHR5cGUgJ29iamVj
dCcgd2FzIG5vdCBmb3VuZC4iKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBt
YXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQoKICAgIGlmIChwcm90b2NvbEVycm9y
cy0+bGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgSW52YWxp
ZFBhcmFtcywgcHJvdG9jb2xFcnJvcnMpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAo
ZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgU2Vy
dmVyRXJyb3IsIGVycm9yKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgicmVzdWx0IiwgcmVzdWx0KTsK
CiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCBjYWxsSWQpOwogICAgbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3Nh
Z2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
UHJvZmlsZXJfZW5hYmxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0
ZSgpOwoKICAgIGlmICghbV9wcm9maWxlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKCJQcm9maWxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJy
b3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAg
ICAgbV9wcm9maWxlckFnZW50LT5lbmFibGUoJmVycm9yKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9y
RnJvbnRlbmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQoKICAgIGlm
IChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9y
KGNhbGxJZCwgSW52YWxpZFBhcmFtcywgcHJvdG9jb2xFcnJvcnMpOwogICAgICAgIHJldHVybjsK
ICAgIH0KCiAgICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVy
cm9yKGNhbGxJZCwgU2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICByZXR1cm47CiAgICB9Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgicmVz
dWx0IiwgcmVzdWx0KTsKCiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCBjYWxs
SWQpOwogICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVu
ZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6UHJvZmlsZXJfZGlzYWJsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KikKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcHJvZmlsZXJBZ2VudCkKICAgICAgICBw
cm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUHJvZmlsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxh
YmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKQogICAgICAgIG1fcHJvZmlsZXJBZ2VudC0+ZGlzYWJsZSgmZXJyb3IpOwoKICAg
IC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNwZWN0b3IgYXZh
aWxhYmlsaXR5CgogICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewogICAgICAgIHJl
cG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBJbnZhbGlkUGFyYW1zLCBwcm90b2NvbEVycm9ycyk7
CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChlcnJvci5sZW5ndGgoKSkgewogICAgICAg
IHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAg
IHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3Nh
Z2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHJlc3BvbnNlTWVzc2Fn
ZS0+c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1bHQpOwoKICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0
TnVtYmVyKCJpZCIsIGNhbGxJZCk7CiAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2Vu
ZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwp9Cgp2
b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpQcm9maWxlcl9pc0VuYWJsZWQobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
dG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3Byb2Zp
bGVyQWdlbnQpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlByb2ZpbGVyIGhh
bmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKCiAgICBib29sIG91dF9zdGF0ZSA9IGZhbHNlOwoK
ICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KQogICAgICAgIG1fcHJvZmlsZXJBZ2VudC0+aXNFbmFibGVkKCZlcnJvciwgJm91dF9zdGF0ZSk7
CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3Rv
ciBhdmFpbGFiaWxpdHkKCiAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAg
ICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIEludmFsaWRQYXJhbXMsIHByb3RvY29sRXJy
b3JzKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7CiAg
ICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIFNlcnZlckVycm9yLCBlcnJvcik7CiAg
ICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNl
TWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgIHJlc3Vs
dC0+c2V0Qm9vbGVhbigic3RhdGUiLCBvdXRfc3RhdGUpOwogICAgcmVzcG9uc2VNZXNzYWdlLT5z
ZXRPYmplY3QoInJlc3VsdCIsIHJlc3VsdCk7CgogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXROdW1i
ZXIoImlkIiwgY2FsbElkKTsKICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVz
c2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlByb2ZpbGVyX3N0YXJ0KGxvbmcgY2FsbElkLCBJ
bnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJy
b3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9wcm9maWxlckFnZW50
KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQcm9maWxlciBoYW5kbGVyIGlz
IG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7CgogICAgaWYgKCFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9wcm9maWxlckFnZW50LT5zdGFydCgmZXJy
b3IpOwoKICAgIC8vIHVzZSBJbnNwZWN0b3JGcm9udGVuZCBhcyBhIG1hcmtlciBvZiBXZWJJbnNw
ZWN0b3IgYXZhaWxhYmlsaXR5CgogICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewog
ICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBJbnZhbGlkUGFyYW1zLCBwcm90b2Nv
bEVycm9ycyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChlcnJvci5sZW5ndGgoKSkg
ewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBTZXJ2ZXJFcnJvciwgZXJyb3Ip
OwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNw
b25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIHJlc3Bv
bnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1bHQpOwoKICAgIHJlc3BvbnNlTWVz
c2FnZS0+c2V0TnVtYmVyKCJpZCIsIGNhbGxJZCk7CiAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpQcm9maWxlcl9zdG9wKGxv
bmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9w
cm9maWxlckFnZW50KQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQcm9maWxl
ciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CgogICAgRXJyb3JTdHJpbmcgZXJyb3I7Cgog
ICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgbV9wcm9maWxlckFnZW50
LT5zdG9wKCZlcnJvcik7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2Vy
IG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKCiAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIEludmFsaWRQYXJh
bXMsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGVycm9y
Lmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIFNlcnZlckVy
cm9yLCBlcnJvcik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoInJlc3VsdCIsIHJlc3VsdCk7CgogICAg
cmVzcG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgY2FsbElkKTsKICAgIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50
b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlByb2Zp
bGVyX2dldFByb2ZpbGVIZWFkZXJzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqKQp7CiAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOwoKICAgIGlmICghbV9wcm9maWxlckFnZW50KQogICAgICAgIHByb3RvY29sRXJy
b3JzLT5wdXNoU3RyaW5nKCJQcm9maWxlciBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7Cgog
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBvdXRfaGVhZGVycyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSkKICAgICAgICBtX3Byb2ZpbGVyQWdlbnQtPmdldFByb2ZpbGVIZWFkZXJzKCZl
cnJvciwgJm91dF9oZWFkZXJzKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBt
YXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQoKICAgIGlmIChwcm90b2NvbEVycm9y
cy0+bGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgSW52YWxp
ZFBhcmFtcywgcHJvdG9jb2xFcnJvcnMpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAo
ZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgU2Vy
dmVyRXJyb3IsIGVycm9yKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiaGVhZGVycyIsIG91dF9oZWFkZXJzKTsK
ICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1bHQpOwoKICAgIHJl
c3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsIGNhbGxJZCk7CiAgICBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpQcm9maWxl
cl9nZXRQcm9maWxlKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdl
T2JqZWN0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwoKICAgIGlmICghbV9wcm9maWxlckFnZW50KQogICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCJQcm9maWxlciBoYW5kbGVyIGlzIG5vdCBhdmFp
bGFibGUuIik7CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb3V0X3Byb2ZpbGUgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmIChS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9i
amVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKSkgewogICAgICAgIFN0cmluZyBpbl90eXBlID0gZ2V0
U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgInR5cGUiLCBmYWxzZSwgcHJvdG9jb2xFcnJv
cnMuZ2V0KCkpOwogICAgICAgIGludCBpbl91aWQgPSBnZXRJbnQocGFyYW1zQ29udGFpbmVyLmdl
dCgpLCAidWlkIiwgZmFsc2UsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKCiAgICAgICAgaWYgKCFw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgICAgIG1fcHJvZmlsZXJBZ2VudC0+Z2V0
UHJvZmlsZSgmZXJyb3IsIGluX3R5cGUsIGluX3VpZCwgJm91dF9wcm9maWxlKTsKICAgIH0gZWxz
ZQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCIncGFyYW1zJyBwcm9wZXJ0eSB3
aXRoIHR5cGUgJ29iamVjdCcgd2FzIG5vdCBmb3VuZC4iKTsKCiAgICAvLyB1c2UgSW5zcGVjdG9y
RnJvbnRlbmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQoKICAgIGlm
IChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9y
KGNhbGxJZCwgSW52YWxpZFBhcmFtcywgcHJvdG9jb2xFcnJvcnMpOwogICAgICAgIHJldHVybjsK
ICAgIH0KCiAgICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVy
cm9yKGNhbGxJZCwgU2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICByZXR1cm47CiAgICB9Cgog
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInByb2ZpbGUi
LCBvdXRfcHJvZmlsZSk7CiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgicmVzdWx0Iiwg
cmVzdWx0KTsKCiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCBjYWxsSWQpOwog
ICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNw
b25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6UHJvZmlsZXJfcmVtb3ZlUHJvZmlsZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2Jq
ZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBw
cm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcHJv
ZmlsZXJBZ2VudCkKICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUHJvZmlsZXIg
aGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAg
IGlmIChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVz
c2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKSkgewogICAgICAgIFN0cmluZyBpbl90eXBl
ID0gZ2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgInR5cGUiLCBmYWxzZSwgcHJvdG9j
b2xFcnJvcnMuZ2V0KCkpOwogICAgICAgIGludCBpbl91aWQgPSBnZXRJbnQocGFyYW1zQ29udGFp
bmVyLmdldCgpLCAidWlkIiwgZmFsc2UsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKCiAgICAgICAg
aWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgICAgIG1fcHJvZmlsZXJBZ2Vu
dC0+cmVtb3ZlUHJvZmlsZSgmZXJyb3IsIGluX3R5cGUsIGluX3VpZCk7CiAgICB9IGVsc2UKICAg
ICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZygiJ3BhcmFtcycgcHJvcGVydHkgd2l0aCB0
eXBlICdvYmplY3QnIHdhcyBub3QgZm91bmQuIik7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250
ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKCiAgICBpZiAocHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxs
SWQsIEludmFsaWRQYXJhbXMsIHByb3RvY29sRXJyb3JzKTsKICAgICAgICByZXR1cm47CiAgICB9
CgogICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihj
YWxsSWQsIFNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoInJlc3VsdCIs
IHJlc3VsdCk7CgogICAgcmVzcG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgY2FsbElkKTsK
ICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVz
cG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OlByb2ZpbGVyX2NsZWFyUHJvZmlsZXMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9i
amVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3Byb2ZpbGVyQWdlbnQpCiAgICAgICAg
cHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlByb2ZpbGVyIGhhbmRsZXIgaXMgbm90IGF2YWls
YWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSkKICAgICAgICBtX3Byb2ZpbGVyQWdlbnQtPmNsZWFyUHJvZmlsZXMoJmVycm9y
KTsKCiAgICAvLyB1c2UgSW5zcGVjdG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVj
dG9yIGF2YWlsYWJpbGl0eQoKICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAg
ICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgSW52YWxpZFBhcmFtcywgcHJvdG9jb2xF
cnJvcnMpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsK
ICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgU2VydmVyRXJyb3IsIGVycm9yKTsK
ICAgICAgICByZXR1cm47CiAgICB9CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9u
c2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICByZXNwb25z
ZU1lc3NhZ2UtPnNldE9iamVjdCgicmVzdWx0IiwgcmVzdWx0KTsKCiAgICByZXNwb25zZU1lc3Nh
Z2UtPnNldE51bWJlcigiaWQiLCBjYWxsSWQpOwogICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsKfQoKdm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UHJvZmlsZXJfdGFrZUhlYXBT
bmFwc2hvdChsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVj
dCkKewogICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKCiAgICBpZiAoIW1fcHJvZmlsZXJBZ2VudCkKICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZygiUHJvZmlsZXIgaGFuZGxlciBpcyBub3QgYXZhaWxhYmxl
LiIpOwoKICAgIEVycm9yU3RyaW5nIGVycm9yOwoKICAgIGlmIChSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJw
YXJhbXMiKSkgewogICAgICAgIGJvb2wgaW5fZGV0YWlsZWQgPSBnZXRCb29sZWFuKHBhcmFtc0Nv
bnRhaW5lci5nZXQoKSwgImRldGFpbGVkIiwgZmFsc2UsIHByb3RvY29sRXJyb3JzLmdldCgpKTsK
CiAgICAgICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCiAgICAgICAgICAgIG1fcHJv
ZmlsZXJBZ2VudC0+dGFrZUhlYXBTbmFwc2hvdCgmZXJyb3IsIGluX2RldGFpbGVkKTsKICAgIH0g
ZWxzZQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCIncGFyYW1zJyBwcm9wZXJ0
eSB3aXRoIHR5cGUgJ29iamVjdCcgd2FzIG5vdCBmb3VuZC4iKTsKCiAgICAvLyB1c2UgSW5zcGVj
dG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eQoKICAg
IGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVy
cm9yKGNhbGxJZCwgSW52YWxpZFBhcmFtcywgcHJvdG9jb2xFcnJvcnMpOwogICAgICAgIHJldHVy
bjsKICAgIH0KCiAgICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICByZXBvcnRQcm90b2Nv
bEVycm9yKGNhbGxJZCwgU2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICByZXR1cm47CiAgICB9
CgogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgi
cmVzdWx0IiwgcmVzdWx0KTsKCiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCBj
YWxsSWQpOwogICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKdm9pZCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6UHJvZmlsZXJfY29sbGVjdEdhcmJhZ2UobG9uZyBjYWxsSWQsIElu
c3BlY3Rvck9iamVjdCopCnsKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJv
cnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CgogICAgaWYgKCFtX3Byb2ZpbGVyQWdlbnQp
CiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIlByb2ZpbGVyIGhhbmRsZXIgaXMg
bm90IGF2YWlsYWJsZS4iKTsKCiAgICBFcnJvclN0cmluZyBlcnJvcjsKCiAgICBpZiAoIXByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkKICAgICAgICBtX3Byb2ZpbGVyQWdlbnQtPmNvbGxlY3RHYXJi
YWdlKCZlcnJvcik7CgogICAgLy8gdXNlIEluc3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9m
IFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHkKCiAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIEludmFsaWRQYXJhbXMs
IHByb3RvY29sRXJyb3JzKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGVycm9yLmxl
bmd0aCgpKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIFNlcnZlckVycm9y
LCBlcnJvcik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoInJlc3VsdCIsIHJlc3VsdCk7CgogICAgcmVz
cG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgY2FsbElkKTsKICAgIG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pT
T05TdHJpbmcoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNo
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKewogICAgdHlwZWRlZiB2b2lkIChJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6KkNhbGxIYW5kbGVyKShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KiBtZXNzYWdlT2JqZWN0KTsKICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVy
PiBEaXNwYXRjaE1hcDsKICAgIERFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3Bh
dGNoTWFwLCApOwogICAgbG9uZyBjYWxsSWQgPSAwOwoKICAgIGlmIChkaXNwYXRjaE1hcC5pc0Vt
cHR5KCkpIHsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoSW5zcGVjdG9yX2RpZEV2YWx1YXRlRm9y
VGVzdEluRnJvbnRlbmRDbWQsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9y
X2RpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZChQ
YWdlX2FkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWRDbWQsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6UGFnZV9hZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKTsKICAgICAgICBkaXNwYXRjaE1h
cC5hZGQoUGFnZV9yZW1vdmVBbGxTY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZENtZCwgJkluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpQYWdlX3JlbW92ZUFsbFNjcmlwdHNUb0V2YWx1YXRlT25Mb2Fk
KTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoUGFnZV9yZWxvYWRQYWdlQ21kLCAmSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OlBhZ2VfcmVsb2FkUGFnZSk7CiAgICAgICAgZGlzcGF0Y2hNYXAu
YWRkKFBhZ2Vfb3BlbkluSW5zcGVjdGVkV2luZG93Q21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OlBhZ2Vfb3BlbkluSW5zcGVjdGVkV2luZG93KTsKICAgICAgICBkaXNwYXRjaE1hcC5h
ZGQoUGFnZV9zZXRVc2VyQWdlbnRPdmVycmlkZUNtZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpQYWdlX3NldFVzZXJBZ2VudE92ZXJyaWRlKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQo
UGFnZV9nZXRDb29raWVzQ21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlBhZ2VfZ2V0
Q29va2llcyk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKFBhZ2VfZGVsZXRlQ29va2llQ21kLCAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlBhZ2VfZGVsZXRlQ29va2llKTsKICAgICAgICBk
aXNwYXRjaE1hcC5hZGQoUnVudGltZV9ldmFsdWF0ZUNtZCwgJkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpSdW50aW1lX2V2YWx1YXRlKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoUnVudGlt
ZV9ldmFsdWF0ZU9uQ21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlJ1bnRpbWVfZXZh
bHVhdGVPbik7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKFJ1bnRpbWVfZ2V0UHJvcGVydGllc0Nt
ZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpSdW50aW1lX2dldFByb3BlcnRpZXMpOwog
ICAgICAgIGRpc3BhdGNoTWFwLmFkZChSdW50aW1lX3NldFByb3BlcnR5VmFsdWVDbWQsICZJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UnVudGltZV9zZXRQcm9wZXJ0eVZhbHVlKTsKICAgICAg
ICBkaXNwYXRjaE1hcC5hZGQoUnVudGltZV9yZWxlYXNlT2JqZWN0Q21kLCAmSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OlJ1bnRpbWVfcmVsZWFzZU9iamVjdCk7CiAgICAgICAgZGlzcGF0Y2hN
YXAuYWRkKFJ1bnRpbWVfcmVsZWFzZU9iamVjdEdyb3VwQ21kLCAmSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OlJ1bnRpbWVfcmVsZWFzZU9iamVjdEdyb3VwKTsKICAgICAgICBkaXNwYXRjaE1h
cC5hZGQoQ29uc29sZV9lbmFibGVDbWQsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q29u
c29sZV9lbmFibGUpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZChDb25zb2xlX2Rpc2FibGVDbWQs
ICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q29uc29sZV9kaXNhYmxlKTsKICAgICAgICBk
aXNwYXRjaE1hcC5hZGQoQ29uc29sZV9jbGVhckNvbnNvbGVNZXNzYWdlc0NtZCwgJkluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpDb25zb2xlX2NsZWFyQ29uc29sZU1lc3NhZ2VzKTsKICAgICAg
ICBkaXNwYXRjaE1hcC5hZGQoQ29uc29sZV9zZXRNb25pdG9yaW5nWEhSRW5hYmxlZENtZCwgJklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDb25zb2xlX3NldE1vbml0b3JpbmdYSFJFbmFibGVk
KTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoQ29uc29sZV9hZGRJbnNwZWN0ZWROb2RlQ21kLCAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNvbnNvbGVfYWRkSW5zcGVjdGVkTm9kZSk7CiAg
ICAgICAgZGlzcGF0Y2hNYXAuYWRkKE5ldHdvcmtfZW5hYmxlQ21kLCAmSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6Ok5ldHdvcmtfZW5hYmxlKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoTmV0
d29ya19kaXNhYmxlQ21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmtfZGlz
YWJsZSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKE5ldHdvcmtfZ2V0Q2FjaGVkUmVzb3VyY2Vz
Q21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmtfZ2V0Q2FjaGVkUmVzb3Vy
Y2VzKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoTmV0d29ya19nZXRSZXNvdXJjZUNvbnRlbnRD
bWQsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29ya19nZXRSZXNvdXJjZUNvbnRl
bnQpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZChOZXR3b3JrX3NldEV4dHJhSGVhZGVyc0NtZCwg
Jkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrX3NldEV4dHJhSGVhZGVycyk7CiAg
ICAgICAgZGlzcGF0Y2hNYXAuYWRkKERhdGFiYXNlX2dldERhdGFiYXNlVGFibGVOYW1lc0NtZCwg
Jkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpEYXRhYmFzZV9nZXREYXRhYmFzZVRhYmxlTmFt
ZXMpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZChEYXRhYmFzZV9leGVjdXRlU1FMQ21kLCAmSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRhdGFiYXNlX2V4ZWN1dGVTUUwpOwogICAgICAgIGRp
c3BhdGNoTWFwLmFkZChET01TdG9yYWdlX2dldERPTVN0b3JhZ2VFbnRyaWVzQ21kLCAmSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OkRPTVN0b3JhZ2VfZ2V0RE9NU3RvcmFnZUVudHJpZXMpOwog
ICAgICAgIGRpc3BhdGNoTWFwLmFkZChET01TdG9yYWdlX3NldERPTVN0b3JhZ2VJdGVtQ21kLCAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRPTVN0b3JhZ2Vfc2V0RE9NU3RvcmFnZUl0ZW0p
OwogICAgICAgIGRpc3BhdGNoTWFwLmFkZChET01TdG9yYWdlX3JlbW92ZURPTVN0b3JhZ2VJdGVt
Q21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRPTVN0b3JhZ2VfcmVtb3ZlRE9NU3Rv
cmFnZUl0ZW0pOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZChBcHBsaWNhdGlvbkNhY2hlX2dldEFw
cGxpY2F0aW9uQ2FjaGVzQ21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkFwcGxpY2F0
aW9uQ2FjaGVfZ2V0QXBwbGljYXRpb25DYWNoZXMpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZChE
T01fZ2V0RG9jdW1lbnRDbWQsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9NX2dldERv
Y3VtZW50KTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoRE9NX2dldENoaWxkTm9kZXNDbWQsICZJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9NX2dldENoaWxkTm9kZXMpOwogICAgICAgIGRp
c3BhdGNoTWFwLmFkZChET01fcXVlcnlTZWxlY3RvckNtZCwgJkluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpET01fcXVlcnlTZWxlY3Rvcik7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKERPTV9x
dWVyeVNlbGVjdG9yQWxsQ21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRPTV9xdWVy
eVNlbGVjdG9yQWxsKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoRE9NX3NldE5vZGVOYW1lQ21k
LCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRPTV9zZXROb2RlTmFtZSk7CiAgICAgICAg
ZGlzcGF0Y2hNYXAuYWRkKERPTV9zZXROb2RlVmFsdWVDbWQsICZJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6RE9NX3NldE5vZGVWYWx1ZSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKERPTV9y
ZW1vdmVOb2RlQ21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRPTV9yZW1vdmVOb2Rl
KTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoRE9NX3NldEF0dHJpYnV0ZUNtZCwgJkluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpET01fc2V0QXR0cmlidXRlKTsKICAgICAgICBkaXNwYXRjaE1h
cC5hZGQoRE9NX3JlbW92ZUF0dHJpYnV0ZUNtZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpET01fcmVtb3ZlQXR0cmlidXRlKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoRE9NX2dldEV2
ZW50TGlzdGVuZXJzRm9yTm9kZUNtZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01f
Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoRE9NX2Nv
cHlOb2RlQ21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRPTV9jb3B5Tm9kZSk7CiAg
ICAgICAgZGlzcGF0Y2hNYXAuYWRkKERPTV9nZXRPdXRlckhUTUxDbWQsICZJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6RE9NX2dldE91dGVySFRNTCk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRk
KERPTV9zZXRPdXRlckhUTUxDbWQsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9NX3Nl
dE91dGVySFRNTCk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKERPTV9wZXJmb3JtU2VhcmNoQ21k
LCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRPTV9wZXJmb3JtU2VhcmNoKTsKICAgICAg
ICBkaXNwYXRjaE1hcC5hZGQoRE9NX2NhbmNlbFNlYXJjaENtZCwgJkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpET01fY2FuY2VsU2VhcmNoKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoRE9N
X3B1c2hOb2RlVG9Gcm9udGVuZENtZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01f
cHVzaE5vZGVUb0Zyb250ZW5kKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoRE9NX3NldFNlYXJj
aGluZ0Zvck5vZGVDbWQsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RE9NX3NldFNlYXJj
aGluZ0Zvck5vZGUpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZChET01faGlnaGxpZ2h0RE9NTm9k
ZUNtZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01faGlnaGxpZ2h0RE9NTm9kZSk7
CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKERPTV9oaWRlRE9NTm9kZUhpZ2hsaWdodENtZCwgJklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpET01faGlkZURPTU5vZGVIaWdobGlnaHQpOwogICAg
ICAgIGRpc3BhdGNoTWFwLmFkZChET01faGlnaGxpZ2h0RnJhbWVDbWQsICZJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6RE9NX2hpZ2hsaWdodEZyYW1lKTsKICAgICAgICBkaXNwYXRjaE1hcC5h
ZGQoRE9NX2hpZGVGcmFtZUhpZ2hsaWdodENtZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpET01faGlkZUZyYW1lSGlnaGxpZ2h0KTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoRE9NX3B1
c2hOb2RlQnlQYXRoVG9Gcm9udGVuZENtZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpE
T01fcHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoRE9N
X3Jlc29sdmVOb2RlQ21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRPTV9yZXNvbHZl
Tm9kZSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKENTU19nZXRTdHlsZXNGb3JOb2RlQ21kLCAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNTU19nZXRTdHlsZXNGb3JOb2RlKTsKICAgICAg
ICBkaXNwYXRjaE1hcC5hZGQoQ1NTX2dldENvbXB1dGVkU3R5bGVGb3JOb2RlQ21kLCAmSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OkNTU19nZXRDb21wdXRlZFN0eWxlRm9yTm9kZSk7CiAgICAg
ICAgZGlzcGF0Y2hNYXAuYWRkKENTU19nZXRJbmxpbmVTdHlsZUZvck5vZGVDbWQsICZJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q1NTX2dldElubGluZVN0eWxlRm9yTm9kZSk7CiAgICAgICAg
ZGlzcGF0Y2hNYXAuYWRkKENTU19nZXRBbGxTdHlsZVNoZWV0c0NtZCwgJkluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpDU1NfZ2V0QWxsU3R5bGVTaGVldHMpOwogICAgICAgIGRpc3BhdGNoTWFw
LmFkZChDU1NfZ2V0U3R5bGVTaGVldENtZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpD
U1NfZ2V0U3R5bGVTaGVldCk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKENTU19nZXRTdHlsZVNo
ZWV0VGV4dENtZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDU1NfZ2V0U3R5bGVTaGVl
dFRleHQpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZChDU1Nfc2V0U3R5bGVTaGVldFRleHRDbWQs
ICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q1NTX3NldFN0eWxlU2hlZXRUZXh0KTsKICAg
ICAgICBkaXNwYXRjaE1hcC5hZGQoQ1NTX3NldFByb3BlcnR5VGV4dENtZCwgJkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpDU1Nfc2V0UHJvcGVydHlUZXh0KTsKICAgICAgICBkaXNwYXRjaE1h
cC5hZGQoQ1NTX3RvZ2dsZVByb3BlcnR5Q21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OkNTU190b2dnbGVQcm9wZXJ0eSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKENTU19zZXRSdWxl
U2VsZWN0b3JDbWQsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q1NTX3NldFJ1bGVTZWxl
Y3Rvcik7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKENTU19hZGRSdWxlQ21kLCAmSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OkNTU19hZGRSdWxlKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQo
Q1NTX2dldFN1cHBvcnRlZENTU1Byb3BlcnRpZXNDbWQsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6Q1NTX2dldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMpOwogICAgICAgIGRpc3BhdGNoTWFw
LmFkZChUaW1lbGluZV9zdGFydENtZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpUaW1l
bGluZV9zdGFydCk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKFRpbWVsaW5lX3N0b3BDbWQsICZJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6VGltZWxpbmVfc3RvcCk7CiAgICAgICAgZGlzcGF0
Y2hNYXAuYWRkKERlYnVnZ2VyX2VuYWJsZUNtZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpEZWJ1Z2dlcl9lbmFibGUpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZChEZWJ1Z2dlcl9kaXNh
YmxlQ21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRlYnVnZ2VyX2Rpc2FibGUpOwog
ICAgICAgIGRpc3BhdGNoTWFwLmFkZChEZWJ1Z2dlcl9zZXRCcmVha3BvaW50c0FjdGl2ZUNtZCwg
Jkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpEZWJ1Z2dlcl9zZXRCcmVha3BvaW50c0FjdGl2
ZSk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKERlYnVnZ2VyX3NldEJyZWFrcG9pbnRCeVVybENt
ZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpEZWJ1Z2dlcl9zZXRCcmVha3BvaW50QnlV
cmwpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZChEZWJ1Z2dlcl9zZXRCcmVha3BvaW50Q21kLCAm
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRlYnVnZ2VyX3NldEJyZWFrcG9pbnQpOwogICAg
ICAgIGRpc3BhdGNoTWFwLmFkZChEZWJ1Z2dlcl9yZW1vdmVCcmVha3BvaW50Q21kLCAmSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OkRlYnVnZ2VyX3JlbW92ZUJyZWFrcG9pbnQpOwogICAgICAg
IGRpc3BhdGNoTWFwLmFkZChEZWJ1Z2dlcl9jb250aW51ZVRvTG9jYXRpb25DbWQsICZJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RGVidWdnZXJfY29udGludWVUb0xvY2F0aW9uKTsKICAgICAg
ICBkaXNwYXRjaE1hcC5hZGQoRGVidWdnZXJfc3RlcE92ZXJDbWQsICZJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6RGVidWdnZXJfc3RlcE92ZXIpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZChE
ZWJ1Z2dlcl9zdGVwSW50b0NtZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpEZWJ1Z2dl
cl9zdGVwSW50byk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKERlYnVnZ2VyX3N0ZXBPdXRDbWQs
ICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RGVidWdnZXJfc3RlcE91dCk7CiAgICAgICAg
ZGlzcGF0Y2hNYXAuYWRkKERlYnVnZ2VyX3BhdXNlQ21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OkRlYnVnZ2VyX3BhdXNlKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoRGVidWdnZXJf
cmVzdW1lQ21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkRlYnVnZ2VyX3Jlc3VtZSk7
CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKERlYnVnZ2VyX2VkaXRTY3JpcHRTb3VyY2VDbWQsICZJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RGVidWdnZXJfZWRpdFNjcmlwdFNvdXJjZSk7CiAg
ICAgICAgZGlzcGF0Y2hNYXAuYWRkKERlYnVnZ2VyX2dldFNjcmlwdFNvdXJjZUNtZCwgJkluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpEZWJ1Z2dlcl9nZXRTY3JpcHRTb3VyY2UpOwogICAgICAg
IGRpc3BhdGNoTWFwLmFkZChEZWJ1Z2dlcl9zZXRQYXVzZU9uRXhjZXB0aW9uc0NtZCwgJkluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpEZWJ1Z2dlcl9zZXRQYXVzZU9uRXhjZXB0aW9ucyk7CiAg
ICAgICAgZGlzcGF0Y2hNYXAuYWRkKERlYnVnZ2VyX2V2YWx1YXRlT25DYWxsRnJhbWVDbWQsICZJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6RGVidWdnZXJfZXZhbHVhdGVPbkNhbGxGcmFtZSk7
CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKEJyb3dzZXJEZWJ1Z2dlcl9zZXRET01CcmVha3BvaW50
Q21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkJyb3dzZXJEZWJ1Z2dlcl9zZXRET01C
cmVha3BvaW50KTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoQnJvd3NlckRlYnVnZ2VyX3JlbW92
ZURPTUJyZWFrcG9pbnRDbWQsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6QnJvd3NlckRl
YnVnZ2VyX3JlbW92ZURPTUJyZWFrcG9pbnQpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZChCcm93
c2VyRGVidWdnZXJfc2V0RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRDbWQsICZJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6QnJvd3NlckRlYnVnZ2VyX3NldEV2ZW50TGlzdGVuZXJCcmVha3BvaW50
KTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoQnJvd3NlckRlYnVnZ2VyX3JlbW92ZUV2ZW50TGlz
dGVuZXJCcmVha3BvaW50Q21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkJyb3dzZXJE
ZWJ1Z2dlcl9yZW1vdmVFdmVudExpc3RlbmVyQnJlYWtwb2ludCk7CiAgICAgICAgZGlzcGF0Y2hN
YXAuYWRkKEJyb3dzZXJEZWJ1Z2dlcl9zZXRYSFJCcmVha3BvaW50Q21kLCAmSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OkJyb3dzZXJEZWJ1Z2dlcl9zZXRYSFJCcmVha3BvaW50KTsKICAgICAg
ICBkaXNwYXRjaE1hcC5hZGQoQnJvd3NlckRlYnVnZ2VyX3JlbW92ZVhIUkJyZWFrcG9pbnRDbWQs
ICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6QnJvd3NlckRlYnVnZ2VyX3JlbW92ZVhIUkJy
ZWFrcG9pbnQpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZChQcm9maWxlcl9lbmFibGVDbWQsICZJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UHJvZmlsZXJfZW5hYmxlKTsKICAgICAgICBkaXNw
YXRjaE1hcC5hZGQoUHJvZmlsZXJfZGlzYWJsZUNtZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpQcm9maWxlcl9kaXNhYmxlKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoUHJvZmlsZXJf
aXNFbmFibGVkQ21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlByb2ZpbGVyX2lzRW5h
YmxlZCk7CiAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKFByb2ZpbGVyX3N0YXJ0Q21kLCAmSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OlByb2ZpbGVyX3N0YXJ0KTsKICAgICAgICBkaXNwYXRjaE1h
cC5hZGQoUHJvZmlsZXJfc3RvcENtZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpQcm9m
aWxlcl9zdG9wKTsKICAgICAgICBkaXNwYXRjaE1hcC5hZGQoUHJvZmlsZXJfZ2V0UHJvZmlsZUhl
YWRlcnNDbWQsICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6UHJvZmlsZXJfZ2V0UHJvZmls
ZUhlYWRlcnMpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZChQcm9maWxlcl9nZXRQcm9maWxlQ21k
LCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlByb2ZpbGVyX2dldFByb2ZpbGUpOwogICAg
ICAgIGRpc3BhdGNoTWFwLmFkZChQcm9maWxlcl9yZW1vdmVQcm9maWxlQ21kLCAmSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OlByb2ZpbGVyX3JlbW92ZVByb2ZpbGUpOwogICAgICAgIGRpc3Bh
dGNoTWFwLmFkZChQcm9maWxlcl9jbGVhclByb2ZpbGVzQ21kLCAmSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OlByb2ZpbGVyX2NsZWFyUHJvZmlsZXMpOwogICAgICAgIGRpc3BhdGNoTWFwLmFk
ZChQcm9maWxlcl90YWtlSGVhcFNuYXBzaG90Q21kLCAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OlByb2ZpbGVyX3Rha2VIZWFwU25hcHNob3QpOwogICAgICAgIGRpc3BhdGNoTWFwLmFkZChQ
cm9maWxlcl9jb2xsZWN0R2FyYmFnZUNtZCwgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpQ
cm9maWxlcl9jb2xsZWN0R2FyYmFnZSk7CiAgICB9CgogICAgUmVmUHRyPEluc3BlY3RvclZhbHVl
PiBwYXJzZWRNZXNzYWdlID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihtZXNzYWdlKTsKICAg
IGlmICghcGFyc2VkTWVzc2FnZSkgewogICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElk
LCBQYXJzZUVycm9yLCAiTWVzc2FnZSBzaG91bGQgYmUgaW4gSlNPTiBmb3JtYXQuIik7CiAgICAg
ICAgcmV0dXJuOwogICAgfQoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2VPYmpl
Y3QgPSBwYXJzZWRNZXNzYWdlLT5hc09iamVjdCgpOwogICAgaWYgKCFtZXNzYWdlT2JqZWN0KSB7
CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIEludmFsaWRSZXF1ZXN0LCAiSW52
YWxpZCBtZXNzYWdlIGZvcm1hdC4gVGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGEgSlNPTmlmaWVkIG9i
amVjdC4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgUmVmUHRyPEluc3BlY3RvclZhbHVl
PiBtZXRob2RWYWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdldCgibWV0aG9kIik7CiAgICBpZiAoIW1l
dGhvZFZhbHVlKSB7CiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIEludmFsaWRS
ZXF1ZXN0LCAiSW52YWxpZCBtZXNzYWdlIGZvcm1hdC4gJ21ldGhvZCcgcHJvcGVydHkgd2Fzbid0
IGZvdW5kLiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBTdHJpbmcgbWV0aG9kOwogICAg
aWYgKCFtZXRob2RWYWx1ZS0+YXNTdHJpbmcoJm1ldGhvZCkpIHsKICAgICAgICByZXBvcnRQcm90
b2NvbEVycm9yKGNhbGxJZCwgSW52YWxpZFJlcXVlc3QsICJJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0
LiBUaGUgdHlwZSBvZiAnbWV0aG9kJyBwcm9wZXJ0eSBzaG91bGQgYmUgc3RyaW5nLiIpOwogICAg
ICAgIHJldHVybjsKICAgIH0KCiAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGNhbGxJZFZhbHVl
ID0gbWVzc2FnZU9iamVjdC0+Z2V0KCJpZCIpOwogICAgaWYgKCFjYWxsSWRWYWx1ZSkgewogICAg
ICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBJbnZhbGlkUmVxdWVzdCwgIkludmFsaWQg
bWVzc2FnZSBmb3JtYXQuICdpZCcgcHJvcGVydHkgd2FzIG5vdCBmb3VuZCBpbiB0aGUgcmVxdWVz
dC4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFjYWxsSWRWYWx1ZS0+YXNOdW1i
ZXIoJmNhbGxJZCkpIHsKICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgSW52YWxp
ZFJlcXVlc3QsICJJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0LiBUaGUgdHlwZSBvZiAnaWQnIHByb3Bl
cnR5IHNob3VsZCBiZSBudW1iZXIuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIEhhc2hN
YXA8U3RyaW5nLCBDYWxsSGFuZGxlcj46Oml0ZXJhdG9yIGl0ID0gZGlzcGF0Y2hNYXAuZmluZCht
ZXRob2QpOwogICAgaWYgKGl0ID09IGRpc3BhdGNoTWFwLmVuZCgpKSB7CiAgICAgICAgcmVwb3J0
UHJvdG9jb2xFcnJvcihjYWxsSWQsIE1ldGhvZE5vdEZvdW5kLCBtYWtlU3RyaW5nKCJJbnZhbGlk
IG1ldGhvZCBuYW1lIHdhcyByZWNlaXZlZC4gJyIsIG1ldGhvZCwgIicgd2Fzbid0IGZvdW5kLiIp
KTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgKCgqdGhpcykuKml0LT5zZWNvbmQpKGNhbGxJ
ZCwgbWVzc2FnZU9iamVjdC5nZXQoKSk7Cn0KCnZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OnJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyBjYWxsSWQsIENvbW1vbkVycm9yQ29k
ZSBjb2RlLCBjb25zdCBTdHJpbmcmIGN1c3RvbVRleHQpIGNvbnN0CnsKICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gZGF0YSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgIGRhdGEtPnB1
c2hTdHJpbmcoY3VzdG9tVGV4dCk7CiAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgY29k
ZSwgZGF0YS5yZWxlYXNlKCkpOwp9Cgp2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpy
ZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcgY2FsbElkLCBDb21tb25FcnJvckNvZGUgY29k
ZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gZGF0YSkgY29uc3QKewogICAgc3RhdGljIFZl
Y3RvcjxTdHJpbmc+IGNvbW1vbkVycm9yczsKICAgIGlmICghY29tbW9uRXJyb3JzLnNpemUoKSkg
ewogICAgICAgIGNvbW1vbkVycm9ycy5pbnNlcnQoUGFyc2VFcnJvciwgIntcImNvZGVcIjotMzI3
MDAsXCJtZXNzYWdlXCI6XCJQYXJzZSBlcnJvci5cIn0iKTsKICAgICAgICBjb21tb25FcnJvcnMu
aW5zZXJ0KEludmFsaWRSZXF1ZXN0LCAie1wiY29kZVwiOi0zMjYwMCxcIm1lc3NhZ2VcIjpcIklu
dmFsaWQgUmVxdWVzdC5cIn0iKTsKICAgICAgICBjb21tb25FcnJvcnMuaW5zZXJ0KE1ldGhvZE5v
dEZvdW5kLCAie1wiY29kZVwiOi0zMjYwMSxcIm1lc3NhZ2VcIjpcIk1ldGhvZCBub3QgZm91bmQu
XCJ9Iik7CiAgICAgICAgY29tbW9uRXJyb3JzLmluc2VydChJbnZhbGlkUGFyYW1zLCAie1wiY29k
ZVwiOi0zMjYwMixcIm1lc3NhZ2VcIjpcIkludmFsaWQgcGFyYW1zLlwifSIpOwogICAgICAgIGNv
bW1vbkVycm9ycy5pbnNlcnQoSW50ZXJuYWxFcnJvciwgIntcImNvZGVcIjotMzI2MDMsXCJtZXNz
YWdlXCI6XCJJbnRlcm5hbCBlcnJvci5cIn0iKTsKICAgICAgICBjb21tb25FcnJvcnMuaW5zZXJ0
KFNlcnZlckVycm9yLCAie1wiY29kZVwiOi0zMjAwMCxcIm1lc3NhZ2VcIjpcIlNlcnZlciBlcnJv
ci5cIn0iKTsKICAgIH0KICAgIEFTU0VSVChjb2RlID49MCk7CiAgICBBU1NFUlQoKHVuc2lnbmVk
KWNvZGUgPCBjb21tb25FcnJvcnMuc2l6ZSgpKTsKICAgIEFTU0VSVChjb21tb25FcnJvcnNbY29k
ZV0pOwogICAgQVNTRVJUKEluc3BlY3Rvck9iamVjdDo6cGFyc2VKU09OKGNvbW1vbkVycm9yc1tj
b2RlXSkpOwogICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZXJyb3IgPSBJbnNwZWN0b3JPYmpl
Y3Q6OnBhcnNlSlNPTihjb21tb25FcnJvcnNbY29kZV0pLT5hc09iamVjdCgpOwogICAgQVNTRVJU
KGVycm9yKTsKICAgIGVycm9yLT5zZXRBcnJheSgiZGF0YSIsIGRhdGEpOwogICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gbWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICBt
ZXNzYWdlLT5zZXRPYmplY3QoImVycm9yIiwgZXJyb3IpOwogICAgbWVzc2FnZS0+c2V0TnVtYmVy
KCJpZCIsIGNhbGxJZCk7CiAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3Nh
Z2VUb0Zyb250ZW5kKG1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKfQoKaW50IEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRJbnQoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCBvcHRpb25hbCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3Jz
KQp7CiAgICBBU1NFUlQob2JqZWN0KTsKICAgIEFTU0VSVChwcm90b2NvbEVycm9ycyk7CgogICAg
aW50IHZhbHVlID0gMDsKICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
b2JqZWN0LT5lbmQoKTsKICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgdmFsdWVJ
dGVyYXRvciA9IG9iamVjdC0+ZmluZChuYW1lKTsKCiAgICBpZiAodmFsdWVJdGVyYXRvciA9PSBl
bmQpIHsKICAgICAgICBpZiAoIW9wdGlvbmFsKQogICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+
cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdOdW1i
ZXInIHdhcyBub3QgZm91bmQuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CiAgICAgICAgcmV0dXJu
IHZhbHVlOwogICAgfQoKICAgIGlmICghdmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc051bWJlcigm
dmFsdWUpKQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0
KCJQYXJhbWV0ZXIgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgc2hvdWxkIGJlICdOdW1iZXInLiIs
IG5hbWUudXRmOCgpLmRhdGEoKSkpOwogICAgcmV0dXJuIHZhbHVlOwp9CgpTdHJpbmcgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBib29sIG9wdGlvbmFsLCBJbnNwZWN0b3JBcnJheSogcHJvdG9j
b2xFcnJvcnMpCnsKICAgIEFTU0VSVChvYmplY3QpOwogICAgQVNTRVJUKHByb3RvY29sRXJyb3Jz
KTsKCiAgICBTdHJpbmcgdmFsdWUgPSAiIjsKICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gb2JqZWN0LT5lbmQoKTsKICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRl
cmF0b3IgdmFsdWVJdGVyYXRvciA9IG9iamVjdC0+ZmluZChuYW1lKTsKCiAgICBpZiAodmFsdWVJ
dGVyYXRvciA9PSBlbmQpIHsKICAgICAgICBpZiAoIW9wdGlvbmFsKQogICAgICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgd2l0
aCB0eXBlICdTdHJpbmcnIHdhcyBub3QgZm91bmQuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CiAg
ICAgICAgcmV0dXJuIHZhbHVlOwogICAgfQoKICAgIGlmICghdmFsdWVJdGVyYXRvci0+c2Vjb25k
LT5hc1N0cmluZygmdmFsdWUpKQogICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0
cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgc2hvdWxkIGJl
ICdTdHJpbmcnLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOwogICAgcmV0dXJuIHZhbHVlOwp9Cgpi
b29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRCb29sZWFuKEluc3BlY3Rvck9iamVj
dCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgb3B0aW9uYWwsIEluc3BlY3RvckFy
cmF5KiBwcm90b2NvbEVycm9ycykKewogICAgQVNTRVJUKG9iamVjdCk7CiAgICBBU1NFUlQocHJv
dG9jb2xFcnJvcnMpOwoKICAgIGJvb2wgdmFsdWUgPSBmYWxzZTsKICAgIEluc3BlY3Rvck9iamVj
dDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gb2JqZWN0LT5lbmQoKTsKICAgIEluc3BlY3Rvck9iamVj
dDo6Y29uc3RfaXRlcmF0b3IgdmFsdWVJdGVyYXRvciA9IG9iamVjdC0+ZmluZChuYW1lKTsKCiAg
ICBpZiAodmFsdWVJdGVyYXRvciA9PSBlbmQpIHsKICAgICAgICBpZiAoIW9wdGlvbmFsKQogICAg
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1l
dGVyICclcycgd2l0aCB0eXBlICdCb29sZWFuJyB3YXMgbm90IGZvdW5kLiIsIG5hbWUudXRmOCgp
LmRhdGEoKSkpOwogICAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0KCiAgICBpZiAoIXZhbHVlSXRl
cmF0b3ItPnNlY29uZC0+YXNCb29sZWFuKCZ2YWx1ZSkpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMt
PnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIGhhcyB3cm9uZyB0eXBl
LiBJdCBzaG91bGQgYmUgJ0Jvb2xlYW4nLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOwogICAgcmV0
dXJuIHZhbHVlOwp9CgpQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmdldE9iamVjdChJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sIG9wdGlvbmFsLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMp
CnsKICAgIEFTU0VSVChvYmplY3QpOwogICAgQVNTRVJUKHByb3RvY29sRXJyb3JzKTsKCiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG9iamVjdC0+ZW5kKCk7
CiAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHZhbHVlSXRlcmF0b3IgPSBvYmpl
Y3QtPmZpbmQobmFtZSk7CgogICAgaWYgKHZhbHVlSXRlcmF0b3IgPT0gZW5kKSB7CiAgICAgICAg
aWYgKCFvcHRpb25hbCkKICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3Ry
aW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnT2JqZWN0JyB3YXMgbm90IGZv
dW5kLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOwogICAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0K
CiAgICBpZiAoIXZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNPYmplY3QoJnZhbHVlKSkKICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICcl
cycgaGFzIHdyb25nIHR5cGUuIEl0IHNob3VsZCBiZSAnT2JqZWN0Jy4iLCBuYW1lLnV0ZjgoKS5k
YXRhKCkpKTsKICAgIHJldHVybiB2YWx1ZTsKfQoKUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4g
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEFycmF5KEluc3BlY3Rvck9iamVjdCogb2Jq
ZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgb3B0aW9uYWwsIEluc3BlY3RvckFycmF5KiBw
cm90b2NvbEVycm9ycykKewogICAgQVNTRVJUKG9iamVjdCk7CiAgICBBU1NFUlQocHJvdG9jb2xF
cnJvcnMpOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CiAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG9i
amVjdC0+ZW5kKCk7CiAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHZhbHVlSXRl
cmF0b3IgPSBvYmplY3QtPmZpbmQobmFtZSk7CgogICAgaWYgKHZhbHVlSXRlcmF0b3IgPT0gZW5k
KSB7CiAgICAgICAgaWYgKCFvcHRpb25hbCkKICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnQXJyYXkn
IHdhcyBub3QgZm91bmQuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CiAgICAgICAgcmV0dXJuIHZh
bHVlOwogICAgfQoKICAgIGlmICghdmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc0FycmF5KCZ2YWx1
ZSkpCiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBh
cmFtZXRlciAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBzaG91bGQgYmUgJ0FycmF5Jy4iLCBuYW1l
LnV0ZjgoKS5kYXRhKCkpKTsKICAgIHJldHVybiB2YWx1ZTsKfQpib29sIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpnZXRDb21tYW5kTmFtZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFN0cmlu
ZyogcmVzdWx0KQp7CiAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlID0gSW5zcGVjdG9y
VmFsdWU6OnBhcnNlSlNPTihtZXNzYWdlKTsKICAgIGlmICghdmFsdWUpCiAgICAgICAgcmV0dXJu
IGZhbHNlOwoKICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdCA9IHZhbHVlLT5hc09i
amVjdCgpOwogICAgaWYgKCFvYmplY3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIGlmICgh
b2JqZWN0LT5nZXRTdHJpbmcoIm1ldGhvZCIsIHJlc3VsdCkpCiAgICAgICAgcmV0dXJuIGZhbHNl
OwoKICAgIHJldHVybiB0cnVlOwp9CgoKfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1IpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>88453</attachid>
            <date>2011-04-06 09:48:13 -0700</date>
            <delta_ts>2011-04-06 09:48:13 -0700</delta_ts>
            <desc>InspectorBackendStub.js</desc>
            <filename>InspectorBackendStub.js</filename>
            <type>application/javascript</type>
            <size>20465</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">Ly8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgovLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgoK
SW5zcGVjdG9yQmFja2VuZFN0dWIgPSBmdW5jdGlvbigpCnsKICAgIHRoaXMuX2xhc3RDYWxsYmFj
a0lkID0gMTsKICAgIHRoaXMuX3BlbmRpbmdSZXNwb25zZXNDb3VudCA9IDA7CiAgICB0aGlzLl9j
YWxsYmFja3MgPSB7fTsKICAgIHRoaXMuX2RvbWFpbkRpc3BhdGNoZXJzID0ge307CiAgICB0aGlz
Ll9yZWdpc3RlckRlbGVnYXRlKCd7Im1ldGhvZCI6ICJJbnNwZWN0b3IuZGlkRXZhbHVhdGVGb3JU
ZXN0SW5Gcm9udGVuZCIsICJwYXJhbXMiOiB7InRlc3RDYWxsSWQiOiB7Im9wdGlvbmFsIjogZmFs
c2UsICJ0eXBlIjogIm51bWJlciJ9LCJqc29uUmVzdWx0IjogeyJvcHRpb25hbCI6IGZhbHNlLCAi
dHlwZSI6ICJzdHJpbmcifX0sICJpZCI6IDB9Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRl
KCd7Im1ldGhvZCI6ICJQYWdlLmFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQiLCAicGFyYW1zIjog
eyJzY3JpcHRTb3VyY2UiOiB7Im9wdGlvbmFsIjogZmFsc2UsICJ0eXBlIjogInN0cmluZyJ9fSwg
ImlkIjogMH0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sibWV0aG9kIjogIlBhZ2Uu
cmVtb3ZlQWxsU2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQiLCAiaWQiOiAwfScpOwogICAgdGhpcy5f
cmVnaXN0ZXJEZWxlZ2F0ZSgneyJtZXRob2QiOiAiUGFnZS5yZWxvYWRQYWdlIiwgInBhcmFtcyI6
IHsiaWdub3JlQ2FjaGUiOiB7Im9wdGlvbmFsIjogdHJ1ZSAsICJ0eXBlIjogImJvb2xlYW4ifX0s
ICJpZCI6IDB9Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7Im1ldGhvZCI6ICJQYWdl
Lm9wZW5Jbkluc3BlY3RlZFdpbmRvdyIsICJwYXJhbXMiOiB7InVybCI6IHsib3B0aW9uYWwiOiBm
YWxzZSwgInR5cGUiOiAic3RyaW5nIn19LCAiaWQiOiAwfScpOwogICAgdGhpcy5fcmVnaXN0ZXJE
ZWxlZ2F0ZSgneyJtZXRob2QiOiAiUGFnZS5zZXRVc2VyQWdlbnRPdmVycmlkZSIsICJwYXJhbXMi
OiB7InVzZXJBZ2VudCI6IHsib3B0aW9uYWwiOiBmYWxzZSwgInR5cGUiOiAic3RyaW5nIn19LCAi
aWQiOiAwfScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJtZXRob2QiOiAiUGFnZS5n
ZXRDb29raWVzIiwgImlkIjogMH0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sibWV0
aG9kIjogIlBhZ2UuZGVsZXRlQ29va2llIiwgInBhcmFtcyI6IHsiY29va2llTmFtZSI6IHsib3B0
aW9uYWwiOiBmYWxzZSwgInR5cGUiOiAic3RyaW5nIn0sImRvbWFpbiI6IHsib3B0aW9uYWwiOiBm
YWxzZSwgInR5cGUiOiAic3RyaW5nIn19LCAiaWQiOiAwfScpOwogICAgdGhpcy5fcmVnaXN0ZXJE
ZWxlZ2F0ZSgneyJtZXRob2QiOiAiUnVudGltZS5ldmFsdWF0ZSIsICJwYXJhbXMiOiB7ImV4cHJl
c3Npb24iOiB7Im9wdGlvbmFsIjogZmFsc2UsICJ0eXBlIjogInN0cmluZyJ9LCJvYmplY3RHcm91
cCI6IHsib3B0aW9uYWwiOiBmYWxzZSwgInR5cGUiOiAic3RyaW5nIn0sImluY2x1ZGVDb21tYW5k
TGluZUFQSSI6IHsib3B0aW9uYWwiOiB0cnVlICwgInR5cGUiOiAiYm9vbGVhbiJ9fSwgImlkIjog
MH0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sibWV0aG9kIjogIlJ1bnRpbWUuZXZh
bHVhdGVPbiIsICJwYXJhbXMiOiB7Im9iamVjdElkIjogeyJvcHRpb25hbCI6IGZhbHNlLCAidHlw
ZSI6ICJzdHJpbmcifSwiZXhwcmVzc2lvbiI6IHsib3B0aW9uYWwiOiBmYWxzZSwgInR5cGUiOiAi
c3RyaW5nIn19LCAiaWQiOiAwfScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJtZXRo
b2QiOiAiUnVudGltZS5nZXRQcm9wZXJ0aWVzIiwgInBhcmFtcyI6IHsib2JqZWN0SWQiOiB7Im9w
dGlvbmFsIjogZmFsc2UsICJ0eXBlIjogInN0cmluZyJ9LCJpZ25vcmVIYXNPd25Qcm9wZXJ0eSI6
IHsib3B0aW9uYWwiOiBmYWxzZSwgInR5cGUiOiAiYm9vbGVhbiJ9fSwgImlkIjogMH0nKTsKICAg
IHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sibWV0aG9kIjogIlJ1bnRpbWUuc2V0UHJvcGVydHlW
YWx1ZSIsICJwYXJhbXMiOiB7Im9iamVjdElkIjogeyJvcHRpb25hbCI6IGZhbHNlLCAidHlwZSI6
ICJzdHJpbmcifSwicHJvcGVydHlOYW1lIjogeyJvcHRpb25hbCI6IGZhbHNlLCAidHlwZSI6ICJz
dHJpbmcifSwiZXhwcmVzc2lvbiI6IHsib3B0aW9uYWwiOiBmYWxzZSwgInR5cGUiOiAic3RyaW5n
In19LCAiaWQiOiAwfScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJtZXRob2QiOiAi
UnVudGltZS5yZWxlYXNlT2JqZWN0IiwgInBhcmFtcyI6IHsib2JqZWN0SWQiOiB7Im9wdGlvbmFs
IjogZmFsc2UsICJ0eXBlIjogInN0cmluZyJ9fSwgImlkIjogMH0nKTsKICAgIHRoaXMuX3JlZ2lz
dGVyRGVsZWdhdGUoJ3sibWV0aG9kIjogIlJ1bnRpbWUucmVsZWFzZU9iamVjdEdyb3VwIiwgInBh
cmFtcyI6IHsib2JqZWN0R3JvdXAiOiB7Im9wdGlvbmFsIjogZmFsc2UsICJ0eXBlIjogInN0cmlu
ZyJ9fSwgImlkIjogMH0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sibWV0aG9kIjog
IkNvbnNvbGUuZW5hYmxlIiwgImlkIjogMH0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUo
J3sibWV0aG9kIjogIkNvbnNvbGUuZGlzYWJsZSIsICJpZCI6IDB9Jyk7CiAgICB0aGlzLl9yZWdp
c3RlckRlbGVnYXRlKCd7Im1ldGhvZCI6ICJDb25zb2xlLmNsZWFyQ29uc29sZU1lc3NhZ2VzIiwg
ImlkIjogMH0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sibWV0aG9kIjogIkNvbnNv
bGUuc2V0TW9uaXRvcmluZ1hIUkVuYWJsZWQiLCAicGFyYW1zIjogeyJlbmFibGVkIjogeyJvcHRp
b25hbCI6IGZhbHNlLCAidHlwZSI6ICJib29sZWFuIn19LCAiaWQiOiAwfScpOwogICAgdGhpcy5f
cmVnaXN0ZXJEZWxlZ2F0ZSgneyJtZXRob2QiOiAiQ29uc29sZS5hZGRJbnNwZWN0ZWROb2RlIiwg
InBhcmFtcyI6IHsibm9kZUlkIjogeyJvcHRpb25hbCI6IGZhbHNlLCAidHlwZSI6ICJudW1iZXIi
fX0sICJpZCI6IDB9Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7Im1ldGhvZCI6ICJO
ZXR3b3JrLmVuYWJsZSIsICJpZCI6IDB9Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7
Im1ldGhvZCI6ICJOZXR3b3JrLmRpc2FibGUiLCAiaWQiOiAwfScpOwogICAgdGhpcy5fcmVnaXN0
ZXJEZWxlZ2F0ZSgneyJtZXRob2QiOiAiTmV0d29yay5nZXRDYWNoZWRSZXNvdXJjZXMiLCAiaWQi
OiAwfScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJtZXRob2QiOiAiTmV0d29yay5n
ZXRSZXNvdXJjZUNvbnRlbnQiLCAicGFyYW1zIjogeyJmcmFtZUlkIjogeyJvcHRpb25hbCI6IGZh
bHNlLCAidHlwZSI6ICJzdHJpbmcifSwidXJsIjogeyJvcHRpb25hbCI6IGZhbHNlLCAidHlwZSI6
ICJzdHJpbmcifSwiYmFzZTY0RW5jb2RlIjogeyJvcHRpb25hbCI6IHRydWUgLCAidHlwZSI6ICJi
b29sZWFuIn19LCAiaWQiOiAwfScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJtZXRo
b2QiOiAiTmV0d29yay5zZXRFeHRyYUhlYWRlcnMiLCAicGFyYW1zIjogeyJoZWFkZXJzIjogeyJv
cHRpb25hbCI6IGZhbHNlLCAidHlwZSI6ICJvYmplY3QifX0sICJpZCI6IDB9Jyk7CiAgICB0aGlz
Ll9yZWdpc3RlckRlbGVnYXRlKCd7Im1ldGhvZCI6ICJEYXRhYmFzZS5nZXREYXRhYmFzZVRhYmxl
TmFtZXMiLCAicGFyYW1zIjogeyJkYXRhYmFzZUlkIjogeyJvcHRpb25hbCI6IGZhbHNlLCAidHlw
ZSI6ICJudW1iZXIifX0sICJpZCI6IDB9Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7
Im1ldGhvZCI6ICJEYXRhYmFzZS5leGVjdXRlU1FMIiwgInBhcmFtcyI6IHsiZGF0YWJhc2VJZCI6
IHsib3B0aW9uYWwiOiBmYWxzZSwgInR5cGUiOiAibnVtYmVyIn0sInF1ZXJ5IjogeyJvcHRpb25h
bCI6IGZhbHNlLCAidHlwZSI6ICJzdHJpbmcifX0sICJpZCI6IDB9Jyk7CiAgICB0aGlzLl9yZWdp
c3RlckRlbGVnYXRlKCd7Im1ldGhvZCI6ICJET01TdG9yYWdlLmdldERPTVN0b3JhZ2VFbnRyaWVz
IiwgInBhcmFtcyI6IHsic3RvcmFnZUlkIjogeyJvcHRpb25hbCI6IGZhbHNlLCAidHlwZSI6ICJu
dW1iZXIifX0sICJpZCI6IDB9Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7Im1ldGhv
ZCI6ICJET01TdG9yYWdlLnNldERPTVN0b3JhZ2VJdGVtIiwgInBhcmFtcyI6IHsic3RvcmFnZUlk
IjogeyJvcHRpb25hbCI6IGZhbHNlLCAidHlwZSI6ICJudW1iZXIifSwia2V5IjogeyJvcHRpb25h
bCI6IGZhbHNlLCAidHlwZSI6ICJzdHJpbmcifSwidmFsdWUiOiB7Im9wdGlvbmFsIjogZmFsc2Us
ICJ0eXBlIjogInN0cmluZyJ9fSwgImlkIjogMH0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdh
dGUoJ3sibWV0aG9kIjogIkRPTVN0b3JhZ2UucmVtb3ZlRE9NU3RvcmFnZUl0ZW0iLCAicGFyYW1z
IjogeyJzdG9yYWdlSWQiOiB7Im9wdGlvbmFsIjogZmFsc2UsICJ0eXBlIjogIm51bWJlciJ9LCJr
ZXkiOiB7Im9wdGlvbmFsIjogZmFsc2UsICJ0eXBlIjogInN0cmluZyJ9fSwgImlkIjogMH0nKTsK
ICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sibWV0aG9kIjogIkFwcGxpY2F0aW9uQ2FjaGUu
Z2V0QXBwbGljYXRpb25DYWNoZXMiLCAiaWQiOiAwfScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxl
Z2F0ZSgneyJtZXRob2QiOiAiRE9NLmdldERvY3VtZW50IiwgImlkIjogMH0nKTsKICAgIHRoaXMu
X3JlZ2lzdGVyRGVsZWdhdGUoJ3sibWV0aG9kIjogIkRPTS5nZXRDaGlsZE5vZGVzIiwgInBhcmFt
cyI6IHsibm9kZUlkIjogeyJvcHRpb25hbCI6IGZhbHNlLCAidHlwZSI6ICJudW1iZXIifX0sICJp
ZCI6IDB9Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7Im1ldGhvZCI6ICJET00ucXVl
cnlTZWxlY3RvciIsICJwYXJhbXMiOiB7Im5vZGVJZCI6IHsib3B0aW9uYWwiOiBmYWxzZSwgInR5
cGUiOiAibnVtYmVyIn0sInNlbGVjdG9ycyI6IHsib3B0aW9uYWwiOiBmYWxzZSwgInR5cGUiOiAi
c3RyaW5nIn19LCAiaWQiOiAwfScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJtZXRo
b2QiOiAiRE9NLnF1ZXJ5U2VsZWN0b3JBbGwiLCAicGFyYW1zIjogeyJub2RlSWQiOiB7Im9wdGlv
bmFsIjogZmFsc2UsICJ0eXBlIjogIm51bWJlciJ9LCJzZWxlY3RvcnMiOiB7Im9wdGlvbmFsIjog
ZmFsc2UsICJ0eXBlIjogInN0cmluZyJ9fSwgImlkIjogMH0nKTsKICAgIHRoaXMuX3JlZ2lzdGVy
RGVsZWdhdGUoJ3sibWV0aG9kIjogIkRPTS5zZXROb2RlTmFtZSIsICJwYXJhbXMiOiB7Im5vZGVJ
ZCI6IHsib3B0aW9uYWwiOiBmYWxzZSwgInR5cGUiOiAibnVtYmVyIn0sIm5hbWUiOiB7Im9wdGlv
bmFsIjogZmFsc2UsICJ0eXBlIjogInN0cmluZyJ9fSwgImlkIjogMH0nKTsKICAgIHRoaXMuX3Jl
Z2lzdGVyRGVsZWdhdGUoJ3sibWV0aG9kIjogIkRPTS5zZXROb2RlVmFsdWUiLCAicGFyYW1zIjog
eyJub2RlSWQiOiB7Im9wdGlvbmFsIjogZmFsc2UsICJ0eXBlIjogIm51bWJlciJ9LCJ2YWx1ZSI6
IHsib3B0aW9uYWwiOiBmYWxzZSwgInR5cGUiOiAic3RyaW5nIn19LCAiaWQiOiAwfScpOwogICAg
dGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJtZXRob2QiOiAiRE9NLnJlbW92ZU5vZGUiLCAicGFy
YW1zIjogeyJub2RlSWQiOiB7Im9wdGlvbmFsIjogZmFsc2UsICJ0eXBlIjogIm51bWJlciJ9fSwg
ImlkIjogMH0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sibWV0aG9kIjogIkRPTS5z
ZXRBdHRyaWJ1dGUiLCAicGFyYW1zIjogeyJlbGVtZW50SWQiOiB7Im9wdGlvbmFsIjogZmFsc2Us
ICJ0eXBlIjogIm51bWJlciJ9LCJuYW1lIjogeyJvcHRpb25hbCI6IGZhbHNlLCAidHlwZSI6ICJz
dHJpbmcifSwidmFsdWUiOiB7Im9wdGlvbmFsIjogZmFsc2UsICJ0eXBlIjogInN0cmluZyJ9fSwg
ImlkIjogMH0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sibWV0aG9kIjogIkRPTS5y
ZW1vdmVBdHRyaWJ1dGUiLCAicGFyYW1zIjogeyJlbGVtZW50SWQiOiB7Im9wdGlvbmFsIjogZmFs
c2UsICJ0eXBlIjogIm51bWJlciJ9LCJuYW1lIjogeyJvcHRpb25hbCI6IGZhbHNlLCAidHlwZSI6
ICJzdHJpbmcifX0sICJpZCI6IDB9Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7Im1l
dGhvZCI6ICJET00uZ2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlIiwgInBhcmFtcyI6IHsibm9kZUlk
IjogeyJvcHRpb25hbCI6IGZhbHNlLCAidHlwZSI6ICJudW1iZXIifX0sICJpZCI6IDB9Jyk7CiAg
ICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7Im1ldGhvZCI6ICJET00uY29weU5vZGUiLCAicGFy
YW1zIjogeyJub2RlSWQiOiB7Im9wdGlvbmFsIjogZmFsc2UsICJ0eXBlIjogIm51bWJlciJ9fSwg
ImlkIjogMH0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sibWV0aG9kIjogIkRPTS5n
ZXRPdXRlckhUTUwiLCAicGFyYW1zIjogeyJub2RlSWQiOiB7Im9wdGlvbmFsIjogZmFsc2UsICJ0
eXBlIjogIm51bWJlciJ9fSwgImlkIjogMH0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUo
J3sibWV0aG9kIjogIkRPTS5zZXRPdXRlckhUTUwiLCAicGFyYW1zIjogeyJub2RlSWQiOiB7Im9w
dGlvbmFsIjogZmFsc2UsICJ0eXBlIjogIm51bWJlciJ9LCJvdXRlckhUTUwiOiB7Im9wdGlvbmFs
IjogZmFsc2UsICJ0eXBlIjogInN0cmluZyJ9fSwgImlkIjogMH0nKTsKICAgIHRoaXMuX3JlZ2lz
dGVyRGVsZWdhdGUoJ3sibWV0aG9kIjogIkRPTS5wZXJmb3JtU2VhcmNoIiwgInBhcmFtcyI6IHsi
cXVlcnkiOiB7Im9wdGlvbmFsIjogZmFsc2UsICJ0eXBlIjogInN0cmluZyJ9LCJydW5TeW5jaHJv
bm91c2x5IjogeyJvcHRpb25hbCI6IGZhbHNlLCAidHlwZSI6ICJib29sZWFuIn19LCAiaWQiOiAw
fScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJtZXRob2QiOiAiRE9NLmNhbmNlbFNl
YXJjaCIsICJpZCI6IDB9Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7Im1ldGhvZCI6
ICJET00ucHVzaE5vZGVUb0Zyb250ZW5kIiwgInBhcmFtcyI6IHsib2JqZWN0SWQiOiB7Im9wdGlv
bmFsIjogZmFsc2UsICJ0eXBlIjogInN0cmluZyJ9fSwgImlkIjogMH0nKTsKICAgIHRoaXMuX3Jl
Z2lzdGVyRGVsZWdhdGUoJ3sibWV0aG9kIjogIkRPTS5zZXRTZWFyY2hpbmdGb3JOb2RlIiwgInBh
cmFtcyI6IHsiZW5hYmxlZCI6IHsib3B0aW9uYWwiOiBmYWxzZSwgInR5cGUiOiAiYm9vbGVhbiJ9
fSwgImlkIjogMH0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sibWV0aG9kIjogIkRP
TS5oaWdobGlnaHRET01Ob2RlIiwgInBhcmFtcyI6IHsibm9kZUlkIjogeyJvcHRpb25hbCI6IGZh
bHNlLCAidHlwZSI6ICJudW1iZXIifX0sICJpZCI6IDB9Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRl
bGVnYXRlKCd7Im1ldGhvZCI6ICJET00uaGlkZURPTU5vZGVIaWdobGlnaHQiLCAiaWQiOiAwfScp
OwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJtZXRob2QiOiAiRE9NLmhpZ2hsaWdodEZy
YW1lIiwgInBhcmFtcyI6IHsiZnJhbWVJZCI6IHsib3B0aW9uYWwiOiBmYWxzZSwgInR5cGUiOiAi
c3RyaW5nIn19LCAiaWQiOiAwfScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJtZXRo
b2QiOiAiRE9NLmhpZGVGcmFtZUhpZ2hsaWdodCIsICJpZCI6IDB9Jyk7CiAgICB0aGlzLl9yZWdp
c3RlckRlbGVnYXRlKCd7Im1ldGhvZCI6ICJET00ucHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kIiwg
InBhcmFtcyI6IHsicGF0aCI6IHsib3B0aW9uYWwiOiBmYWxzZSwgInR5cGUiOiAic3RyaW5nIn19
LCAiaWQiOiAwfScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJtZXRob2QiOiAiRE9N
LnJlc29sdmVOb2RlIiwgInBhcmFtcyI6IHsibm9kZUlkIjogeyJvcHRpb25hbCI6IGZhbHNlLCAi
dHlwZSI6ICJudW1iZXIifX0sICJpZCI6IDB9Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRl
KCd7Im1ldGhvZCI6ICJDU1MuZ2V0U3R5bGVzRm9yTm9kZSIsICJwYXJhbXMiOiB7Im5vZGVJZCI6
IHsib3B0aW9uYWwiOiBmYWxzZSwgInR5cGUiOiAibnVtYmVyIn19LCAiaWQiOiAwfScpOwogICAg
dGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJtZXRob2QiOiAiQ1NTLmdldENvbXB1dGVkU3R5bGVG
b3JOb2RlIiwgInBhcmFtcyI6IHsibm9kZUlkIjogeyJvcHRpb25hbCI6IGZhbHNlLCAidHlwZSI6
ICJudW1iZXIifX0sICJpZCI6IDB9Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7Im1l
dGhvZCI6ICJDU1MuZ2V0SW5saW5lU3R5bGVGb3JOb2RlIiwgInBhcmFtcyI6IHsibm9kZUlkIjog
eyJvcHRpb25hbCI6IGZhbHNlLCAidHlwZSI6ICJudW1iZXIifX0sICJpZCI6IDB9Jyk7CiAgICB0
aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7Im1ldGhvZCI6ICJDU1MuZ2V0QWxsU3R5bGVTaGVldHMi
LCAiaWQiOiAwfScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJtZXRob2QiOiAiQ1NT
LmdldFN0eWxlU2hlZXQiLCAicGFyYW1zIjogeyJzdHlsZVNoZWV0SWQiOiB7Im9wdGlvbmFsIjog
ZmFsc2UsICJ0eXBlIjogInN0cmluZyJ9fSwgImlkIjogMH0nKTsKICAgIHRoaXMuX3JlZ2lzdGVy
RGVsZWdhdGUoJ3sibWV0aG9kIjogIkNTUy5nZXRTdHlsZVNoZWV0VGV4dCIsICJwYXJhbXMiOiB7
InN0eWxlU2hlZXRJZCI6IHsib3B0aW9uYWwiOiBmYWxzZSwgInR5cGUiOiAic3RyaW5nIn19LCAi
aWQiOiAwfScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJtZXRob2QiOiAiQ1NTLnNl
dFN0eWxlU2hlZXRUZXh0IiwgInBhcmFtcyI6IHsic3R5bGVTaGVldElkIjogeyJvcHRpb25hbCI6
IGZhbHNlLCAidHlwZSI6ICJzdHJpbmcifSwidGV4dCI6IHsib3B0aW9uYWwiOiBmYWxzZSwgInR5
cGUiOiAic3RyaW5nIn19LCAiaWQiOiAwfScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgn
eyJtZXRob2QiOiAiQ1NTLnNldFByb3BlcnR5VGV4dCIsICJwYXJhbXMiOiB7InN0eWxlSWQiOiB7
Im9wdGlvbmFsIjogZmFsc2UsICJ0eXBlIjogIm9iamVjdCJ9LCJwcm9wZXJ0eUluZGV4IjogeyJv
cHRpb25hbCI6IGZhbHNlLCAidHlwZSI6ICJudW1iZXIifSwidGV4dCI6IHsib3B0aW9uYWwiOiBm
YWxzZSwgInR5cGUiOiAic3RyaW5nIn0sIm92ZXJ3cml0ZSI6IHsib3B0aW9uYWwiOiBmYWxzZSwg
InR5cGUiOiAiYm9vbGVhbiJ9fSwgImlkIjogMH0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdh
dGUoJ3sibWV0aG9kIjogIkNTUy50b2dnbGVQcm9wZXJ0eSIsICJwYXJhbXMiOiB7InN0eWxlSWQi
OiB7Im9wdGlvbmFsIjogZmFsc2UsICJ0eXBlIjogIm9iamVjdCJ9LCJwcm9wZXJ0eUluZGV4Ijog
eyJvcHRpb25hbCI6IGZhbHNlLCAidHlwZSI6ICJudW1iZXIifSwiZGlzYWJsZSI6IHsib3B0aW9u
YWwiOiBmYWxzZSwgInR5cGUiOiAiYm9vbGVhbiJ9fSwgImlkIjogMH0nKTsKICAgIHRoaXMuX3Jl
Z2lzdGVyRGVsZWdhdGUoJ3sibWV0aG9kIjogIkNTUy5zZXRSdWxlU2VsZWN0b3IiLCAicGFyYW1z
IjogeyJydWxlSWQiOiB7Im9wdGlvbmFsIjogZmFsc2UsICJ0eXBlIjogIm9iamVjdCJ9LCJzZWxl
Y3RvciI6IHsib3B0aW9uYWwiOiBmYWxzZSwgInR5cGUiOiAic3RyaW5nIn19LCAiaWQiOiAwfScp
OwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJtZXRob2QiOiAiQ1NTLmFkZFJ1bGUiLCAi
cGFyYW1zIjogeyJjb250ZXh0Tm9kZUlkIjogeyJvcHRpb25hbCI6IGZhbHNlLCAidHlwZSI6ICJu
dW1iZXIifSwic2VsZWN0b3IiOiB7Im9wdGlvbmFsIjogZmFsc2UsICJ0eXBlIjogInN0cmluZyJ9
fSwgImlkIjogMH0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sibWV0aG9kIjogIkNT
Uy5nZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzIiwgImlkIjogMH0nKTsKICAgIHRoaXMuX3JlZ2lz
dGVyRGVsZWdhdGUoJ3sibWV0aG9kIjogIlRpbWVsaW5lLnN0YXJ0IiwgImlkIjogMH0nKTsKICAg
IHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sibWV0aG9kIjogIlRpbWVsaW5lLnN0b3AiLCAiaWQi
OiAwfScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJtZXRob2QiOiAiRGVidWdnZXIu
ZW5hYmxlIiwgImlkIjogMH0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sibWV0aG9k
IjogIkRlYnVnZ2VyLmRpc2FibGUiLCAiaWQiOiAwfScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxl
Z2F0ZSgneyJtZXRob2QiOiAiRGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUiLCAicGFyYW1z
IjogeyJhY3RpdmUiOiB7Im9wdGlvbmFsIjogZmFsc2UsICJ0eXBlIjogImJvb2xlYW4ifX0sICJp
ZCI6IDB9Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7Im1ldGhvZCI6ICJEZWJ1Z2dl
ci5zZXRCcmVha3BvaW50QnlVcmwiLCAicGFyYW1zIjogeyJ1cmwiOiB7Im9wdGlvbmFsIjogZmFs
c2UsICJ0eXBlIjogInN0cmluZyJ9LCJsaW5lTnVtYmVyIjogeyJvcHRpb25hbCI6IGZhbHNlLCAi
dHlwZSI6ICJudW1iZXIifSwiY29sdW1uTnVtYmVyIjogeyJvcHRpb25hbCI6IHRydWUgLCAidHlw
ZSI6ICJudW1iZXIifSwiY29uZGl0aW9uIjogeyJvcHRpb25hbCI6IHRydWUgLCAidHlwZSI6ICJz
dHJpbmcifSwiZW5hYmxlZCI6IHsib3B0aW9uYWwiOiB0cnVlICwgInR5cGUiOiAiYm9vbGVhbiJ9
fSwgImlkIjogMH0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sibWV0aG9kIjogIkRl
YnVnZ2VyLnNldEJyZWFrcG9pbnQiLCAicGFyYW1zIjogeyJzb3VyY2VJZCI6IHsib3B0aW9uYWwi
OiBmYWxzZSwgInR5cGUiOiAic3RyaW5nIn0sImxpbmVOdW1iZXIiOiB7Im9wdGlvbmFsIjogZmFs
c2UsICJ0eXBlIjogIm51bWJlciJ9LCJjb2x1bW5OdW1iZXIiOiB7Im9wdGlvbmFsIjogdHJ1ZSAs
ICJ0eXBlIjogIm51bWJlciJ9LCJjb25kaXRpb24iOiB7Im9wdGlvbmFsIjogdHJ1ZSAsICJ0eXBl
IjogInN0cmluZyJ9LCJlbmFibGVkIjogeyJvcHRpb25hbCI6IHRydWUgLCAidHlwZSI6ICJib29s
ZWFuIn19LCAiaWQiOiAwfScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJtZXRob2Qi
OiAiRGVidWdnZXIucmVtb3ZlQnJlYWtwb2ludCIsICJwYXJhbXMiOiB7ImJyZWFrcG9pbnRJZCI6
IHsib3B0aW9uYWwiOiBmYWxzZSwgInR5cGUiOiAic3RyaW5nIn19LCAiaWQiOiAwfScpOwogICAg
dGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJtZXRob2QiOiAiRGVidWdnZXIuY29udGludWVUb0xv
Y2F0aW9uIiwgInBhcmFtcyI6IHsic291cmNlSWQiOiB7Im9wdGlvbmFsIjogZmFsc2UsICJ0eXBl
IjogInN0cmluZyJ9LCJsaW5lTnVtYmVyIjogeyJvcHRpb25hbCI6IGZhbHNlLCAidHlwZSI6ICJu
dW1iZXIifSwiY29sdW1uTnVtYmVyIjogeyJvcHRpb25hbCI6IGZhbHNlLCAidHlwZSI6ICJudW1i
ZXIifX0sICJpZCI6IDB9Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7Im1ldGhvZCI6
ICJEZWJ1Z2dlci5zdGVwT3ZlciIsICJpZCI6IDB9Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVn
YXRlKCd7Im1ldGhvZCI6ICJEZWJ1Z2dlci5zdGVwSW50byIsICJpZCI6IDB9Jyk7CiAgICB0aGlz
Ll9yZWdpc3RlckRlbGVnYXRlKCd7Im1ldGhvZCI6ICJEZWJ1Z2dlci5zdGVwT3V0IiwgImlkIjog
MH0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sibWV0aG9kIjogIkRlYnVnZ2VyLnBh
dXNlIiwgImlkIjogMH0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sibWV0aG9kIjog
IkRlYnVnZ2VyLnJlc3VtZSIsICJpZCI6IDB9Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRl
KCd7Im1ldGhvZCI6ICJEZWJ1Z2dlci5lZGl0U2NyaXB0U291cmNlIiwgInBhcmFtcyI6IHsic291
cmNlSUQiOiB7Im9wdGlvbmFsIjogZmFsc2UsICJ0eXBlIjogInN0cmluZyJ9LCJuZXdDb250ZW50
IjogeyJvcHRpb25hbCI6IGZhbHNlLCAidHlwZSI6ICJzdHJpbmcifX0sICJpZCI6IDB9Jyk7CiAg
ICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7Im1ldGhvZCI6ICJEZWJ1Z2dlci5nZXRTY3JpcHRT
b3VyY2UiLCAicGFyYW1zIjogeyJzb3VyY2VJRCI6IHsib3B0aW9uYWwiOiBmYWxzZSwgInR5cGUi
OiAic3RyaW5nIn19LCAiaWQiOiAwfScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJt
ZXRob2QiOiAiRGVidWdnZXIuc2V0UGF1c2VPbkV4Y2VwdGlvbnMiLCAicGFyYW1zIjogeyJzdGF0
ZSI6IHsib3B0aW9uYWwiOiBmYWxzZSwgInR5cGUiOiAic3RyaW5nIn19LCAiaWQiOiAwfScpOwog
ICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJtZXRob2QiOiAiRGVidWdnZXIuZXZhbHVhdGVP
bkNhbGxGcmFtZSIsICJwYXJhbXMiOiB7ImNhbGxGcmFtZUlkIjogeyJvcHRpb25hbCI6IGZhbHNl
LCAidHlwZSI6ICJzdHJpbmcifSwiZXhwcmVzc2lvbiI6IHsib3B0aW9uYWwiOiBmYWxzZSwgInR5
cGUiOiAic3RyaW5nIn0sIm9iamVjdEdyb3VwIjogeyJvcHRpb25hbCI6IGZhbHNlLCAidHlwZSI6
ICJzdHJpbmcifSwiaW5jbHVkZUNvbW1hbmRMaW5lQVBJIjogeyJvcHRpb25hbCI6IHRydWUgLCAi
dHlwZSI6ICJib29sZWFuIn19LCAiaWQiOiAwfScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0
ZSgneyJtZXRob2QiOiAiQnJvd3NlckRlYnVnZ2VyLnNldERPTUJyZWFrcG9pbnQiLCAicGFyYW1z
IjogeyJub2RlSWQiOiB7Im9wdGlvbmFsIjogZmFsc2UsICJ0eXBlIjogIm51bWJlciJ9LCJ0eXBl
IjogeyJvcHRpb25hbCI6IGZhbHNlLCAidHlwZSI6ICJudW1iZXIifX0sICJpZCI6IDB9Jyk7CiAg
ICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7Im1ldGhvZCI6ICJCcm93c2VyRGVidWdnZXIucmVt
b3ZlRE9NQnJlYWtwb2ludCIsICJwYXJhbXMiOiB7Im5vZGVJZCI6IHsib3B0aW9uYWwiOiBmYWxz
ZSwgInR5cGUiOiAibnVtYmVyIn0sInR5cGUiOiB7Im9wdGlvbmFsIjogZmFsc2UsICJ0eXBlIjog
Im51bWJlciJ9fSwgImlkIjogMH0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sibWV0
aG9kIjogIkJyb3dzZXJEZWJ1Z2dlci5zZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludCIsICJwYXJh
bXMiOiB7ImV2ZW50TmFtZSI6IHsib3B0aW9uYWwiOiBmYWxzZSwgInR5cGUiOiAic3RyaW5nIn19
LCAiaWQiOiAwfScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJtZXRob2QiOiAiQnJv
d3NlckRlYnVnZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXJCcmVha3BvaW50IiwgInBhcmFtcyI6IHsi
ZXZlbnROYW1lIjogeyJvcHRpb25hbCI6IGZhbHNlLCAidHlwZSI6ICJzdHJpbmcifX0sICJpZCI6
IDB9Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7Im1ldGhvZCI6ICJCcm93c2VyRGVi
dWdnZXIuc2V0WEhSQnJlYWtwb2ludCIsICJwYXJhbXMiOiB7InVybCI6IHsib3B0aW9uYWwiOiBm
YWxzZSwgInR5cGUiOiAic3RyaW5nIn19LCAiaWQiOiAwfScpOwogICAgdGhpcy5fcmVnaXN0ZXJE
ZWxlZ2F0ZSgneyJtZXRob2QiOiAiQnJvd3NlckRlYnVnZ2VyLnJlbW92ZVhIUkJyZWFrcG9pbnQi
LCAicGFyYW1zIjogeyJ1cmwiOiB7Im9wdGlvbmFsIjogZmFsc2UsICJ0eXBlIjogInN0cmluZyJ9
fSwgImlkIjogMH0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sibWV0aG9kIjogIlBy
b2ZpbGVyLmVuYWJsZSIsICJpZCI6IDB9Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7
Im1ldGhvZCI6ICJQcm9maWxlci5kaXNhYmxlIiwgImlkIjogMH0nKTsKICAgIHRoaXMuX3JlZ2lz
dGVyRGVsZWdhdGUoJ3sibWV0aG9kIjogIlByb2ZpbGVyLmlzRW5hYmxlZCIsICJpZCI6IDB9Jyk7
CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7Im1ldGhvZCI6ICJQcm9maWxlci5zdGFydCIs
ICJpZCI6IDB9Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7Im1ldGhvZCI6ICJQcm9m
aWxlci5zdG9wIiwgImlkIjogMH0nKTsKICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3sibWV0
aG9kIjogIlByb2ZpbGVyLmdldFByb2ZpbGVIZWFkZXJzIiwgImlkIjogMH0nKTsKICAgIHRoaXMu
X3JlZ2lzdGVyRGVsZWdhdGUoJ3sibWV0aG9kIjogIlByb2ZpbGVyLmdldFByb2ZpbGUiLCAicGFy
YW1zIjogeyJ0eXBlIjogeyJvcHRpb25hbCI6IGZhbHNlLCAidHlwZSI6ICJzdHJpbmcifSwidWlk
IjogeyJvcHRpb25hbCI6IGZhbHNlLCAidHlwZSI6ICJudW1iZXIifX0sICJpZCI6IDB9Jyk7CiAg
ICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7Im1ldGhvZCI6ICJQcm9maWxlci5yZW1vdmVQcm9m
aWxlIiwgInBhcmFtcyI6IHsidHlwZSI6IHsib3B0aW9uYWwiOiBmYWxzZSwgInR5cGUiOiAic3Ry
aW5nIn0sInVpZCI6IHsib3B0aW9uYWwiOiBmYWxzZSwgInR5cGUiOiAibnVtYmVyIn19LCAiaWQi
OiAwfScpOwogICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyJtZXRob2QiOiAiUHJvZmlsZXIu
Y2xlYXJQcm9maWxlcyIsICJpZCI6IDB9Jyk7CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7
Im1ldGhvZCI6ICJQcm9maWxlci50YWtlSGVhcFNuYXBzaG90IiwgInBhcmFtcyI6IHsiZGV0YWls
ZWQiOiB7Im9wdGlvbmFsIjogZmFsc2UsICJ0eXBlIjogImJvb2xlYW4ifX0sICJpZCI6IDB9Jyk7
CiAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7Im1ldGhvZCI6ICJQcm9maWxlci5jb2xsZWN0
R2FyYmFnZSIsICJpZCI6IDB9Jyk7Cn0KCkluc3BlY3RvckJhY2tlbmRTdHViLnByb3RvdHlwZSA9
IHsKICAgIF93cmFwOiBmdW5jdGlvbihjYWxsYmFjaykKICAgIHsKICAgICAgICB2YXIgY2FsbGJh
Y2tJZCA9IHRoaXMuX2xhc3RDYWxsYmFja0lkKys7CiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2Nh
bGxiYWNrSWRdID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTsKICAgICAgICByZXR1cm4gY2Fs
bGJhY2tJZDsKICAgIH0sCgogICAgX3JlZ2lzdGVyRGVsZWdhdGU6IGZ1bmN0aW9uKHJlcXVlc3RT
dHJpbmcpCiAgICB7CiAgICAgICAgdmFyIGRvbWFpbkFuZEZ1bmN0aW9uID0gSlNPTi5wYXJzZShy
ZXF1ZXN0U3RyaW5nKS5tZXRob2Quc3BsaXQoIi4iKTsKICAgICAgICB2YXIgYWdlbnROYW1lID0g
ZG9tYWluQW5kRnVuY3Rpb25bMF0gKyAiQWdlbnQiOwogICAgICAgIGlmICghd2luZG93W2FnZW50
TmFtZV0pCiAgICAgICAgICAgIHdpbmRvd1thZ2VudE5hbWVdID0ge307CiAgICAgICAgd2luZG93
W2FnZW50TmFtZV1bZG9tYWluQW5kRnVuY3Rpb25bMV1dID0gdGhpcy5zZW5kTWVzc2FnZVRvQmFj
a2VuZC5iaW5kKHRoaXMsIHJlcXVlc3RTdHJpbmcpOwogICAgfSwKCiAgICBzZW5kTWVzc2FnZVRv
QmFja2VuZDogZnVuY3Rpb24oKQogICAgewogICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90
eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTsKICAgICAgICB2YXIgcmVxdWVzdCA9IEpTT04ucGFy
c2UoYXJncy5zaGlmdCgpKTsKICAgICAgICB2YXIgY2FsbGJhY2sgPSAoYXJncy5sZW5ndGggJiYg
dHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gImZ1bmN0aW9uIikgPyBhcmdzLnBvcCgp
IDogMDsKICAgICAgICB2YXIgZG9tYWluQW5kTWV0aG9kID0gcmVxdWVzdC5tZXRob2Quc3BsaXQo
Ii4iKTsKICAgICAgICB2YXIgYWdlbnRNZXRob2QgPSBkb21haW5BbmRNZXRob2RbMF0gKyAiQWdl
bnQuIiArIGRvbWFpbkFuZE1ldGhvZFsxXTsKCiAgICAgICAgaWYgKHJlcXVlc3QucGFyYW1zKSB7
CiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiByZXF1ZXN0LnBhcmFtcykgewogICAgICAgICAg
ICAgICAgdmFyIHR5cGVOYW1lID0gcmVxdWVzdC5wYXJhbXNba2V5XS50eXBlOwogICAgICAgICAg
ICAgICAgdmFyIG9wdGlvbmFsRmxhZyA9IHJlcXVlc3QucGFyYW1zW2tleV0ub3B0aW9uYWw7Cgog
ICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwICYmICFvcHRpb25hbEZsYWcpIHsK
ICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBFcnJvcjogSW52YWxp
ZCBudW1iZXIgb2YgYXJndW1lbnRzIGZvciBtZXRob2QgJyIgKyBhZ2VudE1ldGhvZCArICInIGNh
bGwuIEl0IHNob3VsZCBoYXZlIHRoZSBuZXh0IGFyZ3VtZW50cyAnIiArIEpTT04uc3RyaW5naWZ5
KHJlcXVlc3QucGFyYW1zKSArICInLiIpOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBhcmdzLnNoaWZ0KCk7
CiAgICAgICAgICAgICAgICBpZiAob3B0aW9uYWxGbGFnICYmIHR5cGVvZiB2YWx1ZSA9PT0gInVu
ZGVmaW5lZCIpIHsKICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVxdWVzdC5wYXJhbXNba2V5
XTsKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSB0eXBlTmFtZSkgewogICAgICAgICAgICAg
ICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29sIEVycm9yOiBJbnZhbGlkIHR5cGUgb2YgYXJn
dW1lbnQgJyIgKyBrZXkgKyAiJyBmb3IgbWV0aG9kICciICsgYWdlbnRNZXRob2QgKyAiJyBjYWxs
LiBJdCBzaG91bGQgYmUgJyIgKyB0eXBlTmFtZSArICInIGJ1dCBpdCBpcyAnIiArIHR5cGVvZiB2
YWx1ZSArICInLiIpOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAg
IH0KCiAgICAgICAgICAgICAgICByZXF1ZXN0LnBhcmFtc1trZXldID0gdmFsdWU7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiAhY2FsbGJh
Y2spIHsKICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdICE9PSAidW5kZWZpbmVkIikgewog
ICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IE9wdGlvbmFsIGNh
bGxiYWNrIGFyZ3VtZW50IGZvciBtZXRob2QgJyIgKyBhZ2VudE1ldGhvZCArICInIGNhbGwgc2hv
dWxkIGJlIGEgZnVuY3Rpb24gYnV0IGl0cyB0eXBlIGlzICciICsgdHlwZW9mIGFyZ3NbMF0gKyAi
Jy4iKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg
ICAgICByZXF1ZXN0LmlkID0gdGhpcy5fd3JhcChjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9KTsK
CiAgICAgICAgaWYgKHdpbmRvdy5kdW1wSW5zcGVjdG9yUHJvdG9jb2xNZXNzYWdlcykKICAgICAg
ICAgICAgY29uc29sZS5sb2coImZyb250ZW5kOiAiICsgSlNPTi5zdHJpbmdpZnkocmVxdWVzdCkp
OwoKICAgICAgICB2YXIgbWVzc2FnZSA9IEpTT04uc3RyaW5naWZ5KHJlcXVlc3QpOwoKICAgICAg
ICArK3RoaXMuX3BlbmRpbmdSZXNwb25zZXNDb3VudDsKICAgICAgICBJbnNwZWN0b3JGcm9udGVu
ZEhvc3Quc2VuZE1lc3NhZ2VUb0JhY2tlbmQobWVzc2FnZSk7CiAgICB9LAoKICAgIHJlZ2lzdGVy
RG9tYWluRGlzcGF0Y2hlcjogZnVuY3Rpb24oZG9tYWluLCBkaXNwYXRjaGVyKQogICAgewogICAg
ICAgIHRoaXMuX2RvbWFpbkRpc3BhdGNoZXJzW2RvbWFpbl0gPSBkaXNwYXRjaGVyOwogICAgfSwK
CiAgICBkaXNwYXRjaDogZnVuY3Rpb24obWVzc2FnZSkKICAgIHsKICAgICAgICBpZiAod2luZG93
LmR1bXBJbnNwZWN0b3JQcm90b2NvbE1lc3NhZ2VzKQogICAgICAgICAgICBjb25zb2xlLmxvZygi
YmFja2VuZDogIiArICgodHlwZW9mIG1lc3NhZ2UgPT09ICJzdHJpbmciKSA/IG1lc3NhZ2UgOiBK
U09OLnN0cmluZ2lmeShtZXNzYWdlKSkpOwoKICAgICAgICB2YXIgbWVzc2FnZU9iamVjdCA9ICh0
eXBlb2YgbWVzc2FnZSA9PT0gInN0cmluZyIpID8gSlNPTi5wYXJzZShtZXNzYWdlKSA6IG1lc3Nh
Z2U7CgogICAgICAgIGlmICgiaWQiIGluIG1lc3NhZ2VPYmplY3QpIHsgLy8ganVzdCBhIHJlc3Bv
bnNlIGZvciBzb21lIHJlcXVlc3QKICAgICAgICAgICAgaWYgKG1lc3NhZ2VPYmplY3QuZXJyb3Ig
JiYgbWVzc2FnZU9iamVjdC5lcnJvci5jb2RlICE9PSAtMzIwMDApCiAgICAgICAgICAgICAgICB0
aGlzLnJlcG9ydFByb3RvY29sRXJyb3IobWVzc2FnZU9iamVjdCk7CgogICAgICAgICAgICB2YXIg
YXJndW1lbnRzID0gW107CiAgICAgICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LnJlc3VsdCkgewog
ICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG1lc3NhZ2VPYmplY3QucmVzdWx0KQogICAg
ICAgICAgICAgICAgICAgIGFyZ3VtZW50cy5wdXNoKG1lc3NhZ2VPYmplY3QucmVzdWx0W2tleV0p
OwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSB0aGlzLl9jYWxsYmFj
a3NbbWVzc2FnZU9iamVjdC5pZF07CiAgICAgICAgICAgIGlmIChjYWxsYmFjaykgewogICAgICAg
ICAgICAgICAgYXJndW1lbnRzLnVuc2hpZnQobWVzc2FnZU9iamVjdC5lcnJvcik7CiAgICAgICAg
ICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgICAgICAgICAgICAg
LS10aGlzLl9wZW5kaW5nUmVzcG9uc2VzQ291bnQ7CiAgICAgICAgICAgICAgICBkZWxldGUgdGhp
cy5fY2FsbGJhY2tzW21lc3NhZ2VPYmplY3QuaWRdOwogICAgICAgICAgICB9CgogICAgICAgICAg
ICBpZiAodGhpcy5fc2NyaXB0cyAmJiAhdGhpcy5fcGVuZGluZ1Jlc3BvbnNlc0NvdW50KQogICAg
ICAgICAgICAgICAgdGhpcy5ydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzKCk7CgogICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIG1ldGhvZCA9IG1lc3Nh
Z2VPYmplY3QubWV0aG9kLnNwbGl0KCIuIik7CiAgICAgICAgICAgIHZhciBkb21haW5OYW1lID0g
bWV0aG9kWzBdOwogICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gbWV0aG9kWzFdOwogICAg
ICAgICAgICBpZiAoIShkb21haW5OYW1lIGluIHRoaXMuX2RvbWFpbkRpc3BhdGNoZXJzKSkgewog
ICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IHRoZSBtZXNzYWdl
IGlzIGZvciBub24tZXhpc3RpbmcgZG9tYWluICciICsgZG9tYWluTmFtZSArICInIik7CiAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIGRpc3BhdGNo
ZXIgPSB0aGlzLl9kb21haW5EaXNwYXRjaGVyc1tkb21haW5OYW1lXTsKICAgICAgICAgICAgaWYg
KCEoZnVuY3Rpb25OYW1lIGluIGRpc3BhdGNoZXIpKSB7CiAgICAgICAgICAgICAgICBjb25zb2xl
LmVycm9yKCJQcm90b2NvbCBFcnJvcjogQXR0ZW1wdGVkIHRvIGRpc3BhdGNoIGFuIHVuaW1wbGVt
ZW50ZWQgbWV0aG9kICciICsgbWVzc2FnZU9iamVjdC5tZXRob2QgKyAiJyIpOwogICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgcGFyYW1zID0gW107
CiAgICAgICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LnBhcmFtcykgewogICAgICAgICAgICAgICAg
Zm9yICh2YXIga2V5IGluIG1lc3NhZ2VPYmplY3QucGFyYW1zKQogICAgICAgICAgICAgICAgICAg
IHBhcmFtcy5wdXNoKG1lc3NhZ2VPYmplY3QucGFyYW1zW2tleV0pOwogICAgICAgICAgICB9Cgog
ICAgICAgICAgICBkaXNwYXRjaGVyW2Z1bmN0aW9uTmFtZV0uYXBwbHkoZGlzcGF0Y2hlciwgcGFy
YW1zKTsKICAgICAgICB9CiAgICB9LAoKICAgIHJlcG9ydFByb3RvY29sRXJyb3I6IGZ1bmN0aW9u
KG1lc3NhZ2VPYmplY3QpCiAgICB7CiAgICAgICAgdmFyIGVycm9yID0gbWVzc2FnZU9iamVjdC5l
cnJvcjsKICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yLm1lc3NhZ2UgKyAiKCIgKyBlcnJvci5j
b2RlICsgIik6IHJlcXVlc3Qgd2l0aCBpZCA9ICIgKyBtZXNzYWdlT2JqZWN0LmlkICsgIiBmYWls
ZWQuIik7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlcnJvci5kYXRhLmxlbmd0aDsgKytp
KQogICAgICAgICAgICBjb25zb2xlLmVycm9yKCIgICAgIiArIGVycm9yLmRhdGFbaV0pOwogICAg
fSwKCiAgICBydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzOiBmdW5jdGlvbihzY3JpcHQpCiAgICB7
CiAgICAgICAgaWYgKCF0aGlzLl9zY3JpcHRzKQogICAgICAgICAgICB0aGlzLl9zY3JpcHRzID0g
W107CgogICAgICAgIGlmIChzY3JpcHQpCiAgICAgICAgICAgIHRoaXMuX3NjcmlwdHMucHVzaChz
Y3JpcHQpOwoKICAgICAgICBpZiAoIXRoaXMuX3BlbmRpbmdSZXNwb25zZXNDb3VudCkgewogICAg
ICAgICAgICB2YXIgc2NyaXB0cyA9IHRoaXMuX3NjcmlwdHM7CiAgICAgICAgICAgIHRoaXMuX3Nj
cmlwdHMgPSBbXQogICAgICAgICAgICBmb3IgKHZhciBpZCA9IDA7IGlkIDwgc2NyaXB0cy5sZW5n
dGg7ICsraWQpCiAgICAgICAgICAgICAgICAgc2NyaXB0c1tpZF0uY2FsbCh0aGlzKTsKICAgICAg
ICB9CiAgICB9Cn0KCkluc3BlY3RvckJhY2tlbmQgPSBuZXcgSW5zcGVjdG9yQmFja2VuZFN0dWIo
KTs=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88455</attachid>
            <date>2011-04-06 09:49:22 -0700</date>
            <delta_ts>2011-04-06 09:53:31 -0700</delta_ts>
            <desc>[patch] initial version</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>45326</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjZjRkZjFlLi4yMzhkMDcwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTEtMDQt
MDYgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IG1pZ3Jh
dGUgSW5zcGVjdG9yIHByb3RvY29sIG1lc3NhZ2VzIGZvcm1hdCB0byBKU09OLVJQQy4KKworICAg
ICAgICBUaGVyZSBpcyBub3QgYSBzaWduaWZpY2FudCBkaWZmZXJlbmNlIGJldHdlZW4gIGluc3Bl
Y3RvciBtZXNzYWdlcyBzcGVjIGFuZCBhbmQgSlNPTi1SUEMgMi4wIG1lc3NhZ2VzIHNwZWMuCisg
ICAgICAgIEFsc28gSlNPTi1SUEMgaGFzIGEgcHJldHR5IGNsZWFyIHNwZWNpZmljYXRpb24gZm9y
IGVycm9yIGRlc2NyaXB0aW9ucyB3aGljaCB3ZSBoYXZlbid0LgorICAgICAgICBJdCB3YXMgZGVj
aWRlZCB0aGF0IHdlIHdpbGwgdXNlIGl0LgorCisgICAgICAgIHRoZSBsaXN0IG9mIHJlbmFtZXM6
CisgICAgICAgIDEpIHR5cGUtPiAvZGV2L251bGwKKyAgICAgICAgMikgZG9tYWluICsgJy4nICsg
ZXZlbnQgPT4gbWV0aG9kIC8vIGZvciBldmVudHMKKyAgICAgICAgMykgZG9tYWluICsgJy4nICsg
Y29tbWFuZCA9PiBtZXRob2QgLy8gZm9yIHJlcXVlc3RzCisgICAgICAgIDQpIHJlcXVlc3RJZCA9
PiBpZCAvLyBmb3IgcmVzcG9uc2VzCisgICAgICAgIDUpIGFyZ3VtZW50cyA9PiBwYXJhbXMgLy8g
Zm9yIHJlcXVlc3RzCisgICAgICAgIDYpIGRhdGEgPT4gcGFyYW1zIC8vIGZvciBldmVudHMKKyAg
ICAgICAgNykgYm9keSA9PiByZXN1bHQgLy8gZm9yIHJlc3BvbnNlcworCisgICAgICAgIHByb3Rv
Y29sRXJyb3JzIGFuZCBlcnJvciBwcm9wZXJ0aWVzIHdpbGwgYmUgY29udmVydGVkIHRvIEpTT04t
UlBDIGVycm9yIGZvcm1hdC4KKyAgICAgICAgVGhlIG9yZGVyIG9mIHByb3BlcnRpZXMgaW4gbWVz
c2FnZXMgYWxzbyB3aWxsIGJlIGFkanVzdGVkLgorICAgICAgICBUaGUgb25seSB0aGluZyB0aGF0
IGxvb2tzIHVubmVjZXNzYXJ5IGlzIGpzb25ycGMgcHJvcGVydHkuCisKKyAgICAgICAgKiBpbnNw
ZWN0b3IvcHJvdG9jb2wvY29uc29sZS1hZ2VudC1leHBlY3RlZC50eHQ6CisgICAgICAgICogaW5z
cGVjdG9yL3Byb3RvY29sL3J1bnRpbWUtYWdlbnQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGlu
c3BlY3Rvci9yZXBvcnQtQVBJLWVycm9ycy1leHBlY3RlZC50eHQ6CisgICAgICAgICogaW5zcGVj
dG9yL3JlcG9ydC1BUEktZXJyb3JzLmh0bWw6CisgICAgICAgICogaW5zcGVjdG9yL3JlcG9ydC1w
cm90b2NvbC1lcnJvcnMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGluc3BlY3Rvci9yZXBvcnQt
cHJvdG9jb2wtZXJyb3JzLmh0bWw6CisKIDIwMTEtMDQtMDYgIEFkcmllbm5lIFdhbGtlciAgPGVu
bmVAZ29vZ2xlLmNvbT4KIAogICAgICAgIFVucmV2aWV3ZWQsIGFkZCBDaHJvbWl1bSBzbm93IGxl
b3BhcmQgYmFzZWxpbmUgZm9yIG1ldGVyLWJvdW5kYXJ5LXZhbHVlcwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL3Byb3RvY29sL2NvbnNvbGUtYWdlbnQtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb3RvY29sL2NvbnNvbGUtYWdlbnQtZXhwZWN0ZWQudHh0
CmluZGV4IDMzMjVmZjAuLmJiZDVlNmQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9wcm90b2NvbC9jb25zb2xlLWFnZW50LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9p
bnNwZWN0b3IvcHJvdG9jb2wvY29uc29sZS1hZ2VudC1leHBlY3RlZC50eHQKQEAgLTcsMTYgKzcs
MTUgQEAgQ29uc29sZUFnZW50LmRpc2FibGUoKQogCiByZXF1ZXN0OgogeworICAgIG1ldGhvZCA6
ICJDb25zb2xlLmRpc2FibGUiCiAgICAgaWQgOiA8bnVtYmVyPgotICAgIGRvbWFpbiA6ICJDb25z
b2xlIgotICAgIGNvbW1hbmQgOiAiZGlzYWJsZSIKLSAgICBhcmd1bWVudHMgOiB7Ci0gICAgfQog
fQogCiByZXNwb25zZToKIHsKLSAgICByZXF1ZXN0SWQgOiA8bnVtYmVyPgorICAgIHJlc3VsdCA6
IHsKKyAgICB9CisgICAgaWQgOiA8bnVtYmVyPgogfQogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjQsMTkgKzIzLDE2IEBA
IENvbnNvbGVBZ2VudC5lbmFibGUoKQogCiByZXF1ZXN0OgogeworICAgIG1ldGhvZCA6ICJDb25z
b2xlLmVuYWJsZSIKICAgICBpZCA6IDxudW1iZXI+Ci0gICAgZG9tYWluIDogIkNvbnNvbGUiCi0g
ICAgY29tbWFuZCA6ICJlbmFibGUiCi0gICAgYXJndW1lbnRzIDogewotICAgIH0KIH0KIAogcmVz
cG9uc2U6CiB7Ci0gICAgcmVxdWVzdElkIDogPG51bWJlcj4KLSAgICBib2R5IDogeworICAgIHJl
c3VsdCA6IHsKICAgICAgICAgZXhwaXJlZE1lc3NhZ2VzQ291bnQgOiAwCiAgICAgfQorICAgIGlk
IDogPG51bWJlcj4KIH0KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ0LDIyICs0MCwxOSBAQCBSdW50aW1lQWdlbnQuZXZh
bHVhdGUoImNvbnNvbGUuaW5mbygndGVzdCcpOyBjb25zb2xlLmluZm8oJ3Rlc3QnKSIsInRlc3Qt
Z3JvdXAiLAogCiByZXF1ZXN0OgogewotICAgIGlkIDogPG51bWJlcj4KLSAgICBkb21haW4gOiAi
UnVudGltZSIKLSAgICBjb21tYW5kIDogImV2YWx1YXRlIgotICAgIGFyZ3VtZW50cyA6IHsKKyAg
ICBtZXRob2QgOiAiUnVudGltZS5ldmFsdWF0ZSIKKyAgICBwYXJhbXMgOiB7CiAgICAgICAgIGV4
cHJlc3Npb24gOiAiY29uc29sZS5pbmZvKCd0ZXN0Jyk7IGNvbnNvbGUuaW5mbygndGVzdCcpIgog
ICAgICAgICBvYmplY3RHcm91cCA6ICJ0ZXN0LWdyb3VwIgogICAgICAgICBpbmNsdWRlQ29tbWFu
ZExpbmVBUEkgOiBmYWxzZQogICAgIH0KKyAgICBpZCA6IDxudW1iZXI+CiB9CiAKIGV2ZW50IENv
bnNvbGVBZ2VudC5jb25zb2xlTWVzc2FnZQogewotICAgIHR5cGUgOiAiZXZlbnQiCi0gICAgZG9t
YWluIDogIkNvbnNvbGUiCi0gICAgZXZlbnQgOiAiY29uc29sZU1lc3NhZ2UiCi0gICAgZGF0YSA6
IHsKKyAgICBtZXRob2QgOiAiQ29uc29sZS5jb25zb2xlTWVzc2FnZSIKKyAgICBwYXJhbXMgOiB7
CiAgICAgICAgIG1lc3NhZ2VPYmogOiB7CiAgICAgICAgICAgICBzb3VyY2UgOiAzCiAgICAgICAg
ICAgICB0eXBlIDogMApAQCAtODEsMjMgKzc0LDIxIEBAIGV2ZW50IENvbnNvbGVBZ2VudC5jb25z
b2xlTWVzc2FnZQogCiBldmVudCBDb25zb2xlQWdlbnQuY29uc29sZU1lc3NhZ2VSZXBlYXRDb3Vu
dFVwZGF0ZWQKIHsKLSAgICB0eXBlIDogImV2ZW50IgotICAgIGRvbWFpbiA6ICJDb25zb2xlIgot
ICAgIGV2ZW50IDogImNvbnNvbGVNZXNzYWdlUmVwZWF0Q291bnRVcGRhdGVkIgotICAgIGRhdGEg
OiB7CisgICAgbWV0aG9kIDogIkNvbnNvbGUuY29uc29sZU1lc3NhZ2VSZXBlYXRDb3VudFVwZGF0
ZWQiCisgICAgcGFyYW1zIDogewogICAgICAgICBjb3VudCA6IDIKICAgICB9CiB9CiAKIHJlc3Bv
bnNlOgogewotICAgIHJlcXVlc3RJZCA6IDxudW1iZXI+Ci0gICAgYm9keSA6IHsKKyAgICByZXN1
bHQgOiB7CiAgICAgICAgIHJlc3VsdCA6IHsKICAgICAgICAgICAgIHR5cGUgOiAidW5kZWZpbmVk
IgogICAgICAgICAgICAgZGVzY3JpcHRpb24gOiAidW5kZWZpbmVkIgogICAgICAgICB9CiAgICAg
fQorICAgIGlkIDogPG51bWJlcj4KIH0KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEwNSwyNSArOTYsMjAgQEAgQ29uc29s
ZUFnZW50LmNsZWFyQ29uc29sZU1lc3NhZ2VzKCkKIAogcmVxdWVzdDoKIHsKKyAgICBtZXRob2Qg
OiAiQ29uc29sZS5jbGVhckNvbnNvbGVNZXNzYWdlcyIKICAgICBpZCA6IDxudW1iZXI+Ci0gICAg
ZG9tYWluIDogIkNvbnNvbGUiCi0gICAgY29tbWFuZCA6ICJjbGVhckNvbnNvbGVNZXNzYWdlcyIK
LSAgICBhcmd1bWVudHMgOiB7Ci0gICAgfQogfQogCiBldmVudCBDb25zb2xlQWdlbnQuY29uc29s
ZU1lc3NhZ2VzQ2xlYXJlZAogewotICAgIHR5cGUgOiAiZXZlbnQiCi0gICAgZG9tYWluIDogIkNv
bnNvbGUiCi0gICAgZXZlbnQgOiAiY29uc29sZU1lc3NhZ2VzQ2xlYXJlZCIKLSAgICBkYXRhIDog
ewotICAgIH0KKyAgICBtZXRob2QgOiAiQ29uc29sZS5jb25zb2xlTWVzc2FnZXNDbGVhcmVkIgog
fQogCiByZXNwb25zZToKIHsKLSAgICByZXF1ZXN0SWQgOiA8bnVtYmVyPgorICAgIHJlc3VsdCA6
IHsKKyAgICB9CisgICAgaWQgOiA8bnVtYmVyPgogfQogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTMxLDE3ICsxMTcsMTgg
QEAgQ29uc29sZUFnZW50LnNldE1vbml0b3JpbmdYSFJFbmFibGVkKHRydWUpCiAKIHJlcXVlc3Q6
CiB7Ci0gICAgaWQgOiA8bnVtYmVyPgotICAgIGRvbWFpbiA6ICJDb25zb2xlIgotICAgIGNvbW1h
bmQgOiAic2V0TW9uaXRvcmluZ1hIUkVuYWJsZWQiCi0gICAgYXJndW1lbnRzIDogeworICAgIG1l
dGhvZCA6ICJDb25zb2xlLnNldE1vbml0b3JpbmdYSFJFbmFibGVkIgorICAgIHBhcmFtcyA6IHsK
ICAgICAgICAgZW5hYmxlZCA6IHRydWUKICAgICB9CisgICAgaWQgOiA8bnVtYmVyPgogfQogCiBy
ZXNwb25zZToKIHsKLSAgICByZXF1ZXN0SWQgOiA8bnVtYmVyPgorICAgIHJlc3VsdCA6IHsKKyAg
ICB9CisgICAgaWQgOiA8bnVtYmVyPgogfQogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTQ5LDE3ICsxMzYsMTggQEAgQ29u
c29sZUFnZW50LnNldE1vbml0b3JpbmdYSFJFbmFibGVkKGZhbHNlKQogCiByZXF1ZXN0Ogogewot
ICAgIGlkIDogPG51bWJlcj4KLSAgICBkb21haW4gOiAiQ29uc29sZSIKLSAgICBjb21tYW5kIDog
InNldE1vbml0b3JpbmdYSFJFbmFibGVkIgotICAgIGFyZ3VtZW50cyA6IHsKKyAgICBtZXRob2Qg
OiAiQ29uc29sZS5zZXRNb25pdG9yaW5nWEhSRW5hYmxlZCIKKyAgICBwYXJhbXMgOiB7CiAgICAg
ICAgIGVuYWJsZWQgOiBmYWxzZQogICAgIH0KKyAgICBpZCA6IDxudW1iZXI+CiB9CiAKIHJlc3Bv
bnNlOgogewotICAgIHJlcXVlc3RJZCA6IDxudW1iZXI+CisgICAgcmVzdWx0IDogeworICAgIH0K
KyAgICBpZCA6IDxudW1iZXI+CiB9CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNjcsMTcgKzE1NSwxOCBAQCBDb25zb2xl
QWdlbnQuYWRkSW5zcGVjdGVkTm9kZSg8bnVtYmVyPikKIAogcmVxdWVzdDoKIHsKLSAgICBpZCA6
IDxudW1iZXI+Ci0gICAgZG9tYWluIDogIkNvbnNvbGUiCi0gICAgY29tbWFuZCA6ICJhZGRJbnNw
ZWN0ZWROb2RlIgotICAgIGFyZ3VtZW50cyA6IHsKKyAgICBtZXRob2QgOiAiQ29uc29sZS5hZGRJ
bnNwZWN0ZWROb2RlIgorICAgIHBhcmFtcyA6IHsKICAgICAgICAgbm9kZUlkIDogMQogICAgIH0K
KyAgICBpZCA6IDxudW1iZXI+CiB9CiAKIHJlc3BvbnNlOgogewotICAgIHJlcXVlc3RJZCA6IDxu
dW1iZXI+CisgICAgcmVzdWx0IDogeworICAgIH0KKyAgICBpZCA6IDxudW1iZXI+CiB9CiAKID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJvdG9jb2wvcnVudGltZS1hZ2Vu
dC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJvdG9jb2wvcnVudGltZS1h
Z2VudC1leHBlY3RlZC50eHQKaW5kZXggOTJkYmZlNC4uZWRhYTU4ZCAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL3Byb3RvY29sL3J1bnRpbWUtYWdlbnQtZXhwZWN0ZWQudHh0Cisr
KyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm90b2NvbC9ydW50aW1lLWFnZW50LWV4cGVjdGVk
LnR4dApAQCAtNSwyMCArNSwxOCBAQCBSdW50aW1lQWdlbnQuZXZhbHVhdGUoInRlc3RPYmplY3Qi
LCJ0ZXN0IixmYWxzZSkKIAogcmVxdWVzdDoKIHsKLSAgICBpZCA6IDxudW1iZXI+Ci0gICAgZG9t
YWluIDogIlJ1bnRpbWUiCi0gICAgY29tbWFuZCA6ICJldmFsdWF0ZSIKLSAgICBhcmd1bWVudHMg
OiB7CisgICAgbWV0aG9kIDogIlJ1bnRpbWUuZXZhbHVhdGUiCisgICAgcGFyYW1zIDogewogICAg
ICAgICBleHByZXNzaW9uIDogInRlc3RPYmplY3QiCiAgICAgICAgIG9iamVjdEdyb3VwIDogInRl
c3QiCiAgICAgICAgIGluY2x1ZGVDb21tYW5kTGluZUFQSSA6IGZhbHNlCiAgICAgfQorICAgIGlk
IDogPG51bWJlcj4KIH0KIAogcmVzcG9uc2U6CiB7Ci0gICAgcmVxdWVzdElkIDogPG51bWJlcj4K
LSAgICBib2R5IDogeworICAgIHJlc3VsdCA6IHsKICAgICAgICAgcmVzdWx0IDogewogICAgICAg
ICAgICAgb2JqZWN0SWQgOiA8c3RyaW5nPgogICAgICAgICAgICAgaGFzQ2hpbGRyZW4gOiB0cnVl
CkBAIC0yNiw2ICsyNCw3IEBAIHJlc3BvbnNlOgogICAgICAgICAgICAgZGVzY3JpcHRpb24gOiAi
VGVzdE9iamVjdCIKICAgICAgICAgfQogICAgIH0KKyAgICBpZCA6IDxudW1iZXI+CiB9CiAKIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CkBAIC0zMywxOSArMzIsMTcgQEAgUnVudGltZUFnZW50LmV2YWx1YXRlKCJ0ZXN0T2JqZWN0Iiwi
dGVzdCIpCiAKIHJlcXVlc3Q6CiB7Ci0gICAgaWQgOiA8bnVtYmVyPgotICAgIGRvbWFpbiA6ICJS
dW50aW1lIgotICAgIGNvbW1hbmQgOiAiZXZhbHVhdGUiCi0gICAgYXJndW1lbnRzIDogeworICAg
IG1ldGhvZCA6ICJSdW50aW1lLmV2YWx1YXRlIgorICAgIHBhcmFtcyA6IHsKICAgICAgICAgZXhw
cmVzc2lvbiA6ICJ0ZXN0T2JqZWN0IgogICAgICAgICBvYmplY3RHcm91cCA6ICJ0ZXN0IgogICAg
IH0KKyAgICBpZCA6IDxudW1iZXI+CiB9CiAKIHJlc3BvbnNlOgogewotICAgIHJlcXVlc3RJZCA6
IDxudW1iZXI+Ci0gICAgYm9keSA6IHsKKyAgICByZXN1bHQgOiB7CiAgICAgICAgIHJlc3VsdCA6
IHsKICAgICAgICAgICAgIG9iamVjdElkIDogPHN0cmluZz4KICAgICAgICAgICAgIGhhc0NoaWxk
cmVuIDogdHJ1ZQpAQCAtNTMsNiArNTAsNyBAQCByZXNwb25zZToKICAgICAgICAgICAgIGRlc2Ny
aXB0aW9uIDogIlRlc3RPYmplY3QiCiAgICAgICAgIH0KICAgICB9CisgICAgaWQgOiA8bnVtYmVy
PgogfQogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQpAQCAtNjAsMjQgKzU4LDIzIEBAIFJ1bnRpbWVBZ2VudC5ldmFsdWF0ZU9uKDxz
dHJpbmc+LCJ0aGlzLmFzc2lnbmVkQnlFdmFsdWF0ZU9uID0gXCJldmFsdWF0ZU9uIGZ1bmN0CiAK
IHJlcXVlc3Q6CiB7Ci0gICAgaWQgOiA8bnVtYmVyPgotICAgIGRvbWFpbiA6ICJSdW50aW1lIgot
ICAgIGNvbW1hbmQgOiAiZXZhbHVhdGVPbiIKLSAgICBhcmd1bWVudHMgOiB7CisgICAgbWV0aG9k
IDogIlJ1bnRpbWUuZXZhbHVhdGVPbiIKKyAgICBwYXJhbXMgOiB7CiAgICAgICAgIG9iamVjdElk
IDogPHN0cmluZz4KICAgICAgICAgZXhwcmVzc2lvbiA6ICJ0aGlzLmFzc2lnbmVkQnlFdmFsdWF0
ZU9uID0gImV2YWx1YXRlT24gZnVuY3Rpb24gd29ya3MgZmluZSI7IgogICAgIH0KKyAgICBpZCA6
IDxudW1iZXI+CiB9CiAKIHJlc3BvbnNlOgogewotICAgIHJlcXVlc3RJZCA6IDxudW1iZXI+Ci0g
ICAgYm9keSA6IHsKKyAgICByZXN1bHQgOiB7CiAgICAgICAgIHJlc3VsdCA6IHsKICAgICAgICAg
ICAgIHR5cGUgOiAidW5kZWZpbmVkIgogICAgICAgICAgICAgZGVzY3JpcHRpb24gOiAidW5kZWZp
bmVkIgogICAgICAgICB9CiAgICAgfQorICAgIGlkIDogPG51bWJlcj4KIH0KIAogLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTg1
LDE5ICs4MiwyMCBAQCBSdW50aW1lQWdlbnQuc2V0UHJvcGVydHlWYWx1ZSg8c3RyaW5nPiwiYXNz
aWduZWRCeVNldFByb3BlcnR5VmFsdWUiLCJ0cnVlIikKIAogcmVxdWVzdDoKIHsKLSAgICBpZCA6
IDxudW1iZXI+Ci0gICAgZG9tYWluIDogIlJ1bnRpbWUiCi0gICAgY29tbWFuZCA6ICJzZXRQcm9w
ZXJ0eVZhbHVlIgotICAgIGFyZ3VtZW50cyA6IHsKKyAgICBtZXRob2QgOiAiUnVudGltZS5zZXRQ
cm9wZXJ0eVZhbHVlIgorICAgIHBhcmFtcyA6IHsKICAgICAgICAgb2JqZWN0SWQgOiA8c3RyaW5n
PgogICAgICAgICBwcm9wZXJ0eU5hbWUgOiAiYXNzaWduZWRCeVNldFByb3BlcnR5VmFsdWUiCiAg
ICAgICAgIGV4cHJlc3Npb24gOiAidHJ1ZSIKICAgICB9CisgICAgaWQgOiA8bnVtYmVyPgogfQog
CiByZXNwb25zZToKIHsKLSAgICByZXF1ZXN0SWQgOiA8bnVtYmVyPgorICAgIHJlc3VsdCA6IHsK
KyAgICB9CisgICAgaWQgOiA8bnVtYmVyPgogfQogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTA1LDE5ICsxMDMsMjAgQEAg
UnVudGltZUFnZW50LnNldFByb3BlcnR5VmFsdWUoPHN0cmluZz4sInJlbW92ZWRCeVNldFByb3Bl
cnR5VmFsdWUiLCIiKQogCiByZXF1ZXN0OgogewotICAgIGlkIDogPG51bWJlcj4KLSAgICBkb21h
aW4gOiAiUnVudGltZSIKLSAgICBjb21tYW5kIDogInNldFByb3BlcnR5VmFsdWUiCi0gICAgYXJn
dW1lbnRzIDogeworICAgIG1ldGhvZCA6ICJSdW50aW1lLnNldFByb3BlcnR5VmFsdWUiCisgICAg
cGFyYW1zIDogewogICAgICAgICBvYmplY3RJZCA6IDxzdHJpbmc+CiAgICAgICAgIHByb3BlcnR5
TmFtZSA6ICJyZW1vdmVkQnlTZXRQcm9wZXJ0eVZhbHVlIgogICAgICAgICBleHByZXNzaW9uIDog
IiIKICAgICB9CisgICAgaWQgOiA8bnVtYmVyPgogfQogCiByZXNwb25zZToKIHsKLSAgICByZXF1
ZXN0SWQgOiA8bnVtYmVyPgorICAgIHJlc3VsdCA6IHsKKyAgICB9CisgICAgaWQgOiA8bnVtYmVy
PgogfQogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQpAQCAtMTI1LDE5ICsxMjQsMTcgQEAgUnVudGltZUFnZW50LmdldFByb3BlcnRp
ZXMoPHN0cmluZz4sZmFsc2UpCiAKIHJlcXVlc3Q6CiB7Ci0gICAgaWQgOiA8bnVtYmVyPgotICAg
IGRvbWFpbiA6ICJSdW50aW1lIgotICAgIGNvbW1hbmQgOiAiZ2V0UHJvcGVydGllcyIKLSAgICBh
cmd1bWVudHMgOiB7CisgICAgbWV0aG9kIDogIlJ1bnRpbWUuZ2V0UHJvcGVydGllcyIKKyAgICBw
YXJhbXMgOiB7CiAgICAgICAgIG9iamVjdElkIDogPHN0cmluZz4KICAgICAgICAgaWdub3JlSGFz
T3duUHJvcGVydHkgOiBmYWxzZQogICAgIH0KKyAgICBpZCA6IDxudW1iZXI+CiB9CiAKIHJlc3Bv
bnNlOgogewotICAgIHJlcXVlc3RJZCA6IDxudW1iZXI+Ci0gICAgYm9keSA6IHsKKyAgICByZXN1
bHQgOiB7CiAgICAgICAgIHJlc3VsdCA6IHsKICAgICAgICAgICAgIDAgOiB7CiAgICAgICAgICAg
ICAgICAgbmFtZSA6ICJhc3NpZ25lZEJ5RXZhbHVhdGVPbiIKQEAgLTE2NCw2ICsxNjEsNyBAQCBy
ZXNwb25zZToKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KKyAgICBpZCA6IDxudW1i
ZXI+CiB9CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCkBAIC0xNzEsMTcgKzE2OSwxOCBAQCBSdW50aW1lQWdlbnQucmVsZWFzZU9i
amVjdCg8c3RyaW5nPikKIAogcmVxdWVzdDoKIHsKLSAgICBpZCA6IDxudW1iZXI+Ci0gICAgZG9t
YWluIDogIlJ1bnRpbWUiCi0gICAgY29tbWFuZCA6ICJyZWxlYXNlT2JqZWN0IgotICAgIGFyZ3Vt
ZW50cyA6IHsKKyAgICBtZXRob2QgOiAiUnVudGltZS5yZWxlYXNlT2JqZWN0IgorICAgIHBhcmFt
cyA6IHsKICAgICAgICAgb2JqZWN0SWQgOiA8c3RyaW5nPgogICAgIH0KKyAgICBpZCA6IDxudW1i
ZXI+CiB9CiAKIHJlc3BvbnNlOgogewotICAgIHJlcXVlc3RJZCA6IDxudW1iZXI+CisgICAgcmVz
dWx0IDogeworICAgIH0KKyAgICBpZCA6IDxudW1iZXI+CiB9CiAKIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xODksMTcgKzE4
OCwxOCBAQCBSdW50aW1lQWdlbnQucmVsZWFzZU9iamVjdEdyb3VwKCJ0ZXN0IikKIAogcmVxdWVz
dDoKIHsKLSAgICBpZCA6IDxudW1iZXI+Ci0gICAgZG9tYWluIDogIlJ1bnRpbWUiCi0gICAgY29t
bWFuZCA6ICJyZWxlYXNlT2JqZWN0R3JvdXAiCi0gICAgYXJndW1lbnRzIDogeworICAgIG1ldGhv
ZCA6ICJSdW50aW1lLnJlbGVhc2VPYmplY3RHcm91cCIKKyAgICBwYXJhbXMgOiB7CiAgICAgICAg
IG9iamVjdEdyb3VwIDogInRlc3QiCiAgICAgfQorICAgIGlkIDogPG51bWJlcj4KIH0KIAogcmVz
cG9uc2U6CiB7Ci0gICAgcmVxdWVzdElkIDogPG51bWJlcj4KKyAgICByZXN1bHQgOiB7CisgICAg
fQorICAgIGlkIDogPG51bWJlcj4KIH0KIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9yZXBvcnQtQVBJLWVycm9ycy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvcmVwb3J0LUFQSS1lcnJvcnMtZXhwZWN0ZWQudHh0CmluZGV4IGY3OTQzNDguLjIwNjZk
MTIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXBvcnQtQVBJLWVycm9ycy1l
eHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3JlcG9ydC1BUEktZXJyb3Jz
LWV4cGVjdGVkLnR4dApAQCAtMSw4ICsxLDggQEAKIFRlc3RzIHRoYXQgSW5zcGVjdG9yQmFja2Vu
ZFN0dWIgaXMgY2F0Y2hpbmcgaW5jb3JyZWN0IGFyZ3VtZW50cy4KIAotUHJvdG9jb2wgRXJyb3I6
IEludmFsaWQgdHlwZSBvZiBhcmd1bWVudCAnZW5hYmxlZCcgZm9yICdDb25zb2xlQWdlbnQuc2V0
TW9uaXRvcmluZ1hIUkVuYWJsZWQnIGNhbGwuIEl0IHNob3VsZCBiZSAnYm9vbGVhbicgYnV0IGl0
IGlzICdudW1iZXInLgotUHJvdG9jb2wgRXJyb3I6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50
cyBmb3IgJ0NvbnNvbGVBZ2VudC5zZXRNb25pdG9yaW5nWEhSRW5hYmxlZCcgY2FsbC4gSXQgc2hv
dWxkIGhhdmUgdGhlIG5leHQgYXJndW1lbnRzICd7ImVuYWJsZWQiOnsib3B0aW9uYWwiOmZhbHNl
LCJ0eXBlIjoiYm9vbGVhbiJ9fScuCi1Qcm90b2NvbCBFcnJvcjogT3B0aW9uYWwgY2FsbGJhY2sg
YXJndW1lbnQgZm9yICdDb25zb2xlQWdlbnQuc2V0TW9uaXRvcmluZ1hIUkVuYWJsZWQnIGNhbGwg
c2hvdWxkIGJlIGEgZnVuY3Rpb24gYnV0IGl0cyB0eXBlIGlzICdzdHJpbmcnLgorUHJvdG9jb2wg
RXJyb3I6IEludmFsaWQgdHlwZSBvZiBhcmd1bWVudCAnZW5hYmxlZCcgZm9yIG1ldGhvZCAnQ29u
c29sZUFnZW50LnNldE1vbml0b3JpbmdYSFJFbmFibGVkJyBjYWxsLiBJdCBzaG91bGQgYmUgJ2Jv
b2xlYW4nIGJ1dCBpdCBpcyAnbnVtYmVyJy4KK1Byb3RvY29sIEVycm9yOiBJbnZhbGlkIG51bWJl
ciBvZiBhcmd1bWVudHMgZm9yIG1ldGhvZCAnQ29uc29sZUFnZW50LnNldE1vbml0b3JpbmdYSFJF
bmFibGVkJyBjYWxsLiBJdCBzaG91bGQgaGF2ZSB0aGUgbmV4dCBhcmd1bWVudHMgJ3siZW5hYmxl
ZCI6eyJvcHRpb25hbCI6ZmFsc2UsInR5cGUiOiJib29sZWFuIn19Jy4KK1Byb3RvY29sIEVycm9y
OiBPcHRpb25hbCBjYWxsYmFjayBhcmd1bWVudCBmb3IgbWV0aG9kICdDb25zb2xlQWdlbnQuc2V0
TW9uaXRvcmluZ1hIUkVuYWJsZWQnIGNhbGwgc2hvdWxkIGJlIGEgZnVuY3Rpb24gYnV0IGl0cyB0
eXBlIGlzICdzdHJpbmcnLgogUHJvdG9jb2wgRXJyb3I6IHRoZSBtZXNzYWdlIGlzIGZvciBub24t
ZXhpc3RpbmcgZG9tYWluICd3cm9uZ0RvbWFpbicKIFByb3RvY29sIEVycm9yOiBBdHRlbXB0ZWQg
dG8gZGlzcGF0Y2ggYW4gdW5pbXBsZW1lbnRlZCBtZXRob2QgJ0luc3BlY3Rvci5zb21ldGhpbmct
c3RyYW5nZScKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3JlcG9ydC1BUEkt
ZXJyb3JzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVwb3J0LUFQSS1lcnJvcnMuaHRt
bAppbmRleCBiZDg0NDY5Li5iNjcwMjViIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvcmVwb3J0LUFQSS1lcnJvcnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVw
b3J0LUFQSS1lcnJvcnMuaHRtbApAQCAtMTgsOCArMTgsOCBAQCBmdW5jdGlvbiB0ZXN0KCkKICAg
ICBSdW50aW1lQWdlbnQuZXZhbHVhdGUoInRydWUiLCAidGVzdCIpOwogICAgIFJ1bnRpbWVBZ2Vu
dC5ldmFsdWF0ZSgidHJ1ZSIsICJ0ZXN0IiwgZnVuY3Rpb24oKXt9KTsKICAgICBSdW50aW1lQWdl
bnQuZXZhbHVhdGUoInRydWUiLCAidGVzdCIsIHVuZGVmaW5lZCwgZnVuY3Rpb24oKXt9KTsKLSAg
ICBJbnNwZWN0b3JCYWNrZW5kLmRpc3BhdGNoKCd7InR5cGUiOiAiZXZlbnQiLCAiZG9tYWluIjog
Indyb25nRG9tYWluIiwgImV2ZW50IjogInNvbWV0aGluZy1zdHJhbmdlIiwgImRhdGEiOiB7fX0n
KTsKLSAgICBJbnNwZWN0b3JCYWNrZW5kLmRpc3BhdGNoKCd7InR5cGUiOiAiZXZlbnQiLCAiZG9t
YWluIjogIkluc3BlY3RvciIsICJldmVudCI6ICJzb21ldGhpbmctc3RyYW5nZSIsICJkYXRhIjog
e319Jyk7CisgICAgSW5zcGVjdG9yQmFja2VuZC5kaXNwYXRjaCgneyJtZXRob2QiOiAid3JvbmdE
b21haW4uc29tZXRoaW5nLXN0cmFuZ2UiLCAicGFyYW1zIjoge319Jyk7CisgICAgSW5zcGVjdG9y
QmFja2VuZC5kaXNwYXRjaCgneyJtZXRob2QiOiAiSW5zcGVjdG9yLnNvbWV0aGluZy1zdHJhbmdl
IiwgInBhcmFtcyI6IHt9fScpOwogCiAgICAgSW5zcGVjdG9yVGVzdC5jb21wbGV0ZVRlc3QoKTsK
IH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXBvcnQtcHJvdG9jb2wtZXJy
b3JzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXBvcnQtcHJvdG9jb2wt
ZXJyb3JzLWV4cGVjdGVkLnR4dAppbmRleCA3YjE2Njk2Li43Njg3MzQ5IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVwb3J0LXByb3RvY29sLWVycm9ycy1leHBlY3RlZC50eHQK
KysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3JlcG9ydC1wcm90b2NvbC1lcnJvcnMtZXhwZWN0
ZWQudHh0CkBAIC0xLDY0ICsxLDEwNCBAQAogVGVzdHMgdGhhdCBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlciBpcyBjYXRjaGluZyBpbmNvcnJlY3QgbWVzc2FnZXMuCiAKIHsKLSAgICByZXF1ZXN0
SWQgOiAwCi0gICAgcHJvdG9jb2xFcnJvcnMgOiB7Ci0gICAgICAgIDAgOiAiUHJvdG9jb2wgRXJy
b3I6IEludmFsaWQgbWVzc2FnZSBmb3JtYXQuIE1lc3NhZ2Ugc2hvdWxkIGJlIGluIEpTT04gZm9y
bWF0LiIKKyAgICBlcnJvciA6IHsKKyAgICAgICAgY29kZSA6IC0zMjcwMAorICAgICAgICBtZXNz
YWdlIDogIlBhcnNlIGVycm9yLiIKKyAgICAgICAgZGF0YSA6IHsKKyAgICAgICAgICAgIDAgOiAi
TWVzc2FnZSBzaG91bGQgYmUgaW4gSlNPTiBmb3JtYXQuIgorICAgICAgICB9CiAgICAgfQorICAg
IGlkIDogMAogfQogewotICAgIHJlcXVlc3RJZCA6IDAKLSAgICBwcm90b2NvbEVycm9ycyA6IHsK
LSAgICAgICAgMCA6ICJQcm90b2NvbCBFcnJvcjogSW52YWxpZCBtZXNzYWdlIGZvcm1hdC4gJ2Nv
bW1hbmQnIHByb3BlcnR5IHdhc24ndCBmb3VuZC4iCisgICAgZXJyb3IgOiB7CisgICAgICAgIGNv
ZGUgOiAtMzI2MDAKKyAgICAgICAgbWVzc2FnZSA6ICJJbnZhbGlkIFJlcXVlc3QuIgorICAgICAg
ICBkYXRhIDogeworICAgICAgICAgICAgMCA6ICJJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0LiAnbWV0
aG9kJyBwcm9wZXJ0eSB3YXNuJ3QgZm91bmQuIgorICAgICAgICB9CiAgICAgfQorICAgIGlkIDog
MAogfQogewotICAgIHJlcXVlc3RJZCA6IDAKLSAgICBwcm90b2NvbEVycm9ycyA6IHsKLSAgICAg
ICAgMCA6ICJQcm90b2NvbCBFcnJvcjogSW52YWxpZCBtZXNzYWdlIGZvcm1hdC4gVGhlIHR5cGUg
b2YgJ2NvbW1hbmQnIHByb3BlcnR5IHNob3VsZCBiZSBzdHJpbmcuIgorICAgIGVycm9yIDogewor
ICAgICAgICBjb2RlIDogLTMyNjAwCisgICAgICAgIG1lc3NhZ2UgOiAiSW52YWxpZCBSZXF1ZXN0
LiIKKyAgICAgICAgZGF0YSA6IHsKKyAgICAgICAgICAgIDAgOiAiSW52YWxpZCBtZXNzYWdlIGZv
cm1hdC4gVGhlIHR5cGUgb2YgJ21ldGhvZCcgcHJvcGVydHkgc2hvdWxkIGJlIHN0cmluZy4iCisg
ICAgICAgIH0KICAgICB9CisgICAgaWQgOiAwCiB9CiB7Ci0gICAgcmVxdWVzdElkIDogMAotICAg
IHByb3RvY29sRXJyb3JzIDogewotICAgICAgICAwIDogIlByb3RvY29sIEVycm9yOiBJbnZhbGlk
IG1lc3NhZ2UgZm9ybWF0LiAnaWQnIHByb3BlcnR5IHdhcyBub3QgZm91bmQgaW4gdGhlIHJlcXVl
c3QuIgorICAgIGVycm9yIDogeworICAgICAgICBjb2RlIDogLTMyNjAwCisgICAgICAgIG1lc3Nh
Z2UgOiAiSW52YWxpZCBSZXF1ZXN0LiIKKyAgICAgICAgZGF0YSA6IHsKKyAgICAgICAgICAgIDAg
OiAiSW52YWxpZCBtZXNzYWdlIGZvcm1hdC4gJ2lkJyBwcm9wZXJ0eSB3YXMgbm90IGZvdW5kIGlu
IHRoZSByZXF1ZXN0LiIKKyAgICAgICAgfQogICAgIH0KKyAgICBpZCA6IDAKIH0KIHsKLSAgICBy
ZXF1ZXN0SWQgOiAwCi0gICAgcHJvdG9jb2xFcnJvcnMgOiB7Ci0gICAgICAgIDAgOiAiUHJvdG9j
b2wgRXJyb3I6IEludmFsaWQgbWVzc2FnZSBmb3JtYXQuIFRoZSB0eXBlIG9mICdpZCcgcHJvcGVy
dHkgc2hvdWxkIGJlIG51bWJlci4iCisgICAgZXJyb3IgOiB7CisgICAgICAgIGNvZGUgOiAtMzI2
MDAKKyAgICAgICAgbWVzc2FnZSA6ICJJbnZhbGlkIFJlcXVlc3QuIgorICAgICAgICBkYXRhIDog
eworICAgICAgICAgICAgMCA6ICJJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0LiBUaGUgdHlwZSBvZiAn
aWQnIHByb3BlcnR5IHNob3VsZCBiZSBudW1iZXIuIgorICAgICAgICB9CiAgICAgfQorICAgIGlk
IDogMAogfQogewotICAgIHJlcXVlc3RJZCA6IDEKLSAgICBwcm90b2NvbEVycm9ycyA6IHsKLSAg
ICAgICAgMCA6ICJQcm90b2NvbCBFcnJvcjogSW52YWxpZCBjb21tYW5kIHdhcyByZWNlaXZlZC4g
J3Rlc3QnIHdhc24ndCBmb3VuZCBpbiBkb21haW4gRE9NLiIKKyAgICBlcnJvciA6IHsKKyAgICAg
ICAgY29kZSA6IC0zMjYwMQorICAgICAgICBtZXNzYWdlIDogIk1ldGhvZCBub3QgZm91bmQuIgor
ICAgICAgICBkYXRhIDogeworICAgICAgICAgICAgMCA6ICJJbnZhbGlkIG1ldGhvZCBuYW1lIHdh
cyByZWNlaXZlZC4gJ0RPTS50ZXN0JyB3YXNuJ3QgZm91bmQuIgorICAgICAgICB9CiAgICAgfQor
ICAgIGlkIDogMQogfQogewotICAgIHJlcXVlc3RJZCA6IDIKLSAgICBwcm90b2NvbEVycm9ycyA6
IHsKLSAgICAgICAgMCA6ICJQcm90b2NvbCBFcnJvcjogJ2FyZ3VtZW50cycgcHJvcGVydHkgd2l0
aCB0eXBlICdvYmplY3QnIHdhcyBub3QgZm91bmQuIgorICAgIGVycm9yIDogeworICAgICAgICBj
b2RlIDogLTMyNjAyCisgICAgICAgIG1lc3NhZ2UgOiAiSW52YWxpZCBwYXJhbXMuIgorICAgICAg
ICBkYXRhIDogeworICAgICAgICAgICAgMCA6ICIncGFyYW1zJyBwcm9wZXJ0eSB3aXRoIHR5cGUg
J29iamVjdCcgd2FzIG5vdCBmb3VuZC4iCisgICAgICAgIH0KICAgICB9CisgICAgaWQgOiAyCiB9
CiB7Ci0gICAgcmVxdWVzdElkIDogMwotICAgIHByb3RvY29sRXJyb3JzIDogewotICAgICAgICAw
IDogIlByb3RvY29sIEVycm9yOiAnYXJndW1lbnRzJyBwcm9wZXJ0eSB3aXRoIHR5cGUgJ29iamVj
dCcgd2FzIG5vdCBmb3VuZC4iCisgICAgZXJyb3IgOiB7CisgICAgICAgIGNvZGUgOiAtMzI2MDIK
KyAgICAgICAgbWVzc2FnZSA6ICJJbnZhbGlkIHBhcmFtcy4iCisgICAgICAgIGRhdGEgOiB7Cisg
ICAgICAgICAgICAwIDogIidwYXJhbXMnIHByb3BlcnR5IHdpdGggdHlwZSAnb2JqZWN0JyB3YXMg
bm90IGZvdW5kLiIKKyAgICAgICAgfQogICAgIH0KKyAgICBpZCA6IDMKIH0KIHsKLSAgICByZXF1
ZXN0SWQgOiA0Ci0gICAgcHJvdG9jb2xFcnJvcnMgOiB7Ci0gICAgICAgIDAgOiAiUHJvdG9jb2wg
RXJyb3I6IEFyZ3VtZW50ICdmcmFtZUlkJyB3aXRoIHR5cGUgJ1N0cmluZycgd2FzIG5vdCBmb3Vu
ZC4iCi0gICAgICAgIDEgOiAiUHJvdG9jb2wgRXJyb3I6IEFyZ3VtZW50ICd1cmwnIHdpdGggdHlw
ZSAnU3RyaW5nJyB3YXMgbm90IGZvdW5kLiIKKyAgICBlcnJvciA6IHsKKyAgICAgICAgY29kZSA6
IC0zMjYwMgorICAgICAgICBtZXNzYWdlIDogIkludmFsaWQgcGFyYW1zLiIKKyAgICAgICAgZGF0
YSA6IHsKKyAgICAgICAgICAgIDAgOiAiUGFyYW1ldGVyICdmcmFtZUlkJyB3aXRoIHR5cGUgJ1N0
cmluZycgd2FzIG5vdCBmb3VuZC4iCisgICAgICAgICAgICAxIDogIlBhcmFtZXRlciAndXJsJyB3
aXRoIHR5cGUgJ1N0cmluZycgd2FzIG5vdCBmb3VuZC4iCisgICAgICAgIH0KICAgICB9CisgICAg
aWQgOiA0CiB9CiB7Ci0gICAgcmVxdWVzdElkIDogNQotICAgIHByb3RvY29sRXJyb3JzIDogewot
ICAgICAgICAwIDogIlByb3RvY29sIEVycm9yOiBBcmd1bWVudCAndXJsJyB3aXRoIHR5cGUgJ1N0
cmluZycgd2FzIG5vdCBmb3VuZC4iCisgICAgZXJyb3IgOiB7CisgICAgICAgIGNvZGUgOiAtMzI2
MDIKKyAgICAgICAgbWVzc2FnZSA6ICJJbnZhbGlkIHBhcmFtcy4iCisgICAgICAgIGRhdGEgOiB7
CisgICAgICAgICAgICAwIDogIlBhcmFtZXRlciAndXJsJyB3aXRoIHR5cGUgJ1N0cmluZycgd2Fz
IG5vdCBmb3VuZC4iCisgICAgICAgIH0KICAgICB9CisgICAgaWQgOiA1CiB9CiAKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXBvcnQtcHJvdG9jb2wtZXJyb3JzLmh0bWwgYi9M
YXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVwb3J0LXByb3RvY29sLWVycm9ycy5odG1sCmluZGV4IGFk
ZmRjN2YuLjcxNWZmYTggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXBvcnQt
cHJvdG9jb2wtZXJyb3JzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3JlcG9ydC1w
cm90b2NvbC1lcnJvcnMuaHRtbApAQCAtOCwxNCArOCwxNCBAQCBmdW5jdGlvbiB0ZXN0KCkKICAg
ICB2YXIgbWVzc2FnZXMgPSBbCiAgICAgICAgICdzb21lIHdyb25nIHN0cmluZycsCiAgICAgICAg
ICd7fScsCi0gICAgICAgICd7ImNvbW1hbmQiOjF9JywKLSAgICAgICAgJ3siZG9tYWluIjoiTmV0
d29yayIsImNvbW1hbmQiOiJyZXNvdXJjZUNvbnRlbnQifScsCi0gICAgICAgICd7ImlkIjoibm90
IGEgbnVtYmVyIiwiZG9tYWluIjoiTmV0d29yayIsImNvbW1hbmQiOiJyZXNvdXJjZUNvbnRlbnQi
fScsCi0gICAgICAgICd7ImlkIjoxLCJkb21haW4iOiJET00iLCJjb21tYW5kIjoidGVzdCJ9JywK
LSAgICAgICAgJ3siaWQiOjIsImRvbWFpbiI6Ik5ldHdvcmsiLCJjb21tYW5kIjoiZ2V0UmVzb3Vy
Y2VDb250ZW50In0nLAotICAgICAgICAneyJpZCI6MywiZG9tYWluIjoiTmV0d29yayIsImNvbW1h
bmQiOiJnZXRSZXNvdXJjZUNvbnRlbnQiLCJhcmd1bWVudHMiOltdfScsCi0gICAgICAgICd7Imlk
Ijo0LCJkb21haW4iOiJOZXR3b3JrIiwiY29tbWFuZCI6ImdldFJlc291cmNlQ29udGVudCIsImFy
Z3VtZW50cyI6e319JywKLSAgICAgICAgJ3siaWQiOjUsImRvbWFpbiI6Ik5ldHdvcmsiLCJjb21t
YW5kIjoiZ2V0UmVzb3VyY2VDb250ZW50IiwiYXJndW1lbnRzIjp7ImZyYW1lSWQiOiJub3QgYSBu
dW1iZXIifX0nLAorICAgICAgICAneyJtZXRob2QiOjF9JywKKyAgICAgICAgJ3sibWV0aG9kIjoi
cmVzb3VyY2VDb250ZW50In0nLAorICAgICAgICAneyJpZCI6Im5vdCBhIG51bWJlciIsIm1ldGhv
ZCI6Ik5ldHdvcmsucmVzb3VyY2VDb250ZW50In0nLAorICAgICAgICAneyJpZCI6MSwibWV0aG9k
IjoiRE9NLnRlc3QifScsCisgICAgICAgICd7ImlkIjoyLCJtZXRob2QiOiJOZXR3b3JrLmdldFJl
c291cmNlQ29udGVudCJ9JywKKyAgICAgICAgJ3siaWQiOjMsIm1ldGhvZCI6Ik5ldHdvcmsuZ2V0
UmVzb3VyY2VDb250ZW50IiwicGFyYW1zIjpbXX0nLAorICAgICAgICAneyJpZCI6NCwibWV0aG9k
IjoiTmV0d29yay5nZXRSZXNvdXJjZUNvbnRlbnQiLCJwYXJhbXMiOnt9fScsCisgICAgICAgICd7
ImlkIjo1LCJtZXRob2QiOiJOZXR3b3JrLmdldFJlc291cmNlQ29udGVudCIsInBhcmFtcyI6eyJm
cmFtZUlkIjoibm90IGEgbnVtYmVyIn19JywKICAgICBdOwogICAgIHZhciBudW1iZXJPZlJlcG9y
dHMgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2JiMjQyYi4uZjYxMmU5NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDI4IEBACisyMDExLTA0LTA2ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBXZWIgSW5zcGVjdG9yOiBtaWdyYXRlIEluc3BlY3RvciBwcm90b2NvbCBtZXNzYWdlcyBmb3Jt
YXQgdG8gSlNPTi1SUEMuCisKKyAgICAgICAgVGhlcmUgaXMgbm90IGEgc2lnbmlmaWNhbnQgZGlm
ZmVyZW5jZSBiZXR3ZWVuICBpbnNwZWN0b3IgbWVzc2FnZXMgc3BlYyBhbmQgYW5kIEpTT04tUlBD
IDIuMCBtZXNzYWdlcyBzcGVjLgorICAgICAgICBBbHNvIEpTT04tUlBDIGhhcyBhIHByZXR0eSBj
bGVhciBzcGVjaWZpY2F0aW9uIGZvciBlcnJvciBkZXNjcmlwdGlvbnMgd2hpY2ggd2UgaGF2ZW4n
dC4KKyAgICAgICAgSXQgd2FzIGRlY2lkZWQgdGhhdCB3ZSB3aWxsIHVzZSBpdC4KKworICAgICAg
ICB0aGUgbGlzdCBvZiByZW5hbWVzOgorICAgICAgICAxKSB0eXBlLT4gL2Rldi9udWxsCisgICAg
ICAgIDIpIGRvbWFpbiArICcuJyArIGV2ZW50ID0+IG1ldGhvZCAvLyBmb3IgZXZlbnRzCisgICAg
ICAgIDMpIGRvbWFpbiArICcuJyArIGNvbW1hbmQgPT4gbWV0aG9kIC8vIGZvciByZXF1ZXN0cwor
ICAgICAgICA0KSByZXF1ZXN0SWQgPT4gaWQgLy8gZm9yIHJlc3BvbnNlcworICAgICAgICA1KSBh
cmd1bWVudHMgPT4gcGFyYW1zIC8vIGZvciByZXF1ZXN0cworICAgICAgICA2KSBkYXRhID0+IHBh
cmFtcyAvLyBmb3IgZXZlbnRzCisgICAgICAgIDcpIGJvZHkgPT4gcmVzdWx0IC8vIGZvciByZXNw
b25zZXMKKworICAgICAgICBwcm90b2NvbEVycm9ycyBhbmQgZXJyb3IgcHJvcGVydGllcyB3aWxs
IGJlIGNvbnZlcnRlZCB0byBKU09OLVJQQyBlcnJvciBmb3JtYXQuCisgICAgICAgIFRoZSBvcmRl
ciBvZiBwcm9wZXJ0aWVzIGluIG1lc3NhZ2VzIGFsc28gd2lsbCBiZSBhZGp1c3RlZC4KKyAgICAg
ICAgVGhlIG9ubHkgdGhpbmcgdGhhdCBsb29rcyB1bm5lY2Vzc2FyeSBpcyBqc29ucnBjIHByb3Bl
cnR5LgorCisgICAgICAgICogaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG06CisK
IDIwMTEtMDQtMDYgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0gYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQppbmRleCBhOWViZjM4Li5mNmQx
ZDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5wbQpAQCAtMTkyLDYgKzE5Miw5IEBAICR0eXBlVHJhbnNmb3JteyJ2b2lkIn0gPSB7
CiAgICAgImZvcndhcmQiID0+ICIiLAogICAgICJoZWFkZXIiID0+ICIiCiB9OworJHR5cGVUcmFu
c2Zvcm17IlZlY3RvciJ9ID0geworICAgICJoZWFkZXIiID0+ICJ3dGYvVmVjdG9yLmgiCit9Owog
CiAjIERlZmF1bHQgTGljZW5zZSBUZW1wbGF0ZXMKIApAQCAtMzY5LDEzICszNzIsMTMgQEAgc3Vi
IGdlbmVyYXRlRnJvbnRlbmRGdW5jdGlvbgogICAgIHB1c2goQGZ1bmN0aW9uLCAidm9pZCAke2Zy
b250ZW5kQ2xhc3NOYW1lfTo6JHtkb21haW59Ojoke2Z1bmN0aW9uTmFtZX0oJHthcmd1bWVudHN9
KSIpOwogICAgIHB1c2goQGZ1bmN0aW9uLCAieyIpOwogICAgIHB1c2goQGZ1bmN0aW9uLCAiICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+ICR7ZnVuY3Rpb25OYW1lfU1lc3NhZ2UgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOyIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICR7ZnVuY3Rp
b25OYW1lfU1lc3NhZ2UtPnNldFN0cmluZyhcInR5cGVcIiwgXCJldmVudFwiKTsiKTsKLSAgICBw
dXNoKEBmdW5jdGlvbiwgIiAgICAke2Z1bmN0aW9uTmFtZX1NZXNzYWdlLT5zZXRTdHJpbmcoXCJk
b21haW5cIiwgXCIkZG9tYWluXCIpOyIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICR7ZnVu
Y3Rpb25OYW1lfU1lc3NhZ2UtPnNldFN0cmluZyhcImV2ZW50XCIsIFwiJGZ1bmN0aW9uTmFtZVwi
KTsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBk
YXRhT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsiKTsKLSAgICBteSBAcHVzaEFy
Z3VtZW50cyA9IG1hcCgiICAgIGRhdGFPYmplY3QtPnNldCIgLiB0eXBlVHJhaXRzKCRfLT50eXBl
LCAiSlNPTlR5cGUiKSAuICIoXCIiIC4gJF8tPm5hbWUgLiAiXCIsICIgLiAkXy0+bmFtZSAuICIp
OyIsIEBhcmdzRmlsdGVyZWQpOwotICAgIHB1c2goQGZ1bmN0aW9uLCBAcHVzaEFyZ3VtZW50cyk7
Ci0gICAgcHVzaChAZnVuY3Rpb24sICIgICAgJHtmdW5jdGlvbk5hbWV9TWVzc2FnZS0+c2V0T2Jq
ZWN0KFwiZGF0YVwiLCBkYXRhT2JqZWN0KTsiKTsKKyAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAk
e2Z1bmN0aW9uTmFtZX1NZXNzYWdlLT5zZXRTdHJpbmcoXCJtZXRob2RcIiwgXCIkZG9tYWluLiRm
dW5jdGlvbk5hbWVcIik7Iik7CisgICAgaWYgKHNjYWxhcihAYXJnc0ZpbHRlcmVkKSkgeworICAg
ICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNP
YmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOyIpOworICAgICAgICBteSBAcHVzaEFy
Z3VtZW50cyA9IG1hcCgiICAgIHBhcmFtc09iamVjdC0+c2V0IiAuIHR5cGVUcmFpdHMoJF8tPnR5
cGUsICJKU09OVHlwZSIpIC4gIihcIiIgLiAkXy0+bmFtZSAuICJcIiwgIiAuICRfLT5uYW1lIC4g
Iik7IiwgQGFyZ3NGaWx0ZXJlZCk7CisgICAgICAgIHB1c2goQGZ1bmN0aW9uLCBAcHVzaEFyZ3Vt
ZW50cyk7CisgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICR7ZnVuY3Rpb25OYW1lfU1lc3Nh
Z2UtPnNldE9iamVjdChcInBhcmFtc1wiLCBwYXJhbXNPYmplY3QpOyIpOworICAgIH0KICAgICBw
dXNoKEBmdW5jdGlvbiwgIiAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3Nh
Z2VUb0Zyb250ZW5kKCR7ZnVuY3Rpb25OYW1lfU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsiKTsK
ICAgICBwdXNoKEBmdW5jdGlvbiwgIn0iKTsKICAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOwpAQCAt
Mzk3LDEyICs0MDAsMTMgQEAgc3ViIGdlbmVyYXRlQmFja2VuZEZ1bmN0aW9uCiAKICAgICBteSAk
ZnVuY3Rpb25OYW1lID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWU7CiAgICAgbXkgJGZ1bGxR
dWFsaWZpZWRGdW5jdGlvbk5hbWUgPSAkaW50ZXJmYWNlLT5uYW1lIC4gIl8iIC4gJGZ1bmN0aW9u
LT5zaWduYXR1cmUtPm5hbWU7CisgICAgbXkgJGZ1bGxRdWFsaWZpZWRGdW5jdGlvbk5hbWVEb3Qg
PSAkaW50ZXJmYWNlLT5uYW1lIC4gIi4iIC4gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWU7CiAK
ICAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsICIgICAgc3RhdGljIGNvbnN0
IGNoYXIqICR7ZnVsbFF1YWxpZmllZEZ1bmN0aW9uTmFtZX1DbWQ7Iik7Ci0gICAgcHVzaChAYmFj
a2VuZENvbnN0YW50RGVmaW5pdGlvbnMsICJjb25zdCBjaGFyKiAke2JhY2tlbmRDbGFzc05hbWV9
Ojoke2Z1bGxRdWFsaWZpZWRGdW5jdGlvbk5hbWV9Q21kID0gXCIke2Z1bGxRdWFsaWZpZWRGdW5j
dGlvbk5hbWV9XCI7Iik7CisgICAgcHVzaChAYmFja2VuZENvbnN0YW50RGVmaW5pdGlvbnMsICJj
b25zdCBjaGFyKiAke2JhY2tlbmRDbGFzc05hbWV9Ojoke2Z1bGxRdWFsaWZpZWRGdW5jdGlvbk5h
bWV9Q21kID0gXCIke2Z1bGxRdWFsaWZpZWRGdW5jdGlvbk5hbWVEb3R9XCI7Iik7CiAKICAgICBt
YXAoJGJhY2tlbmRUeXBlc3skXy0+dHlwZX0gPSAxLCBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30p
OyAjIHJlZ2lzdGVyIHJlcXVpcmVkIHR5cGVzCi0gICAgbXkgQGluQXJncyA9IGdyZXAoJF8tPmRp
cmVjdGlvbiBlcSAiaW4iICYmICEoJF8tPm5hbWUgZXEgImNhbGxJZCIpICwgQHskZnVuY3Rpb24t
PnBhcmFtZXRlcnN9KTsKKyAgICBteSBAaW5BcmdzID0gZ3JlcCgkXy0+ZGlyZWN0aW9uIGVxICJp
biIsIEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSk7CiAgICAgbXkgQG91dEFyZ3MgPSBncmVwKCRf
LT5kaXJlY3Rpb24gZXEgIm91dCIsIEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSk7CiAgICAgCiAg
ICAgbXkgJHNpZ25hdHVyZSA9ICIgICAgdm9pZCAke2Z1bGxRdWFsaWZpZWRGdW5jdGlvbk5hbWV9
KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsiOwpA
QCAtNDIyLDI1ICs0MjYsMjcgQEAgc3ViIGdlbmVyYXRlQmFja2VuZEZ1bmN0aW9uCiAgICAgJGJh
Y2tlbmRUeXBlc3skZG9tYWlufSA9IDE7CiAgICAgJGJhY2tlbmREb21haW5zeyRkb21haW59ID0g
MTsKICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBpZiAoISRkb21haW5BY2Nlc3NvcikiKTsKLSAg
ICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoXCJQ
cm90b2NvbCBFcnJvcjogJGRvbWFpbiBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuXCIpOyIpOwor
ICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhc
IiRkb21haW4gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLlwiKTsiKTsKICAgICBwdXNoKEBmdW5j
dGlvbiwgIiIpOwogCiAgICAgIyBkZWNsYXJlIGxvY2FsIHZhcmlhYmxlcyBmb3Igb3V0IGFyZ3Vt
ZW50cy4KLSAgICBwdXNoKEBmdW5jdGlvbiwgbWFwKCIgICAgIiAuIHR5cGVUcmFpdHMoJF8tPnR5
cGUsICJ2YXJpYWJsZSIpIC4gIiBvdXRfIiAuICRfLT5uYW1lIC4gIiA9ICIgLiB0eXBlVHJhaXRz
KCRfLT50eXBlLCAiZGVmYXVsdFZhbHVlIikgLiAiOyIsIEBvdXRBcmdzKSk7Ci0gICAgcHVzaChA
ZnVuY3Rpb24sICIiKTsKKyAgICBpZiAoc2NhbGFyKEBvdXRBcmdzKSkgeworICAgICAgICBwdXNo
KEBmdW5jdGlvbiwgbWFwKCIgICAgIiAuIHR5cGVUcmFpdHMoJF8tPnR5cGUsICJ2YXJpYWJsZSIp
IC4gIiBvdXRfIiAuICRfLT5uYW1lIC4gIiA9ICIgLiB0eXBlVHJhaXRzKCRfLT50eXBlLCAiZGVm
YXVsdFZhbHVlIikgLiAiOyIsIEBvdXRBcmdzKSk7CisgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAi
Iik7CisgICAgfQogICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIEVycm9yU3RyaW5nIGVycm9yOyIp
OwogICAgIHB1c2goQGZ1bmN0aW9uLCAiIik7CiAKICAgICBteSAkaW5kZW50ID0gIiI7CiAgICAg
aWYgKHNjYWxhcihAaW5BcmdzKSkgewotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBpZiAo
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYXJndW1lbnRzQ29udGFpbmVyID0gcmVxdWVzdE1lc3Nh
Z2VPYmplY3QtPmdldE9iamVjdChcImFyZ3VtZW50c1wiKSkgeyIpOworICAgICAgICBwdXNoKEBm
dW5jdGlvbiwgIiAgICBpZiAoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVy
ID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdChcInBhcmFtc1wiKSkgeyIpOwogCiAg
ICAgICAgIGZvcmVhY2ggbXkgJHBhcmFtZXRlciAoQGluQXJncykgewogICAgICAgICAgICAgbXkg
JG5hbWUgPSAkcGFyYW1ldGVyLT5uYW1lOwogICAgICAgICAgICAgbXkgJHR5cGUgPSAkcGFyYW1l
dGVyLT50eXBlOwogICAgICAgICAgICAgbXkgJHR5cGVTdHJpbmcgPSBjYW1lbENhc2UoJHBhcmFt
ZXRlci0+dHlwZSk7CiAgICAgICAgICAgICBteSAkb3B0aW9uYWwgPSAkcGFyYW1ldGVyLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsib3B0aW9uYWwifSA/ICJ0cnVlIiA6ICJmYWxzZSI7Ci0gICAgICAg
ICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgIiAuIHR5cGVUcmFpdHMoJHR5cGUsICJ2YXJp
YWJsZSIpIC4gIiBpbl8kbmFtZSA9IGdldCR0eXBlU3RyaW5nKGFyZ3VtZW50c0NvbnRhaW5lci5n
ZXQoKSwgXCIkbmFtZVwiLCAkb3B0aW9uYWwsIHByb3RvY29sRXJyb3JzLmdldCgpKTsiKTsKKyAg
ICAgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICAiIC4gdHlwZVRyYWl0cygkdHlwZSwg
InZhcmlhYmxlIikgLiAiIGluXyRuYW1lID0gZ2V0JHR5cGVTdHJpbmcocGFyYW1zQ29udGFpbmVy
LmdldCgpLCBcIiRuYW1lXCIsICRvcHRpb25hbCwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOyIpOwog
ICAgICAgICB9CiAgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiIik7CiAgICAgICAgICRpbmRlbnQg
PSAiICAgICI7CkBAIC00NTUsMzEgKzQ2MSwzMCBAQCBzdWIgZ2VuZXJhdGVCYWNrZW5kRnVuY3Rp
b24KICAgICBwdXNoKEBmdW5jdGlvbiwgIiRpbmRlbnQgICAgaWYgKCFwcm90b2NvbEVycm9ycy0+
bGVuZ3RoKCkpIik7CiAgICAgcHVzaChAZnVuY3Rpb24sICIkaW5kZW50ICAgICAgICAkZG9tYWlu
QWNjZXNzb3ItPiRmdW5jdGlvbk5hbWUoJGFyZ3MpOyIpOwogICAgIGlmIChzY2FsYXIoQGluQXJn
cykpIHsKLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgfSBlbHNlIHsiKTsKLSAgICAgICAg
cHVzaChAZnVuY3Rpb24sICIgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFwiUHJv
dG9jb2wgRXJyb3I6ICdhcmd1bWVudHMnIHByb3BlcnR5IHdpdGggdHlwZSAnb2JqZWN0JyB3YXMg
bm90IGZvdW5kLlwiKTsiKTsKLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgfSIpOworICAg
ICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICB9IGVsc2UiKTsKKyAgICAgICAgcHVzaChAZnVuY3Rp
b24sICIgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFwiJ3BhcmFtcycgcHJvcGVy
dHkgd2l0aCB0eXBlICdvYmplY3QnIHdhcyBub3QgZm91bmQuXCIpOyIpOwogICAgIH0KIAorICAg
IHB1c2goQGZ1bmN0aW9uLCAiIik7CiAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgLy8gdXNlIElu
c3BlY3RvckZyb250ZW5kIGFzIGEgbWFya2VyIG9mIFdlYkluc3BlY3RvciBhdmFpbGFiaWxpdHki
KTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBpZiAoY2FsbElkIHx8IHByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSkgeyIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OyIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51
bWJlcihcInJlcXVlc3RJZFwiLCBjYWxsSWQpOyIpOwogICAgIHB1c2goQGZ1bmN0aW9uLCAiIik7
Ci0gICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3Ro
KCkpIik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgICAgICByZXNwb25zZU1lc3NhZ2Ut
PnNldEFycmF5KFwicHJvdG9jb2xFcnJvcnNcIiwgcHJvdG9jb2xFcnJvcnMpOyIpOwotICAgIGlm
IChzY2FsYXIoQG91dEFyZ3MpKSB7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICBl
bHNlIHsiKTsKLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgICAgICBpZiAoZXJyb3Iu
bGVuZ3RoKCkpIik7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICAgICAgICAgIHJl
c3BvbnNlTWVzc2FnZS0+c2V0U3RyaW5nKFwiZXJyb3JcIiwgZXJyb3IpOyIpOwotICAgICAgICBw
dXNoKEBmdW5jdGlvbiwgIiAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Bv
bnNlQm9keSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Iik7Ci0gICAgICAgIHB1c2goQGZ1
bmN0aW9uLCBtYXAoIiAgICAgICAgICAgIHJlc3BvbnNlQm9keS0+c2V0IiAuIHR5cGVUcmFpdHMo
JF8tPnR5cGUsICJKU09OVHlwZSIpIC4gIihcIiIgLiAkXy0+bmFtZSAuICJcIiwgb3V0XyIgLiAk
Xy0+bmFtZSAuICIpOyIsIEBvdXRBcmdzKSk7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAg
ICAgICAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoXCJib2R5XCIsIHJlc3BvbnNlQm9k
eSk7Iik7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICB9Iik7Ci0gICAgfQotICAg
IHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2Vu
ZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOyIpOwor
ICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsi
KTsKKyAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxs
SWQsIEludmFsaWRQYXJhbXMsIHByb3RvY29sRXJyb3JzKTsiKTsKKyAgICBwdXNoKEBmdW5jdGlv
biwgIiAgICAgICAgcmV0dXJuOyIpOwogICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIH0iKTsKLQot
CisgICAgcHVzaChAZnVuY3Rpb24sICIiKTsKKyAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBpZiAo
ZXJyb3IubGVuZ3RoKCkpIHsiKTsKKyAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgcmVwb3J0
UHJvdG9jb2xFcnJvcihjYWxsSWQsIFNlcnZlckVycm9yLCBlcnJvcik7Iik7CisgICAgcHVzaChA
ZnVuY3Rpb24sICIgICAgICAgIHJldHVybjsiKTsKKyAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICB9
Iik7CisgICAgcHVzaChAZnVuY3Rpb24sICIiKTsKKyAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOyIpOworICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Iik7CisgICAgcHVzaChA
ZnVuY3Rpb24sIG1hcCgiICAgICAgICByZXN1bHQtPnNldCIgLiB0eXBlVHJhaXRzKCRfLT50eXBl
LCAiSlNPTlR5cGUiKSAuICIoXCIiIC4gJF8tPm5hbWUgLiAiXCIsIG91dF8iIC4gJF8tPm5hbWUg
LiAiKTsiLCBAb3V0QXJncykpOworICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIHJlc3BvbnNlTWVz
c2FnZS0+c2V0T2JqZWN0KFwicmVzdWx0XCIsIHJlc3VsdCk7Iik7CisgICAgcHVzaChAZnVuY3Rp
b24sICIiKTsKKyAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51
bWJlcihcImlkXCIsIGNhbGxJZCk7Iik7CisgICAgcHVzaChAZnVuY3Rpb24sICIgICAgbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3Nh
Z2UtPnRvSlNPTlN0cmluZygpKTsiKTsKICAgICBwdXNoKEBmdW5jdGlvbiwgIn0iKTsKICAgICBw
dXNoKEBmdW5jdGlvbiwgIiIpOwogICAgIHB1c2goQGJhY2tlbmRNZXRob2RzSW1wbCwgQGZ1bmN0
aW9uKTsKQEAgLTQ4OSwxMyArNDk0LDM0IEBAIHN1YiBnZW5lcmF0ZUJhY2tlbmRSZXBvcnRQcm90
b2NvbEVycm9yCiB7CiAgICAgbXkgJHJlcG9ydFByb3RvY29sRXJyb3IgPSA8PCAiRU9GIjsKIAot
dm9pZCAke2JhY2tlbmRDbGFzc05hbWV9OjpyZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcg
Y2FsbElkLCBjb25zdCBTdHJpbmcmIGVycm9yVGV4dCkgY29uc3QKK3ZvaWQgJHtiYWNrZW5kQ2xh
c3NOYW1lfTo6cmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nIGNhbGxJZCwgQ29tbW9uRXJy
b3JDb2RlIGNvZGUsIGNvbnN0IFN0cmluZyYgY3VzdG9tVGV4dCkgY29uc3QKIHsKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IGRhdGEgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAg
ZGF0YS0+cHVzaFN0cmluZyhjdXN0b21UZXh0KTsKKyAgICByZXBvcnRQcm90b2NvbEVycm9yKGNh
bGxJZCwgY29kZSwgZGF0YS5yZWxlYXNlKCkpOworfQorCit2b2lkICR7YmFja2VuZENsYXNzTmFt
ZX06OnJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyBjYWxsSWQsIENvbW1vbkVycm9yQ29k
ZSBjb2RlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBkYXRhKSBjb25zdAoreworICAgIHN0
YXRpYyBWZWN0b3I8U3RyaW5nPiBjb21tb25FcnJvcnM7CisgICAgaWYgKCFjb21tb25FcnJvcnMu
c2l6ZSgpKSB7CisgICAgICAgIGNvbW1vbkVycm9ycy5pbnNlcnQoUGFyc2VFcnJvciwgIntcXFwi
Y29kZVxcXCI6LTMyNzAwLFxcXCJtZXNzYWdlXFxcIjpcXFwiUGFyc2UgZXJyb3IuXFxcIn0iKTsK
KyAgICAgICAgY29tbW9uRXJyb3JzLmluc2VydChJbnZhbGlkUmVxdWVzdCwgIntcXFwiY29kZVxc
XCI6LTMyNjAwLFxcXCJtZXNzYWdlXFxcIjpcXFwiSW52YWxpZCBSZXF1ZXN0LlxcXCJ9Iik7Cisg
ICAgICAgIGNvbW1vbkVycm9ycy5pbnNlcnQoTWV0aG9kTm90Rm91bmQsICJ7XFxcImNvZGVcXFwi
Oi0zMjYwMSxcXFwibWVzc2FnZVxcXCI6XFxcIk1ldGhvZCBub3QgZm91bmQuXFxcIn0iKTsKKyAg
ICAgICAgY29tbW9uRXJyb3JzLmluc2VydChJbnZhbGlkUGFyYW1zLCAie1xcXCJjb2RlXFxcIjot
MzI2MDIsXFxcIm1lc3NhZ2VcXFwiOlxcXCJJbnZhbGlkIHBhcmFtcy5cXFwifSIpOworICAgICAg
ICBjb21tb25FcnJvcnMuaW5zZXJ0KEludGVybmFsRXJyb3IsICJ7XFxcImNvZGVcXFwiOi0zMjYw
MyxcXFwibWVzc2FnZVxcXCI6XFxcIkludGVybmFsIGVycm9yLlxcXCJ9Iik7CisgICAgICAgIGNv
bW1vbkVycm9ycy5pbnNlcnQoU2VydmVyRXJyb3IsICJ7XFxcImNvZGVcXFwiOi0zMjAwMCxcXFwi
bWVzc2FnZVxcXCI6XFxcIlNlcnZlciBlcnJvci5cXFwifSIpOworICAgIH0KKyAgICBBU1NFUlQo
Y29kZSA+PTApOworICAgIEFTU0VSVCgodW5zaWduZWQpY29kZSA8IGNvbW1vbkVycm9ycy5zaXpl
KCkpOworICAgIEFTU0VSVChjb21tb25FcnJvcnNbY29kZV0pOworICAgIEFTU0VSVChJbnNwZWN0
b3JPYmplY3Q6OnBhcnNlSlNPTihjb21tb25FcnJvcnNbY29kZV0pKTsKKyAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBlcnJvciA9IEluc3BlY3Rvck9iamVjdDo6cGFyc2VKU09OKGNvbW1vbkVy
cm9yc1tjb2RlXSktPmFzT2JqZWN0KCk7CisgICAgQVNTRVJUKGVycm9yKTsKKyAgICBlcnJvci0+
c2V0QXJyYXkoImRhdGEiLCBkYXRhKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNz
YWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtZXNzYWdlLT5zZXROdW1iZXIo
InJlcXVlc3RJZCIsIGNhbGxJZCk7Ci0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBlcnJvcnMg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0gICAgZXJyb3JzLT5wdXNoU3RyaW5nKGVycm9y
VGV4dCk7Ci0gICAgbWVzc2FnZS0+c2V0QXJyYXkoInByb3RvY29sRXJyb3JzIiwgZXJyb3JzKTsK
KyAgICBtZXNzYWdlLT5zZXRPYmplY3QoImVycm9yIiwgZXJyb3IpOworICAgIG1lc3NhZ2UtPnNl
dE51bWJlcigiaWQiLCBjYWxsSWQpOwogICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5z
ZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogRU9GCkBA
IC01MjUsMTIgKzU1MSwxMiBAQCAkcmV0dXJuIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpn
ZXQkdHlwZVN0cmluZyhJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29ucwogCiAgICAgaWYgKHZh
bHVlSXRlcmF0b3IgPT0gZW5kKSB7CiAgICAgICAgIGlmICghb3B0aW9uYWwpCi0gICAgICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUHJvdG9jb2wgRXJy
b3I6IEFyZ3VtZW50ICdcJXMnIHdpdGggdHlwZSAnJGpzb24nIHdhcyBub3QgZm91bmQuIiwgbmFt
ZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmlu
ZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICdcJXMnIHdpdGggdHlwZSAnJGpzb24nIHdhcyBu
b3QgZm91bmQuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CiAgICAgICAgIHJldHVybiB2YWx1ZTsK
ICAgICB9CiAKICAgICBpZiAoIXZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXMkanNvbigmdmFsdWUp
KQotICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUHJv
dG9jb2wgRXJyb3I6IEFyZ3VtZW50ICdcJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBzaG91bGQgYmUg
JyRqc29uJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgcHJvdG9jb2xFcnJvcnMt
PnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnXCVzJyBoYXMgd3JvbmcgdHlw
ZS4gSXQgc2hvdWxkIGJlICckanNvbicuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CiAgICAgcmV0
dXJuIHZhbHVlOwogfQogRU9GCkBAIC01NDUsMTEgKzU3MSw2IEBAIHN1YiBnZW5lcmF0ZUJhY2tl
bmREaXNwYXRjaGVyCiAgICAgbXkgJG1hcEVudHJpZXMgPSBqb2luKCJcbiIsIEBtYXBFbnRyaWVz
KTsKIAogICAgIG15ICRiYWNrZW5kRGlzcGF0Y2hlckJvZHkgPSA8PCAiRU9GIjsKLXN0YXRpYyBT
dHJpbmcgY29tbWFuZE5hbWUoY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYgY29t
bWFuZCkKLXsKLSAgICByZXR1cm4gbWFrZVN0cmluZyhkb21haW4sICJfIiwgY29tbWFuZCk7Ci19
Ci0KIHZvaWQgJHtiYWNrZW5kQ2xhc3NOYW1lfTo6ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNz
YWdlKQogewogICAgIHR5cGVkZWYgdm9pZCAoJHtiYWNrZW5kQ2xhc3NOYW1lfTo6KkNhbGxIYW5k
bGVyKShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiBtZXNzYWdlT2JqZWN0KTsKQEAgLTU2
Myw1NCArNTg0LDQyIEBAICRtYXBFbnRyaWVzCiAKICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IHBhcnNlZE1lc3NhZ2UgPSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKG1lc3NhZ2UpOwogICAg
IGlmICghcGFyc2VkTWVzc2FnZSkgewotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJ
ZCwgIlByb3RvY29sIEVycm9yOiBJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0LiBNZXNzYWdlIHNob3Vs
ZCBiZSBpbiBKU09OIGZvcm1hdC4iKTsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxs
SWQsIFBhcnNlRXJyb3IsICJNZXNzYWdlIHNob3VsZCBiZSBpbiBKU09OIGZvcm1hdC4iKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3Nh
Z2VPYmplY3QgPSBwYXJzZWRNZXNzYWdlLT5hc09iamVjdCgpOwogICAgIGlmICghbWVzc2FnZU9i
amVjdCkgewotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgIlByb3RvY29sIEVy
cm9yOiBJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0LiBUaGUgbWVzc2FnZSBzaG91bGQgYmUgYSBKU09O
aWZpZWQgb2JqZWN0LiIpOworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgSW52
YWxpZFJlcXVlc3QsICJJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0LiBUaGUgbWVzc2FnZSBzaG91bGQg
YmUgYSBKU09OaWZpZWQgb2JqZWN0LiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
UmVmUHRyPEluc3BlY3RvclZhbHVlPiBjb21tYW5kVmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5nZXQo
ImNvbW1hbmQiKTsKLSAgICBpZiAoIWNvbW1hbmRWYWx1ZSkgewotICAgICAgICByZXBvcnRQcm90
b2NvbEVycm9yKGNhbGxJZCwgIlByb3RvY29sIEVycm9yOiBJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0
LiAnY29tbWFuZCcgcHJvcGVydHkgd2Fzbid0IGZvdW5kLiIpOworICAgIFJlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gbWV0aG9kVmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5nZXQoIm1ldGhvZCIpOworICAg
IGlmICghbWV0aG9kVmFsdWUpIHsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQs
IEludmFsaWRSZXF1ZXN0LCAiSW52YWxpZCBtZXNzYWdlIGZvcm1hdC4gJ21ldGhvZCcgcHJvcGVy
dHkgd2Fzbid0IGZvdW5kLiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgU3RyaW5n
IGNvbW1hbmQ7Ci0gICAgaWYgKCFjb21tYW5kVmFsdWUtPmFzU3RyaW5nKCZjb21tYW5kKSkgewot
ICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgIlByb3RvY29sIEVycm9yOiBJbnZh
bGlkIG1lc3NhZ2UgZm9ybWF0LiBUaGUgdHlwZSBvZiAnY29tbWFuZCcgcHJvcGVydHkgc2hvdWxk
IGJlIHN0cmluZy4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gZG9tYWluVmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5nZXQoImRvbWFpbiIpOwot
ICAgIGlmICghZG9tYWluVmFsdWUpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxs
SWQsICJQcm90b2NvbCBFcnJvcjogSW52YWxpZCBtZXNzYWdlIGZvcm1hdC4gJ2RvbWFpbicgcHJv
cGVydHkgd2Fzbid0IGZvdW5kLiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgU3Ry
aW5nIGRvbWFpbjsKLSAgICBpZiAoIWRvbWFpblZhbHVlLT5hc1N0cmluZygmZG9tYWluKSkgewot
ICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgIlByb3RvY29sIEVycm9yOiBJbnZh
bGlkIG1lc3NhZ2UgZm9ybWF0LiBUaGUgdHlwZSBvZiAnZG9tYWluJyBwcm9wZXJ0eSBzaG91bGQg
YmUgc3RyaW5nLiIpOworICAgIFN0cmluZyBtZXRob2Q7CisgICAgaWYgKCFtZXRob2RWYWx1ZS0+
YXNTdHJpbmcoJm1ldGhvZCkpIHsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQs
IEludmFsaWRSZXF1ZXN0LCAiSW52YWxpZCBtZXNzYWdlIGZvcm1hdC4gVGhlIHR5cGUgb2YgJ21l
dGhvZCcgcHJvcGVydHkgc2hvdWxkIGJlIHN0cmluZy4iKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gY2FsbElkVmFsdWUgPSBtZXNzYWdlT2Jq
ZWN0LT5nZXQoImlkIik7CiAgICAgaWYgKCFjYWxsSWRWYWx1ZSkgewotICAgICAgICByZXBvcnRQ
cm90b2NvbEVycm9yKGNhbGxJZCwgIlByb3RvY29sIEVycm9yOiBJbnZhbGlkIG1lc3NhZ2UgZm9y
bWF0LiAnaWQnIHByb3BlcnR5IHdhcyBub3QgZm91bmQgaW4gdGhlIHJlcXVlc3QuIik7CisgICAg
ICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBJbnZhbGlkUmVxdWVzdCwgIkludmFsaWQg
bWVzc2FnZSBmb3JtYXQuICdpZCcgcHJvcGVydHkgd2FzIG5vdCBmb3VuZCBpbiB0aGUgcmVxdWVz
dC4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICghY2FsbElkVmFsdWUtPmFz
TnVtYmVyKCZjYWxsSWQpKSB7Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCAi
UHJvdG9jb2wgRXJyb3I6IEludmFsaWQgbWVzc2FnZSBmb3JtYXQuIFRoZSB0eXBlIG9mICdpZCcg
cHJvcGVydHkgc2hvdWxkIGJlIG51bWJlci4iKTsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJv
cihjYWxsSWQsIEludmFsaWRSZXF1ZXN0LCAiSW52YWxpZCBtZXNzYWdlIGZvcm1hdC4gVGhlIHR5
cGUgb2YgJ2lkJyBwcm9wZXJ0eSBzaG91bGQgYmUgbnVtYmVyLiIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPjo6aXRlcmF0b3IgaXQg
PSBkaXNwYXRjaE1hcC5maW5kKGNvbW1hbmROYW1lKGRvbWFpbiwgY29tbWFuZCkpOworICAgIEhh
c2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj46Oml0ZXJhdG9yIGl0ID0gZGlzcGF0Y2hNYXAuZmlu
ZChtZXRob2QpOwogICAgIGlmIChpdCA9PSBkaXNwYXRjaE1hcC5lbmQoKSkgewotICAgICAgICBy
ZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgbWFrZVN0cmluZygiUHJvdG9jb2wgRXJyb3I6IElu
dmFsaWQgY29tbWFuZCB3YXMgcmVjZWl2ZWQuICciLCBjb21tYW5kLCAiJyB3YXNuJ3QgZm91bmQg
aW4gZG9tYWluICIsIGRvbWFpbiwgIi4iKSk7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3Io
Y2FsbElkLCBNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygiSW52YWxpZCBtZXRob2QgbmFtZSB3
YXMgcmVjZWl2ZWQuICciLCBtZXRob2QsICInIHdhc24ndCBmb3VuZC4iKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTYzMywxNSArNjQyLDkgQEAgYm9vbCAke2JhY2tlbmRDbGFzc05h
bWV9OjpnZXRDb21tYW5kTmFtZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFN0cmluZyogcmVzdWx0
KQogICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTdHJpbmcg
ZG9tYWluOwotICAgIGlmICghb2JqZWN0LT5nZXRTdHJpbmcoImRvbWFpbiIsICZkb21haW4pKQor
ICAgIGlmICghb2JqZWN0LT5nZXRTdHJpbmcoIm1ldGhvZCIsIHJlc3VsdCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIFN0cmluZyBjb21tYW5kOwotICAgIGlmICghb2JqZWN0LT5nZXRT
dHJpbmcoImNvbW1hbmQiLCAmY29tbWFuZCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICpyZXN1bHQgPSBjb21tYW5kTmFtZShkb21haW4sIGNvbW1hbmQpOwogICAgIHJldHVybiB0cnVl
OwogfQogRU9GCkBAIC02NTYsMTggKzY1OSwxOCBAQCBzdWIgY29sbGVjdEJhY2tlbmRKU1N0dWJG
dW5jdGlvbnMKIAogICAgIGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChAZnVuY3Rpb25zKSB7CiAgICAg
ICAgIG15ICRuYW1lID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWU7CisgICAgICAgIG15IEBp
bkFyZ3MgPSBncmVwKCRfLT5kaXJlY3Rpb24gZXEgImluIiwgQHskZnVuY3Rpb24tPnBhcmFtZXRl
cnN9KTsKICAgICAgICAgbXkgJGFyZ3VtZW50TmFtZXMgPSBqb2luKAogICAgICAgICAgICAgIiwi
LAogICAgICAgICAgICAgbWFwKCJcIiIgLiAkXy0+bmFtZSAuICJcIjogeyIKICAgICAgICAgICAg
ICAgICAuICJcIm9wdGlvbmFsXCI6ICIgLiAoJF8tPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJvcHRp
b25hbCJ9ID8gInRydWUgIiA6ICJmYWxzZSIpIC4gIiwgIgogICAgICAgICAgICAgICAgIC4gIlwi
dHlwZVwiOiBcIiIgLiB0eXBlVHJhaXRzKCRfLT50eXBlLCAiSlNUeXBlIikgLiAiXCIiCiAgICAg
ICAgICAgICAgICAgLiAifSIsCi0gICAgICAgICAgICAgICAgZ3JlcCgkXy0+ZGlyZWN0aW9uIGVx
ICJpbiIsIEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkpKTsKKyAgICAgICAgICAgICAgICAgQGlu
QXJncykpOwogICAgICAgICBwdXNoKEBiYWNrZW5kSlNTdHVicywgIiAgICB0aGlzLl9yZWdpc3Rl
ckRlbGVnYXRlKCd7IiAuCi0gICAgICAgICAgICAiXCJpZFwiOiAwLCAiIC4KLSAgICAgICAgICAg
ICJcImRvbWFpblwiOiBcIiRkb21haW5cIiwgIiAuCi0gICAgICAgICAgICAiXCJjb21tYW5kXCI6
IFwiJG5hbWVcIiwgIiAuCi0gICAgICAgICAgICAiXCJhcmd1bWVudHNcIjogeyRhcmd1bWVudE5h
bWVzfSIgLgorICAgICAgICAgICAgIlwibWV0aG9kXCI6IFwiJGRvbWFpbi4kbmFtZVwiLCAiIC4K
KyAgICAgICAgICAgIChzY2FsYXIoQGluQXJncykgPyAiXCJwYXJhbXNcIjogeyRhcmd1bWVudE5h
bWVzfSwgIiA6ICIiKSAuCisgICAgICAgICAgICAiXCJpZFwiOiAwIiAuCiAgICAgICAgICJ9Jyk7
Iik7CiAgICAgfQogfQpAQCAtNjk1LDEzICs2OTgsMTMgQEAgSW5zcGVjdG9yQmFja2VuZFN0dWIu
cHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gY2FsbGJhY2tJZDsKICAgICB9LAogCi0gICAg
X3JlZ2lzdGVyRGVsZWdhdGU6IGZ1bmN0aW9uKGNvbW1hbmRJbmZvKQorICAgIF9yZWdpc3RlckRl
bGVnYXRlOiBmdW5jdGlvbihyZXF1ZXN0U3RyaW5nKQogICAgIHsKLSAgICAgICAgdmFyIGNvbW1h
bmRPYmplY3QgPSBKU09OLnBhcnNlKGNvbW1hbmRJbmZvKTsKLSAgICAgICAgdmFyIGFnZW50TmFt
ZSA9IGNvbW1hbmRPYmplY3QuZG9tYWluICsgIkFnZW50IjsKKyAgICAgICAgdmFyIGRvbWFpbkFu
ZEZ1bmN0aW9uID0gSlNPTi5wYXJzZShyZXF1ZXN0U3RyaW5nKS5tZXRob2Quc3BsaXQoIi4iKTsK
KyAgICAgICAgdmFyIGFnZW50TmFtZSA9IGRvbWFpbkFuZEZ1bmN0aW9uWzBdICsgIkFnZW50IjsK
ICAgICAgICAgaWYgKCF3aW5kb3dbYWdlbnROYW1lXSkKICAgICAgICAgICAgIHdpbmRvd1thZ2Vu
dE5hbWVdID0ge307Ci0gICAgICAgIHdpbmRvd1thZ2VudE5hbWVdW2NvbW1hbmRPYmplY3QuY29t
bWFuZF0gPSB0aGlzLnNlbmRNZXNzYWdlVG9CYWNrZW5kLmJpbmQodGhpcywgY29tbWFuZEluZm8p
OworICAgICAgICB3aW5kb3dbYWdlbnROYW1lXVtkb21haW5BbmRGdW5jdGlvblsxXV0gPSB0aGlz
LnNlbmRNZXNzYWdlVG9CYWNrZW5kLmJpbmQodGhpcywgcmVxdWVzdFN0cmluZyk7CiAgICAgfSwK
IAogICAgIHNlbmRNZXNzYWdlVG9CYWNrZW5kOiBmdW5jdGlvbigpCkBAIC03MDksMzMgKzcxMiwz
NyBAQCBJbnNwZWN0b3JCYWNrZW5kU3R1Yi5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBhcmdz
ID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTsKICAgICAgICAgdmFyIHJl
cXVlc3QgPSBKU09OLnBhcnNlKGFyZ3Muc2hpZnQoKSk7CiAgICAgICAgIHZhciBjYWxsYmFjayA9
IChhcmdzLmxlbmd0aCAmJiB0eXBlb2YgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSAiZnVuY3Rp
b24iKSA/IGFyZ3MucG9wKCkgOiAwOworICAgICAgICB2YXIgZG9tYWluQW5kTWV0aG9kID0gcmVx
dWVzdC5tZXRob2Quc3BsaXQoIi4iKTsKKyAgICAgICAgdmFyIGFnZW50TWV0aG9kID0gZG9tYWlu
QW5kTWV0aG9kWzBdICsgIkFnZW50LiIgKyBkb21haW5BbmRNZXRob2RbMV07CiAKLSAgICAgICAg
Zm9yICh2YXIga2V5IGluIHJlcXVlc3QuYXJndW1lbnRzKSB7Ci0gICAgICAgICAgICB2YXIgdHlw
ZU5hbWUgPSByZXF1ZXN0LmFyZ3VtZW50c1trZXldLnR5cGU7Ci0gICAgICAgICAgICB2YXIgb3B0
aW9uYWxGbGFnID0gcmVxdWVzdC5hcmd1bWVudHNba2V5XS5vcHRpb25hbDsKKyAgICAgICAgaWYg
KHJlcXVlc3QucGFyYW1zKSB7CisgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcmVxdWVzdC5w
YXJhbXMpIHsKKyAgICAgICAgICAgICAgICB2YXIgdHlwZU5hbWUgPSByZXF1ZXN0LnBhcmFtc1tr
ZXldLnR5cGU7CisgICAgICAgICAgICAgICAgdmFyIG9wdGlvbmFsRmxhZyA9IHJlcXVlc3QucGFy
YW1zW2tleV0ub3B0aW9uYWw7CiAKLSAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCAm
JiAhb3B0aW9uYWxGbGFnKSB7Ci0gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9j
b2wgRXJyb3I6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgJyIgKyByZXF1ZXN0LmRv
bWFpbiArICJBZ2VudC4iICsgcmVxdWVzdC5jb21tYW5kICsgIicgY2FsbC4gSXQgc2hvdWxkIGhh
dmUgdGhlIG5leHQgYXJndW1lbnRzICciICsgSlNPTi5zdHJpbmdpZnkocmVxdWVzdC5hcmd1bWVu
dHMpICsgIicuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCAmJiAhb3B0aW9uYWxGbGFnKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29sIEVycm9yOiBJbnZhbGlk
IG51bWJlciBvZiBhcmd1bWVudHMgZm9yIG1ldGhvZCAnIiArIGFnZW50TWV0aG9kICsgIicgY2Fs
bC4gSXQgc2hvdWxkIGhhdmUgdGhlIG5leHQgYXJndW1lbnRzICciICsgSlNPTi5zdHJpbmdpZnko
cmVxdWVzdC5wYXJhbXMpICsgIicuIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHZhciB2YWx1ZSA9IGFyZ3Muc2hpZnQoKTsK
LSAgICAgICAgICAgIGlmIChvcHRpb25hbEZsYWcgJiYgdHlwZW9mIHZhbHVlID09PSAidW5kZWZp
bmVkIikgewotICAgICAgICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0LmFyZ3VtZW50c1trZXldOwot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHZhciB2YWx1ZSA9IGFyZ3Muc2hpZnQoKTsKKyAgICAgICAgICAgICAgICBpZiAob3B0aW9uYWxG
bGFnICYmIHR5cGVvZiB2YWx1ZSA9PT0gInVuZGVmaW5lZCIpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZGVsZXRlIHJlcXVlc3QucGFyYW1zW2tleV07CisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAh
PT0gdHlwZU5hbWUpIHsKLSAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBF
cnJvcjogSW52YWxpZCB0eXBlIG9mIGFyZ3VtZW50ICciICsga2V5ICsgIicgZm9yICciICsgcmVx
dWVzdC5kb21haW4gKyAiQWdlbnQuIiArIHJlcXVlc3QuY29tbWFuZCArICInIGNhbGwuIEl0IHNo
b3VsZCBiZSAnIiArIHR5cGVOYW1lICsgIicgYnV0IGl0IGlzICciICsgdHlwZW9mIHZhbHVlICsg
IicuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IHR5cGVOYW1lKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29sIEVycm9yOiBJbnZhbGlkIHR5cGUgb2YgYXJndW1l
bnQgJyIgKyBrZXkgKyAiJyBmb3IgbWV0aG9kICciICsgYWdlbnRNZXRob2QgKyAiJyBjYWxsLiBJ
dCBzaG91bGQgYmUgJyIgKyB0eXBlTmFtZSArICInIGJ1dCBpdCBpcyAnIiArIHR5cGVvZiB2YWx1
ZSArICInLiIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICByZXF1ZXN0LmFyZ3VtZW50c1trZXldID0gdmFsdWU7CisgICAgICAg
ICAgICAgICAgcmVxdWVzdC5wYXJhbXNba2V5XSA9IHZhbHVlOworICAgICAgICAgICAgfQogICAg
ICAgICB9CiAKICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmICFjYWxsYmFjaykgewog
ICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdICE9PSAidW5kZWZpbmVkIikgewotICAgICAg
ICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29sIEVycm9yOiBPcHRpb25hbCBjYWxsYmFj
ayBhcmd1bWVudCBmb3IgJyIgKyByZXF1ZXN0LmRvbWFpbiArICJBZ2VudC4iICsgcmVxdWVzdC5j
b21tYW5kICsgIicgY2FsbCBzaG91bGQgYmUgYSBmdW5jdGlvbiBidXQgaXRzIHR5cGUgaXMgJyIg
KyB0eXBlb2YgYXJnc1swXSArICInLiIpOworICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3Io
IlByb3RvY29sIEVycm9yOiBPcHRpb25hbCBjYWxsYmFjayBhcmd1bWVudCBmb3IgbWV0aG9kICci
ICsgYWdlbnRNZXRob2QgKyAiJyBjYWxsIHNob3VsZCBiZSBhIGZ1bmN0aW9uIGJ1dCBpdHMgdHlw
ZSBpcyAnIiArIHR5cGVvZiBhcmdzWzBdICsgIicuIik7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC03NjIsNTggKzc2OSw1OCBAQCBJbnNwZWN0
b3JCYWNrZW5kU3R1Yi5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdmFyIG1lc3NhZ2VPYmplY3Qg
PSAodHlwZW9mIG1lc3NhZ2UgPT09ICJzdHJpbmciKSA/IEpTT04ucGFyc2UobWVzc2FnZSkgOiBt
ZXNzYWdlOwogCi0gICAgICAgIGlmICgicmVxdWVzdElkIiBpbiBtZXNzYWdlT2JqZWN0KSB7IC8v
IGp1c3QgYSByZXNwb25zZSBmb3Igc29tZSByZXF1ZXN0Ci0gICAgICAgICAgICBpZiAobWVzc2Fn
ZU9iamVjdC5wcm90b2NvbEVycm9ycykKKyAgICAgICAgaWYgKCJpZCIgaW4gbWVzc2FnZU9iamVj
dCkgeyAvLyBqdXN0IGEgcmVzcG9uc2UgZm9yIHNvbWUgcmVxdWVzdAorICAgICAgICAgICAgaWYg
KG1lc3NhZ2VPYmplY3QuZXJyb3IgJiYgbWVzc2FnZU9iamVjdC5lcnJvci5jb2RlICE9PSAtMzIw
MDApCiAgICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRQcm90b2NvbEVycm9yKG1lc3NhZ2VPYmpl
Y3QpOwogCiAgICAgICAgICAgICB2YXIgYXJndW1lbnRzID0gW107Ci0gICAgICAgICAgICBpZiAo
bWVzc2FnZU9iamVjdC5ib2R5KSB7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG1l
c3NhZ2VPYmplY3QuYm9keSkKLSAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzLnB1c2gobWVz
c2FnZU9iamVjdC5ib2R5W2tleV0pOworICAgICAgICAgICAgaWYgKG1lc3NhZ2VPYmplY3QucmVz
dWx0KSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG1lc3NhZ2VPYmplY3QucmVz
dWx0KQorICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMucHVzaChtZXNzYWdlT2JqZWN0LnJl
c3VsdFtrZXldKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0g
dGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VPYmplY3QucmVxdWVzdElkXTsKKyAgICAgICAgICAgIHZh
ciBjYWxsYmFjayA9IHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlT2JqZWN0LmlkXTsKICAgICAgICAg
ICAgIGlmIChjYWxsYmFjaykgewotICAgICAgICAgICAgICAgIGlmICghbWVzc2FnZU9iamVjdC5w
cm90b2NvbEVycm9ycykgewotICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMudW5zaGlmdCht
ZXNzYWdlT2JqZWN0LmVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHko
bnVsbCwgYXJndW1lbnRzKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYXJn
dW1lbnRzLnVuc2hpZnQobWVzc2FnZU9iamVjdC5lcnJvcik7CisgICAgICAgICAgICAgICAgY2Fs
bGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKICAgICAgICAgICAgICAgICAtLXRoaXMuX3Bl
bmRpbmdSZXNwb25zZXNDb3VudDsKLSAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fY2FsbGJh
Y2tzW21lc3NhZ2VPYmplY3QucmVxdWVzdElkXTsKKyAgICAgICAgICAgICAgICBkZWxldGUgdGhp
cy5fY2FsbGJhY2tzW21lc3NhZ2VPYmplY3QuaWRdOwogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICBpZiAodGhpcy5fc2NyaXB0cyAmJiAhdGhpcy5fcGVuZGluZ1Jlc3BvbnNlc0NvdW50KQog
ICAgICAgICAgICAgICAgIHRoaXMucnVuQWZ0ZXJQZW5kaW5nRGlzcGF0Y2hlcygpOwogCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobWVzc2FnZU9iamVjdC50
eXBlID09PSAiZXZlbnQiKSB7Ci0gICAgICAgICAgICBpZiAoIShtZXNzYWdlT2JqZWN0LmRvbWFp
biBpbiB0aGlzLl9kb21haW5EaXNwYXRjaGVycykpIHsKLSAgICAgICAgICAgICAgICBjb25zb2xl
LmVycm9yKCJQcm90b2NvbCBFcnJvcjogdGhlIG1lc3NhZ2UgaXMgZm9yIG5vbi1leGlzdGluZyBk
b21haW4gJyIgKyBtZXNzYWdlT2JqZWN0LmRvbWFpbiArICInIik7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICB2YXIgbWV0aG9kID0gbWVzc2FnZU9iamVjdC5tZXRob2Quc3BsaXQoIi4i
KTsKKyAgICAgICAgICAgIHZhciBkb21haW5OYW1lID0gbWV0aG9kWzBdOworICAgICAgICAgICAg
dmFyIGZ1bmN0aW9uTmFtZSA9IG1ldGhvZFsxXTsKKyAgICAgICAgICAgIGlmICghKGRvbWFpbk5h
bWUgaW4gdGhpcy5fZG9tYWluRGlzcGF0Y2hlcnMpKSB7CisgICAgICAgICAgICAgICAgY29uc29s
ZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IHRoZSBtZXNzYWdlIGlzIGZvciBub24tZXhpc3Rpbmcg
ZG9tYWluICciICsgZG9tYWluTmFtZSArICInIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIGRpc3BhdGNoZXIgPSB0aGlzLl9kb21haW5E
aXNwYXRjaGVyc1ttZXNzYWdlT2JqZWN0LmRvbWFpbl07Ci0gICAgICAgICAgICBpZiAoIShtZXNz
YWdlT2JqZWN0LmV2ZW50IGluIGRpc3BhdGNoZXIpKSB7Ci0gICAgICAgICAgICAgICAgY29uc29s
ZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IEF0dGVtcHRlZCB0byBkaXNwYXRjaCBhbiB1bmltcGxl
bWVudGVkIG1ldGhvZCAnIiArIG1lc3NhZ2VPYmplY3QuZG9tYWluICsgIi4iICsgbWVzc2FnZU9i
amVjdC5ldmVudCArICInIik7CisgICAgICAgICAgICB2YXIgZGlzcGF0Y2hlciA9IHRoaXMuX2Rv
bWFpbkRpc3BhdGNoZXJzW2RvbWFpbk5hbWVdOworICAgICAgICAgICAgaWYgKCEoZnVuY3Rpb25O
YW1lIGluIGRpc3BhdGNoZXIpKSB7CisgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJv
dG9jb2wgRXJyb3I6IEF0dGVtcHRlZCB0byBkaXNwYXRjaCBhbiB1bmltcGxlbWVudGVkIG1ldGhv
ZCAnIiArIG1lc3NhZ2VPYmplY3QubWV0aG9kICsgIiciKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHZhciBhcmd1bWVudHMgPSBbXTsKLSAg
ICAgICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LmRhdGEpIHsKLSAgICAgICAgICAgICAgICBmb3Ig
KHZhciBrZXkgaW4gbWVzc2FnZU9iamVjdC5kYXRhKQotICAgICAgICAgICAgICAgICAgICBhcmd1
bWVudHMucHVzaChtZXNzYWdlT2JqZWN0LmRhdGFba2V5XSk7CisgICAgICAgICAgICB2YXIgcGFy
YW1zID0gW107CisgICAgICAgICAgICBpZiAobWVzc2FnZU9iamVjdC5wYXJhbXMpIHsKKyAgICAg
ICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gbWVzc2FnZU9iamVjdC5wYXJhbXMpCisgICAgICAg
ICAgICAgICAgICAgIHBhcmFtcy5wdXNoKG1lc3NhZ2VPYmplY3QucGFyYW1zW2tleV0pOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBkaXNwYXRjaGVyW21lc3NhZ2VPYmplY3QuZXZlbnRd
LmFwcGx5KGRpc3BhdGNoZXIsIGFyZ3VtZW50cyk7CisgICAgICAgICAgICBkaXNwYXRjaGVyW2Z1
bmN0aW9uTmFtZV0uYXBwbHkoZGlzcGF0Y2hlciwgcGFyYW1zKTsKICAgICAgICAgfQogICAgIH0s
CiAKICAgICByZXBvcnRQcm90b2NvbEVycm9yOiBmdW5jdGlvbihtZXNzYWdlT2JqZWN0KQogICAg
IHsKLSAgICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IEluc3BlY3RvckJhY2tl
bmQgcmVxdWVzdCB3aXRoIGlkID0gIiArIG1lc3NhZ2VPYmplY3QucmVxdWVzdElkICsgIiBmYWls
ZWQuIik7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZU9iamVjdC5wcm90b2Nv
bEVycm9ycy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIiAgICAiICsg
bWVzc2FnZU9iamVjdC5wcm90b2NvbEVycm9yc1tpXSk7CisgICAgICAgIHZhciBlcnJvciA9IG1l
c3NhZ2VPYmplY3QuZXJyb3I7CisgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IubWVzc2FnZSAr
ICIoIiArIGVycm9yLmNvZGUgKyAiKTogcmVxdWVzdCB3aXRoIGlkID0gIiArIG1lc3NhZ2VPYmpl
Y3QuaWQgKyAiIGZhaWxlZC4iKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlcnJvci5k
YXRhLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgY29uc29sZS5lcnJvcigiICAgICIgKyBlcnJv
ci5kYXRhW2ldKTsKICAgICB9LAogCiAgICAgcnVuQWZ0ZXJQZW5kaW5nRGlzcGF0Y2hlczogZnVu
Y3Rpb24oc2NyaXB0KQpAQCAtOTU0LDcgKzk2MSwxOSBAQCBzdWIgZ2VuZXJhdGVCYWNrZW5kQWdl
bnRGaWVsZHNBbmRDb25zdHJ1Y3RvcgogICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAgICR7YmFj
a2VuZENsYXNzTmFtZX0oJHthcmd1bWVudFN0cmluZ30pIik7CiAgICAgcHVzaChAYmFja2VuZEhl
YWQsIEBmaWVsZEluaXRpYWxpemVycyk7CiAgICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgeyB9
Iik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgdm9pZCByZXBvcnRQcm90b2NvbEVycm9y
KGNvbnN0IGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIGVycm9yVGV4dCkgY29uc3Q7Iik7Cisg
ICAgcHVzaChAYmFja2VuZEhlYWQsICIiKTsKKyAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICBl
bnVtIENvbW1vbkVycm9yQ29kZSB7Iik7CisgICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgICAg
IFBhcnNlRXJyb3IgPSAwLCIpOworICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAgICAgICBJbnZh
bGlkUmVxdWVzdCwiKTsKKyAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICAgICAgTWV0aG9kTm90
Rm91bmQsIik7CisgICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgICAgIEludmFsaWRQYXJhbXMs
Iik7CisgICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgICAgIEludGVybmFsRXJyb3IsIik7Cisg
ICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgICAgIFNlcnZlckVycm9yLCIpOworICAgIHB1c2go
QGJhY2tlbmRIZWFkLCAiICAgICAgICBMYXN0RW50cnksIik7CisgICAgcHVzaChAYmFja2VuZEhl
YWQsICIgICAgfTsiKTsKKyAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiIpOworICAgIHB1c2goQGJh
Y2tlbmRIZWFkLCAiICAgIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nIGNhbGxJ
ZCwgQ29tbW9uRXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yVGV4dCkgY29uc3Q7Iik7Cisg
ICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgdm9pZCByZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0
IGxvbmcgY2FsbElkLCBDb21tb25FcnJvckNvZGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IGRhdGEpIGNvbnN0OyIpOwogICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAgIHZvaWQgZGlzcGF0
Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsiKTsKICAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAg
ICBzdGF0aWMgYm9vbCBnZXRDb21tYW5kTmFtZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFN0cmlu
ZyogcmVzdWx0KTsiKTsKICAgICAkYmFja2VuZENvbnN0cnVjdG9yID0gam9pbigiXG4iLCBAYmFj
a2VuZEhlYWQpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88457</attachid>
            <date>2011-04-06 09:53:31 -0700</date>
            <delta_ts>2011-04-07 06:40:28 -0700</delta_ts>
            <desc>[patch] initial version with fixed ChangeLogs</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>45436</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjZjRkZjFlLi42MTIzYWMwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTEtMDQt
MDYgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IG1pZ3Jh
dGUgSW5zcGVjdG9yIHByb3RvY29sIG1lc3NhZ2VzIGZvcm1hdCB0byBKU09OLVJQQy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3OTU3CisKKyAgICAg
ICAgVGhlcmUgaXMgbm90IGEgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBiZXR3ZWVuICBpbnNwZWN0
b3IgbWVzc2FnZXMgc3BlYyBhbmQgYW5kIEpTT04tUlBDIDIuMCBtZXNzYWdlcyBzcGVjLgorICAg
ICAgICBBbHNvIEpTT04tUlBDIGhhcyBhIHByZXR0eSBjbGVhciBzcGVjaWZpY2F0aW9uIGZvciBl
cnJvciBkZXNjcmlwdGlvbnMgd2hpY2ggd2UgaGF2ZW4ndC4KKyAgICAgICAgSXQgd2FzIGRlY2lk
ZWQgdGhhdCB3ZSB3aWxsIHVzZSBpdC4KKworICAgICAgICB0aGUgbGlzdCBvZiByZW5hbWVzOgor
ICAgICAgICAxKSB0eXBlLT4gL2Rldi9udWxsCisgICAgICAgIDIpIGRvbWFpbiArICcuJyArIGV2
ZW50ID0+IG1ldGhvZCAvLyBmb3IgZXZlbnRzCisgICAgICAgIDMpIGRvbWFpbiArICcuJyArIGNv
bW1hbmQgPT4gbWV0aG9kIC8vIGZvciByZXF1ZXN0cworICAgICAgICA0KSByZXF1ZXN0SWQgPT4g
aWQgLy8gZm9yIHJlc3BvbnNlcworICAgICAgICA1KSBhcmd1bWVudHMgPT4gcGFyYW1zIC8vIGZv
ciByZXF1ZXN0cworICAgICAgICA2KSBkYXRhID0+IHBhcmFtcyAvLyBmb3IgZXZlbnRzCisgICAg
ICAgIDcpIGJvZHkgPT4gcmVzdWx0IC8vIGZvciByZXNwb25zZXMKKworICAgICAgICBwcm90b2Nv
bEVycm9ycyBhbmQgZXJyb3IgcHJvcGVydGllcyB3aWxsIGJlIGNvbnZlcnRlZCB0byBKU09OLVJQ
QyBlcnJvciBmb3JtYXQuCisgICAgICAgIFRoZSBvcmRlciBvZiBwcm9wZXJ0aWVzIGluIG1lc3Nh
Z2VzIGFsc28gd2lsbCBiZSBhZGp1c3RlZC4KKyAgICAgICAgVGhlIG9ubHkgdGhpbmcgdGhhdCBs
b29rcyB1bm5lY2Vzc2FyeSBpcyBqc29ucnBjIHByb3BlcnR5LgorCisgICAgICAgICogaW5zcGVj
dG9yL3Byb3RvY29sL2NvbnNvbGUtYWdlbnQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGluc3Bl
Y3Rvci9wcm90b2NvbC9ydW50aW1lLWFnZW50LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvcmVwb3J0LUFQSS1lcnJvcnMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGluc3BlY3Rv
ci9yZXBvcnQtQVBJLWVycm9ycy5odG1sOgorICAgICAgICAqIGluc3BlY3Rvci9yZXBvcnQtcHJv
dG9jb2wtZXJyb3JzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3IvcmVwb3J0LXBy
b3RvY29sLWVycm9ycy5odG1sOgorCiAyMDExLTA0LTA2ICBBZHJpZW5uZSBXYWxrZXIgIDxlbm5l
QGdvb2dsZS5jb20+CiAKICAgICAgICBVbnJldmlld2VkLCBhZGQgQ2hyb21pdW0gc25vdyBsZW9w
YXJkIGJhc2VsaW5lIGZvciBtZXRlci1ib3VuZGFyeS12YWx1ZXMKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2luc3BlY3Rvci9wcm90b2NvbC9jb25zb2xlLWFnZW50LWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9wcm90b2NvbC9jb25zb2xlLWFnZW50LWV4cGVjdGVkLnR4dApp
bmRleCAzMzI1ZmYwLi5iYmQ1ZTZkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
cHJvdG9jb2wvY29uc29sZS1hZ2VudC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL3Byb3RvY29sL2NvbnNvbGUtYWdlbnQtZXhwZWN0ZWQudHh0CkBAIC03LDE2ICs3LDE1
IEBAIENvbnNvbGVBZ2VudC5kaXNhYmxlKCkKIAogcmVxdWVzdDoKIHsKKyAgICBtZXRob2QgOiAi
Q29uc29sZS5kaXNhYmxlIgogICAgIGlkIDogPG51bWJlcj4KLSAgICBkb21haW4gOiAiQ29uc29s
ZSIKLSAgICBjb21tYW5kIDogImRpc2FibGUiCi0gICAgYXJndW1lbnRzIDogewotICAgIH0KIH0K
IAogcmVzcG9uc2U6CiB7Ci0gICAgcmVxdWVzdElkIDogPG51bWJlcj4KKyAgICByZXN1bHQgOiB7
CisgICAgfQorICAgIGlkIDogPG51bWJlcj4KIH0KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI0LDE5ICsyMywxNiBAQCBD
b25zb2xlQWdlbnQuZW5hYmxlKCkKIAogcmVxdWVzdDoKIHsKKyAgICBtZXRob2QgOiAiQ29uc29s
ZS5lbmFibGUiCiAgICAgaWQgOiA8bnVtYmVyPgotICAgIGRvbWFpbiA6ICJDb25zb2xlIgotICAg
IGNvbW1hbmQgOiAiZW5hYmxlIgotICAgIGFyZ3VtZW50cyA6IHsKLSAgICB9CiB9CiAKIHJlc3Bv
bnNlOgogewotICAgIHJlcXVlc3RJZCA6IDxudW1iZXI+Ci0gICAgYm9keSA6IHsKKyAgICByZXN1
bHQgOiB7CiAgICAgICAgIGV4cGlyZWRNZXNzYWdlc0NvdW50IDogMAogICAgIH0KKyAgICBpZCA6
IDxudW1iZXI+CiB9CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00NCwyMiArNDAsMTkgQEAgUnVudGltZUFnZW50LmV2YWx1
YXRlKCJjb25zb2xlLmluZm8oJ3Rlc3QnKTsgY29uc29sZS5pbmZvKCd0ZXN0JykiLCJ0ZXN0LWdy
b3VwIiwKIAogcmVxdWVzdDoKIHsKLSAgICBpZCA6IDxudW1iZXI+Ci0gICAgZG9tYWluIDogIlJ1
bnRpbWUiCi0gICAgY29tbWFuZCA6ICJldmFsdWF0ZSIKLSAgICBhcmd1bWVudHMgOiB7CisgICAg
bWV0aG9kIDogIlJ1bnRpbWUuZXZhbHVhdGUiCisgICAgcGFyYW1zIDogewogICAgICAgICBleHBy
ZXNzaW9uIDogImNvbnNvbGUuaW5mbygndGVzdCcpOyBjb25zb2xlLmluZm8oJ3Rlc3QnKSIKICAg
ICAgICAgb2JqZWN0R3JvdXAgOiAidGVzdC1ncm91cCIKICAgICAgICAgaW5jbHVkZUNvbW1hbmRM
aW5lQVBJIDogZmFsc2UKICAgICB9CisgICAgaWQgOiA8bnVtYmVyPgogfQogCiBldmVudCBDb25z
b2xlQWdlbnQuY29uc29sZU1lc3NhZ2UKIHsKLSAgICB0eXBlIDogImV2ZW50IgotICAgIGRvbWFp
biA6ICJDb25zb2xlIgotICAgIGV2ZW50IDogImNvbnNvbGVNZXNzYWdlIgotICAgIGRhdGEgOiB7
CisgICAgbWV0aG9kIDogIkNvbnNvbGUuY29uc29sZU1lc3NhZ2UiCisgICAgcGFyYW1zIDogewog
ICAgICAgICBtZXNzYWdlT2JqIDogewogICAgICAgICAgICAgc291cmNlIDogMwogICAgICAgICAg
ICAgdHlwZSA6IDAKQEAgLTgxLDIzICs3NCwyMSBAQCBldmVudCBDb25zb2xlQWdlbnQuY29uc29s
ZU1lc3NhZ2UKIAogZXZlbnQgQ29uc29sZUFnZW50LmNvbnNvbGVNZXNzYWdlUmVwZWF0Q291bnRV
cGRhdGVkCiB7Ci0gICAgdHlwZSA6ICJldmVudCIKLSAgICBkb21haW4gOiAiQ29uc29sZSIKLSAg
ICBldmVudCA6ICJjb25zb2xlTWVzc2FnZVJlcGVhdENvdW50VXBkYXRlZCIKLSAgICBkYXRhIDog
eworICAgIG1ldGhvZCA6ICJDb25zb2xlLmNvbnNvbGVNZXNzYWdlUmVwZWF0Q291bnRVcGRhdGVk
IgorICAgIHBhcmFtcyA6IHsKICAgICAgICAgY291bnQgOiAyCiAgICAgfQogfQogCiByZXNwb25z
ZToKIHsKLSAgICByZXF1ZXN0SWQgOiA8bnVtYmVyPgotICAgIGJvZHkgOiB7CisgICAgcmVzdWx0
IDogewogICAgICAgICByZXN1bHQgOiB7CiAgICAgICAgICAgICB0eXBlIDogInVuZGVmaW5lZCIK
ICAgICAgICAgICAgIGRlc2NyaXB0aW9uIDogInVuZGVmaW5lZCIKICAgICAgICAgfQogICAgIH0K
KyAgICBpZCA6IDxudW1iZXI+CiB9CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMDUsMjUgKzk2LDIwIEBAIENvbnNvbGVB
Z2VudC5jbGVhckNvbnNvbGVNZXNzYWdlcygpCiAKIHJlcXVlc3Q6CiB7CisgICAgbWV0aG9kIDog
IkNvbnNvbGUuY2xlYXJDb25zb2xlTWVzc2FnZXMiCiAgICAgaWQgOiA8bnVtYmVyPgotICAgIGRv
bWFpbiA6ICJDb25zb2xlIgotICAgIGNvbW1hbmQgOiAiY2xlYXJDb25zb2xlTWVzc2FnZXMiCi0g
ICAgYXJndW1lbnRzIDogewotICAgIH0KIH0KIAogZXZlbnQgQ29uc29sZUFnZW50LmNvbnNvbGVN
ZXNzYWdlc0NsZWFyZWQKIHsKLSAgICB0eXBlIDogImV2ZW50IgotICAgIGRvbWFpbiA6ICJDb25z
b2xlIgotICAgIGV2ZW50IDogImNvbnNvbGVNZXNzYWdlc0NsZWFyZWQiCi0gICAgZGF0YSA6IHsK
LSAgICB9CisgICAgbWV0aG9kIDogIkNvbnNvbGUuY29uc29sZU1lc3NhZ2VzQ2xlYXJlZCIKIH0K
IAogcmVzcG9uc2U6CiB7Ci0gICAgcmVxdWVzdElkIDogPG51bWJlcj4KKyAgICByZXN1bHQgOiB7
CisgICAgfQorICAgIGlkIDogPG51bWJlcj4KIH0KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEzMSwxNyArMTE3LDE4IEBA
IENvbnNvbGVBZ2VudC5zZXRNb25pdG9yaW5nWEhSRW5hYmxlZCh0cnVlKQogCiByZXF1ZXN0Ogog
ewotICAgIGlkIDogPG51bWJlcj4KLSAgICBkb21haW4gOiAiQ29uc29sZSIKLSAgICBjb21tYW5k
IDogInNldE1vbml0b3JpbmdYSFJFbmFibGVkIgotICAgIGFyZ3VtZW50cyA6IHsKKyAgICBtZXRo
b2QgOiAiQ29uc29sZS5zZXRNb25pdG9yaW5nWEhSRW5hYmxlZCIKKyAgICBwYXJhbXMgOiB7CiAg
ICAgICAgIGVuYWJsZWQgOiB0cnVlCiAgICAgfQorICAgIGlkIDogPG51bWJlcj4KIH0KIAogcmVz
cG9uc2U6CiB7Ci0gICAgcmVxdWVzdElkIDogPG51bWJlcj4KKyAgICByZXN1bHQgOiB7CisgICAg
fQorICAgIGlkIDogPG51bWJlcj4KIH0KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE0OSwxNyArMTM2LDE4IEBAIENvbnNv
bGVBZ2VudC5zZXRNb25pdG9yaW5nWEhSRW5hYmxlZChmYWxzZSkKIAogcmVxdWVzdDoKIHsKLSAg
ICBpZCA6IDxudW1iZXI+Ci0gICAgZG9tYWluIDogIkNvbnNvbGUiCi0gICAgY29tbWFuZCA6ICJz
ZXRNb25pdG9yaW5nWEhSRW5hYmxlZCIKLSAgICBhcmd1bWVudHMgOiB7CisgICAgbWV0aG9kIDog
IkNvbnNvbGUuc2V0TW9uaXRvcmluZ1hIUkVuYWJsZWQiCisgICAgcGFyYW1zIDogewogICAgICAg
ICBlbmFibGVkIDogZmFsc2UKICAgICB9CisgICAgaWQgOiA8bnVtYmVyPgogfQogCiByZXNwb25z
ZToKIHsKLSAgICByZXF1ZXN0SWQgOiA8bnVtYmVyPgorICAgIHJlc3VsdCA6IHsKKyAgICB9Cisg
ICAgaWQgOiA8bnVtYmVyPgogfQogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTY3LDE3ICsxNTUsMTggQEAgQ29uc29sZUFn
ZW50LmFkZEluc3BlY3RlZE5vZGUoPG51bWJlcj4pCiAKIHJlcXVlc3Q6CiB7Ci0gICAgaWQgOiA8
bnVtYmVyPgotICAgIGRvbWFpbiA6ICJDb25zb2xlIgotICAgIGNvbW1hbmQgOiAiYWRkSW5zcGVj
dGVkTm9kZSIKLSAgICBhcmd1bWVudHMgOiB7CisgICAgbWV0aG9kIDogIkNvbnNvbGUuYWRkSW5z
cGVjdGVkTm9kZSIKKyAgICBwYXJhbXMgOiB7CiAgICAgICAgIG5vZGVJZCA6IDEKICAgICB9Cisg
ICAgaWQgOiA8bnVtYmVyPgogfQogCiByZXNwb25zZToKIHsKLSAgICByZXF1ZXN0SWQgOiA8bnVt
YmVyPgorICAgIHJlc3VsdCA6IHsKKyAgICB9CisgICAgaWQgOiA8bnVtYmVyPgogfQogCiA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb3RvY29sL3J1bnRpbWUtYWdlbnQt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb3RvY29sL3J1bnRpbWUtYWdl
bnQtZXhwZWN0ZWQudHh0CmluZGV4IDkyZGJmZTQuLmVkYWE1OGQgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2luc3BlY3Rvci9wcm90b2NvbC9ydW50aW1lLWFnZW50LWV4cGVjdGVkLnR4dAorKysg
Yi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJvdG9jb2wvcnVudGltZS1hZ2VudC1leHBlY3RlZC50
eHQKQEAgLTUsMjAgKzUsMTggQEAgUnVudGltZUFnZW50LmV2YWx1YXRlKCJ0ZXN0T2JqZWN0Iiwi
dGVzdCIsZmFsc2UpCiAKIHJlcXVlc3Q6CiB7Ci0gICAgaWQgOiA8bnVtYmVyPgotICAgIGRvbWFp
biA6ICJSdW50aW1lIgotICAgIGNvbW1hbmQgOiAiZXZhbHVhdGUiCi0gICAgYXJndW1lbnRzIDog
eworICAgIG1ldGhvZCA6ICJSdW50aW1lLmV2YWx1YXRlIgorICAgIHBhcmFtcyA6IHsKICAgICAg
ICAgZXhwcmVzc2lvbiA6ICJ0ZXN0T2JqZWN0IgogICAgICAgICBvYmplY3RHcm91cCA6ICJ0ZXN0
IgogICAgICAgICBpbmNsdWRlQ29tbWFuZExpbmVBUEkgOiBmYWxzZQogICAgIH0KKyAgICBpZCA6
IDxudW1iZXI+CiB9CiAKIHJlc3BvbnNlOgogewotICAgIHJlcXVlc3RJZCA6IDxudW1iZXI+Ci0g
ICAgYm9keSA6IHsKKyAgICByZXN1bHQgOiB7CiAgICAgICAgIHJlc3VsdCA6IHsKICAgICAgICAg
ICAgIG9iamVjdElkIDogPHN0cmluZz4KICAgICAgICAgICAgIGhhc0NoaWxkcmVuIDogdHJ1ZQpA
QCAtMjYsNiArMjQsNyBAQCByZXNwb25zZToKICAgICAgICAgICAgIGRlc2NyaXB0aW9uIDogIlRl
c3RPYmplY3QiCiAgICAgICAgIH0KICAgICB9CisgICAgaWQgOiA8bnVtYmVyPgogfQogCiAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpA
QCAtMzMsMTkgKzMyLDE3IEBAIFJ1bnRpbWVBZ2VudC5ldmFsdWF0ZSgidGVzdE9iamVjdCIsInRl
c3QiKQogCiByZXF1ZXN0OgogewotICAgIGlkIDogPG51bWJlcj4KLSAgICBkb21haW4gOiAiUnVu
dGltZSIKLSAgICBjb21tYW5kIDogImV2YWx1YXRlIgotICAgIGFyZ3VtZW50cyA6IHsKKyAgICBt
ZXRob2QgOiAiUnVudGltZS5ldmFsdWF0ZSIKKyAgICBwYXJhbXMgOiB7CiAgICAgICAgIGV4cHJl
c3Npb24gOiAidGVzdE9iamVjdCIKICAgICAgICAgb2JqZWN0R3JvdXAgOiAidGVzdCIKICAgICB9
CisgICAgaWQgOiA8bnVtYmVyPgogfQogCiByZXNwb25zZToKIHsKLSAgICByZXF1ZXN0SWQgOiA8
bnVtYmVyPgotICAgIGJvZHkgOiB7CisgICAgcmVzdWx0IDogewogICAgICAgICByZXN1bHQgOiB7
CiAgICAgICAgICAgICBvYmplY3RJZCA6IDxzdHJpbmc+CiAgICAgICAgICAgICBoYXNDaGlsZHJl
biA6IHRydWUKQEAgLTUzLDYgKzUwLDcgQEAgcmVzcG9uc2U6CiAgICAgICAgICAgICBkZXNjcmlw
dGlvbiA6ICJUZXN0T2JqZWN0IgogICAgICAgICB9CiAgICAgfQorICAgIGlkIDogPG51bWJlcj4K
IH0KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KQEAgLTYwLDI0ICs1OCwyMyBAQCBSdW50aW1lQWdlbnQuZXZhbHVhdGVPbig8c3Ry
aW5nPiwidGhpcy5hc3NpZ25lZEJ5RXZhbHVhdGVPbiA9IFwiZXZhbHVhdGVPbiBmdW5jdAogCiBy
ZXF1ZXN0OgogewotICAgIGlkIDogPG51bWJlcj4KLSAgICBkb21haW4gOiAiUnVudGltZSIKLSAg
ICBjb21tYW5kIDogImV2YWx1YXRlT24iCi0gICAgYXJndW1lbnRzIDogeworICAgIG1ldGhvZCA6
ICJSdW50aW1lLmV2YWx1YXRlT24iCisgICAgcGFyYW1zIDogewogICAgICAgICBvYmplY3RJZCA6
IDxzdHJpbmc+CiAgICAgICAgIGV4cHJlc3Npb24gOiAidGhpcy5hc3NpZ25lZEJ5RXZhbHVhdGVP
biA9ICJldmFsdWF0ZU9uIGZ1bmN0aW9uIHdvcmtzIGZpbmUiOyIKICAgICB9CisgICAgaWQgOiA8
bnVtYmVyPgogfQogCiByZXNwb25zZToKIHsKLSAgICByZXF1ZXN0SWQgOiA8bnVtYmVyPgotICAg
IGJvZHkgOiB7CisgICAgcmVzdWx0IDogewogICAgICAgICByZXN1bHQgOiB7CiAgICAgICAgICAg
ICB0eXBlIDogInVuZGVmaW5lZCIKICAgICAgICAgICAgIGRlc2NyaXB0aW9uIDogInVuZGVmaW5l
ZCIKICAgICAgICAgfQogICAgIH0KKyAgICBpZCA6IDxudW1iZXI+CiB9CiAKIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC04NSwx
OSArODIsMjAgQEAgUnVudGltZUFnZW50LnNldFByb3BlcnR5VmFsdWUoPHN0cmluZz4sImFzc2ln
bmVkQnlTZXRQcm9wZXJ0eVZhbHVlIiwidHJ1ZSIpCiAKIHJlcXVlc3Q6CiB7Ci0gICAgaWQgOiA8
bnVtYmVyPgotICAgIGRvbWFpbiA6ICJSdW50aW1lIgotICAgIGNvbW1hbmQgOiAic2V0UHJvcGVy
dHlWYWx1ZSIKLSAgICBhcmd1bWVudHMgOiB7CisgICAgbWV0aG9kIDogIlJ1bnRpbWUuc2V0UHJv
cGVydHlWYWx1ZSIKKyAgICBwYXJhbXMgOiB7CiAgICAgICAgIG9iamVjdElkIDogPHN0cmluZz4K
ICAgICAgICAgcHJvcGVydHlOYW1lIDogImFzc2lnbmVkQnlTZXRQcm9wZXJ0eVZhbHVlIgogICAg
ICAgICBleHByZXNzaW9uIDogInRydWUiCiAgICAgfQorICAgIGlkIDogPG51bWJlcj4KIH0KIAog
cmVzcG9uc2U6CiB7Ci0gICAgcmVxdWVzdElkIDogPG51bWJlcj4KKyAgICByZXN1bHQgOiB7Cisg
ICAgfQorICAgIGlkIDogPG51bWJlcj4KIH0KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEwNSwxOSArMTAzLDIwIEBAIFJ1
bnRpbWVBZ2VudC5zZXRQcm9wZXJ0eVZhbHVlKDxzdHJpbmc+LCJyZW1vdmVkQnlTZXRQcm9wZXJ0
eVZhbHVlIiwiIikKIAogcmVxdWVzdDoKIHsKLSAgICBpZCA6IDxudW1iZXI+Ci0gICAgZG9tYWlu
IDogIlJ1bnRpbWUiCi0gICAgY29tbWFuZCA6ICJzZXRQcm9wZXJ0eVZhbHVlIgotICAgIGFyZ3Vt
ZW50cyA6IHsKKyAgICBtZXRob2QgOiAiUnVudGltZS5zZXRQcm9wZXJ0eVZhbHVlIgorICAgIHBh
cmFtcyA6IHsKICAgICAgICAgb2JqZWN0SWQgOiA8c3RyaW5nPgogICAgICAgICBwcm9wZXJ0eU5h
bWUgOiAicmVtb3ZlZEJ5U2V0UHJvcGVydHlWYWx1ZSIKICAgICAgICAgZXhwcmVzc2lvbiA6ICIi
CiAgICAgfQorICAgIGlkIDogPG51bWJlcj4KIH0KIAogcmVzcG9uc2U6CiB7Ci0gICAgcmVxdWVz
dElkIDogPG51bWJlcj4KKyAgICByZXN1bHQgOiB7CisgICAgfQorICAgIGlkIDogPG51bWJlcj4K
IH0KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KQEAgLTEyNSwxOSArMTI0LDE3IEBAIFJ1bnRpbWVBZ2VudC5nZXRQcm9wZXJ0aWVz
KDxzdHJpbmc+LGZhbHNlKQogCiByZXF1ZXN0OgogewotICAgIGlkIDogPG51bWJlcj4KLSAgICBk
b21haW4gOiAiUnVudGltZSIKLSAgICBjb21tYW5kIDogImdldFByb3BlcnRpZXMiCi0gICAgYXJn
dW1lbnRzIDogeworICAgIG1ldGhvZCA6ICJSdW50aW1lLmdldFByb3BlcnRpZXMiCisgICAgcGFy
YW1zIDogewogICAgICAgICBvYmplY3RJZCA6IDxzdHJpbmc+CiAgICAgICAgIGlnbm9yZUhhc093
blByb3BlcnR5IDogZmFsc2UKICAgICB9CisgICAgaWQgOiA8bnVtYmVyPgogfQogCiByZXNwb25z
ZToKIHsKLSAgICByZXF1ZXN0SWQgOiA8bnVtYmVyPgotICAgIGJvZHkgOiB7CisgICAgcmVzdWx0
IDogewogICAgICAgICByZXN1bHQgOiB7CiAgICAgICAgICAgICAwIDogewogICAgICAgICAgICAg
ICAgIG5hbWUgOiAiYXNzaWduZWRCeUV2YWx1YXRlT24iCkBAIC0xNjQsNiArMTYxLDcgQEAgcmVz
cG9uc2U6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisgICAgaWQgOiA8bnVtYmVy
PgogfQogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQpAQCAtMTcxLDE3ICsxNjksMTggQEAgUnVudGltZUFnZW50LnJlbGVhc2VPYmpl
Y3QoPHN0cmluZz4pCiAKIHJlcXVlc3Q6CiB7Ci0gICAgaWQgOiA8bnVtYmVyPgotICAgIGRvbWFp
biA6ICJSdW50aW1lIgotICAgIGNvbW1hbmQgOiAicmVsZWFzZU9iamVjdCIKLSAgICBhcmd1bWVu
dHMgOiB7CisgICAgbWV0aG9kIDogIlJ1bnRpbWUucmVsZWFzZU9iamVjdCIKKyAgICBwYXJhbXMg
OiB7CiAgICAgICAgIG9iamVjdElkIDogPHN0cmluZz4KICAgICB9CisgICAgaWQgOiA8bnVtYmVy
PgogfQogCiByZXNwb25zZToKIHsKLSAgICByZXF1ZXN0SWQgOiA8bnVtYmVyPgorICAgIHJlc3Vs
dCA6IHsKKyAgICB9CisgICAgaWQgOiA8bnVtYmVyPgogfQogCiAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTg5LDE3ICsxODgs
MTggQEAgUnVudGltZUFnZW50LnJlbGVhc2VPYmplY3RHcm91cCgidGVzdCIpCiAKIHJlcXVlc3Q6
CiB7Ci0gICAgaWQgOiA8bnVtYmVyPgotICAgIGRvbWFpbiA6ICJSdW50aW1lIgotICAgIGNvbW1h
bmQgOiAicmVsZWFzZU9iamVjdEdyb3VwIgotICAgIGFyZ3VtZW50cyA6IHsKKyAgICBtZXRob2Qg
OiAiUnVudGltZS5yZWxlYXNlT2JqZWN0R3JvdXAiCisgICAgcGFyYW1zIDogewogICAgICAgICBv
YmplY3RHcm91cCA6ICJ0ZXN0IgogICAgIH0KKyAgICBpZCA6IDxudW1iZXI+CiB9CiAKIHJlc3Bv
bnNlOgogewotICAgIHJlcXVlc3RJZCA6IDxudW1iZXI+CisgICAgcmVzdWx0IDogeworICAgIH0K
KyAgICBpZCA6IDxudW1iZXI+CiB9CiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvcmVwb3J0LUFQSS1lcnJvcnMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL3JlcG9ydC1BUEktZXJyb3JzLWV4cGVjdGVkLnR4dAppbmRleCBmNzk0MzQ4Li4yMDY2ZDEy
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVwb3J0LUFQSS1lcnJvcnMtZXhw
ZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXBvcnQtQVBJLWVycm9ycy1l
eHBlY3RlZC50eHQKQEAgLTEsOCArMSw4IEBACiBUZXN0cyB0aGF0IEluc3BlY3RvckJhY2tlbmRT
dHViIGlzIGNhdGNoaW5nIGluY29ycmVjdCBhcmd1bWVudHMuCiAKLVByb3RvY29sIEVycm9yOiBJ
bnZhbGlkIHR5cGUgb2YgYXJndW1lbnQgJ2VuYWJsZWQnIGZvciAnQ29uc29sZUFnZW50LnNldE1v
bml0b3JpbmdYSFJFbmFibGVkJyBjYWxsLiBJdCBzaG91bGQgYmUgJ2Jvb2xlYW4nIGJ1dCBpdCBp
cyAnbnVtYmVyJy4KLVByb3RvY29sIEVycm9yOiBJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMg
Zm9yICdDb25zb2xlQWdlbnQuc2V0TW9uaXRvcmluZ1hIUkVuYWJsZWQnIGNhbGwuIEl0IHNob3Vs
ZCBoYXZlIHRoZSBuZXh0IGFyZ3VtZW50cyAneyJlbmFibGVkIjp7Im9wdGlvbmFsIjpmYWxzZSwi
dHlwZSI6ImJvb2xlYW4ifX0nLgotUHJvdG9jb2wgRXJyb3I6IE9wdGlvbmFsIGNhbGxiYWNrIGFy
Z3VtZW50IGZvciAnQ29uc29sZUFnZW50LnNldE1vbml0b3JpbmdYSFJFbmFibGVkJyBjYWxsIHNo
b3VsZCBiZSBhIGZ1bmN0aW9uIGJ1dCBpdHMgdHlwZSBpcyAnc3RyaW5nJy4KK1Byb3RvY29sIEVy
cm9yOiBJbnZhbGlkIHR5cGUgb2YgYXJndW1lbnQgJ2VuYWJsZWQnIGZvciBtZXRob2QgJ0NvbnNv
bGVBZ2VudC5zZXRNb25pdG9yaW5nWEhSRW5hYmxlZCcgY2FsbC4gSXQgc2hvdWxkIGJlICdib29s
ZWFuJyBidXQgaXQgaXMgJ251bWJlcicuCitQcm90b2NvbCBFcnJvcjogSW52YWxpZCBudW1iZXIg
b2YgYXJndW1lbnRzIGZvciBtZXRob2QgJ0NvbnNvbGVBZ2VudC5zZXRNb25pdG9yaW5nWEhSRW5h
YmxlZCcgY2FsbC4gSXQgc2hvdWxkIGhhdmUgdGhlIG5leHQgYXJndW1lbnRzICd7ImVuYWJsZWQi
Onsib3B0aW9uYWwiOmZhbHNlLCJ0eXBlIjoiYm9vbGVhbiJ9fScuCitQcm90b2NvbCBFcnJvcjog
T3B0aW9uYWwgY2FsbGJhY2sgYXJndW1lbnQgZm9yIG1ldGhvZCAnQ29uc29sZUFnZW50LnNldE1v
bml0b3JpbmdYSFJFbmFibGVkJyBjYWxsIHNob3VsZCBiZSBhIGZ1bmN0aW9uIGJ1dCBpdHMgdHlw
ZSBpcyAnc3RyaW5nJy4KIFByb3RvY29sIEVycm9yOiB0aGUgbWVzc2FnZSBpcyBmb3Igbm9uLWV4
aXN0aW5nIGRvbWFpbiAnd3JvbmdEb21haW4nCiBQcm90b2NvbCBFcnJvcjogQXR0ZW1wdGVkIHRv
IGRpc3BhdGNoIGFuIHVuaW1wbGVtZW50ZWQgbWV0aG9kICdJbnNwZWN0b3Iuc29tZXRoaW5nLXN0
cmFuZ2UnCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXBvcnQtQVBJLWVy
cm9ycy5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3JlcG9ydC1BUEktZXJyb3JzLmh0bWwK
aW5kZXggYmQ4NDQ2OS4uYjY3MDI1YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L3JlcG9ydC1BUEktZXJyb3JzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3JlcG9y
dC1BUEktZXJyb3JzLmh0bWwKQEAgLTE4LDggKzE4LDggQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAg
UnVudGltZUFnZW50LmV2YWx1YXRlKCJ0cnVlIiwgInRlc3QiKTsKICAgICBSdW50aW1lQWdlbnQu
ZXZhbHVhdGUoInRydWUiLCAidGVzdCIsIGZ1bmN0aW9uKCl7fSk7CiAgICAgUnVudGltZUFnZW50
LmV2YWx1YXRlKCJ0cnVlIiwgInRlc3QiLCB1bmRlZmluZWQsIGZ1bmN0aW9uKCl7fSk7Ci0gICAg
SW5zcGVjdG9yQmFja2VuZC5kaXNwYXRjaCgneyJ0eXBlIjogImV2ZW50IiwgImRvbWFpbiI6ICJ3
cm9uZ0RvbWFpbiIsICJldmVudCI6ICJzb21ldGhpbmctc3RyYW5nZSIsICJkYXRhIjoge319Jyk7
Ci0gICAgSW5zcGVjdG9yQmFja2VuZC5kaXNwYXRjaCgneyJ0eXBlIjogImV2ZW50IiwgImRvbWFp
biI6ICJJbnNwZWN0b3IiLCAiZXZlbnQiOiAic29tZXRoaW5nLXN0cmFuZ2UiLCAiZGF0YSI6IHt9
fScpOworICAgIEluc3BlY3RvckJhY2tlbmQuZGlzcGF0Y2goJ3sibWV0aG9kIjogIndyb25nRG9t
YWluLnNvbWV0aGluZy1zdHJhbmdlIiwgInBhcmFtcyI6IHt9fScpOworICAgIEluc3BlY3RvckJh
Y2tlbmQuZGlzcGF0Y2goJ3sibWV0aG9kIjogIkluc3BlY3Rvci5zb21ldGhpbmctc3RyYW5nZSIs
ICJwYXJhbXMiOiB7fX0nKTsKIAogICAgIEluc3BlY3RvclRlc3QuY29tcGxldGVUZXN0KCk7CiB9
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVwb3J0LXByb3RvY29sLWVycm9y
cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVwb3J0LXByb3RvY29sLWVy
cm9ycy1leHBlY3RlZC50eHQKaW5kZXggN2IxNjY5Ni4uNzY4NzM0OSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL3JlcG9ydC1wcm90b2NvbC1lcnJvcnMtZXhwZWN0ZWQudHh0Cisr
KyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXBvcnQtcHJvdG9jb2wtZXJyb3JzLWV4cGVjdGVk
LnR4dApAQCAtMSw2NCArMSwxMDQgQEAKIFRlc3RzIHRoYXQgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIgaXMgY2F0Y2hpbmcgaW5jb3JyZWN0IG1lc3NhZ2VzLgogCiB7Ci0gICAgcmVxdWVzdElk
IDogMAotICAgIHByb3RvY29sRXJyb3JzIDogewotICAgICAgICAwIDogIlByb3RvY29sIEVycm9y
OiBJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0LiBNZXNzYWdlIHNob3VsZCBiZSBpbiBKU09OIGZvcm1h
dC4iCisgICAgZXJyb3IgOiB7CisgICAgICAgIGNvZGUgOiAtMzI3MDAKKyAgICAgICAgbWVzc2Fn
ZSA6ICJQYXJzZSBlcnJvci4iCisgICAgICAgIGRhdGEgOiB7CisgICAgICAgICAgICAwIDogIk1l
c3NhZ2Ugc2hvdWxkIGJlIGluIEpTT04gZm9ybWF0LiIKKyAgICAgICAgfQogICAgIH0KKyAgICBp
ZCA6IDAKIH0KIHsKLSAgICByZXF1ZXN0SWQgOiAwCi0gICAgcHJvdG9jb2xFcnJvcnMgOiB7Ci0g
ICAgICAgIDAgOiAiUHJvdG9jb2wgRXJyb3I6IEludmFsaWQgbWVzc2FnZSBmb3JtYXQuICdjb21t
YW5kJyBwcm9wZXJ0eSB3YXNuJ3QgZm91bmQuIgorICAgIGVycm9yIDogeworICAgICAgICBjb2Rl
IDogLTMyNjAwCisgICAgICAgIG1lc3NhZ2UgOiAiSW52YWxpZCBSZXF1ZXN0LiIKKyAgICAgICAg
ZGF0YSA6IHsKKyAgICAgICAgICAgIDAgOiAiSW52YWxpZCBtZXNzYWdlIGZvcm1hdC4gJ21ldGhv
ZCcgcHJvcGVydHkgd2Fzbid0IGZvdW5kLiIKKyAgICAgICAgfQogICAgIH0KKyAgICBpZCA6IDAK
IH0KIHsKLSAgICByZXF1ZXN0SWQgOiAwCi0gICAgcHJvdG9jb2xFcnJvcnMgOiB7Ci0gICAgICAg
IDAgOiAiUHJvdG9jb2wgRXJyb3I6IEludmFsaWQgbWVzc2FnZSBmb3JtYXQuIFRoZSB0eXBlIG9m
ICdjb21tYW5kJyBwcm9wZXJ0eSBzaG91bGQgYmUgc3RyaW5nLiIKKyAgICBlcnJvciA6IHsKKyAg
ICAgICAgY29kZSA6IC0zMjYwMAorICAgICAgICBtZXNzYWdlIDogIkludmFsaWQgUmVxdWVzdC4i
CisgICAgICAgIGRhdGEgOiB7CisgICAgICAgICAgICAwIDogIkludmFsaWQgbWVzc2FnZSBmb3Jt
YXQuIFRoZSB0eXBlIG9mICdtZXRob2QnIHByb3BlcnR5IHNob3VsZCBiZSBzdHJpbmcuIgorICAg
ICAgICB9CiAgICAgfQorICAgIGlkIDogMAogfQogewotICAgIHJlcXVlc3RJZCA6IDAKLSAgICBw
cm90b2NvbEVycm9ycyA6IHsKLSAgICAgICAgMCA6ICJQcm90b2NvbCBFcnJvcjogSW52YWxpZCBt
ZXNzYWdlIGZvcm1hdC4gJ2lkJyBwcm9wZXJ0eSB3YXMgbm90IGZvdW5kIGluIHRoZSByZXF1ZXN0
LiIKKyAgICBlcnJvciA6IHsKKyAgICAgICAgY29kZSA6IC0zMjYwMAorICAgICAgICBtZXNzYWdl
IDogIkludmFsaWQgUmVxdWVzdC4iCisgICAgICAgIGRhdGEgOiB7CisgICAgICAgICAgICAwIDog
IkludmFsaWQgbWVzc2FnZSBmb3JtYXQuICdpZCcgcHJvcGVydHkgd2FzIG5vdCBmb3VuZCBpbiB0
aGUgcmVxdWVzdC4iCisgICAgICAgIH0KICAgICB9CisgICAgaWQgOiAwCiB9CiB7Ci0gICAgcmVx
dWVzdElkIDogMAotICAgIHByb3RvY29sRXJyb3JzIDogewotICAgICAgICAwIDogIlByb3RvY29s
IEVycm9yOiBJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0LiBUaGUgdHlwZSBvZiAnaWQnIHByb3BlcnR5
IHNob3VsZCBiZSBudW1iZXIuIgorICAgIGVycm9yIDogeworICAgICAgICBjb2RlIDogLTMyNjAw
CisgICAgICAgIG1lc3NhZ2UgOiAiSW52YWxpZCBSZXF1ZXN0LiIKKyAgICAgICAgZGF0YSA6IHsK
KyAgICAgICAgICAgIDAgOiAiSW52YWxpZCBtZXNzYWdlIGZvcm1hdC4gVGhlIHR5cGUgb2YgJ2lk
JyBwcm9wZXJ0eSBzaG91bGQgYmUgbnVtYmVyLiIKKyAgICAgICAgfQogICAgIH0KKyAgICBpZCA6
IDAKIH0KIHsKLSAgICByZXF1ZXN0SWQgOiAxCi0gICAgcHJvdG9jb2xFcnJvcnMgOiB7Ci0gICAg
ICAgIDAgOiAiUHJvdG9jb2wgRXJyb3I6IEludmFsaWQgY29tbWFuZCB3YXMgcmVjZWl2ZWQuICd0
ZXN0JyB3YXNuJ3QgZm91bmQgaW4gZG9tYWluIERPTS4iCisgICAgZXJyb3IgOiB7CisgICAgICAg
IGNvZGUgOiAtMzI2MDEKKyAgICAgICAgbWVzc2FnZSA6ICJNZXRob2Qgbm90IGZvdW5kLiIKKyAg
ICAgICAgZGF0YSA6IHsKKyAgICAgICAgICAgIDAgOiAiSW52YWxpZCBtZXRob2QgbmFtZSB3YXMg
cmVjZWl2ZWQuICdET00udGVzdCcgd2Fzbid0IGZvdW5kLiIKKyAgICAgICAgfQogICAgIH0KKyAg
ICBpZCA6IDEKIH0KIHsKLSAgICByZXF1ZXN0SWQgOiAyCi0gICAgcHJvdG9jb2xFcnJvcnMgOiB7
Ci0gICAgICAgIDAgOiAiUHJvdG9jb2wgRXJyb3I6ICdhcmd1bWVudHMnIHByb3BlcnR5IHdpdGgg
dHlwZSAnb2JqZWN0JyB3YXMgbm90IGZvdW5kLiIKKyAgICBlcnJvciA6IHsKKyAgICAgICAgY29k
ZSA6IC0zMjYwMgorICAgICAgICBtZXNzYWdlIDogIkludmFsaWQgcGFyYW1zLiIKKyAgICAgICAg
ZGF0YSA6IHsKKyAgICAgICAgICAgIDAgOiAiJ3BhcmFtcycgcHJvcGVydHkgd2l0aCB0eXBlICdv
YmplY3QnIHdhcyBub3QgZm91bmQuIgorICAgICAgICB9CiAgICAgfQorICAgIGlkIDogMgogfQog
ewotICAgIHJlcXVlc3RJZCA6IDMKLSAgICBwcm90b2NvbEVycm9ycyA6IHsKLSAgICAgICAgMCA6
ICJQcm90b2NvbCBFcnJvcjogJ2FyZ3VtZW50cycgcHJvcGVydHkgd2l0aCB0eXBlICdvYmplY3Qn
IHdhcyBub3QgZm91bmQuIgorICAgIGVycm9yIDogeworICAgICAgICBjb2RlIDogLTMyNjAyCisg
ICAgICAgIG1lc3NhZ2UgOiAiSW52YWxpZCBwYXJhbXMuIgorICAgICAgICBkYXRhIDogeworICAg
ICAgICAgICAgMCA6ICIncGFyYW1zJyBwcm9wZXJ0eSB3aXRoIHR5cGUgJ29iamVjdCcgd2FzIG5v
dCBmb3VuZC4iCisgICAgICAgIH0KICAgICB9CisgICAgaWQgOiAzCiB9CiB7Ci0gICAgcmVxdWVz
dElkIDogNAotICAgIHByb3RvY29sRXJyb3JzIDogewotICAgICAgICAwIDogIlByb3RvY29sIEVy
cm9yOiBBcmd1bWVudCAnZnJhbWVJZCcgd2l0aCB0eXBlICdTdHJpbmcnIHdhcyBub3QgZm91bmQu
IgotICAgICAgICAxIDogIlByb3RvY29sIEVycm9yOiBBcmd1bWVudCAndXJsJyB3aXRoIHR5cGUg
J1N0cmluZycgd2FzIG5vdCBmb3VuZC4iCisgICAgZXJyb3IgOiB7CisgICAgICAgIGNvZGUgOiAt
MzI2MDIKKyAgICAgICAgbWVzc2FnZSA6ICJJbnZhbGlkIHBhcmFtcy4iCisgICAgICAgIGRhdGEg
OiB7CisgICAgICAgICAgICAwIDogIlBhcmFtZXRlciAnZnJhbWVJZCcgd2l0aCB0eXBlICdTdHJp
bmcnIHdhcyBub3QgZm91bmQuIgorICAgICAgICAgICAgMSA6ICJQYXJhbWV0ZXIgJ3VybCcgd2l0
aCB0eXBlICdTdHJpbmcnIHdhcyBub3QgZm91bmQuIgorICAgICAgICB9CiAgICAgfQorICAgIGlk
IDogNAogfQogewotICAgIHJlcXVlc3RJZCA6IDUKLSAgICBwcm90b2NvbEVycm9ycyA6IHsKLSAg
ICAgICAgMCA6ICJQcm90b2NvbCBFcnJvcjogQXJndW1lbnQgJ3VybCcgd2l0aCB0eXBlICdTdHJp
bmcnIHdhcyBub3QgZm91bmQuIgorICAgIGVycm9yIDogeworICAgICAgICBjb2RlIDogLTMyNjAy
CisgICAgICAgIG1lc3NhZ2UgOiAiSW52YWxpZCBwYXJhbXMuIgorICAgICAgICBkYXRhIDogewor
ICAgICAgICAgICAgMCA6ICJQYXJhbWV0ZXIgJ3VybCcgd2l0aCB0eXBlICdTdHJpbmcnIHdhcyBu
b3QgZm91bmQuIgorICAgICAgICB9CiAgICAgfQorICAgIGlkIDogNQogfQogCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVwb3J0LXByb3RvY29sLWVycm9ycy5odG1sIGIvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL3JlcG9ydC1wcm90b2NvbC1lcnJvcnMuaHRtbAppbmRleCBhZGZk
YzdmLi43MTVmZmE4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVwb3J0LXBy
b3RvY29sLWVycm9ycy5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXBvcnQtcHJv
dG9jb2wtZXJyb3JzLmh0bWwKQEAgLTgsMTQgKzgsMTQgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAg
dmFyIG1lc3NhZ2VzID0gWwogICAgICAgICAnc29tZSB3cm9uZyBzdHJpbmcnLAogICAgICAgICAn
e30nLAotICAgICAgICAneyJjb21tYW5kIjoxfScsCi0gICAgICAgICd7ImRvbWFpbiI6Ik5ldHdv
cmsiLCJjb21tYW5kIjoicmVzb3VyY2VDb250ZW50In0nLAotICAgICAgICAneyJpZCI6Im5vdCBh
IG51bWJlciIsImRvbWFpbiI6Ik5ldHdvcmsiLCJjb21tYW5kIjoicmVzb3VyY2VDb250ZW50In0n
LAotICAgICAgICAneyJpZCI6MSwiZG9tYWluIjoiRE9NIiwiY29tbWFuZCI6InRlc3QifScsCi0g
ICAgICAgICd7ImlkIjoyLCJkb21haW4iOiJOZXR3b3JrIiwiY29tbWFuZCI6ImdldFJlc291cmNl
Q29udGVudCJ9JywKLSAgICAgICAgJ3siaWQiOjMsImRvbWFpbiI6Ik5ldHdvcmsiLCJjb21tYW5k
IjoiZ2V0UmVzb3VyY2VDb250ZW50IiwiYXJndW1lbnRzIjpbXX0nLAotICAgICAgICAneyJpZCI6
NCwiZG9tYWluIjoiTmV0d29yayIsImNvbW1hbmQiOiJnZXRSZXNvdXJjZUNvbnRlbnQiLCJhcmd1
bWVudHMiOnt9fScsCi0gICAgICAgICd7ImlkIjo1LCJkb21haW4iOiJOZXR3b3JrIiwiY29tbWFu
ZCI6ImdldFJlc291cmNlQ29udGVudCIsImFyZ3VtZW50cyI6eyJmcmFtZUlkIjoibm90IGEgbnVt
YmVyIn19JywKKyAgICAgICAgJ3sibWV0aG9kIjoxfScsCisgICAgICAgICd7Im1ldGhvZCI6InJl
c291cmNlQ29udGVudCJ9JywKKyAgICAgICAgJ3siaWQiOiJub3QgYSBudW1iZXIiLCJtZXRob2Qi
OiJOZXR3b3JrLnJlc291cmNlQ29udGVudCJ9JywKKyAgICAgICAgJ3siaWQiOjEsIm1ldGhvZCI6
IkRPTS50ZXN0In0nLAorICAgICAgICAneyJpZCI6MiwibWV0aG9kIjoiTmV0d29yay5nZXRSZXNv
dXJjZUNvbnRlbnQifScsCisgICAgICAgICd7ImlkIjozLCJtZXRob2QiOiJOZXR3b3JrLmdldFJl
c291cmNlQ29udGVudCIsInBhcmFtcyI6W119JywKKyAgICAgICAgJ3siaWQiOjQsIm1ldGhvZCI6
Ik5ldHdvcmsuZ2V0UmVzb3VyY2VDb250ZW50IiwicGFyYW1zIjp7fX0nLAorICAgICAgICAneyJp
ZCI6NSwibWV0aG9kIjoiTmV0d29yay5nZXRSZXNvdXJjZUNvbnRlbnQiLCJwYXJhbXMiOnsiZnJh
bWVJZCI6Im5vdCBhIG51bWJlciJ9fScsCiAgICAgXTsKICAgICB2YXIgbnVtYmVyT2ZSZXBvcnRz
ID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDdiYjI0MmIuLjQ2Nzg4MWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOSBAQAorMjAxMS0wNC0wNiAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
V2ViIEluc3BlY3RvcjogbWlncmF0ZSBJbnNwZWN0b3IgcHJvdG9jb2wgbWVzc2FnZXMgZm9ybWF0
IHRvIEpTT04tUlBDLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTc5NTcKKworICAgICAgICBUaGVyZSBpcyBub3QgYSBzaWduaWZpY2FudCBkaWZmZXJl
bmNlIGJldHdlZW4gIGluc3BlY3RvciBtZXNzYWdlcyBzcGVjIGFuZCBhbmQgSlNPTi1SUEMgMi4w
IG1lc3NhZ2VzIHNwZWMuCisgICAgICAgIEFsc28gSlNPTi1SUEMgaGFzIGEgcHJldHR5IGNsZWFy
IHNwZWNpZmljYXRpb24gZm9yIGVycm9yIGRlc2NyaXB0aW9ucyB3aGljaCB3ZSBoYXZlbid0Lgor
ICAgICAgICBJdCB3YXMgZGVjaWRlZCB0aGF0IHdlIHdpbGwgdXNlIGl0LgorCisgICAgICAgIHRo
ZSBsaXN0IG9mIHJlbmFtZXM6CisgICAgICAgIDEpIHR5cGUtPiAvZGV2L251bGwKKyAgICAgICAg
MikgZG9tYWluICsgJy4nICsgZXZlbnQgPT4gbWV0aG9kIC8vIGZvciBldmVudHMKKyAgICAgICAg
MykgZG9tYWluICsgJy4nICsgY29tbWFuZCA9PiBtZXRob2QgLy8gZm9yIHJlcXVlc3RzCisgICAg
ICAgIDQpIHJlcXVlc3RJZCA9PiBpZCAvLyBmb3IgcmVzcG9uc2VzCisgICAgICAgIDUpIGFyZ3Vt
ZW50cyA9PiBwYXJhbXMgLy8gZm9yIHJlcXVlc3RzCisgICAgICAgIDYpIGRhdGEgPT4gcGFyYW1z
IC8vIGZvciBldmVudHMKKyAgICAgICAgNykgYm9keSA9PiByZXN1bHQgLy8gZm9yIHJlc3BvbnNl
cworCisgICAgICAgIHByb3RvY29sRXJyb3JzIGFuZCBlcnJvciBwcm9wZXJ0aWVzIHdpbGwgYmUg
Y29udmVydGVkIHRvIEpTT04tUlBDIGVycm9yIGZvcm1hdC4KKyAgICAgICAgVGhlIG9yZGVyIG9m
IHByb3BlcnRpZXMgaW4gbWVzc2FnZXMgYWxzbyB3aWxsIGJlIGFkanVzdGVkLgorICAgICAgICBU
aGUgb25seSB0aGluZyB0aGF0IGxvb2tzIHVubmVjZXNzYXJ5IGlzIGpzb25ycGMgcHJvcGVydHku
CisKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbToKKwogMjAx
MS0wNC0wNiAgQWxleGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbSBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCmluZGV4IGE5ZWJmMzguLmY2ZDFkMTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVj
dG9yLnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVj
dG9yLnBtCkBAIC0xOTIsNiArMTkyLDkgQEAgJHR5cGVUcmFuc2Zvcm17InZvaWQifSA9IHsKICAg
ICAiZm9yd2FyZCIgPT4gIiIsCiAgICAgImhlYWRlciIgPT4gIiIKIH07CiskdHlwZVRyYW5zZm9y
bXsiVmVjdG9yIn0gPSB7CisgICAgImhlYWRlciIgPT4gInd0Zi9WZWN0b3IuaCIKK307CiAKICMg
RGVmYXVsdCBMaWNlbnNlIFRlbXBsYXRlcwogCkBAIC0zNjksMTMgKzM3MiwxMyBAQCBzdWIgZ2Vu
ZXJhdGVGcm9udGVuZEZ1bmN0aW9uCiAgICAgcHVzaChAZnVuY3Rpb24sICJ2b2lkICR7ZnJvbnRl
bmRDbGFzc05hbWV9Ojoke2RvbWFpbn06OiR7ZnVuY3Rpb25OYW1lfSgke2FyZ3VtZW50c30pIik7
CiAgICAgcHVzaChAZnVuY3Rpb24sICJ7Iik7CiAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gJHtmdW5jdGlvbk5hbWV9TWVzc2FnZSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7Iik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIgICAgJHtmdW5jdGlvbk5h
bWV9TWVzc2FnZS0+c2V0U3RyaW5nKFwidHlwZVwiLCBcImV2ZW50XCIpOyIpOwotICAgIHB1c2go
QGZ1bmN0aW9uLCAiICAgICR7ZnVuY3Rpb25OYW1lfU1lc3NhZ2UtPnNldFN0cmluZyhcImRvbWFp
blwiLCBcIiRkb21haW5cIik7Iik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIgICAgJHtmdW5jdGlv
bk5hbWV9TWVzc2FnZS0+c2V0U3RyaW5nKFwiZXZlbnRcIiwgXCIkZnVuY3Rpb25OYW1lXCIpOyIp
OwotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGFP
YmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOyIpOwotICAgIG15IEBwdXNoQXJndW1l
bnRzID0gbWFwKCIgICAgZGF0YU9iamVjdC0+c2V0IiAuIHR5cGVUcmFpdHMoJF8tPnR5cGUsICJK
U09OVHlwZSIpIC4gIihcIiIgLiAkXy0+bmFtZSAuICJcIiwgIiAuICRfLT5uYW1lIC4gIik7Iiwg
QGFyZ3NGaWx0ZXJlZCk7Ci0gICAgcHVzaChAZnVuY3Rpb24sIEBwdXNoQXJndW1lbnRzKTsKLSAg
ICBwdXNoKEBmdW5jdGlvbiwgIiAgICAke2Z1bmN0aW9uTmFtZX1NZXNzYWdlLT5zZXRPYmplY3Qo
XCJkYXRhXCIsIGRhdGFPYmplY3QpOyIpOworICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICR7ZnVu
Y3Rpb25OYW1lfU1lc3NhZ2UtPnNldFN0cmluZyhcIm1ldGhvZFwiLCBcIiRkb21haW4uJGZ1bmN0
aW9uTmFtZVwiKTsiKTsKKyAgICBpZiAoc2NhbGFyKEBhcmdzRmlsdGVyZWQpKSB7CisgICAgICAg
IHB1c2goQGZ1bmN0aW9uLCAiICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVj
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Iik7CisgICAgICAgIG15IEBwdXNoQXJndW1l
bnRzID0gbWFwKCIgICAgcGFyYW1zT2JqZWN0LT5zZXQiIC4gdHlwZVRyYWl0cygkXy0+dHlwZSwg
IkpTT05UeXBlIikgLiAiKFwiIiAuICRfLT5uYW1lIC4gIlwiLCAiIC4gJF8tPm5hbWUgLiAiKTsi
LCBAYXJnc0ZpbHRlcmVkKTsKKyAgICAgICAgcHVzaChAZnVuY3Rpb24sIEBwdXNoQXJndW1lbnRz
KTsKKyAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgJHtmdW5jdGlvbk5hbWV9TWVzc2FnZS0+
c2V0T2JqZWN0KFwicGFyYW1zXCIsIHBhcmFtc09iamVjdCk7Iik7CisgICAgfQogICAgIHB1c2go
QGZ1bmN0aW9uLCAiICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRv
RnJvbnRlbmQoJHtmdW5jdGlvbk5hbWV9TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOyIpOwogICAg
IHB1c2goQGZ1bmN0aW9uLCAifSIpOwogICAgIHB1c2goQGZ1bmN0aW9uLCAiIik7CkBAIC0zOTcs
MTIgKzQwMCwxMyBAQCBzdWIgZ2VuZXJhdGVCYWNrZW5kRnVuY3Rpb24KIAogICAgIG15ICRmdW5j
dGlvbk5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsKICAgICBteSAkZnVsbFF1YWxp
ZmllZEZ1bmN0aW9uTmFtZSA9ICRpbnRlcmZhY2UtPm5hbWUgLiAiXyIgLiAkZnVuY3Rpb24tPnNp
Z25hdHVyZS0+bmFtZTsKKyAgICBteSAkZnVsbFF1YWxpZmllZEZ1bmN0aW9uTmFtZURvdCA9ICRp
bnRlcmZhY2UtPm5hbWUgLiAiLiIgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsKIAogICAg
IHB1c2goQGJhY2tlbmRDb25zdGFudERlY2xhcmF0aW9ucywgIiAgICBzdGF0aWMgY29uc3QgY2hh
ciogJHtmdWxsUXVhbGlmaWVkRnVuY3Rpb25OYW1lfUNtZDsiKTsKLSAgICBwdXNoKEBiYWNrZW5k
Q29uc3RhbnREZWZpbml0aW9ucywgImNvbnN0IGNoYXIqICR7YmFja2VuZENsYXNzTmFtZX06OiR7
ZnVsbFF1YWxpZmllZEZ1bmN0aW9uTmFtZX1DbWQgPSBcIiR7ZnVsbFF1YWxpZmllZEZ1bmN0aW9u
TmFtZX1cIjsiKTsKKyAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnREZWZpbml0aW9ucywgImNvbnN0
IGNoYXIqICR7YmFja2VuZENsYXNzTmFtZX06OiR7ZnVsbFF1YWxpZmllZEZ1bmN0aW9uTmFtZX1D
bWQgPSBcIiR7ZnVsbFF1YWxpZmllZEZ1bmN0aW9uTmFtZURvdH1cIjsiKTsKIAogICAgIG1hcCgk
YmFja2VuZFR5cGVzeyRfLT50eXBlfSA9IDEsIEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSk7ICMg
cmVnaXN0ZXIgcmVxdWlyZWQgdHlwZXMKLSAgICBteSBAaW5BcmdzID0gZ3JlcCgkXy0+ZGlyZWN0
aW9uIGVxICJpbiIgJiYgISgkXy0+bmFtZSBlcSAiY2FsbElkIikgLCBAeyRmdW5jdGlvbi0+cGFy
YW1ldGVyc30pOworICAgIG15IEBpbkFyZ3MgPSBncmVwKCRfLT5kaXJlY3Rpb24gZXEgImluIiwg
QHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KTsKICAgICBteSBAb3V0QXJncyA9IGdyZXAoJF8tPmRp
cmVjdGlvbiBlcSAib3V0IiwgQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KTsKICAgICAKICAgICBt
eSAkc2lnbmF0dXJlID0gIiAgICB2b2lkICR7ZnVsbFF1YWxpZmllZEZ1bmN0aW9uTmFtZX0obG9u
ZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOyI7CkBAIC00
MjIsMjUgKzQyNiwyNyBAQCBzdWIgZ2VuZXJhdGVCYWNrZW5kRnVuY3Rpb24KICAgICAkYmFja2Vu
ZFR5cGVzeyRkb21haW59ID0gMTsKICAgICAkYmFja2VuZERvbWFpbnN7JGRvbWFpbn0gPSAxOwog
ICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIGlmICghJGRvbWFpbkFjY2Vzc29yKSIpOwotICAgIHB1
c2goQGZ1bmN0aW9uLCAiICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhcIlByb3Rv
Y29sIEVycm9yOiAkZG9tYWluIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS5cIik7Iik7CisgICAg
cHVzaChAZnVuY3Rpb24sICIgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFwiJGRv
bWFpbiBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuXCIpOyIpOwogICAgIHB1c2goQGZ1bmN0aW9u
LCAiIik7CiAKICAgICAjIGRlY2xhcmUgbG9jYWwgdmFyaWFibGVzIGZvciBvdXQgYXJndW1lbnRz
LgotICAgIHB1c2goQGZ1bmN0aW9uLCBtYXAoIiAgICAiIC4gdHlwZVRyYWl0cygkXy0+dHlwZSwg
InZhcmlhYmxlIikgLiAiIG91dF8iIC4gJF8tPm5hbWUgLiAiID0gIiAuIHR5cGVUcmFpdHMoJF8t
PnR5cGUsICJkZWZhdWx0VmFsdWUiKSAuICI7IiwgQG91dEFyZ3MpKTsKLSAgICBwdXNoKEBmdW5j
dGlvbiwgIiIpOworICAgIGlmIChzY2FsYXIoQG91dEFyZ3MpKSB7CisgICAgICAgIHB1c2goQGZ1
bmN0aW9uLCBtYXAoIiAgICAiIC4gdHlwZVRyYWl0cygkXy0+dHlwZSwgInZhcmlhYmxlIikgLiAi
IG91dF8iIC4gJF8tPm5hbWUgLiAiID0gIiAuIHR5cGVUcmFpdHMoJF8tPnR5cGUsICJkZWZhdWx0
VmFsdWUiKSAuICI7IiwgQG91dEFyZ3MpKTsKKyAgICAgICAgcHVzaChAZnVuY3Rpb24sICIiKTsK
KyAgICB9CiAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgRXJyb3JTdHJpbmcgZXJyb3I7Iik7CiAg
ICAgcHVzaChAZnVuY3Rpb24sICIiKTsKIAogICAgIG15ICRpbmRlbnQgPSAiIjsKICAgICBpZiAo
c2NhbGFyKEBpbkFyZ3MpKSB7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIGlmIChSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBhcmd1bWVudHNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9i
amVjdC0+Z2V0T2JqZWN0KFwiYXJndW1lbnRzXCIpKSB7Iik7CisgICAgICAgIHB1c2goQGZ1bmN0
aW9uLCAiICAgIGlmIChSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBy
ZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KFwicGFyYW1zXCIpKSB7Iik7CiAKICAgICAg
ICAgZm9yZWFjaCBteSAkcGFyYW1ldGVyIChAaW5BcmdzKSB7CiAgICAgICAgICAgICBteSAkbmFt
ZSA9ICRwYXJhbWV0ZXItPm5hbWU7CiAgICAgICAgICAgICBteSAkdHlwZSA9ICRwYXJhbWV0ZXIt
PnR5cGU7CiAgICAgICAgICAgICBteSAkdHlwZVN0cmluZyA9IGNhbWVsQ2FzZSgkcGFyYW1ldGVy
LT50eXBlKTsKICAgICAgICAgICAgIG15ICRvcHRpb25hbCA9ICRwYXJhbWV0ZXItPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJvcHRpb25hbCJ9ID8gInRydWUiIDogImZhbHNlIjsKLSAgICAgICAgICAg
IHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICAiIC4gdHlwZVRyYWl0cygkdHlwZSwgInZhcmlhYmxl
IikgLiAiIGluXyRuYW1lID0gZ2V0JHR5cGVTdHJpbmcoYXJndW1lbnRzQ29udGFpbmVyLmdldCgp
LCBcIiRuYW1lXCIsICRvcHRpb25hbCwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOyIpOworICAgICAg
ICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgICIgLiB0eXBlVHJhaXRzKCR0eXBlLCAidmFy
aWFibGUiKSAuICIgaW5fJG5hbWUgPSBnZXQkdHlwZVN0cmluZyhwYXJhbXNDb250YWluZXIuZ2V0
KCksIFwiJG5hbWVcIiwgJG9wdGlvbmFsLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7Iik7CiAgICAg
ICAgIH0KICAgICAgICAgcHVzaChAZnVuY3Rpb24sICIiKTsKICAgICAgICAgJGluZGVudCA9ICIg
ICAgIjsKQEAgLTQ1NSwzMSArNDYxLDMwIEBAIHN1YiBnZW5lcmF0ZUJhY2tlbmRGdW5jdGlvbgog
ICAgIHB1c2goQGZ1bmN0aW9uLCAiJGluZGVudCAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5n
dGgoKSkiKTsKICAgICBwdXNoKEBmdW5jdGlvbiwgIiRpbmRlbnQgICAgICAgICRkb21haW5BY2Nl
c3Nvci0+JGZ1bmN0aW9uTmFtZSgkYXJncyk7Iik7CiAgICAgaWYgKHNjYWxhcihAaW5BcmdzKSkg
ewotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICB9IGVsc2UgeyIpOwotICAgICAgICBwdXNo
KEBmdW5jdGlvbiwgIiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoXCJQcm90b2Nv
bCBFcnJvcjogJ2FyZ3VtZW50cycgcHJvcGVydHkgd2l0aCB0eXBlICdvYmplY3QnIHdhcyBub3Qg
Zm91bmQuXCIpOyIpOwotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICB9Iik7CisgICAgICAg
IHB1c2goQGZ1bmN0aW9uLCAiICAgIH0gZWxzZSIpOworICAgICAgICBwdXNoKEBmdW5jdGlvbiwg
IiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoXCIncGFyYW1zJyBwcm9wZXJ0eSB3
aXRoIHR5cGUgJ29iamVjdCcgd2FzIG5vdCBmb3VuZC5cIik7Iik7CiAgICAgfQogCisgICAgcHVz
aChAZnVuY3Rpb24sICIiKTsKICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAvLyB1c2UgSW5zcGVj
dG9yRnJvbnRlbmQgYXMgYSBtYXJrZXIgb2YgV2ViSW5zcGVjdG9yIGF2YWlsYWJpbGl0eSIpOwot
ICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIGlmIChjYWxsSWQgfHwgcHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpKSB7Iik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Iik7
Ci0gICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVy
KFwicmVxdWVzdElkXCIsIGNhbGxJZCk7Iik7CiAgICAgcHVzaChAZnVuY3Rpb24sICIiKTsKLSAg
ICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSki
KTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0
QXJyYXkoXCJwcm90b2NvbEVycm9yc1wiLCBwcm90b2NvbEVycm9ycyk7Iik7Ci0gICAgaWYgKHNj
YWxhcihAb3V0QXJncykpIHsKLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIGVsc2Ug
eyIpOwotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgICAgIGlmIChlcnJvci5sZW5n
dGgoKSkiKTsKLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgICAgICAgICAgcmVzcG9u
c2VNZXNzYWdlLT5zZXRTdHJpbmcoXCJlcnJvclwiLCBlcnJvcik7Iik7Ci0gICAgICAgIHB1c2go
QGZ1bmN0aW9uLCAiICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VC
b2R5ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsiKTsKLSAgICAgICAgcHVzaChAZnVuY3Rp
b24sIG1hcCgiICAgICAgICAgICAgcmVzcG9uc2VCb2R5LT5zZXQiIC4gdHlwZVRyYWl0cygkXy0+
dHlwZSwgIkpTT05UeXBlIikgLiAiKFwiIiAuICRfLT5uYW1lIC4gIlwiLCBvdXRfIiAuICRfLT5u
YW1lIC4gIik7IiwgQG91dEFyZ3MpKTsKLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAg
ICAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdChcImJvZHlcIiwgcmVzcG9uc2VCb2R5KTsi
KTsKLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIH0iKTsKLSAgICB9Ci0gICAgcHVz
aChAZnVuY3Rpb24sICIgICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVz
c2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Iik7CisgICAg
cHVzaChAZnVuY3Rpb24sICIgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgeyIpOwor
ICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwg
SW52YWxpZFBhcmFtcywgcHJvdG9jb2xFcnJvcnMpOyIpOworICAgIHB1c2goQGZ1bmN0aW9uLCAi
ICAgICAgICByZXR1cm47Iik7CiAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgfSIpOwotCi0KKyAg
ICBwdXNoKEBmdW5jdGlvbiwgIiIpOworICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIGlmIChlcnJv
ci5sZW5ndGgoKSkgeyIpOworICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICByZXBvcnRQcm90
b2NvbEVycm9yKGNhbGxJZCwgU2VydmVyRXJyb3IsIGVycm9yKTsiKTsKKyAgICBwdXNoKEBmdW5j
dGlvbiwgIiAgICAgICAgcmV0dXJuOyIpOworICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIH0iKTsK
KyAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOworICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7Iik7CisgICAgcHVzaChAZnVuY3Rpb24sICIgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsiKTsKKyAgICBwdXNoKEBmdW5j
dGlvbiwgbWFwKCIgICAgICAgIHJlc3VsdC0+c2V0IiAuIHR5cGVUcmFpdHMoJF8tPnR5cGUsICJK
U09OVHlwZSIpIC4gIihcIiIgLiAkXy0+bmFtZSAuICJcIiwgb3V0XyIgLiAkXy0+bmFtZSAuICIp
OyIsIEBvdXRBcmdzKSk7CisgICAgcHVzaChAZnVuY3Rpb24sICIgICAgcmVzcG9uc2VNZXNzYWdl
LT5zZXRPYmplY3QoXCJyZXN1bHRcIiwgcmVzdWx0KTsiKTsKKyAgICBwdXNoKEBmdW5jdGlvbiwg
IiIpOworICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVy
KFwiaWRcIiwgY2FsbElkKTsiKTsKKyAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+
dG9KU09OU3RyaW5nKCkpOyIpOwogICAgIHB1c2goQGZ1bmN0aW9uLCAifSIpOwogICAgIHB1c2go
QGZ1bmN0aW9uLCAiIik7CiAgICAgcHVzaChAYmFja2VuZE1ldGhvZHNJbXBsLCBAZnVuY3Rpb24p
OwpAQCAtNDg5LDEzICs0OTQsMzQgQEAgc3ViIGdlbmVyYXRlQmFja2VuZFJlcG9ydFByb3RvY29s
RXJyb3IKIHsKICAgICBteSAkcmVwb3J0UHJvdG9jb2xFcnJvciA9IDw8ICJFT0YiOwogCi12b2lk
ICR7YmFja2VuZENsYXNzTmFtZX06OnJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyBjYWxs
SWQsIGNvbnN0IFN0cmluZyYgZXJyb3JUZXh0KSBjb25zdAordm9pZCAke2JhY2tlbmRDbGFzc05h
bWV9OjpyZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcgY2FsbElkLCBDb21tb25FcnJvckNv
ZGUgY29kZSwgY29uc3QgU3RyaW5nJiBjdXN0b21UZXh0KSBjb25zdAogeworICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gZGF0YSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBkYXRh
LT5wdXNoU3RyaW5nKGN1c3RvbVRleHQpOworICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElk
LCBjb2RlLCBkYXRhLnJlbGVhc2UoKSk7Cit9CisKK3ZvaWQgJHtiYWNrZW5kQ2xhc3NOYW1lfTo6
cmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nIGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlIGNv
ZGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGRhdGEpIGNvbnN0Cit7CisgICAgc3RhdGlj
IFZlY3RvcjxTdHJpbmc+IGNvbW1vbkVycm9yczsKKyAgICBpZiAoIWNvbW1vbkVycm9ycy5zaXpl
KCkpIHsKKyAgICAgICAgY29tbW9uRXJyb3JzLmluc2VydChQYXJzZUVycm9yLCAie1xcXCJjb2Rl
XFxcIjotMzI3MDAsXFxcIm1lc3NhZ2VcXFwiOlxcXCJQYXJzZSBlcnJvci5cXFwifSIpOworICAg
ICAgICBjb21tb25FcnJvcnMuaW5zZXJ0KEludmFsaWRSZXF1ZXN0LCAie1xcXCJjb2RlXFxcIjot
MzI2MDAsXFxcIm1lc3NhZ2VcXFwiOlxcXCJJbnZhbGlkIFJlcXVlc3QuXFxcIn0iKTsKKyAgICAg
ICAgY29tbW9uRXJyb3JzLmluc2VydChNZXRob2ROb3RGb3VuZCwgIntcXFwiY29kZVxcXCI6LTMy
NjAxLFxcXCJtZXNzYWdlXFxcIjpcXFwiTWV0aG9kIG5vdCBmb3VuZC5cXFwifSIpOworICAgICAg
ICBjb21tb25FcnJvcnMuaW5zZXJ0KEludmFsaWRQYXJhbXMsICJ7XFxcImNvZGVcXFwiOi0zMjYw
MixcXFwibWVzc2FnZVxcXCI6XFxcIkludmFsaWQgcGFyYW1zLlxcXCJ9Iik7CisgICAgICAgIGNv
bW1vbkVycm9ycy5pbnNlcnQoSW50ZXJuYWxFcnJvciwgIntcXFwiY29kZVxcXCI6LTMyNjAzLFxc
XCJtZXNzYWdlXFxcIjpcXFwiSW50ZXJuYWwgZXJyb3IuXFxcIn0iKTsKKyAgICAgICAgY29tbW9u
RXJyb3JzLmluc2VydChTZXJ2ZXJFcnJvciwgIntcXFwiY29kZVxcXCI6LTMyMDAwLFxcXCJtZXNz
YWdlXFxcIjpcXFwiU2VydmVyIGVycm9yLlxcXCJ9Iik7CisgICAgfQorICAgIEFTU0VSVChjb2Rl
ID49MCk7CisgICAgQVNTRVJUKCh1bnNpZ25lZCljb2RlIDwgY29tbW9uRXJyb3JzLnNpemUoKSk7
CisgICAgQVNTRVJUKGNvbW1vbkVycm9yc1tjb2RlXSk7CisgICAgQVNTRVJUKEluc3BlY3Rvck9i
amVjdDo6cGFyc2VKU09OKGNvbW1vbkVycm9yc1tjb2RlXSkpOworICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGVycm9yID0gSW5zcGVjdG9yT2JqZWN0OjpwYXJzZUpTT04oY29tbW9uRXJyb3Jz
W2NvZGVdKS0+YXNPYmplY3QoKTsKKyAgICBBU1NFUlQoZXJyb3IpOworICAgIGVycm9yLT5zZXRB
cnJheSgiZGF0YSIsIGRhdGEpOwogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2Ug
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1lc3NhZ2UtPnNldE51bWJlcigicmVx
dWVzdElkIiwgY2FsbElkKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGVycm9ycyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICBlcnJvcnMtPnB1c2hTdHJpbmcoZXJyb3JUZXh0
KTsKLSAgICBtZXNzYWdlLT5zZXRBcnJheSgicHJvdG9jb2xFcnJvcnMiLCBlcnJvcnMpOworICAg
IG1lc3NhZ2UtPnNldE9iamVjdCgiZXJyb3IiLCBlcnJvcik7CisgICAgbWVzc2FnZS0+c2V0TnVt
YmVyKCJpZCIsIGNhbGxJZCk7CiAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiBFT0YKQEAgLTUy
NSwxMiArNTUxLDEyIEBAICRyZXR1cm4gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldCR0
eXBlU3RyaW5nKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zCiAKICAgICBpZiAodmFsdWVJ
dGVyYXRvciA9PSBlbmQpIHsKICAgICAgICAgaWYgKCFvcHRpb25hbCkKLSAgICAgICAgICAgIHBy
b3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQcm90b2NvbCBFcnJvcjog
QXJndW1lbnQgJ1wlcycgd2l0aCB0eXBlICckanNvbicgd2FzIG5vdCBmb3VuZC4iLCBuYW1lLnV0
ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0
cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJ1wlcycgd2l0aCB0eXBlICckanNvbicgd2FzIG5vdCBm
b3VuZC4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAg
IH0KIAogICAgIGlmICghdmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hcyRqc29uKCZ2YWx1ZSkpCi0g
ICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQcm90b2Nv
bCBFcnJvcjogQXJndW1lbnQgJ1wlcycgaGFzIHdyb25nIHR5cGUuIEl0IHNob3VsZCBiZSAnJGpz
b24nLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVz
aFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICdcJXMnIGhhcyB3cm9uZyB0eXBlLiBJ
dCBzaG91bGQgYmUgJyRqc29uJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKICAgICByZXR1cm4g
dmFsdWU7CiB9CiBFT0YKQEAgLTU0NSwxMSArNTcxLDYgQEAgc3ViIGdlbmVyYXRlQmFja2VuZERp
c3BhdGNoZXIKICAgICBteSAkbWFwRW50cmllcyA9IGpvaW4oIlxuIiwgQG1hcEVudHJpZXMpOwog
CiAgICAgbXkgJGJhY2tlbmREaXNwYXRjaGVyQm9keSA9IDw8ICJFT0YiOwotc3RhdGljIFN0cmlu
ZyBjb21tYW5kTmFtZShjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBjb21tYW5k
KQotewotICAgIHJldHVybiBtYWtlU3RyaW5nKGRvbWFpbiwgIl8iLCBjb21tYW5kKTsKLX0KLQog
dm9pZCAke2JhY2tlbmRDbGFzc05hbWV9OjpkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
CiB7CiAgICAgdHlwZWRlZiB2b2lkICgke2JhY2tlbmRDbGFzc05hbWV9OjoqQ2FsbEhhbmRsZXIp
KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIG1lc3NhZ2VPYmplY3QpOwpAQCAtNTYzLDU0
ICs1ODQsNDIgQEAgJG1hcEVudHJpZXMKIAogICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcGFy
c2VkTWVzc2FnZSA9IEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04obWVzc2FnZSk7CiAgICAgaWYg
KCFwYXJzZWRNZXNzYWdlKSB7Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCAi
UHJvdG9jb2wgRXJyb3I6IEludmFsaWQgbWVzc2FnZSBmb3JtYXQuIE1lc3NhZ2Ugc2hvdWxkIGJl
IGluIEpTT04gZm9ybWF0LiIpOworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwg
UGFyc2VFcnJvciwgIk1lc3NhZ2Ugc2hvdWxkIGJlIGluIEpTT04gZm9ybWF0LiIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZU9i
amVjdCA9IHBhcnNlZE1lc3NhZ2UtPmFzT2JqZWN0KCk7CiAgICAgaWYgKCFtZXNzYWdlT2JqZWN0
KSB7Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCAiUHJvdG9jb2wgRXJyb3I6
IEludmFsaWQgbWVzc2FnZSBmb3JtYXQuIFRoZSBtZXNzYWdlIHNob3VsZCBiZSBhIEpTT05pZmll
ZCBvYmplY3QuIik7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBJbnZhbGlk
UmVxdWVzdCwgIkludmFsaWQgbWVzc2FnZSBmb3JtYXQuIFRoZSBtZXNzYWdlIHNob3VsZCBiZSBh
IEpTT05pZmllZCBvYmplY3QuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+IGNvbW1hbmRWYWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdldCgiY29t
bWFuZCIpOwotICAgIGlmICghY29tbWFuZFZhbHVlKSB7Ci0gICAgICAgIHJlcG9ydFByb3RvY29s
RXJyb3IoY2FsbElkLCAiUHJvdG9jb2wgRXJyb3I6IEludmFsaWQgbWVzc2FnZSBmb3JtYXQuICdj
b21tYW5kJyBwcm9wZXJ0eSB3YXNuJ3QgZm91bmQuIik7CisgICAgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiBtZXRob2RWYWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdldCgibWV0aG9kIik7CisgICAgaWYg
KCFtZXRob2RWYWx1ZSkgeworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgSW52
YWxpZFJlcXVlc3QsICJJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0LiAnbWV0aG9kJyBwcm9wZXJ0eSB3
YXNuJ3QgZm91bmQuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBTdHJpbmcgY29t
bWFuZDsKLSAgICBpZiAoIWNvbW1hbmRWYWx1ZS0+YXNTdHJpbmcoJmNvbW1hbmQpKSB7Ci0gICAg
ICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCAiUHJvdG9jb2wgRXJyb3I6IEludmFsaWQg
bWVzc2FnZSBmb3JtYXQuIFRoZSB0eXBlIG9mICdjb21tYW5kJyBwcm9wZXJ0eSBzaG91bGQgYmUg
c3RyaW5nLiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiBkb21haW5WYWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdldCgiZG9tYWluIik7Ci0gICAg
aWYgKCFkb21haW5WYWx1ZSkgewotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwg
IlByb3RvY29sIEVycm9yOiBJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0LiAnZG9tYWluJyBwcm9wZXJ0
eSB3YXNuJ3QgZm91bmQuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBTdHJpbmcg
ZG9tYWluOwotICAgIGlmICghZG9tYWluVmFsdWUtPmFzU3RyaW5nKCZkb21haW4pKSB7Ci0gICAg
ICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCAiUHJvdG9jb2wgRXJyb3I6IEludmFsaWQg
bWVzc2FnZSBmb3JtYXQuIFRoZSB0eXBlIG9mICdkb21haW4nIHByb3BlcnR5IHNob3VsZCBiZSBz
dHJpbmcuIik7CisgICAgU3RyaW5nIG1ldGhvZDsKKyAgICBpZiAoIW1ldGhvZFZhbHVlLT5hc1N0
cmluZygmbWV0aG9kKSkgeworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgSW52
YWxpZFJlcXVlc3QsICJJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0LiBUaGUgdHlwZSBvZiAnbWV0aG9k
JyBwcm9wZXJ0eSBzaG91bGQgYmUgc3RyaW5nLiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBjYWxsSWRWYWx1ZSA9IG1lc3NhZ2VPYmplY3Qt
PmdldCgiaWQiKTsKICAgICBpZiAoIWNhbGxJZFZhbHVlKSB7Ci0gICAgICAgIHJlcG9ydFByb3Rv
Y29sRXJyb3IoY2FsbElkLCAiUHJvdG9jb2wgRXJyb3I6IEludmFsaWQgbWVzc2FnZSBmb3JtYXQu
ICdpZCcgcHJvcGVydHkgd2FzIG5vdCBmb3VuZCBpbiB0aGUgcmVxdWVzdC4iKTsKKyAgICAgICAg
cmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIEludmFsaWRSZXF1ZXN0LCAiSW52YWxpZCBtZXNz
YWdlIGZvcm1hdC4gJ2lkJyBwcm9wZXJ0eSB3YXMgbm90IGZvdW5kIGluIHRoZSByZXF1ZXN0LiIp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKCFjYWxsSWRWYWx1ZS0+YXNOdW1i
ZXIoJmNhbGxJZCkpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsICJQcm90
b2NvbCBFcnJvcjogSW52YWxpZCBtZXNzYWdlIGZvcm1hdC4gVGhlIHR5cGUgb2YgJ2lkJyBwcm9w
ZXJ0eSBzaG91bGQgYmUgbnVtYmVyLiIpOworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKGNh
bGxJZCwgSW52YWxpZFJlcXVlc3QsICJJbnZhbGlkIG1lc3NhZ2UgZm9ybWF0LiBUaGUgdHlwZSBv
ZiAnaWQnIHByb3BlcnR5IHNob3VsZCBiZSBudW1iZXIuIik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+OjppdGVyYXRvciBpdCA9IGRp
c3BhdGNoTWFwLmZpbmQoY29tbWFuZE5hbWUoZG9tYWluLCBjb21tYW5kKSk7CisgICAgSGFzaE1h
cDxTdHJpbmcsIENhbGxIYW5kbGVyPjo6aXRlcmF0b3IgaXQgPSBkaXNwYXRjaE1hcC5maW5kKG1l
dGhvZCk7CiAgICAgaWYgKGl0ID09IGRpc3BhdGNoTWFwLmVuZCgpKSB7Ci0gICAgICAgIHJlcG9y
dFByb3RvY29sRXJyb3IoY2FsbElkLCBtYWtlU3RyaW5nKCJQcm90b2NvbCBFcnJvcjogSW52YWxp
ZCBjb21tYW5kIHdhcyByZWNlaXZlZC4gJyIsIGNvbW1hbmQsICInIHdhc24ndCBmb3VuZCBpbiBk
b21haW4gIiwgZG9tYWluLCAiLiIpKTsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxs
SWQsIE1ldGhvZE5vdEZvdW5kLCBtYWtlU3RyaW5nKCJJbnZhbGlkIG1ldGhvZCBuYW1lIHdhcyBy
ZWNlaXZlZC4gJyIsIG1ldGhvZCwgIicgd2Fzbid0IGZvdW5kLiIpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApAQCAtNjMzLDE1ICs2NDIsOSBAQCBib29sICR7YmFja2VuZENsYXNzTmFtZX06
OmdldENvbW1hbmROYW1lKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgU3RyaW5nKiByZXN1bHQpCiAg
ICAgaWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFN0cmluZyBkb21h
aW47Ci0gICAgaWYgKCFvYmplY3QtPmdldFN0cmluZygiZG9tYWluIiwgJmRvbWFpbikpCisgICAg
aWYgKCFvYmplY3QtPmdldFN0cmluZygibWV0aG9kIiwgcmVzdWx0KSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgU3RyaW5nIGNvbW1hbmQ7Ci0gICAgaWYgKCFvYmplY3QtPmdldFN0cmlu
ZygiY29tbWFuZCIsICZjb21tYW5kKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgKnJl
c3VsdCA9IGNvbW1hbmROYW1lKGRvbWFpbiwgY29tbWFuZCk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiBFT0YKQEAgLTY1NiwxOCArNjU5LDE4IEBAIHN1YiBjb2xsZWN0QmFja2VuZEpTU3R1YkZ1bmN0
aW9ucwogCiAgICAgZm9yZWFjaCBteSAkZnVuY3Rpb24gKEBmdW5jdGlvbnMpIHsKICAgICAgICAg
bXkgJG5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsKKyAgICAgICAgbXkgQGluQXJn
cyA9IGdyZXAoJF8tPmRpcmVjdGlvbiBlcSAiaW4iLCBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30p
OwogICAgICAgICBteSAkYXJndW1lbnROYW1lcyA9IGpvaW4oCiAgICAgICAgICAgICAiLCIsCiAg
ICAgICAgICAgICBtYXAoIlwiIiAuICRfLT5uYW1lIC4gIlwiOiB7IgogICAgICAgICAgICAgICAg
IC4gIlwib3B0aW9uYWxcIjogIiAuICgkXy0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Im9wdGlvbmFs
In0gPyAidHJ1ZSAiIDogImZhbHNlIikgLiAiLCAiCiAgICAgICAgICAgICAgICAgLiAiXCJ0eXBl
XCI6IFwiIiAuIHR5cGVUcmFpdHMoJF8tPnR5cGUsICJKU1R5cGUiKSAuICJcIiIKICAgICAgICAg
ICAgICAgICAuICJ9IiwKLSAgICAgICAgICAgICAgICBncmVwKCRfLT5kaXJlY3Rpb24gZXEgImlu
IiwgQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KSkpOworICAgICAgICAgICAgICAgICBAaW5Bcmdz
KSk7CiAgICAgICAgIHB1c2goQGJhY2tlbmRKU1N0dWJzLCAiICAgIHRoaXMuX3JlZ2lzdGVyRGVs
ZWdhdGUoJ3siIC4KLSAgICAgICAgICAgICJcImlkXCI6IDAsICIgLgotICAgICAgICAgICAgIlwi
ZG9tYWluXCI6IFwiJGRvbWFpblwiLCAiIC4KLSAgICAgICAgICAgICJcImNvbW1hbmRcIjogXCIk
bmFtZVwiLCAiIC4KLSAgICAgICAgICAgICJcImFyZ3VtZW50c1wiOiB7JGFyZ3VtZW50TmFtZXN9
IiAuCisgICAgICAgICAgICAiXCJtZXRob2RcIjogXCIkZG9tYWluLiRuYW1lXCIsICIgLgorICAg
ICAgICAgICAgKHNjYWxhcihAaW5BcmdzKSA/ICJcInBhcmFtc1wiOiB7JGFyZ3VtZW50TmFtZXN9
LCAiIDogIiIpIC4KKyAgICAgICAgICAgICJcImlkXCI6IDAiIC4KICAgICAgICAgIn0nKTsiKTsK
ICAgICB9CiB9CkBAIC02OTUsMTMgKzY5OCwxMyBAQCBJbnNwZWN0b3JCYWNrZW5kU3R1Yi5wcm90
b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiBjYWxsYmFja0lkOwogICAgIH0sCiAKLSAgICBfcmVn
aXN0ZXJEZWxlZ2F0ZTogZnVuY3Rpb24oY29tbWFuZEluZm8pCisgICAgX3JlZ2lzdGVyRGVsZWdh
dGU6IGZ1bmN0aW9uKHJlcXVlc3RTdHJpbmcpCiAgICAgewotICAgICAgICB2YXIgY29tbWFuZE9i
amVjdCA9IEpTT04ucGFyc2UoY29tbWFuZEluZm8pOwotICAgICAgICB2YXIgYWdlbnROYW1lID0g
Y29tbWFuZE9iamVjdC5kb21haW4gKyAiQWdlbnQiOworICAgICAgICB2YXIgZG9tYWluQW5kRnVu
Y3Rpb24gPSBKU09OLnBhcnNlKHJlcXVlc3RTdHJpbmcpLm1ldGhvZC5zcGxpdCgiLiIpOworICAg
ICAgICB2YXIgYWdlbnROYW1lID0gZG9tYWluQW5kRnVuY3Rpb25bMF0gKyAiQWdlbnQiOwogICAg
ICAgICBpZiAoIXdpbmRvd1thZ2VudE5hbWVdKQogICAgICAgICAgICAgd2luZG93W2FnZW50TmFt
ZV0gPSB7fTsKLSAgICAgICAgd2luZG93W2FnZW50TmFtZV1bY29tbWFuZE9iamVjdC5jb21tYW5k
XSA9IHRoaXMuc2VuZE1lc3NhZ2VUb0JhY2tlbmQuYmluZCh0aGlzLCBjb21tYW5kSW5mbyk7Cisg
ICAgICAgIHdpbmRvd1thZ2VudE5hbWVdW2RvbWFpbkFuZEZ1bmN0aW9uWzFdXSA9IHRoaXMuc2Vu
ZE1lc3NhZ2VUb0JhY2tlbmQuYmluZCh0aGlzLCByZXF1ZXN0U3RyaW5nKTsKICAgICB9LAogCiAg
ICAgc2VuZE1lc3NhZ2VUb0JhY2tlbmQ6IGZ1bmN0aW9uKCkKQEAgLTcwOSwzMyArNzEyLDM3IEBA
IEluc3BlY3RvckJhY2tlbmRTdHViLnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIGFyZ3MgPSBB
cnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpOwogICAgICAgICB2YXIgcmVxdWVz
dCA9IEpTT04ucGFyc2UoYXJncy5zaGlmdCgpKTsKICAgICAgICAgdmFyIGNhbGxiYWNrID0gKGFy
Z3MubGVuZ3RoICYmIHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICJmdW5jdGlvbiIp
ID8gYXJncy5wb3AoKSA6IDA7CisgICAgICAgIHZhciBkb21haW5BbmRNZXRob2QgPSByZXF1ZXN0
Lm1ldGhvZC5zcGxpdCgiLiIpOworICAgICAgICB2YXIgYWdlbnRNZXRob2QgPSBkb21haW5BbmRN
ZXRob2RbMF0gKyAiQWdlbnQuIiArIGRvbWFpbkFuZE1ldGhvZFsxXTsKIAotICAgICAgICBmb3Ig
KHZhciBrZXkgaW4gcmVxdWVzdC5hcmd1bWVudHMpIHsKLSAgICAgICAgICAgIHZhciB0eXBlTmFt
ZSA9IHJlcXVlc3QuYXJndW1lbnRzW2tleV0udHlwZTsKLSAgICAgICAgICAgIHZhciBvcHRpb25h
bEZsYWcgPSByZXF1ZXN0LmFyZ3VtZW50c1trZXldLm9wdGlvbmFsOworICAgICAgICBpZiAocmVx
dWVzdC5wYXJhbXMpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiByZXF1ZXN0LnBhcmFt
cykgeworICAgICAgICAgICAgICAgIHZhciB0eXBlTmFtZSA9IHJlcXVlc3QucGFyYW1zW2tleV0u
dHlwZTsKKyAgICAgICAgICAgICAgICB2YXIgb3B0aW9uYWxGbGFnID0gcmVxdWVzdC5wYXJhbXNb
a2V5XS5vcHRpb25hbDsKIAotICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwICYmICFv
cHRpb25hbEZsYWcpIHsKLSAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBF
cnJvcjogSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIGZvciAnIiArIHJlcXVlc3QuZG9tYWlu
ICsgIkFnZW50LiIgKyByZXF1ZXN0LmNvbW1hbmQgKyAiJyBjYWxsLiBJdCBzaG91bGQgaGF2ZSB0
aGUgbmV4dCBhcmd1bWVudHMgJyIgKyBKU09OLnN0cmluZ2lmeShyZXF1ZXN0LmFyZ3VtZW50cykg
KyAiJy4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwICYmICFvcHRpb25hbEZsYWcpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IEludmFsaWQgbnVt
YmVyIG9mIGFyZ3VtZW50cyBmb3IgbWV0aG9kICciICsgYWdlbnRNZXRob2QgKyAiJyBjYWxsLiBJ
dCBzaG91bGQgaGF2ZSB0aGUgbmV4dCBhcmd1bWVudHMgJyIgKyBKU09OLnN0cmluZ2lmeShyZXF1
ZXN0LnBhcmFtcykgKyAiJy4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmFyIHZhbHVlID0gYXJncy5zaGlmdCgpOwotICAg
ICAgICAgICAgaWYgKG9wdGlvbmFsRmxhZyAmJiB0eXBlb2YgdmFsdWUgPT09ICJ1bmRlZmluZWQi
KSB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIHJlcXVlc3QuYXJndW1lbnRzW2tleV07Ci0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFy
IHZhbHVlID0gYXJncy5zaGlmdCgpOworICAgICAgICAgICAgICAgIGlmIChvcHRpb25hbEZsYWcg
JiYgdHlwZW9mIHZhbHVlID09PSAidW5kZWZpbmVkIikgeworICAgICAgICAgICAgICAgICAgICBk
ZWxldGUgcmVxdWVzdC5wYXJhbXNba2V5XTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSB0
eXBlTmFtZSkgewotICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29sIEVycm9y
OiBJbnZhbGlkIHR5cGUgb2YgYXJndW1lbnQgJyIgKyBrZXkgKyAiJyBmb3IgJyIgKyByZXF1ZXN0
LmRvbWFpbiArICJBZ2VudC4iICsgcmVxdWVzdC5jb21tYW5kICsgIicgY2FsbC4gSXQgc2hvdWxk
IGJlICciICsgdHlwZU5hbWUgKyAiJyBidXQgaXQgaXMgJyIgKyB0eXBlb2YgdmFsdWUgKyAiJy4i
KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gdHlwZU5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IEludmFsaWQgdHlwZSBvZiBhcmd1bWVudCAn
IiArIGtleSArICInIGZvciBtZXRob2QgJyIgKyBhZ2VudE1ldGhvZCArICInIGNhbGwuIEl0IHNo
b3VsZCBiZSAnIiArIHR5cGVOYW1lICsgIicgYnV0IGl0IGlzICciICsgdHlwZW9mIHZhbHVlICsg
IicuIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIHJlcXVlc3QuYXJndW1lbnRzW2tleV0gPSB2YWx1ZTsKKyAgICAgICAgICAg
ICAgICByZXF1ZXN0LnBhcmFtc1trZXldID0gdmFsdWU7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgIWNhbGxiYWNrKSB7CiAgICAg
ICAgICAgICBpZiAodHlwZW9mIGFyZ3NbMF0gIT09ICJ1bmRlZmluZWQiKSB7Ci0gICAgICAgICAg
ICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IE9wdGlvbmFsIGNhbGxiYWNrIGFy
Z3VtZW50IGZvciAnIiArIHJlcXVlc3QuZG9tYWluICsgIkFnZW50LiIgKyByZXF1ZXN0LmNvbW1h
bmQgKyAiJyBjYWxsIHNob3VsZCBiZSBhIGZ1bmN0aW9uIGJ1dCBpdHMgdHlwZSBpcyAnIiArIHR5
cGVvZiBhcmdzWzBdICsgIicuIik7CisgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJv
dG9jb2wgRXJyb3I6IE9wdGlvbmFsIGNhbGxiYWNrIGFyZ3VtZW50IGZvciBtZXRob2QgJyIgKyBh
Z2VudE1ldGhvZCArICInIGNhbGwgc2hvdWxkIGJlIGEgZnVuY3Rpb24gYnV0IGl0cyB0eXBlIGlz
ICciICsgdHlwZW9mIGFyZ3NbMF0gKyAiJy4iKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTc2Miw1OCArNzY5LDU4IEBAIEluc3BlY3RvckJh
Y2tlbmRTdHViLnByb3RvdHlwZSA9IHsKIAogICAgICAgICB2YXIgbWVzc2FnZU9iamVjdCA9ICh0
eXBlb2YgbWVzc2FnZSA9PT0gInN0cmluZyIpID8gSlNPTi5wYXJzZShtZXNzYWdlKSA6IG1lc3Nh
Z2U7CiAKLSAgICAgICAgaWYgKCJyZXF1ZXN0SWQiIGluIG1lc3NhZ2VPYmplY3QpIHsgLy8ganVz
dCBhIHJlc3BvbnNlIGZvciBzb21lIHJlcXVlc3QKLSAgICAgICAgICAgIGlmIChtZXNzYWdlT2Jq
ZWN0LnByb3RvY29sRXJyb3JzKQorICAgICAgICBpZiAoImlkIiBpbiBtZXNzYWdlT2JqZWN0KSB7
IC8vIGp1c3QgYSByZXNwb25zZSBmb3Igc29tZSByZXF1ZXN0CisgICAgICAgICAgICBpZiAobWVz
c2FnZU9iamVjdC5lcnJvciAmJiBtZXNzYWdlT2JqZWN0LmVycm9yLmNvZGUgIT09IC0zMjAwMCkK
ICAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydFByb3RvY29sRXJyb3IobWVzc2FnZU9iamVjdCk7
CiAKICAgICAgICAgICAgIHZhciBhcmd1bWVudHMgPSBbXTsKLSAgICAgICAgICAgIGlmIChtZXNz
YWdlT2JqZWN0LmJvZHkpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gbWVzc2Fn
ZU9iamVjdC5ib2R5KQotICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMucHVzaChtZXNzYWdl
T2JqZWN0LmJvZHlba2V5XSk7CisgICAgICAgICAgICBpZiAobWVzc2FnZU9iamVjdC5yZXN1bHQp
IHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gbWVzc2FnZU9iamVjdC5yZXN1bHQp
CisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cy5wdXNoKG1lc3NhZ2VPYmplY3QucmVzdWx0
W2tleV0pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSB0aGlz
Ll9jYWxsYmFja3NbbWVzc2FnZU9iamVjdC5yZXF1ZXN0SWRdOworICAgICAgICAgICAgdmFyIGNh
bGxiYWNrID0gdGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VPYmplY3QuaWRdOwogICAgICAgICAgICAg
aWYgKGNhbGxiYWNrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtZXNzYWdlT2JqZWN0LnByb3Rv
Y29sRXJyb3JzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cy51bnNoaWZ0KG1lc3Nh
Z2VPYmplY3QuZXJyb3IpOwotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxs
LCBhcmd1bWVudHMpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhcmd1bWVu
dHMudW5zaGlmdChtZXNzYWdlT2JqZWN0LmVycm9yKTsKKyAgICAgICAgICAgICAgICBjYWxsYmFj
ay5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgICAgICAgICAgICAgIC0tdGhpcy5fcGVuZGlu
Z1Jlc3BvbnNlc0NvdW50OwotICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jYWxsYmFja3Nb
bWVzc2FnZU9iamVjdC5yZXF1ZXN0SWRdOworICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9j
YWxsYmFja3NbbWVzc2FnZU9iamVjdC5pZF07CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IGlmICh0aGlzLl9zY3JpcHRzICYmICF0aGlzLl9wZW5kaW5nUmVzcG9uc2VzQ291bnQpCiAgICAg
ICAgICAgICAgICAgdGhpcy5ydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzKCk7CiAKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LnR5cGUg
PT09ICJldmVudCIpIHsKLSAgICAgICAgICAgIGlmICghKG1lc3NhZ2VPYmplY3QuZG9tYWluIGlu
IHRoaXMuX2RvbWFpbkRpc3BhdGNoZXJzKSkgewotICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJy
b3IoIlByb3RvY29sIEVycm9yOiB0aGUgbWVzc2FnZSBpcyBmb3Igbm9uLWV4aXN0aW5nIGRvbWFp
biAnIiArIG1lc3NhZ2VPYmplY3QuZG9tYWluICsgIiciKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHZhciBtZXRob2QgPSBtZXNzYWdlT2JqZWN0Lm1ldGhvZC5zcGxpdCgiLiIpOwor
ICAgICAgICAgICAgdmFyIGRvbWFpbk5hbWUgPSBtZXRob2RbMF07CisgICAgICAgICAgICB2YXIg
ZnVuY3Rpb25OYW1lID0gbWV0aG9kWzFdOworICAgICAgICAgICAgaWYgKCEoZG9tYWluTmFtZSBp
biB0aGlzLl9kb21haW5EaXNwYXRjaGVycykpIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVy
cm9yKCJQcm90b2NvbCBFcnJvcjogdGhlIG1lc3NhZ2UgaXMgZm9yIG5vbi1leGlzdGluZyBkb21h
aW4gJyIgKyBkb21haW5OYW1lICsgIiciKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgZGlzcGF0Y2hlciA9IHRoaXMuX2RvbWFpbkRpc3Bh
dGNoZXJzW21lc3NhZ2VPYmplY3QuZG9tYWluXTsKLSAgICAgICAgICAgIGlmICghKG1lc3NhZ2VP
YmplY3QuZXZlbnQgaW4gZGlzcGF0Y2hlcikpIHsKLSAgICAgICAgICAgICAgICBjb25zb2xlLmVy
cm9yKCJQcm90b2NvbCBFcnJvcjogQXR0ZW1wdGVkIHRvIGRpc3BhdGNoIGFuIHVuaW1wbGVtZW50
ZWQgbWV0aG9kICciICsgbWVzc2FnZU9iamVjdC5kb21haW4gKyAiLiIgKyBtZXNzYWdlT2JqZWN0
LmV2ZW50ICsgIiciKTsKKyAgICAgICAgICAgIHZhciBkaXNwYXRjaGVyID0gdGhpcy5fZG9tYWlu
RGlzcGF0Y2hlcnNbZG9tYWluTmFtZV07CisgICAgICAgICAgICBpZiAoIShmdW5jdGlvbk5hbWUg
aW4gZGlzcGF0Y2hlcikpIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2Nv
bCBFcnJvcjogQXR0ZW1wdGVkIHRvIGRpc3BhdGNoIGFuIHVuaW1wbGVtZW50ZWQgbWV0aG9kICci
ICsgbWVzc2FnZU9iamVjdC5tZXRob2QgKyAiJyIpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdmFyIGFyZ3VtZW50cyA9IFtdOwotICAgICAg
ICAgICAgaWYgKG1lc3NhZ2VPYmplY3QuZGF0YSkgewotICAgICAgICAgICAgICAgIGZvciAodmFy
IGtleSBpbiBtZXNzYWdlT2JqZWN0LmRhdGEpCi0gICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50
cy5wdXNoKG1lc3NhZ2VPYmplY3QuZGF0YVtrZXldKTsKKyAgICAgICAgICAgIHZhciBwYXJhbXMg
PSBbXTsKKyAgICAgICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LnBhcmFtcykgeworICAgICAgICAg
ICAgICAgIGZvciAodmFyIGtleSBpbiBtZXNzYWdlT2JqZWN0LnBhcmFtcykKKyAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zLnB1c2gobWVzc2FnZU9iamVjdC5wYXJhbXNba2V5XSk7CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIGRpc3BhdGNoZXJbbWVzc2FnZU9iamVjdC5ldmVudF0uYXBw
bHkoZGlzcGF0Y2hlciwgYXJndW1lbnRzKTsKKyAgICAgICAgICAgIGRpc3BhdGNoZXJbZnVuY3Rp
b25OYW1lXS5hcHBseShkaXNwYXRjaGVyLCBwYXJhbXMpOwogICAgICAgICB9CiAgICAgfSwKIAog
ICAgIHJlcG9ydFByb3RvY29sRXJyb3I6IGZ1bmN0aW9uKG1lc3NhZ2VPYmplY3QpCiAgICAgewot
ICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBFcnJvcjogSW5zcGVjdG9yQmFja2VuZCBy
ZXF1ZXN0IHdpdGggaWQgPSAiICsgbWVzc2FnZU9iamVjdC5yZXF1ZXN0SWQgKyAiIGZhaWxlZC4i
KTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlT2JqZWN0LnByb3RvY29sRXJy
b3JzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgY29uc29sZS5lcnJvcigiICAgICIgKyBtZXNz
YWdlT2JqZWN0LnByb3RvY29sRXJyb3JzW2ldKTsKKyAgICAgICAgdmFyIGVycm9yID0gbWVzc2Fn
ZU9iamVjdC5lcnJvcjsKKyAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5tZXNzYWdlICsgIigi
ICsgZXJyb3IuY29kZSArICIpOiByZXF1ZXN0IHdpdGggaWQgPSAiICsgbWVzc2FnZU9iamVjdC5p
ZCArICIgZmFpbGVkLiIpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVycm9yLmRhdGEu
bGVuZ3RoOyArK2kpCisgICAgICAgICAgICBjb25zb2xlLmVycm9yKCIgICAgIiArIGVycm9yLmRh
dGFbaV0pOwogICAgIH0sCiAKICAgICBydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzOiBmdW5jdGlv
bihzY3JpcHQpCkBAIC05NTQsNyArOTYxLDE5IEBAIHN1YiBnZW5lcmF0ZUJhY2tlbmRBZ2VudEZp
ZWxkc0FuZENvbnN0cnVjdG9yCiAgICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgJHtiYWNrZW5k
Q2xhc3NOYW1lfSgke2FyZ3VtZW50U3RyaW5nfSkiKTsKICAgICBwdXNoKEBiYWNrZW5kSGVhZCwg
QGZpZWxkSW5pdGlhbGl6ZXJzKTsKICAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICB7IH0iKTsK
LSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICB2b2lkIHJlcG9ydFByb3RvY29sRXJyb3IoY29u
c3QgbG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgZXJyb3JUZXh0KSBjb25zdDsiKTsKKyAgICBw
dXNoKEBiYWNrZW5kSGVhZCwgIiIpOworICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAgIGVudW0g
Q29tbW9uRXJyb3JDb2RlIHsiKTsKKyAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICAgICAgUGFy
c2VFcnJvciA9IDAsIik7CisgICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgICAgIEludmFsaWRS
ZXF1ZXN0LCIpOworICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAgICAgICBNZXRob2ROb3RGb3Vu
ZCwiKTsKKyAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICAgICAgSW52YWxpZFBhcmFtcywiKTsK
KyAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICAgICAgSW50ZXJuYWxFcnJvciwiKTsKKyAgICBw
dXNoKEBiYWNrZW5kSGVhZCwgIiAgICAgICAgU2VydmVyRXJyb3IsIik7CisgICAgcHVzaChAYmFj
a2VuZEhlYWQsICIgICAgICAgIExhc3RFbnRyeSwiKTsKKyAgICBwdXNoKEBiYWNrZW5kSGVhZCwg
IiAgICB9OyIpOworICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiIik7CisgICAgcHVzaChAYmFja2Vu
ZEhlYWQsICIgICAgdm9pZCByZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcgY2FsbElkLCBD
b21tb25FcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JUZXh0KSBjb25zdDsiKTsKKyAgICBw
dXNoKEBiYWNrZW5kSGVhZCwgIiAgICB2b2lkIHJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9u
ZyBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gZGF0
YSkgY29uc3Q7Iik7CiAgICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgdm9pZCBkaXNwYXRjaChj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpOyIpOwogICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAgIHN0
YXRpYyBib29sIGdldENvbW1hbmROYW1lKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgU3RyaW5nKiBy
ZXN1bHQpOyIpOwogICAgICRiYWNrZW5kQ29uc3RydWN0b3IgPSBqb2luKCJcbiIsIEBiYWNrZW5k
SGVhZCk7Cg==
</data>
<flag name="review"
          id="80955"
          type_id="1"
          status="+"
          setter="yurys"
    />
          </attachment>
      

    </bug>

</bugzilla>