<?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>164830</bug_id>
          
          <creation_ts>2016-11-16 12:27:47 -0800</creation_ts>
          <short_desc>Web Inspector: Update Esprima to support new features / syntax (**, async/await, trailing comma)</short_desc>
          <delta_ts>2016-12-07 16:04:57 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>164900</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>ariya.hidayat</cc>
    
    <cc>bburg</cc>
    
    <cc>joepeck</cc>
    
    <cc>mattbaker</cc>
    
    <cc>nvasilyev</cc>
    
    <cc>saam</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1251961</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-11-16 12:27:47 -0800</bug_when>
    <thetext>Summary:
Update Esprima to support new features / syntax (**, async/await, trailing comma)

Currently we fail to parse / pretty print code that has ES2017 features which JavaScriptCore supports:

  * Exponentiation operators (**, **=)
  * async/await functions
  * Trailing commas

All of which are supported in Esprima trunk (4.0.0-dev after its latest release 3.1.1).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251964</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-11-16 12:30:45 -0800</bug_when>
    <thetext>&lt;rdar://problem/29293814&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251968</commentid>
    <comment_count>2</comment_count>
      <attachid>294963</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-11-16 12:39:25 -0800</bug_when>
    <thetext>Created attachment 294963
[PATCH] Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251970</commentid>
    <comment_count>3</comment_count>
      <attachid>294963</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-11-16 12:42:04 -0800</bug_when>
    <thetext>Comment on attachment 294963
[PATCH] Proposed Fix

Err some tests need an update.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251993</commentid>
    <comment_count>4</comment_count>
      <attachid>294969</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-11-16 13:18:32 -0800</bug_when>
    <thetext>Created attachment 294969
[PATCH] Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251999</commentid>
    <comment_count>5</comment_count>
      <attachid>294969</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-16 13:42:36 -0800</bug_when>
    <thetext>Comment on attachment 294969
[PATCH] Proposed Fix

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

&gt; LayoutTests/inspector/formatting/resources/javascript-tests/classes-expected.js:121
&gt; +    async a()

what about adding tests for:

1. async computed properties
2. async string literal methods
3. async number literal methods

also, all of the above, but in an object literal instead of a class.

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:-537
&gt; -                defaults: node.defaults.map(this._createInternalSyntaxTree, this),

Why did this go away?

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:-682
&gt; -                defaults: node.defaults.map(this._createInternalSyntaxTree, this),

Ditto. Was this replaced with something else?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252009</commentid>
    <comment_count>6</comment_count>
      <attachid>294969</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-11-16 14:09:26 -0800</bug_when>
    <thetext>Comment on attachment 294969
[PATCH] Proposed Fix

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:-682
&gt;&gt; -                defaults: node.defaults.map(this._createInternalSyntaxTree, this),
&gt; 
&gt; Ditto. Was this replaced with something else?

Yes this was mentioned in the ChangeLog. Now, `params` has an AssignmentPattern if there are default values, instead of this separate, out of flow `defaults` list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252357</commentid>
    <comment_count>7</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-11-17 11:31:56 -0800</bug_when>
    <thetext>&gt; What about adding tests for:
&gt; 
&gt; 1. async computed properties
&gt; 2. async string literal methods
&gt; 3. async number literal methods

It turns out Esprima fails to parse each of these obscure cases. I filed:
https://github.com/jquery/esprima/issues/1626</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252359</commentid>
    <comment_count>8</comment_count>
      <attachid>294969</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-11-17 11:33:18 -0800</bug_when>
    <thetext>Comment on attachment 294969
[PATCH] Proposed Fix

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

&gt; Source/WebInspectorUI/UserInterface/Workers/Formatter/EsprimaFormatter.js:220
&gt; +            if (tokenValue === &quot;async&quot; &amp;&amp; node.parent.type === &quot;Property&quot; &amp;&amp; node.parent.value.async &amp;&amp; token.range[1] !== node.range[1])

I made an adjustment and dropped the node.parent.value.async case in order to handle this case properly:

    o = { async &quot;foo&quot;: function(){} }

I&apos;ll likewise add a test for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252362</commentid>
    <comment_count>9</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-11-17 11:35:01 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 294969 [details]
&gt; [PATCH] Proposed Fix
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=294969&amp;action=review
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Workers/Formatter/EsprimaFormatter.js:220
&gt; &gt; +            if (tokenValue === &quot;async&quot; &amp;&amp; node.parent.type === &quot;Property&quot; &amp;&amp; node.parent.value.async &amp;&amp; token.range[1] !== node.range[1])
&gt; 
&gt; I made an adjustment and dropped the node.parent.value.async case in order
&gt; to handle this case properly:
&gt; 
&gt;     o = { async &quot;foo&quot;: function(){} }

Err on second thought this should not be valid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252366</commentid>
    <comment_count>10</comment_count>
      <attachid>294969</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-11-17 11:37:13 -0800</bug_when>
    <thetext>Comment on attachment 294969
[PATCH] Proposed Fix

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

&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Workers/Formatter/EsprimaFormatter.js:220
&gt;&gt;&gt; +            if (tokenValue === &quot;async&quot; &amp;&amp; node.parent.type === &quot;Property&quot; &amp;&amp; node.parent.value.async &amp;&amp; token.range[1] !== node.range[1])
&gt;&gt; 
&gt;&gt; I made an adjustment and dropped the node.parent.value.async case in order to handle this case properly:
&gt;&gt; 
&gt;&gt;     o = { async &quot;foo&quot;: function(){} }
&gt;&gt; 
&gt;&gt; I&apos;ll likewise add a test for it.
&gt; 
&gt; Err on second thought this should not be valid.

Esprima incorrectly allows:

    o = {async foo:function(){}}

So I&apos;ll revert back to what was in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1257412</commentid>
    <comment_count>11</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-12-07 16:02:06 -0800</bug_when>
    <thetext>Went with: Esprima@7219731 which fixed a few issues around async function syntax.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1257414</commentid>
    <comment_count>12</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-12-07 16:04:57 -0800</bug_when>
    <thetext>https://trac.webkit.org/changeset/209491</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294963</attachid>
            <date>2016-11-16 12:39:25 -0800</date>
            <delta_ts>2016-11-16 13:18:32 -0800</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>esprima-2.patch</filename>
            <type>text/plain</type>
            <size>498670</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAzM2JhODViLi5iZDE3NDVjYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE2LTEx
LTE2ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2Vi
IEluc3BlY3RvcjogVXBkYXRlIEVzcHJpbWEgdG8gc3VwcG9ydCBuZXcgZmVhdHVyZXMgLyBzeW50
YXggKCoqLCBhc3luYy9hd2FpdCwgdHJhaWxpbmcgY29tbWEpCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ4MzAKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzI5MjkzODE0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMv
YXJyb3ctZnVuY3Rpb25zLWV4cGVjdGVkLmpzOgorICAgICAgICAqIGluc3BlY3Rvci9mb3JtYXR0
aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL2Fycm93LWZ1bmN0aW9ucy5qczoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy9jbGFz
c2VzLWV4cGVjdGVkLmpzOgorICAgICAgICAqIGluc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNl
cy9qYXZhc2NyaXB0LXRlc3RzL2NsYXNzZXMuanM6CisgICAgICAgICogaW5zcGVjdG9yL2Zvcm1h
dHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvZnVuY3Rpb25zLWV4cGVjdGVkLmpzOgor
ICAgICAgICAqIGluc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3Rz
L2Z1bmN0aW9ucy5qczoKKyAgICAgICAgKiBpbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMv
amF2YXNjcmlwdC10ZXN0cy9vdGhlci1zdGF0ZW1lbnRzLWV4cGVjdGVkLmpzOgorICAgICAgICAq
IGluc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL290aGVyLXN0
YXRlbWVudHMuanM6CisgICAgICAgICogaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2ph
dmFzY3JpcHQtdGVzdHMvdW5hcnktYmluYXJ5LWV4cHJlc3Npb25zLWV4cGVjdGVkLmpzOgorICAg
ICAgICAqIGluc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL3Vu
YXJ5LWJpbmFyeS1leHByZXNzaW9ucy5qczoKKyAgICAgICAgQ292ZXJhZ2UgZm9yIG5ldyBzdXBw
b3J0ZWQgc3ludGF4LgorCiAyMDE2LTExLTE1ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0Bh
cHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogUHJldmlldyBvdGhlciBDU1MgQG1l
ZGlhIGluIGJyb3dzZXIgd2luZG93IChwcmludCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL2Fycm93LWZ1bmN0
aW9ucy1leHBlY3RlZC5qcyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291
cmNlcy9qYXZhc2NyaXB0LXRlc3RzL2Fycm93LWZ1bmN0aW9ucy1leHBlY3RlZC5qcwppbmRleCBh
ZWM4YjFjLi43ZTY2ZDVlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0
dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy9hcnJvdy1mdW5jdGlvbnMtZXhwZWN0ZWQu
anMKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFz
Y3JpcHQtdGVzdHMvYXJyb3ctZnVuY3Rpb25zLWV4cGVjdGVkLmpzCkBAIC0yOSwzICsyOSwxMSBA
QCBzZXRUaW1lb3V0KCgpID0+IHsKIH0pOwogCiBmb28oKGE9MSwgLi4ucmVzdCkgPT4gcmVzdFth
XSk7CisKK2ZvbygoYT0xLCBiKSA9PiBiKTsKKworZm9vKChhPTEsIGIsICkgPT4gYik7CisKK2Fz
eW5jIHggPT4geAorYXN5bmMgKHgpID0+IHgKK2FzeW5jICh4KSA9PiB7eH0KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRl
c3RzL2Fycm93LWZ1bmN0aW9ucy5qcyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5n
L3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL2Fycm93LWZ1bmN0aW9ucy5qcwppbmRleCA5YzZk
YTk2Li5lNmVkZmRlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGlu
Zy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy9hcnJvdy1mdW5jdGlvbnMuanMKKysrIGIvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMv
YXJyb3ctZnVuY3Rpb25zLmpzCkBAIC0xOSwzICsxOSwxMSBAQCB4PT57eCo9eDt4fTsKIHNldFRp
bWVvdXQoKCk9PnsxOzI7M30pOwogCiBmb28oKGE9MSwuLi5yZXN0KT0+cmVzdFthXSk7CisKK2Zv
bygoYT0xLGIpPT5iKTsKKworZm9vKChhPTEsYiwpPT5iKTsKKworYXN5bmMgeD0+eAorYXN5bmMo
eCk9PngKK2FzeW5jKHgpPT57eH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9m
b3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL2NsYXNzZXMtZXhwZWN0ZWQuanMg
Yi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10
ZXN0cy9jbGFzc2VzLWV4cGVjdGVkLmpzCmluZGV4IDlmNjhhNjQuLmEwNGY3NmUgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0
LXRlc3RzL2NsYXNzZXMtZXhwZWN0ZWQuanMKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zv
cm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvY2xhc3Nlcy1leHBlY3RlZC5qcwpA
QCAtNzksNiArNzksMTAgQEAgY2xhc3MgRm9vIGV4dGVuZHMgQmFyIHsKICAgICB7CiAgICAgICAg
IDEKICAgICB9CisgICAgYXN5bmMgYSgpCisgICAgeworICAgICAgICAxCisgICAgfQogfQogCiBB
ID0gY2xhc3MgRm9vIGV4dGVuZHMgKGIgPyBCYXIgOiBCYXIpIHsKQEAgLTExNCw0ICsxMTgsMjMg
QEAgQSA9IGNsYXNzIEZvbyBleHRlbmRzIChiID8gQmFyIDogQmFyKSB7CiAgICAgewogICAgICAg
ICAxCiAgICAgfQorICAgIGFzeW5jIGEoKQorICAgIHsKKyAgICAgICAgMQorICAgIH0KK30KKwor
Y2xhc3MgRm9vIHsKKyAgICBzdGF0aWMgYXN5bmMgYXN5bmMoKQorICAgIHsKKyAgICAgICAgMQor
ICAgIH0KKyAgICBhc3luYyBhc3luYygpCisgICAgeworICAgICAgICAxCisgICAgfQorICAgIGFz
eW5jKCkKKyAgICB7CisgICAgICAgIDEKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy9jbGFzc2Vz
LmpzIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3Jp
cHQtdGVzdHMvY2xhc3Nlcy5qcwppbmRleCA2MDU4ZGI5Li5mMDYxNjEwIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0
cy9jbGFzc2VzLmpzCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291
cmNlcy9qYXZhc2NyaXB0LXRlc3RzL2NsYXNzZXMuanMKQEAgLTEzLDYgKzEzLDggQEAgY2xhc3Mg
Rm9vIGV4dGVuZHMgQmFye2NvbnN0cnVjdG9yKCl7c3VwZXIoKX19CiAKIGNsYXNzIEZvbyBleHRl
bmRzIEJhcntjb25zdHJ1Y3RvcigpezF9c3RhdGljIHN0YXRpY01ldGhvZCgpe3N1cGVyLnN0YXRp
Y01ldGhvZCgpfX0KIAotY2xhc3MgRm9vIGV4dGVuZHMgQmFye2NvbnN0cnVjdG9yKCl7MX1zdGF0
aWMgc3RhdGljTWV0aG9kKCl7c3VwZXIuc3RhdGljTWV0aG9kKCl9bWV0aG9kMSgpezF9bWV0aG9k
MihuYW1lLHtvcHRpb25zfSl7MX1nZXQgZ2V0dGVyKCl7MX1zZXQgc2V0dGVyKHgpezF9KmdlbjEo
KXsxfSogZ2VuMigpezF9fQorY2xhc3MgRm9vIGV4dGVuZHMgQmFye2NvbnN0cnVjdG9yKCl7MX1z
dGF0aWMgc3RhdGljTWV0aG9kKCl7c3VwZXIuc3RhdGljTWV0aG9kKCl9bWV0aG9kMSgpezF9bWV0
aG9kMihuYW1lLHtvcHRpb25zfSl7MX1nZXQgZ2V0dGVyKCl7MX1zZXQgc2V0dGVyKHgpezF9Kmdl
bjEoKXsxfSogZ2VuMigpezF9YXN5bmMgYSgpezF9fQogCi1BID0gY2xhc3MgRm9vIGV4dGVuZHMo
Yj9CYXI6QmFyKXtjb25zdHJ1Y3Rvcigpe25ldy50YXJnZXQuc3RhdGljTWV0aG9kKCl9c3RhdGlj
IHN0YXRpY01ldGhvZCgpe3N1cGVyLnN0YXRpY01ldGhvZCgpfW1ldGhvZDEoKXsxfW1ldGhvZDIo
bmFtZSx7b3B0aW9uc30pe3N1cGVyLm1ldGhvZCgpfWdldCBnZXR0ZXIoKXsxfXNldCBzZXR0ZXIo
eCl7MX0qZ2VuMSgpezF9KiBnZW4yKCl7MX19CitBID0gY2xhc3MgRm9vIGV4dGVuZHMoYj9CYXI6
QmFyKXtjb25zdHJ1Y3Rvcigpe25ldy50YXJnZXQuc3RhdGljTWV0aG9kKCl9c3RhdGljIHN0YXRp
Y01ldGhvZCgpe3N1cGVyLnN0YXRpY01ldGhvZCgpfW1ldGhvZDEoKXsxfW1ldGhvZDIobmFtZSx7
b3B0aW9uc30pe3N1cGVyLm1ldGhvZCgpfWdldCBnZXR0ZXIoKXsxfXNldCBzZXR0ZXIoeCl7MX0q
Z2VuMSgpezF9KiBnZW4yKCl7MX1hc3luYyBhKCl7MX19CisKK2NsYXNzIEZvb3tzdGF0aWMgYXN5
bmMgYXN5bmMoKXsxfWFzeW5jIGFzeW5jKCl7MX1hc3luYygpezF9fQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMv
ZnVuY3Rpb25zLWV4cGVjdGVkLmpzIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcv
cmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvZnVuY3Rpb25zLWV4cGVjdGVkLmpzCmluZGV4IDFh
MzA2NTcuLmEzZTZjYzMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0
aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL2Z1bmN0aW9ucy1leHBlY3RlZC5qcworKysg
Yi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10
ZXN0cy9mdW5jdGlvbnMtZXhwZWN0ZWQuanMKQEAgLTIsNiArMiw4IEBACiAKIGZvbygpOwogZm9v
KDEpOworZm9vKDEsIDIpOworZm9vKDEsIDIsICk7CiBmb28oMSwgMiwgMyk7CiBmb28oZm9vKDEp
KTsKIGZvbyhmb28oMSksIGZvbygyLCAzKSk7CkBAIC03OSw2ICs4MSwxMCBAQCBmdW5jdGlvbiBm
b28oW2EsIGJdKSB7CiAgICAgMQogfQogCitmdW5jdGlvbiBmb28oW2EsIGIsIF0pIHsKKyAgICAx
Cit9CisKIC8vIE1ldGhvZHMKIAogbyA9IHsKQEAgLTg3LDcgKzkzLDggQEAgbyA9IHsKICAgICBn
ZXQgZ2V0dGVyKCkge30sCiAgICAgc2V0IHNldHRlcih4KSB7fSwKICAgICAqZ2VuMSgpIHt9LAot
ICAgICpnZW4yKCkge30KKyAgICAqZ2VuMigpIHt9LAorICAgIGFzeW5jIGEoKSB7fQogfQogCiBv
ID0gewpAQCAtMTA4LDYgKzExNSw5IEBAIG8gPSB7CiAgICAgfSwKICAgICAqZ2VuMigpIHsKICAg
ICAgICAgMQorICAgIH0sCisgICAgYXN5bmMgYSgpIHsKKyAgICAgICAgMQogICAgIH0KIH0KIC8v
IE11bHRpcGxlIC8gTmVzdGVkCkBAIC0xMjIsMyArMTMyLDE4IEBAIGZ1bmN0aW9uIG91dGVyKCkg
ewogICAgIH0KICAgICAzCiB9CisKKy8vIEFzeW5jIC8gQXdhaXQKKworYXN5bmMgZnVuY3Rpb24g
Zm9vKCkge30KK2FzeW5jIGZ1bmN0aW9uIGZvbygpIHsKKyAgICAxCit9Cithc3luYyBmdW5jdGlv
biBmb28oKSB7CisgICAgYXdhaXQgZm9vKCkKK30KK28gPSB7CisgICAgYXN5bmMgYXN5bmMoKSB7
fSwKKyAgICBhc3luYygpIHt9LAorICAgIGFzeW5jOiAxCit9OwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvZnVu
Y3Rpb25zLmpzIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2ph
dmFzY3JpcHQtdGVzdHMvZnVuY3Rpb25zLmpzCmluZGV4IGY5ZGNiNGYuLjFmZjM4NzEgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2Ny
aXB0LXRlc3RzL2Z1bmN0aW9ucy5qcworKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0
dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy9mdW5jdGlvbnMuanMKQEAgLTIsNiArMiw4
IEBACiAKIGZvbygpOwogZm9vKDEpOworZm9vKDEsMik7Citmb28oMSwyLCk7CiBmb28oMSwyLDMp
OwogZm9vKGZvbygxKSk7CiBmb28oZm9vKDEpLGZvbygyLDMpKTsKQEAgLTQ1LDE0ICs0NywyMyBA
QCBmdW5jdGlvbiBmb28oe2EsYn0pezF9CiAKIGZ1bmN0aW9uIGZvbyhbYSxiXSl7MX0KIAorZnVu
Y3Rpb24gZm9vKFthLGIsXSl7MX0KKwogLy8gTWV0aG9kcwogCi1vID0ge3Byb3A6ZnVuY3Rpb24o
KXt9LG1ldGhvZCgpe30sZ2V0IGdldHRlcigpe30sc2V0IHNldHRlcih4KXt9LCpnZW4xKCl7fSwq
IGdlbjIoKXt9fQorbz17cHJvcDpmdW5jdGlvbigpe30sbWV0aG9kKCl7fSxnZXQgZ2V0dGVyKCl7
fSxzZXQgc2V0dGVyKHgpe30sKmdlbjEoKXt9LCogZ2VuMigpe30sIGFzeW5jIGEoKXt9fQogCi1v
ID0ge3Byb3A6ZnVuY3Rpb24oKXsxfSxtZXRob2QoKXsxfSxnZXQgZ2V0dGVyKCl7MX0sc2V0IHNl
dHRlcih4KXsxfSwqZ2VuMSgpezF9LCogZ2VuMigpezF9fQorbz17cHJvcDpmdW5jdGlvbigpezF9
LG1ldGhvZCgpezF9LGdldCBnZXR0ZXIoKXsxfSxzZXQgc2V0dGVyKHgpezF9LCpnZW4xKCl7MX0s
KiBnZW4yKCl7MX0sIGFzeW5jIGEoKXsxfX0KIAogLy8gTXVsdGlwbGUgLyBOZXN0ZWQKIAogZnVu
Y3Rpb24gZigpe31mdW5jdGlvbiBmKCl7fQogCiBmdW5jdGlvbiBvdXRlcigpezE7ZnVuY3Rpb24g
aW5uZXIoKXsyfTN9CisKKy8vIEFzeW5jIC8gQXdhaXQKKworYXN5bmMgZnVuY3Rpb24gZm9vKCl7
fQorYXN5bmMgZnVuY3Rpb24gZm9vKCl7MX0KK2FzeW5jIGZ1bmN0aW9uIGZvbygpe2F3YWl0IGZv
bygpfQorbz17YXN5bmMgYXN5bmMoKXt9LGFzeW5jKCl7fSxhc3luYzoxfTsKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRl
c3RzL290aGVyLXN0YXRlbWVudHMtZXhwZWN0ZWQuanMgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
Zm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy9vdGhlci1zdGF0ZW1lbnRzLWV4
cGVjdGVkLmpzCmluZGV4IDllMDA3NWQuLmJiMWUyOTYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL290aGVyLXN0
YXRlbWVudHMtZXhwZWN0ZWQuanMKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRp
bmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvb3RoZXItc3RhdGVtZW50cy1leHBlY3RlZC5q
cwpAQCAtOCw1ICs4LDkgQEAgdGhyb3cgewogICAgIGE6IDEKIH07CiAKK2RlbGV0ZSB4OworZGVs
ZXRlIHguYTsKK2RlbGV0ZSB4WzBdOworCiBkZWJ1Z2dlcgogZGVidWdnZXI7CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10
ZXN0cy9vdGhlci1zdGF0ZW1lbnRzLmpzIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRp
bmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvb3RoZXItc3RhdGVtZW50cy5qcwppbmRleCBi
OTUzODFhLi44NmE4NGZjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0
dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy9vdGhlci1zdGF0ZW1lbnRzLmpzCisrKyBi
L0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRl
c3RzL290aGVyLXN0YXRlbWVudHMuanMKQEAgLTYsNSArNiw5IEBAIHRocm93IngiOwogdGhyb3cg
bmV3IHg7CiB0aHJvdyB7YToxfTsKIAorZGVsZXRlIHg7CitkZWxldGUgeC5hOworZGVsZXRlIHhb
MF07CisKIGRlYnVnZ2VyCiBkZWJ1Z2dlcjsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL3VuYXJ5LWJpbmFyeS1l
eHByZXNzaW9ucy1leHBlY3RlZC5qcyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5n
L3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL3VuYXJ5LWJpbmFyeS1leHByZXNzaW9ucy1leHBl
Y3RlZC5qcwppbmRleCAwZGJiNDVjLi4yMjdmOGE4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9p
bnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy91bmFyeS1iaW5h
cnktZXhwcmVzc2lvbnMtZXhwZWN0ZWQuanMKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zv
cm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvdW5hcnktYmluYXJ5LWV4cHJlc3Np
b25zLWV4cGVjdGVkLmpzCkBAIC00MSw2ICs0MSw3IEBAIHggPSB7CiAgICAgZDogMSwKICAgICBz
OiBzCiB9OworeCA9IHggKiogMjsKIAogYSA8IGI7CiBhID4gYjsKQEAgLTUzLDYgKzU0LDEyIEBA
IGEgIT09IGI7CiAhYSAhPSAhYjsKICEhYSAhPSAhIWI7CiAKK3ggKz0geDsKK3ggKj0geDsKK3gg
PDw9IHg7Cit4ICoqPSB4OworeCAlPSB4OworCiB2b2lkIDA7CiB2b2lkICgwKTsKIHZvaWQgKDAp
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2Vz
L2phdmFzY3JpcHQtdGVzdHMvdW5hcnktYmluYXJ5LWV4cHJlc3Npb25zLmpzIGIvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvdW5hcnkt
YmluYXJ5LWV4cHJlc3Npb25zLmpzCmluZGV4IDAzNDVjYWQuLmQwNjgyZjYgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRl
c3RzL3VuYXJ5LWJpbmFyeS1leHByZXNzaW9ucy5qcworKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy91bmFyeS1iaW5hcnktZXhw
cmVzc2lvbnMuanMKQEAgLTM1LDYgKzM1LDcgQEAgeD0xPyArMTotczsKIHg9KDE/ICsxOi1zKTsK
IHg9WzE/IC0xOitzXTsKIHg9e2E6LTEsYjorMSxjOjEtMSxkOjEsczpzfTsKK3g9eCoqMjsKIAog
YTxiOwogYT5iOwpAQCAtNDcsNiArNDgsMTIgQEAgYSE9PWI7CiAhYSE9IWI7CiAhIWEhPSEhYjsK
IAoreCs9eDsKK3gqPXg7Cit4PDw9eDsKK3gqKj14OworeCU9eDsKKwogdm9pZCAwOwogdm9pZCgw
KTsKIHZvaWQgKDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKaW5kZXggNmJmN2EzYTAuLmY0ZGVj
ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDE2LTExLTE2
ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIElu
c3BlY3RvcjogVXBkYXRlIEVzcHJpbWEgdG8gc3VwcG9ydCBuZXcgZmVhdHVyZXMgLyBzeW50YXgg
KCoqLCBhc3luYy9hd2FpdCwgdHJhaWxpbmcgY29tbWEpCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ4MzAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzI5MjkzODE0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Fc3ByaW1hL0xJQ0VOU0U6CisgICAgICAgICog
VXNlckludGVyZmFjZS9FeHRlcm5hbC9Fc3ByaW1hL2VzcHJpbWEuanM6CisgICAgICAgIFVwZGF0
ZWQgdG8gRXNwcmltYUAzMTE4OWJlICg0LjAuMC1kZXYpLgorCisgICAgICAgICogVXNlckludGVy
ZmFjZS9Nb2RlbHMvU2NyaXB0U3ludGF4VHJlZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
Y3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZS5fcmVjdXJzZSk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuU2NyaXB0U3ludGF4VHJlZS5wcm90b3R5cGUuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZSk6
CisgICAgICAgICogVXNlckludGVyZmFjZS9Xb3JrZXJzL0Zvcm1hdHRlci9FU1RyZWVXYWxrZXIu
anM6CisgICAgICAgIChFU1RyZWVXYWxrZXIucHJvdG90eXBlLl93YWxrQ2hpbGRyZW4pOgorICAg
ICAgICBBZGQgbmV3IG5vZGVzLiBSZW1vdmUgc3RhbGUgcHJvcGVydGllcyAoZGVmYXVsdHMgaXMg
bm8gbG9uZ2VyIG5lZWRlZCwKKyAgICAgICAgYXMgcGFyYW1ldGVycyB3aXRoIGRlZmF1bHQgdmFs
dWVzIGFyZSBub3cgQXNzaWdubWVudFBhdHRlcm5zKS4KKworICAgICAgICAqIFVzZXJJbnRlcmZh
Y2UvV29ya2Vycy9Gb3JtYXR0ZXIvRXNwcmltYUZvcm1hdHRlci5qczoKKyAgICAgICAgKEVzcHJp
bWFGb3JtYXR0ZXIucHJvdG90eXBlLl9oYW5kbGVUb2tlbkF0Tm9kZSk6CisgICAgICAgIEhhbmRs
ZSBwcmV0dHkgcHJpbnRpbmcgb2YgbmV3IG5vZGVzIGFuZCBpZGVudGlmaWVycy4KKwogMjAxNi0x
MS0xNSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdl
YiBJbnNwZWN0b3I6IFJlbW92ZSB1bnVzZWQgYW5kIHVudGVzdGVkIFBhZ2Uuc2V0VG91Y2hFbXVs
YXRpb25FbmFibGVkIGNvbW1hbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0V4dGVybmFsL0VzcHJpbWEvTElDRU5TRSBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0VzcHJpbWEvTElDRU5TRQppbmRleCAxNzU1N2Vj
Li43YTU1MTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9FeHRlcm5hbC9Fc3ByaW1hL0xJQ0VOU0UKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvRXh0ZXJuYWwvRXNwcmltYS9MSUNFTlNFCkBAIC0xLDQgKzEsNCBAQAotQ29w
eXJpZ2h0IChjKSBqUXVlcnkgRm91bmRhdGlvbiwgSW5jLiBhbmQgQ29udHJpYnV0b3JzLCBBbGwg
UmlnaHRzIFJlc2VydmVkLgorQ29weXJpZ2h0IEpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRy
aWJ1dG9ycywgaHR0cHM6Ly9qcy5mb3VuZGF0aW9uLwogCiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUgbWV0OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
RXh0ZXJuYWwvRXNwcmltYS9lc3ByaW1hLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvRXh0ZXJuYWwvRXNwcmltYS9lc3ByaW1hLmpzCmluZGV4IDIyZWVmZWQuLmFiOTU5
ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVy
bmFsL0VzcHJpbWEvZXNwcmltYS5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9FeHRlcm5hbC9Fc3ByaW1hL2VzcHJpbWEuanMKQEAgLTEsNTY2MCArMSw2NjE1IEBA
Ci0vKgotICBDb3B5cmlnaHQgKGMpIGpRdWVyeSBGb3VuZGF0aW9uLCBJbmMuIGFuZCBDb250cmli
dXRvcnMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0KLSAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUgbWV0OgotCi0gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLSAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCi0g
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWQot
ICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSovCi0KLShmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkgewotICAgICd1c2Ugc3RyaWN0JzsK
LQotICAgIC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFN
RCwgQ29tbW9uSlMvTm9kZS5qcywKLSAgICAvLyBSaGlubywgYW5kIHBsYWluIGJyb3dzZXIgbG9h
ZGluZy4KLQotICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovCi0gICAgaWYgKHR5cGVvZiBk
ZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkgewotICAgICAgICBkZWZpbmUoWydl
eHBvcnRzJ10sIGZhY3RvcnkpOwotICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1
bmRlZmluZWQnKSB7Ci0gICAgICAgIGZhY3RvcnkoZXhwb3J0cyk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgZmFjdG9yeSgocm9vdC5lc3ByaW1hID0ge30pKTsKLSAgICB9Ci19KHRoaXMsIGZ1bmN0
aW9uIChleHBvcnRzKSB7Ci0gICAgJ3VzZSBzdHJpY3QnOwotCi0gICAgdmFyIFRva2VuLAotICAg
ICAgICBUb2tlbk5hbWUsCi0gICAgICAgIEZuRXhwclRva2VucywKLSAgICAgICAgU3ludGF4LAot
ICAgICAgICBQbGFjZUhvbGRlcnMsCi0gICAgICAgIE1lc3NhZ2VzLAotICAgICAgICBSZWdleCwK
LSAgICAgICAgc291cmNlLAotICAgICAgICBzdHJpY3QsCi0gICAgICAgIGluZGV4LAotICAgICAg
ICBsaW5lTnVtYmVyLAotICAgICAgICBsaW5lU3RhcnQsCi0gICAgICAgIGhhc0xpbmVUZXJtaW5h
dG9yLAotICAgICAgICBsYXN0SW5kZXgsCi0gICAgICAgIGxhc3RMaW5lTnVtYmVyLAotICAgICAg
ICBsYXN0TGluZVN0YXJ0LAotICAgICAgICBzdGFydEluZGV4LAotICAgICAgICBzdGFydExpbmVO
dW1iZXIsCi0gICAgICAgIHN0YXJ0TGluZVN0YXJ0LAotICAgICAgICBzY2FubmluZywKLSAgICAg
ICAgbGVuZ3RoLAotICAgICAgICBsb29rYWhlYWQsCi0gICAgICAgIHN0YXRlLAotICAgICAgICBl
eHRyYSwKLSAgICAgICAgaXNCaW5kaW5nRWxlbWVudCwKLSAgICAgICAgaXNBc3NpZ25tZW50VGFy
Z2V0LAotICAgICAgICBmaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3I7Ci0KLSAgICBUb2tl
biA9IHsKLSAgICAgICAgQm9vbGVhbkxpdGVyYWw6IDEsCi0gICAgICAgIEVPRjogMiwKLSAgICAg
ICAgSWRlbnRpZmllcjogMywKLSAgICAgICAgS2V5d29yZDogNCwKLSAgICAgICAgTnVsbExpdGVy
YWw6IDUsCi0gICAgICAgIE51bWVyaWNMaXRlcmFsOiA2LAotICAgICAgICBQdW5jdHVhdG9yOiA3
LAotICAgICAgICBTdHJpbmdMaXRlcmFsOiA4LAotICAgICAgICBSZWd1bGFyRXhwcmVzc2lvbjog
OSwKLSAgICAgICAgVGVtcGxhdGU6IDEwCi0gICAgfTsKLQotICAgIFRva2VuTmFtZSA9IHt9Owot
ICAgIFRva2VuTmFtZVtUb2tlbi5Cb29sZWFuTGl0ZXJhbF0gPSAnQm9vbGVhbic7Ci0gICAgVG9r
ZW5OYW1lW1Rva2VuLkVPRl0gPSAnPGVuZD4nOwotICAgIFRva2VuTmFtZVtUb2tlbi5JZGVudGlm
aWVyXSA9ICdJZGVudGlmaWVyJzsKLSAgICBUb2tlbk5hbWVbVG9rZW4uS2V5d29yZF0gPSAnS2V5
d29yZCc7Ci0gICAgVG9rZW5OYW1lW1Rva2VuLk51bGxMaXRlcmFsXSA9ICdOdWxsJzsKLSAgICBU
b2tlbk5hbWVbVG9rZW4uTnVtZXJpY0xpdGVyYWxdID0gJ051bWVyaWMnOwotICAgIFRva2VuTmFt
ZVtUb2tlbi5QdW5jdHVhdG9yXSA9ICdQdW5jdHVhdG9yJzsKLSAgICBUb2tlbk5hbWVbVG9rZW4u
U3RyaW5nTGl0ZXJhbF0gPSAnU3RyaW5nJzsKLSAgICBUb2tlbk5hbWVbVG9rZW4uUmVndWxhckV4
cHJlc3Npb25dID0gJ1JlZ3VsYXJFeHByZXNzaW9uJzsKLSAgICBUb2tlbk5hbWVbVG9rZW4uVGVt
cGxhdGVdID0gJ1RlbXBsYXRlJzsKLQotICAgIC8vIEEgZnVuY3Rpb24gZm9sbG93aW5nIG9uZSBv
ZiB0aG9zZSB0b2tlbnMgaXMgYW4gZXhwcmVzc2lvbi4KLSAgICBGbkV4cHJUb2tlbnMgPSBbJygn
LCAneycsICdbJywgJ2luJywgJ3R5cGVvZicsICdpbnN0YW5jZW9mJywgJ25ldycsCi0gICAgICAg
ICAgICAgICAgICAgICdyZXR1cm4nLCAnY2FzZScsICdkZWxldGUnLCAndGhyb3cnLCAndm9pZCcs
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGFzc2lnbm1lbnQgb3BlcmF0b3JzCi0gICAgICAgICAg
ICAgICAgICAgICc9JywgJys9JywgJy09JywgJyo9JywgJy89JywgJyU9JywgJzw8PScsICc+Pj0n
LCAnPj4+PScsCi0gICAgICAgICAgICAgICAgICAgICcmPScsICd8PScsICdePScsICcsJywKLSAg
ICAgICAgICAgICAgICAgICAgLy8gYmluYXJ5L3VuYXJ5IG9wZXJhdG9ycwotICAgICAgICAgICAg
ICAgICAgICAnKycsICctJywgJyonLCAnLycsICclJywgJysrJywgJy0tJywgJzw8JywgJz4+Jywg
Jz4+PicsICcmJywKLSAgICAgICAgICAgICAgICAgICAgJ3wnLCAnXicsICchJywgJ34nLCAnJiYn
LCAnfHwnLCAnPycsICc6JywgJz09PScsICc9PScsICc+PScsCi0gICAgICAgICAgICAgICAgICAg
ICc8PScsICc8JywgJz4nLCAnIT0nLCAnIT09J107Ci0KLSAgICBTeW50YXggPSB7Ci0gICAgICAg
IEFzc2lnbm1lbnRFeHByZXNzaW9uOiAnQXNzaWdubWVudEV4cHJlc3Npb24nLAotICAgICAgICBB
c3NpZ25tZW50UGF0dGVybjogJ0Fzc2lnbm1lbnRQYXR0ZXJuJywKLSAgICAgICAgQXJyYXlFeHBy
ZXNzaW9uOiAnQXJyYXlFeHByZXNzaW9uJywKLSAgICAgICAgQXJyYXlQYXR0ZXJuOiAnQXJyYXlQ
YXR0ZXJuJywKLSAgICAgICAgQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246ICdBcnJvd0Z1bmN0aW9u
RXhwcmVzc2lvbicsCi0gICAgICAgIEJsb2NrU3RhdGVtZW50OiAnQmxvY2tTdGF0ZW1lbnQnLAot
ICAgICAgICBCaW5hcnlFeHByZXNzaW9uOiAnQmluYXJ5RXhwcmVzc2lvbicsCi0gICAgICAgIEJy
ZWFrU3RhdGVtZW50OiAnQnJlYWtTdGF0ZW1lbnQnLAotICAgICAgICBDYWxsRXhwcmVzc2lvbjog
J0NhbGxFeHByZXNzaW9uJywKLSAgICAgICAgQ2F0Y2hDbGF1c2U6ICdDYXRjaENsYXVzZScsCi0g
ICAgICAgIENsYXNzQm9keTogJ0NsYXNzQm9keScsCi0gICAgICAgIENsYXNzRGVjbGFyYXRpb246
ICdDbGFzc0RlY2xhcmF0aW9uJywKLSAgICAgICAgQ2xhc3NFeHByZXNzaW9uOiAnQ2xhc3NFeHBy
ZXNzaW9uJywKLSAgICAgICAgQ29uZGl0aW9uYWxFeHByZXNzaW9uOiAnQ29uZGl0aW9uYWxFeHBy
ZXNzaW9uJywKLSAgICAgICAgQ29udGludWVTdGF0ZW1lbnQ6ICdDb250aW51ZVN0YXRlbWVudCcs
Ci0gICAgICAgIERvV2hpbGVTdGF0ZW1lbnQ6ICdEb1doaWxlU3RhdGVtZW50JywKLSAgICAgICAg
RGVidWdnZXJTdGF0ZW1lbnQ6ICdEZWJ1Z2dlclN0YXRlbWVudCcsCi0gICAgICAgIEVtcHR5U3Rh
dGVtZW50OiAnRW1wdHlTdGF0ZW1lbnQnLAotICAgICAgICBFeHBvcnRBbGxEZWNsYXJhdGlvbjog
J0V4cG9ydEFsbERlY2xhcmF0aW9uJywKLSAgICAgICAgRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9u
OiAnRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uJywKLSAgICAgICAgRXhwb3J0TmFtZWREZWNsYXJh
dGlvbjogJ0V4cG9ydE5hbWVkRGVjbGFyYXRpb24nLAotICAgICAgICBFeHBvcnRTcGVjaWZpZXI6
ICdFeHBvcnRTcGVjaWZpZXInLAotICAgICAgICBFeHByZXNzaW9uU3RhdGVtZW50OiAnRXhwcmVz
c2lvblN0YXRlbWVudCcsCi0gICAgICAgIEZvclN0YXRlbWVudDogJ0ZvclN0YXRlbWVudCcsCi0g
ICAgICAgIEZvck9mU3RhdGVtZW50OiAnRm9yT2ZTdGF0ZW1lbnQnLAotICAgICAgICBGb3JJblN0
YXRlbWVudDogJ0ZvckluU3RhdGVtZW50JywKLSAgICAgICAgRnVuY3Rpb25EZWNsYXJhdGlvbjog
J0Z1bmN0aW9uRGVjbGFyYXRpb24nLAotICAgICAgICBGdW5jdGlvbkV4cHJlc3Npb246ICdGdW5j
dGlvbkV4cHJlc3Npb24nLAotICAgICAgICBJZGVudGlmaWVyOiAnSWRlbnRpZmllcicsCi0gICAg
ICAgIElmU3RhdGVtZW50OiAnSWZTdGF0ZW1lbnQnLAotICAgICAgICBJbXBvcnREZWNsYXJhdGlv
bjogJ0ltcG9ydERlY2xhcmF0aW9uJywKLSAgICAgICAgSW1wb3J0RGVmYXVsdFNwZWNpZmllcjog
J0ltcG9ydERlZmF1bHRTcGVjaWZpZXInLAotICAgICAgICBJbXBvcnROYW1lc3BhY2VTcGVjaWZp
ZXI6ICdJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXInLAotICAgICAgICBJbXBvcnRTcGVjaWZpZXI6
ICdJbXBvcnRTcGVjaWZpZXInLAotICAgICAgICBMaXRlcmFsOiAnTGl0ZXJhbCcsCi0gICAgICAg
IExhYmVsZWRTdGF0ZW1lbnQ6ICdMYWJlbGVkU3RhdGVtZW50JywKLSAgICAgICAgTG9naWNhbEV4
cHJlc3Npb246ICdMb2dpY2FsRXhwcmVzc2lvbicsCi0gICAgICAgIE1lbWJlckV4cHJlc3Npb246
ICdNZW1iZXJFeHByZXNzaW9uJywKLSAgICAgICAgTWV0YVByb3BlcnR5OiAnTWV0YVByb3BlcnR5
JywKLSAgICAgICAgTWV0aG9kRGVmaW5pdGlvbjogJ01ldGhvZERlZmluaXRpb24nLAotICAgICAg
ICBOZXdFeHByZXNzaW9uOiAnTmV3RXhwcmVzc2lvbicsCi0gICAgICAgIE9iamVjdEV4cHJlc3Np
b246ICdPYmplY3RFeHByZXNzaW9uJywKLSAgICAgICAgT2JqZWN0UGF0dGVybjogJ09iamVjdFBh
dHRlcm4nLAotICAgICAgICBQcm9ncmFtOiAnUHJvZ3JhbScsCi0gICAgICAgIFByb3BlcnR5OiAn
UHJvcGVydHknLAotICAgICAgICBSZXN0RWxlbWVudDogJ1Jlc3RFbGVtZW50JywKLSAgICAgICAg
UmV0dXJuU3RhdGVtZW50OiAnUmV0dXJuU3RhdGVtZW50JywKLSAgICAgICAgU2VxdWVuY2VFeHBy
ZXNzaW9uOiAnU2VxdWVuY2VFeHByZXNzaW9uJywKLSAgICAgICAgU3ByZWFkRWxlbWVudDogJ1Nw
cmVhZEVsZW1lbnQnLAotICAgICAgICBTdXBlcjogJ1N1cGVyJywKLSAgICAgICAgU3dpdGNoQ2Fz
ZTogJ1N3aXRjaENhc2UnLAotICAgICAgICBTd2l0Y2hTdGF0ZW1lbnQ6ICdTd2l0Y2hTdGF0ZW1l
bnQnLAotICAgICAgICBUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb246ICdUYWdnZWRUZW1wbGF0ZUV4
cHJlc3Npb24nLAotICAgICAgICBUZW1wbGF0ZUVsZW1lbnQ6ICdUZW1wbGF0ZUVsZW1lbnQnLAot
ICAgICAgICBUZW1wbGF0ZUxpdGVyYWw6ICdUZW1wbGF0ZUxpdGVyYWwnLAotICAgICAgICBUaGlz
RXhwcmVzc2lvbjogJ1RoaXNFeHByZXNzaW9uJywKLSAgICAgICAgVGhyb3dTdGF0ZW1lbnQ6ICdU
aHJvd1N0YXRlbWVudCcsCi0gICAgICAgIFRyeVN0YXRlbWVudDogJ1RyeVN0YXRlbWVudCcsCi0g
ICAgICAgIFVuYXJ5RXhwcmVzc2lvbjogJ1VuYXJ5RXhwcmVzc2lvbicsCi0gICAgICAgIFVwZGF0
ZUV4cHJlc3Npb246ICdVcGRhdGVFeHByZXNzaW9uJywKLSAgICAgICAgVmFyaWFibGVEZWNsYXJh
dGlvbjogJ1ZhcmlhYmxlRGVjbGFyYXRpb24nLAotICAgICAgICBWYXJpYWJsZURlY2xhcmF0b3I6
ICdWYXJpYWJsZURlY2xhcmF0b3InLAotICAgICAgICBXaGlsZVN0YXRlbWVudDogJ1doaWxlU3Rh
dGVtZW50JywKLSAgICAgICAgV2l0aFN0YXRlbWVudDogJ1dpdGhTdGF0ZW1lbnQnLAotICAgICAg
ICBZaWVsZEV4cHJlc3Npb246ICdZaWVsZEV4cHJlc3Npb24nCi0gICAgfTsKLQotICAgIFBsYWNl
SG9sZGVycyA9IHsKLSAgICAgICAgQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlcjogJ0Fycm93UGFy
YW1ldGVyUGxhY2VIb2xkZXInCi0gICAgfTsKLQotICAgIC8vIEVycm9yIG1lc3NhZ2VzIHNob3Vs
ZCBiZSBpZGVudGljYWwgdG8gVjguCi0gICAgTWVzc2FnZXMgPSB7Ci0gICAgICAgIFVuZXhwZWN0
ZWRUb2tlbjogJ1VuZXhwZWN0ZWQgdG9rZW4gJTAnLAotICAgICAgICBVbmV4cGVjdGVkTnVtYmVy
OiAnVW5leHBlY3RlZCBudW1iZXInLAotICAgICAgICBVbmV4cGVjdGVkU3RyaW5nOiAnVW5leHBl
Y3RlZCBzdHJpbmcnLAotICAgICAgICBVbmV4cGVjdGVkSWRlbnRpZmllcjogJ1VuZXhwZWN0ZWQg
aWRlbnRpZmllcicsCi0gICAgICAgIFVuZXhwZWN0ZWRSZXNlcnZlZDogJ1VuZXhwZWN0ZWQgcmVz
ZXJ2ZWQgd29yZCcsCi0gICAgICAgIFVuZXhwZWN0ZWRUZW1wbGF0ZTogJ1VuZXhwZWN0ZWQgcXVh
c2kgJTAnLAotICAgICAgICBVbmV4cGVjdGVkRU9TOiAnVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQn
LAotICAgICAgICBOZXdsaW5lQWZ0ZXJUaHJvdzogJ0lsbGVnYWwgbmV3bGluZSBhZnRlciB0aHJv
dycsCi0gICAgICAgIEludmFsaWRSZWdFeHA6ICdJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbics
Ci0gICAgICAgIFVudGVybWluYXRlZFJlZ0V4cDogJ0ludmFsaWQgcmVndWxhciBleHByZXNzaW9u
OiBtaXNzaW5nIC8nLAotICAgICAgICBJbnZhbGlkTEhTSW5Bc3NpZ25tZW50OiAnSW52YWxpZCBs
ZWZ0LWhhbmQgc2lkZSBpbiBhc3NpZ25tZW50JywKLSAgICAgICAgSW52YWxpZExIU0luRm9ySW46
ICdJbnZhbGlkIGxlZnQtaGFuZCBzaWRlIGluIGZvci1pbicsCi0gICAgICAgIEludmFsaWRMSFNJ
bkZvckxvb3A6ICdJbnZhbGlkIGxlZnQtaGFuZCBzaWRlIGluIGZvci1sb29wJywKLSAgICAgICAg
TXVsdGlwbGVEZWZhdWx0c0luU3dpdGNoOiAnTW9yZSB0aGFuIG9uZSBkZWZhdWx0IGNsYXVzZSBp
biBzd2l0Y2ggc3RhdGVtZW50JywKLSAgICAgICAgTm9DYXRjaE9yRmluYWxseTogJ01pc3Npbmcg
Y2F0Y2ggb3IgZmluYWxseSBhZnRlciB0cnknLAotICAgICAgICBVbmtub3duTGFiZWw6ICdVbmRl
ZmluZWQgbGFiZWwgXCclMFwnJywKLSAgICAgICAgUmVkZWNsYXJhdGlvbjogJyUwIFwnJTFcJyBo
YXMgYWxyZWFkeSBiZWVuIGRlY2xhcmVkJywKLSAgICAgICAgSWxsZWdhbENvbnRpbnVlOiAnSWxs
ZWdhbCBjb250aW51ZSBzdGF0ZW1lbnQnLAotICAgICAgICBJbGxlZ2FsQnJlYWs6ICdJbGxlZ2Fs
IGJyZWFrIHN0YXRlbWVudCcsCi0gICAgICAgIElsbGVnYWxSZXR1cm46ICdJbGxlZ2FsIHJldHVy
biBzdGF0ZW1lbnQnLAotICAgICAgICBTdHJpY3RNb2RlV2l0aDogJ1N0cmljdCBtb2RlIGNvZGUg
bWF5IG5vdCBpbmNsdWRlIGEgd2l0aCBzdGF0ZW1lbnQnLAotICAgICAgICBTdHJpY3RDYXRjaFZh
cmlhYmxlOiAnQ2F0Y2ggdmFyaWFibGUgbWF5IG5vdCBiZSBldmFsIG9yIGFyZ3VtZW50cyBpbiBz
dHJpY3QgbW9kZScsCi0gICAgICAgIFN0cmljdFZhck5hbWU6ICdWYXJpYWJsZSBuYW1lIG1heSBu
b3QgYmUgZXZhbCBvciBhcmd1bWVudHMgaW4gc3RyaWN0IG1vZGUnLAotICAgICAgICBTdHJpY3RQ
YXJhbU5hbWU6ICdQYXJhbWV0ZXIgbmFtZSBldmFsIG9yIGFyZ3VtZW50cyBpcyBub3QgYWxsb3dl
ZCBpbiBzdHJpY3QgbW9kZScsCi0gICAgICAgIFN0cmljdFBhcmFtRHVwZTogJ1N0cmljdCBtb2Rl
IGZ1bmN0aW9uIG1heSBub3QgaGF2ZSBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzJywKLSAgICAg
ICAgU3RyaWN0RnVuY3Rpb25OYW1lOiAnRnVuY3Rpb24gbmFtZSBtYXkgbm90IGJlIGV2YWwgb3Ig
YXJndW1lbnRzIGluIHN0cmljdCBtb2RlJywKLSAgICAgICAgU3RyaWN0T2N0YWxMaXRlcmFsOiAn
T2N0YWwgbGl0ZXJhbHMgYXJlIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlLicsCi0gICAgICAg
IFN0cmljdERlbGV0ZTogJ0RlbGV0ZSBvZiBhbiB1bnF1YWxpZmllZCBpZGVudGlmaWVyIGluIHN0
cmljdCBtb2RlLicsCi0gICAgICAgIFN0cmljdExIU0Fzc2lnbm1lbnQ6ICdBc3NpZ25tZW50IHRv
IGV2YWwgb3IgYXJndW1lbnRzIGlzIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlJywKLSAgICAg
ICAgU3RyaWN0TEhTUG9zdGZpeDogJ1Bvc3RmaXggaW5jcmVtZW50L2RlY3JlbWVudCBtYXkgbm90
IGhhdmUgZXZhbCBvciBhcmd1bWVudHMgb3BlcmFuZCBpbiBzdHJpY3QgbW9kZScsCi0gICAgICAg
IFN0cmljdExIU1ByZWZpeDogJ1ByZWZpeCBpbmNyZW1lbnQvZGVjcmVtZW50IG1heSBub3QgaGF2
ZSBldmFsIG9yIGFyZ3VtZW50cyBvcGVyYW5kIGluIHN0cmljdCBtb2RlJywKLSAgICAgICAgU3Ry
aWN0UmVzZXJ2ZWRXb3JkOiAnVXNlIG9mIGZ1dHVyZSByZXNlcnZlZCB3b3JkIGluIHN0cmljdCBt
b2RlJywKLSAgICAgICAgVGVtcGxhdGVPY3RhbExpdGVyYWw6ICdPY3RhbCBsaXRlcmFscyBhcmUg
bm90IGFsbG93ZWQgaW4gdGVtcGxhdGUgc3RyaW5ncy4nLAotICAgICAgICBQYXJhbWV0ZXJBZnRl
clJlc3RQYXJhbWV0ZXI6ICdSZXN0IHBhcmFtZXRlciBtdXN0IGJlIGxhc3QgZm9ybWFsIHBhcmFt
ZXRlcicsCi0gICAgICAgIERlZmF1bHRSZXN0UGFyYW1ldGVyOiAnVW5leHBlY3RlZCB0b2tlbiA9
JywKLSAgICAgICAgT2JqZWN0UGF0dGVybkFzUmVzdFBhcmFtZXRlcjogJ1VuZXhwZWN0ZWQgdG9r
ZW4geycsCi0gICAgICAgIER1cGxpY2F0ZVByb3RvUHJvcGVydHk6ICdEdXBsaWNhdGUgX19wcm90
b19fIGZpZWxkcyBhcmUgbm90IGFsbG93ZWQgaW4gb2JqZWN0IGxpdGVyYWxzJywKLSAgICAgICAg
Q29uc3RydWN0b3JTcGVjaWFsTWV0aG9kOiAnQ2xhc3MgY29uc3RydWN0b3IgbWF5IG5vdCBiZSBh
biBhY2Nlc3NvcicsCi0gICAgICAgIER1cGxpY2F0ZUNvbnN0cnVjdG9yOiAnQSBjbGFzcyBtYXkg
b25seSBoYXZlIG9uZSBjb25zdHJ1Y3RvcicsCi0gICAgICAgIFN0YXRpY1Byb3RvdHlwZTogJ0Ns
YXNzZXMgbWF5IG5vdCBoYXZlIHN0YXRpYyBwcm9wZXJ0eSBuYW1lZCBwcm90b3R5cGUnLAotICAg
ICAgICBNaXNzaW5nRnJvbUNsYXVzZTogJ1VuZXhwZWN0ZWQgdG9rZW4nLAotICAgICAgICBOb0Fz
QWZ0ZXJJbXBvcnROYW1lc3BhY2U6ICdVbmV4cGVjdGVkIHRva2VuJywKLSAgICAgICAgSW52YWxp
ZE1vZHVsZVNwZWNpZmllcjogJ1VuZXhwZWN0ZWQgdG9rZW4nLAotICAgICAgICBJbGxlZ2FsSW1w
b3J0RGVjbGFyYXRpb246ICdVbmV4cGVjdGVkIHRva2VuJywKLSAgICAgICAgSWxsZWdhbEV4cG9y
dERlY2xhcmF0aW9uOiAnVW5leHBlY3RlZCB0b2tlbicsCi0gICAgICAgIER1cGxpY2F0ZUJpbmRp
bmc6ICdEdXBsaWNhdGUgYmluZGluZyAlMCcKLSAgICB9OwotCi0gICAgLy8gU2VlIGFsc28gdG9v
bHMvZ2VuZXJhdGUtdW5pY29kZS1yZWdleC5qcy4KLSAgICBSZWdleCA9IHsKLSAgICAgICAgLy8g
RUNNQVNjcmlwdCA2L1VuaWNvZGUgdjcuMC4wIE5vbkFzY2lpSWRlbnRpZmllclN0YXJ0OgotICAg
ICAgICBOb25Bc2NpaUlkZW50aWZpZXJTdGFydDogL1tceEFBXHhCNVx4QkFceEMwLVx4RDZceEQ4
LVx4RjZceEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUw
MzcwLVx1MDM3NFx1MDM3Nlx1MDM3N1x1MDM3QS1cdTAzN0RcdTAzN0ZcdTAzODZcdTAzODgtXHUw
MzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVcdTAzRjctXHUwNDgxXHUwNDhBLVx1
MDUyRlx1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNUQwLVx1MDVFQVx1MDVGMC1c
dTA1RjJcdTA2MjAtXHUwNjRBXHUwNjZFXHUwNjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1
MDZFNlx1MDZFRVx1MDZFRlx1MDZGQS1cdTA2RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUw
NzRELVx1MDdBNVx1MDdCMVx1MDdDQS1cdTA3RUFcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUw
ODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQwLVx1MDg1OFx1MDhBMC1cdTA4QjJcdTA5MDQtXHUw
OTM5XHUwOTNEXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk3MS1cdTA5ODBcdTA5ODUtXHUwOThDXHUw
OThGXHUwOTkwXHUwOTkzLVx1MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJcdTA5QjYtXHUwOUI5XHUw
OUJEXHUwOUNFXHUwOURDXHUwOUREXHUwOURGLVx1MDlFMVx1MDlGMFx1MDlGMVx1MEEwNS1cdTBB
MEFcdTBBMEZcdTBBMTBcdTBBMTMtXHUwQTI4XHUwQTJBLVx1MEEzMFx1MEEzMlx1MEEzM1x1MEEz
NVx1MEEzNlx1MEEzOFx1MEEzOVx1MEE1OS1cdTBBNUNcdTBBNUVcdTBBNzItXHUwQTc0XHUwQTg1
LVx1MEE4RFx1MEE4Ri1cdTBBOTFcdTBBOTMtXHUwQUE4XHUwQUFBLVx1MEFCMFx1MEFCMlx1MEFC
M1x1MEFCNS1cdTBBQjlcdTBBQkRcdTBBRDBcdTBBRTBcdTBBRTFcdTBCMDUtXHUwQjBDXHUwQjBG
XHUwQjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1cdTBCMzBcdTBCMzJcdTBCMzNcdTBCMzUtXHUwQjM5
XHUwQjNEXHUwQjVDXHUwQjVEXHUwQjVGLVx1MEI2MVx1MEI3MVx1MEI4M1x1MEI4NS1cdTBCOEFc
dTBCOEUtXHUwQjkwXHUwQjkyLVx1MEI5NVx1MEI5OVx1MEI5QVx1MEI5Q1x1MEI5RVx1MEI5Rlx1
MEJBM1x1MEJBNFx1MEJBOC1cdTBCQUFcdTBCQUUtXHUwQkI5XHUwQkQwXHUwQzA1LVx1MEMwQ1x1
MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1MEMzOVx1MEMzRFx1MEM1OFx1MEM1OVx1
MEM2MFx1MEM2MVx1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1c
dTBDQjNcdTBDQjUtXHUwQ0I5XHUwQ0JEXHUwQ0RFXHUwQ0UwXHUwQ0UxXHUwQ0YxXHUwQ0YyXHUw
RDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBcdTBEMTItXHUwRDNBXHUwRDNEXHUwRDRFXHUwRDYwXHUw
RDYxXHUwRDdBLVx1MEQ3Rlx1MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXHUwREIzLVx1MERCQlx1
MERCRFx1MERDMC1cdTBEQzZcdTBFMDEtXHUwRTMwXHUwRTMyXHUwRTMzXHUwRTQwLVx1MEU0Nlx1
MEU4MVx1MEU4Mlx1MEU4NFx1MEU4N1x1MEU4OFx1MEU4QVx1MEU4RFx1MEU5NC1cdTBFOTdcdTBF
OTktXHUwRTlGXHUwRUExLVx1MEVBM1x1MEVBNVx1MEVBN1x1MEVBQVx1MEVBQlx1MEVBRC1cdTBF
QjBcdTBFQjJcdTBFQjNcdTBFQkRcdTBFQzAtXHUwRUM0XHUwRUM2XHUwRURDLVx1MEVERlx1MEYw
MFx1MEY0MC1cdTBGNDdcdTBGNDktXHUwRjZDXHUwRjg4LVx1MEY4Q1x1MTAwMC1cdTEwMkFcdTEw
M0ZcdTEwNTAtXHUxMDU1XHUxMDVBLVx1MTA1RFx1MTA2MVx1MTA2NVx1MTA2Nlx1MTA2RS1cdTEw
NzBcdTEwNzUtXHUxMDgxXHUxMDhFXHUxMEEwLVx1MTBDNVx1MTBDN1x1MTBDRFx1MTBEMC1cdTEw
RkFcdTEwRkMtXHUxMjQ4XHUxMjRBLVx1MTI0RFx1MTI1MC1cdTEyNTZcdTEyNThcdTEyNUEtXHUx
MjVEXHUxMjYwLVx1MTI4OFx1MTI4QS1cdTEyOERcdTEyOTAtXHUxMkIwXHUxMkIyLVx1MTJCNVx1
MTJCOC1cdTEyQkVcdTEyQzBcdTEyQzItXHUxMkM1XHUxMkM4LVx1MTJENlx1MTJEOC1cdTEzMTBc
dTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1QVx1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y0XHUxNDAx
LVx1MTY2Q1x1MTY2Ri1cdTE2N0ZcdTE2ODEtXHUxNjlBXHUxNkEwLVx1MTZFQVx1MTZFRS1cdTE2
RjhcdTE3MDAtXHUxNzBDXHUxNzBFLVx1MTcxMVx1MTcyMC1cdTE3MzFcdTE3NDAtXHUxNzUxXHUx
NzYwLVx1MTc2Q1x1MTc2RS1cdTE3NzBcdTE3ODAtXHUxN0IzXHUxN0Q3XHUxN0RDXHUxODIwLVx1
MTg3N1x1MTg4MC1cdTE4QThcdTE4QUFcdTE4QjAtXHUxOEY1XHUxOTAwLVx1MTkxRVx1MTk1MC1c
dTE5NkRcdTE5NzAtXHUxOTc0XHUxOTgwLVx1MTlBQlx1MTlDMS1cdTE5QzdcdTFBMDAtXHUxQTE2
XHUxQTIwLVx1MUE1NFx1MUFBN1x1MUIwNS1cdTFCMzNcdTFCNDUtXHUxQjRCXHUxQjgzLVx1MUJB
MFx1MUJBRVx1MUJBRlx1MUJCQS1cdTFCRTVcdTFDMDAtXHUxQzIzXHUxQzRELVx1MUM0Rlx1MUM1
QS1cdTFDN0RcdTFDRTktXHUxQ0VDXHUxQ0VFLVx1MUNGMVx1MUNGNVx1MUNGNlx1MUQwMC1cdTFE
QkZcdTFFMDAtXHUxRjE1XHUxRjE4LVx1MUYxRFx1MUYyMC1cdTFGNDVcdTFGNDgtXHUxRjREXHUx
RjUwLVx1MUY1N1x1MUY1OVx1MUY1Qlx1MUY1RFx1MUY1Ri1cdTFGN0RcdTFGODAtXHUxRkI0XHUx
RkI2LVx1MUZCQ1x1MUZCRVx1MUZDMi1cdTFGQzRcdTFGQzYtXHUxRkNDXHUxRkQwLVx1MUZEM1x1
MUZENi1cdTFGREJcdTFGRTAtXHUxRkVDXHUxRkYyLVx1MUZGNFx1MUZGNi1cdTFGRkNcdTIwNzFc
dTIwN0ZcdTIwOTAtXHUyMDlDXHUyMTAyXHUyMTA3XHUyMTBBLVx1MjExM1x1MjExNVx1MjExOC1c
dTIxMURcdTIxMjRcdTIxMjZcdTIxMjhcdTIxMkEtXHUyMTM5XHUyMTNDLVx1MjEzRlx1MjE0NS1c
dTIxNDlcdTIxNEVcdTIxNjAtXHUyMTg4XHUyQzAwLVx1MkMyRVx1MkMzMC1cdTJDNUVcdTJDNjAt
XHUyQ0U0XHUyQ0VCLVx1MkNFRVx1MkNGMlx1MkNGM1x1MkQwMC1cdTJEMjVcdTJEMjdcdTJEMkRc
dTJEMzAtXHUyRDY3XHUyRDZGXHUyRDgwLVx1MkQ5Nlx1MkRBMC1cdTJEQTZcdTJEQTgtXHUyREFF
XHUyREIwLVx1MkRCNlx1MkRCOC1cdTJEQkVcdTJEQzAtXHUyREM2XHUyREM4LVx1MkRDRVx1MkRE
MC1cdTJERDZcdTJERDgtXHUyRERFXHUzMDA1LVx1MzAwN1x1MzAyMS1cdTMwMjlcdTMwMzEtXHUz
MDM1XHUzMDM4LVx1MzAzQ1x1MzA0MS1cdTMwOTZcdTMwOUItXHUzMDlGXHUzMEExLVx1MzBGQVx1
MzBGQy1cdTMwRkZcdTMxMDUtXHUzMTJEXHUzMTMxLVx1MzE4RVx1MzFBMC1cdTMxQkFcdTMxRjAt
XHUzMUZGXHUzNDAwLVx1NERCNVx1NEUwMC1cdTlGQ0NcdUEwMDAtXHVBNDhDXHVBNEQwLVx1QTRG
RFx1QTUwMC1cdUE2MENcdUE2MTAtXHVBNjFGXHVBNjJBXHVBNjJCXHVBNjQwLVx1QTY2RVx1QTY3
Ri1cdUE2OURcdUE2QTAtXHVBNkVGXHVBNzE3LVx1QTcxRlx1QTcyMi1cdUE3ODhcdUE3OEItXHVB
NzhFXHVBNzkwLVx1QTdBRFx1QTdCMFx1QTdCMVx1QTdGNy1cdUE4MDFcdUE4MDMtXHVBODA1XHVB
ODA3LVx1QTgwQVx1QTgwQy1cdUE4MjJcdUE4NDAtXHVBODczXHVBODgyLVx1QThCM1x1QThGMi1c
dUE4RjdcdUE4RkJcdUE5MEEtXHVBOTI1XHVBOTMwLVx1QTk0Nlx1QTk2MC1cdUE5N0NcdUE5ODQt
XHVBOUIyXHVBOUNGXHVBOUUwLVx1QTlFNFx1QTlFNi1cdUE5RUZcdUE5RkEtXHVBOUZFXHVBQTAw
LVx1QUEyOFx1QUE0MC1cdUFBNDJcdUFBNDQtXHVBQTRCXHVBQTYwLVx1QUE3Nlx1QUE3QVx1QUE3
RS1cdUFBQUZcdUFBQjFcdUFBQjVcdUFBQjZcdUFBQjktXHVBQUJEXHVBQUMwXHVBQUMyXHVBQURC
LVx1QUFERFx1QUFFMC1cdUFBRUFcdUFBRjItXHVBQUY0XHVBQjAxLVx1QUIwNlx1QUIwOS1cdUFC
MEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIyOC1cdUFCMkVcdUFCMzAtXHVBQjVBXHVB
QjVDLVx1QUI1Rlx1QUI2NFx1QUI2NVx1QUJDMC1cdUFCRTJcdUFDMDAtXHVEN0EzXHVEN0IwLVx1
RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZc
dUZCMTMtXHVGQjE3XHVGQjFEXHVGQjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZcdUZCMzgtXHVGQjND
XHVGQjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0Rc
dUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0XHVGRTc2
LVx1RkVGQ1x1RkYyMS1cdUZGM0FcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZG
QzdcdUZGQ0EtXHVGRkNGXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdfFx1RDgwMFtcdURDMDAt
XHVEQzBCXHVEQzBELVx1REMyNlx1REMyOC1cdURDM0FcdURDM0NcdURDM0RcdURDM0YtXHVEQzRE
XHVEQzUwLVx1REM1RFx1REM4MC1cdURDRkFcdURENDAtXHVERDc0XHVERTgwLVx1REU5Q1x1REVB
MC1cdURFRDBcdURGMDAtXHVERjFGXHVERjMwLVx1REY0QVx1REY1MC1cdURGNzVcdURGODAtXHVE
RjlEXHVERkEwLVx1REZDM1x1REZDOC1cdURGQ0ZcdURGRDEtXHVERkQ1XXxcdUQ4MDFbXHVEQzAw
LVx1REM5RFx1REQwMC1cdUREMjdcdUREMzAtXHVERDYzXHVERTAwLVx1REYzNlx1REY0MC1cdURG
NTVcdURGNjAtXHVERjY3XXxcdUQ4MDJbXHVEQzAwLVx1REMwNVx1REMwOFx1REMwQS1cdURDMzVc
dURDMzdcdURDMzhcdURDM0NcdURDM0YtXHVEQzU1XHVEQzYwLVx1REM3Nlx1REM4MC1cdURDOUVc
dUREMDAtXHVERDE1XHVERDIwLVx1REQzOVx1REQ4MC1cdUREQjdcdUREQkVcdUREQkZcdURFMDBc
dURFMTAtXHVERTEzXHVERTE1LVx1REUxN1x1REUxOS1cdURFMzNcdURFNjAtXHVERTdDXHVERTgw
LVx1REU5Q1x1REVDMC1cdURFQzdcdURFQzktXHVERUU0XHVERjAwLVx1REYzNVx1REY0MC1cdURG
NTVcdURGNjAtXHVERjcyXHVERjgwLVx1REY5MV18XHVEODAzW1x1REMwMC1cdURDNDhdfFx1RDgw
NFtcdURDMDMtXHVEQzM3XHVEQzgzLVx1RENBRlx1RENEMC1cdURDRThcdUREMDMtXHVERDI2XHVE
RDUwLVx1REQ3Mlx1REQ3Nlx1REQ4My1cdUREQjJcdUREQzEtXHVEREM0XHVERERBXHVERTAwLVx1
REUxMVx1REUxMy1cdURFMkJcdURFQjAtXHVERURFXHVERjA1LVx1REYwQ1x1REYwRlx1REYxMFx1
REYxMy1cdURGMjhcdURGMkEtXHVERjMwXHVERjMyXHVERjMzXHVERjM1LVx1REYzOVx1REYzRFx1
REY1RC1cdURGNjFdfFx1RDgwNVtcdURDODAtXHVEQ0FGXHVEQ0M0XHVEQ0M1XHVEQ0M3XHVERDgw
LVx1RERBRVx1REUwMC1cdURFMkZcdURFNDRcdURFODAtXHVERUFBXXxcdUQ4MDZbXHVEQ0EwLVx1
RENERlx1RENGRlx1REVDMC1cdURFRjhdfFx1RDgwOFtcdURDMDAtXHVERjk4XXxcdUQ4MDlbXHVE
QzAwLVx1REM2RV18W1x1RDgwQ1x1RDg0MC1cdUQ4NjhcdUQ4NkEtXHVEODZDXVtcdURDMDAtXHVE
RkZGXXxcdUQ4MERbXHVEQzAwLVx1REMyRV18XHVEODFBW1x1REMwMC1cdURFMzhcdURFNDAtXHVE
RTVFXHVERUQwLVx1REVFRFx1REYwMC1cdURGMkZcdURGNDAtXHVERjQzXHVERjYzLVx1REY3N1x1
REY3RC1cdURGOEZdfFx1RDgxQltcdURGMDAtXHVERjQ0XHVERjUwXHVERjkzLVx1REY5Rl18XHVE
ODJDW1x1REMwMFx1REMwMV18XHVEODJGW1x1REMwMC1cdURDNkFcdURDNzAtXHVEQzdDXHVEQzgw
LVx1REM4OFx1REM5MC1cdURDOTldfFx1RDgzNVtcdURDMDAtXHVEQzU0XHVEQzU2LVx1REM5Q1x1
REM5RVx1REM5Rlx1RENBMlx1RENBNVx1RENBNlx1RENBOS1cdURDQUNcdURDQUUtXHVEQ0I5XHVE
Q0JCXHVEQ0JELVx1RENDM1x1RENDNS1cdUREMDVcdUREMDctXHVERDBBXHVERDBELVx1REQxNFx1
REQxNi1cdUREMUNcdUREMUUtXHVERDM5XHVERDNCLVx1REQzRVx1REQ0MC1cdURENDRcdURENDZc
dURENEEtXHVERDUwXHVERDUyLVx1REVBNVx1REVBOC1cdURFQzBcdURFQzItXHVERURBXHVERURD
LVx1REVGQVx1REVGQy1cdURGMTRcdURGMTYtXHVERjM0XHVERjM2LVx1REY0RVx1REY1MC1cdURG
NkVcdURGNzAtXHVERjg4XHVERjhBLVx1REZBOFx1REZBQS1cdURGQzJcdURGQzQtXHVERkNCXXxc
dUQ4M0FbXHVEQzAwLVx1RENDNF18XHVEODNCW1x1REUwMC1cdURFMDNcdURFMDUtXHVERTFGXHVE
RTIxXHVERTIyXHVERTI0XHVERTI3XHVERTI5LVx1REUzMlx1REUzNC1cdURFMzdcdURFMzlcdURF
M0JcdURFNDJcdURFNDdcdURFNDlcdURFNEJcdURFNEQtXHVERTRGXHVERTUxXHVERTUyXHVERTU0
XHVERTU3XHVERTU5XHVERTVCXHVERTVEXHVERTVGXHVERTYxXHVERTYyXHVERTY0XHVERTY3LVx1
REU2QVx1REU2Qy1cdURFNzJcdURFNzQtXHVERTc3XHVERTc5LVx1REU3Q1x1REU3RVx1REU4MC1c
dURFODlcdURFOEItXHVERTlCXHVERUExLVx1REVBM1x1REVBNS1cdURFQTlcdURFQUItXHVERUJC
XXxcdUQ4NjlbXHVEQzAwLVx1REVENlx1REYwMC1cdURGRkZdfFx1RDg2RFtcdURDMDAtXHVERjM0
XHVERjQwLVx1REZGRl18XHVEODZFW1x1REMwMC1cdURDMURdfFx1RDg3RVtcdURDMDAtXHVERTFE
XS8sCi0KLSAgICAgICAgLy8gRUNNQVNjcmlwdCA2L1VuaWNvZGUgdjcuMC4wIE5vbkFzY2lpSWRl
bnRpZmllclBhcnQ6Ci0gICAgICAgIE5vbkFzY2lpSWRlbnRpZmllclBhcnQ6IC9bXHhBQVx4QjVc
eEI3XHhCQVx4QzAtXHhENlx4RDgtXHhGNlx4RjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1MDJFMC1c
dTAyRTRcdTAyRUNcdTAyRUVcdTAzMDAtXHUwMzc0XHUwMzc2XHUwMzc3XHUwMzdBLVx1MDM3RFx1
MDM3Rlx1MDM4Ni1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNGNVx1MDNGNy1c
dTA0ODFcdTA0ODMtXHUwNDg3XHUwNDhBLVx1MDUyRlx1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEt
XHUwNTg3XHUwNTkxLVx1MDVCRFx1MDVCRlx1MDVDMVx1MDVDMlx1MDVDNFx1MDVDNVx1MDVDN1x1
MDVEMC1cdTA1RUFcdTA1RjAtXHUwNUYyXHUwNjEwLVx1MDYxQVx1MDYyMC1cdTA2NjlcdTA2NkUt
XHUwNkQzXHUwNkQ1LVx1MDZEQ1x1MDZERi1cdTA2RThcdTA2RUEtXHUwNkZDXHUwNkZGXHUwNzEw
LVx1MDc0QVx1MDc0RC1cdTA3QjFcdTA3QzAtXHUwN0Y1XHUwN0ZBXHUwODAwLVx1MDgyRFx1MDg0
MC1cdTA4NUJcdTA4QTAtXHUwOEIyXHUwOEU0LVx1MDk2M1x1MDk2Ni1cdTA5NkZcdTA5NzEtXHUw
OTgzXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUw
OUIyXHUwOUI2LVx1MDlCOVx1MDlCQy1cdTA5QzRcdTA5QzdcdTA5QzhcdTA5Q0ItXHUwOUNFXHUw
OUQ3XHUwOURDXHUwOUREXHUwOURGLVx1MDlFM1x1MDlFNi1cdTA5RjFcdTBBMDEtXHUwQTAzXHUw
QTA1LVx1MEEwQVx1MEEwRlx1MEExMFx1MEExMy1cdTBBMjhcdTBBMkEtXHUwQTMwXHUwQTMyXHUw
QTMzXHUwQTM1XHUwQTM2XHUwQTM4XHUwQTM5XHUwQTNDXHUwQTNFLVx1MEE0Mlx1MEE0N1x1MEE0
OFx1MEE0Qi1cdTBBNERcdTBBNTFcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTY2LVx1MEE3NVx1MEE4
MS1cdTBBODNcdTBBODUtXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThcdTBBQUEtXHUw
QUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCQy1cdTBBQzVcdTBBQzctXHUwQUM5XHUw
QUNCLVx1MEFDRFx1MEFEMFx1MEFFMC1cdTBBRTNcdTBBRTYtXHUwQUVGXHUwQjAxLVx1MEIwM1x1
MEIwNS1cdTBCMENcdTBCMEZcdTBCMTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1MEIzMlx1
MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0MtXHUwQjQ0XHUwQjQ3XHUwQjQ4XHUwQjRCLVx1MEI0RFx1
MEI1Nlx1MEI1N1x1MEI1Q1x1MEI1RFx1MEI1Ri1cdTBCNjNcdTBCNjYtXHUwQjZGXHUwQjcxXHUw
QjgyXHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XHUw
QjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBC
QjlcdTBCQkUtXHUwQkMyXHUwQkM2LVx1MEJDOFx1MEJDQS1cdTBCQ0RcdTBCRDBcdTBCRDdcdTBC
RTYtXHUwQkVGXHUwQzAwLVx1MEMwM1x1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1
MEMyOFx1MEMyQS1cdTBDMzlcdTBDM0QtXHUwQzQ0XHUwQzQ2LVx1MEM0OFx1MEM0QS1cdTBDNERc
dTBDNTVcdTBDNTZcdTBDNThcdTBDNTlcdTBDNjAtXHUwQzYzXHUwQzY2LVx1MEM2Rlx1MEM4MS1c
dTBDODNcdTBDODUtXHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEtXHUwQ0Iz
XHUwQ0I1LVx1MENCOVx1MENCQy1cdTBDQzRcdTBDQzYtXHUwQ0M4XHUwQ0NBLVx1MENDRFx1MENE
NVx1MENENlx1MENERVx1MENFMC1cdTBDRTNcdTBDRTYtXHUwQ0VGXHUwQ0YxXHUwQ0YyXHUwRDAx
LVx1MEQwM1x1MEQwNS1cdTBEMENcdTBEMEUtXHUwRDEwXHUwRDEyLVx1MEQzQVx1MEQzRC1cdTBE
NDRcdTBENDYtXHUwRDQ4XHUwRDRBLVx1MEQ0RVx1MEQ1N1x1MEQ2MC1cdTBENjNcdTBENjYtXHUw
RDZGXHUwRDdBLVx1MEQ3Rlx1MEQ4Mlx1MEQ4M1x1MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXHUw
REIzLVx1MERCQlx1MERCRFx1MERDMC1cdTBEQzZcdTBEQ0FcdTBEQ0YtXHUwREQ0XHUwREQ2XHUw
REQ4LVx1MERERlx1MERFNi1cdTBERUZcdTBERjJcdTBERjNcdTBFMDEtXHUwRTNBXHUwRTQwLVx1
MEU0RVx1MEU1MC1cdTBFNTlcdTBFODFcdTBFODJcdTBFODRcdTBFODdcdTBFODhcdTBFOEFcdTBF
OERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVBMS1cdTBFQTNcdTBFQTVcdTBFQTdcdTBF
QUFcdTBFQUJcdTBFQUQtXHUwRUI5XHUwRUJCLVx1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZcdTBF
QzgtXHUwRUNEXHUwRUQwLVx1MEVEOVx1MEVEQy1cdTBFREZcdTBGMDBcdTBGMThcdTBGMTlcdTBG
MjAtXHUwRjI5XHUwRjM1XHUwRjM3XHUwRjM5XHUwRjNFLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBG
NzEtXHUwRjg0XHUwRjg2LVx1MEY5N1x1MEY5OS1cdTBGQkNcdTBGQzZcdTEwMDAtXHUxMDQ5XHUx
MDUwLVx1MTA5RFx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZDLVx1
MTI0OFx1MTI0QS1cdTEyNERcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2MC1c
dTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMFx1MTJCMi1cdTEyQjVcdTEyQjgtXHUxMkJF
XHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEwXHUxMzEyLVx1MTMx
NVx1MTMxOC1cdTEzNUFcdTEzNUQtXHUxMzVGXHUxMzY5LVx1MTM3MVx1MTM4MC1cdTEzOEZcdTEz
QTAtXHUxM0Y0XHUxNDAxLVx1MTY2Q1x1MTY2Ri1cdTE2N0ZcdTE2ODEtXHUxNjlBXHUxNkEwLVx1
MTZFQVx1MTZFRS1cdTE2RjhcdTE3MDAtXHUxNzBDXHUxNzBFLVx1MTcxNFx1MTcyMC1cdTE3MzRc
dTE3NDAtXHUxNzUzXHUxNzYwLVx1MTc2Q1x1MTc2RS1cdTE3NzBcdTE3NzJcdTE3NzNcdTE3ODAt
XHUxN0QzXHUxN0Q3XHUxN0RDXHUxN0REXHUxN0UwLVx1MTdFOVx1MTgwQi1cdTE4MERcdTE4MTAt
XHUxODE5XHUxODIwLVx1MTg3N1x1MTg4MC1cdTE4QUFcdTE4QjAtXHUxOEY1XHUxOTAwLVx1MTkx
RVx1MTkyMC1cdTE5MkJcdTE5MzAtXHUxOTNCXHUxOTQ2LVx1MTk2RFx1MTk3MC1cdTE5NzRcdTE5
ODAtXHUxOUFCXHUxOUIwLVx1MTlDOVx1MTlEMC1cdTE5REFcdTFBMDAtXHUxQTFCXHUxQTIwLVx1
MUE1RVx1MUE2MC1cdTFBN0NcdTFBN0YtXHUxQTg5XHUxQTkwLVx1MUE5OVx1MUFBN1x1MUFCMC1c
dTFBQkRcdTFCMDAtXHUxQjRCXHUxQjUwLVx1MUI1OVx1MUI2Qi1cdTFCNzNcdTFCODAtXHUxQkYz
XHUxQzAwLVx1MUMzN1x1MUM0MC1cdTFDNDlcdTFDNEQtXHUxQzdEXHUxQ0QwLVx1MUNEMlx1MUNE
NC1cdTFDRjZcdTFDRjhcdTFDRjlcdTFEMDAtXHUxREY1XHUxREZDLVx1MUYxNVx1MUYxOC1cdTFG
MURcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFG
NURcdTFGNUYtXHUxRjdEXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUx
RkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1
MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDBDXHUyMDBEXHUyMDNGXHUyMDQwXHUyMDU0XHUy
MDcxXHUyMDdGXHUyMDkwLVx1MjA5Q1x1MjBEMC1cdTIwRENcdTIwRTFcdTIwRTUtXHUyMEYwXHUy
MTAyXHUyMTA3XHUyMTBBLVx1MjExM1x1MjExNVx1MjExOC1cdTIxMURcdTIxMjRcdTIxMjZcdTIx
MjhcdTIxMkEtXHUyMTM5XHUyMTNDLVx1MjEzRlx1MjE0NS1cdTIxNDlcdTIxNEVcdTIxNjAtXHUy
MTg4XHUyQzAwLVx1MkMyRVx1MkMzMC1cdTJDNUVcdTJDNjAtXHUyQ0U0XHUyQ0VCLVx1MkNGM1x1
MkQwMC1cdTJEMjVcdTJEMjdcdTJEMkRcdTJEMzAtXHUyRDY3XHUyRDZGXHUyRDdGLVx1MkQ5Nlx1
MkRBMC1cdTJEQTZcdTJEQTgtXHUyREFFXHUyREIwLVx1MkRCNlx1MkRCOC1cdTJEQkVcdTJEQzAt
XHUyREM2XHUyREM4LVx1MkRDRVx1MkREMC1cdTJERDZcdTJERDgtXHUyRERFXHUyREUwLVx1MkRG
Rlx1MzAwNS1cdTMwMDdcdTMwMjEtXHUzMDJGXHUzMDMxLVx1MzAzNVx1MzAzOC1cdTMwM0NcdTMw
NDEtXHUzMDk2XHUzMDk5LVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1
MzEyRFx1MzEzMS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1MzFGRlx1MzQwMC1cdTREQjVc
dTRFMDAtXHU5RkNDXHVBMDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRcdUE1MDAtXHVBNjBDXHVBNjEw
LVx1QTYyQlx1QTY0MC1cdUE2NkZcdUE2NzQtXHVBNjdEXHVBNjdGLVx1QTY5RFx1QTY5Ri1cdUE2
RjFcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OFx1QTc4Qi1cdUE3OEVcdUE3OTAtXHVBN0FEXHVB
N0IwXHVBN0IxXHVBN0Y3LVx1QTgyN1x1QTg0MC1cdUE4NzNcdUE4ODAtXHVBOEM0XHVBOEQwLVx1
QThEOVx1QThFMC1cdUE4RjdcdUE4RkJcdUE5MDAtXHVBOTJEXHVBOTMwLVx1QTk1M1x1QTk2MC1c
dUE5N0NcdUE5ODAtXHVBOUMwXHVBOUNGLVx1QTlEOVx1QTlFMC1cdUE5RkVcdUFBMDAtXHVBQTM2
XHVBQTQwLVx1QUE0RFx1QUE1MC1cdUFBNTlcdUFBNjAtXHVBQTc2XHVBQTdBLVx1QUFDMlx1QUFE
Qi1cdUFBRERcdUFBRTAtXHVBQUVGXHVBQUYyLVx1QUFGNlx1QUIwMS1cdUFCMDZcdUFCMDktXHVB
QjBFXHVBQjExLVx1QUIxNlx1QUIyMC1cdUFCMjZcdUFCMjgtXHVBQjJFXHVBQjMwLVx1QUI1QVx1
QUI1Qy1cdUFCNUZcdUFCNjRcdUFCNjVcdUFCQzAtXHVBQkVBXHVBQkVDXHVBQkVEXHVBQkYwLVx1
QUJGOVx1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRc
dUZBNzAtXHVGQUQ5XHVGQjAwLVx1RkIwNlx1RkIxMy1cdUZCMTdcdUZCMUQtXHVGQjI4XHVGQjJB
LVx1RkIzNlx1RkIzOC1cdUZCM0NcdUZCM0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYt
XHVGQkIxXHVGQkQzLVx1RkQzRFx1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRG
Qlx1RkUwMC1cdUZFMEZcdUZFMjAtXHVGRTJEXHVGRTMzXHVGRTM0XHVGRTRELVx1RkU0Rlx1RkU3
MC1cdUZFNzRcdUZFNzYtXHVGRUZDXHVGRjEwLVx1RkYxOVx1RkYyMS1cdUZGM0FcdUZGM0ZcdUZG
NDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXHVGRkQyLVx1
RkZEN1x1RkZEQS1cdUZGRENdfFx1RDgwMFtcdURDMDAtXHVEQzBCXHVEQzBELVx1REMyNlx1REMy
OC1cdURDM0FcdURDM0NcdURDM0RcdURDM0YtXHVEQzREXHVEQzUwLVx1REM1RFx1REM4MC1cdURD
RkFcdURENDAtXHVERDc0XHVEREZEXHVERTgwLVx1REU5Q1x1REVBMC1cdURFRDBcdURFRTBcdURG
MDAtXHVERjFGXHVERjMwLVx1REY0QVx1REY1MC1cdURGN0FcdURGODAtXHVERjlEXHVERkEwLVx1
REZDM1x1REZDOC1cdURGQ0ZcdURGRDEtXHVERkQ1XXxcdUQ4MDFbXHVEQzAwLVx1REM5RFx1RENB
MC1cdURDQTlcdUREMDAtXHVERDI3XHVERDMwLVx1REQ2M1x1REUwMC1cdURGMzZcdURGNDAtXHVE
RjU1XHVERjYwLVx1REY2N118XHVEODAyW1x1REMwMC1cdURDMDVcdURDMDhcdURDMEEtXHVEQzM1
XHVEQzM3XHVEQzM4XHVEQzNDXHVEQzNGLVx1REM1NVx1REM2MC1cdURDNzZcdURDODAtXHVEQzlF
XHVERDAwLVx1REQxNVx1REQyMC1cdUREMzlcdUREODAtXHVEREI3XHVEREJFXHVEREJGXHVERTAw
LVx1REUwM1x1REUwNVx1REUwNlx1REUwQy1cdURFMTNcdURFMTUtXHVERTE3XHVERTE5LVx1REUz
M1x1REUzOC1cdURFM0FcdURFM0ZcdURFNjAtXHVERTdDXHVERTgwLVx1REU5Q1x1REVDMC1cdURF
QzdcdURFQzktXHVERUU2XHVERjAwLVx1REYzNVx1REY0MC1cdURGNTVcdURGNjAtXHVERjcyXHVE
RjgwLVx1REY5MV18XHVEODAzW1x1REMwMC1cdURDNDhdfFx1RDgwNFtcdURDMDAtXHVEQzQ2XHVE
QzY2LVx1REM2Rlx1REM3Ri1cdURDQkFcdURDRDAtXHVEQ0U4XHVEQ0YwLVx1RENGOVx1REQwMC1c
dUREMzRcdUREMzYtXHVERDNGXHVERDUwLVx1REQ3M1x1REQ3Nlx1REQ4MC1cdUREQzRcdURERDAt
XHVERERBXHVERTAwLVx1REUxMVx1REUxMy1cdURFMzdcdURFQjAtXHVERUVBXHVERUYwLVx1REVG
OVx1REYwMS1cdURGMDNcdURGMDUtXHVERjBDXHVERjBGXHVERjEwXHVERjEzLVx1REYyOFx1REYy
QS1cdURGMzBcdURGMzJcdURGMzNcdURGMzUtXHVERjM5XHVERjNDLVx1REY0NFx1REY0N1x1REY0
OFx1REY0Qi1cdURGNERcdURGNTdcdURGNUQtXHVERjYzXHVERjY2LVx1REY2Q1x1REY3MC1cdURG
NzRdfFx1RDgwNVtcdURDODAtXHVEQ0M1XHVEQ0M3XHVEQ0QwLVx1RENEOVx1REQ4MC1cdUREQjVc
dUREQjgtXHVEREMwXHVERTAwLVx1REU0MFx1REU0NFx1REU1MC1cdURFNTlcdURFODAtXHVERUI3
XHVERUMwLVx1REVDOV18XHVEODA2W1x1RENBMC1cdURDRTlcdURDRkZcdURFQzAtXHVERUY4XXxc
dUQ4MDhbXHVEQzAwLVx1REY5OF18XHVEODA5W1x1REMwMC1cdURDNkVdfFtcdUQ4MENcdUQ4NDAt
XHVEODY4XHVEODZBLVx1RDg2Q11bXHVEQzAwLVx1REZGRl18XHVEODBEW1x1REMwMC1cdURDMkVd
fFx1RDgxQVtcdURDMDAtXHVERTM4XHVERTQwLVx1REU1RVx1REU2MC1cdURFNjlcdURFRDAtXHVE
RUVEXHVERUYwLVx1REVGNFx1REYwMC1cdURGMzZcdURGNDAtXHVERjQzXHVERjUwLVx1REY1OVx1
REY2My1cdURGNzdcdURGN0QtXHVERjhGXXxcdUQ4MUJbXHVERjAwLVx1REY0NFx1REY1MC1cdURG
N0VcdURGOEYtXHVERjlGXXxcdUQ4MkNbXHVEQzAwXHVEQzAxXXxcdUQ4MkZbXHVEQzAwLVx1REM2
QVx1REM3MC1cdURDN0NcdURDODAtXHVEQzg4XHVEQzkwLVx1REM5OVx1REM5RFx1REM5RV18XHVE
ODM0W1x1REQ2NS1cdURENjlcdURENkQtXHVERDcyXHVERDdCLVx1REQ4Mlx1REQ4NS1cdUREOEJc
dUREQUEtXHVEREFEXHVERTQyLVx1REU0NF18XHVEODM1W1x1REMwMC1cdURDNTRcdURDNTYtXHVE
QzlDXHVEQzlFXHVEQzlGXHVEQ0EyXHVEQ0E1XHVEQ0E2XHVEQ0E5LVx1RENBQ1x1RENBRS1cdURD
QjlcdURDQkJcdURDQkQtXHVEQ0MzXHVEQ0M1LVx1REQwNVx1REQwNy1cdUREMEFcdUREMEQtXHVE
RDE0XHVERDE2LVx1REQxQ1x1REQxRS1cdUREMzlcdUREM0ItXHVERDNFXHVERDQwLVx1REQ0NFx1
REQ0Nlx1REQ0QS1cdURENTBcdURENTItXHVERUE1XHVERUE4LVx1REVDMFx1REVDMi1cdURFREFc
dURFREMtXHVERUZBXHVERUZDLVx1REYxNFx1REYxNi1cdURGMzRcdURGMzYtXHVERjRFXHVERjUw
LVx1REY2RVx1REY3MC1cdURGODhcdURGOEEtXHVERkE4XHVERkFBLVx1REZDMlx1REZDNC1cdURG
Q0JcdURGQ0UtXHVERkZGXXxcdUQ4M0FbXHVEQzAwLVx1RENDNFx1RENEMC1cdURDRDZdfFx1RDgz
QltcdURFMDAtXHVERTAzXHVERTA1LVx1REUxRlx1REUyMVx1REUyMlx1REUyNFx1REUyN1x1REUy
OS1cdURFMzJcdURFMzQtXHVERTM3XHVERTM5XHVERTNCXHVERTQyXHVERTQ3XHVERTQ5XHVERTRC
XHVERTRELVx1REU0Rlx1REU1MVx1REU1Mlx1REU1NFx1REU1N1x1REU1OVx1REU1Qlx1REU1RFx1
REU1Rlx1REU2MVx1REU2Mlx1REU2NFx1REU2Ny1cdURFNkFcdURFNkMtXHVERTcyXHVERTc0LVx1
REU3N1x1REU3OS1cdURFN0NcdURFN0VcdURFODAtXHVERTg5XHVERThCLVx1REU5Qlx1REVBMS1c
dURFQTNcdURFQTUtXHVERUE5XHVERUFCLVx1REVCQl18XHVEODY5W1x1REMwMC1cdURFRDZcdURG
MDAtXHVERkZGXXxcdUQ4NkRbXHVEQzAwLVx1REYzNFx1REY0MC1cdURGRkZdfFx1RDg2RVtcdURD
MDAtXHVEQzFEXXxcdUQ4N0VbXHVEQzAwLVx1REUxRF18XHVEQjQwW1x1REQwMC1cdURERUZdLwot
ICAgIH07Ci0KLSAgICAvLyBFbnN1cmUgdGhlIGNvbmRpdGlvbiBpcyB0cnVlLCBvdGhlcndpc2Ug
dGhyb3cgYW4gZXJyb3IuCi0gICAgLy8gVGhpcyBpcyBvbmx5IHRvIGhhdmUgYSBiZXR0ZXIgY29u
dHJhY3Qgc2VtYW50aWMsIGkuZS4gYW5vdGhlciBzYWZldHkgbmV0Ci0gICAgLy8gdG8gY2F0Y2gg
YSBsb2dpYyBlcnJvci4gVGhlIGNvbmRpdGlvbiBzaGFsbCBiZSBmdWxmaWxsZWQgaW4gbm9ybWFs
IGNhc2UuCi0gICAgLy8gRG8gTk9UIHVzZSB0aGlzIHRvIGVuZm9yY2UgYSBjZXJ0YWluIGNvbmRp
dGlvbiBvbiBhbnkgdXNlciBpbnB1dC4KLQotICAgIGZ1bmN0aW9uIGFzc2VydChjb25kaXRpb24s
IG1lc3NhZ2UpIHsKLSAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovCi0gICAgICAgIGlm
ICghY29uZGl0aW9uKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FTU0VSVDogJyAr
IG1lc3NhZ2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gaXNEZWNpbWFsRGln
aXQoY2gpIHsKLSAgICAgICAgcmV0dXJuIChjaCA+PSAweDMwICYmIGNoIDw9IDB4MzkpOyAgIC8v
IDAuLjkKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBpc0hleERpZ2l0KGNoKSB7Ci0gICAgICAgIHJl
dHVybiAnMDEyMzQ1Njc4OWFiY2RlZkFCQ0RFRicuaW5kZXhPZihjaCkgPj0gMDsKLSAgICB9Ci0K
LSAgICBmdW5jdGlvbiBpc09jdGFsRGlnaXQoY2gpIHsKLSAgICAgICAgcmV0dXJuICcwMTIzNDU2
NycuaW5kZXhPZihjaCkgPj0gMDsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBvY3RhbFRvRGVjaW1h
bChjaCkgewotICAgICAgICAvLyBcMCBpcyBub3Qgb2N0YWwgZXNjYXBlIHNlcXVlbmNlCi0gICAg
ICAgIHZhciBvY3RhbCA9IChjaCAhPT0gJzAnKSwgY29kZSA9ICcwMTIzNDU2NycuaW5kZXhPZihj
aCk7Ci0KLSAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIGlzT2N0YWxEaWdpdChzb3VyY2Vb
aW5kZXhdKSkgewotICAgICAgICAgICAgb2N0YWwgPSB0cnVlOwotICAgICAgICAgICAgY29kZSA9
IGNvZGUgKiA4ICsgJzAxMjM0NTY3Jy5pbmRleE9mKHNvdXJjZVtpbmRleCsrXSk7Ci0KLSAgICAg
ICAgICAgIC8vIDMgZGlnaXRzIGFyZSBvbmx5IGFsbG93ZWQgd2hlbiBzdHJpbmcgc3RhcnRzCi0g
ICAgICAgICAgICAvLyB3aXRoIDAsIDEsIDIsIDMKLSAgICAgICAgICAgIGlmICgnMDEyMycuaW5k
ZXhPZihjaCkgPj0gMCAmJgotICAgICAgICAgICAgICAgICAgICBpbmRleCA8IGxlbmd0aCAmJgot
ICAgICAgICAgICAgICAgICAgICBpc09jdGFsRGlnaXQoc291cmNlW2luZGV4XSkpIHsKLSAgICAg
ICAgICAgICAgICBjb2RlID0gY29kZSAqIDggKyAnMDEyMzQ1NjcnLmluZGV4T2Yoc291cmNlW2lu
ZGV4KytdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB7Ci0g
ICAgICAgICAgICBjb2RlOiBjb2RlLAotICAgICAgICAgICAgb2N0YWw6IG9jdGFsCi0gICAgICAg
IH07Ci0gICAgfQotCi0gICAgLy8gRUNNQS0yNjIgMTEuMiBXaGl0ZSBTcGFjZQotCi0gICAgZnVu
Y3Rpb24gaXNXaGl0ZVNwYWNlKGNoKSB7Ci0gICAgICAgIHJldHVybiAoY2ggPT09IDB4MjApIHx8
IChjaCA9PT0gMHgwOSkgfHwgKGNoID09PSAweDBCKSB8fCAoY2ggPT09IDB4MEMpIHx8IChjaCA9
PT0gMHhBMCkgfHwKLSAgICAgICAgICAgIChjaCA+PSAweDE2ODAgJiYgWzB4MTY4MCwgMHgxODBF
LCAweDIwMDAsIDB4MjAwMSwgMHgyMDAyLCAweDIwMDMsIDB4MjAwNCwgMHgyMDA1LCAweDIwMDYs
IDB4MjAwNywgMHgyMDA4LCAweDIwMDksIDB4MjAwQSwgMHgyMDJGLCAweDIwNUYsIDB4MzAwMCwg
MHhGRUZGXS5pbmRleE9mKGNoKSA+PSAwKTsKLSAgICB9Ci0KLSAgICAvLyBFQ01BLTI2MiAxMS4z
IExpbmUgVGVybWluYXRvcnMKLQotICAgIGZ1bmN0aW9uIGlzTGluZVRlcm1pbmF0b3IoY2gpIHsK
LSAgICAgICAgcmV0dXJuIChjaCA9PT0gMHgwQSkgfHwgKGNoID09PSAweDBEKSB8fCAoY2ggPT09
IDB4MjAyOCkgfHwgKGNoID09PSAweDIwMjkpOwotICAgIH0KLQotICAgIC8vIEVDTUEtMjYyIDEx
LjYgSWRlbnRpZmllciBOYW1lcyBhbmQgSWRlbnRpZmllcnMKLQotICAgIGZ1bmN0aW9uIGZyb21D
b2RlUG9pbnQoY3ApIHsKLSAgICAgICAgcmV0dXJuIChjcCA8IDB4MTAwMDApID8gU3RyaW5nLmZy
b21DaGFyQ29kZShjcCkgOgotICAgICAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MDAg
KyAoKGNwIC0gMHgxMDAwMCkgPj4gMTApKSArCi0gICAgICAgICAgICBTdHJpbmcuZnJvbUNoYXJD
b2RlKDB4REMwMCArICgoY3AgLSAweDEwMDAwKSAmIDEwMjMpKTsKLSAgICB9Ci0KLSAgICBmdW5j
dGlvbiBpc0lkZW50aWZpZXJTdGFydChjaCkgewotICAgICAgICByZXR1cm4gKGNoID09PSAweDI0
KSB8fCAoY2ggPT09IDB4NUYpIHx8ICAvLyAkIChkb2xsYXIpIGFuZCBfICh1bmRlcnNjb3JlKQot
ICAgICAgICAgICAgKGNoID49IDB4NDEgJiYgY2ggPD0gMHg1QSkgfHwgICAgICAgICAvLyBBLi5a
Ci0gICAgICAgICAgICAoY2ggPj0gMHg2MSAmJiBjaCA8PSAweDdBKSB8fCAgICAgICAgIC8vIGEu
LnoKLSAgICAgICAgICAgIChjaCA9PT0gMHg1QykgfHwgICAgICAgICAgICAgICAgICAgICAgLy8g
XCAoYmFja3NsYXNoKQotICAgICAgICAgICAgKChjaCA+PSAweDgwKSAmJiBSZWdleC5Ob25Bc2Np
aUlkZW50aWZpZXJTdGFydC50ZXN0KGZyb21Db2RlUG9pbnQoY2gpKSk7Ci0gICAgfQotCi0gICAg
ZnVuY3Rpb24gaXNJZGVudGlmaWVyUGFydChjaCkgewotICAgICAgICByZXR1cm4gKGNoID09PSAw
eDI0KSB8fCAoY2ggPT09IDB4NUYpIHx8ICAvLyAkIChkb2xsYXIpIGFuZCBfICh1bmRlcnNjb3Jl
KQotICAgICAgICAgICAgKGNoID49IDB4NDEgJiYgY2ggPD0gMHg1QSkgfHwgICAgICAgICAvLyBB
Li5aCi0gICAgICAgICAgICAoY2ggPj0gMHg2MSAmJiBjaCA8PSAweDdBKSB8fCAgICAgICAgIC8v
IGEuLnoKLSAgICAgICAgICAgIChjaCA+PSAweDMwICYmIGNoIDw9IDB4MzkpIHx8ICAgICAgICAg
Ly8gMC4uOQotICAgICAgICAgICAgKGNoID09PSAweDVDKSB8fCAgICAgICAgICAgICAgICAgICAg
ICAvLyBcIChiYWNrc2xhc2gpCi0gICAgICAgICAgICAoKGNoID49IDB4ODApICYmIFJlZ2V4Lk5v
bkFzY2lpSWRlbnRpZmllclBhcnQudGVzdChmcm9tQ29kZVBvaW50KGNoKSkpOwotICAgIH0KLQot
ICAgIC8vIEVDTUEtMjYyIDExLjYuMi4yIEZ1dHVyZSBSZXNlcnZlZCBXb3JkcwotCi0gICAgZnVu
Y3Rpb24gaXNGdXR1cmVSZXNlcnZlZFdvcmQoaWQpIHsKLSAgICAgICAgc3dpdGNoIChpZCkgewot
ICAgICAgICBjYXNlICdlbnVtJzoKLSAgICAgICAgY2FzZSAnZXhwb3J0JzoKLSAgICAgICAgY2Fz
ZSAnaW1wb3J0JzoKLSAgICAgICAgY2FzZSAnc3VwZXInOgotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQoaWQpIHsK
LSAgICAgICAgc3dpdGNoIChpZCkgewotICAgICAgICBjYXNlICdpbXBsZW1lbnRzJzoKLSAgICAg
ICAgY2FzZSAnaW50ZXJmYWNlJzoKLSAgICAgICAgY2FzZSAncGFja2FnZSc6Ci0gICAgICAgIGNh
c2UgJ3ByaXZhdGUnOgotICAgICAgICBjYXNlICdwcm90ZWN0ZWQnOgotICAgICAgICBjYXNlICdw
dWJsaWMnOgotICAgICAgICBjYXNlICdzdGF0aWMnOgotICAgICAgICBjYXNlICd5aWVsZCc6Ci0g
ICAgICAgIGNhc2UgJ2xldCc6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGZ1bmN0aW9uIGlzUmVzdHJpY3RlZFdvcmQoaWQpIHsKLSAgICAgICAgcmV0dXJuIGlkID09PSAn
ZXZhbCcgfHwgaWQgPT09ICdhcmd1bWVudHMnOwotICAgIH0KLQotICAgIC8vIEVDTUEtMjYyIDEx
LjYuMi4xIEtleXdvcmRzCi0KLSAgICBmdW5jdGlvbiBpc0tleXdvcmQoaWQpIHsKLQotICAgICAg
ICAvLyAnY29uc3QnIGlzIHNwZWNpYWxpemVkIGFzIEtleXdvcmQgaW4gVjguCi0gICAgICAgIC8v
ICd5aWVsZCcgYW5kICdsZXQnIGFyZSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFNwaWRlck1vbmtl
eSBhbmQgRVMubmV4dC4KLSAgICAgICAgLy8gU29tZSBvdGhlcnMgYXJlIGZyb20gZnV0dXJlIHJl
c2VydmVkIHdvcmRzLgotCi0gICAgICAgIHN3aXRjaCAoaWQubGVuZ3RoKSB7Ci0gICAgICAgIGNh
c2UgMjoKLSAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICdpZicpIHx8IChpZCA9PT0gJ2luJykg
fHwgKGlkID09PSAnZG8nKTsKLSAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgcmV0dXJuIChp
ZCA9PT0gJ3ZhcicpIHx8IChpZCA9PT0gJ2ZvcicpIHx8IChpZCA9PT0gJ25ldycpIHx8Ci0gICAg
ICAgICAgICAgICAgKGlkID09PSAndHJ5JykgfHwgKGlkID09PSAnbGV0Jyk7Ci0gICAgICAgIGNh
c2UgNDoKLSAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICd0aGlzJykgfHwgKGlkID09PSAnZWxz
ZScpIHx8IChpZCA9PT0gJ2Nhc2UnKSB8fAotICAgICAgICAgICAgICAgIChpZCA9PT0gJ3ZvaWQn
KSB8fCAoaWQgPT09ICd3aXRoJykgfHwgKGlkID09PSAnZW51bScpOwotICAgICAgICBjYXNlIDU6
Ci0gICAgICAgICAgICByZXR1cm4gKGlkID09PSAnd2hpbGUnKSB8fCAoaWQgPT09ICdicmVhaycp
IHx8IChpZCA9PT0gJ2NhdGNoJykgfHwKLSAgICAgICAgICAgICAgICAoaWQgPT09ICd0aHJvdycp
IHx8IChpZCA9PT0gJ2NvbnN0JykgfHwgKGlkID09PSAneWllbGQnKSB8fAotICAgICAgICAgICAg
ICAgIChpZCA9PT0gJ2NsYXNzJykgfHwgKGlkID09PSAnc3VwZXInKTsKLSAgICAgICAgY2FzZSA2
OgotICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ3JldHVybicpIHx8IChpZCA9PT0gJ3R5cGVv
ZicpIHx8IChpZCA9PT0gJ2RlbGV0ZScpIHx8Ci0gICAgICAgICAgICAgICAgKGlkID09PSAnc3dp
dGNoJykgfHwgKGlkID09PSAnZXhwb3J0JykgfHwgKGlkID09PSAnaW1wb3J0Jyk7Ci0gICAgICAg
IGNhc2UgNzoKLSAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICdkZWZhdWx0JykgfHwgKGlkID09
PSAnZmluYWxseScpIHx8IChpZCA9PT0gJ2V4dGVuZHMnKTsKLSAgICAgICAgY2FzZSA4OgotICAg
ICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ2Z1bmN0aW9uJykgfHwgKGlkID09PSAnY29udGludWUn
KSB8fCAoaWQgPT09ICdkZWJ1Z2dlcicpOwotICAgICAgICBjYXNlIDEwOgotICAgICAgICAgICAg
cmV0dXJuIChpZCA9PT0gJ2luc3RhbmNlb2YnKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEVDTUEtMjYyIDEx
LjQgQ29tbWVudHMKLQotICAgIGZ1bmN0aW9uIGFkZENvbW1lbnQodHlwZSwgdmFsdWUsIHN0YXJ0
LCBlbmQsIGxvYykgewotICAgICAgICB2YXIgY29tbWVudDsKLQotICAgICAgICBhc3NlcnQodHlw
ZW9mIHN0YXJ0ID09PSAnbnVtYmVyJywgJ0NvbW1lbnQgbXVzdCBoYXZlIHZhbGlkIHBvc2l0aW9u
Jyk7Ci0KLSAgICAgICAgc3RhdGUubGFzdENvbW1lbnRTdGFydCA9IHN0YXJ0OwotCi0gICAgICAg
IGNvbW1lbnQgPSB7Ci0gICAgICAgICAgICB0eXBlOiB0eXBlLAotICAgICAgICAgICAgdmFsdWU6
IHZhbHVlCi0gICAgICAgIH07Ci0gICAgICAgIGlmIChleHRyYS5yYW5nZSkgewotICAgICAgICAg
ICAgY29tbWVudC5yYW5nZSA9IFtzdGFydCwgZW5kXTsKLSAgICAgICAgfQotICAgICAgICBpZiAo
ZXh0cmEubG9jKSB7Ci0gICAgICAgICAgICBjb21tZW50LmxvYyA9IGxvYzsKLSAgICAgICAgfQot
ICAgICAgICBleHRyYS5jb21tZW50cy5wdXNoKGNvbW1lbnQpOwotICAgICAgICBpZiAoZXh0cmEu
YXR0YWNoQ29tbWVudCkgewotICAgICAgICAgICAgZXh0cmEubGVhZGluZ0NvbW1lbnRzLnB1c2go
Y29tbWVudCk7Ci0gICAgICAgICAgICBleHRyYS50cmFpbGluZ0NvbW1lbnRzLnB1c2goY29tbWVu
dCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBza2lwU2luZ2xlTGluZUNvbW1l
bnQob2Zmc2V0KSB7Ci0gICAgICAgIHZhciBzdGFydCwgbG9jLCBjaCwgY29tbWVudDsKLQotICAg
ICAgICBzdGFydCA9IGluZGV4IC0gb2Zmc2V0OwotICAgICAgICBsb2MgPSB7Ci0gICAgICAgICAg
ICBzdGFydDogewotICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCi0gICAgICAgICAg
ICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydCAtIG9mZnNldAotICAgICAgICAgICAgfQot
ICAgICAgICB9OwotCi0gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgewotICAgICAgICAg
ICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7Ci0gICAgICAgICAgICArK2luZGV4Owot
ICAgICAgICAgICAgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2gpKSB7Ci0gICAgICAgICAgICAgICAg
aGFzTGluZVRlcm1pbmF0b3IgPSB0cnVlOwotICAgICAgICAgICAgICAgIGlmIChleHRyYS5jb21t
ZW50cykgewotICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gc291cmNlLnNsaWNlKHN0YXJ0
ICsgb2Zmc2V0LCBpbmRleCAtIDEpOwotICAgICAgICAgICAgICAgICAgICBsb2MuZW5kID0gewot
ICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQgLSAxCi0gICAgICAgICAgICAgICAg
ICAgIH07Ci0gICAgICAgICAgICAgICAgICAgIGFkZENvbW1lbnQoJ0xpbmUnLCBjb21tZW50LCBz
dGFydCwgaW5kZXggLSAxLCBsb2MpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBpZiAoY2ggPT09IDEzICYmIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMTApIHsKLSAg
ICAgICAgICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgKytsaW5lTnVtYmVyOwotICAgICAgICAgICAgICAgIGxpbmVTdGFydCA9IGluZGV4Owot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChleHRyYS5jb21tZW50cykgewotICAgICAgICAgICAgY29tbWVudCA9IHNvdXJjZS5z
bGljZShzdGFydCArIG9mZnNldCwgaW5kZXgpOwotICAgICAgICAgICAgbG9jLmVuZCA9IHsKLSAg
ICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAgIGNvbHVtbjog
aW5kZXggLSBsaW5lU3RhcnQKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBhZGRDb21tZW50
KCdMaW5lJywgY29tbWVudCwgc3RhcnQsIGluZGV4LCBsb2MpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgZnVuY3Rpb24gc2tpcE11bHRpTGluZUNvbW1lbnQoKSB7Ci0gICAgICAgIHZhciBzdGFy
dCwgbG9jLCBjaCwgY29tbWVudDsKLQotICAgICAgICBpZiAoZXh0cmEuY29tbWVudHMpIHsKLSAg
ICAgICAgICAgIHN0YXJ0ID0gaW5kZXggLSAyOwotICAgICAgICAgICAgbG9jID0gewotICAgICAg
ICAgICAgICAgIHN0YXJ0OiB7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIs
Ci0gICAgICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQgLSAyCi0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotCi0gICAgICAgIHdoaWxl
IChpbmRleCA8IGxlbmd0aCkgewotICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChp
bmRleCk7Ci0gICAgICAgICAgICBpZiAoaXNMaW5lVGVybWluYXRvcihjaCkpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoY2ggPT09IDB4MEQgJiYgc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSA9
PT0gMHgwQSkgewotICAgICAgICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBoYXNMaW5lVGVybWluYXRvciA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgKytsaW5lTnVtYmVyOwotICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAg
ICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAw
eDJBKSB7Ci0gICAgICAgICAgICAgICAgLy8gQmxvY2sgY29tbWVudCBlbmRzIHdpdGggJyovJy4K
LSAgICAgICAgICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSA9PT0gMHgy
RikgewotICAgICAgICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgICAgICAgICAr
K2luZGV4OwotICAgICAgICAgICAgICAgICAgICBpZiAoZXh0cmEuY29tbWVudHMpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBzb3VyY2Uuc2xpY2Uoc3RhcnQgKyAyLCBpbmRl
eCAtIDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgbG9jLmVuZCA9IHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQKLSAgICAgICAgICAgICAgICAgICAgICAg
IH07Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRDb21tZW50KCdCbG9jaycsIGNvbW1lbnQs
IHN0YXJ0LCBpbmRleCwgbG9jKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICsraW5k
ZXg7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSYW4gb2ZmIHRoZSBlbmQgb2YgdGhl
IGZpbGUgLSB0aGUgd2hvbGUgdGhpbmcgaXMgYSBjb21tZW50Ci0gICAgICAgIGlmIChleHRyYS5j
b21tZW50cykgewotICAgICAgICAgICAgbG9jLmVuZCA9IHsKLSAgICAgICAgICAgICAgICBsaW5l
OiBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQK
LSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBjb21tZW50ID0gc291cmNlLnNsaWNlKHN0YXJ0
ICsgMiwgaW5kZXgpOwotICAgICAgICAgICAgYWRkQ29tbWVudCgnQmxvY2snLCBjb21tZW50LCBz
dGFydCwgaW5kZXgsIGxvYyk7Ci0gICAgICAgIH0KLSAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVk
VG9rZW4oKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBza2lwQ29tbWVudCgpIHsKLSAgICAgICAg
dmFyIGNoLCBzdGFydDsKLSAgICAgICAgaGFzTGluZVRlcm1pbmF0b3IgPSBmYWxzZTsKLQotICAg
ICAgICBzdGFydCA9IChpbmRleCA9PT0gMCk7Ci0gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0
aCkgewotICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7Ci0KLSAgICAg
ICAgICAgIGlmIChpc1doaXRlU3BhY2UoY2gpKSB7Ci0gICAgICAgICAgICAgICAgKytpbmRleDsK
LSAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNMaW5lVGVybWluYXRvcihjaCkpIHsKLSAgICAgICAg
ICAgICAgICBoYXNMaW5lVGVybWluYXRvciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgKytpbmRl
eDsKLSAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4MEQgJiYgc291cmNlLmNoYXJDb2RlQXQo
aW5kZXgpID09PSAweDBBKSB7Ci0gICAgICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICsrbGluZU51bWJlcjsKLSAgICAgICAgICAgICAg
ICBsaW5lU3RhcnQgPSBpbmRleDsKLSAgICAgICAgICAgICAgICBzdGFydCA9IHRydWU7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDJGKSB7IC8vIFUrMDAyRiBpcyAnLycKLSAgICAg
ICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGNoID09PSAweDJGKSB7Ci0gICAgICAgICAgICAgICAgICAgICsraW5kZXg7Ci0g
ICAgICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIHNraXBTaW5n
bGVMaW5lQ29tbWVudCgyKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MkEpIHsgIC8vIFUrMDAyQSBpcyAnKicK
LSAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAgICAgICAgICAgKytpbmRl
eDsKLSAgICAgICAgICAgICAgICAgICAgc2tpcE11bHRpTGluZUNvbW1lbnQoKTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0ICYmIGNoID09PSAweDJEKSB7IC8v
IFUrMDAyRCBpcyAnLScKLSAgICAgICAgICAgICAgICAvLyBVKzAwM0UgaXMgJz4nCi0gICAgICAg
ICAgICAgICAgaWYgKChzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpID09PSAweDJEKSAmJiAo
c291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAyKSA9PT0gMHgzRSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gJy0tPicgaXMgYSBzaW5nbGUtbGluZSBjb21tZW50Ci0gICAgICAgICAgICAgICAg
ICAgIGluZGV4ICs9IDM7Ci0gICAgICAgICAgICAgICAgICAgIHNraXBTaW5nbGVMaW5lQ29tbWVu
dCgzKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDND
KSB7IC8vIFUrMDAzQyBpcyAnPCcKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlLnNsaWNlKGlu
ZGV4ICsgMSwgaW5kZXggKyA0KSA9PT0gJyEtLScpIHsKLSAgICAgICAgICAgICAgICAgICAgKytp
bmRleDsgLy8gYDxgCi0gICAgICAgICAgICAgICAgICAgICsraW5kZXg7IC8vIGAhYAotICAgICAg
ICAgICAgICAgICAgICArK2luZGV4OyAvLyBgLWAKLSAgICAgICAgICAgICAgICAgICAgKytpbmRl
eDsgLy8gYC1gCi0gICAgICAgICAgICAgICAgICAgIHNraXBTaW5nbGVMaW5lQ29tbWVudCg0KTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2Nh
bkhleEVzY2FwZShwcmVmaXgpIHsKLSAgICAgICAgdmFyIGksIGxlbiwgY2gsIGNvZGUgPSAwOwot
Ci0gICAgICAgIGxlbiA9IChwcmVmaXggPT09ICd1JykgPyA0IDogMjsKLSAgICAgICAgZm9yIChp
ID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGggJiYg
aXNIZXhEaWdpdChzb3VyY2VbaW5kZXhdKSkgewotICAgICAgICAgICAgICAgIGNoID0gc291cmNl
W2luZGV4KytdOwotICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlICogMTYgKyAnMDEyMzQ1Njc4
OWFiY2RlZicuaW5kZXhPZihjaC50b0xvd2VyQ2FzZSgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICcnOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpOwotICAgIH0KLQotICAgIGZ1
bmN0aW9uIHNjYW5Vbmljb2RlQ29kZVBvaW50RXNjYXBlKCkgewotICAgICAgICB2YXIgY2gsIGNv
ZGU7Ci0KLSAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOwotICAgICAgICBjb2RlID0gMDsKLQot
ICAgICAgICAvLyBBdCBsZWFzdCwgb25lIGhleCBkaWdpdCBpcyByZXF1aXJlZC4KLSAgICAgICAg
aWYgKGNoID09PSAnfScpIHsKLSAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAgICAg
IGNoID0gc291cmNlW2luZGV4KytdOwotICAgICAgICAgICAgaWYgKCFpc0hleERpZ2l0KGNoKSkg
ewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29k
ZSA9IGNvZGUgKiAxNiArICcwMTIzNDU2Nzg5YWJjZGVmJy5pbmRleE9mKGNoLnRvTG93ZXJDYXNl
KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNvZGUgPiAweDEwRkZGRiB8fCBjaCAhPT0g
J30nKSB7Ci0gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwotICAgICAgICB9Ci0K
LSAgICAgICAgcmV0dXJuIGZyb21Db2RlUG9pbnQoY29kZSk7Ci0gICAgfQotCi0gICAgZnVuY3Rp
b24gY29kZVBvaW50QXQoaSkgewotICAgICAgICB2YXIgY3AsIGZpcnN0LCBzZWNvbmQ7Ci0KLSAg
ICAgICAgY3AgPSBzb3VyY2UuY2hhckNvZGVBdChpKTsKLSAgICAgICAgaWYgKGNwID49IDB4RDgw
MCAmJiBjcCA8PSAweERCRkYpIHsKLSAgICAgICAgICAgIHNlY29uZCA9IHNvdXJjZS5jaGFyQ29k
ZUF0KGkgKyAxKTsKLSAgICAgICAgICAgIGlmIChzZWNvbmQgPj0gMHhEQzAwICYmIHNlY29uZCA8
PSAweERGRkYpIHsKLSAgICAgICAgICAgICAgICBmaXJzdCA9IGNwOwotICAgICAgICAgICAgICAg
IGNwID0gKGZpcnN0IC0gMHhEODAwKSAqIDB4NDAwICsgc2Vjb25kIC0gMHhEQzAwICsgMHgxMDAw
MDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBjcDsKLSAgICB9
Ci0KLSAgICBmdW5jdGlvbiBnZXRDb21wbGV4SWRlbnRpZmllcigpIHsKLSAgICAgICAgdmFyIGNw
LCBjaCwgaWQ7Ci0KLSAgICAgICAgY3AgPSBjb2RlUG9pbnRBdChpbmRleCk7Ci0gICAgICAgIGlk
ID0gZnJvbUNvZGVQb2ludChjcCk7Ci0gICAgICAgIGluZGV4ICs9IGlkLmxlbmd0aDsKLQotICAg
ICAgICAvLyAnXHUnIChVKzAwNUMsIFUrMDA3NSkgZGVub3RlcyBhbiBlc2NhcGVkIGNoYXJhY3Rl
ci4KLSAgICAgICAgaWYgKGNwID09PSAweDVDKSB7Ci0gICAgICAgICAgICBpZiAoc291cmNlLmNo
YXJDb2RlQXQoaW5kZXgpICE9PSAweDc1KSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVj
dGVkVG9rZW4oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAg
ICAgICBpZiAoc291cmNlW2luZGV4XSA9PT0gJ3snKSB7Ci0gICAgICAgICAgICAgICAgKytpbmRl
eDsKLSAgICAgICAgICAgICAgICBjaCA9IHNjYW5Vbmljb2RlQ29kZVBvaW50RXNjYXBlKCk7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNoID0gc2NhbkhleEVzY2FwZSgn
dScpOwotICAgICAgICAgICAgICAgIGNwID0gY2guY2hhckNvZGVBdCgwKTsKLSAgICAgICAgICAg
ICAgICBpZiAoIWNoIHx8IGNoID09PSAnXFwnIHx8ICFpc0lkZW50aWZpZXJTdGFydChjcCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZCA9IGNoOwotICAgICAgICB9Ci0K
LSAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICBjcCA9IGNvZGVQ
b2ludEF0KGluZGV4KTsKLSAgICAgICAgICAgIGlmICghaXNJZGVudGlmaWVyUGFydChjcCkpIHsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNoID0g
ZnJvbUNvZGVQb2ludChjcCk7Ci0gICAgICAgICAgICBpZCArPSBjaDsKLSAgICAgICAgICAgIGlu
ZGV4ICs9IGNoLmxlbmd0aDsKLQotICAgICAgICAgICAgLy8gJ1x1JyAoVSswMDVDLCBVKzAwNzUp
IGRlbm90ZXMgYW4gZXNjYXBlZCBjaGFyYWN0ZXIuCi0gICAgICAgICAgICBpZiAoY3AgPT09IDB4
NUMpIHsKLSAgICAgICAgICAgICAgICBpZCA9IGlkLnN1YnN0cigwLCBpZC5sZW5ndGggLSAxKTsK
LSAgICAgICAgICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpICE9PSAweDc1KSB7
Ci0gICAgICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAgICAgICAgaWYgKHNv
dXJjZVtpbmRleF0gPT09ICd7JykgewotICAgICAgICAgICAgICAgICAgICArK2luZGV4OwotICAg
ICAgICAgICAgICAgICAgICBjaCA9IHNjYW5Vbmljb2RlQ29kZVBvaW50RXNjYXBlKCk7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY2ggPSBzY2FuSGV4RXNj
YXBlKCd1Jyk7Ci0gICAgICAgICAgICAgICAgICAgIGNwID0gY2guY2hhckNvZGVBdCgwKTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCFjaCB8fCBjaCA9PT0gJ1xcJyB8fCAhaXNJZGVudGlmaWVy
UGFydChjcCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2Vu
KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgaWQgKz0gY2g7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1
cm4gaWQ7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gZ2V0SWRlbnRpZmllcigpIHsKLSAgICAgICAg
dmFyIHN0YXJ0LCBjaDsKLQotICAgICAgICBzdGFydCA9IGluZGV4Kys7Ci0gICAgICAgIHdoaWxl
IChpbmRleCA8IGxlbmd0aCkgewotICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChp
bmRleCk7Ci0gICAgICAgICAgICBpZiAoY2ggPT09IDB4NUMpIHsKLSAgICAgICAgICAgICAgICAv
LyBCbGFja3NsYXNoIChVKzAwNUMpIG1hcmtzIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlLgotICAg
ICAgICAgICAgICAgIGluZGV4ID0gc3RhcnQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdldENv
bXBsZXhJZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID49IDB4RDgwMCAm
JiBjaCA8IDB4REZGRikgewotICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gaGFuZGxlIHN1cnJv
Z2F0ZSBwYWlycy4KLSAgICAgICAgICAgICAgICBpbmRleCA9IHN0YXJ0OwotICAgICAgICAgICAg
ICAgIHJldHVybiBnZXRDb21wbGV4SWRlbnRpZmllcigpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKGlzSWRlbnRpZmllclBhcnQoY2gpKSB7Ci0gICAgICAgICAgICAgICAgKytpbmRl
eDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gc291cmNlLnNsaWNlKHN0YXJ0LCBp
bmRleCk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2NhbklkZW50aWZpZXIoKSB7Ci0gICAgICAg
IHZhciBzdGFydCwgaWQsIHR5cGU7Ci0KLSAgICAgICAgc3RhcnQgPSBpbmRleDsKLQotICAgICAg
ICAvLyBCYWNrc2xhc2ggKFUrMDA1Qykgc3RhcnRzIGFuIGVzY2FwZWQgY2hhcmFjdGVyLgotICAg
ICAgICBpZCA9IChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4NUMpID8gZ2V0Q29tcGxl
eElkZW50aWZpZXIoKSA6IGdldElkZW50aWZpZXIoKTsKLQotICAgICAgICAvLyBUaGVyZSBpcyBu
byBrZXl3b3JkIG9yIGxpdGVyYWwgd2l0aCBvbmx5IG9uZSBjaGFyYWN0ZXIuCi0gICAgICAgIC8v
IFRodXMsIGl0IG11c3QgYmUgYW4gaWRlbnRpZmllci4KLSAgICAgICAgaWYgKGlkLmxlbmd0aCA9
PT0gMSkgewotICAgICAgICAgICAgdHlwZSA9IFRva2VuLklkZW50aWZpZXI7Ci0gICAgICAgIH0g
ZWxzZSBpZiAoaXNLZXl3b3JkKGlkKSkgewotICAgICAgICAgICAgdHlwZSA9IFRva2VuLktleXdv
cmQ7Ci0gICAgICAgIH0gZWxzZSBpZiAoaWQgPT09ICdudWxsJykgewotICAgICAgICAgICAgdHlw
ZSA9IFRva2VuLk51bGxMaXRlcmFsOwotICAgICAgICB9IGVsc2UgaWYgKGlkID09PSAndHJ1ZScg
fHwgaWQgPT09ICdmYWxzZScpIHsKLSAgICAgICAgICAgIHR5cGUgPSBUb2tlbi5Cb29sZWFuTGl0
ZXJhbDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHR5cGUgPSBUb2tlbi5JZGVudGlm
aWVyOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgIHR5cGU6IHR5
cGUsCi0gICAgICAgICAgICB2YWx1ZTogaWQsCi0gICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5l
TnVtYmVyLAotICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCi0gICAgICAgICAgICBz
dGFydDogc3RhcnQsCi0gICAgICAgICAgICBlbmQ6IGluZGV4Ci0gICAgICAgIH07Ci0gICAgfQot
Ci0KLSAgICAvLyBFQ01BLTI2MiAxMS43IFB1bmN0dWF0b3JzCi0KLSAgICBmdW5jdGlvbiBzY2Fu
UHVuY3R1YXRvcigpIHsKLSAgICAgICAgdmFyIHRva2VuLCBzdHI7Ci0KLSAgICAgICAgdG9rZW4g
PSB7Ci0gICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAotICAgICAgICAgICAgdmFs
dWU6ICcnLAotICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKLSAgICAgICAgICAg
IGxpbmVTdGFydDogbGluZVN0YXJ0LAotICAgICAgICAgICAgc3RhcnQ6IGluZGV4LAotICAgICAg
ICAgICAgZW5kOiBpbmRleAotICAgICAgICB9OwotCi0gICAgICAgIC8vIENoZWNrIGZvciBtb3N0
IGNvbW1vbiBzaW5nbGUtY2hhcmFjdGVyIHB1bmN0dWF0b3JzLgotICAgICAgICBzdHIgPSBzb3Vy
Y2VbaW5kZXhdOwotICAgICAgICBzd2l0Y2ggKHN0cikgewotCi0gICAgICAgIGNhc2UgJygnOgot
ICAgICAgICAgICAgaWYgKGV4dHJhLnRva2VuaXplKSB7Ci0gICAgICAgICAgICAgICAgZXh0cmEu
b3BlblBhcmVuVG9rZW4gPSBleHRyYS50b2tlbnMubGVuZ3RoOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgJ3sn
OgotICAgICAgICAgICAgaWYgKGV4dHJhLnRva2VuaXplKSB7Ci0gICAgICAgICAgICAgICAgZXh0
cmEub3BlbkN1cmx5VG9rZW4gPSBleHRyYS50b2tlbnMubGVuZ3RoOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgc3RhdGUuY3VybHlTdGFjay5wdXNoKCd7Jyk7Ci0gICAgICAgICAgICArK2lu
ZGV4OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSAnLic6Ci0gICAgICAgICAg
ICArK2luZGV4OwotICAgICAgICAgICAgaWYgKHNvdXJjZVtpbmRleF0gPT09ICcuJyAmJiBzb3Vy
Y2VbaW5kZXggKyAxXSA9PT0gJy4nKSB7Ci0gICAgICAgICAgICAgICAgLy8gU3ByZWFkIG9wZXJh
dG9yOiAuLi4KLSAgICAgICAgICAgICAgICBpbmRleCArPSAyOwotICAgICAgICAgICAgICAgIHN0
ciA9ICcuLi4nOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
Y2FzZSAnfSc6Ci0gICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgc3RhdGUuY3VybHlT
dGFjay5wb3AoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICcpJzoKLSAgICAg
ICAgY2FzZSAnOyc6Ci0gICAgICAgIGNhc2UgJywnOgotICAgICAgICBjYXNlICdbJzoKLSAgICAg
ICAgY2FzZSAnXSc6Ci0gICAgICAgIGNhc2UgJzonOgotICAgICAgICBjYXNlICc/JzoKLSAgICAg
ICAgY2FzZSAnfic6Ci0gICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIC8vIDQtY2hhcmFjdGVyIHB1bmN0dWF0b3Iu
Ci0gICAgICAgICAgICBzdHIgPSBzb3VyY2Uuc3Vic3RyKGluZGV4LCA0KTsKLSAgICAgICAgICAg
IGlmIChzdHIgPT09ICc+Pj49JykgewotICAgICAgICAgICAgICAgIGluZGV4ICs9IDQ7Ci0gICAg
ICAgICAgICB9IGVsc2UgewotCi0gICAgICAgICAgICAgICAgLy8gMy1jaGFyYWN0ZXIgcHVuY3R1
YXRvcnMuCi0gICAgICAgICAgICAgICAgc3RyID0gc3RyLnN1YnN0cigwLCAzKTsKLSAgICAgICAg
ICAgICAgICBpZiAoc3RyID09PSAnPT09JyB8fCBzdHIgPT09ICchPT0nIHx8IHN0ciA9PT0gJz4+
PicgfHwKLSAgICAgICAgICAgICAgICAgICAgc3RyID09PSAnPDw9JyB8fCBzdHIgPT09ICc+Pj0n
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDM7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLQotICAgICAgICAgICAgICAgICAgICAvLyAyLWNoYXJhY3RlciBwdW5jdHVhdG9ycy4K
LSAgICAgICAgICAgICAgICAgICAgc3RyID0gc3RyLnN1YnN0cigwLCAyKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHN0ciA9PT0gJyYmJyB8fCBzdHIgPT09ICd8fCcgfHwgc3RyID09PSAnPT0n
IHx8IHN0ciA9PT0gJyE9JyB8fAotICAgICAgICAgICAgICAgICAgICAgICAgc3RyID09PSAnKz0n
IHx8IHN0ciA9PT0gJy09JyB8fCBzdHIgPT09ICcqPScgfHwgc3RyID09PSAnLz0nIHx8Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBzdHIgPT09ICcrKycgfHwgc3RyID09PSAnLS0nIHx8IHN0ciA9
PT0gJzw8JyB8fCBzdHIgPT09ICc+PicgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9
PT0gJyY9JyB8fCBzdHIgPT09ICd8PScgfHwgc3RyID09PSAnXj0nIHx8IHN0ciA9PT0gJyU9JyB8
fAotICAgICAgICAgICAgICAgICAgICAgICAgc3RyID09PSAnPD0nIHx8IHN0ciA9PT0gJz49JyB8
fCBzdHIgPT09ICc9PicpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDI7Ci0g
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IDEtY2hhcmFjdGVyIHB1bmN0dWF0b3JzLgotICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0g
c291cmNlW2luZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgnPD49ISstKiUmfF4v
Jy5pbmRleE9mKHN0cikgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsraW5k
ZXg7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
aW5kZXggPT09IHRva2VuLnN0YXJ0KSB7Ci0gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tl
bigpOwotICAgICAgICB9Ci0KLSAgICAgICAgdG9rZW4uZW5kID0gaW5kZXg7Ci0gICAgICAgIHRv
a2VuLnZhbHVlID0gc3RyOwotICAgICAgICByZXR1cm4gdG9rZW47Ci0gICAgfQotCi0gICAgLy8g
RUNNQS0yNjIgMTEuOC4zIE51bWVyaWMgTGl0ZXJhbHMKLQotICAgIGZ1bmN0aW9uIHNjYW5IZXhM
aXRlcmFsKHN0YXJ0KSB7Ci0gICAgICAgIHZhciBudW1iZXIgPSAnJzsKLQotICAgICAgICB3aGls
ZSAoaW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAgICAgIGlmICghaXNIZXhEaWdpdChzb3VyY2Vb
aW5kZXhdKSkgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChudW1iZXIubGVuZ3RoID09PSAwKSB7Ci0gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tl
bigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KHNvdXJjZS5j
aGFyQ29kZUF0KGluZGV4KSkpIHsKLSAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKCk7
Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgdHlwZTogVG9rZW4u
TnVtZXJpY0xpdGVyYWwsCi0gICAgICAgICAgICB2YWx1ZTogcGFyc2VJbnQoJzB4JyArIG51bWJl
ciwgMTYpLAotICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKLSAgICAgICAgICAg
IGxpbmVTdGFydDogbGluZVN0YXJ0LAotICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAotICAgICAg
ICAgICAgZW5kOiBpbmRleAotICAgICAgICB9OwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHNjYW5C
aW5hcnlMaXRlcmFsKHN0YXJ0KSB7Ci0gICAgICAgIHZhciBjaCwgbnVtYmVyOwotCi0gICAgICAg
IG51bWJlciA9ICcnOwotCi0gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgewotICAgICAg
ICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOwotICAgICAgICAgICAgaWYgKGNoICE9PSAnMCcgJiYg
Y2ggIT09ICcxJykgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChudW1iZXIubGVuZ3RoID09PSAwKSB7Ci0gICAgICAgICAgICAvLyBvbmx5IDBiIG9yIDBC
Ci0gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKGluZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29k
ZUF0KGluZGV4KTsKLSAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovCi0gICAg
ICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoY2gpIHx8IGlzRGVjaW1hbERpZ2l0KGNoKSkg
ewotICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgdHlwZTogVG9rZW4u
TnVtZXJpY0xpdGVyYWwsCi0gICAgICAgICAgICB2YWx1ZTogcGFyc2VJbnQobnVtYmVyLCAyKSwK
LSAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCi0gICAgICAgICAgICBsaW5lU3Rh
cnQ6IGxpbmVTdGFydCwKLSAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKLSAgICAgICAgICAgIGVu
ZDogaW5kZXgKLSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBzY2FuT2N0YWxMaXRl
cmFsKHByZWZpeCwgc3RhcnQpIHsKLSAgICAgICAgdmFyIG51bWJlciwgb2N0YWw7Ci0KLSAgICAg
ICAgaWYgKGlzT2N0YWxEaWdpdChwcmVmaXgpKSB7Ci0gICAgICAgICAgICBvY3RhbCA9IHRydWU7
Ci0gICAgICAgICAgICBudW1iZXIgPSAnMCcgKyBzb3VyY2VbaW5kZXgrK107Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBvY3RhbCA9IGZhbHNlOwotICAgICAgICAgICAgKytpbmRleDsK
LSAgICAgICAgICAgIG51bWJlciA9ICcnOwotICAgICAgICB9Ci0KLSAgICAgICAgd2hpbGUgKGlu
ZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICBpZiAoIWlzT2N0YWxEaWdpdChzb3VyY2VbaW5k
ZXhdKSkgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgh
b2N0YWwgJiYgbnVtYmVyLmxlbmd0aCA9PT0gMCkgewotICAgICAgICAgICAgLy8gb25seSAwbyBv
ciAwTwotICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpIHx8
IGlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHsKLSAgICAgICAgICAg
IHRocm93VW5leHBlY3RlZFRva2VuKCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gewot
ICAgICAgICAgICAgdHlwZTogVG9rZW4uTnVtZXJpY0xpdGVyYWwsCi0gICAgICAgICAgICB2YWx1
ZTogcGFyc2VJbnQobnVtYmVyLCA4KSwKLSAgICAgICAgICAgIG9jdGFsOiBvY3RhbCwKLSAgICAg
ICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCi0gICAgICAgICAgICBsaW5lU3RhcnQ6IGxp
bmVTdGFydCwKLSAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKLSAgICAgICAgICAgIGVuZDogaW5k
ZXgKLSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBpc0ltcGxpY2l0T2N0YWxMaXRl
cmFsKCkgewotICAgICAgICB2YXIgaSwgY2g7Ci0KLSAgICAgICAgLy8gSW1wbGljaXQgb2N0YWws
IHVubGVzcyB0aGVyZSBpcyBhIG5vbi1vY3RhbCBkaWdpdC4KLSAgICAgICAgLy8gKEFubmV4IEIu
MS4xIG9uIE51bWVyaWMgTGl0ZXJhbHMpCi0gICAgICAgIGZvciAoaSA9IGluZGV4ICsgMTsgaSA8
IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBjaCA9IHNvdXJjZVtpXTsKLSAgICAgICAgICAg
IGlmIChjaCA9PT0gJzgnIHx8IGNoID09PSAnOScpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWlzT2N0YWxEaWdpdChjaCkp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHNjYW5OdW1l
cmljTGl0ZXJhbCgpIHsKLSAgICAgICAgdmFyIG51bWJlciwgc3RhcnQsIGNoOwotCi0gICAgICAg
IGNoID0gc291cmNlW2luZGV4XTsKLSAgICAgICAgYXNzZXJ0KGlzRGVjaW1hbERpZ2l0KGNoLmNo
YXJDb2RlQXQoMCkpIHx8IChjaCA9PT0gJy4nKSwKLSAgICAgICAgICAgICdOdW1lcmljIGxpdGVy
YWwgbXVzdCBzdGFydCB3aXRoIGEgZGVjaW1hbCBkaWdpdCBvciBhIGRlY2ltYWwgcG9pbnQnKTsK
LQotICAgICAgICBzdGFydCA9IGluZGV4OwotICAgICAgICBudW1iZXIgPSAnJzsKLSAgICAgICAg
aWYgKGNoICE9PSAnLicpIHsKLSAgICAgICAgICAgIG51bWJlciA9IHNvdXJjZVtpbmRleCsrXTsK
LSAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKLQotICAgICAgICAgICAgLy8gSGV4IG51
bWJlciBzdGFydHMgd2l0aCAnMHgnLgotICAgICAgICAgICAgLy8gT2N0YWwgbnVtYmVyIHN0YXJ0
cyB3aXRoICcwJy4KLSAgICAgICAgICAgIC8vIE9jdGFsIG51bWJlciBpbiBFUzYgc3RhcnRzIHdp
dGggJzBvJy4KLSAgICAgICAgICAgIC8vIEJpbmFyeSBudW1iZXIgaW4gRVM2IHN0YXJ0cyB3aXRo
ICcwYicuCi0gICAgICAgICAgICBpZiAobnVtYmVyID09PSAnMCcpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoY2ggPT09ICd4JyB8fCBjaCA9PT0gJ1gnKSB7Ci0gICAgICAgICAgICAgICAgICAgICsr
aW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzY2FuSGV4TGl0ZXJhbChzdGFydCk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ2InIHx8IGNo
ID09PSAnQicpIHsKLSAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHNjYW5CaW5hcnlMaXRlcmFsKHN0YXJ0KTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09PSAnbycgfHwgY2ggPT09ICdPJykgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gc2Nhbk9jdGFsTGl0ZXJhbChjaCwgc3RhcnQpOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChpc09jdGFsRGlnaXQoY2gpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChpc0ltcGxpY2l0T2N0YWxMaXRlcmFsKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzY2FuT2N0YWxMaXRlcmFsKGNoLCBzdGFydCk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIHdoaWxlIChpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRl
eCkpKSB7Ci0gICAgICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChjaCA9PT0gJy4nKSB7Ci0gICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2lu
ZGV4KytdOwotICAgICAgICAgICAgd2hpbGUgKGlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29k
ZUF0KGluZGV4KSkpIHsKLSAgICAgICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4Kytd
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKGNoID09PSAnZScgfHwgY2ggPT09ICdFJykgewotICAgICAgICAg
ICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTsKLQotICAgICAgICAgICAgY2ggPSBzb3VyY2Vb
aW5kZXhdOwotICAgICAgICAgICAgaWYgKGNoID09PSAnKycgfHwgY2ggPT09ICctJykgewotICAg
ICAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAoaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkg
ewotICAgICAgICAgICAgICAgIHdoaWxlIChpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVB
dChpbmRleCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgr
K107Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkp
IHsKLSAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gewotICAgICAgICAgICAgdHlwZTogVG9rZW4uTnVtZXJpY0xpdGVyYWwsCi0g
ICAgICAgICAgICB2YWx1ZTogcGFyc2VGbG9hdChudW1iZXIpLAotICAgICAgICAgICAgbGluZU51
bWJlcjogbGluZU51bWJlciwKLSAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAotICAg
ICAgICAgICAgc3RhcnQ6IHN0YXJ0LAotICAgICAgICAgICAgZW5kOiBpbmRleAotICAgICAgICB9
OwotICAgIH0KLQotICAgIC8vIEVDTUEtMjYyIDExLjguNCBTdHJpbmcgTGl0ZXJhbHMKLQotICAg
IGZ1bmN0aW9uIHNjYW5TdHJpbmdMaXRlcmFsKCkgewotICAgICAgICB2YXIgc3RyID0gJycsIHF1
b3RlLCBzdGFydCwgY2gsIHVuZXNjYXBlZCwgb2N0VG9EZWMsIG9jdGFsID0gZmFsc2U7Ci0KLSAg
ICAgICAgcXVvdGUgPSBzb3VyY2VbaW5kZXhdOwotICAgICAgICBhc3NlcnQoKHF1b3RlID09PSAn
XCcnIHx8IHF1b3RlID09PSAnIicpLAotICAgICAgICAgICAgJ1N0cmluZyBsaXRlcmFsIG11c3Qg
c3RhcnRzIHdpdGggYSBxdW90ZScpOwotCi0gICAgICAgIHN0YXJ0ID0gaW5kZXg7Ci0gICAgICAg
ICsraW5kZXg7Ci0KLSAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAg
ICBjaCA9IHNvdXJjZVtpbmRleCsrXTsKLQotICAgICAgICAgICAgaWYgKGNoID09PSBxdW90ZSkg
ewotICAgICAgICAgICAgICAgIHF1b3RlID0gJyc7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnXFwnKSB7Ci0gICAgICAgICAgICAgICAgY2gg
PSBzb3VyY2VbaW5kZXgrK107Ci0gICAgICAgICAgICAgICAgaWYgKCFjaCB8fCAhaXNMaW5lVGVy
bWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg
KGNoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3UnOgotICAgICAgICAgICAgICAgICAg
ICBjYXNlICd4JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2VbaW5kZXhdID09
PSAneycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ciArPSBzY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSgpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bmVzY2FwZWQgPSBzY2FuSGV4RXNjYXBlKGNoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIXVuZXNjYXBlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aHJvdyB0aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gdW5lc2NhcGVkOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgJ24nOgotICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
ICs9ICdcbic7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSAncic6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xyJzsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlICd0
JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXHQnOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2InOgotICAgICAgICAg
ICAgICAgICAgICAgICAgc3RyICs9ICdcYic7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnZic6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBzdHIgKz0gJ1xmJzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICBjYXNlICd2JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXHgw
Qic7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnOCc6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJzknOgotICAgICAgICAgICAgICAg
ICAgICAgICAgc3RyICs9IGNoOwotICAgICAgICAgICAgICAgICAgICAgICAgdG9sZXJhdGVVbmV4
cGVjdGVkVG9rZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNPY3Rh
bERpZ2l0KGNoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jdFRvRGVjID0gb2N0
YWxUb0RlY2ltYWwoY2gpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2N0YWwgPSBv
Y3RUb0RlYy5vY3RhbCB8fCBvY3RhbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIg
Kz0gU3RyaW5nLmZyb21DaGFyQ29kZShvY3RUb0RlYy5jb2RlKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IGNoOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICArK2xpbmVOdW1iZXI7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaCA9
PT0gJ1xyJyAmJiBzb3VyY2VbaW5kZXhdID09PSAnXG4nKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICArK2luZGV4OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IGxpbmVTdGFydCA9IGluZGV4OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAoaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkgewotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzdHIgKz0g
Y2g7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocXVvdGUgIT09ICcn
KSB7Ci0gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgIHR5cGU6IFRva2VuLlN0cmluZ0xpdGVyYWwsCi0g
ICAgICAgICAgICB2YWx1ZTogc3RyLAotICAgICAgICAgICAgb2N0YWw6IG9jdGFsLAotICAgICAg
ICAgICAgbGluZU51bWJlcjogc3RhcnRMaW5lTnVtYmVyLAotICAgICAgICAgICAgbGluZVN0YXJ0
OiBzdGFydExpbmVTdGFydCwKLSAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKLSAgICAgICAgICAg
IGVuZDogaW5kZXgKLSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICAvLyBFQ01BLTI2MiAxMS44LjYg
VGVtcGxhdGUgTGl0ZXJhbCBMZXhpY2FsIENvbXBvbmVudHMKLQotICAgIGZ1bmN0aW9uIHNjYW5U
ZW1wbGF0ZSgpIHsKLSAgICAgICAgdmFyIGNvb2tlZCA9ICcnLCBjaCwgc3RhcnQsIHJhd09mZnNl
dCwgdGVybWluYXRlZCwgaGVhZCwgdGFpbCwgcmVzdG9yZSwgdW5lc2NhcGVkOwotCi0gICAgICAg
IHRlcm1pbmF0ZWQgPSBmYWxzZTsKLSAgICAgICAgdGFpbCA9IGZhbHNlOwotICAgICAgICBzdGFy
dCA9IGluZGV4OwotICAgICAgICBoZWFkID0gKHNvdXJjZVtpbmRleF0gPT09ICdgJyk7Ci0gICAg
ICAgIHJhd09mZnNldCA9IDI7Ci0KLSAgICAgICAgKytpbmRleDsKLQotICAgICAgICB3aGlsZSAo
aW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4KytdOwotICAg
ICAgICAgICAgaWYgKGNoID09PSAnYCcpIHsKLSAgICAgICAgICAgICAgICByYXdPZmZzZXQgPSAx
OwotICAgICAgICAgICAgICAgIHRhaWwgPSB0cnVlOwotICAgICAgICAgICAgICAgIHRlcm1pbmF0
ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfSBlbHNlIGlm
IChjaCA9PT0gJyQnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZVtpbmRleF0gPT09ICd7
JykgewotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jdXJseVN0YWNrLnB1c2goJyR7Jyk7Ci0g
ICAgICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0
ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgY29va2VkICs9IGNoOwotICAgICAgICAgICAgfSBlbHNlIGlmIChj
aCA9PT0gJ1xcJykgewotICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4KytdOwotICAg
ICAgICAgICAgICAgIGlmICghaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkgewot
ICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNh
c2UgJ24nOgotICAgICAgICAgICAgICAgICAgICAgICAgY29va2VkICs9ICdcbic7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAncic6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gJ1xyJzsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlICd0JzoKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvb2tlZCArPSAnXHQnOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3UnOgotICAgICAgICAgICAgICAgICAgICBj
YXNlICd4JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2VbaW5kZXhdID09PSAn
eycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvb2tlZCArPSBzY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSgpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXN0b3JlID0gaW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5lc2Nh
cGVkID0gc2NhbkhleEVzY2FwZShjaCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHVuZXNjYXBlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0g
dW5lc2NhcGVkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcmVzdG9yZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29va2VkICs9IGNoOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlICdiJzoKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvb2tlZCArPSAnXGInOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgJ2YnOgotICAgICAgICAgICAgICAgICAgICAgICAgY29v
a2VkICs9ICdcZic7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSAndic6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gJ1x2
JzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICcwJykgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNv
ZGVBdChpbmRleCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElsbGVn
YWw6IFwwMSBcMDIgYW5kIHNvIG9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
cm93RXJyb3IoTWVzc2FnZXMuVGVtcGxhdGVPY3RhbExpdGVyYWwpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gJ1ww
JzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPY3RhbERpZ2l0KGNoKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElsbGVnYWw6IFwxIFwyCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5UZW1wbGF0ZU9jdGFsTGl0
ZXJhbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvb2tlZCArPSBjaDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgKytsaW5lTnVtYmVyOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdccicgJiYgc291cmNlW2luZGV4XSA9PT0g
J1xuJykgewotICAgICAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBsaW5lU3RhcnQgPSBpbmRleDsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2guY2hh
ckNvZGVBdCgwKSkpIHsKLSAgICAgICAgICAgICAgICArK2xpbmVOdW1iZXI7Ci0gICAgICAgICAg
ICAgICAgaWYgKGNoID09PSAnXHInICYmIHNvdXJjZVtpbmRleF0gPT09ICdcbicpIHsKLSAgICAg
ICAgICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgbGluZVN0YXJ0ID0gaW5kZXg7Ci0gICAgICAgICAgICAgICAgY29va2VkICs9ICdcbic7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvb2tlZCArPSBjaDsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICghdGVybWluYXRlZCkgewotICAgICAg
ICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgh
aGVhZCkgewotICAgICAgICAgICAgc3RhdGUuY3VybHlTdGFjay5wb3AoKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICB0eXBlOiBUb2tlbi5UZW1wbGF0ZSwKLSAg
ICAgICAgICAgIHZhbHVlOiB7Ci0gICAgICAgICAgICAgICAgY29va2VkOiBjb29rZWQsCi0gICAg
ICAgICAgICAgICAgcmF3OiBzb3VyY2Uuc2xpY2Uoc3RhcnQgKyAxLCBpbmRleCAtIHJhd09mZnNl
dCkKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBoZWFkOiBoZWFkLAotICAgICAgICAgICAg
dGFpbDogdGFpbCwKLSAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCi0gICAgICAg
ICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKLSAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKLSAg
ICAgICAgICAgIGVuZDogaW5kZXgKLSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICAvLyBFQ01BLTI2
MiAxMS44LjUgUmVndWxhciBFeHByZXNzaW9uIExpdGVyYWxzCi0KLSAgICBmdW5jdGlvbiB0ZXN0
UmVnRXhwKHBhdHRlcm4sIGZsYWdzKSB7Ci0gICAgICAgIC8vIFRoZSBCTVAgY2hhcmFjdGVyIHRv
IHVzZSBhcyBhIHJlcGxhY2VtZW50IGZvciBhc3RyYWwgc3ltYm9scyB3aGVuCi0gICAgICAgIC8v
IHRyYW5zbGF0aW5nIGFuIEVTNiAidSItZmxhZ2dlZCBwYXR0ZXJuIHRvIGFuIEVTNS1jb21wYXRp
YmxlCi0gICAgICAgIC8vIGFwcHJveGltYXRpb24uCi0gICAgICAgIC8vIE5vdGU6IHJlcGxhY2lu
ZyB3aXRoICdcdUZGRkYnIGVuYWJsZXMgZmFsc2UgcG9zaXRpdmVzIGluIHVubGlrZWx5Ci0gICAg
ICAgIC8vIHNjZW5hcmlvcy4gRm9yIGV4YW1wbGUsIGBbXHV7MTA0NGZ9LVx1ezEwNDQwfV1gIGlz
IGFuIGludmFsaWQKLSAgICAgICAgLy8gcGF0dGVybiB0aGF0IHdvdWxkIG5vdCBiZSBkZXRlY3Rl
ZCBieSB0aGlzIHN1YnN0aXR1dGlvbi4KLSAgICAgICAgdmFyIGFzdHJhbFN1YnN0aXR1dGUgPSAn
XHVGRkZGJywKLSAgICAgICAgICAgIHRtcCA9IHBhdHRlcm47Ci0KLSAgICAgICAgaWYgKGZsYWdz
LmluZGV4T2YoJ3UnKSA+PSAwKSB7Ci0gICAgICAgICAgICB0bXAgPSB0bXAKLSAgICAgICAgICAg
ICAgICAvLyBSZXBsYWNlIGV2ZXJ5IFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlIHdpdGggdGhlIGVx
dWl2YWxlbnQKLSAgICAgICAgICAgICAgICAvLyBCTVAgY2hhcmFjdGVyIG9yIGEgY29uc3RhbnQg
QVNDSUkgY29kZSBwb2ludCBpbiB0aGUgY2FzZSBvZgotICAgICAgICAgICAgICAgIC8vIGFzdHJh
bCBzeW1ib2xzLiAoU2VlIHRoZSBhYm92ZSBub3RlIG9uIGBhc3RyYWxTdWJzdGl0dXRlYAotICAg
ICAgICAgICAgICAgIC8vIGZvciBtb3JlIGluZm9ybWF0aW9uLikKLSAgICAgICAgICAgICAgICAu
cmVwbGFjZSgvXFx1XHsoWzAtOWEtZkEtRl0rKVx9fFxcdShbYS1mQS1GMC05XXs0fSkvZywgZnVu
Y3Rpb24gKCQwLCAkMSwgJDIpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGVQb2ludCA9
IHBhcnNlSW50KCQxIHx8ICQyLCAxNik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb2RlUG9p
bnQgPiAweDEwRkZGRikgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVk
VG9rZW4obnVsbCwgTWVzc2FnZXMuSW52YWxpZFJlZ0V4cCk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGVQb2ludCA8PSAweEZGRkYpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGVQb2ludCk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFzdHJh
bFN1YnN0aXR1dGU7Ci0gICAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAgICAgICAvLyBSZXBs
YWNlIGVhY2ggcGFpcmVkIHN1cnJvZ2F0ZSB3aXRoIGEgc2luZ2xlIEFTQ0lJIHN5bWJvbCB0bwot
ICAgICAgICAgICAgICAgIC8vIGF2b2lkIHRocm93aW5nIG9uIHJlZ3VsYXIgZXhwcmVzc2lvbnMg
dGhhdCBhcmUgb25seSB2YWxpZCBpbgotICAgICAgICAgICAgICAgIC8vIGNvbWJpbmF0aW9uIHdp
dGggdGhlICJ1IiBmbGFnLgotICAgICAgICAgICAgICAgIC5yZXBsYWNlKAotICAgICAgICAgICAg
ICAgICAgICAvW1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdL2csCi0gICAgICAgICAgICAg
ICAgICAgIGFzdHJhbFN1YnN0aXR1dGUKLSAgICAgICAgICAgICAgICApOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gRmlyc3QsIGRldGVjdCBpbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCi0g
ICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBSZWdFeHAodG1wKTsKLSAgICAgICAgfSBjYXRjaCAo
ZSkgewotICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4obnVsbCwgTWVzc2FnZXMuSW52
YWxpZFJlZ0V4cCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSZXR1cm4gYSByZWd1bGFyIGV4
cHJlc3Npb24gb2JqZWN0IGZvciB0aGlzIHBhdHRlcm4tZmxhZyBwYWlyLCBvcgotICAgICAgICAv
LyBgbnVsbGAgaW4gY2FzZSB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBkb2Vzbid0IHN1cHBvcnQg
dGhlIGZsYWdzIGl0Ci0gICAgICAgIC8vIHVzZXMuCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAg
ICByZXR1cm4gbmV3IFJlZ0V4cChwYXR0ZXJuLCBmbGFncyk7Ci0gICAgICAgIH0gY2F0Y2ggKGV4
Y2VwdGlvbikgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBmdW5jdGlvbiBzY2FuUmVnRXhwQm9keSgpIHsKLSAgICAgICAgdmFyIGNoLCBzdHIsIGNs
YXNzTWFya2VyLCB0ZXJtaW5hdGVkLCBib2R5OwotCi0gICAgICAgIGNoID0gc291cmNlW2luZGV4
XTsKLSAgICAgICAgYXNzZXJ0KGNoID09PSAnLycsICdSZWd1bGFyIGV4cHJlc3Npb24gbGl0ZXJh
bCBtdXN0IHN0YXJ0IHdpdGggYSBzbGFzaCcpOwotICAgICAgICBzdHIgPSBzb3VyY2VbaW5kZXgr
K107Ci0KLSAgICAgICAgY2xhc3NNYXJrZXIgPSBmYWxzZTsKLSAgICAgICAgdGVybWluYXRlZCA9
IGZhbHNlOwotICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAgICAgIGNo
ID0gc291cmNlW2luZGV4KytdOwotICAgICAgICAgICAgc3RyICs9IGNoOwotICAgICAgICAgICAg
aWYgKGNoID09PSAnXFwnKSB7Ci0gICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107
Ci0gICAgICAgICAgICAgICAgLy8gRUNNQS0yNjIgNy44LjUKLSAgICAgICAgICAgICAgICBpZiAo
aXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkgewotICAgICAgICAgICAgICAgICAg
ICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihudWxsLCBNZXNzYWdlcy5VbnRlcm1pbmF0ZWRSZWdFeHAp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzdHIgKz0gY2g7Ci0gICAgICAg
ICAgICB9IGVsc2UgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHsKLSAg
ICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihudWxsLCBNZXNzYWdlcy5VbnRlcm1p
bmF0ZWRSZWdFeHApOwotICAgICAgICAgICAgfSBlbHNlIGlmIChjbGFzc01hcmtlcikgewotICAg
ICAgICAgICAgICAgIGlmIChjaCA9PT0gJ10nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNsYXNz
TWFya2VyID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICcvJykgewotICAgICAgICAgICAgICAgICAgICB0
ZXJtaW5hdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChjaCA9PT0gJ1snKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNsYXNz
TWFya2VyID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoIXRlcm1pbmF0ZWQpIHsKLSAgICAgICAgICAgIHRocm93VW5leHBl
Y3RlZFRva2VuKG51bGwsIE1lc3NhZ2VzLlVudGVybWluYXRlZFJlZ0V4cCk7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBFeGNsdWRlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoLgotICAgICAg
ICBib2R5ID0gc3RyLnN1YnN0cigxLCBzdHIubGVuZ3RoIC0gMik7Ci0gICAgICAgIHJldHVybiB7
Ci0gICAgICAgICAgICB2YWx1ZTogYm9keSwKLSAgICAgICAgICAgIGxpdGVyYWw6IHN0cgotICAg
ICAgICB9OwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHNjYW5SZWdFeHBGbGFncygpIHsKLSAgICAg
ICAgdmFyIGNoLCBzdHIsIGZsYWdzLCByZXN0b3JlOwotCi0gICAgICAgIHN0ciA9ICcnOwotICAg
ICAgICBmbGFncyA9ICcnOwotICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKLSAgICAg
ICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKLSAgICAgICAgICAgIGlmICghaXNJZGVudGlmaWVy
UGFydChjaC5jaGFyQ29kZUF0KDApKSkgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgaWYgKGNoID09PSAn
XFwnICYmIGluZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5k
ZXhdOwotICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ3UnKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICsraW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3RvcmUgPSBpbmRleDsKLSAgICAg
ICAgICAgICAgICAgICAgY2ggPSBzY2FuSGV4RXNjYXBlKCd1Jyk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChjaCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgKz0gY2g7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKHN0ciArPSAnXFx1JzsgcmVzdG9yZSA8IGluZGV4OyAr
K3Jlc3RvcmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gc291cmNlW3Jl
c3RvcmVdOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSByZXN0b3JlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZmxhZ3MgKz0gJ3UnOwotICAgICAgICAgICAgICAgICAgICAgICAg
c3RyICs9ICdcXHUnOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgc3RyICs9ICdcXCc7Ci0gICAgICAgICAgICAgICAgICAgIHRvbGVy
YXRlVW5leHBlY3RlZFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBmbGFncyArPSBjaDsKLSAgICAgICAgICAgICAgICBzdHIg
Kz0gY2g7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gewotICAg
ICAgICAgICAgdmFsdWU6IGZsYWdzLAotICAgICAgICAgICAgbGl0ZXJhbDogc3RyCi0gICAgICAg
IH07Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2NhblJlZ0V4cCgpIHsKLSAgICAgICAgdmFyIHN0
YXJ0LCBib2R5LCBmbGFncywgdmFsdWU7Ci0gICAgICAgIHNjYW5uaW5nID0gdHJ1ZTsKLQotICAg
ICAgICBsb29rYWhlYWQgPSBudWxsOwotICAgICAgICBza2lwQ29tbWVudCgpOwotICAgICAgICBz
dGFydCA9IGluZGV4OwotCi0gICAgICAgIGJvZHkgPSBzY2FuUmVnRXhwQm9keSgpOwotICAgICAg
ICBmbGFncyA9IHNjYW5SZWdFeHBGbGFncygpOwotICAgICAgICB2YWx1ZSA9IHRlc3RSZWdFeHAo
Ym9keS52YWx1ZSwgZmxhZ3MudmFsdWUpOwotICAgICAgICBzY2FubmluZyA9IGZhbHNlOwotICAg
ICAgICBpZiAoZXh0cmEudG9rZW5pemUpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAg
ICAgICAgICAgdHlwZTogVG9rZW4uUmVndWxhckV4cHJlc3Npb24sCi0gICAgICAgICAgICAgICAg
dmFsdWU6IHZhbHVlLAotICAgICAgICAgICAgICAgIHJlZ2V4OiB7Ci0gICAgICAgICAgICAgICAg
ICAgIHBhdHRlcm46IGJvZHkudmFsdWUsCi0gICAgICAgICAgICAgICAgICAgIGZsYWdzOiBmbGFn
cy52YWx1ZQotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgbGluZU51bWJlcjog
bGluZU51bWJlciwKLSAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKLSAgICAg
ICAgICAgICAgICBzdGFydDogc3RhcnQsCi0gICAgICAgICAgICAgICAgZW5kOiBpbmRleAotICAg
ICAgICAgICAgfTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICBs
aXRlcmFsOiBib2R5LmxpdGVyYWwgKyBmbGFncy5saXRlcmFsLAotICAgICAgICAgICAgdmFsdWU6
IHZhbHVlLAotICAgICAgICAgICAgcmVnZXg6IHsKLSAgICAgICAgICAgICAgICBwYXR0ZXJuOiBi
b2R5LnZhbHVlLAotICAgICAgICAgICAgICAgIGZsYWdzOiBmbGFncy52YWx1ZQotICAgICAgICAg
ICAgfSwKLSAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKLSAgICAgICAgICAgIGVuZDogaW5kZXgK
LSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBjb2xsZWN0UmVnZXgoKSB7Ci0gICAg
ICAgIHZhciBwb3MsIGxvYywgcmVnZXgsIHRva2VuOwotCi0gICAgICAgIHNraXBDb21tZW50KCk7
Ci0KLSAgICAgICAgcG9zID0gaW5kZXg7Ci0gICAgICAgIGxvYyA9IHsKLSAgICAgICAgICAgIHN0
YXJ0OiB7Ci0gICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlciwKLSAgICAgICAgICAgICAg
ICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0K
LSAgICAgICAgcmVnZXggPSBzY2FuUmVnRXhwKCk7Ci0KLSAgICAgICAgbG9jLmVuZCA9IHsKLSAg
ICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCi0gICAgICAgICAgICBjb2x1bW46IGluZGV4IC0g
bGluZVN0YXJ0Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQg
Ki8KLSAgICAgICAgaWYgKCFleHRyYS50b2tlbml6ZSkgewotICAgICAgICAgICAgLy8gUG9wIHRo
ZSBwcmV2aW91cyB0b2tlbiwgd2hpY2ggaXMgbGlrZWx5ICcvJyBvciAnLz0nCi0gICAgICAgICAg
ICBpZiAoZXh0cmEudG9rZW5zLmxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgICAgICB0b2tlbiA9
IGV4dHJhLnRva2Vuc1tleHRyYS50b2tlbnMubGVuZ3RoIC0gMV07Ci0gICAgICAgICAgICAgICAg
aWYgKHRva2VuLnJhbmdlWzBdID09PSBwb3MgJiYgdG9rZW4udHlwZSA9PT0gJ1B1bmN0dWF0b3In
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PT0gJy8nIHx8IHRva2Vu
LnZhbHVlID09PSAnLz0nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBleHRyYS50b2tlbnMu
cG9wKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGV4dHJhLnRva2Vucy5wdXNoKHsKLSAgICAgICAgICAgICAg
ICB0eXBlOiAnUmVndWxhckV4cHJlc3Npb24nLAotICAgICAgICAgICAgICAgIHZhbHVlOiByZWdl
eC5saXRlcmFsLAotICAgICAgICAgICAgICAgIHJlZ2V4OiByZWdleC5yZWdleCwKLSAgICAgICAg
ICAgICAgICByYW5nZTogW3BvcywgaW5kZXhdLAotICAgICAgICAgICAgICAgIGxvYzogbG9jCi0g
ICAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZWdleDsKLSAgICB9
Ci0KLSAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJOYW1lKHRva2VuKSB7Ci0gICAgICAgIHJldHVy
biB0b2tlbi50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyIHx8Ci0gICAgICAgICAgICB0b2tlbi50
eXBlID09PSBUb2tlbi5LZXl3b3JkIHx8Ci0gICAgICAgICAgICB0b2tlbi50eXBlID09PSBUb2tl
bi5Cb29sZWFuTGl0ZXJhbCB8fAotICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW4uTnVs
bExpdGVyYWw7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gYWR2YW5jZVNsYXNoKCkgewotICAgICAg
ICB2YXIgcHJldlRva2VuLAotICAgICAgICAgICAgY2hlY2tUb2tlbjsKLSAgICAgICAgLy8gVXNp
bmcgdGhlIGZvbGxvd2luZyBhbGdvcml0aG06Ci0gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNv
bS9tb3ppbGxhL3N3ZWV0LmpzL3dpa2kvZGVzaWduCi0gICAgICAgIHByZXZUb2tlbiA9IGV4dHJh
LnRva2Vuc1tleHRyYS50b2tlbnMubGVuZ3RoIC0gMV07Ci0gICAgICAgIGlmICghcHJldlRva2Vu
KSB7Ci0gICAgICAgICAgICAvLyBOb3RoaW5nIGJlZm9yZSB0aGF0OiBpdCBjYW5ub3QgYmUgYSBk
aXZpc2lvbi4KLSAgICAgICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAocHJldlRva2VuLnR5cGUgPT09ICdQdW5jdHVhdG9yJykgewotICAgICAgICAg
ICAgaWYgKHByZXZUb2tlbi52YWx1ZSA9PT0gJ10nKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHNjYW5QdW5jdHVhdG9yKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocHJldlRv
a2VuLnZhbHVlID09PSAnKScpIHsKLSAgICAgICAgICAgICAgICBjaGVja1Rva2VuID0gZXh0cmEu
dG9rZW5zW2V4dHJhLm9wZW5QYXJlblRva2VuIC0gMV07Ci0gICAgICAgICAgICAgICAgaWYgKGNo
ZWNrVG9rZW4gJiYKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4udHlwZSA9PT0g
J0tleXdvcmQnICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAoY2hlY2tUb2tlbi52YWx1ZSA9
PT0gJ2lmJyB8fAotICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4udmFsdWUgPT09
ICd3aGlsZScgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja1Rva2VuLnZhbHVlID09
PSAnZm9yJyB8fAotICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4udmFsdWUgPT09
ICd3aXRoJykpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3RSZWdleCgpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3Io
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChwcmV2VG9rZW4udmFsdWUgPT09ICd9
JykgewotICAgICAgICAgICAgICAgIC8vIERpdmlkaW5nIGEgZnVuY3Rpb24gYnkgYW55dGhpbmcg
bWFrZXMgbGl0dGxlIHNlbnNlLAotICAgICAgICAgICAgICAgIC8vIGJ1dCB3ZSBoYXZlIHRvIGNo
ZWNrIGZvciB0aGF0LgotICAgICAgICAgICAgICAgIGlmIChleHRyYS50b2tlbnNbZXh0cmEub3Bl
bkN1cmx5VG9rZW4gLSAzXSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEudG9rZW5z
W2V4dHJhLm9wZW5DdXJseVRva2VuIC0gM10udHlwZSA9PT0gJ0tleXdvcmQnKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIEFub255bW91cyBmdW5jdGlvbi4KLSAgICAgICAgICAgICAgICAgICAg
Y2hlY2tUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDRdOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoIWNoZWNrVG9rZW4pIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChleHRyYS50b2tlbnNbZXh0cmEub3BlbkN1cmx5VG9rZW4g
LSA0XSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5D
dXJseVRva2VuIC0gNF0udHlwZSA9PT0gJ0tleXdvcmQnKSB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIE5hbWVkIGZ1bmN0aW9uLgotICAgICAgICAgICAgICAgICAgICBjaGVja1Rva2VuID0gZXh0
cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gNV07Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghY2hlY2tUb2tlbikgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbGxl
Y3RSZWdleCgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIGNoZWNrVG9rZW4gZGV0ZXJtaW5lcyB3aGV0
aGVyIHRoZSBmdW5jdGlvbiBpcwotICAgICAgICAgICAgICAgIC8vIGEgZGVjbGFyYXRpb24gb3Ig
YW4gZXhwcmVzc2lvbi4KLSAgICAgICAgICAgICAgICBpZiAoRm5FeHByVG9rZW5zLmluZGV4T2Yo
Y2hlY2tUb2tlbi52YWx1ZSkgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICAvLyBJdCBpcyBh
biBleHByZXNzaW9uLgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3Io
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gSXQgaXMgYSBkZWNsYXJh
dGlvbi4KLSAgICAgICAgICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKHByZXZUb2tlbi50eXBlID09PSAnS2V5d29yZCcgJiYgcHJldlRva2VuLnZhbHVlICE9
PSAndGhpcycpIHsKLSAgICAgICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlv
biBhZHZhbmNlKCkgewotICAgICAgICB2YXIgY3AsIHRva2VuOwotCi0gICAgICAgIGlmIChpbmRl
eCA+PSBsZW5ndGgpIHsKLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlw
ZTogVG9rZW4uRU9GLAotICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCi0g
ICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCi0gICAgICAgICAgICAgICAgc3Rh
cnQ6IGluZGV4LAotICAgICAgICAgICAgICAgIGVuZDogaW5kZXgKLSAgICAgICAgICAgIH07Ci0g
ICAgICAgIH0KLQotICAgICAgICBjcCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTsKLQotICAg
ICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoY3ApKSB7Ci0gICAgICAgICAgICB0b2tlbiA9IHNj
YW5JZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGlzU3RyaWN0TW9kZVJl
c2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICB0b2tlbi50eXBlID0g
VG9rZW4uS2V5d29yZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0b2tlbjsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIFZlcnkgY29tbW9uOiAoIGFuZCApIGFuZCA7Ci0gICAg
ICAgIGlmIChjcCA9PT0gMHgyOCB8fCBjcCA9PT0gMHgyOSB8fCBjcCA9PT0gMHgzQikgewotICAg
ICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBTdHJpbmcgbGl0ZXJhbCBzdGFydHMgd2l0aCBzaW5nbGUgcXVvdGUgKFUrMDAyNykgb3IgZG91
YmxlIHF1b3RlIChVKzAwMjIpLgotICAgICAgICBpZiAoY3AgPT09IDB4MjcgfHwgY3AgPT09IDB4
MjIpIHsKLSAgICAgICAgICAgIHJldHVybiBzY2FuU3RyaW5nTGl0ZXJhbCgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gRG90ICguKSBVKzAwMkUgY2FuIGFsc28gc3RhcnQgYSBmbG9hdGluZy1w
b2ludCBudW1iZXIsIGhlbmNlIHRoZSBuZWVkCi0gICAgICAgIC8vIHRvIGNoZWNrIHRoZSBuZXh0
IGNoYXJhY3Rlci4KLSAgICAgICAgaWYgKGNwID09PSAweDJFKSB7Ci0gICAgICAgICAgICBpZiAo
aXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSkpIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gc2Nhbk51bWVyaWNMaXRlcmFsKCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChpc0RlY2ltYWxEaWdpdChjcCkpIHsKLSAgICAgICAgICAgIHJldHVybiBzY2FuTnVtZXJpY0xp
dGVyYWwoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFNsYXNoICgvKSBVKzAwMkYgY2FuIGFs
c28gc3RhcnQgYSByZWdleC4KLSAgICAgICAgaWYgKGV4dHJhLnRva2VuaXplICYmIGNwID09PSAw
eDJGKSB7Ci0gICAgICAgICAgICByZXR1cm4gYWR2YW5jZVNsYXNoKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBUZW1wbGF0ZSBsaXRlcmFscyBzdGFydCB3aXRoIGAgKFUrMDA2MCkgZm9yIHRl
bXBsYXRlIGhlYWQKLSAgICAgICAgLy8gb3IgfSAoVSswMDdEKSBmb3IgdGVtcGxhdGUgbWlkZGxl
IG9yIHRlbXBsYXRlIHRhaWwuCi0gICAgICAgIGlmIChjcCA9PT0gMHg2MCB8fCAoY3AgPT09IDB4
N0QgJiYgc3RhdGUuY3VybHlTdGFja1tzdGF0ZS5jdXJseVN0YWNrLmxlbmd0aCAtIDFdID09PSAn
JHsnKSkgewotICAgICAgICAgICAgcmV0dXJuIHNjYW5UZW1wbGF0ZSgpOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gUG9zc2libGUgaWRlbnRpZmllciBzdGFydCBpbiBhIHN1cnJvZ2F0ZSBwYWly
LgotICAgICAgICBpZiAoY3AgPj0gMHhEODAwICYmIGNwIDwgMHhERkZGKSB7Ci0gICAgICAgICAg
ICBjcCA9IGNvZGVQb2ludEF0KGluZGV4KTsKLSAgICAgICAgICAgIGlmIChpc0lkZW50aWZpZXJT
dGFydChjcCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc2NhbklkZW50aWZpZXIoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigp
OwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGNvbGxlY3RUb2tlbigpIHsKLSAgICAgICAgdmFyIGxv
YywgdG9rZW4sIHZhbHVlLCBlbnRyeTsKLQotICAgICAgICBsb2MgPSB7Ci0gICAgICAgICAgICBz
dGFydDogewotICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAg
ICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydAotICAgICAgICAgICAgfQotICAgICAgICB9Owot
Ci0gICAgICAgIHRva2VuID0gYWR2YW5jZSgpOwotICAgICAgICBsb2MuZW5kID0gewotICAgICAg
ICAgICAgbGluZTogbGluZU51bWJlciwKLSAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5l
U3RhcnQKLSAgICAgICAgfTsKLQotICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uRU9G
KSB7Ci0gICAgICAgICAgICB2YWx1ZSA9IHNvdXJjZS5zbGljZSh0b2tlbi5zdGFydCwgdG9rZW4u
ZW5kKTsKLSAgICAgICAgICAgIGVudHJ5ID0gewotICAgICAgICAgICAgICAgIHR5cGU6IFRva2Vu
TmFtZVt0b2tlbi50eXBlXSwKLSAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsCi0gICAgICAg
ICAgICAgICAgcmFuZ2U6IFt0b2tlbi5zdGFydCwgdG9rZW4uZW5kXSwKLSAgICAgICAgICAgICAg
ICBsb2M6IGxvYwotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIGlmICh0b2tlbi5yZWdleCkg
ewotICAgICAgICAgICAgICAgIGVudHJ5LnJlZ2V4ID0gewotICAgICAgICAgICAgICAgICAgICBw
YXR0ZXJuOiB0b2tlbi5yZWdleC5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgICBmbGFnczog
dG9rZW4ucmVnZXguZmxhZ3MKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZXh0cmEudG9rZW5zLnB1c2goZW50cnkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
cmV0dXJuIHRva2VuOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGxleCgpIHsKLSAgICAgICAgdmFy
IHRva2VuOwotICAgICAgICBzY2FubmluZyA9IHRydWU7Ci0KLSAgICAgICAgbGFzdEluZGV4ID0g
aW5kZXg7Ci0gICAgICAgIGxhc3RMaW5lTnVtYmVyID0gbGluZU51bWJlcjsKLSAgICAgICAgbGFz
dExpbmVTdGFydCA9IGxpbmVTdGFydDsKLQotICAgICAgICBza2lwQ29tbWVudCgpOwotCi0gICAg
ICAgIHRva2VuID0gbG9va2FoZWFkOwotCi0gICAgICAgIHN0YXJ0SW5kZXggPSBpbmRleDsKLSAg
ICAgICAgc3RhcnRMaW5lTnVtYmVyID0gbGluZU51bWJlcjsKLSAgICAgICAgc3RhcnRMaW5lU3Rh
cnQgPSBsaW5lU3RhcnQ7Ci0KLSAgICAgICAgbG9va2FoZWFkID0gKHR5cGVvZiBleHRyYS50b2tl
bnMgIT09ICd1bmRlZmluZWQnKSA/IGNvbGxlY3RUb2tlbigpIDogYWR2YW5jZSgpOwotICAgICAg
ICBzY2FubmluZyA9IGZhbHNlOwotICAgICAgICByZXR1cm4gdG9rZW47Ci0gICAgfQotCi0gICAg
ZnVuY3Rpb24gcGVlaygpIHsKLSAgICAgICAgc2Nhbm5pbmcgPSB0cnVlOwotCi0gICAgICAgIHNr
aXBDb21tZW50KCk7Ci0KLSAgICAgICAgbGFzdEluZGV4ID0gaW5kZXg7Ci0gICAgICAgIGxhc3RM
aW5lTnVtYmVyID0gbGluZU51bWJlcjsKLSAgICAgICAgbGFzdExpbmVTdGFydCA9IGxpbmVTdGFy
dDsKLQotICAgICAgICBzdGFydEluZGV4ID0gaW5kZXg7Ci0gICAgICAgIHN0YXJ0TGluZU51bWJl
ciA9IGxpbmVOdW1iZXI7Ci0gICAgICAgIHN0YXJ0TGluZVN0YXJ0ID0gbGluZVN0YXJ0OwotCi0g
ICAgICAgIGxvb2thaGVhZCA9ICh0eXBlb2YgZXh0cmEudG9rZW5zICE9PSAndW5kZWZpbmVkJykg
PyBjb2xsZWN0VG9rZW4oKSA6IGFkdmFuY2UoKTsKLSAgICAgICAgc2Nhbm5pbmcgPSBmYWxzZTsK
LSAgICB9Ci0KLSAgICBmdW5jdGlvbiBQb3NpdGlvbigpIHsKLSAgICAgICAgdGhpcy5saW5lID0g
c3RhcnRMaW5lTnVtYmVyOwotICAgICAgICB0aGlzLmNvbHVtbiA9IHN0YXJ0SW5kZXggLSBzdGFy
dExpbmVTdGFydDsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBTb3VyY2VMb2NhdGlvbigpIHsKLSAg
ICAgICAgdGhpcy5zdGFydCA9IG5ldyBQb3NpdGlvbigpOwotICAgICAgICB0aGlzLmVuZCA9IG51
bGw7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gV3JhcHBpbmdTb3VyY2VMb2NhdGlvbihzdGFydFRv
a2VuKSB7Ci0gICAgICAgIHRoaXMuc3RhcnQgPSB7Ci0gICAgICAgICAgICBsaW5lOiBzdGFydFRv
a2VuLmxpbmVOdW1iZXIsCi0gICAgICAgICAgICBjb2x1bW46IHN0YXJ0VG9rZW4uc3RhcnQgLSBz
dGFydFRva2VuLmxpbmVTdGFydAotICAgICAgICB9OwotICAgICAgICB0aGlzLmVuZCA9IG51bGw7
Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gTm9kZSgpIHsKLSAgICAgICAgaWYgKGV4dHJhLnJhbmdl
KSB7Ci0gICAgICAgICAgICB0aGlzLnJhbmdlID0gW3N0YXJ0SW5kZXgsIDBdOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChleHRyYS5sb2MpIHsKLSAgICAgICAgICAgIHRoaXMubG9jID0gbmV3IFNv
dXJjZUxvY2F0aW9uKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBXcmFwcGlu
Z05vZGUoc3RhcnRUb2tlbikgewotICAgICAgICBpZiAoZXh0cmEucmFuZ2UpIHsKLSAgICAgICAg
ICAgIHRoaXMucmFuZ2UgPSBbc3RhcnRUb2tlbi5zdGFydCwgMF07Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKGV4dHJhLmxvYykgewotICAgICAgICAgICAgdGhpcy5sb2MgPSBuZXcgV3JhcHBpbmdT
b3VyY2VMb2NhdGlvbihzdGFydFRva2VuKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFdyYXBw
aW5nTm9kZS5wcm90b3R5cGUgPSBOb2RlLnByb3RvdHlwZSA9IHsKLQotICAgICAgICBwcm9jZXNz
Q29tbWVudDogZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdmFyIGxhc3RDaGlsZCwKLSAgICAg
ICAgICAgICAgICBsZWFkaW5nQ29tbWVudHMsCi0gICAgICAgICAgICAgICAgdHJhaWxpbmdDb21t
ZW50cywKLSAgICAgICAgICAgICAgICBib3R0b21SaWdodCA9IGV4dHJhLmJvdHRvbVJpZ2h0U3Rh
Y2ssCi0gICAgICAgICAgICAgICAgaSwKLSAgICAgICAgICAgICAgICBjb21tZW50LAotICAgICAg
ICAgICAgICAgIGxhc3QgPSBib3R0b21SaWdodFtib3R0b21SaWdodC5sZW5ndGggLSAxXTsKLQot
ICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gU3ludGF4LlByb2dyYW0pIHsKLSAgICAgICAg
ICAgICAgICBpZiAodGhpcy5ib2R5Lmxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKGV4dHJhLnRyYWlsaW5nQ29tbWVudHMubGVuZ3RoID4gMCkgewotICAgICAgICAgICAgICAg
IHRyYWlsaW5nQ29tbWVudHMgPSBbXTsKLSAgICAgICAgICAgICAgICBmb3IgKGkgPSBleHRyYS50
cmFpbGluZ0NvbW1lbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbW1lbnQgPSBleHRyYS50cmFpbGluZ0NvbW1lbnRzW2ldOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoY29tbWVudC5yYW5nZVswXSA+PSB0aGlzLnJhbmdlWzFdKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzLnVuc2hpZnQoY29tbWVudCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBleHRyYS50cmFpbGluZ0NvbW1lbnRzLnNwbGljZShpLCAxKTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBleHRyYS50cmFpbGluZ0NvbW1lbnRzID0gW107Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIGlmIChsYXN0ICYmIGxhc3QudHJhaWxpbmdDb21tZW50cyAmJiBsYXN0LnRy
YWlsaW5nQ29tbWVudHNbMF0ucmFuZ2VbMF0gPj0gdGhpcy5yYW5nZVsxXSkgewotICAgICAgICAg
ICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzID0gbGFzdC50cmFpbGluZ0NvbW1lbnRzOwotICAg
ICAgICAgICAgICAgICAgICBkZWxldGUgbGFzdC50cmFpbGluZ0NvbW1lbnRzOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gRWF0aW5nIHRoZSBzdGFj
ay4KLSAgICAgICAgICAgIHdoaWxlIChsYXN0ICYmIGxhc3QucmFuZ2VbMF0gPj0gdGhpcy5yYW5n
ZVswXSkgewotICAgICAgICAgICAgICAgIGxhc3RDaGlsZCA9IGJvdHRvbVJpZ2h0LnBvcCgpOwot
ICAgICAgICAgICAgICAgIGxhc3QgPSBib3R0b21SaWdodFtib3R0b21SaWdodC5sZW5ndGggLSAx
XTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGxhc3RDaGlsZCkgewotICAgICAg
ICAgICAgICAgIGlmIChsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGxlYWRpbmdDb21tZW50cyA9IFtdOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGkg
PSBsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gbGFzdENoaWxkLmxlYWRpbmdDb21tZW50
c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21tZW50LnJhbmdlWzFdIDw9IHRo
aXMucmFuZ2VbMF0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWFkaW5nQ29tbWVu
dHMudW5zaGlmdChjb21tZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0Q2hp
bGQubGVhZGluZ0NvbW1lbnRzLnNwbGljZShpLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmICghbGFz
dENoaWxkLmxlYWRpbmdDb21tZW50cy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHMgPSB1bmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGV4dHJhLmxl
YWRpbmdDb21tZW50cy5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICAgICAgbGVhZGluZ0NvbW1l
bnRzID0gW107Ci0gICAgICAgICAgICAgICAgZm9yIChpID0gZXh0cmEubGVhZGluZ0NvbW1lbnRz
Lmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbW1lbnQg
PSBleHRyYS5sZWFkaW5nQ29tbWVudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb21t
ZW50LnJhbmdlWzFdIDw9IHRoaXMucmFuZ2VbMF0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGxlYWRpbmdDb21tZW50cy51bnNoaWZ0KGNvbW1lbnQpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZXh0cmEubGVhZGluZ0NvbW1lbnRzLnNwbGljZShpLCAxKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotCi0gICAgICAgICAgICBp
ZiAobGVhZGluZ0NvbW1lbnRzICYmIGxlYWRpbmdDb21tZW50cy5sZW5ndGggPiAwKSB7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5sZWFkaW5nQ29tbWVudHMgPSBsZWFkaW5nQ29tbWVudHM7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodHJhaWxpbmdDb21tZW50cyAmJiB0cmFpbGluZ0Nv
bW1lbnRzLmxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgICAgICB0aGlzLnRyYWlsaW5nQ29tbWVu
dHMgPSB0cmFpbGluZ0NvbW1lbnRzOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBib3R0
b21SaWdodC5wdXNoKHRoaXMpOwotICAgICAgICB9LAotCi0gICAgICAgIGZpbmlzaDogZnVuY3Rp
b24gKCkgewotICAgICAgICAgICAgaWYgKGV4dHJhLnJhbmdlKSB7Ci0gICAgICAgICAgICAgICAg
dGhpcy5yYW5nZVsxXSA9IGxhc3RJbmRleDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChleHRyYS5sb2MpIHsKLSAgICAgICAgICAgICAgICB0aGlzLmxvYy5lbmQgPSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGxpbmU6IGxhc3RMaW5lTnVtYmVyLAotICAgICAgICAgICAgICAgICAgICBj
b2x1bW46IGxhc3RJbmRleCAtIGxhc3RMaW5lU3RhcnQKLSAgICAgICAgICAgICAgICB9OwotICAg
ICAgICAgICAgICAgIGlmIChleHRyYS5zb3VyY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhp
cy5sb2Muc291cmNlID0gZXh0cmEuc291cmNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKGV4dHJhLmF0dGFjaENvbW1lbnQpIHsKLSAgICAgICAg
ICAgICAgICB0aGlzLnByb2Nlc3NDb21tZW50KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0s
Ci0KLSAgICAgICAgZmluaXNoQXJyYXlFeHByZXNzaW9uOiBmdW5jdGlvbiAoZWxlbWVudHMpIHsK
LSAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5BcnJheUV4cHJlc3Npb247Ci0gICAgICAg
ICAgICB0aGlzLmVsZW1lbnRzID0gZWxlbWVudHM7Ci0gICAgICAgICAgICB0aGlzLmZpbmlzaCgp
OwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZmluaXNo
QXJyYXlQYXR0ZXJuOiBmdW5jdGlvbiAoZWxlbWVudHMpIHsKLSAgICAgICAgICAgIHRoaXMudHlw
ZSA9IFN5bnRheC5BcnJheVBhdHRlcm47Ci0gICAgICAgICAgICB0aGlzLmVsZW1lbnRzID0gZWxl
bWVudHM7Ci0gICAgICAgICAgICB0aGlzLmZpbmlzaCgpOwotICAgICAgICAgICAgcmV0dXJuIHRo
aXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZmluaXNoQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246
IGZ1bmN0aW9uIChwYXJhbXMsIGRlZmF1bHRzLCBib2R5LCBleHByZXNzaW9uKSB7Ci0gICAgICAg
ICAgICB0aGlzLnR5cGUgPSBTeW50YXguQXJyb3dGdW5jdGlvbkV4cHJlc3Npb247Ci0gICAgICAg
ICAgICB0aGlzLmlkID0gbnVsbDsKLSAgICAgICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zOwot
ICAgICAgICAgICAgdGhpcy5kZWZhdWx0cyA9IGRlZmF1bHRzOwotICAgICAgICAgICAgdGhpcy5i
b2R5ID0gYm9keTsKLSAgICAgICAgICAgIHRoaXMuZ2VuZXJhdG9yID0gZmFsc2U7Ci0gICAgICAg
ICAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uOwotICAgICAgICAgICAgdGhpcy5maW5p
c2goKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAgIGZp
bmlzaEFzc2lnbm1lbnRFeHByZXNzaW9uOiBmdW5jdGlvbiAob3BlcmF0b3IsIGxlZnQsIHJpZ2h0
KSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguQXNzaWdubWVudEV4cHJlc3Npb247
Ci0gICAgICAgICAgICB0aGlzLm9wZXJhdG9yID0gb3BlcmF0b3I7Ci0gICAgICAgICAgICB0aGlz
LmxlZnQgPSBsZWZ0OwotICAgICAgICAgICAgdGhpcy5yaWdodCA9IHJpZ2h0OwotICAgICAgICAg
ICAgdGhpcy5maW5pc2goKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAot
Ci0gICAgICAgIGZpbmlzaEFzc2lnbm1lbnRQYXR0ZXJuOiBmdW5jdGlvbiAobGVmdCwgcmlnaHQp
IHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5Bc3NpZ25tZW50UGF0dGVybjsKLSAg
ICAgICAgICAgIHRoaXMubGVmdCA9IGxlZnQ7Ci0gICAgICAgICAgICB0aGlzLnJpZ2h0ID0gcmln
aHQ7Ci0gICAgICAgICAgICB0aGlzLmZpbmlzaCgpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7
Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZmluaXNoQmluYXJ5RXhwcmVzc2lvbjogZnVuY3Rpb24g
KG9wZXJhdG9yLCBsZWZ0LCByaWdodCkgewotICAgICAgICAgICAgdGhpcy50eXBlID0gKG9wZXJh
dG9yID09PSAnfHwnIHx8IG9wZXJhdG9yID09PSAnJiYnKSA/IFN5bnRheC5Mb2dpY2FsRXhwcmVz
c2lvbiA6IFN5bnRheC5CaW5hcnlFeHByZXNzaW9uOwotICAgICAgICAgICAgdGhpcy5vcGVyYXRv
ciA9IG9wZXJhdG9yOwotICAgICAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDsKLSAgICAgICAgICAg
IHRoaXMucmlnaHQgPSByaWdodDsKLSAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7Ci0gICAgICAg
ICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBmaW5pc2hCbG9ja1N0YXRl
bWVudDogZnVuY3Rpb24gKGJvZHkpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5C
bG9ja1N0YXRlbWVudDsKLSAgICAgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7Ci0gICAgICAgICAg
ICB0aGlzLmZpbmlzaCgpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0K
LSAgICAgICAgZmluaXNoQnJlYWtTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChsYWJlbCkgewotICAgICAg
ICAgICAgdGhpcy50eXBlID0gU3ludGF4LkJyZWFrU3RhdGVtZW50OwotICAgICAgICAgICAgdGhp
cy5sYWJlbCA9IGxhYmVsOwotICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKLSAgICAgICAgICAg
IHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAgIGZpbmlzaENhbGxFeHByZXNzaW9u
OiBmdW5jdGlvbiAoY2FsbGVlLCBhcmdzKSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50
YXguQ2FsbEV4cHJlc3Npb247Ci0gICAgICAgICAgICB0aGlzLmNhbGxlZSA9IGNhbGxlZTsKLSAg
ICAgICAgICAgIHRoaXMuYXJndW1lbnRzID0gYXJnczsKLSAgICAgICAgICAgIHRoaXMuZmluaXNo
KCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBmaW5p
c2hDYXRjaENsYXVzZTogZnVuY3Rpb24gKHBhcmFtLCBib2R5KSB7Ci0gICAgICAgICAgICB0aGlz
LnR5cGUgPSBTeW50YXguQ2F0Y2hDbGF1c2U7Ci0gICAgICAgICAgICB0aGlzLnBhcmFtID0gcGFy
YW07Ci0gICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OwotICAgICAgICAgICAgdGhpcy5maW5p
c2goKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAgIGZp
bmlzaENsYXNzQm9keTogZnVuY3Rpb24gKGJvZHkpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9
IFN5bnRheC5DbGFzc0JvZHk7Ci0gICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OwotICAgICAg
ICAgICAgdGhpcy5maW5pc2goKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9
LAotCi0gICAgICAgIGZpbmlzaENsYXNzRGVjbGFyYXRpb246IGZ1bmN0aW9uIChpZCwgc3VwZXJD
bGFzcywgYm9keSkgewotICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkNsYXNzRGVjbGFy
YXRpb247Ci0gICAgICAgICAgICB0aGlzLmlkID0gaWQ7Ci0gICAgICAgICAgICB0aGlzLnN1cGVy
Q2xhc3MgPSBzdXBlckNsYXNzOwotICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKLSAgICAg
ICAgICAgIHRoaXMuZmluaXNoKCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAg
fSwKLQotICAgICAgICBmaW5pc2hDbGFzc0V4cHJlc3Npb246IGZ1bmN0aW9uIChpZCwgc3VwZXJD
bGFzcywgYm9keSkgewotICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkNsYXNzRXhwcmVz
c2lvbjsKLSAgICAgICAgICAgIHRoaXMuaWQgPSBpZDsKLSAgICAgICAgICAgIHRoaXMuc3VwZXJD
bGFzcyA9IHN1cGVyQ2xhc3M7Ci0gICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OwotICAgICAg
ICAgICAgdGhpcy5maW5pc2goKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9
LAotCi0gICAgICAgIGZpbmlzaENvbmRpdGlvbmFsRXhwcmVzc2lvbjogZnVuY3Rpb24gKHRlc3Qs
IGNvbnNlcXVlbnQsIGFsdGVybmF0ZSkgewotICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4
LkNvbmRpdGlvbmFsRXhwcmVzc2lvbjsKLSAgICAgICAgICAgIHRoaXMudGVzdCA9IHRlc3Q7Ci0g
ICAgICAgICAgICB0aGlzLmNvbnNlcXVlbnQgPSBjb25zZXF1ZW50OwotICAgICAgICAgICAgdGhp
cy5hbHRlcm5hdGUgPSBhbHRlcm5hdGU7Ci0gICAgICAgICAgICB0aGlzLmZpbmlzaCgpOwotICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZmluaXNoQ29udGlu
dWVTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChsYWJlbCkgewotICAgICAgICAgICAgdGhpcy50eXBlID0g
U3ludGF4LkNvbnRpbnVlU3RhdGVtZW50OwotICAgICAgICAgICAgdGhpcy5sYWJlbCA9IGxhYmVs
OwotICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwot
ICAgICAgICB9LAotCi0gICAgICAgIGZpbmlzaERlYnVnZ2VyU3RhdGVtZW50OiBmdW5jdGlvbiAo
KSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguRGVidWdnZXJTdGF0ZW1lbnQ7Ci0g
ICAgICAgICAgICB0aGlzLmZpbmlzaCgpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAg
ICAgIH0sCi0KLSAgICAgICAgZmluaXNoRG9XaGlsZVN0YXRlbWVudDogZnVuY3Rpb24gKGJvZHks
IHRlc3QpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5Eb1doaWxlU3RhdGVtZW50
OwotICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKLSAgICAgICAgICAgIHRoaXMudGVzdCA9
IHRlc3Q7Ci0gICAgICAgICAgICB0aGlzLmZpbmlzaCgpOwotICAgICAgICAgICAgcmV0dXJuIHRo
aXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZmluaXNoRW1wdHlTdGF0ZW1lbnQ6IGZ1bmN0aW9u
ICgpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5FbXB0eVN0YXRlbWVudDsKLSAg
ICAgICAgICAgIHRoaXMuZmluaXNoKCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAg
ICAgfSwKLQotICAgICAgICBmaW5pc2hFeHByZXNzaW9uU3RhdGVtZW50OiBmdW5jdGlvbiAoZXhw
cmVzc2lvbikgewotICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkV4cHJlc3Npb25TdGF0
ZW1lbnQ7Ci0gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uOwotICAgICAg
ICAgICAgdGhpcy5maW5pc2goKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9
LAotCi0gICAgICAgIGZpbmlzaEZvclN0YXRlbWVudDogZnVuY3Rpb24gKGluaXQsIHRlc3QsIHVw
ZGF0ZSwgYm9keSkgewotICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkZvclN0YXRlbWVu
dDsKLSAgICAgICAgICAgIHRoaXMuaW5pdCA9IGluaXQ7Ci0gICAgICAgICAgICB0aGlzLnRlc3Qg
PSB0ZXN0OwotICAgICAgICAgICAgdGhpcy51cGRhdGUgPSB1cGRhdGU7Ci0gICAgICAgICAgICB0
aGlzLmJvZHkgPSBib2R5OwotICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKLSAgICAgICAgICAg
IHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAgIGZpbmlzaEZvck9mU3RhdGVtZW50
OiBmdW5jdGlvbiAobGVmdCwgcmlnaHQsIGJvZHkpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9
IFN5bnRheC5Gb3JPZlN0YXRlbWVudDsKLSAgICAgICAgICAgIHRoaXMubGVmdCA9IGxlZnQ7Ci0g
ICAgICAgICAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7Ci0gICAgICAgICAgICB0aGlzLmJvZHkgPSBi
b2R5OwotICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlz
OwotICAgICAgICB9LAotCi0gICAgICAgIGZpbmlzaEZvckluU3RhdGVtZW50OiBmdW5jdGlvbiAo
bGVmdCwgcmlnaHQsIGJvZHkpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5Gb3JJ
blN0YXRlbWVudDsKLSAgICAgICAgICAgIHRoaXMubGVmdCA9IGxlZnQ7Ci0gICAgICAgICAgICB0
aGlzLnJpZ2h0ID0gcmlnaHQ7Ci0gICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OwotICAgICAg
ICAgICAgdGhpcy5lYWNoID0gZmFsc2U7Ci0gICAgICAgICAgICB0aGlzLmZpbmlzaCgpOwotICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZmluaXNoRnVuY3Rp
b25EZWNsYXJhdGlvbjogZnVuY3Rpb24gKGlkLCBwYXJhbXMsIGRlZmF1bHRzLCBib2R5LCBnZW5l
cmF0b3IpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5GdW5jdGlvbkRlY2xhcmF0
aW9uOwotICAgICAgICAgICAgdGhpcy5pZCA9IGlkOwotICAgICAgICAgICAgdGhpcy5wYXJhbXMg
PSBwYXJhbXM7Ci0gICAgICAgICAgICB0aGlzLmRlZmF1bHRzID0gZGVmYXVsdHM7Ci0gICAgICAg
ICAgICB0aGlzLmJvZHkgPSBib2R5OwotICAgICAgICAgICAgdGhpcy5nZW5lcmF0b3IgPSBnZW5l
cmF0b3I7Ci0gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBmYWxzZTsKLSAgICAgICAgICAg
IHRoaXMuZmluaXNoKCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQot
ICAgICAgICBmaW5pc2hGdW5jdGlvbkV4cHJlc3Npb246IGZ1bmN0aW9uIChpZCwgcGFyYW1zLCBk
ZWZhdWx0cywgYm9keSwgZ2VuZXJhdG9yKSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50
YXguRnVuY3Rpb25FeHByZXNzaW9uOwotICAgICAgICAgICAgdGhpcy5pZCA9IGlkOwotICAgICAg
ICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7Ci0gICAgICAgICAgICB0aGlzLmRlZmF1bHRzID0g
ZGVmYXVsdHM7Ci0gICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OwotICAgICAgICAgICAgdGhp
cy5nZW5lcmF0b3IgPSBnZW5lcmF0b3I7Ci0gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBm
YWxzZTsKLSAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhp
czsKLSAgICAgICAgfSwKLQotICAgICAgICBmaW5pc2hJZGVudGlmaWVyOiBmdW5jdGlvbiAobmFt
ZSkgewotICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LklkZW50aWZpZXI7Ci0gICAgICAg
ICAgICB0aGlzLm5hbWUgPSBuYW1lOwotICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKLSAgICAg
ICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAgIGZpbmlzaElmU3RhdGVt
ZW50OiBmdW5jdGlvbiAodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKSB7Ci0gICAgICAgICAg
ICB0aGlzLnR5cGUgPSBTeW50YXguSWZTdGF0ZW1lbnQ7Ci0gICAgICAgICAgICB0aGlzLnRlc3Qg
PSB0ZXN0OwotICAgICAgICAgICAgdGhpcy5jb25zZXF1ZW50ID0gY29uc2VxdWVudDsKLSAgICAg
ICAgICAgIHRoaXMuYWx0ZXJuYXRlID0gYWx0ZXJuYXRlOwotICAgICAgICAgICAgdGhpcy5maW5p
c2goKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAgIGZp
bmlzaExhYmVsZWRTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChsYWJlbCwgYm9keSkgewotICAgICAgICAg
ICAgdGhpcy50eXBlID0gU3ludGF4LkxhYmVsZWRTdGF0ZW1lbnQ7Ci0gICAgICAgICAgICB0aGlz
LmxhYmVsID0gbGFiZWw7Ci0gICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OwotICAgICAgICAg
ICAgdGhpcy5maW5pc2goKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAot
Ci0gICAgICAgIGZpbmlzaExpdGVyYWw6IGZ1bmN0aW9uICh0b2tlbikgewotICAgICAgICAgICAg
dGhpcy50eXBlID0gU3ludGF4LkxpdGVyYWw7Ci0gICAgICAgICAgICB0aGlzLnZhbHVlID0gdG9r
ZW4udmFsdWU7Ci0gICAgICAgICAgICB0aGlzLnJhdyA9IHNvdXJjZS5zbGljZSh0b2tlbi5zdGFy
dCwgdG9rZW4uZW5kKTsKLSAgICAgICAgICAgIGlmICh0b2tlbi5yZWdleCkgewotICAgICAgICAg
ICAgICAgIHRoaXMucmVnZXggPSB0b2tlbi5yZWdleDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHRoaXMuZmluaXNoKCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwK
LQotICAgICAgICBmaW5pc2hNZW1iZXJFeHByZXNzaW9uOiBmdW5jdGlvbiAoYWNjZXNzb3IsIG9i
amVjdCwgcHJvcGVydHkpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5NZW1iZXJF
eHByZXNzaW9uOwotICAgICAgICAgICAgdGhpcy5jb21wdXRlZCA9IGFjY2Vzc29yID09PSAnWyc7
Ci0gICAgICAgICAgICB0aGlzLm9iamVjdCA9IG9iamVjdDsKLSAgICAgICAgICAgIHRoaXMucHJv
cGVydHkgPSBwcm9wZXJ0eTsKLSAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBmaW5pc2hNZXRhUHJvcGVydHk6
IGZ1bmN0aW9uIChtZXRhLCBwcm9wZXJ0eSkgewotICAgICAgICAgICAgdGhpcy50eXBlID0gU3lu
dGF4Lk1ldGFQcm9wZXJ0eTsKLSAgICAgICAgICAgIHRoaXMubWV0YSA9IG1ldGE7Ci0gICAgICAg
ICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7Ci0gICAgICAgICAgICB0aGlzLmZpbmlzaCgp
OwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZmluaXNo
TmV3RXhwcmVzc2lvbjogZnVuY3Rpb24gKGNhbGxlZSwgYXJncykgewotICAgICAgICAgICAgdGhp
cy50eXBlID0gU3ludGF4Lk5ld0V4cHJlc3Npb247Ci0gICAgICAgICAgICB0aGlzLmNhbGxlZSA9
IGNhbGxlZTsKLSAgICAgICAgICAgIHRoaXMuYXJndW1lbnRzID0gYXJnczsKLSAgICAgICAgICAg
IHRoaXMuZmluaXNoKCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQot
ICAgICAgICBmaW5pc2hPYmplY3RFeHByZXNzaW9uOiBmdW5jdGlvbiAocHJvcGVydGllcykgewot
ICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4Lk9iamVjdEV4cHJlc3Npb247Ci0gICAgICAg
ICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOwotICAgICAgICAgICAgdGhpcy5maW5p
c2goKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAgIGZp
bmlzaE9iamVjdFBhdHRlcm46IGZ1bmN0aW9uIChwcm9wZXJ0aWVzKSB7Ci0gICAgICAgICAgICB0
aGlzLnR5cGUgPSBTeW50YXguT2JqZWN0UGF0dGVybjsKLSAgICAgICAgICAgIHRoaXMucHJvcGVy
dGllcyA9IHByb3BlcnRpZXM7Ci0gICAgICAgICAgICB0aGlzLmZpbmlzaCgpOwotICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZmluaXNoUG9zdGZpeEV4cHJl
c3Npb246IGZ1bmN0aW9uIChvcGVyYXRvciwgYXJndW1lbnQpIHsKLSAgICAgICAgICAgIHRoaXMu
dHlwZSA9IFN5bnRheC5VcGRhdGVFeHByZXNzaW9uOwotICAgICAgICAgICAgdGhpcy5vcGVyYXRv
ciA9IG9wZXJhdG9yOwotICAgICAgICAgICAgdGhpcy5hcmd1bWVudCA9IGFyZ3VtZW50OwotICAg
ICAgICAgICAgdGhpcy5wcmVmaXggPSBmYWxzZTsKLSAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7
Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBmaW5pc2hQ
cm9ncmFtOiBmdW5jdGlvbiAoYm9keSwgc291cmNlVHlwZSkgewotICAgICAgICAgICAgdGhpcy50
eXBlID0gU3ludGF4LlByb2dyYW07Ci0gICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OwotICAg
ICAgICAgICAgdGhpcy5zb3VyY2VUeXBlID0gc291cmNlVHlwZTsKLSAgICAgICAgICAgIHRoaXMu
ZmluaXNoKCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAg
ICBmaW5pc2hQcm9wZXJ0eTogZnVuY3Rpb24gKGtpbmQsIGtleSwgY29tcHV0ZWQsIHZhbHVlLCBt
ZXRob2QsIHNob3J0aGFuZCkgewotICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LlByb3Bl
cnR5OwotICAgICAgICAgICAgdGhpcy5rZXkgPSBrZXk7Ci0gICAgICAgICAgICB0aGlzLmNvbXB1
dGVkID0gY29tcHV0ZWQ7Ci0gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7Ci0gICAgICAg
ICAgICB0aGlzLmtpbmQgPSBraW5kOwotICAgICAgICAgICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7
Ci0gICAgICAgICAgICB0aGlzLnNob3J0aGFuZCA9IHNob3J0aGFuZDsKLSAgICAgICAgICAgIHRo
aXMuZmluaXNoKCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAg
ICAgICBmaW5pc2hSZXN0RWxlbWVudDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7Ci0gICAgICAgICAg
ICB0aGlzLnR5cGUgPSBTeW50YXguUmVzdEVsZW1lbnQ7Ci0gICAgICAgICAgICB0aGlzLmFyZ3Vt
ZW50ID0gYXJndW1lbnQ7Ci0gICAgICAgICAgICB0aGlzLmZpbmlzaCgpOwotICAgICAgICAgICAg
cmV0dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZmluaXNoUmV0dXJuU3RhdGVtZW50
OiBmdW5jdGlvbiAoYXJndW1lbnQpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5S
ZXR1cm5TdGF0ZW1lbnQ7Ci0gICAgICAgICAgICB0aGlzLmFyZ3VtZW50ID0gYXJndW1lbnQ7Ci0g
ICAgICAgICAgICB0aGlzLmZpbmlzaCgpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAg
ICAgIH0sCi0KLSAgICAgICAgZmluaXNoU2VxdWVuY2VFeHByZXNzaW9uOiBmdW5jdGlvbiAoZXhw
cmVzc2lvbnMpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5TZXF1ZW5jZUV4cHJl
c3Npb247Ci0gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25zID0gZXhwcmVzc2lvbnM7Ci0gICAg
ICAgICAgICB0aGlzLmZpbmlzaCgpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAg
IH0sCi0KLSAgICAgICAgZmluaXNoU3ByZWFkRWxlbWVudDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7
Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguU3ByZWFkRWxlbWVudDsKLSAgICAgICAg
ICAgIHRoaXMuYXJndW1lbnQgPSBhcmd1bWVudDsKLSAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7
Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBmaW5pc2hT
d2l0Y2hDYXNlOiBmdW5jdGlvbiAodGVzdCwgY29uc2VxdWVudCkgewotICAgICAgICAgICAgdGhp
cy50eXBlID0gU3ludGF4LlN3aXRjaENhc2U7Ci0gICAgICAgICAgICB0aGlzLnRlc3QgPSB0ZXN0
OwotICAgICAgICAgICAgdGhpcy5jb25zZXF1ZW50ID0gY29uc2VxdWVudDsKLSAgICAgICAgICAg
IHRoaXMuZmluaXNoKCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQot
ICAgICAgICBmaW5pc2hTdXBlcjogZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgdGhpcy50eXBl
ID0gU3ludGF4LlN1cGVyOwotICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKLSAgICAgICAgICAg
IHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAgIGZpbmlzaFN3aXRjaFN0YXRlbWVu
dDogZnVuY3Rpb24gKGRpc2NyaW1pbmFudCwgY2FzZXMpIHsKLSAgICAgICAgICAgIHRoaXMudHlw
ZSA9IFN5bnRheC5Td2l0Y2hTdGF0ZW1lbnQ7Ci0gICAgICAgICAgICB0aGlzLmRpc2NyaW1pbmFu
dCA9IGRpc2NyaW1pbmFudDsKLSAgICAgICAgICAgIHRoaXMuY2FzZXMgPSBjYXNlczsKLSAgICAg
ICAgICAgIHRoaXMuZmluaXNoKCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAg
fSwKLQotICAgICAgICBmaW5pc2hUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb246IGZ1bmN0aW9uICh0
YWcsIHF1YXNpKSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguVGFnZ2VkVGVtcGxh
dGVFeHByZXNzaW9uOwotICAgICAgICAgICAgdGhpcy50YWcgPSB0YWc7Ci0gICAgICAgICAgICB0
aGlzLnF1YXNpID0gcXVhc2k7Ci0gICAgICAgICAgICB0aGlzLmZpbmlzaCgpOwotICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZmluaXNoVGVtcGxhdGVFbGVt
ZW50OiBmdW5jdGlvbiAodmFsdWUsIHRhaWwpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5
bnRheC5UZW1wbGF0ZUVsZW1lbnQ7Ci0gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7Ci0g
ICAgICAgICAgICB0aGlzLnRhaWwgPSB0YWlsOwotICAgICAgICAgICAgdGhpcy5maW5pc2goKTsK
LSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAgIGZpbmlzaFRl
bXBsYXRlTGl0ZXJhbDogZnVuY3Rpb24gKHF1YXNpcywgZXhwcmVzc2lvbnMpIHsKLSAgICAgICAg
ICAgIHRoaXMudHlwZSA9IFN5bnRheC5UZW1wbGF0ZUxpdGVyYWw7Ci0gICAgICAgICAgICB0aGlz
LnF1YXNpcyA9IHF1YXNpczsKLSAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbnMgPSBleHByZXNz
aW9uczsKLSAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhp
czsKLSAgICAgICAgfSwKLQotICAgICAgICBmaW5pc2hUaGlzRXhwcmVzc2lvbjogZnVuY3Rpb24g
KCkgewotICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LlRoaXNFeHByZXNzaW9uOwotICAg
ICAgICAgICAgdGhpcy5maW5pc2goKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAg
ICB9LAotCi0gICAgICAgIGZpbmlzaFRocm93U3RhdGVtZW50OiBmdW5jdGlvbiAoYXJndW1lbnQp
IHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5UaHJvd1N0YXRlbWVudDsKLSAgICAg
ICAgICAgIHRoaXMuYXJndW1lbnQgPSBhcmd1bWVudDsKLSAgICAgICAgICAgIHRoaXMuZmluaXNo
KCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBmaW5p
c2hUcnlTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChibG9jaywgaGFuZGxlciwgZmluYWxpemVyKSB7Ci0g
ICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguVHJ5U3RhdGVtZW50OwotICAgICAgICAgICAg
dGhpcy5ibG9jayA9IGJsb2NrOwotICAgICAgICAgICAgdGhpcy5ndWFyZGVkSGFuZGxlcnMgPSBb
XTsKLSAgICAgICAgICAgIHRoaXMuaGFuZGxlcnMgPSBoYW5kbGVyID8gW2hhbmRsZXJdIDogW107
Ci0gICAgICAgICAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyOwotICAgICAgICAgICAgdGhpcy5m
aW5hbGl6ZXIgPSBmaW5hbGl6ZXI7Ci0gICAgICAgICAgICB0aGlzLmZpbmlzaCgpOwotICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZmluaXNoVW5hcnlFeHBy
ZXNzaW9uOiBmdW5jdGlvbiAob3BlcmF0b3IsIGFyZ3VtZW50KSB7Ci0gICAgICAgICAgICB0aGlz
LnR5cGUgPSAob3BlcmF0b3IgPT09ICcrKycgfHwgb3BlcmF0b3IgPT09ICctLScpID8gU3ludGF4
LlVwZGF0ZUV4cHJlc3Npb24gOiBTeW50YXguVW5hcnlFeHByZXNzaW9uOwotICAgICAgICAgICAg
dGhpcy5vcGVyYXRvciA9IG9wZXJhdG9yOwotICAgICAgICAgICAgdGhpcy5hcmd1bWVudCA9IGFy
Z3VtZW50OwotICAgICAgICAgICAgdGhpcy5wcmVmaXggPSB0cnVlOwotICAgICAgICAgICAgdGhp
cy5maW5pc2goKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAg
ICAgIGZpbmlzaFZhcmlhYmxlRGVjbGFyYXRpb246IGZ1bmN0aW9uIChkZWNsYXJhdGlvbnMpIHsK
LSAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5WYXJpYWJsZURlY2xhcmF0aW9uOwotICAg
ICAgICAgICAgdGhpcy5kZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnM7Ci0gICAgICAgICAgICB0
aGlzLmtpbmQgPSAndmFyJzsKLSAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBmaW5pc2hMZXhpY2FsRGVjbGFy
YXRpb246IGZ1bmN0aW9uIChkZWNsYXJhdGlvbnMsIGtpbmQpIHsKLSAgICAgICAgICAgIHRoaXMu
dHlwZSA9IFN5bnRheC5WYXJpYWJsZURlY2xhcmF0aW9uOwotICAgICAgICAgICAgdGhpcy5kZWNs
YXJhdGlvbnMgPSBkZWNsYXJhdGlvbnM7Ci0gICAgICAgICAgICB0aGlzLmtpbmQgPSBraW5kOwot
ICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAg
ICAgICB9LAotCi0gICAgICAgIGZpbmlzaFZhcmlhYmxlRGVjbGFyYXRvcjogZnVuY3Rpb24gKGlk
LCBpbml0KSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguVmFyaWFibGVEZWNsYXJh
dG9yOwotICAgICAgICAgICAgdGhpcy5pZCA9IGlkOwotICAgICAgICAgICAgdGhpcy5pbml0ID0g
aW5pdDsKLSAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhp
czsKLSAgICAgICAgfSwKLQotICAgICAgICBmaW5pc2hXaGlsZVN0YXRlbWVudDogZnVuY3Rpb24g
KHRlc3QsIGJvZHkpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5XaGlsZVN0YXRl
bWVudDsKLSAgICAgICAgICAgIHRoaXMudGVzdCA9IHRlc3Q7Ci0gICAgICAgICAgICB0aGlzLmJv
ZHkgPSBib2R5OwotICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKLSAgICAgICAgICAgIHJldHVy
biB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAgIGZpbmlzaFdpdGhTdGF0ZW1lbnQ6IGZ1bmN0
aW9uIChvYmplY3QsIGJvZHkpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5XaXRo
U3RhdGVtZW50OwotICAgICAgICAgICAgdGhpcy5vYmplY3QgPSBvYmplY3Q7Ci0gICAgICAgICAg
ICB0aGlzLmJvZHkgPSBib2R5OwotICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKLSAgICAgICAg
ICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAgIGZpbmlzaEV4cG9ydFNwZWNp
ZmllcjogZnVuY3Rpb24gKGxvY2FsLCBleHBvcnRlZCkgewotICAgICAgICAgICAgdGhpcy50eXBl
ID0gU3ludGF4LkV4cG9ydFNwZWNpZmllcjsKLSAgICAgICAgICAgIHRoaXMuZXhwb3J0ZWQgPSBl
eHBvcnRlZCB8fCBsb2NhbDsKLSAgICAgICAgICAgIHRoaXMubG9jYWwgPSBsb2NhbDsKLSAgICAg
ICAgICAgIHRoaXMuZmluaXNoKCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAg
fSwKLQotICAgICAgICBmaW5pc2hJbXBvcnREZWZhdWx0U3BlY2lmaWVyOiBmdW5jdGlvbiAobG9j
YWwpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5JbXBvcnREZWZhdWx0U3BlY2lm
aWVyOwotICAgICAgICAgICAgdGhpcy5sb2NhbCA9IGxvY2FsOwotICAgICAgICAgICAgdGhpcy5m
aW5pc2goKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAg
IGZpbmlzaEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjogZnVuY3Rpb24gKGxvY2FsKSB7Ci0gICAg
ICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyOwotICAg
ICAgICAgICAgdGhpcy5sb2NhbCA9IGxvY2FsOwotICAgICAgICAgICAgdGhpcy5maW5pc2goKTsK
LSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAgIGZpbmlzaEV4
cG9ydE5hbWVkRGVjbGFyYXRpb246IGZ1bmN0aW9uIChkZWNsYXJhdGlvbiwgc3BlY2lmaWVycywg
c3JjKSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguRXhwb3J0TmFtZWREZWNsYXJh
dGlvbjsKLSAgICAgICAgICAgIHRoaXMuZGVjbGFyYXRpb24gPSBkZWNsYXJhdGlvbjsKLSAgICAg
ICAgICAgIHRoaXMuc3BlY2lmaWVycyA9IHNwZWNpZmllcnM7Ci0gICAgICAgICAgICB0aGlzLnNv
dXJjZSA9IHNyYzsKLSAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7Ci0gICAgICAgICAgICByZXR1
cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBmaW5pc2hFeHBvcnREZWZhdWx0RGVjbGFy
YXRpb246IGZ1bmN0aW9uIChkZWNsYXJhdGlvbikgewotICAgICAgICAgICAgdGhpcy50eXBlID0g
U3ludGF4LkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbjsKLSAgICAgICAgICAgIHRoaXMuZGVjbGFy
YXRpb24gPSBkZWNsYXJhdGlvbjsKLSAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7Ci0gICAgICAg
ICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBmaW5pc2hFeHBvcnRBbGxE
ZWNsYXJhdGlvbjogZnVuY3Rpb24gKHNyYykgewotICAgICAgICAgICAgdGhpcy50eXBlID0gU3lu
dGF4LkV4cG9ydEFsbERlY2xhcmF0aW9uOwotICAgICAgICAgICAgdGhpcy5zb3VyY2UgPSBzcmM7
Ci0gICAgICAgICAgICB0aGlzLmZpbmlzaCgpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0g
ICAgICAgIH0sCi0KLSAgICAgICAgZmluaXNoSW1wb3J0U3BlY2lmaWVyOiBmdW5jdGlvbiAobG9j
YWwsIGltcG9ydGVkKSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguSW1wb3J0U3Bl
Y2lmaWVyOwotICAgICAgICAgICAgdGhpcy5sb2NhbCA9IGxvY2FsIHx8IGltcG9ydGVkOwotICAg
ICAgICAgICAgdGhpcy5pbXBvcnRlZCA9IGltcG9ydGVkOwotICAgICAgICAgICAgdGhpcy5maW5p
c2goKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAgIGZp
bmlzaEltcG9ydERlY2xhcmF0aW9uOiBmdW5jdGlvbiAoc3BlY2lmaWVycywgc3JjKSB7Ci0gICAg
ICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguSW1wb3J0RGVjbGFyYXRpb247Ci0gICAgICAgICAg
ICB0aGlzLnNwZWNpZmllcnMgPSBzcGVjaWZpZXJzOwotICAgICAgICAgICAgdGhpcy5zb3VyY2Ug
PSBzcmM7Ci0gICAgICAgICAgICB0aGlzLmZpbmlzaCgpOwotICAgICAgICAgICAgcmV0dXJuIHRo
aXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZmluaXNoWWllbGRFeHByZXNzaW9uOiBmdW5jdGlv
biAoYXJndW1lbnQsIGRlbGVnYXRlKSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXgu
WWllbGRFeHByZXNzaW9uOwotICAgICAgICAgICAgdGhpcy5hcmd1bWVudCA9IGFyZ3VtZW50Owot
ICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZSA9IGRlbGVnYXRlOwotICAgICAgICAgICAgdGhpcy5m
aW5pc2goKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0gICAgfTsKLQot
Ci0gICAgZnVuY3Rpb24gcmVjb3JkRXJyb3IoZXJyb3IpIHsKLSAgICAgICAgdmFyIGUsIGV4aXN0
aW5nOwotCi0gICAgICAgIGZvciAoZSA9IDA7IGUgPCBleHRyYS5lcnJvcnMubGVuZ3RoOyBlKysp
IHsKLSAgICAgICAgICAgIGV4aXN0aW5nID0gZXh0cmEuZXJyb3JzW2VdOwotICAgICAgICAgICAg
Ly8gUHJldmVudCBkdXBsaWNhdGVkIGVycm9yLgotICAgICAgICAgICAgLyogaXN0YW5idWwgaWdu
b3JlIG5leHQgKi8KLSAgICAgICAgICAgIGlmIChleGlzdGluZy5pbmRleCA9PT0gZXJyb3IuaW5k
ZXggJiYgZXhpc3RpbmcubWVzc2FnZSA9PT0gZXJyb3IubWVzc2FnZSkgewotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGV4dHJhLmVy
cm9ycy5wdXNoKGVycm9yKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBjb25zdHJ1Y3RFcnJvciht
c2csIGNvbHVtbikgewotICAgICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IobXNnKTsKLSAgICAg
ICAgdHJ5IHsKLSAgICAgICAgICAgIHRocm93IGVycm9yOwotICAgICAgICB9IGNhdGNoIChiYXNl
KSB7Ci0gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqLwotICAgICAgICAgICAg
aWYgKE9iamVjdC5jcmVhdGUgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7Ci0gICAgICAgICAg
ICAgICAgZXJyb3IgPSBPYmplY3QuY3JlYXRlKGJhc2UpOwotICAgICAgICAgICAgICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShlcnJvciwgJ2NvbHVtbicsIHsgdmFsdWU6IGNvbHVtbiB9KTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIHJldHVybiBlcnJv
cjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIGNyZWF0ZUVycm9yKGxpbmUsIHBv
cywgZGVzY3JpcHRpb24pIHsKLSAgICAgICAgdmFyIG1zZywgY29sdW1uLCBlcnJvcjsKLQotICAg
ICAgICBtc2cgPSAnTGluZSAnICsgbGluZSArICc6ICcgKyBkZXNjcmlwdGlvbjsKLSAgICAgICAg
Y29sdW1uID0gcG9zIC0gKHNjYW5uaW5nID8gbGluZVN0YXJ0IDogbGFzdExpbmVTdGFydCkgKyAx
OwotICAgICAgICBlcnJvciA9IGNvbnN0cnVjdEVycm9yKG1zZywgY29sdW1uKTsKLSAgICAgICAg
ZXJyb3IubGluZU51bWJlciA9IGxpbmU7Ci0gICAgICAgIGVycm9yLmRlc2NyaXB0aW9uID0gZGVz
Y3JpcHRpb247Ci0gICAgICAgIGVycm9yLmluZGV4ID0gcG9zOwotICAgICAgICByZXR1cm4gZXJy
b3I7Ci0gICAgfQotCi0gICAgLy8gVGhyb3cgYW4gZXhjZXB0aW9uCi0KLSAgICBmdW5jdGlvbiB0
aHJvd0Vycm9yKG1lc3NhZ2VGb3JtYXQpIHsKLSAgICAgICAgdmFyIGFyZ3MsIG1zZzsKLQotICAg
ICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKLSAg
ICAgICAgbXNnID0gbWVzc2FnZUZvcm1hdC5yZXBsYWNlKC8lKFxkKS9nLAotICAgICAgICAgICAg
ZnVuY3Rpb24gKHdob2xlLCBpZHgpIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQoaWR4IDwgYXJn
cy5sZW5ndGgsICdNZXNzYWdlIHJlZmVyZW5jZSBtdXN0IGJlIGluIHJhbmdlJyk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGFyZ3NbaWR4XTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLQot
ICAgICAgICB0aHJvdyBjcmVhdGVFcnJvcihsYXN0TGluZU51bWJlciwgbGFzdEluZGV4LCBtc2cp
OwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHRvbGVyYXRlRXJyb3IobWVzc2FnZUZvcm1hdCkgewot
ICAgICAgICB2YXIgYXJncywgbXNnLCBlcnJvcjsKLQotICAgICAgICBhcmdzID0gQXJyYXkucHJv
dG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsKLSAgICAgICAgLyogaXN0YW5idWwgaWdu
b3JlIG5leHQgKi8KLSAgICAgICAgbXNnID0gbWVzc2FnZUZvcm1hdC5yZXBsYWNlKC8lKFxkKS9n
LAotICAgICAgICAgICAgZnVuY3Rpb24gKHdob2xlLCBpZHgpIHsKLSAgICAgICAgICAgICAgICBh
c3NlcnQoaWR4IDwgYXJncy5sZW5ndGgsICdNZXNzYWdlIHJlZmVyZW5jZSBtdXN0IGJlIGluIHJh
bmdlJyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3NbaWR4XTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgKTsKLQotICAgICAgICBlcnJvciA9IGNyZWF0ZUVycm9yKGxpbmVOdW1iZXIsIGxh
c3RJbmRleCwgbXNnKTsKLSAgICAgICAgaWYgKGV4dHJhLmVycm9ycykgewotICAgICAgICAgICAg
cmVjb3JkRXJyb3IoZXJyb3IpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGhyb3cg
ZXJyb3I7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaHJvdyBhbiBleGNlcHRpb24gYmVj
YXVzZSBvZiB0aGUgdG9rZW4uCi0KLSAgICBmdW5jdGlvbiB1bmV4cGVjdGVkVG9rZW5FcnJvcih0
b2tlbiwgbWVzc2FnZSkgewotICAgICAgICB2YXIgdmFsdWUsIG1zZyA9IG1lc3NhZ2UgfHwgTWVz
c2FnZXMuVW5leHBlY3RlZFRva2VuOwotCi0gICAgICAgIGlmICh0b2tlbikgewotICAgICAgICAg
ICAgaWYgKCFtZXNzYWdlKSB7Ci0gICAgICAgICAgICAgICAgbXNnID0gKHRva2VuLnR5cGUgPT09
IFRva2VuLkVPRikgPyBNZXNzYWdlcy5VbmV4cGVjdGVkRU9TIDoKLSAgICAgICAgICAgICAgICAg
ICAgKHRva2VuLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIpID8gTWVzc2FnZXMuVW5leHBlY3Rl
ZElkZW50aWZpZXIgOgotICAgICAgICAgICAgICAgICAgICAodG9rZW4udHlwZSA9PT0gVG9rZW4u
TnVtZXJpY0xpdGVyYWwpID8gTWVzc2FnZXMuVW5leHBlY3RlZE51bWJlciA6Ci0gICAgICAgICAg
ICAgICAgICAgICh0b2tlbi50eXBlID09PSBUb2tlbi5TdHJpbmdMaXRlcmFsKSA/IE1lc3NhZ2Vz
LlVuZXhwZWN0ZWRTdHJpbmcgOgotICAgICAgICAgICAgICAgICAgICAodG9rZW4udHlwZSA9PT0g
VG9rZW4uVGVtcGxhdGUpID8gTWVzc2FnZXMuVW5leHBlY3RlZFRlbXBsYXRlIDoKLSAgICAgICAg
ICAgICAgICAgICAgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuOwotCi0gICAgICAgICAgICAgICAg
aWYgKHRva2VuLnR5cGUgPT09IFRva2VuLktleXdvcmQpIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGlzRnV0dXJlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgbXNnID0gTWVzc2FnZXMuVW5leHBlY3RlZFJlc2VydmVkOwotICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKHN0cmljdCAmJiBpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9r
ZW4udmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBNZXNzYWdlcy5TdHJp
Y3RSZXNlcnZlZFdvcmQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhbHVlID0gKHRva2VuLnR5cGUgPT09IFRv
a2VuLlRlbXBsYXRlKSA/IHRva2VuLnZhbHVlLnJhdyA6IHRva2VuLnZhbHVlOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgdmFsdWUgPSAnSUxMRUdBTCc7Ci0gICAgICAgIH0KLQotICAg
ICAgICBtc2cgPSBtc2cucmVwbGFjZSgnJTAnLCB2YWx1ZSk7Ci0KLSAgICAgICAgcmV0dXJuICh0
b2tlbiAmJiB0eXBlb2YgdG9rZW4ubGluZU51bWJlciA9PT0gJ251bWJlcicpID8KLSAgICAgICAg
ICAgIGNyZWF0ZUVycm9yKHRva2VuLmxpbmVOdW1iZXIsIHRva2VuLnN0YXJ0LCBtc2cpIDoKLSAg
ICAgICAgICAgIGNyZWF0ZUVycm9yKHNjYW5uaW5nID8gbGluZU51bWJlciA6IGxhc3RMaW5lTnVt
YmVyLCBzY2FubmluZyA/IGluZGV4IDogbGFzdEluZGV4LCBtc2cpOwotICAgIH0KLQotICAgIGZ1
bmN0aW9uIHRocm93VW5leHBlY3RlZFRva2VuKHRva2VuLCBtZXNzYWdlKSB7Ci0gICAgICAgIHRo
cm93IHVuZXhwZWN0ZWRUb2tlbkVycm9yKHRva2VuLCBtZXNzYWdlKTsKLSAgICB9Ci0KLSAgICBm
dW5jdGlvbiB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0b2tlbiwgbWVzc2FnZSkgewotICAgICAg
ICB2YXIgZXJyb3IgPSB1bmV4cGVjdGVkVG9rZW5FcnJvcih0b2tlbiwgbWVzc2FnZSk7Ci0gICAg
ICAgIGlmIChleHRyYS5lcnJvcnMpIHsKLSAgICAgICAgICAgIHJlY29yZEVycm9yKGVycm9yKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRocm93IGVycm9yOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgLy8gRXhwZWN0IHRoZSBuZXh0IHRva2VuIHRvIG1hdGNoIHRoZSBzcGVjaWZp
ZWQgcHVuY3R1YXRvci4KLSAgICAvLyBJZiBub3QsIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93
bi4KLQotICAgIGZ1bmN0aW9uIGV4cGVjdCh2YWx1ZSkgewotICAgICAgICB2YXIgdG9rZW4gPSBs
ZXgoKTsKLSAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLlB1bmN0dWF0b3IgfHwgdG9r
ZW4udmFsdWUgIT09IHZhbHVlKSB7Ci0gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbih0
b2tlbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAbmFtZSBleHBlY3RD
b21tYVNlcGFyYXRvcgotICAgICAqIEBkZXNjcmlwdGlvbiBRdWlldGx5IGV4cGVjdCBhIGNvbW1h
IHdoZW4gaW4gdG9sZXJhbnQgbW9kZSwgb3RoZXJ3aXNlIGRlbGVnYXRlcwotICAgICAqIHRvIDxj
b2RlPmV4cGVjdCh2YWx1ZSk8L2NvZGU+Ci0gICAgICogQHNpbmNlIDIuMAotICAgICAqLwotICAg
IGZ1bmN0aW9uIGV4cGVjdENvbW1hU2VwYXJhdG9yKCkgewotICAgICAgICB2YXIgdG9rZW47Ci0K
LSAgICAgICAgaWYgKGV4dHJhLmVycm9ycykgewotICAgICAgICAgICAgdG9rZW4gPSBsb29rYWhl
YWQ7Ci0gICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvciAmJiB0
b2tlbi52YWx1ZSA9PT0gJywnKSB7Ci0gICAgICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IgJiYgdG9rZW4udmFs
dWUgPT09ICc7JykgewotICAgICAgICAgICAgICAgIGxleCgpOwotICAgICAgICAgICAgICAgIHRv
bGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIE1lc3NhZ2VzLlVuZXhw
ZWN0ZWRUb2tlbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBleHBlY3QoJywnKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEV4cGVjdCB0aGUgbmV4
dCB0b2tlbiB0byBtYXRjaCB0aGUgc3BlY2lmaWVkIGtleXdvcmQuCi0gICAgLy8gSWYgbm90LCBh
biBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24uCi0KLSAgICBmdW5jdGlvbiBleHBlY3RLZXl3b3Jk
KGtleXdvcmQpIHsKLSAgICAgICAgdmFyIHRva2VuID0gbGV4KCk7Ci0gICAgICAgIGlmICh0b2tl
bi50eXBlICE9PSBUb2tlbi5LZXl3b3JkIHx8IHRva2VuLnZhbHVlICE9PSBrZXl3b3JkKSB7Ci0g
ICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbik7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgbmV4dCB0b2tlbiBtYXRjaGVzIHRoZSBzcGVj
aWZpZWQgcHVuY3R1YXRvci4KLQotICAgIGZ1bmN0aW9uIG1hdGNoKHZhbHVlKSB7Ci0gICAgICAg
IHJldHVybiBsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvciAmJiBsb29rYWhlYWQu
dmFsdWUgPT09IHZhbHVlOwotICAgIH0KLQotICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0
IHRva2VuIG1hdGNoZXMgdGhlIHNwZWNpZmllZCBrZXl3b3JkCi0KLSAgICBmdW5jdGlvbiBtYXRj
aEtleXdvcmQoa2V5d29yZCkgewotICAgICAgICByZXR1cm4gbG9va2FoZWFkLnR5cGUgPT09IFRv
a2VuLktleXdvcmQgJiYgbG9va2FoZWFkLnZhbHVlID09PSBrZXl3b3JkOwotICAgIH0KLQotICAg
IC8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IHRva2VuIG1hdGNoZXMgdGhlIHNwZWNpZmllZCBj
b250ZXh0dWFsIGtleXdvcmQKLSAgICAvLyAod2hlcmUgYW4gaWRlbnRpZmllciBpcyBzb21ldGlt
ZXMgYSBrZXl3b3JkIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCkKLQotICAgIGZ1bmN0aW9uIG1h
dGNoQ29udGV4dHVhbEtleXdvcmQoa2V5d29yZCkgewotICAgICAgICByZXR1cm4gbG9va2FoZWFk
LnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIgJiYgbG9va2FoZWFkLnZhbHVlID09PSBrZXl3b3Jk
OwotICAgIH0KLQotICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IHRva2VuIGlzIGFuIGFz
c2lnbm1lbnQgb3BlcmF0b3IKLQotICAgIGZ1bmN0aW9uIG1hdGNoQXNzaWduKCkgewotICAgICAg
ICB2YXIgb3A7Ci0KLSAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5QdW5jdHVh
dG9yKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgb3Ag
PSBsb29rYWhlYWQudmFsdWU7Ci0gICAgICAgIHJldHVybiBvcCA9PT0gJz0nIHx8Ci0gICAgICAg
ICAgICBvcCA9PT0gJyo9JyB8fAotICAgICAgICAgICAgb3AgPT09ICcvPScgfHwKLSAgICAgICAg
ICAgIG9wID09PSAnJT0nIHx8Ci0gICAgICAgICAgICBvcCA9PT0gJys9JyB8fAotICAgICAgICAg
ICAgb3AgPT09ICctPScgfHwKLSAgICAgICAgICAgIG9wID09PSAnPDw9JyB8fAotICAgICAgICAg
ICAgb3AgPT09ICc+Pj0nIHx8Ci0gICAgICAgICAgICBvcCA9PT0gJz4+Pj0nIHx8Ci0gICAgICAg
ICAgICBvcCA9PT0gJyY9JyB8fAotICAgICAgICAgICAgb3AgPT09ICdePScgfHwKLSAgICAgICAg
ICAgIG9wID09PSAnfD0nOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGNvbnN1bWVTZW1pY29sb24o
KSB7Ci0gICAgICAgIC8vIENhdGNoIHRoZSB2ZXJ5IGNvbW1vbiBjYXNlIGZpcnN0OiBpbW1lZGlh
dGVseSBhIHNlbWljb2xvbiAoVSswMDNCKS4KLSAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0
KHN0YXJ0SW5kZXgpID09PSAweDNCIHx8IG1hdGNoKCc7JykpIHsKLSAgICAgICAgICAgIGxleCgp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhhc0xpbmVU
ZXJtaW5hdG9yKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBGSVhNRShpa2FyaWVuYXRvcik6IHRoaXMgaXMgc2VlbWluZ2x5IGFuIGlzc3VlIGluIHRoZSBw
cmV2aW91cyBsb2NhdGlvbiBpbmZvIGNvbnZlbnRpb24uCi0gICAgICAgIGxhc3RJbmRleCA9IHN0
YXJ0SW5kZXg7Ci0gICAgICAgIGxhc3RMaW5lTnVtYmVyID0gc3RhcnRMaW5lTnVtYmVyOwotICAg
ICAgICBsYXN0TGluZVN0YXJ0ID0gc3RhcnRMaW5lU3RhcnQ7Ci0KLSAgICAgICAgaWYgKGxvb2th
aGVhZC50eXBlICE9PSBUb2tlbi5FT0YgJiYgIW1hdGNoKCd9JykpIHsKLSAgICAgICAgICAgIHRo
cm93VW5leHBlY3RlZFRva2VuKGxvb2thaGVhZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAv
LyBDb3ZlciBncmFtbWFyIHN1cHBvcnQuCi0gICAgLy8KLSAgICAvLyBXaGVuIGFuIGFzc2lnbm1l
bnQgZXhwcmVzc2lvbiBwb3NpdGlvbiBzdGFydHMgd2l0aCBhbiBsZWZ0IHBhcmVudGhlc2lzLCB0
aGUgZGV0ZXJtaW5hdGlvbiBvZiB0aGUgdHlwZQotICAgIC8vIG9mIHRoZSBzeW50YXggaXMgdG8g
YmUgZGVmZXJyZWQgYXJiaXRyYXJpbHkgbG9uZyB1bnRpbCB0aGUgZW5kIG9mIHRoZSBwYXJlbnRo
ZXNlcyBwYWlyIChwbHVzIGEgbG9va2FoZWFkKQotICAgIC8vIG9yIHRoZSBmaXJzdCBjb21tYS4g
VGhpcyBzaXR1YXRpb24gYWxzbyBkZWZlcnMgdGhlIGRldGVybWluYXRpb24gb2YgYWxsIHRoZSBl
eHByZXNzaW9ucyBuZXN0ZWQgaW4gdGhlIHBhaXIuCi0gICAgLy8KLSAgICAvLyBUaGVyZSBhcmUg
dGhyZWUgcHJvZHVjdGlvbnMgdGhhdCBjYW4gYmUgcGFyc2VkIGluIGEgcGFyZW50aGVzZXMgcGFp
ciB0aGF0IG5lZWRzIHRvIGJlIGRldGVybWluZWQKLSAgICAvLyBhZnRlciB0aGUgb3V0ZXJtb3N0
IHBhaXIgaXMgY2xvc2VkLiBUaGV5IGFyZToKLSAgICAvLwotICAgIC8vICAgMS4gQXNzaWdubWVu
dEV4cHJlc3Npb24KLSAgICAvLyAgIDIuIEJpbmRpbmdFbGVtZW50cwotICAgIC8vICAgMy4gQXNz
aWdubWVudFRhcmdldHMKLSAgICAvLwotICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIGV4cG9uZW50
aWFsIGJhY2t0cmFja2luZywgd2UgdXNlIHR3byBmbGFncyB0byBkZW5vdGUgaWYgdGhlIHByb2R1
Y3Rpb24gY2FuIGJlCi0gICAgLy8gYmluZGluZyBlbGVtZW50IG9yIGFzc2lnbm1lbnQgdGFyZ2V0
LgotICAgIC8vCi0gICAgLy8gVGhlIHRocmVlIHByb2R1Y3Rpb25zIGhhdmUgdGhlIHJlbGF0aW9u
c2hpcDoKLSAgICAvLwotICAgIC8vICAgQmluZGluZ0VsZW1lbnRzIOKKhiBBc3NpZ25tZW50VGFy
Z2V0cyDiioYgQXNzaWdubWVudEV4cHJlc3Npb24KLSAgICAvLwotICAgIC8vIHdpdGggYSBzaW5n
bGUgZXhjZXB0aW9uIHRoYXQgQ292ZXJJbml0aWFsaXplZE5hbWUgd2hlbiB1c2VkIGRpcmVjdGx5
IGluIGFuIEV4cHJlc3Npb24sIGdlbmVyYXRlcwotICAgIC8vIGFuIGVhcmx5IGVycm9yLiBUaGVy
ZWZvcmUsIHdlIG5lZWQgdGhlIHRoaXJkIHN0YXRlLCBmaXJzdENvdmVySW5pdGlhbGl6ZWROYW1l
RXJyb3IsIHRvIHRyYWNrIHRoZQotICAgIC8vIGZpcnN0IHVzYWdlIG9mIENvdmVySW5pdGlhbGl6
ZWROYW1lIGFuZCByZXBvcnQgaXQgd2hlbiB3ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHBhcmVu
dGhlc2VzIHBhaXIuCi0gICAgLy8KLSAgICAvLyBpc29sYXRlQ292ZXJHcmFtbWFyIGZ1bmN0aW9u
IHJ1bnMgdGhlIGdpdmVuIHBhcnNlciBmdW5jdGlvbiB3aXRoIGEgbmV3IGNvdmVyIGdyYW1tYXIg
Y29udGV4dCwgYW5kIGl0IGRvZXMgbm90Ci0gICAgLy8gZWZmZWN0IHRoZSBjdXJyZW50IGZsYWdz
LiBUaGlzIG1lYW5zIHRoZSBwcm9kdWN0aW9uIHRoZSBwYXJzZXIgcGFyc2VzIGlzIG9ubHkgdXNl
ZCBhcyBhbiBleHByZXNzaW9uLiBUaGVyZWZvcmUKLSAgICAvLyB0aGUgQ292ZXJJbml0aWFsaXpl
ZE5hbWUgY2hlY2sgaXMgY29uZHVjdGVkLgotICAgIC8vCi0gICAgLy8gaW5oZXJpdENvdmVyR3Jh
bW1hciBmdW5jdGlvbiBydW5zIHRoZSBnaXZlbiBwYXJzZSBmdW5jdGlvbiB3aXRoIGEgbmV3IGNv
dmVyIGdyYW1tYXIgY29udGV4dCwgYW5kIGl0IHByb3BhZ2F0ZXMKLSAgICAvLyB0aGUgZmxhZ3Mg
b3V0c2lkZSBvZiB0aGUgcGFyc2VyLiBUaGlzIG1lYW5zIHRoZSBwcm9kdWN0aW9uIHRoZSBwYXJz
ZXIgcGFyc2VzIGlzIHVzZWQgYXMgYSBwYXJ0IG9mIGEgcG90ZW50aWFsCi0gICAgLy8gcGF0dGVy
bi4gVGhlIENvdmVySW5pdGlhbGl6ZWROYW1lIGNoZWNrIGlzIGRlZmVycmVkLgotICAgIGZ1bmN0
aW9uIGlzb2xhdGVDb3ZlckdyYW1tYXIocGFyc2VyKSB7Ci0gICAgICAgIHZhciBvbGRJc0JpbmRp
bmdFbGVtZW50ID0gaXNCaW5kaW5nRWxlbWVudCwKLSAgICAgICAgICAgIG9sZElzQXNzaWdubWVu
dFRhcmdldCA9IGlzQXNzaWdubWVudFRhcmdldCwKLSAgICAgICAgICAgIG9sZEZpcnN0Q292ZXJJ
bml0aWFsaXplZE5hbWVFcnJvciA9IGZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciwKLSAg
ICAgICAgICAgIHJlc3VsdDsKLSAgICAgICAgaXNCaW5kaW5nRWxlbWVudCA9IHRydWU7Ci0gICAg
ICAgIGlzQXNzaWdubWVudFRhcmdldCA9IHRydWU7Ci0gICAgICAgIGZpcnN0Q292ZXJJbml0aWFs
aXplZE5hbWVFcnJvciA9IG51bGw7Ci0gICAgICAgIHJlc3VsdCA9IHBhcnNlcigpOwotICAgICAg
ICBpZiAoZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yICE9PSBudWxsKSB7Ci0gICAgICAg
ICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihmaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3Ip
OwotICAgICAgICB9Ci0gICAgICAgIGlzQmluZGluZ0VsZW1lbnQgPSBvbGRJc0JpbmRpbmdFbGVt
ZW50OwotICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBvbGRJc0Fzc2lnbm1lbnRUYXJnZXQ7
Ci0gICAgICAgIGZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IG9sZEZpcnN0Q292ZXJJ
bml0aWFsaXplZE5hbWVFcnJvcjsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAg
ICBmdW5jdGlvbiBpbmhlcml0Q292ZXJHcmFtbWFyKHBhcnNlcikgewotICAgICAgICB2YXIgb2xk
SXNCaW5kaW5nRWxlbWVudCA9IGlzQmluZGluZ0VsZW1lbnQsCi0gICAgICAgICAgICBvbGRJc0Fz
c2lnbm1lbnRUYXJnZXQgPSBpc0Fzc2lnbm1lbnRUYXJnZXQsCi0gICAgICAgICAgICBvbGRGaXJz
dENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSBmaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJy
b3IsCi0gICAgICAgICAgICByZXN1bHQ7Ci0gICAgICAgIGlzQmluZGluZ0VsZW1lbnQgPSB0cnVl
OwotICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSB0cnVlOwotICAgICAgICBmaXJzdENvdmVy
SW5pdGlhbGl6ZWROYW1lRXJyb3IgPSBudWxsOwotICAgICAgICByZXN1bHQgPSBwYXJzZXIoKTsK
LSAgICAgICAgaXNCaW5kaW5nRWxlbWVudCA9IGlzQmluZGluZ0VsZW1lbnQgJiYgb2xkSXNCaW5k
aW5nRWxlbWVudDsKLSAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gaXNBc3NpZ25tZW50VGFy
Z2V0ICYmIG9sZElzQXNzaWdubWVudFRhcmdldDsKLSAgICAgICAgZmlyc3RDb3ZlckluaXRpYWxp
emVkTmFtZUVycm9yID0gb2xkRmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yIHx8IGZpcnN0
Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvcjsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9
Ci0KLSAgICAvLyBFQ01BLTI2MiAxMy4zLjMgRGVzdHJ1Y3R1cmluZyBCaW5kaW5nIFBhdHRlcm5z
Ci0KLSAgICBmdW5jdGlvbiBwYXJzZUFycmF5UGF0dGVybihwYXJhbXMsIGtpbmQpIHsKLSAgICAg
ICAgdmFyIG5vZGUgPSBuZXcgTm9kZSgpLCBlbGVtZW50cyA9IFtdLCByZXN0LCByZXN0Tm9kZTsK
LSAgICAgICAgZXhwZWN0KCdbJyk7Ci0KLSAgICAgICAgd2hpbGUgKCFtYXRjaCgnXScpKSB7Ci0g
ICAgICAgICAgICBpZiAobWF0Y2goJywnKSkgewotICAgICAgICAgICAgICAgIGxleCgpOwotICAg
ICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gobnVsbCk7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIGlmIChtYXRjaCgnLi4uJykpIHsKLSAgICAgICAgICAgICAgICAgICAg
cmVzdE5vZGUgPSBuZXcgTm9kZSgpOwotICAgICAgICAgICAgICAgICAgICBsZXgoKTsKLSAgICAg
ICAgICAgICAgICAgICAgcGFyYW1zLnB1c2gobG9va2FoZWFkKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmVzdCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKHBhcmFtcywga2luZCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocmVzdE5vZGUuZmluaXNoUmVzdEVsZW1lbnQocmVz
dCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKHBhcnNlUGF0dGVybldpdGhEZWZh
dWx0KHBhcmFtcywga2luZCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBp
ZiAoIW1hdGNoKCddJykpIHsKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCcsJyk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgIH0KLQotICAgICAgICBleHBl
Y3QoJ10nKTsKLQotICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hBcnJheVBhdHRlcm4oZWxlbWVu
dHMpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlUHJvcGVydHlQYXR0ZXJuKHBhcmFtcywg
a2luZCkgewotICAgICAgICB2YXIgbm9kZSA9IG5ldyBOb2RlKCksIGtleSwga2V5VG9rZW4sIGNv
bXB1dGVkID0gbWF0Y2goJ1snKSwgaW5pdDsKLSAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlID09
PSBUb2tlbi5JZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBrZXlUb2tlbiA9IGxvb2thaGVhZDsK
LSAgICAgICAgICAgIGtleSA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7Ci0gICAgICAgICAg
ICBpZiAobWF0Y2goJz0nKSkgewotICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGtleVRva2Vu
KTsKLSAgICAgICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgICAgICAgICBpbml0ID0gcGFyc2VB
c3NpZ25tZW50RXhwcmVzc2lvbigpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuZmlu
aXNoUHJvcGVydHkoCi0gICAgICAgICAgICAgICAgICAgICdpbml0Jywga2V5LCBmYWxzZSwKLSAg
ICAgICAgICAgICAgICAgICAgbmV3IFdyYXBwaW5nTm9kZShrZXlUb2tlbikuZmluaXNoQXNzaWdu
bWVudFBhdHRlcm4oa2V5LCBpbml0KSwgZmFsc2UsIGZhbHNlKTsKLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAoIW1hdGNoKCc6JykpIHsKLSAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChrZXlUb2tl
bik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoUHJvcGVydHkoJ2luaXQnLCBr
ZXksIGZhbHNlLCBrZXksIGZhbHNlLCB0cnVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkocGFyYW1zLCBr
aW5kKTsKLSAgICAgICAgfQotICAgICAgICBleHBlY3QoJzonKTsKLSAgICAgICAgaW5pdCA9IHBh
cnNlUGF0dGVybldpdGhEZWZhdWx0KHBhcmFtcywga2luZCk7Ci0gICAgICAgIHJldHVybiBub2Rl
LmZpbmlzaFByb3BlcnR5KCdpbml0Jywga2V5LCBjb21wdXRlZCwgaW5pdCwgZmFsc2UsIGZhbHNl
KTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBwYXJzZU9iamVjdFBhdHRlcm4ocGFyYW1zLCBraW5k
KSB7Ci0gICAgICAgIHZhciBub2RlID0gbmV3IE5vZGUoKSwgcHJvcGVydGllcyA9IFtdOwotCi0g
ICAgICAgIGV4cGVjdCgneycpOwotCi0gICAgICAgIHdoaWxlICghbWF0Y2goJ30nKSkgewotICAg
ICAgICAgICAgcHJvcGVydGllcy5wdXNoKHBhcnNlUHJvcGVydHlQYXR0ZXJuKHBhcmFtcywga2lu
ZCkpOwotICAgICAgICAgICAgaWYgKCFtYXRjaCgnfScpKSB7Ci0gICAgICAgICAgICAgICAgZXhw
ZWN0KCcsJyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBsZXgoKTsKLQot
ICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hPYmplY3RQYXR0ZXJuKHByb3BlcnRpZXMpOwotICAg
IH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlUGF0dGVybihwYXJhbXMsIGtpbmQpIHsKLSAgICAgICAg
aWYgKG1hdGNoKCdbJykpIHsKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUFycmF5UGF0dGVybihw
YXJhbXMsIGtpbmQpOwotICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCd7JykpIHsKLSAgICAgICAg
ICAgIHJldHVybiBwYXJzZU9iamVjdFBhdHRlcm4ocGFyYW1zLCBraW5kKTsKLSAgICAgICAgfQot
ICAgICAgICBwYXJhbXMucHVzaChsb29rYWhlYWQpOwotICAgICAgICByZXR1cm4gcGFyc2VWYXJp
YWJsZUlkZW50aWZpZXIoa2luZCk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VQYXR0ZXJu
V2l0aERlZmF1bHQocGFyYW1zLCBraW5kKSB7Ci0gICAgICAgIHZhciBzdGFydFRva2VuID0gbG9v
a2FoZWFkLCBwYXR0ZXJuLCBwcmV2aW91c0FsbG93WWllbGQsIHJpZ2h0OwotICAgICAgICBwYXR0
ZXJuID0gcGFyc2VQYXR0ZXJuKHBhcmFtcywga2luZCk7Ci0gICAgICAgIGlmIChtYXRjaCgnPScp
KSB7Ci0gICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgICAgIHByZXZpb3VzQWxsb3dZaWVsZCA9
IHN0YXRlLmFsbG93WWllbGQ7Ci0gICAgICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gdHJ1ZTsK
LSAgICAgICAgICAgIHJpZ2h0ID0gaXNvbGF0ZUNvdmVyR3JhbW1hcihwYXJzZUFzc2lnbm1lbnRF
eHByZXNzaW9uKTsKLSAgICAgICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93
WWllbGQ7Ci0gICAgICAgICAgICBwYXR0ZXJuID0gbmV3IFdyYXBwaW5nTm9kZShzdGFydFRva2Vu
KS5maW5pc2hBc3NpZ25tZW50UGF0dGVybihwYXR0ZXJuLCByaWdodCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHBhdHRlcm47Ci0gICAgfQotCi0gICAgLy8gRUNNQS0yNjIgMTIuMi41IEFy
cmF5IEluaXRpYWxpemVyCi0KLSAgICBmdW5jdGlvbiBwYXJzZUFycmF5SW5pdGlhbGl6ZXIoKSB7
Ci0gICAgICAgIHZhciBlbGVtZW50cyA9IFtdLCBub2RlID0gbmV3IE5vZGUoKSwgcmVzdFNwcmVh
ZDsKLQotICAgICAgICBleHBlY3QoJ1snKTsKLQotICAgICAgICB3aGlsZSAoIW1hdGNoKCddJykp
IHsKLSAgICAgICAgICAgIGlmIChtYXRjaCgnLCcpKSB7Ci0gICAgICAgICAgICAgICAgbGV4KCk7
Ci0gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChudWxsKTsKLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAobWF0Y2goJy4uLicpKSB7Ci0gICAgICAgICAgICAgICAgcmVzdFNwcmVhZCA9IG5ldyBO
b2RlKCk7Ci0gICAgICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAgICAgICAgICAgcmVzdFNwcmVh
ZC5maW5pc2hTcHJlYWRFbGVtZW50KGluaGVyaXRDb3ZlckdyYW1tYXIocGFyc2VBc3NpZ25tZW50
RXhwcmVzc2lvbikpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFtYXRjaCgnXScpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGlzQmluZGluZ0VsZW1lbnQgPSBm
YWxzZTsKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCcsJyk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocmVzdFNwcmVhZCk7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goaW5oZXJpdENvdmVyR3Jh
bW1hcihwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAo
IW1hdGNoKCddJykpIHsKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCcsJyk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgbGV4KCk7Ci0K
LSAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoQXJyYXlFeHByZXNzaW9uKGVsZW1lbnRzKTsKLSAg
ICB9Ci0KLSAgICAvLyBFQ01BLTI2MiAxMi4yLjYgT2JqZWN0IEluaXRpYWxpemVyCi0KLSAgICBm
dW5jdGlvbiBwYXJzZVByb3BlcnR5RnVuY3Rpb24obm9kZSwgcGFyYW1JbmZvLCBpc0dlbmVyYXRv
cikgewotICAgICAgICB2YXIgcHJldmlvdXNTdHJpY3QsIGJvZHk7Ci0KLSAgICAgICAgaXNBc3Np
Z25tZW50VGFyZ2V0ID0gaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOwotCi0gICAgICAgIHByZXZp
b3VzU3RyaWN0ID0gc3RyaWN0OwotICAgICAgICBib2R5ID0gaXNvbGF0ZUNvdmVyR3JhbW1hcihw
YXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMpOwotCi0gICAgICAgIGlmIChzdHJpY3QgJiYgcGFy
YW1JbmZvLmZpcnN0UmVzdHJpY3RlZCkgewotICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVk
VG9rZW4ocGFyYW1JbmZvLmZpcnN0UmVzdHJpY3RlZCwgcGFyYW1JbmZvLm1lc3NhZ2UpOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChzdHJpY3QgJiYgcGFyYW1JbmZvLnN0cmljdGVkKSB7Ci0gICAg
ICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihwYXJhbUluZm8uc3RyaWN0ZWQsIHBhcmFt
SW5mby5tZXNzYWdlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0cmljdCA9IHByZXZpb3VzU3Ry
aWN0OwotICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hGdW5jdGlvbkV4cHJlc3Npb24obnVsbCwg
cGFyYW1JbmZvLnBhcmFtcywgcGFyYW1JbmZvLmRlZmF1bHRzLCBib2R5LCBpc0dlbmVyYXRvcik7
Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VQcm9wZXJ0eU1ldGhvZEZ1bmN0aW9uKCkgewot
ICAgICAgICB2YXIgcGFyYW1zLCBtZXRob2QsIG5vZGUgPSBuZXcgTm9kZSgpLAotICAgICAgICAg
ICAgcHJldmlvdXNBbGxvd1lpZWxkID0gc3RhdGUuYWxsb3dZaWVsZDsKLQotICAgICAgICBzdGF0
ZS5hbGxvd1lpZWxkID0gZmFsc2U7Ci0gICAgICAgIHBhcmFtcyA9IHBhcnNlUGFyYW1zKCk7Ci0g
ICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7Ci0KLSAgICAgICAg
c3RhdGUuYWxsb3dZaWVsZCA9IGZhbHNlOwotICAgICAgICBtZXRob2QgPSBwYXJzZVByb3BlcnR5
RnVuY3Rpb24obm9kZSwgcGFyYW1zLCBmYWxzZSk7Ci0gICAgICAgIHN0YXRlLmFsbG93WWllbGQg
PSBwcmV2aW91c0FsbG93WWllbGQ7Ci0KLSAgICAgICAgcmV0dXJuIG1ldGhvZDsKLSAgICB9Ci0K
LSAgICBmdW5jdGlvbiBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCkgewotICAgICAgICB2YXIgdG9r
ZW4sIG5vZGUgPSBuZXcgTm9kZSgpLCBleHByOwotCi0gICAgICAgIHRva2VuID0gbGV4KCk7Ci0K
LSAgICAgICAgLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25seSBmcm9tIHBhcnNl
T2JqZWN0UHJvcGVydHkoKSwgd2hlcmUKLSAgICAgICAgLy8gRU9GIGFuZCBQdW5jdHVhdG9yIHRv
a2VucyBhcmUgYWxyZWFkeSBmaWx0ZXJlZCBvdXQuCi0KLSAgICAgICAgc3dpdGNoICh0b2tlbi50
eXBlKSB7Ci0gICAgICAgIGNhc2UgVG9rZW4uU3RyaW5nTGl0ZXJhbDoKLSAgICAgICAgY2FzZSBU
b2tlbi5OdW1lcmljTGl0ZXJhbDoKLSAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgdG9rZW4ub2N0
YWwpIHsKLSAgICAgICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0b2tlbiwgTWVz
c2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJl
dHVybiBub2RlLmZpbmlzaExpdGVyYWwodG9rZW4pOwotICAgICAgICBjYXNlIFRva2VuLklkZW50
aWZpZXI6Ci0gICAgICAgIGNhc2UgVG9rZW4uQm9vbGVhbkxpdGVyYWw6Ci0gICAgICAgIGNhc2Ug
VG9rZW4uTnVsbExpdGVyYWw6Ci0gICAgICAgIGNhc2UgVG9rZW4uS2V5d29yZDoKLSAgICAgICAg
ICAgIHJldHVybiBub2RlLmZpbmlzaElkZW50aWZpZXIodG9rZW4udmFsdWUpOwotICAgICAgICBj
YXNlIFRva2VuLlB1bmN0dWF0b3I6Ci0gICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09ICdb
JykgewotICAgICAgICAgICAgICAgIGV4cHIgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlQXNz
aWdubWVudEV4cHJlc3Npb24pOwotICAgICAgICAgICAgICAgIGV4cGVjdCgnXScpOwotICAgICAg
ICAgICAgICAgIHJldHVybiBleHByOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pOwotICAgIH0K
LQotICAgIGZ1bmN0aW9uIGxvb2thaGVhZFByb3BlcnR5TmFtZSgpIHsKLSAgICAgICAgc3dpdGNo
IChsb29rYWhlYWQudHlwZSkgewotICAgICAgICBjYXNlIFRva2VuLklkZW50aWZpZXI6Ci0gICAg
ICAgIGNhc2UgVG9rZW4uU3RyaW5nTGl0ZXJhbDoKLSAgICAgICAgY2FzZSBUb2tlbi5Cb29sZWFu
TGl0ZXJhbDoKLSAgICAgICAgY2FzZSBUb2tlbi5OdWxsTGl0ZXJhbDoKLSAgICAgICAgY2FzZSBU
b2tlbi5OdW1lcmljTGl0ZXJhbDoKLSAgICAgICAgY2FzZSBUb2tlbi5LZXl3b3JkOgotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGNhc2UgVG9rZW4uUHVuY3R1YXRvcjoKLSAgICAg
ICAgICAgIHJldHVybiBsb29rYWhlYWQudmFsdWUgPT09ICdbJzsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyB0byB0cnkg
dG8gcGFyc2UgYSBNZXRob2REZWZpbml0aW9uIGFzIGRlZmluZWQgaW4gMTQuMy4gQnV0IGluIHRo
ZSBjYXNlIG9mIG9iamVjdCBsaXRlcmFscywKLSAgICAvLyBpdCBtaWdodCBiZSBjYWxsZWQgYXQg
YSBwb3NpdGlvbiB3aGVyZSB0aGVyZSBpcyBpbiBmYWN0IGEgc2hvcnQgaGFuZCBpZGVudGlmaWVy
IHBhdHRlcm4gb3IgYSBkYXRhIHByb3BlcnR5LgotICAgIC8vIFRoaXMgY2FuIG9ubHkgYmUgZGV0
ZXJtaW5lZCBhZnRlciB3ZSBjb25zdW1lZCB1cCB0byB0aGUgbGVmdCBwYXJlbnRoZXNlcy4KLSAg
ICAvLwotICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIGJhY2sgdHJhY2tpbmcsIGl0IHJldHVybnMg
YG51bGxgIGlmIHRoZSBwb3NpdGlvbiBpcyBub3QgYSBNZXRob2REZWZpbml0aW9uIGFuZCB0aGUg
Y2FsbGVyCi0gICAgLy8gaXMgcmVzcG9uc2libGUgdG8gdmlzaXQgb3RoZXIgb3B0aW9ucy4KLSAg
ICBmdW5jdGlvbiB0cnlQYXJzZU1ldGhvZERlZmluaXRpb24odG9rZW4sIGtleSwgY29tcHV0ZWQs
IG5vZGUpIHsKLSAgICAgICAgdmFyIHZhbHVlLCBvcHRpb25zLCBtZXRob2ROb2RlLCBwYXJhbXMs
Ci0gICAgICAgICAgICBwcmV2aW91c0FsbG93WWllbGQgPSBzdGF0ZS5hbGxvd1lpZWxkOwotCi0g
ICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7Ci0gICAgICAgICAg
ICAvLyBjaGVjayBmb3IgYGdldGAgYW5kIGBzZXRgOwotCi0gICAgICAgICAgICBpZiAodG9rZW4u
dmFsdWUgPT09ICdnZXQnICYmIGxvb2thaGVhZFByb3BlcnR5TmFtZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgY29tcHV0ZWQgPSBtYXRjaCgnWycpOwotICAgICAgICAgICAgICAgIGtleSA9IHBhcnNl
T2JqZWN0UHJvcGVydHlLZXkoKTsKLSAgICAgICAgICAgICAgICBtZXRob2ROb2RlID0gbmV3IE5v
ZGUoKTsKLSAgICAgICAgICAgICAgICBleHBlY3QoJygnKTsKLSAgICAgICAgICAgICAgICBleHBl
Y3QoJyknKTsKLQotICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSBmYWxzZTsKLSAg
ICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlUHJvcGVydHlGdW5jdGlvbihtZXRob2ROb2RlLCB7
Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtczogW10sCi0gICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHRzOiBbXSwKLSAgICAgICAgICAgICAgICAgICAgc3RyaWN0ZWQ6IG51bGwsCi0gICAgICAg
ICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZDogbnVsbCwKLSAgICAgICAgICAgICAgICAgICAg
bWVzc2FnZTogbnVsbAotICAgICAgICAgICAgICAgIH0sIGZhbHNlKTsKLSAgICAgICAgICAgICAg
ICBzdGF0ZS5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkOwotCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIG5vZGUuZmluaXNoUHJvcGVydHkoJ2dldCcsIGtleSwgY29tcHV0ZWQsIHZhbHVl
LCBmYWxzZSwgZmFsc2UpOwotICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlbi52YWx1ZSA9PT0g
J3NldCcgJiYgbG9va2FoZWFkUHJvcGVydHlOYW1lKCkpIHsKLSAgICAgICAgICAgICAgICBjb21w
dXRlZCA9IG1hdGNoKCdbJyk7Ci0gICAgICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9w
ZXJ0eUtleSgpOwotICAgICAgICAgICAgICAgIG1ldGhvZE5vZGUgPSBuZXcgTm9kZSgpOwotICAg
ICAgICAgICAgICAgIGV4cGVjdCgnKCcpOwotCi0gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHsK
LSAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXSwKLSAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdENvdW50OiAwLAotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0czogW10sCi0gICAgICAg
ICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZDogbnVsbCwKLSAgICAgICAgICAgICAgICAgICAg
cGFyYW1TZXQ6IHt9Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICBpZiAobWF0
Y2goJyknKSkgewotICAgICAgICAgICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihs
b29rYWhlYWQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IHN0YXRlLmFsbG93WWllbGQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VQYXJh
bShvcHRpb25zKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWxsb3dZaWVsZCA9IHByZXZp
b3VzQWxsb3dZaWVsZDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVmYXVsdENv
dW50ID09PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmRlZmF1bHRzID0g
W107Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgZXhwZWN0KCcpJyk7Ci0KLSAgICAgICAgICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZVByb3BlcnR5RnVuY3Rpb24obWV0
aG9kTm9kZSwgb3B0aW9ucywgZmFsc2UpOwotICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93WWll
bGQgPSBwcmV2aW91c0FsbG93WWllbGQ7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5m
aW5pc2hQcm9wZXJ0eSgnc2V0Jywga2V5LCBjb21wdXRlZCwgdmFsdWUsIGZhbHNlLCBmYWxzZSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4u
UHVuY3R1YXRvciAmJiB0b2tlbi52YWx1ZSA9PT0gJyonICYmIGxvb2thaGVhZFByb3BlcnR5TmFt
ZSgpKSB7Ci0gICAgICAgICAgICBjb21wdXRlZCA9IG1hdGNoKCdbJyk7Ci0gICAgICAgICAgICBr
ZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7Ci0gICAgICAgICAgICBtZXRob2ROb2RlID0g
bmV3IE5vZGUoKTsKLQotICAgICAgICAgICAgc3RhdGUuYWxsb3dZaWVsZCA9IHRydWU7Ci0gICAg
ICAgICAgICBwYXJhbXMgPSBwYXJzZVBhcmFtcygpOwotICAgICAgICAgICAgc3RhdGUuYWxsb3dZ
aWVsZCA9IHByZXZpb3VzQWxsb3dZaWVsZDsKLQotICAgICAgICAgICAgc3RhdGUuYWxsb3dZaWVs
ZCA9IGZhbHNlOwotICAgICAgICAgICAgdmFsdWUgPSBwYXJzZVByb3BlcnR5RnVuY3Rpb24obWV0
aG9kTm9kZSwgcGFyYW1zLCB0cnVlKTsKLSAgICAgICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSBw
cmV2aW91c0FsbG93WWllbGQ7Ci0KLSAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlzaFByb3Bl
cnR5KCdpbml0Jywga2V5LCBjb21wdXRlZCwgdmFsdWUsIHRydWUsIGZhbHNlKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChrZXkgJiYgbWF0Y2goJygnKSkgewotICAgICAgICAgICAgdmFsdWUg
PSBwYXJzZVByb3BlcnR5TWV0aG9kRnVuY3Rpb24oKTsKLSAgICAgICAgICAgIHJldHVybiBub2Rl
LmZpbmlzaFByb3BlcnR5KCdpbml0Jywga2V5LCBjb21wdXRlZCwgdmFsdWUsIHRydWUsIGZhbHNl
KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE5vdCBhIE1ldGhvZERlZmluaXRpb24uCi0gICAg
ICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlT2JqZWN0UHJvcGVy
dHkoaGFzUHJvdG8pIHsKLSAgICAgICAgdmFyIHRva2VuID0gbG9va2FoZWFkLCBub2RlID0gbmV3
IE5vZGUoKSwgY29tcHV0ZWQsIGtleSwgbWF5YmVNZXRob2QsIHByb3RvLCB2YWx1ZTsKLQotICAg
ICAgICBjb21wdXRlZCA9IG1hdGNoKCdbJyk7Ci0gICAgICAgIGlmIChtYXRjaCgnKicpKSB7Ci0g
ICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGtleSA9IHBh
cnNlT2JqZWN0UHJvcGVydHlLZXkoKTsKLSAgICAgICAgfQotICAgICAgICBtYXliZU1ldGhvZCA9
IHRyeVBhcnNlTWV0aG9kRGVmaW5pdGlvbih0b2tlbiwga2V5LCBjb21wdXRlZCwgbm9kZSk7Ci0g
ICAgICAgIGlmIChtYXliZU1ldGhvZCkgewotICAgICAgICAgICAgcmV0dXJuIG1heWJlTWV0aG9k
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFrZXkpIHsKLSAgICAgICAgICAgIHRocm93VW5l
eHBlY3RlZFRva2VuKGxvb2thaGVhZCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDaGVjayBm
b3IgZHVwbGljYXRlZCBfX3Byb3RvX18KLSAgICAgICAgaWYgKCFjb21wdXRlZCkgewotICAgICAg
ICAgICAgcHJvdG8gPSAoa2V5LnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyICYmIGtleS5uYW1l
ID09PSAnX19wcm90b19fJykgfHwKLSAgICAgICAgICAgICAgICAoa2V5LnR5cGUgPT09IFN5bnRh
eC5MaXRlcmFsICYmIGtleS52YWx1ZSA9PT0gJ19fcHJvdG9fXycpOwotICAgICAgICAgICAgaWYg
KGhhc1Byb3RvLnZhbHVlICYmIHByb3RvKSB7Ci0gICAgICAgICAgICAgICAgdG9sZXJhdGVFcnJv
cihNZXNzYWdlcy5EdXBsaWNhdGVQcm90b1Byb3BlcnR5KTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGhhc1Byb3RvLnZhbHVlIHw9IHByb3RvOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KG1hdGNoKCc6JykpIHsKLSAgICAgICAgICAgIGxleCgpOwotICAgICAgICAgICAgdmFsdWUgPSBp
bmhlcml0Q292ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOwotICAgICAgICAg
ICAgcmV0dXJuIG5vZGUuZmluaXNoUHJvcGVydHkoJ2luaXQnLCBrZXksIGNvbXB1dGVkLCB2YWx1
ZSwgZmFsc2UsIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0b2tlbi50eXBlID09
PSBUb2tlbi5JZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBpZiAobWF0Y2goJz0nKSkgewotICAg
ICAgICAgICAgICAgIGZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IGxvb2thaGVhZDsK
LSAgICAgICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IGlzb2xhdGVD
b3ZlckdyYW1tYXIocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIG5vZGUuZmluaXNoUHJvcGVydHkoJ2luaXQnLCBrZXksIGNvbXB1dGVkLAotICAgICAg
ICAgICAgICAgICAgICBuZXcgV3JhcHBpbmdOb2RlKHRva2VuKS5maW5pc2hBc3NpZ25tZW50UGF0
dGVybihrZXksIHZhbHVlKSwgZmFsc2UsIHRydWUpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcmV0dXJuIG5vZGUuZmluaXNoUHJvcGVydHkoJ2luaXQnLCBrZXksIGNvbXB1dGVkLCBrZXks
IGZhbHNlLCB0cnVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRocm93VW5leHBlY3RlZFRva2Vu
KGxvb2thaGVhZCk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VPYmplY3RJbml0aWFsaXpl
cigpIHsKLSAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBbXSwgaGFzUHJvdG8gPSB7dmFsdWU6IGZh
bHNlfSwgbm9kZSA9IG5ldyBOb2RlKCk7Ci0KLSAgICAgICAgZXhwZWN0KCd7Jyk7Ci0KLSAgICAg
ICAgd2hpbGUgKCFtYXRjaCgnfScpKSB7Ci0gICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2gocGFy
c2VPYmplY3RQcm9wZXJ0eShoYXNQcm90bykpOwotCi0gICAgICAgICAgICBpZiAoIW1hdGNoKCd9
JykpIHsKLSAgICAgICAgICAgICAgICBleHBlY3RDb21tYVNlcGFyYXRvcigpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZXhwZWN0KCd9Jyk7Ci0KLSAgICAgICAgcmV0dXJu
IG5vZGUuZmluaXNoT2JqZWN0RXhwcmVzc2lvbihwcm9wZXJ0aWVzKTsKLSAgICB9Ci0KLSAgICBm
dW5jdGlvbiByZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhwcikgewotICAgICAgICB2
YXIgaTsKLSAgICAgICAgc3dpdGNoIChleHByLnR5cGUpIHsKLSAgICAgICAgY2FzZSBTeW50YXgu
SWRlbnRpZmllcjoKLSAgICAgICAgY2FzZSBTeW50YXguTWVtYmVyRXhwcmVzc2lvbjoKLSAgICAg
ICAgY2FzZSBTeW50YXguUmVzdEVsZW1lbnQ6Ci0gICAgICAgIGNhc2UgU3ludGF4LkFzc2lnbm1l
bnRQYXR0ZXJuOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU3ludGF4LlNwcmVh
ZEVsZW1lbnQ6Ci0gICAgICAgICAgICBleHByLnR5cGUgPSBTeW50YXguUmVzdEVsZW1lbnQ7Ci0g
ICAgICAgICAgICByZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhwci5hcmd1bWVudCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTeW50YXguQXJyYXlFeHByZXNzaW9u
OgotICAgICAgICAgICAgZXhwci50eXBlID0gU3ludGF4LkFycmF5UGF0dGVybjsKLSAgICAgICAg
ICAgIGZvciAoaSA9IDA7IGkgPCBleHByLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGV4cHIuZWxlbWVudHNbaV0gIT09IG51bGwpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIuZWxlbWVudHNbaV0pOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFN5bnRheC5PYmplY3RFeHByZXNzaW9uOgotICAgICAgICAgICAgZXhwci50eXBl
ID0gU3ludGF4Lk9iamVjdFBhdHRlcm47Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZXhw
ci5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgcmVpbnRlcnByZXRF
eHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIucHJvcGVydGllc1tpXS52YWx1ZSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTeW50YXguQXNzaWdubWVudEV4
cHJlc3Npb246Ci0gICAgICAgICAgICBleHByLnR5cGUgPSBTeW50YXguQXNzaWdubWVudFBhdHRl
cm47Ci0gICAgICAgICAgICByZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhwci5sZWZ0
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgLy8g
QWxsb3cgb3RoZXIgbm9kZSB0eXBlIGZvciB0b2xlcmFudCBwYXJzaW5nLgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBFQ01BLTI2MiAxMi4yLjkgVGVtcGxh
dGUgTGl0ZXJhbHMKLQotICAgIGZ1bmN0aW9uIHBhcnNlVGVtcGxhdGVFbGVtZW50KG9wdGlvbikg
ewotICAgICAgICB2YXIgbm9kZSwgdG9rZW47Ci0KLSAgICAgICAgaWYgKGxvb2thaGVhZC50eXBl
ICE9PSBUb2tlbi5UZW1wbGF0ZSB8fCAob3B0aW9uLmhlYWQgJiYgIWxvb2thaGVhZC5oZWFkKSkg
ewotICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIG5vZGUgPSBuZXcgTm9kZSgpOwotICAgICAgICB0b2tlbiA9IGxleCgpOwotCi0gICAgICAg
IHJldHVybiBub2RlLmZpbmlzaFRlbXBsYXRlRWxlbWVudCh7IHJhdzogdG9rZW4udmFsdWUucmF3
LCBjb29rZWQ6IHRva2VuLnZhbHVlLmNvb2tlZCB9LCB0b2tlbi50YWlsKTsKLSAgICB9Ci0KLSAg
ICBmdW5jdGlvbiBwYXJzZVRlbXBsYXRlTGl0ZXJhbCgpIHsKLSAgICAgICAgdmFyIHF1YXNpLCBx
dWFzaXMsIGV4cHJlc3Npb25zLCBub2RlID0gbmV3IE5vZGUoKTsKLQotICAgICAgICBxdWFzaSA9
IHBhcnNlVGVtcGxhdGVFbGVtZW50KHsgaGVhZDogdHJ1ZSB9KTsKLSAgICAgICAgcXVhc2lzID0g
W3F1YXNpXTsKLSAgICAgICAgZXhwcmVzc2lvbnMgPSBbXTsKLQotICAgICAgICB3aGlsZSAoIXF1
YXNpLnRhaWwpIHsKLSAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2gocGFyc2VFeHByZXNzaW9u
KCkpOwotICAgICAgICAgICAgcXVhc2kgPSBwYXJzZVRlbXBsYXRlRWxlbWVudCh7IGhlYWQ6IGZh
bHNlIH0pOwotICAgICAgICAgICAgcXVhc2lzLnB1c2gocXVhc2kpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmV0dXJuIG5vZGUuZmluaXNoVGVtcGxhdGVMaXRlcmFsKHF1YXNpcywgZXhwcmVzc2lv
bnMpOwotICAgIH0KLQotICAgIC8vIEVDTUEtMjYyIDEyLjIuMTAgVGhlIEdyb3VwaW5nIE9wZXJh
dG9yCi0KLSAgICBmdW5jdGlvbiBwYXJzZUdyb3VwRXhwcmVzc2lvbigpIHsKLSAgICAgICAgdmFy
IGV4cHIsIGV4cHJlc3Npb25zLCBzdGFydFRva2VuLCBpLCBwYXJhbXMgPSBbXTsKLQotICAgICAg
ICBleHBlY3QoJygnKTsKLQotICAgICAgICBpZiAobWF0Y2goJyknKSkgewotICAgICAgICAgICAg
bGV4KCk7Ci0gICAgICAgICAgICBpZiAoIW1hdGNoKCc9PicpKSB7Ci0gICAgICAgICAgICAgICAg
ZXhwZWN0KCc9PicpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAg
ICAgICAgICAgICB0eXBlOiBQbGFjZUhvbGRlcnMuQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlciwK
LSAgICAgICAgICAgICAgICBwYXJhbXM6IFtdLAotICAgICAgICAgICAgICAgIHJhd1BhcmFtczog
W10KLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLQotICAgICAgICBzdGFydFRva2VuID0gbG9v
a2FoZWFkOwotICAgICAgICBpZiAobWF0Y2goJy4uLicpKSB7Ci0gICAgICAgICAgICBleHByID0g
cGFyc2VSZXN0RWxlbWVudChwYXJhbXMpOwotICAgICAgICAgICAgZXhwZWN0KCcpJyk7Ci0gICAg
ICAgICAgICBpZiAoIW1hdGNoKCc9PicpKSB7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KCc9Picp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB0
eXBlOiBQbGFjZUhvbGRlcnMuQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlciwKLSAgICAgICAgICAg
ICAgICBwYXJhbXM6IFtleHByXQotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlzQmluZGluZ0VsZW1lbnQgPSB0cnVlOwotICAgICAgICBleHByID0gaW5oZXJpdENvdmVyR3Jh
bW1hcihwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKLQotICAgICAgICBpZiAobWF0Y2goJywn
KSkgewotICAgICAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7Ci0gICAgICAgICAg
ICBleHByZXNzaW9ucyA9IFtleHByXTsKLQotICAgICAgICAgICAgd2hpbGUgKHN0YXJ0SW5kZXgg
PCBsZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1hdGNoKCcsJykpIHsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGxl
eCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKG1hdGNoKCcuLi4nKSkgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoIWlzQmluZGluZ0VsZW1lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHRocm93VW5leHBlY3RlZFRva2VuKGxvb2thaGVhZCk7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMucHVzaChwYXJzZVJlc3RFbGVtZW50KHBh
cmFtcykpOwotICAgICAgICAgICAgICAgICAgICBleHBlY3QoJyknKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFtYXRjaCgnPT4nKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0
KCc9PicpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlzQmlu
ZGluZ0VsZW1lbnQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8
IGV4cHJlc3Npb25zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWlu
dGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhwcmVzc2lvbnNbaV0pOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlOiBQbGFjZUhvbGRlcnMuQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogZXhwcmVzc2lvbnMKLSAgICAgICAgICAgICAg
ICAgICAgfTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBleHByZXNzaW9u
cy5wdXNoKGluaGVyaXRDb3ZlckdyYW1tYXIocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbikpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBleHByID0gbmV3IFdyYXBwaW5nTm9kZShzdGFy
dFRva2VuKS5maW5pc2hTZXF1ZW5jZUV4cHJlc3Npb24oZXhwcmVzc2lvbnMpOwotICAgICAgICB9
Ci0KLQotICAgICAgICBleHBlY3QoJyknKTsKLQotICAgICAgICBpZiAobWF0Y2goJz0+JykpIHsK
LSAgICAgICAgICAgIGlmIChleHByLnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyICYmIGV4cHIu
bmFtZSA9PT0gJ3lpZWxkJykgewotICAgICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAg
ICAgICAgICAgIHR5cGU6IFBsYWNlSG9sZGVycy5BcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVyLAot
ICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtleHByXQotICAgICAgICAgICAgICAgIH07Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghaXNCaW5kaW5nRWxlbWVudCkgewotICAg
ICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKGxvb2thaGVhZCk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmIChleHByLnR5cGUgPT09IFN5bnRheC5TZXF1ZW5jZUV4cHJl
c3Npb24pIHsKLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZXhwci5leHByZXNzaW9u
cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICByZWludGVycHJldEV4cHJlc3Np
b25Bc1BhdHRlcm4oZXhwci5leHByZXNzaW9uc1tpXSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZWludGVycHJldEV4cHJlc3Npb25B
c1BhdHRlcm4oZXhwcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGV4cHIgPSB7Ci0g
ICAgICAgICAgICAgICAgdHlwZTogUGxhY2VIb2xkZXJzLkFycm93UGFyYW1ldGVyUGxhY2VIb2xk
ZXIsCi0gICAgICAgICAgICAgICAgcGFyYW1zOiBleHByLnR5cGUgPT09IFN5bnRheC5TZXF1ZW5j
ZUV4cHJlc3Npb24gPyBleHByLmV4cHJlc3Npb25zIDogW2V4cHJdCi0gICAgICAgICAgICB9Owot
ICAgICAgICB9Ci0gICAgICAgIGlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKLSAgICAgICAgcmV0
dXJuIGV4cHI7Ci0gICAgfQotCi0KLSAgICAvLyBFQ01BLTI2MiAxMi4yIFByaW1hcnkgRXhwcmVz
c2lvbnMKLQotICAgIGZ1bmN0aW9uIHBhcnNlUHJpbWFyeUV4cHJlc3Npb24oKSB7Ci0gICAgICAg
IHZhciB0eXBlLCB0b2tlbiwgZXhwciwgbm9kZTsKLQotICAgICAgICBpZiAobWF0Y2goJygnKSkg
ewotICAgICAgICAgICAgaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOwotICAgICAgICAgICAgcmV0
dXJuIGluaGVyaXRDb3ZlckdyYW1tYXIocGFyc2VHcm91cEV4cHJlc3Npb24pOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKG1hdGNoKCdbJykpIHsKLSAgICAgICAgICAgIHJldHVybiBpbmhlcml0
Q292ZXJHcmFtbWFyKHBhcnNlQXJyYXlJbml0aWFsaXplcik7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAobWF0Y2goJ3snKSkgewotICAgICAgICAgICAgcmV0dXJuIGluaGVyaXRDb3ZlckdyYW1t
YXIocGFyc2VPYmplY3RJbml0aWFsaXplcik7Ci0gICAgICAgIH0KLQotICAgICAgICB0eXBlID0g
bG9va2FoZWFkLnR5cGU7Ci0gICAgICAgIG5vZGUgPSBuZXcgTm9kZSgpOwotCi0gICAgICAgIGlm
ICh0eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBpZiAoc3RhdGUuc291
cmNlVHlwZSA9PT0gJ21vZHVsZScgJiYgbG9va2FoZWFkLnZhbHVlID09PSAnYXdhaXQnKSB7Ci0g
ICAgICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4obG9va2FoZWFkKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGV4cHIgPSBub2RlLmZpbmlzaElkZW50aWZpZXIobGV4KCku
dmFsdWUpOwotICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuLlN0cmluZ0xpdGVyYWwg
fHwgdHlwZSA9PT0gVG9rZW4uTnVtZXJpY0xpdGVyYWwpIHsKLSAgICAgICAgICAgIGlzQXNzaWdu
bWVudFRhcmdldCA9IGlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChz
dHJpY3QgJiYgbG9va2FoZWFkLm9jdGFsKSB7Ci0gICAgICAgICAgICAgICAgdG9sZXJhdGVVbmV4
cGVjdGVkVG9rZW4obG9va2FoZWFkLCBNZXNzYWdlcy5TdHJpY3RPY3RhbExpdGVyYWwpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZXhwciA9IG5vZGUuZmluaXNoTGl0ZXJhbChsZXgoKSk7
Ci0gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9rZW4uS2V5d29yZCkgewotICAgICAgICAg
ICAgaWYgKCFzdHJpY3QgJiYgc3RhdGUuYWxsb3dZaWVsZCAmJiBtYXRjaEtleXdvcmQoJ3lpZWxk
JykpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0JpbmRp
bmdFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdmdW5jdGlv
bicpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25FeHByZXNzaW9uKCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCd0aGlzJykpIHsK
LSAgICAgICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5maW5p
c2hUaGlzRXhwcmVzc2lvbigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1hdGNo
S2V5d29yZCgnY2xhc3MnKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUNsYXNzRXhw
cmVzc2lvbigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9r
ZW4obGV4KCkpOwotICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuLkJvb2xlYW5MaXRl
cmFsKSB7Ci0gICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0JpbmRpbmdFbGVtZW50
ID0gZmFsc2U7Ci0gICAgICAgICAgICB0b2tlbiA9IGxleCgpOwotICAgICAgICAgICAgdG9rZW4u
dmFsdWUgPSAodG9rZW4udmFsdWUgPT09ICd0cnVlJyk7Ci0gICAgICAgICAgICBleHByID0gbm9k
ZS5maW5pc2hMaXRlcmFsKHRva2VuKTsKLSAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBUb2tl
bi5OdWxsTGl0ZXJhbCkgewotICAgICAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gaXNCaW5k
aW5nRWxlbWVudCA9IGZhbHNlOwotICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsKLSAgICAgICAg
ICAgIHRva2VuLnZhbHVlID0gbnVsbDsKLSAgICAgICAgICAgIGV4cHIgPSBub2RlLmZpbmlzaExp
dGVyYWwodG9rZW4pOwotICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCcvJykgfHwgbWF0Y2goJy89
JykpIHsKLSAgICAgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGlzQmluZGluZ0VsZW1lbnQg
PSBmYWxzZTsKLSAgICAgICAgICAgIGluZGV4ID0gc3RhcnRJbmRleDsKLQotICAgICAgICAgICAg
aWYgKHR5cGVvZiBleHRyYS50b2tlbnMgIT09ICd1bmRlZmluZWQnKSB7Ci0gICAgICAgICAgICAg
ICAgdG9rZW4gPSBjb2xsZWN0UmVnZXgoKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgdG9rZW4gPSBzY2FuUmVnRXhwKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBsZXgoKTsKLSAgICAgICAgICAgIGV4cHIgPSBub2RlLmZpbmlzaExpdGVyYWwodG9rZW4pOwot
ICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuLlRlbXBsYXRlKSB7Ci0gICAgICAgICAg
ICBleHByID0gcGFyc2VUZW1wbGF0ZUxpdGVyYWwoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKGxleCgpKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHJldHVybiBleHByOwotICAgIH0KLQotICAgIC8vIEVDTUEtMjYyIDEyLjMgTGVmdC1IYW5kLVNp
ZGUgRXhwcmVzc2lvbnMKLQotICAgIGZ1bmN0aW9uIHBhcnNlQXJndW1lbnRzKCkgewotICAgICAg
ICB2YXIgYXJncyA9IFtdLCBleHByOwotCi0gICAgICAgIGV4cGVjdCgnKCcpOwotCi0gICAgICAg
IGlmICghbWF0Y2goJyknKSkgewotICAgICAgICAgICAgd2hpbGUgKHN0YXJ0SW5kZXggPCBsZW5n
dGgpIHsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2goJy4uLicpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGV4cHIgPSBuZXcgTm9kZSgpOwotICAgICAgICAgICAgICAgICAgICBsZXgoKTsKLSAg
ICAgICAgICAgICAgICAgICAgZXhwci5maW5pc2hTcHJlYWRFbGVtZW50KGlzb2xhdGVDb3Zlckdy
YW1tYXIocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbikpOwotICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4cHIgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNl
QXNzaWdubWVudEV4cHJlc3Npb24pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBhcmdzLnB1c2goZXhwcik7Ci0gICAgICAgICAgICAgICAgaWYgKG1hdGNoKCcpJykpIHsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGV4cGVjdENvbW1hU2VwYXJhdG9yKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICBleHBlY3QoJyknKTsKLQotICAgICAgICByZXR1cm4gYXJnczsKLSAgICB9Ci0KLSAg
ICBmdW5jdGlvbiBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKSB7Ci0gICAgICAgIHZhciB0b2tl
biwgbm9kZSA9IG5ldyBOb2RlKCk7Ci0KLSAgICAgICAgdG9rZW4gPSBsZXgoKTsKLQotICAgICAg
ICBpZiAoIWlzSWRlbnRpZmllck5hbWUodG9rZW4pKSB7Ci0gICAgICAgICAgICB0aHJvd1VuZXhw
ZWN0ZWRUb2tlbih0b2tlbik7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbm9kZS5maW5p
c2hJZGVudGlmaWVyKHRva2VuLnZhbHVlKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBwYXJzZU5v
bkNvbXB1dGVkTWVtYmVyKCkgewotICAgICAgICBleHBlY3QoJy4nKTsKLQotICAgICAgICByZXR1
cm4gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGFy
c2VDb21wdXRlZE1lbWJlcigpIHsKLSAgICAgICAgdmFyIGV4cHI7Ci0KLSAgICAgICAgZXhwZWN0
KCdbJyk7Ci0KLSAgICAgICAgZXhwciA9IGlzb2xhdGVDb3ZlckdyYW1tYXIocGFyc2VFeHByZXNz
aW9uKTsKLQotICAgICAgICBleHBlY3QoJ10nKTsKLQotICAgICAgICByZXR1cm4gZXhwcjsKLSAg
ICB9Ci0KLSAgICAvLyBFQ01BLTI2MiAxMi4zLjMgVGhlIG5ldyBPcGVyYXRvcgotCi0gICAgZnVu
Y3Rpb24gcGFyc2VOZXdFeHByZXNzaW9uKCkgewotICAgICAgICB2YXIgY2FsbGVlLCBhcmdzLCBu
b2RlID0gbmV3IE5vZGUoKTsKLQotICAgICAgICBleHBlY3RLZXl3b3JkKCduZXcnKTsKLQotICAg
ICAgICBpZiAobWF0Y2goJy4nKSkgewotICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAgICAgICBp
ZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIgJiYgbG9va2FoZWFkLnZhbHVl
ID09PSAndGFyZ2V0JykgewotICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5pbkZ1bmN0aW9uQm9k
eSkgewotICAgICAgICAgICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG5vZGUuZmluaXNoTWV0YVByb3BlcnR5KCduZXcnLCAndGFyZ2V0Jyk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4o
bG9va2FoZWFkKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNhbGxlZSA9IGlzb2xhdGVDb3Zlckdy
YW1tYXIocGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uKTsKLSAgICAgICAgYXJncyA9IG1hdGNo
KCcoJykgPyBwYXJzZUFyZ3VtZW50cygpIDogW107Ci0KLSAgICAgICAgaXNBc3NpZ25tZW50VGFy
Z2V0ID0gaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOwotCi0gICAgICAgIHJldHVybiBub2RlLmZp
bmlzaE5ld0V4cHJlc3Npb24oY2FsbGVlLCBhcmdzKTsKLSAgICB9Ci0KLSAgICAvLyBFQ01BLTI2
MiAxMi4zLjQgRnVuY3Rpb24gQ2FsbHMKLQotICAgIGZ1bmN0aW9uIHBhcnNlTGVmdEhhbmRTaWRl
RXhwcmVzc2lvbkFsbG93Q2FsbCgpIHsKLSAgICAgICAgdmFyIHF1YXNpLCBleHByLCBhcmdzLCBw
cm9wZXJ0eSwgc3RhcnRUb2tlbiwgcHJldmlvdXNBbGxvd0luID0gc3RhdGUuYWxsb3dJbjsKLQot
ICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOwotICAgICAgICBzdGF0ZS5hbGxvd0luID0g
dHJ1ZTsKLQotICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdzdXBlcicpICYmIHN0YXRlLmluRnVu
Y3Rpb25Cb2R5KSB7Ci0gICAgICAgICAgICBleHByID0gbmV3IE5vZGUoKTsKLSAgICAgICAgICAg
IGxleCgpOwotICAgICAgICAgICAgZXhwciA9IGV4cHIuZmluaXNoU3VwZXIoKTsKLSAgICAgICAg
ICAgIGlmICghbWF0Y2goJygnKSAmJiAhbWF0Y2goJy4nKSAmJiAhbWF0Y2goJ1snKSkgewotICAg
ICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKGxvb2thaGVhZCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBleHByID0gaW5oZXJpdENvdmVyR3Jh
bW1hcihtYXRjaEtleXdvcmQoJ25ldycpID8gcGFyc2VOZXdFeHByZXNzaW9uIDogcGFyc2VQcmlt
YXJ5RXhwcmVzc2lvbik7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAg
ICAgICBpZiAobWF0Y2goJy4nKSkgewotICAgICAgICAgICAgICAgIGlzQmluZGluZ0VsZW1lbnQg
PSBmYWxzZTsKLSAgICAgICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIHByb3BlcnR5ID0gcGFyc2VOb25Db21wdXRlZE1lbWJlcigpOwotICAgICAg
ICAgICAgICAgIGV4cHIgPSBuZXcgV3JhcHBpbmdOb2RlKHN0YXJ0VG9rZW4pLmZpbmlzaE1lbWJl
ckV4cHJlc3Npb24oJy4nLCBleHByLCBwcm9wZXJ0eSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KG1hdGNoKCcoJykpIHsKLSAgICAgICAgICAgICAgICBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgYXJncyA9IHBhcnNlQXJndW1lbnRzKCk7Ci0gICAgICAgICAgICAgICAgZXhwciA9IG5l
dyBXcmFwcGluZ05vZGUoc3RhcnRUb2tlbikuZmluaXNoQ2FsbEV4cHJlc3Npb24oZXhwciwgYXJn
cyk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCdbJykpIHsKLSAgICAgICAgICAgICAg
ICBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgaXNBc3NpZ25tZW50
VGFyZ2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9IHBhcnNlQ29tcHV0ZWRN
ZW1iZXIoKTsKLSAgICAgICAgICAgICAgICBleHByID0gbmV3IFdyYXBwaW5nTm9kZShzdGFydFRv
a2VuKS5maW5pc2hNZW1iZXJFeHByZXNzaW9uKCdbJywgZXhwciwgcHJvcGVydHkpOwotICAgICAg
ICAgICAgfSBlbHNlIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uVGVtcGxhdGUgJiYgbG9v
a2FoZWFkLmhlYWQpIHsKLSAgICAgICAgICAgICAgICBxdWFzaSA9IHBhcnNlVGVtcGxhdGVMaXRl
cmFsKCk7Ci0gICAgICAgICAgICAgICAgZXhwciA9IG5ldyBXcmFwcGluZ05vZGUoc3RhcnRUb2tl
bikuZmluaXNoVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uKGV4cHIsIHF1YXNpKTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJbjsKLQotICAgICAg
ICByZXR1cm4gZXhwcjsKLSAgICB9Ci0KLSAgICAvLyBFQ01BLTI2MiAxMi4zIExlZnQtSGFuZC1T
aWRlIEV4cHJlc3Npb25zCi0KLSAgICBmdW5jdGlvbiBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Np
b24oKSB7Ci0gICAgICAgIHZhciBxdWFzaSwgZXhwciwgcHJvcGVydHksIHN0YXJ0VG9rZW47Ci0g
ICAgICAgIGFzc2VydChzdGF0ZS5hbGxvd0luLCAnY2FsbGVlIG9mIG5ldyBleHByZXNzaW9uIGFs
d2F5cyBhbGxvdyBpbiBrZXl3b3JkLicpOwotCi0gICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhl
YWQ7Ci0KLSAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnc3VwZXInKSAmJiBzdGF0ZS5pbkZ1bmN0
aW9uQm9keSkgewotICAgICAgICAgICAgZXhwciA9IG5ldyBOb2RlKCk7Ci0gICAgICAgICAgICBs
ZXgoKTsKLSAgICAgICAgICAgIGV4cHIgPSBleHByLmZpbmlzaFN1cGVyKCk7Ci0gICAgICAgICAg
ICBpZiAoIW1hdGNoKCdbJykgJiYgIW1hdGNoKCcuJykpIHsKLSAgICAgICAgICAgICAgICB0aHJv
d1VuZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgZXhwciA9IGluaGVyaXRDb3ZlckdyYW1tYXIobWF0Y2hLZXl3b3Jk
KCduZXcnKSA/IHBhcnNlTmV3RXhwcmVzc2lvbiA6IHBhcnNlUHJpbWFyeUV4cHJlc3Npb24pOwot
ICAgICAgICB9Ci0KLSAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgaWYgKG1hdGNoKCdb
JykpIHsKLSAgICAgICAgICAgICAgICBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBwcm9w
ZXJ0eSA9IHBhcnNlQ29tcHV0ZWRNZW1iZXIoKTsKLSAgICAgICAgICAgICAgICBleHByID0gbmV3
IFdyYXBwaW5nTm9kZShzdGFydFRva2VuKS5maW5pc2hNZW1iZXJFeHByZXNzaW9uKCdbJywgZXhw
ciwgcHJvcGVydHkpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnLicpKSB7Ci0gICAg
ICAgICAgICAgICAgaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGlz
QXNzaWdubWVudFRhcmdldCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcHJvcGVydHkgPSBwYXJz
ZU5vbkNvbXB1dGVkTWVtYmVyKCk7Ci0gICAgICAgICAgICAgICAgZXhwciA9IG5ldyBXcmFwcGlu
Z05vZGUoc3RhcnRUb2tlbikuZmluaXNoTWVtYmVyRXhwcmVzc2lvbignLicsIGV4cHIsIHByb3Bl
cnR5KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLlRl
bXBsYXRlICYmIGxvb2thaGVhZC5oZWFkKSB7Ci0gICAgICAgICAgICAgICAgcXVhc2kgPSBwYXJz
ZVRlbXBsYXRlTGl0ZXJhbCgpOwotICAgICAgICAgICAgICAgIGV4cHIgPSBuZXcgV3JhcHBpbmdO
b2RlKHN0YXJ0VG9rZW4pLmZpbmlzaFRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbihleHByLCBxdWFz
aSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBleHByOwotICAgIH0KLQotICAgIC8v
IEVDTUEtMjYyIDEyLjQgUG9zdGZpeCBFeHByZXNzaW9ucwotCi0gICAgZnVuY3Rpb24gcGFyc2VQ
b3N0Zml4RXhwcmVzc2lvbigpIHsKLSAgICAgICAgdmFyIGV4cHIsIHRva2VuLCBzdGFydFRva2Vu
ID0gbG9va2FoZWFkOwotCi0gICAgICAgIGV4cHIgPSBpbmhlcml0Q292ZXJHcmFtbWFyKHBhcnNl
TGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCk7Ci0KLSAgICAgICAgaWYgKCFoYXNMaW5l
VGVybWluYXRvciAmJiBsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvcikgewotICAg
ICAgICAgICAgaWYgKG1hdGNoKCcrKycpIHx8IG1hdGNoKCctLScpKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gRUNNQS0yNjIgMTEuMy4xLCAxMS4zLjIKLSAgICAgICAgICAgICAgICBpZiAoc3RyaWN0
ICYmIGV4cHIudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIgJiYgaXNSZXN0cmljdGVkV29yZChl
eHByLm5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRvbGVyYXRlRXJyb3IoTWVzc2FnZXMu
U3RyaWN0TEhTUG9zdGZpeCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
aWYgKCFpc0Fzc2lnbm1lbnRUYXJnZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgdG9sZXJhdGVF
cnJvcihNZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0JpbmRpbmdFbGVtZW50
ID0gZmFsc2U7Ci0KLSAgICAgICAgICAgICAgICB0b2tlbiA9IGxleCgpOwotICAgICAgICAgICAg
ICAgIGV4cHIgPSBuZXcgV3JhcHBpbmdOb2RlKHN0YXJ0VG9rZW4pLmZpbmlzaFBvc3RmaXhFeHBy
ZXNzaW9uKHRva2VuLnZhbHVlLCBleHByKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiBleHByOwotICAgIH0KLQotICAgIC8vIEVDTUEtMjYyIDEyLjUgVW5hcnkg
T3BlcmF0b3JzCi0KLSAgICBmdW5jdGlvbiBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpIHsKLSAgICAg
ICAgdmFyIHRva2VuLCBleHByLCBzdGFydFRva2VuOwotCi0gICAgICAgIGlmIChsb29rYWhlYWQu
dHlwZSAhPT0gVG9rZW4uUHVuY3R1YXRvciAmJiBsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uS2V5
d29yZCkgewotICAgICAgICAgICAgZXhwciA9IHBhcnNlUG9zdGZpeEV4cHJlc3Npb24oKTsKLSAg
ICAgICAgfSBlbHNlIGlmIChtYXRjaCgnKysnKSB8fCBtYXRjaCgnLS0nKSkgewotICAgICAgICAg
ICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKLSAgICAgICAgICAgIHRva2VuID0gbGV4KCk7Ci0g
ICAgICAgICAgICBleHByID0gaW5oZXJpdENvdmVyR3JhbW1hcihwYXJzZVVuYXJ5RXhwcmVzc2lv
bik7Ci0gICAgICAgICAgICAvLyBFQ01BLTI2MiAxMS40LjQsIDExLjQuNQotICAgICAgICAgICAg
aWYgKHN0cmljdCAmJiBleHByLnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyICYmIGlzUmVzdHJp
Y3RlZFdvcmQoZXhwci5uYW1lKSkgewotICAgICAgICAgICAgICAgIHRvbGVyYXRlRXJyb3IoTWVz
c2FnZXMuU3RyaWN0TEhTUHJlZml4KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYg
KCFpc0Fzc2lnbm1lbnRUYXJnZXQpIHsKLSAgICAgICAgICAgICAgICB0b2xlcmF0ZUVycm9yKE1l
c3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZXhwciA9IG5ldyBXcmFwcGluZ05vZGUoc3RhcnRUb2tlbikuZmluaXNoVW5hcnlFeHByZXNz
aW9uKHRva2VuLnZhbHVlLCBleHByKTsKLSAgICAgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9
IGlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKLSAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnKycp
IHx8IG1hdGNoKCctJykgfHwgbWF0Y2goJ34nKSB8fCBtYXRjaCgnIScpKSB7Ci0gICAgICAgICAg
ICBzdGFydFRva2VuID0gbG9va2FoZWFkOwotICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsKLSAg
ICAgICAgICAgIGV4cHIgPSBpbmhlcml0Q292ZXJHcmFtbWFyKHBhcnNlVW5hcnlFeHByZXNzaW9u
KTsKLSAgICAgICAgICAgIGV4cHIgPSBuZXcgV3JhcHBpbmdOb2RlKHN0YXJ0VG9rZW4pLmZpbmlz
aFVuYXJ5RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgZXhwcik7Ci0gICAgICAgICAgICBpc0Fzc2ln
bm1lbnRUYXJnZXQgPSBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSBp
ZiAobWF0Y2hLZXl3b3JkKCdkZWxldGUnKSB8fCBtYXRjaEtleXdvcmQoJ3ZvaWQnKSB8fCBtYXRj
aEtleXdvcmQoJ3R5cGVvZicpKSB7Ci0gICAgICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFk
OwotICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsKLSAgICAgICAgICAgIGV4cHIgPSBpbmhlcml0
Q292ZXJHcmFtbWFyKHBhcnNlVW5hcnlFeHByZXNzaW9uKTsKLSAgICAgICAgICAgIGV4cHIgPSBu
ZXcgV3JhcHBpbmdOb2RlKHN0YXJ0VG9rZW4pLmZpbmlzaFVuYXJ5RXhwcmVzc2lvbih0b2tlbi52
YWx1ZSwgZXhwcik7Ci0gICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGV4cHIub3BlcmF0b3IgPT09
ICdkZWxldGUnICYmIGV4cHIuYXJndW1lbnQudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIpIHsK
LSAgICAgICAgICAgICAgICB0b2xlcmF0ZUVycm9yKE1lc3NhZ2VzLlN0cmljdERlbGV0ZSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0JpbmRpbmdF
bGVtZW50ID0gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBleHByID0gcGFy
c2VQb3N0Zml4RXhwcmVzc2lvbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGV4cHI7
Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gYmluYXJ5UHJlY2VkZW5jZSh0b2tlbiwgYWxsb3dJbikg
ewotICAgICAgICB2YXIgcHJlYyA9IDA7Ci0KLSAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRv
a2VuLlB1bmN0dWF0b3IgJiYgdG9rZW4udHlwZSAhPT0gVG9rZW4uS2V5d29yZCkgewotICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKHRva2VuLnZhbHVl
KSB7Ci0gICAgICAgIGNhc2UgJ3x8JzoKLSAgICAgICAgICAgIHByZWMgPSAxOwotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSAnJiYnOgotICAgICAgICAgICAgcHJlYyA9IDI7Ci0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlICd8JzoKLSAgICAgICAgICAgIHByZWMg
PSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSAnXic6Ci0gICAgICAgICAg
ICBwcmVjID0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgJyYnOgotICAg
ICAgICAgICAgcHJlYyA9IDU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlICc9
PSc6Ci0gICAgICAgIGNhc2UgJyE9JzoKLSAgICAgICAgY2FzZSAnPT09JzoKLSAgICAgICAgY2Fz
ZSAnIT09JzoKLSAgICAgICAgICAgIHByZWMgPSA2OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgY2FzZSAnPCc6Ci0gICAgICAgIGNhc2UgJz4nOgotICAgICAgICBjYXNlICc8PSc6Ci0g
ICAgICAgIGNhc2UgJz49JzoKLSAgICAgICAgY2FzZSAnaW5zdGFuY2VvZic6Ci0gICAgICAgICAg
ICBwcmVjID0gNzsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgJ2luJzoKLSAg
ICAgICAgICAgIHByZWMgPSBhbGxvd0luID8gNyA6IDA7Ci0gICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICBjYXNlICc8PCc6Ci0gICAgICAgIGNhc2UgJz4+JzoKLSAgICAgICAgY2FzZSAnPj4+
JzoKLSAgICAgICAgICAgIHByZWMgPSA4OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
Y2FzZSAnKyc6Ci0gICAgICAgIGNhc2UgJy0nOgotICAgICAgICAgICAgcHJlYyA9IDk7Ci0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlICcqJzoKLSAgICAgICAgY2FzZSAnLyc6Ci0g
ICAgICAgIGNhc2UgJyUnOgotICAgICAgICAgICAgcHJlYyA9IDExOwotICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0K
LSAgICAgICAgcmV0dXJuIHByZWM7Ci0gICAgfQotCi0gICAgLy8gRUNNQS0yNjIgMTIuNiBNdWx0
aXBsaWNhdGl2ZSBPcGVyYXRvcnMKLSAgICAvLyBFQ01BLTI2MiAxMi43IEFkZGl0aXZlIE9wZXJh
dG9ycwotICAgIC8vIEVDTUEtMjYyIDEyLjggQml0d2lzZSBTaGlmdCBPcGVyYXRvcnMKLSAgICAv
LyBFQ01BLTI2MiAxMi45IFJlbGF0aW9uYWwgT3BlcmF0b3JzCi0gICAgLy8gRUNNQS0yNjIgMTIu
MTAgRXF1YWxpdHkgT3BlcmF0b3JzCi0gICAgLy8gRUNNQS0yNjIgMTIuMTEgQmluYXJ5IEJpdHdp
c2UgT3BlcmF0b3JzCi0gICAgLy8gRUNNQS0yNjIgMTIuMTIgQmluYXJ5IExvZ2ljYWwgT3BlcmF0
b3JzCi0KLSAgICBmdW5jdGlvbiBwYXJzZUJpbmFyeUV4cHJlc3Npb24oKSB7Ci0gICAgICAgIHZh
ciBtYXJrZXIsIG1hcmtlcnMsIGV4cHIsIHRva2VuLCBwcmVjLCBzdGFjaywgcmlnaHQsIG9wZXJh
dG9yLCBsZWZ0LCBpOwotCi0gICAgICAgIG1hcmtlciA9IGxvb2thaGVhZDsKLSAgICAgICAgbGVm
dCA9IGluaGVyaXRDb3ZlckdyYW1tYXIocGFyc2VVbmFyeUV4cHJlc3Npb24pOwotCi0gICAgICAg
IHRva2VuID0gbG9va2FoZWFkOwotICAgICAgICBwcmVjID0gYmluYXJ5UHJlY2VkZW5jZSh0b2tl
biwgc3RhdGUuYWxsb3dJbik7Ci0gICAgICAgIGlmIChwcmVjID09PSAwKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gbGVmdDsKLSAgICAgICAgfQotICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBp
c0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgIHRva2VuLnByZWMgPSBwcmVjOwotICAg
ICAgICBsZXgoKTsKLQotICAgICAgICBtYXJrZXJzID0gW21hcmtlciwgbG9va2FoZWFkXTsKLSAg
ICAgICAgcmlnaHQgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlVW5hcnlFeHByZXNzaW9uKTsK
LQotICAgICAgICBzdGFjayA9IFtsZWZ0LCB0b2tlbiwgcmlnaHRdOwotCi0gICAgICAgIHdoaWxl
ICgocHJlYyA9IGJpbmFyeVByZWNlZGVuY2UobG9va2FoZWFkLCBzdGF0ZS5hbGxvd0luKSkgPiAw
KSB7Ci0KLSAgICAgICAgICAgIC8vIFJlZHVjZTogbWFrZSBhIGJpbmFyeSBleHByZXNzaW9uIGZy
b20gdGhlIHRocmVlIHRvcG1vc3QgZW50cmllcy4KLSAgICAgICAgICAgIHdoaWxlICgoc3RhY2su
bGVuZ3RoID4gMikgJiYgKHByZWMgPD0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMl0ucHJlYykpIHsK
LSAgICAgICAgICAgICAgICByaWdodCA9IHN0YWNrLnBvcCgpOwotICAgICAgICAgICAgICAgIG9w
ZXJhdG9yID0gc3RhY2sucG9wKCkudmFsdWU7Ci0gICAgICAgICAgICAgICAgbGVmdCA9IHN0YWNr
LnBvcCgpOwotICAgICAgICAgICAgICAgIG1hcmtlcnMucG9wKCk7Ci0gICAgICAgICAgICAgICAg
ZXhwciA9IG5ldyBXcmFwcGluZ05vZGUobWFya2Vyc1ttYXJrZXJzLmxlbmd0aCAtIDFdKS5maW5p
c2hCaW5hcnlFeHByZXNzaW9uKG9wZXJhdG9yLCBsZWZ0LCByaWdodCk7Ci0gICAgICAgICAgICAg
ICAgc3RhY2sucHVzaChleHByKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gU2hp
ZnQuCi0gICAgICAgICAgICB0b2tlbiA9IGxleCgpOwotICAgICAgICAgICAgdG9rZW4ucHJlYyA9
IHByZWM7Ci0gICAgICAgICAgICBzdGFjay5wdXNoKHRva2VuKTsKLSAgICAgICAgICAgIG1hcmtl
cnMucHVzaChsb29rYWhlYWQpOwotICAgICAgICAgICAgZXhwciA9IGlzb2xhdGVDb3ZlckdyYW1t
YXIocGFyc2VVbmFyeUV4cHJlc3Npb24pOwotICAgICAgICAgICAgc3RhY2sucHVzaChleHByKTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIEZpbmFsIHJlZHVjZSB0byBjbGVhbi11cCB0aGUgc3Rh
Y2suCi0gICAgICAgIGkgPSBzdGFjay5sZW5ndGggLSAxOwotICAgICAgICBleHByID0gc3RhY2tb
aV07Ci0gICAgICAgIG1hcmtlcnMucG9wKCk7Ci0gICAgICAgIHdoaWxlIChpID4gMSkgewotICAg
ICAgICAgICAgZXhwciA9IG5ldyBXcmFwcGluZ05vZGUobWFya2Vycy5wb3AoKSkuZmluaXNoQmlu
YXJ5RXhwcmVzc2lvbihzdGFja1tpIC0gMV0udmFsdWUsIHN0YWNrW2kgLSAyXSwgZXhwcik7Ci0g
ICAgICAgICAgICBpIC09IDI7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZXhwcjsKLSAg
ICB9Ci0KLQotICAgIC8vIEVDTUEtMjYyIDEyLjEzIENvbmRpdGlvbmFsIE9wZXJhdG9yCi0KLSAg
ICBmdW5jdGlvbiBwYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbigpIHsKLSAgICAgICAgdmFyIGV4
cHIsIHByZXZpb3VzQWxsb3dJbiwgY29uc2VxdWVudCwgYWx0ZXJuYXRlLCBzdGFydFRva2VuOwot
Ci0gICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7Ci0KLSAgICAgICAgZXhwciA9IGluaGVy
aXRDb3ZlckdyYW1tYXIocGFyc2VCaW5hcnlFeHByZXNzaW9uKTsKLSAgICAgICAgaWYgKG1hdGNo
KCc/JykpIHsKLSAgICAgICAgICAgIGxleCgpOwotICAgICAgICAgICAgcHJldmlvdXNBbGxvd0lu
ID0gc3RhdGUuYWxsb3dJbjsKLSAgICAgICAgICAgIHN0YXRlLmFsbG93SW4gPSB0cnVlOwotICAg
ICAgICAgICAgY29uc2VxdWVudCA9IGlzb2xhdGVDb3ZlckdyYW1tYXIocGFyc2VBc3NpZ25tZW50
RXhwcmVzc2lvbik7Ci0gICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gcHJldmlvdXNBbGxvd0lu
OwotICAgICAgICAgICAgZXhwZWN0KCc6Jyk7Ci0gICAgICAgICAgICBhbHRlcm5hdGUgPSBpc29s
YXRlQ292ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOwotCi0gICAgICAgICAg
ICBleHByID0gbmV3IFdyYXBwaW5nTm9kZShzdGFydFRva2VuKS5maW5pc2hDb25kaXRpb25hbEV4
cHJlc3Npb24oZXhwciwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKTsKLSAgICAgICAgICAgIGlzQXNz
aWdubWVudFRhcmdldCA9IGlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiBleHByOwotICAgIH0KLQotICAgIC8vIEVDTUEtMjYyIDE0LjIgQXJyb3cg
RnVuY3Rpb24gRGVmaW5pdGlvbnMKLQotICAgIGZ1bmN0aW9uIHBhcnNlQ29uY2lzZUJvZHkoKSB7
Ci0gICAgICAgIGlmIChtYXRjaCgneycpKSB7Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VGdW5j
dGlvblNvdXJjZUVsZW1lbnRzKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGlzb2xhdGVD
b3ZlckdyYW1tYXIocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7Ci0gICAgfQotCi0gICAgZnVu
Y3Rpb24gY2hlY2tQYXR0ZXJuUGFyYW0ob3B0aW9ucywgcGFyYW0pIHsKLSAgICAgICAgdmFyIGk7
Ci0gICAgICAgIHN3aXRjaCAocGFyYW0udHlwZSkgewotICAgICAgICBjYXNlIFN5bnRheC5JZGVu
dGlmaWVyOgotICAgICAgICAgICAgdmFsaWRhdGVQYXJhbShvcHRpb25zLCBwYXJhbSwgcGFyYW0u
bmFtZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTeW50YXguUmVzdEVsZW1l
bnQ6Ci0gICAgICAgICAgICBjaGVja1BhdHRlcm5QYXJhbShvcHRpb25zLCBwYXJhbS5hcmd1bWVu
dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTeW50YXguQXNzaWdubWVudFBh
dHRlcm46Ci0gICAgICAgICAgICBjaGVja1BhdHRlcm5QYXJhbShvcHRpb25zLCBwYXJhbS5sZWZ0
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFN5bnRheC5BcnJheVBhdHRlcm46
Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFyYW0uZWxlbWVudHMubGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgICAgICAgICBpZiAocGFyYW0uZWxlbWVudHNbaV0gIT09IG51bGwpIHsKLSAg
ICAgICAgICAgICAgICAgICAgY2hlY2tQYXR0ZXJuUGFyYW0ob3B0aW9ucywgcGFyYW0uZWxlbWVu
dHNbaV0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIFN5bnRheC5ZaWVsZEV4cHJlc3Npb246Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGFzc2VydChwYXJhbS50eXBlID09
PSBTeW50YXguT2JqZWN0UGF0dGVybiwgJ0ludmFsaWQgdHlwZScpOwotICAgICAgICAgICAgZm9y
IChpID0gMDsgaSA8IHBhcmFtLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAg
ICAgICBjaGVja1BhdHRlcm5QYXJhbShvcHRpb25zLCBwYXJhbS5wcm9wZXJ0aWVzW2ldLnZhbHVl
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGZ1bmN0aW9uIHJlaW50ZXJwcmV0QXNDb3ZlckZvcm1hbHNMaXN0KGV4cHIpIHsKLSAgICAg
ICAgdmFyIGksIGxlbiwgcGFyYW0sIHBhcmFtcywgZGVmYXVsdHMsIGRlZmF1bHRDb3VudCwgb3B0
aW9ucywgdG9rZW47Ci0KLSAgICAgICAgZGVmYXVsdHMgPSBbXTsKLSAgICAgICAgZGVmYXVsdENv
dW50ID0gMDsKLSAgICAgICAgcGFyYW1zID0gW2V4cHJdOwotCi0gICAgICAgIHN3aXRjaCAoZXhw
ci50eXBlKSB7Ci0gICAgICAgIGNhc2UgU3ludGF4LklkZW50aWZpZXI6Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBQbGFjZUhvbGRlcnMuQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRl
cjoKLSAgICAgICAgICAgIHBhcmFtcyA9IGV4cHIucGFyYW1zOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQot
Ci0gICAgICAgIG9wdGlvbnMgPSB7Ci0gICAgICAgICAgICBwYXJhbVNldDoge30KLSAgICAgICAg
fTsKLQotICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBwYXJhbXMubGVuZ3RoOyBpIDwgbGVuOyBp
ICs9IDEpIHsKLSAgICAgICAgICAgIHBhcmFtID0gcGFyYW1zW2ldOwotICAgICAgICAgICAgc3dp
dGNoIChwYXJhbS50eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFN5bnRheC5Bc3NpZ25tZW50UGF0
dGVybjoKLSAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBwYXJhbS5sZWZ0OwotICAgICAgICAg
ICAgICAgIGlmIChwYXJhbS5yaWdodC50eXBlID09PSBTeW50YXguWWllbGRFeHByZXNzaW9uKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbS5yaWdodC5hcmd1bWVudCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4obG9va2FoZWFkKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBwYXJhbS5yaWdodC50eXBlID0g
U3ludGF4LklkZW50aWZpZXI7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtLnJpZ2h0Lm5hbWUg
PSAneWllbGQnOwotICAgICAgICAgICAgICAgICAgICBkZWxldGUgcGFyYW0ucmlnaHQuYXJndW1l
bnQ7Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJhbS5yaWdodC5kZWxlZ2F0ZTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZGVmYXVsdHMucHVzaChwYXJhbS5yaWdo
dCk7Ci0gICAgICAgICAgICAgICAgKytkZWZhdWx0Q291bnQ7Ci0gICAgICAgICAgICAgICAgY2hl
Y2tQYXR0ZXJuUGFyYW0ob3B0aW9ucywgcGFyYW0ubGVmdCk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGNoZWNrUGF0dGVyblBh
cmFtKG9wdGlvbnMsIHBhcmFtKTsKLSAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBwYXJhbTsK
LSAgICAgICAgICAgICAgICBkZWZhdWx0cy5wdXNoKG51bGwpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0cmljdCB8fCAh
c3RhdGUuYWxsb3dZaWVsZCkgewotICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcGFyYW1z
Lmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7Ci0gICAgICAgICAgICAgICAgcGFyYW0gPSBwYXJh
bXNbaV07Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmFtLnR5cGUgPT09IFN5bnRheC5ZaWVsZEV4
cHJlc3Npb24pIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4obG9v
a2FoZWFkKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAob3B0aW9ucy5tZXNzYWdlID09PSBNZXNzYWdlcy5TdHJpY3RQYXJhbUR1cGUp
IHsKLSAgICAgICAgICAgIHRva2VuID0gc3RyaWN0ID8gb3B0aW9ucy5zdHJpY3RlZCA6IG9wdGlv
bnMuZmlyc3RSZXN0cmljdGVkOwotICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4odG9r
ZW4sIG9wdGlvbnMubWVzc2FnZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGVmYXVsdENv
dW50ID09PSAwKSB7Ci0gICAgICAgICAgICBkZWZhdWx0cyA9IFtdOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgIHBhcmFtczogcGFyYW1zLAotICAgICAgICAgICAg
ZGVmYXVsdHM6IGRlZmF1bHRzLAotICAgICAgICAgICAgc3RyaWN0ZWQ6IG9wdGlvbnMuc3RyaWN0
ZWQsCi0gICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQ6IG9wdGlvbnMuZmlyc3RSZXN0cmljdGVk
LAotICAgICAgICAgICAgbWVzc2FnZTogb3B0aW9ucy5tZXNzYWdlCi0gICAgICAgIH07Ci0gICAg
fQotCi0gICAgZnVuY3Rpb24gcGFyc2VBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbihvcHRpb25zLCBu
b2RlKSB7Ci0gICAgICAgIHZhciBwcmV2aW91c1N0cmljdCwgcHJldmlvdXNBbGxvd1lpZWxkLCBi
b2R5OwotCi0gICAgICAgIGlmIChoYXNMaW5lVGVybWluYXRvcikgewotICAgICAgICAgICAgdG9s
ZXJhdGVVbmV4cGVjdGVkVG9rZW4obG9va2FoZWFkKTsKLSAgICAgICAgfQotICAgICAgICBleHBl
Y3QoJz0+Jyk7Ci0KLSAgICAgICAgcHJldmlvdXNTdHJpY3QgPSBzdHJpY3Q7Ci0gICAgICAgIHBy
ZXZpb3VzQWxsb3dZaWVsZCA9IHN0YXRlLmFsbG93WWllbGQ7Ci0gICAgICAgIHN0YXRlLmFsbG93
WWllbGQgPSB0cnVlOwotCi0gICAgICAgIGJvZHkgPSBwYXJzZUNvbmNpc2VCb2R5KCk7Ci0KLSAg
ICAgICAgaWYgKHN0cmljdCAmJiBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCkgewotICAgICAgICAg
ICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4ob3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQsIG9wdGlvbnMu
bWVzc2FnZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHN0cmljdCAmJiBvcHRpb25zLnN0cmlj
dGVkKSB7Ci0gICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihvcHRpb25zLnN0cmlj
dGVkLCBvcHRpb25zLm1lc3NhZ2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RyaWN0ID0gcHJl
dmlvdXNTdHJpY3Q7Ci0gICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWll
bGQ7Ci0KLSAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24o
b3B0aW9ucy5wYXJhbXMsIG9wdGlvbnMuZGVmYXVsdHMsIGJvZHksIGJvZHkudHlwZSAhPT0gU3lu
dGF4LkJsb2NrU3RhdGVtZW50KTsKLSAgICB9Ci0KLSAgICAvLyBFQ01BLTI2MiAxNC40IFlpZWxk
IGV4cHJlc3Npb24KLQotICAgIGZ1bmN0aW9uIHBhcnNlWWllbGRFeHByZXNzaW9uKCkgewotICAg
ICAgICB2YXIgYXJndW1lbnQsIGV4cHIsIGRlbGVnYXRlLCBwcmV2aW91c0FsbG93WWllbGQ7Ci0K
LSAgICAgICAgYXJndW1lbnQgPSBudWxsOwotICAgICAgICBleHByID0gbmV3IE5vZGUoKTsKLQot
ICAgICAgICBleHBlY3RLZXl3b3JkKCd5aWVsZCcpOwotCi0gICAgICAgIGlmICghaGFzTGluZVRl
cm1pbmF0b3IpIHsKLSAgICAgICAgICAgIHByZXZpb3VzQWxsb3dZaWVsZCA9IHN0YXRlLmFsbG93
WWllbGQ7Ci0gICAgICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gZmFsc2U7Ci0gICAgICAgICAg
ICBkZWxlZ2F0ZSA9IG1hdGNoKCcqJyk7Ci0gICAgICAgICAgICBpZiAoZGVsZWdhdGUpIHsKLSAg
ICAgICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgICAgICAgICBhcmd1bWVudCA9IHBhcnNlQXNz
aWdubWVudEV4cHJlc3Npb24oKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFtYXRjaCgnOycpICYmICFtYXRjaCgnfScpICYmICFtYXRjaCgnKScpICYmIGxvb2th
aGVhZC50eXBlICE9PSBUb2tlbi5FT0YpIHsKLSAgICAgICAgICAgICAgICAgICAgYXJndW1lbnQg
PSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgc3RhdGUuYWxsb3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZaWVs
ZDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBleHByLmZpbmlzaFlpZWxkRXhwcmVzc2lv
bihhcmd1bWVudCwgZGVsZWdhdGUpOwotICAgIH0KLQotICAgIC8vIEVDTUEtMjYyIDEyLjE0IEFz
c2lnbm1lbnQgT3BlcmF0b3JzCi0KLSAgICBmdW5jdGlvbiBwYXJzZUFzc2lnbm1lbnRFeHByZXNz
aW9uKCkgewotICAgICAgICB2YXIgdG9rZW4sIGV4cHIsIHJpZ2h0LCBsaXN0LCBzdGFydFRva2Vu
OwotCi0gICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7Ci0gICAgICAgIHRva2VuID0gbG9v
a2FoZWFkOwotCi0gICAgICAgIGlmICghc3RhdGUuYWxsb3dZaWVsZCAmJiBtYXRjaEtleXdvcmQo
J3lpZWxkJykpIHsKLSAgICAgICAgICAgIHJldHVybiBwYXJzZVlpZWxkRXhwcmVzc2lvbigpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgZXhwciA9IHBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uKCk7
Ci0KLSAgICAgICAgaWYgKGV4cHIudHlwZSA9PT0gUGxhY2VIb2xkZXJzLkFycm93UGFyYW1ldGVy
UGxhY2VIb2xkZXIgfHwgbWF0Y2goJz0+JykpIHsKLSAgICAgICAgICAgIGlzQXNzaWdubWVudFRh
cmdldCA9IGlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKLSAgICAgICAgICAgIGxpc3QgPSByZWlu
dGVycHJldEFzQ292ZXJGb3JtYWxzTGlzdChleHByKTsKLQotICAgICAgICAgICAgaWYgKGxpc3Qp
IHsKLSAgICAgICAgICAgICAgICBmaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSBudWxs
OwotICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUFycm93RnVuY3Rpb25FeHByZXNzaW9uKGxp
c3QsIG5ldyBXcmFwcGluZ05vZGUoc3RhcnRUb2tlbikpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICByZXR1cm4gZXhwcjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtYXRjaEFzc2ln
bigpKSB7Ci0gICAgICAgICAgICBpZiAoIWlzQXNzaWdubWVudFRhcmdldCkgewotICAgICAgICAg
ICAgICAgIHRvbGVyYXRlRXJyb3IoTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEVDTUEtMjYyIDEyLjEuMQotICAgICAgICAg
ICAgaWYgKHN0cmljdCAmJiBleHByLnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGlzUmVzdHJpY3RlZFdvcmQoZXhwci5uYW1lKSkgewotICAgICAgICAg
ICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0b2tlbiwgTWVzc2FnZXMuU3RyaWN0
TEhTQXNzaWdubWVudCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChp
c1N0cmljdE1vZGVSZXNlcnZlZFdvcmQoZXhwci5uYW1lKSkgewotICAgICAgICAgICAgICAgICAg
ICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0b2tlbiwgTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRX
b3JkKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
ICghbWF0Y2goJz0nKSkgewotICAgICAgICAgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGlz
QmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgcmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICB0b2tlbiA9IGxleCgpOwotICAgICAgICAgICAgcmlnaHQgPSBpc29s
YXRlQ292ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOwotICAgICAgICAgICAg
ZXhwciA9IG5ldyBXcmFwcGluZ05vZGUoc3RhcnRUb2tlbikuZmluaXNoQXNzaWdubWVudEV4cHJl
c3Npb24odG9rZW4udmFsdWUsIGV4cHIsIHJpZ2h0KTsKLSAgICAgICAgICAgIGZpcnN0Q292ZXJJ
bml0aWFsaXplZE5hbWVFcnJvciA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4g
ZXhwcjsKLSAgICB9Ci0KLSAgICAvLyBFQ01BLTI2MiAxMi4xNSBDb21tYSBPcGVyYXRvcgotCi0g
ICAgZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uKCkgewotICAgICAgICB2YXIgZXhwciwgc3RhcnRU
b2tlbiA9IGxvb2thaGVhZCwgZXhwcmVzc2lvbnM7Ci0KLSAgICAgICAgZXhwciA9IGlzb2xhdGVD
b3ZlckdyYW1tYXIocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7Ci0KLSAgICAgICAgaWYgKG1h
dGNoKCcsJykpIHsKLSAgICAgICAgICAgIGV4cHJlc3Npb25zID0gW2V4cHJdOwotCi0gICAgICAg
ICAgICB3aGlsZSAoc3RhcnRJbmRleCA8IGxlbmd0aCkgewotICAgICAgICAgICAgICAgIGlmICgh
bWF0Y2goJywnKSkgewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMu
cHVzaChpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgZXhwciA9IG5ldyBXcmFwcGluZ05vZGUoc3RhcnRU
b2tlbikuZmluaXNoU2VxdWVuY2VFeHByZXNzaW9uKGV4cHJlc3Npb25zKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHJldHVybiBleHByOwotICAgIH0KLQotICAgIC8vIEVDTUEtMjYyIDEzLjIgQmxv
Y2sKLQotICAgIGZ1bmN0aW9uIHBhcnNlU3RhdGVtZW50TGlzdEl0ZW0oKSB7Ci0gICAgICAgIGlm
IChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uS2V5d29yZCkgewotICAgICAgICAgICAgc3dpdGNo
IChsb29rYWhlYWQudmFsdWUpIHsKLSAgICAgICAgICAgIGNhc2UgJ2V4cG9ydCc6Ci0gICAgICAg
ICAgICAgICAgaWYgKHN0YXRlLnNvdXJjZVR5cGUgIT09ICdtb2R1bGUnKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKGxvb2thaGVhZCwgTWVzc2FnZXMuSWxs
ZWdhbEV4cG9ydERlY2xhcmF0aW9uKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHBhcnNlRXhwb3J0RGVjbGFyYXRpb24oKTsKLSAgICAgICAgICAgIGNhc2UgJ2lt
cG9ydCc6Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnNvdXJjZVR5cGUgIT09ICdtb2R1bGUn
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKGxvb2thaGVh
ZCwgTWVzc2FnZXMuSWxsZWdhbEltcG9ydERlY2xhcmF0aW9uKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW1wb3J0RGVjbGFyYXRpb24oKTsKLSAgICAg
ICAgICAgIGNhc2UgJ2NvbnN0JzoKLSAgICAgICAgICAgIGNhc2UgJ2xldCc6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHBhcnNlTGV4aWNhbERlY2xhcmF0aW9uKHtpbkZvcjogZmFsc2V9KTsKLSAg
ICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VG
dW5jdGlvbkRlY2xhcmF0aW9uKG5ldyBOb2RlKCkpOwotICAgICAgICAgICAgY2FzZSAnY2xhc3Mn
OgotICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUNsYXNzRGVjbGFyYXRpb24oKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBwYXJzZVN0YXRlbWVudCgpOwot
ICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlU3RhdGVtZW50TGlzdCgpIHsKLSAgICAgICAgdmFy
IGxpc3QgPSBbXTsKLSAgICAgICAgd2hpbGUgKHN0YXJ0SW5kZXggPCBsZW5ndGgpIHsKLSAgICAg
ICAgICAgIGlmIChtYXRjaCgnfScpKSB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBsaXN0LnB1c2gocGFyc2VTdGF0ZW1lbnRMaXN0SXRlbSgpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBsaXN0OwotICAgIH0KLQotICAgIGZ1bmN0aW9u
IHBhcnNlQmxvY2soKSB7Ci0gICAgICAgIHZhciBibG9jaywgbm9kZSA9IG5ldyBOb2RlKCk7Ci0K
LSAgICAgICAgZXhwZWN0KCd7Jyk7Ci0KLSAgICAgICAgYmxvY2sgPSBwYXJzZVN0YXRlbWVudExp
c3QoKTsKLQotICAgICAgICBleHBlY3QoJ30nKTsKLQotICAgICAgICByZXR1cm4gbm9kZS5maW5p
c2hCbG9ja1N0YXRlbWVudChibG9jayk7Ci0gICAgfQotCi0gICAgLy8gRUNNQS0yNjIgMTMuMy4y
IFZhcmlhYmxlIFN0YXRlbWVudAotCi0gICAgZnVuY3Rpb24gcGFyc2VWYXJpYWJsZUlkZW50aWZp
ZXIoa2luZCkgewotICAgICAgICB2YXIgdG9rZW4sIG5vZGUgPSBuZXcgTm9kZSgpOwotCi0gICAg
ICAgIHRva2VuID0gbGV4KCk7Ci0KLSAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLktl
eXdvcmQgJiYgdG9rZW4udmFsdWUgPT09ICd5aWVsZCcpIHsKLSAgICAgICAgICAgIGlmIChzdHJp
Y3QpIHsKLSAgICAgICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0b2tlbiwgTWVz
c2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkKTsKLSAgICAgICAgICAgIH0gaWYgKCFzdGF0ZS5hbGxv
d1lpZWxkKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pOwot
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLklk
ZW50aWZpZXIpIHsKLSAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgdG9rZW4udHlwZSA9PT0gVG9r
ZW4uS2V5d29yZCAmJiBpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7Ci0g
ICAgICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIE1lc3NhZ2VzLlN0
cmljdFJlc2VydmVkV29yZCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IGlmIChzdHJpY3QgfHwgdG9rZW4udmFsdWUgIT09ICdsZXQnIHx8IGtpbmQgIT09ICd2YXInKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKHRva2VuKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUuc291
cmNlVHlwZSA9PT0gJ21vZHVsZScgJiYgdG9rZW4udHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllciAm
JiB0b2tlbi52YWx1ZSA9PT0gJ2F3YWl0JykgewotICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVj
dGVkVG9rZW4odG9rZW4pOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNo
SWRlbnRpZmllcih0b2tlbi52YWx1ZSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VWYXJp
YWJsZURlY2xhcmF0aW9uKG9wdGlvbnMpIHsKLSAgICAgICAgdmFyIGluaXQgPSBudWxsLCBpZCwg
bm9kZSA9IG5ldyBOb2RlKCksIHBhcmFtcyA9IFtdOwotCi0gICAgICAgIGlkID0gcGFyc2VQYXR0
ZXJuKHBhcmFtcywgJ3ZhcicpOwotCi0gICAgICAgIC8vIEVDTUEtMjYyIDEyLjIuMQotICAgICAg
ICBpZiAoc3RyaWN0ICYmIGlzUmVzdHJpY3RlZFdvcmQoaWQubmFtZSkpIHsKLSAgICAgICAgICAg
IHRvbGVyYXRlRXJyb3IoTWVzc2FnZXMuU3RyaWN0VmFyTmFtZSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAobWF0Y2goJz0nKSkgewotICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAgICAgICBp
bml0ID0gaXNvbGF0ZUNvdmVyR3JhbW1hcihwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKLSAg
ICAgICAgfSBlbHNlIGlmIChpZC50eXBlICE9PSBTeW50YXguSWRlbnRpZmllciAmJiAhb3B0aW9u
cy5pbkZvcikgewotICAgICAgICAgICAgZXhwZWN0KCc9Jyk7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4gbm9kZS5maW5pc2hWYXJpYWJsZURlY2xhcmF0b3IoaWQsIGluaXQpOwotICAgIH0K
LQotICAgIGZ1bmN0aW9uIHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qob3B0aW9ucykgewot
ICAgICAgICB2YXIgbGlzdCA9IFtdOwotCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGxpc3Qu
cHVzaChwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oeyBpbkZvcjogb3B0aW9ucy5pbkZvciB9KSk7
Ci0gICAgICAgICAgICBpZiAoIW1hdGNoKCcsJykpIHsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxleCgpOwotICAgICAgICB9IHdoaWxlIChzdGFy
dEluZGV4IDwgbGVuZ3RoKTsKLQotICAgICAgICByZXR1cm4gbGlzdDsKLSAgICB9Ci0KLSAgICBm
dW5jdGlvbiBwYXJzZVZhcmlhYmxlU3RhdGVtZW50KG5vZGUpIHsKLSAgICAgICAgdmFyIGRlY2xh
cmF0aW9uczsKLQotICAgICAgICBleHBlY3RLZXl3b3JkKCd2YXInKTsKLQotICAgICAgICBkZWNs
YXJhdGlvbnMgPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KHsgaW5Gb3I6IGZhbHNlIH0p
OwotCi0gICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKLQotICAgICAgICByZXR1cm4gbm9kZS5m
aW5pc2hWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucyk7Ci0gICAgfQotCi0gICAgLy8g
RUNNQS0yNjIgMTMuMy4xIExldCBhbmQgQ29uc3QgRGVjbGFyYXRpb25zCi0KLSAgICBmdW5jdGlv
biBwYXJzZUxleGljYWxCaW5kaW5nKGtpbmQsIG9wdGlvbnMpIHsKLSAgICAgICAgdmFyIGluaXQg
PSBudWxsLCBpZCwgbm9kZSA9IG5ldyBOb2RlKCksIHBhcmFtcyA9IFtdOwotCi0gICAgICAgIGlk
ID0gcGFyc2VQYXR0ZXJuKHBhcmFtcywga2luZCk7Ci0KLSAgICAgICAgLy8gRUNNQS0yNjIgMTIu
Mi4xCi0gICAgICAgIGlmIChzdHJpY3QgJiYgaWQudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIg
JiYgaXNSZXN0cmljdGVkV29yZChpZC5uYW1lKSkgewotICAgICAgICAgICAgdG9sZXJhdGVFcnJv
cihNZXNzYWdlcy5TdHJpY3RWYXJOYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChraW5k
ID09PSAnY29uc3QnKSB7Ci0gICAgICAgICAgICBpZiAoIW1hdGNoS2V5d29yZCgnaW4nKSAmJiAh
bWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnb2YnKSkgewotICAgICAgICAgICAgICAgIGV4cGVjdCgn
PScpOwotICAgICAgICAgICAgICAgIGluaXQgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlQXNz
aWdubWVudEV4cHJlc3Npb24pOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCgh
b3B0aW9ucy5pbkZvciAmJiBpZC50eXBlICE9PSBTeW50YXguSWRlbnRpZmllcikgfHwgbWF0Y2go
Jz0nKSkgewotICAgICAgICAgICAgZXhwZWN0KCc9Jyk7Ci0gICAgICAgICAgICBpbml0ID0gaXNv
bGF0ZUNvdmVyR3JhbW1hcihwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHJldHVybiBub2RlLmZpbmlzaFZhcmlhYmxlRGVjbGFyYXRvcihpZCwgaW5pdCk7
Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VCaW5kaW5nTGlzdChraW5kLCBvcHRpb25zKSB7
Ci0gICAgICAgIHZhciBsaXN0ID0gW107Ci0KLSAgICAgICAgZG8gewotICAgICAgICAgICAgbGlz
dC5wdXNoKHBhcnNlTGV4aWNhbEJpbmRpbmcoa2luZCwgb3B0aW9ucykpOwotICAgICAgICAgICAg
aWYgKCFtYXRjaCgnLCcpKSB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgfSB3aGlsZSAoc3RhcnRJbmRleCA8IGxlbmd0
aCk7Ci0KLSAgICAgICAgcmV0dXJuIGxpc3Q7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VM
ZXhpY2FsRGVjbGFyYXRpb24ob3B0aW9ucykgewotICAgICAgICB2YXIga2luZCwgZGVjbGFyYXRp
b25zLCBub2RlID0gbmV3IE5vZGUoKTsKLQotICAgICAgICBraW5kID0gbGV4KCkudmFsdWU7Ci0g
ICAgICAgIGFzc2VydChraW5kID09PSAnbGV0JyB8fCBraW5kID09PSAnY29uc3QnLCAnTGV4aWNh
bCBkZWNsYXJhdGlvbiBtdXN0IGJlIGVpdGhlciBsZXQgb3IgY29uc3QnKTsKLQotICAgICAgICBk
ZWNsYXJhdGlvbnMgPSBwYXJzZUJpbmRpbmdMaXN0KGtpbmQsIG9wdGlvbnMpOwotCi0gICAgICAg
IGNvbnN1bWVTZW1pY29sb24oKTsKLQotICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hMZXhpY2Fs
RGVjbGFyYXRpb24oZGVjbGFyYXRpb25zLCBraW5kKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBw
YXJzZVJlc3RFbGVtZW50KHBhcmFtcykgewotICAgICAgICB2YXIgcGFyYW0sIG5vZGUgPSBuZXcg
Tm9kZSgpOwotCi0gICAgICAgIGxleCgpOwotCi0gICAgICAgIGlmIChtYXRjaCgneycpKSB7Ci0g
ICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLk9iamVjdFBhdHRlcm5Bc1Jlc3RQYXJhbWV0
ZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1zLnB1c2gobG9va2FoZWFkKTsKLQotICAg
ICAgICBwYXJhbSA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7Ci0KLSAgICAgICAgaWYgKG1h
dGNoKCc9JykpIHsKLSAgICAgICAgICAgIHRocm93RXJyb3IoTWVzc2FnZXMuRGVmYXVsdFJlc3RQ
YXJhbWV0ZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtYXRjaCgnKScpKSB7Ci0gICAg
ICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLlBhcmFtZXRlckFmdGVyUmVzdFBhcmFtZXRlcik7
Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hSZXN0RWxlbWVudChwYXJh
bSk7Ci0gICAgfQotCi0gICAgLy8gRUNNQS0yNjIgMTMuNCBFbXB0eSBTdGF0ZW1lbnQKLQotICAg
IGZ1bmN0aW9uIHBhcnNlRW1wdHlTdGF0ZW1lbnQobm9kZSkgewotICAgICAgICBleHBlY3QoJzsn
KTsKLSAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoRW1wdHlTdGF0ZW1lbnQoKTsKLSAgICB9Ci0K
LSAgICAvLyBFQ01BLTI2MiAxMi40IEV4cHJlc3Npb24gU3RhdGVtZW50Ci0KLSAgICBmdW5jdGlv
biBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQobm9kZSkgewotICAgICAgICB2YXIgZXhwciA9IHBh
cnNlRXhwcmVzc2lvbigpOwotICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7Ci0gICAgICAgIHJl
dHVybiBub2RlLmZpbmlzaEV4cHJlc3Npb25TdGF0ZW1lbnQoZXhwcik7Ci0gICAgfQotCi0gICAg
Ly8gRUNNQS0yNjIgMTMuNiBJZiBzdGF0ZW1lbnQKLQotICAgIGZ1bmN0aW9uIHBhcnNlSWZTdGF0
ZW1lbnQobm9kZSkgewotICAgICAgICB2YXIgdGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlOwot
Ci0gICAgICAgIGV4cGVjdEtleXdvcmQoJ2lmJyk7Ci0KLSAgICAgICAgZXhwZWN0KCcoJyk7Ci0K
LSAgICAgICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lvbigpOwotCi0gICAgICAgIGV4cGVjdCgnKScp
OwotCi0gICAgICAgIGNvbnNlcXVlbnQgPSBwYXJzZVN0YXRlbWVudCgpOwotCi0gICAgICAgIGlm
IChtYXRjaEtleXdvcmQoJ2Vsc2UnKSkgewotICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAgICAg
ICBhbHRlcm5hdGUgPSBwYXJzZVN0YXRlbWVudCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgYWx0ZXJuYXRlID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBub2Rl
LmZpbmlzaElmU3RhdGVtZW50KHRlc3QsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZSk7Ci0gICAgfQot
Ci0gICAgLy8gRUNNQS0yNjIgMTMuNyBJdGVyYXRpb24gU3RhdGVtZW50cwotCi0gICAgZnVuY3Rp
b24gcGFyc2VEb1doaWxlU3RhdGVtZW50KG5vZGUpIHsKLSAgICAgICAgdmFyIGJvZHksIHRlc3Qs
IG9sZEluSXRlcmF0aW9uOwotCi0gICAgICAgIGV4cGVjdEtleXdvcmQoJ2RvJyk7Ci0KLSAgICAg
ICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJhdGlvbjsKLSAgICAgICAgc3RhdGUuaW5J
dGVyYXRpb24gPSB0cnVlOwotCi0gICAgICAgIGJvZHkgPSBwYXJzZVN0YXRlbWVudCgpOwotCi0g
ICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gb2xkSW5JdGVyYXRpb247Ci0KLSAgICAgICAgZXhw
ZWN0S2V5d29yZCgnd2hpbGUnKTsKLQotICAgICAgICBleHBlY3QoJygnKTsKLQotICAgICAgICB0
ZXN0ID0gcGFyc2VFeHByZXNzaW9uKCk7Ci0KLSAgICAgICAgZXhwZWN0KCcpJyk7Ci0KLSAgICAg
ICAgaWYgKG1hdGNoKCc7JykpIHsKLSAgICAgICAgICAgIGxleCgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmV0dXJuIG5vZGUuZmluaXNoRG9XaGlsZVN0YXRlbWVudChib2R5LCB0ZXN0KTsKLSAg
ICB9Ci0KLSAgICBmdW5jdGlvbiBwYXJzZVdoaWxlU3RhdGVtZW50KG5vZGUpIHsKLSAgICAgICAg
dmFyIHRlc3QsIGJvZHksIG9sZEluSXRlcmF0aW9uOwotCi0gICAgICAgIGV4cGVjdEtleXdvcmQo
J3doaWxlJyk7Ci0KLSAgICAgICAgZXhwZWN0KCcoJyk7Ci0KLSAgICAgICAgdGVzdCA9IHBhcnNl
RXhwcmVzc2lvbigpOwotCi0gICAgICAgIGV4cGVjdCgnKScpOwotCi0gICAgICAgIG9sZEluSXRl
cmF0aW9uID0gc3RhdGUuaW5JdGVyYXRpb247Ci0gICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0g
dHJ1ZTsKLQotICAgICAgICBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTsKLQotICAgICAgICBzdGF0
ZS5pbkl0ZXJhdGlvbiA9IG9sZEluSXRlcmF0aW9uOwotCi0gICAgICAgIHJldHVybiBub2RlLmZp
bmlzaFdoaWxlU3RhdGVtZW50KHRlc3QsIGJvZHkpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBh
cnNlRm9yU3RhdGVtZW50KG5vZGUpIHsKLSAgICAgICAgdmFyIGluaXQsIGZvckluLCBpbml0U2Vx
LCBpbml0U3RhcnRUb2tlbiwgdGVzdCwgdXBkYXRlLCBsZWZ0LCByaWdodCwga2luZCwgZGVjbGFy
YXRpb25zLAotICAgICAgICAgICAgYm9keSwgb2xkSW5JdGVyYXRpb24sIHByZXZpb3VzQWxsb3dJ
biA9IHN0YXRlLmFsbG93SW47Ci0KLSAgICAgICAgaW5pdCA9IHRlc3QgPSB1cGRhdGUgPSBudWxs
OwotICAgICAgICBmb3JJbiA9IHRydWU7Ci0KLSAgICAgICAgZXhwZWN0S2V5d29yZCgnZm9yJyk7
Ci0KLSAgICAgICAgZXhwZWN0KCcoJyk7Ci0KLSAgICAgICAgaWYgKG1hdGNoKCc7JykpIHsKLSAg
ICAgICAgICAgIGxleCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG1hdGNo
S2V5d29yZCgndmFyJykpIHsKLSAgICAgICAgICAgICAgICBpbml0ID0gbmV3IE5vZGUoKTsKLSAg
ICAgICAgICAgICAgICBsZXgoKTsKLQotICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93SW4gPSBm
YWxzZTsKLSAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnMgPSBwYXJzZVZhcmlhYmxlRGVjbGFy
YXRpb25MaXN0KHsgaW5Gb3I6IHRydWUgfSk7Ci0gICAgICAgICAgICAgICAgc3RhdGUuYWxsb3dJ
biA9IHByZXZpb3VzQWxsb3dJbjsKLQotICAgICAgICAgICAgICAgIGlmIChkZWNsYXJhdGlvbnMu
bGVuZ3RoID09PSAxICYmIG1hdGNoS2V5d29yZCgnaW4nKSkgewotICAgICAgICAgICAgICAgICAg
ICBpbml0ID0gaW5pdC5maW5pc2hWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGxleCgpOwotICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gaW5p
dDsKLSAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBwYXJzZUV4cHJlc3Npb24oKTsKLSAgICAg
ICAgICAgICAgICAgICAgaW5pdCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChk
ZWNsYXJhdGlvbnMubGVuZ3RoID09PSAxICYmIGRlY2xhcmF0aW9uc1swXS5pbml0ID09PSBudWxs
ICYmIG1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ29mJykpIHsKLSAgICAgICAgICAgICAgICAgICAg
aW5pdCA9IGluaXQuZmluaXNoVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMpOwotICAg
ICAgICAgICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGluaXQ7
Ci0gICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigp
OwotICAgICAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAg
Zm9ySW4gPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICBpbml0ID0gaW5pdC5maW5pc2hWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucyk7
Ci0gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgnOycpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2hLZXl3b3JkKCdjb25zdCcpIHx8IG1hdGNoS2V5d29y
ZCgnbGV0JykpIHsKLSAgICAgICAgICAgICAgICBpbml0ID0gbmV3IE5vZGUoKTsKLSAgICAgICAg
ICAgICAgICBraW5kID0gbGV4KCkudmFsdWU7Ci0KLSAgICAgICAgICAgICAgICBzdGF0ZS5hbGxv
d0luID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zID0gcGFyc2VCaW5kaW5n
TGlzdChraW5kLCB7aW5Gb3I6IHRydWV9KTsKLSAgICAgICAgICAgICAgICBzdGF0ZS5hbGxvd0lu
ID0gcHJldmlvdXNBbGxvd0luOwotCi0gICAgICAgICAgICAgICAgaWYgKGRlY2xhcmF0aW9ucy5s
ZW5ndGggPT09IDEgJiYgZGVjbGFyYXRpb25zWzBdLmluaXQgPT09IG51bGwgJiYgbWF0Y2hLZXl3
b3JkKCdpbicpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGluaXQgPSBpbml0LmZpbmlzaExleGlj
YWxEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIGtpbmQpOwotICAgICAgICAgICAgICAgICAgICBs
ZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGluaXQ7Ci0gICAgICAgICAgICAgICAg
ICAgIHJpZ2h0ID0gcGFyc2VFeHByZXNzaW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgIGluaXQg
PSBudWxsOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb25zLmxlbmd0aCA9
PT0gMSAmJiBkZWNsYXJhdGlvbnNbMF0uaW5pdCA9PT0gbnVsbCAmJiBtYXRjaENvbnRleHR1YWxL
ZXl3b3JkKCdvZicpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGluaXQgPSBpbml0LmZpbmlzaExl
eGljYWxEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIGtpbmQpOwotICAgICAgICAgICAgICAgICAg
ICBsZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGluaXQ7Ci0gICAgICAgICAgICAg
ICAgICAgIHJpZ2h0ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOwotICAgICAgICAgICAg
ICAgICAgICBpbml0ID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgZm9ySW4gPSBmYWxzZTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjb25zdW1lU2Vt
aWNvbG9uKCk7Ci0gICAgICAgICAgICAgICAgICAgIGluaXQgPSBpbml0LmZpbmlzaExleGljYWxE
ZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIGtpbmQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaW5pdFN0YXJ0VG9rZW4gPSBsb29rYWhl
YWQ7Ci0gICAgICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IGZhbHNlOwotICAgICAgICAgICAg
ICAgIGluaXQgPSBpbmhlcml0Q292ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24p
OwotICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47Ci0KLSAg
ICAgICAgICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdpbicpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghaXNBc3NpZ25tZW50VGFyZ2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0
b2xlcmF0ZUVycm9yKE1lc3NhZ2VzLkludmFsaWRMSFNJbkZvckluKTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGxleCgpOwotICAgICAgICAgICAgICAgICAg
ICByZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oaW5pdCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGxlZnQgPSBpbml0OwotICAgICAgICAgICAgICAgICAgICByaWdodCA9IHBhcnNlRXhwcmVz
c2lvbigpOwotICAgICAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ29mJykpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpc0Fzc2lnbm1lbnRUYXJnZXQpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRvbGVyYXRlRXJyb3IoTWVzc2FnZXMuSW52YWxpZExIU0luRm9yTG9vcCk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgICAg
ICAgICAgICAgcmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGluaXQpOwotICAgICAgICAg
ICAgICAgICAgICBsZWZ0ID0gaW5pdDsKLSAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBwYXJz
ZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgIGluaXQgPSBudWxs
OwotICAgICAgICAgICAgICAgICAgICBmb3JJbiA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCgnLCcpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpbml0U2VxID0gW2luaXRdOwotICAgICAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKG1hdGNoKCcsJykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXgoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0U2VxLnB1c2goaXNvbGF0ZUNvdmVyR3Jh
bW1hcihwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbml0ID0gbmV3IFdyYXBwaW5nTm9kZShpbml0
U3RhcnRUb2tlbikuZmluaXNoU2VxdWVuY2VFeHByZXNzaW9uKGluaXRTZXEpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgnOycpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0eXBlb2Yg
bGVmdCA9PT0gJ3VuZGVmaW5lZCcpIHsKLQotICAgICAgICAgICAgaWYgKCFtYXRjaCgnOycpKSB7
Ci0gICAgICAgICAgICAgICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lvbigpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZXhwZWN0KCc7Jyk7Ci0KLSAgICAgICAgICAgIGlmICghbWF0Y2goJykn
KSkgewotICAgICAgICAgICAgICAgIHVwZGF0ZSA9IHBhcnNlRXhwcmVzc2lvbigpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZXhwZWN0KCcpJyk7Ci0KLSAgICAgICAgb2xk
SW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJhdGlvbjsKLSAgICAgICAgc3RhdGUuaW5JdGVyYXRp
b24gPSB0cnVlOwotCi0gICAgICAgIGJvZHkgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlU3Rh
dGVtZW50KTsKLQotICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IG9sZEluSXRlcmF0aW9uOwot
Ci0gICAgICAgIHJldHVybiAodHlwZW9mIGxlZnQgPT09ICd1bmRlZmluZWQnKSA/Ci0gICAgICAg
ICAgICAgICAgbm9kZS5maW5pc2hGb3JTdGF0ZW1lbnQoaW5pdCwgdGVzdCwgdXBkYXRlLCBib2R5
KSA6Ci0gICAgICAgICAgICAgICAgZm9ySW4gPyBub2RlLmZpbmlzaEZvckluU3RhdGVtZW50KGxl
ZnQsIHJpZ2h0LCBib2R5KSA6Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUuZmluaXNoRm9yT2ZT
dGF0ZW1lbnQobGVmdCwgcmlnaHQsIGJvZHkpOwotICAgIH0KLQotICAgIC8vIEVDTUEtMjYyIDEz
LjggVGhlIGNvbnRpbnVlIHN0YXRlbWVudAotCi0gICAgZnVuY3Rpb24gcGFyc2VDb250aW51ZVN0
YXRlbWVudChub2RlKSB7Ci0gICAgICAgIHZhciBsYWJlbCA9IG51bGwsIGtleTsKLQotICAgICAg
ICBleHBlY3RLZXl3b3JkKCdjb250aW51ZScpOwotCi0gICAgICAgIC8vIE9wdGltaXplIHRoZSBt
b3N0IGNvbW1vbiBmb3JtOiAnY29udGludWU7Jy4KLSAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29k
ZUF0KHN0YXJ0SW5kZXgpID09PSAweDNCKSB7Ci0gICAgICAgICAgICBsZXgoKTsKLQotICAgICAg
ICAgICAgaWYgKCFzdGF0ZS5pbkl0ZXJhdGlvbikgewotICAgICAgICAgICAgICAgIHRocm93RXJy
b3IoTWVzc2FnZXMuSWxsZWdhbENvbnRpbnVlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgcmV0dXJuIG5vZGUuZmluaXNoQ29udGludWVTdGF0ZW1lbnQobnVsbCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoaGFzTGluZVRlcm1pbmF0b3IpIHsKLSAgICAgICAgICAgIGlmICghc3Rh
dGUuaW5JdGVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLkls
bGVnYWxDb250aW51ZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBub2Rl
LmZpbmlzaENvbnRpbnVlU3RhdGVtZW50KG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBsYWJl
bCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7Ci0KLSAgICAgICAgICAgIGtleSA9ICckJyAr
IGxhYmVsLm5hbWU7Ci0gICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJv
cGVydHkuY2FsbChzdGF0ZS5sYWJlbFNldCwga2V5KSkgewotICAgICAgICAgICAgICAgIHRocm93
RXJyb3IoTWVzc2FnZXMuVW5rbm93bkxhYmVsLCBsYWJlbC5uYW1lKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKLQotICAgICAgICBpZiAo
bGFiZWwgPT09IG51bGwgJiYgIXN0YXRlLmluSXRlcmF0aW9uKSB7Ci0gICAgICAgICAgICB0aHJv
d0Vycm9yKE1lc3NhZ2VzLklsbGVnYWxDb250aW51ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBy
ZXR1cm4gbm9kZS5maW5pc2hDb250aW51ZVN0YXRlbWVudChsYWJlbCk7Ci0gICAgfQotCi0gICAg
Ly8gRUNNQS0yNjIgMTMuOSBUaGUgYnJlYWsgc3RhdGVtZW50Ci0KLSAgICBmdW5jdGlvbiBwYXJz
ZUJyZWFrU3RhdGVtZW50KG5vZGUpIHsKLSAgICAgICAgdmFyIGxhYmVsID0gbnVsbCwga2V5Owot
Ci0gICAgICAgIGV4cGVjdEtleXdvcmQoJ2JyZWFrJyk7Ci0KLSAgICAgICAgLy8gQ2F0Y2ggdGhl
IHZlcnkgY29tbW9uIGNhc2UgZmlyc3Q6IGltbWVkaWF0ZWx5IGEgc2VtaWNvbG9uIChVKzAwM0Ip
LgotICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQobGFzdEluZGV4KSA9PT0gMHgzQikgewot
ICAgICAgICAgICAgbGV4KCk7Ci0KLSAgICAgICAgICAgIGlmICghKHN0YXRlLmluSXRlcmF0aW9u
IHx8IHN0YXRlLmluU3dpdGNoKSkgewotICAgICAgICAgICAgICAgIHRocm93RXJyb3IoTWVzc2Fn
ZXMuSWxsZWdhbEJyZWFrKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIG5v
ZGUuZmluaXNoQnJlYWtTdGF0ZW1lbnQobnVsbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
aGFzTGluZVRlcm1pbmF0b3IpIHsKLSAgICAgICAgICAgIGlmICghKHN0YXRlLmluSXRlcmF0aW9u
IHx8IHN0YXRlLmluU3dpdGNoKSkgewotICAgICAgICAgICAgICAgIHRocm93RXJyb3IoTWVzc2Fn
ZXMuSWxsZWdhbEJyZWFrKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIG5v
ZGUuZmluaXNoQnJlYWtTdGF0ZW1lbnQobnVsbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
bG9va2FoZWFkLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIpIHsKLSAgICAgICAgICAgIGxhYmVs
ID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKLQotICAgICAgICAgICAga2V5ID0gJyQnICsg
bGFiZWwubmFtZTsKLSAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9w
ZXJ0eS5jYWxsKHN0YXRlLmxhYmVsU2V0LCBrZXkpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dF
cnJvcihNZXNzYWdlcy5Vbmtub3duTGFiZWwsIGxhYmVsLm5hbWUpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOwotCi0gICAgICAgIGlmIChs
YWJlbCA9PT0gbnVsbCAmJiAhKHN0YXRlLmluSXRlcmF0aW9uIHx8IHN0YXRlLmluU3dpdGNoKSkg
ewotICAgICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5JbGxlZ2FsQnJlYWspOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoQnJlYWtTdGF0ZW1lbnQobGFiZWwpOwot
ICAgIH0KLQotICAgIC8vIEVDTUEtMjYyIDEzLjEwIFRoZSByZXR1cm4gc3RhdGVtZW50Ci0KLSAg
ICBmdW5jdGlvbiBwYXJzZVJldHVyblN0YXRlbWVudChub2RlKSB7Ci0gICAgICAgIHZhciBhcmd1
bWVudCA9IG51bGw7Ci0KLSAgICAgICAgZXhwZWN0S2V5d29yZCgncmV0dXJuJyk7Ci0KLSAgICAg
ICAgaWYgKCFzdGF0ZS5pbkZ1bmN0aW9uQm9keSkgewotICAgICAgICAgICAgdG9sZXJhdGVFcnJv
cihNZXNzYWdlcy5JbGxlZ2FsUmV0dXJuKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vICdyZXR1
cm4nIGZvbGxvd2VkIGJ5IGEgc3BhY2UgYW5kIGFuIGlkZW50aWZpZXIgaXMgdmVyeSBjb21tb24u
Ci0gICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChsYXN0SW5kZXgpID09PSAweDIwKSB7Ci0g
ICAgICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoc291cmNlLmNoYXJDb2RlQXQobGFzdElu
ZGV4ICsgMSkpKSB7Ci0gICAgICAgICAgICAgICAgYXJndW1lbnQgPSBwYXJzZUV4cHJlc3Npb24o
KTsKLSAgICAgICAgICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIG5vZGUuZmluaXNoUmV0dXJuU3RhdGVtZW50KGFyZ3VtZW50KTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChoYXNMaW5lVGVybWluYXRvcikgewotICAgICAg
ICAgICAgLy8gSEFDSwotICAgICAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoUmV0dXJuU3RhdGVt
ZW50KG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtYXRjaCgnOycpKSB7Ci0gICAg
ICAgICAgICBpZiAoIW1hdGNoKCd9JykgJiYgbG9va2FoZWFkLnR5cGUgIT09IFRva2VuLkVPRikg
ewotICAgICAgICAgICAgICAgIGFyZ3VtZW50ID0gcGFyc2VFeHByZXNzaW9uKCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7Ci0KLSAgICAg
ICAgcmV0dXJuIG5vZGUuZmluaXNoUmV0dXJuU3RhdGVtZW50KGFyZ3VtZW50KTsKLSAgICB9Ci0K
LSAgICAvLyBFQ01BLTI2MiAxMy4xMSBUaGUgd2l0aCBzdGF0ZW1lbnQKLQotICAgIGZ1bmN0aW9u
IHBhcnNlV2l0aFN0YXRlbWVudChub2RlKSB7Ci0gICAgICAgIHZhciBvYmplY3QsIGJvZHk7Ci0K
LSAgICAgICAgaWYgKHN0cmljdCkgewotICAgICAgICAgICAgdG9sZXJhdGVFcnJvcihNZXNzYWdl
cy5TdHJpY3RNb2RlV2l0aCk7Ci0gICAgICAgIH0KLQotICAgICAgICBleHBlY3RLZXl3b3JkKCd3
aXRoJyk7Ci0KLSAgICAgICAgZXhwZWN0KCcoJyk7Ci0KLSAgICAgICAgb2JqZWN0ID0gcGFyc2VF
eHByZXNzaW9uKCk7Ci0KLSAgICAgICAgZXhwZWN0KCcpJyk7Ci0KLSAgICAgICAgYm9keSA9IHBh
cnNlU3RhdGVtZW50KCk7Ci0KLSAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoV2l0aFN0YXRlbWVu
dChvYmplY3QsIGJvZHkpOwotICAgIH0KLQotICAgIC8vIEVDTUEtMjYyIDEzLjEyIFRoZSBzd2l0
Y2ggc3RhdGVtZW50Ci0KLSAgICBmdW5jdGlvbiBwYXJzZVN3aXRjaENhc2UoKSB7Ci0gICAgICAg
IHZhciB0ZXN0LCBjb25zZXF1ZW50ID0gW10sIHN0YXRlbWVudCwgbm9kZSA9IG5ldyBOb2RlKCk7
Ci0KLSAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnZGVmYXVsdCcpKSB7Ci0gICAgICAgICAgICBs
ZXgoKTsKLSAgICAgICAgICAgIHRlc3QgPSBudWxsOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgZXhwZWN0S2V5d29yZCgnY2FzZScpOwotICAgICAgICAgICAgdGVzdCA9IHBhcnNlRXhw
cmVzc2lvbigpOwotICAgICAgICB9Ci0gICAgICAgIGV4cGVjdCgnOicpOwotCi0gICAgICAgIHdo
aWxlIChzdGFydEluZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICBpZiAobWF0Y2goJ30nKSB8
fCBtYXRjaEtleXdvcmQoJ2RlZmF1bHQnKSB8fCBtYXRjaEtleXdvcmQoJ2Nhc2UnKSkgewotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RhdGVtZW50
ID0gcGFyc2VTdGF0ZW1lbnRMaXN0SXRlbSgpOwotICAgICAgICAgICAgY29uc2VxdWVudC5wdXNo
KHN0YXRlbWVudCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hTd2l0
Y2hDYXNlKHRlc3QsIGNvbnNlcXVlbnQpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlU3dp
dGNoU3RhdGVtZW50KG5vZGUpIHsKLSAgICAgICAgdmFyIGRpc2NyaW1pbmFudCwgY2FzZXMsIGNs
YXVzZSwgb2xkSW5Td2l0Y2gsIGRlZmF1bHRGb3VuZDsKLQotICAgICAgICBleHBlY3RLZXl3b3Jk
KCdzd2l0Y2gnKTsKLQotICAgICAgICBleHBlY3QoJygnKTsKLQotICAgICAgICBkaXNjcmltaW5h
bnQgPSBwYXJzZUV4cHJlc3Npb24oKTsKLQotICAgICAgICBleHBlY3QoJyknKTsKLQotICAgICAg
ICBleHBlY3QoJ3snKTsKLQotICAgICAgICBjYXNlcyA9IFtdOwotCi0gICAgICAgIGlmIChtYXRj
aCgnfScpKSB7Ci0gICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgICAgIHJldHVybiBub2RlLmZp
bmlzaFN3aXRjaFN0YXRlbWVudChkaXNjcmltaW5hbnQsIGNhc2VzKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIG9sZEluU3dpdGNoID0gc3RhdGUuaW5Td2l0Y2g7Ci0gICAgICAgIHN0YXRlLmluU3dp
dGNoID0gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdEZvdW5kID0gZmFsc2U7Ci0KLSAgICAgICAgd2hp
bGUgKHN0YXJ0SW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAgICAgIGlmIChtYXRjaCgnfScpKSB7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjbGF1
c2UgPSBwYXJzZVN3aXRjaENhc2UoKTsKLSAgICAgICAgICAgIGlmIChjbGF1c2UudGVzdCA9PT0g
bnVsbCkgewotICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0Rm91bmQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5NdWx0aXBsZURlZmF1bHRzSW5Td2l0Y2gpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkZWZhdWx0Rm91bmQgPSB0cnVlOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZXMucHVzaChjbGF1c2UpOwotICAgICAgICB9
Ci0KLSAgICAgICAgc3RhdGUuaW5Td2l0Y2ggPSBvbGRJblN3aXRjaDsKLQotICAgICAgICBleHBl
Y3QoJ30nKTsKLQotICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hTd2l0Y2hTdGF0ZW1lbnQoZGlz
Y3JpbWluYW50LCBjYXNlcyk7Ci0gICAgfQotCi0gICAgLy8gRUNNQS0yNjIgMTMuMTQgVGhlIHRo
cm93IHN0YXRlbWVudAotCi0gICAgZnVuY3Rpb24gcGFyc2VUaHJvd1N0YXRlbWVudChub2RlKSB7
Ci0gICAgICAgIHZhciBhcmd1bWVudDsKLQotICAgICAgICBleHBlY3RLZXl3b3JkKCd0aHJvdycp
OwotCi0gICAgICAgIGlmIChoYXNMaW5lVGVybWluYXRvcikgewotICAgICAgICAgICAgdGhyb3dF
cnJvcihNZXNzYWdlcy5OZXdsaW5lQWZ0ZXJUaHJvdyk7Ci0gICAgICAgIH0KLQotICAgICAgICBh
cmd1bWVudCA9IHBhcnNlRXhwcmVzc2lvbigpOwotCi0gICAgICAgIGNvbnN1bWVTZW1pY29sb24o
KTsKLQotICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hUaHJvd1N0YXRlbWVudChhcmd1bWVudCk7
Ci0gICAgfQotCi0gICAgLy8gRUNNQS0yNjIgMTMuMTUgVGhlIHRyeSBzdGF0ZW1lbnQKLQotICAg
IGZ1bmN0aW9uIHBhcnNlQ2F0Y2hDbGF1c2UoKSB7Ci0gICAgICAgIHZhciBwYXJhbSwgcGFyYW1z
ID0gW10sIHBhcmFtTWFwID0ge30sIGtleSwgaSwgYm9keSwgbm9kZSA9IG5ldyBOb2RlKCk7Ci0K
LSAgICAgICAgZXhwZWN0S2V5d29yZCgnY2F0Y2gnKTsKLQotICAgICAgICBleHBlY3QoJygnKTsK
LSAgICAgICAgaWYgKG1hdGNoKCcpJykpIHsKLSAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRv
a2VuKGxvb2thaGVhZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwYXJhbSA9IHBhcnNlUGF0dGVy
bihwYXJhbXMpOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7
Ci0gICAgICAgICAgICBrZXkgPSAnJCcgKyBwYXJhbXNbaV0udmFsdWU7Ci0gICAgICAgICAgICBp
ZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcmFtTWFwLCBrZXkpKSB7
Ci0gICAgICAgICAgICAgICAgdG9sZXJhdGVFcnJvcihNZXNzYWdlcy5EdXBsaWNhdGVCaW5kaW5n
LCBwYXJhbXNbaV0udmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcGFyYW1NYXBb
a2V5XSA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBFQ01BLTI2MiAxMi4xNC4xCi0g
ICAgICAgIGlmIChzdHJpY3QgJiYgaXNSZXN0cmljdGVkV29yZChwYXJhbS5uYW1lKSkgewotICAg
ICAgICAgICAgdG9sZXJhdGVFcnJvcihNZXNzYWdlcy5TdHJpY3RDYXRjaFZhcmlhYmxlKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGV4cGVjdCgnKScpOwotICAgICAgICBib2R5ID0gcGFyc2VCbG9j
aygpOwotICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hDYXRjaENsYXVzZShwYXJhbSwgYm9keSk7
Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VUcnlTdGF0ZW1lbnQobm9kZSkgewotICAgICAg
ICB2YXIgYmxvY2ssIGhhbmRsZXIgPSBudWxsLCBmaW5hbGl6ZXIgPSBudWxsOwotCi0gICAgICAg
IGV4cGVjdEtleXdvcmQoJ3RyeScpOwotCi0gICAgICAgIGJsb2NrID0gcGFyc2VCbG9jaygpOwot
Ci0gICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2NhdGNoJykpIHsKLSAgICAgICAgICAgIGhhbmRs
ZXIgPSBwYXJzZUNhdGNoQ2xhdXNlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobWF0Y2hL
ZXl3b3JkKCdmaW5hbGx5JykpIHsKLSAgICAgICAgICAgIGxleCgpOwotICAgICAgICAgICAgZmlu
YWxpemVyID0gcGFyc2VCbG9jaygpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFoYW5kbGVy
ICYmICFmaW5hbGl6ZXIpIHsKLSAgICAgICAgICAgIHRocm93RXJyb3IoTWVzc2FnZXMuTm9DYXRj
aE9yRmluYWxseSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hUcnlT
dGF0ZW1lbnQoYmxvY2ssIGhhbmRsZXIsIGZpbmFsaXplcik7Ci0gICAgfQotCi0gICAgLy8gRUNN
QS0yNjIgMTMuMTYgVGhlIGRlYnVnZ2VyIHN0YXRlbWVudAotCi0gICAgZnVuY3Rpb24gcGFyc2VE
ZWJ1Z2dlclN0YXRlbWVudChub2RlKSB7Ci0gICAgICAgIGV4cGVjdEtleXdvcmQoJ2RlYnVnZ2Vy
Jyk7Ci0KLSAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOwotCi0gICAgICAgIHJldHVybiBub2Rl
LmZpbmlzaERlYnVnZ2VyU3RhdGVtZW50KCk7Ci0gICAgfQotCi0gICAgLy8gMTMgU3RhdGVtZW50
cwotCi0gICAgZnVuY3Rpb24gcGFyc2VTdGF0ZW1lbnQoKSB7Ci0gICAgICAgIHZhciB0eXBlID0g
bG9va2FoZWFkLnR5cGUsCi0gICAgICAgICAgICBleHByLAotICAgICAgICAgICAgbGFiZWxlZEJv
ZHksCi0gICAgICAgICAgICBrZXksCi0gICAgICAgICAgICBub2RlOwotCi0gICAgICAgIGlmICh0
eXBlID09PSBUb2tlbi5FT0YpIHsKLSAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKGxv
b2thaGVhZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodHlwZSA9PT0gVG9rZW4uUHVuY3R1
YXRvciAmJiBsb29rYWhlYWQudmFsdWUgPT09ICd7JykgewotICAgICAgICAgICAgcmV0dXJuIHBh
cnNlQmxvY2soKTsKLSAgICAgICAgfQotICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0Jp
bmRpbmdFbGVtZW50ID0gdHJ1ZTsKLSAgICAgICAgbm9kZSA9IG5ldyBOb2RlKCk7Ci0KLSAgICAg
ICAgaWYgKHR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IpIHsKLSAgICAgICAgICAgIHN3aXRjaCAo
bG9va2FoZWFkLnZhbHVlKSB7Ci0gICAgICAgICAgICBjYXNlICc7JzoKLSAgICAgICAgICAgICAg
ICByZXR1cm4gcGFyc2VFbXB0eVN0YXRlbWVudChub2RlKTsKLSAgICAgICAgICAgIGNhc2UgJygn
OgotICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQobm9kZSk7
Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuLktleXdvcmQpIHsKLSAgICAg
ICAgICAgIHN3aXRjaCAobG9va2FoZWFkLnZhbHVlKSB7Ci0gICAgICAgICAgICBjYXNlICdicmVh
ayc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlQnJlYWtTdGF0ZW1lbnQobm9kZSk7Ci0g
ICAgICAgICAgICBjYXNlICdjb250aW51ZSc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNl
Q29udGludWVTdGF0ZW1lbnQobm9kZSk7Ci0gICAgICAgICAgICBjYXNlICdkZWJ1Z2dlcic6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRGVidWdnZXJTdGF0ZW1lbnQobm9kZSk7Ci0gICAg
ICAgICAgICBjYXNlICdkbyc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRG9XaGlsZVN0
YXRlbWVudChub2RlKTsKLSAgICAgICAgICAgIGNhc2UgJ2Zvcic6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHBhcnNlRm9yU3RhdGVtZW50KG5vZGUpOwotICAgICAgICAgICAgY2FzZSAnZnVuY3Rp
b24nOgotICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24obm9k
ZSk7Ci0gICAgICAgICAgICBjYXNlICdpZic6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNl
SWZTdGF0ZW1lbnQobm9kZSk7Ci0gICAgICAgICAgICBjYXNlICdyZXR1cm4nOgotICAgICAgICAg
ICAgICAgIHJldHVybiBwYXJzZVJldHVyblN0YXRlbWVudChub2RlKTsKLSAgICAgICAgICAgIGNh
c2UgJ3N3aXRjaCc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3dpdGNoU3RhdGVtZW50
KG5vZGUpOwotICAgICAgICAgICAgY2FzZSAndGhyb3cnOgotICAgICAgICAgICAgICAgIHJldHVy
biBwYXJzZVRocm93U3RhdGVtZW50KG5vZGUpOwotICAgICAgICAgICAgY2FzZSAndHJ5JzoKLSAg
ICAgICAgICAgICAgICByZXR1cm4gcGFyc2VUcnlTdGF0ZW1lbnQobm9kZSk7Ci0gICAgICAgICAg
ICBjYXNlICd2YXInOgotICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVZhcmlhYmxlU3RhdGVt
ZW50KG5vZGUpOwotICAgICAgICAgICAgY2FzZSAnd2hpbGUnOgotICAgICAgICAgICAgICAgIHJl
dHVybiBwYXJzZVdoaWxlU3RhdGVtZW50KG5vZGUpOwotICAgICAgICAgICAgY2FzZSAnd2l0aCc6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlV2l0aFN0YXRlbWVudChub2RlKTsKLSAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7Ci0KLSAgICAgICAg
Ly8gRUNNQS0yNjIgMTIuMTIgTGFiZWxsZWQgU3RhdGVtZW50cwotICAgICAgICBpZiAoKGV4cHIu
dHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIpICYmIG1hdGNoKCc6JykpIHsKLSAgICAgICAgICAg
IGxleCgpOwotCi0gICAgICAgICAgICBrZXkgPSAnJCcgKyBleHByLm5hbWU7Ci0gICAgICAgICAg
ICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0YXRlLmxhYmVsU2V0
LCBrZXkpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5SZWRlY2xhcmF0
aW9uLCAnTGFiZWwnLCBleHByLm5hbWUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBz
dGF0ZS5sYWJlbFNldFtrZXldID0gdHJ1ZTsKLSAgICAgICAgICAgIGxhYmVsZWRCb2R5ID0gcGFy
c2VTdGF0ZW1lbnQoKTsKLSAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5sYWJlbFNldFtrZXldOwot
ICAgICAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoTGFiZWxlZFN0YXRlbWVudChleHByLCBsYWJl
bGVkQm9keSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7Ci0KLSAg
ICAgICAgcmV0dXJuIG5vZGUuZmluaXNoRXhwcmVzc2lvblN0YXRlbWVudChleHByKTsKLSAgICB9
Ci0KLSAgICAvLyBFQ01BLTI2MiAxNC4xIEZ1bmN0aW9uIERlZmluaXRpb24KLQotICAgIGZ1bmN0
aW9uIHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpIHsKLSAgICAgICAgdmFyIHN0YXRlbWVu
dCwgYm9keSA9IFtdLCB0b2tlbiwgZGlyZWN0aXZlLCBmaXJzdFJlc3RyaWN0ZWQsCi0gICAgICAg
ICAgICBvbGRMYWJlbFNldCwgb2xkSW5JdGVyYXRpb24sIG9sZEluU3dpdGNoLCBvbGRJbkZ1bmN0
aW9uQm9keSwgb2xkUGFyZW50aGVzaXNDb3VudCwKLSAgICAgICAgICAgIG5vZGUgPSBuZXcgTm9k
ZSgpOwotCi0gICAgICAgIGV4cGVjdCgneycpOwotCi0gICAgICAgIHdoaWxlIChzdGFydEluZGV4
IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLlN0
cmluZ0xpdGVyYWwpIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkOwotCi0gICAgICAgICAgICBzdGF0ZW1lbnQgPSBw
YXJzZVN0YXRlbWVudExpc3RJdGVtKCk7Ci0gICAgICAgICAgICBib2R5LnB1c2goc3RhdGVtZW50
KTsKLSAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQuZXhwcmVzc2lvbi50eXBlICE9PSBTeW50YXgu
TGl0ZXJhbCkgewotICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IGRpcmVjdGl2ZQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGlyZWN0aXZl
ID0gc291cmNlLnNsaWNlKHRva2VuLnN0YXJ0ICsgMSwgdG9rZW4uZW5kIC0gMSk7Ci0gICAgICAg
ICAgICBpZiAoZGlyZWN0aXZlID09PSAndXNlIHN0cmljdCcpIHsKLSAgICAgICAgICAgICAgICBz
dHJpY3QgPSB0cnVlOwotICAgICAgICAgICAgICAgIGlmIChmaXJzdFJlc3RyaWN0ZWQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4oZmlyc3RSZXN0cmljdGVk
LCBNZXNzYWdlcy5TdHJpY3RPY3RhbExpdGVyYWwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFmaXJzdFJlc3RyaWN0ZWQgJiYg
dG9rZW4ub2N0YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9r
ZW47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgb2xkTGFiZWxTZXQgPSBzdGF0ZS5sYWJlbFNldDsKLSAgICAgICAgb2xkSW5JdGVyYXRpb24g
PSBzdGF0ZS5pbkl0ZXJhdGlvbjsKLSAgICAgICAgb2xkSW5Td2l0Y2ggPSBzdGF0ZS5pblN3aXRj
aDsKLSAgICAgICAgb2xkSW5GdW5jdGlvbkJvZHkgPSBzdGF0ZS5pbkZ1bmN0aW9uQm9keTsKLSAg
ICAgICAgb2xkUGFyZW50aGVzaXNDb3VudCA9IHN0YXRlLnBhcmVudGhlc2l6ZWRDb3VudDsKLQot
ICAgICAgICBzdGF0ZS5sYWJlbFNldCA9IHt9OwotICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9
IGZhbHNlOwotICAgICAgICBzdGF0ZS5pblN3aXRjaCA9IGZhbHNlOwotICAgICAgICBzdGF0ZS5p
bkZ1bmN0aW9uQm9keSA9IHRydWU7Ci0gICAgICAgIHN0YXRlLnBhcmVudGhlc2l6ZWRDb3VudCA9
IDA7Ci0KLSAgICAgICAgd2hpbGUgKHN0YXJ0SW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAgICAg
IGlmIChtYXRjaCgnfScpKSB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBib2R5LnB1c2gocGFyc2VTdGF0ZW1lbnRMaXN0SXRlbSgpKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGV4cGVjdCgnfScpOwotCi0gICAgICAgIHN0YXRlLmxhYmVsU2V0ID0g
b2xkTGFiZWxTZXQ7Ci0gICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gb2xkSW5JdGVyYXRpb247
Ci0gICAgICAgIHN0YXRlLmluU3dpdGNoID0gb2xkSW5Td2l0Y2g7Ci0gICAgICAgIHN0YXRlLmlu
RnVuY3Rpb25Cb2R5ID0gb2xkSW5GdW5jdGlvbkJvZHk7Ci0gICAgICAgIHN0YXRlLnBhcmVudGhl
c2l6ZWRDb3VudCA9IG9sZFBhcmVudGhlc2lzQ291bnQ7Ci0KLSAgICAgICAgcmV0dXJuIG5vZGUu
ZmluaXNoQmxvY2tTdGF0ZW1lbnQoYm9keSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gdmFsaWRh
dGVQYXJhbShvcHRpb25zLCBwYXJhbSwgbmFtZSkgewotICAgICAgICB2YXIga2V5ID0gJyQnICsg
bmFtZTsKLSAgICAgICAgaWYgKHN0cmljdCkgewotICAgICAgICAgICAgaWYgKGlzUmVzdHJpY3Rl
ZFdvcmQobmFtZSkpIHsKLSAgICAgICAgICAgICAgICBvcHRpb25zLnN0cmljdGVkID0gcGFyYW07
Ci0gICAgICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UGFyYW1O
YW1lOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFz
T3duUHJvcGVydHkuY2FsbChvcHRpb25zLnBhcmFtU2V0LCBrZXkpKSB7Ci0gICAgICAgICAgICAg
ICAgb3B0aW9ucy5zdHJpY3RlZCA9IHBhcmFtOwotICAgICAgICAgICAgICAgIG9wdGlvbnMubWVz
c2FnZSA9IE1lc3NhZ2VzLlN0cmljdFBhcmFtRHVwZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSBlbHNlIGlmICghb3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQpIHsKLSAgICAgICAgICAgIGlmIChp
c1Jlc3RyaWN0ZWRXb3JkKG5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgb3B0aW9ucy5maXJzdFJl
c3RyaWN0ZWQgPSBwYXJhbTsKLSAgICAgICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2UgPSBNZXNz
YWdlcy5TdHJpY3RQYXJhbU5hbWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0TW9k
ZVJlc2VydmVkV29yZChuYW1lKSkgewotICAgICAgICAgICAgICAgIG9wdGlvbnMuZmlyc3RSZXN0
cmljdGVkID0gcGFyYW07Ci0gICAgICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gTWVzc2Fn
ZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkOwotICAgICAgICAgICAgfSBlbHNlIGlmIChPYmplY3QucHJv
dG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucy5wYXJhbVNldCwga2V5KSkgewotICAg
ICAgICAgICAgICAgIG9wdGlvbnMuc3RyaWN0ZWQgPSBwYXJhbTsKLSAgICAgICAgICAgICAgICBv
cHRpb25zLm1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RQYXJhbUR1cGU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgb3B0aW9ucy5wYXJhbVNldFtrZXldID0gdHJ1ZTsKLSAgICB9
Ci0KLSAgICBmdW5jdGlvbiBwYXJzZVBhcmFtKG9wdGlvbnMpIHsKLSAgICAgICAgdmFyIHRva2Vu
LCBwYXJhbSwgcGFyYW1zID0gW10sIGksIGRlZjsKLQotICAgICAgICB0b2tlbiA9IGxvb2thaGVh
ZDsKLSAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAnLi4uJykgewotICAgICAgICAgICAgcGFy
YW0gPSBwYXJzZVJlc3RFbGVtZW50KHBhcmFtcyk7Ci0gICAgICAgICAgICB2YWxpZGF0ZVBhcmFt
KG9wdGlvbnMsIHBhcmFtLmFyZ3VtZW50LCBwYXJhbS5hcmd1bWVudC5uYW1lKTsKLSAgICAgICAg
ICAgIG9wdGlvbnMucGFyYW1zLnB1c2gocGFyYW0pOwotICAgICAgICAgICAgb3B0aW9ucy5kZWZh
dWx0cy5wdXNoKG51bGwpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0K
LSAgICAgICAgcGFyYW0gPSBwYXJzZVBhdHRlcm5XaXRoRGVmYXVsdChwYXJhbXMpOwotICAgICAg
ICBmb3IgKGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICB2YWxp
ZGF0ZVBhcmFtKG9wdGlvbnMsIHBhcmFtc1tpXSwgcGFyYW1zW2ldLnZhbHVlKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChwYXJhbS50eXBlID09PSBTeW50YXguQXNzaWdubWVudFBhdHRlcm4p
IHsKLSAgICAgICAgICAgIGRlZiA9IHBhcmFtLnJpZ2h0OwotICAgICAgICAgICAgcGFyYW0gPSBw
YXJhbS5sZWZ0OwotICAgICAgICAgICAgKytvcHRpb25zLmRlZmF1bHRDb3VudDsKLSAgICAgICAg
fQotCi0gICAgICAgIG9wdGlvbnMucGFyYW1zLnB1c2gocGFyYW0pOwotICAgICAgICBvcHRpb25z
LmRlZmF1bHRzLnB1c2goZGVmKTsKLQotICAgICAgICByZXR1cm4gIW1hdGNoKCcpJyk7Ci0gICAg
fQotCi0gICAgZnVuY3Rpb24gcGFyc2VQYXJhbXMoZmlyc3RSZXN0cmljdGVkKSB7Ci0gICAgICAg
IHZhciBvcHRpb25zOwotCi0gICAgICAgIG9wdGlvbnMgPSB7Ci0gICAgICAgICAgICBwYXJhbXM6
IFtdLAotICAgICAgICAgICAgZGVmYXVsdENvdW50OiAwLAotICAgICAgICAgICAgZGVmYXVsdHM6
IFtdLAotICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkOiBmaXJzdFJlc3RyaWN0ZWQKLSAgICAg
ICAgfTsKLQotICAgICAgICBleHBlY3QoJygnKTsKLQotICAgICAgICBpZiAoIW1hdGNoKCcpJykp
IHsKLSAgICAgICAgICAgIG9wdGlvbnMucGFyYW1TZXQgPSB7fTsKLSAgICAgICAgICAgIHdoaWxl
IChzdGFydEluZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFwYXJzZVBhcmFt
KG9wdGlvbnMpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBleHBlY3QoJywnKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIGV4cGVjdCgnKScpOwotCi0gICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRD
b3VudCA9PT0gMCkgewotICAgICAgICAgICAgb3B0aW9ucy5kZWZhdWx0cyA9IFtdOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgIHBhcmFtczogb3B0aW9ucy5wYXJh
bXMsCi0gICAgICAgICAgICBkZWZhdWx0czogb3B0aW9ucy5kZWZhdWx0cywKLSAgICAgICAgICAg
IHN0cmljdGVkOiBvcHRpb25zLnN0cmljdGVkLAotICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVk
OiBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCwKLSAgICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnMu
bWVzc2FnZQotICAgICAgICB9OwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25E
ZWNsYXJhdGlvbihub2RlLCBpZGVudGlmaWVySXNPcHRpb25hbCkgewotICAgICAgICB2YXIgaWQg
PSBudWxsLCBwYXJhbXMgPSBbXSwgZGVmYXVsdHMgPSBbXSwgYm9keSwgdG9rZW4sIHN0cmljdGVk
LCB0bXAsIGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSwgcHJldmlvdXNTdHJpY3QsCi0gICAgICAg
ICAgICBpc0dlbmVyYXRvciwgcHJldmlvdXNBbGxvd1lpZWxkOwotCi0gICAgICAgIHByZXZpb3Vz
QWxsb3dZaWVsZCA9IHN0YXRlLmFsbG93WWllbGQ7Ci0KLSAgICAgICAgZXhwZWN0S2V5d29yZCgn
ZnVuY3Rpb24nKTsKLQotICAgICAgICBpc0dlbmVyYXRvciA9IG1hdGNoKCcqJyk7Ci0gICAgICAg
IGlmIChpc0dlbmVyYXRvcikgewotICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoIWlkZW50aWZpZXJJc09wdGlvbmFsIHx8ICFtYXRjaCgnKCcpKSB7Ci0gICAgICAg
ICAgICB0b2tlbiA9IGxvb2thaGVhZDsKLSAgICAgICAgICAgIGlkID0gcGFyc2VWYXJpYWJsZUlk
ZW50aWZpZXIoKTsKLSAgICAgICAgICAgIGlmIChzdHJpY3QpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
dG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIE1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uTmFt
ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBpZiAoaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47Ci0gICAgICAgICAgICAgICAgICAgIG1lc3Nh
Z2UgPSBNZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOwotICAgICAgICAgICAgICAgICAgICBt
ZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSAh
aXNHZW5lcmF0b3I7Ci0gICAgICAgIHRtcCA9IHBhcnNlUGFyYW1zKGZpcnN0UmVzdHJpY3RlZCk7
Ci0gICAgICAgIHBhcmFtcyA9IHRtcC5wYXJhbXM7Ci0gICAgICAgIGRlZmF1bHRzID0gdG1wLmRl
ZmF1bHRzOwotICAgICAgICBzdHJpY3RlZCA9IHRtcC5zdHJpY3RlZDsKLSAgICAgICAgZmlyc3RS
ZXN0cmljdGVkID0gdG1wLmZpcnN0UmVzdHJpY3RlZDsKLSAgICAgICAgaWYgKHRtcC5tZXNzYWdl
KSB7Ci0gICAgICAgICAgICBtZXNzYWdlID0gdG1wLm1lc3NhZ2U7Ci0gICAgICAgIH0KLQotCi0g
ICAgICAgIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0OwotICAgICAgICBib2R5ID0gcGFyc2VGdW5j
dGlvblNvdXJjZUVsZW1lbnRzKCk7Ci0gICAgICAgIGlmIChzdHJpY3QgJiYgZmlyc3RSZXN0cmlj
dGVkKSB7Ci0gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihmaXJzdFJlc3RyaWN0ZWQs
IG1lc3NhZ2UpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzdHJpY3QgJiYgc3RyaWN0ZWQpIHsK
LSAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHN0cmljdGVkLCBtZXNzYWdlKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0OwotICAgICAgICBz
dGF0ZS5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkOwotCi0gICAgICAgIHJldHVybiBu
b2RlLmZpbmlzaEZ1bmN0aW9uRGVjbGFyYXRpb24oaWQsIHBhcmFtcywgZGVmYXVsdHMsIGJvZHks
IGlzR2VuZXJhdG9yKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBwYXJzZUZ1bmN0aW9uRXhwcmVz
c2lvbigpIHsKLSAgICAgICAgdmFyIHRva2VuLCBpZCA9IG51bGwsIHN0cmljdGVkLCBmaXJzdFJl
c3RyaWN0ZWQsIG1lc3NhZ2UsIHRtcCwKLSAgICAgICAgICAgIHBhcmFtcyA9IFtdLCBkZWZhdWx0
cyA9IFtdLCBib2R5LCBwcmV2aW91c1N0cmljdCwgbm9kZSA9IG5ldyBOb2RlKCksCi0gICAgICAg
ICAgICBpc0dlbmVyYXRvciwgcHJldmlvdXNBbGxvd1lpZWxkOwotCi0gICAgICAgIHByZXZpb3Vz
QWxsb3dZaWVsZCA9IHN0YXRlLmFsbG93WWllbGQ7Ci0KLSAgICAgICAgZXhwZWN0S2V5d29yZCgn
ZnVuY3Rpb24nKTsKLQotICAgICAgICBpc0dlbmVyYXRvciA9IG1hdGNoKCcqJyk7Ci0gICAgICAg
IGlmIChpc0dlbmVyYXRvcikgewotICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gIWlzR2VuZXJhdG9yOwotICAgICAgICBpZiAoIW1hdGNo
KCcoJykpIHsKLSAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkOwotICAgICAgICAgICAgaWQg
PSAoIXN0cmljdCAmJiAhaXNHZW5lcmF0b3IgJiYgbWF0Y2hLZXl3b3JkKCd5aWVsZCcpKSA/IHBh
cnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpIDogcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKLSAg
ICAgICAgICAgIGlmIChzdHJpY3QpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNSZXN0cmljdGVk
V29yZCh0b2tlbi52YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVj
dGVkVG9rZW4odG9rZW4sIE1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uTmFtZSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNSZXN0
cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0
cmljdGVkID0gdG9rZW47Ci0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5T
dHJpY3RGdW5jdGlvbk5hbWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc1N0cmljdE1v
ZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0
UmVzdHJpY3RlZCA9IHRva2VuOwotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2Fn
ZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIHRtcCA9IHBhcnNlUGFyYW1zKGZpcnN0UmVzdHJpY3RlZCk7
Ci0gICAgICAgIHBhcmFtcyA9IHRtcC5wYXJhbXM7Ci0gICAgICAgIGRlZmF1bHRzID0gdG1wLmRl
ZmF1bHRzOwotICAgICAgICBzdHJpY3RlZCA9IHRtcC5zdHJpY3RlZDsKLSAgICAgICAgZmlyc3RS
ZXN0cmljdGVkID0gdG1wLmZpcnN0UmVzdHJpY3RlZDsKLSAgICAgICAgaWYgKHRtcC5tZXNzYWdl
KSB7Ci0gICAgICAgICAgICBtZXNzYWdlID0gdG1wLm1lc3NhZ2U7Ci0gICAgICAgIH0KLQotICAg
ICAgICBwcmV2aW91c1N0cmljdCA9IHN0cmljdDsKLSAgICAgICAgYm9keSA9IHBhcnNlRnVuY3Rp
b25Tb3VyY2VFbGVtZW50cygpOwotICAgICAgICBpZiAoc3RyaWN0ICYmIGZpcnN0UmVzdHJpY3Rl
ZCkgewotICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oZmlyc3RSZXN0cmljdGVkLCBt
ZXNzYWdlKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc3RyaWN0ICYmIHN0cmljdGVkKSB7Ci0g
ICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihzdHJpY3RlZCwgbWVzc2FnZSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7Ci0gICAgICAgIHN0YXRl
LmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7Ci0KLSAgICAgICAgcmV0dXJuIG5vZGUu
ZmluaXNoRnVuY3Rpb25FeHByZXNzaW9uKGlkLCBwYXJhbXMsIGRlZmF1bHRzLCBib2R5LCBpc0dl
bmVyYXRvcik7Ci0gICAgfQotCi0gICAgLy8gRUNNQS0yNjIgMTQuNSBDbGFzcyBEZWZpbml0aW9u
cwotCi0gICAgZnVuY3Rpb24gcGFyc2VDbGFzc0JvZHkoKSB7Ci0gICAgICAgIHZhciBjbGFzc0Jv
ZHksIHRva2VuLCBpc1N0YXRpYywgaGFzQ29uc3RydWN0b3IgPSBmYWxzZSwgYm9keSwgbWV0aG9k
LCBjb21wdXRlZCwga2V5OwotCi0gICAgICAgIGNsYXNzQm9keSA9IG5ldyBOb2RlKCk7Ci0KLSAg
ICAgICAgZXhwZWN0KCd7Jyk7Ci0gICAgICAgIGJvZHkgPSBbXTsKLSAgICAgICAgd2hpbGUgKCFt
YXRjaCgnfScpKSB7Ci0gICAgICAgICAgICBpZiAobWF0Y2goJzsnKSkgewotICAgICAgICAgICAg
ICAgIGxleCgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtZXRob2Qg
PSBuZXcgTm9kZSgpOwotICAgICAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkOwotICAgICAg
ICAgICAgICAgIGlzU3RhdGljID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgY29tcHV0ZWQgPSBt
YXRjaCgnWycpOwotICAgICAgICAgICAgICAgIGlmIChtYXRjaCgnKicpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGxleCgpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGtleS5uYW1lID09PSAnc3RhdGljJyAmJiAobG9va2FoZWFkUHJvcGVydHlOYW1lKCkg
fHwgbWF0Y2goJyonKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gbG9va2Fo
ZWFkOwotICAgICAgICAgICAgICAgICAgICAgICAgaXNTdGF0aWMgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgY29tcHV0ZWQgPSBtYXRjaCgnWycpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKG1hdGNoKCcqJykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXgo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIG1ldGhvZCA9IHRyeVBhcnNlTWV0aG9kRGVmaW5pdGlvbih0b2tlbiwga2V5
LCBjb21wdXRlZCwgbWV0aG9kKTsKLSAgICAgICAgICAgICAgICBpZiAobWV0aG9kKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIG1ldGhvZFsnc3RhdGljJ10gPSBpc1N0YXRpYzsgLy8ganNjczppZ25v
cmUgcmVxdWlyZURvdE5vdGF0aW9uCi0gICAgICAgICAgICAgICAgICAgIGlmIChtZXRob2Qua2lu
ZCA9PT0gJ2luaXQnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Qua2luZCA9ICdt
ZXRob2QnOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh
aXNTdGF0aWMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWV0aG9kLmNvbXB1dGVk
ICYmIChtZXRob2Qua2V5Lm5hbWUgfHwgbWV0aG9kLmtleS52YWx1ZS50b1N0cmluZygpKSA9PT0g
J2NvbnN0cnVjdG9yJykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXRob2Qu
a2luZCAhPT0gJ21ldGhvZCcgfHwgIW1ldGhvZC5tZXRob2QgfHwgbWV0aG9kLnZhbHVlLmdlbmVy
YXRvcikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRU
b2tlbih0b2tlbiwgTWVzc2FnZXMuQ29uc3RydWN0b3JTcGVjaWFsTWV0aG9kKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhh
c0NvbnN0cnVjdG9yKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93VW5l
eHBlY3RlZFRva2VuKHRva2VuLCBNZXNzYWdlcy5EdXBsaWNhdGVDb25zdHJ1Y3Rvcik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaGFzQ29uc3RydWN0b3IgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Qua2luZCA9ICdjb25zdHJ1
Y3Rvcic7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1ldGhvZC5jb21wdXRlZCAmJiAo
bWV0aG9kLmtleS5uYW1lIHx8IG1ldGhvZC5rZXkudmFsdWUudG9TdHJpbmcoKSkgPT09ICdwcm90
b3R5cGUnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9r
ZW4odG9rZW4sIE1lc3NhZ2VzLlN0YXRpY1Byb3RvdHlwZSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbWV0aG9k
LnR5cGUgPSBTeW50YXguTWV0aG9kRGVmaW5pdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgZGVs
ZXRlIG1ldGhvZC5tZXRob2Q7Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBtZXRob2Quc2hv
cnRoYW5kOwotICAgICAgICAgICAgICAgICAgICBib2R5LnB1c2gobWV0aG9kKTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tl
bihsb29rYWhlYWQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBsZXgoKTsKLSAgICAgICAgcmV0dXJuIGNsYXNzQm9keS5maW5pc2hDbGFzc0Jv
ZHkoYm9keSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VDbGFzc0RlY2xhcmF0aW9uKGlk
ZW50aWZpZXJJc09wdGlvbmFsKSB7Ci0gICAgICAgIHZhciBpZCA9IG51bGwsIHN1cGVyQ2xhc3Mg
PSBudWxsLCBjbGFzc05vZGUgPSBuZXcgTm9kZSgpLCBjbGFzc0JvZHksIHByZXZpb3VzU3RyaWN0
ID0gc3RyaWN0OwotICAgICAgICBzdHJpY3QgPSB0cnVlOwotCi0gICAgICAgIGV4cGVjdEtleXdv
cmQoJ2NsYXNzJyk7Ci0KLSAgICAgICAgaWYgKCFpZGVudGlmaWVySXNPcHRpb25hbCB8fCBsb29r
YWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikgewotICAgICAgICAgICAgaWQgPSBwYXJz
ZVZhcmlhYmxlSWRlbnRpZmllcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1hdGNoS2V5
d29yZCgnZXh0ZW5kcycpKSB7Ci0gICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgICAgIHN1cGVy
Q2xhc3MgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFs
bG93Q2FsbCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2xhc3NCb2R5ID0gcGFyc2VDbGFzc0JvZHko
KTsKLSAgICAgICAgc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7Ci0KLSAgICAgICAgcmV0dXJuIGNs
YXNzTm9kZS5maW5pc2hDbGFzc0RlY2xhcmF0aW9uKGlkLCBzdXBlckNsYXNzLCBjbGFzc0JvZHkp
OwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlQ2xhc3NFeHByZXNzaW9uKCkgewotICAgICAg
ICB2YXIgaWQgPSBudWxsLCBzdXBlckNsYXNzID0gbnVsbCwgY2xhc3NOb2RlID0gbmV3IE5vZGUo
KSwgY2xhc3NCb2R5LCBwcmV2aW91c1N0cmljdCA9IHN0cmljdDsKLSAgICAgICAgc3RyaWN0ID0g
dHJ1ZTsKLQotICAgICAgICBleHBlY3RLZXl3b3JkKCdjbGFzcycpOwotCi0gICAgICAgIGlmIChs
b29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikgewotICAgICAgICAgICAgaWQgPSBw
YXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1hdGNo
S2V5d29yZCgnZXh0ZW5kcycpKSB7Ci0gICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgICAgIHN1
cGVyQ2xhc3MgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lv
bkFsbG93Q2FsbCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2xhc3NCb2R5ID0gcGFyc2VDbGFzc0Jv
ZHkoKTsKLSAgICAgICAgc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7Ci0KLSAgICAgICAgcmV0dXJu
IGNsYXNzTm9kZS5maW5pc2hDbGFzc0V4cHJlc3Npb24oaWQsIHN1cGVyQ2xhc3MsIGNsYXNzQm9k
eSk7Ci0gICAgfQotCi0gICAgLy8gRUNNQS0yNjIgMTUuMiBNb2R1bGVzCi0KLSAgICBmdW5jdGlv
biBwYXJzZU1vZHVsZVNwZWNpZmllcigpIHsKLSAgICAgICAgdmFyIG5vZGUgPSBuZXcgTm9kZSgp
OwotCi0gICAgICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCkg
ewotICAgICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5JbnZhbGlkTW9kdWxlU3BlY2lmaWVy
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hMaXRlcmFsKGxleCgpKTsK
LSAgICB9Ci0KLSAgICAvLyBFQ01BLTI2MiAxNS4yLjMgRXhwb3J0cwotCi0gICAgZnVuY3Rpb24g
cGFyc2VFeHBvcnRTcGVjaWZpZXIoKSB7Ci0gICAgICAgIHZhciBleHBvcnRlZCwgbG9jYWwsIG5v
ZGUgPSBuZXcgTm9kZSgpLCBkZWY7Ci0gICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2RlZmF1bHQn
KSkgewotICAgICAgICAgICAgLy8gZXhwb3J0IHtkZWZhdWx0fSBmcm9tICdzb21ldGhpbmcnOwot
ICAgICAgICAgICAgZGVmID0gbmV3IE5vZGUoKTsKLSAgICAgICAgICAgIGxleCgpOwotICAgICAg
ICAgICAgbG9jYWwgPSBkZWYuZmluaXNoSWRlbnRpZmllcignZGVmYXVsdCcpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgbG9jYWwgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3JkKCdhcycpKSB7Ci0g
ICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgICAgIGV4cG9ydGVkID0gcGFyc2VOb25Db21wdXRl
ZFByb3BlcnR5KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoRXhwb3J0
U3BlY2lmaWVyKGxvY2FsLCBleHBvcnRlZCk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VF
eHBvcnROYW1lZERlY2xhcmF0aW9uKG5vZGUpIHsKLSAgICAgICAgdmFyIGRlY2xhcmF0aW9uID0g
bnVsbCwKLSAgICAgICAgICAgIGlzRXhwb3J0RnJvbUlkZW50aWZpZXIsCi0gICAgICAgICAgICBz
cmMgPSBudWxsLCBzcGVjaWZpZXJzID0gW107Ci0KLSAgICAgICAgLy8gbm9uLWRlZmF1bHQgZXhw
b3J0Ci0gICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uS2V5d29yZCkgewotICAg
ICAgICAgICAgLy8gY292ZXJzOgotICAgICAgICAgICAgLy8gZXhwb3J0IHZhciBmID0gMTsKLSAg
ICAgICAgICAgIHN3aXRjaCAobG9va2FoZWFkLnZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSAnbGV0JzoKLSAgICAgICAgICAgICAgICBjYXNlICdjb25zdCc6Ci0gICAgICAgICAgICAgICAg
Y2FzZSAndmFyJzoKLSAgICAgICAgICAgICAgICBjYXNlICdjbGFzcyc6Ci0gICAgICAgICAgICAg
ICAgY2FzZSAnZnVuY3Rpb24nOgotICAgICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbiA9IHBh
cnNlU3RhdGVtZW50TGlzdEl0ZW0oKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUu
ZmluaXNoRXhwb3J0TmFtZWREZWNsYXJhdGlvbihkZWNsYXJhdGlvbiwgc3BlY2lmaWVycywgbnVs
bCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBleHBlY3QoJ3snKTsKLSAg
ICAgICAgd2hpbGUgKCFtYXRjaCgnfScpKSB7Ci0gICAgICAgICAgICBpc0V4cG9ydEZyb21JZGVu
dGlmaWVyID0gaXNFeHBvcnRGcm9tSWRlbnRpZmllciB8fCBtYXRjaEtleXdvcmQoJ2RlZmF1bHQn
KTsKLSAgICAgICAgICAgIHNwZWNpZmllcnMucHVzaChwYXJzZUV4cG9ydFNwZWNpZmllcigpKTsK
LSAgICAgICAgICAgIGlmICghbWF0Y2goJ30nKSkgewotICAgICAgICAgICAgICAgIGV4cGVjdCgn
LCcpOwotICAgICAgICAgICAgICAgIGlmIChtYXRjaCgnfScpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBleHBlY3QoJ30nKTsKLQotICAgICAgICBpZiAobWF0Y2hDb250ZXh0dWFsS2V5d29y
ZCgnZnJvbScpKSB7Ci0gICAgICAgICAgICAvLyBjb3ZlcmluZzoKLSAgICAgICAgICAgIC8vIGV4
cG9ydCB7ZGVmYXVsdH0gZnJvbSAnZm9vJzsKLSAgICAgICAgICAgIC8vIGV4cG9ydCB7Zm9vfSBm
cm9tICdmb28nOwotICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAgICAgICBzcmMgPSBwYXJzZU1v
ZHVsZVNwZWNpZmllcigpOwotICAgICAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOwotICAgICAg
ICB9IGVsc2UgaWYgKGlzRXhwb3J0RnJvbUlkZW50aWZpZXIpIHsKLSAgICAgICAgICAgIC8vIGNv
dmVyaW5nOgotICAgICAgICAgICAgLy8gZXhwb3J0IHtkZWZhdWx0fTsgLy8gbWlzc2luZyBmcm9t
Q2xhdXNlCi0gICAgICAgICAgICB0aHJvd0Vycm9yKGxvb2thaGVhZC52YWx1ZSA/Ci0gICAgICAg
ICAgICAgICAgICAgIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiA6IE1lc3NhZ2VzLk1pc3NpbmdG
cm9tQ2xhdXNlLCBsb29rYWhlYWQudmFsdWUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgLy8gY292ZXIKLSAgICAgICAgICAgIC8vIGV4cG9ydCB7Zm9vfTsKLSAgICAgICAgICAgIGNv
bnN1bWVTZW1pY29sb24oKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hF
eHBvcnROYW1lZERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uLCBzcGVjaWZpZXJzLCBzcmMpOwotICAg
IH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKG5vZGUpIHsK
LSAgICAgICAgdmFyIGRlY2xhcmF0aW9uID0gbnVsbCwKLSAgICAgICAgICAgIGV4cHJlc3Npb24g
PSBudWxsOwotCi0gICAgICAgIC8vIGNvdmVyczoKLSAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQg
Li4uCi0gICAgICAgIGV4cGVjdEtleXdvcmQoJ2RlZmF1bHQnKTsKLQotICAgICAgICBpZiAobWF0
Y2hLZXl3b3JkKCdmdW5jdGlvbicpKSB7Ci0gICAgICAgICAgICAvLyBjb3ZlcnM6Ci0gICAgICAg
ICAgICAvLyBleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb28gKCkge30KLSAgICAgICAgICAgIC8v
IGV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHt9Ci0gICAgICAgICAgICBkZWNsYXJhdGlvbiA9
IHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbihuZXcgTm9kZSgpLCB0cnVlKTsKLSAgICAgICAgICAg
IHJldHVybiBub2RlLmZpbmlzaEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihkZWNsYXJhdGlvbik7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnY2xhc3MnKSkgewotICAgICAg
ICAgICAgZGVjbGFyYXRpb24gPSBwYXJzZUNsYXNzRGVjbGFyYXRpb24odHJ1ZSk7Ci0gICAgICAg
ICAgICByZXR1cm4gbm9kZS5maW5pc2hFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24oZGVjbGFyYXRp
b24pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2Zy
b20nKSkgewotICAgICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4s
IGxvb2thaGVhZC52YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBjb3ZlcnM6Ci0gICAg
ICAgIC8vIGV4cG9ydCBkZWZhdWx0IHt9OwotICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCBbXTsK
LSAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgKDEgKyAyKTsKLSAgICAgICAgaWYgKG1hdGNoKCd7
JykpIHsKLSAgICAgICAgICAgIGV4cHJlc3Npb24gPSBwYXJzZU9iamVjdEluaXRpYWxpemVyKCk7
Ci0gICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJ1snKSkgewotICAgICAgICAgICAgZXhwcmVzc2lv
biA9IHBhcnNlQXJyYXlJbml0aWFsaXplcigpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgZXhwcmVzc2lvbiA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKLSAgICAgICAgfQot
ICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7Ci0gICAgICAgIHJldHVybiBub2RlLmZpbmlzaEV4
cG9ydERlZmF1bHREZWNsYXJhdGlvbihleHByZXNzaW9uKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlv
biBwYXJzZUV4cG9ydEFsbERlY2xhcmF0aW9uKG5vZGUpIHsKLSAgICAgICAgdmFyIHNyYzsKLQot
ICAgICAgICAvLyBjb3ZlcnM6Ci0gICAgICAgIC8vIGV4cG9ydCAqIGZyb20gJ2Zvbyc7Ci0gICAg
ICAgIGV4cGVjdCgnKicpOwotICAgICAgICBpZiAoIW1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2Zy
b20nKSkgewotICAgICAgICAgICAgdGhyb3dFcnJvcihsb29rYWhlYWQudmFsdWUgPwotICAgICAg
ICAgICAgICAgICAgICBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4gOiBNZXNzYWdlcy5NaXNzaW5n
RnJvbUNsYXVzZSwgbG9va2FoZWFkLnZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICBsZXgoKTsK
LSAgICAgICAgc3JjID0gcGFyc2VNb2R1bGVTcGVjaWZpZXIoKTsKLSAgICAgICAgY29uc3VtZVNl
bWljb2xvbigpOwotCi0gICAgICAgIHJldHVybiBub2RlLmZpbmlzaEV4cG9ydEFsbERlY2xhcmF0
aW9uKHNyYyk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VFeHBvcnREZWNsYXJhdGlvbigp
IHsKLSAgICAgICAgdmFyIG5vZGUgPSBuZXcgTm9kZSgpOwotICAgICAgICBpZiAoc3RhdGUuaW5G
dW5jdGlvbkJvZHkpIHsKLSAgICAgICAgICAgIHRocm93RXJyb3IoTWVzc2FnZXMuSWxsZWdhbEV4
cG9ydERlY2xhcmF0aW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIGV4cGVjdEtleXdvcmQoJ2V4
cG9ydCcpOwotCi0gICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2RlZmF1bHQnKSkgewotICAgICAg
ICAgICAgcmV0dXJuIHBhcnNlRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKG5vZGUpOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChtYXRjaCgnKicpKSB7Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VF
eHBvcnRBbGxEZWNsYXJhdGlvbihub2RlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcGFy
c2VFeHBvcnROYW1lZERlY2xhcmF0aW9uKG5vZGUpOwotICAgIH0KLQotICAgIC8vIEVDTUEtMjYy
IDE1LjIuMiBJbXBvcnRzCi0KLSAgICBmdW5jdGlvbiBwYXJzZUltcG9ydFNwZWNpZmllcigpIHsK
LSAgICAgICAgLy8gaW1wb3J0IHs8Zm9vIGFzIGJhcj59IC4uLjsKLSAgICAgICAgdmFyIGxvY2Fs
LCBpbXBvcnRlZCwgbm9kZSA9IG5ldyBOb2RlKCk7Ci0KLSAgICAgICAgaW1wb3J0ZWQgPSBwYXJz
ZU5vbkNvbXB1dGVkUHJvcGVydHkoKTsKLSAgICAgICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdv
cmQoJ2FzJykpIHsKLSAgICAgICAgICAgIGxleCgpOwotICAgICAgICAgICAgbG9jYWwgPSBwYXJz
ZVZhcmlhYmxlSWRlbnRpZmllcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG5vZGUu
ZmluaXNoSW1wb3J0U3BlY2lmaWVyKGxvY2FsLCBpbXBvcnRlZCk7Ci0gICAgfQotCi0gICAgZnVu
Y3Rpb24gcGFyc2VOYW1lZEltcG9ydHMoKSB7Ci0gICAgICAgIHZhciBzcGVjaWZpZXJzID0gW107
Ci0gICAgICAgIC8vIHtmb28sIGJhciBhcyBiYXN9Ci0gICAgICAgIGV4cGVjdCgneycpOwotICAg
ICAgICB3aGlsZSAoIW1hdGNoKCd9JykpIHsKLSAgICAgICAgICAgIHNwZWNpZmllcnMucHVzaChw
YXJzZUltcG9ydFNwZWNpZmllcigpKTsKLSAgICAgICAgICAgIGlmICghbWF0Y2goJ30nKSkgewot
ICAgICAgICAgICAgICAgIGV4cGVjdCgnLCcpOwotICAgICAgICAgICAgICAgIGlmIChtYXRjaCgn
fScpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBleHBlY3QoJ30nKTsKLSAgICAgICAgcmV0
dXJuIHNwZWNpZmllcnM7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VJbXBvcnREZWZhdWx0
U3BlY2lmaWVyKCkgewotICAgICAgICAvLyBpbXBvcnQgPGZvbz4gLi4uOwotICAgICAgICB2YXIg
bG9jYWwsIG5vZGUgPSBuZXcgTm9kZSgpOwotCi0gICAgICAgIGxvY2FsID0gcGFyc2VOb25Db21w
dXRlZFByb3BlcnR5KCk7Ci0KLSAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoSW1wb3J0RGVmYXVs
dFNwZWNpZmllcihsb2NhbCk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VJbXBvcnROYW1l
c3BhY2VTcGVjaWZpZXIoKSB7Ci0gICAgICAgIC8vIGltcG9ydCA8KiBhcyBmb28+IC4uLjsKLSAg
ICAgICAgdmFyIGxvY2FsLCBub2RlID0gbmV3IE5vZGUoKTsKLQotICAgICAgICBleHBlY3QoJyon
KTsKLSAgICAgICAgaWYgKCFtYXRjaENvbnRleHR1YWxLZXl3b3JkKCdhcycpKSB7Ci0gICAgICAg
ICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLk5vQXNBZnRlckltcG9ydE5hbWVzcGFjZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgbGV4KCk7Ci0gICAgICAgIGxvY2FsID0gcGFyc2VOb25Db21wdXRlZFBy
b3BlcnR5KCk7Ci0KLSAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoSW1wb3J0TmFtZXNwYWNlU3Bl
Y2lmaWVyKGxvY2FsKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBwYXJzZUltcG9ydERlY2xhcmF0
aW9uKCkgewotICAgICAgICB2YXIgc3BlY2lmaWVycyA9IFtdLCBzcmMsIG5vZGUgPSBuZXcgTm9k
ZSgpOwotCi0gICAgICAgIGlmIChzdGF0ZS5pbkZ1bmN0aW9uQm9keSkgewotICAgICAgICAgICAg
dGhyb3dFcnJvcihNZXNzYWdlcy5JbGxlZ2FsSW1wb3J0RGVjbGFyYXRpb24pOwotICAgICAgICB9
Ci0KLSAgICAgICAgZXhwZWN0S2V5d29yZCgnaW1wb3J0Jyk7Ci0KLSAgICAgICAgaWYgKGxvb2th
aGVhZC50eXBlID09PSBUb2tlbi5TdHJpbmdMaXRlcmFsKSB7Ci0gICAgICAgICAgICAvLyBpbXBv
cnQgJ2Zvbyc7Ci0gICAgICAgICAgICBzcmMgPSBwYXJzZU1vZHVsZVNwZWNpZmllcigpOwotICAg
ICAgICB9IGVsc2UgewotCi0gICAgICAgICAgICBpZiAobWF0Y2goJ3snKSkgewotICAgICAgICAg
ICAgICAgIC8vIGltcG9ydCB7YmFyfQotICAgICAgICAgICAgICAgIHNwZWNpZmllcnMgPSBzcGVj
aWZpZXJzLmNvbmNhdChwYXJzZU5hbWVkSW1wb3J0cygpKTsKLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAobWF0Y2goJyonKSkgewotICAgICAgICAgICAgICAgIC8vIGltcG9ydCAqIGFzIGZvbwotICAg
ICAgICAgICAgICAgIHNwZWNpZmllcnMucHVzaChwYXJzZUltcG9ydE5hbWVzcGFjZVNwZWNpZmll
cigpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNJZGVudGlmaWVyTmFtZShsb29rYWhlYWQp
ICYmICFtYXRjaEtleXdvcmQoJ2RlZmF1bHQnKSkgewotICAgICAgICAgICAgICAgIC8vIGltcG9y
dCBmb28KLSAgICAgICAgICAgICAgICBzcGVjaWZpZXJzLnB1c2gocGFyc2VJbXBvcnREZWZhdWx0
U3BlY2lmaWVyKCkpOwotICAgICAgICAgICAgICAgIGlmIChtYXRjaCgnLCcpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGxleCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2goJyonKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW1wb3J0IGZvbywgKiBhcyBmb28KLSAgICAg
ICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcnMucHVzaChwYXJzZUltcG9ydE5hbWVzcGFjZVNw
ZWNpZmllcigpKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgneycpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbXBvcnQgZm9vLCB7YmFyfQotICAgICAgICAg
ICAgICAgICAgICAgICAgc3BlY2lmaWVycyA9IHNwZWNpZmllcnMuY29uY2F0KHBhcnNlTmFtZWRJ
bXBvcnRzKCkpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4obG9va2FoZWFkKTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4obGV4KCkpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAoIW1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2Zyb20nKSkgewotICAgICAg
ICAgICAgICAgIHRocm93RXJyb3IobG9va2FoZWFkLnZhbHVlID8KLSAgICAgICAgICAgICAgICAg
ICAgICAgIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiA6IE1lc3NhZ2VzLk1pc3NpbmdGcm9tQ2xh
dXNlLCBsb29rYWhlYWQudmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGV4KCk7
Ci0gICAgICAgICAgICBzcmMgPSBwYXJzZU1vZHVsZVNwZWNpZmllcigpOwotICAgICAgICB9Ci0K
LSAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOwotICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hJ
bXBvcnREZWNsYXJhdGlvbihzcGVjaWZpZXJzLCBzcmMpOwotICAgIH0KLQotICAgIC8vIEVDTUEt
MjYyIDE1LjEgU2NyaXB0cwotCi0gICAgZnVuY3Rpb24gcGFyc2VTY3JpcHRCb2R5KCkgewotICAg
ICAgICB2YXIgc3RhdGVtZW50LCBib2R5ID0gW10sIHRva2VuLCBkaXJlY3RpdmUsIGZpcnN0UmVz
dHJpY3RlZDsKLQotICAgICAgICB3aGlsZSAoc3RhcnRJbmRleCA8IGxlbmd0aCkgewotICAgICAg
ICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7Ci0gICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0g
VG9rZW4uU3RyaW5nTGl0ZXJhbCkgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBzdGF0ZW1lbnQgPSBwYXJzZVN0YXRlbWVudExpc3RJdGVtKCk7
Ci0gICAgICAgICAgICBib2R5LnB1c2goc3RhdGVtZW50KTsKLSAgICAgICAgICAgIGlmIChzdGF0
ZW1lbnQuZXhwcmVzc2lvbi50eXBlICE9PSBTeW50YXguTGl0ZXJhbCkgewotICAgICAgICAgICAg
ICAgIC8vIHRoaXMgaXMgbm90IGRpcmVjdGl2ZQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZGlyZWN0aXZlID0gc291cmNlLnNsaWNlKHRva2VuLnN0
YXJ0ICsgMSwgdG9rZW4uZW5kIC0gMSk7Ci0gICAgICAgICAgICBpZiAoZGlyZWN0aXZlID09PSAn
dXNlIHN0cmljdCcpIHsKLSAgICAgICAgICAgICAgICBzdHJpY3QgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIGlmIChmaXJzdFJlc3RyaWN0ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgdG9sZXJh
dGVVbmV4cGVjdGVkVG9rZW4oZmlyc3RSZXN0cmljdGVkLCBNZXNzYWdlcy5TdHJpY3RPY3RhbExp
dGVyYWwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFmaXJzdFJlc3RyaWN0ZWQgJiYgdG9rZW4ub2N0YWwpIHsKLSAgICAgICAg
ICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgd2hpbGUgKHN0YXJ0SW5kZXggPCBs
ZW5ndGgpIHsKLSAgICAgICAgICAgIHN0YXRlbWVudCA9IHBhcnNlU3RhdGVtZW50TGlzdEl0ZW0o
KTsKLSAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqLwotICAgICAgICAgICAgaWYg
KHR5cGVvZiBzdGF0ZW1lbnQgPT09ICd1bmRlZmluZWQnKSB7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBib2R5LnB1c2goc3RhdGVtZW50KTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gYm9keTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBwYXJz
ZVByb2dyYW0oKSB7Ci0gICAgICAgIHZhciBib2R5LCBub2RlOwotCi0gICAgICAgIHBlZWsoKTsK
LSAgICAgICAgbm9kZSA9IG5ldyBOb2RlKCk7Ci0KLSAgICAgICAgYm9keSA9IHBhcnNlU2NyaXB0
Qm9keSgpOwotICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hQcm9ncmFtKGJvZHksIHN0YXRlLnNv
dXJjZVR5cGUpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGZpbHRlclRva2VuTG9jYXRpb24oKSB7
Ci0gICAgICAgIHZhciBpLCBlbnRyeSwgdG9rZW4sIHRva2VucyA9IFtdOwotCi0gICAgICAgIGZv
ciAoaSA9IDA7IGkgPCBleHRyYS50b2tlbnMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGVu
dHJ5ID0gZXh0cmEudG9rZW5zW2ldOwotICAgICAgICAgICAgdG9rZW4gPSB7Ci0gICAgICAgICAg
ICAgICAgdHlwZTogZW50cnkudHlwZSwKLSAgICAgICAgICAgICAgICB2YWx1ZTogZW50cnkudmFs
dWUKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBpZiAoZW50cnkucmVnZXgpIHsKLSAgICAg
ICAgICAgICAgICB0b2tlbi5yZWdleCA9IHsKLSAgICAgICAgICAgICAgICAgICAgcGF0dGVybjog
ZW50cnkucmVnZXgucGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICAgZmxhZ3M6IGVudHJ5LnJl
Z2V4LmZsYWdzCi0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmIChleHRyYS5yYW5nZSkgewotICAgICAgICAgICAgICAgIHRva2VuLnJhbmdlID0gZW50cnku
cmFuZ2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZXh0cmEubG9jKSB7Ci0gICAg
ICAgICAgICAgICAgdG9rZW4ubG9jID0gZW50cnkubG9jOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgdG9rZW5zLnB1c2godG9rZW4pOwotICAgICAgICB9Ci0KLSAgICAgICAgZXh0cmEudG9r
ZW5zID0gdG9rZW5zOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHRva2VuaXplKGNvZGUsIG9wdGlv
bnMpIHsKLSAgICAgICAgdmFyIHRvU3RyaW5nLAotICAgICAgICAgICAgdG9rZW5zOwotCi0gICAg
ICAgIHRvU3RyaW5nID0gU3RyaW5nOwotICAgICAgICBpZiAodHlwZW9mIGNvZGUgIT09ICdzdHJp
bmcnICYmICEoY29kZSBpbnN0YW5jZW9mIFN0cmluZykpIHsKLSAgICAgICAgICAgIGNvZGUgPSB0
b1N0cmluZyhjb2RlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHNvdXJjZSA9IGNvZGU7Ci0gICAg
ICAgIGluZGV4ID0gMDsKLSAgICAgICAgbGluZU51bWJlciA9IChzb3VyY2UubGVuZ3RoID4gMCkg
PyAxIDogMDsKLSAgICAgICAgbGluZVN0YXJ0ID0gMDsKLSAgICAgICAgc3RhcnRJbmRleCA9IGlu
ZGV4OwotICAgICAgICBzdGFydExpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwotICAgICAgICBzdGFy
dExpbmVTdGFydCA9IGxpbmVTdGFydDsKLSAgICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDsK
LSAgICAgICAgbG9va2FoZWFkID0gbnVsbDsKLSAgICAgICAgc3RhdGUgPSB7Ci0gICAgICAgICAg
ICBhbGxvd0luOiB0cnVlLAotICAgICAgICAgICAgYWxsb3dZaWVsZDogdHJ1ZSwKLSAgICAgICAg
ICAgIGxhYmVsU2V0OiB7fSwKLSAgICAgICAgICAgIGluRnVuY3Rpb25Cb2R5OiBmYWxzZSwKLSAg
ICAgICAgICAgIGluSXRlcmF0aW9uOiBmYWxzZSwKLSAgICAgICAgICAgIGluU3dpdGNoOiBmYWxz
ZSwKLSAgICAgICAgICAgIGxhc3RDb21tZW50U3RhcnQ6IC0xLAotICAgICAgICAgICAgY3VybHlT
dGFjazogW10KLSAgICAgICAgfTsKLQotICAgICAgICBleHRyYSA9IHt9OwotCi0gICAgICAgIC8v
IE9wdGlvbnMgbWF0Y2hpbmcuCi0gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwotCi0g
ICAgICAgIC8vIE9mIGNvdXJzZSB3ZSBjb2xsZWN0IHRva2VucyBoZXJlLgotICAgICAgICBvcHRp
b25zLnRva2VucyA9IHRydWU7Ci0gICAgICAgIGV4dHJhLnRva2VucyA9IFtdOwotICAgICAgICBl
eHRyYS50b2tlbml6ZSA9IHRydWU7Ci0gICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgdHdvIGZpZWxk
cyBhcmUgbmVjZXNzYXJ5IHRvIGNvbXB1dGUgdGhlIFJlZ2V4IHRva2Vucy4KLSAgICAgICAgZXh0
cmEub3BlblBhcmVuVG9rZW4gPSAtMTsKLSAgICAgICAgZXh0cmEub3BlbkN1cmx5VG9rZW4gPSAt
MTsKLQotICAgICAgICBleHRyYS5yYW5nZSA9ICh0eXBlb2Ygb3B0aW9ucy5yYW5nZSA9PT0gJ2Jv
b2xlYW4nKSAmJiBvcHRpb25zLnJhbmdlOwotICAgICAgICBleHRyYS5sb2MgPSAodHlwZW9mIG9w
dGlvbnMubG9jID09PSAnYm9vbGVhbicpICYmIG9wdGlvbnMubG9jOwotCi0gICAgICAgIGlmICh0
eXBlb2Ygb3B0aW9ucy5jb21tZW50ID09PSAnYm9vbGVhbicgJiYgb3B0aW9ucy5jb21tZW50KSB7
Ci0gICAgICAgICAgICBleHRyYS5jb21tZW50cyA9IFtdOwotICAgICAgICB9Ci0gICAgICAgIGlm
ICh0eXBlb2Ygb3B0aW9ucy50b2xlcmFudCA9PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMudG9sZXJh
bnQpIHsKLSAgICAgICAgICAgIGV4dHJhLmVycm9ycyA9IFtdOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdHJ5IHsKLSAgICAgICAgICAgIHBlZWsoKTsKLSAgICAgICAgICAgIGlmIChsb29rYWhlYWQu
dHlwZSA9PT0gVG9rZW4uRU9GKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGV4dHJhLnRva2Vu
czsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAgICAgICB3aGls
ZSAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLkVPRikgewotICAgICAgICAgICAgICAgIHRyeSB7
Ci0gICAgICAgICAgICAgICAgICAgIGxleCgpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGxl
eEVycm9yKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChleHRyYS5lcnJvcnMpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJlY29yZEVycm9yKGxleEVycm9yKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFdlIGhhdmUgdG8gYnJlYWsgb24gdGhlIGZpcnN0IGVycm9yCi0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyB0byBhdm9pZCBpbmZpbml0ZSBsb29wcy4KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgdGhyb3cgbGV4RXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZpbHRlclRv
a2VuTG9jYXRpb24oKTsKLSAgICAgICAgICAgIHRva2VucyA9IGV4dHJhLnRva2VuczsKLSAgICAg
ICAgICAgIGlmICh0eXBlb2YgZXh0cmEuY29tbWVudHMgIT09ICd1bmRlZmluZWQnKSB7Ci0gICAg
ICAgICAgICAgICAgdG9rZW5zLmNvbW1lbnRzID0gZXh0cmEuY29tbWVudHM7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhLmVycm9ycyAhPT0gJ3VuZGVmaW5lZCcp
IHsKLSAgICAgICAgICAgICAgICB0b2tlbnMuZXJyb3JzID0gZXh0cmEuZXJyb3JzOwotICAgICAg
ICAgICAgfQotICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICB0aHJvdyBlOwotICAg
ICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgZXh0cmEgPSB7fTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gdG9rZW5zOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlKGNvZGUsIG9w
dGlvbnMpIHsKLSAgICAgICAgdmFyIHByb2dyYW0sIHRvU3RyaW5nOwotCi0gICAgICAgIHRvU3Ry
aW5nID0gU3RyaW5nOwotICAgICAgICBpZiAodHlwZW9mIGNvZGUgIT09ICdzdHJpbmcnICYmICEo
Y29kZSBpbnN0YW5jZW9mIFN0cmluZykpIHsKLSAgICAgICAgICAgIGNvZGUgPSB0b1N0cmluZyhj
b2RlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHNvdXJjZSA9IGNvZGU7Ci0gICAgICAgIGluZGV4
ID0gMDsKLSAgICAgICAgbGluZU51bWJlciA9IChzb3VyY2UubGVuZ3RoID4gMCkgPyAxIDogMDsK
LSAgICAgICAgbGluZVN0YXJ0ID0gMDsKLSAgICAgICAgc3RhcnRJbmRleCA9IGluZGV4OwotICAg
ICAgICBzdGFydExpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwotICAgICAgICBzdGFydExpbmVTdGFy
dCA9IGxpbmVTdGFydDsKLSAgICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDsKLSAgICAgICAg
bG9va2FoZWFkID0gbnVsbDsKLSAgICAgICAgc3RhdGUgPSB7Ci0gICAgICAgICAgICBhbGxvd0lu
OiB0cnVlLAotICAgICAgICAgICAgYWxsb3dZaWVsZDogdHJ1ZSwKLSAgICAgICAgICAgIGxhYmVs
U2V0OiB7fSwKLSAgICAgICAgICAgIGluRnVuY3Rpb25Cb2R5OiBmYWxzZSwKLSAgICAgICAgICAg
IGluSXRlcmF0aW9uOiBmYWxzZSwKLSAgICAgICAgICAgIGluU3dpdGNoOiBmYWxzZSwKLSAgICAg
ICAgICAgIGxhc3RDb21tZW50U3RhcnQ6IC0xLAotICAgICAgICAgICAgY3VybHlTdGFjazogW10s
Ci0gICAgICAgICAgICBzb3VyY2VUeXBlOiAnc2NyaXB0JwotICAgICAgICB9OwotICAgICAgICBz
dHJpY3QgPSBmYWxzZTsKLQotICAgICAgICBleHRyYSA9IHt9OwotICAgICAgICBpZiAodHlwZW9m
IG9wdGlvbnMgIT09ICd1bmRlZmluZWQnKSB7Ci0gICAgICAgICAgICBleHRyYS5yYW5nZSA9ICh0
eXBlb2Ygb3B0aW9ucy5yYW5nZSA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLnJhbmdlOwotICAg
ICAgICAgICAgZXh0cmEubG9jID0gKHR5cGVvZiBvcHRpb25zLmxvYyA9PT0gJ2Jvb2xlYW4nKSAm
JiBvcHRpb25zLmxvYzsKLSAgICAgICAgICAgIGV4dHJhLmF0dGFjaENvbW1lbnQgPSAodHlwZW9m
IG9wdGlvbnMuYXR0YWNoQ29tbWVudCA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLmF0dGFjaENv
bW1lbnQ7Ci0KLSAgICAgICAgICAgIGlmIChleHRyYS5sb2MgJiYgb3B0aW9ucy5zb3VyY2UgIT09
IG51bGwgJiYgb3B0aW9ucy5zb3VyY2UgIT09IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgICAg
IGV4dHJhLnNvdXJjZSA9IHRvU3RyaW5nKG9wdGlvbnMuc291cmNlKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRva2VucyA9PT0gJ2Jvb2xlYW4nICYm
IG9wdGlvbnMudG9rZW5zKSB7Ci0gICAgICAgICAgICAgICAgZXh0cmEudG9rZW5zID0gW107Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuY29tbWVudCA9PT0g
J2Jvb2xlYW4nICYmIG9wdGlvbnMuY29tbWVudCkgewotICAgICAgICAgICAgICAgIGV4dHJhLmNv
bW1lbnRzID0gW107Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlv
bnMudG9sZXJhbnQgPT09ICdib29sZWFuJyAmJiBvcHRpb25zLnRvbGVyYW50KSB7Ci0gICAgICAg
ICAgICAgICAgZXh0cmEuZXJyb3JzID0gW107Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAoZXh0cmEuYXR0YWNoQ29tbWVudCkgewotICAgICAgICAgICAgICAgIGV4dHJhLnJhbmdlID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICBleHRyYS5jb21tZW50cyA9IFtdOwotICAgICAgICAgICAg
ICAgIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2sgPSBbXTsKLSAgICAgICAgICAgICAgICBleHRyYS50
cmFpbGluZ0NvbW1lbnRzID0gW107Ci0gICAgICAgICAgICAgICAgZXh0cmEubGVhZGluZ0NvbW1l
bnRzID0gW107Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAob3B0aW9ucy5zb3VyY2VU
eXBlID09PSAnbW9kdWxlJykgewotICAgICAgICAgICAgICAgIC8vIHZlcnkgcmVzdHJpY3RpdmUg
Y29uZGl0aW9uIGZvciBub3cKLSAgICAgICAgICAgICAgICBzdGF0ZS5zb3VyY2VUeXBlID0gb3B0
aW9ucy5zb3VyY2VUeXBlOwotICAgICAgICAgICAgICAgIHN0cmljdCA9IHRydWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgcHJvZ3JhbSA9
IHBhcnNlUHJvZ3JhbSgpOwotICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYS5jb21tZW50cyAh
PT0gJ3VuZGVmaW5lZCcpIHsKLSAgICAgICAgICAgICAgICBwcm9ncmFtLmNvbW1lbnRzID0gZXh0
cmEuY29tbWVudHM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJh
LnRva2VucyAhPT0gJ3VuZGVmaW5lZCcpIHsKLSAgICAgICAgICAgICAgICBmaWx0ZXJUb2tlbkxv
Y2F0aW9uKCk7Ci0gICAgICAgICAgICAgICAgcHJvZ3JhbS50b2tlbnMgPSBleHRyYS50b2tlbnM7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhLmVycm9ycyAhPT0g
J3VuZGVmaW5lZCcpIHsKLSAgICAgICAgICAgICAgICBwcm9ncmFtLmVycm9ycyA9IGV4dHJhLmVy
cm9yczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAg
dGhyb3cgZTsKLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIGV4dHJhID0ge307Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcHJvZ3JhbTsKLSAgICB9Ci0KLSAgICAvLyBTeW5j
IHdpdGggKi5qc29uIG1hbmlmZXN0cy4KLSAgICBleHBvcnRzLnZlcnNpb24gPSAnMi42LjAnOwot
Ci0gICAgZXhwb3J0cy50b2tlbml6ZSA9IHRva2VuaXplOwotCi0gICAgZXhwb3J0cy5wYXJzZSA9
IHBhcnNlOwotCi0gICAgLy8gRGVlcCBjb3B5LgotICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0
ICovCi0gICAgZXhwb3J0cy5TeW50YXggPSAoZnVuY3Rpb24gKCkgewotICAgICAgICB2YXIgbmFt
ZSwgdHlwZXMgPSB7fTsKLQotICAgICAgICBpZiAodHlwZW9mIE9iamVjdC5jcmVhdGUgPT09ICdm
dW5jdGlvbicpIHsKLSAgICAgICAgICAgIHR5cGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGZvciAobmFtZSBpbiBTeW50YXgpIHsKLSAgICAgICAgICAgIGlm
IChTeW50YXguaGFzT3duUHJvcGVydHkobmFtZSkpIHsKLSAgICAgICAgICAgICAgICB0eXBlc1tu
YW1lXSA9IFN5bnRheFtuYW1lXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IGlmICh0eXBlb2YgT2JqZWN0LmZyZWV6ZSA9PT0gJ2Z1bmN0aW9uJykgewotICAgICAgICAgICAg
T2JqZWN0LmZyZWV6ZSh0eXBlcyk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHlwZXM7
Ci0gICAgfSgpKTsKLQotfSkpOworKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZp
bml0aW9uKHJvb3QsIGZhY3RvcnkpIHsKKy8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovCisJaWYo
dHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3Qn
KQorCQltb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTsKKwllbHNlIGlmKHR5cGVvZiBkZWZpbmUg
PT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkKKwkJZGVmaW5lKFtdLCBmYWN0b3J5KTsKKy8q
IGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovCisJZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29i
amVjdCcpCisJCWV4cG9ydHNbImVzcHJpbWEiXSA9IGZhY3RvcnkoKTsKKwllbHNlCisJCXJvb3Rb
ImVzcHJpbWEiXSA9IGZhY3RvcnkoKTsKK30pKHRoaXMsIGZ1bmN0aW9uKCkgeworcmV0dXJuIC8q
KioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXAKKy8qKioqKiov
IAkvLyBUaGUgbW9kdWxlIGNhY2hlCisvKioqKioqLyAJdmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7
fTsKKworLyoqKioqKi8gCS8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uCisvKioqKioqLyAJZnVuY3Rp
b24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkgeworCisvKioqKioqLyAJCS8vIENoZWNr
IGlmIG1vZHVsZSBpcyBpbiBjYWNoZQorLyogaXN0YW5idWwgaWdub3JlIGlmICovCisvKioqKioq
LyAJCWlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKQorLyoqKioqKi8gCQkJcmV0dXJuIGlu
c3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7CisKKy8qKioqKiovIAkJLy8gQ3JlYXRl
IGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSkKKy8qKioqKiovIAkJdmFy
IG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0geworLyoqKioqKi8gCQkJZXhw
b3J0czoge30sCisvKioqKioqLyAJCQlpZDogbW9kdWxlSWQsCisvKioqKioqLyAJCQlsb2FkZWQ6
IGZhbHNlCisvKioqKioqLyAJCX07CisKKy8qKioqKiovIAkJLy8gRXhlY3V0ZSB0aGUgbW9kdWxl
IGZ1bmN0aW9uCisvKioqKioqLyAJCW1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9y
dHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pOworCisvKioq
KioqLyAJCS8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWQKKy8qKioqKiovIAkJbW9kdWxlLmxv
YWRlZCA9IHRydWU7CisKKy8qKioqKiovIAkJLy8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBt
b2R1bGUKKy8qKioqKiovIAkJcmV0dXJuIG1vZHVsZS5leHBvcnRzOworLyoqKioqKi8gCX0KKwor
CisvKioqKioqLyAJLy8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVs
ZXNfXykKKy8qKioqKiovIAlfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzOworCisvKioq
KioqLyAJLy8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGUKKy8qKioqKiovIAlfX3dlYnBhY2tfcmVx
dWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzOworCisvKioqKioqLyAJLy8gX193ZWJwYWNrX3B1
YmxpY19wYXRoX18KKy8qKioqKiovIAlfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSAiIjsKKworLyoq
KioqKi8gCS8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0cworLyoqKioqKi8g
CXJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKDApOworLyoqKioqKi8gfSkKKy8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCisvKioqKioqLyAoWworLyogMCAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBv
cnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKwkvKgorCSAgQ29weXJpZ2h0IEpTIEZvdW5k
YXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycywgaHR0cHM6Ly9qcy5mb3VuZGF0aW9uLworCisJ
ICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKwkgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisJICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKwkgICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisJICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKwkgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisJICAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKworCSAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisJICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisJICBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRQorCSAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxD
T1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWQorCSAgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KwkgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKwkgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorCSAgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKwkgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorCSAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwkqLworCSJ1c2Ug
c3RyaWN0IjsKKwl2YXIgY29tbWVudF9oYW5kbGVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEp
OworCXZhciBwYXJzZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7CisJdmFyIGpzeF9wYXJz
ZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpOworCXZhciB0b2tlbml6ZXJfMSA9IF9fd2Vi
cGFja19yZXF1aXJlX18oMTUpOworCWZ1bmN0aW9uIHBhcnNlKGNvZGUsIG9wdGlvbnMsIGRlbGVn
YXRlKSB7CisJICAgIHZhciBjb21tZW50SGFuZGxlciA9IG51bGw7CisJICAgIHZhciBwcm94eURl
bGVnYXRlID0gZnVuY3Rpb24gKG5vZGUsIG1ldGFkYXRhKSB7CisJICAgICAgICBpZiAoZGVsZWdh
dGUpIHsKKwkgICAgICAgICAgICBkZWxlZ2F0ZShub2RlLCBtZXRhZGF0YSk7CisJICAgICAgICB9
CisJICAgICAgICBpZiAoY29tbWVudEhhbmRsZXIpIHsKKwkgICAgICAgICAgICBjb21tZW50SGFu
ZGxlci52aXNpdChub2RlLCBtZXRhZGF0YSk7CisJICAgICAgICB9CisJICAgIH07CisJICAgIHZh
ciBwYXJzZXJEZWxlZ2F0ZSA9ICh0eXBlb2YgZGVsZWdhdGUgPT09ICdmdW5jdGlvbicpID8gcHJv
eHlEZWxlZ2F0ZSA6IG51bGw7CisJICAgIHZhciBjb2xsZWN0Q29tbWVudCA9IGZhbHNlOworCSAg
ICBpZiAob3B0aW9ucykgeworCSAgICAgICAgY29sbGVjdENvbW1lbnQgPSAodHlwZW9mIG9wdGlv
bnMuY29tbWVudCA9PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMuY29tbWVudCk7CisJICAgICAgICB2
YXIgYXR0YWNoQ29tbWVudCA9ICh0eXBlb2Ygb3B0aW9ucy5hdHRhY2hDb21tZW50ID09PSAnYm9v
bGVhbicgJiYgb3B0aW9ucy5hdHRhY2hDb21tZW50KTsKKwkgICAgICAgIGlmIChjb2xsZWN0Q29t
bWVudCB8fCBhdHRhY2hDb21tZW50KSB7CisJICAgICAgICAgICAgY29tbWVudEhhbmRsZXIgPSBu
ZXcgY29tbWVudF9oYW5kbGVyXzEuQ29tbWVudEhhbmRsZXIoKTsKKwkgICAgICAgICAgICBjb21t
ZW50SGFuZGxlci5hdHRhY2ggPSBhdHRhY2hDb21tZW50OworCSAgICAgICAgICAgIG9wdGlvbnMu
Y29tbWVudCA9IHRydWU7CisJICAgICAgICAgICAgcGFyc2VyRGVsZWdhdGUgPSBwcm94eURlbGVn
YXRlOworCSAgICAgICAgfQorCSAgICB9CisJICAgIHZhciBpc01vZHVsZSA9IGZhbHNlOworCSAg
ICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5zb3VyY2VUeXBlID09PSAnc3RyaW5nJykg
eworCSAgICAgICAgaXNNb2R1bGUgPSAob3B0aW9ucy5zb3VyY2VUeXBlID09PSAnbW9kdWxlJyk7
CisJICAgIH0KKwkgICAgdmFyIHBhcnNlcjsKKwkgICAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9w
dGlvbnMuanN4ID09PSAnYm9vbGVhbicgJiYgb3B0aW9ucy5qc3gpIHsKKwkgICAgICAgIHBhcnNl
ciA9IG5ldyBqc3hfcGFyc2VyXzEuSlNYUGFyc2VyKGNvZGUsIG9wdGlvbnMsIHBhcnNlckRlbGVn
YXRlKTsKKwkgICAgfQorCSAgICBlbHNlIHsKKwkgICAgICAgIHBhcnNlciA9IG5ldyBwYXJzZXJf
MS5QYXJzZXIoY29kZSwgb3B0aW9ucywgcGFyc2VyRGVsZWdhdGUpOworCSAgICB9CisJICAgIHZh
ciBwcm9ncmFtID0gaXNNb2R1bGUgPyBwYXJzZXIucGFyc2VNb2R1bGUoKSA6IHBhcnNlci5wYXJz
ZVNjcmlwdCgpOworCSAgICB2YXIgYXN0ID0gKHByb2dyYW0pOworCSAgICBpZiAoY29sbGVjdENv
bW1lbnQgJiYgY29tbWVudEhhbmRsZXIpIHsKKwkgICAgICAgIGFzdC5jb21tZW50cyA9IGNvbW1l
bnRIYW5kbGVyLmNvbW1lbnRzOworCSAgICB9CisJICAgIGlmIChwYXJzZXIuY29uZmlnLnRva2Vu
cykgeworCSAgICAgICAgYXN0LnRva2VucyA9IHBhcnNlci50b2tlbnM7CisJICAgIH0KKwkgICAg
aWYgKHBhcnNlci5jb25maWcudG9sZXJhbnQpIHsKKwkgICAgICAgIGFzdC5lcnJvcnMgPSBwYXJz
ZXIuZXJyb3JIYW5kbGVyLmVycm9yczsKKwkgICAgfQorCSAgICByZXR1cm4gYXN0OworCX0KKwll
eHBvcnRzLnBhcnNlID0gcGFyc2U7CisJZnVuY3Rpb24gcGFyc2VNb2R1bGUoY29kZSwgb3B0aW9u
cywgZGVsZWdhdGUpIHsKKwkgICAgdmFyIHBhcnNpbmdPcHRpb25zID0gb3B0aW9ucyB8fCB7fTsK
KwkgICAgcGFyc2luZ09wdGlvbnMuc291cmNlVHlwZSA9ICdtb2R1bGUnOworCSAgICByZXR1cm4g
cGFyc2UoY29kZSwgcGFyc2luZ09wdGlvbnMsIGRlbGVnYXRlKTsKKwl9CisJZXhwb3J0cy5wYXJz
ZU1vZHVsZSA9IHBhcnNlTW9kdWxlOworCWZ1bmN0aW9uIHBhcnNlU2NyaXB0KGNvZGUsIG9wdGlv
bnMsIGRlbGVnYXRlKSB7CisJICAgIHZhciBwYXJzaW5nT3B0aW9ucyA9IG9wdGlvbnMgfHwge307
CisJICAgIHBhcnNpbmdPcHRpb25zLnNvdXJjZVR5cGUgPSAnc2NyaXB0JzsKKwkgICAgcmV0dXJu
IHBhcnNlKGNvZGUsIHBhcnNpbmdPcHRpb25zLCBkZWxlZ2F0ZSk7CisJfQorCWV4cG9ydHMucGFy
c2VTY3JpcHQgPSBwYXJzZVNjcmlwdDsKKwlmdW5jdGlvbiB0b2tlbml6ZShjb2RlLCBvcHRpb25z
LCBkZWxlZ2F0ZSkgeworCSAgICB2YXIgdG9rZW5pemVyID0gbmV3IHRva2VuaXplcl8xLlRva2Vu
aXplcihjb2RlLCBvcHRpb25zKTsKKwkgICAgdmFyIHRva2VuczsKKwkgICAgdG9rZW5zID0gW107
CisJICAgIHRyeSB7CisJICAgICAgICB3aGlsZSAodHJ1ZSkgeworCSAgICAgICAgICAgIHZhciB0
b2tlbiA9IHRva2VuaXplci5nZXROZXh0VG9rZW4oKTsKKwkgICAgICAgICAgICBpZiAoIXRva2Vu
KSB7CisJICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAg
ICBpZiAoZGVsZWdhdGUpIHsKKwkgICAgICAgICAgICAgICAgdG9rZW4gPSBkZWxlZ2F0ZSh0b2tl
bik7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTsKKwkg
ICAgICAgIH0KKwkgICAgfQorCSAgICBjYXRjaCAoZSkgeworCSAgICAgICAgdG9rZW5pemVyLmVy
cm9ySGFuZGxlci50b2xlcmF0ZShlKTsKKwkgICAgfQorCSAgICBpZiAodG9rZW5pemVyLmVycm9y
SGFuZGxlci50b2xlcmFudCkgeworCSAgICAgICAgdG9rZW5zLmVycm9ycyA9IHRva2VuaXplci5l
cnJvcnMoKTsKKwkgICAgfQorCSAgICByZXR1cm4gdG9rZW5zOworCX0KKwlleHBvcnRzLnRva2Vu
aXplID0gdG9rZW5pemU7CisJdmFyIHN5bnRheF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTsK
KwlleHBvcnRzLlN5bnRheCA9IHN5bnRheF8xLlN5bnRheDsKKwkvLyBTeW5jIHdpdGggKi5qc29u
IG1hbmlmZXN0cy4KKwlleHBvcnRzLnZlcnNpb24gPSAnNC4wLjAtZGV2JzsKKworCisvKioqLyB9
LAorLyogMSAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7CisKKwkidXNlIHN0cmljdCI7CisJdmFyIHN5bnRheF8xID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygyKTsKKwl2YXIgQ29tbWVudEhhbmRsZXIgPSAoZnVuY3Rpb24gKCkgeworCSAgICBm
dW5jdGlvbiBDb21tZW50SGFuZGxlcigpIHsKKwkgICAgICAgIHRoaXMuYXR0YWNoID0gZmFsc2U7
CisJICAgICAgICB0aGlzLmNvbW1lbnRzID0gW107CisJICAgICAgICB0aGlzLnN0YWNrID0gW107
CisJICAgICAgICB0aGlzLmxlYWRpbmcgPSBbXTsKKwkgICAgICAgIHRoaXMudHJhaWxpbmcgPSBb
XTsKKwkgICAgfQorCSAgICBDb21tZW50SGFuZGxlci5wcm90b3R5cGUuaW5zZXJ0SW5uZXJDb21t
ZW50cyA9IGZ1bmN0aW9uIChub2RlLCBtZXRhZGF0YSkgeworCSAgICAgICAgLy8gIGlubm5lckNv
bW1lbnRzIGZvciBwcm9wZXJ0aWVzIGVtcHR5IGJsb2NrCisJICAgICAgICAvLyAgYGZ1bmN0aW9u
IGEoKSB7LyoqIGNvbW1lbnRzICoqXC99YAorCSAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gc3lu
dGF4XzEuU3ludGF4LkJsb2NrU3RhdGVtZW50ICYmIG5vZGUuYm9keS5sZW5ndGggPT09IDApIHsK
KwkgICAgICAgICAgICB2YXIgaW5uZXJDb21tZW50cyA9IFtdOworCSAgICAgICAgICAgIGZvciAo
dmFyIGkgPSB0aGlzLmxlYWRpbmcubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKKwkgICAgICAg
ICAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5sZWFkaW5nW2ldOworCSAgICAgICAgICAgICAgICBp
ZiAobWV0YWRhdGEuZW5kLm9mZnNldCA+PSBlbnRyeS5zdGFydCkgeworCSAgICAgICAgICAgICAg
ICAgICAgaW5uZXJDb21tZW50cy51bnNoaWZ0KGVudHJ5LmNvbW1lbnQpOworCSAgICAgICAgICAg
ICAgICAgICAgdGhpcy5sZWFkaW5nLnNwbGljZShpLCAxKTsKKwkgICAgICAgICAgICAgICAgICAg
IHRoaXMudHJhaWxpbmcuc3BsaWNlKGksIDEpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAg
ICAgICAgfQorCSAgICAgICAgICAgIGlmIChpbm5lckNvbW1lbnRzLmxlbmd0aCkgeworCSAgICAg
ICAgICAgICAgICBub2RlLmlubmVyQ29tbWVudHMgPSBpbm5lckNvbW1lbnRzOworCSAgICAgICAg
ICAgIH0KKwkgICAgICAgIH0KKwkgICAgfTsKKwkgICAgQ29tbWVudEhhbmRsZXIucHJvdG90eXBl
LmZpbmRUcmFpbGluZ0NvbW1lbnRzID0gZnVuY3Rpb24gKG1ldGFkYXRhKSB7CisJICAgICAgICB2
YXIgdHJhaWxpbmdDb21tZW50cyA9IFtdOworCSAgICAgICAgaWYgKHRoaXMudHJhaWxpbmcubGVu
Z3RoID4gMCkgeworCSAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyYWlsaW5nLmxlbmd0
aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisJICAgICAgICAgICAgICAgIHZhciBlbnRyeV8xID0gdGhp
cy50cmFpbGluZ1tpXTsKKwkgICAgICAgICAgICAgICAgaWYgKGVudHJ5XzEuc3RhcnQgPj0gbWV0
YWRhdGEuZW5kLm9mZnNldCkgeworCSAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50
cy51bnNoaWZ0KGVudHJ5XzEuY29tbWVudCk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAg
ICAgICB9CisJICAgICAgICAgICAgdGhpcy50cmFpbGluZy5sZW5ndGggPSAwOworCSAgICAgICAg
ICAgIHJldHVybiB0cmFpbGluZ0NvbW1lbnRzOworCSAgICAgICAgfQorCSAgICAgICAgdmFyIGVu
dHJ5ID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOworCSAgICAgICAgaWYgKGVu
dHJ5ICYmIGVudHJ5Lm5vZGUudHJhaWxpbmdDb21tZW50cykgeworCSAgICAgICAgICAgIHZhciBm
aXJzdENvbW1lbnQgPSBlbnRyeS5ub2RlLnRyYWlsaW5nQ29tbWVudHNbMF07CisJICAgICAgICAg
ICAgaWYgKGZpcnN0Q29tbWVudCAmJiBmaXJzdENvbW1lbnQucmFuZ2VbMF0gPj0gbWV0YWRhdGEu
ZW5kLm9mZnNldCkgeworCSAgICAgICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzID0gZW50cnku
bm9kZS50cmFpbGluZ0NvbW1lbnRzOworCSAgICAgICAgICAgICAgICBkZWxldGUgZW50cnkubm9k
ZS50cmFpbGluZ0NvbW1lbnRzOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAg
IHJldHVybiB0cmFpbGluZ0NvbW1lbnRzOworCSAgICB9OworCSAgICBDb21tZW50SGFuZGxlci5w
cm90b3R5cGUuZmluZExlYWRpbmdDb21tZW50cyA9IGZ1bmN0aW9uIChtZXRhZGF0YSkgeworCSAg
ICAgICAgdmFyIGxlYWRpbmdDb21tZW50cyA9IFtdOworCSAgICAgICAgdmFyIHRhcmdldDsKKwkg
ICAgICAgIHdoaWxlICh0aGlzLnN0YWNrLmxlbmd0aCA+IDApIHsKKwkgICAgICAgICAgICB2YXIg
ZW50cnkgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CisJICAgICAgICAgICAg
aWYgKGVudHJ5ICYmIGVudHJ5LnN0YXJ0ID49IG1ldGFkYXRhLnN0YXJ0Lm9mZnNldCkgeworCSAg
ICAgICAgICAgICAgICB0YXJnZXQgPSBlbnRyeS5ub2RlOworCSAgICAgICAgICAgICAgICB0aGlz
LnN0YWNrLnBvcCgpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIHsKKwkgICAg
ICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAg
aWYgKHRhcmdldCkgeworCSAgICAgICAgICAgIHZhciBjb3VudCA9IHRhcmdldC5sZWFkaW5nQ29t
bWVudHMgPyB0YXJnZXQubGVhZGluZ0NvbW1lbnRzLmxlbmd0aCA6IDA7CisJICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IGNvdW50IC0gMTsgaSA+PSAwOyAtLWkpIHsKKwkgICAgICAgICAgICAgICAg
dmFyIGNvbW1lbnQgPSB0YXJnZXQubGVhZGluZ0NvbW1lbnRzW2ldOworCSAgICAgICAgICAgICAg
ICBpZiAoY29tbWVudC5yYW5nZVsxXSA8PSBtZXRhZGF0YS5zdGFydC5vZmZzZXQpIHsKKwkgICAg
ICAgICAgICAgICAgICAgIGxlYWRpbmdDb21tZW50cy51bnNoaWZ0KGNvbW1lbnQpOworCSAgICAg
ICAgICAgICAgICAgICAgdGFyZ2V0LmxlYWRpbmdDb21tZW50cy5zcGxpY2UoaSwgMSk7CisJICAg
ICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgaWYgKHRhcmdldC5s
ZWFkaW5nQ29tbWVudHMgJiYgdGFyZ2V0LmxlYWRpbmdDb21tZW50cy5sZW5ndGggPT09IDApIHsK
KwkgICAgICAgICAgICAgICAgZGVsZXRlIHRhcmdldC5sZWFkaW5nQ29tbWVudHM7CisJICAgICAg
ICAgICAgfQorCSAgICAgICAgICAgIHJldHVybiBsZWFkaW5nQ29tbWVudHM7CisJICAgICAgICB9
CisJICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5sZWFkaW5nLmxlbmd0aCAtIDE7IGkgPj0gMDsg
LS1pKSB7CisJICAgICAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5sZWFkaW5nW2ldOworCSAgICAg
ICAgICAgIGlmIChlbnRyeS5zdGFydCA8PSBtZXRhZGF0YS5zdGFydC5vZmZzZXQpIHsKKwkgICAg
ICAgICAgICAgICAgbGVhZGluZ0NvbW1lbnRzLnVuc2hpZnQoZW50cnkuY29tbWVudCk7CisJICAg
ICAgICAgICAgICAgIHRoaXMubGVhZGluZy5zcGxpY2UoaSwgMSk7CisJICAgICAgICAgICAgfQor
CSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIGxlYWRpbmdDb21tZW50czsKKwkgICAgfTsKKwkg
ICAgQ29tbWVudEhhbmRsZXIucHJvdG90eXBlLnZpc2l0Tm9kZSA9IGZ1bmN0aW9uIChub2RlLCBt
ZXRhZGF0YSkgeworCSAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LlBy
b2dyYW0gJiYgbm9kZS5ib2R5Lmxlbmd0aCA+IDApIHsKKwkgICAgICAgICAgICByZXR1cm47CisJ
ICAgICAgICB9CisJICAgICAgICB0aGlzLmluc2VydElubmVyQ29tbWVudHMobm9kZSwgbWV0YWRh
dGEpOworCSAgICAgICAgdmFyIHRyYWlsaW5nQ29tbWVudHMgPSB0aGlzLmZpbmRUcmFpbGluZ0Nv
bW1lbnRzKG1ldGFkYXRhKTsKKwkgICAgICAgIHZhciBsZWFkaW5nQ29tbWVudHMgPSB0aGlzLmZp
bmRMZWFkaW5nQ29tbWVudHMobWV0YWRhdGEpOworCSAgICAgICAgaWYgKGxlYWRpbmdDb21tZW50
cy5sZW5ndGggPiAwKSB7CisJICAgICAgICAgICAgbm9kZS5sZWFkaW5nQ29tbWVudHMgPSBsZWFk
aW5nQ29tbWVudHM7CisJICAgICAgICB9CisJICAgICAgICBpZiAodHJhaWxpbmdDb21tZW50cy5s
ZW5ndGggPiAwKSB7CisJICAgICAgICAgICAgbm9kZS50cmFpbGluZ0NvbW1lbnRzID0gdHJhaWxp
bmdDb21tZW50czsKKwkgICAgICAgIH0KKwkgICAgICAgIHRoaXMuc3RhY2sucHVzaCh7CisJICAg
ICAgICAgICAgbm9kZTogbm9kZSwKKwkgICAgICAgICAgICBzdGFydDogbWV0YWRhdGEuc3RhcnQu
b2Zmc2V0CisJICAgICAgICB9KTsKKwkgICAgfTsKKwkgICAgQ29tbWVudEhhbmRsZXIucHJvdG90
eXBlLnZpc2l0Q29tbWVudCA9IGZ1bmN0aW9uIChub2RlLCBtZXRhZGF0YSkgeworCSAgICAgICAg
dmFyIHR5cGUgPSAobm9kZS50eXBlWzBdID09PSAnTCcpID8gJ0xpbmUnIDogJ0Jsb2NrJzsKKwkg
ICAgICAgIHZhciBjb21tZW50ID0geworCSAgICAgICAgICAgIHR5cGU6IHR5cGUsCisJICAgICAg
ICAgICAgdmFsdWU6IG5vZGUudmFsdWUKKwkgICAgICAgIH07CisJICAgICAgICBpZiAobm9kZS5y
YW5nZSkgeworCSAgICAgICAgICAgIGNvbW1lbnQucmFuZ2UgPSBub2RlLnJhbmdlOworCSAgICAg
ICAgfQorCSAgICAgICAgaWYgKG5vZGUubG9jKSB7CisJICAgICAgICAgICAgY29tbWVudC5sb2Mg
PSBub2RlLmxvYzsKKwkgICAgICAgIH0KKwkgICAgICAgIHRoaXMuY29tbWVudHMucHVzaChjb21t
ZW50KTsKKwkgICAgICAgIGlmICh0aGlzLmF0dGFjaCkgeworCSAgICAgICAgICAgIHZhciBlbnRy
eSA9IHsKKwkgICAgICAgICAgICAgICAgY29tbWVudDogeworCSAgICAgICAgICAgICAgICAgICAg
dHlwZTogdHlwZSwKKwkgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBub2RlLnZhbHVlLAorCSAg
ICAgICAgICAgICAgICAgICAgcmFuZ2U6IFttZXRhZGF0YS5zdGFydC5vZmZzZXQsIG1ldGFkYXRh
LmVuZC5vZmZzZXRdCisJICAgICAgICAgICAgICAgIH0sCisJICAgICAgICAgICAgICAgIHN0YXJ0
OiBtZXRhZGF0YS5zdGFydC5vZmZzZXQKKwkgICAgICAgICAgICB9OworCSAgICAgICAgICAgIGlm
IChub2RlLmxvYykgeworCSAgICAgICAgICAgICAgICBlbnRyeS5jb21tZW50LmxvYyA9IG5vZGUu
bG9jOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBub2RlLnR5cGUgPSB0eXBlOworCSAg
ICAgICAgICAgIHRoaXMubGVhZGluZy5wdXNoKGVudHJ5KTsKKwkgICAgICAgICAgICB0aGlzLnRy
YWlsaW5nLnB1c2goZW50cnkpOworCSAgICAgICAgfQorCSAgICB9OworCSAgICBDb21tZW50SGFu
ZGxlci5wcm90b3R5cGUudmlzaXQgPSBmdW5jdGlvbiAobm9kZSwgbWV0YWRhdGEpIHsKKwkgICAg
ICAgIGlmIChub2RlLnR5cGUgPT09ICdMaW5lQ29tbWVudCcpIHsKKwkgICAgICAgICAgICB0aGlz
LnZpc2l0Q29tbWVudChub2RlLCBtZXRhZGF0YSk7CisJICAgICAgICB9CisJICAgICAgICBlbHNl
IGlmIChub2RlLnR5cGUgPT09ICdCbG9ja0NvbW1lbnQnKSB7CisJICAgICAgICAgICAgdGhpcy52
aXNpdENvbW1lbnQobm9kZSwgbWV0YWRhdGEpOworCSAgICAgICAgfQorCSAgICAgICAgZWxzZSBp
ZiAodGhpcy5hdHRhY2gpIHsKKwkgICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLCBtZXRh
ZGF0YSk7CisJICAgICAgICB9CisJICAgIH07CisJICAgIHJldHVybiBDb21tZW50SGFuZGxlcjsK
Kwl9KCkpOworCWV4cG9ydHMuQ29tbWVudEhhbmRsZXIgPSBDb21tZW50SGFuZGxlcjsKKworCisv
KioqLyB9LAorLyogMiAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CisKKwki
dXNlIHN0cmljdCI7CisJZXhwb3J0cy5TeW50YXggPSB7CisJICAgIEFzc2lnbm1lbnRFeHByZXNz
aW9uOiAnQXNzaWdubWVudEV4cHJlc3Npb24nLAorCSAgICBBc3NpZ25tZW50UGF0dGVybjogJ0Fz
c2lnbm1lbnRQYXR0ZXJuJywKKwkgICAgQXJyYXlFeHByZXNzaW9uOiAnQXJyYXlFeHByZXNzaW9u
JywKKwkgICAgQXJyYXlQYXR0ZXJuOiAnQXJyYXlQYXR0ZXJuJywKKwkgICAgQXJyb3dGdW5jdGlv
bkV4cHJlc3Npb246ICdBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbicsCisJICAgIEF3YWl0RXhwcmVz
c2lvbjogJ0F3YWl0RXhwcmVzc2lvbicsCisJICAgIEJsb2NrU3RhdGVtZW50OiAnQmxvY2tTdGF0
ZW1lbnQnLAorCSAgICBCaW5hcnlFeHByZXNzaW9uOiAnQmluYXJ5RXhwcmVzc2lvbicsCisJICAg
IEJyZWFrU3RhdGVtZW50OiAnQnJlYWtTdGF0ZW1lbnQnLAorCSAgICBDYWxsRXhwcmVzc2lvbjog
J0NhbGxFeHByZXNzaW9uJywKKwkgICAgQ2F0Y2hDbGF1c2U6ICdDYXRjaENsYXVzZScsCisJICAg
IENsYXNzQm9keTogJ0NsYXNzQm9keScsCisJICAgIENsYXNzRGVjbGFyYXRpb246ICdDbGFzc0Rl
Y2xhcmF0aW9uJywKKwkgICAgQ2xhc3NFeHByZXNzaW9uOiAnQ2xhc3NFeHByZXNzaW9uJywKKwkg
ICAgQ29uZGl0aW9uYWxFeHByZXNzaW9uOiAnQ29uZGl0aW9uYWxFeHByZXNzaW9uJywKKwkgICAg
Q29udGludWVTdGF0ZW1lbnQ6ICdDb250aW51ZVN0YXRlbWVudCcsCisJICAgIERvV2hpbGVTdGF0
ZW1lbnQ6ICdEb1doaWxlU3RhdGVtZW50JywKKwkgICAgRGVidWdnZXJTdGF0ZW1lbnQ6ICdEZWJ1
Z2dlclN0YXRlbWVudCcsCisJICAgIEVtcHR5U3RhdGVtZW50OiAnRW1wdHlTdGF0ZW1lbnQnLAor
CSAgICBFeHBvcnRBbGxEZWNsYXJhdGlvbjogJ0V4cG9ydEFsbERlY2xhcmF0aW9uJywKKwkgICAg
RXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uOiAnRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uJywKKwkg
ICAgRXhwb3J0TmFtZWREZWNsYXJhdGlvbjogJ0V4cG9ydE5hbWVkRGVjbGFyYXRpb24nLAorCSAg
ICBFeHBvcnRTcGVjaWZpZXI6ICdFeHBvcnRTcGVjaWZpZXInLAorCSAgICBFeHByZXNzaW9uU3Rh
dGVtZW50OiAnRXhwcmVzc2lvblN0YXRlbWVudCcsCisJICAgIEZvclN0YXRlbWVudDogJ0ZvclN0
YXRlbWVudCcsCisJICAgIEZvck9mU3RhdGVtZW50OiAnRm9yT2ZTdGF0ZW1lbnQnLAorCSAgICBG
b3JJblN0YXRlbWVudDogJ0ZvckluU3RhdGVtZW50JywKKwkgICAgRnVuY3Rpb25EZWNsYXJhdGlv
bjogJ0Z1bmN0aW9uRGVjbGFyYXRpb24nLAorCSAgICBGdW5jdGlvbkV4cHJlc3Npb246ICdGdW5j
dGlvbkV4cHJlc3Npb24nLAorCSAgICBJZGVudGlmaWVyOiAnSWRlbnRpZmllcicsCisJICAgIElm
U3RhdGVtZW50OiAnSWZTdGF0ZW1lbnQnLAorCSAgICBJbXBvcnREZWNsYXJhdGlvbjogJ0ltcG9y
dERlY2xhcmF0aW9uJywKKwkgICAgSW1wb3J0RGVmYXVsdFNwZWNpZmllcjogJ0ltcG9ydERlZmF1
bHRTcGVjaWZpZXInLAorCSAgICBJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXI6ICdJbXBvcnROYW1l
c3BhY2VTcGVjaWZpZXInLAorCSAgICBJbXBvcnRTcGVjaWZpZXI6ICdJbXBvcnRTcGVjaWZpZXIn
LAorCSAgICBMaXRlcmFsOiAnTGl0ZXJhbCcsCisJICAgIExhYmVsZWRTdGF0ZW1lbnQ6ICdMYWJl
bGVkU3RhdGVtZW50JywKKwkgICAgTG9naWNhbEV4cHJlc3Npb246ICdMb2dpY2FsRXhwcmVzc2lv
bicsCisJICAgIE1lbWJlckV4cHJlc3Npb246ICdNZW1iZXJFeHByZXNzaW9uJywKKwkgICAgTWV0
YVByb3BlcnR5OiAnTWV0YVByb3BlcnR5JywKKwkgICAgTWV0aG9kRGVmaW5pdGlvbjogJ01ldGhv
ZERlZmluaXRpb24nLAorCSAgICBOZXdFeHByZXNzaW9uOiAnTmV3RXhwcmVzc2lvbicsCisJICAg
IE9iamVjdEV4cHJlc3Npb246ICdPYmplY3RFeHByZXNzaW9uJywKKwkgICAgT2JqZWN0UGF0dGVy
bjogJ09iamVjdFBhdHRlcm4nLAorCSAgICBQcm9ncmFtOiAnUHJvZ3JhbScsCisJICAgIFByb3Bl
cnR5OiAnUHJvcGVydHknLAorCSAgICBSZXN0RWxlbWVudDogJ1Jlc3RFbGVtZW50JywKKwkgICAg
UmV0dXJuU3RhdGVtZW50OiAnUmV0dXJuU3RhdGVtZW50JywKKwkgICAgU2VxdWVuY2VFeHByZXNz
aW9uOiAnU2VxdWVuY2VFeHByZXNzaW9uJywKKwkgICAgU3ByZWFkRWxlbWVudDogJ1NwcmVhZEVs
ZW1lbnQnLAorCSAgICBTdXBlcjogJ1N1cGVyJywKKwkgICAgU3dpdGNoQ2FzZTogJ1N3aXRjaENh
c2UnLAorCSAgICBTd2l0Y2hTdGF0ZW1lbnQ6ICdTd2l0Y2hTdGF0ZW1lbnQnLAorCSAgICBUYWdn
ZWRUZW1wbGF0ZUV4cHJlc3Npb246ICdUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24nLAorCSAgICBU
ZW1wbGF0ZUVsZW1lbnQ6ICdUZW1wbGF0ZUVsZW1lbnQnLAorCSAgICBUZW1wbGF0ZUxpdGVyYWw6
ICdUZW1wbGF0ZUxpdGVyYWwnLAorCSAgICBUaGlzRXhwcmVzc2lvbjogJ1RoaXNFeHByZXNzaW9u
JywKKwkgICAgVGhyb3dTdGF0ZW1lbnQ6ICdUaHJvd1N0YXRlbWVudCcsCisJICAgIFRyeVN0YXRl
bWVudDogJ1RyeVN0YXRlbWVudCcsCisJICAgIFVuYXJ5RXhwcmVzc2lvbjogJ1VuYXJ5RXhwcmVz
c2lvbicsCisJICAgIFVwZGF0ZUV4cHJlc3Npb246ICdVcGRhdGVFeHByZXNzaW9uJywKKwkgICAg
VmFyaWFibGVEZWNsYXJhdGlvbjogJ1ZhcmlhYmxlRGVjbGFyYXRpb24nLAorCSAgICBWYXJpYWJs
ZURlY2xhcmF0b3I6ICdWYXJpYWJsZURlY2xhcmF0b3InLAorCSAgICBXaGlsZVN0YXRlbWVudDog
J1doaWxlU3RhdGVtZW50JywKKwkgICAgV2l0aFN0YXRlbWVudDogJ1dpdGhTdGF0ZW1lbnQnLAor
CSAgICBZaWVsZEV4cHJlc3Npb246ICdZaWVsZEV4cHJlc3Npb24nCisJfTsKKworCisvKioqLyB9
LAorLyogMyAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7CisKKwkidXNlIHN0cmljdCI7CisJdmFyIGFzc2VydF8xID0gX193ZWJwYWNrX3Jl
cXVpcmVfXyg0KTsKKwl2YXIgbWVzc2FnZXNfMSA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7CisJ
dmFyIGVycm9yX2hhbmRsZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oNik7CisJdmFyIHRva2Vu
XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpOworCXZhciBzY2FubmVyXzEgPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKDgpOworCXZhciBzeW50YXhfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMik7CisJ
dmFyIE5vZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTsKKwl2YXIgQXJyb3dQYXJhbWV0ZXJQ
bGFjZUhvbGRlciA9ICdBcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVyJzsKKwl2YXIgUGFyc2VyID0g
KGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gUGFyc2VyKGNvZGUsIG9wdGlvbnMsIGRlbGVn
YXRlKSB7CisJICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsg
fQorCSAgICAgICAgdGhpcy5jb25maWcgPSB7CisJICAgICAgICAgICAgcmFuZ2U6ICh0eXBlb2Yg
b3B0aW9ucy5yYW5nZSA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLnJhbmdlLAorCSAgICAgICAg
ICAgIGxvYzogKHR5cGVvZiBvcHRpb25zLmxvYyA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLmxv
YywKKwkgICAgICAgICAgICBzb3VyY2U6IG51bGwsCisJICAgICAgICAgICAgdG9rZW5zOiAodHlw
ZW9mIG9wdGlvbnMudG9rZW5zID09PSAnYm9vbGVhbicpICYmIG9wdGlvbnMudG9rZW5zLAorCSAg
ICAgICAgICAgIGNvbW1lbnQ6ICh0eXBlb2Ygb3B0aW9ucy5jb21tZW50ID09PSAnYm9vbGVhbicp
ICYmIG9wdGlvbnMuY29tbWVudCwKKwkgICAgICAgICAgICB0b2xlcmFudDogKHR5cGVvZiBvcHRp
b25zLnRvbGVyYW50ID09PSAnYm9vbGVhbicpICYmIG9wdGlvbnMudG9sZXJhbnQKKwkgICAgICAg
IH07CisJICAgICAgICBpZiAodGhpcy5jb25maWcubG9jICYmIG9wdGlvbnMuc291cmNlICYmIG9w
dGlvbnMuc291cmNlICE9PSBudWxsKSB7CisJICAgICAgICAgICAgdGhpcy5jb25maWcuc291cmNl
ID0gU3RyaW5nKG9wdGlvbnMuc291cmNlKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHRoaXMuZGVs
ZWdhdGUgPSBkZWxlZ2F0ZTsKKwkgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyID0gbmV3IGVycm9y
X2hhbmRsZXJfMS5FcnJvckhhbmRsZXIoKTsKKwkgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyLnRv
bGVyYW50ID0gdGhpcy5jb25maWcudG9sZXJhbnQ7CisJICAgICAgICB0aGlzLnNjYW5uZXIgPSBu
ZXcgc2Nhbm5lcl8xLlNjYW5uZXIoY29kZSwgdGhpcy5lcnJvckhhbmRsZXIpOworCSAgICAgICAg
dGhpcy5zY2FubmVyLnRyYWNrQ29tbWVudCA9IHRoaXMuY29uZmlnLmNvbW1lbnQ7CisJICAgICAg
ICB0aGlzLm9wZXJhdG9yUHJlY2VkZW5jZSA9IHsKKwkgICAgICAgICAgICAnKSc6IDAsCisJICAg
ICAgICAgICAgJzsnOiAwLAorCSAgICAgICAgICAgICcsJzogMCwKKwkgICAgICAgICAgICAnPSc6
IDAsCisJICAgICAgICAgICAgJ10nOiAwLAorCSAgICAgICAgICAgICd8fCc6IDEsCisJICAgICAg
ICAgICAgJyYmJzogMiwKKwkgICAgICAgICAgICAnfCc6IDMsCisJICAgICAgICAgICAgJ14nOiA0
LAorCSAgICAgICAgICAgICcmJzogNSwKKwkgICAgICAgICAgICAnPT0nOiA2LAorCSAgICAgICAg
ICAgICchPSc6IDYsCisJICAgICAgICAgICAgJz09PSc6IDYsCisJICAgICAgICAgICAgJyE9PSc6
IDYsCisJICAgICAgICAgICAgJzwnOiA3LAorCSAgICAgICAgICAgICc+JzogNywKKwkgICAgICAg
ICAgICAnPD0nOiA3LAorCSAgICAgICAgICAgICc+PSc6IDcsCisJICAgICAgICAgICAgJzw8Jzog
OCwKKwkgICAgICAgICAgICAnPj4nOiA4LAorCSAgICAgICAgICAgICc+Pj4nOiA4LAorCSAgICAg
ICAgICAgICcrJzogOSwKKwkgICAgICAgICAgICAnLSc6IDksCisJICAgICAgICAgICAgJyonOiAx
MSwKKwkgICAgICAgICAgICAnLyc6IDExLAorCSAgICAgICAgICAgICclJzogMTEKKwkgICAgICAg
IH07CisJICAgICAgICB0aGlzLmxvb2thaGVhZCA9IG51bGw7CisJICAgICAgICB0aGlzLmhhc0xp
bmVUZXJtaW5hdG9yID0gZmFsc2U7CisJICAgICAgICB0aGlzLmNvbnRleHQgPSB7CisJICAgICAg
ICAgICAgaXNNb2R1bGU6IGZhbHNlLAorCSAgICAgICAgICAgIGF3YWl0OiBmYWxzZSwKKwkgICAg
ICAgICAgICBhbGxvd0luOiB0cnVlLAorCSAgICAgICAgICAgIGFsbG93WWllbGQ6IHRydWUsCisJ
ICAgICAgICAgICAgZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yOiBudWxsLAorCSAgICAg
ICAgICAgIGlzQXNzaWdubWVudFRhcmdldDogZmFsc2UsCisJICAgICAgICAgICAgaXNCaW5kaW5n
RWxlbWVudDogZmFsc2UsCisJICAgICAgICAgICAgaW5GdW5jdGlvbkJvZHk6IGZhbHNlLAorCSAg
ICAgICAgICAgIGluSXRlcmF0aW9uOiBmYWxzZSwKKwkgICAgICAgICAgICBpblN3aXRjaDogZmFs
c2UsCisJICAgICAgICAgICAgbGFiZWxTZXQ6IHt9LAorCSAgICAgICAgICAgIHN0cmljdDogZmFs
c2UKKwkgICAgICAgIH07CisJICAgICAgICB0aGlzLnRva2VucyA9IFtdOworCSAgICAgICAgdGhp
cy5zdGFydE1hcmtlciA9IHsKKwkgICAgICAgICAgICBpbmRleDogMCwKKwkgICAgICAgICAgICBs
aW5lTnVtYmVyOiB0aGlzLnNjYW5uZXIubGluZU51bWJlciwKKwkgICAgICAgICAgICBsaW5lU3Rh
cnQ6IDAKKwkgICAgICAgIH07CisJICAgICAgICB0aGlzLmxhc3RNYXJrZXIgPSB7CisJICAgICAg
ICAgICAgaW5kZXg6IDAsCisJICAgICAgICAgICAgbGluZU51bWJlcjogdGhpcy5zY2FubmVyLmxp
bmVOdW1iZXIsCisJICAgICAgICAgICAgbGluZVN0YXJ0OiAwCisJICAgICAgICB9OworCSAgICAg
ICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgIHRoaXMubGFzdE1hcmtlciA9IHsKKwkgICAg
ICAgICAgICBpbmRleDogdGhpcy5zY2FubmVyLmluZGV4LAorCSAgICAgICAgICAgIGxpbmVOdW1i
ZXI6IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLAorCSAgICAgICAgICAgIGxpbmVTdGFydDogdGhp
cy5zY2FubmVyLmxpbmVTdGFydAorCSAgICAgICAgfTsKKwkgICAgfQorCSAgICBQYXJzZXIucHJv
dG90eXBlLnRocm93RXJyb3IgPSBmdW5jdGlvbiAobWVzc2FnZUZvcm1hdCkgeworCSAgICAgICAg
dmFyIHZhbHVlcyA9IFtdOworCSAgICAgICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50
cy5sZW5ndGg7IF9pKyspIHsKKwkgICAgICAgICAgICB2YWx1ZXNbX2kgLSAxXSA9IGFyZ3VtZW50
c1tfaV07CisJICAgICAgICB9CisJICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5z
bGljZS5jYWxsKGFyZ3VtZW50cywgMSk7CisJICAgICAgICB2YXIgbXNnID0gbWVzc2FnZUZvcm1h
dC5yZXBsYWNlKC8lKFxkKS9nLCBmdW5jdGlvbiAod2hvbGUsIGlkeCkgeworCSAgICAgICAgICAg
IGFzc2VydF8xLmFzc2VydChpZHggPCBhcmdzLmxlbmd0aCwgJ01lc3NhZ2UgcmVmZXJlbmNlIG11
c3QgYmUgaW4gcmFuZ2UnKTsKKwkgICAgICAgICAgICByZXR1cm4gYXJnc1tpZHhdOworCSAgICAg
ICAgfSk7CisJICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmxhc3RNYXJrZXIuaW5kZXg7CisJICAg
ICAgICB2YXIgbGluZSA9IHRoaXMubGFzdE1hcmtlci5saW5lTnVtYmVyOworCSAgICAgICAgdmFy
IGNvbHVtbiA9IHRoaXMubGFzdE1hcmtlci5pbmRleCAtIHRoaXMubGFzdE1hcmtlci5saW5lU3Rh
cnQgKyAxOworCSAgICAgICAgdGhyb3cgdGhpcy5lcnJvckhhbmRsZXIuY3JlYXRlRXJyb3IoaW5k
ZXgsIGxpbmUsIGNvbHVtbiwgbXNnKTsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS50
b2xlcmF0ZUVycm9yID0gZnVuY3Rpb24gKG1lc3NhZ2VGb3JtYXQpIHsKKwkgICAgICAgIHZhciB2
YWx1ZXMgPSBbXTsKKwkgICAgICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVu
Z3RoOyBfaSsrKSB7CisJICAgICAgICAgICAgdmFsdWVzW19pIC0gMV0gPSBhcmd1bWVudHNbX2ld
OworCSAgICAgICAgfQorCSAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2Uu
Y2FsbChhcmd1bWVudHMsIDEpOworCSAgICAgICAgdmFyIG1zZyA9IG1lc3NhZ2VGb3JtYXQucmVw
bGFjZSgvJShcZCkvZywgZnVuY3Rpb24gKHdob2xlLCBpZHgpIHsKKwkgICAgICAgICAgICBhc3Nl
cnRfMS5hc3NlcnQoaWR4IDwgYXJncy5sZW5ndGgsICdNZXNzYWdlIHJlZmVyZW5jZSBtdXN0IGJl
IGluIHJhbmdlJyk7CisJICAgICAgICAgICAgcmV0dXJuIGFyZ3NbaWR4XTsKKwkgICAgICAgIH0p
OworCSAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5sYXN0TWFya2VyLmluZGV4OworCSAgICAgICAg
dmFyIGxpbmUgPSB0aGlzLnNjYW5uZXIubGluZU51bWJlcjsKKwkgICAgICAgIHZhciBjb2x1bW4g
PSB0aGlzLmxhc3RNYXJrZXIuaW5kZXggLSB0aGlzLmxhc3RNYXJrZXIubGluZVN0YXJ0ICsgMTsK
KwkgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyLnRvbGVyYXRlRXJyb3IoaW5kZXgsIGxpbmUsIGNv
bHVtbiwgbXNnKTsKKwkgICAgfTsKKwkgICAgLy8gVGhyb3cgYW4gZXhjZXB0aW9uIGJlY2F1c2Ug
b2YgdGhlIHRva2VuLgorCSAgICBQYXJzZXIucHJvdG90eXBlLnVuZXhwZWN0ZWRUb2tlbkVycm9y
ID0gZnVuY3Rpb24gKHRva2VuLCBtZXNzYWdlKSB7CisJICAgICAgICB2YXIgbXNnID0gbWVzc2Fn
ZSB8fCBtZXNzYWdlc18xLk1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbjsKKwkgICAgICAgIHZhciB2
YWx1ZTsKKwkgICAgICAgIGlmICh0b2tlbikgeworCSAgICAgICAgICAgIGlmICghbWVzc2FnZSkg
eworCSAgICAgICAgICAgICAgICBtc2cgPSAodG9rZW4udHlwZSA9PT0gdG9rZW5fMS5Ub2tlbi5F
T0YpID8gbWVzc2FnZXNfMS5NZXNzYWdlcy5VbmV4cGVjdGVkRU9TIDoKKwkgICAgICAgICAgICAg
ICAgICAgICh0b2tlbi50eXBlID09PSB0b2tlbl8xLlRva2VuLklkZW50aWZpZXIpID8gbWVzc2Fn
ZXNfMS5NZXNzYWdlcy5VbmV4cGVjdGVkSWRlbnRpZmllciA6CisJICAgICAgICAgICAgICAgICAg
ICAgICAgKHRva2VuLnR5cGUgPT09IHRva2VuXzEuVG9rZW4uTnVtZXJpY0xpdGVyYWwpID8gbWVz
c2FnZXNfMS5NZXNzYWdlcy5VbmV4cGVjdGVkTnVtYmVyIDoKKwkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHRva2VuLnR5cGUgPT09IHRva2VuXzEuVG9rZW4uU3RyaW5nTGl0ZXJhbCkgPyBt
ZXNzYWdlc18xLk1lc3NhZ2VzLlVuZXhwZWN0ZWRTdHJpbmcgOgorCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHRva2VuLnR5cGUgPT09IHRva2VuXzEuVG9rZW4uVGVtcGxhdGUpID8g
bWVzc2FnZXNfMS5NZXNzYWdlcy5VbmV4cGVjdGVkVGVtcGxhdGUgOgorCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5leHBlY3RlZFRva2Vu
OworCSAgICAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gdG9rZW5fMS5Ub2tlbi5LZXl3
b3JkKSB7CisJICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zY2FubmVyLmlzRnV0dXJlUmVz
ZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworCSAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9
IG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5leHBlY3RlZFJlc2VydmVkOworCSAgICAgICAgICAgICAg
ICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5jb250ZXh0LnN0cmlj
dCAmJiB0aGlzLnNjYW5uZXIuaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkg
eworCSAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3Ry
aWN0UmVzZXJ2ZWRXb3JkOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAg
ICB9CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIHZhbHVlID0gKHRva2VuLnR5cGUgPT09
IHRva2VuXzEuVG9rZW4uVGVtcGxhdGUpID8gdG9rZW4udmFsdWUucmF3IDogdG9rZW4udmFsdWU7
CisJICAgICAgICB9CisJICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICB2YWx1ZSA9ICdJTExF
R0FMJzsKKwkgICAgICAgIH0KKwkgICAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKCclMCcsIHZhbHVl
KTsKKwkgICAgICAgIGlmICh0b2tlbiAmJiB0eXBlb2YgdG9rZW4ubGluZU51bWJlciA9PT0gJ251
bWJlcicpIHsKKwkgICAgICAgICAgICB2YXIgaW5kZXggPSB0b2tlbi5zdGFydDsKKwkgICAgICAg
ICAgICB2YXIgbGluZSA9IHRva2VuLmxpbmVOdW1iZXI7CisJICAgICAgICAgICAgdmFyIGNvbHVt
biA9IHRva2VuLnN0YXJ0IC0gdGhpcy5sYXN0TWFya2VyLmxpbmVTdGFydCArIDE7CisJICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLmNyZWF0ZUVycm9yKGluZGV4LCBsaW5lLCBj
b2x1bW4sIG1zZyk7CisJICAgICAgICB9CisJICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICB2
YXIgaW5kZXggPSB0aGlzLmxhc3RNYXJrZXIuaW5kZXg7CisJICAgICAgICAgICAgdmFyIGxpbmUg
PSB0aGlzLmxhc3RNYXJrZXIubGluZU51bWJlcjsKKwkgICAgICAgICAgICB2YXIgY29sdW1uID0g
aW5kZXggLSB0aGlzLmxhc3RNYXJrZXIubGluZVN0YXJ0ICsgMTsKKwkgICAgICAgICAgICByZXR1
cm4gdGhpcy5lcnJvckhhbmRsZXIuY3JlYXRlRXJyb3IoaW5kZXgsIGxpbmUsIGNvbHVtbiwgbXNn
KTsKKwkgICAgICAgIH0KKwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS50aHJvd1VuZXhw
ZWN0ZWRUb2tlbiA9IGZ1bmN0aW9uICh0b2tlbiwgbWVzc2FnZSkgeworCSAgICAgICAgdGhyb3cg
dGhpcy51bmV4cGVjdGVkVG9rZW5FcnJvcih0b2tlbiwgbWVzc2FnZSk7CisJICAgIH07CisJICAg
IFBhcnNlci5wcm90b3R5cGUudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4gPSBmdW5jdGlvbiAodG9r
ZW4sIG1lc3NhZ2UpIHsKKwkgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyLnRvbGVyYXRlKHRoaXMu
dW5leHBlY3RlZFRva2VuRXJyb3IodG9rZW4sIG1lc3NhZ2UpKTsKKwkgICAgfTsKKwkgICAgUGFy
c2VyLnByb3RvdHlwZS5jb2xsZWN0Q29tbWVudHMgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICBp
ZiAoIXRoaXMuY29uZmlnLmNvbW1lbnQpIHsKKwkgICAgICAgICAgICB0aGlzLnNjYW5uZXIuc2Nh
bkNvbW1lbnRzKCk7CisJICAgICAgICB9CisJICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICB2
YXIgY29tbWVudHMgPSB0aGlzLnNjYW5uZXIuc2NhbkNvbW1lbnRzKCk7CisJICAgICAgICAgICAg
aWYgKGNvbW1lbnRzLmxlbmd0aCA+IDAgJiYgdGhpcy5kZWxlZ2F0ZSkgeworCSAgICAgICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbW1lbnRzLmxlbmd0aDsgKytpKSB7CisJICAgICAg
ICAgICAgICAgICAgICB2YXIgZSA9IGNvbW1lbnRzW2ldOworCSAgICAgICAgICAgICAgICAgICAg
dmFyIG5vZGUgPSB2b2lkIDA7CisJICAgICAgICAgICAgICAgICAgICBub2RlID0geworCSAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGU6IGUubXVsdGlMaW5lID8gJ0Jsb2NrQ29tbWVudCcgOiAn
TGluZUNvbW1lbnQnLAorCSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNjYW5u
ZXIuc291cmNlLnNsaWNlKGUuc2xpY2VbMF0sIGUuc2xpY2VbMV0pCisJICAgICAgICAgICAgICAg
ICAgICB9OworCSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLnJhbmdlKSB7CisJ
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5yYW5nZSA9IGUucmFuZ2U7CisJICAgICAgICAg
ICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25maWcubG9jKSB7
CisJICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5sb2MgPSBlLmxvYzsKKwkgICAgICAgICAg
ICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgIHZhciBtZXRhZGF0YSA9IHsKKwkgICAg
ICAgICAgICAgICAgICAgICAgICBzdGFydDogeworCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5lOiBlLmxvYy5zdGFydC5saW5lLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b2x1bW46IGUubG9jLnN0YXJ0LmNvbHVtbiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b2Zmc2V0OiBlLnJhbmdlWzBdCisJICAgICAgICAgICAgICAgICAgICAgICAgfSwKKwkgICAgICAg
ICAgICAgICAgICAgICAgICBlbmQ6IHsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlu
ZTogZS5sb2MuZW5kLmxpbmUsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjog
ZS5sb2MuZW5kLmNvbHVtbiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBl
LnJhbmdlWzFdCisJICAgICAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAg
ICAgfTsKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUobm9kZSwgbWV0YWRhdGEp
OworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICB9
OworCSAgICAvLyBGcm9tIGludGVybmFsIHJlcHJlc2VudGF0aW9uIHRvIGFuIGV4dGVybmFsIHN0
cnVjdHVyZQorCSAgICBQYXJzZXIucHJvdG90eXBlLmdldFRva2VuUmF3ID0gZnVuY3Rpb24gKHRv
a2VuKSB7CisJICAgICAgICByZXR1cm4gdGhpcy5zY2FubmVyLnNvdXJjZS5zbGljZSh0b2tlbi5z
dGFydCwgdG9rZW4uZW5kKTsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5jb252ZXJ0
VG9rZW4gPSBmdW5jdGlvbiAodG9rZW4pIHsKKwkgICAgICAgIHZhciB0OworCSAgICAgICAgdCA9
IHsKKwkgICAgICAgICAgICB0eXBlOiB0b2tlbl8xLlRva2VuTmFtZVt0b2tlbi50eXBlXSwKKwkg
ICAgICAgICAgICB2YWx1ZTogdGhpcy5nZXRUb2tlblJhdyh0b2tlbikKKwkgICAgICAgIH07CisJ
ICAgICAgICBpZiAodGhpcy5jb25maWcucmFuZ2UpIHsKKwkgICAgICAgICAgICB0LnJhbmdlID0g
W3Rva2VuLnN0YXJ0LCB0b2tlbi5lbmRdOworCSAgICAgICAgfQorCSAgICAgICAgaWYgKHRoaXMu
Y29uZmlnLmxvYykgeworCSAgICAgICAgICAgIHQubG9jID0geworCSAgICAgICAgICAgICAgICBz
dGFydDogeworCSAgICAgICAgICAgICAgICAgICAgbGluZTogdGhpcy5zdGFydE1hcmtlci5saW5l
TnVtYmVyLAorCSAgICAgICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLnN0YXJ0TWFya2VyLmlu
ZGV4IC0gdGhpcy5zdGFydE1hcmtlci5saW5lU3RhcnQKKwkgICAgICAgICAgICAgICAgfSwKKwkg
ICAgICAgICAgICAgICAgZW5kOiB7CisJICAgICAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLnNj
YW5uZXIubGluZU51bWJlciwKKwkgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5zY2Fu
bmVyLmluZGV4IC0gdGhpcy5zY2FubmVyLmxpbmVTdGFydAorCSAgICAgICAgICAgICAgICB9CisJ
ICAgICAgICAgICAgfTsKKwkgICAgICAgIH0KKwkgICAgICAgIGlmICh0b2tlbi5yZWdleCkgewor
CSAgICAgICAgICAgIHQucmVnZXggPSB0b2tlbi5yZWdleDsKKwkgICAgICAgIH0KKwkgICAgICAg
IHJldHVybiB0OworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLm5leHRUb2tlbiA9IGZ1
bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubG9va2FoZWFkOworCSAgICAg
ICAgdGhpcy5sYXN0TWFya2VyLmluZGV4ID0gdGhpcy5zY2FubmVyLmluZGV4OworCSAgICAgICAg
dGhpcy5sYXN0TWFya2VyLmxpbmVOdW1iZXIgPSB0aGlzLnNjYW5uZXIubGluZU51bWJlcjsKKwkg
ICAgICAgIHRoaXMubGFzdE1hcmtlci5saW5lU3RhcnQgPSB0aGlzLnNjYW5uZXIubGluZVN0YXJ0
OworCSAgICAgICAgdGhpcy5jb2xsZWN0Q29tbWVudHMoKTsKKwkgICAgICAgIHRoaXMuc3RhcnRN
YXJrZXIuaW5kZXggPSB0aGlzLnNjYW5uZXIuaW5kZXg7CisJICAgICAgICB0aGlzLnN0YXJ0TWFy
a2VyLmxpbmVOdW1iZXIgPSB0aGlzLnNjYW5uZXIubGluZU51bWJlcjsKKwkgICAgICAgIHRoaXMu
c3RhcnRNYXJrZXIubGluZVN0YXJ0ID0gdGhpcy5zY2FubmVyLmxpbmVTdGFydDsKKwkgICAgICAg
IHZhciBuZXh0OworCSAgICAgICAgbmV4dCA9IHRoaXMuc2Nhbm5lci5sZXgoKTsKKwkgICAgICAg
IHRoaXMuaGFzTGluZVRlcm1pbmF0b3IgPSAodG9rZW4gJiYgbmV4dCkgPyAodG9rZW4ubGluZU51
bWJlciAhPT0gbmV4dC5saW5lTnVtYmVyKSA6IGZhbHNlOworCSAgICAgICAgaWYgKG5leHQgJiYg
dGhpcy5jb250ZXh0LnN0cmljdCAmJiBuZXh0LnR5cGUgPT09IHRva2VuXzEuVG9rZW4uSWRlbnRp
ZmllcikgeworCSAgICAgICAgICAgIGlmICh0aGlzLnNjYW5uZXIuaXNTdHJpY3RNb2RlUmVzZXJ2
ZWRXb3JkKG5leHQudmFsdWUpKSB7CisJICAgICAgICAgICAgICAgIG5leHQudHlwZSA9IHRva2Vu
XzEuVG9rZW4uS2V5d29yZDsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICB0
aGlzLmxvb2thaGVhZCA9IG5leHQ7CisJICAgICAgICBpZiAodGhpcy5jb25maWcudG9rZW5zICYm
IG5leHQudHlwZSAhPT0gdG9rZW5fMS5Ub2tlbi5FT0YpIHsKKwkgICAgICAgICAgICB0aGlzLnRv
a2Vucy5wdXNoKHRoaXMuY29udmVydFRva2VuKG5leHQpKTsKKwkgICAgICAgIH0KKwkgICAgICAg
IHJldHVybiB0b2tlbjsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5uZXh0UmVnZXhU
b2tlbiA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHRoaXMuY29sbGVjdENvbW1lbnRzKCk7CisJ
ICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLnNjYW5uZXIuc2NhblJlZ0V4cCgpOworCSAgICAgICAg
aWYgKHRoaXMuY29uZmlnLnRva2VucykgeworCSAgICAgICAgICAgIC8vIFBvcCB0aGUgcHJldmlv
dXMgdG9rZW4sICcvJyBvciAnLz0nCisJICAgICAgICAgICAgLy8gVGhpcyBpcyBhZGRlZCBmcm9t
IHRoZSBsb29rYWhlYWQgdG9rZW4uCisJICAgICAgICAgICAgdGhpcy50b2tlbnMucG9wKCk7CisJ
ICAgICAgICAgICAgdGhpcy50b2tlbnMucHVzaCh0aGlzLmNvbnZlcnRUb2tlbih0b2tlbikpOwor
CSAgICAgICAgfQorCSAgICAgICAgLy8gUHJpbWUgdGhlIG5leHQgbG9va2FoZWFkLgorCSAgICAg
ICAgdGhpcy5sb29rYWhlYWQgPSB0b2tlbjsKKwkgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJ
ICAgICAgICByZXR1cm4gdG9rZW47CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUuY3Jl
YXRlTm9kZSA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHJldHVybiB7CisJICAgICAgICAgICAg
aW5kZXg6IHRoaXMuc3RhcnRNYXJrZXIuaW5kZXgsCisJICAgICAgICAgICAgbGluZTogdGhpcy5z
dGFydE1hcmtlci5saW5lTnVtYmVyLAorCSAgICAgICAgICAgIGNvbHVtbjogdGhpcy5zdGFydE1h
cmtlci5pbmRleCAtIHRoaXMuc3RhcnRNYXJrZXIubGluZVN0YXJ0CisJICAgICAgICB9OworCSAg
ICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnN0YXJ0Tm9kZSA9IGZ1bmN0aW9uICh0b2tlbikg
eworCSAgICAgICAgcmV0dXJuIHsKKwkgICAgICAgICAgICBpbmRleDogdG9rZW4uc3RhcnQsCisJ
ICAgICAgICAgICAgbGluZTogdG9rZW4ubGluZU51bWJlciwKKwkgICAgICAgICAgICBjb2x1bW46
IHRva2VuLnN0YXJ0IC0gdG9rZW4ubGluZVN0YXJ0CisJICAgICAgICB9OworCSAgICB9OworCSAg
ICBQYXJzZXIucHJvdG90eXBlLmZpbmFsaXplID0gZnVuY3Rpb24gKG1ldGEsIG5vZGUpIHsKKwkg
ICAgICAgIGlmICh0aGlzLmNvbmZpZy5yYW5nZSkgeworCSAgICAgICAgICAgIG5vZGUucmFuZ2Ug
PSBbbWV0YS5pbmRleCwgdGhpcy5sYXN0TWFya2VyLmluZGV4XTsKKwkgICAgICAgIH0KKwkgICAg
ICAgIGlmICh0aGlzLmNvbmZpZy5sb2MpIHsKKwkgICAgICAgICAgICBub2RlLmxvYyA9IHsKKwkg
ICAgICAgICAgICAgICAgc3RhcnQ6IHsKKwkgICAgICAgICAgICAgICAgICAgIGxpbmU6IG1ldGEu
bGluZSwKKwkgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogbWV0YS5jb2x1bW4KKwkgICAgICAg
ICAgICAgICAgfSwKKwkgICAgICAgICAgICAgICAgZW5kOiB7CisJICAgICAgICAgICAgICAgICAg
ICBsaW5lOiB0aGlzLmxhc3RNYXJrZXIubGluZU51bWJlciwKKwkgICAgICAgICAgICAgICAgICAg
IGNvbHVtbjogdGhpcy5sYXN0TWFya2VyLmluZGV4IC0gdGhpcy5sYXN0TWFya2VyLmxpbmVTdGFy
dAorCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfTsKKwkgICAgICAgICAgICBpZiAo
dGhpcy5jb25maWcuc291cmNlKSB7CisJICAgICAgICAgICAgICAgIG5vZGUubG9jLnNvdXJjZSA9
IHRoaXMuY29uZmlnLnNvdXJjZTsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAg
ICBpZiAodGhpcy5kZWxlZ2F0ZSkgeworCSAgICAgICAgICAgIHZhciBtZXRhZGF0YSA9IHsKKwkg
ICAgICAgICAgICAgICAgc3RhcnQ6IHsKKwkgICAgICAgICAgICAgICAgICAgIGxpbmU6IG1ldGEu
bGluZSwKKwkgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogbWV0YS5jb2x1bW4sCisJICAgICAg
ICAgICAgICAgICAgICBvZmZzZXQ6IG1ldGEuaW5kZXgKKwkgICAgICAgICAgICAgICAgfSwKKwkg
ICAgICAgICAgICAgICAgZW5kOiB7CisJICAgICAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLmxh
c3RNYXJrZXIubGluZU51bWJlciwKKwkgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5s
YXN0TWFya2VyLmluZGV4IC0gdGhpcy5sYXN0TWFya2VyLmxpbmVTdGFydCwKKwkgICAgICAgICAg
ICAgICAgICAgIG9mZnNldDogdGhpcy5sYXN0TWFya2VyLmluZGV4CisJICAgICAgICAgICAgICAg
IH0KKwkgICAgICAgICAgICB9OworCSAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUobm9kZSwgbWV0
YWRhdGEpOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIG5vZGU7CisJICAgIH07CisJICAg
IC8vIEV4cGVjdCB0aGUgbmV4dCB0b2tlbiB0byBtYXRjaCB0aGUgc3BlY2lmaWVkIHB1bmN0dWF0
b3IuCisJICAgIC8vIElmIG5vdCwgYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLgorCSAgICBQ
YXJzZXIucHJvdG90eXBlLmV4cGVjdCA9IGZ1bmN0aW9uICh2YWx1ZSkgeworCSAgICAgICAgdmFy
IHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgIGlmICh0b2tlbi50eXBlICE9PSB0
b2tlbl8xLlRva2VuLlB1bmN0dWF0b3IgfHwgdG9rZW4udmFsdWUgIT09IHZhbHVlKSB7CisJICAg
ICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbik7CisJICAgICAgICB9CisJ
ICAgIH07CisJICAgIC8vIFF1aWV0bHkgZXhwZWN0IGEgY29tbWEgd2hlbiBpbiB0b2xlcmFudCBt
b2RlLCBvdGhlcndpc2UgZGVsZWdhdGVzIHRvIGV4cGVjdCgpLgorCSAgICBQYXJzZXIucHJvdG90
eXBlLmV4cGVjdENvbW1hU2VwYXJhdG9yID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgaWYgKHRo
aXMuY29uZmlnLnRvbGVyYW50KSB7CisJICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5sb29r
YWhlYWQ7CisJICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IHRva2VuXzEuVG9rZW4uUHVu
Y3R1YXRvciAmJiB0b2tlbi52YWx1ZSA9PT0gJywnKSB7CisJICAgICAgICAgICAgICAgIHRoaXMu
bmV4dFRva2VuKCk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYgKHRva2Vu
LnR5cGUgPT09IHRva2VuXzEuVG9rZW4uUHVuY3R1YXRvciAmJiB0b2tlbi52YWx1ZSA9PT0gJzsn
KSB7CisJICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICAgICAgICAg
IHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4pOworCSAgICAgICAgICAgIH0KKwkg
ICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0
ZWRUb2tlbih0b2tlbiwgbWVzc2FnZXNfMS5NZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4pOworCSAg
ICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgIHRo
aXMuZXhwZWN0KCcsJyk7CisJICAgICAgICB9CisJICAgIH07CisJICAgIC8vIEV4cGVjdCB0aGUg
bmV4dCB0b2tlbiB0byBtYXRjaCB0aGUgc3BlY2lmaWVkIGtleXdvcmQuCisJICAgIC8vIElmIG5v
dCwgYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLgorCSAgICBQYXJzZXIucHJvdG90eXBlLmV4
cGVjdEtleXdvcmQgPSBmdW5jdGlvbiAoa2V5d29yZCkgeworCSAgICAgICAgdmFyIHRva2VuID0g
dGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgIGlmICh0b2tlbi50eXBlICE9PSB0b2tlbl8xLlRv
a2VuLktleXdvcmQgfHwgdG9rZW4udmFsdWUgIT09IGtleXdvcmQpIHsKKwkgICAgICAgICAgICB0
aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRva2VuKTsKKwkgICAgICAgIH0KKwkgICAgfTsKKwkg
ICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVk
IHB1bmN0dWF0b3IuCisJICAgIFBhcnNlci5wcm90b3R5cGUubWF0Y2ggPSBmdW5jdGlvbiAodmFs
dWUpIHsKKwkgICAgICAgIHJldHVybiB0aGlzLmxvb2thaGVhZC50eXBlID09PSB0b2tlbl8xLlRv
a2VuLlB1bmN0dWF0b3IgJiYgdGhpcy5sb29rYWhlYWQudmFsdWUgPT09IHZhbHVlOworCSAgICB9
OworCSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgbmV4dCB0b2tlbiBtYXRjaGVzIHRoZSBzcGVj
aWZpZWQga2V5d29yZAorCSAgICBQYXJzZXIucHJvdG90eXBlLm1hdGNoS2V5d29yZCA9IGZ1bmN0
aW9uIChrZXl3b3JkKSB7CisJICAgICAgICByZXR1cm4gdGhpcy5sb29rYWhlYWQudHlwZSA9PT0g
dG9rZW5fMS5Ub2tlbi5LZXl3b3JkICYmIHRoaXMubG9va2FoZWFkLnZhbHVlID09PSBrZXl3b3Jk
OworCSAgICB9OworCSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgbmV4dCB0b2tlbiBtYXRjaGVz
IHRoZSBzcGVjaWZpZWQgY29udGV4dHVhbCBrZXl3b3JkCisJICAgIC8vICh3aGVyZSBhbiBpZGVu
dGlmaWVyIGlzIHNvbWV0aW1lcyBhIGtleXdvcmQgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0KQor
CSAgICBQYXJzZXIucHJvdG90eXBlLm1hdGNoQ29udGV4dHVhbEtleXdvcmQgPSBmdW5jdGlvbiAo
a2V5d29yZCkgeworCSAgICAgICAgcmV0dXJuIHRoaXMubG9va2FoZWFkLnR5cGUgPT09IHRva2Vu
XzEuVG9rZW4uSWRlbnRpZmllciAmJiB0aGlzLmxvb2thaGVhZC52YWx1ZSA9PT0ga2V5d29yZDsK
KwkgICAgfTsKKwkgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gaXMgYW4gYXNz
aWdubWVudCBvcGVyYXRvcgorCSAgICBQYXJzZXIucHJvdG90eXBlLm1hdGNoQXNzaWduID0gZnVu
Y3Rpb24gKCkgeworCSAgICAgICAgaWYgKHRoaXMubG9va2FoZWFkLnR5cGUgIT09IHRva2VuXzEu
VG9rZW4uUHVuY3R1YXRvcikgeworCSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwkgICAgICAg
IH0KKwkgICAgICAgIHZhciBvcCA9IHRoaXMubG9va2FoZWFkLnZhbHVlOworCSAgICAgICAgcmV0
dXJuIG9wID09PSAnPScgfHwKKwkgICAgICAgICAgICBvcCA9PT0gJyo9JyB8fAorCSAgICAgICAg
ICAgIG9wID09PSAnKio9JyB8fAorCSAgICAgICAgICAgIG9wID09PSAnLz0nIHx8CisJICAgICAg
ICAgICAgb3AgPT09ICclPScgfHwKKwkgICAgICAgICAgICBvcCA9PT0gJys9JyB8fAorCSAgICAg
ICAgICAgIG9wID09PSAnLT0nIHx8CisJICAgICAgICAgICAgb3AgPT09ICc8PD0nIHx8CisJICAg
ICAgICAgICAgb3AgPT09ICc+Pj0nIHx8CisJICAgICAgICAgICAgb3AgPT09ICc+Pj49JyB8fAor
CSAgICAgICAgICAgIG9wID09PSAnJj0nIHx8CisJICAgICAgICAgICAgb3AgPT09ICdePScgfHwK
KwkgICAgICAgICAgICBvcCA9PT0gJ3w9JzsKKwkgICAgfTsKKwkgICAgLy8gQ292ZXIgZ3JhbW1h
ciBzdXBwb3J0LgorCSAgICAvLworCSAgICAvLyBXaGVuIGFuIGFzc2lnbm1lbnQgZXhwcmVzc2lv
biBwb3NpdGlvbiBzdGFydHMgd2l0aCBhbiBsZWZ0IHBhcmVudGhlc2lzLCB0aGUgZGV0ZXJtaW5h
dGlvbiBvZiB0aGUgdHlwZQorCSAgICAvLyBvZiB0aGUgc3ludGF4IGlzIHRvIGJlIGRlZmVycmVk
IGFyYml0cmFyaWx5IGxvbmcgdW50aWwgdGhlIGVuZCBvZiB0aGUgcGFyZW50aGVzZXMgcGFpciAo
cGx1cyBhIGxvb2thaGVhZCkKKwkgICAgLy8gb3IgdGhlIGZpcnN0IGNvbW1hLiBUaGlzIHNpdHVh
dGlvbiBhbHNvIGRlZmVycyB0aGUgZGV0ZXJtaW5hdGlvbiBvZiBhbGwgdGhlIGV4cHJlc3Npb25z
IG5lc3RlZCBpbiB0aGUgcGFpci4KKwkgICAgLy8KKwkgICAgLy8gVGhlcmUgYXJlIHRocmVlIHBy
b2R1Y3Rpb25zIHRoYXQgY2FuIGJlIHBhcnNlZCBpbiBhIHBhcmVudGhlc2VzIHBhaXIgdGhhdCBu
ZWVkcyB0byBiZSBkZXRlcm1pbmVkCisJICAgIC8vIGFmdGVyIHRoZSBvdXRlcm1vc3QgcGFpciBp
cyBjbG9zZWQuIFRoZXkgYXJlOgorCSAgICAvLworCSAgICAvLyAgIDEuIEFzc2lnbm1lbnRFeHBy
ZXNzaW9uCisJICAgIC8vICAgMi4gQmluZGluZ0VsZW1lbnRzCisJICAgIC8vICAgMy4gQXNzaWdu
bWVudFRhcmdldHMKKwkgICAgLy8KKwkgICAgLy8gSW4gb3JkZXIgdG8gYXZvaWQgZXhwb25lbnRp
YWwgYmFja3RyYWNraW5nLCB3ZSB1c2UgdHdvIGZsYWdzIHRvIGRlbm90ZSBpZiB0aGUgcHJvZHVj
dGlvbiBjYW4gYmUKKwkgICAgLy8gYmluZGluZyBlbGVtZW50IG9yIGFzc2lnbm1lbnQgdGFyZ2V0
LgorCSAgICAvLworCSAgICAvLyBUaGUgdGhyZWUgcHJvZHVjdGlvbnMgaGF2ZSB0aGUgcmVsYXRp
b25zaGlwOgorCSAgICAvLworCSAgICAvLyAgIEJpbmRpbmdFbGVtZW50cyDiioYgQXNzaWdubWVu
dFRhcmdldHMg4oqGIEFzc2lnbm1lbnRFeHByZXNzaW9uCisJICAgIC8vCisJICAgIC8vIHdpdGgg
YSBzaW5nbGUgZXhjZXB0aW9uIHRoYXQgQ292ZXJJbml0aWFsaXplZE5hbWUgd2hlbiB1c2VkIGRp
cmVjdGx5IGluIGFuIEV4cHJlc3Npb24sIGdlbmVyYXRlcworCSAgICAvLyBhbiBlYXJseSBlcnJv
ci4gVGhlcmVmb3JlLCB3ZSBuZWVkIHRoZSB0aGlyZCBzdGF0ZSwgZmlyc3RDb3ZlckluaXRpYWxp
emVkTmFtZUVycm9yLCB0byB0cmFjayB0aGUKKwkgICAgLy8gZmlyc3QgdXNhZ2Ugb2YgQ292ZXJJ
bml0aWFsaXplZE5hbWUgYW5kIHJlcG9ydCBpdCB3aGVuIHdlIHJlYWNoZWQgdGhlIGVuZCBvZiB0
aGUgcGFyZW50aGVzZXMgcGFpci4KKwkgICAgLy8KKwkgICAgLy8gaXNvbGF0ZUNvdmVyR3JhbW1h
ciBmdW5jdGlvbiBydW5zIHRoZSBnaXZlbiBwYXJzZXIgZnVuY3Rpb24gd2l0aCBhIG5ldyBjb3Zl
ciBncmFtbWFyIGNvbnRleHQsIGFuZCBpdCBkb2VzIG5vdAorCSAgICAvLyBlZmZlY3QgdGhlIGN1
cnJlbnQgZmxhZ3MuIFRoaXMgbWVhbnMgdGhlIHByb2R1Y3Rpb24gdGhlIHBhcnNlciBwYXJzZXMg
aXMgb25seSB1c2VkIGFzIGFuIGV4cHJlc3Npb24uIFRoZXJlZm9yZQorCSAgICAvLyB0aGUgQ292
ZXJJbml0aWFsaXplZE5hbWUgY2hlY2sgaXMgY29uZHVjdGVkLgorCSAgICAvLworCSAgICAvLyBp
bmhlcml0Q292ZXJHcmFtbWFyIGZ1bmN0aW9uIHJ1bnMgdGhlIGdpdmVuIHBhcnNlIGZ1bmN0aW9u
IHdpdGggYSBuZXcgY292ZXIgZ3JhbW1hciBjb250ZXh0LCBhbmQgaXQgcHJvcGFnYXRlcworCSAg
ICAvLyB0aGUgZmxhZ3Mgb3V0c2lkZSBvZiB0aGUgcGFyc2VyLiBUaGlzIG1lYW5zIHRoZSBwcm9k
dWN0aW9uIHRoZSBwYXJzZXIgcGFyc2VzIGlzIHVzZWQgYXMgYSBwYXJ0IG9mIGEgcG90ZW50aWFs
CisJICAgIC8vIHBhdHRlcm4uIFRoZSBDb3ZlckluaXRpYWxpemVkTmFtZSBjaGVjayBpcyBkZWZl
cnJlZC4KKwkgICAgUGFyc2VyLnByb3RvdHlwZS5pc29sYXRlQ292ZXJHcmFtbWFyID0gZnVuY3Rp
b24gKHBhcnNlRnVuY3Rpb24pIHsKKwkgICAgICAgIHZhciBwcmV2aW91c0lzQmluZGluZ0VsZW1l
bnQgPSB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudDsKKwkgICAgICAgIHZhciBwcmV2aW91
c0lzQXNzaWdubWVudFRhcmdldCA9IHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQ7CisJ
ICAgICAgICB2YXIgcHJldmlvdXNGaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSB0aGlz
LmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yOworCSAgICAgICAgdGhpcy5j
b250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSB0cnVlOworCSAgICAgICAgdGhpcy5jb250ZXh0Lmlz
QXNzaWdubWVudFRhcmdldCA9IHRydWU7CisJICAgICAgICB0aGlzLmNvbnRleHQuZmlyc3RDb3Zl
ckluaXRpYWxpemVkTmFtZUVycm9yID0gbnVsbDsKKwkgICAgICAgIHZhciByZXN1bHQgPSBwYXJz
ZUZ1bmN0aW9uLmNhbGwodGhpcyk7CisJICAgICAgICBpZiAodGhpcy5jb250ZXh0LmZpcnN0Q292
ZXJJbml0aWFsaXplZE5hbWVFcnJvciAhPT0gbnVsbCkgeworCSAgICAgICAgICAgIHRoaXMudGhy
b3dVbmV4cGVjdGVkVG9rZW4odGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVF
cnJvcik7CisJICAgICAgICB9CisJICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVu
dCA9IHByZXZpb3VzSXNCaW5kaW5nRWxlbWVudDsKKwkgICAgICAgIHRoaXMuY29udGV4dC5pc0Fz
c2lnbm1lbnRUYXJnZXQgPSBwcmV2aW91c0lzQXNzaWdubWVudFRhcmdldDsKKwkgICAgICAgIHRo
aXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSBwcmV2aW91c0ZpcnN0
Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvcjsKKwkgICAgICAgIHJldHVybiByZXN1bHQ7CisJICAg
IH07CisJICAgIFBhcnNlci5wcm90b3R5cGUuaW5oZXJpdENvdmVyR3JhbW1hciA9IGZ1bmN0aW9u
IChwYXJzZUZ1bmN0aW9uKSB7CisJICAgICAgICB2YXIgcHJldmlvdXNJc0JpbmRpbmdFbGVtZW50
ID0gdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ7CisJICAgICAgICB2YXIgcHJldmlvdXNJ
c0Fzc2lnbm1lbnRUYXJnZXQgPSB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0OworCSAg
ICAgICAgdmFyIHByZXZpb3VzRmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gdGhpcy5j
b250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvcjsKKwkgICAgICAgIHRoaXMuY29u
dGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gdHJ1ZTsKKwkgICAgICAgIHRoaXMuY29udGV4dC5pc0Fz
c2lnbm1lbnRUYXJnZXQgPSB0cnVlOworCSAgICAgICAgdGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJ
bml0aWFsaXplZE5hbWVFcnJvciA9IG51bGw7CisJICAgICAgICB2YXIgcmVzdWx0ID0gcGFyc2VG
dW5jdGlvbi5jYWxsKHRoaXMpOworCSAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1l
bnQgPSB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCAmJiBwcmV2aW91c0lzQmluZGluZ0Vs
ZW1lbnQ7CisJICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gdGhpcy5j
b250ZXh0LmlzQXNzaWdubWVudFRhcmdldCAmJiBwcmV2aW91c0lzQXNzaWdubWVudFRhcmdldDsK
KwkgICAgICAgIHRoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSBw
cmV2aW91c0ZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciB8fCB0aGlzLmNvbnRleHQuZmly
c3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yOworCSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKwkg
ICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5jb25zdW1lU2VtaWNvbG9uID0gZnVuY3Rpb24g
KCkgeworCSAgICAgICAgaWYgKHRoaXMubWF0Y2goJzsnKSkgeworCSAgICAgICAgICAgIHRoaXMu
bmV4dFRva2VuKCk7CisJICAgICAgICB9CisJICAgICAgICBlbHNlIGlmICghdGhpcy5oYXNMaW5l
VGVybWluYXRvcikgeworCSAgICAgICAgICAgIGlmICh0aGlzLmxvb2thaGVhZC50eXBlICE9PSB0
b2tlbl8xLlRva2VuLkVPRiAmJiAhdGhpcy5tYXRjaCgnfScpKSB7CisJICAgICAgICAgICAgICAg
IHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpOworCSAgICAgICAgICAg
IH0KKwkgICAgICAgICAgICB0aGlzLmxhc3RNYXJrZXIuaW5kZXggPSB0aGlzLnN0YXJ0TWFya2Vy
LmluZGV4OworCSAgICAgICAgICAgIHRoaXMubGFzdE1hcmtlci5saW5lTnVtYmVyID0gdGhpcy5z
dGFydE1hcmtlci5saW5lTnVtYmVyOworCSAgICAgICAgICAgIHRoaXMubGFzdE1hcmtlci5saW5l
U3RhcnQgPSB0aGlzLnN0YXJ0TWFya2VyLmxpbmVTdGFydDsKKwkgICAgICAgIH0KKwkgICAgfTsK
KwkgICAgLy8gRUNNQS0yNjIgMTIuMiBQcmltYXJ5IEV4cHJlc3Npb25zCisJICAgIFBhcnNlci5w
cm90b3R5cGUucGFyc2VQcmltYXJ5RXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAg
IHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICB2YXIgZXhwcjsKKwkgICAg
ICAgIHZhciB2YWx1ZSwgdG9rZW4sIHJhdzsKKwkgICAgICAgIHN3aXRjaCAodGhpcy5sb29rYWhl
YWQudHlwZSkgeworCSAgICAgICAgICAgIGNhc2UgdG9rZW5fMS5Ub2tlbi5JZGVudGlmaWVyOgor
CSAgICAgICAgICAgICAgICBpZiAoKHRoaXMuY29udGV4dC5pc01vZHVsZSB8fCB0aGlzLmNvbnRl
eHQuYXdhaXQpICYmIHRoaXMubG9va2FoZWFkLnZhbHVlID09PSAnYXdhaXQnKSB7CisJICAgICAg
ICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFk
KTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBleHByID0gdGhpcy5tYXRj
aEFzeW5jRnVuY3Rpb24oKSA/IHRoaXMucGFyc2VGdW5jdGlvbkV4cHJlc3Npb24oKSA6IHRoaXMu
ZmluYWxpemUobm9kZSwgbmV3IE5vZGUuSWRlbnRpZmllcih0aGlzLm5leHRUb2tlbigpLnZhbHVl
KSk7CisJICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIGNhc2UgdG9rZW5fMS5U
b2tlbi5OdW1lcmljTGl0ZXJhbDoKKwkgICAgICAgICAgICBjYXNlIHRva2VuXzEuVG9rZW4uU3Ry
aW5nTGl0ZXJhbDoKKwkgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QgJiYg
dGhpcy5sb29rYWhlYWQub2N0YWwpIHsKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJh
dGVVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQsIG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3Ry
aWN0T2N0YWxMaXRlcmFsKTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICB0
aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7CisJICAgICAgICAgICAgICAg
IHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7CisJICAgICAgICAgICAgICAg
IHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgICAgICAgICAgcmF3ID0gdGhpcy5n
ZXRUb2tlblJhdyh0b2tlbik7CisJICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXpl
KG5vZGUsIG5ldyBOb2RlLkxpdGVyYWwodG9rZW4udmFsdWUsIHJhdykpOworCSAgICAgICAgICAg
ICAgICBicmVhazsKKwkgICAgICAgICAgICBjYXNlIHRva2VuXzEuVG9rZW4uQm9vbGVhbkxpdGVy
YWw6CisJICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBm
YWxzZTsKKwkgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBm
YWxzZTsKKwkgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLm5leHRUb2tlbigpOworCSAgICAg
ICAgICAgICAgICB0b2tlbi52YWx1ZSA9ICh0b2tlbi52YWx1ZSA9PT0gJ3RydWUnKTsKKwkgICAg
ICAgICAgICAgICAgcmF3ID0gdGhpcy5nZXRUb2tlblJhdyh0b2tlbik7CisJICAgICAgICAgICAg
ICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkxpdGVyYWwodG9rZW4udmFs
dWUsIHJhdykpOworCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICBjYXNlIHRv
a2VuXzEuVG9rZW4uTnVsbExpdGVyYWw6CisJICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5p
c0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTsKKwkgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0
LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKKwkgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlz
Lm5leHRUb2tlbigpOworCSAgICAgICAgICAgICAgICB0b2tlbi52YWx1ZSA9IG51bGw7CisJICAg
ICAgICAgICAgICAgIHJhdyA9IHRoaXMuZ2V0VG9rZW5SYXcodG9rZW4pOworCSAgICAgICAgICAg
ICAgICBleHByID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5MaXRlcmFsKHRva2VuLnZh
bHVlLCByYXcpKTsKKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgY2FzZSB0
b2tlbl8xLlRva2VuLlRlbXBsYXRlOgorCSAgICAgICAgICAgICAgICBleHByID0gdGhpcy5wYXJz
ZVRlbXBsYXRlTGl0ZXJhbCgpOworCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAg
ICBjYXNlIHRva2VuXzEuVG9rZW4uUHVuY3R1YXRvcjoKKwkgICAgICAgICAgICAgICAgdmFsdWUg
PSB0aGlzLmxvb2thaGVhZC52YWx1ZTsKKwkgICAgICAgICAgICAgICAgc3dpdGNoICh2YWx1ZSkg
eworCSAgICAgICAgICAgICAgICAgICAgY2FzZSAnKCc6CisJICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKKwkgICAgICAgICAgICAg
ICAgICAgICAgICBleHByID0gdGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VHcm91
cEV4cHJlc3Npb24pOworCSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAg
ICAgICAgICAgICAgY2FzZSAnWyc6CisJICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRo
aXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXJyYXlJbml0aWFsaXplcik7CisJICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAgICAgICBjYXNlICd7
JzoKKwkgICAgICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5pbmhlcml0Q292ZXJHcmFt
bWFyKHRoaXMucGFyc2VPYmplY3RJbml0aWFsaXplcik7CisJICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisJICAgICAgICAgICAgICAgICAgICBjYXNlICcvJzoKKwkgICAgICAgICAgICAg
ICAgICAgIGNhc2UgJy89JzoKKwkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQu
aXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7CisJICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKKwkgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLnNjYW5uZXIuaW5kZXggPSB0aGlzLnN0YXJ0TWFya2VyLmluZGV4OworCSAgICAg
ICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5uZXh0UmVnZXhUb2tlbigpOworCSAgICAg
ICAgICAgICAgICAgICAgICAgIHJhdyA9IHRoaXMuZ2V0VG9rZW5SYXcodG9rZW4pOworCSAgICAg
ICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlJl
Z2V4TGl0ZXJhbCh0b2tlbi52YWx1ZSwgcmF3LCB0b2tlbi5yZWdleCkpOworCSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKwkgICAg
ICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlz
Lm5leHRUb2tlbigpKTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBicmVh
azsKKwkgICAgICAgICAgICBjYXNlIHRva2VuXzEuVG9rZW4uS2V5d29yZDoKKwkgICAgICAgICAg
ICAgICAgaWYgKCF0aGlzLmNvbnRleHQuc3RyaWN0ICYmIHRoaXMuY29udGV4dC5hbGxvd1lpZWxk
ICYmIHRoaXMubWF0Y2hLZXl3b3JkKCd5aWVsZCcpKSB7CisJICAgICAgICAgICAgICAgICAgICBl
eHByID0gdGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCk7CisJICAgICAgICAgICAgICAgIH0KKwkg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXMuY29udGV4dC5zdHJpY3QgJiYgdGhpcy5tYXRj
aEtleXdvcmQoJ2xldCcpKSB7CisJICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5h
bGl6ZShub2RlLCBuZXcgTm9kZS5JZGVudGlmaWVyKHRoaXMubmV4dFRva2VuKCkudmFsdWUpKTsK
KwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAg
ICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTsKKwkgICAg
ICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7CisJ
ICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaEtleXdvcmQoJ2Z1bmN0aW9uJykpIHsK
KwkgICAgICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5wYXJzZUZ1bmN0aW9uRXhwcmVz
c2lvbigpOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAodGhpcy5tYXRjaEtleXdvcmQoJ3RoaXMnKSkgeworCSAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRo
aXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuVGhpc0V4cHJlc3Npb24oKSk7CisJICAgICAgICAg
ICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoS2V5
d29yZCgnY2xhc3MnKSkgeworCSAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLnBh
cnNlQ2xhc3NFeHByZXNzaW9uKCk7CisJICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAg
ICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy50
aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLm5leHRUb2tlbigpKTsKKwkgICAgICAgICAgICAgICAg
ICAgIH0KKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAg
ICAgICAgICBkZWZhdWx0OgorCSAgICAgICAgICAgICAgICBleHByID0gdGhpcy50aHJvd1VuZXhw
ZWN0ZWRUb2tlbih0aGlzLm5leHRUb2tlbigpKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVy
biBleHByOworCSAgICB9OworCSAgICAvLyBFQ01BLTI2MiAxMi4yLjUgQXJyYXkgSW5pdGlhbGl6
ZXIKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVNwcmVhZEVsZW1lbnQgPSBmdW5jdGlvbiAo
KSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdGhp
cy5leHBlY3QoJy4uLicpOworCSAgICAgICAgdmFyIGFyZyA9IHRoaXMuaW5oZXJpdENvdmVyR3Jh
bW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOworCSAgICAgICAgcmV0dXJuIHRo
aXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuU3ByZWFkRWxlbWVudChhcmcpKTsKKwkgICAgfTsK
KwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUFycmF5SW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAo
KSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdmFy
IGVsZW1lbnRzID0gW107CisJICAgICAgICB0aGlzLmV4cGVjdCgnWycpOworCSAgICAgICAgd2hp
bGUgKCF0aGlzLm1hdGNoKCddJykpIHsKKwkgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnLCcp
KSB7CisJICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICAgICAgICAg
IGVsZW1lbnRzLnB1c2gobnVsbCk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2Ug
aWYgKHRoaXMubWF0Y2goJy4uLicpKSB7CisJICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0g
dGhpcy5wYXJzZVNwcmVhZEVsZW1lbnQoKTsKKwkgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1h
dGNoKCddJykpIHsKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1l
bnRUYXJnZXQgPSBmYWxzZTsKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Jp
bmRpbmdFbGVtZW50ID0gZmFsc2U7CisJICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgn
LCcpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2go
ZWxlbWVudCk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAg
ICAgICAgICBlbGVtZW50cy5wdXNoKHRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNl
QXNzaWdubWVudEV4cHJlc3Npb24pKTsKKwkgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNo
KCddJykpIHsKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcsJyk7CisJICAgICAg
ICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICB0aGlzLmV4
cGVjdCgnXScpOworCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUu
QXJyYXlFeHByZXNzaW9uKGVsZW1lbnRzKSk7CisJICAgIH07CisJICAgIC8vIEVDTUEtMjYyIDEy
LjIuNiBPYmplY3QgSW5pdGlhbGl6ZXIKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVByb3Bl
cnR5TWV0aG9kID0gZnVuY3Rpb24gKHBhcmFtcykgeworCSAgICAgICAgdGhpcy5jb250ZXh0Lmlz
QXNzaWdubWVudFRhcmdldCA9IGZhbHNlOworCSAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGlu
Z0VsZW1lbnQgPSBmYWxzZTsKKwkgICAgICAgIHZhciBwcmV2aW91c1N0cmljdCA9IHRoaXMuY29u
dGV4dC5zdHJpY3Q7CisJICAgICAgICB2YXIgYm9keSA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1h
cih0aGlzLnBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cyk7CisJICAgICAgICBpZiAodGhpcy5j
b250ZXh0LnN0cmljdCAmJiBwYXJhbXMuZmlyc3RSZXN0cmljdGVkKSB7CisJICAgICAgICAgICAg
dGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihwYXJhbXMuZmlyc3RSZXN0cmljdGVkLCBwYXJh
bXMubWVzc2FnZSk7CisJICAgICAgICB9CisJICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmlj
dCAmJiBwYXJhbXMuc3RyaWN0ZWQpIHsKKwkgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBl
Y3RlZFRva2VuKHBhcmFtcy5zdHJpY3RlZCwgcGFyYW1zLm1lc3NhZ2UpOworCSAgICAgICAgfQor
CSAgICAgICAgdGhpcy5jb250ZXh0LnN0cmljdCA9IHByZXZpb3VzU3RyaWN0OworCSAgICAgICAg
cmV0dXJuIGJvZHk7CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VQcm9wZXJ0
eU1ldGhvZEZ1bmN0aW9uID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIGlzR2VuZXJhdG9y
ID0gZmFsc2U7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAg
ICAgdmFyIHByZXZpb3VzQWxsb3dZaWVsZCA9IHRoaXMuY29udGV4dC5hbGxvd1lpZWxkOworCSAg
ICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSBmYWxzZTsKKwkgICAgICAgIHZhciBwYXJh
bXMgPSB0aGlzLnBhcnNlRm9ybWFsUGFyYW1ldGVycygpOworCSAgICAgICAgdmFyIG1ldGhvZCA9
IHRoaXMucGFyc2VQcm9wZXJ0eU1ldGhvZChwYXJhbXMpOworCSAgICAgICAgdGhpcy5jb250ZXh0
LmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7CisJICAgICAgICByZXR1cm4gdGhpcy5m
aW5hbGl6ZShub2RlLCBuZXcgTm9kZS5GdW5jdGlvbkV4cHJlc3Npb24obnVsbCwgcGFyYW1zLnBh
cmFtcywgbWV0aG9kLCBpc0dlbmVyYXRvcikpOworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90
eXBlLnBhcnNlUHJvcGVydHlNZXRob2RBc3luY0Z1bmN0aW9uID0gZnVuY3Rpb24gKCkgeworCSAg
ICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHZhciBwcmV2aW91
c0FsbG93WWllbGQgPSB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZDsKKwkgICAgICAgIHZhciBwcmV2
aW91c0F3YWl0ID0gdGhpcy5jb250ZXh0LmF3YWl0OworCSAgICAgICAgdGhpcy5jb250ZXh0LmFs
bG93WWllbGQgPSBmYWxzZTsKKwkgICAgICAgIHRoaXMuY29udGV4dC5hd2FpdCA9IHRydWU7CisJ
ICAgICAgICB2YXIgcGFyYW1zID0gdGhpcy5wYXJzZUZvcm1hbFBhcmFtZXRlcnMoKTsKKwkgICAg
ICAgIHZhciBtZXRob2QgPSB0aGlzLnBhcnNlUHJvcGVydHlNZXRob2QocGFyYW1zKTsKKwkgICAg
ICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkOworCSAgICAg
ICAgdGhpcy5jb250ZXh0LmF3YWl0ID0gcHJldmlvdXNBd2FpdDsKKwkgICAgICAgIHJldHVybiB0
aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkFzeW5jRnVuY3Rpb25FeHByZXNzaW9uKG51bGws
IHBhcmFtcy5wYXJhbXMsIG1ldGhvZCkpOworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBl
LnBhcnNlT2JqZWN0UHJvcGVydHlLZXkgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9k
ZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdmFyIHRva2VuID0gdGhpcy5uZXh0VG9r
ZW4oKTsKKwkgICAgICAgIHZhciBrZXk7CisJICAgICAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHsK
KwkgICAgICAgICAgICBjYXNlIHRva2VuXzEuVG9rZW4uU3RyaW5nTGl0ZXJhbDoKKwkgICAgICAg
ICAgICBjYXNlIHRva2VuXzEuVG9rZW4uTnVtZXJpY0xpdGVyYWw6CisJICAgICAgICAgICAgICAg
IGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIHRva2VuLm9jdGFsKSB7CisJICAgICAgICAgICAg
ICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuLCBtZXNzYWdlc18xLk1l
c3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAg
ICAgICAgICAgdmFyIHJhdyA9IHRoaXMuZ2V0VG9rZW5SYXcodG9rZW4pOworCSAgICAgICAgICAg
ICAgICBrZXkgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkxpdGVyYWwodG9rZW4udmFs
dWUsIHJhdykpOworCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICBjYXNlIHRv
a2VuXzEuVG9rZW4uSWRlbnRpZmllcjoKKwkgICAgICAgICAgICBjYXNlIHRva2VuXzEuVG9rZW4u
Qm9vbGVhbkxpdGVyYWw6CisJICAgICAgICAgICAgY2FzZSB0b2tlbl8xLlRva2VuLk51bGxMaXRl
cmFsOgorCSAgICAgICAgICAgIGNhc2UgdG9rZW5fMS5Ub2tlbi5LZXl3b3JkOgorCSAgICAgICAg
ICAgICAgICBrZXkgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLklkZW50aWZpZXIodG9r
ZW4udmFsdWUpKTsKKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgY2FzZSB0
b2tlbl8xLlRva2VuLlB1bmN0dWF0b3I6CisJICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1
ZSA9PT0gJ1snKSB7CisJICAgICAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLmlzb2xhdGVDb3Zl
ckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKKwkgICAgICAgICAgICAg
ICAgICAgIHRoaXMuZXhwZWN0KCddJyk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAg
ICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLnRocm93VW5leHBl
Y3RlZFRva2VuKHRva2VuKTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBi
cmVhazsKKwkgICAgICAgICAgICBkZWZhdWx0OgorCSAgICAgICAgICAgICAgICBrZXkgPSB0aGlz
LnRocm93VW5leHBlY3RlZFRva2VuKHRva2VuKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVy
biBrZXk7CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUuaXNQcm9wZXJ0eUtleSA9IGZ1
bmN0aW9uIChrZXksIHZhbHVlKSB7CisJICAgICAgICByZXR1cm4gKGtleS50eXBlID09PSBzeW50
YXhfMS5TeW50YXguSWRlbnRpZmllciAmJiBrZXkubmFtZSA9PT0gdmFsdWUpIHx8CisJICAgICAg
ICAgICAgKGtleS50eXBlID09PSBzeW50YXhfMS5TeW50YXguTGl0ZXJhbCAmJiBrZXkudmFsdWUg
PT09IHZhbHVlKTsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZU9iamVjdFBy
b3BlcnR5ID0gZnVuY3Rpb24gKGhhc1Byb3RvKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMu
Y3JlYXRlTm9kZSgpOworCSAgICAgICAgdmFyIHRva2VuID0gdGhpcy5sb29rYWhlYWQ7CisJICAg
ICAgICB2YXIga2luZDsKKwkgICAgICAgIHZhciBrZXkgPSBudWxsOworCSAgICAgICAgdmFyIHZh
bHVlID0gbnVsbDsKKwkgICAgICAgIHZhciBjb21wdXRlZCA9IGZhbHNlOworCSAgICAgICAgdmFy
IG1ldGhvZCA9IGZhbHNlOworCSAgICAgICAgdmFyIHNob3J0aGFuZCA9IGZhbHNlOworCSAgICAg
ICAgdmFyIGlzQXN5bmMgPSBmYWxzZTsKKwkgICAgICAgIGlmICh0b2tlbi50eXBlID09PSB0b2tl
bl8xLlRva2VuLklkZW50aWZpZXIpIHsKKwkgICAgICAgICAgICB2YXIgaWQgPSB0b2tlbi52YWx1
ZTsKKwkgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgICAgIGlmIChpZCA9
PT0gJ2FzeW5jJykgeworCSAgICAgICAgICAgICAgICBpc0FzeW5jID0gIXRoaXMuaGFzTGluZVRl
cm1pbmF0b3IgJiYgKHRoaXMubG9va2FoZWFkLnR5cGUgPT09IHRva2VuXzEuVG9rZW4uSWRlbnRp
Zmllcik7CisJICAgICAgICAgICAgICAgIGlmIChpc0FzeW5jKSB7CisJICAgICAgICAgICAgICAg
ICAgICB0b2tlbiA9IHRoaXMubG9va2FoZWFkOworCSAgICAgICAgICAgICAgICAgICAgaWQgPSB0
b2tlbi52YWx1ZTsKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAg
ICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAga2V5ID0gdGhpcy5m
aW5hbGl6ZShub2RlLCBuZXcgTm9kZS5JZGVudGlmaWVyKGlkKSk7CisJICAgICAgICB9CisJICAg
ICAgICBlbHNlIGlmICh0aGlzLm1hdGNoKCcqJykpIHsKKwkgICAgICAgICAgICB0aGlzLm5leHRU
b2tlbigpOworCSAgICAgICAgfQorCSAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgY29tcHV0
ZWQgPSB0aGlzLm1hdGNoKCdbJyk7CisJICAgICAgICAgICAga2V5ID0gdGhpcy5wYXJzZU9iamVj
dFByb3BlcnR5S2V5KCk7CisJICAgICAgICB9CisJICAgICAgICB2YXIgbG9va2FoZWFkUHJvcGVy
dHlLZXkgPSB0aGlzLnF1YWxpZmllZFByb3BlcnR5TmFtZSh0aGlzLmxvb2thaGVhZCk7CisJICAg
ICAgICBpZiAodG9rZW4udHlwZSA9PT0gdG9rZW5fMS5Ub2tlbi5JZGVudGlmaWVyICYmICFpc0Fz
eW5jICYmIHRva2VuLnZhbHVlID09PSAnZ2V0JyAmJiBsb29rYWhlYWRQcm9wZXJ0eUtleSkgewor
CSAgICAgICAgICAgIGtpbmQgPSAnZ2V0JzsKKwkgICAgICAgICAgICBjb21wdXRlZCA9IHRoaXMu
bWF0Y2goJ1snKTsKKwkgICAgICAgICAgICBrZXkgPSB0aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlL
ZXkoKTsKKwkgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IGZhbHNlOworCSAg
ICAgICAgICAgIHZhbHVlID0gdGhpcy5wYXJzZUdldHRlck1ldGhvZCgpOworCSAgICAgICAgfQor
CSAgICAgICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gdG9rZW5fMS5Ub2tlbi5JZGVudGlmaWVy
ICYmICFpc0FzeW5jICYmIHRva2VuLnZhbHVlID09PSAnc2V0JyAmJiBsb29rYWhlYWRQcm9wZXJ0
eUtleSkgeworCSAgICAgICAgICAgIGtpbmQgPSAnc2V0JzsKKwkgICAgICAgICAgICBjb21wdXRl
ZCA9IHRoaXMubWF0Y2goJ1snKTsKKwkgICAgICAgICAgICBrZXkgPSB0aGlzLnBhcnNlT2JqZWN0
UHJvcGVydHlLZXkoKTsKKwkgICAgICAgICAgICB2YWx1ZSA9IHRoaXMucGFyc2VTZXR0ZXJNZXRo
b2QoKTsKKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IHRva2Vu
XzEuVG9rZW4uUHVuY3R1YXRvciAmJiB0b2tlbi52YWx1ZSA9PT0gJyonICYmIGxvb2thaGVhZFBy
b3BlcnR5S2V5KSB7CisJICAgICAgICAgICAga2luZCA9ICdpbml0JzsKKwkgICAgICAgICAgICBj
b21wdXRlZCA9IHRoaXMubWF0Y2goJ1snKTsKKwkgICAgICAgICAgICBrZXkgPSB0aGlzLnBhcnNl
T2JqZWN0UHJvcGVydHlLZXkoKTsKKwkgICAgICAgICAgICB2YWx1ZSA9IHRoaXMucGFyc2VHZW5l
cmF0b3JNZXRob2QoKTsKKwkgICAgICAgICAgICBtZXRob2QgPSB0cnVlOworCSAgICAgICAgfQor
CSAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgaWYgKCFrZXkpIHsKKwkgICAgICAgICAgICAg
ICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7CisJICAgICAgICAg
ICAgfQorCSAgICAgICAgICAgIGtpbmQgPSAnaW5pdCc7CisJICAgICAgICAgICAgaWYgKHRoaXMu
bWF0Y2goJzonKSkgeworCSAgICAgICAgICAgICAgICBpZiAoIWNvbXB1dGVkICYmIHRoaXMuaXNQ
cm9wZXJ0eUtleShrZXksICdfX3Byb3RvX18nKSkgeworCSAgICAgICAgICAgICAgICAgICAgaWYg
KGhhc1Byb3RvLnZhbHVlKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0
ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuRHVwbGljYXRlUHJvdG9Qcm9wZXJ0eSk7CisJICAg
ICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICBoYXNQcm90by52YWx1ZSA9
IHRydWU7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9r
ZW4oKTsKKwkgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIo
dGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKKwkgICAgICAgICAgICB9CisJICAgICAg
ICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaCgnKCcpKSB7CisJICAgICAgICAgICAgICAgIHZhbHVl
ID0gaXNBc3luYyA/IHRoaXMucGFyc2VQcm9wZXJ0eU1ldGhvZEFzeW5jRnVuY3Rpb24oKSA6IHRo
aXMucGFyc2VQcm9wZXJ0eU1ldGhvZEZ1bmN0aW9uKCk7CisJICAgICAgICAgICAgICAgIG1ldGhv
ZCA9IHRydWU7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuLnR5
cGUgPT09IHRva2VuXzEuVG9rZW4uSWRlbnRpZmllcikgeworCSAgICAgICAgICAgICAgICB2YXIg
aWQgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLklkZW50aWZpZXIodG9rZW4udmFsdWUp
KTsKKwkgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJz0nKSkgeworCSAgICAgICAgICAg
ICAgICAgICAgdGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IHRo
aXMubG9va2FoZWFkOworCSAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkg
ICAgICAgICAgICAgICAgICAgIHNob3J0aGFuZCA9IHRydWU7CisJICAgICAgICAgICAgICAgICAg
ICB2YXIgaW5pdCA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVu
dEV4cHJlc3Npb24pOworCSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmZpbmFsaXpl
KG5vZGUsIG5ldyBOb2RlLkFzc2lnbm1lbnRQYXR0ZXJuKGlkLCBpbml0KSk7CisJICAgICAgICAg
ICAgICAgIH0KKwkgICAgICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgICAgICBz
aG9ydGhhbmQgPSB0cnVlOworCSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpZDsKKwkgICAg
ICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIHsKKwkgICAg
ICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLm5leHRUb2tlbigpKTsK
KwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6
ZShub2RlLCBuZXcgTm9kZS5Qcm9wZXJ0eShraW5kLCAoa2V5KSwgY29tcHV0ZWQsIHZhbHVlLCBt
ZXRob2QsIHNob3J0aGFuZCkpOworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNl
T2JqZWN0SW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRo
aXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdGhpcy5leHBlY3QoJ3snKTsKKwkgICAgICAgIHZh
ciBwcm9wZXJ0aWVzID0gW107CisJICAgICAgICB2YXIgaGFzUHJvdG8gPSB7IHZhbHVlOiBmYWxz
ZSB9OworCSAgICAgICAgd2hpbGUgKCF0aGlzLm1hdGNoKCd9JykpIHsKKwkgICAgICAgICAgICBw
cm9wZXJ0aWVzLnB1c2godGhpcy5wYXJzZU9iamVjdFByb3BlcnR5KGhhc1Byb3RvKSk7CisJICAg
ICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCd9JykpIHsKKwkgICAgICAgICAgICAgICAgdGhpcy5l
eHBlY3RDb21tYVNlcGFyYXRvcigpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAg
ICAgIHRoaXMuZXhwZWN0KCd9Jyk7CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2Rl
LCBuZXcgTm9kZS5PYmplY3RFeHByZXNzaW9uKHByb3BlcnRpZXMpKTsKKwkgICAgfTsKKwkgICAg
Ly8gRUNNQS0yNjIgMTIuMi45IFRlbXBsYXRlIExpdGVyYWxzCisJICAgIFBhcnNlci5wcm90b3R5
cGUucGFyc2VUZW1wbGF0ZUhlYWQgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICBhc3NlcnRfMS5h
c3NlcnQodGhpcy5sb29rYWhlYWQuaGVhZCwgJ1RlbXBsYXRlIGxpdGVyYWwgbXVzdCBzdGFydCB3
aXRoIGEgdGVtcGxhdGUgaGVhZCcpOworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5v
ZGUoKTsKKwkgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICB2
YXIgdmFsdWUgPSB7CisJICAgICAgICAgICAgcmF3OiB0b2tlbi52YWx1ZS5yYXcsCisJICAgICAg
ICAgICAgY29va2VkOiB0b2tlbi52YWx1ZS5jb29rZWQKKwkgICAgICAgIH07CisJICAgICAgICBy
ZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5UZW1wbGF0ZUVsZW1lbnQodmFsdWUs
IHRva2VuLnRhaWwpKTsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVRlbXBs
YXRlRWxlbWVudCA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIGlmICh0aGlzLmxvb2thaGVhZC50
eXBlICE9PSB0b2tlbl8xLlRva2VuLlRlbXBsYXRlKSB7CisJICAgICAgICAgICAgdGhpcy50aHJv
d1VuZXhwZWN0ZWRUb2tlbigpOworCSAgICAgICAgfQorCSAgICAgICAgdmFyIG5vZGUgPSB0aGlz
LmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7CisJ
ICAgICAgICB2YXIgdmFsdWUgPSB7CisJICAgICAgICAgICAgcmF3OiB0b2tlbi52YWx1ZS5yYXcs
CisJICAgICAgICAgICAgY29va2VkOiB0b2tlbi52YWx1ZS5jb29rZWQKKwkgICAgICAgIH07CisJ
ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5UZW1wbGF0ZUVsZW1l
bnQodmFsdWUsIHRva2VuLnRhaWwpKTsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5w
YXJzZVRlbXBsYXRlTGl0ZXJhbCA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBub2RlID0g
dGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICB2YXIgZXhwcmVzc2lvbnMgPSBbXTsKKwkgICAg
ICAgIHZhciBxdWFzaXMgPSBbXTsKKwkgICAgICAgIHZhciBxdWFzaSA9IHRoaXMucGFyc2VUZW1w
bGF0ZUhlYWQoKTsKKwkgICAgICAgIHF1YXNpcy5wdXNoKHF1YXNpKTsKKwkgICAgICAgIHdoaWxl
ICghcXVhc2kudGFpbCkgeworCSAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2godGhpcy5wYXJz
ZUV4cHJlc3Npb24oKSk7CisJICAgICAgICAgICAgcXVhc2kgPSB0aGlzLnBhcnNlVGVtcGxhdGVF
bGVtZW50KCk7CisJICAgICAgICAgICAgcXVhc2lzLnB1c2gocXVhc2kpOworCSAgICAgICAgfQor
CSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuVGVtcGxhdGVMaXRl
cmFsKHF1YXNpcywgZXhwcmVzc2lvbnMpKTsKKwkgICAgfTsKKwkgICAgLy8gRUNNQS0yNjIgMTIu
Mi4xMCBUaGUgR3JvdXBpbmcgT3BlcmF0b3IKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5yZWludGVy
cHJldEV4cHJlc3Npb25Bc1BhdHRlcm4gPSBmdW5jdGlvbiAoZXhwcikgeworCSAgICAgICAgc3dp
dGNoIChleHByLnR5cGUpIHsKKwkgICAgICAgICAgICBjYXNlIHN5bnRheF8xLlN5bnRheC5JZGVu
dGlmaWVyOgorCSAgICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4Lk1lbWJlckV4cHJlc3Np
b246CisJICAgICAgICAgICAgY2FzZSBzeW50YXhfMS5TeW50YXguUmVzdEVsZW1lbnQ6CisJICAg
ICAgICAgICAgY2FzZSBzeW50YXhfMS5TeW50YXguQXNzaWdubWVudFBhdHRlcm46CisJICAgICAg
ICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4LlNwcmVh
ZEVsZW1lbnQ6CisJICAgICAgICAgICAgICAgIGV4cHIudHlwZSA9IHN5bnRheF8xLlN5bnRheC5S
ZXN0RWxlbWVudDsKKwkgICAgICAgICAgICAgICAgdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25B
c1BhdHRlcm4oZXhwci5hcmd1bWVudCk7CisJICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAg
ICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4LkFycmF5RXhwcmVzc2lvbjoKKwkgICAgICAgICAg
ICAgICAgZXhwci50eXBlID0gc3ludGF4XzEuU3ludGF4LkFycmF5UGF0dGVybjsKKwkgICAgICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHByLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7
CisJICAgICAgICAgICAgICAgICAgICBpZiAoZXhwci5lbGVtZW50c1tpXSAhPT0gbnVsbCkgewor
CSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0
ZXJuKGV4cHIuZWxlbWVudHNbaV0pOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAg
ICAgICAgICB9CisJICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIGNhc2Ugc3lu
dGF4XzEuU3ludGF4Lk9iamVjdEV4cHJlc3Npb246CisJICAgICAgICAgICAgICAgIGV4cHIudHlw
ZSA9IHN5bnRheF8xLlN5bnRheC5PYmplY3RQYXR0ZXJuOworCSAgICAgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGV4cHIucHJvcGVydGllcy5sZW5ndGg7IGkrKykgeworCSAgICAgICAg
ICAgICAgICAgICAgdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhwci5wcm9w
ZXJ0aWVzW2ldLnZhbHVlKTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBi
cmVhazsKKwkgICAgICAgICAgICBjYXNlIHN5bnRheF8xLlN5bnRheC5Bc3NpZ25tZW50RXhwcmVz
c2lvbjoKKwkgICAgICAgICAgICAgICAgZXhwci50eXBlID0gc3ludGF4XzEuU3ludGF4LkFzc2ln
bm1lbnRQYXR0ZXJuOworCSAgICAgICAgICAgICAgICBkZWxldGUgZXhwci5vcGVyYXRvcjsKKwkg
ICAgICAgICAgICAgICAgdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhwci5s
ZWZ0KTsKKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgZGVmYXVsdDoKKwkg
ICAgICAgICAgICAgICAgLy8gQWxsb3cgb3RoZXIgbm9kZSB0eXBlIGZvciB0b2xlcmFudCBwYXJz
aW5nLgorCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgIH0KKwkgICAgfTsKKwkgICAg
UGFyc2VyLnByb3RvdHlwZS5wYXJzZUdyb3VwRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKKwkg
ICAgICAgIHZhciBleHByOworCSAgICAgICAgdGhpcy5leHBlY3QoJygnKTsKKwkgICAgICAgIGlm
ICh0aGlzLm1hdGNoKCcpJykpIHsKKwkgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworCSAg
ICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnPT4nKSkgeworCSAgICAgICAgICAgICAgICB0aGlz
LmV4cGVjdCgnPT4nKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgZXhwciA9IHsKKwkg
ICAgICAgICAgICAgICAgdHlwZTogQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlciwKKwkgICAgICAg
ICAgICAgICAgcGFyYW1zOiBbXSwKKwkgICAgICAgICAgICAgICAgYXN5bmM6IGZhbHNlCisJICAg
ICAgICAgICAgfTsKKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgIHZh
ciBzdGFydFRva2VuID0gdGhpcy5sb29rYWhlYWQ7CisJICAgICAgICAgICAgdmFyIHBhcmFtcyA9
IFtdOworCSAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCcuLi4nKSkgeworCSAgICAgICAgICAg
ICAgICBleHByID0gdGhpcy5wYXJzZVJlc3RFbGVtZW50KHBhcmFtcyk7CisJICAgICAgICAgICAg
ICAgIHRoaXMuZXhwZWN0KCcpJyk7CisJICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgn
PT4nKSkgeworCSAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJz0+Jyk7CisJICAgICAg
ICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgZXhwciA9IHsKKwkgICAgICAgICAgICAgICAg
ICAgIHR5cGU6IEFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIsCisJICAgICAgICAgICAgICAgICAg
ICBwYXJhbXM6IFtleHByXSwKKwkgICAgICAgICAgICAgICAgICAgIGFzeW5jOiBmYWxzZQorCSAg
ICAgICAgICAgICAgICB9OworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIHsKKwkg
ICAgICAgICAgICAgICAgdmFyIGFycm93ID0gZmFsc2U7CisJICAgICAgICAgICAgICAgIHRoaXMu
Y29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gdHJ1ZTsKKwkgICAgICAgICAgICAgICAgZXhwciA9
IHRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24p
OworCSAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnLCcpKSB7CisJICAgICAgICAgICAg
ICAgICAgICB2YXIgZXhwcmVzc2lvbnMgPSBbXTsKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMu
Y29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTsKKwkgICAgICAgICAgICAgICAgICAg
IGV4cHJlc3Npb25zLnB1c2goZXhwcik7CisJICAgICAgICAgICAgICAgICAgICB3aGlsZSAodGhp
cy5zdGFydE1hcmtlci5pbmRleCA8IHRoaXMuc2Nhbm5lci5sZW5ndGgpIHsKKwkgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2goJywnKSkgeworCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAodGhpcy5tYXRjaCgnKScpKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMubmV4dFRva2VuKCk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgZXhwcmVzc2lvbnMubGVuZ3RoOyBpKyspIHsKKwkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHJlc3Np
b25zW2ldKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcnJvdyA9IHRydWU7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV4cHIgPSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBBcnJvd1Bh
cmFtZXRlclBsYWNlSG9sZGVyLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFy
YW1zOiBleHByZXNzaW9ucywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5j
OiBmYWxzZQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworCSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNo
KCcuLi4nKSkgeworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29udGV4
dC5pc0JpbmRpbmdFbGVtZW50KSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTsKKwkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9u
cy5wdXNoKHRoaXMucGFyc2VSZXN0RWxlbWVudChwYXJhbXMpKTsKKwkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5leHBlY3QoJyknKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCF0aGlzLm1hdGNoKCc9PicpKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLmV4cGVjdCgnPT4nKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVu
dCA9IGZhbHNlOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGV4cHJlc3Npb25zLmxlbmd0aDsgaSsrKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLnJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihleHByZXNzaW9uc1tp
XSk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXJyb3cgPSB0cnVlOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBy
ID0geworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogQXJyb3dQYXJhbWV0
ZXJQbGFjZUhvbGRlciwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczog
ZXhwcmVzc2lvbnMsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYzogZmFs
c2UKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKwkgICAgICAgICAgICAgICAgICAg
ICAgICB9CisJICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2godGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRo
aXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbikpOworCSAgICAgICAgICAgICAgICAgICAgICAg
IH0KKwkgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyb3cpIHsKKwkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAgICAgICAgICAgfQorCSAgICAg
ICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgaWYgKCFhcnJvdykgeworCSAg
ICAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKHRoaXMuc3RhcnROb2Rl
KHN0YXJ0VG9rZW4pLCBuZXcgTm9kZS5TZXF1ZW5jZUV4cHJlc3Npb24oZXhwcmVzc2lvbnMpKTsK
KwkgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAg
ICAgICBpZiAoIWFycm93KSB7CisJICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnKScp
OworCSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJz0+JykpIHsKKwkgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoZXhwci50eXBlID09PSBzeW50YXhfMS5TeW50YXguSWRlbnRp
ZmllciAmJiBleHByLm5hbWUgPT09ICd5aWVsZCcpIHsKKwkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXJyb3cgPSB0cnVlOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByID0g
eworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogQXJyb3dQYXJhbWV0ZXJQ
bGFjZUhvbGRlciwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogW2V4
cHJdLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmM6IGZhbHNlCisJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH07CisJICAgICAgICAgICAgICAgICAgICAgICAgfQor
CSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJyb3cpIHsKKwkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCkgeworCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlz
Lmxvb2thaGVhZCk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGV4cHIudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LlNlcXVl
bmNlRXhwcmVzc2lvbikgeworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBleHByLmV4cHJlc3Npb25zLmxlbmd0aDsgaSsrKSB7CisJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1Bh
dHRlcm4oZXhwci5leHByZXNzaW9uc1tpXSk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LnJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihleHByKTsKKwkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyYW1zXzEg
PSAoZXhwci50eXBlID09PSBzeW50YXhfMS5TeW50YXguU2VxdWVuY2VFeHByZXNzaW9uID8gZXhw
ci5leHByZXNzaW9ucyA6IFtleHByXSk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4
cHIgPSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBBcnJvd1BhcmFt
ZXRlclBsYWNlSG9sZGVyLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1z
OiBwYXJhbXNfMSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jOiBmYWxz
ZQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworCSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKwkgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgIHRoaXMu
Y29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7CisJICAgICAgICAgICAgICAgIH0KKwkg
ICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gZXhwcjsKKwkgICAgfTsK
KwkgICAgLy8gRUNNQS0yNjIgMTIuMyBMZWZ0LUhhbmQtU2lkZSBFeHByZXNzaW9ucworCSAgICBQ
YXJzZXIucHJvdG90eXBlLnBhcnNlQXJndW1lbnRzID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAg
dGhpcy5leHBlY3QoJygnKTsKKwkgICAgICAgIHZhciBhcmdzID0gW107CisJICAgICAgICBpZiAo
IXRoaXMubWF0Y2goJyknKSkgeworCSAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisJICAgICAg
ICAgICAgICAgIHZhciBleHByID0gdGhpcy5tYXRjaCgnLi4uJykgPyB0aGlzLnBhcnNlU3ByZWFk
RWxlbWVudCgpIDoKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1h
cih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOworCSAgICAgICAgICAgICAgICBhcmdz
LnB1c2goZXhwcik7CisJICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCcpJykpIHsKKwkg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAg
ICAgICAgIHRoaXMuZXhwZWN0Q29tbWFTZXBhcmF0b3IoKTsKKwkgICAgICAgICAgICAgICAgaWYg
KHRoaXMubWF0Y2goJyknKSkgeworCSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAg
ICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICB0aGlzLmV4
cGVjdCgnKScpOworCSAgICAgICAgcmV0dXJuIGFyZ3M7CisJICAgIH07CisJICAgIFBhcnNlci5w
cm90b3R5cGUuaXNJZGVudGlmaWVyTmFtZSA9IGZ1bmN0aW9uICh0b2tlbikgeworCSAgICAgICAg
cmV0dXJuIHRva2VuLnR5cGUgPT09IHRva2VuXzEuVG9rZW4uSWRlbnRpZmllciB8fAorCSAgICAg
ICAgICAgIHRva2VuLnR5cGUgPT09IHRva2VuXzEuVG9rZW4uS2V5d29yZCB8fAorCSAgICAgICAg
ICAgIHRva2VuLnR5cGUgPT09IHRva2VuXzEuVG9rZW4uQm9vbGVhbkxpdGVyYWwgfHwKKwkgICAg
ICAgICAgICB0b2tlbi50eXBlID09PSB0b2tlbl8xLlRva2VuLk51bGxMaXRlcmFsOworCSAgICB9
OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlSWRlbnRpZmllck5hbWUgPSBmdW5jdGlvbiAo
KSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdmFy
IHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgIGlmICghdGhpcy5pc0lkZW50aWZp
ZXJOYW1lKHRva2VuKSkgeworCSAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4o
dG9rZW4pOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwg
bmV3IE5vZGUuSWRlbnRpZmllcih0b2tlbi52YWx1ZSkpOworCSAgICB9OworCSAgICBQYXJzZXIu
cHJvdG90eXBlLnBhcnNlTmV3RXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZh
ciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICB2YXIgaWQgPSB0aGlzLnBhcnNl
SWRlbnRpZmllck5hbWUoKTsKKwkgICAgICAgIGFzc2VydF8xLmFzc2VydChpZC5uYW1lID09PSAn
bmV3JywgJ05ldyBleHByZXNzaW9uIG11c3Qgc3RhcnQgd2l0aCBgbmV3YCcpOworCSAgICAgICAg
dmFyIGV4cHI7CisJICAgICAgICBpZiAodGhpcy5tYXRjaCgnLicpKSB7CisJICAgICAgICAgICAg
dGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgICAgICBpZiAodGhpcy5sb29rYWhlYWQudHlwZSA9
PT0gdG9rZW5fMS5Ub2tlbi5JZGVudGlmaWVyICYmIHRoaXMuY29udGV4dC5pbkZ1bmN0aW9uQm9k
eSAmJiB0aGlzLmxvb2thaGVhZC52YWx1ZSA9PT0gJ3RhcmdldCcpIHsKKwkgICAgICAgICAgICAg
ICAgdmFyIHByb3BlcnR5ID0gdGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCk7CisJICAgICAgICAg
ICAgICAgIGV4cHIgPSBuZXcgTm9kZS5NZXRhUHJvcGVydHkoaWQsIHByb3BlcnR5KTsKKwkgICAg
ICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgIHRoaXMudGhy
b3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpOworCSAgICAgICAgICAgIH0KKwkgICAg
ICAgIH0KKwkgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgIHZhciBjYWxsZWUgPSB0aGlzLmlz
b2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb24pOworCSAg
ICAgICAgICAgIHZhciBhcmdzID0gdGhpcy5tYXRjaCgnKCcpID8gdGhpcy5wYXJzZUFyZ3VtZW50
cygpIDogW107CisJICAgICAgICAgICAgZXhwciA9IG5ldyBOb2RlLk5ld0V4cHJlc3Npb24oY2Fs
bGVlLCBhcmdzKTsKKwkgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0
ID0gZmFsc2U7CisJICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBm
YWxzZTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIGV4
cHIpOworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQXN5bmNBcmd1bWVudCA9
IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBhcmcgPSB0aGlzLnBhcnNlQXNzaWdubWVudEV4
cHJlc3Npb24oKTsKKwkgICAgICAgIHRoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWRO
YW1lRXJyb3IgPSBudWxsOworCSAgICAgICAgcmV0dXJuIGFyZzsKKwkgICAgfTsKKwkgICAgUGFy
c2VyLnByb3RvdHlwZS5wYXJzZUFzeW5jQXJndW1lbnRzID0gZnVuY3Rpb24gKCkgeworCSAgICAg
ICAgdGhpcy5leHBlY3QoJygnKTsKKwkgICAgICAgIHZhciBhcmdzID0gW107CisJICAgICAgICBp
ZiAoIXRoaXMubWF0Y2goJyknKSkgeworCSAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisJICAg
ICAgICAgICAgICAgIHZhciBleHByID0gdGhpcy5tYXRjaCgnLi4uJykgPyB0aGlzLnBhcnNlU3By
ZWFkRWxlbWVudCgpIDoKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNvbGF0ZUNvdmVyR3Jh
bW1hcih0aGlzLnBhcnNlQXN5bmNBcmd1bWVudCk7CisJICAgICAgICAgICAgICAgIGFyZ3MucHVz
aChleHByKTsKKwkgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJyknKSkgeworCSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAg
ICAgdGhpcy5leHBlY3RDb21tYVNlcGFyYXRvcigpOworCSAgICAgICAgICAgICAgICBpZiAodGhp
cy5tYXRjaCgnKScpKSB7CisJICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAg
ICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIHRoaXMuZXhwZWN0
KCcpJyk7CisJICAgICAgICByZXR1cm4gYXJnczsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3Rv
dHlwZS5wYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwgPSBmdW5jdGlvbiAoKSB7
CisJICAgICAgICB2YXIgc3RhcnRUb2tlbiA9IHRoaXMubG9va2FoZWFkOworCSAgICAgICAgdmFy
IG1heWJlQXN5bmMgPSB0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2FzeW5jJyk7CisJICAg
ICAgICB2YXIgcHJldmlvdXNBbGxvd0luID0gdGhpcy5jb250ZXh0LmFsbG93SW47CisJICAgICAg
ICB0aGlzLmNvbnRleHQuYWxsb3dJbiA9IHRydWU7CisJICAgICAgICB2YXIgZXhwcjsKKwkgICAg
ICAgIGlmICh0aGlzLm1hdGNoS2V5d29yZCgnc3VwZXInKSAmJiB0aGlzLmNvbnRleHQuaW5GdW5j
dGlvbkJvZHkpIHsKKwkgICAgICAgICAgICBleHByID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAg
ICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgICAgICBleHByID0gdGhpcy5maW5h
bGl6ZShleHByLCBuZXcgTm9kZS5TdXBlcigpKTsKKwkgICAgICAgICAgICBpZiAoIXRoaXMubWF0
Y2goJygnKSAmJiAhdGhpcy5tYXRjaCgnLicpICYmICF0aGlzLm1hdGNoKCdbJykpIHsKKwkgICAg
ICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7CisJ
ICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAg
ZXhwciA9IHRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLm1hdGNoS2V5d29yZCgnbmV3Jykg
PyB0aGlzLnBhcnNlTmV3RXhwcmVzc2lvbiA6IHRoaXMucGFyc2VQcmltYXJ5RXhwcmVzc2lvbik7
CisJICAgICAgICB9CisJICAgICAgICB3aGlsZSAodHJ1ZSkgeworCSAgICAgICAgICAgIGlmICh0
aGlzLm1hdGNoKCcuJykpIHsKKwkgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGlu
Z0VsZW1lbnQgPSBmYWxzZTsKKwkgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdu
bWVudFRhcmdldCA9IHRydWU7CisJICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcuJyk7CisJ
ICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMucGFyc2VJZGVudGlmaWVyTmFtZSgp
OworCSAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShz
dGFydFRva2VuKSwgbmV3IE5vZGUuU3RhdGljTWVtYmVyRXhwcmVzc2lvbihleHByLCBwcm9wZXJ0
eSkpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoKCco
JykpIHsKKwkgICAgICAgICAgICAgICAgdmFyIGFzeW5jQXJyb3cgPSBtYXliZUFzeW5jICYmIChz
dGFydFRva2VuLmxpbmVOdW1iZXIgPT09IHRoaXMubG9va2FoZWFkLmxpbmVOdW1iZXIpOworCSAg
ICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOworCSAg
ICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7CisJ
ICAgICAgICAgICAgICAgIHZhciBhcmdzID0gYXN5bmNBcnJvdyA/IHRoaXMucGFyc2VBc3luY0Fy
Z3VtZW50cygpIDogdGhpcy5wYXJzZUFyZ3VtZW50cygpOworCSAgICAgICAgICAgICAgICBleHBy
ID0gdGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShzdGFydFRva2VuKSwgbmV3IE5vZGUuQ2Fs
bEV4cHJlc3Npb24oZXhwciwgYXJncykpOworCSAgICAgICAgICAgICAgICBpZiAoYXN5bmNBcnJv
dyAmJiB0aGlzLm1hdGNoKCc9PicpKSB7CisJICAgICAgICAgICAgICAgICAgICBleHByID0gewor
CSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IEFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIs
CisJICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBhcmdzLAorCSAgICAgICAgICAgICAg
ICAgICAgICAgIGFzeW5jOiB0cnVlCisJICAgICAgICAgICAgICAgICAgICB9OworCSAgICAgICAg
ICAgICAgICB9CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0
Y2goJ1snKSkgeworCSAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVu
dCA9IGZhbHNlOworCSAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFy
Z2V0ID0gdHJ1ZTsKKwkgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJ1snKTsKKwkgICAgICAg
ICAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFy
c2VFeHByZXNzaW9uKTsKKwkgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJ10nKTsKKwkgICAg
ICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoc3RhcnRUb2tl
biksIG5ldyBOb2RlLkNvbXB1dGVkTWVtYmVyRXhwcmVzc2lvbihleHByLCBwcm9wZXJ0eSkpOwor
CSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmxvb2thaGVhZC50eXBl
ID09PSB0b2tlbl8xLlRva2VuLlRlbXBsYXRlICYmIHRoaXMubG9va2FoZWFkLmhlYWQpIHsKKwkg
ICAgICAgICAgICAgICAgdmFyIHF1YXNpID0gdGhpcy5wYXJzZVRlbXBsYXRlTGl0ZXJhbCgpOwor
CSAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShzdGFy
dFRva2VuKSwgbmV3IE5vZGUuVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uKGV4cHIsIHF1YXNpKSk7
CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICBi
cmVhazsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICB0aGlzLmNvbnRleHQu
YWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJbjsKKwkgICAgICAgIHJldHVybiBleHByOworCSAgICB9
OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlU3VwZXIgPSBmdW5jdGlvbiAoKSB7CisJICAg
ICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdGhpcy5leHBlY3RL
ZXl3b3JkKCdzdXBlcicpOworCSAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCdbJykgJiYgIXRoaXMu
bWF0Y2goJy4nKSkgeworCSAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhp
cy5sb29rYWhlYWQpOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUo
bm9kZSwgbmV3IE5vZGUuU3VwZXIoKSk7CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUu
cGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgYXNz
ZXJ0XzEuYXNzZXJ0KHRoaXMuY29udGV4dC5hbGxvd0luLCAnY2FsbGVlIG9mIG5ldyBleHByZXNz
aW9uIGFsd2F5cyBhbGxvdyBpbiBrZXl3b3JkLicpOworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlz
LnN0YXJ0Tm9kZSh0aGlzLmxvb2thaGVhZCk7CisJICAgICAgICB2YXIgZXhwciA9ICh0aGlzLm1h
dGNoS2V5d29yZCgnc3VwZXInKSAmJiB0aGlzLmNvbnRleHQuaW5GdW5jdGlvbkJvZHkpID8gdGhp
cy5wYXJzZVN1cGVyKCkgOgorCSAgICAgICAgICAgIHRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0
aGlzLm1hdGNoS2V5d29yZCgnbmV3JykgPyB0aGlzLnBhcnNlTmV3RXhwcmVzc2lvbiA6IHRoaXMu
cGFyc2VQcmltYXJ5RXhwcmVzc2lvbik7CisJICAgICAgICB3aGlsZSAodHJ1ZSkgeworCSAgICAg
ICAgICAgIGlmICh0aGlzLm1hdGNoKCdbJykpIHsKKwkgICAgICAgICAgICAgICAgdGhpcy5jb250
ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKKwkgICAgICAgICAgICAgICAgdGhpcy5jb250
ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IHRydWU7CisJICAgICAgICAgICAgICAgIHRoaXMuZXhw
ZWN0KCdbJyk7CisJICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMuaXNvbGF0ZUNv
dmVyR3JhbW1hcih0aGlzLnBhcnNlRXhwcmVzc2lvbik7CisJICAgICAgICAgICAgICAgIHRoaXMu
ZXhwZWN0KCddJyk7CisJICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKG5vZGUs
IG5ldyBOb2RlLkNvbXB1dGVkTWVtYmVyRXhwcmVzc2lvbihleHByLCBwcm9wZXJ0eSkpOworCSAg
ICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoKCcuJykpIHsKKwkg
ICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKKwkg
ICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IHRydWU7CisJ
ICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcuJyk7CisJICAgICAgICAgICAgICAgIHZhciBw
cm9wZXJ0eSA9IHRoaXMucGFyc2VJZGVudGlmaWVyTmFtZSgpOworCSAgICAgICAgICAgICAgICBl
eHByID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5TdGF0aWNNZW1iZXJFeHByZXNzaW9u
KGV4cHIsIHByb3BlcnR5KSk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYg
KHRoaXMubG9va2FoZWFkLnR5cGUgPT09IHRva2VuXzEuVG9rZW4uVGVtcGxhdGUgJiYgdGhpcy5s
b29rYWhlYWQuaGVhZCkgeworCSAgICAgICAgICAgICAgICB2YXIgcXVhc2kgPSB0aGlzLnBhcnNl
VGVtcGxhdGVMaXRlcmFsKCk7CisJICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXpl
KG5vZGUsIG5ldyBOb2RlLlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbihleHByLCBxdWFzaSkpOwor
CSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgYnJl
YWs7CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIGV4cHI7CisJ
ICAgIH07CisJICAgIC8vIEVDTUEtMjYyIDEyLjQgVXBkYXRlIEV4cHJlc3Npb25zCisJICAgIFBh
cnNlci5wcm90b3R5cGUucGFyc2VVcGRhdGVFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkgeworCSAg
ICAgICAgdmFyIGV4cHI7CisJICAgICAgICB2YXIgc3RhcnRUb2tlbiA9IHRoaXMubG9va2FoZWFk
OworCSAgICAgICAgaWYgKHRoaXMubWF0Y2goJysrJykgfHwgdGhpcy5tYXRjaCgnLS0nKSkgewor
CSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbik7CisJICAg
ICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgICAgICBleHBy
ID0gdGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VVbmFyeUV4cHJlc3Npb24pOwor
CSAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIGV4cHIudHlwZSA9PT0gc3lu
dGF4XzEuU3ludGF4LklkZW50aWZpZXIgJiYgdGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQo
ZXhwci5uYW1lKSkgeworCSAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IobWVzc2Fn
ZXNfMS5NZXNzYWdlcy5TdHJpY3RMSFNQcmVmaXgpOworCSAgICAgICAgICAgIH0KKwkgICAgICAg
ICAgICBpZiAoIXRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQpIHsKKwkgICAgICAgICAg
ICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSW52YWxpZExIU0lu
QXNzaWdubWVudCk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIHZhciBwcmVmaXggPSB0
cnVlOworCSAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlVw
ZGF0ZUV4cHJlc3Npb24odG9rZW4udmFsdWUsIGV4cHIsIHByZWZpeCkpOworCSAgICAgICAgICAg
IHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTsKKwkgICAgICAgICAgICB0
aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOworCSAgICAgICAgfQorCSAgICAg
ICAgZWxzZSB7CisJICAgICAgICAgICAgZXhwciA9IHRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0
aGlzLnBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCk7CisJICAgICAgICAgICAg
aWYgKCF0aGlzLmhhc0xpbmVUZXJtaW5hdG9yICYmIHRoaXMubG9va2FoZWFkLnR5cGUgPT09IHRv
a2VuXzEuVG9rZW4uUHVuY3R1YXRvcikgeworCSAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRj
aCgnKysnKSB8fCB0aGlzLm1hdGNoKCctLScpKSB7CisJICAgICAgICAgICAgICAgICAgICBpZiAo
dGhpcy5jb250ZXh0LnN0cmljdCAmJiBleHByLnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5JZGVu
dGlmaWVyICYmIHRoaXMuc2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKGV4cHIubmFtZSkpIHsKKwkg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IobWVzc2FnZXNfMS5NZXNz
YWdlcy5TdHJpY3RMSFNQb3N0Zml4KTsKKwkgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAg
ICAgICAgICAgICAgIGlmICghdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCkgeworCSAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3Nh
Z2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAg
ICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNl
OworCSAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBm
YWxzZTsKKwkgICAgICAgICAgICAgICAgICAgIHZhciBvcGVyYXRvciA9IHRoaXMubmV4dFRva2Vu
KCkudmFsdWU7CisJICAgICAgICAgICAgICAgICAgICB2YXIgcHJlZml4ID0gZmFsc2U7CisJICAg
ICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShzdGFy
dFRva2VuKSwgbmV3IE5vZGUuVXBkYXRlRXhwcmVzc2lvbihvcGVyYXRvciwgZXhwciwgcHJlZml4
KSk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAg
ICAgICByZXR1cm4gZXhwcjsKKwkgICAgfTsKKwkgICAgLy8gRUNNQS0yNjIgMTIuNSBVbmFyeSBP
cGVyYXRvcnMKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUF3YWl0RXhwcmVzc2lvbiA9IGZ1
bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAg
ICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgdmFyIGFyZ3VtZW50ID0gdGhpcy5wYXJz
ZVVuYXJ5RXhwcmVzc2lvbigpOworCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwg
bmV3IE5vZGUuQXdhaXRFeHByZXNzaW9uKGFyZ3VtZW50KSk7CisJICAgIH07CisJICAgIFBhcnNl
ci5wcm90b3R5cGUucGFyc2VVbmFyeUV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7CisJICAgICAg
ICB2YXIgZXhwcjsKKwkgICAgICAgIGlmICh0aGlzLm1hdGNoKCcrJykgfHwgdGhpcy5tYXRjaCgn
LScpIHx8IHRoaXMubWF0Y2goJ34nKSB8fCB0aGlzLm1hdGNoKCchJykgfHwKKwkgICAgICAgICAg
ICB0aGlzLm1hdGNoS2V5d29yZCgnZGVsZXRlJykgfHwgdGhpcy5tYXRjaEtleXdvcmQoJ3ZvaWQn
KSB8fCB0aGlzLm1hdGNoS2V5d29yZCgndHlwZW9mJykpIHsKKwkgICAgICAgICAgICB2YXIgbm9k
ZSA9IHRoaXMuc3RhcnROb2RlKHRoaXMubG9va2FoZWFkKTsKKwkgICAgICAgICAgICB2YXIgdG9r
ZW4gPSB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgICAgIGV4cHIgPSB0aGlzLmluaGVyaXRD
b3ZlckdyYW1tYXIodGhpcy5wYXJzZVVuYXJ5RXhwcmVzc2lvbik7CisJICAgICAgICAgICAgZXhw
ciA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuVW5hcnlFeHByZXNzaW9uKHRva2VuLnZh
bHVlLCBleHByKSk7CisJICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QgJiYgZXhw
ci5vcGVyYXRvciA9PT0gJ2RlbGV0ZScgJiYgZXhwci5hcmd1bWVudC50eXBlID09PSBzeW50YXhf
MS5TeW50YXguSWRlbnRpZmllcikgeworCSAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJy
b3IobWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3REZWxldGUpOworCSAgICAgICAgICAgIH0KKwkg
ICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7CisJICAg
ICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKKwkgICAgICAg
IH0KKwkgICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5hd2FpdCAmJiB0aGlzLm1hdGNoQ29u
dGV4dHVhbEtleXdvcmQoJ2F3YWl0JykpIHsKKwkgICAgICAgICAgICBleHByID0gdGhpcy5wYXJz
ZUF3YWl0RXhwcmVzc2lvbigpOworCSAgICAgICAgfQorCSAgICAgICAgZWxzZSB7CisJICAgICAg
ICAgICAgZXhwciA9IHRoaXMucGFyc2VVcGRhdGVFeHByZXNzaW9uKCk7CisJICAgICAgICB9CisJ
ICAgICAgICByZXR1cm4gZXhwcjsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJz
ZUV4cG9uZW50aWF0aW9uRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBz
dGFydFRva2VuID0gdGhpcy5sb29rYWhlYWQ7CisJICAgICAgICB2YXIgZXhwciA9IHRoaXMuaW5o
ZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlVW5hcnlFeHByZXNzaW9uKTsKKwkgICAgICAgIGlm
IChleHByLnR5cGUgIT09IHN5bnRheF8xLlN5bnRheC5VbmFyeUV4cHJlc3Npb24gJiYgdGhpcy5t
YXRjaCgnKionKSkgeworCSAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICAg
ICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNlOworCSAgICAgICAgICAg
IHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7CisJICAgICAgICAgICAgdmFy
IGxlZnQgPSBleHByOworCSAgICAgICAgICAgIHZhciByaWdodCA9IHRoaXMuaXNvbGF0ZUNvdmVy
R3JhbW1hcih0aGlzLnBhcnNlRXhwb25lbnRpYXRpb25FeHByZXNzaW9uKTsKKwkgICAgICAgICAg
ICBleHByID0gdGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShzdGFydFRva2VuKSwgbmV3IE5v
ZGUuQmluYXJ5RXhwcmVzc2lvbignKionLCBsZWZ0LCByaWdodCkpOworCSAgICAgICAgfQorCSAg
ICAgICAgcmV0dXJuIGV4cHI7CisJICAgIH07CisJICAgIC8vIEVDTUEtMjYyIDEyLjYgRXhwb25l
bnRpYXRpb24gT3BlcmF0b3JzCisJICAgIC8vIEVDTUEtMjYyIDEyLjcgTXVsdGlwbGljYXRpdmUg
T3BlcmF0b3JzCisJICAgIC8vIEVDTUEtMjYyIDEyLjggQWRkaXRpdmUgT3BlcmF0b3JzCisJICAg
IC8vIEVDTUEtMjYyIDEyLjkgQml0d2lzZSBTaGlmdCBPcGVyYXRvcnMKKwkgICAgLy8gRUNNQS0y
NjIgMTIuMTAgUmVsYXRpb25hbCBPcGVyYXRvcnMKKwkgICAgLy8gRUNNQS0yNjIgMTIuMTEgRXF1
YWxpdHkgT3BlcmF0b3JzCisJICAgIC8vIEVDTUEtMjYyIDEyLjEyIEJpbmFyeSBCaXR3aXNlIE9w
ZXJhdG9ycworCSAgICAvLyBFQ01BLTI2MiAxMi4xMyBCaW5hcnkgTG9naWNhbCBPcGVyYXRvcnMK
KwkgICAgUGFyc2VyLnByb3RvdHlwZS5iaW5hcnlQcmVjZWRlbmNlID0gZnVuY3Rpb24gKHRva2Vu
KSB7CisJICAgICAgICB2YXIgb3AgPSB0b2tlbi52YWx1ZTsKKwkgICAgICAgIHZhciBwcmVjZWRl
bmNlOworCSAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IHRva2VuXzEuVG9rZW4uUHVuY3R1YXRv
cikgeworCSAgICAgICAgICAgIHByZWNlZGVuY2UgPSB0aGlzLm9wZXJhdG9yUHJlY2VkZW5jZVtv
cF0gfHwgMDsKKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IHRv
a2VuXzEuVG9rZW4uS2V5d29yZCkgeworCSAgICAgICAgICAgIHByZWNlZGVuY2UgPSAob3AgPT09
ICdpbnN0YW5jZW9mJyB8fCAodGhpcy5jb250ZXh0LmFsbG93SW4gJiYgb3AgPT09ICdpbicpKSA/
IDcgOiAwOworCSAgICAgICAgfQorCSAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgcHJlY2Vk
ZW5jZSA9IDA7CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gcHJlY2VkZW5jZTsKKwkgICAg
fTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUJpbmFyeUV4cHJlc3Npb24gPSBmdW5jdGlv
biAoKSB7CisJICAgICAgICB2YXIgc3RhcnRUb2tlbiA9IHRoaXMubG9va2FoZWFkOworCSAgICAg
ICAgdmFyIGV4cHIgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUV4cG9uZW50
aWF0aW9uRXhwcmVzc2lvbik7CisJICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLmxvb2thaGVhZDsK
KwkgICAgICAgIHZhciBwcmVjID0gdGhpcy5iaW5hcnlQcmVjZWRlbmNlKHRva2VuKTsKKwkgICAg
ICAgIGlmIChwcmVjID4gMCkgeworCSAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAg
ICAgICAgICAgdG9rZW4ucHJlYyA9IHByZWM7CisJICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmlz
QXNzaWdubWVudFRhcmdldCA9IGZhbHNlOworCSAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Jp
bmRpbmdFbGVtZW50ID0gZmFsc2U7CisJICAgICAgICAgICAgdmFyIG1hcmtlcnMgPSBbc3RhcnRU
b2tlbiwgdGhpcy5sb29rYWhlYWRdOworCSAgICAgICAgICAgIHZhciBsZWZ0ID0gZXhwcjsKKwkg
ICAgICAgICAgICB2YXIgcmlnaHQgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJz
ZUV4cG9uZW50aWF0aW9uRXhwcmVzc2lvbik7CisJICAgICAgICAgICAgdmFyIHN0YWNrID0gW2xl
ZnQsIHRva2VuLCByaWdodF07CisJICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKwkgICAgICAg
ICAgICAgICAgcHJlYyA9IHRoaXMuYmluYXJ5UHJlY2VkZW5jZSh0aGlzLmxvb2thaGVhZCk7CisJ
ICAgICAgICAgICAgICAgIGlmIChwcmVjIDw9IDApIHsKKwkgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIC8vIFJlZHVjZTogbWFr
ZSBhIGJpbmFyeSBleHByZXNzaW9uIGZyb20gdGhlIHRocmVlIHRvcG1vc3QgZW50cmllcy4KKwkg
ICAgICAgICAgICAgICAgd2hpbGUgKChzdGFjay5sZW5ndGggPiAyKSAmJiAocHJlYyA8PSBzdGFj
a1tzdGFjay5sZW5ndGggLSAyXS5wcmVjKSkgeworCSAgICAgICAgICAgICAgICAgICAgcmlnaHQg
PSBzdGFjay5wb3AoKTsKKwkgICAgICAgICAgICAgICAgICAgIHZhciBvcGVyYXRvciA9IHN0YWNr
LnBvcCgpLnZhbHVlOworCSAgICAgICAgICAgICAgICAgICAgbGVmdCA9IHN0YWNrLnBvcCgpOwor
CSAgICAgICAgICAgICAgICAgICAgbWFya2Vycy5wb3AoKTsKKwkgICAgICAgICAgICAgICAgICAg
IHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUobWFya2Vyc1ttYXJrZXJzLmxlbmd0aCAtIDFdKTsK
KwkgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godGhpcy5maW5hbGl6ZShub2RlLCBuZXcg
Tm9kZS5CaW5hcnlFeHByZXNzaW9uKG9wZXJhdG9yLCBsZWZ0LCByaWdodCkpKTsKKwkgICAgICAg
ICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAvLyBTaGlmdC4KKwkgICAgICAgICAgICAgICAg
dG9rZW4gPSB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgICAgICAgICB0b2tlbi5wcmVjID0g
cHJlYzsKKwkgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh0b2tlbik7CisJICAgICAgICAgICAg
ICAgIG1hcmtlcnMucHVzaCh0aGlzLmxvb2thaGVhZCk7CisJICAgICAgICAgICAgICAgIHN0YWNr
LnB1c2godGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VFeHBvbmVudGlhdGlvbkV4
cHJlc3Npb24pKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgLy8gRmluYWwgcmVkdWNl
IHRvIGNsZWFuLXVwIHRoZSBzdGFjay4KKwkgICAgICAgICAgICB2YXIgaSA9IHN0YWNrLmxlbmd0
aCAtIDE7CisJICAgICAgICAgICAgZXhwciA9IHN0YWNrW2ldOworCSAgICAgICAgICAgIG1hcmtl
cnMucG9wKCk7CisJICAgICAgICAgICAgd2hpbGUgKGkgPiAxKSB7CisJICAgICAgICAgICAgICAg
IHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUobWFya2Vycy5wb3AoKSk7CisJICAgICAgICAgICAg
ICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkJpbmFyeUV4cHJlc3Npb24o
c3RhY2tbaSAtIDFdLnZhbHVlLCBzdGFja1tpIC0gMl0sIGV4cHIpKTsKKwkgICAgICAgICAgICAg
ICAgaSAtPSAyOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiBl
eHByOworCSAgICB9OworCSAgICAvLyBFQ01BLTI2MiAxMi4xNCBDb25kaXRpb25hbCBPcGVyYXRv
cgorCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uID0gZnVu
Y3Rpb24gKCkgeworCSAgICAgICAgdmFyIHN0YXJ0VG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKKwkg
ICAgICAgIHZhciBleHByID0gdGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VCaW5h
cnlFeHByZXNzaW9uKTsKKwkgICAgICAgIGlmICh0aGlzLm1hdGNoKCc/JykpIHsKKwkgICAgICAg
ICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgICAgIHZhciBwcmV2aW91c0FsbG93SW4g
PSB0aGlzLmNvbnRleHQuYWxsb3dJbjsKKwkgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dJ
biA9IHRydWU7CisJICAgICAgICAgICAgdmFyIGNvbnNlcXVlbnQgPSB0aGlzLmlzb2xhdGVDb3Zl
ckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKKwkgICAgICAgICAgICB0
aGlzLmNvbnRleHQuYWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJbjsKKwkgICAgICAgICAgICB0aGlz
LmV4cGVjdCgnOicpOworCSAgICAgICAgICAgIHZhciBhbHRlcm5hdGUgPSB0aGlzLmlzb2xhdGVD
b3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKKwkgICAgICAgICAg
ICBleHByID0gdGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShzdGFydFRva2VuKSwgbmV3IE5v
ZGUuQ29uZGl0aW9uYWxFeHByZXNzaW9uKGV4cHIsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZSkpOwor
CSAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTsKKwkg
ICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOworCSAgICAg
ICAgfQorCSAgICAgICAgcmV0dXJuIGV4cHI7CisJICAgIH07CisJICAgIC8vIEVDTUEtMjYyIDEy
LjE1IEFzc2lnbm1lbnQgT3BlcmF0b3JzCisJICAgIFBhcnNlci5wcm90b3R5cGUuY2hlY2tQYXR0
ZXJuUGFyYW0gPSBmdW5jdGlvbiAob3B0aW9ucywgcGFyYW0pIHsKKwkgICAgICAgIHN3aXRjaCAo
cGFyYW0udHlwZSkgeworCSAgICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4LklkZW50aWZp
ZXI6CisJICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVQYXJhbShvcHRpb25zLCBwYXJhbSwg
cGFyYW0ubmFtZSk7CisJICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIGNhc2Ug
c3ludGF4XzEuU3ludGF4LlJlc3RFbGVtZW50OgorCSAgICAgICAgICAgICAgICB0aGlzLmNoZWNr
UGF0dGVyblBhcmFtKG9wdGlvbnMsIHBhcmFtLmFyZ3VtZW50KTsKKwkgICAgICAgICAgICAgICAg
YnJlYWs7CisJICAgICAgICAgICAgY2FzZSBzeW50YXhfMS5TeW50YXguQXNzaWdubWVudFBhdHRl
cm46CisJICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tQYXR0ZXJuUGFyYW0ob3B0aW9ucywgcGFy
YW0ubGVmdCk7CisJICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIGNhc2Ugc3lu
dGF4XzEuU3ludGF4LkFycmF5UGF0dGVybjoKKwkgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBwYXJhbS5lbGVtZW50cy5sZW5ndGg7IGkrKykgeworCSAgICAgICAgICAgICAgICAg
ICAgaWYgKHBhcmFtLmVsZW1lbnRzW2ldICE9PSBudWxsKSB7CisJICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5jaGVja1BhdHRlcm5QYXJhbShvcHRpb25zLCBwYXJhbS5lbGVtZW50c1tpXSk7
CisJICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAg
ICAgICAgYnJlYWs7CisJICAgICAgICAgICAgY2FzZSBzeW50YXhfMS5TeW50YXguT2JqZWN0UGF0
dGVybjoKKwkgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbS5wcm9wZXJ0
aWVzLmxlbmd0aDsgaSsrKSB7CisJICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrUGF0dGVy
blBhcmFtKG9wdGlvbnMsIHBhcmFtLnByb3BlcnRpZXNbaV0udmFsdWUpOworCSAgICAgICAgICAg
ICAgICB9CisJICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIGRlZmF1bHQ6CisJ
ICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgfQorCSAgICB9OworCSAgICBQYXJzZXIu
cHJvdG90eXBlLnJlaW50ZXJwcmV0QXNDb3ZlckZvcm1hbHNMaXN0ID0gZnVuY3Rpb24gKGV4cHIp
IHsKKwkgICAgICAgIHZhciBwYXJhbXMgPSBbZXhwcl07CisJICAgICAgICB2YXIgb3B0aW9uczsK
KwkgICAgICAgIHZhciBhc3luY0Fycm93ID0gZmFsc2U7CisJICAgICAgICBzd2l0Y2ggKGV4cHIu
dHlwZSkgeworCSAgICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4LklkZW50aWZpZXI6CisJ
ICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIGNhc2UgQXJyb3dQYXJhbWV0ZXJQ
bGFjZUhvbGRlcjoKKwkgICAgICAgICAgICAgICAgcGFyYW1zID0gZXhwci5wYXJhbXM7CisJICAg
ICAgICAgICAgICAgIGFzeW5jQXJyb3cgPSBleHByLmFzeW5jOworCSAgICAgICAgICAgICAgICBi
cmVhazsKKwkgICAgICAgICAgICBkZWZhdWx0OgorCSAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bDsKKwkgICAgICAgIH0KKwkgICAgICAgIG9wdGlvbnMgPSB7CisJICAgICAgICAgICAgcGFyYW1T
ZXQ6IHt9CisJICAgICAgICB9OworCSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbXMu
bGVuZ3RoOyArK2kpIHsKKwkgICAgICAgICAgICB2YXIgcGFyYW0gPSBwYXJhbXNbaV07CisJICAg
ICAgICAgICAgaWYgKHBhcmFtLnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5Bc3NpZ25tZW50UGF0
dGVybikgeworCSAgICAgICAgICAgICAgICBpZiAocGFyYW0ucmlnaHQudHlwZSA9PT0gc3ludGF4
XzEuU3ludGF4LllpZWxkRXhwcmVzc2lvbikgeworCSAgICAgICAgICAgICAgICAgICAgaWYgKHBh
cmFtLnJpZ2h0LmFyZ3VtZW50KSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJv
d1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7CisJICAgICAgICAgICAgICAgICAgICB9
CisJICAgICAgICAgICAgICAgICAgICBwYXJhbS5yaWdodC50eXBlID0gc3ludGF4XzEuU3ludGF4
LklkZW50aWZpZXI7CisJICAgICAgICAgICAgICAgICAgICBwYXJhbS5yaWdodC5uYW1lID0gJ3lp
ZWxkJzsKKwkgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJhbS5yaWdodC5hcmd1bWVudDsK
KwkgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJhbS5yaWdodC5kZWxlZ2F0ZTsKKwkgICAg
ICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIGlmIChhc3lu
Y0Fycm93ICYmIHBhcmFtLnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVyICYmIHBh
cmFtLm5hbWUgPT09ICdhd2FpdCcpIHsKKwkgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhw
ZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAg
IHRoaXMuY2hlY2tQYXR0ZXJuUGFyYW0ob3B0aW9ucywgcGFyYW0pOworCSAgICAgICAgICAgIHBh
cmFtc1tpXSA9IHBhcmFtOworCSAgICAgICAgfQorCSAgICAgICAgaWYgKHRoaXMuY29udGV4dC5z
dHJpY3QgfHwgIXRoaXMuY29udGV4dC5hbGxvd1lpZWxkKSB7CisJICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyArK2kpIHsKKwkgICAgICAgICAgICAgICAgdmFy
IHBhcmFtID0gcGFyYW1zW2ldOworCSAgICAgICAgICAgICAgICBpZiAocGFyYW0udHlwZSA9PT0g
c3ludGF4XzEuU3ludGF4LllpZWxkRXhwcmVzc2lvbikgeworCSAgICAgICAgICAgICAgICAgICAg
dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7CisJICAgICAgICAgICAg
ICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICBpZiAob3B0aW9ucy5t
ZXNzYWdlID09PSBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdFBhcmFtRHVwZSkgeworCSAgICAg
ICAgICAgIHZhciB0b2tlbiA9IHRoaXMuY29udGV4dC5zdHJpY3QgPyBvcHRpb25zLnN0cmljdGVk
IDogb3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQ7CisJICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhw
ZWN0ZWRUb2tlbih0b2tlbiwgb3B0aW9ucy5tZXNzYWdlKTsKKwkgICAgICAgIH0KKwkgICAgICAg
IHJldHVybiB7CisJICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsCisJICAgICAgICAgICAgc3Ry
aWN0ZWQ6IG9wdGlvbnMuc3RyaWN0ZWQsCisJICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkOiBv
cHRpb25zLmZpcnN0UmVzdHJpY3RlZCwKKwkgICAgICAgICAgICBtZXNzYWdlOiBvcHRpb25zLm1l
c3NhZ2UKKwkgICAgICAgIH07CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VB
c3NpZ25tZW50RXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBleHByOwor
CSAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCAmJiB0aGlzLm1hdGNoS2V5d29y
ZCgneWllbGQnKSkgeworCSAgICAgICAgICAgIGV4cHIgPSB0aGlzLnBhcnNlWWllbGRFeHByZXNz
aW9uKCk7CisJICAgICAgICB9CisJICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICB2YXIgc3Rh
cnRUb2tlbiA9IHRoaXMubG9va2FoZWFkOworCSAgICAgICAgICAgIHZhciB0b2tlbiA9IHN0YXJ0
VG9rZW47CisJICAgICAgICAgICAgZXhwciA9IHRoaXMucGFyc2VDb25kaXRpb25hbEV4cHJlc3Np
b24oKTsKKwkgICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gdG9rZW5fMS5Ub2tlbi5JZGVu
dGlmaWVyICYmICh0b2tlbi5saW5lTnVtYmVyID09PSB0aGlzLmxvb2thaGVhZC5saW5lTnVtYmVy
KSAmJiB0b2tlbi52YWx1ZSA9PT0gJ2FzeW5jJyAmJiAodGhpcy5sb29rYWhlYWQudHlwZSA9PT0g
dG9rZW5fMS5Ub2tlbi5JZGVudGlmaWVyKSkgeworCSAgICAgICAgICAgICAgICB2YXIgYXJnID0g
dGhpcy5wYXJzZVByaW1hcnlFeHByZXNzaW9uKCk7CisJICAgICAgICAgICAgICAgIGV4cHIgPSB7
CisJICAgICAgICAgICAgICAgICAgICB0eXBlOiBBcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVyLAor
CSAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbYXJnXSwKKwkgICAgICAgICAgICAgICAgICAg
IGFzeW5jOiB0cnVlCisJICAgICAgICAgICAgICAgIH07CisJICAgICAgICAgICAgfQorCSAgICAg
ICAgICAgIGlmIChleHByLnR5cGUgPT09IEFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIgfHwgdGhp
cy5tYXRjaCgnPT4nKSkgeworCSAgICAgICAgICAgICAgICAvLyBFQ01BLTI2MiAxNC4yIEFycm93
IEZ1bmN0aW9uIERlZmluaXRpb25zCisJICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fz
c2lnbm1lbnRUYXJnZXQgPSBmYWxzZTsKKwkgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0Lmlz
QmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKKwkgICAgICAgICAgICAgICAgdmFyIGlzQXN5bmMgPSBl
eHByLmFzeW5jOworCSAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IHRoaXMucmVpbnRlcnByZXRB
c0NvdmVyRm9ybWFsc0xpc3QoZXhwcik7CisJICAgICAgICAgICAgICAgIGlmIChsaXN0KSB7CisJ
ICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNMaW5lVGVybWluYXRvcikgeworCSAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29r
YWhlYWQpOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgdGhp
cy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IG51bGw7CisJICAgICAg
ICAgICAgICAgICAgICB2YXIgcHJldmlvdXNTdHJpY3QgPSB0aGlzLmNvbnRleHQuc3RyaWN0Owor
CSAgICAgICAgICAgICAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dZaWVsZCA9IHRoaXMuY29udGV4
dC5hbGxvd1lpZWxkOworCSAgICAgICAgICAgICAgICAgICAgdmFyIHByZXZpb3VzQXdhaXQgPSB0
aGlzLmNvbnRleHQuYXdhaXQ7CisJICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxs
b3dZaWVsZCA9IHRydWU7CisJICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYXdhaXQg
PSBpc0FzeW5jOworCSAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9k
ZShzdGFydFRva2VuKTsKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCc9PicpOwor
CSAgICAgICAgICAgICAgICAgICAgdmFyIGJvZHkgPSB0aGlzLm1hdGNoKCd7JykgPyB0aGlzLnBh
cnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpIDoKKwkgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsK
KwkgICAgICAgICAgICAgICAgICAgIHZhciBleHByZXNzaW9uID0gYm9keS50eXBlICE9PSBzeW50
YXhfMS5TeW50YXguQmxvY2tTdGF0ZW1lbnQ7CisJICAgICAgICAgICAgICAgICAgICBpZiAodGhp
cy5jb250ZXh0LnN0cmljdCAmJiBsaXN0LmZpcnN0UmVzdHJpY3RlZCkgeworCSAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4obGlzdC5maXJzdFJlc3RyaWN0
ZWQsIGxpc3QubWVzc2FnZSk7CisJICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAg
ICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiBsaXN0LnN0cmljdGVkKSB7CisJICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihsaXN0LnN0
cmljdGVkLCBsaXN0Lm1lc3NhZ2UpOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAg
ICAgICAgICAgICAgZXhwciA9IGlzQXN5bmMgPyB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2Rl
LkFzeW5jQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24obGlzdC5wYXJhbXMsIGJvZHksIGV4cHJlc3Np
b24pKSA6CisJICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5hbGl6ZShub2RlLCBuZXcg
Tm9kZS5BcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbihsaXN0LnBhcmFtcywgYm9keSwgZXhwcmVzc2lv
bikpOworCSAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LnN0cmljdCA9IHByZXZpb3Vz
U3RyaWN0OworCSAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSBw
cmV2aW91c0FsbG93WWllbGQ7CisJICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYXdh
aXQgPSBwcmV2aW91c0F3YWl0OworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQor
CSAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaEFzc2ln
bigpKSB7CisJICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29udGV4dC5pc0Fzc2lnbm1l
bnRUYXJnZXQpIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3Io
bWVzc2FnZXNfMS5NZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KTsKKwkgICAgICAgICAg
ICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0
ICYmIGV4cHIudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LklkZW50aWZpZXIpIHsKKwkgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgaWQgPSAoZXhwcik7CisJICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHRoaXMuc2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKGlkLm5hbWUpKSB7CisJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4s
IG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0TEhTQXNzaWdubWVudCk7CisJICAgICAgICAgICAg
ICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNjYW5uZXIu
aXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKGlkLm5hbWUpKSB7CisJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1lc3NhZ2VzXzEu
TWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICB9
CisJICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMu
bWF0Y2goJz0nKSkgeworCSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fz
c2lnbm1lbnRUYXJnZXQgPSBmYWxzZTsKKwkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNv
bnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOworCSAgICAgICAgICAgICAgICAgICAgfQor
CSAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhwcik7CisJICAgICAgICAgICAgICAg
ICAgICB9CisJICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7CisJ
ICAgICAgICAgICAgICAgICAgICB2YXIgcmlnaHQgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIo
dGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKKwkgICAgICAgICAgICAgICAgICAgIGV4
cHIgPSB0aGlzLmZpbmFsaXplKHRoaXMuc3RhcnROb2RlKHN0YXJ0VG9rZW4pLCBuZXcgTm9kZS5B
c3NpZ25tZW50RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgZXhwciwgcmlnaHQpKTsKKwkgICAgICAg
ICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3Ig
PSBudWxsOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQor
CSAgICAgICAgcmV0dXJuIGV4cHI7CisJICAgIH07CisJICAgIC8vIEVDTUEtMjYyIDEyLjE2IENv
bW1hIE9wZXJhdG9yCisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VFeHByZXNzaW9uID0gZnVu
Y3Rpb24gKCkgeworCSAgICAgICAgdmFyIHN0YXJ0VG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKKwkg
ICAgICAgIHZhciBleHByID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3Np
Z25tZW50RXhwcmVzc2lvbik7CisJICAgICAgICBpZiAodGhpcy5tYXRjaCgnLCcpKSB7CisJICAg
ICAgICAgICAgdmFyIGV4cHJlc3Npb25zID0gW107CisJICAgICAgICAgICAgZXhwcmVzc2lvbnMu
cHVzaChleHByKTsKKwkgICAgICAgICAgICB3aGlsZSAodGhpcy5zdGFydE1hcmtlci5pbmRleCA8
IHRoaXMuc2Nhbm5lci5sZW5ndGgpIHsKKwkgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNo
KCcsJykpIHsKKwkgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICB9
CisJICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICAgICAgICAgIGV4
cHJlc3Npb25zLnB1c2godGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25t
ZW50RXhwcmVzc2lvbikpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBleHByID0gdGhp
cy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShzdGFydFRva2VuKSwgbmV3IE5vZGUuU2VxdWVuY2VF
eHByZXNzaW9uKGV4cHJlc3Npb25zKSk7CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gZXhw
cjsKKwkgICAgfTsKKwkgICAgLy8gRUNNQS0yNjIgMTMuMiBCbG9jaworCSAgICBQYXJzZXIucHJv
dG90eXBlLnBhcnNlU3RhdGVtZW50TGlzdEl0ZW0gPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2
YXIgc3RhdGVtZW50OworCSAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9
IHRydWU7CisJICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IHRydWU7CisJ
ICAgICAgICBpZiAodGhpcy5sb29rYWhlYWQudHlwZSA9PT0gdG9rZW5fMS5Ub2tlbi5LZXl3b3Jk
KSB7CisJICAgICAgICAgICAgc3dpdGNoICh0aGlzLmxvb2thaGVhZC52YWx1ZSkgeworCSAgICAg
ICAgICAgICAgICBjYXNlICdleHBvcnQnOgorCSAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlz
LmNvbnRleHQuaXNNb2R1bGUpIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVy
YXRlVW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkLCBtZXNzYWdlc18xLk1lc3NhZ2VzLkls
bGVnYWxFeHBvcnREZWNsYXJhdGlvbik7CisJICAgICAgICAgICAgICAgICAgICB9CisJICAgICAg
ICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlRXhwb3J0RGVjbGFyYXRpb24oKTsK
KwkgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICBjYXNlICdpbXBv
cnQnOgorCSAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQuaXNNb2R1bGUpIHsK
KwkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRo
aXMubG9va2FoZWFkLCBtZXNzYWdlc18xLk1lc3NhZ2VzLklsbGVnYWxJbXBvcnREZWNsYXJhdGlv
bik7CisJICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICBzdGF0ZW1l
bnQgPSB0aGlzLnBhcnNlSW1wb3J0RGVjbGFyYXRpb24oKTsKKwkgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCSAgICAgICAgICAgICAgICBjYXNlICdjb25zdCc6CisJICAgICAgICAgICAgICAg
ICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlTGV4aWNhbERlY2xhcmF0aW9uKHsgaW5Gb3I6IGZh
bHNlIH0pOworCSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAgIGNh
c2UgJ2Z1bmN0aW9uJzoKKwkgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFy
c2VGdW5jdGlvbkRlY2xhcmF0aW9uKCk7CisJICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkg
ICAgICAgICAgICAgICAgY2FzZSAnY2xhc3MnOgorCSAgICAgICAgICAgICAgICAgICAgc3RhdGVt
ZW50ID0gdGhpcy5wYXJzZUNsYXNzRGVjbGFyYXRpb24oKTsKKwkgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCSAgICAgICAgICAgICAgICBjYXNlICdsZXQnOgorCSAgICAgICAgICAgICAgICAg
ICAgc3RhdGVtZW50ID0gdGhpcy5pc0xleGljYWxEZWNsYXJhdGlvbigpID8gdGhpcy5wYXJzZUxl
eGljYWxEZWNsYXJhdGlvbih7IGluRm9yOiBmYWxzZSB9KSA6IHRoaXMucGFyc2VTdGF0ZW1lbnQo
KTsKKwkgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICBkZWZhdWx0
OgorCSAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZVN0YXRlbWVudCgp
OworCSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgfQorCSAgICAgICAg
fQorCSAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZVN0
YXRlbWVudCgpOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHN0YXRlbWVudDsKKwkgICAg
fTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUJsb2NrID0gZnVuY3Rpb24gKCkgeworCSAg
ICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHRoaXMuZXhwZWN0
KCd7Jyk7CisJICAgICAgICB2YXIgYmxvY2sgPSBbXTsKKwkgICAgICAgIHdoaWxlICh0cnVlKSB7
CisJICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJ30nKSkgeworCSAgICAgICAgICAgICAgICBi
cmVhazsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgYmxvY2sucHVzaCh0aGlzLnBhcnNl
U3RhdGVtZW50TGlzdEl0ZW0oKSk7CisJICAgICAgICB9CisJICAgICAgICB0aGlzLmV4cGVjdCgn
fScpOworCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQmxvY2tT
dGF0ZW1lbnQoYmxvY2spKTsKKwkgICAgfTsKKwkgICAgLy8gRUNNQS0yNjIgMTMuMy4xIExldCBh
bmQgQ29uc3QgRGVjbGFyYXRpb25zCisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VMZXhpY2Fs
QmluZGluZyA9IGZ1bmN0aW9uIChraW5kLCBvcHRpb25zKSB7CisJICAgICAgICB2YXIgbm9kZSA9
IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdmFyIHBhcmFtcyA9IFtdOworCSAgICAgICAg
dmFyIGlkID0gdGhpcy5wYXJzZVBhdHRlcm4ocGFyYW1zLCBraW5kKTsKKwkgICAgICAgIC8vIEVD
TUEtMjYyIDEyLjIuMQorCSAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QgJiYgaWQudHlw
ZSA9PT0gc3ludGF4XzEuU3ludGF4LklkZW50aWZpZXIpIHsKKwkgICAgICAgICAgICBpZiAodGhp
cy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQoKGlkKS5uYW1lKSkgeworCSAgICAgICAgICAgICAg
ICB0aGlzLnRvbGVyYXRlRXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RWYXJOYW1lKTsK
KwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICB2YXIgaW5pdCA9IG51bGw7CisJ
ICAgICAgICBpZiAoa2luZCA9PT0gJ2NvbnN0JykgeworCSAgICAgICAgICAgIGlmICghdGhpcy5t
YXRjaEtleXdvcmQoJ2luJykgJiYgIXRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnb2YnKSkg
eworCSAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnPScpKSB7CisJICAgICAgICAgICAg
ICAgICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgICAgICAgICAgICAgaW5pdCA9IHRo
aXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOwor
CSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAg
ICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuRGVjbGFyYXRpb25N
aXNzaW5nSW5pdGlhbGl6ZXIsICdjb25zdCcpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAg
ICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgZWxzZSBpZiAoKCFvcHRpb25zLmluRm9yICYm
IGlkLnR5cGUgIT09IHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVyKSB8fCB0aGlzLm1hdGNoKCc9
JykpIHsKKwkgICAgICAgICAgICB0aGlzLmV4cGVjdCgnPScpOworCSAgICAgICAgICAgIGluaXQg
PSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9u
KTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBO
b2RlLlZhcmlhYmxlRGVjbGFyYXRvcihpZCwgaW5pdCkpOworCSAgICB9OworCSAgICBQYXJzZXIu
cHJvdG90eXBlLnBhcnNlQmluZGluZ0xpc3QgPSBmdW5jdGlvbiAoa2luZCwgb3B0aW9ucykgewor
CSAgICAgICAgdmFyIGxpc3QgPSBbdGhpcy5wYXJzZUxleGljYWxCaW5kaW5nKGtpbmQsIG9wdGlv
bnMpXTsKKwkgICAgICAgIHdoaWxlICh0aGlzLm1hdGNoKCcsJykpIHsKKwkgICAgICAgICAgICB0
aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgICAgIGxpc3QucHVzaCh0aGlzLnBhcnNlTGV4aWNh
bEJpbmRpbmcoa2luZCwgb3B0aW9ucykpOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIGxp
c3Q7CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUuaXNMZXhpY2FsRGVjbGFyYXRpb24g
PSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgcHJldmlvdXNJbmRleCA9IHRoaXMuc2Nhbm5l
ci5pbmRleDsKKwkgICAgICAgIHZhciBwcmV2aW91c0xpbmVOdW1iZXIgPSB0aGlzLnNjYW5uZXIu
bGluZU51bWJlcjsKKwkgICAgICAgIHZhciBwcmV2aW91c0xpbmVTdGFydCA9IHRoaXMuc2Nhbm5l
ci5saW5lU3RhcnQ7CisJICAgICAgICB0aGlzLmNvbGxlY3RDb21tZW50cygpOworCSAgICAgICAg
dmFyIG5leHQgPSB0aGlzLnNjYW5uZXIubGV4KCk7CisJICAgICAgICB0aGlzLnNjYW5uZXIuaW5k
ZXggPSBwcmV2aW91c0luZGV4OworCSAgICAgICAgdGhpcy5zY2FubmVyLmxpbmVOdW1iZXIgPSBw
cmV2aW91c0xpbmVOdW1iZXI7CisJICAgICAgICB0aGlzLnNjYW5uZXIubGluZVN0YXJ0ID0gcHJl
dmlvdXNMaW5lU3RhcnQ7CisJICAgICAgICByZXR1cm4gKG5leHQudHlwZSA9PT0gdG9rZW5fMS5U
b2tlbi5JZGVudGlmaWVyKSB8fAorCSAgICAgICAgICAgIChuZXh0LnR5cGUgPT09IHRva2VuXzEu
VG9rZW4uUHVuY3R1YXRvciAmJiBuZXh0LnZhbHVlID09PSAnWycpIHx8CisJICAgICAgICAgICAg
KG5leHQudHlwZSA9PT0gdG9rZW5fMS5Ub2tlbi5QdW5jdHVhdG9yICYmIG5leHQudmFsdWUgPT09
ICd7JykgfHwKKwkgICAgICAgICAgICAobmV4dC50eXBlID09PSB0b2tlbl8xLlRva2VuLktleXdv
cmQgJiYgbmV4dC52YWx1ZSA9PT0gJ2xldCcpIHx8CisJICAgICAgICAgICAgKG5leHQudHlwZSA9
PT0gdG9rZW5fMS5Ub2tlbi5LZXl3b3JkICYmIG5leHQudmFsdWUgPT09ICd5aWVsZCcpOworCSAg
ICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlTGV4aWNhbERlY2xhcmF0aW9uID0gZnVu
Y3Rpb24gKG9wdGlvbnMpIHsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7
CisJICAgICAgICB2YXIga2luZCA9IHRoaXMubmV4dFRva2VuKCkudmFsdWU7CisJICAgICAgICBh
c3NlcnRfMS5hc3NlcnQoa2luZCA9PT0gJ2xldCcgfHwga2luZCA9PT0gJ2NvbnN0JywgJ0xleGlj
YWwgZGVjbGFyYXRpb24gbXVzdCBiZSBlaXRoZXIgbGV0IG9yIGNvbnN0Jyk7CisJICAgICAgICB2
YXIgZGVjbGFyYXRpb25zID0gdGhpcy5wYXJzZUJpbmRpbmdMaXN0KGtpbmQsIG9wdGlvbnMpOwor
CSAgICAgICAgdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7CisJICAgICAgICByZXR1cm4gdGhpcy5m
aW5hbGl6ZShub2RlLCBuZXcgTm9kZS5WYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywg
a2luZCkpOworCSAgICB9OworCSAgICAvLyBFQ01BLTI2MiAxMy4zLjMgRGVzdHJ1Y3R1cmluZyBC
aW5kaW5nIFBhdHRlcm5zCisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VCaW5kaW5nUmVzdEVs
ZW1lbnQgPSBmdW5jdGlvbiAocGFyYW1zLCBraW5kKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRo
aXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdGhpcy5leHBlY3QoJy4uLicpOworCSAgICAgICAg
cGFyYW1zLnB1c2godGhpcy5sb29rYWhlYWQpOworCSAgICAgICAgdmFyIGFyZyA9IHRoaXMucGFy
c2VWYXJpYWJsZUlkZW50aWZpZXIoa2luZCk7CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6
ZShub2RlLCBuZXcgTm9kZS5SZXN0RWxlbWVudChhcmcpKTsKKwkgICAgfTsKKwkgICAgUGFyc2Vy
LnByb3RvdHlwZS5wYXJzZUFycmF5UGF0dGVybiA9IGZ1bmN0aW9uIChwYXJhbXMsIGtpbmQpIHsK
KwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICB0aGlzLmV4
cGVjdCgnWycpOworCSAgICAgICAgdmFyIGVsZW1lbnRzID0gW107CisJICAgICAgICB3aGlsZSAo
IXRoaXMubWF0Y2goJ10nKSkgeworCSAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCcsJykpIHsK
KwkgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgICAgICAgICAgZWxl
bWVudHMucHVzaChudWxsKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSB7CisJ
ICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCcuLi4nKSkgeworCSAgICAgICAgICAgICAg
ICAgICAgZWxlbWVudHMucHVzaCh0aGlzLnBhcnNlQmluZGluZ1Jlc3RFbGVtZW50KHBhcmFtcywg
a2luZCkpOworCSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAgIH0K
KwkgICAgICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgICAgICBlbGVtZW50cy5w
dXNoKHRoaXMucGFyc2VQYXR0ZXJuV2l0aERlZmF1bHQocGFyYW1zLCBraW5kKSk7CisJICAgICAg
ICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCddJykpIHsKKwkg
ICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcsJyk7CisJICAgICAgICAgICAgICAgIH0K
KwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICB0aGlzLmV4cGVjdCgnXScpOwor
CSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQXJyYXlQYXR0ZXJu
KGVsZW1lbnRzKSk7CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VQcm9wZXJ0
eVBhdHRlcm4gPSBmdW5jdGlvbiAocGFyYW1zLCBraW5kKSB7CisJICAgICAgICB2YXIgbm9kZSA9
IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdmFyIGNvbXB1dGVkID0gZmFsc2U7CisJICAg
ICAgICB2YXIgc2hvcnRoYW5kID0gZmFsc2U7CisJICAgICAgICB2YXIgbWV0aG9kID0gZmFsc2U7
CisJICAgICAgICB2YXIga2V5OworCSAgICAgICAgdmFyIHZhbHVlOworCSAgICAgICAgaWYgKHRo
aXMubG9va2FoZWFkLnR5cGUgPT09IHRva2VuXzEuVG9rZW4uSWRlbnRpZmllcikgeworCSAgICAg
ICAgICAgIHZhciBrZXlUb2tlbiA9IHRoaXMubG9va2FoZWFkOworCSAgICAgICAgICAgIGtleSA9
IHRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKwkgICAgICAgICAgICB2YXIgaW5pdCA9
IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuSWRlbnRpZmllcihrZXlUb2tlbi52YWx1ZSkp
OworCSAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCc9JykpIHsKKwkgICAgICAgICAgICAgICAg
cGFyYW1zLnB1c2goa2V5VG9rZW4pOworCSAgICAgICAgICAgICAgICBzaG9ydGhhbmQgPSB0cnVl
OworCSAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgICAgICAgICB2
YXIgZXhwciA9IHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworCSAgICAgICAgICAg
ICAgICB2YWx1ZSA9IHRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoa2V5VG9rZW4pLCBuZXcg
Tm9kZS5Bc3NpZ25tZW50UGF0dGVybihpbml0LCBleHByKSk7CisJICAgICAgICAgICAgfQorCSAg
ICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLm1hdGNoKCc6JykpIHsKKwkgICAgICAgICAgICAgICAg
cGFyYW1zLnB1c2goa2V5VG9rZW4pOworCSAgICAgICAgICAgICAgICBzaG9ydGhhbmQgPSB0cnVl
OworCSAgICAgICAgICAgICAgICB2YWx1ZSA9IGluaXQ7CisJICAgICAgICAgICAgfQorCSAgICAg
ICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnOicpOworCSAgICAg
ICAgICAgICAgICB2YWx1ZSA9IHRoaXMucGFyc2VQYXR0ZXJuV2l0aERlZmF1bHQocGFyYW1zLCBr
aW5kKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICBlbHNlIHsKKwkgICAg
ICAgICAgICBjb21wdXRlZCA9IHRoaXMubWF0Y2goJ1snKTsKKwkgICAgICAgICAgICBrZXkgPSB0
aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsKKwkgICAgICAgICAgICB0aGlzLmV4cGVjdCgn
OicpOworCSAgICAgICAgICAgIHZhbHVlID0gdGhpcy5wYXJzZVBhdHRlcm5XaXRoRGVmYXVsdChw
YXJhbXMsIGtpbmQpOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUo
bm9kZSwgbmV3IE5vZGUuUHJvcGVydHkoJ2luaXQnLCBrZXksIGNvbXB1dGVkLCB2YWx1ZSwgbWV0
aG9kLCBzaG9ydGhhbmQpKTsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZU9i
amVjdFBhdHRlcm4gPSBmdW5jdGlvbiAocGFyYW1zLCBraW5kKSB7CisJICAgICAgICB2YXIgbm9k
ZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBbXTsKKwkg
ICAgICAgIHRoaXMuZXhwZWN0KCd7Jyk7CisJICAgICAgICB3aGlsZSAoIXRoaXMubWF0Y2goJ30n
KSkgeworCSAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaCh0aGlzLnBhcnNlUHJvcGVydHlQYXR0
ZXJuKHBhcmFtcywga2luZCkpOworCSAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnfScpKSB7
CisJICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcsJyk7CisJICAgICAgICAgICAgfQorCSAg
ICAgICAgfQorCSAgICAgICAgdGhpcy5leHBlY3QoJ30nKTsKKwkgICAgICAgIHJldHVybiB0aGlz
LmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLk9iamVjdFBhdHRlcm4ocHJvcGVydGllcykpOworCSAg
ICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlUGF0dGVybiA9IGZ1bmN0aW9uIChwYXJh
bXMsIGtpbmQpIHsKKwkgICAgICAgIHZhciBwYXR0ZXJuOworCSAgICAgICAgaWYgKHRoaXMubWF0
Y2goJ1snKSkgeworCSAgICAgICAgICAgIHBhdHRlcm4gPSB0aGlzLnBhcnNlQXJyYXlQYXR0ZXJu
KHBhcmFtcywga2luZCk7CisJICAgICAgICB9CisJICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNo
KCd7JykpIHsKKwkgICAgICAgICAgICBwYXR0ZXJuID0gdGhpcy5wYXJzZU9iamVjdFBhdHRlcm4o
cGFyYW1zLCBraW5kKTsKKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgeworCSAgICAgICAgICAg
IGlmICh0aGlzLm1hdGNoS2V5d29yZCgnbGV0JykgJiYgKGtpbmQgPT09ICdjb25zdCcgfHwga2lu
ZCA9PT0gJ2xldCcpKSB7CisJICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVk
VG9rZW4odGhpcy5sb29rYWhlYWQsIG1lc3NhZ2VzXzEuTWVzc2FnZXMuTGV0SW5MZXhpY2FsQmlu
ZGluZyk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIHBhcmFtcy5wdXNoKHRoaXMubG9v
a2FoZWFkKTsKKwkgICAgICAgICAgICBwYXR0ZXJuID0gdGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRp
ZmllcihraW5kKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiBwYXR0ZXJuOworCSAgICB9
OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlUGF0dGVybldpdGhEZWZhdWx0ID0gZnVuY3Rp
b24gKHBhcmFtcywga2luZCkgeworCSAgICAgICAgdmFyIHN0YXJ0VG9rZW4gPSB0aGlzLmxvb2th
aGVhZDsKKwkgICAgICAgIHZhciBwYXR0ZXJuID0gdGhpcy5wYXJzZVBhdHRlcm4ocGFyYW1zLCBr
aW5kKTsKKwkgICAgICAgIGlmICh0aGlzLm1hdGNoKCc9JykpIHsKKwkgICAgICAgICAgICB0aGlz
Lm5leHRUb2tlbigpOworCSAgICAgICAgICAgIHZhciBwcmV2aW91c0FsbG93WWllbGQgPSB0aGlz
LmNvbnRleHQuYWxsb3dZaWVsZDsKKwkgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVs
ZCA9IHRydWU7CisJICAgICAgICAgICAgdmFyIHJpZ2h0ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFt
bWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7CisJICAgICAgICAgICAgdGhpcy5j
b250ZXh0LmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7CisJICAgICAgICAgICAgcGF0
dGVybiA9IHRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBOb2Rl
LkFzc2lnbm1lbnRQYXR0ZXJuKHBhdHRlcm4sIHJpZ2h0KSk7CisJICAgICAgICB9CisJICAgICAg
ICByZXR1cm4gcGF0dGVybjsKKwkgICAgfTsKKwkgICAgLy8gRUNNQS0yNjIgMTMuMy4yIFZhcmlh
YmxlIFN0YXRlbWVudAorCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlVmFyaWFibGVJZGVudGlm
aWVyID0gZnVuY3Rpb24gKGtpbmQpIHsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVO
b2RlKCk7CisJICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAg
aWYgKHRva2VuLnR5cGUgPT09IHRva2VuXzEuVG9rZW4uS2V5d29yZCAmJiB0b2tlbi52YWx1ZSA9
PT0gJ3lpZWxkJykgeworCSAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0KSB7CisJ
ICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1lc3Nh
Z2VzXzEuTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkKTsKKwkgICAgICAgICAgICB9CisJICAg
ICAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCkgeworCSAgICAgICAgICAgICAg
ICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRva2VuKTsKKwkgICAgICAgICAgICB9CisJICAg
ICAgICB9CisJICAgICAgICBlbHNlIGlmICh0b2tlbi50eXBlICE9PSB0b2tlbl8xLlRva2VuLklk
ZW50aWZpZXIpIHsKKwkgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiB0b2tl
bi50eXBlID09PSB0b2tlbl8xLlRva2VuLktleXdvcmQgJiYgdGhpcy5zY2FubmVyLmlzU3RyaWN0
TW9kZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKwkgICAgICAgICAgICAgICAgdGhpcy50
b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0b2tlbiwgbWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RS
ZXNlcnZlZFdvcmQpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIHsKKwkgICAg
ICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QgfHwgdG9rZW4udmFsdWUgIT09ICds
ZXQnIHx8IGtpbmQgIT09ICd2YXInKSB7CisJICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93
VW5leHBlY3RlZFRva2VuKHRva2VuKTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAg
IH0KKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgaWYgKCh0aGlzLmNvbnRleHQuaXNNb2R1bGUg
fHwgdGhpcy5jb250ZXh0LmF3YWl0KSAmJiB0b2tlbi50eXBlID09PSB0b2tlbl8xLlRva2VuLklk
ZW50aWZpZXIgJiYgdG9rZW4udmFsdWUgPT09ICdhd2FpdCcpIHsKKwkgICAgICAgICAgICB0aGlz
LnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJl
dHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLklkZW50aWZpZXIodG9rZW4udmFsdWUp
KTsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVZhcmlhYmxlRGVjbGFyYXRp
b24gPSBmdW5jdGlvbiAob3B0aW9ucykgeworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0
ZU5vZGUoKTsKKwkgICAgICAgIHZhciBwYXJhbXMgPSBbXTsKKwkgICAgICAgIHZhciBpZCA9IHRo
aXMucGFyc2VQYXR0ZXJuKHBhcmFtcywgJ3ZhcicpOworCSAgICAgICAgLy8gRUNNQS0yNjIgMTIu
Mi4xCisJICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiBpZC50eXBlID09PSBzeW50
YXhfMS5TeW50YXguSWRlbnRpZmllcikgeworCSAgICAgICAgICAgIGlmICh0aGlzLnNjYW5uZXIu
aXNSZXN0cmljdGVkV29yZCgoaWQpLm5hbWUpKSB7CisJICAgICAgICAgICAgICAgIHRoaXMudG9s
ZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdFZhck5hbWUpOworCSAgICAgICAg
ICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIHZhciBpbml0ID0gbnVsbDsKKwkgICAgICAgIGlm
ICh0aGlzLm1hdGNoKCc9JykpIHsKKwkgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworCSAg
ICAgICAgICAgIGluaXQgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2ln
bm1lbnRFeHByZXNzaW9uKTsKKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgaWYgKGlkLnR5cGUg
IT09IHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVyICYmICFvcHRpb25zLmluRm9yKSB7CisJICAg
ICAgICAgICAgdGhpcy5leHBlY3QoJz0nKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiB0
aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlZhcmlhYmxlRGVjbGFyYXRvcihpZCwgaW5pdCkp
OworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlVmFyaWFibGVEZWNsYXJhdGlv
bkxpc3QgPSBmdW5jdGlvbiAob3B0aW9ucykgeworCSAgICAgICAgdmFyIG9wdCA9IHsgaW5Gb3I6
IG9wdGlvbnMuaW5Gb3IgfTsKKwkgICAgICAgIHZhciBsaXN0ID0gW107CisJICAgICAgICBsaXN0
LnB1c2godGhpcy5wYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24ob3B0KSk7CisJICAgICAgICB3aGls
ZSAodGhpcy5tYXRjaCgnLCcpKSB7CisJICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkg
ICAgICAgICAgICBsaXN0LnB1c2godGhpcy5wYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24ob3B0KSk7
CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gbGlzdDsKKwkgICAgfTsKKwkgICAgUGFyc2Vy
LnByb3RvdHlwZS5wYXJzZVZhcmlhYmxlU3RhdGVtZW50ID0gZnVuY3Rpb24gKCkgeworCSAgICAg
ICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHRoaXMuZXhwZWN0S2V5
d29yZCgndmFyJyk7CisJICAgICAgICB2YXIgZGVjbGFyYXRpb25zID0gdGhpcy5wYXJzZVZhcmlh
YmxlRGVjbGFyYXRpb25MaXN0KHsgaW5Gb3I6IGZhbHNlIH0pOworCSAgICAgICAgdGhpcy5jb25z
dW1lU2VtaWNvbG9uKCk7CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcg
Tm9kZS5WYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywgJ3ZhcicpKTsKKwkgICAgfTsK
KwkgICAgLy8gRUNNQS0yNjIgMTMuNCBFbXB0eSBTdGF0ZW1lbnQKKwkgICAgUGFyc2VyLnByb3Rv
dHlwZS5wYXJzZUVtcHR5U3RhdGVtZW50ID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIG5v
ZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHRoaXMuZXhwZWN0KCc7Jyk7CisJICAg
ICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5FbXB0eVN0YXRlbWVudCgp
KTsKKwkgICAgfTsKKwkgICAgLy8gRUNNQS0yNjIgMTMuNSBFeHByZXNzaW9uIFN0YXRlbWVudAor
CSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCA9IGZ1bmN0aW9u
ICgpIHsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICB2
YXIgZXhwciA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7CisJICAgICAgICB0aGlzLmNvbnN1bWVT
ZW1pY29sb24oKTsKKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2Rl
LkV4cHJlc3Npb25TdGF0ZW1lbnQoZXhwcikpOworCSAgICB9OworCSAgICAvLyBFQ01BLTI2MiAx
My42IElmIHN0YXRlbWVudAorCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlSWZTdGF0ZW1lbnQg
PSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOwor
CSAgICAgICAgdmFyIGNvbnNlcXVlbnQ7CisJICAgICAgICB2YXIgYWx0ZXJuYXRlID0gbnVsbDsK
KwkgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnaWYnKTsKKwkgICAgICAgIHRoaXMuZXhwZWN0
KCcoJyk7CisJICAgICAgICB2YXIgdGVzdCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7CisJICAg
ICAgICBpZiAoIXRoaXMubWF0Y2goJyknKSAmJiB0aGlzLmNvbmZpZy50b2xlcmFudCkgeworCSAg
ICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odGhpcy5uZXh0VG9rZW4oKSk7
CisJICAgICAgICAgICAgY29uc2VxdWVudCA9IHRoaXMuZmluYWxpemUodGhpcy5jcmVhdGVOb2Rl
KCksIG5ldyBOb2RlLkVtcHR5U3RhdGVtZW50KCkpOworCSAgICAgICAgfQorCSAgICAgICAgZWxz
ZSB7CisJICAgICAgICAgICAgdGhpcy5leHBlY3QoJyknKTsKKwkgICAgICAgICAgICBjb25zZXF1
ZW50ID0gdGhpcy5wYXJzZVN0YXRlbWVudCgpOworCSAgICAgICAgICAgIGlmICh0aGlzLm1hdGNo
S2V5d29yZCgnZWxzZScpKSB7CisJICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJ
ICAgICAgICAgICAgICAgIGFsdGVybmF0ZSA9IHRoaXMucGFyc2VTdGF0ZW1lbnQoKTsKKwkgICAg
ICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2Rl
LCBuZXcgTm9kZS5JZlN0YXRlbWVudCh0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpKTsKKwkg
ICAgfTsKKwkgICAgLy8gRUNNQS0yNjIgMTMuNy4yIFRoZSBkby13aGlsZSBTdGF0ZW1lbnQKKwkg
ICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZURvV2hpbGVTdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7
CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdGhpcy5l
eHBlY3RLZXl3b3JkKCdkbycpOworCSAgICAgICAgdmFyIHByZXZpb3VzSW5JdGVyYXRpb24gPSB0
aGlzLmNvbnRleHQuaW5JdGVyYXRpb247CisJICAgICAgICB0aGlzLmNvbnRleHQuaW5JdGVyYXRp
b24gPSB0cnVlOworCSAgICAgICAgdmFyIGJvZHkgPSB0aGlzLnBhcnNlU3RhdGVtZW50KCk7CisJ
ICAgICAgICB0aGlzLmNvbnRleHQuaW5JdGVyYXRpb24gPSBwcmV2aW91c0luSXRlcmF0aW9uOwor
CSAgICAgICAgdGhpcy5leHBlY3RLZXl3b3JkKCd3aGlsZScpOworCSAgICAgICAgdGhpcy5leHBl
Y3QoJygnKTsKKwkgICAgICAgIHZhciB0ZXN0ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTsKKwkg
ICAgICAgIHRoaXMuZXhwZWN0KCcpJyk7CisJICAgICAgICBpZiAodGhpcy5tYXRjaCgnOycpKSB7
CisJICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJl
dHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkRvV2hpbGVTdGF0ZW1lbnQoYm9keSwg
dGVzdCkpOworCSAgICB9OworCSAgICAvLyBFQ01BLTI2MiAxMy43LjMgVGhlIHdoaWxlIFN0YXRl
bWVudAorCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlV2hpbGVTdGF0ZW1lbnQgPSBmdW5jdGlv
biAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAg
dmFyIGJvZHk7CisJICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ3doaWxlJyk7CisJICAgICAg
ICB0aGlzLmV4cGVjdCgnKCcpOworCSAgICAgICAgdmFyIHRlc3QgPSB0aGlzLnBhcnNlRXhwcmVz
c2lvbigpOworCSAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCcpJykgJiYgdGhpcy5jb25maWcudG9s
ZXJhbnQpIHsKKwkgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMu
bmV4dFRva2VuKCkpOworCSAgICAgICAgICAgIGJvZHkgPSB0aGlzLmZpbmFsaXplKHRoaXMuY3Jl
YXRlTm9kZSgpLCBuZXcgTm9kZS5FbXB0eVN0YXRlbWVudCgpKTsKKwkgICAgICAgIH0KKwkgICAg
ICAgIGVsc2UgeworCSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCcpJyk7CisJICAgICAgICAgICAg
dmFyIHByZXZpb3VzSW5JdGVyYXRpb24gPSB0aGlzLmNvbnRleHQuaW5JdGVyYXRpb247CisJICAg
ICAgICAgICAgdGhpcy5jb250ZXh0LmluSXRlcmF0aW9uID0gdHJ1ZTsKKwkgICAgICAgICAgICBi
b2R5ID0gdGhpcy5wYXJzZVN0YXRlbWVudCgpOworCSAgICAgICAgICAgIHRoaXMuY29udGV4dC5p
bkl0ZXJhdGlvbiA9IHByZXZpb3VzSW5JdGVyYXRpb247CisJICAgICAgICB9CisJICAgICAgICBy
ZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5XaGlsZVN0YXRlbWVudCh0ZXN0LCBi
b2R5KSk7CisJICAgIH07CisJICAgIC8vIEVDTUEtMjYyIDEzLjcuNCBUaGUgZm9yIFN0YXRlbWVu
dAorCSAgICAvLyBFQ01BLTI2MiAxMy43LjUgVGhlIGZvci1pbiBhbmQgZm9yLW9mIFN0YXRlbWVu
dHMKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUZvclN0YXRlbWVudCA9IGZ1bmN0aW9uICgp
IHsKKwkgICAgICAgIHZhciBpbml0ID0gbnVsbDsKKwkgICAgICAgIHZhciB0ZXN0ID0gbnVsbDsK
KwkgICAgICAgIHZhciB1cGRhdGUgPSBudWxsOworCSAgICAgICAgdmFyIGZvckluID0gdHJ1ZTsK
KwkgICAgICAgIHZhciBsZWZ0LCByaWdodDsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVh
dGVOb2RlKCk7CisJICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ2ZvcicpOworCSAgICAgICAg
dGhpcy5leHBlY3QoJygnKTsKKwkgICAgICAgIGlmICh0aGlzLm1hdGNoKCc7JykpIHsKKwkgICAg
ICAgICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgfQorCSAgICAgICAgZWxzZSB7CisJ
ICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hLZXl3b3JkKCd2YXInKSkgeworCSAgICAgICAgICAg
ICAgICBpbml0ID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICAgICAgICAgIHRoaXMubmV4
dFRva2VuKCk7CisJICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c0FsbG93SW4gPSB0aGlzLmNv
bnRleHQuYWxsb3dJbjsKKwkgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93SW4gPSBm
YWxzZTsKKwkgICAgICAgICAgICAgICAgdmFyIGRlY2xhcmF0aW9ucyA9IHRoaXMucGFyc2VWYXJp
YWJsZURlY2xhcmF0aW9uTGlzdCh7IGluRm9yOiB0cnVlIH0pOworCSAgICAgICAgICAgICAgICB0
aGlzLmNvbnRleHQuYWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJbjsKKwkgICAgICAgICAgICAgICAg
aWYgKGRlY2xhcmF0aW9ucy5sZW5ndGggPT09IDEgJiYgdGhpcy5tYXRjaEtleXdvcmQoJ2luJykp
IHsKKwkgICAgICAgICAgICAgICAgICAgIHZhciBkZWNsID0gZGVjbGFyYXRpb25zWzBdOworCSAg
ICAgICAgICAgICAgICAgICAgaWYgKGRlY2wuaW5pdCAmJiAoZGVjbC5pZC50eXBlID09PSBzeW50
YXhfMS5TeW50YXguQXJyYXlQYXR0ZXJuIHx8IGRlY2wuaWQudHlwZSA9PT0gc3ludGF4XzEuU3lu
dGF4Lk9iamVjdFBhdHRlcm4gfHwgdGhpcy5jb250ZXh0LnN0cmljdCkpIHsKKwkgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5Gb3JJ
bk9mTG9vcEluaXRpYWxpemVyLCAnZm9yLWluJyk7CisJICAgICAgICAgICAgICAgICAgICB9CisJ
ICAgICAgICAgICAgICAgICAgICBpbml0ID0gdGhpcy5maW5hbGl6ZShpbml0LCBuZXcgTm9kZS5W
YXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywgJ3ZhcicpKTsKKwkgICAgICAgICAgICAg
ICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gaW5p
dDsKKwkgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTsK
KwkgICAgICAgICAgICAgICAgICAgIGluaXQgPSBudWxsOworCSAgICAgICAgICAgICAgICB9CisJ
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRlY2xhcmF0aW9ucy5sZW5ndGggPT09IDEgJiYgZGVj
bGFyYXRpb25zWzBdLmluaXQgPT09IG51bGwgJiYgdGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3Jk
KCdvZicpKSB7CisJICAgICAgICAgICAgICAgICAgICBpbml0ID0gdGhpcy5maW5hbGl6ZShpbml0
LCBuZXcgTm9kZS5WYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywgJ3ZhcicpKTsKKwkg
ICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICAgICAgICAgICAg
ICBsZWZ0ID0gaW5pdDsKKwkgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gdGhpcy5wYXJzZUFz
c2lnbm1lbnRFeHByZXNzaW9uKCk7CisJICAgICAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDsK
KwkgICAgICAgICAgICAgICAgICAgIGZvckluID0gZmFsc2U7CisJICAgICAgICAgICAgICAgIH0K
KwkgICAgICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgICAgICBpbml0ID0gdGhp
cy5maW5hbGl6ZShpbml0LCBuZXcgTm9kZS5WYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9u
cywgJ3ZhcicpKTsKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCc7Jyk7CisJICAg
ICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSBpZiAodGhp
cy5tYXRjaEtleXdvcmQoJ2NvbnN0JykgfHwgdGhpcy5tYXRjaEtleXdvcmQoJ2xldCcpKSB7CisJ
ICAgICAgICAgICAgICAgIGluaXQgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgICAgICAg
ICAgdmFyIGtpbmQgPSB0aGlzLm5leHRUb2tlbigpLnZhbHVlOworCSAgICAgICAgICAgICAgICBp
ZiAoIXRoaXMuY29udGV4dC5zdHJpY3QgJiYgdGhpcy5sb29rYWhlYWQudmFsdWUgPT09ICdpbicp
IHsKKwkgICAgICAgICAgICAgICAgICAgIGluaXQgPSB0aGlzLmZpbmFsaXplKGluaXQsIG5ldyBO
b2RlLklkZW50aWZpZXIoa2luZCkpOworCSAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9r
ZW4oKTsKKwkgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBpbml0OworCSAgICAgICAgICAgICAg
ICAgICAgcmlnaHQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOworCSAgICAgICAgICAgICAgICAg
ICAgaW5pdCA9IG51bGw7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgZWxz
ZSB7CisJICAgICAgICAgICAgICAgICAgICB2YXIgcHJldmlvdXNBbGxvd0luID0gdGhpcy5jb250
ZXh0LmFsbG93SW47CisJICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dJbiA9
IGZhbHNlOworCSAgICAgICAgICAgICAgICAgICAgdmFyIGRlY2xhcmF0aW9ucyA9IHRoaXMucGFy
c2VCaW5kaW5nTGlzdChraW5kLCB7IGluRm9yOiB0cnVlIH0pOworCSAgICAgICAgICAgICAgICAg
ICAgdGhpcy5jb250ZXh0LmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47CisJICAgICAgICAgICAg
ICAgICAgICBpZiAoZGVjbGFyYXRpb25zLmxlbmd0aCA9PT0gMSAmJiBkZWNsYXJhdGlvbnNbMF0u
aW5pdCA9PT0gbnVsbCAmJiB0aGlzLm1hdGNoS2V5d29yZCgnaW4nKSkgeworCSAgICAgICAgICAg
ICAgICAgICAgICAgIGluaXQgPSB0aGlzLmZpbmFsaXplKGluaXQsIG5ldyBOb2RlLlZhcmlhYmxl
RGVjbGFyYXRpb24oZGVjbGFyYXRpb25zLCBraW5kKSk7CisJICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gaW5p
dDsKKwkgICAgICAgICAgICAgICAgICAgICAgICByaWdodCA9IHRoaXMucGFyc2VFeHByZXNzaW9u
KCk7CisJICAgICAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG51bGw7CisJICAgICAgICAgICAg
ICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChkZWNsYXJhdGlvbnMubGVu
Z3RoID09PSAxICYmIGRlY2xhcmF0aW9uc1swXS5pbml0ID09PSBudWxsICYmIHRoaXMubWF0Y2hD
b250ZXh0dWFsS2V5d29yZCgnb2YnKSkgeworCSAgICAgICAgICAgICAgICAgICAgICAgIGluaXQg
PSB0aGlzLmZpbmFsaXplKGluaXQsIG5ldyBOb2RlLlZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFy
YXRpb25zLCBraW5kKSk7CisJICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4o
KTsKKwkgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gaW5pdDsKKwkgICAgICAgICAgICAg
ICAgICAgICAgICByaWdodCA9IHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworCSAg
ICAgICAgICAgICAgICAgICAgICAgIGluaXQgPSBudWxsOworCSAgICAgICAgICAgICAgICAgICAg
ICAgIGZvckluID0gZmFsc2U7CisJICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAg
ICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWVTZW1p
Y29sb24oKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICBpbml0ID0gdGhpcy5maW5hbGl6ZShp
bml0LCBuZXcgTm9kZS5WYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywga2luZCkpOwor
CSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAg
fQorCSAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICB2YXIgaW5pdFN0YXJ0VG9r
ZW4gPSB0aGlzLmxvb2thaGVhZDsKKwkgICAgICAgICAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dJ
biA9IHRoaXMuY29udGV4dC5hbGxvd0luOworCSAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQu
YWxsb3dJbiA9IGZhbHNlOworCSAgICAgICAgICAgICAgICBpbml0ID0gdGhpcy5pbmhlcml0Q292
ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7CisJICAgICAgICAgICAg
ICAgIHRoaXMuY29udGV4dC5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luOworCSAgICAgICAgICAg
ICAgICBpZiAodGhpcy5tYXRjaEtleXdvcmQoJ2luJykpIHsKKwkgICAgICAgICAgICAgICAgICAg
IGlmICghdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCB8fCBpbml0LnR5cGUgPT09IHN5
bnRheF8xLlN5bnRheC5Bc3NpZ25tZW50RXhwcmVzc2lvbikgeworCSAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkludmFsaWRMSFNJ
bkZvckluKTsKKwkgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgIHRo
aXMubmV4dFRva2VuKCk7CisJICAgICAgICAgICAgICAgICAgICB0aGlzLnJlaW50ZXJwcmV0RXhw
cmVzc2lvbkFzUGF0dGVybihpbml0KTsKKwkgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBpbml0
OworCSAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOwor
CSAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG51bGw7CisJICAgICAgICAgICAgICAgIH0KKwkg
ICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdvZicp
KSB7CisJICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRU
YXJnZXQgfHwgaW5pdC50eXBlID09PSBzeW50YXhfMS5TeW50YXguQXNzaWdubWVudEV4cHJlc3Np
b24pIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IobWVzc2Fn
ZXNfMS5NZXNzYWdlcy5JbnZhbGlkTEhTSW5Gb3JMb29wKTsKKwkgICAgICAgICAgICAgICAgICAg
IH0KKwkgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICAgICAg
ICAgICAgICB0aGlzLnJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihpbml0KTsKKwkgICAg
ICAgICAgICAgICAgICAgIGxlZnQgPSBpbml0OworCSAgICAgICAgICAgICAgICAgICAgcmlnaHQg
PSB0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKKwkgICAgICAgICAgICAgICAgICAg
IGluaXQgPSBudWxsOworCSAgICAgICAgICAgICAgICAgICAgZm9ySW4gPSBmYWxzZTsKKwkgICAg
ICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAg
ICAgIGlmICh0aGlzLm1hdGNoKCcsJykpIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
aW5pdFNlcSA9IFtpbml0XTsKKwkgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodGhpcy5t
YXRjaCgnLCcpKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2Vu
KCk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRTZXEucHVzaCh0aGlzLmlzb2xh
dGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKSk7CisJICAgICAg
ICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgICAgIGluaXQgPSB0aGlz
LmZpbmFsaXplKHRoaXMuc3RhcnROb2RlKGluaXRTdGFydFRva2VuKSwgbmV3IE5vZGUuU2VxdWVu
Y2VFeHByZXNzaW9uKGluaXRTZXEpKTsKKwkgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAg
ICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCc7Jyk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAg
ICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICBpZiAodHlwZW9mIGxlZnQgPT09ICd1bmRl
ZmluZWQnKSB7CisJICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCc7JykpIHsKKwkgICAgICAg
ICAgICAgICAgdGVzdCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7CisJICAgICAgICAgICAgfQor
CSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCc7Jyk7CisJICAgICAgICAgICAgaWYgKCF0aGlzLm1h
dGNoKCcpJykpIHsKKwkgICAgICAgICAgICAgICAgdXBkYXRlID0gdGhpcy5wYXJzZUV4cHJlc3Np
b24oKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICB2YXIgYm9keTsKKwkg
ICAgICAgIGlmICghdGhpcy5tYXRjaCgnKScpICYmIHRoaXMuY29uZmlnLnRvbGVyYW50KSB7CisJ
ICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0aGlzLm5leHRUb2tlbigp
KTsKKwkgICAgICAgICAgICBib2R5ID0gdGhpcy5maW5hbGl6ZSh0aGlzLmNyZWF0ZU5vZGUoKSwg
bmV3IE5vZGUuRW1wdHlTdGF0ZW1lbnQoKSk7CisJICAgICAgICB9CisJICAgICAgICBlbHNlIHsK
KwkgICAgICAgICAgICB0aGlzLmV4cGVjdCgnKScpOworCSAgICAgICAgICAgIHZhciBwcmV2aW91
c0luSXRlcmF0aW9uID0gdGhpcy5jb250ZXh0LmluSXRlcmF0aW9uOworCSAgICAgICAgICAgIHRo
aXMuY29udGV4dC5pbkl0ZXJhdGlvbiA9IHRydWU7CisJICAgICAgICAgICAgYm9keSA9IHRoaXMu
aXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlU3RhdGVtZW50KTsKKwkgICAgICAgICAgICB0
aGlzLmNvbnRleHQuaW5JdGVyYXRpb24gPSBwcmV2aW91c0luSXRlcmF0aW9uOworCSAgICAgICAg
fQorCSAgICAgICAgcmV0dXJuICh0eXBlb2YgbGVmdCA9PT0gJ3VuZGVmaW5lZCcpID8KKwkgICAg
ICAgICAgICB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkZvclN0YXRlbWVudChpbml0LCB0
ZXN0LCB1cGRhdGUsIGJvZHkpKSA6CisJICAgICAgICAgICAgZm9ySW4gPyB0aGlzLmZpbmFsaXpl
KG5vZGUsIG5ldyBOb2RlLkZvckluU3RhdGVtZW50KGxlZnQsIHJpZ2h0LCBib2R5KSkgOgorCSAg
ICAgICAgICAgICAgICB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkZvck9mU3RhdGVtZW50
KGxlZnQsIHJpZ2h0LCBib2R5KSk7CisJICAgIH07CisJICAgIC8vIEVDTUEtMjYyIDEzLjggVGhl
IGNvbnRpbnVlIHN0YXRlbWVudAorCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQ29udGludWVT
dGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRl
Tm9kZSgpOworCSAgICAgICAgdGhpcy5leHBlY3RLZXl3b3JkKCdjb250aW51ZScpOworCSAgICAg
ICAgdmFyIGxhYmVsID0gbnVsbDsKKwkgICAgICAgIGlmICh0aGlzLmxvb2thaGVhZC50eXBlID09
PSB0b2tlbl8xLlRva2VuLklkZW50aWZpZXIgJiYgIXRoaXMuaGFzTGluZVRlcm1pbmF0b3IpIHsK
KwkgICAgICAgICAgICB2YXIgaWQgPSB0aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CisJ
ICAgICAgICAgICAgbGFiZWwgPSBpZDsKKwkgICAgICAgICAgICB2YXIga2V5ID0gJyQnICsgaWQu
bmFtZTsKKwkgICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHku
Y2FsbCh0aGlzLmNvbnRleHQubGFiZWxTZXQsIGtleSkpIHsKKwkgICAgICAgICAgICAgICAgdGhp
cy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5rbm93bkxhYmVsLCBpZC5uYW1lKTsK
KwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICB0aGlzLmNvbnN1bWVTZW1pY29s
b24oKTsKKwkgICAgICAgIGlmIChsYWJlbCA9PT0gbnVsbCAmJiAhdGhpcy5jb250ZXh0LmluSXRl
cmF0aW9uKSB7CisJICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVzc2Fn
ZXMuSWxsZWdhbENvbnRpbnVlKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiB0aGlzLmZp
bmFsaXplKG5vZGUsIG5ldyBOb2RlLkNvbnRpbnVlU3RhdGVtZW50KGxhYmVsKSk7CisJICAgIH07
CisJICAgIC8vIEVDTUEtMjYyIDEzLjkgVGhlIGJyZWFrIHN0YXRlbWVudAorCSAgICBQYXJzZXIu
cHJvdG90eXBlLnBhcnNlQnJlYWtTdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2
YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdGhpcy5leHBlY3RLZXl3b3Jk
KCdicmVhaycpOworCSAgICAgICAgdmFyIGxhYmVsID0gbnVsbDsKKwkgICAgICAgIGlmICh0aGlz
Lmxvb2thaGVhZC50eXBlID09PSB0b2tlbl8xLlRva2VuLklkZW50aWZpZXIgJiYgIXRoaXMuaGFz
TGluZVRlcm1pbmF0b3IpIHsKKwkgICAgICAgICAgICB2YXIgaWQgPSB0aGlzLnBhcnNlVmFyaWFi
bGVJZGVudGlmaWVyKCk7CisJICAgICAgICAgICAgdmFyIGtleSA9ICckJyArIGlkLm5hbWU7CisJ
ICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhp
cy5jb250ZXh0LmxhYmVsU2V0LCBrZXkpKSB7CisJICAgICAgICAgICAgICAgIHRoaXMudGhyb3dF
cnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLlVua25vd25MYWJlbCwgaWQubmFtZSk7CisJICAgICAg
ICAgICAgfQorCSAgICAgICAgICAgIGxhYmVsID0gaWQ7CisJICAgICAgICB9CisJICAgICAgICB0
aGlzLmNvbnN1bWVTZW1pY29sb24oKTsKKwkgICAgICAgIGlmIChsYWJlbCA9PT0gbnVsbCAmJiAh
dGhpcy5jb250ZXh0LmluSXRlcmF0aW9uICYmICF0aGlzLmNvbnRleHQuaW5Td2l0Y2gpIHsKKwkg
ICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5JbGxlZ2FsQnJl
YWspOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3
IE5vZGUuQnJlYWtTdGF0ZW1lbnQobGFiZWwpKTsKKwkgICAgfTsKKwkgICAgLy8gRUNNQS0yNjIg
MTMuMTAgVGhlIHJldHVybiBzdGF0ZW1lbnQKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVJl
dHVyblN0YXRlbWVudCA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIGlmICghdGhpcy5jb250ZXh0
LmluRnVuY3Rpb25Cb2R5KSB7CisJICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3Nh
Z2VzXzEuTWVzc2FnZXMuSWxsZWdhbFJldHVybik7CisJICAgICAgICB9CisJICAgICAgICB2YXIg
bm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdGhpcy5leHBlY3RLZXl3b3JkKCdy
ZXR1cm4nKTsKKwkgICAgICAgIHZhciBoYXNBcmd1bWVudCA9ICF0aGlzLm1hdGNoKCc7JykgJiYg
IXRoaXMubWF0Y2goJ30nKSAmJgorCSAgICAgICAgICAgICF0aGlzLmhhc0xpbmVUZXJtaW5hdG9y
ICYmIHRoaXMubG9va2FoZWFkLnR5cGUgIT09IHRva2VuXzEuVG9rZW4uRU9GOworCSAgICAgICAg
dmFyIGFyZ3VtZW50ID0gaGFzQXJndW1lbnQgPyB0aGlzLnBhcnNlRXhwcmVzc2lvbigpIDogbnVs
bDsKKwkgICAgICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpOworCSAgICAgICAgcmV0dXJuIHRo
aXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuUmV0dXJuU3RhdGVtZW50KGFyZ3VtZW50KSk7CisJ
ICAgIH07CisJICAgIC8vIEVDTUEtMjYyIDEzLjExIFRoZSB3aXRoIHN0YXRlbWVudAorCSAgICBQ
YXJzZXIucHJvdG90eXBlLnBhcnNlV2l0aFN0YXRlbWVudCA9IGZ1bmN0aW9uICgpIHsKKwkgICAg
ICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0KSB7CisJICAgICAgICAgICAgdGhpcy50b2xlcmF0
ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0TW9kZVdpdGgpOworCSAgICAgICAgfQor
CSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHRoaXMuZXhw
ZWN0S2V5d29yZCgnd2l0aCcpOworCSAgICAgICAgdGhpcy5leHBlY3QoJygnKTsKKwkgICAgICAg
IHZhciBvYmplY3QgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOworCSAgICAgICAgdGhpcy5leHBl
Y3QoJyknKTsKKwkgICAgICAgIHZhciBib2R5ID0gdGhpcy5wYXJzZVN0YXRlbWVudCgpOworCSAg
ICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuV2l0aFN0YXRlbWVudChv
YmplY3QsIGJvZHkpKTsKKwkgICAgfTsKKwkgICAgLy8gRUNNQS0yNjIgMTMuMTIgVGhlIHN3aXRj
aCBzdGF0ZW1lbnQKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVN3aXRjaENhc2UgPSBmdW5j
dGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAg
ICAgdmFyIHRlc3Q7CisJICAgICAgICBpZiAodGhpcy5tYXRjaEtleXdvcmQoJ2RlZmF1bHQnKSkg
eworCSAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICAgICAgdGVzdCA9IG51
bGw7CisJICAgICAgICB9CisJICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICB0aGlzLmV4cGVj
dEtleXdvcmQoJ2Nhc2UnKTsKKwkgICAgICAgICAgICB0ZXN0ID0gdGhpcy5wYXJzZUV4cHJlc3Np
b24oKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHRoaXMuZXhwZWN0KCc6Jyk7CisJICAgICAgICB2
YXIgY29uc2VxdWVudCA9IFtdOworCSAgICAgICAgd2hpbGUgKHRydWUpIHsKKwkgICAgICAgICAg
ICBpZiAodGhpcy5tYXRjaCgnfScpIHx8IHRoaXMubWF0Y2hLZXl3b3JkKCdkZWZhdWx0JykgfHwg
dGhpcy5tYXRjaEtleXdvcmQoJ2Nhc2UnKSkgeworCSAgICAgICAgICAgICAgICBicmVhazsKKwkg
ICAgICAgICAgICB9CisJICAgICAgICAgICAgY29uc2VxdWVudC5wdXNoKHRoaXMucGFyc2VTdGF0
ZW1lbnRMaXN0SXRlbSgpKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFs
aXplKG5vZGUsIG5ldyBOb2RlLlN3aXRjaENhc2UodGVzdCwgY29uc2VxdWVudCkpOworCSAgICB9
OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlU3dpdGNoU3RhdGVtZW50ID0gZnVuY3Rpb24g
KCkgeworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHRo
aXMuZXhwZWN0S2V5d29yZCgnc3dpdGNoJyk7CisJICAgICAgICB0aGlzLmV4cGVjdCgnKCcpOwor
CSAgICAgICAgdmFyIGRpc2NyaW1pbmFudCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7CisJICAg
ICAgICB0aGlzLmV4cGVjdCgnKScpOworCSAgICAgICAgdmFyIHByZXZpb3VzSW5Td2l0Y2ggPSB0
aGlzLmNvbnRleHQuaW5Td2l0Y2g7CisJICAgICAgICB0aGlzLmNvbnRleHQuaW5Td2l0Y2ggPSB0
cnVlOworCSAgICAgICAgdmFyIGNhc2VzID0gW107CisJICAgICAgICB2YXIgZGVmYXVsdEZvdW5k
ID0gZmFsc2U7CisJICAgICAgICB0aGlzLmV4cGVjdCgneycpOworCSAgICAgICAgd2hpbGUgKHRy
dWUpIHsKKwkgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnfScpKSB7CisJICAgICAgICAgICAg
ICAgIGJyZWFrOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB2YXIgY2xhdXNlID0gdGhp
cy5wYXJzZVN3aXRjaENhc2UoKTsKKwkgICAgICAgICAgICBpZiAoY2xhdXNlLnRlc3QgPT09IG51
bGwpIHsKKwkgICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRGb3VuZCkgeworCSAgICAgICAgICAg
ICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuTXVsdGlwbGVEZWZh
dWx0c0luU3dpdGNoKTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBkZWZh
dWx0Rm91bmQgPSB0cnVlOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBjYXNlcy5wdXNo
KGNsYXVzZSk7CisJICAgICAgICB9CisJICAgICAgICB0aGlzLmV4cGVjdCgnfScpOworCSAgICAg
ICAgdGhpcy5jb250ZXh0LmluU3dpdGNoID0gcHJldmlvdXNJblN3aXRjaDsKKwkgICAgICAgIHJl
dHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlN3aXRjaFN0YXRlbWVudChkaXNjcmlt
aW5hbnQsIGNhc2VzKSk7CisJICAgIH07CisJICAgIC8vIEVDTUEtMjYyIDEzLjEzIExhYmVsbGVk
IFN0YXRlbWVudHMKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUxhYmVsbGVkU3RhdGVtZW50
ID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsK
KwkgICAgICAgIHZhciBleHByID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTsKKwkgICAgICAgIHZh
ciBzdGF0ZW1lbnQ7CisJICAgICAgICBpZiAoKGV4cHIudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4
LklkZW50aWZpZXIpICYmIHRoaXMubWF0Y2goJzonKSkgeworCSAgICAgICAgICAgIHRoaXMubmV4
dFRva2VuKCk7CisJICAgICAgICAgICAgdmFyIGlkID0gKGV4cHIpOworCSAgICAgICAgICAgIHZh
ciBrZXkgPSAnJCcgKyBpZC5uYW1lOworCSAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBl
Lmhhc093blByb3BlcnR5LmNhbGwodGhpcy5jb250ZXh0LmxhYmVsU2V0LCBrZXkpKSB7CisJICAg
ICAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLlJlZGVjbGFy
YXRpb24sICdMYWJlbCcsIGlkLm5hbWUpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB0
aGlzLmNvbnRleHQubGFiZWxTZXRba2V5XSA9IHRydWU7CisJICAgICAgICAgICAgdmFyIGxhYmVs
ZWRCb2R5ID0gdGhpcy5wYXJzZVN0YXRlbWVudCgpOworCSAgICAgICAgICAgIGRlbGV0ZSB0aGlz
LmNvbnRleHQubGFiZWxTZXRba2V5XTsKKwkgICAgICAgICAgICBzdGF0ZW1lbnQgPSBuZXcgTm9k
ZS5MYWJlbGVkU3RhdGVtZW50KGlkLCBsYWJlbGVkQm9keSk7CisJICAgICAgICB9CisJICAgICAg
ICBlbHNlIHsKKwkgICAgICAgICAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTsKKwkgICAgICAg
ICAgICBzdGF0ZW1lbnQgPSBuZXcgTm9kZS5FeHByZXNzaW9uU3RhdGVtZW50KGV4cHIpOworCSAg
ICAgICAgfQorCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgc3RhdGVtZW50KTsK
KwkgICAgfTsKKwkgICAgLy8gRUNNQS0yNjIgMTMuMTQgVGhlIHRocm93IHN0YXRlbWVudAorCSAg
ICBQYXJzZXIucHJvdG90eXBlLnBhcnNlVGhyb3dTdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7CisJ
ICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdGhpcy5leHBl
Y3RLZXl3b3JkKCd0aHJvdycpOworCSAgICAgICAgaWYgKHRoaXMuaGFzTGluZVRlcm1pbmF0b3Ip
IHsKKwkgICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5OZXds
aW5lQWZ0ZXJUaHJvdyk7CisJICAgICAgICB9CisJICAgICAgICB2YXIgYXJndW1lbnQgPSB0aGlz
LnBhcnNlRXhwcmVzc2lvbigpOworCSAgICAgICAgdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7CisJ
ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5UaHJvd1N0YXRlbWVu
dChhcmd1bWVudCkpOworCSAgICB9OworCSAgICAvLyBFQ01BLTI2MiAxMy4xNSBUaGUgdHJ5IHN0
YXRlbWVudAorCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQ2F0Y2hDbGF1c2UgPSBmdW5jdGlv
biAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAg
dGhpcy5leHBlY3RLZXl3b3JkKCdjYXRjaCcpOworCSAgICAgICAgdGhpcy5leHBlY3QoJygnKTsK
KwkgICAgICAgIGlmICh0aGlzLm1hdGNoKCcpJykpIHsKKwkgICAgICAgICAgICB0aGlzLnRocm93
VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHZh
ciBwYXJhbXMgPSBbXTsKKwkgICAgICAgIHZhciBwYXJhbSA9IHRoaXMucGFyc2VQYXR0ZXJuKHBh
cmFtcyk7CisJICAgICAgICB2YXIgcGFyYW1NYXAgPSB7fTsKKwkgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7CisJICAgICAgICAgICAgdmFyIGtleSA9ICck
JyArIHBhcmFtc1tpXS52YWx1ZTsKKwkgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5o
YXNPd25Qcm9wZXJ0eS5jYWxsKHBhcmFtTWFwLCBrZXkpKSB7CisJICAgICAgICAgICAgICAgIHRo
aXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkR1cGxpY2F0ZUJpbmRpbmcsIHBh
cmFtc1tpXS52YWx1ZSk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIHBhcmFtTWFwW2tl
eV0gPSB0cnVlOworCSAgICAgICAgfQorCSAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3Qg
JiYgcGFyYW0udHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LklkZW50aWZpZXIpIHsKKwkgICAgICAg
ICAgICBpZiAodGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQoKHBhcmFtKS5uYW1lKSkgewor
CSAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5T
dHJpY3RDYXRjaFZhcmlhYmxlKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAg
ICB0aGlzLmV4cGVjdCgnKScpOworCSAgICAgICAgdmFyIGJvZHkgPSB0aGlzLnBhcnNlQmxvY2so
KTsKKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkNhdGNoQ2xh
dXNlKHBhcmFtLCBib2R5KSk7CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VG
aW5hbGx5Q2xhdXNlID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdGhpcy5leHBlY3RLZXl3b3Jk
KCdmaW5hbGx5Jyk7CisJICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUJsb2NrKCk7CisJICAgIH07
CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VUcnlTdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7
CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdGhpcy5l
eHBlY3RLZXl3b3JkKCd0cnknKTsKKwkgICAgICAgIHZhciBibG9jayA9IHRoaXMucGFyc2VCbG9j
aygpOworCSAgICAgICAgdmFyIGhhbmRsZXIgPSB0aGlzLm1hdGNoS2V5d29yZCgnY2F0Y2gnKSA/
IHRoaXMucGFyc2VDYXRjaENsYXVzZSgpIDogbnVsbDsKKwkgICAgICAgIHZhciBmaW5hbGl6ZXIg
PSB0aGlzLm1hdGNoS2V5d29yZCgnZmluYWxseScpID8gdGhpcy5wYXJzZUZpbmFsbHlDbGF1c2Uo
KSA6IG51bGw7CisJICAgICAgICBpZiAoIWhhbmRsZXIgJiYgIWZpbmFsaXplcikgeworCSAgICAg
ICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLk5vQ2F0Y2hPckZpbmFs
bHkpOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3
IE5vZGUuVHJ5U3RhdGVtZW50KGJsb2NrLCBoYW5kbGVyLCBmaW5hbGl6ZXIpKTsKKwkgICAgfTsK
KwkgICAgLy8gRUNNQS0yNjIgMTMuMTYgVGhlIGRlYnVnZ2VyIHN0YXRlbWVudAorCSAgICBQYXJz
ZXIucHJvdG90eXBlLnBhcnNlRGVidWdnZXJTdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7CisJICAg
ICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdGhpcy5leHBlY3RL
ZXl3b3JkKCdkZWJ1Z2dlcicpOworCSAgICAgICAgdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7CisJ
ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5EZWJ1Z2dlclN0YXRl
bWVudCgpKTsKKwkgICAgfTsKKwkgICAgLy8gRUNNQS0yNjIgMTMgU3RhdGVtZW50cworCSAgICBQ
YXJzZXIucHJvdG90eXBlLnBhcnNlU3RhdGVtZW50ID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAg
dmFyIHN0YXRlbWVudDsKKwkgICAgICAgIHN3aXRjaCAodGhpcy5sb29rYWhlYWQudHlwZSkgewor
CSAgICAgICAgICAgIGNhc2UgdG9rZW5fMS5Ub2tlbi5Cb29sZWFuTGl0ZXJhbDoKKwkgICAgICAg
ICAgICBjYXNlIHRva2VuXzEuVG9rZW4uTnVsbExpdGVyYWw6CisJICAgICAgICAgICAgY2FzZSB0
b2tlbl8xLlRva2VuLk51bWVyaWNMaXRlcmFsOgorCSAgICAgICAgICAgIGNhc2UgdG9rZW5fMS5U
b2tlbi5TdHJpbmdMaXRlcmFsOgorCSAgICAgICAgICAgIGNhc2UgdG9rZW5fMS5Ub2tlbi5UZW1w
bGF0ZToKKwkgICAgICAgICAgICBjYXNlIHRva2VuXzEuVG9rZW4uUmVndWxhckV4cHJlc3Npb246
CisJICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VFeHByZXNzaW9uU3RhdGVt
ZW50KCk7CisJICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIGNhc2UgdG9rZW5f
MS5Ub2tlbi5QdW5jdHVhdG9yOgorCSAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmxv
b2thaGVhZC52YWx1ZTsKKwkgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAneycpIHsKKwkg
ICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VCbG9jaygpOworCSAgICAg
ICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09PSAnKCcpIHsK
KwkgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VFeHByZXNzaW9uU3Rh
dGVtZW50KCk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgZWxzZSBpZiAo
dmFsdWUgPT09ICc7JykgeworCSAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy5w
YXJzZUVtcHR5U3RhdGVtZW50KCk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAg
ICAgZWxzZSB7CisJICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlRXhw
cmVzc2lvblN0YXRlbWVudCgpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAg
IGJyZWFrOworCSAgICAgICAgICAgIGNhc2UgdG9rZW5fMS5Ub2tlbi5JZGVudGlmaWVyOgorCSAg
ICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLm1hdGNoQXN5bmNGdW5jdGlvbigpID8gdGhp
cy5wYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSA6IHRoaXMucGFyc2VMYWJlbGxlZFN0YXRlbWVu
dCgpOworCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICBjYXNlIHRva2VuXzEu
VG9rZW4uS2V5d29yZDoKKwkgICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmxvb2thaGVhZC52
YWx1ZSkgeworCSAgICAgICAgICAgICAgICAgICAgY2FzZSAnYnJlYWsnOgorCSAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VCcmVha1N0YXRlbWVudCgpOworCSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICAgICAgY2FzZSAn
Y29udGludWUnOgorCSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFy
c2VDb250aW51ZVN0YXRlbWVudCgpOworCSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
CSAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGVidWdnZXInOgorCSAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VEZWJ1Z2dlclN0YXRlbWVudCgpOworCSAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICAgICAgY2FzZSAnZG8n
OgorCSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VEb1doaWxl
U3RhdGVtZW50KCk7CisJICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAg
ICAgICAgICAgICBjYXNlICdmb3InOgorCSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVu
dCA9IHRoaXMucGFyc2VGb3JTdGF0ZW1lbnQoKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKwkgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzoKKwkgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigp
OworCSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnaWYnOgorCSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFy
c2VJZlN0YXRlbWVudCgpOworCSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAg
ICAgICAgICAgICAgICAgY2FzZSAncmV0dXJuJzoKKwkgICAgICAgICAgICAgICAgICAgICAgICBz
dGF0ZW1lbnQgPSB0aGlzLnBhcnNlUmV0dXJuU3RhdGVtZW50KCk7CisJICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAgICAgICBjYXNlICdzd2l0Y2gnOgorCSAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VTd2l0Y2hTdGF0ZW1l
bnQoKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAg
ICAgIGNhc2UgJ3Rocm93JzoKKwkgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0
aGlzLnBhcnNlVGhyb3dTdGF0ZW1lbnQoKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKwkgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3RyeSc6CisJICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZVRyeVN0YXRlbWVudCgpOworCSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICAgICAgY2FzZSAndmFyJzoKKwkg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlVmFyaWFibGVTdGF0
ZW1lbnQoKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAg
ICAgICAgIGNhc2UgJ3doaWxlJzoKKwkgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQg
PSB0aGlzLnBhcnNlV2hpbGVTdGF0ZW1lbnQoKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKwkgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3dpdGgnOgorCSAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VXaXRoU3RhdGVtZW50KCk7CisJICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
CSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VFeHByZXNzaW9u
U3RhdGVtZW50KCk7CisJICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAg
ICAgICAgIH0KKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgZGVmYXVsdDoK
KwkgICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0
aGlzLmxvb2thaGVhZCk7CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gc3RhdGVtZW50Owor
CSAgICB9OworCSAgICAvLyBFQ01BLTI2MiAxNC4xIEZ1bmN0aW9uIERlZmluaXRpb24KKwkgICAg
UGFyc2VyLnByb3RvdHlwZS5wYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMgPSBmdW5jdGlvbiAo
KSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdGhp
cy5leHBlY3QoJ3snKTsKKwkgICAgICAgIHZhciBib2R5ID0gdGhpcy5wYXJzZURpcmVjdGl2ZVBy
b2xvZ3VlcygpOworCSAgICAgICAgdmFyIHByZXZpb3VzTGFiZWxTZXQgPSB0aGlzLmNvbnRleHQu
bGFiZWxTZXQ7CisJICAgICAgICB2YXIgcHJldmlvdXNJbkl0ZXJhdGlvbiA9IHRoaXMuY29udGV4
dC5pbkl0ZXJhdGlvbjsKKwkgICAgICAgIHZhciBwcmV2aW91c0luU3dpdGNoID0gdGhpcy5jb250
ZXh0LmluU3dpdGNoOworCSAgICAgICAgdmFyIHByZXZpb3VzSW5GdW5jdGlvbkJvZHkgPSB0aGlz
LmNvbnRleHQuaW5GdW5jdGlvbkJvZHk7CisJICAgICAgICB0aGlzLmNvbnRleHQubGFiZWxTZXQg
PSB7fTsKKwkgICAgICAgIHRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbiA9IGZhbHNlOworCSAgICAg
ICAgdGhpcy5jb250ZXh0LmluU3dpdGNoID0gZmFsc2U7CisJICAgICAgICB0aGlzLmNvbnRleHQu
aW5GdW5jdGlvbkJvZHkgPSB0cnVlOworCSAgICAgICAgd2hpbGUgKHRoaXMuc3RhcnRNYXJrZXIu
aW5kZXggPCB0aGlzLnNjYW5uZXIubGVuZ3RoKSB7CisJICAgICAgICAgICAgaWYgKHRoaXMubWF0
Y2goJ30nKSkgeworCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICB9CisJICAg
ICAgICAgICAgYm9keS5wdXNoKHRoaXMucGFyc2VTdGF0ZW1lbnRMaXN0SXRlbSgpKTsKKwkgICAg
ICAgIH0KKwkgICAgICAgIHRoaXMuZXhwZWN0KCd9Jyk7CisJICAgICAgICB0aGlzLmNvbnRleHQu
bGFiZWxTZXQgPSBwcmV2aW91c0xhYmVsU2V0OworCSAgICAgICAgdGhpcy5jb250ZXh0LmluSXRl
cmF0aW9uID0gcHJldmlvdXNJbkl0ZXJhdGlvbjsKKwkgICAgICAgIHRoaXMuY29udGV4dC5pblN3
aXRjaCA9IHByZXZpb3VzSW5Td2l0Y2g7CisJICAgICAgICB0aGlzLmNvbnRleHQuaW5GdW5jdGlv
bkJvZHkgPSBwcmV2aW91c0luRnVuY3Rpb25Cb2R5OworCSAgICAgICAgcmV0dXJuIHRoaXMuZmlu
YWxpemUobm9kZSwgbmV3IE5vZGUuQmxvY2tTdGF0ZW1lbnQoYm9keSkpOworCSAgICB9OworCSAg
ICBQYXJzZXIucHJvdG90eXBlLnZhbGlkYXRlUGFyYW0gPSBmdW5jdGlvbiAob3B0aW9ucywgcGFy
YW0sIG5hbWUpIHsKKwkgICAgICAgIHZhciBrZXkgPSAnJCcgKyBuYW1lOworCSAgICAgICAgaWYg
KHRoaXMuY29udGV4dC5zdHJpY3QpIHsKKwkgICAgICAgICAgICBpZiAodGhpcy5zY2FubmVyLmlz
UmVzdHJpY3RlZFdvcmQobmFtZSkpIHsKKwkgICAgICAgICAgICAgICAgb3B0aW9ucy5zdHJpY3Rl
ZCA9IHBhcmFtOworCSAgICAgICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2UgPSBtZXNzYWdlc18x
Lk1lc3NhZ2VzLlN0cmljdFBhcmFtTmFtZTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAg
aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLnBhcmFtU2V0
LCBrZXkpKSB7CisJICAgICAgICAgICAgICAgIG9wdGlvbnMuc3RyaWN0ZWQgPSBwYXJhbTsKKwkg
ICAgICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gbWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJp
Y3RQYXJhbUR1cGU7CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgZWxzZSBp
ZiAoIW9wdGlvbnMuZmlyc3RSZXN0cmljdGVkKSB7CisJICAgICAgICAgICAgaWYgKHRoaXMuc2Nh
bm5lci5pc1Jlc3RyaWN0ZWRXb3JkKG5hbWUpKSB7CisJICAgICAgICAgICAgICAgIG9wdGlvbnMu
Zmlyc3RSZXN0cmljdGVkID0gcGFyYW07CisJICAgICAgICAgICAgICAgIG9wdGlvbnMubWVzc2Fn
ZSA9IG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0UGFyYW1OYW1lOworCSAgICAgICAgICAgIH0K
KwkgICAgICAgICAgICBlbHNlIGlmICh0aGlzLnNjYW5uZXIuaXNTdHJpY3RNb2RlUmVzZXJ2ZWRX
b3JkKG5hbWUpKSB7CisJICAgICAgICAgICAgICAgIG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkID0g
cGFyYW07CisJICAgICAgICAgICAgICAgIG9wdGlvbnMubWVzc2FnZSA9IG1lc3NhZ2VzXzEuTWVz
c2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBl
bHNlIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucy5wYXJh
bVNldCwga2V5KSkgeworCSAgICAgICAgICAgICAgICBvcHRpb25zLnN0cmljdGVkID0gcGFyYW07
CisJICAgICAgICAgICAgICAgIG9wdGlvbnMubWVzc2FnZSA9IG1lc3NhZ2VzXzEuTWVzc2FnZXMu
U3RyaWN0UGFyYW1EdXBlOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIC8q
IGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovCisJICAgICAgICBpZiAodHlwZW9mIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eSA9PT0gJ2Z1bmN0aW9uJykgeworCSAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShvcHRpb25zLnBhcmFtU2V0LCBrZXksIHsgdmFsdWU6IHRydWUsIGVudW1lcmFibGU6
IHRydWUsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7CisJICAgICAgICB9
CisJICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICBvcHRpb25zLnBhcmFtU2V0W2tleV0gPSB0
cnVlOworCSAgICAgICAgfQorCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlUmVz
dEVsZW1lbnQgPSBmdW5jdGlvbiAocGFyYW1zKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMu
Y3JlYXRlTm9kZSgpOworCSAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgIGlmICh0
aGlzLm1hdGNoKCd7JykpIHsKKwkgICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNf
MS5NZXNzYWdlcy5PYmplY3RQYXR0ZXJuQXNSZXN0UGFyYW1ldGVyKTsKKwkgICAgICAgIH0KKwkg
ICAgICAgIHBhcmFtcy5wdXNoKHRoaXMubG9va2FoZWFkKTsKKwkgICAgICAgIHZhciBwYXJhbSA9
IHRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKwkgICAgICAgIGlmICh0aGlzLm1hdGNo
KCc9JykpIHsKKwkgICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdl
cy5EZWZhdWx0UmVzdFBhcmFtZXRlcik7CisJICAgICAgICB9CisJICAgICAgICBpZiAoIXRoaXMu
bWF0Y2goJyknKSkgeworCSAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1l
c3NhZ2VzLlBhcmFtZXRlckFmdGVyUmVzdFBhcmFtZXRlcik7CisJICAgICAgICB9CisJICAgICAg
ICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5SZXN0RWxlbWVudChwYXJhbSkp
OworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRm9ybWFsUGFyYW1ldGVyID0g
ZnVuY3Rpb24gKG9wdGlvbnMpIHsKKwkgICAgICAgIHZhciBwYXJhbTsKKwkgICAgICAgIHZhciBw
YXJhbXMgPSBbXTsKKwkgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubG9va2FoZWFkOworCSAgICAg
ICAgaWYgKHRva2VuLnZhbHVlID09PSAnLi4uJykgeworCSAgICAgICAgICAgIHBhcmFtID0gdGhp
cy5wYXJzZVJlc3RFbGVtZW50KHBhcmFtcyk7CisJICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVBh
cmFtKG9wdGlvbnMsIHBhcmFtLmFyZ3VtZW50LCBwYXJhbS5hcmd1bWVudC5uYW1lKTsKKwkgICAg
ICAgICAgICBvcHRpb25zLnBhcmFtcy5wdXNoKHBhcmFtKTsKKwkgICAgICAgICAgICByZXR1cm47
CisJICAgICAgICB9CisJICAgICAgICBwYXJhbSA9IHRoaXMucGFyc2VQYXR0ZXJuV2l0aERlZmF1
bHQocGFyYW1zKTsKKwkgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsg
aSsrKSB7CisJICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIHBhcmFtc1tp
XSwgcGFyYW1zW2ldLnZhbHVlKTsKKwkgICAgICAgIH0KKwkgICAgICAgIG9wdGlvbnMucGFyYW1z
LnB1c2gocGFyYW0pOworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRm9ybWFs
UGFyYW1ldGVycyA9IGZ1bmN0aW9uIChmaXJzdFJlc3RyaWN0ZWQpIHsKKwkgICAgICAgIHZhciBv
cHRpb25zOworCSAgICAgICAgb3B0aW9ucyA9IHsKKwkgICAgICAgICAgICBwYXJhbXM6IFtdLAor
CSAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZDogZmlyc3RSZXN0cmljdGVkCisJICAgICAgICB9
OworCSAgICAgICAgdGhpcy5leHBlY3QoJygnKTsKKwkgICAgICAgIGlmICghdGhpcy5tYXRjaCgn
KScpKSB7CisJICAgICAgICAgICAgb3B0aW9ucy5wYXJhbVNldCA9IHt9OworCSAgICAgICAgICAg
IHdoaWxlICh0aGlzLnN0YXJ0TWFya2VyLmluZGV4IDwgdGhpcy5zY2FubmVyLmxlbmd0aCkgewor
CSAgICAgICAgICAgICAgICB0aGlzLnBhcnNlRm9ybWFsUGFyYW1ldGVyKG9wdGlvbnMpOworCSAg
ICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnKScpKSB7CisJICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICB0aGlzLmV4cGVj
dCgnLCcpOworCSAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnKScpKSB7CisJICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0K
KwkgICAgICAgIH0KKwkgICAgICAgIHRoaXMuZXhwZWN0KCcpJyk7CisJICAgICAgICByZXR1cm4g
eworCSAgICAgICAgICAgIHBhcmFtczogb3B0aW9ucy5wYXJhbXMsCisJICAgICAgICAgICAgc3Ry
aWN0ZWQ6IG9wdGlvbnMuc3RyaWN0ZWQsCisJICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkOiBv
cHRpb25zLmZpcnN0UmVzdHJpY3RlZCwKKwkgICAgICAgICAgICBtZXNzYWdlOiBvcHRpb25zLm1l
c3NhZ2UKKwkgICAgICAgIH07CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUubWF0Y2hB
c3luY0Z1bmN0aW9uID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIG1hdGNoID0gdGhpcy5t
YXRjaENvbnRleHR1YWxLZXl3b3JkKCdhc3luYycpOworCSAgICAgICAgaWYgKG1hdGNoKSB7CisJ
ICAgICAgICAgICAgdmFyIHByZXZpb3VzSW5kZXggPSB0aGlzLnNjYW5uZXIuaW5kZXg7CisJICAg
ICAgICAgICAgdmFyIHByZXZpb3VzTGluZU51bWJlciA9IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVy
OworCSAgICAgICAgICAgIHZhciBwcmV2aW91c0xpbmVTdGFydCA9IHRoaXMuc2Nhbm5lci5saW5l
U3RhcnQ7CisJICAgICAgICAgICAgdGhpcy5jb2xsZWN0Q29tbWVudHMoKTsKKwkgICAgICAgICAg
ICB2YXIgbmV4dCA9IHRoaXMuc2Nhbm5lci5sZXgoKTsKKwkgICAgICAgICAgICB0aGlzLnNjYW5u
ZXIuaW5kZXggPSBwcmV2aW91c0luZGV4OworCSAgICAgICAgICAgIHRoaXMuc2Nhbm5lci5saW5l
TnVtYmVyID0gcHJldmlvdXNMaW5lTnVtYmVyOworCSAgICAgICAgICAgIHRoaXMuc2Nhbm5lci5s
aW5lU3RhcnQgPSBwcmV2aW91c0xpbmVTdGFydDsKKwkgICAgICAgICAgICBtYXRjaCA9IChwcmV2
aW91c0xpbmVOdW1iZXIgPT09IG5leHQubGluZU51bWJlcikgJiYgKChuZXh0LnR5cGUgPT09IHRv
a2VuXzEuVG9rZW4uS2V5d29yZCkgfHwgKG5leHQudmFsdWUgPT09ICdmdW5jdGlvbicpKTsKKwkg
ICAgICAgIH0KKwkgICAgICAgIHJldHVybiBtYXRjaDsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnBy
b3RvdHlwZS5wYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24gPSBmdW5jdGlvbiAoaWRlbnRpZmllcklz
T3B0aW9uYWwpIHsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAg
ICAgICB2YXIgaXNBc3luYyA9IHRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnYXN5bmMnKTsK
KwkgICAgICAgIGlmIChpc0FzeW5jKSB7CisJICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsK
KwkgICAgICAgIH0KKwkgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnZnVuY3Rpb24nKTsKKwkg
ICAgICAgIHZhciBpc0dlbmVyYXRvciA9IGlzQXN5bmMgPyBmYWxzZSA6IHRoaXMubWF0Y2goJyon
KTsKKwkgICAgICAgIGlmIChpc0dlbmVyYXRvcikgeworCSAgICAgICAgICAgIHRoaXMubmV4dFRv
a2VuKCk7CisJICAgICAgICB9CisJICAgICAgICB2YXIgbWVzc2FnZTsKKwkgICAgICAgIHZhciBp
ZCA9IG51bGw7CisJICAgICAgICB2YXIgZmlyc3RSZXN0cmljdGVkID0gbnVsbDsKKwkgICAgICAg
IGlmICghaWRlbnRpZmllcklzT3B0aW9uYWwgfHwgIXRoaXMubWF0Y2goJygnKSkgeworCSAgICAg
ICAgICAgIHZhciB0b2tlbiA9IHRoaXMubG9va2FoZWFkOworCSAgICAgICAgICAgIGlkID0gdGhp
cy5wYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworCSAgICAgICAgICAgIGlmICh0aGlzLmNvbnRl
eHQuc3RyaWN0KSB7CisJICAgICAgICAgICAgICAgIGlmICh0aGlzLnNjYW5uZXIuaXNSZXN0cmlj
dGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJh
dGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0RnVuY3Rp
b25OYW1lKTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgICAg
ICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2Nhbm5lci5pc1Jlc3RyaWN0ZWRX
b3JkKHRva2VuLnZhbHVlKSkgeworCSAgICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVk
ID0gdG9rZW47CisJICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZXNfMS5NZXNz
YWdlcy5TdHJpY3RGdW5jdGlvbk5hbWU7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAg
ICAgICAgZWxzZSBpZiAodGhpcy5zY2FubmVyLmlzU3RyaWN0TW9kZVJlc2VydmVkV29yZCh0b2tl
bi52YWx1ZSkpIHsKKwkgICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2Vu
OworCSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3Ry
aWN0UmVzZXJ2ZWRXb3JkOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQorCSAg
ICAgICAgfQorCSAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dBd2FpdCA9IHRoaXMuY29udGV4dC5h
d2FpdDsKKwkgICAgICAgIHZhciBwcmV2aW91c0FsbG93WWllbGQgPSB0aGlzLmNvbnRleHQuYWxs
b3dZaWVsZDsKKwkgICAgICAgIHRoaXMuY29udGV4dC5hd2FpdCA9IGlzQXN5bmM7CisJICAgICAg
ICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9ICFpc0dlbmVyYXRvcjsKKwkgICAgICAgIHZhciBm
b3JtYWxQYXJhbWV0ZXJzID0gdGhpcy5wYXJzZUZvcm1hbFBhcmFtZXRlcnMoZmlyc3RSZXN0cmlj
dGVkKTsKKwkgICAgICAgIHZhciBwYXJhbXMgPSBmb3JtYWxQYXJhbWV0ZXJzLnBhcmFtczsKKwkg
ICAgICAgIHZhciBzdHJpY3RlZCA9IGZvcm1hbFBhcmFtZXRlcnMuc3RyaWN0ZWQ7CisJICAgICAg
ICBmaXJzdFJlc3RyaWN0ZWQgPSBmb3JtYWxQYXJhbWV0ZXJzLmZpcnN0UmVzdHJpY3RlZDsKKwkg
ICAgICAgIGlmIChmb3JtYWxQYXJhbWV0ZXJzLm1lc3NhZ2UpIHsKKwkgICAgICAgICAgICBtZXNz
YWdlID0gZm9ybWFsUGFyYW1ldGVycy5tZXNzYWdlOworCSAgICAgICAgfQorCSAgICAgICAgdmFy
IHByZXZpb3VzU3RyaWN0ID0gdGhpcy5jb250ZXh0LnN0cmljdDsKKwkgICAgICAgIHZhciBib2R5
ID0gdGhpcy5wYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKTsKKwkgICAgICAgIGlmICh0aGlz
LmNvbnRleHQuc3RyaWN0ICYmIGZpcnN0UmVzdHJpY3RlZCkgeworCSAgICAgICAgICAgIHRoaXMu
dGhyb3dVbmV4cGVjdGVkVG9rZW4oZmlyc3RSZXN0cmljdGVkLCBtZXNzYWdlKTsKKwkgICAgICAg
IH0KKwkgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIHN0cmljdGVkKSB7CisJICAg
ICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihzdHJpY3RlZCwgbWVzc2FnZSk7
CisJICAgICAgICB9CisJICAgICAgICB0aGlzLmNvbnRleHQuc3RyaWN0ID0gcHJldmlvdXNTdHJp
Y3Q7CisJICAgICAgICB0aGlzLmNvbnRleHQuYXdhaXQgPSBwcmV2aW91c0FsbG93QXdhaXQ7CisJ
ICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZaWVsZDsKKwkg
ICAgICAgIHJldHVybiBpc0FzeW5jID8gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Bc3lu
Y0Z1bmN0aW9uRGVjbGFyYXRpb24oaWQsIHBhcmFtcywgYm9keSkpIDoKKwkgICAgICAgICAgICB0
aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkZ1bmN0aW9uRGVjbGFyYXRpb24oaWQsIHBhcmFt
cywgYm9keSwgaXNHZW5lcmF0b3IpKTsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5w
YXJzZUZ1bmN0aW9uRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBub2Rl
ID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICB2YXIgaXNBc3luYyA9IHRoaXMubWF0Y2hD
b250ZXh0dWFsS2V5d29yZCgnYXN5bmMnKTsKKwkgICAgICAgIGlmIChpc0FzeW5jKSB7CisJICAg
ICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHRoaXMuZXhw
ZWN0S2V5d29yZCgnZnVuY3Rpb24nKTsKKwkgICAgICAgIHZhciBpc0dlbmVyYXRvciA9IGlzQXN5
bmMgPyBmYWxzZSA6IHRoaXMubWF0Y2goJyonKTsKKwkgICAgICAgIGlmIChpc0dlbmVyYXRvcikg
eworCSAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICB9CisJICAgICAgICB2
YXIgbWVzc2FnZTsKKwkgICAgICAgIHZhciBpZCA9IG51bGw7CisJICAgICAgICB2YXIgZmlyc3RS
ZXN0cmljdGVkOworCSAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dBd2FpdCA9IHRoaXMuY29udGV4
dC5hd2FpdDsKKwkgICAgICAgIHZhciBwcmV2aW91c0FsbG93WWllbGQgPSB0aGlzLmNvbnRleHQu
YWxsb3dZaWVsZDsKKwkgICAgICAgIHRoaXMuY29udGV4dC5hd2FpdCA9IGlzQXN5bmM7CisJICAg
ICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9ICFpc0dlbmVyYXRvcjsKKwkgICAgICAgIGlm
ICghdGhpcy5tYXRjaCgnKCcpKSB7CisJICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5sb29r
YWhlYWQ7CisJICAgICAgICAgICAgaWQgPSAoIXRoaXMuY29udGV4dC5zdHJpY3QgJiYgIWlzR2Vu
ZXJhdG9yICYmIHRoaXMubWF0Y2hLZXl3b3JkKCd5aWVsZCcpKSA/IHRoaXMucGFyc2VJZGVudGlm
aWVyTmFtZSgpIDogdGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworCSAgICAgICAgICAg
IGlmICh0aGlzLmNvbnRleHQuc3RyaWN0KSB7CisJICAgICAgICAgICAgICAgIGlmICh0aGlzLnNj
YW5uZXIuaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKwkgICAgICAgICAgICAgICAg
ICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1lc3NhZ2VzXzEuTWVzc2Fn
ZXMuU3RyaWN0RnVuY3Rpb25OYW1lKTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAg
IH0KKwkgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2Nhbm5l
ci5pc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworCSAgICAgICAgICAgICAgICAgICAg
Zmlyc3RSZXN0cmljdGVkID0gdG9rZW47CisJICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0g
bWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWU7CisJICAgICAgICAgICAgICAg
IH0KKwkgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5zY2FubmVyLmlzU3RyaWN0TW9kZVJl
c2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKwkgICAgICAgICAgICAgICAgICAgIGZpcnN0UmVz
dHJpY3RlZCA9IHRva2VuOworCSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2Vz
XzEuTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkOworCSAgICAgICAgICAgICAgICB9CisJICAg
ICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgdmFyIGZvcm1hbFBhcmFtZXRlcnMgPSB0
aGlzLnBhcnNlRm9ybWFsUGFyYW1ldGVycyhmaXJzdFJlc3RyaWN0ZWQpOworCSAgICAgICAgdmFy
IHBhcmFtcyA9IGZvcm1hbFBhcmFtZXRlcnMucGFyYW1zOworCSAgICAgICAgdmFyIHN0cmljdGVk
ID0gZm9ybWFsUGFyYW1ldGVycy5zdHJpY3RlZDsKKwkgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9
IGZvcm1hbFBhcmFtZXRlcnMuZmlyc3RSZXN0cmljdGVkOworCSAgICAgICAgaWYgKGZvcm1hbFBh
cmFtZXRlcnMubWVzc2FnZSkgeworCSAgICAgICAgICAgIG1lc3NhZ2UgPSBmb3JtYWxQYXJhbWV0
ZXJzLm1lc3NhZ2U7CisJICAgICAgICB9CisJICAgICAgICB2YXIgcHJldmlvdXNTdHJpY3QgPSB0
aGlzLmNvbnRleHQuc3RyaWN0OworCSAgICAgICAgdmFyIGJvZHkgPSB0aGlzLnBhcnNlRnVuY3Rp
b25Tb3VyY2VFbGVtZW50cygpOworCSAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QgJiYg
Zmlyc3RSZXN0cmljdGVkKSB7CisJICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tl
bihmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UpOworCSAgICAgICAgfQorCSAgICAgICAgaWYgKHRo
aXMuY29udGV4dC5zdHJpY3QgJiYgc3RyaWN0ZWQpIHsKKwkgICAgICAgICAgICB0aGlzLnRvbGVy
YXRlVW5leHBlY3RlZFRva2VuKHN0cmljdGVkLCBtZXNzYWdlKTsKKwkgICAgICAgIH0KKwkgICAg
ICAgIHRoaXMuY29udGV4dC5zdHJpY3QgPSBwcmV2aW91c1N0cmljdDsKKwkgICAgICAgIHRoaXMu
Y29udGV4dC5hd2FpdCA9IHByZXZpb3VzQWxsb3dBd2FpdDsKKwkgICAgICAgIHRoaXMuY29udGV4
dC5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkOworCSAgICAgICAgcmV0dXJuIGlzQXN5
bmMgPyB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkFzeW5jRnVuY3Rpb25FeHByZXNzaW9u
KGlkLCBwYXJhbXMsIGJvZHkpKSA6CisJICAgICAgICAgICAgdGhpcy5maW5hbGl6ZShub2RlLCBu
ZXcgTm9kZS5GdW5jdGlvbkV4cHJlc3Npb24oaWQsIHBhcmFtcywgYm9keSwgaXNHZW5lcmF0b3Ip
KTsKKwkgICAgfTsKKwkgICAgLy8gRUNNQS0yNjIgMTQuMS4xIERpcmVjdGl2ZSBQcm9sb2d1ZXMK
KwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZURpcmVjdGl2ZSA9IGZ1bmN0aW9uICgpIHsKKwkg
ICAgICAgIHZhciB0b2tlbiA9IHRoaXMubG9va2FoZWFkOworCSAgICAgICAgdmFyIG5vZGUgPSB0
aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHZhciBleHByID0gdGhpcy5wYXJzZUV4cHJlc3Np
b24oKTsKKwkgICAgICAgIHZhciBkaXJlY3RpdmUgPSAoZXhwci50eXBlID09PSBzeW50YXhfMS5T
eW50YXguTGl0ZXJhbCkgPyB0aGlzLmdldFRva2VuUmF3KHRva2VuKS5zbGljZSgxLCAtMSkgOiBu
dWxsOworCSAgICAgICAgdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7CisJICAgICAgICByZXR1cm4g
dGhpcy5maW5hbGl6ZShub2RlLCBkaXJlY3RpdmUgPyBuZXcgTm9kZS5EaXJlY3RpdmUoZXhwciwg
ZGlyZWN0aXZlKSA6IG5ldyBOb2RlLkV4cHJlc3Npb25TdGF0ZW1lbnQoZXhwcikpOworCSAgICB9
OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRGlyZWN0aXZlUHJvbG9ndWVzID0gZnVuY3Rp
b24gKCkgeworCSAgICAgICAgdmFyIGZpcnN0UmVzdHJpY3RlZCA9IG51bGw7CisJICAgICAgICB2
YXIgYm9keSA9IFtdOworCSAgICAgICAgd2hpbGUgKHRydWUpIHsKKwkgICAgICAgICAgICB2YXIg
dG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKKwkgICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0g
dG9rZW5fMS5Ub2tlbi5TdHJpbmdMaXRlcmFsKSB7CisJICAgICAgICAgICAgICAgIGJyZWFrOwor
CSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB2YXIgc3RhdGVtZW50ID0gdGhpcy5wYXJzZURp
cmVjdGl2ZSgpOworCSAgICAgICAgICAgIGJvZHkucHVzaChzdGF0ZW1lbnQpOworCSAgICAgICAg
ICAgIHZhciBkaXJlY3RpdmUgPSBzdGF0ZW1lbnQuZGlyZWN0aXZlOworCSAgICAgICAgICAgIGlm
ICh0eXBlb2YgZGlyZWN0aXZlICE9PSAnc3RyaW5nJykgeworCSAgICAgICAgICAgICAgICBicmVh
azsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgaWYgKGRpcmVjdGl2ZSA9PT0gJ3VzZSBz
dHJpY3QnKSB7CisJICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJpY3QgPSB0cnVlOwor
CSAgICAgICAgICAgICAgICBpZiAoZmlyc3RSZXN0cmljdGVkKSB7CisJICAgICAgICAgICAgICAg
ICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKGZpcnN0UmVzdHJpY3RlZCwgbWVzc2Fn
ZXNfMS5NZXNzYWdlcy5TdHJpY3RPY3RhbExpdGVyYWwpOworCSAgICAgICAgICAgICAgICB9CisJ
ICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICBpZiAo
IWZpcnN0UmVzdHJpY3RlZCAmJiB0b2tlbi5vY3RhbCkgeworCSAgICAgICAgICAgICAgICAgICAg
Zmlyc3RSZXN0cmljdGVkID0gdG9rZW47CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAg
ICB9CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gYm9keTsKKwkgICAgfTsKKwkgICAgLy8g
RUNNQS0yNjIgMTQuMyBNZXRob2QgRGVmaW5pdGlvbnMKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5x
dWFsaWZpZWRQcm9wZXJ0eU5hbWUgPSBmdW5jdGlvbiAodG9rZW4pIHsKKwkgICAgICAgIHN3aXRj
aCAodG9rZW4udHlwZSkgeworCSAgICAgICAgICAgIGNhc2UgdG9rZW5fMS5Ub2tlbi5JZGVudGlm
aWVyOgorCSAgICAgICAgICAgIGNhc2UgdG9rZW5fMS5Ub2tlbi5TdHJpbmdMaXRlcmFsOgorCSAg
ICAgICAgICAgIGNhc2UgdG9rZW5fMS5Ub2tlbi5Cb29sZWFuTGl0ZXJhbDoKKwkgICAgICAgICAg
ICBjYXNlIHRva2VuXzEuVG9rZW4uTnVsbExpdGVyYWw6CisJICAgICAgICAgICAgY2FzZSB0b2tl
bl8xLlRva2VuLk51bWVyaWNMaXRlcmFsOgorCSAgICAgICAgICAgIGNhc2UgdG9rZW5fMS5Ub2tl
bi5LZXl3b3JkOgorCSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKwkgICAgICAgICAgICBj
YXNlIHRva2VuXzEuVG9rZW4uUHVuY3R1YXRvcjoKKwkgICAgICAgICAgICAgICAgcmV0dXJuIHRv
a2VuLnZhbHVlID09PSAnWyc7CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gZmFsc2U7CisJ
ICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VHZXR0ZXJNZXRob2QgPSBmdW5jdGlv
biAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAg
dGhpcy5leHBlY3QoJygnKTsKKwkgICAgICAgIHRoaXMuZXhwZWN0KCcpJyk7CisJICAgICAgICB2
YXIgaXNHZW5lcmF0b3IgPSBmYWxzZTsKKwkgICAgICAgIHZhciBwYXJhbXMgPSB7CisJICAgICAg
ICAgICAgcGFyYW1zOiBbXSwKKwkgICAgICAgICAgICBzdHJpY3RlZDogbnVsbCwKKwkgICAgICAg
ICAgICBmaXJzdFJlc3RyaWN0ZWQ6IG51bGwsCisJICAgICAgICAgICAgbWVzc2FnZTogbnVsbAor
CSAgICAgICAgfTsKKwkgICAgICAgIHZhciBwcmV2aW91c0FsbG93WWllbGQgPSB0aGlzLmNvbnRl
eHQuYWxsb3dZaWVsZDsKKwkgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0gZmFsc2U7
CisJICAgICAgICB2YXIgbWV0aG9kID0gdGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kKHBhcmFtcyk7
CisJICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZaWVsZDsK
KwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkZ1bmN0aW9uRXhw
cmVzc2lvbihudWxsLCBwYXJhbXMucGFyYW1zLCBtZXRob2QsIGlzR2VuZXJhdG9yKSk7CisJICAg
IH07CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VTZXR0ZXJNZXRob2QgPSBmdW5jdGlvbiAo
KSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdmFy
IG9wdGlvbnMgPSB7CisJICAgICAgICAgICAgcGFyYW1zOiBbXSwKKwkgICAgICAgICAgICBmaXJz
dFJlc3RyaWN0ZWQ6IG51bGwsCisJICAgICAgICAgICAgcGFyYW1TZXQ6IHt9CisJICAgICAgICB9
OworCSAgICAgICAgdmFyIGlzR2VuZXJhdG9yID0gZmFsc2U7CisJICAgICAgICB2YXIgcHJldmlv
dXNBbGxvd1lpZWxkID0gdGhpcy5jb250ZXh0LmFsbG93WWllbGQ7CisJICAgICAgICB0aGlzLmNv
bnRleHQuYWxsb3dZaWVsZCA9IGZhbHNlOworCSAgICAgICAgdGhpcy5leHBlY3QoJygnKTsKKwkg
ICAgICAgIGlmICh0aGlzLm1hdGNoKCcpJykpIHsKKwkgICAgICAgICAgICB0aGlzLnRvbGVyYXRl
VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTsKKwkgICAgICAgIH0KKwkgICAgICAgIGVs
c2UgeworCSAgICAgICAgICAgIHRoaXMucGFyc2VGb3JtYWxQYXJhbWV0ZXIob3B0aW9ucyk7CisJ
ICAgICAgICB9CisJICAgICAgICB0aGlzLmV4cGVjdCgnKScpOworCSAgICAgICAgdmFyIG1ldGhv
ZCA9IHRoaXMucGFyc2VQcm9wZXJ0eU1ldGhvZChvcHRpb25zKTsKKwkgICAgICAgIHRoaXMuY29u
dGV4dC5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkOworCSAgICAgICAgcmV0dXJuIHRo
aXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRnVuY3Rpb25FeHByZXNzaW9uKG51bGwsIG9wdGlv
bnMucGFyYW1zLCBtZXRob2QsIGlzR2VuZXJhdG9yKSk7CisJICAgIH07CisJICAgIFBhcnNlci5w
cm90b3R5cGUucGFyc2VHZW5lcmF0b3JNZXRob2QgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2
YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdmFyIGlzR2VuZXJhdG9yID0g
dHJ1ZTsKKwkgICAgICAgIHZhciBwcmV2aW91c0FsbG93WWllbGQgPSB0aGlzLmNvbnRleHQuYWxs
b3dZaWVsZDsKKwkgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0gdHJ1ZTsKKwkgICAg
ICAgIHZhciBwYXJhbXMgPSB0aGlzLnBhcnNlRm9ybWFsUGFyYW1ldGVycygpOworCSAgICAgICAg
dGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSBmYWxzZTsKKwkgICAgICAgIHZhciBtZXRob2QgPSB0
aGlzLnBhcnNlUHJvcGVydHlNZXRob2QocGFyYW1zKTsKKwkgICAgICAgIHRoaXMuY29udGV4dC5h
bGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkOworCSAgICAgICAgcmV0dXJuIHRoaXMuZmlu
YWxpemUobm9kZSwgbmV3IE5vZGUuRnVuY3Rpb25FeHByZXNzaW9uKG51bGwsIHBhcmFtcy5wYXJh
bXMsIG1ldGhvZCwgaXNHZW5lcmF0b3IpKTsKKwkgICAgfTsKKwkgICAgLy8gRUNNQS0yNjIgMTQu
NCBHZW5lcmF0b3IgRnVuY3Rpb24gRGVmaW5pdGlvbnMKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5w
YXJzZVlpZWxkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBub2RlID0g
dGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ3lpZWxkJyk7
CisJICAgICAgICB2YXIgYXJndW1lbnQgPSBudWxsOworCSAgICAgICAgdmFyIGRlbGVnYXRlID0g
ZmFsc2U7CisJICAgICAgICBpZiAoIXRoaXMuaGFzTGluZVRlcm1pbmF0b3IpIHsKKwkgICAgICAg
ICAgICB2YXIgcHJldmlvdXNBbGxvd1lpZWxkID0gdGhpcy5jb250ZXh0LmFsbG93WWllbGQ7CisJ
ICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSBmYWxzZTsKKwkgICAgICAgICAg
ICBkZWxlZ2F0ZSA9IHRoaXMubWF0Y2goJyonKTsKKwkgICAgICAgICAgICBpZiAoZGVsZWdhdGUp
IHsKKwkgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgICAgICAgICAg
YXJndW1lbnQgPSB0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKKwkgICAgICAgICAg
ICB9CisJICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXRj
aCgnOycpICYmICF0aGlzLm1hdGNoKCd9JykgJiYgIXRoaXMubWF0Y2goJyknKSAmJiB0aGlzLmxv
b2thaGVhZC50eXBlICE9PSB0b2tlbl8xLlRva2VuLkVPRikgeworCSAgICAgICAgICAgICAgICAg
ICAgYXJndW1lbnQgPSB0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKKwkgICAgICAg
ICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxs
b3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZaWVsZDsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVy
biB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLllpZWxkRXhwcmVzc2lvbihhcmd1bWVudCwg
ZGVsZWdhdGUpKTsKKwkgICAgfTsKKwkgICAgLy8gRUNNQS0yNjIgMTQuNSBDbGFzcyBEZWZpbml0
aW9ucworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQ2xhc3NFbGVtZW50ID0gZnVuY3Rpb24g
KGhhc0NvbnN0cnVjdG9yKSB7CisJICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLmxvb2thaGVhZDsK
KwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICB2YXIga2lu
ZCA9ICcnOworCSAgICAgICAgdmFyIGtleSA9IG51bGw7CisJICAgICAgICB2YXIgdmFsdWUgPSBu
dWxsOworCSAgICAgICAgdmFyIGNvbXB1dGVkID0gZmFsc2U7CisJICAgICAgICB2YXIgbWV0aG9k
ID0gZmFsc2U7CisJICAgICAgICB2YXIgaXNTdGF0aWMgPSBmYWxzZTsKKwkgICAgICAgIHZhciBp
c0FzeW5jID0gZmFsc2U7CisJICAgICAgICBpZiAodGhpcy5tYXRjaCgnKicpKSB7CisJICAgICAg
ICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgeworCSAg
ICAgICAgICAgIGNvbXB1dGVkID0gdGhpcy5tYXRjaCgnWycpOworCSAgICAgICAgICAgIGtleSA9
IHRoaXMucGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpOworCSAgICAgICAgICAgIHZhciBpZCA9IGtl
eTsKKwkgICAgICAgICAgICBpZiAoaWQubmFtZSA9PT0gJ3N0YXRpYycgJiYgKHRoaXMucXVhbGlm
aWVkUHJvcGVydHlOYW1lKHRoaXMubG9va2FoZWFkKSB8fCB0aGlzLm1hdGNoKCcqJykpKSB7CisJ
ICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5sb29rYWhlYWQ7CisJICAgICAgICAgICAgICAg
IGlzU3RhdGljID0gdHJ1ZTsKKwkgICAgICAgICAgICAgICAgY29tcHV0ZWQgPSB0aGlzLm1hdGNo
KCdbJyk7CisJICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCcqJykpIHsKKwkgICAgICAg
ICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAg
ICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLnBhcnNl
T2JqZWN0UHJvcGVydHlLZXkoKTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0K
KwkgICAgICAgICAgICBpc0FzeW5jID0gKHRva2VuLnR5cGUgPT09IHRva2VuXzEuVG9rZW4uSWRl
bnRpZmllcikgJiYgIXRoaXMuaGFzTGluZVRlcm1pbmF0b3IgJiYgKHRoaXMubG9va2FoZWFkLnR5
cGUgPT09IHRva2VuXzEuVG9rZW4uSWRlbnRpZmllcikgJiYgKHRva2VuLnZhbHVlID09PSAnYXN5
bmMnKTsKKwkgICAgICAgICAgICBpZiAoaXNBc3luYykgeworCSAgICAgICAgICAgICAgICB0b2tl
biA9IHRoaXMubG9va2FoZWFkOworCSAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLnBhcnNlT2Jq
ZWN0UHJvcGVydHlLZXkoKTsKKwkgICAgICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IHRv
a2VuXzEuVG9rZW4uSWRlbnRpZmllciAmJiBbJ2dldCcsICdzZXQnLCAnY29uc3RydWN0b3InXS5p
bmRleE9mKHRva2VuLnZhbHVlKSA+PSAwKSB7CisJICAgICAgICAgICAgICAgICAgICB0aGlzLnRv
bGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuKTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAg
ICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIHZhciBsb29rYWhlYWRQcm9wZXJ0eUtleSA9
IHRoaXMucXVhbGlmaWVkUHJvcGVydHlOYW1lKHRoaXMubG9va2FoZWFkKTsKKwkgICAgICAgIGlm
ICh0b2tlbi50eXBlID09PSB0b2tlbl8xLlRva2VuLklkZW50aWZpZXIpIHsKKwkgICAgICAgICAg
ICBpZiAodG9rZW4udmFsdWUgPT09ICdnZXQnICYmIGxvb2thaGVhZFByb3BlcnR5S2V5KSB7CisJ
ICAgICAgICAgICAgICAgIGtpbmQgPSAnZ2V0JzsKKwkgICAgICAgICAgICAgICAgY29tcHV0ZWQg
PSB0aGlzLm1hdGNoKCdbJyk7CisJICAgICAgICAgICAgICAgIGtleSA9IHRoaXMucGFyc2VPYmpl
Y3RQcm9wZXJ0eUtleSgpOworCSAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVs
ZCA9IGZhbHNlOworCSAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMucGFyc2VHZXR0ZXJNZXRo
b2QoKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSBpZiAodG9rZW4udmFsdWUg
PT09ICdzZXQnICYmIGxvb2thaGVhZFByb3BlcnR5S2V5KSB7CisJICAgICAgICAgICAgICAgIGtp
bmQgPSAnc2V0JzsKKwkgICAgICAgICAgICAgICAgY29tcHV0ZWQgPSB0aGlzLm1hdGNoKCdbJyk7
CisJICAgICAgICAgICAgICAgIGtleSA9IHRoaXMucGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpOwor
CSAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMucGFyc2VTZXR0ZXJNZXRob2QoKTsKKwkgICAg
ICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSB0
b2tlbl8xLlRva2VuLlB1bmN0dWF0b3IgJiYgdG9rZW4udmFsdWUgPT09ICcqJyAmJiBsb29rYWhl
YWRQcm9wZXJ0eUtleSkgeworCSAgICAgICAgICAgIGtpbmQgPSAnaW5pdCc7CisJICAgICAgICAg
ICAgY29tcHV0ZWQgPSB0aGlzLm1hdGNoKCdbJyk7CisJICAgICAgICAgICAga2V5ID0gdGhpcy5w
YXJzZU9iamVjdFByb3BlcnR5S2V5KCk7CisJICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnBhcnNl
R2VuZXJhdG9yTWV0aG9kKCk7CisJICAgICAgICAgICAgbWV0aG9kID0gdHJ1ZTsKKwkgICAgICAg
IH0KKwkgICAgICAgIGlmICgha2luZCAmJiBrZXkgJiYgdGhpcy5tYXRjaCgnKCcpKSB7CisJICAg
ICAgICAgICAga2luZCA9ICdpbml0JzsKKwkgICAgICAgICAgICB2YWx1ZSA9IGlzQXN5bmMgPyB0
aGlzLnBhcnNlUHJvcGVydHlNZXRob2RBc3luY0Z1bmN0aW9uKCkgOiB0aGlzLnBhcnNlUHJvcGVy
dHlNZXRob2RGdW5jdGlvbigpOworCSAgICAgICAgICAgIG1ldGhvZCA9IHRydWU7CisJICAgICAg
ICB9CisJICAgICAgICBpZiAoIWtpbmQpIHsKKwkgICAgICAgICAgICB0aGlzLnRocm93VW5leHBl
Y3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTsKKwkgICAgICAgIH0KKwkgICAgICAgIGlmIChraW5k
ID09PSAnaW5pdCcpIHsKKwkgICAgICAgICAgICBraW5kID0gJ21ldGhvZCc7CisJICAgICAgICB9
CisJICAgICAgICBpZiAoIWNvbXB1dGVkKSB7CisJICAgICAgICAgICAgaWYgKGlzU3RhdGljICYm
IHRoaXMuaXNQcm9wZXJ0eUtleShrZXksICdwcm90b3R5cGUnKSkgeworCSAgICAgICAgICAgICAg
ICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRva2VuLCBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0
YXRpY1Byb3RvdHlwZSk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGlmICghaXNTdGF0
aWMgJiYgdGhpcy5pc1Byb3BlcnR5S2V5KGtleSwgJ2NvbnN0cnVjdG9yJykpIHsKKwkgICAgICAg
ICAgICAgICAgaWYgKGtpbmQgIT09ICdtZXRob2QnIHx8ICFtZXRob2QgfHwgKHZhbHVlICYmIHZh
bHVlLmdlbmVyYXRvcikpIHsKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVj
dGVkVG9rZW4odG9rZW4sIG1lc3NhZ2VzXzEuTWVzc2FnZXMuQ29uc3RydWN0b3JTcGVjaWFsTWV0
aG9kKTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBpZiAoaGFzQ29uc3Ry
dWN0b3IudmFsdWUpIHsKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVk
VG9rZW4odG9rZW4sIG1lc3NhZ2VzXzEuTWVzc2FnZXMuRHVwbGljYXRlQ29uc3RydWN0b3IpOwor
CSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAg
ICAgICAgICAgaGFzQ29uc3RydWN0b3IudmFsdWUgPSB0cnVlOworCSAgICAgICAgICAgICAgICB9
CisJICAgICAgICAgICAgICAgIGtpbmQgPSAnY29uc3RydWN0b3InOworCSAgICAgICAgICAgIH0K
KwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2Rl
Lk1ldGhvZERlZmluaXRpb24oa2V5LCBjb21wdXRlZCwgdmFsdWUsIGtpbmQsIGlzU3RhdGljKSk7
CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VDbGFzc0VsZW1lbnRMaXN0ID0g
ZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIGJvZHkgPSBbXTsKKwkgICAgICAgIHZhciBoYXND
b25zdHJ1Y3RvciA9IHsgdmFsdWU6IGZhbHNlIH07CisJICAgICAgICB0aGlzLmV4cGVjdCgneycp
OworCSAgICAgICAgd2hpbGUgKCF0aGlzLm1hdGNoKCd9JykpIHsKKwkgICAgICAgICAgICBpZiAo
dGhpcy5tYXRjaCgnOycpKSB7CisJICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJ
ICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICBib2R5
LnB1c2godGhpcy5wYXJzZUNsYXNzRWxlbWVudChoYXNDb25zdHJ1Y3RvcikpOworCSAgICAgICAg
ICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIHRoaXMuZXhwZWN0KCd9Jyk7CisJICAgICAgICBy
ZXR1cm4gYm9keTsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUNsYXNzQm9k
eSA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7
CisJICAgICAgICB2YXIgZWxlbWVudExpc3QgPSB0aGlzLnBhcnNlQ2xhc3NFbGVtZW50TGlzdCgp
OworCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQ2xhc3NCb2R5
KGVsZW1lbnRMaXN0KSk7CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VDbGFz
c0RlY2xhcmF0aW9uID0gZnVuY3Rpb24gKGlkZW50aWZpZXJJc09wdGlvbmFsKSB7CisJICAgICAg
ICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdmFyIHByZXZpb3VzU3Ry
aWN0ID0gdGhpcy5jb250ZXh0LnN0cmljdDsKKwkgICAgICAgIHRoaXMuY29udGV4dC5zdHJpY3Qg
PSB0cnVlOworCSAgICAgICAgdGhpcy5leHBlY3RLZXl3b3JkKCdjbGFzcycpOworCSAgICAgICAg
dmFyIGlkID0gKGlkZW50aWZpZXJJc09wdGlvbmFsICYmICh0aGlzLmxvb2thaGVhZC50eXBlICE9
PSB0b2tlbl8xLlRva2VuLklkZW50aWZpZXIpKSA/IG51bGwgOiB0aGlzLnBhcnNlVmFyaWFibGVJ
ZGVudGlmaWVyKCk7CisJICAgICAgICB2YXIgc3VwZXJDbGFzcyA9IG51bGw7CisJICAgICAgICBp
ZiAodGhpcy5tYXRjaEtleXdvcmQoJ2V4dGVuZHMnKSkgeworCSAgICAgICAgICAgIHRoaXMubmV4
dFRva2VuKCk7CisJICAgICAgICAgICAgc3VwZXJDbGFzcyA9IHRoaXMuaXNvbGF0ZUNvdmVyR3Jh
bW1hcih0aGlzLnBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCk7CisJICAgICAg
ICB9CisJICAgICAgICB2YXIgY2xhc3NCb2R5ID0gdGhpcy5wYXJzZUNsYXNzQm9keSgpOworCSAg
ICAgICAgdGhpcy5jb250ZXh0LnN0cmljdCA9IHByZXZpb3VzU3RyaWN0OworCSAgICAgICAgcmV0
dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQ2xhc3NEZWNsYXJhdGlvbihpZCwgc3Vw
ZXJDbGFzcywgY2xhc3NCb2R5KSk7CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFy
c2VDbGFzc0V4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRo
aXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdmFyIHByZXZpb3VzU3RyaWN0ID0gdGhpcy5jb250
ZXh0LnN0cmljdDsKKwkgICAgICAgIHRoaXMuY29udGV4dC5zdHJpY3QgPSB0cnVlOworCSAgICAg
ICAgdGhpcy5leHBlY3RLZXl3b3JkKCdjbGFzcycpOworCSAgICAgICAgdmFyIGlkID0gKHRoaXMu
bG9va2FoZWFkLnR5cGUgPT09IHRva2VuXzEuVG9rZW4uSWRlbnRpZmllcikgPyB0aGlzLnBhcnNl
VmFyaWFibGVJZGVudGlmaWVyKCkgOiBudWxsOworCSAgICAgICAgdmFyIHN1cGVyQ2xhc3MgPSBu
dWxsOworCSAgICAgICAgaWYgKHRoaXMubWF0Y2hLZXl3b3JkKCdleHRlbmRzJykpIHsKKwkgICAg
ICAgICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgICAgIHN1cGVyQ2xhc3MgPSB0aGlz
Lmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxv
d0NhbGwpOworCSAgICAgICAgfQorCSAgICAgICAgdmFyIGNsYXNzQm9keSA9IHRoaXMucGFyc2VD
bGFzc0JvZHkoKTsKKwkgICAgICAgIHRoaXMuY29udGV4dC5zdHJpY3QgPSBwcmV2aW91c1N0cmlj
dDsKKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkNsYXNzRXhw
cmVzc2lvbihpZCwgc3VwZXJDbGFzcywgY2xhc3NCb2R5KSk7CisJICAgIH07CisJICAgIC8vIEVD
TUEtMjYyIDE1LjEgU2NyaXB0cworCSAgICAvLyBFQ01BLTI2MiAxNS4yIE1vZHVsZXMKKwkgICAg
UGFyc2VyLnByb3RvdHlwZS5wYXJzZU1vZHVsZSA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHRo
aXMuY29udGV4dC5zdHJpY3QgPSB0cnVlOworCSAgICAgICAgdGhpcy5jb250ZXh0LmlzTW9kdWxl
ID0gdHJ1ZTsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAg
ICB2YXIgYm9keSA9IHRoaXMucGFyc2VEaXJlY3RpdmVQcm9sb2d1ZXMoKTsKKwkgICAgICAgIHdo
aWxlICh0aGlzLnN0YXJ0TWFya2VyLmluZGV4IDwgdGhpcy5zY2FubmVyLmxlbmd0aCkgeworCSAg
ICAgICAgICAgIGJvZHkucHVzaCh0aGlzLnBhcnNlU3RhdGVtZW50TGlzdEl0ZW0oKSk7CisJICAg
ICAgICB9CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Nb2R1
bGUoYm9keSkpOworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlU2NyaXB0ID0g
ZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkg
ICAgICAgIHZhciBib2R5ID0gdGhpcy5wYXJzZURpcmVjdGl2ZVByb2xvZ3VlcygpOworCSAgICAg
ICAgd2hpbGUgKHRoaXMuc3RhcnRNYXJrZXIuaW5kZXggPCB0aGlzLnNjYW5uZXIubGVuZ3RoKSB7
CisJICAgICAgICAgICAgYm9keS5wdXNoKHRoaXMucGFyc2VTdGF0ZW1lbnRMaXN0SXRlbSgpKTsK
KwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2Rl
LlNjcmlwdChib2R5KSk7CisJICAgIH07CisJICAgIC8vIEVDTUEtMjYyIDE1LjIuMiBJbXBvcnRz
CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VNb2R1bGVTcGVjaWZpZXIgPSBmdW5jdGlvbiAo
KSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgaWYg
KHRoaXMubG9va2FoZWFkLnR5cGUgIT09IHRva2VuXzEuVG9rZW4uU3RyaW5nTGl0ZXJhbCkgewor
CSAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkludmFsaWRN
b2R1bGVTcGVjaWZpZXIpOworCSAgICAgICAgfQorCSAgICAgICAgdmFyIHRva2VuID0gdGhpcy5u
ZXh0VG9rZW4oKTsKKwkgICAgICAgIHZhciByYXcgPSB0aGlzLmdldFRva2VuUmF3KHRva2VuKTsK
KwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkxpdGVyYWwodG9r
ZW4udmFsdWUsIHJhdykpOworCSAgICB9OworCSAgICAvLyBpbXBvcnQgezxmb28gYXMgYmFyPn0g
Li4uOworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlSW1wb3J0U3BlY2lmaWVyID0gZnVuY3Rp
b24gKCkgeworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAg
IHZhciBpbXBvcnRlZDsKKwkgICAgICAgIHZhciBsb2NhbDsKKwkgICAgICAgIGlmICh0aGlzLmxv
b2thaGVhZC50eXBlID09PSB0b2tlbl8xLlRva2VuLklkZW50aWZpZXIpIHsKKwkgICAgICAgICAg
ICBpbXBvcnRlZCA9IHRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKwkgICAgICAgICAg
ICBsb2NhbCA9IGltcG9ydGVkOworCSAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoQ29udGV4dHVh
bEtleXdvcmQoJ2FzJykpIHsKKwkgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkg
ICAgICAgICAgICAgICAgbG9jYWwgPSB0aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CisJ
ICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAg
aW1wb3J0ZWQgPSB0aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKTsKKwkgICAgICAgICAgICBsb2Nh
bCA9IGltcG9ydGVkOworCSAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdv
cmQoJ2FzJykpIHsKKwkgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAg
ICAgICAgICAgbG9jYWwgPSB0aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CisJICAgICAg
ICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICB0aGlzLnRocm93
VW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRva2VuKCkpOworCSAgICAgICAgICAgIH0KKwkgICAg
ICAgIH0KKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkltcG9y
dFNwZWNpZmllcihsb2NhbCwgaW1wb3J0ZWQpKTsKKwkgICAgfTsKKwkgICAgLy8ge2ZvbywgYmFy
IGFzIGJhc30KKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZU5hbWVkSW1wb3J0cyA9IGZ1bmN0
aW9uICgpIHsKKwkgICAgICAgIHRoaXMuZXhwZWN0KCd7Jyk7CisJICAgICAgICB2YXIgc3BlY2lm
aWVycyA9IFtdOworCSAgICAgICAgd2hpbGUgKCF0aGlzLm1hdGNoKCd9JykpIHsKKwkgICAgICAg
ICAgICBzcGVjaWZpZXJzLnB1c2godGhpcy5wYXJzZUltcG9ydFNwZWNpZmllcigpKTsKKwkgICAg
ICAgICAgICBpZiAoIXRoaXMubWF0Y2goJ30nKSkgeworCSAgICAgICAgICAgICAgICB0aGlzLmV4
cGVjdCgnLCcpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIHRoaXMuZXhw
ZWN0KCd9Jyk7CisJICAgICAgICByZXR1cm4gc3BlY2lmaWVyczsKKwkgICAgfTsKKwkgICAgLy8g
aW1wb3J0IDxmb28+IC4uLjsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUltcG9ydERlZmF1
bHRTcGVjaWZpZXIgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3Jl
YXRlTm9kZSgpOworCSAgICAgICAgdmFyIGxvY2FsID0gdGhpcy5wYXJzZUlkZW50aWZpZXJOYW1l
KCk7CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5JbXBvcnRE
ZWZhdWx0U3BlY2lmaWVyKGxvY2FsKSk7CisJICAgIH07CisJICAgIC8vIGltcG9ydCA8KiBhcyBm
b28+IC4uLjsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUltcG9ydE5hbWVzcGFjZVNwZWNp
ZmllciA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2Rl
KCk7CisJICAgICAgICB0aGlzLmV4cGVjdCgnKicpOworCSAgICAgICAgaWYgKCF0aGlzLm1hdGNo
Q29udGV4dHVhbEtleXdvcmQoJ2FzJykpIHsKKwkgICAgICAgICAgICB0aGlzLnRocm93RXJyb3Io
bWVzc2FnZXNfMS5NZXNzYWdlcy5Ob0FzQWZ0ZXJJbXBvcnROYW1lc3BhY2UpOworCSAgICAgICAg
fQorCSAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgIHZhciBsb2NhbCA9IHRoaXMu
cGFyc2VJZGVudGlmaWVyTmFtZSgpOworCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9k
ZSwgbmV3IE5vZGUuSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKGxvY2FsKSk7CisJICAgIH07CisJ
ICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VJbXBvcnREZWNsYXJhdGlvbiA9IGZ1bmN0aW9uICgp
IHsKKwkgICAgICAgIGlmICh0aGlzLmNvbnRleHQuaW5GdW5jdGlvbkJvZHkpIHsKKwkgICAgICAg
ICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5JbGxlZ2FsSW1wb3J0RGVj
bGFyYXRpb24pOworCSAgICAgICAgfQorCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5v
ZGUoKTsKKwkgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnaW1wb3J0Jyk7CisJICAgICAgICB2
YXIgc3JjOworCSAgICAgICAgdmFyIHNwZWNpZmllcnMgPSBbXTsKKwkgICAgICAgIGlmICh0aGlz
Lmxvb2thaGVhZC50eXBlID09PSB0b2tlbl8xLlRva2VuLlN0cmluZ0xpdGVyYWwpIHsKKwkgICAg
ICAgICAgICAvLyBpbXBvcnQgJ2Zvbyc7CisJICAgICAgICAgICAgc3JjID0gdGhpcy5wYXJzZU1v
ZHVsZVNwZWNpZmllcigpOworCSAgICAgICAgfQorCSAgICAgICAgZWxzZSB7CisJICAgICAgICAg
ICAgaWYgKHRoaXMubWF0Y2goJ3snKSkgeworCSAgICAgICAgICAgICAgICAvLyBpbXBvcnQge2Jh
cn0KKwkgICAgICAgICAgICAgICAgc3BlY2lmaWVycyA9IHNwZWNpZmllcnMuY29uY2F0KHRoaXMu
cGFyc2VOYW1lZEltcG9ydHMoKSk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2Ug
aWYgKHRoaXMubWF0Y2goJyonKSkgeworCSAgICAgICAgICAgICAgICAvLyBpbXBvcnQgKiBhcyBm
b28KKwkgICAgICAgICAgICAgICAgc3BlY2lmaWVycy5wdXNoKHRoaXMucGFyc2VJbXBvcnROYW1l
c3BhY2VTcGVjaWZpZXIoKSk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYg
KHRoaXMuaXNJZGVudGlmaWVyTmFtZSh0aGlzLmxvb2thaGVhZCkgJiYgIXRoaXMubWF0Y2hLZXl3
b3JkKCdkZWZhdWx0JykpIHsKKwkgICAgICAgICAgICAgICAgLy8gaW1wb3J0IGZvbworCSAgICAg
ICAgICAgICAgICBzcGVjaWZpZXJzLnB1c2godGhpcy5wYXJzZUltcG9ydERlZmF1bHRTcGVjaWZp
ZXIoKSk7CisJICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCcsJykpIHsKKwkgICAgICAg
ICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICAgICAgICAgICAgICBpZiAo
dGhpcy5tYXRjaCgnKicpKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW1wb3J0IGZv
bywgKiBhcyBmb28KKwkgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXJzLnB1c2godGhp
cy5wYXJzZUltcG9ydE5hbWVzcGFjZVNwZWNpZmllcigpKTsKKwkgICAgICAgICAgICAgICAgICAg
IH0KKwkgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2goJ3snKSkgeworCSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGltcG9ydCBmb28sIHtiYXJ9CisJICAgICAgICAgICAg
ICAgICAgICAgICAgc3BlY2lmaWVycyA9IHNwZWNpZmllcnMuY29uY2F0KHRoaXMucGFyc2VOYW1l
ZEltcG9ydHMoKSk7CisJICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAg
ICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRv
a2VuKHRoaXMubG9va2FoZWFkKTsKKwkgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAg
ICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAg
ICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLm5leHRUb2tlbigpKTsKKwkgICAg
ICAgICAgICB9CisJICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQo
J2Zyb20nKSkgeworCSAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IHRoaXMubG9va2FoZWFk
LnZhbHVlID8gbWVzc2FnZXNfMS5NZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4gOiBtZXNzYWdlc18x
Lk1lc3NhZ2VzLk1pc3NpbmdGcm9tQ2xhdXNlOworCSAgICAgICAgICAgICAgICB0aGlzLnRocm93
RXJyb3IobWVzc2FnZSwgdGhpcy5sb29rYWhlYWQudmFsdWUpOworCSAgICAgICAgICAgIH0KKwkg
ICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgICAgIHNyYyA9IHRoaXMucGFy
c2VNb2R1bGVTcGVjaWZpZXIoKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHRoaXMuY29uc3VtZVNl
bWljb2xvbigpOworCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUu
SW1wb3J0RGVjbGFyYXRpb24oc3BlY2lmaWVycywgc3JjKSk7CisJICAgIH07CisJICAgIC8vIEVD
TUEtMjYyIDE1LjIuMyBFeHBvcnRzCisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VFeHBvcnRT
cGVjaWZpZXIgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRl
Tm9kZSgpOworCSAgICAgICAgdmFyIGxvY2FsID0gdGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCk7
CisJICAgICAgICB2YXIgZXhwb3J0ZWQgPSBsb2NhbDsKKwkgICAgICAgIGlmICh0aGlzLm1hdGNo
Q29udGV4dHVhbEtleXdvcmQoJ2FzJykpIHsKKwkgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigp
OworCSAgICAgICAgICAgIGV4cG9ydGVkID0gdGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCk7CisJ
ICAgICAgICB9CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5F
eHBvcnRTcGVjaWZpZXIobG9jYWwsIGV4cG9ydGVkKSk7CisJICAgIH07CisJICAgIFBhcnNlci5w
cm90b3R5cGUucGFyc2VFeHBvcnREZWNsYXJhdGlvbiA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAg
IGlmICh0aGlzLmNvbnRleHQuaW5GdW5jdGlvbkJvZHkpIHsKKwkgICAgICAgICAgICB0aGlzLnRo
cm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5JbGxlZ2FsRXhwb3J0RGVjbGFyYXRpb24pOwor
CSAgICAgICAgfQorCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAg
ICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnZXhwb3J0Jyk7CisJICAgICAgICB2YXIgZXhwb3J0RGVj
bGFyYXRpb247CisJICAgICAgICBpZiAodGhpcy5tYXRjaEtleXdvcmQoJ2RlZmF1bHQnKSkgewor
CSAgICAgICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IC4uLgorCSAgICAgICAgICAgIHRoaXMubmV4
dFRva2VuKCk7CisJICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hLZXl3b3JkKCdmdW5jdGlvbicp
KSB7CisJICAgICAgICAgICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvbyAoKSB7
fQorCSAgICAgICAgICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKSB7fQorCSAg
ICAgICAgICAgICAgICB2YXIgZGVjbGFyYXRpb24gPSB0aGlzLnBhcnNlRnVuY3Rpb25EZWNsYXJh
dGlvbih0cnVlKTsKKwkgICAgICAgICAgICAgICAgZXhwb3J0RGVjbGFyYXRpb24gPSB0aGlzLmZp
bmFsaXplKG5vZGUsIG5ldyBOb2RlLkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihkZWNsYXJhdGlv
bikpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoS2V5
d29yZCgnY2xhc3MnKSkgeworCSAgICAgICAgICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFz
cyBmb28ge30KKwkgICAgICAgICAgICAgICAgdmFyIGRlY2xhcmF0aW9uID0gdGhpcy5wYXJzZUNs
YXNzRGVjbGFyYXRpb24odHJ1ZSk7CisJICAgICAgICAgICAgICAgIGV4cG9ydERlY2xhcmF0aW9u
ID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5FeHBvcnREZWZhdWx0RGVjbGFyYXRpb24o
ZGVjbGFyYXRpb24pKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSB7CisJICAg
ICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2Zyb20nKSkgewor
CSAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMu
VW5leHBlY3RlZFRva2VuLCB0aGlzLmxvb2thaGVhZC52YWx1ZSk7CisJICAgICAgICAgICAgICAg
IH0KKwkgICAgICAgICAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQge307CisJICAgICAgICAgICAg
ICAgIC8vIGV4cG9ydCBkZWZhdWx0IFtdOworCSAgICAgICAgICAgICAgICAvLyBleHBvcnQgZGVm
YXVsdCAoMSArIDIpOworCSAgICAgICAgICAgICAgICB2YXIgZGVjbGFyYXRpb24gPSB0aGlzLm1h
dGNoKCd7JykgPyB0aGlzLnBhcnNlT2JqZWN0SW5pdGlhbGl6ZXIoKSA6CisJICAgICAgICAgICAg
ICAgICAgICB0aGlzLm1hdGNoKCdbJykgPyB0aGlzLnBhcnNlQXJyYXlJbml0aWFsaXplcigpIDog
dGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisJICAgICAgICAgICAgICAgIHRoaXMu
Y29uc3VtZVNlbWljb2xvbigpOworCSAgICAgICAgICAgICAgICBleHBvcnREZWNsYXJhdGlvbiA9
IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKGRl
Y2xhcmF0aW9uKSk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgZWxzZSBp
ZiAodGhpcy5tYXRjaCgnKicpKSB7CisJICAgICAgICAgICAgLy8gZXhwb3J0ICogZnJvbSAnZm9v
JzsKKwkgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgICAgIGlmICghdGhp
cy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdmcm9tJykpIHsKKwkgICAgICAgICAgICAgICAgdmFy
IG1lc3NhZ2UgPSB0aGlzLmxvb2thaGVhZC52YWx1ZSA/IG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5l
eHBlY3RlZFRva2VuIDogbWVzc2FnZXNfMS5NZXNzYWdlcy5NaXNzaW5nRnJvbUNsYXVzZTsKKwkg
ICAgICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2UsIHRoaXMubG9va2FoZWFkLnZh
bHVlKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkg
ICAgICAgICAgICB2YXIgc3JjID0gdGhpcy5wYXJzZU1vZHVsZVNwZWNpZmllcigpOworCSAgICAg
ICAgICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpOworCSAgICAgICAgICAgIGV4cG9ydERlY2xh
cmF0aW9uID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5FeHBvcnRBbGxEZWNsYXJhdGlv
bihzcmMpKTsKKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgaWYgKHRoaXMubG9va2FoZWFkLnR5
cGUgPT09IHRva2VuXzEuVG9rZW4uS2V5d29yZCkgeworCSAgICAgICAgICAgIC8vIGV4cG9ydCB2
YXIgZiA9IDE7CisJICAgICAgICAgICAgdmFyIGRlY2xhcmF0aW9uID0gdm9pZCAwOworCSAgICAg
ICAgICAgIHN3aXRjaCAodGhpcy5sb29rYWhlYWQudmFsdWUpIHsKKwkgICAgICAgICAgICAgICAg
Y2FzZSAnbGV0JzoKKwkgICAgICAgICAgICAgICAgY2FzZSAnY29uc3QnOgorCSAgICAgICAgICAg
ICAgICAgICAgZGVjbGFyYXRpb24gPSB0aGlzLnBhcnNlTGV4aWNhbERlY2xhcmF0aW9uKHsgaW5G
b3I6IGZhbHNlIH0pOworCSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAg
ICAgIGNhc2UgJ3Zhcic6CisJICAgICAgICAgICAgICAgIGNhc2UgJ2NsYXNzJzoKKwkgICAgICAg
ICAgICAgICAgY2FzZSAnZnVuY3Rpb24nOgorCSAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRp
b24gPSB0aGlzLnBhcnNlU3RhdGVtZW50TGlzdEl0ZW0oKTsKKwkgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCSAgICAgICAgICAgICAgICBkZWZhdWx0OgorCSAgICAgICAgICAgICAgICAgICAg
dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7CisJICAgICAgICAgICAg
fQorCSAgICAgICAgICAgIGV4cG9ydERlY2xhcmF0aW9uID0gdGhpcy5maW5hbGl6ZShub2RlLCBu
ZXcgTm9kZS5FeHBvcnROYW1lZERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uLCBbXSwgbnVsbCkpOwor
CSAgICAgICAgfQorCSAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaEFzeW5jRnVuY3Rpb24oKSkg
eworCSAgICAgICAgICAgIHZhciBkZWNsYXJhdGlvbiA9IHRoaXMucGFyc2VGdW5jdGlvbkRlY2xh
cmF0aW9uKCk7CisJICAgICAgICAgICAgZXhwb3J0RGVjbGFyYXRpb24gPSB0aGlzLmZpbmFsaXpl
KG5vZGUsIG5ldyBOb2RlLkV4cG9ydE5hbWVkRGVjbGFyYXRpb24oZGVjbGFyYXRpb24sIFtdLCBu
dWxsKSk7CisJICAgICAgICB9CisJICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICB2YXIgc3Bl
Y2lmaWVycyA9IFtdOworCSAgICAgICAgICAgIHZhciBzb3VyY2UgPSBudWxsOworCSAgICAgICAg
ICAgIHZhciBpc0V4cG9ydEZyb21JZGVudGlmaWVyID0gZmFsc2U7CisJICAgICAgICAgICAgdGhp
cy5leHBlY3QoJ3snKTsKKwkgICAgICAgICAgICB3aGlsZSAoIXRoaXMubWF0Y2goJ30nKSkgewor
CSAgICAgICAgICAgICAgICBpc0V4cG9ydEZyb21JZGVudGlmaWVyID0gaXNFeHBvcnRGcm9tSWRl
bnRpZmllciB8fCB0aGlzLm1hdGNoS2V5d29yZCgnZGVmYXVsdCcpOworCSAgICAgICAgICAgICAg
ICBzcGVjaWZpZXJzLnB1c2godGhpcy5wYXJzZUV4cG9ydFNwZWNpZmllcigpKTsKKwkgICAgICAg
ICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCd9JykpIHsKKwkgICAgICAgICAgICAgICAgICAgIHRo
aXMuZXhwZWN0KCcsJyk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAg
ICAgICAgICAgdGhpcy5leHBlY3QoJ30nKTsKKwkgICAgICAgICAgICBpZiAodGhpcy5tYXRjaENv
bnRleHR1YWxLZXl3b3JkKCdmcm9tJykpIHsKKwkgICAgICAgICAgICAgICAgLy8gZXhwb3J0IHtk
ZWZhdWx0fSBmcm9tICdmb28nOworCSAgICAgICAgICAgICAgICAvLyBleHBvcnQge2Zvb30gZnJv
bSAnZm9vJzsKKwkgICAgICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgICAg
ICAgICAgc291cmNlID0gdGhpcy5wYXJzZU1vZHVsZVNwZWNpZmllcigpOworCSAgICAgICAgICAg
ICAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAg
ICAgZWxzZSBpZiAoaXNFeHBvcnRGcm9tSWRlbnRpZmllcikgeworCSAgICAgICAgICAgICAgICAv
LyBleHBvcnQge2RlZmF1bHR9OyAvLyBtaXNzaW5nIGZyb21DbGF1c2UKKwkgICAgICAgICAgICAg
ICAgdmFyIG1lc3NhZ2UgPSB0aGlzLmxvb2thaGVhZC52YWx1ZSA/IG1lc3NhZ2VzXzEuTWVzc2Fn
ZXMuVW5leHBlY3RlZFRva2VuIDogbWVzc2FnZXNfMS5NZXNzYWdlcy5NaXNzaW5nRnJvbUNsYXVz
ZTsKKwkgICAgICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2UsIHRoaXMubG9va2Fo
ZWFkLnZhbHVlKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSB7CisJICAgICAg
ICAgICAgICAgIC8vIGV4cG9ydCB7Zm9vfTsKKwkgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1l
U2VtaWNvbG9uKCk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGV4cG9ydERlY2xhcmF0
aW9uID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5FeHBvcnROYW1lZERlY2xhcmF0aW9u
KG51bGwsIHNwZWNpZmllcnMsIHNvdXJjZSkpOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJu
IGV4cG9ydERlY2xhcmF0aW9uOworCSAgICB9OworCSAgICByZXR1cm4gUGFyc2VyOworCX0oKSk7
CisJZXhwb3J0cy5QYXJzZXIgPSBQYXJzZXI7CisKKworLyoqKi8gfSwKKy8qIDQgKi8KKy8qKiov
IGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgeworCisJLy8gRW5zdXJlIHRoZSBjb25kaXRpb24g
aXMgdHJ1ZSwgb3RoZXJ3aXNlIHRocm93IGFuIGVycm9yLgorCS8vIFRoaXMgaXMgb25seSB0byBo
YXZlIGEgYmV0dGVyIGNvbnRyYWN0IHNlbWFudGljLCBpLmUuIGFub3RoZXIgc2FmZXR5IG5ldAor
CS8vIHRvIGNhdGNoIGEgbG9naWMgZXJyb3IuIFRoZSBjb25kaXRpb24gc2hhbGwgYmUgZnVsZmls
bGVkIGluIG5vcm1hbCBjYXNlLgorCS8vIERvIE5PVCB1c2UgdGhpcyB0byBlbmZvcmNlIGEgY2Vy
dGFpbiBjb25kaXRpb24gb24gYW55IHVzZXIgaW5wdXQuCisJInVzZSBzdHJpY3QiOworCWZ1bmN0
aW9uIGFzc2VydChjb25kaXRpb24sIG1lc3NhZ2UpIHsKKwkgICAgLyogaXN0YW5idWwgaWdub3Jl
IGlmICovCisJICAgIGlmICghY29uZGl0aW9uKSB7CisJICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
J0FTU0VSVDogJyArIG1lc3NhZ2UpOworCSAgICB9CisJfQorCWV4cG9ydHMuYXNzZXJ0ID0gYXNz
ZXJ0OworCisKKy8qKiovIH0sCisvKiA1ICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9y
dHMpIHsKKworCSJ1c2Ugc3RyaWN0IjsKKwkvLyBFcnJvciBtZXNzYWdlcyBzaG91bGQgYmUgaWRl
bnRpY2FsIHRvIFY4LgorCWV4cG9ydHMuTWVzc2FnZXMgPSB7CisJICAgIFVuZXhwZWN0ZWRUb2tl
bjogJ1VuZXhwZWN0ZWQgdG9rZW4gJTAnLAorCSAgICBVbmV4cGVjdGVkVG9rZW5JbGxlZ2FsOiAn
VW5leHBlY3RlZCB0b2tlbiBJTExFR0FMJywKKwkgICAgVW5leHBlY3RlZE51bWJlcjogJ1VuZXhw
ZWN0ZWQgbnVtYmVyJywKKwkgICAgVW5leHBlY3RlZFN0cmluZzogJ1VuZXhwZWN0ZWQgc3RyaW5n
JywKKwkgICAgVW5leHBlY3RlZElkZW50aWZpZXI6ICdVbmV4cGVjdGVkIGlkZW50aWZpZXInLAor
CSAgICBVbmV4cGVjdGVkUmVzZXJ2ZWQ6ICdVbmV4cGVjdGVkIHJlc2VydmVkIHdvcmQnLAorCSAg
ICBVbmV4cGVjdGVkVGVtcGxhdGU6ICdVbmV4cGVjdGVkIHF1YXNpICUwJywKKwkgICAgVW5leHBl
Y3RlZEVPUzogJ1VuZXhwZWN0ZWQgZW5kIG9mIGlucHV0JywKKwkgICAgTmV3bGluZUFmdGVyVGhy
b3c6ICdJbGxlZ2FsIG5ld2xpbmUgYWZ0ZXIgdGhyb3cnLAorCSAgICBJbnZhbGlkUmVnRXhwOiAn
SW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24nLAorCSAgICBVbnRlcm1pbmF0ZWRSZWdFeHA6ICdJ
bnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogbWlzc2luZyAvJywKKwkgICAgSW52YWxpZExIU0lu
QXNzaWdubWVudDogJ0ludmFsaWQgbGVmdC1oYW5kIHNpZGUgaW4gYXNzaWdubWVudCcsCisJICAg
IEludmFsaWRMSFNJbkZvckluOiAnSW52YWxpZCBsZWZ0LWhhbmQgc2lkZSBpbiBmb3ItaW4nLAor
CSAgICBJbnZhbGlkTEhTSW5Gb3JMb29wOiAnSW52YWxpZCBsZWZ0LWhhbmQgc2lkZSBpbiBmb3It
bG9vcCcsCisJICAgIE11bHRpcGxlRGVmYXVsdHNJblN3aXRjaDogJ01vcmUgdGhhbiBvbmUgZGVm
YXVsdCBjbGF1c2UgaW4gc3dpdGNoIHN0YXRlbWVudCcsCisJICAgIE5vQ2F0Y2hPckZpbmFsbHk6
ICdNaXNzaW5nIGNhdGNoIG9yIGZpbmFsbHkgYWZ0ZXIgdHJ5JywKKwkgICAgVW5rbm93bkxhYmVs
OiAnVW5kZWZpbmVkIGxhYmVsIFwnJTBcJycsCisJICAgIFJlZGVjbGFyYXRpb246ICclMCBcJyUx
XCcgaGFzIGFscmVhZHkgYmVlbiBkZWNsYXJlZCcsCisJICAgIElsbGVnYWxDb250aW51ZTogJ0ls
bGVnYWwgY29udGludWUgc3RhdGVtZW50JywKKwkgICAgSWxsZWdhbEJyZWFrOiAnSWxsZWdhbCBi
cmVhayBzdGF0ZW1lbnQnLAorCSAgICBJbGxlZ2FsUmV0dXJuOiAnSWxsZWdhbCByZXR1cm4gc3Rh
dGVtZW50JywKKwkgICAgU3RyaWN0TW9kZVdpdGg6ICdTdHJpY3QgbW9kZSBjb2RlIG1heSBub3Qg
aW5jbHVkZSBhIHdpdGggc3RhdGVtZW50JywKKwkgICAgU3RyaWN0Q2F0Y2hWYXJpYWJsZTogJ0Nh
dGNoIHZhcmlhYmxlIG1heSBub3QgYmUgZXZhbCBvciBhcmd1bWVudHMgaW4gc3RyaWN0IG1vZGUn
LAorCSAgICBTdHJpY3RWYXJOYW1lOiAnVmFyaWFibGUgbmFtZSBtYXkgbm90IGJlIGV2YWwgb3Ig
YXJndW1lbnRzIGluIHN0cmljdCBtb2RlJywKKwkgICAgU3RyaWN0UGFyYW1OYW1lOiAnUGFyYW1l
dGVyIG5hbWUgZXZhbCBvciBhcmd1bWVudHMgaXMgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUn
LAorCSAgICBTdHJpY3RQYXJhbUR1cGU6ICdTdHJpY3QgbW9kZSBmdW5jdGlvbiBtYXkgbm90IGhh
dmUgZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcycsCisJICAgIFN0cmljdEZ1bmN0aW9uTmFtZTog
J0Z1bmN0aW9uIG5hbWUgbWF5IG5vdCBiZSBldmFsIG9yIGFyZ3VtZW50cyBpbiBzdHJpY3QgbW9k
ZScsCisJICAgIFN0cmljdE9jdGFsTGl0ZXJhbDogJ09jdGFsIGxpdGVyYWxzIGFyZSBub3QgYWxs
b3dlZCBpbiBzdHJpY3QgbW9kZS4nLAorCSAgICBTdHJpY3REZWxldGU6ICdEZWxldGUgb2YgYW4g
dW5xdWFsaWZpZWQgaWRlbnRpZmllciBpbiBzdHJpY3QgbW9kZS4nLAorCSAgICBTdHJpY3RMSFNB
c3NpZ25tZW50OiAnQXNzaWdubWVudCB0byBldmFsIG9yIGFyZ3VtZW50cyBpcyBub3QgYWxsb3dl
ZCBpbiBzdHJpY3QgbW9kZScsCisJICAgIFN0cmljdExIU1Bvc3RmaXg6ICdQb3N0Zml4IGluY3Jl
bWVudC9kZWNyZW1lbnQgbWF5IG5vdCBoYXZlIGV2YWwgb3IgYXJndW1lbnRzIG9wZXJhbmQgaW4g
c3RyaWN0IG1vZGUnLAorCSAgICBTdHJpY3RMSFNQcmVmaXg6ICdQcmVmaXggaW5jcmVtZW50L2Rl
Y3JlbWVudCBtYXkgbm90IGhhdmUgZXZhbCBvciBhcmd1bWVudHMgb3BlcmFuZCBpbiBzdHJpY3Qg
bW9kZScsCisJICAgIFN0cmljdFJlc2VydmVkV29yZDogJ1VzZSBvZiBmdXR1cmUgcmVzZXJ2ZWQg
d29yZCBpbiBzdHJpY3QgbW9kZScsCisJICAgIFRlbXBsYXRlT2N0YWxMaXRlcmFsOiAnT2N0YWwg
bGl0ZXJhbHMgYXJlIG5vdCBhbGxvd2VkIGluIHRlbXBsYXRlIHN0cmluZ3MuJywKKwkgICAgUGFy
YW1ldGVyQWZ0ZXJSZXN0UGFyYW1ldGVyOiAnUmVzdCBwYXJhbWV0ZXIgbXVzdCBiZSBsYXN0IGZv
cm1hbCBwYXJhbWV0ZXInLAorCSAgICBEZWZhdWx0UmVzdFBhcmFtZXRlcjogJ1VuZXhwZWN0ZWQg
dG9rZW4gPScsCisJICAgIE9iamVjdFBhdHRlcm5Bc1Jlc3RQYXJhbWV0ZXI6ICdVbmV4cGVjdGVk
IHRva2VuIHsnLAorCSAgICBEdXBsaWNhdGVQcm90b1Byb3BlcnR5OiAnRHVwbGljYXRlIF9fcHJv
dG9fXyBmaWVsZHMgYXJlIG5vdCBhbGxvd2VkIGluIG9iamVjdCBsaXRlcmFscycsCisJICAgIENv
bnN0cnVjdG9yU3BlY2lhbE1ldGhvZDogJ0NsYXNzIGNvbnN0cnVjdG9yIG1heSBub3QgYmUgYW4g
YWNjZXNzb3InLAorCSAgICBEdXBsaWNhdGVDb25zdHJ1Y3RvcjogJ0EgY2xhc3MgbWF5IG9ubHkg
aGF2ZSBvbmUgY29uc3RydWN0b3InLAorCSAgICBTdGF0aWNQcm90b3R5cGU6ICdDbGFzc2VzIG1h
eSBub3QgaGF2ZSBzdGF0aWMgcHJvcGVydHkgbmFtZWQgcHJvdG90eXBlJywKKwkgICAgTWlzc2lu
Z0Zyb21DbGF1c2U6ICdVbmV4cGVjdGVkIHRva2VuJywKKwkgICAgTm9Bc0FmdGVySW1wb3J0TmFt
ZXNwYWNlOiAnVW5leHBlY3RlZCB0b2tlbicsCisJICAgIEludmFsaWRNb2R1bGVTcGVjaWZpZXI6
ICdVbmV4cGVjdGVkIHRva2VuJywKKwkgICAgSWxsZWdhbEltcG9ydERlY2xhcmF0aW9uOiAnVW5l
eHBlY3RlZCB0b2tlbicsCisJICAgIElsbGVnYWxFeHBvcnREZWNsYXJhdGlvbjogJ1VuZXhwZWN0
ZWQgdG9rZW4nLAorCSAgICBEdXBsaWNhdGVCaW5kaW5nOiAnRHVwbGljYXRlIGJpbmRpbmcgJTAn
LAorCSAgICBEZWNsYXJhdGlvbk1pc3NpbmdJbml0aWFsaXplcjogJ01pc3NpbmcgaW5pdGlhbGl6
ZXIgaW4gJTAgZGVjbGFyYXRpb24nLAorCSAgICBMZXRJbkxleGljYWxCaW5kaW5nOiAnbGV0IGlz
IGRpc2FsbG93ZWQgYXMgYSBsZXhpY2FsbHkgYm91bmQgbmFtZScsCisJICAgIEZvckluT2ZMb29w
SW5pdGlhbGl6ZXI6ICclMCBsb29wIHZhcmlhYmxlIGRlY2xhcmF0aW9uIG1heSBub3QgaGF2ZSBh
biBpbml0aWFsaXplcicKKwl9OworCisKKy8qKiovIH0sCisvKiA2ICovCisvKioqLyBmdW5jdGlv
bihtb2R1bGUsIGV4cG9ydHMpIHsKKworCSJ1c2Ugc3RyaWN0IjsKKwl2YXIgRXJyb3JIYW5kbGVy
ID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gRXJyb3JIYW5kbGVyKCkgeworCSAgICAg
ICAgdGhpcy5lcnJvcnMgPSBbXTsKKwkgICAgICAgIHRoaXMudG9sZXJhbnQgPSBmYWxzZTsKKwkg
ICAgfQorCSAgICA7CisJICAgIEVycm9ySGFuZGxlci5wcm90b3R5cGUucmVjb3JkRXJyb3IgPSBm
dW5jdGlvbiAoZXJyb3IpIHsKKwkgICAgICAgIHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpOworCSAg
ICB9OworCSAgICA7CisJICAgIEVycm9ySGFuZGxlci5wcm90b3R5cGUudG9sZXJhdGUgPSBmdW5j
dGlvbiAoZXJyb3IpIHsKKwkgICAgICAgIGlmICh0aGlzLnRvbGVyYW50KSB7CisJICAgICAgICAg
ICAgdGhpcy5yZWNvcmRFcnJvcihlcnJvcik7CisJICAgICAgICB9CisJICAgICAgICBlbHNlIHsK
KwkgICAgICAgICAgICB0aHJvdyBlcnJvcjsKKwkgICAgICAgIH0KKwkgICAgfTsKKwkgICAgOwor
CSAgICBFcnJvckhhbmRsZXIucHJvdG90eXBlLmNvbnN0cnVjdEVycm9yID0gZnVuY3Rpb24gKG1z
ZywgY29sdW1uKSB7CisJICAgICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IobXNnKTsKKwkgICAg
ICAgIHRyeSB7CisJICAgICAgICAgICAgdGhyb3cgZXJyb3I7CisJICAgICAgICB9CisJICAgICAg
ICBjYXRjaCAoYmFzZSkgeworCSAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICov
CisJICAgICAgICAgICAgaWYgKE9iamVjdC5jcmVhdGUgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5
KSB7CisJICAgICAgICAgICAgICAgIGVycm9yID0gT2JqZWN0LmNyZWF0ZShiYXNlKTsKKwkgICAg
ICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVycm9yLCAnY29sdW1uJywgeyB2YWx1
ZTogY29sdW1uIH0pOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIGZpbmFs
bHkgeworCSAgICAgICAgICAgIHJldHVybiBlcnJvcjsKKwkgICAgICAgIH0KKwkgICAgICAgIC8q
IGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovCisJICAgICAgICByZXR1cm4gZXJyb3I7CisJICAgIH07
CisJICAgIDsKKwkgICAgRXJyb3JIYW5kbGVyLnByb3RvdHlwZS5jcmVhdGVFcnJvciA9IGZ1bmN0
aW9uIChpbmRleCwgbGluZSwgY29sLCBkZXNjcmlwdGlvbikgeworCSAgICAgICAgdmFyIG1zZyA9
ICdMaW5lICcgKyBsaW5lICsgJzogJyArIGRlc2NyaXB0aW9uOworCSAgICAgICAgdmFyIGVycm9y
ID0gdGhpcy5jb25zdHJ1Y3RFcnJvcihtc2csIGNvbCk7CisJICAgICAgICBlcnJvci5pbmRleCA9
IGluZGV4OworCSAgICAgICAgZXJyb3IubGluZU51bWJlciA9IGxpbmU7CisJICAgICAgICBlcnJv
ci5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworCSAgICAgICAgcmV0dXJuIGVycm9yOworCSAg
ICB9OworCSAgICA7CisJICAgIEVycm9ySGFuZGxlci5wcm90b3R5cGUudGhyb3dFcnJvciA9IGZ1
bmN0aW9uIChpbmRleCwgbGluZSwgY29sLCBkZXNjcmlwdGlvbikgeworCSAgICAgICAgdGhyb3cg
dGhpcy5jcmVhdGVFcnJvcihpbmRleCwgbGluZSwgY29sLCBkZXNjcmlwdGlvbik7CisJICAgIH07
CisJICAgIDsKKwkgICAgRXJyb3JIYW5kbGVyLnByb3RvdHlwZS50b2xlcmF0ZUVycm9yID0gZnVu
Y3Rpb24gKGluZGV4LCBsaW5lLCBjb2wsIGRlc2NyaXB0aW9uKSB7CisJICAgICAgICB2YXIgZXJy
b3IgPSB0aGlzLmNyZWF0ZUVycm9yKGluZGV4LCBsaW5lLCBjb2wsIGRlc2NyaXB0aW9uKTsKKwkg
ICAgICAgIGlmICh0aGlzLnRvbGVyYW50KSB7CisJICAgICAgICAgICAgdGhpcy5yZWNvcmRFcnJv
cihlcnJvcik7CisJICAgICAgICB9CisJICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICB0aHJv
dyBlcnJvcjsKKwkgICAgICAgIH0KKwkgICAgfTsKKwkgICAgOworCSAgICByZXR1cm4gRXJyb3JI
YW5kbGVyOworCX0oKSk7CisJZXhwb3J0cy5FcnJvckhhbmRsZXIgPSBFcnJvckhhbmRsZXI7CisK
KworLyoqKi8gfSwKKy8qIDcgKi8KKy8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewor
CisJInVzZSBzdHJpY3QiOworCShmdW5jdGlvbiAoVG9rZW4pIHsKKwkgICAgVG9rZW5bVG9rZW5b
IkJvb2xlYW5MaXRlcmFsIl0gPSAxXSA9ICJCb29sZWFuTGl0ZXJhbCI7CisJICAgIFRva2VuW1Rv
a2VuWyJFT0YiXSA9IDJdID0gIkVPRiI7CisJICAgIFRva2VuW1Rva2VuWyJJZGVudGlmaWVyIl0g
PSAzXSA9ICJJZGVudGlmaWVyIjsKKwkgICAgVG9rZW5bVG9rZW5bIktleXdvcmQiXSA9IDRdID0g
IktleXdvcmQiOworCSAgICBUb2tlbltUb2tlblsiTnVsbExpdGVyYWwiXSA9IDVdID0gIk51bGxM
aXRlcmFsIjsKKwkgICAgVG9rZW5bVG9rZW5bIk51bWVyaWNMaXRlcmFsIl0gPSA2XSA9ICJOdW1l
cmljTGl0ZXJhbCI7CisJICAgIFRva2VuW1Rva2VuWyJQdW5jdHVhdG9yIl0gPSA3XSA9ICJQdW5j
dHVhdG9yIjsKKwkgICAgVG9rZW5bVG9rZW5bIlN0cmluZ0xpdGVyYWwiXSA9IDhdID0gIlN0cmlu
Z0xpdGVyYWwiOworCSAgICBUb2tlbltUb2tlblsiUmVndWxhckV4cHJlc3Npb24iXSA9IDldID0g
IlJlZ3VsYXJFeHByZXNzaW9uIjsKKwkgICAgVG9rZW5bVG9rZW5bIlRlbXBsYXRlIl0gPSAxMF0g
PSAiVGVtcGxhdGUiOworCX0pKGV4cG9ydHMuVG9rZW4gfHwgKGV4cG9ydHMuVG9rZW4gPSB7fSkp
OworCXZhciBUb2tlbiA9IGV4cG9ydHMuVG9rZW47CisJOworCWV4cG9ydHMuVG9rZW5OYW1lID0g
e307CisJZXhwb3J0cy5Ub2tlbk5hbWVbVG9rZW4uQm9vbGVhbkxpdGVyYWxdID0gJ0Jvb2xlYW4n
OworCWV4cG9ydHMuVG9rZW5OYW1lW1Rva2VuLkVPRl0gPSAnPGVuZD4nOworCWV4cG9ydHMuVG9r
ZW5OYW1lW1Rva2VuLklkZW50aWZpZXJdID0gJ0lkZW50aWZpZXInOworCWV4cG9ydHMuVG9rZW5O
YW1lW1Rva2VuLktleXdvcmRdID0gJ0tleXdvcmQnOworCWV4cG9ydHMuVG9rZW5OYW1lW1Rva2Vu
Lk51bGxMaXRlcmFsXSA9ICdOdWxsJzsKKwlleHBvcnRzLlRva2VuTmFtZVtUb2tlbi5OdW1lcmlj
TGl0ZXJhbF0gPSAnTnVtZXJpYyc7CisJZXhwb3J0cy5Ub2tlbk5hbWVbVG9rZW4uUHVuY3R1YXRv
cl0gPSAnUHVuY3R1YXRvcic7CisJZXhwb3J0cy5Ub2tlbk5hbWVbVG9rZW4uU3RyaW5nTGl0ZXJh
bF0gPSAnU3RyaW5nJzsKKwlleHBvcnRzLlRva2VuTmFtZVtUb2tlbi5SZWd1bGFyRXhwcmVzc2lv
bl0gPSAnUmVndWxhckV4cHJlc3Npb24nOworCWV4cG9ydHMuVG9rZW5OYW1lW1Rva2VuLlRlbXBs
YXRlXSA9ICdUZW1wbGF0ZSc7CisKKworLyoqKi8gfSwKKy8qIDggKi8KKy8qKiovIGZ1bmN0aW9u
KG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisJInVzZSBzdHJpY3Qi
OworCXZhciBhc3NlcnRfMSA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7CisJdmFyIG1lc3NhZ2Vz
XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpOworCXZhciBjaGFyYWN0ZXJfMSA9IF9fd2VicGFj
a19yZXF1aXJlX18oOSk7CisJdmFyIHRva2VuXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpOwor
CWZ1bmN0aW9uIGhleFZhbHVlKGNoKSB7CisJICAgIHJldHVybiAnMDEyMzQ1Njc4OWFiY2RlZicu
aW5kZXhPZihjaC50b0xvd2VyQ2FzZSgpKTsKKwl9CisJZnVuY3Rpb24gb2N0YWxWYWx1ZShjaCkg
eworCSAgICByZXR1cm4gJzAxMjM0NTY3Jy5pbmRleE9mKGNoKTsKKwl9CisJdmFyIFNjYW5uZXIg
PSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBTY2FubmVyKGNvZGUsIGhhbmRsZXIpIHsK
KwkgICAgICAgIHRoaXMuc291cmNlID0gY29kZTsKKwkgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVy
ID0gaGFuZGxlcjsKKwkgICAgICAgIHRoaXMudHJhY2tDb21tZW50ID0gZmFsc2U7CisJICAgICAg
ICB0aGlzLmxlbmd0aCA9IGNvZGUubGVuZ3RoOworCSAgICAgICAgdGhpcy5pbmRleCA9IDA7CisJ
ICAgICAgICB0aGlzLmxpbmVOdW1iZXIgPSAoY29kZS5sZW5ndGggPiAwKSA/IDEgOiAwOworCSAg
ICAgICAgdGhpcy5saW5lU3RhcnQgPSAwOworCSAgICAgICAgdGhpcy5jdXJseVN0YWNrID0gW107
CisJICAgIH0KKwkgICAgOworCSAgICBTY2FubmVyLnByb3RvdHlwZS5lb2YgPSBmdW5jdGlvbiAo
KSB7CisJICAgICAgICByZXR1cm4gdGhpcy5pbmRleCA+PSB0aGlzLmxlbmd0aDsKKwkgICAgfTsK
KwkgICAgOworCSAgICBTY2FubmVyLnByb3RvdHlwZS50aHJvd1VuZXhwZWN0ZWRUb2tlbiA9IGZ1
bmN0aW9uIChtZXNzYWdlKSB7CisJICAgICAgICBpZiAobWVzc2FnZSA9PT0gdm9pZCAwKSB7IG1l
c3NhZ2UgPSBtZXNzYWdlc18xLk1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbklsbGVnYWw7IH0KKwkg
ICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyLnRocm93RXJyb3IodGhpcy5pbmRleCwgdGhpcy5saW5l
TnVtYmVyLCB0aGlzLmluZGV4IC0gdGhpcy5saW5lU3RhcnQgKyAxLCBtZXNzYWdlKTsKKwkgICAg
fTsKKwkgICAgOworCSAgICBTY2FubmVyLnByb3RvdHlwZS50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tl
biA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyLnRvbGVyYXRlRXJy
b3IodGhpcy5pbmRleCwgdGhpcy5saW5lTnVtYmVyLCB0aGlzLmluZGV4IC0gdGhpcy5saW5lU3Rh
cnQgKyAxLCBtZXNzYWdlc18xLk1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbklsbGVnYWwpOworCSAg
ICB9OworCSAgICA7CisJICAgIC8vIEVDTUEtMjYyIDExLjQgQ29tbWVudHMKKwkgICAgU2Nhbm5l
ci5wcm90b3R5cGUuc2tpcFNpbmdsZUxpbmVDb21tZW50ID0gZnVuY3Rpb24gKG9mZnNldCkgewor
CSAgICAgICAgdmFyIGNvbW1lbnRzID0gW107CisJICAgICAgICB2YXIgc3RhcnQsIGxvYzsKKwkg
ICAgICAgIGlmICh0aGlzLnRyYWNrQ29tbWVudCkgeworCSAgICAgICAgICAgIGNvbW1lbnRzID0g
W107CisJICAgICAgICAgICAgc3RhcnQgPSB0aGlzLmluZGV4IC0gb2Zmc2V0OworCSAgICAgICAg
ICAgIGxvYyA9IHsKKwkgICAgICAgICAgICAgICAgc3RhcnQ6IHsKKwkgICAgICAgICAgICAgICAg
ICAgIGxpbmU6IHRoaXMubGluZU51bWJlciwKKwkgICAgICAgICAgICAgICAgICAgIGNvbHVtbjog
dGhpcy5pbmRleCAtIHRoaXMubGluZVN0YXJ0IC0gb2Zmc2V0CisJICAgICAgICAgICAgICAgIH0s
CisJICAgICAgICAgICAgICAgIGVuZDoge30KKwkgICAgICAgICAgICB9OworCSAgICAgICAgfQor
CSAgICAgICAgd2hpbGUgKCF0aGlzLmVvZigpKSB7CisJICAgICAgICAgICAgdmFyIGNoID0gdGhp
cy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KTsKKwkgICAgICAgICAgICArK3RoaXMuaW5k
ZXg7CisJICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5h
dG9yKGNoKSkgeworCSAgICAgICAgICAgICAgICBpZiAodGhpcy50cmFja0NvbW1lbnQpIHsKKwkg
ICAgICAgICAgICAgICAgICAgIGxvYy5lbmQgPSB7CisJICAgICAgICAgICAgICAgICAgICAgICAg
bGluZTogdGhpcy5saW5lTnVtYmVyLAorCSAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjog
dGhpcy5pbmRleCAtIHRoaXMubGluZVN0YXJ0IC0gMQorCSAgICAgICAgICAgICAgICAgICAgfTsK
KwkgICAgICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHsKKwkgICAgICAgICAgICAgICAgICAg
ICAgICBtdWx0aUxpbmU6IGZhbHNlLAorCSAgICAgICAgICAgICAgICAgICAgICAgIHNsaWNlOiBb
c3RhcnQgKyBvZmZzZXQsIHRoaXMuaW5kZXggLSAxXSwKKwkgICAgICAgICAgICAgICAgICAgICAg
ICByYW5nZTogW3N0YXJ0LCB0aGlzLmluZGV4IC0gMV0sCisJICAgICAgICAgICAgICAgICAgICAg
ICAgbG9jOiBsb2MKKwkgICAgICAgICAgICAgICAgICAgIH07CisJICAgICAgICAgICAgICAgICAg
ICBjb21tZW50cy5wdXNoKGVudHJ5KTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAg
ICAgICBpZiAoY2ggPT09IDEzICYmIHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkg
PT09IDEwKSB7CisJICAgICAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7CisJICAgICAgICAg
ICAgICAgIH0KKwkgICAgICAgICAgICAgICAgKyt0aGlzLmxpbmVOdW1iZXI7CisJICAgICAgICAg
ICAgICAgIHRoaXMubGluZVN0YXJ0ID0gdGhpcy5pbmRleDsKKwkgICAgICAgICAgICAgICAgcmV0
dXJuIGNvbW1lbnRzOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIGlmICh0
aGlzLnRyYWNrQ29tbWVudCkgeworCSAgICAgICAgICAgIGxvYy5lbmQgPSB7CisJICAgICAgICAg
ICAgICAgIGxpbmU6IHRoaXMubGluZU51bWJlciwKKwkgICAgICAgICAgICAgICAgY29sdW1uOiB0
aGlzLmluZGV4IC0gdGhpcy5saW5lU3RhcnQKKwkgICAgICAgICAgICB9OworCSAgICAgICAgICAg
IHZhciBlbnRyeSA9IHsKKwkgICAgICAgICAgICAgICAgbXVsdGlMaW5lOiBmYWxzZSwKKwkgICAg
ICAgICAgICAgICAgc2xpY2U6IFtzdGFydCArIG9mZnNldCwgdGhpcy5pbmRleF0sCisJICAgICAg
ICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIHRoaXMuaW5kZXhdLAorCSAgICAgICAgICAgICAgICBs
b2M6IGxvYworCSAgICAgICAgICAgIH07CisJICAgICAgICAgICAgY29tbWVudHMucHVzaChlbnRy
eSk7CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gY29tbWVudHM7CisJICAgIH07CisJICAg
IDsKKwkgICAgU2Nhbm5lci5wcm90b3R5cGUuc2tpcE11bHRpTGluZUNvbW1lbnQgPSBmdW5jdGlv
biAoKSB7CisJICAgICAgICB2YXIgY29tbWVudHMgPSBbXTsKKwkgICAgICAgIHZhciBzdGFydCwg
bG9jOworCSAgICAgICAgaWYgKHRoaXMudHJhY2tDb21tZW50KSB7CisJICAgICAgICAgICAgY29t
bWVudHMgPSBbXTsKKwkgICAgICAgICAgICBzdGFydCA9IHRoaXMuaW5kZXggLSAyOworCSAgICAg
ICAgICAgIGxvYyA9IHsKKwkgICAgICAgICAgICAgICAgc3RhcnQ6IHsKKwkgICAgICAgICAgICAg
ICAgICAgIGxpbmU6IHRoaXMubGluZU51bWJlciwKKwkgICAgICAgICAgICAgICAgICAgIGNvbHVt
bjogdGhpcy5pbmRleCAtIHRoaXMubGluZVN0YXJ0IC0gMgorCSAgICAgICAgICAgICAgICB9LAor
CSAgICAgICAgICAgICAgICBlbmQ6IHt9CisJICAgICAgICAgICAgfTsKKwkgICAgICAgIH0KKwkg
ICAgICAgIHdoaWxlICghdGhpcy5lb2YoKSkgeworCSAgICAgICAgICAgIHZhciBjaCA9IHRoaXMu
c291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCk7CisJICAgICAgICAgICAgaWYgKGNoYXJhY3Rl
cl8xLkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5hdG9yKGNoKSkgeworCSAgICAgICAgICAgICAgICBp
ZiAoY2ggPT09IDB4MEQgJiYgdGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4ICsgMSkg
PT09IDB4MEEpIHsKKwkgICAgICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKKwkgICAgICAg
ICAgICAgICAgfQorCSAgICAgICAgICAgICAgICArK3RoaXMubGluZU51bWJlcjsKKwkgICAgICAg
ICAgICAgICAgKyt0aGlzLmluZGV4OworCSAgICAgICAgICAgICAgICB0aGlzLmxpbmVTdGFydCA9
IHRoaXMuaW5kZXg7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYgKGNoID09
PSAweDJBKSB7CisJICAgICAgICAgICAgICAgIC8vIEJsb2NrIGNvbW1lbnQgZW5kcyB3aXRoICcq
LycuCisJICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5k
ZXggKyAxKSA9PT0gMHgyRikgeworCSAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleCArPSAy
OworCSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudHJhY2tDb21tZW50KSB7CisJICAgICAg
ICAgICAgICAgICAgICAgICAgbG9jLmVuZCA9IHsKKwkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGluZTogdGhpcy5saW5lTnVtYmVyLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b2x1bW46IHRoaXMuaW5kZXggLSB0aGlzLmxpbmVTdGFydAorCSAgICAgICAgICAgICAgICAgICAg
ICAgIH07CisJICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0geworCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtdWx0aUxpbmU6IHRydWUsCisJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNsaWNlOiBbc3RhcnQgKyAyLCB0aGlzLmluZGV4IC0gMl0sCisJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIHRoaXMuaW5kZXhdLAorCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsb2M6IGxvYworCSAgICAgICAgICAgICAgICAgICAgICAgIH07
CisJICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudHMucHVzaChlbnRyeSk7CisJICAgICAg
ICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tbWVudHM7CisJ
ICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4OworCSAgICAg
ICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgKyt0aGlzLmlu
ZGV4OworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIC8vIFJhbiBvZmYgdGhl
IGVuZCBvZiB0aGUgZmlsZSAtIHRoZSB3aG9sZSB0aGluZyBpcyBhIGNvbW1lbnQKKwkgICAgICAg
IGlmICh0aGlzLnRyYWNrQ29tbWVudCkgeworCSAgICAgICAgICAgIGxvYy5lbmQgPSB7CisJICAg
ICAgICAgICAgICAgIGxpbmU6IHRoaXMubGluZU51bWJlciwKKwkgICAgICAgICAgICAgICAgY29s
dW1uOiB0aGlzLmluZGV4IC0gdGhpcy5saW5lU3RhcnQKKwkgICAgICAgICAgICB9OworCSAgICAg
ICAgICAgIHZhciBlbnRyeSA9IHsKKwkgICAgICAgICAgICAgICAgbXVsdGlMaW5lOiB0cnVlLAor
CSAgICAgICAgICAgICAgICBzbGljZTogW3N0YXJ0ICsgMiwgdGhpcy5pbmRleF0sCisJICAgICAg
ICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIHRoaXMuaW5kZXhdLAorCSAgICAgICAgICAgICAgICBs
b2M6IGxvYworCSAgICAgICAgICAgIH07CisJICAgICAgICAgICAgY29tbWVudHMucHVzaChlbnRy
eSk7CisJICAgICAgICB9CisJICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKCk7
CisJICAgICAgICByZXR1cm4gY29tbWVudHM7CisJICAgIH07CisJICAgIDsKKwkgICAgU2Nhbm5l
ci5wcm90b3R5cGUuc2NhbkNvbW1lbnRzID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIGNv
bW1lbnRzOworCSAgICAgICAgaWYgKHRoaXMudHJhY2tDb21tZW50KSB7CisJICAgICAgICAgICAg
Y29tbWVudHMgPSBbXTsKKwkgICAgICAgIH0KKwkgICAgICAgIHZhciBzdGFydCA9ICh0aGlzLmlu
ZGV4ID09PSAwKTsKKwkgICAgICAgIHdoaWxlICghdGhpcy5lb2YoKSkgeworCSAgICAgICAgICAg
IHZhciBjaCA9IHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCk7CisJICAgICAgICAg
ICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc1doaXRlU3BhY2UoY2gpKSB7CisJICAgICAg
ICAgICAgICAgICsrdGhpcy5pbmRleDsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxz
ZSBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzTGluZVRlcm1pbmF0b3IoY2gpKSB7CisJICAg
ICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKKwkgICAgICAgICAgICAgICAgaWYgKGNoID09PSAw
eDBEICYmIHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkgPT09IDB4MEEpIHsKKwkg
ICAgICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKKwkgICAgICAgICAgICAgICAgfQorCSAg
ICAgICAgICAgICAgICArK3RoaXMubGluZU51bWJlcjsKKwkgICAgICAgICAgICAgICAgdGhpcy5s
aW5lU3RhcnQgPSB0aGlzLmluZGV4OworCSAgICAgICAgICAgICAgICBzdGFydCA9IHRydWU7CisJ
ICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYgKGNoID09PSAweDJGKSB7CisJICAg
ICAgICAgICAgICAgIGNoID0gdGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4ICsgMSk7
CisJICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgyRikgeworCSAgICAgICAgICAgICAgICAg
ICAgdGhpcy5pbmRleCArPSAyOworCSAgICAgICAgICAgICAgICAgICAgdmFyIGNvbW1lbnQgPSB0
aGlzLnNraXBTaW5nbGVMaW5lQ29tbWVudCgyKTsKKwkgICAgICAgICAgICAgICAgICAgIGlmICh0
aGlzLnRyYWNrQ29tbWVudCkgeworCSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzID0g
Y29tbWVudHMuY29uY2F0KGNvbW1lbnQpOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAg
ICAgICAgICAgICAgICAgc3RhcnQgPSB0cnVlOworCSAgICAgICAgICAgICAgICB9CisJICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGNoID09PSAweDJBKSB7CisJICAgICAgICAgICAgICAgICAgICB0
aGlzLmluZGV4ICs9IDI7CisJICAgICAgICAgICAgICAgICAgICB2YXIgY29tbWVudCA9IHRoaXMu
c2tpcE11bHRpTGluZUNvbW1lbnQoKTsKKwkgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRy
YWNrQ29tbWVudCkgeworCSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzID0gY29tbWVu
dHMuY29uY2F0KGNvbW1lbnQpOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAg
ICAgICB9CisJICAgICAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxz
ZSBpZiAoc3RhcnQgJiYgY2ggPT09IDB4MkQpIHsKKwkgICAgICAgICAgICAgICAgLy8gVSswMDNF
IGlzICc+JworCSAgICAgICAgICAgICAgICBpZiAoKHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhp
cy5pbmRleCArIDEpID09PSAweDJEKSAmJiAodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmlu
ZGV4ICsgMikgPT09IDB4M0UpKSB7CisJICAgICAgICAgICAgICAgICAgICAvLyAnLS0+JyBpcyBh
IHNpbmdsZS1saW5lIGNvbW1lbnQKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggKz0g
MzsKKwkgICAgICAgICAgICAgICAgICAgIHZhciBjb21tZW50ID0gdGhpcy5za2lwU2luZ2xlTGlu
ZUNvbW1lbnQoMyk7CisJICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50cmFja0NvbW1lbnQp
IHsKKwkgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50cyA9IGNvbW1lbnRzLmNvbmNhdChj
b21tZW50KTsKKwkgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgfQorCSAg
ICAgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAg
ICAgICAgICAgICB9CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYgKGNoID09
PSAweDNDKSB7CisJICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZS5zbGljZSh0aGlzLmlu
ZGV4ICsgMSwgdGhpcy5pbmRleCArIDQpID09PSAnIS0tJykgeworCSAgICAgICAgICAgICAgICAg
ICAgdGhpcy5pbmRleCArPSA0OyAvLyBgPCEtLWAKKwkgICAgICAgICAgICAgICAgICAgIHZhciBj
b21tZW50ID0gdGhpcy5za2lwU2luZ2xlTGluZUNvbW1lbnQoNCk7CisJICAgICAgICAgICAgICAg
ICAgICBpZiAodGhpcy50cmFja0NvbW1lbnQpIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICBj
b21tZW50cyA9IGNvbW1lbnRzLmNvbmNhdChjb21tZW50KTsKKwkgICAgICAgICAgICAgICAgICAg
IH0KKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQor
CSAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAg
ICB9CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gY29tbWVudHM7CisJICAgIH07CisJICAg
IDsKKwkgICAgLy8gRUNNQS0yNjIgMTEuNi4yLjIgRnV0dXJlIFJlc2VydmVkIFdvcmRzCisJICAg
IFNjYW5uZXIucHJvdG90eXBlLmlzRnV0dXJlUmVzZXJ2ZWRXb3JkID0gZnVuY3Rpb24gKGlkKSB7
CisJICAgICAgICBzd2l0Y2ggKGlkKSB7CisJICAgICAgICAgICAgY2FzZSAnZW51bSc6CisJICAg
ICAgICAgICAgY2FzZSAnZXhwb3J0JzoKKwkgICAgICAgICAgICBjYXNlICdpbXBvcnQnOgorCSAg
ICAgICAgICAgIGNhc2UgJ3N1cGVyJzoKKwkgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisJ
ICAgICAgICAgICAgZGVmYXVsdDoKKwkgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCSAg
ICAgICAgfQorCSAgICB9OworCSAgICA7CisJICAgIFNjYW5uZXIucHJvdG90eXBlLmlzU3RyaWN0
TW9kZVJlc2VydmVkV29yZCA9IGZ1bmN0aW9uIChpZCkgeworCSAgICAgICAgc3dpdGNoIChpZCkg
eworCSAgICAgICAgICAgIGNhc2UgJ2ltcGxlbWVudHMnOgorCSAgICAgICAgICAgIGNhc2UgJ2lu
dGVyZmFjZSc6CisJICAgICAgICAgICAgY2FzZSAncGFja2FnZSc6CisJICAgICAgICAgICAgY2Fz
ZSAncHJpdmF0ZSc6CisJICAgICAgICAgICAgY2FzZSAncHJvdGVjdGVkJzoKKwkgICAgICAgICAg
ICBjYXNlICdwdWJsaWMnOgorCSAgICAgICAgICAgIGNhc2UgJ3N0YXRpYyc6CisJICAgICAgICAg
ICAgY2FzZSAneWllbGQnOgorCSAgICAgICAgICAgIGNhc2UgJ2xldCc6CisJICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworCSAgICAgICAgICAgIGRlZmF1bHQ6CisJICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKwkgICAgICAgIH0KKwkgICAgfTsKKwkgICAgOworCSAgICBTY2FubmVy
LnByb3RvdHlwZS5pc1Jlc3RyaWN0ZWRXb3JkID0gZnVuY3Rpb24gKGlkKSB7CisJICAgICAgICBy
ZXR1cm4gaWQgPT09ICdldmFsJyB8fCBpZCA9PT0gJ2FyZ3VtZW50cyc7CisJICAgIH07CisJICAg
IDsKKwkgICAgLy8gRUNNQS0yNjIgMTEuNi4yLjEgS2V5d29yZHMKKwkgICAgU2Nhbm5lci5wcm90
b3R5cGUuaXNLZXl3b3JkID0gZnVuY3Rpb24gKGlkKSB7CisJICAgICAgICBzd2l0Y2ggKGlkLmxl
bmd0aCkgeworCSAgICAgICAgICAgIGNhc2UgMjoKKwkgICAgICAgICAgICAgICAgcmV0dXJuIChp
ZCA9PT0gJ2lmJykgfHwgKGlkID09PSAnaW4nKSB8fCAoaWQgPT09ICdkbycpOworCSAgICAgICAg
ICAgIGNhc2UgMzoKKwkgICAgICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ3ZhcicpIHx8IChp
ZCA9PT0gJ2ZvcicpIHx8IChpZCA9PT0gJ25ldycpIHx8CisJICAgICAgICAgICAgICAgICAgICAo
aWQgPT09ICd0cnknKSB8fCAoaWQgPT09ICdsZXQnKTsKKwkgICAgICAgICAgICBjYXNlIDQ6CisJ
ICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICd0aGlzJykgfHwgKGlkID09PSAnZWxzZScp
IHx8IChpZCA9PT0gJ2Nhc2UnKSB8fAorCSAgICAgICAgICAgICAgICAgICAgKGlkID09PSAndm9p
ZCcpIHx8IChpZCA9PT0gJ3dpdGgnKSB8fCAoaWQgPT09ICdlbnVtJyk7CisJICAgICAgICAgICAg
Y2FzZSA1OgorCSAgICAgICAgICAgICAgICByZXR1cm4gKGlkID09PSAnd2hpbGUnKSB8fCAoaWQg
PT09ICdicmVhaycpIHx8IChpZCA9PT0gJ2NhdGNoJykgfHwKKwkgICAgICAgICAgICAgICAgICAg
IChpZCA9PT0gJ3Rocm93JykgfHwgKGlkID09PSAnY29uc3QnKSB8fCAoaWQgPT09ICd5aWVsZCcp
IHx8CisJICAgICAgICAgICAgICAgICAgICAoaWQgPT09ICdjbGFzcycpIHx8IChpZCA9PT0gJ3N1
cGVyJyk7CisJICAgICAgICAgICAgY2FzZSA2OgorCSAgICAgICAgICAgICAgICByZXR1cm4gKGlk
ID09PSAncmV0dXJuJykgfHwgKGlkID09PSAndHlwZW9mJykgfHwgKGlkID09PSAnZGVsZXRlJykg
fHwKKwkgICAgICAgICAgICAgICAgICAgIChpZCA9PT0gJ3N3aXRjaCcpIHx8IChpZCA9PT0gJ2V4
cG9ydCcpIHx8IChpZCA9PT0gJ2ltcG9ydCcpOworCSAgICAgICAgICAgIGNhc2UgNzoKKwkgICAg
ICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ2RlZmF1bHQnKSB8fCAoaWQgPT09ICdmaW5hbGx5
JykgfHwgKGlkID09PSAnZXh0ZW5kcycpOworCSAgICAgICAgICAgIGNhc2UgODoKKwkgICAgICAg
ICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ2Z1bmN0aW9uJykgfHwgKGlkID09PSAnY29udGludWUn
KSB8fCAoaWQgPT09ICdkZWJ1Z2dlcicpOworCSAgICAgICAgICAgIGNhc2UgMTA6CisJICAgICAg
ICAgICAgICAgIHJldHVybiAoaWQgPT09ICdpbnN0YW5jZW9mJyk7CisJICAgICAgICAgICAgZGVm
YXVsdDoKKwkgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCSAgICAgICAgfQorCSAgICB9
OworCSAgICA7CisJICAgIFNjYW5uZXIucHJvdG90eXBlLmNvZGVQb2ludEF0ID0gZnVuY3Rpb24g
KGkpIHsKKwkgICAgICAgIHZhciBjcCA9IHRoaXMuc291cmNlLmNoYXJDb2RlQXQoaSk7CisJICAg
ICAgICBpZiAoY3AgPj0gMHhEODAwICYmIGNwIDw9IDB4REJGRikgeworCSAgICAgICAgICAgIHZh
ciBzZWNvbmQgPSB0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KGkgKyAxKTsKKwkgICAgICAgICAgICBp
ZiAoc2Vjb25kID49IDB4REMwMCAmJiBzZWNvbmQgPD0gMHhERkZGKSB7CisJICAgICAgICAgICAg
ICAgIHZhciBmaXJzdCA9IGNwOworCSAgICAgICAgICAgICAgICBjcCA9IChmaXJzdCAtIDB4RDgw
MCkgKiAweDQwMCArIHNlY29uZCAtIDB4REMwMCArIDB4MTAwMDA7CisJICAgICAgICAgICAgfQor
CSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIGNwOworCSAgICB9OworCSAgICA7CisJICAgIFNj
YW5uZXIucHJvdG90eXBlLnNjYW5IZXhFc2NhcGUgPSBmdW5jdGlvbiAocHJlZml4KSB7CisJICAg
ICAgICB2YXIgbGVuID0gKHByZWZpeCA9PT0gJ3UnKSA/IDQgOiAyOworCSAgICAgICAgdmFyIGNv
ZGUgPSAwOworCSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgeworCSAgICAg
ICAgICAgIGlmICghdGhpcy5lb2YoKSAmJiBjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNIZXhEaWdp
dCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkgeworCSAgICAgICAgICAgICAg
ICBjb2RlID0gY29kZSAqIDE2ICsgaGV4VmFsdWUodGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXSk7
CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICBy
ZXR1cm4gJyc7CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIFN0
cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7CisJICAgIH07CisJICAgIDsKKwkgICAgU2Nhbm5lci5w
cm90b3R5cGUuc2NhblVuaWNvZGVDb2RlUG9pbnRFc2NhcGUgPSBmdW5jdGlvbiAoKSB7CisJICAg
ICAgICB2YXIgY2ggPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XTsKKwkgICAgICAgIHZhciBjb2Rl
ID0gMDsKKwkgICAgICAgIC8vIEF0IGxlYXN0LCBvbmUgaGV4IGRpZ2l0IGlzIHJlcXVpcmVkLgor
CSAgICAgICAgaWYgKGNoID09PSAnfScpIHsKKwkgICAgICAgICAgICB0aGlzLnRocm93VW5leHBl
Y3RlZFRva2VuKCk7CisJICAgICAgICB9CisJICAgICAgICB3aGlsZSAoIXRoaXMuZW9mKCkpIHsK
KwkgICAgICAgICAgICBjaCA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107CisJICAgICAgICAg
ICAgaWYgKCFjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNIZXhEaWdpdChjaC5jaGFyQ29kZUF0KDAp
KSkgeworCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICB9CisJICAgICAgICAg
ICAgY29kZSA9IGNvZGUgKiAxNiArIGhleFZhbHVlKGNoKTsKKwkgICAgICAgIH0KKwkgICAgICAg
IGlmIChjb2RlID4gMHgxMEZGRkYgfHwgY2ggIT09ICd9JykgeworCSAgICAgICAgICAgIHRoaXMu
dGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiBjaGFy
YWN0ZXJfMS5DaGFyYWN0ZXIuZnJvbUNvZGVQb2ludChjb2RlKTsKKwkgICAgfTsKKwkgICAgOwor
CSAgICBTY2FubmVyLnByb3RvdHlwZS5nZXRJZGVudGlmaWVyID0gZnVuY3Rpb24gKCkgeworCSAg
ICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5pbmRleCsrOworCSAgICAgICAgd2hpbGUgKCF0aGlzLmVv
ZigpKSB7CisJICAgICAgICAgICAgdmFyIGNoID0gdGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlz
LmluZGV4KTsKKwkgICAgICAgICAgICBpZiAoY2ggPT09IDB4NUMpIHsKKwkgICAgICAgICAgICAg
ICAgLy8gQmxhY2tzbGFzaCAoVSswMDVDKSBtYXJrcyBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZS4K
KwkgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9IHN0YXJ0OworCSAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5nZXRDb21wbGV4SWRlbnRpZmllcigpOworCSAgICAgICAgICAgIH0KKwkgICAg
ICAgICAgICBlbHNlIGlmIChjaCA+PSAweEQ4MDAgJiYgY2ggPCAweERGRkYpIHsKKwkgICAgICAg
ICAgICAgICAgLy8gTmVlZCB0byBoYW5kbGUgc3Vycm9nYXRlIHBhaXJzLgorCSAgICAgICAgICAg
ICAgICB0aGlzLmluZGV4ID0gc3RhcnQ7CisJICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdl
dENvbXBsZXhJZGVudGlmaWVyKCk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGlmIChj
aGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyUGFydChjaCkpIHsKKwkgICAgICAgICAg
ICAgICAgKyt0aGlzLmluZGV4OworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIHsK
KwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAg
ICAgICAgcmV0dXJuIHRoaXMuc291cmNlLnNsaWNlKHN0YXJ0LCB0aGlzLmluZGV4KTsKKwkgICAg
fTsKKwkgICAgOworCSAgICBTY2FubmVyLnByb3RvdHlwZS5nZXRDb21wbGV4SWRlbnRpZmllciA9
IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBjcCA9IHRoaXMuY29kZVBvaW50QXQodGhpcy5p
bmRleCk7CisJICAgICAgICB2YXIgaWQgPSBjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuZnJvbUNvZGVQ
b2ludChjcCk7CisJICAgICAgICB0aGlzLmluZGV4ICs9IGlkLmxlbmd0aDsKKwkgICAgICAgIC8v
ICdcdScgKFUrMDA1QywgVSswMDc1KSBkZW5vdGVzIGFuIGVzY2FwZWQgY2hhcmFjdGVyLgorCSAg
ICAgICAgdmFyIGNoOworCSAgICAgICAgaWYgKGNwID09PSAweDVDKSB7CisJICAgICAgICAgICAg
aWYgKHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkgIT09IDB4NzUpIHsKKwkgICAg
ICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOworCSAgICAgICAgICAgIH0K
KwkgICAgICAgICAgICArK3RoaXMuaW5kZXg7CisJICAgICAgICAgICAgaWYgKHRoaXMuc291cmNl
W3RoaXMuaW5kZXhdID09PSAneycpIHsKKwkgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4Owor
CSAgICAgICAgICAgICAgICBjaCA9IHRoaXMuc2NhblVuaWNvZGVDb2RlUG9pbnRFc2NhcGUoKTsK
KwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgIGNo
ID0gdGhpcy5zY2FuSGV4RXNjYXBlKCd1Jyk7CisJICAgICAgICAgICAgICAgIGNwID0gY2guY2hh
ckNvZGVBdCgwKTsKKwkgICAgICAgICAgICAgICAgaWYgKCFjaCB8fCBjaCA9PT0gJ1xcJyB8fCAh
Y2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclN0YXJ0KGNwKSkgeworCSAgICAgICAg
ICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOworCSAgICAgICAgICAgICAg
ICB9CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGlkID0gY2g7CisJICAgICAgICB9CisJ
ICAgICAgICB3aGlsZSAoIXRoaXMuZW9mKCkpIHsKKwkgICAgICAgICAgICBjcCA9IHRoaXMuY29k
ZVBvaW50QXQodGhpcy5pbmRleCk7CisJICAgICAgICAgICAgaWYgKCFjaGFyYWN0ZXJfMS5DaGFy
YWN0ZXIuaXNJZGVudGlmaWVyUGFydChjcCkpIHsKKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJ
ICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGNoID0gY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmZy
b21Db2RlUG9pbnQoY3ApOworCSAgICAgICAgICAgIGlkICs9IGNoOworCSAgICAgICAgICAgIHRo
aXMuaW5kZXggKz0gY2gubGVuZ3RoOworCSAgICAgICAgICAgIC8vICdcdScgKFUrMDA1QywgVSsw
MDc1KSBkZW5vdGVzIGFuIGVzY2FwZWQgY2hhcmFjdGVyLgorCSAgICAgICAgICAgIGlmIChjcCA9
PT0gMHg1QykgeworCSAgICAgICAgICAgICAgICBpZCA9IGlkLnN1YnN0cigwLCBpZC5sZW5ndGgg
LSAxKTsKKwkgICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5p
bmRleCkgIT09IDB4NzUpIHsKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVj
dGVkVG9rZW4oKTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICArK3RoaXMu
aW5kZXg7CisJICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZVt0aGlzLmluZGV4XSA9PT0g
J3snKSB7CisJICAgICAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7CisJICAgICAgICAgICAg
ICAgICAgICBjaCA9IHRoaXMuc2NhblVuaWNvZGVDb2RlUG9pbnRFc2NhcGUoKTsKKwkgICAgICAg
ICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgICAg
IGNoID0gdGhpcy5zY2FuSGV4RXNjYXBlKCd1Jyk7CisJICAgICAgICAgICAgICAgICAgICBjcCA9
IGNoLmNoYXJDb2RlQXQoMCk7CisJICAgICAgICAgICAgICAgICAgICBpZiAoIWNoIHx8IGNoID09
PSAnXFwnIHx8ICFjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyUGFydChjcCkpIHsK
KwkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7CisJ
ICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAg
ICAgaWQgKz0gY2g7CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJu
IGlkOworCSAgICB9OworCSAgICA7CisJICAgIFNjYW5uZXIucHJvdG90eXBlLm9jdGFsVG9EZWNp
bWFsID0gZnVuY3Rpb24gKGNoKSB7CisJICAgICAgICAvLyBcMCBpcyBub3Qgb2N0YWwgZXNjYXBl
IHNlcXVlbmNlCisJICAgICAgICB2YXIgb2N0YWwgPSAoY2ggIT09ICcwJyk7CisJICAgICAgICB2
YXIgY29kZSA9IG9jdGFsVmFsdWUoY2gpOworCSAgICAgICAgaWYgKCF0aGlzLmVvZigpICYmIGNo
YXJhY3Rlcl8xLkNoYXJhY3Rlci5pc09jdGFsRGlnaXQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0
aGlzLmluZGV4KSkpIHsKKwkgICAgICAgICAgICBvY3RhbCA9IHRydWU7CisJICAgICAgICAgICAg
Y29kZSA9IGNvZGUgKiA4ICsgb2N0YWxWYWx1ZSh0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdKTsK
KwkgICAgICAgICAgICAvLyAzIGRpZ2l0cyBhcmUgb25seSBhbGxvd2VkIHdoZW4gc3RyaW5nIHN0
YXJ0cworCSAgICAgICAgICAgIC8vIHdpdGggMCwgMSwgMiwgMworCSAgICAgICAgICAgIGlmICgn
MDEyMycuaW5kZXhPZihjaCkgPj0gMCAmJiAhdGhpcy5lb2YoKSAmJiBjaGFyYWN0ZXJfMS5DaGFy
YWN0ZXIuaXNPY3RhbERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKSB7
CisJICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlICogOCArIG9jdGFsVmFsdWUodGhpcy5zb3Vy
Y2VbdGhpcy5pbmRleCsrXSk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAg
cmV0dXJuIHsKKwkgICAgICAgICAgICBjb2RlOiBjb2RlLAorCSAgICAgICAgICAgIG9jdGFsOiBv
Y3RhbAorCSAgICAgICAgfTsKKwkgICAgfTsKKwkgICAgOworCSAgICAvLyBFQ01BLTI2MiAxMS42
IE5hbWVzIGFuZCBLZXl3b3JkcworCSAgICBTY2FubmVyLnByb3RvdHlwZS5zY2FuSWRlbnRpZmll
ciA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciB0eXBlOworCSAgICAgICAgdmFyIHN0YXJ0
ID0gdGhpcy5pbmRleDsKKwkgICAgICAgIC8vIEJhY2tzbGFzaCAoVSswMDVDKSBzdGFydHMgYW4g
ZXNjYXBlZCBjaGFyYWN0ZXIuCisJICAgICAgICB2YXIgaWQgPSAodGhpcy5zb3VyY2UuY2hhckNv
ZGVBdChzdGFydCkgPT09IDB4NUMpID8gdGhpcy5nZXRDb21wbGV4SWRlbnRpZmllcigpIDogdGhp
cy5nZXRJZGVudGlmaWVyKCk7CisJICAgICAgICAvLyBUaGVyZSBpcyBubyBrZXl3b3JkIG9yIGxp
dGVyYWwgd2l0aCBvbmx5IG9uZSBjaGFyYWN0ZXIuCisJICAgICAgICAvLyBUaHVzLCBpdCBtdXN0
IGJlIGFuIGlkZW50aWZpZXIuCisJICAgICAgICBpZiAoaWQubGVuZ3RoID09PSAxKSB7CisJICAg
ICAgICAgICAgdHlwZSA9IHRva2VuXzEuVG9rZW4uSWRlbnRpZmllcjsKKwkgICAgICAgIH0KKwkg
ICAgICAgIGVsc2UgaWYgKHRoaXMuaXNLZXl3b3JkKGlkKSkgeworCSAgICAgICAgICAgIHR5cGUg
PSB0b2tlbl8xLlRva2VuLktleXdvcmQ7CisJICAgICAgICB9CisJICAgICAgICBlbHNlIGlmIChp
ZCA9PT0gJ251bGwnKSB7CisJICAgICAgICAgICAgdHlwZSA9IHRva2VuXzEuVG9rZW4uTnVsbExp
dGVyYWw7CisJICAgICAgICB9CisJICAgICAgICBlbHNlIGlmIChpZCA9PT0gJ3RydWUnIHx8IGlk
ID09PSAnZmFsc2UnKSB7CisJICAgICAgICAgICAgdHlwZSA9IHRva2VuXzEuVG9rZW4uQm9vbGVh
bkxpdGVyYWw7CisJICAgICAgICB9CisJICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICB0eXBl
ID0gdG9rZW5fMS5Ub2tlbi5JZGVudGlmaWVyOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJu
IHsKKwkgICAgICAgICAgICB0eXBlOiB0eXBlLAorCSAgICAgICAgICAgIHZhbHVlOiBpZCwKKwkg
ICAgICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsCisJICAgICAgICAgICAgbGlu
ZVN0YXJ0OiB0aGlzLmxpbmVTdGFydCwKKwkgICAgICAgICAgICBzdGFydDogc3RhcnQsCisJICAg
ICAgICAgICAgZW5kOiB0aGlzLmluZGV4CisJICAgICAgICB9OworCSAgICB9OworCSAgICA7CisJ
ICAgIC8vIEVDTUEtMjYyIDExLjcgUHVuY3R1YXRvcnMKKwkgICAgU2Nhbm5lci5wcm90b3R5cGUu
c2NhblB1bmN0dWF0b3IgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgdG9rZW4gPSB7CisJ
ICAgICAgICAgICAgdHlwZTogdG9rZW5fMS5Ub2tlbi5QdW5jdHVhdG9yLAorCSAgICAgICAgICAg
IHZhbHVlOiAnJywKKwkgICAgICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsCisJ
ICAgICAgICAgICAgbGluZVN0YXJ0OiB0aGlzLmxpbmVTdGFydCwKKwkgICAgICAgICAgICBzdGFy
dDogdGhpcy5pbmRleCwKKwkgICAgICAgICAgICBlbmQ6IHRoaXMuaW5kZXgKKwkgICAgICAgIH07
CisJICAgICAgICAvLyBDaGVjayBmb3IgbW9zdCBjb21tb24gc2luZ2xlLWNoYXJhY3RlciBwdW5j
dHVhdG9ycy4KKwkgICAgICAgIHZhciBzdHIgPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XTsKKwkg
ICAgICAgIHN3aXRjaCAoc3RyKSB7CisJICAgICAgICAgICAgY2FzZSAnKCc6CisJICAgICAgICAg
ICAgY2FzZSAneyc6CisJICAgICAgICAgICAgICAgIGlmIChzdHIgPT09ICd7JykgeworCSAgICAg
ICAgICAgICAgICAgICAgdGhpcy5jdXJseVN0YWNrLnB1c2goJ3snKTsKKwkgICAgICAgICAgICAg
ICAgfQorCSAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7CisJICAgICAgICAgICAgICAgIGJy
ZWFrOworCSAgICAgICAgICAgIGNhc2UgJy4nOgorCSAgICAgICAgICAgICAgICArK3RoaXMuaW5k
ZXg7CisJICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZVt0aGlzLmluZGV4XSA9PT0gJy4n
ICYmIHRoaXMuc291cmNlW3RoaXMuaW5kZXggKyAxXSA9PT0gJy4nKSB7CisJICAgICAgICAgICAg
ICAgICAgICAvLyBTcHJlYWQgb3BlcmF0b3I6IC4uLgorCSAgICAgICAgICAgICAgICAgICAgdGhp
cy5pbmRleCArPSAyOworCSAgICAgICAgICAgICAgICAgICAgc3RyID0gJy4uLic7CisJICAgICAg
ICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgY2FzZSAn
fSc6CisJICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKKwkgICAgICAgICAgICAgICAgdGhp
cy5jdXJseVN0YWNrLnBvcCgpOworCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAg
ICBjYXNlICcpJzoKKwkgICAgICAgICAgICBjYXNlICc7JzoKKwkgICAgICAgICAgICBjYXNlICcs
JzoKKwkgICAgICAgICAgICBjYXNlICdbJzoKKwkgICAgICAgICAgICBjYXNlICddJzoKKwkgICAg
ICAgICAgICBjYXNlICc6JzoKKwkgICAgICAgICAgICBjYXNlICc/JzoKKwkgICAgICAgICAgICBj
YXNlICd+JzoKKwkgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4OworCSAgICAgICAgICAgICAg
ICBicmVhazsKKwkgICAgICAgICAgICBkZWZhdWx0OgorCSAgICAgICAgICAgICAgICAvLyA0LWNo
YXJhY3RlciBwdW5jdHVhdG9yLgorCSAgICAgICAgICAgICAgICBzdHIgPSB0aGlzLnNvdXJjZS5z
dWJzdHIodGhpcy5pbmRleCwgNCk7CisJICAgICAgICAgICAgICAgIGlmIChzdHIgPT09ICc+Pj49
JykgeworCSAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleCArPSA0OworCSAgICAgICAgICAg
ICAgICB9CisJICAgICAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICAgICAgLy8g
My1jaGFyYWN0ZXIgcHVuY3R1YXRvcnMuCisJICAgICAgICAgICAgICAgICAgICBzdHIgPSBzdHIu
c3Vic3RyKDAsIDMpOworCSAgICAgICAgICAgICAgICAgICAgaWYgKHN0ciA9PT0gJz09PScgfHwg
c3RyID09PSAnIT09JyB8fCBzdHIgPT09ICc+Pj4nIHx8CisJICAgICAgICAgICAgICAgICAgICAg
ICAgc3RyID09PSAnPDw9JyB8fCBzdHIgPT09ICc+Pj0nIHx8IHN0ciA9PT0gJyoqPScpIHsKKwkg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4ICs9IDM7CisJICAgICAgICAgICAgICAg
ICAgICB9CisJICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgICAg
ICAgICAvLyAyLWNoYXJhY3RlciBwdW5jdHVhdG9ycy4KKwkgICAgICAgICAgICAgICAgICAgICAg
ICBzdHIgPSBzdHIuc3Vic3RyKDAsIDIpOworCSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChz
dHIgPT09ICcmJicgfHwgc3RyID09PSAnfHwnIHx8IHN0ciA9PT0gJz09JyB8fCBzdHIgPT09ICch
PScgfHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID09PSAnKz0nIHx8IHN0ciA9
PT0gJy09JyB8fCBzdHIgPT09ICcqPScgfHwgc3RyID09PSAnLz0nIHx8CisJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ciA9PT0gJysrJyB8fCBzdHIgPT09ICctLScgfHwgc3RyID09PSAn
PDwnIHx8IHN0ciA9PT0gJz4+JyB8fAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIg
PT09ICcmPScgfHwgc3RyID09PSAnfD0nIHx8IHN0ciA9PT0gJ149JyB8fCBzdHIgPT09ICclPScg
fHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID09PSAnPD0nIHx8IHN0ciA9PT0g
Jz49JyB8fCBzdHIgPT09ICc9PicgfHwgc3RyID09PSAnKionKSB7CisJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMuaW5kZXggKz0gMjsKKwkgICAgICAgICAgICAgICAgICAgICAgICB9
CisJICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIDEtY2hhcmFjdGVyIHB1bmN0dWF0b3JzLgorCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHIgPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XTsKKwkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCc8Pj0hKy0qJSZ8Xi8nLmluZGV4T2Yoc3RyKSA+PSAwKSB7CisJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7CisJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAg
ICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIGlm
ICh0aGlzLmluZGV4ID09PSB0b2tlbi5zdGFydCkgeworCSAgICAgICAgICAgIHRoaXMudGhyb3dV
bmV4cGVjdGVkVG9rZW4oKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHRva2VuLmVuZCA9IHRoaXMu
aW5kZXg7CisJICAgICAgICB0b2tlbi52YWx1ZSA9IHN0cjsKKwkgICAgICAgIHJldHVybiB0b2tl
bjsKKwkgICAgfTsKKwkgICAgOworCSAgICAvLyBFQ01BLTI2MiAxMS44LjMgTnVtZXJpYyBMaXRl
cmFscworCSAgICBTY2FubmVyLnByb3RvdHlwZS5zY2FuSGV4TGl0ZXJhbCA9IGZ1bmN0aW9uIChz
dGFydCkgeworCSAgICAgICAgdmFyIG51bWJlciA9ICcnOworCSAgICAgICAgd2hpbGUgKCF0aGlz
LmVvZigpKSB7CisJICAgICAgICAgICAgaWYgKCFjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNIZXhE
aWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkgeworCSAgICAgICAgICAg
ICAgICBicmVhazsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgbnVtYmVyICs9IHRoaXMu
c291cmNlW3RoaXMuaW5kZXgrK107CisJICAgICAgICB9CisJICAgICAgICBpZiAobnVtYmVyLmxl
bmd0aCA9PT0gMCkgeworCSAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsK
KwkgICAgICAgIH0KKwkgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNJZGVudGlm
aWVyU3RhcnQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkpIHsKKwkgICAgICAg
ICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7CisJICAgICAgICB9CisJICAgICAgICBy
ZXR1cm4geworCSAgICAgICAgICAgIHR5cGU6IHRva2VuXzEuVG9rZW4uTnVtZXJpY0xpdGVyYWws
CisJICAgICAgICAgICAgdmFsdWU6IHBhcnNlSW50KCcweCcgKyBudW1iZXIsIDE2KSwKKwkgICAg
ICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsCisJICAgICAgICAgICAgbGluZVN0
YXJ0OiB0aGlzLmxpbmVTdGFydCwKKwkgICAgICAgICAgICBzdGFydDogc3RhcnQsCisJICAgICAg
ICAgICAgZW5kOiB0aGlzLmluZGV4CisJICAgICAgICB9OworCSAgICB9OworCSAgICA7CisJICAg
IFNjYW5uZXIucHJvdG90eXBlLnNjYW5CaW5hcnlMaXRlcmFsID0gZnVuY3Rpb24gKHN0YXJ0KSB7
CisJICAgICAgICB2YXIgbnVtYmVyID0gJyc7CisJICAgICAgICB2YXIgY2g7CisJICAgICAgICB3
aGlsZSAoIXRoaXMuZW9mKCkpIHsKKwkgICAgICAgICAgICBjaCA9IHRoaXMuc291cmNlW3RoaXMu
aW5kZXhdOworCSAgICAgICAgICAgIGlmIChjaCAhPT0gJzAnICYmIGNoICE9PSAnMScpIHsKKwkg
ICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIG51bWJl
ciArPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdOworCSAgICAgICAgfQorCSAgICAgICAgaWYg
KG51bWJlci5sZW5ndGggPT09IDApIHsKKwkgICAgICAgICAgICAvLyBvbmx5IDBiIG9yIDBCCisJ
ICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOworCSAgICAgICAgfQorCSAg
ICAgICAgaWYgKCF0aGlzLmVvZigpKSB7CisJICAgICAgICAgICAgY2ggPSB0aGlzLnNvdXJjZS5j
aGFyQ29kZUF0KHRoaXMuaW5kZXgpOworCSAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBl
bHNlICovCisJICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0lkZW50aWZp
ZXJTdGFydChjaCkgfHwgY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KGNoKSkg
eworCSAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7CisJICAgICAg
ICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHsKKwkgICAgICAgICAgICB0eXBl
OiB0b2tlbl8xLlRva2VuLk51bWVyaWNMaXRlcmFsLAorCSAgICAgICAgICAgIHZhbHVlOiBwYXJz
ZUludChudW1iZXIsIDIpLAorCSAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJl
ciwKKwkgICAgICAgICAgICBsaW5lU3RhcnQ6IHRoaXMubGluZVN0YXJ0LAorCSAgICAgICAgICAg
IHN0YXJ0OiBzdGFydCwKKwkgICAgICAgICAgICBlbmQ6IHRoaXMuaW5kZXgKKwkgICAgICAgIH07
CisJICAgIH07CisJICAgIDsKKwkgICAgU2Nhbm5lci5wcm90b3R5cGUuc2Nhbk9jdGFsTGl0ZXJh
bCA9IGZ1bmN0aW9uIChwcmVmaXgsIHN0YXJ0KSB7CisJICAgICAgICB2YXIgbnVtYmVyID0gJyc7
CisJICAgICAgICB2YXIgb2N0YWwgPSBmYWxzZTsKKwkgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5D
aGFyYWN0ZXIuaXNPY3RhbERpZ2l0KHByZWZpeC5jaGFyQ29kZUF0KDApKSkgeworCSAgICAgICAg
ICAgIG9jdGFsID0gdHJ1ZTsKKwkgICAgICAgICAgICBudW1iZXIgPSAnMCcgKyB0aGlzLnNvdXJj
ZVt0aGlzLmluZGV4KytdOworCSAgICAgICAgfQorCSAgICAgICAgZWxzZSB7CisJICAgICAgICAg
ICAgKyt0aGlzLmluZGV4OworCSAgICAgICAgfQorCSAgICAgICAgd2hpbGUgKCF0aGlzLmVvZigp
KSB7CisJICAgICAgICAgICAgaWYgKCFjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNPY3RhbERpZ2l0
KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKSB7CisJICAgICAgICAgICAgICAg
IGJyZWFrOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBudW1iZXIgKz0gdGhpcy5zb3Vy
Y2VbdGhpcy5pbmRleCsrXTsKKwkgICAgICAgIH0KKwkgICAgICAgIGlmICghb2N0YWwgJiYgbnVt
YmVyLmxlbmd0aCA9PT0gMCkgeworCSAgICAgICAgICAgIC8vIG9ubHkgMG8gb3IgME8KKwkgICAg
ICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7CisJICAgICAgICB9CisJICAgICAg
ICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclN0YXJ0KHRoaXMuc291cmNl
LmNoYXJDb2RlQXQodGhpcy5pbmRleCkpIHx8IGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0RlY2lt
YWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkgeworCSAgICAgICAg
ICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJl
dHVybiB7CisJICAgICAgICAgICAgdHlwZTogdG9rZW5fMS5Ub2tlbi5OdW1lcmljTGl0ZXJhbCwK
KwkgICAgICAgICAgICB2YWx1ZTogcGFyc2VJbnQobnVtYmVyLCA4KSwKKwkgICAgICAgICAgICBv
Y3RhbDogb2N0YWwsCisJICAgICAgICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLAor
CSAgICAgICAgICAgIGxpbmVTdGFydDogdGhpcy5saW5lU3RhcnQsCisJICAgICAgICAgICAgc3Rh
cnQ6IHN0YXJ0LAorCSAgICAgICAgICAgIGVuZDogdGhpcy5pbmRleAorCSAgICAgICAgfTsKKwkg
ICAgfTsKKwkgICAgOworCSAgICBTY2FubmVyLnByb3RvdHlwZS5pc0ltcGxpY2l0T2N0YWxMaXRl
cmFsID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgLy8gSW1wbGljaXQgb2N0YWwsIHVubGVzcyB0
aGVyZSBpcyBhIG5vbi1vY3RhbCBkaWdpdC4KKwkgICAgICAgIC8vIChBbm5leCBCLjEuMSBvbiBO
dW1lcmljIExpdGVyYWxzKQorCSAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuaW5kZXggKyAxOyBp
IDwgdGhpcy5sZW5ndGg7ICsraSkgeworCSAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuc291cmNl
W2ldOworCSAgICAgICAgICAgIGlmIChjaCA9PT0gJzgnIHx8IGNoID09PSAnOScpIHsKKwkgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBp
ZiAoIWNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc09jdGFsRGlnaXQoY2guY2hhckNvZGVBdCgwKSkp
IHsKKwkgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisJICAgICAgICAgICAgfQorCSAgICAg
ICAgfQorCSAgICAgICAgcmV0dXJuIHRydWU7CisJICAgIH07CisJICAgIDsKKwkgICAgU2Nhbm5l
ci5wcm90b3R5cGUuc2Nhbk51bWVyaWNMaXRlcmFsID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAg
dmFyIHN0YXJ0ID0gdGhpcy5pbmRleDsKKwkgICAgICAgIHZhciBjaCA9IHRoaXMuc291cmNlW3N0
YXJ0XTsKKwkgICAgICAgIGFzc2VydF8xLmFzc2VydChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNE
ZWNpbWFsRGlnaXQoY2guY2hhckNvZGVBdCgwKSkgfHwgKGNoID09PSAnLicpLCAnTnVtZXJpYyBs
aXRlcmFsIG11c3Qgc3RhcnQgd2l0aCBhIGRlY2ltYWwgZGlnaXQgb3IgYSBkZWNpbWFsIHBvaW50
Jyk7CisJICAgICAgICB2YXIgbnVtYmVyID0gJyc7CisJICAgICAgICBpZiAoY2ggIT09ICcuJykg
eworCSAgICAgICAgICAgIG51bWJlciA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107CisJICAg
ICAgICAgICAgY2ggPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XTsKKwkgICAgICAgICAgICAvLyBI
ZXggbnVtYmVyIHN0YXJ0cyB3aXRoICcweCcuCisJICAgICAgICAgICAgLy8gT2N0YWwgbnVtYmVy
IHN0YXJ0cyB3aXRoICcwJy4KKwkgICAgICAgICAgICAvLyBPY3RhbCBudW1iZXIgaW4gRVM2IHN0
YXJ0cyB3aXRoICcwbycuCisJICAgICAgICAgICAgLy8gQmluYXJ5IG51bWJlciBpbiBFUzYgc3Rh
cnRzIHdpdGggJzBiJy4KKwkgICAgICAgICAgICBpZiAobnVtYmVyID09PSAnMCcpIHsKKwkgICAg
ICAgICAgICAgICAgaWYgKGNoID09PSAneCcgfHwgY2ggPT09ICdYJykgeworCSAgICAgICAgICAg
ICAgICAgICAgKyt0aGlzLmluZGV4OworCSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
c2NhbkhleExpdGVyYWwoc3RhcnQpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAg
ICAgIGlmIChjaCA9PT0gJ2InIHx8IGNoID09PSAnQicpIHsKKwkgICAgICAgICAgICAgICAgICAg
ICsrdGhpcy5pbmRleDsKKwkgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5CaW5h
cnlMaXRlcmFsKHN0YXJ0KTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBp
ZiAoY2ggPT09ICdvJyB8fCBjaCA9PT0gJ08nKSB7CisJICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5zY2FuT2N0YWxMaXRlcmFsKGNoLCBzdGFydCk7CisJICAgICAgICAgICAgICAgIH0K
KwkgICAgICAgICAgICAgICAgaWYgKGNoICYmIGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc09jdGFs
RGlnaXQoY2guY2hhckNvZGVBdCgwKSkpIHsKKwkgICAgICAgICAgICAgICAgICAgIGlmICh0aGlz
LmlzSW1wbGljaXRPY3RhbExpdGVyYWwoKSkgeworCSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLnNjYW5PY3RhbExpdGVyYWwoY2gsIHN0YXJ0KTsKKwkgICAgICAgICAgICAgICAg
ICAgIH0KKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB3
aGlsZSAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KHRoaXMuc291cmNlLmNo
YXJDb2RlQXQodGhpcy5pbmRleCkpKSB7CisJICAgICAgICAgICAgICAgIG51bWJlciArPSB0aGlz
LnNvdXJjZVt0aGlzLmluZGV4KytdOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBjaCA9
IHRoaXMuc291cmNlW3RoaXMuaW5kZXhdOworCSAgICAgICAgfQorCSAgICAgICAgaWYgKGNoID09
PSAnLicpIHsKKwkgICAgICAgICAgICBudW1iZXIgKz0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsr
XTsKKwkgICAgICAgICAgICB3aGlsZSAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzRGVjaW1hbERp
Z2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKSB7CisJICAgICAgICAgICAg
ICAgIG51bWJlciArPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdOworCSAgICAgICAgICAgIH0K
KwkgICAgICAgICAgICBjaCA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXhdOworCSAgICAgICAgfQor
CSAgICAgICAgaWYgKGNoID09PSAnZScgfHwgY2ggPT09ICdFJykgeworCSAgICAgICAgICAgIG51
bWJlciArPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdOworCSAgICAgICAgICAgIGNoID0gdGhp
cy5zb3VyY2VbdGhpcy5pbmRleF07CisJICAgICAgICAgICAgaWYgKGNoID09PSAnKycgfHwgY2gg
PT09ICctJykgeworCSAgICAgICAgICAgICAgICBudW1iZXIgKz0gdGhpcy5zb3VyY2VbdGhpcy5p
bmRleCsrXTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNo
YXJhY3Rlci5pc0RlY2ltYWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgp
KSkgeworCSAgICAgICAgICAgICAgICB3aGlsZSAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzRGVj
aW1hbERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKSB7CisJICAgICAg
ICAgICAgICAgICAgICBudW1iZXIgKz0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTsKKwkgICAg
ICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIHsKKwkgICAg
ICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOworCSAgICAgICAgICAgIH0K
KwkgICAgICAgIH0KKwkgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNJZGVudGlm
aWVyU3RhcnQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkpIHsKKwkgICAgICAg
ICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7CisJICAgICAgICB9CisJICAgICAgICBy
ZXR1cm4geworCSAgICAgICAgICAgIHR5cGU6IHRva2VuXzEuVG9rZW4uTnVtZXJpY0xpdGVyYWws
CisJICAgICAgICAgICAgdmFsdWU6IHBhcnNlRmxvYXQobnVtYmVyKSwKKwkgICAgICAgICAgICBs
aW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsCisJICAgICAgICAgICAgbGluZVN0YXJ0OiB0aGlz
LmxpbmVTdGFydCwKKwkgICAgICAgICAgICBzdGFydDogc3RhcnQsCisJICAgICAgICAgICAgZW5k
OiB0aGlzLmluZGV4CisJICAgICAgICB9OworCSAgICB9OworCSAgICA7CisJICAgIC8vIEVDTUEt
MjYyIDExLjguNCBTdHJpbmcgTGl0ZXJhbHMKKwkgICAgU2Nhbm5lci5wcm90b3R5cGUuc2NhblN0
cmluZ0xpdGVyYWwgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmlu
ZGV4OworCSAgICAgICAgdmFyIHF1b3RlID0gdGhpcy5zb3VyY2Vbc3RhcnRdOworCSAgICAgICAg
YXNzZXJ0XzEuYXNzZXJ0KChxdW90ZSA9PT0gJ1wnJyB8fCBxdW90ZSA9PT0gJyInKSwgJ1N0cmlu
ZyBsaXRlcmFsIG11c3Qgc3RhcnRzIHdpdGggYSBxdW90ZScpOworCSAgICAgICAgKyt0aGlzLmlu
ZGV4OworCSAgICAgICAgdmFyIG9jdGFsID0gZmFsc2U7CisJICAgICAgICB2YXIgc3RyID0gJyc7
CisJICAgICAgICB3aGlsZSAoIXRoaXMuZW9mKCkpIHsKKwkgICAgICAgICAgICB2YXIgY2ggPSB0
aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdOworCSAgICAgICAgICAgIGlmIChjaCA9PT0gcXVvdGUp
IHsKKwkgICAgICAgICAgICAgICAgcXVvdGUgPSAnJzsKKwkgICAgICAgICAgICAgICAgYnJlYWs7
CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYgKGNoID09PSAnXFwnKSB7CisJ
ICAgICAgICAgICAgICAgIGNoID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTsKKwkgICAgICAg
ICAgICAgICAgaWYgKCFjaCB8fCAhY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzTGluZVRlcm1pbmF0
b3IoY2guY2hhckNvZGVBdCgwKSkpIHsKKwkgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2gp
IHsKKwkgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd1JzoKKwkgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlICd4JzoKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMu
c291cmNlW3RoaXMuaW5kZXhdID09PSAneycpIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICsrdGhpcy5pbmRleDsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ciArPSB0aGlzLnNjYW5Vbmljb2RlQ29kZVBvaW50RXNjYXBlKCk7CisJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdW5lc2NhcGVkID0gdGhpcy5zY2FuSGV4
RXNjYXBlKGNoKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdW5lc2Nh
cGVkKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1Vu
ZXhwZWN0ZWRUb2tlbigpOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IHVuZXNjYXBlZDsKKwkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKwkgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICduJzoKKwkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RyICs9ICdcbic7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworCSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3InOgorCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHIgKz0gJ1xyJzsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisJICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndCc6CisJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ciArPSAnXHQnOworCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKwkgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdiJzoKKwkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RyICs9ICdcYic7CisJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2YnOgorCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xmJzsKKwkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndic6CisJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXHgwQic7CisJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzgnOgorCSAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzknOgorCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHIgKz0gY2g7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJh
dGVVbmV4cGVjdGVkVG9rZW4oKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisJICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKwkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGNoICYmIGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc09jdGFsRGlnaXQoY2gu
Y2hhckNvZGVBdCgwKSkpIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBv
Y3RUb0RlYyA9IHRoaXMub2N0YWxUb0RlY2ltYWwoY2gpOworCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb2N0YWwgPSBvY3RUb0RlYy5vY3RhbCB8fCBvY3RhbDsKKwkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKG9jdFRvRGVj
LmNvZGUpOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
ICs9IGNoOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAg
ICAgICB9CisJICAgICAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICAgICAgKyt0
aGlzLmxpbmVOdW1iZXI7CisJICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdccicgJiYg
dGhpcy5zb3VyY2VbdGhpcy5pbmRleF0gPT09ICdcbicpIHsKKwkgICAgICAgICAgICAgICAgICAg
ICAgICArK3RoaXMuaW5kZXg7CisJICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAg
ICAgICAgICB0aGlzLmxpbmVTdGFydCA9IHRoaXMuaW5kZXg7CisJICAgICAgICAgICAgICAgIH0K
KwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFj
dGVyLmlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHsKKwkgICAgICAgICAgICAg
ICAgYnJlYWs7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAg
ICAgICAgICBzdHIgKz0gY2g7CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAg
aWYgKHF1b3RlICE9PSAnJykgeworCSAgICAgICAgICAgIHRoaXMuaW5kZXggPSBzdGFydDsKKwkg
ICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7CisJICAgICAgICB9CisJICAg
ICAgICByZXR1cm4geworCSAgICAgICAgICAgIHR5cGU6IHRva2VuXzEuVG9rZW4uU3RyaW5nTGl0
ZXJhbCwKKwkgICAgICAgICAgICB2YWx1ZTogc3RyLAorCSAgICAgICAgICAgIG9jdGFsOiBvY3Rh
bCwKKwkgICAgICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsCisJICAgICAgICAg
ICAgbGluZVN0YXJ0OiB0aGlzLmxpbmVTdGFydCwKKwkgICAgICAgICAgICBzdGFydDogc3RhcnQs
CisJICAgICAgICAgICAgZW5kOiB0aGlzLmluZGV4CisJICAgICAgICB9OworCSAgICB9OworCSAg
ICA7CisJICAgIC8vIEVDTUEtMjYyIDExLjguNiBUZW1wbGF0ZSBMaXRlcmFsIExleGljYWwgQ29t
cG9uZW50cworCSAgICBTY2FubmVyLnByb3RvdHlwZS5zY2FuVGVtcGxhdGUgPSBmdW5jdGlvbiAo
KSB7CisJICAgICAgICB2YXIgY29va2VkID0gJyc7CisJICAgICAgICB2YXIgdGVybWluYXRlZCA9
IGZhbHNlOworCSAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5pbmRleDsKKwkgICAgICAgIHZhciBo
ZWFkID0gKHRoaXMuc291cmNlW3N0YXJ0XSA9PT0gJ2AnKTsKKwkgICAgICAgIHZhciB0YWlsID0g
ZmFsc2U7CisJICAgICAgICB2YXIgcmF3T2Zmc2V0ID0gMjsKKwkgICAgICAgICsrdGhpcy5pbmRl
eDsKKwkgICAgICAgIHdoaWxlICghdGhpcy5lb2YoKSkgeworCSAgICAgICAgICAgIHZhciBjaCA9
IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107CisJICAgICAgICAgICAgaWYgKGNoID09PSAnYCcp
IHsKKwkgICAgICAgICAgICAgICAgcmF3T2Zmc2V0ID0gMTsKKwkgICAgICAgICAgICAgICAgdGFp
bCA9IHRydWU7CisJICAgICAgICAgICAgICAgIHRlcm1pbmF0ZWQgPSB0cnVlOworCSAgICAgICAg
ICAgICAgICBicmVhazsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSBpZiAoY2gg
PT09ICckJykgeworCSAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VbdGhpcy5pbmRleF0g
PT09ICd7JykgeworCSAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJseVN0YWNrLnB1c2goJyR7
Jyk7CisJICAgICAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7CisJICAgICAgICAgICAgICAg
ICAgICB0ZXJtaW5hdGVkID0gdHJ1ZTsKKwkgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAg
ICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGNvb2tlZCArPSBjaDsKKwkgICAgICAg
ICAgICB9CisJICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT09ICdcXCcpIHsKKwkgICAgICAgICAg
ICAgICAgY2ggPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdOworCSAgICAgICAgICAgICAgICBp
ZiAoIWNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQo
MCkpKSB7CisJICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoKSB7CisJICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAnbic6CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tl
ZCArPSAnXG4nOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlICdyJzoKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29va2VkICs9ICdccic7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3QnOgorCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb29rZWQgKz0gJ1x0JzsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisJICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndSc6CisJICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAneCc6CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNv
dXJjZVt0aGlzLmluZGV4XSA9PT0gJ3snKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICArK3RoaXMuaW5kZXg7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29r
ZWQgKz0gdGhpcy5zY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSgpOworCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3RvcmUgPSB0aGlzLmluZGV4Owor
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVuZXNjYXBlZCA9IHRoaXMuc2Nh
bkhleEVzY2FwZShjaCk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5l
c2NhcGVkKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2VkICs9
IHVuZXNjYXBlZDsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMuaW5kZXggPSByZXN0b3JlOworCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvb2tlZCArPSBjaDsKKwkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdiJzoK
KwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2VkICs9ICdcYic7CisJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
J2YnOgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gJ1xmJzsKKwkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAndic6CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSAnXHYnOwor
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICcw
JykgeworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNo
YXJhY3Rlci5pc0RlY2ltYWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgp
KSkgeworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElsbGVnYWw6IFww
MSBcMDIgYW5kIHNvIG9uCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy50aHJvd1VuZXhwZWN0ZWRUb2tlbihtZXNzYWdlc18xLk1lc3NhZ2VzLlRlbXBsYXRlT2N0YWxM
aXRlcmFsKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSAnXDAnOworCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoYXJh
Y3Rlcl8xLkNoYXJhY3Rlci5pc09jdGFsRGlnaXQoY2guY2hhckNvZGVBdCgwKSkpIHsKKwkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElsbGVnYWw6IFwxIFwyCisJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKG1lc3NhZ2Vz
XzEuTWVzc2FnZXMuVGVtcGxhdGVPY3RhbExpdGVyYWwpOworCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29va2VkICs9IGNoOworCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAg
ICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGVs
c2UgeworCSAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmxpbmVOdW1iZXI7CisJICAgICAgICAg
ICAgICAgICAgICBpZiAoY2ggPT09ICdccicgJiYgdGhpcy5zb3VyY2VbdGhpcy5pbmRleF0gPT09
ICdcbicpIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7CisJICAgICAg
ICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmVTdGFydCA9IHRo
aXMuaW5kZXg7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICAg
ICAgZWxzZSBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzTGluZVRlcm1pbmF0b3IoY2guY2hh
ckNvZGVBdCgwKSkpIHsKKwkgICAgICAgICAgICAgICAgKyt0aGlzLmxpbmVOdW1iZXI7CisJICAg
ICAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xyJyAmJiB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XSA9
PT0gJ1xuJykgeworCSAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4OworCSAgICAgICAg
ICAgICAgICB9CisJICAgICAgICAgICAgICAgIHRoaXMubGluZVN0YXJ0ID0gdGhpcy5pbmRleDsK
KwkgICAgICAgICAgICAgICAgY29va2VkICs9ICdcbic7CisJICAgICAgICAgICAgfQorCSAgICAg
ICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICBjb29rZWQgKz0gY2g7CisJICAgICAgICAg
ICAgfQorCSAgICAgICAgfQorCSAgICAgICAgaWYgKCF0ZXJtaW5hdGVkKSB7CisJICAgICAgICAg
ICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOworCSAgICAgICAgfQorCSAgICAgICAgaWYg
KCFoZWFkKSB7CisJICAgICAgICAgICAgdGhpcy5jdXJseVN0YWNrLnBvcCgpOworCSAgICAgICAg
fQorCSAgICAgICAgcmV0dXJuIHsKKwkgICAgICAgICAgICB0eXBlOiB0b2tlbl8xLlRva2VuLlRl
bXBsYXRlLAorCSAgICAgICAgICAgIHZhbHVlOiB7CisJICAgICAgICAgICAgICAgIGNvb2tlZDog
Y29va2VkLAorCSAgICAgICAgICAgICAgICByYXc6IHRoaXMuc291cmNlLnNsaWNlKHN0YXJ0ICsg
MSwgdGhpcy5pbmRleCAtIHJhd09mZnNldCkKKwkgICAgICAgICAgICB9LAorCSAgICAgICAgICAg
IGhlYWQ6IGhlYWQsCisJICAgICAgICAgICAgdGFpbDogdGFpbCwKKwkgICAgICAgICAgICBsaW5l
TnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsCisJICAgICAgICAgICAgbGluZVN0YXJ0OiB0aGlzLmxp
bmVTdGFydCwKKwkgICAgICAgICAgICBzdGFydDogc3RhcnQsCisJICAgICAgICAgICAgZW5kOiB0
aGlzLmluZGV4CisJICAgICAgICB9OworCSAgICB9OworCSAgICA7CisJICAgIC8vIEVDTUEtMjYy
IDExLjguNSBSZWd1bGFyIEV4cHJlc3Npb24gTGl0ZXJhbHMKKwkgICAgU2Nhbm5lci5wcm90b3R5
cGUudGVzdFJlZ0V4cCA9IGZ1bmN0aW9uIChwYXR0ZXJuLCBmbGFncykgeworCSAgICAgICAgLy8g
VGhlIEJNUCBjaGFyYWN0ZXIgdG8gdXNlIGFzIGEgcmVwbGFjZW1lbnQgZm9yIGFzdHJhbCBzeW1i
b2xzIHdoZW4KKwkgICAgICAgIC8vIHRyYW5zbGF0aW5nIGFuIEVTNiAidSItZmxhZ2dlZCBwYXR0
ZXJuIHRvIGFuIEVTNS1jb21wYXRpYmxlCisJICAgICAgICAvLyBhcHByb3hpbWF0aW9uLgorCSAg
ICAgICAgLy8gTm90ZTogcmVwbGFjaW5nIHdpdGggJ1x1RkZGRicgZW5hYmxlcyBmYWxzZSBwb3Np
dGl2ZXMgaW4gdW5saWtlbHkKKwkgICAgICAgIC8vIHNjZW5hcmlvcy4gRm9yIGV4YW1wbGUsIGBb
XHV7MTA0NGZ9LVx1ezEwNDQwfV1gIGlzIGFuIGludmFsaWQKKwkgICAgICAgIC8vIHBhdHRlcm4g
dGhhdCB3b3VsZCBub3QgYmUgZGV0ZWN0ZWQgYnkgdGhpcyBzdWJzdGl0dXRpb24uCisJICAgICAg
ICB2YXIgYXN0cmFsU3Vic3RpdHV0ZSA9ICdcdUZGRkYnOworCSAgICAgICAgdmFyIHRtcCA9IHBh
dHRlcm47CisJICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisJICAgICAgICBpZiAoZmxhZ3MuaW5k
ZXhPZigndScpID49IDApIHsKKwkgICAgICAgICAgICB0bXAgPSB0bXAKKwkgICAgICAgICAgICAg
ICAgLnJlcGxhY2UoL1xcdVx7KFswLTlhLWZBLUZdKylcfXxcXHUoW2EtZkEtRjAtOV17NH0pL2cs
IGZ1bmN0aW9uICgkMCwgJDEsICQyKSB7CisJICAgICAgICAgICAgICAgIHZhciBjb2RlUG9pbnQg
PSBwYXJzZUludCgkMSB8fCAkMiwgMTYpOworCSAgICAgICAgICAgICAgICBpZiAoY29kZVBvaW50
ID4gMHgxMEZGRkYpIHsKKwkgICAgICAgICAgICAgICAgICAgIHNlbGYudGhyb3dVbmV4cGVjdGVk
VG9rZW4obWVzc2FnZXNfMS5NZXNzYWdlcy5JbnZhbGlkUmVnRXhwKTsKKwkgICAgICAgICAgICAg
ICAgfQorCSAgICAgICAgICAgICAgICBpZiAoY29kZVBvaW50IDw9IDB4RkZGRikgeworCSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZVBvaW50KTsKKwkg
ICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICByZXR1cm4gYXN0cmFsU3Vic3RpdHV0
ZTsKKwkgICAgICAgICAgICB9KQorCSAgICAgICAgICAgICAgICAucmVwbGFjZSgvW1x1RDgwMC1c
dURCRkZdW1x1REMwMC1cdURGRkZdL2csIGFzdHJhbFN1YnN0aXR1dGUpOworCSAgICAgICAgfQor
CSAgICAgICAgLy8gRmlyc3QsIGRldGVjdCBpbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCisJ
ICAgICAgICB0cnkgeworCSAgICAgICAgICAgIFJlZ0V4cCh0bXApOworCSAgICAgICAgfQorCSAg
ICAgICAgY2F0Y2ggKGUpIHsKKwkgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2Vu
KG1lc3NhZ2VzXzEuTWVzc2FnZXMuSW52YWxpZFJlZ0V4cCk7CisJICAgICAgICB9CisJICAgICAg
ICAvLyBSZXR1cm4gYSByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0IGZvciB0aGlzIHBhdHRlcm4t
ZmxhZyBwYWlyLCBvcgorCSAgICAgICAgLy8gYG51bGxgIGluIGNhc2UgdGhlIGN1cnJlbnQgZW52
aXJvbm1lbnQgZG9lc24ndCBzdXBwb3J0IHRoZSBmbGFncyBpdAorCSAgICAgICAgLy8gdXNlcy4K
KwkgICAgICAgIHRyeSB7CisJICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAocGF0dGVybiwg
ZmxhZ3MpOworCSAgICAgICAgfQorCSAgICAgICAgY2F0Y2ggKGV4Y2VwdGlvbikgeworCSAgICAg
ICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovCisJICAgICAgICAgICAgcmV0dXJuIG51
bGw7CisJICAgICAgICB9CisJICAgIH07CisJICAgIDsKKwkgICAgU2Nhbm5lci5wcm90b3R5cGUu
c2NhblJlZ0V4cEJvZHkgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgY2ggPSB0aGlzLnNv
dXJjZVt0aGlzLmluZGV4XTsKKwkgICAgICAgIGFzc2VydF8xLmFzc2VydChjaCA9PT0gJy8nLCAn
UmVndWxhciBleHByZXNzaW9uIGxpdGVyYWwgbXVzdCBzdGFydCB3aXRoIGEgc2xhc2gnKTsKKwkg
ICAgICAgIHZhciBzdHIgPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdOworCSAgICAgICAgdmFy
IGNsYXNzTWFya2VyID0gZmFsc2U7CisJICAgICAgICB2YXIgdGVybWluYXRlZCA9IGZhbHNlOwor
CSAgICAgICAgd2hpbGUgKCF0aGlzLmVvZigpKSB7CisJICAgICAgICAgICAgY2ggPSB0aGlzLnNv
dXJjZVt0aGlzLmluZGV4KytdOworCSAgICAgICAgICAgIHN0ciArPSBjaDsKKwkgICAgICAgICAg
ICBpZiAoY2ggPT09ICdcXCcpIHsKKwkgICAgICAgICAgICAgICAgY2ggPSB0aGlzLnNvdXJjZVt0
aGlzLmluZGV4KytdOworCSAgICAgICAgICAgICAgICAvLyBFQ01BLTI2MiA3LjguNQorCSAgICAg
ICAgICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzTGluZVRlcm1pbmF0b3IoY2gu
Y2hhckNvZGVBdCgwKSkpIHsKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVj
dGVkVG9rZW4obWVzc2FnZXNfMS5NZXNzYWdlcy5VbnRlcm1pbmF0ZWRSZWdFeHApOworCSAgICAg
ICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIHN0ciArPSBjaDsKKwkgICAgICAgICAgICB9
CisJICAgICAgICAgICAgZWxzZSBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzTGluZVRlcm1p
bmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHsKKwkgICAgICAgICAgICAgICAgdGhpcy50aHJvd1Vu
ZXhwZWN0ZWRUb2tlbihtZXNzYWdlc18xLk1lc3NhZ2VzLlVudGVybWluYXRlZFJlZ0V4cCk7CisJ
ICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYgKGNsYXNzTWFya2VyKSB7CisJICAg
ICAgICAgICAgICAgIGlmIChjaCA9PT0gJ10nKSB7CisJICAgICAgICAgICAgICAgICAgICBjbGFz
c01hcmtlciA9IGZhbHNlOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQorCSAg
ICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICcvJykgeworCSAg
ICAgICAgICAgICAgICAgICAgdGVybWluYXRlZCA9IHRydWU7CisJICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBlbHNlIGlmIChj
aCA9PT0gJ1snKSB7CisJICAgICAgICAgICAgICAgICAgICBjbGFzc01hcmtlciA9IHRydWU7CisJ
ICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICBp
ZiAoIXRlcm1pbmF0ZWQpIHsKKwkgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2Vu
KG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW50ZXJtaW5hdGVkUmVnRXhwKTsKKwkgICAgICAgIH0KKwkg
ICAgICAgIC8vIEV4Y2x1ZGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc2xhc2guCisJICAgICAgICB2
YXIgYm9keSA9IHN0ci5zdWJzdHIoMSwgc3RyLmxlbmd0aCAtIDIpOworCSAgICAgICAgcmV0dXJu
IHsKKwkgICAgICAgICAgICB2YWx1ZTogYm9keSwKKwkgICAgICAgICAgICBsaXRlcmFsOiBzdHIK
KwkgICAgICAgIH07CisJICAgIH07CisJICAgIDsKKwkgICAgU2Nhbm5lci5wcm90b3R5cGUuc2Nh
blJlZ0V4cEZsYWdzID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIHN0ciA9ICcnOworCSAg
ICAgICAgdmFyIGZsYWdzID0gJyc7CisJICAgICAgICB3aGlsZSAoIXRoaXMuZW9mKCkpIHsKKwkg
ICAgICAgICAgICB2YXIgY2ggPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XTsKKwkgICAgICAgICAg
ICBpZiAoIWNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJQYXJ0KGNoLmNoYXJDb2Rl
QXQoMCkpKSB7CisJICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIH0KKwkgICAg
ICAgICAgICArK3RoaXMuaW5kZXg7CisJICAgICAgICAgICAgaWYgKGNoID09PSAnXFwnICYmICF0
aGlzLmVvZigpKSB7CisJICAgICAgICAgICAgICAgIGNoID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRl
eF07CisJICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ3UnKSB7CisJICAgICAgICAgICAgICAg
ICAgICArK3RoaXMuaW5kZXg7CisJICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdG9yZSA9IHRo
aXMuaW5kZXg7CisJICAgICAgICAgICAgICAgICAgICBjaCA9IHRoaXMuc2NhbkhleEVzY2FwZSgn
dScpOworCSAgICAgICAgICAgICAgICAgICAgaWYgKGNoKSB7CisJICAgICAgICAgICAgICAgICAg
ICAgICAgZmxhZ3MgKz0gY2g7CisJICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzdHIgKz0g
J1xcdSc7IHJlc3RvcmUgPCB0aGlzLmluZGV4OyArK3Jlc3RvcmUpIHsKKwkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RyICs9IHRoaXMuc291cmNlW3Jlc3RvcmVdOworCSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAg
ICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSByZXN0b3Jl
OworCSAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzICs9ICd1JzsKKwkgICAgICAgICAgICAg
ICAgICAgICAgICBzdHIgKz0gJ1xcdSc7CisJICAgICAgICAgICAgICAgICAgICB9CisJICAgICAg
ICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKCk7CisJICAgICAgICAg
ICAgICAgIH0KKwkgICAgICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgICAgICBz
dHIgKz0gJ1xcJzsKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVk
VG9rZW4oKTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgICAg
ICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgZmxhZ3MgKz0gY2g7CisJICAgICAgICAgICAgICAg
IHN0ciArPSBjaDsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4g
eworCSAgICAgICAgICAgIHZhbHVlOiBmbGFncywKKwkgICAgICAgICAgICBsaXRlcmFsOiBzdHIK
KwkgICAgICAgIH07CisJICAgIH07CisJICAgIDsKKwkgICAgU2Nhbm5lci5wcm90b3R5cGUuc2Nh
blJlZ0V4cCA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBzdGFydCA9IHRoaXMuaW5kZXg7
CisJICAgICAgICB2YXIgYm9keSA9IHRoaXMuc2NhblJlZ0V4cEJvZHkoKTsKKwkgICAgICAgIHZh
ciBmbGFncyA9IHRoaXMuc2NhblJlZ0V4cEZsYWdzKCk7CisJICAgICAgICB2YXIgdmFsdWUgPSB0
aGlzLnRlc3RSZWdFeHAoYm9keS52YWx1ZSwgZmxhZ3MudmFsdWUpOworCSAgICAgICAgcmV0dXJu
IHsKKwkgICAgICAgICAgICB0eXBlOiB0b2tlbl8xLlRva2VuLlJlZ3VsYXJFeHByZXNzaW9uLAor
CSAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKKwkgICAgICAgICAgICBsaXRlcmFsOiBib2R5Lmxp
dGVyYWwgKyBmbGFncy5saXRlcmFsLAorCSAgICAgICAgICAgIHJlZ2V4OiB7CisJICAgICAgICAg
ICAgICAgIHBhdHRlcm46IGJvZHkudmFsdWUsCisJICAgICAgICAgICAgICAgIGZsYWdzOiBmbGFn
cy52YWx1ZQorCSAgICAgICAgICAgIH0sCisJICAgICAgICAgICAgbGluZU51bWJlcjogdGhpcy5s
aW5lTnVtYmVyLAorCSAgICAgICAgICAgIGxpbmVTdGFydDogdGhpcy5saW5lU3RhcnQsCisJICAg
ICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorCSAgICAgICAgICAgIGVuZDogdGhpcy5pbmRleAorCSAg
ICAgICAgfTsKKwkgICAgfTsKKwkgICAgOworCSAgICBTY2FubmVyLnByb3RvdHlwZS5sZXggPSBm
dW5jdGlvbiAoKSB7CisJICAgICAgICBpZiAodGhpcy5lb2YoKSkgeworCSAgICAgICAgICAgIHJl
dHVybiB7CisJICAgICAgICAgICAgICAgIHR5cGU6IHRva2VuXzEuVG9rZW4uRU9GLAorCSAgICAg
ICAgICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsCisJICAgICAgICAgICAgICAg
IGxpbmVTdGFydDogdGhpcy5saW5lU3RhcnQsCisJICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlz
LmluZGV4LAorCSAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuaW5kZXgKKwkgICAgICAgICAgICB9
OworCSAgICAgICAgfQorCSAgICAgICAgdmFyIGNwID0gdGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0
aGlzLmluZGV4KTsKKwkgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNJZGVudGlm
aWVyU3RhcnQoY3ApKSB7CisJICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbklkZW50aWZpZXIo
KTsKKwkgICAgICAgIH0KKwkgICAgICAgIC8vIFZlcnkgY29tbW9uOiAoIGFuZCApIGFuZCA7CisJ
ICAgICAgICBpZiAoY3AgPT09IDB4MjggfHwgY3AgPT09IDB4MjkgfHwgY3AgPT09IDB4M0IpIHsK
KwkgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FuUHVuY3R1YXRvcigpOworCSAgICAgICAgfQor
CSAgICAgICAgLy8gU3RyaW5nIGxpdGVyYWwgc3RhcnRzIHdpdGggc2luZ2xlIHF1b3RlIChVKzAw
MjcpIG9yIGRvdWJsZSBxdW90ZSAoVSswMDIyKS4KKwkgICAgICAgIGlmIChjcCA9PT0gMHgyNyB8
fCBjcCA9PT0gMHgyMikgeworCSAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5TdHJpbmdMaXRl
cmFsKCk7CisJICAgICAgICB9CisJICAgICAgICAvLyBEb3QgKC4pIFUrMDAyRSBjYW4gYWxzbyBz
dGFydCBhIGZsb2F0aW5nLXBvaW50IG51bWJlciwgaGVuY2UgdGhlIG5lZWQKKwkgICAgICAgIC8v
IHRvIGNoZWNrIHRoZSBuZXh0IGNoYXJhY3Rlci4KKwkgICAgICAgIGlmIChjcCA9PT0gMHgyRSkg
eworCSAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNEZWNpbWFsRGlnaXQo
dGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4ICsgMSkpKSB7CisJICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzLnNjYW5OdW1lcmljTGl0ZXJhbCgpOworCSAgICAgICAgICAgIH0KKwkg
ICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FuUHVuY3R1YXRvcigpOworCSAgICAgICAgfQorCSAg
ICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdChjcCkpIHsKKwkg
ICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FuTnVtZXJpY0xpdGVyYWwoKTsKKwkgICAgICAgIH0K
KwkgICAgICAgIC8vIFRlbXBsYXRlIGxpdGVyYWxzIHN0YXJ0IHdpdGggYCAoVSswMDYwKSBmb3Ig
dGVtcGxhdGUgaGVhZAorCSAgICAgICAgLy8gb3IgfSAoVSswMDdEKSBmb3IgdGVtcGxhdGUgbWlk
ZGxlIG9yIHRlbXBsYXRlIHRhaWwuCisJICAgICAgICBpZiAoY3AgPT09IDB4NjAgfHwgKGNwID09
PSAweDdEICYmIHRoaXMuY3VybHlTdGFja1t0aGlzLmN1cmx5U3RhY2subGVuZ3RoIC0gMV0gPT09
ICckeycpKSB7CisJICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhblRlbXBsYXRlKCk7CisJICAg
ICAgICB9CisJICAgICAgICAvLyBQb3NzaWJsZSBpZGVudGlmaWVyIHN0YXJ0IGluIGEgc3Vycm9n
YXRlIHBhaXIuCisJICAgICAgICBpZiAoY3AgPj0gMHhEODAwICYmIGNwIDwgMHhERkZGKSB7CisJ
ICAgICAgICAgICAgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJTdGFydCh0
aGlzLmNvZGVQb2ludEF0KHRoaXMuaW5kZXgpKSkgeworCSAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5zY2FuSWRlbnRpZmllcigpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAg
ICAgIHJldHVybiB0aGlzLnNjYW5QdW5jdHVhdG9yKCk7CisJICAgIH07CisJICAgIDsKKwkgICAg
cmV0dXJuIFNjYW5uZXI7CisJfSgpKTsKKwlleHBvcnRzLlNjYW5uZXIgPSBTY2FubmVyOworCisK
Ky8qKiovIH0sCisvKiA5ICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHsKKwor
CSJ1c2Ugc3RyaWN0IjsKKwkvLyBTZWUgYWxzbyB0b29scy9nZW5lcmF0ZS11bmljb2RlLXJlZ2V4
LmpzLgorCXZhciBSZWdleCA9IHsKKwkgICAgLy8gVW5pY29kZSB2OC4wLjAgTm9uQXNjaWlJZGVu
dGlmaWVyU3RhcnQ6CisJICAgIE5vbkFzY2lpSWRlbnRpZmllclN0YXJ0OiAvW1x4QUFceEI1XHhC
QVx4QzAtXHhENlx4RDgtXHhGNlx4RjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1MDJFMC1cdTAyRTRc
dTAyRUNcdTAyRUVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XHUwMzdBLVx1MDM3RFx1MDM3Rlx1
MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNGNVx1MDNGNy1c
dTA0ODFcdTA0OEEtXHUwNTJGXHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1RDAt
XHUwNUVBXHUwNUYwLVx1MDVGMlx1MDYyMC1cdTA2NEFcdTA2NkVcdTA2NkZcdTA2NzEtXHUwNkQz
XHUwNkQ1XHUwNkU1XHUwNkU2XHUwNkVFXHUwNkVGXHUwNkZBLVx1MDZGQ1x1MDZGRlx1MDcxMFx1
MDcxMi1cdTA3MkZcdTA3NEQtXHUwN0E1XHUwN0IxXHUwN0NBLVx1MDdFQVx1MDdGNFx1MDdGNVx1
MDdGQVx1MDgwMC1cdTA4MTVcdTA4MUFcdTA4MjRcdTA4MjhcdTA4NDAtXHUwODU4XHUwOEEwLVx1
MDhCNFx1MDkwNC1cdTA5MzlcdTA5M0RcdTA5NTBcdTA5NTgtXHUwOTYxXHUwOTcxLVx1MDk4MFx1
MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFBLVx1MDlCMFx1MDlCMlx1
MDlCNi1cdTA5QjlcdTA5QkRcdTA5Q0VcdTA5RENcdTA5RERcdTA5REYtXHUwOUUxXHUwOUYwXHUw
OUYxXHUwQTA1LVx1MEEwQVx1MEEwRlx1MEExMFx1MEExMy1cdTBBMjhcdTBBMkEtXHUwQTMwXHUw
QTMyXHUwQTMzXHUwQTM1XHUwQTM2XHUwQTM4XHUwQTM5XHUwQTU5LVx1MEE1Q1x1MEE1RVx1MEE3
Mi1cdTBBNzRcdTBBODUtXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThcdTBBQUEtXHUw
QUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCRFx1MEFEMFx1MEFFMFx1MEFFMVx1MEFG
OVx1MEIwNS1cdTBCMENcdTBCMEZcdTBCMTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1MEIz
Mlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0RcdTBCNUNcdTBCNURcdTBCNUYtXHUwQjYxXHUwQjcx
XHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XHUwQjlB
XHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjlc
dTBCRDBcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzM5
XHUwQzNEXHUwQzU4LVx1MEM1QVx1MEM2MFx1MEM2MVx1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkw
XHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNcdTBDQjUtXHUwQ0I5XHUwQ0JEXHUwQ0RFXHUwQ0Uw
XHUwQ0UxXHUwQ0YxXHUwQ0YyXHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBcdTBEMTItXHUwRDNB
XHUwRDNEXHUwRDRFXHUwRDVGLVx1MEQ2MVx1MEQ3QS1cdTBEN0ZcdTBEODUtXHUwRDk2XHUwRDlB
LVx1MERCMVx1MERCMy1cdTBEQkJcdTBEQkRcdTBEQzAtXHUwREM2XHUwRTAxLVx1MEUzMFx1MEUz
Mlx1MEUzM1x1MEU0MC1cdTBFNDZcdTBFODFcdTBFODJcdTBFODRcdTBFODdcdTBFODhcdTBFOEFc
dTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVBMS1cdTBFQTNcdTBFQTVcdTBFQTdc
dTBFQUFcdTBFQUJcdTBFQUQtXHUwRUIwXHUwRUIyXHUwRUIzXHUwRUJEXHUwRUMwLVx1MEVDNFx1
MEVDNlx1MEVEQy1cdTBFREZcdTBGMDBcdTBGNDAtXHUwRjQ3XHUwRjQ5LVx1MEY2Q1x1MEY4OC1c
dTBGOENcdTEwMDAtXHUxMDJBXHUxMDNGXHUxMDUwLVx1MTA1NVx1MTA1QS1cdTEwNURcdTEwNjFc
dTEwNjVcdTEwNjZcdTEwNkUtXHUxMDcwXHUxMDc1LVx1MTA4MVx1MTA4RVx1MTBBMC1cdTEwQzVc
dTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0OFx1MTI0QS1cdTEyNERcdTEyNTAt
XHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkw
LVx1MTJCMFx1MTJCMi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJD
OC1cdTEyRDZcdTEyRDgtXHUxMzEwXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzODAtXHUx
MzhGXHUxM0EwLVx1MTNGNVx1MTNGOC1cdTEzRkRcdTE0MDEtXHUxNjZDXHUxNjZGLVx1MTY3Rlx1
MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNkVFLVx1MTZGOFx1MTcwMC1cdTE3MENcdTE3MEUt
XHUxNzExXHUxNzIwLVx1MTczMVx1MTc0MC1cdTE3NTFcdTE3NjAtXHUxNzZDXHUxNzZFLVx1MTc3
MFx1MTc4MC1cdTE3QjNcdTE3RDdcdTE3RENcdTE4MjAtXHUxODc3XHUxODgwLVx1MThBOFx1MThB
QVx1MThCMC1cdTE4RjVcdTE5MDAtXHUxOTFFXHUxOTUwLVx1MTk2RFx1MTk3MC1cdTE5NzRcdTE5
ODAtXHUxOUFCXHUxOUIwLVx1MTlDOVx1MUEwMC1cdTFBMTZcdTFBMjAtXHUxQTU0XHUxQUE3XHUx
QjA1LVx1MUIzM1x1MUI0NS1cdTFCNEJcdTFCODMtXHUxQkEwXHUxQkFFXHUxQkFGXHUxQkJBLVx1
MUJFNVx1MUMwMC1cdTFDMjNcdTFDNEQtXHUxQzRGXHUxQzVBLVx1MUM3RFx1MUNFOS1cdTFDRUNc
dTFDRUUtXHUxQ0YxXHUxQ0Y1XHUxQ0Y2XHUxRDAwLVx1MURCRlx1MUUwMC1cdTFGMTVcdTFGMTgt
XHUxRjFEXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVC
XHUxRjVEXHUxRjVGLVx1MUY3RFx1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMy
LVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFG
RUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjA3MVx1MjA3Rlx1MjA5MC1cdTIwOUNcdTIx
MDJcdTIxMDdcdTIxMEEtXHUyMTEzXHUyMTE1XHUyMTE4LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEy
OFx1MjEyQS1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE2MC1cdTIx
ODhcdTJDMDAtXHUyQzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0VFXHUy
Q0YyXHUyQ0YzXHUyRDAwLVx1MkQyNVx1MkQyN1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJE
ODAtXHUyRDk2XHUyREEwLVx1MkRBNlx1MkRBOC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1
MkRCRVx1MkRDMC1cdTJEQzZcdTJEQzgtXHUyRENFXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVc
dTMwMDUtXHUzMDA3XHUzMDIxLVx1MzAyOVx1MzAzMS1cdTMwMzVcdTMwMzgtXHUzMDNDXHUzMDQx
LVx1MzA5Nlx1MzA5Qi1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMx
MkRcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0
RTAwLVx1OUZENVx1QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1c
dUE2MUZcdUE2MkFcdUE2MkJcdUE2NDAtXHVBNjZFXHVBNjdGLVx1QTY5RFx1QTZBMC1cdUE2RUZc
dUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OFx1QTc4Qi1cdUE3QURcdUE3QjAtXHVBN0I3XHVBN0Y3
LVx1QTgwMVx1QTgwMy1cdUE4MDVcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4
NzNcdUE4ODItXHVBOEIzXHVBOEYyLVx1QThGN1x1QThGQlx1QThGRFx1QTkwQS1cdUE5MjVcdUE5
MzAtXHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0ZcdUE5RTAtXHVBOUU0XHVB
OUU2LVx1QTlFRlx1QTlGQS1cdUE5RkVcdUFBMDAtXHVBQTI4XHVBQTQwLVx1QUE0Mlx1QUE0NC1c
dUFBNEJcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTdFLVx1QUFBRlx1QUFCMVx1QUFCNVx1QUFCNlx1
QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1c
dUFBRjRcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2
XHVBQjI4LVx1QUIyRVx1QUIzMC1cdUFCNUFcdUFCNUMtXHVBQjY1XHVBQjcwLVx1QUJFMlx1QUMw
MC1cdUQ3QTNcdUQ3QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRcdUZBNzAtXHVG
QUQ5XHVGQjAwLVx1RkIwNlx1RkIxMy1cdUZCMTdcdUZCMURcdUZCMUYtXHVGQjI4XHVGQjJBLVx1
RkIzNlx1RkIzOC1cdUZCM0NcdUZCM0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVG
QkIxXHVGQkQzLVx1RkQzRFx1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1
RkU3MC1cdUZFNzRcdUZFNzYtXHVGRUZDXHVGRjIxLVx1RkYzQVx1RkY0MS1cdUZGNUFcdUZGNjYt
XHVGRkJFXHVGRkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0ZcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZE
Q118XHVEODAwW1x1REMwMC1cdURDMEJcdURDMEQtXHVEQzI2XHVEQzI4LVx1REMzQVx1REMzQ1x1
REMzRFx1REMzRi1cdURDNERcdURDNTAtXHVEQzVEXHVEQzgwLVx1RENGQVx1REQ0MC1cdURENzRc
dURFODAtXHVERTlDXHVERUEwLVx1REVEMFx1REYwMC1cdURGMUZcdURGMzAtXHVERjRBXHVERjUw
LVx1REY3NVx1REY4MC1cdURGOURcdURGQTAtXHVERkMzXHVERkM4LVx1REZDRlx1REZEMS1cdURG
RDVdfFx1RDgwMVtcdURDMDAtXHVEQzlEXHVERDAwLVx1REQyN1x1REQzMC1cdURENjNcdURFMDAt
XHVERjM2XHVERjQwLVx1REY1NVx1REY2MC1cdURGNjddfFx1RDgwMltcdURDMDAtXHVEQzA1XHVE
QzA4XHVEQzBBLVx1REMzNVx1REMzN1x1REMzOFx1REMzQ1x1REMzRi1cdURDNTVcdURDNjAtXHVE
Qzc2XHVEQzgwLVx1REM5RVx1RENFMC1cdURDRjJcdURDRjRcdURDRjVcdUREMDAtXHVERDE1XHVE
RDIwLVx1REQzOVx1REQ4MC1cdUREQjdcdUREQkVcdUREQkZcdURFMDBcdURFMTAtXHVERTEzXHVE
RTE1LVx1REUxN1x1REUxOS1cdURFMzNcdURFNjAtXHVERTdDXHVERTgwLVx1REU5Q1x1REVDMC1c
dURFQzdcdURFQzktXHVERUU0XHVERjAwLVx1REYzNVx1REY0MC1cdURGNTVcdURGNjAtXHVERjcy
XHVERjgwLVx1REY5MV18XHVEODAzW1x1REMwMC1cdURDNDhcdURDODAtXHVEQ0IyXHVEQ0MwLVx1
RENGMl18XHVEODA0W1x1REMwMy1cdURDMzdcdURDODMtXHVEQ0FGXHVEQ0QwLVx1RENFOFx1REQw
My1cdUREMjZcdURENTAtXHVERDcyXHVERDc2XHVERDgzLVx1RERCMlx1RERDMS1cdUREQzRcdURE
REFcdURERENcdURFMDAtXHVERTExXHVERTEzLVx1REUyQlx1REU4MC1cdURFODZcdURFODhcdURF
OEEtXHVERThEXHVERThGLVx1REU5RFx1REU5Ri1cdURFQThcdURFQjAtXHVERURFXHVERjA1LVx1
REYwQ1x1REYwRlx1REYxMFx1REYxMy1cdURGMjhcdURGMkEtXHVERjMwXHVERjMyXHVERjMzXHVE
RjM1LVx1REYzOVx1REYzRFx1REY1MFx1REY1RC1cdURGNjFdfFx1RDgwNVtcdURDODAtXHVEQ0FG
XHVEQ0M0XHVEQ0M1XHVEQ0M3XHVERDgwLVx1RERBRVx1REREOC1cdUREREJcdURFMDAtXHVERTJG
XHVERTQ0XHVERTgwLVx1REVBQVx1REYwMC1cdURGMTldfFx1RDgwNltcdURDQTAtXHVEQ0RGXHVE
Q0ZGXHVERUMwLVx1REVGOF18XHVEODA4W1x1REMwMC1cdURGOTldfFx1RDgwOVtcdURDMDAtXHVE
QzZFXHVEQzgwLVx1REQ0M118W1x1RDgwQ1x1RDg0MC1cdUQ4NjhcdUQ4NkEtXHVEODZDXHVEODZG
LVx1RDg3Ml1bXHVEQzAwLVx1REZGRl18XHVEODBEW1x1REMwMC1cdURDMkVdfFx1RDgxMVtcdURD
MDAtXHVERTQ2XXxcdUQ4MUFbXHVEQzAwLVx1REUzOFx1REU0MC1cdURFNUVcdURFRDAtXHVERUVE
XHVERjAwLVx1REYyRlx1REY0MC1cdURGNDNcdURGNjMtXHVERjc3XHVERjdELVx1REY4Rl18XHVE
ODFCW1x1REYwMC1cdURGNDRcdURGNTBcdURGOTMtXHVERjlGXXxcdUQ4MkNbXHVEQzAwXHVEQzAx
XXxcdUQ4MkZbXHVEQzAwLVx1REM2QVx1REM3MC1cdURDN0NcdURDODAtXHVEQzg4XHVEQzkwLVx1
REM5OV18XHVEODM1W1x1REMwMC1cdURDNTRcdURDNTYtXHVEQzlDXHVEQzlFXHVEQzlGXHVEQ0Ey
XHVEQ0E1XHVEQ0E2XHVEQ0E5LVx1RENBQ1x1RENBRS1cdURDQjlcdURDQkJcdURDQkQtXHVEQ0Mz
XHVEQ0M1LVx1REQwNVx1REQwNy1cdUREMEFcdUREMEQtXHVERDE0XHVERDE2LVx1REQxQ1x1REQx
RS1cdUREMzlcdUREM0ItXHVERDNFXHVERDQwLVx1REQ0NFx1REQ0Nlx1REQ0QS1cdURENTBcdURE
NTItXHVERUE1XHVERUE4LVx1REVDMFx1REVDMi1cdURFREFcdURFREMtXHVERUZBXHVERUZDLVx1
REYxNFx1REYxNi1cdURGMzRcdURGMzYtXHVERjRFXHVERjUwLVx1REY2RVx1REY3MC1cdURGODhc
dURGOEEtXHVERkE4XHVERkFBLVx1REZDMlx1REZDNC1cdURGQ0JdfFx1RDgzQVtcdURDMDAtXHVE
Q0M0XXxcdUQ4M0JbXHVERTAwLVx1REUwM1x1REUwNS1cdURFMUZcdURFMjFcdURFMjJcdURFMjRc
dURFMjdcdURFMjktXHVERTMyXHVERTM0LVx1REUzN1x1REUzOVx1REUzQlx1REU0Mlx1REU0N1x1
REU0OVx1REU0Qlx1REU0RC1cdURFNEZcdURFNTFcdURFNTJcdURFNTRcdURFNTdcdURFNTlcdURF
NUJcdURFNURcdURFNUZcdURFNjFcdURFNjJcdURFNjRcdURFNjctXHVERTZBXHVERTZDLVx1REU3
Mlx1REU3NC1cdURFNzdcdURFNzktXHVERTdDXHVERTdFXHVERTgwLVx1REU4OVx1REU4Qi1cdURF
OUJcdURFQTEtXHVERUEzXHVERUE1LVx1REVBOVx1REVBQi1cdURFQkJdfFx1RDg2OVtcdURDMDAt
XHVERUQ2XHVERjAwLVx1REZGRl18XHVEODZEW1x1REMwMC1cdURGMzRcdURGNDAtXHVERkZGXXxc
dUQ4NkVbXHVEQzAwLVx1REMxRFx1REMyMC1cdURGRkZdfFx1RDg3M1tcdURDMDAtXHVERUExXXxc
dUQ4N0VbXHVEQzAwLVx1REUxRF0vLAorCSAgICAvLyBVbmljb2RlIHY4LjAuMCBOb25Bc2NpaUlk
ZW50aWZpZXJQYXJ0OgorCSAgICBOb25Bc2NpaUlkZW50aWZpZXJQYXJ0OiAvW1x4QUFceEI1XHhC
N1x4QkFceEMwLVx4RDZceEQ4LVx4RjZceEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUw
MkU0XHUwMkVDXHUwMkVFXHUwMzAwLVx1MDM3NFx1MDM3Nlx1MDM3N1x1MDM3QS1cdTAzN0RcdTAz
N0ZcdTAzODYtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVcdTAzRjctXHUw
NDgxXHUwNDgzLVx1MDQ4N1x1MDQ4QS1cdTA1MkZcdTA1MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1
MDU4N1x1MDU5MS1cdTA1QkRcdTA1QkZcdTA1QzFcdTA1QzJcdTA1QzRcdTA1QzVcdTA1QzdcdTA1
RDAtXHUwNUVBXHUwNUYwLVx1MDVGMlx1MDYxMC1cdTA2MUFcdTA2MjAtXHUwNjY5XHUwNjZFLVx1
MDZEM1x1MDZENS1cdTA2RENcdTA2REYtXHUwNkU4XHUwNkVBLVx1MDZGQ1x1MDZGRlx1MDcxMC1c
dTA3NEFcdTA3NEQtXHUwN0IxXHUwN0MwLVx1MDdGNVx1MDdGQVx1MDgwMC1cdTA4MkRcdTA4NDAt
XHUwODVCXHUwOEEwLVx1MDhCNFx1MDhFMy1cdTA5NjNcdTA5NjYtXHUwOTZGXHUwOTcxLVx1MDk4
M1x1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFBLVx1MDlCMFx1MDlC
Mlx1MDlCNi1cdTA5QjlcdTA5QkMtXHUwOUM0XHUwOUM3XHUwOUM4XHUwOUNCLVx1MDlDRVx1MDlE
N1x1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTNcdTA5RTYtXHUwOUYxXHUwQTAxLVx1MEEwM1x1MEEw
NS1cdTBBMEFcdTBBMEZcdTBBMTBcdTBBMTMtXHUwQTI4XHUwQTJBLVx1MEEzMFx1MEEzMlx1MEEz
M1x1MEEzNVx1MEEzNlx1MEEzOFx1MEEzOVx1MEEzQ1x1MEEzRS1cdTBBNDJcdTBBNDdcdTBBNDhc
dTBBNEItXHUwQTREXHUwQTUxXHUwQTU5LVx1MEE1Q1x1MEE1RVx1MEE2Ni1cdTBBNzVcdTBBODEt
XHUwQTgzXHUwQTg1LVx1MEE4RFx1MEE4Ri1cdTBBOTFcdTBBOTMtXHUwQUE4XHUwQUFBLVx1MEFC
MFx1MEFCMlx1MEFCM1x1MEFCNS1cdTBBQjlcdTBBQkMtXHUwQUM1XHUwQUM3LVx1MEFDOVx1MEFD
Qi1cdTBBQ0RcdTBBRDBcdTBBRTAtXHUwQUUzXHUwQUU2LVx1MEFFRlx1MEFGOVx1MEIwMS1cdTBC
MDNcdTBCMDUtXHUwQjBDXHUwQjBGXHUwQjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1cdTBCMzBcdTBC
MzJcdTBCMzNcdTBCMzUtXHUwQjM5XHUwQjNDLVx1MEI0NFx1MEI0N1x1MEI0OFx1MEI0Qi1cdTBC
NERcdTBCNTZcdTBCNTdcdTBCNUNcdTBCNURcdTBCNUYtXHUwQjYzXHUwQjY2LVx1MEI2Rlx1MEI3
MVx1MEI4Mlx1MEI4M1x1MEI4NS1cdTBCOEFcdTBCOEUtXHUwQjkwXHUwQjkyLVx1MEI5NVx1MEI5
OVx1MEI5QVx1MEI5Q1x1MEI5RVx1MEI5Rlx1MEJBM1x1MEJBNFx1MEJBOC1cdTBCQUFcdTBCQUUt
XHUwQkI5XHUwQkJFLVx1MEJDMlx1MEJDNi1cdTBCQzhcdTBCQ0EtXHUwQkNEXHUwQkQwXHUwQkQ3
XHUwQkU2LVx1MEJFRlx1MEMwMC1cdTBDMDNcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMx
Mi1cdTBDMjhcdTBDMkEtXHUwQzM5XHUwQzNELVx1MEM0NFx1MEM0Ni1cdTBDNDhcdTBDNEEtXHUw
QzREXHUwQzU1XHUwQzU2XHUwQzU4LVx1MEM1QVx1MEM2MC1cdTBDNjNcdTBDNjYtXHUwQzZGXHUw
QzgxLVx1MEM4M1x1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1c
dTBDQjNcdTBDQjUtXHUwQ0I5XHUwQ0JDLVx1MENDNFx1MENDNi1cdTBDQzhcdTBDQ0EtXHUwQ0NE
XHUwQ0Q1XHUwQ0Q2XHUwQ0RFXHUwQ0UwLVx1MENFM1x1MENFNi1cdTBDRUZcdTBDRjFcdTBDRjJc
dTBEMDEtXHUwRDAzXHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBcdTBEMTItXHUwRDNBXHUwRDNE
LVx1MEQ0NFx1MEQ0Ni1cdTBENDhcdTBENEEtXHUwRDRFXHUwRDU3XHUwRDVGLVx1MEQ2M1x1MEQ2
Ni1cdTBENkZcdTBEN0EtXHUwRDdGXHUwRDgyXHUwRDgzXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBE
QjFcdTBEQjMtXHUwREJCXHUwREJEXHUwREMwLVx1MERDNlx1MERDQVx1MERDRi1cdTBERDRcdTBE
RDZcdTBERDgtXHUwRERGXHUwREU2LVx1MERFRlx1MERGMlx1MERGM1x1MEUwMS1cdTBFM0FcdTBF
NDAtXHUwRTRFXHUwRTUwLVx1MEU1OVx1MEU4MVx1MEU4Mlx1MEU4NFx1MEU4N1x1MEU4OFx1MEU4
QVx1MEU4RFx1MEU5NC1cdTBFOTdcdTBFOTktXHUwRTlGXHUwRUExLVx1MEVBM1x1MEVBNVx1MEVB
N1x1MEVBQVx1MEVBQlx1MEVBRC1cdTBFQjlcdTBFQkItXHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVD
Nlx1MEVDOC1cdTBFQ0RcdTBFRDAtXHUwRUQ5XHUwRURDLVx1MEVERlx1MEYwMFx1MEYxOFx1MEYx
OVx1MEYyMC1cdTBGMjlcdTBGMzVcdTBGMzdcdTBGMzlcdTBGM0UtXHUwRjQ3XHUwRjQ5LVx1MEY2
Q1x1MEY3MS1cdTBGODRcdTBGODYtXHUwRjk3XHUwRjk5LVx1MEZCQ1x1MEZDNlx1MTAwMC1cdTEw
NDlcdTEwNTAtXHUxMDlEXHUxMEEwLVx1MTBDNVx1MTBDN1x1MTBDRFx1MTBEMC1cdTEwRkFcdTEw
RkMtXHUxMjQ4XHUxMjRBLVx1MTI0RFx1MTI1MC1cdTEyNTZcdTEyNThcdTEyNUEtXHUxMjVEXHUx
MjYwLVx1MTI4OFx1MTI4QS1cdTEyOERcdTEyOTAtXHUxMkIwXHUxMkIyLVx1MTJCNVx1MTJCOC1c
dTEyQkVcdTEyQzBcdTEyQzItXHUxMkM1XHUxMkM4LVx1MTJENlx1MTJEOC1cdTEzMTBcdTEzMTIt
XHUxMzE1XHUxMzE4LVx1MTM1QVx1MTM1RC1cdTEzNUZcdTEzNjktXHUxMzcxXHUxMzgwLVx1MTM4
Rlx1MTNBMC1cdTEzRjVcdTEzRjgtXHUxM0ZEXHUxNDAxLVx1MTY2Q1x1MTY2Ri1cdTE2N0ZcdTE2
ODEtXHUxNjlBXHUxNkEwLVx1MTZFQVx1MTZFRS1cdTE2RjhcdTE3MDAtXHUxNzBDXHUxNzBFLVx1
MTcxNFx1MTcyMC1cdTE3MzRcdTE3NDAtXHUxNzUzXHUxNzYwLVx1MTc2Q1x1MTc2RS1cdTE3NzBc
dTE3NzJcdTE3NzNcdTE3ODAtXHUxN0QzXHUxN0Q3XHUxN0RDXHUxN0REXHUxN0UwLVx1MTdFOVx1
MTgwQi1cdTE4MERcdTE4MTAtXHUxODE5XHUxODIwLVx1MTg3N1x1MTg4MC1cdTE4QUFcdTE4QjAt
XHUxOEY1XHUxOTAwLVx1MTkxRVx1MTkyMC1cdTE5MkJcdTE5MzAtXHUxOTNCXHUxOTQ2LVx1MTk2
RFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOUFCXHUxOUIwLVx1MTlDOVx1MTlEMC1cdTE5REFcdTFB
MDAtXHUxQTFCXHUxQTIwLVx1MUE1RVx1MUE2MC1cdTFBN0NcdTFBN0YtXHUxQTg5XHUxQTkwLVx1
MUE5OVx1MUFBN1x1MUFCMC1cdTFBQkRcdTFCMDAtXHUxQjRCXHUxQjUwLVx1MUI1OVx1MUI2Qi1c
dTFCNzNcdTFCODAtXHUxQkYzXHUxQzAwLVx1MUMzN1x1MUM0MC1cdTFDNDlcdTFDNEQtXHUxQzdE
XHUxQ0QwLVx1MUNEMlx1MUNENC1cdTFDRjZcdTFDRjhcdTFDRjlcdTFEMDAtXHUxREY1XHUxREZD
LVx1MUYxNVx1MUYxOC1cdTFGMURcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFG
NTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFG
QkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNcdTFGRDYtXHUx
RkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDBDXHUyMDBEXHUy
MDNGXHUyMDQwXHUyMDU0XHUyMDcxXHUyMDdGXHUyMDkwLVx1MjA5Q1x1MjBEMC1cdTIwRENcdTIw
RTFcdTIwRTUtXHUyMEYwXHUyMTAyXHUyMTA3XHUyMTBBLVx1MjExM1x1MjExNVx1MjExOC1cdTIx
MURcdTIxMjRcdTIxMjZcdTIxMjhcdTIxMkEtXHUyMTM5XHUyMTNDLVx1MjEzRlx1MjE0NS1cdTIx
NDlcdTIxNEVcdTIxNjAtXHUyMTg4XHUyQzAwLVx1MkMyRVx1MkMzMC1cdTJDNUVcdTJDNjAtXHUy
Q0U0XHUyQ0VCLVx1MkNGM1x1MkQwMC1cdTJEMjVcdTJEMjdcdTJEMkRcdTJEMzAtXHUyRDY3XHUy
RDZGXHUyRDdGLVx1MkQ5Nlx1MkRBMC1cdTJEQTZcdTJEQTgtXHUyREFFXHUyREIwLVx1MkRCNlx1
MkRCOC1cdTJEQkVcdTJEQzAtXHUyREM2XHUyREM4LVx1MkRDRVx1MkREMC1cdTJERDZcdTJERDgt
XHUyRERFXHUyREUwLVx1MkRGRlx1MzAwNS1cdTMwMDdcdTMwMjEtXHUzMDJGXHUzMDMxLVx1MzAz
NVx1MzAzOC1cdTMwM0NcdTMwNDEtXHUzMDk2XHUzMDk5LVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMw
RkMtXHUzMEZGXHUzMTA1LVx1MzEyRFx1MzEzMS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1
MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5RkQ1XHVBMDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRc
dUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYyQlx1QTY0MC1cdUE2NkZcdUE2NzQtXHVBNjdEXHVBNjdG
LVx1QTZGMVx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XHVBNzhCLVx1QTdBRFx1QTdCMC1cdUE3
QjdcdUE3RjctXHVBODI3XHVBODQwLVx1QTg3M1x1QTg4MC1cdUE4QzRcdUE4RDAtXHVBOEQ5XHVB
OEUwLVx1QThGN1x1QThGQlx1QThGRFx1QTkwMC1cdUE5MkRcdUE5MzAtXHVBOTUzXHVBOTYwLVx1
QTk3Q1x1QTk4MC1cdUE5QzBcdUE5Q0YtXHVBOUQ5XHVBOUUwLVx1QTlGRVx1QUEwMC1cdUFBMzZc
dUFBNDAtXHVBQTREXHVBQTUwLVx1QUE1OVx1QUE2MC1cdUFBNzZcdUFBN0EtXHVBQUMyXHVBQURC
LVx1QUFERFx1QUFFMC1cdUFBRUZcdUFBRjItXHVBQUY2XHVBQjAxLVx1QUIwNlx1QUIwOS1cdUFC
MEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIyOC1cdUFCMkVcdUFCMzAtXHVBQjVBXHVB
QjVDLVx1QUI2NVx1QUI3MC1cdUFCRUFcdUFCRUNcdUFCRURcdUFCRjAtXHVBQkY5XHVBQzAwLVx1
RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkE2RFx1RkE3MC1cdUZBRDlc
dUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkIxRC1cdUZCMjhcdUZCMkEtXHVGQjM2XHVGQjM4
LVx1RkIzQ1x1RkIzRVx1RkI0MFx1RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMt
XHVGRDNEXHVGRDUwLVx1RkQ4Rlx1RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTAwLVx1RkUw
Rlx1RkUyMC1cdUZFMkZcdUZFMzNcdUZFMzRcdUZFNEQtXHVGRTRGXHVGRTcwLVx1RkU3NFx1RkU3
Ni1cdUZFRkNcdUZGMTAtXHVGRjE5XHVGRjIxLVx1RkYzQVx1RkYzRlx1RkY0MS1cdUZGNUFcdUZG
NjYtXHVGRkJFXHVGRkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0ZcdUZGRDItXHVGRkQ3XHVGRkRBLVx1
RkZEQ118XHVEODAwW1x1REMwMC1cdURDMEJcdURDMEQtXHVEQzI2XHVEQzI4LVx1REMzQVx1REMz
Q1x1REMzRFx1REMzRi1cdURDNERcdURDNTAtXHVEQzVEXHVEQzgwLVx1RENGQVx1REQ0MC1cdURE
NzRcdURERkRcdURFODAtXHVERTlDXHVERUEwLVx1REVEMFx1REVFMFx1REYwMC1cdURGMUZcdURG
MzAtXHVERjRBXHVERjUwLVx1REY3QVx1REY4MC1cdURGOURcdURGQTAtXHVERkMzXHVERkM4LVx1
REZDRlx1REZEMS1cdURGRDVdfFx1RDgwMVtcdURDMDAtXHVEQzlEXHVEQ0EwLVx1RENBOVx1REQw
MC1cdUREMjdcdUREMzAtXHVERDYzXHVERTAwLVx1REYzNlx1REY0MC1cdURGNTVcdURGNjAtXHVE
RjY3XXxcdUQ4MDJbXHVEQzAwLVx1REMwNVx1REMwOFx1REMwQS1cdURDMzVcdURDMzdcdURDMzhc
dURDM0NcdURDM0YtXHVEQzU1XHVEQzYwLVx1REM3Nlx1REM4MC1cdURDOUVcdURDRTAtXHVEQ0Yy
XHVEQ0Y0XHVEQ0Y1XHVERDAwLVx1REQxNVx1REQyMC1cdUREMzlcdUREODAtXHVEREI3XHVEREJF
XHVEREJGXHVERTAwLVx1REUwM1x1REUwNVx1REUwNlx1REUwQy1cdURFMTNcdURFMTUtXHVERTE3
XHVERTE5LVx1REUzM1x1REUzOC1cdURFM0FcdURFM0ZcdURFNjAtXHVERTdDXHVERTgwLVx1REU5
Q1x1REVDMC1cdURFQzdcdURFQzktXHVERUU2XHVERjAwLVx1REYzNVx1REY0MC1cdURGNTVcdURG
NjAtXHVERjcyXHVERjgwLVx1REY5MV18XHVEODAzW1x1REMwMC1cdURDNDhcdURDODAtXHVEQ0Iy
XHVEQ0MwLVx1RENGMl18XHVEODA0W1x1REMwMC1cdURDNDZcdURDNjYtXHVEQzZGXHVEQzdGLVx1
RENCQVx1RENEMC1cdURDRThcdURDRjAtXHVEQ0Y5XHVERDAwLVx1REQzNFx1REQzNi1cdUREM0Zc
dURENTAtXHVERDczXHVERDc2XHVERDgwLVx1RERDNFx1RERDQS1cdUREQ0NcdURERDAtXHVERERB
XHVERERDXHVERTAwLVx1REUxMVx1REUxMy1cdURFMzdcdURFODAtXHVERTg2XHVERTg4XHVERThB
LVx1REU4RFx1REU4Ri1cdURFOURcdURFOUYtXHVERUE4XHVERUIwLVx1REVFQVx1REVGMC1cdURF
RjlcdURGMDAtXHVERjAzXHVERjA1LVx1REYwQ1x1REYwRlx1REYxMFx1REYxMy1cdURGMjhcdURG
MkEtXHVERjMwXHVERjMyXHVERjMzXHVERjM1LVx1REYzOVx1REYzQy1cdURGNDRcdURGNDdcdURG
NDhcdURGNEItXHVERjREXHVERjUwXHVERjU3XHVERjVELVx1REY2M1x1REY2Ni1cdURGNkNcdURG
NzAtXHVERjc0XXxcdUQ4MDVbXHVEQzgwLVx1RENDNVx1RENDN1x1RENEMC1cdURDRDlcdUREODAt
XHVEREI1XHVEREI4LVx1RERDMFx1REREOC1cdURERERcdURFMDAtXHVERTQwXHVERTQ0XHVERTUw
LVx1REU1OVx1REU4MC1cdURFQjdcdURFQzAtXHVERUM5XHVERjAwLVx1REYxOVx1REYxRC1cdURG
MkJcdURGMzAtXHVERjM5XXxcdUQ4MDZbXHVEQ0EwLVx1RENFOVx1RENGRlx1REVDMC1cdURFRjhd
fFx1RDgwOFtcdURDMDAtXHVERjk5XXxcdUQ4MDlbXHVEQzAwLVx1REM2RVx1REM4MC1cdURENDNd
fFtcdUQ4MENcdUQ4NDAtXHVEODY4XHVEODZBLVx1RDg2Q1x1RDg2Ri1cdUQ4NzJdW1x1REMwMC1c
dURGRkZdfFx1RDgwRFtcdURDMDAtXHVEQzJFXXxcdUQ4MTFbXHVEQzAwLVx1REU0Nl18XHVEODFB
W1x1REMwMC1cdURFMzhcdURFNDAtXHVERTVFXHVERTYwLVx1REU2OVx1REVEMC1cdURFRURcdURF
RjAtXHVERUY0XHVERjAwLVx1REYzNlx1REY0MC1cdURGNDNcdURGNTAtXHVERjU5XHVERjYzLVx1
REY3N1x1REY3RC1cdURGOEZdfFx1RDgxQltcdURGMDAtXHVERjQ0XHVERjUwLVx1REY3RVx1REY4
Ri1cdURGOUZdfFx1RDgyQ1tcdURDMDBcdURDMDFdfFx1RDgyRltcdURDMDAtXHVEQzZBXHVEQzcw
LVx1REM3Q1x1REM4MC1cdURDODhcdURDOTAtXHVEQzk5XHVEQzlEXHVEQzlFXXxcdUQ4MzRbXHVE
RDY1LVx1REQ2OVx1REQ2RC1cdURENzJcdUREN0ItXHVERDgyXHVERDg1LVx1REQ4Qlx1RERBQS1c
dUREQURcdURFNDItXHVERTQ0XXxcdUQ4MzVbXHVEQzAwLVx1REM1NFx1REM1Ni1cdURDOUNcdURD
OUVcdURDOUZcdURDQTJcdURDQTVcdURDQTZcdURDQTktXHVEQ0FDXHVEQ0FFLVx1RENCOVx1RENC
Qlx1RENCRC1cdURDQzNcdURDQzUtXHVERDA1XHVERDA3LVx1REQwQVx1REQwRC1cdUREMTRcdURE
MTYtXHVERDFDXHVERDFFLVx1REQzOVx1REQzQi1cdUREM0VcdURENDAtXHVERDQ0XHVERDQ2XHVE
RDRBLVx1REQ1MFx1REQ1Mi1cdURFQTVcdURFQTgtXHVERUMwXHVERUMyLVx1REVEQVx1REVEQy1c
dURFRkFcdURFRkMtXHVERjE0XHVERjE2LVx1REYzNFx1REYzNi1cdURGNEVcdURGNTAtXHVERjZF
XHVERjcwLVx1REY4OFx1REY4QS1cdURGQThcdURGQUEtXHVERkMyXHVERkM0LVx1REZDQlx1REZD
RS1cdURGRkZdfFx1RDgzNltcdURFMDAtXHVERTM2XHVERTNCLVx1REU2Q1x1REU3NVx1REU4NFx1
REU5Qi1cdURFOUZcdURFQTEtXHVERUFGXXxcdUQ4M0FbXHVEQzAwLVx1RENDNFx1RENEMC1cdURD
RDZdfFx1RDgzQltcdURFMDAtXHVERTAzXHVERTA1LVx1REUxRlx1REUyMVx1REUyMlx1REUyNFx1
REUyN1x1REUyOS1cdURFMzJcdURFMzQtXHVERTM3XHVERTM5XHVERTNCXHVERTQyXHVERTQ3XHVE
RTQ5XHVERTRCXHVERTRELVx1REU0Rlx1REU1MVx1REU1Mlx1REU1NFx1REU1N1x1REU1OVx1REU1
Qlx1REU1RFx1REU1Rlx1REU2MVx1REU2Mlx1REU2NFx1REU2Ny1cdURFNkFcdURFNkMtXHVERTcy
XHVERTc0LVx1REU3N1x1REU3OS1cdURFN0NcdURFN0VcdURFODAtXHVERTg5XHVERThCLVx1REU5
Qlx1REVBMS1cdURFQTNcdURFQTUtXHVERUE5XHVERUFCLVx1REVCQl18XHVEODY5W1x1REMwMC1c
dURFRDZcdURGMDAtXHVERkZGXXxcdUQ4NkRbXHVEQzAwLVx1REYzNFx1REY0MC1cdURGRkZdfFx1
RDg2RVtcdURDMDAtXHVEQzFEXHVEQzIwLVx1REZGRl18XHVEODczW1x1REMwMC1cdURFQTFdfFx1
RDg3RVtcdURDMDAtXHVERTFEXXxcdURCNDBbXHVERDAwLVx1RERFRl0vCisJfTsKKwlleHBvcnRz
LkNoYXJhY3RlciA9IHsKKwkgICAgZnJvbUNvZGVQb2ludDogZnVuY3Rpb24gKGNwKSB7CisJICAg
ICAgICByZXR1cm4gKGNwIDwgMHgxMDAwMCkgPyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNwKSA6CisJ
ICAgICAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgweEQ4MDAgKyAoKGNwIC0gMHgxMDAwMCkg
Pj4gMTApKSArCisJICAgICAgICAgICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEQzAwICsg
KChjcCAtIDB4MTAwMDApICYgMTAyMykpOworCSAgICB9LAorCSAgICAvLyBFQ01BLTI2MiAxMS4y
IFdoaXRlIFNwYWNlCisJICAgIGlzV2hpdGVTcGFjZTogZnVuY3Rpb24gKGNwKSB7CisJICAgICAg
ICByZXR1cm4gKGNwID09PSAweDIwKSB8fCAoY3AgPT09IDB4MDkpIHx8IChjcCA9PT0gMHgwQikg
fHwgKGNwID09PSAweDBDKSB8fCAoY3AgPT09IDB4QTApIHx8CisJICAgICAgICAgICAgKGNwID49
IDB4MTY4MCAmJiBbMHgxNjgwLCAweDIwMDAsIDB4MjAwMSwgMHgyMDAyLCAweDIwMDMsIDB4MjAw
NCwgMHgyMDA1LCAweDIwMDYsIDB4MjAwNywgMHgyMDA4LCAweDIwMDksIDB4MjAwQSwgMHgyMDJG
LCAweDIwNUYsIDB4MzAwMCwgMHhGRUZGXS5pbmRleE9mKGNwKSA+PSAwKTsKKwkgICAgfSwKKwkg
ICAgLy8gRUNNQS0yNjIgMTEuMyBMaW5lIFRlcm1pbmF0b3JzCisJICAgIGlzTGluZVRlcm1pbmF0
b3I6IGZ1bmN0aW9uIChjcCkgeworCSAgICAgICAgcmV0dXJuIChjcCA9PT0gMHgwQSkgfHwgKGNw
ID09PSAweDBEKSB8fCAoY3AgPT09IDB4MjAyOCkgfHwgKGNwID09PSAweDIwMjkpOworCSAgICB9
LAorCSAgICAvLyBFQ01BLTI2MiAxMS42IElkZW50aWZpZXIgTmFtZXMgYW5kIElkZW50aWZpZXJz
CisJICAgIGlzSWRlbnRpZmllclN0YXJ0OiBmdW5jdGlvbiAoY3ApIHsKKwkgICAgICAgIHJldHVy
biAoY3AgPT09IDB4MjQpIHx8IChjcCA9PT0gMHg1RikgfHwKKwkgICAgICAgICAgICAoY3AgPj0g
MHg0MSAmJiBjcCA8PSAweDVBKSB8fAorCSAgICAgICAgICAgIChjcCA+PSAweDYxICYmIGNwIDw9
IDB4N0EpIHx8CisJICAgICAgICAgICAgKGNwID09PSAweDVDKSB8fAorCSAgICAgICAgICAgICgo
Y3AgPj0gMHg4MCkgJiYgUmVnZXguTm9uQXNjaWlJZGVudGlmaWVyU3RhcnQudGVzdChleHBvcnRz
LkNoYXJhY3Rlci5mcm9tQ29kZVBvaW50KGNwKSkpOworCSAgICB9LAorCSAgICBpc0lkZW50aWZp
ZXJQYXJ0OiBmdW5jdGlvbiAoY3ApIHsKKwkgICAgICAgIHJldHVybiAoY3AgPT09IDB4MjQpIHx8
IChjcCA9PT0gMHg1RikgfHwKKwkgICAgICAgICAgICAoY3AgPj0gMHg0MSAmJiBjcCA8PSAweDVB
KSB8fAorCSAgICAgICAgICAgIChjcCA+PSAweDYxICYmIGNwIDw9IDB4N0EpIHx8CisJICAgICAg
ICAgICAgKGNwID49IDB4MzAgJiYgY3AgPD0gMHgzOSkgfHwKKwkgICAgICAgICAgICAoY3AgPT09
IDB4NUMpIHx8CisJICAgICAgICAgICAgKChjcCA+PSAweDgwKSAmJiBSZWdleC5Ob25Bc2NpaUlk
ZW50aWZpZXJQYXJ0LnRlc3QoZXhwb3J0cy5DaGFyYWN0ZXIuZnJvbUNvZGVQb2ludChjcCkpKTsK
KwkgICAgfSwKKwkgICAgLy8gRUNNQS0yNjIgMTEuOC4zIE51bWVyaWMgTGl0ZXJhbHMKKwkgICAg
aXNEZWNpbWFsRGlnaXQ6IGZ1bmN0aW9uIChjcCkgeworCSAgICAgICAgcmV0dXJuIChjcCA+PSAw
eDMwICYmIGNwIDw9IDB4MzkpOyAvLyAwLi45CisJICAgIH0sCisJICAgIGlzSGV4RGlnaXQ6IGZ1
bmN0aW9uIChjcCkgeworCSAgICAgICAgcmV0dXJuIChjcCA+PSAweDMwICYmIGNwIDw9IDB4Mzkp
IHx8CisJICAgICAgICAgICAgKGNwID49IDB4NDEgJiYgY3AgPD0gMHg0NikgfHwKKwkgICAgICAg
ICAgICAoY3AgPj0gMHg2MSAmJiBjcCA8PSAweDY2KTsgLy8gYS4uZgorCSAgICB9LAorCSAgICBp
c09jdGFsRGlnaXQ6IGZ1bmN0aW9uIChjcCkgeworCSAgICAgICAgcmV0dXJuIChjcCA+PSAweDMw
ICYmIGNwIDw9IDB4MzcpOyAvLyAwLi43CisJICAgIH0KKwl9OworCisKKy8qKiovIH0sCisvKiAx
MCAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9f
KSB7CisKKwkidXNlIHN0cmljdCI7CisJdmFyIHN5bnRheF8xID0gX193ZWJwYWNrX3JlcXVpcmVf
XygyKTsKKwl2YXIgQXJyYXlFeHByZXNzaW9uID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rp
b24gQXJyYXlFeHByZXNzaW9uKGVsZW1lbnRzKSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50
YXhfMS5TeW50YXguQXJyYXlFeHByZXNzaW9uOworCSAgICAgICAgdGhpcy5lbGVtZW50cyA9IGVs
ZW1lbnRzOworCSAgICB9CisJICAgIHJldHVybiBBcnJheUV4cHJlc3Npb247CisJfSgpKTsKKwll
eHBvcnRzLkFycmF5RXhwcmVzc2lvbiA9IEFycmF5RXhwcmVzc2lvbjsKKwl2YXIgQXJyYXlQYXR0
ZXJuID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gQXJyYXlQYXR0ZXJuKGVsZW1lbnRz
KSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguQXJyYXlQYXR0ZXJuOwor
CSAgICAgICAgdGhpcy5lbGVtZW50cyA9IGVsZW1lbnRzOworCSAgICB9CisJICAgIHJldHVybiBB
cnJheVBhdHRlcm47CisJfSgpKTsKKwlleHBvcnRzLkFycmF5UGF0dGVybiA9IEFycmF5UGF0dGVy
bjsKKwl2YXIgQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24gPSAoZnVuY3Rpb24gKCkgeworCSAgICBm
dW5jdGlvbiBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbihwYXJhbXMsIGJvZHksIGV4cHJlc3Npb24p
IHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5BcnJvd0Z1bmN0aW9uRXhw
cmVzc2lvbjsKKwkgICAgICAgIHRoaXMuaWQgPSBudWxsOworCSAgICAgICAgdGhpcy5wYXJhbXMg
PSBwYXJhbXM7CisJICAgICAgICB0aGlzLmJvZHkgPSBib2R5OworCSAgICAgICAgdGhpcy5nZW5l
cmF0b3IgPSBmYWxzZTsKKwkgICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247CisJ
ICAgICAgICB0aGlzLmFzeW5jID0gZmFsc2U7CisJICAgIH0KKwkgICAgcmV0dXJuIEFycm93RnVu
Y3Rpb25FeHByZXNzaW9uOworCX0oKSk7CisJZXhwb3J0cy5BcnJvd0Z1bmN0aW9uRXhwcmVzc2lv
biA9IEFycm93RnVuY3Rpb25FeHByZXNzaW9uOworCXZhciBBc3NpZ25tZW50RXhwcmVzc2lvbiA9
IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIEFzc2lnbm1lbnRFeHByZXNzaW9uKG9wZXJh
dG9yLCBsZWZ0LCByaWdodCkgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4
LkFzc2lnbm1lbnRFeHByZXNzaW9uOworCSAgICAgICAgdGhpcy5vcGVyYXRvciA9IG9wZXJhdG9y
OworCSAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDsKKwkgICAgICAgIHRoaXMucmlnaHQgPSByaWdo
dDsKKwkgICAgfQorCSAgICByZXR1cm4gQXNzaWdubWVudEV4cHJlc3Npb247CisJfSgpKTsKKwll
eHBvcnRzLkFzc2lnbm1lbnRFeHByZXNzaW9uID0gQXNzaWdubWVudEV4cHJlc3Npb247CisJdmFy
IEFzc2lnbm1lbnRQYXR0ZXJuID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gQXNzaWdu
bWVudFBhdHRlcm4obGVmdCwgcmlnaHQpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8x
LlN5bnRheC5Bc3NpZ25tZW50UGF0dGVybjsKKwkgICAgICAgIHRoaXMubGVmdCA9IGxlZnQ7CisJ
ICAgICAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7CisJICAgIH0KKwkgICAgcmV0dXJuIEFzc2lnbm1l
bnRQYXR0ZXJuOworCX0oKSk7CisJZXhwb3J0cy5Bc3NpZ25tZW50UGF0dGVybiA9IEFzc2lnbm1l
bnRQYXR0ZXJuOworCXZhciBBc3luY0Fycm93RnVuY3Rpb25FeHByZXNzaW9uID0gKGZ1bmN0aW9u
ICgpIHsKKwkgICAgZnVuY3Rpb24gQXN5bmNBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbihwYXJhbXMs
IGJvZHksIGV4cHJlc3Npb24pIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRh
eC5BcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjsKKwkgICAgICAgIHRoaXMuaWQgPSBudWxsOworCSAg
ICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7CisJICAgICAgICB0aGlzLmJvZHkgPSBib2R5Owor
CSAgICAgICAgdGhpcy5nZW5lcmF0b3IgPSBmYWxzZTsKKwkgICAgICAgIHRoaXMuZXhwcmVzc2lv
biA9IGV4cHJlc3Npb247CisJICAgICAgICB0aGlzLmFzeW5jID0gdHJ1ZTsKKwkgICAgfQorCSAg
ICByZXR1cm4gQXN5bmNBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjsKKwl9KCkpOworCWV4cG9ydHMu
QXN5bmNBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiA9IEFzeW5jQXJyb3dGdW5jdGlvbkV4cHJlc3Np
b247CisJdmFyIEFzeW5jRnVuY3Rpb25EZWNsYXJhdGlvbiA9IChmdW5jdGlvbiAoKSB7CisJICAg
IGZ1bmN0aW9uIEFzeW5jRnVuY3Rpb25EZWNsYXJhdGlvbihpZCwgcGFyYW1zLCBib2R5KSB7CisJ
ICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguRnVuY3Rpb25EZWNsYXJhdGlvbjsK
KwkgICAgICAgIHRoaXMuaWQgPSBpZDsKKwkgICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zOwor
CSAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKKwkgICAgICAgIHRoaXMuZ2VuZXJhdG9yID0gZmFs
c2U7CisJICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBmYWxzZTsKKwkgICAgICAgIHRoaXMuYXN5
bmMgPSB0cnVlOworCSAgICB9CisJICAgIHJldHVybiBBc3luY0Z1bmN0aW9uRGVjbGFyYXRpb247
CisJfSgpKTsKKwlleHBvcnRzLkFzeW5jRnVuY3Rpb25EZWNsYXJhdGlvbiA9IEFzeW5jRnVuY3Rp
b25EZWNsYXJhdGlvbjsKKwl2YXIgQXN5bmNGdW5jdGlvbkV4cHJlc3Npb24gPSAoZnVuY3Rpb24g
KCkgeworCSAgICBmdW5jdGlvbiBBc3luY0Z1bmN0aW9uRXhwcmVzc2lvbihpZCwgcGFyYW1zLCBi
b2R5KSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguRnVuY3Rpb25FeHBy
ZXNzaW9uOworCSAgICAgICAgdGhpcy5pZCA9IGlkOworCSAgICAgICAgdGhpcy5wYXJhbXMgPSBw
YXJhbXM7CisJICAgICAgICB0aGlzLmJvZHkgPSBib2R5OworCSAgICAgICAgdGhpcy5nZW5lcmF0
b3IgPSBmYWxzZTsKKwkgICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGZhbHNlOworCSAgICAgICAg
dGhpcy5hc3luYyA9IHRydWU7CisJICAgIH0KKwkgICAgcmV0dXJuIEFzeW5jRnVuY3Rpb25FeHBy
ZXNzaW9uOworCX0oKSk7CisJZXhwb3J0cy5Bc3luY0Z1bmN0aW9uRXhwcmVzc2lvbiA9IEFzeW5j
RnVuY3Rpb25FeHByZXNzaW9uOworCXZhciBBd2FpdEV4cHJlc3Npb24gPSAoZnVuY3Rpb24gKCkg
eworCSAgICBmdW5jdGlvbiBBd2FpdEV4cHJlc3Npb24oYXJndW1lbnQpIHsKKwkgICAgICAgIHRo
aXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5Bd2FpdEV4cHJlc3Npb247CisJICAgICAgICB0aGlz
LmFyZ3VtZW50ID0gYXJndW1lbnQ7CisJICAgIH0KKwkgICAgcmV0dXJuIEF3YWl0RXhwcmVzc2lv
bjsKKwl9KCkpOworCWV4cG9ydHMuQXdhaXRFeHByZXNzaW9uID0gQXdhaXRFeHByZXNzaW9uOwor
CXZhciBCaW5hcnlFeHByZXNzaW9uID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gQmlu
YXJ5RXhwcmVzc2lvbihvcGVyYXRvciwgbGVmdCwgcmlnaHQpIHsKKwkgICAgICAgIHZhciBsb2dp
Y2FsID0gKG9wZXJhdG9yID09PSAnfHwnIHx8IG9wZXJhdG9yID09PSAnJiYnKTsKKwkgICAgICAg
IHRoaXMudHlwZSA9IGxvZ2ljYWwgPyBzeW50YXhfMS5TeW50YXguTG9naWNhbEV4cHJlc3Npb24g
OiBzeW50YXhfMS5TeW50YXguQmluYXJ5RXhwcmVzc2lvbjsKKwkgICAgICAgIHRoaXMub3BlcmF0
b3IgPSBvcGVyYXRvcjsKKwkgICAgICAgIHRoaXMubGVmdCA9IGxlZnQ7CisJICAgICAgICB0aGlz
LnJpZ2h0ID0gcmlnaHQ7CisJICAgIH0KKwkgICAgcmV0dXJuIEJpbmFyeUV4cHJlc3Npb247CisJ
fSgpKTsKKwlleHBvcnRzLkJpbmFyeUV4cHJlc3Npb24gPSBCaW5hcnlFeHByZXNzaW9uOworCXZh
ciBCbG9ja1N0YXRlbWVudCA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIEJsb2NrU3Rh
dGVtZW50KGJvZHkpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5CbG9j
a1N0YXRlbWVudDsKKwkgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7CisJICAgIH0KKwkgICAgcmV0
dXJuIEJsb2NrU3RhdGVtZW50OworCX0oKSk7CisJZXhwb3J0cy5CbG9ja1N0YXRlbWVudCA9IEJs
b2NrU3RhdGVtZW50OworCXZhciBCcmVha1N0YXRlbWVudCA9IChmdW5jdGlvbiAoKSB7CisJICAg
IGZ1bmN0aW9uIEJyZWFrU3RhdGVtZW50KGxhYmVsKSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBz
eW50YXhfMS5TeW50YXguQnJlYWtTdGF0ZW1lbnQ7CisJICAgICAgICB0aGlzLmxhYmVsID0gbGFi
ZWw7CisJICAgIH0KKwkgICAgcmV0dXJuIEJyZWFrU3RhdGVtZW50OworCX0oKSk7CisJZXhwb3J0
cy5CcmVha1N0YXRlbWVudCA9IEJyZWFrU3RhdGVtZW50OworCXZhciBDYWxsRXhwcmVzc2lvbiA9
IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIENhbGxFeHByZXNzaW9uKGNhbGxlZSwgYXJn
cykgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkNhbGxFeHByZXNzaW9u
OworCSAgICAgICAgdGhpcy5jYWxsZWUgPSBjYWxsZWU7CisJICAgICAgICB0aGlzLmFyZ3VtZW50
cyA9IGFyZ3M7CisJICAgIH0KKwkgICAgcmV0dXJuIENhbGxFeHByZXNzaW9uOworCX0oKSk7CisJ
ZXhwb3J0cy5DYWxsRXhwcmVzc2lvbiA9IENhbGxFeHByZXNzaW9uOworCXZhciBDYXRjaENsYXVz
ZSA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIENhdGNoQ2xhdXNlKHBhcmFtLCBib2R5
KSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguQ2F0Y2hDbGF1c2U7CisJ
ICAgICAgICB0aGlzLnBhcmFtID0gcGFyYW07CisJICAgICAgICB0aGlzLmJvZHkgPSBib2R5Owor
CSAgICB9CisJICAgIHJldHVybiBDYXRjaENsYXVzZTsKKwl9KCkpOworCWV4cG9ydHMuQ2F0Y2hD
bGF1c2UgPSBDYXRjaENsYXVzZTsKKwl2YXIgQ2xhc3NCb2R5ID0gKGZ1bmN0aW9uICgpIHsKKwkg
ICAgZnVuY3Rpb24gQ2xhc3NCb2R5KGJvZHkpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRh
eF8xLlN5bnRheC5DbGFzc0JvZHk7CisJICAgICAgICB0aGlzLmJvZHkgPSBib2R5OworCSAgICB9
CisJICAgIHJldHVybiBDbGFzc0JvZHk7CisJfSgpKTsKKwlleHBvcnRzLkNsYXNzQm9keSA9IENs
YXNzQm9keTsKKwl2YXIgQ2xhc3NEZWNsYXJhdGlvbiA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1
bmN0aW9uIENsYXNzRGVjbGFyYXRpb24oaWQsIHN1cGVyQ2xhc3MsIGJvZHkpIHsKKwkgICAgICAg
IHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5DbGFzc0RlY2xhcmF0aW9uOworCSAgICAgICAg
dGhpcy5pZCA9IGlkOworCSAgICAgICAgdGhpcy5zdXBlckNsYXNzID0gc3VwZXJDbGFzczsKKwkg
ICAgICAgIHRoaXMuYm9keSA9IGJvZHk7CisJICAgIH0KKwkgICAgcmV0dXJuIENsYXNzRGVjbGFy
YXRpb247CisJfSgpKTsKKwlleHBvcnRzLkNsYXNzRGVjbGFyYXRpb24gPSBDbGFzc0RlY2xhcmF0
aW9uOworCXZhciBDbGFzc0V4cHJlc3Npb24gPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlv
biBDbGFzc0V4cHJlc3Npb24oaWQsIHN1cGVyQ2xhc3MsIGJvZHkpIHsKKwkgICAgICAgIHRoaXMu
dHlwZSA9IHN5bnRheF8xLlN5bnRheC5DbGFzc0V4cHJlc3Npb247CisJICAgICAgICB0aGlzLmlk
ID0gaWQ7CisJICAgICAgICB0aGlzLnN1cGVyQ2xhc3MgPSBzdXBlckNsYXNzOworCSAgICAgICAg
dGhpcy5ib2R5ID0gYm9keTsKKwkgICAgfQorCSAgICByZXR1cm4gQ2xhc3NFeHByZXNzaW9uOwor
CX0oKSk7CisJZXhwb3J0cy5DbGFzc0V4cHJlc3Npb24gPSBDbGFzc0V4cHJlc3Npb247CisJdmFy
IENvbXB1dGVkTWVtYmVyRXhwcmVzc2lvbiA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9u
IENvbXB1dGVkTWVtYmVyRXhwcmVzc2lvbihvYmplY3QsIHByb3BlcnR5KSB7CisJICAgICAgICB0
aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguTWVtYmVyRXhwcmVzc2lvbjsKKwkgICAgICAgIHRo
aXMuY29tcHV0ZWQgPSB0cnVlOworCSAgICAgICAgdGhpcy5vYmplY3QgPSBvYmplY3Q7CisJICAg
ICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7CisJICAgIH0KKwkgICAgcmV0dXJuIENvbXB1
dGVkTWVtYmVyRXhwcmVzc2lvbjsKKwl9KCkpOworCWV4cG9ydHMuQ29tcHV0ZWRNZW1iZXJFeHBy
ZXNzaW9uID0gQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uOworCXZhciBDb25kaXRpb25hbEV4cHJl
c3Npb24gPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBDb25kaXRpb25hbEV4cHJlc3Np
b24odGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBz
eW50YXhfMS5TeW50YXguQ29uZGl0aW9uYWxFeHByZXNzaW9uOworCSAgICAgICAgdGhpcy50ZXN0
ID0gdGVzdDsKKwkgICAgICAgIHRoaXMuY29uc2VxdWVudCA9IGNvbnNlcXVlbnQ7CisJICAgICAg
ICB0aGlzLmFsdGVybmF0ZSA9IGFsdGVybmF0ZTsKKwkgICAgfQorCSAgICByZXR1cm4gQ29uZGl0
aW9uYWxFeHByZXNzaW9uOworCX0oKSk7CisJZXhwb3J0cy5Db25kaXRpb25hbEV4cHJlc3Npb24g
PSBDb25kaXRpb25hbEV4cHJlc3Npb247CisJdmFyIENvbnRpbnVlU3RhdGVtZW50ID0gKGZ1bmN0
aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gQ29udGludWVTdGF0ZW1lbnQobGFiZWwpIHsKKwkgICAg
ICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5Db250aW51ZVN0YXRlbWVudDsKKwkgICAg
ICAgIHRoaXMubGFiZWwgPSBsYWJlbDsKKwkgICAgfQorCSAgICByZXR1cm4gQ29udGludWVTdGF0
ZW1lbnQ7CisJfSgpKTsKKwlleHBvcnRzLkNvbnRpbnVlU3RhdGVtZW50ID0gQ29udGludWVTdGF0
ZW1lbnQ7CisJdmFyIERlYnVnZ2VyU3RhdGVtZW50ID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVu
Y3Rpb24gRGVidWdnZXJTdGF0ZW1lbnQoKSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhf
MS5TeW50YXguRGVidWdnZXJTdGF0ZW1lbnQ7CisJICAgIH0KKwkgICAgcmV0dXJuIERlYnVnZ2Vy
U3RhdGVtZW50OworCX0oKSk7CisJZXhwb3J0cy5EZWJ1Z2dlclN0YXRlbWVudCA9IERlYnVnZ2Vy
U3RhdGVtZW50OworCXZhciBEaXJlY3RpdmUgPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlv
biBEaXJlY3RpdmUoZXhwcmVzc2lvbiwgZGlyZWN0aXZlKSB7CisJICAgICAgICB0aGlzLnR5cGUg
PSBzeW50YXhfMS5TeW50YXguRXhwcmVzc2lvblN0YXRlbWVudDsKKwkgICAgICAgIHRoaXMuZXhw
cmVzc2lvbiA9IGV4cHJlc3Npb247CisJICAgICAgICB0aGlzLmRpcmVjdGl2ZSA9IGRpcmVjdGl2
ZTsKKwkgICAgfQorCSAgICByZXR1cm4gRGlyZWN0aXZlOworCX0oKSk7CisJZXhwb3J0cy5EaXJl
Y3RpdmUgPSBEaXJlY3RpdmU7CisJdmFyIERvV2hpbGVTdGF0ZW1lbnQgPSAoZnVuY3Rpb24gKCkg
eworCSAgICBmdW5jdGlvbiBEb1doaWxlU3RhdGVtZW50KGJvZHksIHRlc3QpIHsKKwkgICAgICAg
IHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5Eb1doaWxlU3RhdGVtZW50OworCSAgICAgICAg
dGhpcy5ib2R5ID0gYm9keTsKKwkgICAgICAgIHRoaXMudGVzdCA9IHRlc3Q7CisJICAgIH0KKwkg
ICAgcmV0dXJuIERvV2hpbGVTdGF0ZW1lbnQ7CisJfSgpKTsKKwlleHBvcnRzLkRvV2hpbGVTdGF0
ZW1lbnQgPSBEb1doaWxlU3RhdGVtZW50OworCXZhciBFbXB0eVN0YXRlbWVudCA9IChmdW5jdGlv
biAoKSB7CisJICAgIGZ1bmN0aW9uIEVtcHR5U3RhdGVtZW50KCkgeworCSAgICAgICAgdGhpcy50
eXBlID0gc3ludGF4XzEuU3ludGF4LkVtcHR5U3RhdGVtZW50OworCSAgICB9CisJICAgIHJldHVy
biBFbXB0eVN0YXRlbWVudDsKKwl9KCkpOworCWV4cG9ydHMuRW1wdHlTdGF0ZW1lbnQgPSBFbXB0
eVN0YXRlbWVudDsKKwl2YXIgRXhwb3J0QWxsRGVjbGFyYXRpb24gPSAoZnVuY3Rpb24gKCkgewor
CSAgICBmdW5jdGlvbiBFeHBvcnRBbGxEZWNsYXJhdGlvbihzb3VyY2UpIHsKKwkgICAgICAgIHRo
aXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5FeHBvcnRBbGxEZWNsYXJhdGlvbjsKKwkgICAgICAg
IHRoaXMuc291cmNlID0gc291cmNlOworCSAgICB9CisJICAgIHJldHVybiBFeHBvcnRBbGxEZWNs
YXJhdGlvbjsKKwl9KCkpOworCWV4cG9ydHMuRXhwb3J0QWxsRGVjbGFyYXRpb24gPSBFeHBvcnRB
bGxEZWNsYXJhdGlvbjsKKwl2YXIgRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uID0gKGZ1bmN0aW9u
ICgpIHsKKwkgICAgZnVuY3Rpb24gRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKGRlY2xhcmF0aW9u
KSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguRXhwb3J0RGVmYXVsdERl
Y2xhcmF0aW9uOworCSAgICAgICAgdGhpcy5kZWNsYXJhdGlvbiA9IGRlY2xhcmF0aW9uOworCSAg
ICB9CisJICAgIHJldHVybiBFeHBvcnREZWZhdWx0RGVjbGFyYXRpb247CisJfSgpKTsKKwlleHBv
cnRzLkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbiA9IEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbjsK
Kwl2YXIgRXhwb3J0TmFtZWREZWNsYXJhdGlvbiA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0
aW9uIEV4cG9ydE5hbWVkRGVjbGFyYXRpb24oZGVjbGFyYXRpb24sIHNwZWNpZmllcnMsIHNvdXJj
ZSkgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkV4cG9ydE5hbWVkRGVj
bGFyYXRpb247CisJICAgICAgICB0aGlzLmRlY2xhcmF0aW9uID0gZGVjbGFyYXRpb247CisJICAg
ICAgICB0aGlzLnNwZWNpZmllcnMgPSBzcGVjaWZpZXJzOworCSAgICAgICAgdGhpcy5zb3VyY2Ug
PSBzb3VyY2U7CisJICAgIH0KKwkgICAgcmV0dXJuIEV4cG9ydE5hbWVkRGVjbGFyYXRpb247CisJ
fSgpKTsKKwlleHBvcnRzLkV4cG9ydE5hbWVkRGVjbGFyYXRpb24gPSBFeHBvcnROYW1lZERlY2xh
cmF0aW9uOworCXZhciBFeHBvcnRTcGVjaWZpZXIgPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5j
dGlvbiBFeHBvcnRTcGVjaWZpZXIobG9jYWwsIGV4cG9ydGVkKSB7CisJICAgICAgICB0aGlzLnR5
cGUgPSBzeW50YXhfMS5TeW50YXguRXhwb3J0U3BlY2lmaWVyOworCSAgICAgICAgdGhpcy5leHBv
cnRlZCA9IGV4cG9ydGVkOworCSAgICAgICAgdGhpcy5sb2NhbCA9IGxvY2FsOworCSAgICB9CisJ
ICAgIHJldHVybiBFeHBvcnRTcGVjaWZpZXI7CisJfSgpKTsKKwlleHBvcnRzLkV4cG9ydFNwZWNp
ZmllciA9IEV4cG9ydFNwZWNpZmllcjsKKwl2YXIgRXhwcmVzc2lvblN0YXRlbWVudCA9IChmdW5j
dGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIEV4cHJlc3Npb25TdGF0ZW1lbnQoZXhwcmVzc2lvbikg
eworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkV4cHJlc3Npb25TdGF0ZW1l
bnQ7CisJICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uOworCSAgICB9CisJICAg
IHJldHVybiBFeHByZXNzaW9uU3RhdGVtZW50OworCX0oKSk7CisJZXhwb3J0cy5FeHByZXNzaW9u
U3RhdGVtZW50ID0gRXhwcmVzc2lvblN0YXRlbWVudDsKKwl2YXIgRm9ySW5TdGF0ZW1lbnQgPSAo
ZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBGb3JJblN0YXRlbWVudChsZWZ0LCByaWdodCwg
Ym9keSkgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkZvckluU3RhdGVt
ZW50OworCSAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDsKKwkgICAgICAgIHRoaXMucmlnaHQgPSBy
aWdodDsKKwkgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7CisJICAgICAgICB0aGlzLmVhY2ggPSBm
YWxzZTsKKwkgICAgfQorCSAgICByZXR1cm4gRm9ySW5TdGF0ZW1lbnQ7CisJfSgpKTsKKwlleHBv
cnRzLkZvckluU3RhdGVtZW50ID0gRm9ySW5TdGF0ZW1lbnQ7CisJdmFyIEZvck9mU3RhdGVtZW50
ID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gRm9yT2ZTdGF0ZW1lbnQobGVmdCwgcmln
aHQsIGJvZHkpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5Gb3JPZlN0
YXRlbWVudDsKKwkgICAgICAgIHRoaXMubGVmdCA9IGxlZnQ7CisJICAgICAgICB0aGlzLnJpZ2h0
ID0gcmlnaHQ7CisJICAgICAgICB0aGlzLmJvZHkgPSBib2R5OworCSAgICB9CisJICAgIHJldHVy
biBGb3JPZlN0YXRlbWVudDsKKwl9KCkpOworCWV4cG9ydHMuRm9yT2ZTdGF0ZW1lbnQgPSBGb3JP
ZlN0YXRlbWVudDsKKwl2YXIgRm9yU3RhdGVtZW50ID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVu
Y3Rpb24gRm9yU3RhdGVtZW50KGluaXQsIHRlc3QsIHVwZGF0ZSwgYm9keSkgeworCSAgICAgICAg
dGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkZvclN0YXRlbWVudDsKKwkgICAgICAgIHRoaXMu
aW5pdCA9IGluaXQ7CisJICAgICAgICB0aGlzLnRlc3QgPSB0ZXN0OworCSAgICAgICAgdGhpcy51
cGRhdGUgPSB1cGRhdGU7CisJICAgICAgICB0aGlzLmJvZHkgPSBib2R5OworCSAgICB9CisJICAg
IHJldHVybiBGb3JTdGF0ZW1lbnQ7CisJfSgpKTsKKwlleHBvcnRzLkZvclN0YXRlbWVudCA9IEZv
clN0YXRlbWVudDsKKwl2YXIgRnVuY3Rpb25EZWNsYXJhdGlvbiA9IChmdW5jdGlvbiAoKSB7CisJ
ICAgIGZ1bmN0aW9uIEZ1bmN0aW9uRGVjbGFyYXRpb24oaWQsIHBhcmFtcywgYm9keSwgZ2VuZXJh
dG9yKSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguRnVuY3Rpb25EZWNs
YXJhdGlvbjsKKwkgICAgICAgIHRoaXMuaWQgPSBpZDsKKwkgICAgICAgIHRoaXMucGFyYW1zID0g
cGFyYW1zOworCSAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKKwkgICAgICAgIHRoaXMuZ2VuZXJh
dG9yID0gZ2VuZXJhdG9yOworCSAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZmFsc2U7CisJICAg
ICAgICB0aGlzLmFzeW5jID0gZmFsc2U7CisJICAgIH0KKwkgICAgcmV0dXJuIEZ1bmN0aW9uRGVj
bGFyYXRpb247CisJfSgpKTsKKwlleHBvcnRzLkZ1bmN0aW9uRGVjbGFyYXRpb24gPSBGdW5jdGlv
bkRlY2xhcmF0aW9uOworCXZhciBGdW5jdGlvbkV4cHJlc3Npb24gPSAoZnVuY3Rpb24gKCkgewor
CSAgICBmdW5jdGlvbiBGdW5jdGlvbkV4cHJlc3Npb24oaWQsIHBhcmFtcywgYm9keSwgZ2VuZXJh
dG9yKSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguRnVuY3Rpb25FeHBy
ZXNzaW9uOworCSAgICAgICAgdGhpcy5pZCA9IGlkOworCSAgICAgICAgdGhpcy5wYXJhbXMgPSBw
YXJhbXM7CisJICAgICAgICB0aGlzLmJvZHkgPSBib2R5OworCSAgICAgICAgdGhpcy5nZW5lcmF0
b3IgPSBnZW5lcmF0b3I7CisJICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBmYWxzZTsKKwkgICAg
ICAgIHRoaXMuYXN5bmMgPSBmYWxzZTsKKwkgICAgfQorCSAgICByZXR1cm4gRnVuY3Rpb25FeHBy
ZXNzaW9uOworCX0oKSk7CisJZXhwb3J0cy5GdW5jdGlvbkV4cHJlc3Npb24gPSBGdW5jdGlvbkV4
cHJlc3Npb247CisJdmFyIElkZW50aWZpZXIgPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlv
biBJZGVudGlmaWVyKG5hbWUpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRh
eC5JZGVudGlmaWVyOworCSAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKwkgICAgfQorCSAgICBy
ZXR1cm4gSWRlbnRpZmllcjsKKwl9KCkpOworCWV4cG9ydHMuSWRlbnRpZmllciA9IElkZW50aWZp
ZXI7CisJdmFyIElmU3RhdGVtZW50ID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gSWZT
dGF0ZW1lbnQodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKSB7CisJICAgICAgICB0aGlzLnR5
cGUgPSBzeW50YXhfMS5TeW50YXguSWZTdGF0ZW1lbnQ7CisJICAgICAgICB0aGlzLnRlc3QgPSB0
ZXN0OworCSAgICAgICAgdGhpcy5jb25zZXF1ZW50ID0gY29uc2VxdWVudDsKKwkgICAgICAgIHRo
aXMuYWx0ZXJuYXRlID0gYWx0ZXJuYXRlOworCSAgICB9CisJICAgIHJldHVybiBJZlN0YXRlbWVu
dDsKKwl9KCkpOworCWV4cG9ydHMuSWZTdGF0ZW1lbnQgPSBJZlN0YXRlbWVudDsKKwl2YXIgSW1w
b3J0RGVjbGFyYXRpb24gPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBJbXBvcnREZWNs
YXJhdGlvbihzcGVjaWZpZXJzLCBzb3VyY2UpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRh
eF8xLlN5bnRheC5JbXBvcnREZWNsYXJhdGlvbjsKKwkgICAgICAgIHRoaXMuc3BlY2lmaWVycyA9
IHNwZWNpZmllcnM7CisJICAgICAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTsKKwkgICAgfQorCSAg
ICByZXR1cm4gSW1wb3J0RGVjbGFyYXRpb247CisJfSgpKTsKKwlleHBvcnRzLkltcG9ydERlY2xh
cmF0aW9uID0gSW1wb3J0RGVjbGFyYXRpb247CisJdmFyIEltcG9ydERlZmF1bHRTcGVjaWZpZXIg
PSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBJbXBvcnREZWZhdWx0U3BlY2lmaWVyKGxv
Y2FsKSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguSW1wb3J0RGVmYXVs
dFNwZWNpZmllcjsKKwkgICAgICAgIHRoaXMubG9jYWwgPSBsb2NhbDsKKwkgICAgfQorCSAgICBy
ZXR1cm4gSW1wb3J0RGVmYXVsdFNwZWNpZmllcjsKKwl9KCkpOworCWV4cG9ydHMuSW1wb3J0RGVm
YXVsdFNwZWNpZmllciA9IEltcG9ydERlZmF1bHRTcGVjaWZpZXI7CisJdmFyIEltcG9ydE5hbWVz
cGFjZVNwZWNpZmllciA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIEltcG9ydE5hbWVz
cGFjZVNwZWNpZmllcihsb2NhbCkgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3lu
dGF4LkltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjsKKwkgICAgICAgIHRoaXMubG9jYWwgPSBsb2Nh
bDsKKwkgICAgfQorCSAgICByZXR1cm4gSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyOworCX0oKSk7
CisJZXhwb3J0cy5JbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIgPSBJbXBvcnROYW1lc3BhY2VTcGVj
aWZpZXI7CisJdmFyIEltcG9ydFNwZWNpZmllciA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0
aW9uIEltcG9ydFNwZWNpZmllcihsb2NhbCwgaW1wb3J0ZWQpIHsKKwkgICAgICAgIHRoaXMudHlw
ZSA9IHN5bnRheF8xLlN5bnRheC5JbXBvcnRTcGVjaWZpZXI7CisJICAgICAgICB0aGlzLmxvY2Fs
ID0gbG9jYWw7CisJICAgICAgICB0aGlzLmltcG9ydGVkID0gaW1wb3J0ZWQ7CisJICAgIH0KKwkg
ICAgcmV0dXJuIEltcG9ydFNwZWNpZmllcjsKKwl9KCkpOworCWV4cG9ydHMuSW1wb3J0U3BlY2lm
aWVyID0gSW1wb3J0U3BlY2lmaWVyOworCXZhciBMYWJlbGVkU3RhdGVtZW50ID0gKGZ1bmN0aW9u
ICgpIHsKKwkgICAgZnVuY3Rpb24gTGFiZWxlZFN0YXRlbWVudChsYWJlbCwgYm9keSkgeworCSAg
ICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkxhYmVsZWRTdGF0ZW1lbnQ7CisJICAg
ICAgICB0aGlzLmxhYmVsID0gbGFiZWw7CisJICAgICAgICB0aGlzLmJvZHkgPSBib2R5OworCSAg
ICB9CisJICAgIHJldHVybiBMYWJlbGVkU3RhdGVtZW50OworCX0oKSk7CisJZXhwb3J0cy5MYWJl
bGVkU3RhdGVtZW50ID0gTGFiZWxlZFN0YXRlbWVudDsKKwl2YXIgTGl0ZXJhbCA9IChmdW5jdGlv
biAoKSB7CisJICAgIGZ1bmN0aW9uIExpdGVyYWwodmFsdWUsIHJhdykgeworCSAgICAgICAgdGhp
cy50eXBlID0gc3ludGF4XzEuU3ludGF4LkxpdGVyYWw7CisJICAgICAgICB0aGlzLnZhbHVlID0g
dmFsdWU7CisJICAgICAgICB0aGlzLnJhdyA9IHJhdzsKKwkgICAgfQorCSAgICByZXR1cm4gTGl0
ZXJhbDsKKwl9KCkpOworCWV4cG9ydHMuTGl0ZXJhbCA9IExpdGVyYWw7CisJdmFyIE1ldGFQcm9w
ZXJ0eSA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIE1ldGFQcm9wZXJ0eShtZXRhLCBw
cm9wZXJ0eSkgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4Lk1ldGFQcm9w
ZXJ0eTsKKwkgICAgICAgIHRoaXMubWV0YSA9IG1ldGE7CisJICAgICAgICB0aGlzLnByb3BlcnR5
ID0gcHJvcGVydHk7CisJICAgIH0KKwkgICAgcmV0dXJuIE1ldGFQcm9wZXJ0eTsKKwl9KCkpOwor
CWV4cG9ydHMuTWV0YVByb3BlcnR5ID0gTWV0YVByb3BlcnR5OworCXZhciBNZXRob2REZWZpbml0
aW9uID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gTWV0aG9kRGVmaW5pdGlvbihrZXks
IGNvbXB1dGVkLCB2YWx1ZSwga2luZCwgaXNTdGF0aWMpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9
IHN5bnRheF8xLlN5bnRheC5NZXRob2REZWZpbml0aW9uOworCSAgICAgICAgdGhpcy5rZXkgPSBr
ZXk7CisJICAgICAgICB0aGlzLmNvbXB1dGVkID0gY29tcHV0ZWQ7CisJICAgICAgICB0aGlzLnZh
bHVlID0gdmFsdWU7CisJICAgICAgICB0aGlzLmtpbmQgPSBraW5kOworCSAgICAgICAgdGhpcy5z
dGF0aWMgPSBpc1N0YXRpYzsKKwkgICAgfQorCSAgICByZXR1cm4gTWV0aG9kRGVmaW5pdGlvbjsK
Kwl9KCkpOworCWV4cG9ydHMuTWV0aG9kRGVmaW5pdGlvbiA9IE1ldGhvZERlZmluaXRpb247CisJ
dmFyIE1vZHVsZSA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIE1vZHVsZShib2R5KSB7
CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguUHJvZ3JhbTsKKwkgICAgICAg
IHRoaXMuYm9keSA9IGJvZHk7CisJICAgICAgICB0aGlzLnNvdXJjZVR5cGUgPSAnbW9kdWxlJzsK
KwkgICAgfQorCSAgICByZXR1cm4gTW9kdWxlOworCX0oKSk7CisJZXhwb3J0cy5Nb2R1bGUgPSBN
b2R1bGU7CisJdmFyIE5ld0V4cHJlc3Npb24gPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlv
biBOZXdFeHByZXNzaW9uKGNhbGxlZSwgYXJncykgeworCSAgICAgICAgdGhpcy50eXBlID0gc3lu
dGF4XzEuU3ludGF4Lk5ld0V4cHJlc3Npb247CisJICAgICAgICB0aGlzLmNhbGxlZSA9IGNhbGxl
ZTsKKwkgICAgICAgIHRoaXMuYXJndW1lbnRzID0gYXJnczsKKwkgICAgfQorCSAgICByZXR1cm4g
TmV3RXhwcmVzc2lvbjsKKwl9KCkpOworCWV4cG9ydHMuTmV3RXhwcmVzc2lvbiA9IE5ld0V4cHJl
c3Npb247CisJdmFyIE9iamVjdEV4cHJlc3Npb24gPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5j
dGlvbiBPYmplY3RFeHByZXNzaW9uKHByb3BlcnRpZXMpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9
IHN5bnRheF8xLlN5bnRheC5PYmplY3RFeHByZXNzaW9uOworCSAgICAgICAgdGhpcy5wcm9wZXJ0
aWVzID0gcHJvcGVydGllczsKKwkgICAgfQorCSAgICByZXR1cm4gT2JqZWN0RXhwcmVzc2lvbjsK
Kwl9KCkpOworCWV4cG9ydHMuT2JqZWN0RXhwcmVzc2lvbiA9IE9iamVjdEV4cHJlc3Npb247CisJ
dmFyIE9iamVjdFBhdHRlcm4gPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBPYmplY3RQ
YXR0ZXJuKHByb3BlcnRpZXMpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRh
eC5PYmplY3RQYXR0ZXJuOworCSAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllczsK
KwkgICAgfQorCSAgICByZXR1cm4gT2JqZWN0UGF0dGVybjsKKwl9KCkpOworCWV4cG9ydHMuT2Jq
ZWN0UGF0dGVybiA9IE9iamVjdFBhdHRlcm47CisJdmFyIFByb3BlcnR5ID0gKGZ1bmN0aW9uICgp
IHsKKwkgICAgZnVuY3Rpb24gUHJvcGVydHkoa2luZCwga2V5LCBjb21wdXRlZCwgdmFsdWUsIG1l
dGhvZCwgc2hvcnRoYW5kKSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXgu
UHJvcGVydHk7CisJICAgICAgICB0aGlzLmtleSA9IGtleTsKKwkgICAgICAgIHRoaXMuY29tcHV0
ZWQgPSBjb21wdXRlZDsKKwkgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKKwkgICAgICAgIHRo
aXMua2luZCA9IGtpbmQ7CisJICAgICAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDsKKwkgICAgICAg
IHRoaXMuc2hvcnRoYW5kID0gc2hvcnRoYW5kOworCSAgICB9CisJICAgIHJldHVybiBQcm9wZXJ0
eTsKKwl9KCkpOworCWV4cG9ydHMuUHJvcGVydHkgPSBQcm9wZXJ0eTsKKwl2YXIgUmVnZXhMaXRl
cmFsID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gUmVnZXhMaXRlcmFsKHZhbHVlLCBy
YXcsIHJlZ2V4KSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguTGl0ZXJh
bDsKKwkgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKKwkgICAgICAgIHRoaXMucmF3ID0gcmF3
OworCSAgICAgICAgdGhpcy5yZWdleCA9IHJlZ2V4OworCSAgICB9CisJICAgIHJldHVybiBSZWdl
eExpdGVyYWw7CisJfSgpKTsKKwlleHBvcnRzLlJlZ2V4TGl0ZXJhbCA9IFJlZ2V4TGl0ZXJhbDsK
Kwl2YXIgUmVzdEVsZW1lbnQgPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBSZXN0RWxl
bWVudChhcmd1bWVudCkgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LlJl
c3RFbGVtZW50OworCSAgICAgICAgdGhpcy5hcmd1bWVudCA9IGFyZ3VtZW50OworCSAgICB9CisJ
ICAgIHJldHVybiBSZXN0RWxlbWVudDsKKwl9KCkpOworCWV4cG9ydHMuUmVzdEVsZW1lbnQgPSBS
ZXN0RWxlbWVudDsKKwl2YXIgUmV0dXJuU3RhdGVtZW50ID0gKGZ1bmN0aW9uICgpIHsKKwkgICAg
ZnVuY3Rpb24gUmV0dXJuU3RhdGVtZW50KGFyZ3VtZW50KSB7CisJICAgICAgICB0aGlzLnR5cGUg
PSBzeW50YXhfMS5TeW50YXguUmV0dXJuU3RhdGVtZW50OworCSAgICAgICAgdGhpcy5hcmd1bWVu
dCA9IGFyZ3VtZW50OworCSAgICB9CisJICAgIHJldHVybiBSZXR1cm5TdGF0ZW1lbnQ7CisJfSgp
KTsKKwlleHBvcnRzLlJldHVyblN0YXRlbWVudCA9IFJldHVyblN0YXRlbWVudDsKKwl2YXIgU2Ny
aXB0ID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gU2NyaXB0KGJvZHkpIHsKKwkgICAg
ICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5Qcm9ncmFtOworCSAgICAgICAgdGhpcy5i
b2R5ID0gYm9keTsKKwkgICAgICAgIHRoaXMuc291cmNlVHlwZSA9ICdzY3JpcHQnOworCSAgICB9
CisJICAgIHJldHVybiBTY3JpcHQ7CisJfSgpKTsKKwlleHBvcnRzLlNjcmlwdCA9IFNjcmlwdDsK
Kwl2YXIgU2VxdWVuY2VFeHByZXNzaW9uID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24g
U2VxdWVuY2VFeHByZXNzaW9uKGV4cHJlc3Npb25zKSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBz
eW50YXhfMS5TeW50YXguU2VxdWVuY2VFeHByZXNzaW9uOworCSAgICAgICAgdGhpcy5leHByZXNz
aW9ucyA9IGV4cHJlc3Npb25zOworCSAgICB9CisJICAgIHJldHVybiBTZXF1ZW5jZUV4cHJlc3Np
b247CisJfSgpKTsKKwlleHBvcnRzLlNlcXVlbmNlRXhwcmVzc2lvbiA9IFNlcXVlbmNlRXhwcmVz
c2lvbjsKKwl2YXIgU3ByZWFkRWxlbWVudCA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9u
IFNwcmVhZEVsZW1lbnQoYXJndW1lbnQpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8x
LlN5bnRheC5TcHJlYWRFbGVtZW50OworCSAgICAgICAgdGhpcy5hcmd1bWVudCA9IGFyZ3VtZW50
OworCSAgICB9CisJICAgIHJldHVybiBTcHJlYWRFbGVtZW50OworCX0oKSk7CisJZXhwb3J0cy5T
cHJlYWRFbGVtZW50ID0gU3ByZWFkRWxlbWVudDsKKwl2YXIgU3RhdGljTWVtYmVyRXhwcmVzc2lv
biA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIFN0YXRpY01lbWJlckV4cHJlc3Npb24o
b2JqZWN0LCBwcm9wZXJ0eSkgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4
Lk1lbWJlckV4cHJlc3Npb247CisJICAgICAgICB0aGlzLmNvbXB1dGVkID0gZmFsc2U7CisJICAg
ICAgICB0aGlzLm9iamVjdCA9IG9iamVjdDsKKwkgICAgICAgIHRoaXMucHJvcGVydHkgPSBwcm9w
ZXJ0eTsKKwkgICAgfQorCSAgICByZXR1cm4gU3RhdGljTWVtYmVyRXhwcmVzc2lvbjsKKwl9KCkp
OworCWV4cG9ydHMuU3RhdGljTWVtYmVyRXhwcmVzc2lvbiA9IFN0YXRpY01lbWJlckV4cHJlc3Np
b247CisJdmFyIFN1cGVyID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gU3VwZXIoKSB7
CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguU3VwZXI7CisJICAgIH0KKwkg
ICAgcmV0dXJuIFN1cGVyOworCX0oKSk7CisJZXhwb3J0cy5TdXBlciA9IFN1cGVyOworCXZhciBT
d2l0Y2hDYXNlID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gU3dpdGNoQ2FzZSh0ZXN0
LCBjb25zZXF1ZW50KSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguU3dp
dGNoQ2FzZTsKKwkgICAgICAgIHRoaXMudGVzdCA9IHRlc3Q7CisJICAgICAgICB0aGlzLmNvbnNl
cXVlbnQgPSBjb25zZXF1ZW50OworCSAgICB9CisJICAgIHJldHVybiBTd2l0Y2hDYXNlOworCX0o
KSk7CisJZXhwb3J0cy5Td2l0Y2hDYXNlID0gU3dpdGNoQ2FzZTsKKwl2YXIgU3dpdGNoU3RhdGVt
ZW50ID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gU3dpdGNoU3RhdGVtZW50KGRpc2Ny
aW1pbmFudCwgY2FzZXMpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5T
d2l0Y2hTdGF0ZW1lbnQ7CisJICAgICAgICB0aGlzLmRpc2NyaW1pbmFudCA9IGRpc2NyaW1pbmFu
dDsKKwkgICAgICAgIHRoaXMuY2FzZXMgPSBjYXNlczsKKwkgICAgfQorCSAgICByZXR1cm4gU3dp
dGNoU3RhdGVtZW50OworCX0oKSk7CisJZXhwb3J0cy5Td2l0Y2hTdGF0ZW1lbnQgPSBTd2l0Y2hT
dGF0ZW1lbnQ7CisJdmFyIFRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbiA9IChmdW5jdGlvbiAoKSB7
CisJICAgIGZ1bmN0aW9uIFRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbih0YWcsIHF1YXNpKSB7CisJ
ICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguVGFnZ2VkVGVtcGxhdGVFeHByZXNz
aW9uOworCSAgICAgICAgdGhpcy50YWcgPSB0YWc7CisJICAgICAgICB0aGlzLnF1YXNpID0gcXVh
c2k7CisJICAgIH0KKwkgICAgcmV0dXJuIFRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbjsKKwl9KCkp
OworCWV4cG9ydHMuVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uID0gVGFnZ2VkVGVtcGxhdGVFeHBy
ZXNzaW9uOworCXZhciBUZW1wbGF0ZUVsZW1lbnQgPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5j
dGlvbiBUZW1wbGF0ZUVsZW1lbnQodmFsdWUsIHRhaWwpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9
IHN5bnRheF8xLlN5bnRheC5UZW1wbGF0ZUVsZW1lbnQ7CisJICAgICAgICB0aGlzLnZhbHVlID0g
dmFsdWU7CisJICAgICAgICB0aGlzLnRhaWwgPSB0YWlsOworCSAgICB9CisJICAgIHJldHVybiBU
ZW1wbGF0ZUVsZW1lbnQ7CisJfSgpKTsKKwlleHBvcnRzLlRlbXBsYXRlRWxlbWVudCA9IFRlbXBs
YXRlRWxlbWVudDsKKwl2YXIgVGVtcGxhdGVMaXRlcmFsID0gKGZ1bmN0aW9uICgpIHsKKwkgICAg
ZnVuY3Rpb24gVGVtcGxhdGVMaXRlcmFsKHF1YXNpcywgZXhwcmVzc2lvbnMpIHsKKwkgICAgICAg
IHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5UZW1wbGF0ZUxpdGVyYWw7CisJICAgICAgICB0
aGlzLnF1YXNpcyA9IHF1YXNpczsKKwkgICAgICAgIHRoaXMuZXhwcmVzc2lvbnMgPSBleHByZXNz
aW9uczsKKwkgICAgfQorCSAgICByZXR1cm4gVGVtcGxhdGVMaXRlcmFsOworCX0oKSk7CisJZXhw
b3J0cy5UZW1wbGF0ZUxpdGVyYWwgPSBUZW1wbGF0ZUxpdGVyYWw7CisJdmFyIFRoaXNFeHByZXNz
aW9uID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gVGhpc0V4cHJlc3Npb24oKSB7CisJ
ICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguVGhpc0V4cHJlc3Npb247CisJICAg
IH0KKwkgICAgcmV0dXJuIFRoaXNFeHByZXNzaW9uOworCX0oKSk7CisJZXhwb3J0cy5UaGlzRXhw
cmVzc2lvbiA9IFRoaXNFeHByZXNzaW9uOworCXZhciBUaHJvd1N0YXRlbWVudCA9IChmdW5jdGlv
biAoKSB7CisJICAgIGZ1bmN0aW9uIFRocm93U3RhdGVtZW50KGFyZ3VtZW50KSB7CisJICAgICAg
ICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguVGhyb3dTdGF0ZW1lbnQ7CisJICAgICAgICB0
aGlzLmFyZ3VtZW50ID0gYXJndW1lbnQ7CisJICAgIH0KKwkgICAgcmV0dXJuIFRocm93U3RhdGVt
ZW50OworCX0oKSk7CisJZXhwb3J0cy5UaHJvd1N0YXRlbWVudCA9IFRocm93U3RhdGVtZW50Owor
CXZhciBUcnlTdGF0ZW1lbnQgPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBUcnlTdGF0
ZW1lbnQoYmxvY2ssIGhhbmRsZXIsIGZpbmFsaXplcikgeworCSAgICAgICAgdGhpcy50eXBlID0g
c3ludGF4XzEuU3ludGF4LlRyeVN0YXRlbWVudDsKKwkgICAgICAgIHRoaXMuYmxvY2sgPSBibG9j
azsKKwkgICAgICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXI7CisJICAgICAgICB0aGlzLmZpbmFs
aXplciA9IGZpbmFsaXplcjsKKwkgICAgfQorCSAgICByZXR1cm4gVHJ5U3RhdGVtZW50OworCX0o
KSk7CisJZXhwb3J0cy5UcnlTdGF0ZW1lbnQgPSBUcnlTdGF0ZW1lbnQ7CisJdmFyIFVuYXJ5RXhw
cmVzc2lvbiA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIFVuYXJ5RXhwcmVzc2lvbihv
cGVyYXRvciwgYXJndW1lbnQpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRh
eC5VbmFyeUV4cHJlc3Npb247CisJICAgICAgICB0aGlzLm9wZXJhdG9yID0gb3BlcmF0b3I7CisJ
ICAgICAgICB0aGlzLmFyZ3VtZW50ID0gYXJndW1lbnQ7CisJICAgICAgICB0aGlzLnByZWZpeCA9
IHRydWU7CisJICAgIH0KKwkgICAgcmV0dXJuIFVuYXJ5RXhwcmVzc2lvbjsKKwl9KCkpOworCWV4
cG9ydHMuVW5hcnlFeHByZXNzaW9uID0gVW5hcnlFeHByZXNzaW9uOworCXZhciBVcGRhdGVFeHBy
ZXNzaW9uID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gVXBkYXRlRXhwcmVzc2lvbihv
cGVyYXRvciwgYXJndW1lbnQsIHByZWZpeCkgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4
XzEuU3ludGF4LlVwZGF0ZUV4cHJlc3Npb247CisJICAgICAgICB0aGlzLm9wZXJhdG9yID0gb3Bl
cmF0b3I7CisJICAgICAgICB0aGlzLmFyZ3VtZW50ID0gYXJndW1lbnQ7CisJICAgICAgICB0aGlz
LnByZWZpeCA9IHByZWZpeDsKKwkgICAgfQorCSAgICByZXR1cm4gVXBkYXRlRXhwcmVzc2lvbjsK
Kwl9KCkpOworCWV4cG9ydHMuVXBkYXRlRXhwcmVzc2lvbiA9IFVwZGF0ZUV4cHJlc3Npb247CisJ
dmFyIFZhcmlhYmxlRGVjbGFyYXRpb24gPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBW
YXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywga2luZCkgeworCSAgICAgICAgdGhpcy50
eXBlID0gc3ludGF4XzEuU3ludGF4LlZhcmlhYmxlRGVjbGFyYXRpb247CisJICAgICAgICB0aGlz
LmRlY2xhcmF0aW9ucyA9IGRlY2xhcmF0aW9uczsKKwkgICAgICAgIHRoaXMua2luZCA9IGtpbmQ7
CisJICAgIH0KKwkgICAgcmV0dXJuIFZhcmlhYmxlRGVjbGFyYXRpb247CisJfSgpKTsKKwlleHBv
cnRzLlZhcmlhYmxlRGVjbGFyYXRpb24gPSBWYXJpYWJsZURlY2xhcmF0aW9uOworCXZhciBWYXJp
YWJsZURlY2xhcmF0b3IgPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBWYXJpYWJsZURl
Y2xhcmF0b3IoaWQsIGluaXQpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRh
eC5WYXJpYWJsZURlY2xhcmF0b3I7CisJICAgICAgICB0aGlzLmlkID0gaWQ7CisJICAgICAgICB0
aGlzLmluaXQgPSBpbml0OworCSAgICB9CisJICAgIHJldHVybiBWYXJpYWJsZURlY2xhcmF0b3I7
CisJfSgpKTsKKwlleHBvcnRzLlZhcmlhYmxlRGVjbGFyYXRvciA9IFZhcmlhYmxlRGVjbGFyYXRv
cjsKKwl2YXIgV2hpbGVTdGF0ZW1lbnQgPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBX
aGlsZVN0YXRlbWVudCh0ZXN0LCBib2R5KSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhf
MS5TeW50YXguV2hpbGVTdGF0ZW1lbnQ7CisJICAgICAgICB0aGlzLnRlc3QgPSB0ZXN0OworCSAg
ICAgICAgdGhpcy5ib2R5ID0gYm9keTsKKwkgICAgfQorCSAgICByZXR1cm4gV2hpbGVTdGF0ZW1l
bnQ7CisJfSgpKTsKKwlleHBvcnRzLldoaWxlU3RhdGVtZW50ID0gV2hpbGVTdGF0ZW1lbnQ7CisJ
dmFyIFdpdGhTdGF0ZW1lbnQgPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBXaXRoU3Rh
dGVtZW50KG9iamVjdCwgYm9keSkgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3lu
dGF4LldpdGhTdGF0ZW1lbnQ7CisJICAgICAgICB0aGlzLm9iamVjdCA9IG9iamVjdDsKKwkgICAg
ICAgIHRoaXMuYm9keSA9IGJvZHk7CisJICAgIH0KKwkgICAgcmV0dXJuIFdpdGhTdGF0ZW1lbnQ7
CisJfSgpKTsKKwlleHBvcnRzLldpdGhTdGF0ZW1lbnQgPSBXaXRoU3RhdGVtZW50OworCXZhciBZ
aWVsZEV4cHJlc3Npb24gPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBZaWVsZEV4cHJl
c3Npb24oYXJndW1lbnQsIGRlbGVnYXRlKSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhf
MS5TeW50YXguWWllbGRFeHByZXNzaW9uOworCSAgICAgICAgdGhpcy5hcmd1bWVudCA9IGFyZ3Vt
ZW50OworCSAgICAgICAgdGhpcy5kZWxlZ2F0ZSA9IGRlbGVnYXRlOworCSAgICB9CisJICAgIHJl
dHVybiBZaWVsZEV4cHJlc3Npb247CisJfSgpKTsKKwlleHBvcnRzLllpZWxkRXhwcmVzc2lvbiA9
IFlpZWxkRXhwcmVzc2lvbjsKKworCisvKioqLyB9LAorLyogMTEgKi8KKy8qKiovIGZ1bmN0aW9u
KG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisJInVzZSBzdHJpY3Qi
OworLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8KKwl2YXIgX19leHRlbmRzID0gKHRoaXMgJiYg
dGhpcy5fX2V4dGVuZHMpIHx8IGZ1bmN0aW9uIChkLCBiKSB7CisJICAgIGZvciAodmFyIHAgaW4g
YikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOworCSAgICBmdW5jdGlvbiBf
XygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH0KKwkgICAgZC5wcm90b3R5cGUgPSBiID09PSBu
dWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3
IF9fKCkpOworCX07CisJdmFyIGNoYXJhY3Rlcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTsK
Kwl2YXIgdG9rZW5fMSA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7CisJdmFyIHBhcnNlcl8xID0g
X193ZWJwYWNrX3JlcXVpcmVfXygzKTsKKwl2YXIgeGh0bWxfZW50aXRpZXNfMSA9IF9fd2VicGFj
a19yZXF1aXJlX18oMTIpOworCXZhciBqc3hfc3ludGF4XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KDEzKTsKKwl2YXIgTm9kZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTApOworCXZhciBKU1hOb2Rl
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNCk7CisJdmFyIEpTWFRva2VuOworCShmdW5jdGlvbiAo
SlNYVG9rZW4pIHsKKwkgICAgSlNYVG9rZW5bSlNYVG9rZW5bIklkZW50aWZpZXIiXSA9IDEwMF0g
PSAiSWRlbnRpZmllciI7CisJICAgIEpTWFRva2VuW0pTWFRva2VuWyJUZXh0Il0gPSAxMDFdID0g
IlRleHQiOworCX0pKEpTWFRva2VuIHx8IChKU1hUb2tlbiA9IHt9KSk7CisJdG9rZW5fMS5Ub2tl
bk5hbWVbSlNYVG9rZW4uSWRlbnRpZmllcl0gPSAnSlNYSWRlbnRpZmllcic7CisJdG9rZW5fMS5U
b2tlbk5hbWVbSlNYVG9rZW4uVGV4dF0gPSAnSlNYVGV4dCc7CisJLy8gRnVsbHkgcXVhbGlmaWVk
IGVsZW1lbnQgbmFtZSwgZS5nLiA8c3ZnOnBhdGg+IHJldHVybnMgInN2ZzpwYXRoIgorCWZ1bmN0
aW9uIGdldFF1YWxpZmllZEVsZW1lbnROYW1lKGVsZW1lbnROYW1lKSB7CisJICAgIHZhciBxdWFs
aWZpZWROYW1lOworCSAgICBzd2l0Y2ggKGVsZW1lbnROYW1lLnR5cGUpIHsKKwkgICAgICAgIGNh
c2UganN4X3N5bnRheF8xLkpTWFN5bnRheC5KU1hJZGVudGlmaWVyOgorCSAgICAgICAgICAgIHZh
ciBpZCA9IChlbGVtZW50TmFtZSk7CisJICAgICAgICAgICAgcXVhbGlmaWVkTmFtZSA9IGlkLm5h
bWU7CisJICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICBjYXNlIGpzeF9zeW50YXhfMS5KU1hT
eW50YXguSlNYTmFtZXNwYWNlZE5hbWU6CisJICAgICAgICAgICAgdmFyIG5zID0gKGVsZW1lbnRO
YW1lKTsKKwkgICAgICAgICAgICBxdWFsaWZpZWROYW1lID0gZ2V0UXVhbGlmaWVkRWxlbWVudE5h
bWUobnMubmFtZXNwYWNlKSArICc6JyArCisJICAgICAgICAgICAgICAgIGdldFF1YWxpZmllZEVs
ZW1lbnROYW1lKG5zLm5hbWUpOworCSAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgY2FzZSBq
c3hfc3ludGF4XzEuSlNYU3ludGF4LkpTWE1lbWJlckV4cHJlc3Npb246CisJICAgICAgICAgICAg
dmFyIGV4cHIgPSAoZWxlbWVudE5hbWUpOworCSAgICAgICAgICAgIHF1YWxpZmllZE5hbWUgPSBn
ZXRRdWFsaWZpZWRFbGVtZW50TmFtZShleHByLm9iamVjdCkgKyAnLicgKworCSAgICAgICAgICAg
ICAgICBnZXRRdWFsaWZpZWRFbGVtZW50TmFtZShleHByLnByb3BlcnR5KTsKKwkgICAgICAgICAg
ICBicmVhazsKKwkgICAgfQorCSAgICByZXR1cm4gcXVhbGlmaWVkTmFtZTsKKwl9CisJdmFyIEpT
WFBhcnNlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7CisJICAgIF9fZXh0ZW5kcyhKU1hQYXJzZXIs
IF9zdXBlcik7CisJICAgIGZ1bmN0aW9uIEpTWFBhcnNlcihjb2RlLCBvcHRpb25zLCBkZWxlZ2F0
ZSkgeworCSAgICAgICAgX3N1cGVyLmNhbGwodGhpcywgY29kZSwgb3B0aW9ucywgZGVsZWdhdGUp
OworCSAgICB9CisJICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFyc2VQcmltYXJ5RXhwcmVzc2lv
biA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHJldHVybiB0aGlzLm1hdGNoKCc8JykgPyB0aGlz
LnBhcnNlSlNYUm9vdCgpIDogX3N1cGVyLnByb3RvdHlwZS5wYXJzZVByaW1hcnlFeHByZXNzaW9u
LmNhbGwodGhpcyk7CisJICAgIH07CisJICAgIEpTWFBhcnNlci5wcm90b3R5cGUuc3RhcnRKU1gg
PSBmdW5jdGlvbiAoKSB7CisJICAgICAgICAvLyBVbndpbmQgdGhlIHNjYW5uZXIgYmVmb3JlIHRo
ZSBsb29rYWhlYWQgdG9rZW4uCisJICAgICAgICB0aGlzLnNjYW5uZXIuaW5kZXggPSB0aGlzLnN0
YXJ0TWFya2VyLmluZGV4OworCSAgICAgICAgdGhpcy5zY2FubmVyLmxpbmVOdW1iZXIgPSB0aGlz
LnN0YXJ0TWFya2VyLmxpbmVOdW1iZXI7CisJICAgICAgICB0aGlzLnNjYW5uZXIubGluZVN0YXJ0
ID0gdGhpcy5zdGFydE1hcmtlci5saW5lU3RhcnQ7CisJICAgIH07CisJICAgIEpTWFBhcnNlci5w
cm90b3R5cGUuZmluaXNoSlNYID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgLy8gUHJpbWUgdGhl
IG5leHQgbG9va2FoZWFkLgorCSAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgfTsKKwkg
ICAgSlNYUGFyc2VyLnByb3RvdHlwZS5yZWVudGVySlNYID0gZnVuY3Rpb24gKCkgeworCSAgICAg
ICAgdGhpcy5zdGFydEpTWCgpOworCSAgICAgICAgdGhpcy5leHBlY3RKU1goJ30nKTsKKwkgICAg
ICAgIC8vIFBvcCB0aGUgY2xvc2luZyAnfScgYWRkZWQgZnJvbSB0aGUgbG9va2FoZWFkLgorCSAg
ICAgICAgaWYgKHRoaXMuY29uZmlnLnRva2VucykgeworCSAgICAgICAgICAgIHRoaXMudG9rZW5z
LnBvcCgpOworCSAgICAgICAgfQorCSAgICB9OworCSAgICBKU1hQYXJzZXIucHJvdG90eXBlLmNy
ZWF0ZUpTWE5vZGUgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB0aGlzLmNvbGxlY3RDb21tZW50
cygpOworCSAgICAgICAgcmV0dXJuIHsKKwkgICAgICAgICAgICBpbmRleDogdGhpcy5zY2FubmVy
LmluZGV4LAorCSAgICAgICAgICAgIGxpbmU6IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLAorCSAg
ICAgICAgICAgIGNvbHVtbjogdGhpcy5zY2FubmVyLmluZGV4IC0gdGhpcy5zY2FubmVyLmxpbmVT
dGFydAorCSAgICAgICAgfTsKKwkgICAgfTsKKwkgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5jcmVh
dGVKU1hDaGlsZE5vZGUgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICByZXR1cm4geworCSAgICAg
ICAgICAgIGluZGV4OiB0aGlzLnNjYW5uZXIuaW5kZXgsCisJICAgICAgICAgICAgbGluZTogdGhp
cy5zY2FubmVyLmxpbmVOdW1iZXIsCisJICAgICAgICAgICAgY29sdW1uOiB0aGlzLnNjYW5uZXIu
aW5kZXggLSB0aGlzLnNjYW5uZXIubGluZVN0YXJ0CisJICAgICAgICB9OworCSAgICB9OworCSAg
ICBKU1hQYXJzZXIucHJvdG90eXBlLnNjYW5YSFRNTEVudGl0eSA9IGZ1bmN0aW9uICgpIHsKKwkg
ICAgICAgIHZhciByZXN1bHQgPSAnJic7CisJICAgICAgICB2YXIgc3RyID0gJyc7CisJICAgICAg
ICB3aGlsZSAoIXRoaXMuc2Nhbm5lci5lb2YoKSkgeworCSAgICAgICAgICAgIHZhciBjaCA9IHRo
aXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4KytdOworCSAgICAgICAgICAgIGlm
IChjaCA9PT0gJzsnKSB7CisJICAgICAgICAgICAgICAgIGlmIChzdHJbMF0gPT09ICcjJykgewor
CSAgICAgICAgICAgICAgICAgICAgc3RyID0gc3RyLnN1YnN0cigxKTsKKwkgICAgICAgICAgICAg
ICAgICAgIHZhciBoZXggPSAoc3RyWzBdID09PSAneCcpOworCSAgICAgICAgICAgICAgICAgICAg
dmFyIGNwID0gaGV4ID8gcGFyc2VJbnQoJzAnICsgc3RyLCAxNikgOiBwYXJzZUludChzdHIsIDEw
KTsKKwkgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY3Ap
OworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGVsc2UgaWYgKHhodG1sX2Vu
dGl0aWVzXzEuWEhUTUxFbnRpdGllc1tzdHJdKSB7CisJICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSB4aHRtbF9lbnRpdGllc18xLlhIVE1MRW50aXRpZXNbc3RyXTsKKwkgICAgICAgICAgICAg
ICAgfQorCSAgICAgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCArPSBjaDsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBicmVhazsKKwkg
ICAgICAgICAgICB9CisJICAgICAgICAgICAgc3RyICs9IGNoOworCSAgICAgICAgICAgIHJlc3Vs
dCArPSBjaDsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiByZXN1bHQ7CisJICAgIH07CisJ
ICAgIC8vIFNjYW4gdGhlIG5leHQgSlNYIHRva2VuLiBUaGlzIHJlcGxhY2VzIFNjYW5uZXIjbGV4
IHdoZW4gaW4gSlNYIG1vZGUuCisJICAgIEpTWFBhcnNlci5wcm90b3R5cGUubGV4SlNYID0gZnVu
Y3Rpb24gKCkgeworCSAgICAgICAgdmFyIGNwID0gdGhpcy5zY2FubmVyLnNvdXJjZS5jaGFyQ29k
ZUF0KHRoaXMuc2Nhbm5lci5pbmRleCk7CisJICAgICAgICAvLyA8ID4gLyA6ID0geyB9CisJICAg
ICAgICBpZiAoY3AgPT09IDYwIHx8IGNwID09PSA2MiB8fCBjcCA9PT0gNDcgfHwgY3AgPT09IDU4
IHx8IGNwID09PSA2MSB8fCBjcCA9PT0gMTIzIHx8IGNwID09PSAxMjUpIHsKKwkgICAgICAgICAg
ICB2YXIgdmFsdWUgPSB0aGlzLnNjYW5uZXIuc291cmNlW3RoaXMuc2Nhbm5lci5pbmRleCsrXTsK
KwkgICAgICAgICAgICByZXR1cm4geworCSAgICAgICAgICAgICAgICB0eXBlOiB0b2tlbl8xLlRv
a2VuLlB1bmN0dWF0b3IsCisJICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKKwkgICAgICAg
ICAgICAgICAgbGluZU51bWJlcjogdGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsCisJICAgICAgICAg
ICAgICAgIGxpbmVTdGFydDogdGhpcy5zY2FubmVyLmxpbmVTdGFydCwKKwkgICAgICAgICAgICAg
ICAgc3RhcnQ6IHRoaXMuc2Nhbm5lci5pbmRleCAtIDEsCisJICAgICAgICAgICAgICAgIGVuZDog
dGhpcy5zY2FubmVyLmluZGV4CisJICAgICAgICAgICAgfTsKKwkgICAgICAgIH0KKwkgICAgICAg
IC8vICIgJworCSAgICAgICAgaWYgKGNwID09PSAzNCB8fCBjcCA9PT0gMzkpIHsKKwkgICAgICAg
ICAgICB2YXIgc3RhcnQgPSB0aGlzLnNjYW5uZXIuaW5kZXg7CisJICAgICAgICAgICAgdmFyIHF1
b3RlID0gdGhpcy5zY2FubmVyLnNvdXJjZVt0aGlzLnNjYW5uZXIuaW5kZXgrK107CisJICAgICAg
ICAgICAgdmFyIHN0ciA9ICcnOworCSAgICAgICAgICAgIHdoaWxlICghdGhpcy5zY2FubmVyLmVv
ZigpKSB7CisJICAgICAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuc2Nhbm5lci5zb3VyY2VbdGhp
cy5zY2FubmVyLmluZGV4KytdOworCSAgICAgICAgICAgICAgICBpZiAoY2ggPT09IHF1b3RlKSB7
CisJICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAg
ICAgICAgICAgICBlbHNlIGlmIChjaCA9PT0gJyYnKSB7CisJICAgICAgICAgICAgICAgICAgICBz
dHIgKz0gdGhpcy5zY2FuWEhUTUxFbnRpdHkoKTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAg
ICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgICAgIHN0ciArPSBjaDsKKwkgICAg
ICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICByZXR1cm4geworCSAg
ICAgICAgICAgICAgICB0eXBlOiB0b2tlbl8xLlRva2VuLlN0cmluZ0xpdGVyYWwsCisJICAgICAg
ICAgICAgICAgIHZhbHVlOiBzdHIsCisJICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMu
c2Nhbm5lci5saW5lTnVtYmVyLAorCSAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IHRoaXMuc2Nh
bm5lci5saW5lU3RhcnQsCisJICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKwkgICAgICAg
ICAgICAgICAgZW5kOiB0aGlzLnNjYW5uZXIuaW5kZXgKKwkgICAgICAgICAgICB9OworCSAgICAg
ICAgfQorCSAgICAgICAgLy8gLi4uIG9yIC4KKwkgICAgICAgIGlmIChjcCA9PT0gNDYpIHsKKwkg
ICAgICAgICAgICB2YXIgbjEgPSB0aGlzLnNjYW5uZXIuc291cmNlLmNoYXJDb2RlQXQodGhpcy5z
Y2FubmVyLmluZGV4ICsgMSk7CisJICAgICAgICAgICAgdmFyIG4yID0gdGhpcy5zY2FubmVyLnNv
dXJjZS5jaGFyQ29kZUF0KHRoaXMuc2Nhbm5lci5pbmRleCArIDIpOworCSAgICAgICAgICAgIHZh
ciB2YWx1ZSA9IChuMSA9PT0gNDYgJiYgbjIgPT09IDQ2KSA/ICcuLi4nIDogJy4nOworCSAgICAg
ICAgICAgIHZhciBzdGFydCA9IHRoaXMuc2Nhbm5lci5pbmRleDsKKwkgICAgICAgICAgICB0aGlz
LnNjYW5uZXIuaW5kZXggKz0gdmFsdWUubGVuZ3RoOworCSAgICAgICAgICAgIHJldHVybiB7CisJ
ICAgICAgICAgICAgICAgIHR5cGU6IHRva2VuXzEuVG9rZW4uUHVuY3R1YXRvciwKKwkgICAgICAg
ICAgICAgICAgdmFsdWU6IHZhbHVlLAorCSAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiB0aGlz
LnNjYW5uZXIubGluZU51bWJlciwKKwkgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiB0aGlzLnNj
YW5uZXIubGluZVN0YXJ0LAorCSAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCisJICAgICAg
ICAgICAgICAgIGVuZDogdGhpcy5zY2FubmVyLmluZGV4CisJICAgICAgICAgICAgfTsKKwkgICAg
ICAgIH0KKwkgICAgICAgIC8vIGAKKwkgICAgICAgIGlmIChjcCA9PT0gOTYpIHsKKwkgICAgICAg
ICAgICAvLyBPbmx5IHBsYWNlaG9sZGVyLCBzaW5jZSBpdCB3aWxsIGJlIHJlc2Nhbm5lZCBhcyBh
IHJlYWwgYXNzaWdubWVudCBleHByZXNzaW9uLgorCSAgICAgICAgICAgIHJldHVybiB7CisJICAg
ICAgICAgICAgICAgIHR5cGU6IHRva2VuXzEuVG9rZW4uVGVtcGxhdGUsCisJICAgICAgICAgICAg
ICAgIGxpbmVOdW1iZXI6IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLAorCSAgICAgICAgICAgICAg
ICBsaW5lU3RhcnQ6IHRoaXMuc2Nhbm5lci5saW5lU3RhcnQsCisJICAgICAgICAgICAgICAgIHN0
YXJ0OiB0aGlzLnNjYW5uZXIuaW5kZXgsCisJICAgICAgICAgICAgICAgIGVuZDogdGhpcy5zY2Fu
bmVyLmluZGV4CisJICAgICAgICAgICAgfTsKKwkgICAgICAgIH0KKwkgICAgICAgIC8vIElkZW50
aWZlciBjYW4gbm90IGNvbnRhaW4gYmFja3NsYXNoIChjaGFyIGNvZGUgOTIpLgorCSAgICAgICAg
aWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJTdGFydChjcCkgJiYgKGNwICE9
PSA5MikpIHsKKwkgICAgICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLnNjYW5uZXIuaW5kZXg7CisJ
ICAgICAgICAgICAgKyt0aGlzLnNjYW5uZXIuaW5kZXg7CisJICAgICAgICAgICAgd2hpbGUgKCF0
aGlzLnNjYW5uZXIuZW9mKCkpIHsKKwkgICAgICAgICAgICAgICAgdmFyIGNoID0gdGhpcy5zY2Fu
bmVyLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuc2Nhbm5lci5pbmRleCk7CisJICAgICAgICAgICAg
ICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyUGFydChjaCkgJiYgKGNo
ICE9PSA5MikpIHsKKwkgICAgICAgICAgICAgICAgICAgICsrdGhpcy5zY2FubmVyLmluZGV4Owor
CSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoID09PSA0NSkg
eworCSAgICAgICAgICAgICAgICAgICAgLy8gSHlwaGVuIChjaGFyIGNvZGUgNDUpIGNhbiBiZSBw
YXJ0IG9mIGFuIGlkZW50aWZpZXIuCisJICAgICAgICAgICAgICAgICAgICArK3RoaXMuc2Nhbm5l
ci5pbmRleDsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBlbHNlIHsKKwkg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAg
ICAgfQorCSAgICAgICAgICAgIHZhciBpZCA9IHRoaXMuc2Nhbm5lci5zb3VyY2Uuc2xpY2Uoc3Rh
cnQsIHRoaXMuc2Nhbm5lci5pbmRleCk7CisJICAgICAgICAgICAgcmV0dXJuIHsKKwkgICAgICAg
ICAgICAgICAgdHlwZTogSlNYVG9rZW4uSWRlbnRpZmllciwKKwkgICAgICAgICAgICAgICAgdmFs
dWU6IGlkLAorCSAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLnNjYW5uZXIubGluZU51
bWJlciwKKwkgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiB0aGlzLnNjYW5uZXIubGluZVN0YXJ0
LAorCSAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCisJICAgICAgICAgICAgICAgIGVuZDog
dGhpcy5zY2FubmVyLmluZGV4CisJICAgICAgICAgICAgfTsKKwkgICAgICAgIH0KKwkgICAgICAg
IHRoaXMuc2Nhbm5lci50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOworCSAgICB9OworCSAgICBKU1hQ
YXJzZXIucHJvdG90eXBlLm5leHRKU1hUb2tlbiA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHRo
aXMuY29sbGVjdENvbW1lbnRzKCk7CisJICAgICAgICB0aGlzLnN0YXJ0TWFya2VyLmluZGV4ID0g
dGhpcy5zY2FubmVyLmluZGV4OworCSAgICAgICAgdGhpcy5zdGFydE1hcmtlci5saW5lTnVtYmVy
ID0gdGhpcy5zY2FubmVyLmxpbmVOdW1iZXI7CisJICAgICAgICB0aGlzLnN0YXJ0TWFya2VyLmxp
bmVTdGFydCA9IHRoaXMuc2Nhbm5lci5saW5lU3RhcnQ7CisJICAgICAgICB2YXIgdG9rZW4gPSB0
aGlzLmxleEpTWCgpOworCSAgICAgICAgdGhpcy5sYXN0TWFya2VyLmluZGV4ID0gdGhpcy5zY2Fu
bmVyLmluZGV4OworCSAgICAgICAgdGhpcy5sYXN0TWFya2VyLmxpbmVOdW1iZXIgPSB0aGlzLnNj
YW5uZXIubGluZU51bWJlcjsKKwkgICAgICAgIHRoaXMubGFzdE1hcmtlci5saW5lU3RhcnQgPSB0
aGlzLnNjYW5uZXIubGluZVN0YXJ0OworCSAgICAgICAgaWYgKHRoaXMuY29uZmlnLnRva2Vucykg
eworCSAgICAgICAgICAgIHRoaXMudG9rZW5zLnB1c2godGhpcy5jb252ZXJ0VG9rZW4odG9rZW4p
KTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiB0b2tlbjsKKwkgICAgfTsKKwkgICAgSlNY
UGFyc2VyLnByb3RvdHlwZS5uZXh0SlNYVGV4dCA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHRo
aXMuc3RhcnRNYXJrZXIuaW5kZXggPSB0aGlzLnNjYW5uZXIuaW5kZXg7CisJICAgICAgICB0aGlz
LnN0YXJ0TWFya2VyLmxpbmVOdW1iZXIgPSB0aGlzLnNjYW5uZXIubGluZU51bWJlcjsKKwkgICAg
ICAgIHRoaXMuc3RhcnRNYXJrZXIubGluZVN0YXJ0ID0gdGhpcy5zY2FubmVyLmxpbmVTdGFydDsK
KwkgICAgICAgIHZhciBzdGFydCA9IHRoaXMuc2Nhbm5lci5pbmRleDsKKwkgICAgICAgIHZhciB0
ZXh0ID0gJyc7CisJICAgICAgICB3aGlsZSAoIXRoaXMuc2Nhbm5lci5lb2YoKSkgeworCSAgICAg
ICAgICAgIHZhciBjaCA9IHRoaXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4XTsK
KwkgICAgICAgICAgICBpZiAoY2ggPT09ICd7JyB8fCBjaCA9PT0gJzwnKSB7CisJICAgICAgICAg
ICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICArK3RoaXMuc2Nhbm5l
ci5pbmRleDsKKwkgICAgICAgICAgICB0ZXh0ICs9IGNoOworCSAgICAgICAgICAgIGlmIChjaGFy
YWN0ZXJfMS5DaGFyYWN0ZXIuaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkgewor
CSAgICAgICAgICAgICAgICArK3RoaXMuc2Nhbm5lci5saW5lTnVtYmVyOworCSAgICAgICAgICAg
ICAgICBpZiAoY2ggPT09ICdccicgJiYgdGhpcy5zY2FubmVyLnNvdXJjZVt0aGlzLnNjYW5uZXIu
aW5kZXhdID09PSAnXG4nKSB7CisJICAgICAgICAgICAgICAgICAgICArK3RoaXMuc2Nhbm5lci5p
bmRleDsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICB0aGlzLnNjYW5uZXIu
bGluZVN0YXJ0ID0gdGhpcy5zY2FubmVyLmluZGV4OworCSAgICAgICAgICAgIH0KKwkgICAgICAg
IH0KKwkgICAgICAgIHRoaXMubGFzdE1hcmtlci5pbmRleCA9IHRoaXMuc2Nhbm5lci5pbmRleDsK
KwkgICAgICAgIHRoaXMubGFzdE1hcmtlci5saW5lTnVtYmVyID0gdGhpcy5zY2FubmVyLmxpbmVO
dW1iZXI7CisJICAgICAgICB0aGlzLmxhc3RNYXJrZXIubGluZVN0YXJ0ID0gdGhpcy5zY2FubmVy
LmxpbmVTdGFydDsKKwkgICAgICAgIHZhciB0b2tlbiA9IHsKKwkgICAgICAgICAgICB0eXBlOiBK
U1hUb2tlbi5UZXh0LAorCSAgICAgICAgICAgIHZhbHVlOiB0ZXh0LAorCSAgICAgICAgICAgIGxp
bmVOdW1iZXI6IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLAorCSAgICAgICAgICAgIGxpbmVTdGFy
dDogdGhpcy5zY2FubmVyLmxpbmVTdGFydCwKKwkgICAgICAgICAgICBzdGFydDogc3RhcnQsCisJ
ICAgICAgICAgICAgZW5kOiB0aGlzLnNjYW5uZXIuaW5kZXgKKwkgICAgICAgIH07CisJICAgICAg
ICBpZiAoKHRleHQubGVuZ3RoID4gMCkgJiYgdGhpcy5jb25maWcudG9rZW5zKSB7CisJICAgICAg
ICAgICAgdGhpcy50b2tlbnMucHVzaCh0aGlzLmNvbnZlcnRUb2tlbih0b2tlbikpOworCSAgICAg
ICAgfQorCSAgICAgICAgcmV0dXJuIHRva2VuOworCSAgICB9OworCSAgICBKU1hQYXJzZXIucHJv
dG90eXBlLnBlZWtKU1hUb2tlbiA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBwcmV2aW91
c0luZGV4ID0gdGhpcy5zY2FubmVyLmluZGV4OworCSAgICAgICAgdmFyIHByZXZpb3VzTGluZU51
bWJlciA9IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyOworCSAgICAgICAgdmFyIHByZXZpb3VzTGlu
ZVN0YXJ0ID0gdGhpcy5zY2FubmVyLmxpbmVTdGFydDsKKwkgICAgICAgIHRoaXMuc2Nhbm5lci5z
Y2FuQ29tbWVudHMoKTsKKwkgICAgICAgIHZhciBuZXh0ID0gdGhpcy5sZXhKU1goKTsKKwkgICAg
ICAgIHRoaXMuc2Nhbm5lci5pbmRleCA9IHByZXZpb3VzSW5kZXg7CisJICAgICAgICB0aGlzLnNj
YW5uZXIubGluZU51bWJlciA9IHByZXZpb3VzTGluZU51bWJlcjsKKwkgICAgICAgIHRoaXMuc2Nh
bm5lci5saW5lU3RhcnQgPSBwcmV2aW91c0xpbmVTdGFydDsKKwkgICAgICAgIHJldHVybiBuZXh0
OworCSAgICB9OworCSAgICAvLyBFeHBlY3QgdGhlIG5leHQgSlNYIHRva2VuIHRvIG1hdGNoIHRo
ZSBzcGVjaWZpZWQgcHVuY3R1YXRvci4KKwkgICAgLy8gSWYgbm90LCBhbiBleGNlcHRpb24gd2ls
bCBiZSB0aHJvd24uCisJICAgIEpTWFBhcnNlci5wcm90b3R5cGUuZXhwZWN0SlNYID0gZnVuY3Rp
b24gKHZhbHVlKSB7CisJICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLm5leHRKU1hUb2tlbigpOwor
CSAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IHRva2VuXzEuVG9rZW4uUHVuY3R1YXRvciB8fCB0
b2tlbi52YWx1ZSAhPT0gdmFsdWUpIHsKKwkgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3Rl
ZFRva2VuKHRva2VuKTsKKwkgICAgICAgIH0KKwkgICAgfTsKKwkgICAgLy8gUmV0dXJuIHRydWUg
aWYgdGhlIG5leHQgSlNYIHRva2VuIG1hdGNoZXMgdGhlIHNwZWNpZmllZCBwdW5jdHVhdG9yLgor
CSAgICBKU1hQYXJzZXIucHJvdG90eXBlLm1hdGNoSlNYID0gZnVuY3Rpb24gKHZhbHVlKSB7CisJ
ICAgICAgICB2YXIgbmV4dCA9IHRoaXMucGVla0pTWFRva2VuKCk7CisJICAgICAgICByZXR1cm4g
bmV4dC50eXBlID09PSB0b2tlbl8xLlRva2VuLlB1bmN0dWF0b3IgJiYgbmV4dC52YWx1ZSA9PT0g
dmFsdWU7CisJICAgIH07CisJICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFyc2VKU1hJZGVudGlm
aWVyID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZUpTWE5v
ZGUoKTsKKwkgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubmV4dEpTWFRva2VuKCk7CisJICAgICAg
ICBpZiAodG9rZW4udHlwZSAhPT0gSlNYVG9rZW4uSWRlbnRpZmllcikgeworCSAgICAgICAgICAg
IHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pOworCSAgICAgICAgfQorCSAgICAgICAg
cmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IEpTWE5vZGUuSlNYSWRlbnRpZmllcih0b2tl
bi52YWx1ZSkpOworCSAgICB9OworCSAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNYRWxl
bWVudE5hbWUgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRl
SlNYTm9kZSgpOworCSAgICAgICAgdmFyIGVsZW1lbnROYW1lID0gdGhpcy5wYXJzZUpTWElkZW50
aWZpZXIoKTsKKwkgICAgICAgIGlmICh0aGlzLm1hdGNoSlNYKCc6JykpIHsKKwkgICAgICAgICAg
ICB2YXIgbmFtZXNwYWNlID0gZWxlbWVudE5hbWU7CisJICAgICAgICAgICAgdGhpcy5leHBlY3RK
U1goJzonKTsKKwkgICAgICAgICAgICB2YXIgbmFtZV8xID0gdGhpcy5wYXJzZUpTWElkZW50aWZp
ZXIoKTsKKwkgICAgICAgICAgICBlbGVtZW50TmFtZSA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3
IEpTWE5vZGUuSlNYTmFtZXNwYWNlZE5hbWUobmFtZXNwYWNlLCBuYW1lXzEpKTsKKwkgICAgICAg
IH0KKwkgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2hKU1goJy4nKSkgeworCSAgICAgICAgICAg
IHdoaWxlICh0aGlzLm1hdGNoSlNYKCcuJykpIHsKKwkgICAgICAgICAgICAgICAgdmFyIG9iamVj
dCA9IGVsZW1lbnROYW1lOworCSAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdEpTWCgnLicpOwor
CSAgICAgICAgICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLnBhcnNlSlNYSWRlbnRpZmllcigp
OworCSAgICAgICAgICAgICAgICBlbGVtZW50TmFtZSA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3
IEpTWE5vZGUuSlNYTWVtYmVyRXhwcmVzc2lvbihvYmplY3QsIHByb3BlcnR5KSk7CisJICAgICAg
ICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIGVsZW1lbnROYW1lOworCSAgICB9
OworCSAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNYQXR0cmlidXRlTmFtZSA9IGZ1bmN0
aW9uICgpIHsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVKU1hOb2RlKCk7CisJICAg
ICAgICB2YXIgYXR0cmlidXRlTmFtZTsKKwkgICAgICAgIHZhciBpZGVudGlmaWVyID0gdGhpcy5w
YXJzZUpTWElkZW50aWZpZXIoKTsKKwkgICAgICAgIGlmICh0aGlzLm1hdGNoSlNYKCc6JykpIHsK
KwkgICAgICAgICAgICB2YXIgbmFtZXNwYWNlID0gaWRlbnRpZmllcjsKKwkgICAgICAgICAgICB0
aGlzLmV4cGVjdEpTWCgnOicpOworCSAgICAgICAgICAgIHZhciBuYW1lXzIgPSB0aGlzLnBhcnNl
SlNYSWRlbnRpZmllcigpOworCSAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWUgPSB0aGlzLmZpbmFs
aXplKG5vZGUsIG5ldyBKU1hOb2RlLkpTWE5hbWVzcGFjZWROYW1lKG5hbWVzcGFjZSwgbmFtZV8y
KSk7CisJICAgICAgICB9CisJICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICBhdHRyaWJ1dGVO
YW1lID0gaWRlbnRpZmllcjsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiBhdHRyaWJ1dGVO
YW1lOworCSAgICB9OworCSAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNYU3RyaW5nTGl0
ZXJhbEF0dHJpYnV0ZSA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5j
cmVhdGVKU1hOb2RlKCk7CisJICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLm5leHRKU1hUb2tlbigp
OworCSAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IHRva2VuXzEuVG9rZW4uU3RyaW5nTGl0ZXJh
bCkgeworCSAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pOworCSAg
ICAgICAgfQorCSAgICAgICAgdmFyIHJhdyA9IHRoaXMuZ2V0VG9rZW5SYXcodG9rZW4pOworCSAg
ICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuTGl0ZXJhbCh0b2tlbi52
YWx1ZSwgcmF3KSk7CisJICAgIH07CisJICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFyc2VKU1hF
eHByZXNzaW9uQXR0cmlidXRlID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIG5vZGUgPSB0
aGlzLmNyZWF0ZUpTWE5vZGUoKTsKKwkgICAgICAgIHRoaXMuZXhwZWN0SlNYKCd7Jyk7CisJICAg
ICAgICB0aGlzLmZpbmlzaEpTWCgpOworCSAgICAgICAgaWYgKHRoaXMubWF0Y2goJ30nKSkgewor
CSAgICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcignSlNYIGF0dHJpYnV0ZXMgbXVzdCBvbmx5
IGJlIGFzc2lnbmVkIGEgbm9uLWVtcHR5IGV4cHJlc3Npb24nKTsKKwkgICAgICAgIH0KKwkgICAg
ICAgIHZhciBleHByZXNzaW9uID0gdGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisJ
ICAgICAgICB0aGlzLnJlZW50ZXJKU1goKTsKKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXpl
KG5vZGUsIG5ldyBKU1hOb2RlLkpTWEV4cHJlc3Npb25Db250YWluZXIoZXhwcmVzc2lvbikpOwor
CSAgICB9OworCSAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNYQXR0cmlidXRlVmFsdWUg
PSBmdW5jdGlvbiAoKSB7CisJICAgICAgICByZXR1cm4gdGhpcy5tYXRjaEpTWCgneycpID8gdGhp
cy5wYXJzZUpTWEV4cHJlc3Npb25BdHRyaWJ1dGUoKSA6CisJICAgICAgICAgICAgdGhpcy5tYXRj
aEpTWCgnPCcpID8gdGhpcy5wYXJzZUpTWEVsZW1lbnQoKSA6IHRoaXMucGFyc2VKU1hTdHJpbmdM
aXRlcmFsQXR0cmlidXRlKCk7CisJICAgIH07CisJICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFy
c2VKU1hOYW1lVmFsdWVBdHRyaWJ1dGUgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9k
ZSA9IHRoaXMuY3JlYXRlSlNYTm9kZSgpOworCSAgICAgICAgdmFyIG5hbWUgPSB0aGlzLnBhcnNl
SlNYQXR0cmlidXRlTmFtZSgpOworCSAgICAgICAgdmFyIHZhbHVlID0gbnVsbDsKKwkgICAgICAg
IGlmICh0aGlzLm1hdGNoSlNYKCc9JykpIHsKKwkgICAgICAgICAgICB0aGlzLmV4cGVjdEpTWCgn
PScpOworCSAgICAgICAgICAgIHZhbHVlID0gdGhpcy5wYXJzZUpTWEF0dHJpYnV0ZVZhbHVlKCk7
CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNY
Tm9kZS5KU1hBdHRyaWJ1dGUobmFtZSwgdmFsdWUpKTsKKwkgICAgfTsKKwkgICAgSlNYUGFyc2Vy
LnByb3RvdHlwZS5wYXJzZUpTWFNwcmVhZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uICgpIHsKKwkgICAg
ICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVKU1hOb2RlKCk7CisJICAgICAgICB0aGlzLmV4cGVj
dEpTWCgneycpOworCSAgICAgICAgdGhpcy5leHBlY3RKU1goJy4uLicpOworCSAgICAgICAgdGhp
cy5maW5pc2hKU1goKTsKKwkgICAgICAgIHZhciBhcmd1bWVudCA9IHRoaXMucGFyc2VBc3NpZ25t
ZW50RXhwcmVzc2lvbigpOworCSAgICAgICAgdGhpcy5yZWVudGVySlNYKCk7CisJICAgICAgICBy
ZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hTcHJlYWRBdHRyaWJ1dGUo
YXJndW1lbnQpKTsKKwkgICAgfTsKKwkgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWEF0
dHJpYnV0ZXMgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgYXR0cmlidXRlcyA9IFtdOwor
CSAgICAgICAgd2hpbGUgKCF0aGlzLm1hdGNoSlNYKCcvJykgJiYgIXRoaXMubWF0Y2hKU1goJz4n
KSkgeworCSAgICAgICAgICAgIHZhciBhdHRyaWJ1dGUgPSB0aGlzLm1hdGNoSlNYKCd7JykgPyB0
aGlzLnBhcnNlSlNYU3ByZWFkQXR0cmlidXRlKCkgOgorCSAgICAgICAgICAgICAgICB0aGlzLnBh
cnNlSlNYTmFtZVZhbHVlQXR0cmlidXRlKCk7CisJICAgICAgICAgICAgYXR0cmlidXRlcy5wdXNo
KGF0dHJpYnV0ZSk7CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gYXR0cmlidXRlczsKKwkg
ICAgfTsKKwkgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWE9wZW5pbmdFbGVtZW50ID0g
ZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZUpTWE5vZGUoKTsK
KwkgICAgICAgIHRoaXMuZXhwZWN0SlNYKCc8Jyk7CisJICAgICAgICB2YXIgbmFtZSA9IHRoaXMu
cGFyc2VKU1hFbGVtZW50TmFtZSgpOworCSAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB0aGlzLnBh
cnNlSlNYQXR0cmlidXRlcygpOworCSAgICAgICAgdmFyIHNlbGZDbG9zaW5nID0gdGhpcy5tYXRj
aEpTWCgnLycpOworCSAgICAgICAgaWYgKHNlbGZDbG9zaW5nKSB7CisJICAgICAgICAgICAgdGhp
cy5leHBlY3RKU1goJy8nKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHRoaXMuZXhwZWN0SlNYKCc+
Jyk7CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hP
cGVuaW5nRWxlbWVudChuYW1lLCBzZWxmQ2xvc2luZywgYXR0cmlidXRlcykpOworCSAgICB9Owor
CSAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNYQm91bmRhcnlFbGVtZW50ID0gZnVuY3Rp
b24gKCkgeworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZUpTWE5vZGUoKTsKKwkgICAg
ICAgIHRoaXMuZXhwZWN0SlNYKCc8Jyk7CisJICAgICAgICBpZiAodGhpcy5tYXRjaEpTWCgnLycp
KSB7CisJICAgICAgICAgICAgdGhpcy5leHBlY3RKU1goJy8nKTsKKwkgICAgICAgICAgICB2YXIg
bmFtZV8zID0gdGhpcy5wYXJzZUpTWEVsZW1lbnROYW1lKCk7CisJICAgICAgICAgICAgdGhpcy5l
eHBlY3RKU1goJz4nKTsKKwkgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBu
ZXcgSlNYTm9kZS5KU1hDbG9zaW5nRWxlbWVudChuYW1lXzMpKTsKKwkgICAgICAgIH0KKwkgICAg
ICAgIHZhciBuYW1lID0gdGhpcy5wYXJzZUpTWEVsZW1lbnROYW1lKCk7CisJICAgICAgICB2YXIg
YXR0cmlidXRlcyA9IHRoaXMucGFyc2VKU1hBdHRyaWJ1dGVzKCk7CisJICAgICAgICB2YXIgc2Vs
ZkNsb3NpbmcgPSB0aGlzLm1hdGNoSlNYKCcvJyk7CisJICAgICAgICBpZiAoc2VsZkNsb3Npbmcp
IHsKKwkgICAgICAgICAgICB0aGlzLmV4cGVjdEpTWCgnLycpOworCSAgICAgICAgfQorCSAgICAg
ICAgdGhpcy5leHBlY3RKU1goJz4nKTsKKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5v
ZGUsIG5ldyBKU1hOb2RlLkpTWE9wZW5pbmdFbGVtZW50KG5hbWUsIHNlbGZDbG9zaW5nLCBhdHRy
aWJ1dGVzKSk7CisJICAgIH07CisJICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFyc2VKU1hFbXB0
eUV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3Jl
YXRlSlNYQ2hpbGROb2RlKCk7CisJICAgICAgICB0aGlzLmNvbGxlY3RDb21tZW50cygpOworCSAg
ICAgICAgdGhpcy5sYXN0TWFya2VyLmluZGV4ID0gdGhpcy5zY2FubmVyLmluZGV4OworCSAgICAg
ICAgdGhpcy5sYXN0TWFya2VyLmxpbmVOdW1iZXIgPSB0aGlzLnNjYW5uZXIubGluZU51bWJlcjsK
KwkgICAgICAgIHRoaXMubGFzdE1hcmtlci5saW5lU3RhcnQgPSB0aGlzLnNjYW5uZXIubGluZVN0
YXJ0OworCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IEpTWE5vZGUuSlNY
RW1wdHlFeHByZXNzaW9uKCkpOworCSAgICB9OworCSAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBh
cnNlSlNYRXhwcmVzc2lvbkNvbnRhaW5lciA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBu
b2RlID0gdGhpcy5jcmVhdGVKU1hOb2RlKCk7CisJICAgICAgICB0aGlzLmV4cGVjdEpTWCgneycp
OworCSAgICAgICAgdmFyIGV4cHJlc3Npb247CisJICAgICAgICBpZiAodGhpcy5tYXRjaEpTWCgn
fScpKSB7CisJICAgICAgICAgICAgZXhwcmVzc2lvbiA9IHRoaXMucGFyc2VKU1hFbXB0eUV4cHJl
c3Npb24oKTsKKwkgICAgICAgICAgICB0aGlzLmV4cGVjdEpTWCgnfScpOworCSAgICAgICAgfQor
CSAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgdGhpcy5maW5pc2hKU1goKTsKKwkgICAgICAg
ICAgICBleHByZXNzaW9uID0gdGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisJICAg
ICAgICAgICAgdGhpcy5yZWVudGVySlNYKCk7CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4g
dGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hFeHByZXNzaW9uQ29udGFpbmVyKGV4
cHJlc3Npb24pKTsKKwkgICAgfTsKKwkgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWENo
aWxkcmVuID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIGNoaWxkcmVuID0gW107CisJICAg
ICAgICB3aGlsZSAoIXRoaXMuc2Nhbm5lci5lb2YoKSkgeworCSAgICAgICAgICAgIHZhciBub2Rl
ID0gdGhpcy5jcmVhdGVKU1hDaGlsZE5vZGUoKTsKKwkgICAgICAgICAgICB2YXIgdG9rZW4gPSB0
aGlzLm5leHRKU1hUZXh0KCk7CisJICAgICAgICAgICAgaWYgKHRva2VuLnN0YXJ0IDwgdG9rZW4u
ZW5kKSB7CisJICAgICAgICAgICAgICAgIHZhciByYXcgPSB0aGlzLmdldFRva2VuUmF3KHRva2Vu
KTsKKwkgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcg
SlNYTm9kZS5KU1hUZXh0KHRva2VuLnZhbHVlLCByYXcpKTsKKwkgICAgICAgICAgICAgICAgY2hp
bGRyZW4ucHVzaChjaGlsZCk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGlmICh0aGlz
LnNjYW5uZXIuc291cmNlW3RoaXMuc2Nhbm5lci5pbmRleF0gPT09ICd7JykgeworCSAgICAgICAg
ICAgICAgICB2YXIgY29udGFpbmVyID0gdGhpcy5wYXJzZUpTWEV4cHJlc3Npb25Db250YWluZXIo
KTsKKwkgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjb250YWluZXIpOworCSAgICAgICAg
ICAgIH0KKwkgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAg
ICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIGNoaWxkcmVuOworCSAgICB9
OworCSAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlQ29tcGxleEpTWEVsZW1lbnQgPSBmdW5j
dGlvbiAoZWwpIHsKKwkgICAgICAgIHZhciBzdGFjayA9IFtdOworCSAgICAgICAgd2hpbGUgKCF0
aGlzLnNjYW5uZXIuZW9mKCkpIHsKKwkgICAgICAgICAgICBlbC5jaGlsZHJlbiA9IGVsLmNoaWxk
cmVuLmNvbmNhdCh0aGlzLnBhcnNlSlNYQ2hpbGRyZW4oKSk7CisJICAgICAgICAgICAgdmFyIG5v
ZGUgPSB0aGlzLmNyZWF0ZUpTWENoaWxkTm9kZSgpOworCSAgICAgICAgICAgIHZhciBlbGVtZW50
ID0gdGhpcy5wYXJzZUpTWEJvdW5kYXJ5RWxlbWVudCgpOworCSAgICAgICAgICAgIGlmIChlbGVt
ZW50LnR5cGUgPT09IGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNYT3BlbmluZ0VsZW1lbnQpIHsK
KwkgICAgICAgICAgICAgICAgdmFyIG9wZW5pbmcgPSAoZWxlbWVudCk7CisJICAgICAgICAgICAg
ICAgIGlmIChvcGVuaW5nLnNlbGZDbG9zaW5nKSB7CisJICAgICAgICAgICAgICAgICAgICB2YXIg
Y2hpbGQgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBKU1hOb2RlLkpTWEVsZW1lbnQob3Blbmlu
ZywgW10sIG51bGwpKTsKKwkgICAgICAgICAgICAgICAgICAgIGVsLmNoaWxkcmVuLnB1c2goY2hp
bGQpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGVsc2UgeworCSAgICAg
ICAgICAgICAgICAgICAgc3RhY2sucHVzaChlbCk7CisJICAgICAgICAgICAgICAgICAgICBlbCA9
IHsgbm9kZTogbm9kZSwgb3BlbmluZzogb3BlbmluZywgY2xvc2luZzogbnVsbCwgY2hpbGRyZW46
IFtdIH07CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAg
aWYgKGVsZW1lbnQudHlwZSA9PT0ganN4X3N5bnRheF8xLkpTWFN5bnRheC5KU1hDbG9zaW5nRWxl
bWVudCkgeworCSAgICAgICAgICAgICAgICBlbC5jbG9zaW5nID0gKGVsZW1lbnQpOworCSAgICAg
ICAgICAgICAgICB2YXIgb3Blbl8xID0gZ2V0UXVhbGlmaWVkRWxlbWVudE5hbWUoZWwub3Blbmlu
Zy5uYW1lKTsKKwkgICAgICAgICAgICAgICAgdmFyIGNsb3NlXzEgPSBnZXRRdWFsaWZpZWRFbGVt
ZW50TmFtZShlbC5jbG9zaW5nLm5hbWUpOworCSAgICAgICAgICAgICAgICBpZiAob3Blbl8xICE9
PSBjbG9zZV8xKSB7CisJICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IoJ0V4
cGVjdGVkIGNvcnJlc3BvbmRpbmcgSlNYIGNsb3NpbmcgdGFnIGZvciAlMCcsIG9wZW5fMSk7CisJ
ICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA+IDAp
IHsKKwkgICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuZmluYWxpemUoZWwubm9k
ZSwgbmV3IEpTWE5vZGUuSlNYRWxlbWVudChlbC5vcGVuaW5nLCBlbC5jaGlsZHJlbiwgZWwuY2xv
c2luZykpOworCSAgICAgICAgICAgICAgICAgICAgZWwgPSBzdGFja1tzdGFjay5sZW5ndGggLSAx
XTsKKwkgICAgICAgICAgICAgICAgICAgIGVsLmNoaWxkcmVuLnB1c2goY2hpbGQpOworCSAgICAg
ICAgICAgICAgICAgICAgc3RhY2sucG9wKCk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAg
ICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAg
ICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiBlbDsK
KwkgICAgfTsKKwkgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWEVsZW1lbnQgPSBmdW5j
dGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlSlNYTm9kZSgpOworCSAg
ICAgICAgdmFyIG9wZW5pbmcgPSB0aGlzLnBhcnNlSlNYT3BlbmluZ0VsZW1lbnQoKTsKKwkgICAg
ICAgIHZhciBjaGlsZHJlbiA9IFtdOworCSAgICAgICAgdmFyIGNsb3NpbmcgPSBudWxsOworCSAg
ICAgICAgaWYgKCFvcGVuaW5nLnNlbGZDbG9zaW5nKSB7CisJICAgICAgICAgICAgdmFyIGVsID0g
dGhpcy5wYXJzZUNvbXBsZXhKU1hFbGVtZW50KHsgbm9kZTogbm9kZSwgb3BlbmluZzogb3Blbmlu
ZywgY2xvc2luZzogY2xvc2luZywgY2hpbGRyZW46IGNoaWxkcmVuIH0pOworCSAgICAgICAgICAg
IGNoaWxkcmVuID0gZWwuY2hpbGRyZW47CisJICAgICAgICAgICAgY2xvc2luZyA9IGVsLmNsb3Np
bmc7CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcg
SlNYTm9kZS5KU1hFbGVtZW50KG9wZW5pbmcsIGNoaWxkcmVuLCBjbG9zaW5nKSk7CisJICAgIH07
CisJICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFyc2VKU1hSb290ID0gZnVuY3Rpb24gKCkgewor
CSAgICAgICAgLy8gUG9wIHRoZSBvcGVuaW5nICc8JyBhZGRlZCBmcm9tIHRoZSBsb29rYWhlYWQu
CisJICAgICAgICBpZiAodGhpcy5jb25maWcudG9rZW5zKSB7CisJICAgICAgICAgICAgdGhpcy50
b2tlbnMucG9wKCk7CisJICAgICAgICB9CisJICAgICAgICB0aGlzLnN0YXJ0SlNYKCk7CisJICAg
ICAgICB2YXIgZWxlbWVudCA9IHRoaXMucGFyc2VKU1hFbGVtZW50KCk7CisJICAgICAgICB0aGlz
LmZpbmlzaEpTWCgpOworCSAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisJICAgIH07CisJICAgIHJl
dHVybiBKU1hQYXJzZXI7CisJfShwYXJzZXJfMS5QYXJzZXIpKTsKKwlleHBvcnRzLkpTWFBhcnNl
ciA9IEpTWFBhcnNlcjsKKworCisvKioqLyB9LAorLyogMTIgKi8KKy8qKiovIGZ1bmN0aW9uKG1v
ZHVsZSwgZXhwb3J0cykgeworCisJLy8gR2VuZXJhdGVkIGJ5IGdlbmVyYXRlLXhodG1sLWVudGl0
aWVzLmpzLiBETyBOT1QgTU9ESUZZIQorCSJ1c2Ugc3RyaWN0IjsKKwlleHBvcnRzLlhIVE1MRW50
aXRpZXMgPSB7CisJICAgIHF1b3Q6ICdcdTAwMjInLAorCSAgICBhbXA6ICdcdTAwMjYnLAorCSAg
ICBhcG9zOiAnXHUwMDI3JywKKwkgICAgZ3Q6ICdcdTAwM0UnLAorCSAgICBuYnNwOiAnXHUwMEEw
JywKKwkgICAgaWV4Y2w6ICdcdTAwQTEnLAorCSAgICBjZW50OiAnXHUwMEEyJywKKwkgICAgcG91
bmQ6ICdcdTAwQTMnLAorCSAgICBjdXJyZW46ICdcdTAwQTQnLAorCSAgICB5ZW46ICdcdTAwQTUn
LAorCSAgICBicnZiYXI6ICdcdTAwQTYnLAorCSAgICBzZWN0OiAnXHUwMEE3JywKKwkgICAgdW1s
OiAnXHUwMEE4JywKKwkgICAgY29weTogJ1x1MDBBOScsCisJICAgIG9yZGY6ICdcdTAwQUEnLAor
CSAgICBsYXF1bzogJ1x1MDBBQicsCisJICAgIG5vdDogJ1x1MDBBQycsCisJICAgIHNoeTogJ1x1
MDBBRCcsCisJICAgIHJlZzogJ1x1MDBBRScsCisJICAgIG1hY3I6ICdcdTAwQUYnLAorCSAgICBk
ZWc6ICdcdTAwQjAnLAorCSAgICBwbHVzbW46ICdcdTAwQjEnLAorCSAgICBzdXAyOiAnXHUwMEIy
JywKKwkgICAgc3VwMzogJ1x1MDBCMycsCisJICAgIGFjdXRlOiAnXHUwMEI0JywKKwkgICAgbWlj
cm86ICdcdTAwQjUnLAorCSAgICBwYXJhOiAnXHUwMEI2JywKKwkgICAgbWlkZG90OiAnXHUwMEI3
JywKKwkgICAgY2VkaWw6ICdcdTAwQjgnLAorCSAgICBzdXAxOiAnXHUwMEI5JywKKwkgICAgb3Jk
bTogJ1x1MDBCQScsCisJICAgIHJhcXVvOiAnXHUwMEJCJywKKwkgICAgZnJhYzE0OiAnXHUwMEJD
JywKKwkgICAgZnJhYzEyOiAnXHUwMEJEJywKKwkgICAgZnJhYzM0OiAnXHUwMEJFJywKKwkgICAg
aXF1ZXN0OiAnXHUwMEJGJywKKwkgICAgQWdyYXZlOiAnXHUwMEMwJywKKwkgICAgQWFjdXRlOiAn
XHUwMEMxJywKKwkgICAgQWNpcmM6ICdcdTAwQzInLAorCSAgICBBdGlsZGU6ICdcdTAwQzMnLAor
CSAgICBBdW1sOiAnXHUwMEM0JywKKwkgICAgQXJpbmc6ICdcdTAwQzUnLAorCSAgICBBRWxpZzog
J1x1MDBDNicsCisJICAgIENjZWRpbDogJ1x1MDBDNycsCisJICAgIEVncmF2ZTogJ1x1MDBDOCcs
CisJICAgIEVhY3V0ZTogJ1x1MDBDOScsCisJICAgIEVjaXJjOiAnXHUwMENBJywKKwkgICAgRXVt
bDogJ1x1MDBDQicsCisJICAgIElncmF2ZTogJ1x1MDBDQycsCisJICAgIElhY3V0ZTogJ1x1MDBD
RCcsCisJICAgIEljaXJjOiAnXHUwMENFJywKKwkgICAgSXVtbDogJ1x1MDBDRicsCisJICAgIEVU
SDogJ1x1MDBEMCcsCisJICAgIE50aWxkZTogJ1x1MDBEMScsCisJICAgIE9ncmF2ZTogJ1x1MDBE
MicsCisJICAgIE9hY3V0ZTogJ1x1MDBEMycsCisJICAgIE9jaXJjOiAnXHUwMEQ0JywKKwkgICAg
T3RpbGRlOiAnXHUwMEQ1JywKKwkgICAgT3VtbDogJ1x1MDBENicsCisJICAgIHRpbWVzOiAnXHUw
MEQ3JywKKwkgICAgT3NsYXNoOiAnXHUwMEQ4JywKKwkgICAgVWdyYXZlOiAnXHUwMEQ5JywKKwkg
ICAgVWFjdXRlOiAnXHUwMERBJywKKwkgICAgVWNpcmM6ICdcdTAwREInLAorCSAgICBVdW1sOiAn
XHUwMERDJywKKwkgICAgWWFjdXRlOiAnXHUwMEREJywKKwkgICAgVEhPUk46ICdcdTAwREUnLAor
CSAgICBzemxpZzogJ1x1MDBERicsCisJICAgIGFncmF2ZTogJ1x1MDBFMCcsCisJICAgIGFhY3V0
ZTogJ1x1MDBFMScsCisJICAgIGFjaXJjOiAnXHUwMEUyJywKKwkgICAgYXRpbGRlOiAnXHUwMEUz
JywKKwkgICAgYXVtbDogJ1x1MDBFNCcsCisJICAgIGFyaW5nOiAnXHUwMEU1JywKKwkgICAgYWVs
aWc6ICdcdTAwRTYnLAorCSAgICBjY2VkaWw6ICdcdTAwRTcnLAorCSAgICBlZ3JhdmU6ICdcdTAw
RTgnLAorCSAgICBlYWN1dGU6ICdcdTAwRTknLAorCSAgICBlY2lyYzogJ1x1MDBFQScsCisJICAg
IGV1bWw6ICdcdTAwRUInLAorCSAgICBpZ3JhdmU6ICdcdTAwRUMnLAorCSAgICBpYWN1dGU6ICdc
dTAwRUQnLAorCSAgICBpY2lyYzogJ1x1MDBFRScsCisJICAgIGl1bWw6ICdcdTAwRUYnLAorCSAg
ICBldGg6ICdcdTAwRjAnLAorCSAgICBudGlsZGU6ICdcdTAwRjEnLAorCSAgICBvZ3JhdmU6ICdc
dTAwRjInLAorCSAgICBvYWN1dGU6ICdcdTAwRjMnLAorCSAgICBvY2lyYzogJ1x1MDBGNCcsCisJ
ICAgIG90aWxkZTogJ1x1MDBGNScsCisJICAgIG91bWw6ICdcdTAwRjYnLAorCSAgICBkaXZpZGU6
ICdcdTAwRjcnLAorCSAgICBvc2xhc2g6ICdcdTAwRjgnLAorCSAgICB1Z3JhdmU6ICdcdTAwRjkn
LAorCSAgICB1YWN1dGU6ICdcdTAwRkEnLAorCSAgICB1Y2lyYzogJ1x1MDBGQicsCisJICAgIHV1
bWw6ICdcdTAwRkMnLAorCSAgICB5YWN1dGU6ICdcdTAwRkQnLAorCSAgICB0aG9ybjogJ1x1MDBG
RScsCisJICAgIHl1bWw6ICdcdTAwRkYnLAorCSAgICBPRWxpZzogJ1x1MDE1MicsCisJICAgIG9l
bGlnOiAnXHUwMTUzJywKKwkgICAgU2Nhcm9uOiAnXHUwMTYwJywKKwkgICAgc2Nhcm9uOiAnXHUw
MTYxJywKKwkgICAgWXVtbDogJ1x1MDE3OCcsCisJICAgIGZub2Y6ICdcdTAxOTInLAorCSAgICBj
aXJjOiAnXHUwMkM2JywKKwkgICAgdGlsZGU6ICdcdTAyREMnLAorCSAgICBBbHBoYTogJ1x1MDM5
MScsCisJICAgIEJldGE6ICdcdTAzOTInLAorCSAgICBHYW1tYTogJ1x1MDM5MycsCisJICAgIERl
bHRhOiAnXHUwMzk0JywKKwkgICAgRXBzaWxvbjogJ1x1MDM5NScsCisJICAgIFpldGE6ICdcdTAz
OTYnLAorCSAgICBFdGE6ICdcdTAzOTcnLAorCSAgICBUaGV0YTogJ1x1MDM5OCcsCisJICAgIElv
dGE6ICdcdTAzOTknLAorCSAgICBLYXBwYTogJ1x1MDM5QScsCisJICAgIExhbWJkYTogJ1x1MDM5
QicsCisJICAgIE11OiAnXHUwMzlDJywKKwkgICAgTnU6ICdcdTAzOUQnLAorCSAgICBYaTogJ1x1
MDM5RScsCisJICAgIE9taWNyb246ICdcdTAzOUYnLAorCSAgICBQaTogJ1x1MDNBMCcsCisJICAg
IFJobzogJ1x1MDNBMScsCisJICAgIFNpZ21hOiAnXHUwM0EzJywKKwkgICAgVGF1OiAnXHUwM0E0
JywKKwkgICAgVXBzaWxvbjogJ1x1MDNBNScsCisJICAgIFBoaTogJ1x1MDNBNicsCisJICAgIENo
aTogJ1x1MDNBNycsCisJICAgIFBzaTogJ1x1MDNBOCcsCisJICAgIE9tZWdhOiAnXHUwM0E5JywK
KwkgICAgYWxwaGE6ICdcdTAzQjEnLAorCSAgICBiZXRhOiAnXHUwM0IyJywKKwkgICAgZ2FtbWE6
ICdcdTAzQjMnLAorCSAgICBkZWx0YTogJ1x1MDNCNCcsCisJICAgIGVwc2lsb246ICdcdTAzQjUn
LAorCSAgICB6ZXRhOiAnXHUwM0I2JywKKwkgICAgZXRhOiAnXHUwM0I3JywKKwkgICAgdGhldGE6
ICdcdTAzQjgnLAorCSAgICBpb3RhOiAnXHUwM0I5JywKKwkgICAga2FwcGE6ICdcdTAzQkEnLAor
CSAgICBsYW1iZGE6ICdcdTAzQkInLAorCSAgICBtdTogJ1x1MDNCQycsCisJICAgIG51OiAnXHUw
M0JEJywKKwkgICAgeGk6ICdcdTAzQkUnLAorCSAgICBvbWljcm9uOiAnXHUwM0JGJywKKwkgICAg
cGk6ICdcdTAzQzAnLAorCSAgICByaG86ICdcdTAzQzEnLAorCSAgICBzaWdtYWY6ICdcdTAzQzIn
LAorCSAgICBzaWdtYTogJ1x1MDNDMycsCisJICAgIHRhdTogJ1x1MDNDNCcsCisJICAgIHVwc2ls
b246ICdcdTAzQzUnLAorCSAgICBwaGk6ICdcdTAzQzYnLAorCSAgICBjaGk6ICdcdTAzQzcnLAor
CSAgICBwc2k6ICdcdTAzQzgnLAorCSAgICBvbWVnYTogJ1x1MDNDOScsCisJICAgIHRoZXRhc3lt
OiAnXHUwM0QxJywKKwkgICAgdXBzaWg6ICdcdTAzRDInLAorCSAgICBwaXY6ICdcdTAzRDYnLAor
CSAgICBlbnNwOiAnXHUyMDAyJywKKwkgICAgZW1zcDogJ1x1MjAwMycsCisJICAgIHRoaW5zcDog
J1x1MjAwOScsCisJICAgIHp3bmo6ICdcdTIwMEMnLAorCSAgICB6d2o6ICdcdTIwMEQnLAorCSAg
ICBscm06ICdcdTIwMEUnLAorCSAgICBybG06ICdcdTIwMEYnLAorCSAgICBuZGFzaDogJ1x1MjAx
MycsCisJICAgIG1kYXNoOiAnXHUyMDE0JywKKwkgICAgbHNxdW86ICdcdTIwMTgnLAorCSAgICBy
c3F1bzogJ1x1MjAxOScsCisJICAgIHNicXVvOiAnXHUyMDFBJywKKwkgICAgbGRxdW86ICdcdTIw
MUMnLAorCSAgICByZHF1bzogJ1x1MjAxRCcsCisJICAgIGJkcXVvOiAnXHUyMDFFJywKKwkgICAg
ZGFnZ2VyOiAnXHUyMDIwJywKKwkgICAgRGFnZ2VyOiAnXHUyMDIxJywKKwkgICAgYnVsbDogJ1x1
MjAyMicsCisJICAgIGhlbGxpcDogJ1x1MjAyNicsCisJICAgIHBlcm1pbDogJ1x1MjAzMCcsCisJ
ICAgIHByaW1lOiAnXHUyMDMyJywKKwkgICAgUHJpbWU6ICdcdTIwMzMnLAorCSAgICBsc2FxdW86
ICdcdTIwMzknLAorCSAgICByc2FxdW86ICdcdTIwM0EnLAorCSAgICBvbGluZTogJ1x1MjAzRScs
CisJICAgIGZyYXNsOiAnXHUyMDQ0JywKKwkgICAgZXVybzogJ1x1MjBBQycsCisJICAgIGltYWdl
OiAnXHUyMTExJywKKwkgICAgd2VpZXJwOiAnXHUyMTE4JywKKwkgICAgcmVhbDogJ1x1MjExQycs
CisJICAgIHRyYWRlOiAnXHUyMTIyJywKKwkgICAgYWxlZnN5bTogJ1x1MjEzNScsCisJICAgIGxh
cnI6ICdcdTIxOTAnLAorCSAgICB1YXJyOiAnXHUyMTkxJywKKwkgICAgcmFycjogJ1x1MjE5Mics
CisJICAgIGRhcnI6ICdcdTIxOTMnLAorCSAgICBoYXJyOiAnXHUyMTk0JywKKwkgICAgY3JhcnI6
ICdcdTIxQjUnLAorCSAgICBsQXJyOiAnXHUyMUQwJywKKwkgICAgdUFycjogJ1x1MjFEMScsCisJ
ICAgIHJBcnI6ICdcdTIxRDInLAorCSAgICBkQXJyOiAnXHUyMUQzJywKKwkgICAgaEFycjogJ1x1
MjFENCcsCisJICAgIGZvcmFsbDogJ1x1MjIwMCcsCisJICAgIHBhcnQ6ICdcdTIyMDInLAorCSAg
ICBleGlzdDogJ1x1MjIwMycsCisJICAgIGVtcHR5OiAnXHUyMjA1JywKKwkgICAgbmFibGE6ICdc
dTIyMDcnLAorCSAgICBpc2luOiAnXHUyMjA4JywKKwkgICAgbm90aW46ICdcdTIyMDknLAorCSAg
ICBuaTogJ1x1MjIwQicsCisJICAgIHByb2Q6ICdcdTIyMEYnLAorCSAgICBzdW06ICdcdTIyMTEn
LAorCSAgICBtaW51czogJ1x1MjIxMicsCisJICAgIGxvd2FzdDogJ1x1MjIxNycsCisJICAgIHJh
ZGljOiAnXHUyMjFBJywKKwkgICAgcHJvcDogJ1x1MjIxRCcsCisJICAgIGluZmluOiAnXHUyMjFF
JywKKwkgICAgYW5nOiAnXHUyMjIwJywKKwkgICAgYW5kOiAnXHUyMjI3JywKKwkgICAgb3I6ICdc
dTIyMjgnLAorCSAgICBjYXA6ICdcdTIyMjknLAorCSAgICBjdXA6ICdcdTIyMkEnLAorCSAgICBp
bnQ6ICdcdTIyMkInLAorCSAgICB0aGVyZTQ6ICdcdTIyMzQnLAorCSAgICBzaW06ICdcdTIyM0Mn
LAorCSAgICBjb25nOiAnXHUyMjQ1JywKKwkgICAgYXN5bXA6ICdcdTIyNDgnLAorCSAgICBuZTog
J1x1MjI2MCcsCisJICAgIGVxdWl2OiAnXHUyMjYxJywKKwkgICAgbGU6ICdcdTIyNjQnLAorCSAg
ICBnZTogJ1x1MjI2NScsCisJICAgIHN1YjogJ1x1MjI4MicsCisJICAgIHN1cDogJ1x1MjI4Mycs
CisJICAgIG5zdWI6ICdcdTIyODQnLAorCSAgICBzdWJlOiAnXHUyMjg2JywKKwkgICAgc3VwZTog
J1x1MjI4NycsCisJICAgIG9wbHVzOiAnXHUyMjk1JywKKwkgICAgb3RpbWVzOiAnXHUyMjk3JywK
KwkgICAgcGVycDogJ1x1MjJBNScsCisJICAgIHNkb3Q6ICdcdTIyQzUnLAorCSAgICBsY2VpbDog
J1x1MjMwOCcsCisJICAgIHJjZWlsOiAnXHUyMzA5JywKKwkgICAgbGZsb29yOiAnXHUyMzBBJywK
KwkgICAgcmZsb29yOiAnXHUyMzBCJywKKwkgICAgbG96OiAnXHUyNUNBJywKKwkgICAgc3BhZGVz
OiAnXHUyNjYwJywKKwkgICAgY2x1YnM6ICdcdTI2NjMnLAorCSAgICBoZWFydHM6ICdcdTI2NjUn
LAorCSAgICBkaWFtczogJ1x1MjY2NicsCisJICAgIGxhbmc6ICdcdTI3RTgnLAorCSAgICByYW5n
OiAnXHUyN0U5JworCX07CisKKworLyoqKi8gfSwKKy8qIDEzICovCisvKioqLyBmdW5jdGlvbiht
b2R1bGUsIGV4cG9ydHMpIHsKKworCSJ1c2Ugc3RyaWN0IjsKKwlleHBvcnRzLkpTWFN5bnRheCA9
IHsKKwkgICAgSlNYQXR0cmlidXRlOiAnSlNYQXR0cmlidXRlJywKKwkgICAgSlNYQ2xvc2luZ0Vs
ZW1lbnQ6ICdKU1hDbG9zaW5nRWxlbWVudCcsCisJICAgIEpTWEVsZW1lbnQ6ICdKU1hFbGVtZW50
JywKKwkgICAgSlNYRW1wdHlFeHByZXNzaW9uOiAnSlNYRW1wdHlFeHByZXNzaW9uJywKKwkgICAg
SlNYRXhwcmVzc2lvbkNvbnRhaW5lcjogJ0pTWEV4cHJlc3Npb25Db250YWluZXInLAorCSAgICBK
U1hJZGVudGlmaWVyOiAnSlNYSWRlbnRpZmllcicsCisJICAgIEpTWE1lbWJlckV4cHJlc3Npb246
ICdKU1hNZW1iZXJFeHByZXNzaW9uJywKKwkgICAgSlNYTmFtZXNwYWNlZE5hbWU6ICdKU1hOYW1l
c3BhY2VkTmFtZScsCisJICAgIEpTWE9wZW5pbmdFbGVtZW50OiAnSlNYT3BlbmluZ0VsZW1lbnQn
LAorCSAgICBKU1hTcHJlYWRBdHRyaWJ1dGU6ICdKU1hTcHJlYWRBdHRyaWJ1dGUnLAorCSAgICBK
U1hUZXh0OiAnSlNYVGV4dCcKKwl9OworCisKKy8qKiovIH0sCisvKiAxNCAqLworLyoqKi8gZnVu
Y3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKwkidXNlIHN0
cmljdCI7CisJdmFyIGpzeF9zeW50YXhfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpOworCXZh
ciBKU1hDbG9zaW5nRWxlbWVudCA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIEpTWENs
b3NpbmdFbGVtZW50KG5hbWUpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IGpzeF9zeW50YXhfMS5K
U1hTeW50YXguSlNYQ2xvc2luZ0VsZW1lbnQ7CisJICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwor
CSAgICB9CisJICAgIHJldHVybiBKU1hDbG9zaW5nRWxlbWVudDsKKwl9KCkpOworCWV4cG9ydHMu
SlNYQ2xvc2luZ0VsZW1lbnQgPSBKU1hDbG9zaW5nRWxlbWVudDsKKwl2YXIgSlNYRWxlbWVudCA9
IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIEpTWEVsZW1lbnQob3BlbmluZ0VsZW1lbnQs
IGNoaWxkcmVuLCBjbG9zaW5nRWxlbWVudCkgeworCSAgICAgICAgdGhpcy50eXBlID0ganN4X3N5
bnRheF8xLkpTWFN5bnRheC5KU1hFbGVtZW50OworCSAgICAgICAgdGhpcy5vcGVuaW5nRWxlbWVu
dCA9IG9wZW5pbmdFbGVtZW50OworCSAgICAgICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuOwor
CSAgICAgICAgdGhpcy5jbG9zaW5nRWxlbWVudCA9IGNsb3NpbmdFbGVtZW50OworCSAgICB9CisJ
ICAgIHJldHVybiBKU1hFbGVtZW50OworCX0oKSk7CisJZXhwb3J0cy5KU1hFbGVtZW50ID0gSlNY
RWxlbWVudDsKKwl2YXIgSlNYRW1wdHlFeHByZXNzaW9uID0gKGZ1bmN0aW9uICgpIHsKKwkgICAg
ZnVuY3Rpb24gSlNYRW1wdHlFeHByZXNzaW9uKCkgeworCSAgICAgICAgdGhpcy50eXBlID0ganN4
X3N5bnRheF8xLkpTWFN5bnRheC5KU1hFbXB0eUV4cHJlc3Npb247CisJICAgIH0KKwkgICAgcmV0
dXJuIEpTWEVtcHR5RXhwcmVzc2lvbjsKKwl9KCkpOworCWV4cG9ydHMuSlNYRW1wdHlFeHByZXNz
aW9uID0gSlNYRW1wdHlFeHByZXNzaW9uOworCXZhciBKU1hFeHByZXNzaW9uQ29udGFpbmVyID0g
KGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gSlNYRXhwcmVzc2lvbkNvbnRhaW5lcihleHBy
ZXNzaW9uKSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBqc3hfc3ludGF4XzEuSlNYU3ludGF4LkpT
WEV4cHJlc3Npb25Db250YWluZXI7CisJICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNz
aW9uOworCSAgICB9CisJICAgIHJldHVybiBKU1hFeHByZXNzaW9uQ29udGFpbmVyOworCX0oKSk7
CisJZXhwb3J0cy5KU1hFeHByZXNzaW9uQ29udGFpbmVyID0gSlNYRXhwcmVzc2lvbkNvbnRhaW5l
cjsKKwl2YXIgSlNYSWRlbnRpZmllciA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIEpT
WElkZW50aWZpZXIobmFtZSkgeworCSAgICAgICAgdGhpcy50eXBlID0ganN4X3N5bnRheF8xLkpT
WFN5bnRheC5KU1hJZGVudGlmaWVyOworCSAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKwkgICAg
fQorCSAgICByZXR1cm4gSlNYSWRlbnRpZmllcjsKKwl9KCkpOworCWV4cG9ydHMuSlNYSWRlbnRp
ZmllciA9IEpTWElkZW50aWZpZXI7CisJdmFyIEpTWE1lbWJlckV4cHJlc3Npb24gPSAoZnVuY3Rp
b24gKCkgeworCSAgICBmdW5jdGlvbiBKU1hNZW1iZXJFeHByZXNzaW9uKG9iamVjdCwgcHJvcGVy
dHkpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNYTWVt
YmVyRXhwcmVzc2lvbjsKKwkgICAgICAgIHRoaXMub2JqZWN0ID0gb2JqZWN0OworCSAgICAgICAg
dGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5OworCSAgICB9CisJICAgIHJldHVybiBKU1hNZW1iZXJF
eHByZXNzaW9uOworCX0oKSk7CisJZXhwb3J0cy5KU1hNZW1iZXJFeHByZXNzaW9uID0gSlNYTWVt
YmVyRXhwcmVzc2lvbjsKKwl2YXIgSlNYQXR0cmlidXRlID0gKGZ1bmN0aW9uICgpIHsKKwkgICAg
ZnVuY3Rpb24gSlNYQXR0cmlidXRlKG5hbWUsIHZhbHVlKSB7CisJICAgICAgICB0aGlzLnR5cGUg
PSBqc3hfc3ludGF4XzEuSlNYU3ludGF4LkpTWEF0dHJpYnV0ZTsKKwkgICAgICAgIHRoaXMubmFt
ZSA9IG5hbWU7CisJICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7CisJICAgIH0KKwkgICAgcmV0
dXJuIEpTWEF0dHJpYnV0ZTsKKwl9KCkpOworCWV4cG9ydHMuSlNYQXR0cmlidXRlID0gSlNYQXR0
cmlidXRlOworCXZhciBKU1hOYW1lc3BhY2VkTmFtZSA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1
bmN0aW9uIEpTWE5hbWVzcGFjZWROYW1lKG5hbWVzcGFjZSwgbmFtZSkgeworCSAgICAgICAgdGhp
cy50eXBlID0ganN4X3N5bnRheF8xLkpTWFN5bnRheC5KU1hOYW1lc3BhY2VkTmFtZTsKKwkgICAg
ICAgIHRoaXMubmFtZXNwYWNlID0gbmFtZXNwYWNlOworCSAgICAgICAgdGhpcy5uYW1lID0gbmFt
ZTsKKwkgICAgfQorCSAgICByZXR1cm4gSlNYTmFtZXNwYWNlZE5hbWU7CisJfSgpKTsKKwlleHBv
cnRzLkpTWE5hbWVzcGFjZWROYW1lID0gSlNYTmFtZXNwYWNlZE5hbWU7CisJdmFyIEpTWE9wZW5p
bmdFbGVtZW50ID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gSlNYT3BlbmluZ0VsZW1l
bnQobmFtZSwgc2VsZkNsb3NpbmcsIGF0dHJpYnV0ZXMpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9
IGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNYT3BlbmluZ0VsZW1lbnQ7CisJICAgICAgICB0aGlz
Lm5hbWUgPSBuYW1lOworCSAgICAgICAgdGhpcy5zZWxmQ2xvc2luZyA9IHNlbGZDbG9zaW5nOwor
CSAgICAgICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKKwkgICAgfQorCSAgICByZXR1
cm4gSlNYT3BlbmluZ0VsZW1lbnQ7CisJfSgpKTsKKwlleHBvcnRzLkpTWE9wZW5pbmdFbGVtZW50
ID0gSlNYT3BlbmluZ0VsZW1lbnQ7CisJdmFyIEpTWFNwcmVhZEF0dHJpYnV0ZSA9IChmdW5jdGlv
biAoKSB7CisJICAgIGZ1bmN0aW9uIEpTWFNwcmVhZEF0dHJpYnV0ZShhcmd1bWVudCkgeworCSAg
ICAgICAgdGhpcy50eXBlID0ganN4X3N5bnRheF8xLkpTWFN5bnRheC5KU1hTcHJlYWRBdHRyaWJ1
dGU7CisJICAgICAgICB0aGlzLmFyZ3VtZW50ID0gYXJndW1lbnQ7CisJICAgIH0KKwkgICAgcmV0
dXJuIEpTWFNwcmVhZEF0dHJpYnV0ZTsKKwl9KCkpOworCWV4cG9ydHMuSlNYU3ByZWFkQXR0cmli
dXRlID0gSlNYU3ByZWFkQXR0cmlidXRlOworCXZhciBKU1hUZXh0ID0gKGZ1bmN0aW9uICgpIHsK
KwkgICAgZnVuY3Rpb24gSlNYVGV4dCh2YWx1ZSwgcmF3KSB7CisJICAgICAgICB0aGlzLnR5cGUg
PSBqc3hfc3ludGF4XzEuSlNYU3ludGF4LkpTWFRleHQ7CisJICAgICAgICB0aGlzLnZhbHVlID0g
dmFsdWU7CisJICAgICAgICB0aGlzLnJhdyA9IHJhdzsKKwkgICAgfQorCSAgICByZXR1cm4gSlNY
VGV4dDsKKwl9KCkpOworCWV4cG9ydHMuSlNYVGV4dCA9IEpTWFRleHQ7CisKKworLyoqKi8gfSwK
Ky8qIDE1ICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1
aXJlX18pIHsKKworCSJ1c2Ugc3RyaWN0IjsKKwl2YXIgc2Nhbm5lcl8xID0gX193ZWJwYWNrX3Jl
cXVpcmVfXyg4KTsKKwl2YXIgZXJyb3JfaGFuZGxlcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2
KTsKKwl2YXIgdG9rZW5fMSA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7CisJdmFyIFJlYWRlciA9
IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIFJlYWRlcigpIHsKKwkgICAgICAgIHRoaXMu
dmFsdWVzID0gW107CisJICAgICAgICB0aGlzLmN1cmx5ID0gdGhpcy5wYXJlbiA9IC0xOworCSAg
ICB9CisJICAgIDsKKwkgICAgLy8gQSBmdW5jdGlvbiBmb2xsb3dpbmcgb25lIG9mIHRob3NlIHRv
a2VucyBpcyBhbiBleHByZXNzaW9uLgorCSAgICBSZWFkZXIucHJvdG90eXBlLmJlZm9yZUZ1bmN0
aW9uRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICh0KSB7CisJICAgICAgICByZXR1cm4gWycoJywgJ3sn
LCAnWycsICdpbicsICd0eXBlb2YnLCAnaW5zdGFuY2VvZicsICduZXcnLAorCSAgICAgICAgICAg
ICdyZXR1cm4nLCAnY2FzZScsICdkZWxldGUnLCAndGhyb3cnLCAndm9pZCcsCisJICAgICAgICAg
ICAgLy8gYXNzaWdubWVudCBvcGVyYXRvcnMKKwkgICAgICAgICAgICAnPScsICcrPScsICctPScs
ICcqPScsICcqKj0nLCAnLz0nLCAnJT0nLCAnPDw9JywgJz4+PScsICc+Pj49JywKKwkgICAgICAg
ICAgICAnJj0nLCAnfD0nLCAnXj0nLCAnLCcsCisJICAgICAgICAgICAgLy8gYmluYXJ5L3VuYXJ5
IG9wZXJhdG9ycworCSAgICAgICAgICAgICcrJywgJy0nLCAnKicsICcqKicsICcvJywgJyUnLCAn
KysnLCAnLS0nLCAnPDwnLCAnPj4nLCAnPj4+JywgJyYnLAorCSAgICAgICAgICAgICd8JywgJ14n
LCAnIScsICd+JywgJyYmJywgJ3x8JywgJz8nLCAnOicsICc9PT0nLCAnPT0nLCAnPj0nLAorCSAg
ICAgICAgICAgICc8PScsICc8JywgJz4nLCAnIT0nLCAnIT09J10uaW5kZXhPZih0KSA+PSAwOwor
CSAgICB9OworCSAgICA7CisJICAgIC8vIERldGVybWluZSBpZiBmb3J3YXJkIHNsYXNoICgvKSBp
cyBhbiBvcGVyYXRvciBvciBwYXJ0IG9mIGEgcmVndWxhciBleHByZXNzaW9uCisJICAgIC8vIGh0
dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3N3ZWV0LmpzL3dpa2kvZGVzaWduCisJICAgIFJlYWRl
ci5wcm90b3R5cGUuaXNSZWdleFN0YXJ0ID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIHBy
ZXZpb3VzID0gdGhpcy52YWx1ZXNbdGhpcy52YWx1ZXMubGVuZ3RoIC0gMV07CisJICAgICAgICB2
YXIgcmVnZXggPSAocHJldmlvdXMgIT09IG51bGwpOworCSAgICAgICAgc3dpdGNoIChwcmV2aW91
cykgeworCSAgICAgICAgICAgIGNhc2UgJ3RoaXMnOgorCSAgICAgICAgICAgIGNhc2UgJ10nOgor
CSAgICAgICAgICAgICAgICByZWdleCA9IGZhbHNlOworCSAgICAgICAgICAgICAgICBicmVhazsK
KwkgICAgICAgICAgICBjYXNlICcpJzoKKwkgICAgICAgICAgICAgICAgdmFyIGNoZWNrID0gdGhp
cy52YWx1ZXNbdGhpcy5wYXJlbiAtIDFdOworCSAgICAgICAgICAgICAgICByZWdleCA9IChjaGVj
ayA9PT0gJ2lmJyB8fCBjaGVjayA9PT0gJ3doaWxlJyB8fCBjaGVjayA9PT0gJ2ZvcicgfHwgY2hl
Y2sgPT09ICd3aXRoJyk7CisJICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIGNh
c2UgJ30nOgorCSAgICAgICAgICAgICAgICAvLyBEaXZpZGluZyBhIGZ1bmN0aW9uIGJ5IGFueXRo
aW5nIG1ha2VzIGxpdHRsZSBzZW5zZSwKKwkgICAgICAgICAgICAgICAgLy8gYnV0IHdlIGhhdmUg
dG8gY2hlY2sgZm9yIHRoYXQuCisJICAgICAgICAgICAgICAgIHJlZ2V4ID0gZmFsc2U7CisJICAg
ICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlc1t0aGlzLmN1cmx5IC0gM10gPT09ICdmdW5jdGlv
bicpIHsKKwkgICAgICAgICAgICAgICAgICAgIC8vIEFub255bW91cyBmdW5jdGlvbiwgZS5nLiBm
dW5jdGlvbigpe30gLzQyCisJICAgICAgICAgICAgICAgICAgICB2YXIgY2hlY2tfMSA9IHRoaXMu
dmFsdWVzW3RoaXMuY3VybHkgLSA0XTsKKwkgICAgICAgICAgICAgICAgICAgIHJlZ2V4ID0gY2hl
Y2tfMSA/ICF0aGlzLmJlZm9yZUZ1bmN0aW9uRXhwcmVzc2lvbihjaGVja18xKSA6IGZhbHNlOwor
CSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudmFsdWVz
W3RoaXMuY3VybHkgLSA0XSA9PT0gJ2Z1bmN0aW9uJykgeworCSAgICAgICAgICAgICAgICAgICAg
Ly8gTmFtZWQgZnVuY3Rpb24sIGUuZy4gZnVuY3Rpb24gZigpe30gLzQyLworCSAgICAgICAgICAg
ICAgICAgICAgdmFyIGNoZWNrXzIgPSB0aGlzLnZhbHVlc1t0aGlzLmN1cmx5IC0gNV07CisJICAg
ICAgICAgICAgICAgICAgICByZWdleCA9IGNoZWNrXzIgPyAhdGhpcy5iZWZvcmVGdW5jdGlvbkV4
cHJlc3Npb24oY2hlY2tfMikgOiB0cnVlOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICB9
CisJICAgICAgICByZXR1cm4gcmVnZXg7CisJICAgIH07CisJICAgIDsKKwkgICAgUmVhZGVyLnBy
b3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKHRva2VuKSB7CisJICAgICAgICBpZiAodG9rZW4udHlw
ZSA9PT0gdG9rZW5fMS5Ub2tlbi5QdW5jdHVhdG9yIHx8IHRva2VuLnR5cGUgPT09IHRva2VuXzEu
VG9rZW4uS2V5d29yZCkgeworCSAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PT0gJ3snKSB7
CisJICAgICAgICAgICAgICAgIHRoaXMuY3VybHkgPSB0aGlzLnZhbHVlcy5sZW5ndGg7CisJICAg
ICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuLnZhbHVlID09PSAnKCcpIHsK
KwkgICAgICAgICAgICAgICAgdGhpcy5wYXJlbiA9IHRoaXMudmFsdWVzLmxlbmd0aDsKKwkgICAg
ICAgICAgICB9CisJICAgICAgICAgICAgdGhpcy52YWx1ZXMucHVzaCh0b2tlbi52YWx1ZSk7CisJ
ICAgICAgICB9CisJICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICB0aGlzLnZhbHVlcy5wdXNo
KG51bGwpOworCSAgICAgICAgfQorCSAgICB9OworCSAgICA7CisJICAgIHJldHVybiBSZWFkZXI7
CisJfSgpKTsKKwl2YXIgVG9rZW5pemVyID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24g
VG9rZW5pemVyKGNvZGUsIGNvbmZpZykgeworCSAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIgPSBu
ZXcgZXJyb3JfaGFuZGxlcl8xLkVycm9ySGFuZGxlcigpOworCSAgICAgICAgdGhpcy5lcnJvckhh
bmRsZXIudG9sZXJhbnQgPSBjb25maWcgPyAodHlwZW9mIGNvbmZpZy50b2xlcmFudCA9PT0gJ2Jv
b2xlYW4nICYmIGNvbmZpZy50b2xlcmFudCkgOiBmYWxzZTsKKwkgICAgICAgIHRoaXMuc2Nhbm5l
ciA9IG5ldyBzY2FubmVyXzEuU2Nhbm5lcihjb2RlLCB0aGlzLmVycm9ySGFuZGxlcik7CisJICAg
ICAgICB0aGlzLnNjYW5uZXIudHJhY2tDb21tZW50ID0gY29uZmlnID8gKHR5cGVvZiBjb25maWcu
Y29tbWVudCA9PT0gJ2Jvb2xlYW4nICYmIGNvbmZpZy5jb21tZW50KSA6IGZhbHNlOworCSAgICAg
ICAgdGhpcy50cmFja1JhbmdlID0gY29uZmlnID8gKHR5cGVvZiBjb25maWcucmFuZ2UgPT09ICdi
b29sZWFuJyAmJiBjb25maWcucmFuZ2UpIDogZmFsc2U7CisJICAgICAgICB0aGlzLnRyYWNrTG9j
ID0gY29uZmlnID8gKHR5cGVvZiBjb25maWcubG9jID09PSAnYm9vbGVhbicgJiYgY29uZmlnLmxv
YykgOiBmYWxzZTsKKwkgICAgICAgIHRoaXMuYnVmZmVyID0gW107CisJICAgICAgICB0aGlzLnJl
YWRlciA9IG5ldyBSZWFkZXIoKTsKKwkgICAgfQorCSAgICA7CisJICAgIFRva2VuaXplci5wcm90
b3R5cGUuZXJyb3JzID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JI
YW5kbGVyLmVycm9yczsKKwkgICAgfTsKKwkgICAgOworCSAgICBUb2tlbml6ZXIucHJvdG90eXBl
LmdldE5leHRUb2tlbiA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIGlmICh0aGlzLmJ1ZmZlci5s
ZW5ndGggPT09IDApIHsKKwkgICAgICAgICAgICB2YXIgY29tbWVudHMgPSB0aGlzLnNjYW5uZXIu
c2NhbkNvbW1lbnRzKCk7CisJICAgICAgICAgICAgaWYgKHRoaXMuc2Nhbm5lci50cmFja0NvbW1l
bnQpIHsKKwkgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21tZW50cy5sZW5n
dGg7ICsraSkgeworCSAgICAgICAgICAgICAgICAgICAgdmFyIGUgPSBjb21tZW50c1tpXTsKKwkg
ICAgICAgICAgICAgICAgICAgIHZhciBjb21tZW50ID0gdm9pZCAwOworCSAgICAgICAgICAgICAg
ICAgICAgdmFyIHZhbHVlID0gdGhpcy5zY2FubmVyLnNvdXJjZS5zbGljZShlLnNsaWNlWzBdLCBl
LnNsaWNlWzFdKTsKKwkgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSB7CisJICAgICAgICAg
ICAgICAgICAgICAgICAgdHlwZTogZS5tdWx0aUxpbmUgPyAnQmxvY2tDb21tZW50JyA6ICdMaW5l
Q29tbWVudCcsCisJICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlCisJICAgICAg
ICAgICAgICAgICAgICB9OworCSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudHJhY2tSYW5n
ZSkgeworCSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQucmFuZ2UgPSBlLnJhbmdlOwor
CSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudHJh
Y2tMb2MpIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50LmxvYyA9IGUubG9jOwor
CSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXIu
cHVzaChjb21tZW50KTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAg
ICAgICAgICBpZiAoIXRoaXMuc2Nhbm5lci5lb2YoKSkgeworCSAgICAgICAgICAgICAgICB2YXIg
bG9jID0gdm9pZCAwOworCSAgICAgICAgICAgICAgICBpZiAodGhpcy50cmFja0xvYykgeworCSAg
ICAgICAgICAgICAgICAgICAgbG9jID0geworCSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0
OiB7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IHRoaXMuc2Nhbm5lci5saW5l
TnVtYmVyLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuc2Nhbm5l
ci5pbmRleCAtIHRoaXMuc2Nhbm5lci5saW5lU3RhcnQKKwkgICAgICAgICAgICAgICAgICAgICAg
ICB9LAorCSAgICAgICAgICAgICAgICAgICAgICAgIGVuZDoge30KKwkgICAgICAgICAgICAgICAg
ICAgIH07CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgdmFyIHRva2VuID0g
dm9pZCAwOworCSAgICAgICAgICAgICAgICBpZiAodGhpcy5zY2FubmVyLnNvdXJjZVt0aGlzLnNj
YW5uZXIuaW5kZXhdID09PSAnLycpIHsKKwkgICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhp
cy5yZWFkZXIuaXNSZWdleFN0YXJ0KCkgPyB0aGlzLnNjYW5uZXIuc2NhblJlZ0V4cCgpIDogdGhp
cy5zY2FubmVyLnNjYW5QdW5jdHVhdG9yKCk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAg
ICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuc2Nhbm5l
ci5sZXgoKTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICB0aGlzLnJlYWRl
ci5wdXNoKHRva2VuKTsKKwkgICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gdm9pZCAwOworCSAg
ICAgICAgICAgICAgICBlbnRyeSA9IHsKKwkgICAgICAgICAgICAgICAgICAgIHR5cGU6IHRva2Vu
XzEuVG9rZW5OYW1lW3Rva2VuLnR5cGVdLAorCSAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRo
aXMuc2Nhbm5lci5zb3VyY2Uuc2xpY2UodG9rZW4uc3RhcnQsIHRva2VuLmVuZCkKKwkgICAgICAg
ICAgICAgICAgfTsKKwkgICAgICAgICAgICAgICAgaWYgKHRoaXMudHJhY2tSYW5nZSkgeworCSAg
ICAgICAgICAgICAgICAgICAgZW50cnkucmFuZ2UgPSBbdG9rZW4uc3RhcnQsIHRva2VuLmVuZF07
CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgaWYgKHRoaXMudHJhY2tMb2Mp
IHsKKwkgICAgICAgICAgICAgICAgICAgIGxvYy5lbmQgPSB7CisJICAgICAgICAgICAgICAgICAg
ICAgICAgbGluZTogdGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsCisJICAgICAgICAgICAgICAgICAg
ICAgICAgY29sdW1uOiB0aGlzLnNjYW5uZXIuaW5kZXggLSB0aGlzLnNjYW5uZXIubGluZVN0YXJ0
CisJICAgICAgICAgICAgICAgICAgICB9OworCSAgICAgICAgICAgICAgICAgICAgZW50cnkubG9j
ID0gbG9jOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGlmICh0b2tlbi5y
ZWdleCkgeworCSAgICAgICAgICAgICAgICAgICAgZW50cnkucmVnZXggPSB0b2tlbi5yZWdleDsK
KwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlci5wdXNoKGVu
dHJ5KTsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gdGhpcy5i
dWZmZXIuc2hpZnQoKTsKKwkgICAgfTsKKwkgICAgOworCSAgICByZXR1cm4gVG9rZW5pemVyOwor
CX0oKSk7CisJZXhwb3J0cy5Ub2tlbml6ZXIgPSBUb2tlbml6ZXI7CisKKworLyoqKi8gfQorLyoq
KioqKi8gXSkKK30pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvTW9kZWxzL1NjcmlwdFN5bnRheFRyZWUuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0U3ludGF4VHJlZS5qcwppbmRleCAwNTA3MDI4Li5m
ZjhhZTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9N
b2RlbHMvU2NyaXB0U3ludGF4VHJlZS5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0U3ludGF4VHJlZS5qcwpAQCAtMzI3LDYgKzMyNyw5IEBA
IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlID0gY2xhc3MgU2NyaXB0U3ludGF4VHJlZSBl
eHRlbmRzIFdlYkluc3BlY3Rvci5PYmplCiAgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUu
bGVmdCwgY2FsbGJhY2ssIHN0YXRlKTsKICAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5y
aWdodCwgY2FsbGJhY2ssIHN0YXRlKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkF3YWl0RXhwcmVzc2lvbjoK
KyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5hcmd1bWVudCwgY2FsbGJhY2ssIHN0YXRl
KTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRT
eW50YXhUcmVlLk5vZGVUeXBlLkJsb2NrU3RhdGVtZW50OgogICAgICAgICAgICAgdGhpcy5fcmVj
dXJzZUFycmF5KG5vZGUuYm9keSwgY2FsbGJhY2ssIHN0YXRlKTsKICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMzgxLDcgKzM4NCw2IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlID0gY2xh
c3MgU2NyaXB0U3ludGF4VHJlZSBleHRlbmRzIFdlYkluc3BlY3Rvci5PYmplCiAgICAgICAgIGNh
c2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQXJyb3dGdW5jdGlvbkV4
cHJlc3Npb246CiAgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuaWQsIGNhbGxiYWNrLCBz
dGF0ZSk7CiAgICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5wYXJhbXMsIGNhbGxi
YWNrLCBzdGF0ZSk7Ci0gICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5kZWZhdWx0
cywgY2FsbGJhY2ssIHN0YXRlKTsKICAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5ib2R5
LCBjYWxsYmFjaywgc3RhdGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV2Vi
SW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuSWZTdGF0ZW1lbnQ6CkBAIC01MzQs
NyArNTM2LDYgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUgPSBjbGFzcyBTY3JpcHRT
eW50YXhUcmVlIGV4dGVuZHMgV2ViSW5zcGVjdG9yLk9iamUKICAgICAgICAgICAgICAgICB0eXBl
OiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5BcnJvd0Z1bmN0aW9uRXhw
cmVzc2lvbiwKICAgICAgICAgICAgICAgICBpZDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhU
cmVlKG5vZGUuaWQpLAogICAgICAgICAgICAgICAgIHBhcmFtczogbm9kZS5wYXJhbXMubWFwKHRo
aXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZSwgdGhpcyksCi0gICAgICAgICAgICAgICAgZGVm
YXVsdHM6IG5vZGUuZGVmYXVsdHMubWFwKHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZSwg
dGhpcyksCiAgICAgICAgICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhU
cmVlKG5vZGUuYm9keSksCiAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yOiBub2RlLmdlbmVyYXRv
ciwKICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBub2RlLmV4cHJlc3Npb24sIC8vIEJvb2xl
YW4gaW5kaWNhdGluZyBpZiB0aGUgYm9keSBhIHNpbmdsZSBleHByZXNzaW9uIG9yIGEgYmxvY2sg
c3RhdGVtZW50LgpAQCAtNTU2LDYgKzU1NywxMiBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4
VHJlZSA9IGNsYXNzIFNjcmlwdFN5bnRheFRyZWUgZXh0ZW5kcyBXZWJJbnNwZWN0b3IuT2JqZQog
ICAgICAgICAgICAgICAgIHJpZ2h0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9k
ZS5yaWdodCksCiAgICAgICAgICAgICB9OwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgIkF3YWl0RXhwcmVzc2lvbiI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAg
ICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQXdhaXRF
eHByZXNzaW9uLAorICAgICAgICAgICAgICAgIGFyZ3VtZW50OiB0aGlzLl9jcmVhdGVJbnRlcm5h
bFN5bnRheFRyZWUobm9kZS5hcmd1bWVudCksCisgICAgICAgICAgICB9OworICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgIkJsb2NrU3RhdGVtZW50IjoKICAgICAgICAgICAgIHJlc3Vs
dCA9IHsKICAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJl
ZS5Ob2RlVHlwZS5CbG9ja1N0YXRlbWVudCwKQEAgLTY3OSw3ICs2ODYsNiBAQCBXZWJJbnNwZWN0
b3IuU2NyaXB0U3ludGF4VHJlZSA9IGNsYXNzIFNjcmlwdFN5bnRheFRyZWUgZXh0ZW5kcyBXZWJJ
bnNwZWN0b3IuT2JqZQogICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRT
eW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9uRGVjbGFyYXRpb24sCiAgICAgICAgICAgICAgICAg
aWQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmlkKSwKICAgICAgICAgICAg
ICAgICBwYXJhbXM6IG5vZGUucGFyYW1zLm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRy
ZWUsIHRoaXMpLAotICAgICAgICAgICAgICAgIGRlZmF1bHRzOiBub2RlLmRlZmF1bHRzLm1hcCh0
aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUsIHRoaXMpLAogICAgICAgICAgICAgICAgIGJv
ZHk6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmJvZHkpLAogICAgICAgICAg
ICAgICAgIGdlbmVyYXRvcjogbm9kZS5nZW5lcmF0b3IsCiAgICAgICAgICAgICAgICAgdHlwZVBy
b2ZpbGluZ1JldHVybkRpdm90OiBub2RlLnJhbmdlWzBdCkBAIC02OTAsNyArNjk2LDYgQEAgV2Vi
SW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUgPSBjbGFzcyBTY3JpcHRTeW50YXhUcmVlIGV4dGVu
ZHMgV2ViSW5zcGVjdG9yLk9iamUKICAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3Iu
U2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5GdW5jdGlvbkV4cHJlc3Npb24sCiAgICAgICAgICAg
ICAgICAgaWQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmlkKSwKICAgICAg
ICAgICAgICAgICBwYXJhbXM6IG5vZGUucGFyYW1zLm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbFN5
bnRheFRyZWUsIHRoaXMpLAotICAgICAgICAgICAgICAgIGRlZmF1bHRzOiBub2RlLmRlZmF1bHRz
Lm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUsIHRoaXMpLAogICAgICAgICAgICAg
ICAgIGJvZHk6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmJvZHkpLAogICAg
ICAgICAgICAgICAgIGdlbmVyYXRvcjogbm9kZS5nZW5lcmF0b3IsCiAgICAgICAgICAgICAgICAg
dHlwZVByb2ZpbGluZ1JldHVybkRpdm90OiBub2RlLnJhbmdlWzBdIC8vIFRoaXMgbWF5IGJlIG92
ZXJyaWRkZW4gaW4gdGhlIFByb3BlcnR5IEFTVCBub2RlLgpAQCAtOTU1LDYgKzk2MCw3IEBAIFdl
Ykluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlID0gewogICAgIEFycm93RnVuY3Rp
b25FeHByZXNzaW9uOiBTeW1ib2woImFycm93LWZ1bmN0aW9uLWV4cHJlc3Npb24iKSwKICAgICBB
c3NpZ25tZW50RXhwcmVzc2lvbjogU3ltYm9sKCJhc3NpZ25tZW50LWV4cHJlc3Npb24iKSwKICAg
ICBBc3NpZ25tZW50UGF0dGVybjogU3ltYm9sKCJhc3NpZ25tZW50LXBhdHRlcm4iKSwKKyAgICBB
d2FpdEV4cHJlc3Npb246IFN5bWJvbCgiYXdhaXQtZXhwcmVzc2lvbiIpLAogICAgIEJpbmFyeUV4
cHJlc3Npb246IFN5bWJvbCgiYmluYXJ5LWV4cHJlc3Npb24iKSwKICAgICBCbG9ja1N0YXRlbWVu
dDogU3ltYm9sKCJibG9jay1zdGF0ZW1lbnQiKSwKICAgICBCcmVha1N0YXRlbWVudDogU3ltYm9s
KCJicmVhay1zdGF0ZW1lbnQiKSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL1dvcmtlcnMvRm9ybWF0dGVyL0VTVHJlZVdhbGtlci5qcyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1dvcmtlcnMvRm9ybWF0dGVyL0VTVHJlZVdhbGtl
ci5qcwppbmRleCBiZDVkZDkyLi42ZGViYWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Xb3JrZXJzL0Zvcm1hdHRlci9FU1RyZWVXYWxrZXIuanMKKysr
IGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvV29ya2Vycy9Gb3JtYXR0ZXIv
RVNUcmVlV2Fsa2VyLmpzCkBAIC04Niw2ICs4Niw5IEBAIEVTVHJlZVdhbGtlciA9IGNsYXNzIEVT
VHJlZVdhbGtlcgogICAgICAgICAgICAgdGhpcy5fd2Fsayhub2RlLmxlZnQsIG5vZGUpOwogICAg
ICAgICAgICAgdGhpcy5fd2Fsayhub2RlLnJpZ2h0LCBub2RlKTsKICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlICJBd2FpdEV4cHJlc3Npb24iOgorICAgICAgICAgICAgdGhpcy5fd2Fs
ayhub2RlLmFyZ3VtZW50LCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
ICJCbG9ja1N0YXRlbWVudCI6CiAgICAgICAgICAgICB0aGlzLl93YWxrQXJyYXkobm9kZS5ib2R5
LCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTM3LDkgKzE0MCw3IEBAIEVTVHJlZVdh
bGtlciA9IGNsYXNzIEVTVHJlZVdhbGtlcgogICAgICAgICBjYXNlICJGdW5jdGlvbkV4cHJlc3Np
b24iOgogICAgICAgICBjYXNlICJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiI6CiAgICAgICAgICAg
ICB0aGlzLl93YWxrKG5vZGUuaWQsIG5vZGUpOwotICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIHByb2JhYmx5IGl0ZXJhdGUgcGFyYW1zL2RlZmF1bHRzIGluIHNwZWNpYWwgb3JkZXIu
CiAgICAgICAgICAgICB0aGlzLl93YWxrQXJyYXkobm9kZS5wYXJhbXMsIG5vZGUpOwotICAgICAg
ICAgICAgdGhpcy5fd2Fsa0FycmF5KG5vZGUuZGVmYXVsdHMsIG5vZGUpOwogICAgICAgICAgICAg
dGhpcy5fd2Fsayhub2RlLmJvZHksIG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgIklmU3RhdGVtZW50IjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL1dvcmtlcnMvRm9ybWF0dGVyL0VzcHJpbWFGb3JtYXR0ZXIuanMgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Xb3JrZXJzL0Zvcm1hdHRlci9Fc3ByaW1h
Rm9ybWF0dGVyLmpzCmluZGV4IDljZGMxNmYuLmIwMGFiNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1dvcmtlcnMvRm9ybWF0dGVyL0VzcHJpbWFGb3Jt
YXR0ZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvV29ya2Vy
cy9Gb3JtYXR0ZXIvRXNwcmltYUZvcm1hdHRlci5qcwpAQCAtMjA5LDExICsyMDksMTkgQEAgRXNw
cmltYUZvcm1hdHRlciA9IGNsYXNzIEVzcHJpbWFGb3JtYXR0ZXIKICAgICAgICAgbGV0IHRva2Vu
T2Zmc2V0ID0gdG9rZW4ucmFuZ2VbMF07CiAKICAgICAgICAgLy8gVmVyeSBjb21tb24gdHlwZXMg
dGhhdCBqdXN0IHBhc3MgdGhyb3VnaC4KLSAgICAgICAgaWYgKG5vZGVUeXBlID09PSAiSWRlbnRp
ZmllciIgfHwgbm9kZVR5cGUgPT09ICJNZW1iZXJFeHByZXNzaW9uIiB8fCBub2RlVHlwZSA9PT0g
IkxpdGVyYWwiIHx8IG5vZGVUeXBlID09PSAiVGhpc0V4cHJlc3Npb24iIHx8IG5vZGVUeXBlID09
PSAiVXBkYXRlRXhwcmVzc2lvbiIpIHsKKyAgICAgICAgaWYgKG5vZGVUeXBlID09PSAiTWVtYmVy
RXhwcmVzc2lvbiIgfHwgbm9kZVR5cGUgPT09ICJMaXRlcmFsIiB8fCBub2RlVHlwZSA9PT0gIlRo
aXNFeHByZXNzaW9uIiB8fCBub2RlVHlwZSA9PT0gIlVwZGF0ZUV4cHJlc3Npb24iKSB7CiAgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZFRva2VuKHRva2VuVmFsdWUsIHRva2VuT2Zmc2V0KTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCisgICAgICAgIC8vIE1vc3QgaWRlbnRpZmll
cnMganVzdCBwYXNzIHRocm91Z2gsIGJ1dCBhIGZldyBhcmUgc3BlY2lhbC4KKyAgICAgICAgaWYg
KG5vZGVUeXBlID09PSAiSWRlbnRpZmllciIpIHsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
VG9rZW4odG9rZW5WYWx1ZSwgdG9rZW5PZmZzZXQpOworICAgICAgICAgICAgaWYgKHRva2VuVmFs
dWUgPT09ICJhc3luYyIgJiYgbm9kZS5wYXJlbnQudHlwZSA9PT0gIlByb3BlcnR5IiAmJiBub2Rl
LnBhcmVudC52YWx1ZS5hc3luYyAmJiB0b2tlbi5yYW5nZVsxXSAhPT0gbm9kZS5yYW5nZVsxXSkK
KyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFNwYWNlKCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKwogICAgICAgICAvLyBNb3N0IG5ld2xpbmUgaGFuZGxpbmcgaXMgZG9u
ZSB3aXRoIHNlbWljb2xvbnMuIEhvd2V2ZXIsIHdlIHByZXNlcnZlCiAgICAgICAgIC8vIG5ld2xp
bmVzIHNvIGNvZGUgcmVseWluZyBvbiBhdXRvbWF0aWMgc2VtaWNvbG9uIGluc2VydGlvbiBzaG91
bGQKICAgICAgICAgLy8gY29udGludWUgdG8gd29yay4KQEAgLTQyNiw2ICs0MzQsMTEgQEAgRXNw
cmltYUZvcm1hdHRlciA9IGNsYXNzIEVzcHJpbWFGb3JtYXR0ZXIKICAgICAgICAgICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmRTcGFjZSgpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0b2tlblR5cGUgPT09ICJJZGVudGlmaWVyIiAmJiB0
b2tlblZhbHVlID09PSAiYXN5bmMiKSB7CisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRU
b2tlbih0b2tlblZhbHVlLCB0b2tlbk9mZnNldCk7CisgICAgICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmRTcGFjZSgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kVG9rZW4odG9rZW5WYWx1ZSwgdG9rZW5PZmZzZXQpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC02NjEsNiArNjc0LDE1IEBAIEVzcHJp
bWFGb3JtYXR0ZXIgPSBjbGFzcyBFc3ByaW1hRm9ybWF0dGVyCiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRUb2tlbih0b2tlblZhbHVl
LCB0b2tlbk9mZnNldCk7CisgICAgICAgICAgICBpZiAodG9rZW5UeXBlID09PSAiSWRlbnRpZmll
ciIgJiYgdG9rZW5WYWx1ZSA9PT0gImFzeW5jIikKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFw
cGVuZFNwYWNlKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBp
ZiAobm9kZVR5cGUgPT09ICJBd2FpdEV4cHJlc3Npb24iKSB7CisgICAgICAgICAgICBidWlsZGVy
LmFwcGVuZFRva2VuKHRva2VuVmFsdWUsIHRva2VuT2Zmc2V0KTsKKyAgICAgICAgICAgIGlmICh0
b2tlblR5cGUgPT09ICJJZGVudGlmaWVyIiAmJiB0b2tlblZhbHVlID09PSAiYXdhaXQiKQorICAg
ICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kU3BhY2UoKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCkBAIC03NTksNyArNzgxLDcgQEAgRXNwcmltYUZvcm1hdHRlciA9IGNsYXNz
IEVzcHJpbWFGb3JtYXR0ZXIKICAgICAgICAgfQogCiAgICAgICAgIGlmIChub2RlVHlwZSA9PT0g
Ik1ldGhvZERlZmluaXRpb24iKSB7Ci0gICAgICAgICAgICBjb25zb2xlLmFzc2VydCh0b2tlblZh
bHVlID09PSAic3RhdGljIiB8fCB0b2tlblZhbHVlID09PSAiZ2V0IiB8fCB0b2tlblZhbHVlID09
PSAic2V0IiB8fCB0b2tlblZhbHVlID09PSAiKiIsIHRva2VuKTsKKyAgICAgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KHRva2VuVmFsdWUgPT09ICJzdGF0aWMiIHx8IHRva2VuVmFsdWUgPT09ICJhc3lu
YyIgfHwgdG9rZW5WYWx1ZSA9PT0gImdldCIgfHwgdG9rZW5WYWx1ZSA9PT0gInNldCIgfHwgdG9r
ZW5WYWx1ZSA9PT0gIioiLCB0b2tlbik7CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFRva2Vu
KHRva2VuVmFsdWUsIHRva2VuT2Zmc2V0KTsKICAgICAgICAgICAgIGlmICh0b2tlblZhbHVlICE9
PSAiKiIpCiAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRTcGFjZSgpOwpAQCAtODEwLDcg
KzgzMiw4IEBAIEVzcHJpbWFGb3JtYXR0ZXIgPSBjbGFzcyBFc3ByaW1hRm9ybWF0dGVyCiAgICAg
ICAgICAgICB8fCBub2RlVHlwZSA9PT0gIlJlc3RFbGVtZW50IgogICAgICAgICAgICAgfHwgbm9k
ZVR5cGUgPT09ICJUZW1wbGF0ZUVsZW1lbnQiCiAgICAgICAgICAgICB8fCBub2RlVHlwZSA9PT0g
IlRlbXBsYXRlTGl0ZXJhbCIKLSAgICAgICAgICAgIHx8IG5vZGVUeXBlID09PSAiRGVidWdnZXJT
dGF0ZW1lbnQiKSB7CisgICAgICAgICAgICB8fCBub2RlVHlwZSA9PT0gIkRlYnVnZ2VyU3RhdGVt
ZW50IgorICAgICAgICAgICAgfHwgbm9kZVR5cGUgPT09ICJBc3NpZ25tZW50UGF0dGVybiIpIHsK
ICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kVG9rZW4odG9rZW5WYWx1ZSwgdG9rZW5PZmZzZXQp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Cg==
</data>
<flag name="review"
          id="317612"
          type_id="1"
          status="-"
          setter="joepeck"
    />
    <flag name="commit-queue"
          id="317613"
          type_id="3"
          status="-"
          setter="joepeck"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294969</attachid>
            <date>2016-11-16 13:18:32 -0800</date>
            <delta_ts>2016-11-16 14:34:55 -0800</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>esprima-3.patch</filename>
            <type>text/plain</type>
            <size>506329</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAzM2JhODViLi5mZTEyMjE0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTYtMTEt
MTYgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIg
SW5zcGVjdG9yOiBVcGRhdGUgRXNwcmltYSB0byBzdXBwb3J0IG5ldyBmZWF0dXJlcyAvIHN5bnRh
eCAoKiosIGFzeW5jL2F3YWl0LCB0cmFpbGluZyBjb21tYSkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDgzMAorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vMjkyOTM4MTQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBpbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy9h
cnJvdy1mdW5jdGlvbnMtZXhwZWN0ZWQuanM6CisgICAgICAgICogaW5zcGVjdG9yL2Zvcm1hdHRp
bmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvYXJyb3ctZnVuY3Rpb25zLmpzOgorICAgICAg
ICAqIGluc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL2NsYXNz
ZXMtZXhwZWN0ZWQuanM6CisgICAgICAgICogaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2Vz
L2phdmFzY3JpcHQtdGVzdHMvY2xhc3Nlcy5qczoKKyAgICAgICAgKiBpbnNwZWN0b3IvZm9ybWF0
dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy9mdW5jdGlvbnMtZXhwZWN0ZWQuanM6Cisg
ICAgICAgICogaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMv
ZnVuY3Rpb25zLmpzOgorICAgICAgICAqIGluc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9q
YXZhc2NyaXB0LXRlc3RzL290aGVyLXN0YXRlbWVudHMtZXhwZWN0ZWQuanM6CisgICAgICAgICog
aW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvb3RoZXItc3Rh
dGVtZW50cy5qczoKKyAgICAgICAgKiBpbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2
YXNjcmlwdC10ZXN0cy91bmFyeS1iaW5hcnktZXhwcmVzc2lvbnMtZXhwZWN0ZWQuanM6CisgICAg
ICAgICogaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvdW5h
cnktYmluYXJ5LWV4cHJlc3Npb25zLmpzOgorICAgICAgICAqIGluc3BlY3Rvci9tb2RlbC9wYXJz
ZS1zY3JpcHQtc3ludGF4LXRyZWUtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGluc3BlY3Rvci9t
b2RlbC9wYXJzZS1zY3JpcHQtc3ludGF4LXRyZWUuaHRtbDoKKyAgICAgICAgQ292ZXJhZ2UgZm9y
IG5ldyBzdXBwb3J0ZWQgc3ludGF4LgorCiAyMDE2LTExLTE1ICBKb3NlcGggUGVjb3Jhcm8gIDxw
ZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogUHJldmlldyBvdGhl
ciBDU1MgQG1lZGlhIGluIGJyb3dzZXIgd2luZG93IChwcmludCkKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL2Fy
cm93LWZ1bmN0aW9ucy1leHBlY3RlZC5qcyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0
aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL2Fycm93LWZ1bmN0aW9ucy1leHBlY3RlZC5q
cwppbmRleCBhZWM4YjFjLi43ZTY2ZDVlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy9hcnJvdy1mdW5jdGlvbnMt
ZXhwZWN0ZWQuanMKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3Vy
Y2VzL2phdmFzY3JpcHQtdGVzdHMvYXJyb3ctZnVuY3Rpb25zLWV4cGVjdGVkLmpzCkBAIC0yOSwz
ICsyOSwxMSBAQCBzZXRUaW1lb3V0KCgpID0+IHsKIH0pOwogCiBmb28oKGE9MSwgLi4ucmVzdCkg
PT4gcmVzdFthXSk7CisKK2ZvbygoYT0xLCBiKSA9PiBiKTsKKworZm9vKChhPTEsIGIsICkgPT4g
Yik7CisKK2FzeW5jIHggPT4geAorYXN5bmMgKHgpID0+IHgKK2FzeW5jICh4KSA9PiB7eH0KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZh
c2NyaXB0LXRlc3RzL2Fycm93LWZ1bmN0aW9ucy5qcyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9m
b3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL2Fycm93LWZ1bmN0aW9ucy5qcwpp
bmRleCA5YzZkYTk2Li5lNmVkZmRlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
Zm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy9hcnJvdy1mdW5jdGlvbnMuanMK
KysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3Jp
cHQtdGVzdHMvYXJyb3ctZnVuY3Rpb25zLmpzCkBAIC0xOSwzICsxOSwxMSBAQCB4PT57eCo9eDt4
fTsKIHNldFRpbWVvdXQoKCk9PnsxOzI7M30pOwogCiBmb28oKGE9MSwuLi5yZXN0KT0+cmVzdFth
XSk7CisKK2ZvbygoYT0xLGIpPT5iKTsKKworZm9vKChhPTEsYiwpPT5iKTsKKworYXN5bmMgeD0+
eAorYXN5bmMoeCk9PngKK2FzeW5jKHgpPT57eH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL2NsYXNzZXMtZXhw
ZWN0ZWQuanMgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2
YXNjcmlwdC10ZXN0cy9jbGFzc2VzLWV4cGVjdGVkLmpzCmluZGV4IDlmNjhhNjQuLmEwNGY3NmUg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9q
YXZhc2NyaXB0LXRlc3RzL2NsYXNzZXMtZXhwZWN0ZWQuanMKKysrIGIvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvY2xhc3Nlcy1leHBl
Y3RlZC5qcwpAQCAtNzksNiArNzksMTAgQEAgY2xhc3MgRm9vIGV4dGVuZHMgQmFyIHsKICAgICB7
CiAgICAgICAgIDEKICAgICB9CisgICAgYXN5bmMgYSgpCisgICAgeworICAgICAgICAxCisgICAg
fQogfQogCiBBID0gY2xhc3MgRm9vIGV4dGVuZHMgKGIgPyBCYXIgOiBCYXIpIHsKQEAgLTExNCw0
ICsxMTgsMjMgQEAgQSA9IGNsYXNzIEZvbyBleHRlbmRzIChiID8gQmFyIDogQmFyKSB7CiAgICAg
ewogICAgICAgICAxCiAgICAgfQorICAgIGFzeW5jIGEoKQorICAgIHsKKyAgICAgICAgMQorICAg
IH0KK30KKworY2xhc3MgRm9vIHsKKyAgICBzdGF0aWMgYXN5bmMgYXN5bmMoKQorICAgIHsKKyAg
ICAgICAgMQorICAgIH0KKyAgICBhc3luYyBhc3luYygpCisgICAgeworICAgICAgICAxCisgICAg
fQorICAgIGFzeW5jKCkKKyAgICB7CisgICAgICAgIDEKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0
cy9jbGFzc2VzLmpzIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2Vz
L2phdmFzY3JpcHQtdGVzdHMvY2xhc3Nlcy5qcwppbmRleCA2MDU4ZGI5Li5mMDYxNjEwIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNj
cmlwdC10ZXN0cy9jbGFzc2VzLmpzCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0
aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL2NsYXNzZXMuanMKQEAgLTEzLDYgKzEzLDgg
QEAgY2xhc3MgRm9vIGV4dGVuZHMgQmFye2NvbnN0cnVjdG9yKCl7c3VwZXIoKX19CiAKIGNsYXNz
IEZvbyBleHRlbmRzIEJhcntjb25zdHJ1Y3RvcigpezF9c3RhdGljIHN0YXRpY01ldGhvZCgpe3N1
cGVyLnN0YXRpY01ldGhvZCgpfX0KIAotY2xhc3MgRm9vIGV4dGVuZHMgQmFye2NvbnN0cnVjdG9y
KCl7MX1zdGF0aWMgc3RhdGljTWV0aG9kKCl7c3VwZXIuc3RhdGljTWV0aG9kKCl9bWV0aG9kMSgp
ezF9bWV0aG9kMihuYW1lLHtvcHRpb25zfSl7MX1nZXQgZ2V0dGVyKCl7MX1zZXQgc2V0dGVyKHgp
ezF9KmdlbjEoKXsxfSogZ2VuMigpezF9fQorY2xhc3MgRm9vIGV4dGVuZHMgQmFye2NvbnN0cnVj
dG9yKCl7MX1zdGF0aWMgc3RhdGljTWV0aG9kKCl7c3VwZXIuc3RhdGljTWV0aG9kKCl9bWV0aG9k
MSgpezF9bWV0aG9kMihuYW1lLHtvcHRpb25zfSl7MX1nZXQgZ2V0dGVyKCl7MX1zZXQgc2V0dGVy
KHgpezF9KmdlbjEoKXsxfSogZ2VuMigpezF9YXN5bmMgYSgpezF9fQogCi1BID0gY2xhc3MgRm9v
IGV4dGVuZHMoYj9CYXI6QmFyKXtjb25zdHJ1Y3Rvcigpe25ldy50YXJnZXQuc3RhdGljTWV0aG9k
KCl9c3RhdGljIHN0YXRpY01ldGhvZCgpe3N1cGVyLnN0YXRpY01ldGhvZCgpfW1ldGhvZDEoKXsx
fW1ldGhvZDIobmFtZSx7b3B0aW9uc30pe3N1cGVyLm1ldGhvZCgpfWdldCBnZXR0ZXIoKXsxfXNl
dCBzZXR0ZXIoeCl7MX0qZ2VuMSgpezF9KiBnZW4yKCl7MX19CitBID0gY2xhc3MgRm9vIGV4dGVu
ZHMoYj9CYXI6QmFyKXtjb25zdHJ1Y3Rvcigpe25ldy50YXJnZXQuc3RhdGljTWV0aG9kKCl9c3Rh
dGljIHN0YXRpY01ldGhvZCgpe3N1cGVyLnN0YXRpY01ldGhvZCgpfW1ldGhvZDEoKXsxfW1ldGhv
ZDIobmFtZSx7b3B0aW9uc30pe3N1cGVyLm1ldGhvZCgpfWdldCBnZXR0ZXIoKXsxfXNldCBzZXR0
ZXIoeCl7MX0qZ2VuMSgpezF9KiBnZW4yKCl7MX1hc3luYyBhKCl7MX19CisKK2NsYXNzIEZvb3tz
dGF0aWMgYXN5bmMgYXN5bmMoKXsxfWFzeW5jIGFzeW5jKCl7MX1hc3luYygpezF9fQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3Jp
cHQtdGVzdHMvZnVuY3Rpb25zLWV4cGVjdGVkLmpzIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zv
cm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvZnVuY3Rpb25zLWV4cGVjdGVkLmpz
CmluZGV4IDFhMzA2NTcuLmEzZTZjYzMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL2Z1bmN0aW9ucy1leHBlY3Rl
ZC5qcworKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2
YXNjcmlwdC10ZXN0cy9mdW5jdGlvbnMtZXhwZWN0ZWQuanMKQEAgLTIsNiArMiw4IEBACiAKIGZv
bygpOwogZm9vKDEpOworZm9vKDEsIDIpOworZm9vKDEsIDIsICk7CiBmb28oMSwgMiwgMyk7CiBm
b28oZm9vKDEpKTsKIGZvbyhmb28oMSksIGZvbygyLCAzKSk7CkBAIC03OSw2ICs4MSwxMCBAQCBm
dW5jdGlvbiBmb28oW2EsIGJdKSB7CiAgICAgMQogfQogCitmdW5jdGlvbiBmb28oW2EsIGIsIF0p
IHsKKyAgICAxCit9CisKIC8vIE1ldGhvZHMKIAogbyA9IHsKQEAgLTg3LDcgKzkzLDggQEAgbyA9
IHsKICAgICBnZXQgZ2V0dGVyKCkge30sCiAgICAgc2V0IHNldHRlcih4KSB7fSwKICAgICAqZ2Vu
MSgpIHt9LAotICAgICpnZW4yKCkge30KKyAgICAqZ2VuMigpIHt9LAorICAgIGFzeW5jIGEoKSB7
fQogfQogCiBvID0gewpAQCAtMTA4LDYgKzExNSw5IEBAIG8gPSB7CiAgICAgfSwKICAgICAqZ2Vu
MigpIHsKICAgICAgICAgMQorICAgIH0sCisgICAgYXN5bmMgYSgpIHsKKyAgICAgICAgMQogICAg
IH0KIH0KIC8vIE11bHRpcGxlIC8gTmVzdGVkCkBAIC0xMjIsMyArMTMyLDE4IEBAIGZ1bmN0aW9u
IG91dGVyKCkgewogICAgIH0KICAgICAzCiB9CisKKy8vIEFzeW5jIC8gQXdhaXQKKworYXN5bmMg
ZnVuY3Rpb24gZm9vKCkge30KK2FzeW5jIGZ1bmN0aW9uIGZvbygpIHsKKyAgICAxCit9Cithc3lu
YyBmdW5jdGlvbiBmb28oKSB7CisgICAgYXdhaXQgZm9vKCkKK30KK28gPSB7CisgICAgYXN5bmMg
YXN5bmMoKSB7fSwKKyAgICBhc3luYygpIHt9LAorICAgIGFzeW5jOiAxCit9OwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQt
dGVzdHMvZnVuY3Rpb25zLmpzIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVz
b3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvZnVuY3Rpb25zLmpzCmluZGV4IGY5ZGNiNGYuLjFmZjM4
NzEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNl
cy9qYXZhc2NyaXB0LXRlc3RzL2Z1bmN0aW9ucy5qcworKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy9mdW5jdGlvbnMuanMKQEAg
LTIsNiArMiw4IEBACiAKIGZvbygpOwogZm9vKDEpOworZm9vKDEsMik7Citmb28oMSwyLCk7CiBm
b28oMSwyLDMpOwogZm9vKGZvbygxKSk7CiBmb28oZm9vKDEpLGZvbygyLDMpKTsKQEAgLTQ1LDE0
ICs0NywyMyBAQCBmdW5jdGlvbiBmb28oe2EsYn0pezF9CiAKIGZ1bmN0aW9uIGZvbyhbYSxiXSl7
MX0KIAorZnVuY3Rpb24gZm9vKFthLGIsXSl7MX0KKwogLy8gTWV0aG9kcwogCi1vID0ge3Byb3A6
ZnVuY3Rpb24oKXt9LG1ldGhvZCgpe30sZ2V0IGdldHRlcigpe30sc2V0IHNldHRlcih4KXt9LCpn
ZW4xKCl7fSwqIGdlbjIoKXt9fQorbz17cHJvcDpmdW5jdGlvbigpe30sbWV0aG9kKCl7fSxnZXQg
Z2V0dGVyKCl7fSxzZXQgc2V0dGVyKHgpe30sKmdlbjEoKXt9LCogZ2VuMigpe30sIGFzeW5jIGEo
KXt9fQogCi1vID0ge3Byb3A6ZnVuY3Rpb24oKXsxfSxtZXRob2QoKXsxfSxnZXQgZ2V0dGVyKCl7
MX0sc2V0IHNldHRlcih4KXsxfSwqZ2VuMSgpezF9LCogZ2VuMigpezF9fQorbz17cHJvcDpmdW5j
dGlvbigpezF9LG1ldGhvZCgpezF9LGdldCBnZXR0ZXIoKXsxfSxzZXQgc2V0dGVyKHgpezF9LCpn
ZW4xKCl7MX0sKiBnZW4yKCl7MX0sIGFzeW5jIGEoKXsxfX0KIAogLy8gTXVsdGlwbGUgLyBOZXN0
ZWQKIAogZnVuY3Rpb24gZigpe31mdW5jdGlvbiBmKCl7fQogCiBmdW5jdGlvbiBvdXRlcigpezE7
ZnVuY3Rpb24gaW5uZXIoKXsyfTN9CisKKy8vIEFzeW5jIC8gQXdhaXQKKworYXN5bmMgZnVuY3Rp
b24gZm9vKCl7fQorYXN5bmMgZnVuY3Rpb24gZm9vKCl7MX0KK2FzeW5jIGZ1bmN0aW9uIGZvbygp
e2F3YWl0IGZvbygpfQorbz17YXN5bmMgYXN5bmMoKXt9LGFzeW5jKCl7fSxhc3luYzoxfTsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZh
c2NyaXB0LXRlc3RzL290aGVyLXN0YXRlbWVudHMtZXhwZWN0ZWQuanMgYi9MYXlvdXRUZXN0cy9p
bnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy9vdGhlci1zdGF0
ZW1lbnRzLWV4cGVjdGVkLmpzCmluZGV4IDllMDA3NWQuLmJiMWUyOTYgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3Rz
L290aGVyLXN0YXRlbWVudHMtZXhwZWN0ZWQuanMKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvb3RoZXItc3RhdGVtZW50cy1l
eHBlY3RlZC5qcwpAQCAtOCw1ICs4LDkgQEAgdGhyb3cgewogICAgIGE6IDEKIH07CiAKK2RlbGV0
ZSB4OworZGVsZXRlIHguYTsKK2RlbGV0ZSB4WzBdOworCiBkZWJ1Z2dlcgogZGVidWdnZXI7CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2
YXNjcmlwdC10ZXN0cy9vdGhlci1zdGF0ZW1lbnRzLmpzIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvb3RoZXItc3RhdGVtZW50cy5q
cwppbmRleCBiOTUzODFhLi44NmE4NGZjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy9vdGhlci1zdGF0ZW1lbnRz
LmpzCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZh
c2NyaXB0LXRlc3RzL290aGVyLXN0YXRlbWVudHMuanMKQEAgLTYsNSArNiw5IEBAIHRocm93Ingi
OwogdGhyb3cgbmV3IHg7CiB0aHJvdyB7YToxfTsKIAorZGVsZXRlIHg7CitkZWxldGUgeC5hOwor
ZGVsZXRlIHhbMF07CisKIGRlYnVnZ2VyCiBkZWJ1Z2dlcjsKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL3VuYXJ5
LWJpbmFyeS1leHByZXNzaW9ucy1leHBlY3RlZC5qcyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9m
b3JtYXR0aW5nL3Jlc291cmNlcy9qYXZhc2NyaXB0LXRlc3RzL3VuYXJ5LWJpbmFyeS1leHByZXNz
aW9ucy1leHBlY3RlZC5qcwppbmRleCAwZGJiNDVjLi4yMjdmOGE4IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy91
bmFyeS1iaW5hcnktZXhwcmVzc2lvbnMtZXhwZWN0ZWQuanMKKysrIGIvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvdW5hcnktYmluYXJ5
LWV4cHJlc3Npb25zLWV4cGVjdGVkLmpzCkBAIC00MSw2ICs0MSw3IEBAIHggPSB7CiAgICAgZDog
MSwKICAgICBzOiBzCiB9OworeCA9IHggKiogMjsKIAogYSA8IGI7CiBhID4gYjsKQEAgLTUzLDYg
KzU0LDEyIEBAIGEgIT09IGI7CiAhYSAhPSAhYjsKICEhYSAhPSAhIWI7CiAKK3ggKz0geDsKK3gg
Kj0geDsKK3ggPDw9IHg7Cit4ICoqPSB4OworeCAlPSB4OworCiB2b2lkIDA7CiB2b2lkICgwKTsK
IHZvaWQgKDApOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcv
cmVzb3VyY2VzL2phdmFzY3JpcHQtdGVzdHMvdW5hcnktYmluYXJ5LWV4cHJlc3Npb25zLmpzIGIv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Zvcm1hdHRpbmcvcmVzb3VyY2VzL2phdmFzY3JpcHQtdGVz
dHMvdW5hcnktYmluYXJ5LWV4cHJlc3Npb25zLmpzCmluZGV4IDAzNDVjYWQuLmQwNjgyZjYgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9mb3JtYXR0aW5nL3Jlc291cmNlcy9qYXZh
c2NyaXB0LXRlc3RzL3VuYXJ5LWJpbmFyeS1leHByZXNzaW9ucy5qcworKysgYi9MYXlvdXRUZXN0
cy9pbnNwZWN0b3IvZm9ybWF0dGluZy9yZXNvdXJjZXMvamF2YXNjcmlwdC10ZXN0cy91bmFyeS1i
aW5hcnktZXhwcmVzc2lvbnMuanMKQEAgLTM1LDYgKzM1LDcgQEAgeD0xPyArMTotczsKIHg9KDE/
ICsxOi1zKTsKIHg9WzE/IC0xOitzXTsKIHg9e2E6LTEsYjorMSxjOjEtMSxkOjEsczpzfTsKK3g9
eCoqMjsKIAogYTxiOwogYT5iOwpAQCAtNDcsNiArNDgsMTIgQEAgYSE9PWI7CiAhYSE9IWI7CiAh
IWEhPSEhYjsKIAoreCs9eDsKK3gqPXg7Cit4PDw9eDsKK3gqKj14OworeCU9eDsKKwogdm9pZCAw
Owogdm9pZCgwKTsKIHZvaWQgKDApOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L21vZGVsL3BhcnNlLXNjcmlwdC1zeW50YXgtdHJlZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9pbnNwZWN0b3IvbW9kZWwvcGFyc2Utc2NyaXB0LXN5bnRheC10cmVlLWV4cGVjdGVkLnR4dApp
bmRleCA1YTM3NWRmLi4zMTc1ZTJiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
bW9kZWwvcGFyc2Utc2NyaXB0LXN5bnRheC10cmVlLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvbW9kZWwvcGFyc2Utc2NyaXB0LXN5bnRheC10cmVlLWV4cGVjdGVkLnR4
dApAQCAtNDMsNiArNDMsOCBAQCBwYXNzZWQgWWllbGRFeHByZXNzaW9uCiBwYXNzZWQgQ2xhc3NT
dGF0ZW1lbnQsIFN1cGVyLCBNZXRhUHJvcGVydHkKIHBhc3NlZCBBc3NpZ25tZW50UGF0dGVybgog
cGFzc2VkIEFycm93RnVuY3Rpb25FeHByZXNzaW9uCitwYXNzZWQgQXN5bmMgRnVuY3Rpb25zCitw
YXNzZWQgQXdhaXRFeHByZXNzaW9uCiBwYXNzZWQgY29tcHV0ZWQgbWV0aG9kIG9uIG9iamVjdCBs
aXRlcmFsCiBwYXNzZWQgbWV0aG9kIG9uIG9iamVjdCBsaXRlcmFsCiBwYXNzZWQgY29tcHV0ZWQg
bWV0aG9kIHByb3BlcnR5IG9uIG9iamVjdCBsaXRlcmFsCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9pbnNwZWN0b3IvbW9kZWwvcGFyc2Utc2NyaXB0LXN5bnRheC10cmVlLmh0bWwgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvbW9kZWwvcGFyc2Utc2NyaXB0LXN5bnRheC10cmVlLmh0bWwKaW5kZXgg
Mzk4YTM3OC4uODAxYzBkNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL21vZGVs
L3BhcnNlLXNjcmlwdC1zeW50YXgtdHJlZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9tb2RlbC9wYXJzZS1zY3JpcHQtc3ludGF4LXRyZWUuaHRtbApAQCAtNDc5LDggKzQ3OSw4IEBA
IGZ1bmN0aW9uIHRlc3QoKQogICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUuYm9keS5ib2R5
WzBdLnZhbHVlLmJvZHkuYm9keVswXS5leHByZXNzaW9uLmNhbGxlZS50eXBlID09PSBXZWJJbnNw
ZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5TdXBlcik7CiAgICAgSW5zcGVjdG9yVGVz
dC5hc3NlcnQobm9kZS5ib2R5LmJvZHlbMF0udmFsdWUuYm9keS5ib2R5WzFdLnR5cGUgPT09IFdl
Ykluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkV4cHJlc3Npb25TdGF0ZW1lbnQp
OwogICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUuYm9keS5ib2R5WzBdLnZhbHVlLmJvZHku
Ym9keVsxXS5leHByZXNzaW9uLnR5cGUgPT09IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVl
Lk5vZGVUeXBlLk1ldGFQcm9wZXJ0eSk7Ci0gICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5i
b2R5LmJvZHlbMF0udmFsdWUuYm9keS5ib2R5WzFdLmV4cHJlc3Npb24ubWV0YSA9PT0gIm5ldyIp
OwotICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUuYm9keS5ib2R5WzBdLnZhbHVlLmJvZHku
Ym9keVsxXS5leHByZXNzaW9uLnByb3BlcnR5ID09PSAidGFyZ2V0Iik7CisgICAgSW5zcGVjdG9y
VGVzdC5hc3NlcnQobm9kZS5ib2R5LmJvZHlbMF0udmFsdWUuYm9keS5ib2R5WzFdLmV4cHJlc3Np
b24ubWV0YS5uYW1lID09PSAibmV3Iik7CisgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5i
b2R5LmJvZHlbMF0udmFsdWUuYm9keS5ib2R5WzFdLmV4cHJlc3Npb24ucHJvcGVydHkubmFtZSA9
PT0gInRhcmdldCIpOwogICAgIEluc3BlY3RvclRlc3QubG9nKCJwYXNzZWQgQ2xhc3NTdGF0ZW1l
bnQsIFN1cGVyLCBNZXRhUHJvcGVydHkiKTsKIAogICAgIG5vZGUgPSBtYWtlTm9kZSgibGV0IFt4
PTIwXSA9IFtdOyIsIGZhbHNlKTsKQEAgLTUwMywyMCArNTAzLDUzIEBAIGZ1bmN0aW9uIHRlc3Qo
KQogICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUucGFyYW1zWzBdLnR5cGUgPT09IFdlYklu
c3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLklkZW50aWZpZXIpOwogICAgIEluc3Bl
Y3RvclRlc3QuYXNzZXJ0KG5vZGUucGFyYW1zWzBdLm5hbWUgPT09ICJ4Iik7CiAgICAgSW5zcGVj
dG9yVGVzdC5hc3NlcnQobm9kZS5leHByZXNzaW9uID09PSB0cnVlKTsKLSAgICBJbnNwZWN0b3JU
ZXN0LmFzc2VydChub2RlLmRlZmF1bHRzLmxlbmd0aCA9PT0gMCk7CiAgICAgSW5zcGVjdG9yVGVz
dC5hc3NlcnQobm9kZS5ib2R5LnR5cGUgPT09IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVl
Lk5vZGVUeXBlLklkZW50aWZpZXIpOwogCiAgICAgbm9kZSA9IG1ha2VOb2RlKCIoeCA9IDIwKSA9
PiB7IHJldHVybiB4OyB9OyIsIHRydWUpOwogICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUu
dHlwZSA9PT0gV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQXJyb3dGdW5j
dGlvbkV4cHJlc3Npb24pOwogICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUucGFyYW1zLmxl
bmd0aCA9PT0gMSk7Ci0gICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5wYXJhbXNbMF0udHlw
ZSA9PT0gV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuSWRlbnRpZmllcik7
Ci0gICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5wYXJhbXNbMF0ubmFtZSA9PT0gIngiKTsK
KyAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2RlLnBhcmFtc1swXS50eXBlID09PSBXZWJJbnNw
ZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Bc3NpZ25tZW50UGF0dGVybik7CisgICAg
SW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5wYXJhbXNbMF0ubGVmdC50eXBlID09PSBXZWJJbnNw
ZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5JZGVudGlmaWVyKTsKKyAgICBJbnNwZWN0
b3JUZXN0LmFzc2VydChub2RlLnBhcmFtc1swXS5sZWZ0Lm5hbWUgPT09ICJ4Iik7CisgICAgSW5z
cGVjdG9yVGVzdC5hc3NlcnQobm9kZS5wYXJhbXNbMF0ucmlnaHQudHlwZSA9PT0gV2ViSW5zcGVj
dG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuTGl0ZXJhbCk7CisgICAgSW5zcGVjdG9yVGVz
dC5hc3NlcnQobm9kZS5wYXJhbXNbMF0ucmlnaHQudmFsdWUgPT09IDIwKTsKICAgICBJbnNwZWN0
b3JUZXN0LmFzc2VydChub2RlLmV4cHJlc3Npb24gPT09IGZhbHNlKTsKLSAgICBJbnNwZWN0b3JU
ZXN0LmFzc2VydChub2RlLmRlZmF1bHRzLmxlbmd0aCA9PT0gMSk7Ci0gICAgSW5zcGVjdG9yVGVz
dC5hc3NlcnQobm9kZS5kZWZhdWx0c1swXS50eXBlID09PSBXZWJJbnNwZWN0b3IuU2NyaXB0U3lu
dGF4VHJlZS5Ob2RlVHlwZS5MaXRlcmFsKTsKICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2Rl
LmJvZHkudHlwZSA9PT0gV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQmxv
Y2tTdGF0ZW1lbnQpOwogICAgIEluc3BlY3RvclRlc3QubG9nKCJwYXNzZWQgQXJyb3dGdW5jdGlv
bkV4cHJlc3Npb24iKTsKIAorICAgIG5vZGUgPSBtYWtlTm9kZSgiYXN5bmMgZnVuY3Rpb24gZm9v
KCkge30iLCBmYWxzZSk7CisgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS50eXBlID09PSBX
ZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5GdW5jdGlvbkRlY2xhcmF0aW9u
KTsKKyAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChub2RlLmFzeW5jKTsKKyAgICBub2RlID0gbWFr
ZU5vZGUoImZ1bmN0aW9uIGZvbygpIHt9IiwgZmFsc2UpOworICAgIEluc3BlY3RvclRlc3QuYXNz
ZXJ0KG5vZGUudHlwZSA9PT0gV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUu
RnVuY3Rpb25EZWNsYXJhdGlvbik7CisgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQoIW5vZGUuYXN5
bmMpOworICAgIG5vZGUgPSBtYWtlTm9kZSgiKGFzeW5jIGZ1bmN0aW9uKCkge30pIiwgdHJ1ZSk7
CisgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS50eXBlID09PSBXZWJJbnNwZWN0b3IuU2Ny
aXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5GdW5jdGlvbkV4cHJlc3Npb24pOworICAgIEluc3BlY3Rv
clRlc3QuYXNzZXJ0KG5vZGUuYXN5bmMpOworICAgIG5vZGUgPSBtYWtlTm9kZSgiKGZ1bmN0aW9u
KCkge30pIiwgdHJ1ZSk7CisgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS50eXBlID09PSBX
ZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5GdW5jdGlvbkV4cHJlc3Npb24p
OworICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KCFub2RlLmFzeW5jKTsKKyAgICBub2RlID0gbWFr
ZU5vZGUoImFzeW5jICgpID0+IHt9IiwgdHJ1ZSk7CisgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQo
bm9kZS50eXBlID09PSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5BcnJv
d0Z1bmN0aW9uRXhwcmVzc2lvbik7CisgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5hc3lu
Yyk7CisgICAgbm9kZSA9IG1ha2VOb2RlKCIoKSA9PiB7fSIsIHRydWUpOworICAgIEluc3BlY3Rv
clRlc3QuYXNzZXJ0KG5vZGUudHlwZSA9PT0gV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUu
Tm9kZVR5cGUuQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24pOworICAgIEluc3BlY3RvclRlc3QuYXNz
ZXJ0KCFub2RlLmFzeW5jKTsKKyAgICBJbnNwZWN0b3JUZXN0LmxvZygicGFzc2VkIEFzeW5jIEZ1
bmN0aW9ucyIpOworCisgICAgbm9kZSA9IG1ha2VOb2RlKCJhc3luYyBmdW5jdGlvbiBmb28oKSB7
IGF3YWl0IGZvbygpOyB9IiwgZmFsc2UpOworICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUu
dHlwZSA9PT0gV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25E
ZWNsYXJhdGlvbik7CisgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5hc3luYyk7CisgICAg
SW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5ib2R5LmJvZHlbMF0uZXhwcmVzc2lvbi50eXBlID09
PSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Bd2FpdEV4cHJlc3Npb24p
OworICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUuYm9keS5ib2R5WzBdLmV4cHJlc3Npb24u
YXJndW1lbnQudHlwZSA9PT0gV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUu
Q2FsbEV4cHJlc3Npb24pOworICAgIG5vZGUgPSBtYWtlTm9kZSgiYXN5bmMgZnVuY3Rpb24gZm9v
KCkgeyBhd2FpdCAxOyB9IiwgZmFsc2UpOworICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUu
dHlwZSA9PT0gV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25E
ZWNsYXJhdGlvbik7CisgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5hc3luYyk7CisgICAg
SW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5ib2R5LmJvZHlbMF0uZXhwcmVzc2lvbi50eXBlID09
PSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Bd2FpdEV4cHJlc3Npb24p
OworICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KG5vZGUuYm9keS5ib2R5WzBdLmV4cHJlc3Npb24u
YXJndW1lbnQudHlwZSA9PT0gV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUu
TGl0ZXJhbCk7CisgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQobm9kZS5ib2R5LmJvZHlbMF0uZXhw
cmVzc2lvbi5hcmd1bWVudC52YWx1ZSA9PT0gMSk7CisgICAgSW5zcGVjdG9yVGVzdC5sb2coInBh
c3NlZCBBd2FpdEV4cHJlc3Npb24iKTsKKwogICAgIG5vZGUgPSBtYWtlTm9kZSgidmFyIG8gPSB7
WydjJ10oKSB7IH19OyIsIGZhbHNlKTsKICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgIF4K
ICAgICAvLyAgICAgICAgICAgICAgICAgdHlwZSBwcm9maWxpbmcgcmV0dXJuIGRpdm90LgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9DaGFuZ2VMb2cKaW5kZXggNmJmN2EzYTAuLmE0ZDJkNGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDE2LTExLTE2ICBKb3NlcGggUGVjb3Jhcm8g
IDxwZWNvcmFyb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogVXBkYXRlIEVz
cHJpbWEgdG8gc3VwcG9ydCBuZXcgZmVhdHVyZXMgLyBzeW50YXggKCoqLCBhc3luYy9hd2FpdCwg
dHJhaWxpbmcgY29tbWEpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjQ4MzAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI5MjkzODE0PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVXNlckludGVyZmFj
ZS9FeHRlcm5hbC9Fc3ByaW1hL0xJQ0VOU0U6CisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRl
cm5hbC9Fc3ByaW1hL2VzcHJpbWEuanM6CisgICAgICAgIFVwZGF0ZWQgdG8gRXNwcmltYUAzMTE4
OWJlICg0LjAuMC1kZXYpLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0
U3ludGF4VHJlZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLnBy
b3RvdHlwZS5fcmVjdXJzZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJl
ZS5wcm90b3R5cGUuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZSk6CisgICAgICAgICogVXNlcklu
dGVyZmFjZS9Xb3JrZXJzL0Zvcm1hdHRlci9FU1RyZWVXYWxrZXIuanM6CisgICAgICAgIChFU1Ry
ZWVXYWxrZXIucHJvdG90eXBlLl93YWxrQ2hpbGRyZW4pOgorICAgICAgICBBZGQgbmV3IG5vZGVz
IChBd2FpdEV4cHJlc3Npb24pLgorICAgICAgICBBZGQgbmV3IHN0YXRlcyAoYXN5bmMgYm9vbGVh
biBwcm9wZXJ0eSBvbiBGdW5jdGlvbnMpLgorICAgICAgICBSZW1vdmUgc3RhbGUgcHJvcGVydGll
cyAoZGVmYXVsdHMgaXMgbm8gbG9uZ2VyIG5lZWRlZCwgYXMgcGFyYW1ldGVycworICAgICAgICB3
aXRoIGRlZmF1bHQgdmFsdWVzIGFyZSBub3cgQXNzaWdubWVudFBhdHRlcm5zKS4KKyAgICAgICAg
VXBkYXRlIE1ldGFQcm9wZXJ0eSB3aGVyZSBtZXRhL3Byb3BlcnR5IGFyZSBub3cgSWRlbnRpZmll
cnMgbm90IHN0cmluZ3MuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1dvcmtlcnMvRm9ybWF0
dGVyL0VzcHJpbWFGb3JtYXR0ZXIuanM6CisgICAgICAgIChFc3ByaW1hRm9ybWF0dGVyLnByb3Rv
dHlwZS5faGFuZGxlVG9rZW5BdE5vZGUpOgorICAgICAgICBIYW5kbGUgcHJldHR5IHByaW50aW5n
IG9mIG5ldyBub2RlcyBhbmQgaWRlbnRpZmllcnMuCisKIDIwMTYtMTEtMTUgIEpvc2VwaCBQZWNv
cmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBSZW1v
dmUgdW51c2VkIGFuZCB1bnRlc3RlZCBQYWdlLnNldFRvdWNoRW11bGF0aW9uRW5hYmxlZCBjb21t
YW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRl
cm5hbC9Fc3ByaW1hL0xJQ0VOU0UgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9FeHRlcm5hbC9Fc3ByaW1hL0xJQ0VOU0UKaW5kZXggMTc1NTdlYy4uN2E1NTE2MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvRXNwcmlt
YS9MSUNFTlNFCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVy
bmFsL0VzcHJpbWEvTElDRU5TRQpAQCAtMSw0ICsxLDQgQEAKLUNvcHlyaWdodCAoYykgalF1ZXJ5
IEZvdW5kYXRpb24sIEluYy4gYW5kIENvbnRyaWJ1dG9ycywgQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
K0NvcHlyaWdodCBKUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMsIGh0dHBzOi8v
anMuZm91bmRhdGlvbi8KIAogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0VzcHJpbWEv
ZXNwcmltYS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFs
L0VzcHJpbWEvZXNwcmltYS5qcwppbmRleCAyMmVlZmVkLi5hYjk1OTgwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9Fc3ByaW1hL2VzcHJp
bWEuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwv
RXNwcmltYS9lc3ByaW1hLmpzCkBAIC0xLDU2NjAgKzEsNjYxNSBAQAotLyoKLSAgQ29weXJpZ2h0
IChjKSBqUXVlcnkgRm91bmRhdGlvbiwgSW5jLiBhbmQgQ29udHJpYnV0b3JzLCBBbGwgUmlnaHRz
IFJlc2VydmVkLgotCi0gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLQotICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotCi0gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgotICBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTlkKLSAgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0oZnVuY3Rp
b24gKHJvb3QsIGZhY3RvcnkpIHsKLSAgICAndXNlIHN0cmljdCc7Ci0KLSAgICAvLyBVbml2ZXJz
YWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8gc3VwcG9ydCBBTUQsIENvbW1vbkpTL05vZGUu
anMsCi0gICAgLy8gUmhpbm8sIGFuZCBwbGFpbiBicm93c2VyIGxvYWRpbmcuCi0KLSAgICAvKiBp
c3RhbmJ1bCBpZ25vcmUgbmV4dCAqLwotICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rp
b24nICYmIGRlZmluZS5hbWQpIHsKLSAgICAgICAgZGVmaW5lKFsnZXhwb3J0cyddLCBmYWN0b3J5
KTsKLSAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykgewotICAg
ICAgICBmYWN0b3J5KGV4cG9ydHMpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZhY3RvcnkoKHJv
b3QuZXNwcmltYSA9IHt9KSk7Ci0gICAgfQotfSh0aGlzLCBmdW5jdGlvbiAoZXhwb3J0cykgewot
ICAgICd1c2Ugc3RyaWN0JzsKLQotICAgIHZhciBUb2tlbiwKLSAgICAgICAgVG9rZW5OYW1lLAot
ICAgICAgICBGbkV4cHJUb2tlbnMsCi0gICAgICAgIFN5bnRheCwKLSAgICAgICAgUGxhY2VIb2xk
ZXJzLAotICAgICAgICBNZXNzYWdlcywKLSAgICAgICAgUmVnZXgsCi0gICAgICAgIHNvdXJjZSwK
LSAgICAgICAgc3RyaWN0LAotICAgICAgICBpbmRleCwKLSAgICAgICAgbGluZU51bWJlciwKLSAg
ICAgICAgbGluZVN0YXJ0LAotICAgICAgICBoYXNMaW5lVGVybWluYXRvciwKLSAgICAgICAgbGFz
dEluZGV4LAotICAgICAgICBsYXN0TGluZU51bWJlciwKLSAgICAgICAgbGFzdExpbmVTdGFydCwK
LSAgICAgICAgc3RhcnRJbmRleCwKLSAgICAgICAgc3RhcnRMaW5lTnVtYmVyLAotICAgICAgICBz
dGFydExpbmVTdGFydCwKLSAgICAgICAgc2Nhbm5pbmcsCi0gICAgICAgIGxlbmd0aCwKLSAgICAg
ICAgbG9va2FoZWFkLAotICAgICAgICBzdGF0ZSwKLSAgICAgICAgZXh0cmEsCi0gICAgICAgIGlz
QmluZGluZ0VsZW1lbnQsCi0gICAgICAgIGlzQXNzaWdubWVudFRhcmdldCwKLSAgICAgICAgZmly
c3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yOwotCi0gICAgVG9rZW4gPSB7Ci0gICAgICAgIEJv
b2xlYW5MaXRlcmFsOiAxLAotICAgICAgICBFT0Y6IDIsCi0gICAgICAgIElkZW50aWZpZXI6IDMs
Ci0gICAgICAgIEtleXdvcmQ6IDQsCi0gICAgICAgIE51bGxMaXRlcmFsOiA1LAotICAgICAgICBO
dW1lcmljTGl0ZXJhbDogNiwKLSAgICAgICAgUHVuY3R1YXRvcjogNywKLSAgICAgICAgU3RyaW5n
TGl0ZXJhbDogOCwKLSAgICAgICAgUmVndWxhckV4cHJlc3Npb246IDksCi0gICAgICAgIFRlbXBs
YXRlOiAxMAotICAgIH07Ci0KLSAgICBUb2tlbk5hbWUgPSB7fTsKLSAgICBUb2tlbk5hbWVbVG9r
ZW4uQm9vbGVhbkxpdGVyYWxdID0gJ0Jvb2xlYW4nOwotICAgIFRva2VuTmFtZVtUb2tlbi5FT0Zd
ID0gJzxlbmQ+JzsKLSAgICBUb2tlbk5hbWVbVG9rZW4uSWRlbnRpZmllcl0gPSAnSWRlbnRpZmll
cic7Ci0gICAgVG9rZW5OYW1lW1Rva2VuLktleXdvcmRdID0gJ0tleXdvcmQnOwotICAgIFRva2Vu
TmFtZVtUb2tlbi5OdWxsTGl0ZXJhbF0gPSAnTnVsbCc7Ci0gICAgVG9rZW5OYW1lW1Rva2VuLk51
bWVyaWNMaXRlcmFsXSA9ICdOdW1lcmljJzsKLSAgICBUb2tlbk5hbWVbVG9rZW4uUHVuY3R1YXRv
cl0gPSAnUHVuY3R1YXRvcic7Ci0gICAgVG9rZW5OYW1lW1Rva2VuLlN0cmluZ0xpdGVyYWxdID0g
J1N0cmluZyc7Ci0gICAgVG9rZW5OYW1lW1Rva2VuLlJlZ3VsYXJFeHByZXNzaW9uXSA9ICdSZWd1
bGFyRXhwcmVzc2lvbic7Ci0gICAgVG9rZW5OYW1lW1Rva2VuLlRlbXBsYXRlXSA9ICdUZW1wbGF0
ZSc7Ci0KLSAgICAvLyBBIGZ1bmN0aW9uIGZvbGxvd2luZyBvbmUgb2YgdGhvc2UgdG9rZW5zIGlz
IGFuIGV4cHJlc3Npb24uCi0gICAgRm5FeHByVG9rZW5zID0gWycoJywgJ3snLCAnWycsICdpbics
ICd0eXBlb2YnLCAnaW5zdGFuY2VvZicsICduZXcnLAotICAgICAgICAgICAgICAgICAgICAncmV0
dXJuJywgJ2Nhc2UnLCAnZGVsZXRlJywgJ3Rocm93JywgJ3ZvaWQnLAotICAgICAgICAgICAgICAg
ICAgICAvLyBhc3NpZ25tZW50IG9wZXJhdG9ycwotICAgICAgICAgICAgICAgICAgICAnPScsICcr
PScsICctPScsICcqPScsICcvPScsICclPScsICc8PD0nLCAnPj49JywgJz4+Pj0nLAotICAgICAg
ICAgICAgICAgICAgICAnJj0nLCAnfD0nLCAnXj0nLCAnLCcsCi0gICAgICAgICAgICAgICAgICAg
IC8vIGJpbmFyeS91bmFyeSBvcGVyYXRvcnMKLSAgICAgICAgICAgICAgICAgICAgJysnLCAnLScs
ICcqJywgJy8nLCAnJScsICcrKycsICctLScsICc8PCcsICc+PicsICc+Pj4nLCAnJicsCi0gICAg
ICAgICAgICAgICAgICAgICd8JywgJ14nLCAnIScsICd+JywgJyYmJywgJ3x8JywgJz8nLCAnOics
ICc9PT0nLCAnPT0nLCAnPj0nLAotICAgICAgICAgICAgICAgICAgICAnPD0nLCAnPCcsICc+Jywg
JyE9JywgJyE9PSddOwotCi0gICAgU3ludGF4ID0gewotICAgICAgICBBc3NpZ25tZW50RXhwcmVz
c2lvbjogJ0Fzc2lnbm1lbnRFeHByZXNzaW9uJywKLSAgICAgICAgQXNzaWdubWVudFBhdHRlcm46
ICdBc3NpZ25tZW50UGF0dGVybicsCi0gICAgICAgIEFycmF5RXhwcmVzc2lvbjogJ0FycmF5RXhw
cmVzc2lvbicsCi0gICAgICAgIEFycmF5UGF0dGVybjogJ0FycmF5UGF0dGVybicsCi0gICAgICAg
IEFycm93RnVuY3Rpb25FeHByZXNzaW9uOiAnQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24nLAotICAg
ICAgICBCbG9ja1N0YXRlbWVudDogJ0Jsb2NrU3RhdGVtZW50JywKLSAgICAgICAgQmluYXJ5RXhw
cmVzc2lvbjogJ0JpbmFyeUV4cHJlc3Npb24nLAotICAgICAgICBCcmVha1N0YXRlbWVudDogJ0Jy
ZWFrU3RhdGVtZW50JywKLSAgICAgICAgQ2FsbEV4cHJlc3Npb246ICdDYWxsRXhwcmVzc2lvbics
Ci0gICAgICAgIENhdGNoQ2xhdXNlOiAnQ2F0Y2hDbGF1c2UnLAotICAgICAgICBDbGFzc0JvZHk6
ICdDbGFzc0JvZHknLAotICAgICAgICBDbGFzc0RlY2xhcmF0aW9uOiAnQ2xhc3NEZWNsYXJhdGlv
bicsCi0gICAgICAgIENsYXNzRXhwcmVzc2lvbjogJ0NsYXNzRXhwcmVzc2lvbicsCi0gICAgICAg
IENvbmRpdGlvbmFsRXhwcmVzc2lvbjogJ0NvbmRpdGlvbmFsRXhwcmVzc2lvbicsCi0gICAgICAg
IENvbnRpbnVlU3RhdGVtZW50OiAnQ29udGludWVTdGF0ZW1lbnQnLAotICAgICAgICBEb1doaWxl
U3RhdGVtZW50OiAnRG9XaGlsZVN0YXRlbWVudCcsCi0gICAgICAgIERlYnVnZ2VyU3RhdGVtZW50
OiAnRGVidWdnZXJTdGF0ZW1lbnQnLAotICAgICAgICBFbXB0eVN0YXRlbWVudDogJ0VtcHR5U3Rh
dGVtZW50JywKLSAgICAgICAgRXhwb3J0QWxsRGVjbGFyYXRpb246ICdFeHBvcnRBbGxEZWNsYXJh
dGlvbicsCi0gICAgICAgIEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbjogJ0V4cG9ydERlZmF1bHRE
ZWNsYXJhdGlvbicsCi0gICAgICAgIEV4cG9ydE5hbWVkRGVjbGFyYXRpb246ICdFeHBvcnROYW1l
ZERlY2xhcmF0aW9uJywKLSAgICAgICAgRXhwb3J0U3BlY2lmaWVyOiAnRXhwb3J0U3BlY2lmaWVy
JywKLSAgICAgICAgRXhwcmVzc2lvblN0YXRlbWVudDogJ0V4cHJlc3Npb25TdGF0ZW1lbnQnLAot
ICAgICAgICBGb3JTdGF0ZW1lbnQ6ICdGb3JTdGF0ZW1lbnQnLAotICAgICAgICBGb3JPZlN0YXRl
bWVudDogJ0Zvck9mU3RhdGVtZW50JywKLSAgICAgICAgRm9ySW5TdGF0ZW1lbnQ6ICdGb3JJblN0
YXRlbWVudCcsCi0gICAgICAgIEZ1bmN0aW9uRGVjbGFyYXRpb246ICdGdW5jdGlvbkRlY2xhcmF0
aW9uJywKLSAgICAgICAgRnVuY3Rpb25FeHByZXNzaW9uOiAnRnVuY3Rpb25FeHByZXNzaW9uJywK
LSAgICAgICAgSWRlbnRpZmllcjogJ0lkZW50aWZpZXInLAotICAgICAgICBJZlN0YXRlbWVudDog
J0lmU3RhdGVtZW50JywKLSAgICAgICAgSW1wb3J0RGVjbGFyYXRpb246ICdJbXBvcnREZWNsYXJh
dGlvbicsCi0gICAgICAgIEltcG9ydERlZmF1bHRTcGVjaWZpZXI6ICdJbXBvcnREZWZhdWx0U3Bl
Y2lmaWVyJywKLSAgICAgICAgSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyOiAnSW1wb3J0TmFtZXNw
YWNlU3BlY2lmaWVyJywKLSAgICAgICAgSW1wb3J0U3BlY2lmaWVyOiAnSW1wb3J0U3BlY2lmaWVy
JywKLSAgICAgICAgTGl0ZXJhbDogJ0xpdGVyYWwnLAotICAgICAgICBMYWJlbGVkU3RhdGVtZW50
OiAnTGFiZWxlZFN0YXRlbWVudCcsCi0gICAgICAgIExvZ2ljYWxFeHByZXNzaW9uOiAnTG9naWNh
bEV4cHJlc3Npb24nLAotICAgICAgICBNZW1iZXJFeHByZXNzaW9uOiAnTWVtYmVyRXhwcmVzc2lv
bicsCi0gICAgICAgIE1ldGFQcm9wZXJ0eTogJ01ldGFQcm9wZXJ0eScsCi0gICAgICAgIE1ldGhv
ZERlZmluaXRpb246ICdNZXRob2REZWZpbml0aW9uJywKLSAgICAgICAgTmV3RXhwcmVzc2lvbjog
J05ld0V4cHJlc3Npb24nLAotICAgICAgICBPYmplY3RFeHByZXNzaW9uOiAnT2JqZWN0RXhwcmVz
c2lvbicsCi0gICAgICAgIE9iamVjdFBhdHRlcm46ICdPYmplY3RQYXR0ZXJuJywKLSAgICAgICAg
UHJvZ3JhbTogJ1Byb2dyYW0nLAotICAgICAgICBQcm9wZXJ0eTogJ1Byb3BlcnR5JywKLSAgICAg
ICAgUmVzdEVsZW1lbnQ6ICdSZXN0RWxlbWVudCcsCi0gICAgICAgIFJldHVyblN0YXRlbWVudDog
J1JldHVyblN0YXRlbWVudCcsCi0gICAgICAgIFNlcXVlbmNlRXhwcmVzc2lvbjogJ1NlcXVlbmNl
RXhwcmVzc2lvbicsCi0gICAgICAgIFNwcmVhZEVsZW1lbnQ6ICdTcHJlYWRFbGVtZW50JywKLSAg
ICAgICAgU3VwZXI6ICdTdXBlcicsCi0gICAgICAgIFN3aXRjaENhc2U6ICdTd2l0Y2hDYXNlJywK
LSAgICAgICAgU3dpdGNoU3RhdGVtZW50OiAnU3dpdGNoU3RhdGVtZW50JywKLSAgICAgICAgVGFn
Z2VkVGVtcGxhdGVFeHByZXNzaW9uOiAnVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uJywKLSAgICAg
ICAgVGVtcGxhdGVFbGVtZW50OiAnVGVtcGxhdGVFbGVtZW50JywKLSAgICAgICAgVGVtcGxhdGVM
aXRlcmFsOiAnVGVtcGxhdGVMaXRlcmFsJywKLSAgICAgICAgVGhpc0V4cHJlc3Npb246ICdUaGlz
RXhwcmVzc2lvbicsCi0gICAgICAgIFRocm93U3RhdGVtZW50OiAnVGhyb3dTdGF0ZW1lbnQnLAot
ICAgICAgICBUcnlTdGF0ZW1lbnQ6ICdUcnlTdGF0ZW1lbnQnLAotICAgICAgICBVbmFyeUV4cHJl
c3Npb246ICdVbmFyeUV4cHJlc3Npb24nLAotICAgICAgICBVcGRhdGVFeHByZXNzaW9uOiAnVXBk
YXRlRXhwcmVzc2lvbicsCi0gICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb246ICdWYXJpYWJsZURl
Y2xhcmF0aW9uJywKLSAgICAgICAgVmFyaWFibGVEZWNsYXJhdG9yOiAnVmFyaWFibGVEZWNsYXJh
dG9yJywKLSAgICAgICAgV2hpbGVTdGF0ZW1lbnQ6ICdXaGlsZVN0YXRlbWVudCcsCi0gICAgICAg
IFdpdGhTdGF0ZW1lbnQ6ICdXaXRoU3RhdGVtZW50JywKLSAgICAgICAgWWllbGRFeHByZXNzaW9u
OiAnWWllbGRFeHByZXNzaW9uJwotICAgIH07Ci0KLSAgICBQbGFjZUhvbGRlcnMgPSB7Ci0gICAg
ICAgIEFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXI6ICdBcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVy
JwotICAgIH07Ci0KLSAgICAvLyBFcnJvciBtZXNzYWdlcyBzaG91bGQgYmUgaWRlbnRpY2FsIHRv
IFY4LgotICAgIE1lc3NhZ2VzID0gewotICAgICAgICBVbmV4cGVjdGVkVG9rZW46ICdVbmV4cGVj
dGVkIHRva2VuICUwJywKLSAgICAgICAgVW5leHBlY3RlZE51bWJlcjogJ1VuZXhwZWN0ZWQgbnVt
YmVyJywKLSAgICAgICAgVW5leHBlY3RlZFN0cmluZzogJ1VuZXhwZWN0ZWQgc3RyaW5nJywKLSAg
ICAgICAgVW5leHBlY3RlZElkZW50aWZpZXI6ICdVbmV4cGVjdGVkIGlkZW50aWZpZXInLAotICAg
ICAgICBVbmV4cGVjdGVkUmVzZXJ2ZWQ6ICdVbmV4cGVjdGVkIHJlc2VydmVkIHdvcmQnLAotICAg
ICAgICBVbmV4cGVjdGVkVGVtcGxhdGU6ICdVbmV4cGVjdGVkIHF1YXNpICUwJywKLSAgICAgICAg
VW5leHBlY3RlZEVPUzogJ1VuZXhwZWN0ZWQgZW5kIG9mIGlucHV0JywKLSAgICAgICAgTmV3bGlu
ZUFmdGVyVGhyb3c6ICdJbGxlZ2FsIG5ld2xpbmUgYWZ0ZXIgdGhyb3cnLAotICAgICAgICBJbnZh
bGlkUmVnRXhwOiAnSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24nLAotICAgICAgICBVbnRlcm1p
bmF0ZWRSZWdFeHA6ICdJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogbWlzc2luZyAvJywKLSAg
ICAgICAgSW52YWxpZExIU0luQXNzaWdubWVudDogJ0ludmFsaWQgbGVmdC1oYW5kIHNpZGUgaW4g
YXNzaWdubWVudCcsCi0gICAgICAgIEludmFsaWRMSFNJbkZvckluOiAnSW52YWxpZCBsZWZ0LWhh
bmQgc2lkZSBpbiBmb3ItaW4nLAotICAgICAgICBJbnZhbGlkTEhTSW5Gb3JMb29wOiAnSW52YWxp
ZCBsZWZ0LWhhbmQgc2lkZSBpbiBmb3ItbG9vcCcsCi0gICAgICAgIE11bHRpcGxlRGVmYXVsdHNJ
blN3aXRjaDogJ01vcmUgdGhhbiBvbmUgZGVmYXVsdCBjbGF1c2UgaW4gc3dpdGNoIHN0YXRlbWVu
dCcsCi0gICAgICAgIE5vQ2F0Y2hPckZpbmFsbHk6ICdNaXNzaW5nIGNhdGNoIG9yIGZpbmFsbHkg
YWZ0ZXIgdHJ5JywKLSAgICAgICAgVW5rbm93bkxhYmVsOiAnVW5kZWZpbmVkIGxhYmVsIFwnJTBc
JycsCi0gICAgICAgIFJlZGVjbGFyYXRpb246ICclMCBcJyUxXCcgaGFzIGFscmVhZHkgYmVlbiBk
ZWNsYXJlZCcsCi0gICAgICAgIElsbGVnYWxDb250aW51ZTogJ0lsbGVnYWwgY29udGludWUgc3Rh
dGVtZW50JywKLSAgICAgICAgSWxsZWdhbEJyZWFrOiAnSWxsZWdhbCBicmVhayBzdGF0ZW1lbnQn
LAotICAgICAgICBJbGxlZ2FsUmV0dXJuOiAnSWxsZWdhbCByZXR1cm4gc3RhdGVtZW50JywKLSAg
ICAgICAgU3RyaWN0TW9kZVdpdGg6ICdTdHJpY3QgbW9kZSBjb2RlIG1heSBub3QgaW5jbHVkZSBh
IHdpdGggc3RhdGVtZW50JywKLSAgICAgICAgU3RyaWN0Q2F0Y2hWYXJpYWJsZTogJ0NhdGNoIHZh
cmlhYmxlIG1heSBub3QgYmUgZXZhbCBvciBhcmd1bWVudHMgaW4gc3RyaWN0IG1vZGUnLAotICAg
ICAgICBTdHJpY3RWYXJOYW1lOiAnVmFyaWFibGUgbmFtZSBtYXkgbm90IGJlIGV2YWwgb3IgYXJn
dW1lbnRzIGluIHN0cmljdCBtb2RlJywKLSAgICAgICAgU3RyaWN0UGFyYW1OYW1lOiAnUGFyYW1l
dGVyIG5hbWUgZXZhbCBvciBhcmd1bWVudHMgaXMgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUn
LAotICAgICAgICBTdHJpY3RQYXJhbUR1cGU6ICdTdHJpY3QgbW9kZSBmdW5jdGlvbiBtYXkgbm90
IGhhdmUgZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcycsCi0gICAgICAgIFN0cmljdEZ1bmN0aW9u
TmFtZTogJ0Z1bmN0aW9uIG5hbWUgbWF5IG5vdCBiZSBldmFsIG9yIGFyZ3VtZW50cyBpbiBzdHJp
Y3QgbW9kZScsCi0gICAgICAgIFN0cmljdE9jdGFsTGl0ZXJhbDogJ09jdGFsIGxpdGVyYWxzIGFy
ZSBub3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9kZS4nLAotICAgICAgICBTdHJpY3REZWxldGU6ICdE
ZWxldGUgb2YgYW4gdW5xdWFsaWZpZWQgaWRlbnRpZmllciBpbiBzdHJpY3QgbW9kZS4nLAotICAg
ICAgICBTdHJpY3RMSFNBc3NpZ25tZW50OiAnQXNzaWdubWVudCB0byBldmFsIG9yIGFyZ3VtZW50
cyBpcyBub3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9kZScsCi0gICAgICAgIFN0cmljdExIU1Bvc3Rm
aXg6ICdQb3N0Zml4IGluY3JlbWVudC9kZWNyZW1lbnQgbWF5IG5vdCBoYXZlIGV2YWwgb3IgYXJn
dW1lbnRzIG9wZXJhbmQgaW4gc3RyaWN0IG1vZGUnLAotICAgICAgICBTdHJpY3RMSFNQcmVmaXg6
ICdQcmVmaXggaW5jcmVtZW50L2RlY3JlbWVudCBtYXkgbm90IGhhdmUgZXZhbCBvciBhcmd1bWVu
dHMgb3BlcmFuZCBpbiBzdHJpY3QgbW9kZScsCi0gICAgICAgIFN0cmljdFJlc2VydmVkV29yZDog
J1VzZSBvZiBmdXR1cmUgcmVzZXJ2ZWQgd29yZCBpbiBzdHJpY3QgbW9kZScsCi0gICAgICAgIFRl
bXBsYXRlT2N0YWxMaXRlcmFsOiAnT2N0YWwgbGl0ZXJhbHMgYXJlIG5vdCBhbGxvd2VkIGluIHRl
bXBsYXRlIHN0cmluZ3MuJywKLSAgICAgICAgUGFyYW1ldGVyQWZ0ZXJSZXN0UGFyYW1ldGVyOiAn
UmVzdCBwYXJhbWV0ZXIgbXVzdCBiZSBsYXN0IGZvcm1hbCBwYXJhbWV0ZXInLAotICAgICAgICBE
ZWZhdWx0UmVzdFBhcmFtZXRlcjogJ1VuZXhwZWN0ZWQgdG9rZW4gPScsCi0gICAgICAgIE9iamVj
dFBhdHRlcm5Bc1Jlc3RQYXJhbWV0ZXI6ICdVbmV4cGVjdGVkIHRva2VuIHsnLAotICAgICAgICBE
dXBsaWNhdGVQcm90b1Byb3BlcnR5OiAnRHVwbGljYXRlIF9fcHJvdG9fXyBmaWVsZHMgYXJlIG5v
dCBhbGxvd2VkIGluIG9iamVjdCBsaXRlcmFscycsCi0gICAgICAgIENvbnN0cnVjdG9yU3BlY2lh
bE1ldGhvZDogJ0NsYXNzIGNvbnN0cnVjdG9yIG1heSBub3QgYmUgYW4gYWNjZXNzb3InLAotICAg
ICAgICBEdXBsaWNhdGVDb25zdHJ1Y3RvcjogJ0EgY2xhc3MgbWF5IG9ubHkgaGF2ZSBvbmUgY29u
c3RydWN0b3InLAotICAgICAgICBTdGF0aWNQcm90b3R5cGU6ICdDbGFzc2VzIG1heSBub3QgaGF2
ZSBzdGF0aWMgcHJvcGVydHkgbmFtZWQgcHJvdG90eXBlJywKLSAgICAgICAgTWlzc2luZ0Zyb21D
bGF1c2U6ICdVbmV4cGVjdGVkIHRva2VuJywKLSAgICAgICAgTm9Bc0FmdGVySW1wb3J0TmFtZXNw
YWNlOiAnVW5leHBlY3RlZCB0b2tlbicsCi0gICAgICAgIEludmFsaWRNb2R1bGVTcGVjaWZpZXI6
ICdVbmV4cGVjdGVkIHRva2VuJywKLSAgICAgICAgSWxsZWdhbEltcG9ydERlY2xhcmF0aW9uOiAn
VW5leHBlY3RlZCB0b2tlbicsCi0gICAgICAgIElsbGVnYWxFeHBvcnREZWNsYXJhdGlvbjogJ1Vu
ZXhwZWN0ZWQgdG9rZW4nLAotICAgICAgICBEdXBsaWNhdGVCaW5kaW5nOiAnRHVwbGljYXRlIGJp
bmRpbmcgJTAnCi0gICAgfTsKLQotICAgIC8vIFNlZSBhbHNvIHRvb2xzL2dlbmVyYXRlLXVuaWNv
ZGUtcmVnZXguanMuCi0gICAgUmVnZXggPSB7Ci0gICAgICAgIC8vIEVDTUFTY3JpcHQgNi9Vbmlj
b2RlIHY3LjAuMCBOb25Bc2NpaUlkZW50aWZpZXJTdGFydDoKLSAgICAgICAgTm9uQXNjaWlJZGVu
dGlmaWVyU3RhcnQ6IC9bXHhBQVx4QjVceEJBXHhDMC1ceEQ2XHhEOC1ceEY2XHhGOC1cdTAyQzFc
dTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1MDJFQ1x1MDJFRVx1MDM3MC1cdTAzNzRcdTAzNzZc
dTAzNzdcdTAzN0EtXHUwMzdEXHUwMzdGXHUwMzg2XHUwMzg4LVx1MDM4QVx1MDM4Q1x1MDM4RS1c
dTAzQTFcdTAzQTMtXHUwM0Y1XHUwM0Y3LVx1MDQ4MVx1MDQ4QS1cdTA1MkZcdTA1MzEtXHUwNTU2
XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDVEMC1cdTA1RUFcdTA1RjAtXHUwNUYyXHUwNjIwLVx1MDY0
QVx1MDY2RVx1MDY2Rlx1MDY3MS1cdTA2RDNcdTA2RDVcdTA2RTVcdTA2RTZcdTA2RUVcdTA2RUZc
dTA2RkEtXHUwNkZDXHUwNkZGXHUwNzEwXHUwNzEyLVx1MDcyRlx1MDc0RC1cdTA3QTVcdTA3QjFc
dTA3Q0EtXHUwN0VBXHUwN0Y0XHUwN0Y1XHUwN0ZBXHUwODAwLVx1MDgxNVx1MDgxQVx1MDgyNFx1
MDgyOFx1MDg0MC1cdTA4NThcdTA4QTAtXHUwOEIyXHUwOTA0LVx1MDkzOVx1MDkzRFx1MDk1MFx1
MDk1OC1cdTA5NjFcdTA5NzEtXHUwOTgwXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1c
dTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlEQ1x1
MDlERFx1MDlERi1cdTA5RTFcdTA5RjBcdTA5RjFcdTBBMDUtXHUwQTBBXHUwQTBGXHUwQTEwXHUw
QTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBB
MzlcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERcdTBBOEYtXHUw
QTkxXHUwQTkzLVx1MEFBOFx1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUw
QUJEXHUwQUQwXHUwQUUwXHUwQUUxXHUwQjA1LVx1MEIwQ1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBC
MjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzRFx1MEI1Q1x1MEI1
RFx1MEI1Ri1cdTBCNjFcdTBCNzFcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5
Mi1cdTBCOTVcdTBCOTlcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgt
XHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMFx1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEy
LVx1MEMyOFx1MEMyQS1cdTBDMzlcdTBDM0RcdTBDNThcdTBDNTlcdTBDNjBcdTBDNjFcdTBDODUt
XHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEtXHUwQ0IzXHUwQ0I1LVx1MENC
OVx1MENCRFx1MENERVx1MENFMFx1MENFMVx1MENGMVx1MENGMlx1MEQwNS1cdTBEMENcdTBEMEUt
XHUwRDEwXHUwRDEyLVx1MEQzQVx1MEQzRFx1MEQ0RVx1MEQ2MFx1MEQ2MVx1MEQ3QS1cdTBEN0Zc
dTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMVx1MERCMy1cdTBEQkJcdTBEQkRcdTBEQzAtXHUwREM2
XHUwRTAxLVx1MEUzMFx1MEUzMlx1MEUzM1x1MEU0MC1cdTBFNDZcdTBFODFcdTBFODJcdTBFODRc
dTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVBMS1c
dTBFQTNcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUIwXHUwRUIyXHUwRUIzXHUw
RUJEXHUwRUMwLVx1MEVDNFx1MEVDNlx1MEVEQy1cdTBFREZcdTBGMDBcdTBGNDAtXHUwRjQ3XHUw
RjQ5LVx1MEY2Q1x1MEY4OC1cdTBGOENcdTEwMDAtXHUxMDJBXHUxMDNGXHUxMDUwLVx1MTA1NVx1
MTA1QS1cdTEwNURcdTEwNjFcdTEwNjVcdTEwNjZcdTEwNkUtXHUxMDcwXHUxMDc1LVx1MTA4MVx1
MTA4RVx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0OFx1
MTI0QS1cdTEyNERcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEyODhc
dTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMFx1MTJCMi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUxMkMw
XHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEwXHUxMzEyLVx1MTMxNVx1MTMx
OC1cdTEzNUFcdTEzODAtXHUxMzhGXHUxM0EwLVx1MTNGNFx1MTQwMS1cdTE2NkNcdTE2NkYtXHUx
NjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE2RUUtXHUxNkY4XHUxNzAwLVx1MTcwQ1x1
MTcwRS1cdTE3MTFcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NkNcdTE3NkUt
XHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN1x1MTdEQ1x1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEE4
XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUVcdTE5NTAtXHUxOTZEXHUxOTcwLVx1MTk3
NFx1MTk4MC1cdTE5QUJcdTE5QzEtXHUxOUM3XHUxQTAwLVx1MUExNlx1MUEyMC1cdTFBNTRcdTFB
QTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFCQUVcdTFCQUZcdTFC
QkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUxQzdEXHUxQ0U5LVx1
MUNFQ1x1MUNFRS1cdTFDRjFcdTFDRjVcdTFDRjZcdTFEMDAtXHUxREJGXHUxRTAwLVx1MUYxNVx1
MUYxOC1cdTFGMURcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlc
dTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVc
dTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNcdTFGRDYtXHUxRkRCXHUxRkUw
LVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDcxXHUyMDdGXHUyMDkwLVx1MjA5
Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTgtXHUyMTFEXHUyMTI0XHUyMTI2
XHUyMTI4XHUyMTJBLVx1MjEzOVx1MjEzQy1cdTIxM0ZcdTIxNDUtXHUyMTQ5XHUyMTRFXHUyMTYw
LVx1MjE4OFx1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJD
RUVcdTJDRjJcdTJDRjNcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2
Rlx1MkQ4MC1cdTJEOTZcdTJEQTAtXHUyREE2XHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJE
QjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VcdTJERDAtXHUyREQ2XHUyREQ4LVx1
MkRERVx1MzAwNS1cdTMwMDdcdTMwMjEtXHUzMDI5XHUzMDMxLVx1MzAzNVx1MzAzOC1cdTMwM0Nc
dTMwNDEtXHUzMDk2XHUzMDlCLVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1
LVx1MzEyRFx1MzEzMS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1MzFGRlx1MzQwMC1cdTRE
QjVcdTRFMDAtXHU5RkNDXHVBMDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRcdUE1MDAtXHVBNjBDXHVB
NjEwLVx1QTYxRlx1QTYyQVx1QTYyQlx1QTY0MC1cdUE2NkVcdUE2N0YtXHVBNjlEXHVBNkEwLVx1
QTZFRlx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XHVBNzhCLVx1QTc4RVx1QTc5MC1cdUE3QURc
dUE3QjBcdUE3QjFcdUE3RjctXHVBODAxXHVBODAzLVx1QTgwNVx1QTgwNy1cdUE4MEFcdUE4MEMt
XHVBODIyXHVBODQwLVx1QTg3M1x1QTg4Mi1cdUE4QjNcdUE4RjItXHVBOEY3XHVBOEZCXHVBOTBB
LVx1QTkyNVx1QTkzMC1cdUE5NDZcdUE5NjAtXHVBOTdDXHVBOTg0LVx1QTlCMlx1QTlDRlx1QTlF
MC1cdUE5RTRcdUE5RTYtXHVBOUVGXHVBOUZBLVx1QTlGRVx1QUEwMC1cdUFBMjhcdUFBNDAtXHVB
QTQyXHVBQTQ0LVx1QUE0Qlx1QUE2MC1cdUFBNzZcdUFBN0FcdUFBN0UtXHVBQUFGXHVBQUIxXHVB
QUI1XHVBQUI2XHVBQUI5LVx1QUFCRFx1QUFDMFx1QUFDMlx1QUFEQi1cdUFBRERcdUFBRTAtXHVB
QUVBXHVBQUYyLVx1QUFGNFx1QUIwMS1cdUFCMDZcdUFCMDktXHVBQjBFXHVBQjExLVx1QUIxNlx1
QUIyMC1cdUFCMjZcdUFCMjgtXHVBQjJFXHVBQjMwLVx1QUI1QVx1QUI1Qy1cdUFCNUZcdUFCNjRc
dUFCNjVcdUFCQzAtXHVBQkUyXHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVEN0ZC
XHVGOTAwLVx1RkE2RFx1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkIx
RFx1RkIxRi1cdUZCMjhcdUZCMkEtXHVGQjM2XHVGQjM4LVx1RkIzQ1x1RkIzRVx1RkI0MFx1RkI0
MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXHVGRDUwLVx1RkQ4Rlx1RkQ5
Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZFRkNcdUZGMjEtXHVG
RjNBXHVGRjQxLVx1RkY1QVx1RkY2Ni1cdUZGQkVcdUZGQzItXHVGRkM3XHVGRkNBLVx1RkZDRlx1
RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXXxcdUQ4MDBbXHVEQzAwLVx1REMwQlx1REMwRC1cdURD
MjZcdURDMjgtXHVEQzNBXHVEQzNDXHVEQzNEXHVEQzNGLVx1REM0RFx1REM1MC1cdURDNURcdURD
ODAtXHVEQ0ZBXHVERDQwLVx1REQ3NFx1REU4MC1cdURFOUNcdURFQTAtXHVERUQwXHVERjAwLVx1
REYxRlx1REYzMC1cdURGNEFcdURGNTAtXHVERjc1XHVERjgwLVx1REY5RFx1REZBMC1cdURGQzNc
dURGQzgtXHVERkNGXHVERkQxLVx1REZENV18XHVEODAxW1x1REMwMC1cdURDOURcdUREMDAtXHVE
RDI3XHVERDMwLVx1REQ2M1x1REUwMC1cdURGMzZcdURGNDAtXHVERjU1XHVERjYwLVx1REY2N118
XHVEODAyW1x1REMwMC1cdURDMDVcdURDMDhcdURDMEEtXHVEQzM1XHVEQzM3XHVEQzM4XHVEQzND
XHVEQzNGLVx1REM1NVx1REM2MC1cdURDNzZcdURDODAtXHVEQzlFXHVERDAwLVx1REQxNVx1REQy
MC1cdUREMzlcdUREODAtXHVEREI3XHVEREJFXHVEREJGXHVERTAwXHVERTEwLVx1REUxM1x1REUx
NS1cdURFMTdcdURFMTktXHVERTMzXHVERTYwLVx1REU3Q1x1REU4MC1cdURFOUNcdURFQzAtXHVE
RUM3XHVERUM5LVx1REVFNFx1REYwMC1cdURGMzVcdURGNDAtXHVERjU1XHVERjYwLVx1REY3Mlx1
REY4MC1cdURGOTFdfFx1RDgwM1tcdURDMDAtXHVEQzQ4XXxcdUQ4MDRbXHVEQzAzLVx1REMzN1x1
REM4My1cdURDQUZcdURDRDAtXHVEQ0U4XHVERDAzLVx1REQyNlx1REQ1MC1cdURENzJcdURENzZc
dUREODMtXHVEREIyXHVEREMxLVx1RERDNFx1REREQVx1REUwMC1cdURFMTFcdURFMTMtXHVERTJC
XHVERUIwLVx1REVERVx1REYwNS1cdURGMENcdURGMEZcdURGMTBcdURGMTMtXHVERjI4XHVERjJB
LVx1REYzMFx1REYzMlx1REYzM1x1REYzNS1cdURGMzlcdURGM0RcdURGNUQtXHVERjYxXXxcdUQ4
MDVbXHVEQzgwLVx1RENBRlx1RENDNFx1RENDNVx1RENDN1x1REQ4MC1cdUREQUVcdURFMDAtXHVE
RTJGXHVERTQ0XHVERTgwLVx1REVBQV18XHVEODA2W1x1RENBMC1cdURDREZcdURDRkZcdURFQzAt
XHVERUY4XXxcdUQ4MDhbXHVEQzAwLVx1REY5OF18XHVEODA5W1x1REMwMC1cdURDNkVdfFtcdUQ4
MENcdUQ4NDAtXHVEODY4XHVEODZBLVx1RDg2Q11bXHVEQzAwLVx1REZGRl18XHVEODBEW1x1REMw
MC1cdURDMkVdfFx1RDgxQVtcdURDMDAtXHVERTM4XHVERTQwLVx1REU1RVx1REVEMC1cdURFRURc
dURGMDAtXHVERjJGXHVERjQwLVx1REY0M1x1REY2My1cdURGNzdcdURGN0QtXHVERjhGXXxcdUQ4
MUJbXHVERjAwLVx1REY0NFx1REY1MFx1REY5My1cdURGOUZdfFx1RDgyQ1tcdURDMDBcdURDMDFd
fFx1RDgyRltcdURDMDAtXHVEQzZBXHVEQzcwLVx1REM3Q1x1REM4MC1cdURDODhcdURDOTAtXHVE
Qzk5XXxcdUQ4MzVbXHVEQzAwLVx1REM1NFx1REM1Ni1cdURDOUNcdURDOUVcdURDOUZcdURDQTJc
dURDQTVcdURDQTZcdURDQTktXHVEQ0FDXHVEQ0FFLVx1RENCOVx1RENCQlx1RENCRC1cdURDQzNc
dURDQzUtXHVERDA1XHVERDA3LVx1REQwQVx1REQwRC1cdUREMTRcdUREMTYtXHVERDFDXHVERDFF
LVx1REQzOVx1REQzQi1cdUREM0VcdURENDAtXHVERDQ0XHVERDQ2XHVERDRBLVx1REQ1MFx1REQ1
Mi1cdURFQTVcdURFQTgtXHVERUMwXHVERUMyLVx1REVEQVx1REVEQy1cdURFRkFcdURFRkMtXHVE
RjE0XHVERjE2LVx1REYzNFx1REYzNi1cdURGNEVcdURGNTAtXHVERjZFXHVERjcwLVx1REY4OFx1
REY4QS1cdURGQThcdURGQUEtXHVERkMyXHVERkM0LVx1REZDQl18XHVEODNBW1x1REMwMC1cdURD
QzRdfFx1RDgzQltcdURFMDAtXHVERTAzXHVERTA1LVx1REUxRlx1REUyMVx1REUyMlx1REUyNFx1
REUyN1x1REUyOS1cdURFMzJcdURFMzQtXHVERTM3XHVERTM5XHVERTNCXHVERTQyXHVERTQ3XHVE
RTQ5XHVERTRCXHVERTRELVx1REU0Rlx1REU1MVx1REU1Mlx1REU1NFx1REU1N1x1REU1OVx1REU1
Qlx1REU1RFx1REU1Rlx1REU2MVx1REU2Mlx1REU2NFx1REU2Ny1cdURFNkFcdURFNkMtXHVERTcy
XHVERTc0LVx1REU3N1x1REU3OS1cdURFN0NcdURFN0VcdURFODAtXHVERTg5XHVERThCLVx1REU5
Qlx1REVBMS1cdURFQTNcdURFQTUtXHVERUE5XHVERUFCLVx1REVCQl18XHVEODY5W1x1REMwMC1c
dURFRDZcdURGMDAtXHVERkZGXXxcdUQ4NkRbXHVEQzAwLVx1REYzNFx1REY0MC1cdURGRkZdfFx1
RDg2RVtcdURDMDAtXHVEQzFEXXxcdUQ4N0VbXHVEQzAwLVx1REUxRF0vLAotCi0gICAgICAgIC8v
IEVDTUFTY3JpcHQgNi9Vbmljb2RlIHY3LjAuMCBOb25Bc2NpaUlkZW50aWZpZXJQYXJ0OgotICAg
ICAgICBOb25Bc2NpaUlkZW50aWZpZXJQYXJ0OiAvW1x4QUFceEI1XHhCN1x4QkFceEMwLVx4RDZc
eEQ4LVx4RjZceEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVF
XHUwMzAwLVx1MDM3NFx1MDM3Nlx1MDM3N1x1MDM3QS1cdTAzN0RcdTAzN0ZcdTAzODYtXHUwMzhB
XHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVcdTAzRjctXHUwNDgxXHUwNDgzLVx1MDQ4
N1x1MDQ4QS1cdTA1MkZcdTA1MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDU5MS1cdTA1
QkRcdTA1QkZcdTA1QzFcdTA1QzJcdTA1QzRcdTA1QzVcdTA1QzdcdTA1RDAtXHUwNUVBXHUwNUYw
LVx1MDVGMlx1MDYxMC1cdTA2MUFcdTA2MjAtXHUwNjY5XHUwNjZFLVx1MDZEM1x1MDZENS1cdTA2
RENcdTA2REYtXHUwNkU4XHUwNkVBLVx1MDZGQ1x1MDZGRlx1MDcxMC1cdTA3NEFcdTA3NEQtXHUw
N0IxXHUwN0MwLVx1MDdGNVx1MDdGQVx1MDgwMC1cdTA4MkRcdTA4NDAtXHUwODVCXHUwOEEwLVx1
MDhCMlx1MDhFNC1cdTA5NjNcdTA5NjYtXHUwOTZGXHUwOTcxLVx1MDk4M1x1MDk4NS1cdTA5OENc
dTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFBLVx1MDlCMFx1MDlCMlx1MDlCNi1cdTA5Qjlc
dTA5QkMtXHUwOUM0XHUwOUM3XHUwOUM4XHUwOUNCLVx1MDlDRVx1MDlEN1x1MDlEQ1x1MDlERFx1
MDlERi1cdTA5RTNcdTA5RTYtXHUwOUYxXHUwQTAxLVx1MEEwM1x1MEEwNS1cdTBBMEFcdTBBMEZc
dTBBMTBcdTBBMTMtXHUwQTI4XHUwQTJBLVx1MEEzMFx1MEEzMlx1MEEzM1x1MEEzNVx1MEEzNlx1
MEEzOFx1MEEzOVx1MEEzQ1x1MEEzRS1cdTBBNDJcdTBBNDdcdTBBNDhcdTBBNEItXHUwQTREXHUw
QTUxXHUwQTU5LVx1MEE1Q1x1MEE1RVx1MEE2Ni1cdTBBNzVcdTBBODEtXHUwQTgzXHUwQTg1LVx1
MEE4RFx1MEE4Ri1cdTBBOTFcdTBBOTMtXHUwQUE4XHUwQUFBLVx1MEFCMFx1MEFCMlx1MEFCM1x1
MEFCNS1cdTBBQjlcdTBBQkMtXHUwQUM1XHUwQUM3LVx1MEFDOVx1MEFDQi1cdTBBQ0RcdTBBRDBc
dTBBRTAtXHUwQUUzXHUwQUU2LVx1MEFFRlx1MEIwMS1cdTBCMDNcdTBCMDUtXHUwQjBDXHUwQjBG
XHUwQjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1cdTBCMzBcdTBCMzJcdTBCMzNcdTBCMzUtXHUwQjM5
XHUwQjNDLVx1MEI0NFx1MEI0N1x1MEI0OFx1MEI0Qi1cdTBCNERcdTBCNTZcdTBCNTdcdTBCNUNc
dTBCNURcdTBCNUYtXHUwQjYzXHUwQjY2LVx1MEI2Rlx1MEI3MVx1MEI4Mlx1MEI4M1x1MEI4NS1c
dTBCOEFcdTBCOEUtXHUwQjkwXHUwQjkyLVx1MEI5NVx1MEI5OVx1MEI5QVx1MEI5Q1x1MEI5RVx1
MEI5Rlx1MEJBM1x1MEJBNFx1MEJBOC1cdTBCQUFcdTBCQUUtXHUwQkI5XHUwQkJFLVx1MEJDMlx1
MEJDNi1cdTBCQzhcdTBCQ0EtXHUwQkNEXHUwQkQwXHUwQkQ3XHUwQkU2LVx1MEJFRlx1MEMwMC1c
dTBDMDNcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzM5
XHUwQzNELVx1MEM0NFx1MEM0Ni1cdTBDNDhcdTBDNEEtXHUwQzREXHUwQzU1XHUwQzU2XHUwQzU4
XHUwQzU5XHUwQzYwLVx1MEM2M1x1MEM2Ni1cdTBDNkZcdTBDODEtXHUwQzgzXHUwQzg1LVx1MEM4
Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM1x1MENCNS1cdTBDQjlcdTBD
QkMtXHUwQ0M0XHUwQ0M2LVx1MENDOFx1MENDQS1cdTBDQ0RcdTBDRDVcdTBDRDZcdTBDREVcdTBD
RTAtXHUwQ0UzXHUwQ0U2LVx1MENFRlx1MENGMVx1MENGMlx1MEQwMS1cdTBEMDNcdTBEMDUtXHUw
RDBDXHUwRDBFLVx1MEQxMFx1MEQxMi1cdTBEM0FcdTBEM0QtXHUwRDQ0XHUwRDQ2LVx1MEQ0OFx1
MEQ0QS1cdTBENEVcdTBENTdcdTBENjAtXHUwRDYzXHUwRDY2LVx1MEQ2Rlx1MEQ3QS1cdTBEN0Zc
dTBEODJcdTBEODNcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMVx1MERCMy1cdTBEQkJcdTBEQkRc
dTBEQzAtXHUwREM2XHUwRENBXHUwRENGLVx1MERENFx1MERENlx1MEREOC1cdTBEREZcdTBERTYt
XHUwREVGXHUwREYyXHUwREYzXHUwRTAxLVx1MEUzQVx1MEU0MC1cdTBFNEVcdTBFNTAtXHUwRTU5
XHUwRTgxXHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThEXHUwRTk0LVx1MEU5N1x1
MEU5OS1cdTBFOUZcdTBFQTEtXHUwRUEzXHUwRUE1XHUwRUE3XHUwRUFBXHUwRUFCXHUwRUFELVx1
MEVCOVx1MEVCQi1cdTBFQkRcdTBFQzAtXHUwRUM0XHUwRUM2XHUwRUM4LVx1MEVDRFx1MEVEMC1c
dTBFRDlcdTBFREMtXHUwRURGXHUwRjAwXHUwRjE4XHUwRjE5XHUwRjIwLVx1MEYyOVx1MEYzNVx1
MEYzN1x1MEYzOVx1MEYzRS1cdTBGNDdcdTBGNDktXHUwRjZDXHUwRjcxLVx1MEY4NFx1MEY4Ni1c
dTBGOTdcdTBGOTktXHUwRkJDXHUwRkM2XHUxMDAwLVx1MTA0OVx1MTA1MC1cdTEwOURcdTEwQTAt
XHUxMEM1XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjRE
XHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4
RFx1MTI5MC1cdTEyQjBcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEy
QzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMFx1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUx
MzVELVx1MTM1Rlx1MTM2OS1cdTEzNzFcdTEzODAtXHUxMzhGXHUxM0EwLVx1MTNGNFx1MTQwMS1c
dTE2NkNcdTE2NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE2RUUtXHUxNkY4
XHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTRcdTE3MjAtXHUxNzM0XHUxNzQwLVx1MTc1M1x1MTc2
MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzcyXHUxNzczXHUxNzgwLVx1MTdEM1x1MTdEN1x1MTdE
Q1x1MTdERFx1MTdFMC1cdTE3RTlcdTE4MEItXHUxODBEXHUxODEwLVx1MTgxOVx1MTgyMC1cdTE4
NzdcdTE4ODAtXHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUVcdTE5MjAtXHUxOTJCXHUx
OTMwLVx1MTkzQlx1MTk0Ni1cdTE5NkRcdTE5NzAtXHUxOTc0XHUxOTgwLVx1MTlBQlx1MTlCMC1c
dTE5QzlcdTE5RDAtXHUxOURBXHUxQTAwLVx1MUExQlx1MUEyMC1cdTFBNUVcdTFBNjAtXHUxQTdD
XHUxQTdGLVx1MUE4OVx1MUE5MC1cdTFBOTlcdTFBQTdcdTFBQjAtXHUxQUJEXHUxQjAwLVx1MUI0
Qlx1MUI1MC1cdTFCNTlcdTFCNkItXHUxQjczXHUxQjgwLVx1MUJGM1x1MUMwMC1cdTFDMzdcdTFD
NDAtXHUxQzQ5XHUxQzRELVx1MUM3RFx1MUNEMC1cdTFDRDJcdTFDRDQtXHUxQ0Y2XHUxQ0Y4XHUx
Q0Y5XHUxRDAwLVx1MURGNVx1MURGQy1cdTFGMTVcdTFGMTgtXHUxRjFEXHUxRjIwLVx1MUY0NVx1
MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RFx1
MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0Nc
dTFGRDAtXHUxRkQzXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2
LVx1MUZGQ1x1MjAwQ1x1MjAwRFx1MjAzRlx1MjA0MFx1MjA1NFx1MjA3MVx1MjA3Rlx1MjA5MC1c
dTIwOUNcdTIwRDAtXHUyMERDXHUyMEUxXHUyMEU1LVx1MjBGMFx1MjEwMlx1MjEwN1x1MjEwQS1c
dTIxMTNcdTIxMTVcdTIxMTgtXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XHUyMTJBLVx1MjEzOVx1
MjEzQy1cdTIxM0ZcdTIxNDUtXHUyMTQ5XHUyMTRFXHUyMTYwLVx1MjE4OFx1MkMwMC1cdTJDMkVc
dTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRjNcdTJEMDAtXHUyRDI1XHUyRDI3
XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ3Ri1cdTJEOTZcdTJEQTAtXHUyREE2XHUyREE4
LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJE
Q0VcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkRFMC1cdTJERkZcdTMwMDUtXHUzMDA3XHUz
MDIxLVx1MzAyRlx1MzAzMS1cdTMwMzVcdTMwMzgtXHUzMDNDXHUzMDQxLVx1MzA5Nlx1MzA5OS1c
dTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkRcdTMxMzEtXHUzMThF
XHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZDQ1x1QTAw
MC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MkJcdUE2NDAtXHVB
NjZGXHVBNjc0LVx1QTY3RFx1QTY3Ri1cdUE2OURcdUE2OUYtXHVBNkYxXHVBNzE3LVx1QTcxRlx1
QTcyMi1cdUE3ODhcdUE3OEItXHVBNzhFXHVBNzkwLVx1QTdBRFx1QTdCMFx1QTdCMVx1QTdGNy1c
dUE4MjdcdUE4NDAtXHVBODczXHVBODgwLVx1QThDNFx1QThEMC1cdUE4RDlcdUE4RTAtXHVBOEY3
XHVBOEZCXHVBOTAwLVx1QTkyRFx1QTkzMC1cdUE5NTNcdUE5NjAtXHVBOTdDXHVBOTgwLVx1QTlD
MFx1QTlDRi1cdUE5RDlcdUE5RTAtXHVBOUZFXHVBQTAwLVx1QUEzNlx1QUE0MC1cdUFBNERcdUFB
NTAtXHVBQTU5XHVBQTYwLVx1QUE3Nlx1QUE3QS1cdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1
QUFFRlx1QUFGMi1cdUFBRjZcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZc
dUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRVx1QUIzMC1cdUFCNUFcdUFCNUMtXHVBQjVGXHVBQjY0
XHVBQjY1XHVBQkMwLVx1QUJFQVx1QUJFQ1x1QUJFRFx1QUJGMC1cdUFCRjlcdUFDMDAtXHVEN0Ez
XHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXHVGQTcwLVx1RkFEOVx1RkIw
MC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFELVx1RkIyOFx1RkIyQS1cdUZCMzZcdUZCMzgtXHVG
QjNDXHVGQjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZE
M0RcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFMDAtXHVGRTBGXHVG
RTIwLVx1RkUyRFx1RkUzM1x1RkUzNFx1RkU0RC1cdUZFNEZcdUZFNzAtXHVGRTc0XHVGRTc2LVx1
RkVGQ1x1RkYxMC1cdUZGMTlcdUZGMjEtXHVGRjNBXHVGRjNGXHVGRjQxLVx1RkY1QVx1RkY2Ni1c
dUZGQkVcdUZGQzItXHVGRkM3XHVGRkNBLVx1RkZDRlx1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRD
XXxcdUQ4MDBbXHVEQzAwLVx1REMwQlx1REMwRC1cdURDMjZcdURDMjgtXHVEQzNBXHVEQzNDXHVE
QzNEXHVEQzNGLVx1REM0RFx1REM1MC1cdURDNURcdURDODAtXHVEQ0ZBXHVERDQwLVx1REQ3NFx1
RERGRFx1REU4MC1cdURFOUNcdURFQTAtXHVERUQwXHVERUUwXHVERjAwLVx1REYxRlx1REYzMC1c
dURGNEFcdURGNTAtXHVERjdBXHVERjgwLVx1REY5RFx1REZBMC1cdURGQzNcdURGQzgtXHVERkNG
XHVERkQxLVx1REZENV18XHVEODAxW1x1REMwMC1cdURDOURcdURDQTAtXHVEQ0E5XHVERDAwLVx1
REQyN1x1REQzMC1cdURENjNcdURFMDAtXHVERjM2XHVERjQwLVx1REY1NVx1REY2MC1cdURGNjdd
fFx1RDgwMltcdURDMDAtXHVEQzA1XHVEQzA4XHVEQzBBLVx1REMzNVx1REMzN1x1REMzOFx1REMz
Q1x1REMzRi1cdURDNTVcdURDNjAtXHVEQzc2XHVEQzgwLVx1REM5RVx1REQwMC1cdUREMTVcdURE
MjAtXHVERDM5XHVERDgwLVx1RERCN1x1RERCRVx1RERCRlx1REUwMC1cdURFMDNcdURFMDVcdURF
MDZcdURFMEMtXHVERTEzXHVERTE1LVx1REUxN1x1REUxOS1cdURFMzNcdURFMzgtXHVERTNBXHVE
RTNGXHVERTYwLVx1REU3Q1x1REU4MC1cdURFOUNcdURFQzAtXHVERUM3XHVERUM5LVx1REVFNlx1
REYwMC1cdURGMzVcdURGNDAtXHVERjU1XHVERjYwLVx1REY3Mlx1REY4MC1cdURGOTFdfFx1RDgw
M1tcdURDMDAtXHVEQzQ4XXxcdUQ4MDRbXHVEQzAwLVx1REM0Nlx1REM2Ni1cdURDNkZcdURDN0Yt
XHVEQ0JBXHVEQ0QwLVx1RENFOFx1RENGMC1cdURDRjlcdUREMDAtXHVERDM0XHVERDM2LVx1REQz
Rlx1REQ1MC1cdURENzNcdURENzZcdUREODAtXHVEREM0XHVEREQwLVx1REREQVx1REUwMC1cdURF
MTFcdURFMTMtXHVERTM3XHVERUIwLVx1REVFQVx1REVGMC1cdURFRjlcdURGMDEtXHVERjAzXHVE
RjA1LVx1REYwQ1x1REYwRlx1REYxMFx1REYxMy1cdURGMjhcdURGMkEtXHVERjMwXHVERjMyXHVE
RjMzXHVERjM1LVx1REYzOVx1REYzQy1cdURGNDRcdURGNDdcdURGNDhcdURGNEItXHVERjREXHVE
RjU3XHVERjVELVx1REY2M1x1REY2Ni1cdURGNkNcdURGNzAtXHVERjc0XXxcdUQ4MDVbXHVEQzgw
LVx1RENDNVx1RENDN1x1RENEMC1cdURDRDlcdUREODAtXHVEREI1XHVEREI4LVx1RERDMFx1REUw
MC1cdURFNDBcdURFNDRcdURFNTAtXHVERTU5XHVERTgwLVx1REVCN1x1REVDMC1cdURFQzldfFx1
RDgwNltcdURDQTAtXHVEQ0U5XHVEQ0ZGXHVERUMwLVx1REVGOF18XHVEODA4W1x1REMwMC1cdURG
OThdfFx1RDgwOVtcdURDMDAtXHVEQzZFXXxbXHVEODBDXHVEODQwLVx1RDg2OFx1RDg2QS1cdUQ4
NkNdW1x1REMwMC1cdURGRkZdfFx1RDgwRFtcdURDMDAtXHVEQzJFXXxcdUQ4MUFbXHVEQzAwLVx1
REUzOFx1REU0MC1cdURFNUVcdURFNjAtXHVERTY5XHVERUQwLVx1REVFRFx1REVGMC1cdURFRjRc
dURGMDAtXHVERjM2XHVERjQwLVx1REY0M1x1REY1MC1cdURGNTlcdURGNjMtXHVERjc3XHVERjdE
LVx1REY4Rl18XHVEODFCW1x1REYwMC1cdURGNDRcdURGNTAtXHVERjdFXHVERjhGLVx1REY5Rl18
XHVEODJDW1x1REMwMFx1REMwMV18XHVEODJGW1x1REMwMC1cdURDNkFcdURDNzAtXHVEQzdDXHVE
QzgwLVx1REM4OFx1REM5MC1cdURDOTlcdURDOURcdURDOUVdfFx1RDgzNFtcdURENjUtXHVERDY5
XHVERDZELVx1REQ3Mlx1REQ3Qi1cdUREODJcdUREODUtXHVERDhCXHVEREFBLVx1RERBRFx1REU0
Mi1cdURFNDRdfFx1RDgzNVtcdURDMDAtXHVEQzU0XHVEQzU2LVx1REM5Q1x1REM5RVx1REM5Rlx1
RENBMlx1RENBNVx1RENBNlx1RENBOS1cdURDQUNcdURDQUUtXHVEQ0I5XHVEQ0JCXHVEQ0JELVx1
RENDM1x1RENDNS1cdUREMDVcdUREMDctXHVERDBBXHVERDBELVx1REQxNFx1REQxNi1cdUREMUNc
dUREMUUtXHVERDM5XHVERDNCLVx1REQzRVx1REQ0MC1cdURENDRcdURENDZcdURENEEtXHVERDUw
XHVERDUyLVx1REVBNVx1REVBOC1cdURFQzBcdURFQzItXHVERURBXHVERURDLVx1REVGQVx1REVG
Qy1cdURGMTRcdURGMTYtXHVERjM0XHVERjM2LVx1REY0RVx1REY1MC1cdURGNkVcdURGNzAtXHVE
Rjg4XHVERjhBLVx1REZBOFx1REZBQS1cdURGQzJcdURGQzQtXHVERkNCXHVERkNFLVx1REZGRl18
XHVEODNBW1x1REMwMC1cdURDQzRcdURDRDAtXHVEQ0Q2XXxcdUQ4M0JbXHVERTAwLVx1REUwM1x1
REUwNS1cdURFMUZcdURFMjFcdURFMjJcdURFMjRcdURFMjdcdURFMjktXHVERTMyXHVERTM0LVx1
REUzN1x1REUzOVx1REUzQlx1REU0Mlx1REU0N1x1REU0OVx1REU0Qlx1REU0RC1cdURFNEZcdURF
NTFcdURFNTJcdURFNTRcdURFNTdcdURFNTlcdURFNUJcdURFNURcdURFNUZcdURFNjFcdURFNjJc
dURFNjRcdURFNjctXHVERTZBXHVERTZDLVx1REU3Mlx1REU3NC1cdURFNzdcdURFNzktXHVERTdD
XHVERTdFXHVERTgwLVx1REU4OVx1REU4Qi1cdURFOUJcdURFQTEtXHVERUEzXHVERUE1LVx1REVB
OVx1REVBQi1cdURFQkJdfFx1RDg2OVtcdURDMDAtXHVERUQ2XHVERjAwLVx1REZGRl18XHVEODZE
W1x1REMwMC1cdURGMzRcdURGNDAtXHVERkZGXXxcdUQ4NkVbXHVEQzAwLVx1REMxRF18XHVEODdF
W1x1REMwMC1cdURFMURdfFx1REI0MFtcdUREMDAtXHVEREVGXS8KLSAgICB9OwotCi0gICAgLy8g
RW5zdXJlIHRoZSBjb25kaXRpb24gaXMgdHJ1ZSwgb3RoZXJ3aXNlIHRocm93IGFuIGVycm9yLgot
ICAgIC8vIFRoaXMgaXMgb25seSB0byBoYXZlIGEgYmV0dGVyIGNvbnRyYWN0IHNlbWFudGljLCBp
LmUuIGFub3RoZXIgc2FmZXR5IG5ldAotICAgIC8vIHRvIGNhdGNoIGEgbG9naWMgZXJyb3IuIFRo
ZSBjb25kaXRpb24gc2hhbGwgYmUgZnVsZmlsbGVkIGluIG5vcm1hbCBjYXNlLgotICAgIC8vIERv
IE5PVCB1c2UgdGhpcyB0byBlbmZvcmNlIGEgY2VydGFpbiBjb25kaXRpb24gb24gYW55IHVzZXIg
aW5wdXQuCi0KLSAgICBmdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uLCBtZXNzYWdlKSB7Ci0gICAg
ICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqLwotICAgICAgICBpZiAoIWNvbmRpdGlvbikgewot
ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBU1NFUlQ6ICcgKyBtZXNzYWdlKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIGlzRGVjaW1hbERpZ2l0KGNoKSB7Ci0gICAgICAg
IHJldHVybiAoY2ggPj0gMHgzMCAmJiBjaCA8PSAweDM5KTsgICAvLyAwLi45Ci0gICAgfQotCi0g
ICAgZnVuY3Rpb24gaXNIZXhEaWdpdChjaCkgewotICAgICAgICByZXR1cm4gJzAxMjM0NTY3ODlh
YmNkZWZBQkNERUYnLmluZGV4T2YoY2gpID49IDA7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gaXNP
Y3RhbERpZ2l0KGNoKSB7Ci0gICAgICAgIHJldHVybiAnMDEyMzQ1NjcnLmluZGV4T2YoY2gpID49
IDA7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gb2N0YWxUb0RlY2ltYWwoY2gpIHsKLSAgICAgICAg
Ly8gXDAgaXMgbm90IG9jdGFsIGVzY2FwZSBzZXF1ZW5jZQotICAgICAgICB2YXIgb2N0YWwgPSAo
Y2ggIT09ICcwJyksIGNvZGUgPSAnMDEyMzQ1NjcnLmluZGV4T2YoY2gpOwotCi0gICAgICAgIGlm
IChpbmRleCA8IGxlbmd0aCAmJiBpc09jdGFsRGlnaXQoc291cmNlW2luZGV4XSkpIHsKLSAgICAg
ICAgICAgIG9jdGFsID0gdHJ1ZTsKLSAgICAgICAgICAgIGNvZGUgPSBjb2RlICogOCArICcwMTIz
NDU2NycuaW5kZXhPZihzb3VyY2VbaW5kZXgrK10pOwotCi0gICAgICAgICAgICAvLyAzIGRpZ2l0
cyBhcmUgb25seSBhbGxvd2VkIHdoZW4gc3RyaW5nIHN0YXJ0cwotICAgICAgICAgICAgLy8gd2l0
aCAwLCAxLCAyLCAzCi0gICAgICAgICAgICBpZiAoJzAxMjMnLmluZGV4T2YoY2gpID49IDAgJiYK
LSAgICAgICAgICAgICAgICAgICAgaW5kZXggPCBsZW5ndGggJiYKLSAgICAgICAgICAgICAgICAg
ICAgaXNPY3RhbERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7Ci0gICAgICAgICAgICAgICAgY29kZSA9
IGNvZGUgKiA4ICsgJzAxMjM0NTY3Jy5pbmRleE9mKHNvdXJjZVtpbmRleCsrXSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgY29kZTog
Y29kZSwKLSAgICAgICAgICAgIG9jdGFsOiBvY3RhbAotICAgICAgICB9OwotICAgIH0KLQotICAg
IC8vIEVDTUEtMjYyIDExLjIgV2hpdGUgU3BhY2UKLQotICAgIGZ1bmN0aW9uIGlzV2hpdGVTcGFj
ZShjaCkgewotICAgICAgICByZXR1cm4gKGNoID09PSAweDIwKSB8fCAoY2ggPT09IDB4MDkpIHx8
IChjaCA9PT0gMHgwQikgfHwgKGNoID09PSAweDBDKSB8fCAoY2ggPT09IDB4QTApIHx8Ci0gICAg
ICAgICAgICAoY2ggPj0gMHgxNjgwICYmIFsweDE2ODAsIDB4MTgwRSwgMHgyMDAwLCAweDIwMDEs
IDB4MjAwMiwgMHgyMDAzLCAweDIwMDQsIDB4MjAwNSwgMHgyMDA2LCAweDIwMDcsIDB4MjAwOCwg
MHgyMDA5LCAweDIwMEEsIDB4MjAyRiwgMHgyMDVGLCAweDMwMDAsIDB4RkVGRl0uaW5kZXhPZihj
aCkgPj0gMCk7Ci0gICAgfQotCi0gICAgLy8gRUNNQS0yNjIgMTEuMyBMaW5lIFRlcm1pbmF0b3Jz
Ci0KLSAgICBmdW5jdGlvbiBpc0xpbmVUZXJtaW5hdG9yKGNoKSB7Ci0gICAgICAgIHJldHVybiAo
Y2ggPT09IDB4MEEpIHx8IChjaCA9PT0gMHgwRCkgfHwgKGNoID09PSAweDIwMjgpIHx8IChjaCA9
PT0gMHgyMDI5KTsKLSAgICB9Ci0KLSAgICAvLyBFQ01BLTI2MiAxMS42IElkZW50aWZpZXIgTmFt
ZXMgYW5kIElkZW50aWZpZXJzCi0KLSAgICBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KGNwKSB7Ci0g
ICAgICAgIHJldHVybiAoY3AgPCAweDEwMDAwKSA/IFN0cmluZy5mcm9tQ2hhckNvZGUoY3ApIDoK
LSAgICAgICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoMHhEODAwICsgKChjcCAtIDB4MTAwMDAp
ID4+IDEwKSkgKwotICAgICAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgweERDMDAgKyAoKGNw
IC0gMHgxMDAwMCkgJiAxMDIzKSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gaXNJZGVudGlmaWVy
U3RhcnQoY2gpIHsKLSAgICAgICAgcmV0dXJuIChjaCA9PT0gMHgyNCkgfHwgKGNoID09PSAweDVG
KSB8fCAgLy8gJCAoZG9sbGFyKSBhbmQgXyAodW5kZXJzY29yZSkKLSAgICAgICAgICAgIChjaCA+
PSAweDQxICYmIGNoIDw9IDB4NUEpIHx8ICAgICAgICAgLy8gQS4uWgotICAgICAgICAgICAgKGNo
ID49IDB4NjEgJiYgY2ggPD0gMHg3QSkgfHwgICAgICAgICAvLyBhLi56Ci0gICAgICAgICAgICAo
Y2ggPT09IDB4NUMpIHx8ICAgICAgICAgICAgICAgICAgICAgIC8vIFwgKGJhY2tzbGFzaCkKLSAg
ICAgICAgICAgICgoY2ggPj0gMHg4MCkgJiYgUmVnZXguTm9uQXNjaWlJZGVudGlmaWVyU3RhcnQu
dGVzdChmcm9tQ29kZVBvaW50KGNoKSkpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGlzSWRlbnRp
ZmllclBhcnQoY2gpIHsKLSAgICAgICAgcmV0dXJuIChjaCA9PT0gMHgyNCkgfHwgKGNoID09PSAw
eDVGKSB8fCAgLy8gJCAoZG9sbGFyKSBhbmQgXyAodW5kZXJzY29yZSkKLSAgICAgICAgICAgIChj
aCA+PSAweDQxICYmIGNoIDw9IDB4NUEpIHx8ICAgICAgICAgLy8gQS4uWgotICAgICAgICAgICAg
KGNoID49IDB4NjEgJiYgY2ggPD0gMHg3QSkgfHwgICAgICAgICAvLyBhLi56Ci0gICAgICAgICAg
ICAoY2ggPj0gMHgzMCAmJiBjaCA8PSAweDM5KSB8fCAgICAgICAgIC8vIDAuLjkKLSAgICAgICAg
ICAgIChjaCA9PT0gMHg1QykgfHwgICAgICAgICAgICAgICAgICAgICAgLy8gXCAoYmFja3NsYXNo
KQotICAgICAgICAgICAgKChjaCA+PSAweDgwKSAmJiBSZWdleC5Ob25Bc2NpaUlkZW50aWZpZXJQ
YXJ0LnRlc3QoZnJvbUNvZGVQb2ludChjaCkpKTsKLSAgICB9Ci0KLSAgICAvLyBFQ01BLTI2MiAx
MS42LjIuMiBGdXR1cmUgUmVzZXJ2ZWQgV29yZHMKLQotICAgIGZ1bmN0aW9uIGlzRnV0dXJlUmVz
ZXJ2ZWRXb3JkKGlkKSB7Ci0gICAgICAgIHN3aXRjaCAoaWQpIHsKLSAgICAgICAgY2FzZSAnZW51
bSc6Ci0gICAgICAgIGNhc2UgJ2V4cG9ydCc6Ci0gICAgICAgIGNhc2UgJ2ltcG9ydCc6Ci0gICAg
ICAgIGNhc2UgJ3N1cGVyJzoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
ZnVuY3Rpb24gaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKGlkKSB7Ci0gICAgICAgIHN3aXRjaCAo
aWQpIHsKLSAgICAgICAgY2FzZSAnaW1wbGVtZW50cyc6Ci0gICAgICAgIGNhc2UgJ2ludGVyZmFj
ZSc6Ci0gICAgICAgIGNhc2UgJ3BhY2thZ2UnOgotICAgICAgICBjYXNlICdwcml2YXRlJzoKLSAg
ICAgICAgY2FzZSAncHJvdGVjdGVkJzoKLSAgICAgICAgY2FzZSAncHVibGljJzoKLSAgICAgICAg
Y2FzZSAnc3RhdGljJzoKLSAgICAgICAgY2FzZSAneWllbGQnOgotICAgICAgICBjYXNlICdsZXQn
OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBpc1Jlc3Ry
aWN0ZWRXb3JkKGlkKSB7Ci0gICAgICAgIHJldHVybiBpZCA9PT0gJ2V2YWwnIHx8IGlkID09PSAn
YXJndW1lbnRzJzsKLSAgICB9Ci0KLSAgICAvLyBFQ01BLTI2MiAxMS42LjIuMSBLZXl3b3Jkcwot
Ci0gICAgZnVuY3Rpb24gaXNLZXl3b3JkKGlkKSB7Ci0KLSAgICAgICAgLy8gJ2NvbnN0JyBpcyBz
cGVjaWFsaXplZCBhcyBLZXl3b3JkIGluIFY4LgotICAgICAgICAvLyAneWllbGQnIGFuZCAnbGV0
JyBhcmUgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBTcGlkZXJNb25rZXkgYW5kIEVTLm5leHQuCi0g
ICAgICAgIC8vIFNvbWUgb3RoZXJzIGFyZSBmcm9tIGZ1dHVyZSByZXNlcnZlZCB3b3Jkcy4KLQot
ICAgICAgICBzd2l0Y2ggKGlkLmxlbmd0aCkgewotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAg
ICByZXR1cm4gKGlkID09PSAnaWYnKSB8fCAoaWQgPT09ICdpbicpIHx8IChpZCA9PT0gJ2RvJyk7
Ci0gICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICd2YXInKSB8fCAo
aWQgPT09ICdmb3InKSB8fCAoaWQgPT09ICduZXcnKSB8fAotICAgICAgICAgICAgICAgIChpZCA9
PT0gJ3RyeScpIHx8IChpZCA9PT0gJ2xldCcpOwotICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAg
ICByZXR1cm4gKGlkID09PSAndGhpcycpIHx8IChpZCA9PT0gJ2Vsc2UnKSB8fCAoaWQgPT09ICdj
YXNlJykgfHwKLSAgICAgICAgICAgICAgICAoaWQgPT09ICd2b2lkJykgfHwgKGlkID09PSAnd2l0
aCcpIHx8IChpZCA9PT0gJ2VudW0nKTsKLSAgICAgICAgY2FzZSA1OgotICAgICAgICAgICAgcmV0
dXJuIChpZCA9PT0gJ3doaWxlJykgfHwgKGlkID09PSAnYnJlYWsnKSB8fCAoaWQgPT09ICdjYXRj
aCcpIHx8Ci0gICAgICAgICAgICAgICAgKGlkID09PSAndGhyb3cnKSB8fCAoaWQgPT09ICdjb25z
dCcpIHx8IChpZCA9PT0gJ3lpZWxkJykgfHwKLSAgICAgICAgICAgICAgICAoaWQgPT09ICdjbGFz
cycpIHx8IChpZCA9PT0gJ3N1cGVyJyk7Ci0gICAgICAgIGNhc2UgNjoKLSAgICAgICAgICAgIHJl
dHVybiAoaWQgPT09ICdyZXR1cm4nKSB8fCAoaWQgPT09ICd0eXBlb2YnKSB8fCAoaWQgPT09ICdk
ZWxldGUnKSB8fAotICAgICAgICAgICAgICAgIChpZCA9PT0gJ3N3aXRjaCcpIHx8IChpZCA9PT0g
J2V4cG9ydCcpIHx8IChpZCA9PT0gJ2ltcG9ydCcpOwotICAgICAgICBjYXNlIDc6Ci0gICAgICAg
ICAgICByZXR1cm4gKGlkID09PSAnZGVmYXVsdCcpIHx8IChpZCA9PT0gJ2ZpbmFsbHknKSB8fCAo
aWQgPT09ICdleHRlbmRzJyk7Ci0gICAgICAgIGNhc2UgODoKLSAgICAgICAgICAgIHJldHVybiAo
aWQgPT09ICdmdW5jdGlvbicpIHx8IChpZCA9PT0gJ2NvbnRpbnVlJykgfHwgKGlkID09PSAnZGVi
dWdnZXInKTsKLSAgICAgICAgY2FzZSAxMDoKLSAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICdp
bnN0YW5jZW9mJyk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBFQ01BLTI2MiAxMS40IENvbW1lbnRzCi0KLSAg
ICBmdW5jdGlvbiBhZGRDb21tZW50KHR5cGUsIHZhbHVlLCBzdGFydCwgZW5kLCBsb2MpIHsKLSAg
ICAgICAgdmFyIGNvbW1lbnQ7Ci0KLSAgICAgICAgYXNzZXJ0KHR5cGVvZiBzdGFydCA9PT0gJ251
bWJlcicsICdDb21tZW50IG11c3QgaGF2ZSB2YWxpZCBwb3NpdGlvbicpOwotCi0gICAgICAgIHN0
YXRlLmxhc3RDb21tZW50U3RhcnQgPSBzdGFydDsKLQotICAgICAgICBjb21tZW50ID0gewotICAg
ICAgICAgICAgdHlwZTogdHlwZSwKLSAgICAgICAgICAgIHZhbHVlOiB2YWx1ZQotICAgICAgICB9
OwotICAgICAgICBpZiAoZXh0cmEucmFuZ2UpIHsKLSAgICAgICAgICAgIGNvbW1lbnQucmFuZ2Ug
PSBbc3RhcnQsIGVuZF07Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV4dHJhLmxvYykgewotICAg
ICAgICAgICAgY29tbWVudC5sb2MgPSBsb2M7Ci0gICAgICAgIH0KLSAgICAgICAgZXh0cmEuY29t
bWVudHMucHVzaChjb21tZW50KTsKLSAgICAgICAgaWYgKGV4dHJhLmF0dGFjaENvbW1lbnQpIHsK
LSAgICAgICAgICAgIGV4dHJhLmxlYWRpbmdDb21tZW50cy5wdXNoKGNvbW1lbnQpOwotICAgICAg
ICAgICAgZXh0cmEudHJhaWxpbmdDb21tZW50cy5wdXNoKGNvbW1lbnQpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgZnVuY3Rpb24gc2tpcFNpbmdsZUxpbmVDb21tZW50KG9mZnNldCkgewotICAg
ICAgICB2YXIgc3RhcnQsIGxvYywgY2gsIGNvbW1lbnQ7Ci0KLSAgICAgICAgc3RhcnQgPSBpbmRl
eCAtIG9mZnNldDsKLSAgICAgICAgbG9jID0gewotICAgICAgICAgICAgc3RhcnQ6IHsKLSAgICAg
ICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAgIGNvbHVtbjogaW5k
ZXggLSBsaW5lU3RhcnQgLSBvZmZzZXQKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAg
ICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAgICAgIGNoID0gc291cmNlLmNo
YXJDb2RlQXQoaW5kZXgpOwotICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAgIGlmIChp
c0xpbmVUZXJtaW5hdG9yKGNoKSkgewotICAgICAgICAgICAgICAgIGhhc0xpbmVUZXJtaW5hdG9y
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAoZXh0cmEuY29tbWVudHMpIHsKLSAgICAgICAg
ICAgICAgICAgICAgY29tbWVudCA9IHNvdXJjZS5zbGljZShzdGFydCArIG9mZnNldCwgaW5kZXgg
LSAxKTsKLSAgICAgICAgICAgICAgICAgICAgbG9jLmVuZCA9IHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46
IGluZGV4IC0gbGluZVN0YXJ0IC0gMQotICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAg
ICAgICAgICAgICBhZGRDb21tZW50KCdMaW5lJywgY29tbWVudCwgc3RhcnQsIGluZGV4IC0gMSwg
bG9jKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09PSAxMyAm
JiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDEwKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICsraW5kZXg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICsrbGluZU51bWJl
cjsKLSAgICAgICAgICAgICAgICBsaW5lU3RhcnQgPSBpbmRleDsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZXh0cmEuY29t
bWVudHMpIHsKLSAgICAgICAgICAgIGNvbW1lbnQgPSBzb3VyY2Uuc2xpY2Uoc3RhcnQgKyBvZmZz
ZXQsIGluZGV4KTsKLSAgICAgICAgICAgIGxvYy5lbmQgPSB7Ci0gICAgICAgICAgICAgICAgbGlu
ZTogbGluZU51bWJlciwKLSAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0
Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgYWRkQ29tbWVudCgnTGluZScsIGNvbW1lbnQs
IHN0YXJ0LCBpbmRleCwgbG9jKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIHNr
aXBNdWx0aUxpbmVDb21tZW50KCkgewotICAgICAgICB2YXIgc3RhcnQsIGxvYywgY2gsIGNvbW1l
bnQ7Ci0KLSAgICAgICAgaWYgKGV4dHJhLmNvbW1lbnRzKSB7Ci0gICAgICAgICAgICBzdGFydCA9
IGluZGV4IC0gMjsKLSAgICAgICAgICAgIGxvYyA9IHsKLSAgICAgICAgICAgICAgICBzdGFydDog
ewotICAgICAgICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAg
ICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0IC0gMgotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH07Ci0gICAgICAgIH0KLQotICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgp
IHsKLSAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpOwotICAgICAgICAg
ICAgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2gpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09
PSAweDBEICYmIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSkgPT09IDB4MEEpIHsKLSAgICAg
ICAgICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgaGFzTGluZVRlcm1pbmF0b3IgPSB0cnVlOwotICAgICAgICAgICAgICAgICsrbGluZU51bWJl
cjsKLSAgICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgICAgIGxpbmVTdGFydCA9
IGluZGV4OwotICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyQSkgewotICAgICAgICAg
ICAgICAgIC8vIEJsb2NrIGNvbW1lbnQgZW5kcyB3aXRoICcqLycuCi0gICAgICAgICAgICAgICAg
aWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSkgPT09IDB4MkYpIHsKLSAgICAgICAgICAg
ICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGV4dHJhLmNvbW1lbnRzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjb21tZW50ID0gc291cmNlLnNsaWNlKHN0YXJ0ICsgMiwgaW5kZXggLSAyKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGxvYy5lbmQgPSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGluZTogbGluZU51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGlu
ZGV4IC0gbGluZVN0YXJ0Ci0gICAgICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAg
ICAgICAgICAgICAgYWRkQ29tbWVudCgnQmxvY2snLCBjb21tZW50LCBzdGFydCwgaW5kZXgsIGxv
Yyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gUmFuIG9mZiB0aGUgZW5kIG9mIHRoZSBmaWxlIC0gdGhlIHdob2xl
IHRoaW5nIGlzIGEgY29tbWVudAotICAgICAgICBpZiAoZXh0cmEuY29tbWVudHMpIHsKLSAgICAg
ICAgICAgIGxvYy5lbmQgPSB7Ci0gICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlciwKLSAg
ICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0Ci0gICAgICAgICAgICB9Owot
ICAgICAgICAgICAgY29tbWVudCA9IHNvdXJjZS5zbGljZShzdGFydCArIDIsIGluZGV4KTsKLSAg
ICAgICAgICAgIGFkZENvbW1lbnQoJ0Jsb2NrJywgY29tbWVudCwgc3RhcnQsIGluZGV4LCBsb2Mp
OwotICAgICAgICB9Ci0gICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKCk7Ci0gICAgfQot
Ci0gICAgZnVuY3Rpb24gc2tpcENvbW1lbnQoKSB7Ci0gICAgICAgIHZhciBjaCwgc3RhcnQ7Ci0g
ICAgICAgIGhhc0xpbmVUZXJtaW5hdG9yID0gZmFsc2U7Ci0KLSAgICAgICAgc3RhcnQgPSAoaW5k
ZXggPT09IDApOwotICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAgICAg
IGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpOwotCi0gICAgICAgICAgICBpZiAoaXNXaGl0
ZVNwYWNlKGNoKSkgewotICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAgICB9IGVs
c2UgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2gpKSB7Ci0gICAgICAgICAgICAgICAgaGFzTGluZVRl
cm1pbmF0b3IgPSB0cnVlOwotICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAgICAg
ICAgaWYgKGNoID09PSAweDBEICYmIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHgwQSkg
ewotICAgICAgICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICArK2xpbmVOdW1iZXI7Ci0gICAgICAgICAgICAgICAgbGluZVN0YXJ0ID0gaW5k
ZXg7Ci0gICAgICAgICAgICAgICAgc3RhcnQgPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlIGlm
IChjaCA9PT0gMHgyRikgeyAvLyBVKzAwMkYgaXMgJy8nCi0gICAgICAgICAgICAgICAgY2ggPSBz
b3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpOwotICAgICAgICAgICAgICAgIGlmIChjaCA9PT0g
MHgyRikgewotICAgICAgICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgICAgICAg
ICArK2luZGV4OwotICAgICAgICAgICAgICAgICAgICBza2lwU2luZ2xlTGluZUNvbW1lbnQoMik7
Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKGNoID09PSAweDJBKSB7ICAvLyBVKzAwMkEgaXMgJyonCi0gICAgICAgICAgICAgICAg
ICAgICsraW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAgICAg
ICAgICAgIHNraXBNdWx0aUxpbmVDb21tZW50KCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfSBlbHNlIGlmIChzdGFydCAmJiBjaCA9PT0gMHgyRCkgeyAvLyBVKzAwMkQgaXMgJy0nCi0g
ICAgICAgICAgICAgICAgLy8gVSswMDNFIGlzICc+JwotICAgICAgICAgICAgICAgIGlmICgoc291
cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSA9PT0gMHgyRCkgJiYgKHNvdXJjZS5jaGFyQ29kZUF0
KGluZGV4ICsgMikgPT09IDB4M0UpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vICctLT4nIGlz
IGEgc2luZ2xlLWxpbmUgY29tbWVudAotICAgICAgICAgICAgICAgICAgICBpbmRleCArPSAzOwot
ICAgICAgICAgICAgICAgICAgICBza2lwU2luZ2xlTGluZUNvbW1lbnQoMyk7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgzQykgeyAvLyBVKzAwM0MgaXMg
JzwnCi0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5zbGljZShpbmRleCArIDEsIGluZGV4ICsg
NCkgPT09ICchLS0nKSB7Ci0gICAgICAgICAgICAgICAgICAgICsraW5kZXg7IC8vIGA8YAotICAg
ICAgICAgICAgICAgICAgICArK2luZGV4OyAvLyBgIWAKLSAgICAgICAgICAgICAgICAgICAgKytp
bmRleDsgLy8gYC1gCi0gICAgICAgICAgICAgICAgICAgICsraW5kZXg7IC8vIGAtYAotICAgICAg
ICAgICAgICAgICAgICBza2lwU2luZ2xlTGluZUNvbW1lbnQoNCk7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIHNjYW5IZXhFc2NhcGUocHJlZml4
KSB7Ci0gICAgICAgIHZhciBpLCBsZW4sIGNoLCBjb2RlID0gMDsKLQotICAgICAgICBsZW4gPSAo
cHJlZml4ID09PSAndScpID8gNCA6IDI7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsr
aSkgewotICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIGlzSGV4RGlnaXQoc291cmNl
W2luZGV4XSkpIHsKLSAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTsKLSAgICAg
ICAgICAgICAgICBjb2RlID0gY29kZSAqIDE2ICsgJzAxMjM0NTY3ODlhYmNkZWYnLmluZGV4T2Yo
Y2gudG9Mb3dlckNhc2UoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IHJldHVybiAnJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gU3Ry
aW5nLmZyb21DaGFyQ29kZShjb2RlKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBzY2FuVW5pY29k
ZUNvZGVQb2ludEVzY2FwZSgpIHsKLSAgICAgICAgdmFyIGNoLCBjb2RlOwotCi0gICAgICAgIGNo
ID0gc291cmNlW2luZGV4XTsKLSAgICAgICAgY29kZSA9IDA7Ci0KLSAgICAgICAgLy8gQXQgbGVh
c3QsIG9uZSBoZXggZGlnaXQgaXMgcmVxdWlyZWQuCi0gICAgICAgIGlmIChjaCA9PT0gJ30nKSB7
Ci0gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRl
eCsrXTsKLSAgICAgICAgICAgIGlmICghaXNIZXhEaWdpdChjaCkpIHsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvZGUgPSBjb2RlICogMTYgKyAn
MDEyMzQ1Njc4OWFiY2RlZicuaW5kZXhPZihjaC50b0xvd2VyQ2FzZSgpKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChjb2RlID4gMHgxMEZGRkYgfHwgY2ggIT09ICd9JykgewotICAgICAgICAg
ICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBm
cm9tQ29kZVBvaW50KGNvZGUpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGNvZGVQb2ludEF0KGkp
IHsKLSAgICAgICAgdmFyIGNwLCBmaXJzdCwgc2Vjb25kOwotCi0gICAgICAgIGNwID0gc291cmNl
LmNoYXJDb2RlQXQoaSk7Ci0gICAgICAgIGlmIChjcCA+PSAweEQ4MDAgJiYgY3AgPD0gMHhEQkZG
KSB7Ci0gICAgICAgICAgICBzZWNvbmQgPSBzb3VyY2UuY2hhckNvZGVBdChpICsgMSk7Ci0gICAg
ICAgICAgICBpZiAoc2Vjb25kID49IDB4REMwMCAmJiBzZWNvbmQgPD0gMHhERkZGKSB7Ci0gICAg
ICAgICAgICAgICAgZmlyc3QgPSBjcDsKLSAgICAgICAgICAgICAgICBjcCA9IChmaXJzdCAtIDB4
RDgwMCkgKiAweDQwMCArIHNlY29uZCAtIDB4REMwMCArIDB4MTAwMDA7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gY3A7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24g
Z2V0Q29tcGxleElkZW50aWZpZXIoKSB7Ci0gICAgICAgIHZhciBjcCwgY2gsIGlkOwotCi0gICAg
ICAgIGNwID0gY29kZVBvaW50QXQoaW5kZXgpOwotICAgICAgICBpZCA9IGZyb21Db2RlUG9pbnQo
Y3ApOwotICAgICAgICBpbmRleCArPSBpZC5sZW5ndGg7Ci0KLSAgICAgICAgLy8gJ1x1JyAoVSsw
MDVDLCBVKzAwNzUpIGRlbm90ZXMgYW4gZXNjYXBlZCBjaGFyYWN0ZXIuCi0gICAgICAgIGlmIChj
cCA9PT0gMHg1QykgewotICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSAh
PT0gMHg3NSkgewotICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgaWYgKHNvdXJjZVtp
bmRleF0gPT09ICd7JykgewotICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAgICAg
ICAgY2ggPSBzY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSgpOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBjaCA9IHNjYW5IZXhFc2NhcGUoJ3UnKTsKLSAgICAgICAgICAg
ICAgICBjcCA9IGNoLmNoYXJDb2RlQXQoMCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjaCB8fCBj
aCA9PT0gJ1xcJyB8fCAhaXNJZGVudGlmaWVyU3RhcnQoY3ApKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHRocm93VW5leHBlY3RlZFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWQgPSBjaDsKLSAgICAgICAgfQotCi0gICAgICAgIHdoaWxlIChp
bmRleCA8IGxlbmd0aCkgewotICAgICAgICAgICAgY3AgPSBjb2RlUG9pbnRBdChpbmRleCk7Ci0g
ICAgICAgICAgICBpZiAoIWlzSWRlbnRpZmllclBhcnQoY3ApKSB7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjaCA9IGZyb21Db2RlUG9pbnQoY3Ap
OwotICAgICAgICAgICAgaWQgKz0gY2g7Ci0gICAgICAgICAgICBpbmRleCArPSBjaC5sZW5ndGg7
Ci0KLSAgICAgICAgICAgIC8vICdcdScgKFUrMDA1QywgVSswMDc1KSBkZW5vdGVzIGFuIGVzY2Fw
ZWQgY2hhcmFjdGVyLgotICAgICAgICAgICAgaWYgKGNwID09PSAweDVDKSB7Ci0gICAgICAgICAg
ICAgICAgaWQgPSBpZC5zdWJzdHIoMCwgaWQubGVuZ3RoIC0gMSk7Ci0gICAgICAgICAgICAgICAg
aWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSAhPT0gMHg3NSkgewotICAgICAgICAgICAgICAg
ICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgICAgIGlmIChzb3VyY2VbaW5kZXhdID09PSAn
eycpIHsKLSAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAgICAgICAgICAg
Y2ggPSBzY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSgpOwotICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoID0gc2NhbkhleEVzY2FwZSgndScpOwotICAgICAg
ICAgICAgICAgICAgICBjcCA9IGNoLmNoYXJDb2RlQXQoMCk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghY2ggfHwgY2ggPT09ICdcXCcgfHwgIWlzSWRlbnRpZmllclBhcnQoY3ApKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlkICs9IGNoOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGlkOwotICAgIH0KLQot
ICAgIGZ1bmN0aW9uIGdldElkZW50aWZpZXIoKSB7Ci0gICAgICAgIHZhciBzdGFydCwgY2g7Ci0K
LSAgICAgICAgc3RhcnQgPSBpbmRleCsrOwotICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgp
IHsKLSAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpOwotICAgICAgICAg
ICAgaWYgKGNoID09PSAweDVDKSB7Ci0gICAgICAgICAgICAgICAgLy8gQmxhY2tzbGFzaCAoVSsw
MDVDKSBtYXJrcyBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZS4KLSAgICAgICAgICAgICAgICBpbmRl
eCA9IHN0YXJ0OwotICAgICAgICAgICAgICAgIHJldHVybiBnZXRDb21wbGV4SWRlbnRpZmllcigp
OwotICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA+PSAweEQ4MDAgJiYgY2ggPCAweERGRkYpIHsK
LSAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGhhbmRsZSBzdXJyb2dhdGUgcGFpcnMuCi0gICAg
ICAgICAgICAgICAgaW5kZXggPSBzdGFydDsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Q29t
cGxleElkZW50aWZpZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpc0lkZW50
aWZpZXJQYXJ0KGNoKSkgewotICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZShzdGFydCwgaW5kZXgpOwotICAgIH0KLQot
ICAgIGZ1bmN0aW9uIHNjYW5JZGVudGlmaWVyKCkgewotICAgICAgICB2YXIgc3RhcnQsIGlkLCB0
eXBlOwotCi0gICAgICAgIHN0YXJ0ID0gaW5kZXg7Ci0KLSAgICAgICAgLy8gQmFja3NsYXNoIChV
KzAwNUMpIHN0YXJ0cyBhbiBlc2NhcGVkIGNoYXJhY3Rlci4KLSAgICAgICAgaWQgPSAoc291cmNl
LmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDVDKSA/IGdldENvbXBsZXhJZGVudGlmaWVyKCkgOiBn
ZXRJZGVudGlmaWVyKCk7Ci0KLSAgICAgICAgLy8gVGhlcmUgaXMgbm8ga2V5d29yZCBvciBsaXRl
cmFsIHdpdGggb25seSBvbmUgY2hhcmFjdGVyLgotICAgICAgICAvLyBUaHVzLCBpdCBtdXN0IGJl
IGFuIGlkZW50aWZpZXIuCi0gICAgICAgIGlmIChpZC5sZW5ndGggPT09IDEpIHsKLSAgICAgICAg
ICAgIHR5cGUgPSBUb2tlbi5JZGVudGlmaWVyOwotICAgICAgICB9IGVsc2UgaWYgKGlzS2V5d29y
ZChpZCkpIHsKLSAgICAgICAgICAgIHR5cGUgPSBUb2tlbi5LZXl3b3JkOwotICAgICAgICB9IGVs
c2UgaWYgKGlkID09PSAnbnVsbCcpIHsKLSAgICAgICAgICAgIHR5cGUgPSBUb2tlbi5OdWxsTGl0
ZXJhbDsKLSAgICAgICAgfSBlbHNlIGlmIChpZCA9PT0gJ3RydWUnIHx8IGlkID09PSAnZmFsc2Un
KSB7Ci0gICAgICAgICAgICB0eXBlID0gVG9rZW4uQm9vbGVhbkxpdGVyYWw7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICB0eXBlID0gVG9rZW4uSWRlbnRpZmllcjsKLSAgICAgICAgfQot
Ci0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICB0eXBlOiB0eXBlLAotICAgICAgICAgICAg
dmFsdWU6IGlkLAotICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKLSAgICAgICAg
ICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAotICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAotICAg
ICAgICAgICAgZW5kOiBpbmRleAotICAgICAgICB9OwotICAgIH0KLQotCi0gICAgLy8gRUNNQS0y
NjIgMTEuNyBQdW5jdHVhdG9ycwotCi0gICAgZnVuY3Rpb24gc2NhblB1bmN0dWF0b3IoKSB7Ci0g
ICAgICAgIHZhciB0b2tlbiwgc3RyOwotCi0gICAgICAgIHRva2VuID0gewotICAgICAgICAgICAg
dHlwZTogVG9rZW4uUHVuY3R1YXRvciwKLSAgICAgICAgICAgIHZhbHVlOiAnJywKLSAgICAgICAg
ICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCi0gICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVT
dGFydCwKLSAgICAgICAgICAgIHN0YXJ0OiBpbmRleCwKLSAgICAgICAgICAgIGVuZDogaW5kZXgK
LSAgICAgICAgfTsKLQotICAgICAgICAvLyBDaGVjayBmb3IgbW9zdCBjb21tb24gc2luZ2xlLWNo
YXJhY3RlciBwdW5jdHVhdG9ycy4KLSAgICAgICAgc3RyID0gc291cmNlW2luZGV4XTsKLSAgICAg
ICAgc3dpdGNoIChzdHIpIHsKLQotICAgICAgICBjYXNlICcoJzoKLSAgICAgICAgICAgIGlmIChl
eHRyYS50b2tlbml6ZSkgewotICAgICAgICAgICAgICAgIGV4dHJhLm9wZW5QYXJlblRva2VuID0g
ZXh0cmEudG9rZW5zLmxlbmd0aDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICsraW5kZXg7
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlICd7JzoKLSAgICAgICAgICAgIGlm
IChleHRyYS50b2tlbml6ZSkgewotICAgICAgICAgICAgICAgIGV4dHJhLm9wZW5DdXJseVRva2Vu
ID0gZXh0cmEudG9rZW5zLmxlbmd0aDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YXRl
LmN1cmx5U3RhY2sucHVzaCgneycpOwotICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIGNhc2UgJy4nOgotICAgICAgICAgICAgKytpbmRleDsKLSAgICAg
ICAgICAgIGlmIChzb3VyY2VbaW5kZXhdID09PSAnLicgJiYgc291cmNlW2luZGV4ICsgMV0gPT09
ICcuJykgewotICAgICAgICAgICAgICAgIC8vIFNwcmVhZCBvcGVyYXRvcjogLi4uCi0gICAgICAg
ICAgICAgICAgaW5kZXggKz0gMjsKLSAgICAgICAgICAgICAgICBzdHIgPSAnLi4uJzsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgJ30nOgotICAgICAg
ICAgICAgKytpbmRleDsKLSAgICAgICAgICAgIHN0YXRlLmN1cmx5U3RhY2sucG9wKCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnKSc6Ci0gICAgICAgIGNhc2UgJzsnOgotICAg
ICAgICBjYXNlICcsJzoKLSAgICAgICAgY2FzZSAnWyc6Ci0gICAgICAgIGNhc2UgJ10nOgotICAg
ICAgICBjYXNlICc6JzoKLSAgICAgICAgY2FzZSAnPyc6Ci0gICAgICAgIGNhc2UgJ34nOgotICAg
ICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAvLyA0LWNoYXJhY3RlciBwdW5jdHVhdG9yLgotICAgICAgICAgICAgc3Ry
ID0gc291cmNlLnN1YnN0cihpbmRleCwgNCk7Ci0gICAgICAgICAgICBpZiAoc3RyID09PSAnPj4+
PScpIHsKLSAgICAgICAgICAgICAgICBpbmRleCArPSA0OwotICAgICAgICAgICAgfSBlbHNlIHsK
LQotICAgICAgICAgICAgICAgIC8vIDMtY2hhcmFjdGVyIHB1bmN0dWF0b3JzLgotICAgICAgICAg
ICAgICAgIHN0ciA9IHN0ci5zdWJzdHIoMCwgMyk7Ci0gICAgICAgICAgICAgICAgaWYgKHN0ciA9
PT0gJz09PScgfHwgc3RyID09PSAnIT09JyB8fCBzdHIgPT09ICc+Pj4nIHx8Ci0gICAgICAgICAg
ICAgICAgICAgIHN0ciA9PT0gJzw8PScgfHwgc3RyID09PSAnPj49JykgewotICAgICAgICAgICAg
ICAgICAgICBpbmRleCArPSAzOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgLy8gMi1jaGFyYWN0ZXIgcHVuY3R1YXRvcnMuCi0gICAgICAgICAgICAgICAg
ICAgIHN0ciA9IHN0ci5zdWJzdHIoMCwgMik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdHIg
PT09ICcmJicgfHwgc3RyID09PSAnfHwnIHx8IHN0ciA9PT0gJz09JyB8fCBzdHIgPT09ICchPScg
fHwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9PT0gJys9JyB8fCBzdHIgPT09ICctPScg
fHwgc3RyID09PSAnKj0nIHx8IHN0ciA9PT0gJy89JyB8fAotICAgICAgICAgICAgICAgICAgICAg
ICAgc3RyID09PSAnKysnIHx8IHN0ciA9PT0gJy0tJyB8fCBzdHIgPT09ICc8PCcgfHwgc3RyID09
PSAnPj4nIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPT09ICcmPScgfHwgc3RyID09
PSAnfD0nIHx8IHN0ciA9PT0gJ149JyB8fCBzdHIgPT09ICclPScgfHwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ciA9PT0gJzw9JyB8fCBzdHIgPT09ICc+PScgfHwgc3RyID09PSAnPT4nKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCArPSAyOwotICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyAxLWNoYXJhY3RlciBwdW5j
dHVhdG9ycy4KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IHNvdXJjZVtpbmRleF07Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoJzw+PSErLSolJnxeLycuaW5kZXhPZihzdHIpID49
IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGluZGV4ID09PSB0b2tlbi5z
dGFydCkgewotICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHRva2VuLmVuZCA9IGluZGV4OwotICAgICAgICB0b2tlbi52YWx1ZSA9IHN0cjsK
LSAgICAgICAgcmV0dXJuIHRva2VuOwotICAgIH0KLQotICAgIC8vIEVDTUEtMjYyIDExLjguMyBO
dW1lcmljIExpdGVyYWxzCi0KLSAgICBmdW5jdGlvbiBzY2FuSGV4TGl0ZXJhbChzdGFydCkgewot
ICAgICAgICB2YXIgbnVtYmVyID0gJyc7Ci0KLSAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3Ro
KSB7Ci0gICAgICAgICAgICBpZiAoIWlzSGV4RGlnaXQoc291cmNlW2luZGV4XSkpIHsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG51bWJlciArPSBz
b3VyY2VbaW5kZXgrK107Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobnVtYmVyLmxlbmd0aCA9
PT0gMCkgewotICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkp
KSB7Ci0gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgIHR5cGU6IFRva2VuLk51bWVyaWNMaXRlcmFsLAot
ICAgICAgICAgICAgdmFsdWU6IHBhcnNlSW50KCcweCcgKyBudW1iZXIsIDE2KSwKLSAgICAgICAg
ICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCi0gICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVT
dGFydCwKLSAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKLSAgICAgICAgICAgIGVuZDogaW5kZXgK
LSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBzY2FuQmluYXJ5TGl0ZXJhbChzdGFy
dCkgewotICAgICAgICB2YXIgY2gsIG51bWJlcjsKLQotICAgICAgICBudW1iZXIgPSAnJzsKLQot
ICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAgICAgIGNoID0gc291cmNl
W2luZGV4XTsKLSAgICAgICAgICAgIGlmIChjaCAhPT0gJzAnICYmIGNoICE9PSAnMScpIHsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG51bWJlciAr
PSBzb3VyY2VbaW5kZXgrK107Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobnVtYmVyLmxlbmd0
aCA9PT0gMCkgewotICAgICAgICAgICAgLy8gb25seSAwYiBvciAwQgotICAgICAgICAgICAgdGhy
b3dVbmV4cGVjdGVkVG9rZW4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpbmRleCA8IGxl
bmd0aCkgewotICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7Ci0gICAg
ICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqLwotICAgICAgICAgICAgaWYgKGlzSWRl
bnRpZmllclN0YXJ0KGNoKSB8fCBpc0RlY2ltYWxEaWdpdChjaCkpIHsKLSAgICAgICAgICAgICAg
ICB0aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgIHR5cGU6IFRva2VuLk51bWVyaWNMaXRlcmFsLAot
ICAgICAgICAgICAgdmFsdWU6IHBhcnNlSW50KG51bWJlciwgMiksCi0gICAgICAgICAgICBsaW5l
TnVtYmVyOiBsaW5lTnVtYmVyLAotICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCi0g
ICAgICAgICAgICBzdGFydDogc3RhcnQsCi0gICAgICAgICAgICBlbmQ6IGluZGV4Ci0gICAgICAg
IH07Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2Nhbk9jdGFsTGl0ZXJhbChwcmVmaXgsIHN0YXJ0
KSB7Ci0gICAgICAgIHZhciBudW1iZXIsIG9jdGFsOwotCi0gICAgICAgIGlmIChpc09jdGFsRGln
aXQocHJlZml4KSkgewotICAgICAgICAgICAgb2N0YWwgPSB0cnVlOwotICAgICAgICAgICAgbnVt
YmVyID0gJzAnICsgc291cmNlW2luZGV4KytdOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgb2N0YWwgPSBmYWxzZTsKLSAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAgICBudW1i
ZXIgPSAnJzsKLSAgICAgICAgfQotCi0gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgewot
ICAgICAgICAgICAgaWYgKCFpc09jdGFsRGlnaXQoc291cmNlW2luZGV4XSkpIHsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG51bWJlciArPSBzb3Vy
Y2VbaW5kZXgrK107Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW9jdGFsICYmIG51bWJlci5s
ZW5ndGggPT09IDApIHsKLSAgICAgICAgICAgIC8vIG9ubHkgMG8gb3IgME8KLSAgICAgICAgICAg
IHRocm93VW5leHBlY3RlZFRva2VuKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaXNJZGVu
dGlmaWVyU3RhcnQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSB8fCBpc0RlY2ltYWxEaWdpdChz
b3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7Ci0gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRU
b2tlbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgIHR5cGU6
IFRva2VuLk51bWVyaWNMaXRlcmFsLAotICAgICAgICAgICAgdmFsdWU6IHBhcnNlSW50KG51bWJl
ciwgOCksCi0gICAgICAgICAgICBvY3RhbDogb2N0YWwsCi0gICAgICAgICAgICBsaW5lTnVtYmVy
OiBsaW5lTnVtYmVyLAotICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCi0gICAgICAg
ICAgICBzdGFydDogc3RhcnQsCi0gICAgICAgICAgICBlbmQ6IGluZGV4Ci0gICAgICAgIH07Ci0g
ICAgfQotCi0gICAgZnVuY3Rpb24gaXNJbXBsaWNpdE9jdGFsTGl0ZXJhbCgpIHsKLSAgICAgICAg
dmFyIGksIGNoOwotCi0gICAgICAgIC8vIEltcGxpY2l0IG9jdGFsLCB1bmxlc3MgdGhlcmUgaXMg
YSBub24tb2N0YWwgZGlnaXQuCi0gICAgICAgIC8vIChBbm5leCBCLjEuMSBvbiBOdW1lcmljIExp
dGVyYWxzKQotICAgICAgICBmb3IgKGkgPSBpbmRleCArIDE7IGkgPCBsZW5ndGg7ICsraSkgewot
ICAgICAgICAgICAgY2ggPSBzb3VyY2VbaV07Ci0gICAgICAgICAgICBpZiAoY2ggPT09ICc4JyB8
fCBjaCA9PT0gJzknKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKCFpc09jdGFsRGlnaXQoY2gpKSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBzY2FuTnVtZXJpY0xpdGVyYWwoKSB7Ci0g
ICAgICAgIHZhciBudW1iZXIsIHN0YXJ0LCBjaDsKLQotICAgICAgICBjaCA9IHNvdXJjZVtpbmRl
eF07Ci0gICAgICAgIGFzc2VydChpc0RlY2ltYWxEaWdpdChjaC5jaGFyQ29kZUF0KDApKSB8fCAo
Y2ggPT09ICcuJyksCi0gICAgICAgICAgICAnTnVtZXJpYyBsaXRlcmFsIG11c3Qgc3RhcnQgd2l0
aCBhIGRlY2ltYWwgZGlnaXQgb3IgYSBkZWNpbWFsIHBvaW50Jyk7Ci0KLSAgICAgICAgc3RhcnQg
PSBpbmRleDsKLSAgICAgICAgbnVtYmVyID0gJyc7Ci0gICAgICAgIGlmIChjaCAhPT0gJy4nKSB7
Ci0gICAgICAgICAgICBudW1iZXIgPSBzb3VyY2VbaW5kZXgrK107Ci0gICAgICAgICAgICBjaCA9
IHNvdXJjZVtpbmRleF07Ci0KLSAgICAgICAgICAgIC8vIEhleCBudW1iZXIgc3RhcnRzIHdpdGgg
JzB4Jy4KLSAgICAgICAgICAgIC8vIE9jdGFsIG51bWJlciBzdGFydHMgd2l0aCAnMCcuCi0gICAg
ICAgICAgICAvLyBPY3RhbCBudW1iZXIgaW4gRVM2IHN0YXJ0cyB3aXRoICcwbycuCi0gICAgICAg
ICAgICAvLyBCaW5hcnkgbnVtYmVyIGluIEVTNiBzdGFydHMgd2l0aCAnMGInLgotICAgICAgICAg
ICAgaWYgKG51bWJlciA9PT0gJzAnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09PSAneCcg
fHwgY2ggPT09ICdYJykgewotICAgICAgICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gc2NhbkhleExpdGVyYWwoc3RhcnQpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdiJyB8fCBjaCA9PT0gJ0InKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzY2Fu
QmluYXJ5TGl0ZXJhbChzdGFydCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGlmIChjaCA9PT0gJ28nIHx8IGNoID09PSAnTycpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHNjYW5PY3RhbExpdGVyYWwoY2gsIHN0YXJ0KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoaXNPY3RhbERpZ2l0KGNoKSkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoaXNJbXBsaWNpdE9jdGFsTGl0ZXJhbCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gc2Nhbk9jdGFsTGl0ZXJhbChjaCwgc3RhcnQpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB3aGls
ZSAoaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkgewotICAgICAgICAg
ICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBjaCA9IHNvdXJjZVtpbmRleF07Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY2ggPT09
ICcuJykgewotICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTsKLSAgICAgICAg
ICAgIHdoaWxlIChpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7Ci0g
ICAgICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChjaCA9PT0gJ2UnIHx8IGNoID09PSAnRScpIHsKLSAgICAgICAgICAgIG51bWJlciArPSBzb3Vy
Y2VbaW5kZXgrK107Ci0KLSAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKLSAgICAgICAg
ICAgIGlmIChjaCA9PT0gJysnIHx8IGNoID09PSAnLScpIHsKLSAgICAgICAgICAgICAgICBudW1i
ZXIgKz0gc291cmNlW2luZGV4KytdOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGlz
RGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHsKLSAgICAgICAgICAgICAg
ICB3aGlsZSAoaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkgewotICAg
ICAgICAgICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVj
dGVkVG9rZW4oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpc0lk
ZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7Ci0gICAgICAgICAgICB0
aHJvd1VuZXhwZWN0ZWRUb2tlbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHsKLSAg
ICAgICAgICAgIHR5cGU6IFRva2VuLk51bWVyaWNMaXRlcmFsLAotICAgICAgICAgICAgdmFsdWU6
IHBhcnNlRmxvYXQobnVtYmVyKSwKLSAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIs
Ci0gICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKLSAgICAgICAgICAgIHN0YXJ0OiBz
dGFydCwKLSAgICAgICAgICAgIGVuZDogaW5kZXgKLSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICAv
LyBFQ01BLTI2MiAxMS44LjQgU3RyaW5nIExpdGVyYWxzCi0KLSAgICBmdW5jdGlvbiBzY2FuU3Ry
aW5nTGl0ZXJhbCgpIHsKLSAgICAgICAgdmFyIHN0ciA9ICcnLCBxdW90ZSwgc3RhcnQsIGNoLCB1
bmVzY2FwZWQsIG9jdFRvRGVjLCBvY3RhbCA9IGZhbHNlOwotCi0gICAgICAgIHF1b3RlID0gc291
cmNlW2luZGV4XTsKLSAgICAgICAgYXNzZXJ0KChxdW90ZSA9PT0gJ1wnJyB8fCBxdW90ZSA9PT0g
JyInKSwKLSAgICAgICAgICAgICdTdHJpbmcgbGl0ZXJhbCBtdXN0IHN0YXJ0cyB3aXRoIGEgcXVv
dGUnKTsKLQotICAgICAgICBzdGFydCA9IGluZGV4OwotICAgICAgICArK2luZGV4OwotCi0gICAg
ICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgewotICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5k
ZXgrK107Ci0KLSAgICAgICAgICAgIGlmIChjaCA9PT0gcXVvdGUpIHsKLSAgICAgICAgICAgICAg
ICBxdW90ZSA9ICcnOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfSBlbHNl
IGlmIChjaCA9PT0gJ1xcJykgewotICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4Kytd
OwotICAgICAgICAgICAgICAgIGlmICghY2ggfHwgIWlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNv
ZGVBdCgwKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjaCkgewotICAgICAgICAg
ICAgICAgICAgICBjYXNlICd1JzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAneCc6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlW2luZGV4XSA9PT0gJ3snKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHIgKz0gc2NhblVuaWNvZGVDb2RlUG9pbnRFc2NhcGUoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5lc2NhcGVkID0g
c2NhbkhleEVzY2FwZShjaCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1bmVz
Y2FwZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgdGhyb3dVbmV4
cGVjdGVkVG9rZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RyICs9IHVuZXNjYXBlZDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICBjYXNlICduJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXG4nOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3InOgot
ICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdccic7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAndCc6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBzdHIgKz0gJ1x0JzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICBjYXNlICdiJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0
ciArPSAnXGInOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgJ2YnOgotICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcZic7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAn
dic6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1x4MEInOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJzgnOgotICAgICAg
ICAgICAgICAgICAgICBjYXNlICc5JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBj
aDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzT2N0YWxEaWdpdChjaCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvY3RUb0RlYyA9IG9jdGFsVG9EZWNpbWFsKGNoKTsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jdGFsID0gb2N0VG9EZWMub2N0YWwgfHwg
b2N0YWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hh
ckNvZGUob2N0VG9EZWMuY29kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBjaDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgKyts
aW5lTnVtYmVyOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdccicgJiYgc291cmNl
W2luZGV4XSA9PT0gJ1xuJykgewotICAgICAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBsaW5lU3RhcnQgPSBpbmRl
eDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTGluZVRlcm1p
bmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3RyICs9IGNoOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHF1b3RlICE9PSAnJykgewotICAgICAgICAgICAg
dGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB7Ci0g
ICAgICAgICAgICB0eXBlOiBUb2tlbi5TdHJpbmdMaXRlcmFsLAotICAgICAgICAgICAgdmFsdWU6
IHN0ciwKLSAgICAgICAgICAgIG9jdGFsOiBvY3RhbCwKLSAgICAgICAgICAgIGxpbmVOdW1iZXI6
IHN0YXJ0TGluZU51bWJlciwKLSAgICAgICAgICAgIGxpbmVTdGFydDogc3RhcnRMaW5lU3RhcnQs
Ci0gICAgICAgICAgICBzdGFydDogc3RhcnQsCi0gICAgICAgICAgICBlbmQ6IGluZGV4Ci0gICAg
ICAgIH07Ci0gICAgfQotCi0gICAgLy8gRUNNQS0yNjIgMTEuOC42IFRlbXBsYXRlIExpdGVyYWwg
TGV4aWNhbCBDb21wb25lbnRzCi0KLSAgICBmdW5jdGlvbiBzY2FuVGVtcGxhdGUoKSB7Ci0gICAg
ICAgIHZhciBjb29rZWQgPSAnJywgY2gsIHN0YXJ0LCByYXdPZmZzZXQsIHRlcm1pbmF0ZWQsIGhl
YWQsIHRhaWwsIHJlc3RvcmUsIHVuZXNjYXBlZDsKLQotICAgICAgICB0ZXJtaW5hdGVkID0gZmFs
c2U7Ci0gICAgICAgIHRhaWwgPSBmYWxzZTsKLSAgICAgICAgc3RhcnQgPSBpbmRleDsKLSAgICAg
ICAgaGVhZCA9IChzb3VyY2VbaW5kZXhdID09PSAnYCcpOwotICAgICAgICByYXdPZmZzZXQgPSAy
OwotCi0gICAgICAgICsraW5kZXg7Ci0KLSAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7
Ci0gICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTsKLSAgICAgICAgICAgIGlmIChjaCA9
PT0gJ2AnKSB7Ci0gICAgICAgICAgICAgICAgcmF3T2Zmc2V0ID0gMTsKLSAgICAgICAgICAgICAg
ICB0YWlsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICckJykgewot
ICAgICAgICAgICAgICAgIGlmIChzb3VyY2VbaW5kZXhdID09PSAneycpIHsKLSAgICAgICAgICAg
ICAgICAgICAgc3RhdGUuY3VybHlTdGFjay5wdXNoKCckeycpOwotICAgICAgICAgICAgICAgICAg
ICArK2luZGV4OwotICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGNvb2tlZCArPSBjaDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICdcXCcpIHsKLSAg
ICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTsKLSAgICAgICAgICAgICAgICBpZiAo
IWlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgc3dpdGNoIChjaCkgewotICAgICAgICAgICAgICAgICAgICBjYXNlICduJzoKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNvb2tlZCArPSAnXG4nOwotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3InOgotICAgICAgICAgICAgICAgICAg
ICAgICAgY29va2VkICs9ICdccic7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSAndCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb29r
ZWQgKz0gJ1x0JzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICBjYXNlICd1JzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAneCc6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc291cmNlW2luZGV4XSA9PT0gJ3snKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b29rZWQgKz0gc2NhblVuaWNvZGVDb2RlUG9pbnRFc2NhcGUoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdG9yZSA9IGlu
ZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZXNjYXBlZCA9IHNjYW5IZXhFc2Nh
cGUoY2gpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmVzY2FwZWQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2VkICs9IHVuZXNjYXBlZDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbmRleCA9IHJlc3RvcmU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvb2tlZCArPSBjaDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSAnYic6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0g
J1xiJzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICBjYXNlICdmJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSAnXGYnOwotICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3Yn
OgotICAgICAgICAgICAgICAgICAgICAgICAgY29va2VkICs9ICdcdic7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnMCcpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbGxlZ2FsOiBcMDEgXDAyIGFuZCBz
byBvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2Vz
LlRlbXBsYXRlT2N0YWxMaXRlcmFsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2VkICs9ICdcMCc7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGlzT2N0YWxEaWdpdChjaCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBJbGxlZ2FsOiBcMSBcMgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRocm93RXJyb3IoTWVzc2FnZXMuVGVtcGxhdGVPY3RhbExpdGVyYWwpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29r
ZWQgKz0gY2g7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICsrbGluZU51bWJlcjsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGNoID09PSAnXHInICYmIHNvdXJjZVtpbmRleF0gPT09ICdcbicpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfSBlbHNlIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7Ci0g
ICAgICAgICAgICAgICAgKytsaW5lTnVtYmVyOwotICAgICAgICAgICAgICAgIGlmIChjaCA9PT0g
J1xyJyAmJiBzb3VyY2VbaW5kZXhdID09PSAnXG4nKSB7Ci0gICAgICAgICAgICAgICAgICAgICsr
aW5kZXg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGxpbmVTdGFydCA9IGlu
ZGV4OwotICAgICAgICAgICAgICAgIGNvb2tlZCArPSAnXG4nOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBjb29rZWQgKz0gY2g7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoIXRlcm1pbmF0ZWQpIHsKLSAgICAgICAgICAgIHRocm93VW5leHBl
Y3RlZFRva2VuKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWhlYWQpIHsKLSAgICAgICAg
ICAgIHN0YXRlLmN1cmx5U3RhY2sucG9wKCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4g
ewotICAgICAgICAgICAgdHlwZTogVG9rZW4uVGVtcGxhdGUsCi0gICAgICAgICAgICB2YWx1ZTog
ewotICAgICAgICAgICAgICAgIGNvb2tlZDogY29va2VkLAotICAgICAgICAgICAgICAgIHJhdzog
c291cmNlLnNsaWNlKHN0YXJ0ICsgMSwgaW5kZXggLSByYXdPZmZzZXQpCi0gICAgICAgICAgICB9
LAotICAgICAgICAgICAgaGVhZDogaGVhZCwKLSAgICAgICAgICAgIHRhaWw6IHRhaWwsCi0gICAg
ICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAotICAgICAgICAgICAgbGluZVN0YXJ0OiBs
aW5lU3RhcnQsCi0gICAgICAgICAgICBzdGFydDogc3RhcnQsCi0gICAgICAgICAgICBlbmQ6IGlu
ZGV4Ci0gICAgICAgIH07Ci0gICAgfQotCi0gICAgLy8gRUNNQS0yNjIgMTEuOC41IFJlZ3VsYXIg
RXhwcmVzc2lvbiBMaXRlcmFscwotCi0gICAgZnVuY3Rpb24gdGVzdFJlZ0V4cChwYXR0ZXJuLCBm
bGFncykgewotICAgICAgICAvLyBUaGUgQk1QIGNoYXJhY3RlciB0byB1c2UgYXMgYSByZXBsYWNl
bWVudCBmb3IgYXN0cmFsIHN5bWJvbHMgd2hlbgotICAgICAgICAvLyB0cmFuc2xhdGluZyBhbiBF
UzYgInUiLWZsYWdnZWQgcGF0dGVybiB0byBhbiBFUzUtY29tcGF0aWJsZQotICAgICAgICAvLyBh
cHByb3hpbWF0aW9uLgotICAgICAgICAvLyBOb3RlOiByZXBsYWNpbmcgd2l0aCAnXHVGRkZGJyBl
bmFibGVzIGZhbHNlIHBvc2l0aXZlcyBpbiB1bmxpa2VseQotICAgICAgICAvLyBzY2VuYXJpb3Mu
IEZvciBleGFtcGxlLCBgW1x1ezEwNDRmfS1cdXsxMDQ0MH1dYCBpcyBhbiBpbnZhbGlkCi0gICAg
ICAgIC8vIHBhdHRlcm4gdGhhdCB3b3VsZCBub3QgYmUgZGV0ZWN0ZWQgYnkgdGhpcyBzdWJzdGl0
dXRpb24uCi0gICAgICAgIHZhciBhc3RyYWxTdWJzdGl0dXRlID0gJ1x1RkZGRicsCi0gICAgICAg
ICAgICB0bXAgPSBwYXR0ZXJuOwotCi0gICAgICAgIGlmIChmbGFncy5pbmRleE9mKCd1JykgPj0g
MCkgewotICAgICAgICAgICAgdG1wID0gdG1wCi0gICAgICAgICAgICAgICAgLy8gUmVwbGFjZSBl
dmVyeSBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZSB3aXRoIHRoZSBlcXVpdmFsZW50Ci0gICAgICAg
ICAgICAgICAgLy8gQk1QIGNoYXJhY3RlciBvciBhIGNvbnN0YW50IEFTQ0lJIGNvZGUgcG9pbnQg
aW4gdGhlIGNhc2Ugb2YKLSAgICAgICAgICAgICAgICAvLyBhc3RyYWwgc3ltYm9scy4gKFNlZSB0
aGUgYWJvdmUgbm90ZSBvbiBgYXN0cmFsU3Vic3RpdHV0ZWAKLSAgICAgICAgICAgICAgICAvLyBm
b3IgbW9yZSBpbmZvcm1hdGlvbi4pCi0gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcdVx7KFsw
LTlhLWZBLUZdKylcfXxcXHUoW2EtZkEtRjAtOV17NH0pL2csIGZ1bmN0aW9uICgkMCwgJDEsICQy
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjb2RlUG9pbnQgPSBwYXJzZUludCgkMSB8fCAk
MiwgMTYpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY29kZVBvaW50ID4gMHgxMEZGRkYpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKG51bGwsIE1lc3Nh
Z2VzLkludmFsaWRSZWdFeHApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChjb2RlUG9pbnQgPD0gMHhGRkZGKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlUG9pbnQpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBhc3RyYWxTdWJzdGl0dXRlOwotICAg
ICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgICAgLy8gUmVwbGFjZSBlYWNoIHBhaXJlZCBz
dXJyb2dhdGUgd2l0aCBhIHNpbmdsZSBBU0NJSSBzeW1ib2wgdG8KLSAgICAgICAgICAgICAgICAv
LyBhdm9pZCB0aHJvd2luZyBvbiByZWd1bGFyIGV4cHJlc3Npb25zIHRoYXQgYXJlIG9ubHkgdmFs
aWQgaW4KLSAgICAgICAgICAgICAgICAvLyBjb21iaW5hdGlvbiB3aXRoIHRoZSAidSIgZmxhZy4K
LSAgICAgICAgICAgICAgICAucmVwbGFjZSgKLSAgICAgICAgICAgICAgICAgICAgL1tcdUQ4MDAt
XHVEQkZGXVtcdURDMDAtXHVERkZGXS9nLAotICAgICAgICAgICAgICAgICAgICBhc3RyYWxTdWJz
dGl0dXRlCi0gICAgICAgICAgICAgICAgKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEZpcnN0
LCBkZXRlY3QgaW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb25zLgotICAgICAgICB0cnkgewotICAg
ICAgICAgICAgUmVnRXhwKHRtcCk7Ci0gICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAg
IHRocm93VW5leHBlY3RlZFRva2VuKG51bGwsIE1lc3NhZ2VzLkludmFsaWRSZWdFeHApOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gUmV0dXJuIGEgcmVndWxhciBleHByZXNzaW9uIG9iamVjdCBm
b3IgdGhpcyBwYXR0ZXJuLWZsYWcgcGFpciwgb3IKLSAgICAgICAgLy8gYG51bGxgIGluIGNhc2Ug
dGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgZG9lc24ndCBzdXBwb3J0IHRoZSBmbGFncyBpdAotICAg
ICAgICAvLyB1c2VzLgotICAgICAgICB0cnkgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdF
eHAocGF0dGVybiwgZmxhZ3MpOwotICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHsKLSAgICAg
ICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gc2Nh
blJlZ0V4cEJvZHkoKSB7Ci0gICAgICAgIHZhciBjaCwgc3RyLCBjbGFzc01hcmtlciwgdGVybWlu
YXRlZCwgYm9keTsKLQotICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07Ci0gICAgICAgIGFzc2Vy
dChjaCA9PT0gJy8nLCAnUmVndWxhciBleHByZXNzaW9uIGxpdGVyYWwgbXVzdCBzdGFydCB3aXRo
IGEgc2xhc2gnKTsKLSAgICAgICAgc3RyID0gc291cmNlW2luZGV4KytdOwotCi0gICAgICAgIGNs
YXNzTWFya2VyID0gZmFsc2U7Ci0gICAgICAgIHRlcm1pbmF0ZWQgPSBmYWxzZTsKLSAgICAgICAg
d2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsr
XTsKLSAgICAgICAgICAgIHN0ciArPSBjaDsKLSAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xcJykg
ewotICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4KytdOwotICAgICAgICAgICAgICAg
IC8vIEVDTUEtMjYyIDcuOC41Ci0gICAgICAgICAgICAgICAgaWYgKGlzTGluZVRlcm1pbmF0b3Io
Y2guY2hhckNvZGVBdCgwKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVk
VG9rZW4obnVsbCwgTWVzc2FnZXMuVW50ZXJtaW5hdGVkUmVnRXhwKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgc3RyICs9IGNoOwotICAgICAgICAgICAgfSBlbHNlIGlmIChp
c0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7Ci0gICAgICAgICAgICAgICAgdGhy
b3dVbmV4cGVjdGVkVG9rZW4obnVsbCwgTWVzc2FnZXMuVW50ZXJtaW5hdGVkUmVnRXhwKTsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAoY2xhc3NNYXJrZXIpIHsKLSAgICAgICAgICAgICAgICBpZiAo
Y2ggPT09ICddJykgewotICAgICAgICAgICAgICAgICAgICBjbGFzc01hcmtlciA9IGZhbHNlOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGNoID09PSAnLycpIHsKLSAgICAgICAgICAgICAgICAgICAgdGVybWluYXRlZCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
Y2ggPT09ICdbJykgewotICAgICAgICAgICAgICAgICAgICBjbGFzc01hcmtlciA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KCF0ZXJtaW5hdGVkKSB7Ci0gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihudWxsLCBN
ZXNzYWdlcy5VbnRlcm1pbmF0ZWRSZWdFeHApOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRXhj
bHVkZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaC4KLSAgICAgICAgYm9keSA9IHN0ci5zdWJz
dHIoMSwgc3RyLmxlbmd0aCAtIDIpOwotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgdmFs
dWU6IGJvZHksCi0gICAgICAgICAgICBsaXRlcmFsOiBzdHIKLSAgICAgICAgfTsKLSAgICB9Ci0K
LSAgICBmdW5jdGlvbiBzY2FuUmVnRXhwRmxhZ3MoKSB7Ci0gICAgICAgIHZhciBjaCwgc3RyLCBm
bGFncywgcmVzdG9yZTsKLQotICAgICAgICBzdHIgPSAnJzsKLSAgICAgICAgZmxhZ3MgPSAnJzsK
LSAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICBjaCA9IHNvdXJj
ZVtpbmRleF07Ci0gICAgICAgICAgICBpZiAoIWlzSWRlbnRpZmllclBhcnQoY2guY2hhckNvZGVB
dCgwKSkpIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgKytpbmRleDsKLSAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xcJyAmJiBpbmRleCA8IGxl
bmd0aCkgewotICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKLSAgICAgICAgICAg
ICAgICBpZiAoY2ggPT09ICd1JykgewotICAgICAgICAgICAgICAgICAgICArK2luZGV4OwotICAg
ICAgICAgICAgICAgICAgICByZXN0b3JlID0gaW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIGNo
ID0gc2NhbkhleEVzY2FwZSgndScpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2gpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZsYWdzICs9IGNoOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIChzdHIgKz0gJ1xcdSc7IHJlc3RvcmUgPCBpbmRleDsgKytyZXN0b3JlKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IHNvdXJjZVtyZXN0b3JlXTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGluZGV4ID0gcmVzdG9yZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGZsYWdzICs9ICd1JzsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFx1JzsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0
ZWRUb2tlbigpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IHN0ciArPSAnXFwnOwotICAgICAgICAgICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tl
bigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgZmxhZ3MgKz0gY2g7Ci0gICAgICAgICAgICAgICAgc3RyICs9IGNoOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgIHZhbHVlOiBm
bGFncywKLSAgICAgICAgICAgIGxpdGVyYWw6IHN0cgotICAgICAgICB9OwotICAgIH0KLQotICAg
IGZ1bmN0aW9uIHNjYW5SZWdFeHAoKSB7Ci0gICAgICAgIHZhciBzdGFydCwgYm9keSwgZmxhZ3Ms
IHZhbHVlOwotICAgICAgICBzY2FubmluZyA9IHRydWU7Ci0KLSAgICAgICAgbG9va2FoZWFkID0g
bnVsbDsKLSAgICAgICAgc2tpcENvbW1lbnQoKTsKLSAgICAgICAgc3RhcnQgPSBpbmRleDsKLQot
ICAgICAgICBib2R5ID0gc2NhblJlZ0V4cEJvZHkoKTsKLSAgICAgICAgZmxhZ3MgPSBzY2FuUmVn
RXhwRmxhZ3MoKTsKLSAgICAgICAgdmFsdWUgPSB0ZXN0UmVnRXhwKGJvZHkudmFsdWUsIGZsYWdz
LnZhbHVlKTsKLSAgICAgICAgc2Nhbm5pbmcgPSBmYWxzZTsKLSAgICAgICAgaWYgKGV4dHJhLnRv
a2VuaXplKSB7Ci0gICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFRv
a2VuLlJlZ3VsYXJFeHByZXNzaW9uLAotICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKLSAg
ICAgICAgICAgICAgICByZWdleDogewotICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuOiBib2R5
LnZhbHVlLAotICAgICAgICAgICAgICAgICAgICBmbGFnczogZmxhZ3MudmFsdWUKLSAgICAgICAg
ICAgICAgICB9LAotICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCi0gICAg
ICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCi0gICAgICAgICAgICAgICAgc3RhcnQ6
IHN0YXJ0LAotICAgICAgICAgICAgICAgIGVuZDogaW5kZXgKLSAgICAgICAgICAgIH07Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgbGl0ZXJhbDogYm9keS5saXRl
cmFsICsgZmxhZ3MubGl0ZXJhbCwKLSAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKLSAgICAgICAg
ICAgIHJlZ2V4OiB7Ci0gICAgICAgICAgICAgICAgcGF0dGVybjogYm9keS52YWx1ZSwKLSAgICAg
ICAgICAgICAgICBmbGFnczogZmxhZ3MudmFsdWUKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAg
ICBzdGFydDogc3RhcnQsCi0gICAgICAgICAgICBlbmQ6IGluZGV4Ci0gICAgICAgIH07Ci0gICAg
fQotCi0gICAgZnVuY3Rpb24gY29sbGVjdFJlZ2V4KCkgewotICAgICAgICB2YXIgcG9zLCBsb2Ms
IHJlZ2V4LCB0b2tlbjsKLQotICAgICAgICBza2lwQ29tbWVudCgpOwotCi0gICAgICAgIHBvcyA9
IGluZGV4OwotICAgICAgICBsb2MgPSB7Ci0gICAgICAgICAgICBzdGFydDogewotICAgICAgICAg
ICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAt
IGxpbmVTdGFydAotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIHJlZ2V4ID0g
c2NhblJlZ0V4cCgpOwotCi0gICAgICAgIGxvYy5lbmQgPSB7Ci0gICAgICAgICAgICBsaW5lOiBs
aW5lTnVtYmVyLAotICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydAotICAgICAg
ICB9OwotCi0gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovCi0gICAgICAgIGlmICgh
ZXh0cmEudG9rZW5pemUpIHsKLSAgICAgICAgICAgIC8vIFBvcCB0aGUgcHJldmlvdXMgdG9rZW4s
IHdoaWNoIGlzIGxpa2VseSAnLycgb3IgJy89JwotICAgICAgICAgICAgaWYgKGV4dHJhLnRva2Vu
cy5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICAgICAgdG9rZW4gPSBleHRyYS50b2tlbnNbZXh0
cmEudG9rZW5zLmxlbmd0aCAtIDFdOwotICAgICAgICAgICAgICAgIGlmICh0b2tlbi5yYW5nZVsw
XSA9PT0gcG9zICYmIHRva2VuLnR5cGUgPT09ICdQdW5jdHVhdG9yJykgewotICAgICAgICAgICAg
ICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09ICcvJyB8fCB0b2tlbi52YWx1ZSA9PT0gJy89Jykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEudG9rZW5zLnBvcCgpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBleHRyYS50b2tlbnMucHVzaCh7Ci0gICAgICAgICAgICAgICAgdHlwZTogJ1JlZ3VsYXJF
eHByZXNzaW9uJywKLSAgICAgICAgICAgICAgICB2YWx1ZTogcmVnZXgubGl0ZXJhbCwKLSAgICAg
ICAgICAgICAgICByZWdleDogcmVnZXgucmVnZXgsCi0gICAgICAgICAgICAgICAgcmFuZ2U6IFtw
b3MsIGluZGV4XSwKLSAgICAgICAgICAgICAgICBsb2M6IGxvYwotICAgICAgICAgICAgfSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmVnZXg7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24g
aXNJZGVudGlmaWVyTmFtZSh0b2tlbikgewotICAgICAgICByZXR1cm4gdG9rZW4udHlwZSA9PT0g
VG9rZW4uSWRlbnRpZmllciB8fAotICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW4uS2V5
d29yZCB8fAotICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW4uQm9vbGVhbkxpdGVyYWwg
fHwKLSAgICAgICAgICAgIHRva2VuLnR5cGUgPT09IFRva2VuLk51bGxMaXRlcmFsOwotICAgIH0K
LQotICAgIGZ1bmN0aW9uIGFkdmFuY2VTbGFzaCgpIHsKLSAgICAgICAgdmFyIHByZXZUb2tlbiwK
LSAgICAgICAgICAgIGNoZWNrVG9rZW47Ci0gICAgICAgIC8vIFVzaW5nIHRoZSBmb2xsb3dpbmcg
YWxnb3JpdGhtOgotICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zd2VldC5q
cy93aWtpL2Rlc2lnbgotICAgICAgICBwcmV2VG9rZW4gPSBleHRyYS50b2tlbnNbZXh0cmEudG9r
ZW5zLmxlbmd0aCAtIDFdOwotICAgICAgICBpZiAoIXByZXZUb2tlbikgewotICAgICAgICAgICAg
Ly8gTm90aGluZyBiZWZvcmUgdGhhdDogaXQgY2Fubm90IGJlIGEgZGl2aXNpb24uCi0gICAgICAg
ICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHByZXZU
b2tlbi50eXBlID09PSAnUHVuY3R1YXRvcicpIHsKLSAgICAgICAgICAgIGlmIChwcmV2VG9rZW4u
dmFsdWUgPT09ICddJykgewotICAgICAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHByZXZUb2tlbi52YWx1ZSA9PT0gJykn
KSB7Ci0gICAgICAgICAgICAgICAgY2hlY2tUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS5vcGVu
UGFyZW5Ub2tlbiAtIDFdOwotICAgICAgICAgICAgICAgIGlmIChjaGVja1Rva2VuICYmCi0gICAg
ICAgICAgICAgICAgICAgICAgICBjaGVja1Rva2VuLnR5cGUgPT09ICdLZXl3b3JkJyAmJgotICAg
ICAgICAgICAgICAgICAgICAgICAgKGNoZWNrVG9rZW4udmFsdWUgPT09ICdpZicgfHwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGVja1Rva2VuLnZhbHVlID09PSAnd2hpbGUnIHx8Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgY2hlY2tUb2tlbi52YWx1ZSA9PT0gJ2ZvcicgfHwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGVja1Rva2VuLnZhbHVlID09PSAnd2l0aCcpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAocHJldlRva2VuLnZhbHVlID09PSAnfScpIHsKLSAgICAgICAgICAg
ICAgICAvLyBEaXZpZGluZyBhIGZ1bmN0aW9uIGJ5IGFueXRoaW5nIG1ha2VzIGxpdHRsZSBzZW5z
ZSwKLSAgICAgICAgICAgICAgICAvLyBidXQgd2UgaGF2ZSB0byBjaGVjayBmb3IgdGhhdC4KLSAg
ICAgICAgICAgICAgICBpZiAoZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gM10g
JiYKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlU
b2tlbiAtIDNdLnR5cGUgPT09ICdLZXl3b3JkJykgewotICAgICAgICAgICAgICAgICAgICAvLyBB
bm9ueW1vdXMgZnVuY3Rpb24uCi0gICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4gPSBleHRy
YS50b2tlbnNbZXh0cmEub3BlbkN1cmx5VG9rZW4gLSA0XTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCFjaGVja1Rva2VuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhblB1
bmN0dWF0b3IoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gNF0gJiYKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDRdLnR5
cGUgPT09ICdLZXl3b3JkJykgewotICAgICAgICAgICAgICAgICAgICAvLyBOYW1lZCBmdW5jdGlv
bi4KLSAgICAgICAgICAgICAgICAgICAgY2hlY2tUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS5v
cGVuQ3VybHlUb2tlbiAtIDVdOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNoZWNrVG9rZW4p
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAvLyBjaGVja1Rva2VuIGRldGVybWluZXMgd2hldGhlciB0aGUgZnVuY3Rpb24g
aXMKLSAgICAgICAgICAgICAgICAvLyBhIGRlY2xhcmF0aW9uIG9yIGFuIGV4cHJlc3Npb24uCi0g
ICAgICAgICAgICAgICAgaWYgKEZuRXhwclRva2Vucy5pbmRleE9mKGNoZWNrVG9rZW4udmFsdWUp
ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSXQgaXMgYW4gZXhwcmVzc2lvbi4KLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIC8vIEl0IGlzIGEgZGVjbGFyYXRpb24uCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGNvbGxlY3RSZWdleCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
cmV0dXJuIGNvbGxlY3RSZWdleCgpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwcmV2VG9rZW4u
dHlwZSA9PT0gJ0tleXdvcmQnICYmIHByZXZUb2tlbi52YWx1ZSAhPT0gJ3RoaXMnKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IHNjYW5QdW5jdHVhdG9yKCk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gYWR2YW5jZSgpIHsKLSAg
ICAgICAgdmFyIGNwLCB0b2tlbjsKLQotICAgICAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKSB7Ci0g
ICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLkVPRiwKLSAg
ICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAgIGxp
bmVTdGFydDogbGluZVN0YXJ0LAotICAgICAgICAgICAgICAgIHN0YXJ0OiBpbmRleCwKLSAgICAg
ICAgICAgICAgICBlbmQ6IGluZGV4Ci0gICAgICAgICAgICB9OwotICAgICAgICB9Ci0KLSAgICAg
ICAgY3AgPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7Ci0KLSAgICAgICAgaWYgKGlzSWRlbnRp
ZmllclN0YXJ0KGNwKSkgewotICAgICAgICAgICAgdG9rZW4gPSBzY2FuSWRlbnRpZmllcigpOwot
ICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4u
dmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgdG9rZW4udHlwZSA9IFRva2VuLktleXdvcmQ7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdG9rZW47Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBWZXJ5IGNvbW1vbjogKCBhbmQgKSBhbmQgOwotICAgICAgICBpZiAoY3AgPT09IDB4
MjggfHwgY3AgPT09IDB4MjkgfHwgY3AgPT09IDB4M0IpIHsKLSAgICAgICAgICAgIHJldHVybiBz
Y2FuUHVuY3R1YXRvcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU3RyaW5nIGxpdGVyYWwg
c3RhcnRzIHdpdGggc2luZ2xlIHF1b3RlIChVKzAwMjcpIG9yIGRvdWJsZSBxdW90ZSAoVSswMDIy
KS4KLSAgICAgICAgaWYgKGNwID09PSAweDI3IHx8IGNwID09PSAweDIyKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gc2NhblN0cmluZ0xpdGVyYWwoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIERv
dCAoLikgVSswMDJFIGNhbiBhbHNvIHN0YXJ0IGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyLCBoZW5j
ZSB0aGUgbmVlZAotICAgICAgICAvLyB0byBjaGVjayB0aGUgbmV4dCBjaGFyYWN0ZXIuCi0gICAg
ICAgIGlmIChjcCA9PT0gMHgyRSkgewotICAgICAgICAgICAgaWYgKGlzRGVjaW1hbERpZ2l0KHNv
dXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSkpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNj
YW5OdW1lcmljTGl0ZXJhbCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHNj
YW5QdW5jdHVhdG9yKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaXNEZWNpbWFsRGlnaXQo
Y3ApKSB7Ci0gICAgICAgICAgICByZXR1cm4gc2Nhbk51bWVyaWNMaXRlcmFsKCk7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBTbGFzaCAoLykgVSswMDJGIGNhbiBhbHNvIHN0YXJ0IGEgcmVnZXgu
Ci0gICAgICAgIGlmIChleHRyYS50b2tlbml6ZSAmJiBjcCA9PT0gMHgyRikgewotICAgICAgICAg
ICAgcmV0dXJuIGFkdmFuY2VTbGFzaCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGVtcGxh
dGUgbGl0ZXJhbHMgc3RhcnQgd2l0aCBgIChVKzAwNjApIGZvciB0ZW1wbGF0ZSBoZWFkCi0gICAg
ICAgIC8vIG9yIH0gKFUrMDA3RCkgZm9yIHRlbXBsYXRlIG1pZGRsZSBvciB0ZW1wbGF0ZSB0YWls
LgotICAgICAgICBpZiAoY3AgPT09IDB4NjAgfHwgKGNwID09PSAweDdEICYmIHN0YXRlLmN1cmx5
U3RhY2tbc3RhdGUuY3VybHlTdGFjay5sZW5ndGggLSAxXSA9PT0gJyR7JykpIHsKLSAgICAgICAg
ICAgIHJldHVybiBzY2FuVGVtcGxhdGUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFBvc3Np
YmxlIGlkZW50aWZpZXIgc3RhcnQgaW4gYSBzdXJyb2dhdGUgcGFpci4KLSAgICAgICAgaWYgKGNw
ID49IDB4RDgwMCAmJiBjcCA8IDB4REZGRikgewotICAgICAgICAgICAgY3AgPSBjb2RlUG9pbnRB
dChpbmRleCk7Ci0gICAgICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoY3ApKSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHNjYW5JZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTsKLSAgICB9Ci0KLSAgICBm
dW5jdGlvbiBjb2xsZWN0VG9rZW4oKSB7Ci0gICAgICAgIHZhciBsb2MsIHRva2VuLCB2YWx1ZSwg
ZW50cnk7Ci0KLSAgICAgICAgbG9jID0gewotICAgICAgICAgICAgc3RhcnQ6IHsKLSAgICAgICAg
ICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXgg
LSBsaW5lU3RhcnQKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAgICB0b2tlbiA9
IGFkdmFuY2UoKTsKLSAgICAgICAgbG9jLmVuZCA9IHsKLSAgICAgICAgICAgIGxpbmU6IGxpbmVO
dW1iZXIsCi0gICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0Ci0gICAgICAgIH07
Ci0KLSAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLkVPRikgewotICAgICAgICAgICAg
dmFsdWUgPSBzb3VyY2Uuc2xpY2UodG9rZW4uc3RhcnQsIHRva2VuLmVuZCk7Ci0gICAgICAgICAg
ICBlbnRyeSA9IHsKLSAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbk5hbWVbdG9rZW4udHlwZV0s
Ci0gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLAotICAgICAgICAgICAgICAgIHJhbmdlOiBb
dG9rZW4uc3RhcnQsIHRva2VuLmVuZF0sCi0gICAgICAgICAgICAgICAgbG9jOiBsb2MKLSAgICAg
ICAgICAgIH07Ci0gICAgICAgICAgICBpZiAodG9rZW4ucmVnZXgpIHsKLSAgICAgICAgICAgICAg
ICBlbnRyeS5yZWdleCA9IHsKLSAgICAgICAgICAgICAgICAgICAgcGF0dGVybjogdG9rZW4ucmVn
ZXgucGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICAgZmxhZ3M6IHRva2VuLnJlZ2V4LmZsYWdz
Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGV4dHJhLnRv
a2Vucy5wdXNoKGVudHJ5KTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0b2tlbjsKLSAg
ICB9Ci0KLSAgICBmdW5jdGlvbiBsZXgoKSB7Ci0gICAgICAgIHZhciB0b2tlbjsKLSAgICAgICAg
c2Nhbm5pbmcgPSB0cnVlOwotCi0gICAgICAgIGxhc3RJbmRleCA9IGluZGV4OwotICAgICAgICBs
YXN0TGluZU51bWJlciA9IGxpbmVOdW1iZXI7Ci0gICAgICAgIGxhc3RMaW5lU3RhcnQgPSBsaW5l
U3RhcnQ7Ci0KLSAgICAgICAgc2tpcENvbW1lbnQoKTsKLQotICAgICAgICB0b2tlbiA9IGxvb2th
aGVhZDsKLQotICAgICAgICBzdGFydEluZGV4ID0gaW5kZXg7Ci0gICAgICAgIHN0YXJ0TGluZU51
bWJlciA9IGxpbmVOdW1iZXI7Ci0gICAgICAgIHN0YXJ0TGluZVN0YXJ0ID0gbGluZVN0YXJ0Owot
Ci0gICAgICAgIGxvb2thaGVhZCA9ICh0eXBlb2YgZXh0cmEudG9rZW5zICE9PSAndW5kZWZpbmVk
JykgPyBjb2xsZWN0VG9rZW4oKSA6IGFkdmFuY2UoKTsKLSAgICAgICAgc2Nhbm5pbmcgPSBmYWxz
ZTsKLSAgICAgICAgcmV0dXJuIHRva2VuOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBlZWsoKSB7
Ci0gICAgICAgIHNjYW5uaW5nID0gdHJ1ZTsKLQotICAgICAgICBza2lwQ29tbWVudCgpOwotCi0g
ICAgICAgIGxhc3RJbmRleCA9IGluZGV4OwotICAgICAgICBsYXN0TGluZU51bWJlciA9IGxpbmVO
dW1iZXI7Ci0gICAgICAgIGxhc3RMaW5lU3RhcnQgPSBsaW5lU3RhcnQ7Ci0KLSAgICAgICAgc3Rh
cnRJbmRleCA9IGluZGV4OwotICAgICAgICBzdGFydExpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwot
ICAgICAgICBzdGFydExpbmVTdGFydCA9IGxpbmVTdGFydDsKLQotICAgICAgICBsb29rYWhlYWQg
PSAodHlwZW9mIGV4dHJhLnRva2VucyAhPT0gJ3VuZGVmaW5lZCcpID8gY29sbGVjdFRva2VuKCkg
OiBhZHZhbmNlKCk7Ci0gICAgICAgIHNjYW5uaW5nID0gZmFsc2U7Ci0gICAgfQotCi0gICAgZnVu
Y3Rpb24gUG9zaXRpb24oKSB7Ci0gICAgICAgIHRoaXMubGluZSA9IHN0YXJ0TGluZU51bWJlcjsK
LSAgICAgICAgdGhpcy5jb2x1bW4gPSBzdGFydEluZGV4IC0gc3RhcnRMaW5lU3RhcnQ7Ci0gICAg
fQotCi0gICAgZnVuY3Rpb24gU291cmNlTG9jYXRpb24oKSB7Ci0gICAgICAgIHRoaXMuc3RhcnQg
PSBuZXcgUG9zaXRpb24oKTsKLSAgICAgICAgdGhpcy5lbmQgPSBudWxsOwotICAgIH0KLQotICAg
IGZ1bmN0aW9uIFdyYXBwaW5nU291cmNlTG9jYXRpb24oc3RhcnRUb2tlbikgewotICAgICAgICB0
aGlzLnN0YXJ0ID0gewotICAgICAgICAgICAgbGluZTogc3RhcnRUb2tlbi5saW5lTnVtYmVyLAot
ICAgICAgICAgICAgY29sdW1uOiBzdGFydFRva2VuLnN0YXJ0IC0gc3RhcnRUb2tlbi5saW5lU3Rh
cnQKLSAgICAgICAgfTsKLSAgICAgICAgdGhpcy5lbmQgPSBudWxsOwotICAgIH0KLQotICAgIGZ1
bmN0aW9uIE5vZGUoKSB7Ci0gICAgICAgIGlmIChleHRyYS5yYW5nZSkgewotICAgICAgICAgICAg
dGhpcy5yYW5nZSA9IFtzdGFydEluZGV4LCAwXTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXh0
cmEubG9jKSB7Ci0gICAgICAgICAgICB0aGlzLmxvYyA9IG5ldyBTb3VyY2VMb2NhdGlvbigpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gV3JhcHBpbmdOb2RlKHN0YXJ0VG9rZW4p
IHsKLSAgICAgICAgaWYgKGV4dHJhLnJhbmdlKSB7Ci0gICAgICAgICAgICB0aGlzLnJhbmdlID0g
W3N0YXJ0VG9rZW4uc3RhcnQsIDBdOwotICAgICAgICB9Ci0gICAgICAgIGlmIChleHRyYS5sb2Mp
IHsKLSAgICAgICAgICAgIHRoaXMubG9jID0gbmV3IFdyYXBwaW5nU291cmNlTG9jYXRpb24oc3Rh
cnRUb2tlbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBXcmFwcGluZ05vZGUucHJvdG90eXBl
ID0gTm9kZS5wcm90b3R5cGUgPSB7Ci0KLSAgICAgICAgcHJvY2Vzc0NvbW1lbnQ6IGZ1bmN0aW9u
ICgpIHsKLSAgICAgICAgICAgIHZhciBsYXN0Q2hpbGQsCi0gICAgICAgICAgICAgICAgbGVhZGlu
Z0NvbW1lbnRzLAotICAgICAgICAgICAgICAgIHRyYWlsaW5nQ29tbWVudHMsCi0gICAgICAgICAg
ICAgICAgYm90dG9tUmlnaHQgPSBleHRyYS5ib3R0b21SaWdodFN0YWNrLAotICAgICAgICAgICAg
ICAgIGksCi0gICAgICAgICAgICAgICAgY29tbWVudCwKLSAgICAgICAgICAgICAgICBsYXN0ID0g
Ym90dG9tUmlnaHRbYm90dG9tUmlnaHQubGVuZ3RoIC0gMV07Ci0KLSAgICAgICAgICAgIGlmICh0
aGlzLnR5cGUgPT09IFN5bnRheC5Qcm9ncmFtKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMu
Ym9keS5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChleHRyYS50cmFpbGlu
Z0NvbW1lbnRzLmxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRz
ID0gW107Ci0gICAgICAgICAgICAgICAgZm9yIChpID0gZXh0cmEudHJhaWxpbmdDb21tZW50cy5s
ZW5ndGggLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0g
ZXh0cmEudHJhaWxpbmdDb21tZW50c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1l
bnQucmFuZ2VbMF0gPj0gdGhpcy5yYW5nZVsxXSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
dHJhaWxpbmdDb21tZW50cy51bnNoaWZ0KGNvbW1lbnQpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZXh0cmEudHJhaWxpbmdDb21tZW50cy5zcGxpY2UoaSwgMSk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZXh0cmEudHJhaWxpbmdD
b21tZW50cyA9IFtdOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAo
bGFzdCAmJiBsYXN0LnRyYWlsaW5nQ29tbWVudHMgJiYgbGFzdC50cmFpbGluZ0NvbW1lbnRzWzBd
LnJhbmdlWzBdID49IHRoaXMucmFuZ2VbMV0pIHsKLSAgICAgICAgICAgICAgICAgICAgdHJhaWxp
bmdDb21tZW50cyA9IGxhc3QudHJhaWxpbmdDb21tZW50czsKLSAgICAgICAgICAgICAgICAgICAg
ZGVsZXRlIGxhc3QudHJhaWxpbmdDb21tZW50czsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEVhdGluZyB0aGUgc3RhY2suCi0gICAgICAgICAgICB3
aGlsZSAobGFzdCAmJiBsYXN0LnJhbmdlWzBdID49IHRoaXMucmFuZ2VbMF0pIHsKLSAgICAgICAg
ICAgICAgICBsYXN0Q2hpbGQgPSBib3R0b21SaWdodC5wb3AoKTsKLSAgICAgICAgICAgICAgICBs
YXN0ID0gYm90dG9tUmlnaHRbYm90dG9tUmlnaHQubGVuZ3RoIC0gMV07Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmIChsYXN0Q2hpbGQpIHsKLSAgICAgICAgICAgICAgICBpZiAobGFz
dENoaWxkLmxlYWRpbmdDb21tZW50cykgewotICAgICAgICAgICAgICAgICAgICBsZWFkaW5nQ29t
bWVudHMgPSBbXTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gbGFzdENoaWxkLmxlYWRp
bmdDb21tZW50cy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgY29tbWVudCA9IGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHNbaV07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoY29tbWVudC5yYW5nZVsxXSA8PSB0aGlzLnJhbmdlWzBdKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVhZGluZ0NvbW1lbnRzLnVuc2hpZnQoY29tbWVu
dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENoaWxkLmxlYWRpbmdDb21tZW50
cy5zcGxpY2UoaSwgMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoIWxhc3RDaGlsZC5sZWFkaW5nQ29t
bWVudHMubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsYXN0Q2hpbGQubGVhZGlu
Z0NvbW1lbnRzID0gdW5kZWZpbmVkOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChleHRyYS5sZWFkaW5nQ29tbWVudHMubGVu
Z3RoID4gMCkgewotICAgICAgICAgICAgICAgIGxlYWRpbmdDb21tZW50cyA9IFtdOwotICAgICAg
ICAgICAgICAgIGZvciAoaSA9IGV4dHJhLmxlYWRpbmdDb21tZW50cy5sZW5ndGggLSAxOyBpID49
IDA7IC0taSkgewotICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gZXh0cmEubGVhZGluZ0Nv
bW1lbnRzW2ldOwotICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWVudC5yYW5nZVsxXSA8PSB0
aGlzLnJhbmdlWzBdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZWFkaW5nQ29tbWVudHMu
dW5zaGlmdChjb21tZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLmxlYWRpbmdD
b21tZW50cy5zcGxpY2UoaSwgMSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0KLQotICAgICAgICAgICAgaWYgKGxlYWRpbmdDb21tZW50
cyAmJiBsZWFkaW5nQ29tbWVudHMubGVuZ3RoID4gMCkgewotICAgICAgICAgICAgICAgIHRoaXMu
bGVhZGluZ0NvbW1lbnRzID0gbGVhZGluZ0NvbW1lbnRzOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKHRyYWlsaW5nQ29tbWVudHMgJiYgdHJhaWxpbmdDb21tZW50cy5sZW5ndGggPiAw
KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy50cmFpbGluZ0NvbW1lbnRzID0gdHJhaWxpbmdDb21t
ZW50czsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYm90dG9tUmlnaHQucHVzaCh0aGlz
KTsKLSAgICAgICAgfSwKLQotICAgICAgICBmaW5pc2g6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAg
ICAgIGlmIChleHRyYS5yYW5nZSkgewotICAgICAgICAgICAgICAgIHRoaXMucmFuZ2VbMV0gPSBs
YXN0SW5kZXg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZXh0cmEubG9jKSB7Ci0g
ICAgICAgICAgICAgICAgdGhpcy5sb2MuZW5kID0gewotICAgICAgICAgICAgICAgICAgICBsaW5l
OiBsYXN0TGluZU51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBsYXN0SW5kZXgg
LSBsYXN0TGluZVN0YXJ0Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICBpZiAo
ZXh0cmEuc291cmNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMubG9jLnNvdXJjZSA9IGV4
dHJhLnNvdXJjZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmIChleHRyYS5hdHRhY2hDb21tZW50KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5wcm9j
ZXNzQ29tbWVudCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9LAotCi0gICAgICAgIGZpbmlz
aEFycmF5RXhwcmVzc2lvbjogZnVuY3Rpb24gKGVsZW1lbnRzKSB7Ci0gICAgICAgICAgICB0aGlz
LnR5cGUgPSBTeW50YXguQXJyYXlFeHByZXNzaW9uOwotICAgICAgICAgICAgdGhpcy5lbGVtZW50
cyA9IGVsZW1lbnRzOwotICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKLSAgICAgICAgICAgIHJl
dHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAgIGZpbmlzaEFycmF5UGF0dGVybjogZnVu
Y3Rpb24gKGVsZW1lbnRzKSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguQXJyYXlQ
YXR0ZXJuOwotICAgICAgICAgICAgdGhpcy5lbGVtZW50cyA9IGVsZW1lbnRzOwotICAgICAgICAg
ICAgdGhpcy5maW5pc2goKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAot
Ci0gICAgICAgIGZpbmlzaEFycm93RnVuY3Rpb25FeHByZXNzaW9uOiBmdW5jdGlvbiAocGFyYW1z
LCBkZWZhdWx0cywgYm9keSwgZXhwcmVzc2lvbikgewotICAgICAgICAgICAgdGhpcy50eXBlID0g
U3ludGF4LkFycm93RnVuY3Rpb25FeHByZXNzaW9uOwotICAgICAgICAgICAgdGhpcy5pZCA9IG51
bGw7Ci0gICAgICAgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtczsKLSAgICAgICAgICAgIHRoaXMu
ZGVmYXVsdHMgPSBkZWZhdWx0czsKLSAgICAgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7Ci0gICAg
ICAgICAgICB0aGlzLmdlbmVyYXRvciA9IGZhbHNlOwotICAgICAgICAgICAgdGhpcy5leHByZXNz
aW9uID0gZXhwcmVzc2lvbjsKLSAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBmaW5pc2hBc3NpZ25tZW50RXhw
cmVzc2lvbjogZnVuY3Rpb24gKG9wZXJhdG9yLCBsZWZ0LCByaWdodCkgewotICAgICAgICAgICAg
dGhpcy50eXBlID0gU3ludGF4LkFzc2lnbm1lbnRFeHByZXNzaW9uOwotICAgICAgICAgICAgdGhp
cy5vcGVyYXRvciA9IG9wZXJhdG9yOwotICAgICAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDsKLSAg
ICAgICAgICAgIHRoaXMucmlnaHQgPSByaWdodDsKLSAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7
Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBmaW5pc2hB
c3NpZ25tZW50UGF0dGVybjogZnVuY3Rpb24gKGxlZnQsIHJpZ2h0KSB7Ci0gICAgICAgICAgICB0
aGlzLnR5cGUgPSBTeW50YXguQXNzaWdubWVudFBhdHRlcm47Ci0gICAgICAgICAgICB0aGlzLmxl
ZnQgPSBsZWZ0OwotICAgICAgICAgICAgdGhpcy5yaWdodCA9IHJpZ2h0OwotICAgICAgICAgICAg
dGhpcy5maW5pc2goKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0g
ICAgICAgIGZpbmlzaEJpbmFyeUV4cHJlc3Npb246IGZ1bmN0aW9uIChvcGVyYXRvciwgbGVmdCwg
cmlnaHQpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IChvcGVyYXRvciA9PT0gJ3x8JyB8fCBv
cGVyYXRvciA9PT0gJyYmJykgPyBTeW50YXguTG9naWNhbEV4cHJlc3Npb24gOiBTeW50YXguQmlu
YXJ5RXhwcmVzc2lvbjsKLSAgICAgICAgICAgIHRoaXMub3BlcmF0b3IgPSBvcGVyYXRvcjsKLSAg
ICAgICAgICAgIHRoaXMubGVmdCA9IGxlZnQ7Ci0gICAgICAgICAgICB0aGlzLnJpZ2h0ID0gcmln
aHQ7Ci0gICAgICAgICAgICB0aGlzLmZpbmlzaCgpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7
Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZmluaXNoQmxvY2tTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChi
b2R5KSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguQmxvY2tTdGF0ZW1lbnQ7Ci0g
ICAgICAgICAgICB0aGlzLmJvZHkgPSBib2R5OwotICAgICAgICAgICAgdGhpcy5maW5pc2goKTsK
LSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAgIGZpbmlzaEJy
ZWFrU3RhdGVtZW50OiBmdW5jdGlvbiAobGFiZWwpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9
IFN5bnRheC5CcmVha1N0YXRlbWVudDsKLSAgICAgICAgICAgIHRoaXMubGFiZWwgPSBsYWJlbDsK
LSAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAg
ICAgICAgfSwKLQotICAgICAgICBmaW5pc2hDYWxsRXhwcmVzc2lvbjogZnVuY3Rpb24gKGNhbGxl
ZSwgYXJncykgewotICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkNhbGxFeHByZXNzaW9u
OwotICAgICAgICAgICAgdGhpcy5jYWxsZWUgPSBjYWxsZWU7Ci0gICAgICAgICAgICB0aGlzLmFy
Z3VtZW50cyA9IGFyZ3M7Ci0gICAgICAgICAgICB0aGlzLmZpbmlzaCgpOwotICAgICAgICAgICAg
cmV0dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZmluaXNoQ2F0Y2hDbGF1c2U6IGZ1
bmN0aW9uIChwYXJhbSwgYm9keSkgewotICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkNh
dGNoQ2xhdXNlOwotICAgICAgICAgICAgdGhpcy5wYXJhbSA9IHBhcmFtOwotICAgICAgICAgICAg
dGhpcy5ib2R5ID0gYm9keTsKLSAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBmaW5pc2hDbGFzc0JvZHk6IGZ1
bmN0aW9uIChib2R5KSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguQ2xhc3NCb2R5
OwotICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKLSAgICAgICAgICAgIHRoaXMuZmluaXNo
KCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBmaW5p
c2hDbGFzc0RlY2xhcmF0aW9uOiBmdW5jdGlvbiAoaWQsIHN1cGVyQ2xhc3MsIGJvZHkpIHsKLSAg
ICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5DbGFzc0RlY2xhcmF0aW9uOwotICAgICAgICAg
ICAgdGhpcy5pZCA9IGlkOwotICAgICAgICAgICAgdGhpcy5zdXBlckNsYXNzID0gc3VwZXJDbGFz
czsKLSAgICAgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7Ci0gICAgICAgICAgICB0aGlzLmZpbmlz
aCgpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZmlu
aXNoQ2xhc3NFeHByZXNzaW9uOiBmdW5jdGlvbiAoaWQsIHN1cGVyQ2xhc3MsIGJvZHkpIHsKLSAg
ICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5DbGFzc0V4cHJlc3Npb247Ci0gICAgICAgICAg
ICB0aGlzLmlkID0gaWQ7Ci0gICAgICAgICAgICB0aGlzLnN1cGVyQ2xhc3MgPSBzdXBlckNsYXNz
OwotICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKLSAgICAgICAgICAgIHRoaXMuZmluaXNo
KCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBmaW5p
c2hDb25kaXRpb25hbEV4cHJlc3Npb246IGZ1bmN0aW9uICh0ZXN0LCBjb25zZXF1ZW50LCBhbHRl
cm5hdGUpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5Db25kaXRpb25hbEV4cHJl
c3Npb247Ci0gICAgICAgICAgICB0aGlzLnRlc3QgPSB0ZXN0OwotICAgICAgICAgICAgdGhpcy5j
b25zZXF1ZW50ID0gY29uc2VxdWVudDsKLSAgICAgICAgICAgIHRoaXMuYWx0ZXJuYXRlID0gYWx0
ZXJuYXRlOwotICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKLSAgICAgICAgICAgIHJldHVybiB0
aGlzOwotICAgICAgICB9LAotCi0gICAgICAgIGZpbmlzaENvbnRpbnVlU3RhdGVtZW50OiBmdW5j
dGlvbiAobGFiZWwpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5Db250aW51ZVN0
YXRlbWVudDsKLSAgICAgICAgICAgIHRoaXMubGFiZWwgPSBsYWJlbDsKLSAgICAgICAgICAgIHRo
aXMuZmluaXNoKCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAg
ICAgICBmaW5pc2hEZWJ1Z2dlclN0YXRlbWVudDogZnVuY3Rpb24gKCkgewotICAgICAgICAgICAg
dGhpcy50eXBlID0gU3ludGF4LkRlYnVnZ2VyU3RhdGVtZW50OwotICAgICAgICAgICAgdGhpcy5m
aW5pc2goKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAg
IGZpbmlzaERvV2hpbGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChib2R5LCB0ZXN0KSB7Ci0gICAgICAg
ICAgICB0aGlzLnR5cGUgPSBTeW50YXguRG9XaGlsZVN0YXRlbWVudDsKLSAgICAgICAgICAgIHRo
aXMuYm9keSA9IGJvZHk7Ci0gICAgICAgICAgICB0aGlzLnRlc3QgPSB0ZXN0OwotICAgICAgICAg
ICAgdGhpcy5maW5pc2goKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAot
Ci0gICAgICAgIGZpbmlzaEVtcHR5U3RhdGVtZW50OiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAg
ICB0aGlzLnR5cGUgPSBTeW50YXguRW1wdHlTdGF0ZW1lbnQ7Ci0gICAgICAgICAgICB0aGlzLmZp
bmlzaCgpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAg
ZmluaXNoRXhwcmVzc2lvblN0YXRlbWVudDogZnVuY3Rpb24gKGV4cHJlc3Npb24pIHsKLSAgICAg
ICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5FeHByZXNzaW9uU3RhdGVtZW50OwotICAgICAgICAg
ICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjsKLSAgICAgICAgICAgIHRoaXMuZmluaXNo
KCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBmaW5p
c2hGb3JTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChpbml0LCB0ZXN0LCB1cGRhdGUsIGJvZHkpIHsKLSAg
ICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5Gb3JTdGF0ZW1lbnQ7Ci0gICAgICAgICAgICB0
aGlzLmluaXQgPSBpbml0OwotICAgICAgICAgICAgdGhpcy50ZXN0ID0gdGVzdDsKLSAgICAgICAg
ICAgIHRoaXMudXBkYXRlID0gdXBkYXRlOwotICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsK
LSAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAg
ICAgICAgfSwKLQotICAgICAgICBmaW5pc2hGb3JPZlN0YXRlbWVudDogZnVuY3Rpb24gKGxlZnQs
IHJpZ2h0LCBib2R5KSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguRm9yT2ZTdGF0
ZW1lbnQ7Ci0gICAgICAgICAgICB0aGlzLmxlZnQgPSBsZWZ0OwotICAgICAgICAgICAgdGhpcy5y
aWdodCA9IHJpZ2h0OwotICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKLSAgICAgICAgICAg
IHRoaXMuZmluaXNoKCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQot
ICAgICAgICBmaW5pc2hGb3JJblN0YXRlbWVudDogZnVuY3Rpb24gKGxlZnQsIHJpZ2h0LCBib2R5
KSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguRm9ySW5TdGF0ZW1lbnQ7Ci0gICAg
ICAgICAgICB0aGlzLmxlZnQgPSBsZWZ0OwotICAgICAgICAgICAgdGhpcy5yaWdodCA9IHJpZ2h0
OwotICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKLSAgICAgICAgICAgIHRoaXMuZWFjaCA9
IGZhbHNlOwotICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKLSAgICAgICAgICAgIHJldHVybiB0
aGlzOwotICAgICAgICB9LAotCi0gICAgICAgIGZpbmlzaEZ1bmN0aW9uRGVjbGFyYXRpb246IGZ1
bmN0aW9uIChpZCwgcGFyYW1zLCBkZWZhdWx0cywgYm9keSwgZ2VuZXJhdG9yKSB7Ci0gICAgICAg
ICAgICB0aGlzLnR5cGUgPSBTeW50YXguRnVuY3Rpb25EZWNsYXJhdGlvbjsKLSAgICAgICAgICAg
IHRoaXMuaWQgPSBpZDsKLSAgICAgICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zOwotICAgICAg
ICAgICAgdGhpcy5kZWZhdWx0cyA9IGRlZmF1bHRzOwotICAgICAgICAgICAgdGhpcy5ib2R5ID0g
Ym9keTsKLSAgICAgICAgICAgIHRoaXMuZ2VuZXJhdG9yID0gZ2VuZXJhdG9yOwotICAgICAgICAg
ICAgdGhpcy5leHByZXNzaW9uID0gZmFsc2U7Ci0gICAgICAgICAgICB0aGlzLmZpbmlzaCgpOwot
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZmluaXNoRnVu
Y3Rpb25FeHByZXNzaW9uOiBmdW5jdGlvbiAoaWQsIHBhcmFtcywgZGVmYXVsdHMsIGJvZHksIGdl
bmVyYXRvcikgewotICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkZ1bmN0aW9uRXhwcmVz
c2lvbjsKLSAgICAgICAgICAgIHRoaXMuaWQgPSBpZDsKLSAgICAgICAgICAgIHRoaXMucGFyYW1z
ID0gcGFyYW1zOwotICAgICAgICAgICAgdGhpcy5kZWZhdWx0cyA9IGRlZmF1bHRzOwotICAgICAg
ICAgICAgdGhpcy5ib2R5ID0gYm9keTsKLSAgICAgICAgICAgIHRoaXMuZ2VuZXJhdG9yID0gZ2Vu
ZXJhdG9yOwotICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZmFsc2U7Ci0gICAgICAgICAg
ICB0aGlzLmZpbmlzaCgpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0K
LSAgICAgICAgZmluaXNoSWRlbnRpZmllcjogZnVuY3Rpb24gKG5hbWUpIHsKLSAgICAgICAgICAg
IHRoaXMudHlwZSA9IFN5bnRheC5JZGVudGlmaWVyOwotICAgICAgICAgICAgdGhpcy5uYW1lID0g
bmFtZTsKLSAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhp
czsKLSAgICAgICAgfSwKLQotICAgICAgICBmaW5pc2hJZlN0YXRlbWVudDogZnVuY3Rpb24gKHRl
c3QsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZSkgewotICAgICAgICAgICAgdGhpcy50eXBlID0gU3lu
dGF4LklmU3RhdGVtZW50OwotICAgICAgICAgICAgdGhpcy50ZXN0ID0gdGVzdDsKLSAgICAgICAg
ICAgIHRoaXMuY29uc2VxdWVudCA9IGNvbnNlcXVlbnQ7Ci0gICAgICAgICAgICB0aGlzLmFsdGVy
bmF0ZSA9IGFsdGVybmF0ZTsKLSAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBmaW5pc2hMYWJlbGVkU3RhdGVt
ZW50OiBmdW5jdGlvbiAobGFiZWwsIGJvZHkpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5
bnRheC5MYWJlbGVkU3RhdGVtZW50OwotICAgICAgICAgICAgdGhpcy5sYWJlbCA9IGxhYmVsOwot
ICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKLSAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7
Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBmaW5pc2hM
aXRlcmFsOiBmdW5jdGlvbiAodG9rZW4pIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRh
eC5MaXRlcmFsOwotICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRva2VuLnZhbHVlOwotICAgICAg
ICAgICAgdGhpcy5yYXcgPSBzb3VyY2Uuc2xpY2UodG9rZW4uc3RhcnQsIHRva2VuLmVuZCk7Ci0g
ICAgICAgICAgICBpZiAodG9rZW4ucmVnZXgpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnJlZ2V4
ID0gdG9rZW4ucmVnZXg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aGlzLmZpbmlzaCgp
OwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZmluaXNo
TWVtYmVyRXhwcmVzc2lvbjogZnVuY3Rpb24gKGFjY2Vzc29yLCBvYmplY3QsIHByb3BlcnR5KSB7
Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguTWVtYmVyRXhwcmVzc2lvbjsKLSAgICAg
ICAgICAgIHRoaXMuY29tcHV0ZWQgPSBhY2Nlc3NvciA9PT0gJ1snOwotICAgICAgICAgICAgdGhp
cy5vYmplY3QgPSBvYmplY3Q7Ci0gICAgICAgICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7
Ci0gICAgICAgICAgICB0aGlzLmZpbmlzaCgpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0g
ICAgICAgIH0sCi0KLSAgICAgICAgZmluaXNoTWV0YVByb3BlcnR5OiBmdW5jdGlvbiAobWV0YSwg
cHJvcGVydHkpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5NZXRhUHJvcGVydHk7
Ci0gICAgICAgICAgICB0aGlzLm1ldGEgPSBtZXRhOwotICAgICAgICAgICAgdGhpcy5wcm9wZXJ0
eSA9IHByb3BlcnR5OwotICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKLSAgICAgICAgICAgIHJl
dHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAgIGZpbmlzaE5ld0V4cHJlc3Npb246IGZ1
bmN0aW9uIChjYWxsZWUsIGFyZ3MpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5O
ZXdFeHByZXNzaW9uOwotICAgICAgICAgICAgdGhpcy5jYWxsZWUgPSBjYWxsZWU7Ci0gICAgICAg
ICAgICB0aGlzLmFyZ3VtZW50cyA9IGFyZ3M7Ci0gICAgICAgICAgICB0aGlzLmZpbmlzaCgpOwot
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZmluaXNoT2Jq
ZWN0RXhwcmVzc2lvbjogZnVuY3Rpb24gKHByb3BlcnRpZXMpIHsKLSAgICAgICAgICAgIHRoaXMu
dHlwZSA9IFN5bnRheC5PYmplY3RFeHByZXNzaW9uOwotICAgICAgICAgICAgdGhpcy5wcm9wZXJ0
aWVzID0gcHJvcGVydGllczsKLSAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBmaW5pc2hPYmplY3RQYXR0ZXJu
OiBmdW5jdGlvbiAocHJvcGVydGllcykgewotICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4
Lk9iamVjdFBhdHRlcm47Ci0gICAgICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVz
OwotICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwot
ICAgICAgICB9LAotCi0gICAgICAgIGZpbmlzaFBvc3RmaXhFeHByZXNzaW9uOiBmdW5jdGlvbiAo
b3BlcmF0b3IsIGFyZ3VtZW50KSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguVXBk
YXRlRXhwcmVzc2lvbjsKLSAgICAgICAgICAgIHRoaXMub3BlcmF0b3IgPSBvcGVyYXRvcjsKLSAg
ICAgICAgICAgIHRoaXMuYXJndW1lbnQgPSBhcmd1bWVudDsKLSAgICAgICAgICAgIHRoaXMucHJl
Zml4ID0gZmFsc2U7Ci0gICAgICAgICAgICB0aGlzLmZpbmlzaCgpOwotICAgICAgICAgICAgcmV0
dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZmluaXNoUHJvZ3JhbTogZnVuY3Rpb24g
KGJvZHksIHNvdXJjZVR5cGUpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5Qcm9n
cmFtOwotICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKLSAgICAgICAgICAgIHRoaXMuc291
cmNlVHlwZSA9IHNvdXJjZVR5cGU7Ci0gICAgICAgICAgICB0aGlzLmZpbmlzaCgpOwotICAgICAg
ICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZmluaXNoUHJvcGVydHk6
IGZ1bmN0aW9uIChraW5kLCBrZXksIGNvbXB1dGVkLCB2YWx1ZSwgbWV0aG9kLCBzaG9ydGhhbmQp
IHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5Qcm9wZXJ0eTsKLSAgICAgICAgICAg
IHRoaXMua2V5ID0ga2V5OwotICAgICAgICAgICAgdGhpcy5jb21wdXRlZCA9IGNvbXB1dGVkOwot
ICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOwotICAgICAgICAgICAgdGhpcy5raW5kID0g
a2luZDsKLSAgICAgICAgICAgIHRoaXMubWV0aG9kID0gbWV0aG9kOwotICAgICAgICAgICAgdGhp
cy5zaG9ydGhhbmQgPSBzaG9ydGhhbmQ7Ci0gICAgICAgICAgICB0aGlzLmZpbmlzaCgpOwotICAg
ICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZmluaXNoUmVzdEVs
ZW1lbnQ6IGZ1bmN0aW9uIChhcmd1bWVudCkgewotICAgICAgICAgICAgdGhpcy50eXBlID0gU3lu
dGF4LlJlc3RFbGVtZW50OwotICAgICAgICAgICAgdGhpcy5hcmd1bWVudCA9IGFyZ3VtZW50Owot
ICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAg
ICAgICB9LAotCi0gICAgICAgIGZpbmlzaFJldHVyblN0YXRlbWVudDogZnVuY3Rpb24gKGFyZ3Vt
ZW50KSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguUmV0dXJuU3RhdGVtZW50Owot
ICAgICAgICAgICAgdGhpcy5hcmd1bWVudCA9IGFyZ3VtZW50OwotICAgICAgICAgICAgdGhpcy5m
aW5pc2goKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAg
IGZpbmlzaFNlcXVlbmNlRXhwcmVzc2lvbjogZnVuY3Rpb24gKGV4cHJlc3Npb25zKSB7Ci0gICAg
ICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguU2VxdWVuY2VFeHByZXNzaW9uOwotICAgICAgICAg
ICAgdGhpcy5leHByZXNzaW9ucyA9IGV4cHJlc3Npb25zOwotICAgICAgICAgICAgdGhpcy5maW5p
c2goKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAgICAgIGZp
bmlzaFNwcmVhZEVsZW1lbnQ6IGZ1bmN0aW9uIChhcmd1bWVudCkgewotICAgICAgICAgICAgdGhp
cy50eXBlID0gU3ludGF4LlNwcmVhZEVsZW1lbnQ7Ci0gICAgICAgICAgICB0aGlzLmFyZ3VtZW50
ID0gYXJndW1lbnQ7Ci0gICAgICAgICAgICB0aGlzLmZpbmlzaCgpOwotICAgICAgICAgICAgcmV0
dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZmluaXNoU3dpdGNoQ2FzZTogZnVuY3Rp
b24gKHRlc3QsIGNvbnNlcXVlbnQpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5T
d2l0Y2hDYXNlOwotICAgICAgICAgICAgdGhpcy50ZXN0ID0gdGVzdDsKLSAgICAgICAgICAgIHRo
aXMuY29uc2VxdWVudCA9IGNvbnNlcXVlbnQ7Ci0gICAgICAgICAgICB0aGlzLmZpbmlzaCgpOwot
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZmluaXNoU3Vw
ZXI6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5TdXBlcjsK
LSAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAg
ICAgICAgfSwKLQotICAgICAgICBmaW5pc2hTd2l0Y2hTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChkaXNj
cmltaW5hbnQsIGNhc2VzKSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguU3dpdGNo
U3RhdGVtZW50OwotICAgICAgICAgICAgdGhpcy5kaXNjcmltaW5hbnQgPSBkaXNjcmltaW5hbnQ7
Ci0gICAgICAgICAgICB0aGlzLmNhc2VzID0gY2FzZXM7Ci0gICAgICAgICAgICB0aGlzLmZpbmlz
aCgpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZmlu
aXNoVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uOiBmdW5jdGlvbiAodGFnLCBxdWFzaSkgewotICAg
ICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbjsKLSAg
ICAgICAgICAgIHRoaXMudGFnID0gdGFnOwotICAgICAgICAgICAgdGhpcy5xdWFzaSA9IHF1YXNp
OwotICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwot
ICAgICAgICB9LAotCi0gICAgICAgIGZpbmlzaFRlbXBsYXRlRWxlbWVudDogZnVuY3Rpb24gKHZh
bHVlLCB0YWlsKSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguVGVtcGxhdGVFbGVt
ZW50OwotICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOwotICAgICAgICAgICAgdGhpcy50
YWlsID0gdGFpbDsKLSAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7Ci0gICAgICAgICAgICByZXR1
cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBmaW5pc2hUZW1wbGF0ZUxpdGVyYWw6IGZ1
bmN0aW9uIChxdWFzaXMsIGV4cHJlc3Npb25zKSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBT
eW50YXguVGVtcGxhdGVMaXRlcmFsOwotICAgICAgICAgICAgdGhpcy5xdWFzaXMgPSBxdWFzaXM7
Ci0gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25zID0gZXhwcmVzc2lvbnM7Ci0gICAgICAgICAg
ICB0aGlzLmZpbmlzaCgpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0K
LSAgICAgICAgZmluaXNoVGhpc0V4cHJlc3Npb246IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAg
IHRoaXMudHlwZSA9IFN5bnRheC5UaGlzRXhwcmVzc2lvbjsKLSAgICAgICAgICAgIHRoaXMuZmlu
aXNoKCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBm
aW5pc2hUaHJvd1N0YXRlbWVudDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7Ci0gICAgICAgICAgICB0
aGlzLnR5cGUgPSBTeW50YXguVGhyb3dTdGF0ZW1lbnQ7Ci0gICAgICAgICAgICB0aGlzLmFyZ3Vt
ZW50ID0gYXJndW1lbnQ7Ci0gICAgICAgICAgICB0aGlzLmZpbmlzaCgpOwotICAgICAgICAgICAg
cmV0dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZmluaXNoVHJ5U3RhdGVtZW50OiBm
dW5jdGlvbiAoYmxvY2ssIGhhbmRsZXIsIGZpbmFsaXplcikgewotICAgICAgICAgICAgdGhpcy50
eXBlID0gU3ludGF4LlRyeVN0YXRlbWVudDsKLSAgICAgICAgICAgIHRoaXMuYmxvY2sgPSBibG9j
azsKLSAgICAgICAgICAgIHRoaXMuZ3VhcmRlZEhhbmRsZXJzID0gW107Ci0gICAgICAgICAgICB0
aGlzLmhhbmRsZXJzID0gaGFuZGxlciA/IFtoYW5kbGVyXSA6IFtdOwotICAgICAgICAgICAgdGhp
cy5oYW5kbGVyID0gaGFuZGxlcjsKLSAgICAgICAgICAgIHRoaXMuZmluYWxpemVyID0gZmluYWxp
emVyOwotICAgICAgICAgICAgdGhpcy5maW5pc2goKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlz
OwotICAgICAgICB9LAotCi0gICAgICAgIGZpbmlzaFVuYXJ5RXhwcmVzc2lvbjogZnVuY3Rpb24g
KG9wZXJhdG9yLCBhcmd1bWVudCkgewotICAgICAgICAgICAgdGhpcy50eXBlID0gKG9wZXJhdG9y
ID09PSAnKysnIHx8IG9wZXJhdG9yID09PSAnLS0nKSA/IFN5bnRheC5VcGRhdGVFeHByZXNzaW9u
IDogU3ludGF4LlVuYXJ5RXhwcmVzc2lvbjsKLSAgICAgICAgICAgIHRoaXMub3BlcmF0b3IgPSBv
cGVyYXRvcjsKLSAgICAgICAgICAgIHRoaXMuYXJndW1lbnQgPSBhcmd1bWVudDsKLSAgICAgICAg
ICAgIHRoaXMucHJlZml4ID0gdHJ1ZTsKLSAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBmaW5pc2hWYXJpYWJs
ZURlY2xhcmF0aW9uOiBmdW5jdGlvbiAoZGVjbGFyYXRpb25zKSB7Ci0gICAgICAgICAgICB0aGlz
LnR5cGUgPSBTeW50YXguVmFyaWFibGVEZWNsYXJhdGlvbjsKLSAgICAgICAgICAgIHRoaXMuZGVj
bGFyYXRpb25zID0gZGVjbGFyYXRpb25zOwotICAgICAgICAgICAgdGhpcy5raW5kID0gJ3Zhcic7
Ci0gICAgICAgICAgICB0aGlzLmZpbmlzaCgpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0g
ICAgICAgIH0sCi0KLSAgICAgICAgZmluaXNoTGV4aWNhbERlY2xhcmF0aW9uOiBmdW5jdGlvbiAo
ZGVjbGFyYXRpb25zLCBraW5kKSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguVmFy
aWFibGVEZWNsYXJhdGlvbjsKLSAgICAgICAgICAgIHRoaXMuZGVjbGFyYXRpb25zID0gZGVjbGFy
YXRpb25zOwotICAgICAgICAgICAgdGhpcy5raW5kID0ga2luZDsKLSAgICAgICAgICAgIHRoaXMu
ZmluaXNoKCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAg
ICBmaW5pc2hWYXJpYWJsZURlY2xhcmF0b3I6IGZ1bmN0aW9uIChpZCwgaW5pdCkgewotICAgICAg
ICAgICAgdGhpcy50eXBlID0gU3ludGF4LlZhcmlhYmxlRGVjbGFyYXRvcjsKLSAgICAgICAgICAg
IHRoaXMuaWQgPSBpZDsKLSAgICAgICAgICAgIHRoaXMuaW5pdCA9IGluaXQ7Ci0gICAgICAgICAg
ICB0aGlzLmZpbmlzaCgpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0K
LSAgICAgICAgZmluaXNoV2hpbGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uICh0ZXN0LCBib2R5KSB7Ci0g
ICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguV2hpbGVTdGF0ZW1lbnQ7Ci0gICAgICAgICAg
ICB0aGlzLnRlc3QgPSB0ZXN0OwotICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKLSAgICAg
ICAgICAgIHRoaXMuZmluaXNoKCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAg
fSwKLQotICAgICAgICBmaW5pc2hXaXRoU3RhdGVtZW50OiBmdW5jdGlvbiAob2JqZWN0LCBib2R5
KSB7Ci0gICAgICAgICAgICB0aGlzLnR5cGUgPSBTeW50YXguV2l0aFN0YXRlbWVudDsKLSAgICAg
ICAgICAgIHRoaXMub2JqZWN0ID0gb2JqZWN0OwotICAgICAgICAgICAgdGhpcy5ib2R5ID0gYm9k
eTsKLSAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsK
LSAgICAgICAgfSwKLQotICAgICAgICBmaW5pc2hFeHBvcnRTcGVjaWZpZXI6IGZ1bmN0aW9uIChs
b2NhbCwgZXhwb3J0ZWQpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5FeHBvcnRT
cGVjaWZpZXI7Ci0gICAgICAgICAgICB0aGlzLmV4cG9ydGVkID0gZXhwb3J0ZWQgfHwgbG9jYWw7
Ci0gICAgICAgICAgICB0aGlzLmxvY2FsID0gbG9jYWw7Ci0gICAgICAgICAgICB0aGlzLmZpbmlz
aCgpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZmlu
aXNoSW1wb3J0RGVmYXVsdFNwZWNpZmllcjogZnVuY3Rpb24gKGxvY2FsKSB7Ci0gICAgICAgICAg
ICB0aGlzLnR5cGUgPSBTeW50YXguSW1wb3J0RGVmYXVsdFNwZWNpZmllcjsKLSAgICAgICAgICAg
IHRoaXMubG9jYWwgPSBsb2NhbDsKLSAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7Ci0gICAgICAg
ICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBmaW5pc2hJbXBvcnROYW1l
c3BhY2VTcGVjaWZpZXI6IGZ1bmN0aW9uIChsb2NhbCkgewotICAgICAgICAgICAgdGhpcy50eXBl
ID0gU3ludGF4LkltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjsKLSAgICAgICAgICAgIHRoaXMubG9j
YWwgPSBsb2NhbDsKLSAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7Ci0gICAgICAgICAgICByZXR1
cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBmaW5pc2hFeHBvcnROYW1lZERlY2xhcmF0
aW9uOiBmdW5jdGlvbiAoZGVjbGFyYXRpb24sIHNwZWNpZmllcnMsIHNyYykgewotICAgICAgICAg
ICAgdGhpcy50eXBlID0gU3ludGF4LkV4cG9ydE5hbWVkRGVjbGFyYXRpb247Ci0gICAgICAgICAg
ICB0aGlzLmRlY2xhcmF0aW9uID0gZGVjbGFyYXRpb247Ci0gICAgICAgICAgICB0aGlzLnNwZWNp
ZmllcnMgPSBzcGVjaWZpZXJzOwotICAgICAgICAgICAgdGhpcy5zb3VyY2UgPSBzcmM7Ci0gICAg
ICAgICAgICB0aGlzLmZpbmlzaCgpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAg
IH0sCi0KLSAgICAgICAgZmluaXNoRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uOiBmdW5jdGlvbiAo
ZGVjbGFyYXRpb24pIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5FeHBvcnREZWZh
dWx0RGVjbGFyYXRpb247Ci0gICAgICAgICAgICB0aGlzLmRlY2xhcmF0aW9uID0gZGVjbGFyYXRp
b247Ci0gICAgICAgICAgICB0aGlzLmZpbmlzaCgpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7
Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZmluaXNoRXhwb3J0QWxsRGVjbGFyYXRpb246IGZ1bmN0
aW9uIChzcmMpIHsKLSAgICAgICAgICAgIHRoaXMudHlwZSA9IFN5bnRheC5FeHBvcnRBbGxEZWNs
YXJhdGlvbjsKLSAgICAgICAgICAgIHRoaXMuc291cmNlID0gc3JjOwotICAgICAgICAgICAgdGhp
cy5maW5pc2goKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAotCi0gICAg
ICAgIGZpbmlzaEltcG9ydFNwZWNpZmllcjogZnVuY3Rpb24gKGxvY2FsLCBpbXBvcnRlZCkgewot
ICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LkltcG9ydFNwZWNpZmllcjsKLSAgICAgICAg
ICAgIHRoaXMubG9jYWwgPSBsb2NhbCB8fCBpbXBvcnRlZDsKLSAgICAgICAgICAgIHRoaXMuaW1w
b3J0ZWQgPSBpbXBvcnRlZDsKLSAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gdGhpczsKLSAgICAgICAgfSwKLQotICAgICAgICBmaW5pc2hJbXBvcnREZWNsYXJh
dGlvbjogZnVuY3Rpb24gKHNwZWNpZmllcnMsIHNyYykgewotICAgICAgICAgICAgdGhpcy50eXBl
ID0gU3ludGF4LkltcG9ydERlY2xhcmF0aW9uOwotICAgICAgICAgICAgdGhpcy5zcGVjaWZpZXJz
ID0gc3BlY2lmaWVyczsKLSAgICAgICAgICAgIHRoaXMuc291cmNlID0gc3JjOwotICAgICAgICAg
ICAgdGhpcy5maW5pc2goKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9LAot
Ci0gICAgICAgIGZpbmlzaFlpZWxkRXhwcmVzc2lvbjogZnVuY3Rpb24gKGFyZ3VtZW50LCBkZWxl
Z2F0ZSkgewotICAgICAgICAgICAgdGhpcy50eXBlID0gU3ludGF4LllpZWxkRXhwcmVzc2lvbjsK
LSAgICAgICAgICAgIHRoaXMuYXJndW1lbnQgPSBhcmd1bWVudDsKLSAgICAgICAgICAgIHRoaXMu
ZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKLSAgICAgICAgICAgIHRoaXMuZmluaXNoKCk7Ci0gICAgICAg
ICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotICAgIH07Ci0KLQotICAgIGZ1bmN0aW9uIHJl
Y29yZEVycm9yKGVycm9yKSB7Ci0gICAgICAgIHZhciBlLCBleGlzdGluZzsKLQotICAgICAgICBm
b3IgKGUgPSAwOyBlIDwgZXh0cmEuZXJyb3JzLmxlbmd0aDsgZSsrKSB7Ci0gICAgICAgICAgICBl
eGlzdGluZyA9IGV4dHJhLmVycm9yc1tlXTsKLSAgICAgICAgICAgIC8vIFByZXZlbnQgZHVwbGlj
YXRlZCBlcnJvci4KLSAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovCi0gICAg
ICAgICAgICBpZiAoZXhpc3RpbmcuaW5kZXggPT09IGVycm9yLmluZGV4ICYmIGV4aXN0aW5nLm1l
c3NhZ2UgPT09IGVycm9yLm1lc3NhZ2UpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBleHRyYS5lcnJvcnMucHVzaChlcnJvcik7
Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gY29uc3RydWN0RXJyb3IobXNnLCBjb2x1bW4pIHsKLSAg
ICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKG1zZyk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAg
ICAgICB0aHJvdyBlcnJvcjsKLSAgICAgICAgfSBjYXRjaCAoYmFzZSkgewotICAgICAgICAgICAg
LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi8KLSAgICAgICAgICAgIGlmIChPYmplY3QuY3JlYXRl
ICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgewotICAgICAgICAgICAgICAgIGVycm9yID0gT2Jq
ZWN0LmNyZWF0ZShiYXNlKTsKLSAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
ZXJyb3IsICdjb2x1bW4nLCB7IHZhbHVlOiBjb2x1bW4gfSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBmdW5jdGlvbiBjcmVhdGVFcnJvcihsaW5lLCBwb3MsIGRlc2NyaXB0aW9uKSB7
Ci0gICAgICAgIHZhciBtc2csIGNvbHVtbiwgZXJyb3I7Ci0KLSAgICAgICAgbXNnID0gJ0xpbmUg
JyArIGxpbmUgKyAnOiAnICsgZGVzY3JpcHRpb247Ci0gICAgICAgIGNvbHVtbiA9IHBvcyAtIChz
Y2FubmluZyA/IGxpbmVTdGFydCA6IGxhc3RMaW5lU3RhcnQpICsgMTsKLSAgICAgICAgZXJyb3Ig
PSBjb25zdHJ1Y3RFcnJvcihtc2csIGNvbHVtbik7Ci0gICAgICAgIGVycm9yLmxpbmVOdW1iZXIg
PSBsaW5lOwotICAgICAgICBlcnJvci5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotICAgICAg
ICBlcnJvci5pbmRleCA9IHBvczsKLSAgICAgICAgcmV0dXJuIGVycm9yOwotICAgIH0KLQotICAg
IC8vIFRocm93IGFuIGV4Y2VwdGlvbgotCi0gICAgZnVuY3Rpb24gdGhyb3dFcnJvcihtZXNzYWdl
Rm9ybWF0KSB7Ci0gICAgICAgIHZhciBhcmdzLCBtc2c7Ci0KLSAgICAgICAgYXJncyA9IEFycmF5
LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7Ci0gICAgICAgIG1zZyA9IG1lc3Nh
Z2VGb3JtYXQucmVwbGFjZSgvJShcZCkvZywKLSAgICAgICAgICAgIGZ1bmN0aW9uICh3aG9sZSwg
aWR4KSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KGlkeCA8IGFyZ3MubGVuZ3RoLCAnTWVzc2Fn
ZSByZWZlcmVuY2UgbXVzdCBiZSBpbiByYW5nZScpOwotICAgICAgICAgICAgICAgIHJldHVybiBh
cmdzW2lkeF07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICAgICAgdGhyb3cgY3Jl
YXRlRXJyb3IobGFzdExpbmVOdW1iZXIsIGxhc3RJbmRleCwgbXNnKTsKLSAgICB9Ci0KLSAgICBm
dW5jdGlvbiB0b2xlcmF0ZUVycm9yKG1lc3NhZ2VGb3JtYXQpIHsKLSAgICAgICAgdmFyIGFyZ3Ms
IG1zZywgZXJyb3I7Ci0KLSAgICAgICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxs
KGFyZ3VtZW50cywgMSk7Ci0gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovCi0gICAg
ICAgIG1zZyA9IG1lc3NhZ2VGb3JtYXQucmVwbGFjZSgvJShcZCkvZywKLSAgICAgICAgICAgIGZ1
bmN0aW9uICh3aG9sZSwgaWR4KSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KGlkeCA8IGFyZ3Mu
bGVuZ3RoLCAnTWVzc2FnZSByZWZlcmVuY2UgbXVzdCBiZSBpbiByYW5nZScpOwotICAgICAgICAg
ICAgICAgIHJldHVybiBhcmdzW2lkeF07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSAg
ICAgICAgZXJyb3IgPSBjcmVhdGVFcnJvcihsaW5lTnVtYmVyLCBsYXN0SW5kZXgsIG1zZyk7Ci0g
ICAgICAgIGlmIChleHRyYS5lcnJvcnMpIHsKLSAgICAgICAgICAgIHJlY29yZEVycm9yKGVycm9y
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRocm93IGVycm9yOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgLy8gVGhyb3cgYW4gZXhjZXB0aW9uIGJlY2F1c2Ugb2YgdGhlIHRva2Vu
LgotCi0gICAgZnVuY3Rpb24gdW5leHBlY3RlZFRva2VuRXJyb3IodG9rZW4sIG1lc3NhZ2UpIHsK
LSAgICAgICAgdmFyIHZhbHVlLCBtc2cgPSBtZXNzYWdlIHx8IE1lc3NhZ2VzLlVuZXhwZWN0ZWRU
b2tlbjsKLQotICAgICAgICBpZiAodG9rZW4pIHsKLSAgICAgICAgICAgIGlmICghbWVzc2FnZSkg
ewotICAgICAgICAgICAgICAgIG1zZyA9ICh0b2tlbi50eXBlID09PSBUb2tlbi5FT0YpID8gTWVz
c2FnZXMuVW5leHBlY3RlZEVPUyA6Ci0gICAgICAgICAgICAgICAgICAgICh0b2tlbi50eXBlID09
PSBUb2tlbi5JZGVudGlmaWVyKSA/IE1lc3NhZ2VzLlVuZXhwZWN0ZWRJZGVudGlmaWVyIDoKLSAg
ICAgICAgICAgICAgICAgICAgKHRva2VuLnR5cGUgPT09IFRva2VuLk51bWVyaWNMaXRlcmFsKSA/
IE1lc3NhZ2VzLlVuZXhwZWN0ZWROdW1iZXIgOgotICAgICAgICAgICAgICAgICAgICAodG9rZW4u
dHlwZSA9PT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCkgPyBNZXNzYWdlcy5VbmV4cGVjdGVkU3RyaW5n
IDoKLSAgICAgICAgICAgICAgICAgICAgKHRva2VuLnR5cGUgPT09IFRva2VuLlRlbXBsYXRlKSA/
IE1lc3NhZ2VzLlVuZXhwZWN0ZWRUZW1wbGF0ZSA6Ci0gICAgICAgICAgICAgICAgICAgIE1lc3Nh
Z2VzLlVuZXhwZWN0ZWRUb2tlbjsKLQotICAgICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09
PSBUb2tlbi5LZXl3b3JkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc0Z1dHVyZVJlc2Vy
dmVkV29yZCh0b2tlbi52YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IE1l
c3NhZ2VzLlVuZXhwZWN0ZWRSZXNlcnZlZDsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChzdHJpY3QgJiYgaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgbXNnID0gTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICB2YWx1ZSA9ICh0b2tlbi50eXBlID09PSBUb2tlbi5UZW1wbGF0ZSkgPyB0
b2tlbi52YWx1ZS5yYXcgOiB0b2tlbi52YWx1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIHZhbHVlID0gJ0lMTEVHQUwnOwotICAgICAgICB9Ci0KLSAgICAgICAgbXNnID0gbXNnLnJl
cGxhY2UoJyUwJywgdmFsdWUpOwotCi0gICAgICAgIHJldHVybiAodG9rZW4gJiYgdHlwZW9mIHRv
a2VuLmxpbmVOdW1iZXIgPT09ICdudW1iZXInKSA/Ci0gICAgICAgICAgICBjcmVhdGVFcnJvcih0
b2tlbi5saW5lTnVtYmVyLCB0b2tlbi5zdGFydCwgbXNnKSA6Ci0gICAgICAgICAgICBjcmVhdGVF
cnJvcihzY2FubmluZyA/IGxpbmVOdW1iZXIgOiBsYXN0TGluZU51bWJlciwgc2Nhbm5pbmcgPyBp
bmRleCA6IGxhc3RJbmRleCwgbXNnKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiB0aHJvd1VuZXhw
ZWN0ZWRUb2tlbih0b2tlbiwgbWVzc2FnZSkgewotICAgICAgICB0aHJvdyB1bmV4cGVjdGVkVG9r
ZW5FcnJvcih0b2tlbiwgbWVzc2FnZSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gdG9sZXJhdGVV
bmV4cGVjdGVkVG9rZW4odG9rZW4sIG1lc3NhZ2UpIHsKLSAgICAgICAgdmFyIGVycm9yID0gdW5l
eHBlY3RlZFRva2VuRXJyb3IodG9rZW4sIG1lc3NhZ2UpOwotICAgICAgICBpZiAoZXh0cmEuZXJy
b3JzKSB7Ci0gICAgICAgICAgICByZWNvcmRFcnJvcihlcnJvcik7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICB0aHJvdyBlcnJvcjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEV4
cGVjdCB0aGUgbmV4dCB0b2tlbiB0byBtYXRjaCB0aGUgc3BlY2lmaWVkIHB1bmN0dWF0b3IuCi0g
ICAgLy8gSWYgbm90LCBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24uCi0KLSAgICBmdW5jdGlv
biBleHBlY3QodmFsdWUpIHsKLSAgICAgICAgdmFyIHRva2VuID0gbGV4KCk7Ci0gICAgICAgIGlm
ICh0b2tlbi50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yIHx8IHRva2VuLnZhbHVlICE9PSB2YWx1
ZSkgewotICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQG5hbWUgZXhwZWN0Q29tbWFTZXBhcmF0b3IKLSAg
ICAgKiBAZGVzY3JpcHRpb24gUXVpZXRseSBleHBlY3QgYSBjb21tYSB3aGVuIGluIHRvbGVyYW50
IG1vZGUsIG90aGVyd2lzZSBkZWxlZ2F0ZXMKLSAgICAgKiB0byA8Y29kZT5leHBlY3QodmFsdWUp
PC9jb2RlPgotICAgICAqIEBzaW5jZSAyLjAKLSAgICAgKi8KLSAgICBmdW5jdGlvbiBleHBlY3RD
b21tYVNlcGFyYXRvcigpIHsKLSAgICAgICAgdmFyIHRva2VuOwotCi0gICAgICAgIGlmIChleHRy
YS5lcnJvcnMpIHsKLSAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkOwotICAgICAgICAgICAg
aWYgKHRva2VuLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IgJiYgdG9rZW4udmFsdWUgPT09ICcs
JykgewotICAgICAgICAgICAgICAgIGxleCgpOwotICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tl
bi50eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yICYmIHRva2VuLnZhbHVlID09PSAnOycpIHsKLSAg
ICAgICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRU
b2tlbih0b2tlbik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRvbGVy
YXRlVW5leHBlY3RlZFRva2VuKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4pOwotICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZXhwZWN0KCcsJyk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBFeHBlY3QgdGhlIG5leHQgdG9rZW4gdG8gbWF0Y2gg
dGhlIHNwZWNpZmllZCBrZXl3b3JkLgotICAgIC8vIElmIG5vdCwgYW4gZXhjZXB0aW9uIHdpbGwg
YmUgdGhyb3duLgotCi0gICAgZnVuY3Rpb24gZXhwZWN0S2V5d29yZChrZXl3b3JkKSB7Ci0gICAg
ICAgIHZhciB0b2tlbiA9IGxleCgpOwotICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4u
S2V5d29yZCB8fCB0b2tlbi52YWx1ZSAhPT0ga2V5d29yZCkgewotICAgICAgICAgICAgdGhyb3dV
bmV4cGVjdGVkVG9rZW4odG9rZW4pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gUmV0dXJu
IHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHB1bmN0dWF0b3Iu
Ci0KLSAgICBmdW5jdGlvbiBtYXRjaCh2YWx1ZSkgewotICAgICAgICByZXR1cm4gbG9va2FoZWFk
LnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IgJiYgbG9va2FoZWFkLnZhbHVlID09PSB2YWx1ZTsK
LSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgbmV4dCB0b2tlbiBtYXRjaGVzIHRo
ZSBzcGVjaWZpZWQga2V5d29yZAotCi0gICAgZnVuY3Rpb24gbWF0Y2hLZXl3b3JkKGtleXdvcmQp
IHsKLSAgICAgICAgcmV0dXJuIGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5LZXl3b3JkICYmIGxv
b2thaGVhZC52YWx1ZSA9PT0ga2V5d29yZDsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gdHJ1ZSBp
ZiB0aGUgbmV4dCB0b2tlbiBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgY29udGV4dHVhbCBrZXl3b3Jk
Ci0gICAgLy8gKHdoZXJlIGFuIGlkZW50aWZpZXIgaXMgc29tZXRpbWVzIGEga2V5d29yZCBkZXBl
bmRpbmcgb24gdGhlIGNvbnRleHQpCi0KLSAgICBmdW5jdGlvbiBtYXRjaENvbnRleHR1YWxLZXl3
b3JkKGtleXdvcmQpIHsKLSAgICAgICAgcmV0dXJuIGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5J
ZGVudGlmaWVyICYmIGxvb2thaGVhZC52YWx1ZSA9PT0ga2V5d29yZDsKLSAgICB9Ci0KLSAgICAv
LyBSZXR1cm4gdHJ1ZSBpZiB0aGUgbmV4dCB0b2tlbiBpcyBhbiBhc3NpZ25tZW50IG9wZXJhdG9y
Ci0KLSAgICBmdW5jdGlvbiBtYXRjaEFzc2lnbigpIHsKLSAgICAgICAgdmFyIG9wOwotCi0gICAg
ICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uUHVuY3R1YXRvcikgewotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIG9wID0gbG9va2FoZWFkLnZhbHVl
OwotICAgICAgICByZXR1cm4gb3AgPT09ICc9JyB8fAotICAgICAgICAgICAgb3AgPT09ICcqPScg
fHwKLSAgICAgICAgICAgIG9wID09PSAnLz0nIHx8Ci0gICAgICAgICAgICBvcCA9PT0gJyU9JyB8
fAotICAgICAgICAgICAgb3AgPT09ICcrPScgfHwKLSAgICAgICAgICAgIG9wID09PSAnLT0nIHx8
Ci0gICAgICAgICAgICBvcCA9PT0gJzw8PScgfHwKLSAgICAgICAgICAgIG9wID09PSAnPj49JyB8
fAotICAgICAgICAgICAgb3AgPT09ICc+Pj49JyB8fAotICAgICAgICAgICAgb3AgPT09ICcmPScg
fHwKLSAgICAgICAgICAgIG9wID09PSAnXj0nIHx8Ci0gICAgICAgICAgICBvcCA9PT0gJ3w9JzsK
LSAgICB9Ci0KLSAgICBmdW5jdGlvbiBjb25zdW1lU2VtaWNvbG9uKCkgewotICAgICAgICAvLyBD
YXRjaCB0aGUgdmVyeSBjb21tb24gY2FzZSBmaXJzdDogaW1tZWRpYXRlbHkgYSBzZW1pY29sb24g
KFUrMDAzQikuCi0gICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChzdGFydEluZGV4KSA9PT0g
MHgzQiB8fCBtYXRjaCgnOycpKSB7Ci0gICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChoYXNMaW5lVGVybWluYXRvcikgewotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRklYTUUoaWthcmllbmF0
b3IpOiB0aGlzIGlzIHNlZW1pbmdseSBhbiBpc3N1ZSBpbiB0aGUgcHJldmlvdXMgbG9jYXRpb24g
aW5mbyBjb252ZW50aW9uLgotICAgICAgICBsYXN0SW5kZXggPSBzdGFydEluZGV4OwotICAgICAg
ICBsYXN0TGluZU51bWJlciA9IHN0YXJ0TGluZU51bWJlcjsKLSAgICAgICAgbGFzdExpbmVTdGFy
dCA9IHN0YXJ0TGluZVN0YXJ0OwotCi0gICAgICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9r
ZW4uRU9GICYmICFtYXRjaCgnfScpKSB7Ci0gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tl
bihsb29rYWhlYWQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQ292ZXIgZ3JhbW1hciBz
dXBwb3J0LgotICAgIC8vCi0gICAgLy8gV2hlbiBhbiBhc3NpZ25tZW50IGV4cHJlc3Npb24gcG9z
aXRpb24gc3RhcnRzIHdpdGggYW4gbGVmdCBwYXJlbnRoZXNpcywgdGhlIGRldGVybWluYXRpb24g
b2YgdGhlIHR5cGUKLSAgICAvLyBvZiB0aGUgc3ludGF4IGlzIHRvIGJlIGRlZmVycmVkIGFyYml0
cmFyaWx5IGxvbmcgdW50aWwgdGhlIGVuZCBvZiB0aGUgcGFyZW50aGVzZXMgcGFpciAocGx1cyBh
IGxvb2thaGVhZCkKLSAgICAvLyBvciB0aGUgZmlyc3QgY29tbWEuIFRoaXMgc2l0dWF0aW9uIGFs
c28gZGVmZXJzIHRoZSBkZXRlcm1pbmF0aW9uIG9mIGFsbCB0aGUgZXhwcmVzc2lvbnMgbmVzdGVk
IGluIHRoZSBwYWlyLgotICAgIC8vCi0gICAgLy8gVGhlcmUgYXJlIHRocmVlIHByb2R1Y3Rpb25z
IHRoYXQgY2FuIGJlIHBhcnNlZCBpbiBhIHBhcmVudGhlc2VzIHBhaXIgdGhhdCBuZWVkcyB0byBi
ZSBkZXRlcm1pbmVkCi0gICAgLy8gYWZ0ZXIgdGhlIG91dGVybW9zdCBwYWlyIGlzIGNsb3NlZC4g
VGhleSBhcmU6Ci0gICAgLy8KLSAgICAvLyAgIDEuIEFzc2lnbm1lbnRFeHByZXNzaW9uCi0gICAg
Ly8gICAyLiBCaW5kaW5nRWxlbWVudHMKLSAgICAvLyAgIDMuIEFzc2lnbm1lbnRUYXJnZXRzCi0g
ICAgLy8KLSAgICAvLyBJbiBvcmRlciB0byBhdm9pZCBleHBvbmVudGlhbCBiYWNrdHJhY2tpbmcs
IHdlIHVzZSB0d28gZmxhZ3MgdG8gZGVub3RlIGlmIHRoZSBwcm9kdWN0aW9uIGNhbiBiZQotICAg
IC8vIGJpbmRpbmcgZWxlbWVudCBvciBhc3NpZ25tZW50IHRhcmdldC4KLSAgICAvLwotICAgIC8v
IFRoZSB0aHJlZSBwcm9kdWN0aW9ucyBoYXZlIHRoZSByZWxhdGlvbnNoaXA6Ci0gICAgLy8KLSAg
ICAvLyAgIEJpbmRpbmdFbGVtZW50cyDiioYgQXNzaWdubWVudFRhcmdldHMg4oqGIEFzc2lnbm1l
bnRFeHByZXNzaW9uCi0gICAgLy8KLSAgICAvLyB3aXRoIGEgc2luZ2xlIGV4Y2VwdGlvbiB0aGF0
IENvdmVySW5pdGlhbGl6ZWROYW1lIHdoZW4gdXNlZCBkaXJlY3RseSBpbiBhbiBFeHByZXNzaW9u
LCBnZW5lcmF0ZXMKLSAgICAvLyBhbiBlYXJseSBlcnJvci4gVGhlcmVmb3JlLCB3ZSBuZWVkIHRo
ZSB0aGlyZCBzdGF0ZSwgZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yLCB0byB0cmFjayB0
aGUKLSAgICAvLyBmaXJzdCB1c2FnZSBvZiBDb3ZlckluaXRpYWxpemVkTmFtZSBhbmQgcmVwb3J0
IGl0IHdoZW4gd2UgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBwYXJlbnRoZXNlcyBwYWlyLgotICAg
IC8vCi0gICAgLy8gaXNvbGF0ZUNvdmVyR3JhbW1hciBmdW5jdGlvbiBydW5zIHRoZSBnaXZlbiBw
YXJzZXIgZnVuY3Rpb24gd2l0aCBhIG5ldyBjb3ZlciBncmFtbWFyIGNvbnRleHQsIGFuZCBpdCBk
b2VzIG5vdAotICAgIC8vIGVmZmVjdCB0aGUgY3VycmVudCBmbGFncy4gVGhpcyBtZWFucyB0aGUg
cHJvZHVjdGlvbiB0aGUgcGFyc2VyIHBhcnNlcyBpcyBvbmx5IHVzZWQgYXMgYW4gZXhwcmVzc2lv
bi4gVGhlcmVmb3JlCi0gICAgLy8gdGhlIENvdmVySW5pdGlhbGl6ZWROYW1lIGNoZWNrIGlzIGNv
bmR1Y3RlZC4KLSAgICAvLwotICAgIC8vIGluaGVyaXRDb3ZlckdyYW1tYXIgZnVuY3Rpb24gcnVu
cyB0aGUgZ2l2ZW4gcGFyc2UgZnVuY3Rpb24gd2l0aCBhIG5ldyBjb3ZlciBncmFtbWFyIGNvbnRl
eHQsIGFuZCBpdCBwcm9wYWdhdGVzCi0gICAgLy8gdGhlIGZsYWdzIG91dHNpZGUgb2YgdGhlIHBh
cnNlci4gVGhpcyBtZWFucyB0aGUgcHJvZHVjdGlvbiB0aGUgcGFyc2VyIHBhcnNlcyBpcyB1c2Vk
IGFzIGEgcGFydCBvZiBhIHBvdGVudGlhbAotICAgIC8vIHBhdHRlcm4uIFRoZSBDb3ZlckluaXRp
YWxpemVkTmFtZSBjaGVjayBpcyBkZWZlcnJlZC4KLSAgICBmdW5jdGlvbiBpc29sYXRlQ292ZXJH
cmFtbWFyKHBhcnNlcikgewotICAgICAgICB2YXIgb2xkSXNCaW5kaW5nRWxlbWVudCA9IGlzQmlu
ZGluZ0VsZW1lbnQsCi0gICAgICAgICAgICBvbGRJc0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0Fzc2ln
bm1lbnRUYXJnZXQsCi0gICAgICAgICAgICBvbGRGaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJy
b3IgPSBmaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IsCi0gICAgICAgICAgICByZXN1bHQ7
Ci0gICAgICAgIGlzQmluZGluZ0VsZW1lbnQgPSB0cnVlOwotICAgICAgICBpc0Fzc2lnbm1lbnRU
YXJnZXQgPSB0cnVlOwotICAgICAgICBmaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSBu
dWxsOwotICAgICAgICByZXN1bHQgPSBwYXJzZXIoKTsKLSAgICAgICAgaWYgKGZpcnN0Q292ZXJJ
bml0aWFsaXplZE5hbWVFcnJvciAhPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3dVbmV4cGVj
dGVkVG9rZW4oZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yKTsKLSAgICAgICAgfQotICAg
ICAgICBpc0JpbmRpbmdFbGVtZW50ID0gb2xkSXNCaW5kaW5nRWxlbWVudDsKLSAgICAgICAgaXNB
c3NpZ25tZW50VGFyZ2V0ID0gb2xkSXNBc3NpZ25tZW50VGFyZ2V0OwotICAgICAgICBmaXJzdENv
dmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSBvbGRGaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJy
b3I7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gaW5oZXJp
dENvdmVyR3JhbW1hcihwYXJzZXIpIHsKLSAgICAgICAgdmFyIG9sZElzQmluZGluZ0VsZW1lbnQg
PSBpc0JpbmRpbmdFbGVtZW50LAotICAgICAgICAgICAgb2xkSXNBc3NpZ25tZW50VGFyZ2V0ID0g
aXNBc3NpZ25tZW50VGFyZ2V0LAotICAgICAgICAgICAgb2xkRmlyc3RDb3ZlckluaXRpYWxpemVk
TmFtZUVycm9yID0gZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yLAotICAgICAgICAgICAg
cmVzdWx0OwotICAgICAgICBpc0JpbmRpbmdFbGVtZW50ID0gdHJ1ZTsKLSAgICAgICAgaXNBc3Np
Z25tZW50VGFyZ2V0ID0gdHJ1ZTsKLSAgICAgICAgZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVy
cm9yID0gbnVsbDsKLSAgICAgICAgcmVzdWx0ID0gcGFyc2VyKCk7Ci0gICAgICAgIGlzQmluZGlu
Z0VsZW1lbnQgPSBpc0JpbmRpbmdFbGVtZW50ICYmIG9sZElzQmluZGluZ0VsZW1lbnQ7Ci0gICAg
ICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGlzQXNzaWdubWVudFRhcmdldCAmJiBvbGRJc0Fzc2ln
bm1lbnRUYXJnZXQ7Ci0gICAgICAgIGZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IG9s
ZEZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciB8fCBmaXJzdENvdmVySW5pdGlhbGl6ZWRO
YW1lRXJyb3I7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLy8gRUNNQS0y
NjIgMTMuMy4zIERlc3RydWN0dXJpbmcgQmluZGluZyBQYXR0ZXJucwotCi0gICAgZnVuY3Rpb24g
cGFyc2VBcnJheVBhdHRlcm4ocGFyYW1zLCBraW5kKSB7Ci0gICAgICAgIHZhciBub2RlID0gbmV3
IE5vZGUoKSwgZWxlbWVudHMgPSBbXSwgcmVzdCwgcmVzdE5vZGU7Ci0gICAgICAgIGV4cGVjdCgn
WycpOwotCi0gICAgICAgIHdoaWxlICghbWF0Y2goJ10nKSkgewotICAgICAgICAgICAgaWYgKG1h
dGNoKCcsJykpIHsKLSAgICAgICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgICAgICAgICBlbGVt
ZW50cy5wdXNoKG51bGwpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBp
ZiAobWF0Y2goJy4uLicpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3ROb2RlID0gbmV3IE5v
ZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgIHBh
cmFtcy5wdXNoKGxvb2thaGVhZCk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3QgPSBwYXJzZVZh
cmlhYmxlSWRlbnRpZmllcihwYXJhbXMsIGtpbmQpOwotICAgICAgICAgICAgICAgICAgICBlbGVt
ZW50cy5wdXNoKHJlc3ROb2RlLmZpbmlzaFJlc3RFbGVtZW50KHJlc3QpKTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgZWxlbWVudHMucHVzaChwYXJzZVBhdHRlcm5XaXRoRGVmYXVsdChwYXJhbXMsIGtpbmQp
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFtYXRjaCgnXScpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgnLCcpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICB9Ci0KLSAgICAgICAgZXhwZWN0KCddJyk7Ci0KLSAgICAg
ICAgcmV0dXJuIG5vZGUuZmluaXNoQXJyYXlQYXR0ZXJuKGVsZW1lbnRzKTsKLSAgICB9Ci0KLSAg
ICBmdW5jdGlvbiBwYXJzZVByb3BlcnR5UGF0dGVybihwYXJhbXMsIGtpbmQpIHsKLSAgICAgICAg
dmFyIG5vZGUgPSBuZXcgTm9kZSgpLCBrZXksIGtleVRva2VuLCBjb21wdXRlZCA9IG1hdGNoKCdb
JyksIGluaXQ7Ci0gICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmll
cikgewotICAgICAgICAgICAga2V5VG9rZW4gPSBsb29rYWhlYWQ7Ci0gICAgICAgICAgICBrZXkg
PSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOwotICAgICAgICAgICAgaWYgKG1hdGNoKCc9Jykp
IHsKLSAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChrZXlUb2tlbik7Ci0gICAgICAgICAgICAg
ICAgbGV4KCk7Ci0gICAgICAgICAgICAgICAgaW5pdCA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Np
b24oKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlzaFByb3BlcnR5KAotICAg
ICAgICAgICAgICAgICAgICAnaW5pdCcsIGtleSwgZmFsc2UsCi0gICAgICAgICAgICAgICAgICAg
IG5ldyBXcmFwcGluZ05vZGUoa2V5VG9rZW4pLmZpbmlzaEFzc2lnbm1lbnRQYXR0ZXJuKGtleSwg
aW5pdCksIGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCFtYXRjaCgnOicp
KSB7Ci0gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goa2V5VG9rZW4pOwotICAgICAgICAgICAg
ICAgIHJldHVybiBub2RlLmZpbmlzaFByb3BlcnR5KCdpbml0Jywga2V5LCBmYWxzZSwga2V5LCBm
YWxzZSwgdHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBrZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KHBhcmFtcywga2luZCk7Ci0gICAgICAgIH0K
LSAgICAgICAgZXhwZWN0KCc6Jyk7Ci0gICAgICAgIGluaXQgPSBwYXJzZVBhdHRlcm5XaXRoRGVm
YXVsdChwYXJhbXMsIGtpbmQpOwotICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hQcm9wZXJ0eSgn
aW5pdCcsIGtleSwgY29tcHV0ZWQsIGluaXQsIGZhbHNlLCBmYWxzZSk7Ci0gICAgfQotCi0gICAg
ZnVuY3Rpb24gcGFyc2VPYmplY3RQYXR0ZXJuKHBhcmFtcywga2luZCkgewotICAgICAgICB2YXIg
bm9kZSA9IG5ldyBOb2RlKCksIHByb3BlcnRpZXMgPSBbXTsKLQotICAgICAgICBleHBlY3QoJ3sn
KTsKLQotICAgICAgICB3aGlsZSAoIW1hdGNoKCd9JykpIHsKLSAgICAgICAgICAgIHByb3BlcnRp
ZXMucHVzaChwYXJzZVByb3BlcnR5UGF0dGVybihwYXJhbXMsIGtpbmQpKTsKLSAgICAgICAgICAg
IGlmICghbWF0Y2goJ30nKSkgewotICAgICAgICAgICAgICAgIGV4cGVjdCgnLCcpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgbGV4KCk7Ci0KLSAgICAgICAgcmV0dXJuIG5v
ZGUuZmluaXNoT2JqZWN0UGF0dGVybihwcm9wZXJ0aWVzKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlv
biBwYXJzZVBhdHRlcm4ocGFyYW1zLCBraW5kKSB7Ci0gICAgICAgIGlmIChtYXRjaCgnWycpKSB7
Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VBcnJheVBhdHRlcm4ocGFyYW1zLCBraW5kKTsKLSAg
ICAgICAgfSBlbHNlIGlmIChtYXRjaCgneycpKSB7Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VP
YmplY3RQYXR0ZXJuKHBhcmFtcywga2luZCk7Ci0gICAgICAgIH0KLSAgICAgICAgcGFyYW1zLnB1
c2gobG9va2FoZWFkKTsKLSAgICAgICAgcmV0dXJuIHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKGtp
bmQpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlUGF0dGVybldpdGhEZWZhdWx0KHBhcmFt
cywga2luZCkgewotICAgICAgICB2YXIgc3RhcnRUb2tlbiA9IGxvb2thaGVhZCwgcGF0dGVybiwg
cHJldmlvdXNBbGxvd1lpZWxkLCByaWdodDsKLSAgICAgICAgcGF0dGVybiA9IHBhcnNlUGF0dGVy
bihwYXJhbXMsIGtpbmQpOwotICAgICAgICBpZiAobWF0Y2goJz0nKSkgewotICAgICAgICAgICAg
bGV4KCk7Ci0gICAgICAgICAgICBwcmV2aW91c0FsbG93WWllbGQgPSBzdGF0ZS5hbGxvd1lpZWxk
OwotICAgICAgICAgICAgc3RhdGUuYWxsb3dZaWVsZCA9IHRydWU7Ci0gICAgICAgICAgICByaWdo
dCA9IGlzb2xhdGVDb3ZlckdyYW1tYXIocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7Ci0gICAg
ICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkOwotICAgICAgICAg
ICAgcGF0dGVybiA9IG5ldyBXcmFwcGluZ05vZGUoc3RhcnRUb2tlbikuZmluaXNoQXNzaWdubWVu
dFBhdHRlcm4ocGF0dGVybiwgcmlnaHQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBwYXR0
ZXJuOwotICAgIH0KLQotICAgIC8vIEVDTUEtMjYyIDEyLjIuNSBBcnJheSBJbml0aWFsaXplcgot
Ci0gICAgZnVuY3Rpb24gcGFyc2VBcnJheUluaXRpYWxpemVyKCkgewotICAgICAgICB2YXIgZWxl
bWVudHMgPSBbXSwgbm9kZSA9IG5ldyBOb2RlKCksIHJlc3RTcHJlYWQ7Ci0KLSAgICAgICAgZXhw
ZWN0KCdbJyk7Ci0KLSAgICAgICAgd2hpbGUgKCFtYXRjaCgnXScpKSB7Ci0gICAgICAgICAgICBp
ZiAobWF0Y2goJywnKSkgewotICAgICAgICAgICAgICAgIGxleCgpOwotICAgICAgICAgICAgICAg
IGVsZW1lbnRzLnB1c2gobnVsbCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCcuLi4n
KSkgewotICAgICAgICAgICAgICAgIHJlc3RTcHJlYWQgPSBuZXcgTm9kZSgpOwotICAgICAgICAg
ICAgICAgIGxleCgpOwotICAgICAgICAgICAgICAgIHJlc3RTcHJlYWQuZmluaXNoU3ByZWFkRWxl
bWVudChpbmhlcml0Q292ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pKTsKLQot
ICAgICAgICAgICAgICAgIGlmICghbWF0Y2goJ10nKSkgewotICAgICAgICAgICAgICAgICAgICBp
c0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgICAgIGV4cGVjdCgnLCcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBlbGVtZW50cy5wdXNoKHJlc3RTcHJlYWQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBlbGVtZW50cy5wdXNoKGluaGVyaXRDb3ZlckdyYW1tYXIocGFyc2VBc3NpZ25t
ZW50RXhwcmVzc2lvbikpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFtYXRjaCgnXScpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGV4cGVjdCgnLCcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGxleCgpOwotCi0gICAgICAgIHJldHVybiBu
b2RlLmZpbmlzaEFycmF5RXhwcmVzc2lvbihlbGVtZW50cyk7Ci0gICAgfQotCi0gICAgLy8gRUNN
QS0yNjIgMTIuMi42IE9iamVjdCBJbml0aWFsaXplcgotCi0gICAgZnVuY3Rpb24gcGFyc2VQcm9w
ZXJ0eUZ1bmN0aW9uKG5vZGUsIHBhcmFtSW5mbywgaXNHZW5lcmF0b3IpIHsKLSAgICAgICAgdmFy
IHByZXZpb3VzU3RyaWN0LCBib2R5OwotCi0gICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGlz
QmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKLQotICAgICAgICBwcmV2aW91c1N0cmljdCA9IHN0cmlj
dDsKLSAgICAgICAgYm9keSA9IGlzb2xhdGVDb3ZlckdyYW1tYXIocGFyc2VGdW5jdGlvblNvdXJj
ZUVsZW1lbnRzKTsKLQotICAgICAgICBpZiAoc3RyaWN0ICYmIHBhcmFtSW5mby5maXJzdFJlc3Ry
aWN0ZWQpIHsKLSAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHBhcmFtSW5mby5m
aXJzdFJlc3RyaWN0ZWQsIHBhcmFtSW5mby5tZXNzYWdlKTsKLSAgICAgICAgfQotICAgICAgICBp
ZiAoc3RyaWN0ICYmIHBhcmFtSW5mby5zdHJpY3RlZCkgewotICAgICAgICAgICAgdG9sZXJhdGVV
bmV4cGVjdGVkVG9rZW4ocGFyYW1JbmZvLnN0cmljdGVkLCBwYXJhbUluZm8ubWVzc2FnZSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBzdHJpY3QgPSBwcmV2aW91c1N0cmljdDsKLSAgICAgICAgcmV0
dXJuIG5vZGUuZmluaXNoRnVuY3Rpb25FeHByZXNzaW9uKG51bGwsIHBhcmFtSW5mby5wYXJhbXMs
IHBhcmFtSW5mby5kZWZhdWx0cywgYm9keSwgaXNHZW5lcmF0b3IpOwotICAgIH0KLQotICAgIGZ1
bmN0aW9uIHBhcnNlUHJvcGVydHlNZXRob2RGdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIHBhcmFt
cywgbWV0aG9kLCBub2RlID0gbmV3IE5vZGUoKSwKLSAgICAgICAgICAgIHByZXZpb3VzQWxsb3dZ
aWVsZCA9IHN0YXRlLmFsbG93WWllbGQ7Ci0KLSAgICAgICAgc3RhdGUuYWxsb3dZaWVsZCA9IGZh
bHNlOwotICAgICAgICBwYXJhbXMgPSBwYXJzZVBhcmFtcygpOwotICAgICAgICBzdGF0ZS5hbGxv
d1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkOwotCi0gICAgICAgIHN0YXRlLmFsbG93WWllbGQg
PSBmYWxzZTsKLSAgICAgICAgbWV0aG9kID0gcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKG5vZGUsIHBh
cmFtcywgZmFsc2UpOwotICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lp
ZWxkOwotCi0gICAgICAgIHJldHVybiBtZXRob2Q7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGFy
c2VPYmplY3RQcm9wZXJ0eUtleSgpIHsKLSAgICAgICAgdmFyIHRva2VuLCBub2RlID0gbmV3IE5v
ZGUoKSwgZXhwcjsKLQotICAgICAgICB0b2tlbiA9IGxleCgpOwotCi0gICAgICAgIC8vIE5vdGU6
IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgZnJvbSBwYXJzZU9iamVjdFByb3BlcnR5KCks
IHdoZXJlCi0gICAgICAgIC8vIEVPRiBhbmQgUHVuY3R1YXRvciB0b2tlbnMgYXJlIGFscmVhZHkg
ZmlsdGVyZWQgb3V0LgotCi0gICAgICAgIHN3aXRjaCAodG9rZW4udHlwZSkgewotICAgICAgICBj
YXNlIFRva2VuLlN0cmluZ0xpdGVyYWw6Ci0gICAgICAgIGNhc2UgVG9rZW4uTnVtZXJpY0xpdGVy
YWw6Ci0gICAgICAgICAgICBpZiAoc3RyaWN0ICYmIHRva2VuLm9jdGFsKSB7Ci0gICAgICAgICAg
ICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIE1lc3NhZ2VzLlN0cmljdE9jdGFs
TGl0ZXJhbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hM
aXRlcmFsKHRva2VuKTsKLSAgICAgICAgY2FzZSBUb2tlbi5JZGVudGlmaWVyOgotICAgICAgICBj
YXNlIFRva2VuLkJvb2xlYW5MaXRlcmFsOgotICAgICAgICBjYXNlIFRva2VuLk51bGxMaXRlcmFs
OgotICAgICAgICBjYXNlIFRva2VuLktleXdvcmQ6Ci0gICAgICAgICAgICByZXR1cm4gbm9kZS5m
aW5pc2hJZGVudGlmaWVyKHRva2VuLnZhbHVlKTsKLSAgICAgICAgY2FzZSBUb2tlbi5QdW5jdHVh
dG9yOgotICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAnWycpIHsKLSAgICAgICAgICAg
ICAgICBleHByID0gaXNvbGF0ZUNvdmVyR3JhbW1hcihwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9u
KTsKLSAgICAgICAgICAgICAgICBleHBlY3QoJ10nKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZXhwcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIHRocm93VW5leHBlY3RlZFRva2VuKHRva2VuKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBs
b29rYWhlYWRQcm9wZXJ0eU5hbWUoKSB7Ci0gICAgICAgIHN3aXRjaCAobG9va2FoZWFkLnR5cGUp
IHsKLSAgICAgICAgY2FzZSBUb2tlbi5JZGVudGlmaWVyOgotICAgICAgICBjYXNlIFRva2VuLlN0
cmluZ0xpdGVyYWw6Ci0gICAgICAgIGNhc2UgVG9rZW4uQm9vbGVhbkxpdGVyYWw6Ci0gICAgICAg
IGNhc2UgVG9rZW4uTnVsbExpdGVyYWw6Ci0gICAgICAgIGNhc2UgVG9rZW4uTnVtZXJpY0xpdGVy
YWw6Ci0gICAgICAgIGNhc2UgVG9rZW4uS2V5d29yZDoKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBjYXNlIFRva2VuLlB1bmN0dWF0b3I6Ci0gICAgICAgICAgICByZXR1cm4gbG9v
a2FoZWFkLnZhbHVlID09PSAnWyc7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgdG8gdHJ5IHRvIHBhcnNlIGEgTWV0aG9k
RGVmaW5pdGlvbiBhcyBkZWZpbmVkIGluIDE0LjMuIEJ1dCBpbiB0aGUgY2FzZSBvZiBvYmplY3Qg
bGl0ZXJhbHMsCi0gICAgLy8gaXQgbWlnaHQgYmUgY2FsbGVkIGF0IGEgcG9zaXRpb24gd2hlcmUg
dGhlcmUgaXMgaW4gZmFjdCBhIHNob3J0IGhhbmQgaWRlbnRpZmllciBwYXR0ZXJuIG9yIGEgZGF0
YSBwcm9wZXJ0eS4KLSAgICAvLyBUaGlzIGNhbiBvbmx5IGJlIGRldGVybWluZWQgYWZ0ZXIgd2Ug
Y29uc3VtZWQgdXAgdG8gdGhlIGxlZnQgcGFyZW50aGVzZXMuCi0gICAgLy8KLSAgICAvLyBJbiBv
cmRlciB0byBhdm9pZCBiYWNrIHRyYWNraW5nLCBpdCByZXR1cm5zIGBudWxsYCBpZiB0aGUgcG9z
aXRpb24gaXMgbm90IGEgTWV0aG9kRGVmaW5pdGlvbiBhbmQgdGhlIGNhbGxlcgotICAgIC8vIGlz
IHJlc3BvbnNpYmxlIHRvIHZpc2l0IG90aGVyIG9wdGlvbnMuCi0gICAgZnVuY3Rpb24gdHJ5UGFy
c2VNZXRob2REZWZpbml0aW9uKHRva2VuLCBrZXksIGNvbXB1dGVkLCBub2RlKSB7Ci0gICAgICAg
IHZhciB2YWx1ZSwgb3B0aW9ucywgbWV0aG9kTm9kZSwgcGFyYW1zLAotICAgICAgICAgICAgcHJl
dmlvdXNBbGxvd1lpZWxkID0gc3RhdGUuYWxsb3dZaWVsZDsKLQotICAgICAgICBpZiAodG9rZW4u
dHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikgewotICAgICAgICAgICAgLy8gY2hlY2sgZm9yIGBn
ZXRgIGFuZCBgc2V0YDsKLQotICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAnZ2V0JyAm
JiBsb29rYWhlYWRQcm9wZXJ0eU5hbWUoKSkgewotICAgICAgICAgICAgICAgIGNvbXB1dGVkID0g
bWF0Y2goJ1snKTsKLSAgICAgICAgICAgICAgICBrZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5
KCk7Ci0gICAgICAgICAgICAgICAgbWV0aG9kTm9kZSA9IG5ldyBOb2RlKCk7Ci0gICAgICAgICAg
ICAgICAgZXhwZWN0KCcoJyk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KCcpJyk7Ci0KLSAgICAg
ICAgICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgdmFs
dWUgPSBwYXJzZVByb3BlcnR5RnVuY3Rpb24obWV0aG9kTm9kZSwgewotICAgICAgICAgICAgICAg
ICAgICBwYXJhbXM6IFtdLAotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0czogW10sCi0gICAg
ICAgICAgICAgICAgICAgIHN0cmljdGVkOiBudWxsLAotICAgICAgICAgICAgICAgICAgICBmaXJz
dFJlc3RyaWN0ZWQ6IG51bGwsCi0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwKLSAg
ICAgICAgICAgICAgICB9LCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgc3RhdGUuYWxsb3dZaWVs
ZCA9IHByZXZpb3VzQWxsb3dZaWVsZDsKLQotICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmZp
bmlzaFByb3BlcnR5KCdnZXQnLCBrZXksIGNvbXB1dGVkLCB2YWx1ZSwgZmFsc2UsIGZhbHNlKTsK
LSAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW4udmFsdWUgPT09ICdzZXQnICYmIGxvb2thaGVh
ZFByb3BlcnR5TmFtZSgpKSB7Ci0gICAgICAgICAgICAgICAgY29tcHV0ZWQgPSBtYXRjaCgnWycp
OwotICAgICAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsKLSAgICAg
ICAgICAgICAgICBtZXRob2ROb2RlID0gbmV3IE5vZGUoKTsKLSAgICAgICAgICAgICAgICBleHBl
Y3QoJygnKTsKLQotICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHBhcmFtczogW10sCi0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb3VudDogMCwKLSAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdHM6IFtdLAotICAgICAgICAgICAgICAgICAgICBmaXJz
dFJlc3RyaWN0ZWQ6IG51bGwsCi0gICAgICAgICAgICAgICAgICAgIHBhcmFtU2V0OiB7fQotICAg
ICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgaWYgKG1hdGNoKCcpJykpIHsKLSAgICAg
ICAgICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4obG9va2FoZWFkKTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hbGxvd1lpZWxk
ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHBhcnNlUGFyYW0ob3B0aW9ucyk7Ci0gICAg
ICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRDb3VudCA9PT0gMCkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5kZWZhdWx0cyA9IFtdOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGV4cGVjdCgnKScp
OwotCi0gICAgICAgICAgICAgICAgc3RhdGUuYWxsb3dZaWVsZCA9IGZhbHNlOwotICAgICAgICAg
ICAgICAgIHZhbHVlID0gcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKG1ldGhvZE5vZGUsIG9wdGlvbnMs
IGZhbHNlKTsKLSAgICAgICAgICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxv
d1lpZWxkOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoUHJvcGVydHkoJ3Nl
dCcsIGtleSwgY29tcHV0ZWQsIHZhbHVlLCBmYWxzZSwgZmFsc2UpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IgJiYgdG9r
ZW4udmFsdWUgPT09ICcqJyAmJiBsb29rYWhlYWRQcm9wZXJ0eU5hbWUoKSkgewotICAgICAgICAg
ICAgY29tcHV0ZWQgPSBtYXRjaCgnWycpOwotICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQ
cm9wZXJ0eUtleSgpOwotICAgICAgICAgICAgbWV0aG9kTm9kZSA9IG5ldyBOb2RlKCk7Ci0KLSAg
ICAgICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSB0cnVlOwotICAgICAgICAgICAgcGFyYW1zID0g
cGFyc2VQYXJhbXMoKTsKLSAgICAgICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSBwcmV2aW91c0Fs
bG93WWllbGQ7Ci0KLSAgICAgICAgICAgIHN0YXRlLmFsbG93WWllbGQgPSBmYWxzZTsKLSAgICAg
ICAgICAgIHZhbHVlID0gcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKG1ldGhvZE5vZGUsIHBhcmFtcywg
dHJ1ZSk7Ci0gICAgICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxk
OwotCi0gICAgICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hQcm9wZXJ0eSgnaW5pdCcsIGtleSwg
Y29tcHV0ZWQsIHZhbHVlLCB0cnVlLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
a2V5ICYmIG1hdGNoKCcoJykpIHsKLSAgICAgICAgICAgIHZhbHVlID0gcGFyc2VQcm9wZXJ0eU1l
dGhvZEZ1bmN0aW9uKCk7Ci0gICAgICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hQcm9wZXJ0eSgn
aW5pdCcsIGtleSwgY29tcHV0ZWQsIHZhbHVlLCB0cnVlLCBmYWxzZSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBOb3QgYSBNZXRob2REZWZpbml0aW9uLgotICAgICAgICByZXR1cm4gbnVsbDsK
LSAgICB9Ci0KLSAgICBmdW5jdGlvbiBwYXJzZU9iamVjdFByb3BlcnR5KGhhc1Byb3RvKSB7Ci0g
ICAgICAgIHZhciB0b2tlbiA9IGxvb2thaGVhZCwgbm9kZSA9IG5ldyBOb2RlKCksIGNvbXB1dGVk
LCBrZXksIG1heWJlTWV0aG9kLCBwcm90bywgdmFsdWU7Ci0KLSAgICAgICAgY29tcHV0ZWQgPSBt
YXRjaCgnWycpOwotICAgICAgICBpZiAobWF0Y2goJyonKSkgewotICAgICAgICAgICAgbGV4KCk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBrZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5
S2V5KCk7Ci0gICAgICAgIH0KLSAgICAgICAgbWF5YmVNZXRob2QgPSB0cnlQYXJzZU1ldGhvZERl
ZmluaXRpb24odG9rZW4sIGtleSwgY29tcHV0ZWQsIG5vZGUpOwotICAgICAgICBpZiAobWF5YmVN
ZXRob2QpIHsKLSAgICAgICAgICAgIHJldHVybiBtYXliZU1ldGhvZDsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmICgha2V5KSB7Ci0gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihsb29r
YWhlYWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2hlY2sgZm9yIGR1cGxpY2F0ZWQgX19w
cm90b19fCi0gICAgICAgIGlmICghY29tcHV0ZWQpIHsKLSAgICAgICAgICAgIHByb3RvID0gKGtl
eS50eXBlID09PSBTeW50YXguSWRlbnRpZmllciAmJiBrZXkubmFtZSA9PT0gJ19fcHJvdG9fXycp
IHx8Ci0gICAgICAgICAgICAgICAgKGtleS50eXBlID09PSBTeW50YXguTGl0ZXJhbCAmJiBrZXku
dmFsdWUgPT09ICdfX3Byb3RvX18nKTsKLSAgICAgICAgICAgIGlmIChoYXNQcm90by52YWx1ZSAm
JiBwcm90bykgewotICAgICAgICAgICAgICAgIHRvbGVyYXRlRXJyb3IoTWVzc2FnZXMuRHVwbGlj
YXRlUHJvdG9Qcm9wZXJ0eSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBoYXNQcm90by52
YWx1ZSB8PSBwcm90bzsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtYXRjaCgnOicpKSB7Ci0g
ICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgICAgIHZhbHVlID0gaW5oZXJpdENvdmVyR3JhbW1h
cihwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKLSAgICAgICAgICAgIHJldHVybiBub2RlLmZp
bmlzaFByb3BlcnR5KCdpbml0Jywga2V5LCBjb21wdXRlZCwgdmFsdWUsIGZhbHNlLCBmYWxzZSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uSWRlbnRpZmll
cikgewotICAgICAgICAgICAgaWYgKG1hdGNoKCc9JykpIHsKLSAgICAgICAgICAgICAgICBmaXJz
dENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSBsb29rYWhlYWQ7Ci0gICAgICAgICAgICAgICAg
bGV4KCk7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNl
QXNzaWdubWVudEV4cHJlc3Npb24pOwotICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlz
aFByb3BlcnR5KCdpbml0Jywga2V5LCBjb21wdXRlZCwKLSAgICAgICAgICAgICAgICAgICAgbmV3
IFdyYXBwaW5nTm9kZSh0b2tlbikuZmluaXNoQXNzaWdubWVudFBhdHRlcm4oa2V5LCB2YWx1ZSks
IGZhbHNlLCB0cnVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBub2RlLmZp
bmlzaFByb3BlcnR5KCdpbml0Jywga2V5LCBjb21wdXRlZCwga2V5LCBmYWxzZSwgdHJ1ZSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQpOwotICAg
IH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlT2JqZWN0SW5pdGlhbGl6ZXIoKSB7Ci0gICAgICAgIHZh
ciBwcm9wZXJ0aWVzID0gW10sIGhhc1Byb3RvID0ge3ZhbHVlOiBmYWxzZX0sIG5vZGUgPSBuZXcg
Tm9kZSgpOwotCi0gICAgICAgIGV4cGVjdCgneycpOwotCi0gICAgICAgIHdoaWxlICghbWF0Y2go
J30nKSkgewotICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKHBhcnNlT2JqZWN0UHJvcGVydHko
aGFzUHJvdG8pKTsKLQotICAgICAgICAgICAgaWYgKCFtYXRjaCgnfScpKSB7Ci0gICAgICAgICAg
ICAgICAgZXhwZWN0Q29tbWFTZXBhcmF0b3IoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIGV4cGVjdCgnfScpOwotCi0gICAgICAgIHJldHVybiBub2RlLmZpbmlzaE9iamVj
dEV4cHJlc3Npb24ocHJvcGVydGllcyk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcmVpbnRlcnBy
ZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIpIHsKLSAgICAgICAgdmFyIGk7Ci0gICAgICAgIHN3
aXRjaCAoZXhwci50eXBlKSB7Ci0gICAgICAgIGNhc2UgU3ludGF4LklkZW50aWZpZXI6Ci0gICAg
ICAgIGNhc2UgU3ludGF4Lk1lbWJlckV4cHJlc3Npb246Ci0gICAgICAgIGNhc2UgU3ludGF4LlJl
c3RFbGVtZW50OgotICAgICAgICBjYXNlIFN5bnRheC5Bc3NpZ25tZW50UGF0dGVybjoKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFN5bnRheC5TcHJlYWRFbGVtZW50OgotICAgICAg
ICAgICAgZXhwci50eXBlID0gU3ludGF4LlJlc3RFbGVtZW50OwotICAgICAgICAgICAgcmVpbnRl
cnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIuYXJndW1lbnQpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgU3ludGF4LkFycmF5RXhwcmVzc2lvbjoKLSAgICAgICAgICAgIGV4
cHIudHlwZSA9IFN5bnRheC5BcnJheVBhdHRlcm47Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBp
IDwgZXhwci5lbGVtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIGlmIChleHBy
LmVsZW1lbnRzW2ldICE9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0
RXhwcmVzc2lvbkFzUGF0dGVybihleHByLmVsZW1lbnRzW2ldKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTeW50YXgu
T2JqZWN0RXhwcmVzc2lvbjoKLSAgICAgICAgICAgIGV4cHIudHlwZSA9IFN5bnRheC5PYmplY3RQ
YXR0ZXJuOwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGV4cHIucHJvcGVydGllcy5sZW5n
dGg7IGkrKykgewotICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVy
bihleHByLnByb3BlcnRpZXNbaV0udmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgU3ludGF4LkFzc2lnbm1lbnRFeHByZXNzaW9uOgotICAgICAg
ICAgICAgZXhwci50eXBlID0gU3ludGF4LkFzc2lnbm1lbnRQYXR0ZXJuOwotICAgICAgICAgICAg
cmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIubGVmdCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIC8vIEFsbG93IG90aGVyIG5vZGUg
dHlwZSBmb3IgdG9sZXJhbnQgcGFyc2luZy4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgLy8gRUNNQS0yNjIgMTIuMi45IFRlbXBsYXRlIExpdGVyYWxzCi0KLSAg
ICBmdW5jdGlvbiBwYXJzZVRlbXBsYXRlRWxlbWVudChvcHRpb24pIHsKLSAgICAgICAgdmFyIG5v
ZGUsIHRva2VuOwotCi0gICAgICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uVGVtcGxh
dGUgfHwgKG9wdGlvbi5oZWFkICYmICFsb29rYWhlYWQuaGVhZCkpIHsKLSAgICAgICAgICAgIHRo
cm93VW5leHBlY3RlZFRva2VuKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBub2RlID0gbmV3IE5v
ZGUoKTsKLSAgICAgICAgdG9rZW4gPSBsZXgoKTsKLQotICAgICAgICByZXR1cm4gbm9kZS5maW5p
c2hUZW1wbGF0ZUVsZW1lbnQoeyByYXc6IHRva2VuLnZhbHVlLnJhdywgY29va2VkOiB0b2tlbi52
YWx1ZS5jb29rZWQgfSwgdG9rZW4udGFpbCk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VU
ZW1wbGF0ZUxpdGVyYWwoKSB7Ci0gICAgICAgIHZhciBxdWFzaSwgcXVhc2lzLCBleHByZXNzaW9u
cywgbm9kZSA9IG5ldyBOb2RlKCk7Ci0KLSAgICAgICAgcXVhc2kgPSBwYXJzZVRlbXBsYXRlRWxl
bWVudCh7IGhlYWQ6IHRydWUgfSk7Ci0gICAgICAgIHF1YXNpcyA9IFtxdWFzaV07Ci0gICAgICAg
IGV4cHJlc3Npb25zID0gW107Ci0KLSAgICAgICAgd2hpbGUgKCFxdWFzaS50YWlsKSB7Ci0gICAg
ICAgICAgICBleHByZXNzaW9ucy5wdXNoKHBhcnNlRXhwcmVzc2lvbigpKTsKLSAgICAgICAgICAg
IHF1YXNpID0gcGFyc2VUZW1wbGF0ZUVsZW1lbnQoeyBoZWFkOiBmYWxzZSB9KTsKLSAgICAgICAg
ICAgIHF1YXNpcy5wdXNoKHF1YXNpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBub2Rl
LmZpbmlzaFRlbXBsYXRlTGl0ZXJhbChxdWFzaXMsIGV4cHJlc3Npb25zKTsKLSAgICB9Ci0KLSAg
ICAvLyBFQ01BLTI2MiAxMi4yLjEwIFRoZSBHcm91cGluZyBPcGVyYXRvcgotCi0gICAgZnVuY3Rp
b24gcGFyc2VHcm91cEV4cHJlc3Npb24oKSB7Ci0gICAgICAgIHZhciBleHByLCBleHByZXNzaW9u
cywgc3RhcnRUb2tlbiwgaSwgcGFyYW1zID0gW107Ci0KLSAgICAgICAgZXhwZWN0KCcoJyk7Ci0K
LSAgICAgICAgaWYgKG1hdGNoKCcpJykpIHsKLSAgICAgICAgICAgIGxleCgpOwotICAgICAgICAg
ICAgaWYgKCFtYXRjaCgnPT4nKSkgewotICAgICAgICAgICAgICAgIGV4cGVjdCgnPT4nKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTog
UGxhY2VIb2xkZXJzLkFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIsCi0gICAgICAgICAgICAgICAg
cGFyYW1zOiBbXSwKLSAgICAgICAgICAgICAgICByYXdQYXJhbXM6IFtdCi0gICAgICAgICAgICB9
OwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKLSAgICAgICAg
aWYgKG1hdGNoKCcuLi4nKSkgewotICAgICAgICAgICAgZXhwciA9IHBhcnNlUmVzdEVsZW1lbnQo
cGFyYW1zKTsKLSAgICAgICAgICAgIGV4cGVjdCgnKScpOwotICAgICAgICAgICAgaWYgKCFtYXRj
aCgnPT4nKSkgewotICAgICAgICAgICAgICAgIGV4cGVjdCgnPT4nKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgdHlwZTogUGxhY2VIb2xkZXJz
LkFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIsCi0gICAgICAgICAgICAgICAgcGFyYW1zOiBbZXhw
cl0KLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLQotICAgICAgICBpc0JpbmRpbmdFbGVtZW50
ID0gdHJ1ZTsKLSAgICAgICAgZXhwciA9IGluaGVyaXRDb3ZlckdyYW1tYXIocGFyc2VBc3NpZ25t
ZW50RXhwcmVzc2lvbik7Ci0KLSAgICAgICAgaWYgKG1hdGNoKCcsJykpIHsKLSAgICAgICAgICAg
IGlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNlOwotICAgICAgICAgICAgZXhwcmVzc2lvbnMgPSBb
ZXhwcl07Ci0KLSAgICAgICAgICAgIHdoaWxlIChzdGFydEluZGV4IDwgbGVuZ3RoKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFtYXRjaCgnLCcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBsZXgoKTsKLQotICAgICAgICAg
ICAgICAgIGlmIChtYXRjaCgnLi4uJykpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Jp
bmRpbmdFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRU
b2tlbihsb29rYWhlYWQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIGV4cHJlc3Npb25zLnB1c2gocGFyc2VSZXN0RWxlbWVudChwYXJhbXMpKTsKLSAgICAgICAg
ICAgICAgICAgICAgZXhwZWN0KCcpJyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2go
Jz0+JykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdCgnPT4nKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpc0JpbmRpbmdFbGVtZW50ID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBleHByZXNzaW9ucy5sZW5n
dGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRFeHByZXNzaW9u
QXNQYXR0ZXJuKGV4cHJlc3Npb25zW2ldKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogUGxh
Y2VIb2xkZXJzLkFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBwYXJhbXM6IGV4cHJlc3Npb25zCi0gICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMucHVzaChpbmhlcml0Q292
ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgZXhwciA9IG5ldyBXcmFwcGluZ05vZGUoc3RhcnRUb2tlbikuZmluaXNoU2Vx
dWVuY2VFeHByZXNzaW9uKGV4cHJlc3Npb25zKTsKLSAgICAgICAgfQotCi0KLSAgICAgICAgZXhw
ZWN0KCcpJyk7Ci0KLSAgICAgICAgaWYgKG1hdGNoKCc9PicpKSB7Ci0gICAgICAgICAgICBpZiAo
ZXhwci50eXBlID09PSBTeW50YXguSWRlbnRpZmllciAmJiBleHByLm5hbWUgPT09ICd5aWVsZCcp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgICAgICB0eXBlOiBQ
bGFjZUhvbGRlcnMuQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlciwKLSAgICAgICAgICAgICAgICAg
ICAgcGFyYW1zOiBbZXhwcl0KLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAoIWlzQmluZGluZ0VsZW1lbnQpIHsKLSAgICAgICAgICAgICAgICB0aHJv
d1VuZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAoZXhwci50eXBlID09PSBTeW50YXguU2VxdWVuY2VFeHByZXNzaW9uKSB7Ci0gICAgICAg
ICAgICAgICAgZm9yIChpID0gMDsgaSA8IGV4cHIuZXhwcmVzc2lvbnMubGVuZ3RoOyBpKyspIHsK
LSAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIu
ZXhwcmVzc2lvbnNbaV0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgcmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBleHByID0gewotICAgICAgICAgICAgICAgIHR5
cGU6IFBsYWNlSG9sZGVycy5BcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVyLAotICAgICAgICAgICAg
ICAgIHBhcmFtczogZXhwci50eXBlID09PSBTeW50YXguU2VxdWVuY2VFeHByZXNzaW9uID8gZXhw
ci5leHByZXNzaW9ucyA6IFtleHByXQotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotICAgICAg
ICBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiBleHByOwotICAgIH0K
LQotCi0gICAgLy8gRUNNQS0yNjIgMTIuMiBQcmltYXJ5IEV4cHJlc3Npb25zCi0KLSAgICBmdW5j
dGlvbiBwYXJzZVByaW1hcnlFeHByZXNzaW9uKCkgewotICAgICAgICB2YXIgdHlwZSwgdG9rZW4s
IGV4cHIsIG5vZGU7Ci0KLSAgICAgICAgaWYgKG1hdGNoKCcoJykpIHsKLSAgICAgICAgICAgIGlz
QmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiBpbmhlcml0Q292ZXJH
cmFtbWFyKHBhcnNlR3JvdXBFeHByZXNzaW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICht
YXRjaCgnWycpKSB7Ci0gICAgICAgICAgICByZXR1cm4gaW5oZXJpdENvdmVyR3JhbW1hcihwYXJz
ZUFycmF5SW5pdGlhbGl6ZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1hdGNoKCd7Jykp
IHsKLSAgICAgICAgICAgIHJldHVybiBpbmhlcml0Q292ZXJHcmFtbWFyKHBhcnNlT2JqZWN0SW5p
dGlhbGl6ZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgdHlwZSA9IGxvb2thaGVhZC50eXBlOwot
ICAgICAgICBub2RlID0gbmV3IE5vZGUoKTsKLQotICAgICAgICBpZiAodHlwZSA9PT0gVG9rZW4u
SWRlbnRpZmllcikgewotICAgICAgICAgICAgaWYgKHN0YXRlLnNvdXJjZVR5cGUgPT09ICdtb2R1
bGUnICYmIGxvb2thaGVhZC52YWx1ZSA9PT0gJ2F3YWl0JykgewotICAgICAgICAgICAgICAgIHRv
bGVyYXRlVW5leHBlY3RlZFRva2VuKGxvb2thaGVhZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBleHByID0gbm9kZS5maW5pc2hJZGVudGlmaWVyKGxleCgpLnZhbHVlKTsKLSAgICAgICAg
fSBlbHNlIGlmICh0eXBlID09PSBUb2tlbi5TdHJpbmdMaXRlcmFsIHx8IHR5cGUgPT09IFRva2Vu
Lk51bWVyaWNMaXRlcmFsKSB7Ci0gICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0Jp
bmRpbmdFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGxvb2thaGVh
ZC5vY3RhbCkgewotICAgICAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKGxvb2th
aGVhZCwgTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGV4cHIgPSBub2RlLmZpbmlzaExpdGVyYWwobGV4KCkpOwotICAgICAgICB9IGVsc2Ug
aWYgKHR5cGUgPT09IFRva2VuLktleXdvcmQpIHsKLSAgICAgICAgICAgIGlmICghc3RyaWN0ICYm
IHN0YXRlLmFsbG93WWllbGQgJiYgbWF0Y2hLZXl3b3JkKCd5aWVsZCcpKSB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNl
OwotICAgICAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnZnVuY3Rpb24nKSkgewotICAgICAgICAg
ICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbigpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgndGhpcycpKSB7Ci0gICAgICAgICAgICAgICAg
bGV4KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoVGhpc0V4cHJlc3Npb24o
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2NsYXNzJykp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VDbGFzc0V4cHJlc3Npb24oKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKGxleCgpKTsKLSAgICAg
ICAgfSBlbHNlIGlmICh0eXBlID09PSBUb2tlbi5Cb29sZWFuTGl0ZXJhbCkgewotICAgICAgICAg
ICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOwotICAgICAg
ICAgICAgdG9rZW4gPSBsZXgoKTsKLSAgICAgICAgICAgIHRva2VuLnZhbHVlID0gKHRva2VuLnZh
bHVlID09PSAndHJ1ZScpOwotICAgICAgICAgICAgZXhwciA9IG5vZGUuZmluaXNoTGl0ZXJhbCh0
b2tlbik7Ci0gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9rZW4uTnVsbExpdGVyYWwpIHsK
LSAgICAgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGlzQmluZGluZ0VsZW1lbnQgPSBmYWxz
ZTsKLSAgICAgICAgICAgIHRva2VuID0gbGV4KCk7Ci0gICAgICAgICAgICB0b2tlbi52YWx1ZSA9
IG51bGw7Ci0gICAgICAgICAgICBleHByID0gbm9kZS5maW5pc2hMaXRlcmFsKHRva2VuKTsKLSAg
ICAgICAgfSBlbHNlIGlmIChtYXRjaCgnLycpIHx8IG1hdGNoKCcvPScpKSB7Ci0gICAgICAgICAg
ICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAg
ICAgICBpbmRleCA9IHN0YXJ0SW5kZXg7Ci0KLSAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmEu
dG9rZW5zICE9PSAndW5kZWZpbmVkJykgewotICAgICAgICAgICAgICAgIHRva2VuID0gY29sbGVj
dFJlZ2V4KCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRva2VuID0g
c2NhblJlZ0V4cCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAg
ICAgICBleHByID0gbm9kZS5maW5pc2hMaXRlcmFsKHRva2VuKTsKLSAgICAgICAgfSBlbHNlIGlm
ICh0eXBlID09PSBUb2tlbi5UZW1wbGF0ZSkgewotICAgICAgICAgICAgZXhwciA9IHBhcnNlVGVt
cGxhdGVMaXRlcmFsKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aHJvd1VuZXhw
ZWN0ZWRUb2tlbihsZXgoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZXhwcjsKLSAg
ICB9Ci0KLSAgICAvLyBFQ01BLTI2MiAxMi4zIExlZnQtSGFuZC1TaWRlIEV4cHJlc3Npb25zCi0K
LSAgICBmdW5jdGlvbiBwYXJzZUFyZ3VtZW50cygpIHsKLSAgICAgICAgdmFyIGFyZ3MgPSBbXSwg
ZXhwcjsKLQotICAgICAgICBleHBlY3QoJygnKTsKLQotICAgICAgICBpZiAoIW1hdGNoKCcpJykp
IHsKLSAgICAgICAgICAgIHdoaWxlIChzdGFydEluZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKG1hdGNoKCcuLi4nKSkgewotICAgICAgICAgICAgICAgICAgICBleHByID0gbmV3
IE5vZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAgICAgICAgICAgICAg
IGV4cHIuZmluaXNoU3ByZWFkRWxlbWVudChpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlQXNzaWdu
bWVudEV4cHJlc3Npb24pKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBleHByID0gaXNvbGF0ZUNvdmVyR3JhbW1hcihwYXJzZUFzc2lnbm1lbnRFeHByZXNz
aW9uKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYXJncy5wdXNoKGV4cHIp
OwotICAgICAgICAgICAgICAgIGlmIChtYXRjaCgnKScpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBleHBlY3RDb21tYVNl
cGFyYXRvcigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZXhwZWN0KCcp
Jyk7Ci0KLSAgICAgICAgcmV0dXJuIGFyZ3M7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VO
b25Db21wdXRlZFByb3BlcnR5KCkgewotICAgICAgICB2YXIgdG9rZW4sIG5vZGUgPSBuZXcgTm9k
ZSgpOwotCi0gICAgICAgIHRva2VuID0gbGV4KCk7Ci0KLSAgICAgICAgaWYgKCFpc0lkZW50aWZp
ZXJOYW1lKHRva2VuKSkgewotICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4p
OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoSWRlbnRpZmllcih0b2tl
bi52YWx1ZSk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VOb25Db21wdXRlZE1lbWJlcigp
IHsKLSAgICAgICAgZXhwZWN0KCcuJyk7Ci0KLSAgICAgICAgcmV0dXJuIHBhcnNlTm9uQ29tcHV0
ZWRQcm9wZXJ0eSgpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlQ29tcHV0ZWRNZW1iZXIo
KSB7Ci0gICAgICAgIHZhciBleHByOwotCi0gICAgICAgIGV4cGVjdCgnWycpOwotCi0gICAgICAg
IGV4cHIgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlRXhwcmVzc2lvbik7Ci0KLSAgICAgICAg
ZXhwZWN0KCddJyk7Ci0KLSAgICAgICAgcmV0dXJuIGV4cHI7Ci0gICAgfQotCi0gICAgLy8gRUNN
QS0yNjIgMTIuMy4zIFRoZSBuZXcgT3BlcmF0b3IKLQotICAgIGZ1bmN0aW9uIHBhcnNlTmV3RXhw
cmVzc2lvbigpIHsKLSAgICAgICAgdmFyIGNhbGxlZSwgYXJncywgbm9kZSA9IG5ldyBOb2RlKCk7
Ci0KLSAgICAgICAgZXhwZWN0S2V5d29yZCgnbmV3Jyk7Ci0KLSAgICAgICAgaWYgKG1hdGNoKCcu
JykpIHsKLSAgICAgICAgICAgIGxleCgpOwotICAgICAgICAgICAgaWYgKGxvb2thaGVhZC50eXBl
ID09PSBUb2tlbi5JZGVudGlmaWVyICYmIGxvb2thaGVhZC52YWx1ZSA9PT0gJ3RhcmdldCcpIHsK
LSAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaW5GdW5jdGlvbkJvZHkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgbGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlzaE1l
dGFQcm9wZXJ0eSgnbmV3JywgJ3RhcmdldCcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKGxvb2thaGVhZCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBjYWxsZWUgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlTGVmdEhh
bmRTaWRlRXhwcmVzc2lvbik7Ci0gICAgICAgIGFyZ3MgPSBtYXRjaCgnKCcpID8gcGFyc2VBcmd1
bWVudHMoKSA6IFtdOwotCi0gICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IGlzQmluZGluZ0Vs
ZW1lbnQgPSBmYWxzZTsKLQotICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hOZXdFeHByZXNzaW9u
KGNhbGxlZSwgYXJncyk7Ci0gICAgfQotCi0gICAgLy8gRUNNQS0yNjIgMTIuMy40IEZ1bmN0aW9u
IENhbGxzCi0KLSAgICBmdW5jdGlvbiBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0Nh
bGwoKSB7Ci0gICAgICAgIHZhciBxdWFzaSwgZXhwciwgYXJncywgcHJvcGVydHksIHN0YXJ0VG9r
ZW4sIHByZXZpb3VzQWxsb3dJbiA9IHN0YXRlLmFsbG93SW47Ci0KLSAgICAgICAgc3RhcnRUb2tl
biA9IGxvb2thaGVhZDsKLSAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHRydWU7Ci0KLSAgICAgICAg
aWYgKG1hdGNoS2V5d29yZCgnc3VwZXInKSAmJiBzdGF0ZS5pbkZ1bmN0aW9uQm9keSkgewotICAg
ICAgICAgICAgZXhwciA9IG5ldyBOb2RlKCk7Ci0gICAgICAgICAgICBsZXgoKTsKLSAgICAgICAg
ICAgIGV4cHIgPSBleHByLmZpbmlzaFN1cGVyKCk7Ci0gICAgICAgICAgICBpZiAoIW1hdGNoKCco
JykgJiYgIW1hdGNoKCcuJykgJiYgIW1hdGNoKCdbJykpIHsKLSAgICAgICAgICAgICAgICB0aHJv
d1VuZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgZXhwciA9IGluaGVyaXRDb3ZlckdyYW1tYXIobWF0Y2hLZXl3b3Jk
KCduZXcnKSA/IHBhcnNlTmV3RXhwcmVzc2lvbiA6IHBhcnNlUHJpbWFyeUV4cHJlc3Npb24pOwot
ICAgICAgICB9Ci0KLSAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgaWYgKG1hdGNoKCcu
JykpIHsKLSAgICAgICAgICAgICAgICBpc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBwcm9w
ZXJ0eSA9IHBhcnNlTm9uQ29tcHV0ZWRNZW1iZXIoKTsKLSAgICAgICAgICAgICAgICBleHByID0g
bmV3IFdyYXBwaW5nTm9kZShzdGFydFRva2VuKS5maW5pc2hNZW1iZXJFeHByZXNzaW9uKCcuJywg
ZXhwciwgcHJvcGVydHkpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnKCcpKSB7Ci0g
ICAgICAgICAgICAgICAgaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOwotICAgICAgICAgICAgICAg
IGlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGFyZ3MgPSBwYXJz
ZUFyZ3VtZW50cygpOwotICAgICAgICAgICAgICAgIGV4cHIgPSBuZXcgV3JhcHBpbmdOb2RlKHN0
YXJ0VG9rZW4pLmZpbmlzaENhbGxFeHByZXNzaW9uKGV4cHIsIGFyZ3MpOwotICAgICAgICAgICAg
fSBlbHNlIGlmIChtYXRjaCgnWycpKSB7Ci0gICAgICAgICAgICAgICAgaXNCaW5kaW5nRWxlbWVu
dCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGlzQXNzaWdubWVudFRhcmdldCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgcHJvcGVydHkgPSBwYXJzZUNvbXB1dGVkTWVtYmVyKCk7Ci0gICAgICAg
ICAgICAgICAgZXhwciA9IG5ldyBXcmFwcGluZ05vZGUoc3RhcnRUb2tlbikuZmluaXNoTWVtYmVy
RXhwcmVzc2lvbignWycsIGV4cHIsIHByb3BlcnR5KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAo
bG9va2FoZWFkLnR5cGUgPT09IFRva2VuLlRlbXBsYXRlICYmIGxvb2thaGVhZC5oZWFkKSB7Ci0g
ICAgICAgICAgICAgICAgcXVhc2kgPSBwYXJzZVRlbXBsYXRlTGl0ZXJhbCgpOwotICAgICAgICAg
ICAgICAgIGV4cHIgPSBuZXcgV3JhcHBpbmdOb2RlKHN0YXJ0VG9rZW4pLmZpbmlzaFRhZ2dlZFRl
bXBsYXRlRXhwcmVzc2lvbihleHByLCBxdWFzaSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHN0
YXRlLmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47Ci0KLSAgICAgICAgcmV0dXJuIGV4cHI7Ci0g
ICAgfQotCi0gICAgLy8gRUNNQS0yNjIgMTIuMyBMZWZ0LUhhbmQtU2lkZSBFeHByZXNzaW9ucwot
Ci0gICAgZnVuY3Rpb24gcGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uKCkgewotICAgICAgICB2
YXIgcXVhc2ksIGV4cHIsIHByb3BlcnR5LCBzdGFydFRva2VuOwotICAgICAgICBhc3NlcnQoc3Rh
dGUuYWxsb3dJbiwgJ2NhbGxlZSBvZiBuZXcgZXhwcmVzc2lvbiBhbHdheXMgYWxsb3cgaW4ga2V5
d29yZC4nKTsKLQotICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOwotCi0gICAgICAgIGlm
IChtYXRjaEtleXdvcmQoJ3N1cGVyJykgJiYgc3RhdGUuaW5GdW5jdGlvbkJvZHkpIHsKLSAgICAg
ICAgICAgIGV4cHIgPSBuZXcgTm9kZSgpOwotICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAgICAg
ICBleHByID0gZXhwci5maW5pc2hTdXBlcigpOwotICAgICAgICAgICAgaWYgKCFtYXRjaCgnWycp
ICYmICFtYXRjaCgnLicpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4o
bG9va2FoZWFkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGV4cHIgPSBpbmhlcml0Q292ZXJHcmFtbWFyKG1hdGNoS2V5d29yZCgnbmV3JykgPyBwYXJzZU5l
d0V4cHJlc3Npb24gOiBwYXJzZVByaW1hcnlFeHByZXNzaW9uKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIGlmIChtYXRjaCgnWycpKSB7Ci0gICAgICAgICAg
ICAgICAgaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGlzQXNzaWdu
bWVudFRhcmdldCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcHJvcGVydHkgPSBwYXJzZUNvbXB1
dGVkTWVtYmVyKCk7Ci0gICAgICAgICAgICAgICAgZXhwciA9IG5ldyBXcmFwcGluZ05vZGUoc3Rh
cnRUb2tlbikuZmluaXNoTWVtYmVyRXhwcmVzc2lvbignWycsIGV4cHIsIHByb3BlcnR5KTsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJy4nKSkgewotICAgICAgICAgICAgICAgIGlzQmlu
ZGluZ0VsZW1lbnQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQg
PSB0cnVlOwotICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gcGFyc2VOb25Db21wdXRlZE1lbWJl
cigpOwotICAgICAgICAgICAgICAgIGV4cHIgPSBuZXcgV3JhcHBpbmdOb2RlKHN0YXJ0VG9rZW4p
LmZpbmlzaE1lbWJlckV4cHJlc3Npb24oJy4nLCBleHByLCBwcm9wZXJ0eSk7Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5UZW1wbGF0ZSAmJiBsb29rYWhl
YWQuaGVhZCkgewotICAgICAgICAgICAgICAgIHF1YXNpID0gcGFyc2VUZW1wbGF0ZUxpdGVyYWwo
KTsKLSAgICAgICAgICAgICAgICBleHByID0gbmV3IFdyYXBwaW5nTm9kZShzdGFydFRva2VuKS5m
aW5pc2hUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24oZXhwciwgcXVhc2kpOwotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gZXhwcjsKLSAgICB9Ci0KLSAgICAvLyBFQ01BLTI2MiAxMi40IFBv
c3RmaXggRXhwcmVzc2lvbnMKLQotICAgIGZ1bmN0aW9uIHBhcnNlUG9zdGZpeEV4cHJlc3Npb24o
KSB7Ci0gICAgICAgIHZhciBleHByLCB0b2tlbiwgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKLQot
ICAgICAgICBleHByID0gaW5oZXJpdENvdmVyR3JhbW1hcihwYXJzZUxlZnRIYW5kU2lkZUV4cHJl
c3Npb25BbGxvd0NhbGwpOwotCi0gICAgICAgIGlmICghaGFzTGluZVRlcm1pbmF0b3IgJiYgbG9v
a2FoZWFkLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IpIHsKLSAgICAgICAgICAgIGlmIChtYXRj
aCgnKysnKSB8fCBtYXRjaCgnLS0nKSkgewotICAgICAgICAgICAgICAgIC8vIEVDTUEtMjYyIDEx
LjMuMSwgMTEuMy4yCi0gICAgICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBleHByLnR5cGUgPT09
IFN5bnRheC5JZGVudGlmaWVyICYmIGlzUmVzdHJpY3RlZFdvcmQoZXhwci5uYW1lKSkgewotICAg
ICAgICAgICAgICAgICAgICB0b2xlcmF0ZUVycm9yKE1lc3NhZ2VzLlN0cmljdExIU1Bvc3RmaXgp
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICghaXNBc3NpZ25tZW50
VGFyZ2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRvbGVyYXRlRXJyb3IoTWVzc2FnZXMuSW52
YWxpZExIU0luQXNzaWdubWVudCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOwotCi0gICAg
ICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsKLSAgICAgICAgICAgICAgICBleHByID0gbmV3IFdy
YXBwaW5nTm9kZShzdGFydFRva2VuKS5maW5pc2hQb3N0Zml4RXhwcmVzc2lvbih0b2tlbi52YWx1
ZSwgZXhwcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZXhw
cjsKLSAgICB9Ci0KLSAgICAvLyBFQ01BLTI2MiAxMi41IFVuYXJ5IE9wZXJhdG9ycwotCi0gICAg
ZnVuY3Rpb24gcGFyc2VVbmFyeUV4cHJlc3Npb24oKSB7Ci0gICAgICAgIHZhciB0b2tlbiwgZXhw
ciwgc3RhcnRUb2tlbjsKLQotICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLlB1
bmN0dWF0b3IgJiYgbG9va2FoZWFkLnR5cGUgIT09IFRva2VuLktleXdvcmQpIHsKLSAgICAgICAg
ICAgIGV4cHIgPSBwYXJzZVBvc3RmaXhFeHByZXNzaW9uKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAo
bWF0Y2goJysrJykgfHwgbWF0Y2goJy0tJykpIHsKLSAgICAgICAgICAgIHN0YXJ0VG9rZW4gPSBs
b29rYWhlYWQ7Ci0gICAgICAgICAgICB0b2tlbiA9IGxleCgpOwotICAgICAgICAgICAgZXhwciA9
IGluaGVyaXRDb3ZlckdyYW1tYXIocGFyc2VVbmFyeUV4cHJlc3Npb24pOwotICAgICAgICAgICAg
Ly8gRUNNQS0yNjIgMTEuNC40LCAxMS40LjUKLSAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgZXhw
ci50eXBlID09PSBTeW50YXguSWRlbnRpZmllciAmJiBpc1Jlc3RyaWN0ZWRXb3JkKGV4cHIubmFt
ZSkpIHsKLSAgICAgICAgICAgICAgICB0b2xlcmF0ZUVycm9yKE1lc3NhZ2VzLlN0cmljdExIU1By
ZWZpeCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghaXNBc3NpZ25tZW50VGFy
Z2V0KSB7Ci0gICAgICAgICAgICAgICAgdG9sZXJhdGVFcnJvcihNZXNzYWdlcy5JbnZhbGlkTEhT
SW5Bc3NpZ25tZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGV4cHIgPSBuZXcgV3Jh
cHBpbmdOb2RlKHN0YXJ0VG9rZW4pLmZpbmlzaFVuYXJ5RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwg
ZXhwcik7Ci0gICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0JpbmRpbmdFbGVtZW50
ID0gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJysnKSB8fCBtYXRjaCgnLScpIHx8
IG1hdGNoKCd+JykgfHwgbWF0Y2goJyEnKSkgewotICAgICAgICAgICAgc3RhcnRUb2tlbiA9IGxv
b2thaGVhZDsKLSAgICAgICAgICAgIHRva2VuID0gbGV4KCk7Ci0gICAgICAgICAgICBleHByID0g
aW5oZXJpdENvdmVyR3JhbW1hcihwYXJzZVVuYXJ5RXhwcmVzc2lvbik7Ci0gICAgICAgICAgICBl
eHByID0gbmV3IFdyYXBwaW5nTm9kZShzdGFydFRva2VuKS5maW5pc2hVbmFyeUV4cHJlc3Npb24o
dG9rZW4udmFsdWUsIGV4cHIpOwotICAgICAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gaXNC
aW5kaW5nRWxlbWVudCA9IGZhbHNlOwotICAgICAgICB9IGVsc2UgaWYgKG1hdGNoS2V5d29yZCgn
ZGVsZXRlJykgfHwgbWF0Y2hLZXl3b3JkKCd2b2lkJykgfHwgbWF0Y2hLZXl3b3JkKCd0eXBlb2Yn
KSkgewotICAgICAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKLSAgICAgICAgICAgIHRv
a2VuID0gbGV4KCk7Ci0gICAgICAgICAgICBleHByID0gaW5oZXJpdENvdmVyR3JhbW1hcihwYXJz
ZVVuYXJ5RXhwcmVzc2lvbik7Ci0gICAgICAgICAgICBleHByID0gbmV3IFdyYXBwaW5nTm9kZShz
dGFydFRva2VuKS5maW5pc2hVbmFyeUV4cHJlc3Npb24odG9rZW4udmFsdWUsIGV4cHIpOwotICAg
ICAgICAgICAgaWYgKHN0cmljdCAmJiBleHByLm9wZXJhdG9yID09PSAnZGVsZXRlJyAmJiBleHBy
LmFyZ3VtZW50LnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICAgICAg
dG9sZXJhdGVFcnJvcihNZXNzYWdlcy5TdHJpY3REZWxldGUpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZXhwciA9IHBhcnNlUG9zdGZpeEV4cHJlc3Np
b24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBleHByOwotICAgIH0KLQotICAgIGZ1
bmN0aW9uIGJpbmFyeVByZWNlZGVuY2UodG9rZW4sIGFsbG93SW4pIHsKLSAgICAgICAgdmFyIHBy
ZWMgPSAwOwotCi0gICAgICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yICYm
IHRva2VuLnR5cGUgIT09IFRva2VuLktleXdvcmQpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoICh0b2tlbi52YWx1ZSkgewotICAgICAgICBjYXNl
ICd8fCc6Ci0gICAgICAgICAgICBwcmVjID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGNhc2UgJyYmJzoKLSAgICAgICAgICAgIHByZWMgPSAyOwotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgY2FzZSAnfCc6Ci0gICAgICAgICAgICBwcmVjID0gMzsKLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIGNhc2UgJ14nOgotICAgICAgICAgICAgcHJlYyA9IDQ7Ci0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlICcmJzoKLSAgICAgICAgICAgIHByZWMgPSA1
OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSAnPT0nOgotICAgICAgICBjYXNl
ICchPSc6Ci0gICAgICAgIGNhc2UgJz09PSc6Ci0gICAgICAgIGNhc2UgJyE9PSc6Ci0gICAgICAg
ICAgICBwcmVjID0gNjsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgJzwnOgot
ICAgICAgICBjYXNlICc+JzoKLSAgICAgICAgY2FzZSAnPD0nOgotICAgICAgICBjYXNlICc+PSc6
Ci0gICAgICAgIGNhc2UgJ2luc3RhbmNlb2YnOgotICAgICAgICAgICAgcHJlYyA9IDc7Ci0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlICdpbic6Ci0gICAgICAgICAgICBwcmVjID0g
YWxsb3dJbiA/IDcgOiAwOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSAnPDwn
OgotICAgICAgICBjYXNlICc+Pic6Ci0gICAgICAgIGNhc2UgJz4+Pic6Ci0gICAgICAgICAgICBw
cmVjID0gODsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgJysnOgotICAgICAg
ICBjYXNlICctJzoKLSAgICAgICAgICAgIHByZWMgPSA5OwotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgY2FzZSAnKic6Ci0gICAgICAgIGNhc2UgJy8nOgotICAgICAgICBjYXNlICclJzoK
LSAgICAgICAgICAgIHByZWMgPSAxMTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBw
cmVjOwotICAgIH0KLQotICAgIC8vIEVDTUEtMjYyIDEyLjYgTXVsdGlwbGljYXRpdmUgT3BlcmF0
b3JzCi0gICAgLy8gRUNNQS0yNjIgMTIuNyBBZGRpdGl2ZSBPcGVyYXRvcnMKLSAgICAvLyBFQ01B
LTI2MiAxMi44IEJpdHdpc2UgU2hpZnQgT3BlcmF0b3JzCi0gICAgLy8gRUNNQS0yNjIgMTIuOSBS
ZWxhdGlvbmFsIE9wZXJhdG9ycwotICAgIC8vIEVDTUEtMjYyIDEyLjEwIEVxdWFsaXR5IE9wZXJh
dG9ycwotICAgIC8vIEVDTUEtMjYyIDEyLjExIEJpbmFyeSBCaXR3aXNlIE9wZXJhdG9ycwotICAg
IC8vIEVDTUEtMjYyIDEyLjEyIEJpbmFyeSBMb2dpY2FsIE9wZXJhdG9ycwotCi0gICAgZnVuY3Rp
b24gcGFyc2VCaW5hcnlFeHByZXNzaW9uKCkgewotICAgICAgICB2YXIgbWFya2VyLCBtYXJrZXJz
LCBleHByLCB0b2tlbiwgcHJlYywgc3RhY2ssIHJpZ2h0LCBvcGVyYXRvciwgbGVmdCwgaTsKLQot
ICAgICAgICBtYXJrZXIgPSBsb29rYWhlYWQ7Ci0gICAgICAgIGxlZnQgPSBpbmhlcml0Q292ZXJH
cmFtbWFyKHBhcnNlVW5hcnlFeHByZXNzaW9uKTsKLQotICAgICAgICB0b2tlbiA9IGxvb2thaGVh
ZDsKLSAgICAgICAgcHJlYyA9IGJpbmFyeVByZWNlZGVuY2UodG9rZW4sIHN0YXRlLmFsbG93SW4p
OwotICAgICAgICBpZiAocHJlYyA9PT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIGxlZnQ7Ci0g
ICAgICAgIH0KLSAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gaXNCaW5kaW5nRWxlbWVudCA9
IGZhbHNlOwotICAgICAgICB0b2tlbi5wcmVjID0gcHJlYzsKLSAgICAgICAgbGV4KCk7Ci0KLSAg
ICAgICAgbWFya2VycyA9IFttYXJrZXIsIGxvb2thaGVhZF07Ci0gICAgICAgIHJpZ2h0ID0gaXNv
bGF0ZUNvdmVyR3JhbW1hcihwYXJzZVVuYXJ5RXhwcmVzc2lvbik7Ci0KLSAgICAgICAgc3RhY2sg
PSBbbGVmdCwgdG9rZW4sIHJpZ2h0XTsKLQotICAgICAgICB3aGlsZSAoKHByZWMgPSBiaW5hcnlQ
cmVjZWRlbmNlKGxvb2thaGVhZCwgc3RhdGUuYWxsb3dJbikpID4gMCkgewotCi0gICAgICAgICAg
ICAvLyBSZWR1Y2U6IG1ha2UgYSBiaW5hcnkgZXhwcmVzc2lvbiBmcm9tIHRoZSB0aHJlZSB0b3Bt
b3N0IGVudHJpZXMuCi0gICAgICAgICAgICB3aGlsZSAoKHN0YWNrLmxlbmd0aCA+IDIpICYmIChw
cmVjIDw9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDJdLnByZWMpKSB7Ci0gICAgICAgICAgICAgICAg
cmlnaHQgPSBzdGFjay5wb3AoKTsKLSAgICAgICAgICAgICAgICBvcGVyYXRvciA9IHN0YWNrLnBv
cCgpLnZhbHVlOwotICAgICAgICAgICAgICAgIGxlZnQgPSBzdGFjay5wb3AoKTsKLSAgICAgICAg
ICAgICAgICBtYXJrZXJzLnBvcCgpOwotICAgICAgICAgICAgICAgIGV4cHIgPSBuZXcgV3JhcHBp
bmdOb2RlKG1hcmtlcnNbbWFya2Vycy5sZW5ndGggLSAxXSkuZmluaXNoQmluYXJ5RXhwcmVzc2lv
bihvcGVyYXRvciwgbGVmdCwgcmlnaHQpOwotICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goZXhw
cik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFNoaWZ0LgotICAgICAgICAgICAg
dG9rZW4gPSBsZXgoKTsKLSAgICAgICAgICAgIHRva2VuLnByZWMgPSBwcmVjOwotICAgICAgICAg
ICAgc3RhY2sucHVzaCh0b2tlbik7Ci0gICAgICAgICAgICBtYXJrZXJzLnB1c2gobG9va2FoZWFk
KTsKLSAgICAgICAgICAgIGV4cHIgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlVW5hcnlFeHBy
ZXNzaW9uKTsKLSAgICAgICAgICAgIHN0YWNrLnB1c2goZXhwcik7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBGaW5hbCByZWR1Y2UgdG8gY2xlYW4tdXAgdGhlIHN0YWNrLgotICAgICAgICBpID0g
c3RhY2subGVuZ3RoIC0gMTsKLSAgICAgICAgZXhwciA9IHN0YWNrW2ldOwotICAgICAgICBtYXJr
ZXJzLnBvcCgpOwotICAgICAgICB3aGlsZSAoaSA+IDEpIHsKLSAgICAgICAgICAgIGV4cHIgPSBu
ZXcgV3JhcHBpbmdOb2RlKG1hcmtlcnMucG9wKCkpLmZpbmlzaEJpbmFyeUV4cHJlc3Npb24oc3Rh
Y2tbaSAtIDFdLnZhbHVlLCBzdGFja1tpIC0gMl0sIGV4cHIpOwotICAgICAgICAgICAgaSAtPSAy
OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGV4cHI7Ci0gICAgfQotCi0KLSAgICAvLyBF
Q01BLTI2MiAxMi4xMyBDb25kaXRpb25hbCBPcGVyYXRvcgotCi0gICAgZnVuY3Rpb24gcGFyc2VD
b25kaXRpb25hbEV4cHJlc3Npb24oKSB7Ci0gICAgICAgIHZhciBleHByLCBwcmV2aW91c0FsbG93
SW4sIGNvbnNlcXVlbnQsIGFsdGVybmF0ZSwgc3RhcnRUb2tlbjsKLQotICAgICAgICBzdGFydFRv
a2VuID0gbG9va2FoZWFkOwotCi0gICAgICAgIGV4cHIgPSBpbmhlcml0Q292ZXJHcmFtbWFyKHBh
cnNlQmluYXJ5RXhwcmVzc2lvbik7Ci0gICAgICAgIGlmIChtYXRjaCgnPycpKSB7Ci0gICAgICAg
ICAgICBsZXgoKTsKLSAgICAgICAgICAgIHByZXZpb3VzQWxsb3dJbiA9IHN0YXRlLmFsbG93SW47
Ci0gICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gdHJ1ZTsKLSAgICAgICAgICAgIGNvbnNlcXVl
bnQgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pOwotICAg
ICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJbjsKLSAgICAgICAgICAgIGV4
cGVjdCgnOicpOwotICAgICAgICAgICAgYWx0ZXJuYXRlID0gaXNvbGF0ZUNvdmVyR3JhbW1hcihw
YXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKLQotICAgICAgICAgICAgZXhwciA9IG5ldyBXcmFw
cGluZ05vZGUoc3RhcnRUb2tlbikuZmluaXNoQ29uZGl0aW9uYWxFeHByZXNzaW9uKGV4cHIsIGNv
bnNlcXVlbnQsIGFsdGVybmF0ZSk7Ci0gICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBp
c0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZXhw
cjsKLSAgICB9Ci0KLSAgICAvLyBFQ01BLTI2MiAxNC4yIEFycm93IEZ1bmN0aW9uIERlZmluaXRp
b25zCi0KLSAgICBmdW5jdGlvbiBwYXJzZUNvbmNpc2VCb2R5KCkgewotICAgICAgICBpZiAobWF0
Y2goJ3snKSkgewotICAgICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50
cygpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNl
QXNzaWdubWVudEV4cHJlc3Npb24pOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIGNoZWNrUGF0dGVy
blBhcmFtKG9wdGlvbnMsIHBhcmFtKSB7Ci0gICAgICAgIHZhciBpOwotICAgICAgICBzd2l0Y2gg
KHBhcmFtLnR5cGUpIHsKLSAgICAgICAgY2FzZSBTeW50YXguSWRlbnRpZmllcjoKLSAgICAgICAg
ICAgIHZhbGlkYXRlUGFyYW0ob3B0aW9ucywgcGFyYW0sIHBhcmFtLm5hbWUpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU3ludGF4LlJlc3RFbGVtZW50OgotICAgICAgICAgICAg
Y2hlY2tQYXR0ZXJuUGFyYW0ob3B0aW9ucywgcGFyYW0uYXJndW1lbnQpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgU3ludGF4LkFzc2lnbm1lbnRQYXR0ZXJuOgotICAgICAgICAg
ICAgY2hlY2tQYXR0ZXJuUGFyYW0ob3B0aW9ucywgcGFyYW0ubGVmdCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBTeW50YXguQXJyYXlQYXR0ZXJuOgotICAgICAgICAgICAgZm9y
IChpID0gMDsgaSA8IHBhcmFtLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKHBhcmFtLmVsZW1lbnRzW2ldICE9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGNoZWNrUGF0dGVyblBhcmFtKG9wdGlvbnMsIHBhcmFtLmVsZW1lbnRzW2ldKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBTeW50YXguWWllbGRFeHByZXNzaW9uOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBhc3NlcnQocGFyYW0udHlwZSA9PT0gU3ludGF4Lk9iamVjdFBh
dHRlcm4sICdJbnZhbGlkIHR5cGUnKTsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXJh
bS5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgY2hlY2tQYXR0ZXJu
UGFyYW0ob3B0aW9ucywgcGFyYW0ucHJvcGVydGllc1tpXS52YWx1ZSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBmdW5jdGlvbiByZWlu
dGVycHJldEFzQ292ZXJGb3JtYWxzTGlzdChleHByKSB7Ci0gICAgICAgIHZhciBpLCBsZW4sIHBh
cmFtLCBwYXJhbXMsIGRlZmF1bHRzLCBkZWZhdWx0Q291bnQsIG9wdGlvbnMsIHRva2VuOwotCi0g
ICAgICAgIGRlZmF1bHRzID0gW107Ci0gICAgICAgIGRlZmF1bHRDb3VudCA9IDA7Ci0gICAgICAg
IHBhcmFtcyA9IFtleHByXTsKLQotICAgICAgICBzd2l0Y2ggKGV4cHIudHlwZSkgewotICAgICAg
ICBjYXNlIFN5bnRheC5JZGVudGlmaWVyOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgUGxhY2VIb2xkZXJzLkFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXI6Ci0gICAgICAgICAgICBw
YXJhbXMgPSBleHByLnBhcmFtczsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBvcHRpb25z
ID0gewotICAgICAgICAgICAgcGFyYW1TZXQ6IHt9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZm9y
IChpID0gMCwgbGVuID0gcGFyYW1zLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7Ci0gICAgICAg
ICAgICBwYXJhbSA9IHBhcmFtc1tpXTsKLSAgICAgICAgICAgIHN3aXRjaCAocGFyYW0udHlwZSkg
ewotICAgICAgICAgICAgY2FzZSBTeW50YXguQXNzaWdubWVudFBhdHRlcm46Ci0gICAgICAgICAg
ICAgICAgcGFyYW1zW2ldID0gcGFyYW0ubGVmdDsKLSAgICAgICAgICAgICAgICBpZiAocGFyYW0u
cmlnaHQudHlwZSA9PT0gU3ludGF4LllpZWxkRXhwcmVzc2lvbikgewotICAgICAgICAgICAgICAg
ICAgICBpZiAocGFyYW0ucmlnaHQuYXJndW1lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHRocm93VW5leHBlY3RlZFRva2VuKGxvb2thaGVhZCk7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgcGFyYW0ucmlnaHQudHlwZSA9IFN5bnRheC5JZGVudGlmaWVy
OwotICAgICAgICAgICAgICAgICAgICBwYXJhbS5yaWdodC5uYW1lID0gJ3lpZWxkJzsKLSAgICAg
ICAgICAgICAgICAgICAgZGVsZXRlIHBhcmFtLnJpZ2h0LmFyZ3VtZW50OwotICAgICAgICAgICAg
ICAgICAgICBkZWxldGUgcGFyYW0ucmlnaHQuZGVsZWdhdGU7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGRlZmF1bHRzLnB1c2gocGFyYW0ucmlnaHQpOwotICAgICAgICAgICAg
ICAgICsrZGVmYXVsdENvdW50OwotICAgICAgICAgICAgICAgIGNoZWNrUGF0dGVyblBhcmFtKG9w
dGlvbnMsIHBhcmFtLmxlZnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBjaGVja1BhdHRlcm5QYXJhbShvcHRpb25zLCBwYXJh
bSk7Ci0gICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gcGFyYW07Ci0gICAgICAgICAgICAgICAg
ZGVmYXVsdHMucHVzaChudWxsKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzdHJpY3QgfHwgIXN0YXRlLmFsbG93WWllbGQp
IHsKLSAgICAgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHBhcmFtcy5sZW5ndGg7IGkgPCBsZW47
IGkgKz0gMSkgewotICAgICAgICAgICAgICAgIHBhcmFtID0gcGFyYW1zW2ldOwotICAgICAgICAg
ICAgICAgIGlmIChwYXJhbS50eXBlID09PSBTeW50YXguWWllbGRFeHByZXNzaW9uKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKGxvb2thaGVhZCk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG9wdGlv
bnMubWVzc2FnZSA9PT0gTWVzc2FnZXMuU3RyaWN0UGFyYW1EdXBlKSB7Ci0gICAgICAgICAgICB0
b2tlbiA9IHN0cmljdCA/IG9wdGlvbnMuc3RyaWN0ZWQgOiBvcHRpb25zLmZpcnN0UmVzdHJpY3Rl
ZDsKLSAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKHRva2VuLCBvcHRpb25zLm1lc3Nh
Z2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRlZmF1bHRDb3VudCA9PT0gMCkgewotICAg
ICAgICAgICAgZGVmYXVsdHMgPSBbXTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB7Ci0g
ICAgICAgICAgICBwYXJhbXM6IHBhcmFtcywKLSAgICAgICAgICAgIGRlZmF1bHRzOiBkZWZhdWx0
cywKLSAgICAgICAgICAgIHN0cmljdGVkOiBvcHRpb25zLnN0cmljdGVkLAotICAgICAgICAgICAg
Zmlyc3RSZXN0cmljdGVkOiBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCwKLSAgICAgICAgICAgIG1l
c3NhZ2U6IG9wdGlvbnMubWVzc2FnZQotICAgICAgICB9OwotICAgIH0KLQotICAgIGZ1bmN0aW9u
IHBhcnNlQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24ob3B0aW9ucywgbm9kZSkgewotICAgICAgICB2
YXIgcHJldmlvdXNTdHJpY3QsIHByZXZpb3VzQWxsb3dZaWVsZCwgYm9keTsKLQotICAgICAgICBp
ZiAoaGFzTGluZVRlcm1pbmF0b3IpIHsKLSAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRv
a2VuKGxvb2thaGVhZCk7Ci0gICAgICAgIH0KLSAgICAgICAgZXhwZWN0KCc9PicpOwotCi0gICAg
ICAgIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0OwotICAgICAgICBwcmV2aW91c0FsbG93WWllbGQg
PSBzdGF0ZS5hbGxvd1lpZWxkOwotICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gdHJ1ZTsKLQot
ICAgICAgICBib2R5ID0gcGFyc2VDb25jaXNlQm9keSgpOwotCi0gICAgICAgIGlmIChzdHJpY3Qg
JiYgb3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQpIHsKLSAgICAgICAgICAgIHRocm93VW5leHBlY3Rl
ZFRva2VuKG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkLCBvcHRpb25zLm1lc3NhZ2UpOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChzdHJpY3QgJiYgb3B0aW9ucy5zdHJpY3RlZCkgewotICAgICAgICAg
ICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4ob3B0aW9ucy5zdHJpY3RlZCwgb3B0aW9ucy5tZXNz
YWdlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0OwotICAg
ICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxkOwotCi0gICAgICAgIHJl
dHVybiBub2RlLmZpbmlzaEFycm93RnVuY3Rpb25FeHByZXNzaW9uKG9wdGlvbnMucGFyYW1zLCBv
cHRpb25zLmRlZmF1bHRzLCBib2R5LCBib2R5LnR5cGUgIT09IFN5bnRheC5CbG9ja1N0YXRlbWVu
dCk7Ci0gICAgfQotCi0gICAgLy8gRUNNQS0yNjIgMTQuNCBZaWVsZCBleHByZXNzaW9uCi0KLSAg
ICBmdW5jdGlvbiBwYXJzZVlpZWxkRXhwcmVzc2lvbigpIHsKLSAgICAgICAgdmFyIGFyZ3VtZW50
LCBleHByLCBkZWxlZ2F0ZSwgcHJldmlvdXNBbGxvd1lpZWxkOwotCi0gICAgICAgIGFyZ3VtZW50
ID0gbnVsbDsKLSAgICAgICAgZXhwciA9IG5ldyBOb2RlKCk7Ci0KLSAgICAgICAgZXhwZWN0S2V5
d29yZCgneWllbGQnKTsKLQotICAgICAgICBpZiAoIWhhc0xpbmVUZXJtaW5hdG9yKSB7Ci0gICAg
ICAgICAgICBwcmV2aW91c0FsbG93WWllbGQgPSBzdGF0ZS5hbGxvd1lpZWxkOwotICAgICAgICAg
ICAgc3RhdGUuYWxsb3dZaWVsZCA9IGZhbHNlOwotICAgICAgICAgICAgZGVsZWdhdGUgPSBtYXRj
aCgnKicpOwotICAgICAgICAgICAgaWYgKGRlbGVnYXRlKSB7Ci0gICAgICAgICAgICAgICAgbGV4
KCk7Ci0gICAgICAgICAgICAgICAgYXJndW1lbnQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9u
KCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICghbWF0Y2goJzsn
KSAmJiAhbWF0Y2goJ30nKSAmJiAhbWF0Y2goJyknKSAmJiBsb29rYWhlYWQudHlwZSAhPT0gVG9r
ZW4uRU9GKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50ID0gcGFyc2VBc3NpZ25tZW50
RXhwcmVzc2lvbigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHN0YXRlLmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7Ci0gICAgICAgIH0KLQot
ICAgICAgICByZXR1cm4gZXhwci5maW5pc2hZaWVsZEV4cHJlc3Npb24oYXJndW1lbnQsIGRlbGVn
YXRlKTsKLSAgICB9Ci0KLSAgICAvLyBFQ01BLTI2MiAxMi4xNCBBc3NpZ25tZW50IE9wZXJhdG9y
cwotCi0gICAgZnVuY3Rpb24gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpIHsKLSAgICAgICAg
dmFyIHRva2VuLCBleHByLCByaWdodCwgbGlzdCwgc3RhcnRUb2tlbjsKLQotICAgICAgICBzdGFy
dFRva2VuID0gbG9va2FoZWFkOwotICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKLQotICAgICAg
ICBpZiAoIXN0YXRlLmFsbG93WWllbGQgJiYgbWF0Y2hLZXl3b3JkKCd5aWVsZCcpKSB7Ci0gICAg
ICAgICAgICByZXR1cm4gcGFyc2VZaWVsZEV4cHJlc3Npb24oKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGV4cHIgPSBwYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbigpOwotCi0gICAgICAgIGlmIChl
eHByLnR5cGUgPT09IFBsYWNlSG9sZGVycy5BcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVyIHx8IG1h
dGNoKCc9PicpKSB7Ci0gICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0JpbmRpbmdF
bGVtZW50ID0gZmFsc2U7Ci0gICAgICAgICAgICBsaXN0ID0gcmVpbnRlcnByZXRBc0NvdmVyRm9y
bWFsc0xpc3QoZXhwcik7Ci0KLSAgICAgICAgICAgIGlmIChsaXN0KSB7Ci0gICAgICAgICAgICAg
ICAgZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gbnVsbDsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gcGFyc2VBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbihsaXN0LCBuZXcgV3JhcHBpbmdO
b2RlKHN0YXJ0VG9rZW4pKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGV4
cHI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobWF0Y2hBc3NpZ24oKSkgewotICAgICAgICAg
ICAgaWYgKCFpc0Fzc2lnbm1lbnRUYXJnZXQpIHsKLSAgICAgICAgICAgICAgICB0b2xlcmF0ZUVy
cm9yKE1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAvLyBFQ01BLTI2MiAxMi4xLjEKLSAgICAgICAgICAgIGlmIChzdHJpY3QgJiYg
ZXhwci50eXBlID09PSBTeW50YXguSWRlbnRpZmllcikgewotICAgICAgICAgICAgICAgIGlmIChp
c1Jlc3RyaWN0ZWRXb3JkKGV4cHIubmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdG9sZXJh
dGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIE1lc3NhZ2VzLlN0cmljdExIU0Fzc2lnbm1lbnQpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoaXNTdHJpY3RNb2RlUmVzZXJ2
ZWRXb3JkKGV4cHIubmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdG9sZXJhdGVVbmV4cGVj
dGVkVG9rZW4odG9rZW4sIE1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIW1hdGNoKCc9JykpIHsK
LSAgICAgICAgICAgICAgICBpc0Fzc2lnbm1lbnRUYXJnZXQgPSBpc0JpbmRpbmdFbGVtZW50ID0g
ZmFsc2U7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0
RXhwcmVzc2lvbkFzUGF0dGVybihleHByKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
dG9rZW4gPSBsZXgoKTsKLSAgICAgICAgICAgIHJpZ2h0ID0gaXNvbGF0ZUNvdmVyR3JhbW1hcihw
YXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKLSAgICAgICAgICAgIGV4cHIgPSBuZXcgV3JhcHBp
bmdOb2RlKHN0YXJ0VG9rZW4pLmZpbmlzaEFzc2lnbm1lbnRFeHByZXNzaW9uKHRva2VuLnZhbHVl
LCBleHByLCByaWdodCk7Ci0gICAgICAgICAgICBmaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJy
b3IgPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGV4cHI7Ci0gICAgfQotCi0g
ICAgLy8gRUNNQS0yNjIgMTIuMTUgQ29tbWEgT3BlcmF0b3IKLQotICAgIGZ1bmN0aW9uIHBhcnNl
RXhwcmVzc2lvbigpIHsKLSAgICAgICAgdmFyIGV4cHIsIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQs
IGV4cHJlc3Npb25zOwotCi0gICAgICAgIGV4cHIgPSBpc29sYXRlQ292ZXJHcmFtbWFyKHBhcnNl
QXNzaWdubWVudEV4cHJlc3Npb24pOwotCi0gICAgICAgIGlmIChtYXRjaCgnLCcpKSB7Ci0gICAg
ICAgICAgICBleHByZXNzaW9ucyA9IFtleHByXTsKLQotICAgICAgICAgICAgd2hpbGUgKHN0YXJ0
SW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1hdGNoKCcsJykpIHsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGxleCgpOwotICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2goaXNvbGF0ZUNvdmVy
R3JhbW1hcihwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGV4cHIgPSBuZXcgV3JhcHBpbmdOb2RlKHN0YXJ0VG9rZW4pLmZpbmlzaFNlcXVl
bmNlRXhwcmVzc2lvbihleHByZXNzaW9ucyk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4g
ZXhwcjsKLSAgICB9Ci0KLSAgICAvLyBFQ01BLTI2MiAxMy4yIEJsb2NrCi0KLSAgICBmdW5jdGlv
biBwYXJzZVN0YXRlbWVudExpc3RJdGVtKCkgewotICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUg
PT09IFRva2VuLktleXdvcmQpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobG9va2FoZWFkLnZhbHVl
KSB7Ci0gICAgICAgICAgICBjYXNlICdleHBvcnQnOgotICAgICAgICAgICAgICAgIGlmIChzdGF0
ZS5zb3VyY2VUeXBlICE9PSAnbW9kdWxlJykgewotICAgICAgICAgICAgICAgICAgICB0b2xlcmF0
ZVVuZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQsIE1lc3NhZ2VzLklsbGVnYWxFeHBvcnREZWNsYXJh
dGlvbik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUV4
cG9ydERlY2xhcmF0aW9uKCk7Ci0gICAgICAgICAgICBjYXNlICdpbXBvcnQnOgotICAgICAgICAg
ICAgICAgIGlmIChzdGF0ZS5zb3VyY2VUeXBlICE9PSAnbW9kdWxlJykgewotICAgICAgICAgICAg
ICAgICAgICB0b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQsIE1lc3NhZ2VzLklsbGVn
YWxJbXBvcnREZWNsYXJhdGlvbik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IHJldHVybiBwYXJzZUltcG9ydERlY2xhcmF0aW9uKCk7Ci0gICAgICAgICAgICBjYXNlICdjb25z
dCc6Ci0gICAgICAgICAgICBjYXNlICdsZXQnOgotICAgICAgICAgICAgICAgIHJldHVybiBwYXJz
ZUxleGljYWxEZWNsYXJhdGlvbih7aW5Gb3I6IGZhbHNlfSk7Ci0gICAgICAgICAgICBjYXNlICdm
dW5jdGlvbic6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlv
bihuZXcgTm9kZSgpKTsKLSAgICAgICAgICAgIGNhc2UgJ2NsYXNzJzoKLSAgICAgICAgICAgICAg
ICByZXR1cm4gcGFyc2VDbGFzc0RlY2xhcmF0aW9uKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICByZXR1cm4gcGFyc2VTdGF0ZW1lbnQoKTsKLSAgICB9Ci0KLSAgICBmdW5j
dGlvbiBwYXJzZVN0YXRlbWVudExpc3QoKSB7Ci0gICAgICAgIHZhciBsaXN0ID0gW107Ci0gICAg
ICAgIHdoaWxlIChzdGFydEluZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICBpZiAobWF0Y2go
J30nKSkgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgbGlzdC5wdXNoKHBhcnNlU3RhdGVtZW50TGlzdEl0ZW0oKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gbGlzdDsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBwYXJzZUJsb2NrKCkgewot
ICAgICAgICB2YXIgYmxvY2ssIG5vZGUgPSBuZXcgTm9kZSgpOwotCi0gICAgICAgIGV4cGVjdCgn
eycpOwotCi0gICAgICAgIGJsb2NrID0gcGFyc2VTdGF0ZW1lbnRMaXN0KCk7Ci0KLSAgICAgICAg
ZXhwZWN0KCd9Jyk7Ci0KLSAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoQmxvY2tTdGF0ZW1lbnQo
YmxvY2spOwotICAgIH0KLQotICAgIC8vIEVDTUEtMjYyIDEzLjMuMiBWYXJpYWJsZSBTdGF0ZW1l
bnQKLQotICAgIGZ1bmN0aW9uIHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKGtpbmQpIHsKLSAgICAg
ICAgdmFyIHRva2VuLCBub2RlID0gbmV3IE5vZGUoKTsKLQotICAgICAgICB0b2tlbiA9IGxleCgp
OwotCi0gICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5LZXl3b3JkICYmIHRva2VuLnZh
bHVlID09PSAneWllbGQnKSB7Ci0gICAgICAgICAgICBpZiAoc3RyaWN0KSB7Ci0gICAgICAgICAg
ICAgICAgdG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIE1lc3NhZ2VzLlN0cmljdFJlc2Vy
dmVkV29yZCk7Ci0gICAgICAgICAgICB9IGlmICghc3RhdGUuYWxsb3dZaWVsZCkgewotICAgICAg
ICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKHRva2VuKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5JZGVudGlmaWVyKSB7Ci0gICAg
ICAgICAgICBpZiAoc3RyaWN0ICYmIHRva2VuLnR5cGUgPT09IFRva2VuLktleXdvcmQgJiYgaXNT
dHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkgewotICAgICAgICAgICAgICAgIHRv
bGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuLCBNZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQp
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RyaWN0IHx8IHRv
a2VuLnZhbHVlICE9PSAnbGV0JyB8fCBraW5kICE9PSAndmFyJykgewotICAgICAgICAgICAgICAg
ICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbik7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnNvdXJjZVR5cGUgPT09ICdtb2R1
bGUnICYmIHRva2VuLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIgJiYgdG9rZW4udmFsdWUgPT09
ICdhd2FpdCcpIHsKLSAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBub2RlLmZpbmlzaElkZW50aWZpZXIodG9rZW4u
dmFsdWUpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihv
cHRpb25zKSB7Ci0gICAgICAgIHZhciBpbml0ID0gbnVsbCwgaWQsIG5vZGUgPSBuZXcgTm9kZSgp
LCBwYXJhbXMgPSBbXTsKLQotICAgICAgICBpZCA9IHBhcnNlUGF0dGVybihwYXJhbXMsICd2YXIn
KTsKLQotICAgICAgICAvLyBFQ01BLTI2MiAxMi4yLjEKLSAgICAgICAgaWYgKHN0cmljdCAmJiBp
c1Jlc3RyaWN0ZWRXb3JkKGlkLm5hbWUpKSB7Ci0gICAgICAgICAgICB0b2xlcmF0ZUVycm9yKE1l
c3NhZ2VzLlN0cmljdFZhck5hbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1hdGNoKCc9
JykpIHsKLSAgICAgICAgICAgIGxleCgpOwotICAgICAgICAgICAgaW5pdCA9IGlzb2xhdGVDb3Zl
ckdyYW1tYXIocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7Ci0gICAgICAgIH0gZWxzZSBpZiAo
aWQudHlwZSAhPT0gU3ludGF4LklkZW50aWZpZXIgJiYgIW9wdGlvbnMuaW5Gb3IpIHsKLSAgICAg
ICAgICAgIGV4cGVjdCgnPScpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG5vZGUuZmlu
aXNoVmFyaWFibGVEZWNsYXJhdG9yKGlkLCBpbml0KTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBw
YXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KG9wdGlvbnMpIHsKLSAgICAgICAgdmFyIGxpc3Qg
PSBbXTsKLQotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBsaXN0LnB1c2gocGFyc2VWYXJpYWJs
ZURlY2xhcmF0aW9uKHsgaW5Gb3I6IG9wdGlvbnMuaW5Gb3IgfSkpOwotICAgICAgICAgICAgaWYg
KCFtYXRjaCgnLCcpKSB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgfSB3aGlsZSAoc3RhcnRJbmRleCA8IGxlbmd0aCk7
Ci0KLSAgICAgICAgcmV0dXJuIGxpc3Q7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VWYXJp
YWJsZVN0YXRlbWVudChub2RlKSB7Ci0gICAgICAgIHZhciBkZWNsYXJhdGlvbnM7Ci0KLSAgICAg
ICAgZXhwZWN0S2V5d29yZCgndmFyJyk7Ci0KLSAgICAgICAgZGVjbGFyYXRpb25zID0gcGFyc2VW
YXJpYWJsZURlY2xhcmF0aW9uTGlzdCh7IGluRm9yOiBmYWxzZSB9KTsKLQotICAgICAgICBjb25z
dW1lU2VtaWNvbG9uKCk7Ci0KLSAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoVmFyaWFibGVEZWNs
YXJhdGlvbihkZWNsYXJhdGlvbnMpOwotICAgIH0KLQotICAgIC8vIEVDTUEtMjYyIDEzLjMuMSBM
ZXQgYW5kIENvbnN0IERlY2xhcmF0aW9ucwotCi0gICAgZnVuY3Rpb24gcGFyc2VMZXhpY2FsQmlu
ZGluZyhraW5kLCBvcHRpb25zKSB7Ci0gICAgICAgIHZhciBpbml0ID0gbnVsbCwgaWQsIG5vZGUg
PSBuZXcgTm9kZSgpLCBwYXJhbXMgPSBbXTsKLQotICAgICAgICBpZCA9IHBhcnNlUGF0dGVybihw
YXJhbXMsIGtpbmQpOwotCi0gICAgICAgIC8vIEVDTUEtMjYyIDEyLjIuMQotICAgICAgICBpZiAo
c3RyaWN0ICYmIGlkLnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyICYmIGlzUmVzdHJpY3RlZFdv
cmQoaWQubmFtZSkpIHsKLSAgICAgICAgICAgIHRvbGVyYXRlRXJyb3IoTWVzc2FnZXMuU3RyaWN0
VmFyTmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoa2luZCA9PT0gJ2NvbnN0Jykgewot
ICAgICAgICAgICAgaWYgKCFtYXRjaEtleXdvcmQoJ2luJykgJiYgIW1hdGNoQ29udGV4dHVhbEtl
eXdvcmQoJ29mJykpIHsKLSAgICAgICAgICAgICAgICBleHBlY3QoJz0nKTsKLSAgICAgICAgICAg
ICAgICBpbml0ID0gaXNvbGF0ZUNvdmVyR3JhbW1hcihwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9u
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICgoIW9wdGlvbnMuaW5Gb3IgJiYg
aWQudHlwZSAhPT0gU3ludGF4LklkZW50aWZpZXIpIHx8IG1hdGNoKCc9JykpIHsKLSAgICAgICAg
ICAgIGV4cGVjdCgnPScpOwotICAgICAgICAgICAgaW5pdCA9IGlzb2xhdGVDb3ZlckdyYW1tYXIo
cGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4g
bm9kZS5maW5pc2hWYXJpYWJsZURlY2xhcmF0b3IoaWQsIGluaXQpOwotICAgIH0KLQotICAgIGZ1
bmN0aW9uIHBhcnNlQmluZGluZ0xpc3Qoa2luZCwgb3B0aW9ucykgewotICAgICAgICB2YXIgbGlz
dCA9IFtdOwotCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGxpc3QucHVzaChwYXJzZUxleGlj
YWxCaW5kaW5nKGtpbmQsIG9wdGlvbnMpKTsKLSAgICAgICAgICAgIGlmICghbWF0Y2goJywnKSkg
ewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGV4
KCk7Ci0gICAgICAgIH0gd2hpbGUgKHN0YXJ0SW5kZXggPCBsZW5ndGgpOwotCi0gICAgICAgIHJl
dHVybiBsaXN0OwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlTGV4aWNhbERlY2xhcmF0aW9u
KG9wdGlvbnMpIHsKLSAgICAgICAgdmFyIGtpbmQsIGRlY2xhcmF0aW9ucywgbm9kZSA9IG5ldyBO
b2RlKCk7Ci0KLSAgICAgICAga2luZCA9IGxleCgpLnZhbHVlOwotICAgICAgICBhc3NlcnQoa2lu
ZCA9PT0gJ2xldCcgfHwga2luZCA9PT0gJ2NvbnN0JywgJ0xleGljYWwgZGVjbGFyYXRpb24gbXVz
dCBiZSBlaXRoZXIgbGV0IG9yIGNvbnN0Jyk7Ci0KLSAgICAgICAgZGVjbGFyYXRpb25zID0gcGFy
c2VCaW5kaW5nTGlzdChraW5kLCBvcHRpb25zKTsKLQotICAgICAgICBjb25zdW1lU2VtaWNvbG9u
KCk7Ci0KLSAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoTGV4aWNhbERlY2xhcmF0aW9uKGRlY2xh
cmF0aW9ucywga2luZCk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VSZXN0RWxlbWVudChw
YXJhbXMpIHsKLSAgICAgICAgdmFyIHBhcmFtLCBub2RlID0gbmV3IE5vZGUoKTsKLQotICAgICAg
ICBsZXgoKTsKLQotICAgICAgICBpZiAobWF0Y2goJ3snKSkgewotICAgICAgICAgICAgdGhyb3dF
cnJvcihNZXNzYWdlcy5PYmplY3RQYXR0ZXJuQXNSZXN0UGFyYW1ldGVyKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHBhcmFtcy5wdXNoKGxvb2thaGVhZCk7Ci0KLSAgICAgICAgcGFyYW0gPSBwYXJz
ZVZhcmlhYmxlSWRlbnRpZmllcigpOwotCi0gICAgICAgIGlmIChtYXRjaCgnPScpKSB7Ci0gICAg
ICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLkRlZmF1bHRSZXN0UGFyYW1ldGVyKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICghbWF0Y2goJyknKSkgewotICAgICAgICAgICAgdGhyb3dFcnJv
cihNZXNzYWdlcy5QYXJhbWV0ZXJBZnRlclJlc3RQYXJhbWV0ZXIpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmV0dXJuIG5vZGUuZmluaXNoUmVzdEVsZW1lbnQocGFyYW0pOwotICAgIH0KLQotICAg
IC8vIEVDTUEtMjYyIDEzLjQgRW1wdHkgU3RhdGVtZW50Ci0KLSAgICBmdW5jdGlvbiBwYXJzZUVt
cHR5U3RhdGVtZW50KG5vZGUpIHsKLSAgICAgICAgZXhwZWN0KCc7Jyk7Ci0gICAgICAgIHJldHVy
biBub2RlLmZpbmlzaEVtcHR5U3RhdGVtZW50KCk7Ci0gICAgfQotCi0gICAgLy8gRUNNQS0yNjIg
MTIuNCBFeHByZXNzaW9uIFN0YXRlbWVudAotCi0gICAgZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9u
U3RhdGVtZW50KG5vZGUpIHsKLSAgICAgICAgdmFyIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oKTsK
LSAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOwotICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hF
eHByZXNzaW9uU3RhdGVtZW50KGV4cHIpOwotICAgIH0KLQotICAgIC8vIEVDTUEtMjYyIDEzLjYg
SWYgc3RhdGVtZW50Ci0KLSAgICBmdW5jdGlvbiBwYXJzZUlmU3RhdGVtZW50KG5vZGUpIHsKLSAg
ICAgICAgdmFyIHRlc3QsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZTsKLQotICAgICAgICBleHBlY3RL
ZXl3b3JkKCdpZicpOwotCi0gICAgICAgIGV4cGVjdCgnKCcpOwotCi0gICAgICAgIHRlc3QgPSBw
YXJzZUV4cHJlc3Npb24oKTsKLQotICAgICAgICBleHBlY3QoJyknKTsKLQotICAgICAgICBjb25z
ZXF1ZW50ID0gcGFyc2VTdGF0ZW1lbnQoKTsKLQotICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdl
bHNlJykpIHsKLSAgICAgICAgICAgIGxleCgpOwotICAgICAgICAgICAgYWx0ZXJuYXRlID0gcGFy
c2VTdGF0ZW1lbnQoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGFsdGVybmF0ZSA9
IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hJZlN0YXRlbWVu
dCh0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpOwotICAgIH0KLQotICAgIC8vIEVDTUEtMjYy
IDEzLjcgSXRlcmF0aW9uIFN0YXRlbWVudHMKLQotICAgIGZ1bmN0aW9uIHBhcnNlRG9XaGlsZVN0
YXRlbWVudChub2RlKSB7Ci0gICAgICAgIHZhciBib2R5LCB0ZXN0LCBvbGRJbkl0ZXJhdGlvbjsK
LQotICAgICAgICBleHBlY3RLZXl3b3JkKCdkbycpOwotCi0gICAgICAgIG9sZEluSXRlcmF0aW9u
ID0gc3RhdGUuaW5JdGVyYXRpb247Ci0gICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gdHJ1ZTsK
LQotICAgICAgICBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTsKLQotICAgICAgICBzdGF0ZS5pbkl0
ZXJhdGlvbiA9IG9sZEluSXRlcmF0aW9uOwotCi0gICAgICAgIGV4cGVjdEtleXdvcmQoJ3doaWxl
Jyk7Ci0KLSAgICAgICAgZXhwZWN0KCcoJyk7Ci0KLSAgICAgICAgdGVzdCA9IHBhcnNlRXhwcmVz
c2lvbigpOwotCi0gICAgICAgIGV4cGVjdCgnKScpOwotCi0gICAgICAgIGlmIChtYXRjaCgnOycp
KSB7Ci0gICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBub2Rl
LmZpbmlzaERvV2hpbGVTdGF0ZW1lbnQoYm9keSwgdGVzdCk7Ci0gICAgfQotCi0gICAgZnVuY3Rp
b24gcGFyc2VXaGlsZVN0YXRlbWVudChub2RlKSB7Ci0gICAgICAgIHZhciB0ZXN0LCBib2R5LCBv
bGRJbkl0ZXJhdGlvbjsKLQotICAgICAgICBleHBlY3RLZXl3b3JkKCd3aGlsZScpOwotCi0gICAg
ICAgIGV4cGVjdCgnKCcpOwotCi0gICAgICAgIHRlc3QgPSBwYXJzZUV4cHJlc3Npb24oKTsKLQot
ICAgICAgICBleHBlY3QoJyknKTsKLQotICAgICAgICBvbGRJbkl0ZXJhdGlvbiA9IHN0YXRlLmlu
SXRlcmF0aW9uOwotICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IHRydWU7Ci0KLSAgICAgICAg
Ym9keSA9IHBhcnNlU3RhdGVtZW50KCk7Ci0KLSAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSBv
bGRJbkl0ZXJhdGlvbjsKLQotICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hXaGlsZVN0YXRlbWVu
dCh0ZXN0LCBib2R5KTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBwYXJzZUZvclN0YXRlbWVudChu
b2RlKSB7Ci0gICAgICAgIHZhciBpbml0LCBmb3JJbiwgaW5pdFNlcSwgaW5pdFN0YXJ0VG9rZW4s
IHRlc3QsIHVwZGF0ZSwgbGVmdCwgcmlnaHQsIGtpbmQsIGRlY2xhcmF0aW9ucywKLSAgICAgICAg
ICAgIGJvZHksIG9sZEluSXRlcmF0aW9uLCBwcmV2aW91c0FsbG93SW4gPSBzdGF0ZS5hbGxvd0lu
OwotCi0gICAgICAgIGluaXQgPSB0ZXN0ID0gdXBkYXRlID0gbnVsbDsKLSAgICAgICAgZm9ySW4g
PSB0cnVlOwotCi0gICAgICAgIGV4cGVjdEtleXdvcmQoJ2ZvcicpOwotCi0gICAgICAgIGV4cGVj
dCgnKCcpOwotCi0gICAgICAgIGlmIChtYXRjaCgnOycpKSB7Ci0gICAgICAgICAgICBsZXgoKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ3ZhcicpKSB7
Ci0gICAgICAgICAgICAgICAgaW5pdCA9IG5ldyBOb2RlKCk7Ci0gICAgICAgICAgICAgICAgbGV4
KCk7Ci0KLSAgICAgICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgZGVjbGFyYXRpb25zID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCh7IGluRm9y
OiB0cnVlIH0pOwotICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93SW4gPSBwcmV2aW91c0FsbG93
SW47Ci0KLSAgICAgICAgICAgICAgICBpZiAoZGVjbGFyYXRpb25zLmxlbmd0aCA9PT0gMSAmJiBt
YXRjaEtleXdvcmQoJ2luJykpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5pdCA9IGluaXQuZmlu
aXNoVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMpOwotICAgICAgICAgICAgICAgICAg
ICBsZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGluaXQ7Ci0gICAgICAgICAgICAg
ICAgICAgIHJpZ2h0ID0gcGFyc2VFeHByZXNzaW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlu
aXQgPSBudWxsOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb25zLmxlbmd0
aCA9PT0gMSAmJiBkZWNsYXJhdGlvbnNbMF0uaW5pdCA9PT0gbnVsbCAmJiBtYXRjaENvbnRleHR1
YWxLZXl3b3JkKCdvZicpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGluaXQgPSBpbml0LmZpbmlz
aFZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zKTsKLSAgICAgICAgICAgICAgICAgICAg
bGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgIGxlZnQgPSBpbml0OwotICAgICAgICAgICAgICAg
ICAgICByaWdodCA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKLSAgICAgICAgICAgICAg
ICAgICAgaW5pdCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIGZvckluID0gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaW5pdCA9IGluaXQu
ZmluaXNoVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMpOwotICAgICAgICAgICAgICAg
ICAgICBleHBlY3QoJzsnKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2Ug
aWYgKG1hdGNoS2V5d29yZCgnY29uc3QnKSB8fCBtYXRjaEtleXdvcmQoJ2xldCcpKSB7Ci0gICAg
ICAgICAgICAgICAgaW5pdCA9IG5ldyBOb2RlKCk7Ci0gICAgICAgICAgICAgICAga2luZCA9IGxl
eCgpLnZhbHVlOwotCi0gICAgICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IGZhbHNlOwotICAg
ICAgICAgICAgICAgIGRlY2xhcmF0aW9ucyA9IHBhcnNlQmluZGluZ0xpc3Qoa2luZCwge2luRm9y
OiB0cnVlfSk7Ci0gICAgICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJ
bjsKLQotICAgICAgICAgICAgICAgIGlmIChkZWNsYXJhdGlvbnMubGVuZ3RoID09PSAxICYmIGRl
Y2xhcmF0aW9uc1swXS5pbml0ID09PSBudWxsICYmIG1hdGNoS2V5d29yZCgnaW4nKSkgewotICAg
ICAgICAgICAgICAgICAgICBpbml0ID0gaW5pdC5maW5pc2hMZXhpY2FsRGVjbGFyYXRpb24oZGVj
bGFyYXRpb25zLCBraW5kKTsKLSAgICAgICAgICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGxlZnQgPSBpbml0OwotICAgICAgICAgICAgICAgICAgICByaWdodCA9IHBhcnNl
RXhwcmVzc2lvbigpOwotICAgICAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9ucy5sZW5ndGggPT09IDEgJiYgZGVjbGFyYXRp
b25zWzBdLmluaXQgPT09IG51bGwgJiYgbWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnb2YnKSkgewot
ICAgICAgICAgICAgICAgICAgICBpbml0ID0gaW5pdC5maW5pc2hMZXhpY2FsRGVjbGFyYXRpb24o
ZGVjbGFyYXRpb25zLCBraW5kKTsKLSAgICAgICAgICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGxlZnQgPSBpbml0OwotICAgICAgICAgICAgICAgICAgICByaWdodCA9IHBh
cnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKLSAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG51
bGw7Ci0gICAgICAgICAgICAgICAgICAgIGZvckluID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOwotICAgICAg
ICAgICAgICAgICAgICBpbml0ID0gaW5pdC5maW5pc2hMZXhpY2FsRGVjbGFyYXRpb24oZGVjbGFy
YXRpb25zLCBraW5kKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIGluaXRTdGFydFRva2VuID0gbG9va2FoZWFkOwotICAgICAgICAgICAg
ICAgIHN0YXRlLmFsbG93SW4gPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBpbml0ID0gaW5oZXJp
dENvdmVyR3JhbW1hcihwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKLSAgICAgICAgICAgICAg
ICBzdGF0ZS5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luOwotCi0gICAgICAgICAgICAgICAgaWYg
KG1hdGNoS2V5d29yZCgnaW4nKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQXNzaWdu
bWVudFRhcmdldCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdG9sZXJhdGVFcnJvcihNZXNz
YWdlcy5JbnZhbGlkTEhTSW5Gb3JJbik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRFeHBy
ZXNzaW9uQXNQYXR0ZXJuKGluaXQpOwotICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gaW5pdDsK
LSAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBwYXJzZUV4cHJlc3Npb24oKTsKLSAgICAgICAg
ICAgICAgICAgICAgaW5pdCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRj
aENvbnRleHR1YWxLZXl3b3JkKCdvZicpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaXNB
c3NpZ25tZW50VGFyZ2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0b2xlcmF0ZUVycm9y
KE1lc3NhZ2VzLkludmFsaWRMSFNJbkZvckxvb3ApOwotICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgIHJlaW50ZXJw
cmV0RXhwcmVzc2lvbkFzUGF0dGVybihpbml0KTsKLSAgICAgICAgICAgICAgICAgICAgbGVmdCA9
IGluaXQ7Ci0gICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVz
c2lvbigpOwotICAgICAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDsKLSAgICAgICAgICAgICAg
ICAgICAgZm9ySW4gPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICBpZiAobWF0Y2goJywnKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaW5p
dFNlcSA9IFtpbml0XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChtYXRjaCgnLCcp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5pdFNlcS5wdXNoKGlzb2xhdGVDb3ZlckdyYW1tYXIocGFyc2VBc3NpZ25t
ZW50RXhwcmVzc2lvbikpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgaW5pdCA9IG5ldyBXcmFwcGluZ05vZGUoaW5pdFN0YXJ0VG9rZW4pLmZpbmlz
aFNlcXVlbmNlRXhwcmVzc2lvbihpbml0U2VxKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICBleHBlY3QoJzsnKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodHlwZW9mIGxlZnQgPT09ICd1bmRlZmlu
ZWQnKSB7Ci0KLSAgICAgICAgICAgIGlmICghbWF0Y2goJzsnKSkgewotICAgICAgICAgICAgICAg
IHRlc3QgPSBwYXJzZUV4cHJlc3Npb24oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGV4
cGVjdCgnOycpOwotCi0gICAgICAgICAgICBpZiAoIW1hdGNoKCcpJykpIHsKLSAgICAgICAgICAg
ICAgICB1cGRhdGUgPSBwYXJzZUV4cHJlc3Npb24oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIGV4cGVjdCgnKScpOwotCi0gICAgICAgIG9sZEluSXRlcmF0aW9uID0gc3Rh
dGUuaW5JdGVyYXRpb247Ci0gICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gdHJ1ZTsKLQotICAg
ICAgICBib2R5ID0gaXNvbGF0ZUNvdmVyR3JhbW1hcihwYXJzZVN0YXRlbWVudCk7Ci0KLSAgICAg
ICAgc3RhdGUuaW5JdGVyYXRpb24gPSBvbGRJbkl0ZXJhdGlvbjsKLQotICAgICAgICByZXR1cm4g
KHR5cGVvZiBsZWZ0ID09PSAndW5kZWZpbmVkJykgPwotICAgICAgICAgICAgICAgIG5vZGUuZmlu
aXNoRm9yU3RhdGVtZW50KGluaXQsIHRlc3QsIHVwZGF0ZSwgYm9keSkgOgotICAgICAgICAgICAg
ICAgIGZvckluID8gbm9kZS5maW5pc2hGb3JJblN0YXRlbWVudChsZWZ0LCByaWdodCwgYm9keSkg
OgotICAgICAgICAgICAgICAgICAgICBub2RlLmZpbmlzaEZvck9mU3RhdGVtZW50KGxlZnQsIHJp
Z2h0LCBib2R5KTsKLSAgICB9Ci0KLSAgICAvLyBFQ01BLTI2MiAxMy44IFRoZSBjb250aW51ZSBz
dGF0ZW1lbnQKLQotICAgIGZ1bmN0aW9uIHBhcnNlQ29udGludWVTdGF0ZW1lbnQobm9kZSkgewot
ICAgICAgICB2YXIgbGFiZWwgPSBudWxsLCBrZXk7Ci0KLSAgICAgICAgZXhwZWN0S2V5d29yZCgn
Y29udGludWUnKTsKLQotICAgICAgICAvLyBPcHRpbWl6ZSB0aGUgbW9zdCBjb21tb24gZm9ybTog
J2NvbnRpbnVlOycuCi0gICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChzdGFydEluZGV4KSA9
PT0gMHgzQikgewotICAgICAgICAgICAgbGV4KCk7Ci0KLSAgICAgICAgICAgIGlmICghc3RhdGUu
aW5JdGVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLklsbGVn
YWxDb250aW51ZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBub2RlLmZp
bmlzaENvbnRpbnVlU3RhdGVtZW50KG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhh
c0xpbmVUZXJtaW5hdG9yKSB7Ci0gICAgICAgICAgICBpZiAoIXN0YXRlLmluSXRlcmF0aW9uKSB7
Ci0gICAgICAgICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5JbGxlZ2FsQ29udGludWUpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hDb250aW51ZVN0
YXRlbWVudChudWxsKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9
PT0gVG9rZW4uSWRlbnRpZmllcikgewotICAgICAgICAgICAgbGFiZWwgPSBwYXJzZVZhcmlhYmxl
SWRlbnRpZmllcigpOwotCi0gICAgICAgICAgICBrZXkgPSAnJCcgKyBsYWJlbC5uYW1lOwotICAg
ICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3RhdGUu
bGFiZWxTZXQsIGtleSkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLlVu
a25vd25MYWJlbCwgbGFiZWwubmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBjb25zdW1lU2VtaWNvbG9uKCk7Ci0KLSAgICAgICAgaWYgKGxhYmVsID09PSBudWxsICYm
ICFzdGF0ZS5pbkl0ZXJhdGlvbikgewotICAgICAgICAgICAgdGhyb3dFcnJvcihNZXNzYWdlcy5J
bGxlZ2FsQ29udGludWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNo
Q29udGludWVTdGF0ZW1lbnQobGFiZWwpOwotICAgIH0KLQotICAgIC8vIEVDTUEtMjYyIDEzLjkg
VGhlIGJyZWFrIHN0YXRlbWVudAotCi0gICAgZnVuY3Rpb24gcGFyc2VCcmVha1N0YXRlbWVudChu
b2RlKSB7Ci0gICAgICAgIHZhciBsYWJlbCA9IG51bGwsIGtleTsKLQotICAgICAgICBleHBlY3RL
ZXl3b3JkKCdicmVhaycpOwotCi0gICAgICAgIC8vIENhdGNoIHRoZSB2ZXJ5IGNvbW1vbiBjYXNl
IGZpcnN0OiBpbW1lZGlhdGVseSBhIHNlbWljb2xvbiAoVSswMDNCKS4KLSAgICAgICAgaWYgKHNv
dXJjZS5jaGFyQ29kZUF0KGxhc3RJbmRleCkgPT09IDB4M0IpIHsKLSAgICAgICAgICAgIGxleCgp
OwotCi0gICAgICAgICAgICBpZiAoIShzdGF0ZS5pbkl0ZXJhdGlvbiB8fCBzdGF0ZS5pblN3aXRj
aCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLklsbGVnYWxCcmVhayk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlzaEJyZWFrU3Rh
dGVtZW50KG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhhc0xpbmVUZXJtaW5hdG9y
KSB7Ci0gICAgICAgICAgICBpZiAoIShzdGF0ZS5pbkl0ZXJhdGlvbiB8fCBzdGF0ZS5pblN3aXRj
aCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLklsbGVnYWxCcmVhayk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlzaEJyZWFrU3Rh
dGVtZW50KG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlID09
PSBUb2tlbi5JZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBsYWJlbCA9IHBhcnNlVmFyaWFibGVJ
ZGVudGlmaWVyKCk7Ci0KLSAgICAgICAgICAgIGtleSA9ICckJyArIGxhYmVsLm5hbWU7Ci0gICAg
ICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzdGF0ZS5s
YWJlbFNldCwga2V5KSkgewotICAgICAgICAgICAgICAgIHRocm93RXJyb3IoTWVzc2FnZXMuVW5r
bm93bkxhYmVsLCBsYWJlbC5uYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIGNvbnN1bWVTZW1pY29sb24oKTsKLQotICAgICAgICBpZiAobGFiZWwgPT09IG51bGwgJiYg
IShzdGF0ZS5pbkl0ZXJhdGlvbiB8fCBzdGF0ZS5pblN3aXRjaCkpIHsKLSAgICAgICAgICAgIHRo
cm93RXJyb3IoTWVzc2FnZXMuSWxsZWdhbEJyZWFrKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJl
dHVybiBub2RlLmZpbmlzaEJyZWFrU3RhdGVtZW50KGxhYmVsKTsKLSAgICB9Ci0KLSAgICAvLyBF
Q01BLTI2MiAxMy4xMCBUaGUgcmV0dXJuIHN0YXRlbWVudAotCi0gICAgZnVuY3Rpb24gcGFyc2VS
ZXR1cm5TdGF0ZW1lbnQobm9kZSkgewotICAgICAgICB2YXIgYXJndW1lbnQgPSBudWxsOwotCi0g
ICAgICAgIGV4cGVjdEtleXdvcmQoJ3JldHVybicpOwotCi0gICAgICAgIGlmICghc3RhdGUuaW5G
dW5jdGlvbkJvZHkpIHsKLSAgICAgICAgICAgIHRvbGVyYXRlRXJyb3IoTWVzc2FnZXMuSWxsZWdh
bFJldHVybik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyAncmV0dXJuJyBmb2xsb3dlZCBieSBh
IHNwYWNlIGFuZCBhbiBpZGVudGlmaWVyIGlzIHZlcnkgY29tbW9uLgotICAgICAgICBpZiAoc291
cmNlLmNoYXJDb2RlQXQobGFzdEluZGV4KSA9PT0gMHgyMCkgewotICAgICAgICAgICAgaWYgKGlz
SWRlbnRpZmllclN0YXJ0KHNvdXJjZS5jaGFyQ29kZUF0KGxhc3RJbmRleCArIDEpKSkgewotICAg
ICAgICAgICAgICAgIGFyZ3VtZW50ID0gcGFyc2VFeHByZXNzaW9uKCk7Ci0gICAgICAgICAgICAg
ICAgY29uc3VtZVNlbWljb2xvbigpOwotICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlz
aFJldHVyblN0YXRlbWVudChhcmd1bWVudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoaGFzTGluZVRlcm1pbmF0b3IpIHsKLSAgICAgICAgICAgIC8vIEhBQ0sKLSAg
ICAgICAgICAgIHJldHVybiBub2RlLmZpbmlzaFJldHVyblN0YXRlbWVudChudWxsKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICghbWF0Y2goJzsnKSkgewotICAgICAgICAgICAgaWYgKCFtYXRj
aCgnfScpICYmIGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5FT0YpIHsKLSAgICAgICAgICAgICAg
ICBhcmd1bWVudCA9IHBhcnNlRXhwcmVzc2lvbigpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOwotCi0gICAgICAgIHJldHVybiBub2RlLmZp
bmlzaFJldHVyblN0YXRlbWVudChhcmd1bWVudCk7Ci0gICAgfQotCi0gICAgLy8gRUNNQS0yNjIg
MTMuMTEgVGhlIHdpdGggc3RhdGVtZW50Ci0KLSAgICBmdW5jdGlvbiBwYXJzZVdpdGhTdGF0ZW1l
bnQobm9kZSkgewotICAgICAgICB2YXIgb2JqZWN0LCBib2R5OwotCi0gICAgICAgIGlmIChzdHJp
Y3QpIHsKLSAgICAgICAgICAgIHRvbGVyYXRlRXJyb3IoTWVzc2FnZXMuU3RyaWN0TW9kZVdpdGgp
OwotICAgICAgICB9Ci0KLSAgICAgICAgZXhwZWN0S2V5d29yZCgnd2l0aCcpOwotCi0gICAgICAg
IGV4cGVjdCgnKCcpOwotCi0gICAgICAgIG9iamVjdCA9IHBhcnNlRXhwcmVzc2lvbigpOwotCi0g
ICAgICAgIGV4cGVjdCgnKScpOwotCi0gICAgICAgIGJvZHkgPSBwYXJzZVN0YXRlbWVudCgpOwot
Ci0gICAgICAgIHJldHVybiBub2RlLmZpbmlzaFdpdGhTdGF0ZW1lbnQob2JqZWN0LCBib2R5KTsK
LSAgICB9Ci0KLSAgICAvLyBFQ01BLTI2MiAxMy4xMiBUaGUgc3dpdGNoIHN0YXRlbWVudAotCi0g
ICAgZnVuY3Rpb24gcGFyc2VTd2l0Y2hDYXNlKCkgewotICAgICAgICB2YXIgdGVzdCwgY29uc2Vx
dWVudCA9IFtdLCBzdGF0ZW1lbnQsIG5vZGUgPSBuZXcgTm9kZSgpOwotCi0gICAgICAgIGlmICht
YXRjaEtleXdvcmQoJ2RlZmF1bHQnKSkgewotICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAgICAg
ICB0ZXN0ID0gbnVsbDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGV4cGVjdEtleXdv
cmQoJ2Nhc2UnKTsKLSAgICAgICAgICAgIHRlc3QgPSBwYXJzZUV4cHJlc3Npb24oKTsKLSAgICAg
ICAgfQotICAgICAgICBleHBlY3QoJzonKTsKLQotICAgICAgICB3aGlsZSAoc3RhcnRJbmRleCA8
IGxlbmd0aCkgewotICAgICAgICAgICAgaWYgKG1hdGNoKCd9JykgfHwgbWF0Y2hLZXl3b3JkKCdk
ZWZhdWx0JykgfHwgbWF0Y2hLZXl3b3JkKCdjYXNlJykpIHsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YXRlbWVudCA9IHBhcnNlU3RhdGVtZW50
TGlzdEl0ZW0oKTsKLSAgICAgICAgICAgIGNvbnNlcXVlbnQucHVzaChzdGF0ZW1lbnQpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoU3dpdGNoQ2FzZSh0ZXN0LCBjb25z
ZXF1ZW50KTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBwYXJzZVN3aXRjaFN0YXRlbWVudChub2Rl
KSB7Ci0gICAgICAgIHZhciBkaXNjcmltaW5hbnQsIGNhc2VzLCBjbGF1c2UsIG9sZEluU3dpdGNo
LCBkZWZhdWx0Rm91bmQ7Ci0KLSAgICAgICAgZXhwZWN0S2V5d29yZCgnc3dpdGNoJyk7Ci0KLSAg
ICAgICAgZXhwZWN0KCcoJyk7Ci0KLSAgICAgICAgZGlzY3JpbWluYW50ID0gcGFyc2VFeHByZXNz
aW9uKCk7Ci0KLSAgICAgICAgZXhwZWN0KCcpJyk7Ci0KLSAgICAgICAgZXhwZWN0KCd7Jyk7Ci0K
LSAgICAgICAgY2FzZXMgPSBbXTsKLQotICAgICAgICBpZiAobWF0Y2goJ30nKSkgewotICAgICAg
ICAgICAgbGV4KCk7Ci0gICAgICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hTd2l0Y2hTdGF0ZW1l
bnQoZGlzY3JpbWluYW50LCBjYXNlcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBvbGRJblN3aXRj
aCA9IHN0YXRlLmluU3dpdGNoOwotICAgICAgICBzdGF0ZS5pblN3aXRjaCA9IHRydWU7Ci0gICAg
ICAgIGRlZmF1bHRGb3VuZCA9IGZhbHNlOwotCi0gICAgICAgIHdoaWxlIChzdGFydEluZGV4IDwg
bGVuZ3RoKSB7Ci0gICAgICAgICAgICBpZiAobWF0Y2goJ30nKSkgewotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2xhdXNlID0gcGFyc2VTd2l0Y2hD
YXNlKCk7Ci0gICAgICAgICAgICBpZiAoY2xhdXNlLnRlc3QgPT09IG51bGwpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoZGVmYXVsdEZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93RXJy
b3IoTWVzc2FnZXMuTXVsdGlwbGVEZWZhdWx0c0luU3dpdGNoKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgZGVmYXVsdEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGNhc2VzLnB1c2goY2xhdXNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRl
LmluU3dpdGNoID0gb2xkSW5Td2l0Y2g7Ci0KLSAgICAgICAgZXhwZWN0KCd9Jyk7Ci0KLSAgICAg
ICAgcmV0dXJuIG5vZGUuZmluaXNoU3dpdGNoU3RhdGVtZW50KGRpc2NyaW1pbmFudCwgY2FzZXMp
OwotICAgIH0KLQotICAgIC8vIEVDTUEtMjYyIDEzLjE0IFRoZSB0aHJvdyBzdGF0ZW1lbnQKLQot
ICAgIGZ1bmN0aW9uIHBhcnNlVGhyb3dTdGF0ZW1lbnQobm9kZSkgewotICAgICAgICB2YXIgYXJn
dW1lbnQ7Ci0KLSAgICAgICAgZXhwZWN0S2V5d29yZCgndGhyb3cnKTsKLQotICAgICAgICBpZiAo
aGFzTGluZVRlcm1pbmF0b3IpIHsKLSAgICAgICAgICAgIHRocm93RXJyb3IoTWVzc2FnZXMuTmV3
bGluZUFmdGVyVGhyb3cpOwotICAgICAgICB9Ci0KLSAgICAgICAgYXJndW1lbnQgPSBwYXJzZUV4
cHJlc3Npb24oKTsKLQotICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7Ci0KLSAgICAgICAgcmV0
dXJuIG5vZGUuZmluaXNoVGhyb3dTdGF0ZW1lbnQoYXJndW1lbnQpOwotICAgIH0KLQotICAgIC8v
IEVDTUEtMjYyIDEzLjE1IFRoZSB0cnkgc3RhdGVtZW50Ci0KLSAgICBmdW5jdGlvbiBwYXJzZUNh
dGNoQ2xhdXNlKCkgewotICAgICAgICB2YXIgcGFyYW0sIHBhcmFtcyA9IFtdLCBwYXJhbU1hcCA9
IHt9LCBrZXksIGksIGJvZHksIG5vZGUgPSBuZXcgTm9kZSgpOwotCi0gICAgICAgIGV4cGVjdEtl
eXdvcmQoJ2NhdGNoJyk7Ci0KLSAgICAgICAgZXhwZWN0KCcoJyk7Ci0gICAgICAgIGlmIChtYXRj
aCgnKScpKSB7Ci0gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW0gPSBwYXJzZVBhdHRlcm4ocGFyYW1zKTsKLSAgICAg
ICAgZm9yIChpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAga2V5
ID0gJyQnICsgcGFyYW1zW2ldLnZhbHVlOwotICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5
cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJhbU1hcCwga2V5KSkgewotICAgICAgICAgICAgICAg
IHRvbGVyYXRlRXJyb3IoTWVzc2FnZXMuRHVwbGljYXRlQmluZGluZywgcGFyYW1zW2ldLnZhbHVl
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBhcmFtTWFwW2tleV0gPSB0cnVlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gRUNNQS0yNjIgMTIuMTQuMQotICAgICAgICBpZiAoc3RyaWN0
ICYmIGlzUmVzdHJpY3RlZFdvcmQocGFyYW0ubmFtZSkpIHsKLSAgICAgICAgICAgIHRvbGVyYXRl
RXJyb3IoTWVzc2FnZXMuU3RyaWN0Q2F0Y2hWYXJpYWJsZSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBleHBlY3QoJyknKTsKLSAgICAgICAgYm9keSA9IHBhcnNlQmxvY2soKTsKLSAgICAgICAgcmV0
dXJuIG5vZGUuZmluaXNoQ2F0Y2hDbGF1c2UocGFyYW0sIGJvZHkpOwotICAgIH0KLQotICAgIGZ1
bmN0aW9uIHBhcnNlVHJ5U3RhdGVtZW50KG5vZGUpIHsKLSAgICAgICAgdmFyIGJsb2NrLCBoYW5k
bGVyID0gbnVsbCwgZmluYWxpemVyID0gbnVsbDsKLQotICAgICAgICBleHBlY3RLZXl3b3JkKCd0
cnknKTsKLQotICAgICAgICBibG9jayA9IHBhcnNlQmxvY2soKTsKLQotICAgICAgICBpZiAobWF0
Y2hLZXl3b3JkKCdjYXRjaCcpKSB7Ci0gICAgICAgICAgICBoYW5kbGVyID0gcGFyc2VDYXRjaENs
YXVzZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnZmluYWxseScp
KSB7Ci0gICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgICAgIGZpbmFsaXplciA9IHBhcnNlQmxv
Y2soKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaGFuZGxlciAmJiAhZmluYWxpemVyKSB7
Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLk5vQ2F0Y2hPckZpbmFsbHkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoVHJ5U3RhdGVtZW50KGJsb2NrLCBo
YW5kbGVyLCBmaW5hbGl6ZXIpOwotICAgIH0KLQotICAgIC8vIEVDTUEtMjYyIDEzLjE2IFRoZSBk
ZWJ1Z2dlciBzdGF0ZW1lbnQKLQotICAgIGZ1bmN0aW9uIHBhcnNlRGVidWdnZXJTdGF0ZW1lbnQo
bm9kZSkgewotICAgICAgICBleHBlY3RLZXl3b3JkKCdkZWJ1Z2dlcicpOwotCi0gICAgICAgIGNv
bnN1bWVTZW1pY29sb24oKTsKLQotICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hEZWJ1Z2dlclN0
YXRlbWVudCgpOwotICAgIH0KLQotICAgIC8vIDEzIFN0YXRlbWVudHMKLQotICAgIGZ1bmN0aW9u
IHBhcnNlU3RhdGVtZW50KCkgewotICAgICAgICB2YXIgdHlwZSA9IGxvb2thaGVhZC50eXBlLAot
ICAgICAgICAgICAgZXhwciwKLSAgICAgICAgICAgIGxhYmVsZWRCb2R5LAotICAgICAgICAgICAg
a2V5LAotICAgICAgICAgICAgbm9kZTsKLQotICAgICAgICBpZiAodHlwZSA9PT0gVG9rZW4uRU9G
KSB7Ci0gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbihsb29rYWhlYWQpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKHR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IgJiYgbG9va2FoZWFk
LnZhbHVlID09PSAneycpIHsKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUJsb2NrKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgaXNBc3NpZ25tZW50VGFyZ2V0ID0gaXNCaW5kaW5nRWxlbWVudCA9IHRy
dWU7Ci0gICAgICAgIG5vZGUgPSBuZXcgTm9kZSgpOwotCi0gICAgICAgIGlmICh0eXBlID09PSBU
b2tlbi5QdW5jdHVhdG9yKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGxvb2thaGVhZC52YWx1ZSkg
ewotICAgICAgICAgICAgY2FzZSAnOyc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRW1w
dHlTdGF0ZW1lbnQobm9kZSk7Ci0gICAgICAgICAgICBjYXNlICcoJzoKLSAgICAgICAgICAgICAg
ICByZXR1cm4gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KG5vZGUpOwotICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlIGlmICh0eXBlID09PSBUb2tlbi5LZXl3b3JkKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGxv
b2thaGVhZC52YWx1ZSkgewotICAgICAgICAgICAgY2FzZSAnYnJlYWsnOgotICAgICAgICAgICAg
ICAgIHJldHVybiBwYXJzZUJyZWFrU3RhdGVtZW50KG5vZGUpOwotICAgICAgICAgICAgY2FzZSAn
Y29udGludWUnOgotICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUNvbnRpbnVlU3RhdGVtZW50
KG5vZGUpOwotICAgICAgICAgICAgY2FzZSAnZGVidWdnZXInOgotICAgICAgICAgICAgICAgIHJl
dHVybiBwYXJzZURlYnVnZ2VyU3RhdGVtZW50KG5vZGUpOwotICAgICAgICAgICAgY2FzZSAnZG8n
OgotICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZURvV2hpbGVTdGF0ZW1lbnQobm9kZSk7Ci0g
ICAgICAgICAgICBjYXNlICdmb3InOgotICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZvclN0
YXRlbWVudChub2RlKTsKLSAgICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzoKLSAgICAgICAgICAg
ICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKG5vZGUpOwotICAgICAgICAgICAg
Y2FzZSAnaWYnOgotICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUlmU3RhdGVtZW50KG5vZGUp
OwotICAgICAgICAgICAgY2FzZSAncmV0dXJuJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gcGFy
c2VSZXR1cm5TdGF0ZW1lbnQobm9kZSk7Ci0gICAgICAgICAgICBjYXNlICdzd2l0Y2gnOgotICAg
ICAgICAgICAgICAgIHJldHVybiBwYXJzZVN3aXRjaFN0YXRlbWVudChub2RlKTsKLSAgICAgICAg
ICAgIGNhc2UgJ3Rocm93JzoKLSAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VUaHJvd1N0YXRl
bWVudChub2RlKTsKLSAgICAgICAgICAgIGNhc2UgJ3RyeSc6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHBhcnNlVHJ5U3RhdGVtZW50KG5vZGUpOwotICAgICAgICAgICAgY2FzZSAndmFyJzoKLSAg
ICAgICAgICAgICAgICByZXR1cm4gcGFyc2VWYXJpYWJsZVN0YXRlbWVudChub2RlKTsKLSAgICAg
ICAgICAgIGNhc2UgJ3doaWxlJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VXaGlsZVN0
YXRlbWVudChub2RlKTsKLSAgICAgICAgICAgIGNhc2UgJ3dpdGgnOgotICAgICAgICAgICAgICAg
IHJldHVybiBwYXJzZVdpdGhTdGF0ZW1lbnQobm9kZSk7Ci0gICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgZXhwciA9IHBhcnNlRXhwcmVzc2lvbigpOwotCi0gICAgICAgIC8vIEVDTUEtMjYyIDEyLjEy
IExhYmVsbGVkIFN0YXRlbWVudHMKLSAgICAgICAgaWYgKChleHByLnR5cGUgPT09IFN5bnRheC5J
ZGVudGlmaWVyKSAmJiBtYXRjaCgnOicpKSB7Ci0gICAgICAgICAgICBsZXgoKTsKLQotICAgICAg
ICAgICAga2V5ID0gJyQnICsgZXhwci5uYW1lOwotICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90
b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzdGF0ZS5sYWJlbFNldCwga2V5KSkgewotICAgICAg
ICAgICAgICAgIHRocm93RXJyb3IoTWVzc2FnZXMuUmVkZWNsYXJhdGlvbiwgJ0xhYmVsJywgZXhw
ci5uYW1lKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3RhdGUubGFiZWxTZXRba2V5
XSA9IHRydWU7Ci0gICAgICAgICAgICBsYWJlbGVkQm9keSA9IHBhcnNlU3RhdGVtZW50KCk7Ci0g
ICAgICAgICAgICBkZWxldGUgc3RhdGUubGFiZWxTZXRba2V5XTsKLSAgICAgICAgICAgIHJldHVy
biBub2RlLmZpbmlzaExhYmVsZWRTdGF0ZW1lbnQoZXhwciwgbGFiZWxlZEJvZHkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOwotCi0gICAgICAgIHJldHVybiBub2Rl
LmZpbmlzaEV4cHJlc3Npb25TdGF0ZW1lbnQoZXhwcik7Ci0gICAgfQotCi0gICAgLy8gRUNNQS0y
NjIgMTQuMSBGdW5jdGlvbiBEZWZpbml0aW9uCi0KLSAgICBmdW5jdGlvbiBwYXJzZUZ1bmN0aW9u
U291cmNlRWxlbWVudHMoKSB7Ci0gICAgICAgIHZhciBzdGF0ZW1lbnQsIGJvZHkgPSBbXSwgdG9r
ZW4sIGRpcmVjdGl2ZSwgZmlyc3RSZXN0cmljdGVkLAotICAgICAgICAgICAgb2xkTGFiZWxTZXQs
IG9sZEluSXRlcmF0aW9uLCBvbGRJblN3aXRjaCwgb2xkSW5GdW5jdGlvbkJvZHksIG9sZFBhcmVu
dGhlc2lzQ291bnQsCi0gICAgICAgICAgICBub2RlID0gbmV3IE5vZGUoKTsKLQotICAgICAgICBl
eHBlY3QoJ3snKTsKLQotICAgICAgICB3aGlsZSAoc3RhcnRJbmRleCA8IGxlbmd0aCkgewotICAg
ICAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5TdHJpbmdMaXRlcmFsKSB7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0b2tlbiA9
IGxvb2thaGVhZDsKLQotICAgICAgICAgICAgc3RhdGVtZW50ID0gcGFyc2VTdGF0ZW1lbnRMaXN0
SXRlbSgpOwotICAgICAgICAgICAgYm9keS5wdXNoKHN0YXRlbWVudCk7Ci0gICAgICAgICAgICBp
ZiAoc3RhdGVtZW50LmV4cHJlc3Npb24udHlwZSAhPT0gU3ludGF4LkxpdGVyYWwpIHsKLSAgICAg
ICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCBkaXJlY3RpdmUKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRpcmVjdGl2ZSA9IHNvdXJjZS5zbGljZSh0
b2tlbi5zdGFydCArIDEsIHRva2VuLmVuZCAtIDEpOwotICAgICAgICAgICAgaWYgKGRpcmVjdGl2
ZSA9PT0gJ3VzZSBzdHJpY3QnKSB7Ci0gICAgICAgICAgICAgICAgc3RyaWN0ID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICBpZiAoZmlyc3RSZXN0cmljdGVkKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKGZpcnN0UmVzdHJpY3RlZCwgTWVzc2FnZXMuU3RyaWN0
T2N0YWxMaXRlcmFsKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIGlmICghZmlyc3RSZXN0cmljdGVkICYmIHRva2VuLm9jdGFsKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG9sZExhYmVsU2V0ID0g
c3RhdGUubGFiZWxTZXQ7Ci0gICAgICAgIG9sZEluSXRlcmF0aW9uID0gc3RhdGUuaW5JdGVyYXRp
b247Ci0gICAgICAgIG9sZEluU3dpdGNoID0gc3RhdGUuaW5Td2l0Y2g7Ci0gICAgICAgIG9sZElu
RnVuY3Rpb25Cb2R5ID0gc3RhdGUuaW5GdW5jdGlvbkJvZHk7Ci0gICAgICAgIG9sZFBhcmVudGhl
c2lzQ291bnQgPSBzdGF0ZS5wYXJlbnRoZXNpemVkQ291bnQ7Ci0KLSAgICAgICAgc3RhdGUubGFi
ZWxTZXQgPSB7fTsKLSAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSBmYWxzZTsKLSAgICAgICAg
c3RhdGUuaW5Td2l0Y2ggPSBmYWxzZTsKLSAgICAgICAgc3RhdGUuaW5GdW5jdGlvbkJvZHkgPSB0
cnVlOwotICAgICAgICBzdGF0ZS5wYXJlbnRoZXNpemVkQ291bnQgPSAwOwotCi0gICAgICAgIHdo
aWxlIChzdGFydEluZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICBpZiAobWF0Y2goJ30nKSkg
ewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYm9k
eS5wdXNoKHBhcnNlU3RhdGVtZW50TGlzdEl0ZW0oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBl
eHBlY3QoJ30nKTsKLQotICAgICAgICBzdGF0ZS5sYWJlbFNldCA9IG9sZExhYmVsU2V0OwotICAg
ICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IG9sZEluSXRlcmF0aW9uOwotICAgICAgICBzdGF0ZS5p
blN3aXRjaCA9IG9sZEluU3dpdGNoOwotICAgICAgICBzdGF0ZS5pbkZ1bmN0aW9uQm9keSA9IG9s
ZEluRnVuY3Rpb25Cb2R5OwotICAgICAgICBzdGF0ZS5wYXJlbnRoZXNpemVkQ291bnQgPSBvbGRQ
YXJlbnRoZXNpc0NvdW50OwotCi0gICAgICAgIHJldHVybiBub2RlLmZpbmlzaEJsb2NrU3RhdGVt
ZW50KGJvZHkpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHZhbGlkYXRlUGFyYW0ob3B0aW9ucywg
cGFyYW0sIG5hbWUpIHsKLSAgICAgICAgdmFyIGtleSA9ICckJyArIG5hbWU7Ci0gICAgICAgIGlm
IChzdHJpY3QpIHsKLSAgICAgICAgICAgIGlmIChpc1Jlc3RyaWN0ZWRXb3JkKG5hbWUpKSB7Ci0g
ICAgICAgICAgICAgICAgb3B0aW9ucy5zdHJpY3RlZCA9IHBhcmFtOwotICAgICAgICAgICAgICAg
IG9wdGlvbnMubWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFBhcmFtTmFtZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwo
b3B0aW9ucy5wYXJhbVNldCwga2V5KSkgewotICAgICAgICAgICAgICAgIG9wdGlvbnMuc3RyaWN0
ZWQgPSBwYXJhbTsKLSAgICAgICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2UgPSBNZXNzYWdlcy5T
dHJpY3RQYXJhbUR1cGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoIW9wdGlv
bnMuZmlyc3RSZXN0cmljdGVkKSB7Ci0gICAgICAgICAgICBpZiAoaXNSZXN0cmljdGVkV29yZChu
YW1lKSkgewotICAgICAgICAgICAgICAgIG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkID0gcGFyYW07
Ci0gICAgICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UGFyYW1O
YW1lOwotICAgICAgICAgICAgfSBlbHNlIGlmIChpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQobmFt
ZSkpIHsKLSAgICAgICAgICAgICAgICBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCA9IHBhcmFtOwot
ICAgICAgICAgICAgICAgIG9wdGlvbnMubWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFJlc2VydmVk
V29yZDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9w
ZXJ0eS5jYWxsKG9wdGlvbnMucGFyYW1TZXQsIGtleSkpIHsKLSAgICAgICAgICAgICAgICBvcHRp
b25zLnN0cmljdGVkID0gcGFyYW07Ci0gICAgICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0g
TWVzc2FnZXMuU3RyaWN0UGFyYW1EdXBlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIG9wdGlvbnMucGFyYW1TZXRba2V5XSA9IHRydWU7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24g
cGFyc2VQYXJhbShvcHRpb25zKSB7Ci0gICAgICAgIHZhciB0b2tlbiwgcGFyYW0sIHBhcmFtcyA9
IFtdLCBpLCBkZWY7Ci0KLSAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7Ci0gICAgICAgIGlmICh0
b2tlbi52YWx1ZSA9PT0gJy4uLicpIHsKLSAgICAgICAgICAgIHBhcmFtID0gcGFyc2VSZXN0RWxl
bWVudChwYXJhbXMpOwotICAgICAgICAgICAgdmFsaWRhdGVQYXJhbShvcHRpb25zLCBwYXJhbS5h
cmd1bWVudCwgcGFyYW0uYXJndW1lbnQubmFtZSk7Ci0gICAgICAgICAgICBvcHRpb25zLnBhcmFt
cy5wdXNoKHBhcmFtKTsKLSAgICAgICAgICAgIG9wdGlvbnMuZGVmYXVsdHMucHVzaChudWxsKTsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhcmFtID0g
cGFyc2VQYXR0ZXJuV2l0aERlZmF1bHQocGFyYW1zKTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8
IHBhcmFtcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgdmFsaWRhdGVQYXJhbShvcHRpb25z
LCBwYXJhbXNbaV0sIHBhcmFtc1tpXS52YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
cGFyYW0udHlwZSA9PT0gU3ludGF4LkFzc2lnbm1lbnRQYXR0ZXJuKSB7Ci0gICAgICAgICAgICBk
ZWYgPSBwYXJhbS5yaWdodDsKLSAgICAgICAgICAgIHBhcmFtID0gcGFyYW0ubGVmdDsKLSAgICAg
ICAgICAgICsrb3B0aW9ucy5kZWZhdWx0Q291bnQ7Ci0gICAgICAgIH0KLQotICAgICAgICBvcHRp
b25zLnBhcmFtcy5wdXNoKHBhcmFtKTsKLSAgICAgICAgb3B0aW9ucy5kZWZhdWx0cy5wdXNoKGRl
Zik7Ci0KLSAgICAgICAgcmV0dXJuICFtYXRjaCgnKScpOwotICAgIH0KLQotICAgIGZ1bmN0aW9u
IHBhcnNlUGFyYW1zKGZpcnN0UmVzdHJpY3RlZCkgewotICAgICAgICB2YXIgb3B0aW9uczsKLQot
ICAgICAgICBvcHRpb25zID0gewotICAgICAgICAgICAgcGFyYW1zOiBbXSwKLSAgICAgICAgICAg
IGRlZmF1bHRDb3VudDogMCwKLSAgICAgICAgICAgIGRlZmF1bHRzOiBbXSwKLSAgICAgICAgICAg
IGZpcnN0UmVzdHJpY3RlZDogZmlyc3RSZXN0cmljdGVkCi0gICAgICAgIH07Ci0KLSAgICAgICAg
ZXhwZWN0KCcoJyk7Ci0KLSAgICAgICAgaWYgKCFtYXRjaCgnKScpKSB7Ci0gICAgICAgICAgICBv
cHRpb25zLnBhcmFtU2V0ID0ge307Ci0gICAgICAgICAgICB3aGlsZSAoc3RhcnRJbmRleCA8IGxl
bmd0aCkgewotICAgICAgICAgICAgICAgIGlmICghcGFyc2VQYXJhbShvcHRpb25zKSkgewotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgZXhwZWN0KCcsJyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBleHBl
Y3QoJyknKTsKLQotICAgICAgICBpZiAob3B0aW9ucy5kZWZhdWx0Q291bnQgPT09IDApIHsKLSAg
ICAgICAgICAgIG9wdGlvbnMuZGVmYXVsdHMgPSBbXTsKLSAgICAgICAgfQotCi0gICAgICAgIHJl
dHVybiB7Ci0gICAgICAgICAgICBwYXJhbXM6IG9wdGlvbnMucGFyYW1zLAotICAgICAgICAgICAg
ZGVmYXVsdHM6IG9wdGlvbnMuZGVmYXVsdHMsCi0gICAgICAgICAgICBzdHJpY3RlZDogb3B0aW9u
cy5zdHJpY3RlZCwKLSAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZDogb3B0aW9ucy5maXJzdFJl
c3RyaWN0ZWQsCi0gICAgICAgICAgICBtZXNzYWdlOiBvcHRpb25zLm1lc3NhZ2UKLSAgICAgICAg
fTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24obm9kZSwg
aWRlbnRpZmllcklzT3B0aW9uYWwpIHsKLSAgICAgICAgdmFyIGlkID0gbnVsbCwgcGFyYW1zID0g
W10sIGRlZmF1bHRzID0gW10sIGJvZHksIHRva2VuLCBzdHJpY3RlZCwgdG1wLCBmaXJzdFJlc3Ry
aWN0ZWQsIG1lc3NhZ2UsIHByZXZpb3VzU3RyaWN0LAotICAgICAgICAgICAgaXNHZW5lcmF0b3Is
IHByZXZpb3VzQWxsb3dZaWVsZDsKLQotICAgICAgICBwcmV2aW91c0FsbG93WWllbGQgPSBzdGF0
ZS5hbGxvd1lpZWxkOwotCi0gICAgICAgIGV4cGVjdEtleXdvcmQoJ2Z1bmN0aW9uJyk7Ci0KLSAg
ICAgICAgaXNHZW5lcmF0b3IgPSBtYXRjaCgnKicpOwotICAgICAgICBpZiAoaXNHZW5lcmF0b3Ip
IHsKLSAgICAgICAgICAgIGxleCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFpZGVudGlm
aWVySXNPcHRpb25hbCB8fCAhbWF0Y2goJygnKSkgewotICAgICAgICAgICAgdG9rZW4gPSBsb29r
YWhlYWQ7Ci0gICAgICAgICAgICBpZCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7Ci0gICAg
ICAgICAgICBpZiAoc3RyaWN0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzUmVzdHJpY3RlZFdv
cmQodG9rZW4udmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3Rl
ZFRva2VuKHRva2VuLCBNZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWUpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzUmVzdHJp
Y3RlZFdvcmQodG9rZW4udmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJp
Y3RlZCA9IHRva2VuOwotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3Ry
aWN0RnVuY3Rpb25OYW1lOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3RNb2Rl
UmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkgewotICAgICAgICAgICAgICAgICAgICBmaXJzdFJl
c3RyaWN0ZWQgPSB0b2tlbjsKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2Vz
LlN0cmljdFJlc2VydmVkV29yZDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gIWlzR2VuZXJhdG9yOwotICAg
ICAgICB0bXAgPSBwYXJzZVBhcmFtcyhmaXJzdFJlc3RyaWN0ZWQpOwotICAgICAgICBwYXJhbXMg
PSB0bXAucGFyYW1zOwotICAgICAgICBkZWZhdWx0cyA9IHRtcC5kZWZhdWx0czsKLSAgICAgICAg
c3RyaWN0ZWQgPSB0bXAuc3RyaWN0ZWQ7Ci0gICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRtcC5m
aXJzdFJlc3RyaWN0ZWQ7Ci0gICAgICAgIGlmICh0bXAubWVzc2FnZSkgewotICAgICAgICAgICAg
bWVzc2FnZSA9IHRtcC5tZXNzYWdlOwotICAgICAgICB9Ci0KLQotICAgICAgICBwcmV2aW91c1N0
cmljdCA9IHN0cmljdDsKLSAgICAgICAgYm9keSA9IHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50
cygpOwotICAgICAgICBpZiAoc3RyaWN0ICYmIGZpcnN0UmVzdHJpY3RlZCkgewotICAgICAgICAg
ICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4oZmlyc3RSZXN0cmljdGVkLCBtZXNzYWdlKTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoc3RyaWN0ICYmIHN0cmljdGVkKSB7Ci0gICAgICAgICAgICB0b2xl
cmF0ZVVuZXhwZWN0ZWRUb2tlbihzdHJpY3RlZCwgbWVzc2FnZSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBzdHJpY3QgPSBwcmV2aW91c1N0cmljdDsKLSAgICAgICAgc3RhdGUuYWxsb3dZaWVsZCA9
IHByZXZpb3VzQWxsb3dZaWVsZDsKLQotICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hGdW5jdGlv
bkRlY2xhcmF0aW9uKGlkLCBwYXJhbXMsIGRlZmF1bHRzLCBib2R5LCBpc0dlbmVyYXRvcik7Ci0g
ICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VGdW5jdGlvbkV4cHJlc3Npb24oKSB7Ci0gICAgICAg
IHZhciB0b2tlbiwgaWQgPSBudWxsLCBzdHJpY3RlZCwgZmlyc3RSZXN0cmljdGVkLCBtZXNzYWdl
LCB0bXAsCi0gICAgICAgICAgICBwYXJhbXMgPSBbXSwgZGVmYXVsdHMgPSBbXSwgYm9keSwgcHJl
dmlvdXNTdHJpY3QsIG5vZGUgPSBuZXcgTm9kZSgpLAotICAgICAgICAgICAgaXNHZW5lcmF0b3Is
IHByZXZpb3VzQWxsb3dZaWVsZDsKLQotICAgICAgICBwcmV2aW91c0FsbG93WWllbGQgPSBzdGF0
ZS5hbGxvd1lpZWxkOwotCi0gICAgICAgIGV4cGVjdEtleXdvcmQoJ2Z1bmN0aW9uJyk7Ci0KLSAg
ICAgICAgaXNHZW5lcmF0b3IgPSBtYXRjaCgnKicpOwotICAgICAgICBpZiAoaXNHZW5lcmF0b3Ip
IHsKLSAgICAgICAgICAgIGxleCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGUuYWxsb3dZ
aWVsZCA9ICFpc0dlbmVyYXRvcjsKLSAgICAgICAgaWYgKCFtYXRjaCgnKCcpKSB7Ci0gICAgICAg
ICAgICB0b2tlbiA9IGxvb2thaGVhZDsKLSAgICAgICAgICAgIGlkID0gKCFzdHJpY3QgJiYgIWlz
R2VuZXJhdG9yICYmIG1hdGNoS2V5d29yZCgneWllbGQnKSkgPyBwYXJzZU5vbkNvbXB1dGVkUHJv
cGVydHkoKSA6IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICBpZiAoc3Ry
aWN0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuLCBN
ZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzUmVzdHJpY3RlZFdvcmQodG9rZW4u
dmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOwot
ICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1l
OwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRv
a2VuLnZhbHVlKSkgewotICAgICAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tl
bjsKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFJlc2VydmVk
V29yZDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICB0bXAgPSBwYXJzZVBhcmFtcyhmaXJzdFJlc3RyaWN0ZWQpOwotICAgICAgICBwYXJhbXMg
PSB0bXAucGFyYW1zOwotICAgICAgICBkZWZhdWx0cyA9IHRtcC5kZWZhdWx0czsKLSAgICAgICAg
c3RyaWN0ZWQgPSB0bXAuc3RyaWN0ZWQ7Ci0gICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRtcC5m
aXJzdFJlc3RyaWN0ZWQ7Ci0gICAgICAgIGlmICh0bXAubWVzc2FnZSkgewotICAgICAgICAgICAg
bWVzc2FnZSA9IHRtcC5tZXNzYWdlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJldmlvdXNTdHJp
Y3QgPSBzdHJpY3Q7Ci0gICAgICAgIGJvZHkgPSBwYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMo
KTsKLSAgICAgICAgaWYgKHN0cmljdCAmJiBmaXJzdFJlc3RyaWN0ZWQpIHsKLSAgICAgICAgICAg
IHRocm93VW5leHBlY3RlZFRva2VuKGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKHN0cmljdCAmJiBzdHJpY3RlZCkgewotICAgICAgICAgICAgdG9sZXJh
dGVVbmV4cGVjdGVkVG9rZW4oc3RyaWN0ZWQsIG1lc3NhZ2UpOwotICAgICAgICB9Ci0gICAgICAg
IHN0cmljdCA9IHByZXZpb3VzU3RyaWN0OwotICAgICAgICBzdGF0ZS5hbGxvd1lpZWxkID0gcHJl
dmlvdXNBbGxvd1lpZWxkOwotCi0gICAgICAgIHJldHVybiBub2RlLmZpbmlzaEZ1bmN0aW9uRXhw
cmVzc2lvbihpZCwgcGFyYW1zLCBkZWZhdWx0cywgYm9keSwgaXNHZW5lcmF0b3IpOwotICAgIH0K
LQotICAgIC8vIEVDTUEtMjYyIDE0LjUgQ2xhc3MgRGVmaW5pdGlvbnMKLQotICAgIGZ1bmN0aW9u
IHBhcnNlQ2xhc3NCb2R5KCkgewotICAgICAgICB2YXIgY2xhc3NCb2R5LCB0b2tlbiwgaXNTdGF0
aWMsIGhhc0NvbnN0cnVjdG9yID0gZmFsc2UsIGJvZHksIG1ldGhvZCwgY29tcHV0ZWQsIGtleTsK
LQotICAgICAgICBjbGFzc0JvZHkgPSBuZXcgTm9kZSgpOwotCi0gICAgICAgIGV4cGVjdCgneycp
OwotICAgICAgICBib2R5ID0gW107Ci0gICAgICAgIHdoaWxlICghbWF0Y2goJ30nKSkgewotICAg
ICAgICAgICAgaWYgKG1hdGNoKCc7JykpIHsKLSAgICAgICAgICAgICAgICBsZXgoKTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbWV0aG9kID0gbmV3IE5vZGUoKTsKLSAg
ICAgICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKLSAgICAgICAgICAgICAgICBpc1N0YXRp
YyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGNvbXB1dGVkID0gbWF0Y2goJ1snKTsKLSAgICAg
ICAgICAgICAgICBpZiAobWF0Y2goJyonKSkgewotICAgICAgICAgICAgICAgICAgICBsZXgoKTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBrZXkgPSBwYXJz
ZU9iamVjdFByb3BlcnR5S2V5KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChrZXkubmFtZSA9
PT0gJ3N0YXRpYycgJiYgKGxvb2thaGVhZFByb3BlcnR5TmFtZSgpIHx8IG1hdGNoKCcqJykpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlzU3RhdGljID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNv
bXB1dGVkID0gbWF0Y2goJ1snKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCgn
KicpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IHBh
cnNlT2JqZWN0UHJvcGVydHlLZXkoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtZXRo
b2QgPSB0cnlQYXJzZU1ldGhvZERlZmluaXRpb24odG9rZW4sIGtleSwgY29tcHV0ZWQsIG1ldGhv
ZCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1ldGhvZCkgewotICAgICAgICAgICAgICAgICAgICBt
ZXRob2RbJ3N0YXRpYyddID0gaXNTdGF0aWM7IC8vIGpzY3M6aWdub3JlIHJlcXVpcmVEb3ROb3Rh
dGlvbgotICAgICAgICAgICAgICAgICAgICBpZiAobWV0aG9kLmtpbmQgPT09ICdpbml0Jykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLmtpbmQgPSAnbWV0aG9kJzsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU3RhdGljKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIW1ldGhvZC5jb21wdXRlZCAmJiAobWV0aG9kLmtleS5u
YW1lIHx8IG1ldGhvZC5rZXkudmFsdWUudG9TdHJpbmcoKSkgPT09ICdjb25zdHJ1Y3RvcicpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWV0aG9kLmtpbmQgIT09ICdtZXRob2Qn
IHx8ICFtZXRob2QubWV0aG9kIHx8IG1ldGhvZC52YWx1ZS5nZW5lcmF0b3IpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4sIE1lc3Nh
Z2VzLkNvbnN0cnVjdG9yU3BlY2lhbE1ldGhvZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNDb25zdHJ1Y3Rvcikgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tl
biwgTWVzc2FnZXMuRHVwbGljYXRlQ29uc3RydWN0b3IpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0NvbnN0
cnVjdG9yID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWV0aG9kLmtpbmQgPSAnY29uc3RydWN0b3InOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFtZXRob2QuY29tcHV0ZWQgJiYgKG1ldGhvZC5rZXkubmFtZSB8
fCBtZXRob2Qua2V5LnZhbHVlLnRvU3RyaW5nKCkpID09PSAncHJvdG90eXBlJykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZFRva2VuKHRva2VuLCBNZXNzYWdl
cy5TdGF0aWNQcm90b3R5cGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG1ldGhvZC50eXBlID0gU3ludGF4Lk1l
dGhvZERlZmluaXRpb247Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBtZXRob2QubWV0aG9k
OwotICAgICAgICAgICAgICAgICAgICBkZWxldGUgbWV0aG9kLnNob3J0aGFuZDsKLSAgICAgICAg
ICAgICAgICAgICAgYm9keS5wdXNoKG1ldGhvZCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkVG9rZW4obG9va2FoZWFkKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbGV4KCk7
Ci0gICAgICAgIHJldHVybiBjbGFzc0JvZHkuZmluaXNoQ2xhc3NCb2R5KGJvZHkpOwotICAgIH0K
LQotICAgIGZ1bmN0aW9uIHBhcnNlQ2xhc3NEZWNsYXJhdGlvbihpZGVudGlmaWVySXNPcHRpb25h
bCkgewotICAgICAgICB2YXIgaWQgPSBudWxsLCBzdXBlckNsYXNzID0gbnVsbCwgY2xhc3NOb2Rl
ID0gbmV3IE5vZGUoKSwgY2xhc3NCb2R5LCBwcmV2aW91c1N0cmljdCA9IHN0cmljdDsKLSAgICAg
ICAgc3RyaWN0ID0gdHJ1ZTsKLQotICAgICAgICBleHBlY3RLZXl3b3JkKCdjbGFzcycpOwotCi0g
ICAgICAgIGlmICghaWRlbnRpZmllcklzT3B0aW9uYWwgfHwgbG9va2FoZWFkLnR5cGUgPT09IFRv
a2VuLklkZW50aWZpZXIpIHsKLSAgICAgICAgICAgIGlkID0gcGFyc2VWYXJpYWJsZUlkZW50aWZp
ZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2V4dGVuZHMnKSkg
ewotICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAgICAgICBzdXBlckNsYXNzID0gaXNvbGF0ZUNv
dmVyR3JhbW1hcihwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwpOwotICAgICAg
ICB9Ci0gICAgICAgIGNsYXNzQm9keSA9IHBhcnNlQ2xhc3NCb2R5KCk7Ci0gICAgICAgIHN0cmlj
dCA9IHByZXZpb3VzU3RyaWN0OwotCi0gICAgICAgIHJldHVybiBjbGFzc05vZGUuZmluaXNoQ2xh
c3NEZWNsYXJhdGlvbihpZCwgc3VwZXJDbGFzcywgY2xhc3NCb2R5KTsKLSAgICB9Ci0KLSAgICBm
dW5jdGlvbiBwYXJzZUNsYXNzRXhwcmVzc2lvbigpIHsKLSAgICAgICAgdmFyIGlkID0gbnVsbCwg
c3VwZXJDbGFzcyA9IG51bGwsIGNsYXNzTm9kZSA9IG5ldyBOb2RlKCksIGNsYXNzQm9keSwgcHJl
dmlvdXNTdHJpY3QgPSBzdHJpY3Q7Ci0gICAgICAgIHN0cmljdCA9IHRydWU7Ci0KLSAgICAgICAg
ZXhwZWN0S2V5d29yZCgnY2xhc3MnKTsKLQotICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09
IFRva2VuLklkZW50aWZpZXIpIHsKLSAgICAgICAgICAgIGlkID0gcGFyc2VWYXJpYWJsZUlkZW50
aWZpZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2V4dGVuZHMn
KSkgewotICAgICAgICAgICAgbGV4KCk7Ci0gICAgICAgICAgICBzdXBlckNsYXNzID0gaXNvbGF0
ZUNvdmVyR3JhbW1hcihwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwpOwotICAg
ICAgICB9Ci0gICAgICAgIGNsYXNzQm9keSA9IHBhcnNlQ2xhc3NCb2R5KCk7Ci0gICAgICAgIHN0
cmljdCA9IHByZXZpb3VzU3RyaWN0OwotCi0gICAgICAgIHJldHVybiBjbGFzc05vZGUuZmluaXNo
Q2xhc3NFeHByZXNzaW9uKGlkLCBzdXBlckNsYXNzLCBjbGFzc0JvZHkpOwotICAgIH0KLQotICAg
IC8vIEVDTUEtMjYyIDE1LjIgTW9kdWxlcwotCi0gICAgZnVuY3Rpb24gcGFyc2VNb2R1bGVTcGVj
aWZpZXIoKSB7Ci0gICAgICAgIHZhciBub2RlID0gbmV3IE5vZGUoKTsKLQotICAgICAgICBpZiAo
bG9va2FoZWFkLnR5cGUgIT09IFRva2VuLlN0cmluZ0xpdGVyYWwpIHsKLSAgICAgICAgICAgIHRo
cm93RXJyb3IoTWVzc2FnZXMuSW52YWxpZE1vZHVsZVNwZWNpZmllcik7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIG5vZGUuZmluaXNoTGl0ZXJhbChsZXgoKSk7Ci0gICAgfQotCi0gICAgLy8g
RUNNQS0yNjIgMTUuMi4zIEV4cG9ydHMKLQotICAgIGZ1bmN0aW9uIHBhcnNlRXhwb3J0U3BlY2lm
aWVyKCkgewotICAgICAgICB2YXIgZXhwb3J0ZWQsIGxvY2FsLCBub2RlID0gbmV3IE5vZGUoKSwg
ZGVmOwotICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdkZWZhdWx0JykpIHsKLSAgICAgICAgICAg
IC8vIGV4cG9ydCB7ZGVmYXVsdH0gZnJvbSAnc29tZXRoaW5nJzsKLSAgICAgICAgICAgIGRlZiA9
IG5ldyBOb2RlKCk7Ci0gICAgICAgICAgICBsZXgoKTsKLSAgICAgICAgICAgIGxvY2FsID0gZGVm
LmZpbmlzaElkZW50aWZpZXIoJ2RlZmF1bHQnKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGxvY2FsID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAobWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnYXMnKSkgewotICAgICAgICAgICAgbGV4KCk7
Ci0gICAgICAgICAgICBleHBvcnRlZCA9IHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBub2RlLmZpbmlzaEV4cG9ydFNwZWNpZmllcihsb2NhbCwg
ZXhwb3J0ZWQpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlRXhwb3J0TmFtZWREZWNsYXJh
dGlvbihub2RlKSB7Ci0gICAgICAgIHZhciBkZWNsYXJhdGlvbiA9IG51bGwsCi0gICAgICAgICAg
ICBpc0V4cG9ydEZyb21JZGVudGlmaWVyLAotICAgICAgICAgICAgc3JjID0gbnVsbCwgc3BlY2lm
aWVycyA9IFtdOwotCi0gICAgICAgIC8vIG5vbi1kZWZhdWx0IGV4cG9ydAotICAgICAgICBpZiAo
bG9va2FoZWFkLnR5cGUgPT09IFRva2VuLktleXdvcmQpIHsKLSAgICAgICAgICAgIC8vIGNvdmVy
czoKLSAgICAgICAgICAgIC8vIGV4cG9ydCB2YXIgZiA9IDE7Ci0gICAgICAgICAgICBzd2l0Y2gg
KGxvb2thaGVhZC52YWx1ZSkgewotICAgICAgICAgICAgICAgIGNhc2UgJ2xldCc6Ci0gICAgICAg
ICAgICAgICAgY2FzZSAnY29uc3QnOgotICAgICAgICAgICAgICAgIGNhc2UgJ3Zhcic6Ci0gICAg
ICAgICAgICAgICAgY2FzZSAnY2xhc3MnOgotICAgICAgICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9u
JzoKLSAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb24gPSBwYXJzZVN0YXRlbWVudExpc3RJ
dGVtKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmZpbmlzaEV4cG9ydE5hbWVk
RGVjbGFyYXRpb24oZGVjbGFyYXRpb24sIHNwZWNpZmllcnMsIG51bGwpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgZXhwZWN0KCd7Jyk7Ci0gICAgICAgIHdoaWxlICghbWF0
Y2goJ30nKSkgewotICAgICAgICAgICAgaXNFeHBvcnRGcm9tSWRlbnRpZmllciA9IGlzRXhwb3J0
RnJvbUlkZW50aWZpZXIgfHwgbWF0Y2hLZXl3b3JkKCdkZWZhdWx0Jyk7Ci0gICAgICAgICAgICBz
cGVjaWZpZXJzLnB1c2gocGFyc2VFeHBvcnRTcGVjaWZpZXIoKSk7Ci0gICAgICAgICAgICBpZiAo
IW1hdGNoKCd9JykpIHsKLSAgICAgICAgICAgICAgICBleHBlY3QoJywnKTsKLSAgICAgICAgICAg
ICAgICBpZiAobWF0Y2goJ30nKSkgewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZXhwZWN0KCd9
Jyk7Ci0KLSAgICAgICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2Zyb20nKSkgewotICAg
ICAgICAgICAgLy8gY292ZXJpbmc6Ci0gICAgICAgICAgICAvLyBleHBvcnQge2RlZmF1bHR9IGZy
b20gJ2Zvbyc7Ci0gICAgICAgICAgICAvLyBleHBvcnQge2Zvb30gZnJvbSAnZm9vJzsKLSAgICAg
ICAgICAgIGxleCgpOwotICAgICAgICAgICAgc3JjID0gcGFyc2VNb2R1bGVTcGVjaWZpZXIoKTsK
LSAgICAgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKLSAgICAgICAgfSBlbHNlIGlmIChpc0V4
cG9ydEZyb21JZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICAvLyBjb3ZlcmluZzoKLSAgICAgICAg
ICAgIC8vIGV4cG9ydCB7ZGVmYXVsdH07IC8vIG1pc3NpbmcgZnJvbUNsYXVzZQotICAgICAgICAg
ICAgdGhyb3dFcnJvcihsb29rYWhlYWQudmFsdWUgPwotICAgICAgICAgICAgICAgICAgICBNZXNz
YWdlcy5VbmV4cGVjdGVkVG9rZW4gOiBNZXNzYWdlcy5NaXNzaW5nRnJvbUNsYXVzZSwgbG9va2Fo
ZWFkLnZhbHVlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIGNvdmVyCi0gICAg
ICAgICAgICAvLyBleHBvcnQge2Zvb307Ci0gICAgICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoRXhwb3J0TmFtZWREZWNsYXJh
dGlvbihkZWNsYXJhdGlvbiwgc3BlY2lmaWVycywgc3JjKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlv
biBwYXJzZUV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihub2RlKSB7Ci0gICAgICAgIHZhciBkZWNs
YXJhdGlvbiA9IG51bGwsCi0gICAgICAgICAgICBleHByZXNzaW9uID0gbnVsbDsKLQotICAgICAg
ICAvLyBjb3ZlcnM6Ci0gICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IC4uLgotICAgICAgICBleHBl
Y3RLZXl3b3JkKCdkZWZhdWx0Jyk7Ci0KLSAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnZnVuY3Rp
b24nKSkgewotICAgICAgICAgICAgLy8gY292ZXJzOgotICAgICAgICAgICAgLy8gZXhwb3J0IGRl
ZmF1bHQgZnVuY3Rpb24gZm9vICgpIHt9Ci0gICAgICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCBm
dW5jdGlvbiAoKSB7fQotICAgICAgICAgICAgZGVjbGFyYXRpb24gPSBwYXJzZUZ1bmN0aW9uRGVj
bGFyYXRpb24obmV3IE5vZGUoKSwgdHJ1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gbm9kZS5maW5p
c2hFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24oZGVjbGFyYXRpb24pOwotICAgICAgICB9Ci0gICAg
ICAgIGlmIChtYXRjaEtleXdvcmQoJ2NsYXNzJykpIHsKLSAgICAgICAgICAgIGRlY2xhcmF0aW9u
ID0gcGFyc2VDbGFzc0RlY2xhcmF0aW9uKHRydWUpOwotICAgICAgICAgICAgcmV0dXJuIG5vZGUu
ZmluaXNoRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3JkKCdmcm9tJykpIHsKLSAgICAgICAg
ICAgIHRocm93RXJyb3IoTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBsb29rYWhlYWQudmFsdWUp
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gY292ZXJzOgotICAgICAgICAvLyBleHBvcnQgZGVm
YXVsdCB7fTsKLSAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgW107Ci0gICAgICAgIC8vIGV4cG9y
dCBkZWZhdWx0ICgxICsgMik7Ci0gICAgICAgIGlmIChtYXRjaCgneycpKSB7Ci0gICAgICAgICAg
ICBleHByZXNzaW9uID0gcGFyc2VPYmplY3RJbml0aWFsaXplcigpOwotICAgICAgICB9IGVsc2Ug
aWYgKG1hdGNoKCdbJykpIHsKLSAgICAgICAgICAgIGV4cHJlc3Npb24gPSBwYXJzZUFycmF5SW5p
dGlhbGl6ZXIoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGV4cHJlc3Npb24gPSBw
YXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3VtZVNl
bWljb2xvbigpOwotICAgICAgICByZXR1cm4gbm9kZS5maW5pc2hFeHBvcnREZWZhdWx0RGVjbGFy
YXRpb24oZXhwcmVzc2lvbik7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VFeHBvcnRBbGxE
ZWNsYXJhdGlvbihub2RlKSB7Ci0gICAgICAgIHZhciBzcmM7Ci0KLSAgICAgICAgLy8gY292ZXJz
OgotICAgICAgICAvLyBleHBvcnQgKiBmcm9tICdmb28nOwotICAgICAgICBleHBlY3QoJyonKTsK
LSAgICAgICAgaWYgKCFtYXRjaENvbnRleHR1YWxLZXl3b3JkKCdmcm9tJykpIHsKLSAgICAgICAg
ICAgIHRocm93RXJyb3IobG9va2FoZWFkLnZhbHVlID8KLSAgICAgICAgICAgICAgICAgICAgTWVz
c2FnZXMuVW5leHBlY3RlZFRva2VuIDogTWVzc2FnZXMuTWlzc2luZ0Zyb21DbGF1c2UsIGxvb2th
aGVhZC52YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgbGV4KCk7Ci0gICAgICAgIHNyYyA9IHBh
cnNlTW9kdWxlU3BlY2lmaWVyKCk7Ci0gICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKLQotICAg
ICAgICByZXR1cm4gbm9kZS5maW5pc2hFeHBvcnRBbGxEZWNsYXJhdGlvbihzcmMpOwotICAgIH0K
LQotICAgIGZ1bmN0aW9uIHBhcnNlRXhwb3J0RGVjbGFyYXRpb24oKSB7Ci0gICAgICAgIHZhciBu
b2RlID0gbmV3IE5vZGUoKTsKLSAgICAgICAgaWYgKHN0YXRlLmluRnVuY3Rpb25Cb2R5KSB7Ci0g
ICAgICAgICAgICB0aHJvd0Vycm9yKE1lc3NhZ2VzLklsbGVnYWxFeHBvcnREZWNsYXJhdGlvbik7
Ci0gICAgICAgIH0KLQotICAgICAgICBleHBlY3RLZXl3b3JkKCdleHBvcnQnKTsKLQotICAgICAg
ICBpZiAobWF0Y2hLZXl3b3JkKCdkZWZhdWx0JykpIHsKLSAgICAgICAgICAgIHJldHVybiBwYXJz
ZUV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihub2RlKTsKLSAgICAgICAgfQotICAgICAgICBpZiAo
bWF0Y2goJyonKSkgewotICAgICAgICAgICAgcmV0dXJuIHBhcnNlRXhwb3J0QWxsRGVjbGFyYXRp
b24obm9kZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHBhcnNlRXhwb3J0TmFtZWREZWNs
YXJhdGlvbihub2RlKTsKLSAgICB9Ci0KLSAgICAvLyBFQ01BLTI2MiAxNS4yLjIgSW1wb3J0cwot
Ci0gICAgZnVuY3Rpb24gcGFyc2VJbXBvcnRTcGVjaWZpZXIoKSB7Ci0gICAgICAgIC8vIGltcG9y
dCB7PGZvbyBhcyBiYXI+fSAuLi47Ci0gICAgICAgIHZhciBsb2NhbCwgaW1wb3J0ZWQsIG5vZGUg
PSBuZXcgTm9kZSgpOwotCi0gICAgICAgIGltcG9ydGVkID0gcGFyc2VOb25Db21wdXRlZFByb3Bl
cnR5KCk7Ci0gICAgICAgIGlmIChtYXRjaENvbnRleHR1YWxLZXl3b3JkKCdhcycpKSB7Ci0gICAg
ICAgICAgICBsZXgoKTsKLSAgICAgICAgICAgIGxvY2FsID0gcGFyc2VWYXJpYWJsZUlkZW50aWZp
ZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBub2RlLmZpbmlzaEltcG9ydFNwZWNp
Zmllcihsb2NhbCwgaW1wb3J0ZWQpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlTmFtZWRJ
bXBvcnRzKCkgewotICAgICAgICB2YXIgc3BlY2lmaWVycyA9IFtdOwotICAgICAgICAvLyB7Zm9v
LCBiYXIgYXMgYmFzfQotICAgICAgICBleHBlY3QoJ3snKTsKLSAgICAgICAgd2hpbGUgKCFtYXRj
aCgnfScpKSB7Ci0gICAgICAgICAgICBzcGVjaWZpZXJzLnB1c2gocGFyc2VJbXBvcnRTcGVjaWZp
ZXIoKSk7Ci0gICAgICAgICAgICBpZiAoIW1hdGNoKCd9JykpIHsKLSAgICAgICAgICAgICAgICBl
eHBlY3QoJywnKTsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2goJ30nKSkgewotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgZXhwZWN0KCd9Jyk7Ci0gICAgICAgIHJldHVybiBzcGVjaWZpZXJzOwot
ICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlSW1wb3J0RGVmYXVsdFNwZWNpZmllcigpIHsKLSAg
ICAgICAgLy8gaW1wb3J0IDxmb28+IC4uLjsKLSAgICAgICAgdmFyIGxvY2FsLCBub2RlID0gbmV3
IE5vZGUoKTsKLQotICAgICAgICBsb2NhbCA9IHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpOwot
Ci0gICAgICAgIHJldHVybiBub2RlLmZpbmlzaEltcG9ydERlZmF1bHRTcGVjaWZpZXIobG9jYWwp
OwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHBhcnNlSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKCkg
ewotICAgICAgICAvLyBpbXBvcnQgPCogYXMgZm9vPiAuLi47Ci0gICAgICAgIHZhciBsb2NhbCwg
bm9kZSA9IG5ldyBOb2RlKCk7Ci0KLSAgICAgICAgZXhwZWN0KCcqJyk7Ci0gICAgICAgIGlmICgh
bWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnYXMnKSkgewotICAgICAgICAgICAgdGhyb3dFcnJvcihN
ZXNzYWdlcy5Ob0FzQWZ0ZXJJbXBvcnROYW1lc3BhY2UpOwotICAgICAgICB9Ci0gICAgICAgIGxl
eCgpOwotICAgICAgICBsb2NhbCA9IHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpOwotCi0gICAg
ICAgIHJldHVybiBub2RlLmZpbmlzaEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcihsb2NhbCk7Ci0g
ICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VJbXBvcnREZWNsYXJhdGlvbigpIHsKLSAgICAgICAg
dmFyIHNwZWNpZmllcnMgPSBbXSwgc3JjLCBub2RlID0gbmV3IE5vZGUoKTsKLQotICAgICAgICBp
ZiAoc3RhdGUuaW5GdW5jdGlvbkJvZHkpIHsKLSAgICAgICAgICAgIHRocm93RXJyb3IoTWVzc2Fn
ZXMuSWxsZWdhbEltcG9ydERlY2xhcmF0aW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIGV4cGVj
dEtleXdvcmQoJ2ltcG9ydCcpOwotCi0gICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9r
ZW4uU3RyaW5nTGl0ZXJhbCkgewotICAgICAgICAgICAgLy8gaW1wb3J0ICdmb28nOwotICAgICAg
ICAgICAgc3JjID0gcGFyc2VNb2R1bGVTcGVjaWZpZXIoKTsKLSAgICAgICAgfSBlbHNlIHsKLQot
ICAgICAgICAgICAgaWYgKG1hdGNoKCd7JykpIHsKLSAgICAgICAgICAgICAgICAvLyBpbXBvcnQg
e2Jhcn0KLSAgICAgICAgICAgICAgICBzcGVjaWZpZXJzID0gc3BlY2lmaWVycy5jb25jYXQocGFy
c2VOYW1lZEltcG9ydHMoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCcqJykpIHsK
LSAgICAgICAgICAgICAgICAvLyBpbXBvcnQgKiBhcyBmb28KLSAgICAgICAgICAgICAgICBzcGVj
aWZpZXJzLnB1c2gocGFyc2VJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIoKSk7Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKGlzSWRlbnRpZmllck5hbWUobG9va2FoZWFkKSAmJiAhbWF0Y2hLZXl3b3Jk
KCdkZWZhdWx0JykpIHsKLSAgICAgICAgICAgICAgICAvLyBpbXBvcnQgZm9vCi0gICAgICAgICAg
ICAgICAgc3BlY2lmaWVycy5wdXNoKHBhcnNlSW1wb3J0RGVmYXVsdFNwZWNpZmllcigpKTsKLSAg
ICAgICAgICAgICAgICBpZiAobWF0Y2goJywnKSkgewotICAgICAgICAgICAgICAgICAgICBsZXgo
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoKCcqJykpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGltcG9ydCBmb28sICogYXMgZm9vCi0gICAgICAgICAgICAgICAgICAgICAg
ICBzcGVjaWZpZXJzLnB1c2gocGFyc2VJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJ3snKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gaW1wb3J0IGZvbywge2Jhcn0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNw
ZWNpZmllcnMgPSBzcGVjaWZpZXJzLmNvbmNhdChwYXJzZU5hbWVkSW1wb3J0cygpKTsKLSAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93VW5l
eHBlY3RlZFRva2VuKGxvb2thaGVhZCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRocm93VW5l
eHBlY3RlZFRva2VuKGxleCgpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFt
YXRjaENvbnRleHR1YWxLZXl3b3JkKCdmcm9tJykpIHsKLSAgICAgICAgICAgICAgICB0aHJvd0Vy
cm9yKGxvb2thaGVhZC52YWx1ZSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlcy5V
bmV4cGVjdGVkVG9rZW4gOiBNZXNzYWdlcy5NaXNzaW5nRnJvbUNsYXVzZSwgbG9va2FoZWFkLnZh
bHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxleCgpOwotICAgICAgICAgICAgc3Jj
ID0gcGFyc2VNb2R1bGVTcGVjaWZpZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN1bWVT
ZW1pY29sb24oKTsKLSAgICAgICAgcmV0dXJuIG5vZGUuZmluaXNoSW1wb3J0RGVjbGFyYXRpb24o
c3BlY2lmaWVycywgc3JjKTsKLSAgICB9Ci0KLSAgICAvLyBFQ01BLTI2MiAxNS4xIFNjcmlwdHMK
LQotICAgIGZ1bmN0aW9uIHBhcnNlU2NyaXB0Qm9keSgpIHsKLSAgICAgICAgdmFyIHN0YXRlbWVu
dCwgYm9keSA9IFtdLCB0b2tlbiwgZGlyZWN0aXZlLCBmaXJzdFJlc3RyaWN0ZWQ7Ci0KLSAgICAg
ICAgd2hpbGUgKHN0YXJ0SW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAgICAgIHRva2VuID0gbG9v
a2FoZWFkOwotICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLlN0cmluZ0xpdGVy
YWwpIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgc3RhdGVtZW50ID0gcGFyc2VTdGF0ZW1lbnRMaXN0SXRlbSgpOwotICAgICAgICAgICAgYm9k
eS5wdXNoKHN0YXRlbWVudCk7Ci0gICAgICAgICAgICBpZiAoc3RhdGVtZW50LmV4cHJlc3Npb24u
dHlwZSAhPT0gU3ludGF4LkxpdGVyYWwpIHsKLSAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIG5v
dCBkaXJlY3RpdmUKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGRpcmVjdGl2ZSA9IHNvdXJjZS5zbGljZSh0b2tlbi5zdGFydCArIDEsIHRva2VuLmVu
ZCAtIDEpOwotICAgICAgICAgICAgaWYgKGRpcmVjdGl2ZSA9PT0gJ3VzZSBzdHJpY3QnKSB7Ci0g
ICAgICAgICAgICAgICAgc3RyaWN0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAoZmlyc3RS
ZXN0cmljdGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRvbGVyYXRlVW5leHBlY3RlZFRva2Vu
KGZpcnN0UmVzdHJpY3RlZCwgTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICghZmly
c3RSZXN0cmljdGVkICYmIHRva2VuLm9jdGFsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0
UmVzdHJpY3RlZCA9IHRva2VuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIHdoaWxlIChzdGFydEluZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAg
ICAgICBzdGF0ZW1lbnQgPSBwYXJzZVN0YXRlbWVudExpc3RJdGVtKCk7Ci0gICAgICAgICAgICAv
KiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi8KLSAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RhdGVtZW50
ID09PSAndW5kZWZpbmVkJykgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgYm9keS5wdXNoKHN0YXRlbWVudCk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIGJvZHk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcGFyc2VQcm9ncmFtKCkgewotICAg
ICAgICB2YXIgYm9keSwgbm9kZTsKLQotICAgICAgICBwZWVrKCk7Ci0gICAgICAgIG5vZGUgPSBu
ZXcgTm9kZSgpOwotCi0gICAgICAgIGJvZHkgPSBwYXJzZVNjcmlwdEJvZHkoKTsKLSAgICAgICAg
cmV0dXJuIG5vZGUuZmluaXNoUHJvZ3JhbShib2R5LCBzdGF0ZS5zb3VyY2VUeXBlKTsKLSAgICB9
Ci0KLSAgICBmdW5jdGlvbiBmaWx0ZXJUb2tlbkxvY2F0aW9uKCkgewotICAgICAgICB2YXIgaSwg
ZW50cnksIHRva2VuLCB0b2tlbnMgPSBbXTsKLQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZXh0
cmEudG9rZW5zLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBlbnRyeSA9IGV4dHJhLnRva2Vu
c1tpXTsKLSAgICAgICAgICAgIHRva2VuID0gewotICAgICAgICAgICAgICAgIHR5cGU6IGVudHJ5
LnR5cGUsCi0gICAgICAgICAgICAgICAgdmFsdWU6IGVudHJ5LnZhbHVlCi0gICAgICAgICAgICB9
OwotICAgICAgICAgICAgaWYgKGVudHJ5LnJlZ2V4KSB7Ci0gICAgICAgICAgICAgICAgdG9rZW4u
cmVnZXggPSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhdHRlcm46IGVudHJ5LnJlZ2V4LnBhdHRl
cm4sCi0gICAgICAgICAgICAgICAgICAgIGZsYWdzOiBlbnRyeS5yZWdleC5mbGFncwotICAgICAg
ICAgICAgICAgIH07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZXh0cmEucmFuZ2Up
IHsKLSAgICAgICAgICAgICAgICB0b2tlbi5yYW5nZSA9IGVudHJ5LnJhbmdlOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKGV4dHJhLmxvYykgewotICAgICAgICAgICAgICAgIHRva2Vu
LmxvYyA9IGVudHJ5LmxvYzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRva2Vucy5wdXNo
KHRva2VuKTsKLSAgICAgICAgfQotCi0gICAgICAgIGV4dHJhLnRva2VucyA9IHRva2VuczsKLSAg
ICB9Ci0KLSAgICBmdW5jdGlvbiB0b2tlbml6ZShjb2RlLCBvcHRpb25zKSB7Ci0gICAgICAgIHZh
ciB0b1N0cmluZywKLSAgICAgICAgICAgIHRva2VuczsKLQotICAgICAgICB0b1N0cmluZyA9IFN0
cmluZzsKLSAgICAgICAgaWYgKHR5cGVvZiBjb2RlICE9PSAnc3RyaW5nJyAmJiAhKGNvZGUgaW5z
dGFuY2VvZiBTdHJpbmcpKSB7Ci0gICAgICAgICAgICBjb2RlID0gdG9TdHJpbmcoY29kZSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBzb3VyY2UgPSBjb2RlOwotICAgICAgICBpbmRleCA9IDA7Ci0g
ICAgICAgIGxpbmVOdW1iZXIgPSAoc291cmNlLmxlbmd0aCA+IDApID8gMSA6IDA7Ci0gICAgICAg
IGxpbmVTdGFydCA9IDA7Ci0gICAgICAgIHN0YXJ0SW5kZXggPSBpbmRleDsKLSAgICAgICAgc3Rh
cnRMaW5lTnVtYmVyID0gbGluZU51bWJlcjsKLSAgICAgICAgc3RhcnRMaW5lU3RhcnQgPSBsaW5l
U3RhcnQ7Ci0gICAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7Ci0gICAgICAgIGxvb2thaGVh
ZCA9IG51bGw7Ci0gICAgICAgIHN0YXRlID0gewotICAgICAgICAgICAgYWxsb3dJbjogdHJ1ZSwK
LSAgICAgICAgICAgIGFsbG93WWllbGQ6IHRydWUsCi0gICAgICAgICAgICBsYWJlbFNldDoge30s
Ci0gICAgICAgICAgICBpbkZ1bmN0aW9uQm9keTogZmFsc2UsCi0gICAgICAgICAgICBpbkl0ZXJh
dGlvbjogZmFsc2UsCi0gICAgICAgICAgICBpblN3aXRjaDogZmFsc2UsCi0gICAgICAgICAgICBs
YXN0Q29tbWVudFN0YXJ0OiAtMSwKLSAgICAgICAgICAgIGN1cmx5U3RhY2s6IFtdCi0gICAgICAg
IH07Ci0KLSAgICAgICAgZXh0cmEgPSB7fTsKLQotICAgICAgICAvLyBPcHRpb25zIG1hdGNoaW5n
LgotICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKLQotICAgICAgICAvLyBPZiBjb3Vy
c2Ugd2UgY29sbGVjdCB0b2tlbnMgaGVyZS4KLSAgICAgICAgb3B0aW9ucy50b2tlbnMgPSB0cnVl
OwotICAgICAgICBleHRyYS50b2tlbnMgPSBbXTsKLSAgICAgICAgZXh0cmEudG9rZW5pemUgPSB0
cnVlOwotICAgICAgICAvLyBUaGUgZm9sbG93aW5nIHR3byBmaWVsZHMgYXJlIG5lY2Vzc2FyeSB0
byBjb21wdXRlIHRoZSBSZWdleCB0b2tlbnMuCi0gICAgICAgIGV4dHJhLm9wZW5QYXJlblRva2Vu
ID0gLTE7Ci0gICAgICAgIGV4dHJhLm9wZW5DdXJseVRva2VuID0gLTE7Ci0KLSAgICAgICAgZXh0
cmEucmFuZ2UgPSAodHlwZW9mIG9wdGlvbnMucmFuZ2UgPT09ICdib29sZWFuJykgJiYgb3B0aW9u
cy5yYW5nZTsKLSAgICAgICAgZXh0cmEubG9jID0gKHR5cGVvZiBvcHRpb25zLmxvYyA9PT0gJ2Jv
b2xlYW4nKSAmJiBvcHRpb25zLmxvYzsKLQotICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuY29t
bWVudCA9PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMuY29tbWVudCkgewotICAgICAgICAgICAgZXh0
cmEuY29tbWVudHMgPSBbXTsKLSAgICAgICAgfQotICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMu
dG9sZXJhbnQgPT09ICdib29sZWFuJyAmJiBvcHRpb25zLnRvbGVyYW50KSB7Ci0gICAgICAgICAg
ICBleHRyYS5lcnJvcnMgPSBbXTsKLSAgICAgICAgfQotCi0gICAgICAgIHRyeSB7Ci0gICAgICAg
ICAgICBwZWVrKCk7Ci0gICAgICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLkVP
RikgewotICAgICAgICAgICAgICAgIHJldHVybiBleHRyYS50b2tlbnM7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGxleCgpOwotICAgICAgICAgICAgd2hpbGUgKGxvb2thaGVhZC50eXBl
ICE9PSBUb2tlbi5FT0YpIHsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAg
ICAgICBsZXgoKTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChsZXhFcnJvcikgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoZXh0cmEuZXJyb3JzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZWNvcmRFcnJvcihsZXhFcnJvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBo
YXZlIHRvIGJyZWFrIG9uIHRoZSBmaXJzdCBlcnJvcgotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gdG8gYXZvaWQgaW5maW5pdGUgbG9vcHMuCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHRocm93IGxleEVycm9yOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmaWx0ZXJUb2tlbkxvY2F0aW9uKCk7Ci0g
ICAgICAgICAgICB0b2tlbnMgPSBleHRyYS50b2tlbnM7Ci0gICAgICAgICAgICBpZiAodHlwZW9m
IGV4dHJhLmNvbW1lbnRzICE9PSAndW5kZWZpbmVkJykgewotICAgICAgICAgICAgICAgIHRva2Vu
cy5jb21tZW50cyA9IGV4dHJhLmNvbW1lbnRzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKHR5cGVvZiBleHRyYS5lcnJvcnMgIT09ICd1bmRlZmluZWQnKSB7Ci0gICAgICAgICAgICAg
ICAgdG9rZW5zLmVycm9ycyA9IGV4dHJhLmVycm9yczsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSBjYXRjaCAoZSkgewotICAgICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgfSBmaW5hbGx5IHsK
LSAgICAgICAgICAgIGV4dHJhID0ge307Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRva2Vu
czsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBwYXJzZShjb2RlLCBvcHRpb25zKSB7Ci0gICAgICAg
IHZhciBwcm9ncmFtLCB0b1N0cmluZzsKLQotICAgICAgICB0b1N0cmluZyA9IFN0cmluZzsKLSAg
ICAgICAgaWYgKHR5cGVvZiBjb2RlICE9PSAnc3RyaW5nJyAmJiAhKGNvZGUgaW5zdGFuY2VvZiBT
dHJpbmcpKSB7Ci0gICAgICAgICAgICBjb2RlID0gdG9TdHJpbmcoY29kZSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBzb3VyY2UgPSBjb2RlOwotICAgICAgICBpbmRleCA9IDA7Ci0gICAgICAgIGxp
bmVOdW1iZXIgPSAoc291cmNlLmxlbmd0aCA+IDApID8gMSA6IDA7Ci0gICAgICAgIGxpbmVTdGFy
dCA9IDA7Ci0gICAgICAgIHN0YXJ0SW5kZXggPSBpbmRleDsKLSAgICAgICAgc3RhcnRMaW5lTnVt
YmVyID0gbGluZU51bWJlcjsKLSAgICAgICAgc3RhcnRMaW5lU3RhcnQgPSBsaW5lU3RhcnQ7Ci0g
ICAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7Ci0gICAgICAgIGxvb2thaGVhZCA9IG51bGw7
Ci0gICAgICAgIHN0YXRlID0gewotICAgICAgICAgICAgYWxsb3dJbjogdHJ1ZSwKLSAgICAgICAg
ICAgIGFsbG93WWllbGQ6IHRydWUsCi0gICAgICAgICAgICBsYWJlbFNldDoge30sCi0gICAgICAg
ICAgICBpbkZ1bmN0aW9uQm9keTogZmFsc2UsCi0gICAgICAgICAgICBpbkl0ZXJhdGlvbjogZmFs
c2UsCi0gICAgICAgICAgICBpblN3aXRjaDogZmFsc2UsCi0gICAgICAgICAgICBsYXN0Q29tbWVu
dFN0YXJ0OiAtMSwKLSAgICAgICAgICAgIGN1cmx5U3RhY2s6IFtdLAotICAgICAgICAgICAgc291
cmNlVHlwZTogJ3NjcmlwdCcKLSAgICAgICAgfTsKLSAgICAgICAgc3RyaWN0ID0gZmFsc2U7Ci0K
LSAgICAgICAgZXh0cmEgPSB7fTsKLSAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAndW5k
ZWZpbmVkJykgewotICAgICAgICAgICAgZXh0cmEucmFuZ2UgPSAodHlwZW9mIG9wdGlvbnMucmFu
Z2UgPT09ICdib29sZWFuJykgJiYgb3B0aW9ucy5yYW5nZTsKLSAgICAgICAgICAgIGV4dHJhLmxv
YyA9ICh0eXBlb2Ygb3B0aW9ucy5sb2MgPT09ICdib29sZWFuJykgJiYgb3B0aW9ucy5sb2M7Ci0g
ICAgICAgICAgICBleHRyYS5hdHRhY2hDb21tZW50ID0gKHR5cGVvZiBvcHRpb25zLmF0dGFjaENv
bW1lbnQgPT09ICdib29sZWFuJykgJiYgb3B0aW9ucy5hdHRhY2hDb21tZW50OwotCi0gICAgICAg
ICAgICBpZiAoZXh0cmEubG9jICYmIG9wdGlvbnMuc291cmNlICE9PSBudWxsICYmIG9wdGlvbnMu
c291cmNlICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICAgICAgICBleHRyYS5zb3VyY2UgPSB0
b1N0cmluZyhvcHRpb25zLnNvdXJjZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
ICh0eXBlb2Ygb3B0aW9ucy50b2tlbnMgPT09ICdib29sZWFuJyAmJiBvcHRpb25zLnRva2Vucykg
ewotICAgICAgICAgICAgICAgIGV4dHJhLnRva2VucyA9IFtdOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmNvbW1lbnQgPT09ICdib29sZWFuJyAmJiBvcHRp
b25zLmNvbW1lbnQpIHsKLSAgICAgICAgICAgICAgICBleHRyYS5jb21tZW50cyA9IFtdOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRvbGVyYW50ID09PSAn
Ym9vbGVhbicgJiYgb3B0aW9ucy50b2xlcmFudCkgewotICAgICAgICAgICAgICAgIGV4dHJhLmVy
cm9ycyA9IFtdOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGV4dHJhLmF0dGFjaENv
bW1lbnQpIHsKLSAgICAgICAgICAgICAgICBleHRyYS5yYW5nZSA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgZXh0cmEuY29tbWVudHMgPSBbXTsKLSAgICAgICAgICAgICAgICBleHRyYS5ib3R0b21S
aWdodFN0YWNrID0gW107Ci0gICAgICAgICAgICAgICAgZXh0cmEudHJhaWxpbmdDb21tZW50cyA9
IFtdOwotICAgICAgICAgICAgICAgIGV4dHJhLmxlYWRpbmdDb21tZW50cyA9IFtdOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKG9wdGlvbnMuc291cmNlVHlwZSA9PT0gJ21vZHVsZScp
IHsKLSAgICAgICAgICAgICAgICAvLyB2ZXJ5IHJlc3RyaWN0aXZlIGNvbmRpdGlvbiBmb3Igbm93
Ci0gICAgICAgICAgICAgICAgc3RhdGUuc291cmNlVHlwZSA9IG9wdGlvbnMuc291cmNlVHlwZTsK
LSAgICAgICAgICAgICAgICBzdHJpY3QgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHByb2dyYW0gPSBwYXJzZVByb2dyYW0oKTsK
LSAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmEuY29tbWVudHMgIT09ICd1bmRlZmluZWQnKSB7
Ci0gICAgICAgICAgICAgICAgcHJvZ3JhbS5jb21tZW50cyA9IGV4dHJhLmNvbW1lbnRzOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYS50b2tlbnMgIT09ICd1bmRl
ZmluZWQnKSB7Ci0gICAgICAgICAgICAgICAgZmlsdGVyVG9rZW5Mb2NhdGlvbigpOwotICAgICAg
ICAgICAgICAgIHByb2dyYW0udG9rZW5zID0gZXh0cmEudG9rZW5zOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYS5lcnJvcnMgIT09ICd1bmRlZmluZWQnKSB7Ci0g
ICAgICAgICAgICAgICAgcHJvZ3JhbS5lcnJvcnMgPSBleHRyYS5lcnJvcnM7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAg
IH0gZmluYWxseSB7Ci0gICAgICAgICAgICBleHRyYSA9IHt9OwotICAgICAgICB9Ci0KLSAgICAg
ICAgcmV0dXJuIHByb2dyYW07Ci0gICAgfQotCi0gICAgLy8gU3luYyB3aXRoICouanNvbiBtYW5p
ZmVzdHMuCi0gICAgZXhwb3J0cy52ZXJzaW9uID0gJzIuNi4wJzsKLQotICAgIGV4cG9ydHMudG9r
ZW5pemUgPSB0b2tlbml6ZTsKLQotICAgIGV4cG9ydHMucGFyc2UgPSBwYXJzZTsKLQotICAgIC8v
IERlZXAgY29weS4KLSAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLwotICAgIGV4cG9ydHMu
U3ludGF4ID0gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgdmFyIG5hbWUsIHR5cGVzID0ge307Ci0K
LSAgICAgICAgaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7Ci0gICAg
ICAgICAgICB0eXBlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBmb3IgKG5hbWUgaW4gU3ludGF4KSB7Ci0gICAgICAgICAgICBpZiAoU3ludGF4Lmhhc093blBy
b3BlcnR5KG5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgdHlwZXNbbmFtZV0gPSBTeW50YXhbbmFt
ZV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodHlwZW9mIE9iamVj
dC5mcmVlemUgPT09ICdmdW5jdGlvbicpIHsKLSAgICAgICAgICAgIE9iamVjdC5mcmVlemUodHlw
ZXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHR5cGVzOwotICAgIH0oKSk7Ci0KLX0p
KTsKKyhmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0
b3J5KSB7CisvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLworCWlmKHR5cGVvZiBleHBvcnRzID09
PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JykKKwkJbW9kdWxlLmV4cG9y
dHMgPSBmYWN0b3J5KCk7CisJZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYm
IGRlZmluZS5hbWQpCisJCWRlZmluZShbXSwgZmFjdG9yeSk7CisvKiBpc3RhbmJ1bCBpZ25vcmUg
bmV4dCAqLworCWVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKQorCQlleHBvcnRz
WyJlc3ByaW1hIl0gPSBmYWN0b3J5KCk7CisJZWxzZQorCQlyb290WyJlc3ByaW1hIl0gPSBmYWN0
b3J5KCk7Cit9KSh0aGlzLCBmdW5jdGlvbigpIHsKK3JldHVybiAvKioqKioqLyAoZnVuY3Rpb24o
bW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCisvKioqKioqLyAJLy8gVGhlIG1vZHVsZSBj
YWNoZQorLyoqKioqKi8gCXZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307CisKKy8qKioqKiovIAkv
LyBUaGUgcmVxdWlyZSBmdW5jdGlvbgorLyoqKioqKi8gCWZ1bmN0aW9uIF9fd2VicGFja19yZXF1
aXJlX18obW9kdWxlSWQpIHsKKworLyoqKioqKi8gCQkvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4g
Y2FjaGUKKy8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqLworLyoqKioqKi8gCQlpZihpbnN0YWxsZWRN
b2R1bGVzW21vZHVsZUlkXSkKKy8qKioqKiovIAkJCXJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21v
ZHVsZUlkXS5leHBvcnRzOworCisvKioqKioqLyAJCS8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFu
ZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpCisvKioqKioqLyAJCXZhciBtb2R1bGUgPSBpbnN0YWxs
ZWRNb2R1bGVzW21vZHVsZUlkXSA9IHsKKy8qKioqKiovIAkJCWV4cG9ydHM6IHt9LAorLyoqKioq
Ki8gCQkJaWQ6IG1vZHVsZUlkLAorLyoqKioqKi8gCQkJbG9hZGVkOiBmYWxzZQorLyoqKioqKi8g
CQl9OworCisvKioqKioqLyAJCS8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvbgorLyoqKioq
Ki8gCQltb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVs
ZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTsKKworLyoqKioqKi8gCQkvLyBGbGFnIHRo
ZSBtb2R1bGUgYXMgbG9hZGVkCisvKioqKioqLyAJCW1vZHVsZS5sb2FkZWQgPSB0cnVlOworCisv
KioqKioqLyAJCS8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlCisvKioqKioqLyAJ
CXJldHVybiBtb2R1bGUuZXhwb3J0czsKKy8qKioqKiovIAl9CisKKworLyoqKioqKi8gCS8vIGV4
cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pCisvKioqKioqLyAJ
X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlczsKKworLyoqKioqKi8gCS8vIGV4cG9zZSB0
aGUgbW9kdWxlIGNhY2hlCisvKioqKioqLyAJX193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFs
bGVkTW9kdWxlczsKKworLyoqKioqKi8gCS8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fCisvKioq
KioqLyAJX193ZWJwYWNrX3JlcXVpcmVfXy5wID0gIiI7CisKKy8qKioqKiovIAkvLyBMb2FkIGVu
dHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHMKKy8qKioqKiovIAlyZXR1cm4gX193ZWJwYWNr
X3JlcXVpcmVfXygwKTsKKy8qKioqKiovIH0pCisvKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKi8g
KFsKKy8qIDAgKi8KKy8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3Jl
cXVpcmVfXykgeworCisJLyoKKwkgIENvcHlyaWdodCBKUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBj
b250cmlidXRvcnMsIGh0dHBzOi8vanMuZm91bmRhdGlvbi8KKworCSAgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisJICBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlIG1ldDoKKworCSAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisJICAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCSAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisJICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorCSAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKwkgIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMgIkFTIElTIgorCSAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorCSAgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK
KwkgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4g
QkUgTElBQkxFIEZPUiBBTlkKKwkgIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisJICAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisJICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKwkgIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisJICAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKwkgIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisJKi8KKwkidXNlIHN0cmljdCI7CisJdmFyIGNv
bW1lbnRfaGFuZGxlcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTsKKwl2YXIgcGFyc2VyXzEg
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpOworCXZhciBqc3hfcGFyc2VyXzEgPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKDExKTsKKwl2YXIgdG9rZW5pemVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1
KTsKKwlmdW5jdGlvbiBwYXJzZShjb2RlLCBvcHRpb25zLCBkZWxlZ2F0ZSkgeworCSAgICB2YXIg
Y29tbWVudEhhbmRsZXIgPSBudWxsOworCSAgICB2YXIgcHJveHlEZWxlZ2F0ZSA9IGZ1bmN0aW9u
IChub2RlLCBtZXRhZGF0YSkgeworCSAgICAgICAgaWYgKGRlbGVnYXRlKSB7CisJICAgICAgICAg
ICAgZGVsZWdhdGUobm9kZSwgbWV0YWRhdGEpOworCSAgICAgICAgfQorCSAgICAgICAgaWYgKGNv
bW1lbnRIYW5kbGVyKSB7CisJICAgICAgICAgICAgY29tbWVudEhhbmRsZXIudmlzaXQobm9kZSwg
bWV0YWRhdGEpOworCSAgICAgICAgfQorCSAgICB9OworCSAgICB2YXIgcGFyc2VyRGVsZWdhdGUg
PSAodHlwZW9mIGRlbGVnYXRlID09PSAnZnVuY3Rpb24nKSA/IHByb3h5RGVsZWdhdGUgOiBudWxs
OworCSAgICB2YXIgY29sbGVjdENvbW1lbnQgPSBmYWxzZTsKKwkgICAgaWYgKG9wdGlvbnMpIHsK
KwkgICAgICAgIGNvbGxlY3RDb21tZW50ID0gKHR5cGVvZiBvcHRpb25zLmNvbW1lbnQgPT09ICdi
b29sZWFuJyAmJiBvcHRpb25zLmNvbW1lbnQpOworCSAgICAgICAgdmFyIGF0dGFjaENvbW1lbnQg
PSAodHlwZW9mIG9wdGlvbnMuYXR0YWNoQ29tbWVudCA9PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMu
YXR0YWNoQ29tbWVudCk7CisJICAgICAgICBpZiAoY29sbGVjdENvbW1lbnQgfHwgYXR0YWNoQ29t
bWVudCkgeworCSAgICAgICAgICAgIGNvbW1lbnRIYW5kbGVyID0gbmV3IGNvbW1lbnRfaGFuZGxl
cl8xLkNvbW1lbnRIYW5kbGVyKCk7CisJICAgICAgICAgICAgY29tbWVudEhhbmRsZXIuYXR0YWNo
ID0gYXR0YWNoQ29tbWVudDsKKwkgICAgICAgICAgICBvcHRpb25zLmNvbW1lbnQgPSB0cnVlOwor
CSAgICAgICAgICAgIHBhcnNlckRlbGVnYXRlID0gcHJveHlEZWxlZ2F0ZTsKKwkgICAgICAgIH0K
KwkgICAgfQorCSAgICB2YXIgaXNNb2R1bGUgPSBmYWxzZTsKKwkgICAgaWYgKG9wdGlvbnMgJiYg
dHlwZW9mIG9wdGlvbnMuc291cmNlVHlwZSA9PT0gJ3N0cmluZycpIHsKKwkgICAgICAgIGlzTW9k
dWxlID0gKG9wdGlvbnMuc291cmNlVHlwZSA9PT0gJ21vZHVsZScpOworCSAgICB9CisJICAgIHZh
ciBwYXJzZXI7CisJICAgIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLmpzeCA9PT0gJ2Jv
b2xlYW4nICYmIG9wdGlvbnMuanN4KSB7CisJICAgICAgICBwYXJzZXIgPSBuZXcganN4X3BhcnNl
cl8xLkpTWFBhcnNlcihjb2RlLCBvcHRpb25zLCBwYXJzZXJEZWxlZ2F0ZSk7CisJICAgIH0KKwkg
ICAgZWxzZSB7CisJICAgICAgICBwYXJzZXIgPSBuZXcgcGFyc2VyXzEuUGFyc2VyKGNvZGUsIG9w
dGlvbnMsIHBhcnNlckRlbGVnYXRlKTsKKwkgICAgfQorCSAgICB2YXIgcHJvZ3JhbSA9IGlzTW9k
dWxlID8gcGFyc2VyLnBhcnNlTW9kdWxlKCkgOiBwYXJzZXIucGFyc2VTY3JpcHQoKTsKKwkgICAg
dmFyIGFzdCA9IChwcm9ncmFtKTsKKwkgICAgaWYgKGNvbGxlY3RDb21tZW50ICYmIGNvbW1lbnRI
YW5kbGVyKSB7CisJICAgICAgICBhc3QuY29tbWVudHMgPSBjb21tZW50SGFuZGxlci5jb21tZW50
czsKKwkgICAgfQorCSAgICBpZiAocGFyc2VyLmNvbmZpZy50b2tlbnMpIHsKKwkgICAgICAgIGFz
dC50b2tlbnMgPSBwYXJzZXIudG9rZW5zOworCSAgICB9CisJICAgIGlmIChwYXJzZXIuY29uZmln
LnRvbGVyYW50KSB7CisJICAgICAgICBhc3QuZXJyb3JzID0gcGFyc2VyLmVycm9ySGFuZGxlci5l
cnJvcnM7CisJICAgIH0KKwkgICAgcmV0dXJuIGFzdDsKKwl9CisJZXhwb3J0cy5wYXJzZSA9IHBh
cnNlOworCWZ1bmN0aW9uIHBhcnNlTW9kdWxlKGNvZGUsIG9wdGlvbnMsIGRlbGVnYXRlKSB7CisJ
ICAgIHZhciBwYXJzaW5nT3B0aW9ucyA9IG9wdGlvbnMgfHwge307CisJICAgIHBhcnNpbmdPcHRp
b25zLnNvdXJjZVR5cGUgPSAnbW9kdWxlJzsKKwkgICAgcmV0dXJuIHBhcnNlKGNvZGUsIHBhcnNp
bmdPcHRpb25zLCBkZWxlZ2F0ZSk7CisJfQorCWV4cG9ydHMucGFyc2VNb2R1bGUgPSBwYXJzZU1v
ZHVsZTsKKwlmdW5jdGlvbiBwYXJzZVNjcmlwdChjb2RlLCBvcHRpb25zLCBkZWxlZ2F0ZSkgewor
CSAgICB2YXIgcGFyc2luZ09wdGlvbnMgPSBvcHRpb25zIHx8IHt9OworCSAgICBwYXJzaW5nT3B0
aW9ucy5zb3VyY2VUeXBlID0gJ3NjcmlwdCc7CisJICAgIHJldHVybiBwYXJzZShjb2RlLCBwYXJz
aW5nT3B0aW9ucywgZGVsZWdhdGUpOworCX0KKwlleHBvcnRzLnBhcnNlU2NyaXB0ID0gcGFyc2VT
Y3JpcHQ7CisJZnVuY3Rpb24gdG9rZW5pemUoY29kZSwgb3B0aW9ucywgZGVsZWdhdGUpIHsKKwkg
ICAgdmFyIHRva2VuaXplciA9IG5ldyB0b2tlbml6ZXJfMS5Ub2tlbml6ZXIoY29kZSwgb3B0aW9u
cyk7CisJICAgIHZhciB0b2tlbnM7CisJICAgIHRva2VucyA9IFtdOworCSAgICB0cnkgeworCSAg
ICAgICAgd2hpbGUgKHRydWUpIHsKKwkgICAgICAgICAgICB2YXIgdG9rZW4gPSB0b2tlbml6ZXIu
Z2V0TmV4dFRva2VuKCk7CisJICAgICAgICAgICAgaWYgKCF0b2tlbikgeworCSAgICAgICAgICAg
ICAgICBicmVhazsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgaWYgKGRlbGVnYXRlKSB7
CisJICAgICAgICAgICAgICAgIHRva2VuID0gZGVsZWdhdGUodG9rZW4pOworCSAgICAgICAgICAg
IH0KKwkgICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7CisJICAgICAgICB9CisJICAgIH0K
KwkgICAgY2F0Y2ggKGUpIHsKKwkgICAgICAgIHRva2VuaXplci5lcnJvckhhbmRsZXIudG9sZXJh
dGUoZSk7CisJICAgIH0KKwkgICAgaWYgKHRva2VuaXplci5lcnJvckhhbmRsZXIudG9sZXJhbnQp
IHsKKwkgICAgICAgIHRva2Vucy5lcnJvcnMgPSB0b2tlbml6ZXIuZXJyb3JzKCk7CisJICAgIH0K
KwkgICAgcmV0dXJuIHRva2VuczsKKwl9CisJZXhwb3J0cy50b2tlbml6ZSA9IHRva2VuaXplOwor
CXZhciBzeW50YXhfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMik7CisJZXhwb3J0cy5TeW50YXgg
PSBzeW50YXhfMS5TeW50YXg7CisJLy8gU3luYyB3aXRoICouanNvbiBtYW5pZmVzdHMuCisJZXhw
b3J0cy52ZXJzaW9uID0gJzQuMC4wLWRldic7CisKKworLyoqKi8gfSwKKy8qIDEgKi8KKy8qKiov
IGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisJInVz
ZSBzdHJpY3QiOworCXZhciBzeW50YXhfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMik7CisJdmFy
IENvbW1lbnRIYW5kbGVyID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gQ29tbWVudEhh
bmRsZXIoKSB7CisJICAgICAgICB0aGlzLmF0dGFjaCA9IGZhbHNlOworCSAgICAgICAgdGhpcy5j
b21tZW50cyA9IFtdOworCSAgICAgICAgdGhpcy5zdGFjayA9IFtdOworCSAgICAgICAgdGhpcy5s
ZWFkaW5nID0gW107CisJICAgICAgICB0aGlzLnRyYWlsaW5nID0gW107CisJICAgIH0KKwkgICAg
Q29tbWVudEhhbmRsZXIucHJvdG90eXBlLmluc2VydElubmVyQ29tbWVudHMgPSBmdW5jdGlvbiAo
bm9kZSwgbWV0YWRhdGEpIHsKKwkgICAgICAgIC8vICBpbm5uZXJDb21tZW50cyBmb3IgcHJvcGVy
dGllcyBlbXB0eSBibG9jaworCSAgICAgICAgLy8gIGBmdW5jdGlvbiBhKCkgey8qKiBjb21tZW50
cyAqKlwvfWAKKwkgICAgICAgIGlmIChub2RlLnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5CbG9j
a1N0YXRlbWVudCAmJiBub2RlLmJvZHkubGVuZ3RoID09PSAwKSB7CisJICAgICAgICAgICAgdmFy
IGlubmVyQ29tbWVudHMgPSBbXTsKKwkgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5sZWFk
aW5nLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisJICAgICAgICAgICAgICAgIHZhciBlbnRy
eSA9IHRoaXMubGVhZGluZ1tpXTsKKwkgICAgICAgICAgICAgICAgaWYgKG1ldGFkYXRhLmVuZC5v
ZmZzZXQgPj0gZW50cnkuc3RhcnQpIHsKKwkgICAgICAgICAgICAgICAgICAgIGlubmVyQ29tbWVu
dHMudW5zaGlmdChlbnRyeS5jb21tZW50KTsKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMubGVh
ZGluZy5zcGxpY2UoaSwgMSk7CisJICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYWlsaW5nLnNw
bGljZShpLCAxKTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAg
ICAgICBpZiAoaW5uZXJDb21tZW50cy5sZW5ndGgpIHsKKwkgICAgICAgICAgICAgICAgbm9kZS5p
bm5lckNvbW1lbnRzID0gaW5uZXJDb21tZW50czsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9
CisJICAgIH07CisJICAgIENvbW1lbnRIYW5kbGVyLnByb3RvdHlwZS5maW5kVHJhaWxpbmdDb21t
ZW50cyA9IGZ1bmN0aW9uIChtZXRhZGF0YSkgeworCSAgICAgICAgdmFyIHRyYWlsaW5nQ29tbWVu
dHMgPSBbXTsKKwkgICAgICAgIGlmICh0aGlzLnRyYWlsaW5nLmxlbmd0aCA+IDApIHsKKwkgICAg
ICAgICAgICBmb3IgKHZhciBpID0gdGhpcy50cmFpbGluZy5sZW5ndGggLSAxOyBpID49IDA7IC0t
aSkgeworCSAgICAgICAgICAgICAgICB2YXIgZW50cnlfMSA9IHRoaXMudHJhaWxpbmdbaV07CisJ
ICAgICAgICAgICAgICAgIGlmIChlbnRyeV8xLnN0YXJ0ID49IG1ldGFkYXRhLmVuZC5vZmZzZXQp
IHsKKwkgICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nQ29tbWVudHMudW5zaGlmdChlbnRyeV8x
LmNvbW1lbnQpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQorCSAgICAgICAg
ICAgIHRoaXMudHJhaWxpbmcubGVuZ3RoID0gMDsKKwkgICAgICAgICAgICByZXR1cm4gdHJhaWxp
bmdDb21tZW50czsKKwkgICAgICAgIH0KKwkgICAgICAgIHZhciBlbnRyeSA9IHRoaXMuc3RhY2tb
dGhpcy5zdGFjay5sZW5ndGggLSAxXTsKKwkgICAgICAgIGlmIChlbnRyeSAmJiBlbnRyeS5ub2Rl
LnRyYWlsaW5nQ29tbWVudHMpIHsKKwkgICAgICAgICAgICB2YXIgZmlyc3RDb21tZW50ID0gZW50
cnkubm9kZS50cmFpbGluZ0NvbW1lbnRzWzBdOworCSAgICAgICAgICAgIGlmIChmaXJzdENvbW1l
bnQgJiYgZmlyc3RDb21tZW50LnJhbmdlWzBdID49IG1ldGFkYXRhLmVuZC5vZmZzZXQpIHsKKwkg
ICAgICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50cyA9IGVudHJ5Lm5vZGUudHJhaWxpbmdDb21t
ZW50czsKKwkgICAgICAgICAgICAgICAgZGVsZXRlIGVudHJ5Lm5vZGUudHJhaWxpbmdDb21tZW50
czsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gdHJhaWxpbmdD
b21tZW50czsKKwkgICAgfTsKKwkgICAgQ29tbWVudEhhbmRsZXIucHJvdG90eXBlLmZpbmRMZWFk
aW5nQ29tbWVudHMgPSBmdW5jdGlvbiAobWV0YWRhdGEpIHsKKwkgICAgICAgIHZhciBsZWFkaW5n
Q29tbWVudHMgPSBbXTsKKwkgICAgICAgIHZhciB0YXJnZXQ7CisJICAgICAgICB3aGlsZSAodGhp
cy5zdGFjay5sZW5ndGggPiAwKSB7CisJICAgICAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5zdGFj
a1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOworCSAgICAgICAgICAgIGlmIChlbnRyeSAmJiBlbnRy
eS5zdGFydCA+PSBtZXRhZGF0YS5zdGFydC5vZmZzZXQpIHsKKwkgICAgICAgICAgICAgICAgdGFy
Z2V0ID0gZW50cnkubm9kZTsKKwkgICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wb3AoKTsKKwkg
ICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgIGJyZWFr
OworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIGlmICh0YXJnZXQpIHsKKwkg
ICAgICAgICAgICB2YXIgY291bnQgPSB0YXJnZXQubGVhZGluZ0NvbW1lbnRzID8gdGFyZ2V0Lmxl
YWRpbmdDb21tZW50cy5sZW5ndGggOiAwOworCSAgICAgICAgICAgIGZvciAodmFyIGkgPSBjb3Vu
dCAtIDE7IGkgPj0gMDsgLS1pKSB7CisJICAgICAgICAgICAgICAgIHZhciBjb21tZW50ID0gdGFy
Z2V0LmxlYWRpbmdDb21tZW50c1tpXTsKKwkgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQucmFu
Z2VbMV0gPD0gbWV0YWRhdGEuc3RhcnQub2Zmc2V0KSB7CisJICAgICAgICAgICAgICAgICAgICBs
ZWFkaW5nQ29tbWVudHMudW5zaGlmdChjb21tZW50KTsKKwkgICAgICAgICAgICAgICAgICAgIHRh
cmdldC5sZWFkaW5nQ29tbWVudHMuc3BsaWNlKGksIDEpOworCSAgICAgICAgICAgICAgICB9CisJ
ICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGlmICh0YXJnZXQubGVhZGluZ0NvbW1lbnRzICYm
IHRhcmdldC5sZWFkaW5nQ29tbWVudHMubGVuZ3RoID09PSAwKSB7CisJICAgICAgICAgICAgICAg
IGRlbGV0ZSB0YXJnZXQubGVhZGluZ0NvbW1lbnRzOworCSAgICAgICAgICAgIH0KKwkgICAgICAg
ICAgICByZXR1cm4gbGVhZGluZ0NvbW1lbnRzOworCSAgICAgICAgfQorCSAgICAgICAgZm9yICh2
YXIgaSA9IHRoaXMubGVhZGluZy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgeworCSAgICAgICAg
ICAgIHZhciBlbnRyeSA9IHRoaXMubGVhZGluZ1tpXTsKKwkgICAgICAgICAgICBpZiAoZW50cnku
c3RhcnQgPD0gbWV0YWRhdGEuc3RhcnQub2Zmc2V0KSB7CisJICAgICAgICAgICAgICAgIGxlYWRp
bmdDb21tZW50cy51bnNoaWZ0KGVudHJ5LmNvbW1lbnQpOworCSAgICAgICAgICAgICAgICB0aGlz
LmxlYWRpbmcuc3BsaWNlKGksIDEpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAg
ICAgIHJldHVybiBsZWFkaW5nQ29tbWVudHM7CisJICAgIH07CisJICAgIENvbW1lbnRIYW5kbGVy
LnByb3RvdHlwZS52aXNpdE5vZGUgPSBmdW5jdGlvbiAobm9kZSwgbWV0YWRhdGEpIHsKKwkgICAg
ICAgIGlmIChub2RlLnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5Qcm9ncmFtICYmIG5vZGUuYm9k
eS5sZW5ndGggPiAwKSB7CisJICAgICAgICAgICAgcmV0dXJuOworCSAgICAgICAgfQorCSAgICAg
ICAgdGhpcy5pbnNlcnRJbm5lckNvbW1lbnRzKG5vZGUsIG1ldGFkYXRhKTsKKwkgICAgICAgIHZh
ciB0cmFpbGluZ0NvbW1lbnRzID0gdGhpcy5maW5kVHJhaWxpbmdDb21tZW50cyhtZXRhZGF0YSk7
CisJICAgICAgICB2YXIgbGVhZGluZ0NvbW1lbnRzID0gdGhpcy5maW5kTGVhZGluZ0NvbW1lbnRz
KG1ldGFkYXRhKTsKKwkgICAgICAgIGlmIChsZWFkaW5nQ29tbWVudHMubGVuZ3RoID4gMCkgewor
CSAgICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gbGVhZGluZ0NvbW1lbnRzOworCSAg
ICAgICAgfQorCSAgICAgICAgaWYgKHRyYWlsaW5nQ29tbWVudHMubGVuZ3RoID4gMCkgeworCSAg
ICAgICAgICAgIG5vZGUudHJhaWxpbmdDb21tZW50cyA9IHRyYWlsaW5nQ29tbWVudHM7CisJICAg
ICAgICB9CisJICAgICAgICB0aGlzLnN0YWNrLnB1c2goeworCSAgICAgICAgICAgIG5vZGU6IG5v
ZGUsCisJICAgICAgICAgICAgc3RhcnQ6IG1ldGFkYXRhLnN0YXJ0Lm9mZnNldAorCSAgICAgICAg
fSk7CisJICAgIH07CisJICAgIENvbW1lbnRIYW5kbGVyLnByb3RvdHlwZS52aXNpdENvbW1lbnQg
PSBmdW5jdGlvbiAobm9kZSwgbWV0YWRhdGEpIHsKKwkgICAgICAgIHZhciB0eXBlID0gKG5vZGUu
dHlwZVswXSA9PT0gJ0wnKSA/ICdMaW5lJyA6ICdCbG9jayc7CisJICAgICAgICB2YXIgY29tbWVu
dCA9IHsKKwkgICAgICAgICAgICB0eXBlOiB0eXBlLAorCSAgICAgICAgICAgIHZhbHVlOiBub2Rl
LnZhbHVlCisJICAgICAgICB9OworCSAgICAgICAgaWYgKG5vZGUucmFuZ2UpIHsKKwkgICAgICAg
ICAgICBjb21tZW50LnJhbmdlID0gbm9kZS5yYW5nZTsKKwkgICAgICAgIH0KKwkgICAgICAgIGlm
IChub2RlLmxvYykgeworCSAgICAgICAgICAgIGNvbW1lbnQubG9jID0gbm9kZS5sb2M7CisJICAg
ICAgICB9CisJICAgICAgICB0aGlzLmNvbW1lbnRzLnB1c2goY29tbWVudCk7CisJICAgICAgICBp
ZiAodGhpcy5hdHRhY2gpIHsKKwkgICAgICAgICAgICB2YXIgZW50cnkgPSB7CisJICAgICAgICAg
ICAgICAgIGNvbW1lbnQ6IHsKKwkgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsCisJICAg
ICAgICAgICAgICAgICAgICB2YWx1ZTogbm9kZS52YWx1ZSwKKwkgICAgICAgICAgICAgICAgICAg
IHJhbmdlOiBbbWV0YWRhdGEuc3RhcnQub2Zmc2V0LCBtZXRhZGF0YS5lbmQub2Zmc2V0XQorCSAg
ICAgICAgICAgICAgICB9LAorCSAgICAgICAgICAgICAgICBzdGFydDogbWV0YWRhdGEuc3RhcnQu
b2Zmc2V0CisJICAgICAgICAgICAgfTsKKwkgICAgICAgICAgICBpZiAobm9kZS5sb2MpIHsKKwkg
ICAgICAgICAgICAgICAgZW50cnkuY29tbWVudC5sb2MgPSBub2RlLmxvYzsKKwkgICAgICAgICAg
ICB9CisJICAgICAgICAgICAgbm9kZS50eXBlID0gdHlwZTsKKwkgICAgICAgICAgICB0aGlzLmxl
YWRpbmcucHVzaChlbnRyeSk7CisJICAgICAgICAgICAgdGhpcy50cmFpbGluZy5wdXNoKGVudHJ5
KTsKKwkgICAgICAgIH0KKwkgICAgfTsKKwkgICAgQ29tbWVudEhhbmRsZXIucHJvdG90eXBlLnZp
c2l0ID0gZnVuY3Rpb24gKG5vZGUsIG1ldGFkYXRhKSB7CisJICAgICAgICBpZiAobm9kZS50eXBl
ID09PSAnTGluZUNvbW1lbnQnKSB7CisJICAgICAgICAgICAgdGhpcy52aXNpdENvbW1lbnQobm9k
ZSwgbWV0YWRhdGEpOworCSAgICAgICAgfQorCSAgICAgICAgZWxzZSBpZiAobm9kZS50eXBlID09
PSAnQmxvY2tDb21tZW50JykgeworCSAgICAgICAgICAgIHRoaXMudmlzaXRDb21tZW50KG5vZGUs
IG1ldGFkYXRhKTsKKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgaWYgKHRoaXMuYXR0YWNoKSB7
CisJICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZSwgbWV0YWRhdGEpOworCSAgICAgICAg
fQorCSAgICB9OworCSAgICByZXR1cm4gQ29tbWVudEhhbmRsZXI7CisJfSgpKTsKKwlleHBvcnRz
LkNvbW1lbnRIYW5kbGVyID0gQ29tbWVudEhhbmRsZXI7CisKKworLyoqKi8gfSwKKy8qIDIgKi8K
Ky8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgeworCisJInVzZSBzdHJpY3QiOworCWV4
cG9ydHMuU3ludGF4ID0geworCSAgICBBc3NpZ25tZW50RXhwcmVzc2lvbjogJ0Fzc2lnbm1lbnRF
eHByZXNzaW9uJywKKwkgICAgQXNzaWdubWVudFBhdHRlcm46ICdBc3NpZ25tZW50UGF0dGVybics
CisJICAgIEFycmF5RXhwcmVzc2lvbjogJ0FycmF5RXhwcmVzc2lvbicsCisJICAgIEFycmF5UGF0
dGVybjogJ0FycmF5UGF0dGVybicsCisJICAgIEFycm93RnVuY3Rpb25FeHByZXNzaW9uOiAnQXJy
b3dGdW5jdGlvbkV4cHJlc3Npb24nLAorCSAgICBBd2FpdEV4cHJlc3Npb246ICdBd2FpdEV4cHJl
c3Npb24nLAorCSAgICBCbG9ja1N0YXRlbWVudDogJ0Jsb2NrU3RhdGVtZW50JywKKwkgICAgQmlu
YXJ5RXhwcmVzc2lvbjogJ0JpbmFyeUV4cHJlc3Npb24nLAorCSAgICBCcmVha1N0YXRlbWVudDog
J0JyZWFrU3RhdGVtZW50JywKKwkgICAgQ2FsbEV4cHJlc3Npb246ICdDYWxsRXhwcmVzc2lvbics
CisJICAgIENhdGNoQ2xhdXNlOiAnQ2F0Y2hDbGF1c2UnLAorCSAgICBDbGFzc0JvZHk6ICdDbGFz
c0JvZHknLAorCSAgICBDbGFzc0RlY2xhcmF0aW9uOiAnQ2xhc3NEZWNsYXJhdGlvbicsCisJICAg
IENsYXNzRXhwcmVzc2lvbjogJ0NsYXNzRXhwcmVzc2lvbicsCisJICAgIENvbmRpdGlvbmFsRXhw
cmVzc2lvbjogJ0NvbmRpdGlvbmFsRXhwcmVzc2lvbicsCisJICAgIENvbnRpbnVlU3RhdGVtZW50
OiAnQ29udGludWVTdGF0ZW1lbnQnLAorCSAgICBEb1doaWxlU3RhdGVtZW50OiAnRG9XaGlsZVN0
YXRlbWVudCcsCisJICAgIERlYnVnZ2VyU3RhdGVtZW50OiAnRGVidWdnZXJTdGF0ZW1lbnQnLAor
CSAgICBFbXB0eVN0YXRlbWVudDogJ0VtcHR5U3RhdGVtZW50JywKKwkgICAgRXhwb3J0QWxsRGVj
bGFyYXRpb246ICdFeHBvcnRBbGxEZWNsYXJhdGlvbicsCisJICAgIEV4cG9ydERlZmF1bHREZWNs
YXJhdGlvbjogJ0V4cG9ydERlZmF1bHREZWNsYXJhdGlvbicsCisJICAgIEV4cG9ydE5hbWVkRGVj
bGFyYXRpb246ICdFeHBvcnROYW1lZERlY2xhcmF0aW9uJywKKwkgICAgRXhwb3J0U3BlY2lmaWVy
OiAnRXhwb3J0U3BlY2lmaWVyJywKKwkgICAgRXhwcmVzc2lvblN0YXRlbWVudDogJ0V4cHJlc3Np
b25TdGF0ZW1lbnQnLAorCSAgICBGb3JTdGF0ZW1lbnQ6ICdGb3JTdGF0ZW1lbnQnLAorCSAgICBG
b3JPZlN0YXRlbWVudDogJ0Zvck9mU3RhdGVtZW50JywKKwkgICAgRm9ySW5TdGF0ZW1lbnQ6ICdG
b3JJblN0YXRlbWVudCcsCisJICAgIEZ1bmN0aW9uRGVjbGFyYXRpb246ICdGdW5jdGlvbkRlY2xh
cmF0aW9uJywKKwkgICAgRnVuY3Rpb25FeHByZXNzaW9uOiAnRnVuY3Rpb25FeHByZXNzaW9uJywK
KwkgICAgSWRlbnRpZmllcjogJ0lkZW50aWZpZXInLAorCSAgICBJZlN0YXRlbWVudDogJ0lmU3Rh
dGVtZW50JywKKwkgICAgSW1wb3J0RGVjbGFyYXRpb246ICdJbXBvcnREZWNsYXJhdGlvbicsCisJ
ICAgIEltcG9ydERlZmF1bHRTcGVjaWZpZXI6ICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJywKKwkg
ICAgSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyOiAnSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyJywK
KwkgICAgSW1wb3J0U3BlY2lmaWVyOiAnSW1wb3J0U3BlY2lmaWVyJywKKwkgICAgTGl0ZXJhbDog
J0xpdGVyYWwnLAorCSAgICBMYWJlbGVkU3RhdGVtZW50OiAnTGFiZWxlZFN0YXRlbWVudCcsCisJ
ICAgIExvZ2ljYWxFeHByZXNzaW9uOiAnTG9naWNhbEV4cHJlc3Npb24nLAorCSAgICBNZW1iZXJF
eHByZXNzaW9uOiAnTWVtYmVyRXhwcmVzc2lvbicsCisJICAgIE1ldGFQcm9wZXJ0eTogJ01ldGFQ
cm9wZXJ0eScsCisJICAgIE1ldGhvZERlZmluaXRpb246ICdNZXRob2REZWZpbml0aW9uJywKKwkg
ICAgTmV3RXhwcmVzc2lvbjogJ05ld0V4cHJlc3Npb24nLAorCSAgICBPYmplY3RFeHByZXNzaW9u
OiAnT2JqZWN0RXhwcmVzc2lvbicsCisJICAgIE9iamVjdFBhdHRlcm46ICdPYmplY3RQYXR0ZXJu
JywKKwkgICAgUHJvZ3JhbTogJ1Byb2dyYW0nLAorCSAgICBQcm9wZXJ0eTogJ1Byb3BlcnR5JywK
KwkgICAgUmVzdEVsZW1lbnQ6ICdSZXN0RWxlbWVudCcsCisJICAgIFJldHVyblN0YXRlbWVudDog
J1JldHVyblN0YXRlbWVudCcsCisJICAgIFNlcXVlbmNlRXhwcmVzc2lvbjogJ1NlcXVlbmNlRXhw
cmVzc2lvbicsCisJICAgIFNwcmVhZEVsZW1lbnQ6ICdTcHJlYWRFbGVtZW50JywKKwkgICAgU3Vw
ZXI6ICdTdXBlcicsCisJICAgIFN3aXRjaENhc2U6ICdTd2l0Y2hDYXNlJywKKwkgICAgU3dpdGNo
U3RhdGVtZW50OiAnU3dpdGNoU3RhdGVtZW50JywKKwkgICAgVGFnZ2VkVGVtcGxhdGVFeHByZXNz
aW9uOiAnVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uJywKKwkgICAgVGVtcGxhdGVFbGVtZW50OiAn
VGVtcGxhdGVFbGVtZW50JywKKwkgICAgVGVtcGxhdGVMaXRlcmFsOiAnVGVtcGxhdGVMaXRlcmFs
JywKKwkgICAgVGhpc0V4cHJlc3Npb246ICdUaGlzRXhwcmVzc2lvbicsCisJICAgIFRocm93U3Rh
dGVtZW50OiAnVGhyb3dTdGF0ZW1lbnQnLAorCSAgICBUcnlTdGF0ZW1lbnQ6ICdUcnlTdGF0ZW1l
bnQnLAorCSAgICBVbmFyeUV4cHJlc3Npb246ICdVbmFyeUV4cHJlc3Npb24nLAorCSAgICBVcGRh
dGVFeHByZXNzaW9uOiAnVXBkYXRlRXhwcmVzc2lvbicsCisJICAgIFZhcmlhYmxlRGVjbGFyYXRp
b246ICdWYXJpYWJsZURlY2xhcmF0aW9uJywKKwkgICAgVmFyaWFibGVEZWNsYXJhdG9yOiAnVmFy
aWFibGVEZWNsYXJhdG9yJywKKwkgICAgV2hpbGVTdGF0ZW1lbnQ6ICdXaGlsZVN0YXRlbWVudCcs
CisJICAgIFdpdGhTdGF0ZW1lbnQ6ICdXaXRoU3RhdGVtZW50JywKKwkgICAgWWllbGRFeHByZXNz
aW9uOiAnWWllbGRFeHByZXNzaW9uJworCX07CisKKworLyoqKi8gfSwKKy8qIDMgKi8KKy8qKiov
IGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisJInVz
ZSBzdHJpY3QiOworCXZhciBhc3NlcnRfMSA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7CisJdmFy
IG1lc3NhZ2VzXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpOworCXZhciBlcnJvcl9oYW5kbGVy
XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpOworCXZhciB0b2tlbl8xID0gX193ZWJwYWNrX3Jl
cXVpcmVfXyg3KTsKKwl2YXIgc2Nhbm5lcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTsKKwl2
YXIgc3ludGF4XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpOworCXZhciBOb2RlID0gX193ZWJw
YWNrX3JlcXVpcmVfXygxMCk7CisJdmFyIEFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIgPSAnQXJy
b3dQYXJhbWV0ZXJQbGFjZUhvbGRlcic7CisJdmFyIFBhcnNlciA9IChmdW5jdGlvbiAoKSB7CisJ
ICAgIGZ1bmN0aW9uIFBhcnNlcihjb2RlLCBvcHRpb25zLCBkZWxlZ2F0ZSkgeworCSAgICAgICAg
aWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH0KKwkgICAgICAgIHRoaXMu
Y29uZmlnID0geworCSAgICAgICAgICAgIHJhbmdlOiAodHlwZW9mIG9wdGlvbnMucmFuZ2UgPT09
ICdib29sZWFuJykgJiYgb3B0aW9ucy5yYW5nZSwKKwkgICAgICAgICAgICBsb2M6ICh0eXBlb2Yg
b3B0aW9ucy5sb2MgPT09ICdib29sZWFuJykgJiYgb3B0aW9ucy5sb2MsCisJICAgICAgICAgICAg
c291cmNlOiBudWxsLAorCSAgICAgICAgICAgIHRva2VuczogKHR5cGVvZiBvcHRpb25zLnRva2Vu
cyA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLnRva2VucywKKwkgICAgICAgICAgICBjb21tZW50
OiAodHlwZW9mIG9wdGlvbnMuY29tbWVudCA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLmNvbW1l
bnQsCisJICAgICAgICAgICAgdG9sZXJhbnQ6ICh0eXBlb2Ygb3B0aW9ucy50b2xlcmFudCA9PT0g
J2Jvb2xlYW4nKSAmJiBvcHRpb25zLnRvbGVyYW50CisJICAgICAgICB9OworCSAgICAgICAgaWYg
KHRoaXMuY29uZmlnLmxvYyAmJiBvcHRpb25zLnNvdXJjZSAmJiBvcHRpb25zLnNvdXJjZSAhPT0g
bnVsbCkgeworCSAgICAgICAgICAgIHRoaXMuY29uZmlnLnNvdXJjZSA9IFN0cmluZyhvcHRpb25z
LnNvdXJjZSk7CisJICAgICAgICB9CisJICAgICAgICB0aGlzLmRlbGVnYXRlID0gZGVsZWdhdGU7
CisJICAgICAgICB0aGlzLmVycm9ySGFuZGxlciA9IG5ldyBlcnJvcl9oYW5kbGVyXzEuRXJyb3JI
YW5kbGVyKCk7CisJICAgICAgICB0aGlzLmVycm9ySGFuZGxlci50b2xlcmFudCA9IHRoaXMuY29u
ZmlnLnRvbGVyYW50OworCSAgICAgICAgdGhpcy5zY2FubmVyID0gbmV3IHNjYW5uZXJfMS5TY2Fu
bmVyKGNvZGUsIHRoaXMuZXJyb3JIYW5kbGVyKTsKKwkgICAgICAgIHRoaXMuc2Nhbm5lci50cmFj
a0NvbW1lbnQgPSB0aGlzLmNvbmZpZy5jb21tZW50OworCSAgICAgICAgdGhpcy5vcGVyYXRvclBy
ZWNlZGVuY2UgPSB7CisJICAgICAgICAgICAgJyknOiAwLAorCSAgICAgICAgICAgICc7JzogMCwK
KwkgICAgICAgICAgICAnLCc6IDAsCisJICAgICAgICAgICAgJz0nOiAwLAorCSAgICAgICAgICAg
ICddJzogMCwKKwkgICAgICAgICAgICAnfHwnOiAxLAorCSAgICAgICAgICAgICcmJic6IDIsCisJ
ICAgICAgICAgICAgJ3wnOiAzLAorCSAgICAgICAgICAgICdeJzogNCwKKwkgICAgICAgICAgICAn
Jic6IDUsCisJICAgICAgICAgICAgJz09JzogNiwKKwkgICAgICAgICAgICAnIT0nOiA2LAorCSAg
ICAgICAgICAgICc9PT0nOiA2LAorCSAgICAgICAgICAgICchPT0nOiA2LAorCSAgICAgICAgICAg
ICc8JzogNywKKwkgICAgICAgICAgICAnPic6IDcsCisJICAgICAgICAgICAgJzw9JzogNywKKwkg
ICAgICAgICAgICAnPj0nOiA3LAorCSAgICAgICAgICAgICc8PCc6IDgsCisJICAgICAgICAgICAg
Jz4+JzogOCwKKwkgICAgICAgICAgICAnPj4+JzogOCwKKwkgICAgICAgICAgICAnKyc6IDksCisJ
ICAgICAgICAgICAgJy0nOiA5LAorCSAgICAgICAgICAgICcqJzogMTEsCisJICAgICAgICAgICAg
Jy8nOiAxMSwKKwkgICAgICAgICAgICAnJSc6IDExCisJICAgICAgICB9OworCSAgICAgICAgdGhp
cy5sb29rYWhlYWQgPSBudWxsOworCSAgICAgICAgdGhpcy5oYXNMaW5lVGVybWluYXRvciA9IGZh
bHNlOworCSAgICAgICAgdGhpcy5jb250ZXh0ID0geworCSAgICAgICAgICAgIGlzTW9kdWxlOiBm
YWxzZSwKKwkgICAgICAgICAgICBhd2FpdDogZmFsc2UsCisJICAgICAgICAgICAgYWxsb3dJbjog
dHJ1ZSwKKwkgICAgICAgICAgICBhbGxvd1lpZWxkOiB0cnVlLAorCSAgICAgICAgICAgIGZpcnN0
Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvcjogbnVsbCwKKwkgICAgICAgICAgICBpc0Fzc2lnbm1l
bnRUYXJnZXQ6IGZhbHNlLAorCSAgICAgICAgICAgIGlzQmluZGluZ0VsZW1lbnQ6IGZhbHNlLAor
CSAgICAgICAgICAgIGluRnVuY3Rpb25Cb2R5OiBmYWxzZSwKKwkgICAgICAgICAgICBpbkl0ZXJh
dGlvbjogZmFsc2UsCisJICAgICAgICAgICAgaW5Td2l0Y2g6IGZhbHNlLAorCSAgICAgICAgICAg
IGxhYmVsU2V0OiB7fSwKKwkgICAgICAgICAgICBzdHJpY3Q6IGZhbHNlCisJICAgICAgICB9Owor
CSAgICAgICAgdGhpcy50b2tlbnMgPSBbXTsKKwkgICAgICAgIHRoaXMuc3RhcnRNYXJrZXIgPSB7
CisJICAgICAgICAgICAgaW5kZXg6IDAsCisJICAgICAgICAgICAgbGluZU51bWJlcjogdGhpcy5z
Y2FubmVyLmxpbmVOdW1iZXIsCisJICAgICAgICAgICAgbGluZVN0YXJ0OiAwCisJICAgICAgICB9
OworCSAgICAgICAgdGhpcy5sYXN0TWFya2VyID0geworCSAgICAgICAgICAgIGluZGV4OiAwLAor
CSAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLAorCSAgICAg
ICAgICAgIGxpbmVTdGFydDogMAorCSAgICAgICAgfTsKKwkgICAgICAgIHRoaXMubmV4dFRva2Vu
KCk7CisJICAgICAgICB0aGlzLmxhc3RNYXJrZXIgPSB7CisJICAgICAgICAgICAgaW5kZXg6IHRo
aXMuc2Nhbm5lci5pbmRleCwKKwkgICAgICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLnNjYW5uZXIu
bGluZU51bWJlciwKKwkgICAgICAgICAgICBsaW5lU3RhcnQ6IHRoaXMuc2Nhbm5lci5saW5lU3Rh
cnQKKwkgICAgICAgIH07CisJICAgIH0KKwkgICAgUGFyc2VyLnByb3RvdHlwZS50aHJvd0Vycm9y
ID0gZnVuY3Rpb24gKG1lc3NhZ2VGb3JtYXQpIHsKKwkgICAgICAgIHZhciB2YWx1ZXMgPSBbXTsK
KwkgICAgICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7
CisJICAgICAgICAgICAgdmFsdWVzW19pIC0gMV0gPSBhcmd1bWVudHNbX2ldOworCSAgICAgICAg
fQorCSAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVu
dHMsIDEpOworCSAgICAgICAgdmFyIG1zZyA9IG1lc3NhZ2VGb3JtYXQucmVwbGFjZSgvJShcZCkv
ZywgZnVuY3Rpb24gKHdob2xlLCBpZHgpIHsKKwkgICAgICAgICAgICBhc3NlcnRfMS5hc3NlcnQo
aWR4IDwgYXJncy5sZW5ndGgsICdNZXNzYWdlIHJlZmVyZW5jZSBtdXN0IGJlIGluIHJhbmdlJyk7
CisJICAgICAgICAgICAgcmV0dXJuIGFyZ3NbaWR4XTsKKwkgICAgICAgIH0pOworCSAgICAgICAg
dmFyIGluZGV4ID0gdGhpcy5sYXN0TWFya2VyLmluZGV4OworCSAgICAgICAgdmFyIGxpbmUgPSB0
aGlzLmxhc3RNYXJrZXIubGluZU51bWJlcjsKKwkgICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLmxh
c3RNYXJrZXIuaW5kZXggLSB0aGlzLmxhc3RNYXJrZXIubGluZVN0YXJ0ICsgMTsKKwkgICAgICAg
IHRocm93IHRoaXMuZXJyb3JIYW5kbGVyLmNyZWF0ZUVycm9yKGluZGV4LCBsaW5lLCBjb2x1bW4s
IG1zZyk7CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUudG9sZXJhdGVFcnJvciA9IGZ1
bmN0aW9uIChtZXNzYWdlRm9ybWF0KSB7CisJICAgICAgICB2YXIgdmFsdWVzID0gW107CisJICAg
ICAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykgeworCSAg
ICAgICAgICAgIHZhbHVlc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTsKKwkgICAgICAgIH0KKwkg
ICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAx
KTsKKwkgICAgICAgIHZhciBtc2cgPSBtZXNzYWdlRm9ybWF0LnJlcGxhY2UoLyUoXGQpL2csIGZ1
bmN0aW9uICh3aG9sZSwgaWR4KSB7CisJICAgICAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KGlkeCA8
IGFyZ3MubGVuZ3RoLCAnTWVzc2FnZSByZWZlcmVuY2UgbXVzdCBiZSBpbiByYW5nZScpOworCSAg
ICAgICAgICAgIHJldHVybiBhcmdzW2lkeF07CisJICAgICAgICB9KTsKKwkgICAgICAgIHZhciBp
bmRleCA9IHRoaXMubGFzdE1hcmtlci5pbmRleDsKKwkgICAgICAgIHZhciBsaW5lID0gdGhpcy5z
Y2FubmVyLmxpbmVOdW1iZXI7CisJICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5sYXN0TWFya2Vy
LmluZGV4IC0gdGhpcy5sYXN0TWFya2VyLmxpbmVTdGFydCArIDE7CisJICAgICAgICB0aGlzLmVy
cm9ySGFuZGxlci50b2xlcmF0ZUVycm9yKGluZGV4LCBsaW5lLCBjb2x1bW4sIG1zZyk7CisJICAg
IH07CisJICAgIC8vIFRocm93IGFuIGV4Y2VwdGlvbiBiZWNhdXNlIG9mIHRoZSB0b2tlbi4KKwkg
ICAgUGFyc2VyLnByb3RvdHlwZS51bmV4cGVjdGVkVG9rZW5FcnJvciA9IGZ1bmN0aW9uICh0b2tl
biwgbWVzc2FnZSkgeworCSAgICAgICAgdmFyIG1zZyA9IG1lc3NhZ2UgfHwgbWVzc2FnZXNfMS5N
ZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW47CisJICAgICAgICB2YXIgdmFsdWU7CisJICAgICAgICBp
ZiAodG9rZW4pIHsKKwkgICAgICAgICAgICBpZiAoIW1lc3NhZ2UpIHsKKwkgICAgICAgICAgICAg
ICAgbXNnID0gKHRva2VuLnR5cGUgPT09IHRva2VuXzEuVG9rZW4uRU9GKSA/IG1lc3NhZ2VzXzEu
TWVzc2FnZXMuVW5leHBlY3RlZEVPUyA6CisJICAgICAgICAgICAgICAgICAgICAodG9rZW4udHlw
ZSA9PT0gdG9rZW5fMS5Ub2tlbi5JZGVudGlmaWVyKSA/IG1lc3NhZ2VzXzEuTWVzc2FnZXMuVW5l
eHBlY3RlZElkZW50aWZpZXIgOgorCSAgICAgICAgICAgICAgICAgICAgICAgICh0b2tlbi50eXBl
ID09PSB0b2tlbl8xLlRva2VuLk51bWVyaWNMaXRlcmFsKSA/IG1lc3NhZ2VzXzEuTWVzc2FnZXMu
VW5leHBlY3RlZE51bWJlciA6CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0b2tlbi50
eXBlID09PSB0b2tlbl8xLlRva2VuLlN0cmluZ0xpdGVyYWwpID8gbWVzc2FnZXNfMS5NZXNzYWdl
cy5VbmV4cGVjdGVkU3RyaW5nIDoKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0
b2tlbi50eXBlID09PSB0b2tlbl8xLlRva2VuLlRlbXBsYXRlKSA/IG1lc3NhZ2VzXzEuTWVzc2Fn
ZXMuVW5leHBlY3RlZFRlbXBsYXRlIDoKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtZXNzYWdlc18xLk1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbjsKKwkgICAgICAgICAgICAg
ICAgaWYgKHRva2VuLnR5cGUgPT09IHRva2VuXzEuVG9rZW4uS2V5d29yZCkgeworCSAgICAgICAg
ICAgICAgICAgICAgaWYgKHRoaXMuc2Nhbm5lci5pc0Z1dHVyZVJlc2VydmVkV29yZCh0b2tlbi52
YWx1ZSkpIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBtZXNzYWdlc18xLk1lc3Nh
Z2VzLlVuZXhwZWN0ZWRSZXNlcnZlZDsKKwkgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QgJiYgdGhpcy5zY2FubmVy
LmlzU3RyaWN0TW9kZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKwkgICAgICAgICAgICAg
ICAgICAgICAgICBtc2cgPSBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZDsK
KwkgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAg
IH0KKwkgICAgICAgICAgICB2YWx1ZSA9ICh0b2tlbi50eXBlID09PSB0b2tlbl8xLlRva2VuLlRl
bXBsYXRlKSA/IHRva2VuLnZhbHVlLnJhdyA6IHRva2VuLnZhbHVlOworCSAgICAgICAgfQorCSAg
ICAgICAgZWxzZSB7CisJICAgICAgICAgICAgdmFsdWUgPSAnSUxMRUdBTCc7CisJICAgICAgICB9
CisJICAgICAgICBtc2cgPSBtc2cucmVwbGFjZSgnJTAnLCB2YWx1ZSk7CisJICAgICAgICBpZiAo
dG9rZW4gJiYgdHlwZW9mIHRva2VuLmxpbmVOdW1iZXIgPT09ICdudW1iZXInKSB7CisJICAgICAg
ICAgICAgdmFyIGluZGV4ID0gdG9rZW4uc3RhcnQ7CisJICAgICAgICAgICAgdmFyIGxpbmUgPSB0
b2tlbi5saW5lTnVtYmVyOworCSAgICAgICAgICAgIHZhciBjb2x1bW4gPSB0b2tlbi5zdGFydCAt
IHRoaXMubGFzdE1hcmtlci5saW5lU3RhcnQgKyAxOworCSAgICAgICAgICAgIHJldHVybiB0aGlz
LmVycm9ySGFuZGxlci5jcmVhdGVFcnJvcihpbmRleCwgbGluZSwgY29sdW1uLCBtc2cpOworCSAg
ICAgICAgfQorCSAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5s
YXN0TWFya2VyLmluZGV4OworCSAgICAgICAgICAgIHZhciBsaW5lID0gdGhpcy5sYXN0TWFya2Vy
LmxpbmVOdW1iZXI7CisJICAgICAgICAgICAgdmFyIGNvbHVtbiA9IGluZGV4IC0gdGhpcy5sYXN0
TWFya2VyLmxpbmVTdGFydCArIDE7CisJICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JIYW5k
bGVyLmNyZWF0ZUVycm9yKGluZGV4LCBsaW5lLCBjb2x1bW4sIG1zZyk7CisJICAgICAgICB9CisJ
ICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUudGhyb3dVbmV4cGVjdGVkVG9rZW4gPSBmdW5j
dGlvbiAodG9rZW4sIG1lc3NhZ2UpIHsKKwkgICAgICAgIHRocm93IHRoaXMudW5leHBlY3RlZFRv
a2VuRXJyb3IodG9rZW4sIG1lc3NhZ2UpOworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBl
LnRvbGVyYXRlVW5leHBlY3RlZFRva2VuID0gZnVuY3Rpb24gKHRva2VuLCBtZXNzYWdlKSB7CisJ
ICAgICAgICB0aGlzLmVycm9ySGFuZGxlci50b2xlcmF0ZSh0aGlzLnVuZXhwZWN0ZWRUb2tlbkVy
cm9yKHRva2VuLCBtZXNzYWdlKSk7CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUuY29s
bGVjdENvbW1lbnRzID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5j
b21tZW50KSB7CisJICAgICAgICAgICAgdGhpcy5zY2FubmVyLnNjYW5Db21tZW50cygpOworCSAg
ICAgICAgfQorCSAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgdmFyIGNvbW1lbnRzID0gdGhp
cy5zY2FubmVyLnNjYW5Db21tZW50cygpOworCSAgICAgICAgICAgIGlmIChjb21tZW50cy5sZW5n
dGggPiAwICYmIHRoaXMuZGVsZWdhdGUpIHsKKwkgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBjb21tZW50cy5sZW5ndGg7ICsraSkgeworCSAgICAgICAgICAgICAgICAgICAgdmFy
IGUgPSBjb21tZW50c1tpXTsKKwkgICAgICAgICAgICAgICAgICAgIHZhciBub2RlID0gdm9pZCAw
OworCSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHsKKwkgICAgICAgICAgICAgICAgICAgICAg
ICB0eXBlOiBlLm11bHRpTGluZSA/ICdCbG9ja0NvbW1lbnQnIDogJ0xpbmVDb21tZW50JywKKwkg
ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5zY2FubmVyLnNvdXJjZS5zbGljZShl
LnNsaWNlWzBdLCBlLnNsaWNlWzFdKQorCSAgICAgICAgICAgICAgICAgICAgfTsKKwkgICAgICAg
ICAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5yYW5nZSkgeworCSAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGUucmFuZ2UgPSBlLnJhbmdlOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAg
ICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLmxvYykgeworCSAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUubG9jID0gZS5sb2M7CisJICAgICAgICAgICAgICAgICAgICB9CisJICAg
ICAgICAgICAgICAgICAgICB2YXIgbWV0YWRhdGEgPSB7CisJICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhcnQ6IHsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogZS5sb2Muc3Rh
cnQubGluZSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBlLmxvYy5zdGFy
dC5jb2x1bW4sCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogZS5yYW5nZVsw
XQorCSAgICAgICAgICAgICAgICAgICAgICAgIH0sCisJICAgICAgICAgICAgICAgICAgICAgICAg
ZW5kOiB7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IGUubG9jLmVuZC5saW5l
LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGUubG9jLmVuZC5jb2x1bW4s
CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogZS5yYW5nZVsxXQorCSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgIH07CisJICAgICAgICAg
ICAgICAgICAgICB0aGlzLmRlbGVnYXRlKG5vZGUsIG1ldGFkYXRhKTsKKwkgICAgICAgICAgICAg
ICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgfTsKKwkgICAgLy8gRnJvbSBp
bnRlcm5hbCByZXByZXNlbnRhdGlvbiB0byBhbiBleHRlcm5hbCBzdHJ1Y3R1cmUKKwkgICAgUGFy
c2VyLnByb3RvdHlwZS5nZXRUb2tlblJhdyA9IGZ1bmN0aW9uICh0b2tlbikgeworCSAgICAgICAg
cmV0dXJuIHRoaXMuc2Nhbm5lci5zb3VyY2Uuc2xpY2UodG9rZW4uc3RhcnQsIHRva2VuLmVuZCk7
CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUuY29udmVydFRva2VuID0gZnVuY3Rpb24g
KHRva2VuKSB7CisJICAgICAgICB2YXIgdDsKKwkgICAgICAgIHQgPSB7CisJICAgICAgICAgICAg
dHlwZTogdG9rZW5fMS5Ub2tlbk5hbWVbdG9rZW4udHlwZV0sCisJICAgICAgICAgICAgdmFsdWU6
IHRoaXMuZ2V0VG9rZW5SYXcodG9rZW4pCisJICAgICAgICB9OworCSAgICAgICAgaWYgKHRoaXMu
Y29uZmlnLnJhbmdlKSB7CisJICAgICAgICAgICAgdC5yYW5nZSA9IFt0b2tlbi5zdGFydCwgdG9r
ZW4uZW5kXTsKKwkgICAgICAgIH0KKwkgICAgICAgIGlmICh0aGlzLmNvbmZpZy5sb2MpIHsKKwkg
ICAgICAgICAgICB0LmxvYyA9IHsKKwkgICAgICAgICAgICAgICAgc3RhcnQ6IHsKKwkgICAgICAg
ICAgICAgICAgICAgIGxpbmU6IHRoaXMuc3RhcnRNYXJrZXIubGluZU51bWJlciwKKwkgICAgICAg
ICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5zdGFydE1hcmtlci5pbmRleCAtIHRoaXMuc3RhcnRN
YXJrZXIubGluZVN0YXJ0CisJICAgICAgICAgICAgICAgIH0sCisJICAgICAgICAgICAgICAgIGVu
ZDogeworCSAgICAgICAgICAgICAgICAgICAgbGluZTogdGhpcy5zY2FubmVyLmxpbmVOdW1iZXIs
CisJICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuc2Nhbm5lci5pbmRleCAtIHRoaXMu
c2Nhbm5lci5saW5lU3RhcnQKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH07CisJ
ICAgICAgICB9CisJICAgICAgICBpZiAodG9rZW4ucmVnZXgpIHsKKwkgICAgICAgICAgICB0LnJl
Z2V4ID0gdG9rZW4ucmVnZXg7CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gdDsKKwkgICAg
fTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5uZXh0VG9rZW4gPSBmdW5jdGlvbiAoKSB7CisJICAg
ICAgICB2YXIgdG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKKwkgICAgICAgIHRoaXMubGFzdE1hcmtl
ci5pbmRleCA9IHRoaXMuc2Nhbm5lci5pbmRleDsKKwkgICAgICAgIHRoaXMubGFzdE1hcmtlci5s
aW5lTnVtYmVyID0gdGhpcy5zY2FubmVyLmxpbmVOdW1iZXI7CisJICAgICAgICB0aGlzLmxhc3RN
YXJrZXIubGluZVN0YXJ0ID0gdGhpcy5zY2FubmVyLmxpbmVTdGFydDsKKwkgICAgICAgIHRoaXMu
Y29sbGVjdENvbW1lbnRzKCk7CisJICAgICAgICB0aGlzLnN0YXJ0TWFya2VyLmluZGV4ID0gdGhp
cy5zY2FubmVyLmluZGV4OworCSAgICAgICAgdGhpcy5zdGFydE1hcmtlci5saW5lTnVtYmVyID0g
dGhpcy5zY2FubmVyLmxpbmVOdW1iZXI7CisJICAgICAgICB0aGlzLnN0YXJ0TWFya2VyLmxpbmVT
dGFydCA9IHRoaXMuc2Nhbm5lci5saW5lU3RhcnQ7CisJICAgICAgICB2YXIgbmV4dDsKKwkgICAg
ICAgIG5leHQgPSB0aGlzLnNjYW5uZXIubGV4KCk7CisJICAgICAgICB0aGlzLmhhc0xpbmVUZXJt
aW5hdG9yID0gKHRva2VuICYmIG5leHQpID8gKHRva2VuLmxpbmVOdW1iZXIgIT09IG5leHQubGlu
ZU51bWJlcikgOiBmYWxzZTsKKwkgICAgICAgIGlmIChuZXh0ICYmIHRoaXMuY29udGV4dC5zdHJp
Y3QgJiYgbmV4dC50eXBlID09PSB0b2tlbl8xLlRva2VuLklkZW50aWZpZXIpIHsKKwkgICAgICAg
ICAgICBpZiAodGhpcy5zY2FubmVyLmlzU3RyaWN0TW9kZVJlc2VydmVkV29yZChuZXh0LnZhbHVl
KSkgeworCSAgICAgICAgICAgICAgICBuZXh0LnR5cGUgPSB0b2tlbl8xLlRva2VuLktleXdvcmQ7
CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgdGhpcy5sb29rYWhlYWQgPSBu
ZXh0OworCSAgICAgICAgaWYgKHRoaXMuY29uZmlnLnRva2VucyAmJiBuZXh0LnR5cGUgIT09IHRv
a2VuXzEuVG9rZW4uRU9GKSB7CisJICAgICAgICAgICAgdGhpcy50b2tlbnMucHVzaCh0aGlzLmNv
bnZlcnRUb2tlbihuZXh0KSk7CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gdG9rZW47CisJ
ICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUubmV4dFJlZ2V4VG9rZW4gPSBmdW5jdGlvbiAo
KSB7CisJICAgICAgICB0aGlzLmNvbGxlY3RDb21tZW50cygpOworCSAgICAgICAgdmFyIHRva2Vu
ID0gdGhpcy5zY2FubmVyLnNjYW5SZWdFeHAoKTsKKwkgICAgICAgIGlmICh0aGlzLmNvbmZpZy50
b2tlbnMpIHsKKwkgICAgICAgICAgICAvLyBQb3AgdGhlIHByZXZpb3VzIHRva2VuLCAnLycgb3Ig
Jy89JworCSAgICAgICAgICAgIC8vIFRoaXMgaXMgYWRkZWQgZnJvbSB0aGUgbG9va2FoZWFkIHRv
a2VuLgorCSAgICAgICAgICAgIHRoaXMudG9rZW5zLnBvcCgpOworCSAgICAgICAgICAgIHRoaXMu
dG9rZW5zLnB1c2godGhpcy5jb252ZXJ0VG9rZW4odG9rZW4pKTsKKwkgICAgICAgIH0KKwkgICAg
ICAgIC8vIFByaW1lIHRoZSBuZXh0IGxvb2thaGVhZC4KKwkgICAgICAgIHRoaXMubG9va2FoZWFk
ID0gdG9rZW47CisJICAgICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgcmV0dXJuIHRv
a2VuOworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLmNyZWF0ZU5vZGUgPSBmdW5jdGlv
biAoKSB7CisJICAgICAgICByZXR1cm4geworCSAgICAgICAgICAgIGluZGV4OiB0aGlzLnN0YXJ0
TWFya2VyLmluZGV4LAorCSAgICAgICAgICAgIGxpbmU6IHRoaXMuc3RhcnRNYXJrZXIubGluZU51
bWJlciwKKwkgICAgICAgICAgICBjb2x1bW46IHRoaXMuc3RhcnRNYXJrZXIuaW5kZXggLSB0aGlz
LnN0YXJ0TWFya2VyLmxpbmVTdGFydAorCSAgICAgICAgfTsKKwkgICAgfTsKKwkgICAgUGFyc2Vy
LnByb3RvdHlwZS5zdGFydE5vZGUgPSBmdW5jdGlvbiAodG9rZW4pIHsKKwkgICAgICAgIHJldHVy
biB7CisJICAgICAgICAgICAgaW5kZXg6IHRva2VuLnN0YXJ0LAorCSAgICAgICAgICAgIGxpbmU6
IHRva2VuLmxpbmVOdW1iZXIsCisJICAgICAgICAgICAgY29sdW1uOiB0b2tlbi5zdGFydCAtIHRv
a2VuLmxpbmVTdGFydAorCSAgICAgICAgfTsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlw
ZS5maW5hbGl6ZSA9IGZ1bmN0aW9uIChtZXRhLCBub2RlKSB7CisJICAgICAgICBpZiAodGhpcy5j
b25maWcucmFuZ2UpIHsKKwkgICAgICAgICAgICBub2RlLnJhbmdlID0gW21ldGEuaW5kZXgsIHRo
aXMubGFzdE1hcmtlci5pbmRleF07CisJICAgICAgICB9CisJICAgICAgICBpZiAodGhpcy5jb25m
aWcubG9jKSB7CisJICAgICAgICAgICAgbm9kZS5sb2MgPSB7CisJICAgICAgICAgICAgICAgIHN0
YXJ0OiB7CisJICAgICAgICAgICAgICAgICAgICBsaW5lOiBtZXRhLmxpbmUsCisJICAgICAgICAg
ICAgICAgICAgICBjb2x1bW46IG1ldGEuY29sdW1uCisJICAgICAgICAgICAgICAgIH0sCisJICAg
ICAgICAgICAgICAgIGVuZDogeworCSAgICAgICAgICAgICAgICAgICAgbGluZTogdGhpcy5sYXN0
TWFya2VyLmxpbmVOdW1iZXIsCisJICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMubGFz
dE1hcmtlci5pbmRleCAtIHRoaXMubGFzdE1hcmtlci5saW5lU3RhcnQKKwkgICAgICAgICAgICAg
ICAgfQorCSAgICAgICAgICAgIH07CisJICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLnNvdXJj
ZSkgeworCSAgICAgICAgICAgICAgICBub2RlLmxvYy5zb3VyY2UgPSB0aGlzLmNvbmZpZy5zb3Vy
Y2U7CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgaWYgKHRoaXMuZGVsZWdh
dGUpIHsKKwkgICAgICAgICAgICB2YXIgbWV0YWRhdGEgPSB7CisJICAgICAgICAgICAgICAgIHN0
YXJ0OiB7CisJICAgICAgICAgICAgICAgICAgICBsaW5lOiBtZXRhLmxpbmUsCisJICAgICAgICAg
ICAgICAgICAgICBjb2x1bW46IG1ldGEuY29sdW1uLAorCSAgICAgICAgICAgICAgICAgICAgb2Zm
c2V0OiBtZXRhLmluZGV4CisJICAgICAgICAgICAgICAgIH0sCisJICAgICAgICAgICAgICAgIGVu
ZDogeworCSAgICAgICAgICAgICAgICAgICAgbGluZTogdGhpcy5sYXN0TWFya2VyLmxpbmVOdW1i
ZXIsCisJICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMubGFzdE1hcmtlci5pbmRleCAt
IHRoaXMubGFzdE1hcmtlci5saW5lU3RhcnQsCisJICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6
IHRoaXMubGFzdE1hcmtlci5pbmRleAorCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAg
fTsKKwkgICAgICAgICAgICB0aGlzLmRlbGVnYXRlKG5vZGUsIG1ldGFkYXRhKTsKKwkgICAgICAg
IH0KKwkgICAgICAgIHJldHVybiBub2RlOworCSAgICB9OworCSAgICAvLyBFeHBlY3QgdGhlIG5l
eHQgdG9rZW4gdG8gbWF0Y2ggdGhlIHNwZWNpZmllZCBwdW5jdHVhdG9yLgorCSAgICAvLyBJZiBu
b3QsIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4KKwkgICAgUGFyc2VyLnByb3RvdHlwZS5l
eHBlY3QgPSBmdW5jdGlvbiAodmFsdWUpIHsKKwkgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubmV4
dFRva2VuKCk7CisJICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gdG9rZW5fMS5Ub2tlbi5QdW5j
dHVhdG9yIHx8IHRva2VuLnZhbHVlICE9PSB2YWx1ZSkgeworCSAgICAgICAgICAgIHRoaXMudGhy
b3dVbmV4cGVjdGVkVG9rZW4odG9rZW4pOworCSAgICAgICAgfQorCSAgICB9OworCSAgICAvLyBR
dWlldGx5IGV4cGVjdCBhIGNvbW1hIHdoZW4gaW4gdG9sZXJhbnQgbW9kZSwgb3RoZXJ3aXNlIGRl
bGVnYXRlcyB0byBleHBlY3QoKS4KKwkgICAgUGFyc2VyLnByb3RvdHlwZS5leHBlY3RDb21tYVNl
cGFyYXRvciA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIGlmICh0aGlzLmNvbmZpZy50b2xlcmFu
dCkgeworCSAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubG9va2FoZWFkOworCSAgICAgICAg
ICAgIGlmICh0b2tlbi50eXBlID09PSB0b2tlbl8xLlRva2VuLlB1bmN0dWF0b3IgJiYgdG9rZW4u
dmFsdWUgPT09ICcsJykgeworCSAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworCSAg
ICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSB0b2tlbl8x
LlRva2VuLlB1bmN0dWF0b3IgJiYgdG9rZW4udmFsdWUgPT09ICc7JykgeworCSAgICAgICAgICAg
ICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5l
eHBlY3RlZFRva2VuKHRva2VuKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSB7
CisJICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odG9rZW4sIG1l
c3NhZ2VzXzEuTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuKTsKKwkgICAgICAgICAgICB9CisJICAg
ICAgICB9CisJICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICB0aGlzLmV4cGVjdCgnLCcpOwor
CSAgICAgICAgfQorCSAgICB9OworCSAgICAvLyBFeHBlY3QgdGhlIG5leHQgdG9rZW4gdG8gbWF0
Y2ggdGhlIHNwZWNpZmllZCBrZXl3b3JkLgorCSAgICAvLyBJZiBub3QsIGFuIGV4Y2VwdGlvbiB3
aWxsIGJlIHRocm93bi4KKwkgICAgUGFyc2VyLnByb3RvdHlwZS5leHBlY3RLZXl3b3JkID0gZnVu
Y3Rpb24gKGtleXdvcmQpIHsKKwkgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7
CisJICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gdG9rZW5fMS5Ub2tlbi5LZXl3b3JkIHx8IHRv
a2VuLnZhbHVlICE9PSBrZXl3b3JkKSB7CisJICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0
ZWRUb2tlbih0b2tlbik7CisJICAgICAgICB9CisJICAgIH07CisJICAgIC8vIFJldHVybiB0cnVl
IGlmIHRoZSBuZXh0IHRva2VuIG1hdGNoZXMgdGhlIHNwZWNpZmllZCBwdW5jdHVhdG9yLgorCSAg
ICBQYXJzZXIucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24gKHZhbHVlKSB7CisJICAgICAgICBy
ZXR1cm4gdGhpcy5sb29rYWhlYWQudHlwZSA9PT0gdG9rZW5fMS5Ub2tlbi5QdW5jdHVhdG9yICYm
IHRoaXMubG9va2FoZWFkLnZhbHVlID09PSB2YWx1ZTsKKwkgICAgfTsKKwkgICAgLy8gUmV0dXJu
IHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIGtleXdvcmQKKwkg
ICAgUGFyc2VyLnByb3RvdHlwZS5tYXRjaEtleXdvcmQgPSBmdW5jdGlvbiAoa2V5d29yZCkgewor
CSAgICAgICAgcmV0dXJuIHRoaXMubG9va2FoZWFkLnR5cGUgPT09IHRva2VuXzEuVG9rZW4uS2V5
d29yZCAmJiB0aGlzLmxvb2thaGVhZC52YWx1ZSA9PT0ga2V5d29yZDsKKwkgICAgfTsKKwkgICAg
Ly8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIGNv
bnRleHR1YWwga2V5d29yZAorCSAgICAvLyAod2hlcmUgYW4gaWRlbnRpZmllciBpcyBzb21ldGlt
ZXMgYSBrZXl3b3JkIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCkKKwkgICAgUGFyc2VyLnByb3Rv
dHlwZS5tYXRjaENvbnRleHR1YWxLZXl3b3JkID0gZnVuY3Rpb24gKGtleXdvcmQpIHsKKwkgICAg
ICAgIHJldHVybiB0aGlzLmxvb2thaGVhZC50eXBlID09PSB0b2tlbl8xLlRva2VuLklkZW50aWZp
ZXIgJiYgdGhpcy5sb29rYWhlYWQudmFsdWUgPT09IGtleXdvcmQ7CisJICAgIH07CisJICAgIC8v
IFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IHRva2VuIGlzIGFuIGFzc2lnbm1lbnQgb3BlcmF0b3IK
KwkgICAgUGFyc2VyLnByb3RvdHlwZS5tYXRjaEFzc2lnbiA9IGZ1bmN0aW9uICgpIHsKKwkgICAg
ICAgIGlmICh0aGlzLmxvb2thaGVhZC50eXBlICE9PSB0b2tlbl8xLlRva2VuLlB1bmN0dWF0b3Ip
IHsKKwkgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisJICAgICAgICB9CisJICAgICAgICB2YXIg
b3AgPSB0aGlzLmxvb2thaGVhZC52YWx1ZTsKKwkgICAgICAgIHJldHVybiBvcCA9PT0gJz0nIHx8
CisJICAgICAgICAgICAgb3AgPT09ICcqPScgfHwKKwkgICAgICAgICAgICBvcCA9PT0gJyoqPScg
fHwKKwkgICAgICAgICAgICBvcCA9PT0gJy89JyB8fAorCSAgICAgICAgICAgIG9wID09PSAnJT0n
IHx8CisJICAgICAgICAgICAgb3AgPT09ICcrPScgfHwKKwkgICAgICAgICAgICBvcCA9PT0gJy09
JyB8fAorCSAgICAgICAgICAgIG9wID09PSAnPDw9JyB8fAorCSAgICAgICAgICAgIG9wID09PSAn
Pj49JyB8fAorCSAgICAgICAgICAgIG9wID09PSAnPj4+PScgfHwKKwkgICAgICAgICAgICBvcCA9
PT0gJyY9JyB8fAorCSAgICAgICAgICAgIG9wID09PSAnXj0nIHx8CisJICAgICAgICAgICAgb3Ag
PT09ICd8PSc7CisJICAgIH07CisJICAgIC8vIENvdmVyIGdyYW1tYXIgc3VwcG9ydC4KKwkgICAg
Ly8KKwkgICAgLy8gV2hlbiBhbiBhc3NpZ25tZW50IGV4cHJlc3Npb24gcG9zaXRpb24gc3RhcnRz
IHdpdGggYW4gbGVmdCBwYXJlbnRoZXNpcywgdGhlIGRldGVybWluYXRpb24gb2YgdGhlIHR5cGUK
KwkgICAgLy8gb2YgdGhlIHN5bnRheCBpcyB0byBiZSBkZWZlcnJlZCBhcmJpdHJhcmlseSBsb25n
IHVudGlsIHRoZSBlbmQgb2YgdGhlIHBhcmVudGhlc2VzIHBhaXIgKHBsdXMgYSBsb29rYWhlYWQp
CisJICAgIC8vIG9yIHRoZSBmaXJzdCBjb21tYS4gVGhpcyBzaXR1YXRpb24gYWxzbyBkZWZlcnMg
dGhlIGRldGVybWluYXRpb24gb2YgYWxsIHRoZSBleHByZXNzaW9ucyBuZXN0ZWQgaW4gdGhlIHBh
aXIuCisJICAgIC8vCisJICAgIC8vIFRoZXJlIGFyZSB0aHJlZSBwcm9kdWN0aW9ucyB0aGF0IGNh
biBiZSBwYXJzZWQgaW4gYSBwYXJlbnRoZXNlcyBwYWlyIHRoYXQgbmVlZHMgdG8gYmUgZGV0ZXJt
aW5lZAorCSAgICAvLyBhZnRlciB0aGUgb3V0ZXJtb3N0IHBhaXIgaXMgY2xvc2VkLiBUaGV5IGFy
ZToKKwkgICAgLy8KKwkgICAgLy8gICAxLiBBc3NpZ25tZW50RXhwcmVzc2lvbgorCSAgICAvLyAg
IDIuIEJpbmRpbmdFbGVtZW50cworCSAgICAvLyAgIDMuIEFzc2lnbm1lbnRUYXJnZXRzCisJICAg
IC8vCisJICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIGV4cG9uZW50aWFsIGJhY2t0cmFja2luZywg
d2UgdXNlIHR3byBmbGFncyB0byBkZW5vdGUgaWYgdGhlIHByb2R1Y3Rpb24gY2FuIGJlCisJICAg
IC8vIGJpbmRpbmcgZWxlbWVudCBvciBhc3NpZ25tZW50IHRhcmdldC4KKwkgICAgLy8KKwkgICAg
Ly8gVGhlIHRocmVlIHByb2R1Y3Rpb25zIGhhdmUgdGhlIHJlbGF0aW9uc2hpcDoKKwkgICAgLy8K
KwkgICAgLy8gICBCaW5kaW5nRWxlbWVudHMg4oqGIEFzc2lnbm1lbnRUYXJnZXRzIOKKhiBBc3Np
Z25tZW50RXhwcmVzc2lvbgorCSAgICAvLworCSAgICAvLyB3aXRoIGEgc2luZ2xlIGV4Y2VwdGlv
biB0aGF0IENvdmVySW5pdGlhbGl6ZWROYW1lIHdoZW4gdXNlZCBkaXJlY3RseSBpbiBhbiBFeHBy
ZXNzaW9uLCBnZW5lcmF0ZXMKKwkgICAgLy8gYW4gZWFybHkgZXJyb3IuIFRoZXJlZm9yZSwgd2Ug
bmVlZCB0aGUgdGhpcmQgc3RhdGUsIGZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciwgdG8g
dHJhY2sgdGhlCisJICAgIC8vIGZpcnN0IHVzYWdlIG9mIENvdmVySW5pdGlhbGl6ZWROYW1lIGFu
ZCByZXBvcnQgaXQgd2hlbiB3ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHBhcmVudGhlc2VzIHBh
aXIuCisJICAgIC8vCisJICAgIC8vIGlzb2xhdGVDb3ZlckdyYW1tYXIgZnVuY3Rpb24gcnVucyB0
aGUgZ2l2ZW4gcGFyc2VyIGZ1bmN0aW9uIHdpdGggYSBuZXcgY292ZXIgZ3JhbW1hciBjb250ZXh0
LCBhbmQgaXQgZG9lcyBub3QKKwkgICAgLy8gZWZmZWN0IHRoZSBjdXJyZW50IGZsYWdzLiBUaGlz
IG1lYW5zIHRoZSBwcm9kdWN0aW9uIHRoZSBwYXJzZXIgcGFyc2VzIGlzIG9ubHkgdXNlZCBhcyBh
biBleHByZXNzaW9uLiBUaGVyZWZvcmUKKwkgICAgLy8gdGhlIENvdmVySW5pdGlhbGl6ZWROYW1l
IGNoZWNrIGlzIGNvbmR1Y3RlZC4KKwkgICAgLy8KKwkgICAgLy8gaW5oZXJpdENvdmVyR3JhbW1h
ciBmdW5jdGlvbiBydW5zIHRoZSBnaXZlbiBwYXJzZSBmdW5jdGlvbiB3aXRoIGEgbmV3IGNvdmVy
IGdyYW1tYXIgY29udGV4dCwgYW5kIGl0IHByb3BhZ2F0ZXMKKwkgICAgLy8gdGhlIGZsYWdzIG91
dHNpZGUgb2YgdGhlIHBhcnNlci4gVGhpcyBtZWFucyB0aGUgcHJvZHVjdGlvbiB0aGUgcGFyc2Vy
IHBhcnNlcyBpcyB1c2VkIGFzIGEgcGFydCBvZiBhIHBvdGVudGlhbAorCSAgICAvLyBwYXR0ZXJu
LiBUaGUgQ292ZXJJbml0aWFsaXplZE5hbWUgY2hlY2sgaXMgZGVmZXJyZWQuCisJICAgIFBhcnNl
ci5wcm90b3R5cGUuaXNvbGF0ZUNvdmVyR3JhbW1hciA9IGZ1bmN0aW9uIChwYXJzZUZ1bmN0aW9u
KSB7CisJICAgICAgICB2YXIgcHJldmlvdXNJc0JpbmRpbmdFbGVtZW50ID0gdGhpcy5jb250ZXh0
LmlzQmluZGluZ0VsZW1lbnQ7CisJICAgICAgICB2YXIgcHJldmlvdXNJc0Fzc2lnbm1lbnRUYXJn
ZXQgPSB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0OworCSAgICAgICAgdmFyIHByZXZp
b3VzRmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gdGhpcy5jb250ZXh0LmZpcnN0Q292
ZXJJbml0aWFsaXplZE5hbWVFcnJvcjsKKwkgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdF
bGVtZW50ID0gdHJ1ZTsKKwkgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQg
PSB0cnVlOworCSAgICAgICAgdGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVF
cnJvciA9IG51bGw7CisJICAgICAgICB2YXIgcmVzdWx0ID0gcGFyc2VGdW5jdGlvbi5jYWxsKHRo
aXMpOworCSAgICAgICAgaWYgKHRoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1l
RXJyb3IgIT09IG51bGwpIHsKKwkgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2Vu
KHRoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IpOworCSAgICAgICAg
fQorCSAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBwcmV2aW91c0lzQmlu
ZGluZ0VsZW1lbnQ7CisJICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0g
cHJldmlvdXNJc0Fzc2lnbm1lbnRUYXJnZXQ7CisJICAgICAgICB0aGlzLmNvbnRleHQuZmlyc3RD
b3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gcHJldmlvdXNGaXJzdENvdmVySW5pdGlhbGl6ZWRO
YW1lRXJyb3I7CisJICAgICAgICByZXR1cm4gcmVzdWx0OworCSAgICB9OworCSAgICBQYXJzZXIu
cHJvdG90eXBlLmluaGVyaXRDb3ZlckdyYW1tYXIgPSBmdW5jdGlvbiAocGFyc2VGdW5jdGlvbikg
eworCSAgICAgICAgdmFyIHByZXZpb3VzSXNCaW5kaW5nRWxlbWVudCA9IHRoaXMuY29udGV4dC5p
c0JpbmRpbmdFbGVtZW50OworCSAgICAgICAgdmFyIHByZXZpb3VzSXNBc3NpZ25tZW50VGFyZ2V0
ID0gdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldDsKKwkgICAgICAgIHZhciBwcmV2aW91
c0ZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvciA9IHRoaXMuY29udGV4dC5maXJzdENvdmVy
SW5pdGlhbGl6ZWROYW1lRXJyb3I7CisJICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxl
bWVudCA9IHRydWU7CisJICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0g
dHJ1ZTsKKwkgICAgICAgIHRoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJy
b3IgPSBudWxsOworCSAgICAgICAgdmFyIHJlc3VsdCA9IHBhcnNlRnVuY3Rpb24uY2FsbCh0aGlz
KTsKKwkgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gdGhpcy5jb250ZXh0
LmlzQmluZGluZ0VsZW1lbnQgJiYgcHJldmlvdXNJc0JpbmRpbmdFbGVtZW50OworCSAgICAgICAg
dGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IHRoaXMuY29udGV4dC5pc0Fzc2lnbm1l
bnRUYXJnZXQgJiYgcHJldmlvdXNJc0Fzc2lnbm1lbnRUYXJnZXQ7CisJICAgICAgICB0aGlzLmNv
bnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gcHJldmlvdXNGaXJzdENvdmVy
SW5pdGlhbGl6ZWROYW1lRXJyb3IgfHwgdGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXpl
ZE5hbWVFcnJvcjsKKwkgICAgICAgIHJldHVybiByZXN1bHQ7CisJICAgIH07CisJICAgIFBhcnNl
ci5wcm90b3R5cGUuY29uc3VtZVNlbWljb2xvbiA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIGlm
ICh0aGlzLm1hdGNoKCc7JykpIHsKKwkgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworCSAg
ICAgICAgfQorCSAgICAgICAgZWxzZSBpZiAoIXRoaXMuaGFzTGluZVRlcm1pbmF0b3IpIHsKKwkg
ICAgICAgICAgICBpZiAodGhpcy5sb29rYWhlYWQudHlwZSAhPT0gdG9rZW5fMS5Ub2tlbi5FT0Yg
JiYgIXRoaXMubWF0Y2goJ30nKSkgeworCSAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBl
Y3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAg
dGhpcy5sYXN0TWFya2VyLmluZGV4ID0gdGhpcy5zdGFydE1hcmtlci5pbmRleDsKKwkgICAgICAg
ICAgICB0aGlzLmxhc3RNYXJrZXIubGluZU51bWJlciA9IHRoaXMuc3RhcnRNYXJrZXIubGluZU51
bWJlcjsKKwkgICAgICAgICAgICB0aGlzLmxhc3RNYXJrZXIubGluZVN0YXJ0ID0gdGhpcy5zdGFy
dE1hcmtlci5saW5lU3RhcnQ7CisJICAgICAgICB9CisJICAgIH07CisJICAgIC8vIEVDTUEtMjYy
IDEyLjIgUHJpbWFyeSBFeHByZXNzaW9ucworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlUHJp
bWFyeUV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMu
Y3JlYXRlTm9kZSgpOworCSAgICAgICAgdmFyIGV4cHI7CisJICAgICAgICB2YXIgdmFsdWUsIHRv
a2VuLCByYXc7CisJICAgICAgICBzd2l0Y2ggKHRoaXMubG9va2FoZWFkLnR5cGUpIHsKKwkgICAg
ICAgICAgICBjYXNlIHRva2VuXzEuVG9rZW4uSWRlbnRpZmllcjoKKwkgICAgICAgICAgICAgICAg
aWYgKCh0aGlzLmNvbnRleHQuaXNNb2R1bGUgfHwgdGhpcy5jb250ZXh0LmF3YWl0KSAmJiB0aGlz
Lmxvb2thaGVhZC52YWx1ZSA9PT0gJ2F3YWl0JykgeworCSAgICAgICAgICAgICAgICAgICAgdGhp
cy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7CisJICAgICAgICAgICAg
ICAgIH0KKwkgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMubWF0Y2hBc3luY0Z1bmN0aW9uKCkg
PyB0aGlzLnBhcnNlRnVuY3Rpb25FeHByZXNzaW9uKCkgOiB0aGlzLmZpbmFsaXplKG5vZGUsIG5l
dyBOb2RlLklkZW50aWZpZXIodGhpcy5uZXh0VG9rZW4oKS52YWx1ZSkpOworCSAgICAgICAgICAg
ICAgICBicmVhazsKKwkgICAgICAgICAgICBjYXNlIHRva2VuXzEuVG9rZW4uTnVtZXJpY0xpdGVy
YWw6CisJICAgICAgICAgICAgY2FzZSB0b2tlbl8xLlRva2VuLlN0cmluZ0xpdGVyYWw6CisJICAg
ICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIHRoaXMubG9va2FoZWFkLm9j
dGFsKSB7CisJICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2Vu
KHRoaXMubG9va2FoZWFkLCBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCk7
CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNz
aWdubWVudFRhcmdldCA9IGZhbHNlOworCSAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNC
aW5kaW5nRWxlbWVudCA9IGZhbHNlOworCSAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMubmV4
dFRva2VuKCk7CisJICAgICAgICAgICAgICAgIHJhdyA9IHRoaXMuZ2V0VG9rZW5SYXcodG9rZW4p
OworCSAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5M
aXRlcmFsKHRva2VuLnZhbHVlLCByYXcpKTsKKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAg
ICAgICAgICAgY2FzZSB0b2tlbl8xLlRva2VuLkJvb2xlYW5MaXRlcmFsOgorCSAgICAgICAgICAg
ICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7CisJICAgICAgICAg
ICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7CisJICAgICAgICAg
ICAgICAgIHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgICAgICAgICAgdG9rZW4u
dmFsdWUgPSAodG9rZW4udmFsdWUgPT09ICd0cnVlJyk7CisJICAgICAgICAgICAgICAgIHJhdyA9
IHRoaXMuZ2V0VG9rZW5SYXcodG9rZW4pOworCSAgICAgICAgICAgICAgICBleHByID0gdGhpcy5m
aW5hbGl6ZShub2RlLCBuZXcgTm9kZS5MaXRlcmFsKHRva2VuLnZhbHVlLCByYXcpKTsKKwkgICAg
ICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgY2FzZSB0b2tlbl8xLlRva2VuLk51bGxM
aXRlcmFsOgorCSAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0
ID0gZmFsc2U7CisJICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50
ID0gZmFsc2U7CisJICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKKwkg
ICAgICAgICAgICAgICAgdG9rZW4udmFsdWUgPSBudWxsOworCSAgICAgICAgICAgICAgICByYXcg
PSB0aGlzLmdldFRva2VuUmF3KHRva2VuKTsKKwkgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMu
ZmluYWxpemUobm9kZSwgbmV3IE5vZGUuTGl0ZXJhbCh0b2tlbi52YWx1ZSwgcmF3KSk7CisJICAg
ICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIGNhc2UgdG9rZW5fMS5Ub2tlbi5UZW1w
bGF0ZToKKwkgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMucGFyc2VUZW1wbGF0ZUxpdGVyYWwo
KTsKKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgY2FzZSB0b2tlbl8xLlRv
a2VuLlB1bmN0dWF0b3I6CisJICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5sb29rYWhlYWQu
dmFsdWU7CisJICAgICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUpIHsKKwkgICAgICAgICAgICAg
ICAgICAgIGNhc2UgJygnOgorCSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5p
c0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7CisJICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9
IHRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlR3JvdXBFeHByZXNzaW9uKTsKKwkg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgICAgIGNhc2Ug
J1snOgorCSAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmluaGVyaXRDb3Zlckdy
YW1tYXIodGhpcy5wYXJzZUFycmF5SW5pdGlhbGl6ZXIpOworCSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICAgICAgY2FzZSAneyc6CisJICAgICAgICAgICAg
ICAgICAgICAgICAgZXhwciA9IHRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlT2Jq
ZWN0SW5pdGlhbGl6ZXIpOworCSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAg
ICAgICAgICAgICAgICAgY2FzZSAnLyc6CisJICAgICAgICAgICAgICAgICAgICBjYXNlICcvPSc6
CisJICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdl
dCA9IGZhbHNlOworCSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRp
bmdFbGVtZW50ID0gZmFsc2U7CisJICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2FubmVy
LmluZGV4ID0gdGhpcy5zdGFydE1hcmtlci5pbmRleDsKKwkgICAgICAgICAgICAgICAgICAgICAg
ICB0b2tlbiA9IHRoaXMubmV4dFJlZ2V4VG9rZW4oKTsKKwkgICAgICAgICAgICAgICAgICAgICAg
ICByYXcgPSB0aGlzLmdldFRva2VuUmF3KHRva2VuKTsKKwkgICAgICAgICAgICAgICAgICAgICAg
ICBleHByID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5SZWdleExpdGVyYWwodG9rZW4u
dmFsdWUsIHJhdywgdG9rZW4ucmVnZXgpKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKwkgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisJICAgICAgICAgICAgICAgICAgICAg
ICAgZXhwciA9IHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5uZXh0VG9rZW4oKSk7CisJ
ICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAg
Y2FzZSB0b2tlbl8xLlRva2VuLktleXdvcmQ6CisJICAgICAgICAgICAgICAgIGlmICghdGhpcy5j
b250ZXh0LnN0cmljdCAmJiB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCAmJiB0aGlzLm1hdGNoS2V5
d29yZCgneWllbGQnKSkgeworCSAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMucGFyc2VJ
ZGVudGlmaWVyTmFtZSgpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGVs
c2UgaWYgKCF0aGlzLmNvbnRleHQuc3RyaWN0ICYmIHRoaXMubWF0Y2hLZXl3b3JkKCdsZXQnKSkg
eworCSAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5v
ZGUuSWRlbnRpZmllcih0aGlzLm5leHRUb2tlbigpLnZhbHVlKSk7CisJICAgICAgICAgICAgICAg
IH0KKwkgICAgICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgICAgICB0aGlzLmNv
bnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7CisJICAgICAgICAgICAgICAgICAgICB0
aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZhbHNlOworCSAgICAgICAgICAgICAgICAg
ICAgaWYgKHRoaXMubWF0Y2hLZXl3b3JkKCdmdW5jdGlvbicpKSB7CisJICAgICAgICAgICAgICAg
ICAgICAgICAgZXhwciA9IHRoaXMucGFyc2VGdW5jdGlvbkV4cHJlc3Npb24oKTsKKwkgICAgICAg
ICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2hL
ZXl3b3JkKCd0aGlzJykpIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tl
bigpOworCSAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXplKG5vZGUs
IG5ldyBOb2RlLlRoaXNFeHByZXNzaW9uKCkpOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAg
ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaEtleXdvcmQoJ2NsYXNzJykpIHsK
KwkgICAgICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5wYXJzZUNsYXNzRXhwcmVzc2lv
bigpOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgZWxzZSB7
CisJICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMudGhyb3dVbmV4cGVjdGVkVG9r
ZW4odGhpcy5uZXh0VG9rZW4oKSk7CisJICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAg
ICAgICAgIH0KKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgZGVmYXVsdDoK
KwkgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5u
ZXh0VG9rZW4oKSk7CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gZXhwcjsKKwkgICAgfTsK
KwkgICAgLy8gRUNNQS0yNjIgMTIuMi41IEFycmF5IEluaXRpYWxpemVyCisJICAgIFBhcnNlci5w
cm90b3R5cGUucGFyc2VTcHJlYWRFbGVtZW50ID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFy
IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHRoaXMuZXhwZWN0KCcuLi4nKTsK
KwkgICAgICAgIHZhciBhcmcgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFz
c2lnbm1lbnRFeHByZXNzaW9uKTsKKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUs
IG5ldyBOb2RlLlNwcmVhZEVsZW1lbnQoYXJnKSk7CisJICAgIH07CisJICAgIFBhcnNlci5wcm90
b3R5cGUucGFyc2VBcnJheUluaXRpYWxpemVyID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFy
IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHZhciBlbGVtZW50cyA9IFtdOwor
CSAgICAgICAgdGhpcy5leHBlY3QoJ1snKTsKKwkgICAgICAgIHdoaWxlICghdGhpcy5tYXRjaCgn
XScpKSB7CisJICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJywnKSkgeworCSAgICAgICAgICAg
ICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKG51
bGwpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoKCcu
Li4nKSkgeworCSAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMucGFyc2VTcHJlYWRF
bGVtZW50KCk7CisJICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnXScpKSB7CisJICAg
ICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7
CisJICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZh
bHNlOworCSAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJywnKTsKKwkgICAgICAgICAg
ICAgICAgfQorCSAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKGVsZW1lbnQpOworCSAgICAg
ICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgZWxlbWVudHMu
cHVzaCh0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNz
aW9uKSk7CisJICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnXScpKSB7CisJICAgICAg
ICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnLCcpOworCSAgICAgICAgICAgICAgICB9CisJICAg
ICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgdGhpcy5leHBlY3QoJ10nKTsKKwkgICAg
ICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkFycmF5RXhwcmVzc2lvbihl
bGVtZW50cykpOworCSAgICB9OworCSAgICAvLyBFQ01BLTI2MiAxMi4yLjYgT2JqZWN0IEluaXRp
YWxpemVyCisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VQcm9wZXJ0eU1ldGhvZCA9IGZ1bmN0
aW9uIChwYXJhbXMpIHsKKwkgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQg
PSBmYWxzZTsKKwkgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7
CisJICAgICAgICB2YXIgcHJldmlvdXNTdHJpY3QgPSB0aGlzLmNvbnRleHQuc3RyaWN0OworCSAg
ICAgICAgdmFyIGJvZHkgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUZ1bmN0
aW9uU291cmNlRWxlbWVudHMpOworCSAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QgJiYg
cGFyYW1zLmZpcnN0UmVzdHJpY3RlZCkgeworCSAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4
cGVjdGVkVG9rZW4ocGFyYW1zLmZpcnN0UmVzdHJpY3RlZCwgcGFyYW1zLm1lc3NhZ2UpOworCSAg
ICAgICAgfQorCSAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QgJiYgcGFyYW1zLnN0cmlj
dGVkKSB7CisJICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihwYXJhbXMu
c3RyaWN0ZWQsIHBhcmFtcy5tZXNzYWdlKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHRoaXMuY29u
dGV4dC5zdHJpY3QgPSBwcmV2aW91c1N0cmljdDsKKwkgICAgICAgIHJldHVybiBib2R5OworCSAg
ICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlUHJvcGVydHlNZXRob2RGdW5jdGlvbiA9
IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBpc0dlbmVyYXRvciA9IGZhbHNlOworCSAgICAg
ICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHZhciBwcmV2aW91c0Fs
bG93WWllbGQgPSB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZDsKKwkgICAgICAgIHRoaXMuY29udGV4
dC5hbGxvd1lpZWxkID0gZmFsc2U7CisJICAgICAgICB2YXIgcGFyYW1zID0gdGhpcy5wYXJzZUZv
cm1hbFBhcmFtZXRlcnMoKTsKKwkgICAgICAgIHZhciBtZXRob2QgPSB0aGlzLnBhcnNlUHJvcGVy
dHlNZXRob2QocGFyYW1zKTsKKwkgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0gcHJl
dmlvdXNBbGxvd1lpZWxkOworCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3
IE5vZGUuRnVuY3Rpb25FeHByZXNzaW9uKG51bGwsIHBhcmFtcy5wYXJhbXMsIG1ldGhvZCwgaXNH
ZW5lcmF0b3IpKTsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVByb3BlcnR5
TWV0aG9kQXN5bmNGdW5jdGlvbiA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBub2RlID0g
dGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICB2YXIgcHJldmlvdXNBbGxvd1lpZWxkID0gdGhp
cy5jb250ZXh0LmFsbG93WWllbGQ7CisJICAgICAgICB2YXIgcHJldmlvdXNBd2FpdCA9IHRoaXMu
Y29udGV4dC5hd2FpdDsKKwkgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0gZmFsc2U7
CisJICAgICAgICB0aGlzLmNvbnRleHQuYXdhaXQgPSB0cnVlOworCSAgICAgICAgdmFyIHBhcmFt
cyA9IHRoaXMucGFyc2VGb3JtYWxQYXJhbWV0ZXJzKCk7CisJICAgICAgICB2YXIgbWV0aG9kID0g
dGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kKHBhcmFtcyk7CisJICAgICAgICB0aGlzLmNvbnRleHQu
YWxsb3dZaWVsZCA9IHByZXZpb3VzQWxsb3dZaWVsZDsKKwkgICAgICAgIHRoaXMuY29udGV4dC5h
d2FpdCA9IHByZXZpb3VzQXdhaXQ7CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2Rl
LCBuZXcgTm9kZS5Bc3luY0Z1bmN0aW9uRXhwcmVzc2lvbihudWxsLCBwYXJhbXMucGFyYW1zLCBt
ZXRob2QpKTsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZU9iamVjdFByb3Bl
cnR5S2V5ID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5v
ZGUoKTsKKwkgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICB2
YXIga2V5OworCSAgICAgICAgc3dpdGNoICh0b2tlbi50eXBlKSB7CisJICAgICAgICAgICAgY2Fz
ZSB0b2tlbl8xLlRva2VuLlN0cmluZ0xpdGVyYWw6CisJICAgICAgICAgICAgY2FzZSB0b2tlbl8x
LlRva2VuLk51bWVyaWNMaXRlcmFsOgorCSAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0
LnN0cmljdCAmJiB0b2tlbi5vY3RhbCkgeworCSAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xl
cmF0ZVVuZXhwZWN0ZWRUb2tlbih0b2tlbiwgbWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RPY3Rh
bExpdGVyYWwpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIHZhciByYXcg
PSB0aGlzLmdldFRva2VuUmF3KHRva2VuKTsKKwkgICAgICAgICAgICAgICAga2V5ID0gdGhpcy5m
aW5hbGl6ZShub2RlLCBuZXcgTm9kZS5MaXRlcmFsKHRva2VuLnZhbHVlLCByYXcpKTsKKwkgICAg
ICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgY2FzZSB0b2tlbl8xLlRva2VuLklkZW50
aWZpZXI6CisJICAgICAgICAgICAgY2FzZSB0b2tlbl8xLlRva2VuLkJvb2xlYW5MaXRlcmFsOgor
CSAgICAgICAgICAgIGNhc2UgdG9rZW5fMS5Ub2tlbi5OdWxsTGl0ZXJhbDoKKwkgICAgICAgICAg
ICBjYXNlIHRva2VuXzEuVG9rZW4uS2V5d29yZDoKKwkgICAgICAgICAgICAgICAga2V5ID0gdGhp
cy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5JZGVudGlmaWVyKHRva2VuLnZhbHVlKSk7CisJICAg
ICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIGNhc2UgdG9rZW5fMS5Ub2tlbi5QdW5j
dHVhdG9yOgorCSAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09ICdbJykgeworCSAg
ICAgICAgICAgICAgICAgICAga2V5ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFy
c2VBc3NpZ25tZW50RXhwcmVzc2lvbik7CisJICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVj
dCgnXScpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGVsc2UgeworCSAg
ICAgICAgICAgICAgICAgICAga2V5ID0gdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbik7
CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAg
ICAgZGVmYXVsdDoKKwkgICAgICAgICAgICAgICAga2V5ID0gdGhpcy50aHJvd1VuZXhwZWN0ZWRU
b2tlbih0b2tlbik7CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4ga2V5OworCSAgICB9Owor
CSAgICBQYXJzZXIucHJvdG90eXBlLmlzUHJvcGVydHlLZXkgPSBmdW5jdGlvbiAoa2V5LCB2YWx1
ZSkgeworCSAgICAgICAgcmV0dXJuIChrZXkudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LklkZW50
aWZpZXIgJiYga2V5Lm5hbWUgPT09IHZhbHVlKSB8fAorCSAgICAgICAgICAgIChrZXkudHlwZSA9
PT0gc3ludGF4XzEuU3ludGF4LkxpdGVyYWwgJiYga2V5LnZhbHVlID09PSB2YWx1ZSk7CisJICAg
IH07CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VPYmplY3RQcm9wZXJ0eSA9IGZ1bmN0aW9u
IChoYXNQcm90bykgeworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkg
ICAgICAgIHZhciB0b2tlbiA9IHRoaXMubG9va2FoZWFkOworCSAgICAgICAgdmFyIGtpbmQ7CisJ
ICAgICAgICB2YXIga2V5ID0gbnVsbDsKKwkgICAgICAgIHZhciB2YWx1ZSA9IG51bGw7CisJICAg
ICAgICB2YXIgY29tcHV0ZWQgPSBmYWxzZTsKKwkgICAgICAgIHZhciBtZXRob2QgPSBmYWxzZTsK
KwkgICAgICAgIHZhciBzaG9ydGhhbmQgPSBmYWxzZTsKKwkgICAgICAgIHZhciBpc0FzeW5jID0g
ZmFsc2U7CisJICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gdG9rZW5fMS5Ub2tlbi5JZGVudGlm
aWVyKSB7CisJICAgICAgICAgICAgdmFyIGlkID0gdG9rZW4udmFsdWU7CisJICAgICAgICAgICAg
dGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgICAgICBpZiAoaWQgPT09ICdhc3luYycpIHsKKwkg
ICAgICAgICAgICAgICAgaXNBc3luYyA9ICF0aGlzLmhhc0xpbmVUZXJtaW5hdG9yICYmICh0aGlz
Lmxvb2thaGVhZC50eXBlID09PSB0b2tlbl8xLlRva2VuLklkZW50aWZpZXIpOworCSAgICAgICAg
ICAgICAgICBpZiAoaXNBc3luYykgeworCSAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlz
Lmxvb2thaGVhZDsKKwkgICAgICAgICAgICAgICAgICAgIGlkID0gdG9rZW4udmFsdWU7CisJICAg
ICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgICAgICAgICB9CisJ
ICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGtleSA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3
IE5vZGUuSWRlbnRpZmllcihpZCkpOworCSAgICAgICAgfQorCSAgICAgICAgZWxzZSBpZiAodGhp
cy5tYXRjaCgnKicpKSB7CisJICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAg
IH0KKwkgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgIGNvbXB1dGVkID0gdGhpcy5tYXRjaCgn
WycpOworCSAgICAgICAgICAgIGtleSA9IHRoaXMucGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpOwor
CSAgICAgICAgfQorCSAgICAgICAgdmFyIGxvb2thaGVhZFByb3BlcnR5S2V5ID0gdGhpcy5xdWFs
aWZpZWRQcm9wZXJ0eU5hbWUodGhpcy5sb29rYWhlYWQpOworCSAgICAgICAgaWYgKHRva2VuLnR5
cGUgPT09IHRva2VuXzEuVG9rZW4uSWRlbnRpZmllciAmJiAhaXNBc3luYyAmJiB0b2tlbi52YWx1
ZSA9PT0gJ2dldCcgJiYgbG9va2FoZWFkUHJvcGVydHlLZXkpIHsKKwkgICAgICAgICAgICBraW5k
ID0gJ2dldCc7CisJICAgICAgICAgICAgY29tcHV0ZWQgPSB0aGlzLm1hdGNoKCdbJyk7CisJICAg
ICAgICAgICAga2V5ID0gdGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7CisJICAgICAgICAg
ICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSBmYWxzZTsKKwkgICAgICAgICAgICB2YWx1ZSA9
IHRoaXMucGFyc2VHZXR0ZXJNZXRob2QoKTsKKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgaWYg
KHRva2VuLnR5cGUgPT09IHRva2VuXzEuVG9rZW4uSWRlbnRpZmllciAmJiAhaXNBc3luYyAmJiB0
b2tlbi52YWx1ZSA9PT0gJ3NldCcgJiYgbG9va2FoZWFkUHJvcGVydHlLZXkpIHsKKwkgICAgICAg
ICAgICBraW5kID0gJ3NldCc7CisJICAgICAgICAgICAgY29tcHV0ZWQgPSB0aGlzLm1hdGNoKCdb
Jyk7CisJICAgICAgICAgICAga2V5ID0gdGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7CisJ
ICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnBhcnNlU2V0dGVyTWV0aG9kKCk7CisJICAgICAgICB9
CisJICAgICAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSB0b2tlbl8xLlRva2VuLlB1bmN0dWF0
b3IgJiYgdG9rZW4udmFsdWUgPT09ICcqJyAmJiBsb29rYWhlYWRQcm9wZXJ0eUtleSkgeworCSAg
ICAgICAgICAgIGtpbmQgPSAnaW5pdCc7CisJICAgICAgICAgICAgY29tcHV0ZWQgPSB0aGlzLm1h
dGNoKCdbJyk7CisJICAgICAgICAgICAga2V5ID0gdGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5
KCk7CisJICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnBhcnNlR2VuZXJhdG9yTWV0aG9kKCk7CisJ
ICAgICAgICAgICAgbWV0aG9kID0gdHJ1ZTsKKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2Ugewor
CSAgICAgICAgICAgIGlmICgha2V5KSB7CisJICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4
cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAg
ICBraW5kID0gJ2luaXQnOworCSAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCc6JykpIHsKKwkg
ICAgICAgICAgICAgICAgaWYgKCFjb21wdXRlZCAmJiB0aGlzLmlzUHJvcGVydHlLZXkoa2V5LCAn
X19wcm90b19fJykpIHsKKwkgICAgICAgICAgICAgICAgICAgIGlmIChoYXNQcm90by52YWx1ZSkg
eworCSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18x
Lk1lc3NhZ2VzLkR1cGxpY2F0ZVByb3RvUHJvcGVydHkpOworCSAgICAgICAgICAgICAgICAgICAg
fQorCSAgICAgICAgICAgICAgICAgICAgaGFzUHJvdG8udmFsdWUgPSB0cnVlOworCSAgICAgICAg
ICAgICAgICB9CisJICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICAg
ICAgICAgIHZhbHVlID0gdGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25t
ZW50RXhwcmVzc2lvbik7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYgKHRo
aXMubWF0Y2goJygnKSkgeworCSAgICAgICAgICAgICAgICB2YWx1ZSA9IGlzQXN5bmMgPyB0aGlz
LnBhcnNlUHJvcGVydHlNZXRob2RBc3luY0Z1bmN0aW9uKCkgOiB0aGlzLnBhcnNlUHJvcGVydHlN
ZXRob2RGdW5jdGlvbigpOworCSAgICAgICAgICAgICAgICBtZXRob2QgPSB0cnVlOworCSAgICAg
ICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSB0b2tlbl8xLlRv
a2VuLklkZW50aWZpZXIpIHsKKwkgICAgICAgICAgICAgICAgdmFyIGlkID0gdGhpcy5maW5hbGl6
ZShub2RlLCBuZXcgTm9kZS5JZGVudGlmaWVyKHRva2VuLnZhbHVlKSk7CisJICAgICAgICAgICAg
ICAgIGlmICh0aGlzLm1hdGNoKCc9JykpIHsKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMuY29u
dGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSB0aGlzLmxvb2thaGVhZDsKKwkg
ICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICAgICAgICAgICAg
ICBzaG9ydGhhbmQgPSB0cnVlOworCSAgICAgICAgICAgICAgICAgICAgdmFyIGluaXQgPSB0aGlz
Lmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKKwkg
ICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5B
c3NpZ25tZW50UGF0dGVybihpZCwgaW5pdCkpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAg
ICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICAgICAgc2hvcnRoYW5kID0gdHJ1ZTsK
KwkgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaWQ7CisJICAgICAgICAgICAgICAgIH0KKwkg
ICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgIHRoaXMu
dGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5uZXh0VG9rZW4oKSk7CisJICAgICAgICAgICAgfQor
CSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUu
UHJvcGVydHkoa2luZCwgKGtleSksIGNvbXB1dGVkLCB2YWx1ZSwgbWV0aG9kLCBzaG9ydGhhbmQp
KTsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZU9iamVjdEluaXRpYWxpemVy
ID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsK
KwkgICAgICAgIHRoaXMuZXhwZWN0KCd7Jyk7CisJICAgICAgICB2YXIgcHJvcGVydGllcyA9IFtd
OworCSAgICAgICAgdmFyIGhhc1Byb3RvID0geyB2YWx1ZTogZmFsc2UgfTsKKwkgICAgICAgIHdo
aWxlICghdGhpcy5tYXRjaCgnfScpKSB7CisJICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKHRo
aXMucGFyc2VPYmplY3RQcm9wZXJ0eShoYXNQcm90bykpOworCSAgICAgICAgICAgIGlmICghdGhp
cy5tYXRjaCgnfScpKSB7CisJICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0Q29tbWFTZXBhcmF0
b3IoKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICB0aGlzLmV4cGVjdCgn
fScpOworCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuT2JqZWN0
RXhwcmVzc2lvbihwcm9wZXJ0aWVzKSk7CisJICAgIH07CisJICAgIC8vIEVDTUEtMjYyIDEyLjIu
OSBUZW1wbGF0ZSBMaXRlcmFscworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlVGVtcGxhdGVI
ZWFkID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KHRoaXMubG9va2Fo
ZWFkLmhlYWQsICdUZW1wbGF0ZSBsaXRlcmFsIG11c3Qgc3RhcnQgd2l0aCBhIHRlbXBsYXRlIGhl
YWQnKTsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICB2
YXIgdG9rZW4gPSB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgdmFyIHZhbHVlID0geworCSAg
ICAgICAgICAgIHJhdzogdG9rZW4udmFsdWUucmF3LAorCSAgICAgICAgICAgIGNvb2tlZDogdG9r
ZW4udmFsdWUuY29va2VkCisJICAgICAgICB9OworCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxp
emUobm9kZSwgbmV3IE5vZGUuVGVtcGxhdGVFbGVtZW50KHZhbHVlLCB0b2tlbi50YWlsKSk7CisJ
ICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VUZW1wbGF0ZUVsZW1lbnQgPSBmdW5j
dGlvbiAoKSB7CisJICAgICAgICBpZiAodGhpcy5sb29rYWhlYWQudHlwZSAhPT0gdG9rZW5fMS5U
b2tlbi5UZW1wbGF0ZSkgeworCSAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4o
KTsKKwkgICAgICAgIH0KKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJ
ICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgdmFyIHZhbHVl
ID0geworCSAgICAgICAgICAgIHJhdzogdG9rZW4udmFsdWUucmF3LAorCSAgICAgICAgICAgIGNv
b2tlZDogdG9rZW4udmFsdWUuY29va2VkCisJICAgICAgICB9OworCSAgICAgICAgcmV0dXJuIHRo
aXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuVGVtcGxhdGVFbGVtZW50KHZhbHVlLCB0b2tlbi50
YWlsKSk7CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VUZW1wbGF0ZUxpdGVy
YWwgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgp
OworCSAgICAgICAgdmFyIGV4cHJlc3Npb25zID0gW107CisJICAgICAgICB2YXIgcXVhc2lzID0g
W107CisJICAgICAgICB2YXIgcXVhc2kgPSB0aGlzLnBhcnNlVGVtcGxhdGVIZWFkKCk7CisJICAg
ICAgICBxdWFzaXMucHVzaChxdWFzaSk7CisJICAgICAgICB3aGlsZSAoIXF1YXNpLnRhaWwpIHsK
KwkgICAgICAgICAgICBleHByZXNzaW9ucy5wdXNoKHRoaXMucGFyc2VFeHByZXNzaW9uKCkpOwor
CSAgICAgICAgICAgIHF1YXNpID0gdGhpcy5wYXJzZVRlbXBsYXRlRWxlbWVudCgpOworCSAgICAg
ICAgICAgIHF1YXNpcy5wdXNoKHF1YXNpKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiB0
aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlRlbXBsYXRlTGl0ZXJhbChxdWFzaXMsIGV4cHJl
c3Npb25zKSk7CisJICAgIH07CisJICAgIC8vIEVDTUEtMjYyIDEyLjIuMTAgVGhlIEdyb3VwaW5n
IE9wZXJhdG9yCisJICAgIFBhcnNlci5wcm90b3R5cGUucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQ
YXR0ZXJuID0gZnVuY3Rpb24gKGV4cHIpIHsKKwkgICAgICAgIHN3aXRjaCAoZXhwci50eXBlKSB7
CisJICAgICAgICAgICAgY2FzZSBzeW50YXhfMS5TeW50YXguSWRlbnRpZmllcjoKKwkgICAgICAg
ICAgICBjYXNlIHN5bnRheF8xLlN5bnRheC5NZW1iZXJFeHByZXNzaW9uOgorCSAgICAgICAgICAg
IGNhc2Ugc3ludGF4XzEuU3ludGF4LlJlc3RFbGVtZW50OgorCSAgICAgICAgICAgIGNhc2Ugc3lu
dGF4XzEuU3ludGF4LkFzc2lnbm1lbnRQYXR0ZXJuOgorCSAgICAgICAgICAgICAgICBicmVhazsK
KwkgICAgICAgICAgICBjYXNlIHN5bnRheF8xLlN5bnRheC5TcHJlYWRFbGVtZW50OgorCSAgICAg
ICAgICAgICAgICBleHByLnR5cGUgPSBzeW50YXhfMS5TeW50YXguUmVzdEVsZW1lbnQ7CisJICAg
ICAgICAgICAgICAgIHRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIuYXJn
dW1lbnQpOworCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICBjYXNlIHN5bnRh
eF8xLlN5bnRheC5BcnJheUV4cHJlc3Npb246CisJICAgICAgICAgICAgICAgIGV4cHIudHlwZSA9
IHN5bnRheF8xLlN5bnRheC5BcnJheVBhdHRlcm47CisJICAgICAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgZXhwci5lbGVtZW50cy5sZW5ndGg7IGkrKykgeworCSAgICAgICAgICAgICAg
ICAgICAgaWYgKGV4cHIuZWxlbWVudHNbaV0gIT09IG51bGwpIHsKKwkgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLnJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihleHByLmVsZW1lbnRz
W2ldKTsKKwkgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgfQorCSAgICAg
ICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICBjYXNlIHN5bnRheF8xLlN5bnRheC5PYmpl
Y3RFeHByZXNzaW9uOgorCSAgICAgICAgICAgICAgICBleHByLnR5cGUgPSBzeW50YXhfMS5TeW50
YXguT2JqZWN0UGF0dGVybjsKKwkgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBl
eHByLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHsKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMu
cmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIucHJvcGVydGllc1tpXS52YWx1ZSk7
CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAg
ICAgY2FzZSBzeW50YXhfMS5TeW50YXguQXNzaWdubWVudEV4cHJlc3Npb246CisJICAgICAgICAg
ICAgICAgIGV4cHIudHlwZSA9IHN5bnRheF8xLlN5bnRheC5Bc3NpZ25tZW50UGF0dGVybjsKKwkg
ICAgICAgICAgICAgICAgZGVsZXRlIGV4cHIub3BlcmF0b3I7CisJICAgICAgICAgICAgICAgIHRo
aXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIubGVmdCk7CisJICAgICAgICAg
ICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIGRlZmF1bHQ6CisJICAgICAgICAgICAgICAgIC8v
IEFsbG93IG90aGVyIG5vZGUgdHlwZSBmb3IgdG9sZXJhbnQgcGFyc2luZy4KKwkgICAgICAgICAg
ICAgICAgYnJlYWs7CisJICAgICAgICB9CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUu
cGFyc2VHcm91cEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgZXhwcjsK
KwkgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7CisJICAgICAgICBpZiAodGhpcy5tYXRjaCgnKScp
KSB7CisJICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgICAgICBpZiAoIXRo
aXMubWF0Y2goJz0+JykpIHsKKwkgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJz0+Jyk7CisJ
ICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGV4cHIgPSB7CisJICAgICAgICAgICAgICAgIHR5
cGU6IEFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIsCisJICAgICAgICAgICAgICAgIHBhcmFtczog
W10sCisJICAgICAgICAgICAgICAgIGFzeW5jOiBmYWxzZQorCSAgICAgICAgICAgIH07CisJICAg
ICAgICB9CisJICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICB2YXIgc3RhcnRUb2tlbiA9IHRo
aXMubG9va2FoZWFkOworCSAgICAgICAgICAgIHZhciBwYXJhbXMgPSBbXTsKKwkgICAgICAgICAg
ICBpZiAodGhpcy5tYXRjaCgnLi4uJykpIHsKKwkgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMu
cGFyc2VSZXN0RWxlbWVudChwYXJhbXMpOworCSAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgn
KScpOworCSAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2goJz0+JykpIHsKKwkgICAgICAg
ICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCc9PicpOworCSAgICAgICAgICAgICAgICB9CisJICAg
ICAgICAgICAgICAgIGV4cHIgPSB7CisJICAgICAgICAgICAgICAgICAgICB0eXBlOiBBcnJvd1Bh
cmFtZXRlclBsYWNlSG9sZGVyLAorCSAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbZXhwcl0s
CisJICAgICAgICAgICAgICAgICAgICBhc3luYzogZmFsc2UKKwkgICAgICAgICAgICAgICAgfTsK
KwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgIHZh
ciBhcnJvdyA9IGZhbHNlOworCSAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5n
RWxlbWVudCA9IHRydWU7CisJICAgICAgICAgICAgICAgIGV4cHIgPSB0aGlzLmluaGVyaXRDb3Zl
ckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKKwkgICAgICAgICAgICAg
ICAgaWYgKHRoaXMubWF0Y2goJywnKSkgeworCSAgICAgICAgICAgICAgICAgICAgdmFyIGV4cHJl
c3Npb25zID0gW107CisJICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25t
ZW50VGFyZ2V0ID0gZmFsc2U7CisJICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9ucy5wdXNo
KGV4cHIpOworCSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMuc3RhcnRNYXJrZXIuaW5k
ZXggPCB0aGlzLnNjYW5uZXIubGVuZ3RoKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCF0aGlzLm1hdGNoKCcsJykpIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisJICAgICAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMubmV4dFRva2VuKCk7CisJICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2go
JyknKSkgeworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwor
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cHJlc3Np
b25zLmxlbmd0aDsgaSsrKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LnJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihleHByZXNzaW9uc1tpXSk7CisJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJy
b3cgPSB0cnVlOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByID0geworCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRl
ciwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogZXhwcmVzc2lvbnMs
CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYzogZmFsc2UKKwkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfTsKKwkgICAgICAgICAgICAgICAgICAgICAgICB9CisJICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaCgnLi4uJykpIHsKKwkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVu
dCkgeworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0
ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMucHVzaCh0aGlzLnBhcnNl
UmVzdEVsZW1lbnQocGFyYW1zKSk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
ZXhwZWN0KCcpJyk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXRj
aCgnPT4nKSkgeworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3Qo
Jz0+Jyk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKKwkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHByZXNzaW9ucy5s
ZW5ndGg7IGkrKykgeworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWlu
dGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZXhwcmVzc2lvbnNbaV0pOworCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycm93ID0g
dHJ1ZTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IHsKKwkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IEFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIsCisJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IGV4cHJlc3Npb25zLAorCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmM6IGZhbHNlCisJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH07CisJICAgICAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBy
ZXNzaW9ucy5wdXNoKHRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVu
dEV4cHJlc3Npb24pKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGFycm93KSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworCSAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgIH0K
KwkgICAgICAgICAgICAgICAgICAgIGlmICghYXJyb3cpIHsKKwkgICAgICAgICAgICAgICAgICAg
ICAgICBleHByID0gdGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShzdGFydFRva2VuKSwgbmV3
IE5vZGUuU2VxdWVuY2VFeHByZXNzaW9uKGV4cHJlc3Npb25zKSk7CisJICAgICAgICAgICAgICAg
ICAgICB9CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgaWYgKCFhcnJvdykg
eworCSAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJyknKTsKKwkgICAgICAgICAgICAg
ICAgICAgIGlmICh0aGlzLm1hdGNoKCc9PicpKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGV4cHIudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LklkZW50aWZpZXIgJiYgZXhwci5uYW1l
ID09PSAneWllbGQnKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycm93ID0gdHJ1
ZTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwciA9IHsKKwkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGU6IEFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXIsCisJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtleHByXSwKKwkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFzeW5jOiBmYWxzZQorCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9OworCSAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIWFycm93KSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
dGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQpIHsKKwkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpOworCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChleHByLnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5TZXF1ZW5jZUV4cHJlc3Npb24pIHsK
KwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhw
ci5leHByZXNzaW9ucy5sZW5ndGg7IGkrKykgeworCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGV4cHIuZXhwcmVz
c2lvbnNbaV0pOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug
eworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWludGVycHJldEV4cHJl
c3Npb25Bc1BhdHRlcm4oZXhwcik7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmFtc18xID0gKGV4cHIudHlwZSA9PT0g
c3ludGF4XzEuU3ludGF4LlNlcXVlbmNlRXhwcmVzc2lvbiA/IGV4cHIuZXhwcmVzc2lvbnMgOiBb
ZXhwcl0pOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByID0geworCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlciwK
KwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1zXzEsCisJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYzogZmFsc2UKKwkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfTsKKwkgICAgICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAg
ICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5n
RWxlbWVudCA9IGZhbHNlOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQorCSAg
ICAgICAgfQorCSAgICAgICAgcmV0dXJuIGV4cHI7CisJICAgIH07CisJICAgIC8vIEVDTUEtMjYy
IDEyLjMgTGVmdC1IYW5kLVNpZGUgRXhwcmVzc2lvbnMKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5w
YXJzZUFyZ3VtZW50cyA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7
CisJICAgICAgICB2YXIgYXJncyA9IFtdOworCSAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCcpJykp
IHsKKwkgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworCSAgICAgICAgICAgICAgICB2YXIgZXhw
ciA9IHRoaXMubWF0Y2goJy4uLicpID8gdGhpcy5wYXJzZVNwcmVhZEVsZW1lbnQoKSA6CisJICAg
ICAgICAgICAgICAgICAgICB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2ln
bm1lbnRFeHByZXNzaW9uKTsKKwkgICAgICAgICAgICAgICAgYXJncy5wdXNoKGV4cHIpOworCSAg
ICAgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnKScpKSB7CisJICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICB0aGlzLmV4cGVj
dENvbW1hU2VwYXJhdG9yKCk7CisJICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCcpJykp
IHsKKwkgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICB9CisJICAg
ICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgdGhpcy5leHBlY3QoJyknKTsKKwkgICAg
ICAgIHJldHVybiBhcmdzOworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLmlzSWRlbnRp
Zmllck5hbWUgPSBmdW5jdGlvbiAodG9rZW4pIHsKKwkgICAgICAgIHJldHVybiB0b2tlbi50eXBl
ID09PSB0b2tlbl8xLlRva2VuLklkZW50aWZpZXIgfHwKKwkgICAgICAgICAgICB0b2tlbi50eXBl
ID09PSB0b2tlbl8xLlRva2VuLktleXdvcmQgfHwKKwkgICAgICAgICAgICB0b2tlbi50eXBlID09
PSB0b2tlbl8xLlRva2VuLkJvb2xlYW5MaXRlcmFsIHx8CisJICAgICAgICAgICAgdG9rZW4udHlw
ZSA9PT0gdG9rZW5fMS5Ub2tlbi5OdWxsTGl0ZXJhbDsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnBy
b3RvdHlwZS5wYXJzZUlkZW50aWZpZXJOYW1lID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFy
IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubmV4
dFRva2VuKCk7CisJICAgICAgICBpZiAoIXRoaXMuaXNJZGVudGlmaWVyTmFtZSh0b2tlbikpIHsK
KwkgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRva2VuKTsKKwkgICAgICAg
IH0KKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLklkZW50aWZp
ZXIodG9rZW4udmFsdWUpKTsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZU5l
d0V4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3Jl
YXRlTm9kZSgpOworCSAgICAgICAgdmFyIGlkID0gdGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCk7
CisJICAgICAgICBhc3NlcnRfMS5hc3NlcnQoaWQubmFtZSA9PT0gJ25ldycsICdOZXcgZXhwcmVz
c2lvbiBtdXN0IHN0YXJ0IHdpdGggYG5ld2AnKTsKKwkgICAgICAgIHZhciBleHByOworCSAgICAg
ICAgaWYgKHRoaXMubWF0Y2goJy4nKSkgeworCSAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7
CisJICAgICAgICAgICAgaWYgKHRoaXMubG9va2FoZWFkLnR5cGUgPT09IHRva2VuXzEuVG9rZW4u
SWRlbnRpZmllciAmJiB0aGlzLmNvbnRleHQuaW5GdW5jdGlvbkJvZHkgJiYgdGhpcy5sb29rYWhl
YWQudmFsdWUgPT09ICd0YXJnZXQnKSB7CisJICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9
IHRoaXMucGFyc2VJZGVudGlmaWVyTmFtZSgpOworCSAgICAgICAgICAgICAgICBleHByID0gbmV3
IE5vZGUuTWV0YVByb3BlcnR5KGlkLCBwcm9wZXJ0eSk7CisJICAgICAgICAgICAgfQorCSAgICAg
ICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2Vu
KHRoaXMubG9va2FoZWFkKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICBl
bHNlIHsKKwkgICAgICAgICAgICB2YXIgY2FsbGVlID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFy
KHRoaXMucGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uKTsKKwkgICAgICAgICAgICB2YXIgYXJn
cyA9IHRoaXMubWF0Y2goJygnKSA/IHRoaXMucGFyc2VBcmd1bWVudHMoKSA6IFtdOworCSAgICAg
ICAgICAgIGV4cHIgPSBuZXcgTm9kZS5OZXdFeHByZXNzaW9uKGNhbGxlZSwgYXJncyk7CisJICAg
ICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNlOworCSAgICAg
ICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7CisJICAgICAgICB9
CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBleHByKTsKKwkgICAgfTsKKwkg
ICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUFzeW5jQXJndW1lbnQgPSBmdW5jdGlvbiAoKSB7CisJ
ICAgICAgICB2YXIgYXJnID0gdGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisJICAg
ICAgICB0aGlzLmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gbnVsbDsK
KwkgICAgICAgIHJldHVybiBhcmc7CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFy
c2VBc3luY0FyZ3VtZW50cyA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHRoaXMuZXhwZWN0KCco
Jyk7CisJICAgICAgICB2YXIgYXJncyA9IFtdOworCSAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCcp
JykpIHsKKwkgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworCSAgICAgICAgICAgICAgICB2YXIg
ZXhwciA9IHRoaXMubWF0Y2goJy4uLicpID8gdGhpcy5wYXJzZVNwcmVhZEVsZW1lbnQoKSA6CisJ
ICAgICAgICAgICAgICAgICAgICB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFz
eW5jQXJndW1lbnQpOworCSAgICAgICAgICAgICAgICBhcmdzLnB1c2goZXhwcik7CisJICAgICAg
ICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCcpJykpIHsKKwkgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0Q29t
bWFTZXBhcmF0b3IoKTsKKwkgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJyknKSkgewor
CSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAg
ICAgICB9CisJICAgICAgICB9CisJICAgICAgICB0aGlzLmV4cGVjdCgnKScpOworCSAgICAgICAg
cmV0dXJuIGFyZ3M7CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VMZWZ0SGFu
ZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIHN0
YXJ0VG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKKwkgICAgICAgIHZhciBtYXliZUFzeW5jID0gdGhp
cy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdhc3luYycpOworCSAgICAgICAgdmFyIHByZXZpb3Vz
QWxsb3dJbiA9IHRoaXMuY29udGV4dC5hbGxvd0luOworCSAgICAgICAgdGhpcy5jb250ZXh0LmFs
bG93SW4gPSB0cnVlOworCSAgICAgICAgdmFyIGV4cHI7CisJICAgICAgICBpZiAodGhpcy5tYXRj
aEtleXdvcmQoJ3N1cGVyJykgJiYgdGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5KSB7CisJICAg
ICAgICAgICAgZXhwciA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgICAgIHRoaXMubmV4
dFRva2VuKCk7CisJICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUoZXhwciwgbmV3IE5v
ZGUuU3VwZXIoKSk7CisJICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCcoJykgJiYgIXRoaXMu
bWF0Y2goJy4nKSAmJiAhdGhpcy5tYXRjaCgnWycpKSB7CisJICAgICAgICAgICAgICAgIHRoaXMu
dGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpOworCSAgICAgICAgICAgIH0KKwkg
ICAgICAgIH0KKwkgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgIGV4cHIgPSB0aGlzLmluaGVy
aXRDb3ZlckdyYW1tYXIodGhpcy5tYXRjaEtleXdvcmQoJ25ldycpID8gdGhpcy5wYXJzZU5ld0V4
cHJlc3Npb24gOiB0aGlzLnBhcnNlUHJpbWFyeUV4cHJlc3Npb24pOworCSAgICAgICAgfQorCSAg
ICAgICAgd2hpbGUgKHRydWUpIHsKKwkgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnLicpKSB7
CisJICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7
CisJICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSB0cnVl
OworCSAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnLicpOworCSAgICAgICAgICAgICAgICB2
YXIgcHJvcGVydHkgPSB0aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKTsKKwkgICAgICAgICAgICAg
ICAgZXhwciA9IHRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBO
b2RlLlN0YXRpY01lbWJlckV4cHJlc3Npb24oZXhwciwgcHJvcGVydHkpKTsKKwkgICAgICAgICAg
ICB9CisJICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaCgnKCcpKSB7CisJICAgICAgICAg
ICAgICAgIHZhciBhc3luY0Fycm93ID0gbWF5YmVBc3luYyAmJiAoc3RhcnRUb2tlbi5saW5lTnVt
YmVyID09PSB0aGlzLmxvb2thaGVhZC5saW5lTnVtYmVyKTsKKwkgICAgICAgICAgICAgICAgdGhp
cy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKKwkgICAgICAgICAgICAgICAgdGhp
cy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNlOworCSAgICAgICAgICAgICAgICB2
YXIgYXJncyA9IGFzeW5jQXJyb3cgPyB0aGlzLnBhcnNlQXN5bmNBcmd1bWVudHMoKSA6IHRoaXMu
cGFyc2VBcmd1bWVudHMoKTsKKwkgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUo
dGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBOb2RlLkNhbGxFeHByZXNzaW9uKGV4cHIs
IGFyZ3MpKTsKKwkgICAgICAgICAgICAgICAgaWYgKGFzeW5jQXJyb3cgJiYgdGhpcy5tYXRjaCgn
PT4nKSkgeworCSAgICAgICAgICAgICAgICAgICAgZXhwciA9IHsKKwkgICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlOiBBcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVyLAorCSAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtczogYXJncywKKwkgICAgICAgICAgICAgICAgICAgICAgICBhc3luYzog
dHJ1ZQorCSAgICAgICAgICAgICAgICAgICAgfTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAg
ICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoKCdbJykpIHsKKwkgICAg
ICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKKwkgICAg
ICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IHRydWU7CisJICAg
ICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCdbJyk7CisJICAgICAgICAgICAgICAgIHZhciBwcm9w
ZXJ0eSA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlRXhwcmVzc2lvbik7CisJ
ICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KCddJyk7CisJICAgICAgICAgICAgICAgIGV4cHIg
PSB0aGlzLmZpbmFsaXplKHRoaXMuc3RhcnROb2RlKHN0YXJ0VG9rZW4pLCBuZXcgTm9kZS5Db21w
dXRlZE1lbWJlckV4cHJlc3Npb24oZXhwciwgcHJvcGVydHkpKTsKKwkgICAgICAgICAgICB9CisJ
ICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5sb29rYWhlYWQudHlwZSA9PT0gdG9rZW5fMS5Ub2tl
bi5UZW1wbGF0ZSAmJiB0aGlzLmxvb2thaGVhZC5oZWFkKSB7CisJICAgICAgICAgICAgICAgIHZh
ciBxdWFzaSA9IHRoaXMucGFyc2VUZW1wbGF0ZUxpdGVyYWwoKTsKKwkgICAgICAgICAgICAgICAg
ZXhwciA9IHRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBOb2Rl
LlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbihleHByLCBxdWFzaSkpOworCSAgICAgICAgICAgIH0K
KwkgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAg
ICAgfQorCSAgICAgICAgfQorCSAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93SW4gPSBwcmV2aW91
c0FsbG93SW47CisJICAgICAgICByZXR1cm4gZXhwcjsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnBy
b3RvdHlwZS5wYXJzZVN1cGVyID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIG5vZGUgPSB0
aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnc3VwZXInKTsK
KwkgICAgICAgIGlmICghdGhpcy5tYXRjaCgnWycpICYmICF0aGlzLm1hdGNoKCcuJykpIHsKKwkg
ICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTsKKwkg
ICAgICAgIH0KKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlN1
cGVyKCkpOworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlTGVmdEhhbmRTaWRl
RXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIGFzc2VydF8xLmFzc2VydCh0aGlz
LmNvbnRleHQuYWxsb3dJbiwgJ2NhbGxlZSBvZiBuZXcgZXhwcmVzc2lvbiBhbHdheXMgYWxsb3cg
aW4ga2V5d29yZC4nKTsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUodGhpcy5s
b29rYWhlYWQpOworCSAgICAgICAgdmFyIGV4cHIgPSAodGhpcy5tYXRjaEtleXdvcmQoJ3N1cGVy
JykgJiYgdGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5KSA/IHRoaXMucGFyc2VTdXBlcigpIDoK
KwkgICAgICAgICAgICB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5tYXRjaEtleXdvcmQo
J25ldycpID8gdGhpcy5wYXJzZU5ld0V4cHJlc3Npb24gOiB0aGlzLnBhcnNlUHJpbWFyeUV4cHJl
c3Npb24pOworCSAgICAgICAgd2hpbGUgKHRydWUpIHsKKwkgICAgICAgICAgICBpZiAodGhpcy5t
YXRjaCgnWycpKSB7CisJICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVt
ZW50ID0gZmFsc2U7CisJICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRU
YXJnZXQgPSB0cnVlOworCSAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnWycpOworCSAgICAg
ICAgICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5w
YXJzZUV4cHJlc3Npb24pOworCSAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnXScpOworCSAg
ICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Db21wdXRl
ZE1lbWJlckV4cHJlc3Npb24oZXhwciwgcHJvcGVydHkpKTsKKwkgICAgICAgICAgICB9CisJICAg
ICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaCgnLicpKSB7CisJICAgICAgICAgICAgICAgIHRo
aXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7CisJICAgICAgICAgICAgICAgIHRo
aXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSB0cnVlOworCSAgICAgICAgICAgICAgICB0
aGlzLmV4cGVjdCgnLicpOworCSAgICAgICAgICAgICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLnBh
cnNlSWRlbnRpZmllck5hbWUoKTsKKwkgICAgICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxp
emUobm9kZSwgbmV3IE5vZGUuU3RhdGljTWVtYmVyRXhwcmVzc2lvbihleHByLCBwcm9wZXJ0eSkp
OworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmxvb2thaGVhZC50
eXBlID09PSB0b2tlbl8xLlRva2VuLlRlbXBsYXRlICYmIHRoaXMubG9va2FoZWFkLmhlYWQpIHsK
KwkgICAgICAgICAgICAgICAgdmFyIHF1YXNpID0gdGhpcy5wYXJzZVRlbXBsYXRlTGl0ZXJhbCgp
OworCSAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5U
YWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24oZXhwciwgcXVhc2kpKTsKKwkgICAgICAgICAgICB9CisJ
ICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAg
IH0KKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiBleHByOworCSAgICB9OworCSAgICAvLyBF
Q01BLTI2MiAxMi40IFVwZGF0ZSBFeHByZXNzaW9ucworCSAgICBQYXJzZXIucHJvdG90eXBlLnBh
cnNlVXBkYXRlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBleHByOwor
CSAgICAgICAgdmFyIHN0YXJ0VG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKKwkgICAgICAgIGlmICh0
aGlzLm1hdGNoKCcrKycpIHx8IHRoaXMubWF0Y2goJy0tJykpIHsKKwkgICAgICAgICAgICB2YXIg
bm9kZSA9IHRoaXMuc3RhcnROb2RlKHN0YXJ0VG9rZW4pOworCSAgICAgICAgICAgIHZhciB0b2tl
biA9IHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICAgICAgZXhwciA9IHRoaXMuaW5oZXJpdENv
dmVyR3JhbW1hcih0aGlzLnBhcnNlVW5hcnlFeHByZXNzaW9uKTsKKwkgICAgICAgICAgICBpZiAo
dGhpcy5jb250ZXh0LnN0cmljdCAmJiBleHByLnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5JZGVu
dGlmaWVyICYmIHRoaXMuc2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKGV4cHIubmFtZSkpIHsKKwkg
ICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3Ry
aWN0TEhTUHJlZml4KTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgaWYgKCF0aGlzLmNv
bnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0KSB7CisJICAgICAgICAgICAgICAgIHRoaXMudG9sZXJh
dGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpOworCSAg
ICAgICAgICAgIH0KKwkgICAgICAgICAgICB2YXIgcHJlZml4ID0gdHJ1ZTsKKwkgICAgICAgICAg
ICBleHByID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5VcGRhdGVFeHByZXNzaW9uKHRv
a2VuLnZhbHVlLCBleHByLCBwcmVmaXgpKTsKKwkgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNB
c3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7CisJICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmlu
ZGluZ0VsZW1lbnQgPSBmYWxzZTsKKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgeworCSAgICAg
ICAgICAgIGV4cHIgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUxlZnRIYW5k
U2lkZUV4cHJlc3Npb25BbGxvd0NhbGwpOworCSAgICAgICAgICAgIGlmICghdGhpcy5oYXNMaW5l
VGVybWluYXRvciAmJiB0aGlzLmxvb2thaGVhZC50eXBlID09PSB0b2tlbl8xLlRva2VuLlB1bmN0
dWF0b3IpIHsKKwkgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJysrJykgfHwgdGhpcy5t
YXRjaCgnLS0nKSkgeworCSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJp
Y3QgJiYgZXhwci50eXBlID09PSBzeW50YXhfMS5TeW50YXguSWRlbnRpZmllciAmJiB0aGlzLnNj
YW5uZXIuaXNSZXN0cmljdGVkV29yZChleHByLm5hbWUpKSB7CisJICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0TEhTUG9z
dGZpeCk7CisJICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICBpZiAo
IXRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQpIHsKKwkgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLnRvbGVyYXRlRXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5JbnZhbGlkTEhTSW5B
c3NpZ25tZW50KTsKKwkgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAg
IHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTsKKwkgICAgICAgICAgICAg
ICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7CisJICAgICAgICAg
ICAgICAgICAgICB2YXIgb3BlcmF0b3IgPSB0aGlzLm5leHRUb2tlbigpLnZhbHVlOworCSAgICAg
ICAgICAgICAgICAgICAgdmFyIHByZWZpeCA9IGZhbHNlOworCSAgICAgICAgICAgICAgICAgICAg
ZXhwciA9IHRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBOb2Rl
LlVwZGF0ZUV4cHJlc3Npb24ob3BlcmF0b3IsIGV4cHIsIHByZWZpeCkpOworCSAgICAgICAgICAg
ICAgICB9CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIGV4cHI7
CisJICAgIH07CisJICAgIC8vIEVDTUEtMjYyIDEyLjUgVW5hcnkgT3BlcmF0b3JzCisJICAgIFBh
cnNlci5wcm90b3R5cGUucGFyc2VBd2FpdEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7CisJICAg
ICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdGhpcy5uZXh0VG9r
ZW4oKTsKKwkgICAgICAgIHZhciBhcmd1bWVudCA9IHRoaXMucGFyc2VVbmFyeUV4cHJlc3Npb24o
KTsKKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkF3YWl0RXhw
cmVzc2lvbihhcmd1bWVudCkpOworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNl
VW5hcnlFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIGV4cHI7CisJICAg
ICAgICBpZiAodGhpcy5tYXRjaCgnKycpIHx8IHRoaXMubWF0Y2goJy0nKSB8fCB0aGlzLm1hdGNo
KCd+JykgfHwgdGhpcy5tYXRjaCgnIScpIHx8CisJICAgICAgICAgICAgdGhpcy5tYXRjaEtleXdv
cmQoJ2RlbGV0ZScpIHx8IHRoaXMubWF0Y2hLZXl3b3JkKCd2b2lkJykgfHwgdGhpcy5tYXRjaEtl
eXdvcmQoJ3R5cGVvZicpKSB7CisJICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9k
ZSh0aGlzLmxvb2thaGVhZCk7CisJICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5uZXh0VG9r
ZW4oKTsKKwkgICAgICAgICAgICBleHByID0gdGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMu
cGFyc2VVbmFyeUV4cHJlc3Npb24pOworCSAgICAgICAgICAgIGV4cHIgPSB0aGlzLmZpbmFsaXpl
KG5vZGUsIG5ldyBOb2RlLlVuYXJ5RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgZXhwcikpOworCSAg
ICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIGV4cHIub3BlcmF0b3IgPT09ICdk
ZWxldGUnICYmIGV4cHIuYXJndW1lbnQudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LklkZW50aWZp
ZXIpIHsKKwkgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVz
c2FnZXMuU3RyaWN0RGVsZXRlKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgdGhpcy5j
b250ZXh0LmlzQXNzaWdubWVudFRhcmdldCA9IGZhbHNlOworCSAgICAgICAgICAgIHRoaXMuY29u
dGV4dC5pc0JpbmRpbmdFbGVtZW50ID0gZmFsc2U7CisJICAgICAgICB9CisJICAgICAgICBlbHNl
IGlmICh0aGlzLmNvbnRleHQuYXdhaXQgJiYgdGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdh
d2FpdCcpKSB7CisJICAgICAgICAgICAgZXhwciA9IHRoaXMucGFyc2VBd2FpdEV4cHJlc3Npb24o
KTsKKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgIGV4cHIgPSB0aGlz
LnBhcnNlVXBkYXRlRXhwcmVzc2lvbigpOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIGV4
cHI7CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VFeHBvbmVudGlhdGlvbkV4
cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgc3RhcnRUb2tlbiA9IHRoaXMu
bG9va2FoZWFkOworCSAgICAgICAgdmFyIGV4cHIgPSB0aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIo
dGhpcy5wYXJzZVVuYXJ5RXhwcmVzc2lvbik7CisJICAgICAgICBpZiAoZXhwci50eXBlICE9PSBz
eW50YXhfMS5TeW50YXguVW5hcnlFeHByZXNzaW9uICYmIHRoaXMubWF0Y2goJyoqJykpIHsKKwkg
ICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgICAgIHRoaXMuY29udGV4dC5p
c0Fzc2lnbm1lbnRUYXJnZXQgPSBmYWxzZTsKKwkgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNC
aW5kaW5nRWxlbWVudCA9IGZhbHNlOworCSAgICAgICAgICAgIHZhciBsZWZ0ID0gZXhwcjsKKwkg
ICAgICAgICAgICB2YXIgcmlnaHQgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJz
ZUV4cG9uZW50aWF0aW9uRXhwcmVzc2lvbik7CisJICAgICAgICAgICAgZXhwciA9IHRoaXMuZmlu
YWxpemUodGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBOb2RlLkJpbmFyeUV4cHJlc3Np
b24oJyoqJywgbGVmdCwgcmlnaHQpKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiBleHBy
OworCSAgICB9OworCSAgICAvLyBFQ01BLTI2MiAxMi42IEV4cG9uZW50aWF0aW9uIE9wZXJhdG9y
cworCSAgICAvLyBFQ01BLTI2MiAxMi43IE11bHRpcGxpY2F0aXZlIE9wZXJhdG9ycworCSAgICAv
LyBFQ01BLTI2MiAxMi44IEFkZGl0aXZlIE9wZXJhdG9ycworCSAgICAvLyBFQ01BLTI2MiAxMi45
IEJpdHdpc2UgU2hpZnQgT3BlcmF0b3JzCisJICAgIC8vIEVDTUEtMjYyIDEyLjEwIFJlbGF0aW9u
YWwgT3BlcmF0b3JzCisJICAgIC8vIEVDTUEtMjYyIDEyLjExIEVxdWFsaXR5IE9wZXJhdG9ycwor
CSAgICAvLyBFQ01BLTI2MiAxMi4xMiBCaW5hcnkgQml0d2lzZSBPcGVyYXRvcnMKKwkgICAgLy8g
RUNNQS0yNjIgMTIuMTMgQmluYXJ5IExvZ2ljYWwgT3BlcmF0b3JzCisJICAgIFBhcnNlci5wcm90
b3R5cGUuYmluYXJ5UHJlY2VkZW5jZSA9IGZ1bmN0aW9uICh0b2tlbikgeworCSAgICAgICAgdmFy
IG9wID0gdG9rZW4udmFsdWU7CisJICAgICAgICB2YXIgcHJlY2VkZW5jZTsKKwkgICAgICAgIGlm
ICh0b2tlbi50eXBlID09PSB0b2tlbl8xLlRva2VuLlB1bmN0dWF0b3IpIHsKKwkgICAgICAgICAg
ICBwcmVjZWRlbmNlID0gdGhpcy5vcGVyYXRvclByZWNlZGVuY2Vbb3BdIHx8IDA7CisJICAgICAg
ICB9CisJICAgICAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSB0b2tlbl8xLlRva2VuLktleXdv
cmQpIHsKKwkgICAgICAgICAgICBwcmVjZWRlbmNlID0gKG9wID09PSAnaW5zdGFuY2VvZicgfHwg
KHRoaXMuY29udGV4dC5hbGxvd0luICYmIG9wID09PSAnaW4nKSkgPyA3IDogMDsKKwkgICAgICAg
IH0KKwkgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgIHByZWNlZGVuY2UgPSAwOworCSAgICAg
ICAgfQorCSAgICAgICAgcmV0dXJuIHByZWNlZGVuY2U7CisJICAgIH07CisJICAgIFBhcnNlci5w
cm90b3R5cGUucGFyc2VCaW5hcnlFeHByZXNzaW9uID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAg
dmFyIHN0YXJ0VG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKKwkgICAgICAgIHZhciBleHByID0gdGhp
cy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VFeHBvbmVudGlhdGlvbkV4cHJlc3Npb24p
OworCSAgICAgICAgdmFyIHRva2VuID0gdGhpcy5sb29rYWhlYWQ7CisJICAgICAgICB2YXIgcHJl
YyA9IHRoaXMuYmluYXJ5UHJlY2VkZW5jZSh0b2tlbik7CisJICAgICAgICBpZiAocHJlYyA+IDAp
IHsKKwkgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgICAgIHRva2VuLnBy
ZWMgPSBwcmVjOworCSAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQg
PSBmYWxzZTsKKwkgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCA9IGZh
bHNlOworCSAgICAgICAgICAgIHZhciBtYXJrZXJzID0gW3N0YXJ0VG9rZW4sIHRoaXMubG9va2Fo
ZWFkXTsKKwkgICAgICAgICAgICB2YXIgbGVmdCA9IGV4cHI7CisJICAgICAgICAgICAgdmFyIHJp
Z2h0ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VFeHBvbmVudGlhdGlvbkV4
cHJlc3Npb24pOworCSAgICAgICAgICAgIHZhciBzdGFjayA9IFtsZWZ0LCB0b2tlbiwgcmlnaHRd
OworCSAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisJICAgICAgICAgICAgICAgIHByZWMgPSB0
aGlzLmJpbmFyeVByZWNlZGVuY2UodGhpcy5sb29rYWhlYWQpOworCSAgICAgICAgICAgICAgICBp
ZiAocHJlYyA8PSAwKSB7CisJICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAg
ICAgICAgfQorCSAgICAgICAgICAgICAgICAvLyBSZWR1Y2U6IG1ha2UgYSBiaW5hcnkgZXhwcmVz
c2lvbiBmcm9tIHRoZSB0aHJlZSB0b3Btb3N0IGVudHJpZXMuCisJICAgICAgICAgICAgICAgIHdo
aWxlICgoc3RhY2subGVuZ3RoID4gMikgJiYgKHByZWMgPD0gc3RhY2tbc3RhY2subGVuZ3RoIC0g
Ml0ucHJlYykpIHsKKwkgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gc3RhY2sucG9wKCk7CisJ
ICAgICAgICAgICAgICAgICAgICB2YXIgb3BlcmF0b3IgPSBzdGFjay5wb3AoKS52YWx1ZTsKKwkg
ICAgICAgICAgICAgICAgICAgIGxlZnQgPSBzdGFjay5wb3AoKTsKKwkgICAgICAgICAgICAgICAg
ICAgIG1hcmtlcnMucG9wKCk7CisJICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMu
c3RhcnROb2RlKG1hcmtlcnNbbWFya2Vycy5sZW5ndGggLSAxXSk7CisJICAgICAgICAgICAgICAg
ICAgICBzdGFjay5wdXNoKHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQmluYXJ5RXhwcmVz
c2lvbihvcGVyYXRvciwgbGVmdCwgcmlnaHQpKSk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAg
ICAgICAgICAgICAgLy8gU2hpZnQuCisJICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5uZXh0
VG9rZW4oKTsKKwkgICAgICAgICAgICAgICAgdG9rZW4ucHJlYyA9IHByZWM7CisJICAgICAgICAg
ICAgICAgIHN0YWNrLnB1c2godG9rZW4pOworCSAgICAgICAgICAgICAgICBtYXJrZXJzLnB1c2go
dGhpcy5sb29rYWhlYWQpOworCSAgICAgICAgICAgICAgICBzdGFjay5wdXNoKHRoaXMuaXNvbGF0
ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlRXhwb25lbnRpYXRpb25FeHByZXNzaW9uKSk7CisJICAg
ICAgICAgICAgfQorCSAgICAgICAgICAgIC8vIEZpbmFsIHJlZHVjZSB0byBjbGVhbi11cCB0aGUg
c3RhY2suCisJICAgICAgICAgICAgdmFyIGkgPSBzdGFjay5sZW5ndGggLSAxOworCSAgICAgICAg
ICAgIGV4cHIgPSBzdGFja1tpXTsKKwkgICAgICAgICAgICBtYXJrZXJzLnBvcCgpOworCSAgICAg
ICAgICAgIHdoaWxlIChpID4gMSkgeworCSAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMu
c3RhcnROb2RlKG1hcmtlcnMucG9wKCkpOworCSAgICAgICAgICAgICAgICBleHByID0gdGhpcy5m
aW5hbGl6ZShub2RlLCBuZXcgTm9kZS5CaW5hcnlFeHByZXNzaW9uKHN0YWNrW2kgLSAxXS52YWx1
ZSwgc3RhY2tbaSAtIDJdLCBleHByKSk7CisJICAgICAgICAgICAgICAgIGkgLT0gMjsKKwkgICAg
ICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gZXhwcjsKKwkgICAgfTsKKwkg
ICAgLy8gRUNNQS0yNjIgMTIuMTQgQ29uZGl0aW9uYWwgT3BlcmF0b3IKKwkgICAgUGFyc2VyLnBy
b3RvdHlwZS5wYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKKwkgICAg
ICAgIHZhciBzdGFydFRva2VuID0gdGhpcy5sb29rYWhlYWQ7CisJICAgICAgICB2YXIgZXhwciA9
IHRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlQmluYXJ5RXhwcmVzc2lvbik7CisJ
ICAgICAgICBpZiAodGhpcy5tYXRjaCgnPycpKSB7CisJICAgICAgICAgICAgdGhpcy5uZXh0VG9r
ZW4oKTsKKwkgICAgICAgICAgICB2YXIgcHJldmlvdXNBbGxvd0luID0gdGhpcy5jb250ZXh0LmFs
bG93SW47CisJICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93SW4gPSB0cnVlOworCSAgICAg
ICAgICAgIHZhciBjb25zZXF1ZW50ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFy
c2VBc3NpZ25tZW50RXhwcmVzc2lvbik7CisJICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93
SW4gPSBwcmV2aW91c0FsbG93SW47CisJICAgICAgICAgICAgdGhpcy5leHBlY3QoJzonKTsKKwkg
ICAgICAgICAgICB2YXIgYWx0ZXJuYXRlID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMu
cGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7CisJICAgICAgICAgICAgZXhwciA9IHRoaXMuZmlu
YWxpemUodGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBOb2RlLkNvbmRpdGlvbmFsRXhw
cmVzc2lvbihleHByLCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpKTsKKwkgICAgICAgICAgICB0aGlz
LmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0gZmFsc2U7CisJICAgICAgICAgICAgdGhpcy5j
b250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSBmYWxzZTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJl
dHVybiBleHByOworCSAgICB9OworCSAgICAvLyBFQ01BLTI2MiAxMi4xNSBBc3NpZ25tZW50IE9w
ZXJhdG9ycworCSAgICBQYXJzZXIucHJvdG90eXBlLmNoZWNrUGF0dGVyblBhcmFtID0gZnVuY3Rp
b24gKG9wdGlvbnMsIHBhcmFtKSB7CisJICAgICAgICBzd2l0Y2ggKHBhcmFtLnR5cGUpIHsKKwkg
ICAgICAgICAgICBjYXNlIHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVyOgorCSAgICAgICAgICAg
ICAgICB0aGlzLnZhbGlkYXRlUGFyYW0ob3B0aW9ucywgcGFyYW0sIHBhcmFtLm5hbWUpOworCSAg
ICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICBjYXNlIHN5bnRheF8xLlN5bnRheC5S
ZXN0RWxlbWVudDoKKwkgICAgICAgICAgICAgICAgdGhpcy5jaGVja1BhdHRlcm5QYXJhbShvcHRp
b25zLCBwYXJhbS5hcmd1bWVudCk7CisJICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAg
ICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4LkFzc2lnbm1lbnRQYXR0ZXJuOgorCSAgICAgICAgICAg
ICAgICB0aGlzLmNoZWNrUGF0dGVyblBhcmFtKG9wdGlvbnMsIHBhcmFtLmxlZnQpOworCSAgICAg
ICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICBjYXNlIHN5bnRheF8xLlN5bnRheC5BcnJh
eVBhdHRlcm46CisJICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW0uZWxl
bWVudHMubGVuZ3RoOyBpKyspIHsKKwkgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbS5lbGVt
ZW50c1tpXSAhPT0gbnVsbCkgeworCSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tQ
YXR0ZXJuUGFyYW0ob3B0aW9ucywgcGFyYW0uZWxlbWVudHNbaV0pOworCSAgICAgICAgICAgICAg
ICAgICAgfQorCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGJyZWFrOworCSAg
ICAgICAgICAgIGNhc2Ugc3ludGF4XzEuU3ludGF4Lk9iamVjdFBhdHRlcm46CisJICAgICAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW0ucHJvcGVydGllcy5sZW5ndGg7IGkrKykg
eworCSAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja1BhdHRlcm5QYXJhbShvcHRpb25zLCBw
YXJhbS5wcm9wZXJ0aWVzW2ldLnZhbHVlKTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAg
ICAgICAgICBicmVhazsKKwkgICAgICAgICAgICBkZWZhdWx0OgorCSAgICAgICAgICAgICAgICBi
cmVhazsKKwkgICAgICAgIH0KKwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5yZWludGVy
cHJldEFzQ292ZXJGb3JtYWxzTGlzdCA9IGZ1bmN0aW9uIChleHByKSB7CisJICAgICAgICB2YXIg
cGFyYW1zID0gW2V4cHJdOworCSAgICAgICAgdmFyIG9wdGlvbnM7CisJICAgICAgICB2YXIgYXN5
bmNBcnJvdyA9IGZhbHNlOworCSAgICAgICAgc3dpdGNoIChleHByLnR5cGUpIHsKKwkgICAgICAg
ICAgICBjYXNlIHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVyOgorCSAgICAgICAgICAgICAgICBi
cmVhazsKKwkgICAgICAgICAgICBjYXNlIEFycm93UGFyYW1ldGVyUGxhY2VIb2xkZXI6CisJICAg
ICAgICAgICAgICAgIHBhcmFtcyA9IGV4cHIucGFyYW1zOworCSAgICAgICAgICAgICAgICBhc3lu
Y0Fycm93ID0gZXhwci5hc3luYzsKKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAg
ICAgZGVmYXVsdDoKKwkgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisJICAgICAgICB9CisJ
ICAgICAgICBvcHRpb25zID0geworCSAgICAgICAgICAgIHBhcmFtU2V0OiB7fQorCSAgICAgICAg
fTsKKwkgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgKytpKSB7CisJ
ICAgICAgICAgICAgdmFyIHBhcmFtID0gcGFyYW1zW2ldOworCSAgICAgICAgICAgIGlmIChwYXJh
bS50eXBlID09PSBzeW50YXhfMS5TeW50YXguQXNzaWdubWVudFBhdHRlcm4pIHsKKwkgICAgICAg
ICAgICAgICAgaWYgKHBhcmFtLnJpZ2h0LnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5ZaWVsZEV4
cHJlc3Npb24pIHsKKwkgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbS5yaWdodC5hcmd1bWVu
dCkgeworCSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4o
dGhpcy5sb29rYWhlYWQpOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAg
ICAgICAgcGFyYW0ucmlnaHQudHlwZSA9IHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVyOworCSAg
ICAgICAgICAgICAgICAgICAgcGFyYW0ucmlnaHQubmFtZSA9ICd5aWVsZCc7CisJICAgICAgICAg
ICAgICAgICAgICBkZWxldGUgcGFyYW0ucmlnaHQuYXJndW1lbnQ7CisJICAgICAgICAgICAgICAg
ICAgICBkZWxldGUgcGFyYW0ucmlnaHQuZGVsZWdhdGU7CisJICAgICAgICAgICAgICAgIH0KKwkg
ICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSBpZiAoYXN5bmNBcnJvdyAmJiBwYXJhbS50
eXBlID09PSBzeW50YXhfMS5TeW50YXguSWRlbnRpZmllciAmJiBwYXJhbS5uYW1lID09PSAnYXdh
aXQnKSB7CisJICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5s
b29rYWhlYWQpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB0aGlzLmNoZWNrUGF0dGVy
blBhcmFtKG9wdGlvbnMsIHBhcmFtKTsKKwkgICAgICAgICAgICBwYXJhbXNbaV0gPSBwYXJhbTsK
KwkgICAgICAgIH0KKwkgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0IHx8ICF0aGlzLmNv
bnRleHQuYWxsb3dZaWVsZCkgeworCSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFy
YW1zLmxlbmd0aDsgKytpKSB7CisJICAgICAgICAgICAgICAgIHZhciBwYXJhbSA9IHBhcmFtc1tp
XTsKKwkgICAgICAgICAgICAgICAgaWYgKHBhcmFtLnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5Z
aWVsZEV4cHJlc3Npb24pIHsKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVj
dGVkVG9rZW4odGhpcy5sb29rYWhlYWQpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAg
ICAgfQorCSAgICAgICAgfQorCSAgICAgICAgaWYgKG9wdGlvbnMubWVzc2FnZSA9PT0gbWVzc2Fn
ZXNfMS5NZXNzYWdlcy5TdHJpY3RQYXJhbUR1cGUpIHsKKwkgICAgICAgICAgICB2YXIgdG9rZW4g
PSB0aGlzLmNvbnRleHQuc3RyaWN0ID8gb3B0aW9ucy5zdHJpY3RlZCA6IG9wdGlvbnMuZmlyc3RS
ZXN0cmljdGVkOworCSAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odG9rZW4s
IG9wdGlvbnMubWVzc2FnZSk7CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4geworCSAgICAg
ICAgICAgIHBhcmFtczogcGFyYW1zLAorCSAgICAgICAgICAgIHN0cmljdGVkOiBvcHRpb25zLnN0
cmljdGVkLAorCSAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZDogb3B0aW9ucy5maXJzdFJlc3Ry
aWN0ZWQsCisJICAgICAgICAgICAgbWVzc2FnZTogb3B0aW9ucy5tZXNzYWdlCisJICAgICAgICB9
OworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQXNzaWdubWVudEV4cHJlc3Np
b24gPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgZXhwcjsKKwkgICAgICAgIGlmICghdGhp
cy5jb250ZXh0LmFsbG93WWllbGQgJiYgdGhpcy5tYXRjaEtleXdvcmQoJ3lpZWxkJykpIHsKKwkg
ICAgICAgICAgICBleHByID0gdGhpcy5wYXJzZVlpZWxkRXhwcmVzc2lvbigpOworCSAgICAgICAg
fQorCSAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgdmFyIHN0YXJ0VG9rZW4gPSB0aGlzLmxv
b2thaGVhZDsKKwkgICAgICAgICAgICB2YXIgdG9rZW4gPSBzdGFydFRva2VuOworCSAgICAgICAg
ICAgIGV4cHIgPSB0aGlzLnBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uKCk7CisJICAgICAgICAg
ICAgaWYgKHRva2VuLnR5cGUgPT09IHRva2VuXzEuVG9rZW4uSWRlbnRpZmllciAmJiAodG9rZW4u
bGluZU51bWJlciA9PT0gdGhpcy5sb29rYWhlYWQubGluZU51bWJlcikgJiYgdG9rZW4udmFsdWUg
PT09ICdhc3luYycgJiYgKHRoaXMubG9va2FoZWFkLnR5cGUgPT09IHRva2VuXzEuVG9rZW4uSWRl
bnRpZmllcikpIHsKKwkgICAgICAgICAgICAgICAgdmFyIGFyZyA9IHRoaXMucGFyc2VQcmltYXJ5
RXhwcmVzc2lvbigpOworCSAgICAgICAgICAgICAgICBleHByID0geworCSAgICAgICAgICAgICAg
ICAgICAgdHlwZTogQXJyb3dQYXJhbWV0ZXJQbGFjZUhvbGRlciwKKwkgICAgICAgICAgICAgICAg
ICAgIHBhcmFtczogW2FyZ10sCisJICAgICAgICAgICAgICAgICAgICBhc3luYzogdHJ1ZQorCSAg
ICAgICAgICAgICAgICB9OworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBpZiAoZXhwci50
eXBlID09PSBBcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVyIHx8IHRoaXMubWF0Y2goJz0+JykpIHsK
KwkgICAgICAgICAgICAgICAgLy8gRUNNQS0yNjIgMTQuMiBBcnJvdyBGdW5jdGlvbiBEZWZpbml0
aW9ucworCSAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0g
ZmFsc2U7CisJICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50ID0g
ZmFsc2U7CisJICAgICAgICAgICAgICAgIHZhciBpc0FzeW5jID0gZXhwci5hc3luYzsKKwkgICAg
ICAgICAgICAgICAgdmFyIGxpc3QgPSB0aGlzLnJlaW50ZXJwcmV0QXNDb3ZlckZvcm1hbHNMaXN0
KGV4cHIpOworCSAgICAgICAgICAgICAgICBpZiAobGlzdCkgeworCSAgICAgICAgICAgICAgICAg
ICAgaWYgKHRoaXMuaGFzTGluZVRlcm1pbmF0b3IpIHsKKwkgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKTsKKwkgICAgICAg
ICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maXJzdENv
dmVySW5pdGlhbGl6ZWROYW1lRXJyb3IgPSBudWxsOworCSAgICAgICAgICAgICAgICAgICAgdmFy
IHByZXZpb3VzU3RyaWN0ID0gdGhpcy5jb250ZXh0LnN0cmljdDsKKwkgICAgICAgICAgICAgICAg
ICAgIHZhciBwcmV2aW91c0FsbG93WWllbGQgPSB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZDsKKwkg
ICAgICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c0F3YWl0ID0gdGhpcy5jb250ZXh0LmF3YWl0
OworCSAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSB0cnVlOwor
CSAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmF3YWl0ID0gaXNBc3luYzsKKwkgICAg
ICAgICAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoc3RhcnRUb2tlbik7CisJ
ICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnPT4nKTsKKwkgICAgICAgICAgICAgICAg
ICAgIHZhciBib2R5ID0gdGhpcy5tYXRjaCgneycpID8gdGhpcy5wYXJzZUZ1bmN0aW9uU291cmNl
RWxlbWVudHMoKSA6CisJICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc29sYXRlQ292ZXJH
cmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7CisJICAgICAgICAgICAgICAg
ICAgICB2YXIgZXhwcmVzc2lvbiA9IGJvZHkudHlwZSAhPT0gc3ludGF4XzEuU3ludGF4LkJsb2Nr
U3RhdGVtZW50OworCSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3Qg
JiYgbGlzdC5maXJzdFJlc3RyaWN0ZWQpIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LnRocm93VW5leHBlY3RlZFRva2VuKGxpc3QuZmlyc3RSZXN0cmljdGVkLCBsaXN0Lm1lc3NhZ2Up
OworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMu
Y29udGV4dC5zdHJpY3QgJiYgbGlzdC5zdHJpY3RlZCkgeworCSAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4obGlzdC5zdHJpY3RlZCwgbGlzdC5tZXNz
YWdlKTsKKwkgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgIGV4cHIg
PSBpc0FzeW5jID8gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Bc3luY0Fycm93RnVuY3Rp
b25FeHByZXNzaW9uKGxpc3QucGFyYW1zLCBib2R5LCBleHByZXNzaW9uKSkgOgorCSAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQXJyb3dGdW5jdGlv
bkV4cHJlc3Npb24obGlzdC5wYXJhbXMsIGJvZHksIGV4cHJlc3Npb24pKTsKKwkgICAgICAgICAg
ICAgICAgICAgIHRoaXMuY29udGV4dC5zdHJpY3QgPSBwcmV2aW91c1N0cmljdDsKKwkgICAgICAg
ICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxkID0gcHJldmlvdXNBbGxvd1lpZWxk
OworCSAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmF3YWl0ID0gcHJldmlvdXNBd2Fp
dDsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNl
IHsKKwkgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hBc3NpZ24oKSkgeworCSAgICAgICAg
ICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0KSB7CisJICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2Fn
ZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7CisJICAgICAgICAgICAgICAgICAgICB9CisJICAg
ICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAmJiBleHByLnR5cGUgPT09
IHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVyKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIGlkID0gKGV4cHIpOworCSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNjYW5u
ZXIuaXNSZXN0cmljdGVkV29yZChpZC5uYW1lKSkgeworCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuLCBtZXNzYWdlc18xLk1lc3Nh
Z2VzLlN0cmljdExIU0Fzc2lnbm1lbnQpOworCSAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zY2FubmVyLmlzU3RyaWN0TW9kZVJlc2Vy
dmVkV29yZChpZC5uYW1lKSkgeworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRv
bGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuLCBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdFJl
c2VydmVkV29yZCk7CisJICAgICAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAg
ICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCc9JykpIHsKKwkg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0ID0g
ZmFsc2U7CisJICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmlzQmluZGluZ0Vs
ZW1lbnQgPSBmYWxzZTsKKwkgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAg
ICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVpbnRlcnByZXRFeHBy
ZXNzaW9uQXNQYXR0ZXJuKGV4cHIpOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAg
ICAgICAgICAgICAgdG9rZW4gPSB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgICAgICAgICAg
ICAgdmFyIHJpZ2h0ID0gdGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25t
ZW50RXhwcmVzc2lvbik7CisJICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5maW5hbGl6
ZSh0aGlzLnN0YXJ0Tm9kZShzdGFydFRva2VuKSwgbmV3IE5vZGUuQXNzaWdubWVudEV4cHJlc3Np
b24odG9rZW4udmFsdWUsIGV4cHIsIHJpZ2h0KSk7CisJICAgICAgICAgICAgICAgICAgICB0aGlz
LmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yID0gbnVsbDsKKwkgICAgICAg
ICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiBl
eHByOworCSAgICB9OworCSAgICAvLyBFQ01BLTI2MiAxMi4xNiBDb21tYSBPcGVyYXRvcgorCSAg
ICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uICgpIHsKKwkgICAg
ICAgIHZhciBzdGFydFRva2VuID0gdGhpcy5sb29rYWhlYWQ7CisJICAgICAgICB2YXIgZXhwciA9
IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24p
OworCSAgICAgICAgaWYgKHRoaXMubWF0Y2goJywnKSkgeworCSAgICAgICAgICAgIHZhciBleHBy
ZXNzaW9ucyA9IFtdOworCSAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2goZXhwcik7CisJICAg
ICAgICAgICAgd2hpbGUgKHRoaXMuc3RhcnRNYXJrZXIuaW5kZXggPCB0aGlzLnNjYW5uZXIubGVu
Z3RoKSB7CisJICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnLCcpKSB7CisJICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAg
ICB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgICAgICAgICBleHByZXNzaW9ucy5wdXNoKHRo
aXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pKTsK
KwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgZXhwciA9IHRoaXMuZmluYWxpemUodGhpcy5z
dGFydE5vZGUoc3RhcnRUb2tlbiksIG5ldyBOb2RlLlNlcXVlbmNlRXhwcmVzc2lvbihleHByZXNz
aW9ucykpOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIGV4cHI7CisJICAgIH07CisJICAg
IC8vIEVDTUEtMjYyIDEzLjIgQmxvY2sKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVN0YXRl
bWVudExpc3RJdGVtID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIHN0YXRlbWVudDsKKwkg
ICAgICAgIHRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQgPSB0cnVlOworCSAgICAgICAg
dGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQgPSB0cnVlOworCSAgICAgICAgaWYgKHRoaXMu
bG9va2FoZWFkLnR5cGUgPT09IHRva2VuXzEuVG9rZW4uS2V5d29yZCkgeworCSAgICAgICAgICAg
IHN3aXRjaCAodGhpcy5sb29rYWhlYWQudmFsdWUpIHsKKwkgICAgICAgICAgICAgICAgY2FzZSAn
ZXhwb3J0JzoKKwkgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb250ZXh0LmlzTW9kdWxl
KSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tl
bih0aGlzLmxvb2thaGVhZCwgbWVzc2FnZXNfMS5NZXNzYWdlcy5JbGxlZ2FsRXhwb3J0RGVjbGFy
YXRpb24pOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgc3Rh
dGVtZW50ID0gdGhpcy5wYXJzZUV4cG9ydERlY2xhcmF0aW9uKCk7CisJICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgY2FzZSAnaW1wb3J0JzoKKwkgICAgICAgICAg
ICAgICAgICAgIGlmICghdGhpcy5jb250ZXh0LmlzTW9kdWxlKSB7CisJICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCwgbWVz
c2FnZXNfMS5NZXNzYWdlcy5JbGxlZ2FsSW1wb3J0RGVjbGFyYXRpb24pOworCSAgICAgICAgICAg
ICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZUlt
cG9ydERlY2xhcmF0aW9uKCk7CisJICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAg
ICAgICAgICAgY2FzZSAnY29uc3QnOgorCSAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50ID0g
dGhpcy5wYXJzZUxleGljYWxEZWNsYXJhdGlvbih7IGluRm9yOiBmYWxzZSB9KTsKKwkgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICBjYXNlICdmdW5jdGlvbic6CisJ
ICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlRnVuY3Rpb25EZWNsYXJh
dGlvbigpOworCSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAgIGNh
c2UgJ2NsYXNzJzoKKwkgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VD
bGFzc0RlY2xhcmF0aW9uKCk7CisJICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAg
ICAgICAgICAgY2FzZSAnbGV0JzoKKwkgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRo
aXMuaXNMZXhpY2FsRGVjbGFyYXRpb24oKSA/IHRoaXMucGFyc2VMZXhpY2FsRGVjbGFyYXRpb24o
eyBpbkZvcjogZmFsc2UgfSkgOiB0aGlzLnBhcnNlU3RhdGVtZW50KCk7CisJICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgZGVmYXVsdDoKKwkgICAgICAgICAgICAg
ICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VTdGF0ZW1lbnQoKTsKKwkgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2Ug
eworCSAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VTdGF0ZW1lbnQoKTsKKwkgICAg
ICAgIH0KKwkgICAgICAgIHJldHVybiBzdGF0ZW1lbnQ7CisJICAgIH07CisJICAgIFBhcnNlci5w
cm90b3R5cGUucGFyc2VCbG9jayA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBub2RlID0g
dGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICB0aGlzLmV4cGVjdCgneycpOworCSAgICAgICAg
dmFyIGJsb2NrID0gW107CisJICAgICAgICB3aGlsZSAodHJ1ZSkgeworCSAgICAgICAgICAgIGlm
ICh0aGlzLm1hdGNoKCd9JykpIHsKKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAg
ICAgfQorCSAgICAgICAgICAgIGJsb2NrLnB1c2godGhpcy5wYXJzZVN0YXRlbWVudExpc3RJdGVt
KCkpOworCSAgICAgICAgfQorCSAgICAgICAgdGhpcy5leHBlY3QoJ30nKTsKKwkgICAgICAgIHJl
dHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkJsb2NrU3RhdGVtZW50KGJsb2NrKSk7
CisJICAgIH07CisJICAgIC8vIEVDTUEtMjYyIDEzLjMuMSBMZXQgYW5kIENvbnN0IERlY2xhcmF0
aW9ucworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlTGV4aWNhbEJpbmRpbmcgPSBmdW5jdGlv
biAoa2luZCwgb3B0aW9ucykgeworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUo
KTsKKwkgICAgICAgIHZhciBwYXJhbXMgPSBbXTsKKwkgICAgICAgIHZhciBpZCA9IHRoaXMucGFy
c2VQYXR0ZXJuKHBhcmFtcywga2luZCk7CisJICAgICAgICAvLyBFQ01BLTI2MiAxMi4yLjEKKwkg
ICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIGlkLnR5cGUgPT09IHN5bnRheF8xLlN5
bnRheC5JZGVudGlmaWVyKSB7CisJICAgICAgICAgICAgaWYgKHRoaXMuc2Nhbm5lci5pc1Jlc3Ry
aWN0ZWRXb3JkKChpZCkubmFtZSkpIHsKKwkgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVy
cm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0VmFyTmFtZSk7CisJICAgICAgICAgICAgfQor
CSAgICAgICAgfQorCSAgICAgICAgdmFyIGluaXQgPSBudWxsOworCSAgICAgICAgaWYgKGtpbmQg
PT09ICdjb25zdCcpIHsKKwkgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2hLZXl3b3JkKCdpbicp
ICYmICF0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ29mJykpIHsKKwkgICAgICAgICAgICAg
ICAgaWYgKHRoaXMubWF0Y2goJz0nKSkgeworCSAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0
VG9rZW4oKTsKKwkgICAgICAgICAgICAgICAgICAgIGluaXQgPSB0aGlzLmlzb2xhdGVDb3Zlckdy
YW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTsKKwkgICAgICAgICAgICAgICAg
fQorCSAgICAgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMudGhy
b3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkRlY2xhcmF0aW9uTWlzc2luZ0luaXRpYWxpemVy
LCAnY29uc3QnKTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAg
IH0KKwkgICAgICAgIGVsc2UgaWYgKCghb3B0aW9ucy5pbkZvciAmJiBpZC50eXBlICE9PSBzeW50
YXhfMS5TeW50YXguSWRlbnRpZmllcikgfHwgdGhpcy5tYXRjaCgnPScpKSB7CisJICAgICAgICAg
ICAgdGhpcy5leHBlY3QoJz0nKTsKKwkgICAgICAgICAgICBpbml0ID0gdGhpcy5pc29sYXRlQ292
ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7CisJICAgICAgICB9CisJ
ICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5WYXJpYWJsZURlY2xh
cmF0b3IoaWQsIGluaXQpKTsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUJp
bmRpbmdMaXN0ID0gZnVuY3Rpb24gKGtpbmQsIG9wdGlvbnMpIHsKKwkgICAgICAgIHZhciBsaXN0
ID0gW3RoaXMucGFyc2VMZXhpY2FsQmluZGluZyhraW5kLCBvcHRpb25zKV07CisJICAgICAgICB3
aGlsZSAodGhpcy5tYXRjaCgnLCcpKSB7CisJICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsK
KwkgICAgICAgICAgICBsaXN0LnB1c2godGhpcy5wYXJzZUxleGljYWxCaW5kaW5nKGtpbmQsIG9w
dGlvbnMpKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiBsaXN0OworCSAgICB9OworCSAg
ICBQYXJzZXIucHJvdG90eXBlLmlzTGV4aWNhbERlY2xhcmF0aW9uID0gZnVuY3Rpb24gKCkgewor
CSAgICAgICAgdmFyIHByZXZpb3VzSW5kZXggPSB0aGlzLnNjYW5uZXIuaW5kZXg7CisJICAgICAg
ICB2YXIgcHJldmlvdXNMaW5lTnVtYmVyID0gdGhpcy5zY2FubmVyLmxpbmVOdW1iZXI7CisJICAg
ICAgICB2YXIgcHJldmlvdXNMaW5lU3RhcnQgPSB0aGlzLnNjYW5uZXIubGluZVN0YXJ0OworCSAg
ICAgICAgdGhpcy5jb2xsZWN0Q29tbWVudHMoKTsKKwkgICAgICAgIHZhciBuZXh0ID0gdGhpcy5z
Y2FubmVyLmxleCgpOworCSAgICAgICAgdGhpcy5zY2FubmVyLmluZGV4ID0gcHJldmlvdXNJbmRl
eDsKKwkgICAgICAgIHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyID0gcHJldmlvdXNMaW5lTnVtYmVy
OworCSAgICAgICAgdGhpcy5zY2FubmVyLmxpbmVTdGFydCA9IHByZXZpb3VzTGluZVN0YXJ0Owor
CSAgICAgICAgcmV0dXJuIChuZXh0LnR5cGUgPT09IHRva2VuXzEuVG9rZW4uSWRlbnRpZmllcikg
fHwKKwkgICAgICAgICAgICAobmV4dC50eXBlID09PSB0b2tlbl8xLlRva2VuLlB1bmN0dWF0b3Ig
JiYgbmV4dC52YWx1ZSA9PT0gJ1snKSB8fAorCSAgICAgICAgICAgIChuZXh0LnR5cGUgPT09IHRv
a2VuXzEuVG9rZW4uUHVuY3R1YXRvciAmJiBuZXh0LnZhbHVlID09PSAneycpIHx8CisJICAgICAg
ICAgICAgKG5leHQudHlwZSA9PT0gdG9rZW5fMS5Ub2tlbi5LZXl3b3JkICYmIG5leHQudmFsdWUg
PT09ICdsZXQnKSB8fAorCSAgICAgICAgICAgIChuZXh0LnR5cGUgPT09IHRva2VuXzEuVG9rZW4u
S2V5d29yZCAmJiBuZXh0LnZhbHVlID09PSAneWllbGQnKTsKKwkgICAgfTsKKwkgICAgUGFyc2Vy
LnByb3RvdHlwZS5wYXJzZUxleGljYWxEZWNsYXJhdGlvbiA9IGZ1bmN0aW9uIChvcHRpb25zKSB7
CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdmFyIGtp
bmQgPSB0aGlzLm5leHRUb2tlbigpLnZhbHVlOworCSAgICAgICAgYXNzZXJ0XzEuYXNzZXJ0KGtp
bmQgPT09ICdsZXQnIHx8IGtpbmQgPT09ICdjb25zdCcsICdMZXhpY2FsIGRlY2xhcmF0aW9uIG11
c3QgYmUgZWl0aGVyIGxldCBvciBjb25zdCcpOworCSAgICAgICAgdmFyIGRlY2xhcmF0aW9ucyA9
IHRoaXMucGFyc2VCaW5kaW5nTGlzdChraW5kLCBvcHRpb25zKTsKKwkgICAgICAgIHRoaXMuY29u
c3VtZVNlbWljb2xvbigpOworCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3
IE5vZGUuVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIGtpbmQpKTsKKwkgICAgfTsK
KwkgICAgLy8gRUNNQS0yNjIgMTMuMy4zIERlc3RydWN0dXJpbmcgQmluZGluZyBQYXR0ZXJucwor
CSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQmluZGluZ1Jlc3RFbGVtZW50ID0gZnVuY3Rpb24g
KHBhcmFtcywga2luZCkgeworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsK
KwkgICAgICAgIHRoaXMuZXhwZWN0KCcuLi4nKTsKKwkgICAgICAgIHBhcmFtcy5wdXNoKHRoaXMu
bG9va2FoZWFkKTsKKwkgICAgICAgIHZhciBhcmcgPSB0aGlzLnBhcnNlVmFyaWFibGVJZGVudGlm
aWVyKGtpbmQpOworCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUu
UmVzdEVsZW1lbnQoYXJnKSk7CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VB
cnJheVBhdHRlcm4gPSBmdW5jdGlvbiAocGFyYW1zLCBraW5kKSB7CisJICAgICAgICB2YXIgbm9k
ZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdGhpcy5leHBlY3QoJ1snKTsKKwkgICAg
ICAgIHZhciBlbGVtZW50cyA9IFtdOworCSAgICAgICAgd2hpbGUgKCF0aGlzLm1hdGNoKCddJykp
IHsKKwkgICAgICAgICAgICBpZiAodGhpcy5tYXRjaCgnLCcpKSB7CisJICAgICAgICAgICAgICAg
IHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gobnVsbCk7
CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICBp
ZiAodGhpcy5tYXRjaCgnLi4uJykpIHsKKwkgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1
c2godGhpcy5wYXJzZUJpbmRpbmdSZXN0RWxlbWVudChwYXJhbXMsIGtpbmQpKTsKKwkgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAg
IGVsc2UgeworCSAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaCh0aGlzLnBhcnNlUGF0
dGVybldpdGhEZWZhdWx0KHBhcmFtcywga2luZCkpOworCSAgICAgICAgICAgICAgICB9CisJICAg
ICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnXScpKSB7CisJICAgICAgICAgICAgICAgICAg
ICB0aGlzLmV4cGVjdCgnLCcpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQor
CSAgICAgICAgfQorCSAgICAgICAgdGhpcy5leHBlY3QoJ10nKTsKKwkgICAgICAgIHJldHVybiB0
aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkFycmF5UGF0dGVybihlbGVtZW50cykpOworCSAg
ICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlUHJvcGVydHlQYXR0ZXJuID0gZnVuY3Rp
b24gKHBhcmFtcywga2luZCkgeworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUo
KTsKKwkgICAgICAgIHZhciBjb21wdXRlZCA9IGZhbHNlOworCSAgICAgICAgdmFyIHNob3J0aGFu
ZCA9IGZhbHNlOworCSAgICAgICAgdmFyIG1ldGhvZCA9IGZhbHNlOworCSAgICAgICAgdmFyIGtl
eTsKKwkgICAgICAgIHZhciB2YWx1ZTsKKwkgICAgICAgIGlmICh0aGlzLmxvb2thaGVhZC50eXBl
ID09PSB0b2tlbl8xLlRva2VuLklkZW50aWZpZXIpIHsKKwkgICAgICAgICAgICB2YXIga2V5VG9r
ZW4gPSB0aGlzLmxvb2thaGVhZDsKKwkgICAgICAgICAgICBrZXkgPSB0aGlzLnBhcnNlVmFyaWFi
bGVJZGVudGlmaWVyKCk7CisJICAgICAgICAgICAgdmFyIGluaXQgPSB0aGlzLmZpbmFsaXplKG5v
ZGUsIG5ldyBOb2RlLklkZW50aWZpZXIoa2V5VG9rZW4udmFsdWUpKTsKKwkgICAgICAgICAgICBp
ZiAodGhpcy5tYXRjaCgnPScpKSB7CisJICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGtleVRv
a2VuKTsKKwkgICAgICAgICAgICAgICAgc2hvcnRoYW5kID0gdHJ1ZTsKKwkgICAgICAgICAgICAg
ICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgICAgICAgICAgdmFyIGV4cHIgPSB0aGlzLnBh
cnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKKwkgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlz
LmZpbmFsaXplKHRoaXMuc3RhcnROb2RlKGtleVRva2VuKSwgbmV3IE5vZGUuQXNzaWdubWVudFBh
dHRlcm4oaW5pdCwgZXhwcikpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIGlm
ICghdGhpcy5tYXRjaCgnOicpKSB7CisJICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGtleVRv
a2VuKTsKKwkgICAgICAgICAgICAgICAgc2hvcnRoYW5kID0gdHJ1ZTsKKwkgICAgICAgICAgICAg
ICAgdmFsdWUgPSBpbml0OworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIHsKKwkg
ICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJzonKTsKKwkgICAgICAgICAgICAgICAgdmFsdWUg
PSB0aGlzLnBhcnNlUGF0dGVybldpdGhEZWZhdWx0KHBhcmFtcywga2luZCk7CisJICAgICAgICAg
ICAgfQorCSAgICAgICAgfQorCSAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgY29tcHV0ZWQg
PSB0aGlzLm1hdGNoKCdbJyk7CisJICAgICAgICAgICAga2V5ID0gdGhpcy5wYXJzZU9iamVjdFBy
b3BlcnR5S2V5KCk7CisJICAgICAgICAgICAgdGhpcy5leHBlY3QoJzonKTsKKwkgICAgICAgICAg
ICB2YWx1ZSA9IHRoaXMucGFyc2VQYXR0ZXJuV2l0aERlZmF1bHQocGFyYW1zLCBraW5kKTsKKwkg
ICAgICAgIH0KKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlBy
b3BlcnR5KCdpbml0Jywga2V5LCBjb21wdXRlZCwgdmFsdWUsIG1ldGhvZCwgc2hvcnRoYW5kKSk7
CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VPYmplY3RQYXR0ZXJuID0gZnVu
Y3Rpb24gKHBhcmFtcywga2luZCkgeworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5v
ZGUoKTsKKwkgICAgICAgIHZhciBwcm9wZXJ0aWVzID0gW107CisJICAgICAgICB0aGlzLmV4cGVj
dCgneycpOworCSAgICAgICAgd2hpbGUgKCF0aGlzLm1hdGNoKCd9JykpIHsKKwkgICAgICAgICAg
ICBwcm9wZXJ0aWVzLnB1c2godGhpcy5wYXJzZVByb3BlcnR5UGF0dGVybihwYXJhbXMsIGtpbmQp
KTsKKwkgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2goJ30nKSkgeworCSAgICAgICAgICAgICAg
ICB0aGlzLmV4cGVjdCgnLCcpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAg
IHRoaXMuZXhwZWN0KCd9Jyk7CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBu
ZXcgTm9kZS5PYmplY3RQYXR0ZXJuKHByb3BlcnRpZXMpKTsKKwkgICAgfTsKKwkgICAgUGFyc2Vy
LnByb3RvdHlwZS5wYXJzZVBhdHRlcm4gPSBmdW5jdGlvbiAocGFyYW1zLCBraW5kKSB7CisJICAg
ICAgICB2YXIgcGF0dGVybjsKKwkgICAgICAgIGlmICh0aGlzLm1hdGNoKCdbJykpIHsKKwkgICAg
ICAgICAgICBwYXR0ZXJuID0gdGhpcy5wYXJzZUFycmF5UGF0dGVybihwYXJhbXMsIGtpbmQpOwor
CSAgICAgICAgfQorCSAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaCgneycpKSB7CisJICAgICAg
ICAgICAgcGF0dGVybiA9IHRoaXMucGFyc2VPYmplY3RQYXR0ZXJuKHBhcmFtcywga2luZCk7CisJ
ICAgICAgICB9CisJICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICBpZiAodGhpcy5tYXRjaEtl
eXdvcmQoJ2xldCcpICYmIChraW5kID09PSAnY29uc3QnIHx8IGtpbmQgPT09ICdsZXQnKSkgewor
CSAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubG9va2Fo
ZWFkLCBtZXNzYWdlc18xLk1lc3NhZ2VzLkxldEluTGV4aWNhbEJpbmRpbmcpOworCSAgICAgICAg
ICAgIH0KKwkgICAgICAgICAgICBwYXJhbXMucHVzaCh0aGlzLmxvb2thaGVhZCk7CisJICAgICAg
ICAgICAgcGF0dGVybiA9IHRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoa2luZCk7CisJICAg
ICAgICB9CisJICAgICAgICByZXR1cm4gcGF0dGVybjsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnBy
b3RvdHlwZS5wYXJzZVBhdHRlcm5XaXRoRGVmYXVsdCA9IGZ1bmN0aW9uIChwYXJhbXMsIGtpbmQp
IHsKKwkgICAgICAgIHZhciBzdGFydFRva2VuID0gdGhpcy5sb29rYWhlYWQ7CisJICAgICAgICB2
YXIgcGF0dGVybiA9IHRoaXMucGFyc2VQYXR0ZXJuKHBhcmFtcywga2luZCk7CisJICAgICAgICBp
ZiAodGhpcy5tYXRjaCgnPScpKSB7CisJICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkg
ICAgICAgICAgICB2YXIgcHJldmlvdXNBbGxvd1lpZWxkID0gdGhpcy5jb250ZXh0LmFsbG93WWll
bGQ7CisJICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSB0cnVlOworCSAgICAg
ICAgICAgIHZhciByaWdodCA9IHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNz
aWdubWVudEV4cHJlc3Npb24pOworCSAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd1lpZWxk
ID0gcHJldmlvdXNBbGxvd1lpZWxkOworCSAgICAgICAgICAgIHBhdHRlcm4gPSB0aGlzLmZpbmFs
aXplKHRoaXMuc3RhcnROb2RlKHN0YXJ0VG9rZW4pLCBuZXcgTm9kZS5Bc3NpZ25tZW50UGF0dGVy
bihwYXR0ZXJuLCByaWdodCkpOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHBhdHRlcm47
CisJICAgIH07CisJICAgIC8vIEVDTUEtMjYyIDEzLjMuMiBWYXJpYWJsZSBTdGF0ZW1lbnQKKwkg
ICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVZhcmlhYmxlSWRlbnRpZmllciA9IGZ1bmN0aW9uIChr
aW5kKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAg
dmFyIHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgIGlmICh0b2tlbi50eXBlID09
PSB0b2tlbl8xLlRva2VuLktleXdvcmQgJiYgdG9rZW4udmFsdWUgPT09ICd5aWVsZCcpIHsKKwkg
ICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCkgeworCSAgICAgICAgICAgICAgICB0
aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRva2VuLCBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0
cmljdFJlc2VydmVkV29yZCk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGlmICghdGhp
cy5jb250ZXh0LmFsbG93WWllbGQpIHsKKwkgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhw
ZWN0ZWRUb2tlbih0b2tlbik7CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAg
ZWxzZSBpZiAodG9rZW4udHlwZSAhPT0gdG9rZW5fMS5Ub2tlbi5JZGVudGlmaWVyKSB7CisJICAg
ICAgICAgICAgaWYgKHRoaXMuY29udGV4dC5zdHJpY3QgJiYgdG9rZW4udHlwZSA9PT0gdG9rZW5f
MS5Ub2tlbi5LZXl3b3JkICYmIHRoaXMuc2Nhbm5lci5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQo
dG9rZW4udmFsdWUpKSB7CisJICAgICAgICAgICAgICAgIHRoaXMudG9sZXJhdGVVbmV4cGVjdGVk
VG9rZW4odG9rZW4sIG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkKTsKKwkg
ICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgIGlmICh0
aGlzLmNvbnRleHQuc3RyaWN0IHx8IHRva2VuLnZhbHVlICE9PSAnbGV0JyB8fCBraW5kICE9PSAn
dmFyJykgeworCSAgICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0
b2tlbik7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJ
ICAgICAgICBlbHNlIGlmICgodGhpcy5jb250ZXh0LmlzTW9kdWxlIHx8IHRoaXMuY29udGV4dC5h
d2FpdCkgJiYgdG9rZW4udHlwZSA9PT0gdG9rZW5fMS5Ub2tlbi5JZGVudGlmaWVyICYmIHRva2Vu
LnZhbHVlID09PSAnYXdhaXQnKSB7CisJICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0
ZWRUb2tlbih0b2tlbik7CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6
ZShub2RlLCBuZXcgTm9kZS5JZGVudGlmaWVyKHRva2VuLnZhbHVlKSk7CisJICAgIH07CisJICAg
IFBhcnNlci5wcm90b3R5cGUucGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uID0gZnVuY3Rpb24gKG9w
dGlvbnMpIHsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAg
ICB2YXIgcGFyYW1zID0gW107CisJICAgICAgICB2YXIgaWQgPSB0aGlzLnBhcnNlUGF0dGVybihw
YXJhbXMsICd2YXInKTsKKwkgICAgICAgIC8vIEVDTUEtMjYyIDEyLjIuMQorCSAgICAgICAgaWYg
KHRoaXMuY29udGV4dC5zdHJpY3QgJiYgaWQudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LklkZW50
aWZpZXIpIHsKKwkgICAgICAgICAgICBpZiAodGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQo
KGlkKS5uYW1lKSkgeworCSAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3IobWVzc2Fn
ZXNfMS5NZXNzYWdlcy5TdHJpY3RWYXJOYW1lKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9
CisJICAgICAgICB2YXIgaW5pdCA9IG51bGw7CisJICAgICAgICBpZiAodGhpcy5tYXRjaCgnPScp
KSB7CisJICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgICAgICBpbml0ID0g
dGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7
CisJICAgICAgICB9CisJICAgICAgICBlbHNlIGlmIChpZC50eXBlICE9PSBzeW50YXhfMS5TeW50
YXguSWRlbnRpZmllciAmJiAhb3B0aW9ucy5pbkZvcikgeworCSAgICAgICAgICAgIHRoaXMuZXhw
ZWN0KCc9Jyk7CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2Rl
LCBuZXcgTm9kZS5WYXJpYWJsZURlY2xhcmF0b3IoaWQsIGluaXQpKTsKKwkgICAgfTsKKwkgICAg
UGFyc2VyLnByb3RvdHlwZS5wYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0ID0gZnVuY3Rpb24g
KG9wdGlvbnMpIHsKKwkgICAgICAgIHZhciBvcHQgPSB7IGluRm9yOiBvcHRpb25zLmluRm9yIH07
CisJICAgICAgICB2YXIgbGlzdCA9IFtdOworCSAgICAgICAgbGlzdC5wdXNoKHRoaXMucGFyc2VW
YXJpYWJsZURlY2xhcmF0aW9uKG9wdCkpOworCSAgICAgICAgd2hpbGUgKHRoaXMubWF0Y2goJywn
KSkgeworCSAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICAgICAgbGlzdC5w
dXNoKHRoaXMucGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKG9wdCkpOworCSAgICAgICAgfQorCSAg
ICAgICAgcmV0dXJuIGxpc3Q7CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VW
YXJpYWJsZVN0YXRlbWVudCA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBub2RlID0gdGhp
cy5jcmVhdGVOb2RlKCk7CisJICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ3ZhcicpOworCSAg
ICAgICAgdmFyIGRlY2xhcmF0aW9ucyA9IHRoaXMucGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlz
dCh7IGluRm9yOiBmYWxzZSB9KTsKKwkgICAgICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpOwor
CSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuVmFyaWFibGVEZWNs
YXJhdGlvbihkZWNsYXJhdGlvbnMsICd2YXInKSk7CisJICAgIH07CisJICAgIC8vIEVDTUEtMjYy
IDEzLjQgRW1wdHkgU3RhdGVtZW50CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VFbXB0eVN0
YXRlbWVudCA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVO
b2RlKCk7CisJICAgICAgICB0aGlzLmV4cGVjdCgnOycpOworCSAgICAgICAgcmV0dXJuIHRoaXMu
ZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRW1wdHlTdGF0ZW1lbnQoKSk7CisJICAgIH07CisJICAg
IC8vIEVDTUEtMjYyIDEzLjUgRXhwcmVzc2lvbiBTdGF0ZW1lbnQKKwkgICAgUGFyc2VyLnByb3Rv
dHlwZS5wYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2
YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdmFyIGV4cHIgPSB0aGlzLnBh
cnNlRXhwcmVzc2lvbigpOworCSAgICAgICAgdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7CisJICAg
ICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5FeHByZXNzaW9uU3RhdGVt
ZW50KGV4cHIpKTsKKwkgICAgfTsKKwkgICAgLy8gRUNNQS0yNjIgMTMuNiBJZiBzdGF0ZW1lbnQK
KwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUlmU3RhdGVtZW50ID0gZnVuY3Rpb24gKCkgewor
CSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHZhciBjb25z
ZXF1ZW50OworCSAgICAgICAgdmFyIGFsdGVybmF0ZSA9IG51bGw7CisJICAgICAgICB0aGlzLmV4
cGVjdEtleXdvcmQoJ2lmJyk7CisJICAgICAgICB0aGlzLmV4cGVjdCgnKCcpOworCSAgICAgICAg
dmFyIHRlc3QgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOworCSAgICAgICAgaWYgKCF0aGlzLm1h
dGNoKCcpJykgJiYgdGhpcy5jb25maWcudG9sZXJhbnQpIHsKKwkgICAgICAgICAgICB0aGlzLnRv
bGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRva2VuKCkpOworCSAgICAgICAgICAgIGNv
bnNlcXVlbnQgPSB0aGlzLmZpbmFsaXplKHRoaXMuY3JlYXRlTm9kZSgpLCBuZXcgTm9kZS5FbXB0
eVN0YXRlbWVudCgpKTsKKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgeworCSAgICAgICAgICAg
IHRoaXMuZXhwZWN0KCcpJyk7CisJICAgICAgICAgICAgY29uc2VxdWVudCA9IHRoaXMucGFyc2VT
dGF0ZW1lbnQoKTsKKwkgICAgICAgICAgICBpZiAodGhpcy5tYXRjaEtleXdvcmQoJ2Vsc2UnKSkg
eworCSAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgICAgICAgICBh
bHRlcm5hdGUgPSB0aGlzLnBhcnNlU3RhdGVtZW50KCk7CisJICAgICAgICAgICAgfQorCSAgICAg
ICAgfQorCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuSWZTdGF0
ZW1lbnQodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKSk7CisJICAgIH07CisJICAgIC8vIEVD
TUEtMjYyIDEzLjcuMiBUaGUgZG8td2hpbGUgU3RhdGVtZW50CisJICAgIFBhcnNlci5wcm90b3R5
cGUucGFyc2VEb1doaWxlU3RhdGVtZW50ID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIG5v
ZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnZG8n
KTsKKwkgICAgICAgIHZhciBwcmV2aW91c0luSXRlcmF0aW9uID0gdGhpcy5jb250ZXh0LmluSXRl
cmF0aW9uOworCSAgICAgICAgdGhpcy5jb250ZXh0LmluSXRlcmF0aW9uID0gdHJ1ZTsKKwkgICAg
ICAgIHZhciBib2R5ID0gdGhpcy5wYXJzZVN0YXRlbWVudCgpOworCSAgICAgICAgdGhpcy5jb250
ZXh0LmluSXRlcmF0aW9uID0gcHJldmlvdXNJbkl0ZXJhdGlvbjsKKwkgICAgICAgIHRoaXMuZXhw
ZWN0S2V5d29yZCgnd2hpbGUnKTsKKwkgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7CisJICAgICAg
ICB2YXIgdGVzdCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7CisJICAgICAgICB0aGlzLmV4cGVj
dCgnKScpOworCSAgICAgICAgaWYgKHRoaXMubWF0Y2goJzsnKSkgeworCSAgICAgICAgICAgIHRo
aXMubmV4dFRva2VuKCk7CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6
ZShub2RlLCBuZXcgTm9kZS5Eb1doaWxlU3RhdGVtZW50KGJvZHksIHRlc3QpKTsKKwkgICAgfTsK
KwkgICAgLy8gRUNNQS0yNjIgMTMuNy4zIFRoZSB3aGlsZSBTdGF0ZW1lbnQKKwkgICAgUGFyc2Vy
LnByb3RvdHlwZS5wYXJzZVdoaWxlU3RhdGVtZW50ID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAg
dmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHZhciBib2R5OworCSAgICAg
ICAgdGhpcy5leHBlY3RLZXl3b3JkKCd3aGlsZScpOworCSAgICAgICAgdGhpcy5leHBlY3QoJygn
KTsKKwkgICAgICAgIHZhciB0ZXN0ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTsKKwkgICAgICAg
IGlmICghdGhpcy5tYXRjaCgnKScpICYmIHRoaXMuY29uZmlnLnRvbGVyYW50KSB7CisJICAgICAg
ICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0aGlzLm5leHRUb2tlbigpKTsKKwkg
ICAgICAgICAgICBib2R5ID0gdGhpcy5maW5hbGl6ZSh0aGlzLmNyZWF0ZU5vZGUoKSwgbmV3IE5v
ZGUuRW1wdHlTdGF0ZW1lbnQoKSk7CisJICAgICAgICB9CisJICAgICAgICBlbHNlIHsKKwkgICAg
ICAgICAgICB0aGlzLmV4cGVjdCgnKScpOworCSAgICAgICAgICAgIHZhciBwcmV2aW91c0luSXRl
cmF0aW9uID0gdGhpcy5jb250ZXh0LmluSXRlcmF0aW9uOworCSAgICAgICAgICAgIHRoaXMuY29u
dGV4dC5pbkl0ZXJhdGlvbiA9IHRydWU7CisJICAgICAgICAgICAgYm9keSA9IHRoaXMucGFyc2VT
dGF0ZW1lbnQoKTsKKwkgICAgICAgICAgICB0aGlzLmNvbnRleHQuaW5JdGVyYXRpb24gPSBwcmV2
aW91c0luSXRlcmF0aW9uOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxp
emUobm9kZSwgbmV3IE5vZGUuV2hpbGVTdGF0ZW1lbnQodGVzdCwgYm9keSkpOworCSAgICB9Owor
CSAgICAvLyBFQ01BLTI2MiAxMy43LjQgVGhlIGZvciBTdGF0ZW1lbnQKKwkgICAgLy8gRUNNQS0y
NjIgMTMuNy41IFRoZSBmb3ItaW4gYW5kIGZvci1vZiBTdGF0ZW1lbnRzCisJICAgIFBhcnNlci5w
cm90b3R5cGUucGFyc2VGb3JTdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIg
aW5pdCA9IG51bGw7CisJICAgICAgICB2YXIgdGVzdCA9IG51bGw7CisJICAgICAgICB2YXIgdXBk
YXRlID0gbnVsbDsKKwkgICAgICAgIHZhciBmb3JJbiA9IHRydWU7CisJICAgICAgICB2YXIgbGVm
dCwgcmlnaHQ7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAg
ICAgdGhpcy5leHBlY3RLZXl3b3JkKCdmb3InKTsKKwkgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7
CisJICAgICAgICBpZiAodGhpcy5tYXRjaCgnOycpKSB7CisJICAgICAgICAgICAgdGhpcy5uZXh0
VG9rZW4oKTsKKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgIGlmICh0
aGlzLm1hdGNoS2V5d29yZCgndmFyJykpIHsKKwkgICAgICAgICAgICAgICAgaW5pdCA9IHRoaXMu
Y3JlYXRlTm9kZSgpOworCSAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAg
ICAgICAgICAgICB2YXIgcHJldmlvdXNBbGxvd0luID0gdGhpcy5jb250ZXh0LmFsbG93SW47CisJ
ICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5hbGxvd0luID0gZmFsc2U7CisJICAgICAgICAg
ICAgICAgIHZhciBkZWNsYXJhdGlvbnMgPSB0aGlzLnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxp
c3QoeyBpbkZvcjogdHJ1ZSB9KTsKKwkgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93
SW4gPSBwcmV2aW91c0FsbG93SW47CisJICAgICAgICAgICAgICAgIGlmIChkZWNsYXJhdGlvbnMu
bGVuZ3RoID09PSAxICYmIHRoaXMubWF0Y2hLZXl3b3JkKCdpbicpKSB7CisJICAgICAgICAgICAg
ICAgICAgICB2YXIgZGVjbCA9IGRlY2xhcmF0aW9uc1swXTsKKwkgICAgICAgICAgICAgICAgICAg
IGlmIChkZWNsLmluaXQgJiYgKGRlY2wuaWQudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LkFycmF5
UGF0dGVybiB8fCBkZWNsLmlkLnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5PYmplY3RQYXR0ZXJu
IHx8IHRoaXMuY29udGV4dC5zdHJpY3QpKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuRm9ySW5PZkxvb3BJbml0aWFsaXpl
ciwgJ2Zvci1pbicpOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAg
ICAgaW5pdCA9IHRoaXMuZmluYWxpemUoaW5pdCwgbmV3IE5vZGUuVmFyaWFibGVEZWNsYXJhdGlv
bihkZWNsYXJhdGlvbnMsICd2YXInKSk7CisJICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRU
b2tlbigpOworCSAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGluaXQ7CisJICAgICAgICAgICAg
ICAgICAgICByaWdodCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7CisJICAgICAgICAgICAgICAg
ICAgICBpbml0ID0gbnVsbDsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBl
bHNlIGlmIChkZWNsYXJhdGlvbnMubGVuZ3RoID09PSAxICYmIGRlY2xhcmF0aW9uc1swXS5pbml0
ID09PSBudWxsICYmIHRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnb2YnKSkgeworCSAgICAg
ICAgICAgICAgICAgICAgaW5pdCA9IHRoaXMuZmluYWxpemUoaW5pdCwgbmV3IE5vZGUuVmFyaWFi
bGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsICd2YXInKSk7CisJICAgICAgICAgICAgICAgICAg
ICB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGluaXQ7CisJ
ICAgICAgICAgICAgICAgICAgICByaWdodCA9IHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lv
bigpOworCSAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG51bGw7CisJICAgICAgICAgICAgICAg
ICAgICBmb3JJbiA9IGZhbHNlOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAg
IGVsc2UgeworCSAgICAgICAgICAgICAgICAgICAgaW5pdCA9IHRoaXMuZmluYWxpemUoaW5pdCwg
bmV3IE5vZGUuVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsICd2YXInKSk7CisJICAg
ICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnOycpOworCSAgICAgICAgICAgICAgICB9CisJ
ICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2hLZXl3b3JkKCdj
b25zdCcpIHx8IHRoaXMubWF0Y2hLZXl3b3JkKCdsZXQnKSkgeworCSAgICAgICAgICAgICAgICBp
bml0ID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICAgICAgICAgIHZhciBraW5kID0gdGhp
cy5uZXh0VG9rZW4oKS52YWx1ZTsKKwkgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQu
c3RyaWN0ICYmIHRoaXMubG9va2FoZWFkLnZhbHVlID09PSAnaW4nKSB7CisJICAgICAgICAgICAg
ICAgICAgICBpbml0ID0gdGhpcy5maW5hbGl6ZShpbml0LCBuZXcgTm9kZS5JZGVudGlmaWVyKGtp
bmQpKTsKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICAg
ICAgICAgICAgICBsZWZ0ID0gaW5pdDsKKwkgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gdGhp
cy5wYXJzZUV4cHJlc3Npb24oKTsKKwkgICAgICAgICAgICAgICAgICAgIGluaXQgPSBudWxsOwor
CSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAg
ICAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dJbiA9IHRoaXMuY29udGV4dC5hbGxvd0luOworCSAg
ICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93SW4gPSBmYWxzZTsKKwkgICAgICAg
ICAgICAgICAgICAgIHZhciBkZWNsYXJhdGlvbnMgPSB0aGlzLnBhcnNlQmluZGluZ0xpc3Qoa2lu
ZCwgeyBpbkZvcjogdHJ1ZSB9KTsKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5h
bGxvd0luID0gcHJldmlvdXNBbGxvd0luOworCSAgICAgICAgICAgICAgICAgICAgaWYgKGRlY2xh
cmF0aW9ucy5sZW5ndGggPT09IDEgJiYgZGVjbGFyYXRpb25zWzBdLmluaXQgPT09IG51bGwgJiYg
dGhpcy5tYXRjaEtleXdvcmQoJ2luJykpIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICBpbml0
ID0gdGhpcy5maW5hbGl6ZShpbml0LCBuZXcgTm9kZS5WYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xh
cmF0aW9ucywga2luZCkpOworCSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2Vu
KCk7CisJICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGluaXQ7CisJICAgICAgICAgICAg
ICAgICAgICAgICAgcmlnaHQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOworCSAgICAgICAgICAg
ICAgICAgICAgICAgIGluaXQgPSBudWxsOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoZGVjbGFyYXRpb25zLmxlbmd0aCA9PT0gMSAmJiBkZWNs
YXJhdGlvbnNbMF0uaW5pdCA9PT0gbnVsbCAmJiB0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQo
J29mJykpIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICBpbml0ID0gdGhpcy5maW5hbGl6ZShp
bml0LCBuZXcgTm9kZS5WYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywga2luZCkpOwor
CSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICAgICAg
ICAgICAgICAgICAgbGVmdCA9IGluaXQ7CisJICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQg
PSB0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKKwkgICAgICAgICAgICAgICAgICAg
ICAgICBpbml0ID0gbnVsbDsKKwkgICAgICAgICAgICAgICAgICAgICAgICBmb3JJbiA9IGZhbHNl
OworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisJ
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7CisJICAgICAg
ICAgICAgICAgICAgICAgICAgaW5pdCA9IHRoaXMuZmluYWxpemUoaW5pdCwgbmV3IE5vZGUuVmFy
aWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIGtpbmQpKTsKKwkgICAgICAgICAgICAgICAg
ICAgIH0KKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBl
bHNlIHsKKwkgICAgICAgICAgICAgICAgdmFyIGluaXRTdGFydFRva2VuID0gdGhpcy5sb29rYWhl
YWQ7CisJICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c0FsbG93SW4gPSB0aGlzLmNvbnRleHQu
YWxsb3dJbjsKKwkgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93SW4gPSBmYWxzZTsK
KwkgICAgICAgICAgICAgICAgaW5pdCA9IHRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBh
cnNlQXNzaWdubWVudEV4cHJlc3Npb24pOworCSAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQu
YWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJbjsKKwkgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0
Y2hLZXl3b3JkKCdpbicpKSB7CisJICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29udGV4
dC5pc0Fzc2lnbm1lbnRUYXJnZXQgfHwgaW5pdC50eXBlID09PSBzeW50YXhfMS5TeW50YXguQXNz
aWdubWVudEV4cHJlc3Npb24pIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVy
YXRlRXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5JbnZhbGlkTEhTSW5Gb3JJbik7CisJICAgICAg
ICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOwor
CSAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4o
aW5pdCk7CisJICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gaW5pdDsKKwkgICAgICAgICAgICAg
ICAgICAgIHJpZ2h0ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTsKKwkgICAgICAgICAgICAgICAg
ICAgIGluaXQgPSBudWxsOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGVs
c2UgaWYgKHRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgnb2YnKSkgeworCSAgICAgICAgICAg
ICAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0IHx8IGluaXQudHlw
ZSA9PT0gc3ludGF4XzEuU3ludGF4LkFzc2lnbm1lbnRFeHByZXNzaW9uKSB7CisJICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSW52
YWxpZExIU0luRm9yTG9vcCk7CisJICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAg
ICAgICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWlu
dGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oaW5pdCk7CisJICAgICAgICAgICAgICAgICAgICBs
ZWZ0ID0gaW5pdDsKKwkgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gdGhpcy5wYXJzZUFzc2ln
bm1lbnRFeHByZXNzaW9uKCk7CisJICAgICAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDsKKwkg
ICAgICAgICAgICAgICAgICAgIGZvckluID0gZmFsc2U7CisJICAgICAgICAgICAgICAgIH0KKwkg
ICAgICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRj
aCgnLCcpKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluaXRTZXEgPSBbaW5pdF07
CisJICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMubWF0Y2goJywnKSkgeworCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbml0U2VxLnB1c2godGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRo
aXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbikpOworCSAgICAgICAgICAgICAgICAgICAgICAg
IH0KKwkgICAgICAgICAgICAgICAgICAgICAgICBpbml0ID0gdGhpcy5maW5hbGl6ZSh0aGlzLnN0
YXJ0Tm9kZShpbml0U3RhcnRUb2tlbiksIG5ldyBOb2RlLlNlcXVlbmNlRXhwcmVzc2lvbihpbml0
U2VxKSk7CisJICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICB0aGlz
LmV4cGVjdCgnOycpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQorCSAgICAg
ICAgfQorCSAgICAgICAgaWYgKHR5cGVvZiBsZWZ0ID09PSAndW5kZWZpbmVkJykgeworCSAgICAg
ICAgICAgIGlmICghdGhpcy5tYXRjaCgnOycpKSB7CisJICAgICAgICAgICAgICAgIHRlc3QgPSB0
aGlzLnBhcnNlRXhwcmVzc2lvbigpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB0aGlz
LmV4cGVjdCgnOycpOworCSAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaCgnKScpKSB7CisJICAg
ICAgICAgICAgICAgIHVwZGF0ZSA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7CisJICAgICAgICAg
ICAgfQorCSAgICAgICAgfQorCSAgICAgICAgdmFyIGJvZHk7CisJICAgICAgICBpZiAoIXRoaXMu
bWF0Y2goJyknKSAmJiB0aGlzLmNvbmZpZy50b2xlcmFudCkgeworCSAgICAgICAgICAgIHRoaXMu
dG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odGhpcy5uZXh0VG9rZW4oKSk7CisJICAgICAgICAgICAg
Ym9keSA9IHRoaXMuZmluYWxpemUodGhpcy5jcmVhdGVOb2RlKCksIG5ldyBOb2RlLkVtcHR5U3Rh
dGVtZW50KCkpOworCSAgICAgICAgfQorCSAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgdGhp
cy5leHBlY3QoJyknKTsKKwkgICAgICAgICAgICB2YXIgcHJldmlvdXNJbkl0ZXJhdGlvbiA9IHRo
aXMuY29udGV4dC5pbkl0ZXJhdGlvbjsKKwkgICAgICAgICAgICB0aGlzLmNvbnRleHQuaW5JdGVy
YXRpb24gPSB0cnVlOworCSAgICAgICAgICAgIGJvZHkgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1t
YXIodGhpcy5wYXJzZVN0YXRlbWVudCk7CisJICAgICAgICAgICAgdGhpcy5jb250ZXh0LmluSXRl
cmF0aW9uID0gcHJldmlvdXNJbkl0ZXJhdGlvbjsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVy
biAodHlwZW9mIGxlZnQgPT09ICd1bmRlZmluZWQnKSA/CisJICAgICAgICAgICAgdGhpcy5maW5h
bGl6ZShub2RlLCBuZXcgTm9kZS5Gb3JTdGF0ZW1lbnQoaW5pdCwgdGVzdCwgdXBkYXRlLCBib2R5
KSkgOgorCSAgICAgICAgICAgIGZvckluID8gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5G
b3JJblN0YXRlbWVudChsZWZ0LCByaWdodCwgYm9keSkpIDoKKwkgICAgICAgICAgICAgICAgdGhp
cy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5Gb3JPZlN0YXRlbWVudChsZWZ0LCByaWdodCwgYm9k
eSkpOworCSAgICB9OworCSAgICAvLyBFQ01BLTI2MiAxMy44IFRoZSBjb250aW51ZSBzdGF0ZW1l
bnQKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUNvbnRpbnVlU3RhdGVtZW50ID0gZnVuY3Rp
b24gKCkgeworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAg
IHRoaXMuZXhwZWN0S2V5d29yZCgnY29udGludWUnKTsKKwkgICAgICAgIHZhciBsYWJlbCA9IG51
bGw7CisJICAgICAgICBpZiAodGhpcy5sb29rYWhlYWQudHlwZSA9PT0gdG9rZW5fMS5Ub2tlbi5J
ZGVudGlmaWVyICYmICF0aGlzLmhhc0xpbmVUZXJtaW5hdG9yKSB7CisJICAgICAgICAgICAgdmFy
IGlkID0gdGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworCSAgICAgICAgICAgIGxhYmVs
ID0gaWQ7CisJICAgICAgICAgICAgdmFyIGtleSA9ICckJyArIGlkLm5hbWU7CisJICAgICAgICAg
ICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5jb250ZXh0
LmxhYmVsU2V0LCBrZXkpKSB7CisJICAgICAgICAgICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNz
YWdlc18xLk1lc3NhZ2VzLlVua25vd25MYWJlbCwgaWQubmFtZSk7CisJICAgICAgICAgICAgfQor
CSAgICAgICAgfQorCSAgICAgICAgdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7CisJICAgICAgICBp
ZiAobGFiZWwgPT09IG51bGwgJiYgIXRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbikgeworCSAgICAg
ICAgICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLklsbGVnYWxDb250aW51
ZSk7CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcg
Tm9kZS5Db250aW51ZVN0YXRlbWVudChsYWJlbCkpOworCSAgICB9OworCSAgICAvLyBFQ01BLTI2
MiAxMy45IFRoZSBicmVhayBzdGF0ZW1lbnQKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUJy
ZWFrU3RhdGVtZW50ID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNy
ZWF0ZU5vZGUoKTsKKwkgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnYnJlYWsnKTsKKwkgICAg
ICAgIHZhciBsYWJlbCA9IG51bGw7CisJICAgICAgICBpZiAodGhpcy5sb29rYWhlYWQudHlwZSA9
PT0gdG9rZW5fMS5Ub2tlbi5JZGVudGlmaWVyICYmICF0aGlzLmhhc0xpbmVUZXJtaW5hdG9yKSB7
CisJICAgICAgICAgICAgdmFyIGlkID0gdGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOwor
CSAgICAgICAgICAgIHZhciBrZXkgPSAnJCcgKyBpZC5uYW1lOworCSAgICAgICAgICAgIGlmICgh
T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29udGV4dC5sYWJlbFNl
dCwga2V5KSkgeworCSAgICAgICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5N
ZXNzYWdlcy5Vbmtub3duTGFiZWwsIGlkLm5hbWUpOworCSAgICAgICAgICAgIH0KKwkgICAgICAg
ICAgICBsYWJlbCA9IGlkOworCSAgICAgICAgfQorCSAgICAgICAgdGhpcy5jb25zdW1lU2VtaWNv
bG9uKCk7CisJICAgICAgICBpZiAobGFiZWwgPT09IG51bGwgJiYgIXRoaXMuY29udGV4dC5pbkl0
ZXJhdGlvbiAmJiAhdGhpcy5jb250ZXh0LmluU3dpdGNoKSB7CisJICAgICAgICAgICAgdGhpcy50
aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSWxsZWdhbEJyZWFrKTsKKwkgICAgICAgIH0K
KwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkJyZWFrU3RhdGVt
ZW50KGxhYmVsKSk7CisJICAgIH07CisJICAgIC8vIEVDTUEtMjYyIDEzLjEwIFRoZSByZXR1cm4g
c3RhdGVtZW50CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VSZXR1cm5TdGF0ZW1lbnQgPSBm
dW5jdGlvbiAoKSB7CisJICAgICAgICBpZiAoIXRoaXMuY29udGV4dC5pbkZ1bmN0aW9uQm9keSkg
eworCSAgICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLkls
bGVnYWxSZXR1cm4pOworCSAgICAgICAgfQorCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0
ZU5vZGUoKTsKKwkgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgncmV0dXJuJyk7CisJICAgICAg
ICB2YXIgaGFzQXJndW1lbnQgPSAhdGhpcy5tYXRjaCgnOycpICYmICF0aGlzLm1hdGNoKCd9Jykg
JiYKKwkgICAgICAgICAgICAhdGhpcy5oYXNMaW5lVGVybWluYXRvciAmJiB0aGlzLmxvb2thaGVh
ZC50eXBlICE9PSB0b2tlbl8xLlRva2VuLkVPRjsKKwkgICAgICAgIHZhciBhcmd1bWVudCA9IGhh
c0FyZ3VtZW50ID8gdGhpcy5wYXJzZUV4cHJlc3Npb24oKSA6IG51bGw7CisJICAgICAgICB0aGlz
LmNvbnN1bWVTZW1pY29sb24oKTsKKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUs
IG5ldyBOb2RlLlJldHVyblN0YXRlbWVudChhcmd1bWVudCkpOworCSAgICB9OworCSAgICAvLyBF
Q01BLTI2MiAxMy4xMSBUaGUgd2l0aCBzdGF0ZW1lbnQKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5w
YXJzZVdpdGhTdGF0ZW1lbnQgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICBpZiAodGhpcy5jb250
ZXh0LnN0cmljdCkgeworCSAgICAgICAgICAgIHRoaXMudG9sZXJhdGVFcnJvcihtZXNzYWdlc18x
Lk1lc3NhZ2VzLlN0cmljdE1vZGVXaXRoKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHZhciBub2Rl
ID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ3dpdGgn
KTsKKwkgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7CisJICAgICAgICB2YXIgb2JqZWN0ID0gdGhp
cy5wYXJzZUV4cHJlc3Npb24oKTsKKwkgICAgICAgIHRoaXMuZXhwZWN0KCcpJyk7CisJICAgICAg
ICB2YXIgYm9keSA9IHRoaXMucGFyc2VTdGF0ZW1lbnQoKTsKKwkgICAgICAgIHJldHVybiB0aGlz
LmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLldpdGhTdGF0ZW1lbnQob2JqZWN0LCBib2R5KSk7CisJ
ICAgIH07CisJICAgIC8vIEVDTUEtMjYyIDEzLjEyIFRoZSBzd2l0Y2ggc3RhdGVtZW50CisJICAg
IFBhcnNlci5wcm90b3R5cGUucGFyc2VTd2l0Y2hDYXNlID0gZnVuY3Rpb24gKCkgeworCSAgICAg
ICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHZhciB0ZXN0OworCSAg
ICAgICAgaWYgKHRoaXMubWF0Y2hLZXl3b3JkKCdkZWZhdWx0JykpIHsKKwkgICAgICAgICAgICB0
aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgICAgIHRlc3QgPSBudWxsOworCSAgICAgICAgfQor
CSAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgdGhpcy5leHBlY3RLZXl3b3JkKCdjYXNlJyk7
CisJICAgICAgICAgICAgdGVzdCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7CisJICAgICAgICB9
CisJICAgICAgICB0aGlzLmV4cGVjdCgnOicpOworCSAgICAgICAgdmFyIGNvbnNlcXVlbnQgPSBb
XTsKKwkgICAgICAgIHdoaWxlICh0cnVlKSB7CisJICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2go
J30nKSB8fCB0aGlzLm1hdGNoS2V5d29yZCgnZGVmYXVsdCcpIHx8IHRoaXMubWF0Y2hLZXl3b3Jk
KCdjYXNlJykpIHsKKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgfQorCSAg
ICAgICAgICAgIGNvbnNlcXVlbnQucHVzaCh0aGlzLnBhcnNlU3RhdGVtZW50TGlzdEl0ZW0oKSk7
CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9k
ZS5Td2l0Y2hDYXNlKHRlc3QsIGNvbnNlcXVlbnQpKTsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnBy
b3RvdHlwZS5wYXJzZVN3aXRjaFN0YXRlbWVudCA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZh
ciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQo
J3N3aXRjaCcpOworCSAgICAgICAgdGhpcy5leHBlY3QoJygnKTsKKwkgICAgICAgIHZhciBkaXNj
cmltaW5hbnQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpOworCSAgICAgICAgdGhpcy5leHBlY3Qo
JyknKTsKKwkgICAgICAgIHZhciBwcmV2aW91c0luU3dpdGNoID0gdGhpcy5jb250ZXh0LmluU3dp
dGNoOworCSAgICAgICAgdGhpcy5jb250ZXh0LmluU3dpdGNoID0gdHJ1ZTsKKwkgICAgICAgIHZh
ciBjYXNlcyA9IFtdOworCSAgICAgICAgdmFyIGRlZmF1bHRGb3VuZCA9IGZhbHNlOworCSAgICAg
ICAgdGhpcy5leHBlY3QoJ3snKTsKKwkgICAgICAgIHdoaWxlICh0cnVlKSB7CisJICAgICAgICAg
ICAgaWYgKHRoaXMubWF0Y2goJ30nKSkgeworCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAg
ICAgICAgICB9CisJICAgICAgICAgICAgdmFyIGNsYXVzZSA9IHRoaXMucGFyc2VTd2l0Y2hDYXNl
KCk7CisJICAgICAgICAgICAgaWYgKGNsYXVzZS50ZXN0ID09PSBudWxsKSB7CisJICAgICAgICAg
ICAgICAgIGlmIChkZWZhdWx0Rm91bmQpIHsKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMudGhy
b3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLk11bHRpcGxlRGVmYXVsdHNJblN3aXRjaCk7CisJ
ICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgZGVmYXVsdEZvdW5kID0gdHJ1ZTsK
KwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgY2FzZXMucHVzaChjbGF1c2UpOworCSAgICAg
ICAgfQorCSAgICAgICAgdGhpcy5leHBlY3QoJ30nKTsKKwkgICAgICAgIHRoaXMuY29udGV4dC5p
blN3aXRjaCA9IHByZXZpb3VzSW5Td2l0Y2g7CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6
ZShub2RlLCBuZXcgTm9kZS5Td2l0Y2hTdGF0ZW1lbnQoZGlzY3JpbWluYW50LCBjYXNlcykpOwor
CSAgICB9OworCSAgICAvLyBFQ01BLTI2MiAxMy4xMyBMYWJlbGxlZCBTdGF0ZW1lbnRzCisJICAg
IFBhcnNlci5wcm90b3R5cGUucGFyc2VMYWJlbGxlZFN0YXRlbWVudCA9IGZ1bmN0aW9uICgpIHsK
KwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICB2YXIgZXhw
ciA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7CisJICAgICAgICB2YXIgc3RhdGVtZW50OworCSAg
ICAgICAgaWYgKChleHByLnR5cGUgPT09IHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVyKSAmJiB0
aGlzLm1hdGNoKCc6JykpIHsKKwkgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAg
ICAgICAgIHZhciBpZCA9IChleHByKTsKKwkgICAgICAgICAgICB2YXIga2V5ID0gJyQnICsgaWQu
bmFtZTsKKwkgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5j
YWxsKHRoaXMuY29udGV4dC5sYWJlbFNldCwga2V5KSkgeworCSAgICAgICAgICAgICAgICB0aGlz
LnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5SZWRlY2xhcmF0aW9uLCAnTGFiZWwnLCBp
ZC5uYW1lKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgdGhpcy5jb250ZXh0LmxhYmVs
U2V0W2tleV0gPSB0cnVlOworCSAgICAgICAgICAgIHZhciBsYWJlbGVkQm9keSA9IHRoaXMucGFy
c2VTdGF0ZW1lbnQoKTsKKwkgICAgICAgICAgICBkZWxldGUgdGhpcy5jb250ZXh0LmxhYmVsU2V0
W2tleV07CisJICAgICAgICAgICAgc3RhdGVtZW50ID0gbmV3IE5vZGUuTGFiZWxlZFN0YXRlbWVu
dChpZCwgbGFiZWxlZEJvZHkpOworCSAgICAgICAgfQorCSAgICAgICAgZWxzZSB7CisJICAgICAg
ICAgICAgdGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7CisJICAgICAgICAgICAgc3RhdGVtZW50ID0g
bmV3IE5vZGUuRXhwcmVzc2lvblN0YXRlbWVudChleHByKTsKKwkgICAgICAgIH0KKwkgICAgICAg
IHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIHN0YXRlbWVudCk7CisJICAgIH07CisJICAgIC8v
IEVDTUEtMjYyIDEzLjE0IFRoZSB0aHJvdyBzdGF0ZW1lbnQKKwkgICAgUGFyc2VyLnByb3RvdHlw
ZS5wYXJzZVRocm93U3RhdGVtZW50ID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIG5vZGUg
PSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgndGhyb3cn
KTsKKwkgICAgICAgIGlmICh0aGlzLmhhc0xpbmVUZXJtaW5hdG9yKSB7CisJICAgICAgICAgICAg
dGhpcy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuTmV3bGluZUFmdGVyVGhyb3cpOwor
CSAgICAgICAgfQorCSAgICAgICAgdmFyIGFyZ3VtZW50ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24o
KTsKKwkgICAgICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpOworCSAgICAgICAgcmV0dXJuIHRo
aXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuVGhyb3dTdGF0ZW1lbnQoYXJndW1lbnQpKTsKKwkg
ICAgfTsKKwkgICAgLy8gRUNNQS0yNjIgMTMuMTUgVGhlIHRyeSBzdGF0ZW1lbnQKKwkgICAgUGFy
c2VyLnByb3RvdHlwZS5wYXJzZUNhdGNoQ2xhdXNlID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAg
dmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHRoaXMuZXhwZWN0S2V5d29y
ZCgnY2F0Y2gnKTsKKwkgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7CisJICAgICAgICBpZiAodGhp
cy5tYXRjaCgnKScpKSB7CisJICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0
aGlzLmxvb2thaGVhZCk7CisJICAgICAgICB9CisJICAgICAgICB2YXIgcGFyYW1zID0gW107CisJ
ICAgICAgICB2YXIgcGFyYW0gPSB0aGlzLnBhcnNlUGF0dGVybihwYXJhbXMpOworCSAgICAgICAg
dmFyIHBhcmFtTWFwID0ge307CisJICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5s
ZW5ndGg7IGkrKykgeworCSAgICAgICAgICAgIHZhciBrZXkgPSAnJCcgKyBwYXJhbXNbaV0udmFs
dWU7CisJICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2Fs
bChwYXJhbU1hcCwga2V5KSkgeworCSAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlRXJyb3Io
bWVzc2FnZXNfMS5NZXNzYWdlcy5EdXBsaWNhdGVCaW5kaW5nLCBwYXJhbXNbaV0udmFsdWUpOwor
CSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBwYXJhbU1hcFtrZXldID0gdHJ1ZTsKKwkgICAg
ICAgIH0KKwkgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIHBhcmFtLnR5cGUgPT09
IHN5bnRheF8xLlN5bnRheC5JZGVudGlmaWVyKSB7CisJICAgICAgICAgICAgaWYgKHRoaXMuc2Nh
bm5lci5pc1Jlc3RyaWN0ZWRXb3JkKChwYXJhbSkubmFtZSkpIHsKKwkgICAgICAgICAgICAgICAg
dGhpcy50b2xlcmF0ZUVycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0Q2F0Y2hWYXJpYWJs
ZSk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgdGhpcy5leHBlY3QoJykn
KTsKKwkgICAgICAgIHZhciBib2R5ID0gdGhpcy5wYXJzZUJsb2NrKCk7CisJICAgICAgICByZXR1
cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5DYXRjaENsYXVzZShwYXJhbSwgYm9keSkp
OworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRmluYWxseUNsYXVzZSA9IGZ1
bmN0aW9uICgpIHsKKwkgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnZmluYWxseScpOworCSAg
ICAgICAgcmV0dXJuIHRoaXMucGFyc2VCbG9jaygpOworCSAgICB9OworCSAgICBQYXJzZXIucHJv
dG90eXBlLnBhcnNlVHJ5U3RhdGVtZW50ID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIG5v
ZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgndHJ5
Jyk7CisJICAgICAgICB2YXIgYmxvY2sgPSB0aGlzLnBhcnNlQmxvY2soKTsKKwkgICAgICAgIHZh
ciBoYW5kbGVyID0gdGhpcy5tYXRjaEtleXdvcmQoJ2NhdGNoJykgPyB0aGlzLnBhcnNlQ2F0Y2hD
bGF1c2UoKSA6IG51bGw7CisJICAgICAgICB2YXIgZmluYWxpemVyID0gdGhpcy5tYXRjaEtleXdv
cmQoJ2ZpbmFsbHknKSA/IHRoaXMucGFyc2VGaW5hbGx5Q2xhdXNlKCkgOiBudWxsOworCSAgICAg
ICAgaWYgKCFoYW5kbGVyICYmICFmaW5hbGl6ZXIpIHsKKwkgICAgICAgICAgICB0aGlzLnRocm93
RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5Ob0NhdGNoT3JGaW5hbGx5KTsKKwkgICAgICAgIH0K
KwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLlRyeVN0YXRlbWVu
dChibG9jaywgaGFuZGxlciwgZmluYWxpemVyKSk7CisJICAgIH07CisJICAgIC8vIEVDTUEtMjYy
IDEzLjE2IFRoZSBkZWJ1Z2dlciBzdGF0ZW1lbnQKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJz
ZURlYnVnZ2VyU3RhdGVtZW50ID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIG5vZGUgPSB0
aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHRoaXMuZXhwZWN0S2V5d29yZCgnZGVidWdnZXIn
KTsKKwkgICAgICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpOworCSAgICAgICAgcmV0dXJuIHRo
aXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRGVidWdnZXJTdGF0ZW1lbnQoKSk7CisJICAgIH07
CisJICAgIC8vIEVDTUEtMjYyIDEzIFN0YXRlbWVudHMKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5w
YXJzZVN0YXRlbWVudCA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBzdGF0ZW1lbnQ7CisJ
ICAgICAgICBzd2l0Y2ggKHRoaXMubG9va2FoZWFkLnR5cGUpIHsKKwkgICAgICAgICAgICBjYXNl
IHRva2VuXzEuVG9rZW4uQm9vbGVhbkxpdGVyYWw6CisJICAgICAgICAgICAgY2FzZSB0b2tlbl8x
LlRva2VuLk51bGxMaXRlcmFsOgorCSAgICAgICAgICAgIGNhc2UgdG9rZW5fMS5Ub2tlbi5OdW1l
cmljTGl0ZXJhbDoKKwkgICAgICAgICAgICBjYXNlIHRva2VuXzEuVG9rZW4uU3RyaW5nTGl0ZXJh
bDoKKwkgICAgICAgICAgICBjYXNlIHRva2VuXzEuVG9rZW4uVGVtcGxhdGU6CisJICAgICAgICAg
ICAgY2FzZSB0b2tlbl8xLlRva2VuLlJlZ3VsYXJFeHByZXNzaW9uOgorCSAgICAgICAgICAgICAg
ICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCgpOworCSAgICAgICAg
ICAgICAgICBicmVhazsKKwkgICAgICAgICAgICBjYXNlIHRva2VuXzEuVG9rZW4uUHVuY3R1YXRv
cjoKKwkgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5sb29rYWhlYWQudmFsdWU7CisJ
ICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJ3snKSB7CisJICAgICAgICAgICAgICAgICAg
ICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlQmxvY2soKTsKKwkgICAgICAgICAgICAgICAgfQorCSAg
ICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gJygnKSB7CisJICAgICAgICAgICAgICAg
ICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCgpOworCSAgICAg
ICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09PSAnOycpIHsK
KwkgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9IHRoaXMucGFyc2VFbXB0eVN0YXRlbWVu
dCgpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGVsc2UgeworCSAgICAg
ICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQo
KTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAg
ICAgICBjYXNlIHRva2VuXzEuVG9rZW4uSWRlbnRpZmllcjoKKwkgICAgICAgICAgICAgICAgc3Rh
dGVtZW50ID0gdGhpcy5tYXRjaEFzeW5jRnVuY3Rpb24oKSA/IHRoaXMucGFyc2VGdW5jdGlvbkRl
Y2xhcmF0aW9uKCkgOiB0aGlzLnBhcnNlTGFiZWxsZWRTdGF0ZW1lbnQoKTsKKwkgICAgICAgICAg
ICAgICAgYnJlYWs7CisJICAgICAgICAgICAgY2FzZSB0b2tlbl8xLlRva2VuLktleXdvcmQ6CisJ
ICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5sb29rYWhlYWQudmFsdWUpIHsKKwkgICAgICAg
ICAgICAgICAgICAgIGNhc2UgJ2JyZWFrJzoKKwkgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
ZW1lbnQgPSB0aGlzLnBhcnNlQnJlYWtTdGF0ZW1lbnQoKTsKKwkgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NvbnRpbnVlJzoKKwkgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlQ29udGludWVTdGF0ZW1l
bnQoKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAg
ICAgIGNhc2UgJ2RlYnVnZ2VyJzoKKwkgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQg
PSB0aGlzLnBhcnNlRGVidWdnZXJTdGF0ZW1lbnQoKTsKKwkgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKwkgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RvJzoKKwkgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlRG9XaGlsZVN0YXRlbWVudCgpOworCSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICAgICAgY2FzZSAn
Zm9yJzoKKwkgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlRm9y
U3RhdGVtZW50KCk7CisJICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAg
ICAgICAgICAgICBjYXNlICdmdW5jdGlvbic6CisJICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGVtZW50ID0gdGhpcy5wYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKTsKKwkgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2lmJzoKKwkgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlSWZTdGF0ZW1lbnQoKTsK
KwkgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgICAgIGNh
c2UgJ3JldHVybic6CisJICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy5w
YXJzZVJldHVyblN0YXRlbWVudCgpOworCSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
CSAgICAgICAgICAgICAgICAgICAgY2FzZSAnc3dpdGNoJzoKKwkgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlU3dpdGNoU3RhdGVtZW50KCk7CisJICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAgICAgICBjYXNlICd0aHJvdyc6
CisJICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZVRocm93U3Rh
dGVtZW50KCk7CisJICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAg
ICAgICAgICBjYXNlICd0cnknOgorCSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCA9
IHRoaXMucGFyc2VUcnlTdGF0ZW1lbnQoKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKwkgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3Zhcic6CisJICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZVZhcmlhYmxlU3RhdGVtZW50KCk7CisJICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAgICAgICBjYXNlICd3aGls
ZSc6CisJICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gdGhpcy5wYXJzZVdoaWxl
U3RhdGVtZW50KCk7CisJICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAg
ICAgICAgICAgICBjYXNlICd3aXRoJzoKKwkgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1l
bnQgPSB0aGlzLnBhcnNlV2l0aFN0YXRlbWVudCgpOworCSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKwkgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0ZW1lbnQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCgpOworCSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICB9CisJICAgICAg
ICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIGRlZmF1bHQ6CisJICAgICAgICAgICAgICAg
IHN0YXRlbWVudCA9IHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpOwor
CSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHN0YXRlbWVudDsKKwkgICAgfTsKKwkgICAgLy8g
RUNNQS0yNjIgMTQuMSBGdW5jdGlvbiBEZWZpbml0aW9uCisJICAgIFBhcnNlci5wcm90b3R5cGUu
cGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFy
IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHRoaXMuZXhwZWN0KCd7Jyk7CisJ
ICAgICAgICB2YXIgYm9keSA9IHRoaXMucGFyc2VEaXJlY3RpdmVQcm9sb2d1ZXMoKTsKKwkgICAg
ICAgIHZhciBwcmV2aW91c0xhYmVsU2V0ID0gdGhpcy5jb250ZXh0LmxhYmVsU2V0OworCSAgICAg
ICAgdmFyIHByZXZpb3VzSW5JdGVyYXRpb24gPSB0aGlzLmNvbnRleHQuaW5JdGVyYXRpb247CisJ
ICAgICAgICB2YXIgcHJldmlvdXNJblN3aXRjaCA9IHRoaXMuY29udGV4dC5pblN3aXRjaDsKKwkg
ICAgICAgIHZhciBwcmV2aW91c0luRnVuY3Rpb25Cb2R5ID0gdGhpcy5jb250ZXh0LmluRnVuY3Rp
b25Cb2R5OworCSAgICAgICAgdGhpcy5jb250ZXh0LmxhYmVsU2V0ID0ge307CisJICAgICAgICB0
aGlzLmNvbnRleHQuaW5JdGVyYXRpb24gPSBmYWxzZTsKKwkgICAgICAgIHRoaXMuY29udGV4dC5p
blN3aXRjaCA9IGZhbHNlOworCSAgICAgICAgdGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5ID0g
dHJ1ZTsKKwkgICAgICAgIHdoaWxlICh0aGlzLnN0YXJ0TWFya2VyLmluZGV4IDwgdGhpcy5zY2Fu
bmVyLmxlbmd0aCkgeworCSAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKCd9JykpIHsKKwkgICAg
ICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGJvZHkucHVz
aCh0aGlzLnBhcnNlU3RhdGVtZW50TGlzdEl0ZW0oKSk7CisJICAgICAgICB9CisJICAgICAgICB0
aGlzLmV4cGVjdCgnfScpOworCSAgICAgICAgdGhpcy5jb250ZXh0LmxhYmVsU2V0ID0gcHJldmlv
dXNMYWJlbFNldDsKKwkgICAgICAgIHRoaXMuY29udGV4dC5pbkl0ZXJhdGlvbiA9IHByZXZpb3Vz
SW5JdGVyYXRpb247CisJICAgICAgICB0aGlzLmNvbnRleHQuaW5Td2l0Y2ggPSBwcmV2aW91c0lu
U3dpdGNoOworCSAgICAgICAgdGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5ID0gcHJldmlvdXNJ
bkZ1bmN0aW9uQm9keTsKKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBO
b2RlLkJsb2NrU3RhdGVtZW50KGJvZHkpKTsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlw
ZS52YWxpZGF0ZVBhcmFtID0gZnVuY3Rpb24gKG9wdGlvbnMsIHBhcmFtLCBuYW1lKSB7CisJICAg
ICAgICB2YXIga2V5ID0gJyQnICsgbmFtZTsKKwkgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3Ry
aWN0KSB7CisJICAgICAgICAgICAgaWYgKHRoaXMuc2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKG5h
bWUpKSB7CisJICAgICAgICAgICAgICAgIG9wdGlvbnMuc3RyaWN0ZWQgPSBwYXJhbTsKKwkgICAg
ICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gbWVzc2FnZXNfMS5NZXNzYWdlcy5TdHJpY3RQ
YXJhbU5hbWU7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90
eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucy5wYXJhbVNldCwga2V5KSkgeworCSAgICAg
ICAgICAgICAgICBvcHRpb25zLnN0cmljdGVkID0gcGFyYW07CisJICAgICAgICAgICAgICAgIG9w
dGlvbnMubWVzc2FnZSA9IG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0UGFyYW1EdXBlOworCSAg
ICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgaWYgKCFvcHRpb25zLmZpcnN0
UmVzdHJpY3RlZCkgeworCSAgICAgICAgICAgIGlmICh0aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVk
V29yZChuYW1lKSkgeworCSAgICAgICAgICAgICAgICBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCA9
IHBhcmFtOworCSAgICAgICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2UgPSBtZXNzYWdlc18xLk1l
c3NhZ2VzLlN0cmljdFBhcmFtTmFtZTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxz
ZSBpZiAodGhpcy5zY2FubmVyLmlzU3RyaWN0TW9kZVJlc2VydmVkV29yZChuYW1lKSkgeworCSAg
ICAgICAgICAgICAgICBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCA9IHBhcmFtOworCSAgICAgICAg
ICAgICAgICBvcHRpb25zLm1lc3NhZ2UgPSBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdFJlc2Vy
dmVkV29yZDsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSBpZiAoT2JqZWN0LnBy
b3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMucGFyYW1TZXQsIGtleSkpIHsKKwkg
ICAgICAgICAgICAgICAgb3B0aW9ucy5zdHJpY3RlZCA9IHBhcmFtOworCSAgICAgICAgICAgICAg
ICBvcHRpb25zLm1lc3NhZ2UgPSBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdFBhcmFtRHVwZTsK
KwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUg
bmV4dCAqLworCSAgICAgICAgaWYgKHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdm
dW5jdGlvbicpIHsKKwkgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3B0aW9ucy5w
YXJhbVNldCwga2V5LCB7IHZhbHVlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCB3cml0YWJsZTog
dHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pOworCSAgICAgICAgfQorCSAgICAgICAgZWxzZSB7
CisJICAgICAgICAgICAgb3B0aW9ucy5wYXJhbVNldFtrZXldID0gdHJ1ZTsKKwkgICAgICAgIH0K
KwkgICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVJlc3RFbGVtZW50ID0gZnVuY3Rp
b24gKHBhcmFtcykgeworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkg
ICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICBpZiAodGhpcy5tYXRjaCgneycpKSB7
CisJICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuT2JqZWN0
UGF0dGVybkFzUmVzdFBhcmFtZXRlcik7CisJICAgICAgICB9CisJICAgICAgICBwYXJhbXMucHVz
aCh0aGlzLmxvb2thaGVhZCk7CisJICAgICAgICB2YXIgcGFyYW0gPSB0aGlzLnBhcnNlVmFyaWFi
bGVJZGVudGlmaWVyKCk7CisJICAgICAgICBpZiAodGhpcy5tYXRjaCgnPScpKSB7CisJICAgICAg
ICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuRGVmYXVsdFJlc3RQYXJh
bWV0ZXIpOworCSAgICAgICAgfQorCSAgICAgICAgaWYgKCF0aGlzLm1hdGNoKCcpJykpIHsKKwkg
ICAgICAgICAgICB0aGlzLnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5QYXJhbWV0ZXJB
ZnRlclJlc3RQYXJhbWV0ZXIpOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHRoaXMuZmlu
YWxpemUobm9kZSwgbmV3IE5vZGUuUmVzdEVsZW1lbnQocGFyYW0pKTsKKwkgICAgfTsKKwkgICAg
UGFyc2VyLnByb3RvdHlwZS5wYXJzZUZvcm1hbFBhcmFtZXRlciA9IGZ1bmN0aW9uIChvcHRpb25z
KSB7CisJICAgICAgICB2YXIgcGFyYW07CisJICAgICAgICB2YXIgcGFyYW1zID0gW107CisJICAg
ICAgICB2YXIgdG9rZW4gPSB0aGlzLmxvb2thaGVhZDsKKwkgICAgICAgIGlmICh0b2tlbi52YWx1
ZSA9PT0gJy4uLicpIHsKKwkgICAgICAgICAgICBwYXJhbSA9IHRoaXMucGFyc2VSZXN0RWxlbWVu
dChwYXJhbXMpOworCSAgICAgICAgICAgIHRoaXMudmFsaWRhdGVQYXJhbShvcHRpb25zLCBwYXJh
bS5hcmd1bWVudCwgcGFyYW0uYXJndW1lbnQubmFtZSk7CisJICAgICAgICAgICAgb3B0aW9ucy5w
YXJhbXMucHVzaChwYXJhbSk7CisJICAgICAgICAgICAgcmV0dXJuOworCSAgICAgICAgfQorCSAg
ICAgICAgcGFyYW0gPSB0aGlzLnBhcnNlUGF0dGVybldpdGhEZWZhdWx0KHBhcmFtcyk7CisJICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykgeworCSAgICAgICAg
ICAgIHRoaXMudmFsaWRhdGVQYXJhbShvcHRpb25zLCBwYXJhbXNbaV0sIHBhcmFtc1tpXS52YWx1
ZSk7CisJICAgICAgICB9CisJICAgICAgICBvcHRpb25zLnBhcmFtcy5wdXNoKHBhcmFtKTsKKwkg
ICAgfTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZUZvcm1hbFBhcmFtZXRlcnMgPSBmdW5j
dGlvbiAoZmlyc3RSZXN0cmljdGVkKSB7CisJICAgICAgICB2YXIgb3B0aW9uczsKKwkgICAgICAg
IG9wdGlvbnMgPSB7CisJICAgICAgICAgICAgcGFyYW1zOiBbXSwKKwkgICAgICAgICAgICBmaXJz
dFJlc3RyaWN0ZWQ6IGZpcnN0UmVzdHJpY3RlZAorCSAgICAgICAgfTsKKwkgICAgICAgIHRoaXMu
ZXhwZWN0KCcoJyk7CisJICAgICAgICBpZiAoIXRoaXMubWF0Y2goJyknKSkgeworCSAgICAgICAg
ICAgIG9wdGlvbnMucGFyYW1TZXQgPSB7fTsKKwkgICAgICAgICAgICB3aGlsZSAodGhpcy5zdGFy
dE1hcmtlci5pbmRleCA8IHRoaXMuc2Nhbm5lci5sZW5ndGgpIHsKKwkgICAgICAgICAgICAgICAg
dGhpcy5wYXJzZUZvcm1hbFBhcmFtZXRlcihvcHRpb25zKTsKKwkgICAgICAgICAgICAgICAgaWYg
KHRoaXMubWF0Y2goJyknKSkgeworCSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAg
ICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJywnKTsKKwkgICAgICAg
ICAgICAgICAgaWYgKHRoaXMubWF0Y2goJyknKSkgeworCSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAg
ICAgICB0aGlzLmV4cGVjdCgnKScpOworCSAgICAgICAgcmV0dXJuIHsKKwkgICAgICAgICAgICBw
YXJhbXM6IG9wdGlvbnMucGFyYW1zLAorCSAgICAgICAgICAgIHN0cmljdGVkOiBvcHRpb25zLnN0
cmljdGVkLAorCSAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZDogb3B0aW9ucy5maXJzdFJlc3Ry
aWN0ZWQsCisJICAgICAgICAgICAgbWVzc2FnZTogb3B0aW9ucy5tZXNzYWdlCisJICAgICAgICB9
OworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLm1hdGNoQXN5bmNGdW5jdGlvbiA9IGZ1
bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBtYXRjaCA9IHRoaXMubWF0Y2hDb250ZXh0dWFsS2V5
d29yZCgnYXN5bmMnKTsKKwkgICAgICAgIGlmIChtYXRjaCkgeworCSAgICAgICAgICAgIHZhciBw
cmV2aW91c0luZGV4ID0gdGhpcy5zY2FubmVyLmluZGV4OworCSAgICAgICAgICAgIHZhciBwcmV2
aW91c0xpbmVOdW1iZXIgPSB0aGlzLnNjYW5uZXIubGluZU51bWJlcjsKKwkgICAgICAgICAgICB2
YXIgcHJldmlvdXNMaW5lU3RhcnQgPSB0aGlzLnNjYW5uZXIubGluZVN0YXJ0OworCSAgICAgICAg
ICAgIHRoaXMuY29sbGVjdENvbW1lbnRzKCk7CisJICAgICAgICAgICAgdmFyIG5leHQgPSB0aGlz
LnNjYW5uZXIubGV4KCk7CisJICAgICAgICAgICAgdGhpcy5zY2FubmVyLmluZGV4ID0gcHJldmlv
dXNJbmRleDsKKwkgICAgICAgICAgICB0aGlzLnNjYW5uZXIubGluZU51bWJlciA9IHByZXZpb3Vz
TGluZU51bWJlcjsKKwkgICAgICAgICAgICB0aGlzLnNjYW5uZXIubGluZVN0YXJ0ID0gcHJldmlv
dXNMaW5lU3RhcnQ7CisJICAgICAgICAgICAgbWF0Y2ggPSAocHJldmlvdXNMaW5lTnVtYmVyID09
PSBuZXh0LmxpbmVOdW1iZXIpICYmICgobmV4dC50eXBlID09PSB0b2tlbl8xLlRva2VuLktleXdv
cmQpIHx8IChuZXh0LnZhbHVlID09PSAnZnVuY3Rpb24nKSk7CisJICAgICAgICB9CisJICAgICAg
ICByZXR1cm4gbWF0Y2g7CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VGdW5j
dGlvbkRlY2xhcmF0aW9uID0gZnVuY3Rpb24gKGlkZW50aWZpZXJJc09wdGlvbmFsKSB7CisJICAg
ICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdmFyIGlzQXN5bmMg
PSB0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoJ2FzeW5jJyk7CisJICAgICAgICBpZiAoaXNB
c3luYykgeworCSAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICB9CisJICAg
ICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ2Z1bmN0aW9uJyk7CisJICAgICAgICB2YXIgaXNHZW5l
cmF0b3IgPSBpc0FzeW5jID8gZmFsc2UgOiB0aGlzLm1hdGNoKCcqJyk7CisJICAgICAgICBpZiAo
aXNHZW5lcmF0b3IpIHsKKwkgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAg
fQorCSAgICAgICAgdmFyIG1lc3NhZ2U7CisJICAgICAgICB2YXIgaWQgPSBudWxsOworCSAgICAg
ICAgdmFyIGZpcnN0UmVzdHJpY3RlZCA9IG51bGw7CisJICAgICAgICBpZiAoIWlkZW50aWZpZXJJ
c09wdGlvbmFsIHx8ICF0aGlzLm1hdGNoKCcoJykpIHsKKwkgICAgICAgICAgICB2YXIgdG9rZW4g
PSB0aGlzLmxvb2thaGVhZDsKKwkgICAgICAgICAgICBpZCA9IHRoaXMucGFyc2VWYXJpYWJsZUlk
ZW50aWZpZXIoKTsKKwkgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCkgeworCSAg
ICAgICAgICAgICAgICBpZiAodGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFs
dWUpKSB7CisJICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2Vu
KHRva2VuLCBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uTmFtZSk7CisJICAgICAg
ICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSB7CisJICAgICAg
ICAgICAgICAgIGlmICh0aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkp
IHsKKwkgICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOworCSAgICAg
ICAgICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3RyaWN0RnVuY3Rp
b25OYW1lOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRo
aXMuc2Nhbm5lci5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7CisJICAg
ICAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsKKwkgICAgICAgICAgICAg
ICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZDsK
KwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAg
IHZhciBwcmV2aW91c0FsbG93QXdhaXQgPSB0aGlzLmNvbnRleHQuYXdhaXQ7CisJICAgICAgICB2
YXIgcHJldmlvdXNBbGxvd1lpZWxkID0gdGhpcy5jb250ZXh0LmFsbG93WWllbGQ7CisJICAgICAg
ICB0aGlzLmNvbnRleHQuYXdhaXQgPSBpc0FzeW5jOworCSAgICAgICAgdGhpcy5jb250ZXh0LmFs
bG93WWllbGQgPSAhaXNHZW5lcmF0b3I7CisJICAgICAgICB2YXIgZm9ybWFsUGFyYW1ldGVycyA9
IHRoaXMucGFyc2VGb3JtYWxQYXJhbWV0ZXJzKGZpcnN0UmVzdHJpY3RlZCk7CisJICAgICAgICB2
YXIgcGFyYW1zID0gZm9ybWFsUGFyYW1ldGVycy5wYXJhbXM7CisJICAgICAgICB2YXIgc3RyaWN0
ZWQgPSBmb3JtYWxQYXJhbWV0ZXJzLnN0cmljdGVkOworCSAgICAgICAgZmlyc3RSZXN0cmljdGVk
ID0gZm9ybWFsUGFyYW1ldGVycy5maXJzdFJlc3RyaWN0ZWQ7CisJICAgICAgICBpZiAoZm9ybWFs
UGFyYW1ldGVycy5tZXNzYWdlKSB7CisJICAgICAgICAgICAgbWVzc2FnZSA9IGZvcm1hbFBhcmFt
ZXRlcnMubWVzc2FnZTsKKwkgICAgICAgIH0KKwkgICAgICAgIHZhciBwcmV2aW91c1N0cmljdCA9
IHRoaXMuY29udGV4dC5zdHJpY3Q7CisJICAgICAgICB2YXIgYm9keSA9IHRoaXMucGFyc2VGdW5j
dGlvblNvdXJjZUVsZW1lbnRzKCk7CisJICAgICAgICBpZiAodGhpcy5jb250ZXh0LnN0cmljdCAm
JiBmaXJzdFJlc3RyaWN0ZWQpIHsKKwkgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRv
a2VuKGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSk7CisJICAgICAgICB9CisJICAgICAgICBpZiAo
dGhpcy5jb250ZXh0LnN0cmljdCAmJiBzdHJpY3RlZCkgeworCSAgICAgICAgICAgIHRoaXMudG9s
ZXJhdGVVbmV4cGVjdGVkVG9rZW4oc3RyaWN0ZWQsIG1lc3NhZ2UpOworCSAgICAgICAgfQorCSAg
ICAgICAgdGhpcy5jb250ZXh0LnN0cmljdCA9IHByZXZpb3VzU3RyaWN0OworCSAgICAgICAgdGhp
cy5jb250ZXh0LmF3YWl0ID0gcHJldmlvdXNBbGxvd0F3YWl0OworCSAgICAgICAgdGhpcy5jb250
ZXh0LmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7CisJICAgICAgICByZXR1cm4gaXNB
c3luYyA/IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuQXN5bmNGdW5jdGlvbkRlY2xhcmF0
aW9uKGlkLCBwYXJhbXMsIGJvZHkpKSA6CisJICAgICAgICAgICAgdGhpcy5maW5hbGl6ZShub2Rl
LCBuZXcgTm9kZS5GdW5jdGlvbkRlY2xhcmF0aW9uKGlkLCBwYXJhbXMsIGJvZHksIGlzR2VuZXJh
dG9yKSk7CisJICAgIH07CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VGdW5jdGlvbkV4cHJl
c3Npb24gPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9k
ZSgpOworCSAgICAgICAgdmFyIGlzQXN5bmMgPSB0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQo
J2FzeW5jJyk7CisJICAgICAgICBpZiAoaXNBc3luYykgeworCSAgICAgICAgICAgIHRoaXMubmV4
dFRva2VuKCk7CisJICAgICAgICB9CisJICAgICAgICB0aGlzLmV4cGVjdEtleXdvcmQoJ2Z1bmN0
aW9uJyk7CisJICAgICAgICB2YXIgaXNHZW5lcmF0b3IgPSBpc0FzeW5jID8gZmFsc2UgOiB0aGlz
Lm1hdGNoKCcqJyk7CisJICAgICAgICBpZiAoaXNHZW5lcmF0b3IpIHsKKwkgICAgICAgICAgICB0
aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgfQorCSAgICAgICAgdmFyIG1lc3NhZ2U7CisJICAg
ICAgICB2YXIgaWQgPSBudWxsOworCSAgICAgICAgdmFyIGZpcnN0UmVzdHJpY3RlZDsKKwkgICAg
ICAgIHZhciBwcmV2aW91c0FsbG93QXdhaXQgPSB0aGlzLmNvbnRleHQuYXdhaXQ7CisJICAgICAg
ICB2YXIgcHJldmlvdXNBbGxvd1lpZWxkID0gdGhpcy5jb250ZXh0LmFsbG93WWllbGQ7CisJICAg
ICAgICB0aGlzLmNvbnRleHQuYXdhaXQgPSBpc0FzeW5jOworCSAgICAgICAgdGhpcy5jb250ZXh0
LmFsbG93WWllbGQgPSAhaXNHZW5lcmF0b3I7CisJICAgICAgICBpZiAoIXRoaXMubWF0Y2goJygn
KSkgeworCSAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubG9va2FoZWFkOworCSAgICAgICAg
ICAgIGlkID0gKCF0aGlzLmNvbnRleHQuc3RyaWN0ICYmICFpc0dlbmVyYXRvciAmJiB0aGlzLm1h
dGNoS2V5d29yZCgneWllbGQnKSkgPyB0aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKSA6IHRoaXMu
cGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKwkgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0
LnN0cmljdCkgeworCSAgICAgICAgICAgICAgICBpZiAodGhpcy5zY2FubmVyLmlzUmVzdHJpY3Rl
ZFdvcmQodG9rZW4udmFsdWUpKSB7CisJICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRl
VW5leHBlY3RlZFRva2VuKHRva2VuLCBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9u
TmFtZSk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAg
ZWxzZSB7CisJICAgICAgICAgICAgICAgIGlmICh0aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29y
ZCh0b2tlbi52YWx1ZSkpIHsKKwkgICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9
IHRva2VuOworCSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VzXzEuTWVzc2Fn
ZXMuU3RyaWN0RnVuY3Rpb25OYW1lOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKHRoaXMuc2Nhbm5lci5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4u
dmFsdWUpKSB7CisJICAgICAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsK
KwkgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlc18xLk1lc3NhZ2VzLlN0cmlj
dFJlc2VydmVkV29yZDsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAg
ICAgIH0KKwkgICAgICAgIHZhciBmb3JtYWxQYXJhbWV0ZXJzID0gdGhpcy5wYXJzZUZvcm1hbFBh
cmFtZXRlcnMoZmlyc3RSZXN0cmljdGVkKTsKKwkgICAgICAgIHZhciBwYXJhbXMgPSBmb3JtYWxQ
YXJhbWV0ZXJzLnBhcmFtczsKKwkgICAgICAgIHZhciBzdHJpY3RlZCA9IGZvcm1hbFBhcmFtZXRl
cnMuc3RyaWN0ZWQ7CisJICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSBmb3JtYWxQYXJhbWV0ZXJz
LmZpcnN0UmVzdHJpY3RlZDsKKwkgICAgICAgIGlmIChmb3JtYWxQYXJhbWV0ZXJzLm1lc3NhZ2Up
IHsKKwkgICAgICAgICAgICBtZXNzYWdlID0gZm9ybWFsUGFyYW1ldGVycy5tZXNzYWdlOworCSAg
ICAgICAgfQorCSAgICAgICAgdmFyIHByZXZpb3VzU3RyaWN0ID0gdGhpcy5jb250ZXh0LnN0cmlj
dDsKKwkgICAgICAgIHZhciBib2R5ID0gdGhpcy5wYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMo
KTsKKwkgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0ICYmIGZpcnN0UmVzdHJpY3RlZCkg
eworCSAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oZmlyc3RSZXN0cmljdGVk
LCBtZXNzYWdlKTsKKwkgICAgICAgIH0KKwkgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0
ICYmIHN0cmljdGVkKSB7CisJICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tl
bihzdHJpY3RlZCwgbWVzc2FnZSk7CisJICAgICAgICB9CisJICAgICAgICB0aGlzLmNvbnRleHQu
c3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7CisJICAgICAgICB0aGlzLmNvbnRleHQuYXdhaXQgPSBw
cmV2aW91c0FsbG93QXdhaXQ7CisJICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IHBy
ZXZpb3VzQWxsb3dZaWVsZDsKKwkgICAgICAgIHJldHVybiBpc0FzeW5jID8gdGhpcy5maW5hbGl6
ZShub2RlLCBuZXcgTm9kZS5Bc3luY0Z1bmN0aW9uRXhwcmVzc2lvbihpZCwgcGFyYW1zLCBib2R5
KSkgOgorCSAgICAgICAgICAgIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRnVuY3Rpb25F
eHByZXNzaW9uKGlkLCBwYXJhbXMsIGJvZHksIGlzR2VuZXJhdG9yKSk7CisJICAgIH07CisJICAg
IC8vIEVDTUEtMjYyIDE0LjEuMSBEaXJlY3RpdmUgUHJvbG9ndWVzCisJICAgIFBhcnNlci5wcm90
b3R5cGUucGFyc2VEaXJlY3RpdmUgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgdG9rZW4g
PSB0aGlzLmxvb2thaGVhZDsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7
CisJICAgICAgICB2YXIgZXhwciA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7CisJICAgICAgICB2
YXIgZGlyZWN0aXZlID0gKGV4cHIudHlwZSA9PT0gc3ludGF4XzEuU3ludGF4LkxpdGVyYWwpID8g
dGhpcy5nZXRUb2tlblJhdyh0b2tlbikuc2xpY2UoMSwgLTEpIDogbnVsbDsKKwkgICAgICAgIHRo
aXMuY29uc3VtZVNlbWljb2xvbigpOworCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9k
ZSwgZGlyZWN0aXZlID8gbmV3IE5vZGUuRGlyZWN0aXZlKGV4cHIsIGRpcmVjdGl2ZSkgOiBuZXcg
Tm9kZS5FeHByZXNzaW9uU3RhdGVtZW50KGV4cHIpKTsKKwkgICAgfTsKKwkgICAgUGFyc2VyLnBy
b3RvdHlwZS5wYXJzZURpcmVjdGl2ZVByb2xvZ3VlcyA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAg
IHZhciBmaXJzdFJlc3RyaWN0ZWQgPSBudWxsOworCSAgICAgICAgdmFyIGJvZHkgPSBbXTsKKwkg
ICAgICAgIHdoaWxlICh0cnVlKSB7CisJICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5sb29r
YWhlYWQ7CisJICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IHRva2VuXzEuVG9rZW4uU3Ry
aW5nTGl0ZXJhbCkgeworCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICB9CisJ
ICAgICAgICAgICAgdmFyIHN0YXRlbWVudCA9IHRoaXMucGFyc2VEaXJlY3RpdmUoKTsKKwkgICAg
ICAgICAgICBib2R5LnB1c2goc3RhdGVtZW50KTsKKwkgICAgICAgICAgICB2YXIgZGlyZWN0aXZl
ID0gc3RhdGVtZW50LmRpcmVjdGl2ZTsKKwkgICAgICAgICAgICBpZiAodHlwZW9mIGRpcmVjdGl2
ZSAhPT0gJ3N0cmluZycpIHsKKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAg
fQorCSAgICAgICAgICAgIGlmIChkaXJlY3RpdmUgPT09ICd1c2Ugc3RyaWN0JykgeworCSAgICAg
ICAgICAgICAgICB0aGlzLmNvbnRleHQuc3RyaWN0ID0gdHJ1ZTsKKwkgICAgICAgICAgICAgICAg
aWYgKGZpcnN0UmVzdHJpY3RlZCkgeworCSAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0
ZVVuZXhwZWN0ZWRUb2tlbihmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2VzXzEuTWVzc2FnZXMuU3Ry
aWN0T2N0YWxMaXRlcmFsKTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkg
ICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgaWYgKCFmaXJzdFJlc3RyaWN0ZWQg
JiYgdG9rZW4ub2N0YWwpIHsKKwkgICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9
IHRva2VuOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQor
CSAgICAgICAgcmV0dXJuIGJvZHk7CisJICAgIH07CisJICAgIC8vIEVDTUEtMjYyIDE0LjMgTWV0
aG9kIERlZmluaXRpb25zCisJICAgIFBhcnNlci5wcm90b3R5cGUucXVhbGlmaWVkUHJvcGVydHlO
YW1lID0gZnVuY3Rpb24gKHRva2VuKSB7CisJICAgICAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHsK
KwkgICAgICAgICAgICBjYXNlIHRva2VuXzEuVG9rZW4uSWRlbnRpZmllcjoKKwkgICAgICAgICAg
ICBjYXNlIHRva2VuXzEuVG9rZW4uU3RyaW5nTGl0ZXJhbDoKKwkgICAgICAgICAgICBjYXNlIHRv
a2VuXzEuVG9rZW4uQm9vbGVhbkxpdGVyYWw6CisJICAgICAgICAgICAgY2FzZSB0b2tlbl8xLlRv
a2VuLk51bGxMaXRlcmFsOgorCSAgICAgICAgICAgIGNhc2UgdG9rZW5fMS5Ub2tlbi5OdW1lcmlj
TGl0ZXJhbDoKKwkgICAgICAgICAgICBjYXNlIHRva2VuXzEuVG9rZW4uS2V5d29yZDoKKwkgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisJICAgICAgICAgICAgY2FzZSB0b2tlbl8xLlRva2Vu
LlB1bmN0dWF0b3I6CisJICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbi52YWx1ZSA9PT0gJ1sn
OworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIGZhbHNlOworCSAgICB9OworCSAgICBQYXJz
ZXIucHJvdG90eXBlLnBhcnNlR2V0dGVyTWV0aG9kID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAg
dmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7
CisJICAgICAgICB0aGlzLmV4cGVjdCgnKScpOworCSAgICAgICAgdmFyIGlzR2VuZXJhdG9yID0g
ZmFsc2U7CisJICAgICAgICB2YXIgcGFyYW1zID0geworCSAgICAgICAgICAgIHBhcmFtczogW10s
CisJICAgICAgICAgICAgc3RyaWN0ZWQ6IG51bGwsCisJICAgICAgICAgICAgZmlyc3RSZXN0cmlj
dGVkOiBudWxsLAorCSAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwKKwkgICAgICAgIH07CisJICAg
ICAgICB2YXIgcHJldmlvdXNBbGxvd1lpZWxkID0gdGhpcy5jb250ZXh0LmFsbG93WWllbGQ7CisJ
ICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IGZhbHNlOworCSAgICAgICAgdmFyIG1l
dGhvZCA9IHRoaXMucGFyc2VQcm9wZXJ0eU1ldGhvZChwYXJhbXMpOworCSAgICAgICAgdGhpcy5j
b250ZXh0LmFsbG93WWllbGQgPSBwcmV2aW91c0FsbG93WWllbGQ7CisJICAgICAgICByZXR1cm4g
dGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5GdW5jdGlvbkV4cHJlc3Npb24obnVsbCwgcGFy
YW1zLnBhcmFtcywgbWV0aG9kLCBpc0dlbmVyYXRvcikpOworCSAgICB9OworCSAgICBQYXJzZXIu
cHJvdG90eXBlLnBhcnNlU2V0dGVyTWV0aG9kID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFy
IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHZhciBvcHRpb25zID0geworCSAg
ICAgICAgICAgIHBhcmFtczogW10sCisJICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkOiBudWxs
LAorCSAgICAgICAgICAgIHBhcmFtU2V0OiB7fQorCSAgICAgICAgfTsKKwkgICAgICAgIHZhciBp
c0dlbmVyYXRvciA9IGZhbHNlOworCSAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dZaWVsZCA9IHRo
aXMuY29udGV4dC5hbGxvd1lpZWxkOworCSAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQg
PSBmYWxzZTsKKwkgICAgICAgIHRoaXMuZXhwZWN0KCcoJyk7CisJICAgICAgICBpZiAodGhpcy5t
YXRjaCgnKScpKSB7CisJICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0
aGlzLmxvb2thaGVhZCk7CisJICAgICAgICB9CisJICAgICAgICBlbHNlIHsKKwkgICAgICAgICAg
ICB0aGlzLnBhcnNlRm9ybWFsUGFyYW1ldGVyKG9wdGlvbnMpOworCSAgICAgICAgfQorCSAgICAg
ICAgdGhpcy5leHBlY3QoJyknKTsKKwkgICAgICAgIHZhciBtZXRob2QgPSB0aGlzLnBhcnNlUHJv
cGVydHlNZXRob2Qob3B0aW9ucyk7CisJICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9
IHByZXZpb3VzQWxsb3dZaWVsZDsKKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUs
IG5ldyBOb2RlLkZ1bmN0aW9uRXhwcmVzc2lvbihudWxsLCBvcHRpb25zLnBhcmFtcywgbWV0aG9k
LCBpc0dlbmVyYXRvcikpOworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlR2Vu
ZXJhdG9yTWV0aG9kID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNy
ZWF0ZU5vZGUoKTsKKwkgICAgICAgIHZhciBpc0dlbmVyYXRvciA9IHRydWU7CisJICAgICAgICB2
YXIgcHJldmlvdXNBbGxvd1lpZWxkID0gdGhpcy5jb250ZXh0LmFsbG93WWllbGQ7CisJICAgICAg
ICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IHRydWU7CisJICAgICAgICB2YXIgcGFyYW1zID0g
dGhpcy5wYXJzZUZvcm1hbFBhcmFtZXRlcnMoKTsKKwkgICAgICAgIHRoaXMuY29udGV4dC5hbGxv
d1lpZWxkID0gZmFsc2U7CisJICAgICAgICB2YXIgbWV0aG9kID0gdGhpcy5wYXJzZVByb3BlcnR5
TWV0aG9kKHBhcmFtcyk7CisJICAgICAgICB0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCA9IHByZXZp
b3VzQWxsb3dZaWVsZDsKKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBO
b2RlLkZ1bmN0aW9uRXhwcmVzc2lvbihudWxsLCBwYXJhbXMucGFyYW1zLCBtZXRob2QsIGlzR2Vu
ZXJhdG9yKSk7CisJICAgIH07CisJICAgIC8vIEVDTUEtMjYyIDE0LjQgR2VuZXJhdG9yIEZ1bmN0
aW9uIERlZmluaXRpb25zCisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VZaWVsZEV4cHJlc3Np
b24gPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgp
OworCSAgICAgICAgdGhpcy5leHBlY3RLZXl3b3JkKCd5aWVsZCcpOworCSAgICAgICAgdmFyIGFy
Z3VtZW50ID0gbnVsbDsKKwkgICAgICAgIHZhciBkZWxlZ2F0ZSA9IGZhbHNlOworCSAgICAgICAg
aWYgKCF0aGlzLmhhc0xpbmVUZXJtaW5hdG9yKSB7CisJICAgICAgICAgICAgdmFyIHByZXZpb3Vz
QWxsb3dZaWVsZCA9IHRoaXMuY29udGV4dC5hbGxvd1lpZWxkOworCSAgICAgICAgICAgIHRoaXMu
Y29udGV4dC5hbGxvd1lpZWxkID0gZmFsc2U7CisJICAgICAgICAgICAgZGVsZWdhdGUgPSB0aGlz
Lm1hdGNoKCcqJyk7CisJICAgICAgICAgICAgaWYgKGRlbGVnYXRlKSB7CisJICAgICAgICAgICAg
ICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICAgICAgICAgIGFyZ3VtZW50ID0gdGhpcy5w
YXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAg
IGVsc2UgeworCSAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2goJzsnKSAmJiAhdGhpcy5t
YXRjaCgnfScpICYmICF0aGlzLm1hdGNoKCcpJykgJiYgdGhpcy5sb29rYWhlYWQudHlwZSAhPT0g
dG9rZW5fMS5Ub2tlbi5FT0YpIHsKKwkgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50ID0gdGhp
cy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAg
ICAgICAgICB9CisJICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSBwcmV2aW91
c0FsbG93WWllbGQ7CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShu
b2RlLCBuZXcgTm9kZS5ZaWVsZEV4cHJlc3Npb24oYXJndW1lbnQsIGRlbGVnYXRlKSk7CisJICAg
IH07CisJICAgIC8vIEVDTUEtMjYyIDE0LjUgQ2xhc3MgRGVmaW5pdGlvbnMKKwkgICAgUGFyc2Vy
LnByb3RvdHlwZS5wYXJzZUNsYXNzRWxlbWVudCA9IGZ1bmN0aW9uIChoYXNDb25zdHJ1Y3Rvcikg
eworCSAgICAgICAgdmFyIHRva2VuID0gdGhpcy5sb29rYWhlYWQ7CisJICAgICAgICB2YXIgbm9k
ZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdmFyIGtpbmQgPSAnJzsKKwkgICAgICAg
IHZhciBrZXkgPSBudWxsOworCSAgICAgICAgdmFyIHZhbHVlID0gbnVsbDsKKwkgICAgICAgIHZh
ciBjb21wdXRlZCA9IGZhbHNlOworCSAgICAgICAgdmFyIG1ldGhvZCA9IGZhbHNlOworCSAgICAg
ICAgdmFyIGlzU3RhdGljID0gZmFsc2U7CisJICAgICAgICB2YXIgaXNBc3luYyA9IGZhbHNlOwor
CSAgICAgICAgaWYgKHRoaXMubWF0Y2goJyonKSkgeworCSAgICAgICAgICAgIHRoaXMubmV4dFRv
a2VuKCk7CisJICAgICAgICB9CisJICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICBjb21wdXRl
ZCA9IHRoaXMubWF0Y2goJ1snKTsKKwkgICAgICAgICAgICBrZXkgPSB0aGlzLnBhcnNlT2JqZWN0
UHJvcGVydHlLZXkoKTsKKwkgICAgICAgICAgICB2YXIgaWQgPSBrZXk7CisJICAgICAgICAgICAg
aWYgKGlkLm5hbWUgPT09ICdzdGF0aWMnICYmICh0aGlzLnF1YWxpZmllZFByb3BlcnR5TmFtZSh0
aGlzLmxvb2thaGVhZCkgfHwgdGhpcy5tYXRjaCgnKicpKSkgeworCSAgICAgICAgICAgICAgICB0
b2tlbiA9IHRoaXMubG9va2FoZWFkOworCSAgICAgICAgICAgICAgICBpc1N0YXRpYyA9IHRydWU7
CisJICAgICAgICAgICAgICAgIGNvbXB1dGVkID0gdGhpcy5tYXRjaCgnWycpOworCSAgICAgICAg
ICAgICAgICBpZiAodGhpcy5tYXRjaCgnKicpKSB7CisJICAgICAgICAgICAgICAgICAgICB0aGlz
Lm5leHRUb2tlbigpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGVsc2Ug
eworCSAgICAgICAgICAgICAgICAgICAga2V5ID0gdGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5
KCk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgaXNB
c3luYyA9ICh0b2tlbi50eXBlID09PSB0b2tlbl8xLlRva2VuLklkZW50aWZpZXIpICYmICF0aGlz
Lmhhc0xpbmVUZXJtaW5hdG9yICYmICh0aGlzLmxvb2thaGVhZC50eXBlID09PSB0b2tlbl8xLlRv
a2VuLklkZW50aWZpZXIpICYmICh0b2tlbi52YWx1ZSA9PT0gJ2FzeW5jJyk7CisJICAgICAgICAg
ICAgaWYgKGlzQXN5bmMpIHsKKwkgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLmxvb2thaGVh
ZDsKKwkgICAgICAgICAgICAgICAga2V5ID0gdGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7
CisJICAgICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSB0b2tlbl8xLlRva2VuLklkZW50
aWZpZXIgJiYgWydnZXQnLCAnc2V0JywgJ2NvbnN0cnVjdG9yJ10uaW5kZXhPZih0b2tlbi52YWx1
ZSkgPj0gMCkgeworCSAgICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRU
b2tlbih0b2tlbik7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAg
ICB9CisJICAgICAgICB2YXIgbG9va2FoZWFkUHJvcGVydHlLZXkgPSB0aGlzLnF1YWxpZmllZFBy
b3BlcnR5TmFtZSh0aGlzLmxvb2thaGVhZCk7CisJICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0g
dG9rZW5fMS5Ub2tlbi5JZGVudGlmaWVyKSB7CisJICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVl
ID09PSAnZ2V0JyAmJiBsb29rYWhlYWRQcm9wZXJ0eUtleSkgeworCSAgICAgICAgICAgICAgICBr
aW5kID0gJ2dldCc7CisJICAgICAgICAgICAgICAgIGNvbXB1dGVkID0gdGhpcy5tYXRjaCgnWycp
OworCSAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsK
KwkgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmFsbG93WWllbGQgPSBmYWxzZTsKKwkgICAg
ICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnBhcnNlR2V0dGVyTWV0aG9kKCk7CisJICAgICAgICAg
ICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuLnZhbHVlID09PSAnc2V0JyAmJiBsb29r
YWhlYWRQcm9wZXJ0eUtleSkgeworCSAgICAgICAgICAgICAgICBraW5kID0gJ3NldCc7CisJICAg
ICAgICAgICAgICAgIGNvbXB1dGVkID0gdGhpcy5tYXRjaCgnWycpOworCSAgICAgICAgICAgICAg
ICBrZXkgPSB0aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsKKwkgICAgICAgICAgICAgICAg
dmFsdWUgPSB0aGlzLnBhcnNlU2V0dGVyTWV0aG9kKCk7CisJICAgICAgICAgICAgfQorCSAgICAg
ICAgfQorCSAgICAgICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gdG9rZW5fMS5Ub2tlbi5QdW5j
dHVhdG9yICYmIHRva2VuLnZhbHVlID09PSAnKicgJiYgbG9va2FoZWFkUHJvcGVydHlLZXkpIHsK
KwkgICAgICAgICAgICBraW5kID0gJ2luaXQnOworCSAgICAgICAgICAgIGNvbXB1dGVkID0gdGhp
cy5tYXRjaCgnWycpOworCSAgICAgICAgICAgIGtleSA9IHRoaXMucGFyc2VPYmplY3RQcm9wZXJ0
eUtleSgpOworCSAgICAgICAgICAgIHZhbHVlID0gdGhpcy5wYXJzZUdlbmVyYXRvck1ldGhvZCgp
OworCSAgICAgICAgICAgIG1ldGhvZCA9IHRydWU7CisJICAgICAgICB9CisJICAgICAgICBpZiAo
IWtpbmQgJiYga2V5ICYmIHRoaXMubWF0Y2goJygnKSkgeworCSAgICAgICAgICAgIGtpbmQgPSAn
aW5pdCc7CisJICAgICAgICAgICAgdmFsdWUgPSBpc0FzeW5jID8gdGhpcy5wYXJzZVByb3BlcnR5
TWV0aG9kQXN5bmNGdW5jdGlvbigpIDogdGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kRnVuY3Rpb24o
KTsKKwkgICAgICAgICAgICBtZXRob2QgPSB0cnVlOworCSAgICAgICAgfQorCSAgICAgICAgaWYg
KCFraW5kKSB7CisJICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxv
b2thaGVhZCk7CisJICAgICAgICB9CisJICAgICAgICBpZiAoa2luZCA9PT0gJ2luaXQnKSB7CisJ
ICAgICAgICAgICAga2luZCA9ICdtZXRob2QnOworCSAgICAgICAgfQorCSAgICAgICAgaWYgKCFj
b21wdXRlZCkgeworCSAgICAgICAgICAgIGlmIChpc1N0YXRpYyAmJiB0aGlzLmlzUHJvcGVydHlL
ZXkoa2V5LCAncHJvdG90eXBlJykpIHsKKwkgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhw
ZWN0ZWRUb2tlbih0b2tlbiwgbWVzc2FnZXNfMS5NZXNzYWdlcy5TdGF0aWNQcm90b3R5cGUpOwor
CSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBpZiAoIWlzU3RhdGljICYmIHRoaXMuaXNQcm9w
ZXJ0eUtleShrZXksICdjb25zdHJ1Y3RvcicpKSB7CisJICAgICAgICAgICAgICAgIGlmIChraW5k
ICE9PSAnbWV0aG9kJyB8fCAhbWV0aG9kIHx8ICh2YWx1ZSAmJiB2YWx1ZS5nZW5lcmF0b3IpKSB7
CisJICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRva2VuLCBt
ZXNzYWdlc18xLk1lc3NhZ2VzLkNvbnN0cnVjdG9yU3BlY2lhbE1ldGhvZCk7CisJICAgICAgICAg
ICAgICAgIH0KKwkgICAgICAgICAgICAgICAgaWYgKGhhc0NvbnN0cnVjdG9yLnZhbHVlKSB7CisJ
ICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRva2VuLCBtZXNz
YWdlc18xLk1lc3NhZ2VzLkR1cGxpY2F0ZUNvbnN0cnVjdG9yKTsKKwkgICAgICAgICAgICAgICAg
fQorCSAgICAgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgICAgIGhhc0NvbnN0
cnVjdG9yLnZhbHVlID0gdHJ1ZTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAg
ICBraW5kID0gJ2NvbnN0cnVjdG9yJzsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAg
ICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5NZXRob2REZWZpbml0aW9u
KGtleSwgY29tcHV0ZWQsIHZhbHVlLCBraW5kLCBpc1N0YXRpYykpOworCSAgICB9OworCSAgICBQ
YXJzZXIucHJvdG90eXBlLnBhcnNlQ2xhc3NFbGVtZW50TGlzdCA9IGZ1bmN0aW9uICgpIHsKKwkg
ICAgICAgIHZhciBib2R5ID0gW107CisJICAgICAgICB2YXIgaGFzQ29uc3RydWN0b3IgPSB7IHZh
bHVlOiBmYWxzZSB9OworCSAgICAgICAgdGhpcy5leHBlY3QoJ3snKTsKKwkgICAgICAgIHdoaWxl
ICghdGhpcy5tYXRjaCgnfScpKSB7CisJICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJzsnKSkg
eworCSAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAgICAgICAgIH0KKwkg
ICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgYm9keS5wdXNoKHRoaXMucGFyc2VD
bGFzc0VsZW1lbnQoaGFzQ29uc3RydWN0b3IpKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9
CisJICAgICAgICB0aGlzLmV4cGVjdCgnfScpOworCSAgICAgICAgcmV0dXJuIGJvZHk7CisJICAg
IH07CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VDbGFzc0JvZHkgPSBmdW5jdGlvbiAoKSB7
CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdmFyIGVs
ZW1lbnRMaXN0ID0gdGhpcy5wYXJzZUNsYXNzRWxlbWVudExpc3QoKTsKKwkgICAgICAgIHJldHVy
biB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkNsYXNzQm9keShlbGVtZW50TGlzdCkpOwor
CSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQ2xhc3NEZWNsYXJhdGlvbiA9IGZ1
bmN0aW9uIChpZGVudGlmaWVySXNPcHRpb25hbCkgeworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlz
LmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIHZhciBwcmV2aW91c1N0cmljdCA9IHRoaXMuY29udGV4
dC5zdHJpY3Q7CisJICAgICAgICB0aGlzLmNvbnRleHQuc3RyaWN0ID0gdHJ1ZTsKKwkgICAgICAg
IHRoaXMuZXhwZWN0S2V5d29yZCgnY2xhc3MnKTsKKwkgICAgICAgIHZhciBpZCA9IChpZGVudGlm
aWVySXNPcHRpb25hbCAmJiAodGhpcy5sb29rYWhlYWQudHlwZSAhPT0gdG9rZW5fMS5Ub2tlbi5J
ZGVudGlmaWVyKSkgPyBudWxsIDogdGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworCSAg
ICAgICAgdmFyIHN1cGVyQ2xhc3MgPSBudWxsOworCSAgICAgICAgaWYgKHRoaXMubWF0Y2hLZXl3
b3JkKCdleHRlbmRzJykpIHsKKwkgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAg
ICAgICAgIHN1cGVyQ2xhc3MgPSB0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUxl
ZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwpOworCSAgICAgICAgfQorCSAgICAgICAgdmFy
IGNsYXNzQm9keSA9IHRoaXMucGFyc2VDbGFzc0JvZHkoKTsKKwkgICAgICAgIHRoaXMuY29udGV4
dC5zdHJpY3QgPSBwcmV2aW91c1N0cmljdDsKKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXpl
KG5vZGUsIG5ldyBOb2RlLkNsYXNzRGVjbGFyYXRpb24oaWQsIHN1cGVyQ2xhc3MsIGNsYXNzQm9k
eSkpOworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlQ2xhc3NFeHByZXNzaW9u
ID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsK
KwkgICAgICAgIHZhciBwcmV2aW91c1N0cmljdCA9IHRoaXMuY29udGV4dC5zdHJpY3Q7CisJICAg
ICAgICB0aGlzLmNvbnRleHQuc3RyaWN0ID0gdHJ1ZTsKKwkgICAgICAgIHRoaXMuZXhwZWN0S2V5
d29yZCgnY2xhc3MnKTsKKwkgICAgICAgIHZhciBpZCA9ICh0aGlzLmxvb2thaGVhZC50eXBlID09
PSB0b2tlbl8xLlRva2VuLklkZW50aWZpZXIpID8gdGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRpZmll
cigpIDogbnVsbDsKKwkgICAgICAgIHZhciBzdXBlckNsYXNzID0gbnVsbDsKKwkgICAgICAgIGlm
ICh0aGlzLm1hdGNoS2V5d29yZCgnZXh0ZW5kcycpKSB7CisJICAgICAgICAgICAgdGhpcy5uZXh0
VG9rZW4oKTsKKwkgICAgICAgICAgICBzdXBlckNsYXNzID0gdGhpcy5pc29sYXRlQ292ZXJHcmFt
bWFyKHRoaXMucGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsKTsKKwkgICAgICAg
IH0KKwkgICAgICAgIHZhciBjbGFzc0JvZHkgPSB0aGlzLnBhcnNlQ2xhc3NCb2R5KCk7CisJICAg
ICAgICB0aGlzLmNvbnRleHQuc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7CisJICAgICAgICByZXR1
cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5DbGFzc0V4cHJlc3Npb24oaWQsIHN1cGVy
Q2xhc3MsIGNsYXNzQm9keSkpOworCSAgICB9OworCSAgICAvLyBFQ01BLTI2MiAxNS4xIFNjcmlw
dHMKKwkgICAgLy8gRUNNQS0yNjIgMTUuMiBNb2R1bGVzCisJICAgIFBhcnNlci5wcm90b3R5cGUu
cGFyc2VNb2R1bGUgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB0aGlzLmNvbnRleHQuc3RyaWN0
ID0gdHJ1ZTsKKwkgICAgICAgIHRoaXMuY29udGV4dC5pc01vZHVsZSA9IHRydWU7CisJICAgICAg
ICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdmFyIGJvZHkgPSB0aGlz
LnBhcnNlRGlyZWN0aXZlUHJvbG9ndWVzKCk7CisJICAgICAgICB3aGlsZSAodGhpcy5zdGFydE1h
cmtlci5pbmRleCA8IHRoaXMuc2Nhbm5lci5sZW5ndGgpIHsKKwkgICAgICAgICAgICBib2R5LnB1
c2godGhpcy5wYXJzZVN0YXRlbWVudExpc3RJdGVtKCkpOworCSAgICAgICAgfQorCSAgICAgICAg
cmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuTW9kdWxlKGJvZHkpKTsKKwkgICAg
fTsKKwkgICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVNjcmlwdCA9IGZ1bmN0aW9uICgpIHsKKwkg
ICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICB2YXIgYm9keSA9
IHRoaXMucGFyc2VEaXJlY3RpdmVQcm9sb2d1ZXMoKTsKKwkgICAgICAgIHdoaWxlICh0aGlzLnN0
YXJ0TWFya2VyLmluZGV4IDwgdGhpcy5zY2FubmVyLmxlbmd0aCkgeworCSAgICAgICAgICAgIGJv
ZHkucHVzaCh0aGlzLnBhcnNlU3RhdGVtZW50TGlzdEl0ZW0oKSk7CisJICAgICAgICB9CisJICAg
ICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5TY3JpcHQoYm9keSkpOwor
CSAgICB9OworCSAgICAvLyBFQ01BLTI2MiAxNS4yLjIgSW1wb3J0cworCSAgICBQYXJzZXIucHJv
dG90eXBlLnBhcnNlTW9kdWxlU3BlY2lmaWVyID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFy
IG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAgIGlmICh0aGlzLmxvb2thaGVhZC50
eXBlICE9PSB0b2tlbl8xLlRva2VuLlN0cmluZ0xpdGVyYWwpIHsKKwkgICAgICAgICAgICB0aGlz
LnRocm93RXJyb3IobWVzc2FnZXNfMS5NZXNzYWdlcy5JbnZhbGlkTW9kdWxlU3BlY2lmaWVyKTsK
KwkgICAgICAgIH0KKwkgICAgICAgIHZhciB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7CisJICAg
ICAgICB2YXIgcmF3ID0gdGhpcy5nZXRUb2tlblJhdyh0b2tlbik7CisJICAgICAgICByZXR1cm4g
dGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5MaXRlcmFsKHRva2VuLnZhbHVlLCByYXcpKTsK
KwkgICAgfTsKKwkgICAgLy8gaW1wb3J0IHs8Zm9vIGFzIGJhcj59IC4uLjsKKwkgICAgUGFyc2Vy
LnByb3RvdHlwZS5wYXJzZUltcG9ydFNwZWNpZmllciA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAg
IHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICB2YXIgaW1wb3J0ZWQ7CisJ
ICAgICAgICB2YXIgbG9jYWw7CisJICAgICAgICBpZiAodGhpcy5sb29rYWhlYWQudHlwZSA9PT0g
dG9rZW5fMS5Ub2tlbi5JZGVudGlmaWVyKSB7CisJICAgICAgICAgICAgaW1wb3J0ZWQgPSB0aGlz
LnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CisJICAgICAgICAgICAgbG9jYWwgPSBpbXBvcnRl
ZDsKKwkgICAgICAgICAgICBpZiAodGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdhcycpKSB7
CisJICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICAgICAgICAgIGxv
Y2FsID0gdGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworCSAgICAgICAgICAgIH0KKwkg
ICAgICAgIH0KKwkgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgIGltcG9ydGVkID0gdGhpcy5w
YXJzZUlkZW50aWZpZXJOYW1lKCk7CisJICAgICAgICAgICAgbG9jYWwgPSBpbXBvcnRlZDsKKwkg
ICAgICAgICAgICBpZiAodGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdhcycpKSB7CisJICAg
ICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICAgICAgICAgIGxvY2FsID0g
dGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworCSAgICAgICAgICAgIH0KKwkgICAgICAg
ICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0
aGlzLm5leHRUb2tlbigpKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICBy
ZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5JbXBvcnRTcGVjaWZpZXIobG9jYWws
IGltcG9ydGVkKSk7CisJICAgIH07CisJICAgIC8vIHtmb28sIGJhciBhcyBiYXN9CisJICAgIFBh
cnNlci5wcm90b3R5cGUucGFyc2VOYW1lZEltcG9ydHMgPSBmdW5jdGlvbiAoKSB7CisJICAgICAg
ICB0aGlzLmV4cGVjdCgneycpOworCSAgICAgICAgdmFyIHNwZWNpZmllcnMgPSBbXTsKKwkgICAg
ICAgIHdoaWxlICghdGhpcy5tYXRjaCgnfScpKSB7CisJICAgICAgICAgICAgc3BlY2lmaWVycy5w
dXNoKHRoaXMucGFyc2VJbXBvcnRTcGVjaWZpZXIoKSk7CisJICAgICAgICAgICAgaWYgKCF0aGlz
Lm1hdGNoKCd9JykpIHsKKwkgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoJywnKTsKKwkgICAg
ICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICB0aGlzLmV4cGVjdCgnfScpOworCSAgICAg
ICAgcmV0dXJuIHNwZWNpZmllcnM7CisJICAgIH07CisJICAgIC8vIGltcG9ydCA8Zm9vPiAuLi47
CisJICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VJbXBvcnREZWZhdWx0U3BlY2lmaWVyID0gZnVu
Y3Rpb24gKCkgeworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAg
ICAgIHZhciBsb2NhbCA9IHRoaXMucGFyc2VJZGVudGlmaWVyTmFtZSgpOworCSAgICAgICAgcmV0
dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuSW1wb3J0RGVmYXVsdFNwZWNpZmllcihs
b2NhbCkpOworCSAgICB9OworCSAgICAvLyBpbXBvcnQgPCogYXMgZm9vPiAuLi47CisJICAgIFBh
cnNlci5wcm90b3R5cGUucGFyc2VJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIgPSBmdW5jdGlvbiAo
KSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlTm9kZSgpOworCSAgICAgICAgdGhp
cy5leHBlY3QoJyonKTsKKwkgICAgICAgIGlmICghdGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3Jk
KCdhcycpKSB7CisJICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2VzXzEuTWVzc2Fn
ZXMuTm9Bc0FmdGVySW1wb3J0TmFtZXNwYWNlKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHRoaXMu
bmV4dFRva2VuKCk7CisJICAgICAgICB2YXIgbG9jYWwgPSB0aGlzLnBhcnNlSWRlbnRpZmllck5h
bWUoKTsKKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkltcG9y
dE5hbWVzcGFjZVNwZWNpZmllcihsb2NhbCkpOworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90
eXBlLnBhcnNlSW1wb3J0RGVjbGFyYXRpb24gPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICBpZiAo
dGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5KSB7CisJICAgICAgICAgICAgdGhpcy50aHJvd0Vy
cm9yKG1lc3NhZ2VzXzEuTWVzc2FnZXMuSWxsZWdhbEltcG9ydERlY2xhcmF0aW9uKTsKKwkgICAg
ICAgIH0KKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICB0
aGlzLmV4cGVjdEtleXdvcmQoJ2ltcG9ydCcpOworCSAgICAgICAgdmFyIHNyYzsKKwkgICAgICAg
IHZhciBzcGVjaWZpZXJzID0gW107CisJICAgICAgICBpZiAodGhpcy5sb29rYWhlYWQudHlwZSA9
PT0gdG9rZW5fMS5Ub2tlbi5TdHJpbmdMaXRlcmFsKSB7CisJICAgICAgICAgICAgLy8gaW1wb3J0
ICdmb28nOworCSAgICAgICAgICAgIHNyYyA9IHRoaXMucGFyc2VNb2R1bGVTcGVjaWZpZXIoKTsK
KwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgIGlmICh0aGlzLm1hdGNo
KCd7JykpIHsKKwkgICAgICAgICAgICAgICAgLy8gaW1wb3J0IHtiYXJ9CisJICAgICAgICAgICAg
ICAgIHNwZWNpZmllcnMgPSBzcGVjaWZpZXJzLmNvbmNhdCh0aGlzLnBhcnNlTmFtZWRJbXBvcnRz
KCkpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoKCcq
JykpIHsKKwkgICAgICAgICAgICAgICAgLy8gaW1wb3J0ICogYXMgZm9vCisJICAgICAgICAgICAg
ICAgIHNwZWNpZmllcnMucHVzaCh0aGlzLnBhcnNlSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKCkp
OworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmlzSWRlbnRpZmll
ck5hbWUodGhpcy5sb29rYWhlYWQpICYmICF0aGlzLm1hdGNoS2V5d29yZCgnZGVmYXVsdCcpKSB7
CisJICAgICAgICAgICAgICAgIC8vIGltcG9ydCBmb28KKwkgICAgICAgICAgICAgICAgc3BlY2lm
aWVycy5wdXNoKHRoaXMucGFyc2VJbXBvcnREZWZhdWx0U3BlY2lmaWVyKCkpOworCSAgICAgICAg
ICAgICAgICBpZiAodGhpcy5tYXRjaCgnLCcpKSB7CisJICAgICAgICAgICAgICAgICAgICB0aGlz
Lm5leHRUb2tlbigpOworCSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2goJyonKSkg
eworCSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGltcG9ydCBmb28sICogYXMgZm9vCisJICAg
ICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVycy5wdXNoKHRoaXMucGFyc2VJbXBvcnROYW1l
c3BhY2VTcGVjaWZpZXIoKSk7CisJICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoKCd7JykpIHsKKwkgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBpbXBvcnQgZm9vLCB7YmFyfQorCSAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNp
ZmllcnMgPSBzcGVjaWZpZXJzLmNvbmNhdCh0aGlzLnBhcnNlTmFtZWRJbXBvcnRzKCkpOworCSAg
ICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisJICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVh
ZCk7CisJICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAg
ICAgICB9CisJICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgIHRoaXMudGhyb3dV
bmV4cGVjdGVkVG9rZW4odGhpcy5uZXh0VG9rZW4oKSk7CisJICAgICAgICAgICAgfQorCSAgICAg
ICAgICAgIGlmICghdGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdmcm9tJykpIHsKKwkgICAg
ICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSB0aGlzLmxvb2thaGVhZC52YWx1ZSA/IG1lc3NhZ2Vz
XzEuTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuIDogbWVzc2FnZXNfMS5NZXNzYWdlcy5NaXNzaW5n
RnJvbUNsYXVzZTsKKwkgICAgICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2UsIHRo
aXMubG9va2FoZWFkLnZhbHVlKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgdGhpcy5u
ZXh0VG9rZW4oKTsKKwkgICAgICAgICAgICBzcmMgPSB0aGlzLnBhcnNlTW9kdWxlU3BlY2lmaWVy
KCk7CisJICAgICAgICB9CisJICAgICAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24oKTsKKwkgICAg
ICAgIHJldHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkltcG9ydERlY2xhcmF0aW9u
KHNwZWNpZmllcnMsIHNyYykpOworCSAgICB9OworCSAgICAvLyBFQ01BLTI2MiAxNS4yLjMgRXhw
b3J0cworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRXhwb3J0U3BlY2lmaWVyID0gZnVuY3Rp
b24gKCkgeworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZU5vZGUoKTsKKwkgICAgICAg
IHZhciBsb2NhbCA9IHRoaXMucGFyc2VJZGVudGlmaWVyTmFtZSgpOworCSAgICAgICAgdmFyIGV4
cG9ydGVkID0gbG9jYWw7CisJICAgICAgICBpZiAodGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3Jk
KCdhcycpKSB7CisJICAgICAgICAgICAgdGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgICAgICBl
eHBvcnRlZCA9IHRoaXMucGFyc2VJZGVudGlmaWVyTmFtZSgpOworCSAgICAgICAgfQorCSAgICAg
ICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRXhwb3J0U3BlY2lmaWVyKGxv
Y2FsLCBleHBvcnRlZCkpOworCSAgICB9OworCSAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlRXhw
b3J0RGVjbGFyYXRpb24gPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICBpZiAodGhpcy5jb250ZXh0
LmluRnVuY3Rpb25Cb2R5KSB7CisJICAgICAgICAgICAgdGhpcy50aHJvd0Vycm9yKG1lc3NhZ2Vz
XzEuTWVzc2FnZXMuSWxsZWdhbEV4cG9ydERlY2xhcmF0aW9uKTsKKwkgICAgICAgIH0KKwkgICAg
ICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVOb2RlKCk7CisJICAgICAgICB0aGlzLmV4cGVjdEtl
eXdvcmQoJ2V4cG9ydCcpOworCSAgICAgICAgdmFyIGV4cG9ydERlY2xhcmF0aW9uOworCSAgICAg
ICAgaWYgKHRoaXMubWF0Y2hLZXl3b3JkKCdkZWZhdWx0JykpIHsKKwkgICAgICAgICAgICAvLyBl
eHBvcnQgZGVmYXVsdCAuLi4KKwkgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpOworCSAgICAg
ICAgICAgIGlmICh0aGlzLm1hdGNoS2V5d29yZCgnZnVuY3Rpb24nKSkgeworCSAgICAgICAgICAg
ICAgICAvLyBleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb28gKCkge30KKwkgICAgICAgICAgICAg
ICAgLy8gZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge30KKwkgICAgICAgICAgICAgICAgdmFy
IGRlY2xhcmF0aW9uID0gdGhpcy5wYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24odHJ1ZSk7CisJICAg
ICAgICAgICAgICAgIGV4cG9ydERlY2xhcmF0aW9uID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcg
Tm9kZS5FeHBvcnREZWZhdWx0RGVjbGFyYXRpb24oZGVjbGFyYXRpb24pKTsKKwkgICAgICAgICAg
ICB9CisJICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tYXRjaEtleXdvcmQoJ2NsYXNzJykpIHsK
KwkgICAgICAgICAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgZm9vIHt9CisJICAgICAg
ICAgICAgICAgIHZhciBkZWNsYXJhdGlvbiA9IHRoaXMucGFyc2VDbGFzc0RlY2xhcmF0aW9uKHRy
dWUpOworCSAgICAgICAgICAgICAgICBleHBvcnREZWNsYXJhdGlvbiA9IHRoaXMuZmluYWxpemUo
bm9kZSwgbmV3IE5vZGUuRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKSk7CisJ
ICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICBpZiAo
dGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCdmcm9tJykpIHsKKwkgICAgICAgICAgICAgICAg
ICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlc18xLk1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwg
dGhpcy5sb29rYWhlYWQudmFsdWUpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAg
ICAgIC8vIGV4cG9ydCBkZWZhdWx0IHt9OworCSAgICAgICAgICAgICAgICAvLyBleHBvcnQgZGVm
YXVsdCBbXTsKKwkgICAgICAgICAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgKDEgKyAyKTsKKwkg
ICAgICAgICAgICAgICAgdmFyIGRlY2xhcmF0aW9uID0gdGhpcy5tYXRjaCgneycpID8gdGhpcy5w
YXJzZU9iamVjdEluaXRpYWxpemVyKCkgOgorCSAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRj
aCgnWycpID8gdGhpcy5wYXJzZUFycmF5SW5pdGlhbGl6ZXIoKSA6IHRoaXMucGFyc2VBc3NpZ25t
ZW50RXhwcmVzc2lvbigpOworCSAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWVTZW1pY29sb24o
KTsKKwkgICAgICAgICAgICAgICAgZXhwb3J0RGVjbGFyYXRpb24gPSB0aGlzLmZpbmFsaXplKG5v
ZGUsIG5ldyBOb2RlLkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihkZWNsYXJhdGlvbikpOworCSAg
ICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgaWYgKHRoaXMubWF0Y2goJyon
KSkgeworCSAgICAgICAgICAgIC8vIGV4cG9ydCAqIGZyb20gJ2Zvbyc7CisJICAgICAgICAgICAg
dGhpcy5uZXh0VG9rZW4oKTsKKwkgICAgICAgICAgICBpZiAoIXRoaXMubWF0Y2hDb250ZXh0dWFs
S2V5d29yZCgnZnJvbScpKSB7CisJICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0gdGhpcy5s
b29rYWhlYWQudmFsdWUgPyBtZXNzYWdlc18xLk1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiA6IG1l
c3NhZ2VzXzEuTWVzc2FnZXMuTWlzc2luZ0Zyb21DbGF1c2U7CisJICAgICAgICAgICAgICAgIHRo
aXMudGhyb3dFcnJvcihtZXNzYWdlLCB0aGlzLmxvb2thaGVhZC52YWx1ZSk7CisJICAgICAgICAg
ICAgfQorCSAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICAgICAgdmFyIHNy
YyA9IHRoaXMucGFyc2VNb2R1bGVTcGVjaWZpZXIoKTsKKwkgICAgICAgICAgICB0aGlzLmNvbnN1
bWVTZW1pY29sb24oKTsKKwkgICAgICAgICAgICBleHBvcnREZWNsYXJhdGlvbiA9IHRoaXMuZmlu
YWxpemUobm9kZSwgbmV3IE5vZGUuRXhwb3J0QWxsRGVjbGFyYXRpb24oc3JjKSk7CisJICAgICAg
ICB9CisJICAgICAgICBlbHNlIGlmICh0aGlzLmxvb2thaGVhZC50eXBlID09PSB0b2tlbl8xLlRv
a2VuLktleXdvcmQpIHsKKwkgICAgICAgICAgICAvLyBleHBvcnQgdmFyIGYgPSAxOworCSAgICAg
ICAgICAgIHZhciBkZWNsYXJhdGlvbiA9IHZvaWQgMDsKKwkgICAgICAgICAgICBzd2l0Y2ggKHRo
aXMubG9va2FoZWFkLnZhbHVlKSB7CisJICAgICAgICAgICAgICAgIGNhc2UgJ2xldCc6CisJICAg
ICAgICAgICAgICAgIGNhc2UgJ2NvbnN0JzoKKwkgICAgICAgICAgICAgICAgICAgIGRlY2xhcmF0
aW9uID0gdGhpcy5wYXJzZUxleGljYWxEZWNsYXJhdGlvbih7IGluRm9yOiBmYWxzZSB9KTsKKwkg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICBjYXNlICd2YXInOgor
CSAgICAgICAgICAgICAgICBjYXNlICdjbGFzcyc6CisJICAgICAgICAgICAgICAgIGNhc2UgJ2Z1
bmN0aW9uJzoKKwkgICAgICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uID0gdGhpcy5wYXJzZVN0
YXRlbWVudExpc3RJdGVtKCk7CisJICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVj
dGVkVG9rZW4odGhpcy5sb29rYWhlYWQpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBl
eHBvcnREZWNsYXJhdGlvbiA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IE5vZGUuRXhwb3J0TmFt
ZWREZWNsYXJhdGlvbihkZWNsYXJhdGlvbiwgW10sIG51bGwpKTsKKwkgICAgICAgIH0KKwkgICAg
ICAgIGVsc2UgaWYgKHRoaXMubWF0Y2hBc3luY0Z1bmN0aW9uKCkpIHsKKwkgICAgICAgICAgICB2
YXIgZGVjbGFyYXRpb24gPSB0aGlzLnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpOworCSAgICAg
ICAgICAgIGV4cG9ydERlY2xhcmF0aW9uID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgTm9kZS5F
eHBvcnROYW1lZERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uLCBbXSwgbnVsbCkpOworCSAgICAgICAg
fQorCSAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgdmFyIHNwZWNpZmllcnMgPSBbXTsKKwkg
ICAgICAgICAgICB2YXIgc291cmNlID0gbnVsbDsKKwkgICAgICAgICAgICB2YXIgaXNFeHBvcnRG
cm9tSWRlbnRpZmllciA9IGZhbHNlOworCSAgICAgICAgICAgIHRoaXMuZXhwZWN0KCd7Jyk7CisJ
ICAgICAgICAgICAgd2hpbGUgKCF0aGlzLm1hdGNoKCd9JykpIHsKKwkgICAgICAgICAgICAgICAg
aXNFeHBvcnRGcm9tSWRlbnRpZmllciA9IGlzRXhwb3J0RnJvbUlkZW50aWZpZXIgfHwgdGhpcy5t
YXRjaEtleXdvcmQoJ2RlZmF1bHQnKTsKKwkgICAgICAgICAgICAgICAgc3BlY2lmaWVycy5wdXNo
KHRoaXMucGFyc2VFeHBvcnRTcGVjaWZpZXIoKSk7CisJICAgICAgICAgICAgICAgIGlmICghdGhp
cy5tYXRjaCgnfScpKSB7CisJICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdCgnLCcpOwor
CSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIHRoaXMuZXhw
ZWN0KCd9Jyk7CisJICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgn
ZnJvbScpKSB7CisJICAgICAgICAgICAgICAgIC8vIGV4cG9ydCB7ZGVmYXVsdH0gZnJvbSAnZm9v
JzsKKwkgICAgICAgICAgICAgICAgLy8gZXhwb3J0IHtmb299IGZyb20gJ2Zvbyc7CisJICAgICAg
ICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgICAgICAgICAgICAgIHNvdXJjZSA9IHRo
aXMucGFyc2VNb2R1bGVTcGVjaWZpZXIoKTsKKwkgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1l
U2VtaWNvbG9uKCk7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYgKGlzRXhw
b3J0RnJvbUlkZW50aWZpZXIpIHsKKwkgICAgICAgICAgICAgICAgLy8gZXhwb3J0IHtkZWZhdWx0
fTsgLy8gbWlzc2luZyBmcm9tQ2xhdXNlCisJICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0g
dGhpcy5sb29rYWhlYWQudmFsdWUgPyBtZXNzYWdlc18xLk1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tl
biA6IG1lc3NhZ2VzXzEuTWVzc2FnZXMuTWlzc2luZ0Zyb21DbGF1c2U7CisJICAgICAgICAgICAg
ICAgIHRoaXMudGhyb3dFcnJvcihtZXNzYWdlLCB0aGlzLmxvb2thaGVhZC52YWx1ZSk7CisJICAg
ICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICAvLyBleHBv
cnQge2Zvb307CisJICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZVNlbWljb2xvbigpOworCSAg
ICAgICAgICAgIH0KKwkgICAgICAgICAgICBleHBvcnREZWNsYXJhdGlvbiA9IHRoaXMuZmluYWxp
emUobm9kZSwgbmV3IE5vZGUuRXhwb3J0TmFtZWREZWNsYXJhdGlvbihudWxsLCBzcGVjaWZpZXJz
LCBzb3VyY2UpKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiBleHBvcnREZWNsYXJhdGlv
bjsKKwkgICAgfTsKKwkgICAgcmV0dXJuIFBhcnNlcjsKKwl9KCkpOworCWV4cG9ydHMuUGFyc2Vy
ID0gUGFyc2VyOworCisKKy8qKiovIH0sCisvKiA0ICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUs
IGV4cG9ydHMpIHsKKworCS8vIEVuc3VyZSB0aGUgY29uZGl0aW9uIGlzIHRydWUsIG90aGVyd2lz
ZSB0aHJvdyBhbiBlcnJvci4KKwkvLyBUaGlzIGlzIG9ubHkgdG8gaGF2ZSBhIGJldHRlciBjb250
cmFjdCBzZW1hbnRpYywgaS5lLiBhbm90aGVyIHNhZmV0eSBuZXQKKwkvLyB0byBjYXRjaCBhIGxv
Z2ljIGVycm9yLiBUaGUgY29uZGl0aW9uIHNoYWxsIGJlIGZ1bGZpbGxlZCBpbiBub3JtYWwgY2Fz
ZS4KKwkvLyBEbyBOT1QgdXNlIHRoaXMgdG8gZW5mb3JjZSBhIGNlcnRhaW4gY29uZGl0aW9uIG9u
IGFueSB1c2VyIGlucHV0LgorCSJ1c2Ugc3RyaWN0IjsKKwlmdW5jdGlvbiBhc3NlcnQoY29uZGl0
aW9uLCBtZXNzYWdlKSB7CisJICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqLworCSAgICBpZiAo
IWNvbmRpdGlvbikgeworCSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBU1NFUlQ6ICcgKyBtZXNz
YWdlKTsKKwkgICAgfQorCX0KKwlleHBvcnRzLmFzc2VydCA9IGFzc2VydDsKKworCisvKioqLyB9
LAorLyogNSAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CisKKwkidXNlIHN0
cmljdCI7CisJLy8gRXJyb3IgbWVzc2FnZXMgc2hvdWxkIGJlIGlkZW50aWNhbCB0byBWOC4KKwll
eHBvcnRzLk1lc3NhZ2VzID0geworCSAgICBVbmV4cGVjdGVkVG9rZW46ICdVbmV4cGVjdGVkIHRv
a2VuICUwJywKKwkgICAgVW5leHBlY3RlZFRva2VuSWxsZWdhbDogJ1VuZXhwZWN0ZWQgdG9rZW4g
SUxMRUdBTCcsCisJICAgIFVuZXhwZWN0ZWROdW1iZXI6ICdVbmV4cGVjdGVkIG51bWJlcicsCisJ
ICAgIFVuZXhwZWN0ZWRTdHJpbmc6ICdVbmV4cGVjdGVkIHN0cmluZycsCisJICAgIFVuZXhwZWN0
ZWRJZGVudGlmaWVyOiAnVW5leHBlY3RlZCBpZGVudGlmaWVyJywKKwkgICAgVW5leHBlY3RlZFJl
c2VydmVkOiAnVW5leHBlY3RlZCByZXNlcnZlZCB3b3JkJywKKwkgICAgVW5leHBlY3RlZFRlbXBs
YXRlOiAnVW5leHBlY3RlZCBxdWFzaSAlMCcsCisJICAgIFVuZXhwZWN0ZWRFT1M6ICdVbmV4cGVj
dGVkIGVuZCBvZiBpbnB1dCcsCisJICAgIE5ld2xpbmVBZnRlclRocm93OiAnSWxsZWdhbCBuZXds
aW5lIGFmdGVyIHRocm93JywKKwkgICAgSW52YWxpZFJlZ0V4cDogJ0ludmFsaWQgcmVndWxhciBl
eHByZXNzaW9uJywKKwkgICAgVW50ZXJtaW5hdGVkUmVnRXhwOiAnSW52YWxpZCByZWd1bGFyIGV4
cHJlc3Npb246IG1pc3NpbmcgLycsCisJICAgIEludmFsaWRMSFNJbkFzc2lnbm1lbnQ6ICdJbnZh
bGlkIGxlZnQtaGFuZCBzaWRlIGluIGFzc2lnbm1lbnQnLAorCSAgICBJbnZhbGlkTEhTSW5Gb3JJ
bjogJ0ludmFsaWQgbGVmdC1oYW5kIHNpZGUgaW4gZm9yLWluJywKKwkgICAgSW52YWxpZExIU0lu
Rm9yTG9vcDogJ0ludmFsaWQgbGVmdC1oYW5kIHNpZGUgaW4gZm9yLWxvb3AnLAorCSAgICBNdWx0
aXBsZURlZmF1bHRzSW5Td2l0Y2g6ICdNb3JlIHRoYW4gb25lIGRlZmF1bHQgY2xhdXNlIGluIHN3
aXRjaCBzdGF0ZW1lbnQnLAorCSAgICBOb0NhdGNoT3JGaW5hbGx5OiAnTWlzc2luZyBjYXRjaCBv
ciBmaW5hbGx5IGFmdGVyIHRyeScsCisJICAgIFVua25vd25MYWJlbDogJ1VuZGVmaW5lZCBsYWJl
bCBcJyUwXCcnLAorCSAgICBSZWRlY2xhcmF0aW9uOiAnJTAgXCclMVwnIGhhcyBhbHJlYWR5IGJl
ZW4gZGVjbGFyZWQnLAorCSAgICBJbGxlZ2FsQ29udGludWU6ICdJbGxlZ2FsIGNvbnRpbnVlIHN0
YXRlbWVudCcsCisJICAgIElsbGVnYWxCcmVhazogJ0lsbGVnYWwgYnJlYWsgc3RhdGVtZW50JywK
KwkgICAgSWxsZWdhbFJldHVybjogJ0lsbGVnYWwgcmV0dXJuIHN0YXRlbWVudCcsCisJICAgIFN0
cmljdE1vZGVXaXRoOiAnU3RyaWN0IG1vZGUgY29kZSBtYXkgbm90IGluY2x1ZGUgYSB3aXRoIHN0
YXRlbWVudCcsCisJICAgIFN0cmljdENhdGNoVmFyaWFibGU6ICdDYXRjaCB2YXJpYWJsZSBtYXkg
bm90IGJlIGV2YWwgb3IgYXJndW1lbnRzIGluIHN0cmljdCBtb2RlJywKKwkgICAgU3RyaWN0VmFy
TmFtZTogJ1ZhcmlhYmxlIG5hbWUgbWF5IG5vdCBiZSBldmFsIG9yIGFyZ3VtZW50cyBpbiBzdHJp
Y3QgbW9kZScsCisJICAgIFN0cmljdFBhcmFtTmFtZTogJ1BhcmFtZXRlciBuYW1lIGV2YWwgb3Ig
YXJndW1lbnRzIGlzIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlJywKKwkgICAgU3RyaWN0UGFy
YW1EdXBlOiAnU3RyaWN0IG1vZGUgZnVuY3Rpb24gbWF5IG5vdCBoYXZlIGR1cGxpY2F0ZSBwYXJh
bWV0ZXIgbmFtZXMnLAorCSAgICBTdHJpY3RGdW5jdGlvbk5hbWU6ICdGdW5jdGlvbiBuYW1lIG1h
eSBub3QgYmUgZXZhbCBvciBhcmd1bWVudHMgaW4gc3RyaWN0IG1vZGUnLAorCSAgICBTdHJpY3RP
Y3RhbExpdGVyYWw6ICdPY3RhbCBsaXRlcmFscyBhcmUgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1v
ZGUuJywKKwkgICAgU3RyaWN0RGVsZXRlOiAnRGVsZXRlIG9mIGFuIHVucXVhbGlmaWVkIGlkZW50
aWZpZXIgaW4gc3RyaWN0IG1vZGUuJywKKwkgICAgU3RyaWN0TEhTQXNzaWdubWVudDogJ0Fzc2ln
bm1lbnQgdG8gZXZhbCBvciBhcmd1bWVudHMgaXMgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUn
LAorCSAgICBTdHJpY3RMSFNQb3N0Zml4OiAnUG9zdGZpeCBpbmNyZW1lbnQvZGVjcmVtZW50IG1h
eSBub3QgaGF2ZSBldmFsIG9yIGFyZ3VtZW50cyBvcGVyYW5kIGluIHN0cmljdCBtb2RlJywKKwkg
ICAgU3RyaWN0TEhTUHJlZml4OiAnUHJlZml4IGluY3JlbWVudC9kZWNyZW1lbnQgbWF5IG5vdCBo
YXZlIGV2YWwgb3IgYXJndW1lbnRzIG9wZXJhbmQgaW4gc3RyaWN0IG1vZGUnLAorCSAgICBTdHJp
Y3RSZXNlcnZlZFdvcmQ6ICdVc2Ugb2YgZnV0dXJlIHJlc2VydmVkIHdvcmQgaW4gc3RyaWN0IG1v
ZGUnLAorCSAgICBUZW1wbGF0ZU9jdGFsTGl0ZXJhbDogJ09jdGFsIGxpdGVyYWxzIGFyZSBub3Qg
YWxsb3dlZCBpbiB0ZW1wbGF0ZSBzdHJpbmdzLicsCisJICAgIFBhcmFtZXRlckFmdGVyUmVzdFBh
cmFtZXRlcjogJ1Jlc3QgcGFyYW1ldGVyIG11c3QgYmUgbGFzdCBmb3JtYWwgcGFyYW1ldGVyJywK
KwkgICAgRGVmYXVsdFJlc3RQYXJhbWV0ZXI6ICdVbmV4cGVjdGVkIHRva2VuID0nLAorCSAgICBP
YmplY3RQYXR0ZXJuQXNSZXN0UGFyYW1ldGVyOiAnVW5leHBlY3RlZCB0b2tlbiB7JywKKwkgICAg
RHVwbGljYXRlUHJvdG9Qcm9wZXJ0eTogJ0R1cGxpY2F0ZSBfX3Byb3RvX18gZmllbGRzIGFyZSBu
b3QgYWxsb3dlZCBpbiBvYmplY3QgbGl0ZXJhbHMnLAorCSAgICBDb25zdHJ1Y3RvclNwZWNpYWxN
ZXRob2Q6ICdDbGFzcyBjb25zdHJ1Y3RvciBtYXkgbm90IGJlIGFuIGFjY2Vzc29yJywKKwkgICAg
RHVwbGljYXRlQ29uc3RydWN0b3I6ICdBIGNsYXNzIG1heSBvbmx5IGhhdmUgb25lIGNvbnN0cnVj
dG9yJywKKwkgICAgU3RhdGljUHJvdG90eXBlOiAnQ2xhc3NlcyBtYXkgbm90IGhhdmUgc3RhdGlj
IHByb3BlcnR5IG5hbWVkIHByb3RvdHlwZScsCisJICAgIE1pc3NpbmdGcm9tQ2xhdXNlOiAnVW5l
eHBlY3RlZCB0b2tlbicsCisJICAgIE5vQXNBZnRlckltcG9ydE5hbWVzcGFjZTogJ1VuZXhwZWN0
ZWQgdG9rZW4nLAorCSAgICBJbnZhbGlkTW9kdWxlU3BlY2lmaWVyOiAnVW5leHBlY3RlZCB0b2tl
bicsCisJICAgIElsbGVnYWxJbXBvcnREZWNsYXJhdGlvbjogJ1VuZXhwZWN0ZWQgdG9rZW4nLAor
CSAgICBJbGxlZ2FsRXhwb3J0RGVjbGFyYXRpb246ICdVbmV4cGVjdGVkIHRva2VuJywKKwkgICAg
RHVwbGljYXRlQmluZGluZzogJ0R1cGxpY2F0ZSBiaW5kaW5nICUwJywKKwkgICAgRGVjbGFyYXRp
b25NaXNzaW5nSW5pdGlhbGl6ZXI6ICdNaXNzaW5nIGluaXRpYWxpemVyIGluICUwIGRlY2xhcmF0
aW9uJywKKwkgICAgTGV0SW5MZXhpY2FsQmluZGluZzogJ2xldCBpcyBkaXNhbGxvd2VkIGFzIGEg
bGV4aWNhbGx5IGJvdW5kIG5hbWUnLAorCSAgICBGb3JJbk9mTG9vcEluaXRpYWxpemVyOiAnJTAg
bG9vcCB2YXJpYWJsZSBkZWNsYXJhdGlvbiBtYXkgbm90IGhhdmUgYW4gaW5pdGlhbGl6ZXInCisJ
fTsKKworCisvKioqLyB9LAorLyogNiAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRz
KSB7CisKKwkidXNlIHN0cmljdCI7CisJdmFyIEVycm9ySGFuZGxlciA9IChmdW5jdGlvbiAoKSB7
CisJICAgIGZ1bmN0aW9uIEVycm9ySGFuZGxlcigpIHsKKwkgICAgICAgIHRoaXMuZXJyb3JzID0g
W107CisJICAgICAgICB0aGlzLnRvbGVyYW50ID0gZmFsc2U7CisJICAgIH0KKwkgICAgOworCSAg
ICBFcnJvckhhbmRsZXIucHJvdG90eXBlLnJlY29yZEVycm9yID0gZnVuY3Rpb24gKGVycm9yKSB7
CisJICAgICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKTsKKwkgICAgfTsKKwkgICAgOworCSAg
ICBFcnJvckhhbmRsZXIucHJvdG90eXBlLnRvbGVyYXRlID0gZnVuY3Rpb24gKGVycm9yKSB7CisJ
ICAgICAgICBpZiAodGhpcy50b2xlcmFudCkgeworCSAgICAgICAgICAgIHRoaXMucmVjb3JkRXJy
b3IoZXJyb3IpOworCSAgICAgICAgfQorCSAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgdGhy
b3cgZXJyb3I7CisJICAgICAgICB9CisJICAgIH07CisJICAgIDsKKwkgICAgRXJyb3JIYW5kbGVy
LnByb3RvdHlwZS5jb25zdHJ1Y3RFcnJvciA9IGZ1bmN0aW9uIChtc2csIGNvbHVtbikgeworCSAg
ICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKG1zZyk7CisJICAgICAgICB0cnkgeworCSAgICAg
ICAgICAgIHRocm93IGVycm9yOworCSAgICAgICAgfQorCSAgICAgICAgY2F0Y2ggKGJhc2UpIHsK
KwkgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqLworCSAgICAgICAgICAgIGlm
IChPYmplY3QuY3JlYXRlICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeworCSAgICAgICAgICAg
ICAgICBlcnJvciA9IE9iamVjdC5jcmVhdGUoYmFzZSk7CisJICAgICAgICAgICAgICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShlcnJvciwgJ2NvbHVtbicsIHsgdmFsdWU6IGNvbHVtbiB9KTsKKwkg
ICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICBmaW5hbGx5IHsKKwkgICAgICAgICAg
ICByZXR1cm4gZXJyb3I7CisJICAgICAgICB9CisJICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUg
bmV4dCAqLworCSAgICAgICAgcmV0dXJuIGVycm9yOworCSAgICB9OworCSAgICA7CisJICAgIEVy
cm9ySGFuZGxlci5wcm90b3R5cGUuY3JlYXRlRXJyb3IgPSBmdW5jdGlvbiAoaW5kZXgsIGxpbmUs
IGNvbCwgZGVzY3JpcHRpb24pIHsKKwkgICAgICAgIHZhciBtc2cgPSAnTGluZSAnICsgbGluZSAr
ICc6ICcgKyBkZXNjcmlwdGlvbjsKKwkgICAgICAgIHZhciBlcnJvciA9IHRoaXMuY29uc3RydWN0
RXJyb3IobXNnLCBjb2wpOworCSAgICAgICAgZXJyb3IuaW5kZXggPSBpbmRleDsKKwkgICAgICAg
IGVycm9yLmxpbmVOdW1iZXIgPSBsaW5lOworCSAgICAgICAgZXJyb3IuZGVzY3JpcHRpb24gPSBk
ZXNjcmlwdGlvbjsKKwkgICAgICAgIHJldHVybiBlcnJvcjsKKwkgICAgfTsKKwkgICAgOworCSAg
ICBFcnJvckhhbmRsZXIucHJvdG90eXBlLnRocm93RXJyb3IgPSBmdW5jdGlvbiAoaW5kZXgsIGxp
bmUsIGNvbCwgZGVzY3JpcHRpb24pIHsKKwkgICAgICAgIHRocm93IHRoaXMuY3JlYXRlRXJyb3Io
aW5kZXgsIGxpbmUsIGNvbCwgZGVzY3JpcHRpb24pOworCSAgICB9OworCSAgICA7CisJICAgIEVy
cm9ySGFuZGxlci5wcm90b3R5cGUudG9sZXJhdGVFcnJvciA9IGZ1bmN0aW9uIChpbmRleCwgbGlu
ZSwgY29sLCBkZXNjcmlwdGlvbikgeworCSAgICAgICAgdmFyIGVycm9yID0gdGhpcy5jcmVhdGVF
cnJvcihpbmRleCwgbGluZSwgY29sLCBkZXNjcmlwdGlvbik7CisJICAgICAgICBpZiAodGhpcy50
b2xlcmFudCkgeworCSAgICAgICAgICAgIHRoaXMucmVjb3JkRXJyb3IoZXJyb3IpOworCSAgICAg
ICAgfQorCSAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgdGhyb3cgZXJyb3I7CisJICAgICAg
ICB9CisJICAgIH07CisJICAgIDsKKwkgICAgcmV0dXJuIEVycm9ySGFuZGxlcjsKKwl9KCkpOwor
CWV4cG9ydHMuRXJyb3JIYW5kbGVyID0gRXJyb3JIYW5kbGVyOworCisKKy8qKiovIH0sCisvKiA3
ICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHsKKworCSJ1c2Ugc3RyaWN0IjsK
KwkoZnVuY3Rpb24gKFRva2VuKSB7CisJICAgIFRva2VuW1Rva2VuWyJCb29sZWFuTGl0ZXJhbCJd
ID0gMV0gPSAiQm9vbGVhbkxpdGVyYWwiOworCSAgICBUb2tlbltUb2tlblsiRU9GIl0gPSAyXSA9
ICJFT0YiOworCSAgICBUb2tlbltUb2tlblsiSWRlbnRpZmllciJdID0gM10gPSAiSWRlbnRpZmll
ciI7CisJICAgIFRva2VuW1Rva2VuWyJLZXl3b3JkIl0gPSA0XSA9ICJLZXl3b3JkIjsKKwkgICAg
VG9rZW5bVG9rZW5bIk51bGxMaXRlcmFsIl0gPSA1XSA9ICJOdWxsTGl0ZXJhbCI7CisJICAgIFRv
a2VuW1Rva2VuWyJOdW1lcmljTGl0ZXJhbCJdID0gNl0gPSAiTnVtZXJpY0xpdGVyYWwiOworCSAg
ICBUb2tlbltUb2tlblsiUHVuY3R1YXRvciJdID0gN10gPSAiUHVuY3R1YXRvciI7CisJICAgIFRv
a2VuW1Rva2VuWyJTdHJpbmdMaXRlcmFsIl0gPSA4XSA9ICJTdHJpbmdMaXRlcmFsIjsKKwkgICAg
VG9rZW5bVG9rZW5bIlJlZ3VsYXJFeHByZXNzaW9uIl0gPSA5XSA9ICJSZWd1bGFyRXhwcmVzc2lv
biI7CisJICAgIFRva2VuW1Rva2VuWyJUZW1wbGF0ZSJdID0gMTBdID0gIlRlbXBsYXRlIjsKKwl9
KShleHBvcnRzLlRva2VuIHx8IChleHBvcnRzLlRva2VuID0ge30pKTsKKwl2YXIgVG9rZW4gPSBl
eHBvcnRzLlRva2VuOworCTsKKwlleHBvcnRzLlRva2VuTmFtZSA9IHt9OworCWV4cG9ydHMuVG9r
ZW5OYW1lW1Rva2VuLkJvb2xlYW5MaXRlcmFsXSA9ICdCb29sZWFuJzsKKwlleHBvcnRzLlRva2Vu
TmFtZVtUb2tlbi5FT0ZdID0gJzxlbmQ+JzsKKwlleHBvcnRzLlRva2VuTmFtZVtUb2tlbi5JZGVu
dGlmaWVyXSA9ICdJZGVudGlmaWVyJzsKKwlleHBvcnRzLlRva2VuTmFtZVtUb2tlbi5LZXl3b3Jk
XSA9ICdLZXl3b3JkJzsKKwlleHBvcnRzLlRva2VuTmFtZVtUb2tlbi5OdWxsTGl0ZXJhbF0gPSAn
TnVsbCc7CisJZXhwb3J0cy5Ub2tlbk5hbWVbVG9rZW4uTnVtZXJpY0xpdGVyYWxdID0gJ051bWVy
aWMnOworCWV4cG9ydHMuVG9rZW5OYW1lW1Rva2VuLlB1bmN0dWF0b3JdID0gJ1B1bmN0dWF0b3In
OworCWV4cG9ydHMuVG9rZW5OYW1lW1Rva2VuLlN0cmluZ0xpdGVyYWxdID0gJ1N0cmluZyc7CisJ
ZXhwb3J0cy5Ub2tlbk5hbWVbVG9rZW4uUmVndWxhckV4cHJlc3Npb25dID0gJ1JlZ3VsYXJFeHBy
ZXNzaW9uJzsKKwlleHBvcnRzLlRva2VuTmFtZVtUb2tlbi5UZW1wbGF0ZV0gPSAnVGVtcGxhdGUn
OworCisKKy8qKiovIH0sCisvKiA4ICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMs
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworCSJ1c2Ugc3RyaWN0IjsKKwl2YXIgYXNzZXJ0XzEg
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpOworCXZhciBtZXNzYWdlc18xID0gX193ZWJwYWNrX3Jl
cXVpcmVfXyg1KTsKKwl2YXIgY2hhcmFjdGVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpOwor
CXZhciB0b2tlbl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTsKKwlmdW5jdGlvbiBoZXhWYWx1
ZShjaCkgeworCSAgICByZXR1cm4gJzAxMjM0NTY3ODlhYmNkZWYnLmluZGV4T2YoY2gudG9Mb3dl
ckNhc2UoKSk7CisJfQorCWZ1bmN0aW9uIG9jdGFsVmFsdWUoY2gpIHsKKwkgICAgcmV0dXJuICcw
MTIzNDU2NycuaW5kZXhPZihjaCk7CisJfQorCXZhciBTY2FubmVyID0gKGZ1bmN0aW9uICgpIHsK
KwkgICAgZnVuY3Rpb24gU2Nhbm5lcihjb2RlLCBoYW5kbGVyKSB7CisJICAgICAgICB0aGlzLnNv
dXJjZSA9IGNvZGU7CisJICAgICAgICB0aGlzLmVycm9ySGFuZGxlciA9IGhhbmRsZXI7CisJICAg
ICAgICB0aGlzLnRyYWNrQ29tbWVudCA9IGZhbHNlOworCSAgICAgICAgdGhpcy5sZW5ndGggPSBj
b2RlLmxlbmd0aDsKKwkgICAgICAgIHRoaXMuaW5kZXggPSAwOworCSAgICAgICAgdGhpcy5saW5l
TnVtYmVyID0gKGNvZGUubGVuZ3RoID4gMCkgPyAxIDogMDsKKwkgICAgICAgIHRoaXMubGluZVN0
YXJ0ID0gMDsKKwkgICAgICAgIHRoaXMuY3VybHlTdGFjayA9IFtdOworCSAgICB9CisJICAgIDsK
KwkgICAgU2Nhbm5lci5wcm90b3R5cGUuZW9mID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgcmV0
dXJuIHRoaXMuaW5kZXggPj0gdGhpcy5sZW5ndGg7CisJICAgIH07CisJICAgIDsKKwkgICAgU2Nh
bm5lci5wcm90b3R5cGUudGhyb3dVbmV4cGVjdGVkVG9rZW4gPSBmdW5jdGlvbiAobWVzc2FnZSkg
eworCSAgICAgICAgaWYgKG1lc3NhZ2UgPT09IHZvaWQgMCkgeyBtZXNzYWdlID0gbWVzc2FnZXNf
MS5NZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW5JbGxlZ2FsOyB9CisJICAgICAgICB0aGlzLmVycm9y
SGFuZGxlci50aHJvd0Vycm9yKHRoaXMuaW5kZXgsIHRoaXMubGluZU51bWJlciwgdGhpcy5pbmRl
eCAtIHRoaXMubGluZVN0YXJ0ICsgMSwgbWVzc2FnZSk7CisJICAgIH07CisJICAgIDsKKwkgICAg
U2Nhbm5lci5wcm90b3R5cGUudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4gPSBmdW5jdGlvbiAoKSB7
CisJICAgICAgICB0aGlzLmVycm9ySGFuZGxlci50b2xlcmF0ZUVycm9yKHRoaXMuaW5kZXgsIHRo
aXMubGluZU51bWJlciwgdGhpcy5pbmRleCAtIHRoaXMubGluZVN0YXJ0ICsgMSwgbWVzc2FnZXNf
MS5NZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW5JbGxlZ2FsKTsKKwkgICAgfTsKKwkgICAgOworCSAg
ICAvLyBFQ01BLTI2MiAxMS40IENvbW1lbnRzCisJICAgIFNjYW5uZXIucHJvdG90eXBlLnNraXBT
aW5nbGVMaW5lQ29tbWVudCA9IGZ1bmN0aW9uIChvZmZzZXQpIHsKKwkgICAgICAgIHZhciBjb21t
ZW50cyA9IFtdOworCSAgICAgICAgdmFyIHN0YXJ0LCBsb2M7CisJICAgICAgICBpZiAodGhpcy50
cmFja0NvbW1lbnQpIHsKKwkgICAgICAgICAgICBjb21tZW50cyA9IFtdOworCSAgICAgICAgICAg
IHN0YXJ0ID0gdGhpcy5pbmRleCAtIG9mZnNldDsKKwkgICAgICAgICAgICBsb2MgPSB7CisJICAg
ICAgICAgICAgICAgIHN0YXJ0OiB7CisJICAgICAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLmxp
bmVOdW1iZXIsCisJICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuaW5kZXggLSB0aGlz
LmxpbmVTdGFydCAtIG9mZnNldAorCSAgICAgICAgICAgICAgICB9LAorCSAgICAgICAgICAgICAg
ICBlbmQ6IHt9CisJICAgICAgICAgICAgfTsKKwkgICAgICAgIH0KKwkgICAgICAgIHdoaWxlICgh
dGhpcy5lb2YoKSkgeworCSAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuc291cmNlLmNoYXJDb2Rl
QXQodGhpcy5pbmRleCk7CisJICAgICAgICAgICAgKyt0aGlzLmluZGV4OworCSAgICAgICAgICAg
IGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNMaW5lVGVybWluYXRvcihjaCkpIHsKKwkgICAg
ICAgICAgICAgICAgaWYgKHRoaXMudHJhY2tDb21tZW50KSB7CisJICAgICAgICAgICAgICAgICAg
ICBsb2MuZW5kID0geworCSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IHRoaXMubGluZU51
bWJlciwKKwkgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuaW5kZXggLSB0aGlz
LmxpbmVTdGFydCAtIDEKKwkgICAgICAgICAgICAgICAgICAgIH07CisJICAgICAgICAgICAgICAg
ICAgICB2YXIgZW50cnkgPSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlMaW5lOiBm
YWxzZSwKKwkgICAgICAgICAgICAgICAgICAgICAgICBzbGljZTogW3N0YXJ0ICsgb2Zmc2V0LCB0
aGlzLmluZGV4IC0gMV0sCisJICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwg
dGhpcy5pbmRleCAtIDFdLAorCSAgICAgICAgICAgICAgICAgICAgICAgIGxvYzogbG9jCisJICAg
ICAgICAgICAgICAgICAgICB9OworCSAgICAgICAgICAgICAgICAgICAgY29tbWVudHMucHVzaChl
bnRyeSk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgaWYgKGNoID09PSAx
MyAmJiB0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpID09PSAxMCkgeworCSAgICAg
ICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4OworCSAgICAgICAgICAgICAgICB9CisJICAgICAg
ICAgICAgICAgICsrdGhpcy5saW5lTnVtYmVyOworCSAgICAgICAgICAgICAgICB0aGlzLmxpbmVT
dGFydCA9IHRoaXMuaW5kZXg7CisJICAgICAgICAgICAgICAgIHJldHVybiBjb21tZW50czsKKwkg
ICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICBpZiAodGhpcy50cmFja0NvbW1lbnQp
IHsKKwkgICAgICAgICAgICBsb2MuZW5kID0geworCSAgICAgICAgICAgICAgICBsaW5lOiB0aGlz
LmxpbmVOdW1iZXIsCisJICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5pbmRleCAtIHRoaXMu
bGluZVN0YXJ0CisJICAgICAgICAgICAgfTsKKwkgICAgICAgICAgICB2YXIgZW50cnkgPSB7CisJ
ICAgICAgICAgICAgICAgIG11bHRpTGluZTogZmFsc2UsCisJICAgICAgICAgICAgICAgIHNsaWNl
OiBbc3RhcnQgKyBvZmZzZXQsIHRoaXMuaW5kZXhdLAorCSAgICAgICAgICAgICAgICByYW5nZTog
W3N0YXJ0LCB0aGlzLmluZGV4XSwKKwkgICAgICAgICAgICAgICAgbG9jOiBsb2MKKwkgICAgICAg
ICAgICB9OworCSAgICAgICAgICAgIGNvbW1lbnRzLnB1c2goZW50cnkpOworCSAgICAgICAgfQor
CSAgICAgICAgcmV0dXJuIGNvbW1lbnRzOworCSAgICB9OworCSAgICA7CisJICAgIFNjYW5uZXIu
cHJvdG90eXBlLnNraXBNdWx0aUxpbmVDb21tZW50ID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAg
dmFyIGNvbW1lbnRzID0gW107CisJICAgICAgICB2YXIgc3RhcnQsIGxvYzsKKwkgICAgICAgIGlm
ICh0aGlzLnRyYWNrQ29tbWVudCkgeworCSAgICAgICAgICAgIGNvbW1lbnRzID0gW107CisJICAg
ICAgICAgICAgc3RhcnQgPSB0aGlzLmluZGV4IC0gMjsKKwkgICAgICAgICAgICBsb2MgPSB7CisJ
ICAgICAgICAgICAgICAgIHN0YXJ0OiB7CisJICAgICAgICAgICAgICAgICAgICBsaW5lOiB0aGlz
LmxpbmVOdW1iZXIsCisJICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuaW5kZXggLSB0
aGlzLmxpbmVTdGFydCAtIDIKKwkgICAgICAgICAgICAgICAgfSwKKwkgICAgICAgICAgICAgICAg
ZW5kOiB7fQorCSAgICAgICAgICAgIH07CisJICAgICAgICB9CisJICAgICAgICB3aGlsZSAoIXRo
aXMuZW9mKCkpIHsKKwkgICAgICAgICAgICB2YXIgY2ggPSB0aGlzLnNvdXJjZS5jaGFyQ29kZUF0
KHRoaXMuaW5kZXgpOworCSAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNM
aW5lVGVybWluYXRvcihjaCkpIHsKKwkgICAgICAgICAgICAgICAgaWYgKGNoID09PSAweDBEICYm
IHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCArIDEpID09PSAweDBBKSB7CisJICAg
ICAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7CisJICAgICAgICAgICAgICAgIH0KKwkgICAg
ICAgICAgICAgICAgKyt0aGlzLmxpbmVOdW1iZXI7CisJICAgICAgICAgICAgICAgICsrdGhpcy5p
bmRleDsKKwkgICAgICAgICAgICAgICAgdGhpcy5saW5lU3RhcnQgPSB0aGlzLmluZGV4OworCSAg
ICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIGlmIChjaCA9PT0gMHgyQSkgeworCSAgICAg
ICAgICAgICAgICAvLyBCbG9jayBjb21tZW50IGVuZHMgd2l0aCAnKi8nLgorCSAgICAgICAgICAg
ICAgICBpZiAodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4ICsgMSkgPT09IDB4MkYp
IHsKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggKz0gMjsKKwkgICAgICAgICAgICAg
ICAgICAgIGlmICh0aGlzLnRyYWNrQ29tbWVudCkgeworCSAgICAgICAgICAgICAgICAgICAgICAg
IGxvYy5lbmQgPSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IHRoaXMubGlu
ZU51bWJlciwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLmluZGV4
IC0gdGhpcy5saW5lU3RhcnQKKwkgICAgICAgICAgICAgICAgICAgICAgICB9OworCSAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHsKKwkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbXVsdGlMaW5lOiB0cnVlLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGljZTog
W3N0YXJ0ICsgMiwgdGhpcy5pbmRleCAtIDJdLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByYW5nZTogW3N0YXJ0LCB0aGlzLmluZGV4XSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbG9jOiBsb2MKKwkgICAgICAgICAgICAgICAgICAgICAgICB9OworCSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbW1lbnRzLnB1c2goZW50cnkpOworCSAgICAgICAgICAgICAgICAgICAgfQor
CSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbW1lbnRzOworCSAgICAgICAgICAgICAgICB9
CisJICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKKwkgICAgICAgICAgICB9CisJICAgICAg
ICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKKwkgICAgICAgICAg
ICB9CisJICAgICAgICB9CisJICAgICAgICAvLyBSYW4gb2ZmIHRoZSBlbmQgb2YgdGhlIGZpbGUg
LSB0aGUgd2hvbGUgdGhpbmcgaXMgYSBjb21tZW50CisJICAgICAgICBpZiAodGhpcy50cmFja0Nv
bW1lbnQpIHsKKwkgICAgICAgICAgICBsb2MuZW5kID0geworCSAgICAgICAgICAgICAgICBsaW5l
OiB0aGlzLmxpbmVOdW1iZXIsCisJICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5pbmRleCAt
IHRoaXMubGluZVN0YXJ0CisJICAgICAgICAgICAgfTsKKwkgICAgICAgICAgICB2YXIgZW50cnkg
PSB7CisJICAgICAgICAgICAgICAgIG11bHRpTGluZTogdHJ1ZSwKKwkgICAgICAgICAgICAgICAg
c2xpY2U6IFtzdGFydCArIDIsIHRoaXMuaW5kZXhdLAorCSAgICAgICAgICAgICAgICByYW5nZTog
W3N0YXJ0LCB0aGlzLmluZGV4XSwKKwkgICAgICAgICAgICAgICAgbG9jOiBsb2MKKwkgICAgICAg
ICAgICB9OworCSAgICAgICAgICAgIGNvbW1lbnRzLnB1c2goZW50cnkpOworCSAgICAgICAgfQor
CSAgICAgICAgdGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbigpOworCSAgICAgICAgcmV0dXJu
IGNvbW1lbnRzOworCSAgICB9OworCSAgICA7CisJICAgIFNjYW5uZXIucHJvdG90eXBlLnNjYW5D
b21tZW50cyA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBjb21tZW50czsKKwkgICAgICAg
IGlmICh0aGlzLnRyYWNrQ29tbWVudCkgeworCSAgICAgICAgICAgIGNvbW1lbnRzID0gW107CisJ
ICAgICAgICB9CisJICAgICAgICB2YXIgc3RhcnQgPSAodGhpcy5pbmRleCA9PT0gMCk7CisJICAg
ICAgICB3aGlsZSAoIXRoaXMuZW9mKCkpIHsKKwkgICAgICAgICAgICB2YXIgY2ggPSB0aGlzLnNv
dXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpOworCSAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJf
MS5DaGFyYWN0ZXIuaXNXaGl0ZVNwYWNlKGNoKSkgeworCSAgICAgICAgICAgICAgICArK3RoaXMu
aW5kZXg7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYgKGNoYXJhY3Rlcl8x
LkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5hdG9yKGNoKSkgeworCSAgICAgICAgICAgICAgICArK3Ro
aXMuaW5kZXg7CisJICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgwRCAmJiB0aGlzLnNvdXJj
ZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpID09PSAweDBBKSB7CisJICAgICAgICAgICAgICAgICAg
ICArK3RoaXMuaW5kZXg7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgKyt0
aGlzLmxpbmVOdW1iZXI7CisJICAgICAgICAgICAgICAgIHRoaXMubGluZVN0YXJ0ID0gdGhpcy5p
bmRleDsKKwkgICAgICAgICAgICAgICAgc3RhcnQgPSB0cnVlOworCSAgICAgICAgICAgIH0KKwkg
ICAgICAgICAgICBlbHNlIGlmIChjaCA9PT0gMHgyRikgeworCSAgICAgICAgICAgICAgICBjaCA9
IHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCArIDEpOworCSAgICAgICAgICAgICAg
ICBpZiAoY2ggPT09IDB4MkYpIHsKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggKz0g
MjsKKwkgICAgICAgICAgICAgICAgICAgIHZhciBjb21tZW50ID0gdGhpcy5za2lwU2luZ2xlTGlu
ZUNvbW1lbnQoMik7CisJICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50cmFja0NvbW1lbnQp
IHsKKwkgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50cyA9IGNvbW1lbnRzLmNvbmNhdChj
b21tZW50KTsKKwkgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgIHN0
YXJ0ID0gdHJ1ZTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBlbHNlIGlm
IChjaCA9PT0gMHgyQSkgeworCSAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleCArPSAyOwor
CSAgICAgICAgICAgICAgICAgICAgdmFyIGNvbW1lbnQgPSB0aGlzLnNraXBNdWx0aUxpbmVDb21t
ZW50KCk7CisJICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50cmFja0NvbW1lbnQpIHsKKwkg
ICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50cyA9IGNvbW1lbnRzLmNvbmNhdChjb21tZW50
KTsKKwkgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAg
ICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAg
ICAgICB9CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYgKHN0YXJ0ICYmIGNo
ID09PSAweDJEKSB7CisJICAgICAgICAgICAgICAgIC8vIFUrMDAzRSBpcyAnPicKKwkgICAgICAg
ICAgICAgICAgaWYgKCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXggKyAxKSA9PT0g
MHgyRCkgJiYgKHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCArIDIpID09PSAweDNF
KSkgeworCSAgICAgICAgICAgICAgICAgICAgLy8gJy0tPicgaXMgYSBzaW5nbGUtbGluZSBjb21t
ZW50CisJICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4ICs9IDM7CisJICAgICAgICAgICAg
ICAgICAgICB2YXIgY29tbWVudCA9IHRoaXMuc2tpcFNpbmdsZUxpbmVDb21tZW50KDMpOworCSAg
ICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudHJhY2tDb21tZW50KSB7CisJICAgICAgICAgICAg
ICAgICAgICAgICAgY29tbWVudHMgPSBjb21tZW50cy5jb25jYXQoY29tbWVudCk7CisJICAgICAg
ICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgZWxz
ZSB7CisJICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgfQorCSAg
ICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIGlmIChjaCA9PT0gMHgzQykgeworCSAgICAg
ICAgICAgICAgICBpZiAodGhpcy5zb3VyY2Uuc2xpY2UodGhpcy5pbmRleCArIDEsIHRoaXMuaW5k
ZXggKyA0KSA9PT0gJyEtLScpIHsKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggKz0g
NDsgLy8gYDwhLS1gCisJICAgICAgICAgICAgICAgICAgICB2YXIgY29tbWVudCA9IHRoaXMuc2tp
cFNpbmdsZUxpbmVDb21tZW50KDQpOworCSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudHJh
Y2tDb21tZW50KSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudHMgPSBjb21tZW50
cy5jb25jYXQoY29tbWVudCk7CisJICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAg
ICAgIH0KKwkgICAgICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgICAgICBicmVh
azsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNl
IHsKKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQor
CSAgICAgICAgcmV0dXJuIGNvbW1lbnRzOworCSAgICB9OworCSAgICA7CisJICAgIC8vIEVDTUEt
MjYyIDExLjYuMi4yIEZ1dHVyZSBSZXNlcnZlZCBXb3JkcworCSAgICBTY2FubmVyLnByb3RvdHlw
ZS5pc0Z1dHVyZVJlc2VydmVkV29yZCA9IGZ1bmN0aW9uIChpZCkgeworCSAgICAgICAgc3dpdGNo
IChpZCkgeworCSAgICAgICAgICAgIGNhc2UgJ2VudW0nOgorCSAgICAgICAgICAgIGNhc2UgJ2V4
cG9ydCc6CisJICAgICAgICAgICAgY2FzZSAnaW1wb3J0JzoKKwkgICAgICAgICAgICBjYXNlICdz
dXBlcic6CisJICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCSAgICAgICAgICAgIGRlZmF1
bHQ6CisJICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwkgICAgICAgIH0KKwkgICAgfTsK
KwkgICAgOworCSAgICBTY2FubmVyLnByb3RvdHlwZS5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQg
PSBmdW5jdGlvbiAoaWQpIHsKKwkgICAgICAgIHN3aXRjaCAoaWQpIHsKKwkgICAgICAgICAgICBj
YXNlICdpbXBsZW1lbnRzJzoKKwkgICAgICAgICAgICBjYXNlICdpbnRlcmZhY2UnOgorCSAgICAg
ICAgICAgIGNhc2UgJ3BhY2thZ2UnOgorCSAgICAgICAgICAgIGNhc2UgJ3ByaXZhdGUnOgorCSAg
ICAgICAgICAgIGNhc2UgJ3Byb3RlY3RlZCc6CisJICAgICAgICAgICAgY2FzZSAncHVibGljJzoK
KwkgICAgICAgICAgICBjYXNlICdzdGF0aWMnOgorCSAgICAgICAgICAgIGNhc2UgJ3lpZWxkJzoK
KwkgICAgICAgICAgICBjYXNlICdsZXQnOgorCSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KwkgICAgICAgICAgICBkZWZhdWx0OgorCSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisJ
ICAgICAgICB9CisJICAgIH07CisJICAgIDsKKwkgICAgU2Nhbm5lci5wcm90b3R5cGUuaXNSZXN0
cmljdGVkV29yZCA9IGZ1bmN0aW9uIChpZCkgeworCSAgICAgICAgcmV0dXJuIGlkID09PSAnZXZh
bCcgfHwgaWQgPT09ICdhcmd1bWVudHMnOworCSAgICB9OworCSAgICA7CisJICAgIC8vIEVDTUEt
MjYyIDExLjYuMi4xIEtleXdvcmRzCisJICAgIFNjYW5uZXIucHJvdG90eXBlLmlzS2V5d29yZCA9
IGZ1bmN0aW9uIChpZCkgeworCSAgICAgICAgc3dpdGNoIChpZC5sZW5ndGgpIHsKKwkgICAgICAg
ICAgICBjYXNlIDI6CisJICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICdpZicpIHx8IChp
ZCA9PT0gJ2luJykgfHwgKGlkID09PSAnZG8nKTsKKwkgICAgICAgICAgICBjYXNlIDM6CisJICAg
ICAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICd2YXInKSB8fCAoaWQgPT09ICdmb3InKSB8fCAo
aWQgPT09ICduZXcnKSB8fAorCSAgICAgICAgICAgICAgICAgICAgKGlkID09PSAndHJ5JykgfHwg
KGlkID09PSAnbGV0Jyk7CisJICAgICAgICAgICAgY2FzZSA0OgorCSAgICAgICAgICAgICAgICBy
ZXR1cm4gKGlkID09PSAndGhpcycpIHx8IChpZCA9PT0gJ2Vsc2UnKSB8fCAoaWQgPT09ICdjYXNl
JykgfHwKKwkgICAgICAgICAgICAgICAgICAgIChpZCA9PT0gJ3ZvaWQnKSB8fCAoaWQgPT09ICd3
aXRoJykgfHwgKGlkID09PSAnZW51bScpOworCSAgICAgICAgICAgIGNhc2UgNToKKwkgICAgICAg
ICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ3doaWxlJykgfHwgKGlkID09PSAnYnJlYWsnKSB8fCAo
aWQgPT09ICdjYXRjaCcpIHx8CisJICAgICAgICAgICAgICAgICAgICAoaWQgPT09ICd0aHJvdycp
IHx8IChpZCA9PT0gJ2NvbnN0JykgfHwgKGlkID09PSAneWllbGQnKSB8fAorCSAgICAgICAgICAg
ICAgICAgICAgKGlkID09PSAnY2xhc3MnKSB8fCAoaWQgPT09ICdzdXBlcicpOworCSAgICAgICAg
ICAgIGNhc2UgNjoKKwkgICAgICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ3JldHVybicpIHx8
IChpZCA9PT0gJ3R5cGVvZicpIHx8IChpZCA9PT0gJ2RlbGV0ZScpIHx8CisJICAgICAgICAgICAg
ICAgICAgICAoaWQgPT09ICdzd2l0Y2gnKSB8fCAoaWQgPT09ICdleHBvcnQnKSB8fCAoaWQgPT09
ICdpbXBvcnQnKTsKKwkgICAgICAgICAgICBjYXNlIDc6CisJICAgICAgICAgICAgICAgIHJldHVy
biAoaWQgPT09ICdkZWZhdWx0JykgfHwgKGlkID09PSAnZmluYWxseScpIHx8IChpZCA9PT0gJ2V4
dGVuZHMnKTsKKwkgICAgICAgICAgICBjYXNlIDg6CisJICAgICAgICAgICAgICAgIHJldHVybiAo
aWQgPT09ICdmdW5jdGlvbicpIHx8IChpZCA9PT0gJ2NvbnRpbnVlJykgfHwgKGlkID09PSAnZGVi
dWdnZXInKTsKKwkgICAgICAgICAgICBjYXNlIDEwOgorCSAgICAgICAgICAgICAgICByZXR1cm4g
KGlkID09PSAnaW5zdGFuY2VvZicpOworCSAgICAgICAgICAgIGRlZmF1bHQ6CisJICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKwkgICAgICAgIH0KKwkgICAgfTsKKwkgICAgOworCSAgICBT
Y2FubmVyLnByb3RvdHlwZS5jb2RlUG9pbnRBdCA9IGZ1bmN0aW9uIChpKSB7CisJICAgICAgICB2
YXIgY3AgPSB0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KGkpOworCSAgICAgICAgaWYgKGNwID49IDB4
RDgwMCAmJiBjcCA8PSAweERCRkYpIHsKKwkgICAgICAgICAgICB2YXIgc2Vjb25kID0gdGhpcy5z
b3VyY2UuY2hhckNvZGVBdChpICsgMSk7CisJICAgICAgICAgICAgaWYgKHNlY29uZCA+PSAweERD
MDAgJiYgc2Vjb25kIDw9IDB4REZGRikgeworCSAgICAgICAgICAgICAgICB2YXIgZmlyc3QgPSBj
cDsKKwkgICAgICAgICAgICAgICAgY3AgPSAoZmlyc3QgLSAweEQ4MDApICogMHg0MDAgKyBzZWNv
bmQgLSAweERDMDAgKyAweDEwMDAwOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAg
ICAgIHJldHVybiBjcDsKKwkgICAgfTsKKwkgICAgOworCSAgICBTY2FubmVyLnByb3RvdHlwZS5z
Y2FuSGV4RXNjYXBlID0gZnVuY3Rpb24gKHByZWZpeCkgeworCSAgICAgICAgdmFyIGxlbiA9IChw
cmVmaXggPT09ICd1JykgPyA0IDogMjsKKwkgICAgICAgIHZhciBjb2RlID0gMDsKKwkgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKwkgICAgICAgICAgICBpZiAoIXRoaXMu
ZW9mKCkgJiYgY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzSGV4RGlnaXQodGhpcy5zb3VyY2UuY2hh
ckNvZGVBdCh0aGlzLmluZGV4KSkpIHsKKwkgICAgICAgICAgICAgICAgY29kZSA9IGNvZGUgKiAx
NiArIGhleFZhbHVlKHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK10pOworCSAgICAgICAgICAgIH0K
KwkgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgcmV0dXJuICcnOworCSAgICAg
ICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2Rl
KGNvZGUpOworCSAgICB9OworCSAgICA7CisJICAgIFNjYW5uZXIucHJvdG90eXBlLnNjYW5Vbmlj
b2RlQ29kZVBvaW50RXNjYXBlID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIGNoID0gdGhp
cy5zb3VyY2VbdGhpcy5pbmRleF07CisJICAgICAgICB2YXIgY29kZSA9IDA7CisJICAgICAgICAv
LyBBdCBsZWFzdCwgb25lIGhleCBkaWdpdCBpcyByZXF1aXJlZC4KKwkgICAgICAgIGlmIChjaCA9
PT0gJ30nKSB7CisJICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOworCSAg
ICAgICAgfQorCSAgICAgICAgd2hpbGUgKCF0aGlzLmVvZigpKSB7CisJICAgICAgICAgICAgY2gg
PSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdOworCSAgICAgICAgICAgIGlmICghY2hhcmFjdGVy
XzEuQ2hhcmFjdGVyLmlzSGV4RGlnaXQoY2guY2hhckNvZGVBdCgwKSkpIHsKKwkgICAgICAgICAg
ICAgICAgYnJlYWs7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGNvZGUgPSBjb2RlICog
MTYgKyBoZXhWYWx1ZShjaCk7CisJICAgICAgICB9CisJICAgICAgICBpZiAoY29kZSA+IDB4MTBG
RkZGIHx8IGNoICE9PSAnfScpIHsKKwkgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRv
a2VuKCk7CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gY2hhcmFjdGVyXzEuQ2hhcmFjdGVy
LmZyb21Db2RlUG9pbnQoY29kZSk7CisJICAgIH07CisJICAgIDsKKwkgICAgU2Nhbm5lci5wcm90
b3R5cGUuZ2V0SWRlbnRpZmllciA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBzdGFydCA9
IHRoaXMuaW5kZXgrKzsKKwkgICAgICAgIHdoaWxlICghdGhpcy5lb2YoKSkgeworCSAgICAgICAg
ICAgIHZhciBjaCA9IHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCk7CisJICAgICAg
ICAgICAgaWYgKGNoID09PSAweDVDKSB7CisJICAgICAgICAgICAgICAgIC8vIEJsYWNrc2xhc2gg
KFUrMDA1QykgbWFya3MgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2UuCisJICAgICAgICAgICAgICAg
IHRoaXMuaW5kZXggPSBzdGFydDsKKwkgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29t
cGxleElkZW50aWZpZXIoKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSBpZiAo
Y2ggPj0gMHhEODAwICYmIGNoIDwgMHhERkZGKSB7CisJICAgICAgICAgICAgICAgIC8vIE5lZWQg
dG8gaGFuZGxlIHN1cnJvZ2F0ZSBwYWlycy4KKwkgICAgICAgICAgICAgICAgdGhpcy5pbmRleCA9
IHN0YXJ0OworCSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21wbGV4SWRlbnRpZmll
cigpOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFj
dGVyLmlzSWRlbnRpZmllclBhcnQoY2gpKSB7CisJICAgICAgICAgICAgICAgICsrdGhpcy5pbmRl
eDsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAg
IGJyZWFrOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiB0aGlz
LnNvdXJjZS5zbGljZShzdGFydCwgdGhpcy5pbmRleCk7CisJICAgIH07CisJICAgIDsKKwkgICAg
U2Nhbm5lci5wcm90b3R5cGUuZ2V0Q29tcGxleElkZW50aWZpZXIgPSBmdW5jdGlvbiAoKSB7CisJ
ICAgICAgICB2YXIgY3AgPSB0aGlzLmNvZGVQb2ludEF0KHRoaXMuaW5kZXgpOworCSAgICAgICAg
dmFyIGlkID0gY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmZyb21Db2RlUG9pbnQoY3ApOworCSAgICAg
ICAgdGhpcy5pbmRleCArPSBpZC5sZW5ndGg7CisJICAgICAgICAvLyAnXHUnIChVKzAwNUMsIFUr
MDA3NSkgZGVub3RlcyBhbiBlc2NhcGVkIGNoYXJhY3Rlci4KKwkgICAgICAgIHZhciBjaDsKKwkg
ICAgICAgIGlmIChjcCA9PT0gMHg1QykgeworCSAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZS5j
aGFyQ29kZUF0KHRoaXMuaW5kZXgpICE9PSAweDc1KSB7CisJICAgICAgICAgICAgICAgIHRoaXMu
dGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgKyt0
aGlzLmluZGV4OworCSAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZVt0aGlzLmluZGV4XSA9PT0g
J3snKSB7CisJICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKKwkgICAgICAgICAgICAgICAg
Y2ggPSB0aGlzLnNjYW5Vbmljb2RlQ29kZVBvaW50RXNjYXBlKCk7CisJICAgICAgICAgICAgfQor
CSAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICBjaCA9IHRoaXMuc2NhbkhleEVz
Y2FwZSgndScpOworCSAgICAgICAgICAgICAgICBjcCA9IGNoLmNoYXJDb2RlQXQoMCk7CisJICAg
ICAgICAgICAgICAgIGlmICghY2ggfHwgY2ggPT09ICdcXCcgfHwgIWNoYXJhY3Rlcl8xLkNoYXJh
Y3Rlci5pc0lkZW50aWZpZXJTdGFydChjcCkpIHsKKwkgICAgICAgICAgICAgICAgICAgIHRoaXMu
dGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAg
IH0KKwkgICAgICAgICAgICBpZCA9IGNoOworCSAgICAgICAgfQorCSAgICAgICAgd2hpbGUgKCF0
aGlzLmVvZigpKSB7CisJICAgICAgICAgICAgY3AgPSB0aGlzLmNvZGVQb2ludEF0KHRoaXMuaW5k
ZXgpOworCSAgICAgICAgICAgIGlmICghY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzSWRlbnRpZmll
clBhcnQoY3ApKSB7CisJICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIH0KKwkg
ICAgICAgICAgICBjaCA9IGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5mcm9tQ29kZVBvaW50KGNwKTsK
KwkgICAgICAgICAgICBpZCArPSBjaDsKKwkgICAgICAgICAgICB0aGlzLmluZGV4ICs9IGNoLmxl
bmd0aDsKKwkgICAgICAgICAgICAvLyAnXHUnIChVKzAwNUMsIFUrMDA3NSkgZGVub3RlcyBhbiBl
c2NhcGVkIGNoYXJhY3Rlci4KKwkgICAgICAgICAgICBpZiAoY3AgPT09IDB4NUMpIHsKKwkgICAg
ICAgICAgICAgICAgaWQgPSBpZC5zdWJzdHIoMCwgaWQubGVuZ3RoIC0gMSk7CisJICAgICAgICAg
ICAgICAgIGlmICh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpICE9PSAweDc1KSB7
CisJICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7CisJICAg
ICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4OworCSAgICAgICAg
ICAgICAgICBpZiAodGhpcy5zb3VyY2VbdGhpcy5pbmRleF0gPT09ICd7JykgeworCSAgICAgICAg
ICAgICAgICAgICAgKyt0aGlzLmluZGV4OworCSAgICAgICAgICAgICAgICAgICAgY2ggPSB0aGlz
LnNjYW5Vbmljb2RlQ29kZVBvaW50RXNjYXBlKCk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAg
ICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgICAgICBjaCA9IHRoaXMuc2Nhbkhl
eEVzY2FwZSgndScpOworCSAgICAgICAgICAgICAgICAgICAgY3AgPSBjaC5jaGFyQ29kZUF0KDAp
OworCSAgICAgICAgICAgICAgICAgICAgaWYgKCFjaCB8fCBjaCA9PT0gJ1xcJyB8fCAhY2hhcmFj
dGVyXzEuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclBhcnQoY3ApKSB7CisJICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOworCSAgICAgICAgICAgICAgICAg
ICAgfQorCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGlkICs9IGNoOworCSAg
ICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiBpZDsKKwkgICAgfTsKKwkg
ICAgOworCSAgICBTY2FubmVyLnByb3RvdHlwZS5vY3RhbFRvRGVjaW1hbCA9IGZ1bmN0aW9uIChj
aCkgeworCSAgICAgICAgLy8gXDAgaXMgbm90IG9jdGFsIGVzY2FwZSBzZXF1ZW5jZQorCSAgICAg
ICAgdmFyIG9jdGFsID0gKGNoICE9PSAnMCcpOworCSAgICAgICAgdmFyIGNvZGUgPSBvY3RhbFZh
bHVlKGNoKTsKKwkgICAgICAgIGlmICghdGhpcy5lb2YoKSAmJiBjaGFyYWN0ZXJfMS5DaGFyYWN0
ZXIuaXNPY3RhbERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKSB7CisJ
ICAgICAgICAgICAgb2N0YWwgPSB0cnVlOworCSAgICAgICAgICAgIGNvZGUgPSBjb2RlICogOCAr
IG9jdGFsVmFsdWUodGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXSk7CisJICAgICAgICAgICAgLy8g
MyBkaWdpdHMgYXJlIG9ubHkgYWxsb3dlZCB3aGVuIHN0cmluZyBzdGFydHMKKwkgICAgICAgICAg
ICAvLyB3aXRoIDAsIDEsIDIsIDMKKwkgICAgICAgICAgICBpZiAoJzAxMjMnLmluZGV4T2YoY2gp
ID49IDAgJiYgIXRoaXMuZW9mKCkgJiYgY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzT2N0YWxEaWdp
dCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkgeworCSAgICAgICAgICAgICAg
ICBjb2RlID0gY29kZSAqIDggKyBvY3RhbFZhbHVlKHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK10p
OworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiB7CisJICAgICAg
ICAgICAgY29kZTogY29kZSwKKwkgICAgICAgICAgICBvY3RhbDogb2N0YWwKKwkgICAgICAgIH07
CisJICAgIH07CisJICAgIDsKKwkgICAgLy8gRUNNQS0yNjIgMTEuNiBOYW1lcyBhbmQgS2V5d29y
ZHMKKwkgICAgU2Nhbm5lci5wcm90b3R5cGUuc2NhbklkZW50aWZpZXIgPSBmdW5jdGlvbiAoKSB7
CisJICAgICAgICB2YXIgdHlwZTsKKwkgICAgICAgIHZhciBzdGFydCA9IHRoaXMuaW5kZXg7CisJ
ICAgICAgICAvLyBCYWNrc2xhc2ggKFUrMDA1Qykgc3RhcnRzIGFuIGVzY2FwZWQgY2hhcmFjdGVy
LgorCSAgICAgICAgdmFyIGlkID0gKHRoaXMuc291cmNlLmNoYXJDb2RlQXQoc3RhcnQpID09PSAw
eDVDKSA/IHRoaXMuZ2V0Q29tcGxleElkZW50aWZpZXIoKSA6IHRoaXMuZ2V0SWRlbnRpZmllcigp
OworCSAgICAgICAgLy8gVGhlcmUgaXMgbm8ga2V5d29yZCBvciBsaXRlcmFsIHdpdGggb25seSBv
bmUgY2hhcmFjdGVyLgorCSAgICAgICAgLy8gVGh1cywgaXQgbXVzdCBiZSBhbiBpZGVudGlmaWVy
LgorCSAgICAgICAgaWYgKGlkLmxlbmd0aCA9PT0gMSkgeworCSAgICAgICAgICAgIHR5cGUgPSB0
b2tlbl8xLlRva2VuLklkZW50aWZpZXI7CisJICAgICAgICB9CisJICAgICAgICBlbHNlIGlmICh0
aGlzLmlzS2V5d29yZChpZCkpIHsKKwkgICAgICAgICAgICB0eXBlID0gdG9rZW5fMS5Ub2tlbi5L
ZXl3b3JkOworCSAgICAgICAgfQorCSAgICAgICAgZWxzZSBpZiAoaWQgPT09ICdudWxsJykgewor
CSAgICAgICAgICAgIHR5cGUgPSB0b2tlbl8xLlRva2VuLk51bGxMaXRlcmFsOworCSAgICAgICAg
fQorCSAgICAgICAgZWxzZSBpZiAoaWQgPT09ICd0cnVlJyB8fCBpZCA9PT0gJ2ZhbHNlJykgewor
CSAgICAgICAgICAgIHR5cGUgPSB0b2tlbl8xLlRva2VuLkJvb2xlYW5MaXRlcmFsOworCSAgICAg
ICAgfQorCSAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgdHlwZSA9IHRva2VuXzEuVG9rZW4u
SWRlbnRpZmllcjsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiB7CisJICAgICAgICAgICAg
dHlwZTogdHlwZSwKKwkgICAgICAgICAgICB2YWx1ZTogaWQsCisJICAgICAgICAgICAgbGluZU51
bWJlcjogdGhpcy5saW5lTnVtYmVyLAorCSAgICAgICAgICAgIGxpbmVTdGFydDogdGhpcy5saW5l
U3RhcnQsCisJICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorCSAgICAgICAgICAgIGVuZDogdGhp
cy5pbmRleAorCSAgICAgICAgfTsKKwkgICAgfTsKKwkgICAgOworCSAgICAvLyBFQ01BLTI2MiAx
MS43IFB1bmN0dWF0b3JzCisJICAgIFNjYW5uZXIucHJvdG90eXBlLnNjYW5QdW5jdHVhdG9yID0g
ZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIHRva2VuID0geworCSAgICAgICAgICAgIHR5cGU6
IHRva2VuXzEuVG9rZW4uUHVuY3R1YXRvciwKKwkgICAgICAgICAgICB2YWx1ZTogJycsCisJICAg
ICAgICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLAorCSAgICAgICAgICAgIGxpbmVT
dGFydDogdGhpcy5saW5lU3RhcnQsCisJICAgICAgICAgICAgc3RhcnQ6IHRoaXMuaW5kZXgsCisJ
ICAgICAgICAgICAgZW5kOiB0aGlzLmluZGV4CisJICAgICAgICB9OworCSAgICAgICAgLy8gQ2hl
Y2sgZm9yIG1vc3QgY29tbW9uIHNpbmdsZS1jaGFyYWN0ZXIgcHVuY3R1YXRvcnMuCisJICAgICAg
ICB2YXIgc3RyID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleF07CisJICAgICAgICBzd2l0Y2ggKHN0
cikgeworCSAgICAgICAgICAgIGNhc2UgJygnOgorCSAgICAgICAgICAgIGNhc2UgJ3snOgorCSAg
ICAgICAgICAgICAgICBpZiAoc3RyID09PSAneycpIHsKKwkgICAgICAgICAgICAgICAgICAgIHRo
aXMuY3VybHlTdGFjay5wdXNoKCd7Jyk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAg
ICAgICAgKyt0aGlzLmluZGV4OworCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAg
ICBjYXNlICcuJzoKKwkgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4OworCSAgICAgICAgICAg
ICAgICBpZiAodGhpcy5zb3VyY2VbdGhpcy5pbmRleF0gPT09ICcuJyAmJiB0aGlzLnNvdXJjZVt0
aGlzLmluZGV4ICsgMV0gPT09ICcuJykgeworCSAgICAgICAgICAgICAgICAgICAgLy8gU3ByZWFk
IG9wZXJhdG9yOiAuLi4KKwkgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggKz0gMjsKKwkg
ICAgICAgICAgICAgICAgICAgIHN0ciA9ICcuLi4nOworCSAgICAgICAgICAgICAgICB9CisJICAg
ICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIGNhc2UgJ30nOgorCSAgICAgICAgICAg
ICAgICArK3RoaXMuaW5kZXg7CisJICAgICAgICAgICAgICAgIHRoaXMuY3VybHlTdGFjay5wb3Ao
KTsKKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgY2FzZSAnKSc6CisJICAg
ICAgICAgICAgY2FzZSAnOyc6CisJICAgICAgICAgICAgY2FzZSAnLCc6CisJICAgICAgICAgICAg
Y2FzZSAnWyc6CisJICAgICAgICAgICAgY2FzZSAnXSc6CisJICAgICAgICAgICAgY2FzZSAnOic6
CisJICAgICAgICAgICAgY2FzZSAnPyc6CisJICAgICAgICAgICAgY2FzZSAnfic6CisJICAgICAg
ICAgICAgICAgICsrdGhpcy5pbmRleDsKKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAg
ICAgICAgZGVmYXVsdDoKKwkgICAgICAgICAgICAgICAgLy8gNC1jaGFyYWN0ZXIgcHVuY3R1YXRv
ci4KKwkgICAgICAgICAgICAgICAgc3RyID0gdGhpcy5zb3VyY2Uuc3Vic3RyKHRoaXMuaW5kZXgs
IDQpOworCSAgICAgICAgICAgICAgICBpZiAoc3RyID09PSAnPj4+PScpIHsKKwkgICAgICAgICAg
ICAgICAgICAgIHRoaXMuaW5kZXggKz0gNDsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAg
ICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgICAgIC8vIDMtY2hhcmFjdGVyIHB1bmN0
dWF0b3JzLgorCSAgICAgICAgICAgICAgICAgICAgc3RyID0gc3RyLnN1YnN0cigwLCAzKTsKKwkg
ICAgICAgICAgICAgICAgICAgIGlmIChzdHIgPT09ICc9PT0nIHx8IHN0ciA9PT0gJyE9PScgfHwg
c3RyID09PSAnPj4+JyB8fAorCSAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9PT0gJzw8PScg
fHwgc3RyID09PSAnPj49JyB8fCBzdHIgPT09ICcqKj0nKSB7CisJICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5pbmRleCArPSAzOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAg
ICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgLy8gMi1jaGFyYWN0
ZXIgcHVuY3R1YXRvcnMuCisJICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gc3RyLnN1YnN0
cigwLCAyKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyID09PSAnJiYnIHx8IHN0
ciA9PT0gJ3x8JyB8fCBzdHIgPT09ICc9PScgfHwgc3RyID09PSAnIT0nIHx8CisJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ciA9PT0gJys9JyB8fCBzdHIgPT09ICctPScgfHwgc3RyID09
PSAnKj0nIHx8IHN0ciA9PT0gJy89JyB8fAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHIgPT09ICcrKycgfHwgc3RyID09PSAnLS0nIHx8IHN0ciA9PT0gJzw8JyB8fCBzdHIgPT09ICc+
PicgfHwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID09PSAnJj0nIHx8IHN0ciA9
PT0gJ3w9JyB8fCBzdHIgPT09ICdePScgfHwgc3RyID09PSAnJT0nIHx8CisJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ciA9PT0gJzw9JyB8fCBzdHIgPT09ICc+PScgfHwgc3RyID09PSAn
PT4nIHx8IHN0ciA9PT0gJyoqJykgeworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LmluZGV4ICs9IDI7CisJICAgICAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxLWNoYXJh
Y3RlciBwdW5jdHVhdG9ycy4KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gdGhp
cy5zb3VyY2VbdGhpcy5pbmRleF07CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgn
PD49ISstKiUmfF4vJy5pbmRleE9mKHN0cikgPj0gMCkgeworCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKyt0aGlzLmluZGV4OworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisJICAgICAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgfQorCSAg
ICAgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICBpZiAodGhpcy5pbmRleCA9PT0g
dG9rZW4uc3RhcnQpIHsKKwkgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7
CisJICAgICAgICB9CisJICAgICAgICB0b2tlbi5lbmQgPSB0aGlzLmluZGV4OworCSAgICAgICAg
dG9rZW4udmFsdWUgPSBzdHI7CisJICAgICAgICByZXR1cm4gdG9rZW47CisJICAgIH07CisJICAg
IDsKKwkgICAgLy8gRUNNQS0yNjIgMTEuOC4zIE51bWVyaWMgTGl0ZXJhbHMKKwkgICAgU2Nhbm5l
ci5wcm90b3R5cGUuc2NhbkhleExpdGVyYWwgPSBmdW5jdGlvbiAoc3RhcnQpIHsKKwkgICAgICAg
IHZhciBudW1iZXIgPSAnJzsKKwkgICAgICAgIHdoaWxlICghdGhpcy5lb2YoKSkgeworCSAgICAg
ICAgICAgIGlmICghY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzSGV4RGlnaXQodGhpcy5zb3VyY2Uu
Y2hhckNvZGVBdCh0aGlzLmluZGV4KSkpIHsKKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAg
ICAgICAgICAgfQorCSAgICAgICAgICAgIG51bWJlciArPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4
KytdOworCSAgICAgICAgfQorCSAgICAgICAgaWYgKG51bWJlci5sZW5ndGggPT09IDApIHsKKwkg
ICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCk7CisJICAgICAgICB9CisJICAg
ICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclN0YXJ0KHRoaXMuc291
cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKSB7CisJICAgICAgICAgICAgdGhpcy50aHJvd1Vu
ZXhwZWN0ZWRUb2tlbigpOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHsKKwkgICAgICAg
ICAgICB0eXBlOiB0b2tlbl8xLlRva2VuLk51bWVyaWNMaXRlcmFsLAorCSAgICAgICAgICAgIHZh
bHVlOiBwYXJzZUludCgnMHgnICsgbnVtYmVyLCAxNiksCisJICAgICAgICAgICAgbGluZU51bWJl
cjogdGhpcy5saW5lTnVtYmVyLAorCSAgICAgICAgICAgIGxpbmVTdGFydDogdGhpcy5saW5lU3Rh
cnQsCisJICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorCSAgICAgICAgICAgIGVuZDogdGhpcy5p
bmRleAorCSAgICAgICAgfTsKKwkgICAgfTsKKwkgICAgOworCSAgICBTY2FubmVyLnByb3RvdHlw
ZS5zY2FuQmluYXJ5TGl0ZXJhbCA9IGZ1bmN0aW9uIChzdGFydCkgeworCSAgICAgICAgdmFyIG51
bWJlciA9ICcnOworCSAgICAgICAgdmFyIGNoOworCSAgICAgICAgd2hpbGUgKCF0aGlzLmVvZigp
KSB7CisJICAgICAgICAgICAgY2ggPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XTsKKwkgICAgICAg
ICAgICBpZiAoY2ggIT09ICcwJyAmJiBjaCAhPT0gJzEnKSB7CisJICAgICAgICAgICAgICAgIGJy
ZWFrOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBudW1iZXIgKz0gdGhpcy5zb3VyY2Vb
dGhpcy5pbmRleCsrXTsKKwkgICAgICAgIH0KKwkgICAgICAgIGlmIChudW1iZXIubGVuZ3RoID09
PSAwKSB7CisJICAgICAgICAgICAgLy8gb25seSAwYiBvciAwQgorCSAgICAgICAgICAgIHRoaXMu
dGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKKwkgICAgICAgIH0KKwkgICAgICAgIGlmICghdGhpcy5l
b2YoKSkgeworCSAgICAgICAgICAgIGNoID0gdGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmlu
ZGV4KTsKKwkgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqLworCSAgICAgICAg
ICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyU3RhcnQoY2gpIHx8IGNo
YXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdChjaCkpIHsKKwkgICAgICAgICAgICAg
ICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpOworCSAgICAgICAgICAgIH0KKwkgICAgICAg
IH0KKwkgICAgICAgIHJldHVybiB7CisJICAgICAgICAgICAgdHlwZTogdG9rZW5fMS5Ub2tlbi5O
dW1lcmljTGl0ZXJhbCwKKwkgICAgICAgICAgICB2YWx1ZTogcGFyc2VJbnQobnVtYmVyLCAyKSwK
KwkgICAgICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsCisJICAgICAgICAgICAg
bGluZVN0YXJ0OiB0aGlzLmxpbmVTdGFydCwKKwkgICAgICAgICAgICBzdGFydDogc3RhcnQsCisJ
ICAgICAgICAgICAgZW5kOiB0aGlzLmluZGV4CisJICAgICAgICB9OworCSAgICB9OworCSAgICA7
CisJICAgIFNjYW5uZXIucHJvdG90eXBlLnNjYW5PY3RhbExpdGVyYWwgPSBmdW5jdGlvbiAocHJl
Zml4LCBzdGFydCkgeworCSAgICAgICAgdmFyIG51bWJlciA9ICcnOworCSAgICAgICAgdmFyIG9j
dGFsID0gZmFsc2U7CisJICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzT2N0YWxE
aWdpdChwcmVmaXguY2hhckNvZGVBdCgwKSkpIHsKKwkgICAgICAgICAgICBvY3RhbCA9IHRydWU7
CisJICAgICAgICAgICAgbnVtYmVyID0gJzAnICsgdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTsK
KwkgICAgICAgIH0KKwkgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICsrdGhpcy5pbmRleDsK
KwkgICAgICAgIH0KKwkgICAgICAgIHdoaWxlICghdGhpcy5lb2YoKSkgeworCSAgICAgICAgICAg
IGlmICghY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzT2N0YWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFy
Q29kZUF0KHRoaXMuaW5kZXgpKSkgeworCSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAg
ICAgICB9CisJICAgICAgICAgICAgbnVtYmVyICs9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107
CisJICAgICAgICB9CisJICAgICAgICBpZiAoIW9jdGFsICYmIG51bWJlci5sZW5ndGggPT09IDAp
IHsKKwkgICAgICAgICAgICAvLyBvbmx5IDBvIG9yIDBPCisJICAgICAgICAgICAgdGhpcy50aHJv
d1VuZXhwZWN0ZWRUb2tlbigpOworCSAgICAgICAgfQorCSAgICAgICAgaWYgKGNoYXJhY3Rlcl8x
LkNoYXJhY3Rlci5pc0lkZW50aWZpZXJTdGFydCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMu
aW5kZXgpKSB8fCBjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNEZWNpbWFsRGlnaXQodGhpcy5zb3Vy
Y2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkpIHsKKwkgICAgICAgICAgICB0aGlzLnRocm93VW5l
eHBlY3RlZFRva2VuKCk7CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4geworCSAgICAgICAg
ICAgIHR5cGU6IHRva2VuXzEuVG9rZW4uTnVtZXJpY0xpdGVyYWwsCisJICAgICAgICAgICAgdmFs
dWU6IHBhcnNlSW50KG51bWJlciwgOCksCisJICAgICAgICAgICAgb2N0YWw6IG9jdGFsLAorCSAg
ICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlciwKKwkgICAgICAgICAgICBsaW5l
U3RhcnQ6IHRoaXMubGluZVN0YXJ0LAorCSAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKwkgICAg
ICAgICAgICBlbmQ6IHRoaXMuaW5kZXgKKwkgICAgICAgIH07CisJICAgIH07CisJICAgIDsKKwkg
ICAgU2Nhbm5lci5wcm90b3R5cGUuaXNJbXBsaWNpdE9jdGFsTGl0ZXJhbCA9IGZ1bmN0aW9uICgp
IHsKKwkgICAgICAgIC8vIEltcGxpY2l0IG9jdGFsLCB1bmxlc3MgdGhlcmUgaXMgYSBub24tb2N0
YWwgZGlnaXQuCisJICAgICAgICAvLyAoQW5uZXggQi4xLjEgb24gTnVtZXJpYyBMaXRlcmFscykK
KwkgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLmluZGV4ICsgMTsgaSA8IHRoaXMubGVuZ3RoOyAr
K2kpIHsKKwkgICAgICAgICAgICB2YXIgY2ggPSB0aGlzLnNvdXJjZVtpXTsKKwkgICAgICAgICAg
ICBpZiAoY2ggPT09ICc4JyB8fCBjaCA9PT0gJzknKSB7CisJICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgaWYgKCFjaGFyYWN0ZXJfMS5D
aGFyYWN0ZXIuaXNPY3RhbERpZ2l0KGNoLmNoYXJDb2RlQXQoMCkpKSB7CisJICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIHJl
dHVybiB0cnVlOworCSAgICB9OworCSAgICA7CisJICAgIFNjYW5uZXIucHJvdG90eXBlLnNjYW5O
dW1lcmljTGl0ZXJhbCA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBzdGFydCA9IHRoaXMu
aW5kZXg7CisJICAgICAgICB2YXIgY2ggPSB0aGlzLnNvdXJjZVtzdGFydF07CisJICAgICAgICBh
c3NlcnRfMS5hc3NlcnQoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KGNoLmNo
YXJDb2RlQXQoMCkpIHx8IChjaCA9PT0gJy4nKSwgJ051bWVyaWMgbGl0ZXJhbCBtdXN0IHN0YXJ0
IHdpdGggYSBkZWNpbWFsIGRpZ2l0IG9yIGEgZGVjaW1hbCBwb2ludCcpOworCSAgICAgICAgdmFy
IG51bWJlciA9ICcnOworCSAgICAgICAgaWYgKGNoICE9PSAnLicpIHsKKwkgICAgICAgICAgICBu
dW1iZXIgPSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdOworCSAgICAgICAgICAgIGNoID0gdGhp
cy5zb3VyY2VbdGhpcy5pbmRleF07CisJICAgICAgICAgICAgLy8gSGV4IG51bWJlciBzdGFydHMg
d2l0aCAnMHgnLgorCSAgICAgICAgICAgIC8vIE9jdGFsIG51bWJlciBzdGFydHMgd2l0aCAnMCcu
CisJICAgICAgICAgICAgLy8gT2N0YWwgbnVtYmVyIGluIEVTNiBzdGFydHMgd2l0aCAnMG8nLgor
CSAgICAgICAgICAgIC8vIEJpbmFyeSBudW1iZXIgaW4gRVM2IHN0YXJ0cyB3aXRoICcwYicuCisJ
ICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gJzAnKSB7CisJICAgICAgICAgICAgICAgIGlmIChj
aCA9PT0gJ3gnIHx8IGNoID09PSAnWCcpIHsKKwkgICAgICAgICAgICAgICAgICAgICsrdGhpcy5p
bmRleDsKKwkgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5IZXhMaXRlcmFsKHN0
YXJ0KTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICdi
JyB8fCBjaCA9PT0gJ0InKSB7CisJICAgICAgICAgICAgICAgICAgICArK3RoaXMuaW5kZXg7CisJ
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FuQmluYXJ5TGl0ZXJhbChzdGFydCk7
CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnbycgfHwg
Y2ggPT09ICdPJykgeworCSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2Nhbk9jdGFs
TGl0ZXJhbChjaCwgc3RhcnQpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAg
IGlmIChjaCAmJiBjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNPY3RhbERpZ2l0KGNoLmNoYXJDb2Rl
QXQoMCkpKSB7CisJICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0ltcGxpY2l0T2N0YWxM
aXRlcmFsKCkpIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FuT2N0
YWxMaXRlcmFsKGNoLCBzdGFydCk7CisJICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAg
ICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgd2hpbGUgKGNoYXJhY3Rlcl8x
LkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5k
ZXgpKSkgeworCSAgICAgICAgICAgICAgICBudW1iZXIgKz0gdGhpcy5zb3VyY2VbdGhpcy5pbmRl
eCsrXTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgY2ggPSB0aGlzLnNvdXJjZVt0aGlz
LmluZGV4XTsKKwkgICAgICAgIH0KKwkgICAgICAgIGlmIChjaCA9PT0gJy4nKSB7CisJICAgICAg
ICAgICAgbnVtYmVyICs9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107CisJICAgICAgICAgICAg
d2hpbGUgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdCh0aGlzLnNvdXJjZS5j
aGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkgeworCSAgICAgICAgICAgICAgICBudW1iZXIgKz0gdGhp
cy5zb3VyY2VbdGhpcy5pbmRleCsrXTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgY2gg
PSB0aGlzLnNvdXJjZVt0aGlzLmluZGV4XTsKKwkgICAgICAgIH0KKwkgICAgICAgIGlmIChjaCA9
PT0gJ2UnIHx8IGNoID09PSAnRScpIHsKKwkgICAgICAgICAgICBudW1iZXIgKz0gdGhpcy5zb3Vy
Y2VbdGhpcy5pbmRleCsrXTsKKwkgICAgICAgICAgICBjaCA9IHRoaXMuc291cmNlW3RoaXMuaW5k
ZXhdOworCSAgICAgICAgICAgIGlmIChjaCA9PT0gJysnIHx8IGNoID09PSAnLScpIHsKKwkgICAg
ICAgICAgICAgICAgbnVtYmVyICs9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107CisJICAgICAg
ICAgICAgfQorCSAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNEZWNpbWFs
RGlnaXQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkpIHsKKwkgICAgICAgICAg
ICAgICAgd2hpbGUgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdCh0aGlzLnNv
dXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSkgeworCSAgICAgICAgICAgICAgICAgICAgbnVt
YmVyICs9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107CisJICAgICAgICAgICAgICAgIH0KKwkg
ICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgIHRoaXMu
dGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAg
ICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclN0YXJ0KHRoaXMuc291
cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKSB7CisJICAgICAgICAgICAgdGhpcy50aHJvd1Vu
ZXhwZWN0ZWRUb2tlbigpOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHsKKwkgICAgICAg
ICAgICB0eXBlOiB0b2tlbl8xLlRva2VuLk51bWVyaWNMaXRlcmFsLAorCSAgICAgICAgICAgIHZh
bHVlOiBwYXJzZUZsb2F0KG51bWJlciksCisJICAgICAgICAgICAgbGluZU51bWJlcjogdGhpcy5s
aW5lTnVtYmVyLAorCSAgICAgICAgICAgIGxpbmVTdGFydDogdGhpcy5saW5lU3RhcnQsCisJICAg
ICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorCSAgICAgICAgICAgIGVuZDogdGhpcy5pbmRleAorCSAg
ICAgICAgfTsKKwkgICAgfTsKKwkgICAgOworCSAgICAvLyBFQ01BLTI2MiAxMS44LjQgU3RyaW5n
IExpdGVyYWxzCisJICAgIFNjYW5uZXIucHJvdG90eXBlLnNjYW5TdHJpbmdMaXRlcmFsID0gZnVu
Y3Rpb24gKCkgeworCSAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5pbmRleDsKKwkgICAgICAgIHZh
ciBxdW90ZSA9IHRoaXMuc291cmNlW3N0YXJ0XTsKKwkgICAgICAgIGFzc2VydF8xLmFzc2VydCgo
cXVvdGUgPT09ICdcJycgfHwgcXVvdGUgPT09ICciJyksICdTdHJpbmcgbGl0ZXJhbCBtdXN0IHN0
YXJ0cyB3aXRoIGEgcXVvdGUnKTsKKwkgICAgICAgICsrdGhpcy5pbmRleDsKKwkgICAgICAgIHZh
ciBvY3RhbCA9IGZhbHNlOworCSAgICAgICAgdmFyIHN0ciA9ICcnOworCSAgICAgICAgd2hpbGUg
KCF0aGlzLmVvZigpKSB7CisJICAgICAgICAgICAgdmFyIGNoID0gdGhpcy5zb3VyY2VbdGhpcy5p
bmRleCsrXTsKKwkgICAgICAgICAgICBpZiAoY2ggPT09IHF1b3RlKSB7CisJICAgICAgICAgICAg
ICAgIHF1b3RlID0gJyc7CisJICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIH0K
KwkgICAgICAgICAgICBlbHNlIGlmIChjaCA9PT0gJ1xcJykgeworCSAgICAgICAgICAgICAgICBj
aCA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107CisJICAgICAgICAgICAgICAgIGlmICghY2gg
fHwgIWNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQo
MCkpKSB7CisJICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoKSB7CisJICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAndSc6CisJICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAneCc6
CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZVt0aGlzLmluZGV4
XSA9PT0gJ3snKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3RoaXMuaW5k
ZXg7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gdGhpcy5zY2FuVW5p
Y29kZUNvZGVQb2ludEVzY2FwZSgpOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIHVuZXNjYXBlZCA9IHRoaXMuc2NhbkhleEVzY2FwZShjaCk7CisJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVuZXNjYXBlZCkgeworCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKTsK
KwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ciArPSB1bmVzY2FwZWQ7CisJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAnbic6CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciAr
PSAnXG4nOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlICdyJzoKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
ICs9ICdccic7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgJ3QnOgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHIgKz0gJ1x0JzsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAnYic6CisJICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ciArPSAnXGInOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlICdmJzoKKwkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RyICs9ICdcZic7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3YnOgorCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHIgKz0gJ1x4MEInOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KwkgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc4JzoKKwkgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlICc5JzoKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IGNoOwor
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2Vu
KCk7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCAm
JiBjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNPY3RhbERpZ2l0KGNoLmNoYXJDb2RlQXQoMCkpKSB7
CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2N0VG9EZWMgPSB0aGlzLm9j
dGFsVG9EZWNpbWFsKGNoKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jdGFs
ID0gb2N0VG9EZWMub2N0YWwgfHwgb2N0YWw7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShvY3RUb0RlYy5jb2RlKTsKKwkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNl
IHsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBjaDsKKwkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKwkgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAg
ICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgICAgICsrdGhpcy5saW5lTnVtYmVyOwor
CSAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnXHInICYmIHRoaXMuc291cmNlW3RoaXMu
aW5kZXhdID09PSAnXG4nKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4
OworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5l
U3RhcnQgPSB0aGlzLmluZGV4OworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQor
CSAgICAgICAgICAgIGVsc2UgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5h
dG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7CisJICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAg
ICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgc3RyICs9IGNo
OworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgICAgIGlmIChxdW90ZSAhPT0gJycp
IHsKKwkgICAgICAgICAgICB0aGlzLmluZGV4ID0gc3RhcnQ7CisJICAgICAgICAgICAgdGhpcy50
aHJvd1VuZXhwZWN0ZWRUb2tlbigpOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHsKKwkg
ICAgICAgICAgICB0eXBlOiB0b2tlbl8xLlRva2VuLlN0cmluZ0xpdGVyYWwsCisJICAgICAgICAg
ICAgdmFsdWU6IHN0ciwKKwkgICAgICAgICAgICBvY3RhbDogb2N0YWwsCisJICAgICAgICAgICAg
bGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLAorCSAgICAgICAgICAgIGxpbmVTdGFydDogdGhp
cy5saW5lU3RhcnQsCisJICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorCSAgICAgICAgICAgIGVu
ZDogdGhpcy5pbmRleAorCSAgICAgICAgfTsKKwkgICAgfTsKKwkgICAgOworCSAgICAvLyBFQ01B
LTI2MiAxMS44LjYgVGVtcGxhdGUgTGl0ZXJhbCBMZXhpY2FsIENvbXBvbmVudHMKKwkgICAgU2Nh
bm5lci5wcm90b3R5cGUuc2NhblRlbXBsYXRlID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFy
IGNvb2tlZCA9ICcnOworCSAgICAgICAgdmFyIHRlcm1pbmF0ZWQgPSBmYWxzZTsKKwkgICAgICAg
IHZhciBzdGFydCA9IHRoaXMuaW5kZXg7CisJICAgICAgICB2YXIgaGVhZCA9ICh0aGlzLnNvdXJj
ZVtzdGFydF0gPT09ICdgJyk7CisJICAgICAgICB2YXIgdGFpbCA9IGZhbHNlOworCSAgICAgICAg
dmFyIHJhd09mZnNldCA9IDI7CisJICAgICAgICArK3RoaXMuaW5kZXg7CisJICAgICAgICB3aGls
ZSAoIXRoaXMuZW9mKCkpIHsKKwkgICAgICAgICAgICB2YXIgY2ggPSB0aGlzLnNvdXJjZVt0aGlz
LmluZGV4KytdOworCSAgICAgICAgICAgIGlmIChjaCA9PT0gJ2AnKSB7CisJICAgICAgICAgICAg
ICAgIHJhd09mZnNldCA9IDE7CisJICAgICAgICAgICAgICAgIHRhaWwgPSB0cnVlOworCSAgICAg
ICAgICAgICAgICB0ZXJtaW5hdGVkID0gdHJ1ZTsKKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJ
ICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYgKGNoID09PSAnJCcpIHsKKwkgICAg
ICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlW3RoaXMuaW5kZXhdID09PSAneycpIHsKKwkgICAg
ICAgICAgICAgICAgICAgIHRoaXMuY3VybHlTdGFjay5wdXNoKCckeycpOworCSAgICAgICAgICAg
ICAgICAgICAgKyt0aGlzLmluZGV4OworCSAgICAgICAgICAgICAgICAgICAgdGVybWluYXRlZCA9
IHRydWU7CisJICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgfQor
CSAgICAgICAgICAgICAgICBjb29rZWQgKz0gY2g7CisJICAgICAgICAgICAgfQorCSAgICAgICAg
ICAgIGVsc2UgaWYgKGNoID09PSAnXFwnKSB7CisJICAgICAgICAgICAgICAgIGNoID0gdGhpcy5z
b3VyY2VbdGhpcy5pbmRleCsrXTsKKwkgICAgICAgICAgICAgICAgaWYgKCFjaGFyYWN0ZXJfMS5D
aGFyYWN0ZXIuaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkgeworCSAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoIChjaCkgeworCSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
J24nOgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gJ1xuJzsKKwkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAncic6CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSAnXHInOwor
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlICd0JzoKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2VkICs9ICdc
dCc7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgJ3UnOgorCSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3gnOgor
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VbdGhpcy5pbmRleF0g
PT09ICd7JykgeworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4
OworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2VkICs9IHRoaXMuc2NhblVu
aWNvZGVDb2RlUG9pbnRFc2NhcGUoKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciByZXN0b3JlID0gdGhpcy5pbmRleDsKKwkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciB1bmVzY2FwZWQgPSB0aGlzLnNjYW5IZXhFc2NhcGUoY2gpOwor
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuZXNjYXBlZCkgeworCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tlZCArPSB1bmVzY2FwZWQ7CisJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LmluZGV4ID0gcmVzdG9yZTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b29rZWQgKz0gY2g7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisJICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYic6CisJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvb2tlZCArPSAnXGInOworCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKwkgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmJzoKKwkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29va2VkICs9ICdcZic7CisJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworCSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3YnOgorCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb29rZWQgKz0gJ1x2JzsKKwkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKwkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnMCcpIHsKKwkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNEZWNpbWFs
RGlnaXQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkpIHsKKwkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbGxlZ2FsOiBcMDEgXDAyIGFuZCBzbyBvbgor
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVk
VG9rZW4obWVzc2FnZXNfMS5NZXNzYWdlcy5UZW1wbGF0ZU9jdGFsTGl0ZXJhbCk7CisJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb29rZWQgKz0gJ1wwJzsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGFyYWN0ZXJfMS5DaGFyYWN0ZXIu
aXNPY3RhbERpZ2l0KGNoLmNoYXJDb2RlQXQoMCkpKSB7CisJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBJbGxlZ2FsOiBcMSBcMgorCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbihtZXNzYWdlc18xLk1lc3NhZ2VzLlRlbXBs
YXRlT2N0YWxMaXRlcmFsKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvb2tlZCArPSBjaDsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICAgICAgICAgIH0K
KwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAg
ICAgICAgICAgICsrdGhpcy5saW5lTnVtYmVyOworCSAgICAgICAgICAgICAgICAgICAgaWYgKGNo
ID09PSAnXHInICYmIHRoaXMuc291cmNlW3RoaXMuaW5kZXhdID09PSAnXG4nKSB7CisJICAgICAg
ICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4OworCSAgICAgICAgICAgICAgICAgICAgfQor
CSAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5lU3RhcnQgPSB0aGlzLmluZGV4OworCSAgICAg
ICAgICAgICAgICB9CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVsc2UgaWYgKGNoYXJh
Y3Rlcl8xLkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7CisJ
ICAgICAgICAgICAgICAgICsrdGhpcy5saW5lTnVtYmVyOworCSAgICAgICAgICAgICAgICBpZiAo
Y2ggPT09ICdccicgJiYgdGhpcy5zb3VyY2VbdGhpcy5pbmRleF0gPT09ICdcbicpIHsKKwkgICAg
ICAgICAgICAgICAgICAgICsrdGhpcy5pbmRleDsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAg
ICAgICAgICAgICB0aGlzLmxpbmVTdGFydCA9IHRoaXMuaW5kZXg7CisJICAgICAgICAgICAgICAg
IGNvb2tlZCArPSAnXG4nOworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIHsKKwkg
ICAgICAgICAgICAgICAgY29va2VkICs9IGNoOworCSAgICAgICAgICAgIH0KKwkgICAgICAgIH0K
KwkgICAgICAgIGlmICghdGVybWluYXRlZCkgeworCSAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4
cGVjdGVkVG9rZW4oKTsKKwkgICAgICAgIH0KKwkgICAgICAgIGlmICghaGVhZCkgeworCSAgICAg
ICAgICAgIHRoaXMuY3VybHlTdGFjay5wb3AoKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVy
biB7CisJICAgICAgICAgICAgdHlwZTogdG9rZW5fMS5Ub2tlbi5UZW1wbGF0ZSwKKwkgICAgICAg
ICAgICB2YWx1ZTogeworCSAgICAgICAgICAgICAgICBjb29rZWQ6IGNvb2tlZCwKKwkgICAgICAg
ICAgICAgICAgcmF3OiB0aGlzLnNvdXJjZS5zbGljZShzdGFydCArIDEsIHRoaXMuaW5kZXggLSBy
YXdPZmZzZXQpCisJICAgICAgICAgICAgfSwKKwkgICAgICAgICAgICBoZWFkOiBoZWFkLAorCSAg
ICAgICAgICAgIHRhaWw6IHRhaWwsCisJICAgICAgICAgICAgbGluZU51bWJlcjogdGhpcy5saW5l
TnVtYmVyLAorCSAgICAgICAgICAgIGxpbmVTdGFydDogdGhpcy5saW5lU3RhcnQsCisJICAgICAg
ICAgICAgc3RhcnQ6IHN0YXJ0LAorCSAgICAgICAgICAgIGVuZDogdGhpcy5pbmRleAorCSAgICAg
ICAgfTsKKwkgICAgfTsKKwkgICAgOworCSAgICAvLyBFQ01BLTI2MiAxMS44LjUgUmVndWxhciBF
eHByZXNzaW9uIExpdGVyYWxzCisJICAgIFNjYW5uZXIucHJvdG90eXBlLnRlc3RSZWdFeHAgPSBm
dW5jdGlvbiAocGF0dGVybiwgZmxhZ3MpIHsKKwkgICAgICAgIC8vIFRoZSBCTVAgY2hhcmFjdGVy
IHRvIHVzZSBhcyBhIHJlcGxhY2VtZW50IGZvciBhc3RyYWwgc3ltYm9scyB3aGVuCisJICAgICAg
ICAvLyB0cmFuc2xhdGluZyBhbiBFUzYgInUiLWZsYWdnZWQgcGF0dGVybiB0byBhbiBFUzUtY29t
cGF0aWJsZQorCSAgICAgICAgLy8gYXBwcm94aW1hdGlvbi4KKwkgICAgICAgIC8vIE5vdGU6IHJl
cGxhY2luZyB3aXRoICdcdUZGRkYnIGVuYWJsZXMgZmFsc2UgcG9zaXRpdmVzIGluIHVubGlrZWx5
CisJICAgICAgICAvLyBzY2VuYXJpb3MuIEZvciBleGFtcGxlLCBgW1x1ezEwNDRmfS1cdXsxMDQ0
MH1dYCBpcyBhbiBpbnZhbGlkCisJICAgICAgICAvLyBwYXR0ZXJuIHRoYXQgd291bGQgbm90IGJl
IGRldGVjdGVkIGJ5IHRoaXMgc3Vic3RpdHV0aW9uLgorCSAgICAgICAgdmFyIGFzdHJhbFN1YnN0
aXR1dGUgPSAnXHVGRkZGJzsKKwkgICAgICAgIHZhciB0bXAgPSBwYXR0ZXJuOworCSAgICAgICAg
dmFyIHNlbGYgPSB0aGlzOworCSAgICAgICAgaWYgKGZsYWdzLmluZGV4T2YoJ3UnKSA+PSAwKSB7
CisJICAgICAgICAgICAgdG1wID0gdG1wCisJICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXHVc
eyhbMC05YS1mQS1GXSspXH18XFx1KFthLWZBLUYwLTldezR9KS9nLCBmdW5jdGlvbiAoJDAsICQx
LCAkMikgeworCSAgICAgICAgICAgICAgICB2YXIgY29kZVBvaW50ID0gcGFyc2VJbnQoJDEgfHwg
JDIsIDE2KTsKKwkgICAgICAgICAgICAgICAgaWYgKGNvZGVQb2ludCA+IDB4MTBGRkZGKSB7CisJ
ICAgICAgICAgICAgICAgICAgICBzZWxmLnRocm93VW5leHBlY3RlZFRva2VuKG1lc3NhZ2VzXzEu
TWVzc2FnZXMuSW52YWxpZFJlZ0V4cCk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAg
ICAgICAgaWYgKGNvZGVQb2ludCA8PSAweEZGRkYpIHsKKwkgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGVQb2ludCk7CisJICAgICAgICAgICAgICAgIH0K
KwkgICAgICAgICAgICAgICAgcmV0dXJuIGFzdHJhbFN1YnN0aXR1dGU7CisJICAgICAgICAgICAg
fSkKKwkgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcdUQ4MDAtXHVEQkZGXVtcdURDMDAtXHVE
RkZGXS9nLCBhc3RyYWxTdWJzdGl0dXRlKTsKKwkgICAgICAgIH0KKwkgICAgICAgIC8vIEZpcnN0
LCBkZXRlY3QgaW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb25zLgorCSAgICAgICAgdHJ5IHsKKwkg
ICAgICAgICAgICBSZWdFeHAodG1wKTsKKwkgICAgICAgIH0KKwkgICAgICAgIGNhdGNoIChlKSB7
CisJICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbihtZXNzYWdlc18xLk1lc3Nh
Z2VzLkludmFsaWRSZWdFeHApOworCSAgICAgICAgfQorCSAgICAgICAgLy8gUmV0dXJuIGEgcmVn
dWxhciBleHByZXNzaW9uIG9iamVjdCBmb3IgdGhpcyBwYXR0ZXJuLWZsYWcgcGFpciwgb3IKKwkg
ICAgICAgIC8vIGBudWxsYCBpbiBjYXNlIHRoZSBjdXJyZW50IGVudmlyb25tZW50IGRvZXNuJ3Qg
c3VwcG9ydCB0aGUgZmxhZ3MgaXQKKwkgICAgICAgIC8vIHVzZXMuCisJICAgICAgICB0cnkgewor
CSAgICAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKHBhdHRlcm4sIGZsYWdzKTsKKwkgICAgICAg
IH0KKwkgICAgICAgIGNhdGNoIChleGNlcHRpb24pIHsKKwkgICAgICAgICAgICAvKiBpc3RhbmJ1
bCBpZ25vcmUgbmV4dCAqLworCSAgICAgICAgICAgIHJldHVybiBudWxsOworCSAgICAgICAgfQor
CSAgICB9OworCSAgICA7CisJICAgIFNjYW5uZXIucHJvdG90eXBlLnNjYW5SZWdFeHBCb2R5ID0g
ZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIGNoID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleF07
CisJICAgICAgICBhc3NlcnRfMS5hc3NlcnQoY2ggPT09ICcvJywgJ1JlZ3VsYXIgZXhwcmVzc2lv
biBsaXRlcmFsIG11c3Qgc3RhcnQgd2l0aCBhIHNsYXNoJyk7CisJICAgICAgICB2YXIgc3RyID0g
dGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTsKKwkgICAgICAgIHZhciBjbGFzc01hcmtlciA9IGZh
bHNlOworCSAgICAgICAgdmFyIHRlcm1pbmF0ZWQgPSBmYWxzZTsKKwkgICAgICAgIHdoaWxlICgh
dGhpcy5lb2YoKSkgeworCSAgICAgICAgICAgIGNoID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsr
XTsKKwkgICAgICAgICAgICBzdHIgKz0gY2g7CisJICAgICAgICAgICAgaWYgKGNoID09PSAnXFwn
KSB7CisJICAgICAgICAgICAgICAgIGNoID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTsKKwkg
ICAgICAgICAgICAgICAgLy8gRUNNQS0yNjIgNy44LjUKKwkgICAgICAgICAgICAgICAgaWYgKGNo
YXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7
CisJICAgICAgICAgICAgICAgICAgICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKG1lc3NhZ2Vz
XzEuTWVzc2FnZXMuVW50ZXJtaW5hdGVkUmVnRXhwKTsKKwkgICAgICAgICAgICAgICAgfQorCSAg
ICAgICAgICAgICAgICBzdHIgKz0gY2g7CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGVs
c2UgaWYgKGNoYXJhY3Rlcl8xLkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2Rl
QXQoMCkpKSB7CisJICAgICAgICAgICAgICAgIHRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4obWVz
c2FnZXNfMS5NZXNzYWdlcy5VbnRlcm1pbmF0ZWRSZWdFeHApOworCSAgICAgICAgICAgIH0KKwkg
ICAgICAgICAgICBlbHNlIGlmIChjbGFzc01hcmtlcikgeworCSAgICAgICAgICAgICAgICBpZiAo
Y2ggPT09ICddJykgeworCSAgICAgICAgICAgICAgICAgICAgY2xhc3NNYXJrZXIgPSBmYWxzZTsK
KwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIHsK
KwkgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnLycpIHsKKwkgICAgICAgICAgICAgICAgICAg
IHRlcm1pbmF0ZWQgPSB0cnVlOworCSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAg
ICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT09ICdbJykgeworCSAg
ICAgICAgICAgICAgICAgICAgY2xhc3NNYXJrZXIgPSB0cnVlOworCSAgICAgICAgICAgICAgICB9
CisJICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgaWYgKCF0ZXJtaW5hdGVkKSB7
CisJICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbihtZXNzYWdlc18xLk1lc3Nh
Z2VzLlVudGVybWluYXRlZFJlZ0V4cCk7CisJICAgICAgICB9CisJICAgICAgICAvLyBFeGNsdWRl
IGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoLgorCSAgICAgICAgdmFyIGJvZHkgPSBzdHIuc3Vi
c3RyKDEsIHN0ci5sZW5ndGggLSAyKTsKKwkgICAgICAgIHJldHVybiB7CisJICAgICAgICAgICAg
dmFsdWU6IGJvZHksCisJICAgICAgICAgICAgbGl0ZXJhbDogc3RyCisJICAgICAgICB9OworCSAg
ICB9OworCSAgICA7CisJICAgIFNjYW5uZXIucHJvdG90eXBlLnNjYW5SZWdFeHBGbGFncyA9IGZ1
bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBzdHIgPSAnJzsKKwkgICAgICAgIHZhciBmbGFncyA9
ICcnOworCSAgICAgICAgd2hpbGUgKCF0aGlzLmVvZigpKSB7CisJICAgICAgICAgICAgdmFyIGNo
ID0gdGhpcy5zb3VyY2VbdGhpcy5pbmRleF07CisJICAgICAgICAgICAgaWYgKCFjaGFyYWN0ZXJf
MS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyUGFydChjaC5jaGFyQ29kZUF0KDApKSkgeworCSAgICAg
ICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgKyt0aGlzLmlu
ZGV4OworCSAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xcJyAmJiAhdGhpcy5lb2YoKSkgeworCSAg
ICAgICAgICAgICAgICBjaCA9IHRoaXMuc291cmNlW3RoaXMuaW5kZXhdOworCSAgICAgICAgICAg
ICAgICBpZiAoY2ggPT09ICd1JykgeworCSAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmluZGV4
OworCSAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3RvcmUgPSB0aGlzLmluZGV4OworCSAgICAg
ICAgICAgICAgICAgICAgY2ggPSB0aGlzLnNjYW5IZXhFc2NhcGUoJ3UnKTsKKwkgICAgICAgICAg
ICAgICAgICAgIGlmIChjaCkgeworCSAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzICs9IGNo
OworCSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoc3RyICs9ICdcXHUnOyByZXN0b3JlIDwg
dGhpcy5pbmRleDsgKytyZXN0b3JlKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ciArPSB0aGlzLnNvdXJjZVtyZXN0b3JlXTsKKwkgICAgICAgICAgICAgICAgICAgICAgICB9CisJ
ICAgICAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKwkgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gcmVzdG9yZTsKKwkgICAgICAgICAgICAg
ICAgICAgICAgICBmbGFncyArPSAndSc7CisJICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9
ICdcXHUnOworCSAgICAgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgICAgICAgICAgdGhp
cy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbigpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAg
ICAgICAgICAgIGVsc2UgeworCSAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcXCc7CisJICAg
ICAgICAgICAgICAgICAgICB0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKCk7CisJICAgICAg
ICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgZWxzZSB7CisJICAgICAg
ICAgICAgICAgIGZsYWdzICs9IGNoOworCSAgICAgICAgICAgICAgICBzdHIgKz0gY2g7CisJICAg
ICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHsKKwkgICAgICAgICAgICB2
YWx1ZTogZmxhZ3MsCisJICAgICAgICAgICAgbGl0ZXJhbDogc3RyCisJICAgICAgICB9OworCSAg
ICB9OworCSAgICA7CisJICAgIFNjYW5uZXIucHJvdG90eXBlLnNjYW5SZWdFeHAgPSBmdW5jdGlv
biAoKSB7CisJICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmluZGV4OworCSAgICAgICAgdmFyIGJv
ZHkgPSB0aGlzLnNjYW5SZWdFeHBCb2R5KCk7CisJICAgICAgICB2YXIgZmxhZ3MgPSB0aGlzLnNj
YW5SZWdFeHBGbGFncygpOworCSAgICAgICAgdmFyIHZhbHVlID0gdGhpcy50ZXN0UmVnRXhwKGJv
ZHkudmFsdWUsIGZsYWdzLnZhbHVlKTsKKwkgICAgICAgIHJldHVybiB7CisJICAgICAgICAgICAg
dHlwZTogdG9rZW5fMS5Ub2tlbi5SZWd1bGFyRXhwcmVzc2lvbiwKKwkgICAgICAgICAgICB2YWx1
ZTogdmFsdWUsCisJICAgICAgICAgICAgbGl0ZXJhbDogYm9keS5saXRlcmFsICsgZmxhZ3MubGl0
ZXJhbCwKKwkgICAgICAgICAgICByZWdleDogeworCSAgICAgICAgICAgICAgICBwYXR0ZXJuOiBi
b2R5LnZhbHVlLAorCSAgICAgICAgICAgICAgICBmbGFnczogZmxhZ3MudmFsdWUKKwkgICAgICAg
ICAgICB9LAorCSAgICAgICAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlciwKKwkgICAg
ICAgICAgICBsaW5lU3RhcnQ6IHRoaXMubGluZVN0YXJ0LAorCSAgICAgICAgICAgIHN0YXJ0OiBz
dGFydCwKKwkgICAgICAgICAgICBlbmQ6IHRoaXMuaW5kZXgKKwkgICAgICAgIH07CisJICAgIH07
CisJICAgIDsKKwkgICAgU2Nhbm5lci5wcm90b3R5cGUubGV4ID0gZnVuY3Rpb24gKCkgeworCSAg
ICAgICAgaWYgKHRoaXMuZW9mKCkpIHsKKwkgICAgICAgICAgICByZXR1cm4geworCSAgICAgICAg
ICAgICAgICB0eXBlOiB0b2tlbl8xLlRva2VuLkVPRiwKKwkgICAgICAgICAgICAgICAgbGluZU51
bWJlcjogdGhpcy5saW5lTnVtYmVyLAorCSAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IHRoaXMu
bGluZVN0YXJ0LAorCSAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5pbmRleCwKKwkgICAgICAg
ICAgICAgICAgZW5kOiB0aGlzLmluZGV4CisJICAgICAgICAgICAgfTsKKwkgICAgICAgIH0KKwkg
ICAgICAgIHZhciBjcCA9IHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCk7CisJICAg
ICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclN0YXJ0KGNwKSkgewor
CSAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5JZGVudGlmaWVyKCk7CisJICAgICAgICB9CisJ
ICAgICAgICAvLyBWZXJ5IGNvbW1vbjogKCBhbmQgKSBhbmQgOworCSAgICAgICAgaWYgKGNwID09
PSAweDI4IHx8IGNwID09PSAweDI5IHx8IGNwID09PSAweDNCKSB7CisJICAgICAgICAgICAgcmV0
dXJuIHRoaXMuc2NhblB1bmN0dWF0b3IoKTsKKwkgICAgICAgIH0KKwkgICAgICAgIC8vIFN0cmlu
ZyBsaXRlcmFsIHN0YXJ0cyB3aXRoIHNpbmdsZSBxdW90ZSAoVSswMDI3KSBvciBkb3VibGUgcXVv
dGUgKFUrMDAyMikuCisJICAgICAgICBpZiAoY3AgPT09IDB4MjcgfHwgY3AgPT09IDB4MjIpIHsK
KwkgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FuU3RyaW5nTGl0ZXJhbCgpOworCSAgICAgICAg
fQorCSAgICAgICAgLy8gRG90ICguKSBVKzAwMkUgY2FuIGFsc28gc3RhcnQgYSBmbG9hdGluZy1w
b2ludCBudW1iZXIsIGhlbmNlIHRoZSBuZWVkCisJICAgICAgICAvLyB0byBjaGVjayB0aGUgbmV4
dCBjaGFyYWN0ZXIuCisJICAgICAgICBpZiAoY3AgPT09IDB4MkUpIHsKKwkgICAgICAgICAgICBp
ZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KHRoaXMuc291cmNlLmNoYXJD
b2RlQXQodGhpcy5pbmRleCArIDEpKSkgeworCSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5z
Y2FuTnVtZXJpY0xpdGVyYWwoKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgcmV0dXJu
IHRoaXMuc2NhblB1bmN0dWF0b3IoKTsKKwkgICAgICAgIH0KKwkgICAgICAgIGlmIChjaGFyYWN0
ZXJfMS5DaGFyYWN0ZXIuaXNEZWNpbWFsRGlnaXQoY3ApKSB7CisJICAgICAgICAgICAgcmV0dXJu
IHRoaXMuc2Nhbk51bWVyaWNMaXRlcmFsKCk7CisJICAgICAgICB9CisJICAgICAgICAvLyBUZW1w
bGF0ZSBsaXRlcmFscyBzdGFydCB3aXRoIGAgKFUrMDA2MCkgZm9yIHRlbXBsYXRlIGhlYWQKKwkg
ICAgICAgIC8vIG9yIH0gKFUrMDA3RCkgZm9yIHRlbXBsYXRlIG1pZGRsZSBvciB0ZW1wbGF0ZSB0
YWlsLgorCSAgICAgICAgaWYgKGNwID09PSAweDYwIHx8IChjcCA9PT0gMHg3RCAmJiB0aGlzLmN1
cmx5U3RhY2tbdGhpcy5jdXJseVN0YWNrLmxlbmd0aCAtIDFdID09PSAnJHsnKSkgeworCSAgICAg
ICAgICAgIHJldHVybiB0aGlzLnNjYW5UZW1wbGF0ZSgpOworCSAgICAgICAgfQorCSAgICAgICAg
Ly8gUG9zc2libGUgaWRlbnRpZmllciBzdGFydCBpbiBhIHN1cnJvZ2F0ZSBwYWlyLgorCSAgICAg
ICAgaWYgKGNwID49IDB4RDgwMCAmJiBjcCA8IDB4REZGRikgeworCSAgICAgICAgICAgIGlmIChj
aGFyYWN0ZXJfMS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyU3RhcnQodGhpcy5jb2RlUG9pbnRBdCh0
aGlzLmluZGV4KSkpIHsKKwkgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbklkZW50aWZp
ZXIoKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gdGhpcy5z
Y2FuUHVuY3R1YXRvcigpOworCSAgICB9OworCSAgICA7CisJICAgIHJldHVybiBTY2FubmVyOwor
CX0oKSk7CisJZXhwb3J0cy5TY2FubmVyID0gU2Nhbm5lcjsKKworCisvKioqLyB9LAorLyogOSAq
LworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CisKKwkidXNlIHN0cmljdCI7CisJ
Ly8gU2VlIGFsc28gdG9vbHMvZ2VuZXJhdGUtdW5pY29kZS1yZWdleC5qcy4KKwl2YXIgUmVnZXgg
PSB7CisJICAgIC8vIFVuaWNvZGUgdjguMC4wIE5vbkFzY2lpSWRlbnRpZmllclN0YXJ0OgorCSAg
ICBOb25Bc2NpaUlkZW50aWZpZXJTdGFydDogL1tceEFBXHhCNVx4QkFceEMwLVx4RDZceEQ4LVx4
RjZceEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzcw
LVx1MDM3NFx1MDM3Nlx1MDM3N1x1MDM3QS1cdTAzN0RcdTAzN0ZcdTAzODZcdTAzODgtXHUwMzhB
XHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVcdTAzRjctXHUwNDgxXHUwNDhBLVx1MDUy
Rlx1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNUQwLVx1MDVFQVx1MDVGMC1cdTA1
RjJcdTA2MjAtXHUwNjRBXHUwNjZFXHUwNjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1MDZF
Nlx1MDZFRVx1MDZFRlx1MDZGQS1cdTA2RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUwNzRE
LVx1MDdBNVx1MDdCMVx1MDdDQS1cdTA3RUFcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1
XHUwODFBXHUwODI0XHUwODI4XHUwODQwLVx1MDg1OFx1MDhBMC1cdTA4QjRcdTA5MDQtXHUwOTM5
XHUwOTNEXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk3MS1cdTA5ODBcdTA5ODUtXHUwOThDXHUwOThG
XHUwOTkwXHUwOTkzLVx1MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJcdTA5QjYtXHUwOUI5XHUwOUJE
XHUwOUNFXHUwOURDXHUwOUREXHUwOURGLVx1MDlFMVx1MDlGMFx1MDlGMVx1MEEwNS1cdTBBMEFc
dTBBMEZcdTBBMTBcdTBBMTMtXHUwQTI4XHUwQTJBLVx1MEEzMFx1MEEzMlx1MEEzM1x1MEEzNVx1
MEEzNlx1MEEzOFx1MEEzOVx1MEE1OS1cdTBBNUNcdTBBNUVcdTBBNzItXHUwQTc0XHUwQTg1LVx1
MEE4RFx1MEE4Ri1cdTBBOTFcdTBBOTMtXHUwQUE4XHUwQUFBLVx1MEFCMFx1MEFCMlx1MEFCM1x1
MEFCNS1cdTBBQjlcdTBBQkRcdTBBRDBcdTBBRTBcdTBBRTFcdTBBRjlcdTBCMDUtXHUwQjBDXHUw
QjBGXHUwQjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1cdTBCMzBcdTBCMzJcdTBCMzNcdTBCMzUtXHUw
QjM5XHUwQjNEXHUwQjVDXHUwQjVEXHUwQjVGLVx1MEI2MVx1MEI3MVx1MEI4M1x1MEI4NS1cdTBC
OEFcdTBCOEUtXHUwQjkwXHUwQjkyLVx1MEI5NVx1MEI5OVx1MEI5QVx1MEI5Q1x1MEI5RVx1MEI5
Rlx1MEJBM1x1MEJBNFx1MEJBOC1cdTBCQUFcdTBCQUUtXHUwQkI5XHUwQkQwXHUwQzA1LVx1MEMw
Q1x1MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1MEMzOVx1MEMzRFx1MEM1OC1cdTBD
NUFcdTBDNjBcdTBDNjFcdTBDODUtXHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBD
QUEtXHUwQ0IzXHUwQ0I1LVx1MENCOVx1MENCRFx1MENERVx1MENFMFx1MENFMVx1MENGMVx1MENG
Mlx1MEQwNS1cdTBEMENcdTBEMEUtXHUwRDEwXHUwRDEyLVx1MEQzQVx1MEQzRFx1MEQ0RVx1MEQ1
Ri1cdTBENjFcdTBEN0EtXHUwRDdGXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBEQjFcdTBEQjMtXHUw
REJCXHUwREJEXHUwREMwLVx1MERDNlx1MEUwMS1cdTBFMzBcdTBFMzJcdTBFMzNcdTBFNDAtXHUw
RTQ2XHUwRTgxXHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThEXHUwRTk0LVx1MEU5
N1x1MEU5OS1cdTBFOUZcdTBFQTEtXHUwRUEzXHUwRUE1XHUwRUE3XHUwRUFBXHUwRUFCXHUwRUFE
LVx1MEVCMFx1MEVCMlx1MEVCM1x1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZcdTBFREMtXHUwRURG
XHUwRjAwXHUwRjQwLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGODgtXHUwRjhDXHUxMDAwLVx1MTAy
QVx1MTAzRlx1MTA1MC1cdTEwNTVcdTEwNUEtXHUxMDVEXHUxMDYxXHUxMDY1XHUxMDY2XHUxMDZF
LVx1MTA3MFx1MTA3NS1cdTEwODFcdTEwOEVcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQw
LVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1
QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBcdTEyQjItXHUx
MkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1
MTMxMFx1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzgwLVx1MTM4Rlx1MTNBMC1cdTEzRjVc
dTEzRjgtXHUxM0ZEXHUxNDAxLVx1MTY2Q1x1MTY2Ri1cdTE2N0ZcdTE2ODEtXHUxNjlBXHUxNkEw
LVx1MTZFQVx1MTZFRS1cdTE2RjhcdTE3MDAtXHUxNzBDXHUxNzBFLVx1MTcxMVx1MTcyMC1cdTE3
MzFcdTE3NDAtXHUxNzUxXHUxNzYwLVx1MTc2Q1x1MTc2RS1cdTE3NzBcdTE3ODAtXHUxN0IzXHUx
N0Q3XHUxN0RDXHUxODIwLVx1MTg3N1x1MTg4MC1cdTE4QThcdTE4QUFcdTE4QjAtXHUxOEY1XHUx
OTAwLVx1MTkxRVx1MTk1MC1cdTE5NkRcdTE5NzAtXHUxOTc0XHUxOTgwLVx1MTlBQlx1MTlCMC1c
dTE5QzlcdTFBMDAtXHUxQTE2XHUxQTIwLVx1MUE1NFx1MUFBN1x1MUIwNS1cdTFCMzNcdTFCNDUt
XHUxQjRCXHUxQjgzLVx1MUJBMFx1MUJBRVx1MUJBRlx1MUJCQS1cdTFCRTVcdTFDMDAtXHUxQzIz
XHUxQzRELVx1MUM0Rlx1MUM1QS1cdTFDN0RcdTFDRTktXHUxQ0VDXHUxQ0VFLVx1MUNGMVx1MUNG
NVx1MUNGNlx1MUQwMC1cdTFEQkZcdTFFMDAtXHUxRjE1XHUxRjE4LVx1MUYxRFx1MUYyMC1cdTFG
NDVcdTFGNDgtXHUxRjREXHUxRjUwLVx1MUY1N1x1MUY1OVx1MUY1Qlx1MUY1RFx1MUY1Ri1cdTFG
N0RcdTFGODAtXHUxRkI0XHUxRkI2LVx1MUZCQ1x1MUZCRVx1MUZDMi1cdTFGQzRcdTFGQzYtXHUx
RkNDXHUxRkQwLVx1MUZEM1x1MUZENi1cdTFGREJcdTFGRTAtXHUxRkVDXHUxRkYyLVx1MUZGNFx1
MUZGNi1cdTFGRkNcdTIwNzFcdTIwN0ZcdTIwOTAtXHUyMDlDXHUyMTAyXHUyMTA3XHUyMTBBLVx1
MjExM1x1MjExNVx1MjExOC1cdTIxMURcdTIxMjRcdTIxMjZcdTIxMjhcdTIxMkEtXHUyMTM5XHUy
MTNDLVx1MjEzRlx1MjE0NS1cdTIxNDlcdTIxNEVcdTIxNjAtXHUyMTg4XHUyQzAwLVx1MkMyRVx1
MkMzMC1cdTJDNUVcdTJDNjAtXHUyQ0U0XHUyQ0VCLVx1MkNFRVx1MkNGMlx1MkNGM1x1MkQwMC1c
dTJEMjVcdTJEMjdcdTJEMkRcdTJEMzAtXHUyRDY3XHUyRDZGXHUyRDgwLVx1MkQ5Nlx1MkRBMC1c
dTJEQTZcdTJEQTgtXHUyREFFXHUyREIwLVx1MkRCNlx1MkRCOC1cdTJEQkVcdTJEQzAtXHUyREM2
XHUyREM4LVx1MkRDRVx1MkREMC1cdTJERDZcdTJERDgtXHUyRERFXHUzMDA1LVx1MzAwN1x1MzAy
MS1cdTMwMjlcdTMwMzEtXHUzMDM1XHUzMDM4LVx1MzAzQ1x1MzA0MS1cdTMwOTZcdTMwOUItXHUz
MDlGXHUzMEExLVx1MzBGQVx1MzBGQy1cdTMwRkZcdTMxMDUtXHUzMTJEXHUzMTMxLVx1MzE4RVx1
MzFBMC1cdTMxQkFcdTMxRjAtXHUzMUZGXHUzNDAwLVx1NERCNVx1NEUwMC1cdTlGRDVcdUEwMDAt
XHVBNDhDXHVBNEQwLVx1QTRGRFx1QTUwMC1cdUE2MENcdUE2MTAtXHVBNjFGXHVBNjJBXHVBNjJC
XHVBNjQwLVx1QTY2RVx1QTY3Ri1cdUE2OURcdUE2QTAtXHVBNkVGXHVBNzE3LVx1QTcxRlx1QTcy
Mi1cdUE3ODhcdUE3OEItXHVBN0FEXHVBN0IwLVx1QTdCN1x1QTdGNy1cdUE4MDFcdUE4MDMtXHVB
ODA1XHVBODA3LVx1QTgwQVx1QTgwQy1cdUE4MjJcdUE4NDAtXHVBODczXHVBODgyLVx1QThCM1x1
QThGMi1cdUE4RjdcdUE4RkJcdUE4RkRcdUE5MEEtXHVBOTI1XHVBOTMwLVx1QTk0Nlx1QTk2MC1c
dUE5N0NcdUE5ODQtXHVBOUIyXHVBOUNGXHVBOUUwLVx1QTlFNFx1QTlFNi1cdUE5RUZcdUE5RkEt
XHVBOUZFXHVBQTAwLVx1QUEyOFx1QUE0MC1cdUFBNDJcdUFBNDQtXHVBQTRCXHVBQTYwLVx1QUE3
Nlx1QUE3QVx1QUE3RS1cdUFBQUZcdUFBQjFcdUFBQjVcdUFBQjZcdUFBQjktXHVBQUJEXHVBQUMw
XHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUFcdUFBRjItXHVBQUY0XHVBQjAxLVx1QUIw
Nlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIyOC1cdUFCMkVcdUFC
MzAtXHVBQjVBXHVBQjVDLVx1QUI2NVx1QUI3MC1cdUFCRTJcdUFDMDAtXHVEN0EzXHVEN0IwLVx1
RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZc
dUZCMTMtXHVGQjE3XHVGQjFEXHVGQjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZcdUZCMzgtXHVGQjND
XHVGQjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0Rc
dUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0XHVGRTc2
LVx1RkVGQ1x1RkYyMS1cdUZGM0FcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZG
QzdcdUZGQ0EtXHVGRkNGXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdfFx1RDgwMFtcdURDMDAt
XHVEQzBCXHVEQzBELVx1REMyNlx1REMyOC1cdURDM0FcdURDM0NcdURDM0RcdURDM0YtXHVEQzRE
XHVEQzUwLVx1REM1RFx1REM4MC1cdURDRkFcdURENDAtXHVERDc0XHVERTgwLVx1REU5Q1x1REVB
MC1cdURFRDBcdURGMDAtXHVERjFGXHVERjMwLVx1REY0QVx1REY1MC1cdURGNzVcdURGODAtXHVE
RjlEXHVERkEwLVx1REZDM1x1REZDOC1cdURGQ0ZcdURGRDEtXHVERkQ1XXxcdUQ4MDFbXHVEQzAw
LVx1REM5RFx1REQwMC1cdUREMjdcdUREMzAtXHVERDYzXHVERTAwLVx1REYzNlx1REY0MC1cdURG
NTVcdURGNjAtXHVERjY3XXxcdUQ4MDJbXHVEQzAwLVx1REMwNVx1REMwOFx1REMwQS1cdURDMzVc
dURDMzdcdURDMzhcdURDM0NcdURDM0YtXHVEQzU1XHVEQzYwLVx1REM3Nlx1REM4MC1cdURDOUVc
dURDRTAtXHVEQ0YyXHVEQ0Y0XHVEQ0Y1XHVERDAwLVx1REQxNVx1REQyMC1cdUREMzlcdUREODAt
XHVEREI3XHVEREJFXHVEREJGXHVERTAwXHVERTEwLVx1REUxM1x1REUxNS1cdURFMTdcdURFMTkt
XHVERTMzXHVERTYwLVx1REU3Q1x1REU4MC1cdURFOUNcdURFQzAtXHVERUM3XHVERUM5LVx1REVF
NFx1REYwMC1cdURGMzVcdURGNDAtXHVERjU1XHVERjYwLVx1REY3Mlx1REY4MC1cdURGOTFdfFx1
RDgwM1tcdURDMDAtXHVEQzQ4XHVEQzgwLVx1RENCMlx1RENDMC1cdURDRjJdfFx1RDgwNFtcdURD
MDMtXHVEQzM3XHVEQzgzLVx1RENBRlx1RENEMC1cdURDRThcdUREMDMtXHVERDI2XHVERDUwLVx1
REQ3Mlx1REQ3Nlx1REQ4My1cdUREQjJcdUREQzEtXHVEREM0XHVERERBXHVERERDXHVERTAwLVx1
REUxMVx1REUxMy1cdURFMkJcdURFODAtXHVERTg2XHVERTg4XHVERThBLVx1REU4RFx1REU4Ri1c
dURFOURcdURFOUYtXHVERUE4XHVERUIwLVx1REVERVx1REYwNS1cdURGMENcdURGMEZcdURGMTBc
dURGMTMtXHVERjI4XHVERjJBLVx1REYzMFx1REYzMlx1REYzM1x1REYzNS1cdURGMzlcdURGM0Rc
dURGNTBcdURGNUQtXHVERjYxXXxcdUQ4MDVbXHVEQzgwLVx1RENBRlx1RENDNFx1RENDNVx1REND
N1x1REQ4MC1cdUREQUVcdURERDgtXHVERERCXHVERTAwLVx1REUyRlx1REU0NFx1REU4MC1cdURF
QUFcdURGMDAtXHVERjE5XXxcdUQ4MDZbXHVEQ0EwLVx1RENERlx1RENGRlx1REVDMC1cdURFRjhd
fFx1RDgwOFtcdURDMDAtXHVERjk5XXxcdUQ4MDlbXHVEQzAwLVx1REM2RVx1REM4MC1cdURENDNd
fFtcdUQ4MENcdUQ4NDAtXHVEODY4XHVEODZBLVx1RDg2Q1x1RDg2Ri1cdUQ4NzJdW1x1REMwMC1c
dURGRkZdfFx1RDgwRFtcdURDMDAtXHVEQzJFXXxcdUQ4MTFbXHVEQzAwLVx1REU0Nl18XHVEODFB
W1x1REMwMC1cdURFMzhcdURFNDAtXHVERTVFXHVERUQwLVx1REVFRFx1REYwMC1cdURGMkZcdURG
NDAtXHVERjQzXHVERjYzLVx1REY3N1x1REY3RC1cdURGOEZdfFx1RDgxQltcdURGMDAtXHVERjQ0
XHVERjUwXHVERjkzLVx1REY5Rl18XHVEODJDW1x1REMwMFx1REMwMV18XHVEODJGW1x1REMwMC1c
dURDNkFcdURDNzAtXHVEQzdDXHVEQzgwLVx1REM4OFx1REM5MC1cdURDOTldfFx1RDgzNVtcdURD
MDAtXHVEQzU0XHVEQzU2LVx1REM5Q1x1REM5RVx1REM5Rlx1RENBMlx1RENBNVx1RENBNlx1RENB
OS1cdURDQUNcdURDQUUtXHVEQ0I5XHVEQ0JCXHVEQ0JELVx1RENDM1x1RENDNS1cdUREMDVcdURE
MDctXHVERDBBXHVERDBELVx1REQxNFx1REQxNi1cdUREMUNcdUREMUUtXHVERDM5XHVERDNCLVx1
REQzRVx1REQ0MC1cdURENDRcdURENDZcdURENEEtXHVERDUwXHVERDUyLVx1REVBNVx1REVBOC1c
dURFQzBcdURFQzItXHVERURBXHVERURDLVx1REVGQVx1REVGQy1cdURGMTRcdURGMTYtXHVERjM0
XHVERjM2LVx1REY0RVx1REY1MC1cdURGNkVcdURGNzAtXHVERjg4XHVERjhBLVx1REZBOFx1REZB
QS1cdURGQzJcdURGQzQtXHVERkNCXXxcdUQ4M0FbXHVEQzAwLVx1RENDNF18XHVEODNCW1x1REUw
MC1cdURFMDNcdURFMDUtXHVERTFGXHVERTIxXHVERTIyXHVERTI0XHVERTI3XHVERTI5LVx1REUz
Mlx1REUzNC1cdURFMzdcdURFMzlcdURFM0JcdURFNDJcdURFNDdcdURFNDlcdURFNEJcdURFNEQt
XHVERTRGXHVERTUxXHVERTUyXHVERTU0XHVERTU3XHVERTU5XHVERTVCXHVERTVEXHVERTVGXHVE
RTYxXHVERTYyXHVERTY0XHVERTY3LVx1REU2QVx1REU2Qy1cdURFNzJcdURFNzQtXHVERTc3XHVE
RTc5LVx1REU3Q1x1REU3RVx1REU4MC1cdURFODlcdURFOEItXHVERTlCXHVERUExLVx1REVBM1x1
REVBNS1cdURFQTlcdURFQUItXHVERUJCXXxcdUQ4NjlbXHVEQzAwLVx1REVENlx1REYwMC1cdURG
RkZdfFx1RDg2RFtcdURDMDAtXHVERjM0XHVERjQwLVx1REZGRl18XHVEODZFW1x1REMwMC1cdURD
MURcdURDMjAtXHVERkZGXXxcdUQ4NzNbXHVEQzAwLVx1REVBMV18XHVEODdFW1x1REMwMC1cdURF
MURdLywKKwkgICAgLy8gVW5pY29kZSB2OC4wLjAgTm9uQXNjaWlJZGVudGlmaWVyUGFydDoKKwkg
ICAgTm9uQXNjaWlJZGVudGlmaWVyUGFydDogL1tceEFBXHhCNVx4QjdceEJBXHhDMC1ceEQ2XHhE
OC1ceEY2XHhGOC1cdTAyQzFcdTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1MDJFQ1x1MDJFRVx1
MDMwMC1cdTAzNzRcdTAzNzZcdTAzNzdcdTAzN0EtXHUwMzdEXHUwMzdGXHUwMzg2LVx1MDM4QVx1
MDM4Q1x1MDM4RS1cdTAzQTFcdTAzQTMtXHUwM0Y1XHUwM0Y3LVx1MDQ4MVx1MDQ4My1cdTA0ODdc
dTA0OEEtXHUwNTJGXHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1OTEtXHUwNUJE
XHUwNUJGXHUwNUMxXHUwNUMyXHUwNUM0XHUwNUM1XHUwNUM3XHUwNUQwLVx1MDVFQVx1MDVGMC1c
dTA1RjJcdTA2MTAtXHUwNjFBXHUwNjIwLVx1MDY2OVx1MDY2RS1cdTA2RDNcdTA2RDUtXHUwNkRD
XHUwNkRGLVx1MDZFOFx1MDZFQS1cdTA2RkNcdTA2RkZcdTA3MTAtXHUwNzRBXHUwNzRELVx1MDdC
MVx1MDdDMC1cdTA3RjVcdTA3RkFcdTA4MDAtXHUwODJEXHUwODQwLVx1MDg1Qlx1MDhBMC1cdTA4
QjRcdTA4RTMtXHUwOTYzXHUwOTY2LVx1MDk2Rlx1MDk3MS1cdTA5ODNcdTA5ODUtXHUwOThDXHUw
OThGXHUwOTkwXHUwOTkzLVx1MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJcdTA5QjYtXHUwOUI5XHUw
OUJDLVx1MDlDNFx1MDlDN1x1MDlDOFx1MDlDQi1cdTA5Q0VcdTA5RDdcdTA5RENcdTA5RERcdTA5
REYtXHUwOUUzXHUwOUU2LVx1MDlGMVx1MEEwMS1cdTBBMDNcdTBBMDUtXHUwQTBBXHUwQTBGXHUw
QTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBB
MzhcdTBBMzlcdTBBM0NcdTBBM0UtXHUwQTQyXHUwQTQ3XHUwQTQ4XHUwQTRCLVx1MEE0RFx1MEE1
MVx1MEE1OS1cdTBBNUNcdTBBNUVcdTBBNjYtXHUwQTc1XHUwQTgxLVx1MEE4M1x1MEE4NS1cdTBB
OERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOFx1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBB
QjUtXHUwQUI5XHUwQUJDLVx1MEFDNVx1MEFDNy1cdTBBQzlcdTBBQ0ItXHUwQUNEXHUwQUQwXHUw
QUUwLVx1MEFFM1x1MEFFNi1cdTBBRUZcdTBBRjlcdTBCMDEtXHUwQjAzXHUwQjA1LVx1MEIwQ1x1
MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1
MEIzOVx1MEIzQy1cdTBCNDRcdTBCNDdcdTBCNDhcdTBCNEItXHUwQjREXHUwQjU2XHUwQjU3XHUw
QjVDXHUwQjVEXHUwQjVGLVx1MEI2M1x1MEI2Ni1cdTBCNkZcdTBCNzFcdTBCODJcdTBCODNcdTBC
ODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTlcdTBCOUFcdTBCOUNcdTBC
OUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJCRS1cdTBC
QzJcdTBCQzYtXHUwQkM4XHUwQkNBLVx1MEJDRFx1MEJEMFx1MEJEN1x1MEJFNi1cdTBCRUZcdTBD
MDAtXHUwQzAzXHUwQzA1LVx1MEMwQ1x1MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1
MEMzOVx1MEMzRC1cdTBDNDRcdTBDNDYtXHUwQzQ4XHUwQzRBLVx1MEM0RFx1MEM1NVx1MEM1Nlx1
MEM1OC1cdTBDNUFcdTBDNjAtXHUwQzYzXHUwQzY2LVx1MEM2Rlx1MEM4MS1cdTBDODNcdTBDODUt
XHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEtXHUwQ0IzXHUwQ0I1LVx1MENC
OVx1MENCQy1cdTBDQzRcdTBDQzYtXHUwQ0M4XHUwQ0NBLVx1MENDRFx1MENENVx1MENENlx1MENE
RVx1MENFMC1cdTBDRTNcdTBDRTYtXHUwQ0VGXHUwQ0YxXHUwQ0YyXHUwRDAxLVx1MEQwM1x1MEQw
NS1cdTBEMENcdTBEMEUtXHUwRDEwXHUwRDEyLVx1MEQzQVx1MEQzRC1cdTBENDRcdTBENDYtXHUw
RDQ4XHUwRDRBLVx1MEQ0RVx1MEQ1N1x1MEQ1Ri1cdTBENjNcdTBENjYtXHUwRDZGXHUwRDdBLVx1
MEQ3Rlx1MEQ4Mlx1MEQ4M1x1MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXHUwREIzLVx1MERCQlx1
MERCRFx1MERDMC1cdTBEQzZcdTBEQ0FcdTBEQ0YtXHUwREQ0XHUwREQ2XHUwREQ4LVx1MERERlx1
MERFNi1cdTBERUZcdTBERjJcdTBERjNcdTBFMDEtXHUwRTNBXHUwRTQwLVx1MEU0RVx1MEU1MC1c
dTBFNTlcdTBFODFcdTBFODJcdTBFODRcdTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUw
RTk3XHUwRTk5LVx1MEU5Rlx1MEVBMS1cdTBFQTNcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBF
QUQtXHUwRUI5XHUwRUJCLVx1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZcdTBFQzgtXHUwRUNEXHUw
RUQwLVx1MEVEOVx1MEVEQy1cdTBFREZcdTBGMDBcdTBGMThcdTBGMTlcdTBGMjAtXHUwRjI5XHUw
RjM1XHUwRjM3XHUwRjM5XHUwRjNFLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGNzEtXHUwRjg0XHUw
Rjg2LVx1MEY5N1x1MEY5OS1cdTBGQkNcdTBGQzZcdTEwMDAtXHUxMDQ5XHUxMDUwLVx1MTA5RFx1
MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0OFx1MTI0QS1c
dTEyNERcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEyODhcdTEyOEEt
XHUxMjhEXHUxMjkwLVx1MTJCMFx1MTJCMi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUxMkMwXHUxMkMy
LVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEwXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEz
NUFcdTEzNUQtXHUxMzVGXHUxMzY5LVx1MTM3MVx1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y1XHUx
M0Y4LVx1MTNGRFx1MTQwMS1cdTE2NkNcdTE2NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1c
dTE2RUFcdTE2RUUtXHUxNkY4XHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTRcdTE3MjAtXHUxNzM0
XHUxNzQwLVx1MTc1M1x1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzcyXHUxNzczXHUxNzgw
LVx1MTdEM1x1MTdEN1x1MTdEQ1x1MTdERFx1MTdFMC1cdTE3RTlcdTE4MEItXHUxODBEXHUxODEw
LVx1MTgxOVx1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5
MUVcdTE5MjAtXHUxOTJCXHUxOTMwLVx1MTkzQlx1MTk0Ni1cdTE5NkRcdTE5NzAtXHUxOTc0XHUx
OTgwLVx1MTlBQlx1MTlCMC1cdTE5QzlcdTE5RDAtXHUxOURBXHUxQTAwLVx1MUExQlx1MUEyMC1c
dTFBNUVcdTFBNjAtXHUxQTdDXHUxQTdGLVx1MUE4OVx1MUE5MC1cdTFBOTlcdTFBQTdcdTFBQjAt
XHUxQUJEXHUxQjAwLVx1MUI0Qlx1MUI1MC1cdTFCNTlcdTFCNkItXHUxQjczXHUxQjgwLVx1MUJG
M1x1MUMwMC1cdTFDMzdcdTFDNDAtXHUxQzQ5XHUxQzRELVx1MUM3RFx1MUNEMC1cdTFDRDJcdTFD
RDQtXHUxQ0Y2XHUxQ0Y4XHUxQ0Y5XHUxRDAwLVx1MURGNVx1MURGQy1cdTFGMTVcdTFGMTgtXHUx
RjFEXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUx
RjVEXHUxRjVGLVx1MUY3RFx1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1
MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNc
dTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjAwQ1x1MjAwRFx1MjAzRlx1MjA0MFx1MjA1NFx1
MjA3MVx1MjA3Rlx1MjA5MC1cdTIwOUNcdTIwRDAtXHUyMERDXHUyMEUxXHUyMEU1LVx1MjBGMFx1
MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTgtXHUyMTFEXHUyMTI0XHUyMTI2XHUy
MTI4XHUyMTJBLVx1MjEzOVx1MjEzQy1cdTIxM0ZcdTIxNDUtXHUyMTQ5XHUyMTRFXHUyMTYwLVx1
MjE4OFx1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRjNc
dTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ3Ri1cdTJEOTZc
dTJEQTAtXHUyREE2XHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMw
LVx1MkRDNlx1MkRDOC1cdTJEQ0VcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkRFMC1cdTJE
RkZcdTMwMDUtXHUzMDA3XHUzMDIxLVx1MzAyRlx1MzAzMS1cdTMwMzVcdTMwMzgtXHUzMDNDXHUz
MDQxLVx1MzA5Nlx1MzA5OS1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1c
dTMxMkRcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1
XHU0RTAwLVx1OUZENVx1QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYx
MC1cdUE2MkJcdUE2NDAtXHVBNjZGXHVBNjc0LVx1QTY3RFx1QTY3Ri1cdUE2RjFcdUE3MTctXHVB
NzFGXHVBNzIyLVx1QTc4OFx1QTc4Qi1cdUE3QURcdUE3QjAtXHVBN0I3XHVBN0Y3LVx1QTgyN1x1
QTg0MC1cdUE4NzNcdUE4ODAtXHVBOEM0XHVBOEQwLVx1QThEOVx1QThFMC1cdUE4RjdcdUE4RkJc
dUE4RkRcdUE5MDAtXHVBOTJEXHVBOTMwLVx1QTk1M1x1QTk2MC1cdUE5N0NcdUE5ODAtXHVBOUMw
XHVBOUNGLVx1QTlEOVx1QTlFMC1cdUE5RkVcdUFBMDAtXHVBQTM2XHVBQTQwLVx1QUE0RFx1QUE1
MC1cdUFBNTlcdUFBNjAtXHVBQTc2XHVBQTdBLVx1QUFDMlx1QUFEQi1cdUFBRERcdUFBRTAtXHVB
QUVGXHVBQUYyLVx1QUFGNlx1QUIwMS1cdUFCMDZcdUFCMDktXHVBQjBFXHVBQjExLVx1QUIxNlx1
QUIyMC1cdUFCMjZcdUFCMjgtXHVBQjJFXHVBQjMwLVx1QUI1QVx1QUI1Qy1cdUFCNjVcdUFCNzAt
XHVBQkVBXHVBQkVDXHVBQkVEXHVBQkYwLVx1QUJGOVx1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVEN0M2
XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRcdUZBNzAtXHVGQUQ5XHVGQjAwLVx1RkIwNlx1RkIx
My1cdUZCMTdcdUZCMUQtXHVGQjI4XHVGQjJBLVx1RkIzNlx1RkIzOC1cdUZCM0NcdUZCM0VcdUZC
NDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQzRFx1RkQ1MC1cdUZE
OEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkUwMC1cdUZFMEZcdUZFMjAtXHVGRTJGXHVG
RTMzXHVGRTM0XHVGRTRELVx1RkU0Rlx1RkU3MC1cdUZFNzRcdUZFNzYtXHVGRUZDXHVGRjEwLVx1
RkYxOVx1RkYyMS1cdUZGM0FcdUZGM0ZcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1c
dUZGQzdcdUZGQ0EtXHVGRkNGXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdfFx1RDgwMFtcdURD
MDAtXHVEQzBCXHVEQzBELVx1REMyNlx1REMyOC1cdURDM0FcdURDM0NcdURDM0RcdURDM0YtXHVE
QzREXHVEQzUwLVx1REM1RFx1REM4MC1cdURDRkFcdURENDAtXHVERDc0XHVEREZEXHVERTgwLVx1
REU5Q1x1REVBMC1cdURFRDBcdURFRTBcdURGMDAtXHVERjFGXHVERjMwLVx1REY0QVx1REY1MC1c
dURGN0FcdURGODAtXHVERjlEXHVERkEwLVx1REZDM1x1REZDOC1cdURGQ0ZcdURGRDEtXHVERkQ1
XXxcdUQ4MDFbXHVEQzAwLVx1REM5RFx1RENBMC1cdURDQTlcdUREMDAtXHVERDI3XHVERDMwLVx1
REQ2M1x1REUwMC1cdURGMzZcdURGNDAtXHVERjU1XHVERjYwLVx1REY2N118XHVEODAyW1x1REMw
MC1cdURDMDVcdURDMDhcdURDMEEtXHVEQzM1XHVEQzM3XHVEQzM4XHVEQzNDXHVEQzNGLVx1REM1
NVx1REM2MC1cdURDNzZcdURDODAtXHVEQzlFXHVEQ0UwLVx1RENGMlx1RENGNFx1RENGNVx1REQw
MC1cdUREMTVcdUREMjAtXHVERDM5XHVERDgwLVx1RERCN1x1RERCRVx1RERCRlx1REUwMC1cdURF
MDNcdURFMDVcdURFMDZcdURFMEMtXHVERTEzXHVERTE1LVx1REUxN1x1REUxOS1cdURFMzNcdURF
MzgtXHVERTNBXHVERTNGXHVERTYwLVx1REU3Q1x1REU4MC1cdURFOUNcdURFQzAtXHVERUM3XHVE
RUM5LVx1REVFNlx1REYwMC1cdURGMzVcdURGNDAtXHVERjU1XHVERjYwLVx1REY3Mlx1REY4MC1c
dURGOTFdfFx1RDgwM1tcdURDMDAtXHVEQzQ4XHVEQzgwLVx1RENCMlx1RENDMC1cdURDRjJdfFx1
RDgwNFtcdURDMDAtXHVEQzQ2XHVEQzY2LVx1REM2Rlx1REM3Ri1cdURDQkFcdURDRDAtXHVEQ0U4
XHVEQ0YwLVx1RENGOVx1REQwMC1cdUREMzRcdUREMzYtXHVERDNGXHVERDUwLVx1REQ3M1x1REQ3
Nlx1REQ4MC1cdUREQzRcdUREQ0EtXHVERENDXHVEREQwLVx1REREQVx1REREQ1x1REUwMC1cdURF
MTFcdURFMTMtXHVERTM3XHVERTgwLVx1REU4Nlx1REU4OFx1REU4QS1cdURFOERcdURFOEYtXHVE
RTlEXHVERTlGLVx1REVBOFx1REVCMC1cdURFRUFcdURFRjAtXHVERUY5XHVERjAwLVx1REYwM1x1
REYwNS1cdURGMENcdURGMEZcdURGMTBcdURGMTMtXHVERjI4XHVERjJBLVx1REYzMFx1REYzMlx1
REYzM1x1REYzNS1cdURGMzlcdURGM0MtXHVERjQ0XHVERjQ3XHVERjQ4XHVERjRCLVx1REY0RFx1
REY1MFx1REY1N1x1REY1RC1cdURGNjNcdURGNjYtXHVERjZDXHVERjcwLVx1REY3NF18XHVEODA1
W1x1REM4MC1cdURDQzVcdURDQzdcdURDRDAtXHVEQ0Q5XHVERDgwLVx1RERCNVx1RERCOC1cdURE
QzBcdURERDgtXHVEREREXHVERTAwLVx1REU0MFx1REU0NFx1REU1MC1cdURFNTlcdURFODAtXHVE
RUI3XHVERUMwLVx1REVDOVx1REYwMC1cdURGMTlcdURGMUQtXHVERjJCXHVERjMwLVx1REYzOV18
XHVEODA2W1x1RENBMC1cdURDRTlcdURDRkZcdURFQzAtXHVERUY4XXxcdUQ4MDhbXHVEQzAwLVx1
REY5OV18XHVEODA5W1x1REMwMC1cdURDNkVcdURDODAtXHVERDQzXXxbXHVEODBDXHVEODQwLVx1
RDg2OFx1RDg2QS1cdUQ4NkNcdUQ4NkYtXHVEODcyXVtcdURDMDAtXHVERkZGXXxcdUQ4MERbXHVE
QzAwLVx1REMyRV18XHVEODExW1x1REMwMC1cdURFNDZdfFx1RDgxQVtcdURDMDAtXHVERTM4XHVE
RTQwLVx1REU1RVx1REU2MC1cdURFNjlcdURFRDAtXHVERUVEXHVERUYwLVx1REVGNFx1REYwMC1c
dURGMzZcdURGNDAtXHVERjQzXHVERjUwLVx1REY1OVx1REY2My1cdURGNzdcdURGN0QtXHVERjhG
XXxcdUQ4MUJbXHVERjAwLVx1REY0NFx1REY1MC1cdURGN0VcdURGOEYtXHVERjlGXXxcdUQ4MkNb
XHVEQzAwXHVEQzAxXXxcdUQ4MkZbXHVEQzAwLVx1REM2QVx1REM3MC1cdURDN0NcdURDODAtXHVE
Qzg4XHVEQzkwLVx1REM5OVx1REM5RFx1REM5RV18XHVEODM0W1x1REQ2NS1cdURENjlcdURENkQt
XHVERDcyXHVERDdCLVx1REQ4Mlx1REQ4NS1cdUREOEJcdUREQUEtXHVEREFEXHVERTQyLVx1REU0
NF18XHVEODM1W1x1REMwMC1cdURDNTRcdURDNTYtXHVEQzlDXHVEQzlFXHVEQzlGXHVEQ0EyXHVE
Q0E1XHVEQ0E2XHVEQ0E5LVx1RENBQ1x1RENBRS1cdURDQjlcdURDQkJcdURDQkQtXHVEQ0MzXHVE
Q0M1LVx1REQwNVx1REQwNy1cdUREMEFcdUREMEQtXHVERDE0XHVERDE2LVx1REQxQ1x1REQxRS1c
dUREMzlcdUREM0ItXHVERDNFXHVERDQwLVx1REQ0NFx1REQ0Nlx1REQ0QS1cdURENTBcdURENTIt
XHVERUE1XHVERUE4LVx1REVDMFx1REVDMi1cdURFREFcdURFREMtXHVERUZBXHVERUZDLVx1REYx
NFx1REYxNi1cdURGMzRcdURGMzYtXHVERjRFXHVERjUwLVx1REY2RVx1REY3MC1cdURGODhcdURG
OEEtXHVERkE4XHVERkFBLVx1REZDMlx1REZDNC1cdURGQ0JcdURGQ0UtXHVERkZGXXxcdUQ4MzZb
XHVERTAwLVx1REUzNlx1REUzQi1cdURFNkNcdURFNzVcdURFODRcdURFOUItXHVERTlGXHVERUEx
LVx1REVBRl18XHVEODNBW1x1REMwMC1cdURDQzRcdURDRDAtXHVEQ0Q2XXxcdUQ4M0JbXHVERTAw
LVx1REUwM1x1REUwNS1cdURFMUZcdURFMjFcdURFMjJcdURFMjRcdURFMjdcdURFMjktXHVERTMy
XHVERTM0LVx1REUzN1x1REUzOVx1REUzQlx1REU0Mlx1REU0N1x1REU0OVx1REU0Qlx1REU0RC1c
dURFNEZcdURFNTFcdURFNTJcdURFNTRcdURFNTdcdURFNTlcdURFNUJcdURFNURcdURFNUZcdURF
NjFcdURFNjJcdURFNjRcdURFNjctXHVERTZBXHVERTZDLVx1REU3Mlx1REU3NC1cdURFNzdcdURF
NzktXHVERTdDXHVERTdFXHVERTgwLVx1REU4OVx1REU4Qi1cdURFOUJcdURFQTEtXHVERUEzXHVE
RUE1LVx1REVBOVx1REVBQi1cdURFQkJdfFx1RDg2OVtcdURDMDAtXHVERUQ2XHVERjAwLVx1REZG
Rl18XHVEODZEW1x1REMwMC1cdURGMzRcdURGNDAtXHVERkZGXXxcdUQ4NkVbXHVEQzAwLVx1REMx
RFx1REMyMC1cdURGRkZdfFx1RDg3M1tcdURDMDAtXHVERUExXXxcdUQ4N0VbXHVEQzAwLVx1REUx
RF18XHVEQjQwW1x1REQwMC1cdURERUZdLworCX07CisJZXhwb3J0cy5DaGFyYWN0ZXIgPSB7CisJ
ICAgIGZyb21Db2RlUG9pbnQ6IGZ1bmN0aW9uIChjcCkgeworCSAgICAgICAgcmV0dXJuIChjcCA8
IDB4MTAwMDApID8gU3RyaW5nLmZyb21DaGFyQ29kZShjcCkgOgorCSAgICAgICAgICAgIFN0cmlu
Zy5mcm9tQ2hhckNvZGUoMHhEODAwICsgKChjcCAtIDB4MTAwMDApID4+IDEwKSkgKworCSAgICAg
ICAgICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4REMwMCArICgoY3AgLSAweDEwMDAwKSAm
IDEwMjMpKTsKKwkgICAgfSwKKwkgICAgLy8gRUNNQS0yNjIgMTEuMiBXaGl0ZSBTcGFjZQorCSAg
ICBpc1doaXRlU3BhY2U6IGZ1bmN0aW9uIChjcCkgeworCSAgICAgICAgcmV0dXJuIChjcCA9PT0g
MHgyMCkgfHwgKGNwID09PSAweDA5KSB8fCAoY3AgPT09IDB4MEIpIHx8IChjcCA9PT0gMHgwQykg
fHwgKGNwID09PSAweEEwKSB8fAorCSAgICAgICAgICAgIChjcCA+PSAweDE2ODAgJiYgWzB4MTY4
MCwgMHgyMDAwLCAweDIwMDEsIDB4MjAwMiwgMHgyMDAzLCAweDIwMDQsIDB4MjAwNSwgMHgyMDA2
LCAweDIwMDcsIDB4MjAwOCwgMHgyMDA5LCAweDIwMEEsIDB4MjAyRiwgMHgyMDVGLCAweDMwMDAs
IDB4RkVGRl0uaW5kZXhPZihjcCkgPj0gMCk7CisJICAgIH0sCisJICAgIC8vIEVDTUEtMjYyIDEx
LjMgTGluZSBUZXJtaW5hdG9ycworCSAgICBpc0xpbmVUZXJtaW5hdG9yOiBmdW5jdGlvbiAoY3Ap
IHsKKwkgICAgICAgIHJldHVybiAoY3AgPT09IDB4MEEpIHx8IChjcCA9PT0gMHgwRCkgfHwgKGNw
ID09PSAweDIwMjgpIHx8IChjcCA9PT0gMHgyMDI5KTsKKwkgICAgfSwKKwkgICAgLy8gRUNNQS0y
NjIgMTEuNiBJZGVudGlmaWVyIE5hbWVzIGFuZCBJZGVudGlmaWVycworCSAgICBpc0lkZW50aWZp
ZXJTdGFydDogZnVuY3Rpb24gKGNwKSB7CisJICAgICAgICByZXR1cm4gKGNwID09PSAweDI0KSB8
fCAoY3AgPT09IDB4NUYpIHx8CisJICAgICAgICAgICAgKGNwID49IDB4NDEgJiYgY3AgPD0gMHg1
QSkgfHwKKwkgICAgICAgICAgICAoY3AgPj0gMHg2MSAmJiBjcCA8PSAweDdBKSB8fAorCSAgICAg
ICAgICAgIChjcCA9PT0gMHg1QykgfHwKKwkgICAgICAgICAgICAoKGNwID49IDB4ODApICYmIFJl
Z2V4Lk5vbkFzY2lpSWRlbnRpZmllclN0YXJ0LnRlc3QoZXhwb3J0cy5DaGFyYWN0ZXIuZnJvbUNv
ZGVQb2ludChjcCkpKTsKKwkgICAgfSwKKwkgICAgaXNJZGVudGlmaWVyUGFydDogZnVuY3Rpb24g
KGNwKSB7CisJICAgICAgICByZXR1cm4gKGNwID09PSAweDI0KSB8fCAoY3AgPT09IDB4NUYpIHx8
CisJICAgICAgICAgICAgKGNwID49IDB4NDEgJiYgY3AgPD0gMHg1QSkgfHwKKwkgICAgICAgICAg
ICAoY3AgPj0gMHg2MSAmJiBjcCA8PSAweDdBKSB8fAorCSAgICAgICAgICAgIChjcCA+PSAweDMw
ICYmIGNwIDw9IDB4MzkpIHx8CisJICAgICAgICAgICAgKGNwID09PSAweDVDKSB8fAorCSAgICAg
ICAgICAgICgoY3AgPj0gMHg4MCkgJiYgUmVnZXguTm9uQXNjaWlJZGVudGlmaWVyUGFydC50ZXN0
KGV4cG9ydHMuQ2hhcmFjdGVyLmZyb21Db2RlUG9pbnQoY3ApKSk7CisJICAgIH0sCisJICAgIC8v
IEVDTUEtMjYyIDExLjguMyBOdW1lcmljIExpdGVyYWxzCisJICAgIGlzRGVjaW1hbERpZ2l0OiBm
dW5jdGlvbiAoY3ApIHsKKwkgICAgICAgIHJldHVybiAoY3AgPj0gMHgzMCAmJiBjcCA8PSAweDM5
KTsgLy8gMC4uOQorCSAgICB9LAorCSAgICBpc0hleERpZ2l0OiBmdW5jdGlvbiAoY3ApIHsKKwkg
ICAgICAgIHJldHVybiAoY3AgPj0gMHgzMCAmJiBjcCA8PSAweDM5KSB8fAorCSAgICAgICAgICAg
IChjcCA+PSAweDQxICYmIGNwIDw9IDB4NDYpIHx8CisJICAgICAgICAgICAgKGNwID49IDB4NjEg
JiYgY3AgPD0gMHg2Nik7IC8vIGEuLmYKKwkgICAgfSwKKwkgICAgaXNPY3RhbERpZ2l0OiBmdW5j
dGlvbiAoY3ApIHsKKwkgICAgICAgIHJldHVybiAoY3AgPj0gMHgzMCAmJiBjcCA8PSAweDM3KTsg
Ly8gMC4uNworCSAgICB9CisJfTsKKworCisvKioqLyB9LAorLyogMTAgKi8KKy8qKiovIGZ1bmN0
aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisJInVzZSBzdHJp
Y3QiOworCXZhciBzeW50YXhfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMik7CisJdmFyIEFycmF5
RXhwcmVzc2lvbiA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIEFycmF5RXhwcmVzc2lv
bihlbGVtZW50cykgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkFycmF5
RXhwcmVzc2lvbjsKKwkgICAgICAgIHRoaXMuZWxlbWVudHMgPSBlbGVtZW50czsKKwkgICAgfQor
CSAgICByZXR1cm4gQXJyYXlFeHByZXNzaW9uOworCX0oKSk7CisJZXhwb3J0cy5BcnJheUV4cHJl
c3Npb24gPSBBcnJheUV4cHJlc3Npb247CisJdmFyIEFycmF5UGF0dGVybiA9IChmdW5jdGlvbiAo
KSB7CisJICAgIGZ1bmN0aW9uIEFycmF5UGF0dGVybihlbGVtZW50cykgeworCSAgICAgICAgdGhp
cy50eXBlID0gc3ludGF4XzEuU3ludGF4LkFycmF5UGF0dGVybjsKKwkgICAgICAgIHRoaXMuZWxl
bWVudHMgPSBlbGVtZW50czsKKwkgICAgfQorCSAgICByZXR1cm4gQXJyYXlQYXR0ZXJuOworCX0o
KSk7CisJZXhwb3J0cy5BcnJheVBhdHRlcm4gPSBBcnJheVBhdHRlcm47CisJdmFyIEFycm93RnVu
Y3Rpb25FeHByZXNzaW9uID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gQXJyb3dGdW5j
dGlvbkV4cHJlc3Npb24ocGFyYW1zLCBib2R5LCBleHByZXNzaW9uKSB7CisJICAgICAgICB0aGlz
LnR5cGUgPSBzeW50YXhfMS5TeW50YXguQXJyb3dGdW5jdGlvbkV4cHJlc3Npb247CisJICAgICAg
ICB0aGlzLmlkID0gbnVsbDsKKwkgICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zOworCSAgICAg
ICAgdGhpcy5ib2R5ID0gYm9keTsKKwkgICAgICAgIHRoaXMuZ2VuZXJhdG9yID0gZmFsc2U7CisJ
ICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uOworCSAgICAgICAgdGhpcy5hc3lu
YyA9IGZhbHNlOworCSAgICB9CisJICAgIHJldHVybiBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjsK
Kwl9KCkpOworCWV4cG9ydHMuQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24gPSBBcnJvd0Z1bmN0aW9u
RXhwcmVzc2lvbjsKKwl2YXIgQXNzaWdubWVudEV4cHJlc3Npb24gPSAoZnVuY3Rpb24gKCkgewor
CSAgICBmdW5jdGlvbiBBc3NpZ25tZW50RXhwcmVzc2lvbihvcGVyYXRvciwgbGVmdCwgcmlnaHQp
IHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5Bc3NpZ25tZW50RXhwcmVz
c2lvbjsKKwkgICAgICAgIHRoaXMub3BlcmF0b3IgPSBvcGVyYXRvcjsKKwkgICAgICAgIHRoaXMu
bGVmdCA9IGxlZnQ7CisJICAgICAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7CisJICAgIH0KKwkgICAg
cmV0dXJuIEFzc2lnbm1lbnRFeHByZXNzaW9uOworCX0oKSk7CisJZXhwb3J0cy5Bc3NpZ25tZW50
RXhwcmVzc2lvbiA9IEFzc2lnbm1lbnRFeHByZXNzaW9uOworCXZhciBBc3NpZ25tZW50UGF0dGVy
biA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIEFzc2lnbm1lbnRQYXR0ZXJuKGxlZnQs
IHJpZ2h0KSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguQXNzaWdubWVu
dFBhdHRlcm47CisJICAgICAgICB0aGlzLmxlZnQgPSBsZWZ0OworCSAgICAgICAgdGhpcy5yaWdo
dCA9IHJpZ2h0OworCSAgICB9CisJICAgIHJldHVybiBBc3NpZ25tZW50UGF0dGVybjsKKwl9KCkp
OworCWV4cG9ydHMuQXNzaWdubWVudFBhdHRlcm4gPSBBc3NpZ25tZW50UGF0dGVybjsKKwl2YXIg
QXN5bmNBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0
aW9uIEFzeW5jQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24ocGFyYW1zLCBib2R5LCBleHByZXNzaW9u
KSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguQXJyb3dGdW5jdGlvbkV4
cHJlc3Npb247CisJICAgICAgICB0aGlzLmlkID0gbnVsbDsKKwkgICAgICAgIHRoaXMucGFyYW1z
ID0gcGFyYW1zOworCSAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKKwkgICAgICAgIHRoaXMuZ2Vu
ZXJhdG9yID0gZmFsc2U7CisJICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uOwor
CSAgICAgICAgdGhpcy5hc3luYyA9IHRydWU7CisJICAgIH0KKwkgICAgcmV0dXJuIEFzeW5jQXJy
b3dGdW5jdGlvbkV4cHJlc3Npb247CisJfSgpKTsKKwlleHBvcnRzLkFzeW5jQXJyb3dGdW5jdGlv
bkV4cHJlc3Npb24gPSBBc3luY0Fycm93RnVuY3Rpb25FeHByZXNzaW9uOworCXZhciBBc3luY0Z1
bmN0aW9uRGVjbGFyYXRpb24gPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBBc3luY0Z1
bmN0aW9uRGVjbGFyYXRpb24oaWQsIHBhcmFtcywgYm9keSkgeworCSAgICAgICAgdGhpcy50eXBl
ID0gc3ludGF4XzEuU3ludGF4LkZ1bmN0aW9uRGVjbGFyYXRpb247CisJICAgICAgICB0aGlzLmlk
ID0gaWQ7CisJICAgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtczsKKwkgICAgICAgIHRoaXMuYm9k
eSA9IGJvZHk7CisJICAgICAgICB0aGlzLmdlbmVyYXRvciA9IGZhbHNlOworCSAgICAgICAgdGhp
cy5leHByZXNzaW9uID0gZmFsc2U7CisJICAgICAgICB0aGlzLmFzeW5jID0gdHJ1ZTsKKwkgICAg
fQorCSAgICByZXR1cm4gQXN5bmNGdW5jdGlvbkRlY2xhcmF0aW9uOworCX0oKSk7CisJZXhwb3J0
cy5Bc3luY0Z1bmN0aW9uRGVjbGFyYXRpb24gPSBBc3luY0Z1bmN0aW9uRGVjbGFyYXRpb247CisJ
dmFyIEFzeW5jRnVuY3Rpb25FeHByZXNzaW9uID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rp
b24gQXN5bmNGdW5jdGlvbkV4cHJlc3Npb24oaWQsIHBhcmFtcywgYm9keSkgeworCSAgICAgICAg
dGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkZ1bmN0aW9uRXhwcmVzc2lvbjsKKwkgICAgICAg
IHRoaXMuaWQgPSBpZDsKKwkgICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zOworCSAgICAgICAg
dGhpcy5ib2R5ID0gYm9keTsKKwkgICAgICAgIHRoaXMuZ2VuZXJhdG9yID0gZmFsc2U7CisJICAg
ICAgICB0aGlzLmV4cHJlc3Npb24gPSBmYWxzZTsKKwkgICAgICAgIHRoaXMuYXN5bmMgPSB0cnVl
OworCSAgICB9CisJICAgIHJldHVybiBBc3luY0Z1bmN0aW9uRXhwcmVzc2lvbjsKKwl9KCkpOwor
CWV4cG9ydHMuQXN5bmNGdW5jdGlvbkV4cHJlc3Npb24gPSBBc3luY0Z1bmN0aW9uRXhwcmVzc2lv
bjsKKwl2YXIgQXdhaXRFeHByZXNzaW9uID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24g
QXdhaXRFeHByZXNzaW9uKGFyZ3VtZW50KSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhf
MS5TeW50YXguQXdhaXRFeHByZXNzaW9uOworCSAgICAgICAgdGhpcy5hcmd1bWVudCA9IGFyZ3Vt
ZW50OworCSAgICB9CisJICAgIHJldHVybiBBd2FpdEV4cHJlc3Npb247CisJfSgpKTsKKwlleHBv
cnRzLkF3YWl0RXhwcmVzc2lvbiA9IEF3YWl0RXhwcmVzc2lvbjsKKwl2YXIgQmluYXJ5RXhwcmVz
c2lvbiA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIEJpbmFyeUV4cHJlc3Npb24ob3Bl
cmF0b3IsIGxlZnQsIHJpZ2h0KSB7CisJICAgICAgICB2YXIgbG9naWNhbCA9IChvcGVyYXRvciA9
PT0gJ3x8JyB8fCBvcGVyYXRvciA9PT0gJyYmJyk7CisJICAgICAgICB0aGlzLnR5cGUgPSBsb2dp
Y2FsID8gc3ludGF4XzEuU3ludGF4LkxvZ2ljYWxFeHByZXNzaW9uIDogc3ludGF4XzEuU3ludGF4
LkJpbmFyeUV4cHJlc3Npb247CisJICAgICAgICB0aGlzLm9wZXJhdG9yID0gb3BlcmF0b3I7CisJ
ICAgICAgICB0aGlzLmxlZnQgPSBsZWZ0OworCSAgICAgICAgdGhpcy5yaWdodCA9IHJpZ2h0Owor
CSAgICB9CisJICAgIHJldHVybiBCaW5hcnlFeHByZXNzaW9uOworCX0oKSk7CisJZXhwb3J0cy5C
aW5hcnlFeHByZXNzaW9uID0gQmluYXJ5RXhwcmVzc2lvbjsKKwl2YXIgQmxvY2tTdGF0ZW1lbnQg
PSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBCbG9ja1N0YXRlbWVudChib2R5KSB7CisJ
ICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguQmxvY2tTdGF0ZW1lbnQ7CisJICAg
ICAgICB0aGlzLmJvZHkgPSBib2R5OworCSAgICB9CisJICAgIHJldHVybiBCbG9ja1N0YXRlbWVu
dDsKKwl9KCkpOworCWV4cG9ydHMuQmxvY2tTdGF0ZW1lbnQgPSBCbG9ja1N0YXRlbWVudDsKKwl2
YXIgQnJlYWtTdGF0ZW1lbnQgPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBCcmVha1N0
YXRlbWVudChsYWJlbCkgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkJy
ZWFrU3RhdGVtZW50OworCSAgICAgICAgdGhpcy5sYWJlbCA9IGxhYmVsOworCSAgICB9CisJICAg
IHJldHVybiBCcmVha1N0YXRlbWVudDsKKwl9KCkpOworCWV4cG9ydHMuQnJlYWtTdGF0ZW1lbnQg
PSBCcmVha1N0YXRlbWVudDsKKwl2YXIgQ2FsbEV4cHJlc3Npb24gPSAoZnVuY3Rpb24gKCkgewor
CSAgICBmdW5jdGlvbiBDYWxsRXhwcmVzc2lvbihjYWxsZWUsIGFyZ3MpIHsKKwkgICAgICAgIHRo
aXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5DYWxsRXhwcmVzc2lvbjsKKwkgICAgICAgIHRoaXMu
Y2FsbGVlID0gY2FsbGVlOworCSAgICAgICAgdGhpcy5hcmd1bWVudHMgPSBhcmdzOworCSAgICB9
CisJICAgIHJldHVybiBDYWxsRXhwcmVzc2lvbjsKKwl9KCkpOworCWV4cG9ydHMuQ2FsbEV4cHJl
c3Npb24gPSBDYWxsRXhwcmVzc2lvbjsKKwl2YXIgQ2F0Y2hDbGF1c2UgPSAoZnVuY3Rpb24gKCkg
eworCSAgICBmdW5jdGlvbiBDYXRjaENsYXVzZShwYXJhbSwgYm9keSkgeworCSAgICAgICAgdGhp
cy50eXBlID0gc3ludGF4XzEuU3ludGF4LkNhdGNoQ2xhdXNlOworCSAgICAgICAgdGhpcy5wYXJh
bSA9IHBhcmFtOworCSAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKKwkgICAgfQorCSAgICByZXR1
cm4gQ2F0Y2hDbGF1c2U7CisJfSgpKTsKKwlleHBvcnRzLkNhdGNoQ2xhdXNlID0gQ2F0Y2hDbGF1
c2U7CisJdmFyIENsYXNzQm9keSA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIENsYXNz
Qm9keShib2R5KSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguQ2xhc3NC
b2R5OworCSAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKKwkgICAgfQorCSAgICByZXR1cm4gQ2xh
c3NCb2R5OworCX0oKSk7CisJZXhwb3J0cy5DbGFzc0JvZHkgPSBDbGFzc0JvZHk7CisJdmFyIENs
YXNzRGVjbGFyYXRpb24gPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBDbGFzc0RlY2xh
cmF0aW9uKGlkLCBzdXBlckNsYXNzLCBib2R5KSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50
YXhfMS5TeW50YXguQ2xhc3NEZWNsYXJhdGlvbjsKKwkgICAgICAgIHRoaXMuaWQgPSBpZDsKKwkg
ICAgICAgIHRoaXMuc3VwZXJDbGFzcyA9IHN1cGVyQ2xhc3M7CisJICAgICAgICB0aGlzLmJvZHkg
PSBib2R5OworCSAgICB9CisJICAgIHJldHVybiBDbGFzc0RlY2xhcmF0aW9uOworCX0oKSk7CisJ
ZXhwb3J0cy5DbGFzc0RlY2xhcmF0aW9uID0gQ2xhc3NEZWNsYXJhdGlvbjsKKwl2YXIgQ2xhc3NF
eHByZXNzaW9uID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gQ2xhc3NFeHByZXNzaW9u
KGlkLCBzdXBlckNsYXNzLCBib2R5KSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5T
eW50YXguQ2xhc3NFeHByZXNzaW9uOworCSAgICAgICAgdGhpcy5pZCA9IGlkOworCSAgICAgICAg
dGhpcy5zdXBlckNsYXNzID0gc3VwZXJDbGFzczsKKwkgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7
CisJICAgIH0KKwkgICAgcmV0dXJuIENsYXNzRXhwcmVzc2lvbjsKKwl9KCkpOworCWV4cG9ydHMu
Q2xhc3NFeHByZXNzaW9uID0gQ2xhc3NFeHByZXNzaW9uOworCXZhciBDb21wdXRlZE1lbWJlckV4
cHJlc3Npb24gPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBDb21wdXRlZE1lbWJlckV4
cHJlc3Npb24ob2JqZWN0LCBwcm9wZXJ0eSkgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4
XzEuU3ludGF4Lk1lbWJlckV4cHJlc3Npb247CisJICAgICAgICB0aGlzLmNvbXB1dGVkID0gdHJ1
ZTsKKwkgICAgICAgIHRoaXMub2JqZWN0ID0gb2JqZWN0OworCSAgICAgICAgdGhpcy5wcm9wZXJ0
eSA9IHByb3BlcnR5OworCSAgICB9CisJICAgIHJldHVybiBDb21wdXRlZE1lbWJlckV4cHJlc3Np
b247CisJfSgpKTsKKwlleHBvcnRzLkNvbXB1dGVkTWVtYmVyRXhwcmVzc2lvbiA9IENvbXB1dGVk
TWVtYmVyRXhwcmVzc2lvbjsKKwl2YXIgQ29uZGl0aW9uYWxFeHByZXNzaW9uID0gKGZ1bmN0aW9u
ICgpIHsKKwkgICAgZnVuY3Rpb24gQ29uZGl0aW9uYWxFeHByZXNzaW9uKHRlc3QsIGNvbnNlcXVl
bnQsIGFsdGVybmF0ZSkgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkNv
bmRpdGlvbmFsRXhwcmVzc2lvbjsKKwkgICAgICAgIHRoaXMudGVzdCA9IHRlc3Q7CisJICAgICAg
ICB0aGlzLmNvbnNlcXVlbnQgPSBjb25zZXF1ZW50OworCSAgICAgICAgdGhpcy5hbHRlcm5hdGUg
PSBhbHRlcm5hdGU7CisJICAgIH0KKwkgICAgcmV0dXJuIENvbmRpdGlvbmFsRXhwcmVzc2lvbjsK
Kwl9KCkpOworCWV4cG9ydHMuQ29uZGl0aW9uYWxFeHByZXNzaW9uID0gQ29uZGl0aW9uYWxFeHBy
ZXNzaW9uOworCXZhciBDb250aW51ZVN0YXRlbWVudCA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1
bmN0aW9uIENvbnRpbnVlU3RhdGVtZW50KGxhYmVsKSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBz
eW50YXhfMS5TeW50YXguQ29udGludWVTdGF0ZW1lbnQ7CisJICAgICAgICB0aGlzLmxhYmVsID0g
bGFiZWw7CisJICAgIH0KKwkgICAgcmV0dXJuIENvbnRpbnVlU3RhdGVtZW50OworCX0oKSk7CisJ
ZXhwb3J0cy5Db250aW51ZVN0YXRlbWVudCA9IENvbnRpbnVlU3RhdGVtZW50OworCXZhciBEZWJ1
Z2dlclN0YXRlbWVudCA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIERlYnVnZ2VyU3Rh
dGVtZW50KCkgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkRlYnVnZ2Vy
U3RhdGVtZW50OworCSAgICB9CisJICAgIHJldHVybiBEZWJ1Z2dlclN0YXRlbWVudDsKKwl9KCkp
OworCWV4cG9ydHMuRGVidWdnZXJTdGF0ZW1lbnQgPSBEZWJ1Z2dlclN0YXRlbWVudDsKKwl2YXIg
RGlyZWN0aXZlID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gRGlyZWN0aXZlKGV4cHJl
c3Npb24sIGRpcmVjdGl2ZSkgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4
LkV4cHJlc3Npb25TdGF0ZW1lbnQ7CisJICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNz
aW9uOworCSAgICAgICAgdGhpcy5kaXJlY3RpdmUgPSBkaXJlY3RpdmU7CisJICAgIH0KKwkgICAg
cmV0dXJuIERpcmVjdGl2ZTsKKwl9KCkpOworCWV4cG9ydHMuRGlyZWN0aXZlID0gRGlyZWN0aXZl
OworCXZhciBEb1doaWxlU3RhdGVtZW50ID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24g
RG9XaGlsZVN0YXRlbWVudChib2R5LCB0ZXN0KSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50
YXhfMS5TeW50YXguRG9XaGlsZVN0YXRlbWVudDsKKwkgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7
CisJICAgICAgICB0aGlzLnRlc3QgPSB0ZXN0OworCSAgICB9CisJICAgIHJldHVybiBEb1doaWxl
U3RhdGVtZW50OworCX0oKSk7CisJZXhwb3J0cy5Eb1doaWxlU3RhdGVtZW50ID0gRG9XaGlsZVN0
YXRlbWVudDsKKwl2YXIgRW1wdHlTdGF0ZW1lbnQgPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5j
dGlvbiBFbXB0eVN0YXRlbWVudCgpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5
bnRheC5FbXB0eVN0YXRlbWVudDsKKwkgICAgfQorCSAgICByZXR1cm4gRW1wdHlTdGF0ZW1lbnQ7
CisJfSgpKTsKKwlleHBvcnRzLkVtcHR5U3RhdGVtZW50ID0gRW1wdHlTdGF0ZW1lbnQ7CisJdmFy
IEV4cG9ydEFsbERlY2xhcmF0aW9uID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gRXhw
b3J0QWxsRGVjbGFyYXRpb24oc291cmNlKSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhf
MS5TeW50YXguRXhwb3J0QWxsRGVjbGFyYXRpb247CisJICAgICAgICB0aGlzLnNvdXJjZSA9IHNv
dXJjZTsKKwkgICAgfQorCSAgICByZXR1cm4gRXhwb3J0QWxsRGVjbGFyYXRpb247CisJfSgpKTsK
KwlleHBvcnRzLkV4cG9ydEFsbERlY2xhcmF0aW9uID0gRXhwb3J0QWxsRGVjbGFyYXRpb247CisJ
dmFyIEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbiA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0
aW9uIEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihkZWNsYXJhdGlvbikgeworCSAgICAgICAgdGhp
cy50eXBlID0gc3ludGF4XzEuU3ludGF4LkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbjsKKwkgICAg
ICAgIHRoaXMuZGVjbGFyYXRpb24gPSBkZWNsYXJhdGlvbjsKKwkgICAgfQorCSAgICByZXR1cm4g
RXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uOworCX0oKSk7CisJZXhwb3J0cy5FeHBvcnREZWZhdWx0
RGVjbGFyYXRpb24gPSBFeHBvcnREZWZhdWx0RGVjbGFyYXRpb247CisJdmFyIEV4cG9ydE5hbWVk
RGVjbGFyYXRpb24gPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBFeHBvcnROYW1lZERl
Y2xhcmF0aW9uKGRlY2xhcmF0aW9uLCBzcGVjaWZpZXJzLCBzb3VyY2UpIHsKKwkgICAgICAgIHRo
aXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5FeHBvcnROYW1lZERlY2xhcmF0aW9uOworCSAgICAg
ICAgdGhpcy5kZWNsYXJhdGlvbiA9IGRlY2xhcmF0aW9uOworCSAgICAgICAgdGhpcy5zcGVjaWZp
ZXJzID0gc3BlY2lmaWVyczsKKwkgICAgICAgIHRoaXMuc291cmNlID0gc291cmNlOworCSAgICB9
CisJICAgIHJldHVybiBFeHBvcnROYW1lZERlY2xhcmF0aW9uOworCX0oKSk7CisJZXhwb3J0cy5F
eHBvcnROYW1lZERlY2xhcmF0aW9uID0gRXhwb3J0TmFtZWREZWNsYXJhdGlvbjsKKwl2YXIgRXhw
b3J0U3BlY2lmaWVyID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gRXhwb3J0U3BlY2lm
aWVyKGxvY2FsLCBleHBvcnRlZCkgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3lu
dGF4LkV4cG9ydFNwZWNpZmllcjsKKwkgICAgICAgIHRoaXMuZXhwb3J0ZWQgPSBleHBvcnRlZDsK
KwkgICAgICAgIHRoaXMubG9jYWwgPSBsb2NhbDsKKwkgICAgfQorCSAgICByZXR1cm4gRXhwb3J0
U3BlY2lmaWVyOworCX0oKSk7CisJZXhwb3J0cy5FeHBvcnRTcGVjaWZpZXIgPSBFeHBvcnRTcGVj
aWZpZXI7CisJdmFyIEV4cHJlc3Npb25TdGF0ZW1lbnQgPSAoZnVuY3Rpb24gKCkgeworCSAgICBm
dW5jdGlvbiBFeHByZXNzaW9uU3RhdGVtZW50KGV4cHJlc3Npb24pIHsKKwkgICAgICAgIHRoaXMu
dHlwZSA9IHN5bnRheF8xLlN5bnRheC5FeHByZXNzaW9uU3RhdGVtZW50OworCSAgICAgICAgdGhp
cy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjsKKwkgICAgfQorCSAgICByZXR1cm4gRXhwcmVzc2lv
blN0YXRlbWVudDsKKwl9KCkpOworCWV4cG9ydHMuRXhwcmVzc2lvblN0YXRlbWVudCA9IEV4cHJl
c3Npb25TdGF0ZW1lbnQ7CisJdmFyIEZvckluU3RhdGVtZW50ID0gKGZ1bmN0aW9uICgpIHsKKwkg
ICAgZnVuY3Rpb24gRm9ySW5TdGF0ZW1lbnQobGVmdCwgcmlnaHQsIGJvZHkpIHsKKwkgICAgICAg
IHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5Gb3JJblN0YXRlbWVudDsKKwkgICAgICAgIHRo
aXMubGVmdCA9IGxlZnQ7CisJICAgICAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7CisJICAgICAgICB0
aGlzLmJvZHkgPSBib2R5OworCSAgICAgICAgdGhpcy5lYWNoID0gZmFsc2U7CisJICAgIH0KKwkg
ICAgcmV0dXJuIEZvckluU3RhdGVtZW50OworCX0oKSk7CisJZXhwb3J0cy5Gb3JJblN0YXRlbWVu
dCA9IEZvckluU3RhdGVtZW50OworCXZhciBGb3JPZlN0YXRlbWVudCA9IChmdW5jdGlvbiAoKSB7
CisJICAgIGZ1bmN0aW9uIEZvck9mU3RhdGVtZW50KGxlZnQsIHJpZ2h0LCBib2R5KSB7CisJICAg
ICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguRm9yT2ZTdGF0ZW1lbnQ7CisJICAgICAg
ICB0aGlzLmxlZnQgPSBsZWZ0OworCSAgICAgICAgdGhpcy5yaWdodCA9IHJpZ2h0OworCSAgICAg
ICAgdGhpcy5ib2R5ID0gYm9keTsKKwkgICAgfQorCSAgICByZXR1cm4gRm9yT2ZTdGF0ZW1lbnQ7
CisJfSgpKTsKKwlleHBvcnRzLkZvck9mU3RhdGVtZW50ID0gRm9yT2ZTdGF0ZW1lbnQ7CisJdmFy
IEZvclN0YXRlbWVudCA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIEZvclN0YXRlbWVu
dChpbml0LCB0ZXN0LCB1cGRhdGUsIGJvZHkpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRh
eF8xLlN5bnRheC5Gb3JTdGF0ZW1lbnQ7CisJICAgICAgICB0aGlzLmluaXQgPSBpbml0OworCSAg
ICAgICAgdGhpcy50ZXN0ID0gdGVzdDsKKwkgICAgICAgIHRoaXMudXBkYXRlID0gdXBkYXRlOwor
CSAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKKwkgICAgfQorCSAgICByZXR1cm4gRm9yU3RhdGVt
ZW50OworCX0oKSk7CisJZXhwb3J0cy5Gb3JTdGF0ZW1lbnQgPSBGb3JTdGF0ZW1lbnQ7CisJdmFy
IEZ1bmN0aW9uRGVjbGFyYXRpb24gPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBGdW5j
dGlvbkRlY2xhcmF0aW9uKGlkLCBwYXJhbXMsIGJvZHksIGdlbmVyYXRvcikgeworCSAgICAgICAg
dGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkZ1bmN0aW9uRGVjbGFyYXRpb247CisJICAgICAg
ICB0aGlzLmlkID0gaWQ7CisJICAgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtczsKKwkgICAgICAg
IHRoaXMuYm9keSA9IGJvZHk7CisJICAgICAgICB0aGlzLmdlbmVyYXRvciA9IGdlbmVyYXRvcjsK
KwkgICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGZhbHNlOworCSAgICAgICAgdGhpcy5hc3luYyA9
IGZhbHNlOworCSAgICB9CisJICAgIHJldHVybiBGdW5jdGlvbkRlY2xhcmF0aW9uOworCX0oKSk7
CisJZXhwb3J0cy5GdW5jdGlvbkRlY2xhcmF0aW9uID0gRnVuY3Rpb25EZWNsYXJhdGlvbjsKKwl2
YXIgRnVuY3Rpb25FeHByZXNzaW9uID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gRnVu
Y3Rpb25FeHByZXNzaW9uKGlkLCBwYXJhbXMsIGJvZHksIGdlbmVyYXRvcikgeworCSAgICAgICAg
dGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkZ1bmN0aW9uRXhwcmVzc2lvbjsKKwkgICAgICAg
IHRoaXMuaWQgPSBpZDsKKwkgICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zOworCSAgICAgICAg
dGhpcy5ib2R5ID0gYm9keTsKKwkgICAgICAgIHRoaXMuZ2VuZXJhdG9yID0gZ2VuZXJhdG9yOwor
CSAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZmFsc2U7CisJICAgICAgICB0aGlzLmFzeW5jID0g
ZmFsc2U7CisJICAgIH0KKwkgICAgcmV0dXJuIEZ1bmN0aW9uRXhwcmVzc2lvbjsKKwl9KCkpOwor
CWV4cG9ydHMuRnVuY3Rpb25FeHByZXNzaW9uID0gRnVuY3Rpb25FeHByZXNzaW9uOworCXZhciBJ
ZGVudGlmaWVyID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gSWRlbnRpZmllcihuYW1l
KSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguSWRlbnRpZmllcjsKKwkg
ICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CisJICAgIH0KKwkgICAgcmV0dXJuIElkZW50aWZpZXI7
CisJfSgpKTsKKwlleHBvcnRzLklkZW50aWZpZXIgPSBJZGVudGlmaWVyOworCXZhciBJZlN0YXRl
bWVudCA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIElmU3RhdGVtZW50KHRlc3QsIGNv
bnNlcXVlbnQsIGFsdGVybmF0ZSkgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3lu
dGF4LklmU3RhdGVtZW50OworCSAgICAgICAgdGhpcy50ZXN0ID0gdGVzdDsKKwkgICAgICAgIHRo
aXMuY29uc2VxdWVudCA9IGNvbnNlcXVlbnQ7CisJICAgICAgICB0aGlzLmFsdGVybmF0ZSA9IGFs
dGVybmF0ZTsKKwkgICAgfQorCSAgICByZXR1cm4gSWZTdGF0ZW1lbnQ7CisJfSgpKTsKKwlleHBv
cnRzLklmU3RhdGVtZW50ID0gSWZTdGF0ZW1lbnQ7CisJdmFyIEltcG9ydERlY2xhcmF0aW9uID0g
KGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gSW1wb3J0RGVjbGFyYXRpb24oc3BlY2lmaWVy
cywgc291cmNlKSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguSW1wb3J0
RGVjbGFyYXRpb247CisJICAgICAgICB0aGlzLnNwZWNpZmllcnMgPSBzcGVjaWZpZXJzOworCSAg
ICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7CisJICAgIH0KKwkgICAgcmV0dXJuIEltcG9ydERl
Y2xhcmF0aW9uOworCX0oKSk7CisJZXhwb3J0cy5JbXBvcnREZWNsYXJhdGlvbiA9IEltcG9ydERl
Y2xhcmF0aW9uOworCXZhciBJbXBvcnREZWZhdWx0U3BlY2lmaWVyID0gKGZ1bmN0aW9uICgpIHsK
KwkgICAgZnVuY3Rpb24gSW1wb3J0RGVmYXVsdFNwZWNpZmllcihsb2NhbCkgeworCSAgICAgICAg
dGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkltcG9ydERlZmF1bHRTcGVjaWZpZXI7CisJICAg
ICAgICB0aGlzLmxvY2FsID0gbG9jYWw7CisJICAgIH0KKwkgICAgcmV0dXJuIEltcG9ydERlZmF1
bHRTcGVjaWZpZXI7CisJfSgpKTsKKwlleHBvcnRzLkltcG9ydERlZmF1bHRTcGVjaWZpZXIgPSBJ
bXBvcnREZWZhdWx0U3BlY2lmaWVyOworCXZhciBJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIgPSAo
ZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIobG9j
YWwpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5JbXBvcnROYW1lc3Bh
Y2VTcGVjaWZpZXI7CisJICAgICAgICB0aGlzLmxvY2FsID0gbG9jYWw7CisJICAgIH0KKwkgICAg
cmV0dXJuIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjsKKwl9KCkpOworCWV4cG9ydHMuSW1wb3J0
TmFtZXNwYWNlU3BlY2lmaWVyID0gSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyOworCXZhciBJbXBv
cnRTcGVjaWZpZXIgPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBJbXBvcnRTcGVjaWZp
ZXIobG9jYWwsIGltcG9ydGVkKSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50
YXguSW1wb3J0U3BlY2lmaWVyOworCSAgICAgICAgdGhpcy5sb2NhbCA9IGxvY2FsOworCSAgICAg
ICAgdGhpcy5pbXBvcnRlZCA9IGltcG9ydGVkOworCSAgICB9CisJICAgIHJldHVybiBJbXBvcnRT
cGVjaWZpZXI7CisJfSgpKTsKKwlleHBvcnRzLkltcG9ydFNwZWNpZmllciA9IEltcG9ydFNwZWNp
ZmllcjsKKwl2YXIgTGFiZWxlZFN0YXRlbWVudCA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0
aW9uIExhYmVsZWRTdGF0ZW1lbnQobGFiZWwsIGJvZHkpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9
IHN5bnRheF8xLlN5bnRheC5MYWJlbGVkU3RhdGVtZW50OworCSAgICAgICAgdGhpcy5sYWJlbCA9
IGxhYmVsOworCSAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKKwkgICAgfQorCSAgICByZXR1cm4g
TGFiZWxlZFN0YXRlbWVudDsKKwl9KCkpOworCWV4cG9ydHMuTGFiZWxlZFN0YXRlbWVudCA9IExh
YmVsZWRTdGF0ZW1lbnQ7CisJdmFyIExpdGVyYWwgPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5j
dGlvbiBMaXRlcmFsKHZhbHVlLCByYXcpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8x
LlN5bnRheC5MaXRlcmFsOworCSAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOworCSAgICAgICAg
dGhpcy5yYXcgPSByYXc7CisJICAgIH0KKwkgICAgcmV0dXJuIExpdGVyYWw7CisJfSgpKTsKKwll
eHBvcnRzLkxpdGVyYWwgPSBMaXRlcmFsOworCXZhciBNZXRhUHJvcGVydHkgPSAoZnVuY3Rpb24g
KCkgeworCSAgICBmdW5jdGlvbiBNZXRhUHJvcGVydHkobWV0YSwgcHJvcGVydHkpIHsKKwkgICAg
ICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5NZXRhUHJvcGVydHk7CisJICAgICAgICB0
aGlzLm1ldGEgPSBtZXRhOworCSAgICAgICAgdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5OworCSAg
ICB9CisJICAgIHJldHVybiBNZXRhUHJvcGVydHk7CisJfSgpKTsKKwlleHBvcnRzLk1ldGFQcm9w
ZXJ0eSA9IE1ldGFQcm9wZXJ0eTsKKwl2YXIgTWV0aG9kRGVmaW5pdGlvbiA9IChmdW5jdGlvbiAo
KSB7CisJICAgIGZ1bmN0aW9uIE1ldGhvZERlZmluaXRpb24oa2V5LCBjb21wdXRlZCwgdmFsdWUs
IGtpbmQsIGlzU3RhdGljKSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXgu
TWV0aG9kRGVmaW5pdGlvbjsKKwkgICAgICAgIHRoaXMua2V5ID0ga2V5OworCSAgICAgICAgdGhp
cy5jb21wdXRlZCA9IGNvbXB1dGVkOworCSAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOworCSAg
ICAgICAgdGhpcy5raW5kID0ga2luZDsKKwkgICAgICAgIHRoaXMuc3RhdGljID0gaXNTdGF0aWM7
CisJICAgIH0KKwkgICAgcmV0dXJuIE1ldGhvZERlZmluaXRpb247CisJfSgpKTsKKwlleHBvcnRz
Lk1ldGhvZERlZmluaXRpb24gPSBNZXRob2REZWZpbml0aW9uOworCXZhciBNb2R1bGUgPSAoZnVu
Y3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBNb2R1bGUoYm9keSkgeworCSAgICAgICAgdGhpcy50
eXBlID0gc3ludGF4XzEuU3ludGF4LlByb2dyYW07CisJICAgICAgICB0aGlzLmJvZHkgPSBib2R5
OworCSAgICAgICAgdGhpcy5zb3VyY2VUeXBlID0gJ21vZHVsZSc7CisJICAgIH0KKwkgICAgcmV0
dXJuIE1vZHVsZTsKKwl9KCkpOworCWV4cG9ydHMuTW9kdWxlID0gTW9kdWxlOworCXZhciBOZXdF
eHByZXNzaW9uID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gTmV3RXhwcmVzc2lvbihj
YWxsZWUsIGFyZ3MpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5OZXdF
eHByZXNzaW9uOworCSAgICAgICAgdGhpcy5jYWxsZWUgPSBjYWxsZWU7CisJICAgICAgICB0aGlz
LmFyZ3VtZW50cyA9IGFyZ3M7CisJICAgIH0KKwkgICAgcmV0dXJuIE5ld0V4cHJlc3Npb247CisJ
fSgpKTsKKwlleHBvcnRzLk5ld0V4cHJlc3Npb24gPSBOZXdFeHByZXNzaW9uOworCXZhciBPYmpl
Y3RFeHByZXNzaW9uID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gT2JqZWN0RXhwcmVz
c2lvbihwcm9wZXJ0aWVzKSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXgu
T2JqZWN0RXhwcmVzc2lvbjsKKwkgICAgICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7
CisJICAgIH0KKwkgICAgcmV0dXJuIE9iamVjdEV4cHJlc3Npb247CisJfSgpKTsKKwlleHBvcnRz
Lk9iamVjdEV4cHJlc3Npb24gPSBPYmplY3RFeHByZXNzaW9uOworCXZhciBPYmplY3RQYXR0ZXJu
ID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gT2JqZWN0UGF0dGVybihwcm9wZXJ0aWVz
KSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguT2JqZWN0UGF0dGVybjsK
KwkgICAgICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7CisJICAgIH0KKwkgICAgcmV0
dXJuIE9iamVjdFBhdHRlcm47CisJfSgpKTsKKwlleHBvcnRzLk9iamVjdFBhdHRlcm4gPSBPYmpl
Y3RQYXR0ZXJuOworCXZhciBQcm9wZXJ0eSA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9u
IFByb3BlcnR5KGtpbmQsIGtleSwgY29tcHV0ZWQsIHZhbHVlLCBtZXRob2QsIHNob3J0aGFuZCkg
eworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LlByb3BlcnR5OworCSAgICAg
ICAgdGhpcy5rZXkgPSBrZXk7CisJICAgICAgICB0aGlzLmNvbXB1dGVkID0gY29tcHV0ZWQ7CisJ
ICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7CisJICAgICAgICB0aGlzLmtpbmQgPSBraW5kOwor
CSAgICAgICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7CisJICAgICAgICB0aGlzLnNob3J0aGFuZCA9
IHNob3J0aGFuZDsKKwkgICAgfQorCSAgICByZXR1cm4gUHJvcGVydHk7CisJfSgpKTsKKwlleHBv
cnRzLlByb3BlcnR5ID0gUHJvcGVydHk7CisJdmFyIFJlZ2V4TGl0ZXJhbCA9IChmdW5jdGlvbiAo
KSB7CisJICAgIGZ1bmN0aW9uIFJlZ2V4TGl0ZXJhbCh2YWx1ZSwgcmF3LCByZWdleCkgeworCSAg
ICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LkxpdGVyYWw7CisJICAgICAgICB0aGlz
LnZhbHVlID0gdmFsdWU7CisJICAgICAgICB0aGlzLnJhdyA9IHJhdzsKKwkgICAgICAgIHRoaXMu
cmVnZXggPSByZWdleDsKKwkgICAgfQorCSAgICByZXR1cm4gUmVnZXhMaXRlcmFsOworCX0oKSk7
CisJZXhwb3J0cy5SZWdleExpdGVyYWwgPSBSZWdleExpdGVyYWw7CisJdmFyIFJlc3RFbGVtZW50
ID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gUmVzdEVsZW1lbnQoYXJndW1lbnQpIHsK
KwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5SZXN0RWxlbWVudDsKKwkgICAg
ICAgIHRoaXMuYXJndW1lbnQgPSBhcmd1bWVudDsKKwkgICAgfQorCSAgICByZXR1cm4gUmVzdEVs
ZW1lbnQ7CisJfSgpKTsKKwlleHBvcnRzLlJlc3RFbGVtZW50ID0gUmVzdEVsZW1lbnQ7CisJdmFy
IFJldHVyblN0YXRlbWVudCA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIFJldHVyblN0
YXRlbWVudChhcmd1bWVudCkgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4
LlJldHVyblN0YXRlbWVudDsKKwkgICAgICAgIHRoaXMuYXJndW1lbnQgPSBhcmd1bWVudDsKKwkg
ICAgfQorCSAgICByZXR1cm4gUmV0dXJuU3RhdGVtZW50OworCX0oKSk7CisJZXhwb3J0cy5SZXR1
cm5TdGF0ZW1lbnQgPSBSZXR1cm5TdGF0ZW1lbnQ7CisJdmFyIFNjcmlwdCA9IChmdW5jdGlvbiAo
KSB7CisJICAgIGZ1bmN0aW9uIFNjcmlwdChib2R5KSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBz
eW50YXhfMS5TeW50YXguUHJvZ3JhbTsKKwkgICAgICAgIHRoaXMuYm9keSA9IGJvZHk7CisJICAg
ICAgICB0aGlzLnNvdXJjZVR5cGUgPSAnc2NyaXB0JzsKKwkgICAgfQorCSAgICByZXR1cm4gU2Ny
aXB0OworCX0oKSk7CisJZXhwb3J0cy5TY3JpcHQgPSBTY3JpcHQ7CisJdmFyIFNlcXVlbmNlRXhw
cmVzc2lvbiA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIFNlcXVlbmNlRXhwcmVzc2lv
bihleHByZXNzaW9ucykgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LlNl
cXVlbmNlRXhwcmVzc2lvbjsKKwkgICAgICAgIHRoaXMuZXhwcmVzc2lvbnMgPSBleHByZXNzaW9u
czsKKwkgICAgfQorCSAgICByZXR1cm4gU2VxdWVuY2VFeHByZXNzaW9uOworCX0oKSk7CisJZXhw
b3J0cy5TZXF1ZW5jZUV4cHJlc3Npb24gPSBTZXF1ZW5jZUV4cHJlc3Npb247CisJdmFyIFNwcmVh
ZEVsZW1lbnQgPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBTcHJlYWRFbGVtZW50KGFy
Z3VtZW50KSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguU3ByZWFkRWxl
bWVudDsKKwkgICAgICAgIHRoaXMuYXJndW1lbnQgPSBhcmd1bWVudDsKKwkgICAgfQorCSAgICBy
ZXR1cm4gU3ByZWFkRWxlbWVudDsKKwl9KCkpOworCWV4cG9ydHMuU3ByZWFkRWxlbWVudCA9IFNw
cmVhZEVsZW1lbnQ7CisJdmFyIFN0YXRpY01lbWJlckV4cHJlc3Npb24gPSAoZnVuY3Rpb24gKCkg
eworCSAgICBmdW5jdGlvbiBTdGF0aWNNZW1iZXJFeHByZXNzaW9uKG9iamVjdCwgcHJvcGVydHkp
IHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5NZW1iZXJFeHByZXNzaW9u
OworCSAgICAgICAgdGhpcy5jb21wdXRlZCA9IGZhbHNlOworCSAgICAgICAgdGhpcy5vYmplY3Qg
PSBvYmplY3Q7CisJICAgICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7CisJICAgIH0KKwkg
ICAgcmV0dXJuIFN0YXRpY01lbWJlckV4cHJlc3Npb247CisJfSgpKTsKKwlleHBvcnRzLlN0YXRp
Y01lbWJlckV4cHJlc3Npb24gPSBTdGF0aWNNZW1iZXJFeHByZXNzaW9uOworCXZhciBTdXBlciA9
IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIFN1cGVyKCkgeworCSAgICAgICAgdGhpcy50
eXBlID0gc3ludGF4XzEuU3ludGF4LlN1cGVyOworCSAgICB9CisJICAgIHJldHVybiBTdXBlcjsK
Kwl9KCkpOworCWV4cG9ydHMuU3VwZXIgPSBTdXBlcjsKKwl2YXIgU3dpdGNoQ2FzZSA9IChmdW5j
dGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIFN3aXRjaENhc2UodGVzdCwgY29uc2VxdWVudCkgewor
CSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LlN3aXRjaENhc2U7CisJICAgICAg
ICB0aGlzLnRlc3QgPSB0ZXN0OworCSAgICAgICAgdGhpcy5jb25zZXF1ZW50ID0gY29uc2VxdWVu
dDsKKwkgICAgfQorCSAgICByZXR1cm4gU3dpdGNoQ2FzZTsKKwl9KCkpOworCWV4cG9ydHMuU3dp
dGNoQ2FzZSA9IFN3aXRjaENhc2U7CisJdmFyIFN3aXRjaFN0YXRlbWVudCA9IChmdW5jdGlvbiAo
KSB7CisJICAgIGZ1bmN0aW9uIFN3aXRjaFN0YXRlbWVudChkaXNjcmltaW5hbnQsIGNhc2VzKSB7
CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguU3dpdGNoU3RhdGVtZW50Owor
CSAgICAgICAgdGhpcy5kaXNjcmltaW5hbnQgPSBkaXNjcmltaW5hbnQ7CisJICAgICAgICB0aGlz
LmNhc2VzID0gY2FzZXM7CisJICAgIH0KKwkgICAgcmV0dXJuIFN3aXRjaFN0YXRlbWVudDsKKwl9
KCkpOworCWV4cG9ydHMuU3dpdGNoU3RhdGVtZW50ID0gU3dpdGNoU3RhdGVtZW50OworCXZhciBU
YWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24gPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBU
YWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24odGFnLCBxdWFzaSkgeworCSAgICAgICAgdGhpcy50eXBl
ID0gc3ludGF4XzEuU3ludGF4LlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbjsKKwkgICAgICAgIHRo
aXMudGFnID0gdGFnOworCSAgICAgICAgdGhpcy5xdWFzaSA9IHF1YXNpOworCSAgICB9CisJICAg
IHJldHVybiBUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb247CisJfSgpKTsKKwlleHBvcnRzLlRhZ2dl
ZFRlbXBsYXRlRXhwcmVzc2lvbiA9IFRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbjsKKwl2YXIgVGVt
cGxhdGVFbGVtZW50ID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gVGVtcGxhdGVFbGVt
ZW50KHZhbHVlLCB0YWlsKSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXgu
VGVtcGxhdGVFbGVtZW50OworCSAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOworCSAgICAgICAg
dGhpcy50YWlsID0gdGFpbDsKKwkgICAgfQorCSAgICByZXR1cm4gVGVtcGxhdGVFbGVtZW50Owor
CX0oKSk7CisJZXhwb3J0cy5UZW1wbGF0ZUVsZW1lbnQgPSBUZW1wbGF0ZUVsZW1lbnQ7CisJdmFy
IFRlbXBsYXRlTGl0ZXJhbCA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIFRlbXBsYXRl
TGl0ZXJhbChxdWFzaXMsIGV4cHJlc3Npb25zKSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50
YXhfMS5TeW50YXguVGVtcGxhdGVMaXRlcmFsOworCSAgICAgICAgdGhpcy5xdWFzaXMgPSBxdWFz
aXM7CisJICAgICAgICB0aGlzLmV4cHJlc3Npb25zID0gZXhwcmVzc2lvbnM7CisJICAgIH0KKwkg
ICAgcmV0dXJuIFRlbXBsYXRlTGl0ZXJhbDsKKwl9KCkpOworCWV4cG9ydHMuVGVtcGxhdGVMaXRl
cmFsID0gVGVtcGxhdGVMaXRlcmFsOworCXZhciBUaGlzRXhwcmVzc2lvbiA9IChmdW5jdGlvbiAo
KSB7CisJICAgIGZ1bmN0aW9uIFRoaXNFeHByZXNzaW9uKCkgeworCSAgICAgICAgdGhpcy50eXBl
ID0gc3ludGF4XzEuU3ludGF4LlRoaXNFeHByZXNzaW9uOworCSAgICB9CisJICAgIHJldHVybiBU
aGlzRXhwcmVzc2lvbjsKKwl9KCkpOworCWV4cG9ydHMuVGhpc0V4cHJlc3Npb24gPSBUaGlzRXhw
cmVzc2lvbjsKKwl2YXIgVGhyb3dTdGF0ZW1lbnQgPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5j
dGlvbiBUaHJvd1N0YXRlbWVudChhcmd1bWVudCkgeworCSAgICAgICAgdGhpcy50eXBlID0gc3lu
dGF4XzEuU3ludGF4LlRocm93U3RhdGVtZW50OworCSAgICAgICAgdGhpcy5hcmd1bWVudCA9IGFy
Z3VtZW50OworCSAgICB9CisJICAgIHJldHVybiBUaHJvd1N0YXRlbWVudDsKKwl9KCkpOworCWV4
cG9ydHMuVGhyb3dTdGF0ZW1lbnQgPSBUaHJvd1N0YXRlbWVudDsKKwl2YXIgVHJ5U3RhdGVtZW50
ID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gVHJ5U3RhdGVtZW50KGJsb2NrLCBoYW5k
bGVyLCBmaW5hbGl6ZXIpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5U
cnlTdGF0ZW1lbnQ7CisJICAgICAgICB0aGlzLmJsb2NrID0gYmxvY2s7CisJICAgICAgICB0aGlz
LmhhbmRsZXIgPSBoYW5kbGVyOworCSAgICAgICAgdGhpcy5maW5hbGl6ZXIgPSBmaW5hbGl6ZXI7
CisJICAgIH0KKwkgICAgcmV0dXJuIFRyeVN0YXRlbWVudDsKKwl9KCkpOworCWV4cG9ydHMuVHJ5
U3RhdGVtZW50ID0gVHJ5U3RhdGVtZW50OworCXZhciBVbmFyeUV4cHJlc3Npb24gPSAoZnVuY3Rp
b24gKCkgeworCSAgICBmdW5jdGlvbiBVbmFyeUV4cHJlc3Npb24ob3BlcmF0b3IsIGFyZ3VtZW50
KSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguVW5hcnlFeHByZXNzaW9u
OworCSAgICAgICAgdGhpcy5vcGVyYXRvciA9IG9wZXJhdG9yOworCSAgICAgICAgdGhpcy5hcmd1
bWVudCA9IGFyZ3VtZW50OworCSAgICAgICAgdGhpcy5wcmVmaXggPSB0cnVlOworCSAgICB9CisJ
ICAgIHJldHVybiBVbmFyeUV4cHJlc3Npb247CisJfSgpKTsKKwlleHBvcnRzLlVuYXJ5RXhwcmVz
c2lvbiA9IFVuYXJ5RXhwcmVzc2lvbjsKKwl2YXIgVXBkYXRlRXhwcmVzc2lvbiA9IChmdW5jdGlv
biAoKSB7CisJICAgIGZ1bmN0aW9uIFVwZGF0ZUV4cHJlc3Npb24ob3BlcmF0b3IsIGFyZ3VtZW50
LCBwcmVmaXgpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5VcGRhdGVF
eHByZXNzaW9uOworCSAgICAgICAgdGhpcy5vcGVyYXRvciA9IG9wZXJhdG9yOworCSAgICAgICAg
dGhpcy5hcmd1bWVudCA9IGFyZ3VtZW50OworCSAgICAgICAgdGhpcy5wcmVmaXggPSBwcmVmaXg7
CisJICAgIH0KKwkgICAgcmV0dXJuIFVwZGF0ZUV4cHJlc3Npb247CisJfSgpKTsKKwlleHBvcnRz
LlVwZGF0ZUV4cHJlc3Npb24gPSBVcGRhdGVFeHByZXNzaW9uOworCXZhciBWYXJpYWJsZURlY2xh
cmF0aW9uID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gVmFyaWFibGVEZWNsYXJhdGlv
bihkZWNsYXJhdGlvbnMsIGtpbmQpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5
bnRheC5WYXJpYWJsZURlY2xhcmF0aW9uOworCSAgICAgICAgdGhpcy5kZWNsYXJhdGlvbnMgPSBk
ZWNsYXJhdGlvbnM7CisJICAgICAgICB0aGlzLmtpbmQgPSBraW5kOworCSAgICB9CisJICAgIHJl
dHVybiBWYXJpYWJsZURlY2xhcmF0aW9uOworCX0oKSk7CisJZXhwb3J0cy5WYXJpYWJsZURlY2xh
cmF0aW9uID0gVmFyaWFibGVEZWNsYXJhdGlvbjsKKwl2YXIgVmFyaWFibGVEZWNsYXJhdG9yID0g
KGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gVmFyaWFibGVEZWNsYXJhdG9yKGlkLCBpbml0
KSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBzeW50YXhfMS5TeW50YXguVmFyaWFibGVEZWNsYXJh
dG9yOworCSAgICAgICAgdGhpcy5pZCA9IGlkOworCSAgICAgICAgdGhpcy5pbml0ID0gaW5pdDsK
KwkgICAgfQorCSAgICByZXR1cm4gVmFyaWFibGVEZWNsYXJhdG9yOworCX0oKSk7CisJZXhwb3J0
cy5WYXJpYWJsZURlY2xhcmF0b3IgPSBWYXJpYWJsZURlY2xhcmF0b3I7CisJdmFyIFdoaWxlU3Rh
dGVtZW50ID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gV2hpbGVTdGF0ZW1lbnQodGVz
dCwgYm9keSkgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LldoaWxlU3Rh
dGVtZW50OworCSAgICAgICAgdGhpcy50ZXN0ID0gdGVzdDsKKwkgICAgICAgIHRoaXMuYm9keSA9
IGJvZHk7CisJICAgIH0KKwkgICAgcmV0dXJuIFdoaWxlU3RhdGVtZW50OworCX0oKSk7CisJZXhw
b3J0cy5XaGlsZVN0YXRlbWVudCA9IFdoaWxlU3RhdGVtZW50OworCXZhciBXaXRoU3RhdGVtZW50
ID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gV2l0aFN0YXRlbWVudChvYmplY3QsIGJv
ZHkpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IHN5bnRheF8xLlN5bnRheC5XaXRoU3RhdGVtZW50
OworCSAgICAgICAgdGhpcy5vYmplY3QgPSBvYmplY3Q7CisJICAgICAgICB0aGlzLmJvZHkgPSBi
b2R5OworCSAgICB9CisJICAgIHJldHVybiBXaXRoU3RhdGVtZW50OworCX0oKSk7CisJZXhwb3J0
cy5XaXRoU3RhdGVtZW50ID0gV2l0aFN0YXRlbWVudDsKKwl2YXIgWWllbGRFeHByZXNzaW9uID0g
KGZ1bmN0aW9uICgpIHsKKwkgICAgZnVuY3Rpb24gWWllbGRFeHByZXNzaW9uKGFyZ3VtZW50LCBk
ZWxlZ2F0ZSkgeworCSAgICAgICAgdGhpcy50eXBlID0gc3ludGF4XzEuU3ludGF4LllpZWxkRXhw
cmVzc2lvbjsKKwkgICAgICAgIHRoaXMuYXJndW1lbnQgPSBhcmd1bWVudDsKKwkgICAgICAgIHRo
aXMuZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKKwkgICAgfQorCSAgICByZXR1cm4gWWllbGRFeHByZXNz
aW9uOworCX0oKSk7CisJZXhwb3J0cy5ZaWVsZEV4cHJlc3Npb24gPSBZaWVsZEV4cHJlc3Npb247
CisKKworLyoqKi8gfSwKKy8qIDExICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMs
IF9fd2VicGFja19yZXF1aXJlX18pIHsKKworCSJ1c2Ugc3RyaWN0IjsKKy8qIGlzdGFuYnVsIGln
bm9yZSBuZXh0ICovCisJdmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8
fCBmdW5jdGlvbiAoZCwgYikgeworCSAgICBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blBy
b3BlcnR5KHApKSBkW3BdID0gYltwXTsKKwkgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3Ry
dWN0b3IgPSBkOyB9CisJICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVh
dGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTsKKwl9OworCXZh
ciBjaGFyYWN0ZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7CisJdmFyIHRva2VuXzEgPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKDcpOworCXZhciBwYXJzZXJfMSA9IF9fd2VicGFja19yZXF1aXJl
X18oMyk7CisJdmFyIHhodG1sX2VudGl0aWVzXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTsK
Kwl2YXIganN4X3N5bnRheF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7CisJdmFyIE5vZGUg
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTsKKwl2YXIgSlNYTm9kZSA9IF9fd2VicGFja19yZXF1
aXJlX18oMTQpOworCXZhciBKU1hUb2tlbjsKKwkoZnVuY3Rpb24gKEpTWFRva2VuKSB7CisJICAg
IEpTWFRva2VuW0pTWFRva2VuWyJJZGVudGlmaWVyIl0gPSAxMDBdID0gIklkZW50aWZpZXIiOwor
CSAgICBKU1hUb2tlbltKU1hUb2tlblsiVGV4dCJdID0gMTAxXSA9ICJUZXh0IjsKKwl9KShKU1hU
b2tlbiB8fCAoSlNYVG9rZW4gPSB7fSkpOworCXRva2VuXzEuVG9rZW5OYW1lW0pTWFRva2VuLklk
ZW50aWZpZXJdID0gJ0pTWElkZW50aWZpZXInOworCXRva2VuXzEuVG9rZW5OYW1lW0pTWFRva2Vu
LlRleHRdID0gJ0pTWFRleHQnOworCS8vIEZ1bGx5IHF1YWxpZmllZCBlbGVtZW50IG5hbWUsIGUu
Zy4gPHN2ZzpwYXRoPiByZXR1cm5zICJzdmc6cGF0aCIKKwlmdW5jdGlvbiBnZXRRdWFsaWZpZWRF
bGVtZW50TmFtZShlbGVtZW50TmFtZSkgeworCSAgICB2YXIgcXVhbGlmaWVkTmFtZTsKKwkgICAg
c3dpdGNoIChlbGVtZW50TmFtZS50eXBlKSB7CisJICAgICAgICBjYXNlIGpzeF9zeW50YXhfMS5K
U1hTeW50YXguSlNYSWRlbnRpZmllcjoKKwkgICAgICAgICAgICB2YXIgaWQgPSAoZWxlbWVudE5h
bWUpOworCSAgICAgICAgICAgIHF1YWxpZmllZE5hbWUgPSBpZC5uYW1lOworCSAgICAgICAgICAg
IGJyZWFrOworCSAgICAgICAgY2FzZSBqc3hfc3ludGF4XzEuSlNYU3ludGF4LkpTWE5hbWVzcGFj
ZWROYW1lOgorCSAgICAgICAgICAgIHZhciBucyA9IChlbGVtZW50TmFtZSk7CisJICAgICAgICAg
ICAgcXVhbGlmaWVkTmFtZSA9IGdldFF1YWxpZmllZEVsZW1lbnROYW1lKG5zLm5hbWVzcGFjZSkg
KyAnOicgKworCSAgICAgICAgICAgICAgICBnZXRRdWFsaWZpZWRFbGVtZW50TmFtZShucy5uYW1l
KTsKKwkgICAgICAgICAgICBicmVhazsKKwkgICAgICAgIGNhc2UganN4X3N5bnRheF8xLkpTWFN5
bnRheC5KU1hNZW1iZXJFeHByZXNzaW9uOgorCSAgICAgICAgICAgIHZhciBleHByID0gKGVsZW1l
bnROYW1lKTsKKwkgICAgICAgICAgICBxdWFsaWZpZWROYW1lID0gZ2V0UXVhbGlmaWVkRWxlbWVu
dE5hbWUoZXhwci5vYmplY3QpICsgJy4nICsKKwkgICAgICAgICAgICAgICAgZ2V0UXVhbGlmaWVk
RWxlbWVudE5hbWUoZXhwci5wcm9wZXJ0eSk7CisJICAgICAgICAgICAgYnJlYWs7CisJICAgIH0K
KwkgICAgcmV0dXJuIHF1YWxpZmllZE5hbWU7CisJfQorCXZhciBKU1hQYXJzZXIgPSAoZnVuY3Rp
b24gKF9zdXBlcikgeworCSAgICBfX2V4dGVuZHMoSlNYUGFyc2VyLCBfc3VwZXIpOworCSAgICBm
dW5jdGlvbiBKU1hQYXJzZXIoY29kZSwgb3B0aW9ucywgZGVsZWdhdGUpIHsKKwkgICAgICAgIF9z
dXBlci5jYWxsKHRoaXMsIGNvZGUsIG9wdGlvbnMsIGRlbGVnYXRlKTsKKwkgICAgfQorCSAgICBK
U1hQYXJzZXIucHJvdG90eXBlLnBhcnNlUHJpbWFyeUV4cHJlc3Npb24gPSBmdW5jdGlvbiAoKSB7
CisJICAgICAgICByZXR1cm4gdGhpcy5tYXRjaCgnPCcpID8gdGhpcy5wYXJzZUpTWFJvb3QoKSA6
IF9zdXBlci5wcm90b3R5cGUucGFyc2VQcmltYXJ5RXhwcmVzc2lvbi5jYWxsKHRoaXMpOworCSAg
ICB9OworCSAgICBKU1hQYXJzZXIucHJvdG90eXBlLnN0YXJ0SlNYID0gZnVuY3Rpb24gKCkgewor
CSAgICAgICAgLy8gVW53aW5kIHRoZSBzY2FubmVyIGJlZm9yZSB0aGUgbG9va2FoZWFkIHRva2Vu
LgorCSAgICAgICAgdGhpcy5zY2FubmVyLmluZGV4ID0gdGhpcy5zdGFydE1hcmtlci5pbmRleDsK
KwkgICAgICAgIHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyID0gdGhpcy5zdGFydE1hcmtlci5saW5l
TnVtYmVyOworCSAgICAgICAgdGhpcy5zY2FubmVyLmxpbmVTdGFydCA9IHRoaXMuc3RhcnRNYXJr
ZXIubGluZVN0YXJ0OworCSAgICB9OworCSAgICBKU1hQYXJzZXIucHJvdG90eXBlLmZpbmlzaEpT
WCA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIC8vIFByaW1lIHRoZSBuZXh0IGxvb2thaGVhZC4K
KwkgICAgICAgIHRoaXMubmV4dFRva2VuKCk7CisJICAgIH07CisJICAgIEpTWFBhcnNlci5wcm90
b3R5cGUucmVlbnRlckpTWCA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHRoaXMuc3RhcnRKU1go
KTsKKwkgICAgICAgIHRoaXMuZXhwZWN0SlNYKCd9Jyk7CisJICAgICAgICAvLyBQb3AgdGhlIGNs
b3NpbmcgJ30nIGFkZGVkIGZyb20gdGhlIGxvb2thaGVhZC4KKwkgICAgICAgIGlmICh0aGlzLmNv
bmZpZy50b2tlbnMpIHsKKwkgICAgICAgICAgICB0aGlzLnRva2Vucy5wb3AoKTsKKwkgICAgICAg
IH0KKwkgICAgfTsKKwkgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5jcmVhdGVKU1hOb2RlID0gZnVu
Y3Rpb24gKCkgeworCSAgICAgICAgdGhpcy5jb2xsZWN0Q29tbWVudHMoKTsKKwkgICAgICAgIHJl
dHVybiB7CisJICAgICAgICAgICAgaW5kZXg6IHRoaXMuc2Nhbm5lci5pbmRleCwKKwkgICAgICAg
ICAgICBsaW5lOiB0aGlzLnNjYW5uZXIubGluZU51bWJlciwKKwkgICAgICAgICAgICBjb2x1bW46
IHRoaXMuc2Nhbm5lci5pbmRleCAtIHRoaXMuc2Nhbm5lci5saW5lU3RhcnQKKwkgICAgICAgIH07
CisJICAgIH07CisJICAgIEpTWFBhcnNlci5wcm90b3R5cGUuY3JlYXRlSlNYQ2hpbGROb2RlID0g
ZnVuY3Rpb24gKCkgeworCSAgICAgICAgcmV0dXJuIHsKKwkgICAgICAgICAgICBpbmRleDogdGhp
cy5zY2FubmVyLmluZGV4LAorCSAgICAgICAgICAgIGxpbmU6IHRoaXMuc2Nhbm5lci5saW5lTnVt
YmVyLAorCSAgICAgICAgICAgIGNvbHVtbjogdGhpcy5zY2FubmVyLmluZGV4IC0gdGhpcy5zY2Fu
bmVyLmxpbmVTdGFydAorCSAgICAgICAgfTsKKwkgICAgfTsKKwkgICAgSlNYUGFyc2VyLnByb3Rv
dHlwZS5zY2FuWEhUTUxFbnRpdHkgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgcmVzdWx0
ID0gJyYnOworCSAgICAgICAgdmFyIHN0ciA9ICcnOworCSAgICAgICAgd2hpbGUgKCF0aGlzLnNj
YW5uZXIuZW9mKCkpIHsKKwkgICAgICAgICAgICB2YXIgY2ggPSB0aGlzLnNjYW5uZXIuc291cmNl
W3RoaXMuc2Nhbm5lci5pbmRleCsrXTsKKwkgICAgICAgICAgICBpZiAoY2ggPT09ICc7Jykgewor
CSAgICAgICAgICAgICAgICBpZiAoc3RyWzBdID09PSAnIycpIHsKKwkgICAgICAgICAgICAgICAg
ICAgIHN0ciA9IHN0ci5zdWJzdHIoMSk7CisJICAgICAgICAgICAgICAgICAgICB2YXIgaGV4ID0g
KHN0clswXSA9PT0gJ3gnKTsKKwkgICAgICAgICAgICAgICAgICAgIHZhciBjcCA9IGhleCA/IHBh
cnNlSW50KCcwJyArIHN0ciwgMTYpIDogcGFyc2VJbnQoc3RyLCAxMCk7CisJICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNwKTsKKwkgICAgICAgICAgICAg
ICAgfQorCSAgICAgICAgICAgICAgICBlbHNlIGlmICh4aHRtbF9lbnRpdGllc18xLlhIVE1MRW50
aXRpZXNbc3RyXSkgeworCSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0geGh0bWxfZW50aXRp
ZXNfMS5YSFRNTEVudGl0aWVzW3N0cl07CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAg
ICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gY2g7CisJICAgICAg
ICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgfQorCSAg
ICAgICAgICAgIHN0ciArPSBjaDsKKwkgICAgICAgICAgICByZXN1bHQgKz0gY2g7CisJICAgICAg
ICB9CisJICAgICAgICByZXR1cm4gcmVzdWx0OworCSAgICB9OworCSAgICAvLyBTY2FuIHRoZSBu
ZXh0IEpTWCB0b2tlbi4gVGhpcyByZXBsYWNlcyBTY2FubmVyI2xleCB3aGVuIGluIEpTWCBtb2Rl
LgorCSAgICBKU1hQYXJzZXIucHJvdG90eXBlLmxleEpTWCA9IGZ1bmN0aW9uICgpIHsKKwkgICAg
ICAgIHZhciBjcCA9IHRoaXMuc2Nhbm5lci5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLnNjYW5uZXIu
aW5kZXgpOworCSAgICAgICAgLy8gPCA+IC8gOiA9IHsgfQorCSAgICAgICAgaWYgKGNwID09PSA2
MCB8fCBjcCA9PT0gNjIgfHwgY3AgPT09IDQ3IHx8IGNwID09PSA1OCB8fCBjcCA9PT0gNjEgfHwg
Y3AgPT09IDEyMyB8fCBjcCA9PT0gMTI1KSB7CisJICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhp
cy5zY2FubmVyLnNvdXJjZVt0aGlzLnNjYW5uZXIuaW5kZXgrK107CisJICAgICAgICAgICAgcmV0
dXJuIHsKKwkgICAgICAgICAgICAgICAgdHlwZTogdG9rZW5fMS5Ub2tlbi5QdW5jdHVhdG9yLAor
CSAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsCisJICAgICAgICAgICAgICAgIGxpbmVOdW1i
ZXI6IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLAorCSAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6
IHRoaXMuc2Nhbm5lci5saW5lU3RhcnQsCisJICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLnNj
YW5uZXIuaW5kZXggLSAxLAorCSAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuc2Nhbm5lci5pbmRl
eAorCSAgICAgICAgICAgIH07CisJICAgICAgICB9CisJICAgICAgICAvLyAiICcKKwkgICAgICAg
IGlmIChjcCA9PT0gMzQgfHwgY3AgPT09IDM5KSB7CisJICAgICAgICAgICAgdmFyIHN0YXJ0ID0g
dGhpcy5zY2FubmVyLmluZGV4OworCSAgICAgICAgICAgIHZhciBxdW90ZSA9IHRoaXMuc2Nhbm5l
ci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4KytdOworCSAgICAgICAgICAgIHZhciBzdHIgPSAn
JzsKKwkgICAgICAgICAgICB3aGlsZSAoIXRoaXMuc2Nhbm5lci5lb2YoKSkgeworCSAgICAgICAg
ICAgICAgICB2YXIgY2ggPSB0aGlzLnNjYW5uZXIuc291cmNlW3RoaXMuc2Nhbm5lci5pbmRleCsr
XTsKKwkgICAgICAgICAgICAgICAgaWYgKGNoID09PSBxdW90ZSkgeworCSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoY2ggPT09ICcmJykgeworCSAgICAgICAgICAgICAgICAgICAgc3RyICs9IHRoaXMuc2NhblhI
VE1MRW50aXR5KCk7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgZWxzZSB7
CisJICAgICAgICAgICAgICAgICAgICBzdHIgKz0gY2g7CisJICAgICAgICAgICAgICAgIH0KKwkg
ICAgICAgICAgICB9CisJICAgICAgICAgICAgcmV0dXJuIHsKKwkgICAgICAgICAgICAgICAgdHlw
ZTogdG9rZW5fMS5Ub2tlbi5TdHJpbmdMaXRlcmFsLAorCSAgICAgICAgICAgICAgICB2YWx1ZTog
c3RyLAorCSAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLnNjYW5uZXIubGluZU51bWJl
ciwKKwkgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiB0aGlzLnNjYW5uZXIubGluZVN0YXJ0LAor
CSAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCisJICAgICAgICAgICAgICAgIGVuZDogdGhp
cy5zY2FubmVyLmluZGV4CisJICAgICAgICAgICAgfTsKKwkgICAgICAgIH0KKwkgICAgICAgIC8v
IC4uLiBvciAuCisJICAgICAgICBpZiAoY3AgPT09IDQ2KSB7CisJICAgICAgICAgICAgdmFyIG4x
ID0gdGhpcy5zY2FubmVyLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuc2Nhbm5lci5pbmRleCArIDEp
OworCSAgICAgICAgICAgIHZhciBuMiA9IHRoaXMuc2Nhbm5lci5zb3VyY2UuY2hhckNvZGVBdCh0
aGlzLnNjYW5uZXIuaW5kZXggKyAyKTsKKwkgICAgICAgICAgICB2YXIgdmFsdWUgPSAobjEgPT09
IDQ2ICYmIG4yID09PSA0NikgPyAnLi4uJyA6ICcuJzsKKwkgICAgICAgICAgICB2YXIgc3RhcnQg
PSB0aGlzLnNjYW5uZXIuaW5kZXg7CisJICAgICAgICAgICAgdGhpcy5zY2FubmVyLmluZGV4ICs9
IHZhbHVlLmxlbmd0aDsKKwkgICAgICAgICAgICByZXR1cm4geworCSAgICAgICAgICAgICAgICB0
eXBlOiB0b2tlbl8xLlRva2VuLlB1bmN0dWF0b3IsCisJICAgICAgICAgICAgICAgIHZhbHVlOiB2
YWx1ZSwKKwkgICAgICAgICAgICAgICAgbGluZU51bWJlcjogdGhpcy5zY2FubmVyLmxpbmVOdW1i
ZXIsCisJICAgICAgICAgICAgICAgIGxpbmVTdGFydDogdGhpcy5zY2FubmVyLmxpbmVTdGFydCwK
KwkgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorCSAgICAgICAgICAgICAgICBlbmQ6IHRo
aXMuc2Nhbm5lci5pbmRleAorCSAgICAgICAgICAgIH07CisJICAgICAgICB9CisJICAgICAgICAv
LyBgCisJICAgICAgICBpZiAoY3AgPT09IDk2KSB7CisJICAgICAgICAgICAgLy8gT25seSBwbGFj
ZWhvbGRlciwgc2luY2UgaXQgd2lsbCBiZSByZXNjYW5uZWQgYXMgYSByZWFsIGFzc2lnbm1lbnQg
ZXhwcmVzc2lvbi4KKwkgICAgICAgICAgICByZXR1cm4geworCSAgICAgICAgICAgICAgICB0eXBl
OiB0b2tlbl8xLlRva2VuLlRlbXBsYXRlLAorCSAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiB0
aGlzLnNjYW5uZXIubGluZU51bWJlciwKKwkgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiB0aGlz
LnNjYW5uZXIubGluZVN0YXJ0LAorCSAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5zY2FubmVy
LmluZGV4LAorCSAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuc2Nhbm5lci5pbmRleAorCSAgICAg
ICAgICAgIH07CisJICAgICAgICB9CisJICAgICAgICAvLyBJZGVudGlmZXIgY2FuIG5vdCBjb250
YWluIGJhY2tzbGFzaCAoY2hhciBjb2RlIDkyKS4KKwkgICAgICAgIGlmIChjaGFyYWN0ZXJfMS5D
aGFyYWN0ZXIuaXNJZGVudGlmaWVyU3RhcnQoY3ApICYmIChjcCAhPT0gOTIpKSB7CisJICAgICAg
ICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5zY2FubmVyLmluZGV4OworCSAgICAgICAgICAgICsrdGhp
cy5zY2FubmVyLmluZGV4OworCSAgICAgICAgICAgIHdoaWxlICghdGhpcy5zY2FubmVyLmVvZigp
KSB7CisJICAgICAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuc2Nhbm5lci5zb3VyY2UuY2hhckNv
ZGVBdCh0aGlzLnNjYW5uZXIuaW5kZXgpOworCSAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVy
XzEuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclBhcnQoY2gpICYmIChjaCAhPT0gOTIpKSB7CisJICAg
ICAgICAgICAgICAgICAgICArK3RoaXMuc2Nhbm5lci5pbmRleDsKKwkgICAgICAgICAgICAgICAg
fQorCSAgICAgICAgICAgICAgICBlbHNlIGlmIChjaCA9PT0gNDUpIHsKKwkgICAgICAgICAgICAg
ICAgICAgIC8vIEh5cGhlbiAoY2hhciBjb2RlIDQ1KSBjYW4gYmUgcGFydCBvZiBhbiBpZGVudGlm
aWVyLgorCSAgICAgICAgICAgICAgICAgICAgKyt0aGlzLnNjYW5uZXIuaW5kZXg7CisJICAgICAg
ICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgICAgIH0KKwkgICAgICAgICAg
ICB2YXIgaWQgPSB0aGlzLnNjYW5uZXIuc291cmNlLnNsaWNlKHN0YXJ0LCB0aGlzLnNjYW5uZXIu
aW5kZXgpOworCSAgICAgICAgICAgIHJldHVybiB7CisJICAgICAgICAgICAgICAgIHR5cGU6IEpT
WFRva2VuLklkZW50aWZpZXIsCisJICAgICAgICAgICAgICAgIHZhbHVlOiBpZCwKKwkgICAgICAg
ICAgICAgICAgbGluZU51bWJlcjogdGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsCisJICAgICAgICAg
ICAgICAgIGxpbmVTdGFydDogdGhpcy5zY2FubmVyLmxpbmVTdGFydCwKKwkgICAgICAgICAgICAg
ICAgc3RhcnQ6IHN0YXJ0LAorCSAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuc2Nhbm5lci5pbmRl
eAorCSAgICAgICAgICAgIH07CisJICAgICAgICB9CisJICAgICAgICB0aGlzLnNjYW5uZXIudGhy
b3dVbmV4cGVjdGVkVG9rZW4oKTsKKwkgICAgfTsKKwkgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5u
ZXh0SlNYVG9rZW4gPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB0aGlzLmNvbGxlY3RDb21tZW50
cygpOworCSAgICAgICAgdGhpcy5zdGFydE1hcmtlci5pbmRleCA9IHRoaXMuc2Nhbm5lci5pbmRl
eDsKKwkgICAgICAgIHRoaXMuc3RhcnRNYXJrZXIubGluZU51bWJlciA9IHRoaXMuc2Nhbm5lci5s
aW5lTnVtYmVyOworCSAgICAgICAgdGhpcy5zdGFydE1hcmtlci5saW5lU3RhcnQgPSB0aGlzLnNj
YW5uZXIubGluZVN0YXJ0OworCSAgICAgICAgdmFyIHRva2VuID0gdGhpcy5sZXhKU1goKTsKKwkg
ICAgICAgIHRoaXMubGFzdE1hcmtlci5pbmRleCA9IHRoaXMuc2Nhbm5lci5pbmRleDsKKwkgICAg
ICAgIHRoaXMubGFzdE1hcmtlci5saW5lTnVtYmVyID0gdGhpcy5zY2FubmVyLmxpbmVOdW1iZXI7
CisJICAgICAgICB0aGlzLmxhc3RNYXJrZXIubGluZVN0YXJ0ID0gdGhpcy5zY2FubmVyLmxpbmVT
dGFydDsKKwkgICAgICAgIGlmICh0aGlzLmNvbmZpZy50b2tlbnMpIHsKKwkgICAgICAgICAgICB0
aGlzLnRva2Vucy5wdXNoKHRoaXMuY29udmVydFRva2VuKHRva2VuKSk7CisJICAgICAgICB9CisJ
ICAgICAgICByZXR1cm4gdG9rZW47CisJICAgIH07CisJICAgIEpTWFBhcnNlci5wcm90b3R5cGUu
bmV4dEpTWFRleHQgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB0aGlzLnN0YXJ0TWFya2VyLmlu
ZGV4ID0gdGhpcy5zY2FubmVyLmluZGV4OworCSAgICAgICAgdGhpcy5zdGFydE1hcmtlci5saW5l
TnVtYmVyID0gdGhpcy5zY2FubmVyLmxpbmVOdW1iZXI7CisJICAgICAgICB0aGlzLnN0YXJ0TWFy
a2VyLmxpbmVTdGFydCA9IHRoaXMuc2Nhbm5lci5saW5lU3RhcnQ7CisJICAgICAgICB2YXIgc3Rh
cnQgPSB0aGlzLnNjYW5uZXIuaW5kZXg7CisJICAgICAgICB2YXIgdGV4dCA9ICcnOworCSAgICAg
ICAgd2hpbGUgKCF0aGlzLnNjYW5uZXIuZW9mKCkpIHsKKwkgICAgICAgICAgICB2YXIgY2ggPSB0
aGlzLnNjYW5uZXIuc291cmNlW3RoaXMuc2Nhbm5lci5pbmRleF07CisJICAgICAgICAgICAgaWYg
KGNoID09PSAneycgfHwgY2ggPT09ICc8JykgeworCSAgICAgICAgICAgICAgICBicmVhazsKKwkg
ICAgICAgICAgICB9CisJICAgICAgICAgICAgKyt0aGlzLnNjYW5uZXIuaW5kZXg7CisJICAgICAg
ICAgICAgdGV4dCArPSBjaDsKKwkgICAgICAgICAgICBpZiAoY2hhcmFjdGVyXzEuQ2hhcmFjdGVy
LmlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHsKKwkgICAgICAgICAgICAgICAg
Kyt0aGlzLnNjYW5uZXIubGluZU51bWJlcjsKKwkgICAgICAgICAgICAgICAgaWYgKGNoID09PSAn
XHInICYmIHRoaXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4XSA9PT0gJ1xuJykg
eworCSAgICAgICAgICAgICAgICAgICAgKyt0aGlzLnNjYW5uZXIuaW5kZXg7CisJICAgICAgICAg
ICAgICAgIH0KKwkgICAgICAgICAgICAgICAgdGhpcy5zY2FubmVyLmxpbmVTdGFydCA9IHRoaXMu
c2Nhbm5lci5pbmRleDsKKwkgICAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgICB0aGlz
Lmxhc3RNYXJrZXIuaW5kZXggPSB0aGlzLnNjYW5uZXIuaW5kZXg7CisJICAgICAgICB0aGlzLmxh
c3RNYXJrZXIubGluZU51bWJlciA9IHRoaXMuc2Nhbm5lci5saW5lTnVtYmVyOworCSAgICAgICAg
dGhpcy5sYXN0TWFya2VyLmxpbmVTdGFydCA9IHRoaXMuc2Nhbm5lci5saW5lU3RhcnQ7CisJICAg
ICAgICB2YXIgdG9rZW4gPSB7CisJICAgICAgICAgICAgdHlwZTogSlNYVG9rZW4uVGV4dCwKKwkg
ICAgICAgICAgICB2YWx1ZTogdGV4dCwKKwkgICAgICAgICAgICBsaW5lTnVtYmVyOiB0aGlzLnNj
YW5uZXIubGluZU51bWJlciwKKwkgICAgICAgICAgICBsaW5lU3RhcnQ6IHRoaXMuc2Nhbm5lci5s
aW5lU3RhcnQsCisJICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorCSAgICAgICAgICAgIGVuZDog
dGhpcy5zY2FubmVyLmluZGV4CisJICAgICAgICB9OworCSAgICAgICAgaWYgKCh0ZXh0Lmxlbmd0
aCA+IDApICYmIHRoaXMuY29uZmlnLnRva2VucykgeworCSAgICAgICAgICAgIHRoaXMudG9rZW5z
LnB1c2godGhpcy5jb252ZXJ0VG9rZW4odG9rZW4pKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJl
dHVybiB0b2tlbjsKKwkgICAgfTsKKwkgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wZWVrSlNYVG9r
ZW4gPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgcHJldmlvdXNJbmRleCA9IHRoaXMuc2Nh
bm5lci5pbmRleDsKKwkgICAgICAgIHZhciBwcmV2aW91c0xpbmVOdW1iZXIgPSB0aGlzLnNjYW5u
ZXIubGluZU51bWJlcjsKKwkgICAgICAgIHZhciBwcmV2aW91c0xpbmVTdGFydCA9IHRoaXMuc2Nh
bm5lci5saW5lU3RhcnQ7CisJICAgICAgICB0aGlzLnNjYW5uZXIuc2NhbkNvbW1lbnRzKCk7CisJ
ICAgICAgICB2YXIgbmV4dCA9IHRoaXMubGV4SlNYKCk7CisJICAgICAgICB0aGlzLnNjYW5uZXIu
aW5kZXggPSBwcmV2aW91c0luZGV4OworCSAgICAgICAgdGhpcy5zY2FubmVyLmxpbmVOdW1iZXIg
PSBwcmV2aW91c0xpbmVOdW1iZXI7CisJICAgICAgICB0aGlzLnNjYW5uZXIubGluZVN0YXJ0ID0g
cHJldmlvdXNMaW5lU3RhcnQ7CisJICAgICAgICByZXR1cm4gbmV4dDsKKwkgICAgfTsKKwkgICAg
Ly8gRXhwZWN0IHRoZSBuZXh0IEpTWCB0b2tlbiB0byBtYXRjaCB0aGUgc3BlY2lmaWVkIHB1bmN0
dWF0b3IuCisJICAgIC8vIElmIG5vdCwgYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLgorCSAg
ICBKU1hQYXJzZXIucHJvdG90eXBlLmV4cGVjdEpTWCA9IGZ1bmN0aW9uICh2YWx1ZSkgeworCSAg
ICAgICAgdmFyIHRva2VuID0gdGhpcy5uZXh0SlNYVG9rZW4oKTsKKwkgICAgICAgIGlmICh0b2tl
bi50eXBlICE9PSB0b2tlbl8xLlRva2VuLlB1bmN0dWF0b3IgfHwgdG9rZW4udmFsdWUgIT09IHZh
bHVlKSB7CisJICAgICAgICAgICAgdGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0b2tlbik7CisJ
ICAgICAgICB9CisJICAgIH07CisJICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IEpTWCB0
b2tlbiBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgcHVuY3R1YXRvci4KKwkgICAgSlNYUGFyc2VyLnBy
b3RvdHlwZS5tYXRjaEpTWCA9IGZ1bmN0aW9uICh2YWx1ZSkgeworCSAgICAgICAgdmFyIG5leHQg
PSB0aGlzLnBlZWtKU1hUb2tlbigpOworCSAgICAgICAgcmV0dXJuIG5leHQudHlwZSA9PT0gdG9r
ZW5fMS5Ub2tlbi5QdW5jdHVhdG9yICYmIG5leHQudmFsdWUgPT09IHZhbHVlOworCSAgICB9Owor
CSAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNYSWRlbnRpZmllciA9IGZ1bmN0aW9uICgp
IHsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVKU1hOb2RlKCk7CisJICAgICAgICB2
YXIgdG9rZW4gPSB0aGlzLm5leHRKU1hUb2tlbigpOworCSAgICAgICAgaWYgKHRva2VuLnR5cGUg
IT09IEpTWFRva2VuLklkZW50aWZpZXIpIHsKKwkgICAgICAgICAgICB0aGlzLnRocm93VW5leHBl
Y3RlZFRva2VuKHRva2VuKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHJldHVybiB0aGlzLmZpbmFs
aXplKG5vZGUsIG5ldyBKU1hOb2RlLkpTWElkZW50aWZpZXIodG9rZW4udmFsdWUpKTsKKwkgICAg
fTsKKwkgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWEVsZW1lbnROYW1lID0gZnVuY3Rp
b24gKCkgeworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZUpTWE5vZGUoKTsKKwkgICAg
ICAgIHZhciBlbGVtZW50TmFtZSA9IHRoaXMucGFyc2VKU1hJZGVudGlmaWVyKCk7CisJICAgICAg
ICBpZiAodGhpcy5tYXRjaEpTWCgnOicpKSB7CisJICAgICAgICAgICAgdmFyIG5hbWVzcGFjZSA9
IGVsZW1lbnROYW1lOworCSAgICAgICAgICAgIHRoaXMuZXhwZWN0SlNYKCc6Jyk7CisJICAgICAg
ICAgICAgdmFyIG5hbWVfMSA9IHRoaXMucGFyc2VKU1hJZGVudGlmaWVyKCk7CisJICAgICAgICAg
ICAgZWxlbWVudE5hbWUgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBKU1hOb2RlLkpTWE5hbWVz
cGFjZWROYW1lKG5hbWVzcGFjZSwgbmFtZV8xKSk7CisJICAgICAgICB9CisJICAgICAgICBlbHNl
IGlmICh0aGlzLm1hdGNoSlNYKCcuJykpIHsKKwkgICAgICAgICAgICB3aGlsZSAodGhpcy5tYXRj
aEpTWCgnLicpKSB7CisJICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSBlbGVtZW50TmFtZTsK
KwkgICAgICAgICAgICAgICAgdGhpcy5leHBlY3RKU1goJy4nKTsKKwkgICAgICAgICAgICAgICAg
dmFyIHByb3BlcnR5ID0gdGhpcy5wYXJzZUpTWElkZW50aWZpZXIoKTsKKwkgICAgICAgICAgICAg
ICAgZWxlbWVudE5hbWUgPSB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBKU1hOb2RlLkpTWE1lbWJl
ckV4cHJlc3Npb24ob2JqZWN0LCBwcm9wZXJ0eSkpOworCSAgICAgICAgICAgIH0KKwkgICAgICAg
IH0KKwkgICAgICAgIHJldHVybiBlbGVtZW50TmFtZTsKKwkgICAgfTsKKwkgICAgSlNYUGFyc2Vy
LnByb3RvdHlwZS5wYXJzZUpTWEF0dHJpYnV0ZU5hbWUgPSBmdW5jdGlvbiAoKSB7CisJICAgICAg
ICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlSlNYTm9kZSgpOworCSAgICAgICAgdmFyIGF0dHJpYnV0
ZU5hbWU7CisJICAgICAgICB2YXIgaWRlbnRpZmllciA9IHRoaXMucGFyc2VKU1hJZGVudGlmaWVy
KCk7CisJICAgICAgICBpZiAodGhpcy5tYXRjaEpTWCgnOicpKSB7CisJICAgICAgICAgICAgdmFy
IG5hbWVzcGFjZSA9IGlkZW50aWZpZXI7CisJICAgICAgICAgICAgdGhpcy5leHBlY3RKU1goJzon
KTsKKwkgICAgICAgICAgICB2YXIgbmFtZV8yID0gdGhpcy5wYXJzZUpTWElkZW50aWZpZXIoKTsK
KwkgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lID0gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNY
Tm9kZS5KU1hOYW1lc3BhY2VkTmFtZShuYW1lc3BhY2UsIG5hbWVfMikpOworCSAgICAgICAgfQor
CSAgICAgICAgZWxzZSB7CisJICAgICAgICAgICAgYXR0cmlidXRlTmFtZSA9IGlkZW50aWZpZXI7
CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gYXR0cmlidXRlTmFtZTsKKwkgICAgfTsKKwkg
ICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWFN0cmluZ0xpdGVyYWxBdHRyaWJ1dGUgPSBm
dW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlSlNYTm9kZSgpOwor
CSAgICAgICAgdmFyIHRva2VuID0gdGhpcy5uZXh0SlNYVG9rZW4oKTsKKwkgICAgICAgIGlmICh0
b2tlbi50eXBlICE9PSB0b2tlbl8xLlRva2VuLlN0cmluZ0xpdGVyYWwpIHsKKwkgICAgICAgICAg
ICB0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRva2VuKTsKKwkgICAgICAgIH0KKwkgICAgICAg
IHZhciByYXcgPSB0aGlzLmdldFRva2VuUmF3KHRva2VuKTsKKwkgICAgICAgIHJldHVybiB0aGlz
LmZpbmFsaXplKG5vZGUsIG5ldyBOb2RlLkxpdGVyYWwodG9rZW4udmFsdWUsIHJhdykpOworCSAg
ICB9OworCSAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNYRXhwcmVzc2lvbkF0dHJpYnV0
ZSA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVKU1hOb2Rl
KCk7CisJICAgICAgICB0aGlzLmV4cGVjdEpTWCgneycpOworCSAgICAgICAgdGhpcy5maW5pc2hK
U1goKTsKKwkgICAgICAgIGlmICh0aGlzLm1hdGNoKCd9JykpIHsKKwkgICAgICAgICAgICB0aGlz
LnRvbGVyYXRlRXJyb3IoJ0pTWCBhdHRyaWJ1dGVzIG11c3Qgb25seSBiZSBhc3NpZ25lZCBhIG5v
bi1lbXB0eSBleHByZXNzaW9uJyk7CisJICAgICAgICB9CisJICAgICAgICB2YXIgZXhwcmVzc2lv
biA9IHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworCSAgICAgICAgdGhpcy5yZWVu
dGVySlNYKCk7CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNYTm9k
ZS5KU1hFeHByZXNzaW9uQ29udGFpbmVyKGV4cHJlc3Npb24pKTsKKwkgICAgfTsKKwkgICAgSlNY
UGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWEF0dHJpYnV0ZVZhbHVlID0gZnVuY3Rpb24gKCkgewor
CSAgICAgICAgcmV0dXJuIHRoaXMubWF0Y2hKU1goJ3snKSA/IHRoaXMucGFyc2VKU1hFeHByZXNz
aW9uQXR0cmlidXRlKCkgOgorCSAgICAgICAgICAgIHRoaXMubWF0Y2hKU1goJzwnKSA/IHRoaXMu
cGFyc2VKU1hFbGVtZW50KCkgOiB0aGlzLnBhcnNlSlNYU3RyaW5nTGl0ZXJhbEF0dHJpYnV0ZSgp
OworCSAgICB9OworCSAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNYTmFtZVZhbHVlQXR0
cmlidXRlID0gZnVuY3Rpb24gKCkgeworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZUpT
WE5vZGUoKTsKKwkgICAgICAgIHZhciBuYW1lID0gdGhpcy5wYXJzZUpTWEF0dHJpYnV0ZU5hbWUo
KTsKKwkgICAgICAgIHZhciB2YWx1ZSA9IG51bGw7CisJICAgICAgICBpZiAodGhpcy5tYXRjaEpT
WCgnPScpKSB7CisJICAgICAgICAgICAgdGhpcy5leHBlY3RKU1goJz0nKTsKKwkgICAgICAgICAg
ICB2YWx1ZSA9IHRoaXMucGFyc2VKU1hBdHRyaWJ1dGVWYWx1ZSgpOworCSAgICAgICAgfQorCSAg
ICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IEpTWE5vZGUuSlNYQXR0cmlidXRl
KG5hbWUsIHZhbHVlKSk7CisJICAgIH07CisJICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFyc2VK
U1hTcHJlYWRBdHRyaWJ1dGUgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRo
aXMuY3JlYXRlSlNYTm9kZSgpOworCSAgICAgICAgdGhpcy5leHBlY3RKU1goJ3snKTsKKwkgICAg
ICAgIHRoaXMuZXhwZWN0SlNYKCcuLi4nKTsKKwkgICAgICAgIHRoaXMuZmluaXNoSlNYKCk7CisJ
ICAgICAgICB2YXIgYXJndW1lbnQgPSB0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsK
KwkgICAgICAgIHRoaXMucmVlbnRlckpTWCgpOworCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxp
emUobm9kZSwgbmV3IEpTWE5vZGUuSlNYU3ByZWFkQXR0cmlidXRlKGFyZ3VtZW50KSk7CisJICAg
IH07CisJICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFyc2VKU1hBdHRyaWJ1dGVzID0gZnVuY3Rp
b24gKCkgeworCSAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBbXTsKKwkgICAgICAgIHdoaWxlICgh
dGhpcy5tYXRjaEpTWCgnLycpICYmICF0aGlzLm1hdGNoSlNYKCc+JykpIHsKKwkgICAgICAgICAg
ICB2YXIgYXR0cmlidXRlID0gdGhpcy5tYXRjaEpTWCgneycpID8gdGhpcy5wYXJzZUpTWFNwcmVh
ZEF0dHJpYnV0ZSgpIDoKKwkgICAgICAgICAgICAgICAgdGhpcy5wYXJzZUpTWE5hbWVWYWx1ZUF0
dHJpYnV0ZSgpOworCSAgICAgICAgICAgIGF0dHJpYnV0ZXMucHVzaChhdHRyaWJ1dGUpOworCSAg
ICAgICAgfQorCSAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7CisJICAgIH07CisJICAgIEpTWFBh
cnNlci5wcm90b3R5cGUucGFyc2VKU1hPcGVuaW5nRWxlbWVudCA9IGZ1bmN0aW9uICgpIHsKKwkg
ICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVKU1hOb2RlKCk7CisJICAgICAgICB0aGlzLmV4
cGVjdEpTWCgnPCcpOworCSAgICAgICAgdmFyIG5hbWUgPSB0aGlzLnBhcnNlSlNYRWxlbWVudE5h
bWUoKTsKKwkgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5wYXJzZUpTWEF0dHJpYnV0ZXMo
KTsKKwkgICAgICAgIHZhciBzZWxmQ2xvc2luZyA9IHRoaXMubWF0Y2hKU1goJy8nKTsKKwkgICAg
ICAgIGlmIChzZWxmQ2xvc2luZykgeworCSAgICAgICAgICAgIHRoaXMuZXhwZWN0SlNYKCcvJyk7
CisJICAgICAgICB9CisJICAgICAgICB0aGlzLmV4cGVjdEpTWCgnPicpOworCSAgICAgICAgcmV0
dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IEpTWE5vZGUuSlNYT3BlbmluZ0VsZW1lbnQobmFt
ZSwgc2VsZkNsb3NpbmcsIGF0dHJpYnV0ZXMpKTsKKwkgICAgfTsKKwkgICAgSlNYUGFyc2VyLnBy
b3RvdHlwZS5wYXJzZUpTWEJvdW5kYXJ5RWxlbWVudCA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAg
IHZhciBub2RlID0gdGhpcy5jcmVhdGVKU1hOb2RlKCk7CisJICAgICAgICB0aGlzLmV4cGVjdEpT
WCgnPCcpOworCSAgICAgICAgaWYgKHRoaXMubWF0Y2hKU1goJy8nKSkgeworCSAgICAgICAgICAg
IHRoaXMuZXhwZWN0SlNYKCcvJyk7CisJICAgICAgICAgICAgdmFyIG5hbWVfMyA9IHRoaXMucGFy
c2VKU1hFbGVtZW50TmFtZSgpOworCSAgICAgICAgICAgIHRoaXMuZXhwZWN0SlNYKCc+Jyk7CisJ
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IEpTWE5vZGUuSlNYQ2xv
c2luZ0VsZW1lbnQobmFtZV8zKSk7CisJICAgICAgICB9CisJICAgICAgICB2YXIgbmFtZSA9IHRo
aXMucGFyc2VKU1hFbGVtZW50TmFtZSgpOworCSAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB0aGlz
LnBhcnNlSlNYQXR0cmlidXRlcygpOworCSAgICAgICAgdmFyIHNlbGZDbG9zaW5nID0gdGhpcy5t
YXRjaEpTWCgnLycpOworCSAgICAgICAgaWYgKHNlbGZDbG9zaW5nKSB7CisJICAgICAgICAgICAg
dGhpcy5leHBlY3RKU1goJy8nKTsKKwkgICAgICAgIH0KKwkgICAgICAgIHRoaXMuZXhwZWN0SlNY
KCc+Jyk7CisJICAgICAgICByZXR1cm4gdGhpcy5maW5hbGl6ZShub2RlLCBuZXcgSlNYTm9kZS5K
U1hPcGVuaW5nRWxlbWVudChuYW1lLCBzZWxmQ2xvc2luZywgYXR0cmlidXRlcykpOworCSAgICB9
OworCSAgICBKU1hQYXJzZXIucHJvdG90eXBlLnBhcnNlSlNYRW1wdHlFeHByZXNzaW9uID0gZnVu
Y3Rpb24gKCkgeworCSAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZUpTWENoaWxkTm9kZSgp
OworCSAgICAgICAgdGhpcy5jb2xsZWN0Q29tbWVudHMoKTsKKwkgICAgICAgIHRoaXMubGFzdE1h
cmtlci5pbmRleCA9IHRoaXMuc2Nhbm5lci5pbmRleDsKKwkgICAgICAgIHRoaXMubGFzdE1hcmtl
ci5saW5lTnVtYmVyID0gdGhpcy5zY2FubmVyLmxpbmVOdW1iZXI7CisJICAgICAgICB0aGlzLmxh
c3RNYXJrZXIubGluZVN0YXJ0ID0gdGhpcy5zY2FubmVyLmxpbmVTdGFydDsKKwkgICAgICAgIHJl
dHVybiB0aGlzLmZpbmFsaXplKG5vZGUsIG5ldyBKU1hOb2RlLkpTWEVtcHR5RXhwcmVzc2lvbigp
KTsKKwkgICAgfTsKKwkgICAgSlNYUGFyc2VyLnByb3RvdHlwZS5wYXJzZUpTWEV4cHJlc3Npb25D
b250YWluZXIgPSBmdW5jdGlvbiAoKSB7CisJICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRl
SlNYTm9kZSgpOworCSAgICAgICAgdGhpcy5leHBlY3RKU1goJ3snKTsKKwkgICAgICAgIHZhciBl
eHByZXNzaW9uOworCSAgICAgICAgaWYgKHRoaXMubWF0Y2hKU1goJ30nKSkgeworCSAgICAgICAg
ICAgIGV4cHJlc3Npb24gPSB0aGlzLnBhcnNlSlNYRW1wdHlFeHByZXNzaW9uKCk7CisJICAgICAg
ICAgICAgdGhpcy5leHBlY3RKU1goJ30nKTsKKwkgICAgICAgIH0KKwkgICAgICAgIGVsc2Ugewor
CSAgICAgICAgICAgIHRoaXMuZmluaXNoSlNYKCk7CisJICAgICAgICAgICAgZXhwcmVzc2lvbiA9
IHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworCSAgICAgICAgICAgIHRoaXMucmVl
bnRlckpTWCgpOworCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9k
ZSwgbmV3IEpTWE5vZGUuSlNYRXhwcmVzc2lvbkNvbnRhaW5lcihleHByZXNzaW9uKSk7CisJICAg
IH07CisJICAgIEpTWFBhcnNlci5wcm90b3R5cGUucGFyc2VKU1hDaGlsZHJlbiA9IGZ1bmN0aW9u
ICgpIHsKKwkgICAgICAgIHZhciBjaGlsZHJlbiA9IFtdOworCSAgICAgICAgd2hpbGUgKCF0aGlz
LnNjYW5uZXIuZW9mKCkpIHsKKwkgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY3JlYXRlSlNY
Q2hpbGROb2RlKCk7CisJICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5uZXh0SlNYVGV4dCgp
OworCSAgICAgICAgICAgIGlmICh0b2tlbi5zdGFydCA8IHRva2VuLmVuZCkgeworCSAgICAgICAg
ICAgICAgICB2YXIgcmF3ID0gdGhpcy5nZXRUb2tlblJhdyh0b2tlbik7CisJICAgICAgICAgICAg
ICAgIHZhciBjaGlsZCA9IHRoaXMuZmluYWxpemUobm9kZSwgbmV3IEpTWE5vZGUuSlNYVGV4dCh0
b2tlbi52YWx1ZSwgcmF3KSk7CisJICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGQp
OworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBpZiAodGhpcy5zY2FubmVyLnNvdXJjZVt0
aGlzLnNjYW5uZXIuaW5kZXhdID09PSAneycpIHsKKwkgICAgICAgICAgICAgICAgdmFyIGNvbnRh
aW5lciA9IHRoaXMucGFyc2VKU1hFeHByZXNzaW9uQ29udGFpbmVyKCk7CisJICAgICAgICAgICAg
ICAgIGNoaWxkcmVuLnB1c2goY29udGFpbmVyKTsKKwkgICAgICAgICAgICB9CisJICAgICAgICAg
ICAgZWxzZSB7CisJICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICAgICAgICAgIH0KKwkgICAg
ICAgIH0KKwkgICAgICAgIHJldHVybiBjaGlsZHJlbjsKKwkgICAgfTsKKwkgICAgSlNYUGFyc2Vy
LnByb3RvdHlwZS5wYXJzZUNvbXBsZXhKU1hFbGVtZW50ID0gZnVuY3Rpb24gKGVsKSB7CisJICAg
ICAgICB2YXIgc3RhY2sgPSBbXTsKKwkgICAgICAgIHdoaWxlICghdGhpcy5zY2FubmVyLmVvZigp
KSB7CisJICAgICAgICAgICAgZWwuY2hpbGRyZW4gPSBlbC5jaGlsZHJlbi5jb25jYXQodGhpcy5w
YXJzZUpTWENoaWxkcmVuKCkpOworCSAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVK
U1hDaGlsZE5vZGUoKTsKKwkgICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMucGFyc2VKU1hC
b3VuZGFyeUVsZW1lbnQoKTsKKwkgICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSBqc3hf
c3ludGF4XzEuSlNYU3ludGF4LkpTWE9wZW5pbmdFbGVtZW50KSB7CisJICAgICAgICAgICAgICAg
IHZhciBvcGVuaW5nID0gKGVsZW1lbnQpOworCSAgICAgICAgICAgICAgICBpZiAob3BlbmluZy5z
ZWxmQ2xvc2luZykgeworCSAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5maW5h
bGl6ZShub2RlLCBuZXcgSlNYTm9kZS5KU1hFbGVtZW50KG9wZW5pbmcsIFtdLCBudWxsKSk7CisJ
ICAgICAgICAgICAgICAgICAgICBlbC5jaGlsZHJlbi5wdXNoKGNoaWxkKTsKKwkgICAgICAgICAg
ICAgICAgfQorCSAgICAgICAgICAgICAgICBlbHNlIHsKKwkgICAgICAgICAgICAgICAgICAgIHN0
YWNrLnB1c2goZWwpOworCSAgICAgICAgICAgICAgICAgICAgZWwgPSB7IG5vZGU6IG5vZGUsIG9w
ZW5pbmc6IG9wZW5pbmcsIGNsb3Npbmc6IG51bGwsIGNoaWxkcmVuOiBbXSB9OworCSAgICAgICAg
ICAgICAgICB9CisJICAgICAgICAgICAgfQorCSAgICAgICAgICAgIGlmIChlbGVtZW50LnR5cGUg
PT09IGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNYQ2xvc2luZ0VsZW1lbnQpIHsKKwkgICAgICAg
ICAgICAgICAgZWwuY2xvc2luZyA9IChlbGVtZW50KTsKKwkgICAgICAgICAgICAgICAgdmFyIG9w
ZW5fMSA9IGdldFF1YWxpZmllZEVsZW1lbnROYW1lKGVsLm9wZW5pbmcubmFtZSk7CisJICAgICAg
ICAgICAgICAgIHZhciBjbG9zZV8xID0gZ2V0UXVhbGlmaWVkRWxlbWVudE5hbWUoZWwuY2xvc2lu
Zy5uYW1lKTsKKwkgICAgICAgICAgICAgICAgaWYgKG9wZW5fMSAhPT0gY2xvc2VfMSkgeworCSAg
ICAgICAgICAgICAgICAgICAgdGhpcy50b2xlcmF0ZUVycm9yKCdFeHBlY3RlZCBjb3JyZXNwb25k
aW5nIEpTWCBjbG9zaW5nIHRhZyBmb3IgJTAnLCBvcGVuXzEpOworCSAgICAgICAgICAgICAgICB9
CisJICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPiAwKSB7CisJICAgICAgICAgICAg
ICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmZpbmFsaXplKGVsLm5vZGUsIG5ldyBKU1hOb2RlLkpT
WEVsZW1lbnQoZWwub3BlbmluZywgZWwuY2hpbGRyZW4sIGVsLmNsb3NpbmcpKTsKKwkgICAgICAg
ICAgICAgICAgICAgIGVsID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07CisJICAgICAgICAgICAg
ICAgICAgICBlbC5jaGlsZHJlbi5wdXNoKGNoaWxkKTsKKwkgICAgICAgICAgICAgICAgICAgIHN0
YWNrLnBvcCgpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGVsc2Ugewor
CSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAg
ICAgICB9CisJICAgICAgICB9CisJICAgICAgICByZXR1cm4gZWw7CisJICAgIH07CisJICAgIEpT
WFBhcnNlci5wcm90b3R5cGUucGFyc2VKU1hFbGVtZW50ID0gZnVuY3Rpb24gKCkgeworCSAgICAg
ICAgdmFyIG5vZGUgPSB0aGlzLmNyZWF0ZUpTWE5vZGUoKTsKKwkgICAgICAgIHZhciBvcGVuaW5n
ID0gdGhpcy5wYXJzZUpTWE9wZW5pbmdFbGVtZW50KCk7CisJICAgICAgICB2YXIgY2hpbGRyZW4g
PSBbXTsKKwkgICAgICAgIHZhciBjbG9zaW5nID0gbnVsbDsKKwkgICAgICAgIGlmICghb3Blbmlu
Zy5zZWxmQ2xvc2luZykgeworCSAgICAgICAgICAgIHZhciBlbCA9IHRoaXMucGFyc2VDb21wbGV4
SlNYRWxlbWVudCh7IG5vZGU6IG5vZGUsIG9wZW5pbmc6IG9wZW5pbmcsIGNsb3Npbmc6IGNsb3Np
bmcsIGNoaWxkcmVuOiBjaGlsZHJlbiB9KTsKKwkgICAgICAgICAgICBjaGlsZHJlbiA9IGVsLmNo
aWxkcmVuOworCSAgICAgICAgICAgIGNsb3NpbmcgPSBlbC5jbG9zaW5nOworCSAgICAgICAgfQor
CSAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUobm9kZSwgbmV3IEpTWE5vZGUuSlNYRWxlbWVu
dChvcGVuaW5nLCBjaGlsZHJlbiwgY2xvc2luZykpOworCSAgICB9OworCSAgICBKU1hQYXJzZXIu
cHJvdG90eXBlLnBhcnNlSlNYUm9vdCA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIC8vIFBvcCB0
aGUgb3BlbmluZyAnPCcgYWRkZWQgZnJvbSB0aGUgbG9va2FoZWFkLgorCSAgICAgICAgaWYgKHRo
aXMuY29uZmlnLnRva2VucykgeworCSAgICAgICAgICAgIHRoaXMudG9rZW5zLnBvcCgpOworCSAg
ICAgICAgfQorCSAgICAgICAgdGhpcy5zdGFydEpTWCgpOworCSAgICAgICAgdmFyIGVsZW1lbnQg
PSB0aGlzLnBhcnNlSlNYRWxlbWVudCgpOworCSAgICAgICAgdGhpcy5maW5pc2hKU1goKTsKKwkg
ICAgICAgIHJldHVybiBlbGVtZW50OworCSAgICB9OworCSAgICByZXR1cm4gSlNYUGFyc2VyOwor
CX0ocGFyc2VyXzEuUGFyc2VyKSk7CisJZXhwb3J0cy5KU1hQYXJzZXIgPSBKU1hQYXJzZXI7CisK
KworLyoqKi8gfSwKKy8qIDEyICovCisvKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHsK
KworCS8vIEdlbmVyYXRlZCBieSBnZW5lcmF0ZS14aHRtbC1lbnRpdGllcy5qcy4gRE8gTk9UIE1P
RElGWSEKKwkidXNlIHN0cmljdCI7CisJZXhwb3J0cy5YSFRNTEVudGl0aWVzID0geworCSAgICBx
dW90OiAnXHUwMDIyJywKKwkgICAgYW1wOiAnXHUwMDI2JywKKwkgICAgYXBvczogJ1x1MDAyNycs
CisJICAgIGd0OiAnXHUwMDNFJywKKwkgICAgbmJzcDogJ1x1MDBBMCcsCisJICAgIGlleGNsOiAn
XHUwMEExJywKKwkgICAgY2VudDogJ1x1MDBBMicsCisJICAgIHBvdW5kOiAnXHUwMEEzJywKKwkg
ICAgY3VycmVuOiAnXHUwMEE0JywKKwkgICAgeWVuOiAnXHUwMEE1JywKKwkgICAgYnJ2YmFyOiAn
XHUwMEE2JywKKwkgICAgc2VjdDogJ1x1MDBBNycsCisJICAgIHVtbDogJ1x1MDBBOCcsCisJICAg
IGNvcHk6ICdcdTAwQTknLAorCSAgICBvcmRmOiAnXHUwMEFBJywKKwkgICAgbGFxdW86ICdcdTAw
QUInLAorCSAgICBub3Q6ICdcdTAwQUMnLAorCSAgICBzaHk6ICdcdTAwQUQnLAorCSAgICByZWc6
ICdcdTAwQUUnLAorCSAgICBtYWNyOiAnXHUwMEFGJywKKwkgICAgZGVnOiAnXHUwMEIwJywKKwkg
ICAgcGx1c21uOiAnXHUwMEIxJywKKwkgICAgc3VwMjogJ1x1MDBCMicsCisJICAgIHN1cDM6ICdc
dTAwQjMnLAorCSAgICBhY3V0ZTogJ1x1MDBCNCcsCisJICAgIG1pY3JvOiAnXHUwMEI1JywKKwkg
ICAgcGFyYTogJ1x1MDBCNicsCisJICAgIG1pZGRvdDogJ1x1MDBCNycsCisJICAgIGNlZGlsOiAn
XHUwMEI4JywKKwkgICAgc3VwMTogJ1x1MDBCOScsCisJICAgIG9yZG06ICdcdTAwQkEnLAorCSAg
ICByYXF1bzogJ1x1MDBCQicsCisJICAgIGZyYWMxNDogJ1x1MDBCQycsCisJICAgIGZyYWMxMjog
J1x1MDBCRCcsCisJICAgIGZyYWMzNDogJ1x1MDBCRScsCisJICAgIGlxdWVzdDogJ1x1MDBCRics
CisJICAgIEFncmF2ZTogJ1x1MDBDMCcsCisJICAgIEFhY3V0ZTogJ1x1MDBDMScsCisJICAgIEFj
aXJjOiAnXHUwMEMyJywKKwkgICAgQXRpbGRlOiAnXHUwMEMzJywKKwkgICAgQXVtbDogJ1x1MDBD
NCcsCisJICAgIEFyaW5nOiAnXHUwMEM1JywKKwkgICAgQUVsaWc6ICdcdTAwQzYnLAorCSAgICBD
Y2VkaWw6ICdcdTAwQzcnLAorCSAgICBFZ3JhdmU6ICdcdTAwQzgnLAorCSAgICBFYWN1dGU6ICdc
dTAwQzknLAorCSAgICBFY2lyYzogJ1x1MDBDQScsCisJICAgIEV1bWw6ICdcdTAwQ0InLAorCSAg
ICBJZ3JhdmU6ICdcdTAwQ0MnLAorCSAgICBJYWN1dGU6ICdcdTAwQ0QnLAorCSAgICBJY2lyYzog
J1x1MDBDRScsCisJICAgIEl1bWw6ICdcdTAwQ0YnLAorCSAgICBFVEg6ICdcdTAwRDAnLAorCSAg
ICBOdGlsZGU6ICdcdTAwRDEnLAorCSAgICBPZ3JhdmU6ICdcdTAwRDInLAorCSAgICBPYWN1dGU6
ICdcdTAwRDMnLAorCSAgICBPY2lyYzogJ1x1MDBENCcsCisJICAgIE90aWxkZTogJ1x1MDBENScs
CisJICAgIE91bWw6ICdcdTAwRDYnLAorCSAgICB0aW1lczogJ1x1MDBENycsCisJICAgIE9zbGFz
aDogJ1x1MDBEOCcsCisJICAgIFVncmF2ZTogJ1x1MDBEOScsCisJICAgIFVhY3V0ZTogJ1x1MDBE
QScsCisJICAgIFVjaXJjOiAnXHUwMERCJywKKwkgICAgVXVtbDogJ1x1MDBEQycsCisJICAgIFlh
Y3V0ZTogJ1x1MDBERCcsCisJICAgIFRIT1JOOiAnXHUwMERFJywKKwkgICAgc3psaWc6ICdcdTAw
REYnLAorCSAgICBhZ3JhdmU6ICdcdTAwRTAnLAorCSAgICBhYWN1dGU6ICdcdTAwRTEnLAorCSAg
ICBhY2lyYzogJ1x1MDBFMicsCisJICAgIGF0aWxkZTogJ1x1MDBFMycsCisJICAgIGF1bWw6ICdc
dTAwRTQnLAorCSAgICBhcmluZzogJ1x1MDBFNScsCisJICAgIGFlbGlnOiAnXHUwMEU2JywKKwkg
ICAgY2NlZGlsOiAnXHUwMEU3JywKKwkgICAgZWdyYXZlOiAnXHUwMEU4JywKKwkgICAgZWFjdXRl
OiAnXHUwMEU5JywKKwkgICAgZWNpcmM6ICdcdTAwRUEnLAorCSAgICBldW1sOiAnXHUwMEVCJywK
KwkgICAgaWdyYXZlOiAnXHUwMEVDJywKKwkgICAgaWFjdXRlOiAnXHUwMEVEJywKKwkgICAgaWNp
cmM6ICdcdTAwRUUnLAorCSAgICBpdW1sOiAnXHUwMEVGJywKKwkgICAgZXRoOiAnXHUwMEYwJywK
KwkgICAgbnRpbGRlOiAnXHUwMEYxJywKKwkgICAgb2dyYXZlOiAnXHUwMEYyJywKKwkgICAgb2Fj
dXRlOiAnXHUwMEYzJywKKwkgICAgb2NpcmM6ICdcdTAwRjQnLAorCSAgICBvdGlsZGU6ICdcdTAw
RjUnLAorCSAgICBvdW1sOiAnXHUwMEY2JywKKwkgICAgZGl2aWRlOiAnXHUwMEY3JywKKwkgICAg
b3NsYXNoOiAnXHUwMEY4JywKKwkgICAgdWdyYXZlOiAnXHUwMEY5JywKKwkgICAgdWFjdXRlOiAn
XHUwMEZBJywKKwkgICAgdWNpcmM6ICdcdTAwRkInLAorCSAgICB1dW1sOiAnXHUwMEZDJywKKwkg
ICAgeWFjdXRlOiAnXHUwMEZEJywKKwkgICAgdGhvcm46ICdcdTAwRkUnLAorCSAgICB5dW1sOiAn
XHUwMEZGJywKKwkgICAgT0VsaWc6ICdcdTAxNTInLAorCSAgICBvZWxpZzogJ1x1MDE1MycsCisJ
ICAgIFNjYXJvbjogJ1x1MDE2MCcsCisJICAgIHNjYXJvbjogJ1x1MDE2MScsCisJICAgIFl1bWw6
ICdcdTAxNzgnLAorCSAgICBmbm9mOiAnXHUwMTkyJywKKwkgICAgY2lyYzogJ1x1MDJDNicsCisJ
ICAgIHRpbGRlOiAnXHUwMkRDJywKKwkgICAgQWxwaGE6ICdcdTAzOTEnLAorCSAgICBCZXRhOiAn
XHUwMzkyJywKKwkgICAgR2FtbWE6ICdcdTAzOTMnLAorCSAgICBEZWx0YTogJ1x1MDM5NCcsCisJ
ICAgIEVwc2lsb246ICdcdTAzOTUnLAorCSAgICBaZXRhOiAnXHUwMzk2JywKKwkgICAgRXRhOiAn
XHUwMzk3JywKKwkgICAgVGhldGE6ICdcdTAzOTgnLAorCSAgICBJb3RhOiAnXHUwMzk5JywKKwkg
ICAgS2FwcGE6ICdcdTAzOUEnLAorCSAgICBMYW1iZGE6ICdcdTAzOUInLAorCSAgICBNdTogJ1x1
MDM5QycsCisJICAgIE51OiAnXHUwMzlEJywKKwkgICAgWGk6ICdcdTAzOUUnLAorCSAgICBPbWlj
cm9uOiAnXHUwMzlGJywKKwkgICAgUGk6ICdcdTAzQTAnLAorCSAgICBSaG86ICdcdTAzQTEnLAor
CSAgICBTaWdtYTogJ1x1MDNBMycsCisJICAgIFRhdTogJ1x1MDNBNCcsCisJICAgIFVwc2lsb246
ICdcdTAzQTUnLAorCSAgICBQaGk6ICdcdTAzQTYnLAorCSAgICBDaGk6ICdcdTAzQTcnLAorCSAg
ICBQc2k6ICdcdTAzQTgnLAorCSAgICBPbWVnYTogJ1x1MDNBOScsCisJICAgIGFscGhhOiAnXHUw
M0IxJywKKwkgICAgYmV0YTogJ1x1MDNCMicsCisJICAgIGdhbW1hOiAnXHUwM0IzJywKKwkgICAg
ZGVsdGE6ICdcdTAzQjQnLAorCSAgICBlcHNpbG9uOiAnXHUwM0I1JywKKwkgICAgemV0YTogJ1x1
MDNCNicsCisJICAgIGV0YTogJ1x1MDNCNycsCisJICAgIHRoZXRhOiAnXHUwM0I4JywKKwkgICAg
aW90YTogJ1x1MDNCOScsCisJICAgIGthcHBhOiAnXHUwM0JBJywKKwkgICAgbGFtYmRhOiAnXHUw
M0JCJywKKwkgICAgbXU6ICdcdTAzQkMnLAorCSAgICBudTogJ1x1MDNCRCcsCisJICAgIHhpOiAn
XHUwM0JFJywKKwkgICAgb21pY3JvbjogJ1x1MDNCRicsCisJICAgIHBpOiAnXHUwM0MwJywKKwkg
ICAgcmhvOiAnXHUwM0MxJywKKwkgICAgc2lnbWFmOiAnXHUwM0MyJywKKwkgICAgc2lnbWE6ICdc
dTAzQzMnLAorCSAgICB0YXU6ICdcdTAzQzQnLAorCSAgICB1cHNpbG9uOiAnXHUwM0M1JywKKwkg
ICAgcGhpOiAnXHUwM0M2JywKKwkgICAgY2hpOiAnXHUwM0M3JywKKwkgICAgcHNpOiAnXHUwM0M4
JywKKwkgICAgb21lZ2E6ICdcdTAzQzknLAorCSAgICB0aGV0YXN5bTogJ1x1MDNEMScsCisJICAg
IHVwc2loOiAnXHUwM0QyJywKKwkgICAgcGl2OiAnXHUwM0Q2JywKKwkgICAgZW5zcDogJ1x1MjAw
MicsCisJICAgIGVtc3A6ICdcdTIwMDMnLAorCSAgICB0aGluc3A6ICdcdTIwMDknLAorCSAgICB6
d25qOiAnXHUyMDBDJywKKwkgICAgendqOiAnXHUyMDBEJywKKwkgICAgbHJtOiAnXHUyMDBFJywK
KwkgICAgcmxtOiAnXHUyMDBGJywKKwkgICAgbmRhc2g6ICdcdTIwMTMnLAorCSAgICBtZGFzaDog
J1x1MjAxNCcsCisJICAgIGxzcXVvOiAnXHUyMDE4JywKKwkgICAgcnNxdW86ICdcdTIwMTknLAor
CSAgICBzYnF1bzogJ1x1MjAxQScsCisJICAgIGxkcXVvOiAnXHUyMDFDJywKKwkgICAgcmRxdW86
ICdcdTIwMUQnLAorCSAgICBiZHF1bzogJ1x1MjAxRScsCisJICAgIGRhZ2dlcjogJ1x1MjAyMCcs
CisJICAgIERhZ2dlcjogJ1x1MjAyMScsCisJICAgIGJ1bGw6ICdcdTIwMjInLAorCSAgICBoZWxs
aXA6ICdcdTIwMjYnLAorCSAgICBwZXJtaWw6ICdcdTIwMzAnLAorCSAgICBwcmltZTogJ1x1MjAz
MicsCisJICAgIFByaW1lOiAnXHUyMDMzJywKKwkgICAgbHNhcXVvOiAnXHUyMDM5JywKKwkgICAg
cnNhcXVvOiAnXHUyMDNBJywKKwkgICAgb2xpbmU6ICdcdTIwM0UnLAorCSAgICBmcmFzbDogJ1x1
MjA0NCcsCisJICAgIGV1cm86ICdcdTIwQUMnLAorCSAgICBpbWFnZTogJ1x1MjExMScsCisJICAg
IHdlaWVycDogJ1x1MjExOCcsCisJICAgIHJlYWw6ICdcdTIxMUMnLAorCSAgICB0cmFkZTogJ1x1
MjEyMicsCisJICAgIGFsZWZzeW06ICdcdTIxMzUnLAorCSAgICBsYXJyOiAnXHUyMTkwJywKKwkg
ICAgdWFycjogJ1x1MjE5MScsCisJICAgIHJhcnI6ICdcdTIxOTInLAorCSAgICBkYXJyOiAnXHUy
MTkzJywKKwkgICAgaGFycjogJ1x1MjE5NCcsCisJICAgIGNyYXJyOiAnXHUyMUI1JywKKwkgICAg
bEFycjogJ1x1MjFEMCcsCisJICAgIHVBcnI6ICdcdTIxRDEnLAorCSAgICByQXJyOiAnXHUyMUQy
JywKKwkgICAgZEFycjogJ1x1MjFEMycsCisJICAgIGhBcnI6ICdcdTIxRDQnLAorCSAgICBmb3Jh
bGw6ICdcdTIyMDAnLAorCSAgICBwYXJ0OiAnXHUyMjAyJywKKwkgICAgZXhpc3Q6ICdcdTIyMDMn
LAorCSAgICBlbXB0eTogJ1x1MjIwNScsCisJICAgIG5hYmxhOiAnXHUyMjA3JywKKwkgICAgaXNp
bjogJ1x1MjIwOCcsCisJICAgIG5vdGluOiAnXHUyMjA5JywKKwkgICAgbmk6ICdcdTIyMEInLAor
CSAgICBwcm9kOiAnXHUyMjBGJywKKwkgICAgc3VtOiAnXHUyMjExJywKKwkgICAgbWludXM6ICdc
dTIyMTInLAorCSAgICBsb3dhc3Q6ICdcdTIyMTcnLAorCSAgICByYWRpYzogJ1x1MjIxQScsCisJ
ICAgIHByb3A6ICdcdTIyMUQnLAorCSAgICBpbmZpbjogJ1x1MjIxRScsCisJICAgIGFuZzogJ1x1
MjIyMCcsCisJICAgIGFuZDogJ1x1MjIyNycsCisJICAgIG9yOiAnXHUyMjI4JywKKwkgICAgY2Fw
OiAnXHUyMjI5JywKKwkgICAgY3VwOiAnXHUyMjJBJywKKwkgICAgaW50OiAnXHUyMjJCJywKKwkg
ICAgdGhlcmU0OiAnXHUyMjM0JywKKwkgICAgc2ltOiAnXHUyMjNDJywKKwkgICAgY29uZzogJ1x1
MjI0NScsCisJICAgIGFzeW1wOiAnXHUyMjQ4JywKKwkgICAgbmU6ICdcdTIyNjAnLAorCSAgICBl
cXVpdjogJ1x1MjI2MScsCisJICAgIGxlOiAnXHUyMjY0JywKKwkgICAgZ2U6ICdcdTIyNjUnLAor
CSAgICBzdWI6ICdcdTIyODInLAorCSAgICBzdXA6ICdcdTIyODMnLAorCSAgICBuc3ViOiAnXHUy
Mjg0JywKKwkgICAgc3ViZTogJ1x1MjI4NicsCisJICAgIHN1cGU6ICdcdTIyODcnLAorCSAgICBv
cGx1czogJ1x1MjI5NScsCisJICAgIG90aW1lczogJ1x1MjI5NycsCisJICAgIHBlcnA6ICdcdTIy
QTUnLAorCSAgICBzZG90OiAnXHUyMkM1JywKKwkgICAgbGNlaWw6ICdcdTIzMDgnLAorCSAgICBy
Y2VpbDogJ1x1MjMwOScsCisJICAgIGxmbG9vcjogJ1x1MjMwQScsCisJICAgIHJmbG9vcjogJ1x1
MjMwQicsCisJICAgIGxvejogJ1x1MjVDQScsCisJICAgIHNwYWRlczogJ1x1MjY2MCcsCisJICAg
IGNsdWJzOiAnXHUyNjYzJywKKwkgICAgaGVhcnRzOiAnXHUyNjY1JywKKwkgICAgZGlhbXM6ICdc
dTI2NjYnLAorCSAgICBsYW5nOiAnXHUyN0U4JywKKwkgICAgcmFuZzogJ1x1MjdFOScKKwl9Owor
CisKKy8qKiovIH0sCisvKiAxMyAqLworLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7
CisKKwkidXNlIHN0cmljdCI7CisJZXhwb3J0cy5KU1hTeW50YXggPSB7CisJICAgIEpTWEF0dHJp
YnV0ZTogJ0pTWEF0dHJpYnV0ZScsCisJICAgIEpTWENsb3NpbmdFbGVtZW50OiAnSlNYQ2xvc2lu
Z0VsZW1lbnQnLAorCSAgICBKU1hFbGVtZW50OiAnSlNYRWxlbWVudCcsCisJICAgIEpTWEVtcHR5
RXhwcmVzc2lvbjogJ0pTWEVtcHR5RXhwcmVzc2lvbicsCisJICAgIEpTWEV4cHJlc3Npb25Db250
YWluZXI6ICdKU1hFeHByZXNzaW9uQ29udGFpbmVyJywKKwkgICAgSlNYSWRlbnRpZmllcjogJ0pT
WElkZW50aWZpZXInLAorCSAgICBKU1hNZW1iZXJFeHByZXNzaW9uOiAnSlNYTWVtYmVyRXhwcmVz
c2lvbicsCisJICAgIEpTWE5hbWVzcGFjZWROYW1lOiAnSlNYTmFtZXNwYWNlZE5hbWUnLAorCSAg
ICBKU1hPcGVuaW5nRWxlbWVudDogJ0pTWE9wZW5pbmdFbGVtZW50JywKKwkgICAgSlNYU3ByZWFk
QXR0cmlidXRlOiAnSlNYU3ByZWFkQXR0cmlidXRlJywKKwkgICAgSlNYVGV4dDogJ0pTWFRleHQn
CisJfTsKKworCisvKioqLyB9LAorLyogMTQgKi8KKy8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhw
b3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgeworCisJInVzZSBzdHJpY3QiOworCXZhciBqc3hf
c3ludGF4XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTsKKwl2YXIgSlNYQ2xvc2luZ0VsZW1l
bnQgPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBKU1hDbG9zaW5nRWxlbWVudChuYW1l
KSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBqc3hfc3ludGF4XzEuSlNYU3ludGF4LkpTWENsb3Np
bmdFbGVtZW50OworCSAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKwkgICAgfQorCSAgICByZXR1
cm4gSlNYQ2xvc2luZ0VsZW1lbnQ7CisJfSgpKTsKKwlleHBvcnRzLkpTWENsb3NpbmdFbGVtZW50
ID0gSlNYQ2xvc2luZ0VsZW1lbnQ7CisJdmFyIEpTWEVsZW1lbnQgPSAoZnVuY3Rpb24gKCkgewor
CSAgICBmdW5jdGlvbiBKU1hFbGVtZW50KG9wZW5pbmdFbGVtZW50LCBjaGlsZHJlbiwgY2xvc2lu
Z0VsZW1lbnQpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IGpzeF9zeW50YXhfMS5KU1hTeW50YXgu
SlNYRWxlbWVudDsKKwkgICAgICAgIHRoaXMub3BlbmluZ0VsZW1lbnQgPSBvcGVuaW5nRWxlbWVu
dDsKKwkgICAgICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjsKKwkgICAgICAgIHRoaXMuY2xv
c2luZ0VsZW1lbnQgPSBjbG9zaW5nRWxlbWVudDsKKwkgICAgfQorCSAgICByZXR1cm4gSlNYRWxl
bWVudDsKKwl9KCkpOworCWV4cG9ydHMuSlNYRWxlbWVudCA9IEpTWEVsZW1lbnQ7CisJdmFyIEpT
WEVtcHR5RXhwcmVzc2lvbiA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIEpTWEVtcHR5
RXhwcmVzc2lvbigpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IGpzeF9zeW50YXhfMS5KU1hTeW50
YXguSlNYRW1wdHlFeHByZXNzaW9uOworCSAgICB9CisJICAgIHJldHVybiBKU1hFbXB0eUV4cHJl
c3Npb247CisJfSgpKTsKKwlleHBvcnRzLkpTWEVtcHR5RXhwcmVzc2lvbiA9IEpTWEVtcHR5RXhw
cmVzc2lvbjsKKwl2YXIgSlNYRXhwcmVzc2lvbkNvbnRhaW5lciA9IChmdW5jdGlvbiAoKSB7CisJ
ICAgIGZ1bmN0aW9uIEpTWEV4cHJlc3Npb25Db250YWluZXIoZXhwcmVzc2lvbikgeworCSAgICAg
ICAgdGhpcy50eXBlID0ganN4X3N5bnRheF8xLkpTWFN5bnRheC5KU1hFeHByZXNzaW9uQ29udGFp
bmVyOworCSAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjsKKwkgICAgfQorCSAg
ICByZXR1cm4gSlNYRXhwcmVzc2lvbkNvbnRhaW5lcjsKKwl9KCkpOworCWV4cG9ydHMuSlNYRXhw
cmVzc2lvbkNvbnRhaW5lciA9IEpTWEV4cHJlc3Npb25Db250YWluZXI7CisJdmFyIEpTWElkZW50
aWZpZXIgPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBKU1hJZGVudGlmaWVyKG5hbWUp
IHsKKwkgICAgICAgIHRoaXMudHlwZSA9IGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNYSWRlbnRp
ZmllcjsKKwkgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CisJICAgIH0KKwkgICAgcmV0dXJuIEpT
WElkZW50aWZpZXI7CisJfSgpKTsKKwlleHBvcnRzLkpTWElkZW50aWZpZXIgPSBKU1hJZGVudGlm
aWVyOworCXZhciBKU1hNZW1iZXJFeHByZXNzaW9uID0gKGZ1bmN0aW9uICgpIHsKKwkgICAgZnVu
Y3Rpb24gSlNYTWVtYmVyRXhwcmVzc2lvbihvYmplY3QsIHByb3BlcnR5KSB7CisJICAgICAgICB0
aGlzLnR5cGUgPSBqc3hfc3ludGF4XzEuSlNYU3ludGF4LkpTWE1lbWJlckV4cHJlc3Npb247CisJ
ICAgICAgICB0aGlzLm9iamVjdCA9IG9iamVjdDsKKwkgICAgICAgIHRoaXMucHJvcGVydHkgPSBw
cm9wZXJ0eTsKKwkgICAgfQorCSAgICByZXR1cm4gSlNYTWVtYmVyRXhwcmVzc2lvbjsKKwl9KCkp
OworCWV4cG9ydHMuSlNYTWVtYmVyRXhwcmVzc2lvbiA9IEpTWE1lbWJlckV4cHJlc3Npb247CisJ
dmFyIEpTWEF0dHJpYnV0ZSA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIEpTWEF0dHJp
YnV0ZShuYW1lLCB2YWx1ZSkgeworCSAgICAgICAgdGhpcy50eXBlID0ganN4X3N5bnRheF8xLkpT
WFN5bnRheC5KU1hBdHRyaWJ1dGU7CisJICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOworCSAgICAg
ICAgdGhpcy52YWx1ZSA9IHZhbHVlOworCSAgICB9CisJICAgIHJldHVybiBKU1hBdHRyaWJ1dGU7
CisJfSgpKTsKKwlleHBvcnRzLkpTWEF0dHJpYnV0ZSA9IEpTWEF0dHJpYnV0ZTsKKwl2YXIgSlNY
TmFtZXNwYWNlZE5hbWUgPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5jdGlvbiBKU1hOYW1lc3Bh
Y2VkTmFtZShuYW1lc3BhY2UsIG5hbWUpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9IGpzeF9zeW50
YXhfMS5KU1hTeW50YXguSlNYTmFtZXNwYWNlZE5hbWU7CisJICAgICAgICB0aGlzLm5hbWVzcGFj
ZSA9IG5hbWVzcGFjZTsKKwkgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CisJICAgIH0KKwkgICAg
cmV0dXJuIEpTWE5hbWVzcGFjZWROYW1lOworCX0oKSk7CisJZXhwb3J0cy5KU1hOYW1lc3BhY2Vk
TmFtZSA9IEpTWE5hbWVzcGFjZWROYW1lOworCXZhciBKU1hPcGVuaW5nRWxlbWVudCA9IChmdW5j
dGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIEpTWE9wZW5pbmdFbGVtZW50KG5hbWUsIHNlbGZDbG9z
aW5nLCBhdHRyaWJ1dGVzKSB7CisJICAgICAgICB0aGlzLnR5cGUgPSBqc3hfc3ludGF4XzEuSlNY
U3ludGF4LkpTWE9wZW5pbmdFbGVtZW50OworCSAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKwkg
ICAgICAgIHRoaXMuc2VsZkNsb3NpbmcgPSBzZWxmQ2xvc2luZzsKKwkgICAgICAgIHRoaXMuYXR0
cmlidXRlcyA9IGF0dHJpYnV0ZXM7CisJICAgIH0KKwkgICAgcmV0dXJuIEpTWE9wZW5pbmdFbGVt
ZW50OworCX0oKSk7CisJZXhwb3J0cy5KU1hPcGVuaW5nRWxlbWVudCA9IEpTWE9wZW5pbmdFbGVt
ZW50OworCXZhciBKU1hTcHJlYWRBdHRyaWJ1dGUgPSAoZnVuY3Rpb24gKCkgeworCSAgICBmdW5j
dGlvbiBKU1hTcHJlYWRBdHRyaWJ1dGUoYXJndW1lbnQpIHsKKwkgICAgICAgIHRoaXMudHlwZSA9
IGpzeF9zeW50YXhfMS5KU1hTeW50YXguSlNYU3ByZWFkQXR0cmlidXRlOworCSAgICAgICAgdGhp
cy5hcmd1bWVudCA9IGFyZ3VtZW50OworCSAgICB9CisJICAgIHJldHVybiBKU1hTcHJlYWRBdHRy
aWJ1dGU7CisJfSgpKTsKKwlleHBvcnRzLkpTWFNwcmVhZEF0dHJpYnV0ZSA9IEpTWFNwcmVhZEF0
dHJpYnV0ZTsKKwl2YXIgSlNYVGV4dCA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIEpT
WFRleHQodmFsdWUsIHJhdykgeworCSAgICAgICAgdGhpcy50eXBlID0ganN4X3N5bnRheF8xLkpT
WFN5bnRheC5KU1hUZXh0OworCSAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOworCSAgICAgICAg
dGhpcy5yYXcgPSByYXc7CisJICAgIH0KKwkgICAgcmV0dXJuIEpTWFRleHQ7CisJfSgpKTsKKwll
eHBvcnRzLkpTWFRleHQgPSBKU1hUZXh0OworCisKKy8qKiovIH0sCisvKiAxNSAqLworLyoqKi8g
ZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CisKKwkidXNl
IHN0cmljdCI7CisJdmFyIHNjYW5uZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7CisJdmFy
IGVycm9yX2hhbmRsZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oNik7CisJdmFyIHRva2VuXzEg
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpOworCXZhciBSZWFkZXIgPSAoZnVuY3Rpb24gKCkgewor
CSAgICBmdW5jdGlvbiBSZWFkZXIoKSB7CisJICAgICAgICB0aGlzLnZhbHVlcyA9IFtdOworCSAg
ICAgICAgdGhpcy5jdXJseSA9IHRoaXMucGFyZW4gPSAtMTsKKwkgICAgfQorCSAgICA7CisJICAg
IC8vIEEgZnVuY3Rpb24gZm9sbG93aW5nIG9uZSBvZiB0aG9zZSB0b2tlbnMgaXMgYW4gZXhwcmVz
c2lvbi4KKwkgICAgUmVhZGVyLnByb3RvdHlwZS5iZWZvcmVGdW5jdGlvbkV4cHJlc3Npb24gPSBm
dW5jdGlvbiAodCkgeworCSAgICAgICAgcmV0dXJuIFsnKCcsICd7JywgJ1snLCAnaW4nLCAndHlw
ZW9mJywgJ2luc3RhbmNlb2YnLCAnbmV3JywKKwkgICAgICAgICAgICAncmV0dXJuJywgJ2Nhc2Un
LCAnZGVsZXRlJywgJ3Rocm93JywgJ3ZvaWQnLAorCSAgICAgICAgICAgIC8vIGFzc2lnbm1lbnQg
b3BlcmF0b3JzCisJICAgICAgICAgICAgJz0nLCAnKz0nLCAnLT0nLCAnKj0nLCAnKio9JywgJy89
JywgJyU9JywgJzw8PScsICc+Pj0nLCAnPj4+PScsCisJICAgICAgICAgICAgJyY9JywgJ3w9Jywg
J149JywgJywnLAorCSAgICAgICAgICAgIC8vIGJpbmFyeS91bmFyeSBvcGVyYXRvcnMKKwkgICAg
ICAgICAgICAnKycsICctJywgJyonLCAnKionLCAnLycsICclJywgJysrJywgJy0tJywgJzw8Jywg
Jz4+JywgJz4+PicsICcmJywKKwkgICAgICAgICAgICAnfCcsICdeJywgJyEnLCAnficsICcmJics
ICd8fCcsICc/JywgJzonLCAnPT09JywgJz09JywgJz49JywKKwkgICAgICAgICAgICAnPD0nLCAn
PCcsICc+JywgJyE9JywgJyE9PSddLmluZGV4T2YodCkgPj0gMDsKKwkgICAgfTsKKwkgICAgOwor
CSAgICAvLyBEZXRlcm1pbmUgaWYgZm9yd2FyZCBzbGFzaCAoLykgaXMgYW4gb3BlcmF0b3Igb3Ig
cGFydCBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbgorCSAgICAvLyBodHRwczovL2dpdGh1Yi5jb20v
bW96aWxsYS9zd2VldC5qcy93aWtpL2Rlc2lnbgorCSAgICBSZWFkZXIucHJvdG90eXBlLmlzUmVn
ZXhTdGFydCA9IGZ1bmN0aW9uICgpIHsKKwkgICAgICAgIHZhciBwcmV2aW91cyA9IHRoaXMudmFs
dWVzW3RoaXMudmFsdWVzLmxlbmd0aCAtIDFdOworCSAgICAgICAgdmFyIHJlZ2V4ID0gKHByZXZp
b3VzICE9PSBudWxsKTsKKwkgICAgICAgIHN3aXRjaCAocHJldmlvdXMpIHsKKwkgICAgICAgICAg
ICBjYXNlICd0aGlzJzoKKwkgICAgICAgICAgICBjYXNlICddJzoKKwkgICAgICAgICAgICAgICAg
cmVnZXggPSBmYWxzZTsKKwkgICAgICAgICAgICAgICAgYnJlYWs7CisJICAgICAgICAgICAgY2Fz
ZSAnKSc6CisJICAgICAgICAgICAgICAgIHZhciBjaGVjayA9IHRoaXMudmFsdWVzW3RoaXMucGFy
ZW4gLSAxXTsKKwkgICAgICAgICAgICAgICAgcmVnZXggPSAoY2hlY2sgPT09ICdpZicgfHwgY2hl
Y2sgPT09ICd3aGlsZScgfHwgY2hlY2sgPT09ICdmb3InIHx8IGNoZWNrID09PSAnd2l0aCcpOwor
CSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgICBjYXNlICd9JzoKKwkgICAgICAg
ICAgICAgICAgLy8gRGl2aWRpbmcgYSBmdW5jdGlvbiBieSBhbnl0aGluZyBtYWtlcyBsaXR0bGUg
c2Vuc2UsCisJICAgICAgICAgICAgICAgIC8vIGJ1dCB3ZSBoYXZlIHRvIGNoZWNrIGZvciB0aGF0
LgorCSAgICAgICAgICAgICAgICByZWdleCA9IGZhbHNlOworCSAgICAgICAgICAgICAgICBpZiAo
dGhpcy52YWx1ZXNbdGhpcy5jdXJseSAtIDNdID09PSAnZnVuY3Rpb24nKSB7CisJICAgICAgICAg
ICAgICAgICAgICAvLyBBbm9ueW1vdXMgZnVuY3Rpb24sIGUuZy4gZnVuY3Rpb24oKXt9IC80Mgor
CSAgICAgICAgICAgICAgICAgICAgdmFyIGNoZWNrXzEgPSB0aGlzLnZhbHVlc1t0aGlzLmN1cmx5
IC0gNF07CisJICAgICAgICAgICAgICAgICAgICByZWdleCA9IGNoZWNrXzEgPyAhdGhpcy5iZWZv
cmVGdW5jdGlvbkV4cHJlc3Npb24oY2hlY2tfMSkgOiBmYWxzZTsKKwkgICAgICAgICAgICAgICAg
fQorCSAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLnZhbHVlc1t0aGlzLmN1cmx5IC0gNF0g
PT09ICdmdW5jdGlvbicpIHsKKwkgICAgICAgICAgICAgICAgICAgIC8vIE5hbWVkIGZ1bmN0aW9u
LCBlLmcuIGZ1bmN0aW9uIGYoKXt9IC80Mi8KKwkgICAgICAgICAgICAgICAgICAgIHZhciBjaGVj
a18yID0gdGhpcy52YWx1ZXNbdGhpcy5jdXJseSAtIDVdOworCSAgICAgICAgICAgICAgICAgICAg
cmVnZXggPSBjaGVja18yID8gIXRoaXMuYmVmb3JlRnVuY3Rpb25FeHByZXNzaW9uKGNoZWNrXzIp
IDogdHJ1ZTsKKwkgICAgICAgICAgICAgICAgfQorCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJu
IHJlZ2V4OworCSAgICB9OworCSAgICA7CisJICAgIFJlYWRlci5wcm90b3R5cGUucHVzaCA9IGZ1
bmN0aW9uICh0b2tlbikgeworCSAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IHRva2VuXzEuVG9r
ZW4uUHVuY3R1YXRvciB8fCB0b2tlbi50eXBlID09PSB0b2tlbl8xLlRva2VuLktleXdvcmQpIHsK
KwkgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09ICd7JykgeworCSAgICAgICAgICAgICAg
ICB0aGlzLmN1cmx5ID0gdGhpcy52YWx1ZXMubGVuZ3RoOworCSAgICAgICAgICAgIH0KKwkgICAg
ICAgICAgICBlbHNlIGlmICh0b2tlbi52YWx1ZSA9PT0gJygnKSB7CisJICAgICAgICAgICAgICAg
IHRoaXMucGFyZW4gPSB0aGlzLnZhbHVlcy5sZW5ndGg7CisJICAgICAgICAgICAgfQorCSAgICAg
ICAgICAgIHRoaXMudmFsdWVzLnB1c2godG9rZW4udmFsdWUpOworCSAgICAgICAgfQorCSAgICAg
ICAgZWxzZSB7CisJICAgICAgICAgICAgdGhpcy52YWx1ZXMucHVzaChudWxsKTsKKwkgICAgICAg
IH0KKwkgICAgfTsKKwkgICAgOworCSAgICByZXR1cm4gUmVhZGVyOworCX0oKSk7CisJdmFyIFRv
a2VuaXplciA9IChmdW5jdGlvbiAoKSB7CisJICAgIGZ1bmN0aW9uIFRva2VuaXplcihjb2RlLCBj
b25maWcpIHsKKwkgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyID0gbmV3IGVycm9yX2hhbmRsZXJf
MS5FcnJvckhhbmRsZXIoKTsKKwkgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyLnRvbGVyYW50ID0g
Y29uZmlnID8gKHR5cGVvZiBjb25maWcudG9sZXJhbnQgPT09ICdib29sZWFuJyAmJiBjb25maWcu
dG9sZXJhbnQpIDogZmFsc2U7CisJICAgICAgICB0aGlzLnNjYW5uZXIgPSBuZXcgc2Nhbm5lcl8x
LlNjYW5uZXIoY29kZSwgdGhpcy5lcnJvckhhbmRsZXIpOworCSAgICAgICAgdGhpcy5zY2FubmVy
LnRyYWNrQ29tbWVudCA9IGNvbmZpZyA/ICh0eXBlb2YgY29uZmlnLmNvbW1lbnQgPT09ICdib29s
ZWFuJyAmJiBjb25maWcuY29tbWVudCkgOiBmYWxzZTsKKwkgICAgICAgIHRoaXMudHJhY2tSYW5n
ZSA9IGNvbmZpZyA/ICh0eXBlb2YgY29uZmlnLnJhbmdlID09PSAnYm9vbGVhbicgJiYgY29uZmln
LnJhbmdlKSA6IGZhbHNlOworCSAgICAgICAgdGhpcy50cmFja0xvYyA9IGNvbmZpZyA/ICh0eXBl
b2YgY29uZmlnLmxvYyA9PT0gJ2Jvb2xlYW4nICYmIGNvbmZpZy5sb2MpIDogZmFsc2U7CisJICAg
ICAgICB0aGlzLmJ1ZmZlciA9IFtdOworCSAgICAgICAgdGhpcy5yZWFkZXIgPSBuZXcgUmVhZGVy
KCk7CisJICAgIH0KKwkgICAgOworCSAgICBUb2tlbml6ZXIucHJvdG90eXBlLmVycm9ycyA9IGZ1
bmN0aW9uICgpIHsKKwkgICAgICAgIHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5lcnJvcnM7CisJ
ICAgIH07CisJICAgIDsKKwkgICAgVG9rZW5pemVyLnByb3RvdHlwZS5nZXROZXh0VG9rZW4gPSBm
dW5jdGlvbiAoKSB7CisJICAgICAgICBpZiAodGhpcy5idWZmZXIubGVuZ3RoID09PSAwKSB7CisJ
ICAgICAgICAgICAgdmFyIGNvbW1lbnRzID0gdGhpcy5zY2FubmVyLnNjYW5Db21tZW50cygpOwor
CSAgICAgICAgICAgIGlmICh0aGlzLnNjYW5uZXIudHJhY2tDb21tZW50KSB7CisJICAgICAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29tbWVudHMubGVuZ3RoOyArK2kpIHsKKwkgICAg
ICAgICAgICAgICAgICAgIHZhciBlID0gY29tbWVudHNbaV07CisJICAgICAgICAgICAgICAgICAg
ICB2YXIgY29tbWVudCA9IHZvaWQgMDsKKwkgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9
IHRoaXMuc2Nhbm5lci5zb3VyY2Uuc2xpY2UoZS5zbGljZVswXSwgZS5zbGljZVsxXSk7CisJICAg
ICAgICAgICAgICAgICAgICBjb21tZW50ID0geworCSAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGU6IGUubXVsdGlMaW5lID8gJ0Jsb2NrQ29tbWVudCcgOiAnTGluZUNvbW1lbnQnLAorCSAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZQorCSAgICAgICAgICAgICAgICAgICAgfTsK
KwkgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyYWNrUmFuZ2UpIHsKKwkgICAgICAgICAg
ICAgICAgICAgICAgICBjb21tZW50LnJhbmdlID0gZS5yYW5nZTsKKwkgICAgICAgICAgICAgICAg
ICAgIH0KKwkgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyYWNrTG9jKSB7CisJICAgICAg
ICAgICAgICAgICAgICAgICAgY29tbWVudC5sb2MgPSBlLmxvYzsKKwkgICAgICAgICAgICAgICAg
ICAgIH0KKwkgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyLnB1c2goY29tbWVudCk7CisJ
ICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICB9CisJICAgICAgICAgICAgaWYgKCF0aGlz
LnNjYW5uZXIuZW9mKCkpIHsKKwkgICAgICAgICAgICAgICAgdmFyIGxvYyA9IHZvaWQgMDsKKwkg
ICAgICAgICAgICAgICAgaWYgKHRoaXMudHJhY2tMb2MpIHsKKwkgICAgICAgICAgICAgICAgICAg
IGxvYyA9IHsKKwkgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogeworCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLnNjYW5uZXIubGluZU51bWJlciwKKwkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiB0aGlzLnNjYW5uZXIuaW5kZXggLSB0aGlzLnNj
YW5uZXIubGluZVN0YXJ0CisJICAgICAgICAgICAgICAgICAgICAgICAgfSwKKwkgICAgICAgICAg
ICAgICAgICAgICAgICBlbmQ6IHt9CisJICAgICAgICAgICAgICAgICAgICB9OworCSAgICAgICAg
ICAgICAgICB9CisJICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IHZvaWQgMDsKKwkgICAgICAg
ICAgICAgICAgaWYgKHRoaXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4XSA9PT0g
Jy8nKSB7CisJICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMucmVhZGVyLmlzUmVnZXhT
dGFydCgpID8gdGhpcy5zY2FubmVyLnNjYW5SZWdFeHAoKSA6IHRoaXMuc2Nhbm5lci5zY2FuUHVu
Y3R1YXRvcigpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgICAgIGVsc2Ugewor
CSAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLnNjYW5uZXIubGV4KCk7CisJICAgICAg
ICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgdGhpcy5yZWFkZXIucHVzaCh0b2tlbik7CisJ
ICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHZvaWQgMDsKKwkgICAgICAgICAgICAgICAgZW50
cnkgPSB7CisJICAgICAgICAgICAgICAgICAgICB0eXBlOiB0b2tlbl8xLlRva2VuTmFtZVt0b2tl
bi50eXBlXSwKKwkgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNjYW5uZXIuc291cmNl
LnNsaWNlKHRva2VuLnN0YXJ0LCB0b2tlbi5lbmQpCisJICAgICAgICAgICAgICAgIH07CisJICAg
ICAgICAgICAgICAgIGlmICh0aGlzLnRyYWNrUmFuZ2UpIHsKKwkgICAgICAgICAgICAgICAgICAg
IGVudHJ5LnJhbmdlID0gW3Rva2VuLnN0YXJ0LCB0b2tlbi5lbmRdOworCSAgICAgICAgICAgICAg
ICB9CisJICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyYWNrTG9jKSB7CisJICAgICAgICAgICAg
ICAgICAgICBsb2MuZW5kID0geworCSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IHRoaXMu
c2Nhbm5lci5saW5lTnVtYmVyLAorCSAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdGhp
cy5zY2FubmVyLmluZGV4IC0gdGhpcy5zY2FubmVyLmxpbmVTdGFydAorCSAgICAgICAgICAgICAg
ICAgICAgfTsKKwkgICAgICAgICAgICAgICAgICAgIGVudHJ5LmxvYyA9IGxvYzsKKwkgICAgICAg
ICAgICAgICAgfQorCSAgICAgICAgICAgICAgICBpZiAodG9rZW4ucmVnZXgpIHsKKwkgICAgICAg
ICAgICAgICAgICAgIGVudHJ5LnJlZ2V4ID0gdG9rZW4ucmVnZXg7CisJICAgICAgICAgICAgICAg
IH0KKwkgICAgICAgICAgICAgICAgdGhpcy5idWZmZXIucHVzaChlbnRyeSk7CisJICAgICAgICAg
ICAgfQorCSAgICAgICAgfQorCSAgICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyLnNoaWZ0KCk7CisJ
ICAgIH07CisJICAgIDsKKwkgICAgcmV0dXJuIFRva2VuaXplcjsKKwl9KCkpOworCWV4cG9ydHMu
VG9rZW5pemVyID0gVG9rZW5pemVyOworCisKKy8qKiovIH0KKy8qKioqKiovIF0pCit9KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9TY3Jp
cHRTeW50YXhUcmVlLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9k
ZWxzL1NjcmlwdFN5bnRheFRyZWUuanMKaW5kZXggMDUwNzAyOC4uYjAxMzgwNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdFN5bnRh
eFRyZWUuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxz
L1NjcmlwdFN5bnRheFRyZWUuanMKQEAgLTMyNyw2ICszMjcsOSBAQCBXZWJJbnNwZWN0b3IuU2Ny
aXB0U3ludGF4VHJlZSA9IGNsYXNzIFNjcmlwdFN5bnRheFRyZWUgZXh0ZW5kcyBXZWJJbnNwZWN0
b3IuT2JqZQogICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmxlZnQsIGNhbGxiYWNrLCBz
dGF0ZSk7CiAgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUucmlnaHQsIGNhbGxiYWNrLCBz
dGF0ZSk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2Ny
aXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Bd2FpdEV4cHJlc3Npb246CisgICAgICAgICAgICB0aGlz
Ll9yZWN1cnNlKG5vZGUuYXJndW1lbnQsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlw
ZS5CbG9ja1N0YXRlbWVudDoKICAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLmJv
ZHksIGNhbGxiYWNrLCBzdGF0ZSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTM4MSw3ICszODQs
NiBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZSA9IGNsYXNzIFNjcmlwdFN5bnRheFRy
ZWUgZXh0ZW5kcyBXZWJJbnNwZWN0b3IuT2JqZQogICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5T
Y3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkFycm93RnVuY3Rpb25FeHByZXNzaW9uOgogICAgICAg
ICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmlkLCBjYWxsYmFjaywgc3RhdGUpOwogICAgICAgICAg
ICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUucGFyYW1zLCBjYWxsYmFjaywgc3RhdGUpOwotICAg
ICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuZGVmYXVsdHMsIGNhbGxiYWNrLCBzdGF0
ZSk7CiAgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgY2FsbGJhY2ssIHN0YXRl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRT
eW50YXhUcmVlLk5vZGVUeXBlLklmU3RhdGVtZW50OgpAQCAtNTM0LDEwICs1MzYsMTAgQEAgV2Vi
SW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUgPSBjbGFzcyBTY3JpcHRTeW50YXhUcmVlIGV4dGVu
ZHMgV2ViSW5zcGVjdG9yLk9iamUKICAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3Iu
U2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5BcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiwKICAgICAg
ICAgICAgICAgICBpZDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuaWQpLAog
ICAgICAgICAgICAgICAgIHBhcmFtczogbm9kZS5wYXJhbXMubWFwKHRoaXMuX2NyZWF0ZUludGVy
bmFsU3ludGF4VHJlZSwgdGhpcyksCi0gICAgICAgICAgICAgICAgZGVmYXVsdHM6IG5vZGUuZGVm
YXVsdHMubWFwKHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZSwgdGhpcyksCiAgICAgICAg
ICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuYm9keSks
CiAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yOiBub2RlLmdlbmVyYXRvciwKICAgICAgICAgICAg
ICAgICBleHByZXNzaW9uOiBub2RlLmV4cHJlc3Npb24sIC8vIEJvb2xlYW4gaW5kaWNhdGluZyBp
ZiB0aGUgYm9keSBhIHNpbmdsZSBleHByZXNzaW9uIG9yIGEgYmxvY2sgc3RhdGVtZW50LgorICAg
ICAgICAgICAgICAgIGFzeW5jOiBub2RlLmFzeW5jLAogICAgICAgICAgICAgICAgIHR5cGVQcm9m
aWxpbmdSZXR1cm5EaXZvdDogbm9kZS5yYW5nZVswXQogICAgICAgICAgICAgfTsKICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtNTU2LDYgKzU1OCwxMiBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4
VHJlZSA9IGNsYXNzIFNjcmlwdFN5bnRheFRyZWUgZXh0ZW5kcyBXZWJJbnNwZWN0b3IuT2JqZQog
ICAgICAgICAgICAgICAgIHJpZ2h0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9k
ZS5yaWdodCksCiAgICAgICAgICAgICB9OwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgIkF3YWl0RXhwcmVzc2lvbiI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAg
ICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQXdhaXRF
eHByZXNzaW9uLAorICAgICAgICAgICAgICAgIGFyZ3VtZW50OiB0aGlzLl9jcmVhdGVJbnRlcm5h
bFN5bnRheFRyZWUobm9kZS5hcmd1bWVudCksCisgICAgICAgICAgICB9OworICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgIkJsb2NrU3RhdGVtZW50IjoKICAgICAgICAgICAgIHJlc3Vs
dCA9IHsKICAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJl
ZS5Ob2RlVHlwZS5CbG9ja1N0YXRlbWVudCwKQEAgLTY3OSw5ICs2ODcsOSBAQCBXZWJJbnNwZWN0
b3IuU2NyaXB0U3ludGF4VHJlZSA9IGNsYXNzIFNjcmlwdFN5bnRheFRyZWUgZXh0ZW5kcyBXZWJJ
bnNwZWN0b3IuT2JqZQogICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRT
eW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9uRGVjbGFyYXRpb24sCiAgICAgICAgICAgICAgICAg
aWQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmlkKSwKICAgICAgICAgICAg
ICAgICBwYXJhbXM6IG5vZGUucGFyYW1zLm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRy
ZWUsIHRoaXMpLAotICAgICAgICAgICAgICAgIGRlZmF1bHRzOiBub2RlLmRlZmF1bHRzLm1hcCh0
aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUsIHRoaXMpLAogICAgICAgICAgICAgICAgIGJv
ZHk6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmJvZHkpLAogICAgICAgICAg
ICAgICAgIGdlbmVyYXRvcjogbm9kZS5nZW5lcmF0b3IsCisgICAgICAgICAgICAgICAgYXN5bmM6
IG5vZGUuYXN5bmMsCiAgICAgICAgICAgICAgICAgdHlwZVByb2ZpbGluZ1JldHVybkRpdm90OiBu
b2RlLnJhbmdlWzBdCiAgICAgICAgICAgICB9OwogICAgICAgICAgICAgYnJlYWs7CkBAIC02OTAs
OSArNjk4LDkgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUgPSBjbGFzcyBTY3JpcHRT
eW50YXhUcmVlIGV4dGVuZHMgV2ViSW5zcGVjdG9yLk9iamUKICAgICAgICAgICAgICAgICB0eXBl
OiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5GdW5jdGlvbkV4cHJlc3Np
b24sCiAgICAgICAgICAgICAgICAgaWQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShu
b2RlLmlkKSwKICAgICAgICAgICAgICAgICBwYXJhbXM6IG5vZGUucGFyYW1zLm1hcCh0aGlzLl9j
cmVhdGVJbnRlcm5hbFN5bnRheFRyZWUsIHRoaXMpLAotICAgICAgICAgICAgICAgIGRlZmF1bHRz
OiBub2RlLmRlZmF1bHRzLm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUsIHRoaXMp
LAogICAgICAgICAgICAgICAgIGJvZHk6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShu
b2RlLmJvZHkpLAogICAgICAgICAgICAgICAgIGdlbmVyYXRvcjogbm9kZS5nZW5lcmF0b3IsCisg
ICAgICAgICAgICAgICAgYXN5bmM6IG5vZGUuYXN5bmMsCiAgICAgICAgICAgICAgICAgdHlwZVBy
b2ZpbGluZ1JldHVybkRpdm90OiBub2RlLnJhbmdlWzBdIC8vIFRoaXMgbWF5IGJlIG92ZXJyaWRk
ZW4gaW4gdGhlIFByb3BlcnR5IEFTVCBub2RlLgogICAgICAgICAgICAgfTsKICAgICAgICAgICAg
IGJyZWFrOwpAQCAtNzQ0LDggKzc1Miw4IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVl
ID0gY2xhc3MgU2NyaXB0U3ludGF4VHJlZSBleHRlbmRzIFdlYkluc3BlY3Rvci5PYmplCiAgICAg
ICAgICAgICAvLyBpLmU6IG5ldy50YXJnZXQgcHJvZHVjZXMge21ldGE6ICJuZXciLCBwcm9wZXJ0
eTogInRhcmdldCJ9CiAgICAgICAgICAgICByZXN1bHQgPSB7CiAgICAgICAgICAgICAgICAgdHlw
ZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuTWV0YVByb3BlcnR5LAot
ICAgICAgICAgICAgICAgIG1ldGE6IG5vZGUubWV0YSwKLSAgICAgICAgICAgICAgICBwcm9wZXJ0
eTogbm9kZS5wcm9wZXJ0eQorICAgICAgICAgICAgICAgIG1ldGE6IHRoaXMuX2NyZWF0ZUludGVy
bmFsU3ludGF4VHJlZShub2RlLm1ldGEpLAorICAgICAgICAgICAgICAgIHByb3BlcnR5OiB0aGlz
Ll9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5wcm9wZXJ0eSksCiAgICAgICAgICAgICB9
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgIk1ldGhvZERlZmluaXRpb24iOgpA
QCAtOTU1LDYgKzk2Myw3IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBl
ID0gewogICAgIEFycm93RnVuY3Rpb25FeHByZXNzaW9uOiBTeW1ib2woImFycm93LWZ1bmN0aW9u
LWV4cHJlc3Npb24iKSwKICAgICBBc3NpZ25tZW50RXhwcmVzc2lvbjogU3ltYm9sKCJhc3NpZ25t
ZW50LWV4cHJlc3Npb24iKSwKICAgICBBc3NpZ25tZW50UGF0dGVybjogU3ltYm9sKCJhc3NpZ25t
ZW50LXBhdHRlcm4iKSwKKyAgICBBd2FpdEV4cHJlc3Npb246IFN5bWJvbCgiYXdhaXQtZXhwcmVz
c2lvbiIpLAogICAgIEJpbmFyeUV4cHJlc3Npb246IFN5bWJvbCgiYmluYXJ5LWV4cHJlc3Npb24i
KSwKICAgICBCbG9ja1N0YXRlbWVudDogU3ltYm9sKCJibG9jay1zdGF0ZW1lbnQiKSwKICAgICBC
cmVha1N0YXRlbWVudDogU3ltYm9sKCJicmVhay1zdGF0ZW1lbnQiKSwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1dvcmtlcnMvRm9ybWF0dGVyL0VTVHJl
ZVdhbGtlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1dvcmtlcnMv
Rm9ybWF0dGVyL0VTVHJlZVdhbGtlci5qcwppbmRleCBiZDVkZDkyLi41MjZmNjEwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Xb3JrZXJzL0Zvcm1hdHRl
ci9FU1RyZWVXYWxrZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvV29ya2Vycy9Gb3JtYXR0ZXIvRVNUcmVlV2Fsa2VyLmpzCkBAIC04Niw2ICs4Niw5IEBAIEVT
VHJlZVdhbGtlciA9IGNsYXNzIEVTVHJlZVdhbGtlcgogICAgICAgICAgICAgdGhpcy5fd2Fsayhu
b2RlLmxlZnQsIG5vZGUpOwogICAgICAgICAgICAgdGhpcy5fd2Fsayhub2RlLnJpZ2h0LCBub2Rl
KTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJBd2FpdEV4cHJlc3Npb24iOgor
ICAgICAgICAgICAgdGhpcy5fd2Fsayhub2RlLmFyZ3VtZW50LCBub2RlKTsKKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlICJCbG9ja1N0YXRlbWVudCI6CiAgICAgICAgICAgICB0aGlz
Ll93YWxrQXJyYXkobm9kZS5ib2R5LCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTM3
LDkgKzE0MCw3IEBAIEVTVHJlZVdhbGtlciA9IGNsYXNzIEVTVHJlZVdhbGtlcgogICAgICAgICBj
YXNlICJGdW5jdGlvbkV4cHJlc3Npb24iOgogICAgICAgICBjYXNlICJBcnJvd0Z1bmN0aW9uRXhw
cmVzc2lvbiI6CiAgICAgICAgICAgICB0aGlzLl93YWxrKG5vZGUuaWQsIG5vZGUpOwotICAgICAg
ICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IGl0ZXJhdGUgcGFyYW1zL2RlZmF1
bHRzIGluIHNwZWNpYWwgb3JkZXIuCiAgICAgICAgICAgICB0aGlzLl93YWxrQXJyYXkobm9kZS5w
YXJhbXMsIG5vZGUpOwotICAgICAgICAgICAgdGhpcy5fd2Fsa0FycmF5KG5vZGUuZGVmYXVsdHMs
IG5vZGUpOwogICAgICAgICAgICAgdGhpcy5fd2Fsayhub2RlLmJvZHksIG5vZGUpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgIklmU3RhdGVtZW50IjoKQEAgLTI2OSw2ICsyNzAs
MTAgQEAgRVNUcmVlV2Fsa2VyID0gY2xhc3MgRVNUcmVlV2Fsa2VyCiAgICAgICAgICAgICB0aGlz
Ll93YWxrKG5vZGUuaW1wb3J0ZWQsIG5vZGUpOwogICAgICAgICAgICAgdGhpcy5fd2Fsayhub2Rl
LmxvY2FsLCBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJNZXRhUHJv
cGVydHkiOgorICAgICAgICAgICAgdGhpcy5fd2Fsayhub2RlLm1ldGEsIG5vZGUpOworICAgICAg
ICAgICAgdGhpcy5fd2Fsayhub2RlLnByb3BlcnR5LCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgIC8vIFNwZWNpYWwgY2FzZS4gV2Ugd2FudCB0byB3YWxrIGluIHByb2dyYW0g
b3JkZXIsCiAgICAgICAgIC8vIHNvIHdhbGsgcXVhc2ksIGV4cHJlc3Npb24sIHF1YXNpLCBleHBy
ZXNzaW9uLCBldGMuCkBAIC0yODQsNyArMjg5LDYgQEAgRVNUcmVlV2Fsa2VyID0gY2xhc3MgRVNU
cmVlV2Fsa2VyCiAgICAgICAgIGNhc2UgIkVtcHR5U3RhdGVtZW50IjoKICAgICAgICAgY2FzZSAi
SWRlbnRpZmllciI6CiAgICAgICAgIGNhc2UgIkxpdGVyYWwiOgotICAgICAgICBjYXNlICJNZXRh
UHJvcGVydHkiOgogICAgICAgICBjYXNlICJTdXBlciI6CiAgICAgICAgIGNhc2UgIlRoaXNFeHBy
ZXNzaW9uIjoKICAgICAgICAgY2FzZSAiVGVtcGxhdGVFbGVtZW50IjoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1dvcmtlcnMvRm9ybWF0dGVyL0VzcHJp
bWFGb3JtYXR0ZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Xb3Jr
ZXJzL0Zvcm1hdHRlci9Fc3ByaW1hRm9ybWF0dGVyLmpzCmluZGV4IDljZGMxNmYuLmIwMGFiNTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1dvcmtlcnMv
Rm9ybWF0dGVyL0VzcHJpbWFGb3JtYXR0ZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvV29ya2Vycy9Gb3JtYXR0ZXIvRXNwcmltYUZvcm1hdHRlci5qcwpAQCAt
MjA5LDExICsyMDksMTkgQEAgRXNwcmltYUZvcm1hdHRlciA9IGNsYXNzIEVzcHJpbWFGb3JtYXR0
ZXIKICAgICAgICAgbGV0IHRva2VuT2Zmc2V0ID0gdG9rZW4ucmFuZ2VbMF07CiAKICAgICAgICAg
Ly8gVmVyeSBjb21tb24gdHlwZXMgdGhhdCBqdXN0IHBhc3MgdGhyb3VnaC4KLSAgICAgICAgaWYg
KG5vZGVUeXBlID09PSAiSWRlbnRpZmllciIgfHwgbm9kZVR5cGUgPT09ICJNZW1iZXJFeHByZXNz
aW9uIiB8fCBub2RlVHlwZSA9PT0gIkxpdGVyYWwiIHx8IG5vZGVUeXBlID09PSAiVGhpc0V4cHJl
c3Npb24iIHx8IG5vZGVUeXBlID09PSAiVXBkYXRlRXhwcmVzc2lvbiIpIHsKKyAgICAgICAgaWYg
KG5vZGVUeXBlID09PSAiTWVtYmVyRXhwcmVzc2lvbiIgfHwgbm9kZVR5cGUgPT09ICJMaXRlcmFs
IiB8fCBub2RlVHlwZSA9PT0gIlRoaXNFeHByZXNzaW9uIiB8fCBub2RlVHlwZSA9PT0gIlVwZGF0
ZUV4cHJlc3Npb24iKSB7CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFRva2VuKHRva2VuVmFs
dWUsIHRva2VuT2Zmc2V0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCisgICAg
ICAgIC8vIE1vc3QgaWRlbnRpZmllcnMganVzdCBwYXNzIHRocm91Z2gsIGJ1dCBhIGZldyBhcmUg
c3BlY2lhbC4KKyAgICAgICAgaWYgKG5vZGVUeXBlID09PSAiSWRlbnRpZmllciIpIHsKKyAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kVG9rZW4odG9rZW5WYWx1ZSwgdG9rZW5PZmZzZXQpOworICAg
ICAgICAgICAgaWYgKHRva2VuVmFsdWUgPT09ICJhc3luYyIgJiYgbm9kZS5wYXJlbnQudHlwZSA9
PT0gIlByb3BlcnR5IiAmJiBub2RlLnBhcmVudC52YWx1ZS5hc3luYyAmJiB0b2tlbi5yYW5nZVsx
XSAhPT0gbm9kZS5yYW5nZVsxXSkKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFNwYWNl
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICAvLyBNb3N0IG5l
d2xpbmUgaGFuZGxpbmcgaXMgZG9uZSB3aXRoIHNlbWljb2xvbnMuIEhvd2V2ZXIsIHdlIHByZXNl
cnZlCiAgICAgICAgIC8vIG5ld2xpbmVzIHNvIGNvZGUgcmVseWluZyBvbiBhdXRvbWF0aWMgc2Vt
aWNvbG9uIGluc2VydGlvbiBzaG91bGQKICAgICAgICAgLy8gY29udGludWUgdG8gd29yay4KQEAg
LTQyNiw2ICs0MzQsMTEgQEAgRXNwcmltYUZvcm1hdHRlciA9IGNsYXNzIEVzcHJpbWFGb3JtYXR0
ZXIKICAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRTcGFjZSgpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0b2tlblR5cGUg
PT09ICJJZGVudGlmaWVyIiAmJiB0b2tlblZhbHVlID09PSAiYXN5bmMiKSB7CisgICAgICAgICAg
ICAgICAgYnVpbGRlci5hcHBlbmRUb2tlbih0b2tlblZhbHVlLCB0b2tlbk9mZnNldCk7CisgICAg
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRTcGFjZSgpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kVG9rZW4odG9rZW5W
YWx1ZSwgdG9rZW5PZmZzZXQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC02
NjEsNiArNjc0LDE1IEBAIEVzcHJpbWFGb3JtYXR0ZXIgPSBjbGFzcyBFc3ByaW1hRm9ybWF0dGVy
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmRUb2tlbih0b2tlblZhbHVlLCB0b2tlbk9mZnNldCk7CisgICAgICAgICAgICBpZiAodG9r
ZW5UeXBlID09PSAiSWRlbnRpZmllciIgJiYgdG9rZW5WYWx1ZSA9PT0gImFzeW5jIikKKyAgICAg
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZFNwYWNlKCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAobm9kZVR5cGUgPT09ICJBd2FpdEV4cHJlc3Npb24iKSB7
CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFRva2VuKHRva2VuVmFsdWUsIHRva2VuT2Zmc2V0
KTsKKyAgICAgICAgICAgIGlmICh0b2tlblR5cGUgPT09ICJJZGVudGlmaWVyIiAmJiB0b2tlblZh
bHVlID09PSAiYXdhaXQiKQorICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kU3BhY2UoKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC03NTksNyArNzgxLDcgQEAgRXNw
cmltYUZvcm1hdHRlciA9IGNsYXNzIEVzcHJpbWFGb3JtYXR0ZXIKICAgICAgICAgfQogCiAgICAg
ICAgIGlmIChub2RlVHlwZSA9PT0gIk1ldGhvZERlZmluaXRpb24iKSB7Ci0gICAgICAgICAgICBj
b25zb2xlLmFzc2VydCh0b2tlblZhbHVlID09PSAic3RhdGljIiB8fCB0b2tlblZhbHVlID09PSAi
Z2V0IiB8fCB0b2tlblZhbHVlID09PSAic2V0IiB8fCB0b2tlblZhbHVlID09PSAiKiIsIHRva2Vu
KTsKKyAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRva2VuVmFsdWUgPT09ICJzdGF0aWMiIHx8
IHRva2VuVmFsdWUgPT09ICJhc3luYyIgfHwgdG9rZW5WYWx1ZSA9PT0gImdldCIgfHwgdG9rZW5W
YWx1ZSA9PT0gInNldCIgfHwgdG9rZW5WYWx1ZSA9PT0gIioiLCB0b2tlbik7CiAgICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZFRva2VuKHRva2VuVmFsdWUsIHRva2VuT2Zmc2V0KTsKICAgICAgICAg
ICAgIGlmICh0b2tlblZhbHVlICE9PSAiKiIpCiAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmRTcGFjZSgpOwpAQCAtODEwLDcgKzgzMiw4IEBAIEVzcHJpbWFGb3JtYXR0ZXIgPSBjbGFzcyBF
c3ByaW1hRm9ybWF0dGVyCiAgICAgICAgICAgICB8fCBub2RlVHlwZSA9PT0gIlJlc3RFbGVtZW50
IgogICAgICAgICAgICAgfHwgbm9kZVR5cGUgPT09ICJUZW1wbGF0ZUVsZW1lbnQiCiAgICAgICAg
ICAgICB8fCBub2RlVHlwZSA9PT0gIlRlbXBsYXRlTGl0ZXJhbCIKLSAgICAgICAgICAgIHx8IG5v
ZGVUeXBlID09PSAiRGVidWdnZXJTdGF0ZW1lbnQiKSB7CisgICAgICAgICAgICB8fCBub2RlVHlw
ZSA9PT0gIkRlYnVnZ2VyU3RhdGVtZW50IgorICAgICAgICAgICAgfHwgbm9kZVR5cGUgPT09ICJB
c3NpZ25tZW50UGF0dGVybiIpIHsKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kVG9rZW4odG9r
ZW5WYWx1ZSwgdG9rZW5PZmZzZXQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Cg==
</data>
<flag name="review"
          id="317619"
          type_id="1"
          status="+"
          setter="timothy"
    />
    <flag name="commit-queue"
          id="317620"
          type_id="3"
          status="-"
          setter="joepeck"
    />
          </attachment>
      

    </bug>

</bugzilla>