<?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>55911</bug_id>
          
          <creation_ts>2011-03-07 16:40:46 -0800</creation_ts>
          <short_desc>Import jquery test suite</short_desc>
          <delta_ts>2011-03-08 00:59:31 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>mathias</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>363679</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-07 16:40:46 -0800</bug_when>
    <thetext>Import jquery test suite</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363681</commentid>
    <comment_count>1</comment_count>
      <attachid>84995</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-07 16:44:18 -0800</bug_when>
    <thetext>Created attachment 84995
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363684</commentid>
    <comment_count>2</comment_count>
      <attachid>84995</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-07 16:46:24 -0800</bug_when>
    <thetext>Comment on attachment 84995
Patch

phasers to stun.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363692</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-07 16:57:46 -0800</bug_when>
    <thetext>Committed r80511: &lt;http://trac.webkit.org/changeset/80511&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363885</commentid>
    <comment_count>4</comment_count>
    <who name="Mathias Bynens">mathias</who>
    <bug_when>2011-03-08 00:59:31 -0800</bug_when>
    <thetext>Bug 55928 (adding the missing Ajax tests) is a follow-up to this one.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84995</attachid>
            <date>2011-03-07 16:44:18 -0800</date>
            <delta_ts>2011-03-07 16:46:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55911-20110307164415.patch</filename>
            <type>text/plain</type>
            <size>849241</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDgwNTA4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDMtMDcgIEFkYW0gQmFydGggIDxhYmFy
dGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBJbXBvcnQganF1ZXJ5IHRlc3Qgc3VpdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1OTExCisKKyAgICAgICAgVGhpcyB0ZXN0IHN1aXRl
IGlzIGltcG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkuICBJCisg
ICAgICAgIHRyaWVkIHRvIG1ha2UgYXMgZmV3IGNoYW5nZXMgYXMgcG9zc2libGUgaW4gY2FzZSB3
ZSB3YW50IHRvIG1lcmdlIHdpdGgKKyAgICAgICAgdXBzdHJlYW0gaW4gdGhlIGZ1dHVyZS4gIFRo
ZSB0ZXN0IHN1aXRlIHdhcyBvcmlnaW5hbCBsaWNlbnNlZCB1bmRlciB0aGUKKyAgICAgICAgTUlU
IGxpY2Vuc2UsIHdoaWNoIGlzIGNvbXBhdGlibGUgd2l0aCBXZWJLaXQncyBsaWNlbnNlLgorCisg
ICAgICAgICoganF1ZXJ5OiBBZGRlZC4KKwogMjAxMS0wMy0wNyAgQWRhbSBCYXJ0aCAgPGFiYXJ0
aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KSW5k
ZXg6IExheW91dFRlc3RzL2pxdWVyeS9hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9qcXVlcnkvYXR0cmlidXRlcy1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9qcXVlcnkvYXR0cmlidXRlcy1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMiBAQAorQUxFUlQ6IDMzOSB0ZXN0cyBvZiAzMzkgcGFzc2VkLCAw
IGZhaWxlZC4KKwpJbmRleDogTGF5b3V0VGVzdHMvanF1ZXJ5L2F0dHJpYnV0ZXMuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcXVlcnkvYXR0cmlidXRlcy5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvanF1ZXJ5L2F0dHJpYnV0ZXMuaHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwyIEBACis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2hlbHBlci5qcyI+PC9zY3JpcHQ+
Cis8aWZyYW1lIHNyYz0icmVzb3VyY2VzL3Rlc3QvaW5kZXguaHRtbD9hdHRyaWJ1dGVzIj48L2lm
cmFtZT4KSW5kZXg6IExheW91dFRlc3RzL2pxdWVyeS9jb3JlLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9qcXVlcnkvY29yZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9qcXVlcnkvY29yZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMiBAQAorQUxFUlQ6IDY2NyB0ZXN0cyBvZiA2NjcgcGFzc2VkLCAwIGZhaWxlZC4K
KwpJbmRleDogTGF5b3V0VGVzdHMvanF1ZXJ5L2NvcmUuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9qcXVlcnkvY29yZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanF1
ZXJ5L2NvcmUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyIEBACis8c2NyaXB0IHNyYz0i
cmVzb3VyY2VzL2hlbHBlci5qcyI+PC9zY3JpcHQ+Cis8aWZyYW1lIHNyYz0icmVzb3VyY2VzL3Rl
c3QvaW5kZXguaHRtbD9jb3JlIj48L2lmcmFtZT4KSW5kZXg6IExheW91dFRlc3RzL2pxdWVyeS9j
c3MtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pxdWVyeS9jc3MtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanF1ZXJ5L2Nzcy1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMiBAQAorQUxFUlQ6IDgyIHRlc3RzIG9mIDgy
IHBhc3NlZCwgMCBmYWlsZWQuCisKSW5kZXg6IExheW91dFRlc3RzL2pxdWVyeS9jc3MuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcXVlcnkvY3NzLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9qcXVlcnkvY3NzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMiBA
QAorPHNjcmlwdCBzcmM9InJlc291cmNlcy9oZWxwZXIuanMiPjwvc2NyaXB0PgorPGlmcmFtZSBz
cmM9InJlc291cmNlcy90ZXN0L2luZGV4Lmh0bWw/Y3NzIj48L2lmcmFtZT4KSW5kZXg6IExheW91
dFRlc3RzL2pxdWVyeS9kYXRhLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9qcXVlcnkvZGF0YS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9q
cXVlcnkvZGF0YS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMiBAQAorQUxF
UlQ6IDIyNCB0ZXN0cyBvZiAyMjQgcGFzc2VkLCAwIGZhaWxlZC4KKwpJbmRleDogTGF5b3V0VGVz
dHMvanF1ZXJ5L2RhdGEuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcXVlcnkvZGF0
YS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanF1ZXJ5L2RhdGEuaHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwyIEBACis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2hlbHBlci5q
cyI+PC9zY3JpcHQ+Cis8aWZyYW1lIHNyYz0icmVzb3VyY2VzL3Rlc3QvaW5kZXguaHRtbD9kYXRh
Ij48L2lmcmFtZT4KSW5kZXg6IExheW91dFRlc3RzL2pxdWVyeS9kZWZlcnJlZC1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanF1ZXJ5L2RlZmVycmVkLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pxdWVyeS9kZWZlcnJlZC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMiBAQAorQUxFUlQ6IDUyIHRlc3RzIG9mIDUyIHBh
c3NlZCwgMCBmYWlsZWQuCisKSW5kZXg6IExheW91dFRlc3RzL2pxdWVyeS9kZWZlcnJlZC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pxdWVyeS9kZWZlcnJlZC5odG1sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvanF1ZXJ5L2RlZmVycmVkLmh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMiBAQAorPHNjcmlwdCBzcmM9InJlc291cmNlcy9oZWxwZXIuanMiPjwvc2NyaXB0
PgorPGlmcmFtZSBzcmM9InJlc291cmNlcy90ZXN0L2luZGV4Lmh0bWw/ZGVmZXJyZWQiPjwvaWZy
YW1lPgpJbmRleDogTGF5b3V0VGVzdHMvanF1ZXJ5L2RpbWVuc2lvbnMtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pxdWVyeS9kaW1lbnNpb25zLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pxdWVyeS9kaW1lbnNpb25zLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyIEBACitBTEVSVDogNTggdGVzdHMgb2YgNTggcGFz
c2VkLCAwIGZhaWxlZC4KKwpJbmRleDogTGF5b3V0VGVzdHMvanF1ZXJ5L2RpbWVuc2lvbnMuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcXVlcnkvZGltZW5zaW9ucy5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanF1ZXJ5L2RpbWVuc2lvbnMuaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwyIEBACis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2hlbHBlci5qcyI+PC9z
Y3JpcHQ+Cis8aWZyYW1lIHNyYz0icmVzb3VyY2VzL3Rlc3QvaW5kZXguaHRtbD9kaW1lbnNpb25z
Ij48L2lmcmFtZT4KSW5kZXg6IExheW91dFRlc3RzL2pxdWVyeS9lZmZlY3RzLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcXVlcnkvZWZmZWN0cy1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcXVlcnkvZWZmZWN0cy1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMiBAQAorQUxFUlQ6IDQyMCB0ZXN0cyBvZiA0MjAgcGFz
c2VkLCAwIGZhaWxlZC4KKwpJbmRleDogTGF5b3V0VGVzdHMvanF1ZXJ5L2VmZmVjdHMuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcXVlcnkvZWZmZWN0cy5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvanF1ZXJ5L2VmZmVjdHMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyIEBACis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2hlbHBlci5qcyI+PC9zY3JpcHQ+Cis8
aWZyYW1lIHNyYz0icmVzb3VyY2VzL3Rlc3QvaW5kZXguaHRtbD9lZmZlY3RzIj48L2lmcmFtZT4K
SW5kZXg6IExheW91dFRlc3RzL2pxdWVyeS9ldmVudC1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanF1ZXJ5L2V2ZW50LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2pxdWVyeS9ldmVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMiBAQAorQUxFUlQ6IDM3NiB0ZXN0cyBvZiAzNzYgcGFzc2VkLCAwIGZhaWxlZC4KKwpJ
bmRleDogTGF5b3V0VGVzdHMvanF1ZXJ5L2V2ZW50Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvanF1ZXJ5L2V2ZW50Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcXVl
cnkvZXZlbnQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyIEBACis8c2NyaXB0IHNyYz0i
cmVzb3VyY2VzL2hlbHBlci5qcyI+PC9zY3JpcHQ+Cis8aWZyYW1lIHNyYz0icmVzb3VyY2VzL3Rl
c3QvaW5kZXguaHRtbD9ldmVudCI+PC9pZnJhbWU+CkluZGV4OiBMYXlvdXRUZXN0cy9qcXVlcnkv
bWFuaXB1bGF0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcXVl
cnkvbWFuaXB1bGF0aW9uLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2pxdWVyeS9tYW5pcHVsYXRpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDIgQEAKK0FMRVJUOiA0NzMgdGVzdHMgb2YgNDczIHBhc3NlZCwgMCBmYWlsZWQuCisKSW5kZXg6
IExheW91dFRlc3RzL2pxdWVyeS9tYW5pcHVsYXRpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9qcXVlcnkvbWFuaXB1bGF0aW9uLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9qcXVlcnkvbWFuaXB1bGF0aW9uLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMiBA
QAorPHNjcmlwdCBzcmM9InJlc291cmNlcy9oZWxwZXIuanMiPjwvc2NyaXB0PgorPGlmcmFtZSBz
cmM9InJlc291cmNlcy90ZXN0L2luZGV4Lmh0bWw/bWFuaXB1bGF0aW9uIj48L2lmcmFtZT4KSW5k
ZXg6IExheW91dFRlc3RzL2pxdWVyeS9vZmZzZXQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2pxdWVyeS9vZmZzZXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvanF1ZXJ5L29mZnNldC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMiBAQAorQUxFUlQ6IDM4NyB0ZXN0cyBvZiAzODcgcGFzc2VkLCAwIGZhaWxlZC4KKwpJ
bmRleDogTGF5b3V0VGVzdHMvanF1ZXJ5L29mZnNldC5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2pxdWVyeS9vZmZzZXQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2px
dWVyeS9vZmZzZXQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyIEBACis8c2NyaXB0IHNy
Yz0icmVzb3VyY2VzL2hlbHBlci5qcyI+PC9zY3JpcHQ+Cis8aWZyYW1lIHNyYz0icmVzb3VyY2Vz
L3Rlc3QvaW5kZXguaHRtbD9vZmZzZXQiPjwvaWZyYW1lPgpJbmRleDogTGF5b3V0VGVzdHMvanF1
ZXJ5L3RyYXZlcnNpbmctZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2px
dWVyeS90cmF2ZXJzaW5nLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2pxdWVyeS90cmF2ZXJzaW5nLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
IEBACitBTEVSVDogMTk4IHRlc3RzIG9mIDE5OCBwYXNzZWQsIDAgZmFpbGVkLgorCkluZGV4OiBM
YXlvdXRUZXN0cy9qcXVlcnkvdHJhdmVyc2luZy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2pxdWVyeS90cmF2ZXJzaW5nLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9q
cXVlcnkvdHJhdmVyc2luZy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIgQEAKKzxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvaGVscGVyLmpzIj48L3NjcmlwdD4KKzxpZnJhbWUgc3JjPSJyZXNv
dXJjZXMvdGVzdC9pbmRleC5odG1sP3RyYXZlcnNpbmciPjwvaWZyYW1lPgpJbmRleDogTGF5b3V0
VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy9oZWxwZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvanF1ZXJ5L3Jlc291cmNlcy9oZWxwZXIuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9qcXVlcnkvcmVzb3VyY2VzL2hlbHBlci5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNiBA
QAoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBBc1RleHQoKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERv
bmUoKQorfQorCit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1bmN0aW9uIChl
dnQpIHsKKyAgICBpZiAoZXZ0LmRhdGEgIT0gJ3F1bml0Ojpkb25lJykKKyAgICAgICAgcmV0dXJu
OworICAgIHZhciByZXN1bHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lmcmFt
ZScpWzBdLmNvbnRlbnREb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjcXVuaXQtdGVzdHJlc3VsdCcp
LnRleHRDb250ZW50OworICAgIHZhciBrZXkgPSAnbWlsbGlzZWNvbmRzLic7CisgICAgYWxlcnQo
cmVzdWx0cy5zdWJzdHIocmVzdWx0cy5pbmRleE9mKGtleSkgKyBrZXkubGVuZ3RoKSk7CisgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIubm90aWZ5RG9uZSgpOworfSwgZmFsc2UpOworCitkb2N1bWVudC53cml0ZSgnPHN0eWxl
PmlmcmFtZSB7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IH08L3N0eWxlPicpOwpJbmRleDog
TGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy9zcmMvYWpheC5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3NyYy9hamF4LmpzCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy9zcmMvYWpheC5qcwkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw5ODIgQEAKKyhmdW5jdGlvbiggalF1ZXJ5ICkgeworCit2YXIgcjIwID0gLyUyMC9n
LAorCXJicmFja2V0ID0gL1xbXF0kLywKKwlyQ1JMRiA9IC9ccj9cbi9nLAorCXJoYXNoID0gLyMu
KiQvLAorCXJoZWFkZXJzID0gL14oLio/KTpbIFx0XSooW15cclxuXSopXHI/JC9tZywgLy8gSUUg
bGVhdmVzIGFuIFxyIGNoYXJhY3RlciBhdCBFT0wKKwlyaW5wdXQgPSAvXig/OmNvbG9yfGRhdGV8
ZGF0ZXRpbWV8ZW1haWx8aGlkZGVufG1vbnRofG51bWJlcnxwYXNzd29yZHxyYW5nZXxzZWFyY2h8
dGVsfHRleHR8dGltZXx1cmx8d2VlaykkL2ksCisJLy8gIzc2NTMsICM4MTI1LCAjODE1MjogbG9j
YWwgcHJvdG9jb2wgZGV0ZWN0aW9uCisJcmxvY2FsUHJvdG9jb2wgPSAvKD86XmZpbGV8XndpZGdl
dHxcLWV4dGVuc2lvbik6JC8sCisJcm5vQ29udGVudCA9IC9eKD86R0VUfEhFQUQpJC8sCisJcnBy
b3RvY29sID0gL15cL1wvLywKKwlycXVlcnkgPSAvXD8vLAorCXJzY3JpcHQgPSAvPHNjcmlwdFxi
W148XSooPzooPyE8XC9zY3JpcHQ+KTxbXjxdKikqPFwvc2NyaXB0Pi9naSwKKwlyc2VsZWN0VGV4
dGFyZWEgPSAvXig/OnNlbGVjdHx0ZXh0YXJlYSkvaSwKKwlyc3BhY2VzQWpheCA9IC9ccysvLAor
CXJ0cyA9IC8oWz8mXSlfPVteJl0qLywKKwlydWNIZWFkZXJzID0gLyhefFwtKShbYS16XSkvZywK
KwlydWNIZWFkZXJzRnVuYyA9IGZ1bmN0aW9uKCBfLCAkMSwgJDIgKSB7CisJCXJldHVybiAkMSAr
ICQyLnRvVXBwZXJDYXNlKCk7CisJfSwKKwlydXJsID0gL14oW1x3XCtcLlwtXSs6KSg/OlwvXC8o
W15cLz8jOl0qKSg/OjooXGQrKSk/fFwvW15cL10pLywKKworCS8vIEtlZXAgYSBjb3B5IG9mIHRo
ZSBvbGQgbG9hZCBtZXRob2QKKwlfbG9hZCA9IGpRdWVyeS5mbi5sb2FkLAorCisJLyogUHJlZmls
dGVycworCSAqIDEpIFRoZXkgYXJlIHVzZWZ1bCB0byBpbnRyb2R1Y2UgY3VzdG9tIGRhdGFUeXBl
cyAoc2VlIGFqYXgvanNvbnAuanMgZm9yIGFuIGV4YW1wbGUpCisJICogMikgVGhlc2UgYXJlIGNh
bGxlZDoKKwkgKiAgICAtIEJFRk9SRSBhc2tpbmcgZm9yIGEgdHJhbnNwb3J0CisJICogICAgLSBB
RlRFUiBwYXJhbSBzZXJpYWxpemF0aW9uIChzLmRhdGEgaXMgYSBzdHJpbmcgaWYgcy5wcm9jZXNz
RGF0YSBpcyB0cnVlKQorCSAqIDMpIGtleSBpcyB0aGUgZGF0YVR5cGUKKwkgKiA0KSB0aGUgY2F0
Y2hhbGwgc3ltYm9sICIqIiBjYW4gYmUgdXNlZAorCSAqIDUpIGV4ZWN1dGlvbiB3aWxsIHN0YXJ0
IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGNvbnRpbnVlIGRvd24gdG8gIioiIGlm
IG5lZWRlZAorCSAqLworCXByZWZpbHRlcnMgPSB7fSwKKworCS8qIFRyYW5zcG9ydHMgYmluZGlu
Z3MKKwkgKiAxKSBrZXkgaXMgdGhlIGRhdGFUeXBlCisJICogMikgdGhlIGNhdGNoYWxsIHN5bWJv
bCAiKiIgY2FuIGJlIHVzZWQKKwkgKiAzKSBzZWxlY3Rpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5z
cG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBnbyB0byAiKiIgaWYgbmVlZGVkCisJICovCisJdHJhbnNw
b3J0cyA9IHt9LAorCisJLy8gRG9jdW1lbnQgbG9jYXRpb24KKwlhamF4TG9jYXRpb24sCisKKwkv
LyBEb2N1bWVudCBsb2NhdGlvbiBzZWdtZW50cworCWFqYXhMb2NQYXJ0czsKKworLy8gIzgxMzgs
IElFIG1heSB0aHJvdyBhbiBleGNlcHRpb24gd2hlbiBhY2Nlc3NpbmcKKy8vIGEgZmllbGQgZnJv
bSBkb2N1bWVudC5sb2NhdGlvbiBpZiBkb2N1bWVudC5kb21haW4gaGFzIGJlZW4gc2V0Cit0cnkg
eworCWFqYXhMb2NhdGlvbiA9IGRvY3VtZW50LmxvY2F0aW9uLmhyZWY7Cit9IGNhdGNoKCBlICkg
eworCS8vIFVzZSB0aGUgaHJlZiBhdHRyaWJ1dGUgb2YgYW4gQSBlbGVtZW50CisJLy8gc2luY2Ug
SUUgd2lsbCBtb2RpZnkgaXQgZ2l2ZW4gZG9jdW1lbnQubG9jYXRpb24KKwlhamF4TG9jYXRpb24g
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiYSIgKTsKKwlhamF4TG9jYXRpb24uaHJlZiA9ICIi
OworCWFqYXhMb2NhdGlvbiA9IGFqYXhMb2NhdGlvbi5ocmVmOworfQorCisvLyBTZWdtZW50IGxv
Y2F0aW9uIGludG8gcGFydHMKK2FqYXhMb2NQYXJ0cyA9IHJ1cmwuZXhlYyggYWpheExvY2F0aW9u
LnRvTG93ZXJDYXNlKCkgKTsKKworLy8gQmFzZSAiY29uc3RydWN0b3IiIGZvciBqUXVlcnkuYWph
eFByZWZpbHRlciBhbmQgalF1ZXJ5LmFqYXhUcmFuc3BvcnQKK2Z1bmN0aW9uIGFkZFRvUHJlZmls
dGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlICkgeworCisJLy8gZGF0YVR5cGVFeHByZXNzaW9u
IGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byAiKiIKKwlyZXR1cm4gZnVuY3Rpb24oIGRhdGFU
eXBlRXhwcmVzc2lvbiwgZnVuYyApIHsKKworCQlpZiAoIHR5cGVvZiBkYXRhVHlwZUV4cHJlc3Np
b24gIT09ICJzdHJpbmciICkgeworCQkJZnVuYyA9IGRhdGFUeXBlRXhwcmVzc2lvbjsKKwkJCWRh
dGFUeXBlRXhwcmVzc2lvbiA9ICIqIjsKKwkJfQorCisJCWlmICggalF1ZXJ5LmlzRnVuY3Rpb24o
IGZ1bmMgKSApIHsKKwkJCXZhciBkYXRhVHlwZXMgPSBkYXRhVHlwZUV4cHJlc3Npb24udG9Mb3dl
ckNhc2UoKS5zcGxpdCggcnNwYWNlc0FqYXggKSwKKwkJCQlpID0gMCwKKwkJCQlsZW5ndGggPSBk
YXRhVHlwZXMubGVuZ3RoLAorCQkJCWRhdGFUeXBlLAorCQkJCWxpc3QsCisJCQkJcGxhY2VCZWZv
cmU7CisKKwkJCS8vIEZvciBlYWNoIGRhdGFUeXBlIGluIHRoZSBkYXRhVHlwZUV4cHJlc3Npb24K
KwkJCWZvcig7IGkgPCBsZW5ndGg7IGkrKyApIHsKKwkJCQlkYXRhVHlwZSA9IGRhdGFUeXBlc1sg
aSBdOworCQkJCS8vIFdlIGNvbnRyb2wgaWYgd2UncmUgYXNrZWQgdG8gYWRkIGJlZm9yZQorCQkJ
CS8vIGFueSBleGlzdGluZyBlbGVtZW50CisJCQkJcGxhY2VCZWZvcmUgPSAvXlwrLy50ZXN0KCBk
YXRhVHlwZSApOworCQkJCWlmICggcGxhY2VCZWZvcmUgKSB7CisJCQkJCWRhdGFUeXBlID0gZGF0
YVR5cGUuc3Vic3RyKCAxICkgfHwgIioiOworCQkJCX0KKwkJCQlsaXN0ID0gc3RydWN0dXJlWyBk
YXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdOworCQkJCS8vIHRoZW4gd2Ug
YWRkIHRvIHRoZSBzdHJ1Y3R1cmUgYWNjb3JkaW5nbHkKKwkJCQlsaXN0WyBwbGFjZUJlZm9yZSA/
ICJ1bnNoaWZ0IiA6ICJwdXNoIiBdKCBmdW5jICk7CisJCQl9CisJCX0KKwl9OworfQorCisvL0Jh
c2UgaW5zcGVjdGlvbiBmdW5jdGlvbiBmb3IgcHJlZmlsdGVycyBhbmQgdHJhbnNwb3J0cworZnVu
Y3Rpb24gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSwgb3B0aW9ucywg
b3JpZ2luYWxPcHRpb25zLCBqcVhIUiwKKwkJZGF0YVR5cGUgLyogaW50ZXJuYWwgKi8sIGluc3Bl
Y3RlZCAvKiBpbnRlcm5hbCAqLyApIHsKKworCWRhdGFUeXBlID0gZGF0YVR5cGUgfHwgb3B0aW9u
cy5kYXRhVHlwZXNbIDAgXTsKKwlpbnNwZWN0ZWQgPSBpbnNwZWN0ZWQgfHwge307CisKKwlpbnNw
ZWN0ZWRbIGRhdGFUeXBlIF0gPSB0cnVlOworCisJdmFyIGxpc3QgPSBzdHJ1Y3R1cmVbIGRhdGFU
eXBlIF0sCisJCWkgPSAwLAorCQlsZW5ndGggPSBsaXN0ID8gbGlzdC5sZW5ndGggOiAwLAorCQll
eGVjdXRlT25seSA9ICggc3RydWN0dXJlID09PSBwcmVmaWx0ZXJzICksCisJCXNlbGVjdGlvbjsK
KworCWZvcig7IGkgPCBsZW5ndGggJiYgKCBleGVjdXRlT25seSB8fCAhc2VsZWN0aW9uICk7IGkr
KyApIHsKKwkJc2VsZWN0aW9uID0gbGlzdFsgaSBdKCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMs
IGpxWEhSICk7CisJCS8vIElmIHdlIGdvdCByZWRpcmVjdGVkIHRvIGFub3RoZXIgZGF0YVR5cGUK
KwkJLy8gd2UgdHJ5IHRoZXJlIGlmIGV4ZWN1dGluZyBvbmx5IGFuZCBub3QgZG9uZSBhbHJlYWR5
CisJCWlmICggdHlwZW9mIHNlbGVjdGlvbiA9PT0gInN0cmluZyIgKSB7CisJCQlpZiAoICFleGVj
dXRlT25seSB8fCBpbnNwZWN0ZWRbIHNlbGVjdGlvbiBdICkgeworCQkJCXNlbGVjdGlvbiA9IHVu
ZGVmaW5lZDsKKwkJCX0gZWxzZSB7CisJCQkJb3B0aW9ucy5kYXRhVHlwZXMudW5zaGlmdCggc2Vs
ZWN0aW9uICk7CisJCQkJc2VsZWN0aW9uID0gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMo
CisJCQkJCQlzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIsIHNlbGVj
dGlvbiwgaW5zcGVjdGVkICk7CisJCQl9CisJCX0KKwl9CisJLy8gSWYgd2UncmUgb25seSBleGVj
dXRpbmcgb3Igbm90aGluZyB3YXMgc2VsZWN0ZWQKKwkvLyB3ZSB0cnkgdGhlIGNhdGNoYWxsIGRh
dGFUeXBlIGlmIG5vdCBkb25lIGFscmVhZHkKKwlpZiAoICggZXhlY3V0ZU9ubHkgfHwgIXNlbGVj
dGlvbiApICYmICFpbnNwZWN0ZWRbICIqIiBdICkgeworCQlzZWxlY3Rpb24gPSBpbnNwZWN0UHJl
ZmlsdGVyc09yVHJhbnNwb3J0cygKKwkJCQlzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0
aW9ucywganFYSFIsICIqIiwgaW5zcGVjdGVkICk7CisJfQorCS8vIHVubmVjZXNzYXJ5IHdoZW4g
b25seSBleGVjdXRpbmcgKHByZWZpbHRlcnMpCisJLy8gYnV0IGl0J2xsIGJlIGlnbm9yZWQgYnkg
dGhlIGNhbGxlciBpbiB0aGF0IGNhc2UKKwlyZXR1cm4gc2VsZWN0aW9uOworfQorCitqUXVlcnku
Zm4uZXh0ZW5kKHsKKwlsb2FkOiBmdW5jdGlvbiggdXJsLCBwYXJhbXMsIGNhbGxiYWNrICkgewor
CQlpZiAoIHR5cGVvZiB1cmwgIT09ICJzdHJpbmciICYmIF9sb2FkICkgeworCQkJcmV0dXJuIF9s
b2FkLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKKworCQkvLyBEb24ndCBkbyBhIHJlcXVlc3Qg
aWYgbm8gZWxlbWVudHMgYXJlIGJlaW5nIHJlcXVlc3RlZAorCQl9IGVsc2UgaWYgKCAhdGhpcy5s
ZW5ndGggKSB7CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCisJCXZhciBvZmYgPSB1cmwuaW5kZXhP
ZiggIiAiICk7CisJCWlmICggb2ZmID49IDAgKSB7CisJCQl2YXIgc2VsZWN0b3IgPSB1cmwuc2xp
Y2UoIG9mZiwgdXJsLmxlbmd0aCApOworCQkJdXJsID0gdXJsLnNsaWNlKCAwLCBvZmYgKTsKKwkJ
fQorCisJCS8vIERlZmF1bHQgdG8gYSBHRVQgcmVxdWVzdAorCQl2YXIgdHlwZSA9ICJHRVQiOwor
CisJCS8vIElmIHRoZSBzZWNvbmQgcGFyYW1ldGVyIHdhcyBwcm92aWRlZAorCQlpZiAoIHBhcmFt
cyApIHsKKwkJCS8vIElmIGl0J3MgYSBmdW5jdGlvbgorCQkJaWYgKCBqUXVlcnkuaXNGdW5jdGlv
biggcGFyYW1zICkgKSB7CisJCQkJLy8gV2UgYXNzdW1lIHRoYXQgaXQncyB0aGUgY2FsbGJhY2sK
KwkJCQljYWxsYmFjayA9IHBhcmFtczsKKwkJCQlwYXJhbXMgPSB1bmRlZmluZWQ7CisKKwkJCS8v
IE90aGVyd2lzZSwgYnVpbGQgYSBwYXJhbSBzdHJpbmcKKwkJCX0gZWxzZSBpZiAoIHR5cGVvZiBw
YXJhbXMgPT09ICJvYmplY3QiICkgeworCQkJCXBhcmFtcyA9IGpRdWVyeS5wYXJhbSggcGFyYW1z
LCBqUXVlcnkuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsICk7CisJCQkJdHlwZSA9ICJQT1NUIjsK
KwkJCX0KKwkJfQorCisJCXZhciBzZWxmID0gdGhpczsKKworCQkvLyBSZXF1ZXN0IHRoZSByZW1v
dGUgZG9jdW1lbnQKKwkJalF1ZXJ5LmFqYXgoeworCQkJdXJsOiB1cmwsCisJCQl0eXBlOiB0eXBl
LAorCQkJZGF0YVR5cGU6ICJodG1sIiwKKwkJCWRhdGE6IHBhcmFtcywKKwkJCS8vIENvbXBsZXRl
IGNhbGxiYWNrIChyZXNwb25zZVRleHQgaXMgdXNlZCBpbnRlcm5hbGx5KQorCQkJY29tcGxldGU6
IGZ1bmN0aW9uKCBqcVhIUiwgc3RhdHVzLCByZXNwb25zZVRleHQgKSB7CisJCQkJLy8gU3RvcmUg
dGhlIHJlc3BvbnNlIGFzIHNwZWNpZmllZCBieSB0aGUganFYSFIgb2JqZWN0CisJCQkJcmVzcG9u
c2VUZXh0ID0ganFYSFIucmVzcG9uc2VUZXh0OworCQkJCS8vIElmIHN1Y2Nlc3NmdWwsIGluamVj
dCB0aGUgSFRNTCBpbnRvIGFsbCB0aGUgbWF0Y2hlZCBlbGVtZW50cworCQkJCWlmICgganFYSFIu
aXNSZXNvbHZlZCgpICkgeworCQkJCQkvLyAjNDgyNTogR2V0IHRoZSBhY3R1YWwgcmVzcG9uc2Ug
aW4gY2FzZQorCQkJCQkvLyBhIGRhdGFGaWx0ZXIgaXMgcHJlc2VudCBpbiBhamF4U2V0dGluZ3MK
KwkJCQkJanFYSFIuZG9uZShmdW5jdGlvbiggciApIHsKKwkJCQkJCXJlc3BvbnNlVGV4dCA9IHI7
CisJCQkJCX0pOworCQkJCQkvLyBTZWUgaWYgYSBzZWxlY3RvciB3YXMgc3BlY2lmaWVkCisJCQkJ
CXNlbGYuaHRtbCggc2VsZWN0b3IgPworCQkJCQkJLy8gQ3JlYXRlIGEgZHVtbXkgZGl2IHRvIGhv
bGQgdGhlIHJlc3VsdHMKKwkJCQkJCWpRdWVyeSgiPGRpdj4iKQorCQkJCQkJCS8vIGluamVjdCB0
aGUgY29udGVudHMgb2YgdGhlIGRvY3VtZW50IGluLCByZW1vdmluZyB0aGUgc2NyaXB0cworCQkJ
CQkJCS8vIHRvIGF2b2lkIGFueSAnUGVybWlzc2lvbiBEZW5pZWQnIGVycm9ycyBpbiBJRQorCQkJ
CQkJCS5hcHBlbmQocmVzcG9uc2VUZXh0LnJlcGxhY2UocnNjcmlwdCwgIiIpKQorCisJCQkJCQkJ
Ly8gTG9jYXRlIHRoZSBzcGVjaWZpZWQgZWxlbWVudHMKKwkJCQkJCQkuZmluZChzZWxlY3Rvcikg
OgorCisJCQkJCQkvLyBJZiBub3QsIGp1c3QgaW5qZWN0IHRoZSBmdWxsIHJlc3VsdAorCQkJCQkJ
cmVzcG9uc2VUZXh0ICk7CisJCQkJfQorCisJCQkJaWYgKCBjYWxsYmFjayApIHsKKwkJCQkJc2Vs
Zi5lYWNoKCBjYWxsYmFjaywgWyByZXNwb25zZVRleHQsIHN0YXR1cywganFYSFIgXSApOworCQkJ
CX0KKwkJCX0KKwkJfSk7CisKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCXNlcmlhbGl6ZTogZnVu
Y3Rpb24oKSB7CisJCXJldHVybiBqUXVlcnkucGFyYW0oIHRoaXMuc2VyaWFsaXplQXJyYXkoKSAp
OworCX0sCisKKwlzZXJpYWxpemVBcnJheTogZnVuY3Rpb24oKSB7CisJCXJldHVybiB0aGlzLm1h
cChmdW5jdGlvbigpeworCQkJcmV0dXJuIHRoaXMuZWxlbWVudHMgPyBqUXVlcnkubWFrZUFycmF5
KCB0aGlzLmVsZW1lbnRzICkgOiB0aGlzOworCQl9KQorCQkuZmlsdGVyKGZ1bmN0aW9uKCl7CisJ
CQlyZXR1cm4gdGhpcy5uYW1lICYmICF0aGlzLmRpc2FibGVkICYmCisJCQkJKCB0aGlzLmNoZWNr
ZWQgfHwgcnNlbGVjdFRleHRhcmVhLnRlc3QoIHRoaXMubm9kZU5hbWUgKSB8fAorCQkJCQlyaW5w
dXQudGVzdCggdGhpcy50eXBlICkgKTsKKwkJfSkKKwkJLm1hcChmdW5jdGlvbiggaSwgZWxlbSAp
eworCQkJdmFyIHZhbCA9IGpRdWVyeSggdGhpcyApLnZhbCgpOworCisJCQlyZXR1cm4gdmFsID09
IG51bGwgPworCQkJCW51bGwgOgorCQkJCWpRdWVyeS5pc0FycmF5KCB2YWwgKSA/CisJCQkJCWpR
dWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbCwgaSApeworCQkJCQkJcmV0dXJuIHsgbmFtZTog
ZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCAiXHJcbiIgKSB9OworCQkJCQl9
KSA6CisJCQkJCXsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCAi
XHJcbiIgKSB9OworCQl9KS5nZXQoKTsKKwl9Cit9KTsKKworLy8gQXR0YWNoIGEgYnVuY2ggb2Yg
ZnVuY3Rpb25zIGZvciBoYW5kbGluZyBjb21tb24gQUpBWCBldmVudHMKK2pRdWVyeS5lYWNoKCAi
YWpheFN0YXJ0IGFqYXhTdG9wIGFqYXhDb21wbGV0ZSBhamF4RXJyb3IgYWpheFN1Y2Nlc3MgYWph
eFNlbmQiLnNwbGl0KCAiICIgKSwgZnVuY3Rpb24oIGksIG8gKXsKKwlqUXVlcnkuZm5bIG8gXSA9
IGZ1bmN0aW9uKCBmICl7CisJCXJldHVybiB0aGlzLmJpbmQoIG8sIGYgKTsKKwl9OworfSApOwor
CitqUXVlcnkuZWFjaCggWyAiZ2V0IiwgInBvc3QiIF0sIGZ1bmN0aW9uKCBpLCBtZXRob2QgKSB7
CisJalF1ZXJ5WyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrLCB0eXBl
ICkgeworCQkvLyBzaGlmdCBhcmd1bWVudHMgaWYgZGF0YSBhcmd1bWVudCB3YXMgb21pdHRlZAor
CQlpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBkYXRhICkgKSB7CisJCQl0eXBlID0gdHlwZSB8fCBj
YWxsYmFjazsKKwkJCWNhbGxiYWNrID0gZGF0YTsKKwkJCWRhdGEgPSB1bmRlZmluZWQ7CisJCX0K
KworCQlyZXR1cm4galF1ZXJ5LmFqYXgoeworCQkJdHlwZTogbWV0aG9kLAorCQkJdXJsOiB1cmws
CisJCQlkYXRhOiBkYXRhLAorCQkJc3VjY2VzczogY2FsbGJhY2ssCisJCQlkYXRhVHlwZTogdHlw
ZQorCQl9KTsKKwl9OworfSApOworCitqUXVlcnkuZXh0ZW5kKHsKKworCWdldFNjcmlwdDogZnVu
Y3Rpb24oIHVybCwgY2FsbGJhY2sgKSB7CisJCXJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIHVuZGVm
aW5lZCwgY2FsbGJhY2ssICJzY3JpcHQiICk7CisJfSwKKworCWdldEpTT046IGZ1bmN0aW9uKCB1
cmwsIGRhdGEsIGNhbGxiYWNrICkgeworCQlyZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBj
YWxsYmFjaywgImpzb24iICk7CisJfSwKKworCS8vIENyZWF0ZXMgYSBmdWxsIGZsZWRnZWQgc2V0
dGluZ3Mgb2JqZWN0IGludG8gdGFyZ2V0CisJLy8gd2l0aCBib3RoIGFqYXhTZXR0aW5ncyBhbmQg
c2V0dGluZ3MgZmllbGRzLgorCS8vIElmIHRhcmdldCBpcyBvbWl0dGVkLCB3cml0ZXMgaW50byBh
amF4U2V0dGluZ3MuCisJYWpheFNldHVwOiBmdW5jdGlvbiAoIHRhcmdldCwgc2V0dGluZ3MgKSB7
CisJCWlmICggIXNldHRpbmdzICkgeworCQkJLy8gT25seSBvbmUgcGFyYW1ldGVyLCB3ZSBleHRl
bmQgYWpheFNldHRpbmdzCisJCQlzZXR0aW5ncyA9IHRhcmdldDsKKwkJCXRhcmdldCA9IGpRdWVy
eS5leHRlbmQoIHRydWUsIGpRdWVyeS5hamF4U2V0dGluZ3MsIHNldHRpbmdzICk7CisJCX0gZWxz
ZSB7CisJCQkvLyB0YXJnZXQgd2FzIHByb3ZpZGVkLCB3ZSBleHRlbmQgaW50byBpdAorCQkJalF1
ZXJ5LmV4dGVuZCggdHJ1ZSwgdGFyZ2V0LCBqUXVlcnkuYWpheFNldHRpbmdzLCBzZXR0aW5ncyAp
OworCQl9CisJCS8vIEZsYXR0ZW4gZmllbGRzIHdlIGRvbid0IHdhbnQgZGVlcCBleHRlbmRlZAor
CQlmb3IoIHZhciBmaWVsZCBpbiB7IGNvbnRleHQ6IDEsIHVybDogMSB9ICkgeworCQkJaWYgKCBm
aWVsZCBpbiBzZXR0aW5ncyApIHsKKwkJCQl0YXJnZXRbIGZpZWxkIF0gPSBzZXR0aW5nc1sgZmll
bGQgXTsKKwkJCX0gZWxzZSBpZiggZmllbGQgaW4galF1ZXJ5LmFqYXhTZXR0aW5ncyApIHsKKwkJ
CQl0YXJnZXRbIGZpZWxkIF0gPSBqUXVlcnkuYWpheFNldHRpbmdzWyBmaWVsZCBdOworCQkJfQor
CQl9CisJCXJldHVybiB0YXJnZXQ7CisJfSwKKworCWFqYXhTZXR0aW5nczogeworCQl1cmw6IGFq
YXhMb2NhdGlvbiwKKwkJaXNMb2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCggYWpheExvY1BhcnRz
WyAxIF0gKSwKKwkJZ2xvYmFsOiB0cnVlLAorCQl0eXBlOiAiR0VUIiwKKwkJY29udGVudFR5cGU6
ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLAorCQlwcm9jZXNzRGF0YTogdHJ1
ZSwKKwkJYXN5bmM6IHRydWUsCisJCS8qCisJCXRpbWVvdXQ6IDAsCisJCWRhdGE6IG51bGwsCisJ
CWRhdGFUeXBlOiBudWxsLAorCQl1c2VybmFtZTogbnVsbCwKKwkJcGFzc3dvcmQ6IG51bGwsCisJ
CWNhY2hlOiBudWxsLAorCQl0cmFkaXRpb25hbDogZmFsc2UsCisJCWhlYWRlcnM6IHt9LAorCQlj
cm9zc0RvbWFpbjogbnVsbCwKKwkJKi8KKworCQlhY2NlcHRzOiB7CisJCQl4bWw6ICJhcHBsaWNh
dGlvbi94bWwsIHRleHQveG1sIiwKKwkJCWh0bWw6ICJ0ZXh0L2h0bWwiLAorCQkJdGV4dDogInRl
eHQvcGxhaW4iLAorCQkJanNvbjogImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCIs
CisJCQkiKiI6ICIqLyoiCisJCX0sCisKKwkJY29udGVudHM6IHsKKwkJCXhtbDogL3htbC8sCisJ
CQlodG1sOiAvaHRtbC8sCisJCQlqc29uOiAvanNvbi8KKwkJfSwKKworCQlyZXNwb25zZUZpZWxk
czogeworCQkJeG1sOiAicmVzcG9uc2VYTUwiLAorCQkJdGV4dDogInJlc3BvbnNlVGV4dCIKKwkJ
fSwKKworCQkvLyBMaXN0IG9mIGRhdGEgY29udmVydGVycworCQkvLyAxKSBrZXkgZm9ybWF0IGlz
ICJzb3VyY2VfdHlwZSBkZXN0aW5hdGlvbl90eXBlIiAoYSBzaW5nbGUgc3BhY2UgaW4tYmV0d2Vl
bikKKwkJLy8gMikgdGhlIGNhdGNoYWxsIHN5bWJvbCAiKiIgY2FuIGJlIHVzZWQgZm9yIHNvdXJj
ZV90eXBlCisJCWNvbnZlcnRlcnM6IHsKKworCQkJLy8gQ29udmVydCBhbnl0aGluZyB0byB0ZXh0
CisJCQkiKiB0ZXh0Ijogd2luZG93LlN0cmluZywKKworCQkJLy8gVGV4dCB0byBodG1sICh0cnVl
ID0gbm8gdHJhbnNmb3JtYXRpb24pCisJCQkidGV4dCBodG1sIjogdHJ1ZSwKKworCQkJLy8gRXZh
bHVhdGUgdGV4dCBhcyBhIGpzb24gZXhwcmVzc2lvbgorCQkJInRleHQganNvbiI6IGpRdWVyeS5w
YXJzZUpTT04sCisKKwkJCS8vIFBhcnNlIHRleHQgYXMgeG1sCisJCQkidGV4dCB4bWwiOiBqUXVl
cnkucGFyc2VYTUwKKwkJfQorCX0sCisKKwlhamF4UHJlZmlsdGVyOiBhZGRUb1ByZWZpbHRlcnNP
clRyYW5zcG9ydHMoIHByZWZpbHRlcnMgKSwKKwlhamF4VHJhbnNwb3J0OiBhZGRUb1ByZWZpbHRl
cnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMgKSwKKworCS8vIE1haW4gbWV0aG9kCisJYWpheDog
ZnVuY3Rpb24oIHVybCwgb3B0aW9ucyApIHsKKworCQkvLyBJZiB1cmwgaXMgYW4gb2JqZWN0LCBz
aW11bGF0ZSBwcmUtMS41IHNpZ25hdHVyZQorCQlpZiAoIHR5cGVvZiB1cmwgPT09ICJvYmplY3Qi
ICkgeworCQkJb3B0aW9ucyA9IHVybDsKKwkJCXVybCA9IHVuZGVmaW5lZDsKKwkJfQorCisJCS8v
IEZvcmNlIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0CisJCW9wdGlvbnMgPSBvcHRpb25zIHx8IHt9
OworCisJCXZhciAvLyBDcmVhdGUgdGhlIGZpbmFsIG9wdGlvbnMgb2JqZWN0CisJCQlzID0galF1
ZXJ5LmFqYXhTZXR1cCgge30sIG9wdGlvbnMgKSwKKwkJCS8vIENhbGxiYWNrcyBjb250ZXh0CisJ
CQljYWxsYmFja0NvbnRleHQgPSBzLmNvbnRleHQgfHwgcywKKwkJCS8vIENvbnRleHQgZm9yIGds
b2JhbCBldmVudHMKKwkJCS8vIEl0J3MgdGhlIGNhbGxiYWNrQ29udGV4dCBpZiBvbmUgd2FzIHBy
b3ZpZGVkIGluIHRoZSBvcHRpb25zCisJCQkvLyBhbmQgaWYgaXQncyBhIERPTSBub2RlIG9yIGEg
alF1ZXJ5IGNvbGxlY3Rpb24KKwkJCWdsb2JhbEV2ZW50Q29udGV4dCA9IGNhbGxiYWNrQ29udGV4
dCAhPT0gcyAmJgorCQkJCSggY2FsbGJhY2tDb250ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29u
dGV4dCBpbnN0YW5jZW9mIGpRdWVyeSApID8KKwkJCQkJCWpRdWVyeSggY2FsbGJhY2tDb250ZXh0
ICkgOiBqUXVlcnkuZXZlbnQsCisJCQkvLyBEZWZlcnJlZHMKKwkJCWRlZmVycmVkID0galF1ZXJ5
LkRlZmVycmVkKCksCisJCQljb21wbGV0ZURlZmVycmVkID0galF1ZXJ5Ll9EZWZlcnJlZCgpLAor
CQkJLy8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3MKKwkJCXN0YXR1c0NvZGUgPSBzLnN0YXR1
c0NvZGUgfHwge30sCisJCQkvLyBpZk1vZGlmaWVkIGtleQorCQkJaWZNb2RpZmllZEtleSwKKwkJ
CS8vIEhlYWRlcnMgKHRoZXkgYXJlIHNlbnQgYWxsIGF0IG9uY2UpCisJCQlyZXF1ZXN0SGVhZGVy
cyA9IHt9LAorCQkJLy8gUmVzcG9uc2UgaGVhZGVycworCQkJcmVzcG9uc2VIZWFkZXJzU3RyaW5n
LAorCQkJcmVzcG9uc2VIZWFkZXJzLAorCQkJLy8gdHJhbnNwb3J0CisJCQl0cmFuc3BvcnQsCisJ
CQkvLyB0aW1lb3V0IGhhbmRsZQorCQkJdGltZW91dFRpbWVyLAorCQkJLy8gQ3Jvc3MtZG9tYWlu
IGRldGVjdGlvbiB2YXJzCisJCQlwYXJ0cywKKwkJCS8vIFRoZSBqcVhIUiBzdGF0ZQorCQkJc3Rh
dGUgPSAwLAorCQkJLy8gVG8ga25vdyBpZiBnbG9iYWwgZXZlbnRzIGFyZSB0byBiZSBkaXNwYXRj
aGVkCisJCQlmaXJlR2xvYmFscywKKwkJCS8vIExvb3AgdmFyaWFibGUKKwkJCWksCisJCQkvLyBG
YWtlIHhocgorCQkJanFYSFIgPSB7CisKKwkJCQlyZWFkeVN0YXRlOiAwLAorCisJCQkJLy8gQ2Fj
aGVzIHRoZSBoZWFkZXIKKwkJCQlzZXRSZXF1ZXN0SGVhZGVyOiBmdW5jdGlvbiggbmFtZSwgdmFs
dWUgKSB7CisJCQkJCWlmICggIXN0YXRlICkgeworCQkJCQkJcmVxdWVzdEhlYWRlcnNbIG5hbWUu
dG9Mb3dlckNhc2UoKS5yZXBsYWNlKCBydWNIZWFkZXJzLCBydWNIZWFkZXJzRnVuYyApIF0gPSB2
YWx1ZTsKKwkJCQkJfQorCQkJCQlyZXR1cm4gdGhpczsKKwkJCQl9LAorCisJCQkJLy8gUmF3IHN0
cmluZworCQkJCWdldEFsbFJlc3BvbnNlSGVhZGVyczogZnVuY3Rpb24oKSB7CisJCQkJCXJldHVy
biBzdGF0ZSA9PT0gMiA/IHJlc3BvbnNlSGVhZGVyc1N0cmluZyA6IG51bGw7CisJCQkJfSwKKwor
CQkJCS8vIEJ1aWxkcyBoZWFkZXJzIGhhc2h0YWJsZSBpZiBuZWVkZWQKKwkJCQlnZXRSZXNwb25z
ZUhlYWRlcjogZnVuY3Rpb24oIGtleSApIHsKKwkJCQkJdmFyIG1hdGNoOworCQkJCQlpZiAoIHN0
YXRlID09PSAyICkgeworCQkJCQkJaWYgKCAhcmVzcG9uc2VIZWFkZXJzICkgeworCQkJCQkJCXJl
c3BvbnNlSGVhZGVycyA9IHt9OworCQkJCQkJCXdoaWxlKCAoIG1hdGNoID0gcmhlYWRlcnMuZXhl
YyggcmVzcG9uc2VIZWFkZXJzU3RyaW5nICkgKSApIHsKKwkJCQkJCQkJcmVzcG9uc2VIZWFkZXJz
WyBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpIF0gPSBtYXRjaFsgMiBdOworCQkJCQkJCX0KKwkJCQkJ
CX0KKwkJCQkJCW1hdGNoID0gcmVzcG9uc2VIZWFkZXJzWyBrZXkudG9Mb3dlckNhc2UoKSBdOwor
CQkJCQl9CisJCQkJCXJldHVybiBtYXRjaCA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG1hdGNoOwor
CQkJCX0sCisKKwkJCQkvLyBPdmVycmlkZXMgcmVzcG9uc2UgY29udGVudC10eXBlIGhlYWRlcgor
CQkJCW92ZXJyaWRlTWltZVR5cGU6IGZ1bmN0aW9uKCB0eXBlICkgeworCQkJCQlpZiAoICFzdGF0
ZSApIHsKKwkJCQkJCXMubWltZVR5cGUgPSB0eXBlOworCQkJCQl9CisJCQkJCXJldHVybiB0aGlz
OworCQkJCX0sCisKKwkJCQkvLyBDYW5jZWwgdGhlIHJlcXVlc3QKKwkJCQlhYm9ydDogZnVuY3Rp
b24oIHN0YXR1c1RleHQgKSB7CisJCQkJCXN0YXR1c1RleHQgPSBzdGF0dXNUZXh0IHx8ICJhYm9y
dCI7CisJCQkJCWlmICggdHJhbnNwb3J0ICkgeworCQkJCQkJdHJhbnNwb3J0LmFib3J0KCBzdGF0
dXNUZXh0ICk7CisJCQkJCX0KKwkJCQkJZG9uZSggMCwgc3RhdHVzVGV4dCApOworCQkJCQlyZXR1
cm4gdGhpczsKKwkJCQl9CisJCQl9OworCisJCS8vIENhbGxiYWNrIGZvciB3aGVuIGV2ZXJ5dGhp
bmcgaXMgZG9uZQorCQkvLyBJdCBpcyBkZWZpbmVkIGhlcmUgYmVjYXVzZSBqc2xpbnQgY29tcGxh
aW5zIGlmIGl0IGlzIGRlY2xhcmVkCisJCS8vIGF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uICh3
aGljaCB3b3VsZCBiZSBtb3JlIGxvZ2ljYWwgYW5kIHJlYWRhYmxlKQorCQlmdW5jdGlvbiBkb25l
KCBzdGF0dXMsIHN0YXR1c1RleHQsIHJlc3BvbnNlcywgaGVhZGVycyApIHsKKworCQkJLy8gQ2Fs
bGVkIG9uY2UKKwkJCWlmICggc3RhdGUgPT09IDIgKSB7CisJCQkJcmV0dXJuOworCQkJfQorCisJ
CQkvLyBTdGF0ZSBpcyAiZG9uZSIgbm93CisJCQlzdGF0ZSA9IDI7CisKKwkJCS8vIENsZWFyIHRp
bWVvdXQgaWYgaXQgZXhpc3RzCisJCQlpZiAoIHRpbWVvdXRUaW1lciApIHsKKwkJCQljbGVhclRp
bWVvdXQoIHRpbWVvdXRUaW1lciApOworCQkJfQorCisJCQkvLyBEZXJlZmVyZW5jZSB0cmFuc3Bv
cnQgZm9yIGVhcmx5IGdhcmJhZ2UgY29sbGVjdGlvbgorCQkJLy8gKG5vIG1hdHRlciBob3cgbG9u
ZyB0aGUganFYSFIgb2JqZWN0IHdpbGwgYmUgdXNlZCkKKwkJCXRyYW5zcG9ydCA9IHVuZGVmaW5l
ZDsKKworCQkJLy8gQ2FjaGUgcmVzcG9uc2UgaGVhZGVycworCQkJcmVzcG9uc2VIZWFkZXJzU3Ry
aW5nID0gaGVhZGVycyB8fCAiIjsKKworCQkJLy8gU2V0IHJlYWR5U3RhdGUKKwkJCWpxWEhSLnJl
YWR5U3RhdGUgPSBzdGF0dXMgPyA0IDogMDsKKworCQkJdmFyIGlzU3VjY2VzcywKKwkJCQlzdWNj
ZXNzLAorCQkJCWVycm9yLAorCQkJCXJlc3BvbnNlID0gcmVzcG9uc2VzID8gYWpheEhhbmRsZVJl
c3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApIDogdW5kZWZpbmVkLAorCQkJCWxhc3RNb2Rp
ZmllZCwKKwkJCQlldGFnOworCisJCQkvLyBJZiBzdWNjZXNzZnVsLCBoYW5kbGUgdHlwZSBjaGFp
bmluZworCQkJaWYgKCBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCB8fCBzdGF0dXMgPT09
IDMwNCApIHsKKworCQkJCS8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5v
bmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuCisJCQkJaWYgKCBzLmlmTW9k
aWZpZWQgKSB7CisKKwkJCQkJaWYgKCAoIGxhc3RNb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNl
SGVhZGVyKCAiTGFzdC1Nb2RpZmllZCIgKSApICkgeworCQkJCQkJalF1ZXJ5Lmxhc3RNb2RpZmll
ZFsgaWZNb2RpZmllZEtleSBdID0gbGFzdE1vZGlmaWVkOworCQkJCQl9CisJCQkJCWlmICggKCBl
dGFnID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoICJFdGFnIiApICkgKSB7CisJCQkJCQlqUXVl
cnkuZXRhZ1sgaWZNb2RpZmllZEtleSBdID0gZXRhZzsKKwkJCQkJfQorCQkJCX0KKworCQkJCS8v
IElmIG5vdCBtb2RpZmllZAorCQkJCWlmICggc3RhdHVzID09PSAzMDQgKSB7CisKKwkJCQkJc3Rh
dHVzVGV4dCA9ICJub3Rtb2RpZmllZCI7CisJCQkJCWlzU3VjY2VzcyA9IHRydWU7CisKKwkJCQkv
LyBJZiB3ZSBoYXZlIGRhdGEKKwkJCQl9IGVsc2UgeworCisJCQkJCXRyeSB7CisJCQkJCQlzdWNj
ZXNzID0gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlICk7CisJCQkJCQlzdGF0dXNUZXh0ID0gInN1
Y2Nlc3MiOworCQkJCQkJaXNTdWNjZXNzID0gdHJ1ZTsKKwkJCQkJfSBjYXRjaChlKSB7CisJCQkJ
CQkvLyBXZSBoYXZlIGEgcGFyc2VyZXJyb3IKKwkJCQkJCXN0YXR1c1RleHQgPSAicGFyc2VyZXJy
b3IiOworCQkJCQkJZXJyb3IgPSBlOworCQkJCQl9CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkv
LyBXZSBleHRyYWN0IGVycm9yIGZyb20gc3RhdHVzVGV4dAorCQkJCS8vIHRoZW4gbm9ybWFsaXpl
IHN0YXR1c1RleHQgYW5kIHN0YXR1cyBmb3Igbm9uLWFib3J0cworCQkJCWVycm9yID0gc3RhdHVz
VGV4dDsKKwkJCQlpZiggIXN0YXR1c1RleHQgfHwgc3RhdHVzICkgeworCQkJCQlzdGF0dXNUZXh0
ID0gImVycm9yIjsKKwkJCQkJaWYgKCBzdGF0dXMgPCAwICkgeworCQkJCQkJc3RhdHVzID0gMDsK
KwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJLy8gU2V0IGRhdGEgZm9yIHRoZSBmYWtlIHhociBv
YmplY3QKKwkJCWpxWEhSLnN0YXR1cyA9IHN0YXR1czsKKwkJCWpxWEhSLnN0YXR1c1RleHQgPSBz
dGF0dXNUZXh0OworCisJCQkvLyBTdWNjZXNzL0Vycm9yCisJCQlpZiAoIGlzU3VjY2VzcyApIHsK
KwkJCQlkZWZlcnJlZC5yZXNvbHZlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIHN1Y2Nlc3MsIHN0
YXR1c1RleHQsIGpxWEhSIF0gKTsKKwkJCX0gZWxzZSB7CisJCQkJZGVmZXJyZWQucmVqZWN0V2l0
aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0LCBlcnJvciBdICk7CisJCQl9
CisKKwkJCS8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzCisJCQlqcVhIUi5zdGF0dXNDb2Rl
KCBzdGF0dXNDb2RlICk7CisJCQlzdGF0dXNDb2RlID0gdW5kZWZpbmVkOworCisJCQlpZiAoIGZp
cmVHbG9iYWxzICkgeworCQkJCWdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheCIgKyAo
IGlzU3VjY2VzcyA/ICJTdWNjZXNzIiA6ICJFcnJvciIgKSwKKwkJCQkJCVsganFYSFIsIHMsIGlz
U3VjY2VzcyA/IHN1Y2Nlc3MgOiBlcnJvciBdICk7CisJCQl9CisKKwkJCS8vIENvbXBsZXRlCisJ
CQljb21wbGV0ZURlZmVycmVkLnJlc29sdmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIs
IHN0YXR1c1RleHQgXSApOworCisJCQlpZiAoIGZpcmVHbG9iYWxzICkgeworCQkJCWdsb2JhbEV2
ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheENvbXBsZXRlIiwgWyBqcVhIUiwgc10gKTsKKwkJCQkv
LyBIYW5kbGUgdGhlIGdsb2JhbCBBSkFYIGNvdW50ZXIKKwkJCQlpZiAoICEoIC0talF1ZXJ5LmFj
dGl2ZSApICkgeworCQkJCQlqUXVlcnkuZXZlbnQudHJpZ2dlciggImFqYXhTdG9wIiApOworCQkJ
CX0KKwkJCX0KKwkJfQorCisJCS8vIEF0dGFjaCBkZWZlcnJlZHMKKwkJZGVmZXJyZWQucHJvbWlz
ZSgganFYSFIgKTsKKwkJanFYSFIuc3VjY2VzcyA9IGpxWEhSLmRvbmU7CisJCWpxWEhSLmVycm9y
ID0ganFYSFIuZmFpbDsKKwkJanFYSFIuY29tcGxldGUgPSBjb21wbGV0ZURlZmVycmVkLmRvbmU7
CisKKwkJLy8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3MKKwkJanFYSFIuc3RhdHVzQ29kZSA9
IGZ1bmN0aW9uKCBtYXAgKSB7CisJCQlpZiAoIG1hcCApIHsKKwkJCQl2YXIgdG1wOworCQkJCWlm
ICggc3RhdGUgPCAyICkgeworCQkJCQlmb3IoIHRtcCBpbiBtYXAgKSB7CisJCQkJCQlzdGF0dXND
b2RlWyB0bXAgXSA9IFsgc3RhdHVzQ29kZVt0bXBdLCBtYXBbdG1wXSBdOworCQkJCQl9CisJCQkJ
fSBlbHNlIHsKKwkJCQkJdG1wID0gbWFwWyBqcVhIUi5zdGF0dXMgXTsKKwkJCQkJanFYSFIudGhl
biggdG1wLCB0bXAgKTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gdGhpczsKKwkJfTsKKworCQkv
LyBSZW1vdmUgaGFzaCBjaGFyYWN0ZXIgKCM3NTMxOiBhbmQgc3RyaW5nIHByb21vdGlvbikKKwkJ
Ly8gQWRkIHByb3RvY29sIGlmIG5vdCBwcm92aWRlZCAoIzU4NjY6IElFNyBpc3N1ZSB3aXRoIHBy
b3RvY29sLWxlc3MgdXJscykKKwkJLy8gV2UgYWxzbyB1c2UgdGhlIHVybCBwYXJhbWV0ZXIgaWYg
YXZhaWxhYmxlCisJCXMudXJsID0gKCAoIHVybCB8fCBzLnVybCApICsgIiIgKS5yZXBsYWNlKCBy
aGFzaCwgIiIgKS5yZXBsYWNlKCBycHJvdG9jb2wsIGFqYXhMb2NQYXJ0c1sgMSBdICsgIi8vIiAp
OworCisJCS8vIEV4dHJhY3QgZGF0YVR5cGVzIGxpc3QKKwkJcy5kYXRhVHlwZXMgPSBqUXVlcnku
dHJpbSggcy5kYXRhVHlwZSB8fCAiKiIgKS50b0xvd2VyQ2FzZSgpLnNwbGl0KCByc3BhY2VzQWph
eCApOworCisJCS8vIERldGVybWluZSBpZiBhIGNyb3NzLWRvbWFpbiByZXF1ZXN0IGlzIGluIG9y
ZGVyCisJCWlmICggIXMuY3Jvc3NEb21haW4gKSB7CisJCQlwYXJ0cyA9IHJ1cmwuZXhlYyggcy51
cmwudG9Mb3dlckNhc2UoKSApOworCQkJcy5jcm9zc0RvbWFpbiA9ICEhKCBwYXJ0cyAmJgorCQkJ
CSggcGFydHNbIDEgXSAhPSBhamF4TG9jUGFydHNbIDEgXSB8fCBwYXJ0c1sgMiBdICE9IGFqYXhM
b2NQYXJ0c1sgMiBdIHx8CisJCQkJCSggcGFydHNbIDMgXSB8fCAoIHBhcnRzWyAxIF0gPT09ICJo
dHRwOiIgPyA4MCA6IDQ0MyApICkgIT0KKwkJCQkJCSggYWpheExvY1BhcnRzWyAzIF0gfHwgKCBh
amF4TG9jUGFydHNbIDEgXSA9PT0gImh0dHA6IiA/IDgwIDogNDQzICkgKSApCisJCQkpOworCQl9
CisKKwkJLy8gQ29udmVydCBkYXRhIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nCisJCWlmICggcy5k
YXRhICYmIHMucHJvY2Vzc0RhdGEgJiYgdHlwZW9mIHMuZGF0YSAhPT0gInN0cmluZyIgKSB7CisJ
CQlzLmRhdGEgPSBqUXVlcnkucGFyYW0oIHMuZGF0YSwgcy50cmFkaXRpb25hbCApOworCQl9CisK
KwkJLy8gQXBwbHkgcHJlZmlsdGVycworCQlpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cygg
cHJlZmlsdGVycywgcywgb3B0aW9ucywganFYSFIgKTsKKworCQkvLyBJZiByZXF1ZXN0IHdhcyBh
Ym9ydGVkIGluc2lkZSBhIHByZWZpbGVyLCBzdG9wIHRoZXJlCisJCWlmICggc3RhdGUgPT09IDIg
KSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQkvLyBXZSBjYW4gZmlyZSBnbG9iYWwgZXZl
bnRzIGFzIG9mIG5vdyBpZiBhc2tlZCB0bworCQlmaXJlR2xvYmFscyA9IHMuZ2xvYmFsOworCisJ
CS8vIFVwcGVyY2FzZSB0aGUgdHlwZQorCQlzLnR5cGUgPSBzLnR5cGUudG9VcHBlckNhc2UoKTsK
KworCQkvLyBEZXRlcm1pbmUgaWYgcmVxdWVzdCBoYXMgY29udGVudAorCQlzLmhhc0NvbnRlbnQg
PSAhcm5vQ29udGVudC50ZXN0KCBzLnR5cGUgKTsKKworCQkvLyBXYXRjaCBmb3IgYSBuZXcgc2V0
IG9mIHJlcXVlc3RzCisJCWlmICggZmlyZUdsb2JhbHMgJiYgalF1ZXJ5LmFjdGl2ZSsrID09PSAw
ICkgeworCQkJalF1ZXJ5LmV2ZW50LnRyaWdnZXIoICJhamF4U3RhcnQiICk7CisJCX0KKworCQkv
LyBNb3JlIG9wdGlvbnMgaGFuZGxpbmcgZm9yIHJlcXVlc3RzIHdpdGggbm8gY29udGVudAorCQlp
ZiAoICFzLmhhc0NvbnRlbnQgKSB7CisKKwkJCS8vIElmIGRhdGEgaXMgYXZhaWxhYmxlLCBhcHBl
bmQgZGF0YSB0byB1cmwKKwkJCWlmICggcy5kYXRhICkgeworCQkJCXMudXJsICs9ICggcnF1ZXJ5
LnRlc3QoIHMudXJsICkgPyAiJiIgOiAiPyIgKSArIHMuZGF0YTsKKwkJCX0KKworCQkJLy8gR2V0
IGlmTW9kaWZpZWRLZXkgYmVmb3JlIGFkZGluZyB0aGUgYW50aS1jYWNoZSBwYXJhbWV0ZXIKKwkJ
CWlmTW9kaWZpZWRLZXkgPSBzLnVybDsKKworCQkJLy8gQWRkIGFudGktY2FjaGUgaW4gdXJsIGlm
IG5lZWRlZAorCQkJaWYgKCBzLmNhY2hlID09PSBmYWxzZSApIHsKKworCQkJCXZhciB0cyA9IGpR
dWVyeS5ub3coKSwKKwkJCQkJLy8gdHJ5IHJlcGxhY2luZyBfPSBpZiBpdCBpcyB0aGVyZQorCQkJ
CQlyZXQgPSBzLnVybC5yZXBsYWNlKCBydHMsICIkMV89IiArIHRzICk7CisKKwkJCQkvLyBpZiBu
b3RoaW5nIHdhcyByZXBsYWNlZCwgYWRkIHRpbWVzdGFtcCB0byB0aGUgZW5kCisJCQkJcy51cmwg
PSByZXQgKyAoIChyZXQgPT09IHMudXJsICkgPyAoIHJxdWVyeS50ZXN0KCBzLnVybCApID8gIiYi
IDogIj8iICkgKyAiXz0iICsgdHMgOiAiIiApOworCQkJfQorCQl9CisKKwkJLy8gU2V0IHRoZSBj
b3JyZWN0IGhlYWRlciwgaWYgZGF0YSBpcyBiZWluZyBzZW50CisJCWlmICggcy5kYXRhICYmIHMu
aGFzQ29udGVudCAmJiBzLmNvbnRlbnRUeXBlICE9PSBmYWxzZSB8fCBvcHRpb25zLmNvbnRlbnRU
eXBlICkgeworCQkJcmVxdWVzdEhlYWRlcnNbICJDb250ZW50LVR5cGUiIF0gPSBzLmNvbnRlbnRU
eXBlOworCQl9CisKKwkJLy8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9u
ZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS4KKwkJaWYgKCBzLmlmTW9kaWZp
ZWQgKSB7CisJCQlpZk1vZGlmaWVkS2V5ID0gaWZNb2RpZmllZEtleSB8fCBzLnVybDsKKwkJCWlm
ICggalF1ZXJ5Lmxhc3RNb2RpZmllZFsgaWZNb2RpZmllZEtleSBdICkgeworCQkJCXJlcXVlc3RI
ZWFkZXJzWyAiSWYtTW9kaWZpZWQtU2luY2UiIF0gPSBqUXVlcnkubGFzdE1vZGlmaWVkWyBpZk1v
ZGlmaWVkS2V5IF07CisJCQl9CisJCQlpZiAoIGpRdWVyeS5ldGFnWyBpZk1vZGlmaWVkS2V5IF0g
KSB7CisJCQkJcmVxdWVzdEhlYWRlcnNbICJJZi1Ob25lLU1hdGNoIiBdID0galF1ZXJ5LmV0YWdb
IGlmTW9kaWZpZWRLZXkgXTsKKwkJCX0KKwkJfQorCisJCS8vIFNldCB0aGUgQWNjZXB0cyBoZWFk
ZXIgZm9yIHRoZSBzZXJ2ZXIsIGRlcGVuZGluZyBvbiB0aGUgZGF0YVR5cGUKKwkJcmVxdWVzdEhl
YWRlcnMuQWNjZXB0ID0gcy5kYXRhVHlwZXNbIDAgXSAmJiBzLmFjY2VwdHNbIHMuZGF0YVR5cGVz
WzBdIF0gPworCQkJcy5hY2NlcHRzWyBzLmRhdGFUeXBlc1swXSBdICsgKCBzLmRhdGFUeXBlc1sg
MCBdICE9PSAiKiIgPyAiLCAqLyo7IHE9MC4wMSIgOiAiIiApIDoKKwkJCXMuYWNjZXB0c1sgIioi
IF07CisKKwkJLy8gQ2hlY2sgZm9yIGhlYWRlcnMgb3B0aW9uCisJCWZvciAoIGkgaW4gcy5oZWFk
ZXJzICkgeworCQkJanFYSFIuc2V0UmVxdWVzdEhlYWRlciggaSwgcy5oZWFkZXJzWyBpIF0gKTsK
KwkJfQorCisJCS8vIEFsbG93IGN1c3RvbSBoZWFkZXJzL21pbWV0eXBlcyBhbmQgZWFybHkgYWJv
cnQKKwkJaWYgKCBzLmJlZm9yZVNlbmQgJiYgKCBzLmJlZm9yZVNlbmQuY2FsbCggY2FsbGJhY2tD
b250ZXh0LCBqcVhIUiwgcyApID09PSBmYWxzZSB8fCBzdGF0ZSA9PT0gMiApICkgeworCQkJCS8v
IEFib3J0IGlmIG5vdCBkb25lIGFscmVhZHkKKwkJCQlqcVhIUi5hYm9ydCgpOworCQkJCXJldHVy
biBmYWxzZTsKKworCQl9CisKKwkJLy8gSW5zdGFsbCBjYWxsYmFja3Mgb24gZGVmZXJyZWRzCisJ
CWZvciAoIGkgaW4geyBzdWNjZXNzOiAxLCBlcnJvcjogMSwgY29tcGxldGU6IDEgfSApIHsKKwkJ
CWpxWEhSWyBpIF0oIHNbIGkgXSApOworCQl9CisKKwkJLy8gR2V0IHRyYW5zcG9ydAorCQl0cmFu
c3BvcnQgPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cywgcywgb3B0
aW9ucywganFYSFIgKTsKKworCQkvLyBJZiBubyB0cmFuc3BvcnQsIHdlIGF1dG8tYWJvcnQKKwkJ
aWYgKCAhdHJhbnNwb3J0ICkgeworCQkJZG9uZSggLTEsICJObyBUcmFuc3BvcnQiICk7CisJCX0g
ZWxzZSB7CisJCQlqcVhIUi5yZWFkeVN0YXRlID0gMTsKKwkJCS8vIFNlbmQgZ2xvYmFsIGV2ZW50
CisJCQlpZiAoIGZpcmVHbG9iYWxzICkgeworCQkJCWdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2Vy
KCAiYWpheFNlbmQiLCBbIGpxWEhSLCBzIF0gKTsKKwkJCX0KKwkJCS8vIFRpbWVvdXQKKwkJCWlm
ICggcy5hc3luYyAmJiBzLnRpbWVvdXQgPiAwICkgeworCQkJCXRpbWVvdXRUaW1lciA9IHNldFRp
bWVvdXQoIGZ1bmN0aW9uKCl7CisJCQkJCWpxWEhSLmFib3J0KCAidGltZW91dCIgKTsKKwkJCQl9
LCBzLnRpbWVvdXQgKTsKKwkJCX0KKworCQkJdHJ5IHsKKwkJCQlzdGF0ZSA9IDE7CisJCQkJdHJh
bnNwb3J0LnNlbmQoIHJlcXVlc3RIZWFkZXJzLCBkb25lICk7CisJCQl9IGNhdGNoIChlKSB7CisJ
CQkJLy8gUHJvcGFnYXRlIGV4Y2VwdGlvbiBhcyBlcnJvciBpZiBub3QgZG9uZQorCQkJCWlmICgg
c3RhdHVzIDwgMiApIHsKKwkJCQkJZG9uZSggLTEsIGUgKTsKKwkJCQkvLyBTaW1wbHkgcmV0aHJv
dyBvdGhlcndpc2UKKwkJCQl9IGVsc2UgeworCQkJCQlqUXVlcnkuZXJyb3IoIGUgKTsKKwkJCQl9
CisJCQl9CisJCX0KKworCQlyZXR1cm4ganFYSFI7CisJfSwKKworCS8vIFNlcmlhbGl6ZSBhbiBh
cnJheSBvZiBmb3JtIGVsZW1lbnRzIG9yIGEgc2V0IG9mCisJLy8ga2V5L3ZhbHVlcyBpbnRvIGEg
cXVlcnkgc3RyaW5nCisJcGFyYW06IGZ1bmN0aW9uKCBhLCB0cmFkaXRpb25hbCApIHsKKwkJdmFy
IHMgPSBbXSwKKwkJCWFkZCA9IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkgeworCQkJCS8vIElmIHZh
bHVlIGlzIGEgZnVuY3Rpb24sIGludm9rZSBpdCBhbmQgcmV0dXJuIGl0cyB2YWx1ZQorCQkJCXZh
bHVlID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgPyB2YWx1ZSgpIDogdmFsdWU7CisJCQkJ
c1sgcy5sZW5ndGggXSA9IGVuY29kZVVSSUNvbXBvbmVudCgga2V5ICkgKyAiPSIgKyBlbmNvZGVV
UklDb21wb25lbnQoIHZhbHVlICk7CisJCQl9OworCisJCS8vIFNldCB0cmFkaXRpb25hbCB0byB0
cnVlIGZvciBqUXVlcnkgPD0gMS4zLjIgYmVoYXZpb3IuCisJCWlmICggdHJhZGl0aW9uYWwgPT09
IHVuZGVmaW5lZCApIHsKKwkJCXRyYWRpdGlvbmFsID0galF1ZXJ5LmFqYXhTZXR0aW5ncy50cmFk
aXRpb25hbDsKKwkJfQorCisJCS8vIElmIGFuIGFycmF5IHdhcyBwYXNzZWQgaW4sIGFzc3VtZSB0
aGF0IGl0IGlzIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMuCisJCWlmICggalF1ZXJ5LmlzQXJy
YXkoIGEgKSB8fCAoIGEuanF1ZXJ5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggYSApICkgKSB7
CisJCQkvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHMKKwkJCWpRdWVyeS5lYWNoKCBhLCBm
dW5jdGlvbigpIHsKKwkJCQlhZGQoIHRoaXMubmFtZSwgdGhpcy52YWx1ZSApOworCQkJfSApOwor
CisJCX0gZWxzZSB7CisJCQkvLyBJZiB0cmFkaXRpb25hbCwgZW5jb2RlIHRoZSAib2xkIiB3YXkg
KHRoZSB3YXkgMS4zLjIgb3Igb2xkZXIKKwkJCS8vIGRpZCBpdCksIG90aGVyd2lzZSBlbmNvZGUg
cGFyYW1zIHJlY3Vyc2l2ZWx5LgorCQkJZm9yICggdmFyIHByZWZpeCBpbiBhICkgeworCQkJCWJ1
aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZpeCBdLCB0cmFkaXRpb25hbCwgYWRkICk7CisJCQl9
CisJCX0KKworCQkvLyBSZXR1cm4gdGhlIHJlc3VsdGluZyBzZXJpYWxpemF0aW9uCisJCXJldHVy
biBzLmpvaW4oICImIiApLnJlcGxhY2UoIHIyMCwgIisiICk7CisJfQorfSk7CisKK2Z1bmN0aW9u
IGJ1aWxkUGFyYW1zKCBwcmVmaXgsIG9iaiwgdHJhZGl0aW9uYWwsIGFkZCApIHsKKwlpZiAoIGpR
dWVyeS5pc0FycmF5KCBvYmogKSAmJiBvYmoubGVuZ3RoICkgeworCQkvLyBTZXJpYWxpemUgYXJy
YXkgaXRlbS4KKwkJalF1ZXJ5LmVhY2goIG9iaiwgZnVuY3Rpb24oIGksIHYgKSB7CisJCQlpZiAo
IHRyYWRpdGlvbmFsIHx8IHJicmFja2V0LnRlc3QoIHByZWZpeCApICkgeworCQkJCS8vIFRyZWF0
IGVhY2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxhci4KKwkJCQlhZGQoIHByZWZpeCwgdiApOworCisJ
CQl9IGVsc2UgeworCQkJCS8vIElmIGFycmF5IGl0ZW0gaXMgbm9uLXNjYWxhciAoYXJyYXkgb3Ig
b2JqZWN0KSwgZW5jb2RlIGl0cworCQkJCS8vIG51bWVyaWMgaW5kZXggdG8gcmVzb2x2ZSBkZXNl
cmlhbGl6YXRpb24gYW1iaWd1aXR5IGlzc3Vlcy4KKwkJCQkvLyBOb3RlIHRoYXQgcmFjayAoYXMg
b2YgMS4wLjApIGNhbid0IGN1cnJlbnRseSBkZXNlcmlhbGl6ZQorCQkJCS8vIG5lc3RlZCBhcnJh
eXMgcHJvcGVybHksIGFuZCBhdHRlbXB0aW5nIHRvIGRvIHNvIG1heSBjYXVzZQorCQkJCS8vIGEg
c2VydmVyIGVycm9yLiBQb3NzaWJsZSBmaXhlcyBhcmUgdG8gbW9kaWZ5IHJhY2sncworCQkJCS8v
IGRlc2VyaWFsaXphdGlvbiBhbGdvcml0aG0gb3IgdG8gcHJvdmlkZSBhbiBvcHRpb24gb3IgZmxh
ZworCQkJCS8vIHRvIGZvcmNlIGFycmF5IHNlcmlhbGl6YXRpb24gdG8gYmUgc2hhbGxvdy4KKwkJ
CQlidWlsZFBhcmFtcyggcHJlZml4ICsgIlsiICsgKCB0eXBlb2YgdiA9PT0gIm9iamVjdCIgfHwg
alF1ZXJ5LmlzQXJyYXkodikgPyBpIDogIiIgKSArICJdIiwgdiwgdHJhZGl0aW9uYWwsIGFkZCAp
OworCQkJfQorCQl9KTsKKworCX0gZWxzZSBpZiAoICF0cmFkaXRpb25hbCAmJiBvYmogIT0gbnVs
bCAmJiB0eXBlb2Ygb2JqID09PSAib2JqZWN0IiApIHsKKwkJLy8gSWYgd2Ugc2VlIGFuIGFycmF5
IGhlcmUsIGl0IGlzIGVtcHR5IGFuZCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBlbXB0eQorCQkv
LyBvYmplY3QKKwkJaWYgKCBqUXVlcnkuaXNBcnJheSggb2JqICkgfHwgalF1ZXJ5LmlzRW1wdHlP
YmplY3QoIG9iaiApICkgeworCQkJYWRkKCBwcmVmaXgsICIiICk7CisKKwkJLy8gU2VyaWFsaXpl
IG9iamVjdCBpdGVtLgorCQl9IGVsc2UgeworCQkJZm9yICggdmFyIG5hbWUgaW4gb2JqICkgewor
CQkJCWJ1aWxkUGFyYW1zKCBwcmVmaXggKyAiWyIgKyBuYW1lICsgIl0iLCBvYmpbIG5hbWUgXSwg
dHJhZGl0aW9uYWwsIGFkZCApOworCQkJfQorCQl9CisKKwl9IGVsc2UgeworCQkvLyBTZXJpYWxp
emUgc2NhbGFyIGl0ZW0uCisJCWFkZCggcHJlZml4LCBvYmogKTsKKwl9Cit9CisKKy8vIFRoaXMg
aXMgc3RpbGwgb24gdGhlIGpRdWVyeSBvYmplY3QuLi4gZm9yIG5vdworLy8gV2FudCB0byBtb3Zl
IHRoaXMgdG8galF1ZXJ5LmFqYXggc29tZSBkYXkKK2pRdWVyeS5leHRlbmQoeworCisJLy8gQ291
bnRlciBmb3IgaG9sZGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzCisJYWN0aXZlOiAw
LAorCisJLy8gTGFzdC1Nb2RpZmllZCBoZWFkZXIgY2FjaGUgZm9yIG5leHQgcmVxdWVzdAorCWxh
c3RNb2RpZmllZDoge30sCisJZXRhZzoge30KKworfSk7CisKKy8qIEhhbmRsZXMgcmVzcG9uc2Vz
IHRvIGFuIGFqYXggcmVxdWVzdDoKKyAqIC0gc2V0cyBhbGwgcmVzcG9uc2VYWFggZmllbGRzIGFj
Y29yZGluZ2x5CisgKiAtIGZpbmRzIHRoZSByaWdodCBkYXRhVHlwZSAobWVkaWF0ZXMgYmV0d2Vl
biBjb250ZW50LXR5cGUgYW5kIGV4cGVjdGVkIGRhdGFUeXBlKQorICogLSByZXR1cm5zIHRoZSBj
b3JyZXNwb25kaW5nIHJlc3BvbnNlCisgKi8KK2Z1bmN0aW9uIGFqYXhIYW5kbGVSZXNwb25zZXMo
IHMsIGpxWEhSLCByZXNwb25zZXMgKSB7CisKKwl2YXIgY29udGVudHMgPSBzLmNvbnRlbnRzLAor
CQlkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcywKKwkJcmVzcG9uc2VGaWVsZHMgPSBzLnJlc3BvbnNl
RmllbGRzLAorCQljdCwKKwkJdHlwZSwKKwkJZmluYWxEYXRhVHlwZSwKKwkJZmlyc3REYXRhVHlw
ZTsKKworCS8vIEZpbGwgcmVzcG9uc2VYWFggZmllbGRzCisJZm9yKCB0eXBlIGluIHJlc3BvbnNl
RmllbGRzICkgeworCQlpZiAoIHR5cGUgaW4gcmVzcG9uc2VzICkgeworCQkJanFYSFJbIHJlc3Bv
bnNlRmllbGRzW3R5cGVdIF0gPSByZXNwb25zZXNbIHR5cGUgXTsKKwkJfQorCX0KKworCS8vIFJl
bW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBlIGluIHRoZSBwcm9jZXNzCisJ
d2hpbGUoIGRhdGFUeXBlc1sgMCBdID09PSAiKiIgKSB7CisJCWRhdGFUeXBlcy5zaGlmdCgpOwor
CQlpZiAoIGN0ID09PSB1bmRlZmluZWQgKSB7CisJCQljdCA9IHMubWltZVR5cGUgfHwganFYSFIu
Z2V0UmVzcG9uc2VIZWFkZXIoICJjb250ZW50LXR5cGUiICk7CisJCX0KKwl9CisKKwkvLyBDaGVj
ayBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBrbm93biBjb250ZW50LXR5cGUKKwlpZiAoIGN0ICkg
eworCQlmb3IgKCB0eXBlIGluIGNvbnRlbnRzICkgeworCQkJaWYgKCBjb250ZW50c1sgdHlwZSBd
ICYmIGNvbnRlbnRzWyB0eXBlIF0udGVzdCggY3QgKSApIHsKKwkJCQlkYXRhVHlwZXMudW5zaGlm
dCggdHlwZSApOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJLy8gQ2hlY2sgdG8gc2Vl
IGlmIHdlIGhhdmUgYSByZXNwb25zZSBmb3IgdGhlIGV4cGVjdGVkIGRhdGFUeXBlCisJaWYgKCBk
YXRhVHlwZXNbIDAgXSBpbiByZXNwb25zZXMgKSB7CisJCWZpbmFsRGF0YVR5cGUgPSBkYXRhVHlw
ZXNbIDAgXTsKKwl9IGVsc2UgeworCQkvLyBUcnkgY29udmVydGlibGUgZGF0YVR5cGVzCisJCWZv
ciAoIHR5cGUgaW4gcmVzcG9uc2VzICkgeworCQkJaWYgKCAhZGF0YVR5cGVzWyAwIF0gfHwgcy5j
b252ZXJ0ZXJzWyB0eXBlICsgIiAiICsgZGF0YVR5cGVzWzBdIF0gKSB7CisJCQkJZmluYWxEYXRh
VHlwZSA9IHR5cGU7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoICFmaXJzdERhdGFUeXBlICkg
eworCQkJCWZpcnN0RGF0YVR5cGUgPSB0eXBlOworCQkJfQorCQl9CisJCS8vIE9yIGp1c3QgdXNl
IGZpcnN0IG9uZQorCQlmaW5hbERhdGFUeXBlID0gZmluYWxEYXRhVHlwZSB8fCBmaXJzdERhdGFU
eXBlOworCX0KKworCS8vIElmIHdlIGZvdW5kIGEgZGF0YVR5cGUKKwkvLyBXZSBhZGQgdGhlIGRh
dGFUeXBlIHRvIHRoZSBsaXN0IGlmIG5lZWRlZAorCS8vIGFuZCByZXR1cm4gdGhlIGNvcnJlc3Bv
bmRpbmcgcmVzcG9uc2UKKwlpZiAoIGZpbmFsRGF0YVR5cGUgKSB7CisJCWlmICggZmluYWxEYXRh
VHlwZSAhPT0gZGF0YVR5cGVzWyAwIF0gKSB7CisJCQlkYXRhVHlwZXMudW5zaGlmdCggZmluYWxE
YXRhVHlwZSApOworCQl9CisJCXJldHVybiByZXNwb25zZXNbIGZpbmFsRGF0YVR5cGUgXTsKKwl9
Cit9CisKKy8vIENoYWluIGNvbnZlcnNpb25zIGdpdmVuIHRoZSByZXF1ZXN0IGFuZCB0aGUgb3Jp
Z2luYWwgcmVzcG9uc2UKK2Z1bmN0aW9uIGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSApIHsKKwor
CS8vIEFwcGx5IHRoZSBkYXRhRmlsdGVyIGlmIHByb3ZpZGVkCisJaWYgKCBzLmRhdGFGaWx0ZXIg
KSB7CisJCXJlc3BvbnNlID0gcy5kYXRhRmlsdGVyKCByZXNwb25zZSwgcy5kYXRhVHlwZSApOwor
CX0KKworCXZhciBkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcywKKwkJY29udmVydGVycyA9IHt9LAor
CQlpLAorCQlrZXksCisJCWxlbmd0aCA9IGRhdGFUeXBlcy5sZW5ndGgsCisJCXRtcCwKKwkJLy8g
Q3VycmVudCBhbmQgcHJldmlvdXMgZGF0YVR5cGVzCisJCWN1cnJlbnQgPSBkYXRhVHlwZXNbIDAg
XSwKKwkJcHJldiwKKwkJLy8gQ29udmVyc2lvbiBleHByZXNzaW9uCisJCWNvbnZlcnNpb24sCisJ
CS8vIENvbnZlcnNpb24gZnVuY3Rpb24KKwkJY29udiwKKwkJLy8gQ29udmVyc2lvbiBmdW5jdGlv
bnMgKHRyYW5zaXRpdmUgY29udmVyc2lvbikKKwkJY29udjEsCisJCWNvbnYyOworCisJLy8gRm9y
IGVhY2ggZGF0YVR5cGUgaW4gdGhlIGNoYWluCisJZm9yKCBpID0gMTsgaSA8IGxlbmd0aDsgaSsr
ICkgeworCisJCS8vIENyZWF0ZSBjb252ZXJ0ZXJzIG1hcAorCQkvLyB3aXRoIGxvd2VyY2FzZWQg
a2V5cworCQlpZiAoIGkgPT09IDEgKSB7CisJCQlmb3IoIGtleSBpbiBzLmNvbnZlcnRlcnMgKSB7
CisJCQkJaWYoIHR5cGVvZiBrZXkgPT09ICJzdHJpbmciICkgeworCQkJCQljb252ZXJ0ZXJzWyBr
ZXkudG9Mb3dlckNhc2UoKSBdID0gcy5jb252ZXJ0ZXJzWyBrZXkgXTsKKwkJCQl9CisJCQl9CisJ
CX0KKworCQkvLyBHZXQgdGhlIGRhdGFUeXBlcworCQlwcmV2ID0gY3VycmVudDsKKwkJY3VycmVu
dCA9IGRhdGFUeXBlc1sgaSBdOworCisJCS8vIElmIGN1cnJlbnQgaXMgYXV0byBkYXRhVHlwZSwg
dXBkYXRlIGl0IHRvIHByZXYKKwkJaWYoIGN1cnJlbnQgPT09ICIqIiApIHsKKwkJCWN1cnJlbnQg
PSBwcmV2OworCQkvLyBJZiBubyBhdXRvIGFuZCBkYXRhVHlwZXMgYXJlIGFjdHVhbGx5IGRpZmZl
cmVudAorCQl9IGVsc2UgaWYgKCBwcmV2ICE9PSAiKiIgJiYgcHJldiAhPT0gY3VycmVudCApIHsK
KworCQkJLy8gR2V0IHRoZSBjb252ZXJ0ZXIKKwkJCWNvbnZlcnNpb24gPSBwcmV2ICsgIiAiICsg
Y3VycmVudDsKKwkJCWNvbnYgPSBjb252ZXJ0ZXJzWyBjb252ZXJzaW9uIF0gfHwgY29udmVydGVy
c1sgIiogIiArIGN1cnJlbnQgXTsKKworCQkJLy8gSWYgdGhlcmUgaXMgbm8gZGlyZWN0IGNvbnZl
cnRlciwgc2VhcmNoIHRyYW5zaXRpdmVseQorCQkJaWYgKCAhY29udiApIHsKKwkJCQljb252MiA9
IHVuZGVmaW5lZDsKKwkJCQlmb3IoIGNvbnYxIGluIGNvbnZlcnRlcnMgKSB7CisJCQkJCXRtcCA9
IGNvbnYxLnNwbGl0KCAiICIgKTsKKwkJCQkJaWYgKCB0bXBbIDAgXSA9PT0gcHJldiB8fCB0bXBb
IDAgXSA9PT0gIioiICkgeworCQkJCQkJY29udjIgPSBjb252ZXJ0ZXJzWyB0bXBbMV0gKyAiICIg
KyBjdXJyZW50IF07CisJCQkJCQlpZiAoIGNvbnYyICkgeworCQkJCQkJCWNvbnYxID0gY29udmVy
dGVyc1sgY29udjEgXTsKKwkJCQkJCQlpZiAoIGNvbnYxID09PSB0cnVlICkgeworCQkJCQkJCQlj
b252ID0gY29udjI7CisJCQkJCQkJfSBlbHNlIGlmICggY29udjIgPT09IHRydWUgKSB7CisJCQkJ
CQkJCWNvbnYgPSBjb252MTsKKwkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJ
CX0KKwkJCQl9CisJCQl9CisJCQkvLyBJZiB3ZSBmb3VuZCBubyBjb252ZXJ0ZXIsIGRpc3BhdGNo
IGFuIGVycm9yCisJCQlpZiAoICEoIGNvbnYgfHwgY29udjIgKSApIHsKKwkJCQlqUXVlcnkuZXJy
b3IoICJObyBjb252ZXJzaW9uIGZyb20gIiArIGNvbnZlcnNpb24ucmVwbGFjZSgiICIsIiB0byAi
KSApOworCQkJfQorCQkJLy8gSWYgZm91bmQgY29udmVydGVyIGlzIG5vdCBhbiBlcXVpdmFsZW5j
ZQorCQkJaWYgKCBjb252ICE9PSB0cnVlICkgeworCQkJCS8vIENvbnZlcnQgd2l0aCAxIG9yIDIg
Y29udmVydGVycyBhY2NvcmRpbmdseQorCQkJCXJlc3BvbnNlID0gY29udiA/IGNvbnYoIHJlc3Bv
bnNlICkgOiBjb252MiggY29udjEocmVzcG9uc2UpICk7CisJCQl9CisJCX0KKwl9CisJcmV0dXJu
IHJlc3BvbnNlOworfQorCit9KSggalF1ZXJ5ICk7CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlv
dXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3NyYy9hamF4LmpzCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFs
bG93LXRhYnMKICAgKyB5ZXMKCkluZGV4OiBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Ny
Yy9hdHRyaWJ1dGVzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJj
ZXMvc3JjL2F0dHJpYnV0ZXMuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcXVlcnkv
cmVzb3VyY2VzL3NyYy9hdHRyaWJ1dGVzLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM4OSBA
QAorKGZ1bmN0aW9uKCBqUXVlcnkgKSB7CisKK3ZhciByY2xhc3MgPSAvW1xuXHRccl0vZywKKwly
c3BhY2VzID0gL1xzKy8sCisJcnJldHVybiA9IC9cci9nLAorCXJzcGVjaWFsdXJsID0gL14oPzpo
cmVmfHNyY3xzdHlsZSkkLywKKwlydHlwZSA9IC9eKD86YnV0dG9ufGlucHV0KSQvaSwKKwlyZm9j
dXNhYmxlID0gL14oPzpidXR0b258aW5wdXR8b2JqZWN0fHNlbGVjdHx0ZXh0YXJlYSkkL2ksCisJ
cmNsaWNrYWJsZSA9IC9eYSg/OnJlYSk/JC9pLAorCXJyYWRpb2NoZWNrID0gL14oPzpyYWRpb3xj
aGVja2JveCkkL2k7CisKK2pRdWVyeS5wcm9wcyA9IHsKKwkiZm9yIjogImh0bWxGb3IiLAorCSJj
bGFzcyI6ICJjbGFzc05hbWUiLAorCXJlYWRvbmx5OiAicmVhZE9ubHkiLAorCW1heGxlbmd0aDog
Im1heExlbmd0aCIsCisJY2VsbHNwYWNpbmc6ICJjZWxsU3BhY2luZyIsCisJcm93c3BhbjogInJv
d1NwYW4iLAorCWNvbHNwYW46ICJjb2xTcGFuIiwKKwl0YWJpbmRleDogInRhYkluZGV4IiwKKwl1
c2VtYXA6ICJ1c2VNYXAiLAorCWZyYW1lYm9yZGVyOiAiZnJhbWVCb3JkZXIiCit9OworCitqUXVl
cnkuZm4uZXh0ZW5kKHsKKwlhdHRyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7CisJCXJldHVy
biBqUXVlcnkuYWNjZXNzKCB0aGlzLCBuYW1lLCB2YWx1ZSwgdHJ1ZSwgalF1ZXJ5LmF0dHIgKTsK
Kwl9LAorCisJcmVtb3ZlQXR0cjogZnVuY3Rpb24oIG5hbWUsIGZuICkgeworCQlyZXR1cm4gdGhp
cy5lYWNoKGZ1bmN0aW9uKCl7CisJCQlqUXVlcnkuYXR0ciggdGhpcywgbmFtZSwgIiIgKTsKKwkJ
CWlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSApIHsKKwkJCQl0aGlzLnJlbW92ZUF0dHJpYnV0ZSgg
bmFtZSApOworCQkJfQorCQl9KTsKKwl9LAorCisJYWRkQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSAp
IHsKKwkJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbih2YWx1ZSkgKSB7CisJCQlyZXR1cm4gdGhpcy5l
YWNoKGZ1bmN0aW9uKGkpIHsKKwkJCQl2YXIgc2VsZiA9IGpRdWVyeSh0aGlzKTsKKwkJCQlzZWxm
LmFkZENsYXNzKCB2YWx1ZS5jYWxsKHRoaXMsIGksIHNlbGYuYXR0cigiY2xhc3MiKSkgKTsKKwkJ
CX0pOworCQl9CisKKwkJaWYgKCB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciICkg
eworCQkJdmFyIGNsYXNzTmFtZXMgPSAodmFsdWUgfHwgIiIpLnNwbGl0KCByc3BhY2VzICk7CisK
KwkJCWZvciAoIHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrICkgeworCQkJ
CXZhciBlbGVtID0gdGhpc1tpXTsKKworCQkJCWlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsK
KwkJCQkJaWYgKCAhZWxlbS5jbGFzc05hbWUgKSB7CisJCQkJCQllbGVtLmNsYXNzTmFtZSA9IHZh
bHVlOworCisJCQkJCX0gZWxzZSB7CisJCQkJCQl2YXIgY2xhc3NOYW1lID0gIiAiICsgZWxlbS5j
bGFzc05hbWUgKyAiICIsCisJCQkJCQkJc2V0Q2xhc3MgPSBlbGVtLmNsYXNzTmFtZTsKKworCQkJ
CQkJZm9yICggdmFyIGMgPSAwLCBjbCA9IGNsYXNzTmFtZXMubGVuZ3RoOyBjIDwgY2w7IGMrKyAp
IHsKKwkJCQkJCQlpZiAoIGNsYXNzTmFtZS5pbmRleE9mKCAiICIgKyBjbGFzc05hbWVzW2NdICsg
IiAiICkgPCAwICkgeworCQkJCQkJCQlzZXRDbGFzcyArPSAiICIgKyBjbGFzc05hbWVzW2NdOwor
CQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJCWVsZW0uY2xhc3NOYW1lID0galF1ZXJ5LnRyaW0oIHNl
dENsYXNzICk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKworCQlyZXR1cm4gdGhpczsKKwl9
LAorCisJcmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKwkJaWYgKCBqUXVlcnkuaXNG
dW5jdGlvbih2YWx1ZSkgKSB7CisJCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsKKwkJ
CQl2YXIgc2VsZiA9IGpRdWVyeSh0aGlzKTsKKwkJCQlzZWxmLnJlbW92ZUNsYXNzKCB2YWx1ZS5j
YWxsKHRoaXMsIGksIHNlbGYuYXR0cigiY2xhc3MiKSkgKTsKKwkJCX0pOworCQl9CisKKwkJaWYg
KCAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIikgfHwgdmFsdWUgPT09IHVuZGVm
aW5lZCApIHsKKwkJCXZhciBjbGFzc05hbWVzID0gKHZhbHVlIHx8ICIiKS5zcGxpdCggcnNwYWNl
cyApOworCisJCQlmb3IgKCB2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyAp
IHsKKwkJCQl2YXIgZWxlbSA9IHRoaXNbaV07CisKKwkJCQlpZiAoIGVsZW0ubm9kZVR5cGUgPT09
IDEgJiYgZWxlbS5jbGFzc05hbWUgKSB7CisJCQkJCWlmICggdmFsdWUgKSB7CisJCQkJCQl2YXIg
Y2xhc3NOYW1lID0gKCIgIiArIGVsZW0uY2xhc3NOYW1lICsgIiAiKS5yZXBsYWNlKHJjbGFzcywg
IiAiKTsKKwkJCQkJCWZvciAoIHZhciBjID0gMCwgY2wgPSBjbGFzc05hbWVzLmxlbmd0aDsgYyA8
IGNsOyBjKysgKSB7CisJCQkJCQkJY2xhc3NOYW1lID0gY2xhc3NOYW1lLnJlcGxhY2UoIiAiICsg
Y2xhc3NOYW1lc1tjXSArICIgIiwgIiAiKTsKKwkJCQkJCX0KKwkJCQkJCWVsZW0uY2xhc3NOYW1l
ID0galF1ZXJ5LnRyaW0oIGNsYXNzTmFtZSApOworCisJCQkJCX0gZWxzZSB7CisJCQkJCQllbGVt
LmNsYXNzTmFtZSA9ICIiOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisKKwkJcmV0dXJuIHRo
aXM7CisJfSwKKworCXRvZ2dsZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUsIHN0YXRlVmFsICkgewor
CQl2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZSwKKwkJCWlzQm9vbCA9IHR5cGVvZiBzdGF0ZVZhbCA9
PT0gImJvb2xlYW4iOworCisJCWlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7CisJ
CQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsKKwkJCQl2YXIgc2VsZiA9IGpRdWVyeSh0
aGlzKTsKKwkJCQlzZWxmLnRvZ2dsZUNsYXNzKCB2YWx1ZS5jYWxsKHRoaXMsIGksIHNlbGYuYXR0
cigiY2xhc3MiKSwgc3RhdGVWYWwpLCBzdGF0ZVZhbCApOworCQkJfSk7CisJCX0KKworCQlyZXR1
cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgeworCQkJaWYgKCB0eXBlID09PSAic3RyaW5nIiApIHsK
KwkJCQkvLyB0b2dnbGUgaW5kaXZpZHVhbCBjbGFzcyBuYW1lcworCQkJCXZhciBjbGFzc05hbWUs
CisJCQkJCWkgPSAwLAorCQkJCQlzZWxmID0galF1ZXJ5KCB0aGlzICksCisJCQkJCXN0YXRlID0g
c3RhdGVWYWwsCisJCQkJCWNsYXNzTmFtZXMgPSB2YWx1ZS5zcGxpdCggcnNwYWNlcyApOworCisJ
CQkJd2hpbGUgKCAoY2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSsrIF0pICkgeworCQkJCQkvLyBj
aGVjayBlYWNoIGNsYXNzTmFtZSBnaXZlbiwgc3BhY2Ugc2VwZXJhdGVkIGxpc3QKKwkJCQkJc3Rh
dGUgPSBpc0Jvb2wgPyBzdGF0ZSA6ICFzZWxmLmhhc0NsYXNzKCBjbGFzc05hbWUgKTsKKwkJCQkJ
c2VsZlsgc3RhdGUgPyAiYWRkQ2xhc3MiIDogInJlbW92ZUNsYXNzIiBdKCBjbGFzc05hbWUgKTsK
KwkJCQl9CisKKwkJCX0gZWxzZSBpZiAoIHR5cGUgPT09ICJ1bmRlZmluZWQiIHx8IHR5cGUgPT09
ICJib29sZWFuIiApIHsKKwkJCQlpZiAoIHRoaXMuY2xhc3NOYW1lICkgeworCQkJCQkvLyBzdG9y
ZSBjbGFzc05hbWUgaWYgc2V0CisJCQkJCWpRdWVyeS5fZGF0YSggdGhpcywgIl9fY2xhc3NOYW1l
X18iLCB0aGlzLmNsYXNzTmFtZSApOworCQkJCX0KKworCQkJCS8vIHRvZ2dsZSB3aG9sZSBjbGFz
c05hbWUKKwkJCQl0aGlzLmNsYXNzTmFtZSA9IHRoaXMuY2xhc3NOYW1lIHx8IHZhbHVlID09PSBm
YWxzZSA/ICIiIDogalF1ZXJ5Ll9kYXRhKCB0aGlzLCAiX19jbGFzc05hbWVfXyIgKSB8fCAiIjsK
KwkJCX0KKwkJfSk7CisJfSwKKworCWhhc0NsYXNzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisJ
CXZhciBjbGFzc05hbWUgPSAiICIgKyBzZWxlY3RvciArICIgIjsKKwkJZm9yICggdmFyIGkgPSAw
LCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CisJCQlpZiAoICgiICIgKyB0aGlzW2ld
LmNsYXNzTmFtZSArICIgIikucmVwbGFjZShyY2xhc3MsICIgIikuaW5kZXhPZiggY2xhc3NOYW1l
ICkgPiAtMSApIHsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJfQorCisJCXJldHVybiBmYWxz
ZTsKKwl9LAorCisJdmFsOiBmdW5jdGlvbiggdmFsdWUgKSB7CisJCWlmICggIWFyZ3VtZW50cy5s
ZW5ndGggKSB7CisJCQl2YXIgZWxlbSA9IHRoaXNbMF07CisKKwkJCWlmICggZWxlbSApIHsKKwkJ
CQlpZiAoIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgIm9wdGlvbiIgKSApIHsKKwkJCQkJLy8gYXR0
cmlidXRlcy52YWx1ZSBpcyB1bmRlZmluZWQgaW4gQmxhY2tiZXJyeSA0LjcgYnV0CisJCQkJCS8v
IHVzZXMgLnZhbHVlLiBTZWUgIzY5MzIKKwkJCQkJdmFyIHZhbCA9IGVsZW0uYXR0cmlidXRlcy52
YWx1ZTsKKwkJCQkJcmV0dXJuICF2YWwgfHwgdmFsLnNwZWNpZmllZCA/IGVsZW0udmFsdWUgOiBl
bGVtLnRleHQ7CisJCQkJfQorCisJCQkJLy8gV2UgbmVlZCB0byBoYW5kbGUgc2VsZWN0IGJveGVz
IHNwZWNpYWwKKwkJCQlpZiAoIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgInNlbGVjdCIgKSApIHsK
KwkJCQkJdmFyIGluZGV4ID0gZWxlbS5zZWxlY3RlZEluZGV4LAorCQkJCQkJdmFsdWVzID0gW10s
CisJCQkJCQlvcHRpb25zID0gZWxlbS5vcHRpb25zLAorCQkJCQkJb25lID0gZWxlbS50eXBlID09
PSAic2VsZWN0LW9uZSI7CisKKwkJCQkJLy8gTm90aGluZyB3YXMgc2VsZWN0ZWQKKwkJCQkJaWYg
KCBpbmRleCA8IDAgKSB7CisJCQkJCQlyZXR1cm4gbnVsbDsKKwkJCQkJfQorCisJCQkJCS8vIExv
b3AgdGhyb3VnaCBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnMKKwkJCQkJZm9yICggdmFyIGkgPSBv
bmUgPyBpbmRleCA6IDAsIG1heCA9IG9uZSA/IGluZGV4ICsgMSA6IG9wdGlvbnMubGVuZ3RoOyBp
IDwgbWF4OyBpKysgKSB7CisJCQkJCQl2YXIgb3B0aW9uID0gb3B0aW9uc1sgaSBdOworCisJCQkJ
CQkvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2Fi
bGVkIG9wdGdyb3VwCisJCQkJCQlpZiAoIG9wdGlvbi5zZWxlY3RlZCAmJiAoalF1ZXJ5LnN1cHBv
cnQub3B0RGlzYWJsZWQgPyAhb3B0aW9uLmRpc2FibGVkIDogb3B0aW9uLmdldEF0dHJpYnV0ZSgi
ZGlzYWJsZWQiKSA9PT0gbnVsbCkgJiYKKwkJCQkJCQkJKCFvcHRpb24ucGFyZW50Tm9kZS5kaXNh
YmxlZCB8fCAhalF1ZXJ5Lm5vZGVOYW1lKCBvcHRpb24ucGFyZW50Tm9kZSwgIm9wdGdyb3VwIiAp
KSApIHsKKworCQkJCQkJCS8vIEdldCB0aGUgc3BlY2lmaWMgdmFsdWUgZm9yIHRoZSBvcHRpb24K
KwkJCQkJCQl2YWx1ZSA9IGpRdWVyeShvcHRpb24pLnZhbCgpOworCisJCQkJCQkJLy8gV2UgZG9u
J3QgbmVlZCBhbiBhcnJheSBmb3Igb25lIHNlbGVjdHMKKwkJCQkJCQlpZiAoIG9uZSApIHsKKwkJ
CQkJCQkJcmV0dXJuIHZhbHVlOworCQkJCQkJCX0KKworCQkJCQkJCS8vIE11bHRpLVNlbGVjdHMg
cmV0dXJuIGFuIGFycmF5CisJCQkJCQkJdmFsdWVzLnB1c2goIHZhbHVlICk7CisJCQkJCQl9CisJ
CQkJCX0KKworCQkJCQkvLyBGaXhlcyBCdWcgIzI1NTEgLS0gc2VsZWN0LnZhbCgpIGJyb2tlbiBp
biBJRSBhZnRlciBmb3JtLnJlc2V0KCkKKwkJCQkJaWYgKCBvbmUgJiYgIXZhbHVlcy5sZW5ndGgg
JiYgb3B0aW9ucy5sZW5ndGggKSB7CisJCQkJCQlyZXR1cm4galF1ZXJ5KCBvcHRpb25zWyBpbmRl
eCBdICkudmFsKCk7CisJCQkJCX0KKworCQkJCQlyZXR1cm4gdmFsdWVzOworCQkJCX0KKworCQkJ
CS8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBpbiBXZWJraXQgIiIgaXMgcmV0dXJuZWQgaW5zdGVh
ZCBvZiAib24iIGlmIGEgdmFsdWUgaXNuJ3Qgc3BlY2lmaWVkCisJCQkJaWYgKCBycmFkaW9jaGVj
ay50ZXN0KCBlbGVtLnR5cGUgKSAmJiAhalF1ZXJ5LnN1cHBvcnQuY2hlY2tPbiApIHsKKwkJCQkJ
cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpID09PSBudWxsID8gIm9uIiA6IGVsZW0u
dmFsdWU7CisJCQkJfQorCisJCQkJLy8gRXZlcnl0aGluZyBlbHNlLCB3ZSBqdXN0IGdyYWIgdGhl
IHZhbHVlCisJCQkJcmV0dXJuIChlbGVtLnZhbHVlIHx8ICIiKS5yZXBsYWNlKHJyZXR1cm4sICIi
KTsKKworCQkJfQorCisJCQlyZXR1cm4gdW5kZWZpbmVkOworCQl9CisKKwkJdmFyIGlzRnVuY3Rp
b24gPSBqUXVlcnkuaXNGdW5jdGlvbih2YWx1ZSk7CisKKwkJcmV0dXJuIHRoaXMuZWFjaChmdW5j
dGlvbihpKSB7CisJCQl2YXIgc2VsZiA9IGpRdWVyeSh0aGlzKSwgdmFsID0gdmFsdWU7CisKKwkJ
CWlmICggdGhpcy5ub2RlVHlwZSAhPT0gMSApIHsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCWlm
ICggaXNGdW5jdGlvbiApIHsKKwkJCQl2YWwgPSB2YWx1ZS5jYWxsKHRoaXMsIGksIHNlbGYudmFs
KCkpOworCQkJfQorCisJCQkvLyBUcmVhdCBudWxsL3VuZGVmaW5lZCBhcyAiIjsgY29udmVydCBu
dW1iZXJzIHRvIHN0cmluZworCQkJaWYgKCB2YWwgPT0gbnVsbCApIHsKKwkJCQl2YWwgPSAiIjsK
KwkJCX0gZWxzZSBpZiAoIHR5cGVvZiB2YWwgPT09ICJudW1iZXIiICkgeworCQkJCXZhbCArPSAi
IjsKKwkJCX0gZWxzZSBpZiAoIGpRdWVyeS5pc0FycmF5KHZhbCkgKSB7CisJCQkJdmFsID0galF1
ZXJ5Lm1hcCh2YWwsIGZ1bmN0aW9uICh2YWx1ZSkgeworCQkJCQlyZXR1cm4gdmFsdWUgPT0gbnVs
bCA/ICIiIDogdmFsdWUgKyAiIjsKKwkJCQl9KTsKKwkJCX0KKworCQkJaWYgKCBqUXVlcnkuaXNB
cnJheSh2YWwpICYmIHJyYWRpb2NoZWNrLnRlc3QoIHRoaXMudHlwZSApICkgeworCQkJCXRoaXMu
Y2hlY2tlZCA9IGpRdWVyeS5pbkFycmF5KCBzZWxmLnZhbCgpLCB2YWwgKSA+PSAwOworCisJCQl9
IGVsc2UgaWYgKCBqUXVlcnkubm9kZU5hbWUoIHRoaXMsICJzZWxlY3QiICkgKSB7CisJCQkJdmFy
IHZhbHVlcyA9IGpRdWVyeS5tYWtlQXJyYXkodmFsKTsKKworCQkJCWpRdWVyeSggIm9wdGlvbiIs
IHRoaXMgKS5lYWNoKGZ1bmN0aW9uKCkgeworCQkJCQl0aGlzLnNlbGVjdGVkID0galF1ZXJ5Lmlu
QXJyYXkoIGpRdWVyeSh0aGlzKS52YWwoKSwgdmFsdWVzICkgPj0gMDsKKwkJCQl9KTsKKworCQkJ
CWlmICggIXZhbHVlcy5sZW5ndGggKSB7CisJCQkJCXRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xOwor
CQkJCX0KKworCQkJfSBlbHNlIHsKKwkJCQl0aGlzLnZhbHVlID0gdmFsOworCQkJfQorCQl9KTsK
Kwl9Cit9KTsKKworalF1ZXJ5LmV4dGVuZCh7CisJYXR0ckZuOiB7CisJCXZhbDogdHJ1ZSwKKwkJ
Y3NzOiB0cnVlLAorCQlodG1sOiB0cnVlLAorCQl0ZXh0OiB0cnVlLAorCQlkYXRhOiB0cnVlLAor
CQl3aWR0aDogdHJ1ZSwKKwkJaGVpZ2h0OiB0cnVlLAorCQlvZmZzZXQ6IHRydWUKKwl9LAorCisJ
YXR0cjogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlLCBwYXNzICkgeworCQkvLyBkb24ndCBn
ZXQvc2V0IGF0dHJpYnV0ZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzCisJ
CWlmICggIWVsZW0gfHwgZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4
IHx8IGVsZW0ubm9kZVR5cGUgPT09IDIgKSB7CisJCQlyZXR1cm4gdW5kZWZpbmVkOworCQl9CisK
KwkJaWYgKCBwYXNzICYmIG5hbWUgaW4galF1ZXJ5LmF0dHJGbiApIHsKKwkJCXJldHVybiBqUXVl
cnkoZWxlbSlbbmFtZV0odmFsdWUpOworCQl9CisKKwkJdmFyIG5vdHhtbCA9IGVsZW0ubm9kZVR5
cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApLAorCQkJLy8gV2hldGhlciB3ZSBh
cmUgc2V0dGluZyAob3IgZ2V0dGluZykKKwkJCXNldCA9IHZhbHVlICE9PSB1bmRlZmluZWQ7CisK
KwkJLy8gVHJ5IHRvIG5vcm1hbGl6ZS9maXggdGhlIG5hbWUKKwkJbmFtZSA9IG5vdHhtbCAmJiBq
UXVlcnkucHJvcHNbIG5hbWUgXSB8fCBuYW1lOworCisJCS8vIE9ubHkgZG8gYWxsIHRoZSBmb2xs
b3dpbmcgaWYgdGhpcyBpcyBhIG5vZGUgKGZhc3RlciBmb3Igc3R5bGUpCisJCWlmICggZWxlbS5u
b2RlVHlwZSA9PT0gMSApIHsKKwkJCS8vIFRoZXNlIGF0dHJpYnV0ZXMgcmVxdWlyZSBzcGVjaWFs
IHRyZWF0bWVudAorCQkJdmFyIHNwZWNpYWwgPSByc3BlY2lhbHVybC50ZXN0KCBuYW1lICk7CisK
KwkJCS8vIFNhZmFyaSBtaXMtcmVwb3J0cyB0aGUgZGVmYXVsdCBzZWxlY3RlZCBwcm9wZXJ0eSBv
ZiBhbiBvcHRpb24KKwkJCS8vIEFjY2Vzc2luZyB0aGUgcGFyZW50J3Mgc2VsZWN0ZWRJbmRleCBw
cm9wZXJ0eSBmaXhlcyBpdAorCQkJaWYgKCBuYW1lID09PSAic2VsZWN0ZWQiICYmICFqUXVlcnku
c3VwcG9ydC5vcHRTZWxlY3RlZCApIHsKKwkJCQl2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2Rl
OworCQkJCWlmICggcGFyZW50ICkgeworCQkJCQlwYXJlbnQuc2VsZWN0ZWRJbmRleDsKKworCQkJ
CQkvLyBNYWtlIHN1cmUgdGhhdCBpdCBhbHNvIHdvcmtzIHdpdGggb3B0Z3JvdXBzLCBzZWUgIzU3
MDEKKwkJCQkJaWYgKCBwYXJlbnQucGFyZW50Tm9kZSApIHsKKwkJCQkJCXBhcmVudC5wYXJlbnRO
b2RlLnNlbGVjdGVkSW5kZXg7CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCS8vIElmIGFwcGxp
Y2FibGUsIGFjY2VzcyB0aGUgYXR0cmlidXRlIHZpYSB0aGUgRE9NIDAgd2F5CisJCQkvLyAnaW4n
IGNoZWNrcyBmYWlsIGluIEJsYWNrYmVycnkgNC43ICM2OTMxCisJCQlpZiAoIChuYW1lIGluIGVs
ZW0gfHwgZWxlbVsgbmFtZSBdICE9PSB1bmRlZmluZWQpICYmIG5vdHhtbCAmJiAhc3BlY2lhbCAp
IHsKKwkJCQlpZiAoIHNldCApIHsKKwkJCQkJLy8gV2UgY2FuJ3QgYWxsb3cgdGhlIHR5cGUgcHJv
cGVydHkgdG8gYmUgY2hhbmdlZCAoc2luY2UgaXQgY2F1c2VzIHByb2JsZW1zIGluIElFKQorCQkJ
CQlpZiAoIG5hbWUgPT09ICJ0eXBlIiAmJiBydHlwZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiYg
ZWxlbS5wYXJlbnROb2RlICkgeworCQkJCQkJalF1ZXJ5LmVycm9yKCAidHlwZSBwcm9wZXJ0eSBj
YW4ndCBiZSBjaGFuZ2VkIiApOworCQkJCQl9CisKKwkJCQkJaWYgKCB2YWx1ZSA9PT0gbnVsbCAp
IHsKKwkJCQkJCWlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKwkJCQkJCQllbGVtLnJlbW92
ZUF0dHJpYnV0ZSggbmFtZSApOworCQkJCQkJfQorCisJCQkJCX0gZWxzZSB7CisJCQkJCQllbGVt
WyBuYW1lIF0gPSB2YWx1ZTsKKwkJCQkJfQorCQkJCX0KKworCQkJCS8vIGJyb3dzZXJzIGluZGV4
IGVsZW1lbnRzIGJ5IGlkL25hbWUgb24gZm9ybXMsIGdpdmUgcHJpb3JpdHkgdG8gYXR0cmlidXRl
cy4KKwkJCQlpZiAoIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImZvcm0iICkgJiYgZWxlbS5nZXRB
dHRyaWJ1dGVOb2RlKG5hbWUpICkgeworCQkJCQlyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGVOb2Rl
KCBuYW1lICkubm9kZVZhbHVlOworCQkJCX0KKworCQkJCS8vIGVsZW0udGFiSW5kZXggZG9lc24n
dCBhbHdheXMgcmV0dXJuIHRoZSBjb3JyZWN0IHZhbHVlIHdoZW4gaXQgaGFzbid0IGJlZW4gZXhw
bGljaXRseSBzZXQKKwkJCQkvLyBodHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9ibG9nLzIwMDgvMDEv
MDkvZ2V0dGluZy1zZXR0aW5nLWFuZC1yZW1vdmluZy10YWJpbmRleC12YWx1ZXMtd2l0aC1qYXZh
c2NyaXB0LworCQkJCWlmICggbmFtZSA9PT0gInRhYkluZGV4IiApIHsKKwkJCQkJdmFyIGF0dHJp
YnV0ZU5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoICJ0YWJJbmRleCIgKTsKKworCQkJCQly
ZXR1cm4gYXR0cmlidXRlTm9kZSAmJiBhdHRyaWJ1dGVOb2RlLnNwZWNpZmllZCA/CisJCQkJCQlh
dHRyaWJ1dGVOb2RlLnZhbHVlIDoKKwkJCQkJCXJmb2N1c2FibGUudGVzdCggZWxlbS5ub2RlTmFt
ZSApIHx8IHJjbGlja2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApICYmIGVsZW0uaHJlZiA/CisJ
CQkJCQkJMCA6CisJCQkJCQkJdW5kZWZpbmVkOworCQkJCX0KKworCQkJCXJldHVybiBlbGVtWyBu
YW1lIF07CisJCQl9CisKKwkJCWlmICggIWpRdWVyeS5zdXBwb3J0LnN0eWxlICYmIG5vdHhtbCAm
JiBuYW1lID09PSAic3R5bGUiICkgeworCQkJCWlmICggc2V0ICkgeworCQkJCQllbGVtLnN0eWxl
LmNzc1RleHQgPSAiIiArIHZhbHVlOworCQkJCX0KKworCQkJCXJldHVybiBlbGVtLnN0eWxlLmNz
c1RleHQ7CisJCQl9CisKKwkJCWlmICggc2V0ICkgeworCQkJCS8vIGNvbnZlcnQgdGhlIHZhbHVl
IHRvIGEgc3RyaW5nIChhbGwgYnJvd3NlcnMgZG8gdGhpcyBidXQgSUUpIHNlZSAjMTA3MAorCQkJ
CWVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCAiIiArIHZhbHVlICk7CisJCQl9CisKKwkJCS8vIEVu
c3VyZSB0aGF0IG1pc3NpbmcgYXR0cmlidXRlcyByZXR1cm4gdW5kZWZpbmVkCisJCQkvLyBCbGFj
a2JlcnJ5IDQuNyByZXR1cm5zICIiIGZyb20gZ2V0QXR0cmlidXRlICM2OTM4CisJCQlpZiAoICFl
bGVtLmF0dHJpYnV0ZXNbIG5hbWUgXSAmJiAoZWxlbS5oYXNBdHRyaWJ1dGUgJiYgIWVsZW0uaGFz
QXR0cmlidXRlKCBuYW1lICkpICkgeworCQkJCXJldHVybiB1bmRlZmluZWQ7CisJCQl9CisKKwkJ
CXZhciBhdHRyID0gIWpRdWVyeS5zdXBwb3J0LmhyZWZOb3JtYWxpemVkICYmIG5vdHhtbCAmJiBz
cGVjaWFsID8KKwkJCQkJLy8gU29tZSBhdHRyaWJ1dGVzIHJlcXVpcmUgYSBzcGVjaWFsIGNhbGwg
b24gSUUKKwkJCQkJZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUsIDIgKSA6CisJCQkJCWVsZW0uZ2V0
QXR0cmlidXRlKCBuYW1lICk7CisKKwkJCS8vIE5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHJldHVy
biBudWxsLCB3ZSBub3JtYWxpemUgdG8gdW5kZWZpbmVkCisJCQlyZXR1cm4gYXR0ciA9PT0gbnVs
bCA/IHVuZGVmaW5lZCA6IGF0dHI7CisJCX0KKwkJLy8gSGFuZGxlIGV2ZXJ5dGhpbmcgd2hpY2gg
aXNuJ3QgYSBET00gZWxlbWVudCBub2RlCisJCWlmICggc2V0ICkgeworCQkJZWxlbVsgbmFtZSBd
ID0gdmFsdWU7CisJCX0KKwkJcmV0dXJuIGVsZW1bIG5hbWUgXTsKKwl9Cit9KTsKKworfSkoIGpR
dWVyeSApOwoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNl
cy9zcmMvYXR0cmlidXRlcy5qcwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBhbGxvdy10YWJzCiAgICsgeWVz
CgpJbmRleDogTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy9zcmMvY29yZS5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3NyYy9jb3JlLmpzCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy9zcmMvY29yZS5qcwkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw4OTcgQEAKK3ZhciBqUXVlcnkgPSAoZnVuY3Rpb24oKSB7CisKKy8v
IERlZmluZSBhIGxvY2FsIGNvcHkgb2YgalF1ZXJ5Cit2YXIgalF1ZXJ5ID0gZnVuY3Rpb24oIHNl
bGVjdG9yLCBjb250ZXh0ICkgeworCQkvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBq
dXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCcKKwkJcmV0dXJuIG5ldyBqUXVlcnku
Zm4uaW5pdCggc2VsZWN0b3IsIGNvbnRleHQsIHJvb3RqUXVlcnkgKTsKKwl9LAorCisJLy8gTWFw
IG92ZXIgalF1ZXJ5IGluIGNhc2Ugb2Ygb3ZlcndyaXRlCisJX2pRdWVyeSA9IHdpbmRvdy5qUXVl
cnksCisKKwkvLyBNYXAgb3ZlciB0aGUgJCBpbiBjYXNlIG9mIG92ZXJ3cml0ZQorCV8kID0gd2lu
ZG93LiQsCisKKwkvLyBBIGNlbnRyYWwgcmVmZXJlbmNlIHRvIHRoZSByb290IGpRdWVyeShkb2N1
bWVudCkKKwlyb290alF1ZXJ5LAorCisJLy8gQSBzaW1wbGUgd2F5IHRvIGNoZWNrIGZvciBIVE1M
IHN0cmluZ3Mgb3IgSUQgc3RyaW5ncworCS8vIChib3RoIG9mIHdoaWNoIHdlIG9wdGltaXplIGZv
cikKKwlxdWlja0V4cHIgPSAvXig/OltePF0qKDxbXHdcV10rPilbXj5dKiR8IyhbXHdcLV0rKSQp
LywKKworCS8vIENoZWNrIGlmIGEgc3RyaW5nIGhhcyBhIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3Rl
ciBpbiBpdAorCXJub3R3aGl0ZSA9IC9cUy8sCisKKwkvLyBVc2VkIGZvciB0cmltbWluZyB3aGl0
ZXNwYWNlCisJdHJpbUxlZnQgPSAvXlxzKy8sCisJdHJpbVJpZ2h0ID0gL1xzKyQvLAorCisJLy8g
Q2hlY2sgZm9yIGRpZ2l0cworCXJkaWdpdCA9IC9cZC8sCisKKwkvLyBNYXRjaCBhIHN0YW5kYWxv
bmUgdGFnCisJcnNpbmdsZVRhZyA9IC9ePChcdyspXHMqXC8/Pig/OjxcL1wxPik/JC8sCisKKwkv
LyBKU09OIFJlZ0V4cAorCXJ2YWxpZGNoYXJzID0gL15bXF0sOnt9XHNdKiQvLAorCXJ2YWxpZGVz
Y2FwZSA9IC9cXCg/OlsiXFxcL2JmbnJ0XXx1WzAtOWEtZkEtRl17NH0pL2csCisJcnZhbGlkdG9r
ZW5zID0gLyJbXiJcXFxuXHJdKiJ8dHJ1ZXxmYWxzZXxudWxsfC0/XGQrKD86XC5cZCopPyg/Oltl
RV1bK1wtXT9cZCspPy9nLAorCXJ2YWxpZGJyYWNlcyA9IC8oPzpefDp8LCkoPzpccypcWykrL2cs
CisKKwkvLyBVc2VyYWdlbnQgUmVnRXhwCisJcndlYmtpdCA9IC8od2Via2l0KVsgXC9dKFtcdy5d
KykvLAorCXJvcGVyYSA9IC8ob3BlcmEpKD86Lip2ZXJzaW9uKT9bIFwvXShbXHcuXSspLywKKwly
bXNpZSA9IC8obXNpZSkgKFtcdy5dKykvLAorCXJtb3ppbGxhID0gLyhtb3ppbGxhKSg/Oi4qPyBy
djooW1x3Ll0rKSk/LywKKworCS8vIEtlZXAgYSBVc2VyQWdlbnQgc3RyaW5nIGZvciB1c2Ugd2l0
aCBqUXVlcnkuYnJvd3NlcgorCXVzZXJBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQsCisKKwkv
LyBGb3IgbWF0Y2hpbmcgdGhlIGVuZ2luZSBhbmQgdmVyc2lvbiBvZiB0aGUgYnJvd3NlcgorCWJy
b3dzZXJNYXRjaCwKKworCS8vIFRoZSBkZWZlcnJlZCB1c2VkIG9uIERPTSByZWFkeQorCXJlYWR5
TGlzdCwKKworCS8vIFRoZSByZWFkeSBldmVudCBoYW5kbGVyCisJRE9NQ29udGVudExvYWRlZCwK
KworCS8vIFNhdmUgYSByZWZlcmVuY2UgdG8gc29tZSBjb3JlIG1ldGhvZHMKKwl0b1N0cmluZyA9
IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsCisJaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5o
YXNPd25Qcm9wZXJ0eSwKKwlwdXNoID0gQXJyYXkucHJvdG90eXBlLnB1c2gsCisJc2xpY2UgPSBB
cnJheS5wcm90b3R5cGUuc2xpY2UsCisJdHJpbSA9IFN0cmluZy5wcm90b3R5cGUudHJpbSwKKwlp
bmRleE9mID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2YsCisKKwkvLyBbW0NsYXNzXV0gLT4gdHlw
ZSBwYWlycworCWNsYXNzMnR5cGUgPSB7fTsKKworalF1ZXJ5LmZuID0galF1ZXJ5LnByb3RvdHlw
ZSA9IHsKKwljb25zdHJ1Y3RvcjogalF1ZXJ5LAorCWluaXQ6IGZ1bmN0aW9uKCBzZWxlY3Rvciwg
Y29udGV4dCwgcm9vdGpRdWVyeSApIHsKKwkJdmFyIG1hdGNoLCBlbGVtLCByZXQsIGRvYzsKKwor
CQkvLyBIYW5kbGUgJCgiIiksICQobnVsbCksIG9yICQodW5kZWZpbmVkKQorCQlpZiAoICFzZWxl
Y3RvciApIHsKKwkJCXJldHVybiB0aGlzOworCQl9CisKKwkJLy8gSGFuZGxlICQoRE9NRWxlbWVu
dCkKKwkJaWYgKCBzZWxlY3Rvci5ub2RlVHlwZSApIHsKKwkJCXRoaXMuY29udGV4dCA9IHRoaXNb
MF0gPSBzZWxlY3RvcjsKKwkJCXRoaXMubGVuZ3RoID0gMTsKKwkJCXJldHVybiB0aGlzOworCQl9
CisKKwkJLy8gVGhlIGJvZHkgZWxlbWVudCBvbmx5IGV4aXN0cyBvbmNlLCBvcHRpbWl6ZSBmaW5k
aW5nIGl0CisJCWlmICggc2VsZWN0b3IgPT09ICJib2R5IiAmJiAhY29udGV4dCAmJiBkb2N1bWVu
dC5ib2R5ICkgeworCQkJdGhpcy5jb250ZXh0ID0gZG9jdW1lbnQ7CisJCQl0aGlzWzBdID0gZG9j
dW1lbnQuYm9keTsKKwkJCXRoaXMuc2VsZWN0b3IgPSAiYm9keSI7CisJCQl0aGlzLmxlbmd0aCA9
IDE7CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCisJCS8vIEhhbmRsZSBIVE1MIHN0cmluZ3MKKwkJ
aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciICkgeworCQkJLy8gQXJlIHdlIGRlYWxp
bmcgd2l0aCBIVE1MIHN0cmluZyBvciBhbiBJRD8KKwkJCW1hdGNoID0gcXVpY2tFeHByLmV4ZWMo
IHNlbGVjdG9yICk7CisKKwkJCS8vIFZlcmlmeSBhIG1hdGNoLCBhbmQgdGhhdCBubyBjb250ZXh0
IHdhcyBzcGVjaWZpZWQgZm9yICNpZAorCQkJaWYgKCBtYXRjaCAmJiAobWF0Y2hbMV0gfHwgIWNv
bnRleHQpICkgeworCisJCQkJLy8gSEFORExFOiAkKGh0bWwpIC0+ICQoYXJyYXkpCisJCQkJaWYg
KCBtYXRjaFsxXSApIHsKKwkJCQkJY29udGV4dCA9IGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnkg
PyBjb250ZXh0WzBdIDogY29udGV4dDsKKwkJCQkJZG9jID0gKGNvbnRleHQgPyBjb250ZXh0Lm93
bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IGRvY3VtZW50KTsKKworCQkJCQkvLyBJZiBhIHNpbmds
ZSBzdHJpbmcgaXMgcGFzc2VkIGluIGFuZCBpdCdzIGEgc2luZ2xlIHRhZworCQkJCQkvLyBqdXN0
IGRvIGEgY3JlYXRlRWxlbWVudCBhbmQgc2tpcCB0aGUgcmVzdAorCQkJCQlyZXQgPSByc2luZ2xl
VGFnLmV4ZWMoIHNlbGVjdG9yICk7CisKKwkJCQkJaWYgKCByZXQgKSB7CisJCQkJCQlpZiAoIGpR
dWVyeS5pc1BsYWluT2JqZWN0KCBjb250ZXh0ICkgKSB7CisJCQkJCQkJc2VsZWN0b3IgPSBbIGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoIHJldFsxXSApIF07CisJCQkJCQkJalF1ZXJ5LmZuLmF0dHIu
Y2FsbCggc2VsZWN0b3IsIGNvbnRleHQsIHRydWUgKTsKKworCQkJCQkJfSBlbHNlIHsKKwkJCQkJ
CQlzZWxlY3RvciA9IFsgZG9jLmNyZWF0ZUVsZW1lbnQoIHJldFsxXSApIF07CisJCQkJCQl9CisK
KwkJCQkJfSBlbHNlIHsKKwkJCQkJCXJldCA9IGpRdWVyeS5idWlsZEZyYWdtZW50KCBbIG1hdGNo
WzFdIF0sIFsgZG9jIF0gKTsKKwkJCQkJCXNlbGVjdG9yID0gKHJldC5jYWNoZWFibGUgPyBqUXVl
cnkuY2xvbmUocmV0LmZyYWdtZW50KSA6IHJldC5mcmFnbWVudCkuY2hpbGROb2RlczsKKwkJCQkJ
fQorCisJCQkJCXJldHVybiBqUXVlcnkubWVyZ2UoIHRoaXMsIHNlbGVjdG9yICk7CisKKwkJCQkv
LyBIQU5ETEU6ICQoIiNpZCIpCisJCQkJfSBlbHNlIHsKKwkJCQkJZWxlbSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCBtYXRjaFsyXSApOworCisJCQkJCS8vIENoZWNrIHBhcmVudE5vZGUgdG8g
Y2F0Y2ggd2hlbiBCbGFja2JlcnJ5IDQuNiByZXR1cm5zCisJCQkJCS8vIG5vZGVzIHRoYXQgYXJl
IG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQgIzY5NjMKKwkJCQkJaWYgKCBlbGVtICYmIGVsZW0u
cGFyZW50Tm9kZSApIHsKKwkJCQkJCS8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBJRSBhbmQgT3Bl
cmEgcmV0dXJuIGl0ZW1zCisJCQkJCQkvLyBieSBuYW1lIGluc3RlYWQgb2YgSUQKKwkJCQkJCWlm
ICggZWxlbS5pZCAhPT0gbWF0Y2hbMl0gKSB7CisJCQkJCQkJcmV0dXJuIHJvb3RqUXVlcnkuZmlu
ZCggc2VsZWN0b3IgKTsKKwkJCQkJCX0KKworCQkJCQkJLy8gT3RoZXJ3aXNlLCB3ZSBpbmplY3Qg
dGhlIGVsZW1lbnQgZGlyZWN0bHkgaW50byB0aGUgalF1ZXJ5IG9iamVjdAorCQkJCQkJdGhpcy5s
ZW5ndGggPSAxOworCQkJCQkJdGhpc1swXSA9IGVsZW07CisJCQkJCX0KKworCQkJCQl0aGlzLmNv
bnRleHQgPSBkb2N1bWVudDsKKwkJCQkJdGhpcy5zZWxlY3RvciA9IHNlbGVjdG9yOworCQkJCQly
ZXR1cm4gdGhpczsKKwkJCQl9CisKKwkJCS8vIEhBTkRMRTogJChleHByLCAkKC4uLikpCisJCQl9
IGVsc2UgaWYgKCAhY29udGV4dCB8fCBjb250ZXh0LmpxdWVyeSApIHsKKwkJCQlyZXR1cm4gKGNv
bnRleHQgfHwgcm9vdGpRdWVyeSkuZmluZCggc2VsZWN0b3IgKTsKKworCQkJLy8gSEFORExFOiAk
KGV4cHIsIGNvbnRleHQpCisJCQkvLyAod2hpY2ggaXMganVzdCBlcXVpdmFsZW50IHRvOiAkKGNv
bnRleHQpLmZpbmQoZXhwcikKKwkJCX0gZWxzZSB7CisJCQkJcmV0dXJuIHRoaXMuY29uc3RydWN0
b3IoIGNvbnRleHQgKS5maW5kKCBzZWxlY3RvciApOworCQkJfQorCisJCS8vIEhBTkRMRTogJChm
dW5jdGlvbikKKwkJLy8gU2hvcnRjdXQgZm9yIGRvY3VtZW50IHJlYWR5CisJCX0gZWxzZSBpZiAo
IGpRdWVyeS5pc0Z1bmN0aW9uKCBzZWxlY3RvciApICkgeworCQkJcmV0dXJuIHJvb3RqUXVlcnku
cmVhZHkoIHNlbGVjdG9yICk7CisJCX0KKworCQlpZiAoc2VsZWN0b3Iuc2VsZWN0b3IgIT09IHVu
ZGVmaW5lZCkgeworCQkJdGhpcy5zZWxlY3RvciA9IHNlbGVjdG9yLnNlbGVjdG9yOworCQkJdGhp
cy5jb250ZXh0ID0gc2VsZWN0b3IuY29udGV4dDsKKwkJfQorCisJCXJldHVybiBqUXVlcnkubWFr
ZUFycmF5KCBzZWxlY3RvciwgdGhpcyApOworCX0sCisKKwkvLyBTdGFydCB3aXRoIGFuIGVtcHR5
IHNlbGVjdG9yCisJc2VsZWN0b3I6ICIiLAorCisJLy8gVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBq
UXVlcnkgYmVpbmcgdXNlZAorCWpxdWVyeTogIkBWRVJTSU9OIiwKKworCS8vIFRoZSBkZWZhdWx0
IGxlbmd0aCBvZiBhIGpRdWVyeSBvYmplY3QgaXMgMAorCWxlbmd0aDogMCwKKworCS8vIFRoZSBu
dW1iZXIgb2YgZWxlbWVudHMgY29udGFpbmVkIGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0CisJ
c2l6ZTogZnVuY3Rpb24oKSB7CisJCXJldHVybiB0aGlzLmxlbmd0aDsKKwl9LAorCisJdG9BcnJh
eTogZnVuY3Rpb24oKSB7CisJCXJldHVybiBzbGljZS5jYWxsKCB0aGlzLCAwICk7CisJfSwKKwor
CS8vIEdldCB0aGUgTnRoIGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQgT1IKKwkv
LyBHZXQgdGhlIHdob2xlIG1hdGNoZWQgZWxlbWVudCBzZXQgYXMgYSBjbGVhbiBhcnJheQorCWdl
dDogZnVuY3Rpb24oIG51bSApIHsKKwkJcmV0dXJuIG51bSA9PSBudWxsID8KKworCQkJLy8gUmV0
dXJuIGEgJ2NsZWFuJyBhcnJheQorCQkJdGhpcy50b0FycmF5KCkgOgorCisJCQkvLyBSZXR1cm4g
anVzdCB0aGUgb2JqZWN0CisJCQkoIG51bSA8IDAgPyB0aGlzWyB0aGlzLmxlbmd0aCArIG51bSBd
IDogdGhpc1sgbnVtIF0gKTsKKwl9LAorCisJLy8gVGFrZSBhbiBhcnJheSBvZiBlbGVtZW50cyBh
bmQgcHVzaCBpdCBvbnRvIHRoZSBzdGFjaworCS8vIChyZXR1cm5pbmcgdGhlIG5ldyBtYXRjaGVk
IGVsZW1lbnQgc2V0KQorCXB1c2hTdGFjazogZnVuY3Rpb24oIGVsZW1zLCBuYW1lLCBzZWxlY3Rv
ciApIHsKKwkJLy8gQnVpbGQgYSBuZXcgalF1ZXJ5IG1hdGNoZWQgZWxlbWVudCBzZXQKKwkJdmFy
IHJldCA9IHRoaXMuY29uc3RydWN0b3IoKTsKKworCQlpZiAoIGpRdWVyeS5pc0FycmF5KCBlbGVt
cyApICkgeworCQkJcHVzaC5hcHBseSggcmV0LCBlbGVtcyApOworCisJCX0gZWxzZSB7CisJCQlq
UXVlcnkubWVyZ2UoIHJldCwgZWxlbXMgKTsKKwkJfQorCisJCS8vIEFkZCB0aGUgb2xkIG9iamVj
dCBvbnRvIHRoZSBzdGFjayAoYXMgYSByZWZlcmVuY2UpCisJCXJldC5wcmV2T2JqZWN0ID0gdGhp
czsKKworCQlyZXQuY29udGV4dCA9IHRoaXMuY29udGV4dDsKKworCQlpZiAoIG5hbWUgPT09ICJm
aW5kIiApIHsKKwkJCXJldC5zZWxlY3RvciA9IHRoaXMuc2VsZWN0b3IgKyAodGhpcy5zZWxlY3Rv
ciA/ICIgIiA6ICIiKSArIHNlbGVjdG9yOworCQl9IGVsc2UgaWYgKCBuYW1lICkgeworCQkJcmV0
LnNlbGVjdG9yID0gdGhpcy5zZWxlY3RvciArICIuIiArIG5hbWUgKyAiKCIgKyBzZWxlY3RvciAr
ICIpIjsKKwkJfQorCisJCS8vIFJldHVybiB0aGUgbmV3bHktZm9ybWVkIGVsZW1lbnQgc2V0CisJ
CXJldHVybiByZXQ7CisJfSwKKworCS8vIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZXZlcnkgZWxl
bWVudCBpbiB0aGUgbWF0Y2hlZCBzZXQuCisJLy8gKFlvdSBjYW4gc2VlZCB0aGUgYXJndW1lbnRz
IHdpdGggYW4gYXJyYXkgb2YgYXJncywgYnV0IHRoaXMgaXMKKwkvLyBvbmx5IHVzZWQgaW50ZXJu
YWxseS4pCisJZWFjaDogZnVuY3Rpb24oIGNhbGxiYWNrLCBhcmdzICkgeworCQlyZXR1cm4galF1
ZXJ5LmVhY2goIHRoaXMsIGNhbGxiYWNrLCBhcmdzICk7CisJfSwKKworCXJlYWR5OiBmdW5jdGlv
biggZm4gKSB7CisJCS8vIEF0dGFjaCB0aGUgbGlzdGVuZXJzCisJCWpRdWVyeS5iaW5kUmVhZHko
KTsKKworCQkvLyBBZGQgdGhlIGNhbGxiYWNrCisJCXJlYWR5TGlzdC5kb25lKCBmbiApOworCisJ
CXJldHVybiB0aGlzOworCX0sCisKKwllcTogZnVuY3Rpb24oIGkgKSB7CisJCXJldHVybiBpID09
PSAtMSA/CisJCQl0aGlzLnNsaWNlKCBpICkgOgorCQkJdGhpcy5zbGljZSggaSwgK2kgKyAxICk7
CisJfSwKKworCWZpcnN0OiBmdW5jdGlvbigpIHsKKwkJcmV0dXJuIHRoaXMuZXEoIDAgKTsKKwl9
LAorCisJbGFzdDogZnVuY3Rpb24oKSB7CisJCXJldHVybiB0aGlzLmVxKCAtMSApOworCX0sCisK
KwlzbGljZTogZnVuY3Rpb24oKSB7CisJCXJldHVybiB0aGlzLnB1c2hTdGFjayggc2xpY2UuYXBw
bHkoIHRoaXMsIGFyZ3VtZW50cyApLAorCQkJInNsaWNlIiwgc2xpY2UuY2FsbChhcmd1bWVudHMp
LmpvaW4oIiwiKSApOworCX0sCisKKwltYXA6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHsKKwkJcmV0
dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWFwKHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBpICkg
eworCQkJcmV0dXJuIGNhbGxiYWNrLmNhbGwoIGVsZW0sIGksIGVsZW0gKTsKKwkJfSkpOworCX0s
CisKKwllbmQ6IGZ1bmN0aW9uKCkgeworCQlyZXR1cm4gdGhpcy5wcmV2T2JqZWN0IHx8IHRoaXMu
Y29uc3RydWN0b3IobnVsbCk7CisJfSwKKworCS8vIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KKwkv
LyBCZWhhdmVzIGxpa2UgYW4gQXJyYXkncyBtZXRob2QsIG5vdCBsaWtlIGEgalF1ZXJ5IG1ldGhv
ZC4KKwlwdXNoOiBwdXNoLAorCXNvcnQ6IFtdLnNvcnQsCisJc3BsaWNlOiBbXS5zcGxpY2UKK307
CisKKy8vIEdpdmUgdGhlIGluaXQgZnVuY3Rpb24gdGhlIGpRdWVyeSBwcm90b3R5cGUgZm9yIGxh
dGVyIGluc3RhbnRpYXRpb24KK2pRdWVyeS5mbi5pbml0LnByb3RvdHlwZSA9IGpRdWVyeS5mbjsK
KworalF1ZXJ5LmV4dGVuZCA9IGpRdWVyeS5mbi5leHRlbmQgPSBmdW5jdGlvbigpIHsKKwl2YXIg
b3B0aW9ucywgbmFtZSwgc3JjLCBjb3B5LCBjb3B5SXNBcnJheSwgY2xvbmUsCisJCXRhcmdldCA9
IGFyZ3VtZW50c1swXSB8fCB7fSwKKwkJaSA9IDEsCisJCWxlbmd0aCA9IGFyZ3VtZW50cy5sZW5n
dGgsCisJCWRlZXAgPSBmYWxzZTsKKworCS8vIEhhbmRsZSBhIGRlZXAgY29weSBzaXR1YXRpb24K
KwlpZiAoIHR5cGVvZiB0YXJnZXQgPT09ICJib29sZWFuIiApIHsKKwkJZGVlcCA9IHRhcmdldDsK
KwkJdGFyZ2V0ID0gYXJndW1lbnRzWzFdIHx8IHt9OworCQkvLyBza2lwIHRoZSBib29sZWFuIGFu
ZCB0aGUgdGFyZ2V0CisJCWkgPSAyOworCX0KKworCS8vIEhhbmRsZSBjYXNlIHdoZW4gdGFyZ2V0
IGlzIGEgc3RyaW5nIG9yIHNvbWV0aGluZyAocG9zc2libGUgaW4gZGVlcCBjb3B5KQorCWlmICgg
dHlwZW9mIHRhcmdldCAhPT0gIm9iamVjdCIgJiYgIWpRdWVyeS5pc0Z1bmN0aW9uKHRhcmdldCkg
KSB7CisJCXRhcmdldCA9IHt9OworCX0KKworCS8vIGV4dGVuZCBqUXVlcnkgaXRzZWxmIGlmIG9u
bHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZAorCWlmICggbGVuZ3RoID09PSBpICkgeworCQl0YXJn
ZXQgPSB0aGlzOworCQktLWk7CisJfQorCisJZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7CisJ
CS8vIE9ubHkgZGVhbCB3aXRoIG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZXMKKwkJaWYgKCAob3B0
aW9ucyA9IGFyZ3VtZW50c1sgaSBdKSAhPSBudWxsICkgeworCQkJLy8gRXh0ZW5kIHRoZSBiYXNl
IG9iamVjdAorCQkJZm9yICggbmFtZSBpbiBvcHRpb25zICkgeworCQkJCXNyYyA9IHRhcmdldFsg
bmFtZSBdOworCQkJCWNvcHkgPSBvcHRpb25zWyBuYW1lIF07CisKKwkJCQkvLyBQcmV2ZW50IG5l
dmVyLWVuZGluZyBsb29wCisJCQkJaWYgKCB0YXJnZXQgPT09IGNvcHkgKSB7CisJCQkJCWNvbnRp
bnVlOworCQkJCX0KKworCQkJCS8vIFJlY3Vyc2UgaWYgd2UncmUgbWVyZ2luZyBwbGFpbiBvYmpl
Y3RzIG9yIGFycmF5cworCQkJCWlmICggZGVlcCAmJiBjb3B5ICYmICggalF1ZXJ5LmlzUGxhaW5P
YmplY3QoY29weSkgfHwgKGNvcHlJc0FycmF5ID0galF1ZXJ5LmlzQXJyYXkoY29weSkpICkgKSB7
CisJCQkJCWlmICggY29weUlzQXJyYXkgKSB7CisJCQkJCQljb3B5SXNBcnJheSA9IGZhbHNlOwor
CQkJCQkJY2xvbmUgPSBzcmMgJiYgalF1ZXJ5LmlzQXJyYXkoc3JjKSA/IHNyYyA6IFtdOworCisJ
CQkJCX0gZWxzZSB7CisJCQkJCQljbG9uZSA9IHNyYyAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdChz
cmMpID8gc3JjIDoge307CisJCQkJCX0KKworCQkJCQkvLyBOZXZlciBtb3ZlIG9yaWdpbmFsIG9i
amVjdHMsIGNsb25lIHRoZW0KKwkJCQkJdGFyZ2V0WyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBk
ZWVwLCBjbG9uZSwgY29weSApOworCisJCQkJLy8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZh
bHVlcworCQkJCX0gZWxzZSBpZiAoIGNvcHkgIT09IHVuZGVmaW5lZCApIHsKKwkJCQkJdGFyZ2V0
WyBuYW1lIF0gPSBjb3B5OworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8vIFJldHVybiB0aGUg
bW9kaWZpZWQgb2JqZWN0CisJcmV0dXJuIHRhcmdldDsKK307CisKK2pRdWVyeS5leHRlbmQoewor
CW5vQ29uZmxpY3Q6IGZ1bmN0aW9uKCBkZWVwICkgeworCQl3aW5kb3cuJCA9IF8kOworCisJCWlm
ICggZGVlcCApIHsKKwkJCXdpbmRvdy5qUXVlcnkgPSBfalF1ZXJ5OworCQl9CisKKwkJcmV0dXJu
IGpRdWVyeTsKKwl9LAorCisJLy8gSXMgdGhlIERPTSByZWFkeSB0byBiZSB1c2VkPyBTZXQgdG8g
dHJ1ZSBvbmNlIGl0IG9jY3Vycy4KKwlpc1JlYWR5OiBmYWxzZSwKKworCS8vIEEgY291bnRlciB0
byB0cmFjayBob3cgbWFueSBpdGVtcyB0byB3YWl0IGZvciBiZWZvcmUKKwkvLyB0aGUgcmVhZHkg
ZXZlbnQgZmlyZXMuIFNlZSAjNjc4MQorCXJlYWR5V2FpdDogMSwKKworCS8vIEhhbmRsZSB3aGVu
IHRoZSBET00gaXMgcmVhZHkKKwlyZWFkeTogZnVuY3Rpb24oIHdhaXQgKSB7CisJCS8vIEEgdGhp
cmQtcGFydHkgaXMgcHVzaGluZyB0aGUgcmVhZHkgZXZlbnQgZm9yd2FyZHMKKwkJaWYgKCB3YWl0
ID09PSB0cnVlICkgeworCQkJalF1ZXJ5LnJlYWR5V2FpdC0tOworCQl9CisKKwkJLy8gTWFrZSBz
dXJlIHRoYXQgdGhlIERPTSBpcyBub3QgYWxyZWFkeSBsb2FkZWQKKwkJaWYgKCAhalF1ZXJ5LnJl
YWR5V2FpdCB8fCAod2FpdCAhPT0gdHJ1ZSAmJiAhalF1ZXJ5LmlzUmVhZHkpICkgeworCQkJLy8g
TWFrZSBzdXJlIGJvZHkgZXhpc3RzLCBhdCBsZWFzdCwgaW4gY2FzZSBJRSBnZXRzIGEgbGl0dGxl
IG92ZXJ6ZWFsb3VzICh0aWNrZXQgIzU0NDMpLgorCQkJaWYgKCAhZG9jdW1lbnQuYm9keSApIHsK
KwkJCQlyZXR1cm4gc2V0VGltZW91dCggalF1ZXJ5LnJlYWR5LCAxICk7CisJCQl9CisKKwkJCS8v
IFJlbWVtYmVyIHRoYXQgdGhlIERPTSBpcyByZWFkeQorCQkJalF1ZXJ5LmlzUmVhZHkgPSB0cnVl
OworCisJCQkvLyBJZiBhIG5vcm1hbCBET00gUmVhZHkgZXZlbnQgZmlyZWQsIGRlY3JlbWVudCwg
YW5kIHdhaXQgaWYgbmVlZCBiZQorCQkJaWYgKCB3YWl0ICE9PSB0cnVlICYmIC0talF1ZXJ5LnJl
YWR5V2FpdCA+IDAgKSB7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQkvLyBJZiB0aGVyZSBhcmUg
ZnVuY3Rpb25zIGJvdW5kLCB0byBleGVjdXRlCisJCQlyZWFkeUxpc3QucmVzb2x2ZVdpdGgoIGRv
Y3VtZW50LCBbIGpRdWVyeSBdICk7CisKKwkJCS8vIFRyaWdnZXIgYW55IGJvdW5kIHJlYWR5IGV2
ZW50cworCQkJaWYgKCBqUXVlcnkuZm4udHJpZ2dlciApIHsKKwkJCQlqUXVlcnkoIGRvY3VtZW50
ICkudHJpZ2dlciggInJlYWR5IiApLnVuYmluZCggInJlYWR5IiApOworCQkJfQorCQl9CisJfSwK
KworCWJpbmRSZWFkeTogZnVuY3Rpb24oKSB7CisJCWlmICggcmVhZHlMaXN0ICkgeworCQkJcmV0
dXJuOworCQl9CisKKwkJcmVhZHlMaXN0ID0galF1ZXJ5Ll9EZWZlcnJlZCgpOworCisJCS8vIENh
dGNoIGNhc2VzIHdoZXJlICQoZG9jdW1lbnQpLnJlYWR5KCkgaXMgY2FsbGVkIGFmdGVyIHRoZQor
CQkvLyBicm93c2VyIGV2ZW50IGhhcyBhbHJlYWR5IG9jY3VycmVkLgorCQlpZiAoIGRvY3VtZW50
LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIgKSB7CisJCQkvLyBIYW5kbGUgaXQgYXN5bmNocm9u
b3VzbHkgdG8gYWxsb3cgc2NyaXB0cyB0aGUgb3Bwb3J0dW5pdHkgdG8gZGVsYXkgcmVhZHkKKwkJ
CXJldHVybiBzZXRUaW1lb3V0KCBqUXVlcnkucmVhZHksIDEgKTsKKwkJfQorCisJCS8vIE1vemls
bGEsIE9wZXJhIGFuZCB3ZWJraXQgbmlnaHRsaWVzIGN1cnJlbnRseSBzdXBwb3J0IHRoaXMgZXZl
bnQKKwkJaWYgKCBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyICkgeworCQkJLy8gVXNlIHRoZSBo
YW5keSBldmVudCBjYWxsYmFjaworCQkJZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggIkRPTUNv
bnRlbnRMb2FkZWQiLCBET01Db250ZW50TG9hZGVkLCBmYWxzZSApOworCisJCQkvLyBBIGZhbGxi
YWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2lsbCBhbHdheXMgd29yaworCQkJd2luZG93LmFk
ZEV2ZW50TGlzdGVuZXIoICJsb2FkIiwgalF1ZXJ5LnJlYWR5LCBmYWxzZSApOworCisJCS8vIElm
IElFIGV2ZW50IG1vZGVsIGlzIHVzZWQKKwkJfSBlbHNlIGlmICggZG9jdW1lbnQuYXR0YWNoRXZl
bnQgKSB7CisJCQkvLyBlbnN1cmUgZmlyaW5nIGJlZm9yZSBvbmxvYWQsCisJCQkvLyBtYXliZSBs
YXRlIGJ1dCBzYWZlIGFsc28gZm9yIGlmcmFtZXMKKwkJCWRvY3VtZW50LmF0dGFjaEV2ZW50KCJv
bnJlYWR5c3RhdGVjaGFuZ2UiLCBET01Db250ZW50TG9hZGVkKTsKKworCQkJLy8gQSBmYWxsYmFj
ayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmsKKwkJCXdpbmRvdy5hdHRh
Y2hFdmVudCggIm9ubG9hZCIsIGpRdWVyeS5yZWFkeSApOworCisJCQkvLyBJZiBJRSBhbmQgbm90
IGEgZnJhbWUKKwkJCS8vIGNvbnRpbnVhbGx5IGNoZWNrIHRvIHNlZSBpZiB0aGUgZG9jdW1lbnQg
aXMgcmVhZHkKKwkJCXZhciB0b3BsZXZlbCA9IGZhbHNlOworCisJCQl0cnkgeworCQkJCXRvcGxl
dmVsID0gd2luZG93LmZyYW1lRWxlbWVudCA9PSBudWxsOworCQkJfSBjYXRjaChlKSB7fQorCisJ
CQlpZiAoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCAmJiB0b3BsZXZlbCApIHsK
KwkJCQlkb1Njcm9sbENoZWNrKCk7CisJCQl9CisJCX0KKwl9LAorCisJLy8gU2VlIHRlc3QvdW5p
dC9jb3JlLmpzIGZvciBkZXRhaWxzIGNvbmNlcm5pbmcgaXNGdW5jdGlvbi4KKwkvLyBTaW5jZSB2
ZXJzaW9uIDEuMywgRE9NIG1ldGhvZHMgYW5kIGZ1bmN0aW9ucyBsaWtlIGFsZXJ0CisJLy8gYXJl
bid0IHN1cHBvcnRlZC4gVGhleSByZXR1cm4gZmFsc2Ugb24gSUUgKCMyOTY4KS4KKwlpc0Z1bmN0
aW9uOiBmdW5jdGlvbiggb2JqICkgeworCQlyZXR1cm4galF1ZXJ5LnR5cGUob2JqKSA9PT0gImZ1
bmN0aW9uIjsKKwl9LAorCisJaXNBcnJheTogQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiggb2Jq
ICkgeworCQlyZXR1cm4galF1ZXJ5LnR5cGUob2JqKSA9PT0gImFycmF5IjsKKwl9LAorCisJLy8g
QSBjcnVkZSB3YXkgb2YgZGV0ZXJtaW5pbmcgaWYgYW4gb2JqZWN0IGlzIGEgd2luZG93CisJaXNX
aW5kb3c6IGZ1bmN0aW9uKCBvYmogKSB7CisJCXJldHVybiBvYmogJiYgdHlwZW9mIG9iaiA9PT0g
Im9iamVjdCIgJiYgInNldEludGVydmFsIiBpbiBvYmo7CisJfSwKKworCWlzTmFOOiBmdW5jdGlv
biggb2JqICkgeworCQlyZXR1cm4gb2JqID09IG51bGwgfHwgIXJkaWdpdC50ZXN0KCBvYmogKSB8
fCBpc05hTiggb2JqICk7CisJfSwKKworCXR5cGU6IGZ1bmN0aW9uKCBvYmogKSB7CisJCXJldHVy
biBvYmogPT0gbnVsbCA/CisJCQlTdHJpbmcoIG9iaiApIDoKKwkJCWNsYXNzMnR5cGVbIHRvU3Ry
aW5nLmNhbGwob2JqKSBdIHx8ICJvYmplY3QiOworCX0sCisKKwlpc1BsYWluT2JqZWN0OiBmdW5j
dGlvbiggb2JqICkgeworCQkvLyBNdXN0IGJlIGFuIE9iamVjdC4KKwkJLy8gQmVjYXVzZSBvZiBJ
RSwgd2UgYWxzbyBoYXZlIHRvIGNoZWNrIHRoZSBwcmVzZW5jZSBvZiB0aGUgY29uc3RydWN0b3Ig
cHJvcGVydHkuCisJCS8vIE1ha2Ugc3VyZSB0aGF0IERPTSBub2RlcyBhbmQgd2luZG93IG9iamVj
dHMgZG9uJ3QgcGFzcyB0aHJvdWdoLCBhcyB3ZWxsCisJCWlmICggIW9iaiB8fCBqUXVlcnkudHlw
ZShvYmopICE9PSAib2JqZWN0IiB8fCBvYmoubm9kZVR5cGUgfHwgalF1ZXJ5LmlzV2luZG93KCBv
YmogKSApIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCS8vIE5vdCBvd24gY29uc3RydWN0
b3IgcHJvcGVydHkgbXVzdCBiZSBPYmplY3QKKwkJaWYgKCBvYmouY29uc3RydWN0b3IgJiYKKwkJ
CSFoYXNPd24uY2FsbChvYmosICJjb25zdHJ1Y3RvciIpICYmCisJCQkhaGFzT3duLmNhbGwob2Jq
LmNvbnN0cnVjdG9yLnByb3RvdHlwZSwgImlzUHJvdG90eXBlT2YiKSApIHsKKwkJCXJldHVybiBm
YWxzZTsKKwkJfQorCisJCS8vIE93biBwcm9wZXJ0aWVzIGFyZSBlbnVtZXJhdGVkIGZpcnN0bHks
IHNvIHRvIHNwZWVkIHVwLAorCQkvLyBpZiBsYXN0IG9uZSBpcyBvd24sIHRoZW4gYWxsIHByb3Bl
cnRpZXMgYXJlIG93bi4KKworCQl2YXIga2V5OworCQlmb3IgKCBrZXkgaW4gb2JqICkge30KKwor
CQlyZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgfHwgaGFzT3duLmNhbGwoIG9iaiwga2V5ICk7CisJ
fSwKKworCWlzRW1wdHlPYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7CisJCWZvciAoIHZhciBuYW1l
IGluIG9iaiApIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQlyZXR1cm4gdHJ1ZTsKKwl9LAor
CisJZXJyb3I6IGZ1bmN0aW9uKCBtc2cgKSB7CisJCXRocm93IG1zZzsKKwl9LAorCisJcGFyc2VK
U09OOiBmdW5jdGlvbiggZGF0YSApIHsKKwkJaWYgKCB0eXBlb2YgZGF0YSAhPT0gInN0cmluZyIg
fHwgIWRhdGEgKSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCS8vIE1ha2Ugc3VyZSBsZWFk
aW5nL3RyYWlsaW5nIHdoaXRlc3BhY2UgaXMgcmVtb3ZlZCAoSUUgY2FuJ3QgaGFuZGxlIGl0KQor
CQlkYXRhID0galF1ZXJ5LnRyaW0oIGRhdGEgKTsKKworCQkvLyBNYWtlIHN1cmUgdGhlIGluY29t
aW5nIGRhdGEgaXMgYWN0dWFsIEpTT04KKwkJLy8gTG9naWMgYm9ycm93ZWQgZnJvbSBodHRwOi8v
anNvbi5vcmcvanNvbjIuanMKKwkJaWYgKCBydmFsaWRjaGFycy50ZXN0KGRhdGEucmVwbGFjZShy
dmFsaWRlc2NhcGUsICJAIikKKwkJCS5yZXBsYWNlKHJ2YWxpZHRva2VucywgIl0iKQorCQkJLnJl
cGxhY2UocnZhbGlkYnJhY2VzLCAiIikpICkgeworCisJCQkvLyBUcnkgdG8gdXNlIHRoZSBuYXRp
dmUgSlNPTiBwYXJzZXIgZmlyc3QKKwkJCXJldHVybiB3aW5kb3cuSlNPTiAmJiB3aW5kb3cuSlNP
Ti5wYXJzZSA/CisJCQkJd2luZG93LkpTT04ucGFyc2UoIGRhdGEgKSA6CisJCQkJKG5ldyBGdW5j
dGlvbigicmV0dXJuICIgKyBkYXRhKSkoKTsKKworCQl9IGVsc2UgeworCQkJalF1ZXJ5LmVycm9y
KCAiSW52YWxpZCBKU09OOiAiICsgZGF0YSApOworCQl9CisJfSwKKworCS8vIENyb3NzLWJyb3dz
ZXIgeG1sIHBhcnNpbmcKKwkvLyAoeG1sICYgdG1wIHVzZWQgaW50ZXJuYWxseSkKKwlwYXJzZVhN
TDogZnVuY3Rpb24oIGRhdGEgLCB4bWwgLCB0bXAgKSB7CisKKwkJaWYgKCB3aW5kb3cuRE9NUGFy
c2VyICkgeyAvLyBTdGFuZGFyZAorCQkJdG1wID0gbmV3IERPTVBhcnNlcigpOworCQkJeG1sID0g
dG1wLnBhcnNlRnJvbVN0cmluZyggZGF0YSAsICJ0ZXh0L3htbCIgKTsKKwkJfSBlbHNlIHsgLy8g
SUUKKwkJCXhtbCA9IG5ldyBBY3RpdmVYT2JqZWN0KCAiTWljcm9zb2Z0LlhNTERPTSIgKTsKKwkJ
CXhtbC5hc3luYyA9ICJmYWxzZSI7CisJCQl4bWwubG9hZFhNTCggZGF0YSApOworCQl9CisKKwkJ
dG1wID0geG1sLmRvY3VtZW50RWxlbWVudDsKKworCQlpZiAoICEgdG1wIHx8ICEgdG1wLm5vZGVO
YW1lIHx8IHRtcC5ub2RlTmFtZSA9PT0gInBhcnNlcmVycm9yIiApIHsKKwkJCWpRdWVyeS5lcnJv
ciggIkludmFsaWQgWE1MOiAiICsgZGF0YSApOworCQl9CisKKwkJcmV0dXJuIHhtbDsKKwl9LAor
CisJbm9vcDogZnVuY3Rpb24oKSB7fSwKKworCS8vIEV2YWx1bGF0ZXMgYSBzY3JpcHQgaW4gYSBn
bG9iYWwgY29udGV4dAorCWdsb2JhbEV2YWw6IGZ1bmN0aW9uKCBkYXRhICkgeworCQlpZiAoIGRh
dGEgJiYgcm5vdHdoaXRlLnRlc3QoZGF0YSkgKSB7CisJCQkvLyBJbnNwaXJlZCBieSBjb2RlIGJ5
IEFuZHJlYSBHaWFtbWFyY2hpCisJCQkvLyBodHRwOi8vd2VicmVmbGVjdGlvbi5ibG9nc3BvdC5j
b20vMjAwNy8wOC9nbG9iYWwtc2NvcGUtZXZhbHVhdGlvbi1hbmQtZG9tLmh0bWwKKwkJCXZhciBo
ZWFkID0gZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSggImhl
YWQiIClbMF0gfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LAorCQkJCXNjcmlwdCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoICJzY3JpcHQiICk7CisKKwkJCWlmICggalF1ZXJ5LnN1cHBvcnQu
c2NyaXB0RXZhbCgpICkgeworCQkJCXNjcmlwdC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUoIGRhdGEgKSApOworCQkJfSBlbHNlIHsKKwkJCQlzY3JpcHQudGV4dCA9IGRhdGE7
CisJCQl9CisKKwkJCS8vIFVzZSBpbnNlcnRCZWZvcmUgaW5zdGVhZCBvZiBhcHBlbmRDaGlsZCB0
byBjaXJjdW12ZW50IGFuIElFNiBidWcuCisJCQkvLyBUaGlzIGFyaXNlcyB3aGVuIGEgYmFzZSBu
b2RlIGlzIHVzZWQgKCMyNzA5KS4KKwkJCWhlYWQuaW5zZXJ0QmVmb3JlKCBzY3JpcHQsIGhlYWQu
Zmlyc3RDaGlsZCApOworCQkJaGVhZC5yZW1vdmVDaGlsZCggc2NyaXB0ICk7CisJCX0KKwl9LAor
CisJbm9kZU5hbWU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgeworCQlyZXR1cm4gZWxlbS5ub2Rl
TmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgPT09IG5hbWUudG9VcHBlckNhc2Uo
KTsKKwl9LAorCisJLy8gYXJncyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seQorCWVhY2g6IGZ1
bmN0aW9uKCBvYmplY3QsIGNhbGxiYWNrLCBhcmdzICkgeworCQl2YXIgbmFtZSwgaSA9IDAsCisJ
CQlsZW5ndGggPSBvYmplY3QubGVuZ3RoLAorCQkJaXNPYmogPSBsZW5ndGggPT09IHVuZGVmaW5l
ZCB8fCBqUXVlcnkuaXNGdW5jdGlvbihvYmplY3QpOworCisJCWlmICggYXJncyApIHsKKwkJCWlm
ICggaXNPYmogKSB7CisJCQkJZm9yICggbmFtZSBpbiBvYmplY3QgKSB7CisJCQkJCWlmICggY2Fs
bGJhY2suYXBwbHkoIG9iamVjdFsgbmFtZSBdLCBhcmdzICkgPT09IGZhbHNlICkgeworCQkJCQkJ
YnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWZvciAoIDsgaSA8IGxlbmd0
aDsgKSB7CisJCQkJCWlmICggY2FsbGJhY2suYXBwbHkoIG9iamVjdFsgaSsrIF0sIGFyZ3MgKSA9
PT0gZmFsc2UgKSB7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkvLyBB
IHNwZWNpYWwsIGZhc3QsIGNhc2UgZm9yIHRoZSBtb3N0IGNvbW1vbiB1c2Ugb2YgZWFjaAorCQl9
IGVsc2UgeworCQkJaWYgKCBpc09iaiApIHsKKwkJCQlmb3IgKCBuYW1lIGluIG9iamVjdCApIHsK
KwkJCQkJaWYgKCBjYWxsYmFjay5jYWxsKCBvYmplY3RbIG5hbWUgXSwgbmFtZSwgb2JqZWN0WyBu
YW1lIF0gKSA9PT0gZmFsc2UgKSB7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0g
ZWxzZSB7CisJCQkJZm9yICggdmFyIHZhbHVlID0gb2JqZWN0WzBdOworCQkJCQlpIDwgbGVuZ3Ro
ICYmIGNhbGxiYWNrLmNhbGwoIHZhbHVlLCBpLCB2YWx1ZSApICE9PSBmYWxzZTsgdmFsdWUgPSBv
YmplY3RbKytpXSApIHt9CisJCQl9CisJCX0KKworCQlyZXR1cm4gb2JqZWN0OworCX0sCisKKwkv
LyBVc2UgbmF0aXZlIFN0cmluZy50cmltIGZ1bmN0aW9uIHdoZXJldmVyIHBvc3NpYmxlCisJdHJp
bTogdHJpbSA/CisJCWZ1bmN0aW9uKCB0ZXh0ICkgeworCQkJcmV0dXJuIHRleHQgPT0gbnVsbCA/
CisJCQkJIiIgOgorCQkJCXRyaW0uY2FsbCggdGV4dCApOworCQl9IDoKKworCQkvLyBPdGhlcndp
c2UgdXNlIG91ciBvd24gdHJpbW1pbmcgZnVuY3Rpb25hbGl0eQorCQlmdW5jdGlvbiggdGV4dCAp
IHsKKwkJCXJldHVybiB0ZXh0ID09IG51bGwgPworCQkJCSIiIDoKKwkJCQl0ZXh0LnRvU3RyaW5n
KCkucmVwbGFjZSggdHJpbUxlZnQsICIiICkucmVwbGFjZSggdHJpbVJpZ2h0LCAiIiApOworCQl9
LAorCisJLy8gcmVzdWx0cyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seQorCW1ha2VBcnJheTog
ZnVuY3Rpb24oIGFycmF5LCByZXN1bHRzICkgeworCQl2YXIgcmV0ID0gcmVzdWx0cyB8fCBbXTsK
KworCQlpZiAoIGFycmF5ICE9IG51bGwgKSB7CisJCQkvLyBUaGUgd2luZG93LCBzdHJpbmdzIChh
bmQgZnVuY3Rpb25zKSBhbHNvIGhhdmUgJ2xlbmd0aCcKKwkJCS8vIFRoZSBleHRyYSB0eXBlb2Yg
ZnVuY3Rpb24gY2hlY2sgaXMgdG8gcHJldmVudCBjcmFzaGVzCisJCQkvLyBpbiBTYWZhcmkgMiAo
U2VlOiAjMzAzOSkKKwkJCS8vIFR3ZWFrZWQgbG9naWMgc2xpZ2h0bHkgdG8gaGFuZGxlIEJsYWNr
YmVycnkgNC43IFJlZ0V4cCBpc3N1ZXMgIzY5MzAKKwkJCXZhciB0eXBlID0galF1ZXJ5LnR5cGUo
YXJyYXkpOworCisJCQlpZiAoIGFycmF5Lmxlbmd0aCA9PSBudWxsIHx8IHR5cGUgPT09ICJzdHJp
bmciIHx8IHR5cGUgPT09ICJmdW5jdGlvbiIgfHwgdHlwZSA9PT0gInJlZ2V4cCIgfHwgalF1ZXJ5
LmlzV2luZG93KCBhcnJheSApICkgeworCQkJCXB1c2guY2FsbCggcmV0LCBhcnJheSApOworCQkJ
fSBlbHNlIHsKKwkJCQlqUXVlcnkubWVyZ2UoIHJldCwgYXJyYXkgKTsKKwkJCX0KKwkJfQorCisJ
CXJldHVybiByZXQ7CisJfSwKKworCWluQXJyYXk6IGZ1bmN0aW9uKCBlbGVtLCBhcnJheSApIHsK
KwkJaWYgKCBhcnJheS5pbmRleE9mICkgeworCQkJcmV0dXJuIGFycmF5LmluZGV4T2YoIGVsZW0g
KTsKKwkJfQorCisJCWZvciAoIHZhciBpID0gMCwgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOyBpIDwg
bGVuZ3RoOyBpKysgKSB7CisJCQlpZiAoIGFycmF5WyBpIF0gPT09IGVsZW0gKSB7CisJCQkJcmV0
dXJuIGk7CisJCQl9CisJCX0KKworCQlyZXR1cm4gLTE7CisJfSwKKworCW1lcmdlOiBmdW5jdGlv
biggZmlyc3QsIHNlY29uZCApIHsKKwkJdmFyIGkgPSBmaXJzdC5sZW5ndGgsCisJCQlqID0gMDsK
KworCQlpZiAoIHR5cGVvZiBzZWNvbmQubGVuZ3RoID09PSAibnVtYmVyIiApIHsKKwkJCWZvciAo
IHZhciBsID0gc2Vjb25kLmxlbmd0aDsgaiA8IGw7IGorKyApIHsKKwkJCQlmaXJzdFsgaSsrIF0g
PSBzZWNvbmRbIGogXTsKKwkJCX0KKworCQl9IGVsc2UgeworCQkJd2hpbGUgKCBzZWNvbmRbal0g
IT09IHVuZGVmaW5lZCApIHsKKwkJCQlmaXJzdFsgaSsrIF0gPSBzZWNvbmRbIGorKyBdOworCQkJ
fQorCQl9CisKKwkJZmlyc3QubGVuZ3RoID0gaTsKKworCQlyZXR1cm4gZmlyc3Q7CisJfSwKKwor
CWdyZXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGludiApIHsKKwkJdmFyIHJldCA9IFtd
LCByZXRWYWw7CisJCWludiA9ICEhaW52OworCisJCS8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCBv
bmx5IHNhdmluZyB0aGUgaXRlbXMKKwkJLy8gdGhhdCBwYXNzIHRoZSB2YWxpZGF0b3IgZnVuY3Rp
b24KKwkJZm9yICggdmFyIGkgPSAwLCBsZW5ndGggPSBlbGVtcy5sZW5ndGg7IGkgPCBsZW5ndGg7
IGkrKyApIHsKKwkJCXJldFZhbCA9ICEhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTsKKwkJCWlm
ICggaW52ICE9PSByZXRWYWwgKSB7CisJCQkJcmV0LnB1c2goIGVsZW1zWyBpIF0gKTsKKwkJCX0K
KwkJfQorCisJCXJldHVybiByZXQ7CisJfSwKKworCS8vIGFyZyBpcyBmb3IgaW50ZXJuYWwgdXNh
Z2Ugb25seQorCW1hcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgYXJnICkgeworCQl2YXIg
cmV0ID0gW10sIHZhbHVlOworCisJCS8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCB0cmFuc2xhdGlu
ZyBlYWNoIG9mIHRoZSBpdGVtcyB0byB0aGVpcgorCQkvLyBuZXcgdmFsdWUgKG9yIHZhbHVlcyku
CisJCWZvciAoIHZhciBpID0gMCwgbGVuZ3RoID0gZWxlbXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBp
KysgKSB7CisJCQl2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTsKKworCQkJ
aWYgKCB2YWx1ZSAhPSBudWxsICkgeworCQkJCXJldFsgcmV0Lmxlbmd0aCBdID0gdmFsdWU7CisJ
CQl9CisJCX0KKworCQkvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzCisJCXJldHVybiByZXQu
Y29uY2F0LmFwcGx5KCBbXSwgcmV0ICk7CisJfSwKKworCS8vIEEgZ2xvYmFsIEdVSUQgY291bnRl
ciBmb3Igb2JqZWN0cworCWd1aWQ6IDEsCisKKwlwcm94eTogZnVuY3Rpb24oIGZuLCBwcm94eSwg
dGhpc09iamVjdCApIHsKKwkJaWYgKCBhcmd1bWVudHMubGVuZ3RoID09PSAyICkgeworCQkJaWYg
KCB0eXBlb2YgcHJveHkgPT09ICJzdHJpbmciICkgeworCQkJCXRoaXNPYmplY3QgPSBmbjsKKwkJ
CQlmbiA9IHRoaXNPYmplY3RbIHByb3h5IF07CisJCQkJcHJveHkgPSB1bmRlZmluZWQ7CisKKwkJ
CX0gZWxzZSBpZiAoIHByb3h5ICYmICFqUXVlcnkuaXNGdW5jdGlvbiggcHJveHkgKSApIHsKKwkJ
CQl0aGlzT2JqZWN0ID0gcHJveHk7CisJCQkJcHJveHkgPSB1bmRlZmluZWQ7CisJCQl9CisJCX0K
KworCQlpZiAoICFwcm94eSAmJiBmbiApIHsKKwkJCXByb3h5ID0gZnVuY3Rpb24oKSB7CisJCQkJ
cmV0dXJuIGZuLmFwcGx5KCB0aGlzT2JqZWN0IHx8IHRoaXMsIGFyZ3VtZW50cyApOworCQkJfTsK
KwkJfQorCisJCS8vIFNldCB0aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0byB0aGUgc2FtZSBv
ZiBvcmlnaW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4gYmUgcmVtb3ZlZAorCQlpZiAoIGZuICkgewor
CQkJcHJveHkuZ3VpZCA9IGZuLmd1aWQgPSBmbi5ndWlkIHx8IHByb3h5Lmd1aWQgfHwgalF1ZXJ5
Lmd1aWQrKzsKKwkJfQorCisJCS8vIFNvIHByb3h5IGNhbiBiZSBkZWNsYXJlZCBhcyBhbiBhcmd1
bWVudAorCQlyZXR1cm4gcHJveHk7CisJfSwKKworCS8vIE11dGlmdW5jdGlvbmFsIG1ldGhvZCB0
byBnZXQgYW5kIHNldCB2YWx1ZXMgdG8gYSBjb2xsZWN0aW9uCisJLy8gVGhlIHZhbHVlL3MgY2Fu
IGJlIG9wdGlvbmFsbHkgYnkgZXhlY3V0ZWQgaWYgaXRzIGEgZnVuY3Rpb24KKwlhY2Nlc3M6IGZ1
bmN0aW9uKCBlbGVtcywga2V5LCB2YWx1ZSwgZXhlYywgZm4sIHBhc3MgKSB7CisJCXZhciBsZW5n
dGggPSBlbGVtcy5sZW5ndGg7CisKKwkJLy8gU2V0dGluZyBtYW55IGF0dHJpYnV0ZXMKKwkJaWYg
KCB0eXBlb2Yga2V5ID09PSAib2JqZWN0IiApIHsKKwkJCWZvciAoIHZhciBrIGluIGtleSApIHsK
KwkJCQlqUXVlcnkuYWNjZXNzKCBlbGVtcywgaywga2V5W2tdLCBleGVjLCBmbiwgdmFsdWUgKTsK
KwkJCX0KKwkJCXJldHVybiBlbGVtczsKKwkJfQorCisJCS8vIFNldHRpbmcgb25lIGF0dHJpYnV0
ZQorCQlpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7CisJCQkvLyBPcHRpb25hbGx5LCBmdW5j
dGlvbiB2YWx1ZXMgZ2V0IGV4ZWN1dGVkIGlmIGV4ZWMgaXMgdHJ1ZQorCQkJZXhlYyA9ICFwYXNz
ICYmIGV4ZWMgJiYgalF1ZXJ5LmlzRnVuY3Rpb24odmFsdWUpOworCisJCQlmb3IgKCB2YXIgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKyApIHsKKwkJCQlmbiggZWxlbXNbaV0sIGtleSwgZXhlYyA/IHZh
bHVlLmNhbGwoIGVsZW1zW2ldLCBpLCBmbiggZWxlbXNbaV0sIGtleSApICkgOiB2YWx1ZSwgcGFz
cyApOworCQkJfQorCisJCQlyZXR1cm4gZWxlbXM7CisJCX0KKworCQkvLyBHZXR0aW5nIGFuIGF0
dHJpYnV0ZQorCQlyZXR1cm4gbGVuZ3RoID8gZm4oIGVsZW1zWzBdLCBrZXkgKSA6IHVuZGVmaW5l
ZDsKKwl9LAorCisJbm93OiBmdW5jdGlvbigpIHsKKwkJcmV0dXJuIChuZXcgRGF0ZSgpKS5nZXRU
aW1lKCk7CisJfSwKKworCS8vIFVzZSBvZiBqUXVlcnkuYnJvd3NlciBpcyBmcm93bmVkIHVwb24u
CisJLy8gTW9yZSBkZXRhaWxzOiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL1V0aWxpdGllcy9qUXVl
cnkuYnJvd3NlcgorCXVhTWF0Y2g6IGZ1bmN0aW9uKCB1YSApIHsKKwkJdWEgPSB1YS50b0xvd2Vy
Q2FzZSgpOworCisJCXZhciBtYXRjaCA9IHJ3ZWJraXQuZXhlYyggdWEgKSB8fAorCQkJcm9wZXJh
LmV4ZWMoIHVhICkgfHwKKwkJCXJtc2llLmV4ZWMoIHVhICkgfHwKKwkJCXVhLmluZGV4T2YoImNv
bXBhdGlibGUiKSA8IDAgJiYgcm1vemlsbGEuZXhlYyggdWEgKSB8fAorCQkJW107CisKKwkJcmV0
dXJuIHsgYnJvd3NlcjogbWF0Y2hbMV0gfHwgIiIsIHZlcnNpb246IG1hdGNoWzJdIHx8ICIwIiB9
OworCX0sCisKKwlzdWI6IGZ1bmN0aW9uKCkgeworCQlmdW5jdGlvbiBqUXVlcnlTdWJjbGFzcygg
c2VsZWN0b3IsIGNvbnRleHQgKSB7CisJCQlyZXR1cm4gbmV3IGpRdWVyeVN1YmNsYXNzLmZuLmlu
aXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7CisJCX0KKwkJalF1ZXJ5LmV4dGVuZCggdHJ1ZSwgalF1
ZXJ5U3ViY2xhc3MsIHRoaXMgKTsKKwkJalF1ZXJ5U3ViY2xhc3Muc3VwZXJjbGFzcyA9IHRoaXM7
CisJCWpRdWVyeVN1YmNsYXNzLmZuID0galF1ZXJ5U3ViY2xhc3MucHJvdG90eXBlID0gdGhpcygp
OworCQlqUXVlcnlTdWJjbGFzcy5mbi5jb25zdHJ1Y3RvciA9IGpRdWVyeVN1YmNsYXNzOworCQlq
UXVlcnlTdWJjbGFzcy5zdWJjbGFzcyA9IHRoaXMuc3ViY2xhc3M7CisJCWpRdWVyeVN1YmNsYXNz
LmZuLmluaXQgPSBmdW5jdGlvbiBpbml0KCBzZWxlY3RvciwgY29udGV4dCApIHsKKwkJCWlmICgg
Y29udGV4dCAmJiBjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ICYmICEoY29udGV4dCBpbnN0YW5j
ZW9mIGpRdWVyeVN1YmNsYXNzKSApIHsKKwkJCQljb250ZXh0ID0galF1ZXJ5U3ViY2xhc3MoY29u
dGV4dCk7CisJCQl9CisKKwkJCXJldHVybiBqUXVlcnkuZm4uaW5pdC5jYWxsKCB0aGlzLCBzZWxl
Y3RvciwgY29udGV4dCwgcm9vdGpRdWVyeVN1YmNsYXNzICk7CisJCX07CisJCWpRdWVyeVN1YmNs
YXNzLmZuLmluaXQucHJvdG90eXBlID0galF1ZXJ5U3ViY2xhc3MuZm47CisJCXZhciByb290alF1
ZXJ5U3ViY2xhc3MgPSBqUXVlcnlTdWJjbGFzcyhkb2N1bWVudCk7CisJCXJldHVybiBqUXVlcnlT
dWJjbGFzczsKKwl9LAorCisJYnJvd3Nlcjoge30KK30pOworCisvLyBQb3B1bGF0ZSB0aGUgY2xh
c3MydHlwZSBtYXAKK2pRdWVyeS5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24g
QXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0Ii5zcGxpdCgiICIpLCBmdW5jdGlvbihpLCBuYW1lKSB7
CisJY2xhc3MydHlwZVsgIltvYmplY3QgIiArIG5hbWUgKyAiXSIgXSA9IG5hbWUudG9Mb3dlckNh
c2UoKTsKK30pOworCiticm93c2VyTWF0Y2ggPSBqUXVlcnkudWFNYXRjaCggdXNlckFnZW50ICk7
CitpZiAoIGJyb3dzZXJNYXRjaC5icm93c2VyICkgeworCWpRdWVyeS5icm93c2VyWyBicm93c2Vy
TWF0Y2guYnJvd3NlciBdID0gdHJ1ZTsKKwlqUXVlcnkuYnJvd3Nlci52ZXJzaW9uID0gYnJvd3Nl
ck1hdGNoLnZlcnNpb247Cit9CisKKy8vIERlcHJlY2F0ZWQsIHVzZSBqUXVlcnkuYnJvd3Nlci53
ZWJraXQgaW5zdGVhZAoraWYgKCBqUXVlcnkuYnJvd3Nlci53ZWJraXQgKSB7CisJalF1ZXJ5LmJy
b3dzZXIuc2FmYXJpID0gdHJ1ZTsKK30KKworaWYgKCBpbmRleE9mICkgeworCWpRdWVyeS5pbkFy
cmF5ID0gZnVuY3Rpb24oIGVsZW0sIGFycmF5ICkgeworCQlyZXR1cm4gaW5kZXhPZi5jYWxsKCBh
cnJheSwgZWxlbSApOworCX07Cit9CisKKy8vIElFIGRvZXNuJ3QgbWF0Y2ggbm9uLWJyZWFraW5n
IHNwYWNlcyB3aXRoIFxzCitpZiAoIHJub3R3aGl0ZS50ZXN0KCAiXHhBMCIgKSApIHsKKwl0cmlt
TGVmdCA9IC9eW1xzXHhBMF0rLzsKKwl0cmltUmlnaHQgPSAvW1xzXHhBMF0rJC87Cit9CisKKy8v
IEFsbCBqUXVlcnkgb2JqZWN0cyBzaG91bGQgcG9pbnQgYmFjayB0byB0aGVzZQorcm9vdGpRdWVy
eSA9IGpRdWVyeShkb2N1bWVudCk7CisKKy8vIENsZWFudXAgZnVuY3Rpb25zIGZvciB0aGUgZG9j
dW1lbnQgcmVhZHkgbWV0aG9kCitpZiAoIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIgKSB7CisJ
RE9NQ29udGVudExvYWRlZCA9IGZ1bmN0aW9uKCkgeworCQlkb2N1bWVudC5yZW1vdmVFdmVudExp
c3RlbmVyKCAiRE9NQ29udGVudExvYWRlZCIsIERPTUNvbnRlbnRMb2FkZWQsIGZhbHNlICk7CisJ
CWpRdWVyeS5yZWFkeSgpOworCX07CisKK30gZWxzZSBpZiAoIGRvY3VtZW50LmF0dGFjaEV2ZW50
ICkgeworCURPTUNvbnRlbnRMb2FkZWQgPSBmdW5jdGlvbigpIHsKKwkJLy8gTWFrZSBzdXJlIGJv
ZHkgZXhpc3RzLCBhdCBsZWFzdCwgaW4gY2FzZSBJRSBnZXRzIGEgbGl0dGxlIG92ZXJ6ZWFsb3Vz
ICh0aWNrZXQgIzU0NDMpLgorCQlpZiAoIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0
ZSIgKSB7CisJCQlkb2N1bWVudC5kZXRhY2hFdmVudCggIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIERP
TUNvbnRlbnRMb2FkZWQgKTsKKwkJCWpRdWVyeS5yZWFkeSgpOworCQl9CisJfTsKK30KKworLy8g
VGhlIERPTSByZWFkeSBjaGVjayBmb3IgSW50ZXJuZXQgRXhwbG9yZXIKK2Z1bmN0aW9uIGRvU2Ny
b2xsQ2hlY2soKSB7CisJaWYgKCBqUXVlcnkuaXNSZWFkeSApIHsKKwkJcmV0dXJuOworCX0KKwor
CXRyeSB7CisJCS8vIElmIElFIGlzIHVzZWQsIHVzZSB0aGUgdHJpY2sgYnkgRGllZ28gUGVyaW5p
CisJCS8vIGh0dHA6Ly9qYXZhc2NyaXB0Lm53Ym94LmNvbS9JRUNvbnRlbnRMb2FkZWQvCisJCWRv
Y3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCgibGVmdCIpOworCX0gY2F0Y2goZSkgewor
CQlzZXRUaW1lb3V0KCBkb1Njcm9sbENoZWNrLCAxICk7CisJCXJldHVybjsKKwl9CisKKwkvLyBh
bmQgZXhlY3V0ZSBhbnkgd2FpdGluZyBmdW5jdGlvbnMKKwlqUXVlcnkucmVhZHkoKTsKK30KKwor
Ly8gRXhwb3NlIGpRdWVyeSB0byB0aGUgZ2xvYmFsIG9iamVjdAorcmV0dXJuIGpRdWVyeTsKKwor
fSkoKTsKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMv
c3JjL2NvcmUuanMKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICArIHllcwoKSW5kZXg6
IExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvc3JjL2Nzcy5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3NyYy9jc3MuanMJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3NyYy9jc3MuanMJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMzM3IEBACisoZnVuY3Rpb24oIGpRdWVyeSApIHsKKwordmFyIHJhbHBoYSA9IC9hbHBo
YVwoW14pXSpcKS9pLAorCXJvcGFjaXR5ID0gL29wYWNpdHk9KFteKV0qKS8sCisJcmRhc2hBbHBo
YSA9IC8tKFthLXpdKS9pZywKKwlydXBwZXIgPSAvKFtBLVpdKS9nLAorCXJudW1weCA9IC9eLT9c
ZCsoPzpweCk/JC9pLAorCXJudW0gPSAvXi0/XGQvLAorCisJY3NzU2hvdyA9IHsgcG9zaXRpb246
ICJhYnNvbHV0ZSIsIHZpc2liaWxpdHk6ICJoaWRkZW4iLCBkaXNwbGF5OiAiYmxvY2siIH0sCisJ
Y3NzV2lkdGggPSBbICJMZWZ0IiwgIlJpZ2h0IiBdLAorCWNzc0hlaWdodCA9IFsgIlRvcCIsICJC
b3R0b20iIF0sCisJY3VyQ1NTLAorCisJZ2V0Q29tcHV0ZWRTdHlsZSwKKwljdXJyZW50U3R5bGUs
CisKKwlmY2FtZWxDYXNlID0gZnVuY3Rpb24oIGFsbCwgbGV0dGVyICkgeworCQlyZXR1cm4gbGV0
dGVyLnRvVXBwZXJDYXNlKCk7CisJfTsKKworalF1ZXJ5LmZuLmNzcyA9IGZ1bmN0aW9uKCBuYW1l
LCB2YWx1ZSApIHsKKwkvLyBTZXR0aW5nICd1bmRlZmluZWQnIGlzIGEgbm8tb3AKKwlpZiAoIGFy
Z3VtZW50cy5sZW5ndGggPT09IDIgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCApIHsKKwkJcmV0dXJu
IHRoaXM7CisJfQorCisJcmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIG5hbWUsIHZhbHVlLCB0
cnVlLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7CisJCXJldHVybiB2YWx1ZSAhPT0g
dW5kZWZpbmVkID8KKwkJCWpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSwgdmFsdWUgKSA6CisJCQlq
UXVlcnkuY3NzKCBlbGVtLCBuYW1lICk7CisJfSk7Cit9OworCitqUXVlcnkuZXh0ZW5kKHsKKwkv
LyBBZGQgaW4gc3R5bGUgcHJvcGVydHkgaG9va3MgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQK
KwkvLyBiZWhhdmlvciBvZiBnZXR0aW5nIGFuZCBzZXR0aW5nIGEgc3R5bGUgcHJvcGVydHkKKwlj
c3NIb29rczogeworCQlvcGFjaXR5OiB7CisJCQlnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRl
ZCApIHsKKwkJCQlpZiAoIGNvbXB1dGVkICkgeworCQkJCQkvLyBXZSBzaG91bGQgYWx3YXlzIGdl
dCBhIG51bWJlciBiYWNrIGZyb20gb3BhY2l0eQorCQkJCQl2YXIgcmV0ID0gY3VyQ1NTKCBlbGVt
LCAib3BhY2l0eSIsICJvcGFjaXR5IiApOworCQkJCQlyZXR1cm4gcmV0ID09PSAiIiA/ICIxIiA6
IHJldDsKKworCQkJCX0gZWxzZSB7CisJCQkJCXJldHVybiBlbGVtLnN0eWxlLm9wYWNpdHk7CisJ
CQkJfQorCQkJfQorCQl9CisJfSwKKworCS8vIEV4Y2x1ZGUgdGhlIGZvbGxvd2luZyBjc3MgcHJv
cGVydGllcyB0byBhZGQgcHgKKwljc3NOdW1iZXI6IHsKKwkJInpJbmRleCI6IHRydWUsCisJCSJm
b250V2VpZ2h0IjogdHJ1ZSwKKwkJIm9wYWNpdHkiOiB0cnVlLAorCQkiem9vbSI6IHRydWUsCisJ
CSJsaW5lSGVpZ2h0IjogdHJ1ZQorCX0sCisKKwkvLyBBZGQgaW4gcHJvcGVydGllcyB3aG9zZSBu
YW1lcyB5b3Ugd2lzaCB0byBmaXggYmVmb3JlCisJLy8gc2V0dGluZyBvciBnZXR0aW5nIHRoZSB2
YWx1ZQorCWNzc1Byb3BzOiB7CisJCS8vIG5vcm1hbGl6ZSBmbG9hdCBjc3MgcHJvcGVydHkKKwkJ
ImZsb2F0IjogalF1ZXJ5LnN1cHBvcnQuY3NzRmxvYXQgPyAiY3NzRmxvYXQiIDogInN0eWxlRmxv
YXQiCisJfSwKKworCS8vIEdldCBhbmQgc2V0IHRoZSBzdHlsZSBwcm9wZXJ0eSBvbiBhIERPTSBO
b2RlCisJc3R5bGU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgZXh0cmEgKSB7CisJCS8v
IERvbid0IHNldCBzdHlsZXMgb24gdGV4dCBhbmQgY29tbWVudCBub2RlcworCQlpZiAoICFlbGVt
IHx8IGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAhZWxlbS5z
dHlsZSApIHsKKwkJCXJldHVybjsKKwkJfQorCisJCS8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdv
cmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZQorCQl2YXIgcmV0LCBvcmlnTmFtZSA9IGpRdWVyeS5j
YW1lbENhc2UoIG5hbWUgKSwKKwkJCXN0eWxlID0gZWxlbS5zdHlsZSwgaG9va3MgPSBqUXVlcnku
Y3NzSG9va3NbIG9yaWdOYW1lIF07CisKKwkJbmFtZSA9IGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05h
bWUgXSB8fCBvcmlnTmFtZTsKKworCQkvLyBDaGVjayBpZiB3ZSdyZSBzZXR0aW5nIGEgdmFsdWUK
KwkJaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgeworCQkJLy8gTWFrZSBzdXJlIHRoYXQgTmFO
IGFuZCBudWxsIHZhbHVlcyBhcmVuJ3Qgc2V0LiBTZWU6ICM3MTE2CisJCQlpZiAoIHR5cGVvZiB2
YWx1ZSA9PT0gIm51bWJlciIgJiYgaXNOYU4oIHZhbHVlICkgfHwgdmFsdWUgPT0gbnVsbCApIHsK
KwkJCQlyZXR1cm47CisJCQl9CisKKwkJCS8vIElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFk
ZCAncHgnIHRvIHRoZSAoZXhjZXB0IGZvciBjZXJ0YWluIENTUyBwcm9wZXJ0aWVzKQorCQkJaWYg
KCB0eXBlb2YgdmFsdWUgPT09ICJudW1iZXIiICYmICFqUXVlcnkuY3NzTnVtYmVyWyBvcmlnTmFt
ZSBdICkgeworCQkJCXZhbHVlICs9ICJweCI7CisJCQl9CisKKwkJCS8vIElmIGEgaG9vayB3YXMg
cHJvdmlkZWQsIHVzZSB0aGF0IHZhbHVlLCBvdGhlcndpc2UganVzdCBzZXQgdGhlIHNwZWNpZmll
ZCB2YWx1ZQorCQkJaWYgKCAhaG9va3MgfHwgISgic2V0IiBpbiBob29rcykgfHwgKHZhbHVlID0g
aG9va3Muc2V0KCBlbGVtLCB2YWx1ZSApKSAhPT0gdW5kZWZpbmVkICkgeworCQkJCS8vIFdyYXBw
ZWQgdG8gcHJldmVudCBJRSBmcm9tIHRocm93aW5nIGVycm9ycyB3aGVuICdpbnZhbGlkJyB2YWx1
ZXMgYXJlIHByb3ZpZGVkCisJCQkJLy8gRml4ZXMgYnVnICM1NTA5CisJCQkJdHJ5IHsKKwkJCQkJ
c3R5bGVbIG5hbWUgXSA9IHZhbHVlOworCQkJCX0gY2F0Y2goZSkge30KKwkJCX0KKworCQl9IGVs
c2UgeworCQkJLy8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIG5vbi1jb21wdXRlZCB2
YWx1ZSBmcm9tIHRoZXJlCisJCQlpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYmIChyZXQg
PSBob29rcy5nZXQoIGVsZW0sIGZhbHNlLCBleHRyYSApKSAhPT0gdW5kZWZpbmVkICkgeworCQkJ
CXJldHVybiByZXQ7CisJCQl9CisKKwkJCS8vIE90aGVyd2lzZSBqdXN0IGdldCB0aGUgdmFsdWUg
ZnJvbSB0aGUgc3R5bGUgb2JqZWN0CisJCQlyZXR1cm4gc3R5bGVbIG5hbWUgXTsKKwkJfQorCX0s
CisKKwljc3M6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBleHRyYSApIHsKKwkJLy8gTWFrZSBzdXJl
IHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lCisJCXZhciByZXQsIG9yaWdO
YW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSApLAorCQkJaG9va3MgPSBqUXVlcnkuY3NzSG9v
a3NbIG9yaWdOYW1lIF07CisKKwkJbmFtZSA9IGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSB8
fCBvcmlnTmFtZTsKKworCQkvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgY29tcHV0
ZWQgdmFsdWUgZnJvbSB0aGVyZQorCQlpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYmIChy
ZXQgPSBob29rcy5nZXQoIGVsZW0sIHRydWUsIGV4dHJhICkpICE9PSB1bmRlZmluZWQgKSB7CisJ
CQlyZXR1cm4gcmV0OworCisJCS8vIE90aGVyd2lzZSwgaWYgYSB3YXkgdG8gZ2V0IHRoZSBjb21w
dXRlZCB2YWx1ZSBleGlzdHMsIHVzZSB0aGF0CisJCX0gZWxzZSBpZiAoIGN1ckNTUyApIHsKKwkJ
CXJldHVybiBjdXJDU1MoIGVsZW0sIG5hbWUsIG9yaWdOYW1lICk7CisJCX0KKwl9LAorCisJLy8g
QSBtZXRob2QgZm9yIHF1aWNrbHkgc3dhcHBpbmcgaW4vb3V0IENTUyBwcm9wZXJ0aWVzIHRvIGdl
dCBjb3JyZWN0IGNhbGN1bGF0aW9ucworCXN3YXA6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBj
YWxsYmFjayApIHsKKwkJdmFyIG9sZCA9IHt9OworCisJCS8vIFJlbWVtYmVyIHRoZSBvbGQgdmFs
dWVzLCBhbmQgaW5zZXJ0IHRoZSBuZXcgb25lcworCQlmb3IgKCB2YXIgbmFtZSBpbiBvcHRpb25z
ICkgeworCQkJb2xkWyBuYW1lIF0gPSBlbGVtLnN0eWxlWyBuYW1lIF07CisJCQllbGVtLnN0eWxl
WyBuYW1lIF0gPSBvcHRpb25zWyBuYW1lIF07CisJCX0KKworCQljYWxsYmFjay5jYWxsKCBlbGVt
ICk7CisKKwkJLy8gUmV2ZXJ0IHRoZSBvbGQgdmFsdWVzCisJCWZvciAoIG5hbWUgaW4gb3B0aW9u
cyApIHsKKwkJCWVsZW0uc3R5bGVbIG5hbWUgXSA9IG9sZFsgbmFtZSBdOworCQl9CisJfSwKKwor
CWNhbWVsQ2FzZTogZnVuY3Rpb24oIHN0cmluZyApIHsKKwkJcmV0dXJuIHN0cmluZy5yZXBsYWNl
KCByZGFzaEFscGhhLCBmY2FtZWxDYXNlICk7CisJfQorfSk7CisKKy8vIERFUFJFQ0FURUQsIFVz
ZSBqUXVlcnkuY3NzKCkgaW5zdGVhZAoralF1ZXJ5LmN1ckNTUyA9IGpRdWVyeS5jc3M7CisKK2pR
dWVyeS5lYWNoKFsiaGVpZ2h0IiwgIndpZHRoIl0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgeworCWpR
dWVyeS5jc3NIb29rc1sgbmFtZSBdID0geworCQlnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRl
ZCwgZXh0cmEgKSB7CisJCQl2YXIgdmFsOworCisJCQlpZiAoIGNvbXB1dGVkICkgeworCQkJCWlm
ICggZWxlbS5vZmZzZXRXaWR0aCAhPT0gMCApIHsKKwkJCQkJdmFsID0gZ2V0V0goIGVsZW0sIG5h
bWUsIGV4dHJhICk7CisKKwkJCQl9IGVsc2UgeworCQkJCQlqUXVlcnkuc3dhcCggZWxlbSwgY3Nz
U2hvdywgZnVuY3Rpb24oKSB7CisJCQkJCQl2YWwgPSBnZXRXSCggZWxlbSwgbmFtZSwgZXh0cmEg
KTsKKwkJCQkJfSk7CisJCQkJfQorCisJCQkJaWYgKCB2YWwgPD0gMCApIHsKKwkJCQkJdmFsID0g
Y3VyQ1NTKCBlbGVtLCBuYW1lLCBuYW1lICk7CisKKwkJCQkJaWYgKCB2YWwgPT09ICIwcHgiICYm
IGN1cnJlbnRTdHlsZSApIHsKKwkJCQkJCXZhbCA9IGN1cnJlbnRTdHlsZSggZWxlbSwgbmFtZSwg
bmFtZSApOworCQkJCQl9CisKKwkJCQkJaWYgKCB2YWwgIT0gbnVsbCApIHsKKwkJCQkJCS8vIFNo
b3VsZCByZXR1cm4gImF1dG8iIGluc3RlYWQgb2YgMCwgdXNlIDAgZm9yCisJCQkJCQkvLyB0ZW1w
b3JhcnkgYmFja3dhcmRzLWNvbXBhdAorCQkJCQkJcmV0dXJuIHZhbCA9PT0gIiIgfHwgdmFsID09
PSAiYXV0byIgPyAiMHB4IiA6IHZhbDsKKwkJCQkJfQorCQkJCX0KKworCQkJCWlmICggdmFsIDwg
MCB8fCB2YWwgPT0gbnVsbCApIHsKKwkJCQkJdmFsID0gZWxlbS5zdHlsZVsgbmFtZSBdOworCisJ
CQkJCS8vIFNob3VsZCByZXR1cm4gImF1dG8iIGluc3RlYWQgb2YgMCwgdXNlIDAgZm9yCisJCQkJ
CS8vIHRlbXBvcmFyeSBiYWNrd2FyZHMtY29tcGF0CisJCQkJCXJldHVybiB2YWwgPT09ICIiIHx8
IHZhbCA9PT0gImF1dG8iID8gIjBweCIgOiB2YWw7CisJCQkJfQorCisJCQkJcmV0dXJuIHR5cGVv
ZiB2YWwgPT09ICJzdHJpbmciID8gdmFsIDogdmFsICsgInB4IjsKKwkJCX0KKwkJfSwKKworCQlz
ZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKKwkJCWlmICggcm51bXB4LnRlc3QoIHZhbHVl
ICkgKSB7CisJCQkJLy8gaWdub3JlIG5lZ2F0aXZlIHdpZHRoIGFuZCBoZWlnaHQgdmFsdWVzICMx
NTk5CisJCQkJdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKTsKKworCQkJCWlmICggdmFsdWUgPj0g
MCApIHsKKwkJCQkJcmV0dXJuIHZhbHVlICsgInB4IjsKKwkJCQl9CisKKwkJCX0gZWxzZSB7CisJ
CQkJcmV0dXJuIHZhbHVlOworCQkJfQorCQl9CisJfTsKK30pOworCitpZiAoICFqUXVlcnkuc3Vw
cG9ydC5vcGFjaXR5ICkgeworCWpRdWVyeS5jc3NIb29rcy5vcGFjaXR5ID0geworCQlnZXQ6IGZ1
bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHsKKwkJCS8vIElFIHVzZXMgZmlsdGVycyBmb3Igb3Bh
Y2l0eQorCQkJcmV0dXJuIHJvcGFjaXR5LnRlc3QoKGNvbXB1dGVkICYmIGVsZW0uY3VycmVudFN0
eWxlID8gZWxlbS5jdXJyZW50U3R5bGUuZmlsdGVyIDogZWxlbS5zdHlsZS5maWx0ZXIpIHx8ICIi
KSA/CisJCQkJKHBhcnNlRmxvYXQoUmVnRXhwLiQxKSAvIDEwMCkgKyAiIiA6CisJCQkJY29tcHV0
ZWQgPyAiMSIgOiAiIjsKKwkJfSwKKworCQlzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsK
KwkJCXZhciBzdHlsZSA9IGVsZW0uc3R5bGU7CisKKwkJCS8vIElFIGhhcyB0cm91YmxlIHdpdGgg
b3BhY2l0eSBpZiBpdCBkb2VzIG5vdCBoYXZlIGxheW91dAorCQkJLy8gRm9yY2UgaXQgYnkgc2V0
dGluZyB0aGUgem9vbSBsZXZlbAorCQkJc3R5bGUuem9vbSA9IDE7CisKKwkJCS8vIFNldCB0aGUg
YWxwaGEgZmlsdGVyIHRvIHNldCB0aGUgb3BhY2l0eQorCQkJdmFyIG9wYWNpdHkgPSBqUXVlcnku
aXNOYU4odmFsdWUpID8KKwkJCQkiIiA6CisJCQkJImFscGhhKG9wYWNpdHk9IiArIHZhbHVlICog
MTAwICsgIikiLAorCQkJCWZpbHRlciA9IHN0eWxlLmZpbHRlciB8fCAiIjsKKworCQkJc3R5bGUu
ZmlsdGVyID0gcmFscGhhLnRlc3QoZmlsdGVyKSA/CisJCQkJZmlsdGVyLnJlcGxhY2UocmFscGhh
LCBvcGFjaXR5KSA6CisJCQkJc3R5bGUuZmlsdGVyICsgJyAnICsgb3BhY2l0eTsKKwkJfQorCX07
Cit9CisKK2lmICggZG9jdW1lbnQuZGVmYXVsdFZpZXcgJiYgZG9jdW1lbnQuZGVmYXVsdFZpZXcu
Z2V0Q29tcHV0ZWRTdHlsZSApIHsKKwlnZXRDb21wdXRlZFN0eWxlID0gZnVuY3Rpb24oIGVsZW0s
IG5ld05hbWUsIG5hbWUgKSB7CisJCXZhciByZXQsIGRlZmF1bHRWaWV3LCBjb21wdXRlZFN0eWxl
OworCisJCW5hbWUgPSBuYW1lLnJlcGxhY2UoIHJ1cHBlciwgIi0kMSIgKS50b0xvd2VyQ2FzZSgp
OworCisJCWlmICggIShkZWZhdWx0VmlldyA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmll
dykgKSB7CisJCQlyZXR1cm4gdW5kZWZpbmVkOworCQl9CisKKwkJaWYgKCAoY29tcHV0ZWRTdHls
ZSA9IGRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoIGVsZW0sIG51bGwgKSkgKSB7CisJCQly
ZXQgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoIG5hbWUgKTsKKwkJCWlmICggcmV0
ID09PSAiIiAmJiAhalF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRF
bGVtZW50LCBlbGVtICkgKSB7CisJCQkJcmV0ID0galF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lICk7
CisJCQl9CisJCX0KKworCQlyZXR1cm4gcmV0OworCX07Cit9CisKK2lmICggZG9jdW1lbnQuZG9j
dW1lbnRFbGVtZW50LmN1cnJlbnRTdHlsZSApIHsKKwljdXJyZW50U3R5bGUgPSBmdW5jdGlvbigg
ZWxlbSwgbmFtZSApIHsKKwkJdmFyIGxlZnQsCisJCQlyZXQgPSBlbGVtLmN1cnJlbnRTdHlsZSAm
JiBlbGVtLmN1cnJlbnRTdHlsZVsgbmFtZSBdLAorCQkJcnNMZWZ0ID0gZWxlbS5ydW50aW1lU3R5
bGUgJiYgZWxlbS5ydW50aW1lU3R5bGVbIG5hbWUgXSwKKwkJCXN0eWxlID0gZWxlbS5zdHlsZTsK
KworCQkvLyBGcm9tIHRoZSBhd2Vzb21lIGhhY2sgYnkgRGVhbiBFZHdhcmRzCisJCS8vIGh0dHA6
Ly9lcmlrLmVhZS5uZXQvYXJjaGl2ZXMvMjAwNy8wNy8yNy8xOC41NC4xNS8jY29tbWVudC0xMDIy
OTEKKworCQkvLyBJZiB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIGEgcmVndWxhciBwaXhlbCBudW1i
ZXIKKwkJLy8gYnV0IGEgbnVtYmVyIHRoYXQgaGFzIGEgd2VpcmQgZW5kaW5nLCB3ZSBuZWVkIHRv
IGNvbnZlcnQgaXQgdG8gcGl4ZWxzCisJCWlmICggIXJudW1weC50ZXN0KCByZXQgKSAmJiBybnVt
LnRlc3QoIHJldCApICkgeworCQkJLy8gUmVtZW1iZXIgdGhlIG9yaWdpbmFsIHZhbHVlcworCQkJ
bGVmdCA9IHN0eWxlLmxlZnQ7CisKKwkJCS8vIFB1dCBpbiB0aGUgbmV3IHZhbHVlcyB0byBnZXQg
YSBjb21wdXRlZCB2YWx1ZSBvdXQKKwkJCWlmICggcnNMZWZ0ICkgeworCQkJCWVsZW0ucnVudGlt
ZVN0eWxlLmxlZnQgPSBlbGVtLmN1cnJlbnRTdHlsZS5sZWZ0OworCQkJfQorCQkJc3R5bGUubGVm
dCA9IG5hbWUgPT09ICJmb250U2l6ZSIgPyAiMWVtIiA6IChyZXQgfHwgMCk7CisJCQlyZXQgPSBz
dHlsZS5waXhlbExlZnQgKyAicHgiOworCisJCQkvLyBSZXZlcnQgdGhlIGNoYW5nZWQgdmFsdWVz
CisJCQlzdHlsZS5sZWZ0ID0gbGVmdDsKKwkJCWlmICggcnNMZWZ0ICkgeworCQkJCWVsZW0ucnVu
dGltZVN0eWxlLmxlZnQgPSByc0xlZnQ7CisJCQl9CisJCX0KKworCQlyZXR1cm4gcmV0ID09PSAi
IiA/ICJhdXRvIiA6IHJldDsKKwl9OworfQorCitjdXJDU1MgPSBnZXRDb21wdXRlZFN0eWxlIHx8
IGN1cnJlbnRTdHlsZTsKKworZnVuY3Rpb24gZ2V0V0goIGVsZW0sIG5hbWUsIGV4dHJhICkgewor
CXZhciB3aGljaCA9IG5hbWUgPT09ICJ3aWR0aCIgPyBjc3NXaWR0aCA6IGNzc0hlaWdodCwKKwkJ
dmFsID0gbmFtZSA9PT0gIndpZHRoIiA/IGVsZW0ub2Zmc2V0V2lkdGggOiBlbGVtLm9mZnNldEhl
aWdodDsKKworCWlmICggZXh0cmEgPT09ICJib3JkZXIiICkgeworCQlyZXR1cm4gdmFsOworCX0K
KworCWpRdWVyeS5lYWNoKCB3aGljaCwgZnVuY3Rpb24oKSB7CisJCWlmICggIWV4dHJhICkgewor
CQkJdmFsIC09IHBhcnNlRmxvYXQoalF1ZXJ5LmNzcyggZWxlbSwgInBhZGRpbmciICsgdGhpcyAp
KSB8fCAwOworCQl9CisKKwkJaWYgKCBleHRyYSA9PT0gIm1hcmdpbiIgKSB7CisJCQl2YWwgKz0g
cGFyc2VGbG9hdChqUXVlcnkuY3NzKCBlbGVtLCAibWFyZ2luIiArIHRoaXMgKSkgfHwgMDsKKwor
CQl9IGVsc2UgeworCQkJdmFsIC09IHBhcnNlRmxvYXQoalF1ZXJ5LmNzcyggZWxlbSwgImJvcmRl
ciIgKyB0aGlzICsgIldpZHRoIiApKSB8fCAwOworCQl9CisJfSk7CisKKwlyZXR1cm4gdmFsOwor
fQorCitpZiAoIGpRdWVyeS5leHByICYmIGpRdWVyeS5leHByLmZpbHRlcnMgKSB7CisJalF1ZXJ5
LmV4cHIuZmlsdGVycy5oaWRkZW4gPSBmdW5jdGlvbiggZWxlbSApIHsKKwkJdmFyIHdpZHRoID0g
ZWxlbS5vZmZzZXRXaWR0aCwKKwkJCWhlaWdodCA9IGVsZW0ub2Zmc2V0SGVpZ2h0OworCisJCXJl
dHVybiAod2lkdGggPT09IDAgJiYgaGVpZ2h0ID09PSAwKSB8fCAoIWpRdWVyeS5zdXBwb3J0LnJl
bGlhYmxlSGlkZGVuT2Zmc2V0cyAmJiAoZWxlbS5zdHlsZS5kaXNwbGF5IHx8IGpRdWVyeS5jc3Mo
IGVsZW0sICJkaXNwbGF5IiApKSA9PT0gIm5vbmUiKTsKKwl9OworCisJalF1ZXJ5LmV4cHIuZmls
dGVycy52aXNpYmxlID0gZnVuY3Rpb24oIGVsZW0gKSB7CisJCXJldHVybiAhalF1ZXJ5LmV4cHIu
ZmlsdGVycy5oaWRkZW4oIGVsZW0gKTsKKwl9OworfQorCit9KSggalF1ZXJ5ICk7CgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3NyYy9jc3MuanMKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICArIHllcwoKSW5kZXg6IExheW91dFRlc3RzL2px
dWVyeS9yZXNvdXJjZXMvc3JjL2RhdGEuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanF1
ZXJ5L3Jlc291cmNlcy9zcmMvZGF0YS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2px
dWVyeS9yZXNvdXJjZXMvc3JjL2RhdGEuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIxIEBA
CisoZnVuY3Rpb24oIGpRdWVyeSApIHsKKwordmFyIHJicmFjZSA9IC9eKD86XHsuKlx9fFxbLipc
XSkkLzsKKworalF1ZXJ5LmV4dGVuZCh7CisJY2FjaGU6IHt9LAorCisJLy8gUGxlYXNlIHVzZSB3
aXRoIGNhdXRpb24KKwl1dWlkOiAwLAorCisJLy8gVW5pcXVlIGZvciBlYWNoIGNvcHkgb2YgalF1
ZXJ5IG9uIHRoZSBwYWdlCisJLy8gTm9uLWRpZ2l0cyByZW1vdmVkIHRvIG1hdGNoIHJpbmxpbmVq
UXVlcnkKKwlleHBhbmRvOiAialF1ZXJ5IiArICggalF1ZXJ5LmZuLmpxdWVyeSArIE1hdGgucmFu
ZG9tKCkgKS5yZXBsYWNlKCAvXEQvZywgIiIgKSwKKworCS8vIFRoZSBmb2xsb3dpbmcgZWxlbWVu
dHMgdGhyb3cgdW5jYXRjaGFibGUgZXhjZXB0aW9ucyBpZiB5b3UKKwkvLyBhdHRlbXB0IHRvIGFk
ZCBleHBhbmRvIHByb3BlcnRpZXMgdG8gdGhlbS4KKwlub0RhdGE6IHsKKwkJImVtYmVkIjogdHJ1
ZSwKKwkJLy8gQmFuIGFsbCBvYmplY3RzIGV4Y2VwdCBmb3IgRmxhc2ggKHdoaWNoIGhhbmRsZSBl
eHBhbmRvcykKKwkJIm9iamVjdCI6ICJjbHNpZDpEMjdDREI2RS1BRTZELTExY2YtOTZCOC00NDQ1
NTM1NDAwMDAiLAorCQkiYXBwbGV0IjogdHJ1ZQorCX0sCisKKwloYXNEYXRhOiBmdW5jdGlvbigg
ZWxlbSApIHsKKwkJZWxlbSA9IGVsZW0ubm9kZVR5cGUgPyBqUXVlcnkuY2FjaGVbIGVsZW1balF1
ZXJ5LmV4cGFuZG9dIF0gOiBlbGVtWyBqUXVlcnkuZXhwYW5kbyBdOworCisJCXJldHVybiAhIWVs
ZW0gJiYgIWlzRW1wdHlEYXRhT2JqZWN0KCBlbGVtICk7CisJfSwKKworCWRhdGE6IGZ1bmN0aW9u
KCBlbGVtLCBuYW1lLCBkYXRhLCBwdnQgLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8gKSB7CisJCWlm
ICggIWpRdWVyeS5hY2NlcHREYXRhKCBlbGVtICkgKSB7CisJCQlyZXR1cm47CisJCX0KKworCQl2
YXIgaW50ZXJuYWxLZXkgPSBqUXVlcnkuZXhwYW5kbywgZ2V0QnlOYW1lID0gdHlwZW9mIG5hbWUg
PT09ICJzdHJpbmciLCB0aGlzQ2FjaGUsCisKKwkJCS8vIFdlIGhhdmUgdG8gaGFuZGxlIERPTSBu
b2RlcyBhbmQgSlMgb2JqZWN0cyBkaWZmZXJlbnRseSBiZWNhdXNlIElFNi03CisJCQkvLyBjYW4n
dCBHQyBvYmplY3QgcmVmZXJlbmNlcyBwcm9wZXJseSBhY3Jvc3MgdGhlIERPTS1KUyBib3VuZGFy
eQorCQkJaXNOb2RlID0gZWxlbS5ub2RlVHlwZSwKKworCQkJLy8gT25seSBET00gbm9kZXMgbmVl
ZCB0aGUgZ2xvYmFsIGpRdWVyeSBjYWNoZTsgSlMgb2JqZWN0IGRhdGEgaXMKKwkJCS8vIGF0dGFj
aGVkIGRpcmVjdGx5IHRvIHRoZSBvYmplY3Qgc28gR0MgY2FuIG9jY3VyIGF1dG9tYXRpY2FsbHkK
KwkJCWNhY2hlID0gaXNOb2RlID8galF1ZXJ5LmNhY2hlIDogZWxlbSwKKworCQkJLy8gT25seSBk
ZWZpbmluZyBhbiBJRCBmb3IgSlMgb2JqZWN0cyBpZiBpdHMgY2FjaGUgYWxyZWFkeSBleGlzdHMg
YWxsb3dzCisJCQkvLyB0aGUgY29kZSB0byBzaG9ydGN1dCBvbiB0aGUgc2FtZSBwYXRoIGFzIGEg
RE9NIG5vZGUgd2l0aCBubyBjYWNoZQorCQkJaWQgPSBpc05vZGUgPyBlbGVtWyBqUXVlcnkuZXhw
YW5kbyBdIDogZWxlbVsgalF1ZXJ5LmV4cGFuZG8gXSAmJiBqUXVlcnkuZXhwYW5kbzsKKworCQkv
LyBBdm9pZCBkb2luZyBhbnkgbW9yZSB3b3JrIHRoYW4gd2UgbmVlZCB0byB3aGVuIHRyeWluZyB0
byBnZXQgZGF0YSBvbiBhbgorCQkvLyBvYmplY3QgdGhhdCBoYXMgbm8gZGF0YSBhdCBhbGwKKwkJ
aWYgKCAoIWlkIHx8IChwdnQgJiYgaWQgJiYgIWNhY2hlWyBpZCBdWyBpbnRlcm5hbEtleSBdKSkg
JiYgZ2V0QnlOYW1lICYmIGRhdGEgPT09IHVuZGVmaW5lZCApIHsKKwkJCXJldHVybjsKKwkJfQor
CisJCWlmICggIWlkICkgeworCQkJLy8gT25seSBET00gbm9kZXMgbmVlZCBhIG5ldyB1bmlxdWUg
SUQgZm9yIGVhY2ggZWxlbWVudCBzaW5jZSB0aGVpciBkYXRhCisJCQkvLyBlbmRzIHVwIGluIHRo
ZSBnbG9iYWwgY2FjaGUKKwkJCWlmICggaXNOb2RlICkgeworCQkJCWVsZW1bIGpRdWVyeS5leHBh
bmRvIF0gPSBpZCA9ICsralF1ZXJ5LnV1aWQ7CisJCQl9IGVsc2UgeworCQkJCWlkID0galF1ZXJ5
LmV4cGFuZG87CisJCQl9CisJCX0KKworCQlpZiAoICFjYWNoZVsgaWQgXSApIHsKKwkJCWNhY2hl
WyBpZCBdID0ge307CisKKwkJCS8vIFRPRE86IFRoaXMgaXMgYSBoYWNrIGZvciAxLjUgT05MWS4g
QXZvaWRzIGV4cG9zaW5nIGpRdWVyeQorCQkJLy8gbWV0YWRhdGEgb24gcGxhaW4gSlMgb2JqZWN0
cyB3aGVuIHRoZSBvYmplY3QgaXMgc2VyaWFsaXplZCB1c2luZworCQkJLy8gSlNPTi5zdHJpbmdp
ZnkKKwkJCWlmICggIWlzTm9kZSApIHsKKwkJCQljYWNoZVsgaWQgXS50b0pTT04gPSBqUXVlcnku
bm9vcDsKKwkJCX0KKwkJfQorCisJCS8vIEFuIG9iamVjdCBjYW4gYmUgcGFzc2VkIHRvIGpRdWVy
eS5kYXRhIGluc3RlYWQgb2YgYSBrZXkvdmFsdWUgcGFpcjsgdGhpcyBnZXRzCisJCS8vIHNoYWxs
b3cgY29waWVkIG92ZXIgb250byB0aGUgZXhpc3RpbmcgY2FjaGUKKwkJaWYgKCB0eXBlb2YgbmFt
ZSA9PT0gIm9iamVjdCIgfHwgdHlwZW9mIG5hbWUgPT09ICJmdW5jdGlvbiIgKSB7CisJCQlpZiAo
IHB2dCApIHsKKwkJCQljYWNoZVsgaWQgXVsgaW50ZXJuYWxLZXkgXSA9IGpRdWVyeS5leHRlbmQo
Y2FjaGVbIGlkIF1bIGludGVybmFsS2V5IF0sIG5hbWUpOworCQkJfSBlbHNlIHsKKwkJCQljYWNo
ZVsgaWQgXSA9IGpRdWVyeS5leHRlbmQoY2FjaGVbIGlkIF0sIG5hbWUpOworCQkJfQorCQl9CisK
KwkJdGhpc0NhY2hlID0gY2FjaGVbIGlkIF07CisKKwkJLy8gSW50ZXJuYWwgalF1ZXJ5IGRhdGEg
aXMgc3RvcmVkIGluIGEgc2VwYXJhdGUgb2JqZWN0IGluc2lkZSB0aGUgb2JqZWN0J3MgZGF0YQor
CQkvLyBjYWNoZSBpbiBvcmRlciB0byBhdm9pZCBrZXkgY29sbGlzaW9ucyBiZXR3ZWVuIGludGVy
bmFsIGRhdGEgYW5kIHVzZXItZGVmaW5lZAorCQkvLyBkYXRhCisJCWlmICggcHZ0ICkgeworCQkJ
aWYgKCAhdGhpc0NhY2hlWyBpbnRlcm5hbEtleSBdICkgeworCQkJCXRoaXNDYWNoZVsgaW50ZXJu
YWxLZXkgXSA9IHt9OworCQkJfQorCisJCQl0aGlzQ2FjaGUgPSB0aGlzQ2FjaGVbIGludGVybmFs
S2V5IF07CisJCX0KKworCQlpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHsKKwkJCXRoaXNDYWNo
ZVsgbmFtZSBdID0gZGF0YTsKKwkJfQorCisJCS8vIFRPRE86IFRoaXMgaXMgYSBoYWNrIGZvciAx
LjUgT05MWS4gSXQgd2lsbCBiZSByZW1vdmVkIGluIDEuNi4gVXNlcnMgc2hvdWxkCisJCS8vIG5v
dCBhdHRlbXB0IHRvIGluc3BlY3QgdGhlIGludGVybmFsIGV2ZW50cyBvYmplY3QgdXNpbmcgalF1
ZXJ5LmRhdGEsIGFzIHRoaXMKKwkJLy8gaW50ZXJuYWwgZGF0YSBvYmplY3QgaXMgdW5kb2N1bWVu
dGVkIGFuZCBzdWJqZWN0IHRvIGNoYW5nZS4KKwkJaWYgKCBuYW1lID09PSAiZXZlbnRzIiAmJiAh
dGhpc0NhY2hlW25hbWVdICkgeworCQkJcmV0dXJuIHRoaXNDYWNoZVsgaW50ZXJuYWxLZXkgXSAm
JiB0aGlzQ2FjaGVbIGludGVybmFsS2V5IF0uZXZlbnRzOworCQl9CisKKwkJcmV0dXJuIGdldEJ5
TmFtZSA/IHRoaXNDYWNoZVsgbmFtZSBdIDogdGhpc0NhY2hlOworCX0sCisKKwlyZW1vdmVEYXRh
OiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgcHZ0IC8qIEludGVybmFsIFVzZSBPbmx5ICovICkgewor
CQlpZiAoICFqUXVlcnkuYWNjZXB0RGF0YSggZWxlbSApICkgeworCQkJcmV0dXJuOworCQl9CisK
KwkJdmFyIGludGVybmFsS2V5ID0galF1ZXJ5LmV4cGFuZG8sIGlzTm9kZSA9IGVsZW0ubm9kZVR5
cGUsCisKKwkJCS8vIFNlZSBqUXVlcnkuZGF0YSBmb3IgbW9yZSBpbmZvcm1hdGlvbgorCQkJY2Fj
aGUgPSBpc05vZGUgPyBqUXVlcnkuY2FjaGUgOiBlbGVtLAorCisJCQkvLyBTZWUgalF1ZXJ5LmRh
dGEgZm9yIG1vcmUgaW5mb3JtYXRpb24KKwkJCWlkID0gaXNOb2RlID8gZWxlbVsgalF1ZXJ5LmV4
cGFuZG8gXSA6IGpRdWVyeS5leHBhbmRvOworCisJCS8vIElmIHRoZXJlIGlzIGFscmVhZHkgbm8g
Y2FjaGUgZW50cnkgZm9yIHRoaXMgb2JqZWN0LCB0aGVyZSBpcyBubworCQkvLyBwdXJwb3NlIGlu
IGNvbnRpbnVpbmcKKwkJaWYgKCAhY2FjaGVbIGlkIF0gKSB7CisJCQlyZXR1cm47CisJCX0KKwor
CQlpZiAoIG5hbWUgKSB7CisJCQl2YXIgdGhpc0NhY2hlID0gcHZ0ID8gY2FjaGVbIGlkIF1bIGlu
dGVybmFsS2V5IF0gOiBjYWNoZVsgaWQgXTsKKworCQkJaWYgKCB0aGlzQ2FjaGUgKSB7CisJCQkJ
ZGVsZXRlIHRoaXNDYWNoZVsgbmFtZSBdOworCisJCQkJLy8gSWYgdGhlcmUgaXMgbm8gZGF0YSBs
ZWZ0IGluIHRoZSBjYWNoZSwgd2Ugd2FudCB0byBjb250aW51ZQorCQkJCS8vIGFuZCBsZXQgdGhl
IGNhY2hlIG9iamVjdCBpdHNlbGYgZ2V0IGRlc3Ryb3llZAorCQkJCWlmICggIWlzRW1wdHlEYXRh
T2JqZWN0KHRoaXNDYWNoZSkgKSB7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQl9CisJCX0KKwor
CQkvLyBTZWUgalF1ZXJ5LmRhdGEgZm9yIG1vcmUgaW5mb3JtYXRpb24KKwkJaWYgKCBwdnQgKSB7
CisJCQlkZWxldGUgY2FjaGVbIGlkIF1bIGludGVybmFsS2V5IF07CisKKwkJCS8vIERvbid0IGRl
c3Ryb3kgdGhlIHBhcmVudCBjYWNoZSB1bmxlc3MgdGhlIGludGVybmFsIGRhdGEgb2JqZWN0CisJ
CQkvLyBoYWQgYmVlbiB0aGUgb25seSB0aGluZyBsZWZ0IGluIGl0CisJCQlpZiAoICFpc0VtcHR5
RGF0YU9iamVjdChjYWNoZVsgaWQgXSkgKSB7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisKKwkJ
dmFyIGludGVybmFsQ2FjaGUgPSBjYWNoZVsgaWQgXVsgaW50ZXJuYWxLZXkgXTsKKworCQkvLyBC
cm93c2VycyB0aGF0IGZhaWwgZXhwYW5kbyBkZWxldGlvbiBhbHNvIHJlZnVzZSB0byBkZWxldGUg
ZXhwYW5kb3Mgb24KKwkJLy8gdGhlIHdpbmRvdywgYnV0IGl0IHdpbGwgYWxsb3cgaXQgb24gYWxs
IG90aGVyIEpTIG9iamVjdHM7IG90aGVyIGJyb3dzZXJzCisJCS8vIGRvbid0IGNhcmUKKwkJaWYg
KCBqUXVlcnkuc3VwcG9ydC5kZWxldGVFeHBhbmRvIHx8IGNhY2hlICE9IHdpbmRvdyApIHsKKwkJ
CWRlbGV0ZSBjYWNoZVsgaWQgXTsKKwkJfSBlbHNlIHsKKwkJCWNhY2hlWyBpZCBdID0gbnVsbDsK
KwkJfQorCisJCS8vIFdlIGRlc3Ryb3llZCB0aGUgZW50aXJlIHVzZXIgY2FjaGUgYXQgb25jZSBi
ZWNhdXNlIGl0J3MgZmFzdGVyIHRoYW4KKwkJLy8gaXRlcmF0aW5nIHRocm91Z2ggZWFjaCBrZXks
IGJ1dCB3ZSBuZWVkIHRvIGNvbnRpbnVlIHRvIHBlcnNpc3QgaW50ZXJuYWwKKwkJLy8gZGF0YSBp
ZiBpdCBleGlzdGVkCisJCWlmICggaW50ZXJuYWxDYWNoZSApIHsKKwkJCWNhY2hlWyBpZCBdID0g
e307CisJCQkvLyBUT0RPOiBUaGlzIGlzIGEgaGFjayBmb3IgMS41IE9OTFkuIEF2b2lkcyBleHBv
c2luZyBqUXVlcnkKKwkJCS8vIG1ldGFkYXRhIG9uIHBsYWluIEpTIG9iamVjdHMgd2hlbiB0aGUg
b2JqZWN0IGlzIHNlcmlhbGl6ZWQgdXNpbmcKKwkJCS8vIEpTT04uc3RyaW5naWZ5CisJCQlpZiAo
ICFpc05vZGUgKSB7CisJCQkJY2FjaGVbIGlkIF0udG9KU09OID0galF1ZXJ5Lm5vb3A7CisJCQl9
CisKKwkJCWNhY2hlWyBpZCBdWyBpbnRlcm5hbEtleSBdID0gaW50ZXJuYWxDYWNoZTsKKworCQkv
LyBPdGhlcndpc2UsIHdlIG5lZWQgdG8gZWxpbWluYXRlIHRoZSBleHBhbmRvIG9uIHRoZSBub2Rl
IHRvIGF2b2lkCisJCS8vIGZhbHNlIGxvb2t1cHMgaW4gdGhlIGNhY2hlIGZvciBlbnRyaWVzIHRo
YXQgbm8gbG9uZ2VyIGV4aXN0CisJCX0gZWxzZSBpZiAoIGlzTm9kZSApIHsKKwkJCS8vIElFIGRv
ZXMgbm90IGFsbG93IHVzIHRvIGRlbGV0ZSBleHBhbmRvIHByb3BlcnRpZXMgZnJvbSBub2RlcywK
KwkJCS8vIG5vciBkb2VzIGl0IGhhdmUgYSByZW1vdmVBdHRyaWJ1dGUgZnVuY3Rpb24gb24gRG9j
dW1lbnQgbm9kZXM7CisJCQkvLyB3ZSBtdXN0IGhhbmRsZSBhbGwgb2YgdGhlc2UgY2FzZXMKKwkJ
CWlmICggalF1ZXJ5LnN1cHBvcnQuZGVsZXRlRXhwYW5kbyApIHsKKwkJCQlkZWxldGUgZWxlbVsg
alF1ZXJ5LmV4cGFuZG8gXTsKKwkJCX0gZWxzZSBpZiAoIGVsZW0ucmVtb3ZlQXR0cmlidXRlICkg
eworCQkJCWVsZW0ucmVtb3ZlQXR0cmlidXRlKCBqUXVlcnkuZXhwYW5kbyApOworCQkJfSBlbHNl
IHsKKwkJCQllbGVtWyBqUXVlcnkuZXhwYW5kbyBdID0gbnVsbDsKKwkJCX0KKwkJfQorCX0sCisK
KwkvLyBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCisJX2RhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1l
LCBkYXRhICkgeworCQlyZXR1cm4galF1ZXJ5LmRhdGEoIGVsZW0sIG5hbWUsIGRhdGEsIHRydWUg
KTsKKwl9LAorCisJLy8gQSBtZXRob2QgZm9yIGRldGVybWluaW5nIGlmIGEgRE9NIG5vZGUgY2Fu
IGhhbmRsZSB0aGUgZGF0YSBleHBhbmRvCisJYWNjZXB0RGF0YTogZnVuY3Rpb24oIGVsZW0gKSB7
CisJCWlmICggZWxlbS5ub2RlTmFtZSApIHsKKwkJCXZhciBtYXRjaCA9IGpRdWVyeS5ub0RhdGFb
IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdOworCisJCQlpZiAoIG1hdGNoICkgeworCQkJ
CXJldHVybiAhKG1hdGNoID09PSB0cnVlIHx8IGVsZW0uZ2V0QXR0cmlidXRlKCJjbGFzc2lkIikg
IT09IG1hdGNoKTsKKwkJCX0KKwkJfQorCisJCXJldHVybiB0cnVlOworCX0KK30pOworCitqUXVl
cnkuZm4uZXh0ZW5kKHsKKwlkYXRhOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHsKKwkJdmFyIGRh
dGEgPSBudWxsOworCisJCWlmICggdHlwZW9mIGtleSA9PT0gInVuZGVmaW5lZCIgKSB7CisJCQlp
ZiAoIHRoaXMubGVuZ3RoICkgeworCQkJCWRhdGEgPSBqUXVlcnkuZGF0YSggdGhpc1swXSApOwor
CisJCQkJaWYgKCB0aGlzWzBdLm5vZGVUeXBlID09PSAxICkgeworCQkJCQl2YXIgYXR0ciA9IHRo
aXNbMF0uYXR0cmlidXRlcywgbmFtZTsKKwkJCQkJZm9yICggdmFyIGkgPSAwLCBsID0gYXR0ci5s
ZW5ndGg7IGkgPCBsOyBpKysgKSB7CisJCQkJCQluYW1lID0gYXR0cltpXS5uYW1lOworCisJCQkJ
CQlpZiAoIG5hbWUuaW5kZXhPZiggImRhdGEtIiApID09PSAwICkgeworCQkJCQkJCW5hbWUgPSBu
YW1lLnN1YnN0ciggNSApOworCQkJCQkJCWRhdGFBdHRyKCB0aGlzWzBdLCBuYW1lLCBkYXRhWyBu
YW1lIF0gKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJcmV0dXJuIGRhdGE7
CisKKwkJfSBlbHNlIGlmICggdHlwZW9mIGtleSA9PT0gIm9iamVjdCIgKSB7CisJCQlyZXR1cm4g
dGhpcy5lYWNoKGZ1bmN0aW9uKCkgeworCQkJCWpRdWVyeS5kYXRhKCB0aGlzLCBrZXkgKTsKKwkJ
CX0pOworCQl9CisKKwkJdmFyIHBhcnRzID0ga2V5LnNwbGl0KCIuIik7CisJCXBhcnRzWzFdID0g
cGFydHNbMV0gPyAiLiIgKyBwYXJ0c1sxXSA6ICIiOworCisJCWlmICggdmFsdWUgPT09IHVuZGVm
aW5lZCApIHsKKwkJCWRhdGEgPSB0aGlzLnRyaWdnZXJIYW5kbGVyKCJnZXREYXRhIiArIHBhcnRz
WzFdICsgIiEiLCBbcGFydHNbMF1dKTsKKworCQkJLy8gVHJ5IHRvIGZldGNoIGFueSBpbnRlcm5h
bGx5IHN0b3JlZCBkYXRhIGZpcnN0CisJCQlpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiB0aGlz
Lmxlbmd0aCApIHsKKwkJCQlkYXRhID0galF1ZXJ5LmRhdGEoIHRoaXNbMF0sIGtleSApOworCQkJ
CWRhdGEgPSBkYXRhQXR0ciggdGhpc1swXSwga2V5LCBkYXRhICk7CisJCQl9CisKKwkJCXJldHVy
biBkYXRhID09PSB1bmRlZmluZWQgJiYgcGFydHNbMV0gPworCQkJCXRoaXMuZGF0YSggcGFydHNb
MF0gKSA6CisJCQkJZGF0YTsKKworCQl9IGVsc2UgeworCQkJcmV0dXJuIHRoaXMuZWFjaChmdW5j
dGlvbigpIHsKKwkJCQl2YXIgJHRoaXMgPSBqUXVlcnkoIHRoaXMgKSwKKwkJCQkJYXJncyA9IFsg
cGFydHNbMF0sIHZhbHVlIF07CisKKwkJCQkkdGhpcy50cmlnZ2VySGFuZGxlciggInNldERhdGEi
ICsgcGFydHNbMV0gKyAiISIsIGFyZ3MgKTsKKwkJCQlqUXVlcnkuZGF0YSggdGhpcywga2V5LCB2
YWx1ZSApOworCQkJCSR0aGlzLnRyaWdnZXJIYW5kbGVyKCAiY2hhbmdlRGF0YSIgKyBwYXJ0c1sx
XSArICIhIiwgYXJncyApOworCQkJfSk7CisJCX0KKwl9LAorCisJcmVtb3ZlRGF0YTogZnVuY3Rp
b24oIGtleSApIHsKKwkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKKwkJCWpRdWVyeS5y
ZW1vdmVEYXRhKCB0aGlzLCBrZXkgKTsKKwkJfSk7CisJfQorfSk7CisKK2Z1bmN0aW9uIGRhdGFB
dHRyKCBlbGVtLCBrZXksIGRhdGEgKSB7CisJLy8gSWYgbm90aGluZyB3YXMgZm91bmQgaW50ZXJu
YWxseSwgdHJ5IHRvIGZldGNoIGFueQorCS8vIGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0
dHJpYnV0ZQorCWlmICggZGF0YSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEg
KSB7CisJCWRhdGEgPSBlbGVtLmdldEF0dHJpYnV0ZSggImRhdGEtIiArIGtleSApOworCisJCWlm
ICggdHlwZW9mIGRhdGEgPT09ICJzdHJpbmciICkgeworCQkJdHJ5IHsKKwkJCQlkYXRhID0gZGF0
YSA9PT0gInRydWUiID8gdHJ1ZSA6CisJCQkJZGF0YSA9PT0gImZhbHNlIiA/IGZhbHNlIDoKKwkJ
CQlkYXRhID09PSAibnVsbCIgPyBudWxsIDoKKwkJCQkhalF1ZXJ5LmlzTmFOKCBkYXRhICkgPyBw
YXJzZUZsb2F0KCBkYXRhICkgOgorCQkJCQlyYnJhY2UudGVzdCggZGF0YSApID8galF1ZXJ5LnBh
cnNlSlNPTiggZGF0YSApIDoKKwkJCQkJZGF0YTsKKwkJCX0gY2F0Y2goIGUgKSB7fQorCisJCQkv
LyBNYWtlIHN1cmUgd2Ugc2V0IHRoZSBkYXRhIHNvIGl0IGlzbid0IGNoYW5nZWQgbGF0ZXIKKwkJ
CWpRdWVyeS5kYXRhKCBlbGVtLCBrZXksIGRhdGEgKTsKKworCQl9IGVsc2UgeworCQkJZGF0YSA9
IHVuZGVmaW5lZDsKKwkJfQorCX0KKworCXJldHVybiBkYXRhOworfQorCisvLyBUT0RPOiBUaGlz
IGlzIGEgaGFjayBmb3IgMS41IE9OTFkgdG8gYWxsb3cgb2JqZWN0cyB3aXRoIGEgc2luZ2xlIHRv
SlNPTgorLy8gcHJvcGVydHkgdG8gYmUgY29uc2lkZXJlZCBlbXB0eSBvYmplY3RzOyB0aGlzIHBy
b3BlcnR5IGFsd2F5cyBleGlzdHMgaW4KKy8vIG9yZGVyIHRvIG1ha2Ugc3VyZSBKU09OLnN0cmlu
Z2lmeSBkb2VzIG5vdCBleHBvc2UgaW50ZXJuYWwgbWV0YWRhdGEKK2Z1bmN0aW9uIGlzRW1wdHlE
YXRhT2JqZWN0KCBvYmogKSB7CisJZm9yICggdmFyIG5hbWUgaW4gb2JqICkgeworCQlpZiAoIG5h
bWUgIT09ICJ0b0pTT04iICkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCisJcmV0dXJu
IHRydWU7Cit9CisKK30pKCBqUXVlcnkgKTsKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRl
c3RzL2pxdWVyeS9yZXNvdXJjZXMvc3JjL2RhdGEuanMKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ct
dGFicwogICArIHllcwoKSW5kZXg6IExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvc3JjL2Rl
ZmVycmVkLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvc3Jj
L2RlZmVycmVkLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNl
cy9zcmMvZGVmZXJyZWQuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTY5IEBACisoZnVuY3Rp
b24oIGpRdWVyeSApIHsKKwordmFyIC8vIFByb21pc2UgbWV0aG9kcworCXByb21pc2VNZXRob2Rz
ID0gInRoZW4gZG9uZSBmYWlsIGlzUmVzb2x2ZWQgaXNSZWplY3RlZCBwcm9taXNlIi5zcGxpdCgg
IiAiICksCisJLy8gU3RhdGljIHJlZmVyZW5jZSB0byBzbGljZQorCXNsaWNlRGVmZXJyZWQgPSBb
XS5zbGljZTsKKworalF1ZXJ5LmV4dGVuZCh7CisJLy8gQ3JlYXRlIGEgc2ltcGxlIGRlZmVycmVk
IChvbmUgY2FsbGJhY2tzIGxpc3QpCisJX0RlZmVycmVkOiBmdW5jdGlvbigpIHsKKwkJdmFyIC8v
IGNhbGxiYWNrcyBsaXN0CisJCQljYWxsYmFja3MgPSBbXSwKKwkJCS8vIHN0b3JlZCBbIGNvbnRl
eHQgLCBhcmdzIF0KKwkJCWZpcmVkLAorCQkJLy8gdG8gYXZvaWQgZmlyaW5nIHdoZW4gYWxyZWFk
eSBkb2luZyBzbworCQkJZmlyaW5nLAorCQkJLy8gZmxhZyB0byBrbm93IGlmIHRoZSBkZWZlcnJl
ZCBoYXMgYmVlbiBjYW5jZWxsZWQKKwkJCWNhbmNlbGxlZCwKKwkJCS8vIHRoZSBkZWZlcnJlZCBp
dHNlbGYKKwkJCWRlZmVycmVkICA9IHsKKworCQkJCS8vIGRvbmUoIGYxLCBmMiwgLi4uKQorCQkJ
CWRvbmU6IGZ1bmN0aW9uKCkgeworCQkJCQlpZiAoICFjYW5jZWxsZWQgKSB7CisJCQkJCQl2YXIg
YXJncyA9IGFyZ3VtZW50cywKKwkJCQkJCQlpLAorCQkJCQkJCWxlbmd0aCwKKwkJCQkJCQllbGVt
LAorCQkJCQkJCXR5cGUsCisJCQkJCQkJX2ZpcmVkOworCQkJCQkJaWYgKCBmaXJlZCApIHsKKwkJ
CQkJCQlfZmlyZWQgPSBmaXJlZDsKKwkJCQkJCQlmaXJlZCA9IDA7CisJCQkJCQl9CisJCQkJCQlm
b3IgKCBpID0gMCwgbGVuZ3RoID0gYXJncy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKyApIHsKKwkJ
CQkJCQllbGVtID0gYXJnc1sgaSBdOworCQkJCQkJCXR5cGUgPSBqUXVlcnkudHlwZSggZWxlbSAp
OworCQkJCQkJCWlmICggdHlwZSA9PT0gImFycmF5IiApIHsKKwkJCQkJCQkJZGVmZXJyZWQuZG9u
ZS5hcHBseSggZGVmZXJyZWQsIGVsZW0gKTsKKwkJCQkJCQl9IGVsc2UgaWYgKCB0eXBlID09PSAi
ZnVuY3Rpb24iICkgeworCQkJCQkJCQljYWxsYmFja3MucHVzaCggZWxlbSApOworCQkJCQkJCX0K
KwkJCQkJCX0KKwkJCQkJCWlmICggX2ZpcmVkICkgeworCQkJCQkJCWRlZmVycmVkLnJlc29sdmVX
aXRoKCBfZmlyZWRbIDAgXSwgX2ZpcmVkWyAxIF0gKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQly
ZXR1cm4gdGhpczsKKwkJCQl9LAorCisJCQkJLy8gcmVzb2x2ZSB3aXRoIGdpdmVuIGNvbnRleHQg
YW5kIGFyZ3MKKwkJCQlyZXNvbHZlV2l0aDogZnVuY3Rpb24oIGNvbnRleHQsIGFyZ3MgKSB7CisJ
CQkJCWlmICggIWNhbmNlbGxlZCAmJiAhZmlyZWQgJiYgIWZpcmluZyApIHsKKwkJCQkJCS8vIG1h
a2Ugc3VyZSBhcmdzIGFyZSBhdmFpbGFibGUgKCM4NDIxKQorCQkJCQkJYXJncyA9IGFyZ3MgfHwg
W107CisJCQkJCQlmaXJpbmcgPSAxOworCQkJCQkJdHJ5IHsKKwkJCQkJCQl3aGlsZSggY2FsbGJh
Y2tzWyAwIF0gKSB7CisJCQkJCQkJCWNhbGxiYWNrcy5zaGlmdCgpLmFwcGx5KCBjb250ZXh0LCBh
cmdzICk7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQkJZmluYWxseSB7CisJCQkJCQkJZmlyZWQg
PSBbIGNvbnRleHQsIGFyZ3MgXTsKKwkJCQkJCQlmaXJpbmcgPSAwOworCQkJCQkJfQorCQkJCQl9
CisJCQkJCXJldHVybiB0aGlzOworCQkJCX0sCisKKwkJCQkvLyByZXNvbHZlIHdpdGggdGhpcyBh
cyBjb250ZXh0IGFuZCBnaXZlbiBhcmd1bWVudHMKKwkJCQlyZXNvbHZlOiBmdW5jdGlvbigpIHsK
KwkJCQkJZGVmZXJyZWQucmVzb2x2ZVdpdGgoIHRoaXMsIGFyZ3VtZW50cyApOworCQkJCQlyZXR1
cm4gdGhpczsKKwkJCQl9LAorCisJCQkJLy8gSGFzIHRoaXMgZGVmZXJyZWQgYmVlbiByZXNvbHZl
ZD8KKwkJCQlpc1Jlc29sdmVkOiBmdW5jdGlvbigpIHsKKwkJCQkJcmV0dXJuICEhKCBmaXJpbmcg
fHwgZmlyZWQgKTsKKwkJCQl9LAorCisJCQkJLy8gQ2FuY2VsCisJCQkJY2FuY2VsOiBmdW5jdGlv
bigpIHsKKwkJCQkJY2FuY2VsbGVkID0gMTsKKwkJCQkJY2FsbGJhY2tzID0gW107CisJCQkJCXJl
dHVybiB0aGlzOworCQkJCX0KKwkJCX07CisKKwkJcmV0dXJuIGRlZmVycmVkOworCX0sCisKKwkv
LyBGdWxsIGZsZWRnZWQgZGVmZXJyZWQgKHR3byBjYWxsYmFja3MgbGlzdCkKKwlEZWZlcnJlZDog
ZnVuY3Rpb24oIGZ1bmMgKSB7CisJCXZhciBkZWZlcnJlZCA9IGpRdWVyeS5fRGVmZXJyZWQoKSwK
KwkJCWZhaWxEZWZlcnJlZCA9IGpRdWVyeS5fRGVmZXJyZWQoKSwKKwkJCXByb21pc2U7CisJCS8v
IEFkZCBlcnJvckRlZmVycmVkIG1ldGhvZHMsIHRoZW4gYW5kIHByb21pc2UKKwkJalF1ZXJ5LmV4
dGVuZCggZGVmZXJyZWQsIHsKKwkJCXRoZW46IGZ1bmN0aW9uKCBkb25lQ2FsbGJhY2tzLCBmYWls
Q2FsbGJhY2tzICkgeworCQkJCWRlZmVycmVkLmRvbmUoIGRvbmVDYWxsYmFja3MgKS5mYWlsKCBm
YWlsQ2FsbGJhY2tzICk7CisJCQkJcmV0dXJuIHRoaXM7CisJCQl9LAorCQkJZmFpbDogZmFpbERl
ZmVycmVkLmRvbmUsCisJCQlyZWplY3RXaXRoOiBmYWlsRGVmZXJyZWQucmVzb2x2ZVdpdGgsCisJ
CQlyZWplY3Q6IGZhaWxEZWZlcnJlZC5yZXNvbHZlLAorCQkJaXNSZWplY3RlZDogZmFpbERlZmVy
cmVkLmlzUmVzb2x2ZWQsCisJCQkvLyBHZXQgYSBwcm9taXNlIGZvciB0aGlzIGRlZmVycmVkCisJ
CQkvLyBJZiBvYmogaXMgcHJvdmlkZWQsIHRoZSBwcm9taXNlIGFzcGVjdCBpcyBhZGRlZCB0byB0
aGUgb2JqZWN0CisJCQlwcm9taXNlOiBmdW5jdGlvbiggb2JqICkgeworCQkJCWlmICggb2JqID09
IG51bGwgKSB7CisJCQkJCWlmICggcHJvbWlzZSApIHsKKwkJCQkJCXJldHVybiBwcm9taXNlOwor
CQkJCQl9CisJCQkJCXByb21pc2UgPSBvYmogPSB7fTsKKwkJCQl9CisJCQkJdmFyIGkgPSBwcm9t
aXNlTWV0aG9kcy5sZW5ndGg7CisJCQkJd2hpbGUoIGktLSApIHsKKwkJCQkJb2JqWyBwcm9taXNl
TWV0aG9kc1tpXSBdID0gZGVmZXJyZWRbIHByb21pc2VNZXRob2RzW2ldIF07CisJCQkJfQorCQkJ
CXJldHVybiBvYmo7CisJCQl9CisJCX0gKTsKKwkJLy8gTWFrZSBzdXJlIG9ubHkgb25lIGNhbGxi
YWNrIGxpc3Qgd2lsbCBiZSB1c2VkCisJCWRlZmVycmVkLmRvbmUoIGZhaWxEZWZlcnJlZC5jYW5j
ZWwgKS5mYWlsKCBkZWZlcnJlZC5jYW5jZWwgKTsKKwkJLy8gVW5leHBvc2UgY2FuY2VsCisJCWRl
bGV0ZSBkZWZlcnJlZC5jYW5jZWw7CisJCS8vIENhbGwgZ2l2ZW4gZnVuYyBpZiBhbnkKKwkJaWYg
KCBmdW5jICkgeworCQkJZnVuYy5jYWxsKCBkZWZlcnJlZCwgZGVmZXJyZWQgKTsKKwkJfQorCQly
ZXR1cm4gZGVmZXJyZWQ7CisJfSwKKworCS8vIERlZmVycmVkIGhlbHBlcgorCXdoZW46IGZ1bmN0
aW9uKCBmaXJzdFBhcmFtICkgeworCQl2YXIgYXJncyA9IGFyZ3VtZW50cywKKwkJCWkgPSAwLAor
CQkJbGVuZ3RoID0gYXJncy5sZW5ndGgsCisJCQljb3VudCA9IGxlbmd0aCwKKwkJCWRlZmVycmVk
ID0gbGVuZ3RoIDw9IDEgJiYgZmlyc3RQYXJhbSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggZmlyc3RQ
YXJhbS5wcm9taXNlICkgPworCQkJCWZpcnN0UGFyYW0gOgorCQkJCWpRdWVyeS5EZWZlcnJlZCgp
OworCQlmdW5jdGlvbiByZXNvbHZlRnVuYyggaSApIHsKKwkJCXJldHVybiBmdW5jdGlvbiggdmFs
dWUgKSB7CisJCQkJYXJnc1sgaSBdID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBzbGljZURlZmVy
cmVkLmNhbGwoIGFyZ3VtZW50cywgMCApIDogdmFsdWU7CisJCQkJaWYgKCAhKCAtLWNvdW50ICkg
KSB7CisJCQkJCWRlZmVycmVkLnJlc29sdmVXaXRoKCBkZWZlcnJlZCwgYXJncyApOworCQkJCX0K
KwkJCX07CisJCX0KKwkJaWYgKCBsZW5ndGggPiAxICkgeworCQkJZm9yKCA7IGkgPCBsZW5ndGg7
IGkrKyApIHsKKwkJCQlpZiAoIGFyZ3NbIGkgXSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggYXJnc1sg
aSBdLnByb21pc2UgKSApIHsKKwkJCQkJYXJnc1sgaSBdLnByb21pc2UoKS50aGVuKCByZXNvbHZl
RnVuYyhpKSwgZGVmZXJyZWQucmVqZWN0ICk7CisJCQkJfSBlbHNlIHsKKwkJCQkJLS1jb3VudDsK
KwkJCQl9CisJCQl9CisJCQlpZiAoICFjb3VudCApIHsKKwkJCQlkZWZlcnJlZC5yZXNvbHZlV2l0
aCggZGVmZXJyZWQsIGFyZ3MgKTsKKwkJCX0KKwkJfSBlbHNlIGlmICggZGVmZXJyZWQgIT09IGZp
cnN0UGFyYW0gKSB7CisJCQlkZWZlcnJlZC5yZXNvbHZlV2l0aCggZGVmZXJyZWQsIGxlbmd0aCA/
IFsgZmlyc3RQYXJhbSBdIDogW10gKTsKKwkJfQorCQlyZXR1cm4gZGVmZXJyZWQucHJvbWlzZSgp
OworCX0KK30pOworCit9KSggalF1ZXJ5ICk7CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRU
ZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3NyYy9kZWZlcnJlZC5qcwpfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBh
bGxvdy10YWJzCiAgICsgeWVzCgpJbmRleDogTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy9z
cmMvZGltZW5zaW9ucy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3Vy
Y2VzL3NyYy9kaW1lbnNpb25zLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanF1ZXJ5
L3Jlc291cmNlcy9zcmMvZGltZW5zaW9ucy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NyBA
QAorKGZ1bmN0aW9uKCBqUXVlcnkgKSB7CisKKy8vIENyZWF0ZSBpbm5lckhlaWdodCwgaW5uZXJX
aWR0aCwgb3V0ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGggbWV0aG9kcworalF1ZXJ5LmVhY2goWyAi
SGVpZ2h0IiwgIldpZHRoIiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKKworCXZhciB0eXBlID0g
bmFtZS50b0xvd2VyQ2FzZSgpOworCisJLy8gaW5uZXJIZWlnaHQgYW5kIGlubmVyV2lkdGgKKwlq
UXVlcnkuZm5bImlubmVyIiArIG5hbWVdID0gZnVuY3Rpb24oKSB7CisJCXJldHVybiB0aGlzWzBd
ID8KKwkJCXBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoIHRoaXNbMF0sIHR5cGUsICJwYWRkaW5nIiAp
ICkgOgorCQkJbnVsbDsKKwl9OworCisJLy8gb3V0ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGgKKwlq
UXVlcnkuZm5bIm91dGVyIiArIG5hbWVdID0gZnVuY3Rpb24oIG1hcmdpbiApIHsKKwkJcmV0dXJu
IHRoaXNbMF0gPworCQkJcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyggdGhpc1swXSwgdHlwZSwgbWFy
Z2luID8gIm1hcmdpbiIgOiAiYm9yZGVyIiApICkgOgorCQkJbnVsbDsKKwl9OworCisJalF1ZXJ5
LmZuWyB0eXBlIF0gPSBmdW5jdGlvbiggc2l6ZSApIHsKKwkJLy8gR2V0IHdpbmRvdyB3aWR0aCBv
ciBoZWlnaHQKKwkJdmFyIGVsZW0gPSB0aGlzWzBdOworCQlpZiAoICFlbGVtICkgeworCQkJcmV0
dXJuIHNpemUgPT0gbnVsbCA/IG51bGwgOiB0aGlzOworCQl9CisKKwkJaWYgKCBqUXVlcnkuaXNG
dW5jdGlvbiggc2l6ZSApICkgeworCQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaSApIHsK
KwkJCQl2YXIgc2VsZiA9IGpRdWVyeSggdGhpcyApOworCQkJCXNlbGZbIHR5cGUgXSggc2l6ZS5j
YWxsKCB0aGlzLCBpLCBzZWxmWyB0eXBlIF0oKSApICk7CisJCQl9KTsKKwkJfQorCisJCWlmICgg
alF1ZXJ5LmlzV2luZG93KCBlbGVtICkgKSB7CisJCQkvLyBFdmVyeW9uZSBlbHNlIHVzZSBkb2N1
bWVudC5kb2N1bWVudEVsZW1lbnQgb3IgZG9jdW1lbnQuYm9keSBkZXBlbmRpbmcgb24gUXVpcmtz
IHZzIFN0YW5kYXJkcyBtb2RlCisJCQkvLyAzcmQgY29uZGl0aW9uIGFsbG93cyBOb2tpYSBzdXBw
b3J0LCBhcyBpdCBzdXBwb3J0cyB0aGUgZG9jRWxlbSBwcm9wIGJ1dCBub3QgQ1NTMUNvbXBhdAor
CQkJdmFyIGRvY0VsZW1Qcm9wID0gZWxlbS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbICJjbGll
bnQiICsgbmFtZSBdOworCQkJcmV0dXJuIGVsZW0uZG9jdW1lbnQuY29tcGF0TW9kZSA9PT0gIkNT
UzFDb21wYXQiICYmIGRvY0VsZW1Qcm9wIHx8CisJCQkJZWxlbS5kb2N1bWVudC5ib2R5WyAiY2xp
ZW50IiArIG5hbWUgXSB8fCBkb2NFbGVtUHJvcDsKKworCQkvLyBHZXQgZG9jdW1lbnQgd2lkdGgg
b3IgaGVpZ2h0CisJCX0gZWxzZSBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7CisJCQkvLyBF
aXRoZXIgc2Nyb2xsW1dpZHRoL0hlaWdodF0gb3Igb2Zmc2V0W1dpZHRoL0hlaWdodF0sIHdoaWNo
ZXZlciBpcyBncmVhdGVyCisJCQlyZXR1cm4gTWF0aC5tYXgoCisJCQkJZWxlbS5kb2N1bWVudEVs
ZW1lbnRbImNsaWVudCIgKyBuYW1lXSwKKwkJCQllbGVtLmJvZHlbInNjcm9sbCIgKyBuYW1lXSwg
ZWxlbS5kb2N1bWVudEVsZW1lbnRbInNjcm9sbCIgKyBuYW1lXSwKKwkJCQllbGVtLmJvZHlbIm9m
ZnNldCIgKyBuYW1lXSwgZWxlbS5kb2N1bWVudEVsZW1lbnRbIm9mZnNldCIgKyBuYW1lXQorCQkJ
KTsKKworCQkvLyBHZXQgb3Igc2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudAorCQl9
IGVsc2UgaWYgKCBzaXplID09PSB1bmRlZmluZWQgKSB7CisJCQl2YXIgb3JpZyA9IGpRdWVyeS5j
c3MoIGVsZW0sIHR5cGUgKSwKKwkJCQlyZXQgPSBwYXJzZUZsb2F0KCBvcmlnICk7CisKKwkJCXJl
dHVybiBqUXVlcnkuaXNOYU4oIHJldCApID8gb3JpZyA6IHJldDsKKworCQkvLyBTZXQgdGhlIHdp
ZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudCAoZGVmYXVsdCB0byBwaXhlbHMgaWYgdmFsdWUg
aXMgdW5pdGxlc3MpCisJCX0gZWxzZSB7CisJCQlyZXR1cm4gdGhpcy5jc3MoIHR5cGUsIHR5cGVv
ZiBzaXplID09PSAic3RyaW5nIiA/IHNpemUgOiBzaXplICsgInB4IiApOworCQl9CisJfTsKKwor
fSk7CisKK30pKCBqUXVlcnkgKTsKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2px
dWVyeS9yZXNvdXJjZXMvc3JjL2RpbWVuc2lvbnMuanMKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ct
dGFicwogICArIHllcwoKSW5kZXg6IExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvc3JjL2Vm
ZmVjdHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy9zcmMv
ZWZmZWN0cy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMv
c3JjL2VmZmVjdHMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTI4IEBACisoZnVuY3Rpb24o
IGpRdWVyeSApIHsKKwordmFyIGVsZW1kaXNwbGF5ID0ge30sCisJcmZ4dHlwZXMgPSAvXig/OnRv
Z2dsZXxzaG93fGhpZGUpJC8sCisJcmZ4bnVtID0gL14oWytcLV09KT8oW1xkKy5cLV0rKShbYS16
JV0qKSQvaSwKKwl0aW1lcklkLAorCWZ4QXR0cnMgPSBbCisJCS8vIGhlaWdodCBhbmltYXRpb25z
CisJCVsgImhlaWdodCIsICJtYXJnaW5Ub3AiLCAibWFyZ2luQm90dG9tIiwgInBhZGRpbmdUb3Ai
LCAicGFkZGluZ0JvdHRvbSIgXSwKKwkJLy8gd2lkdGggYW5pbWF0aW9ucworCQlbICJ3aWR0aCIs
ICJtYXJnaW5MZWZ0IiwgIm1hcmdpblJpZ2h0IiwgInBhZGRpbmdMZWZ0IiwgInBhZGRpbmdSaWdo
dCIgXSwKKwkJLy8gb3BhY2l0eSBhbmltYXRpb25zCisJCVsgIm9wYWNpdHkiIF0KKwldOworCitq
UXVlcnkuZm4uZXh0ZW5kKHsKKwlzaG93OiBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJh
Y2sgKSB7CisJCXZhciBlbGVtLCBkaXNwbGF5OworCisJCWlmICggc3BlZWQgfHwgc3BlZWQgPT09
IDAgKSB7CisJCQlyZXR1cm4gdGhpcy5hbmltYXRlKCBnZW5GeCgic2hvdyIsIDMpLCBzcGVlZCwg
ZWFzaW5nLCBjYWxsYmFjayk7CisKKwkJfSBlbHNlIHsKKwkJCWZvciAoIHZhciBpID0gMCwgaiA9
IHRoaXMubGVuZ3RoOyBpIDwgajsgaSsrICkgeworCQkJCWVsZW0gPSB0aGlzW2ldOworCQkJCWRp
c3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXk7CisKKwkJCQkvLyBSZXNldCB0aGUgaW5saW5lIGRp
c3BsYXkgb2YgdGhpcyBlbGVtZW50IHRvIGxlYXJuIGlmIGl0IGlzCisJCQkJLy8gYmVpbmcgaGlk
ZGVuIGJ5IGNhc2NhZGVkIHJ1bGVzIG9yIG5vdAorCQkJCWlmICggIWpRdWVyeS5fZGF0YShlbGVt
LCAib2xkZGlzcGxheSIpICYmIGRpc3BsYXkgPT09ICJub25lIiApIHsKKwkJCQkJZGlzcGxheSA9
IGVsZW0uc3R5bGUuZGlzcGxheSA9ICIiOworCQkJCX0KKworCQkJCS8vIFNldCBlbGVtZW50cyB3
aGljaCBoYXZlIGJlZW4gb3ZlcnJpZGRlbiB3aXRoIGRpc3BsYXk6IG5vbmUKKwkJCQkvLyBpbiBh
IHN0eWxlc2hlZXQgdG8gd2hhdGV2ZXIgdGhlIGRlZmF1bHQgYnJvd3NlciBzdHlsZSBpcworCQkJ
CS8vIGZvciBzdWNoIGFuIGVsZW1lbnQKKwkJCQlpZiAoIGRpc3BsYXkgPT09ICIiICYmIGpRdWVy
eS5jc3MoIGVsZW0sICJkaXNwbGF5IiApID09PSAibm9uZSIgKSB7CisJCQkJCWpRdWVyeS5fZGF0
YShlbGVtLCAib2xkZGlzcGxheSIsIGRlZmF1bHREaXNwbGF5KGVsZW0ubm9kZU5hbWUpKTsKKwkJ
CQl9CisJCQl9CisKKwkJCS8vIFNldCB0aGUgZGlzcGxheSBvZiBtb3N0IG9mIHRoZSBlbGVtZW50
cyBpbiBhIHNlY29uZCBsb29wCisJCQkvLyB0byBhdm9pZCB0aGUgY29uc3RhbnQgcmVmbG93CisJ
CQlmb3IgKCBpID0gMDsgaSA8IGo7IGkrKyApIHsKKwkJCQllbGVtID0gdGhpc1tpXTsKKwkJCQlk
aXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5OworCisJCQkJaWYgKCBkaXNwbGF5ID09PSAiIiB8
fCBkaXNwbGF5ID09PSAibm9uZSIgKSB7CisJCQkJCWVsZW0uc3R5bGUuZGlzcGxheSA9IGpRdWVy
eS5fZGF0YShlbGVtLCAib2xkZGlzcGxheSIpIHx8ICIiOworCQkJCX0KKwkJCX0KKworCQkJcmV0
dXJuIHRoaXM7CisJCX0KKwl9LAorCisJaGlkZTogZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNh
bGxiYWNrICkgeworCQlpZiAoIHNwZWVkIHx8IHNwZWVkID09PSAwICkgeworCQkJcmV0dXJuIHRo
aXMuYW5pbWF0ZSggZ2VuRngoImhpZGUiLCAzKSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2spOwor
CisJCX0gZWxzZSB7CisJCQlmb3IgKCB2YXIgaSA9IDAsIGogPSB0aGlzLmxlbmd0aDsgaSA8IGo7
IGkrKyApIHsKKwkJCQl2YXIgZGlzcGxheSA9IGpRdWVyeS5jc3MoIHRoaXNbaV0sICJkaXNwbGF5
IiApOworCisJCQkJaWYgKCBkaXNwbGF5ICE9PSAibm9uZSIgJiYgIWpRdWVyeS5fZGF0YSggdGhp
c1tpXSwgIm9sZGRpc3BsYXkiICkgKSB7CisJCQkJCWpRdWVyeS5fZGF0YSggdGhpc1tpXSwgIm9s
ZGRpc3BsYXkiLCBkaXNwbGF5ICk7CisJCQkJfQorCQkJfQorCisJCQkvLyBTZXQgdGhlIGRpc3Bs
YXkgb2YgdGhlIGVsZW1lbnRzIGluIGEgc2Vjb25kIGxvb3AKKwkJCS8vIHRvIGF2b2lkIHRoZSBj
b25zdGFudCByZWZsb3cKKwkJCWZvciAoIGkgPSAwOyBpIDwgajsgaSsrICkgeworCQkJCXRoaXNb
aV0uc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKwkJCX0KKworCQkJcmV0dXJuIHRoaXM7CisJCX0K
Kwl9LAorCisJLy8gU2F2ZSB0aGUgb2xkIHRvZ2dsZSBmdW5jdGlvbgorCV90b2dnbGU6IGpRdWVy
eS5mbi50b2dnbGUsCisKKwl0b2dnbGU6IGZ1bmN0aW9uKCBmbiwgZm4yLCBjYWxsYmFjayApIHsK
KwkJdmFyIGJvb2wgPSB0eXBlb2YgZm4gPT09ICJib29sZWFuIjsKKworCQlpZiAoIGpRdWVyeS5p
c0Z1bmN0aW9uKGZuKSAmJiBqUXVlcnkuaXNGdW5jdGlvbihmbjIpICkgeworCQkJdGhpcy5fdG9n
Z2xlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKKworCQl9IGVsc2UgaWYgKCBmbiA9PSBudWxs
IHx8IGJvb2wgKSB7CisJCQl0aGlzLmVhY2goZnVuY3Rpb24oKSB7CisJCQkJdmFyIHN0YXRlID0g
Ym9vbCA/IGZuIDogalF1ZXJ5KHRoaXMpLmlzKCI6aGlkZGVuIik7CisJCQkJalF1ZXJ5KHRoaXMp
WyBzdGF0ZSA/ICJzaG93IiA6ICJoaWRlIiBdKCk7CisJCQl9KTsKKworCQl9IGVsc2UgeworCQkJ
dGhpcy5hbmltYXRlKGdlbkZ4KCJ0b2dnbGUiLCAzKSwgZm4sIGZuMiwgY2FsbGJhY2spOworCQl9
CisKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWZhZGVUbzogZnVuY3Rpb24oIHNwZWVkLCB0bywg
ZWFzaW5nLCBjYWxsYmFjayApIHsKKwkJcmV0dXJuIHRoaXMuZmlsdGVyKCI6aGlkZGVuIikuY3Nz
KCJvcGFjaXR5IiwgMCkuc2hvdygpLmVuZCgpCisJCQkJCS5hbmltYXRlKHtvcGFjaXR5OiB0b30s
IHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrKTsKKwl9LAorCisJYW5pbWF0ZTogZnVuY3Rpb24oIHBy
b3AsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkgeworCQl2YXIgb3B0YWxsID0galF1ZXJ5LnNw
ZWVkKHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrKTsKKworCQlpZiAoIGpRdWVyeS5pc0VtcHR5T2Jq
ZWN0KCBwcm9wICkgKSB7CisJCQlyZXR1cm4gdGhpcy5lYWNoKCBvcHRhbGwuY29tcGxldGUgKTsK
KwkJfQorCisJCXJldHVybiB0aGlzWyBvcHRhbGwucXVldWUgPT09IGZhbHNlID8gImVhY2giIDog
InF1ZXVlIiBdKGZ1bmN0aW9uKCkgeworCQkJLy8gWFhYICd0aGlzJyBkb2VzIG5vdCBhbHdheXMg
aGF2ZSBhIG5vZGVOYW1lIHdoZW4gcnVubmluZyB0aGUKKwkJCS8vIHRlc3Qgc3VpdGUKKworCQkJ
dmFyIG9wdCA9IGpRdWVyeS5leHRlbmQoe30sIG9wdGFsbCksIHAsCisJCQkJaXNFbGVtZW50ID0g
dGhpcy5ub2RlVHlwZSA9PT0gMSwKKwkJCQloaWRkZW4gPSBpc0VsZW1lbnQgJiYgalF1ZXJ5KHRo
aXMpLmlzKCI6aGlkZGVuIiksCisJCQkJc2VsZiA9IHRoaXM7CisKKwkJCWZvciAoIHAgaW4gcHJv
cCApIHsKKwkJCQl2YXIgbmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIHAgKTsKKworCQkJCWlmICgg
cCAhPT0gbmFtZSApIHsKKwkJCQkJcHJvcFsgbmFtZSBdID0gcHJvcFsgcCBdOworCQkJCQlkZWxl
dGUgcHJvcFsgcCBdOworCQkJCQlwID0gbmFtZTsKKwkJCQl9CisKKwkJCQlpZiAoIHByb3BbcF0g
PT09ICJoaWRlIiAmJiBoaWRkZW4gfHwgcHJvcFtwXSA9PT0gInNob3ciICYmICFoaWRkZW4gKSB7
CisJCQkJCXJldHVybiBvcHQuY29tcGxldGUuY2FsbCh0aGlzKTsKKwkJCQl9CisKKwkJCQlpZiAo
IGlzRWxlbWVudCAmJiAoIHAgPT09ICJoZWlnaHQiIHx8IHAgPT09ICJ3aWR0aCIgKSApIHsKKwkJ
CQkJLy8gTWFrZSBzdXJlIHRoYXQgbm90aGluZyBzbmVha3Mgb3V0CisJCQkJCS8vIFJlY29yZCBh
bGwgMyBvdmVyZmxvdyBhdHRyaWJ1dGVzIGJlY2F1c2UgSUUgZG9lcyBub3QKKwkJCQkJLy8gY2hh
bmdlIHRoZSBvdmVyZmxvdyBhdHRyaWJ1dGUgd2hlbiBvdmVyZmxvd1ggYW5kCisJCQkJCS8vIG92
ZXJmbG93WSBhcmUgc2V0IHRvIHRoZSBzYW1lIHZhbHVlCisJCQkJCW9wdC5vdmVyZmxvdyA9IFsg
dGhpcy5zdHlsZS5vdmVyZmxvdywgdGhpcy5zdHlsZS5vdmVyZmxvd1gsIHRoaXMuc3R5bGUub3Zl
cmZsb3dZIF07CisKKwkJCQkJLy8gU2V0IGRpc3BsYXkgcHJvcGVydHkgdG8gaW5saW5lLWJsb2Nr
IGZvciBoZWlnaHQvd2lkdGgKKwkJCQkJLy8gYW5pbWF0aW9ucyBvbiBpbmxpbmUgZWxlbWVudHMg
dGhhdCBhcmUgaGF2aW5nIHdpZHRoL2hlaWdodAorCQkJCQkvLyBhbmltYXRlZAorCQkJCQlpZiAo
IGpRdWVyeS5jc3MoIHRoaXMsICJkaXNwbGF5IiApID09PSAiaW5saW5lIiAmJgorCQkJCQkJCWpR
dWVyeS5jc3MoIHRoaXMsICJmbG9hdCIgKSA9PT0gIm5vbmUiICkgeworCQkJCQkJaWYgKCAhalF1
ZXJ5LnN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dCApIHsKKwkJCQkJCQl0aGlzLnN0eWxl
LmRpc3BsYXkgPSAiaW5saW5lLWJsb2NrIjsKKworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQl2YXIg
ZGlzcGxheSA9IGRlZmF1bHREaXNwbGF5KHRoaXMubm9kZU5hbWUpOworCisJCQkJCQkJLy8gaW5s
aW5lLWxldmVsIGVsZW1lbnRzIGFjY2VwdCBpbmxpbmUtYmxvY2s7CisJCQkJCQkJLy8gYmxvY2st
bGV2ZWwgZWxlbWVudHMgbmVlZCB0byBiZSBpbmxpbmUgd2l0aCBsYXlvdXQKKwkJCQkJCQlpZiAo
IGRpc3BsYXkgPT09ICJpbmxpbmUiICkgeworCQkJCQkJCQl0aGlzLnN0eWxlLmRpc3BsYXkgPSAi
aW5saW5lLWJsb2NrIjsKKworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCXRoaXMuc3R5bGUuZGlz
cGxheSA9ICJpbmxpbmUiOworCQkJCQkJCQl0aGlzLnN0eWxlLnpvb20gPSAxOworCQkJCQkJCX0K
KwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKworCQkJCWlmICggalF1ZXJ5LmlzQXJyYXkoIHByb3Bb
cF0gKSApIHsKKwkJCQkJLy8gQ3JlYXRlIChpZiBuZWVkZWQpIGFuZCBhZGQgdG8gc3BlY2lhbEVh
c2luZworCQkJCQkob3B0LnNwZWNpYWxFYXNpbmcgPSBvcHQuc3BlY2lhbEVhc2luZyB8fCB7fSlb
cF0gPSBwcm9wW3BdWzFdOworCQkJCQlwcm9wW3BdID0gcHJvcFtwXVswXTsKKwkJCQl9CisJCQl9
CisKKwkJCWlmICggb3B0Lm92ZXJmbG93ICE9IG51bGwgKSB7CisJCQkJdGhpcy5zdHlsZS5vdmVy
ZmxvdyA9ICJoaWRkZW4iOworCQkJfQorCisJCQlvcHQuY3VyQW5pbSA9IGpRdWVyeS5leHRlbmQo
e30sIHByb3ApOworCisJCQlqUXVlcnkuZWFjaCggcHJvcCwgZnVuY3Rpb24oIG5hbWUsIHZhbCAp
IHsKKwkJCQl2YXIgZSA9IG5ldyBqUXVlcnkuZngoIHNlbGYsIG9wdCwgbmFtZSApOworCisJCQkJ
aWYgKCByZnh0eXBlcy50ZXN0KHZhbCkgKSB7CisJCQkJCWVbIHZhbCA9PT0gInRvZ2dsZSIgPyBo
aWRkZW4gPyAic2hvdyIgOiAiaGlkZSIgOiB2YWwgXSggcHJvcCApOworCisJCQkJfSBlbHNlIHsK
KwkJCQkJdmFyIHBhcnRzID0gcmZ4bnVtLmV4ZWModmFsKSwKKwkJCQkJCXN0YXJ0ID0gZS5jdXIo
KTsKKworCQkJCQlpZiAoIHBhcnRzICkgeworCQkJCQkJdmFyIGVuZCA9IHBhcnNlRmxvYXQoIHBh
cnRzWzJdICksCisJCQkJCQkJdW5pdCA9IHBhcnRzWzNdIHx8ICggalF1ZXJ5LmNzc051bWJlclsg
bmFtZSBdID8gIiIgOiAicHgiICk7CisKKwkJCQkJCS8vIFdlIG5lZWQgdG8gY29tcHV0ZSBzdGFy
dGluZyB2YWx1ZQorCQkJCQkJaWYgKCB1bml0ICE9PSAicHgiICkgeworCQkJCQkJCWpRdWVyeS5z
dHlsZSggc2VsZiwgbmFtZSwgKGVuZCB8fCAxKSArIHVuaXQpOworCQkJCQkJCXN0YXJ0ID0gKChl
bmQgfHwgMSkgLyBlLmN1cigpKSAqIHN0YXJ0OworCQkJCQkJCWpRdWVyeS5zdHlsZSggc2VsZiwg
bmFtZSwgc3RhcnQgKyB1bml0KTsKKwkJCQkJCX0KKworCQkJCQkJLy8gSWYgYSArPS8tPSB0b2tl
biB3YXMgcHJvdmlkZWQsIHdlJ3JlIGRvaW5nIGEgcmVsYXRpdmUgYW5pbWF0aW9uCisJCQkJCQlp
ZiAoIHBhcnRzWzFdICkgeworCQkJCQkJCWVuZCA9ICgocGFydHNbMV0gPT09ICItPSIgPyAtMSA6
IDEpICogZW5kKSArIHN0YXJ0OworCQkJCQkJfQorCisJCQkJCQllLmN1c3RvbSggc3RhcnQsIGVu
ZCwgdW5pdCApOworCisJCQkJCX0gZWxzZSB7CisJCQkJCQllLmN1c3RvbSggc3RhcnQsIHZhbCwg
IiIgKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0pOworCisJCQkvLyBGb3IgSlMgc3RyaWN0IGNvbXBs
aWFuY2UKKwkJCXJldHVybiB0cnVlOworCQl9KTsKKwl9LAorCisJc3RvcDogZnVuY3Rpb24oIGNs
ZWFyUXVldWUsIGdvdG9FbmQgKSB7CisJCXZhciB0aW1lcnMgPSBqUXVlcnkudGltZXJzOworCisJ
CWlmICggY2xlYXJRdWV1ZSApIHsKKwkJCXRoaXMucXVldWUoW10pOworCQl9CisKKwkJdGhpcy5l
YWNoKGZ1bmN0aW9uKCkgeworCQkJLy8gZ28gaW4gcmV2ZXJzZSBvcmRlciBzbyBhbnl0aGluZyBh
ZGRlZCB0byB0aGUgcXVldWUgZHVyaW5nIHRoZSBsb29wIGlzIGlnbm9yZWQKKwkJCWZvciAoIHZh
ciBpID0gdGltZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tICkgeworCQkJCWlmICggdGltZXJz
W2ldLmVsZW0gPT09IHRoaXMgKSB7CisJCQkJCWlmIChnb3RvRW5kKSB7CisJCQkJCQkvLyBmb3Jj
ZSB0aGUgbmV4dCBzdGVwIHRvIGJlIHRoZSBsYXN0CisJCQkJCQl0aW1lcnNbaV0odHJ1ZSk7CisJ
CQkJCX0KKworCQkJCQl0aW1lcnMuc3BsaWNlKGksIDEpOworCQkJCX0KKwkJCX0KKwkJfSk7CisK
KwkJLy8gc3RhcnQgdGhlIG5leHQgaW4gdGhlIHF1ZXVlIGlmIHRoZSBsYXN0IHN0ZXAgd2Fzbid0
IGZvcmNlZAorCQlpZiAoICFnb3RvRW5kICkgeworCQkJdGhpcy5kZXF1ZXVlKCk7CisJCX0KKwor
CQlyZXR1cm4gdGhpczsKKwl9CisKK30pOworCitmdW5jdGlvbiBnZW5GeCggdHlwZSwgbnVtICkg
eworCXZhciBvYmogPSB7fTsKKworCWpRdWVyeS5lYWNoKCBmeEF0dHJzLmNvbmNhdC5hcHBseShb
XSwgZnhBdHRycy5zbGljZSgwLG51bSkpLCBmdW5jdGlvbigpIHsKKwkJb2JqWyB0aGlzIF0gPSB0
eXBlOworCX0pOworCisJcmV0dXJuIG9iajsKK30KKworLy8gR2VuZXJhdGUgc2hvcnRjdXRzIGZv
ciBjdXN0b20gYW5pbWF0aW9ucworalF1ZXJ5LmVhY2goeworCXNsaWRlRG93bjogZ2VuRngoInNo
b3ciLCAxKSwKKwlzbGlkZVVwOiBnZW5GeCgiaGlkZSIsIDEpLAorCXNsaWRlVG9nZ2xlOiBnZW5G
eCgidG9nZ2xlIiwgMSksCisJZmFkZUluOiB7IG9wYWNpdHk6ICJzaG93IiB9LAorCWZhZGVPdXQ6
IHsgb3BhY2l0eTogImhpZGUiIH0sCisJZmFkZVRvZ2dsZTogeyBvcGFjaXR5OiAidG9nZ2xlIiB9
Cit9LCBmdW5jdGlvbiggbmFtZSwgcHJvcHMgKSB7CisJalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5j
dGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7CisJCXJldHVybiB0aGlzLmFuaW1hdGUo
IHByb3BzLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApOworCX07Cit9KTsKKworalF1ZXJ5LmV4
dGVuZCh7CisJc3BlZWQ6IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBmbiApIHsKKwkJdmFyIG9w
dCA9IHNwZWVkICYmIHR5cGVvZiBzcGVlZCA9PT0gIm9iamVjdCIgPyBqUXVlcnkuZXh0ZW5kKHt9
LCBzcGVlZCkgOiB7CisJCQljb21wbGV0ZTogZm4gfHwgIWZuICYmIGVhc2luZyB8fAorCQkJCWpR
dWVyeS5pc0Z1bmN0aW9uKCBzcGVlZCApICYmIHNwZWVkLAorCQkJZHVyYXRpb246IHNwZWVkLAor
CQkJZWFzaW5nOiBmbiAmJiBlYXNpbmcgfHwgZWFzaW5nICYmICFqUXVlcnkuaXNGdW5jdGlvbihl
YXNpbmcpICYmIGVhc2luZworCQl9OworCisJCW9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5vZmYg
PyAwIDogdHlwZW9mIG9wdC5kdXJhdGlvbiA9PT0gIm51bWJlciIgPyBvcHQuZHVyYXRpb24gOgor
CQkJb3B0LmR1cmF0aW9uIGluIGpRdWVyeS5meC5zcGVlZHMgPyBqUXVlcnkuZnguc3BlZWRzW29w
dC5kdXJhdGlvbl0gOiBqUXVlcnkuZnguc3BlZWRzLl9kZWZhdWx0OworCisJCS8vIFF1ZXVlaW5n
CisJCW9wdC5vbGQgPSBvcHQuY29tcGxldGU7CisJCW9wdC5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkg
eworCQkJaWYgKCBvcHQucXVldWUgIT09IGZhbHNlICkgeworCQkJCWpRdWVyeSh0aGlzKS5kZXF1
ZXVlKCk7CisJCQl9CisJCQlpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBvcHQub2xkICkgKSB7CisJ
CQkJb3B0Lm9sZC5jYWxsKCB0aGlzICk7CisJCQl9CisJCX07CisKKwkJcmV0dXJuIG9wdDsKKwl9
LAorCisJZWFzaW5nOiB7CisJCWxpbmVhcjogZnVuY3Rpb24oIHAsIG4sIGZpcnN0TnVtLCBkaWZm
ICkgeworCQkJcmV0dXJuIGZpcnN0TnVtICsgZGlmZiAqIHA7CisJCX0sCisJCXN3aW5nOiBmdW5j
dGlvbiggcCwgbiwgZmlyc3ROdW0sIGRpZmYgKSB7CisJCQlyZXR1cm4gKCgtTWF0aC5jb3MocCpN
YXRoLlBJKS8yKSArIDAuNSkgKiBkaWZmICsgZmlyc3ROdW07CisJCX0KKwl9LAorCisJdGltZXJz
OiBbXSwKKworCWZ4OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgcHJvcCApIHsKKwkJdGhpcy5v
cHRpb25zID0gb3B0aW9uczsKKwkJdGhpcy5lbGVtID0gZWxlbTsKKwkJdGhpcy5wcm9wID0gcHJv
cDsKKworCQlpZiAoICFvcHRpb25zLm9yaWcgKSB7CisJCQlvcHRpb25zLm9yaWcgPSB7fTsKKwkJ
fQorCX0KKworfSk7CisKK2pRdWVyeS5meC5wcm90b3R5cGUgPSB7CisJLy8gU2ltcGxlIGZ1bmN0
aW9uIGZvciBzZXR0aW5nIGEgc3R5bGUgdmFsdWUKKwl1cGRhdGU6IGZ1bmN0aW9uKCkgeworCQlp
ZiAoIHRoaXMub3B0aW9ucy5zdGVwICkgeworCQkJdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCggdGhp
cy5lbGVtLCB0aGlzLm5vdywgdGhpcyApOworCQl9CisKKwkJKGpRdWVyeS5meC5zdGVwW3RoaXMu
cHJvcF0gfHwgalF1ZXJ5LmZ4LnN0ZXAuX2RlZmF1bHQpKCB0aGlzICk7CisJfSwKKworCS8vIEdl
dCB0aGUgY3VycmVudCBzaXplCisJY3VyOiBmdW5jdGlvbigpIHsKKwkJaWYgKCB0aGlzLmVsZW1b
dGhpcy5wcm9wXSAhPSBudWxsICYmICghdGhpcy5lbGVtLnN0eWxlIHx8IHRoaXMuZWxlbS5zdHls
ZVt0aGlzLnByb3BdID09IG51bGwpICkgeworCQkJcmV0dXJuIHRoaXMuZWxlbVsgdGhpcy5wcm9w
IF07CisJCX0KKworCQl2YXIgcGFyc2VkLAorCQkJciA9IGpRdWVyeS5jc3MoIHRoaXMuZWxlbSwg
dGhpcy5wcm9wICk7CisJCS8vIEVtcHR5IHN0cmluZ3MsIG51bGwsIHVuZGVmaW5lZCBhbmQgImF1
dG8iIGFyZSBjb252ZXJ0ZWQgdG8gMCwKKwkJLy8gY29tcGxleCB2YWx1ZXMgc3VjaCBhcyAicm90
YXRlKDFyYWQpIiBhcmUgcmV0dXJuZWQgYXMgaXMsCisJCS8vIHNpbXBsZSB2YWx1ZXMgc3VjaCBh
cyAiMTBweCIgYXJlIHBhcnNlZCB0byBGbG9hdC4KKwkJcmV0dXJuIGlzTmFOKCBwYXJzZWQgPSBw
YXJzZUZsb2F0KCByICkgKSA/ICFyIHx8IHIgPT09ICJhdXRvIiA/IDAgOiByIDogcGFyc2VkOwor
CX0sCisKKwkvLyBTdGFydCBhbiBhbmltYXRpb24gZnJvbSBvbmUgbnVtYmVyIHRvIGFub3RoZXIK
KwljdXN0b206IGZ1bmN0aW9uKCBmcm9tLCB0bywgdW5pdCApIHsKKwkJdmFyIHNlbGYgPSB0aGlz
LAorCQkJZnggPSBqUXVlcnkuZng7CisKKwkJdGhpcy5zdGFydFRpbWUgPSBqUXVlcnkubm93KCk7
CisJCXRoaXMuc3RhcnQgPSBmcm9tOworCQl0aGlzLmVuZCA9IHRvOworCQl0aGlzLnVuaXQgPSB1
bml0IHx8IHRoaXMudW5pdCB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHRoaXMucHJvcCBdID8gIiIg
OiAicHgiICk7CisJCXRoaXMubm93ID0gdGhpcy5zdGFydDsKKwkJdGhpcy5wb3MgPSB0aGlzLnN0
YXRlID0gMDsKKworCQlmdW5jdGlvbiB0KCBnb3RvRW5kICkgeworCQkJcmV0dXJuIHNlbGYuc3Rl
cChnb3RvRW5kKTsKKwkJfQorCisJCXQuZWxlbSA9IHRoaXMuZWxlbTsKKworCQlpZiAoIHQoKSAm
JiBqUXVlcnkudGltZXJzLnB1c2godCkgJiYgIXRpbWVySWQgKSB7CisJCQl0aW1lcklkID0gc2V0
SW50ZXJ2YWwoZngudGljaywgZnguaW50ZXJ2YWwpOworCQl9CisJfSwKKworCS8vIFNpbXBsZSAn
c2hvdycgZnVuY3Rpb24KKwlzaG93OiBmdW5jdGlvbigpIHsKKwkJLy8gUmVtZW1iZXIgd2hlcmUg
d2Ugc3RhcnRlZCwgc28gdGhhdCB3ZSBjYW4gZ28gYmFjayB0byBpdCBsYXRlcgorCQl0aGlzLm9w
dGlvbnMub3JpZ1t0aGlzLnByb3BdID0galF1ZXJ5LnN0eWxlKCB0aGlzLmVsZW0sIHRoaXMucHJv
cCApOworCQl0aGlzLm9wdGlvbnMuc2hvdyA9IHRydWU7CisKKwkJLy8gQmVnaW4gdGhlIGFuaW1h
dGlvbgorCQkvLyBNYWtlIHN1cmUgdGhhdCB3ZSBzdGFydCBhdCBhIHNtYWxsIHdpZHRoL2hlaWdo
dCB0byBhdm9pZCBhbnkKKwkJLy8gZmxhc2ggb2YgY29udGVudAorCQl0aGlzLmN1c3RvbSh0aGlz
LnByb3AgPT09ICJ3aWR0aCIgfHwgdGhpcy5wcm9wID09PSAiaGVpZ2h0IiA/IDEgOiAwLCB0aGlz
LmN1cigpKTsKKworCQkvLyBTdGFydCBieSBzaG93aW5nIHRoZSBlbGVtZW50CisJCWpRdWVyeSgg
dGhpcy5lbGVtICkuc2hvdygpOworCX0sCisKKwkvLyBTaW1wbGUgJ2hpZGUnIGZ1bmN0aW9uCisJ
aGlkZTogZnVuY3Rpb24oKSB7CisJCS8vIFJlbWVtYmVyIHdoZXJlIHdlIHN0YXJ0ZWQsIHNvIHRo
YXQgd2UgY2FuIGdvIGJhY2sgdG8gaXQgbGF0ZXIKKwkJdGhpcy5vcHRpb25zLm9yaWdbdGhpcy5w
cm9wXSA9IGpRdWVyeS5zdHlsZSggdGhpcy5lbGVtLCB0aGlzLnByb3AgKTsKKwkJdGhpcy5vcHRp
b25zLmhpZGUgPSB0cnVlOworCisJCS8vIEJlZ2luIHRoZSBhbmltYXRpb24KKwkJdGhpcy5jdXN0
b20odGhpcy5jdXIoKSwgMCk7CisJfSwKKworCS8vIEVhY2ggc3RlcCBvZiBhbiBhbmltYXRpb24K
KwlzdGVwOiBmdW5jdGlvbiggZ290b0VuZCApIHsKKwkJdmFyIHQgPSBqUXVlcnkubm93KCksIGRv
bmUgPSB0cnVlOworCisJCWlmICggZ290b0VuZCB8fCB0ID49IHRoaXMub3B0aW9ucy5kdXJhdGlv
biArIHRoaXMuc3RhcnRUaW1lICkgeworCQkJdGhpcy5ub3cgPSB0aGlzLmVuZDsKKwkJCXRoaXMu
cG9zID0gdGhpcy5zdGF0ZSA9IDE7CisJCQl0aGlzLnVwZGF0ZSgpOworCisJCQl0aGlzLm9wdGlv
bnMuY3VyQW5pbVsgdGhpcy5wcm9wIF0gPSB0cnVlOworCisJCQlmb3IgKCB2YXIgaSBpbiB0aGlz
Lm9wdGlvbnMuY3VyQW5pbSApIHsKKwkJCQlpZiAoIHRoaXMub3B0aW9ucy5jdXJBbmltW2ldICE9
PSB0cnVlICkgeworCQkJCQlkb25lID0gZmFsc2U7CisJCQkJfQorCQkJfQorCisJCQlpZiAoIGRv
bmUgKSB7CisJCQkJLy8gUmVzZXQgdGhlIG92ZXJmbG93CisJCQkJaWYgKCB0aGlzLm9wdGlvbnMu
b3ZlcmZsb3cgIT0gbnVsbCAmJiAhalF1ZXJ5LnN1cHBvcnQuc2hyaW5rV3JhcEJsb2NrcyApIHsK
KwkJCQkJdmFyIGVsZW0gPSB0aGlzLmVsZW0sCisJCQkJCQlvcHRpb25zID0gdGhpcy5vcHRpb25z
OworCisJCQkJCWpRdWVyeS5lYWNoKCBbICIiLCAiWCIsICJZIiBdLCBmdW5jdGlvbiAoaW5kZXgs
IHZhbHVlKSB7CisJCQkJCQllbGVtLnN0eWxlWyAib3ZlcmZsb3ciICsgdmFsdWUgXSA9IG9wdGlv
bnMub3ZlcmZsb3dbaW5kZXhdOworCQkJCQl9ICk7CisJCQkJfQorCisJCQkJLy8gSGlkZSB0aGUg
ZWxlbWVudCBpZiB0aGUgImhpZGUiIG9wZXJhdGlvbiB3YXMgZG9uZQorCQkJCWlmICggdGhpcy5v
cHRpb25zLmhpZGUgKSB7CisJCQkJCWpRdWVyeSh0aGlzLmVsZW0pLmhpZGUoKTsKKwkJCQl9CisK
KwkJCQkvLyBSZXNldCB0aGUgcHJvcGVydGllcywgaWYgdGhlIGl0ZW0gaGFzIGJlZW4gaGlkZGVu
IG9yIHNob3duCisJCQkJaWYgKCB0aGlzLm9wdGlvbnMuaGlkZSB8fCB0aGlzLm9wdGlvbnMuc2hv
dyApIHsKKwkJCQkJZm9yICggdmFyIHAgaW4gdGhpcy5vcHRpb25zLmN1ckFuaW0gKSB7CisJCQkJ
CQlqUXVlcnkuc3R5bGUoIHRoaXMuZWxlbSwgcCwgdGhpcy5vcHRpb25zLm9yaWdbcF0gKTsKKwkJ
CQkJfQorCQkJCX0KKworCQkJCS8vIEV4ZWN1dGUgdGhlIGNvbXBsZXRlIGZ1bmN0aW9uCisJCQkJ
dGhpcy5vcHRpb25zLmNvbXBsZXRlLmNhbGwoIHRoaXMuZWxlbSApOworCQkJfQorCisJCQlyZXR1
cm4gZmFsc2U7CisKKwkJfSBlbHNlIHsKKwkJCXZhciBuID0gdCAtIHRoaXMuc3RhcnRUaW1lOwor
CQkJdGhpcy5zdGF0ZSA9IG4gLyB0aGlzLm9wdGlvbnMuZHVyYXRpb247CisKKwkJCS8vIFBlcmZv
cm0gdGhlIGVhc2luZyBmdW5jdGlvbiwgZGVmYXVsdHMgdG8gc3dpbmcKKwkJCXZhciBzcGVjaWFs
RWFzaW5nID0gdGhpcy5vcHRpb25zLnNwZWNpYWxFYXNpbmcgJiYgdGhpcy5vcHRpb25zLnNwZWNp
YWxFYXNpbmdbdGhpcy5wcm9wXTsKKwkJCXZhciBkZWZhdWx0RWFzaW5nID0gdGhpcy5vcHRpb25z
LmVhc2luZyB8fCAoalF1ZXJ5LmVhc2luZy5zd2luZyA/ICJzd2luZyIgOiAibGluZWFyIik7CisJ
CQl0aGlzLnBvcyA9IGpRdWVyeS5lYXNpbmdbc3BlY2lhbEVhc2luZyB8fCBkZWZhdWx0RWFzaW5n
XSh0aGlzLnN0YXRlLCBuLCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb24pOworCQkJdGhpcy5u
b3cgPSB0aGlzLnN0YXJ0ICsgKCh0aGlzLmVuZCAtIHRoaXMuc3RhcnQpICogdGhpcy5wb3MpOwor
CisJCQkvLyBQZXJmb3JtIHRoZSBuZXh0IHN0ZXAgb2YgdGhlIGFuaW1hdGlvbgorCQkJdGhpcy51
cGRhdGUoKTsKKwkJfQorCisJCXJldHVybiB0cnVlOworCX0KK307CisKK2pRdWVyeS5leHRlbmQo
IGpRdWVyeS5meCwgeworCXRpY2s6IGZ1bmN0aW9uKCkgeworCQl2YXIgdGltZXJzID0galF1ZXJ5
LnRpbWVyczsKKworCQlmb3IgKCB2YXIgaSA9IDA7IGkgPCB0aW1lcnMubGVuZ3RoOyBpKysgKSB7
CisJCQlpZiAoICF0aW1lcnNbaV0oKSApIHsKKwkJCQl0aW1lcnMuc3BsaWNlKGktLSwgMSk7CisJ
CQl9CisJCX0KKworCQlpZiAoICF0aW1lcnMubGVuZ3RoICkgeworCQkJalF1ZXJ5LmZ4LnN0b3Ao
KTsKKwkJfQorCX0sCisKKwlpbnRlcnZhbDogMTMsCisKKwlzdG9wOiBmdW5jdGlvbigpIHsKKwkJ
Y2xlYXJJbnRlcnZhbCggdGltZXJJZCApOworCQl0aW1lcklkID0gbnVsbDsKKwl9LAorCisJc3Bl
ZWRzOiB7CisJCXNsb3c6IDYwMCwKKwkJZmFzdDogMjAwLAorCQkvLyBEZWZhdWx0IHNwZWVkCisJ
CV9kZWZhdWx0OiA0MDAKKwl9LAorCisJc3RlcDogeworCQlvcGFjaXR5OiBmdW5jdGlvbiggZngg
KSB7CisJCQlqUXVlcnkuc3R5bGUoIGZ4LmVsZW0sICJvcGFjaXR5IiwgZngubm93ICk7CisJCX0s
CisKKwkJX2RlZmF1bHQ6IGZ1bmN0aW9uKCBmeCApIHsKKwkJCWlmICggZnguZWxlbS5zdHlsZSAm
JiBmeC5lbGVtLnN0eWxlWyBmeC5wcm9wIF0gIT0gbnVsbCApIHsKKwkJCQlmeC5lbGVtLnN0eWxl
WyBmeC5wcm9wIF0gPSAoZngucHJvcCA9PT0gIndpZHRoIiB8fCBmeC5wcm9wID09PSAiaGVpZ2h0
IiA/IE1hdGgubWF4KDAsIGZ4Lm5vdykgOiBmeC5ub3cpICsgZngudW5pdDsKKwkJCX0gZWxzZSB7
CisJCQkJZnguZWxlbVsgZngucHJvcCBdID0gZngubm93OworCQkJfQorCQl9CisJfQorfSk7CisK
K2lmICggalF1ZXJ5LmV4cHIgJiYgalF1ZXJ5LmV4cHIuZmlsdGVycyApIHsKKwlqUXVlcnkuZXhw
ci5maWx0ZXJzLmFuaW1hdGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7CisJCXJldHVybiBqUXVlcnku
Z3JlcChqUXVlcnkudGltZXJzLCBmdW5jdGlvbiggZm4gKSB7CisJCQlyZXR1cm4gZWxlbSA9PT0g
Zm4uZWxlbTsKKwkJfSkubGVuZ3RoOworCX07Cit9CisKK2Z1bmN0aW9uIGRlZmF1bHREaXNwbGF5
KCBub2RlTmFtZSApIHsKKwlpZiAoICFlbGVtZGlzcGxheVsgbm9kZU5hbWUgXSApIHsKKwkJdmFy
IGVsZW0gPSBqUXVlcnkoIjwiICsgbm9kZU5hbWUgKyAiPiIpLmFwcGVuZFRvKCJib2R5IiksCisJ
CQlkaXNwbGF5ID0gZWxlbS5jc3MoImRpc3BsYXkiKTsKKworCQllbGVtLnJlbW92ZSgpOworCisJ
CWlmICggZGlzcGxheSA9PT0gIm5vbmUiIHx8IGRpc3BsYXkgPT09ICIiICkgeworCQkJZGlzcGxh
eSA9ICJibG9jayI7CisJCX0KKworCQllbGVtZGlzcGxheVsgbm9kZU5hbWUgXSA9IGRpc3BsYXk7
CisJfQorCisJcmV0dXJuIGVsZW1kaXNwbGF5WyBub2RlTmFtZSBdOworfQorCit9KSggalF1ZXJ5
ICk7CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Ny
Yy9lZmZlY3RzLmpzCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB5ZXMKCkluZGV4
OiBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3NyYy9ldmVudC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3NyYy9ldmVudC5qcwkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvc3JjL2V2ZW50LmpzCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDExNzIgQEAKKyhmdW5jdGlvbiggalF1ZXJ5ICkgeworCit2YXIgcm5hbWVz
cGFjZXMgPSAvXC4oLiopJC8sCisJcmZvcm1FbGVtcyA9IC9eKD86dGV4dGFyZWF8aW5wdXR8c2Vs
ZWN0KSQvaSwKKwlycGVyaW9kID0gL1wuL2csCisJcnNwYWNlID0gLyAvZywKKwlyZXNjYXBlID0g
L1teXHdccy58YF0vZywKKwlmY2xlYW51cCA9IGZ1bmN0aW9uKCBubSApIHsKKwkJcmV0dXJuIG5t
LnJlcGxhY2UocmVzY2FwZSwgIlxcJCYiKTsKKwl9OworCisvKgorICogQSBudW1iZXIgb2YgaGVs
cGVyIGZ1bmN0aW9ucyB1c2VkIGZvciBtYW5hZ2luZyBldmVudHMuCisgKiBNYW55IG9mIHRoZSBp
ZGVhcyBiZWhpbmQgdGhpcyBjb2RlIG9yaWdpbmF0ZWQgZnJvbQorICogRGVhbiBFZHdhcmRzJyBh
ZGRFdmVudCBsaWJyYXJ5LgorICovCitqUXVlcnkuZXZlbnQgPSB7CisKKwkvLyBCaW5kIGFuIGV2
ZW50IHRvIGFuIGVsZW1lbnQKKwkvLyBPcmlnaW5hbCBieSBEZWFuIEVkd2FyZHMKKwlhZGQ6IGZ1
bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgZGF0YSApIHsKKwkJaWYgKCBlbGVtLm5vZGVU
eXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggKSB7CisJCQlyZXR1cm47CisJCX0KKwor
CQkvLyBUT0RPIDo6IFVzZSBhIHRyeS9jYXRjaCB1bnRpbCBpdCdzIHNhZmUgdG8gcHVsbCB0aGlz
IG91dCAobGlrZWx5IDEuNikKKwkJLy8gTWlub3IgcmVsZWFzZSBmaXggZm9yIGJ1ZyAjODAxOAor
CQl0cnkgeworCQkJLy8gRm9yIHdoYXRldmVyIHJlYXNvbiwgSUUgaGFzIHRyb3VibGUgcGFzc2lu
ZyB0aGUgd2luZG93IG9iamVjdAorCQkJLy8gYXJvdW5kLCBjYXVzaW5nIGl0IHRvIGJlIGNsb25l
ZCBpbiB0aGUgcHJvY2VzcworCQkJaWYgKCBqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSAmJiAoIGVs
ZW0gIT09IHdpbmRvdyAmJiAhZWxlbS5mcmFtZUVsZW1lbnQgKSApIHsKKwkJCQllbGVtID0gd2lu
ZG93OworCQkJfQorCQl9CisJCWNhdGNoICggZSApIHt9CisKKwkJaWYgKCBoYW5kbGVyID09PSBm
YWxzZSApIHsKKwkJCWhhbmRsZXIgPSByZXR1cm5GYWxzZTsKKwkJfSBlbHNlIGlmICggIWhhbmRs
ZXIgKSB7CisJCQkvLyBGaXhlcyBidWcgIzcyMjkuIEZpeCByZWNvbW1lbmRlZCBieSBqZGFsdG9u
CisJCQlyZXR1cm47CisJCX0KKworCQl2YXIgaGFuZGxlT2JqSW4sIGhhbmRsZU9iajsKKworCQlp
ZiAoIGhhbmRsZXIuaGFuZGxlciApIHsKKwkJCWhhbmRsZU9iakluID0gaGFuZGxlcjsKKwkJCWhh
bmRsZXIgPSBoYW5kbGVPYmpJbi5oYW5kbGVyOworCQl9CisKKwkJLy8gTWFrZSBzdXJlIHRoYXQg
dGhlIGZ1bmN0aW9uIGJlaW5nIGV4ZWN1dGVkIGhhcyBhIHVuaXF1ZSBJRAorCQlpZiAoICFoYW5k
bGVyLmd1aWQgKSB7CisJCQloYW5kbGVyLmd1aWQgPSBqUXVlcnkuZ3VpZCsrOworCQl9CisKKwkJ
Ly8gSW5pdCB0aGUgZWxlbWVudCdzIGV2ZW50IHN0cnVjdHVyZQorCQl2YXIgZWxlbURhdGEgPSBq
UXVlcnkuX2RhdGEoIGVsZW0gKTsKKworCQkvLyBJZiBubyBlbGVtRGF0YSBpcyBmb3VuZCB0aGVu
IHdlIG11c3QgYmUgdHJ5aW5nIHRvIGJpbmQgdG8gb25lIG9mIHRoZQorCQkvLyBiYW5uZWQgbm9E
YXRhIGVsZW1lbnRzCisJCWlmICggIWVsZW1EYXRhICkgeworCQkJcmV0dXJuOworCQl9CisKKwkJ
dmFyIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cywKKwkJCWV2ZW50SGFuZGxlID0gZWxlbURhdGEu
aGFuZGxlOworCisJCWlmICggIWV2ZW50cyApIHsKKwkJCWVsZW1EYXRhLmV2ZW50cyA9IGV2ZW50
cyA9IHt9OworCQl9CisKKwkJaWYgKCAhZXZlbnRIYW5kbGUgKSB7CisJCQllbGVtRGF0YS5oYW5k
bGUgPSBldmVudEhhbmRsZSA9IGZ1bmN0aW9uKCkgeworCQkJCS8vIEhhbmRsZSB0aGUgc2Vjb25k
IGV2ZW50IG9mIGEgdHJpZ2dlciBhbmQgd2hlbgorCQkJCS8vIGFuIGV2ZW50IGlzIGNhbGxlZCBh
ZnRlciBhIHBhZ2UgaGFzIHVubG9hZGVkCisJCQkJcmV0dXJuIHR5cGVvZiBqUXVlcnkgIT09ICJ1
bmRlZmluZWQiICYmICFqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID8KKwkJCQkJalF1ZXJ5LmV2ZW50
LmhhbmRsZS5hcHBseSggZXZlbnRIYW5kbGUuZWxlbSwgYXJndW1lbnRzICkgOgorCQkJCQl1bmRl
ZmluZWQ7CisJCQl9OworCQl9CisKKwkJLy8gQWRkIGVsZW0gYXMgYSBwcm9wZXJ0eSBvZiB0aGUg
aGFuZGxlIGZ1bmN0aW9uCisJCS8vIFRoaXMgaXMgdG8gcHJldmVudCBhIG1lbW9yeSBsZWFrIHdp
dGggbm9uLW5hdGl2ZSBldmVudHMgaW4gSUUuCisJCWV2ZW50SGFuZGxlLmVsZW0gPSBlbGVtOwor
CisJCS8vIEhhbmRsZSBtdWx0aXBsZSBldmVudHMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UKKwkJLy8g
alF1ZXJ5KC4uLikuYmluZCgibW91c2VvdmVyIG1vdXNlb3V0IiwgZm4pOworCQl0eXBlcyA9IHR5
cGVzLnNwbGl0KCIgIik7CisKKwkJdmFyIHR5cGUsIGkgPSAwLCBuYW1lc3BhY2VzOworCisJCXdo
aWxlICggKHR5cGUgPSB0eXBlc1sgaSsrIF0pICkgeworCQkJaGFuZGxlT2JqID0gaGFuZGxlT2Jq
SW4gPworCQkJCWpRdWVyeS5leHRlbmQoe30sIGhhbmRsZU9iakluKSA6CisJCQkJeyBoYW5kbGVy
OiBoYW5kbGVyLCBkYXRhOiBkYXRhIH07CisKKwkJCS8vIE5hbWVzcGFjZWQgZXZlbnQgaGFuZGxl
cnMKKwkJCWlmICggdHlwZS5pbmRleE9mKCIuIikgPiAtMSApIHsKKwkJCQluYW1lc3BhY2VzID0g
dHlwZS5zcGxpdCgiLiIpOworCQkJCXR5cGUgPSBuYW1lc3BhY2VzLnNoaWZ0KCk7CisJCQkJaGFu
ZGxlT2JqLm5hbWVzcGFjZSA9IG5hbWVzcGFjZXMuc2xpY2UoMCkuc29ydCgpLmpvaW4oIi4iKTsK
KworCQkJfSBlbHNlIHsKKwkJCQluYW1lc3BhY2VzID0gW107CisJCQkJaGFuZGxlT2JqLm5hbWVz
cGFjZSA9ICIiOworCQkJfQorCisJCQloYW5kbGVPYmoudHlwZSA9IHR5cGU7CisJCQlpZiAoICFo
YW5kbGVPYmouZ3VpZCApIHsKKwkJCQloYW5kbGVPYmouZ3VpZCA9IGhhbmRsZXIuZ3VpZDsKKwkJ
CX0KKworCQkJLy8gR2V0IHRoZSBjdXJyZW50IGxpc3Qgb2YgZnVuY3Rpb25zIGJvdW5kIHRvIHRo
aXMgZXZlbnQKKwkJCXZhciBoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdLAorCQkJCXNwZWNpYWwg
PSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OworCisJCQkvLyBJbml0IHRoZSBl
dmVudCBoYW5kbGVyIHF1ZXVlCisJCQlpZiAoICFoYW5kbGVycyApIHsKKwkJCQloYW5kbGVycyA9
IGV2ZW50c1sgdHlwZSBdID0gW107CisKKwkJCQkvLyBDaGVjayBmb3IgYSBzcGVjaWFsIGV2ZW50
IGhhbmRsZXIKKwkJCQkvLyBPbmx5IHVzZSBhZGRFdmVudExpc3RlbmVyL2F0dGFjaEV2ZW50IGlm
IHRoZSBzcGVjaWFsCisJCQkJLy8gZXZlbnRzIGhhbmRsZXIgcmV0dXJucyBmYWxzZQorCQkJCWlm
ICggIXNwZWNpYWwuc2V0dXAgfHwgc3BlY2lhbC5zZXR1cC5jYWxsKCBlbGVtLCBkYXRhLCBuYW1l
c3BhY2VzLCBldmVudEhhbmRsZSApID09PSBmYWxzZSApIHsKKwkJCQkJLy8gQmluZCB0aGUgZ2xv
YmFsIGV2ZW50IGhhbmRsZXIgdG8gdGhlIGVsZW1lbnQKKwkJCQkJaWYgKCBlbGVtLmFkZEV2ZW50
TGlzdGVuZXIgKSB7CisJCQkJCQllbGVtLmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIGV2ZW50SGFu
ZGxlLCBmYWxzZSApOworCisJCQkJCX0gZWxzZSBpZiAoIGVsZW0uYXR0YWNoRXZlbnQgKSB7CisJ
CQkJCQllbGVtLmF0dGFjaEV2ZW50KCAib24iICsgdHlwZSwgZXZlbnRIYW5kbGUgKTsKKwkJCQkJ
fQorCQkJCX0KKwkJCX0KKworCQkJaWYgKCBzcGVjaWFsLmFkZCApIHsKKwkJCQlzcGVjaWFsLmFk
ZC5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTsKKworCQkJCWlmICggIWhhbmRsZU9iai5oYW5kbGVy
Lmd1aWQgKSB7CisJCQkJCWhhbmRsZU9iai5oYW5kbGVyLmd1aWQgPSBoYW5kbGVyLmd1aWQ7CisJ
CQkJfQorCQkJfQorCisJCQkvLyBBZGQgdGhlIGZ1bmN0aW9uIHRvIHRoZSBlbGVtZW50J3MgaGFu
ZGxlciBsaXN0CisJCQloYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTsKKworCQkJLy8gS2VlcCB0
cmFjayBvZiB3aGljaCBldmVudHMgaGF2ZSBiZWVuIHVzZWQsIGZvciBnbG9iYWwgdHJpZ2dlcmlu
ZworCQkJalF1ZXJ5LmV2ZW50Lmdsb2JhbFsgdHlwZSBdID0gdHJ1ZTsKKwkJfQorCisJCS8vIE51
bGxpZnkgZWxlbSB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcyBpbiBJRQorCQllbGVtID0gbnVsbDsK
Kwl9LAorCisJZ2xvYmFsOiB7fSwKKworCS8vIERldGFjaCBhbiBldmVudCBvciBzZXQgb2YgZXZl
bnRzIGZyb20gYW4gZWxlbWVudAorCXJlbW92ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5k
bGVyLCBwb3MgKSB7CisJCS8vIGRvbid0IGRvIGV2ZW50cyBvbiB0ZXh0IGFuZCBjb21tZW50IG5v
ZGVzCisJCWlmICggZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4ICkg
eworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKCBoYW5kbGVyID09PSBmYWxzZSApIHsKKwkJCWhh
bmRsZXIgPSByZXR1cm5GYWxzZTsKKwkJfQorCisJCXZhciByZXQsIHR5cGUsIGZuLCBqLCBpID0g
MCwgYWxsLCBuYW1lc3BhY2VzLCBuYW1lc3BhY2UsIHNwZWNpYWwsIGV2ZW50VHlwZSwgaGFuZGxl
T2JqLCBvcmlnVHlwZSwKKwkJCWVsZW1EYXRhID0galF1ZXJ5Lmhhc0RhdGEoIGVsZW0gKSAmJiBq
UXVlcnkuX2RhdGEoIGVsZW0gKSwKKwkJCWV2ZW50cyA9IGVsZW1EYXRhICYmIGVsZW1EYXRhLmV2
ZW50czsKKworCQlpZiAoICFlbGVtRGF0YSB8fCAhZXZlbnRzICkgeworCQkJcmV0dXJuOworCQl9
CisKKwkJLy8gdHlwZXMgaXMgYWN0dWFsbHkgYW4gZXZlbnQgb2JqZWN0IGhlcmUKKwkJaWYgKCB0
eXBlcyAmJiB0eXBlcy50eXBlICkgeworCQkJaGFuZGxlciA9IHR5cGVzLmhhbmRsZXI7CisJCQl0
eXBlcyA9IHR5cGVzLnR5cGU7CisJCX0KKworCQkvLyBVbmJpbmQgYWxsIGV2ZW50cyBmb3IgdGhl
IGVsZW1lbnQKKwkJaWYgKCAhdHlwZXMgfHwgdHlwZW9mIHR5cGVzID09PSAic3RyaW5nIiAmJiB0
eXBlcy5jaGFyQXQoMCkgPT09ICIuIiApIHsKKwkJCXR5cGVzID0gdHlwZXMgfHwgIiI7CisKKwkJ
CWZvciAoIHR5cGUgaW4gZXZlbnRzICkgeworCQkJCWpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0s
IHR5cGUgKyB0eXBlcyApOworCQkJfQorCisJCQlyZXR1cm47CisJCX0KKworCQkvLyBIYW5kbGUg
bXVsdGlwbGUgZXZlbnRzIHNlcGFyYXRlZCBieSBhIHNwYWNlCisJCS8vIGpRdWVyeSguLi4pLnVu
YmluZCgibW91c2VvdmVyIG1vdXNlb3V0IiwgZm4pOworCQl0eXBlcyA9IHR5cGVzLnNwbGl0KCIg
Iik7CisKKwkJd2hpbGUgKCAodHlwZSA9IHR5cGVzWyBpKysgXSkgKSB7CisJCQlvcmlnVHlwZSA9
IHR5cGU7CisJCQloYW5kbGVPYmogPSBudWxsOworCQkJYWxsID0gdHlwZS5pbmRleE9mKCIuIikg
PCAwOworCQkJbmFtZXNwYWNlcyA9IFtdOworCisJCQlpZiAoICFhbGwgKSB7CisJCQkJLy8gTmFt
ZXNwYWNlZCBldmVudCBoYW5kbGVycworCQkJCW5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCIuIik7
CisJCQkJdHlwZSA9IG5hbWVzcGFjZXMuc2hpZnQoKTsKKworCQkJCW5hbWVzcGFjZSA9IG5ldyBS
ZWdFeHAoIihefFxcLikiICsKKwkJCQkJalF1ZXJ5Lm1hcCggbmFtZXNwYWNlcy5zbGljZSgwKS5z
b3J0KCksIGZjbGVhbnVwICkuam9pbigiXFwuKD86LipcXC4pPyIpICsgIihcXC58JCkiKTsKKwkJ
CX0KKworCQkJZXZlbnRUeXBlID0gZXZlbnRzWyB0eXBlIF07CisKKwkJCWlmICggIWV2ZW50VHlw
ZSApIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKCAhaGFuZGxlciApIHsKKwkJCQlm
b3IgKCBqID0gMDsgaiA8IGV2ZW50VHlwZS5sZW5ndGg7IGorKyApIHsKKwkJCQkJaGFuZGxlT2Jq
ID0gZXZlbnRUeXBlWyBqIF07CisKKwkJCQkJaWYgKCBhbGwgfHwgbmFtZXNwYWNlLnRlc3QoIGhh
bmRsZU9iai5uYW1lc3BhY2UgKSApIHsKKwkJCQkJCWpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0s
IG9yaWdUeXBlLCBoYW5kbGVPYmouaGFuZGxlciwgaiApOworCQkJCQkJZXZlbnRUeXBlLnNwbGlj
ZSggai0tLCAxICk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJ
c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307CisKKwkJCWZvciAo
IGogPSBwb3MgfHwgMDsgaiA8IGV2ZW50VHlwZS5sZW5ndGg7IGorKyApIHsKKwkJCQloYW5kbGVP
YmogPSBldmVudFR5cGVbIGogXTsKKworCQkJCWlmICggaGFuZGxlci5ndWlkID09PSBoYW5kbGVP
YmouZ3VpZCApIHsKKwkJCQkJLy8gcmVtb3ZlIHRoZSBnaXZlbiBoYW5kbGVyIGZvciB0aGUgZ2l2
ZW4gdHlwZQorCQkJCQlpZiAoIGFsbCB8fCBuYW1lc3BhY2UudGVzdCggaGFuZGxlT2JqLm5hbWVz
cGFjZSApICkgeworCQkJCQkJaWYgKCBwb3MgPT0gbnVsbCApIHsKKwkJCQkJCQlldmVudFR5cGUu
c3BsaWNlKCBqLS0sIDEgKTsKKwkJCQkJCX0KKworCQkJCQkJaWYgKCBzcGVjaWFsLnJlbW92ZSAp
IHsKKwkJCQkJCQlzcGVjaWFsLnJlbW92ZS5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTsKKwkJCQkJ
CX0KKwkJCQkJfQorCisJCQkJCWlmICggcG9zICE9IG51bGwgKSB7CisJCQkJCQlicmVhazsKKwkJ
CQkJfQorCQkJCX0KKwkJCX0KKworCQkJLy8gcmVtb3ZlIGdlbmVyaWMgZXZlbnQgaGFuZGxlciBp
ZiBubyBtb3JlIGhhbmRsZXJzIGV4aXN0CisJCQlpZiAoIGV2ZW50VHlwZS5sZW5ndGggPT09IDAg
fHwgcG9zICE9IG51bGwgJiYgZXZlbnRUeXBlLmxlbmd0aCA9PT0gMSApIHsKKwkJCQlpZiAoICFz
cGVjaWFsLnRlYXJkb3duIHx8IHNwZWNpYWwudGVhcmRvd24uY2FsbCggZWxlbSwgbmFtZXNwYWNl
cyApID09PSBmYWxzZSApIHsKKwkJCQkJalF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBl
bGVtRGF0YS5oYW5kbGUgKTsKKwkJCQl9CisKKwkJCQlyZXQgPSBudWxsOworCQkJCWRlbGV0ZSBl
dmVudHNbIHR5cGUgXTsKKwkJCX0KKwkJfQorCisJCS8vIFJlbW92ZSB0aGUgZXhwYW5kbyBpZiBp
dCdzIG5vIGxvbmdlciB1c2VkCisJCWlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGV2ZW50cyAp
ICkgeworCQkJdmFyIGhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZTsKKwkJCWlmICggaGFuZGxlICkg
eworCQkJCWhhbmRsZS5lbGVtID0gbnVsbDsKKwkJCX0KKworCQkJZGVsZXRlIGVsZW1EYXRhLmV2
ZW50czsKKwkJCWRlbGV0ZSBlbGVtRGF0YS5oYW5kbGU7CisKKwkJCWlmICggalF1ZXJ5LmlzRW1w
dHlPYmplY3QoIGVsZW1EYXRhICkgKSB7CisJCQkJalF1ZXJ5LnJlbW92ZURhdGEoIGVsZW0sIHVu
ZGVmaW5lZCwgdHJ1ZSApOworCQkJfQorCQl9CisJfSwKKworCS8vIGJ1YmJsaW5nIGlzIGludGVy
bmFsCisJdHJpZ2dlcjogZnVuY3Rpb24oIGV2ZW50LCBkYXRhLCBlbGVtIC8qLCBidWJibGluZyAq
LyApIHsKKwkJLy8gRXZlbnQgb2JqZWN0IG9yIGV2ZW50IHR5cGUKKwkJdmFyIHR5cGUgPSBldmVu
dC50eXBlIHx8IGV2ZW50LAorCQkJYnViYmxpbmcgPSBhcmd1bWVudHNbM107CisKKwkJaWYgKCAh
YnViYmxpbmcgKSB7CisJCQlldmVudCA9IHR5cGVvZiBldmVudCA9PT0gIm9iamVjdCIgPworCQkJ
CS8vIGpRdWVyeS5FdmVudCBvYmplY3QKKwkJCQlldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/IGV2
ZW50IDoKKwkJCQkvLyBPYmplY3QgbGl0ZXJhbAorCQkJCWpRdWVyeS5leHRlbmQoIGpRdWVyeS5F
dmVudCh0eXBlKSwgZXZlbnQgKSA6CisJCQkJLy8gSnVzdCB0aGUgZXZlbnQgdHlwZSAoc3RyaW5n
KQorCQkJCWpRdWVyeS5FdmVudCh0eXBlKTsKKworCQkJaWYgKCB0eXBlLmluZGV4T2YoIiEiKSA+
PSAwICkgeworCQkJCWV2ZW50LnR5cGUgPSB0eXBlID0gdHlwZS5zbGljZSgwLCAtMSk7CisJCQkJ
ZXZlbnQuZXhjbHVzaXZlID0gdHJ1ZTsKKwkJCX0KKworCQkJLy8gSGFuZGxlIGEgZ2xvYmFsIHRy
aWdnZXIKKwkJCWlmICggIWVsZW0gKSB7CisJCQkJLy8gRG9uJ3QgYnViYmxlIGN1c3RvbSBldmVu
dHMgd2hlbiBnbG9iYWwgKHRvIGF2b2lkIHRvbyBtdWNoIG92ZXJoZWFkKQorCQkJCWV2ZW50LnN0
b3BQcm9wYWdhdGlvbigpOworCisJCQkJLy8gT25seSB0cmlnZ2VyIGlmIHdlJ3ZlIGV2ZXIgYm91
bmQgYW4gZXZlbnQgZm9yIGl0CisJCQkJaWYgKCBqUXVlcnkuZXZlbnQuZ2xvYmFsWyB0eXBlIF0g
KSB7CisJCQkJCS8vIFhYWCBUaGlzIGNvZGUgc21lbGxzIHRlcnJpYmxlLiBldmVudC5qcyBzaG91
bGQgbm90IGJlIGRpcmVjdGx5CisJCQkJCS8vIGluc3BlY3RpbmcgdGhlIGRhdGEgY2FjaGUKKwkJ
CQkJalF1ZXJ5LmVhY2goIGpRdWVyeS5jYWNoZSwgZnVuY3Rpb24oKSB7CisJCQkJCQkvLyBpbnRl
cm5hbEtleSB2YXJpYWJsZSBpcyBqdXN0IHVzZWQgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZmluZAor
CQkJCQkJLy8gYW5kIHBvdGVudGlhbGx5IGNoYW5nZSB0aGlzIHN0dWZmIGxhdGVyOyBjdXJyZW50
bHkgaXQganVzdAorCQkJCQkJLy8gcG9pbnRzIHRvIGpRdWVyeS5leHBhbmRvCisJCQkJCQl2YXIg
aW50ZXJuYWxLZXkgPSBqUXVlcnkuZXhwYW5kbywKKwkJCQkJCQlpbnRlcm5hbENhY2hlID0gdGhp
c1sgaW50ZXJuYWxLZXkgXTsKKwkJCQkJCWlmICggaW50ZXJuYWxDYWNoZSAmJiBpbnRlcm5hbENh
Y2hlLmV2ZW50cyAmJiBpbnRlcm5hbENhY2hlLmV2ZW50c1sgdHlwZSBdICkgeworCQkJCQkJCWpR
dWVyeS5ldmVudC50cmlnZ2VyKCBldmVudCwgZGF0YSwgaW50ZXJuYWxDYWNoZS5oYW5kbGUuZWxl
bSApOworCQkJCQkJfQorCQkJCQl9KTsKKwkJCQl9CisJCQl9CisKKwkJCS8vIEhhbmRsZSB0cmln
Z2VyaW5nIGEgc2luZ2xlIGVsZW1lbnQKKworCQkJLy8gZG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQg
YW5kIGNvbW1lbnQgbm9kZXMKKwkJCWlmICggIWVsZW0gfHwgZWxlbS5ub2RlVHlwZSA9PT0gMyB8
fCBlbGVtLm5vZGVUeXBlID09PSA4ICkgeworCQkJCXJldHVybiB1bmRlZmluZWQ7CisJCQl9CisK
KwkJCS8vIENsZWFuIHVwIGluIGNhc2UgaXQgaXMgcmV1c2VkCisJCQlldmVudC5yZXN1bHQgPSB1
bmRlZmluZWQ7CisJCQlldmVudC50YXJnZXQgPSBlbGVtOworCisJCQkvLyBDbG9uZSB0aGUgaW5j
b21pbmcgZGF0YSwgaWYgYW55CisJCQlkYXRhID0galF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApOwor
CQkJZGF0YS51bnNoaWZ0KCBldmVudCApOworCQl9CisKKwkJZXZlbnQuY3VycmVudFRhcmdldCA9
IGVsZW07CisKKwkJLy8gVHJpZ2dlciB0aGUgZXZlbnQsIGl0IGlzIGFzc3VtZWQgdGhhdCAiaGFu
ZGxlIiBpcyBhIGZ1bmN0aW9uCisJCXZhciBoYW5kbGUgPSBqUXVlcnkuX2RhdGEoIGVsZW0sICJo
YW5kbGUiICk7CisKKwkJaWYgKCBoYW5kbGUgKSB7CisJCQloYW5kbGUuYXBwbHkoIGVsZW0sIGRh
dGEgKTsKKwkJfQorCisJCXZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGUgfHwgZWxlbS5vd25l
ckRvY3VtZW50OworCisJCS8vIFRyaWdnZXIgYW4gaW5saW5lIGJvdW5kIHNjcmlwdAorCQl0cnkg
eworCQkJaWYgKCAhKGVsZW0gJiYgZWxlbS5ub2RlTmFtZSAmJiBqUXVlcnkubm9EYXRhW2VsZW0u
bm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pICkgeworCQkJCWlmICggZWxlbVsgIm9uIiArIHR5cGUg
XSAmJiBlbGVtWyAib24iICsgdHlwZSBdLmFwcGx5KCBlbGVtLCBkYXRhICkgPT09IGZhbHNlICkg
eworCQkJCQlldmVudC5yZXN1bHQgPSBmYWxzZTsKKwkJCQkJZXZlbnQucHJldmVudERlZmF1bHQo
KTsKKwkJCQl9CisJCQl9CisKKwkJLy8gcHJldmVudCBJRSBmcm9tIHRocm93aW5nIGFuIGVycm9y
IGZvciBzb21lIGVsZW1lbnRzIHdpdGggc29tZSBldmVudCB0eXBlcywgc2VlICMzNTMzCisJCX0g
Y2F0Y2ggKGlubGluZUVycm9yKSB7fQorCisJCWlmICggIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9w
cGVkKCkgJiYgcGFyZW50ICkgeworCQkJalF1ZXJ5LmV2ZW50LnRyaWdnZXIoIGV2ZW50LCBkYXRh
LCBwYXJlbnQsIHRydWUgKTsKKworCQl9IGVsc2UgaWYgKCAhZXZlbnQuaXNEZWZhdWx0UHJldmVu
dGVkKCkgKSB7CisJCQl2YXIgb2xkLAorCQkJCXRhcmdldCA9IGV2ZW50LnRhcmdldCwKKwkJCQl0
YXJnZXRUeXBlID0gdHlwZS5yZXBsYWNlKCBybmFtZXNwYWNlcywgIiIgKSwKKwkJCQlpc0NsaWNr
ID0galF1ZXJ5Lm5vZGVOYW1lKCB0YXJnZXQsICJhIiApICYmIHRhcmdldFR5cGUgPT09ICJjbGlj
ayIsCisJCQkJc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0YXJnZXRUeXBlIF0gfHwg
e307CisKKwkJCWlmICggKCFzcGVjaWFsLl9kZWZhdWx0IHx8IHNwZWNpYWwuX2RlZmF1bHQuY2Fs
bCggZWxlbSwgZXZlbnQgKSA9PT0gZmFsc2UpICYmCisJCQkJIWlzQ2xpY2sgJiYgISh0YXJnZXQg
JiYgdGFyZ2V0Lm5vZGVOYW1lICYmIGpRdWVyeS5ub0RhdGFbdGFyZ2V0Lm5vZGVOYW1lLnRvTG93
ZXJDYXNlKCldKSApIHsKKworCQkJCXRyeSB7CisJCQkJCWlmICggdGFyZ2V0WyB0YXJnZXRUeXBl
IF0gKSB7CisJCQkJCQkvLyBNYWtlIHN1cmUgdGhhdCB3ZSBkb24ndCBhY2NpZGVudGFsbHkgcmUt
dHJpZ2dlciB0aGUgb25GT08gZXZlbnRzCisJCQkJCQlvbGQgPSB0YXJnZXRbICJvbiIgKyB0YXJn
ZXRUeXBlIF07CisKKwkJCQkJCWlmICggb2xkICkgeworCQkJCQkJCXRhcmdldFsgIm9uIiArIHRh
cmdldFR5cGUgXSA9IG51bGw7CisJCQkJCQl9CisKKwkJCQkJCWpRdWVyeS5ldmVudC50cmlnZ2Vy
ZWQgPSB0cnVlOworCQkJCQkJdGFyZ2V0WyB0YXJnZXRUeXBlIF0oKTsKKwkJCQkJfQorCisJCQkJ
Ly8gcHJldmVudCBJRSBmcm9tIHRocm93aW5nIGFuIGVycm9yIGZvciBzb21lIGVsZW1lbnRzIHdp
dGggc29tZSBldmVudCB0eXBlcywgc2VlICMzNTMzCisJCQkJfSBjYXRjaCAodHJpZ2dlckVycm9y
KSB7fQorCisJCQkJaWYgKCBvbGQgKSB7CisJCQkJCXRhcmdldFsgIm9uIiArIHRhcmdldFR5cGUg
XSA9IG9sZDsKKwkJCQl9CisKKwkJCQlqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gZmFsc2U7CisJ
CQl9CisJCX0KKwl9LAorCisJaGFuZGxlOiBmdW5jdGlvbiggZXZlbnQgKSB7CisJCXZhciBhbGws
IGhhbmRsZXJzLCBuYW1lc3BhY2VzLCBuYW1lc3BhY2VfcmUsIGV2ZW50cywKKwkJCW5hbWVzcGFj
ZV9zb3J0ID0gW10sCisJCQlhcmdzID0galF1ZXJ5Lm1ha2VBcnJheSggYXJndW1lbnRzICk7CisK
KwkJZXZlbnQgPSBhcmdzWzBdID0galF1ZXJ5LmV2ZW50LmZpeCggZXZlbnQgfHwgd2luZG93LmV2
ZW50ICk7CisJCWV2ZW50LmN1cnJlbnRUYXJnZXQgPSB0aGlzOworCisJCS8vIE5hbWVzcGFjZWQg
ZXZlbnQgaGFuZGxlcnMKKwkJYWxsID0gZXZlbnQudHlwZS5pbmRleE9mKCIuIikgPCAwICYmICFl
dmVudC5leGNsdXNpdmU7CisKKwkJaWYgKCAhYWxsICkgeworCQkJbmFtZXNwYWNlcyA9IGV2ZW50
LnR5cGUuc3BsaXQoIi4iKTsKKwkJCWV2ZW50LnR5cGUgPSBuYW1lc3BhY2VzLnNoaWZ0KCk7CisJ
CQluYW1lc3BhY2Vfc29ydCA9IG5hbWVzcGFjZXMuc2xpY2UoMCkuc29ydCgpOworCQkJbmFtZXNw
YWNlX3JlID0gbmV3IFJlZ0V4cCgiKF58XFwuKSIgKyBuYW1lc3BhY2Vfc29ydC5qb2luKCJcXC4o
PzouKlxcLik/IikgKyAiKFxcLnwkKSIpOworCQl9CisKKwkJZXZlbnQubmFtZXNwYWNlID0gZXZl
bnQubmFtZXNwYWNlIHx8IG5hbWVzcGFjZV9zb3J0LmpvaW4oIi4iKTsKKworCQlldmVudHMgPSBq
UXVlcnkuX2RhdGEodGhpcywgImV2ZW50cyIpOworCisJCWhhbmRsZXJzID0gKGV2ZW50cyB8fCB7
fSlbIGV2ZW50LnR5cGUgXTsKKworCQlpZiAoIGV2ZW50cyAmJiBoYW5kbGVycyApIHsKKwkJCS8v
IENsb25lIHRoZSBoYW5kbGVycyB0byBwcmV2ZW50IG1hbmlwdWxhdGlvbgorCQkJaGFuZGxlcnMg
PSBoYW5kbGVycy5zbGljZSgwKTsKKworCQkJZm9yICggdmFyIGogPSAwLCBsID0gaGFuZGxlcnMu
bGVuZ3RoOyBqIDwgbDsgaisrICkgeworCQkJCXZhciBoYW5kbGVPYmogPSBoYW5kbGVyc1sgaiBd
OworCisJCQkJLy8gRmlsdGVyIHRoZSBmdW5jdGlvbnMgYnkgY2xhc3MKKwkJCQlpZiAoIGFsbCB8
fCBuYW1lc3BhY2VfcmUudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgeworCQkJCQkvLyBQ
YXNzIGluIGEgcmVmZXJlbmNlIHRvIHRoZSBoYW5kbGVyIGZ1bmN0aW9uIGl0c2VsZgorCQkJCQkv
LyBTbyB0aGF0IHdlIGNhbiBsYXRlciByZW1vdmUgaXQKKwkJCQkJZXZlbnQuaGFuZGxlciA9IGhh
bmRsZU9iai5oYW5kbGVyOworCQkJCQlldmVudC5kYXRhID0gaGFuZGxlT2JqLmRhdGE7CisJCQkJ
CWV2ZW50LmhhbmRsZU9iaiA9IGhhbmRsZU9iajsKKworCQkJCQl2YXIgcmV0ID0gaGFuZGxlT2Jq
LmhhbmRsZXIuYXBwbHkoIHRoaXMsIGFyZ3MgKTsKKworCQkJCQlpZiAoIHJldCAhPT0gdW5kZWZp
bmVkICkgeworCQkJCQkJZXZlbnQucmVzdWx0ID0gcmV0OworCQkJCQkJaWYgKCByZXQgPT09IGZh
bHNlICkgeworCQkJCQkJCWV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisJCQkJCQkJZXZlbnQuc3Rv
cFByb3BhZ2F0aW9uKCk7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlpZiAoIGV2ZW50LmlzSW1t
ZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJ
CX0KKwkJCX0KKwkJfQorCisJCXJldHVybiBldmVudC5yZXN1bHQ7CisJfSwKKworCXByb3BzOiAi
YWx0S2V5IGF0dHJDaGFuZ2UgYXR0ck5hbWUgYnViYmxlcyBidXR0b24gY2FuY2VsYWJsZSBjaGFy
Q29kZSBjbGllbnRYIGNsaWVudFkgY3RybEtleSBjdXJyZW50VGFyZ2V0IGRhdGEgZGV0YWlsIGV2
ZW50UGhhc2UgZnJvbUVsZW1lbnQgaGFuZGxlciBrZXlDb2RlIGxheWVyWCBsYXllclkgbWV0YUtl
eSBuZXdWYWx1ZSBvZmZzZXRYIG9mZnNldFkgcGFnZVggcGFnZVkgcHJldlZhbHVlIHJlbGF0ZWRO
b2RlIHJlbGF0ZWRUYXJnZXQgc2NyZWVuWCBzY3JlZW5ZIHNoaWZ0S2V5IHNyY0VsZW1lbnQgdGFy
Z2V0IHRvRWxlbWVudCB2aWV3IHdoZWVsRGVsdGEgd2hpY2giLnNwbGl0KCIgIiksCisKKwlmaXg6
IGZ1bmN0aW9uKCBldmVudCApIHsKKwkJaWYgKCBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSApIHsK
KwkJCXJldHVybiBldmVudDsKKwkJfQorCisJCS8vIHN0b3JlIGEgY29weSBvZiB0aGUgb3JpZ2lu
YWwgZXZlbnQgb2JqZWN0CisJCS8vIGFuZCAiY2xvbmUiIHRvIHNldCByZWFkLW9ubHkgcHJvcGVy
dGllcworCQl2YXIgb3JpZ2luYWxFdmVudCA9IGV2ZW50OworCQlldmVudCA9IGpRdWVyeS5FdmVu
dCggb3JpZ2luYWxFdmVudCApOworCisJCWZvciAoIHZhciBpID0gdGhpcy5wcm9wcy5sZW5ndGgs
IHByb3A7IGk7ICkgeworCQkJcHJvcCA9IHRoaXMucHJvcHNbIC0taSBdOworCQkJZXZlbnRbIHBy
b3AgXSA9IG9yaWdpbmFsRXZlbnRbIHByb3AgXTsKKwkJfQorCisJCS8vIEZpeCB0YXJnZXQgcHJv
cGVydHksIGlmIG5lY2Vzc2FyeQorCQlpZiAoICFldmVudC50YXJnZXQgKSB7CisJCQkvLyBGaXhl
cyAjMTkyNSB3aGVyZSBzcmNFbGVtZW50IG1pZ2h0IG5vdCBiZSBkZWZpbmVkIGVpdGhlcgorCQkJ
ZXZlbnQudGFyZ2V0ID0gZXZlbnQuc3JjRWxlbWVudCB8fCBkb2N1bWVudDsKKwkJfQorCisJCS8v
IGNoZWNrIGlmIHRhcmdldCBpcyBhIHRleHRub2RlIChzYWZhcmkpCisJCWlmICggZXZlbnQudGFy
Z2V0Lm5vZGVUeXBlID09PSAzICkgeworCQkJZXZlbnQudGFyZ2V0ID0gZXZlbnQudGFyZ2V0LnBh
cmVudE5vZGU7CisJCX0KKworCQkvLyBBZGQgcmVsYXRlZFRhcmdldCwgaWYgbmVjZXNzYXJ5CisJ
CWlmICggIWV2ZW50LnJlbGF0ZWRUYXJnZXQgJiYgZXZlbnQuZnJvbUVsZW1lbnQgKSB7CisJCQll
dmVudC5yZWxhdGVkVGFyZ2V0ID0gZXZlbnQuZnJvbUVsZW1lbnQgPT09IGV2ZW50LnRhcmdldCA/
IGV2ZW50LnRvRWxlbWVudCA6IGV2ZW50LmZyb21FbGVtZW50OworCQl9CisKKwkJLy8gQ2FsY3Vs
YXRlIHBhZ2VYL1kgaWYgbWlzc2luZyBhbmQgY2xpZW50WC9ZIGF2YWlsYWJsZQorCQlpZiAoIGV2
ZW50LnBhZ2VYID09IG51bGwgJiYgZXZlbnQuY2xpZW50WCAhPSBudWxsICkgeworCQkJdmFyIGRv
YyA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwKKwkJCQlib2R5ID0gZG9jdW1lbnQuYm9keTsK
KworCQkJZXZlbnQucGFnZVggPSBldmVudC5jbGllbnRYICsgKGRvYyAmJiBkb2Muc2Nyb2xsTGVm
dCB8fCBib2R5ICYmIGJvZHkuc2Nyb2xsTGVmdCB8fCAwKSAtIChkb2MgJiYgZG9jLmNsaWVudExl
ZnQgfHwgYm9keSAmJiBib2R5LmNsaWVudExlZnQgfHwgMCk7CisJCQlldmVudC5wYWdlWSA9IGV2
ZW50LmNsaWVudFkgKyAoZG9jICYmIGRvYy5zY3JvbGxUb3AgIHx8IGJvZHkgJiYgYm9keS5zY3Jv
bGxUb3AgIHx8IDApIC0gKGRvYyAmJiBkb2MuY2xpZW50VG9wICB8fCBib2R5ICYmIGJvZHkuY2xp
ZW50VG9wICB8fCAwKTsKKwkJfQorCisJCS8vIEFkZCB3aGljaCBmb3Iga2V5IGV2ZW50cworCQlp
ZiAoIGV2ZW50LndoaWNoID09IG51bGwgJiYgKGV2ZW50LmNoYXJDb2RlICE9IG51bGwgfHwgZXZl
bnQua2V5Q29kZSAhPSBudWxsKSApIHsKKwkJCWV2ZW50LndoaWNoID0gZXZlbnQuY2hhckNvZGUg
IT0gbnVsbCA/IGV2ZW50LmNoYXJDb2RlIDogZXZlbnQua2V5Q29kZTsKKwkJfQorCisJCS8vIEFk
ZCBtZXRhS2V5IHRvIG5vbi1NYWMgYnJvd3NlcnMgKHVzZSBjdHJsIGZvciBQQydzIGFuZCBNZXRh
IGZvciBNYWNzKQorCQlpZiAoICFldmVudC5tZXRhS2V5ICYmIGV2ZW50LmN0cmxLZXkgKSB7CisJ
CQlldmVudC5tZXRhS2V5ID0gZXZlbnQuY3RybEtleTsKKwkJfQorCisJCS8vIEFkZCB3aGljaCBm
b3IgY2xpY2s6IDEgPT09IGxlZnQ7IDIgPT09IG1pZGRsZTsgMyA9PT0gcmlnaHQKKwkJLy8gTm90
ZTogYnV0dG9uIGlzIG5vdCBub3JtYWxpemVkLCBzbyBkb24ndCB1c2UgaXQKKwkJaWYgKCAhZXZl
bnQud2hpY2ggJiYgZXZlbnQuYnV0dG9uICE9PSB1bmRlZmluZWQgKSB7CisJCQlldmVudC53aGlj
aCA9IChldmVudC5idXR0b24gJiAxID8gMSA6ICggZXZlbnQuYnV0dG9uICYgMiA/IDMgOiAoIGV2
ZW50LmJ1dHRvbiAmIDQgPyAyIDogMCApICkpOworCQl9CisKKwkJcmV0dXJuIGV2ZW50OworCX0s
CisKKwkvLyBEZXByZWNhdGVkLCB1c2UgalF1ZXJ5Lmd1aWQgaW5zdGVhZAorCWd1aWQ6IDFFOCwK
KworCS8vIERlcHJlY2F0ZWQsIHVzZSBqUXVlcnkucHJveHkgaW5zdGVhZAorCXByb3h5OiBqUXVl
cnkucHJveHksCisKKwlzcGVjaWFsOiB7CisJCXJlYWR5OiB7CisJCQkvLyBNYWtlIHN1cmUgdGhl
IHJlYWR5IGV2ZW50IGlzIHNldHVwCisJCQlzZXR1cDogalF1ZXJ5LmJpbmRSZWFkeSwKKwkJCXRl
YXJkb3duOiBqUXVlcnkubm9vcAorCQl9LAorCisJCWxpdmU6IHsKKwkJCWFkZDogZnVuY3Rpb24o
IGhhbmRsZU9iaiApIHsKKwkJCQlqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLAorCQkJCQlsaXZlQ29u
dmVydCggaGFuZGxlT2JqLm9yaWdUeXBlLCBoYW5kbGVPYmouc2VsZWN0b3IgKSwKKwkJCQkJalF1
ZXJ5LmV4dGVuZCh7fSwgaGFuZGxlT2JqLCB7aGFuZGxlcjogbGl2ZUhhbmRsZXIsIGd1aWQ6IGhh
bmRsZU9iai5oYW5kbGVyLmd1aWR9KSApOworCQkJfSwKKworCQkJcmVtb3ZlOiBmdW5jdGlvbigg
aGFuZGxlT2JqICkgeworCQkJCWpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMsIGxpdmVDb252ZXJ0
KCBoYW5kbGVPYmoub3JpZ1R5cGUsIGhhbmRsZU9iai5zZWxlY3RvciApLCBoYW5kbGVPYmogKTsK
KwkJCX0KKwkJfSwKKworCQliZWZvcmV1bmxvYWQ6IHsKKwkJCXNldHVwOiBmdW5jdGlvbiggZGF0
YSwgbmFtZXNwYWNlcywgZXZlbnRIYW5kbGUgKSB7CisJCQkJLy8gV2Ugb25seSB3YW50IHRvIGRv
IHRoaXMgc3BlY2lhbCBjYXNlIG9uIHdpbmRvd3MKKwkJCQlpZiAoIGpRdWVyeS5pc1dpbmRvdygg
dGhpcyApICkgeworCQkJCQl0aGlzLm9uYmVmb3JldW5sb2FkID0gZXZlbnRIYW5kbGU7CisJCQkJ
fQorCQkJfSwKKworCQkJdGVhcmRvd246IGZ1bmN0aW9uKCBuYW1lc3BhY2VzLCBldmVudEhhbmRs
ZSApIHsKKwkJCQlpZiAoIHRoaXMub25iZWZvcmV1bmxvYWQgPT09IGV2ZW50SGFuZGxlICkgewor
CQkJCQl0aGlzLm9uYmVmb3JldW5sb2FkID0gbnVsbDsKKwkJCQl9CisJCQl9CisJCX0KKwl9Cit9
OworCitqUXVlcnkucmVtb3ZlRXZlbnQgPSBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyID8K
KwlmdW5jdGlvbiggZWxlbSwgdHlwZSwgaGFuZGxlICkgeworCQlpZiAoIGVsZW0ucmVtb3ZlRXZl
bnRMaXN0ZW5lciApIHsKKwkJCWVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgaGFuZGxl
LCBmYWxzZSApOworCQl9CisJfSA6CisJZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGhhbmRsZSApIHsK
KwkJaWYgKCBlbGVtLmRldGFjaEV2ZW50ICkgeworCQkJZWxlbS5kZXRhY2hFdmVudCggIm9uIiAr
IHR5cGUsIGhhbmRsZSApOworCQl9CisJfTsKKworalF1ZXJ5LkV2ZW50ID0gZnVuY3Rpb24oIHNy
YyApIHsKKwkvLyBBbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgdGhlICduZXcnIGtleXdvcmQK
KwlpZiAoICF0aGlzLnByZXZlbnREZWZhdWx0ICkgeworCQlyZXR1cm4gbmV3IGpRdWVyeS5FdmVu
dCggc3JjICk7CisJfQorCisJLy8gRXZlbnQgb2JqZWN0CisJaWYgKCBzcmMgJiYgc3JjLnR5cGUg
KSB7CisJCXRoaXMub3JpZ2luYWxFdmVudCA9IHNyYzsKKwkJdGhpcy50eXBlID0gc3JjLnR5cGU7
CisKKwkJLy8gRXZlbnRzIGJ1YmJsaW5nIHVwIHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIG1h
cmtlZCBhcyBwcmV2ZW50ZWQKKwkJLy8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7
IHJlZmxlY3QgdGhlIGNvcnJlY3QgdmFsdWUuCisJCXRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0g
KHNyYy5kZWZhdWx0UHJldmVudGVkIHx8IHNyYy5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UgfHwKKwkJ
CXNyYy5nZXRQcmV2ZW50RGVmYXVsdCAmJiBzcmMuZ2V0UHJldmVudERlZmF1bHQoKSkgPyByZXR1
cm5UcnVlIDogcmV0dXJuRmFsc2U7CisKKwkvLyBFdmVudCB0eXBlCisJfSBlbHNlIHsKKwkJdGhp
cy50eXBlID0gc3JjOworCX0KKworCS8vIHRpbWVTdGFtcCBpcyBidWdneSBmb3Igc29tZSBldmVu
dHMgb24gRmlyZWZveCgjMzg0MykKKwkvLyBTbyB3ZSB3b24ndCByZWx5IG9uIHRoZSBuYXRpdmUg
dmFsdWUKKwl0aGlzLnRpbWVTdGFtcCA9IGpRdWVyeS5ub3coKTsKKworCS8vIE1hcmsgaXQgYXMg
Zml4ZWQKKwl0aGlzWyBqUXVlcnkuZXhwYW5kbyBdID0gdHJ1ZTsKK307CisKK2Z1bmN0aW9uIHJl
dHVybkZhbHNlKCkgeworCXJldHVybiBmYWxzZTsKK30KK2Z1bmN0aW9uIHJldHVyblRydWUoKSB7
CisJcmV0dXJuIHRydWU7Cit9CisKKy8vIGpRdWVyeS5FdmVudCBpcyBiYXNlZCBvbiBET00zIEV2
ZW50cyBhcyBzcGVjaWZpZWQgYnkgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgQmluZGluZworLy8g
aHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAwMzAzMzEv
ZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCitqUXVlcnkuRXZlbnQucHJvdG90eXBlID0geworCXBy
ZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpIHsKKwkJdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBy
ZXR1cm5UcnVlOworCisJCXZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50OworCQlpZiAoICFlICkg
eworCQkJcmV0dXJuOworCQl9CisKKwkJLy8gaWYgcHJldmVudERlZmF1bHQgZXhpc3RzIHJ1biBp
dCBvbiB0aGUgb3JpZ2luYWwgZXZlbnQKKwkJaWYgKCBlLnByZXZlbnREZWZhdWx0ICkgeworCQkJ
ZS5wcmV2ZW50RGVmYXVsdCgpOworCisJCS8vIG90aGVyd2lzZSBzZXQgdGhlIHJldHVyblZhbHVl
IHByb3BlcnR5IG9mIHRoZSBvcmlnaW5hbCBldmVudCB0byBmYWxzZSAoSUUpCisJCX0gZWxzZSB7
CisJCQllLnJldHVyblZhbHVlID0gZmFsc2U7CisJCX0KKwl9LAorCXN0b3BQcm9wYWdhdGlvbjog
ZnVuY3Rpb24oKSB7CisJCXRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlOwor
CisJCXZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50OworCQlpZiAoICFlICkgeworCQkJcmV0dXJu
OworCQl9CisJCS8vIGlmIHN0b3BQcm9wYWdhdGlvbiBleGlzdHMgcnVuIGl0IG9uIHRoZSBvcmln
aW5hbCBldmVudAorCQlpZiAoIGUuc3RvcFByb3BhZ2F0aW9uICkgeworCQkJZS5zdG9wUHJvcGFn
YXRpb24oKTsKKwkJfQorCQkvLyBvdGhlcndpc2Ugc2V0IHRoZSBjYW5jZWxCdWJibGUgcHJvcGVy
dHkgb2YgdGhlIG9yaWdpbmFsIGV2ZW50IHRvIHRydWUgKElFKQorCQllLmNhbmNlbEJ1YmJsZSA9
IHRydWU7CisJfSwKKwlzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkgeworCQl0
aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTsKKwkJdGhpcy5z
dG9wUHJvcGFnYXRpb24oKTsKKwl9LAorCWlzRGVmYXVsdFByZXZlbnRlZDogcmV0dXJuRmFsc2Us
CisJaXNQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLAorCWlzSW1tZWRpYXRlUHJvcGFn
YXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZQorfTsKKworLy8gQ2hlY2tzIGlmIGFuIGV2ZW50IGhh
cHBlbmVkIG9uIGFuIGVsZW1lbnQgd2l0aGluIGFub3RoZXIgZWxlbWVudAorLy8gVXNlZCBpbiBq
UXVlcnkuZXZlbnQuc3BlY2lhbC5tb3VzZWVudGVyIGFuZCBtb3VzZWxlYXZlIGhhbmRsZXJzCit2
YXIgd2l0aGluRWxlbWVudCA9IGZ1bmN0aW9uKCBldmVudCApIHsKKwkvLyBDaGVjayBpZiBtb3Vz
ZShvdmVyfG91dCkgYXJlIHN0aWxsIHdpdGhpbiB0aGUgc2FtZSBwYXJlbnQgZWxlbWVudAorCXZh
ciBwYXJlbnQgPSBldmVudC5yZWxhdGVkVGFyZ2V0OworCisJLy8gRmlyZWZveCBzb21ldGltZXMg
YXNzaWducyByZWxhdGVkVGFyZ2V0IGEgWFVMIGVsZW1lbnQKKwkvLyB3aGljaCB3ZSBjYW5ub3Qg
YWNjZXNzIHRoZSBwYXJlbnROb2RlIHByb3BlcnR5IG9mCisJdHJ5IHsKKworCQkvLyBDaHJvbWUg
ZG9lcyBzb21ldGhpbmcgc2ltaWxhciwgdGhlIHBhcmVudE5vZGUgcHJvcGVydHkKKwkJLy8gY2Fu
IGJlIGFjY2Vzc2VkIGJ1dCBpcyBudWxsLgorCQlpZiAoIHBhcmVudCAhPT0gZG9jdW1lbnQgJiYg
IXBhcmVudC5wYXJlbnROb2RlICkgeworCQkJcmV0dXJuOworCQl9CisJCS8vIFRyYXZlcnNlIHVw
IHRoZSB0cmVlCisJCXdoaWxlICggcGFyZW50ICYmIHBhcmVudCAhPT0gdGhpcyApIHsKKwkJCXBh
cmVudCA9IHBhcmVudC5wYXJlbnROb2RlOworCQl9CisKKwkJaWYgKCBwYXJlbnQgIT09IHRoaXMg
KSB7CisJCQkvLyBzZXQgdGhlIGNvcnJlY3QgZXZlbnQgdHlwZQorCQkJZXZlbnQudHlwZSA9IGV2
ZW50LmRhdGE7CisKKwkJCS8vIGhhbmRsZSBldmVudCBpZiB3ZSBhY3R1YWxseSBqdXN0IG1vdXNl
ZCBvbiB0byBhIG5vbiBzdWItZWxlbWVudAorCQkJalF1ZXJ5LmV2ZW50LmhhbmRsZS5hcHBseSgg
dGhpcywgYXJndW1lbnRzICk7CisJCX0KKworCS8vIGFzc3VtaW5nIHdlJ3ZlIGxlZnQgdGhlIGVs
ZW1lbnQgc2luY2Ugd2UgbW9zdCBsaWtlbHkgbW91c2Vkb3ZlciBhIHh1bCBlbGVtZW50CisJfSBj
YXRjaChlKSB7IH0KK30sCisKKy8vIEluIGNhc2Ugb2YgZXZlbnQgZGVsZWdhdGlvbiwgd2Ugb25s
eSBuZWVkIHRvIHJlbmFtZSB0aGUgZXZlbnQudHlwZSwKKy8vIGxpdmVIYW5kbGVyIHdpbGwgdGFr
ZSBjYXJlIG9mIHRoZSByZXN0LgorZGVsZWdhdGUgPSBmdW5jdGlvbiggZXZlbnQgKSB7CisJZXZl
bnQudHlwZSA9IGV2ZW50LmRhdGE7CisJalF1ZXJ5LmV2ZW50LmhhbmRsZS5hcHBseSggdGhpcywg
YXJndW1lbnRzICk7Cit9OworCisvLyBDcmVhdGUgbW91c2VlbnRlciBhbmQgbW91c2VsZWF2ZSBl
dmVudHMKK2pRdWVyeS5lYWNoKHsKKwltb3VzZWVudGVyOiAibW91c2VvdmVyIiwKKwltb3VzZWxl
YXZlOiAibW91c2VvdXQiCit9LCBmdW5jdGlvbiggb3JpZywgZml4ICkgeworCWpRdWVyeS5ldmVu
dC5zcGVjaWFsWyBvcmlnIF0gPSB7CisJCXNldHVwOiBmdW5jdGlvbiggZGF0YSApIHsKKwkJCWpR
dWVyeS5ldmVudC5hZGQoIHRoaXMsIGZpeCwgZGF0YSAmJiBkYXRhLnNlbGVjdG9yID8gZGVsZWdh
dGUgOiB3aXRoaW5FbGVtZW50LCBvcmlnICk7CisJCX0sCisJCXRlYXJkb3duOiBmdW5jdGlvbigg
ZGF0YSApIHsKKwkJCWpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMsIGZpeCwgZGF0YSAmJiBkYXRh
LnNlbGVjdG9yID8gZGVsZWdhdGUgOiB3aXRoaW5FbGVtZW50ICk7CisJCX0KKwl9OworfSk7CisK
Ky8vIHN1Ym1pdCBkZWxlZ2F0aW9uCitpZiAoICFqUXVlcnkuc3VwcG9ydC5zdWJtaXRCdWJibGVz
ICkgeworCisJalF1ZXJ5LmV2ZW50LnNwZWNpYWwuc3VibWl0ID0geworCQlzZXR1cDogZnVuY3Rp
b24oIGRhdGEsIG5hbWVzcGFjZXMgKSB7CisJCQlpZiAoIHRoaXMubm9kZU5hbWUgJiYgdGhpcy5u
b2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAiZm9ybSIgKSB7CisJCQkJalF1ZXJ5LmV2ZW50LmFk
ZCh0aGlzLCAiY2xpY2suc3BlY2lhbFN1Ym1pdCIsIGZ1bmN0aW9uKCBlICkgeworCQkJCQl2YXIg
ZWxlbSA9IGUudGFyZ2V0LAorCQkJCQkJdHlwZSA9IGVsZW0udHlwZTsKKworCQkJCQlpZiAoICh0
eXBlID09PSAic3VibWl0IiB8fCB0eXBlID09PSAiaW1hZ2UiKSAmJiBqUXVlcnkoIGVsZW0gKS5j
bG9zZXN0KCJmb3JtIikubGVuZ3RoICkgeworCQkJCQkJdHJpZ2dlciggInN1Ym1pdCIsIHRoaXMs
IGFyZ3VtZW50cyApOworCQkJCQl9CisJCQkJfSk7CisKKwkJCQlqUXVlcnkuZXZlbnQuYWRkKHRo
aXMsICJrZXlwcmVzcy5zcGVjaWFsU3VibWl0IiwgZnVuY3Rpb24oIGUgKSB7CisJCQkJCXZhciBl
bGVtID0gZS50YXJnZXQsCisJCQkJCQl0eXBlID0gZWxlbS50eXBlOworCisJCQkJCWlmICggKHR5
cGUgPT09ICJ0ZXh0IiB8fCB0eXBlID09PSAicGFzc3dvcmQiKSAmJiBqUXVlcnkoIGVsZW0gKS5j
bG9zZXN0KCJmb3JtIikubGVuZ3RoICYmIGUua2V5Q29kZSA9PT0gMTMgKSB7CisJCQkJCQl0cmln
Z2VyKCAic3VibWl0IiwgdGhpcywgYXJndW1lbnRzICk7CisJCQkJCX0KKwkJCQl9KTsKKworCQkJ
fSBlbHNlIHsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0sCisKKwkJdGVhcmRvd246IGZ1
bmN0aW9uKCBuYW1lc3BhY2VzICkgeworCQkJalF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgIi5z
cGVjaWFsU3VibWl0IiApOworCQl9CisJfTsKKworfQorCisvLyBjaGFuZ2UgZGVsZWdhdGlvbiwg
aGFwcGVucyBoZXJlIHNvIHdlIGhhdmUgYmluZC4KK2lmICggIWpRdWVyeS5zdXBwb3J0LmNoYW5n
ZUJ1YmJsZXMgKSB7CisKKwl2YXIgY2hhbmdlRmlsdGVycywKKworCWdldFZhbCA9IGZ1bmN0aW9u
KCBlbGVtICkgeworCQl2YXIgdHlwZSA9IGVsZW0udHlwZSwgdmFsID0gZWxlbS52YWx1ZTsKKwor
CQlpZiAoIHR5cGUgPT09ICJyYWRpbyIgfHwgdHlwZSA9PT0gImNoZWNrYm94IiApIHsKKwkJCXZh
bCA9IGVsZW0uY2hlY2tlZDsKKworCQl9IGVsc2UgaWYgKCB0eXBlID09PSAic2VsZWN0LW11bHRp
cGxlIiApIHsKKwkJCXZhbCA9IGVsZW0uc2VsZWN0ZWRJbmRleCA+IC0xID8KKwkJCQlqUXVlcnku
bWFwKCBlbGVtLm9wdGlvbnMsIGZ1bmN0aW9uKCBlbGVtICkgeworCQkJCQlyZXR1cm4gZWxlbS5z
ZWxlY3RlZDsKKwkJCQl9KS5qb2luKCItIikgOgorCQkJCSIiOworCisJCX0gZWxzZSBpZiAoIGVs
ZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gInNlbGVjdCIgKSB7CisJCQl2YWwgPSBlbGVt
LnNlbGVjdGVkSW5kZXg7CisJCX0KKworCQlyZXR1cm4gdmFsOworCX0sCisKKwl0ZXN0Q2hhbmdl
ID0gZnVuY3Rpb24gdGVzdENoYW5nZSggZSApIHsKKwkJdmFyIGVsZW0gPSBlLnRhcmdldCwgZGF0
YSwgdmFsOworCisJCWlmICggIXJmb3JtRWxlbXMudGVzdCggZWxlbS5ub2RlTmFtZSApIHx8IGVs
ZW0ucmVhZE9ubHkgKSB7CisJCQlyZXR1cm47CisJCX0KKworCQlkYXRhID0galF1ZXJ5Ll9kYXRh
KCBlbGVtLCAiX2NoYW5nZV9kYXRhIiApOworCQl2YWwgPSBnZXRWYWwoZWxlbSk7CisKKwkJLy8g
dGhlIGN1cnJlbnQgZGF0YSB3aWxsIGJlIGFsc28gcmV0cmlldmVkIGJ5IGJlZm9yZWFjdGl2YXRl
CisJCWlmICggZS50eXBlICE9PSAiZm9jdXNvdXQiIHx8IGVsZW0udHlwZSAhPT0gInJhZGlvIiAp
IHsKKwkJCWpRdWVyeS5fZGF0YSggZWxlbSwgIl9jaGFuZ2VfZGF0YSIsIHZhbCApOworCQl9CisK
KwkJaWYgKCBkYXRhID09PSB1bmRlZmluZWQgfHwgdmFsID09PSBkYXRhICkgeworCQkJcmV0dXJu
OworCQl9CisKKwkJaWYgKCBkYXRhICE9IG51bGwgfHwgdmFsICkgeworCQkJZS50eXBlID0gImNo
YW5nZSI7CisJCQllLmxpdmVGaXJlZCA9IHVuZGVmaW5lZDsKKwkJCWpRdWVyeS5ldmVudC50cmln
Z2VyKCBlLCBhcmd1bWVudHNbMV0sIGVsZW0gKTsKKwkJfQorCX07CisKKwlqUXVlcnkuZXZlbnQu
c3BlY2lhbC5jaGFuZ2UgPSB7CisJCWZpbHRlcnM6IHsKKwkJCWZvY3Vzb3V0OiB0ZXN0Q2hhbmdl
LAorCisJCQliZWZvcmVkZWFjdGl2YXRlOiB0ZXN0Q2hhbmdlLAorCisJCQljbGljazogZnVuY3Rp
b24oIGUgKSB7CisJCQkJdmFyIGVsZW0gPSBlLnRhcmdldCwgdHlwZSA9IGVsZW0udHlwZTsKKwor
CQkJCWlmICggdHlwZSA9PT0gInJhZGlvIiB8fCB0eXBlID09PSAiY2hlY2tib3giIHx8IGVsZW0u
bm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gInNlbGVjdCIgKSB7CisJCQkJCXRlc3RDaGFuZ2Uu
Y2FsbCggdGhpcywgZSApOworCQkJCX0KKwkJCX0sCisKKwkJCS8vIENoYW5nZSBoYXMgdG8gYmUg
Y2FsbGVkIGJlZm9yZSBzdWJtaXQKKwkJCS8vIEtleWRvd24gd2lsbCBiZSBjYWxsZWQgYmVmb3Jl
IGtleXByZXNzLCB3aGljaCBpcyB1c2VkIGluIHN1Ym1pdC1ldmVudCBkZWxlZ2F0aW9uCisJCQlr
ZXlkb3duOiBmdW5jdGlvbiggZSApIHsKKwkJCQl2YXIgZWxlbSA9IGUudGFyZ2V0LCB0eXBlID0g
ZWxlbS50eXBlOworCisJCQkJaWYgKCAoZS5rZXlDb2RlID09PSAxMyAmJiBlbGVtLm5vZGVOYW1l
LnRvTG93ZXJDYXNlKCkgIT09ICJ0ZXh0YXJlYSIpIHx8CisJCQkJCShlLmtleUNvZGUgPT09IDMy
ICYmICh0eXBlID09PSAiY2hlY2tib3giIHx8IHR5cGUgPT09ICJyYWRpbyIpKSB8fAorCQkJCQl0
eXBlID09PSAic2VsZWN0LW11bHRpcGxlIiApIHsKKwkJCQkJdGVzdENoYW5nZS5jYWxsKCB0aGlz
LCBlICk7CisJCQkJfQorCQkJfSwKKworCQkJLy8gQmVmb3JlYWN0aXZhdGUgaGFwcGVucyBhbHNv
IGJlZm9yZSB0aGUgcHJldmlvdXMgZWxlbWVudCBpcyBibHVycmVkCisJCQkvLyB3aXRoIHRoaXMg
ZXZlbnQgeW91IGNhbid0IHRyaWdnZXIgYSBjaGFuZ2UgZXZlbnQsIGJ1dCB5b3UgY2FuIHN0b3Jl
CisJCQkvLyBpbmZvcm1hdGlvbgorCQkJYmVmb3JlYWN0aXZhdGU6IGZ1bmN0aW9uKCBlICkgewor
CQkJCXZhciBlbGVtID0gZS50YXJnZXQ7CisJCQkJalF1ZXJ5Ll9kYXRhKCBlbGVtLCAiX2NoYW5n
ZV9kYXRhIiwgZ2V0VmFsKGVsZW0pICk7CisJCQl9CisJCX0sCisKKwkJc2V0dXA6IGZ1bmN0aW9u
KCBkYXRhLCBuYW1lc3BhY2VzICkgeworCQkJaWYgKCB0aGlzLnR5cGUgPT09ICJmaWxlIiApIHsK
KwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisKKwkJCWZvciAoIHZhciB0eXBlIGluIGNoYW5nZUZp
bHRlcnMgKSB7CisJCQkJalF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgdHlwZSArICIuc3BlY2lhbENo
YW5nZSIsIGNoYW5nZUZpbHRlcnNbdHlwZV0gKTsKKwkJCX0KKworCQkJcmV0dXJuIHJmb3JtRWxl
bXMudGVzdCggdGhpcy5ub2RlTmFtZSApOworCQl9LAorCisJCXRlYXJkb3duOiBmdW5jdGlvbigg
bmFtZXNwYWNlcyApIHsKKwkJCWpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMsICIuc3BlY2lhbENo
YW5nZSIgKTsKKworCQkJcmV0dXJuIHJmb3JtRWxlbXMudGVzdCggdGhpcy5ub2RlTmFtZSApOwor
CQl9CisJfTsKKworCWNoYW5nZUZpbHRlcnMgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbC5jaGFuZ2Uu
ZmlsdGVyczsKKworCS8vIEhhbmRsZSB3aGVuIHRoZSBpbnB1dCBpcyAuZm9jdXMoKSdkCisJY2hh
bmdlRmlsdGVycy5mb2N1cyA9IGNoYW5nZUZpbHRlcnMuYmVmb3JlYWN0aXZhdGU7Cit9CisKK2Z1
bmN0aW9uIHRyaWdnZXIoIHR5cGUsIGVsZW0sIGFyZ3MgKSB7CisJLy8gUGlnZ3liYWNrIG9uIGEg
ZG9ub3IgZXZlbnQgdG8gc2ltdWxhdGUgYSBkaWZmZXJlbnQgb25lLgorCS8vIEZha2Ugb3JpZ2lu
YWxFdmVudCB0byBhdm9pZCBkb25vcidzIHN0b3BQcm9wYWdhdGlvbiwgYnV0IGlmIHRoZQorCS8v
IHNpbXVsYXRlZCBldmVudCBwcmV2ZW50cyBkZWZhdWx0IHRoZW4gd2UgZG8gdGhlIHNhbWUgb24g
dGhlIGRvbm9yLgorCS8vIERvbid0IHBhc3MgYXJncyBvciByZW1lbWJlciBsaXZlRmlyZWQ7IHRo
ZXkgYXBwbHkgdG8gdGhlIGRvbm9yIGV2ZW50LgorCXZhciBldmVudCA9IGpRdWVyeS5leHRlbmQo
IHt9LCBhcmdzWyAwIF0gKTsKKwlldmVudC50eXBlID0gdHlwZTsKKwlldmVudC5vcmlnaW5hbEV2
ZW50ID0ge307CisJZXZlbnQubGl2ZUZpcmVkID0gdW5kZWZpbmVkOworCWpRdWVyeS5ldmVudC5o
YW5kbGUuY2FsbCggZWxlbSwgZXZlbnQgKTsKKwlpZiAoIGV2ZW50LmlzRGVmYXVsdFByZXZlbnRl
ZCgpICkgeworCQlhcmdzWyAwIF0ucHJldmVudERlZmF1bHQoKTsKKwl9Cit9CisKKy8vIENyZWF0
ZSAiYnViYmxpbmciIGZvY3VzIGFuZCBibHVyIGV2ZW50cworaWYgKCBkb2N1bWVudC5hZGRFdmVu
dExpc3RlbmVyICkgeworCWpRdWVyeS5lYWNoKHsgZm9jdXM6ICJmb2N1c2luIiwgYmx1cjogImZv
Y3Vzb3V0IiB9LCBmdW5jdGlvbiggb3JpZywgZml4ICkgeworCQlqUXVlcnkuZXZlbnQuc3BlY2lh
bFsgZml4IF0gPSB7CisJCQlzZXR1cDogZnVuY3Rpb24oKSB7CisJCQkJdGhpcy5hZGRFdmVudExp
c3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7CisJCQl9LAorCQkJdGVhcmRvd246IGZ1bmN0
aW9uKCkgeworCQkJCXRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1
ZSApOworCQkJfQorCQl9OworCisJCWZ1bmN0aW9uIGhhbmRsZXIoIGUgKSB7CisJCQllID0galF1
ZXJ5LmV2ZW50LmZpeCggZSApOworCQkJZS50eXBlID0gZml4OworCQkJcmV0dXJuIGpRdWVyeS5l
dmVudC5oYW5kbGUuY2FsbCggdGhpcywgZSApOworCQl9CisJfSk7Cit9CisKK2pRdWVyeS5lYWNo
KFsiYmluZCIsICJvbmUiXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7CisJalF1ZXJ5LmZuWyBuYW1l
IF0gPSBmdW5jdGlvbiggdHlwZSwgZGF0YSwgZm4gKSB7CisJCS8vIEhhbmRsZSBvYmplY3QgbGl0
ZXJhbHMKKwkJaWYgKCB0eXBlb2YgdHlwZSA9PT0gIm9iamVjdCIgKSB7CisJCQlmb3IgKCB2YXIg
a2V5IGluIHR5cGUgKSB7CisJCQkJdGhpc1sgbmFtZSBdKGtleSwgZGF0YSwgdHlwZVtrZXldLCBm
bik7CisJCQl9CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCisJCWlmICggalF1ZXJ5LmlzRnVuY3Rp
b24oIGRhdGEgKSB8fCBkYXRhID09PSBmYWxzZSApIHsKKwkJCWZuID0gZGF0YTsKKwkJCWRhdGEg
PSB1bmRlZmluZWQ7CisJCX0KKworCQl2YXIgaGFuZGxlciA9IG5hbWUgPT09ICJvbmUiID8galF1
ZXJ5LnByb3h5KCBmbiwgZnVuY3Rpb24oIGV2ZW50ICkgeworCQkJalF1ZXJ5KCB0aGlzICkudW5i
aW5kKCBldmVudCwgaGFuZGxlciApOworCQkJcmV0dXJuIGZuLmFwcGx5KCB0aGlzLCBhcmd1bWVu
dHMgKTsKKwkJfSkgOiBmbjsKKworCQlpZiAoIHR5cGUgPT09ICJ1bmxvYWQiICYmIG5hbWUgIT09
ICJvbmUiICkgeworCQkJdGhpcy5vbmUoIHR5cGUsIGRhdGEsIGZuICk7CisKKwkJfSBlbHNlIHsK
KwkJCWZvciAoIHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrICkgeworCQkJ
CWpRdWVyeS5ldmVudC5hZGQoIHRoaXNbaV0sIHR5cGUsIGhhbmRsZXIsIGRhdGEgKTsKKwkJCX0K
KwkJfQorCisJCXJldHVybiB0aGlzOworCX07Cit9KTsKKworalF1ZXJ5LmZuLmV4dGVuZCh7CisJ
dW5iaW5kOiBmdW5jdGlvbiggdHlwZSwgZm4gKSB7CisJCS8vIEhhbmRsZSBvYmplY3QgbGl0ZXJh
bHMKKwkJaWYgKCB0eXBlb2YgdHlwZSA9PT0gIm9iamVjdCIgJiYgIXR5cGUucHJldmVudERlZmF1
bHQgKSB7CisJCQlmb3IgKCB2YXIga2V5IGluIHR5cGUgKSB7CisJCQkJdGhpcy51bmJpbmQoa2V5
LCB0eXBlW2tleV0pOworCQkJfQorCisJCX0gZWxzZSB7CisJCQlmb3IgKCB2YXIgaSA9IDAsIGwg
PSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKKwkJCQlqUXVlcnkuZXZlbnQucmVtb3ZlKCB0
aGlzW2ldLCB0eXBlLCBmbiApOworCQkJfQorCQl9CisKKwkJcmV0dXJuIHRoaXM7CisJfSwKKwor
CWRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBkYXRhLCBmbiApIHsKKwkJcmV0
dXJuIHRoaXMubGl2ZSggdHlwZXMsIGRhdGEsIGZuLCBzZWxlY3RvciApOworCX0sCisKKwl1bmRl
bGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBmbiApIHsKKwkJaWYgKCBhcmd1bWVu
dHMubGVuZ3RoID09PSAwICkgeworCQkJCXJldHVybiB0aGlzLnVuYmluZCggImxpdmUiICk7CisK
KwkJfSBlbHNlIHsKKwkJCXJldHVybiB0aGlzLmRpZSggdHlwZXMsIG51bGwsIGZuLCBzZWxlY3Rv
ciApOworCQl9CisJfSwKKworCXRyaWdnZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkgeworCQly
ZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgeworCQkJalF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5
cGUsIGRhdGEsIHRoaXMgKTsKKwkJfSk7CisJfSwKKworCXRyaWdnZXJIYW5kbGVyOiBmdW5jdGlv
biggdHlwZSwgZGF0YSApIHsKKwkJaWYgKCB0aGlzWzBdICkgeworCQkJdmFyIGV2ZW50ID0galF1
ZXJ5LkV2ZW50KCB0eXBlICk7CisJCQlldmVudC5wcmV2ZW50RGVmYXVsdCgpOworCQkJZXZlbnQu
c3RvcFByb3BhZ2F0aW9uKCk7CisJCQlqUXVlcnkuZXZlbnQudHJpZ2dlciggZXZlbnQsIGRhdGEs
IHRoaXNbMF0gKTsKKwkJCXJldHVybiBldmVudC5yZXN1bHQ7CisJCX0KKwl9LAorCisJdG9nZ2xl
OiBmdW5jdGlvbiggZm4gKSB7CisJCS8vIFNhdmUgcmVmZXJlbmNlIHRvIGFyZ3VtZW50cyBmb3Ig
YWNjZXNzIGluIGNsb3N1cmUKKwkJdmFyIGFyZ3MgPSBhcmd1bWVudHMsCisJCQlpID0gMTsKKwor
CQkvLyBsaW5rIGFsbCB0aGUgZnVuY3Rpb25zLCBzbyBhbnkgb2YgdGhlbSBjYW4gdW5iaW5kIHRo
aXMgY2xpY2sgaGFuZGxlcgorCQl3aGlsZSAoIGkgPCBhcmdzLmxlbmd0aCApIHsKKwkJCWpRdWVy
eS5wcm94eSggZm4sIGFyZ3NbIGkrKyBdICk7CisJCX0KKworCQlyZXR1cm4gdGhpcy5jbGljaygg
alF1ZXJ5LnByb3h5KCBmbiwgZnVuY3Rpb24oIGV2ZW50ICkgeworCQkJLy8gRmlndXJlIG91dCB3
aGljaCBmdW5jdGlvbiB0byBleGVjdXRlCisJCQl2YXIgbGFzdFRvZ2dsZSA9ICggalF1ZXJ5Ll9k
YXRhKCB0aGlzLCAibGFzdFRvZ2dsZSIgKyBmbi5ndWlkICkgfHwgMCApICUgaTsKKwkJCWpRdWVy
eS5fZGF0YSggdGhpcywgImxhc3RUb2dnbGUiICsgZm4uZ3VpZCwgbGFzdFRvZ2dsZSArIDEgKTsK
KworCQkJLy8gTWFrZSBzdXJlIHRoYXQgY2xpY2tzIHN0b3AKKwkJCWV2ZW50LnByZXZlbnREZWZh
dWx0KCk7CisKKwkJCS8vIGFuZCBleGVjdXRlIHRoZSBmdW5jdGlvbgorCQkJcmV0dXJuIGFyZ3Nb
IGxhc3RUb2dnbGUgXS5hcHBseSggdGhpcywgYXJndW1lbnRzICkgfHwgZmFsc2U7CisJCX0pKTsK
Kwl9LAorCisJaG92ZXI6IGZ1bmN0aW9uKCBmbk92ZXIsIGZuT3V0ICkgeworCQlyZXR1cm4gdGhp
cy5tb3VzZWVudGVyKCBmbk92ZXIgKS5tb3VzZWxlYXZlKCBmbk91dCB8fCBmbk92ZXIgKTsKKwl9
Cit9KTsKKwordmFyIGxpdmVNYXAgPSB7CisJZm9jdXM6ICJmb2N1c2luIiwKKwlibHVyOiAiZm9j
dXNvdXQiLAorCW1vdXNlZW50ZXI6ICJtb3VzZW92ZXIiLAorCW1vdXNlbGVhdmU6ICJtb3VzZW91
dCIKK307CisKK2pRdWVyeS5lYWNoKFsibGl2ZSIsICJkaWUiXSwgZnVuY3Rpb24oIGksIG5hbWUg
KSB7CisJalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuLCBvcmln
U2VsZWN0b3IgLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8gKSB7CisJCXZhciB0eXBlLCBpID0gMCwg
bWF0Y2gsIG5hbWVzcGFjZXMsIHByZVR5cGUsCisJCQlzZWxlY3RvciA9IG9yaWdTZWxlY3RvciB8
fCB0aGlzLnNlbGVjdG9yLAorCQkJY29udGV4dCA9IG9yaWdTZWxlY3RvciA/IHRoaXMgOiBqUXVl
cnkoIHRoaXMuY29udGV4dCApOworCisJCWlmICggdHlwZW9mIHR5cGVzID09PSAib2JqZWN0IiAm
JiAhdHlwZXMucHJldmVudERlZmF1bHQgKSB7CisJCQlmb3IgKCB2YXIga2V5IGluIHR5cGVzICkg
eworCQkJCWNvbnRleHRbIG5hbWUgXSgga2V5LCBkYXRhLCB0eXBlc1trZXldLCBzZWxlY3RvciAp
OworCQkJfQorCisJCQlyZXR1cm4gdGhpczsKKwkJfQorCisJCWlmICggalF1ZXJ5LmlzRnVuY3Rp
b24oIGRhdGEgKSApIHsKKwkJCWZuID0gZGF0YTsKKwkJCWRhdGEgPSB1bmRlZmluZWQ7CisJCX0K
KworCQl0eXBlcyA9ICh0eXBlcyB8fCAiIikuc3BsaXQoIiAiKTsKKworCQl3aGlsZSAoICh0eXBl
ID0gdHlwZXNbIGkrKyBdKSAhPSBudWxsICkgeworCQkJbWF0Y2ggPSBybmFtZXNwYWNlcy5leGVj
KCB0eXBlICk7CisJCQluYW1lc3BhY2VzID0gIiI7CisKKwkJCWlmICggbWF0Y2ggKSAgeworCQkJ
CW5hbWVzcGFjZXMgPSBtYXRjaFswXTsKKwkJCQl0eXBlID0gdHlwZS5yZXBsYWNlKCBybmFtZXNw
YWNlcywgIiIgKTsKKwkJCX0KKworCQkJaWYgKCB0eXBlID09PSAiaG92ZXIiICkgeworCQkJCXR5
cGVzLnB1c2goICJtb3VzZWVudGVyIiArIG5hbWVzcGFjZXMsICJtb3VzZWxlYXZlIiArIG5hbWVz
cGFjZXMgKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJcHJlVHlwZSA9IHR5cGU7CisKKwkJ
CWlmICggdHlwZSA9PT0gImZvY3VzIiB8fCB0eXBlID09PSAiYmx1ciIgKSB7CisJCQkJdHlwZXMu
cHVzaCggbGl2ZU1hcFsgdHlwZSBdICsgbmFtZXNwYWNlcyApOworCQkJCXR5cGUgPSB0eXBlICsg
bmFtZXNwYWNlczsKKworCQkJfSBlbHNlIHsKKwkJCQl0eXBlID0gKGxpdmVNYXBbIHR5cGUgXSB8
fCB0eXBlKSArIG5hbWVzcGFjZXM7CisJCQl9CisKKwkJCWlmICggbmFtZSA9PT0gImxpdmUiICkg
eworCQkJCS8vIGJpbmQgbGl2ZSBoYW5kbGVyCisJCQkJZm9yICggdmFyIGogPSAwLCBsID0gY29u
dGV4dC5sZW5ndGg7IGogPCBsOyBqKysgKSB7CisJCQkJCWpRdWVyeS5ldmVudC5hZGQoIGNvbnRl
eHRbal0sICJsaXZlLiIgKyBsaXZlQ29udmVydCggdHlwZSwgc2VsZWN0b3IgKSwKKwkJCQkJCXsg
ZGF0YTogZGF0YSwgc2VsZWN0b3I6IHNlbGVjdG9yLCBoYW5kbGVyOiBmbiwgb3JpZ1R5cGU6IHR5
cGUsIG9yaWdIYW5kbGVyOiBmbiwgcHJlVHlwZTogcHJlVHlwZSB9ICk7CisJCQkJfQorCisJCQl9
IGVsc2UgeworCQkJCS8vIHVuYmluZCBsaXZlIGhhbmRsZXIKKwkJCQljb250ZXh0LnVuYmluZCgg
ImxpdmUuIiArIGxpdmVDb252ZXJ0KCB0eXBlLCBzZWxlY3RvciApLCBmbiApOworCQkJfQorCQl9
CisKKwkJcmV0dXJuIHRoaXM7CisJfTsKK30pOworCitmdW5jdGlvbiBsaXZlSGFuZGxlciggZXZl
bnQgKSB7CisJdmFyIHN0b3AsIG1heExldmVsLCByZWxhdGVkLCBtYXRjaCwgaGFuZGxlT2JqLCBl
bGVtLCBqLCBpLCBsLCBkYXRhLCBjbG9zZSwgbmFtZXNwYWNlLCByZXQsCisJCWVsZW1zID0gW10s
CisJCXNlbGVjdG9ycyA9IFtdLAorCQlldmVudHMgPSBqUXVlcnkuX2RhdGEoIHRoaXMsICJldmVu
dHMiICk7CisKKwkvLyBNYWtlIHN1cmUgd2UgYXZvaWQgbm9uLWxlZnQtY2xpY2sgYnViYmxpbmcg
aW4gRmlyZWZveCAoIzM4NjEpIGFuZCBkaXNhYmxlZCBlbGVtZW50cyBpbiBJRSAoIzY5MTEpCisJ
aWYgKCBldmVudC5saXZlRmlyZWQgPT09IHRoaXMgfHwgIWV2ZW50cyB8fCAhZXZlbnRzLmxpdmUg
fHwgZXZlbnQudGFyZ2V0LmRpc2FibGVkIHx8IGV2ZW50LmJ1dHRvbiAmJiBldmVudC50eXBlID09
PSAiY2xpY2siICkgeworCQlyZXR1cm47CisJfQorCisJaWYgKCBldmVudC5uYW1lc3BhY2UgKSB7
CisJCW5hbWVzcGFjZSA9IG5ldyBSZWdFeHAoIihefFxcLikiICsgZXZlbnQubmFtZXNwYWNlLnNw
bGl0KCIuIikuam9pbigiXFwuKD86LipcXC4pPyIpICsgIihcXC58JCkiKTsKKwl9CisKKwlldmVu
dC5saXZlRmlyZWQgPSB0aGlzOworCisJdmFyIGxpdmUgPSBldmVudHMubGl2ZS5zbGljZSgwKTsK
KworCWZvciAoIGogPSAwOyBqIDwgbGl2ZS5sZW5ndGg7IGorKyApIHsKKwkJaGFuZGxlT2JqID0g
bGl2ZVtqXTsKKworCQlpZiAoIGhhbmRsZU9iai5vcmlnVHlwZS5yZXBsYWNlKCBybmFtZXNwYWNl
cywgIiIgKSA9PT0gZXZlbnQudHlwZSApIHsKKwkJCXNlbGVjdG9ycy5wdXNoKCBoYW5kbGVPYmou
c2VsZWN0b3IgKTsKKworCQl9IGVsc2UgeworCQkJbGl2ZS5zcGxpY2UoIGotLSwgMSApOworCQl9
CisJfQorCisJbWF0Y2ggPSBqUXVlcnkoIGV2ZW50LnRhcmdldCApLmNsb3Nlc3QoIHNlbGVjdG9y
cywgZXZlbnQuY3VycmVudFRhcmdldCApOworCisJZm9yICggaSA9IDAsIGwgPSBtYXRjaC5sZW5n
dGg7IGkgPCBsOyBpKysgKSB7CisJCWNsb3NlID0gbWF0Y2hbaV07CisKKwkJZm9yICggaiA9IDA7
IGogPCBsaXZlLmxlbmd0aDsgaisrICkgeworCQkJaGFuZGxlT2JqID0gbGl2ZVtqXTsKKworCQkJ
aWYgKCBjbG9zZS5zZWxlY3RvciA9PT0gaGFuZGxlT2JqLnNlbGVjdG9yICYmICghbmFtZXNwYWNl
IHx8IG5hbWVzcGFjZS50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkpICYmICFjbG9zZS5lbGVt
LmRpc2FibGVkICkgeworCQkJCWVsZW0gPSBjbG9zZS5lbGVtOworCQkJCXJlbGF0ZWQgPSBudWxs
OworCisJCQkJLy8gVGhvc2UgdHdvIGV2ZW50cyByZXF1aXJlIGFkZGl0aW9uYWwgY2hlY2tpbmcK
KwkJCQlpZiAoIGhhbmRsZU9iai5wcmVUeXBlID09PSAibW91c2VlbnRlciIgfHwgaGFuZGxlT2Jq
LnByZVR5cGUgPT09ICJtb3VzZWxlYXZlIiApIHsKKwkJCQkJZXZlbnQudHlwZSA9IGhhbmRsZU9i
ai5wcmVUeXBlOworCQkJCQlyZWxhdGVkID0galF1ZXJ5KCBldmVudC5yZWxhdGVkVGFyZ2V0ICku
Y2xvc2VzdCggaGFuZGxlT2JqLnNlbGVjdG9yIClbMF07CisJCQkJfQorCisJCQkJaWYgKCAhcmVs
YXRlZCB8fCByZWxhdGVkICE9PSBlbGVtICkgeworCQkJCQllbGVtcy5wdXNoKHsgZWxlbTogZWxl
bSwgaGFuZGxlT2JqOiBoYW5kbGVPYmosIGxldmVsOiBjbG9zZS5sZXZlbCB9KTsKKwkJCQl9CisJ
CQl9CisJCX0KKwl9CisKKwlmb3IgKCBpID0gMCwgbCA9IGVsZW1zLmxlbmd0aDsgaSA8IGw7IGkr
KyApIHsKKwkJbWF0Y2ggPSBlbGVtc1tpXTsKKworCQlpZiAoIG1heExldmVsICYmIG1hdGNoLmxl
dmVsID4gbWF4TGV2ZWwgKSB7CisJCQlicmVhazsKKwkJfQorCisJCWV2ZW50LmN1cnJlbnRUYXJn
ZXQgPSBtYXRjaC5lbGVtOworCQlldmVudC5kYXRhID0gbWF0Y2guaGFuZGxlT2JqLmRhdGE7CisJ
CWV2ZW50LmhhbmRsZU9iaiA9IG1hdGNoLmhhbmRsZU9iajsKKworCQlyZXQgPSBtYXRjaC5oYW5k
bGVPYmoub3JpZ0hhbmRsZXIuYXBwbHkoIG1hdGNoLmVsZW0sIGFyZ3VtZW50cyApOworCisJCWlm
ICggcmV0ID09PSBmYWxzZSB8fCBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkgeworCQkJ
bWF4TGV2ZWwgPSBtYXRjaC5sZXZlbDsKKworCQkJaWYgKCByZXQgPT09IGZhbHNlICkgeworCQkJ
CXN0b3AgPSBmYWxzZTsKKwkJCX0KKwkJCWlmICggZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlv
blN0b3BwZWQoKSApIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBzdG9w
OworfQorCitmdW5jdGlvbiBsaXZlQ29udmVydCggdHlwZSwgc2VsZWN0b3IgKSB7CisJcmV0dXJu
ICh0eXBlICYmIHR5cGUgIT09ICIqIiA/IHR5cGUgKyAiLiIgOiAiIikgKyBzZWxlY3Rvci5yZXBs
YWNlKHJwZXJpb2QsICJgIikucmVwbGFjZShyc3BhY2UsICImIik7Cit9CisKK2pRdWVyeS5lYWNo
KCAoImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2Fk
IGNsaWNrIGRibGNsaWNrICIgKworCSJtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2Vv
dmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSAiICsKKwkiY2hhbmdlIHNlbGVjdCBz
dWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciIpLnNwbGl0KCIgIiksIGZ1bmN0aW9u
KCBpLCBuYW1lICkgeworCisJLy8gSGFuZGxlIGV2ZW50IGJpbmRpbmcKKwlqUXVlcnkuZm5bIG5h
bWUgXSA9IGZ1bmN0aW9uKCBkYXRhLCBmbiApIHsKKwkJaWYgKCBmbiA9PSBudWxsICkgeworCQkJ
Zm4gPSBkYXRhOworCQkJZGF0YSA9IG51bGw7CisJCX0KKworCQlyZXR1cm4gYXJndW1lbnRzLmxl
bmd0aCA+IDAgPworCQkJdGhpcy5iaW5kKCBuYW1lLCBkYXRhLCBmbiApIDoKKwkJCXRoaXMudHJp
Z2dlciggbmFtZSApOworCX07CisKKwlpZiAoIGpRdWVyeS5hdHRyRm4gKSB7CisJCWpRdWVyeS5h
dHRyRm5bIG5hbWUgXSA9IHRydWU7CisJfQorfSk7CisKK30pKCBqUXVlcnkgKTsKClByb3BlcnR5
IGNoYW5nZXMgb246IExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvc3JjL2V2ZW50LmpzCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB5ZXMKCkluZGV4OiBMYXlvdXRUZXN0cy9q
cXVlcnkvcmVzb3VyY2VzL3NyYy9pbnRyby5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9q
cXVlcnkvcmVzb3VyY2VzL3NyYy9pbnRyby5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2pxdWVyeS9yZXNvdXJjZXMvc3JjL2ludHJvLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5
IEBACisvKiEKKyAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdkBWRVJTSU9OCisgKiBodHRw
Oi8vanF1ZXJ5LmNvbS8KKyAqCisgKiBDb3B5cmlnaHQgMjAxMSwgSm9obiBSZXNpZworICogRHVh
bCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIG9yIEdQTCBWZXJzaW9uIDIgbGljZW5zZXMuCisgKiBo
dHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlCisgKgorICogSW5jbHVkZXMgU2l6emxlLmpzCisgKiBo
dHRwOi8vc2l6emxlanMuY29tLworICogQ29weXJpZ2h0IDIwMTEsIFRoZSBEb2pvIEZvdW5kYXRp
b24KKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQsIEJTRCwgYW5kIEdQTCBMaWNlbnNlcy4KKyAq
CisgKiBEYXRlOiBAREFURQorICovCisoZnVuY3Rpb24oIHdpbmRvdywgdW5kZWZpbmVkICkgewor
CisvLyBVc2UgdGhlIGNvcnJlY3QgZG9jdW1lbnQgYWNjb3JkaW5nbHkgd2l0aCB3aW5kb3cgYXJn
dW1lbnQgKHNhbmRib3gpCit2YXIgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7CkluZGV4OiBM
YXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3NyYy9tYW5pcHVsYXRpb24uanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy9zcmMvbWFuaXB1bGF0aW9uLmpzCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy9zcmMvbWFuaXB1bGF0
aW9uLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcwNSBAQAorKGZ1bmN0aW9uKCBqUXVlcnkg
KSB7CisKK3ZhciByaW5saW5lalF1ZXJ5ID0gLyBqUXVlcnlcZCs9Iig/OlxkK3xudWxsKSIvZywK
KwlybGVhZGluZ1doaXRlc3BhY2UgPSAvXlxzKy8sCisJcnhodG1sVGFnID0gLzwoPyFhcmVhfGJy
fGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW1x3Ol0rKVtePl0qKVwv
Pi9pZywKKwlydGFnTmFtZSA9IC88KFtcdzpdKykvLAorCXJ0Ym9keSA9IC88dGJvZHkvaSwKKwly
aHRtbCA9IC88fCYjP1x3KzsvLAorCXJub2NhY2hlID0gLzwoPzpzY3JpcHR8b2JqZWN0fGVtYmVk
fG9wdGlvbnxzdHlsZSkvaSwKKwkvLyBjaGVja2VkPSJjaGVja2VkIiBvciBjaGVja2VkCisJcmNo
ZWNrZWQgPSAvY2hlY2tlZFxzKig/OltePV18PVxzKi5jaGVja2VkLikvaSwKKwl3cmFwTWFwID0g
eworCQlvcHRpb246IFsgMSwgIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCAiPC9zZWxl
Y3Q+IiBdLAorCQlsZWdlbmQ6IFsgMSwgIjxmaWVsZHNldD4iLCAiPC9maWVsZHNldD4iIF0sCisJ
CXRoZWFkOiBbIDEsICI8dGFibGU+IiwgIjwvdGFibGU+IiBdLAorCQl0cjogWyAyLCAiPHRhYmxl
Pjx0Ym9keT4iLCAiPC90Ym9keT48L3RhYmxlPiIgXSwKKwkJdGQ6IFsgMywgIjx0YWJsZT48dGJv
ZHk+PHRyPiIsICI8L3RyPjwvdGJvZHk+PC90YWJsZT4iIF0sCisJCWNvbDogWyAyLCAiPHRhYmxl
Pjx0Ym9keT48L3Rib2R5Pjxjb2xncm91cD4iLCAiPC9jb2xncm91cD48L3RhYmxlPiIgXSwKKwkJ
YXJlYTogWyAxLCAiPG1hcD4iLCAiPC9tYXA+IiBdLAorCQlfZGVmYXVsdDogWyAwLCAiIiwgIiIg
XQorCX07CisKK3dyYXBNYXAub3B0Z3JvdXAgPSB3cmFwTWFwLm9wdGlvbjsKK3dyYXBNYXAudGJv
ZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9
IHdyYXBNYXAudGhlYWQ7Cit3cmFwTWFwLnRoID0gd3JhcE1hcC50ZDsKKworLy8gSUUgY2FuJ3Qg
c2VyaWFsaXplIDxsaW5rPiBhbmQgPHNjcmlwdD4gdGFncyBub3JtYWxseQoraWYgKCAhalF1ZXJ5
LnN1cHBvcnQuaHRtbFNlcmlhbGl6ZSApIHsKKwl3cmFwTWFwLl9kZWZhdWx0ID0gWyAxLCAiZGl2
PGRpdj4iLCAiPC9kaXY+IiBdOworfQorCitqUXVlcnkuZm4uZXh0ZW5kKHsKKwl0ZXh0OiBmdW5j
dGlvbiggdGV4dCApIHsKKwkJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbih0ZXh0KSApIHsKKwkJCXJl
dHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaSkgeworCQkJCXZhciBzZWxmID0galF1ZXJ5KCB0aGlz
ICk7CisKKwkJCQlzZWxmLnRleHQoIHRleHQuY2FsbCh0aGlzLCBpLCBzZWxmLnRleHQoKSkgKTsK
KwkJCX0pOworCQl9CisKKwkJaWYgKCB0eXBlb2YgdGV4dCAhPT0gIm9iamVjdCIgJiYgdGV4dCAh
PT0gdW5kZWZpbmVkICkgeworCQkJcmV0dXJuIHRoaXMuZW1wdHkoKS5hcHBlbmQoICh0aGlzWzBd
ICYmIHRoaXNbMF0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudCkuY3JlYXRlVGV4dE5vZGUoIHRl
eHQgKSApOworCQl9CisKKwkJcmV0dXJuIGpRdWVyeS50ZXh0KCB0aGlzICk7CisJfSwKKworCXdy
YXBBbGw6IGZ1bmN0aW9uKCBodG1sICkgeworCQlpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBodG1s
ICkgKSB7CisJCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsKKwkJCQlqUXVlcnkodGhp
cykud3JhcEFsbCggaHRtbC5jYWxsKHRoaXMsIGkpICk7CisJCQl9KTsKKwkJfQorCisJCWlmICgg
dGhpc1swXSApIHsKKwkJCS8vIFRoZSBlbGVtZW50cyB0byB3cmFwIHRoZSB0YXJnZXQgYXJvdW5k
CisJCQl2YXIgd3JhcCA9IGpRdWVyeSggaHRtbCwgdGhpc1swXS5vd25lckRvY3VtZW50ICkuZXEo
MCkuY2xvbmUodHJ1ZSk7CisKKwkJCWlmICggdGhpc1swXS5wYXJlbnROb2RlICkgeworCQkJCXdy
YXAuaW5zZXJ0QmVmb3JlKCB0aGlzWzBdICk7CisJCQl9CisKKwkJCXdyYXAubWFwKGZ1bmN0aW9u
KCkgeworCQkJCXZhciBlbGVtID0gdGhpczsKKworCQkJCXdoaWxlICggZWxlbS5maXJzdENoaWxk
ICYmIGVsZW0uZmlyc3RDaGlsZC5ub2RlVHlwZSA9PT0gMSApIHsKKwkJCQkJZWxlbSA9IGVsZW0u
Zmlyc3RDaGlsZDsKKwkJCQl9CisKKwkJCQlyZXR1cm4gZWxlbTsKKwkJCX0pLmFwcGVuZCh0aGlz
KTsKKwkJfQorCisJCXJldHVybiB0aGlzOworCX0sCisKKwl3cmFwSW5uZXI6IGZ1bmN0aW9uKCBo
dG1sICkgeworCQlpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBodG1sICkgKSB7CisJCQlyZXR1cm4g
dGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsKKwkJCQlqUXVlcnkodGhpcykud3JhcElubmVyKCBodG1s
LmNhbGwodGhpcywgaSkgKTsKKwkJCX0pOworCQl9CisKKwkJcmV0dXJuIHRoaXMuZWFjaChmdW5j
dGlvbigpIHsKKwkJCXZhciBzZWxmID0galF1ZXJ5KCB0aGlzICksCisJCQkJY29udGVudHMgPSBz
ZWxmLmNvbnRlbnRzKCk7CisKKwkJCWlmICggY29udGVudHMubGVuZ3RoICkgeworCQkJCWNvbnRl
bnRzLndyYXBBbGwoIGh0bWwgKTsKKworCQkJfSBlbHNlIHsKKwkJCQlzZWxmLmFwcGVuZCggaHRt
bCApOworCQkJfQorCQl9KTsKKwl9LAorCisJd3JhcDogZnVuY3Rpb24oIGh0bWwgKSB7CisJCXJl
dHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CisJCQlqUXVlcnkoIHRoaXMgKS53cmFwQWxsKCBo
dG1sICk7CisJCX0pOworCX0sCisKKwl1bndyYXA6IGZ1bmN0aW9uKCkgeworCQlyZXR1cm4gdGhp
cy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCkgeworCQkJaWYgKCAhalF1ZXJ5Lm5vZGVOYW1lKCB0
aGlzLCAiYm9keSIgKSApIHsKKwkJCQlqUXVlcnkoIHRoaXMgKS5yZXBsYWNlV2l0aCggdGhpcy5j
aGlsZE5vZGVzICk7CisJCQl9CisJCX0pLmVuZCgpOworCX0sCisKKwlhcHBlbmQ6IGZ1bmN0aW9u
KCkgeworCQlyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsIHRydWUsIGZ1bmN0aW9uKCBl
bGVtICkgeworCQkJaWYgKCB0aGlzLm5vZGVUeXBlID09PSAxICkgeworCQkJCXRoaXMuYXBwZW5k
Q2hpbGQoIGVsZW0gKTsKKwkJCX0KKwkJfSk7CisJfSwKKworCXByZXBlbmQ6IGZ1bmN0aW9uKCkg
eworCQlyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsIHRydWUsIGZ1bmN0aW9uKCBlbGVt
ICkgeworCQkJaWYgKCB0aGlzLm5vZGVUeXBlID09PSAxICkgeworCQkJCXRoaXMuaW5zZXJ0QmVm
b3JlKCBlbGVtLCB0aGlzLmZpcnN0Q2hpbGQgKTsKKwkJCX0KKwkJfSk7CisJfSwKKworCWJlZm9y
ZTogZnVuY3Rpb24oKSB7CisJCWlmICggdGhpc1swXSAmJiB0aGlzWzBdLnBhcmVudE5vZGUgKSB7
CisJCQlyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsIGZhbHNlLCBmdW5jdGlvbiggZWxl
bSApIHsKKwkJCQl0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzICk7CisJ
CQl9KTsKKwkJfSBlbHNlIGlmICggYXJndW1lbnRzLmxlbmd0aCApIHsKKwkJCXZhciBzZXQgPSBq
UXVlcnkoYXJndW1lbnRzWzBdKTsKKwkJCXNldC5wdXNoLmFwcGx5KCBzZXQsIHRoaXMudG9BcnJh
eSgpICk7CisJCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHNldCwgImJlZm9yZSIsIGFyZ3VtZW50
cyApOworCQl9CisJfSwKKworCWFmdGVyOiBmdW5jdGlvbigpIHsKKwkJaWYgKCB0aGlzWzBdICYm
IHRoaXNbMF0ucGFyZW50Tm9kZSApIHsKKwkJCXJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50
cywgZmFsc2UsIGZ1bmN0aW9uKCBlbGVtICkgeworCQkJCXRoaXMucGFyZW50Tm9kZS5pbnNlcnRC
ZWZvcmUoIGVsZW0sIHRoaXMubmV4dFNpYmxpbmcgKTsKKwkJCX0pOworCQl9IGVsc2UgaWYgKCBh
cmd1bWVudHMubGVuZ3RoICkgeworCQkJdmFyIHNldCA9IHRoaXMucHVzaFN0YWNrKCB0aGlzLCAi
YWZ0ZXIiLCBhcmd1bWVudHMgKTsKKwkJCXNldC5wdXNoLmFwcGx5KCBzZXQsIGpRdWVyeShhcmd1
bWVudHNbMF0pLnRvQXJyYXkoKSApOworCQkJcmV0dXJuIHNldDsKKwkJfQorCX0sCisKKwkvLyBr
ZWVwRGF0YSBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHktLWRvIG5vdCBkb2N1bWVudAorCXJlbW92
ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCBrZWVwRGF0YSApIHsKKwkJZm9yICggdmFyIGkgPSAwLCBl
bGVtOyAoZWxlbSA9IHRoaXNbaV0pICE9IG51bGw7IGkrKyApIHsKKwkJCWlmICggIXNlbGVjdG9y
IHx8IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBbIGVsZW0gXSApLmxlbmd0aCApIHsKKwkJCQlp
ZiAoICFrZWVwRGF0YSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkgeworCQkJCQlqUXVlcnkuY2xl
YW5EYXRhKCBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikgKTsKKwkJCQkJalF1ZXJ5LmNs
ZWFuRGF0YSggWyBlbGVtIF0gKTsKKwkJCQl9CisKKwkJCQlpZiAoIGVsZW0ucGFyZW50Tm9kZSAp
IHsKKwkJCQkJZWxlbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbGVtICk7CisJCQkJfQorCQkJ
fQorCQl9CisKKwkJcmV0dXJuIHRoaXM7CisJfSwKKworCWVtcHR5OiBmdW5jdGlvbigpIHsKKwkJ
Zm9yICggdmFyIGkgPSAwLCBlbGVtOyAoZWxlbSA9IHRoaXNbaV0pICE9IG51bGw7IGkrKyApIHsK
KwkJCS8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrcworCQkJ
aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkgeworCQkJCWpRdWVyeS5jbGVhbkRhdGEoIGVsZW0u
Z2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSApOworCQkJfQorCisJCQkvLyBSZW1vdmUgYW55IHJl
bWFpbmluZyBub2RlcworCQkJd2hpbGUgKCBlbGVtLmZpcnN0Q2hpbGQgKSB7CisJCQkJZWxlbS5y
ZW1vdmVDaGlsZCggZWxlbS5maXJzdENoaWxkICk7CisJCQl9CisJCX0KKworCQlyZXR1cm4gdGhp
czsKKwl9LAorCisJY2xvbmU6IGZ1bmN0aW9uKCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2
ZW50cyApIHsKKwkJZGF0YUFuZEV2ZW50cyA9IGRhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGZhbHNl
IDogZGF0YUFuZEV2ZW50czsKKwkJZGVlcERhdGFBbmRFdmVudHMgPSBkZWVwRGF0YUFuZEV2ZW50
cyA9PSBudWxsID8gZGF0YUFuZEV2ZW50cyA6IGRlZXBEYXRhQW5kRXZlbnRzOworCisJCXJldHVy
biB0aGlzLm1hcCggZnVuY3Rpb24gKCkgeworCQkJcmV0dXJuIGpRdWVyeS5jbG9uZSggdGhpcywg
ZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKTsKKwkJfSk7CisJfSwKKworCWh0bWw6
IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKwkJaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgeworCQkJ
cmV0dXJuIHRoaXNbMF0gJiYgdGhpc1swXS5ub2RlVHlwZSA9PT0gMSA/CisJCQkJdGhpc1swXS5p
bm5lckhUTUwucmVwbGFjZShyaW5saW5lalF1ZXJ5LCAiIikgOgorCQkJCW51bGw7CisKKwkJLy8g
U2VlIGlmIHdlIGNhbiB0YWtlIGEgc2hvcnRjdXQgYW5kIGp1c3QgdXNlIGlubmVySFRNTAorCQl9
IGVsc2UgaWYgKCB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciICYmICFybm9jYWNoZS50ZXN0KCB2
YWx1ZSApICYmCisJCQkoalF1ZXJ5LnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2UgfHwgIXJsZWFk
aW5nV2hpdGVzcGFjZS50ZXN0KCB2YWx1ZSApKSAmJgorCQkJIXdyYXBNYXBbIChydGFnTmFtZS5l
eGVjKCB2YWx1ZSApIHx8IFsiIiwgIiJdKVsxXS50b0xvd2VyQ2FzZSgpIF0gKSB7CisKKwkJCXZh
bHVlID0gdmFsdWUucmVwbGFjZShyeGh0bWxUYWcsICI8JDE+PC8kMj4iKTsKKworCQkJdHJ5IHsK
KwkJCQlmb3IgKCB2YXIgaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKKwkJ
CQkJLy8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzCisJCQkJ
CWlmICggdGhpc1tpXS5ub2RlVHlwZSA9PT0gMSApIHsKKwkJCQkJCWpRdWVyeS5jbGVhbkRhdGEo
IHRoaXNbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSApOworCQkJCQkJdGhpc1tpXS5pbm5l
ckhUTUwgPSB2YWx1ZTsKKwkJCQkJfQorCQkJCX0KKworCQkJLy8gSWYgdXNpbmcgaW5uZXJIVE1M
IHRocm93cyBhbiBleGNlcHRpb24sIHVzZSB0aGUgZmFsbGJhY2sgbWV0aG9kCisJCQl9IGNhdGNo
KGUpIHsKKwkJCQl0aGlzLmVtcHR5KCkuYXBwZW5kKCB2YWx1ZSApOworCQkJfQorCisJCX0gZWxz
ZSBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgeworCQkJdGhpcy5lYWNoKGZ1bmN0
aW9uKGkpeworCQkJCXZhciBzZWxmID0galF1ZXJ5KCB0aGlzICk7CisKKwkJCQlzZWxmLmh0bWwo
IHZhbHVlLmNhbGwodGhpcywgaSwgc2VsZi5odG1sKCkpICk7CisJCQl9KTsKKworCQl9IGVsc2Ug
eworCQkJdGhpcy5lbXB0eSgpLmFwcGVuZCggdmFsdWUgKTsKKwkJfQorCisJCXJldHVybiB0aGlz
OworCX0sCisKKwlyZXBsYWNlV2l0aDogZnVuY3Rpb24oIHZhbHVlICkgeworCQlpZiAoIHRoaXNb
MF0gJiYgdGhpc1swXS5wYXJlbnROb2RlICkgeworCQkJLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGVs
ZW1lbnRzIGFyZSByZW1vdmVkIGZyb20gdGhlIERPTSBiZWZvcmUgdGhleSBhcmUgaW5zZXJ0ZWQK
KwkJCS8vIHRoaXMgY2FuIGhlbHAgZml4IHJlcGxhY2luZyBhIHBhcmVudCB3aXRoIGNoaWxkIGVs
ZW1lbnRzCisJCQlpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgeworCQkJCXJldHVy
biB0aGlzLmVhY2goZnVuY3Rpb24oaSkgeworCQkJCQl2YXIgc2VsZiA9IGpRdWVyeSh0aGlzKSwg
b2xkID0gc2VsZi5odG1sKCk7CisJCQkJCXNlbGYucmVwbGFjZVdpdGgoIHZhbHVlLmNhbGwoIHRo
aXMsIGksIG9sZCApICk7CisJCQkJfSk7CisJCQl9CisKKwkJCWlmICggdHlwZW9mIHZhbHVlICE9
PSAic3RyaW5nIiApIHsKKwkJCQl2YWx1ZSA9IGpRdWVyeSggdmFsdWUgKS5kZXRhY2goKTsKKwkJ
CX0KKworCQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKKwkJCQl2YXIgbmV4dCA9IHRo
aXMubmV4dFNpYmxpbmcsCisJCQkJCXBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTsKKworCQkJCWpR
dWVyeSggdGhpcyApLnJlbW92ZSgpOworCisJCQkJaWYgKCBuZXh0ICkgeworCQkJCQlqUXVlcnko
bmV4dCkuYmVmb3JlKCB2YWx1ZSApOworCQkJCX0gZWxzZSB7CisJCQkJCWpRdWVyeShwYXJlbnQp
LmFwcGVuZCggdmFsdWUgKTsKKwkJCQl9CisJCQl9KTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiB0
aGlzLnB1c2hTdGFjayggalF1ZXJ5KGpRdWVyeS5pc0Z1bmN0aW9uKHZhbHVlKSA/IHZhbHVlKCkg
OiB2YWx1ZSksICJyZXBsYWNlV2l0aCIsIHZhbHVlICk7CisJCX0KKwl9LAorCisJZGV0YWNoOiBm
dW5jdGlvbiggc2VsZWN0b3IgKSB7CisJCXJldHVybiB0aGlzLnJlbW92ZSggc2VsZWN0b3IsIHRy
dWUgKTsKKwl9LAorCisJZG9tTWFuaXA6IGZ1bmN0aW9uKCBhcmdzLCB0YWJsZSwgY2FsbGJhY2sg
KSB7CisJCXZhciByZXN1bHRzLCBmaXJzdCwgZnJhZ21lbnQsIHBhcmVudCwKKwkJCXZhbHVlID0g
YXJnc1swXSwKKwkJCXNjcmlwdHMgPSBbXTsKKworCQkvLyBXZSBjYW4ndCBjbG9uZU5vZGUgZnJh
Z21lbnRzIHRoYXQgY29udGFpbiBjaGVja2VkLCBpbiBXZWJLaXQKKwkJaWYgKCAhalF1ZXJ5LnN1
cHBvcnQuY2hlY2tDbG9uZSAmJiBhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiB2YWx1
ZSA9PT0gInN0cmluZyIgJiYgcmNoZWNrZWQudGVzdCggdmFsdWUgKSApIHsKKwkJCXJldHVybiB0
aGlzLmVhY2goZnVuY3Rpb24oKSB7CisJCQkJalF1ZXJ5KHRoaXMpLmRvbU1hbmlwKCBhcmdzLCB0
YWJsZSwgY2FsbGJhY2ssIHRydWUgKTsKKwkJCX0pOworCQl9CisKKwkJaWYgKCBqUXVlcnkuaXNG
dW5jdGlvbih2YWx1ZSkgKSB7CisJCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsKKwkJ
CQl2YXIgc2VsZiA9IGpRdWVyeSh0aGlzKTsKKwkJCQlhcmdzWzBdID0gdmFsdWUuY2FsbCh0aGlz
LCBpLCB0YWJsZSA/IHNlbGYuaHRtbCgpIDogdW5kZWZpbmVkKTsKKwkJCQlzZWxmLmRvbU1hbmlw
KCBhcmdzLCB0YWJsZSwgY2FsbGJhY2sgKTsKKwkJCX0pOworCQl9CisKKwkJaWYgKCB0aGlzWzBd
ICkgeworCQkJcGFyZW50ID0gdmFsdWUgJiYgdmFsdWUucGFyZW50Tm9kZTsKKworCQkJLy8gSWYg
d2UncmUgaW4gYSBmcmFnbWVudCwganVzdCB1c2UgdGhhdCBpbnN0ZWFkIG9mIGJ1aWxkaW5nIGEg
bmV3IG9uZQorCQkJaWYgKCBqUXVlcnkuc3VwcG9ydC5wYXJlbnROb2RlICYmIHBhcmVudCAmJiBw
YXJlbnQubm9kZVR5cGUgPT09IDExICYmIHBhcmVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gdGhp
cy5sZW5ndGggKSB7CisJCQkJcmVzdWx0cyA9IHsgZnJhZ21lbnQ6IHBhcmVudCB9OworCisJCQl9
IGVsc2UgeworCQkJCXJlc3VsdHMgPSBqUXVlcnkuYnVpbGRGcmFnbWVudCggYXJncywgdGhpcywg
c2NyaXB0cyApOworCQkJfQorCisJCQlmcmFnbWVudCA9IHJlc3VsdHMuZnJhZ21lbnQ7CisKKwkJ
CWlmICggZnJhZ21lbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDEgKSB7CisJCQkJZmlyc3QgPSBm
cmFnbWVudCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7CisJCQl9IGVsc2UgeworCQkJCWZpcnN0ID0g
ZnJhZ21lbnQuZmlyc3RDaGlsZDsKKwkJCX0KKworCQkJaWYgKCBmaXJzdCApIHsKKwkJCQl0YWJs
ZSA9IHRhYmxlICYmIGpRdWVyeS5ub2RlTmFtZSggZmlyc3QsICJ0ciIgKTsKKworCQkJCWZvciAo
IHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoLCBsYXN0SW5kZXggPSBsIC0gMTsgaSA8IGw7IGkr
KyApIHsKKwkJCQkJY2FsbGJhY2suY2FsbCgKKwkJCQkJCXRhYmxlID8KKwkJCQkJCQlyb290KHRo
aXNbaV0sIGZpcnN0KSA6CisJCQkJCQkJdGhpc1tpXSwKKwkJCQkJCS8vIE1ha2Ugc3VyZSB0aGF0
IHdlIGRvIG5vdCBsZWFrIG1lbW9yeSBieSBpbmFkdmVydGVudGx5IGRpc2NhcmRpbmcKKwkJCQkJ
CS8vIHRoZSBvcmlnaW5hbCBmcmFnbWVudCAod2hpY2ggbWlnaHQgaGF2ZSBhdHRhY2hlZCBkYXRh
KSBpbnN0ZWFkIG9mCisJCQkJCQkvLyB1c2luZyBpdDsgaW4gYWRkaXRpb24sIHVzZSB0aGUgb3Jp
Z2luYWwgZnJhZ21lbnQgb2JqZWN0IGZvciB0aGUgbGFzdAorCQkJCQkJLy8gaXRlbSBpbnN0ZWFk
IG9mIGZpcnN0IGJlY2F1c2UgaXQgY2FuIGVuZCB1cCBiZWluZyBlbXB0aWVkIGluY29ycmVjdGx5
CisJCQkJCQkvLyBpbiBjZXJ0YWluIHNpdHVhdGlvbnMgKEJ1ZyAjODA3MCkuCisJCQkJCQkvLyBG
cmFnbWVudHMgZnJvbSB0aGUgZnJhZ21lbnQgY2FjaGUgbXVzdCBhbHdheXMgYmUgY2xvbmVkIGFu
ZCBuZXZlciB1c2VkCisJCQkJCQkvLyBpbiBwbGFjZS4KKwkJCQkJCXJlc3VsdHMuY2FjaGVhYmxl
IHx8IChsID4gMSAmJiBpIDwgbGFzdEluZGV4KSA/CisJCQkJCQkJalF1ZXJ5LmNsb25lKCBmcmFn
bWVudCwgdHJ1ZSwgdHJ1ZSApIDoKKwkJCQkJCQlmcmFnbWVudAorCQkJCQkpOworCQkJCX0KKwkJ
CX0KKworCQkJaWYgKCBzY3JpcHRzLmxlbmd0aCApIHsKKwkJCQlqUXVlcnkuZWFjaCggc2NyaXB0
cywgZXZhbFNjcmlwdCApOworCQkJfQorCQl9CisKKwkJcmV0dXJuIHRoaXM7CisJfQorfSk7CisK
K2Z1bmN0aW9uIHJvb3QoIGVsZW0sIGN1ciApIHsKKwlyZXR1cm4galF1ZXJ5Lm5vZGVOYW1lKGVs
ZW0sICJ0YWJsZSIpID8KKwkJKGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IilbMF0g
fHwKKwkJZWxlbS5hcHBlbmRDaGlsZChlbGVtLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
dGJvZHkiKSkpIDoKKwkJZWxlbTsKK30KKworZnVuY3Rpb24gY2xvbmVDb3B5RXZlbnQoIHNyYywg
ZGVzdCApIHsKKworCWlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSB8fCAhalF1ZXJ5Lmhhc0RhdGEo
IHNyYyApICkgeworCQlyZXR1cm47CisJfQorCisJdmFyIGludGVybmFsS2V5ID0galF1ZXJ5LmV4
cGFuZG8sCisJCW9sZERhdGEgPSBqUXVlcnkuZGF0YSggc3JjICksCisJCWN1ckRhdGEgPSBqUXVl
cnkuZGF0YSggZGVzdCwgb2xkRGF0YSApOworCisJLy8gU3dpdGNoIHRvIHVzZSB0aGUgaW50ZXJu
YWwgZGF0YSBvYmplY3QsIGlmIGl0IGV4aXN0cywgZm9yIHRoZSBuZXh0CisJLy8gc3RhZ2Ugb2Yg
ZGF0YSBjb3B5aW5nCisJaWYgKCAob2xkRGF0YSA9IG9sZERhdGFbIGludGVybmFsS2V5IF0pICkg
eworCQl2YXIgZXZlbnRzID0gb2xkRGF0YS5ldmVudHM7CisJCQkJY3VyRGF0YSA9IGN1ckRhdGFb
IGludGVybmFsS2V5IF0gPSBqUXVlcnkuZXh0ZW5kKHt9LCBvbGREYXRhKTsKKworCQlpZiAoIGV2
ZW50cyApIHsKKwkJCWRlbGV0ZSBjdXJEYXRhLmhhbmRsZTsKKwkJCWN1ckRhdGEuZXZlbnRzID0g
e307CisKKwkJCWZvciAoIHZhciB0eXBlIGluIGV2ZW50cyApIHsKKwkJCQlmb3IgKCB2YXIgaSA9
IDAsIGwgPSBldmVudHNbIHR5cGUgXS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CisJCQkJCWpRdWVy
eS5ldmVudC5hZGQoIGRlc3QsIHR5cGUgKyAoIGV2ZW50c1sgdHlwZSBdWyBpIF0ubmFtZXNwYWNl
ID8gIi4iIDogIiIgKSArIGV2ZW50c1sgdHlwZSBdWyBpIF0ubmFtZXNwYWNlLCBldmVudHNbIHR5
cGUgXVsgaSBdLCBldmVudHNbIHR5cGUgXVsgaSBdLmRhdGEgKTsKKwkJCQl9CisJCQl9CisJCX0K
Kwl9Cit9CisKK2Z1bmN0aW9uIGNsb25lRml4QXR0cmlidXRlcyhzcmMsIGRlc3QpIHsKKwkvLyBX
ZSBkbyBub3QgbmVlZCB0byBkbyBhbnl0aGluZyBmb3Igbm9uLUVsZW1lbnRzCisJaWYgKCBkZXN0
Lm5vZGVUeXBlICE9PSAxICkgeworCQlyZXR1cm47CisJfQorCisJdmFyIG5vZGVOYW1lID0gZGVz
dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOworCisJLy8gY2xlYXJBdHRyaWJ1dGVzIHJlbW92ZXMg
dGhlIGF0dHJpYnV0ZXMsIHdoaWNoIHdlIGRvbid0IHdhbnQsCisJLy8gYnV0IGFsc28gcmVtb3Zl
cyB0aGUgYXR0YWNoRXZlbnQgZXZlbnRzLCB3aGljaCB3ZSAqZG8qIHdhbnQKKwlkZXN0LmNsZWFy
QXR0cmlidXRlcygpOworCisJLy8gbWVyZ2VBdHRyaWJ1dGVzLCBpbiBjb250cmFzdCwgb25seSBt
ZXJnZXMgYmFjayBvbiB0aGUKKwkvLyBvcmlnaW5hbCBhdHRyaWJ1dGVzLCBub3QgdGhlIGV2ZW50
cworCWRlc3QubWVyZ2VBdHRyaWJ1dGVzKHNyYyk7CisKKwkvLyBJRTYtOCBmYWlsIHRvIGNsb25l
IGNoaWxkcmVuIGluc2lkZSBvYmplY3QgZWxlbWVudHMgdGhhdCB1c2UKKwkvLyB0aGUgcHJvcHJp
ZXRhcnkgY2xhc3NpZCBhdHRyaWJ1dGUgdmFsdWUgKHJhdGhlciB0aGFuIHRoZSB0eXBlCisJLy8g
YXR0cmlidXRlKSB0byBpZGVudGlmeSB0aGUgdHlwZSBvZiBjb250ZW50IHRvIGRpc3BsYXkKKwlp
ZiAoIG5vZGVOYW1lID09PSAib2JqZWN0IiApIHsKKwkJZGVzdC5vdXRlckhUTUwgPSBzcmMub3V0
ZXJIVE1MOworCisJfSBlbHNlIGlmICggbm9kZU5hbWUgPT09ICJpbnB1dCIgJiYgKHNyYy50eXBl
ID09PSAiY2hlY2tib3giIHx8IHNyYy50eXBlID09PSAicmFkaW8iKSApIHsKKwkJLy8gSUU2LTgg
ZmFpbHMgdG8gcGVyc2lzdCB0aGUgY2hlY2tlZCBzdGF0ZSBvZiBhIGNsb25lZCBjaGVja2JveAor
CQkvLyBvciByYWRpbyBidXR0b24uIFdvcnNlLCBJRTYtNyBmYWlsIHRvIGdpdmUgdGhlIGNsb25l
ZCBlbGVtZW50CisJCS8vIGEgY2hlY2tlZCBhcHBlYXJhbmNlIGlmIHRoZSBkZWZhdWx0Q2hlY2tl
ZCB2YWx1ZSBpc24ndCBhbHNvIHNldAorCQlpZiAoIHNyYy5jaGVja2VkICkgeworCQkJZGVzdC5k
ZWZhdWx0Q2hlY2tlZCA9IGRlc3QuY2hlY2tlZCA9IHNyYy5jaGVja2VkOworCQl9CisKKwkJLy8g
SUU2LTcgZ2V0IGNvbmZ1c2VkIGFuZCBlbmQgdXAgc2V0dGluZyB0aGUgdmFsdWUgb2YgYSBjbG9u
ZWQKKwkJLy8gY2hlY2tib3gvcmFkaW8gYnV0dG9uIHRvIGFuIGVtcHR5IHN0cmluZyBpbnN0ZWFk
IG9mICJvbiIKKwkJaWYgKCBkZXN0LnZhbHVlICE9PSBzcmMudmFsdWUgKSB7CisJCQlkZXN0LnZh
bHVlID0gc3JjLnZhbHVlOworCQl9CisKKwkvLyBJRTYtOCBmYWlscyB0byByZXR1cm4gdGhlIHNl
bGVjdGVkIG9wdGlvbiB0byB0aGUgZGVmYXVsdCBzZWxlY3RlZAorCS8vIHN0YXRlIHdoZW4gY2xv
bmluZyBvcHRpb25zCisJfSBlbHNlIGlmICggbm9kZU5hbWUgPT09ICJvcHRpb24iICkgeworCQlk
ZXN0LnNlbGVjdGVkID0gc3JjLmRlZmF1bHRTZWxlY3RlZDsKKworCS8vIElFNi04IGZhaWxzIHRv
IHNldCB0aGUgZGVmYXVsdFZhbHVlIHRvIHRoZSBjb3JyZWN0IHZhbHVlIHdoZW4KKwkvLyBjbG9u
aW5nIG90aGVyIHR5cGVzIG9mIGlucHV0IGZpZWxkcworCX0gZWxzZSBpZiAoIG5vZGVOYW1lID09
PSAiaW5wdXQiIHx8IG5vZGVOYW1lID09PSAidGV4dGFyZWEiICkgeworCQlkZXN0LmRlZmF1bHRW
YWx1ZSA9IHNyYy5kZWZhdWx0VmFsdWU7CisJfQorCisJLy8gRXZlbnQgZGF0YSBnZXRzIHJlZmVy
ZW5jZWQgaW5zdGVhZCBvZiBjb3BpZWQgaWYgdGhlIGV4cGFuZG8KKwkvLyBnZXRzIGNvcGllZCB0
b28KKwlkZXN0LnJlbW92ZUF0dHJpYnV0ZSggalF1ZXJ5LmV4cGFuZG8gKTsKK30KKworalF1ZXJ5
LmJ1aWxkRnJhZ21lbnQgPSBmdW5jdGlvbiggYXJncywgbm9kZXMsIHNjcmlwdHMgKSB7CisJdmFy
IGZyYWdtZW50LCBjYWNoZWFibGUsIGNhY2hlcmVzdWx0cywKKwkJZG9jID0gKG5vZGVzICYmIG5v
ZGVzWzBdID8gbm9kZXNbMF0ub3duZXJEb2N1bWVudCB8fCBub2Rlc1swXSA6IGRvY3VtZW50KTsK
KworCS8vIE9ubHkgY2FjaGUgInNtYWxsIiAoMS8yIEtCKSBIVE1MIHN0cmluZ3MgdGhhdCBhcmUg
YXNzb2NpYXRlZCB3aXRoIHRoZSBtYWluIGRvY3VtZW50CisJLy8gQ2xvbmluZyBvcHRpb25zIGxv
c2VzIHRoZSBzZWxlY3RlZCBzdGF0ZSwgc28gZG9uJ3QgY2FjaGUgdGhlbQorCS8vIElFIDYgZG9l
c24ndCBsaWtlIGl0IHdoZW4geW91IHB1dCA8b2JqZWN0PiBvciA8ZW1iZWQ+IGVsZW1lbnRzIGlu
IGEgZnJhZ21lbnQKKwkvLyBBbHNvLCBXZWJLaXQgZG9lcyBub3QgY2xvbmUgJ2NoZWNrZWQnIGF0
dHJpYnV0ZXMgb24gY2xvbmVOb2RlLCBzbyBkb24ndCBjYWNoZQorCWlmICggYXJncy5sZW5ndGgg
PT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09ICJzdHJpbmciICYmIGFyZ3NbMF0ubGVuZ3RoIDwg
NTEyICYmIGRvYyA9PT0gZG9jdW1lbnQgJiYKKwkJYXJnc1swXS5jaGFyQXQoMCkgPT09ICI8IiAm
JiAhcm5vY2FjaGUudGVzdCggYXJnc1swXSApICYmIChqUXVlcnkuc3VwcG9ydC5jaGVja0Nsb25l
IHx8ICFyY2hlY2tlZC50ZXN0KCBhcmdzWzBdICkpICkgeworCisJCWNhY2hlYWJsZSA9IHRydWU7
CisJCWNhY2hlcmVzdWx0cyA9IGpRdWVyeS5mcmFnbWVudHNbIGFyZ3NbMF0gXTsKKwkJaWYgKCBj
YWNoZXJlc3VsdHMgKSB7CisJCQlpZiAoIGNhY2hlcmVzdWx0cyAhPT0gMSApIHsKKwkJCQlmcmFn
bWVudCA9IGNhY2hlcmVzdWx0czsKKwkJCX0KKwkJfQorCX0KKworCWlmICggIWZyYWdtZW50ICkg
eworCQlmcmFnbWVudCA9IGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisJCWpRdWVyeS5j
bGVhbiggYXJncywgZG9jLCBmcmFnbWVudCwgc2NyaXB0cyApOworCX0KKworCWlmICggY2FjaGVh
YmxlICkgeworCQlqUXVlcnkuZnJhZ21lbnRzWyBhcmdzWzBdIF0gPSBjYWNoZXJlc3VsdHMgPyBm
cmFnbWVudCA6IDE7CisJfQorCisJcmV0dXJuIHsgZnJhZ21lbnQ6IGZyYWdtZW50LCBjYWNoZWFi
bGU6IGNhY2hlYWJsZSB9OworfTsKKworalF1ZXJ5LmZyYWdtZW50cyA9IHt9OworCitqUXVlcnku
ZWFjaCh7CisJYXBwZW5kVG86ICJhcHBlbmQiLAorCXByZXBlbmRUbzogInByZXBlbmQiLAorCWlu
c2VydEJlZm9yZTogImJlZm9yZSIsCisJaW5zZXJ0QWZ0ZXI6ICJhZnRlciIsCisJcmVwbGFjZUFs
bDogInJlcGxhY2VXaXRoIgorfSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkgeworCWpRdWVy
eS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNlbGVjdG9yICkgeworCQl2YXIgcmV0ID0gW10sCisJ
CQlpbnNlcnQgPSBqUXVlcnkoIHNlbGVjdG9yICksCisJCQlwYXJlbnQgPSB0aGlzLmxlbmd0aCA9
PT0gMSAmJiB0aGlzWzBdLnBhcmVudE5vZGU7CisKKwkJaWYgKCBwYXJlbnQgJiYgcGFyZW50Lm5v
ZGVUeXBlID09PSAxMSAmJiBwYXJlbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDEgJiYgaW5zZXJ0
Lmxlbmd0aCA9PT0gMSApIHsKKwkJCWluc2VydFsgb3JpZ2luYWwgXSggdGhpc1swXSApOworCQkJ
cmV0dXJuIHRoaXM7CisKKwkJfSBlbHNlIHsKKwkJCWZvciAoIHZhciBpID0gMCwgbCA9IGluc2Vy
dC5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CisJCQkJdmFyIGVsZW1zID0gKGkgPiAwID8gdGhpcy5j
bG9uZSh0cnVlKSA6IHRoaXMpLmdldCgpOworCQkJCWpRdWVyeSggaW5zZXJ0W2ldIClbIG9yaWdp
bmFsIF0oIGVsZW1zICk7CisJCQkJcmV0ID0gcmV0LmNvbmNhdCggZWxlbXMgKTsKKwkJCX0KKwor
CQkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCByZXQsIG5hbWUsIGluc2VydC5zZWxlY3RvciApOwor
CQl9CisJfTsKK30pOworCitmdW5jdGlvbiBnZXRBbGwoIGVsZW0gKSB7CisJaWYgKCAiZ2V0RWxl
bWVudHNCeVRhZ05hbWUiIGluIGVsZW0gKSB7CisJCXJldHVybiBlbGVtLmdldEVsZW1lbnRzQnlU
YWdOYW1lKCAiKiIgKTsKKwkKKwl9IGVsc2UgaWYgKCAicXVlcnlTZWxlY3RvckFsbCIgaW4gZWxl
bSApIHsKKwkJcmV0dXJuIGVsZW0ucXVlcnlTZWxlY3RvckFsbCggIioiICk7CisKKwl9IGVsc2Ug
eworCQlyZXR1cm4gW107CisJfQorfQorCitqUXVlcnkuZXh0ZW5kKHsKKwljbG9uZTogZnVuY3Rp
b24oIGVsZW0sIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkgeworCQl2YXIgY2xv
bmUgPSBlbGVtLmNsb25lTm9kZSh0cnVlKSwKKwkJCQlzcmNFbGVtZW50cywKKwkJCQlkZXN0RWxl
bWVudHMsCisJCQkJaTsKKworCQlpZiAoICghalF1ZXJ5LnN1cHBvcnQubm9DbG9uZUV2ZW50IHx8
ICFqUXVlcnkuc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCkgJiYKKwkJCQkoZWxlbS5ub2RlVHlwZSA9
PT0gMSB8fCBlbGVtLm5vZGVUeXBlID09PSAxMSkgJiYgIWpRdWVyeS5pc1hNTERvYyhlbGVtKSAp
IHsKKwkJCS8vIElFIGNvcGllcyBldmVudHMgYm91bmQgdmlhIGF0dGFjaEV2ZW50IHdoZW4gdXNp
bmcgY2xvbmVOb2RlLgorCQkJLy8gQ2FsbGluZyBkZXRhY2hFdmVudCBvbiB0aGUgY2xvbmUgd2ls
bCBhbHNvIHJlbW92ZSB0aGUgZXZlbnRzCisJCQkvLyBmcm9tIHRoZSBvcmlnaW5hbC4gSW4gb3Jk
ZXIgdG8gZ2V0IGFyb3VuZCB0aGlzLCB3ZSB1c2Ugc29tZQorCQkJLy8gcHJvcHJpZXRhcnkgbWV0
aG9kcyB0byBjbGVhciB0aGUgZXZlbnRzLiBUaGFua3MgdG8gTW9vVG9vbHMKKwkJCS8vIGd1eXMg
Zm9yIHRoaXMgaG90bmVzcy4KKworCQkJY2xvbmVGaXhBdHRyaWJ1dGVzKCBlbGVtLCBjbG9uZSAp
OworCisJCQkvLyBVc2luZyBTaXp6bGUgaGVyZSBpcyBjcmF6eSBzbG93LCBzbyB3ZSB1c2UgZ2V0
RWxlbWVudHNCeVRhZ05hbWUKKwkJCS8vIGluc3RlYWQKKwkJCXNyY0VsZW1lbnRzID0gZ2V0QWxs
KCBlbGVtICk7CisJCQlkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7CisKKwkJCS8vIFdl
aXJkIGl0ZXJhdGlvbiBiZWNhdXNlIElFIHdpbGwgcmVwbGFjZSB0aGUgbGVuZ3RoIHByb3BlcnR5
CisJCQkvLyB3aXRoIGFuIGVsZW1lbnQgaWYgeW91IGFyZSBjbG9uaW5nIHRoZSBib2R5IGFuZCBv
bmUgb2YgdGhlCisJCQkvLyBlbGVtZW50cyBvbiB0aGUgcGFnZSBoYXMgYSBuYW1lIG9yIGlkIG9m
ICJsZW5ndGgiCisJCQlmb3IgKCBpID0gMDsgc3JjRWxlbWVudHNbaV07ICsraSApIHsKKwkJCQlj
bG9uZUZpeEF0dHJpYnV0ZXMoIHNyY0VsZW1lbnRzW2ldLCBkZXN0RWxlbWVudHNbaV0gKTsKKwkJ
CX0KKwkJfQorCisJCS8vIENvcHkgdGhlIGV2ZW50cyBmcm9tIHRoZSBvcmlnaW5hbCB0byB0aGUg
Y2xvbmUKKwkJaWYgKCBkYXRhQW5kRXZlbnRzICkgeworCQkJY2xvbmVDb3B5RXZlbnQoIGVsZW0s
IGNsb25lICk7CisKKwkJCWlmICggZGVlcERhdGFBbmRFdmVudHMgKSB7CisJCQkJc3JjRWxlbWVu
dHMgPSBnZXRBbGwoIGVsZW0gKTsKKwkJCQlkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7
CisKKwkJCQlmb3IgKCBpID0gMDsgc3JjRWxlbWVudHNbaV07ICsraSApIHsKKwkJCQkJY2xvbmVD
b3B5RXZlbnQoIHNyY0VsZW1lbnRzW2ldLCBkZXN0RWxlbWVudHNbaV0gKTsKKwkJCQl9CisJCQl9
CisJCX0KKworCQkvLyBSZXR1cm4gdGhlIGNsb25lZCBzZXQKKwkJcmV0dXJuIGNsb25lOworfSwK
KwljbGVhbjogZnVuY3Rpb24oIGVsZW1zLCBjb250ZXh0LCBmcmFnbWVudCwgc2NyaXB0cyApIHsK
KwkJY29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7CisKKwkJLy8gIWNvbnRleHQuY3JlYXRl
RWxlbWVudCBmYWlscyBpbiBJRSB3aXRoIGFuIGVycm9yIGJ1dCByZXR1cm5zIHR5cGVvZiAnb2Jq
ZWN0JworCQlpZiAoIHR5cGVvZiBjb250ZXh0LmNyZWF0ZUVsZW1lbnQgPT09ICJ1bmRlZmluZWQi
ICkgeworCQkJY29udGV4dCA9IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0WzBdICYm
IGNvbnRleHRbMF0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudDsKKwkJfQorCisJCXZhciByZXQg
PSBbXTsKKworCQlmb3IgKCB2YXIgaSA9IDAsIGVsZW07IChlbGVtID0gZWxlbXNbaV0pICE9IG51
bGw7IGkrKyApIHsKKwkJCWlmICggdHlwZW9mIGVsZW0gPT09ICJudW1iZXIiICkgeworCQkJCWVs
ZW0gKz0gIiI7CisJCQl9CisKKwkJCWlmICggIWVsZW0gKSB7CisJCQkJY29udGludWU7CisJCQl9
CisKKwkJCS8vIENvbnZlcnQgaHRtbCBzdHJpbmcgaW50byBET00gbm9kZXMKKwkJCWlmICggdHlw
ZW9mIGVsZW0gPT09ICJzdHJpbmciICYmICFyaHRtbC50ZXN0KCBlbGVtICkgKSB7CisJCQkJZWxl
bSA9IGNvbnRleHQuY3JlYXRlVGV4dE5vZGUoIGVsZW0gKTsKKworCQkJfSBlbHNlIGlmICggdHlw
ZW9mIGVsZW0gPT09ICJzdHJpbmciICkgeworCQkJCS8vIEZpeCAiWEhUTUwiLXN0eWxlIHRhZ3Mg
aW4gYWxsIGJyb3dzZXJzCisJCQkJZWxlbSA9IGVsZW0ucmVwbGFjZShyeGh0bWxUYWcsICI8JDE+
PC8kMj4iKTsKKworCQkJCS8vIFRyaW0gd2hpdGVzcGFjZSwgb3RoZXJ3aXNlIGluZGV4T2Ygd29u
J3Qgd29yayBhcyBleHBlY3RlZAorCQkJCXZhciB0YWcgPSAocnRhZ05hbWUuZXhlYyggZWxlbSAp
IHx8IFsiIiwgIiJdKVsxXS50b0xvd2VyQ2FzZSgpLAorCQkJCQl3cmFwID0gd3JhcE1hcFsgdGFn
IF0gfHwgd3JhcE1hcC5fZGVmYXVsdCwKKwkJCQkJZGVwdGggPSB3cmFwWzBdLAorCQkJCQlkaXYg
PSBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworCisJCQkJLy8gR28gdG8gaHRtbCBhbmQg
YmFjaywgdGhlbiBwZWVsIG9mZiBleHRyYSB3cmFwcGVycworCQkJCWRpdi5pbm5lckhUTUwgPSB3
cmFwWzFdICsgZWxlbSArIHdyYXBbMl07CisKKwkJCQkvLyBNb3ZlIHRvIHRoZSByaWdodCBkZXB0
aAorCQkJCXdoaWxlICggZGVwdGgtLSApIHsKKwkJCQkJZGl2ID0gZGl2Lmxhc3RDaGlsZDsKKwkJ
CQl9CisKKwkJCQkvLyBSZW1vdmUgSUUncyBhdXRvaW5zZXJ0ZWQgPHRib2R5PiBmcm9tIHRhYmxl
IGZyYWdtZW50cworCQkJCWlmICggIWpRdWVyeS5zdXBwb3J0LnRib2R5ICkgeworCisJCQkJCS8v
IFN0cmluZyB3YXMgYSA8dGFibGU+LCAqbWF5KiBoYXZlIHNwdXJpb3VzIDx0Ym9keT4KKwkJCQkJ
dmFyIGhhc0JvZHkgPSBydGJvZHkudGVzdChlbGVtKSwKKwkJCQkJCXRib2R5ID0gdGFnID09PSAi
dGFibGUiICYmICFoYXNCb2R5ID8KKwkJCQkJCQlkaXYuZmlyc3RDaGlsZCAmJiBkaXYuZmlyc3RD
aGlsZC5jaGlsZE5vZGVzIDoKKworCQkJCQkJCS8vIFN0cmluZyB3YXMgYSBiYXJlIDx0aGVhZD4g
b3IgPHRmb290PgorCQkJCQkJCXdyYXBbMV0gPT09ICI8dGFibGU+IiAmJiAhaGFzQm9keSA/CisJ
CQkJCQkJCWRpdi5jaGlsZE5vZGVzIDoKKwkJCQkJCQkJW107CisKKwkJCQkJZm9yICggdmFyIGog
PSB0Ym9keS5sZW5ndGggLSAxOyBqID49IDAgOyAtLWogKSB7CisJCQkJCQlpZiAoIGpRdWVyeS5u
b2RlTmFtZSggdGJvZHlbIGogXSwgInRib2R5IiApICYmICF0Ym9keVsgaiBdLmNoaWxkTm9kZXMu
bGVuZ3RoICkgeworCQkJCQkJCXRib2R5WyBqIF0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggdGJv
ZHlbIGogXSApOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQl9CisKKwkJCQkvLyBJRSBjb21wbGV0
ZWx5IGtpbGxzIGxlYWRpbmcgd2hpdGVzcGFjZSB3aGVuIGlubmVySFRNTCBpcyB1c2VkCisJCQkJ
aWYgKCAhalF1ZXJ5LnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2UgJiYgcmxlYWRpbmdXaGl0ZXNw
YWNlLnRlc3QoIGVsZW0gKSApIHsKKwkJCQkJZGl2Lmluc2VydEJlZm9yZSggY29udGV4dC5jcmVh
dGVUZXh0Tm9kZSggcmxlYWRpbmdXaGl0ZXNwYWNlLmV4ZWMoZWxlbSlbMF0gKSwgZGl2LmZpcnN0
Q2hpbGQgKTsKKwkJCQl9CisKKwkJCQllbGVtID0gZGl2LmNoaWxkTm9kZXM7CisJCQl9CisKKwkJ
CWlmICggZWxlbS5ub2RlVHlwZSApIHsKKwkJCQlyZXQucHVzaCggZWxlbSApOworCQkJfSBlbHNl
IHsKKwkJCQlyZXQgPSBqUXVlcnkubWVyZ2UoIHJldCwgZWxlbSApOworCQkJfQorCQl9CisKKwkJ
aWYgKCBmcmFnbWVudCApIHsKKwkJCWZvciAoIGkgPSAwOyByZXRbaV07IGkrKyApIHsKKwkJCQlp
ZiAoIHNjcmlwdHMgJiYgalF1ZXJ5Lm5vZGVOYW1lKCByZXRbaV0sICJzY3JpcHQiICkgJiYgKCFy
ZXRbaV0udHlwZSB8fCByZXRbaV0udHlwZS50b0xvd2VyQ2FzZSgpID09PSAidGV4dC9qYXZhc2Ny
aXB0IikgKSB7CisJCQkJCXNjcmlwdHMucHVzaCggcmV0W2ldLnBhcmVudE5vZGUgPyByZXRbaV0u
cGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggcmV0W2ldICkgOiByZXRbaV0gKTsKKworCQkJCX0gZWxz
ZSB7CisJCQkJCWlmICggcmV0W2ldLm5vZGVUeXBlID09PSAxICkgeworCQkJCQkJcmV0LnNwbGlj
ZS5hcHBseSggcmV0LCBbaSArIDEsIDBdLmNvbmNhdChqUXVlcnkubWFrZUFycmF5KHJldFtpXS5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IikpKSApOworCQkJCQl9CisJCQkJCWZyYWdtZW50
LmFwcGVuZENoaWxkKCByZXRbaV0gKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlyZXR1cm4gcmV0
OworCX0sCisKKwljbGVhbkRhdGE6IGZ1bmN0aW9uKCBlbGVtcyApIHsKKwkJdmFyIGRhdGEsIGlk
LCBjYWNoZSA9IGpRdWVyeS5jYWNoZSwgaW50ZXJuYWxLZXkgPSBqUXVlcnkuZXhwYW5kbywgc3Bl
Y2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsLAorCQkJZGVsZXRlRXhwYW5kbyA9IGpRdWVyeS5z
dXBwb3J0LmRlbGV0ZUV4cGFuZG87CisKKwkJZm9yICggdmFyIGkgPSAwLCBlbGVtOyAoZWxlbSA9
IGVsZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7CisJCQlpZiAoIGVsZW0ubm9kZU5hbWUgJiYgalF1
ZXJ5Lm5vRGF0YVtlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldICkgeworCQkJCWNvbnRpbnVl
OworCQkJfQorCisJCQlpZCA9IGVsZW1bIGpRdWVyeS5leHBhbmRvIF07CisKKwkJCWlmICggaWQg
KSB7CisJCQkJZGF0YSA9IGNhY2hlWyBpZCBdICYmIGNhY2hlWyBpZCBdWyBpbnRlcm5hbEtleSBd
OworCisJCQkJaWYgKCBkYXRhICYmIGRhdGEuZXZlbnRzICkgeworCQkJCQlmb3IgKCB2YXIgdHlw
ZSBpbiBkYXRhLmV2ZW50cyApIHsKKwkJCQkJCWlmICggc3BlY2lhbFsgdHlwZSBdICkgeworCQkJ
CQkJCWpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKTsKKworCQkJCQkJLy8gVGhpcyBp
cyBhIHNob3J0Y3V0IHRvIGF2b2lkIGpRdWVyeS5ldmVudC5yZW1vdmUncyBvdmVyaGVhZAorCQkJ
CQkJfSBlbHNlIHsKKwkJCQkJCQlqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGRhdGEu
aGFuZGxlICk7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQkvLyBOdWxsIHRoZSBET00gcmVmZXJl
bmNlIHRvIGF2b2lkIElFNi83LzggbGVhayAoIzcwNTQpCisJCQkJCWlmICggZGF0YS5oYW5kbGUg
KSB7CisJCQkJCQlkYXRhLmhhbmRsZS5lbGVtID0gbnVsbDsKKwkJCQkJfQorCQkJCX0KKworCQkJ
CWlmICggZGVsZXRlRXhwYW5kbyApIHsKKwkJCQkJZGVsZXRlIGVsZW1bIGpRdWVyeS5leHBhbmRv
IF07CisKKwkJCQl9IGVsc2UgaWYgKCBlbGVtLnJlbW92ZUF0dHJpYnV0ZSApIHsKKwkJCQkJZWxl
bS5yZW1vdmVBdHRyaWJ1dGUoIGpRdWVyeS5leHBhbmRvICk7CisJCQkJfQorCisJCQkJZGVsZXRl
IGNhY2hlWyBpZCBdOworCQkJfQorCQl9CisJfQorfSk7CisKK2Z1bmN0aW9uIGV2YWxTY3JpcHQo
IGksIGVsZW0gKSB7CisJaWYgKCBlbGVtLnNyYyApIHsKKwkJalF1ZXJ5LmFqYXgoeworCQkJdXJs
OiBlbGVtLnNyYywKKwkJCWFzeW5jOiBmYWxzZSwKKwkJCWRhdGFUeXBlOiAic2NyaXB0IgorCQl9
KTsKKwl9IGVsc2UgeworCQlqUXVlcnkuZ2xvYmFsRXZhbCggZWxlbS50ZXh0IHx8IGVsZW0udGV4
dENvbnRlbnQgfHwgZWxlbS5pbm5lckhUTUwgfHwgIiIgKTsKKwl9CisKKwlpZiAoIGVsZW0ucGFy
ZW50Tm9kZSApIHsKKwkJZWxlbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbGVtICk7CisJfQor
fQorCit9KSggalF1ZXJ5ICk7CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9qcXVl
cnkvcmVzb3VyY2VzL3NyYy9tYW5pcHVsYXRpb24uanMKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ct
dGFicwogICArIHllcwoKSW5kZXg6IExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvc3JjL29m
ZnNldC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3NyYy9v
ZmZzZXQuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Ny
Yy9vZmZzZXQuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzA1IEBACisoZnVuY3Rpb24oIGpR
dWVyeSApIHsKKwordmFyIHJ0YWJsZSA9IC9edCg/OmFibGV8ZHxoKSQvaSwKKwlycm9vdCA9IC9e
KD86Ym9keXxodG1sKSQvaTsKKworaWYgKCAiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiBpbiBkb2N1
bWVudC5kb2N1bWVudEVsZW1lbnQgKSB7CisJalF1ZXJ5LmZuLm9mZnNldCA9IGZ1bmN0aW9uKCBv
cHRpb25zICkgeworCQl2YXIgZWxlbSA9IHRoaXNbMF0sIGJveDsKKworCQlpZiAoIG9wdGlvbnMg
KSB7CisJCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBpICkgeworCQkJCWpRdWVyeS5vZmZz
ZXQuc2V0T2Zmc2V0KCB0aGlzLCBvcHRpb25zLCBpICk7CisJCQl9KTsKKwkJfQorCisJCWlmICgg
IWVsZW0gfHwgIWVsZW0ub3duZXJEb2N1bWVudCApIHsKKwkJCXJldHVybiBudWxsOworCQl9CisK
KwkJaWYgKCBlbGVtID09PSBlbGVtLm93bmVyRG9jdW1lbnQuYm9keSApIHsKKwkJCXJldHVybiBq
UXVlcnkub2Zmc2V0LmJvZHlPZmZzZXQoIGVsZW0gKTsKKwkJfQorCisJCXRyeSB7CisJCQlib3gg
PSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworCQl9IGNhdGNoKGUpIHt9CisKKwkJdmFy
IGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudCwKKwkJCWRvY0VsZW0gPSBkb2MuZG9jdW1lbnRFbGVt
ZW50OworCisJCS8vIE1ha2Ugc3VyZSB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIGEgZGlzY29ubmVj
dGVkIERPTSBub2RlCisJCWlmICggIWJveCB8fCAhalF1ZXJ5LmNvbnRhaW5zKCBkb2NFbGVtLCBl
bGVtICkgKSB7CisJCQlyZXR1cm4gYm94ID8geyB0b3A6IGJveC50b3AsIGxlZnQ6IGJveC5sZWZ0
IH0gOiB7IHRvcDogMCwgbGVmdDogMCB9OworCQl9CisKKwkJdmFyIGJvZHkgPSBkb2MuYm9keSwK
KwkJCXdpbiA9IGdldFdpbmRvdyhkb2MpLAorCQkJY2xpZW50VG9wICA9IGRvY0VsZW0uY2xpZW50
VG9wICB8fCBib2R5LmNsaWVudFRvcCAgfHwgMCwKKwkJCWNsaWVudExlZnQgPSBkb2NFbGVtLmNs
aWVudExlZnQgfHwgYm9keS5jbGllbnRMZWZ0IHx8IDAsCisJCQlzY3JvbGxUb3AgID0gKHdpbi5w
YWdlWU9mZnNldCB8fCBqUXVlcnkuc3VwcG9ydC5ib3hNb2RlbCAmJiBkb2NFbGVtLnNjcm9sbFRv
cCAgfHwgYm9keS5zY3JvbGxUb3AgKSwKKwkJCXNjcm9sbExlZnQgPSAod2luLnBhZ2VYT2Zmc2V0
IHx8IGpRdWVyeS5zdXBwb3J0LmJveE1vZGVsICYmIGRvY0VsZW0uc2Nyb2xsTGVmdCB8fCBib2R5
LnNjcm9sbExlZnQpLAorCQkJdG9wICA9IGJveC50b3AgICsgc2Nyb2xsVG9wICAtIGNsaWVudFRv
cCwKKwkJCWxlZnQgPSBib3gubGVmdCArIHNjcm9sbExlZnQgLSBjbGllbnRMZWZ0OworCisJCXJl
dHVybiB7IHRvcDogdG9wLCBsZWZ0OiBsZWZ0IH07CisJfTsKKworfSBlbHNlIHsKKwlqUXVlcnku
Zm4ub2Zmc2V0ID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7CisJCXZhciBlbGVtID0gdGhpc1swXTsK
KworCQlpZiAoIG9wdGlvbnMgKSB7CisJCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBpICkg
eworCQkJCWpRdWVyeS5vZmZzZXQuc2V0T2Zmc2V0KCB0aGlzLCBvcHRpb25zLCBpICk7CisJCQl9
KTsKKwkJfQorCisJCWlmICggIWVsZW0gfHwgIWVsZW0ub3duZXJEb2N1bWVudCApIHsKKwkJCXJl
dHVybiBudWxsOworCQl9CisKKwkJaWYgKCBlbGVtID09PSBlbGVtLm93bmVyRG9jdW1lbnQuYm9k
eSApIHsKKwkJCXJldHVybiBqUXVlcnkub2Zmc2V0LmJvZHlPZmZzZXQoIGVsZW0gKTsKKwkJfQor
CisJCWpRdWVyeS5vZmZzZXQuaW5pdGlhbGl6ZSgpOworCisJCXZhciBjb21wdXRlZFN0eWxlLAor
CQkJb2Zmc2V0UGFyZW50ID0gZWxlbS5vZmZzZXRQYXJlbnQsCisJCQlwcmV2T2Zmc2V0UGFyZW50
ID0gZWxlbSwKKwkJCWRvYyA9IGVsZW0ub3duZXJEb2N1bWVudCwKKwkJCWRvY0VsZW0gPSBkb2Mu
ZG9jdW1lbnRFbGVtZW50LAorCQkJYm9keSA9IGRvYy5ib2R5LAorCQkJZGVmYXVsdFZpZXcgPSBk
b2MuZGVmYXVsdFZpZXcsCisJCQlwcmV2Q29tcHV0ZWRTdHlsZSA9IGRlZmF1bHRWaWV3ID8gZGVm
YXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSwgbnVsbCApIDogZWxlbS5jdXJyZW50U3R5
bGUsCisJCQl0b3AgPSBlbGVtLm9mZnNldFRvcCwKKwkJCWxlZnQgPSBlbGVtLm9mZnNldExlZnQ7
CisKKwkJd2hpbGUgKCAoZWxlbSA9IGVsZW0ucGFyZW50Tm9kZSkgJiYgZWxlbSAhPT0gYm9keSAm
JiBlbGVtICE9PSBkb2NFbGVtICkgeworCQkJaWYgKCBqUXVlcnkub2Zmc2V0LnN1cHBvcnRzRml4
ZWRQb3NpdGlvbiAmJiBwcmV2Q29tcHV0ZWRTdHlsZS5wb3NpdGlvbiA9PT0gImZpeGVkIiApIHsK
KwkJCQlicmVhazsKKwkJCX0KKworCQkJY29tcHV0ZWRTdHlsZSA9IGRlZmF1bHRWaWV3ID8gZGVm
YXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtLCBudWxsKSA6IGVsZW0uY3VycmVudFN0eWxl
OworCQkJdG9wICAtPSBlbGVtLnNjcm9sbFRvcDsKKwkJCWxlZnQgLT0gZWxlbS5zY3JvbGxMZWZ0
OworCisJCQlpZiAoIGVsZW0gPT09IG9mZnNldFBhcmVudCApIHsKKwkJCQl0b3AgICs9IGVsZW0u
b2Zmc2V0VG9wOworCQkJCWxlZnQgKz0gZWxlbS5vZmZzZXRMZWZ0OworCisJCQkJaWYgKCBqUXVl
cnkub2Zmc2V0LmRvZXNOb3RBZGRCb3JkZXIgJiYgIShqUXVlcnkub2Zmc2V0LmRvZXNBZGRCb3Jk
ZXJGb3JUYWJsZUFuZENlbGxzICYmIHJ0YWJsZS50ZXN0KGVsZW0ubm9kZU5hbWUpKSApIHsKKwkJ
CQkJdG9wICArPSBwYXJzZUZsb2F0KCBjb21wdXRlZFN0eWxlLmJvcmRlclRvcFdpZHRoICApIHx8
IDA7CisJCQkJCWxlZnQgKz0gcGFyc2VGbG9hdCggY29tcHV0ZWRTdHlsZS5ib3JkZXJMZWZ0V2lk
dGggKSB8fCAwOworCQkJCX0KKworCQkJCXByZXZPZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQ7
CisJCQkJb2Zmc2V0UGFyZW50ID0gZWxlbS5vZmZzZXRQYXJlbnQ7CisJCQl9CisKKwkJCWlmICgg
alF1ZXJ5Lm9mZnNldC5zdWJ0cmFjdHNCb3JkZXJGb3JPdmVyZmxvd05vdFZpc2libGUgJiYgY29t
cHV0ZWRTdHlsZS5vdmVyZmxvdyAhPT0gInZpc2libGUiICkgeworCQkJCXRvcCAgKz0gcGFyc2VG
bG9hdCggY29tcHV0ZWRTdHlsZS5ib3JkZXJUb3BXaWR0aCAgKSB8fCAwOworCQkJCWxlZnQgKz0g
cGFyc2VGbG9hdCggY29tcHV0ZWRTdHlsZS5ib3JkZXJMZWZ0V2lkdGggKSB8fCAwOworCQkJfQor
CisJCQlwcmV2Q29tcHV0ZWRTdHlsZSA9IGNvbXB1dGVkU3R5bGU7CisJCX0KKworCQlpZiAoIHBy
ZXZDb21wdXRlZFN0eWxlLnBvc2l0aW9uID09PSAicmVsYXRpdmUiIHx8IHByZXZDb21wdXRlZFN0
eWxlLnBvc2l0aW9uID09PSAic3RhdGljIiApIHsKKwkJCXRvcCAgKz0gYm9keS5vZmZzZXRUb3A7
CisJCQlsZWZ0ICs9IGJvZHkub2Zmc2V0TGVmdDsKKwkJfQorCisJCWlmICggalF1ZXJ5Lm9mZnNl
dC5zdXBwb3J0c0ZpeGVkUG9zaXRpb24gJiYgcHJldkNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09
ICJmaXhlZCIgKSB7CisJCQl0b3AgICs9IE1hdGgubWF4KCBkb2NFbGVtLnNjcm9sbFRvcCwgYm9k
eS5zY3JvbGxUb3AgKTsKKwkJCWxlZnQgKz0gTWF0aC5tYXgoIGRvY0VsZW0uc2Nyb2xsTGVmdCwg
Ym9keS5zY3JvbGxMZWZ0ICk7CisJCX0KKworCQlyZXR1cm4geyB0b3A6IHRvcCwgbGVmdDogbGVm
dCB9OworCX07Cit9CisKK2pRdWVyeS5vZmZzZXQgPSB7CisJaW5pdGlhbGl6ZTogZnVuY3Rpb24o
KSB7CisJCXZhciBib2R5ID0gZG9jdW1lbnQuYm9keSwgY29udGFpbmVyID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2IiksIGlubmVyRGl2LCBjaGVja0RpdiwgdGFibGUsIHRkLCBib2R5TWFy
Z2luVG9wID0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyhib2R5LCAibWFyZ2luVG9wIikgKSB8fCAw
LAorCQkJaHRtbCA9ICI8ZGl2IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7
bWFyZ2luOjA7Ym9yZGVyOjVweCBzb2xpZCAjMDAwO3BhZGRpbmc6MDt3aWR0aDoxcHg7aGVpZ2h0
OjFweDsnPjxkaXY+PC9kaXY+PC9kaXY+PHRhYmxlIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTt0
b3A6MDtsZWZ0OjA7bWFyZ2luOjA7Ym9yZGVyOjVweCBzb2xpZCAjMDAwO3BhZGRpbmc6MDt3aWR0
aDoxcHg7aGVpZ2h0OjFweDsnIGNlbGxwYWRkaW5nPScwJyBjZWxsc3BhY2luZz0nMCc+PHRyPjx0
ZD48L3RkPjwvdHI+PC90YWJsZT4iOworCisJCWpRdWVyeS5leHRlbmQoIGNvbnRhaW5lci5zdHls
ZSwgeyBwb3NpdGlvbjogImFic29sdXRlIiwgdG9wOiAwLCBsZWZ0OiAwLCBtYXJnaW46IDAsIGJv
cmRlcjogMCwgd2lkdGg6ICIxcHgiLCBoZWlnaHQ6ICIxcHgiLCB2aXNpYmlsaXR5OiAiaGlkZGVu
IiB9ICk7CisKKwkJY29udGFpbmVyLmlubmVySFRNTCA9IGh0bWw7CisJCWJvZHkuaW5zZXJ0QmVm
b3JlKCBjb250YWluZXIsIGJvZHkuZmlyc3RDaGlsZCApOworCQlpbm5lckRpdiA9IGNvbnRhaW5l
ci5maXJzdENoaWxkOworCQljaGVja0RpdiA9IGlubmVyRGl2LmZpcnN0Q2hpbGQ7CisJCXRkID0g
aW5uZXJEaXYubmV4dFNpYmxpbmcuZmlyc3RDaGlsZC5maXJzdENoaWxkOworCisJCXRoaXMuZG9l
c05vdEFkZEJvcmRlciA9IChjaGVja0Rpdi5vZmZzZXRUb3AgIT09IDUpOworCQl0aGlzLmRvZXNB
ZGRCb3JkZXJGb3JUYWJsZUFuZENlbGxzID0gKHRkLm9mZnNldFRvcCA9PT0gNSk7CisKKwkJY2hl
Y2tEaXYuc3R5bGUucG9zaXRpb24gPSAiZml4ZWQiOworCQljaGVja0Rpdi5zdHlsZS50b3AgPSAi
MjBweCI7CisKKwkJLy8gc2FmYXJpIHN1YnRyYWN0cyBwYXJlbnQgYm9yZGVyIHdpZHRoIGhlcmUg
d2hpY2ggaXMgNXB4CisJCXRoaXMuc3VwcG9ydHNGaXhlZFBvc2l0aW9uID0gKGNoZWNrRGl2Lm9m
ZnNldFRvcCA9PT0gMjAgfHwgY2hlY2tEaXYub2Zmc2V0VG9wID09PSAxNSk7CisJCWNoZWNrRGl2
LnN0eWxlLnBvc2l0aW9uID0gY2hlY2tEaXYuc3R5bGUudG9wID0gIiI7CisKKwkJaW5uZXJEaXYu
c3R5bGUub3ZlcmZsb3cgPSAiaGlkZGVuIjsKKwkJaW5uZXJEaXYuc3R5bGUucG9zaXRpb24gPSAi
cmVsYXRpdmUiOworCisJCXRoaXMuc3VidHJhY3RzQm9yZGVyRm9yT3ZlcmZsb3dOb3RWaXNpYmxl
ID0gKGNoZWNrRGl2Lm9mZnNldFRvcCA9PT0gLTUpOworCisJCXRoaXMuZG9lc05vdEluY2x1ZGVN
YXJnaW5JbkJvZHlPZmZzZXQgPSAoYm9keS5vZmZzZXRUb3AgIT09IGJvZHlNYXJnaW5Ub3ApOwor
CisJCWJvZHkucmVtb3ZlQ2hpbGQoIGNvbnRhaW5lciApOworCQlib2R5ID0gY29udGFpbmVyID0g
aW5uZXJEaXYgPSBjaGVja0RpdiA9IHRhYmxlID0gdGQgPSBudWxsOworCQlqUXVlcnkub2Zmc2V0
LmluaXRpYWxpemUgPSBqUXVlcnkubm9vcDsKKwl9LAorCisJYm9keU9mZnNldDogZnVuY3Rpb24o
IGJvZHkgKSB7CisJCXZhciB0b3AgPSBib2R5Lm9mZnNldFRvcCwKKwkJCWxlZnQgPSBib2R5Lm9m
ZnNldExlZnQ7CisKKwkJalF1ZXJ5Lm9mZnNldC5pbml0aWFsaXplKCk7CisKKwkJaWYgKCBqUXVl
cnkub2Zmc2V0LmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0ICkgeworCQkJdG9wICAr
PSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKGJvZHksICJtYXJnaW5Ub3AiKSApIHx8IDA7CisJCQls
ZWZ0ICs9IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoYm9keSwgIm1hcmdpbkxlZnQiKSApIHx8IDA7
CisJCX0KKworCQlyZXR1cm4geyB0b3A6IHRvcCwgbGVmdDogbGVmdCB9OworCX0sCisKKwlzZXRP
ZmZzZXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBpICkgeworCQl2YXIgcG9zaXRpb24gPSBq
UXVlcnkuY3NzKCBlbGVtLCAicG9zaXRpb24iICk7CisKKwkJLy8gc2V0IHBvc2l0aW9uIGZpcnN0
LCBpbi1jYXNlIHRvcC9sZWZ0IGFyZSBzZXQgZXZlbiBvbiBzdGF0aWMgZWxlbQorCQlpZiAoIHBv
c2l0aW9uID09PSAic3RhdGljIiApIHsKKwkJCWVsZW0uc3R5bGUucG9zaXRpb24gPSAicmVsYXRp
dmUiOworCQl9CisKKwkJdmFyIGN1ckVsZW0gPSBqUXVlcnkoIGVsZW0gKSwKKwkJCWN1ck9mZnNl
dCA9IGN1ckVsZW0ub2Zmc2V0KCksCisJCQljdXJDU1NUb3AgPSBqUXVlcnkuY3NzKCBlbGVtLCAi
dG9wIiApLAorCQkJY3VyQ1NTTGVmdCA9IGpRdWVyeS5jc3MoIGVsZW0sICJsZWZ0IiApLAorCQkJ
Y2FsY3VsYXRlUG9zaXRpb24gPSAocG9zaXRpb24gPT09ICJhYnNvbHV0ZSIgJiYgalF1ZXJ5Lmlu
QXJyYXkoJ2F1dG8nLCBbY3VyQ1NTVG9wLCBjdXJDU1NMZWZ0XSkgPiAtMSksCisJCQlwcm9wcyA9
IHt9LCBjdXJQb3NpdGlvbiA9IHt9LCBjdXJUb3AsIGN1ckxlZnQ7CisKKwkJLy8gbmVlZCB0byBi
ZSBhYmxlIHRvIGNhbGN1bGF0ZSBwb3NpdGlvbiBpZiBlaXRoZXIgdG9wIG9yIGxlZnQgaXMgYXV0
byBhbmQgcG9zaXRpb24gaXMgYWJzb2x1dGUKKwkJaWYgKCBjYWxjdWxhdGVQb3NpdGlvbiApIHsK
KwkJCWN1clBvc2l0aW9uID0gY3VyRWxlbS5wb3NpdGlvbigpOworCQl9CisKKwkJY3VyVG9wICA9
IGNhbGN1bGF0ZVBvc2l0aW9uID8gY3VyUG9zaXRpb24udG9wICA6IHBhcnNlSW50KCBjdXJDU1NU
b3AsICAxMCApIHx8IDA7CisJCWN1ckxlZnQgPSBjYWxjdWxhdGVQb3NpdGlvbiA/IGN1clBvc2l0
aW9uLmxlZnQgOiBwYXJzZUludCggY3VyQ1NTTGVmdCwgMTAgKSB8fCAwOworCisJCWlmICggalF1
ZXJ5LmlzRnVuY3Rpb24oIG9wdGlvbnMgKSApIHsKKwkJCW9wdGlvbnMgPSBvcHRpb25zLmNhbGwo
IGVsZW0sIGksIGN1ck9mZnNldCApOworCQl9CisKKwkJaWYgKG9wdGlvbnMudG9wICE9IG51bGwp
IHsKKwkJCXByb3BzLnRvcCA9IChvcHRpb25zLnRvcCAtIGN1ck9mZnNldC50b3ApICsgY3VyVG9w
OworCQl9CisJCWlmIChvcHRpb25zLmxlZnQgIT0gbnVsbCkgeworCQkJcHJvcHMubGVmdCA9IChv
cHRpb25zLmxlZnQgLSBjdXJPZmZzZXQubGVmdCkgKyBjdXJMZWZ0OworCQl9CisKKwkJaWYgKCAi
dXNpbmciIGluIG9wdGlvbnMgKSB7CisJCQlvcHRpb25zLnVzaW5nLmNhbGwoIGVsZW0sIHByb3Bz
ICk7CisJCX0gZWxzZSB7CisJCQljdXJFbGVtLmNzcyggcHJvcHMgKTsKKwkJfQorCX0KK307CisK
KworalF1ZXJ5LmZuLmV4dGVuZCh7CisJcG9zaXRpb246IGZ1bmN0aW9uKCkgeworCQlpZiAoICF0
aGlzWzBdICkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKworCQl2YXIgZWxlbSA9IHRoaXNbMF0s
CisKKwkJLy8gR2V0ICpyZWFsKiBvZmZzZXRQYXJlbnQKKwkJb2Zmc2V0UGFyZW50ID0gdGhpcy5v
ZmZzZXRQYXJlbnQoKSwKKworCQkvLyBHZXQgY29ycmVjdCBvZmZzZXRzCisJCW9mZnNldCAgICAg
ICA9IHRoaXMub2Zmc2V0KCksCisJCXBhcmVudE9mZnNldCA9IHJyb290LnRlc3Qob2Zmc2V0UGFy
ZW50WzBdLm5vZGVOYW1lKSA/IHsgdG9wOiAwLCBsZWZ0OiAwIH0gOiBvZmZzZXRQYXJlbnQub2Zm
c2V0KCk7CisKKwkJLy8gU3VidHJhY3QgZWxlbWVudCBtYXJnaW5zCisJCS8vIG5vdGU6IHdoZW4g
YW4gZWxlbWVudCBoYXMgbWFyZ2luOiBhdXRvIHRoZSBvZmZzZXRMZWZ0IGFuZCBtYXJnaW5MZWZ0
CisJCS8vIGFyZSB0aGUgc2FtZSBpbiBTYWZhcmkgY2F1c2luZyBvZmZzZXQubGVmdCB0byBpbmNv
cnJlY3RseSBiZSAwCisJCW9mZnNldC50b3AgIC09IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoZWxl
bSwgIm1hcmdpblRvcCIpICkgfHwgMDsKKwkJb2Zmc2V0LmxlZnQgLT0gcGFyc2VGbG9hdCggalF1
ZXJ5LmNzcyhlbGVtLCAibWFyZ2luTGVmdCIpICkgfHwgMDsKKworCQkvLyBBZGQgb2Zmc2V0UGFy
ZW50IGJvcmRlcnMKKwkJcGFyZW50T2Zmc2V0LnRvcCAgKz0gcGFyc2VGbG9hdCggalF1ZXJ5LmNz
cyhvZmZzZXRQYXJlbnRbMF0sICJib3JkZXJUb3BXaWR0aCIpICkgfHwgMDsKKwkJcGFyZW50T2Zm
c2V0LmxlZnQgKz0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyhvZmZzZXRQYXJlbnRbMF0sICJib3Jk
ZXJMZWZ0V2lkdGgiKSApIHx8IDA7CisKKwkJLy8gU3VidHJhY3QgdGhlIHR3byBvZmZzZXRzCisJ
CXJldHVybiB7CisJCQl0b3A6ICBvZmZzZXQudG9wICAtIHBhcmVudE9mZnNldC50b3AsCisJCQls
ZWZ0OiBvZmZzZXQubGVmdCAtIHBhcmVudE9mZnNldC5sZWZ0CisJCX07CisJfSwKKworCW9mZnNl
dFBhcmVudDogZnVuY3Rpb24oKSB7CisJCXJldHVybiB0aGlzLm1hcChmdW5jdGlvbigpIHsKKwkJ
CXZhciBvZmZzZXRQYXJlbnQgPSB0aGlzLm9mZnNldFBhcmVudCB8fCBkb2N1bWVudC5ib2R5Owor
CQkJd2hpbGUgKCBvZmZzZXRQYXJlbnQgJiYgKCFycm9vdC50ZXN0KG9mZnNldFBhcmVudC5ub2Rl
TmFtZSkgJiYgalF1ZXJ5LmNzcyhvZmZzZXRQYXJlbnQsICJwb3NpdGlvbiIpID09PSAic3RhdGlj
IikgKSB7CisJCQkJb2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50Lm9mZnNldFBhcmVudDsKKwkJ
CX0KKwkJCXJldHVybiBvZmZzZXRQYXJlbnQ7CisJCX0pOworCX0KK30pOworCisKKy8vIENyZWF0
ZSBzY3JvbGxMZWZ0IGFuZCBzY3JvbGxUb3AgbWV0aG9kcworalF1ZXJ5LmVhY2goIFsiTGVmdCIs
ICJUb3AiXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7CisJdmFyIG1ldGhvZCA9ICJzY3JvbGwiICsg
bmFtZTsKKworCWpRdWVyeS5mblsgbWV0aG9kIF0gPSBmdW5jdGlvbih2YWwpIHsKKwkJdmFyIGVs
ZW0gPSB0aGlzWzBdLCB3aW47CisKKwkJaWYgKCAhZWxlbSApIHsKKwkJCXJldHVybiBudWxsOwor
CQl9CisKKwkJaWYgKCB2YWwgIT09IHVuZGVmaW5lZCApIHsKKwkJCS8vIFNldCB0aGUgc2Nyb2xs
IG9mZnNldAorCQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKKwkJCQl3aW4gPSBnZXRX
aW5kb3coIHRoaXMgKTsKKworCQkJCWlmICggd2luICkgeworCQkJCQl3aW4uc2Nyb2xsVG8oCisJ
CQkJCQkhaSA/IHZhbCA6IGpRdWVyeSh3aW4pLnNjcm9sbExlZnQoKSwKKwkJCQkJCWkgPyB2YWwg
OiBqUXVlcnkod2luKS5zY3JvbGxUb3AoKQorCQkJCQkpOworCisJCQkJfSBlbHNlIHsKKwkJCQkJ
dGhpc1sgbWV0aG9kIF0gPSB2YWw7CisJCQkJfQorCQkJfSk7CisJCX0gZWxzZSB7CisJCQl3aW4g
PSBnZXRXaW5kb3coIGVsZW0gKTsKKworCQkJLy8gUmV0dXJuIHRoZSBzY3JvbGwgb2Zmc2V0CisJ
CQlyZXR1cm4gd2luID8gKCJwYWdlWE9mZnNldCIgaW4gd2luKSA/IHdpblsgaSA/ICJwYWdlWU9m
ZnNldCIgOiAicGFnZVhPZmZzZXQiIF0gOgorCQkJCWpRdWVyeS5zdXBwb3J0LmJveE1vZGVsICYm
IHdpbi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbIG1ldGhvZCBdIHx8CisJCQkJCXdpbi5kb2N1
bWVudC5ib2R5WyBtZXRob2QgXSA6CisJCQkJZWxlbVsgbWV0aG9kIF07CisJCX0KKwl9OworfSk7
CisKK2Z1bmN0aW9uIGdldFdpbmRvdyggZWxlbSApIHsKKwlyZXR1cm4galF1ZXJ5LmlzV2luZG93
KCBlbGVtICkgPworCQllbGVtIDoKKwkJZWxlbS5ub2RlVHlwZSA9PT0gOSA/CisJCQllbGVtLmRl
ZmF1bHRWaWV3IHx8IGVsZW0ucGFyZW50V2luZG93IDoKKwkJCWZhbHNlOworfQorCit9KSggalF1
ZXJ5ICk7CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2Vz
L3NyYy9vZmZzZXQuanMKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICArIHllcwoKSW5k
ZXg6IExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvc3JjL291dHJvLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvc3JjL291dHJvLmpzCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy9zcmMvb3V0cm8uanMJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMiBAQAord2luZG93LmpRdWVyeSA9IHdpbmRvdy4kID0galF1ZXJ5Owor
fSkod2luZG93KTsKSW5kZXg6IExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvc3JjL3F1ZXVl
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvc3JjL3F1ZXVl
LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy9zcmMvcXVl
dWUuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTkgQEAKKyhmdW5jdGlvbiggalF1ZXJ5ICkg
eworCitqUXVlcnkuZXh0ZW5kKHsKKwlxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGRhdGEg
KSB7CisJCWlmICggIWVsZW0gKSB7CisJCQlyZXR1cm47CisJCX0KKworCQl0eXBlID0gKHR5cGUg
fHwgImZ4IikgKyAicXVldWUiOworCQl2YXIgcSA9IGpRdWVyeS5fZGF0YSggZWxlbSwgdHlwZSAp
OworCisJCS8vIFNwZWVkIHVwIGRlcXVldWUgYnkgZ2V0dGluZyBvdXQgcXVpY2tseSBpZiB0aGlz
IGlzIGp1c3QgYSBsb29rdXAKKwkJaWYgKCAhZGF0YSApIHsKKwkJCXJldHVybiBxIHx8IFtdOwor
CQl9CisKKwkJaWYgKCAhcSB8fCBqUXVlcnkuaXNBcnJheShkYXRhKSApIHsKKwkJCXEgPSBqUXVl
cnkuX2RhdGEoIGVsZW0sIHR5cGUsIGpRdWVyeS5tYWtlQXJyYXkoZGF0YSkgKTsKKworCQl9IGVs
c2UgeworCQkJcS5wdXNoKCBkYXRhICk7CisJCX0KKworCQlyZXR1cm4gcTsKKwl9LAorCisJZGVx
dWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7CisJCXR5cGUgPSB0eXBlIHx8ICJmeCI7CisK
KwkJdmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCBlbGVtLCB0eXBlICksCisJCQlmbiA9IHF1ZXVl
LnNoaWZ0KCk7CisKKwkJLy8gSWYgdGhlIGZ4IHF1ZXVlIGlzIGRlcXVldWVkLCBhbHdheXMgcmVt
b3ZlIHRoZSBwcm9ncmVzcyBzZW50aW5lbAorCQlpZiAoIGZuID09PSAiaW5wcm9ncmVzcyIgKSB7
CisJCQlmbiA9IHF1ZXVlLnNoaWZ0KCk7CisJCX0KKworCQlpZiAoIGZuICkgeworCQkJLy8gQWRk
IGEgcHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJldmVudCB0aGUgZnggcXVldWUgZnJvbSBiZWluZwor
CQkJLy8gYXV0b21hdGljYWxseSBkZXF1ZXVlZAorCQkJaWYgKCB0eXBlID09PSAiZngiICkgewor
CQkJCXF1ZXVlLnVuc2hpZnQoImlucHJvZ3Jlc3MiKTsKKwkJCX0KKworCQkJZm4uY2FsbChlbGVt
LCBmdW5jdGlvbigpIHsKKwkJCQlqUXVlcnkuZGVxdWV1ZShlbGVtLCB0eXBlKTsKKwkJCX0pOwor
CQl9CisKKwkJaWYgKCAhcXVldWUubGVuZ3RoICkgeworCQkJalF1ZXJ5LnJlbW92ZURhdGEoIGVs
ZW0sIHR5cGUgKyAicXVldWUiLCB0cnVlICk7CisJCX0KKwl9Cit9KTsKKworalF1ZXJ5LmZuLmV4
dGVuZCh7CisJcXVldWU6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkgeworCQlpZiAoIHR5cGVvZiB0
eXBlICE9PSAic3RyaW5nIiApIHsKKwkJCWRhdGEgPSB0eXBlOworCQkJdHlwZSA9ICJmeCI7CisJ
CX0KKworCQlpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCApIHsKKwkJCXJldHVybiBqUXVlcnkucXVl
dWUoIHRoaXNbMF0sIHR5cGUgKTsKKwkJfQorCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBp
ICkgeworCQkJdmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBkYXRhICk7CisK
KwkJCWlmICggdHlwZSA9PT0gImZ4IiAmJiBxdWV1ZVswXSAhPT0gImlucHJvZ3Jlc3MiICkgewor
CQkJCWpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7CisJCQl9CisJCX0pOworCX0sCisJZGVx
dWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7CisJCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7
CisJCQlqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApOworCQl9KTsKKwl9LAorCisJLy8gQmFz
ZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xpbnQgSGVsZmVycywgd2l0aCBwZXJtaXNzaW9uLgor
CS8vIGh0dHA6Ly9ibGluZHNpZ25hbHMuY29tL2luZGV4LnBocC8yMDA5LzA3L2pxdWVyeS1kZWxh
eS8KKwlkZWxheTogZnVuY3Rpb24oIHRpbWUsIHR5cGUgKSB7CisJCXRpbWUgPSBqUXVlcnkuZngg
PyBqUXVlcnkuZnguc3BlZWRzW3RpbWVdIHx8IHRpbWUgOiB0aW1lOworCQl0eXBlID0gdHlwZSB8
fCAiZngiOworCisJCXJldHVybiB0aGlzLnF1ZXVlKCB0eXBlLCBmdW5jdGlvbigpIHsKKwkJCXZh
ciBlbGVtID0gdGhpczsKKwkJCXNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisJCQkJalF1ZXJ5LmRl
cXVldWUoIGVsZW0sIHR5cGUgKTsKKwkJCX0sIHRpbWUgKTsKKwkJfSk7CisJfSwKKworCWNsZWFy
UXVldWU6IGZ1bmN0aW9uKCB0eXBlICkgeworCQlyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSB8fCAi
ZngiLCBbXSApOworCX0KK30pOworCit9KSggalF1ZXJ5ICk7CgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3NyYy9xdWV1ZS5qcwpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFk
ZGVkOiBhbGxvdy10YWJzCiAgICsgeWVzCgpJbmRleDogTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291
cmNlcy9zcmMvc2VsZWN0b3IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanF1ZXJ5L3Jl
c291cmNlcy9zcmMvc2VsZWN0b3IuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcXVl
cnkvcmVzb3VyY2VzL3NyYy9zZWxlY3Rvci5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzky
IEBACisvKiEKKyAqIFNpenpsZSBDU1MgU2VsZWN0b3IgRW5naW5lCisgKiAgQ29weXJpZ2h0IDIw
MTEsIFRoZSBEb2pvIEZvdW5kYXRpb24KKyAqICBSZWxlYXNlZCB1bmRlciB0aGUgTUlULCBCU0Qs
IGFuZCBHUEwgTGljZW5zZXMuCisgKiAgTW9yZSBpbmZvcm1hdGlvbjogaHR0cDovL3NpenpsZWpz
LmNvbS8KKyAqLworKGZ1bmN0aW9uKCl7CisKK3ZhciBjaHVua2VyID0gLygoPzpcKCg/OlwoW14o
KV0rXCl8W14oKV0rKStcKXxcWyg/OlxbW15cW1xdXSpcXXxbJyJdW14nIl0qWyciXXxbXlxbXF0n
Il0rKStcXXxcXC58W14gPit+LChcW1xcXSspK3xbPit+XSkoXHMqLFxzKik/KCg/Oi58XHJ8XG4p
KikvZywKKwlkb25lID0gMCwKKwl0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcs
CisJaGFzRHVwbGljYXRlID0gZmFsc2UsCisJYmFzZUhhc0R1cGxpY2F0ZSA9IHRydWUsCisJckJh
Y2tzbGFzaCA9IC9cXC9nLAorCXJOb25Xb3JkID0gL1xXLzsKKworLy8gSGVyZSB3ZSBjaGVjayBp
ZiB0aGUgSmF2YVNjcmlwdCBlbmdpbmUgaXMgdXNpbmcgc29tZSBzb3J0IG9mCisvLyBvcHRpbWl6
YXRpb24gd2hlcmUgaXQgZG9lcyBub3QgYWx3YXlzIGNhbGwgb3VyIGNvbXBhcmlzaW9uCisvLyBm
dW5jdGlvbi4gSWYgdGhhdCBpcyB0aGUgY2FzZSwgZGlzY2FyZCB0aGUgaGFzRHVwbGljYXRlIHZh
bHVlLgorLy8gICBUaHVzIGZhciB0aGF0IGluY2x1ZGVzIEdvb2dsZSBDaHJvbWUuCitbMCwgMF0u
c29ydChmdW5jdGlvbigpIHsKKwliYXNlSGFzRHVwbGljYXRlID0gZmFsc2U7CisJcmV0dXJuIDA7
Cit9KTsKKwordmFyIFNpenpsZSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0
cywgc2VlZCApIHsKKwlyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTsKKwljb250ZXh0ID0gY29udGV4
dCB8fCBkb2N1bWVudDsKKworCXZhciBvcmlnQ29udGV4dCA9IGNvbnRleHQ7CisKKwlpZiAoIGNv
bnRleHQubm9kZVR5cGUgIT09IDEgJiYgY29udGV4dC5ub2RlVHlwZSAhPT0gOSApIHsKKwkJcmV0
dXJuIFtdOworCX0KKwkKKwlpZiAoICFzZWxlY3RvciB8fCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJz
dHJpbmciICkgeworCQlyZXR1cm4gcmVzdWx0czsKKwl9CisKKwl2YXIgbSwgc2V0LCBjaGVja1Nl
dCwgZXh0cmEsIHJldCwgY3VyLCBwb3AsIGksCisJCXBydW5lID0gdHJ1ZSwKKwkJY29udGV4dFhN
TCA9IFNpenpsZS5pc1hNTCggY29udGV4dCApLAorCQlwYXJ0cyA9IFtdLAorCQlzb0ZhciA9IHNl
bGVjdG9yOworCQorCS8vIFJlc2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgY2h1bmtlciByZWdleHAg
KHN0YXJ0IGZyb20gaGVhZCkKKwlkbyB7CisJCWNodW5rZXIuZXhlYyggIiIgKTsKKwkJbSA9IGNo
dW5rZXIuZXhlYyggc29GYXIgKTsKKworCQlpZiAoIG0gKSB7CisJCQlzb0ZhciA9IG1bM107CisJ
CQorCQkJcGFydHMucHVzaCggbVsxXSApOworCQkKKwkJCWlmICggbVsyXSApIHsKKwkJCQlleHRy
YSA9IG1bM107CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9IHdoaWxlICggbSApOworCisJaWYg
KCBwYXJ0cy5sZW5ndGggPiAxICYmIG9yaWdQT1MuZXhlYyggc2VsZWN0b3IgKSApIHsKKworCQlp
ZiAoIHBhcnRzLmxlbmd0aCA9PT0gMiAmJiBFeHByLnJlbGF0aXZlWyBwYXJ0c1swXSBdICkgewor
CQkJc2V0ID0gcG9zUHJvY2VzcyggcGFydHNbMF0gKyBwYXJ0c1sxXSwgY29udGV4dCApOworCisJ
CX0gZWxzZSB7CisJCQlzZXQgPSBFeHByLnJlbGF0aXZlWyBwYXJ0c1swXSBdID8KKwkJCQlbIGNv
bnRleHQgXSA6CisJCQkJU2l6emxlKCBwYXJ0cy5zaGlmdCgpLCBjb250ZXh0ICk7CisKKwkJCXdo
aWxlICggcGFydHMubGVuZ3RoICkgeworCQkJCXNlbGVjdG9yID0gcGFydHMuc2hpZnQoKTsKKwor
CQkJCWlmICggRXhwci5yZWxhdGl2ZVsgc2VsZWN0b3IgXSApIHsKKwkJCQkJc2VsZWN0b3IgKz0g
cGFydHMuc2hpZnQoKTsKKwkJCQl9CisJCQkJCisJCQkJc2V0ID0gcG9zUHJvY2Vzcyggc2VsZWN0
b3IsIHNldCApOworCQkJfQorCQl9CisKKwl9IGVsc2UgeworCQkvLyBUYWtlIGEgc2hvcnRjdXQg
YW5kIHNldCB0aGUgY29udGV4dCBpZiB0aGUgcm9vdCBzZWxlY3RvciBpcyBhbiBJRAorCQkvLyAo
YnV0IG5vdCBpZiBpdCdsbCBiZSBmYXN0ZXIgaWYgdGhlIGlubmVyIHNlbGVjdG9yIGlzIGFuIElE
KQorCQlpZiAoICFzZWVkICYmIHBhcnRzLmxlbmd0aCA+IDEgJiYgY29udGV4dC5ub2RlVHlwZSA9
PT0gOSAmJiAhY29udGV4dFhNTCAmJgorCQkJCUV4cHIubWF0Y2guSUQudGVzdChwYXJ0c1swXSkg
JiYgIUV4cHIubWF0Y2guSUQudGVzdChwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSkgKSB7CisKKwkJ
CXJldCA9IFNpenpsZS5maW5kKCBwYXJ0cy5zaGlmdCgpLCBjb250ZXh0LCBjb250ZXh0WE1MICk7
CisJCQljb250ZXh0ID0gcmV0LmV4cHIgPworCQkJCVNpenpsZS5maWx0ZXIoIHJldC5leHByLCBy
ZXQuc2V0IClbMF0gOgorCQkJCXJldC5zZXRbMF07CisJCX0KKworCQlpZiAoIGNvbnRleHQgKSB7
CisJCQlyZXQgPSBzZWVkID8KKwkJCQl7IGV4cHI6IHBhcnRzLnBvcCgpLCBzZXQ6IG1ha2VBcnJh
eShzZWVkKSB9IDoKKwkJCQlTaXp6bGUuZmluZCggcGFydHMucG9wKCksIHBhcnRzLmxlbmd0aCA9
PT0gMSAmJiAocGFydHNbMF0gPT09ICJ+IiB8fCBwYXJ0c1swXSA9PT0gIisiKSAmJiBjb250ZXh0
LnBhcmVudE5vZGUgPyBjb250ZXh0LnBhcmVudE5vZGUgOiBjb250ZXh0LCBjb250ZXh0WE1MICk7
CisKKwkJCXNldCA9IHJldC5leHByID8KKwkJCQlTaXp6bGUuZmlsdGVyKCByZXQuZXhwciwgcmV0
LnNldCApIDoKKwkJCQlyZXQuc2V0OworCisJCQlpZiAoIHBhcnRzLmxlbmd0aCA+IDAgKSB7CisJ
CQkJY2hlY2tTZXQgPSBtYWtlQXJyYXkoIHNldCApOworCisJCQl9IGVsc2UgeworCQkJCXBydW5l
ID0gZmFsc2U7CisJCQl9CisKKwkJCXdoaWxlICggcGFydHMubGVuZ3RoICkgeworCQkJCWN1ciA9
IHBhcnRzLnBvcCgpOworCQkJCXBvcCA9IGN1cjsKKworCQkJCWlmICggIUV4cHIucmVsYXRpdmVb
IGN1ciBdICkgeworCQkJCQljdXIgPSAiIjsKKwkJCQl9IGVsc2UgeworCQkJCQlwb3AgPSBwYXJ0
cy5wb3AoKTsKKwkJCQl9CisKKwkJCQlpZiAoIHBvcCA9PSBudWxsICkgeworCQkJCQlwb3AgPSBj
b250ZXh0OworCQkJCX0KKworCQkJCUV4cHIucmVsYXRpdmVbIGN1ciBdKCBjaGVja1NldCwgcG9w
LCBjb250ZXh0WE1MICk7CisJCQl9CisKKwkJfSBlbHNlIHsKKwkJCWNoZWNrU2V0ID0gcGFydHMg
PSBbXTsKKwkJfQorCX0KKworCWlmICggIWNoZWNrU2V0ICkgeworCQljaGVja1NldCA9IHNldDsK
Kwl9CisKKwlpZiAoICFjaGVja1NldCApIHsKKwkJU2l6emxlLmVycm9yKCBjdXIgfHwgc2VsZWN0
b3IgKTsKKwl9CisKKwlpZiAoIHRvU3RyaW5nLmNhbGwoY2hlY2tTZXQpID09PSAiW29iamVjdCBB
cnJheV0iICkgeworCQlpZiAoICFwcnVuZSApIHsKKwkJCXJlc3VsdHMucHVzaC5hcHBseSggcmVz
dWx0cywgY2hlY2tTZXQgKTsKKworCQl9IGVsc2UgaWYgKCBjb250ZXh0ICYmIGNvbnRleHQubm9k
ZVR5cGUgPT09IDEgKSB7CisJCQlmb3IgKCBpID0gMDsgY2hlY2tTZXRbaV0gIT0gbnVsbDsgaSsr
ICkgeworCQkJCWlmICggY2hlY2tTZXRbaV0gJiYgKGNoZWNrU2V0W2ldID09PSB0cnVlIHx8IGNo
ZWNrU2V0W2ldLm5vZGVUeXBlID09PSAxICYmIFNpenpsZS5jb250YWlucyhjb250ZXh0LCBjaGVj
a1NldFtpXSkpICkgeworCQkJCQlyZXN1bHRzLnB1c2goIHNldFtpXSApOworCQkJCX0KKwkJCX0K
KworCQl9IGVsc2UgeworCQkJZm9yICggaSA9IDA7IGNoZWNrU2V0W2ldICE9IG51bGw7IGkrKyAp
IHsKKwkJCQlpZiAoIGNoZWNrU2V0W2ldICYmIGNoZWNrU2V0W2ldLm5vZGVUeXBlID09PSAxICkg
eworCQkJCQlyZXN1bHRzLnB1c2goIHNldFtpXSApOworCQkJCX0KKwkJCX0KKwkJfQorCisJfSBl
bHNlIHsKKwkJbWFrZUFycmF5KCBjaGVja1NldCwgcmVzdWx0cyApOworCX0KKworCWlmICggZXh0
cmEgKSB7CisJCVNpenpsZSggZXh0cmEsIG9yaWdDb250ZXh0LCByZXN1bHRzLCBzZWVkICk7CisJ
CVNpenpsZS51bmlxdWVTb3J0KCByZXN1bHRzICk7CisJfQorCisJcmV0dXJuIHJlc3VsdHM7Cit9
OworCitTaXp6bGUudW5pcXVlU29ydCA9IGZ1bmN0aW9uKCByZXN1bHRzICkgeworCWlmICggc29y
dE9yZGVyICkgeworCQloYXNEdXBsaWNhdGUgPSBiYXNlSGFzRHVwbGljYXRlOworCQlyZXN1bHRz
LnNvcnQoIHNvcnRPcmRlciApOworCisJCWlmICggaGFzRHVwbGljYXRlICkgeworCQkJZm9yICgg
dmFyIGkgPSAxOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKyApIHsKKwkJCQlpZiAoIHJlc3VsdHNb
aV0gPT09IHJlc3VsdHNbIGkgLSAxIF0gKSB7CisJCQkJCXJlc3VsdHMuc3BsaWNlKCBpLS0sIDEg
KTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gcmVzdWx0czsKK307CisKK1Npenps
ZS5tYXRjaGVzID0gZnVuY3Rpb24oIGV4cHIsIHNldCApIHsKKwlyZXR1cm4gU2l6emxlKCBleHBy
LCBudWxsLCBudWxsLCBzZXQgKTsKK307CisKK1NpenpsZS5tYXRjaGVzU2VsZWN0b3IgPSBmdW5j
dGlvbiggbm9kZSwgZXhwciApIHsKKwlyZXR1cm4gU2l6emxlKCBleHByLCBudWxsLCBudWxsLCBb
bm9kZV0gKS5sZW5ndGggPiAwOworfTsKKworU2l6emxlLmZpbmQgPSBmdW5jdGlvbiggZXhwciwg
Y29udGV4dCwgaXNYTUwgKSB7CisJdmFyIHNldDsKKworCWlmICggIWV4cHIgKSB7CisJCXJldHVy
biBbXTsKKwl9CisKKwlmb3IgKCB2YXIgaSA9IDAsIGwgPSBFeHByLm9yZGVyLmxlbmd0aDsgaSA8
IGw7IGkrKyApIHsKKwkJdmFyIG1hdGNoLAorCQkJdHlwZSA9IEV4cHIub3JkZXJbaV07CisJCQor
CQlpZiAoIChtYXRjaCA9IEV4cHIubGVmdE1hdGNoWyB0eXBlIF0uZXhlYyggZXhwciApKSApIHsK
KwkJCXZhciBsZWZ0ID0gbWF0Y2hbMV07CisJCQltYXRjaC5zcGxpY2UoIDEsIDEgKTsKKworCQkJ
aWYgKCBsZWZ0LnN1YnN0ciggbGVmdC5sZW5ndGggLSAxICkgIT09ICJcXCIgKSB7CisJCQkJbWF0
Y2hbMV0gPSAobWF0Y2hbMV0gfHwgIiIpLnJlcGxhY2UoIHJCYWNrc2xhc2gsICIiICk7CisJCQkJ
c2V0ID0gRXhwci5maW5kWyB0eXBlIF0oIG1hdGNoLCBjb250ZXh0LCBpc1hNTCApOworCisJCQkJ
aWYgKCBzZXQgIT0gbnVsbCApIHsKKwkJCQkJZXhwciA9IGV4cHIucmVwbGFjZSggRXhwci5tYXRj
aFsgdHlwZSBdLCAiIiApOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlp
ZiAoICFzZXQgKSB7CisJCXNldCA9IHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1l
ICE9PSAidW5kZWZpbmVkIiA/CisJCQljb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCAiKiIg
KSA6CisJCQlbXTsKKwl9CisKKwlyZXR1cm4geyBzZXQ6IHNldCwgZXhwcjogZXhwciB9OworfTsK
KworU2l6emxlLmZpbHRlciA9IGZ1bmN0aW9uKCBleHByLCBzZXQsIGlucGxhY2UsIG5vdCApIHsK
Kwl2YXIgbWF0Y2gsIGFueUZvdW5kLAorCQlvbGQgPSBleHByLAorCQlyZXN1bHQgPSBbXSwKKwkJ
Y3VyTG9vcCA9IHNldCwKKwkJaXNYTUxGaWx0ZXIgPSBzZXQgJiYgc2V0WzBdICYmIFNpenpsZS5p
c1hNTCggc2V0WzBdICk7CisKKwl3aGlsZSAoIGV4cHIgJiYgc2V0Lmxlbmd0aCApIHsKKwkJZm9y
ICggdmFyIHR5cGUgaW4gRXhwci5maWx0ZXIgKSB7CisJCQlpZiAoIChtYXRjaCA9IEV4cHIubGVm
dE1hdGNoWyB0eXBlIF0uZXhlYyggZXhwciApKSAhPSBudWxsICYmIG1hdGNoWzJdICkgeworCQkJ
CXZhciBmb3VuZCwgaXRlbSwKKwkJCQkJZmlsdGVyID0gRXhwci5maWx0ZXJbIHR5cGUgXSwKKwkJ
CQkJbGVmdCA9IG1hdGNoWzFdOworCisJCQkJYW55Rm91bmQgPSBmYWxzZTsKKworCQkJCW1hdGNo
LnNwbGljZSgxLDEpOworCisJCQkJaWYgKCBsZWZ0LnN1YnN0ciggbGVmdC5sZW5ndGggLSAxICkg
PT09ICJcXCIgKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCWlmICggY3VyTG9vcCA9
PT0gcmVzdWx0ICkgeworCQkJCQlyZXN1bHQgPSBbXTsKKwkJCQl9CisKKwkJCQlpZiAoIEV4cHIu
cHJlRmlsdGVyWyB0eXBlIF0gKSB7CisJCQkJCW1hdGNoID0gRXhwci5wcmVGaWx0ZXJbIHR5cGUg
XSggbWF0Y2gsIGN1ckxvb3AsIGlucGxhY2UsIHJlc3VsdCwgbm90LCBpc1hNTEZpbHRlciApOwor
CisJCQkJCWlmICggIW1hdGNoICkgeworCQkJCQkJYW55Rm91bmQgPSBmb3VuZCA9IHRydWU7CisK
KwkJCQkJfSBlbHNlIGlmICggbWF0Y2ggPT09IHRydWUgKSB7CisJCQkJCQljb250aW51ZTsKKwkJ
CQkJfQorCQkJCX0KKworCQkJCWlmICggbWF0Y2ggKSB7CisJCQkJCWZvciAoIHZhciBpID0gMDsg
KGl0ZW0gPSBjdXJMb29wW2ldKSAhPSBudWxsOyBpKysgKSB7CisJCQkJCQlpZiAoIGl0ZW0gKSB7
CisJCQkJCQkJZm91bmQgPSBmaWx0ZXIoIGl0ZW0sIG1hdGNoLCBpLCBjdXJMb29wICk7CisJCQkJ
CQkJdmFyIHBhc3MgPSBub3QgXiAhIWZvdW5kOworCisJCQkJCQkJaWYgKCBpbnBsYWNlICYmIGZv
dW5kICE9IG51bGwgKSB7CisJCQkJCQkJCWlmICggcGFzcyApIHsKKwkJCQkJCQkJCWFueUZvdW5k
ID0gdHJ1ZTsKKworCQkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkJY3VyTG9vcFtpXSA9IGZhbHNl
OworCQkJCQkJCQl9CisKKwkJCQkJCQl9IGVsc2UgaWYgKCBwYXNzICkgeworCQkJCQkJCQlyZXN1
bHQucHVzaCggaXRlbSApOworCQkJCQkJCQlhbnlGb3VuZCA9IHRydWU7CisJCQkJCQkJfQorCQkJ
CQkJfQorCQkJCQl9CisJCQkJfQorCisJCQkJaWYgKCBmb3VuZCAhPT0gdW5kZWZpbmVkICkgewor
CQkJCQlpZiAoICFpbnBsYWNlICkgeworCQkJCQkJY3VyTG9vcCA9IHJlc3VsdDsKKwkJCQkJfQor
CisJCQkJCWV4cHIgPSBleHByLnJlcGxhY2UoIEV4cHIubWF0Y2hbIHR5cGUgXSwgIiIgKTsKKwor
CQkJCQlpZiAoICFhbnlGb3VuZCApIHsKKwkJCQkJCXJldHVybiBbXTsKKwkJCQkJfQorCisJCQkJ
CWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8vIEltcHJvcGVyIGV4cHJlc3Npb24KKwkJ
aWYgKCBleHByID09PSBvbGQgKSB7CisJCQlpZiAoIGFueUZvdW5kID09IG51bGwgKSB7CisJCQkJ
U2l6emxlLmVycm9yKCBleHByICk7CisKKwkJCX0gZWxzZSB7CisJCQkJYnJlYWs7CisJCQl9CisJ
CX0KKworCQlvbGQgPSBleHByOworCX0KKworCXJldHVybiBjdXJMb29wOworfTsKKworU2l6emxl
LmVycm9yID0gZnVuY3Rpb24oIG1zZyApIHsKKwl0aHJvdyAiU3ludGF4IGVycm9yLCB1bnJlY29n
bml6ZWQgZXhwcmVzc2lvbjogIiArIG1zZzsKK307CisKK3ZhciBFeHByID0gU2l6emxlLnNlbGVj
dG9ycyA9IHsKKwlvcmRlcjogWyAiSUQiLCAiTkFNRSIsICJUQUciIF0sCisKKwltYXRjaDogewor
CQlJRDogLyMoKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKykvLAorCQlDTEFTUzogL1wuKCg/
Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspLywKKwkJTkFNRTogL1xbbmFtZT1bJyJdKigoPzpb
XHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKVsnIl0qXF0vLAorCQlBVFRSOiAvXFtccyooKD86W1x3
XHUwMGMwLVx1RkZGRlwtXXxcXC4pKylccyooPzooXFM/PSlccyooPzooWyciXSkoLio/KVwzfCgj
Pyg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSopfCl8KVxzKlxdLywKKwkJVEFHOiAvXigoPzpb
XHdcdTAwYzAtXHVGRkZGXCpcLV18XFwuKSspLywKKwkJQ0hJTEQ6IC86KG9ubHl8bnRofGxhc3R8
Zmlyc3QpLWNoaWxkKD86XChccyooZXZlbnxvZGR8KD86WytcLV0/XGQrfCg/OlsrXC1dP1xkKik/
blxzKig/OlsrXC1dXHMqXGQrKT8pKVxzKlwpKT8vLAorCQlQT1M6IC86KG50aHxlcXxndHxsdHxm
aXJzdHxsYXN0fGV2ZW58b2RkKSg/OlwoKFxkKilcKSk/KD89W15cLV18JCkvLAorCQlQU0VVRE86
IC86KCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspKD86XCgoWyciXT8pKCg/OlwoW15cKV0r
XCl8W15cKFwpXSopKylcMlwpKT8vCisJfSwKKworCWxlZnRNYXRjaDoge30sCisKKwlhdHRyTWFw
OiB7CisJCSJjbGFzcyI6ICJjbGFzc05hbWUiLAorCQkiZm9yIjogImh0bWxGb3IiCisJfSwKKwor
CWF0dHJIYW5kbGU6IHsKKwkJaHJlZjogZnVuY3Rpb24oIGVsZW0gKSB7CisJCQlyZXR1cm4gZWxl
bS5nZXRBdHRyaWJ1dGUoICJocmVmIiApOworCQl9LAorCQl0eXBlOiBmdW5jdGlvbiggZWxlbSAp
IHsKKwkJCXJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggInR5cGUiICk7CisJCX0KKwl9LAorCisJ
cmVsYXRpdmU6IHsKKwkJIisiOiBmdW5jdGlvbihjaGVja1NldCwgcGFydCl7CisJCQl2YXIgaXNQ
YXJ0U3RyID0gdHlwZW9mIHBhcnQgPT09ICJzdHJpbmciLAorCQkJCWlzVGFnID0gaXNQYXJ0U3Ry
ICYmICFyTm9uV29yZC50ZXN0KCBwYXJ0ICksCisJCQkJaXNQYXJ0U3RyTm90VGFnID0gaXNQYXJ0
U3RyICYmICFpc1RhZzsKKworCQkJaWYgKCBpc1RhZyApIHsKKwkJCQlwYXJ0ID0gcGFydC50b0xv
d2VyQ2FzZSgpOworCQkJfQorCisJCQlmb3IgKCB2YXIgaSA9IDAsIGwgPSBjaGVja1NldC5sZW5n
dGgsIGVsZW07IGkgPCBsOyBpKysgKSB7CisJCQkJaWYgKCAoZWxlbSA9IGNoZWNrU2V0W2ldKSAp
IHsKKwkJCQkJd2hpbGUgKCAoZWxlbSA9IGVsZW0ucHJldmlvdXNTaWJsaW5nKSAmJiBlbGVtLm5v
ZGVUeXBlICE9PSAxICkge30KKworCQkJCQljaGVja1NldFtpXSA9IGlzUGFydFN0ck5vdFRhZyB8
fCBlbGVtICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gcGFydCA/CisJCQkJCQll
bGVtIHx8IGZhbHNlIDoKKwkJCQkJCWVsZW0gPT09IHBhcnQ7CisJCQkJfQorCQkJfQorCisJCQlp
ZiAoIGlzUGFydFN0ck5vdFRhZyApIHsKKwkJCQlTaXp6bGUuZmlsdGVyKCBwYXJ0LCBjaGVja1Nl
dCwgdHJ1ZSApOworCQkJfQorCQl9LAorCisJCSI+IjogZnVuY3Rpb24oIGNoZWNrU2V0LCBwYXJ0
ICkgeworCQkJdmFyIGVsZW0sCisJCQkJaXNQYXJ0U3RyID0gdHlwZW9mIHBhcnQgPT09ICJzdHJp
bmciLAorCQkJCWkgPSAwLAorCQkJCWwgPSBjaGVja1NldC5sZW5ndGg7CisKKwkJCWlmICggaXNQ
YXJ0U3RyICYmICFyTm9uV29yZC50ZXN0KCBwYXJ0ICkgKSB7CisJCQkJcGFydCA9IHBhcnQudG9M
b3dlckNhc2UoKTsKKworCQkJCWZvciAoIDsgaSA8IGw7IGkrKyApIHsKKwkJCQkJZWxlbSA9IGNo
ZWNrU2V0W2ldOworCisJCQkJCWlmICggZWxlbSApIHsKKwkJCQkJCXZhciBwYXJlbnQgPSBlbGVt
LnBhcmVudE5vZGU7CisJCQkJCQljaGVja1NldFtpXSA9IHBhcmVudC5ub2RlTmFtZS50b0xvd2Vy
Q2FzZSgpID09PSBwYXJ0ID8gcGFyZW50IDogZmFsc2U7CisJCQkJCX0KKwkJCQl9CisKKwkJCX0g
ZWxzZSB7CisJCQkJZm9yICggOyBpIDwgbDsgaSsrICkgeworCQkJCQllbGVtID0gY2hlY2tTZXRb
aV07CisKKwkJCQkJaWYgKCBlbGVtICkgeworCQkJCQkJY2hlY2tTZXRbaV0gPSBpc1BhcnRTdHIg
PworCQkJCQkJCWVsZW0ucGFyZW50Tm9kZSA6CisJCQkJCQkJZWxlbS5wYXJlbnROb2RlID09PSBw
YXJ0OworCQkJCQl9CisJCQkJfQorCisJCQkJaWYgKCBpc1BhcnRTdHIgKSB7CisJCQkJCVNpenps
ZS5maWx0ZXIoIHBhcnQsIGNoZWNrU2V0LCB0cnVlICk7CisJCQkJfQorCQkJfQorCQl9LAorCisJ
CSIiOiBmdW5jdGlvbihjaGVja1NldCwgcGFydCwgaXNYTUwpeworCQkJdmFyIG5vZGVDaGVjaywK
KwkJCQlkb25lTmFtZSA9IGRvbmUrKywKKwkJCQljaGVja0ZuID0gZGlyQ2hlY2s7CisKKwkJCWlm
ICggdHlwZW9mIHBhcnQgPT09ICJzdHJpbmciICYmICFyTm9uV29yZC50ZXN0KCBwYXJ0ICkgKSB7
CisJCQkJcGFydCA9IHBhcnQudG9Mb3dlckNhc2UoKTsKKwkJCQlub2RlQ2hlY2sgPSBwYXJ0Owor
CQkJCWNoZWNrRm4gPSBkaXJOb2RlQ2hlY2s7CisJCQl9CisKKwkJCWNoZWNrRm4oICJwYXJlbnRO
b2RlIiwgcGFydCwgZG9uZU5hbWUsIGNoZWNrU2V0LCBub2RlQ2hlY2ssIGlzWE1MICk7CisJCX0s
CisKKwkJIn4iOiBmdW5jdGlvbiggY2hlY2tTZXQsIHBhcnQsIGlzWE1MICkgeworCQkJdmFyIG5v
ZGVDaGVjaywKKwkJCQlkb25lTmFtZSA9IGRvbmUrKywKKwkJCQljaGVja0ZuID0gZGlyQ2hlY2s7
CisKKwkJCWlmICggdHlwZW9mIHBhcnQgPT09ICJzdHJpbmciICYmICFyTm9uV29yZC50ZXN0KCBw
YXJ0ICkgKSB7CisJCQkJcGFydCA9IHBhcnQudG9Mb3dlckNhc2UoKTsKKwkJCQlub2RlQ2hlY2sg
PSBwYXJ0OworCQkJCWNoZWNrRm4gPSBkaXJOb2RlQ2hlY2s7CisJCQl9CisKKwkJCWNoZWNrRm4o
ICJwcmV2aW91c1NpYmxpbmciLCBwYXJ0LCBkb25lTmFtZSwgY2hlY2tTZXQsIG5vZGVDaGVjaywg
aXNYTUwgKTsKKwkJfQorCX0sCisKKwlmaW5kOiB7CisJCUlEOiBmdW5jdGlvbiggbWF0Y2gsIGNv
bnRleHQsIGlzWE1MICkgeworCQkJaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAh
PT0gInVuZGVmaW5lZCIgJiYgIWlzWE1MICkgeworCQkJCXZhciBtID0gY29udGV4dC5nZXRFbGVt
ZW50QnlJZChtYXRjaFsxXSk7CisJCQkJLy8gQ2hlY2sgcGFyZW50Tm9kZSB0byBjYXRjaCB3aGVu
IEJsYWNrYmVycnkgNC42IHJldHVybnMKKwkJCQkvLyBub2RlcyB0aGF0IGFyZSBubyBsb25nZXIg
aW4gdGhlIGRvY3VtZW50ICM2OTYzCisJCQkJcmV0dXJuIG0gJiYgbS5wYXJlbnROb2RlID8gW21d
IDogW107CisJCQl9CisJCX0sCisKKwkJTkFNRTogZnVuY3Rpb24oIG1hdGNoLCBjb250ZXh0ICkg
eworCQkJaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5TmFtZSAhPT0gInVuZGVmaW5l
ZCIgKSB7CisJCQkJdmFyIHJldCA9IFtdLAorCQkJCQlyZXN1bHRzID0gY29udGV4dC5nZXRFbGVt
ZW50c0J5TmFtZSggbWF0Y2hbMV0gKTsKKworCQkJCWZvciAoIHZhciBpID0gMCwgbCA9IHJlc3Vs
dHMubGVuZ3RoOyBpIDwgbDsgaSsrICkgeworCQkJCQlpZiAoIHJlc3VsdHNbaV0uZ2V0QXR0cmli
dXRlKCJuYW1lIikgPT09IG1hdGNoWzFdICkgeworCQkJCQkJcmV0LnB1c2goIHJlc3VsdHNbaV0g
KTsKKwkJCQkJfQorCQkJCX0KKworCQkJCXJldHVybiByZXQubGVuZ3RoID09PSAwID8gbnVsbCA6
IHJldDsKKwkJCX0KKwkJfSwKKworCQlUQUc6IGZ1bmN0aW9uKCBtYXRjaCwgY29udGV4dCApIHsK
KwkJCWlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09ICJ1bmRlZmlu
ZWQiICkgeworCQkJCXJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBtYXRjaFsx
XSApOworCQkJfQorCQl9CisJfSwKKwlwcmVGaWx0ZXI6IHsKKwkJQ0xBU1M6IGZ1bmN0aW9uKCBt
YXRjaCwgY3VyTG9vcCwgaW5wbGFjZSwgcmVzdWx0LCBub3QsIGlzWE1MICkgeworCQkJbWF0Y2gg
PSAiICIgKyBtYXRjaFsxXS5yZXBsYWNlKCByQmFja3NsYXNoLCAiIiApICsgIiAiOworCisJCQlp
ZiAoIGlzWE1MICkgeworCQkJCXJldHVybiBtYXRjaDsKKwkJCX0KKworCQkJZm9yICggdmFyIGkg
PSAwLCBlbGVtOyAoZWxlbSA9IGN1ckxvb3BbaV0pICE9IG51bGw7IGkrKyApIHsKKwkJCQlpZiAo
IGVsZW0gKSB7CisJCQkJCWlmICggbm90IF4gKGVsZW0uY2xhc3NOYW1lICYmICgiICIgKyBlbGVt
LmNsYXNzTmFtZSArICIgIikucmVwbGFjZSgvW1x0XG5ccl0vZywgIiAiKS5pbmRleE9mKG1hdGNo
KSA+PSAwKSApIHsKKwkJCQkJCWlmICggIWlucGxhY2UgKSB7CisJCQkJCQkJcmVzdWx0LnB1c2go
IGVsZW0gKTsKKwkJCQkJCX0KKworCQkJCQl9IGVsc2UgaWYgKCBpbnBsYWNlICkgeworCQkJCQkJ
Y3VyTG9vcFtpXSA9IGZhbHNlOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlyZXR1cm4gZmFs
c2U7CisJCX0sCisKKwkJSUQ6IGZ1bmN0aW9uKCBtYXRjaCApIHsKKwkJCXJldHVybiBtYXRjaFsx
XS5yZXBsYWNlKCByQmFja3NsYXNoLCAiIiApOworCQl9LAorCisJCVRBRzogZnVuY3Rpb24oIG1h
dGNoLCBjdXJMb29wICkgeworCQkJcmV0dXJuIG1hdGNoWzFdLnJlcGxhY2UoIHJCYWNrc2xhc2gs
ICIiICkudG9Mb3dlckNhc2UoKTsKKwkJfSwKKworCQlDSElMRDogZnVuY3Rpb24oIG1hdGNoICkg
eworCQkJaWYgKCBtYXRjaFsxXSA9PT0gIm50aCIgKSB7CisJCQkJaWYgKCAhbWF0Y2hbMl0gKSB7
CisJCQkJCVNpenpsZS5lcnJvciggbWF0Y2hbMF0gKTsKKwkJCQl9CisKKwkJCQltYXRjaFsyXSA9
IG1hdGNoWzJdLnJlcGxhY2UoL15cK3xccyovZywgJycpOworCisJCQkJLy8gcGFyc2UgZXF1YXRp
b25zIGxpa2UgJ2V2ZW4nLCAnb2RkJywgJzUnLCAnMm4nLCAnM24rMicsICc0bi0xJywgJy1uKzYn
CisJCQkJdmFyIHRlc3QgPSAvKC0/KShcZCopKD86bihbK1wtXT9cZCopKT8vLmV4ZWMoCisJCQkJ
CW1hdGNoWzJdID09PSAiZXZlbiIgJiYgIjJuIiB8fCBtYXRjaFsyXSA9PT0gIm9kZCIgJiYgIjJu
KzEiIHx8CisJCQkJCSEvXEQvLnRlc3QoIG1hdGNoWzJdICkgJiYgIjBuKyIgKyBtYXRjaFsyXSB8
fCBtYXRjaFsyXSk7CisKKwkJCQkvLyBjYWxjdWxhdGUgdGhlIG51bWJlcnMgKGZpcnN0KW4rKGxh
c3QpIGluY2x1ZGluZyBpZiB0aGV5IGFyZSBuZWdhdGl2ZQorCQkJCW1hdGNoWzJdID0gKHRlc3Rb
MV0gKyAodGVzdFsyXSB8fCAxKSkgLSAwOworCQkJCW1hdGNoWzNdID0gdGVzdFszXSAtIDA7CisJ
CQl9CisJCQllbHNlIGlmICggbWF0Y2hbMl0gKSB7CisJCQkJU2l6emxlLmVycm9yKCBtYXRjaFsw
XSApOworCQkJfQorCisJCQkvLyBUT0RPOiBNb3ZlIHRvIG5vcm1hbCBjYWNoaW5nIHN5c3RlbQor
CQkJbWF0Y2hbMF0gPSBkb25lKys7CisKKwkJCXJldHVybiBtYXRjaDsKKwkJfSwKKworCQlBVFRS
OiBmdW5jdGlvbiggbWF0Y2gsIGN1ckxvb3AsIGlucGxhY2UsIHJlc3VsdCwgbm90LCBpc1hNTCAp
IHsKKwkJCXZhciBuYW1lID0gbWF0Y2hbMV0gPSBtYXRjaFsxXS5yZXBsYWNlKCByQmFja3NsYXNo
LCAiIiApOworCQkJCisJCQlpZiAoICFpc1hNTCAmJiBFeHByLmF0dHJNYXBbbmFtZV0gKSB7CisJ
CQkJbWF0Y2hbMV0gPSBFeHByLmF0dHJNYXBbbmFtZV07CisJCQl9CisKKwkJCS8vIEhhbmRsZSBp
ZiBhbiB1bi1xdW90ZWQgdmFsdWUgd2FzIHVzZWQKKwkJCW1hdGNoWzRdID0gKCBtYXRjaFs0XSB8
fCBtYXRjaFs1XSB8fCAiIiApLnJlcGxhY2UoIHJCYWNrc2xhc2gsICIiICk7CisKKwkJCWlmICgg
bWF0Y2hbMl0gPT09ICJ+PSIgKSB7CisJCQkJbWF0Y2hbNF0gPSAiICIgKyBtYXRjaFs0XSArICIg
IjsKKwkJCX0KKworCQkJcmV0dXJuIG1hdGNoOworCQl9LAorCisJCVBTRVVETzogZnVuY3Rpb24o
IG1hdGNoLCBjdXJMb29wLCBpbnBsYWNlLCByZXN1bHQsIG5vdCApIHsKKwkJCWlmICggbWF0Y2hb
MV0gPT09ICJub3QiICkgeworCQkJCS8vIElmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGNvbXBsZXgg
ZXhwcmVzc2lvbiwgb3IgYSBzaW1wbGUgb25lCisJCQkJaWYgKCAoIGNodW5rZXIuZXhlYyhtYXRj
aFszXSkgfHwgIiIgKS5sZW5ndGggPiAxIHx8IC9eXHcvLnRlc3QobWF0Y2hbM10pICkgeworCQkJ
CQltYXRjaFszXSA9IFNpenpsZShtYXRjaFszXSwgbnVsbCwgbnVsbCwgY3VyTG9vcCk7CisKKwkJ
CQl9IGVsc2UgeworCQkJCQl2YXIgcmV0ID0gU2l6emxlLmZpbHRlcihtYXRjaFszXSwgY3VyTG9v
cCwgaW5wbGFjZSwgdHJ1ZSBeIG5vdCk7CisKKwkJCQkJaWYgKCAhaW5wbGFjZSApIHsKKwkJCQkJ
CXJlc3VsdC5wdXNoLmFwcGx5KCByZXN1bHQsIHJldCApOworCQkJCQl9CisKKwkJCQkJcmV0dXJu
IGZhbHNlOworCQkJCX0KKworCQkJfSBlbHNlIGlmICggRXhwci5tYXRjaC5QT1MudGVzdCggbWF0
Y2hbMF0gKSB8fCBFeHByLm1hdGNoLkNISUxELnRlc3QoIG1hdGNoWzBdICkgKSB7CisJCQkJcmV0
dXJuIHRydWU7CisJCQl9CisJCQkKKwkJCXJldHVybiBtYXRjaDsKKwkJfSwKKworCQlQT1M6IGZ1
bmN0aW9uKCBtYXRjaCApIHsKKwkJCW1hdGNoLnVuc2hpZnQoIHRydWUgKTsKKworCQkJcmV0dXJu
IG1hdGNoOworCQl9CisJfSwKKwkKKwlmaWx0ZXJzOiB7CisJCWVuYWJsZWQ6IGZ1bmN0aW9uKCBl
bGVtICkgeworCQkJcmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGZhbHNlICYmIGVsZW0udHlwZSAh
PT0gImhpZGRlbiI7CisJCX0sCisKKwkJZGlzYWJsZWQ6IGZ1bmN0aW9uKCBlbGVtICkgeworCQkJ
cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IHRydWU7CisJCX0sCisKKwkJY2hlY2tlZDogZnVuY3Rp
b24oIGVsZW0gKSB7CisJCQlyZXR1cm4gZWxlbS5jaGVja2VkID09PSB0cnVlOworCQl9LAorCQkK
KwkJc2VsZWN0ZWQ6IGZ1bmN0aW9uKCBlbGVtICkgeworCQkJLy8gQWNjZXNzaW5nIHRoaXMgcHJv
cGVydHkgbWFrZXMgc2VsZWN0ZWQtYnktZGVmYXVsdAorCQkJLy8gb3B0aW9ucyBpbiBTYWZhcmkg
d29yayBwcm9wZXJseQorCQkJaWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7CisJCQkJZWxlbS5wYXJl
bnROb2RlLnNlbGVjdGVkSW5kZXg7CisJCQl9CisJCQkKKwkJCXJldHVybiBlbGVtLnNlbGVjdGVk
ID09PSB0cnVlOworCQl9LAorCisJCXBhcmVudDogZnVuY3Rpb24oIGVsZW0gKSB7CisJCQlyZXR1
cm4gISFlbGVtLmZpcnN0Q2hpbGQ7CisJCX0sCisKKwkJZW1wdHk6IGZ1bmN0aW9uKCBlbGVtICkg
eworCQkJcmV0dXJuICFlbGVtLmZpcnN0Q2hpbGQ7CisJCX0sCisKKwkJaGFzOiBmdW5jdGlvbigg
ZWxlbSwgaSwgbWF0Y2ggKSB7CisJCQlyZXR1cm4gISFTaXp6bGUoIG1hdGNoWzNdLCBlbGVtICku
bGVuZ3RoOworCQl9LAorCisJCWhlYWRlcjogZnVuY3Rpb24oIGVsZW0gKSB7CisJCQlyZXR1cm4g
KC9oXGQvaSkudGVzdCggZWxlbS5ub2RlTmFtZSApOworCQl9LAorCisJCXRleHQ6IGZ1bmN0aW9u
KCBlbGVtICkgeworCQkJLy8gSUU2IGFuZCA3IHdpbGwgbWFwIGVsZW0udHlwZSB0byAndGV4dCcg
Zm9yIG5ldyBIVE1MNSB0eXBlcyAoc2VhcmNoLCBldGMpIAorCQkJLy8gdXNlIGdldEF0dHJpYnV0
ZSBpbnN0ZWFkIHRvIHRlc3QgdGhpcyBjYXNlCisJCQlyZXR1cm4gInRleHQiID09PSBlbGVtLmdl
dEF0dHJpYnV0ZSggJ3R5cGUnICk7CisJCX0sCisJCXJhZGlvOiBmdW5jdGlvbiggZWxlbSApIHsK
KwkJCXJldHVybiAicmFkaW8iID09PSBlbGVtLnR5cGU7CisJCX0sCisKKwkJY2hlY2tib3g6IGZ1
bmN0aW9uKCBlbGVtICkgeworCQkJcmV0dXJuICJjaGVja2JveCIgPT09IGVsZW0udHlwZTsKKwkJ
fSwKKworCQlmaWxlOiBmdW5jdGlvbiggZWxlbSApIHsKKwkJCXJldHVybiAiZmlsZSIgPT09IGVs
ZW0udHlwZTsKKwkJfSwKKwkJcGFzc3dvcmQ6IGZ1bmN0aW9uKCBlbGVtICkgeworCQkJcmV0dXJu
ICJwYXNzd29yZCIgPT09IGVsZW0udHlwZTsKKwkJfSwKKworCQlzdWJtaXQ6IGZ1bmN0aW9uKCBl
bGVtICkgeworCQkJcmV0dXJuICJzdWJtaXQiID09PSBlbGVtLnR5cGU7CisJCX0sCisKKwkJaW1h
Z2U6IGZ1bmN0aW9uKCBlbGVtICkgeworCQkJcmV0dXJuICJpbWFnZSIgPT09IGVsZW0udHlwZTsK
KwkJfSwKKworCQlyZXNldDogZnVuY3Rpb24oIGVsZW0gKSB7CisJCQlyZXR1cm4gInJlc2V0IiA9
PT0gZWxlbS50eXBlOworCQl9LAorCisJCWJ1dHRvbjogZnVuY3Rpb24oIGVsZW0gKSB7CisJCQly
ZXR1cm4gImJ1dHRvbiIgPT09IGVsZW0udHlwZSB8fCBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNl
KCkgPT09ICJidXR0b24iOworCQl9LAorCisJCWlucHV0OiBmdW5jdGlvbiggZWxlbSApIHsKKwkJ
CXJldHVybiAoL2lucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24vaSkudGVzdCggZWxlbS5ub2Rl
TmFtZSApOworCQl9CisJfSwKKwlzZXRGaWx0ZXJzOiB7CisJCWZpcnN0OiBmdW5jdGlvbiggZWxl
bSwgaSApIHsKKwkJCXJldHVybiBpID09PSAwOworCQl9LAorCisJCWxhc3Q6IGZ1bmN0aW9uKCBl
bGVtLCBpLCBtYXRjaCwgYXJyYXkgKSB7CisJCQlyZXR1cm4gaSA9PT0gYXJyYXkubGVuZ3RoIC0g
MTsKKwkJfSwKKworCQlldmVuOiBmdW5jdGlvbiggZWxlbSwgaSApIHsKKwkJCXJldHVybiBpICUg
MiA9PT0gMDsKKwkJfSwKKworCQlvZGQ6IGZ1bmN0aW9uKCBlbGVtLCBpICkgeworCQkJcmV0dXJu
IGkgJSAyID09PSAxOworCQl9LAorCisJCWx0OiBmdW5jdGlvbiggZWxlbSwgaSwgbWF0Y2ggKSB7
CisJCQlyZXR1cm4gaSA8IG1hdGNoWzNdIC0gMDsKKwkJfSwKKworCQlndDogZnVuY3Rpb24oIGVs
ZW0sIGksIG1hdGNoICkgeworCQkJcmV0dXJuIGkgPiBtYXRjaFszXSAtIDA7CisJCX0sCisKKwkJ
bnRoOiBmdW5jdGlvbiggZWxlbSwgaSwgbWF0Y2ggKSB7CisJCQlyZXR1cm4gbWF0Y2hbM10gLSAw
ID09PSBpOworCQl9LAorCisJCWVxOiBmdW5jdGlvbiggZWxlbSwgaSwgbWF0Y2ggKSB7CisJCQly
ZXR1cm4gbWF0Y2hbM10gLSAwID09PSBpOworCQl9CisJfSwKKwlmaWx0ZXI6IHsKKwkJUFNFVURP
OiBmdW5jdGlvbiggZWxlbSwgbWF0Y2gsIGksIGFycmF5ICkgeworCQkJdmFyIG5hbWUgPSBtYXRj
aFsxXSwKKwkJCQlmaWx0ZXIgPSBFeHByLmZpbHRlcnNbIG5hbWUgXTsKKworCQkJaWYgKCBmaWx0
ZXIgKSB7CisJCQkJcmV0dXJuIGZpbHRlciggZWxlbSwgaSwgbWF0Y2gsIGFycmF5ICk7CisKKwkJ
CX0gZWxzZSBpZiAoIG5hbWUgPT09ICJjb250YWlucyIgKSB7CisJCQkJcmV0dXJuIChlbGVtLnRl
eHRDb250ZW50IHx8IGVsZW0uaW5uZXJUZXh0IHx8IFNpenpsZS5nZXRUZXh0KFsgZWxlbSBdKSB8
fCAiIikuaW5kZXhPZihtYXRjaFszXSkgPj0gMDsKKworCQkJfSBlbHNlIGlmICggbmFtZSA9PT0g
Im5vdCIgKSB7CisJCQkJdmFyIG5vdCA9IG1hdGNoWzNdOworCisJCQkJZm9yICggdmFyIGogPSAw
LCBsID0gbm90Lmxlbmd0aDsgaiA8IGw7IGorKyApIHsKKwkJCQkJaWYgKCBub3Rbal0gPT09IGVs
ZW0gKSB7CisJCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlyZXR1cm4g
dHJ1ZTsKKworCQkJfSBlbHNlIHsKKwkJCQlTaXp6bGUuZXJyb3IoIG5hbWUgKTsKKwkJCX0KKwkJ
fSwKKworCQlDSElMRDogZnVuY3Rpb24oIGVsZW0sIG1hdGNoICkgeworCQkJdmFyIHR5cGUgPSBt
YXRjaFsxXSwKKwkJCQlub2RlID0gZWxlbTsKKworCQkJc3dpdGNoICggdHlwZSApIHsKKwkJCQlj
YXNlICJvbmx5IjoKKwkJCQljYXNlICJmaXJzdCI6CisJCQkJCXdoaWxlICggKG5vZGUgPSBub2Rl
LnByZXZpb3VzU2libGluZykgKQkgeworCQkJCQkJaWYgKCBub2RlLm5vZGVUeXBlID09PSAxICkg
eyAKKwkJCQkJCQlyZXR1cm4gZmFsc2U7IAorCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJaWYgKCB0
eXBlID09PSAiZmlyc3QiICkgeyAKKwkJCQkJCXJldHVybiB0cnVlOyAKKwkJCQkJfQorCisJCQkJ
CW5vZGUgPSBlbGVtOworCisJCQkJY2FzZSAibGFzdCI6CisJCQkJCXdoaWxlICggKG5vZGUgPSBu
b2RlLm5leHRTaWJsaW5nKSApCSB7CisJCQkJCQlpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7
IAorCQkJCQkJCXJldHVybiBmYWxzZTsgCisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlyZXR1cm4g
dHJ1ZTsKKworCQkJCWNhc2UgIm50aCI6CisJCQkJCXZhciBmaXJzdCA9IG1hdGNoWzJdLAorCQkJ
CQkJbGFzdCA9IG1hdGNoWzNdOworCisJCQkJCWlmICggZmlyc3QgPT09IDEgJiYgbGFzdCA9PT0g
MCApIHsKKwkJCQkJCXJldHVybiB0cnVlOworCQkJCQl9CisJCQkJCQorCQkJCQl2YXIgZG9uZU5h
bWUgPSBtYXRjaFswXSwKKwkJCQkJCXBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTsKKwkKKwkJCQkJ
aWYgKCBwYXJlbnQgJiYgKHBhcmVudC5zaXpjYWNoZSAhPT0gZG9uZU5hbWUgfHwgIWVsZW0ubm9k
ZUluZGV4KSApIHsKKwkJCQkJCXZhciBjb3VudCA9IDA7CisJCQkJCQkKKwkJCQkJCWZvciAoIG5v
ZGUgPSBwYXJlbnQuZmlyc3RDaGlsZDsgbm9kZTsgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmcgKSB7
CisJCQkJCQkJaWYgKCBub2RlLm5vZGVUeXBlID09PSAxICkgeworCQkJCQkJCQlub2RlLm5vZGVJ
bmRleCA9ICsrY291bnQ7CisJCQkJCQkJfQorCQkJCQkJfSAKKworCQkJCQkJcGFyZW50LnNpemNh
Y2hlID0gZG9uZU5hbWU7CisJCQkJCX0KKwkJCQkJCisJCQkJCXZhciBkaWZmID0gZWxlbS5ub2Rl
SW5kZXggLSBsYXN0OworCisJCQkJCWlmICggZmlyc3QgPT09IDAgKSB7CisJCQkJCQlyZXR1cm4g
ZGlmZiA9PT0gMDsKKworCQkJCQl9IGVsc2UgeworCQkJCQkJcmV0dXJuICggZGlmZiAlIGZpcnN0
ID09PSAwICYmIGRpZmYgLyBmaXJzdCA+PSAwICk7CisJCQkJCX0KKwkJCX0KKwkJfSwKKworCQlJ
RDogZnVuY3Rpb24oIGVsZW0sIG1hdGNoICkgeworCQkJcmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09
IDEgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoImlkIikgPT09IG1hdGNoOworCQl9LAorCisJCVRBRzog
ZnVuY3Rpb24oIGVsZW0sIG1hdGNoICkgeworCQkJcmV0dXJuIChtYXRjaCA9PT0gIioiICYmIGVs
ZW0ubm9kZVR5cGUgPT09IDEpIHx8IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbWF0
Y2g7CisJCX0sCisJCQorCQlDTEFTUzogZnVuY3Rpb24oIGVsZW0sIG1hdGNoICkgeworCQkJcmV0
dXJuICgiICIgKyAoZWxlbS5jbGFzc05hbWUgfHwgZWxlbS5nZXRBdHRyaWJ1dGUoImNsYXNzIikp
ICsgIiAiKQorCQkJCS5pbmRleE9mKCBtYXRjaCApID4gLTE7CisJCX0sCisKKwkJQVRUUjogZnVu
Y3Rpb24oIGVsZW0sIG1hdGNoICkgeworCQkJdmFyIG5hbWUgPSBtYXRjaFsxXSwKKwkJCQlyZXN1
bHQgPSBFeHByLmF0dHJIYW5kbGVbIG5hbWUgXSA/CisJCQkJCUV4cHIuYXR0ckhhbmRsZVsgbmFt
ZSBdKCBlbGVtICkgOgorCQkJCQllbGVtWyBuYW1lIF0gIT0gbnVsbCA/CisJCQkJCQllbGVtWyBu
YW1lIF0gOgorCQkJCQkJZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKSwKKwkJCQl2YWx1ZSA9IHJl
c3VsdCArICIiLAorCQkJCXR5cGUgPSBtYXRjaFsyXSwKKwkJCQljaGVjayA9IG1hdGNoWzRdOwor
CisJCQlyZXR1cm4gcmVzdWx0ID09IG51bGwgPworCQkJCXR5cGUgPT09ICIhPSIgOgorCQkJCXR5
cGUgPT09ICI9IiA/CisJCQkJdmFsdWUgPT09IGNoZWNrIDoKKwkJCQl0eXBlID09PSAiKj0iID8K
KwkJCQl2YWx1ZS5pbmRleE9mKGNoZWNrKSA+PSAwIDoKKwkJCQl0eXBlID09PSAifj0iID8KKwkJ
CQkoIiAiICsgdmFsdWUgKyAiICIpLmluZGV4T2YoY2hlY2spID49IDAgOgorCQkJCSFjaGVjayA/
CisJCQkJdmFsdWUgJiYgcmVzdWx0ICE9PSBmYWxzZSA6CisJCQkJdHlwZSA9PT0gIiE9IiA/CisJ
CQkJdmFsdWUgIT09IGNoZWNrIDoKKwkJCQl0eXBlID09PSAiXj0iID8KKwkJCQl2YWx1ZS5pbmRl
eE9mKGNoZWNrKSA9PT0gMCA6CisJCQkJdHlwZSA9PT0gIiQ9IiA/CisJCQkJdmFsdWUuc3Vic3Ry
KHZhbHVlLmxlbmd0aCAtIGNoZWNrLmxlbmd0aCkgPT09IGNoZWNrIDoKKwkJCQl0eXBlID09PSAi
fD0iID8KKwkJCQl2YWx1ZSA9PT0gY2hlY2sgfHwgdmFsdWUuc3Vic3RyKDAsIGNoZWNrLmxlbmd0
aCArIDEpID09PSBjaGVjayArICItIiA6CisJCQkJZmFsc2U7CisJCX0sCisKKwkJUE9TOiBmdW5j
dGlvbiggZWxlbSwgbWF0Y2gsIGksIGFycmF5ICkgeworCQkJdmFyIG5hbWUgPSBtYXRjaFsyXSwK
KwkJCQlmaWx0ZXIgPSBFeHByLnNldEZpbHRlcnNbIG5hbWUgXTsKKworCQkJaWYgKCBmaWx0ZXIg
KSB7CisJCQkJcmV0dXJuIGZpbHRlciggZWxlbSwgaSwgbWF0Y2gsIGFycmF5ICk7CisJCQl9CisJ
CX0KKwl9Cit9OworCit2YXIgb3JpZ1BPUyA9IEV4cHIubWF0Y2guUE9TLAorCWZlc2NhcGUgPSBm
dW5jdGlvbihhbGwsIG51bSl7CisJCXJldHVybiAiXFwiICsgKG51bSAtIDAgKyAxKTsKKwl9Owor
Citmb3IgKCB2YXIgdHlwZSBpbiBFeHByLm1hdGNoICkgeworCUV4cHIubWF0Y2hbIHR5cGUgXSA9
IG5ldyBSZWdFeHAoIEV4cHIubWF0Y2hbIHR5cGUgXS5zb3VyY2UgKyAoLyg/IVteXFtdKlxdKSg/
IVteXChdKlwpKS8uc291cmNlKSApOworCUV4cHIubGVmdE1hdGNoWyB0eXBlIF0gPSBuZXcgUmVn
RXhwKCAvKF4oPzoufFxyfFxuKSo/KS8uc291cmNlICsgRXhwci5tYXRjaFsgdHlwZSBdLnNvdXJj
ZS5yZXBsYWNlKC9cXChcZCspL2csIGZlc2NhcGUpICk7Cit9CisKK3ZhciBtYWtlQXJyYXkgPSBm
dW5jdGlvbiggYXJyYXksIHJlc3VsdHMgKSB7CisJYXJyYXkgPSBBcnJheS5wcm90b3R5cGUuc2xp
Y2UuY2FsbCggYXJyYXksIDAgKTsKKworCWlmICggcmVzdWx0cyApIHsKKwkJcmVzdWx0cy5wdXNo
LmFwcGx5KCByZXN1bHRzLCBhcnJheSApOworCQlyZXR1cm4gcmVzdWx0czsKKwl9CisJCisJcmV0
dXJuIGFycmF5OworfTsKKworLy8gUGVyZm9ybSBhIHNpbXBsZSBjaGVjayB0byBkZXRlcm1pbmUg
aWYgdGhlIGJyb3dzZXIgaXMgY2FwYWJsZSBvZgorLy8gY29udmVydGluZyBhIE5vZGVMaXN0IHRv
IGFuIGFycmF5IHVzaW5nIGJ1aWx0aW4gbWV0aG9kcy4KKy8vIEFsc28gdmVyaWZpZXMgdGhhdCB0
aGUgcmV0dXJuZWQgYXJyYXkgaG9sZHMgRE9NIG5vZGVzCisvLyAod2hpY2ggaXMgbm90IHRoZSBj
YXNlIGluIHRoZSBCbGFja2JlcnJ5IGJyb3dzZXIpCit0cnkgeworCUFycmF5LnByb3RvdHlwZS5z
bGljZS5jYWxsKCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2RlcywgMCApWzBdLm5v
ZGVUeXBlOworCisvLyBQcm92aWRlIGEgZmFsbGJhY2sgbWV0aG9kIGlmIGl0IGRvZXMgbm90IHdv
cmsKK30gY2F0Y2goIGUgKSB7CisJbWFrZUFycmF5ID0gZnVuY3Rpb24oIGFycmF5LCByZXN1bHRz
ICkgeworCQl2YXIgaSA9IDAsCisJCQlyZXQgPSByZXN1bHRzIHx8IFtdOworCisJCWlmICggdG9T
dHJpbmcuY2FsbChhcnJheSkgPT09ICJbb2JqZWN0IEFycmF5XSIgKSB7CisJCQlBcnJheS5wcm90
b3R5cGUucHVzaC5hcHBseSggcmV0LCBhcnJheSApOworCisJCX0gZWxzZSB7CisJCQlpZiAoIHR5
cGVvZiBhcnJheS5sZW5ndGggPT09ICJudW1iZXIiICkgeworCQkJCWZvciAoIHZhciBsID0gYXJy
YXkubGVuZ3RoOyBpIDwgbDsgaSsrICkgeworCQkJCQlyZXQucHVzaCggYXJyYXlbaV0gKTsKKwkJ
CQl9CisKKwkJCX0gZWxzZSB7CisJCQkJZm9yICggOyBhcnJheVtpXTsgaSsrICkgeworCQkJCQly
ZXQucHVzaCggYXJyYXlbaV0gKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlyZXR1cm4gcmV0Owor
CX07Cit9CisKK3ZhciBzb3J0T3JkZXIsIHNpYmxpbmdDaGVjazsKKworaWYgKCBkb2N1bWVudC5k
b2N1bWVudEVsZW1lbnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24gKSB7CisJc29ydE9yZGVyID0g
ZnVuY3Rpb24oIGEsIGIgKSB7CisJCWlmICggYSA9PT0gYiApIHsKKwkJCWhhc0R1cGxpY2F0ZSA9
IHRydWU7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWlmICggIWEuY29tcGFyZURvY3VtZW50UG9z
aXRpb24gfHwgIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb24gKSB7CisJCQlyZXR1cm4gYS5jb21w
YXJlRG9jdW1lbnRQb3NpdGlvbiA/IC0xIDogMTsKKwkJfQorCisJCXJldHVybiBhLmNvbXBhcmVE
b2N1bWVudFBvc2l0aW9uKGIpICYgNCA/IC0xIDogMTsKKwl9OworCit9IGVsc2UgeworCXNvcnRP
cmRlciA9IGZ1bmN0aW9uKCBhLCBiICkgeworCQl2YXIgYWwsIGJsLAorCQkJYXAgPSBbXSwKKwkJ
CWJwID0gW10sCisJCQlhdXAgPSBhLnBhcmVudE5vZGUsCisJCQlidXAgPSBiLnBhcmVudE5vZGUs
CisJCQljdXIgPSBhdXA7CisKKwkJLy8gVGhlIG5vZGVzIGFyZSBpZGVudGljYWwsIHdlIGNhbiBl
eGl0IGVhcmx5CisJCWlmICggYSA9PT0gYiApIHsKKwkJCWhhc0R1cGxpY2F0ZSA9IHRydWU7CisJ
CQlyZXR1cm4gMDsKKworCQkvLyBJZiB0aGUgbm9kZXMgYXJlIHNpYmxpbmdzIChvciBpZGVudGlj
YWwpIHdlIGNhbiBkbyBhIHF1aWNrIGNoZWNrCisJCX0gZWxzZSBpZiAoIGF1cCA9PT0gYnVwICkg
eworCQkJcmV0dXJuIHNpYmxpbmdDaGVjayggYSwgYiApOworCisJCS8vIElmIG5vIHBhcmVudHMg
d2VyZSBmb3VuZCB0aGVuIHRoZSBub2RlcyBhcmUgZGlzY29ubmVjdGVkCisJCX0gZWxzZSBpZiAo
ICFhdXAgKSB7CisJCQlyZXR1cm4gLTE7CisKKwkJfSBlbHNlIGlmICggIWJ1cCApIHsKKwkJCXJl
dHVybiAxOworCQl9CisKKwkJLy8gT3RoZXJ3aXNlIHRoZXkncmUgc29tZXdoZXJlIGVsc2UgaW4g
dGhlIHRyZWUgc28gd2UgbmVlZAorCQkvLyB0byBidWlsZCB1cCBhIGZ1bGwgbGlzdCBvZiB0aGUg
cGFyZW50Tm9kZXMgZm9yIGNvbXBhcmlzb24KKwkJd2hpbGUgKCBjdXIgKSB7CisJCQlhcC51bnNo
aWZ0KCBjdXIgKTsKKwkJCWN1ciA9IGN1ci5wYXJlbnROb2RlOworCQl9CisKKwkJY3VyID0gYnVw
OworCisJCXdoaWxlICggY3VyICkgeworCQkJYnAudW5zaGlmdCggY3VyICk7CisJCQljdXIgPSBj
dXIucGFyZW50Tm9kZTsKKwkJfQorCisJCWFsID0gYXAubGVuZ3RoOworCQlibCA9IGJwLmxlbmd0
aDsKKworCQkvLyBTdGFydCB3YWxraW5nIGRvd24gdGhlIHRyZWUgbG9va2luZyBmb3IgYSBkaXNj
cmVwYW5jeQorCQlmb3IgKCB2YXIgaSA9IDA7IGkgPCBhbCAmJiBpIDwgYmw7IGkrKyApIHsKKwkJ
CWlmICggYXBbaV0gIT09IGJwW2ldICkgeworCQkJCXJldHVybiBzaWJsaW5nQ2hlY2soIGFwW2ld
LCBicFtpXSApOworCQkJfQorCQl9CisKKwkJLy8gV2UgZW5kZWQgc29tZXBsYWNlIHVwIHRoZSB0
cmVlIHNvIGRvIGEgc2libGluZyBjaGVjaworCQlyZXR1cm4gaSA9PT0gYWwgPworCQkJc2libGlu
Z0NoZWNrKCBhLCBicFtpXSwgLTEgKSA6CisJCQlzaWJsaW5nQ2hlY2soIGFwW2ldLCBiLCAxICk7
CisJfTsKKworCXNpYmxpbmdDaGVjayA9IGZ1bmN0aW9uKCBhLCBiLCByZXQgKSB7CisJCWlmICgg
YSA9PT0gYiApIHsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQl2YXIgY3VyID0gYS5uZXh0U2li
bGluZzsKKworCQl3aGlsZSAoIGN1ciApIHsKKwkJCWlmICggY3VyID09PSBiICkgeworCQkJCXJl
dHVybiAtMTsKKwkJCX0KKworCQkJY3VyID0gY3VyLm5leHRTaWJsaW5nOworCQl9CisKKwkJcmV0
dXJuIDE7CisJfTsKK30KKworLy8gVXRpbGl0eSBmdW5jdGlvbiBmb3IgcmV0cmVpdmluZyB0aGUg
dGV4dCB2YWx1ZSBvZiBhbiBhcnJheSBvZiBET00gbm9kZXMKK1NpenpsZS5nZXRUZXh0ID0gZnVu
Y3Rpb24oIGVsZW1zICkgeworCXZhciByZXQgPSAiIiwgZWxlbTsKKworCWZvciAoIHZhciBpID0g
MDsgZWxlbXNbaV07IGkrKyApIHsKKwkJZWxlbSA9IGVsZW1zW2ldOworCisJCS8vIEdldCB0aGUg
dGV4dCBmcm9tIHRleHQgbm9kZXMgYW5kIENEQVRBIG5vZGVzCisJCWlmICggZWxlbS5ub2RlVHlw
ZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA0ICkgeworCQkJcmV0ICs9IGVsZW0ubm9kZVZh
bHVlOworCisJCS8vIFRyYXZlcnNlIGV2ZXJ5dGhpbmcgZWxzZSwgZXhjZXB0IGNvbW1lbnQgbm9k
ZXMKKwkJfSBlbHNlIGlmICggZWxlbS5ub2RlVHlwZSAhPT0gOCApIHsKKwkJCXJldCArPSBTaXp6
bGUuZ2V0VGV4dCggZWxlbS5jaGlsZE5vZGVzICk7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0Owor
fTsKKworLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBicm93c2VyIHJldHVybnMgZWxlbWVudHMgYnkg
bmFtZSB3aGVuCisvLyBxdWVyeWluZyBieSBnZXRFbGVtZW50QnlJZCAoYW5kIHByb3ZpZGUgYSB3
b3JrYXJvdW5kKQorKGZ1bmN0aW9uKCl7CisJLy8gV2UncmUgZ29pbmcgdG8gaW5qZWN0IGEgZmFr
ZSBpbnB1dCBlbGVtZW50IHdpdGggYSBzcGVjaWZpZWQgbmFtZQorCXZhciBmb3JtID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiZGl2IiksCisJCWlkID0gInNjcmlwdCIgKyAobmV3IERhdGUoKSku
Z2V0VGltZSgpLAorCQlyb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OworCisJZm9ybS5p
bm5lckhUTUwgPSAiPGEgbmFtZT0nIiArIGlkICsgIicvPiI7CisKKwkvLyBJbmplY3QgaXQgaW50
byB0aGUgcm9vdCBlbGVtZW50LCBjaGVjayBpdHMgc3RhdHVzLCBhbmQgcmVtb3ZlIGl0IHF1aWNr
bHkKKwlyb290Lmluc2VydEJlZm9yZSggZm9ybSwgcm9vdC5maXJzdENoaWxkICk7CisKKwkvLyBU
aGUgd29ya2Fyb3VuZCBoYXMgdG8gZG8gYWRkaXRpb25hbCBjaGVja3MgYWZ0ZXIgYSBnZXRFbGVt
ZW50QnlJZAorCS8vIFdoaWNoIHNsb3dzIHRoaW5ncyBkb3duIGZvciBvdGhlciBicm93c2VycyAo
aGVuY2UgdGhlIGJyYW5jaGluZykKKwlpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBpZCAp
ICkgeworCQlFeHByLmZpbmQuSUQgPSBmdW5jdGlvbiggbWF0Y2gsIGNvbnRleHQsIGlzWE1MICkg
eworCQkJaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gInVuZGVmaW5lZCIg
JiYgIWlzWE1MICkgeworCQkJCXZhciBtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZChtYXRjaFsx
XSk7CisKKwkJCQlyZXR1cm4gbSA/CisJCQkJCW0uaWQgPT09IG1hdGNoWzFdIHx8IHR5cGVvZiBt
LmdldEF0dHJpYnV0ZU5vZGUgIT09ICJ1bmRlZmluZWQiICYmIG0uZ2V0QXR0cmlidXRlTm9kZSgi
aWQiKS5ub2RlVmFsdWUgPT09IG1hdGNoWzFdID8KKwkJCQkJCVttXSA6CisJCQkJCQl1bmRlZmlu
ZWQgOgorCQkJCQlbXTsKKwkJCX0KKwkJfTsKKworCQlFeHByLmZpbHRlci5JRCA9IGZ1bmN0aW9u
KCBlbGVtLCBtYXRjaCApIHsKKwkJCXZhciBub2RlID0gdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRl
Tm9kZSAhPT0gInVuZGVmaW5lZCIgJiYgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpOworCisJ
CQlyZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiBub2RlICYmIG5vZGUubm9kZVZhbHVlID09
PSBtYXRjaDsKKwkJfTsKKwl9CisKKwlyb290LnJlbW92ZUNoaWxkKCBmb3JtICk7CisKKwkvLyBy
ZWxlYXNlIG1lbW9yeSBpbiBJRQorCXJvb3QgPSBmb3JtID0gbnVsbDsKK30pKCk7CisKKyhmdW5j
dGlvbigpeworCS8vIENoZWNrIHRvIHNlZSBpZiB0aGUgYnJvd3NlciByZXR1cm5zIG9ubHkgZWxl
bWVudHMKKwkvLyB3aGVuIGRvaW5nIGdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikKKworCS8vIENy
ZWF0ZSBhIGZha2UgZWxlbWVudAorCXZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKKwlkaXYuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIiIpICk7CisK
KwkvLyBNYWtlIHN1cmUgbm8gY29tbWVudHMgYXJlIGZvdW5kCisJaWYgKCBkaXYuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoIioiKS5sZW5ndGggPiAwICkgeworCQlFeHByLmZpbmQuVEFHID0gZnVuY3Rp
b24oIG1hdGNoLCBjb250ZXh0ICkgeworCQkJdmFyIHJlc3VsdHMgPSBjb250ZXh0LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCBtYXRjaFsxXSApOworCisJCQkvLyBGaWx0ZXIgb3V0IHBvc3NpYmxlIGNv
bW1lbnRzCisJCQlpZiAoIG1hdGNoWzFdID09PSAiKiIgKSB7CisJCQkJdmFyIHRtcCA9IFtdOwor
CisJCQkJZm9yICggdmFyIGkgPSAwOyByZXN1bHRzW2ldOyBpKysgKSB7CisJCQkJCWlmICggcmVz
dWx0c1tpXS5ub2RlVHlwZSA9PT0gMSApIHsKKwkJCQkJCXRtcC5wdXNoKCByZXN1bHRzW2ldICk7
CisJCQkJCX0KKwkJCQl9CisKKwkJCQlyZXN1bHRzID0gdG1wOworCQkJfQorCisJCQlyZXR1cm4g
cmVzdWx0czsKKwkJfTsKKwl9CisKKwkvLyBDaGVjayB0byBzZWUgaWYgYW4gYXR0cmlidXRlIHJl
dHVybnMgbm9ybWFsaXplZCBocmVmIGF0dHJpYnV0ZXMKKwlkaXYuaW5uZXJIVE1MID0gIjxhIGhy
ZWY9JyMnPjwvYT4iOworCisJaWYgKCBkaXYuZmlyc3RDaGlsZCAmJiB0eXBlb2YgZGl2LmZpcnN0
Q2hpbGQuZ2V0QXR0cmlidXRlICE9PSAidW5kZWZpbmVkIiAmJgorCQkJZGl2LmZpcnN0Q2hpbGQu
Z2V0QXR0cmlidXRlKCJocmVmIikgIT09ICIjIiApIHsKKworCQlFeHByLmF0dHJIYW5kbGUuaHJl
ZiA9IGZ1bmN0aW9uKCBlbGVtICkgeworCQkJcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCAiaHJl
ZiIsIDIgKTsKKwkJfTsKKwl9CisKKwkvLyByZWxlYXNlIG1lbW9yeSBpbiBJRQorCWRpdiA9IG51
bGw7Cit9KSgpOworCitpZiAoIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwgKSB7CisJKGZ1bmN0
aW9uKCl7CisJCXZhciBvbGRTaXp6bGUgPSBTaXp6bGUsCisJCQlkaXYgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJkaXYiKSwKKwkJCWlkID0gIl9fc2l6emxlX18iOworCisJCWRpdi5pbm5lckhU
TUwgPSAiPHAgY2xhc3M9J1RFU1QnPjwvcD4iOworCisJCS8vIFNhZmFyaSBjYW4ndCBoYW5kbGUg
dXBwZXJjYXNlIG9yIHVuaWNvZGUgY2hhcmFjdGVycyB3aGVuCisJCS8vIGluIHF1aXJrcyBtb2Rl
LgorCQlpZiAoIGRpdi5xdWVyeVNlbGVjdG9yQWxsICYmIGRpdi5xdWVyeVNlbGVjdG9yQWxsKCIu
VEVTVCIpLmxlbmd0aCA9PT0gMCApIHsKKwkJCXJldHVybjsKKwkJfQorCQorCQlTaXp6bGUgPSBm
dW5jdGlvbiggcXVlcnksIGNvbnRleHQsIGV4dHJhLCBzZWVkICkgeworCQkJY29udGV4dCA9IGNv
bnRleHQgfHwgZG9jdW1lbnQ7CisKKwkJCS8vIE9ubHkgdXNlIHF1ZXJ5U2VsZWN0b3JBbGwgb24g
bm9uLVhNTCBkb2N1bWVudHMKKwkJCS8vIChJRCBzZWxlY3RvcnMgZG9uJ3Qgd29yayBpbiBub24t
SFRNTCBkb2N1bWVudHMpCisJCQlpZiAoICFzZWVkICYmICFTaXp6bGUuaXNYTUwoY29udGV4dCkg
KSB7CisJCQkJLy8gU2VlIGlmIHdlIGZpbmQgYSBzZWxlY3RvciB0byBzcGVlZCB1cAorCQkJCXZh
ciBtYXRjaCA9IC9eKFx3KyQpfF5cLihbXHdcLV0rJCl8XiMoW1x3XC1dKyQpLy5leGVjKCBxdWVy
eSApOworCQkJCQorCQkJCWlmICggbWF0Y2ggJiYgKGNvbnRleHQubm9kZVR5cGUgPT09IDEgfHwg
Y29udGV4dC5ub2RlVHlwZSA9PT0gOSkgKSB7CisJCQkJCS8vIFNwZWVkLXVwOiBTaXp6bGUoIlRB
RyIpCisJCQkJCWlmICggbWF0Y2hbMV0gKSB7CisJCQkJCQlyZXR1cm4gbWFrZUFycmF5KCBjb250
ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBxdWVyeSApLCBleHRyYSApOworCQkJCQkKKwkJCQkJ
Ly8gU3BlZWQtdXA6IFNpenpsZSgiLkNMQVNTIikKKwkJCQkJfSBlbHNlIGlmICggbWF0Y2hbMl0g
JiYgRXhwci5maW5kLkNMQVNTICYmIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApIHsK
KwkJCQkJCXJldHVybiBtYWtlQXJyYXkoIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgg
bWF0Y2hbMl0gKSwgZXh0cmEgKTsKKwkJCQkJfQorCQkJCX0KKwkJCQkKKwkJCQlpZiAoIGNvbnRl
eHQubm9kZVR5cGUgPT09IDkgKSB7CisJCQkJCS8vIFNwZWVkLXVwOiBTaXp6bGUoImJvZHkiKQor
CQkJCQkvLyBUaGUgYm9keSBlbGVtZW50IG9ubHkgZXhpc3RzIG9uY2UsIG9wdGltaXplIGZpbmRp
bmcgaXQKKwkJCQkJaWYgKCBxdWVyeSA9PT0gImJvZHkiICYmIGNvbnRleHQuYm9keSApIHsKKwkJ
CQkJCXJldHVybiBtYWtlQXJyYXkoIFsgY29udGV4dC5ib2R5IF0sIGV4dHJhICk7CisJCQkJCQkK
KwkJCQkJLy8gU3BlZWQtdXA6IFNpenpsZSgiI0lEIikKKwkJCQkJfSBlbHNlIGlmICggbWF0Y2gg
JiYgbWF0Y2hbM10gKSB7CisJCQkJCQl2YXIgZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQo
IG1hdGNoWzNdICk7CisKKwkJCQkJCS8vIENoZWNrIHBhcmVudE5vZGUgdG8gY2F0Y2ggd2hlbiBC
bGFja2JlcnJ5IDQuNiByZXR1cm5zCisJCQkJCQkvLyBub2RlcyB0aGF0IGFyZSBubyBsb25nZXIg
aW4gdGhlIGRvY3VtZW50ICM2OTYzCisJCQkJCQlpZiAoIGVsZW0gJiYgZWxlbS5wYXJlbnROb2Rl
ICkgeworCQkJCQkJCS8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBJRSBhbmQgT3BlcmEgcmV0dXJu
IGl0ZW1zCisJCQkJCQkJLy8gYnkgbmFtZSBpbnN0ZWFkIG9mIElECisJCQkJCQkJaWYgKCBlbGVt
LmlkID09PSBtYXRjaFszXSApIHsKKwkJCQkJCQkJcmV0dXJuIG1ha2VBcnJheSggWyBlbGVtIF0s
IGV4dHJhICk7CisJCQkJCQkJfQorCQkJCQkJCQorCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQlyZXR1
cm4gbWFrZUFycmF5KCBbXSwgZXh0cmEgKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQkKKwkJCQkJ
dHJ5IHsKKwkJCQkJCXJldHVybiBtYWtlQXJyYXkoIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbChx
dWVyeSksIGV4dHJhICk7CisJCQkJCX0gY2F0Y2gocXNhRXJyb3IpIHt9CisKKwkJCQkvLyBxU0Eg
d29ya3Mgc3RyYW5nZWx5IG9uIEVsZW1lbnQtcm9vdGVkIHF1ZXJpZXMKKwkJCQkvLyBXZSBjYW4g
d29yayBhcm91bmQgdGhpcyBieSBzcGVjaWZ5aW5nIGFuIGV4dHJhIElEIG9uIHRoZSByb290CisJ
CQkJLy8gYW5kIHdvcmtpbmcgdXAgZnJvbSB0aGVyZSAoVGhhbmtzIHRvIEFuZHJldyBEdXBvbnQg
Zm9yIHRoZSB0ZWNobmlxdWUpCisJCQkJLy8gSUUgOCBkb2Vzbid0IHdvcmsgb24gb2JqZWN0IGVs
ZW1lbnRzCisJCQkJfSBlbHNlIGlmICggY29udGV4dC5ub2RlVHlwZSA9PT0gMSAmJiBjb250ZXh0
Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICJvYmplY3QiICkgeworCQkJCQl2YXIgb2xkQ29u
dGV4dCA9IGNvbnRleHQsCisJCQkJCQlvbGQgPSBjb250ZXh0LmdldEF0dHJpYnV0ZSggImlkIiAp
LAorCQkJCQkJbmlkID0gb2xkIHx8IGlkLAorCQkJCQkJaGFzUGFyZW50ID0gY29udGV4dC5wYXJl
bnROb2RlLAorCQkJCQkJcmVsYXRpdmVIaWVyYXJjaHlTZWxlY3RvciA9IC9eXHMqWyt+XS8udGVz
dCggcXVlcnkgKTsKKworCQkJCQlpZiAoICFvbGQgKSB7CisJCQkJCQljb250ZXh0LnNldEF0dHJp
YnV0ZSggImlkIiwgbmlkICk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQluaWQgPSBuaWQucmVwbGFj
ZSggLycvZywgIlxcJCYiICk7CisJCQkJCX0KKwkJCQkJaWYgKCByZWxhdGl2ZUhpZXJhcmNoeVNl
bGVjdG9yICYmIGhhc1BhcmVudCApIHsKKwkJCQkJCWNvbnRleHQgPSBjb250ZXh0LnBhcmVudE5v
ZGU7CisJCQkJCX0KKworCQkJCQl0cnkgeworCQkJCQkJaWYgKCAhcmVsYXRpdmVIaWVyYXJjaHlT
ZWxlY3RvciB8fCBoYXNQYXJlbnQgKSB7CisJCQkJCQkJcmV0dXJuIG1ha2VBcnJheSggY29udGV4
dC5xdWVyeVNlbGVjdG9yQWxsKCAiW2lkPSciICsgbmlkICsgIiddICIgKyBxdWVyeSApLCBleHRy
YSApOworCQkJCQkJfQorCisJCQkJCX0gY2F0Y2gocHNldWRvRXJyb3IpIHsKKwkJCQkJfSBmaW5h
bGx5IHsKKwkJCQkJCWlmICggIW9sZCApIHsKKwkJCQkJCQlvbGRDb250ZXh0LnJlbW92ZUF0dHJp
YnV0ZSggImlkIiApOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQkKKwkJCXJldHVy
biBvbGRTaXp6bGUocXVlcnksIGNvbnRleHQsIGV4dHJhLCBzZWVkKTsKKwkJfTsKKworCQlmb3Ig
KCB2YXIgcHJvcCBpbiBvbGRTaXp6bGUgKSB7CisJCQlTaXp6bGVbIHByb3AgXSA9IG9sZFNpenps
ZVsgcHJvcCBdOworCQl9CisKKwkJLy8gcmVsZWFzZSBtZW1vcnkgaW4gSUUKKwkJZGl2ID0gbnVs
bDsKKwl9KSgpOworfQorCisoZnVuY3Rpb24oKXsKKwl2YXIgaHRtbCA9IGRvY3VtZW50LmRvY3Vt
ZW50RWxlbWVudCwKKwkJbWF0Y2hlcyA9IGh0bWwubWF0Y2hlc1NlbGVjdG9yIHx8IGh0bWwubW96
TWF0Y2hlc1NlbGVjdG9yIHx8IGh0bWwud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8IGh0bWwubXNN
YXRjaGVzU2VsZWN0b3IsCisJCXBzZXVkb1dvcmtzID0gZmFsc2U7CisKKwl0cnkgeworCQkvLyBU
aGlzIHNob3VsZCBmYWlsIHdpdGggYW4gZXhjZXB0aW9uCisJCS8vIEdlY2tvIGRvZXMgbm90IGVy
cm9yLCByZXR1cm5zIGZhbHNlIGluc3RlYWQKKwkJbWF0Y2hlcy5jYWxsKCBkb2N1bWVudC5kb2N1
bWVudEVsZW1lbnQsICJbdGVzdCE9JyddOnNpenpsZSIgKTsKKwkKKwl9IGNhdGNoKCBwc2V1ZG9F
cnJvciApIHsKKwkJcHNldWRvV29ya3MgPSB0cnVlOworCX0KKworCWlmICggbWF0Y2hlcyApIHsK
KwkJU2l6emxlLm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uKCBub2RlLCBleHByICkgeworCQkJ
Ly8gTWFrZSBzdXJlIHRoYXQgYXR0cmlidXRlIHNlbGVjdG9ycyBhcmUgcXVvdGVkCisJCQlleHBy
ID0gZXhwci5yZXBsYWNlKC9cPVxzKihbXiciXF1dKilccypcXS9nLCAiPSckMSddIik7CisKKwkJ
CWlmICggIVNpenpsZS5pc1hNTCggbm9kZSApICkgeworCQkJCXRyeSB7IAorCQkJCQlpZiAoIHBz
ZXVkb1dvcmtzIHx8ICFFeHByLm1hdGNoLlBTRVVETy50ZXN0KCBleHByICkgJiYgIS8hPS8udGVz
dCggZXhwciApICkgeworCQkJCQkJcmV0dXJuIG1hdGNoZXMuY2FsbCggbm9kZSwgZXhwciApOwor
CQkJCQl9CisJCQkJfSBjYXRjaChlKSB7fQorCQkJfQorCisJCQlyZXR1cm4gU2l6emxlKGV4cHIs
IG51bGwsIG51bGwsIFtub2RlXSkubGVuZ3RoID4gMDsKKwkJfTsKKwl9Cit9KSgpOworCisoZnVu
Y3Rpb24oKXsKKwl2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisKKwlk
aXYuaW5uZXJIVE1MID0gIjxkaXYgY2xhc3M9J3Rlc3QgZSc+PC9kaXY+PGRpdiBjbGFzcz0ndGVz
dCc+PC9kaXY+IjsKKworCS8vIE9wZXJhIGNhbid0IGZpbmQgYSBzZWNvbmQgY2xhc3NuYW1lIChp
biA5LjYpCisJLy8gQWxzbywgbWFrZSBzdXJlIHRoYXQgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSBh
Y3R1YWxseSBleGlzdHMKKwlpZiAoICFkaXYuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSB8fCBkaXYu
Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aCA9PT0gMCApIHsKKwkJcmV0dXJuOwor
CX0KKworCS8vIFNhZmFyaSBjYWNoZXMgY2xhc3MgYXR0cmlidXRlcywgZG9lc24ndCBjYXRjaCBj
aGFuZ2VzIChpbiAzLjIpCisJZGl2Lmxhc3RDaGlsZC5jbGFzc05hbWUgPSAiZSI7CisKKwlpZiAo
IGRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoID09PSAxICkgeworCQlyZXR1
cm47CisJfQorCQorCUV4cHIub3JkZXIuc3BsaWNlKDEsIDAsICJDTEFTUyIpOworCUV4cHIuZmlu
ZC5DTEFTUyA9IGZ1bmN0aW9uKCBtYXRjaCwgY29udGV4dCwgaXNYTUwgKSB7CisJCWlmICggdHlw
ZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gInVuZGVmaW5lZCIgJiYgIWlz
WE1MICkgeworCQkJcmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShtYXRjaFsx
XSk7CisJCX0KKwl9OworCisJLy8gcmVsZWFzZSBtZW1vcnkgaW4gSUUKKwlkaXYgPSBudWxsOwor
fSkoKTsKKworZnVuY3Rpb24gZGlyTm9kZUNoZWNrKCBkaXIsIGN1ciwgZG9uZU5hbWUsIGNoZWNr
U2V0LCBub2RlQ2hlY2ssIGlzWE1MICkgeworCWZvciAoIHZhciBpID0gMCwgbCA9IGNoZWNrU2V0
Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKKwkJdmFyIGVsZW0gPSBjaGVja1NldFtpXTsKKworCQlp
ZiAoIGVsZW0gKSB7CisJCQl2YXIgbWF0Y2ggPSBmYWxzZTsKKworCQkJZWxlbSA9IGVsZW1bZGly
XTsKKworCQkJd2hpbGUgKCBlbGVtICkgeworCQkJCWlmICggZWxlbS5zaXpjYWNoZSA9PT0gZG9u
ZU5hbWUgKSB7CisJCQkJCW1hdGNoID0gY2hlY2tTZXRbZWxlbS5zaXpzZXRdOworCQkJCQlicmVh
azsKKwkJCQl9CisKKwkJCQlpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgIWlzWE1MICl7CisJ
CQkJCWVsZW0uc2l6Y2FjaGUgPSBkb25lTmFtZTsKKwkJCQkJZWxlbS5zaXpzZXQgPSBpOworCQkJ
CX0KKworCQkJCWlmICggZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBjdXIgKSB7CisJ
CQkJCW1hdGNoID0gZWxlbTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJZWxlbSA9IGVsZW1b
ZGlyXTsKKwkJCX0KKworCQkJY2hlY2tTZXRbaV0gPSBtYXRjaDsKKwkJfQorCX0KK30KKworZnVu
Y3Rpb24gZGlyQ2hlY2soIGRpciwgY3VyLCBkb25lTmFtZSwgY2hlY2tTZXQsIG5vZGVDaGVjaywg
aXNYTUwgKSB7CisJZm9yICggdmFyIGkgPSAwLCBsID0gY2hlY2tTZXQubGVuZ3RoOyBpIDwgbDsg
aSsrICkgeworCQl2YXIgZWxlbSA9IGNoZWNrU2V0W2ldOworCisJCWlmICggZWxlbSApIHsKKwkJ
CXZhciBtYXRjaCA9IGZhbHNlOworCQkJCisJCQllbGVtID0gZWxlbVtkaXJdOworCisJCQl3aGls
ZSAoIGVsZW0gKSB7CisJCQkJaWYgKCBlbGVtLnNpemNhY2hlID09PSBkb25lTmFtZSApIHsKKwkJ
CQkJbWF0Y2ggPSBjaGVja1NldFtlbGVtLnNpenNldF07CisJCQkJCWJyZWFrOworCQkJCX0KKwor
CQkJCWlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKwkJCQkJaWYgKCAhaXNYTUwgKSB7CisJ
CQkJCQllbGVtLnNpemNhY2hlID0gZG9uZU5hbWU7CisJCQkJCQllbGVtLnNpenNldCA9IGk7CisJ
CQkJCX0KKworCQkJCQlpZiAoIHR5cGVvZiBjdXIgIT09ICJzdHJpbmciICkgeworCQkJCQkJaWYg
KCBlbGVtID09PSBjdXIgKSB7CisJCQkJCQkJbWF0Y2ggPSB0cnVlOworCQkJCQkJCWJyZWFrOwor
CQkJCQkJfQorCisJCQkJCX0gZWxzZSBpZiAoIFNpenpsZS5maWx0ZXIoIGN1ciwgW2VsZW1dICku
bGVuZ3RoID4gMCApIHsKKwkJCQkJCW1hdGNoID0gZWxlbTsKKwkJCQkJCWJyZWFrOworCQkJCQl9
CisJCQkJfQorCisJCQkJZWxlbSA9IGVsZW1bZGlyXTsKKwkJCX0KKworCQkJY2hlY2tTZXRbaV0g
PSBtYXRjaDsKKwkJfQorCX0KK30KKworaWYgKCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY29u
dGFpbnMgKSB7CisJU2l6emxlLmNvbnRhaW5zID0gZnVuY3Rpb24oIGEsIGIgKSB7CisJCXJldHVy
biBhICE9PSBiICYmIChhLmNvbnRhaW5zID8gYS5jb250YWlucyhiKSA6IHRydWUpOworCX07CisK
K30gZWxzZSBpZiAoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jb21wYXJlRG9jdW1lbnRQb3Np
dGlvbiApIHsKKwlTaXp6bGUuY29udGFpbnMgPSBmdW5jdGlvbiggYSwgYiApIHsKKwkJcmV0dXJu
ICEhKGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikgJiAxNik7CisJfTsKKworfSBlbHNlIHsK
KwlTaXp6bGUuY29udGFpbnMgPSBmdW5jdGlvbigpIHsKKwkJcmV0dXJuIGZhbHNlOworCX07Cit9
CisKK1NpenpsZS5pc1hNTCA9IGZ1bmN0aW9uKCBlbGVtICkgeworCS8vIGRvY3VtZW50RWxlbWVu
dCBpcyB2ZXJpZmllZCBmb3IgY2FzZXMgd2hlcmUgaXQgZG9lc24ndCB5ZXQgZXhpc3QKKwkvLyAo
c3VjaCBhcyBsb2FkaW5nIGlmcmFtZXMgaW4gSUUgLSAjNDgzMykgCisJdmFyIGRvY3VtZW50RWxl
bWVudCA9IChlbGVtID8gZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gOiAwKS5kb2N1bWVudEVs
ZW1lbnQ7CisKKwlyZXR1cm4gZG9jdW1lbnRFbGVtZW50ID8gZG9jdW1lbnRFbGVtZW50Lm5vZGVO
YW1lICE9PSAiSFRNTCIgOiBmYWxzZTsKK307CisKK3ZhciBwb3NQcm9jZXNzID0gZnVuY3Rpb24o
IHNlbGVjdG9yLCBjb250ZXh0ICkgeworCXZhciBtYXRjaCwKKwkJdG1wU2V0ID0gW10sCisJCWxh
dGVyID0gIiIsCisJCXJvb3QgPSBjb250ZXh0Lm5vZGVUeXBlID8gW2NvbnRleHRdIDogY29udGV4
dDsKKworCS8vIFBvc2l0aW9uIHNlbGVjdG9ycyBtdXN0IGJlIGRvbmUgYWZ0ZXIgdGhlIGZpbHRl
cgorCS8vIEFuZCBzbyBtdXN0IDpub3QocG9zaXRpb25hbCkgc28gd2UgbW92ZSBhbGwgUFNFVURP
cyB0byB0aGUgZW5kCisJd2hpbGUgKCAobWF0Y2ggPSBFeHByLm1hdGNoLlBTRVVETy5leGVjKCBz
ZWxlY3RvciApKSApIHsKKwkJbGF0ZXIgKz0gbWF0Y2hbMF07CisJCXNlbGVjdG9yID0gc2VsZWN0
b3IucmVwbGFjZSggRXhwci5tYXRjaC5QU0VVRE8sICIiICk7CisJfQorCisJc2VsZWN0b3IgPSBF
eHByLnJlbGF0aXZlW3NlbGVjdG9yXSA/IHNlbGVjdG9yICsgIioiIDogc2VsZWN0b3I7CisKKwlm
b3IgKCB2YXIgaSA9IDAsIGwgPSByb290Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKKwkJU2l6emxl
KCBzZWxlY3Rvciwgcm9vdFtpXSwgdG1wU2V0ICk7CisJfQorCisJcmV0dXJuIFNpenpsZS5maWx0
ZXIoIGxhdGVyLCB0bXBTZXQgKTsKK307CisKKy8vIEVYUE9TRQoralF1ZXJ5LmZpbmQgPSBTaXp6
bGU7CitqUXVlcnkuZXhwciA9IFNpenpsZS5zZWxlY3RvcnM7CitqUXVlcnkuZXhwclsiOiJdID0g
alF1ZXJ5LmV4cHIuZmlsdGVyczsKK2pRdWVyeS51bmlxdWUgPSBTaXp6bGUudW5pcXVlU29ydDsK
K2pRdWVyeS50ZXh0ID0gU2l6emxlLmdldFRleHQ7CitqUXVlcnkuaXNYTUxEb2MgPSBTaXp6bGUu
aXNYTUw7CitqUXVlcnkuY29udGFpbnMgPSBTaXp6bGUuY29udGFpbnM7CisKKworfSkoKTsKClBy
b3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvc3JjL3NlbGVj
dG9yLmpzCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB5ZXMKCkluZGV4OiBMYXlv
dXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3NyYy9zaXp6bGUtanF1ZXJ5LmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvc3JjL3NpenpsZS1qcXVlcnkuanMJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3NyYy9zaXp6bGUtanF1
ZXJ5LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKK2pRdWVyeS5maW5kID0gU2l6emxl
OworalF1ZXJ5LmV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzOworalF1ZXJ5LmV4cHJbIjoiXSA9IGpR
dWVyeS5leHByLmZpbHRlcnM7CitqUXVlcnkudW5pcXVlID0gU2l6emxlLnVuaXF1ZVNvcnQ7Citq
UXVlcnkudGV4dCA9IFNpenpsZS5nZXRUZXh0OworalF1ZXJ5LmlzWE1MRG9jID0gU2l6emxlLmlz
WE1MOworalF1ZXJ5LmNvbnRhaW5zID0gU2l6emxlLmNvbnRhaW5zOwpJbmRleDogTGF5b3V0VGVz
dHMvanF1ZXJ5L3Jlc291cmNlcy9zcmMvc3VwcG9ydC5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3NyYy9zdXBwb3J0LmpzCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy9zcmMvc3VwcG9ydC5qcwkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwyMjUgQEAKKyhmdW5jdGlvbiggalF1ZXJ5ICkgeworCisoZnVuY3Rpb24oKSB7CisK
KwlqUXVlcnkuc3VwcG9ydCA9IHt9OworCisJdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImRpdiIpOworCisJZGl2LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisJZGl2LmlubmVySFRN
TCA9ICIgICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnIHN0eWxlPSdjb2xvcjpy
ZWQ7ZmxvYXQ6bGVmdDtvcGFjaXR5Oi41NTsnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+
IjsKKworCXZhciBhbGwgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSwKKwkJYSA9IGRp
di5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpWzBdLAorCQlzZWxlY3QgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJzZWxlY3QiKSwKKwkJb3B0ID0gc2VsZWN0LmFwcGVuZENoaWxkKCBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSApLAorCQlpbnB1dCA9IGRpdi5nZXRFbGVtZW50c0J5
VGFnTmFtZSgiaW5wdXQiKVswXTsKKworCS8vIENhbid0IGdldCBiYXNpYyB0ZXN0IHN1cHBvcnQK
KwlpZiAoICFhbGwgfHwgIWFsbC5sZW5ndGggfHwgIWEgKSB7CisJCXJldHVybjsKKwl9CisKKwlq
UXVlcnkuc3VwcG9ydCA9IHsKKwkJLy8gSUUgc3RyaXBzIGxlYWRpbmcgd2hpdGVzcGFjZSB3aGVu
IC5pbm5lckhUTUwgaXMgdXNlZAorCQlsZWFkaW5nV2hpdGVzcGFjZTogZGl2LmZpcnN0Q2hpbGQu
bm9kZVR5cGUgPT09IDMsCisKKwkJLy8gTWFrZSBzdXJlIHRoYXQgdGJvZHkgZWxlbWVudHMgYXJl
bid0IGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQKKwkJLy8gSUUgd2lsbCBpbnNlcnQgdGhlbSBpbnRv
IGVtcHR5IHRhYmxlcworCQl0Ym9keTogIWRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHki
KS5sZW5ndGgsCisKKwkJLy8gTWFrZSBzdXJlIHRoYXQgbGluayBlbGVtZW50cyBnZXQgc2VyaWFs
aXplZCBjb3JyZWN0bHkgYnkgaW5uZXJIVE1MCisJCS8vIFRoaXMgcmVxdWlyZXMgYSB3cmFwcGVy
IGVsZW1lbnQgaW4gSUUKKwkJaHRtbFNlcmlhbGl6ZTogISFkaXYuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoImxpbmsiKS5sZW5ndGgsCisKKwkJLy8gR2V0IHRoZSBzdHlsZSBpbmZvcm1hdGlvbiBmcm9t
IGdldEF0dHJpYnV0ZQorCQkvLyAoSUUgdXNlcyAuY3NzVGV4dCBpbnN0ZWQpCisJCXN0eWxlOiAv
cmVkLy50ZXN0KCBhLmdldEF0dHJpYnV0ZSgic3R5bGUiKSApLAorCisJCS8vIE1ha2Ugc3VyZSB0
aGF0IFVSTHMgYXJlbid0IG1hbmlwdWxhdGVkCisJCS8vIChJRSBub3JtYWxpemVzIGl0IGJ5IGRl
ZmF1bHQpCisJCWhyZWZOb3JtYWxpemVkOiBhLmdldEF0dHJpYnV0ZSgiaHJlZiIpID09PSAiL2Ei
LAorCisJCS8vIE1ha2Ugc3VyZSB0aGF0IGVsZW1lbnQgb3BhY2l0eSBleGlzdHMKKwkJLy8gKElF
IHVzZXMgZmlsdGVyIGluc3RlYWQpCisJCS8vIFVzZSBhIHJlZ2V4IHRvIHdvcmsgYXJvdW5kIGEg
V2ViS2l0IGlzc3VlLiBTZWUgIzUxNDUKKwkJb3BhY2l0eTogL14wLjU1JC8udGVzdCggYS5zdHls
ZS5vcGFjaXR5ICksCisKKwkJLy8gVmVyaWZ5IHN0eWxlIGZsb2F0IGV4aXN0ZW5jZQorCQkvLyAo
SUUgdXNlcyBzdHlsZUZsb2F0IGluc3RlYWQgb2YgY3NzRmxvYXQpCisJCWNzc0Zsb2F0OiAhIWEu
c3R5bGUuY3NzRmxvYXQsCisKKwkJLy8gTWFrZSBzdXJlIHRoYXQgaWYgbm8gdmFsdWUgaXMgc3Bl
Y2lmaWVkIGZvciBhIGNoZWNrYm94CisJCS8vIHRoYXQgaXQgZGVmYXVsdHMgdG8gIm9uIi4KKwkJ
Ly8gKFdlYktpdCBkZWZhdWx0cyB0byAiIiBpbnN0ZWFkKQorCQljaGVja09uOiBpbnB1dC52YWx1
ZSA9PT0gIm9uIiwKKworCQkvLyBNYWtlIHN1cmUgdGhhdCBhIHNlbGVjdGVkLWJ5LWRlZmF1bHQg
b3B0aW9uIGhhcyBhIHdvcmtpbmcgc2VsZWN0ZWQgcHJvcGVydHkuCisJCS8vIChXZWJLaXQgZGVm
YXVsdHMgdG8gZmFsc2UgaW5zdGVhZCBvZiB0cnVlLCBJRSB0b28sIGlmIGl0J3MgaW4gYW4gb3B0
Z3JvdXApCisJCW9wdFNlbGVjdGVkOiBvcHQuc2VsZWN0ZWQsCisKKwkJLy8gV2lsbCBiZSBkZWZp
bmVkIGxhdGVyCisJCWRlbGV0ZUV4cGFuZG86IHRydWUsCisJCW9wdERpc2FibGVkOiBmYWxzZSwK
KwkJY2hlY2tDbG9uZTogZmFsc2UsCisJCW5vQ2xvbmVFdmVudDogdHJ1ZSwKKwkJbm9DbG9uZUNo
ZWNrZWQ6IHRydWUsCisJCWJveE1vZGVsOiBudWxsLAorCQlpbmxpbmVCbG9ja05lZWRzTGF5b3V0
OiBmYWxzZSwKKwkJc2hyaW5rV3JhcEJsb2NrczogZmFsc2UsCisJCXJlbGlhYmxlSGlkZGVuT2Zm
c2V0czogdHJ1ZQorCX07CisKKwlpbnB1dC5jaGVja2VkID0gdHJ1ZTsKKwlqUXVlcnkuc3VwcG9y
dC5ub0Nsb25lQ2hlY2tlZCA9IGlucHV0LmNsb25lTm9kZSggdHJ1ZSApLmNoZWNrZWQ7CisKKwkv
LyBNYWtlIHN1cmUgdGhhdCB0aGUgb3B0aW9ucyBpbnNpZGUgZGlzYWJsZWQgc2VsZWN0cyBhcmVu
J3QgbWFya2VkIGFzIGRpc2FibGVkCisJLy8gKFdlYktpdCBtYXJrcyB0aGVtIGFzIGRpYWJsZWQp
CisJc2VsZWN0LmRpc2FibGVkID0gdHJ1ZTsKKwlqUXVlcnkuc3VwcG9ydC5vcHREaXNhYmxlZCA9
ICFvcHQuZGlzYWJsZWQ7CisKKwl2YXIgX3NjcmlwdEV2YWwgPSBudWxsOworCWpRdWVyeS5zdXBw
b3J0LnNjcmlwdEV2YWwgPSBmdW5jdGlvbigpIHsKKwkJaWYgKCBfc2NyaXB0RXZhbCA9PT0gbnVs
bCApIHsKKwkJCXZhciByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LAorCQkJCXNjcmlw
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLAorCQkJCWlkID0gInNjcmlwdCIg
KyBqUXVlcnkubm93KCk7CisKKwkJCXRyeSB7CisJCQkJc2NyaXB0LmFwcGVuZENoaWxkKCBkb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZSggIndpbmRvdy4iICsgaWQgKyAiPTE7IiApICk7CisJCQl9IGNh
dGNoKGUpIHt9CisKKwkJCXJvb3QuaW5zZXJ0QmVmb3JlKCBzY3JpcHQsIHJvb3QuZmlyc3RDaGls
ZCApOworCisJCQkvLyBNYWtlIHN1cmUgdGhhdCB0aGUgZXhlY3V0aW9uIG9mIGNvZGUgd29ya3Mg
YnkgaW5qZWN0aW5nIGEgc2NyaXB0CisJCQkvLyB0YWcgd2l0aCBhcHBlbmRDaGlsZC9jcmVhdGVU
ZXh0Tm9kZQorCQkJLy8gKElFIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzLCBmYWlscywgYW5kIHVzZXMg
LnRleHQgaW5zdGVhZCkKKwkJCWlmICggd2luZG93WyBpZCBdICkgeworCQkJCV9zY3JpcHRFdmFs
ID0gdHJ1ZTsKKwkJCQlkZWxldGUgd2luZG93WyBpZCBdOworCQkJfSBlbHNlIHsKKwkJCQlfc2Ny
aXB0RXZhbCA9IGZhbHNlOworCQkJfQorCisJCQlyb290LnJlbW92ZUNoaWxkKCBzY3JpcHQgKTsK
KwkJCS8vIHJlbGVhc2UgbWVtb3J5IGluIElFCisJCQlyb290ID0gc2NyaXB0ID0gaWQgID0gbnVs
bDsKKwkJfQorCisJCXJldHVybiBfc2NyaXB0RXZhbDsKKwl9OworCisJLy8gVGVzdCB0byBzZWUg
aWYgaXQncyBwb3NzaWJsZSB0byBkZWxldGUgYW4gZXhwYW5kbyBmcm9tIGFuIGVsZW1lbnQKKwkv
LyBGYWlscyBpbiBJbnRlcm5ldCBFeHBsb3JlcgorCXRyeSB7CisJCWRlbGV0ZSBkaXYudGVzdDsK
KworCX0gY2F0Y2goZSkgeworCQlqUXVlcnkuc3VwcG9ydC5kZWxldGVFeHBhbmRvID0gZmFsc2U7
CisJfQorCisJaWYgKCAhZGl2LmFkZEV2ZW50TGlzdGVuZXIgJiYgZGl2LmF0dGFjaEV2ZW50ICYm
IGRpdi5maXJlRXZlbnQgKSB7CisJCWRpdi5hdHRhY2hFdmVudCgib25jbGljayIsIGZ1bmN0aW9u
IGNsaWNrKCkgeworCQkJLy8gQ2xvbmluZyBhIG5vZGUgc2hvdWxkbid0IGNvcHkgb3ZlciBhbnkK
KwkJCS8vIGJvdW5kIGV2ZW50IGhhbmRsZXJzIChJRSBkb2VzIHRoaXMpCisJCQlqUXVlcnkuc3Vw
cG9ydC5ub0Nsb25lRXZlbnQgPSBmYWxzZTsKKwkJCWRpdi5kZXRhY2hFdmVudCgib25jbGljayIs
IGNsaWNrKTsKKwkJfSk7CisJCWRpdi5jbG9uZU5vZGUodHJ1ZSkuZmlyZUV2ZW50KCJvbmNsaWNr
Iik7CisJfQorCisJZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisJZGl2Lmlu
bmVySFRNTCA9ICI8aW5wdXQgdHlwZT0ncmFkaW8nIG5hbWU9J3JhZGlvdGVzdCcgY2hlY2tlZD0n
Y2hlY2tlZCcvPiI7CisKKwl2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZy
YWdtZW50KCk7CisJZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRpdi5maXJzdENoaWxkICk7CisKKwkv
LyBXZWJLaXQgZG9lc24ndCBjbG9uZSBjaGVja2VkIHN0YXRlIGNvcnJlY3RseSBpbiBmcmFnbWVu
dHMKKwlqUXVlcnkuc3VwcG9ydC5jaGVja0Nsb25lID0gZnJhZ21lbnQuY2xvbmVOb2RlKHRydWUp
LmNsb25lTm9kZSh0cnVlKS5sYXN0Q2hpbGQuY2hlY2tlZDsKKworCS8vIEZpZ3VyZSBvdXQgaWYg
dGhlIFczQyBib3ggbW9kZWwgd29ya3MgYXMgZXhwZWN0ZWQKKwkvLyBkb2N1bWVudC5ib2R5IG11
c3QgZXhpc3QgYmVmb3JlIHdlIGNhbiBkbyB0aGlzCisJalF1ZXJ5KGZ1bmN0aW9uKCkgeworCQl2
YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksCisJCQlib2R5ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTsKKworCQkvLyBGcmFtZXNldCBkb2N1
bWVudHMgd2l0aCBubyBib2R5IHNob3VsZCBub3QgcnVuIHRoaXMgY29kZQorCQlpZiAoICFib2R5
ICkgeworCQkJcmV0dXJuOworCQl9CisKKwkJZGl2LnN0eWxlLndpZHRoID0gZGl2LnN0eWxlLnBh
ZGRpbmdMZWZ0ID0gIjFweCI7CisJCWJvZHkuYXBwZW5kQ2hpbGQoIGRpdiApOworCQlqUXVlcnku
Ym94TW9kZWwgPSBqUXVlcnkuc3VwcG9ydC5ib3hNb2RlbCA9IGRpdi5vZmZzZXRXaWR0aCA9PT0g
MjsKKworCQlpZiAoICJ6b29tIiBpbiBkaXYuc3R5bGUgKSB7CisJCQkvLyBDaGVjayBpZiBuYXRp
dmVseSBibG9jay1sZXZlbCBlbGVtZW50cyBhY3QgbGlrZSBpbmxpbmUtYmxvY2sKKwkJCS8vIGVs
ZW1lbnRzIHdoZW4gc2V0dGluZyB0aGVpciBkaXNwbGF5IHRvICdpbmxpbmUnIGFuZCBnaXZpbmcK
KwkJCS8vIHRoZW0gbGF5b3V0CisJCQkvLyAoSUUgPCA4IGRvZXMgdGhpcykKKwkJCWRpdi5zdHls
ZS5kaXNwbGF5ID0gImlubGluZSI7CisJCQlkaXYuc3R5bGUuem9vbSA9IDE7CisJCQlqUXVlcnku
c3VwcG9ydC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0ID0gZGl2Lm9mZnNldFdpZHRoID09PSAyOwor
CisJCQkvLyBDaGVjayBpZiBlbGVtZW50cyB3aXRoIGxheW91dCBzaHJpbmstd3JhcCB0aGVpciBj
aGlsZHJlbgorCQkJLy8gKElFIDYgZG9lcyB0aGlzKQorCQkJZGl2LnN0eWxlLmRpc3BsYXkgPSAi
IjsKKwkJCWRpdi5pbm5lckhUTUwgPSAiPGRpdiBzdHlsZT0nd2lkdGg6NHB4Oyc+PC9kaXY+IjsK
KwkJCWpRdWVyeS5zdXBwb3J0LnNocmlua1dyYXBCbG9ja3MgPSBkaXYub2Zmc2V0V2lkdGggIT09
IDI7CisJCX0KKworCQlkaXYuaW5uZXJIVE1MID0gIjx0YWJsZT48dHI+PHRkIHN0eWxlPSdwYWRk
aW5nOjA7Ym9yZGVyOjA7ZGlzcGxheTpub25lJz48L3RkPjx0ZD50PC90ZD48L3RyPjwvdGFibGU+
IjsKKwkJdmFyIHRkcyA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKKworCQkvLyBD
aGVjayBpZiB0YWJsZSBjZWxscyBzdGlsbCBoYXZlIG9mZnNldFdpZHRoL0hlaWdodCB3aGVuIHRo
ZXkgYXJlIHNldAorCQkvLyB0byBkaXNwbGF5Om5vbmUgYW5kIHRoZXJlIGFyZSBzdGlsbCBvdGhl
ciB2aXNpYmxlIHRhYmxlIGNlbGxzIGluIGEKKwkJLy8gdGFibGUgcm93OyBpZiBzbywgb2Zmc2V0
V2lkdGgvSGVpZ2h0IGFyZSBub3QgcmVsaWFibGUgZm9yIHVzZSB3aGVuCisJCS8vIGRldGVybWlu
aW5nIGlmIGFuIGVsZW1lbnQgaGFzIGJlZW4gaGlkZGVuIGRpcmVjdGx5IHVzaW5nCisJCS8vIGRp
c3BsYXk6bm9uZSAoaXQgaXMgc3RpbGwgc2FmZSB0byB1c2Ugb2Zmc2V0cyBpZiBhIHBhcmVudCBl
bGVtZW50IGlzCisJCS8vIGhpZGRlbjsgZG9uIHNhZmV0eSBnb2dnbGVzIGFuZCBzZWUgYnVnICM0
NTEyIGZvciBtb3JlIGluZm9ybWF0aW9uKS4KKwkJLy8gKG9ubHkgSUUgOCBmYWlscyB0aGlzIHRl
c3QpCisJCWpRdWVyeS5zdXBwb3J0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cyA9IHRkc1swXS5vZmZz
ZXRIZWlnaHQgPT09IDA7CisKKwkJdGRzWzBdLnN0eWxlLmRpc3BsYXkgPSAiIjsKKwkJdGRzWzFd
LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisKKwkJLy8gQ2hlY2sgaWYgZW1wdHkgdGFibGUgY2Vs
bHMgc3RpbGwgaGF2ZSBvZmZzZXRXaWR0aC9IZWlnaHQKKwkJLy8gKElFIDwgOCBmYWlsIHRoaXMg
dGVzdCkKKwkJalF1ZXJ5LnN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZzZXRzID0galF1ZXJ5LnN1
cHBvcnQucmVsaWFibGVIaWRkZW5PZmZzZXRzICYmIHRkc1swXS5vZmZzZXRIZWlnaHQgPT09IDA7
CisJCWRpdi5pbm5lckhUTUwgPSAiIjsKKworCQlib2R5LnJlbW92ZUNoaWxkKCBkaXYgKS5zdHls
ZS5kaXNwbGF5ID0gIm5vbmUiOworCQlkaXYgPSB0ZHMgPSBudWxsOworCX0pOworCisJLy8gVGVj
aG5pcXVlIGZyb20gSnVyaXkgWmF5dHNldgorCS8vIGh0dHA6Ly90aGlua3dlYjIuY29tL3Byb2pl
Y3RzL3Byb3RvdHlwZS9kZXRlY3RpbmctZXZlbnQtc3VwcG9ydC13aXRob3V0LWJyb3dzZXItc25p
ZmZpbmcvCisJdmFyIGV2ZW50U3VwcG9ydGVkID0gZnVuY3Rpb24oIGV2ZW50TmFtZSApIHsKKwkJ
dmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisJCWV2ZW50TmFtZSA9ICJv
biIgKyBldmVudE5hbWU7CisKKwkJLy8gV2Ugb25seSBjYXJlIGFib3V0IHRoZSBjYXNlIHdoZXJl
IG5vbi1zdGFuZGFyZCBldmVudCBzeXN0ZW1zCisJCS8vIGFyZSB1c2VkLCBuYW1lbHkgaW4gSUUu
IFNob3J0LWNpcmN1aXRpbmcgaGVyZSBoZWxwcyB1cyB0bworCQkvLyBhdm9pZCBhbiBldmFsIGNh
bGwgKGluIHNldEF0dHJpYnV0ZSkgd2hpY2ggY2FuIGNhdXNlIENTUAorCQkvLyB0byBnbyBoYXl3
aXJlLiBTZWU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL1NlY3VyaXR5L0NTUAor
CQlpZiAoICFlbC5hdHRhY2hFdmVudCApIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisKKwkJdmFy
IGlzU3VwcG9ydGVkID0gKGV2ZW50TmFtZSBpbiBlbCk7CisJCWlmICggIWlzU3VwcG9ydGVkICkg
eworCQkJZWwuc2V0QXR0cmlidXRlKGV2ZW50TmFtZSwgInJldHVybjsiKTsKKwkJCWlzU3VwcG9y
dGVkID0gdHlwZW9mIGVsW2V2ZW50TmFtZV0gPT09ICJmdW5jdGlvbiI7CisJCX0KKwkJZWwgPSBu
dWxsOworCisJCXJldHVybiBpc1N1cHBvcnRlZDsKKwl9OworCisJalF1ZXJ5LnN1cHBvcnQuc3Vi
bWl0QnViYmxlcyA9IGV2ZW50U3VwcG9ydGVkKCJzdWJtaXQiKTsKKwlqUXVlcnkuc3VwcG9ydC5j
aGFuZ2VCdWJibGVzID0gZXZlbnRTdXBwb3J0ZWQoImNoYW5nZSIpOworCisJLy8gcmVsZWFzZSBt
ZW1vcnkgaW4gSUUKKwlkaXYgPSBhbGwgPSBhID0gbnVsbDsKK30pKCk7Cit9KSggalF1ZXJ5ICk7
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3NyYy9z
dXBwb3J0LmpzCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB5ZXMKCkluZGV4OiBM
YXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3NyYy90cmF2ZXJzaW5nLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvc3JjL3RyYXZlcnNpbmcuanMJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3NyYy90cmF2ZXJzaW5nLmpz
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxMSBAQAorKGZ1bmN0aW9uKCBqUXVlcnkgKSB7CisK
K3ZhciBydW50aWwgPSAvVW50aWwkLywKKwlycGFyZW50c3ByZXYgPSAvXig/OnBhcmVudHN8cHJl
dlVudGlsfHByZXZBbGwpLywKKwkvLyBOb3RlOiBUaGlzIFJlZ0V4cCBzaG91bGQgYmUgaW1wcm92
ZWQsIG9yIGxpa2VseSBwdWxsZWQgZnJvbSBTaXp6bGUKKwlybXVsdGlzZWxlY3RvciA9IC8sLywK
Kwlpc1NpbXBsZSA9IC9eLlteOiNcW1wuLF0qJC8sCisJc2xpY2UgPSBBcnJheS5wcm90b3R5cGUu
c2xpY2UsCisJUE9TID0galF1ZXJ5LmV4cHIubWF0Y2guUE9TLAorCS8vIG1ldGhvZHMgZ3VhcmFu
dGVlZCB0byBwcm9kdWNlIGEgdW5pcXVlIHNldCB3aGVuIHN0YXJ0aW5nIGZyb20gYSB1bmlxdWUg
c2V0CisJZ3VhcmFudGVlZFVuaXF1ZSA9IHsKKwkJY2hpbGRyZW46IHRydWUsCisJCWNvbnRlbnRz
OiB0cnVlLAorCQluZXh0OiB0cnVlLAorCQlwcmV2OiB0cnVlCisJfTsKKworalF1ZXJ5LmZuLmV4
dGVuZCh7CisJZmluZDogZnVuY3Rpb24oIHNlbGVjdG9yICkgeworCQl2YXIgcmV0ID0gdGhpcy5w
dXNoU3RhY2soICIiLCAiZmluZCIsIHNlbGVjdG9yICksCisJCQlsZW5ndGggPSAwOworCisJCWZv
ciAoIHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrICkgeworCQkJbGVuZ3Ro
ID0gcmV0Lmxlbmd0aDsKKwkJCWpRdWVyeS5maW5kKCBzZWxlY3RvciwgdGhpc1tpXSwgcmV0ICk7
CisKKwkJCWlmICggaSA+IDAgKSB7CisJCQkJLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc3VsdHMg
YXJlIHVuaXF1ZQorCQkJCWZvciAoIHZhciBuID0gbGVuZ3RoOyBuIDwgcmV0Lmxlbmd0aDsgbisr
ICkgeworCQkJCQlmb3IgKCB2YXIgciA9IDA7IHIgPCBsZW5ndGg7IHIrKyApIHsKKwkJCQkJCWlm
ICggcmV0W3JdID09PSByZXRbbl0gKSB7CisJCQkJCQkJcmV0LnNwbGljZShuLS0sIDEpOworCQkJ
CQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisKKwkJcmV0dXJu
IHJldDsKKwl9LAorCisJaGFzOiBmdW5jdGlvbiggdGFyZ2V0ICkgeworCQl2YXIgdGFyZ2V0cyA9
IGpRdWVyeSggdGFyZ2V0ICk7CisJCXJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpIHsKKwkJ
CWZvciAoIHZhciBpID0gMCwgbCA9IHRhcmdldHMubGVuZ3RoOyBpIDwgbDsgaSsrICkgeworCQkJ
CWlmICggalF1ZXJ5LmNvbnRhaW5zKCB0aGlzLCB0YXJnZXRzW2ldICkgKSB7CisJCQkJCXJldHVy
biB0cnVlOworCQkJCX0KKwkJCX0KKwkJfSk7CisJfSwKKworCW5vdDogZnVuY3Rpb24oIHNlbGVj
dG9yICkgeworCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyh0aGlzLCBzZWxlY3Rvciwg
ZmFsc2UpLCAibm90Iiwgc2VsZWN0b3IpOworCX0sCisKKwlmaWx0ZXI6IGZ1bmN0aW9uKCBzZWxl
Y3RvciApIHsKKwkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3codGhpcywgc2VsZWN0b3Is
IHRydWUpLCAiZmlsdGVyIiwgc2VsZWN0b3IgKTsKKwl9LAorCisJaXM6IGZ1bmN0aW9uKCBzZWxl
Y3RvciApIHsKKwkJcmV0dXJuICEhc2VsZWN0b3IgJiYgalF1ZXJ5LmZpbHRlciggc2VsZWN0b3Is
IHRoaXMgKS5sZW5ndGggPiAwOworCX0sCisKKwljbG9zZXN0OiBmdW5jdGlvbiggc2VsZWN0b3Jz
LCBjb250ZXh0ICkgeworCQl2YXIgcmV0ID0gW10sIGksIGwsIGN1ciA9IHRoaXNbMF07CisKKwkJ
aWYgKCBqUXVlcnkuaXNBcnJheSggc2VsZWN0b3JzICkgKSB7CisJCQl2YXIgbWF0Y2gsIHNlbGVj
dG9yLAorCQkJCW1hdGNoZXMgPSB7fSwKKwkJCQlsZXZlbCA9IDE7CisKKwkJCWlmICggY3VyICYm
IHNlbGVjdG9ycy5sZW5ndGggKSB7CisJCQkJZm9yICggaSA9IDAsIGwgPSBzZWxlY3RvcnMubGVu
Z3RoOyBpIDwgbDsgaSsrICkgeworCQkJCQlzZWxlY3RvciA9IHNlbGVjdG9yc1tpXTsKKworCQkJ
CQlpZiAoICFtYXRjaGVzW3NlbGVjdG9yXSApIHsKKwkJCQkJCW1hdGNoZXNbc2VsZWN0b3JdID0g
alF1ZXJ5LmV4cHIubWF0Y2guUE9TLnRlc3QoIHNlbGVjdG9yICkgPworCQkJCQkJCWpRdWVyeSgg
c2VsZWN0b3IsIGNvbnRleHQgfHwgdGhpcy5jb250ZXh0ICkgOgorCQkJCQkJCXNlbGVjdG9yOwor
CQkJCQl9CisJCQkJfQorCisJCQkJd2hpbGUgKCBjdXIgJiYgY3VyLm93bmVyRG9jdW1lbnQgJiYg
Y3VyICE9PSBjb250ZXh0ICkgeworCQkJCQlmb3IgKCBzZWxlY3RvciBpbiBtYXRjaGVzICkgewor
CQkJCQkJbWF0Y2ggPSBtYXRjaGVzW3NlbGVjdG9yXTsKKworCQkJCQkJaWYgKCBtYXRjaC5qcXVl
cnkgPyBtYXRjaC5pbmRleChjdXIpID4gLTEgOiBqUXVlcnkoY3VyKS5pcyhtYXRjaCkgKSB7CisJ
CQkJCQkJcmV0LnB1c2goeyBzZWxlY3Rvcjogc2VsZWN0b3IsIGVsZW06IGN1ciwgbGV2ZWw6IGxl
dmVsIH0pOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJY3VyID0gY3VyLnBhcmVudE5vZGU7CisJ
CQkJCWxldmVsKys7CisJCQkJfQorCQkJfQorCisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJdmFy
IHBvcyA9IFBPUy50ZXN0KCBzZWxlY3RvcnMgKSA/CisJCQlqUXVlcnkoIHNlbGVjdG9ycywgY29u
dGV4dCB8fCB0aGlzLmNvbnRleHQgKSA6IG51bGw7CisKKwkJZm9yICggaSA9IDAsIGwgPSB0aGlz
Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKKwkJCWN1ciA9IHRoaXNbaV07CisKKwkJCXdoaWxlICgg
Y3VyICkgeworCQkJCWlmICggcG9zID8gcG9zLmluZGV4KGN1cikgPiAtMSA6IGpRdWVyeS5maW5k
Lm1hdGNoZXNTZWxlY3RvcihjdXIsIHNlbGVjdG9ycykgKSB7CisJCQkJCXJldC5wdXNoKCBjdXIg
KTsKKwkJCQkJYnJlYWs7CisKKwkJCQl9IGVsc2UgeworCQkJCQljdXIgPSBjdXIucGFyZW50Tm9k
ZTsKKwkJCQkJaWYgKCAhY3VyIHx8ICFjdXIub3duZXJEb2N1bWVudCB8fCBjdXIgPT09IGNvbnRl
eHQgKSB7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCisJCXJldCA9
IHJldC5sZW5ndGggPiAxID8galF1ZXJ5LnVuaXF1ZShyZXQpIDogcmV0OworCisJCXJldHVybiB0
aGlzLnB1c2hTdGFjayggcmV0LCAiY2xvc2VzdCIsIHNlbGVjdG9ycyApOworCX0sCisKKwkvLyBE
ZXRlcm1pbmUgdGhlIHBvc2l0aW9uIG9mIGFuIGVsZW1lbnQgd2l0aGluCisJLy8gdGhlIG1hdGNo
ZWQgc2V0IG9mIGVsZW1lbnRzCisJaW5kZXg6IGZ1bmN0aW9uKCBlbGVtICkgeworCQlpZiAoICFl
bGVtIHx8IHR5cGVvZiBlbGVtID09PSAic3RyaW5nIiApIHsKKwkJCXJldHVybiBqUXVlcnkuaW5B
cnJheSggdGhpc1swXSwKKwkJCQkvLyBJZiBpdCByZWNlaXZlcyBhIHN0cmluZywgdGhlIHNlbGVj
dG9yIGlzIHVzZWQKKwkJCQkvLyBJZiBpdCByZWNlaXZlcyBub3RoaW5nLCB0aGUgc2libGluZ3Mg
YXJlIHVzZWQKKwkJCQllbGVtID8galF1ZXJ5KCBlbGVtICkgOiB0aGlzLnBhcmVudCgpLmNoaWxk
cmVuKCkgKTsKKwkJfQorCQkvLyBMb2NhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkZXNpcmVkIGVs
ZW1lbnQKKwkJcmV0dXJuIGpRdWVyeS5pbkFycmF5KAorCQkJLy8gSWYgaXQgcmVjZWl2ZXMgYSBq
UXVlcnkgb2JqZWN0LCB0aGUgZmlyc3QgZWxlbWVudCBpcyB1c2VkCisJCQllbGVtLmpxdWVyeSA/
IGVsZW1bMF0gOiBlbGVtLCB0aGlzICk7CisJfSwKKworCWFkZDogZnVuY3Rpb24oIHNlbGVjdG9y
LCBjb250ZXh0ICkgeworCQl2YXIgc2V0ID0gdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiA/
CisJCQkJalF1ZXJ5KCBzZWxlY3RvciwgY29udGV4dCApIDoKKwkJCQlqUXVlcnkubWFrZUFycmF5
KCBzZWxlY3RvciApLAorCQkJYWxsID0galF1ZXJ5Lm1lcmdlKCB0aGlzLmdldCgpLCBzZXQgKTsK
KworCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGlzRGlzY29ubmVjdGVkKCBzZXRbMF0gKSB8fCBp
c0Rpc2Nvbm5lY3RlZCggYWxsWzBdICkgPworCQkJYWxsIDoKKwkJCWpRdWVyeS51bmlxdWUoIGFs
bCApICk7CisJfSwKKworCWFuZFNlbGY6IGZ1bmN0aW9uKCkgeworCQlyZXR1cm4gdGhpcy5hZGQo
IHRoaXMucHJldk9iamVjdCApOworCX0KK30pOworCisvLyBBIHBhaW5mdWxseSBzaW1wbGUgY2hl
Y2sgdG8gc2VlIGlmIGFuIGVsZW1lbnQgaXMgZGlzY29ubmVjdGVkCisvLyBmcm9tIGEgZG9jdW1l
bnQgKHNob3VsZCBiZSBpbXByb3ZlZCwgd2hlcmUgZmVhc2libGUpLgorZnVuY3Rpb24gaXNEaXNj
b25uZWN0ZWQoIG5vZGUgKSB7CisJcmV0dXJuICFub2RlIHx8ICFub2RlLnBhcmVudE5vZGUgfHwg
bm9kZS5wYXJlbnROb2RlLm5vZGVUeXBlID09PSAxMTsKK30KKworalF1ZXJ5LmVhY2goeworCXBh
cmVudDogZnVuY3Rpb24oIGVsZW0gKSB7CisJCXZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7
CisJCXJldHVybiBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlICE9PSAxMSA/IHBhcmVudCA6IG51
bGw7CisJfSwKKwlwYXJlbnRzOiBmdW5jdGlvbiggZWxlbSApIHsKKwkJcmV0dXJuIGpRdWVyeS5k
aXIoIGVsZW0sICJwYXJlbnROb2RlIiApOworCX0sCisJcGFyZW50c1VudGlsOiBmdW5jdGlvbigg
ZWxlbSwgaSwgdW50aWwgKSB7CisJCXJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAicGFyZW50Tm9k
ZSIsIHVudGlsICk7CisJfSwKKwluZXh0OiBmdW5jdGlvbiggZWxlbSApIHsKKwkJcmV0dXJuIGpR
dWVyeS5udGgoIGVsZW0sIDIsICJuZXh0U2libGluZyIgKTsKKwl9LAorCXByZXY6IGZ1bmN0aW9u
KCBlbGVtICkgeworCQlyZXR1cm4galF1ZXJ5Lm50aCggZWxlbSwgMiwgInByZXZpb3VzU2libGlu
ZyIgKTsKKwl9LAorCW5leHRBbGw6IGZ1bmN0aW9uKCBlbGVtICkgeworCQlyZXR1cm4galF1ZXJ5
LmRpciggZWxlbSwgIm5leHRTaWJsaW5nIiApOworCX0sCisJcHJldkFsbDogZnVuY3Rpb24oIGVs
ZW0gKSB7CisJCXJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAicHJldmlvdXNTaWJsaW5nIiApOwor
CX0sCisJbmV4dFVudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7CisJCXJldHVybiBq
UXVlcnkuZGlyKCBlbGVtLCAibmV4dFNpYmxpbmciLCB1bnRpbCApOworCX0sCisJcHJldlVudGls
OiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7CisJCXJldHVybiBqUXVlcnkuZGlyKCBlbGVt
LCAicHJldmlvdXNTaWJsaW5nIiwgdW50aWwgKTsKKwl9LAorCXNpYmxpbmdzOiBmdW5jdGlvbigg
ZWxlbSApIHsKKwkJcmV0dXJuIGpRdWVyeS5zaWJsaW5nKCBlbGVtLnBhcmVudE5vZGUuZmlyc3RD
aGlsZCwgZWxlbSApOworCX0sCisJY2hpbGRyZW46IGZ1bmN0aW9uKCBlbGVtICkgeworCQlyZXR1
cm4galF1ZXJ5LnNpYmxpbmcoIGVsZW0uZmlyc3RDaGlsZCApOworCX0sCisJY29udGVudHM6IGZ1
bmN0aW9uKCBlbGVtICkgeworCQlyZXR1cm4galF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiaWZyYW1l
IiApID8KKwkJCWVsZW0uY29udGVudERvY3VtZW50IHx8IGVsZW0uY29udGVudFdpbmRvdy5kb2N1
bWVudCA6CisJCQlqUXVlcnkubWFrZUFycmF5KCBlbGVtLmNoaWxkTm9kZXMgKTsKKwl9Cit9LCBm
dW5jdGlvbiggbmFtZSwgZm4gKSB7CisJalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggdW50
aWwsIHNlbGVjdG9yICkgeworCQl2YXIgcmV0ID0galF1ZXJ5Lm1hcCggdGhpcywgZm4sIHVudGls
ICksCisJCQkvLyBUaGUgdmFyaWFibGUgJ2FyZ3MnIHdhcyBpbnRyb2R1Y2VkIGluCisJCQkvLyBo
dHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9jb21taXQvNTJhMDIzOAorCQkJLy8gdG8g
d29yayBhcm91bmQgYSBidWcgaW4gQ2hyb21lIDEwIChEZXYpIGFuZCBzaG91bGQgYmUgcmVtb3Zl
ZCB3aGVuIHRoZSBidWcgaXMgZml4ZWQuCisJCQkvLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3Av
djgvaXNzdWVzL2RldGFpbD9pZD0xMDUwCisJCQlhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMp
OworCisJCWlmICggIXJ1bnRpbC50ZXN0KCBuYW1lICkgKSB7CisJCQlzZWxlY3RvciA9IHVudGls
OworCQl9CisKKwkJaWYgKCBzZWxlY3RvciAmJiB0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmci
ICkgeworCQkJcmV0ID0galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIHJldCApOworCQl9CisKKwkJ
cmV0ID0gdGhpcy5sZW5ndGggPiAxICYmICFndWFyYW50ZWVkVW5pcXVlWyBuYW1lIF0gPyBqUXVl
cnkudW5pcXVlKCByZXQgKSA6IHJldDsKKworCQlpZiAoICh0aGlzLmxlbmd0aCA+IDEgfHwgcm11
bHRpc2VsZWN0b3IudGVzdCggc2VsZWN0b3IgKSkgJiYgcnBhcmVudHNwcmV2LnRlc3QoIG5hbWUg
KSApIHsKKwkJCXJldCA9IHJldC5yZXZlcnNlKCk7CisJCX0KKworCQlyZXR1cm4gdGhpcy5wdXNo
U3RhY2soIHJldCwgbmFtZSwgYXJncy5qb2luKCIsIikgKTsKKwl9OworfSk7CisKK2pRdWVyeS5l
eHRlbmQoeworCWZpbHRlcjogZnVuY3Rpb24oIGV4cHIsIGVsZW1zLCBub3QgKSB7CisJCWlmICgg
bm90ICkgeworCQkJZXhwciA9ICI6bm90KCIgKyBleHByICsgIikiOworCQl9CisKKwkJcmV0dXJu
IGVsZW1zLmxlbmd0aCA9PT0gMSA/CisJCQlqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoZWxl
bXNbMF0sIGV4cHIpID8gWyBlbGVtc1swXSBdIDogW10gOgorCQkJalF1ZXJ5LmZpbmQubWF0Y2hl
cyhleHByLCBlbGVtcyk7CisJfSwKKworCWRpcjogZnVuY3Rpb24oIGVsZW0sIGRpciwgdW50aWwg
KSB7CisJCXZhciBtYXRjaGVkID0gW10sCisJCQljdXIgPSBlbGVtWyBkaXIgXTsKKworCQl3aGls
ZSAoIGN1ciAmJiBjdXIubm9kZVR5cGUgIT09IDkgJiYgKHVudGlsID09PSB1bmRlZmluZWQgfHwg
Y3VyLm5vZGVUeXBlICE9PSAxIHx8ICFqUXVlcnkoIGN1ciApLmlzKCB1bnRpbCApKSApIHsKKwkJ
CWlmICggY3VyLm5vZGVUeXBlID09PSAxICkgeworCQkJCW1hdGNoZWQucHVzaCggY3VyICk7CisJ
CQl9CisJCQljdXIgPSBjdXJbZGlyXTsKKwkJfQorCQlyZXR1cm4gbWF0Y2hlZDsKKwl9LAorCisJ
bnRoOiBmdW5jdGlvbiggY3VyLCByZXN1bHQsIGRpciwgZWxlbSApIHsKKwkJcmVzdWx0ID0gcmVz
dWx0IHx8IDE7CisJCXZhciBudW0gPSAwOworCisJCWZvciAoIDsgY3VyOyBjdXIgPSBjdXJbZGly
XSApIHsKKwkJCWlmICggY3VyLm5vZGVUeXBlID09PSAxICYmICsrbnVtID09PSByZXN1bHQgKSB7
CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlyZXR1cm4gY3VyOworCX0sCisKKwlzaWJsaW5n
OiBmdW5jdGlvbiggbiwgZWxlbSApIHsKKwkJdmFyIHIgPSBbXTsKKworCQlmb3IgKCA7IG47IG4g
PSBuLm5leHRTaWJsaW5nICkgeworCQkJaWYgKCBuLm5vZGVUeXBlID09PSAxICYmIG4gIT09IGVs
ZW0gKSB7CisJCQkJci5wdXNoKCBuICk7CisJCQl9CisJCX0KKworCQlyZXR1cm4gcjsKKwl9Cit9
KTsKKworLy8gSW1wbGVtZW50IHRoZSBpZGVudGljYWwgZnVuY3Rpb25hbGl0eSBmb3IgZmlsdGVy
IGFuZCBub3QKK2Z1bmN0aW9uIHdpbm5vdyggZWxlbWVudHMsIHF1YWxpZmllciwga2VlcCApIHsK
KwlpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBxdWFsaWZpZXIgKSApIHsKKwkJcmV0dXJuIGpRdWVy
eS5ncmVwKGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHsKKwkJCXZhciByZXRWYWwgPSAh
IXF1YWxpZmllci5jYWxsKCBlbGVtLCBpLCBlbGVtICk7CisJCQlyZXR1cm4gcmV0VmFsID09PSBr
ZWVwOworCQl9KTsKKworCX0gZWxzZSBpZiAoIHF1YWxpZmllci5ub2RlVHlwZSApIHsKKwkJcmV0
dXJuIGpRdWVyeS5ncmVwKGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHsKKwkJCXJldHVy
biAoZWxlbSA9PT0gcXVhbGlmaWVyKSA9PT0ga2VlcDsKKwkJfSk7CisKKwl9IGVsc2UgaWYgKCB0
eXBlb2YgcXVhbGlmaWVyID09PSAic3RyaW5nIiApIHsKKwkJdmFyIGZpbHRlcmVkID0galF1ZXJ5
LmdyZXAoZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkgeworCQkJcmV0dXJuIGVsZW0ubm9kZVR5
cGUgPT09IDE7CisJCX0pOworCisJCWlmICggaXNTaW1wbGUudGVzdCggcXVhbGlmaWVyICkgKSB7
CisJCQlyZXR1cm4galF1ZXJ5LmZpbHRlcihxdWFsaWZpZXIsIGZpbHRlcmVkLCAha2VlcCk7CisJ
CX0gZWxzZSB7CisJCQlxdWFsaWZpZXIgPSBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGZpbHRl
cmVkICk7CisJCX0KKwl9CisKKwlyZXR1cm4galF1ZXJ5LmdyZXAoZWxlbWVudHMsIGZ1bmN0aW9u
KCBlbGVtLCBpICkgeworCQlyZXR1cm4gKGpRdWVyeS5pbkFycmF5KCBlbGVtLCBxdWFsaWZpZXIg
KSA+PSAwKSA9PT0ga2VlcDsKKwl9KTsKK30KKworfSkoIGpRdWVyeSApOwoKUHJvcGVydHkgY2hh
bmdlcyBvbjogTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy9zcmMvdHJhdmVyc2luZy5qcwpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkFkZGVkOiBhbGxvdy10YWJzCiAgICsgeWVzCgpJbmRleDogTGF5b3V0VGVzdHMv
anF1ZXJ5L3Jlc291cmNlcy9zcmMvYWpheC9qc29ucC5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3NyYy9hamF4L2pzb25wLmpzCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy9zcmMvYWpheC9qc29ucC5qcwkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw4MSBAQAorKGZ1bmN0aW9uKCBqUXVlcnkgKSB7CisKK3ZhciBqc2MgPSBq
UXVlcnkubm93KCksCisJanNyZSA9IC8oXD0pXD8oJnwkKXxcP1w/L2k7CisKKy8vIERlZmF1bHQg
anNvbnAgc2V0dGluZ3MKK2pRdWVyeS5hamF4U2V0dXAoeworCWpzb25wOiAiY2FsbGJhY2siLAor
CWpzb25wQ2FsbGJhY2s6IGZ1bmN0aW9uKCkgeworCQlyZXR1cm4galF1ZXJ5LmV4cGFuZG8gKyAi
XyIgKyAoIGpzYysrICk7CisJfQorfSk7CisKKy8vIERldGVjdCwgbm9ybWFsaXplIG9wdGlvbnMg
YW5kIGluc3RhbGwgY2FsbGJhY2tzIGZvciBqc29ucCByZXF1ZXN0cworalF1ZXJ5LmFqYXhQcmVm
aWx0ZXIoICJqc29uIGpzb25wIiwgZnVuY3Rpb24oIHMsIG9yaWdpbmFsU2V0dGluZ3MsIGpxWEhS
ICkgeworCisJdmFyIGRhdGFJc1N0cmluZyA9ICggdHlwZW9mIHMuZGF0YSA9PT0gInN0cmluZyIg
KTsKKworCWlmICggcy5kYXRhVHlwZXNbIDAgXSA9PT0gImpzb25wIiB8fAorCQlvcmlnaW5hbFNl
dHRpbmdzLmpzb25wQ2FsbGJhY2sgfHwKKwkJb3JpZ2luYWxTZXR0aW5ncy5qc29ucCAhPSBudWxs
IHx8CisJCXMuanNvbnAgIT09IGZhbHNlICYmICgganNyZS50ZXN0KCBzLnVybCApIHx8CisJCQkJ
ZGF0YUlzU3RyaW5nICYmIGpzcmUudGVzdCggcy5kYXRhICkgKSApIHsKKworCQl2YXIgcmVzcG9u
c2VDb250YWluZXIsCisJCQlqc29ucENhbGxiYWNrID0gcy5qc29ucENhbGxiYWNrID0KKwkJCQlq
UXVlcnkuaXNGdW5jdGlvbiggcy5qc29ucENhbGxiYWNrICkgPyBzLmpzb25wQ2FsbGJhY2soKSA6
IHMuanNvbnBDYWxsYmFjaywKKwkJCXByZXZpb3VzID0gd2luZG93WyBqc29ucENhbGxiYWNrIF0s
CisJCQl1cmwgPSBzLnVybCwKKwkJCWRhdGEgPSBzLmRhdGEsCisJCQlyZXBsYWNlID0gIiQxIiAr
IGpzb25wQ2FsbGJhY2sgKyAiJDIiLAorCQkJY2xlYW5VcCA9IGZ1bmN0aW9uKCkgeworCQkJCS8v
IFNldCBjYWxsYmFjayBiYWNrIHRvIHByZXZpb3VzIHZhbHVlCisJCQkJd2luZG93WyBqc29ucENh
bGxiYWNrIF0gPSBwcmV2aW91czsKKwkJCQkvLyBDYWxsIGlmIGl0IHdhcyBhIGZ1bmN0aW9uIGFu
ZCB3ZSBoYXZlIGEgcmVzcG9uc2UKKwkJCQlpZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGpRdWVy
eS5pc0Z1bmN0aW9uKCBwcmV2aW91cyApICkgeworCQkJCQl3aW5kb3dbIGpzb25wQ2FsbGJhY2sg
XSggcmVzcG9uc2VDb250YWluZXJbIDAgXSApOworCQkJCX0KKwkJCX07CisKKwkJaWYgKCBzLmpz
b25wICE9PSBmYWxzZSApIHsKKwkJCXVybCA9IHVybC5yZXBsYWNlKCBqc3JlLCByZXBsYWNlICk7
CisJCQlpZiAoIHMudXJsID09PSB1cmwgKSB7CisJCQkJaWYgKCBkYXRhSXNTdHJpbmcgKSB7CisJ
CQkJCWRhdGEgPSBkYXRhLnJlcGxhY2UoIGpzcmUsIHJlcGxhY2UgKTsKKwkJCQl9CisJCQkJaWYg
KCBzLmRhdGEgPT09IGRhdGEgKSB7CisJCQkJCS8vIEFkZCBjYWxsYmFjayBtYW51YWxseQorCQkJ
CQl1cmwgKz0gKC9cPy8udGVzdCggdXJsICkgPyAiJiIgOiAiPyIpICsgcy5qc29ucCArICI9IiAr
IGpzb25wQ2FsbGJhY2s7CisJCQkJfQorCQkJfQorCQl9CisKKwkJcy51cmwgPSB1cmw7CisJCXMu
ZGF0YSA9IGRhdGE7CisKKwkJLy8gSW5zdGFsbCBjYWxsYmFjaworCQl3aW5kb3dbIGpzb25wQ2Fs
bGJhY2sgXSA9IGZ1bmN0aW9uKCByZXNwb25zZSApIHsKKwkJCXJlc3BvbnNlQ29udGFpbmVyID0g
WyByZXNwb25zZSBdOworCQl9OworCisJCS8vIEluc3RhbGwgY2xlYW5VcCBmdW5jdGlvbgorCQlq
cVhIUi50aGVuKCBjbGVhblVwLCBjbGVhblVwICk7CisKKwkJLy8gVXNlIGRhdGEgY29udmVydGVy
IHRvIHJldHJpZXZlIGpzb24gYWZ0ZXIgc2NyaXB0IGV4ZWN1dGlvbgorCQlzLmNvbnZlcnRlcnNb
InNjcmlwdCBqc29uIl0gPSBmdW5jdGlvbigpIHsKKwkJCWlmICggIXJlc3BvbnNlQ29udGFpbmVy
ICkgeworCQkJCWpRdWVyeS5lcnJvcigganNvbnBDYWxsYmFjayArICIgd2FzIG5vdCBjYWxsZWQi
ICk7CisJCQl9CisJCQlyZXR1cm4gcmVzcG9uc2VDb250YWluZXJbIDAgXTsKKwkJfTsKKworCQkv
LyBmb3JjZSBqc29uIGRhdGFUeXBlCisJCXMuZGF0YVR5cGVzWyAwIF0gPSAianNvbiI7CisKKwkJ
Ly8gRGVsZWdhdGUgdG8gc2NyaXB0CisJCXJldHVybiAic2NyaXB0IjsKKwl9Cit9ICk7CisKK30p
KCBqUXVlcnkgKTsKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2pxdWVyeS9yZXNv
dXJjZXMvc3JjL2FqYXgvanNvbnAuanMKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICAr
IHllcwoKSW5kZXg6IExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvc3JjL2FqYXgvc2NyaXB0
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvc3JjL2FqYXgv
c2NyaXB0LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy9z
cmMvYWpheC9zY3JpcHQuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODkgQEAKKyhmdW5jdGlv
biggalF1ZXJ5ICkgeworCisvLyBJbnN0YWxsIHNjcmlwdCBkYXRhVHlwZQoralF1ZXJ5LmFqYXhT
ZXR1cCh7CisJYWNjZXB0czogeworCQlzY3JpcHQ6ICJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0
aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNt
YXNjcmlwdCIKKwl9LAorCWNvbnRlbnRzOiB7CisJCXNjcmlwdDogL2phdmFzY3JpcHR8ZWNtYXNj
cmlwdC8KKwl9LAorCWNvbnZlcnRlcnM6IHsKKwkJInRleHQgc2NyaXB0IjogZnVuY3Rpb24oIHRl
eHQgKSB7CisJCQlqUXVlcnkuZ2xvYmFsRXZhbCggdGV4dCApOworCQkJcmV0dXJuIHRleHQ7CisJ
CX0KKwl9Cit9KTsKKworLy8gSGFuZGxlIGNhY2hlJ3Mgc3BlY2lhbCBjYXNlIGFuZCBnbG9iYWwK
K2pRdWVyeS5hamF4UHJlZmlsdGVyKCAic2NyaXB0IiwgZnVuY3Rpb24oIHMgKSB7CisJaWYgKCBz
LmNhY2hlID09PSB1bmRlZmluZWQgKSB7CisJCXMuY2FjaGUgPSBmYWxzZTsKKwl9CisJaWYgKCBz
LmNyb3NzRG9tYWluICkgeworCQlzLnR5cGUgPSAiR0VUIjsKKwkJcy5nbG9iYWwgPSBmYWxzZTsK
Kwl9Cit9ICk7CisKKy8vIEJpbmQgc2NyaXB0IHRhZyBoYWNrIHRyYW5zcG9ydAoralF1ZXJ5LmFq
YXhUcmFuc3BvcnQoICJzY3JpcHQiLCBmdW5jdGlvbihzKSB7CisKKwkvLyBUaGlzIHRyYW5zcG9y
dCBvbmx5IGRlYWxzIHdpdGggY3Jvc3MgZG9tYWluIHJlcXVlc3RzCisJaWYgKCBzLmNyb3NzRG9t
YWluICkgeworCisJCXZhciBzY3JpcHQsCisJCQloZWFkID0gZG9jdW1lbnQuaGVhZCB8fCBkb2N1
bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSggImhlYWQiIClbMF0gfHwgZG9jdW1lbnQuZG9jdW1l
bnRFbGVtZW50OworCisJCXJldHVybiB7CisKKwkJCXNlbmQ6IGZ1bmN0aW9uKCBfLCBjYWxsYmFj
ayApIHsKKworCQkJCXNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJzY3JpcHQiICk7
CisKKwkJCQlzY3JpcHQuYXN5bmMgPSAiYXN5bmMiOworCisJCQkJaWYgKCBzLnNjcmlwdENoYXJz
ZXQgKSB7CisJCQkJCXNjcmlwdC5jaGFyc2V0ID0gcy5zY3JpcHRDaGFyc2V0OworCQkJCX0KKwor
CQkJCXNjcmlwdC5zcmMgPSBzLnVybDsKKworCQkJCS8vIEF0dGFjaCBoYW5kbGVycyBmb3IgYWxs
IGJyb3dzZXJzCisJCQkJc2NyaXB0Lm9ubG9hZCA9IHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2Ug
PSBmdW5jdGlvbiggXywgaXNBYm9ydCApIHsKKworCQkJCQlpZiAoICFzY3JpcHQucmVhZHlTdGF0
ZSB8fCAvbG9hZGVkfGNvbXBsZXRlLy50ZXN0KCBzY3JpcHQucmVhZHlTdGF0ZSApICkgeworCisJ
CQkJCQkvLyBIYW5kbGUgbWVtb3J5IGxlYWsgaW4gSUUKKwkJCQkJCXNjcmlwdC5vbmxvYWQgPSBz
Y3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDsKKworCQkJCQkJLy8gUmVtb3ZlIHRoZSBz
Y3JpcHQKKwkJCQkJCWlmICggaGVhZCAmJiBzY3JpcHQucGFyZW50Tm9kZSApIHsKKwkJCQkJCQlo
ZWFkLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTsKKwkJCQkJCX0KKworCQkJCQkJLy8gRGVyZWZlcmVu
Y2UgdGhlIHNjcmlwdAorCQkJCQkJc2NyaXB0ID0gdW5kZWZpbmVkOworCisJCQkJCQkvLyBDYWxs
YmFjayBpZiBub3QgYWJvcnQKKwkJCQkJCWlmICggIWlzQWJvcnQgKSB7CisJCQkJCQkJY2FsbGJh
Y2soIDIwMCwgInN1Y2Nlc3MiICk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9OworCQkJCS8vIFVz
ZSBpbnNlcnRCZWZvcmUgaW5zdGVhZCBvZiBhcHBlbmRDaGlsZCAgdG8gY2lyY3VtdmVudCBhbiBJ
RTYgYnVnLgorCQkJCS8vIFRoaXMgYXJpc2VzIHdoZW4gYSBiYXNlIG5vZGUgaXMgdXNlZCAoIzI3
MDkgYW5kICM0Mzc4KS4KKwkJCQloZWFkLmluc2VydEJlZm9yZSggc2NyaXB0LCBoZWFkLmZpcnN0
Q2hpbGQgKTsKKwkJCX0sCisKKwkJCWFib3J0OiBmdW5jdGlvbigpIHsKKwkJCQlpZiAoIHNjcmlw
dCApIHsKKwkJCQkJc2NyaXB0Lm9ubG9hZCggMCwgMSApOworCQkJCX0KKwkJCX0KKwkJfTsKKwl9
Cit9ICk7CisKK30pKCBqUXVlcnkgKTsKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3Rz
L2pxdWVyeS9yZXNvdXJjZXMvc3JjL2FqYXgvc2NyaXB0LmpzCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFs
bG93LXRhYnMKICAgKyB5ZXMKCkluZGV4OiBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Ny
Yy9hamF4L3hoci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2Vz
L3NyYy9hamF4L3hoci5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pxdWVyeS9yZXNv
dXJjZXMvc3JjL2FqYXgveGhyLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIyMiBAQAorKGZ1
bmN0aW9uKCBqUXVlcnkgKSB7CisKK3ZhciAvLyAjNTI4MDogbmV4dCBhY3RpdmUgeGhyIGlkIGFu
ZCBsaXN0IG9mIGFjdGl2ZSB4aHJzJyBjYWxsYmFja3MKKwl4aHJJZCA9IGpRdWVyeS5ub3coKSwK
Kwl4aHJDYWxsYmFja3MsCisKKwkvLyBYSFIgdXNlZCB0byBkZXRlcm1pbmUgc3VwcG9ydHMgcHJv
cGVydGllcworCXRlc3RYSFI7CisKKy8vICM1MjgwOiBJbnRlcm5ldCBFeHBsb3JlciB3aWxsIGtl
ZXAgY29ubmVjdGlvbnMgYWxpdmUgaWYgd2UgZG9uJ3QgYWJvcnQgb24gdW5sb2FkCitmdW5jdGlv
biB4aHJPblVubG9hZEFib3J0KCkgeworCWpRdWVyeSggd2luZG93ICkudW5sb2FkKGZ1bmN0aW9u
KCkgeworCQkvLyBBYm9ydCBhbGwgcGVuZGluZyByZXF1ZXN0cworCQlmb3IgKCB2YXIga2V5IGlu
IHhockNhbGxiYWNrcyApIHsKKwkJCXhockNhbGxiYWNrc1sga2V5IF0oIDAsIDEgKTsKKwkJfQor
CX0pOworfQorCisvLyBGdW5jdGlvbnMgdG8gY3JlYXRlIHhocnMKK2Z1bmN0aW9uIGNyZWF0ZVN0
YW5kYXJkWEhSKCkgeworCXRyeSB7CisJCXJldHVybiBuZXcgd2luZG93LlhNTEh0dHBSZXF1ZXN0
KCk7CisJfSBjYXRjaCggZSApIHt9Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZUFjdGl2ZVhIUigpIHsK
Kwl0cnkgeworCQlyZXR1cm4gbmV3IHdpbmRvdy5BY3RpdmVYT2JqZWN0KCAiTWljcm9zb2Z0LlhN
TEhUVFAiICk7CisJfSBjYXRjaCggZSApIHt9Cit9CisKKy8vIENyZWF0ZSB0aGUgcmVxdWVzdCBv
YmplY3QKKy8vIChUaGlzIGlzIHN0aWxsIGF0dGFjaGVkIHRvIGFqYXhTZXR0aW5ncyBmb3IgYmFj
a3dhcmQgY29tcGF0aWJpbGl0eSkKK2pRdWVyeS5hamF4U2V0dGluZ3MueGhyID0gd2luZG93LkFj
dGl2ZVhPYmplY3QgPworCS8qIE1pY3Jvc29mdCBmYWlsZWQgdG8gcHJvcGVybHkKKwkgKiBpbXBs
ZW1lbnQgdGhlIFhNTEh0dHBSZXF1ZXN0IGluIElFNyAoY2FuJ3QgcmVxdWVzdCBsb2NhbCBmaWxl
cyksCisJICogc28gd2UgdXNlIHRoZSBBY3RpdmVYT2JqZWN0IHdoZW4gaXQgaXMgYXZhaWxhYmxl
CisJICogQWRkaXRpb25hbGx5IFhNTEh0dHBSZXF1ZXN0IGNhbiBiZSBkaXNhYmxlZCBpbiBJRTcv
SUU4IHNvCisJICogd2UgbmVlZCBhIGZhbGxiYWNrLgorCSAqLworCWZ1bmN0aW9uKCkgeworCQly
ZXR1cm4gIXRoaXMuaXNMb2NhbCAmJiBjcmVhdGVTdGFuZGFyZFhIUigpIHx8IGNyZWF0ZUFjdGl2
ZVhIUigpOworCX0gOgorCS8vIEZvciBhbGwgb3RoZXIgYnJvd3NlcnMsIHVzZSB0aGUgc3RhbmRh
cmQgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0CisJY3JlYXRlU3RhbmRhcmRYSFI7CisKKy8vIFRlc3Qg
aWYgd2UgY2FuIGNyZWF0ZSBhbiB4aHIgb2JqZWN0Cit0ZXN0WEhSID0galF1ZXJ5LmFqYXhTZXR0
aW5ncy54aHIoKTsKK2pRdWVyeS5zdXBwb3J0LmFqYXggPSAhIXRlc3RYSFI7CisKKy8vIERvZXMg
dGhpcyBicm93c2VyIHN1cHBvcnQgY3Jvc3NEb21haW4gWEhSIHJlcXVlc3RzCitqUXVlcnkuc3Vw
cG9ydC5jb3JzID0gdGVzdFhIUiAmJiAoICJ3aXRoQ3JlZGVudGlhbHMiIGluIHRlc3RYSFIgKTsK
KworLy8gTm8gbmVlZCBmb3IgdGhlIHRlbXBvcmFyeSB4aHIgYW55bW9yZQordGVzdFhIUiA9IHVu
ZGVmaW5lZDsKKworLy8gQ3JlYXRlIHRyYW5zcG9ydCBpZiB0aGUgYnJvd3NlciBjYW4gcHJvdmlk
ZSBhbiB4aHIKK2lmICggalF1ZXJ5LnN1cHBvcnQuYWpheCApIHsKKworCWpRdWVyeS5hamF4VHJh
bnNwb3J0KGZ1bmN0aW9uKCBzICkgeworCQkvLyBDcm9zcyBkb21haW4gb25seSBhbGxvd2VkIGlm
IHN1cHBvcnRlZCB0aHJvdWdoIFhNTEh0dHBSZXF1ZXN0CisJCWlmICggIXMuY3Jvc3NEb21haW4g
fHwgalF1ZXJ5LnN1cHBvcnQuY29ycyApIHsKKworCQkJdmFyIGNhbGxiYWNrOworCisJCQlyZXR1
cm4geworCQkJCXNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJzLCBjb21wbGV0ZSApIHsKKworCQkJCQkv
LyBHZXQgYSBuZXcgeGhyCisJCQkJCXZhciB4aHIgPSBzLnhocigpLAorCQkJCQkJaGFuZGxlLAor
CQkJCQkJaTsKKworCQkJCQkvLyBPcGVuIHRoZSBzb2NrZXQKKwkJCQkJLy8gUGFzc2luZyBudWxs
IHVzZXJuYW1lLCBnZW5lcmF0ZXMgYSBsb2dpbiBwb3B1cCBvbiBPcGVyYSAoIzI4NjUpCisJCQkJ
CWlmICggcy51c2VybmFtZSApIHsKKwkJCQkJCXhoci5vcGVuKCBzLnR5cGUsIHMudXJsLCBzLmFz
eW5jLCBzLnVzZXJuYW1lLCBzLnBhc3N3b3JkICk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQl4aHIu
b3Blbiggcy50eXBlLCBzLnVybCwgcy5hc3luYyApOworCQkJCQl9CisKKwkJCQkJLy8gQXBwbHkg
Y3VzdG9tIGZpZWxkcyBpZiBwcm92aWRlZAorCQkJCQlpZiAoIHMueGhyRmllbGRzICkgeworCQkJ
CQkJZm9yICggaSBpbiBzLnhockZpZWxkcyApIHsKKwkJCQkJCQl4aHJbIGkgXSA9IHMueGhyRmll
bGRzWyBpIF07CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQkvLyBPdmVycmlkZSBtaW1lIHR5cGUg
aWYgbmVlZGVkCisJCQkJCWlmICggcy5taW1lVHlwZSAmJiB4aHIub3ZlcnJpZGVNaW1lVHlwZSAp
IHsKKwkJCQkJCXhoci5vdmVycmlkZU1pbWVUeXBlKCBzLm1pbWVUeXBlICk7CisJCQkJCX0KKwor
CQkJCQkvLyBYLVJlcXVlc3RlZC1XaXRoIGhlYWRlcgorCQkJCQkvLyBGb3IgY3Jvc3MtZG9tYWlu
IHJlcXVlc3RzLCBzZWVpbmcgYXMgY29uZGl0aW9ucyBmb3IgYSBwcmVmbGlnaHQgYXJlCisJCQkJ
CS8vIGFraW4gdG8gYSBqaWdzYXcgcHV6emxlLCB3ZSBzaW1wbHkgbmV2ZXIgc2V0IGl0IHRvIGJl
IHN1cmUuCisJCQkJCS8vIChpdCBjYW4gYWx3YXlzIGJlIHNldCBvbiBhIHBlci1yZXF1ZXN0IGJh
c2lzIG9yIGV2ZW4gdXNpbmcgYWpheFNldHVwKQorCQkJCQkvLyBGb3Igc2FtZS1kb21haW4gcmVx
dWVzdHMsIHdvbid0IGNoYW5nZSBoZWFkZXIgaWYgYWxyZWFkeSBwcm92aWRlZC4KKwkJCQkJaWYg
KCAhcy5jcm9zc0RvbWFpbiAmJiAhaGVhZGVyc1siWC1SZXF1ZXN0ZWQtV2l0aCJdICkgeworCQkJ
CQkJaGVhZGVyc1sgIlgtUmVxdWVzdGVkLVdpdGgiIF0gPSAiWE1MSHR0cFJlcXVlc3QiOworCQkJ
CQl9CisKKwkJCQkJLy8gTmVlZCBhbiBleHRyYSB0cnkvY2F0Y2ggZm9yIGNyb3NzIGRvbWFpbiBy
ZXF1ZXN0cyBpbiBGaXJlZm94IDMKKwkJCQkJdHJ5IHsKKwkJCQkJCWZvciAoIGkgaW4gaGVhZGVy
cyApIHsKKwkJCQkJCQl4aHIuc2V0UmVxdWVzdEhlYWRlciggaSwgaGVhZGVyc1sgaSBdICk7CisJ
CQkJCQl9CisJCQkJCX0gY2F0Y2goIF8gKSB7fQorCisJCQkJCS8vIERvIHNlbmQgdGhlIHJlcXVl
c3QKKwkJCQkJLy8gVGhpcyBtYXkgcmFpc2UgYW4gZXhjZXB0aW9uIHdoaWNoIGlzIGFjdHVhbGx5
CisJCQkJCS8vIGhhbmRsZWQgaW4galF1ZXJ5LmFqYXggKHNvIG5vIHRyeS9jYXRjaCBoZXJlKQor
CQkJCQl4aHIuc2VuZCggKCBzLmhhc0NvbnRlbnQgJiYgcy5kYXRhICkgfHwgbnVsbCApOworCisJ
CQkJCS8vIExpc3RlbmVyCisJCQkJCWNhbGxiYWNrID0gZnVuY3Rpb24oIF8sIGlzQWJvcnQgKSB7
CisKKwkJCQkJCXZhciBzdGF0dXMsCisJCQkJCQkJc3RhdHVzVGV4dCwKKwkJCQkJCQlyZXNwb25z
ZUhlYWRlcnMsCisJCQkJCQkJcmVzcG9uc2VzLAorCQkJCQkJCXhtbDsKKworCQkJCQkJLy8gRmly
ZWZveCB0aHJvd3MgZXhjZXB0aW9ucyB3aGVuIGFjY2Vzc2luZyBwcm9wZXJ0aWVzCisJCQkJCQkv
LyBvZiBhbiB4aHIgd2hlbiBhIG5ldHdvcmsgZXJyb3Igb2NjdXJlZAorCQkJCQkJLy8gaHR0cDov
L2hlbHBmdWwua25vYnMtZGlhbHMuY29tL2luZGV4LnBocC9Db21wb25lbnRfcmV0dXJuZWRfZmFp
bHVyZV9jb2RlOl8weDgwMDQwMTExXyhOU19FUlJPUl9OT1RfQVZBSUxBQkxFKQorCQkJCQkJdHJ5
IHsKKworCQkJCQkJCS8vIFdhcyBuZXZlciBjYWxsZWQgYW5kIGlzIGFib3J0ZWQgb3IgY29tcGxl
dGUKKwkJCQkJCQlpZiAoIGNhbGxiYWNrICYmICggaXNBYm9ydCB8fCB4aHIucmVhZHlTdGF0ZSA9
PT0gNCApICkgeworCisJCQkJCQkJCS8vIE9ubHkgY2FsbGVkIG9uY2UKKwkJCQkJCQkJY2FsbGJh
Y2sgPSB1bmRlZmluZWQ7CisKKwkJCQkJCQkJLy8gRG8gbm90IGtlZXAgYXMgYWN0aXZlIGFueW1v
cmUKKwkJCQkJCQkJaWYgKCBoYW5kbGUgKSB7CisJCQkJCQkJCQl4aHIub25yZWFkeXN0YXRlY2hh
bmdlID0galF1ZXJ5Lm5vb3A7CisJCQkJCQkJCQlkZWxldGUgeGhyQ2FsbGJhY2tzWyBoYW5kbGUg
XTsKKwkJCQkJCQkJfQorCisJCQkJCQkJCS8vIElmIGl0J3MgYW4gYWJvcnQKKwkJCQkJCQkJaWYg
KCBpc0Fib3J0ICkgeworCQkJCQkJCQkJLy8gQWJvcnQgaXQgbWFudWFsbHkgaWYgbmVlZGVkCisJ
CQkJCQkJCQlpZiAoIHhoci5yZWFkeVN0YXRlICE9PSA0ICkgeworCQkJCQkJCQkJCXhoci5hYm9y
dCgpOworCQkJCQkJCQkJfQorCQkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkJc3RhdHVzID0geGhy
LnN0YXR1czsKKwkJCQkJCQkJCXJlc3BvbnNlSGVhZGVycyA9IHhoci5nZXRBbGxSZXNwb25zZUhl
YWRlcnMoKTsKKwkJCQkJCQkJCXJlc3BvbnNlcyA9IHt9OworCQkJCQkJCQkJeG1sID0geGhyLnJl
c3BvbnNlWE1MOworCisJCQkJCQkJCQkvLyBDb25zdHJ1Y3QgcmVzcG9uc2UgbGlzdAorCQkJCQkJ
CQkJaWYgKCB4bWwgJiYgeG1sLmRvY3VtZW50RWxlbWVudCAvKiAjNDk1OCAqLyApIHsKKwkJCQkJ
CQkJCQlyZXNwb25zZXMueG1sID0geG1sOworCQkJCQkJCQkJfQorCQkJCQkJCQkJcmVzcG9uc2Vz
LnRleHQgPSB4aHIucmVzcG9uc2VUZXh0OworCisJCQkJCQkJCQkvLyBGaXJlZm94IHRocm93cyBh
biBleGNlcHRpb24gd2hlbiBhY2Nlc3NpbmcKKwkJCQkJCQkJCS8vIHN0YXR1c1RleHQgZm9yIGZh
dWx0eSBjcm9zcy1kb21haW4gcmVxdWVzdHMKKwkJCQkJCQkJCXRyeSB7CisJCQkJCQkJCQkJc3Rh
dHVzVGV4dCA9IHhoci5zdGF0dXNUZXh0OworCQkJCQkJCQkJfSBjYXRjaCggZSApIHsKKwkJCQkJ
CQkJCQkvLyBXZSBub3JtYWxpemUgd2l0aCBXZWJraXQgZ2l2aW5nIGFuIGVtcHR5IHN0YXR1c1Rl
eHQKKwkJCQkJCQkJCQlzdGF0dXNUZXh0ID0gIiI7CisJCQkJCQkJCQl9CisKKwkJCQkJCQkJCS8v
IEZpbHRlciBzdGF0dXMgZm9yIG5vbiBzdGFuZGFyZCBiZWhhdmlvcnMKKworCQkJCQkJCQkJLy8g
SWYgdGhlIHJlcXVlc3QgaXMgbG9jYWwgYW5kIHdlIGhhdmUgZGF0YTogYXNzdW1lIGEgc3VjY2Vz
cworCQkJCQkJCQkJLy8gKHN1Y2Nlc3Mgd2l0aCBubyBkYXRhIHdvbid0IGdldCBub3RpZmllZCwg
dGhhdCdzIHRoZSBiZXN0IHdlCisJCQkJCQkJCQkvLyBjYW4gZG8gZ2l2ZW4gY3VycmVudCBpbXBs
ZW1lbnRhdGlvbnMpCisJCQkJCQkJCQlpZiAoICFzdGF0dXMgJiYgcy5pc0xvY2FsICYmICFzLmNy
b3NzRG9tYWluICkgeworCQkJCQkJCQkJCXN0YXR1cyA9IHJlc3BvbnNlcy50ZXh0ID8gMjAwIDog
NDA0OworCQkJCQkJCQkJLy8gSUUgLSAjMTQ1MDogc29tZXRpbWVzIHJldHVybnMgMTIyMyB3aGVu
IGl0IHNob3VsZCBiZSAyMDQKKwkJCQkJCQkJCX0gZWxzZSBpZiAoIHN0YXR1cyA9PT0gMTIyMyAp
IHsKKwkJCQkJCQkJCQlzdGF0dXMgPSAyMDQ7CisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKwkJCQkJ
CQl9CisJCQkJCQl9IGNhdGNoKCBmaXJlZm94QWNjZXNzRXhjZXB0aW9uICkgeworCQkJCQkJCWlm
ICggIWlzQWJvcnQgKSB7CisJCQkJCQkJCWNvbXBsZXRlKCAtMSwgZmlyZWZveEFjY2Vzc0V4Y2Vw
dGlvbiApOworCQkJCQkJCX0KKwkJCQkJCX0KKworCQkJCQkJLy8gQ2FsbCBjb21wbGV0ZSBpZiBu
ZWVkZWQKKwkJCQkJCWlmICggcmVzcG9uc2VzICkgeworCQkJCQkJCWNvbXBsZXRlKCBzdGF0dXMs
IHN0YXR1c1RleHQsIHJlc3BvbnNlcywgcmVzcG9uc2VIZWFkZXJzICk7CisJCQkJCQl9CisJCQkJ
CX07CisKKwkJCQkJLy8gaWYgd2UncmUgaW4gc3luYyBtb2RlIG9yIGl0J3MgaW4gY2FjaGUKKwkJ
CQkJLy8gYW5kIGhhcyBiZWVuIHJldHJpZXZlZCBkaXJlY3RseSAoSUU2ICYgSUU3KQorCQkJCQkv
LyB3ZSBuZWVkIHRvIG1hbnVhbGx5IGZpcmUgdGhlIGNhbGxiYWNrCisJCQkJCWlmICggIXMuYXN5
bmMgfHwgeGhyLnJlYWR5U3RhdGUgPT09IDQgKSB7CisJCQkJCQljYWxsYmFjaygpOworCQkJCQl9
IGVsc2UgeworCQkJCQkJLy8gQ3JlYXRlIHRoZSBhY3RpdmUgeGhycyBjYWxsYmFja3MgbGlzdCBp
ZiBuZWVkZWQKKwkJCQkJCS8vIGFuZCBhdHRhY2ggdGhlIHVubG9hZCBoYW5kbGVyCisJCQkJCQlp
ZiAoICF4aHJDYWxsYmFja3MgKSB7CisJCQkJCQkJeGhyQ2FsbGJhY2tzID0ge307CisJCQkJCQkJ
eGhyT25VbmxvYWRBYm9ydCgpOworCQkJCQkJfQorCQkJCQkJLy8gQWRkIHRvIGxpc3Qgb2YgYWN0
aXZlIHhocnMgY2FsbGJhY2tzCisJCQkJCQloYW5kbGUgPSB4aHJJZCsrOworCQkJCQkJeGhyLm9u
cmVhZHlzdGF0ZWNoYW5nZSA9IHhockNhbGxiYWNrc1sgaGFuZGxlIF0gPSBjYWxsYmFjazsKKwkJ
CQkJfQorCQkJCX0sCisKKwkJCQlhYm9ydDogZnVuY3Rpb24oKSB7CisJCQkJCWlmICggY2FsbGJh
Y2sgKSB7CisJCQkJCQljYWxsYmFjaygwLDEpOworCQkJCQl9CisJCQkJfQorCQkJfTsKKwkJfQor
CX0pOworfQorCit9KSggalF1ZXJ5ICk7CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0
cy9qcXVlcnkvcmVzb3VyY2VzL3NyYy9hamF4L3hoci5qcwpfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBhbGxv
dy10YWJzCiAgICsgeWVzCgpJbmRleDogTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy9zcmMv
c2l6emxlLy5naXRtb2R1bGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pxdWVyeS9yZXNv
dXJjZXMvc3JjL3NpenpsZS8uZ2l0bW9kdWxlcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2pxdWVyeS9yZXNvdXJjZXMvc3JjL3NpenpsZS8uZ2l0bW9kdWxlcwkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwzIEBACitbc3VibW9kdWxlICJ0ZXN0L3F1bml0Il0KKwlwYXRoID0gdGVzdC9xdW5p
dAorCXVybCA9IGdpdDovL2dpdGh1Yi5jb20vanF1ZXJ5L3F1bml0LmdpdAoKUHJvcGVydHkgY2hh
bmdlcyBvbjogTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy9zcmMvc2l6emxlLy5naXRtb2R1
bGVzCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB5ZXMKCkluZGV4OiBMYXlvdXRU
ZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3NyYy9zaXp6bGUvTElDRU5TRQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3NyYy9zaXp6bGUvTElDRU5TRQkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvc3JjL3NpenpsZS9MSUNFTlNFCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0OCBAQAorU2l6emxlIGlzIHJlbGVhc2VkIHVuZGVyIHRo
cmVlIGxpY2Vuc2VzOiBNSVQsIEJTRCwgYW5kIEdQTC4gWW91IG1heSBwaWNrIHRoZSBsaWNlbnNl
IHRoYXQgYmVzdCBzdWl0cyB5b3VyIGRldmVsb3BtZW50IG5lZWRzLiBUaGUgdGV4dCBvZiBhbGwg
dGhyZWUgbGljZW5zZXMgYXJlIHByb3ZpZGVkIGJlbG93LgorCitNSVQgTGljZW5zZQorLS0tLQor
CitDb3B5cmlnaHQgKGMpIDIwMDkgSm9obiBSZXNpZworCitQZXJtaXNzaW9uIGlzIGhlcmVieSBn
cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Citv
ZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAi
U29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s
IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBt
b2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2Vs
bAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20g
dGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw
ZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJz
dGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9W
SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJ
TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05J
TkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQg
SE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklM
SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us
IEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJF
IE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KKworQlNEIExp
Y2Vuc2UKKy0tLS0KKworQ29weXJpZ2h0IChjKSAyMDA5LCBKb2huIFJlc2lnCitBbGwgcmlnaHRz
IHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgPG9yZ2FuaXphdGlvbj4gbm9y
IHRoZQorICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEpvaG4gUmVzaWcgJydBUyBJUycnIEFORCBBTlkKK0VYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxj
b3B5cmlnaHQgaG9sZGVyPiBCRSBMSUFCTEUgRk9SIEFOWQorRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworR1BMIExpY2Vuc2UKKy0tLS0KKworVGhlIEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpCitWZXJzaW9uIDIsIEp1bmUgMTk5MQorCitD
b3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCis1
OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitF
dmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3Bp
ZXMKK29mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxv
d2VkLgorCitQcmVhbWJsZQorCitUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRl
c2lnbmVkIHRvIHRha2UgYXdheSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4g
QnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0
byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZSBzb2Z0d2Fy
ZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiBU
aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hv
c2UgYXV0aG9ycyBjb21taXQgdG8gdXNpbmcgaXQuIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSBZb3UgY2FuIGFwcGx5IGl0IHRvIHlvdXIgcHJvZ3Jh
bXMsIHRvby4KKworV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJy
aW5nIHRvIGZyZWVkb20sIG5vdCBwcmljZS4gT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFy
ZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0
cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvciB0aGlzIHNlcnZp
Y2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQg
aXQgaWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVz
ZSBwaWVjZXMgb2YgaXQgaW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlv
dSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCitUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVk
IHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkIGFueW9uZSB0byBkZW55IHlvdSB0aGVz
ZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4gVGhlc2UgcmVz
dHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBp
ZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5
IGl0LgorCitGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBw
cm9ncmFtLCB3aGV0aGVyIGdyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJl
Y2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdCB5b3UgaGF2ZS4gWW91IG11c3QgbWFrZSBzdXJl
IHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlIHNvdXJjZSBjb2RlLiBBbmQg
eW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpciByaWdodHMu
CisKK1dlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQg
dGhlIHNvZnR3YXJlLCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMg
eW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRo
ZSBzb2Z0d2FyZS4KKworQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vy
cywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4gdGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0
IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUgc29mdHdhcmUuIElmIHRoZSBzb2Z0
d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2Ugd2FudCBp
dHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmln
aW5hbCwgc28gdGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3Qg
cmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwgYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKK0ZpbmFsbHks
IGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlIHBh
dGVudHMuIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9m
IGEgZnJlZSBwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMs
IGluIGVmZmVjdCBtYWtpbmcgdGhlIHByb2dyYW0gcHJvcHJpZXRhcnkuIFRvIHByZXZlbnQgdGhp
cywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55IHBhdGVudCBtdXN0IGJlIGxpY2Vuc2Vk
IGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKK1RoZSBw
cmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5k
IG1vZGlmaWNhdGlvbiBmb2xsb3cuCisKK1RFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5H
LCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCiswLiBUaGlzIExpY2Vuc2UgYXBwbGll
cyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBs
YWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVk
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIFRoZSAiUHJv
Z3JhbSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAi
d29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIgbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFu
eSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEg
d29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZl
cmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3Ro
ZXIgbGFuZ3VhZ2UuIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91
dCBsaW1pdGF0aW9uIGluIHRoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgRWFjaCBsaWNlbnNlZSBp
cyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBk
aXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNl
bnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gVGhlIGFjdCBvZiBydW5uaW5nIHRoZSBQ
cm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFt
IGlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQg
b24gdGhlIFByb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmlu
ZyB0aGUgUHJvZ3JhbSkuIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUg
UHJvZ3JhbSBkb2VzLgorCisxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0g
Y29waWVzIG9mIHRoZSBQcm9ncmFtJ3Mgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGlu
IGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91IGNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJp
YXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGlj
ZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZSBub3RpY2Vz
IHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2Fy
cmFudHk7IGFuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29w
eSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFy
Z2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5k
IHlvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNo
YW5nZSBmb3IgYSBmZWUuCisKKzIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMg
b2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24gb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsg
YmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZCBkaXN0cmlidXRlIHN1Y2ggbW9kaWZp
Y2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEgYWJvdmUsIHByb3Zp
ZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEp
IFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90
aWNlcyBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBh
bnkgY2hhbmdlLgorCisgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlz
dHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3Ig
aXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueSBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxp
Y2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJv
Z3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5IHdoZW4gcnVuLCB5b3Ug
bXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2ggaW50ZXJhY3RpdmUg
dXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbiBhbm5v
dW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEg
bm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlv
dSBwcm92aWRlIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhl
IHByb2dyYW0gdW5kZXIgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93
IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dy
YW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dCBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNo
IGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIGlzIG5vdCBy
ZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorCitUaGVzZSByZXF1aXJlbWVudHMg
YXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gSWYgaWRlbnRpZmlhYmxlIHNl
Y3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwgYW5k
IGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdv
cmtzIGluIHRoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBu
b3QgYXBwbHkgdG8gdGhvc2Ugc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNl
cGFyYXRlIHdvcmtzLiBCdXQgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBh
cyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCB0
aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZiB0aGlz
IExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRv
IHRoZSBlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJk
bGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRo
aXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdCB5b3VyIHJpZ2h0cyB0byB3b3Jr
IHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8gZXhlcmNp
c2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9y
IGNvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBt
ZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0g
d2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9u
IGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJy
aW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKzMu
IFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2Vk
IG9uIGl0LCB1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9y
bSB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0
IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgQWNjb21wYW55IGl0
IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2Ug
Y29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlv
bnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2Fy
ZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4g
b2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQg
cGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91ciBjb3N0IG9mIHBoeXNpY2FsbHkg
cGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFi
bGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUgZGlzdHJpYnV0
ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0g
Y3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykg
QWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUg
b2ZmZXIgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAoVGhpcyBhbHRl
cm5hdGl2ZSBpcyBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFu
ZCBvbmx5IGlmIHlvdSByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVj
dXRhYmxlIGZvcm0gd2l0aCBzdWNoIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9u
IGIgYWJvdmUuKQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVy
cmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiBGb3Ig
YW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucyBhbGwgdGhlIHNv
dXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRl
ZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvIGNv
bnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gSG93
ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVk
IG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAo
aW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkgZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50
cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBv
biB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQgaXRzZWxm
IGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0
YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5IGZy
b20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQgYWNjZXNzIHRv
IGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzIGRpc3Ry
aWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJl
IG5vdCBjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBj
b2RlLgorCis0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3Ry
aWJ1dGUgdGhlIFByb2dyYW0gZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlz
IExpY2Vuc2UuIEFueSBhdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vu
c2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNh
bGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuIEhvd2V2ZXIsIHBh
cnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVy
IHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28g
bG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworNS4gWW91
IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUg
bm90IHNpZ25lZCBpdC4gSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lv
biB0byBtb2RpZnkgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3
b3Jrcy4gVGhlc2UgYWN0aW9ucyBhcmUgcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBh
Y2NlcHQgdGhpcyBMaWNlbnNlLiBUaGVyZWZvcmUsIGJ5IG1vZGlmeWluZyBvciBkaXN0cmlidXRp
bmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSwgeW91IGlu
ZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZCBhbGwg
aXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9k
aWZ5aW5nIHRoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCis2LiBFYWNoIHRpbWUg
eW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlIFBy
b2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZy
b20gdGhlIG9yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRo
ZSBQcm9ncmFtIHN1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuIFlvdSBtYXkg
bm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4
ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uIFlvdSBhcmUgbm90IHJlc3BvbnNp
YmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvIHRoaXMgTGlj
ZW5zZS4KKworNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBh
bGxlZ2F0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24g
KG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLCBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9u
IHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yIG90aGVyd2lzZSkgdGhh
dCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3Qg
ZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gSWYgeW91IGNh
bm5vdCBkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxp
Z2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdh
dGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UgbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQ
cm9ncmFtIGF0IGFsbC4gRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50IGxpY2Vuc2Ugd291bGQgbm90
IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkgYWxs
IHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2gg
eW91LCB0aGVuIHRoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlz
IExpY2Vuc2Ugd291bGQgYmUgdG8gcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBv
ZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQg
aW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5j
ZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gYXBwbHkgYW5kIHRo
ZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIgY2lyY3Vt
c3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1
Y2UgeW91IHRvIGluZnJpbmdlIGFueSBwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNs
YWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueSBzdWNoIGNsYWltczsgdGhpcyBzZWN0
aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlIGludGVncml0eSBvZiB0
aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcyBpbXBsZW1lbnRl
ZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuIE1hbnkgcGVvcGxlIGhhdmUgbWFkZSBnZW5l
cm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1
dGVkIHRocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNh
dGlvbiBvZiB0aGF0IHN5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNp
ZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcgdG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdo
IGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90IGltcG9zZSB0aGF0IGNob2lj
ZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3
aGF0IGlzIGJlbGlldmVkIHRvIGJlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBM
aWNlbnNlLgorCis4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dy
YW0gaXMgcmVzdHJpY3RlZCBpbiBjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBv
ciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRl
ciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZSBtYXkgYWRkIGFuIGV4
cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcgdGhv
c2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBv
ciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuIEluIHN1Y2ggY2FzZSwgdGhpcyBM
aWNlbnNlIGluY29ycG9yYXRlcyB0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBi
b2R5IG9mIHRoaXMgTGljZW5zZS4KKworOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBt
YXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUg
c2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIg
aW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZl
cnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gSWYgdGhlIFBy
b2dyYW0gc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFw
cGxpZXMgdG8gaXQgYW5kICJhbnkgbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24g
b2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJz
aW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLiBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBu
dW1iZXIgb2YgdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisxMC4gSWYgeW91IHdp
c2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlIHBy
b2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRl
IHRvIHRoZSBhdXRob3IgdG8gYXNrIGZvciBwZXJtaXNzaW9uLiBGb3Igc29mdHdhcmUgd2hpY2gg
aXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9u
cyBmb3IgdGhpcy4gT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMg
b2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBm
cmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNv
ZnR3YXJlIGdlbmVyYWxseS4KKworTk8gV0FSUkFOVFkKKworMTEuIEJFQ0FVU0UgVEhFIFBST0dS
QU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZIEZPUiBU
SEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuIEVY
Q0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EL09SIE9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhP
VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gVEhFIEVO
VElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JB
TSBJUyBXSVRIIFlPVS4gU0hPVUxEIFRIRSBQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFT
U1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJF
Q1RJT04uCisKKzEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBM
QVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcgV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1Ig
QU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUiBSRURJU1RSSUJVVEUgVEhFIFBS
T0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJ
TkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUg
UFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFU
QSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9S
IFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lU
SCBBTlkgT1RIRVIgUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZ
IEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKwor
RU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCkluZGV4OiBMYXlvdXRUZXN0cy9qcXVlcnkvcmVz
b3VyY2VzL3NyYy9zaXp6bGUvTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanF1
ZXJ5L3Jlc291cmNlcy9zcmMvc2l6emxlL01ha2VmaWxlCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy9zcmMvc2l6emxlL01ha2VmaWxlCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDMgQEAKK2luaXQ6CisJQEBpZiB0ZXN0ICEgLWQgdGVzdC9xdW5pdDsgdGhlbiBn
aXQgY2xvbmUgZ2l0Oi8vZ2l0aHViLmNvbS9qcXVlcnkvcXVuaXQuZ2l0IHRlc3QvcXVuaXQ7IGZp
CisJQEBjZCB0ZXN0L3F1bml0ICYmIGdpdCBwdWxsIG9yaWdpbiBtYXN0ZXIgJj4gL2Rldi9udWxs
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3NyYy9z
aXp6bGUvTWFrZWZpbGUKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICArIHllcwoKSW5k
ZXg6IExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvc3JjL3NpenpsZS9SRUFETUUKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy9zcmMvc2l6emxlL1JFQURNRQko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvc3JjL3NpenpsZS9S
RUFETUUJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQgQEAKK0EgcHVyZS1KYXZhU2NyaXB0IENT
UyBzZWxlY3RvciBlbmdpbmUgZGVzaWduZWQgdG8gYmUgZWFzaWx5IGRyb3BwZWQgaW4gdG8gYSBo
b3N0IGxpYnJhcnkuCisKK01vcmUgaW5mb3JtYXRpb246CisgaHR0cDovL3NpenpsZWpzLmNvbS8K
KworRGlzY3Vzc2lvbjoKKyAgaHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3VwL3NpenpsZWpz
CisKK0RvY3VtZW50YXRpb246CisJaHR0cDovL3dpa2kuZ2l0aHViLmNvbS9qZXJlc2lnL3Npenps
ZQorCitUZXN0aW5nIFNpenpsZToKKyAtIE9wZW4gdGVzdC9pbmRleC5odG1sIGluIHlvdXIgYnJv
d3NlciB0byBydW4gdGhlIHRlc3RzLgorIC0gVGhlIGFjdHVhbCB1bml0IHRlc3RzIGFyZSBpbiB0
ZXN0L3VuaXQvc2VsZWN0b3JzLmpzLgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMv
anF1ZXJ5L3Jlc291cmNlcy9zcmMvc2l6emxlL1JFQURNRQpfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBhbGxv
dy10YWJzCiAgICsgeWVzCgpJbmRleDogTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy9zcmMv
c2l6emxlL3NpenpsZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3Vy
Y2VzL3NyYy9zaXp6bGUvc2l6emxlLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanF1
ZXJ5L3Jlc291cmNlcy9zcmMvc2l6emxlL3NpenpsZS5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMzg2IEBACisvKiEKKyAqIFNpenpsZSBDU1MgU2VsZWN0b3IgRW5naW5lCisgKiAgQ29weXJp
Z2h0IDIwMTEsIFRoZSBEb2pvIEZvdW5kYXRpb24KKyAqICBSZWxlYXNlZCB1bmRlciB0aGUgTUlU
LCBCU0QsIGFuZCBHUEwgTGljZW5zZXMuCisgKiAgTW9yZSBpbmZvcm1hdGlvbjogaHR0cDovL3Np
enpsZWpzLmNvbS8KKyAqLworKGZ1bmN0aW9uKCl7CisKK3ZhciBjaHVua2VyID0gLygoPzpcKCg/
OlwoW14oKV0rXCl8W14oKV0rKStcKXxcWyg/OlxbW15cW1xdXSpcXXxbJyJdW14nIl0qWyciXXxb
XlxbXF0nIl0rKStcXXxcXC58W14gPit+LChcW1xcXSspK3xbPit+XSkoXHMqLFxzKik/KCg/Oi58
XHJ8XG4pKikvZywKKwlkb25lID0gMCwKKwl0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9T
dHJpbmcsCisJaGFzRHVwbGljYXRlID0gZmFsc2UsCisJYmFzZUhhc0R1cGxpY2F0ZSA9IHRydWUs
CisJckJhY2tzbGFzaCA9IC9cXC9nLAorCXJOb25Xb3JkID0gL1xXLzsKKworLy8gSGVyZSB3ZSBj
aGVjayBpZiB0aGUgSmF2YVNjcmlwdCBlbmdpbmUgaXMgdXNpbmcgc29tZSBzb3J0IG9mCisvLyBv
cHRpbWl6YXRpb24gd2hlcmUgaXQgZG9lcyBub3QgYWx3YXlzIGNhbGwgb3VyIGNvbXBhcmlzaW9u
CisvLyBmdW5jdGlvbi4gSWYgdGhhdCBpcyB0aGUgY2FzZSwgZGlzY2FyZCB0aGUgaGFzRHVwbGlj
YXRlIHZhbHVlLgorLy8gICBUaHVzIGZhciB0aGF0IGluY2x1ZGVzIEdvb2dsZSBDaHJvbWUuCitb
MCwgMF0uc29ydChmdW5jdGlvbigpIHsKKwliYXNlSGFzRHVwbGljYXRlID0gZmFsc2U7CisJcmV0
dXJuIDA7Cit9KTsKKwordmFyIFNpenpsZSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwg
cmVzdWx0cywgc2VlZCApIHsKKwlyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTsKKwljb250ZXh0ID0g
Y29udGV4dCB8fCBkb2N1bWVudDsKKworCXZhciBvcmlnQ29udGV4dCA9IGNvbnRleHQ7CisKKwlp
ZiAoIGNvbnRleHQubm9kZVR5cGUgIT09IDEgJiYgY29udGV4dC5ub2RlVHlwZSAhPT0gOSApIHsK
KwkJcmV0dXJuIFtdOworCX0KKwkKKwlpZiAoICFzZWxlY3RvciB8fCB0eXBlb2Ygc2VsZWN0b3Ig
IT09ICJzdHJpbmciICkgeworCQlyZXR1cm4gcmVzdWx0czsKKwl9CisKKwl2YXIgbSwgc2V0LCBj
aGVja1NldCwgZXh0cmEsIHJldCwgY3VyLCBwb3AsIGksCisJCXBydW5lID0gdHJ1ZSwKKwkJY29u
dGV4dFhNTCA9IFNpenpsZS5pc1hNTCggY29udGV4dCApLAorCQlwYXJ0cyA9IFtdLAorCQlzb0Zh
ciA9IHNlbGVjdG9yOworCQorCS8vIFJlc2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgY2h1bmtlciBy
ZWdleHAgKHN0YXJ0IGZyb20gaGVhZCkKKwlkbyB7CisJCWNodW5rZXIuZXhlYyggIiIgKTsKKwkJ
bSA9IGNodW5rZXIuZXhlYyggc29GYXIgKTsKKworCQlpZiAoIG0gKSB7CisJCQlzb0ZhciA9IG1b
M107CisJCQorCQkJcGFydHMucHVzaCggbVsxXSApOworCQkKKwkJCWlmICggbVsyXSApIHsKKwkJ
CQlleHRyYSA9IG1bM107CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9IHdoaWxlICggbSApOwor
CisJaWYgKCBwYXJ0cy5sZW5ndGggPiAxICYmIG9yaWdQT1MuZXhlYyggc2VsZWN0b3IgKSApIHsK
KworCQlpZiAoIHBhcnRzLmxlbmd0aCA9PT0gMiAmJiBFeHByLnJlbGF0aXZlWyBwYXJ0c1swXSBd
ICkgeworCQkJc2V0ID0gcG9zUHJvY2VzcyggcGFydHNbMF0gKyBwYXJ0c1sxXSwgY29udGV4dCAp
OworCisJCX0gZWxzZSB7CisJCQlzZXQgPSBFeHByLnJlbGF0aXZlWyBwYXJ0c1swXSBdID8KKwkJ
CQlbIGNvbnRleHQgXSA6CisJCQkJU2l6emxlKCBwYXJ0cy5zaGlmdCgpLCBjb250ZXh0ICk7CisK
KwkJCXdoaWxlICggcGFydHMubGVuZ3RoICkgeworCQkJCXNlbGVjdG9yID0gcGFydHMuc2hpZnQo
KTsKKworCQkJCWlmICggRXhwci5yZWxhdGl2ZVsgc2VsZWN0b3IgXSApIHsKKwkJCQkJc2VsZWN0
b3IgKz0gcGFydHMuc2hpZnQoKTsKKwkJCQl9CisJCQkJCisJCQkJc2V0ID0gcG9zUHJvY2Vzcygg
c2VsZWN0b3IsIHNldCApOworCQkJfQorCQl9CisKKwl9IGVsc2UgeworCQkvLyBUYWtlIGEgc2hv
cnRjdXQgYW5kIHNldCB0aGUgY29udGV4dCBpZiB0aGUgcm9vdCBzZWxlY3RvciBpcyBhbiBJRAor
CQkvLyAoYnV0IG5vdCBpZiBpdCdsbCBiZSBmYXN0ZXIgaWYgdGhlIGlubmVyIHNlbGVjdG9yIGlz
IGFuIElEKQorCQlpZiAoICFzZWVkICYmIHBhcnRzLmxlbmd0aCA+IDEgJiYgY29udGV4dC5ub2Rl
VHlwZSA9PT0gOSAmJiAhY29udGV4dFhNTCAmJgorCQkJCUV4cHIubWF0Y2guSUQudGVzdChwYXJ0
c1swXSkgJiYgIUV4cHIubWF0Y2guSUQudGVzdChwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSkgKSB7
CisKKwkJCXJldCA9IFNpenpsZS5maW5kKCBwYXJ0cy5zaGlmdCgpLCBjb250ZXh0LCBjb250ZXh0
WE1MICk7CisJCQljb250ZXh0ID0gcmV0LmV4cHIgPworCQkJCVNpenpsZS5maWx0ZXIoIHJldC5l
eHByLCByZXQuc2V0IClbMF0gOgorCQkJCXJldC5zZXRbMF07CisJCX0KKworCQlpZiAoIGNvbnRl
eHQgKSB7CisJCQlyZXQgPSBzZWVkID8KKwkJCQl7IGV4cHI6IHBhcnRzLnBvcCgpLCBzZXQ6IG1h
a2VBcnJheShzZWVkKSB9IDoKKwkJCQlTaXp6bGUuZmluZCggcGFydHMucG9wKCksIHBhcnRzLmxl
bmd0aCA9PT0gMSAmJiAocGFydHNbMF0gPT09ICJ+IiB8fCBwYXJ0c1swXSA9PT0gIisiKSAmJiBj
b250ZXh0LnBhcmVudE5vZGUgPyBjb250ZXh0LnBhcmVudE5vZGUgOiBjb250ZXh0LCBjb250ZXh0
WE1MICk7CisKKwkJCXNldCA9IHJldC5leHByID8KKwkJCQlTaXp6bGUuZmlsdGVyKCByZXQuZXhw
ciwgcmV0LnNldCApIDoKKwkJCQlyZXQuc2V0OworCisJCQlpZiAoIHBhcnRzLmxlbmd0aCA+IDAg
KSB7CisJCQkJY2hlY2tTZXQgPSBtYWtlQXJyYXkoIHNldCApOworCisJCQl9IGVsc2UgeworCQkJ
CXBydW5lID0gZmFsc2U7CisJCQl9CisKKwkJCXdoaWxlICggcGFydHMubGVuZ3RoICkgeworCQkJ
CWN1ciA9IHBhcnRzLnBvcCgpOworCQkJCXBvcCA9IGN1cjsKKworCQkJCWlmICggIUV4cHIucmVs
YXRpdmVbIGN1ciBdICkgeworCQkJCQljdXIgPSAiIjsKKwkJCQl9IGVsc2UgeworCQkJCQlwb3Ag
PSBwYXJ0cy5wb3AoKTsKKwkJCQl9CisKKwkJCQlpZiAoIHBvcCA9PSBudWxsICkgeworCQkJCQlw
b3AgPSBjb250ZXh0OworCQkJCX0KKworCQkJCUV4cHIucmVsYXRpdmVbIGN1ciBdKCBjaGVja1Nl
dCwgcG9wLCBjb250ZXh0WE1MICk7CisJCQl9CisKKwkJfSBlbHNlIHsKKwkJCWNoZWNrU2V0ID0g
cGFydHMgPSBbXTsKKwkJfQorCX0KKworCWlmICggIWNoZWNrU2V0ICkgeworCQljaGVja1NldCA9
IHNldDsKKwl9CisKKwlpZiAoICFjaGVja1NldCApIHsKKwkJU2l6emxlLmVycm9yKCBjdXIgfHwg
c2VsZWN0b3IgKTsKKwl9CisKKwlpZiAoIHRvU3RyaW5nLmNhbGwoY2hlY2tTZXQpID09PSAiW29i
amVjdCBBcnJheV0iICkgeworCQlpZiAoICFwcnVuZSApIHsKKwkJCXJlc3VsdHMucHVzaC5hcHBs
eSggcmVzdWx0cywgY2hlY2tTZXQgKTsKKworCQl9IGVsc2UgaWYgKCBjb250ZXh0ICYmIGNvbnRl
eHQubm9kZVR5cGUgPT09IDEgKSB7CisJCQlmb3IgKCBpID0gMDsgY2hlY2tTZXRbaV0gIT0gbnVs
bDsgaSsrICkgeworCQkJCWlmICggY2hlY2tTZXRbaV0gJiYgKGNoZWNrU2V0W2ldID09PSB0cnVl
IHx8IGNoZWNrU2V0W2ldLm5vZGVUeXBlID09PSAxICYmIFNpenpsZS5jb250YWlucyhjb250ZXh0
LCBjaGVja1NldFtpXSkpICkgeworCQkJCQlyZXN1bHRzLnB1c2goIHNldFtpXSApOworCQkJCX0K
KwkJCX0KKworCQl9IGVsc2UgeworCQkJZm9yICggaSA9IDA7IGNoZWNrU2V0W2ldICE9IG51bGw7
IGkrKyApIHsKKwkJCQlpZiAoIGNoZWNrU2V0W2ldICYmIGNoZWNrU2V0W2ldLm5vZGVUeXBlID09
PSAxICkgeworCQkJCQlyZXN1bHRzLnB1c2goIHNldFtpXSApOworCQkJCX0KKwkJCX0KKwkJfQor
CisJfSBlbHNlIHsKKwkJbWFrZUFycmF5KCBjaGVja1NldCwgcmVzdWx0cyApOworCX0KKworCWlm
ICggZXh0cmEgKSB7CisJCVNpenpsZSggZXh0cmEsIG9yaWdDb250ZXh0LCByZXN1bHRzLCBzZWVk
ICk7CisJCVNpenpsZS51bmlxdWVTb3J0KCByZXN1bHRzICk7CisJfQorCisJcmV0dXJuIHJlc3Vs
dHM7Cit9OworCitTaXp6bGUudW5pcXVlU29ydCA9IGZ1bmN0aW9uKCByZXN1bHRzICkgeworCWlm
ICggc29ydE9yZGVyICkgeworCQloYXNEdXBsaWNhdGUgPSBiYXNlSGFzRHVwbGljYXRlOworCQly
ZXN1bHRzLnNvcnQoIHNvcnRPcmRlciApOworCisJCWlmICggaGFzRHVwbGljYXRlICkgeworCQkJ
Zm9yICggdmFyIGkgPSAxOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKyApIHsKKwkJCQlpZiAoIHJl
c3VsdHNbaV0gPT09IHJlc3VsdHNbIGkgLSAxIF0gKSB7CisJCQkJCXJlc3VsdHMuc3BsaWNlKCBp
LS0sIDEgKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gcmVzdWx0czsKK307CisK
K1NpenpsZS5tYXRjaGVzID0gZnVuY3Rpb24oIGV4cHIsIHNldCApIHsKKwlyZXR1cm4gU2l6emxl
KCBleHByLCBudWxsLCBudWxsLCBzZXQgKTsKK307CisKK1NpenpsZS5tYXRjaGVzU2VsZWN0b3Ig
PSBmdW5jdGlvbiggbm9kZSwgZXhwciApIHsKKwlyZXR1cm4gU2l6emxlKCBleHByLCBudWxsLCBu
dWxsLCBbbm9kZV0gKS5sZW5ndGggPiAwOworfTsKKworU2l6emxlLmZpbmQgPSBmdW5jdGlvbigg
ZXhwciwgY29udGV4dCwgaXNYTUwgKSB7CisJdmFyIHNldDsKKworCWlmICggIWV4cHIgKSB7CisJ
CXJldHVybiBbXTsKKwl9CisKKwlmb3IgKCB2YXIgaSA9IDAsIGwgPSBFeHByLm9yZGVyLmxlbmd0
aDsgaSA8IGw7IGkrKyApIHsKKwkJdmFyIG1hdGNoLAorCQkJdHlwZSA9IEV4cHIub3JkZXJbaV07
CisJCQorCQlpZiAoIChtYXRjaCA9IEV4cHIubGVmdE1hdGNoWyB0eXBlIF0uZXhlYyggZXhwciAp
KSApIHsKKwkJCXZhciBsZWZ0ID0gbWF0Y2hbMV07CisJCQltYXRjaC5zcGxpY2UoIDEsIDEgKTsK
KworCQkJaWYgKCBsZWZ0LnN1YnN0ciggbGVmdC5sZW5ndGggLSAxICkgIT09ICJcXCIgKSB7CisJ
CQkJbWF0Y2hbMV0gPSAobWF0Y2hbMV0gfHwgIiIpLnJlcGxhY2UoIHJCYWNrc2xhc2gsICIiICk7
CisJCQkJc2V0ID0gRXhwci5maW5kWyB0eXBlIF0oIG1hdGNoLCBjb250ZXh0LCBpc1hNTCApOwor
CisJCQkJaWYgKCBzZXQgIT0gbnVsbCApIHsKKwkJCQkJZXhwciA9IGV4cHIucmVwbGFjZSggRXhw
ci5tYXRjaFsgdHlwZSBdLCAiIiApOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwl9
CisKKwlpZiAoICFzZXQgKSB7CisJCXNldCA9IHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlU
YWdOYW1lICE9PSAidW5kZWZpbmVkIiA/CisJCQljb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCAiKiIgKSA6CisJCQlbXTsKKwl9CisKKwlyZXR1cm4geyBzZXQ6IHNldCwgZXhwcjogZXhwciB9
OworfTsKKworU2l6emxlLmZpbHRlciA9IGZ1bmN0aW9uKCBleHByLCBzZXQsIGlucGxhY2UsIG5v
dCApIHsKKwl2YXIgbWF0Y2gsIGFueUZvdW5kLAorCQlvbGQgPSBleHByLAorCQlyZXN1bHQgPSBb
XSwKKwkJY3VyTG9vcCA9IHNldCwKKwkJaXNYTUxGaWx0ZXIgPSBzZXQgJiYgc2V0WzBdICYmIFNp
enpsZS5pc1hNTCggc2V0WzBdICk7CisKKwl3aGlsZSAoIGV4cHIgJiYgc2V0Lmxlbmd0aCApIHsK
KwkJZm9yICggdmFyIHR5cGUgaW4gRXhwci5maWx0ZXIgKSB7CisJCQlpZiAoIChtYXRjaCA9IEV4
cHIubGVmdE1hdGNoWyB0eXBlIF0uZXhlYyggZXhwciApKSAhPSBudWxsICYmIG1hdGNoWzJdICkg
eworCQkJCXZhciBmb3VuZCwgaXRlbSwKKwkJCQkJZmlsdGVyID0gRXhwci5maWx0ZXJbIHR5cGUg
XSwKKwkJCQkJbGVmdCA9IG1hdGNoWzFdOworCisJCQkJYW55Rm91bmQgPSBmYWxzZTsKKworCQkJ
CW1hdGNoLnNwbGljZSgxLDEpOworCisJCQkJaWYgKCBsZWZ0LnN1YnN0ciggbGVmdC5sZW5ndGgg
LSAxICkgPT09ICJcXCIgKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCWlmICggY3Vy
TG9vcCA9PT0gcmVzdWx0ICkgeworCQkJCQlyZXN1bHQgPSBbXTsKKwkJCQl9CisKKwkJCQlpZiAo
IEV4cHIucHJlRmlsdGVyWyB0eXBlIF0gKSB7CisJCQkJCW1hdGNoID0gRXhwci5wcmVGaWx0ZXJb
IHR5cGUgXSggbWF0Y2gsIGN1ckxvb3AsIGlucGxhY2UsIHJlc3VsdCwgbm90LCBpc1hNTEZpbHRl
ciApOworCisJCQkJCWlmICggIW1hdGNoICkgeworCQkJCQkJYW55Rm91bmQgPSBmb3VuZCA9IHRy
dWU7CisKKwkJCQkJfSBlbHNlIGlmICggbWF0Y2ggPT09IHRydWUgKSB7CisJCQkJCQljb250aW51
ZTsKKwkJCQkJfQorCQkJCX0KKworCQkJCWlmICggbWF0Y2ggKSB7CisJCQkJCWZvciAoIHZhciBp
ID0gMDsgKGl0ZW0gPSBjdXJMb29wW2ldKSAhPSBudWxsOyBpKysgKSB7CisJCQkJCQlpZiAoIGl0
ZW0gKSB7CisJCQkJCQkJZm91bmQgPSBmaWx0ZXIoIGl0ZW0sIG1hdGNoLCBpLCBjdXJMb29wICk7
CisJCQkJCQkJdmFyIHBhc3MgPSBub3QgXiAhIWZvdW5kOworCisJCQkJCQkJaWYgKCBpbnBsYWNl
ICYmIGZvdW5kICE9IG51bGwgKSB7CisJCQkJCQkJCWlmICggcGFzcyApIHsKKwkJCQkJCQkJCWFu
eUZvdW5kID0gdHJ1ZTsKKworCQkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkJY3VyTG9vcFtpXSA9
IGZhbHNlOworCQkJCQkJCQl9CisKKwkJCQkJCQl9IGVsc2UgaWYgKCBwYXNzICkgeworCQkJCQkJ
CQlyZXN1bHQucHVzaCggaXRlbSApOworCQkJCQkJCQlhbnlGb3VuZCA9IHRydWU7CisJCQkJCQkJ
fQorCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCisJCQkJaWYgKCBmb3VuZCAhPT0gdW5kZWZpbmVk
ICkgeworCQkJCQlpZiAoICFpbnBsYWNlICkgeworCQkJCQkJY3VyTG9vcCA9IHJlc3VsdDsKKwkJ
CQkJfQorCisJCQkJCWV4cHIgPSBleHByLnJlcGxhY2UoIEV4cHIubWF0Y2hbIHR5cGUgXSwgIiIg
KTsKKworCQkJCQlpZiAoICFhbnlGb3VuZCApIHsKKwkJCQkJCXJldHVybiBbXTsKKwkJCQkJfQor
CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8vIEltcHJvcGVyIGV4cHJlc3Np
b24KKwkJaWYgKCBleHByID09PSBvbGQgKSB7CisJCQlpZiAoIGFueUZvdW5kID09IG51bGwgKSB7
CisJCQkJU2l6emxlLmVycm9yKCBleHByICk7CisKKwkJCX0gZWxzZSB7CisJCQkJYnJlYWs7CisJ
CQl9CisJCX0KKworCQlvbGQgPSBleHByOworCX0KKworCXJldHVybiBjdXJMb29wOworfTsKKwor
U2l6emxlLmVycm9yID0gZnVuY3Rpb24oIG1zZyApIHsKKwl0aHJvdyAiU3ludGF4IGVycm9yLCB1
bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIiArIG1zZzsKK307CisKK3ZhciBFeHByID0gU2l6emxl
LnNlbGVjdG9ycyA9IHsKKwlvcmRlcjogWyAiSUQiLCAiTkFNRSIsICJUQUciIF0sCisKKwltYXRj
aDogeworCQlJRDogLyMoKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKykvLAorCQlDTEFTUzog
L1wuKCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspLywKKwkJTkFNRTogL1xbbmFtZT1bJyJd
KigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKVsnIl0qXF0vLAorCQlBVFRSOiAvXFtccyoo
KD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKylccyooPzooXFM/PSlccyooPzooWyciXSkoLio/
KVwzfCgjPyg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSopfCl8KVxzKlxdLywKKwkJVEFHOiAv
XigoPzpbXHdcdTAwYzAtXHVGRkZGXCpcLV18XFwuKSspLywKKwkJQ0hJTEQ6IC86KG9ubHl8bnRo
fGxhc3R8Zmlyc3QpLWNoaWxkKD86XChccyooZXZlbnxvZGR8KD86WytcLV0/XGQrfCg/OlsrXC1d
P1xkKik/blxzKig/OlsrXC1dXHMqXGQrKT8pKVxzKlwpKT8vLAorCQlQT1M6IC86KG50aHxlcXxn
dHxsdHxmaXJzdHxsYXN0fGV2ZW58b2RkKSg/OlwoKFxkKilcKSk/KD89W15cLV18JCkvLAorCQlQ
U0VVRE86IC86KCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspKD86XCgoWyciXT8pKCg/Olwo
W15cKV0rXCl8W15cKFwpXSopKylcMlwpKT8vCisJfSwKKworCWxlZnRNYXRjaDoge30sCisKKwlh
dHRyTWFwOiB7CisJCSJjbGFzcyI6ICJjbGFzc05hbWUiLAorCQkiZm9yIjogImh0bWxGb3IiCisJ
fSwKKworCWF0dHJIYW5kbGU6IHsKKwkJaHJlZjogZnVuY3Rpb24oIGVsZW0gKSB7CisJCQlyZXR1
cm4gZWxlbS5nZXRBdHRyaWJ1dGUoICJocmVmIiApOworCQl9LAorCQl0eXBlOiBmdW5jdGlvbigg
ZWxlbSApIHsKKwkJCXJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggInR5cGUiICk7CisJCX0KKwl9
LAorCisJcmVsYXRpdmU6IHsKKwkJIisiOiBmdW5jdGlvbihjaGVja1NldCwgcGFydCl7CisJCQl2
YXIgaXNQYXJ0U3RyID0gdHlwZW9mIHBhcnQgPT09ICJzdHJpbmciLAorCQkJCWlzVGFnID0gaXNQ
YXJ0U3RyICYmICFyTm9uV29yZC50ZXN0KCBwYXJ0ICksCisJCQkJaXNQYXJ0U3RyTm90VGFnID0g
aXNQYXJ0U3RyICYmICFpc1RhZzsKKworCQkJaWYgKCBpc1RhZyApIHsKKwkJCQlwYXJ0ID0gcGFy
dC50b0xvd2VyQ2FzZSgpOworCQkJfQorCisJCQlmb3IgKCB2YXIgaSA9IDAsIGwgPSBjaGVja1Nl
dC5sZW5ndGgsIGVsZW07IGkgPCBsOyBpKysgKSB7CisJCQkJaWYgKCAoZWxlbSA9IGNoZWNrU2V0
W2ldKSApIHsKKwkJCQkJd2hpbGUgKCAoZWxlbSA9IGVsZW0ucHJldmlvdXNTaWJsaW5nKSAmJiBl
bGVtLm5vZGVUeXBlICE9PSAxICkge30KKworCQkJCQljaGVja1NldFtpXSA9IGlzUGFydFN0ck5v
dFRhZyB8fCBlbGVtICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gcGFydCA/CisJ
CQkJCQllbGVtIHx8IGZhbHNlIDoKKwkJCQkJCWVsZW0gPT09IHBhcnQ7CisJCQkJfQorCQkJfQor
CisJCQlpZiAoIGlzUGFydFN0ck5vdFRhZyApIHsKKwkJCQlTaXp6bGUuZmlsdGVyKCBwYXJ0LCBj
aGVja1NldCwgdHJ1ZSApOworCQkJfQorCQl9LAorCisJCSI+IjogZnVuY3Rpb24oIGNoZWNrU2V0
LCBwYXJ0ICkgeworCQkJdmFyIGVsZW0sCisJCQkJaXNQYXJ0U3RyID0gdHlwZW9mIHBhcnQgPT09
ICJzdHJpbmciLAorCQkJCWkgPSAwLAorCQkJCWwgPSBjaGVja1NldC5sZW5ndGg7CisKKwkJCWlm
ICggaXNQYXJ0U3RyICYmICFyTm9uV29yZC50ZXN0KCBwYXJ0ICkgKSB7CisJCQkJcGFydCA9IHBh
cnQudG9Mb3dlckNhc2UoKTsKKworCQkJCWZvciAoIDsgaSA8IGw7IGkrKyApIHsKKwkJCQkJZWxl
bSA9IGNoZWNrU2V0W2ldOworCisJCQkJCWlmICggZWxlbSApIHsKKwkJCQkJCXZhciBwYXJlbnQg
PSBlbGVtLnBhcmVudE5vZGU7CisJCQkJCQljaGVja1NldFtpXSA9IHBhcmVudC5ub2RlTmFtZS50
b0xvd2VyQ2FzZSgpID09PSBwYXJ0ID8gcGFyZW50IDogZmFsc2U7CisJCQkJCX0KKwkJCQl9CisK
KwkJCX0gZWxzZSB7CisJCQkJZm9yICggOyBpIDwgbDsgaSsrICkgeworCQkJCQllbGVtID0gY2hl
Y2tTZXRbaV07CisKKwkJCQkJaWYgKCBlbGVtICkgeworCQkJCQkJY2hlY2tTZXRbaV0gPSBpc1Bh
cnRTdHIgPworCQkJCQkJCWVsZW0ucGFyZW50Tm9kZSA6CisJCQkJCQkJZWxlbS5wYXJlbnROb2Rl
ID09PSBwYXJ0OworCQkJCQl9CisJCQkJfQorCisJCQkJaWYgKCBpc1BhcnRTdHIgKSB7CisJCQkJ
CVNpenpsZS5maWx0ZXIoIHBhcnQsIGNoZWNrU2V0LCB0cnVlICk7CisJCQkJfQorCQkJfQorCQl9
LAorCisJCSIiOiBmdW5jdGlvbihjaGVja1NldCwgcGFydCwgaXNYTUwpeworCQkJdmFyIG5vZGVD
aGVjaywKKwkJCQlkb25lTmFtZSA9IGRvbmUrKywKKwkJCQljaGVja0ZuID0gZGlyQ2hlY2s7CisK
KwkJCWlmICggdHlwZW9mIHBhcnQgPT09ICJzdHJpbmciICYmICFyTm9uV29yZC50ZXN0KCBwYXJ0
ICkgKSB7CisJCQkJcGFydCA9IHBhcnQudG9Mb3dlckNhc2UoKTsKKwkJCQlub2RlQ2hlY2sgPSBw
YXJ0OworCQkJCWNoZWNrRm4gPSBkaXJOb2RlQ2hlY2s7CisJCQl9CisKKwkJCWNoZWNrRm4oICJw
YXJlbnROb2RlIiwgcGFydCwgZG9uZU5hbWUsIGNoZWNrU2V0LCBub2RlQ2hlY2ssIGlzWE1MICk7
CisJCX0sCisKKwkJIn4iOiBmdW5jdGlvbiggY2hlY2tTZXQsIHBhcnQsIGlzWE1MICkgeworCQkJ
dmFyIG5vZGVDaGVjaywKKwkJCQlkb25lTmFtZSA9IGRvbmUrKywKKwkJCQljaGVja0ZuID0gZGly
Q2hlY2s7CisKKwkJCWlmICggdHlwZW9mIHBhcnQgPT09ICJzdHJpbmciICYmICFyTm9uV29yZC50
ZXN0KCBwYXJ0ICkgKSB7CisJCQkJcGFydCA9IHBhcnQudG9Mb3dlckNhc2UoKTsKKwkJCQlub2Rl
Q2hlY2sgPSBwYXJ0OworCQkJCWNoZWNrRm4gPSBkaXJOb2RlQ2hlY2s7CisJCQl9CisKKwkJCWNo
ZWNrRm4oICJwcmV2aW91c1NpYmxpbmciLCBwYXJ0LCBkb25lTmFtZSwgY2hlY2tTZXQsIG5vZGVD
aGVjaywgaXNYTUwgKTsKKwkJfQorCX0sCisKKwlmaW5kOiB7CisJCUlEOiBmdW5jdGlvbiggbWF0
Y2gsIGNvbnRleHQsIGlzWE1MICkgeworCQkJaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50
QnlJZCAhPT0gInVuZGVmaW5lZCIgJiYgIWlzWE1MICkgeworCQkJCXZhciBtID0gY29udGV4dC5n
ZXRFbGVtZW50QnlJZChtYXRjaFsxXSk7CisJCQkJLy8gQ2hlY2sgcGFyZW50Tm9kZSB0byBjYXRj
aCB3aGVuIEJsYWNrYmVycnkgNC42IHJldHVybnMKKwkJCQkvLyBub2RlcyB0aGF0IGFyZSBubyBs
b25nZXIgaW4gdGhlIGRvY3VtZW50ICM2OTYzCisJCQkJcmV0dXJuIG0gJiYgbS5wYXJlbnROb2Rl
ID8gW21dIDogW107CisJCQl9CisJCX0sCisKKwkJTkFNRTogZnVuY3Rpb24oIG1hdGNoLCBjb250
ZXh0ICkgeworCQkJaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5TmFtZSAhPT0gInVu
ZGVmaW5lZCIgKSB7CisJCQkJdmFyIHJldCA9IFtdLAorCQkJCQlyZXN1bHRzID0gY29udGV4dC5n
ZXRFbGVtZW50c0J5TmFtZSggbWF0Y2hbMV0gKTsKKworCQkJCWZvciAoIHZhciBpID0gMCwgbCA9
IHJlc3VsdHMubGVuZ3RoOyBpIDwgbDsgaSsrICkgeworCQkJCQlpZiAoIHJlc3VsdHNbaV0uZ2V0
QXR0cmlidXRlKCJuYW1lIikgPT09IG1hdGNoWzFdICkgeworCQkJCQkJcmV0LnB1c2goIHJlc3Vs
dHNbaV0gKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCXJldHVybiByZXQubGVuZ3RoID09PSAwID8g
bnVsbCA6IHJldDsKKwkJCX0KKwkJfSwKKworCQlUQUc6IGZ1bmN0aW9uKCBtYXRjaCwgY29udGV4
dCApIHsKKwkJCWlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09ICJ1
bmRlZmluZWQiICkgeworCQkJCXJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBt
YXRjaFsxXSApOworCQkJfQorCQl9CisJfSwKKwlwcmVGaWx0ZXI6IHsKKwkJQ0xBU1M6IGZ1bmN0
aW9uKCBtYXRjaCwgY3VyTG9vcCwgaW5wbGFjZSwgcmVzdWx0LCBub3QsIGlzWE1MICkgeworCQkJ
bWF0Y2ggPSAiICIgKyBtYXRjaFsxXS5yZXBsYWNlKCByQmFja3NsYXNoLCAiIiApICsgIiAiOwor
CisJCQlpZiAoIGlzWE1MICkgeworCQkJCXJldHVybiBtYXRjaDsKKwkJCX0KKworCQkJZm9yICgg
dmFyIGkgPSAwLCBlbGVtOyAoZWxlbSA9IGN1ckxvb3BbaV0pICE9IG51bGw7IGkrKyApIHsKKwkJ
CQlpZiAoIGVsZW0gKSB7CisJCQkJCWlmICggbm90IF4gKGVsZW0uY2xhc3NOYW1lICYmICgiICIg
KyBlbGVtLmNsYXNzTmFtZSArICIgIikucmVwbGFjZSgvW1x0XG5ccl0vZywgIiAiKS5pbmRleE9m
KG1hdGNoKSA+PSAwKSApIHsKKwkJCQkJCWlmICggIWlucGxhY2UgKSB7CisJCQkJCQkJcmVzdWx0
LnB1c2goIGVsZW0gKTsKKwkJCQkJCX0KKworCQkJCQl9IGVsc2UgaWYgKCBpbnBsYWNlICkgewor
CQkJCQkJY3VyTG9vcFtpXSA9IGZhbHNlOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlyZXR1
cm4gZmFsc2U7CisJCX0sCisKKwkJSUQ6IGZ1bmN0aW9uKCBtYXRjaCApIHsKKwkJCXJldHVybiBt
YXRjaFsxXS5yZXBsYWNlKCByQmFja3NsYXNoLCAiIiApOworCQl9LAorCisJCVRBRzogZnVuY3Rp
b24oIG1hdGNoLCBjdXJMb29wICkgeworCQkJcmV0dXJuIG1hdGNoWzFdLnJlcGxhY2UoIHJCYWNr
c2xhc2gsICIiICkudG9Mb3dlckNhc2UoKTsKKwkJfSwKKworCQlDSElMRDogZnVuY3Rpb24oIG1h
dGNoICkgeworCQkJaWYgKCBtYXRjaFsxXSA9PT0gIm50aCIgKSB7CisJCQkJaWYgKCAhbWF0Y2hb
Ml0gKSB7CisJCQkJCVNpenpsZS5lcnJvciggbWF0Y2hbMF0gKTsKKwkJCQl9CisKKwkJCQltYXRj
aFsyXSA9IG1hdGNoWzJdLnJlcGxhY2UoL15cK3xccyovZywgJycpOworCisJCQkJLy8gcGFyc2Ug
ZXF1YXRpb25zIGxpa2UgJ2V2ZW4nLCAnb2RkJywgJzUnLCAnMm4nLCAnM24rMicsICc0bi0xJywg
Jy1uKzYnCisJCQkJdmFyIHRlc3QgPSAvKC0/KShcZCopKD86bihbK1wtXT9cZCopKT8vLmV4ZWMo
CisJCQkJCW1hdGNoWzJdID09PSAiZXZlbiIgJiYgIjJuIiB8fCBtYXRjaFsyXSA9PT0gIm9kZCIg
JiYgIjJuKzEiIHx8CisJCQkJCSEvXEQvLnRlc3QoIG1hdGNoWzJdICkgJiYgIjBuKyIgKyBtYXRj
aFsyXSB8fCBtYXRjaFsyXSk7CisKKwkJCQkvLyBjYWxjdWxhdGUgdGhlIG51bWJlcnMgKGZpcnN0
KW4rKGxhc3QpIGluY2x1ZGluZyBpZiB0aGV5IGFyZSBuZWdhdGl2ZQorCQkJCW1hdGNoWzJdID0g
KHRlc3RbMV0gKyAodGVzdFsyXSB8fCAxKSkgLSAwOworCQkJCW1hdGNoWzNdID0gdGVzdFszXSAt
IDA7CisJCQl9CisJCQllbHNlIGlmICggbWF0Y2hbMl0gKSB7CisJCQkJU2l6emxlLmVycm9yKCBt
YXRjaFswXSApOworCQkJfQorCisJCQkvLyBUT0RPOiBNb3ZlIHRvIG5vcm1hbCBjYWNoaW5nIHN5
c3RlbQorCQkJbWF0Y2hbMF0gPSBkb25lKys7CisKKwkJCXJldHVybiBtYXRjaDsKKwkJfSwKKwor
CQlBVFRSOiBmdW5jdGlvbiggbWF0Y2gsIGN1ckxvb3AsIGlucGxhY2UsIHJlc3VsdCwgbm90LCBp
c1hNTCApIHsKKwkJCXZhciBuYW1lID0gbWF0Y2hbMV0gPSBtYXRjaFsxXS5yZXBsYWNlKCByQmFj
a3NsYXNoLCAiIiApOworCQkJCisJCQlpZiAoICFpc1hNTCAmJiBFeHByLmF0dHJNYXBbbmFtZV0g
KSB7CisJCQkJbWF0Y2hbMV0gPSBFeHByLmF0dHJNYXBbbmFtZV07CisJCQl9CisKKwkJCS8vIEhh
bmRsZSBpZiBhbiB1bi1xdW90ZWQgdmFsdWUgd2FzIHVzZWQKKwkJCW1hdGNoWzRdID0gKCBtYXRj
aFs0XSB8fCBtYXRjaFs1XSB8fCAiIiApLnJlcGxhY2UoIHJCYWNrc2xhc2gsICIiICk7CisKKwkJ
CWlmICggbWF0Y2hbMl0gPT09ICJ+PSIgKSB7CisJCQkJbWF0Y2hbNF0gPSAiICIgKyBtYXRjaFs0
XSArICIgIjsKKwkJCX0KKworCQkJcmV0dXJuIG1hdGNoOworCQl9LAorCisJCVBTRVVETzogZnVu
Y3Rpb24oIG1hdGNoLCBjdXJMb29wLCBpbnBsYWNlLCByZXN1bHQsIG5vdCApIHsKKwkJCWlmICgg
bWF0Y2hbMV0gPT09ICJub3QiICkgeworCQkJCS8vIElmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGNv
bXBsZXggZXhwcmVzc2lvbiwgb3IgYSBzaW1wbGUgb25lCisJCQkJaWYgKCAoIGNodW5rZXIuZXhl
YyhtYXRjaFszXSkgfHwgIiIgKS5sZW5ndGggPiAxIHx8IC9eXHcvLnRlc3QobWF0Y2hbM10pICkg
eworCQkJCQltYXRjaFszXSA9IFNpenpsZShtYXRjaFszXSwgbnVsbCwgbnVsbCwgY3VyTG9vcCk7
CisKKwkJCQl9IGVsc2UgeworCQkJCQl2YXIgcmV0ID0gU2l6emxlLmZpbHRlcihtYXRjaFszXSwg
Y3VyTG9vcCwgaW5wbGFjZSwgdHJ1ZSBeIG5vdCk7CisKKwkJCQkJaWYgKCAhaW5wbGFjZSApIHsK
KwkJCQkJCXJlc3VsdC5wdXNoLmFwcGx5KCByZXN1bHQsIHJldCApOworCQkJCQl9CisKKwkJCQkJ
cmV0dXJuIGZhbHNlOworCQkJCX0KKworCQkJfSBlbHNlIGlmICggRXhwci5tYXRjaC5QT1MudGVz
dCggbWF0Y2hbMF0gKSB8fCBFeHByLm1hdGNoLkNISUxELnRlc3QoIG1hdGNoWzBdICkgKSB7CisJ
CQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQkKKwkJCXJldHVybiBtYXRjaDsKKwkJfSwKKworCQlQ
T1M6IGZ1bmN0aW9uKCBtYXRjaCApIHsKKwkJCW1hdGNoLnVuc2hpZnQoIHRydWUgKTsKKworCQkJ
cmV0dXJuIG1hdGNoOworCQl9CisJfSwKKwkKKwlmaWx0ZXJzOiB7CisJCWVuYWJsZWQ6IGZ1bmN0
aW9uKCBlbGVtICkgeworCQkJcmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGZhbHNlICYmIGVsZW0u
dHlwZSAhPT0gImhpZGRlbiI7CisJCX0sCisKKwkJZGlzYWJsZWQ6IGZ1bmN0aW9uKCBlbGVtICkg
eworCQkJcmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IHRydWU7CisJCX0sCisKKwkJY2hlY2tlZDog
ZnVuY3Rpb24oIGVsZW0gKSB7CisJCQlyZXR1cm4gZWxlbS5jaGVja2VkID09PSB0cnVlOworCQl9
LAorCQkKKwkJc2VsZWN0ZWQ6IGZ1bmN0aW9uKCBlbGVtICkgeworCQkJLy8gQWNjZXNzaW5nIHRo
aXMgcHJvcGVydHkgbWFrZXMgc2VsZWN0ZWQtYnktZGVmYXVsdAorCQkJLy8gb3B0aW9ucyBpbiBT
YWZhcmkgd29yayBwcm9wZXJseQorCQkJaWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7CisJCQkJZWxl
bS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7CisJCQl9CisJCQkKKwkJCXJldHVybiBlbGVtLnNl
bGVjdGVkID09PSB0cnVlOworCQl9LAorCisJCXBhcmVudDogZnVuY3Rpb24oIGVsZW0gKSB7CisJ
CQlyZXR1cm4gISFlbGVtLmZpcnN0Q2hpbGQ7CisJCX0sCisKKwkJZW1wdHk6IGZ1bmN0aW9uKCBl
bGVtICkgeworCQkJcmV0dXJuICFlbGVtLmZpcnN0Q2hpbGQ7CisJCX0sCisKKwkJaGFzOiBmdW5j
dGlvbiggZWxlbSwgaSwgbWF0Y2ggKSB7CisJCQlyZXR1cm4gISFTaXp6bGUoIG1hdGNoWzNdLCBl
bGVtICkubGVuZ3RoOworCQl9LAorCisJCWhlYWRlcjogZnVuY3Rpb24oIGVsZW0gKSB7CisJCQly
ZXR1cm4gKC9oXGQvaSkudGVzdCggZWxlbS5ub2RlTmFtZSApOworCQl9LAorCisJCXRleHQ6IGZ1
bmN0aW9uKCBlbGVtICkgeworCQkJLy8gSUU2IGFuZCA3IHdpbGwgbWFwIGVsZW0udHlwZSB0byAn
dGV4dCcgZm9yIG5ldyBIVE1MNSB0eXBlcyAoc2VhcmNoLCBldGMpIAorCQkJLy8gdXNlIGdldEF0
dHJpYnV0ZSBpbnN0ZWFkIHRvIHRlc3QgdGhpcyBjYXNlCisJCQlyZXR1cm4gInRleHQiID09PSBl
bGVtLmdldEF0dHJpYnV0ZSggJ3R5cGUnICk7CisJCX0sCisJCXJhZGlvOiBmdW5jdGlvbiggZWxl
bSApIHsKKwkJCXJldHVybiAicmFkaW8iID09PSBlbGVtLnR5cGU7CisJCX0sCisKKwkJY2hlY2ti
b3g6IGZ1bmN0aW9uKCBlbGVtICkgeworCQkJcmV0dXJuICJjaGVja2JveCIgPT09IGVsZW0udHlw
ZTsKKwkJfSwKKworCQlmaWxlOiBmdW5jdGlvbiggZWxlbSApIHsKKwkJCXJldHVybiAiZmlsZSIg
PT09IGVsZW0udHlwZTsKKwkJfSwKKwkJcGFzc3dvcmQ6IGZ1bmN0aW9uKCBlbGVtICkgeworCQkJ
cmV0dXJuICJwYXNzd29yZCIgPT09IGVsZW0udHlwZTsKKwkJfSwKKworCQlzdWJtaXQ6IGZ1bmN0
aW9uKCBlbGVtICkgeworCQkJcmV0dXJuICJzdWJtaXQiID09PSBlbGVtLnR5cGU7CisJCX0sCisK
KwkJaW1hZ2U6IGZ1bmN0aW9uKCBlbGVtICkgeworCQkJcmV0dXJuICJpbWFnZSIgPT09IGVsZW0u
dHlwZTsKKwkJfSwKKworCQlyZXNldDogZnVuY3Rpb24oIGVsZW0gKSB7CisJCQlyZXR1cm4gInJl
c2V0IiA9PT0gZWxlbS50eXBlOworCQl9LAorCisJCWJ1dHRvbjogZnVuY3Rpb24oIGVsZW0gKSB7
CisJCQlyZXR1cm4gImJ1dHRvbiIgPT09IGVsZW0udHlwZSB8fCBlbGVtLm5vZGVOYW1lLnRvTG93
ZXJDYXNlKCkgPT09ICJidXR0b24iOworCQl9LAorCisJCWlucHV0OiBmdW5jdGlvbiggZWxlbSAp
IHsKKwkJCXJldHVybiAoL2lucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24vaSkudGVzdCggZWxl
bS5ub2RlTmFtZSApOworCQl9CisJfSwKKwlzZXRGaWx0ZXJzOiB7CisJCWZpcnN0OiBmdW5jdGlv
biggZWxlbSwgaSApIHsKKwkJCXJldHVybiBpID09PSAwOworCQl9LAorCisJCWxhc3Q6IGZ1bmN0
aW9uKCBlbGVtLCBpLCBtYXRjaCwgYXJyYXkgKSB7CisJCQlyZXR1cm4gaSA9PT0gYXJyYXkubGVu
Z3RoIC0gMTsKKwkJfSwKKworCQlldmVuOiBmdW5jdGlvbiggZWxlbSwgaSApIHsKKwkJCXJldHVy
biBpICUgMiA9PT0gMDsKKwkJfSwKKworCQlvZGQ6IGZ1bmN0aW9uKCBlbGVtLCBpICkgeworCQkJ
cmV0dXJuIGkgJSAyID09PSAxOworCQl9LAorCisJCWx0OiBmdW5jdGlvbiggZWxlbSwgaSwgbWF0
Y2ggKSB7CisJCQlyZXR1cm4gaSA8IG1hdGNoWzNdIC0gMDsKKwkJfSwKKworCQlndDogZnVuY3Rp
b24oIGVsZW0sIGksIG1hdGNoICkgeworCQkJcmV0dXJuIGkgPiBtYXRjaFszXSAtIDA7CisJCX0s
CisKKwkJbnRoOiBmdW5jdGlvbiggZWxlbSwgaSwgbWF0Y2ggKSB7CisJCQlyZXR1cm4gbWF0Y2hb
M10gLSAwID09PSBpOworCQl9LAorCisJCWVxOiBmdW5jdGlvbiggZWxlbSwgaSwgbWF0Y2ggKSB7
CisJCQlyZXR1cm4gbWF0Y2hbM10gLSAwID09PSBpOworCQl9CisJfSwKKwlmaWx0ZXI6IHsKKwkJ
UFNFVURPOiBmdW5jdGlvbiggZWxlbSwgbWF0Y2gsIGksIGFycmF5ICkgeworCQkJdmFyIG5hbWUg
PSBtYXRjaFsxXSwKKwkJCQlmaWx0ZXIgPSBFeHByLmZpbHRlcnNbIG5hbWUgXTsKKworCQkJaWYg
KCBmaWx0ZXIgKSB7CisJCQkJcmV0dXJuIGZpbHRlciggZWxlbSwgaSwgbWF0Y2gsIGFycmF5ICk7
CisKKwkJCX0gZWxzZSBpZiAoIG5hbWUgPT09ICJjb250YWlucyIgKSB7CisJCQkJcmV0dXJuIChl
bGVtLnRleHRDb250ZW50IHx8IGVsZW0uaW5uZXJUZXh0IHx8IFNpenpsZS5nZXRUZXh0KFsgZWxl
bSBdKSB8fCAiIikuaW5kZXhPZihtYXRjaFszXSkgPj0gMDsKKworCQkJfSBlbHNlIGlmICggbmFt
ZSA9PT0gIm5vdCIgKSB7CisJCQkJdmFyIG5vdCA9IG1hdGNoWzNdOworCisJCQkJZm9yICggdmFy
IGogPSAwLCBsID0gbm90Lmxlbmd0aDsgaiA8IGw7IGorKyApIHsKKwkJCQkJaWYgKCBub3Rbal0g
PT09IGVsZW0gKSB7CisJCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJCX0KKwkJCQl9CisKKwkJCQly
ZXR1cm4gdHJ1ZTsKKworCQkJfSBlbHNlIHsKKwkJCQlTaXp6bGUuZXJyb3IoIG5hbWUgKTsKKwkJ
CX0KKwkJfSwKKworCQlDSElMRDogZnVuY3Rpb24oIGVsZW0sIG1hdGNoICkgeworCQkJdmFyIHR5
cGUgPSBtYXRjaFsxXSwKKwkJCQlub2RlID0gZWxlbTsKKworCQkJc3dpdGNoICggdHlwZSApIHsK
KwkJCQljYXNlICJvbmx5IjoKKwkJCQljYXNlICJmaXJzdCI6CisJCQkJCXdoaWxlICggKG5vZGUg
PSBub2RlLnByZXZpb3VzU2libGluZykgKQkgeworCQkJCQkJaWYgKCBub2RlLm5vZGVUeXBlID09
PSAxICkgeyAKKwkJCQkJCQlyZXR1cm4gZmFsc2U7IAorCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJ
aWYgKCB0eXBlID09PSAiZmlyc3QiICkgeyAKKwkJCQkJCXJldHVybiB0cnVlOyAKKwkJCQkJfQor
CisJCQkJCW5vZGUgPSBlbGVtOworCisJCQkJY2FzZSAibGFzdCI6CisJCQkJCXdoaWxlICggKG5v
ZGUgPSBub2RlLm5leHRTaWJsaW5nKSApCSB7CisJCQkJCQlpZiAoIG5vZGUubm9kZVR5cGUgPT09
IDEgKSB7IAorCQkJCQkJCXJldHVybiBmYWxzZTsgCisJCQkJCQl9CisJCQkJCX0KKworCQkJCQly
ZXR1cm4gdHJ1ZTsKKworCQkJCWNhc2UgIm50aCI6CisJCQkJCXZhciBmaXJzdCA9IG1hdGNoWzJd
LAorCQkJCQkJbGFzdCA9IG1hdGNoWzNdOworCisJCQkJCWlmICggZmlyc3QgPT09IDEgJiYgbGFz
dCA9PT0gMCApIHsKKwkJCQkJCXJldHVybiB0cnVlOworCQkJCQl9CisJCQkJCQorCQkJCQl2YXIg
ZG9uZU5hbWUgPSBtYXRjaFswXSwKKwkJCQkJCXBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTsKKwkK
KwkJCQkJaWYgKCBwYXJlbnQgJiYgKHBhcmVudC5zaXpjYWNoZSAhPT0gZG9uZU5hbWUgfHwgIWVs
ZW0ubm9kZUluZGV4KSApIHsKKwkJCQkJCXZhciBjb3VudCA9IDA7CisJCQkJCQkKKwkJCQkJCWZv
ciAoIG5vZGUgPSBwYXJlbnQuZmlyc3RDaGlsZDsgbm9kZTsgbm9kZSA9IG5vZGUubmV4dFNpYmxp
bmcgKSB7CisJCQkJCQkJaWYgKCBub2RlLm5vZGVUeXBlID09PSAxICkgeworCQkJCQkJCQlub2Rl
Lm5vZGVJbmRleCA9ICsrY291bnQ7CisJCQkJCQkJfQorCQkJCQkJfSAKKworCQkJCQkJcGFyZW50
LnNpemNhY2hlID0gZG9uZU5hbWU7CisJCQkJCX0KKwkJCQkJCisJCQkJCXZhciBkaWZmID0gZWxl
bS5ub2RlSW5kZXggLSBsYXN0OworCisJCQkJCWlmICggZmlyc3QgPT09IDAgKSB7CisJCQkJCQly
ZXR1cm4gZGlmZiA9PT0gMDsKKworCQkJCQl9IGVsc2UgeworCQkJCQkJcmV0dXJuICggZGlmZiAl
IGZpcnN0ID09PSAwICYmIGRpZmYgLyBmaXJzdCA+PSAwICk7CisJCQkJCX0KKwkJCX0KKwkJfSwK
KworCQlJRDogZnVuY3Rpb24oIGVsZW0sIG1hdGNoICkgeworCQkJcmV0dXJuIGVsZW0ubm9kZVR5
cGUgPT09IDEgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoImlkIikgPT09IG1hdGNoOworCQl9LAorCisJ
CVRBRzogZnVuY3Rpb24oIGVsZW0sIG1hdGNoICkgeworCQkJcmV0dXJuIChtYXRjaCA9PT0gIioi
ICYmIGVsZW0ubm9kZVR5cGUgPT09IDEpIHx8IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9
PT0gbWF0Y2g7CisJCX0sCisJCQorCQlDTEFTUzogZnVuY3Rpb24oIGVsZW0sIG1hdGNoICkgewor
CQkJcmV0dXJuICgiICIgKyAoZWxlbS5jbGFzc05hbWUgfHwgZWxlbS5nZXRBdHRyaWJ1dGUoImNs
YXNzIikpICsgIiAiKQorCQkJCS5pbmRleE9mKCBtYXRjaCApID4gLTE7CisJCX0sCisKKwkJQVRU
UjogZnVuY3Rpb24oIGVsZW0sIG1hdGNoICkgeworCQkJdmFyIG5hbWUgPSBtYXRjaFsxXSwKKwkJ
CQlyZXN1bHQgPSBFeHByLmF0dHJIYW5kbGVbIG5hbWUgXSA/CisJCQkJCUV4cHIuYXR0ckhhbmRs
ZVsgbmFtZSBdKCBlbGVtICkgOgorCQkJCQllbGVtWyBuYW1lIF0gIT0gbnVsbCA/CisJCQkJCQll
bGVtWyBuYW1lIF0gOgorCQkJCQkJZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKSwKKwkJCQl2YWx1
ZSA9IHJlc3VsdCArICIiLAorCQkJCXR5cGUgPSBtYXRjaFsyXSwKKwkJCQljaGVjayA9IG1hdGNo
WzRdOworCisJCQlyZXR1cm4gcmVzdWx0ID09IG51bGwgPworCQkJCXR5cGUgPT09ICIhPSIgOgor
CQkJCXR5cGUgPT09ICI9IiA/CisJCQkJdmFsdWUgPT09IGNoZWNrIDoKKwkJCQl0eXBlID09PSAi
Kj0iID8KKwkJCQl2YWx1ZS5pbmRleE9mKGNoZWNrKSA+PSAwIDoKKwkJCQl0eXBlID09PSAifj0i
ID8KKwkJCQkoIiAiICsgdmFsdWUgKyAiICIpLmluZGV4T2YoY2hlY2spID49IDAgOgorCQkJCSFj
aGVjayA/CisJCQkJdmFsdWUgJiYgcmVzdWx0ICE9PSBmYWxzZSA6CisJCQkJdHlwZSA9PT0gIiE9
IiA/CisJCQkJdmFsdWUgIT09IGNoZWNrIDoKKwkJCQl0eXBlID09PSAiXj0iID8KKwkJCQl2YWx1
ZS5pbmRleE9mKGNoZWNrKSA9PT0gMCA6CisJCQkJdHlwZSA9PT0gIiQ9IiA/CisJCQkJdmFsdWUu
c3Vic3RyKHZhbHVlLmxlbmd0aCAtIGNoZWNrLmxlbmd0aCkgPT09IGNoZWNrIDoKKwkJCQl0eXBl
ID09PSAifD0iID8KKwkJCQl2YWx1ZSA9PT0gY2hlY2sgfHwgdmFsdWUuc3Vic3RyKDAsIGNoZWNr
Lmxlbmd0aCArIDEpID09PSBjaGVjayArICItIiA6CisJCQkJZmFsc2U7CisJCX0sCisKKwkJUE9T
OiBmdW5jdGlvbiggZWxlbSwgbWF0Y2gsIGksIGFycmF5ICkgeworCQkJdmFyIG5hbWUgPSBtYXRj
aFsyXSwKKwkJCQlmaWx0ZXIgPSBFeHByLnNldEZpbHRlcnNbIG5hbWUgXTsKKworCQkJaWYgKCBm
aWx0ZXIgKSB7CisJCQkJcmV0dXJuIGZpbHRlciggZWxlbSwgaSwgbWF0Y2gsIGFycmF5ICk7CisJ
CQl9CisJCX0KKwl9Cit9OworCit2YXIgb3JpZ1BPUyA9IEV4cHIubWF0Y2guUE9TLAorCWZlc2Nh
cGUgPSBmdW5jdGlvbihhbGwsIG51bSl7CisJCXJldHVybiAiXFwiICsgKG51bSAtIDAgKyAxKTsK
Kwl9OworCitmb3IgKCB2YXIgdHlwZSBpbiBFeHByLm1hdGNoICkgeworCUV4cHIubWF0Y2hbIHR5
cGUgXSA9IG5ldyBSZWdFeHAoIEV4cHIubWF0Y2hbIHR5cGUgXS5zb3VyY2UgKyAoLyg/IVteXFtd
KlxdKSg/IVteXChdKlwpKS8uc291cmNlKSApOworCUV4cHIubGVmdE1hdGNoWyB0eXBlIF0gPSBu
ZXcgUmVnRXhwKCAvKF4oPzoufFxyfFxuKSo/KS8uc291cmNlICsgRXhwci5tYXRjaFsgdHlwZSBd
LnNvdXJjZS5yZXBsYWNlKC9cXChcZCspL2csIGZlc2NhcGUpICk7Cit9CisKK3ZhciBtYWtlQXJy
YXkgPSBmdW5jdGlvbiggYXJyYXksIHJlc3VsdHMgKSB7CisJYXJyYXkgPSBBcnJheS5wcm90b3R5
cGUuc2xpY2UuY2FsbCggYXJyYXksIDAgKTsKKworCWlmICggcmVzdWx0cyApIHsKKwkJcmVzdWx0
cy5wdXNoLmFwcGx5KCByZXN1bHRzLCBhcnJheSApOworCQlyZXR1cm4gcmVzdWx0czsKKwl9CisJ
CisJcmV0dXJuIGFycmF5OworfTsKKworLy8gUGVyZm9ybSBhIHNpbXBsZSBjaGVjayB0byBkZXRl
cm1pbmUgaWYgdGhlIGJyb3dzZXIgaXMgY2FwYWJsZSBvZgorLy8gY29udmVydGluZyBhIE5vZGVM
aXN0IHRvIGFuIGFycmF5IHVzaW5nIGJ1aWx0aW4gbWV0aG9kcy4KKy8vIEFsc28gdmVyaWZpZXMg
dGhhdCB0aGUgcmV0dXJuZWQgYXJyYXkgaG9sZHMgRE9NIG5vZGVzCisvLyAod2hpY2ggaXMgbm90
IHRoZSBjYXNlIGluIHRoZSBCbGFja2JlcnJ5IGJyb3dzZXIpCit0cnkgeworCUFycmF5LnByb3Rv
dHlwZS5zbGljZS5jYWxsKCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2RlcywgMCAp
WzBdLm5vZGVUeXBlOworCisvLyBQcm92aWRlIGEgZmFsbGJhY2sgbWV0aG9kIGlmIGl0IGRvZXMg
bm90IHdvcmsKK30gY2F0Y2goIGUgKSB7CisJbWFrZUFycmF5ID0gZnVuY3Rpb24oIGFycmF5LCBy
ZXN1bHRzICkgeworCQl2YXIgaSA9IDAsCisJCQlyZXQgPSByZXN1bHRzIHx8IFtdOworCisJCWlm
ICggdG9TdHJpbmcuY2FsbChhcnJheSkgPT09ICJbb2JqZWN0IEFycmF5XSIgKSB7CisJCQlBcnJh
eS5wcm90b3R5cGUucHVzaC5hcHBseSggcmV0LCBhcnJheSApOworCisJCX0gZWxzZSB7CisJCQlp
ZiAoIHR5cGVvZiBhcnJheS5sZW5ndGggPT09ICJudW1iZXIiICkgeworCQkJCWZvciAoIHZhciBs
ID0gYXJyYXkubGVuZ3RoOyBpIDwgbDsgaSsrICkgeworCQkJCQlyZXQucHVzaCggYXJyYXlbaV0g
KTsKKwkJCQl9CisKKwkJCX0gZWxzZSB7CisJCQkJZm9yICggOyBhcnJheVtpXTsgaSsrICkgewor
CQkJCQlyZXQucHVzaCggYXJyYXlbaV0gKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlyZXR1cm4g
cmV0OworCX07Cit9CisKK3ZhciBzb3J0T3JkZXIsIHNpYmxpbmdDaGVjazsKKworaWYgKCBkb2N1
bWVudC5kb2N1bWVudEVsZW1lbnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24gKSB7CisJc29ydE9y
ZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7CisJCWlmICggYSA9PT0gYiApIHsKKwkJCWhhc0R1cGxp
Y2F0ZSA9IHRydWU7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWlmICggIWEuY29tcGFyZURvY3Vt
ZW50UG9zaXRpb24gfHwgIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb24gKSB7CisJCQlyZXR1cm4g
YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiA/IC0xIDogMTsKKwkJfQorCisJCXJldHVybiBhLmNv
bXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpICYgNCA/IC0xIDogMTsKKwl9OworCit9IGVsc2Ugewor
CXNvcnRPcmRlciA9IGZ1bmN0aW9uKCBhLCBiICkgeworCQl2YXIgYWwsIGJsLAorCQkJYXAgPSBb
XSwKKwkJCWJwID0gW10sCisJCQlhdXAgPSBhLnBhcmVudE5vZGUsCisJCQlidXAgPSBiLnBhcmVu
dE5vZGUsCisJCQljdXIgPSBhdXA7CisKKwkJLy8gVGhlIG5vZGVzIGFyZSBpZGVudGljYWwsIHdl
IGNhbiBleGl0IGVhcmx5CisJCWlmICggYSA9PT0gYiApIHsKKwkJCWhhc0R1cGxpY2F0ZSA9IHRy
dWU7CisJCQlyZXR1cm4gMDsKKworCQkvLyBJZiB0aGUgbm9kZXMgYXJlIHNpYmxpbmdzIChvciBp
ZGVudGljYWwpIHdlIGNhbiBkbyBhIHF1aWNrIGNoZWNrCisJCX0gZWxzZSBpZiAoIGF1cCA9PT0g
YnVwICkgeworCQkJcmV0dXJuIHNpYmxpbmdDaGVjayggYSwgYiApOworCisJCS8vIElmIG5vIHBh
cmVudHMgd2VyZSBmb3VuZCB0aGVuIHRoZSBub2RlcyBhcmUgZGlzY29ubmVjdGVkCisJCX0gZWxz
ZSBpZiAoICFhdXAgKSB7CisJCQlyZXR1cm4gLTE7CisKKwkJfSBlbHNlIGlmICggIWJ1cCApIHsK
KwkJCXJldHVybiAxOworCQl9CisKKwkJLy8gT3RoZXJ3aXNlIHRoZXkncmUgc29tZXdoZXJlIGVs
c2UgaW4gdGhlIHRyZWUgc28gd2UgbmVlZAorCQkvLyB0byBidWlsZCB1cCBhIGZ1bGwgbGlzdCBv
ZiB0aGUgcGFyZW50Tm9kZXMgZm9yIGNvbXBhcmlzb24KKwkJd2hpbGUgKCBjdXIgKSB7CisJCQlh
cC51bnNoaWZ0KCBjdXIgKTsKKwkJCWN1ciA9IGN1ci5wYXJlbnROb2RlOworCQl9CisKKwkJY3Vy
ID0gYnVwOworCisJCXdoaWxlICggY3VyICkgeworCQkJYnAudW5zaGlmdCggY3VyICk7CisJCQlj
dXIgPSBjdXIucGFyZW50Tm9kZTsKKwkJfQorCisJCWFsID0gYXAubGVuZ3RoOworCQlibCA9IGJw
Lmxlbmd0aDsKKworCQkvLyBTdGFydCB3YWxraW5nIGRvd24gdGhlIHRyZWUgbG9va2luZyBmb3Ig
YSBkaXNjcmVwYW5jeQorCQlmb3IgKCB2YXIgaSA9IDA7IGkgPCBhbCAmJiBpIDwgYmw7IGkrKyAp
IHsKKwkJCWlmICggYXBbaV0gIT09IGJwW2ldICkgeworCQkJCXJldHVybiBzaWJsaW5nQ2hlY2so
IGFwW2ldLCBicFtpXSApOworCQkJfQorCQl9CisKKwkJLy8gV2UgZW5kZWQgc29tZXBsYWNlIHVw
IHRoZSB0cmVlIHNvIGRvIGEgc2libGluZyBjaGVjaworCQlyZXR1cm4gaSA9PT0gYWwgPworCQkJ
c2libGluZ0NoZWNrKCBhLCBicFtpXSwgLTEgKSA6CisJCQlzaWJsaW5nQ2hlY2soIGFwW2ldLCBi
LCAxICk7CisJfTsKKworCXNpYmxpbmdDaGVjayA9IGZ1bmN0aW9uKCBhLCBiLCByZXQgKSB7CisJ
CWlmICggYSA9PT0gYiApIHsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQl2YXIgY3VyID0gYS5u
ZXh0U2libGluZzsKKworCQl3aGlsZSAoIGN1ciApIHsKKwkJCWlmICggY3VyID09PSBiICkgewor
CQkJCXJldHVybiAtMTsKKwkJCX0KKworCQkJY3VyID0gY3VyLm5leHRTaWJsaW5nOworCQl9CisK
KwkJcmV0dXJuIDE7CisJfTsKK30KKworLy8gVXRpbGl0eSBmdW5jdGlvbiBmb3IgcmV0cmVpdmlu
ZyB0aGUgdGV4dCB2YWx1ZSBvZiBhbiBhcnJheSBvZiBET00gbm9kZXMKK1NpenpsZS5nZXRUZXh0
ID0gZnVuY3Rpb24oIGVsZW1zICkgeworCXZhciByZXQgPSAiIiwgZWxlbTsKKworCWZvciAoIHZh
ciBpID0gMDsgZWxlbXNbaV07IGkrKyApIHsKKwkJZWxlbSA9IGVsZW1zW2ldOworCisJCS8vIEdl
dCB0aGUgdGV4dCBmcm9tIHRleHQgbm9kZXMgYW5kIENEQVRBIG5vZGVzCisJCWlmICggZWxlbS5u
b2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA0ICkgeworCQkJcmV0ICs9IGVsZW0u
bm9kZVZhbHVlOworCisJCS8vIFRyYXZlcnNlIGV2ZXJ5dGhpbmcgZWxzZSwgZXhjZXB0IGNvbW1l
bnQgbm9kZXMKKwkJfSBlbHNlIGlmICggZWxlbS5ub2RlVHlwZSAhPT0gOCApIHsKKwkJCXJldCAr
PSBTaXp6bGUuZ2V0VGV4dCggZWxlbS5jaGlsZE5vZGVzICk7CisJCX0KKwl9CisKKwlyZXR1cm4g
cmV0OworfTsKKworLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBicm93c2VyIHJldHVybnMgZWxlbWVu
dHMgYnkgbmFtZSB3aGVuCisvLyBxdWVyeWluZyBieSBnZXRFbGVtZW50QnlJZCAoYW5kIHByb3Zp
ZGUgYSB3b3JrYXJvdW5kKQorKGZ1bmN0aW9uKCl7CisJLy8gV2UncmUgZ29pbmcgdG8gaW5qZWN0
IGEgZmFrZSBpbnB1dCBlbGVtZW50IHdpdGggYSBzcGVjaWZpZWQgbmFtZQorCXZhciBmb3JtID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksCisJCWlkID0gInNjcmlwdCIgKyAobmV3IERh
dGUoKSkuZ2V0VGltZSgpLAorCQlyb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OworCisJ
Zm9ybS5pbm5lckhUTUwgPSAiPGEgbmFtZT0nIiArIGlkICsgIicvPiI7CisKKwkvLyBJbmplY3Qg
aXQgaW50byB0aGUgcm9vdCBlbGVtZW50LCBjaGVjayBpdHMgc3RhdHVzLCBhbmQgcmVtb3ZlIGl0
IHF1aWNrbHkKKwlyb290Lmluc2VydEJlZm9yZSggZm9ybSwgcm9vdC5maXJzdENoaWxkICk7CisK
KwkvLyBUaGUgd29ya2Fyb3VuZCBoYXMgdG8gZG8gYWRkaXRpb25hbCBjaGVja3MgYWZ0ZXIgYSBn
ZXRFbGVtZW50QnlJZAorCS8vIFdoaWNoIHNsb3dzIHRoaW5ncyBkb3duIGZvciBvdGhlciBicm93
c2VycyAoaGVuY2UgdGhlIGJyYW5jaGluZykKKwlpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCBpZCApICkgeworCQlFeHByLmZpbmQuSUQgPSBmdW5jdGlvbiggbWF0Y2gsIGNvbnRleHQsIGlz
WE1MICkgeworCQkJaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gInVuZGVm
aW5lZCIgJiYgIWlzWE1MICkgeworCQkJCXZhciBtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCht
YXRjaFsxXSk7CisKKwkJCQlyZXR1cm4gbSA/CisJCQkJCW0uaWQgPT09IG1hdGNoWzFdIHx8IHR5
cGVvZiBtLmdldEF0dHJpYnV0ZU5vZGUgIT09ICJ1bmRlZmluZWQiICYmIG0uZ2V0QXR0cmlidXRl
Tm9kZSgiaWQiKS5ub2RlVmFsdWUgPT09IG1hdGNoWzFdID8KKwkJCQkJCVttXSA6CisJCQkJCQl1
bmRlZmluZWQgOgorCQkJCQlbXTsKKwkJCX0KKwkJfTsKKworCQlFeHByLmZpbHRlci5JRCA9IGZ1
bmN0aW9uKCBlbGVtLCBtYXRjaCApIHsKKwkJCXZhciBub2RlID0gdHlwZW9mIGVsZW0uZ2V0QXR0
cmlidXRlTm9kZSAhPT0gInVuZGVmaW5lZCIgJiYgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIp
OworCisJCQlyZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiBub2RlICYmIG5vZGUubm9kZVZh
bHVlID09PSBtYXRjaDsKKwkJfTsKKwl9CisKKwlyb290LnJlbW92ZUNoaWxkKCBmb3JtICk7CisK
KwkvLyByZWxlYXNlIG1lbW9yeSBpbiBJRQorCXJvb3QgPSBmb3JtID0gbnVsbDsKK30pKCk7CisK
KyhmdW5jdGlvbigpeworCS8vIENoZWNrIHRvIHNlZSBpZiB0aGUgYnJvd3NlciByZXR1cm5zIG9u
bHkgZWxlbWVudHMKKwkvLyB3aGVuIGRvaW5nIGdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikKKwor
CS8vIENyZWF0ZSBhIGZha2UgZWxlbWVudAorCXZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKTsKKwlkaXYuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIiIp
ICk7CisKKwkvLyBNYWtlIHN1cmUgbm8gY29tbWVudHMgYXJlIGZvdW5kCisJaWYgKCBkaXYuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGggPiAwICkgeworCQlFeHByLmZpbmQuVEFHID0g
ZnVuY3Rpb24oIG1hdGNoLCBjb250ZXh0ICkgeworCQkJdmFyIHJlc3VsdHMgPSBjb250ZXh0Lmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCBtYXRjaFsxXSApOworCisJCQkvLyBGaWx0ZXIgb3V0IHBvc3Np
YmxlIGNvbW1lbnRzCisJCQlpZiAoIG1hdGNoWzFdID09PSAiKiIgKSB7CisJCQkJdmFyIHRtcCA9
IFtdOworCisJCQkJZm9yICggdmFyIGkgPSAwOyByZXN1bHRzW2ldOyBpKysgKSB7CisJCQkJCWlm
ICggcmVzdWx0c1tpXS5ub2RlVHlwZSA9PT0gMSApIHsKKwkJCQkJCXRtcC5wdXNoKCByZXN1bHRz
W2ldICk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlyZXN1bHRzID0gdG1wOworCQkJfQorCisJCQly
ZXR1cm4gcmVzdWx0czsKKwkJfTsKKwl9CisKKwkvLyBDaGVjayB0byBzZWUgaWYgYW4gYXR0cmli
dXRlIHJldHVybnMgbm9ybWFsaXplZCBocmVmIGF0dHJpYnV0ZXMKKwlkaXYuaW5uZXJIVE1MID0g
IjxhIGhyZWY9JyMnPjwvYT4iOworCisJaWYgKCBkaXYuZmlyc3RDaGlsZCAmJiB0eXBlb2YgZGl2
LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlICE9PSAidW5kZWZpbmVkIiAmJgorCQkJZGl2LmZpcnN0
Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIikgIT09ICIjIiApIHsKKworCQlFeHByLmF0dHJIYW5k
bGUuaHJlZiA9IGZ1bmN0aW9uKCBlbGVtICkgeworCQkJcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRl
KCAiaHJlZiIsIDIgKTsKKwkJfTsKKwl9CisKKwkvLyByZWxlYXNlIG1lbW9yeSBpbiBJRQorCWRp
diA9IG51bGw7Cit9KSgpOworCitpZiAoIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwgKSB7CisJ
KGZ1bmN0aW9uKCl7CisJCXZhciBvbGRTaXp6bGUgPSBTaXp6bGUsCisJCQlkaXYgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJkaXYiKSwKKwkJCWlkID0gIl9fc2l6emxlX18iOworCisJCWRpdi5p
bm5lckhUTUwgPSAiPHAgY2xhc3M9J1RFU1QnPjwvcD4iOworCisJCS8vIFNhZmFyaSBjYW4ndCBo
YW5kbGUgdXBwZXJjYXNlIG9yIHVuaWNvZGUgY2hhcmFjdGVycyB3aGVuCisJCS8vIGluIHF1aXJr
cyBtb2RlLgorCQlpZiAoIGRpdi5xdWVyeVNlbGVjdG9yQWxsICYmIGRpdi5xdWVyeVNlbGVjdG9y
QWxsKCIuVEVTVCIpLmxlbmd0aCA9PT0gMCApIHsKKwkJCXJldHVybjsKKwkJfQorCQorCQlTaXp6
bGUgPSBmdW5jdGlvbiggcXVlcnksIGNvbnRleHQsIGV4dHJhLCBzZWVkICkgeworCQkJY29udGV4
dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7CisKKwkJCS8vIE9ubHkgdXNlIHF1ZXJ5U2VsZWN0b3JB
bGwgb24gbm9uLVhNTCBkb2N1bWVudHMKKwkJCS8vIChJRCBzZWxlY3RvcnMgZG9uJ3Qgd29yayBp
biBub24tSFRNTCBkb2N1bWVudHMpCisJCQlpZiAoICFzZWVkICYmICFTaXp6bGUuaXNYTUwoY29u
dGV4dCkgKSB7CisJCQkJLy8gU2VlIGlmIHdlIGZpbmQgYSBzZWxlY3RvciB0byBzcGVlZCB1cAor
CQkJCXZhciBtYXRjaCA9IC9eKFx3KyQpfF5cLihbXHdcLV0rJCl8XiMoW1x3XC1dKyQpLy5leGVj
KCBxdWVyeSApOworCQkJCQorCQkJCWlmICggbWF0Y2ggJiYgKGNvbnRleHQubm9kZVR5cGUgPT09
IDEgfHwgY29udGV4dC5ub2RlVHlwZSA9PT0gOSkgKSB7CisJCQkJCS8vIFNwZWVkLXVwOiBTaXp6
bGUoIlRBRyIpCisJCQkJCWlmICggbWF0Y2hbMV0gKSB7CisJCQkJCQlyZXR1cm4gbWFrZUFycmF5
KCBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBxdWVyeSApLCBleHRyYSApOworCQkJCQkK
KwkJCQkJLy8gU3BlZWQtdXA6IFNpenpsZSgiLkNMQVNTIikKKwkJCQkJfSBlbHNlIGlmICggbWF0
Y2hbMl0gJiYgRXhwci5maW5kLkNMQVNTICYmIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFt
ZSApIHsKKwkJCQkJCXJldHVybiBtYWtlQXJyYXkoIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZSggbWF0Y2hbMl0gKSwgZXh0cmEgKTsKKwkJCQkJfQorCQkJCX0KKwkJCQkKKwkJCQlpZiAo
IGNvbnRleHQubm9kZVR5cGUgPT09IDkgKSB7CisJCQkJCS8vIFNwZWVkLXVwOiBTaXp6bGUoImJv
ZHkiKQorCQkJCQkvLyBUaGUgYm9keSBlbGVtZW50IG9ubHkgZXhpc3RzIG9uY2UsIG9wdGltaXpl
IGZpbmRpbmcgaXQKKwkJCQkJaWYgKCBxdWVyeSA9PT0gImJvZHkiICYmIGNvbnRleHQuYm9keSAp
IHsKKwkJCQkJCXJldHVybiBtYWtlQXJyYXkoIFsgY29udGV4dC5ib2R5IF0sIGV4dHJhICk7CisJ
CQkJCQkKKwkJCQkJLy8gU3BlZWQtdXA6IFNpenpsZSgiI0lEIikKKwkJCQkJfSBlbHNlIGlmICgg
bWF0Y2ggJiYgbWF0Y2hbM10gKSB7CisJCQkJCQl2YXIgZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVu
dEJ5SWQoIG1hdGNoWzNdICk7CisKKwkJCQkJCS8vIENoZWNrIHBhcmVudE5vZGUgdG8gY2F0Y2gg
d2hlbiBCbGFja2JlcnJ5IDQuNiByZXR1cm5zCisJCQkJCQkvLyBub2RlcyB0aGF0IGFyZSBubyBs
b25nZXIgaW4gdGhlIGRvY3VtZW50ICM2OTYzCisJCQkJCQlpZiAoIGVsZW0gJiYgZWxlbS5wYXJl
bnROb2RlICkgeworCQkJCQkJCS8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBJRSBhbmQgT3BlcmEg
cmV0dXJuIGl0ZW1zCisJCQkJCQkJLy8gYnkgbmFtZSBpbnN0ZWFkIG9mIElECisJCQkJCQkJaWYg
KCBlbGVtLmlkID09PSBtYXRjaFszXSApIHsKKwkJCQkJCQkJcmV0dXJuIG1ha2VBcnJheSggWyBl
bGVtIF0sIGV4dHJhICk7CisJCQkJCQkJfQorCQkJCQkJCQorCQkJCQkJfSBlbHNlIHsKKwkJCQkJ
CQlyZXR1cm4gbWFrZUFycmF5KCBbXSwgZXh0cmEgKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQkK
KwkJCQkJdHJ5IHsKKwkJCQkJCXJldHVybiBtYWtlQXJyYXkoIGNvbnRleHQucXVlcnlTZWxlY3Rv
ckFsbChxdWVyeSksIGV4dHJhICk7CisJCQkJCX0gY2F0Y2gocXNhRXJyb3IpIHt9CisKKwkJCQkv
LyBxU0Egd29ya3Mgc3RyYW5nZWx5IG9uIEVsZW1lbnQtcm9vdGVkIHF1ZXJpZXMKKwkJCQkvLyBX
ZSBjYW4gd29yayBhcm91bmQgdGhpcyBieSBzcGVjaWZ5aW5nIGFuIGV4dHJhIElEIG9uIHRoZSBy
b290CisJCQkJLy8gYW5kIHdvcmtpbmcgdXAgZnJvbSB0aGVyZSAoVGhhbmtzIHRvIEFuZHJldyBE
dXBvbnQgZm9yIHRoZSB0ZWNobmlxdWUpCisJCQkJLy8gSUUgOCBkb2Vzbid0IHdvcmsgb24gb2Jq
ZWN0IGVsZW1lbnRzCisJCQkJfSBlbHNlIGlmICggY29udGV4dC5ub2RlVHlwZSA9PT0gMSAmJiBj
b250ZXh0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICJvYmplY3QiICkgeworCQkJCQl2YXIg
b2xkQ29udGV4dCA9IGNvbnRleHQsCisJCQkJCQlvbGQgPSBjb250ZXh0LmdldEF0dHJpYnV0ZSgg
ImlkIiApLAorCQkJCQkJbmlkID0gb2xkIHx8IGlkLAorCQkJCQkJaGFzUGFyZW50ID0gY29udGV4
dC5wYXJlbnROb2RlLAorCQkJCQkJcmVsYXRpdmVIaWVyYXJjaHlTZWxlY3RvciA9IC9eXHMqWyt+
XS8udGVzdCggcXVlcnkgKTsKKworCQkJCQlpZiAoICFvbGQgKSB7CisJCQkJCQljb250ZXh0LnNl
dEF0dHJpYnV0ZSggImlkIiwgbmlkICk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQluaWQgPSBuaWQu
cmVwbGFjZSggLycvZywgIlxcJCYiICk7CisJCQkJCX0KKwkJCQkJaWYgKCByZWxhdGl2ZUhpZXJh
cmNoeVNlbGVjdG9yICYmIGhhc1BhcmVudCApIHsKKwkJCQkJCWNvbnRleHQgPSBjb250ZXh0LnBh
cmVudE5vZGU7CisJCQkJCX0KKworCQkJCQl0cnkgeworCQkJCQkJaWYgKCAhcmVsYXRpdmVIaWVy
YXJjaHlTZWxlY3RvciB8fCBoYXNQYXJlbnQgKSB7CisJCQkJCQkJcmV0dXJuIG1ha2VBcnJheSgg
Y29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCAiW2lkPSciICsgbmlkICsgIiddICIgKyBxdWVyeSAp
LCBleHRyYSApOworCQkJCQkJfQorCisJCQkJCX0gY2F0Y2gocHNldWRvRXJyb3IpIHsKKwkJCQkJ
fSBmaW5hbGx5IHsKKwkJCQkJCWlmICggIW9sZCApIHsKKwkJCQkJCQlvbGRDb250ZXh0LnJlbW92
ZUF0dHJpYnV0ZSggImlkIiApOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQkKKwkJ
CXJldHVybiBvbGRTaXp6bGUocXVlcnksIGNvbnRleHQsIGV4dHJhLCBzZWVkKTsKKwkJfTsKKwor
CQlmb3IgKCB2YXIgcHJvcCBpbiBvbGRTaXp6bGUgKSB7CisJCQlTaXp6bGVbIHByb3AgXSA9IG9s
ZFNpenpsZVsgcHJvcCBdOworCQl9CisKKwkJLy8gcmVsZWFzZSBtZW1vcnkgaW4gSUUKKwkJZGl2
ID0gbnVsbDsKKwl9KSgpOworfQorCisoZnVuY3Rpb24oKXsKKwl2YXIgaHRtbCA9IGRvY3VtZW50
LmRvY3VtZW50RWxlbWVudCwKKwkJbWF0Y2hlcyA9IGh0bWwubWF0Y2hlc1NlbGVjdG9yIHx8IGh0
bWwubW96TWF0Y2hlc1NlbGVjdG9yIHx8IGh0bWwud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8IGh0
bWwubXNNYXRjaGVzU2VsZWN0b3IsCisJCXBzZXVkb1dvcmtzID0gZmFsc2U7CisKKwl0cnkgewor
CQkvLyBUaGlzIHNob3VsZCBmYWlsIHdpdGggYW4gZXhjZXB0aW9uCisJCS8vIEdlY2tvIGRvZXMg
bm90IGVycm9yLCByZXR1cm5zIGZhbHNlIGluc3RlYWQKKwkJbWF0Y2hlcy5jYWxsKCBkb2N1bWVu
dC5kb2N1bWVudEVsZW1lbnQsICJbdGVzdCE9JyddOnNpenpsZSIgKTsKKwkKKwl9IGNhdGNoKCBw
c2V1ZG9FcnJvciApIHsKKwkJcHNldWRvV29ya3MgPSB0cnVlOworCX0KKworCWlmICggbWF0Y2hl
cyApIHsKKwkJU2l6emxlLm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uKCBub2RlLCBleHByICkg
eworCQkJLy8gTWFrZSBzdXJlIHRoYXQgYXR0cmlidXRlIHNlbGVjdG9ycyBhcmUgcXVvdGVkCisJ
CQlleHByID0gZXhwci5yZXBsYWNlKC9cPVxzKihbXiciXF1dKilccypcXS9nLCAiPSckMSddIik7
CisKKwkJCWlmICggIVNpenpsZS5pc1hNTCggbm9kZSApICkgeworCQkJCXRyeSB7IAorCQkJCQlp
ZiAoIHBzZXVkb1dvcmtzIHx8ICFFeHByLm1hdGNoLlBTRVVETy50ZXN0KCBleHByICkgJiYgIS8h
PS8udGVzdCggZXhwciApICkgeworCQkJCQkJcmV0dXJuIG1hdGNoZXMuY2FsbCggbm9kZSwgZXhw
ciApOworCQkJCQl9CisJCQkJfSBjYXRjaChlKSB7fQorCQkJfQorCisJCQlyZXR1cm4gU2l6emxl
KGV4cHIsIG51bGwsIG51bGwsIFtub2RlXSkubGVuZ3RoID4gMDsKKwkJfTsKKwl9Cit9KSgpOwor
CisoZnVuY3Rpb24oKXsKKwl2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7
CisKKwlkaXYuaW5uZXJIVE1MID0gIjxkaXYgY2xhc3M9J3Rlc3QgZSc+PC9kaXY+PGRpdiBjbGFz
cz0ndGVzdCc+PC9kaXY+IjsKKworCS8vIE9wZXJhIGNhbid0IGZpbmQgYSBzZWNvbmQgY2xhc3Nu
YW1lIChpbiA5LjYpCisJLy8gQWxzbywgbWFrZSBzdXJlIHRoYXQgZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZSBhY3R1YWxseSBleGlzdHMKKwlpZiAoICFkaXYuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSB8
fCBkaXYuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aCA9PT0gMCApIHsKKwkJcmV0
dXJuOworCX0KKworCS8vIFNhZmFyaSBjYWNoZXMgY2xhc3MgYXR0cmlidXRlcywgZG9lc24ndCBj
YXRjaCBjaGFuZ2VzIChpbiAzLjIpCisJZGl2Lmxhc3RDaGlsZC5jbGFzc05hbWUgPSAiZSI7CisK
KwlpZiAoIGRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoID09PSAxICkgewor
CQlyZXR1cm47CisJfQorCQorCUV4cHIub3JkZXIuc3BsaWNlKDEsIDAsICJDTEFTUyIpOworCUV4
cHIuZmluZC5DTEFTUyA9IGZ1bmN0aW9uKCBtYXRjaCwgY29udGV4dCwgaXNYTUwgKSB7CisJCWlm
ICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gInVuZGVmaW5lZCIg
JiYgIWlzWE1MICkgeworCQkJcmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSht
YXRjaFsxXSk7CisJCX0KKwl9OworCisJLy8gcmVsZWFzZSBtZW1vcnkgaW4gSUUKKwlkaXYgPSBu
dWxsOworfSkoKTsKKworZnVuY3Rpb24gZGlyTm9kZUNoZWNrKCBkaXIsIGN1ciwgZG9uZU5hbWUs
IGNoZWNrU2V0LCBub2RlQ2hlY2ssIGlzWE1MICkgeworCWZvciAoIHZhciBpID0gMCwgbCA9IGNo
ZWNrU2V0Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKKwkJdmFyIGVsZW0gPSBjaGVja1NldFtpXTsK
KworCQlpZiAoIGVsZW0gKSB7CisJCQl2YXIgbWF0Y2ggPSBmYWxzZTsKKworCQkJZWxlbSA9IGVs
ZW1bZGlyXTsKKworCQkJd2hpbGUgKCBlbGVtICkgeworCQkJCWlmICggZWxlbS5zaXpjYWNoZSA9
PT0gZG9uZU5hbWUgKSB7CisJCQkJCW1hdGNoID0gY2hlY2tTZXRbZWxlbS5zaXpzZXRdOworCQkJ
CQlicmVhazsKKwkJCQl9CisKKwkJCQlpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgIWlzWE1M
ICl7CisJCQkJCWVsZW0uc2l6Y2FjaGUgPSBkb25lTmFtZTsKKwkJCQkJZWxlbS5zaXpzZXQgPSBp
OworCQkJCX0KKworCQkJCWlmICggZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBjdXIg
KSB7CisJCQkJCW1hdGNoID0gZWxlbTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJZWxlbSA9
IGVsZW1bZGlyXTsKKwkJCX0KKworCQkJY2hlY2tTZXRbaV0gPSBtYXRjaDsKKwkJfQorCX0KK30K
KworZnVuY3Rpb24gZGlyQ2hlY2soIGRpciwgY3VyLCBkb25lTmFtZSwgY2hlY2tTZXQsIG5vZGVD
aGVjaywgaXNYTUwgKSB7CisJZm9yICggdmFyIGkgPSAwLCBsID0gY2hlY2tTZXQubGVuZ3RoOyBp
IDwgbDsgaSsrICkgeworCQl2YXIgZWxlbSA9IGNoZWNrU2V0W2ldOworCisJCWlmICggZWxlbSAp
IHsKKwkJCXZhciBtYXRjaCA9IGZhbHNlOworCQkJCisJCQllbGVtID0gZWxlbVtkaXJdOworCisJ
CQl3aGlsZSAoIGVsZW0gKSB7CisJCQkJaWYgKCBlbGVtLnNpemNhY2hlID09PSBkb25lTmFtZSAp
IHsKKwkJCQkJbWF0Y2ggPSBjaGVja1NldFtlbGVtLnNpenNldF07CisJCQkJCWJyZWFrOworCQkJ
CX0KKworCQkJCWlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKwkJCQkJaWYgKCAhaXNYTUwg
KSB7CisJCQkJCQllbGVtLnNpemNhY2hlID0gZG9uZU5hbWU7CisJCQkJCQllbGVtLnNpenNldCA9
IGk7CisJCQkJCX0KKworCQkJCQlpZiAoIHR5cGVvZiBjdXIgIT09ICJzdHJpbmciICkgeworCQkJ
CQkJaWYgKCBlbGVtID09PSBjdXIgKSB7CisJCQkJCQkJbWF0Y2ggPSB0cnVlOworCQkJCQkJCWJy
ZWFrOworCQkJCQkJfQorCisJCQkJCX0gZWxzZSBpZiAoIFNpenpsZS5maWx0ZXIoIGN1ciwgW2Vs
ZW1dICkubGVuZ3RoID4gMCApIHsKKwkJCQkJCW1hdGNoID0gZWxlbTsKKwkJCQkJCWJyZWFrOwor
CQkJCQl9CisJCQkJfQorCisJCQkJZWxlbSA9IGVsZW1bZGlyXTsKKwkJCX0KKworCQkJY2hlY2tT
ZXRbaV0gPSBtYXRjaDsKKwkJfQorCX0KK30KKworaWYgKCBkb2N1bWVudC5kb2N1bWVudEVsZW1l
bnQuY29udGFpbnMgKSB7CisJU2l6emxlLmNvbnRhaW5zID0gZnVuY3Rpb24oIGEsIGIgKSB7CisJ
CXJldHVybiBhICE9PSBiICYmIChhLmNvbnRhaW5zID8gYS5jb250YWlucyhiKSA6IHRydWUpOwor
CX07CisKK30gZWxzZSBpZiAoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jb21wYXJlRG9jdW1l
bnRQb3NpdGlvbiApIHsKKwlTaXp6bGUuY29udGFpbnMgPSBmdW5jdGlvbiggYSwgYiApIHsKKwkJ
cmV0dXJuICEhKGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikgJiAxNik7CisJfTsKKworfSBl
bHNlIHsKKwlTaXp6bGUuY29udGFpbnMgPSBmdW5jdGlvbigpIHsKKwkJcmV0dXJuIGZhbHNlOwor
CX07Cit9CisKK1NpenpsZS5pc1hNTCA9IGZ1bmN0aW9uKCBlbGVtICkgeworCS8vIGRvY3VtZW50
RWxlbWVudCBpcyB2ZXJpZmllZCBmb3IgY2FzZXMgd2hlcmUgaXQgZG9lc24ndCB5ZXQgZXhpc3QK
KwkvLyAoc3VjaCBhcyBsb2FkaW5nIGlmcmFtZXMgaW4gSUUgLSAjNDgzMykgCisJdmFyIGRvY3Vt
ZW50RWxlbWVudCA9IChlbGVtID8gZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gOiAwKS5kb2N1
bWVudEVsZW1lbnQ7CisKKwlyZXR1cm4gZG9jdW1lbnRFbGVtZW50ID8gZG9jdW1lbnRFbGVtZW50
Lm5vZGVOYW1lICE9PSAiSFRNTCIgOiBmYWxzZTsKK307CisKK3ZhciBwb3NQcm9jZXNzID0gZnVu
Y3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkgeworCXZhciBtYXRjaCwKKwkJdG1wU2V0ID0gW10s
CisJCWxhdGVyID0gIiIsCisJCXJvb3QgPSBjb250ZXh0Lm5vZGVUeXBlID8gW2NvbnRleHRdIDog
Y29udGV4dDsKKworCS8vIFBvc2l0aW9uIHNlbGVjdG9ycyBtdXN0IGJlIGRvbmUgYWZ0ZXIgdGhl
IGZpbHRlcgorCS8vIEFuZCBzbyBtdXN0IDpub3QocG9zaXRpb25hbCkgc28gd2UgbW92ZSBhbGwg
UFNFVURPcyB0byB0aGUgZW5kCisJd2hpbGUgKCAobWF0Y2ggPSBFeHByLm1hdGNoLlBTRVVETy5l
eGVjKCBzZWxlY3RvciApKSApIHsKKwkJbGF0ZXIgKz0gbWF0Y2hbMF07CisJCXNlbGVjdG9yID0g
c2VsZWN0b3IucmVwbGFjZSggRXhwci5tYXRjaC5QU0VVRE8sICIiICk7CisJfQorCisJc2VsZWN0
b3IgPSBFeHByLnJlbGF0aXZlW3NlbGVjdG9yXSA/IHNlbGVjdG9yICsgIioiIDogc2VsZWN0b3I7
CisKKwlmb3IgKCB2YXIgaSA9IDAsIGwgPSByb290Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKKwkJ
U2l6emxlKCBzZWxlY3Rvciwgcm9vdFtpXSwgdG1wU2V0ICk7CisJfQorCisJcmV0dXJuIFNpenps
ZS5maWx0ZXIoIGxhdGVyLCB0bXBTZXQgKTsKK307CisKKy8vIEVYUE9TRQorCit3aW5kb3cuU2l6
emxlID0gU2l6emxlOworCit9KSgpOwoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMv
anF1ZXJ5L3Jlc291cmNlcy9zcmMvc2l6emxlL3NpenpsZS5qcwpfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBh
bGxvdy10YWJzCiAgICsgeWVzCgpJbmRleDogTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy9z
cmMvc2l6emxlL3Rlc3QvdW5pdC9zZWxlY3Rvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9qcXVlcnkvcmVzb3VyY2VzL3NyYy9zaXp6bGUvdGVzdC91bml0L3NlbGVjdG9yLmpzCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy9zcmMvc2l6emxlL3Rlc3Qv
dW5pdC9zZWxlY3Rvci5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MzQgQEAKK21vZHVsZSgi
c2VsZWN0b3IiLCB7IHRlYXJkb3duOiBtb2R1bGVUZWFyZG93biB9KTsKKwordGVzdCgiZWxlbWVu
dCIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgyMSk7CisJUVVuaXQucmVzZXQoKTsKKworCW9rKCBq
UXVlcnkoIioiKS5zaXplKCkgPj0gMzAsICJTZWxlY3QgYWxsIiApOworCXZhciBhbGwgPSBqUXVl
cnkoIioiKSwgZ29vZCA9IHRydWU7CisJZm9yICggdmFyIGkgPSAwOyBpIDwgYWxsLmxlbmd0aDsg
aSsrICkKKwkJaWYgKCBhbGxbaV0ubm9kZVR5cGUgPT0gOCApCisJCQlnb29kID0gZmFsc2U7CisJ
b2soIGdvb2QsICJTZWxlY3QgYWxsIGVsZW1lbnRzLCBubyBjb21tZW50IG5vZGVzIiApOworCXQo
ICJFbGVtZW50IFNlbGVjdG9yIiwgIiNtYWluIHAiLCBbImZpcnN0cCIsImFwIiwic25kcCIsImVu
Iiwic2FwIiwiZmlyc3QiXSApOworCXQoICJFbGVtZW50IFNlbGVjdG9yIiwgImJvZHkiLCBbImJv
ZHkiXSApOworCXQoICJFbGVtZW50IFNlbGVjdG9yIiwgImh0bWwiLCBbImh0bWwiXSApOworCXQo
ICJQYXJlbnQgRWxlbWVudCIsICJkaXYgcCIsIFsiZmlyc3RwIiwiYXAiLCJzbmRwIiwiZW4iLCJz
YXAiLCJmaXJzdCJdICk7CisJZXF1YWxzKCBqUXVlcnkoInBhcmFtIiwgIiNvYmplY3QxIikubGVu
Z3RoLCAyLCAiT2JqZWN0L3BhcmFtIGFzIGNvbnRleHQiICk7CisKKwlzYW1lKCBqUXVlcnkoInAi
LCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZGl2IikpLmdldCgpLCBxKCJmaXJzdHAi
LCJhcCIsInNuZHAiLCJlbiIsInNhcCIsImZpcnN0IiksICJGaW5kaW5nIGVsZW1lbnRzIHdpdGgg
YSBjb250ZXh0LiIgKTsKKwlzYW1lKCBqUXVlcnkoInAiLCAiZGl2IikuZ2V0KCksIHEoImZpcnN0
cCIsImFwIiwic25kcCIsImVuIiwic2FwIiwiZmlyc3QiKSwgIkZpbmRpbmcgZWxlbWVudHMgd2l0
aCBhIGNvbnRleHQuIiApOworCXNhbWUoIGpRdWVyeSgicCIsIGpRdWVyeSgiZGl2IikpLmdldCgp
LCBxKCJmaXJzdHAiLCJhcCIsInNuZHAiLCJlbiIsInNhcCIsImZpcnN0IiksICJGaW5kaW5nIGVs
ZW1lbnRzIHdpdGggYSBjb250ZXh0LiIgKTsKKwlzYW1lKCBqUXVlcnkoImRpdiIpLmZpbmQoInAi
KS5nZXQoKSwgcSgiZmlyc3RwIiwiYXAiLCJzbmRwIiwiZW4iLCJzYXAiLCJmaXJzdCIpLCAiRmlu
ZGluZyBlbGVtZW50cyB3aXRoIGEgY29udGV4dC4iICk7CisKKwlzYW1lKCBqUXVlcnkoIiNmb3Jt
IikuZmluZCgic2VsZWN0IikuZ2V0KCksIHEoInNlbGVjdDEiLCJzZWxlY3QyIiwic2VsZWN0MyIs
InNlbGVjdDQiLCJzZWxlY3Q1IiksICJGaW5kaW5nIHNlbGVjdHMgd2l0aCBhIGNvbnRleHQuIiAp
OworCisJb2soIGpRdWVyeSgiI2xlbmd0aCIpLmxlbmd0aCwgJyZsdDtpbnB1dCBuYW1lPSJsZW5n
dGgiJmd0OyBjYW5ub3QgYmUgZm91bmQgdW5kZXIgSUUsIHNlZSAjOTQ1JyApOworCW9rKCBqUXVl
cnkoIiNsZW5ndGh0ZXN0IGlucHV0IikubGVuZ3RoLCAnJmx0O2lucHV0IG5hbWU9Imxlbmd0aCIm
Z3Q7IGNhbm5vdCBiZSBmb3VuZCB1bmRlciBJRSwgc2VlICM5NDUnICk7CisKKwkvLyBDaGVjayBm
b3IgdW5pcXVlLW5lc3MgYW5kIHNvcnQgb3JkZXIKKwlzYW1lKCBqUXVlcnkoInAsIGRpdiBwIiku
Z2V0KCksIGpRdWVyeSgicCIpLmdldCgpLCAiQ2hlY2sgZm9yIGR1cGxpY2F0ZXM6IHAsIGRpdiBw
IiApOworCisJdCggIkNoZWNraW5nIHNvcnQgb3JkZXIiLCAiaDIsIGgxIiwgWyJxdW5pdC1oZWFk
ZXIiLCAicXVuaXQtYmFubmVyIiwgInF1bml0LXVzZXJBZ2VudCJdICk7CisJdCggIkNoZWNraW5n
IHNvcnQgb3JkZXIiLCAiaDI6Zmlyc3QsIGgxOmZpcnN0IiwgWyJxdW5pdC1oZWFkZXIiLCAicXVu
aXQtYmFubmVyIl0gKTsKKwl0KCAiQ2hlY2tpbmcgc29ydCBvcmRlciIsICIjbWFpbiBwLCAjbWFp
biBwIGEiLCBbImZpcnN0cCIsICJzaW1vbjEiLCAiYXAiLCAiZ29vZ2xlIiwgImdyb3VwcyIsICJh
bmNob3IxIiwgIm1hcmsiLCAic25kcCIsICJlbiIsICJ5YWhvbyIsICJzYXAiLCAiYW5jaG9yMiIs
ICJzaW1vbiIsICJmaXJzdCJdICk7CisKKwkvLyBUZXN0IENvbmZsaWN0IElECisJc2FtZSggalF1
ZXJ5KCIjbGVuZ3RodGVzdCIpLmZpbmQoIiNpZFRlc3QiKS5nZXQoKSwgcSgiaWRUZXN0IiksICJG
aW5kaW5nIGVsZW1lbnQgd2l0aCBpZCBvZiBJRC4iICk7CisJc2FtZSggalF1ZXJ5KCIjbGVuZ3Ro
dGVzdCIpLmZpbmQoIltuYW1lPSdpZCddIikuZ2V0KCksIHEoImlkVGVzdCIpLCAiRmluZGluZyBl
bGVtZW50IHdpdGggaWQgb2YgSUQuIiApOworCXNhbWUoIGpRdWVyeSgiI2xlbmd0aHRlc3QiKS5m
aW5kKCJpbnB1dFtpZD0naWRUZXN0J10iKS5nZXQoKSwgcSgiaWRUZXN0IiksICJGaW5kaW5nIGVs
ZW1lbnRzIHdpdGggYSBjb250ZXh0LiIgKTsKK30pOworCitpZiAoIGxvY2F0aW9uLnByb3RvY29s
ICE9ICJmaWxlOiIgKSB7CisJdGVzdCgiWE1MIERvY3VtZW50IFNlbGVjdG9ycyIsIGZ1bmN0aW9u
KCkgeworCQlleHBlY3QoOSk7CisJCXN0b3AoKTsKKwkJalF1ZXJ5LmdldCgiZGF0YS93aXRoX2Zy
aWVzLnhtbCIsIGZ1bmN0aW9uKHhtbCkgeworCQkJZXF1YWxzKCBqUXVlcnkoImZvb19iYXIiLCB4
bWwpLmxlbmd0aCwgMSwgIkVsZW1lbnQgU2VsZWN0b3Igd2l0aCB1bmRlcnNjb3JlIiApOworCQkJ
ZXF1YWxzKCBqUXVlcnkoIi5jb21wb25lbnQiLCB4bWwpLmxlbmd0aCwgMSwgIkNsYXNzIHNlbGVj
dG9yIiApOworCQkJZXF1YWxzKCBqUXVlcnkoIltjbGFzcyo9Y29tcG9uZW50XSIsIHhtbCkubGVu
Z3RoLCAxLCAiQXR0cmlidXRlIHNlbGVjdG9yIGZvciBjbGFzcyIgKTsKKwkJCWVxdWFscyggalF1
ZXJ5KCJwcm9wZXJ0eVtuYW1lPXByb3AyXSIsIHhtbCkubGVuZ3RoLCAxLCAiQXR0cmlidXRlIHNl
bGVjdG9yIHdpdGggbmFtZSIgKTsKKwkJCWVxdWFscyggalF1ZXJ5KCJbbmFtZT1wcm9wMl0iLCB4
bWwpLmxlbmd0aCwgMSwgIkF0dHJpYnV0ZSBzZWxlY3RvciB3aXRoIG5hbWUiICk7CisJCQllcXVh
bHMoIGpRdWVyeSgiI3NlaXRlMSIsIHhtbCkubGVuZ3RoLCAxLCAiQXR0cmlidXRlIHNlbGVjdG9y
IHdpdGggSUQiICk7CisJCQllcXVhbHMoIGpRdWVyeSgiY29tcG9uZW50I3NlaXRlMSIsIHhtbCku
bGVuZ3RoLCAxLCAiQXR0cmlidXRlIHNlbGVjdG9yIHdpdGggSUQiICk7CisJCQllcXVhbHMoIGpR
dWVyeSgiY29tcG9uZW50IiwgeG1sKS5maWx0ZXIoIiNzZWl0ZTEiKS5sZW5ndGgsIDEsICJBdHRy
aWJ1dGUgc2VsZWN0b3IgZmlsdGVyIHdpdGggSUQiICk7CisJCQlvayggalF1ZXJ5KCB4bWwubGFz
dENoaWxkICkuaXMoICJzb2FwXFw6RW52ZWxvcGUiICksICJDaGVjayBmb3IgbmFtZXNwYWNlZCBl
bGVtZW50IiApOworCQkJc3RhcnQoKTsKKwkJfSk7CisJfSk7Cit9CisKK3Rlc3QoImJyb2tlbiIs
IGZ1bmN0aW9uKCkgeworCWV4cGVjdCgxOSk7CisKKwlmdW5jdGlvbiBicm9rZW4obmFtZSwgc2Vs
ZWN0b3IpIHsKKwkJdHJ5IHsKKwkJCWpRdWVyeShzZWxlY3Rvcik7CisJCQlvayggZmFsc2UsIG5h
bWUgKyAiOiAiICsgc2VsZWN0b3IgKTsKKwkJfSBjYXRjaChlKXsKKwkJCW9rKCB0eXBlb2YgZSA9
PT0gInN0cmluZyIgJiYgZS5pbmRleE9mKCJTeW50YXggZXJyb3IiKSA+PSAwLAorCQkJCW5hbWUg
KyAiOiAiICsgc2VsZWN0b3IgKTsKKwkJfQorCX0KKworCWJyb2tlbiggIkJyb2tlbiBTZWxlY3Rv
ciIsICJbIiwgW10gKTsKKwlicm9rZW4oICJCcm9rZW4gU2VsZWN0b3IiLCAiKCIsIFtdICk7CisJ
YnJva2VuKCAiQnJva2VuIFNlbGVjdG9yIiwgInsiLCBbXSApOworCWJyb2tlbiggIkJyb2tlbiBT
ZWxlY3RvciIsICI8IiwgW10gKTsKKwlicm9rZW4oICJCcm9rZW4gU2VsZWN0b3IiLCAiKCkiLCBb
XSApOworCWJyb2tlbiggIkJyb2tlbiBTZWxlY3RvciIsICI8PiIsIFtdICk7CisJYnJva2VuKCAi
QnJva2VuIFNlbGVjdG9yIiwgInt9IiwgW10gKTsKKwlicm9rZW4oICJEb2Vzbid0IGV4aXN0Iiwg
Ijp2aXNibGUiLCBbXSApOworCWJyb2tlbiggIk50aC1jaGlsZCIsICI6bnRoLWNoaWxkIiwgW10g
KTsKKwlicm9rZW4oICJOdGgtY2hpbGQiLCAiOm50aC1jaGlsZCgtKSIsIFtdICk7CisJLy8gU2ln
aC4gV2ViS2l0IHRoaW5rcyB0aGlzIGlzIGEgcmVhbCBzZWxlY3RvciBpbiBxU0EKKwkvLyBUaGV5
J3ZlIGFscmVhZHkgZml4ZWQgdGhpcyBhbmQgaXQnbGwgYmUgY29taW5nIGludG8KKwkvLyBjdXJy
ZW50IGJyb3dzZXJzIHNvb24uCisJLy9icm9rZW4oICJOdGgtY2hpbGQiLCAiOm50aC1jaGlsZChh
c2RmKSIsIFtdICk7CisJYnJva2VuKCAiTnRoLWNoaWxkIiwgIjpudGgtY2hpbGQoMm4rLTApIiwg
W10gKTsKKwlicm9rZW4oICJOdGgtY2hpbGQiLCAiOm50aC1jaGlsZCgyKzApIiwgW10gKTsKKwli
cm9rZW4oICJOdGgtY2hpbGQiLCAiOm50aC1jaGlsZCgtIDFuKSIsIFtdICk7CisJYnJva2VuKCAi
TnRoLWNoaWxkIiwgIjpudGgtY2hpbGQoLTEgbikiLCBbXSApOworCWJyb2tlbiggIkZpcnN0LWNo
aWxkIiwgIjpmaXJzdC1jaGlsZChuKSIsIFtdICk7CisJYnJva2VuKCAiTGFzdC1jaGlsZCIsICI6
bGFzdC1jaGlsZChuKSIsIFtdICk7CisJYnJva2VuKCAiT25seS1jaGlsZCIsICI6b25seS1jaGls
ZChuKSIsIFtdICk7CisKKwkvLyBNYWtlIHN1cmUgYXR0cmlidXRlIHZhbHVlIHF1b3Rpbmcgd29y
a3MgY29ycmVjdGx5LiBTZWU6ICM2MDkzCisJdmFyIGF0dHJiYWQgPSBqUXVlcnkoJzxpbnB1dCB0
eXBlPSJoaWRkZW4iIHZhbHVlPSIyIiBuYW1lPSJmb28uYmF6IiBpZD0iYXR0cmJhZDEiLz48aW5w
dXQgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iMiIgbmFtZT0iZm9vW2Jhel0iIGlkPSJhdHRyYmFkMiIv
PicpLmFwcGVuZFRvKCJib2R5Iik7CisKKwlicm9rZW4oICJBdHRyaWJ1dGUgbm90IGVzY2FwZWQi
LCAiaW5wdXRbbmFtZT1mb28uYmF6XSIsIFtdICk7CisJYnJva2VuKCAiQXR0cmlidXRlIG5vdCBl
c2NhcGVkIiwgImlucHV0W25hbWU9Zm9vW2Jhel1dIiwgW10gKTsKKworCWF0dHJiYWQucmVtb3Zl
KCk7Cit9KTsKKwordGVzdCgiaWQiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMjkpOworCXQoICJJ
RCBTZWxlY3RvciIsICIjYm9keSIsIFsiYm9keSJdICk7CisJdCggIklEIFNlbGVjdG9yIHcvIEVs
ZW1lbnQiLCAiYm9keSNib2R5IiwgWyJib2R5Il0gKTsKKwl0KCAiSUQgU2VsZWN0b3Igdy8gRWxl
bWVudCIsICJ1bCNmaXJzdCIsIFtdICk7CisJdCggIklEIHNlbGVjdG9yIHdpdGggZXhpc3Rpbmcg
SUQgZGVzY2VuZGFudCIsICIjZmlyc3RwICNzaW1vbjEiLCBbInNpbW9uMSJdICk7CisJdCggIklE
IHNlbGVjdG9yIHdpdGggbm9uLWV4aXN0YW50IGRlc2NlbmRhbnQiLCAiI2ZpcnN0cCAjZm9vYmFy
IiwgW10gKTsKKwl0KCAiSUQgc2VsZWN0b3IgdXNpbmcgVVRGOCIsICIj5Y+w5YyXVGHMgWliZcyM
aSIsIFsi5Y+w5YyXVGHMgWliZcyMaSJdICk7CisJdCggIk11bHRpcGxlIElEIHNlbGVjdG9ycyB1
c2luZyBVVEY4IiwgIiPlj7DljJdUYcyBaWJlzIxpLCAj5Y+w5YyXIiwgWyLlj7DljJdUYcyBaWJl
zIxpIiwi5Y+w5YyXIl0gKTsKKwl0KCAiRGVzY2VuZGFudCBJRCBzZWxlY3RvciB1c2luZyBVVEY4
IiwgImRpdiAj5Y+w5YyXIiwgWyLlj7DljJciXSApOworCXQoICJDaGlsZCBJRCBzZWxlY3RvciB1
c2luZyBVVEY4IiwgImZvcm0gPiAj5Y+w5YyXIiwgWyLlj7DljJciXSApOworCisJdCggIkVzY2Fw
ZWQgSUQiLCAiI2Zvb1xcOmJhciIsIFsiZm9vOmJhciJdICk7CisJdCggIkVzY2FwZWQgSUQiLCAi
I3Rlc3RcXC5mb29cXFs1XFxdYmFyIiwgWyJ0ZXN0LmZvb1s1XWJhciJdICk7CisJdCggIkRlc2Nl
bmRhbnQgZXNjYXBlZCBJRCIsICJkaXYgI2Zvb1xcOmJhciIsIFsiZm9vOmJhciJdICk7CisJdCgg
IkRlc2NlbmRhbnQgZXNjYXBlZCBJRCIsICJkaXYgI3Rlc3RcXC5mb29cXFs1XFxdYmFyIiwgWyJ0
ZXN0LmZvb1s1XWJhciJdICk7CisJdCggIkNoaWxkIGVzY2FwZWQgSUQiLCAiZm9ybSA+ICNmb29c
XDpiYXIiLCBbImZvbzpiYXIiXSApOworCXQoICJDaGlsZCBlc2NhcGVkIElEIiwgImZvcm0gPiAj
dGVzdFxcLmZvb1xcWzVcXF1iYXIiLCBbInRlc3QuZm9vWzVdYmFyIl0gKTsKKworCXQoICJJRCBT
ZWxlY3RvciwgY2hpbGQgSUQgcHJlc2VudCIsICIjZm9ybSA+ICNyYWRpbzEiLCBbInJhZGlvMSJd
ICk7IC8vIGJ1ZyAjMjY3CisJdCggIklEIFNlbGVjdG9yLCBub3QgYW4gYW5jZXN0b3IgSUQiLCAi
I2Zvcm0gI2ZpcnN0IiwgW10gKTsKKwl0KCAiSUQgU2VsZWN0b3IsIG5vdCBhIGNoaWxkIElEIiwg
IiNmb3JtID4gI29wdGlvbjFhIiwgW10gKTsKKworCXQoICJBbGwgQ2hpbGRyZW4gb2YgSUQiLCAi
I2ZvbyA+ICoiLCBbInNuZHAiLCAiZW4iLCAic2FwIl0gKTsKKwl0KCAiQWxsIENoaWxkcmVuIG9m
IElEIHdpdGggbm8gY2hpbGRyZW4iLCAiI2ZpcnN0VUwgPiAqIiwgW10gKTsKKworCXZhciBhID0g
alF1ZXJ5KCc8ZGl2PjxhIG5hbWU9InROYW1lMSI+dE5hbWUxIEE8L2E+PGEgbmFtZT0idE5hbWUy
Ij50TmFtZTIgQTwvYT48ZGl2IGlkPSJ0TmFtZTEiPnROYW1lMSBEaXY8L2Rpdj48L2Rpdj4nKS5h
cHBlbmRUbygnI21haW4nKTsKKwllcXVhbHMoIGpRdWVyeSgiI3ROYW1lMSIpWzBdLmlkLCAndE5h
bWUxJywgIklEIHNlbGVjdG9yIHdpdGggc2FtZSB2YWx1ZSBmb3IgYSBuYW1lIGF0dHJpYnV0ZSIg
KTsKKwllcXVhbHMoIGpRdWVyeSgiI3ROYW1lMiIpLmxlbmd0aCwgMCwgIklEIHNlbGVjdG9yIG5v
bi1leGlzdGluZyBidXQgbmFtZSBhdHRyaWJ1dGUgb24gYW4gQSB0YWciICk7CisJYS5yZW1vdmUo
KTsKKworCXQoICJJRCBTZWxlY3RvciBvbiBGb3JtIHdpdGggYW4gaW5wdXQgdGhhdCBoYXMgYSBu
YW1lIG9mICdpZCciLCAiI2xlbmd0aHRlc3QiLCBbImxlbmd0aHRlc3QiXSApOworCisJdCggIklE
IHNlbGVjdG9yIHdpdGggbm9uLWV4aXN0YW50IGFuY2VzdG9yIiwgIiNhc2RmYXNkZiAjZm9vYmFy
IiwgW10gKTsgLy8gYnVnICM5ODYKKworCXNhbWUoIGpRdWVyeSgiYm9keSIpLmZpbmQoImRpdiNm
b3JtIikuZ2V0KCksIFtdLCAiSUQgc2VsZWN0b3Igd2l0aGluIHRoZSBjb250ZXh0IG9mIGFub3Ro
ZXIgZWxlbWVudCIgKTsKKworCS8vIzc1MzMKKwllcXVhbCggalF1ZXJ5KCI8ZGl2IGlkPVwiQSdC
fkMuRFtFXVwiPjxwPmZvbzwvcD48L2Rpdj4iKS5maW5kKCJwIikubGVuZ3RoLCAxLCAiRmluZCB3
aGVyZSBjb250ZXh0IHJvb3QgaXMgYSBub2RlIGFuZCBoYXMgYW4gSUQgd2l0aCBDU1MzIG1ldGEg
Y2hhcmFjdGVycyIgKTsKKworCXQoICJVbmRlcnNjb3JlIElEIiwgIiN0eXBlc19hbGwiLCBbInR5
cGVzX2FsbCJdICk7CisJdCggIkRhc2ggSUQiLCAiI2Z4LXF1ZXVlIiwgWyJmeC1xdWV1ZSJdICk7
CisKKwl0KCAiSUQgd2l0aCB3ZWlyZCBjaGFyYWN0ZXJzIGluIGl0IiwgIiNuYW1lXFwrdmFsdWUi
LCBbIm5hbWUrdmFsdWUiXSApOworfSk7CisKK3Rlc3QoImNsYXNzIiwgZnVuY3Rpb24oKSB7CisJ
ZXhwZWN0KDIyKTsKKwl0KCAiQ2xhc3MgU2VsZWN0b3IiLCAiLmJsb2ciLCBbIm1hcmsiLCJzaW1v
biJdICk7CisJdCggIkNsYXNzIFNlbGVjdG9yIiwgIi5HUk9VUFMiLCBbImdyb3VwcyJdICk7CisJ
dCggIkNsYXNzIFNlbGVjdG9yIiwgIi5ibG9nLmxpbmsiLCBbInNpbW9uIl0gKTsKKwl0KCAiQ2xh
c3MgU2VsZWN0b3Igdy8gRWxlbWVudCIsICJhLmJsb2ciLCBbIm1hcmsiLCJzaW1vbiJdICk7CisJ
dCggIlBhcmVudCBDbGFzcyBTZWxlY3RvciIsICJwIC5ibG9nIiwgWyJtYXJrIiwic2ltb24iXSAp
OworCisJc2FtZSggalF1ZXJ5KCIuYmxvZyIsIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCJwIikpLmdldCgpLCBxKCJtYXJrIiwgInNpbW9uIiksICJGaW5kaW5nIGVsZW1lbnRzIHdpdGgg
YSBjb250ZXh0LiIgKTsKKwlzYW1lKCBqUXVlcnkoIi5ibG9nIiwgInAiKS5nZXQoKSwgcSgibWFy
ayIsICJzaW1vbiIpLCAiRmluZGluZyBlbGVtZW50cyB3aXRoIGEgY29udGV4dC4iICk7CisJc2Ft
ZSggalF1ZXJ5KCIuYmxvZyIsIGpRdWVyeSgicCIpKS5nZXQoKSwgcSgibWFyayIsICJzaW1vbiIp
LCAiRmluZGluZyBlbGVtZW50cyB3aXRoIGEgY29udGV4dC4iICk7CisJc2FtZSggalF1ZXJ5KCJw
IikuZmluZCgiLmJsb2ciKS5nZXQoKSwgcSgibWFyayIsICJzaW1vbiIpLCAiRmluZGluZyBlbGVt
ZW50cyB3aXRoIGEgY29udGV4dC4iICk7CisKKwl0KCAiQ2xhc3Mgc2VsZWN0b3IgdXNpbmcgVVRG
OCIsICIu5Y+w5YyXVGHMgWliZcyMaSIsIFsidXRmOGNsYXNzMSJdICk7CisJLy90KCAiQ2xhc3Mg
c2VsZWN0b3IgdXNpbmcgVVRGOCIsICIu5Y+w5YyXIiwgWyJ1dGY4Y2xhc3MxIiwidXRmOGNsYXNz
MiJdICk7CisJdCggIkNsYXNzIHNlbGVjdG9yIHVzaW5nIFVURjgiLCAiLuWPsOWMl1RhzIFpYmXM
jGku5Y+w5YyXIiwgWyJ1dGY4Y2xhc3MxIl0gKTsKKwl0KCAiQ2xhc3Mgc2VsZWN0b3IgdXNpbmcg
VVRGOCIsICIu5Y+w5YyXVGHMgWliZcyMaSwgLuWPsOWMlyIsIFsidXRmOGNsYXNzMSIsInV0Zjhj
bGFzczIiXSApOworCXQoICJEZXNjZW5kYW50IGNsYXNzIHNlbGVjdG9yIHVzaW5nIFVURjgiLCAi
ZGl2IC7lj7DljJdUYcyBaWJlzIxpIiwgWyJ1dGY4Y2xhc3MxIl0gKTsKKwl0KCAiQ2hpbGQgY2xh
c3Mgc2VsZWN0b3IgdXNpbmcgVVRGOCIsICJmb3JtID4gLuWPsOWMl1RhzIFpYmXMjGkiLCBbInV0
ZjhjbGFzczEiXSApOworCisJdCggIkVzY2FwZWQgQ2xhc3MiLCAiLmZvb1xcOmJhciIsIFsiZm9v
OmJhciJdICk7CisJdCggIkVzY2FwZWQgQ2xhc3MiLCAiLnRlc3RcXC5mb29cXFs1XFxdYmFyIiwg
WyJ0ZXN0LmZvb1s1XWJhciJdICk7CisJdCggIkRlc2NlbmRhbnQgc2NhcGVkIENsYXNzIiwgImRp
diAuZm9vXFw6YmFyIiwgWyJmb286YmFyIl0gKTsKKwl0KCAiRGVzY2VuZGFudCBzY2FwZWQgQ2xh
c3MiLCAiZGl2IC50ZXN0XFwuZm9vXFxbNVxcXWJhciIsIFsidGVzdC5mb29bNV1iYXIiXSApOwor
CXQoICJDaGlsZCBlc2NhcGVkIENsYXNzIiwgImZvcm0gPiAuZm9vXFw6YmFyIiwgWyJmb286YmFy
Il0gKTsKKwl0KCAiQ2hpbGQgZXNjYXBlZCBDbGFzcyIsICJmb3JtID4gLnRlc3RcXC5mb29cXFs1
XFxdYmFyIiwgWyJ0ZXN0LmZvb1s1XWJhciJdICk7CisKKwl2YXIgZGl2ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2Iik7CisJZGl2LmlubmVySFRNTCA9ICI8ZGl2IGNsYXNzPSd0ZXN0IGUn
PjwvZGl2PjxkaXYgY2xhc3M9J3Rlc3QnPjwvZGl2PiI7CisJc2FtZSggalF1ZXJ5KCIuZSIsIGRp
dikuZ2V0KCksIFsgZGl2LmZpcnN0Q2hpbGQgXSwgIkZpbmRpbmcgYSBzZWNvbmQgY2xhc3MuIiAp
OworCisJZGl2Lmxhc3RDaGlsZC5jbGFzc05hbWUgPSAiZSI7CisKKwlzYW1lKCBqUXVlcnkoIi5l
IiwgZGl2KS5nZXQoKSwgWyBkaXYuZmlyc3RDaGlsZCwgZGl2Lmxhc3RDaGlsZCBdLCAiRmluZGlu
ZyBhIG1vZGlmaWVkIGNsYXNzLiIgKTsKK30pOworCit0ZXN0KCJuYW1lIiwgZnVuY3Rpb24oKSB7
CisJZXhwZWN0KDE1KTsKKworCXQoICJOYW1lIHNlbGVjdG9yIiwgImlucHV0W25hbWU9YWN0aW9u
XSIsIFsidGV4dDEiXSApOworCXQoICJOYW1lIHNlbGVjdG9yIHdpdGggc2luZ2xlIHF1b3RlcyIs
ICJpbnB1dFtuYW1lPSdhY3Rpb24nXSIsIFsidGV4dDEiXSApOworCXQoICJOYW1lIHNlbGVjdG9y
IHdpdGggZG91YmxlIHF1b3RlcyIsICdpbnB1dFtuYW1lPSJhY3Rpb24iXScsIFsidGV4dDEiXSAp
OworCisJdCggIk5hbWUgc2VsZWN0b3Igbm9uLWlucHV0IiwgIltuYW1lPXRlc3RdIiwgWyJsZW5n
dGgiLCAiZngtcXVldWUiXSApOworCXQoICJOYW1lIHNlbGVjdG9yIG5vbi1pbnB1dCIsICJbbmFt
ZT1kaXZdIiwgWyJmYWRlaW4iXSApOworCXQoICJOYW1lIHNlbGVjdG9yIG5vbi1pbnB1dCIsICIq
W25hbWU9aWZyYW1lXSIsIFsiaWZyYW1lIl0gKTsKKworCXQoICJOYW1lIHNlbGVjdG9yIGZvciBn
cm91cGVkIGlucHV0IiwgImlucHV0W25hbWU9J3R5cGVzW10nXSIsIFsidHlwZXNfYWxsIiwgInR5
cGVzX2FuaW1lIiwgInR5cGVzX21vdmllIl0gKQorCisJc2FtZSggalF1ZXJ5KCIjZm9ybSIpLmZp
bmQoImlucHV0W25hbWU9YWN0aW9uXSIpLmdldCgpLCBxKCJ0ZXh0MSIpLCAiTmFtZSBzZWxlY3Rv
ciB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYW5vdGhlciBlbGVtZW50IiApOworCXNhbWUoIGpRdWVy
eSgiI2Zvcm0iKS5maW5kKCJpbnB1dFtuYW1lPSdmb29bYmFyXSddIikuZ2V0KCksIHEoImhpZGRl
bjIiKSwgIk5hbWUgc2VsZWN0b3IgZm9yIGdyb3VwZWQgZm9ybSBlbGVtZW50IHdpdGhpbiB0aGUg
Y29udGV4dCBvZiBhbm90aGVyIGVsZW1lbnQiICk7CisKKwl2YXIgZm9ybSA9IGpRdWVyeSgiPGZv
cm0+PGlucHV0IG5hbWU9J2lkJy8+PC9mb3JtPiIpLmFwcGVuZFRvKCJib2R5Iik7CisKKwllcXVh
bHMoIGZvcm0uZmluZCgiaW5wdXQiKS5sZW5ndGgsIDEsICJNYWtlIHN1cmUgdGhhdCByb290ZWQg
cXVlcmllcyBvbiBmb3JtcyAod2l0aCBwb3NzaWJsZSBleHBhbmRvcykgd29yay4iICk7CisKKwlm
b3JtLnJlbW92ZSgpOworCisJdmFyIGEgPSBqUXVlcnkoJzxkaXY+PGEgaWQ9InROYW1lMUlEIiBu
YW1lPSJ0TmFtZTEiPnROYW1lMSBBPC9hPjxhIGlkPSJ0TmFtZTJJRCIgbmFtZT0idE5hbWUyIj50
TmFtZTIgQTwvYT48ZGl2IGlkPSJ0TmFtZTEiPnROYW1lMSBEaXY8L2Rpdj48L2Rpdj4nKS5hcHBl
bmRUbygnI21haW4nKS5jaGlsZHJlbigpOworCisJZXF1YWxzKCBhLmxlbmd0aCwgMywgIk1ha2Ug
c3VyZSB0aGUgcmlnaHQgbnVtYmVyIG9mIGVsZW1lbnRzIHdlcmUgaW5zZXJ0ZWQuIiApOworCWVx
dWFscyggYVsxXS5pZCwgInROYW1lMklEIiwgIk1ha2Ugc3VyZSB0aGUgcmlnaHQgbnVtYmVyIG9m
IGVsZW1lbnRzIHdlcmUgaW5zZXJ0ZWQuIiApOworCisJZXF1YWxzKCBqUXVlcnkoIltuYW1lPXRO
YW1lMV0iKVswXSwgYVswXSwgIkZpbmQgZWxlbWVudHMgdGhhdCBoYXZlIHNpbWlsYXIgSURzIiAp
OworCWVxdWFscyggalF1ZXJ5KCJbbmFtZT10TmFtZTJdIilbMF0sIGFbMV0sICJGaW5kIGVsZW1l
bnRzIHRoYXQgaGF2ZSBzaW1pbGFyIElEcyIgKTsKKwl0KCAiRmluZCBlbGVtZW50cyB0aGF0IGhh
dmUgc2ltaWxhciBJRHMiLCAiI3ROYW1lMklEIiwgWyJ0TmFtZTJJRCJdICk7CisKKwlhLnJlbW92
ZSgpOworfSk7CisKK3Rlc3QoIm11bHRpcGxlIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDQpOwor
CisJdCggIkNvbW1hIFN1cHBvcnQiLCAiaDIsICNtYWluIHAiLCBbInF1bml0LWJhbm5lciIsInF1
bml0LXVzZXJBZ2VudCIsImZpcnN0cCIsImFwIiwic25kcCIsImVuIiwic2FwIiwiZmlyc3QiXSk7
CisJdCggIkNvbW1hIFN1cHBvcnQiLCAiaDIgLCAjbWFpbiBwIiwgWyJxdW5pdC1iYW5uZXIiLCJx
dW5pdC11c2VyQWdlbnQiLCJmaXJzdHAiLCJhcCIsInNuZHAiLCJlbiIsInNhcCIsImZpcnN0Il0p
OworCXQoICJDb21tYSBTdXBwb3J0IiwgImgyICwgI21haW4gcCIsIFsicXVuaXQtYmFubmVyIiwi
cXVuaXQtdXNlckFnZW50IiwiZmlyc3RwIiwiYXAiLCJzbmRwIiwiZW4iLCJzYXAiLCJmaXJzdCJd
KTsKKwl0KCAiQ29tbWEgU3VwcG9ydCIsICJoMiwjbWFpbiBwIiwgWyJxdW5pdC1iYW5uZXIiLCJx
dW5pdC11c2VyQWdlbnQiLCJmaXJzdHAiLCJhcCIsInNuZHAiLCJlbiIsInNhcCIsImZpcnN0Il0p
OworfSk7CisKK3Rlc3QoImNoaWxkIGFuZCBhZGphY2VudCIsIGZ1bmN0aW9uKCkgeworCWV4cGVj
dCgzMyk7CisJdCggIkNoaWxkIiwgInAgPiBhIiwgWyJzaW1vbjEiLCJnb29nbGUiLCJncm91cHMi
LCJtYXJrIiwieWFob28iLCJzaW1vbiJdICk7CisJdCggIkNoaWxkIiwgInA+IGEiLCBbInNpbW9u
MSIsImdvb2dsZSIsImdyb3VwcyIsIm1hcmsiLCJ5YWhvbyIsInNpbW9uIl0gKTsKKwl0KCAiQ2hp
bGQiLCAicCA+YSIsIFsic2ltb24xIiwiZ29vZ2xlIiwiZ3JvdXBzIiwibWFyayIsInlhaG9vIiwi
c2ltb24iXSApOworCXQoICJDaGlsZCIsICJwPmEiLCBbInNpbW9uMSIsImdvb2dsZSIsImdyb3Vw
cyIsIm1hcmsiLCJ5YWhvbyIsInNpbW9uIl0gKTsKKwl0KCAiQ2hpbGQgdy8gQ2xhc3MiLCAicCA+
IGEuYmxvZyIsIFsibWFyayIsInNpbW9uIl0gKTsKKwl0KCAiQWxsIENoaWxkcmVuIiwgImNvZGUg
PiAqIiwgWyJhbmNob3IxIiwiYW5jaG9yMiJdICk7CisJdCggIkFsbCBHcmFuZGNoaWxkcmVuIiwg
InAgPiAqID4gKiIsIFsiYW5jaG9yMSIsImFuY2hvcjIiXSApOworCXQoICJBZGphY2VudCIsICIj
bWFpbiBhICsgYSIsIFsiZ3JvdXBzIl0gKTsKKwl0KCAiQWRqYWNlbnQiLCAiI21haW4gYSArYSIs
IFsiZ3JvdXBzIl0gKTsKKwl0KCAiQWRqYWNlbnQiLCAiI21haW4gYSsgYSIsIFsiZ3JvdXBzIl0g
KTsKKwl0KCAiQWRqYWNlbnQiLCAiI21haW4gYSthIiwgWyJncm91cHMiXSApOworCXQoICJBZGph
Y2VudCIsICJwICsgcCIsIFsiYXAiLCJlbiIsInNhcCJdICk7CisJdCggIkFkamFjZW50IiwgInAj
Zmlyc3RwICsgcCIsIFsiYXAiXSApOworCXQoICJBZGphY2VudCIsICJwW2xhbmc9ZW5dICsgcCIs
IFsic2FwIl0gKTsKKwl0KCAiQWRqYWNlbnQiLCAiYS5HUk9VUFMgKyBjb2RlICsgYSIsIFsibWFy
ayJdICk7CisJdCggIkNvbW1hLCBDaGlsZCwgYW5kIEFkamFjZW50IiwgIiNtYWluIGEgKyBhLCBj
b2RlID4gYSIsIFsiZ3JvdXBzIiwiYW5jaG9yMSIsImFuY2hvcjIiXSApOworCXQoICJFbGVtZW50
IFByZWNlZGVkIEJ5IiwgIiNtYWluIHAgfiBkaXYiLCBbImZvbyIsICJtb3JldGVzdHMiLCJ0YWJp
bmRleC10ZXN0cyIsICJsaXZlSGFuZGxlck9yZGVyIiwgInNpYmxpbmdUZXN0Il0gKTsKKwl0KCAi
RWxlbWVudCBQcmVjZWRlZCBCeSIsICIjZmlyc3QgfiBkaXYiLCBbIm1vcmV0ZXN0cyIsInRhYmlu
ZGV4LXRlc3RzIiwgImxpdmVIYW5kbGVyT3JkZXIiLCAic2libGluZ1Rlc3QiXSApOworCXQoICJF
bGVtZW50IFByZWNlZGVkIEJ5IiwgIiNncm91cHMgfiBhIiwgWyJtYXJrIl0gKTsKKwl0KCAiRWxl
bWVudCBQcmVjZWRlZCBCeSIsICIjbGVuZ3RoIH4gaW5wdXQiLCBbImlkVGVzdCJdICk7CisJdCgg
IkVsZW1lbnQgUHJlY2VkZWQgQnkiLCAiI3NpYmxpbmdmaXJzdCB+IGVtIiwgWyJzaWJsaW5nbmV4
dCJdICk7CisJc2FtZSggalF1ZXJ5KCIjc2libGluZ2ZpcnN0IikuZmluZCgifiBlbSIpLmdldCgp
LCBxKCJzaWJsaW5nbmV4dCIpLCAiRWxlbWVudCBQcmVjZWRlZCBCeSB3aXRoIGEgY29udGV4dC4i
ICk7CisJc2FtZSggalF1ZXJ5KCIjc2libGluZ2ZpcnN0IikuZmluZCgiKyBlbSIpLmdldCgpLCBx
KCJzaWJsaW5nbmV4dCIpLCAiRWxlbWVudCBEaXJlY3RseSBQcmVjZWRlZCBCeSB3aXRoIGEgY29u
dGV4dC4iICk7CisKKwllcXVhbCggalF1ZXJ5KCIjbGlzdFdpdGhUYWJJbmRleCIpLmxlbmd0aCwg
MSwgIlBhcmVudCBkaXYgZm9yIG5leHQgdGVzdCBpcyBmb3VuZCB2aWEgSUQgKCM4MzEwKSIgKTsK
KwllcXVhbCggalF1ZXJ5KCIjbGlzdFdpdGhUYWJJbmRleCBsaTplcSgyKSB+IGxpIikubGVuZ3Ro
LCAxLCAiRmluZCBieSBnZW5lcmFsIHNpYmxpbmcgY29tYmluYXRvciAoIzgzMTApIiApOworCWVx
dWFsKCBqUXVlcnkoIiNfX3NpenpsZV9fIikubGVuZ3RoLCAwLCAiTWFrZSBzdXJlIHRoZSB0ZW1w
b3JhcnkgaWQgYXNzaWduZWQgYnkgc2l6emxlIGlzIGNsZWFyZWQgb3V0ICgjODMxMCkiICk7CisJ
ZXF1YWwoIGpRdWVyeSgiI2xpc3RXaXRoVGFiSW5kZXgiKS5sZW5ndGgsIDEsICJQYXJlbnQgZGl2
IGZvciBwcmV2aW91cyB0ZXN0IGlzIHN0aWxsIGZvdW5kIHZpYSBJRCAoIzgzMTApIiApOworCisJ
dCggIlZlcmlmeSBkZWVwIGNsYXNzIHNlbGVjdG9yIiwgImRpdi5ibGFoID4gcCA+IGEiLCBbXSAp
OworCisJdCggIk5vIGVsZW1lbnQgZGVlcCBzZWxlY3RvciIsICJkaXYuZm9vID4gc3BhbiA+IGEi
LCBbXSApOworCisJc2FtZSggalF1ZXJ5KCI+IDpmaXJzdCIsIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJub3RoaWRkZW5kaXYiKSkuZ2V0KCksIHEoIm5vdGhpZGRlbmRpdmNoaWxkIiksICJWZXJp
ZnkgY2hpbGQgY29udGV4dCBwb3NpdGlvbmFsIHNlbGN0b3IiICk7CisJc2FtZSggalF1ZXJ5KCI+
IDplcSgwKSIsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJub3RoaWRkZW5kaXYiKSkuZ2V0KCks
IHEoIm5vdGhpZGRlbmRpdmNoaWxkIiksICJWZXJpZnkgY2hpbGQgY29udGV4dCBwb3NpdGlvbmFs
IHNlbGN0b3IiICk7CisJc2FtZSggalF1ZXJ5KCI+ICo6Zmlyc3QiLCBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgibm90aGlkZGVuZGl2IikpLmdldCgpLCBxKCJub3RoaWRkZW5kaXZjaGlsZCIpLCAi
VmVyaWZ5IGNoaWxkIGNvbnRleHQgcG9zaXRpb25hbCBzZWxjdG9yIiApOworCisJdCggIk5vbi1l
eGlzdGFudCBhbmNlc3RvcnMiLCAiLmZvdG90YWIgPiAudGh1bWJuYWlscyA+IGEiLCBbXSApOwor
fSk7CisKK3Rlc3QoImF0dHJpYnV0ZXMiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoNDUpOworCisJ
dCggIkF0dHJpYnV0ZSBFeGlzdHMiLCAiYVt0aXRsZV0iLCBbImdvb2dsZSJdICk7CisJdCggIkF0
dHJpYnV0ZSBFeGlzdHMiLCAiKlt0aXRsZV0iLCBbImdvb2dsZSJdICk7CisJdCggIkF0dHJpYnV0
ZSBFeGlzdHMiLCAiW3RpdGxlXSIsIFsiZ29vZ2xlIl0gKTsKKwl0KCAiQXR0cmlidXRlIEV4aXN0
cyIsICJhWyB0aXRsZSBdIiwgWyJnb29nbGUiXSApOworCisJdCggIkF0dHJpYnV0ZSBFcXVhbHMi
LCAiYVtyZWw9J2Jvb2ttYXJrJ10iLCBbInNpbW9uMSJdICk7CisJdCggIkF0dHJpYnV0ZSBFcXVh
bHMiLCAnYVtyZWw9ImJvb2ttYXJrIl0nLCBbInNpbW9uMSJdICk7CisJdCggIkF0dHJpYnV0ZSBF
cXVhbHMiLCAiYVtyZWw9Ym9va21hcmtdIiwgWyJzaW1vbjEiXSApOworCXQoICJBdHRyaWJ1dGUg
RXF1YWxzIiwgImFbaHJlZj0naHR0cDovL3d3dy5nb29nbGUuY29tLyddIiwgWyJnb29nbGUiXSAp
OworCXQoICJBdHRyaWJ1dGUgRXF1YWxzIiwgImFbIHJlbCA9ICdib29rbWFyaycgXSIsIFsic2lt
b24xIl0gKTsKKworCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhbmNob3IyIikuaHJlZiA9ICIj
MiI7CisJdCggImhyZWYgQXR0cmlidXRlIiwgInAgYVtocmVmXj0jXSIsIFsiYW5jaG9yMiJdICk7
CisJdCggImhyZWYgQXR0cmlidXRlIiwgInAgYVtocmVmKj0jXSIsIFsic2ltb24xIiwgImFuY2hv
cjIiXSApOworCisJdCggImZvciBBdHRyaWJ1dGUiLCAiZm9ybSBsYWJlbFtmb3JdIiwgWyJsYWJl
bC1mb3IiXSApOworCXQoICJmb3IgQXR0cmlidXRlIGluIGZvcm0iLCAiI2Zvcm0gW2Zvcj1hY3Rp
b25dIiwgWyJsYWJlbC1mb3IiXSApOworCisJdCggIkF0dHJpYnV0ZSBjb250YWluaW5nIFtdIiwg
ImlucHV0W25hbWVePSdmb29bJ10iLCBbImhpZGRlbjIiXSApOworCXQoICJBdHRyaWJ1dGUgY29u
dGFpbmluZyBbXSIsICJpbnB1dFtuYW1lXj0nZm9vW2Jhcl0nXSIsIFsiaGlkZGVuMiJdICk7CisJ
dCggIkF0dHJpYnV0ZSBjb250YWluaW5nIFtdIiwgImlucHV0W25hbWUqPSdbYmFyXSddIiwgWyJo
aWRkZW4yIl0gKTsKKwl0KCAiQXR0cmlidXRlIGNvbnRhaW5pbmcgW10iLCAiaW5wdXRbbmFtZSQ9
J2Jhcl0nXSIsIFsiaGlkZGVuMiJdICk7CisJdCggIkF0dHJpYnV0ZSBjb250YWluaW5nIFtdIiwg
ImlucHV0W25hbWUkPSdbYmFyXSddIiwgWyJoaWRkZW4yIl0gKTsKKwl0KCAiQXR0cmlidXRlIGNv
bnRhaW5pbmcgW10iLCAiaW5wdXRbbmFtZSQ9J2Zvb1tiYXJdJ10iLCBbImhpZGRlbjIiXSApOwor
CXQoICJBdHRyaWJ1dGUgY29udGFpbmluZyBbXSIsICJpbnB1dFtuYW1lKj0nZm9vW2Jhcl0nXSIs
IFsiaGlkZGVuMiJdICk7CisKKwl0KCAiTXVsdGlwbGUgQXR0cmlidXRlIEVxdWFscyIsICIjZm9y
bSBpbnB1dFt0eXBlPSdyYWRpbyddLCAjZm9ybSBpbnB1dFt0eXBlPSdoaWRkZW4nXSIsIFsicmFk
aW8xIiwgInJhZGlvMiIsICJoaWRkZW4xIl0gKTsKKwl0KCAiTXVsdGlwbGUgQXR0cmlidXRlIEVx
dWFscyIsICIjZm9ybSBpbnB1dFt0eXBlPSdyYWRpbyddLCAjZm9ybSBpbnB1dFt0eXBlPVwiaGlk
ZGVuXCJdIiwgWyJyYWRpbzEiLCAicmFkaW8yIiwgImhpZGRlbjEiXSApOworCXQoICJNdWx0aXBs
ZSBBdHRyaWJ1dGUgRXF1YWxzIiwgIiNmb3JtIGlucHV0W3R5cGU9J3JhZGlvJ10sICNmb3JtIGlu
cHV0W3R5cGU9aGlkZGVuXSIsIFsicmFkaW8xIiwgInJhZGlvMiIsICJoaWRkZW4xIl0gKTsKKwor
CXQoICJBdHRyaWJ1dGUgc2VsZWN0b3IgdXNpbmcgVVRGOCIsICJzcGFuW2xhbmc95Lit5paHXSIs
IFsi5Y+w5YyXIl0gKTsKKworCXQoICJBdHRyaWJ1dGUgQmVnaW5zIFdpdGgiLCAiYVtocmVmIF49
ICdodHRwOi8vd3d3J10iLCBbImdvb2dsZSIsInlhaG9vIl0gKTsKKwl0KCAiQXR0cmlidXRlIEVu
ZHMgV2l0aCIsICJhW2hyZWYgJD0gJ29yZy8nXSIsIFsibWFyayJdICk7CisJdCggIkF0dHJpYnV0
ZSBDb250YWlucyIsICJhW2hyZWYgKj0gJ2dvb2dsZSddIiwgWyJnb29nbGUiLCJncm91cHMiXSAp
OworCXQoICJBdHRyaWJ1dGUgSXMgTm90IEVxdWFsIiwgIiNhcCBhW2hyZWZsYW5nIT0nZW4nXSIs
IFsiZ29vZ2xlIiwiZ3JvdXBzIiwiYW5jaG9yMSJdICk7CisKKwl2YXIgb3B0ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoIm9wdGlvbjFhIiksCisJCW1hdGNoID0gKHdpbmRvdy5TaXp6bGUgfHwg
d2luZG93LmpRdWVyeS5maW5kKS5tYXRjaGVzU2VsZWN0b3I7CisKKwlvcHQuc2V0QXR0cmlidXRl
KCJ0ZXN0IiwgIiIpOworCisJb2soIG1hdGNoKCBvcHQsICJbaWQqPW9wdGlvbjFdW3R5cGUhPWNo
ZWNrYm94XSIgKSwgIkF0dHJpYnV0ZSBJcyBOb3QgRXF1YWwgTWF0Y2hlcyIgKTsKKwlvayggbWF0
Y2goIG9wdCwgIltpZCo9b3B0aW9uMV0iICksICJBdHRyaWJ1dGUgV2l0aCBObyBRdW90ZXMgQ29u
dGFpbnMgTWF0Y2hlcyIgKTsKKwlvayggbWF0Y2goIG9wdCwgIlt0ZXN0PV0iICksICJBdHRyaWJ1
dGUgV2l0aCBObyBRdW90ZXMgTm8gQ29udGVudCBNYXRjaGVzIiApOworCW9rKCBtYXRjaCggb3B0
LCAiW2lkPW9wdGlvbjFhXSIgKSwgIkF0dHJpYnV0ZSBXaXRoIE5vIFF1b3RlcyBFcXVhbHMgTWF0
Y2hlcyIgKTsKKwlvayggbWF0Y2goIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzaW1vbjEiKSwg
ImFbaHJlZio9I10iICksICJBdHRyaWJ1dGUgV2l0aCBObyBRdW90ZXMgSHJlZiBDb250YWlucyBN
YXRjaGVzIiApOworCisJdCgiRW1wdHkgdmFsdWVzIiwgIiNzZWxlY3QxIG9wdGlvblt2YWx1ZT0n
J10iLCBbIm9wdGlvbjFhIl0pOworCXQoIkVtcHR5IHZhbHVlcyIsICIjc2VsZWN0MSBvcHRpb25b
dmFsdWUhPScnXSIsIFsib3B0aW9uMWIiLCJvcHRpb24xYyIsIm9wdGlvbjFkIl0pOworCisJdCgi
U2VsZWN0IG9wdGlvbnMgdmlhIDpzZWxlY3RlZCIsICIjc2VsZWN0MSBvcHRpb246c2VsZWN0ZWQi
LCBbIm9wdGlvbjFhIl0gKTsKKwl0KCJTZWxlY3Qgb3B0aW9ucyB2aWEgOnNlbGVjdGVkIiwgIiNz
ZWxlY3QyIG9wdGlvbjpzZWxlY3RlZCIsIFsib3B0aW9uMmQiXSApOworCXQoIlNlbGVjdCBvcHRp
b25zIHZpYSA6c2VsZWN0ZWQiLCAiI3NlbGVjdDMgb3B0aW9uOnNlbGVjdGVkIiwgWyJvcHRpb24z
YiIsICJvcHRpb24zYyJdICk7CisKKwl0KCAiR3JvdXBlZCBGb3JtIEVsZW1lbnRzIiwgImlucHV0
W25hbWU9J2Zvb1tiYXJdJ10iLCBbImhpZGRlbjIiXSApOworCisJLy8gTWFrZSBzdXJlIGF0dHJp
YnV0ZSB2YWx1ZSBxdW90aW5nIHdvcmtzIGNvcnJlY3RseS4gU2VlOiAjNjA5MworCXZhciBhdHRy
YmFkID0galF1ZXJ5KCc8aW5wdXQgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iMiIgbmFtZT0iZm9vLmJh
eiIgaWQ9ImF0dHJiYWQxIi8+PGlucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9IjIiIG5hbWU9ImZv
b1tiYXpdIiBpZD0iYXR0cmJhZDIiLz4nKS5hcHBlbmRUbygiYm9keSIpOworCisJdCgiRmluZCBl
c2NhcGVkIGF0dHJpYnV0ZSB2YWx1ZSIsICJpbnB1dFtuYW1lPWZvb1xcLmJhel0iLCBbImF0dHJi
YWQxIl0pOworCXQoIkZpbmQgZXNjYXBlZCBhdHRyaWJ1dGUgdmFsdWUiLCAiaW5wdXRbbmFtZT1m
b29cXFtiYXpcXF1dIiwgWyJhdHRyYmFkMiJdKTsKKworCXQoImlucHV0W3R5cGU9dGV4dF0iLCAi
I2Zvcm0gaW5wdXRbdHlwZT10ZXh0XSIsIFsidGV4dDEiLCAidGV4dDIiLCAiaGlkZGVuMiIsICJu
YW1lIl0pOworCXQoImlucHV0W3R5cGU9c2VhcmNoXSIsICIjZm9ybSBpbnB1dFt0eXBlPXNlYXJj
aF0iLCBbInNlYXJjaCJdKTsKKworCWF0dHJiYWQucmVtb3ZlKCk7CisKKwkvLyM2NDI4CisJdCgi
RmluZCBlc2NhcGVkIGF0dHJpYnV0ZSB2YWx1ZSIsICIjZm9ybSBpbnB1dFtuYW1lPWZvb1xcW2Jh
clxcXV0iLCBbImhpZGRlbjIiXSk7CisKKwkvLyMzMjc5CisJdmFyIGRpdiA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOworCWRpdi5pbm5lckhUTUwgPSAiPGRpdiBpZD0nZm9vJyB4bWw6
dGVzdD0nc29tZXRoaW5nJz48L2Rpdj4iOworCisJZGVlcEVxdWFsKCBqUXVlcnkoICJbeG1sXFw6
dGVzdF0iLCBkaXYgKS5nZXQoKSwgWyBkaXYuZmlyc3RDaGlsZCBdLCAiRmluZGluZyBieSBhdHRy
aWJ1dGUgd2l0aCBlc2NhcGVkIGNoYXJhY3RlcnMuIiApOworfSk7CisKK3Rlc3QoInBzZXVkbyAt
IGNoaWxkIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDM4KTsKKwl0KCAiRmlyc3QgQ2hpbGQiLCAi
I21haW4gcDpmaXJzdC1jaGlsZCIsIFsiZmlyc3RwIiwic25kcCJdICk7CisJdCggIkxhc3QgQ2hp
bGQiLCAicDpsYXN0LWNoaWxkIiwgWyJzYXAiXSApOworCXQoICJPbmx5IENoaWxkIiwgIiNtYWlu
IGE6b25seS1jaGlsZCIsIFsic2ltb24xIiwiYW5jaG9yMSIsInlhaG9vIiwiYW5jaG9yMiIsImxp
dmVMaW5rMSIsImxpdmVMaW5rMiJdICk7CisJdCggIkVtcHR5IiwgInVsOmVtcHR5IiwgWyJmaXJz
dFVMIl0gKTsKKwl0KCAiSXMgQSBQYXJlbnQiLCAiI21haW4gcDpwYXJlbnQiLCBbImZpcnN0cCIs
ImFwIiwic25kcCIsImVuIiwic2FwIiwiZmlyc3QiXSApOworCisJdCggIkZpcnN0IENoaWxkIiwg
InA6Zmlyc3QtY2hpbGQiLCBbImZpcnN0cCIsInNuZHAiXSApOworCXQoICJOdGggQ2hpbGQiLCAi
cDpudGgtY2hpbGQoMSkiLCBbImZpcnN0cCIsInNuZHAiXSApOworCXQoICJOdGggQ2hpbGQgV2l0
aCBXaGl0ZXNwYWNlIiwgInA6bnRoLWNoaWxkKCAxICkiLCBbImZpcnN0cCIsInNuZHAiXSApOwor
CXQoICJOb3QgTnRoIENoaWxkIiwgIiNtYWluIHA6bm90KDpudGgtY2hpbGQoMSkpIiwgWyJhcCIs
ImVuIiwic2FwIiwiZmlyc3QiXSApOworCisJLy8gVmVyaWZ5IHRoYXQgdGhlIGNoaWxkIHBvc2l0
aW9uIGlzbid0IGJlaW5nIGNhY2hlZCBpbXByb3Blcmx5CisJalF1ZXJ5KCJwOmZpcnN0LWNoaWxk
IikuYWZ0ZXIoIjxkaXY+PC9kaXY+Iik7CisJalF1ZXJ5KCJwOmZpcnN0LWNoaWxkIikuYmVmb3Jl
KCI8ZGl2PjwvZGl2PiIpLm5leHQoKS5yZW1vdmUoKTsKKworCXQoICJGaXJzdCBDaGlsZCIsICJw
OmZpcnN0LWNoaWxkIiwgW10gKTsKKworCVFVbml0LnJlc2V0KCk7CisKKwl0KCAiTGFzdCBDaGls
ZCIsICJwOmxhc3QtY2hpbGQiLCBbInNhcCJdICk7CisJdCggIkxhc3QgQ2hpbGQiLCAiI21haW4g
YTpsYXN0LWNoaWxkIiwgWyJzaW1vbjEiLCJhbmNob3IxIiwibWFyayIsInlhaG9vIiwiYW5jaG9y
MiIsInNpbW9uIiwibGl2ZUxpbmsxIiwibGl2ZUxpbmsyIl0gKTsKKworCXQoICJOdGgtY2hpbGQi
LCAiI21haW4gZm9ybSNmb3JtID4gKjpudGgtY2hpbGQoMikiLCBbInRleHQxIl0gKTsKKwl0KCAi
TnRoLWNoaWxkIiwgIiNtYWluIGZvcm0jZm9ybSA+IDpudGgtY2hpbGQoMikiLCBbInRleHQxIl0g
KTsKKworCXQoICJOdGgtY2hpbGQiLCAiI2Zvcm0gc2VsZWN0OmZpcnN0IG9wdGlvbjpudGgtY2hp
bGQoLTEpIiwgW10gKTsKKwl0KCAiTnRoLWNoaWxkIiwgIiNmb3JtIHNlbGVjdDpmaXJzdCBvcHRp
b246bnRoLWNoaWxkKDMpIiwgWyJvcHRpb24xYyJdICk7CisJdCggIk50aC1jaGlsZCIsICIjZm9y
bSBzZWxlY3Q6Zmlyc3Qgb3B0aW9uOm50aC1jaGlsZCgwbiszKSIsIFsib3B0aW9uMWMiXSApOwor
CXQoICJOdGgtY2hpbGQiLCAiI2Zvcm0gc2VsZWN0OmZpcnN0IG9wdGlvbjpudGgtY2hpbGQoMW4r
MCkiLCBbIm9wdGlvbjFhIiwgIm9wdGlvbjFiIiwgIm9wdGlvbjFjIiwgIm9wdGlvbjFkIl0gKTsK
Kwl0KCAiTnRoLWNoaWxkIiwgIiNmb3JtIHNlbGVjdDpmaXJzdCBvcHRpb246bnRoLWNoaWxkKDFu
KSIsIFsib3B0aW9uMWEiLCAib3B0aW9uMWIiLCAib3B0aW9uMWMiLCAib3B0aW9uMWQiXSApOwor
CXQoICJOdGgtY2hpbGQiLCAiI2Zvcm0gc2VsZWN0OmZpcnN0IG9wdGlvbjpudGgtY2hpbGQobiki
LCBbIm9wdGlvbjFhIiwgIm9wdGlvbjFiIiwgIm9wdGlvbjFjIiwgIm9wdGlvbjFkIl0gKTsKKwl0
KCAiTnRoLWNoaWxkIiwgIiNmb3JtIHNlbGVjdDpmaXJzdCBvcHRpb246bnRoLWNoaWxkKCtuKSIs
IFsib3B0aW9uMWEiLCAib3B0aW9uMWIiLCAib3B0aW9uMWMiLCAib3B0aW9uMWQiXSApOworCXQo
ICJOdGgtY2hpbGQiLCAiI2Zvcm0gc2VsZWN0OmZpcnN0IG9wdGlvbjpudGgtY2hpbGQoZXZlbiki
LCBbIm9wdGlvbjFiIiwgIm9wdGlvbjFkIl0gKTsKKwl0KCAiTnRoLWNoaWxkIiwgIiNmb3JtIHNl
bGVjdDpmaXJzdCBvcHRpb246bnRoLWNoaWxkKG9kZCkiLCBbIm9wdGlvbjFhIiwgIm9wdGlvbjFj
Il0gKTsKKwl0KCAiTnRoLWNoaWxkIiwgIiNmb3JtIHNlbGVjdDpmaXJzdCBvcHRpb246bnRoLWNo
aWxkKDJuKSIsIFsib3B0aW9uMWIiLCAib3B0aW9uMWQiXSApOworCXQoICJOdGgtY2hpbGQiLCAi
I2Zvcm0gc2VsZWN0OmZpcnN0IG9wdGlvbjpudGgtY2hpbGQoMm4rMSkiLCBbIm9wdGlvbjFhIiwg
Im9wdGlvbjFjIl0gKTsKKwl0KCAiTnRoLWNoaWxkIiwgIiNmb3JtIHNlbGVjdDpmaXJzdCBvcHRp
b246bnRoLWNoaWxkKDJuICsgMSkiLCBbIm9wdGlvbjFhIiwgIm9wdGlvbjFjIl0gKTsKKwl0KCAi
TnRoLWNoaWxkIiwgIiNmb3JtIHNlbGVjdDpmaXJzdCBvcHRpb246bnRoLWNoaWxkKCsybiArIDEp
IiwgWyJvcHRpb24xYSIsICJvcHRpb24xYyJdICk7CisJdCggIk50aC1jaGlsZCIsICIjZm9ybSBz
ZWxlY3Q6Zmlyc3Qgb3B0aW9uOm50aC1jaGlsZCgzbikiLCBbIm9wdGlvbjFjIl0gKTsKKwl0KCAi
TnRoLWNoaWxkIiwgIiNmb3JtIHNlbGVjdDpmaXJzdCBvcHRpb246bnRoLWNoaWxkKDNuKzEpIiwg
WyJvcHRpb24xYSIsICJvcHRpb24xZCJdICk7CisJdCggIk50aC1jaGlsZCIsICIjZm9ybSBzZWxl
Y3Q6Zmlyc3Qgb3B0aW9uOm50aC1jaGlsZCgzbisyKSIsIFsib3B0aW9uMWIiXSApOworCXQoICJO
dGgtY2hpbGQiLCAiI2Zvcm0gc2VsZWN0OmZpcnN0IG9wdGlvbjpudGgtY2hpbGQoM24rMykiLCBb
Im9wdGlvbjFjIl0gKTsKKwl0KCAiTnRoLWNoaWxkIiwgIiNmb3JtIHNlbGVjdDpmaXJzdCBvcHRp
b246bnRoLWNoaWxkKDNuLTEpIiwgWyJvcHRpb24xYiJdICk7CisJdCggIk50aC1jaGlsZCIsICIj
Zm9ybSBzZWxlY3Q6Zmlyc3Qgb3B0aW9uOm50aC1jaGlsZCgzbi0yKSIsIFsib3B0aW9uMWEiLCAi
b3B0aW9uMWQiXSApOworCXQoICJOdGgtY2hpbGQiLCAiI2Zvcm0gc2VsZWN0OmZpcnN0IG9wdGlv
bjpudGgtY2hpbGQoM24tMykiLCBbIm9wdGlvbjFjIl0gKTsKKwl0KCAiTnRoLWNoaWxkIiwgIiNm
b3JtIHNlbGVjdDpmaXJzdCBvcHRpb246bnRoLWNoaWxkKDNuKzApIiwgWyJvcHRpb24xYyJdICk7
CisJdCggIk50aC1jaGlsZCIsICIjZm9ybSBzZWxlY3Q6Zmlyc3Qgb3B0aW9uOm50aC1jaGlsZCgt
MW4rMykiLCBbIm9wdGlvbjFhIiwgIm9wdGlvbjFiIiwgIm9wdGlvbjFjIl0gKTsKKwl0KCAiTnRo
LWNoaWxkIiwgIiNmb3JtIHNlbGVjdDpmaXJzdCBvcHRpb246bnRoLWNoaWxkKC1uKzMpIiwgWyJv
cHRpb24xYSIsICJvcHRpb24xYiIsICJvcHRpb24xYyJdICk7CisJdCggIk50aC1jaGlsZCIsICIj
Zm9ybSBzZWxlY3Q6Zmlyc3Qgb3B0aW9uOm50aC1jaGlsZCgtMW4gKyAzKSIsIFsib3B0aW9uMWEi
LCAib3B0aW9uMWIiLCAib3B0aW9uMWMiXSApOworfSk7CisKK3Rlc3QoInBzZXVkbyAtIG1pc2Mi
LCBmdW5jdGlvbigpIHsKKwlleHBlY3QoNyk7CisKKwl0KCAiSGVhZGVycyIsICI6aGVhZGVyIiwg
WyJxdW5pdC1oZWFkZXIiLCAicXVuaXQtYmFubmVyIiwgInF1bml0LXVzZXJBZ2VudCJdICk7CisJ
dCggIkhhcyBDaGlsZHJlbiAtIDpoYXMoKSIsICJwOmhhcyhhKSIsIFsiZmlyc3RwIiwiYXAiLCJl
biIsInNhcCJdICk7CisKKwl2YXIgc2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNl
bGVjdDEiKTsKKwlvayggKHdpbmRvdy5TaXp6bGUgfHwgd2luZG93LmpRdWVyeS5maW5kKS5tYXRj
aGVzU2VsZWN0b3IoIHNlbGVjdCwgIjpoYXMob3B0aW9uKSIgKSwgIkhhcyBPcHRpb24gTWF0Y2hl
cyIgKTsKKworCXQoICJUZXh0IENvbnRhaW5zIiwgImE6Y29udGFpbnMoR29vZ2xlKSIsIFsiZ29v
Z2xlIiwiZ3JvdXBzIl0gKTsKKwl0KCAiVGV4dCBDb250YWlucyIsICJhOmNvbnRhaW5zKEdvb2ds
ZSBHcm91cHMpIiwgWyJncm91cHMiXSApOworCisJdCggIlRleHQgQ29udGFpbnMiLCAiYTpjb250
YWlucyhHb29nbGUgR3JvdXBzIChMaW5rKSkiLCBbImdyb3VwcyJdICk7CisJdCggIlRleHQgQ29u
dGFpbnMiLCAiYTpjb250YWlucygoTGluaykpIiwgWyJncm91cHMiXSApOworfSk7CisKKwordGVz
dCgicHNldWRvIC0gOm5vdCIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgyNCk7CisJdCggIk5vdCIs
ICJhLmJsb2c6bm90KC5saW5rKSIsIFsibWFyayJdICk7CisKKwl0KCAiTm90IC0gbXVsdGlwbGUi
LCAiI2Zvcm0gb3B0aW9uOm5vdCg6Y29udGFpbnMoTm90aGluZyksI29wdGlvbjFiLDpzZWxlY3Rl
ZCkiLCBbIm9wdGlvbjFjIiwgIm9wdGlvbjFkIiwgIm9wdGlvbjJiIiwgIm9wdGlvbjJjIiwgIm9w
dGlvbjNkIiwgIm9wdGlvbjNlIiwgIm9wdGlvbjRlIiwgIm9wdGlvbjViIiwgIm9wdGlvbjVjIl0g
KTsKKwl0KCAiTm90IC0gcmVjdXJzaXZlIiwgIiNmb3JtIG9wdGlvbjpub3QoOm5vdCg6c2VsZWN0
ZWQpKVtpZF49J29wdGlvbjMnXSIsIFsgIm9wdGlvbjNiIiwgIm9wdGlvbjNjIl0gKTsKKworCXQo
ICI6bm90KCkgZmFpbGluZyBpbnRlcmlvciIsICIjbWFpbiBwOm5vdCguZm9vKSIsIFsiZmlyc3Rw
IiwiYXAiLCJzbmRwIiwiZW4iLCJzYXAiLCJmaXJzdCJdICk7CisJdCggIjpub3QoKSBmYWlsaW5n
IGludGVyaW9yIiwgIiNtYWluIHA6bm90KGRpdi5mb28pIiwgWyJmaXJzdHAiLCJhcCIsInNuZHAi
LCJlbiIsInNhcCIsImZpcnN0Il0gKTsKKwl0KCAiOm5vdCgpIGZhaWxpbmcgaW50ZXJpb3IiLCAi
I21haW4gcDpub3QocC5mb28pIiwgWyJmaXJzdHAiLCJhcCIsInNuZHAiLCJlbiIsInNhcCIsImZp
cnN0Il0gKTsKKwl0KCAiOm5vdCgpIGZhaWxpbmcgaW50ZXJpb3IiLCAiI21haW4gcDpub3QoI2Js
YXJnaCkiLCBbImZpcnN0cCIsImFwIiwic25kcCIsImVuIiwic2FwIiwiZmlyc3QiXSApOworCXQo
ICI6bm90KCkgZmFpbGluZyBpbnRlcmlvciIsICIjbWFpbiBwOm5vdChkaXYjYmxhcmdoKSIsIFsi
Zmlyc3RwIiwiYXAiLCJzbmRwIiwiZW4iLCJzYXAiLCJmaXJzdCJdICk7CisJdCggIjpub3QoKSBm
YWlsaW5nIGludGVyaW9yIiwgIiNtYWluIHA6bm90KHAjYmxhcmdoKSIsIFsiZmlyc3RwIiwiYXAi
LCJzbmRwIiwiZW4iLCJzYXAiLCJmaXJzdCJdICk7CisKKwl0KCAiOm5vdCBNdWx0aXBsZSIsICIj
bWFpbiBwOm5vdChhKSIsIFsiZmlyc3RwIiwiYXAiLCJzbmRwIiwiZW4iLCJzYXAiLCJmaXJzdCJd
ICk7CisJdCggIjpub3QgTXVsdGlwbGUiLCAiI21haW4gcDpub3QoYSwgYikiLCBbImZpcnN0cCIs
ImFwIiwic25kcCIsImVuIiwic2FwIiwiZmlyc3QiXSApOworCXQoICI6bm90IE11bHRpcGxlIiwg
IiNtYWluIHA6bm90KGEsIGIsIGRpdikiLCBbImZpcnN0cCIsImFwIiwic25kcCIsImVuIiwic2Fw
IiwiZmlyc3QiXSApOworCXQoICI6bm90IE11bHRpcGxlIiwgInA6bm90KHApIiwgW10gKTsKKwl0
KCAiOm5vdCBNdWx0aXBsZSIsICJwOm5vdChhLHApIiwgW10gKTsKKwl0KCAiOm5vdCBNdWx0aXBs
ZSIsICJwOm5vdChwLGEpIiwgW10gKTsKKwl0KCAiOm5vdCBNdWx0aXBsZSIsICJwOm5vdChhLHAs
YikiLCBbXSApOworCXQoICI6bm90IE11bHRpcGxlIiwgIjppbnB1dDpub3QoOmltYWdlLDppbnB1
dCw6c3VibWl0KSIsIFtdICk7CisKKwl0KCAiTm8gZWxlbWVudCBub3Qgc2VsZWN0b3IiLCAiLmNv
bnRhaW5lciBkaXY6bm90KC5leGNsdWRlZCkgZGl2IiwgW10gKTsKKworCXQoICI6bm90KCkgRXhp
c3RpbmcgYXR0cmlidXRlIiwgIiNmb3JtIHNlbGVjdDpub3QoW211bHRpcGxlXSkiLCBbInNlbGVj
dDEiLCAic2VsZWN0MiIsICJzZWxlY3Q1Il0pOworCXQoICI6bm90KCkgRXF1YWxzIGF0dHJpYnV0
ZSIsICIjZm9ybSBzZWxlY3Q6bm90KFtuYW1lPXNlbGVjdDFdKSIsIFsic2VsZWN0MiIsICJzZWxl
Y3QzIiwgInNlbGVjdDQiLCJzZWxlY3Q1Il0pOworCXQoICI6bm90KCkgRXF1YWxzIHF1b3RlZCBh
dHRyaWJ1dGUiLCAiI2Zvcm0gc2VsZWN0Om5vdChbbmFtZT0nc2VsZWN0MSddKSIsIFsic2VsZWN0
MiIsICJzZWxlY3QzIiwgInNlbGVjdDQiLCAic2VsZWN0NSJdKTsKKworCXQoICI6bm90KCkgTXVs
dGlwbGUgQ2xhc3MiLCAiI2ZvbyBhOm5vdCguYmxvZykiLCBbInlhaG9vIiwiYW5jaG9yMiJdICk7
CisJdCggIjpub3QoKSBNdWx0aXBsZSBDbGFzcyIsICIjZm9vIGE6bm90KC5saW5rKSIsIFsieWFo
b28iLCJhbmNob3IyIl0gKTsKKwl0KCAiOm5vdCgpIE11bHRpcGxlIENsYXNzIiwgIiNmb28gYTpu
b3QoLmJsb2cubGluaykiLCBbInlhaG9vIiwiYW5jaG9yMiJdICk7Cit9KTsKKwordGVzdCgicHNl
dWRvIC0gcG9zaXRpb24iLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMjUpOworCXQoICJudGggRWxl
bWVudCIsICIjbWFpbiBwOm50aCgxKSIsIFsiYXAiXSApOworCXQoICJGaXJzdCBFbGVtZW50Iiwg
IiNtYWluIHA6Zmlyc3QiLCBbImZpcnN0cCJdICk7CisJdCggIkxhc3QgRWxlbWVudCIsICJwOmxh
c3QiLCBbImZpcnN0Il0gKTsKKwl0KCAiRXZlbiBFbGVtZW50cyIsICIjbWFpbiBwOmV2ZW4iLCBb
ImZpcnN0cCIsInNuZHAiLCJzYXAiXSApOworCXQoICJPZGQgRWxlbWVudHMiLCAiI21haW4gcDpv
ZGQiLCBbImFwIiwiZW4iLCJmaXJzdCJdICk7CisJdCggIlBvc2l0aW9uIEVxdWFscyIsICIjbWFp
biBwOmVxKDEpIiwgWyJhcCJdICk7CisJdCggIlBvc2l0aW9uIEdyZWF0ZXIgVGhhbiIsICIjbWFp
biBwOmd0KDApIiwgWyJhcCIsInNuZHAiLCJlbiIsInNhcCIsImZpcnN0Il0gKTsKKwl0KCAiUG9z
aXRpb24gTGVzcyBUaGFuIiwgIiNtYWluIHA6bHQoMykiLCBbImZpcnN0cCIsImFwIiwic25kcCJd
ICk7CisKKwl0KCAiQ2hlY2sgcG9zaXRpb24gZmlsdGVyaW5nIiwgImRpdiNub3RoaWRkZW5kaXY6
ZXEoMCkiLCBbIm5vdGhpZGRlbmRpdiJdICk7CisJdCggIkNoZWNrIHBvc2l0aW9uIGZpbHRlcmlu
ZyIsICJkaXYjbm90aGlkZGVuZGl2Omxhc3QiLCBbIm5vdGhpZGRlbmRpdiJdICk7CisJdCggIkNo
ZWNrIHBvc2l0aW9uIGZpbHRlcmluZyIsICJkaXYjbm90aGlkZGVuZGl2Om5vdCg6Z3QoMCkpIiwg
WyJub3RoaWRkZW5kaXYiXSApOworCXQoICJDaGVjayBwb3NpdGlvbiBmaWx0ZXJpbmciLCAiI2Zv
byA+IDpub3QoOmZpcnN0KSIsIFsiZW4iLCAic2FwIl0gKTsKKwl0KCAiQ2hlY2sgcG9zaXRpb24g
ZmlsdGVyaW5nIiwgInNlbGVjdCA+IDpub3QoOmd0KDIpKSIsIFsib3B0aW9uMWEiLCAib3B0aW9u
MWIiLCAib3B0aW9uMWMiXSApOworCXQoICJDaGVjayBwb3NpdGlvbiBmaWx0ZXJpbmciLCAic2Vs
ZWN0Omx0KDIpIDpub3QoOmZpcnN0KSIsIFsib3B0aW9uMWIiLCAib3B0aW9uMWMiLCAib3B0aW9u
MWQiLCAib3B0aW9uMmEiLCAib3B0aW9uMmIiLCAib3B0aW9uMmMiLCAib3B0aW9uMmQiXSApOwor
CXQoICJDaGVjayBwb3NpdGlvbiBmaWx0ZXJpbmciLCAiZGl2Lm5vdGhpZGRlbmRpdjplcSgwKSIs
IFsibm90aGlkZGVuZGl2Il0gKTsKKwl0KCAiQ2hlY2sgcG9zaXRpb24gZmlsdGVyaW5nIiwgImRp
di5ub3RoaWRkZW5kaXY6bGFzdCIsIFsibm90aGlkZGVuZGl2Il0gKTsKKwl0KCAiQ2hlY2sgcG9z
aXRpb24gZmlsdGVyaW5nIiwgImRpdi5ub3RoaWRkZW5kaXY6bm90KDpsdCgwKSkiLCBbIm5vdGhp
ZGRlbmRpdiJdICk7CisKKwl0KCAiQ2hlY2sgZWxlbWVudCBwb3NpdGlvbiIsICJkaXYgZGl2OmVx
KDApIiwgWyJub3RoaWRkZW5kaXZjaGlsZCJdICk7CisJdCggIkNoZWNrIGVsZW1lbnQgcG9zaXRp
b24iLCAiZGl2IGRpdjplcSg1KSIsIFsidDIwMzciXSApOworCXQoICJDaGVjayBlbGVtZW50IHBv
c2l0aW9uIiwgImRpdiBkaXY6ZXEoMjgpIiwgWyJoaWRlIl0gKTsKKwl0KCAiQ2hlY2sgZWxlbWVu
dCBwb3NpdGlvbiIsICJkaXYgZGl2OmZpcnN0IiwgWyJub3RoaWRkZW5kaXZjaGlsZCJdICk7CisJ
dCggIkNoZWNrIGVsZW1lbnQgcG9zaXRpb24iLCAiZGl2ID4gZGl2OmZpcnN0IiwgWyJub3RoaWRk
ZW5kaXZjaGlsZCJdICk7CisJdCggIkNoZWNrIGVsZW1lbnQgcG9zaXRpb24iLCAiI2RsIGRpdjpm
aXJzdCBkaXY6Zmlyc3QiLCBbImZvbyJdICk7CisJdCggIkNoZWNrIGVsZW1lbnQgcG9zaXRpb24i
LCAiI2RsIGRpdjpmaXJzdCA+IGRpdjpmaXJzdCIsIFsiZm9vIl0gKTsKKwl0KCAiQ2hlY2sgZWxl
bWVudCBwb3NpdGlvbiIsICJkaXYjbm90aGlkZGVuZGl2OmZpcnN0ID4gZGl2OmZpcnN0IiwgWyJu
b3RoaWRkZW5kaXZjaGlsZCJdICk7Cit9KTsKKworaWYgKCAod2luZG93LlNpenpsZSB8fCBqUXVl
cnkuZmluZCkuc2VsZWN0b3JzLmZpbHRlcnMudmlzaWJpbGl0eSApIHsKK3Rlc3QoInBzZXVkbyAt
IHZpc2liaWxpdHkiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMTEpOworCisJdCggIklzIFZpc2li
bGUiLCAiI2Zvcm0gaW5wdXQ6dmlzaWJsZSIsIFtdICk7CisJdCggIklzIFZpc2libGUiLCAiZGl2
OnZpc2libGU6bm90KCNxdW5pdC10ZXN0cnVubmVyLXRvb2xiYXIpOmx0KDIpIiwgWyJub3RoaWRk
ZW5kaXYiLCAibm90aGlkZGVuZGl2Y2hpbGQiXSApOworCXQoICJJcyBIaWRkZW4iLCAiI2Zvcm0g
aW5wdXQ6aGlkZGVuIiwgWyJ0ZXh0MSIsInRleHQyIiwicmFkaW8xIiwicmFkaW8yIiwiY2hlY2sx
IiwiY2hlY2syIiwiaGlkZGVuMSIsImhpZGRlbjIiLCJuYW1lIiwic2VhcmNoIl0gKTsKKwl0KCAi
SXMgSGlkZGVuIiwgIiNtYWluOmhpZGRlbiIsIFsibWFpbiJdICk7CisJdCggIklzIEhpZGRlbiIs
ICIjZGw6aGlkZGVuIiwgWyJkbCJdICk7CisKKwl2YXIgJGRpdiA9IGpRdWVyeSgnPGRpdi8+Jyku
YXBwZW5kVG8oImJvZHkiKTsKKwkkZGl2LmNzcyh7IGZvbnRTaXplOiAwLCBsaW5lSGVpZ2h0OiAw
IH0pOy8vIElFIGFsc28gbmVlZHMgdG8gc2V0IGZvbnQtc2l6ZSBhbmQgbGluZS1oZWlnaHQgdG8g
MAorCSRkaXYud2lkdGgoMSkuaGVpZ2h0KDApOworCXQoICJJcyBWaXNpYmxlIiwgJyNub3RoaWRk
ZW5kaXZjaGlsZDp2aXNpYmxlJywgWydub3RoaWRkZW5kaXZjaGlsZCddICk7CisJdCggIklzIE5v
dCBWaXNpYmxlIiwgJyNub3RoaWRkZW5kaXZjaGlsZDpoaWRkZW4nLCBbXSApOworCSRkaXYud2lk
dGgoMCkuaGVpZ2h0KDEpOworCXQoICJJcyBWaXNpYmxlIiwgJyNub3RoaWRkZW5kaXZjaGlsZDp2
aXNpYmxlJywgWydub3RoaWRkZW5kaXZjaGlsZCddICk7CisJdCggIklzIE5vdCBWaXNpYmxlIiwg
JyNub3RoaWRkZW5kaXZjaGlsZDpoaWRkZW4nLCBbXSApOworCSRkaXYud2lkdGgoMSkuaGVpZ2h0
KDEpOworCXQoICJJcyBWaXNpYmxlIiwgJyNub3RoaWRkZW5kaXZjaGlsZDp2aXNpYmxlJywgWydu
b3RoaWRkZW5kaXZjaGlsZCddICk7CisJdCggIklzIE5vdCBWaXNpYmxlIiwgJyNub3RoaWRkZW5k
aXZjaGlsZDpoaWRkZW4nLCBbXSApOworCSRkaXYucmVtb3ZlKCk7Cit9KTsKK30KKwordGVzdCgi
cHNldWRvIC0gZm9ybSIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCg4KTsKKworCXQoICJGb3JtIGVs
ZW1lbnQgOmlucHV0IiwgIiNmb3JtIDppbnB1dCIsIFsidGV4dDEiLCAidGV4dDIiLCAicmFkaW8x
IiwgInJhZGlvMiIsICJjaGVjazEiLCAiY2hlY2syIiwgImhpZGRlbjEiLCAiaGlkZGVuMiIsICJu
YW1lIiwgInNlYXJjaCIsICJidXR0b24iLCAiYXJlYTEiLCAic2VsZWN0MSIsICJzZWxlY3QyIiwg
InNlbGVjdDMiLCAic2VsZWN0NCIsICJzZWxlY3Q1Il0gKTsKKwl0KCAiRm9ybSBlbGVtZW50IDpy
YWRpbyIsICIjZm9ybSA6cmFkaW8iLCBbInJhZGlvMSIsICJyYWRpbzIiXSApOworCXQoICJGb3Jt
IGVsZW1lbnQgOmNoZWNrYm94IiwgIiNmb3JtIDpjaGVja2JveCIsIFsiY2hlY2sxIiwgImNoZWNr
MiJdICk7CisJdCggIkZvcm0gZWxlbWVudCA6dGV4dCIsICIjZm9ybSA6dGV4dCIsIFsidGV4dDEi
LCAidGV4dDIiLCAiaGlkZGVuMiIsICJuYW1lIl0gKTsKKwl0KCAiRm9ybSBlbGVtZW50IDpyYWRp
bzpjaGVja2VkIiwgIiNmb3JtIDpyYWRpbzpjaGVja2VkIiwgWyJyYWRpbzIiXSApOworCXQoICJG
b3JtIGVsZW1lbnQgOmNoZWNrYm94OmNoZWNrZWQiLCAiI2Zvcm0gOmNoZWNrYm94OmNoZWNrZWQi
LCBbImNoZWNrMSJdICk7CisJdCggIkZvcm0gZWxlbWVudCA6cmFkaW86Y2hlY2tlZCwgOmNoZWNr
Ym94OmNoZWNrZWQiLCAiI2Zvcm0gOnJhZGlvOmNoZWNrZWQsICNmb3JtIDpjaGVja2JveDpjaGVj
a2VkIiwgWyJyYWRpbzIiLCAiY2hlY2sxIl0gKTsKKworCXQoICJTZWxlY3RlZCBPcHRpb24gRWxl
bWVudCIsICIjZm9ybSBvcHRpb246c2VsZWN0ZWQiLCBbIm9wdGlvbjFhIiwib3B0aW9uMmQiLCJv
cHRpb24zYiIsIm9wdGlvbjNjIiwib3B0aW9uNGIiLCJvcHRpb240YyIsIm9wdGlvbjRkIiwib3B0
aW9uNWEiXSApOworfSk7CisKK3Rlc3QoImRpc2Nvbm5lY3RlZCBub2RlcyIsIGZ1bmN0aW9uKCkg
eworCWV4cGVjdCgzKTsKKwl2YXIgJG9wdCA9IGpRdWVyeSggJzxvcHRpb24gdmFsdWU9IndoaXBp
dCI+V2hpcCBJdDwvb3B0aW9uPicgKS5hcHBlbmRUbygiI21haW4iKS5kZXRhY2goKTsKKwllcXVh
bCggJG9wdC52YWwoKSwgIndoaXBpdCIsICJvcHRpb24gdmFsdWUiICk7CisJZXF1YWwoICRvcHQu
aXMoIjpzZWxlY3RlZCIpLCBmYWxzZSwgInVuc2VsZWN0ZWQgb3B0aW9uIiApOworCSRvcHQuYXR0
cigic2VsZWN0ZWQiLCB0cnVlKTsKKwllcXVhbCggJG9wdC5pcygiOnNlbGVjdGVkIiksIHRydWUs
ICJzZWxlY3RlZCBvcHRpb24iICk7Cit9KTsKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRl
c3RzL2pxdWVyeS9yZXNvdXJjZXMvc3JjL3NpenpsZS90ZXN0L3VuaXQvc2VsZWN0b3IuanMKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICArIHllcwoKSW5kZXg6IExheW91dFRlc3RzL2px
dWVyeS9yZXNvdXJjZXMvdGVzdC9jc3AucGhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2px
dWVyeS9yZXNvdXJjZXMvdGVzdC9jc3AucGhwCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
anF1ZXJ5L3Jlc291cmNlcy90ZXN0L2NzcC5waHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzEg
QEAKKzw/cGhwIGhlYWRlcigiWC1Db250ZW50LVNlY3VyaXR5LVBvbGljeS1SZXBvcnQtT25seTog
YWxsb3cgKiIpOyA/PgorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBo
dHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYt
OCIgLz4KKwk8dGl0bGU+Q1NQIFRlc3QgUGFnZTwvdGl0bGU+CisKKyAgPHNjcmlwdCBzcmM9Ii4u
L3NyYy9jb3JlLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii4uL3NyYy9kZWZlcnJlZC5q
cyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIuLi9zcmMvc3VwcG9ydC5qcyI+PC9zY3JpcHQ+
CisgIDxzY3JpcHQgc3JjPSIuLi9zcmMvZGF0YS5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3Jj
PSIuLi9zcmMvcXVldWUuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iLi4vc3JjL2F0dHJp
YnV0ZXMuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iLi4vc3JjL2V2ZW50LmpzIj48L3Nj
cmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii4uL3NyYy9zaXp6bGUvc2l6emxlLmpzIj48L3NjcmlwdD4K
KyAgPHNjcmlwdCBzcmM9Ii4uL3NyYy9zaXp6bGUtanF1ZXJ5LmpzIj48L3NjcmlwdD4KKyAgPHNj
cmlwdCBzcmM9Ii4uL3NyYy90cmF2ZXJzaW5nLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9
Ii4uL3NyYy9tYW5pcHVsYXRpb24uanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0iLi4vc3Jj
L2Nzcy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQgc3JjPSIuLi9zcmMvYWpheC5qcyI+PC9zY3Jp
cHQ+CisgIDxzY3JpcHQgc3JjPSIuLi9zcmMvYWpheC9qc29ucC5qcyI+PC9zY3JpcHQ+CisgIDxz
Y3JpcHQgc3JjPSIuLi9zcmMvYWpheC9zY3JpcHQuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHNy
Yz0iLi4vc3JjL2FqYXgveGhyLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii4uL3NyYy9l
ZmZlY3RzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9Ii4uL3NyYy9vZmZzZXQuanMiPjwv
c2NyaXB0PgorICA8c2NyaXB0IHNyYz0iLi4vc3JjL2RpbWVuc2lvbnMuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+CisJPHA+Q1NQIFRlc3QgUGFnZTwvcD4KKzwvYm9keT4KKzwvaHRtbD4K
ClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9j
c3AucGhwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB5ZXMKCkluZGV4OiBMYXlv
dXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGVsZWdhdGV0ZXN0Lmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L2RlbGVnYXRldGVzdC5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L2RlbGVn
YXRldGVzdC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3NSBAQAorPGh0bWw+CisgICAg
PGhlYWQ+CisgICAgICAgIDxzY3JpcHQgc3JjPScuLi9kaXN0L2pxdWVyeS5qcycgdHlwZT0ndGV4
dC9qYXZhc2NyaXB0Jz48L3NjcmlwdD4KKyAgICAgICAgPHN0eWxlPgorCS5yZWQgeworCSAgICBi
YWNrZ3JvdW5kLWNvbG9yOiByZWQ7CisJICAgIGJvcmRlcjogc29saWQgM3B4IHJlZDsKKwl9Cisg
ICAgICAgIDwvc3R5bGU+CisgICAgPC9oZWFkPgorICAgIDxib2R5PgorICAgICAgICA8aDI+Q2hh
bmdlIFRlc3RzPC9oMj4KKyAgICAgICAgPHRhYmxlPgorCQkJPHRyPgorCQkJCTx0ZD4KKwkJCQkJ
Q2hhbmdlIGVhY2g6CisJCQkJPC90ZD4KKwkJCQk8dGQ+CisJCQkJCTxzZWxlY3QgY2xhc3M9J3Nl
bGVjdF90ZXN0Jz4KKwkJCQkJCTxvcHRpb24gdmFsdWU9J29uZSc+Y2hhbmdlIG1lIDE8L29wdGlv
bj4KKwkJCQkJCTxvcHRpb24gdmFsdWU9J3R3byc+Y2hhbmdlIG1lIDI8L29wdGlvbj4KKwkJCQkJ
CTxvcHRpb24gdmFsdWU9J3RocmVlJz5jaGFuZ2UgbWUgMzwvb3B0aW9uPgorCQkJCQk8L3NlbGVj
dD4KKwkJCQkJPHNlbGVjdCBjbGFzcz0nc2VsZWN0X3Rlc3QnPgorCQkJCQkJPG9wdGlvbiB2YWx1
ZT0nb25lJz5jaGFuZ2UgbWUgMTwvb3B0aW9uPgorCQkJCQkJPG9wdGlvbiB2YWx1ZT0ndHdvJyBz
ZWxlY3RlZD0ic2VsZWN0ZWQiPmNoYW5nZSBtZSAyPC9vcHRpb24+CisJCQkJCQk8b3B0aW9uIHZh
bHVlPSd0aHJlZSc+Y2hhbmdlIG1lIDM8L29wdGlvbj4KKwkJCQkJPC9zZWxlY3Q+CisJCQkJPC90
ZD4KKwkJCQk8dGQ+CisJCQkJCTxzZWxlY3QgY2xhc3M9J21zZWxlY3RfdGVzdCcgbXVsdGlwbGU9
Im11bHRpcGxlIj4KKwkJCQkJCTxvcHRpb24gdmFsdWU9J29uZSc+Y2hhbmdlIG1lIDE8L29wdGlv
bj4KKwkJCQkJCTxvcHRpb24gdmFsdWU9J3R3byc+Y2hhbmdlIG1lIDI8L29wdGlvbj4KKwkJCQkJ
CTxvcHRpb24gdmFsdWU9J3RocmVlJz5jaGFuZ2UgbWUgMzwvb3B0aW9uPgorCQkJCQk8L3NlbGVj
dD4KKwkJCQk8L3RkPgorCQkJCTx0ZD4KKwkJCQkJPGlucHV0IHR5cGU9ImNoZWNrYm94IiBjbGFz
cz0iY2hlY2tib3hfdGVzdCIgbmFtZT0ibXljaGVja2JveCIgaWQ9ImNoZWNrYm94MSIvPgorCQkJ
CQk8bGFiZWwgZm9yPSJjaGVja2JveDEiPkNoZWNrYm94IDE8L2xhYmVsPjxici8+CisJCQkJCTxp
bnB1dCB0eXBlPSJjaGVja2JveCIgY2xhc3M9ImNoZWNrYm94X3Rlc3QiIG5hbWU9Im15Y2hlY2ti
b3giIGlkPSJjaGVja2JveDIiLz4KKwkJCQkJPGxhYmVsIGZvcj0iY2hlY2tib3gyIj5DaGVja2Jv
eCAyPC9sYWJlbD48YnIgLz4KKwkJCQkJPGlucHV0IHR5cGU9ImNoZWNrYm94IiBjbGFzcz0iY2hl
Y2tib3hfdGVzdCIgbmFtZT0ibXljaGVja2JveCIgaWQ9ImNoZWNrYm94MyIgZGlzYWJsZWQ9ImRp
c2FibGVkIi8+CisJCQkJCTxsYWJlbCBmb3I9ImNoZWNrYm94MyI+Q2hlY2tib3ggMzwvbGFiZWw+
CisJCQkJPC90ZD4KKwkJCQk8dGQ+CisJCQkJCTxidXR0b24gY2xhc3M9ImJ1dHRvbl90ZXN0IiBu
YW1lPSJteWJ1dHRvbjEiIGlkPSJidXR0b24xIj5CdXR0b248L2J1dHRvbj48YnIgLz4KKwkJCQkJ
PGJ1dHRvbiBjbGFzcz0iYnV0dG9uX3Rlc3QiIG5hbWU9Im15YnV0dG9uMSIgaWQ9ImJ1dHRvbjEi
PjxzcGFuPkJ1dHRvbiB3LyBjaGlsZDwvc3Bhbj48L2J1dHRvbj48YnIgLz4KKwkJCQkJPGJ1dHRv
biBjbGFzcz0iYnV0dG9uX3Rlc3QiIG5hbWU9Im15YnV0dG9uMSIgaWQ9ImJ1dHRvbjEiIGRpc2Fi
bGVkPSJkaXNhYmxlZCI+QnV0dG9uIERpc2FibGVkPC9idXR0b24+PGJyIC8+CisJCQkJCTxidXR0
b24gY2xhc3M9ImJ1dHRvbl90ZXN0IiBuYW1lPSJteWJ1dHRvbjEiIGlkPSJidXR0b24xIiBkaXNh
YmxlZD0iZGlzYWJsZWQiPjxzcGFuIGRpc2FibGVkPSJkaXNhYmxlZCI+QnV0dG9uIHcvIGNoaWxk
IERpcy48L3NwYW4+PC9idXR0b24+PGJyIC8+CisJCQkJPC90ZD4KKwkJCQk8dGQ+CisJCQkJCTxp
bnB1dCB0eXBlPSJyYWRpbyIgY2xhc3M9InJhZGlvX3Rlc3QiIG5hbWU9Im15cmFkaW8iIGlkPSJy
YWRpbzEiLz4KKwkJCQkJPGxhYmVsIGZvcj0icmFkaW8xIj5SYWRpbzE8L2xhYmVsPjxici8+CisJ
CQkJCTxpbnB1dCB0eXBlPSJyYWRpbyIgY2xhc3M9InJhZGlvX3Rlc3QiIG5hbWU9Im15cmFkaW8i
IGlkPSJyYWRpbzIiLz4KKwkJCQkJPGxhYmVsIGZvcj0icmFkaW8yIj5SYWRpbzI8L2xhYmVsPjxi
ciAvPgorCQkJCQk8aW5wdXQgdHlwZT0icmFkaW8iIGNsYXNzPSJyYWRpb190ZXN0IiBuYW1lPSJt
eXJhZGlvIiBpZD0icmFkaW8zIiBkaXNhYmxlZD0iZGlzYWJsZWQiLz4KKwkJCQkJPGxhYmVsIGZv
cj0icmFkaW8zIj5SYWRpbzM8L2xhYmVsPgorCQkJCTwvdGQ+CisJCQkJPHRkPgorCQkJCQk8aW5w
dXQgY2xhc3M9ImZpbGVfdGVzdCIgaWQ9ImZpbGUxIiB0eXBlPSJmaWxlIi8+CisJCQkJCTx0ZD4K
KwkJCQkJCTxpbnB1dCBjbGFzcz0ndGVzdCcgdmFsdWU9JycgaWQ9J2lucHV0JyBzaXplPScxMCcg
Lz4KKwkJCQkJCTxpbnB1dCBjbGFzcz0ndGVzdCcgdmFsdWU9J3Rlc3QnIGlkPSdpbnB1dDInIHNp
emU9JzEwJyByZWFkb25seT0icmVhZG9ubHkiIC8+CisJCQkJCTwvdGQ+CisJCQkJCTx0ZD4KKwkJ
CQkJCTx0ZXh0YXJlYSByb3dzPScyJz48L3RleHRhcmVhPgorCQkJCQk8L3RkPgorCQkJCTwvdGQ+
CisJCQkJPHRkPiQoZG9jdW1lbnQpLmJpbmQoJ2NoYW5nZScpPGJyIC8+CisJCQkJCSQoZG9jdW1l
bnQpLmJpbmQoJ2NsaWNrJykKKwkJCQk8L3RkPgorCQk8L3RyPgorCSAgICA8dHI+CisJICAgICAg
ICA8dGQ+TGl2ZTo8L3RkPgorCSAgICAgICAgPHRkIGlkPSdzZWxlY3QnIGNsYXNzPSJyZWQiPlNF
TEVDVDwvdGQ+CisJICAgICAgICA8dGQgaWQ9J21zZWxlY3QnIGNsYXNzPSJyZWQiPk1VTFRJPC90
ZD4KKwkgICAgICAgIDx0ZCBpZD0nY2hlY2tib3gnIGNsYXNzPSJyZWQiPkNIRUNLQk9YPC90ZD4K
KwkJCTx0ZCBpZD0nYnV0dG9uJyBjbGFzcz0icmVkIj5CVVRUT048L3RkPgorCSAgICAgICAgPHRk
IGlkPSdyYWRpbycgY2xhc3M9InJlZCI+UkFESU88L3RkPgorCSAgICAgICAgPHRkIGlkPSdmaWxl
JyBjbGFzcz0icmVkIj5GSUxFPC90ZD4KKwkgICAgICAgIDx0ZCBpZD0ndGV4dCcgY2xhc3M9InJl
ZCI+VEVYVDwvdGQ+CisJICAgICAgICA8dGQgaWQ9J3RleHRhcmVhJyBjbGFzcz0icmVkIj5URVhU
QVJFQTwvdGQ+CisJICAgICAgICA8dGQgaWQ9J2JvdW5kQ2hhbmdlJyBjbGFzcz0icmVkIj5ET0NV
TUVOVDwvdGQ+CisJICAgIDwvdHI+CisJICAgIDx0cj4KKwkgICAgICAgIDx0ZD5CaW5kOjwvdGQ+
CisJICAgICAgICA8dGQgaWQ9J3NlbGVjdGJpbmQnIGNsYXNzPSJyZWQiPlNFTEVDVDwvdGQ+CisJ
ICAgICAgICA8dGQgaWQ9J21zZWxlY3RiaW5kJyBjbGFzcz0icmVkIj5NVUxUSTwvdGQ+CisJICAg
ICAgICA8dGQgaWQ9J2NoZWNrYm94YmluZCcgY2xhc3M9InJlZCI+Q0hFQ0tCT1g8L3RkPgorCQkJ
PHRkIGlkPSdidXR0b25iaW5kJyBjbGFzcz0icmVkIj5CVVRUT048L3RkPgorCSAgICAgICAgPHRk
IGlkPSdyYWRpb2JpbmQnIGNsYXNzPSJyZWQiPlJBRElPPC90ZD4KKwkgICAgICAgIDx0ZCBpZD0n
ZmlsZWJpbmQnIGNsYXNzPSJyZWQiPkZJTEU8L3RkPgorCSAgICAgICAgPHRkIGlkPSd0ZXh0Ymlu
ZCcgY2xhc3M9InJlZCI+VEVYVDwvdGQ+CisJICAgICAgICA8dGQgaWQ9J3RleHRhcmVhYmluZCcg
Y2xhc3M9InJlZCI+VEVYVEFSRUE8L3RkPgorCSAgICA8L3RyPgorCSAgICA8dHI+CisJICAgICAg
ICA8dGQ+Rm9jdXNpbjo8L3RkPgorCSAgICAgICAgPHRkIGlkPSdzZWxlY3Rmb2N1cycgY2xhc3M9
InJlZCI+U0VMRUNUPC90ZD4KKwkgICAgICAgIDx0ZCBpZD0nbXNlbGVjdGZvY3VzJyBjbGFzcz0i
cmVkIj5NVUxUSTwvdGQ+CisJICAgICAgICA8dGQgaWQ9J2NoZWNrYm94Zm9jdXMnIGNsYXNzPSJy
ZWQiPkNIRUNLQk9YPC90ZD4KKwkJCTx0ZCBpZD0nYnV0dG9uZm9jdXMnIGNsYXNzPSJyZWQiPkJV
VFRPTjwvdGQ+CisJICAgICAgICA8dGQgaWQ9J3JhZGlvZm9jdXMnIGNsYXNzPSJyZWQiPlJBRElP
PC90ZD4KKwkgICAgICAgIDx0ZCBpZD0nZmlsZWZvY3VzJyBjbGFzcz0icmVkIj5GSUxFPC90ZD4K
KwkgICAgICAgIDx0ZCBpZD0ndGV4dGZvY3VzJyBjbGFzcz0icmVkIj5URVhUPC90ZD4KKwkgICAg
ICAgIDx0ZCBpZD0ndGV4dGFyZWFmb2N1cycgY2xhc3M9InJlZCI+VEVYVEFSRUE8L3RkPgorCSAg
ICAgICAgPHRkIGlkPSdib3VuZEZvY3VzJyBjbGFzcz0icmVkIj5ET0NVTUVOVDwvdGQ+CisJICAg
IDwvdHI+CisJICAgIDx0cj4KKwkgICAgICAgIDx0ZD5Gb2N1c291dDo8L3RkPgorCSAgICAgICAg
PHRkIGlkPSdzZWxlY3RibHVyJyBjbGFzcz0icmVkIj5TRUxFQ1Q8L3RkPgorCSAgICAgICAgPHRk
IGlkPSdtc2VsZWN0Ymx1cicgY2xhc3M9InJlZCI+TVVMVEk8L3RkPgorCSAgICAgICAgPHRkIGlk
PSdjaGVja2JveGJsdXInIGNsYXNzPSJyZWQiPkNIRUNLQk9YPC90ZD4KKwkJCTx0ZCBpZD0nYnV0
dG9uYmx1cicgY2xhc3M9InJlZCI+QlVUVE9OPC90ZD4KKwkgICAgICAgIDx0ZCBpZD0ncmFkaW9i
bHVyJyBjbGFzcz0icmVkIj5SQURJTzwvdGQ+CisJICAgICAgICA8dGQgaWQ9J2ZpbGVibHVyJyBj
bGFzcz0icmVkIj5GSUxFPC90ZD4KKwkgICAgICAgIDx0ZCBpZD0ndGV4dGJsdXInIGNsYXNzPSJy
ZWQiPlRFWFQ8L3RkPgorCSAgICAgICAgPHRkIGlkPSd0ZXh0YXJlYWJsdXInIGNsYXNzPSJyZWQi
PlRFWFRBUkVBPC90ZD4KKwkgICAgICAgIDx0ZCBpZD0nYm91bmRCbHVyJyBjbGFzcz0icmVkIj5E
T0NVTUVOVDwvdGQ+CisJICAgIDwvdHI+CisJICAgIDx0cj4KKwkgICAgICAgIDx0ZD5MaXZlIEZv
Y3VzOjwvdGQ+CisJICAgICAgICA8dGQgaWQ9J3NlbGVjdGxmb2N1cycgY2xhc3M9InJlZCI+U0VM
RUNUPC90ZD4KKwkgICAgICAgIDx0ZCBpZD0nbXNlbGVjdGxmb2N1cycgY2xhc3M9InJlZCI+TVVM
VEk8L3RkPgorCSAgICAgICAgPHRkIGlkPSdjaGVja2JveGxmb2N1cycgY2xhc3M9InJlZCI+Q0hF
Q0tCT1g8L3RkPgorCQkJPHRkIGlkPSdidXR0b25sZm9jdXMnIGNsYXNzPSJyZWQiPkJVVFRPTjwv
dGQ+CisJICAgICAgICA8dGQgaWQ9J3JhZGlvbGZvY3VzJyBjbGFzcz0icmVkIj5SQURJTzwvdGQ+
CisJICAgICAgICA8dGQgaWQ9J2ZpbGVsZm9jdXMnIGNsYXNzPSJyZWQiPkZJTEU8L3RkPgorCSAg
ICAgICAgPHRkIGlkPSd0ZXh0bGZvY3VzJyBjbGFzcz0icmVkIj5URVhUPC90ZD4KKwkgICAgICAg
IDx0ZCBpZD0ndGV4dGFyZWFsZm9jdXMnIGNsYXNzPSJyZWQiPlRFWFRBUkVBPC90ZD4KKwkgICAg
PC90cj4KKwkgICAgPHRyPgorCSAgICAgICAgPHRkPkxpdmUgQmx1cjo8L3RkPgorCSAgICAgICAg
PHRkIGlkPSdzZWxlY3RsYmx1cicgY2xhc3M9InJlZCI+U0VMRUNUPC90ZD4KKwkgICAgICAgIDx0
ZCBpZD0nbXNlbGVjdGxibHVyJyBjbGFzcz0icmVkIj5NVUxUSTwvdGQ+CisJICAgICAgICA8dGQg
aWQ9J2NoZWNrYm94bGJsdXInIGNsYXNzPSJyZWQiPkNIRUNLQk9YPC90ZD4KKwkJCTx0ZCBpZD0n
YnV0dG9ubGJsdXInIGNsYXNzPSJyZWQiPkJVVFRPTjwvdGQ+CisJICAgICAgICA8dGQgaWQ9J3Jh
ZGlvbGJsdXInIGNsYXNzPSJyZWQiPlJBRElPPC90ZD4KKwkgICAgICAgIDx0ZCBpZD0nZmlsZWxi
bHVyJyBjbGFzcz0icmVkIj5GSUxFPC90ZD4KKwkgICAgICAgIDx0ZCBpZD0ndGV4dGxibHVyJyBj
bGFzcz0icmVkIj5URVhUPC90ZD4KKwkgICAgICAgIDx0ZCBpZD0ndGV4dGFyZWFsYmx1cicgY2xh
c3M9InJlZCI+VEVYVEFSRUE8L3RkPgorCSAgICA8L3RyPgorCSAgICA8dHI+CisJICAgICAgICA8
dGQ+TGl2ZSBDbGljazo8L3RkPgorCSAgICAgICAgPHRkIGlkPSdzZWxlY3RsY2xpY2snIGNsYXNz
PSJyZWQiPlNFTEVDVDwvdGQ+CisJICAgICAgICA8dGQgaWQ9J21zZWxlY3RsY2xpY2snIGNsYXNz
PSJyZWQiPk1VTFRJPC90ZD4KKwkgICAgICAgIDx0ZCBpZD0nY2hlY2tib3hsY2xpY2snIGNsYXNz
PSJyZWQiPkNIRUNLQk9YPC90ZD4KKwkJCTx0ZCBpZD0nYnV0dG9ubGNsaWNrJyBjbGFzcz0icmVk
Ij5CVVRUT048L3RkPgorCSAgICAgICAgPHRkIGlkPSdyYWRpb2xjbGljaycgY2xhc3M9InJlZCI+
UkFESU88L3RkPgorCSAgICAgICAgPHRkIGlkPSdmaWxlbGNsaWNrJyBjbGFzcz0icmVkIj5GSUxF
PC90ZD4KKwkgICAgICAgIDx0ZCBpZD0ndGV4dGxjbGljaycgY2xhc3M9InJlZCI+VEVYVDwvdGQ+
CisJICAgICAgICA8dGQgaWQ9J3RleHRhcmVhbGNsaWNrJyBjbGFzcz0icmVkIj5URVhUQVJFQTwv
dGQ+CisJCQk8dGQgaWQ9J2JvdW5kQ2xpY2snIGNsYXNzPSJyZWQiPkRPQ1VNRU5UPC90ZD4KKwkg
ICAgPC90cj4KKyAgICAgICAgPC90YWJsZT4KKyAgICAgICAgPGgyPlN1Ym1pdCBUZXN0czwvaDI+
CisgICAgICAgIDx0YWJsZT4KKwk8dHI+CisJICAgIDx0ZD4KKwkgICAgICAgIFN1Ym1pdCBlYWNo
OgorCSAgICA8L3RkPgorCSAgICA8dGQ+CisJICAgICAgICA8Zm9ybSBhY3Rpb249IiIgaWQ9InRl
eHRfc3VibWl0Ij4KKwkJPGlucHV0IGNsYXNzPSd0ZXN0JyB0eXBlPSd0ZXh0JyB2YWx1ZT0nS2V5
IFJldHVybiBUbyBTdWJtaXQnLz4KKwkgICAgICAgIDwvZm9ybT4KKwkgICAgPC90ZD4KKwkgICAg
PHRkPgorCSAgICAgICAgPGZvcm0gYWN0aW9uPSIiIGlkPSJwYXNzd29yZF9zdWJtaXQiPgorCQk8
aW5wdXQgY2xhc3M9J3Rlc3QnIHR5cGU9J3Bhc3N3b3JkJyB2YWx1ZT0nJy8+CisJICAgICAgICA8
L2Zvcm0+CisJICAgIDwvdGQ+CisJICAgIDx0ZD4KKwkgICAgICAgIDxmb3JtIGFjdGlvbj0iIiBp
ZD0ic3VibWl0X3N1Ym1pdCI+CisJCTxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSJDbGljayBN
ZSBUbyBTdWJtaXQiIC8+CisJICAgICAgICA8L2Zvcm0+CisJICAgIDwvdGQ+CisJICAgIDx0ZD4k
KGRvY3VtZW50KS5iaW5kKCdzdWJtaXQnKTwvdGQ+CisJPC90cj4KKwk8dHI+CisJICAgICAgICA8
dGQ+UmVzdWx0czo8L3RkPgorCSAgICAgICAgPHRkIGlkPSd0ZXh0U3VibWl0JyBjbGFzcz0icmVk
Ij5URVhUPC90ZD4KKwkgICAgICAgIDx0ZCBpZD0ncGFzc3dvcmRTdWJtaXQnIGNsYXNzPSJyZWQi
PlBBU1NXT1JEPC90ZD4KKwkgICAgICAgIDx0ZCBpZD0nc3VibWl0U3VibWl0JyBjbGFzcz0icmVk
Ij5CVVRUT048L3RkPgorCSAgICAgICAgPHRkIGlkPSdib3VuZFN1Ym1pdCcgY2xhc3M9InJlZCI+
RE9DVU1FTlQ8L3RkPgorCTwvdHI+CisgICAgICAgIDwvdGFibGU+CisKKwk8dWwgaWQ9ImxvZyI+
PC91bD4KKworICAgICAgICA8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+CisJalF1ZXJ5
LmZuLmFkZENoYW5nZUNsaWNrVGVzdCA9IGZ1bmN0aW9uKCBpZCwgcHJldmVudCApIHsKKwkJdGhp
cy5iaW5kKCJmb2N1c2luIiwgZnVuY3Rpb24oKXsKKwkJCWpRdWVyeShpZCArICJmb2N1cyIpLmJs
aW5rKCk7CisJCX0pLmJpbmQoImZvY3Vzb3V0IiwgZnVuY3Rpb24oKXsKKwkJCWpRdWVyeShpZCAr
ICJibHVyIikuYmxpbmsoKTsKKwkJfSk7CisKKwkJdGhpcy5iaW5kKCJmb2N1cyIsIGZ1bmN0aW9u
KCl7CisJCQlqUXVlcnkoaWQgKyAibGZvY3VzIikuYmxpbmsoKTsKKwkJfSkuYmluZCgiYmx1ciIs
IGZ1bmN0aW9uKCl7CisJCQlqUXVlcnkoaWQgKyAibGJsdXIiKS5ibGluaygpOworCQl9KTsKKwor
CQlyZXR1cm4gdGhpcy5iaW5kKCJjaGFuZ2UiLCBmdW5jdGlvbihlKXsKKwkJCWpRdWVyeShpZCAr
ICJiaW5kIikuYmxpbmsoKTsKKwkJfSkubGl2ZSgiY2hhbmdlIiwgZnVuY3Rpb24oZSl7CisJICAg
CQlpZiAoIHByZXZlbnQgKSB7CisJICAgICAgICAJCWUucHJldmVudERlZmF1bHQoKTsKKwkJCX0K
KworCQkJalF1ZXJ5KGlkKS5ibGluaygpOworCQl9KS5saXZlKCJjbGljayIsIGZ1bmN0aW9uKGUp
eworICAJCQlqUXVlcnkoaWQgKyAibGNsaWNrIikuYmxpbmsoKTsKKyAgCX0pOworCX07CisKKwor
CWpRdWVyeS5mbi5hZGRTdWJtaXRUZXN0ID0gZnVuY3Rpb24oIGlkLCBwcmV2ZW50ICkgeworCQly
ZXR1cm4gdGhpcy5saXZlKCJzdWJtaXQiLCBmdW5jdGlvbihlKXsKKwkgICAJCWlmICggcHJldmVu
dCApIHsKKwkgICAgICAgICAgCQllLnByZXZlbnREZWZhdWx0KCk7CisJCQl9CisKKwkJCWpRdWVy
eShpZCkuYmxpbmsoKTsKKwkJfSk7CisJfTsKKworCWpRdWVyeS5mbi5ibGluayA9IGZ1bmN0aW9u
KCl7CisJCXJldHVybiB0aGlzLmNzcygiYmFja2dyb3VuZENvbG9yIiwiZ3JlZW4iKS5jc3MoImJv
cmRlciIsInNvbGlkIDNweCBncmVlbiIpLmRlbGF5KDcwMCkucXVldWUoZnVuY3Rpb24obmV4dCl7
CisgICAgICAgICAJCWpRdWVyeSh0aGlzKS5jc3MoImJhY2tncm91bmRDb2xvciIsIiIpOworCQkJ
bmV4dCgpOworICAgCQl9KTsKKwl9OworCisJJChkb2N1bWVudCkuYmluZCgiZm9jdXNpbiIsIGZ1
bmN0aW9uKCkgeworCQlqUXVlcnkoIiNib3VuZEZvY3VzIikuYmxpbmsoKTsKKwl9KTsKKworCSQo
ZG9jdW1lbnQpLmJpbmQoImZvY3Vzb3V0IiwgZnVuY3Rpb24oKSB7CisJCWpRdWVyeSgiI2JvdW5k
Qmx1ciIpLmJsaW5rKCk7CisJfSk7CisJCisJJChkb2N1bWVudCkuYmluZCgiY2xpY2siLCBmdW5j
dGlvbigpIHsKKwkJalF1ZXJ5KCIjYm91bmRDbGljayIpLmJsaW5rKCk7CisJfSk7CisKKwkkKCJ0
ZC5yZWQiKS5saXZlKCJob3ZlciIsIGZ1bmN0aW9uKGUpIHsKKwkJaWYgKCBlLnR5cGUgPT09ICJt
b3VzZWVudGVyIiApIHsKKwkJCSQodGhpcykuY3NzKCJiYWNrZ3JvdW5kQ29sb3IiLCJncmVlbiIp
OworCQl9IGVsc2UgeworCQkJJCh0aGlzKS5jc3MoImJhY2tncm91bmRDb2xvciIsIiIpOworCQl9
CisJfSk7CisKKwkkKCIuc2VsZWN0X3Rlc3QiKS5hZGRDaGFuZ2VDbGlja1Rlc3QoIiNzZWxlY3Qi
KTsKKwkkKCIubXNlbGVjdF90ZXN0IikuYWRkQ2hhbmdlQ2xpY2tUZXN0KCIjbXNlbGVjdCIpOwor
CSQoIi5jaGVja2JveF90ZXN0IikuYWRkQ2hhbmdlQ2xpY2tUZXN0KCIjY2hlY2tib3giKTsKKwkk
KCIucmFkaW9fdGVzdCIpLmFkZENoYW5nZUNsaWNrVGVzdCgiI3JhZGlvIik7CisJJCgiLmZpbGVf
dGVzdCIpLmFkZENoYW5nZUNsaWNrVGVzdCgiI2ZpbGUiKTsKKwkkKCd0ZXh0YXJlYScpLmFkZENo
YW5nZUNsaWNrVGVzdCgiI3RleHRhcmVhIik7CisJJCgnI2lucHV0JykuYWRkQ2hhbmdlQ2xpY2tU
ZXN0KCIjdGV4dCIpOworCSQoJ2J1dHRvbicpLmFkZENoYW5nZUNsaWNrVGVzdCgiI2J1dHRvbiIp
OworCSQoZG9jdW1lbnQpLmJpbmQoImNoYW5nZSIsIGZ1bmN0aW9uKCl7CisJCWpRdWVyeSgiI2Jv
dW5kQ2hhbmdlIikuYmxpbmsoKTsKKwl9KTsKKworCSQoIiN0ZXh0X3N1Ym1pdCIpLmFkZFN1Ym1p
dFRlc3QoIiN0ZXh0U3VibWl0IiwgdHJ1ZSk7CisJJCgiI3Bhc3N3b3JkX3N1Ym1pdCIpLmFkZFN1
Ym1pdFRlc3QoIiNwYXNzd29yZFN1Ym1pdCIsIHRydWUpOworCSQoIiNzdWJtaXRfc3VibWl0Iiku
YWRkU3VibWl0VGVzdCgiI3N1Ym1pdFN1Ym1pdCIsIHRydWUpOworCSQoZG9jdW1lbnQpLmJpbmQo
InN1Ym1pdCIsIGZ1bmN0aW9uKCl7CisJCWpRdWVyeSgiI2JvdW5kU3VibWl0IikuYmxpbmsoKTsK
Kwl9KTsKKworICAgICAgICA8L3NjcmlwdD4KKyAgICA8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGVsZWdhdGV0
ZXN0Lmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICArIHllcwoKSW5kZXg6IExh
eW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9pbmRleC5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9pbmRleC5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L2luZGV4Lmh0bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjY2IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8v
RFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0
bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3
dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiIgZGlyPSJsdHIiIGlk
PSJodG1sIj4KKzxoZWFkPgorCTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVu
dD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiAvPgorCTx0aXRsZT5qUXVlcnkgVGVzdCBTdWl0
ZTwvdGl0bGU+CisJPGxpbmsgcmVsPSJTdHlsZXNoZWV0IiBtZWRpYT0ic2NyZWVuIiBocmVmPSJx
dW5pdC9xdW5pdC9xdW5pdC5jc3MiIC8+CisJPGxpbmsgcmVsPSJTdHlsZXNoZWV0IiBtZWRpYT0i
c2NyZWVuIiBocmVmPSJkYXRhL3Rlc3RzdWl0ZS5jc3MiIC8+CisJPCEtLSBJbmNsdWRlcyAtLT4K
Kwk8c2NyaXB0IHNyYz0iZGF0YS90ZXN0aW5pdC5qcyI+PC9zY3JpcHQ+CisKKwk8c2NyaXB0IHNy
Yz0iLi4vc3JjL2NvcmUuanMiPjwvc2NyaXB0PgorCTxzY3JpcHQgc3JjPSIuLi9zcmMvZGVmZXJy
ZWQuanMiPjwvc2NyaXB0PgorCTxzY3JpcHQgc3JjPSIuLi9zcmMvc3VwcG9ydC5qcyI+PC9zY3Jp
cHQ+CisJPHNjcmlwdCBzcmM9Ii4uL3NyYy9kYXRhLmpzIj48L3NjcmlwdD4KKwk8c2NyaXB0IHNy
Yz0iLi4vc3JjL3F1ZXVlLmpzIj48L3NjcmlwdD4KKwk8c2NyaXB0IHNyYz0iLi4vc3JjL2F0dHJp
YnV0ZXMuanMiPjwvc2NyaXB0PgorCTxzY3JpcHQgc3JjPSIuLi9zcmMvZXZlbnQuanMiPjwvc2Ny
aXB0PgorCTxzY3JpcHQgc3JjPSIuLi9zcmMvc2l6emxlL3NpenpsZS5qcyI+PC9zY3JpcHQ+CisJ
PHNjcmlwdCBzcmM9Ii4uL3NyYy9zaXp6bGUtanF1ZXJ5LmpzIj48L3NjcmlwdD4KKwk8c2NyaXB0
IHNyYz0iLi4vc3JjL3RyYXZlcnNpbmcuanMiPjwvc2NyaXB0PgorCTxzY3JpcHQgc3JjPSIuLi9z
cmMvbWFuaXB1bGF0aW9uLmpzIj48L3NjcmlwdD4KKwk8c2NyaXB0IHNyYz0iLi4vc3JjL2Nzcy5q
cyI+PC9zY3JpcHQ+CisJPHNjcmlwdCBzcmM9Ii4uL3NyYy9hamF4LmpzIj48L3NjcmlwdD4KKwk8
c2NyaXB0IHNyYz0iLi4vc3JjL2FqYXgvanNvbnAuanMiPjwvc2NyaXB0PgorCTxzY3JpcHQgc3Jj
PSIuLi9zcmMvYWpheC9zY3JpcHQuanMiPjwvc2NyaXB0PgorCTxzY3JpcHQgc3JjPSIuLi9zcmMv
YWpheC94aHIuanMiPjwvc2NyaXB0PgorCTxzY3JpcHQgc3JjPSIuLi9zcmMvZWZmZWN0cy5qcyI+
PC9zY3JpcHQ+CisJPHNjcmlwdCBzcmM9Ii4uL3NyYy9vZmZzZXQuanMiPjwvc2NyaXB0PgorCTxz
Y3JpcHQgc3JjPSIuLi9zcmMvZGltZW5zaW9ucy5qcyI+PC9zY3JpcHQ+CisKKwk8c2NyaXB0IHNy
Yz0icXVuaXQvcXVuaXQvcXVuaXQuanMiPjwvc2NyaXB0PgorCTxzY3JpcHQgc3JjPSJkYXRhL3Rl
c3RydW5uZXIuanMiPjwvc2NyaXB0PgorCis8c2NyaXB0PgorZG9jdW1lbnQud3JpdGUoJzxzY3Jp
cHQgc3JjPSJ1bml0LycgKyBsb2NhdGlvbi5zZWFyY2guc3Vic3RyKDEpICsgJy5qcyI+PFwvc2Ny
aXB0PicpOworPC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IGlkPSJib2R5Ij4KKwk8aDEgaWQ9
InF1bml0LWhlYWRlciI+alF1ZXJ5IFRlc3QgU3VpdGU8L2gxPgorCTxoMiBpZD0icXVuaXQtYmFu
bmVyIj48L2gyPgorCTxkaXYgaWQ9InF1bml0LXRlc3RydW5uZXItdG9vbGJhciI+PC9kaXY+CisJ
PGgyIGlkPSJxdW5pdC11c2VyQWdlbnQiPjwvaDI+CisJPG9sIGlkPSJxdW5pdC10ZXN0cyI+PC9v
bD4KKworCTwhLS0gVGVzdCBIVE1MIC0tPgorCTxkaXYgaWQ9Im5vdGhpZGRlbmRpdiIgc3R5bGU9
ImhlaWdodDoxcHg7YmFja2dyb3VuZDp3aGl0ZTsiIGNsYXNzPSJub3RoaWRkZW5kaXYiPgorCQk8
ZGl2IGlkPSJub3RoaWRkZW5kaXZjaGlsZCI+PC9kaXY+CisJPC9kaXY+CisJPCEtLSB0aGlzIGlm
cmFtZSBpcyBvdXRzaWRlIHRoZSAjbWFpbiBzbyBpdCB3b24ndCByZWxvYWQgY29uc3RhbnRseSB3
YXN0aW5nIHRpbWUsIGJ1dCBpdCBtZWFucyB0aGUgdGVzdHMgbXVzdCBiZSAic2FmZSIgYW5kIGNs
ZWFuIHVwIGFmdGVyIHRoZW1zZWx2ZXMgLS0+CisJPGlmcmFtZSBpZD0ibG9hZGVkaWZyYW1lIiBu
YW1lPSJsb2FkZWRpZnJhbWUiIHN0eWxlPSJkaXNwbGF5Om5vbmU7IiBzcmM9ImRhdGEvaWZyYW1l
Lmh0bWwiPjwvaWZyYW1lPgorCTxkbCBpZD0iZGwiIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTt0
b3A6LTMyNzY3cHg7bGVmdDotMzI3NjdweDsiPgorCTxkaXYgaWQ9Im1haW4iPgorCQk8cCBpZD0i
Zmlyc3RwIj5TZWUgPGEgaWQ9InNpbW9uMSIgaHJlZj0iaHR0cDovL3NpbW9uLmluY3V0aW8uY29t
L2FyY2hpdmUvMjAwMy8wMy8yNS8jZ2V0RWxlbWVudHNCeVNlbGVjdG9yIiByZWw9ImJvb2ttYXJr
Ij50aGlzIGJsb2cgZW50cnk8L2E+IGZvciBtb3JlIGluZm9ybWF0aW9uLjwvcD4KKwkJPHAgaWQ9
ImFwIj4KKwkJCUhlcmUgYXJlIHNvbWUgbGlua3MgaW4gYSBub3JtYWwgcGFyYWdyYXBoOiA8YSBp
ZD0iZ29vZ2xlIiBocmVmPSJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIiB0aXRsZT0iR29vZ2xlISI+
R29vZ2xlPC9hPiwKKwkJCTxhIGlkPSJncm91cHMiIGhyZWY9Imh0dHA6Ly9ncm91cHMuZ29vZ2xl
LmNvbS8iIGNsYXNzPSJHUk9VUFMiPkdvb2dsZSBHcm91cHMgKExpbmspPC9hPi4KKwkJCVRoaXMg
bGluayBoYXMgPGNvZGU+PGEgaHJlZj0iaHR0cDovL3NtaW4iIGlkPSJhbmNob3IxIj5jbGFzcz0i
YmxvZyI8L2E+PC9jb2RlPjoKKwkJCTxhIGhyZWY9Imh0dHA6Ly9kaXZlaW50b21hcmsub3JnLyIg
Y2xhc3M9ImJsb2ciIGhyZWZsYW5nPSJlbiIgaWQ9Im1hcmsiPmRpdmVpbnRvbWFyazwvYT4KKwor
CQk8L3A+CisJCTxkaXYgaWQ9ImZvbyI+CisJCQk8cCBpZD0ic25kcCI+RXZlcnl0aGluZyBpbnNp
ZGUgdGhlIHJlZCBib3JkZXIgaXMgaW5zaWRlIGEgZGl2IHdpdGggPGNvZGU+aWQ9ImZvbyI8L2Nv
ZGU+LjwvcD4KKwkJCTxwIGxhbmc9ImVuIiBpZD0iZW4iPlRoaXMgaXMgYSBub3JtYWwgbGluazog
PGEgaWQ9InlhaG9vIiBocmVmPSJodHRwOi8vd3d3LnlhaG9vLmNvbS8iIGNsYXNzPSJibG9nVGVz
dCI+WWFob288L2E+PC9wPgorCQkJPHAgaWQ9InNhcCI+VGhpcyBsaW5rIGhhcyA8Y29kZT48YSBo
cmVmPSIjMiIgaWQ9ImFuY2hvcjIiPmNsYXNzPSJibG9nIjwvYT48L2NvZGU+OiA8YSBocmVmPSJo
dHRwOi8vc2ltb24uaW5jdXRpby5jb20vIiBjbGFzcz0iYmxvZyBsaW5rIiBpZD0ic2ltb24iPlNp
bW9uIFdpbGxpc29uJ3MgV2VibG9nPC9hPjwvcD4KKworCQk8L2Rpdj4KKwkJPHNwYW4gaWQ9Im5h
bWUrdmFsdWUiPjwvc3Bhbj4KKwkJPHAgaWQ9ImZpcnN0Ij5UcnkgdGhlbSBvdXQ6PC9wPgorCQk8
dWwgaWQ9ImZpcnN0VUwiPjwvdWw+CisJCTxvbCBpZD0iZW1wdHkiPjwvb2w+CisJCTxmb3JtIGlk
PSJmb3JtIiBhY3Rpb249ImZvcm1hY3Rpb24iPgorCQkJPGxhYmVsIGZvcj0iYWN0aW9uIiBpZD0i
bGFiZWwtZm9yIj5BY3Rpb246PC9sYWJlbD4KKwkJCTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJh
Y3Rpb24iIHZhbHVlPSJUZXN0IiBpZD0idGV4dDEiIG1heGxlbmd0aD0iMzAiLz4KKwkJCTxpbnB1
dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ0ZXh0MiIgdmFsdWU9IlRlc3QiIGlkPSJ0ZXh0MiIgZGlzYWJs
ZWQ9ImRpc2FibGVkIi8+CisJCQk8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InJhZGlvMSIgaWQ9
InJhZGlvMSIgdmFsdWU9Im9uIi8+CisKKwkJCTxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0icmFk
aW8yIiBpZD0icmFkaW8yIiBjaGVja2VkPSJjaGVja2VkIi8+CisJCQk8aW5wdXQgdHlwZT0iY2hl
Y2tib3giIG5hbWU9ImNoZWNrIiBpZD0iY2hlY2sxIiBjaGVja2VkPSJjaGVja2VkIi8+CisJCQk8
aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjaGVjazIiIHZhbHVlPSJvbiIvPgorCisJCQk8aW5w
dXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJoaWRkZW4iIGlkPSJoaWRkZW4xIi8+CisJCQk8aW5wdXQg
dHlwZT0idGV4dCIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiIG5hbWU9ImZvb1tiYXJdIiBpZD0iaGlk
ZGVuMiIvPgorCisJCQk8aW5wdXQgdHlwZT0idGV4dCIgaWQ9Im5hbWUiIG5hbWU9Im5hbWUiIHZh
bHVlPSJuYW1lIiAvPgorCQkJPGlucHV0IHR5cGU9InNlYXJjaCIgaWQ9InNlYXJjaCIgbmFtZT0i
c2VhcmNoIiB2YWx1ZT0ic2VhcmNoIiAvPgorCisJCQk8YnV0dG9uIGlkPSJidXR0b24iIG5hbWU9
ImJ1dHRvbiIgdHlwZT0iYnV0dG9uIj5CdXR0b248L2J1dHRvbj4KKworCQkJPHRleHRhcmVhIGlk
PSJhcmVhMSIgbWF4bGVuZ3RoPSIzMCI+Zm9vYmFyPC90ZXh0YXJlYT4KKworCQkJPHNlbGVjdCBu
YW1lPSJzZWxlY3QxIiBpZD0ic2VsZWN0MSI+CisJCQkJPG9wdGlvbiBpZD0ib3B0aW9uMWEiIGNs
YXNzPSJlbXB0eW9wdCIgdmFsdWU9IiI+Tm90aGluZzwvb3B0aW9uPgorCQkJCTxvcHRpb24gaWQ9
Im9wdGlvbjFiIiB2YWx1ZT0iMSI+MTwvb3B0aW9uPgorCQkJCTxvcHRpb24gaWQ9Im9wdGlvbjFj
IiB2YWx1ZT0iMiI+Mjwvb3B0aW9uPgorCQkJCTxvcHRpb24gaWQ9Im9wdGlvbjFkIiB2YWx1ZT0i
MyI+Mzwvb3B0aW9uPgorCQkJPC9zZWxlY3Q+CisJCQk8c2VsZWN0IG5hbWU9InNlbGVjdDIiIGlk
PSJzZWxlY3QyIj4KKwkJCQk8b3B0aW9uIGlkPSJvcHRpb24yYSIgY2xhc3M9ImVtcHR5b3B0IiB2
YWx1ZT0iIj5Ob3RoaW5nPC9vcHRpb24+CisJCQkJPG9wdGlvbiBpZD0ib3B0aW9uMmIiIHZhbHVl
PSIxIj4xPC9vcHRpb24+CisJCQkJPG9wdGlvbiBpZD0ib3B0aW9uMmMiIHZhbHVlPSIyIj4yPC9v
cHRpb24+CisJCQkJPG9wdGlvbiBpZD0ib3B0aW9uMmQiIHNlbGVjdGVkPSJzZWxlY3RlZCIgdmFs
dWU9IjMiPjM8L29wdGlvbj4KKwkJCTwvc2VsZWN0PgorCQkJPHNlbGVjdCBuYW1lPSJzZWxlY3Qz
IiBpZD0ic2VsZWN0MyIgbXVsdGlwbGU9Im11bHRpcGxlIj4KKwkJCQk8b3B0aW9uIGlkPSJvcHRp
b24zYSIgY2xhc3M9ImVtcHR5b3B0IiB2YWx1ZT0iIj5Ob3RoaW5nPC9vcHRpb24+CisJCQkJPG9w
dGlvbiBpZD0ib3B0aW9uM2IiIHNlbGVjdGVkPSJzZWxlY3RlZCIgdmFsdWU9IjEiPjE8L29wdGlv
bj4KKwkJCQk8b3B0aW9uIGlkPSJvcHRpb24zYyIgc2VsZWN0ZWQ9InNlbGVjdGVkIiB2YWx1ZT0i
MiI+Mjwvb3B0aW9uPgorCQkJCTxvcHRpb24gaWQ9Im9wdGlvbjNkIiB2YWx1ZT0iMyI+Mzwvb3B0
aW9uPgorCQkJCTxvcHRpb24gaWQ9Im9wdGlvbjNlIj5ubyB2YWx1ZTwvb3B0aW9uPgorCQkJPC9z
ZWxlY3Q+CisJCQk8c2VsZWN0IG5hbWU9InNlbGVjdDQiIGlkPSJzZWxlY3Q0IiBtdWx0aXBsZT0i
bXVsdGlwbGUiPgorCQkJCTxvcHRncm91cCBkaXNhYmxlZD0iZGlzYWJsZWQiPgorCQkJCQk8b3B0
aW9uIGlkPSJvcHRpb240YSIgY2xhc3M9ImVtcHR5b3B0IiB2YWx1ZT0iIj5Ob3RoaW5nPC9vcHRp
b24+CisJCQkJCTxvcHRpb24gaWQ9Im9wdGlvbjRiIiBkaXNhYmxlZD0iZGlzYWJsZWQiIHNlbGVj
dGVkPSJzZWxlY3RlZCIgdmFsdWU9IjEiPjE8L29wdGlvbj4KKwkJCQkJPG9wdGlvbiBpZD0ib3B0
aW9uNGMiIHNlbGVjdGVkPSJzZWxlY3RlZCIgdmFsdWU9IjIiPjI8L29wdGlvbj4KKwkJCQk8L29w
dGdyb3VwPgorCQkJCTxvcHRpb24gc2VsZWN0ZWQ9InNlbGVjdGVkIiBkaXNhYmxlZD0iZGlzYWJs
ZWQiIGlkPSJvcHRpb240ZCIgdmFsdWU9IjMiPjM8L29wdGlvbj4KKwkJCQk8b3B0aW9uIGlkPSJv
cHRpb240ZSI+bm8gdmFsdWU8L29wdGlvbj4KKwkJCTwvc2VsZWN0PgorCQkJPHNlbGVjdCBuYW1l
PSJzZWxlY3Q1IiBpZD0ic2VsZWN0NSI+CisJCQkJPG9wdGlvbiBpZD0ib3B0aW9uNWEiIHZhbHVl
PSIzIj4xPC9vcHRpb24+CisJCQkJPG9wdGlvbiBpZD0ib3B0aW9uNWIiIHZhbHVlPSIyIj4yPC9v
cHRpb24+CisJCQkJPG9wdGlvbiBpZD0ib3B0aW9uNWMiIHZhbHVlPSIxIj4zPC9vcHRpb24+CisJ
CQk8L3NlbGVjdD4KKworCQkJPG9iamVjdCBpZD0ib2JqZWN0MSIgY29kZWJhc2U9InN0dXBpZCI+
CisJCQkJPHBhcmFtIG5hbWU9InAxIiB2YWx1ZT0ieDEiIC8+CisJCQkJPHBhcmFtIG5hbWU9InAy
IiB2YWx1ZT0ieDIiIC8+CisJCQk8L29iamVjdD4KKworCQkJPHNwYW4gaWQ9IuWPsOWMl1RhzIFp
YmXMjGkiPjwvc3Bhbj4KKwkJCTxzcGFuIGlkPSLlj7DljJciIGxhbmc9IuS4reaWhyI+PC9zcGFu
PgorCQkJPHNwYW4gaWQ9InV0ZjhjbGFzczEiIGNsYXNzPSLlj7DljJdUYcyBaWJlzIxpIOWPsOWM
lyI+PC9zcGFuPgorCQkJPHNwYW4gaWQ9InV0ZjhjbGFzczIiIGNsYXNzPSLlj7DljJciPjwvc3Bh
bj4KKwkJCTxzcGFuIGlkPSJmb286YmFyIiBjbGFzcz0iZm9vOmJhciI+PC9zcGFuPgorCQkJPHNw
YW4gaWQ9InRlc3QuZm9vWzVdYmFyIiBjbGFzcz0idGVzdC5mb29bNV1iYXIiPjwvc3Bhbj4KKwor
CQkJPGZvb19iYXIgaWQ9ImZvb2JhciI+dGVzdCBlbGVtZW50PC9mb29fYmFyPgorCQk8L2Zvcm0+
CisJCTxiIGlkPSJmbG9hdFRlc3QiPkZsb2F0IHRlc3QuPC9iPgorCQk8aWZyYW1lIGlkPSJpZnJh
bWUiIG5hbWU9ImlmcmFtZSI+PC9pZnJhbWU+CisJCTxmb3JtIGlkPSJsZW5ndGh0ZXN0Ij4KKwkJ
CTxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ibGVuZ3RoIiBuYW1lPSJ0ZXN0Ii8+CisJCQk8aW5wdXQg
dHlwZT0idGV4dCIgaWQ9ImlkVGVzdCIgbmFtZT0iaWQiLz4KKwkJPC9mb3JtPgorCQk8dGFibGUg
aWQ9InRhYmxlIj48L3RhYmxlPgorCisJCTxmb3JtIGlkPSJuYW1lLXRlc3RzIj4KKwkJCTwhLS0g
SW5wdXRzIHdpdGggYSBncm91cGVkIG5hbWUgYXR0cmlidXRlLiAtLT4KKwkJCTxpbnB1dCBuYW1l
PSJ0eXBlc1tdIiBpZD0idHlwZXNfYWxsIiB0eXBlPSJjaGVja2JveCIgdmFsdWU9ImFsbCIgLz4K
KwkJCTxpbnB1dCBuYW1lPSJ0eXBlc1tdIiBpZD0idHlwZXNfYW5pbWUiIHR5cGU9ImNoZWNrYm94
IiB2YWx1ZT0iYW5pbWUiIC8+CisJCQk8aW5wdXQgbmFtZT0idHlwZXNbXSIgaWQ9InR5cGVzX21v
dmllIiB0eXBlPSJjaGVja2JveCIgdmFsdWU9Im1vdmllIiAvPgorCQk8L2Zvcm0+CisKKwkJPGZv
cm0gaWQ9InRlc3RGb3JtIiBhY3Rpb249IiMiIG1ldGhvZD0iZ2V0Ij4KKwkJCTx0ZXh0YXJlYSBu
YW1lPSJUMyIgcm93cz0iMiIgY29scz0iMTUiPj8KK1o8L3RleHRhcmVhPgorCQkJPGlucHV0IHR5
cGU9ImhpZGRlbiIgbmFtZT0iSDEiIHZhbHVlPSJ4IiAvPgorCQkJPGlucHV0IHR5cGU9ImhpZGRl
biIgbmFtZT0iSDIiIC8+CisJCQk8aW5wdXQgbmFtZT0iUFdEIiB0eXBlPSJwYXNzd29yZCIgdmFs
dWU9IiIgLz4KKwkJCTxpbnB1dCBuYW1lPSJUMSIgdHlwZT0idGV4dCIgLz4KKwkJCTxpbnB1dCBu
YW1lPSJUMiIgdHlwZT0idGV4dCIgdmFsdWU9IllFUyIgcmVhZG9ubHk9InJlYWRvbmx5IiAvPgor
CQkJPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJDMSIgdmFsdWU9IjEiIC8+CisJCQk8aW5w
dXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IkMyIiAvPgorCQkJPGlucHV0IHR5cGU9InJhZGlvIiBu
YW1lPSJSMSIgdmFsdWU9IjEiIC8+CisJCQk8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9IlIxIiB2
YWx1ZT0iMiIgLz4KKwkJCTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJNeSBOYW1lIiB2YWx1ZT0i
bWUiIC8+CisJCQk8aW5wdXQgdHlwZT0icmVzZXQiIG5hbWU9InJlc2V0IiB2YWx1ZT0iTk8iIC8+
CisJCQk8c2VsZWN0IG5hbWU9IlMxIj4KKwkJCQk8b3B0aW9uIHZhbHVlPSJhYmMiPkFCQzwvb3B0
aW9uPgorCQkJCTxvcHRpb24gdmFsdWU9ImFiYyI+QUJDPC9vcHRpb24+CisJCQkJPG9wdGlvbiB2
YWx1ZT0iYWJjIj5BQkM8L29wdGlvbj4KKwkJCTwvc2VsZWN0PgorCQkJPHNlbGVjdCBuYW1lPSJT
MiIgbXVsdGlwbGU9Im11bHRpcGxlIiBzaXplPSIzIj4KKwkJCQk8b3B0aW9uIHZhbHVlPSJhYmMi
PkFCQzwvb3B0aW9uPgorCQkJCTxvcHRpb24gdmFsdWU9ImFiYyI+QUJDPC9vcHRpb24+CisJCQkJ
PG9wdGlvbiB2YWx1ZT0iYWJjIj5BQkM8L29wdGlvbj4KKwkJCTwvc2VsZWN0PgorCQkJPHNlbGVj
dCBuYW1lPSJTMyI+CisJCQkJPG9wdGlvbiBzZWxlY3RlZD0ic2VsZWN0ZWQiPllFUzwvb3B0aW9u
PgorCQkJPC9zZWxlY3Q+CisJCQk8c2VsZWN0IG5hbWU9IlM0Ij4KKwkJCQk8b3B0aW9uIHZhbHVl
PSIiIHNlbGVjdGVkPSJzZWxlY3RlZCI+Tk88L29wdGlvbj4KKwkJCTwvc2VsZWN0PgorCQkJPGlu
cHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ic3ViMSIgdmFsdWU9Ik5PIiAvPgorCQkJPGlucHV0IHR5
cGU9InN1Ym1pdCIgbmFtZT0ic3ViMiIgdmFsdWU9Ik5PIiAvPgorCQkJPGlucHV0IHR5cGU9Imlt
YWdlIiBuYW1lPSJzdWIzIiB2YWx1ZT0iTk8iIC8+CisJCQk8YnV0dG9uIG5hbWU9InN1YjQiIHR5
cGU9InN1Ym1pdCIgdmFsdWU9Ik5PIj5OTzwvYnV0dG9uPgorCQkJPGlucHV0IG5hbWU9IkQxIiB0
eXBlPSJ0ZXh0IiB2YWx1ZT0iTk8iIGRpc2FibGVkPSJkaXNhYmxlZCIgLz4KKwkJCTxpbnB1dCB0
eXBlPSJjaGVja2JveCIgY2hlY2tlZD0iY2hlY2tlZCIgZGlzYWJsZWQ9ImRpc2FibGVkIiBuYW1l
PSJEMiIgdmFsdWU9Ik5PIiAvPgorCQkJPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJEMyIgdmFs
dWU9Ik5PIiBjaGVja2VkPSJjaGVja2VkIiBkaXNhYmxlZD0iZGlzYWJsZWQiIC8+CisJCQk8c2Vs
ZWN0IG5hbWU9IkQ0IiBkaXNhYmxlZD0iZGlzYWJsZWQiPgorCQkJCTxvcHRpb24gc2VsZWN0ZWQ9
InNlbGVjdGVkIiB2YWx1ZT0iTk8iPk5PPC9vcHRpb24+CisJCQk8L3NlbGVjdD4KKwkJPC9mb3Jt
PgorCQk8ZGl2IGlkPSJtb3JldGVzdHMiPgorCQkJPGZvcm0+CisJCQkJPGRpdiBpZD0iY2hlY2tl
ZHRlc3QiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KKwkJCQkJPGlucHV0IHR5cGU9InJhZGlvIiBu
YW1lPSJjaGVja2VkdGVzdHJhZGlvcyIgY2hlY2tlZD0iY2hlY2tlZCIvPgorCQkJCQk8aW5wdXQg
dHlwZT0icmFkaW8iIG5hbWU9ImNoZWNrZWR0ZXN0cmFkaW9zIiB2YWx1ZT0ib24iLz4KKwkJCQkJ
PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJjaGVja2VkdGVzdGNoZWNrYm94ZXMiIGNoZWNr
ZWQ9ImNoZWNrZWQiLz4KKwkJCQkJPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJjaGVja2Vk
dGVzdGNoZWNrYm94ZXMiIC8+CisJCQkJPC9kaXY+CisJCQk8L2Zvcm0+CisJCQk8ZGl2IGlkPSJu
b25ub2RlcyI+PHNwYW4+aGk8L3NwYW4+IHRoZXJlIDwhLS0gbW9uIGFtaSAtLT48L2Rpdj4KKwkJ
CTxkaXYgaWQ9InQyMDM3Ij4KKwkJCQk8ZGl2PjxkaXYgY2xhc3M9ImhpZGRlbiI+aGlkZGVuPC9k
aXY+PC9kaXY+CisJCQk8L2Rpdj4KKwkJPC9kaXY+CisKKwkJPGRpdiBpZD0idGFiaW5kZXgtdGVz
dHMiPgorCQkJPG9sIGlkPSJsaXN0V2l0aFRhYkluZGV4IiB0YWJpbmRleD0iNSI+CisJCQkJPGxp
IGlkPSJmb29kV2l0aE5lZ2F0aXZlVGFiSW5kZXgiIHRhYmluZGV4PSItMSI+UmljZTwvbGk+CisJ
CQkJPGxpIGlkPSJmb29kTm9UYWJJbmRleCI+QmVhbnM8L2xpPgorCQkJCTxsaT5CbGluaXM8L2xp
PgorCQkJCTxsaT5Ub2Z1PC9saT4KKwkJCTwvb2w+CisKKwkJCTxkaXYgaWQ9ImRpdldpdGhOb1Rh
YkluZGV4Ij5JJ20gaHVuZ3J5LiBJIHNob3VsZC4uLjwvZGl2PgorCQkJPHNwYW4+Li4uPC9zcGFu
PjxhIGhyZWY9IiMiIGlkPSJsaW5rV2l0aE5vVGFiSW5kZXgiPkVhdCBsb3RzIG9mIGZvb2Q8L2E+
PHNwYW4+Li4uPC9zcGFuPiB8CisJCQk8c3Bhbj4uLi48L3NwYW4+PGEgaHJlZj0iIyIgaWQ9Imxp
bmtXaXRoVGFiSW5kZXgiIHRhYmluZGV4PSIyIj5FYXQgYSBsaXR0bGUgZm9vZDwvYT48c3Bhbj4u
Li48L3NwYW4+IHwKKwkJCTxzcGFuPi4uLjwvc3Bhbj48YSBocmVmPSIjIiBpZD0ibGlua1dpdGhO
ZWdhdGl2ZVRhYkluZGV4IiB0YWJpbmRleD0iLTEiPkVhdCBubyBmb29kPC9hPjxzcGFuPi4uLjwv
c3Bhbj4KKwkJCTxzcGFuPi4uLjwvc3Bhbj48YSBpZD0ibGlua1dpdGhOb0hyZWZXaXRoTm9UYWJJ
bmRleCI+RWF0IGEgYnVyZ2VyPC9hPjxzcGFuPi4uLjwvc3Bhbj4KKwkJCTxzcGFuPi4uLjwvc3Bh
bj48YSBpZD0ibGlua1dpdGhOb0hyZWZXaXRoVGFiSW5kZXgiIHRhYmluZGV4PSIxIj5FYXQgc29t
ZSBmdW55dW5zPC9hPjxzcGFuPi4uLjwvc3Bhbj4KKwkJCTxzcGFuPi4uLjwvc3Bhbj48YSBpZD0i
bGlua1dpdGhOb0hyZWZXaXRoTmVnYXRpdmVUYWJJbmRleCIgdGFiaW5kZXg9Ii0xIj5FYXQgc29t
ZSBmdW55dW5zPC9hPjxzcGFuPi4uLjwvc3Bhbj4KKwkJPC9kaXY+CisKKwkJPGRpdiBpZD0ibGl2
ZUhhbmRsZXJPcmRlciI+CisJCQk8c3BhbiBpZD0ibGl2ZVNwYW4xIj48YSBocmVmPSIjIiBpZD0i
bGl2ZUxpbmsxIj48L2E+PC9zcGFuPgorCQkJPHNwYW4gaWQ9ImxpdmVTcGFuMiI+PGEgaHJlZj0i
IyIgaWQ9ImxpdmVMaW5rMiI+PC9hPjwvc3Bhbj4KKwkJPC9kaXY+CisKKwkJPGRpdiBpZD0ic2li
bGluZ1Rlc3QiPgorCQkJPGVtIGlkPSJzaWJsaW5nZmlyc3QiPjE8L2VtPgorCQkJPGVtIGlkPSJz
aWJsaW5nbmV4dCI+MjwvZW0+CisJCTwvZGl2PgorCTwvZGl2PgorCTwvZGw+CisJPGRpdiBpZD0i
ZngtdGVzdC1ncm91cCIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDtoZWlnaHQ6
MXB4O292ZXJmbG93OmhpZGRlbjsiPgorCQk8ZGl2IGlkPSJmeC1xdWV1ZSIgbmFtZT0idGVzdCI+
CisJCQk8ZGl2IGlkPSJmYWRlaW4iIGNsYXNzPSdjaGFpbiB0ZXN0JyBuYW1lPSdkaXYnPmZhZGVJ
bjxkaXY+ZmFkZUluPC9kaXY+PC9kaXY+CisJCQk8ZGl2IGlkPSJmYWRlb3V0IiBjbGFzcz0nY2hh
aW4gdGVzdCBvdXQnPmZhZGVPdXQ8ZGl2PmZhZGVPdXQ8L2Rpdj48L2Rpdj4KKworCQkJPGRpdiBp
ZD0ic2hvdyIgY2xhc3M9J2NoYWluIHRlc3QnPnNob3c8ZGl2PnNob3c8L2Rpdj48L2Rpdj4KKwkJ
CTxkaXYgaWQ9ImhpZGUiIGNsYXNzPSdjaGFpbiB0ZXN0IG91dCc+aGlkZTxkaXY+aGlkZTwvZGl2
PjwvZGl2PgorCisJCQk8ZGl2IGlkPSJ0b2dnbGVpbiIgY2xhc3M9J2NoYWluIHRlc3QnPnRvZ2ds
ZWluPGRpdj50b2dnbGVpbjwvZGl2PjwvZGl2PgorCQkJPGRpdiBpZD0idG9nZ2xlb3V0IiBjbGFz
cz0nY2hhaW4gdGVzdCBvdXQnPnRvZ2dsZW91dDxkaXY+dG9nZ2xlb3V0PC9kaXY+PC9kaXY+CisK
KworCQkJPGRpdiBpZD0ic2xpZGV1cCIgY2xhc3M9J2NoYWluIHRlc3QnPnNsaWRlVXA8ZGl2PnNs
aWRlVXA8L2Rpdj48L2Rpdj4KKwkJCTxkaXYgaWQ9InNsaWRlZG93biIgY2xhc3M9J2NoYWluIHRl
c3Qgb3V0Jz5zbGlkZURvd248ZGl2PnNsaWRlRG93bjwvZGl2PjwvZGl2PgorCisJCQk8ZGl2IGlk
PSJzbGlkZXRvZ2dsZWluIiBjbGFzcz0nY2hhaW4gdGVzdCc+c2xpZGVUb2dnbGVJbjxkaXY+c2xp
ZGVUb2dnbGVJbjwvZGl2PjwvZGl2PgorCQkJPGRpdiBpZD0ic2xpZGV0b2dnbGVvdXQiIGNsYXNz
PSdjaGFpbiB0ZXN0IG91dCc+c2xpZGVUb2dnbGVPdXQ8ZGl2PnNsaWRlVG9nZ2xlT3V0PC9kaXY+
PC9kaXY+CisKKwkJCTxkaXYgaWQ9ImZhZGV0b2dnbGVpbiIgY2xhc3M9J2NoYWluIHRlc3QnPmZh
ZGVUb2dnbGVJbjxkaXY+ZmFkZVRvZ2dsZUluPC9kaXY+PC9kaXY+CisJCQk8ZGl2IGlkPSJmYWRl
dG9nZ2xlb3V0IiBjbGFzcz0nY2hhaW4gdGVzdCBvdXQnPmZhZGVUb2dnbGVPdXQ8ZGl2PmZhZGVU
b2dnbGVPdXQ8L2Rpdj48L2Rpdj4KKworCQkJPGRpdiBpZD0iZmFkZXRvIiBjbGFzcz0nY2hhaW4g
dGVzdCc+ZmFkZVRvPGRpdj5mYWRlVG88L2Rpdj48L2Rpdj4KKwkJPC9kaXY+CisKKwkJPGRpdiBp
ZD0iZngtdGVzdHMiPjwvZGl2PgorCTwvZGl2PgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L2luZGV4Lmh0bWwK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICArIHllcwoKSW5kZXg6IExheW91dFRlc3Rz
L2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9sb2NhbGZpbGUuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvbG9jYWxmaWxlLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvbG9jYWxmaWxlLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsOTMgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzND
Ly9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94
aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8v
d3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIiBkaXI9Imx0ciIg
aWQ9Imh0bWwiPgorPGhlYWQ+CisJPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250
ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIC8+CisJPHRpdGxlPmpRdWVyeSBMb2NhbCBG
aWxlIFRlc3Q8L3RpdGxlPgorCTwhLS0gSW5jbHVkZXMgLS0+CisJPHNjcmlwdCBzcmM9Ii4uL3Ny
Yy9jb3JlLmpzIj48L3NjcmlwdD4KKwk8c2NyaXB0IHNyYz0iLi4vc3JjL2RlZmVycmVkLmpzIj48
L3NjcmlwdD4KKwk8c2NyaXB0IHNyYz0iLi4vc3JjL3N1cHBvcnQuanMiPjwvc2NyaXB0PgorCTxz
Y3JpcHQgc3JjPSIuLi9zcmMvZGF0YS5qcyI+PC9zY3JpcHQ+CisJPHNjcmlwdCBzcmM9Ii4uL3Ny
Yy9xdWV1ZS5qcyI+PC9zY3JpcHQ+CisJPHNjcmlwdCBzcmM9Ii4uL3NyYy9hdHRyaWJ1dGVzLmpz
Ij48L3NjcmlwdD4KKwk8c2NyaXB0IHNyYz0iLi4vc3JjL2V2ZW50LmpzIj48L3NjcmlwdD4KKwk8
c2NyaXB0IHNyYz0iLi4vc3JjL3NpenpsZS9zaXp6bGUuanMiPjwvc2NyaXB0PgorCTxzY3JpcHQg
c3JjPSIuLi9zcmMvc2l6emxlLWpxdWVyeS5qcyI+PC9zY3JpcHQ+CisJPHNjcmlwdCBzcmM9Ii4u
L3NyYy90cmF2ZXJzaW5nLmpzIj48L3NjcmlwdD4KKwk8c2NyaXB0IHNyYz0iLi4vc3JjL21hbmlw
dWxhdGlvbi5qcyI+PC9zY3JpcHQ+CisJPHNjcmlwdCBzcmM9Ii4uL3NyYy9jc3MuanMiPjwvc2Ny
aXB0PgorCTxzY3JpcHQgc3JjPSIuLi9zcmMvYWpheC5qcyI+PC9zY3JpcHQ+CisJPHNjcmlwdCBz
cmM9Ii4uL3NyYy9hamF4L2pzb25wLmpzIj48L3NjcmlwdD4KKwk8c2NyaXB0IHNyYz0iLi4vc3Jj
L2FqYXgvc2NyaXB0LmpzIj48L3NjcmlwdD4KKwk8c2NyaXB0IHNyYz0iLi4vc3JjL2FqYXgveGhy
LmpzIj48L3NjcmlwdD4KKwk8c2NyaXB0IHNyYz0iLi4vc3JjL2VmZmVjdHMuanMiPjwvc2NyaXB0
PgorCTxzY3JpcHQgc3JjPSIuLi9zcmMvb2Zmc2V0LmpzIj48L3NjcmlwdD4KKwk8c2NyaXB0IHNy
Yz0iLi4vc3JjL2RpbWVuc2lvbnMuanMiPjwvc2NyaXB0PgorCTxzdHlsZT4KKwkJLmVycm9yIHsg
Y29sb3I6IHJlZDsgfQorCQkuc3VjY2VzcyB7IGNvbG9yOiBncmVlbjsgfQorCTwvc3R5bGU+Cis8
L2hlYWQ+Cis8Ym9keT4KKwk8aDE+alF1ZXJ5IExvY2FsIEZpbGUgVGVzdDwvaDE+CisJPGgyPgor
CQlJbnRyb2R1Y3Rpb24KKwk8L2gyPgorCTx1bD4KKwkJPGxpPgorCQkJQWNjZXNzIHRoaXMgZmls
ZSB1c2luZyB0aGUgImZpbGU6IiBwcm90b2NvbCwKKwkJPC9saT4KKwkJPGxpPgorCQkJdHdvIGdy
ZWVuICJPSyIgc3RyaW5ncyBtdXN0IGFwcGVhciBiZWxvdywKKwkJPC9saT4KKwkJPGxpPgorCQkJ
RW1wdHkgbG9jYWwgZmlsZXMgd2lsbCBpc3N1ZSBlcnJvcnMsIGl0J3MgYSBrbm93biBsaW1pdGF0
aW9uLgorCQk8L2xpPgorCTwvdWw+CisJPGgyPgorCQlSZXN1bHRzCisJPC9oMj4KKwk8dWw+CisJ
CTxsaT4KKwkJCVN1Y2Nlc3M6CisJCQk8c3BhbiBpZD0ic3VjY2VzcyI+CisJCQk8L3NwYW4+CisJ
CTwvbGk+CisJCTxsaT4KKwkJCUVycm9yOgorCQkJPHNwYW4gaWQ9ImVycm9yIj4KKwkJCTwvc3Bh
bj4KKwkJPC9saT4KKwk8L3VsPgorCTxoMj4KKwkJTG9nczoKKwk8L2gyPgorCTx1bCBpZD0ibG9n
Ij4KKwk8L3VsPgorCTxzY3JpcHQ+CisJCXZhciBsb2dVTCA9IGpRdWVyeSggIiNsb2ciICk7CisJ
CWZ1bmN0aW9uIGRvTG9nKCBtZXNzYWdlLCBhcmdzICkgeworCQkJalF1ZXJ5KCAiPGxpIC8+Iiku
YXBwZW5kVG8oIGxvZ1VMICkudGV4dCggbWVzc2FnZSArICc6ICInICsgQXJyYXkucHJvdG90eXBl
LmpvaW4uY2FsbCggYXJncywgJyIgLSAiJyApICsgJyInICk7CisJCX0KKwkJalF1ZXJ5LmFqYXgo
ICIuL2RhdGEvYmFkanNvbi5qcyIgLCB7CisJCQljb250ZXh0OiBqUXVlcnkoICIjc3VjY2VzcyIg
KSwKKwkJCWRhdGFUeXBlOiAidGV4dCIKKwkJfSkuc3VjY2VzcyhmdW5jdGlvbiggZGF0YSwgXywg
eGhyICkgeworCQkJZG9Mb2coICJTdWNjZXNzICgiICsgeGhyLnN0YXR1cyArICIpIiAsIGFyZ3Vt
ZW50cyApOworCQkJdGhpcy5hZGRDbGFzcyggZGF0YSA/ICJzdWNjZXNzIiA6ICJlcnJvciIgKS50
ZXh0KCAiT0siICk7CisJCX0pLmVycm9yKGZ1bmN0aW9uKCB4aHIgKSB7CisJCQlkb0xvZyggIlN1
Y2Nlc3MgKCIgKyB4aHIuc3RhdHVzICsgIikiICwgYXJndW1lbnRzICk7CisJCQl0aGlzLmFkZENs
YXNzKCAiZXJyb3IiICkudGV4dCggIkZBSUwiICk7CisJCX0pOworCQlqUXVlcnkuYWpheCggIi4v
ZGF0YS9kb2Vzbm90ZXhpc3QuZXh0IiAsIHsKKwkJCWNvbnRleHQ6IGpRdWVyeSggIiNlcnJvciIg
KSwKKwkJCWRhdGFUeXBlOiAidGV4dCIKKwkJfSkuZXJyb3IoZnVuY3Rpb24oIHhociApIHsKKwkJ
CWRvTG9nKCAiRXJyb3IgKCIgKyB4aHIuc3RhdHVzICsgIikiICwgYXJndW1lbnRzICk7CisJCQl0
aGlzLmFkZENsYXNzKCAic3VjY2VzcyIgKS50ZXh0KCAiT0siICk7CisJCX0pLnN1Y2Nlc3MoZnVu
Y3Rpb24oIGRhdGEsIF8sIHhociApIHsKKwkJCWRvTG9nKCAiRXJyb3IgKCIgKyB4aHIuc3RhdHVz
ICsgIikiICwgYXJndW1lbnRzICk7CisJCQl0aGlzLmFkZENsYXNzKCAiZXJyb3IiICkudGV4dCgg
IkZBSUwiICk7CisJCX0pOworCTwvc2NyaXB0PgorPC9ib2R5PgpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJj
ZXMvdGVzdC9sb2NhbGZpbGUuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBhbGxvdy10YWJzCiAgICsg
eWVzCgpJbmRleDogTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L25ldHdvcmtlcnJv
ci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9u
ZXR3b3JrZXJyb3IuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pxdWVyeS9yZXNv
dXJjZXMvdGVzdC9uZXR3b3JrZXJyb3IuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDIg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8IS0tCisJVGVzdCBmb3IgIzgxMzUKKworCVRo
YW5rcyBKb2huIEZpcmViYXVnaCBmb3IgdGhpcyB0ZXN0IHBhZ2UgYmFzZWQgb24gaGlzIGdpc3QK
KwlodHRwczovL2dpc3QuZ2l0aHViLmNvbS84MDcwOTAKKworCUFjY2VzcyB0aGlzIHBhZ2UgdGhy
b3VnaCBhIHdlYiBzZXJ2ZXIsIHRoZW4gc3RvcCBzYWlkIHNlcnZlciBhbmQgY2xpY2sgdGhlIGJ1
dHRvbi4KKy0tPgorPGhlYWQ+CisJPHRpdGxlPgorCQlqUXVlcnkgTmV0d29yayBFcnJvciBUZXN0
IGZvciBGaXJlZm94CisJPC90aXRsZT4KKwk8c3R5bGU+CisJCWRpdiB7IG1hcmdpbi10b3A6IDEw
cHg7IH0KKwk8L3N0eWxlPgorCTxzY3JpcHQgc3JjPSIuLi9zcmMvY29yZS5qcyI+PC9zY3JpcHQ+
CisJPHNjcmlwdCBzcmM9Ii4uL3NyYy9kZWZlcnJlZC5qcyI+PC9zY3JpcHQ+CisJPHNjcmlwdCBz
cmM9Ii4uL3NyYy9zdXBwb3J0LmpzIj48L3NjcmlwdD4KKwk8c2NyaXB0IHNyYz0iLi4vc3JjL2Rh
dGEuanMiPjwvc2NyaXB0PgorCTxzY3JpcHQgc3JjPSIuLi9zcmMvcXVldWUuanMiPjwvc2NyaXB0
PgorCTxzY3JpcHQgc3JjPSIuLi9zcmMvYXR0cmlidXRlcy5qcyI+PC9zY3JpcHQ+CisJPHNjcmlw
dCBzcmM9Ii4uL3NyYy9ldmVudC5qcyI+PC9zY3JpcHQ+CisJPHNjcmlwdCBzcmM9Ii4uL3NyYy9z
aXp6bGUvc2l6emxlLmpzIj48L3NjcmlwdD4KKwk8c2NyaXB0IHNyYz0iLi4vc3JjL3NpenpsZS1q
cXVlcnkuanMiPjwvc2NyaXB0PgorCTxzY3JpcHQgc3JjPSIuLi9zcmMvdHJhdmVyc2luZy5qcyI+
PC9zY3JpcHQ+CisJPHNjcmlwdCBzcmM9Ii4uL3NyYy9tYW5pcHVsYXRpb24uanMiPjwvc2NyaXB0
PgorCTxzY3JpcHQgc3JjPSIuLi9zcmMvY3NzLmpzIj48L3NjcmlwdD4KKwk8c2NyaXB0IHNyYz0i
Li4vc3JjL2FqYXguanMiPjwvc2NyaXB0PgorCTxzY3JpcHQgc3JjPSIuLi9zcmMvYWpheC9qc29u
cC5qcyI+PC9zY3JpcHQ+CisJPHNjcmlwdCBzcmM9Ii4uL3NyYy9hamF4L3NjcmlwdC5qcyI+PC9z
Y3JpcHQ+CisJPHNjcmlwdCBzcmM9Ii4uL3NyYy9hamF4L3hoci5qcyI+PC9zY3JpcHQ+CisJPHNj
cmlwdCBzcmM9Ii4uL3NyYy9lZmZlY3RzLmpzIj48L3NjcmlwdD4KKwk8c2NyaXB0IHNyYz0iLi4v
c3JjL29mZnNldC5qcyI+PC9zY3JpcHQ+CisJPHNjcmlwdCBzcmM9Ii4uL3NyYy9kaW1lbnNpb25z
LmpzIj48L3NjcmlwdD4KKwk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisJJCgnYnV0
dG9uJykubGl2ZSgnY2xpY2snLCBmdW5jdGlvbiAoKSB7CisJCSQuYWpheCh7CisJCQl1cmw6ICcv
JywKKwkJCWVycm9yOiBmdW5jdGlvbigpIHsKKwkJCQljb25zb2xlLmxvZyggImFib3J0IiwgYXJn
dW1lbnRzICk7CisJCQl9CisJCX0pLmFib3J0KCk7CisJCSQuYWpheCh7CisJCQl1cmw6ICcvJywK
KwkJCWVycm9yOiBmdW5jdGlvbigpIHsKKwkJCQljb25zb2xlLmxvZyggImNvbXBsZXRlIiwgYXJn
dW1lbnRzICk7CisJCQl9CisJCX0pOworCQlyZXR1cm4gZmFsc2U7CisJfSkKKwk8L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorCTxoMT4KKwkJalF1ZXJ5IE5ldHdvcmsgRXJyb3IgVGVzdCBmb3Ig
RmlyZWZveAorCTwvaDE+CisJPGRpdj4KKwkJVGhpcyBpcyBhIHRlc3QgcGFnZSBmb3IKKwkJPGEg
aHJlZj0iaHR0cDovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvODEzNSI+CisJCQkjODEzNQorCQk8
L2E+CisJCXdoaWNoIHdhcyByZXBvcnRlZCBpbiBGaXJlZm94IHdoZW4gYWNjZXNzaW5nIHByb3Bl
cnRpZXMKKwkJb2YgYW4gWE1MSHR0cFJlcXVlc3Qgb2JqZWN0IGFmdGVyIGEgbmV0d29yayBlcnJv
ciBvY2N1cmVkLgorCTwvZGl2PgorCTxkaXY+VGFrZSB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvZGl2
PgorCTxvbD4KKwkJPGxpPgorCQkJbWFrZSBzdXJlIHlvdSBhY2Nlc3NlZCB0aGlzIHBhZ2UgdGhy
b3VnaCBhIHdlYiBzZXJ2ZXIsCisJCTwvbGk+CisJCTxsaT4KKwkJCXN0b3AgdGhlIHdlYiBzZXJ2
ZXIsCisJCTwvbGk+CisJCTxsaT4KKwkJCW9wZW4gdGhlIGNvbnNvbGUsCisJCTwvbGk+CisJCTxs
aT4KKwkJCWNsaWNrIHRoaXMKKwkJCTxidXR0b24+YnV0dG9uPC9idXR0b24+CisJCQksCisJCTwv
bGk+CisJCTxsaT4KKwkJCXdhaXQgZm9yIGJvdGggcmVxdWVzdHMgdG8gZmFpbC4KKwkJPC9saT4K
Kwk8L29sPgorCTxkaXY+CisJCVRlc3QgcGFzc2VzIGlmIHlvdSBnZXQgdHdvIGxvZyBsaW5lczoK
KwkJPHVsPgorCQkJPGxpPgorCQkJCXRoZSBmaXJzdCBzdGFydGluZyB3aXRoICJhYm9ydCIsCisJ
CQk8L2xpPgorCQkJPGxpPgorCQkJCXRoZSBzZWNvbmQgc3RhcnRpbmcgd2l0aCAiY29tcGxldGUi
LAorCQkJPC9saT4KKwkJPC91bD4KKwk8L2Rpdj4KKwk8ZGl2PgorCQlUZXN0IGZhaWxzIGlmIHRo
ZSBicm93c2VyIG5vdGlmaWVzIGFuIGV4Y2VwdGlvbi4KKwk8L2Rpdj4KKzwvYm9keT4KKzwvaHRt
bD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlv
dXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvbmV0d29ya2Vycm9yLmh0bWwKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpBZGRlZDogYWxsb3ctdGFicwogICArIHllcwoKSW5kZXg6IExheW91dFRlc3RzL2pxdWVyeS9y
ZXNvdXJjZXMvdGVzdC9wb2xsdXRlZC5waHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanF1
ZXJ5L3Jlc291cmNlcy90ZXN0L3BvbGx1dGVkLnBocAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9wb2xsdXRlZC5waHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsOTkgQEAKKzw/cGhwCisJJGJhc2VVUkwgPSAiaHR0cDovL2FqYXguZ29vZ2xlYXBpcy5j
b20vYWpheC9saWJzLyI7CisJJGxpYnJhcmllcyA9IGFycmF5KAorCQkiRG9qbyIgPT4gYXJyYXko
CisJCQkidmVyc2lvbnMiID0+IGFycmF5KCAiMS4xLjEiLCAiMS4yLjAiLCAiMS4yLjMiLCAiMS4z
LjAiLCAiMS4zLjEiLCAiMS4zLjIiLCAiMS40LjAiLCAiMS40LjEiLCAiMS40LjMiLCAiMS41LjAi
ICksCisJCQkidXJsIiA9PiAiZG9qby9YWVovZG9qby9kb2pvLnhkLmpzIgorCQkpLAorCQkiRXh0
Q29yZSIgPT4gYXJyYXkoCisJCQkidmVyc2lvbnMiID0+IGFycmF5KCAiMy4wLjAiLCAiMy4xLjAi
ICksCisJCQkidXJsIiA9PiAiZXh0LWNvcmUvWFlaL2V4dC1jb3JlLmpzIgorCQkpLAorCQkialF1
ZXJ5IiA9PiBhcnJheSgKKwkJCSJ2ZXJzaW9ucyIgPT4gYXJyYXkoICIxLjIuMyIsICIxLjIuNiIs
ICIxLjMuMCIsICIxLjMuMSIsICIxLjMuMiIsICIxLjQuMCIsICIxLjQuMSIsICIxLjQuMiIsICIx
LjQuMyIsICIxLjQuNCIsICIxLjUuMCIgKSwKKwkJCSJ1cmwiID0+ICJqcXVlcnkvWFlaL2pxdWVy
eS5taW4uanMiCisJCSksCisJCSJqUXVlcnlVSSIgPT4gYXJyYXkoCisJCQkidmVyc2lvbnMiID0+
IGFycmF5KCAiMS41LjIiLCAiMS41LjMiLCAiMS42LjAiLCAiMS43LjAiLCAiMS43LjEiLCAiMS43
LjIiLCAiMS43LjMiLCAiMS44LjAiLCAiMS44LjEiLCAiMS44LjIiLCAiMS44LjQiLCAiMS44LjUi
LCAiMS44LjYiLCAiMS44LjciLCAiMS44LjgiLCAiMS44LjkiICksCisJCQkidXJsIiA9PiAianF1
ZXJ5dWkvWFlaL2pxdWVyeS11aS5taW4uanMiCisJCSksCisJCSJNb29Ub29scyIgPT4gYXJyYXko
CisJCQkidmVyc2lvbnMiID0+IGFycmF5KCAiMS4xLjEiLCAiMS4xLjIiLCAiMS4yLjEiLCAiMS4y
LjIiLCAiMS4yLjMiLCAiMS4yLjQiLCAiMS4yLjUiLCAiMS4zLjAiICksCisJCQkidXJsIiA9PiAi
bW9vdG9vbHMvWFlaL21vb3Rvb2xzLXl1aS1jb21wcmVzc2VkLmpzIgorCQkpLAorCQkiUHJvdG90
eXBlIiA9PiBhcnJheSgKKwkJCSJ2ZXJzaW9ucyIgPT4gYXJyYXkoICIxLjYuMC4yIiwgIjEuNi4w
LjMiLCAiMS42LjEuMCIsICIxLjcuMC4wIiApLAorCQkJInVybCIgPT4gInByb3RvdHlwZS9YWVov
cHJvdG90eXBlLmpzIgorCQkpLAorCQkic2NyaXB0YWN1bG91cyIgPT4gYXJyYXkoCisJCQkidmVy
c2lvbnMiID0+IGFycmF5KCAiMS44LjEiLCAiMS44LjIiLCAiMS44LjMiICksCisJCQkidXJsIiA9
PiAic2NyaXB0YWN1bG91cy9YWVovc2NyaXB0YWN1bG91cy5qcyIKKwkJKSwKKwkJIlNXRk9iamVj
dCIgPT4gYXJyYXkoCisJCQkidmVyc2lvbnMiID0+IGFycmF5KCAiMi4xIiwgIjIuMiIgKSwKKwkJ
CSJ1cmwiID0+ICJzd2ZvYmplY3QvWFlaL3N3Zm9iamVjdC5qcyIKKwkJKSwKKwkJIllVSSIgPT4g
YXJyYXkoCisJCQkidmVyc2lvbnMiID0+IGFycmF5KCAiMi42LjAiLCAiMi43LjAiLCAiMi44LjBy
NCIsICIyLjguMSIsICIyLjguMiIsICIzLjMuMCIgKSwKKwkJCSJ1cmwiID0+ICAgICJ5dWkvWFla
L2J1aWxkL3l1aS95dWktbWluLmpzIgorCQkpCisJKTsKKworCWlmKCBjb3VudCgkX1BPU1QpICkg
eworCQkkaW5jbHVkZXMgPSBhcnJheSgpOworCQlmb3JlYWNoKCAkX1BPU1QgYXMgJG5hbWUgPT4g
JHZlciApeworCQkJJHVybCA9ICRsaWJyYXJpZXNbICRuYW1lIF1bICJ1cmwiIF07CisJCQlpZigg
JG5hbWUgPT0gIllVSSIgJiYgJHZlclswXSA9PSAiMiIgKSB7CisJCQkJJHVybCA9IHN0cl9yZXBs
YWNlKCAiL3l1aSIsICIveXVpbG9hZGVyIiwgJHVybCwgJGNvdW50ID0gMiApOworCQkJfQorCQkJ
JGluY2x1ZGUgPSAiPHNjcmlwdCBzcmM9JyRiYXNlVVJMIi5zdHJfcmVwbGFjZSgiWFlaIiwgJHZl
ciwgJHVybCwgJGNvdW50ID0gMSkuIic+PC9zY3JpcHQ+XG4iOworCQkJaWYoICRsaWIgPT0gInBy
b3RvdHlwZSIgKSB7IC8vIHByb3RvdHlwZSBtdXN0IGJlIGluY2x1ZGVkIGZpcnN0CisJCQkJYXJy
YXlfdW5zaGlmdCggJGluY2x1ZGVzLCAkaW5jbHVkZSApOworCQkJfSBlbHNlIHsKKwkJCQlhcnJh
eV9wdXNoKCAkaW5jbHVkZXMsICRpbmNsdWRlICk7CisJCQl9CisJCX0KKworCQkkaW5jbHVkZXMg
PSBpbXBsb2RlKCAiXG4iLCAkaW5jbHVkZXMgKTsKKwkJJHN1aXRlID0gZmlsZV9nZXRfY29udGVu
dHMoICJpbmRleC5odG1sIiApOworCQllY2hvIHN0cl9yZXBsYWNlKCAiPCEtLSBJbmNsdWRlcyAt
LT4iLCAkaW5jbHVkZXMsICRzdWl0ZSApOworCQlleGl0OworCX0KKz8+Cis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+CisgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29u
dGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKwk8dGl0bGU+UnVuIGpRdWVyeSBUZXN0
IFN1aXRlIFBvbGx1dGVkPC90aXRsZT4KKwk8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorCQkub3Ro
ZXJsaWJzIGZpZWxkc2V0IHsKKwkJCXdpZHRoOiA0MDBweAorCQl9CisJCS5vdGhlcmxpYnMgbGFi
ZWx7CisJCQltYXJnaW46IDVweCAwcHggNXB4IDIwcHg7CisJCX0KKwk8L3N0eWxlPgorPC9oZWFk
PgorCis8Ym9keSBpZD0iYm9keSI+CisJPGgxIGlkPSJoZWFkZXIiPmpRdWVyeSBUZXN0IFN1aXRl
PC9oMT4KKwk8aDIgaWQ9ImJhbm5lciIgY2xhc3M9ImZhaWwiPjwvaDI+CisJPGgyIGlkPSJ1c2Vy
QWdlbnQiPkNob29zZSBvdGhlciBsaWJyYXJpZXMgdG8gaW5jbHVkZTwvaDI+CisKKwk8Zm9ybSBj
bGFzcz0ib3RoZXJsaWJzIiBhY3Rpb249Ii4vcG9sbHV0ZWQucGhwIiBtZXRob2Q9IlBPU1QiPgor
CQk8P3BocAorCQkJZm9yZWFjaCggJGxpYnJhcmllcyBhcyAkbmFtZSA9PiAkZGF0YSApIHsKKwkJ
CQllY2hvICI8ZmllbGRzZXQ+PGxlZ2VuZD4kbmFtZTwvbGVnZW5kPiI7CisJCQkJJGkgPSAwOwor
CQkJCWZvcmVhY2goICRkYXRhWyAidmVyc2lvbnMiIF0gYXMgJHZlciApIHsKKwkJCQkJJGkrKzsK
KwkJCQkJZWNobyAiPGxhYmVsPjxpbnB1dCB0eXBlPSdyYWRpbycgbmFtZT0nJG5hbWUnIHZhbHVl
PSckdmVyJyAvPiR2ZXI8L2xhYmVsPiI7CisJCQkJCWlmKCAhKCRpICUgNCkgKSBlY2hvICI8YnIg
Lz4iOworCQkJCX0KKwkJCQllY2hvICI8L2ZpZWxkc2V0PiI7CisJCQl9CisJCT8+CisJCTxpbnB1
dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSIgUnVuICIgY2xhc3M9InN1Ym1pdCIgLz4KKwk8L2Zvcm0+
Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9qcXVl
cnkvcmVzb3VyY2VzL3Rlc3QvcG9sbHV0ZWQucGhwCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRh
YnMKICAgKyB5ZXMKCkluZGV4OiBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvcmVh
ZHl3YWl0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90
ZXN0L3JlYWR5d2FpdC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanF1ZXJ5L3Jl
c291cmNlcy90ZXN0L3JlYWR5d2FpdC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg2IEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPCEtLQorCVRlc3QgZm9yIGpRdWVyeS5yZWFkeVdh
aXQuIE5lZWRzIHRvIGJlIGEKKwlzdGFuZGFsb25lIHRlc3Qgc2luY2UgaXQgZGVhbHMgd2l0aCBE
T00KKwlyZWFkeS4KKy0tPgorPGhlYWQ+CisJPHRpdGxlPgorCQlqUXVlcnkucmVhZHlXYWl0IFRl
c3QKKwk8L3RpdGxlPgorCTxzdHlsZT4KKwkJZGl2IHsgbWFyZ2luLXRvcDogMTBweDsgfQorCQkj
b3V0cHV0IHsgYmFja2dyb3VuZC1jb2xvcjogZ3JlZW4gfQorCQkjZXhwZWN0ZWRPdXRwdXQgeyBi
YWNrZ3JvdW5kLWNvbG9yOiBncmVlbiB9CisJPC9zdHlsZT4KKwk8c2NyaXB0IHNyYz0iLi4vc3Jj
L2NvcmUuanMiPjwvc2NyaXB0PgorCTxzY3JpcHQgc3JjPSIuLi9zcmMvZGVmZXJyZWQuanMiPjwv
c2NyaXB0PgorCTxzY3JpcHQgc3JjPSIuLi9zcmMvc3VwcG9ydC5qcyI+PC9zY3JpcHQ+CisJPHNj
cmlwdCBzcmM9Ii4uL3NyYy9kYXRhLmpzIj48L3NjcmlwdD4KKwk8c2NyaXB0IHNyYz0iLi4vc3Jj
L3F1ZXVlLmpzIj48L3NjcmlwdD4KKwk8c2NyaXB0IHNyYz0iLi4vc3JjL2F0dHJpYnV0ZXMuanMi
Pjwvc2NyaXB0PgorCTxzY3JpcHQgc3JjPSIuLi9zcmMvZXZlbnQuanMiPjwvc2NyaXB0PgorCTxz
Y3JpcHQgc3JjPSIuLi9zcmMvc2l6emxlL3NpenpsZS5qcyI+PC9zY3JpcHQ+CisJPHNjcmlwdCBz
cmM9Ii4uL3NyYy9zaXp6bGUtanF1ZXJ5LmpzIj48L3NjcmlwdD4KKwk8c2NyaXB0IHNyYz0iLi4v
c3JjL3RyYXZlcnNpbmcuanMiPjwvc2NyaXB0PgorCTxzY3JpcHQgc3JjPSIuLi9zcmMvbWFuaXB1
bGF0aW9uLmpzIj48L3NjcmlwdD4KKwk8c2NyaXB0IHNyYz0iLi4vc3JjL2Nzcy5qcyI+PC9zY3Jp
cHQ+CisJPHNjcmlwdCBzcmM9Ii4uL3NyYy9hamF4LmpzIj48L3NjcmlwdD4KKwk8c2NyaXB0IHNy
Yz0iLi4vc3JjL2FqYXgvanNvbnAuanMiPjwvc2NyaXB0PgorCTxzY3JpcHQgc3JjPSIuLi9zcmMv
YWpheC9zY3JpcHQuanMiPjwvc2NyaXB0PgorCTxzY3JpcHQgc3JjPSIuLi9zcmMvYWpheC94aHIu
anMiPjwvc2NyaXB0PgorCTxzY3JpcHQgc3JjPSIuLi9zcmMvZWZmZWN0cy5qcyI+PC9zY3JpcHQ+
CisJPHNjcmlwdCBzcmM9Ii4uL3NyYy9vZmZzZXQuanMiPjwvc2NyaXB0PgorCTxzY3JpcHQgc3Jj
PSIuLi9zcmMvZGltZW5zaW9ucy5qcyI+PC9zY3JpcHQ+CisKKwk8IS0tIExvYWQgdGhlIHNjcmlw
dCBsb2FkZXIgdGhhdCB1c2VzCisJCWpRdWVyeS5yZWFkeVdhaXQgLS0+CisJPHNjcmlwdCBzcmM9
ImRhdGEvcmVhZHl3YWl0bG9hZGVyLmpzIj48L3NjcmlwdD4KKworCTxzY3JpcHQgdHlwZT0idGV4
dC9qYXZhc2NyaXB0Ij4KKwlqUXVlcnkoZnVuY3Rpb24oKSB7CisJCS8vIFRoZSBkZWxheWVkTWVz
c2FnZSBpcyBkZWZpbmVkIGJ5CisJCS8vIHRoZSByZWFkeXdhaXRhc3NldC5qcyBmaWxlLCBzbyB0
aGUKKwkJLy8gbmV4dCBsaW5lIHdpbGwgb25seSB3b3JrIGlmIHRoaXMgRE9NCisJCS8vIHJlYWR5
IGNhbGxiYWNrIGlzIGNhbGxlZCBhZnRlciByZWFkeVdhaXQKKwkJLy8gaGFzIGJlZW4gZGVjcmVt
ZW50ZWQgYnkgcmVhZHl3YWl0bG9hZGVyLmpzCisJCS8vIElmIGFuIGVycm9yIG9jY3Vycy4KKwkJ
alF1ZXJ5KCIjb3V0cHV0IikuYXBwZW5kKGRlbGF5ZWRNZXNzYWdlKTsKKwl9KTsKKwk8L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorCTxoMT4KKwkJalF1ZXJ5LnJlYWR5V2FpdCBUZXN0CisJPC9o
MT4KKwk8cD4KKwkJVGhpcyBpcyBhIHRlc3QgcGFnZSBmb3IgalF1ZXJ5LnJlYWR5V2FpdCwgdGhh
dCB3YXMKKwkJYWRkZWQgZHVlIHRvIHRoaXMgdGlja2V0CisJCTxhIGhyZWY9Imh0dHA6Ly9idWdz
LmpxdWVyeS5jb20vdGlja2V0LzY3ODEiPiM2NzgxPC9hPi4KKwk8L3A+CisJPHA+CisJVGVzdCBm
b3IgalF1ZXJ5LnJlYWR5V2FpdCwgd2hpY2ggY2FuIGJlIHVzZWQKKwlieSBwbHVnaW5zIGFuZCBv
dGhlciBzY3JpcHRzIHRvIGluZGljYXRlIHNvbWV0aGluZworCWltcG9ydGFudCB0byB0aGUgcGFn
ZSBpcyBzdGlsbCBsb2FkaW5nIGFuZCBuZWVkcworCXRvIGJsb2NrIHRoZSBET00gcmVhZHkgY2Fs
bGJhY2tzIHRoYXQgYXJlIHJlZ2lzdGVyZWQKKwl3aXRoIGpRdWVyeS4KKwk8L3A+CisJPHA+CisJ
U2NyaXB0IGxvYWRlcnMgYXJlIHRoZSBtb3N0IGxpa2VseSBraW5kIG9mIHNjcmlwdAorCXRvIHVz
ZSBqUXVlcnkucmVhZHlXYWl0LCBidXQgaXQgY291bGQgYmUgdXNlZCBieQorCW90aGVyIHRoaW5n
cyBsaWtlIGEgc2NyaXB0IHRoYXQgbG9hZHMgYSBDU1MgZmlsZQorCWFuZCB3YW50cyB0byBwYXVz
ZSB0aGUgRE9NIHJlYWR5IGNhbGxiYWNrcy4KKwk8L3A+CisJPHA+CisJPHN0cm9uZz5FeHBlY3Rl
ZCBSZXN1bHQ8L3N0cm9uZz46IFRoZSB0ZXh0CisJPHNwYW4gaWQ9ImV4cGVjdGVkT3V0cHV0Ij5J
dCBXb3JrZWQhPC9zcGFuPgorCWFwcGVhcnMgYmVsb3cgYWZ0ZXIgYWJvdXQgPHN0cm9uZz4yIHNl
Y29uZHMuPC9zdHJvbmc+CisJPC9wPgorCTxwPgorCUlmIHRoZXJlIGlzIGFuIGVycm9yIGluIHRo
ZSBjb25zb2xlLAorCW9yIHRoZSB0ZXh0IGRvZXMgbm90IHNob3cgdXAsIHRoZW4gdGhlIHRlc3Qg
ZmFpbGVkLgorCTwvcD4KKwk8ZGl2IGlkPSJvdXRwdXQiPjwvZGl2PgorPC9ib2R5PgorPC9odG1s
PgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0
L3JlYWR5d2FpdC5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB5ZXMKCklu
ZGV4OiBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QveGh0bWwucGhwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC94aHRtbC5waHAJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QveGh0bWwucGhwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUgQEAKKzw/cGhwCisJIyBMb2FkIGFuZCBydW4gdGhlIHRl
c3Qgc3VpdGUgYXMgYSBwcm9wZXIgWEhUTUwgcGFnZQorCWhlYWRlcigiQ29udGVudC10eXBlOiBh
cHBsaWNhdGlvbi94aHRtbCt4bWwiKTsKKwlyZWFkZmlsZSgiaW5kZXguaHRtbCIpOworPz4KClBy
b3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC94aHRt
bC5waHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICArIHllcwoKSW5kZXg6IExheW91
dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9kYXRhL2F0b20reG1sLnBocAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS9hdG9tK3htbC5waHAJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS9h
dG9tK3htbC5waHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorPD9waHAgaGVhZGVyKCJD
b250ZW50LXR5cGU6IGF0b20reG1sIikgPz4KKzxyb290PgorCTxlbGVtZW50IC8+Cis8L3Jvb3Q+
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0
VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L2RhdGEvYXRvbSt4bWwucGhwCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IGFsbG93LXRhYnMKICAgKyB5ZXMKCkluZGV4OiBMYXlvdXRUZXN0cy9qcXVlcnkvcmVz
b3VyY2VzL3Rlc3QvZGF0YS9iYWRqc29uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2px
dWVyeS9yZXNvdXJjZXMvdGVzdC9kYXRhL2JhZGpzb24uanMJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS9iYWRqc29uLmpzCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxIEBACit7YmFkOiAxfQpJbmRleDogTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291
cmNlcy90ZXN0L2RhdGEvZGFzaGJvYXJkLnhtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9q
cXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS9kYXNoYm9hcmQueG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L2RhdGEvZGFzaGJvYXJkLnhtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0i
VVRGLTgiPz4KKzxkYXNoYm9hcmQ+CisJPGxvY2F0aW9ucyBjbGFzcz0iZm9vIj4KKwkJPGxvY2F0
aW9uIGZvcj0iYmFyIj4KKwkJCTxpbmZvd2luZG93dGFiPgorCQkJCTx0YWIgdGl0bGU9IkxvY2F0
aW9uIj48IVtDREFUQVtibGFibGFdXT48L3RhYj4KKwkJCQk8dGFiIHRpdGxlPSJVc2VycyI+PCFb
Q0RBVEFbYmx1Ymx1XV0+PC90YWI+CisJCQk8L2luZm93aW5kb3d0YWI+CisJCTwvbG9jYXRpb24+
CisJPC9sb2NhdGlvbnM+Cis8L2Rhc2hib2FyZD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91
dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9kYXRhL2Rhc2hib2FyZC54bWwKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpBZGRlZDogYWxsb3ctdGFicwogICArIHllcwoKSW5kZXg6IExheW91dFRlc3RzL2pxdWVyeS9y
ZXNvdXJjZXMvdGVzdC9kYXRhL2VjaG9EYXRhLnBocAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS9lY2hvRGF0YS5waHAJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS9lY2hvRGF0YS5waHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKKzw/cGhwIGVjaG8gZmlsZV9nZXRfY29udGVudHMoJ3Bo
cDovL2lucHV0Jyk7ID8+CkluZGV4OiBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3Qv
ZGF0YS9lY2hvUXVlcnkucGhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pxdWVyeS9yZXNv
dXJjZXMvdGVzdC9kYXRhL2VjaG9RdWVyeS5waHAJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS9lY2hvUXVlcnkucGhwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxIEBACis8P3BocCBlY2hvICRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXTsgPz4KXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3Vy
Y2VzL3Rlc3QvZGF0YS9lcnJvcldpdGhUZXh0LnBocAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS9lcnJvcldpdGhUZXh0LnBocAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9kYXRhL2Vycm9yV2l0aFRl
eHQucGhwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUgQEAKKzw/cGhwCisKK2hlYWRlcigiSFRU
UC8xLjAgNDAwIEJhZCBSZXF1ZXN0Iik7CisKK2VjaG8gInBsYWluIHRleHQgbWVzc2FnZSI7Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291
cmNlcy90ZXN0L2RhdGEvZXRhZy5waHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanF1ZXJ5
L3Jlc291cmNlcy90ZXN0L2RhdGEvZXRhZy5waHAJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS9ldGFnLnBocAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyMSBAQAorPD9waHAKK2Vycm9yX3JlcG9ydGluZygwKTsKKworJHRzID0gJF9SRVFVRVNU
Wyd0cyddOworJGV0YWcgPSBtZDUoJHRzKTsKKworJGlmTm9uZU1hdGNoID0gaXNzZXQoJF9TRVJW
RVJbJ0hUVFBfSUZfTk9ORV9NQVRDSCddKSA/IHN0cmlwc2xhc2hlcygkX1NFUlZFUlsnSFRUUF9J
Rl9OT05FX01BVENIJ10pIDogZmFsc2U7CitpZiAoJGlmTm9uZU1hdGNoID09ICRldGFnKSB7Cisg
ICAgaGVhZGVyKCdIVFRQLzEuMCAzMDQgTm90IE1vZGlmaWVkJyk7CisgICAgZGllOyAvLyBzdG9w
IHByb2Nlc3NpbmcKK30KKworaGVhZGVyKCJFdGFnOiAiIC4gJGV0YWcpOworCitpZiAoICRpZk5v
bmVNYXRjaCApIHsKKwllY2hvICJPSzogIiAuICRldGFnOworfSBlbHNlIHsKKwllY2hvICJGQUlM
IjsKK30KKworPz4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2pxdWVyeS9yZXNv
dXJjZXMvdGVzdC9kYXRhL2V0YWcucGhwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAg
KyB5ZXMKCkluZGV4OiBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS9oZWFk
ZXJzLnBocAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3Qv
ZGF0YS9oZWFkZXJzLnBocAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pxdWVyeS9yZXNv
dXJjZXMvdGVzdC9kYXRhL2hlYWRlcnMucGhwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4IEBA
Cis8P3BocAorCitoZWFkZXIoICJTYW1wbGUtSGVhZGVyOiBIZWxsbyBXb3JsZCIgKTsKK2hlYWRl
ciggIkVtcHR5LUhlYWRlcjogIiApOworaGVhZGVyKCAiU2FtcGxlLUhlYWRlcjI6IEhlbGxvIFdv
cmxkIDIiICk7CisKKyRoZWFkZXJzID0gYXJyYXkoKTsKKworZm9yZWFjaCggJF9TRVJWRVIgYXMg
JGtleSA9PiAkdmFsdWUgKSB7CisKKwkka2V5ID0gc3RyX3JlcGxhY2UoICJfIiAsICItIiAsIHN1
YnN0ciggJGtleSAsIDAgLCA1ICkgPT0gIkhUVFBfIiA/IHN1YnN0ciggJGtleSAsIDUgKSA6ICRr
ZXkgKTsKKwkkaGVhZGVyc1sgJGtleSBdID0gJHZhbHVlOworCit9CisKK2ZvcmVhY2goIGV4cGxv
ZGUoICJfIiAsICRfR0VUWyAia2V5cyIgXSApIGFzICRrZXkgKSB7CisJZWNobyAiJGtleTogIiAu
IEAkaGVhZGVyc1sgc3RydG91cHBlciggJGtleSApIF0gLiAiXG4iOworfQoKUHJvcGVydHkgY2hh
bmdlcyBvbjogTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L2RhdGEvaGVhZGVycy5w
aHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICArIHllcwoKSW5kZXg6IExheW91dFRl
c3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9kYXRhL2lmX21vZGlmaWVkX3NpbmNlLnBocAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS9pZl9tb2Rp
ZmllZF9zaW5jZS5waHAJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3Vy
Y2VzL3Rlc3QvZGF0YS9pZl9tb2RpZmllZF9zaW5jZS5waHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjAgQEAKKzw/cGhwCitlcnJvcl9yZXBvcnRpbmcoMCk7CisKKyR0cyA9ICRfUkVRVUVTVFsn
dHMnXTsKKworJGlmTW9kaWZpZWRTaW5jZSA9IGlzc2V0KCRfU0VSVkVSWydIVFRQX0lGX01PRElG
SUVEX1NJTkNFJ10pID8gc3RyaXBzbGFzaGVzKCRfU0VSVkVSWydIVFRQX0lGX01PRElGSUVEX1NJ
TkNFJ10pIDogZmFsc2U7CitpZiAoJGlmTW9kaWZpZWRTaW5jZSA9PSAkdHMpIHsKKyAgICBoZWFk
ZXIoJ0hUVFAvMS4wIDMwNCBOb3QgTW9kaWZpZWQnKTsKKyAgICBkaWU7IC8vIHN0b3AgcHJvY2Vz
c2luZworfQorCitoZWFkZXIoIkxhc3QtTW9kaWZpZWQ6ICIgLiAkdHMpOworCitpZiAoICRpZk1v
ZGlmaWVkU2luY2UgKSB7CisJZWNobyAiT0s6ICIgLiAkdHM7Cit9IGVsc2UgeworCWVjaG8gIkZB
SUwiOworfQorCis/PgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvanF1ZXJ5L3Jl
c291cmNlcy90ZXN0L2RhdGEvaWZfbW9kaWZpZWRfc2luY2UucGhwCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6
IGFsbG93LXRhYnMKICAgKyB5ZXMKCkluZGV4OiBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2Vz
L3Rlc3QvZGF0YS9pZnJhbWUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcXVlcnkv
cmVzb3VyY2VzL3Rlc3QvZGF0YS9pZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9kYXRhL2lmcmFtZS5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDggQEAKKzxodG1sPgorICA8aGVhZD4KKyAgICA8dGl0bGU+aWZyYW1lPC90aXRs
ZT4KKyAgPC9oZWFkPgorICA8Ym9keT4KKyAgICA8ZGl2PjxzcGFuPnNwYW4gdGV4dDwvc3Bhbj48
L2Rpdj4KKyAgPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291
cmNlcy90ZXN0L2RhdGEvanNvbi5waHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanF1ZXJ5
L3Jlc291cmNlcy90ZXN0L2RhdGEvanNvbi5waHAJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS9qc29uLnBocAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMyBAQAorPD9waHAKK2Vycm9yX3JlcG9ydGluZygwKTsKK2lmICggJF9SRVFVRVNUWydo
ZWFkZXInXSApIHsKKwloZWFkZXIoIkNvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vanNvbiIpOwor
fQorCiskanNvbiA9ICRfUkVRVUVTVFsnanNvbiddOworaWYoJGpzb24pIHsKKwllY2hvICdbIHsi
bmFtZSI6ICJKb2huIiwgImFnZSI6IDIxfSwgeyJuYW1lIjogIlBldGVyIiwgImFnZSI6IDI1IH0g
XSc7Cit9IGVsc2UgeworCWVjaG8gJ3sgImRhdGEiOiB7ImxhbmciOiAiZW4iLCAibGVuZ3RoIjog
MjV9IH0nOworfQorPz4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2pxdWVyeS9y
ZXNvdXJjZXMvdGVzdC9kYXRhL2pzb24ucGhwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMK
ICAgKyB5ZXMKCkluZGV4OiBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS9q
c29uX29iai5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rl
c3QvZGF0YS9qc29uX29iai5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pxdWVyeS9y
ZXNvdXJjZXMvdGVzdC9kYXRhL2pzb25fb2JqLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBA
Cit7ICJkYXRhIjogeyJsYW5nIjogImVuIiwgImxlbmd0aCI6IDI1fSB9CkluZGV4OiBMYXlvdXRU
ZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS9qc29ucC5waHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L2RhdGEvanNvbnAucGhwCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L2RhdGEvanNvbnAucGhw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0IEBACis8P3BocAorZXJyb3JfcmVwb3J0aW5nKDAp
OworJGNhbGxiYWNrID0gJF9SRVFVRVNUWydjYWxsYmFjayddOworaWYgKCAhICRjYWxsYmFjayAp
IHsKKwkkY2FsbGJhY2sgPSBleHBsb2RlKCI/IixlbmQoZXhwbG9kZSgiLyIsJF9TRVJWRVJbJ1JF
UVVFU1RfVVJJJ10pKSk7CisJJGNhbGxiYWNrID0gJGNhbGxiYWNrWzBdOworfQorJGpzb24gPSAk
X1JFUVVFU1RbJ2pzb24nXTsKK2lmKCRqc29uKSB7CisJZWNobyAkY2FsbGJhY2sgLiAnKFsgeyJu
YW1lIjogIkpvaG4iLCAiYWdlIjogMjF9LCB7Im5hbWUiOiAiUGV0ZXIiLCAiYWdlIjogMjUgfSBd
KSc7Cit9IGVsc2UgeworCWVjaG8gJGNhbGxiYWNrIC4gJyh7ICJkYXRhIjogeyJsYW5nIjogImVu
IiwgImxlbmd0aCI6IDI1fSB9KSc7Cit9Cis/PgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0
VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L2RhdGEvanNvbnAucGhwCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IGFsbG93LXRhYnMKICAgKyB5ZXMKCkluZGV4OiBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3Vy
Y2VzL3Rlc3QvZGF0YS9uYW1lLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanF1ZXJ5
L3Jlc291cmNlcy90ZXN0L2RhdGEvbmFtZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L2RhdGEvbmFtZS5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxIEBACitFUlJPUiA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+b2soIHRydWUs
ICJuYW1lLmh0bWwgcmV0cmlldmVkIiApOzwvc2NyaXB0PgpJbmRleDogTGF5b3V0VGVzdHMvanF1
ZXJ5L3Jlc291cmNlcy90ZXN0L2RhdGEvbmFtZS5waHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L2RhdGEvbmFtZS5waHAJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS9uYW1lLnBocAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwyNCBAQAorPD9waHAKK2Vycm9yX3JlcG9ydGluZygwKTsKKyR3YWl0ID0g
JF9SRVFVRVNUWyd3YWl0J107CitpZigkd2FpdCkgeworCXNsZWVwKCR3YWl0KTsKK30KKyR4bWwg
PSAkX1JFUVVFU1RbJ3htbCddOworaWYoJHhtbCkgeworCWhlYWRlcigiQ29udGVudC10eXBlOiB0
ZXh0L3htbCIpOworCSRyZXN1bHQgPSAoJHhtbCA9PSAiNS0yIikgPyAiMyIgOiAiPyI7CisJZWNo
byAiPG1hdGg+PGNhbGN1bGF0aW9uPiR4bWw8L2NhbGN1bGF0aW9uPjxyZXN1bHQ+JHJlc3VsdDwv
cmVzdWx0PjwvbWF0aD4iOworCWRpZSgpOworfQorJG5hbWUgPSAkX1JFUVVFU1RbJ25hbWUnXTsK
K2lmKCRuYW1lID09ICdmb28nKSB7CisJZWNobyAiYmFyIjsKKwlkaWUoKTsKK30gZWxzZSBpZigk
bmFtZSA9PSAncGV0ZXInKSB7CisJZWNobyAicGFuIjsKKwlkaWUoKTsKK30KKworZWNobyAnRVJS
T1IgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPm9rKCB0cnVlLCAibmFtZS5waHAgZXhl
Y3V0ZWQiICk7PC9zY3JpcHQ+JzsKKz8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQoKUHJv
cGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L2RhdGEv
bmFtZS5waHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICArIHllcwoKSW5kZXg6IExh
eW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9kYXRhL3BhcmFtc19odG1sLnBocAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS9wYXJhbXNf
aHRtbC5waHAJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rl
c3QvZGF0YS9wYXJhbXNfaHRtbC5waHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzxk
aXYgaWQ9InBvc3QiPgorPD9waHAKKwlmb3JlYWNoKCAkX1BPU1QgYXMgJGtleT0+JHZhbHVlICkK
KwkJZWNobyAiPGIgaWQ9JyRrZXknPiR2YWx1ZTwvYj4iOworPz4KKzwvZGl2PgorPGRpdiBpZD0i
Z2V0Ij4KKzw/cGhwCisJZm9yZWFjaCggJF9HRVQgYXMgJGtleT0+JHZhbHVlICkKKwkJZWNobyAi
PGIgaWQ9JyRrZXknPiR2YWx1ZTwvYj4iOworPz4KKzwvZGl2PgpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJj
ZXMvdGVzdC9kYXRhL3BhcmFtc19odG1sLnBocApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBhbGxvdy10YWJz
CiAgICsgeWVzCgpJbmRleDogTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L2RhdGEv
cmVhZHl3YWl0YXNzZXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291
cmNlcy90ZXN0L2RhdGEvcmVhZHl3YWl0YXNzZXQuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS9yZWFkeXdhaXRhc3NldC5qcwkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSBAQAordmFyIGRlbGF5ZWRNZXNzYWdlID0gIkl0IHdvcmtlZCEiOwpJ
bmRleDogTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L2RhdGEvcmVhZHl3YWl0bG9h
ZGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9k
YXRhL3JlYWR5d2FpdGxvYWRlci5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pxdWVy
eS9yZXNvdXJjZXMvdGVzdC9kYXRhL3JlYWR5d2FpdGxvYWRlci5qcwkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwyNSBAQAorLy8gU2ltcGxlIHNjcmlwdCBsb2FkZXIgdGhhdCB1c2VzIGpRdWVyeS5y
ZWFkeVdhaXQKKworLy9Ib2xkIG9uIGpRdWVyeSEKK2pRdWVyeS5yZWFkeVdhaXQrKzsKKwordmFy
IHJlYWR5UmVnRXhwID0gL14oY29tcGxldGV8bG9hZGVkKSQvOworCitmdW5jdGlvbiBhc3NldExv
YWRlZCggZXZ0ICl7CisJdmFyIG5vZGUgPSBldnQuY3VycmVudFRhcmdldCB8fCBldnQuc3JjRWxl
bWVudDsKKwlpZiAoIGV2dC50eXBlID09PSAibG9hZCIgfHwgcmVhZHlSZWdFeHAudGVzdChub2Rl
LnJlYWR5U3RhdGUpICkgeworCQlqUXVlcnkucmVhZHkodHJ1ZSk7CisJfQorfQorCitzZXRUaW1l
b3V0KCBmdW5jdGlvbigpIHsKKwl2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
c2NyaXB0Iik7CisJc2NyaXB0LnR5cGUgPSAidGV4dC9qYXZhc2NyaXB0IjsKKwlpZiAoIHNjcmlw
dC5hZGRFdmVudExpc3RlbmVyICkgeworCQlzY3JpcHQuYWRkRXZlbnRMaXN0ZW5lciggImxvYWQi
LCBhc3NldExvYWRlZCwgZmFsc2UgKTsKKwl9IGVsc2UgeworCQlzY3JpcHQuYXR0YWNoRXZlbnQo
ICJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBhc3NldExvYWRlZCApOworCX0KKwlzY3JpcHQuc3JjID0g
ImRhdGEvcmVhZHl3YWl0YXNzZXQuanMiOworCWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCJoZWFkIilbMF0uYXBwZW5kQ2hpbGQoc2NyaXB0KTsKK30sIDIwMDAgKTsKClByb3BlcnR5IGNo
YW5nZXMgb246IExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9kYXRhL3JlYWR5d2Fp
dGxvYWRlci5qcwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBhbGxvdy10YWJzCiAgICsgeWVzCgpJbmRleDog
TGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L2RhdGEvc2NyaXB0LnBocAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS9zY3JpcHQucGhw
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L2RhdGEv
c2NyaXB0LnBocAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorPD9waHAKK2Vycm9yX3Jl
cG9ydGluZygwKTsKK2lmICggJF9SRVFVRVNUWydoZWFkZXInXSApIHsKKwlpZiAoICRfUkVRVUVT
VFsnaGVhZGVyJ10gPT0gImVjbWEiICkgeworCQloZWFkZXIoIkNvbnRlbnQtdHlwZTogYXBwbGlj
YXRpb24vZWNtYXNjcmlwdCIpOworCX0gZWxzZSB7CisJCWhlYWRlcigiQ29udGVudC10eXBlOiB0
ZXh0L2phdmFzY3JpcHQiKTsKKwl9Cit9Cis/Pgorb2soIHRydWUsICJTY3JpcHQgZXhlY3V0ZWQg
Y29ycmVjdGx5LiIgKTsKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2pxdWVyeS9y
ZXNvdXJjZXMvdGVzdC9kYXRhL3NjcmlwdC5waHAKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFi
cwogICArIHllcwoKSW5kZXg6IExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9kYXRh
L3Rlc3QyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90
ZXN0L2RhdGEvdGVzdDIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pxdWVyeS9y
ZXNvdXJjZXMvdGVzdC9kYXRhL3Rlc3QyLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNSBA
QAorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgordmFyIHRlc3RGb28gPSAiZm9vIjsK
K2pRdWVyeSgnI2ZvbycpLmh0bWwoJ2ZvbycpOworb2soIHRydWUsICJ0ZXN0Mi5odG1sIGV4ZWN1
dGVkIiApOworPC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rl
c3QvZGF0YS90ZXN0My5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pxdWVyeS9yZXNv
dXJjZXMvdGVzdC9kYXRhL3Rlc3QzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9q
cXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS90ZXN0My5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDMgQEAKKzxkaXYgY2xhc3M9InVzZXIiPlRoaXMgaXMgYSB1c2VyPC9kaXY+Cis8ZGl2IGNs
YXNzPSJ1c2VyIj5UaGlzIGlzIGEgdXNlcjwvZGl2PgorPGRpdiBjbGFzcz0idGVhY2hlciI+VGhp
cyBpcyBhIHRlYWNoZXI8L2Rpdj4KSW5kZXg6IExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMv
dGVzdC9kYXRhL3Rlc3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcXVlcnkvcmVz
b3VyY2VzL3Rlc3QvZGF0YS90ZXN0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9q
cXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS90ZXN0Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNyBAQAoraHRtbCB0ZXh0PGJyLz4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4v
KiA8IVtDREFUQVsgKi8KK3Rlc3RGb28gPSAiZm9vIjsgalF1ZXJ5KCcjZm9vJykuaHRtbCgnZm9v
Jyk7CitvayggdHJ1ZSwgInRlc3QuaHRtbCBleGVjdXRlZCIgKTsKKy8qIF1dPiAqLzwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9ImRhdGEvdGVzdC5qcyI+PC9zY3JpcHQ+CitibGFibGEKSW5kZXg6IExh
eW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9kYXRhL3Rlc3QuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L2RhdGEvdGVzdC5qcwkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9kYXRhL3Rlc3QuanMJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAordmFyIGZvb2JhciA9ICJiYXIiOworalF1ZXJ5
KCcjYXAnKS5odG1sKCdiYXInKTsKK29rKCB0cnVlLCAidGVzdC5qcyBleGVjdXRlZCIpOwpJbmRl
eDogTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L2RhdGEvdGVzdC5waHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L2RhdGEvdGVzdC5waHAJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS90
ZXN0LnBocAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitodG1sIHRleHQ8YnIvPgorPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8qIDwhW0NEQVRBWyAqLwordGVzdEZvbyA9ICJm
b28iOyBqUXVlcnkoJyNmb28nKS5odG1sKCdmb28nKTsKK29rKCB0cnVlLCAidGVzdC5waHAgZXhl
Y3V0ZWQiICk7CisvKiBdXT4gKi88L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJkYXRhL3Rlc3QuanM/
PD9waHAgc3JhbmQoKTsgZWNobyB0aW1lKCkgLiAnJyAuIHJhbmQoKTsgPz4iPjwvc2NyaXB0Pgor
YmxhYmxhClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvanF1
ZXJ5L3Jlc291cmNlcy90ZXN0L2RhdGEvdGVzdGluaXQuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L2RhdGEvdGVzdGluaXQuanMJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS90ZXN0aW5pdC5qcwko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NiBAQAordmFyIGpRdWVyeSA9IHRoaXMualF1ZXJ5IHx8
ICJqUXVlcnkiLCAvLyBGb3IgdGVzdGluZyAubm9Db25mbGljdCgpCisJJCA9IHRoaXMuJCB8fCAi
JCIsCisJb3JpZ2luYWxqUXVlcnkgPSBqUXVlcnksCisJb3JpZ2luYWwkID0gJDsKKworLyoqCisg
KiBSZXR1cm5zIGFuIGFycmF5IG9mIGVsZW1lbnRzIHdpdGggdGhlIGdpdmVuIElEcywgZWcuCisg
KiBAZXhhbXBsZSBxKCJtYWluIiwgImZvbyIsICJiYXIiKQorICogQHJlc3VsdCBbPGRpdiBpZD0i
bWFpbiI+LCA8c3BhbiBpZD0iZm9vIj4sIDxpbnB1dCBpZD0iYmFyIj5dCisgKi8KK2Z1bmN0aW9u
IHEoKSB7CisJdmFyIHIgPSBbXTsKKworCWZvciAoIHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5s
ZW5ndGg7IGkrKyApIHsKKwkJci5wdXNoKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggYXJndW1l
bnRzW2ldICkgKTsKKwl9CisKKwlyZXR1cm4gcjsKK30KKworLyoqCisgKiBBc3NlcnRzIHRoYXQg
YSBzZWxlY3QgbWF0Y2hlcyB0aGUgZ2l2ZW4gSURzICogQGV4YW1wbGUgdCgiQ2hlY2sgZm9yIHNv
bWV0aGluZyIsICIvL1thXSIsIFsiZm9vIiwgImJhYXIiXSk7CisgKiBAcmVzdWx0IHJldHVybnMg
dHJ1ZSBpZiAiLy9bYV0iIHJldHVybiB0d28gZWxlbWVudHMgd2l0aCB0aGUgSURzICdmb28nIGFu
ZCAnYmFhCityJworICovCitmdW5jdGlvbiB0KGEsYixjKSB7CisJdmFyIGYgPSBqUXVlcnkoYiku
Z2V0KCksIHMgPSAiIjsKKworCWZvciAoIHZhciBpID0gMDsgaSA8IGYubGVuZ3RoOyBpKysgKSB7
CisJCXMgKz0gKHMgJiYgIiwiKSArICciJyArIGZbaV0uaWQgKyAnIic7CisJfQorCisJc2FtZShm
LCBxLmFwcGx5KHEsYyksIGEgKyAiICgiICsgYiArICIpIik7Cit9CisKKy8qKgorICogQWRkIHJh
bmRvbSBudW1iZXIgdG8gdXJsIHRvIHN0b3AgSUUgZnJvbSBjYWNoaW5nCisgKgorICogQGV4YW1w
bGUgdXJsKCJkYXRhL3Rlc3QuaHRtbCIpCisgKiBAcmVzdWx0ICJkYXRhL3Rlc3QuaHRtbD8xMDUz
ODM1ODQyODk0MyIKKyAqCisgKiBAZXhhbXBsZSB1cmwoImRhdGEvdGVzdC5waHA/Zm9vPWJhciIp
CisgKiBAcmVzdWx0ICJkYXRhL3Rlc3QucGhwP2Zvbz1iYXImMTA1MzgzNTgzNDU1NTQiCisgKi8K
K2Z1bmN0aW9uIHVybCh2YWx1ZSkgeworCXJldHVybiB2YWx1ZSArICgvXD8vLnRlc3QodmFsdWUp
ID8gIiYiIDogIj8iKSArIG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgIiIgKyBwYXJzZUludChNYXRo
LnJhbmRvbSgpKjEwMDAwMCk7Cit9CisKKyhmdW5jdGlvbiAoKSB7CisJLy8gU3RvcmUgdGhlIG9s
ZCBjb3VudHMgc28gdGhhdCB3ZSBvbmx5IGFzc2VydCBvbiB0ZXN0cyB0aGF0IGhhdmUgYWN0dWFs
bHkgbGVha2VkLAorCS8vIGluc3RlYWQgb2YgYXNzZXJ0aW5nIGV2ZXJ5IHRpbWUgYSB0ZXN0IGhh
cyBsZWFrZWQgc29tZXRpbWUgaW4gdGhlIHBhc3QKKwl2YXIgb2xkQ2FjaGVMZW5ndGggPSAwLAor
CQlvbGRGcmFnbWVudHNMZW5ndGggPSAwLAorCQlvbGRUaW1lcnNMZW5ndGggPSAwLAorCQlvbGRB
Y3RpdmUgPSAwOworCisJLyoqCisJICogRW5zdXJlcyB0aGF0IHRlc3RzIGhhdmUgY2xlYW5lZCB1
cCBwcm9wZXJseSBhZnRlciB0aGVtc2VsdmVzLiBTaG91bGQgYmUgcGFzc2VkIGFzIHRoZQorCSAq
IHRlYXJkb3duIGZ1bmN0aW9uIG9uIGFsbCBtb2R1bGVzJyBsaWZlY3ljbGUgb2JqZWN0LgorCSAq
LworCXRoaXMubW9kdWxlVGVhcmRvd24gPSBmdW5jdGlvbiAoKSB7CisJCXZhciBpLCBmcmFnbWVu
dHNMZW5ndGggPSAwLCBjYWNoZUxlbmd0aCA9IDA7CisKKwkJLy8gQWxsb3cgUVVuaXQucmVzZXQg
dG8gY2xlYW4gdXAgYW55IGF0dGFjaGVkIGVsZW1lbnRzIGJlZm9yZSBjaGVja2luZyBmb3IgbGVh
a3MKKwkJUVVuaXQucmVzZXQoKTsKKworCQlmb3IgKCBpIGluIGpRdWVyeS5jYWNoZSApIHsKKwkJ
CSsrY2FjaGVMZW5ndGg7CisJCX0KKworCQlqUXVlcnkuZnJhZ21lbnRzID0ge307CisKKwkJZm9y
ICggaSBpbiBqUXVlcnkuZnJhZ21lbnRzICkgeworCQkJKytmcmFnbWVudHNMZW5ndGg7CisJCX0K
KworCQkvLyBCZWNhdXNlIFFVbml0IGRvZXNuJ3QgaGF2ZSBhIG1lY2hhbmlzbSBmb3IgcmV0cmll
dmluZyB0aGUgbnVtYmVyIG9mIGV4cGVjdGVkIGFzc2VydGlvbnMgZm9yIGEgdGVzdCwKKwkJLy8g
aWYgd2UgdW5jb25kaXRpb25hbGx5IGFzc2VydCBhbnkgb2YgdGhlc2UsIHRoZSB0ZXN0IHdpbGwg
ZmFpbCB3aXRoIHRvbyBtYW55IGFzc2VydGlvbnMgOnwKKwkJaWYgKCBjYWNoZUxlbmd0aCAhPT0g
b2xkQ2FjaGVMZW5ndGggKSB7CisJCQllcXVhbHMoIGNhY2hlTGVuZ3RoLCBvbGRDYWNoZUxlbmd0
aCwgIk5vIHVuaXQgdGVzdHMgbGVhayBtZW1vcnkgaW4galF1ZXJ5LmNhY2hlIiApOworCQkJb2xk
Q2FjaGVMZW5ndGggPSBjYWNoZUxlbmd0aDsKKwkJfQorCQlpZiAoIGZyYWdtZW50c0xlbmd0aCAh
PT0gb2xkRnJhZ21lbnRzTGVuZ3RoICkgeworCQkJZXF1YWxzKCBmcmFnbWVudHNMZW5ndGgsIG9s
ZEZyYWdtZW50c0xlbmd0aCwgIk5vIHVuaXQgdGVzdHMgbGVhayBtZW1vcnkgaW4galF1ZXJ5LmZy
YWdtZW50cyIgKTsKKwkJCW9sZEZyYWdtZW50c0xlbmd0aCA9IGZyYWdtZW50c0xlbmd0aDsKKwkJ
fQorCQlpZiAoIGpRdWVyeS50aW1lcnMubGVuZ3RoICE9PSBvbGRUaW1lcnNMZW5ndGggKSB7CisJ
CQllcXVhbHMoIGpRdWVyeS50aW1lcnMubGVuZ3RoLCBvbGRUaW1lcnNMZW5ndGgsICJObyB0aW1l
cnMgYXJlIHN0aWxsIHJ1bm5pbmciICk7CisJCQlvbGRUaW1lcnNMZW5ndGggPSBqUXVlcnkudGlt
ZXJzLmxlbmd0aDsKKwkJfQorCQlpZiAoIGpRdWVyeS5hY3RpdmUgIT09IG9sZEFjdGl2ZSApIHsK
KwkJCWVxdWFscyggalF1ZXJ5LmFjdGl2ZSwgMCwgIk5vIEFKQVggcmVxdWVzdHMgYXJlIHN0aWxs
IGFjdGl2ZSIgKTsKKwkJCW9sZEFjdGl2ZSA9IGpRdWVyeS5hY3RpdmU7CisJCX0KKwl9Cit9KCkp
OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91
dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9kYXRhL3Rlc3Rpbml0LmpzCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IGFsbG93LXRhYnMKICAgKyB5ZXMKCkluZGV4OiBMYXlvdXRUZXN0cy9qcXVlcnkvcmVz
b3VyY2VzL3Rlc3QvZGF0YS90ZXN0cnVubmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9kYXRhL3Rlc3RydW5uZXIuanMJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS90ZXN0cnVubmVyLmpzCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI2IEBACitqUXVlcnkubm9Db25mbGljdCgpOyAvLyBBbGxv
dyB0aGUgdGVzdCB0byBydW4gd2l0aCBvdGhlciBsaWJzIG9yIGpRdWVyeSdzLgorCisvLyBqUXVl
cnktc3BlY2lmaWMgUVVuaXQucmVzZXQKKyhmdW5jdGlvbigpIHsKKwl2YXIgcmVzZXQgPSBRVW5p
dC5yZXNldDsKKwl2YXIgYWpheFNldHRpbmdzID0galF1ZXJ5LmFqYXhTZXR0aW5ncworCVFVbml0
LnJlc2V0ID0gZnVuY3Rpb24oKSB7CisJCXJlc2V0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisJ
CWpRdWVyeS5ldmVudC5nbG9iYWwgPSB7fTsKKwkJalF1ZXJ5LmFqYXhTZXR0aW5ncyA9IGpRdWVy
eS5leHRlbmQoe30sIGFqYXhTZXR0aW5ncyk7CisJfTsKK30pKCk7CisKKy8vIGxvYWQgdGVzdHN3
YXJtIGFnZW50CisoZnVuY3Rpb24oKSB7CisJdmFyIHVybCA9IHdpbmRvdy5sb2NhdGlvbi5zZWFy
Y2g7CisJdXJsID0gZGVjb2RlVVJJQ29tcG9uZW50KCB1cmwuc2xpY2UoIHVybC5pbmRleE9mKCJz
d2FybVVSTD0iKSArIDkgKSApOworCWlmICggIXVybCB8fCB1cmwuaW5kZXhPZigiaHR0cCIpICE9
PSAwICkgeworCQlyZXR1cm47CisJfQorCisJLy8gKFRlbXBvcmFyaWx5KSBEaXNhYmxlIEFqYXgg
dGVzdHMgdG8gcmVkdWNlIG5ldHdvcmsgc3RyYWluCisJaXNMb2NhbCA9IFFVbml0LmlzTG9jYWwg
PSB0cnVlOworCisJZG9jdW1lbnQud3JpdGUoIjxzY3IiICsgImlwdCBzcmM9J2h0dHA6Ly9zd2Fy
bS5qcXVlcnkub3JnL2pzL2luamVjdC5qcz8iICsgKG5ldyBEYXRlKS5nZXRUaW1lKCkgKyAiJz48
L3NjciIgKyAiaXB0PiIpOworfSkoKTsKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3Rz
L2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9kYXRhL3Rlc3RydW5uZXIuanMKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogYWxsb3ctdGFicwogICArIHllcwoKSW5kZXg6IExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJj
ZXMvdGVzdC9kYXRhL3Rlc3RzdWl0ZS5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanF1
ZXJ5L3Jlc291cmNlcy90ZXN0L2RhdGEvdGVzdHN1aXRlLmNzcwkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9kYXRhL3Rlc3RzdWl0ZS5jc3MJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTExIEBACisvKiBmb3IgdGVzdGluZyBvcGFjaXR5IHNldCBpbiBz
dHlsZXMgaW4gSUUgKi8KK29sI2VtcHR5IHsgb3BhY2l0eTogMDsgZmlsdGVyOkFscGhhKG9wYWNp
dHk9MCk7IH0KKworZGl2I2Z4LXRlc3RzIGg0IHsKKyAgICAgICAgYmFja2dyb3VuZDogcmVkOwor
fQorCitkaXYjZngtdGVzdHMgaDQucGFzcyB7CisgICAgICAgIGJhY2tncm91bmQ6IGdyZWVuOwor
fQorCitkaXYjZngtdGVzdHMgZGl2LmJveCB7CisgICAgICAgIGJhY2tncm91bmQ6IHJlZDsKKyAg
ICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKKyAgICAgICAgYm9yZGVyOiAycHggc29saWQgIzAwMDsK
K30KKworZGl2I2Z4LXRlc3RzIGRpdi5vdmVyZmxvdyB7CisgICAgICAgIG92ZXJmbG93OiB2aXNp
YmxlOworfQorCitkaXYuaW5saW5lIHsKKyAgICAgICAgZGlzcGxheTogaW5saW5lOworfQorCitk
aXYuYXV0b2hlaWdodCB7CisgICAgICAgIGhlaWdodDogYXV0bzsKK30KKworZGl2LmF1dG93aWR0
aCB7CisgICAgICAgIHdpZHRoOiBhdXRvOworfQorCitkaXYuYXV0b29wYWNpdHkgeworICAgICAg
ICBvcGFjaXR5OiBhdXRvOworfQorCitkaXYubGFyZ2V3aWR0aCB7CisgICAgICAgIHdpZHRoOiAx
MDBweDsKK30KKworZGl2LmxhcmdlaGVpZ2h0IHsKKyAgICAgICAgaGVpZ2h0OiAxMDBweDsKK30K
KworZGl2Lmxhcmdlb3BhY2l0eSB7CisgICAgICAgIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFu
c2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHk9MTAwKTsKK30KKworZGl2Lm1lZHdpZHRoIHsK
KyAgICAgICAgd2lkdGg6IDUwcHg7Cit9CisKK2Rpdi5tZWRoZWlnaHQgeworICAgICAgICBoZWln
aHQ6IDUwcHg7Cit9CisKK2Rpdi5tZWRvcGFjaXR5IHsKKyAgICAgICAgb3BhY2l0eTogMC41Owor
ICAgICAgICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYShv
cGFjaXR5PTUwKTsKK30KKworZGl2Lm5vd2lkdGggeworICAgICAgICB3aWR0aDogMHB4OworfQor
CitkaXYubm9oZWlnaHQgeworICAgICAgICBoZWlnaHQ6IDBweDsKK30KKworZGl2Lm5vb3BhY2l0
eSB7CisgICAgICAgIG9wYWNpdHk6IDA7CisgICAgICAgIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VU
cmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKG9wYWNpdHk9MCk7Cit9CisKK2Rpdi5oaWRkZW4gewor
ICAgICAgICBkaXNwbGF5OiBub25lOworfQorCitkaXYjZngtdGVzdHMgZGl2LndpZGV3aWR0aCB7
CisgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKK30KKworZGl2I2Z4LXRlc3Rz
IGRpdi53aWRlaGVpZ2h0IHsKKyAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC15Owor
fQorCitkaXYjZngtdGVzdHMgZGl2LndpZGV3aWR0aC53aWRlaGVpZ2h0IHsKKyAgICAgICAgYmFj
a2dyb3VuZC1yZXBlYXQ6IHJlcGVhdDsKK30KKworZGl2I2Z4LXRlc3RzIGRpdi5ub2JhY2sgewor
ICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOworfQorCitkaXYuY2hhaW4sIGRpdi5jaGFp
biBkaXYgeyB3aWR0aDogMTAwcHg7IGhlaWdodDogMjBweDsgcG9zaXRpb246IHJlbGF0aXZlOyBm
bG9hdDogbGVmdDsgfQorZGl2LmNoYWluIGRpdiB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAw
cHg7IGxlZnQ6IDBweDsgfQorCitkaXYuY2hhaW4udGVzdCB7IGJhY2tncm91bmQ6IHJlZDsgfQor
ZGl2LmNoYWluLnRlc3QgZGl2IHsgYmFja2dyb3VuZDogZ3JlZW47IH0KKworZGl2LmNoYWluLm91
dCB7IGJhY2tncm91bmQ6IGdyZWVuOyB9CitkaXYuY2hhaW4ub3V0IGRpdiB7IGJhY2tncm91bmQ6
IHJlZDsgZGlzcGxheTogbm9uZTsgfQorCisvKiB0ZXN0cyB0byBlbnN1cmUgalF1ZXJ5IGNhbiBk
ZXRlcm1pbmUgdGhlIG5hdGl2ZSBkaXNwbGF5IG1vZGUgb2YgZWxlbWVudHMKKyAgIHRoYXQgaGF2
ZSBiZWVuIHNldCBhcyBkaXNwbGF5OiBub25lIGluIHN0eWxlc2hlZXRzICovCitkaXYjc2hvdy10
ZXN0cyAqIHsgZGlzcGxheTogbm9uZTsgfQorCisjbm90aGlkZGVuZGl2IHsgZm9udC1zaXplOiAx
NnB4OyB9Cisjbm90aGlkZGVuZGl2Y2hpbGQuZW0geyBmb250LXNpemU6IDJlbTsgfQorI25vdGhp
ZGRlbmRpdmNoaWxkLnByY3QgeyBmb250LXNpemU6IDE1MCU7IH0KSW5kZXg6IExheW91dFRlc3Rz
L2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9kYXRhL3RleHQucGhwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9kYXRhL3RleHQucGhwCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L2RhdGEvdGV4dC5waHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKK0xvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0Citjb25z
ZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0CitTZWQgbG9yZW0gbGVvCitsb3JlbSBsZW8gY29uc2Vj
dGV0dWVyIGFkaXBpc2NpbmcgZWxpdAorU2VkIGxvcmVtIGxlbworcmhvbmN1cyBzaXQgYW1ldAor
ZWxlbWVudHVtIGF0CitiaWJlbmR1bSBhdCwgZXJvcworQ3JhcyBhdCBtaSBldCB0b3J0b3IgZWdl
c3RhcyB2ZXN0aWJ1bHVtCitzZWQgQ3JhcyBhdCBtaSB2ZXN0aWJ1bHVtCitQaGFzZWxsdXMgc2Vk
IGZlbGlzIHNpdCBhbWV0CitvcmNpIGRhcGlidXMgc2VtcGVyLgpJbmRleDogTGF5b3V0VGVzdHMv
anF1ZXJ5L3Jlc291cmNlcy90ZXN0L2RhdGEvdWEudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9kYXRhL3VhLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9kYXRhL3VhLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwyNzIgQEAKK21zaWUJNi4wCU1vemlsbGEvNC4wIChjb21wYXRpYmxlOyBNU0lF
IDYuMDsgV2luZG93cyA5ODsgV2luIDl4IDQuOTA7IGh0dHA6Ly93d3cuQWJvbGltYmEuZGUpCitt
c2llCTYuMAlNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA2LjA7IFdpbmRvd3MgTlQgNS4x
OyBTVjE7IEp5eG9Ub29sYmFyMS4wOyBodHRwOi8vd3d3LkFib2xpbWJhLmRlOyAuTkVUIENMUiAy
LjAuNTA3Mjc7IC5ORVQgQ0xSIDMuMC4wNDUwNi42NDg7IC5ORVQgQ0xSIDMuNS4yMTAyMjsgLk5F
VCBDTFIgMS4xLjQzMjIpCisJMAlNb3ppbGxhLzUuMCAoY29tcGF0aWJsZTsgQUJyb3dzZSAwLjQ7
IFN5bGxhYmxlKQord2Via2l0CTQyMAlNb3ppbGxhLzUuMCAoY29tcGF0aWJsZTsgVTsgQUJyb3dz
ZSAwLjY7IFN5bGxhYmxlKSBBcHBsZVdlYktpdC80MjArIChLSFRNTCwgbGlrZSBHZWNrbykKK21z
aWUJNy4wCU1vemlsbGEvNC4wIChjb21wYXRpYmxlOyBNU0lFIDcuMDsgV2luZG93cyBOVCA1LjE7
IEFjb28gQnJvd3NlcjsgSW5mb1BhdGguMjsgLk5FVCBDTFIgMi4wLjUwNzI3OyBBbGV4YSBUb29s
YmFyKQorbXNpZQk2LjAJTW96aWxsYS80LjAgKGNvbXBhdGlibGU7IE1TSUUgNi4wOyBXaW5kb3dz
IE5UIDUuMTsgU1YxOyBBY29vIEJyb3dzZXI7IC5ORVQgQ0xSIDEuMS40MzIyOyAuTkVUIENMUiAy
LjAuNTA3MjcpCittc2llCTcuMAlNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA3LjA7IFdp
bmRvd3MgTlQgNi4wOyBBY29vIEJyb3dzZXI7IFNMQ0MxOyAuTkVUIENMUiAyLjAuNTA3Mjc7IE1l
ZGlhIENlbnRlciBQQyA1LjA7IC5ORVQgQ0xSIDMuMC4wNDUwNikKKwkwCWFtYXlhLzkuNTIgbGli
d3d3LzUuNC4wCisJMAlhbWF5YS8xMS4xIGxpYnd3dy81LjQuMAorCTAJQW1pZ2EtQVdlYi8zLjUu
MDcgYmV0YQorCTAJQW1pZ2FWb3lhZ2VyLzMuNC40IChNb3JwaE9TL1BQQyBuYXRpdmUpCisJMAlB
bWlnYVZveWFnZXIvMi45NSAoY29tcGF0aWJsZTsgTUM2ODB4MDsgQW1pZ2FPUykKK21zaWUJNy4w
CU1vemlsbGEvNC4wIChjb21wYXRpYmxlOyBNU0lFIDcuMDsgQU9MIDcuMDsgV2luZG93cyBOVCA1
LjE7IEZ1bldlYlByb2R1Y3RzKQorbXNpZQk2LjAJTW96aWxsYS80LjAgKGNvbXBhdGlibGU7IE1T
SUUgNi4wOyBBT0wgOC4wOyBXaW5kb3dzIE5UIDUuMTsgU1YxKQorbXNpZQk3LjAJTW96aWxsYS80
LjAgKGNvbXBhdGlibGU7IE1TSUUgNy4wOyBBT0wgOS4wOyBXaW5kb3dzIE5UIDUuMTsgLk5FVCBD
TFIgMS4xLjQzMjI7IFphbmdvIDEwLjEuMTgxLjApCittc2llCTYuMAlNb3ppbGxhLzQuMCAoY29t
cGF0aWJsZTsgTVNJRSA2LjA7IEFPTCA2LjA7IFdpbmRvd3MgTlQgNS4xKQorbXNpZQk3LjAJTW96
aWxsYS80LjAgKGNvbXBhdGlibGU7IE1TSUUgNy4wOyBBT0wgOS41OyBBT0xCdWlsZCA0MzM3LjM1
OyBXaW5kb3dzIE5UIDUuMTsgLk5FVCBDTFIgMS4xLjQzMjI7IC5ORVQgQ0xSIDIuMC41MDcyNykK
K3dlYmtpdAk1MjMuMTUJTW96aWxsYS81LjAgKFdpbmRvd3M7IFU7IFdpbmRvd3MgTlQgNS4xOyB6
aC1DTikgQXBwbGVXZWJLaXQvNTIzLjE1IChLSFRNTCwgbGlrZSBHZWNrbywgU2FmYXJpLzQxOS4z
KSBBcm9yYS8wLjMgKENoYW5nZTogMjg3IGM5ZGZiMzApCit3ZWJraXQJNTI3CU1vemlsbGEvNS4w
IChYMTE7IFU7IExpbnV4OyBlbi1VUykgQXBwbGVXZWJLaXQvNTI3KyAoS0hUTUwsIGxpa2UgR2Vj
a28sIFNhZmFyaS80MTkuMykgQXJvcmEvMC42Cit3ZWJraXQJNTIzLjE1CU1vemlsbGEvNS4wIChY
MTE7IFU7IExpbnV4OyBDIC0pIEFwcGxlV2ViS2l0LzUyMy4xNSAoS0hUTUwsIGxpa2UgR2Vja28s
IFNhZmFyaS80MTkuMykgQXJvcmEvMC41Cittc2llCTYuMAlNb3ppbGxhLzQuMCAoY29tcGF0aWJs
ZTsgTVNJRSA2LjA7IFdpbmRvd3MgTlQgNS4xOyBBdmFudCBCcm93c2VyOyBBdmFudCBCcm93c2Vy
OyAuTkVUIENMUiAxLjEuNDMyMjsgLk5FVCBDTFIgMi4wLjUwNzI3OyBJbmZvUGF0aC4xKQorCTAJ
QXZhbnQgQnJvd3NlciAoaHR0cDovL3d3dy5hdmFudGJyb3dzZXIuY29tKQorbXNpZQk2LjAJTW96
aWxsYS80LjAgKGNvbXBhdGlibGU7IE1TSUUgNi4wOyBXaW5kb3dzIE5UIDUuMTsgU1YxOyBKeXhv
VG9vbGJhcjEuMDsgIEVtYmVkZGVkIFdlYiBCcm93c2VyIGZyb206IGh0dHA6Ly9ic2Fsc2EuY29t
LzsgQXZhbnQgQnJvd3NlcjsgLk5FVCBDTFIgMi4wLjUwNzI3OyAuTkVUIENMUiAzLjAuMDQ1MDYu
NjQ4OyAuTkVUIENMUiAzLjUuMjEwMjI7IC5ORVQgQ0xSIDEuMS40MzIyKQorbXNpZQk3LjAJTW96
aWxsYS80LjAgKGNvbXBhdGlibGU7IE1TSUUgNy4wOyBXaW5kb3dzIE5UIDUuMTsgR1RCNTsgTW96
aWxsYS80LjAgKGNvbXBhdGlibGU7IE1TSUUgNi4wOyBXaW5kb3dzIE5UIDUuMTsgU1YxKSA7IEF2
YW50IEJyb3dzZXIpCittb3ppbGxhCTAJTW96aWxsYS81LjAgKFdpbmRvd3M7IFU7IFdpbjl4OyBl
bjsgU3RhYmxlKSBHZWNrby8yMDAyMDkxMSBCZW9uZXgvMC44LjEtc3RhYmxlCittb3ppbGxhCTAJ
TW96aWxsYS81LjAgKFdpbmRvd3M7IFU7IFdpbk5UOyBlbjsgUHJldmlldykgR2Vja28vMjAwMjA2
MDMgQmVvbmV4LzAuOC1zdGFibGUKK21vemlsbGEJMS4wLjIJTW96aWxsYS81LjAgKFdpbmRvd3M7
IFU7IFdpbk5UOyBlbjsgcnY6MS4wLjIpIEdlY2tvLzIwMDMwMzExIEJlb25leC8wLjguMi1zdGFi
bGUKK21vemlsbGEJMS45CU1vemlsbGEvNS4wIChXaW5kb3dzOyBVOyBXaW5kb3dzIE5UIDUuMTsg
ZW4tVVM7IHJ2OjEuOSkgR2Vja28vMjAwODEyMDEyMCBCbGFja2JpcmQvMC45OTkxCit3ZWJraXQJ
NTI3CU1vemlsbGEvNS4wIChYMTE7IDc4OyBDZW50T1M7IFVTLWVuKSBBcHBsZVdlYktpdC81Mjcr
IChLSFRNTCwgbGlrZSBHZWNrbykgQm9sdC8wLjg2MiBWZXJzaW9uLzMuMCBTYWZhcmkvNTIzLjE1
Cittc2llCTYuMAlNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA2LjA7IFdpbmRvd3MgTlQg
NS4xOyBTVjE7IEJyb3d6YXIpCisJMAlCdW5qYWxsb28vMC43LjQoTmludGVuZG8gRFM7VTtlbikK
KwkwCUJ1bmphbGxvby8wLjcuNihOaW50ZW5kbyBEUztVO2VuKQorbW96aWxsYQkxLjguMS40cHJl
CU1vemlsbGEvNS4wIChNYWNpbnRvc2g7IFU7IFBQQyBNYWMgT1MgWCBNYWNoLU87IGVuOyBydjox
LjguMS40cHJlKSBHZWNrby8yMDA3MDUxMSBDYW1pbm8vMS42cHJlCittb3ppbGxhCTEuNy4yCU1v
emlsbGEvNS4wIChNYWNpbnRvc2g7IFU7IFBQQyBNYWMgT1MgWCBNYWNoLU87IGVuLVVTOyBydjox
LjcuMikgR2Vja28vMjAwNDA4MjUgQ2FtaW5vLzAuOC4xCittb3ppbGxhCTEuOC4xLjEyCU1vemls
bGEvNS4wIChNYWNpbnRvc2g7IFU7IEludGVsIE1hYyBPUyBYIE1hY2gtTzsgZW47IHJ2OjEuOC4x
LjEyKSBHZWNrby8yMDA4MDIwNiBDYW1pbm8vMS41LjUKK21vemlsbGEJMS4wLjEJTW96aWxsYS81
LjAgKE1hY2ludG9zaDsgVTsgUFBDIE1hYyBPUyBYIE1hY2gtTzsgZW4tVVM7IHJ2OjEuMC4xKSBH
ZWNrby8yMDAzMDExMSBDaGltZXJhLzAuNgorbW96aWxsYQkxLjguMC4xMAlNb3ppbGxhLzUuMCAo
TWFjaW50b3NoOyBVOyBQUEMgTWFjIE9TIFggTWFjaC1POyBlbi1VUzsgcnY6MS44LjAuMTApIEdl
Y2tvLzIwMDcwMjI4IENhbWluby8xLjAuNAord2Via2l0CTQxOC45CU1vemlsbGEvNS4wIChNYWNp
bnRvc2g7IFU7IFBQQyBNYWMgT1MgWDsgZW4pIEFwcGxlV2ViS2l0LzQxOC45IChLSFRNTCwgbGlr
ZSBHZWNrbywgU2FmYXJpKSBTYWZhcmkvNDE5LjMgQ2hlc2hpcmUvMS4wLkFMUEhBCit3ZWJraXQJ
NDE5CU1vemlsbGEvNS4wIChNYWNpbnRvc2g7IFU7IFBQQyBNYWMgT1MgWDsgZW4pIEFwcGxlV2Vi
S2l0LzQxOSAoS0hUTUwsIGxpa2UgR2Vja28sIFNhZmFyaS80MTkuMykgQ2hlc2hpcmUvMS4wLkFM
UEhBCit3ZWJraXQJNTI1LjE5CU1vemlsbGEvNS4wIChXaW5kb3dzOyBVOyBXaW5kb3dzIE5UIDUu
MTsgZW4tVVMpIEFwcGxlV2ViS2l0LzUyNS4xOSAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8x
LjAuMTU0LjM2IFNhZmFyaS81MjUuMTkKK3dlYmtpdAk1MjUuMTkJTW96aWxsYS81LjAgKFdpbmRv
d3M7IFU7IFdpbmRvd3MgTlQgNS4xOyBlbi1VUykgQXBwbGVXZWJLaXQvNTI1LjE5IChLSFRNTCwg
bGlrZSBHZWNrbykgQ2hyb21lLzEuMC4xNTQuNTMgU2FmYXJpLzUyNS4xOQorbW96aWxsYQkxLjku
MC4xMAlNb3ppbGxhLzUuMCAoV2luZG93czsgVTsgV2luZG93cyBOVCA1LjE7IGVuLVVTOyBydjox
LjkuMC4xMCkgR2Vja28vMjAwOTA0MjgxNSBGaXJlZm94LzMuMC4xMCBDb21ldEJpcmQvMy4wLjEw
Cittb3ppbGxhCTEuOS4wLjUJTW96aWxsYS81LjAgKFdpbmRvd3M7IFU7IFdpbmRvd3MgTlQgNi4w
OyBlbi1VUzsgcnY6MS45LjAuNSkgR2Vja28vMjAwOTAxMTYxNSBGaXJlZm94LzMuMC41IENvbWV0
QmlyZC8zLjAuNQorbXNpZQk3LjAJTW96aWxsYS80LjAgKGNvbXBhdGlibGU7IE1TSUUgNy4wOyBX
aW5kb3dzIE5UIDUuMTsgLk5FVCBDTFIgMS4xLjQzMjI7IC5ORVQgQ0xSIDIuMC41MDcyNzsgQ3Jh
enkgQnJvd3NlciAzLjAuMCBCZXRhMikKK21zaWUJNi4wCU1vemlsbGEvNC4wIChjb21wYXRpYmxl
OyBNU0lFIDYuMDsgV2luZG93cyBOVCA1LjE7IFNWMTsgLk5FVCBDTFIgMS4xLjQzMjI7IENyYXp5
IEJyb3dzZXIgMi4wLjEpCittc2llCTYuMAlNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA2
LjA7IFdpbmRvd3MgTlQgNS4xOyBTVjE7IENyYXp5IEJyb3dzZXIgMS4wLjU7IC5ORVQgQ0xSIDEu
MS40MzIyOyBJbmZvUGF0aC4xKQorbXNpZQk2LjAJTW96aWxsYS80LjAgKGNvbXBhdGlibGU7IE1T
SUUgNi4wOyBXaW5kb3dzIE5UIDUuMTsgRGVlcG5ldCBFeHBsb3JlciAxLjUuMDsgLk5FVCBDTFIg
MS4wLjM3MDUpCit3ZWJraXQJNTI1LjI3LjEJTW96aWxsYS81LjAgKE1hY2ludG9zaDsgVTsgSW50
ZWwgTWFjIE9TIFggMTBfNV82OyBlbi11cykgQXBwbGVXZWJLaXQvNTI1LjI3LjEgKEtIVE1MLCBs
aWtlIEdlY2tvKSBEZW1ldGVyLzEuMC45IFNhZmFyaS8xMjUKK3dlYmtpdAkzMTIuOAlNb3ppbGxh
LzUuMCAoTWFjaW50b3NoOyBVOyBQUEMgTWFjIE9TIFg7IHBsLXBsKSBBcHBsZVdlYktpdC8zMTIu
OCAoS0hUTUwsIGxpa2UgR2Vja28sIFNhZmFyaSkgRGVza0Jyb3dzZS8xLjAKKwkwCURpbGxvLzAu
OC41CisJMAlEaWxsby8yLjAKKwkwCURvY1ppbGxhLzEuMCAoV2luZG93czsgVTsgV2luTlQ0LjA7
IGVuLVVTOyBydjoxLjAuMCkgR2Vja28vMjAwMjA4MDQKKwkwCURvY1ppbGxhLzIuNyAoV2luZG93
czsgVTsgV2luZG93cyBOVCA1LjE7IGVuLVVTOyBydjoyLjcuMCkgR2Vja28vMjAwNTA3MDYgQ2lU
RUMgSW5mb3JtYXRpb24KK3dlYmtpdAk1MjcJTW96aWxsYS81LjAgKFdpbmRvd3M7IFU7IFdpbmRv
d3MgTlQgNS4xOyBjcy1DWikgQXBwbGVXZWJLaXQvNTI3KyAoS0hUTUwsIGxpa2UgR2Vja28sIFNh
ZmFyaS80MTkuMykgIERvb2JsZQorCTAJRG9yaXMvMS4xNSBbZW5dIChTeW1iaWFuKQorCTAJZWRi
cm93c2UvMS41LjE3LTIKKwkwCWVkYnJvd3NlLzIuMi4xMAorCTAJZWRicm93c2UvMy4xLjItMQor
CTAJRUxpbmtzLzAuMTMuR0lUICh0ZXh0bW9kZTsgTGludXggMi42LjIyLTItNjg2IGk2ODY7IDE0
OHg2OC0zKQorCTAJRUxpbmtzLzAuOS4zICh0ZXh0bW9kZTsgTGludXggMi42LjExIGk2ODY7IDc5
eDI0KQorCTAJRW5pZ21hIEJyb3dzZXIKK21vemlsbGEJMS44LjEuMTIJTW96aWxsYS81LjAgKFgx
MTsgVTsgTGludXggaTY4NjsgZW47IHJ2OjEuOC4xLjEyKSBHZWNrby8yMDA4MDIwOCAoRGViaWFu
LTEuOC4xLjEyLTIpIEVwaXBoYW55LzIuMjAKK21vemlsbGEJMS45LjAuMTIJTW96aWxsYS81LjAg
KFgxMTsgVTsgTGludXggeDg2XzY0OyBlbjsgcnY6MS45LjAuMTIpIEdlY2tvLzIwMDgwNTI4IEZl
ZG9yYS8yLjI0LjMtOC5mYzEwIEVwaXBoYW55LzIuMjIgRmlyZWZveC8zLjAKK21vemlsbGEJMS43
LjMJTW96aWxsYS81LjAgKFgxMTsgVTsgTGludXggaTY4NjsgZW4tVVM7IHJ2OjEuNy4zKSBHZWNr
by8yMDA0MTAwNyBFcGlwaGFueS8xLjQuNworbW96aWxsYQkxLjUJTW96aWxsYS81LjAgKFdpbmRv
d3M7IFU7IFdpbjk4OyBlbi1VUzsgcnY6MS41KSBHZWNrby8yMDAzMTAwNyBGaXJlYmlyZC8wLjcK
K21vemlsbGEJMS41CU1vemlsbGEvNS4wIChXaW5kb3dzOyBVOyBXaW45NTsgZW4tVVM7IHJ2OjEu
NSkgR2Vja28vMjAwMzEwMDcgRmlyZWJpcmQvMC43Cittb3ppbGxhCTEuOC4wLjMJTW96aWxsYS81
LjAgKFdpbmRvd3M7IFU7IFdpbmRvd3MgTlQgNS4wOyBlcy1FUzsgcnY6MS44LjAuMykgR2Vja28v
MjAwNjA0MjYgRmlyZWZveC8xLjUuMC4zCittb3ppbGxhCTEuOS4xYjIJTW96aWxsYS81LjAgKE1h
Y2ludG9zaDsgVTsgSW50ZWwgTWFjIE9TIFggMTAuNTsga287IHJ2OjEuOS4xYjIpIEdlY2tvLzIw
MDgxMjAxIEZpcmVmb3gvMy4xYjIKK21vemlsbGEJMS45LjAuOAlNb3ppbGxhLzUuMCAoV2luZG93
czsgVTsgV2luZG93cyBOVCA1LjE7IGNzOyBydjoxLjkuMC44KSBHZWNrby8yMDA5MDMyNjA5IEZp
cmVmb3gvMy4wLjgKK21vemlsbGEJMS43LjkJTW96aWxsYS81LjAgKFdpbmRvd3M7IFU7IFdpbk5U
NC4wOyBlbi1VUzsgcnY6MS43LjkpIEdlY2tvLzIwMDUwNzExIEZpcmVmb3gvMS4wLjUKK21vemls
bGEJMS45YjUJTW96aWxsYS81LjAgKFgxMTsgVTsgU3VuT1Mgc3VuNHU7IGVuLVVTOyBydjoxLjli
NSkgR2Vja28vMjAwODAzMjYyMCBGaXJlZm94LzMuMGI1Cittb3ppbGxhCTEuOC4wLjUJTW96aWxs
YS81LjAgKFgxMTsgVTsgT3BlbkJTRCBpMzg2OyBlbi1VUzsgcnY6MS44LjAuNSkgR2Vja28vMjAw
NjA4MTkgRmlyZWZveC8xLjUuMC41Cittb3ppbGxhCTEuOS4xYjMJTW96aWxsYS81LjAgKE1hY2lu
dG9zaDsgVTsgSW50ZWwgTWFjIE9TIFggMTAuNTsgZW4tVVM7IHJ2OjEuOS4xYjMpIEdlY2tvLzIw
MDkwMzA1IEZpcmVmb3gvMy4xYjMgR1RCNQorbW96aWxsYQkxLjguMS4xMglNb3ppbGxhLzUuMCAo
WDExOyBVOyBMaW51eCB4ODZfNjQ7IGVuLVVTOyBydjoxLjguMS4xMikgR2Vja28vMjAwODAyMTQg
RmlyZWZveC8yLjAuMC4xMgorbW96aWxsYQkxLjguMS45CU1vemlsbGEvNS4wIChYMTE7IFU7IExp
bnV4IGk2ODY7IGVuLVVTOyBydjoxLjguMS45KSBHZWNrby8yMDA3MTExMyBCb25FY2hvLzIuMC4w
LjkKK21vemlsbGEJMS44LjEJTW96aWxsYS81LjAgKFgxMTsgVTsgTGludXggaTY4NjsgZW4tVVM7
IHJ2OjEuOC4xKSBHZWNrby8yMDA2MTAyNiBCb25FY2hvLzIuMAorbW96aWxsYQkxLjguMS4yMXBy
ZQlNb3ppbGxhLzUuMCAoQmVPUzsgVTsgSGFpa3UgQmVQQzsgZW4tVVM7IHJ2OjEuOC4xLjIxcHJl
KSBHZWNrby8yMDA5MDIyNyBCb25FY2hvLzIuMC4wLjIxcHJlCittb3ppbGxhCTEuOS4wLjgJTW96
aWxsYS81LjAgKFgxMTsgVTsgTGludXggaTY4NjsgZW4tVVM7IHJ2OjEuOS4wLjgpIEdlY2tvLzIw
MDkwMzMwMTcgR3JhblBhcmFkaXNvLzMuMC44Cittb3ppbGxhCTEuOS4yYTJwcmUJTW96aWxsYS81
LjAgKFdpbmRvd3M7IFU7IFdpbmRvd3MgTlQgNi4xOyBjczsgcnY6MS45LjJhMnByZSkgR2Vja28v
MjAwOTA5MTIgTmFtb3Jva2EvMy42YTJwcmUgKC5ORVQgQ0xSIDMuNS4zMDcyOSkKK21vemlsbGEJ
MS45LjJhMnByZQlNb3ppbGxhLzUuMCAoWDExOyBVOyBMaW51eCB4ODZfNjQ7IGVuLVVTOyBydjox
LjkuMmEycHJlKSBHZWNrby8yMDA5MDkwMSBVYnVudHUvOS4xMCAoa2FybWljKSBOYW1vcm9rYS8z
LjZhMnByZQorbW96aWxsYQkxLjkuMmExCU1vemlsbGEvNS4wIChXaW5kb3dzOyBVOyBXaW5kb3dz
IE5UIDYuMTsgZW4tVVM7IHJ2OjEuOS4yYTEpIEdlY2tvLzIwMDkwODA2IE5hbW9yb2thLzMuNmEx
Cittb3ppbGxhCTEuOS4xYjNwcmUJTW96aWxsYS81LjAgKFgxMTsgVTsgTGludXggeDg2XzY0OyBl
bi1VUzsgcnY6MS45LjFiM3ByZSkgR2Vja28vMjAwOTAxMDkgU2hpcmV0b2tvLzMuMWIzcHJlCitt
b3ppbGxhCTEuOS4xYjRwcmUJTW96aWxsYS81LjAgKFdpbmRvd3M7IFU7IFdpbmRvd3MgTlQgNi4w
OyBlbi1VUzsgcnY6MS45LjFiNHByZSkgR2Vja28vMjAwOTAzMTEgU2hpcmV0b2tvLzMuMWI0cHJl
Cittb3ppbGxhCTEuOC4wLjEJTW96aWxsYS81LjAgKE1hY2ludG9zaDsgVTsgUFBDIE1hYyBPUyBY
IE1hY2gtTzsgZW4tVVM7IHJ2OjEuOC4wLjEpIEdlY2tvLzIwMDYwMzE0IEZsb2NrLzAuNS4xMy4y
Cittb3ppbGxhCTEuOS4wLjIJTW96aWxsYS81LjAgKFdpbmRvd3M7IFU7IFdpbmRvd3MgTlQgNi4w
OyBlbi1VUzsgcnY6MS45LjAuMikgR2Vja28vMjAwODA5MjEyMiBGaXJlZm94LzMuMC4yIEZsb2Nr
LzIuMGIzCit3ZWJraXQJNTI1LjEzCU1vemlsbGEvNS4wIChXaW5kb3dzOyBVOyBXaW5kb3dzIE5U
IDUuMTsgZW4tVVMpIEFwcGxlV2ViS2l0LzUyNS4xMyAoS0hUTUwsIGxpa2UgR2Vja28pIEZsdWlk
LzAuOS40IFNhZmFyaS81MjUuMTMKK21vemlsbGEJMS43LjEyCU1vemlsbGEvNS4wIChYMTE7IFU7
IExpbnV4IGk2ODY7IGVuLVVTOyBydjoxLjcuMTIpIEdlY2tvLzIwMDUwOTI5IEdhbGVvbi8xLjMu
MjEKK21vemlsbGEJMS45LjAuOAlNb3ppbGxhLzUuMCAoWDExOyBVOyBMaW51eCBpNjg2OyBlbi1V
UzsgcnY6MS45LjAuOCkgR2Vja28vMjAwOTAzMjcgR2FsZW9uLzIuMC43Cittb3ppbGxhCTEuOS4x
LjUJTW96aWxsYS81LjAgKFdpbmRvd3M7IFU7IFdpbmRvd3MgTlQgNi4xOyBlbi1VUzsgcnY6MS45
LjEuNSkgR2Vja28vMjAwOTExMDUgRmlyZWZveC8zLjUuNSBjb21wYXQgR2xvYmFsTW9qby8xLjUu
NSBHbG9iYWxNb2pvRXh0LzEuNQorbXNpZQk2LjAJTW96aWxsYS80LjAgKGNvbXBhdGlibGU7IE1T
SUUgNi4wOyBXaW5kb3dzIE5UIDUuMDsgR3JlZW5Ccm93c2VyKQorbXNpZQk3LjAJTW96aWxsYS80
LjAgKGNvbXBhdGlibGU7IE1TSUUgNy4wOyBXaW5kb3dzIE5UIDUuMTsgLk5FVCBDTFIgMi4wLjUw
NzI3OyBHcmVlbkJyb3dzZXIpCittc2llCTcuMAlNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJ
RSA3LjA7IFdpbmRvd3MgTlQgNS4xOyAuTkVUIENMUiAxLjEuNDMyMjsgSW5mb1BhdGguMTsgLk5F
VCBDTFIgMi4wLjUwNzI3OyAuTkVUIENMUiAzLjAuMDQ1MDYuMzA7IEdyZWVuQnJvd3NlcikKKwkw
CUhvdEphdmEvMS4xLjIgRkNTCittb3ppbGxhCTAJTW96aWxsYS8zLjAgKHg4NiBbY3NdIFdpbmRv
d3MgTlQgNS4xOyBTdW4pCittb3ppbGxhCTEuOC4wLjMJTW96aWxsYS81LjEgKFgxMTsgVTsgTGlu
dXggaTY4NjsgZW4tVVM7IHJ2OjEuOC4wLjMpIEdlY2tvLzIwMDYwNDI1IFNVU0UvMS41LjAuMy03
IEh2My9hbHBoYQorbXNpZQk3LjAJTW96aWxsYS80LjAgKGNvbXBhdGlibGU7IE1TSUUgNy4wOyBX
aW5kb3dzIE5UIDUuMTsgVHJpZGVudC80LjA7IFNJTUJBUj17Q0ZCRkRBRUEtRjIxRS00RDZFLUE5
QjAtRTEwMEE2OUI4NjBGfTsgSHlkcmEgQnJvd3NlcjsgLk5FVCBDTFIgMi4wLjUwNzI3OyAuTkVU
IENMUiAxLjEuNDMyMjsgLk5FVCBDTFIgMy4wLjA0NTA2LjMwKQorbXNpZQk2LjAJTW96aWxsYS80
LjAgKGNvbXBhdGlibGU7IE1TSUUgNi4wOyBXaW5kb3dzIE5UIDUuMTsgU1YxOyBIeWRyYSBCcm93
c2VyOyAuTkVUIENMUiAyLjAuNTA3Mjc7IC5ORVQgQ0xSIDMuMC40NTA2LjIxNTI7IC5ORVQgQ0xS
IDMuNS4zMDcyOSkKKwkwCUlCcm93c2UvMi4zIChBbWlnYU9TIDMuOSkKKwkwCU1vemlsbGEvNS4w
IChjb21wYXRpYmxlOyBJQnJvd3NlIDMuMDsgQW1pZ2FPUzQuMCkKKwkwCWlDYWIvNC4wIChNYWNp
bnRvc2g7IFU7IEludGVsIE1hYyBPUyBYKQorCTAJTW96aWxsYS80LjUgKGNvbXBhdGlibGU7IGlD
YWIgMi45LjE7IE1hY2ludG9zaDsgVTsgUFBDKQorCTAJaUNhYi8zLjAuMiAoTWFjaW50b3NoOyBV
OyBQUEMgTWFjIE9TIFgpCisJMAlJQ0UgQnJvd3Nlci92NV80XzMgKEphdmEgMS40LjI7IFdpbmRv
d3MgWFAgNS4xIHg4NikKK21vemlsbGEJMAlNb3ppbGxhLzUuMCAoSmF2YSAxLjYuMF8wMTsgV2lu
ZG93cyBYUCA1LjEgeDg2OyBlbikgSUNFYnJvd3Nlci92Nl8xXzIKKwkwCUlDRSBCcm93c2VyLzUu
MDUgKEphdmEgMS40LjA7IFdpbmRvd3MgMjAwMCA1LjAgeDg2KQorbW96aWxsYQkxLjguMS45CU1v
emlsbGEvNS4wIChYMTE7IFU7IExpbnV4IGk2ODY7IGVuLVVTOyBydjoxLjguMS45KSBHZWNrby8y
MDA3MTAzMCBJY2VhcGUvMS4xLjYgKERlYmlhbi0xLjEuNi0zKQorbW96aWxsYQkxLjguMS44CU1v
emlsbGEvNS4wIChYMTE7IFU7IExpbnV4IHg4Nl82NDsgZW4tVVM7IHJ2OjEuOC4xLjgpIEdlY2tv
LzIwMDcxMDA4IEljZWFwZS8xLjEuNSAoVWJ1bnR1LTEuMS41LTF1YnVudHUwLjcuMTApCittb3pp
bGxhCTEuOS4wLjMJTW96aWxsYS81LjAgKFgxMTsgVTsgTGludXggaTY4NjsgZW4tVVM7IHJ2OjEu
OS4wLjMpIEdlY2tvLzIwMDgwOTI5MjEgSWNlQ2F0LzMuMC4zLWcxCittb3ppbGxhCTEuOC4xLjEx
CU1vemlsbGEvNS4wIChYMTE7IFU7IExpbnV4IGk2ODY7IGVuLVVTOyBydjoxLjguMS4xMSkgR2Vj
a28vMjAwNzEyMDMgSWNlQ2F0LzIuMC4wLjExLWcxCittb3ppbGxhCTEuOS4wLjUJTW96aWxsYS81
LjAgKFgxMTsgVTsgTGludXggaTY4NjsgZGU7IHJ2OjEuOS4wLjUpIEdlY2tvLzIwMDgxMjIwMTEg
SWNld2Vhc2VsLzMuMC41IChEZWJpYW4tMy4wLjUtMSkKK21vemlsbGEJMS44LjEuMQlNb3ppbGxh
LzUuMCAoWDExOyBVOyBMaW51eCB4ODZfNjQ7IGVuLVVTOyBydjoxLjguMS4xKSBHZWNrby8yMDA2
MTIwNSBJY2V3ZWFzZWwvMi4wLjAuMSAoRGViaWFuLTIuMC4wLjErZGZzZy00KQorbW96aWxsYQkx
LjkuMC41CU1vemlsbGEvNS4wIChYMTE7IFU7IExpbnV4IGk2ODY7IGl0OyBydjoxLjkuMC41KSBH
ZWNrby8yMDA4MTIyMDExIEljZXdlYXNlbC8zLjAuNSAoRGViaWFuLTMuMC41LTEpCittc2llCTQu
MAlNb3ppbGxhLzIuMCAoY29tcGF0aWJsZTsgTVNJRSA0LjA7IFdpbmRvd3MgOTgpCittc2llCTYu
MAlNb3ppbGxhLzQuMCAoV2luZG93czsgTVNJRSA2LjA7IFdpbmRvd3MgTlQgNS4xOyBTVjE7IC5O
RVQgQ0xSIDIuMC41MDcyNykKK21zaWUJNy4wCU1vemlsbGEvNC4wIChNb3ppbGxhLzQuMDsgTVNJ
RSA3LjA7IFdpbmRvd3MgTlQgNS4xOyBGRE07IFNWMTsgLk5FVCBDTFIgMy4wLjA0NTA2LjMwKQor
bXNpZQk1LjAxCU1vemlsbGEvNC4wIChjb21wYXRpYmxlOyBNU0lFIDUuMDE7IFdpbmRvd3MgTlQp
Cittc2llCTguMAlNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA4LjA7IFdpbmRvd3MgTlQg
Ni4wOyBUcmlkZW50LzQuMDsgU0xDQzE7IC5ORVQgQ0xSIDIuMC41MDcyNzsgLk5FVCBDTFIgMS4x
LjQzMjI7IEluZm9QYXRoLjI7IC5ORVQgQ0xSIDMuNS4yMTAyMjsgLk5FVCBDTFIgMy41LjMwNzI5
OyBNUy1SVEMgTE0gODsgT2ZmaWNlTGl2ZUNvbm5lY3Rvci4xLjQ7IE9mZmljZUxpdmVQYXRjaC4x
LjM7IC5ORVQgQ0xSIDMuMC4zMDcyOSkKK21zaWUJNi4wCU1vemlsbGEvNC4wIChjb21wYXRpYmxl
OyBNU0lFIDYuMDsgV2luZG93cyBOVCA1LjE7IFNWMTsgLk5FVCBDTFIgMS4wLjM3MDU7IC5ORVQg
Q0xSIDEuMS40MzIyOyBNZWRpYSBDZW50ZXIgUEMgNC4wOyAuTkVUIENMUiAyLjAuNTA3MjcpCitt
c2llCTUuMGIxCU1vemlsbGEvNC4wIChjb21wYXRpYmxlOyBNU0lFIDUuMGIxOyBNYWNfUG93ZXJQ
QykKK21zaWUJNS4wCU1vemlsbGEvNC4wIChjb21wYXRpYmxlOyBNU0lFIDUuMDsgV2luZG93cyBO
VDspCittc2llCTUuMjMJTW96aWxsYS80LjAgKGNvbXBhdGlibGU7IE1TSUUgNS4yMzsgTWFjX1Bv
d2VyUEMpCittc2llCTYuMAlNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA2LjA7IFdpbmRv
d3MgTlQgNS4xOyBTVjE7IEdUQjY7IEFudC5jb20gVG9vbGJhciAxLjY7IE1TSUVDcmF3bGVyKQor
bXNpZQk4LjAJTW96aWxsYS80LjAgKGNvbXBhdGlibGU7IE1TSUUgOC4wOyBXaW5kb3dzIE5UIDYu
MDsgVHJpZGVudC80LjA7IEdUQjU7IFNMQ0MxOyAuTkVUIENMUiAyLjAuNTA3Mjc7IE1lZGlhIENl
bnRlciBQQyA1LjA7IC5ORVQgQ0xSIDMuMC4wNDUwNjsgSW5mb1BhdGguMjsgT2ZmaWNlTGl2ZUNv
bm5lY3Rvci4xLjM7IE9mZmljZUxpdmVQYXRjaC4wLjApCittc2llCTcuMAlNb3ppbGxhLzQuMCAo
Y29tcGF0aWJsZTsgTVNJRSA3LjA7IFdpbmRvd3MgTlQgNi4wOyBUcmlkZW50LzQuMDsgU0xDQzE7
IC5ORVQgQ0xSIDIuMC41MDcyNzsgLk5FVCBDTFIgMS4xLjQzMjI7IEluZm9QYXRoLjI7IC5ORVQg
Q0xSIDMuNS4yMTAyMjsgLk5FVCBDTFIgMy41LjMwNzI5OyBNUy1SVEMgTE0gODsgT2ZmaWNlTGl2
ZUNvbm5lY3Rvci4xLjQ7IE9mZmljZUxpdmVQYXRjaC4xLjM7IC5ORVQgQ0xSIDMuMC4zMDcyOSkK
K21zaWUJNy4wCU1vemlsbGEvNC4wIChjb21wYXRpYmxlOyBNU0lFIDcuMDsgV2luZG93cyBOVCA2
LjE7IFdPVzY0OyBUcmlkZW50LzQuMDsgU0xDQzI7IC5ORVQgQ0xSIDIuMC41MDcyNzsgSW5mb1Bh
dGguMikKK21zaWUJNi4wCU1vemlsbGEvNC4wIChjb21wYXRpYmxlOyBNU0lFIDYuMDsgV2luZG93
cyBOVCA1LjE7IGlSaWRlciAyLjIxLjExMDg7IEZETSkKK3dlYmtpdAk1MjguNQlNb3ppbGxhLzUu
MCAoV2luZG93czsgVTsgV2luZG93cyBOVCA2LjA7IGVuLVVTKSBBcHBsZVdlYktpdC81MjguNSAo
S0hUTUwsIGxpa2UgR2Vja28pIElyb24vMC40LjE1NS4wIFNhZmFyaS81MjguNQord2Via2l0CTUy
OC43CU1vemlsbGEvNS4wIChXaW5kb3dzOyBVOyBXaW5kb3dzIE5UIDYuMTsgZW4tVVMpIEFwcGxl
V2ViS2l0LzUyOC43IChLSFRNTCwgbGlrZSBHZWNrbykgSXJvbi8xLjAuMTU1LjAgU2FmYXJpLzUy
OC43Cit3ZWJraXQJNTI1LjE5CU1vemlsbGEvNS4wIChXaW5kb3dzOyBVOyBXaW5kb3dzIE5UIDUu
MTsgZW4tVVMpIEFwcGxlV2ViS2l0LzUyNS4xOSAoS0hUTUwsIGxpa2UgR2Vja28pIElyb24vMC4y
LjE1Mi4wIFNhZmFyaS8xMjA4MTY3Mi41MjUKK3dlYmtpdAk1MzEuMAlNb3ppbGxhLzUuMCAoV2lu
ZG93czsgVTsgV2luZG93cyBOVCA1LjE7IGVuLVVTKSBBcHBsZVdlYktpdC81MzEuMCAoS0hUTUws
IGxpa2UgR2Vja28pIElyb24vMy4wLjE4OS4wIFNhZmFyaS81MzEuMAorbW96aWxsYQkxLjguMS4x
OQlNb3ppbGxhLzUuMCAoV2luZG93czsgVTsgV2luZG93cyBOVCA2LjE7IGVuLVVTOyBydjoxLjgu
MS4xOSkgR2Vja28vMjAwODEyMTcgSy1NZWxlb24vMS41LjIKK21vemlsbGEJMS44LjEuMjEJTW96
aWxsYS81LjAgKFdpbmRvd3M7IFU7IFdpbmRvd3MgTlQgNS4xOyBlbi1VUzsgcnY6MS44LjEuMjEp
IEdlY2tvLzIwMDkwMzMxIEstTWVsZW9uLzEuNS4zCittb3ppbGxhCTEuOC4wLjUJTW96aWxsYS81
LjAgKFdpbmRvd3M7IFU7IFdpbmRvd3MgTlQgNS4xOyBlbi1VUzsgcnY6MS44LjAuNSkgR2Vja28v
MjAwNjA3MDYgSy1NZWxlb24vMS4wCittb3ppbGxhCTEuOC4xLjIxCU1vemlsbGEvNS4wIChXaW5k
b3dzOyBVOyBXaW5kb3dzIE5UIDUuMDsgZW4tVVM7IHJ2OjEuOC4xLjIxKSBHZWNrby8yMDA5MDMz
MSBLLU1lbGVvbi8xLjUuMworbW96aWxsYQkxLjguMC42CU1vemlsbGEvNS4wIChXaW5kb3dzOyBV
OyBXaW5kb3dzIE5UIDUuMTsgZW4tVVM7IHJ2OjEuOC4wLjYpIEdlY2tvLzIwMDYwNzMxIEstTmlu
amEvMi4wLjIKK21vemlsbGEJMS44LjEuNHByZQlNb3ppbGxhLzUuMCAoV2luZG93czsgVTsgV2lu
ZG93cyBOVCA1LjE7IGVuLVVTOyBydjoxLjguMS40cHJlKSBHZWNrby8yMDA3MDQwNCBLLU5pbmph
LzIuMS4zCittb3ppbGxhCTEuOC4xLjJwcmUJTW96aWxsYS81LjAgKFdpbmRvd3M7IFU7IFdpbmRv
d3MgTlQgNS4xOyBlbi1VUzsgcnY6MS44LjEuMnByZSkgR2Vja28vMjAwNzAyMTUgSy1OaW5qYS8y
LjEuMQorbW96aWxsYQkxLjkJTW96aWxsYS81LjAgKFdpbmRvd3M7IFU7IFdpbmRvd3MgTlQgNS4x
OyB6aC1DTjsgcnY6MS45KSBHZWNrby8yMDA4MDcwNSBGaXJlZm94LzMuMCBLYXBpa28vMy4wCitt
b3ppbGxhCTAJTW96aWxsYS81LjAgKFgxMTsgTGludXggaTY4NjsgVTspIEdlY2tvLzIwMDcwMzIy
IEthemVoYWthc2UvMC40LjUKK21vemlsbGEJMS45LjAuOAlNb3ppbGxhLzUuMCAoWDExOyBVOyBM
aW51eCBpNjg2OyBlbi1VUzsgcnY6MS45LjAuOCkgR2Vja28gRmVkb3JhLzEuOS4wLjgtMS5mYzEw
IEthemVoYWthc2UvMC41LjYKK21zaWUJNi4wCU1vemlsbGEvNC4wIChjb21wYXRpYmxlOyBNU0lF
IDYuMDsgV2luZG93cyBOVCA1LjE7IEtLbWFuMi4wKQorbXNpZQk2LjAJTW96aWxsYS80LjAgKGNv
bXBhdGlibGU7IE1TSUUgNi4wOyBXaW5kb3dzIE5UIDUuMTsgU1YxOyBLS01BTjMuMikKK21zaWUJ
Ni4wCU1vemlsbGEvNC4wIChjb21wYXRpYmxlOyBNU0lFIDYuMDsgV2luZG93cyBOVCA1LjE7IEtL
bWFuMy4wKQorCTAJTW96aWxsYS81LjAgKGNvbXBhdGlibGU7IEtvbnF1ZXJvci8zLjEtcmM1OyBp
Njg2IExpbnV4OyAyMDAyMDcxMikKKwkwCU1vemlsbGEvNS4wIChjb21wYXRpYmxlOyBLb25xdWVy
b3IvNC4zOyBXaW5kb3dzKSBLSFRNTC80LjMuMCAobGlrZSBHZWNrbykKKwkwCU1vemlsbGEvNS4w
IChjb21wYXRpYmxlOyBLb25xdWVyb3IvMi4yLjE7IExpbnV4KQorCTAJTW96aWxsYS81LjAgKGNv
bXBhdGlibGU7IEtvbnF1ZXJvci8zLjU7IFN1bk9TKQorCTAJTW96aWxsYS81LjAgKGNvbXBhdGli
bGU7IEtvbnF1ZXJvci80LjE7IE9wZW5CU0QpIEtIVE1MLzQuMS40IChsaWtlIEdlY2tvKQorCTAJ
TGlua3MgKDAuOTY7IExpbnV4IDIuNC4yMC0xOC43IGk1ODYpCisJMAlMaW5rcyAoMC45ODsgV2lu
MzI7IDgweDI1KQorCTAJTGlua3MgKDIuMXByZTE4OyBMaW51eCAyLjQuMzEgaTY4NjsgMTAweDM3
KQorCTAJTGlua3MgKDIuMTsgTGludXggMi42LjE4LWdlbnRvby1yNiB4ODZfNjQ7IDgweDI0KQor
CTAJTGlua3MgKDIuMjsgTGludXggMi42LjI1LWdlbnRvby1yOSBzcGFyYzY0OyAxNjZ4NTIpCitt
c2llCTYuMAlNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA2LjA7IExpbnV4IDIuNi4yNi0x
LWFtZDY0KSBMb2JvLzAuOTguMworbXNpZQk2LjAJTW96aWxsYS80LjAgKGNvbXBhdGlibGU7IE1T
SUUgNi4wOyBXaW5kb3dzIFhQIDUuMSkgTG9iby8wLjk4LjQKKwkwCU1vemlsbGEvNC4wIChjb21w
YXRpYmxlOyBMb3R1cy1Ob3Rlcy81LjA7IFdpbmRvd3MtTlQpCisJMAlNb3ppbGxhLzQuMCAoY29t
cGF0aWJsZTsgTG90dXMtTm90ZXMvNi4wOyBXaW5kb3dzLU5UKQorbXNpZQk2LjAJTW96aWxsYS80
LjAgKGNvbXBhdGlibGU7IE1TSUUgNi4wOyBXaW5kb3dzIE5UIDUuMDsgLk5FVCBDTFIgMS4xLjQz
MjI7IEx1bmFzY2FwZSAyLjEuMykKK21vemlsbGEJMS45LjFiM3ByZQlNb3ppbGxhLzUuMCAoV2lu
ZG93czsgVTsgV2luZG93cyBOVCA1LjE7IGVuLVVTOyBydjoxLjkuMWIzcHJlKSBHZWNrby8yMDA4
IEx1bmFzY2FwZS80LjkuOS45OAorbXNpZQk2LjAJTW96aWxsYS80LjAgKGNvbXBhdGlibGU7IE1T
SUUgNi4wOyBXaW5kb3dzIE5UIDUuMTsgU1YxOyBKeXhvVG9vbGJhcjEuMDsgLk5FVCBDTFIgMi4w
LjUwNzI3OyAuTkVUIENMUiAzLjAuMDQ1MDYuNjQ4OyAuTkVUIENMUiAzLjUuMjEwMjI7IC5ORVQg
Q0xSIDEuMS40MzIyOyAuTkVUIENMUiAzLjAuNDUwNi4yMTUyOyAuTkVUIENMUiAzLjUuMzA3Mjk7
IEx1bmFzY2FwZSA1LjEuNC41KQord2Via2l0CTUyOAlNb3ppbGxhLzUuMCAoV2luZG93czsgVTsg
V2luZG93cyBOVCA1LjE7IGVuLVVTKSBBcHBsZVdlYktpdC81MjgrIChLSFRNTCwgbGlrZSBHZWNr
bywgU2FmYXJpLzUyOC4wKSBMdW5hc2NhcGUvNS4wLjIuMAorbW96aWxsYQkxLjkuMS4yCU1vemls
bGEvNS4wIChXaW5kb3dzOyBVOyBXaW5kb3dzIE5UIDUuMTsgZW4tVVM7IHJ2OjEuOS4xLjIpIEdl
Y2tvLzIwMDkwODA0IEZpcmVmb3gvMy41LjIgTHVuYXNjYXBlLzUuMS40LjUKKwkwCUx5bngvMi44
LjZyZWwuNCBsaWJ3d3ctRk0vMi4xNCBTU0wtTU0vMS40LjEgR05VVExTLzEuNi4zCisJMAlMeW54
LzIuOC4zZGV2LjYgbGlid3d3LUZNLzIuMTQKKwkwCUx5bngvMi44LjVkZXYuMTYgbGlid3d3LUZN
LzIuMTQgU1NMLU1NLzEuNC4xIE9wZW5TU0wvMC45LjdhCittb3ppbGxhCTEuNy4xMglNb3ppbGxh
LzUuMCAoV2luZG93czsgVTsgV2luZG93cyBOVCA1LjE7IGVuLVVTOyBydjoxLjcuMTIpIEdlY2tv
LzIwMDUxMDAxIEZpcmVmb3gvMS4wLjcgTWFkZm94LzAuMy4ydTMKK3dlYmtpdAk1MzAuNglNb3pp
bGxhLzUuMCAoV2luZG93czsgVTsgV2luZG93cyBOVCA1LjE7IGVuLVVTKSBBcHBsZVdlYktpdC81
MzAuNiAoS0hUTUwsIGxpa2UgR2Vja28pIE1heHRob24vMy4wIFNhZmFyaS81MzAuNgorbXNpZQk3
LjAJTW96aWxsYS80LjAgKGNvbXBhdGlibGU7IE1TSUUgNy4wOyBXaW5kb3dzIE5UIDUuMTsgU1Yx
OyBNYXh0aG9uOyAuTkVUIENMUiAxLjEuNDMyMikKK21zaWUJNi4wCU1vemlsbGEvNC4wIChjb21w
YXRpYmxlOyBNU0lFIDYuMDsgV2luZG93cyBOVCA1LjE7IFNWMTsgTXlJRTIpCittc2llCTguMAlN
b3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA4LjA7IFdpbmRvd3MgTlQgNS4xOyBUcmlkZW50
LzQuMDsgLk5FVCBDTFIgMi4wLjUwNzI3OyBNQVhUSE9OIDIuMCkKKwkwCU1pZG9yaS8wLjEuNwor
d2Via2l0CTUzMglNaWRvcmkvMC4xLjUgKFgxMTsgTGludXg7IFU7IGVuLWdiKSBXZWJLaXQvNTMy
KworbW96aWxsYQkxLjAuMQlNb3ppbGxhLzUuMCAoWDExOyBVOyBMaW51eCBpNjg2OyBlbi1VUzsg
cnY6MS4wLjEpIEdlY2tvLzIwMDIwOTE5Cittb3ppbGxhCTEuNy4xMglNb3ppbGxhLzUuMCAoV2lu
ZG93czsgVTsgV2luZG93cyBOVCA1LjA7IGl0LUlUOyBydjoxLjcuMTIpIEdlY2tvLzIwMDUwOTE1
Cittb3ppbGxhCTEuNAlNb3ppbGxhLzUuMCAoWDExOyBVOyBMaW51eCBpNjg2OyBlbi1VUzsgcnY6
MS40OyBNdWx0aVppbGxhIHYxLjUuMC4wZikgR2Vja28vMjAwMzA2MjQKK21vemlsbGEJMS4yLjEJ
TW96aWxsYS81LjAgKFdpbmRvd3M7IFU7IFdpbmRvd3MgTlQgNS4wOyBlbi1VUzsgcnY6MS4yLjE7
IE11bHRpWmlsbGEgdjEuMS4zMiBmaW5hbCkgR2Vja28vMjAwMjExMzAKKwkwCU5DU0FfTW9zYWlj
LzIuMCAoV2luZG93cyAzLjEpCisJMAlOQ1NBX01vc2FpYy8zLjAgKFdpbmRvd3MgOTUpCisJMAlO
Q1NBIE1vc2FpYy8xLjAgKFgxMTtTdW5PUyA0LjEuNCBzdW40bSkKKwkwCU5DU0FfTW9zYWljLzIu
NiAoWDExOyBTdW5PUyA0LjEuMyBzdW40bSkKKwkwCU1vemlsbGEvMy4wMSAoY29tcGF0aWJsZTsg
TmV0Ym94LzMuNSBSOTI7IExpbnV4IDIuMikKK21zaWUJNi4wCU1vemlsbGEvNC4wIChjb21wYXRp
YmxlOyBNU0lFIDYuMDsgV2luZG93cyBOVCA1LjE7IFNWMTsgTmV0Q2FwdG9yIDcuNS40OyAuTkVU
IENMUiAyLjAuNTA3Mjc7IC5ORVQgQ0xSIDMuMC4wNDUwNi42NDg7IC5ORVQgQ0xSIDMuNS4yMTAy
MjsgLk5FVCBDTFIgMS4xLjQzMjI7IC5ORVQgQ0xSIDMuMC40NTA2LjIxNTI7IC5ORVQgQ0xSIDMu
NS4zMDcyOSkKK21zaWUJNS4wMQlNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA1LjAxOyBX
aW5kb3dzIE5UIDUuMDsgTmV0Q2FwdG9yIDYuNS4wUkMxKQorbW96aWxsYQkxLjcuNQlNb3ppbGxh
LzUuMCAoV2luZG93czsgVTsgV2luZG93cyBOVCA1LjE7IGVuLVVTOyBydjoxLjcuNSkgR2Vja28v
MjAwNjAxMjcgTmV0c2NhcGUvOC4xCittb3ppbGxhCTAJTW96aWxsYS80LjA0IFtlbl0gKFgxMTsg
STsgSVJJWCA1LjMgSVAyMikKK21vemlsbGEJMC45LjIJTW96aWxsYS81LjAgKFdpbmRvd3M7IFU7
IFdpbiA5eCA0LjkwOyBkZS1ERTsgcnY6MC45LjIpIEdlY2tvLzIwMDEwNzI2IE5ldHNjYXBlNi82
LjEKK21vemlsbGEJMS44LjEuMTIJTW96aWxsYS81LjAgKFdpbmRvd3M7IFU7IFdpbmRvd3MgTlQg
Ni4wOyBlbi1VUzsgcnY6MS44LjEuMTIpIEdlY2tvLzIwMDgwMjE5IEZpcmVmb3gvMi4wLjAuMTIg
TmF2aWdhdG9yLzkuMC4wLjYKK21vemlsbGEJMAlNb3ppbGxhLzQuMDggW2VuXSAoV2luTlQ7IFUg
O05hdikKK21vemlsbGEJMS4wLjIJTW96aWxsYS81LjAgKFdpbmRvd3M7IFU7IFdpbmRvd3MgTlQg
NS4xOyBlbi1VUzsgcnY6MS4wLjIpIEdlY2tvLzIwMDMwMjA4IE5ldHNjYXBlLzcuMDIKK21vemls
bGEJMAlNb3ppbGxhLzMuMCAoV2luOTU7IEkpCittb3ppbGxhCTAJTW96aWxsYS80LjUxIFtlbl0g
KFdpbjk4OyBVKQorCTAJTmV0U3VyZi8yLjAgKFJJU0MgT1M7IGFybXYzbCkKKwkwCU5ldFN1cmYv
MS4yIChMaW51eDsgaTY4NikKKwkwCU1vemlsbGEvNC43IChjb21wYXRpYmxlOyBPZmZCeU9uZTsg
V2luZG93cyAyMDAwKQorCTAJTW96aWxsYS80LjcgKGNvbXBhdGlibGU7IE9mZkJ5T25lOyBXaW5k
b3dzIDk4KQorCTAJTW96aWxsYS80LjUgKGNvbXBhdGlibGU7IE9tbmlXZWIvNC4xLjEtdjQyNC42
OyBNYWNfUG93ZXJQQykKKwkwCU9tbmlXZWIvMi43LWJldGEtMyBPV0YvMS4wCit3ZWJraXQJNDIw
CU1vemlsbGEvNS4wIChNYWNpbnRvc2g7IFU7IFBQQyBNYWMgT1MgWDsgZW4tVVMpIEFwcGxlV2Vi
S2l0LzQyMCsgKEtIVE1MLCBsaWtlIEdlY2tvLCBTYWZhcmkpIE9tbmlXZWIvdjU5NQorb3BlcmEJ
Ni4wCU9wZXJhLzYuMCAoV2luZG93cyAyMDAwOyBVKSBbZnJdCitvcGVyYQk3LjEwCU1vemlsbGEv
NC4wIChjb21wYXRpYmxlOyBNU0lFIDYuMDsgV2luZG93cyBOVCA1LjEpIE9wZXJhIDcuMTAgW2Vu
XQorb3BlcmEJMTAuMDAJT3BlcmEvOS44MCAoV2luZG93cyBOVCA1LjE7IFU7IGNzKSBQcmVzdG8v
Mi4yLjE1IFZlcnNpb24vMTAuMDAKK29wZXJhCTUuMTEJT3BlcmEvNS4xMSAoV2luZG93cyA5ODsg
VSkgW2VuXQorb3BlcmEJOS41MQlPcGVyYS85LjUxIChNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBY
OyBVOyBlbikKK29wZXJhCTYuMDEJTW96aWxsYS80LjAgKGNvbXBhdGlibGU7IE1TSUUgNS4wOyBX
aW5kb3dzIE5UIDQuMCkgT3BlcmEgNi4wMSBbZW5dCitvcGVyYQk5LjAyCU9wZXJhLzkuMDIgKFdp
bmRvd3MgWFA7IFU7IHJ1KQorb3BlcmEJNS4xMglNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJ
RSA1LjA7IFdpbmRvd3MgOTgpIE9wZXJhIDUuMTIgW2VuXQorb3BlcmEJOS43MAlPcGVyYS85Ljcw
IChMaW51eCBpNjg2IDsgVTsgZW4pIFByZXN0by8yLjIuMQorb3BlcmEJNy4wMwlPcGVyYS83LjAz
IChXaW5kb3dzIE5UIDUuMDsgVSkgW2VuXQorb3BlcmEJOS4yNAlNb3ppbGxhLzQuMCAoY29tcGF0
aWJsZTsgTVNJRSA2LjA7IFdpbmRvd3MgTlQgNS4xOyBlbikgT3BlcmEgOS4yNAorbW96aWxsYQkx
LjkuMC43CU1vemlsbGEvNS4wIChXaW5kb3dzOyBVOyBXaW5kb3dzIE5UIDUuMTsgZW4tVVM7IHJ2
OjEuOS4wLjcpIEdlY2tvLzIwMDkwMzA4MjEgRmlyZWZveC8zLjAuNyBPcmNhLzEuMSBidWlsZCAy
Cittb3ppbGxhCTEuOS4wLjYJTW96aWxsYS81LjAgKFdpbmRvd3M7IFU7IFdpbmRvd3MgTlQgNS4x
OyBlbi1VUzsgcnY6MS45LjAuNikgR2Vja28vMjAwOTAyMjMwMCBGaXJlZm94LzMuMC42IE9yY2Ev
MS4xIGJ1aWxkIDEKKwkwCU1vemlsbGEvMS4xMCBbZW5dIChDb21wYXRpYmxlOyBSSVNDIE9TIDMu
NzA7IE9yZWdhbm8gMS4xMCkKK3dlYmtpdAk1MzAuMAlNb3ppbGxhLzUuMCAoY29tcGF0aWJsZTsg
T3JpZ3luIFdlYiBCcm93c2VyOyBBbWlnYU9TIDQuMTsgcHBjOyBVOyBlbikgQXBwbGVXZWJLaXQv
NTMwLjArIChLSFRNTCwgbGlrZSBHZWNrbywgU2FmYXJpLzUzMC4wKykKK3dlYmtpdAk1MzEuMAlN
b3ppbGxhLzUuMCAoY29tcGF0aWJsZTsgT3JpZ3luIFdlYiBCcm93c2VyOyBBbWlnYU9TIDQuMDsg
VTsgZW4pIEFwcGxlV2ViS2l0LzUzMS4wKyAoS0hUTUwsIGxpa2UgR2Vja28sIFNhZmFyaS81MzEu
MCspCit3ZWJraXQJNTI4LjUJTW96aWxsYS81LjAgKGNvbXBhdGlibGU7IE9yaWd5biBXZWIgQnJv
d3NlcjsgTW9ycGhPUzsgUFBDOyBVKSBBcHBsZVdlYktpdC81MjguNSsgKEtIVE1MLCBsaWtlIEdl
Y2tvLCBTYWZhcmkvNTI4LjUrKQorbXNpZQk2LjAJTW96aWxsYS80LjAgKGNvbXBhdGlibGU7IE1T
SUUgNi4wOyBXaW5kb3dzIE5UIDUuMTsgUGhhc2VPdXQtd3d3LnBoYXNlb3V0Lm5ldCkKK21vemls
bGEJMS40YQlNb3ppbGxhLzUuMCAoV2luZG93czsgVTsgV2luZG93cyBOVCA1LjE7IGVuLVVTOyBy
djoxLjRhKSBHZWNrby8yMDAzMDQxMSBQaG9lbml4LzAuNQorbW96aWxsYQkxLjJiCU1vemlsbGEv
NS4wIChYMTE7IFU7IExpbnV4IGk2ODY7IGVuLVVTOyBydjoxLjJiKSBHZWNrby8yMDAyMTAyOSBQ
aG9lbml4LzAuNAord2Via2l0CTUyNwlNb3ppbGxhLzUuMCAoV2luZG93czsgVTsgV2luZG93cyBO
VCA1LjE7IGNzLUNaKSBBcHBsZVdlYktpdC81MjcrIChLSFRNTCwgbGlrZSBHZWNrbykgIFF0V2Vi
IEludGVybmV0IEJyb3dzZXIvMi41IGh0dHA6Ly93d3cuUXRXZWIubmV0Cit3ZWJraXQJNTI3CU1v
emlsbGEvNS4wIChXaW5kb3dzOyBVOyBXaW5kb3dzIE5UIDUuMTsgZW4tVVMpIEFwcGxlV2ViS2l0
LzUyNysgKEtIVE1MLCBsaWtlIEdlY2tvKSBRdFdlYiBJbnRlcm5ldCBCcm93c2VyLzEuMiBodHRw
Oi8vd3d3LlF0V2ViLm5ldAord2Via2l0CTUyNwlNb3ppbGxhLzUuMCAoV2luZG93czsgVTsgV2lu
ZG93cyBOVCA1LjE7IGVuLVVTKSBBcHBsZVdlYktpdC81MjcrIChLSFRNTCwgbGlrZSBHZWNrbykg
UXRXZWIgSW50ZXJuZXQgQnJvd3Nlci8xLjcgaHR0cDovL3d3dy5RdFdlYi5uZXQKK3dlYmtpdAk1
MjcJTW96aWxsYS81LjAgKFgxMTsgVTsgTGludXg7IGNzLUNaKSBBcHBsZVdlYktpdC81MjcrIChL
SFRNTCwgbGlrZSBHZWNrbywgU2FmYXJpLzQxOS4zKSAgcmVrb25xCisJMAlyZXRhd3EvMC4yLjZj
IFtlbl0gKHRleHQpCit3ZWJraXQJMzEyLjgJTW96aWxsYS81LjAgKE1hY2ludG9zaDsgVTsgUFBD
IE1hYyBPUyBYOyBlbi11cykgQXBwbGVXZWJLaXQvMzEyLjggKEtIVE1MLCBsaWtlIEdlY2tvKSBT
YWZhcmkvMzEyLjYKK3dlYmtpdAk1MjguMTYJTW96aWxsYS81LjAgKE1hY2ludG9zaDsgVTsgUFBD
IE1hYyBPUyBYIDEwXzVfNjsgaXQtaXQpIEFwcGxlV2ViS2l0LzUyOC4xNiAoS0hUTUwsIGxpa2Ug
R2Vja28pIFZlcnNpb24vNC4wIFNhZmFyaS81MjguMTYKK3dlYmtpdAk1MjMuMTUJTW96aWxsYS81
LjAgKFdpbmRvd3M7IFU7IFdpbmRvd3MgTlQgNS4xOyBjcy1DWikgQXBwbGVXZWJLaXQvNTIzLjE1
IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi8zLjAgU2FmYXJpLzUyMy4xNQord2Via2l0CTEy
NS4yCU1vemlsbGEvNS4wIChNYWNpbnRvc2g7IFU7IFBQQyBNYWMgT1MgWDsgZGUtZGUpIEFwcGxl
V2ViS2l0LzEyNS4yIChLSFRNTCwgbGlrZSBHZWNrbykgU2FmYXJpLzEyNS43Cit3ZWJraXQJNTI4
LjE2CU1vemlsbGEvNS4wIChXaW5kb3dzOyBVOyBXaW5kb3dzIE5UIDYuMDsgZW4tVVMpIEFwcGxl
V2ViS2l0LzUyOC4xNiAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vNC4wIFNhZmFyaS81Mjgu
MTYKK3dlYmtpdAk0MjAJTW96aWxsYS81LjAgKE1hY2ludG9zaDsgVTsgUFBDIE1hYyBPUyBYOyBm
aS1maSkgQXBwbGVXZWJLaXQvNDIwKyAoS0hUTUwsIGxpa2UgR2Vja28pIFNhZmFyaS80MTkuMwor
bW96aWxsYQkxLjguMS4xMwlNb3ppbGxhLzUuMCAoTWFjaW50b3NoOyBVOyBJbnRlbCBNYWMgT1Mg
WDsgZW4tVVM7IHJ2OjEuOC4xLjEzKSBHZWNrby8yMDA4MDMxMyBTZWFNb25rZXkvMS4xLjkKK21v
emlsbGEJMS45LjFhMnByZQlNb3ppbGxhLzUuMCAoWDExOyBVOyBMaW51eCBpNjg2OyBydjoxLjku
MWEycHJlKSBHZWNrby8yMDA4MDgyNDA1MjQ0OCBTZWFNb25rZXkvMi4wYTFwcmUKK21vemlsbGEJ
MS44LjEuNglNb3ppbGxhLzUuMCAoV2luZG93czsgVTsgV2luIDl4IDQuOTA7IGVuLUdCOyBydjox
LjguMS42KSBHZWNrby8yMDA3MDgwMiBTZWFNb25rZXkvMS4xLjQKK21vemlsbGEJMS45LjFiM3By
ZQlNb3ppbGxhLzUuMCAoV2luZG93czsgVTsgV2luZG93cyBOVCA2LjE7IGVuLVVTOyBydjoxLjku
MWIzcHJlKSBHZWNrby8yMDA4MTIwOCBTZWFNb25rZXkvMi4wYTNwcmUKK21vemlsbGEJMS45YTEJ
TW96aWxsYS81LjAgKEJlT1M7IFU7IEJlT1MgQmVQQzsgZW4tVVM7IHJ2OjEuOWExKSBHZWNrby8y
MDA2MDcwMiBTZWFNb25rZXkvMS41YQorbW96aWxsYQkxLjkuMWIzcHJlCU1vemlsbGEvNS4wIChN
YWNpbnRvc2g7IFU7IEludGVsIE1hYyBPUyBYIDEwLjU7IGVuLVVTOyBydjoxLjkuMWIzcHJlKSBH
ZWNrby8yMDA4MTIwMiBTZWFNb25rZXkvMi4wYTIKK3dlYmtpdAk0MTkJTW96aWxsYS81LjAgKE1h
Y2ludG9zaDsgVTsgUFBDIE1hYyBPUyBYOyBqYS1qcCkgQXBwbGVXZWJLaXQvNDE5IChLSFRNTCwg
bGlrZSBHZWNrbykgU2hpaXJhLzEuMi4zIFNhZmFyaS8xMjUKK3dlYmtpdAk0MTcuOQlNb3ppbGxh
LzUuMCAoTWFjaW50b3NoOyBVOyBQUEMgTWFjIE9TIFg7IGVuKSBBcHBsZVdlYktpdC80MTcuOSAo
S0hUTUwsIGxpa2UgR2Vja28sIFNhZmFyaSkgU2hpaXJhLzEuMQord2Via2l0CTQxOC45LjEJTW96
aWxsYS81LjAgKE1hY2ludG9zaDsgVTsgSW50ZWwgTWFjIE9TIFg7IGZyKSBBcHBsZVdlYktpdC80
MTguOS4xIChLSFRNTCwgbGlrZSBHZWNrbykgU2hpaXJhIFNhZmFyaS8xMjUKK21zaWUJNi4wCU1v
emlsbGEvNC4wIChjb21wYXRpYmxlOyBNU0lFIDYuMDsgV2luZG93cyBOVCA1LjEpIFNsZWlwbmly
LzIuOC4xCittc2llCTcuMAlNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA3LjA7IFdpbmRv
d3MgTlQgNS4xOyAuTkVUIENMUiAxLjEuNDMyMjsgSW5mb1BhdGguMTsgLk5FVCBDTFIgMi4wLjUw
NzI3KSBTbGVpcG5pci8yLjguNAord2Via2l0CTUyNS4yNy4xCU1vemlsbGEvNS4wIChNYWNpbnRv
c2g7IFU7IEludGVsIE1hYyBPUyBYIDEwXzVfNTsgZW4tdXMpIEFwcGxlV2ViS2l0LzUyNS4yNy4x
IChLSFRNTCwgbGlrZSBHZWNrbykgU3RhaW5sZXNzLzAuNCBTYWZhcmkvNTI1LjIwLjEKK3dlYmtp
dAk1MjguMTYJTW96aWxsYS81LjAgKE1hY2ludG9zaDsgVTsgSW50ZWwgTWFjIE9TIFggMTBfNV82
OyBlbi11cykgQXBwbGVXZWJLaXQvNTI4LjE2IChLSFRNTCwgbGlrZSBHZWNrbykgU3RhaW5sZXNz
LzAuNS4zIFNhZmFyaS81MjUuMjAuMQord2Via2l0CTUyNS4xOAlNb3ppbGxhLzUuMCAoTWFjaW50
b3NoOyBVOyBJbnRlbCBNYWMgT1MgWCAxMF80XzExOyBlbikgQXBwbGVXZWJLaXQvNTI1LjE4IChL
SFRNTCwgbGlrZSBHZWNrbykgU3VucmlzZS8xLjcuNCBsaWtlIFNhZmFyaS80NTI1LjIyCit3ZWJr
aXQJMTI1LjUuNwlNb3ppbGxhLzUuMCAoTWFjaW50b3NoOyBVOyBQUEMgTWFjIE9TIFg7IGVuLXVz
KSBBcHBsZVdlYktpdC8xMjUuNS43IChLSFRNTCwgbGlrZSBHZWNrbykgU3VucmlzZUJyb3dzZXIv
MC44NTMKK21vemlsbGEJMS45LjAuMTBwcmUJTW96aWxsYS81LjAgKFgxMTsgVTsgTGludXggaTY4
NjsgZW4tVVM7IHJ2OjEuOS4wLjEwcHJlKSBHZWNrby8yMDA5MDQxODE0IEZpcmVmb3gvMy4wLjEw
cHJlIChTd2lmdGZveCkKK21zaWUJNi4wCU1vemlsbGEvNC4wIChjb21wYXRpYmxlOyBNU0lFIDYu
MDsgV2luZG93cyBOVCA1LjE7IFNWMTsgLk5FVCBDTFIgMi4wLjUwNzI3OyAuTkVUIENMUiAzLjAu
MDQ1MDYuNjQ4OyAuTkVUIENMUiAzLjUuMjEwMjI7IC5ORVQgQ0xSIDEuMS40MzIyOyBUaGVXb3Js
ZCkKK3dlYmtpdAkxLjEuOAlXZWJraXQvMS4xLjggKExpbnV4OyBlbi11cykgVXpibAord2Via2l0
CTEuMS4xMAlVemJsIChYMTE7IFU7IExpbnV4IHg4Nl82NDsgZW4tR0IpIEFwcGxlV2Via2l0LzEu
MS4xMAord2Via2l0CTEuMS45CVV6YmwgKFdlYmtpdCAxLjEuOSkgKExpbnV4KQord2Via2l0CTEu
MS4xMAlVemJsIChVOyBMaW51eCB4ODZfNjQ7IGVuLUdCKSBXZWJraXQgMS4xLjEwCisJMAl3M20v
MC41LjEKKwkwCXczbS8wLjUuMgord2Via2l0CTEwM3UJTW96aWxsYS81LjAgKE1hY2ludG9zaDsg
VTsgUFBDIE1hYyBPUyBYOyBlbi11cykgQXBwbGVXZWJLaXQvMTAzdSAoS0hUTUwsIGxpa2UgR2Vj
a28pIHdLaW9zay8xMDAKK21vemlsbGEJMS45LjAuOQlNb3ppbGxhLzUuMCAoV2luZG93czsgVTsg
V2luZG93cyBOVCA1LjE7IGVuLVVTOyBydjoxLjkuMC45KSBHZWNrby8yMDA5MDQyNDEwIEZpcmVm
b3gvMy4wLjkgV3l6by8zLjAuMworCTAJWC1TbWlsZXMvMS4yLTIwMDgxMTEzCittc2llCTcuMAlN
b3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA3LjA7IFdpbmRvd3MgTlQgNS4xOyBNb3ppbGxh
LzQuMCAoY29tcGF0aWJsZTsgTVNJRSA2LjA7IFdpbmRvd3MgTlQgNS4xOyBTVjEpIDsgLk5FVCBD
TFIgMi4wLjUwNzI3OyAuTkVUIENMUiAxLjEuNDMyMjsgLk5FVCBDTFIgMy4wLjA0NTA2LjMwOyBN
RUdBVVBMT0FEIDIuMCkKK21zaWUJNy4wCU1vemlsbGEvNC4wIChjb21wYXRpYmxlOyBNU0lFIDcu
MDsgV2luZG93cyBOVCA1LjE7IE1vemlsbGEvNC4wIChjb21wYXRpYmxlOyBNU0lFIDYuMDsgV2lu
ZG93cyBOVCA1LjE7IFNWMSkgOyAuTkVUIENMUiAxLjEuNDMyMjsgLk5FVCBDTFIgMi4wLjUwNzI3
OyAuTkVUIENMUiAzLjAuMDQ1MDYuMzApCittb3ppbGxhCTEuOS4wLjQJTW96aWxsYS81LjAgKFgx
MTsgVTsgTGludXggaTY4NjsgZW4tR0I7IHJ2OjEuOS4wLjQpIEdlY2tvLzIwMDgxMTEyMTcgRmVk
b3JhLzMuMC40LTEuZmM5IEZpcmVmb3gvMy4wLjQKK21vemlsbGEJMS45LjAuNAlNb3ppbGxhLzUu
MCAoTWFjaW50b3NoOyBVOyBJbnRlbCBNYWMgT1MgWCAxMC41OyBlbi1VUzsgcnY6MS45LjAuNCkg
R2Vja28vMjAwODEwMjkyMCBGaXJlZm94LzMuMC40Cittc2llCTcuMAlNb3ppbGxhLzQuMCAoY29t
cGF0aWJsZTsgTVNJRSA3LjA7IFdpbmRvd3MgTlQgNi4wOyBNb3ppbGxhLzQuMCAoY29tcGF0aWJs
ZTsgTVNJRSA2LjA7IFdpbmRvd3MgTlQgNS4xOyBTVjEpIDsgU0xDQzE7IC5ORVQgQ0xSIDIuMC41
MDcyNzsgTWVkaWEgQ2VudGVyIFBDIDUuMDsgLk5FVCBDTFIgMy4wLjA0NTA2OyAuTkVUIENMUiAx
LjEuNDMyMjsgRkRNKQorbXNpZQk2LjAJbW96aWxsYS80LjAgKGNvbXBhdGlibGU7IG1zaWUgNi4w
OyB3aW5kb3dzIG50IDUuMTsgbXJhIDQuNiAoYnVpbGQgMDE0MjUpOyAubmV0IGNsciAyLjAuNTA3
MjcpCittc2llCTcuMAltb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgbXNpZSA3LjA7IHdpbmRvd3Mg
bnQgNS4xOyBtcmEgNC45IChidWlsZCAwMTg2MykpCittc2llCTcuMAlNb3ppbGxhLzQuMCAoY29t
cGF0aWJsZTsgTVNJRSA3LjA7IFdpbmRvd3MgTlQgNi4wOyBNb3ppbGxhLzQuMCAoY29tcGF0aWJs
ZTsgTVNJRSA2LjA7IFdpbmRvd3MgTlQgNS4xOyBTVjEpIDsgU0xDQzE7IC5ORVQgQ0xSIDIuMC41
MDcyNzsgTWVkaWEgQ2VudGVyIFBDIDUuMDsgSW5mb1BhdGg/LjI7IC5ORVQgQ0xSIDMuNS4yMTAy
MjsgLk5FVCBDTFIgMy41LjMwNzI5OyAuTkVUIENMUiAzLjAuMzA2MTg7IE1TLVJUQyBMTSA4OyAu
TkVUIENMUiAxLjEuNDMyMikKK21zaWUJNy4wCU1vemlsbGEvNC4wIChjb21wYXRpYmxlOyBNU0lF
IDcuMDsgV2luZG93cyBOVCA2LjA7IFNMQ0MxOyAuTkVUIENMUiAyLjAuNTA3Mjc7IC5ORVQgQ0xS
IDMuMC4wNDUwNjsgSW5mb1BhdGg/LjI7IC5ORVQgQ0xSIDMuNS4yMTAyMikKK21zaWUJNy4wCU1v
emlsbGEvNC4wIChjb21wYXRpYmxlOyBNU0lFIDcuMDsgV2luZG93cyBOVCA1LjE7IFNreSBCcm9h
ZGJhbmQ7IE1vemlsbGEvNC4wIChjb21wYXRpYmxlOyBNU0lFIDYuMDsgV2luZG93cyBOVCA1LjE7
IFNWMSkgOyAuTkVUIENMUiAxLjEuNDMyMikKK21zaWUJNy4wCU1vemlsbGEvNC4wIChjb21wYXRp
YmxlOyBNU0lFIDcuMDsgV2luZG93cyBOVCA2LjA7IE1vemlsbGEvNC4wIChjb21wYXRpYmxlOyBN
U0lFIDYuMDsgV2luZG93cyBOVCA1LjE7IFNWMSkgOyBTTENDMTsgLk5FVCBDTFIgMi4wLjUwNzI3
OyBNZWRpYSBDZW50ZXIgUEMgNS4wOyBJbmZvUGF0aC4yOyAuTkVUIENMUiAzLjUuMjEwMjI7IC5O
RVQgQ0xSIDMuNS4zMDcyOTsgLk5FVCBDTFIgMy4wLjMwNjE4OyBNUy1SVEMgTE0gODsgLk5FVCBD
TFIgMS4xLjQzMjIpCittc2llCTcuMAlNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA3LjA7
IFdpbmRvd3MgTlQgNi4wOyBTTENDMTsgLk5FVCBDTFIgMi4wLjUwNzI3OyAuTkVUIENMUiAzLjAu
MDQ1MDY7IEluZm9QYXRoLjI7IC5ORVQgQ0xSIDMuNS4yMTAyMikKK21zaWUJNy4wCU1vemlsbGEv
NC4wIChjb21wYXRpYmxlOyBNU0lFIDcuMDsgV2luZG93cyBOVCA1LjE7IEdUQjY7IFVzZXItYWdl
bnQ6IE1vemlsbGEvNC4wIChjb21wYXRpYmxlOyBNU0lFIDYuMDsgV2luZG93cyBOVCA1LjE7IFNW
MTsgaHR0cDovL2JzYWxzYS5jb20pOyAuTkVUIENMUiAxLjEuNDMyMjsgLk5FVCBDTFIgMi4wLjUw
NzI3CitvcGVyYQkxMC4wMAlPcGVyYS85LjgwIChNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYOyBV
OyBlbikgUHJlc3RvLzIuMi4xNSBWZXJzaW9uLzEwLjAwCittc2llCTguMAlNb3ppbGxhLzQuMCAo
Y29tcGF0aWJsZTsgTVNJRSA4LjA7IFdpbmRvd3MgTlQgNS4xOyBUcmlkZW50LzQuMDsgTW96aWxs
YS80LjAgKGNvbXBhdGlibGU7IE1TSUUgNi4wOyBXaW5kb3dzIE5UIDUuMTsgU1YxKSA7IC5ORVQg
Q0xSIDEuMS40MzIyOyBJbmZvUGF0aD8uMjsgLk5FVCBDTFIgMi4wLjUwNzI3OyBDSUJBOyAuTkVU
IENMUiAzLjAuMDQ1MDYuNjQ4OyAuTkVUIENMUiAzLjUuMjEwMjI7IC5ORVQgQ0xSIDMuMC40NTA2
LjIxNTI7IC5ORVQgQ0xSIDMuNS4zMDcyOSkKK29wZXJhCTEwLjAwCU9wZXJhLzkuODAgKFgxMTsg
TGludXggeDg2XzY0OyBVOyBkZSkgUHJlc3RvLzIuMi4xNSBWZXJzaW9uLzEwLjAwCitvcGVyYQkx
MC41MAlPcGVyYS85LjgwIChNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYOyBVOyBlbikgUHJlc3Rv
LzIuNS4xOCBWZXJzaW9uLzEwLjUwCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9q
cXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS91YS50eHQKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ct
dGFicwogICArIHllcwoKSW5kZXg6IExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9k
YXRhL3dpdGhfZnJpZXMueG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pxdWVyeS9yZXNv
dXJjZXMvdGVzdC9kYXRhL3dpdGhfZnJpZXMueG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L2RhdGEvd2l0aF9mcmllcy54bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMjUgQEAKKzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+
Cis8c29hcDpFbnZlbG9wZSB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9z
b2FwL2VudmVsb3BlLyIKKwl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2No
ZW1hIgorCXhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFu
Y2UiPgorCTxzb2FwOkJvZHk+CisJCTxqc2NvbmYgeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5j
b20vbnMxIj4KKwkJCTxyZXNwb25zZSB4bWxuczphYj0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9u
czIiPgorCQkJCTxtZXRhPgorCQkJCQk8Y29tcG9uZW50IGlkPSJzZWl0ZTEiIGNsYXNzPSJjb21w
b25lbnQiPgorCQkJCQkJPHByb3BlcnRpZXMgeG1sbnM6Y2Q9Imh0dHA6Ly93d3cuZXhhbXBsZS5j
b20vbnMzIj4KKwkJCQkJCQk8cHJvcGVydHkgbmFtZT0icHJvcDEiPgorCQkJCQkJCQk8dGhpbmcg
Lz4KKwkJCQkJCQkJPHZhbHVlPjE8L3ZhbHVlPgorCQkJCQkJCTwvcHJvcGVydHk+CisJCQkJCQkJ
PHByb3BlcnR5IG5hbWU9InByb3AyIj4KKwkJCQkJCQkJPHRoaW5nIGF0dD0ic29tZXRoaW5nIiAv
PgorCQkJCQkJCTwvcHJvcGVydHk+CisJCQkJCQkJPGZvb19iYXI+Zm9vPC9mb29fYmFyPgorCQkJ
CQkJPC9wcm9wZXJ0aWVzPgorCQkJCQk8L2NvbXBvbmVudD4KKwkJCQk8L21ldGE+CisJCQk8L3Jl
c3BvbnNlPgorCQk8L2pzY29uZj4KKwk8L3NvYXA6Qm9keT4KKzwvc29hcDpFbnZlbG9wZT4KClBy
b3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9kYXRh
L3dpdGhfZnJpZXMueG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB5ZXMKCklu
ZGV4OiBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS93aXRoX2ZyaWVzX292
ZXJfanNvbnAucGhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMv
dGVzdC9kYXRhL3dpdGhfZnJpZXNfb3Zlcl9qc29ucC5waHAJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS93aXRoX2ZyaWVzX292ZXJfanNvbnAu
cGhwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKKzw/cGhwCitlcnJvcl9yZXBvcnRpbmco
MCk7CiskY2FsbGJhY2sgPSAkX1JFUVVFU1RbJ2NhbGxiYWNrJ107CiskanNvbiA9ICRfUkVRVUVT
VFsnanNvbiddOworJHRleHQgPSBqc29uX2VuY29kZShmaWxlX2dldF9jb250ZW50cyhkaXJuYW1l
KF9fRklMRV9fKS4iL3dpdGhfZnJpZXMueG1sIikpOworZWNobyAiJGNhbGxiYWNrKCR0ZXh0KSI7
Cis/PgpJbmRleDogTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L2RhdGEvb2Zmc2V0
L2Fic29sdXRlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNl
cy90ZXN0L2RhdGEvb2Zmc2V0L2Fic29sdXRlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS9vZmZzZXQvYWJzb2x1dGUuaHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw1MSBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0Mv
L0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKKwkiaHR0cDovL3d3dy53My5vcmcvVFIv
eGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Cis8aHRtbD4KKwk8aGVhZD4KKwkJ
PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJz
ZXQ9dXRmLTgiPgorCQk8dGl0bGU+YWJzb2x1dGU8L3RpdGxlPgorCQk8c3R5bGUgdHlwZT0idGV4
dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgorCQkJYm9keSB7IG1hcmdpbjogMXB4OyBwYWRkaW5nOiA1
cHg7IH0KKwkJCWRpdi5hYnNvbHV0ZSB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbWFyZ2luOiAxcHg7
IGJvcmRlcjogMnB4IHNvbGlkICMwMDA7IHBhZGRpbmc6IDVweDsgd2lkdGg6IDEwMHB4OyBoZWln
aHQ6IDEwMHB4OyBiYWNrZ3JvdW5kOiAjZmZmOyB9CisJCQkjYWJzb2x1dGUtMSB7IHRvcDogMDsg
bGVmdDogMDsgfQorCQkJCSNhYnNvbHV0ZS0xLTEgeyB0b3A6IDFweDsgbGVmdDogMXB4OyB9CisJ
CQkJCSNhYnNvbHV0ZS0xLTEtMSB7IHRvcDogMXB4OyBsZWZ0OiAxcHg7IH0KKwkJCSNhYnNvbHV0
ZS0yIHsgdG9wOiAxOXB4OyBsZWZ0OiAxOXB4OyB9CisJCQkjbWFya2VyIHsgcG9zaXRpb246IGFi
c29sdXRlOyBib3JkZXI6IDJweCBzb2xpZCAjMDAwOyB3aWR0aDogNTBweDsgaGVpZ2h0OiA1MHB4
OyBiYWNrZ3JvdW5kOiAjY2NjOyB9CisJCQlwLmluc3RydWN0aW9ucyB7IHBvc2l0aW9uOiBhYnNv
bHV0ZTsgYm90dG9tOiAwOyB9CisJCQkjcG9zaXRpb25UZXN0IHsgcG9zaXRpb246IGFic29sdXRl
OyB9CisJCTwvc3R5bGU+CisJCTxzY3JpcHQgc3JjPSIuLi8uLi8uLi9zcmMvY29yZS5qcyI+PC9z
Y3JpcHQ+CisJCTxzY3JpcHQgc3JjPSIuLi8uLi8uLi9zcmMvZGVmZXJyZWQuanMiPjwvc2NyaXB0
PgorCQk8c2NyaXB0IHNyYz0iLi4vLi4vLi4vc3JjL3N1cHBvcnQuanMiPjwvc2NyaXB0PgorCQk8
c2NyaXB0IHNyYz0iLi4vLi4vLi4vc3JjL3NpenpsZS9zaXp6bGUuanMiPjwvc2NyaXB0PgorCQk8
c2NyaXB0IHNyYz0iLi4vLi4vLi4vc3JjL3NpenpsZS1qcXVlcnkuanMiPjwvc2NyaXB0PgorCQk8
c2NyaXB0IHNyYz0iLi4vLi4vLi4vc3JjL3RyYXZlcnNpbmcuanMiPjwvc2NyaXB0PgorCQk8c2Ny
aXB0IHNyYz0iLi4vLi4vLi4vc3JjL2RhdGEuanMiPjwvc2NyaXB0PgorCQk8c2NyaXB0IHNyYz0i
Li4vLi4vLi4vc3JjL2V2ZW50LmpzIj48L3NjcmlwdD4KKwkJPHNjcmlwdCBzcmM9Ii4uLy4uLy4u
L3NyYy9jc3MuanMiPjwvc2NyaXB0PgorCQk8c2NyaXB0IHNyYz0iLi4vLi4vLi4vc3JjL29mZnNl
dC5qcyI+PC9zY3JpcHQ+CisJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4u
Ly4uLy4uL2Rpc3QvanF1ZXJ5LmpzIj48L3NjcmlwdD4KKwkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KKwkJCWpRdWVyeShmdW5jdGlvbigkKSB7CisJCQkJ
JCgnLmFic29sdXRlJykuY2xpY2soZnVuY3Rpb24oKSB7CisJCQkJCSQoJyNtYXJrZXInKS5jc3Mo
ICQodGhpcykub2Zmc2V0KCkgKTsKKwkJCQkJdmFyIHBvcyA9ICQodGhpcykucG9zaXRpb24oKTsK
KwkJCQkJJCh0aGlzKS5jc3MoeyB0b3A6IHBvcy50b3AsIGxlZnQ6IHBvcy5sZWZ0IH0pOworCQkJ
CQlyZXR1cm4gZmFsc2U7CisJCQkJfSk7CisJCQl9KTsKKwkJPC9zY3JpcHQ+CisJPC9oZWFkPgor
CTxib2R5PgorCQk8ZGl2IGlkPSJhYnNvbHV0ZS0xIiBjbGFzcz0iYWJzb2x1dGUiPmFic29sdXRl
LTEKKwkJCTxkaXYgaWQ9ImFic29sdXRlLTEtMSIgY2xhc3M9ImFic29sdXRlIj5hYnNvbHV0ZS0x
LTEKKwkJCQk8ZGl2IGlkPSJhYnNvbHV0ZS0xLTEtMSIgY2xhc3M9ImFic29sdXRlIj5hYnNvbHV0
ZS0xLTEtMTwvZGl2PgorCQkJPC9kaXY+CisJCTwvZGl2PgorCQk8ZGl2IGlkPSJhYnNvbHV0ZS0y
IiBjbGFzcz0iYWJzb2x1dGUiPmFic29sdXRlLTI8L2Rpdj4KKwkJPGRpdiBpZD0icG9zaXRpb25U
ZXN0Ij5IYXMgYWJzb2x1dGUgcG9zaXRpb24gYnV0IG5vIHZhbHVlcyBzZXQgZm9yIHRoZSBsb2Nh
dGlvbiAoJ2F1dG8nKS48L2Rpdj4KKwkJPGRpdiBpZD0ibWFya2VyIj48L2Rpdj4KKwkJPHAgY2xh
c3M9Imluc3RydWN0aW9ucyI+Q2xpY2sgdGhlIHdoaXRlIGJveCB0byBtb3ZlIHRoZSBtYXJrZXIg
dG8gaXQuIENsaWNraW5nIHRoZSBib3ggYWxzbyBjaGFuZ2VzIHRoZSBwb3NpdGlvbiB0byBhYnNv
bHV0ZSAoaWYgbm90IGFscmVhZHkpIGFuZCBzZXRzIHRoZSBwb3NpdGlvbiBhY2NvcmRpbmcgdG8g
dGhlIHBvc2l0aW9uIG1ldGhvZC48L3A+CisJPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hh
bmdlcyBvbjogTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L2RhdGEvb2Zmc2V0L2Fi
c29sdXRlLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICArIHllcwoKSW5kZXg6
IExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9kYXRhL29mZnNldC9ib2R5Lmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L2RhdGEvb2Zm
c2V0L2JvZHkuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJj
ZXMvdGVzdC9kYXRhL29mZnNldC9ib2R5Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzMg
QEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRp
b25hbC8vRU4iCisJImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5z
aXRpb25hbC5kdGQiPgorPGh0bWw+CisJPGhlYWQ+CisJCTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRl
bnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKwkJPHRpdGxlPmJv
ZHk8L3RpdGxlPgorCQk8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgorCQkJ
Ym9keSB7IG1hcmdpbjogMXB4OyBwYWRkaW5nOiA1cHg7IH0KKwkJCSNtYXJrZXIgeyBwb3NpdGlv
bjogYWJzb2x1dGU7IGJvcmRlcjogMnB4IHNvbGlkICMwMDA7IHdpZHRoOiA1MHB4OyBoZWlnaHQ6
IDUwcHg7IGJhY2tncm91bmQ6ICNjY2M7IH0KKwkJPC9zdHlsZT4KKwkJPHNjcmlwdCBzcmM9Ii4u
Ly4uLy4uL3NyYy9jb3JlLmpzIj48L3NjcmlwdD4KKwkJPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3Ny
Yy9kZWZlcnJlZC5qcyI+PC9zY3JpcHQ+CisJCTxzY3JpcHQgc3JjPSIuLi8uLi8uLi9zcmMvc3Vw
cG9ydC5qcyI+PC9zY3JpcHQ+CisJCTxzY3JpcHQgc3JjPSIuLi8uLi8uLi9zcmMvc2l6emxlL3Np
enpsZS5qcyI+PC9zY3JpcHQ+CisJCTxzY3JpcHQgc3JjPSIuLi8uLi8uLi9zcmMvc2l6emxlLWpx
dWVyeS5qcyI+PC9zY3JpcHQ+CisJCTxzY3JpcHQgc3JjPSIuLi8uLi8uLi9zcmMvdHJhdmVyc2lu
Zy5qcyI+PC9zY3JpcHQ+CisJCTxzY3JpcHQgc3JjPSIuLi8uLi8uLi9zcmMvZGF0YS5qcyI+PC9z
Y3JpcHQ+CisJCTxzY3JpcHQgc3JjPSIuLi8uLi8uLi9zcmMvZXZlbnQuanMiPjwvc2NyaXB0Pgor
CQk8c2NyaXB0IHNyYz0iLi4vLi4vLi4vc3JjL2Nzcy5qcyI+PC9zY3JpcHQ+CisJCTxzY3JpcHQg
c3JjPSIuLi8uLi8uLi9zcmMvb2Zmc2V0LmpzIj48L3NjcmlwdD4KKwkJPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KKwkJCWpRdWVyeShmdW5jdGlvbigkKSB7
CisJCQkJJCgnYm9keScpLmNsaWNrKGZ1bmN0aW9uKCkgeworCQkJCQkkKCcjbWFya2VyJykuY3Nz
KCAkKHRoaXMpLm9mZnNldCgpICk7CisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9KTsKKwkJCX0p
OworCQk8L3NjcmlwdD4KKwk8L2hlYWQ+CisJPGJvZHk+CisJCTxkaXYgaWQ9Im1hcmtlciI+PC9k
aXY+CisJPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMv
anF1ZXJ5L3Jlc291cmNlcy90ZXN0L2RhdGEvb2Zmc2V0L2JvZHkuaHRtbApfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFk
ZGVkOiBhbGxvdy10YWJzCiAgICsgeWVzCgpJbmRleDogTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291
cmNlcy90ZXN0L2RhdGEvb2Zmc2V0L2ZpeGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L2RhdGEvb2Zmc2V0L2ZpeGVkLmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS9vZmZzZXQvZml4
ZWQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MiBAQAorPCFET0NUWVBFIGh0bWwgUFVC
TElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKKwkiaHR0cDovL3d3
dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Cis8aHRtbD4K
Kwk8aGVhZD4KKwkJPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0
L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorCQk8dGl0bGU+Zml4ZWQ8L3RpdGxlPgorCQk8c3R5bGUg
dHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgorCQkJYm9keSB7IG1hcmdpbjogMXB4OyBw
YWRkaW5nOiA1cHg7IH0KKwkJCWRpdi5maXhlZCB7IHBvc2l0aW9uOiBmaXhlZDsgbWFyZ2luOiAx
cHg7IGJvcmRlcjogMnB4IHNvbGlkICMwMDA7IHBhZGRpbmc6IDVweDsgd2lkdGg6IDEwMHB4OyBo
ZWlnaHQ6IDEwMHB4OyBiYWNrZ3JvdW5kOiAjZmZmOyBvdmVyZmxvdzogaGlkZGVuOyB9CisJCQkj
Zml4ZWQtMSB7IHRvcDogMDsgbGVmdDogMDsgfQorCQkJI2ZpeGVkLTIgeyB0b3A6IDIwcHg7IGxl
ZnQ6IDIwcHg7IH0KKwkJCSNmb3JjZVNjcm9sbCB7IHdpZHRoOiA1MDAwcHg7IGhlaWdodDogNTAw
MHB4OyB9CisJCQkjbWFya2VyIHsgcG9zaXRpb246IGFic29sdXRlOyBib3JkZXI6IDJweCBzb2xp
ZCAjMDAwOyB3aWR0aDogNTBweDsgaGVpZ2h0OiA1MHB4OyBiYWNrZ3JvdW5kOiAjY2NjOyB9CisJ
CTwvc3R5bGU+CisJCTxzY3JpcHQgc3JjPSIuLi8uLi8uLi9zcmMvY29yZS5qcyI+PC9zY3JpcHQ+
CisJCTxzY3JpcHQgc3JjPSIuLi8uLi8uLi9zcmMvZGVmZXJyZWQuanMiPjwvc2NyaXB0PgorCQk8
c2NyaXB0IHNyYz0iLi4vLi4vLi4vc3JjL3N1cHBvcnQuanMiPjwvc2NyaXB0PgorCQk8c2NyaXB0
IHNyYz0iLi4vLi4vLi4vc3JjL3NpenpsZS9zaXp6bGUuanMiPjwvc2NyaXB0PgorCQk8c2NyaXB0
IHNyYz0iLi4vLi4vLi4vc3JjL3NpenpsZS1qcXVlcnkuanMiPjwvc2NyaXB0PgorCQk8c2NyaXB0
IHNyYz0iLi4vLi4vLi4vc3JjL3RyYXZlcnNpbmcuanMiPjwvc2NyaXB0PgorCQk8c2NyaXB0IHNy
Yz0iLi4vLi4vLi4vc3JjL2RhdGEuanMiPjwvc2NyaXB0PgorCQk8c2NyaXB0IHNyYz0iLi4vLi4v
Li4vc3JjL2V2ZW50LmpzIj48L3NjcmlwdD4KKwkJPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3NyYy9j
c3MuanMiPjwvc2NyaXB0PgorCQk8c2NyaXB0IHNyYz0iLi4vLi4vLi4vc3JjL29mZnNldC5qcyI+
PC9zY3JpcHQ+CisJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYt
OCI+CisJCQlqUXVlcnkoZnVuY3Rpb24oJCkgeworCQkJCXdpbmRvdy5zY3JvbGxUbygxMDAwLDEw
MDApOworCQkJCSQoJy5maXhlZCcpLmNsaWNrKGZ1bmN0aW9uKCkgeworCQkJCQkkKCcjbWFya2Vy
JykuY3NzKCAkKHRoaXMpLm9mZnNldCgpICk7CisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9KTsK
KwkJCX0pOworCQk8L3NjcmlwdD4KKwk8L2hlYWQ+CisJPGJvZHk+CisJCTxkaXYgaWQ9ImZpeGVk
LTEiIGNsYXNzPSJmaXhlZCI+PC9kaXY+CisJCTxkaXYgaWQ9ImZpeGVkLTIiIGNsYXNzPSJmaXhl
ZCI+PC9kaXY+CisJCTxkaXYgaWQ9ImZvcmNlU2Nyb2xsIj48L2Rpdj4KKwkJPGRpdiBpZD0ibWFy
a2VyIj48L2Rpdj4KKwkJPHAgY2xhc3M9Imluc3RydWN0aW9ucyI+Q2xpY2sgdGhlIHdoaXRlIGJv
eCB0byBtb3ZlIHRoZSBtYXJrZXIgdG8gaXQuPC9wPgorCTwvYm9keT4KKzwvaHRtbD4KClByb3Bl
cnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9kYXRhL29m
ZnNldC9maXhlZC5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB5ZXMKCklu
ZGV4OiBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS9vZmZzZXQvcmVsYXRp
dmUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3Qv
ZGF0YS9vZmZzZXQvcmVsYXRpdmUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2px
dWVyeS9yZXNvdXJjZXMvdGVzdC9kYXRhL29mZnNldC9yZWxhdGl2ZS5odG1sCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQwIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhI
VE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgorCSJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEv
RFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KKzxodG1sPgorCTxoZWFkPgorCQk8bWV0YSBo
dHRwLWVxdWl2PSJDb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYt
OCI+CisJCTx0aXRsZT5yZWxhdGl2ZTwvdGl0bGU+CisJCTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIg
bWVkaWE9InNjcmVlbiI+CisJCQlib2R5IHsgbWFyZ2luOiAxcHg7IHBhZGRpbmc6IDVweDsgfQor
CQkJZGl2LnJlbGF0aXZlIHsgcG9zaXRpb246IHJlbGF0aXZlOyB0b3A6IDA7IGxlZnQ6IDA7IG1h
cmdpbjogMXB4OyBib3JkZXI6IDJweCBzb2xpZCAjMDAwOyBwYWRkaW5nOiA1cHg7IHdpZHRoOiAx
MDBweDsgaGVpZ2h0OiAxMDBweDsgYmFja2dyb3VuZDogI2ZmZjsgb3ZlcmZsb3c6IGhpZGRlbjsg
fQorCQkJI3JlbGF0aXZlLTIgeyB0b3A6IDIwcHg7IGxlZnQ6IDIwcHg7IH0KKwkJCSNtYXJrZXIg
eyBwb3NpdGlvbjogYWJzb2x1dGU7IGJvcmRlcjogMnB4IHNvbGlkICMwMDA7IHdpZHRoOiA1MHB4
OyBoZWlnaHQ6IDUwcHg7IGJhY2tncm91bmQ6ICNjY2M7IH0KKwkJPC9zdHlsZT4KKwkJPHNjcmlw
dCBzcmM9Ii4uLy4uLy4uL3NyYy9jb3JlLmpzIj48L3NjcmlwdD4KKwkJPHNjcmlwdCBzcmM9Ii4u
Ly4uLy4uL3NyYy9kZWZlcnJlZC5qcyI+PC9zY3JpcHQ+CisJCTxzY3JpcHQgc3JjPSIuLi8uLi8u
Li9zcmMvc3VwcG9ydC5qcyI+PC9zY3JpcHQ+CisJCTxzY3JpcHQgc3JjPSIuLi8uLi8uLi9zcmMv
c2l6emxlL3NpenpsZS5qcyI+PC9zY3JpcHQ+CisJCTxzY3JpcHQgc3JjPSIuLi8uLi8uLi9zcmMv
c2l6emxlLWpxdWVyeS5qcyI+PC9zY3JpcHQ+CisJCTxzY3JpcHQgc3JjPSIuLi8uLi8uLi9zcmMv
dHJhdmVyc2luZy5qcyI+PC9zY3JpcHQ+CisJCTxzY3JpcHQgc3JjPSIuLi8uLi8uLi9zcmMvZGF0
YS5qcyI+PC9zY3JpcHQ+CisJCTxzY3JpcHQgc3JjPSIuLi8uLi8uLi9zcmMvZXZlbnQuanMiPjwv
c2NyaXB0PgorCQk8c2NyaXB0IHNyYz0iLi4vLi4vLi4vc3JjL2Nzcy5qcyI+PC9zY3JpcHQ+CisJ
CTxzY3JpcHQgc3JjPSIuLi8uLi8uLi9zcmMvb2Zmc2V0LmpzIj48L3NjcmlwdD4KKwkJPHNjcmlw
dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KKwkJCWpRdWVyeShmdW5j
dGlvbigkKSB7CisJCQkJJCgnLnJlbGF0aXZlJykuY2xpY2soZnVuY3Rpb24oKSB7CisJCQkJCSQo
JyNtYXJrZXInKS5jc3MoICQodGhpcykub2Zmc2V0KCkgKTsKKwkJCQkJdmFyIHBvcyA9ICQodGhp
cykucG9zaXRpb24oKTsKKwkJCQkJJCh0aGlzKS5jc3MoeyBwb3NpdGlvbjogJ2Fic29sdXRlJywg
dG9wOiBwb3MudG9wLCBsZWZ0OiBwb3MubGVmdCB9KTsKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJ
CX0pOworCQkJfSk7CisJCTwvc2NyaXB0PgorCTwvaGVhZD4KKwk8Ym9keT4KKwkJPGRpdiBpZD0i
cmVsYXRpdmUtMSIgY2xhc3M9InJlbGF0aXZlIj48ZGl2IGlkPSJyZWxhdGl2ZS0xLTEiIGNsYXNz
PSJyZWxhdGl2ZSI+PGRpdiBpZD0icmVsYXRpdmUtMS0xLTEiIGNsYXNzPSJyZWxhdGl2ZSI+PC9k
aXY+PC9kaXY+PC9kaXY+CisJCTxkaXYgaWQ9InJlbGF0aXZlLTIiIGNsYXNzPSJyZWxhdGl2ZSI+
PC9kaXY+CisJCTxkaXYgaWQ9Im1hcmtlciI+PC9kaXY+CisJCTxwIGNsYXNzPSJpbnN0cnVjdGlv
bnMiPkNsaWNrIHRoZSB3aGl0ZSBib3ggdG8gbW92ZSB0aGUgbWFya2VyIHRvIGl0LiBDbGlja2lu
ZyB0aGUgYm94IGFsc28gY2hhbmdlcyB0aGUgcG9zaXRpb24gdG8gYWJzb2x1dGUgKGlmIG5vdCBh
bHJlYWR5KSBhbmQgc2V0cyB0aGUgcG9zaXRpb24gYWNjb3JkaW5nIHRvIHRoZSBwb3NpdGlvbiBt
ZXRob2QuPC9wPgorCTwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91
dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9kYXRhL29mZnNldC9yZWxhdGl2ZS5odG1sCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB5ZXMKCkluZGV4OiBMYXlvdXRUZXN0cy9q
cXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS9vZmZzZXQvc2Nyb2xsLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L2RhdGEvb2Zmc2V0L3Njcm9sbC5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L2Rh
dGEvb2Zmc2V0L3Njcm9sbC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACis8IURP
Q1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VO
IgorCSJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwu
ZHRkIj4KKzxodG1sPgorCTxoZWFkPgorCQk8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LXR5cGUi
IGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+CisJCTx0aXRsZT5zY3JvbGw8L3Rp
dGxlPgorCQk8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgorCQkJYm9keSB7
IG1hcmdpbjogMXB4OyBwYWRkaW5nOiA1cHg7IH0KKwkJCWRpdi5zY3JvbGwgeyBwb3NpdGlvbjog
cmVsYXRpdmU7IG1hcmdpbjogMXB4OyBib3JkZXI6IDJweCBzb2xpZCAjMDAwOyBwYWRkaW5nOiA1
cHg7IHdpZHRoOiAxMDBweDsgaGVpZ2h0OiAxMDBweDsgYmFja2dyb3VuZDogI2ZmZjsgb3ZlcmZs
b3c6IGF1dG87IH0KKwkJCSNzY3JvbGwtMSB7IHRvcDogMDsgbGVmdDogMDsgfQorCQkJCSNzY3Jv
bGwtMS0xIHsgdG9wOiAxcHg7IGxlZnQ6IDFweDsgfQorCQkJCQkjc2Nyb2xsLTEtMS0xIHsgdG9w
OiAxcHg7IGxlZnQ6IDFweDsgfQorCQkJI2ZvcmNlU2Nyb2xsIHsgd2lkdGg6IDUwMDBweDsgaGVp
Z2h0OiA1MDAwcHg7IH0KKwkJCSNtYXJrZXIgeyBwb3NpdGlvbjogYWJzb2x1dGU7IGJvcmRlcjog
MnB4IHNvbGlkICMwMDA7IHdpZHRoOiA1MHB4OyBoZWlnaHQ6IDUwcHg7IGJhY2tncm91bmQ6ICNj
Y2M7IH0KKwkJPC9zdHlsZT4KKwkJPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3NyYy9jb3JlLmpzIj48
L3NjcmlwdD4KKwkJPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3NyYy9kZWZlcnJlZC5qcyI+PC9zY3Jp
cHQ+CisJCTxzY3JpcHQgc3JjPSIuLi8uLi8uLi9zcmMvc3VwcG9ydC5qcyI+PC9zY3JpcHQ+CisJ
CTxzY3JpcHQgc3JjPSIuLi8uLi8uLi9zcmMvc2l6emxlL3NpenpsZS5qcyI+PC9zY3JpcHQ+CisJ
CTxzY3JpcHQgc3JjPSIuLi8uLi8uLi9zcmMvc2l6emxlLWpxdWVyeS5qcyI+PC9zY3JpcHQ+CisJ
CTxzY3JpcHQgc3JjPSIuLi8uLi8uLi9zcmMvdHJhdmVyc2luZy5qcyI+PC9zY3JpcHQ+CisJCTxz
Y3JpcHQgc3JjPSIuLi8uLi8uLi9zcmMvZGF0YS5qcyI+PC9zY3JpcHQ+CisJCTxzY3JpcHQgc3Jj
PSIuLi8uLi8uLi9zcmMvZXZlbnQuanMiPjwvc2NyaXB0PgorCQk8c2NyaXB0IHNyYz0iLi4vLi4v
Li4vc3JjL2Nzcy5qcyI+PC9zY3JpcHQ+CisJCTxzY3JpcHQgc3JjPSIuLi8uLi8uLi9zcmMvb2Zm
c2V0LmpzIj48L3NjcmlwdD4KKwkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJz
ZXQ9InV0Zi04Ij4KKwkJCWpRdWVyeShmdW5jdGlvbigkKSB7CisJCQkJd2luZG93LnNjcm9sbFRv
KDEwMDAsMTAwMCk7CisJCQkJJCgnI3Njcm9sbC0xJylbMF0uc2Nyb2xsTGVmdCA9IDU7CisJCQkJ
JCgnI3Njcm9sbC0xJylbMF0uc2Nyb2xsVG9wID0gNTsKKwkJCQkkKCcuc2Nyb2xsJykuY2xpY2so
ZnVuY3Rpb24oKSB7CisJCQkJCSQoJyNtYXJrZXInKS5jc3MoICQodGhpcykub2Zmc2V0KCkgKTsK
KwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0pOworCQkJfSk7CisJCTwvc2NyaXB0PgorCTwvaGVh
ZD4KKwk8Ym9keT4KKwkJPGRpdiBpZD0ic2Nyb2xsLTEiIGNsYXNzPSJzY3JvbGwiPgorCQkJPGRp
diBpZD0ic2Nyb2xsLTEtMSIgY2xhc3M9InNjcm9sbCI+CisJCQkJPGRpdiBpZD0ic2Nyb2xsLTEt
MS0xIiBjbGFzcz0ic2Nyb2xsIj48L2Rpdj4KKwkJCTwvZGl2PgorCQk8L2Rpdj4KKwkJPGRpdiBp
ZD0iZm9yY2VTY3JvbGwiPjwvZGl2PgorCQk8ZGl2IGlkPSJtYXJrZXIiPjwvZGl2PgorCQk8cCBj
bGFzcz0iaW5zdHJ1Y3Rpb25zIj5DbGljayB0aGUgd2hpdGUgYm94IHRvIG1vdmUgdGhlIG1hcmtl
ciB0byBpdC48L3A+CisJPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5
b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L2RhdGEvb2Zmc2V0L3Njcm9sbC5odG1sCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB5ZXMKCkluZGV4OiBMYXlvdXRUZXN0cy9q
cXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS9vZmZzZXQvc3RhdGljLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L2RhdGEvb2Zmc2V0L3N0YXRpYy5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L2Rh
dGEvb2Zmc2V0L3N0YXRpYy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQwIEBACis8IURP
Q1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VO
IgorCSJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwu
ZHRkIj4KKzxodG1sPgorCTxoZWFkPgorCQk8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LXR5cGUi
IGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+CisJCTx0aXRsZT5zdGF0aWM8L3Rp
dGxlPgorCQk8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgorCQkJYm9keSB7
IG1hcmdpbjogMXB4OyBwYWRkaW5nOiA1cHg7IH0KKwkJCWRpdi5zdGF0aWMgeyBwb3NpdGlvbjog
c3RhdGljOyB0b3A6IDA7IGxlZnQ6IDA7IG1hcmdpbjogMXB4OyBib3JkZXI6IDJweCBzb2xpZCAj
MDAwOyBwYWRkaW5nOiA1cHg7IHdpZHRoOiAxMDBweDsgaGVpZ2h0OiAxMDBweDsgYmFja2dyb3Vu
ZDogI2ZmZjsgb3ZlcmZsb3c6IGhpZGRlbjsgfQorCQkJI3N0YXRpYy0yIHsgdG9wOiAyMHB4OyBs
ZWZ0OiAyMHB4OyB9CisJCQkjbWFya2VyIHsgcG9zaXRpb246IGFic29sdXRlOyBib3JkZXI6IDJw
eCBzb2xpZCAjMDAwOyB3aWR0aDogNTBweDsgaGVpZ2h0OiA1MHB4OyBiYWNrZ3JvdW5kOiAjY2Nj
OyB9CisJCTwvc3R5bGU+CisJCTxzY3JpcHQgc3JjPSIuLi8uLi8uLi9zcmMvY29yZS5qcyI+PC9z
Y3JpcHQ+CisJCTxzY3JpcHQgc3JjPSIuLi8uLi8uLi9zcmMvZGVmZXJyZWQuanMiPjwvc2NyaXB0
PgorCQk8c2NyaXB0IHNyYz0iLi4vLi4vLi4vc3JjL3N1cHBvcnQuanMiPjwvc2NyaXB0PgorCQk8
c2NyaXB0IHNyYz0iLi4vLi4vLi4vc3JjL3NpenpsZS9zaXp6bGUuanMiPjwvc2NyaXB0PgorCQk8
c2NyaXB0IHNyYz0iLi4vLi4vLi4vc3JjL3NpenpsZS1qcXVlcnkuanMiPjwvc2NyaXB0PgorCQk8
c2NyaXB0IHNyYz0iLi4vLi4vLi4vc3JjL3RyYXZlcnNpbmcuanMiPjwvc2NyaXB0PgorCQk8c2Ny
aXB0IHNyYz0iLi4vLi4vLi4vc3JjL2RhdGEuanMiPjwvc2NyaXB0PgorCQk8c2NyaXB0IHNyYz0i
Li4vLi4vLi4vc3JjL2V2ZW50LmpzIj48L3NjcmlwdD4KKwkJPHNjcmlwdCBzcmM9Ii4uLy4uLy4u
L3NyYy9jc3MuanMiPjwvc2NyaXB0PgorCQk8c2NyaXB0IHNyYz0iLi4vLi4vLi4vc3JjL29mZnNl
dC5qcyI+PC9zY3JpcHQ+CisJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0
PSJ1dGYtOCI+CisJCQlqUXVlcnkoZnVuY3Rpb24oJCkgeworCQkJCSQoJy5zdGF0aWMnKS5jbGlj
ayhmdW5jdGlvbigpIHsKKwkJCQkJJCgnI21hcmtlcicpLmNzcyggJCh0aGlzKS5vZmZzZXQoKSAp
OworCQkJCQl2YXIgcG9zID0gJCh0aGlzKS5wb3NpdGlvbigpOworCQkJCQkkKHRoaXMpLmNzcyh7
IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCB0b3A6IHBvcy50b3AsIGxlZnQ6IHBvcy5sZWZ0IH0pOwor
CQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfSk7CisJCQl9KTsKKwkJPC9zY3JpcHQ+CisJPC9oZWFk
PgorCTxib2R5PgorCQk8ZGl2IGlkPSJzdGF0aWMtMSIgY2xhc3M9InN0YXRpYyI+PGRpdiBpZD0i
c3RhdGljLTEtMSIgY2xhc3M9InN0YXRpYyI+PGRpdiBpZD0ic3RhdGljLTEtMS0xIiBjbGFzcz0i
c3RhdGljIj48L2Rpdj48L2Rpdj48L2Rpdj4KKwkJPGRpdiBpZD0ic3RhdGljLTIiIGNsYXNzPSJz
dGF0aWMiPjwvZGl2PgorCQk8ZGl2IGlkPSJtYXJrZXIiPjwvZGl2PgorCQk8cCBjbGFzcz0iaW5z
dHJ1Y3Rpb25zIj5DbGljayB0aGUgd2hpdGUgYm94IHRvIG1vdmUgdGhlIG1hcmtlciB0byBpdC4g
Q2xpY2tpbmcgdGhlIGJveCBhbHNvIGNoYW5nZXMgdGhlIHBvc2l0aW9uIHRvIGFic29sdXRlIChp
ZiBub3QgYWxyZWFkeSkgYW5kIHNldHMgdGhlIHBvc2l0aW9uIGFjY29yZGluZyB0byB0aGUgcG9z
aXRpb24gbWV0aG9kLjwvcD4KKwk8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS9vZmZzZXQvc3RhdGljLmh0
bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICArIHllcwoKSW5kZXg6IExheW91dFRl
c3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9kYXRhL29mZnNldC90YWJsZS5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9kYXRhL29mZnNldC90YWJs
ZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0
L2RhdGEvb2Zmc2V0L3RhYmxlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTIgQEAKKzwh
RE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8v
RU4iCisJImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25h
bC5kdGQiPgorPGh0bWw+CisJPGhlYWQ+CisJCTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtdHlw
ZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKwkJPHRpdGxlPnRhYmxlPC90
aXRsZT4KKwkJPHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KKwkJCWJvZHkg
eyBtYXJnaW46IDFweDsgcGFkZGluZzogNXB4OyB9CisJCQl0YWJsZSB7IGJvcmRlcjogMnB4IHNv
bGlkICMwMDA7IH0KKwkJCXRoLCB0ZCB7IGJvcmRlcjogMXB4IHNvbGlkICMwMDA7IHdpZHRoOiAx
MDBweDsgaGVpZ2h0OiAxMDBweDsgfQorCQkJI21hcmtlciB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsg
Ym9yZGVyOiAycHggc29saWQgIzAwMDsgd2lkdGg6IDUwcHg7IGhlaWdodDogNTBweDsgYmFja2dy
b3VuZDogI2NjYzsgfQorCQk8L3N0eWxlPgorCQk8c2NyaXB0IHNyYz0iLi4vLi4vLi4vc3JjL2Nv
cmUuanMiPjwvc2NyaXB0PgorCQk8c2NyaXB0IHNyYz0iLi4vLi4vLi4vc3JjL2RlZmVycmVkLmpz
Ij48L3NjcmlwdD4KKwkJPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3NyYy9zdXBwb3J0LmpzIj48L3Nj
cmlwdD4KKwkJPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3NyYy9zaXp6bGUvc2l6emxlLmpzIj48L3Nj
cmlwdD4KKwkJPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3NyYy9zaXp6bGUtanF1ZXJ5LmpzIj48L3Nj
cmlwdD4KKwkJPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3NyYy90cmF2ZXJzaW5nLmpzIj48L3Njcmlw
dD4KKwkJPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL3NyYy9kYXRhLmpzIj48L3NjcmlwdD4KKwkJPHNj
cmlwdCBzcmM9Ii4uLy4uLy4uL3NyYy9ldmVudC5qcyI+PC9zY3JpcHQ+CisJCTxzY3JpcHQgc3Jj
PSIuLi8uLi8uLi9zcmMvY3NzLmpzIj48L3NjcmlwdD4KKwkJPHNjcmlwdCBzcmM9Ii4uLy4uLy4u
L3NyYy9vZmZzZXQuanMiPjwvc2NyaXB0PgorCQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCIgY2hhcnNldD0idXRmLTgiPgorCQkJalF1ZXJ5KGZ1bmN0aW9uKCQpIHsKKwkJCQkkKCd0YWJs
ZSwgdGgsIHRkJykuY2xpY2soZnVuY3Rpb24oKSB7CisJCQkJCSQoJyNtYXJrZXInKS5jc3MoICQo
dGhpcykub2Zmc2V0KCkgKTsKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0pOworCQkJfSk7CisJ
CTwvc2NyaXB0PgorCTwvaGVhZD4KKwk8Ym9keT4KKwkJPHRhYmxlIGlkPSJ0YWJsZS0xIj4KKwkJ
CTx0aGVhZD4KKwkJCQk8dHIgdmFsaWduPSJ0b3AiPgorCQkJCQk8dGggaWQ9InRoLTEiPnRoLTE8
L3RoPgorCQkJCQk8dGggaWQ9InRoLTIiPnRoLTI8L3RoPgorCQkJCQk8dGggaWQ9InRoLTMiPnRo
LTM8L3RoPgorCQkJCTwvdHI+CisJCQk8L3RoZWFkPgorCQkJPHRib2R5PgorCQkJCTx0ciB2YWxp
Z249InRvcCI+CisJCQkJCTx0ZCBpZD0idGQtMSI+dGQtMTwvdGQ+CisJCQkJCTx0ZCBpZD0idGQt
MiI+dGQtMjwvdGQ+CisJCQkJCTx0ZCBpZD0idGQtMyI+dGQtMzwvdGQ+CisJCQkJPC90cj4KKwkJ
CTwvdGJvZHk+CisJCTwvdGFibGU+CisJCTxkaXYgaWQ9Im1hcmtlciI+PC9kaXY+CisJCTxwIGNs
YXNzPSJpbnN0cnVjdGlvbnMiPkNsaWNrIHRoZSB3aGl0ZSBib3ggdG8gbW92ZSB0aGUgbWFya2Vy
IHRvIGl0LjwvcD4KKwk8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlv
dXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvZGF0YS9vZmZzZXQvdGFibGUuaHRtbApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBhbGxvdy10YWJzCiAgICsgeWVzCgpJbmRleDogTGF5b3V0VGVzdHMvanF1
ZXJ5L3Jlc291cmNlcy90ZXN0L3F1bml0Ly5naXRpZ25vcmUKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L3F1bml0Ly5naXRpZ25vcmUJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvcXVuaXQvLmdpdGlnbm9yZQko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw2IEBACisucHJvamVjdAorKn4KKyouZGlmZgorKi5wYXRj
aAorLkRTX1N0b3JlCisKSW5kZXg6IExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9x
dW5pdC9xdW5pdC9xdW5pdC5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanF1ZXJ5L3Jl
c291cmNlcy90ZXN0L3F1bml0L3F1bml0L3F1bml0LmNzcwkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9xdW5pdC9xdW5pdC9xdW5pdC5jc3MJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjA1IEBACisvKiogRm9udCBGYW1pbHkgYW5kIFNpemVzICovCisK
KyNxdW5pdC10ZXN0cywgI3F1bml0LWhlYWRlciwgI3F1bml0LWJhbm5lciwgI3F1bml0LXRlc3Ry
dW5uZXItdG9vbGJhciwgI3F1bml0LXVzZXJBZ2VudCwgI3F1bml0LXRlc3RyZXN1bHQgeworCWZv
bnQtZmFtaWx5OiAiSGVsdmV0aWNhIE5ldWUgTGlnaHQiLCAiSGVsdmV0aWNhTmV1ZS1MaWdodCIs
ICJIZWx2ZXRpY2EgTmV1ZSIsIENhbGlicmksIEhlbHZldGljYSwgQXJpYWw7Cit9CisKKyNxdW5p
dC10ZXN0cnVubmVyLXRvb2xiYXIsICNxdW5pdC11c2VyQWdlbnQsICNxdW5pdC10ZXN0cmVzdWx0
LCAjcXVuaXQtdGVzdHMgbGkgeyBmb250LXNpemU6IHNtYWxsOyB9CisjcXVuaXQtdGVzdHMgeyBm
b250LXNpemU6IHNtYWxsZXI7IH0KKworCisvKiogUmVzZXRzICovCisKKyNxdW5pdC10ZXN0cywg
I3F1bml0LXRlc3RzIG9sLCAjcXVuaXQtaGVhZGVyLCAjcXVuaXQtYmFubmVyLCAjcXVuaXQtdXNl
ckFnZW50LCAjcXVuaXQtdGVzdHJlc3VsdCB7CisJbWFyZ2luOiAwOworCXBhZGRpbmc6IDA7Cit9
CisKKworLyoqIEhlYWRlciAqLworCisjcXVuaXQtaGVhZGVyIHsKKwlwYWRkaW5nOiAwLjVlbSAw
IDAuNWVtIDFlbTsKKworCWNvbG9yOiAjODY5OWE0OworCWJhY2tncm91bmQtY29sb3I6ICMwZDMz
NDk7CisKKwlmb250LXNpemU6IDEuNWVtOworCWxpbmUtaGVpZ2h0OiAxZW07CisJZm9udC13ZWln
aHQ6IG5vcm1hbDsKKwkKKwlib3JkZXItcmFkaXVzOiAxNXB4IDE1cHggMCAwOworCS1tb3otYm9y
ZGVyLXJhZGl1czogMTVweCAxNXB4IDAgMDsKKwktd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFk
aXVzOiAxNXB4OworCS13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMTVweDsKK30KKwor
I3F1bml0LWhlYWRlciBhIHsKKwl0ZXh0LWRlY29yYXRpb246IG5vbmU7CisJY29sb3I6ICNjMmNj
ZDE7Cit9CisKKyNxdW5pdC1oZWFkZXIgYTpob3ZlciwKKyNxdW5pdC1oZWFkZXIgYTpmb2N1cyB7
CisJY29sb3I6ICNmZmY7Cit9CisKKyNxdW5pdC1iYW5uZXIgeworCWhlaWdodDogNXB4OworfQor
CisjcXVuaXQtdGVzdHJ1bm5lci10b29sYmFyIHsKKwlwYWRkaW5nOiAwLjVlbSAwIDAuNWVtIDJl
bTsKKwljb2xvcjogIzVFNzQwQjsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworfQorCisjcXVu
aXQtdXNlckFnZW50IHsKKwlwYWRkaW5nOiAwLjVlbSAwIDAuNWVtIDIuNWVtOworCWJhY2tncm91
bmQtY29sb3I6ICMyYjgxYWY7CisJY29sb3I6ICNmZmY7CisJdGV4dC1zaGFkb3c6IHJnYmEoMCwg
MCwgMCwgMC41KSAycHggMnB4IDFweDsKK30KKworCisvKiogVGVzdHM6IFBhc3MvRmFpbCAqLwor
CisjcXVuaXQtdGVzdHMgeworCWxpc3Qtc3R5bGUtcG9zaXRpb246IGluc2lkZTsKK30KKworI3F1
bml0LXRlc3RzIGxpIHsKKwlwYWRkaW5nOiAwLjRlbSAwLjVlbSAwLjRlbSAyLjVlbTsKKwlib3Jk
ZXItYm90dG9tOiAxcHggc29saWQgI2ZmZjsKKwlsaXN0LXN0eWxlLXBvc2l0aW9uOiBpbnNpZGU7
Cit9CisKKyNxdW5pdC10ZXN0cy5oaWRlcGFzcyBsaS5wYXNzLCAjcXVuaXQtdGVzdHMuaGlkZXBh
c3MgbGkucnVubmluZyAgeworCWRpc3BsYXk6IG5vbmU7Cit9CisKKyNxdW5pdC10ZXN0cyBsaSBz
dHJvbmcgeworCWN1cnNvcjogcG9pbnRlcjsKK30KKworI3F1bml0LXRlc3RzIG9sIHsKKwltYXJn
aW4tdG9wOiAwLjVlbTsKKwlwYWRkaW5nOiAwLjVlbTsKKwkKKwliYWNrZ3JvdW5kLWNvbG9yOiAj
ZmZmOworCQorCWJvcmRlci1yYWRpdXM6IDE1cHg7CisJLW1vei1ib3JkZXItcmFkaXVzOiAxNXB4
OworCS13ZWJraXQtYm9yZGVyLXJhZGl1czogMTVweDsKKwkKKwlib3gtc2hhZG93OiBpbnNldCAw
cHggMnB4IDEzcHggIzk5OTsKKwktbW96LWJveC1zaGFkb3c6IGluc2V0IDBweCAycHggMTNweCAj
OTk5OworCS13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMHB4IDJweCAxM3B4ICM5OTk7Cit9CisK
KyNxdW5pdC10ZXN0cyB0YWJsZSB7CisJYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKKwltYXJn
aW4tdG9wOiAuMmVtOworfQorCisjcXVuaXQtdGVzdHMgdGggeworCXRleHQtYWxpZ246IHJpZ2h0
OworCXZlcnRpY2FsLWFsaWduOiB0b3A7CisJcGFkZGluZzogMCAuNWVtIDAgMDsKK30KKworI3F1
bml0LXRlc3RzIHRkIHsKKwl2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCisjcXVuaXQtdGVzdHMg
cHJlIHsKKwltYXJnaW46IDA7CisJd2hpdGUtc3BhY2U6IHByZS13cmFwOworCXdvcmQtd3JhcDog
YnJlYWstd29yZDsKK30KKworI3F1bml0LXRlc3RzIGRlbCB7CisJYmFja2dyb3VuZC1jb2xvcjog
I2UwZjJiZTsKKwljb2xvcjogIzM3NGUwYzsKKwl0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisK
KyNxdW5pdC10ZXN0cyBpbnMgeworCWJhY2tncm91bmQtY29sb3I6ICNmZmNhY2E7CisJY29sb3I6
ICM1MDA7CisJdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorCisvKioqIFRlc3QgQ291bnRzICov
CisKKyNxdW5pdC10ZXN0cyBiLmNvdW50cyAgICAgICAgICAgICAgICAgICAgICAgeyBjb2xvcjog
YmxhY2s7IH0KKyNxdW5pdC10ZXN0cyBiLnBhc3NlZCAgICAgICAgICAgICAgICAgICAgICAgeyBj
b2xvcjogIzVFNzQwQjsgfQorI3F1bml0LXRlc3RzIGIuZmFpbGVkICAgICAgICAgICAgICAgICAg
ICAgICB7IGNvbG9yOiAjNzEwOTA5OyB9CisKKyNxdW5pdC10ZXN0cyBsaSBsaSB7CisJbWFyZ2lu
OiAwLjVlbTsKKwlwYWRkaW5nOiAwLjRlbSAwLjVlbSAwLjRlbSAwLjVlbTsKKwliYWNrZ3JvdW5k
LWNvbG9yOiAjZmZmOworCWJvcmRlci1ib3R0b206IG5vbmU7CisJbGlzdC1zdHlsZS1wb3NpdGlv
bjogaW5zaWRlOworfQorCisvKioqIFBhc3NpbmcgU3R5bGVzICovCisKKyNxdW5pdC10ZXN0cyBs
aSBsaS5wYXNzIHsKKwljb2xvcjogIzVFNzQwQjsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwor
CWJvcmRlci1sZWZ0OiAyNnB4IHNvbGlkICNDNkU3NDY7Cit9CisKKyNxdW5pdC10ZXN0cyAucGFz
cyAgICAgICAgICAgICAgICAgICAgICAgICAgeyBjb2xvcjogIzUyOENFMDsgYmFja2dyb3VuZC1j
b2xvcjogI0QyRTBFNjsgfQorI3F1bml0LXRlc3RzIC5wYXNzIC50ZXN0LW5hbWUgICAgICAgICAg
ICAgICB7IGNvbG9yOiAjMzY2MDk3OyB9CisgCisjcXVuaXQtdGVzdHMgLnBhc3MgLnRlc3QtYWN0
dWFsLAorI3F1bml0LXRlc3RzIC5wYXNzIC50ZXN0LWV4cGVjdGVkICAgICAgICAgICB7IGNvbG9y
OiAjOTk5OTk5OyB9CisKKyNxdW5pdC1iYW5uZXIucXVuaXQtcGFzcyAgICAgICAgICAgICAgICAg
ICAgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjQzZFNzQ2OyB9CisKKy8qKiogRmFpbGluZyBTdHlsZXMg
Ki8KKworI3F1bml0LXRlc3RzIGxpIGxpLmZhaWwgeworCWNvbG9yOiAjNzEwOTA5OworCWJhY2tn
cm91bmQtY29sb3I6ICNmZmY7CisJYm9yZGVyLWxlZnQ6IDI2cHggc29saWQgI0VFNTc1NzsKK30K
KworI3F1bml0LXRlc3RzID4gbGk6bGFzdC1jaGlsZCB7CisJYm9yZGVyLXJhZGl1czogMCAwIDE1
cHggMTVweDsKKwktbW96LWJvcmRlci1yYWRpdXM6IDAgMCAxNXB4IDE1cHg7CisJLXdlYmtpdC1i
b3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMTVweDsKKwktd2Via2l0LWJvcmRlci1ib3R0b20t
bGVmdC1yYWRpdXM6IDE1cHg7Cit9CisKKyNxdW5pdC10ZXN0cyAuZmFpbCAgICAgICAgICAgICAg
ICAgICAgICAgICAgeyBjb2xvcjogIzAwMDAwMDsgYmFja2dyb3VuZC1jb2xvcjogI0VFNTc1Nzsg
fQorI3F1bml0LXRlc3RzIC5mYWlsIC50ZXN0LW5hbWUsCisjcXVuaXQtdGVzdHMgLmZhaWwgLm1v
ZHVsZS1uYW1lICAgICAgICAgICAgIHsgY29sb3I6ICMwMDAwMDA7IH0KKworI3F1bml0LXRlc3Rz
IC5mYWlsIC50ZXN0LWFjdHVhbCAgICAgICAgICAgICB7IGNvbG9yOiAjRUU1NzU3OyB9CisjcXVu
aXQtdGVzdHMgLmZhaWwgLnRlc3QtZXhwZWN0ZWQgICAgICAgICAgIHsgY29sb3I6IGdyZWVuOyAg
IH0KKworI3F1bml0LWJhbm5lci5xdW5pdC1mYWlsICAgICAgICAgICAgICAgICAgICB7IGJhY2tn
cm91bmQtY29sb3I6ICNFRTU3NTc7IH0KKworCisvKiogUmVzdWx0ICovCisKKyNxdW5pdC10ZXN0
cmVzdWx0IHsKKwlwYWRkaW5nOiAwLjVlbSAwLjVlbSAwLjVlbSAyLjVlbTsKKworCWNvbG9yOiAj
MmI4MWFmOworCWJhY2tncm91bmQtY29sb3I6ICNEMkUwRTY7CisKKwlib3JkZXItYm90dG9tOiAx
cHggc29saWQgd2hpdGU7Cit9CisKKy8qKiBGaXh0dXJlICovCisKKyNxdW5pdC1maXh0dXJlIHsK
Kwlwb3NpdGlvbjogYWJzb2x1dGU7CisJdG9wOiAtMTAwMDBweDsKKwlsZWZ0OiAtMTAwMDBweDsK
K30KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVz
dC9xdW5pdC9xdW5pdC9xdW5pdC5jc3MKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICAr
IHllcwoKSW5kZXg6IExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC9xdW5pdC9xdW5p
dC9xdW5pdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rl
c3QvcXVuaXQvcXVuaXQvcXVuaXQuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcXVl
cnkvcmVzb3VyY2VzL3Rlc3QvcXVuaXQvcXVuaXQvcXVuaXQuanMJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTQzMCBAQAorLyoKKyAqIFFVbml0IC0gQSBKYXZhU2NyaXB0IFVuaXQgVGVzdGluZyBG
cmFtZXdvcmsKKyAqIAorICogaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9RVW5pdAorICoKKyAqIENv
cHlyaWdodCAoYykgMjAxMSBKb2huIFJlc2lnLCBKw7ZybiBaYWVmZmVyZXIKKyAqIER1YWwgbGlj
ZW5zZWQgdW5kZXIgdGhlIE1JVCAoTUlULUxJQ0VOU0UudHh0KQorICogb3IgR1BMIChHUEwtTElD
RU5TRS50eHQpIGxpY2Vuc2VzLgorICovCisKKyhmdW5jdGlvbih3aW5kb3cpIHsKKwordmFyIGRl
ZmluZWQgPSB7CisJc2V0VGltZW91dDogdHlwZW9mIHdpbmRvdy5zZXRUaW1lb3V0ICE9PSAidW5k
ZWZpbmVkIiwKKwlzZXNzaW9uU3RvcmFnZTogKGZ1bmN0aW9uKCkgeworCQl0cnkgeworCQkJcmV0
dXJuICEhc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbTsKKwkJfSBjYXRjaChlKXsKKwkJCXJldHVybiBm
YWxzZTsKKwkJfQorICB9KSgpCit9OworCit2YXIgdGVzdElkID0gMDsKKwordmFyIFRlc3QgPSBm
dW5jdGlvbihuYW1lLCB0ZXN0TmFtZSwgZXhwZWN0ZWQsIHRlc3RFbnZpcm9ubWVudEFyZywgYXN5
bmMsIGNhbGxiYWNrKSB7CisJdGhpcy5uYW1lID0gbmFtZTsKKwl0aGlzLnRlc3ROYW1lID0gdGVz
dE5hbWU7CisJdGhpcy5leHBlY3RlZCA9IGV4cGVjdGVkOworCXRoaXMudGVzdEVudmlyb25tZW50
QXJnID0gdGVzdEVudmlyb25tZW50QXJnOworCXRoaXMuYXN5bmMgPSBhc3luYzsKKwl0aGlzLmNh
bGxiYWNrID0gY2FsbGJhY2s7CisJdGhpcy5hc3NlcnRpb25zID0gW107Cit9OworVGVzdC5wcm90
b3R5cGUgPSB7CisJaW5pdDogZnVuY3Rpb24oKSB7CisJCXZhciB0ZXN0cyA9IGlkKCJxdW5pdC10
ZXN0cyIpOworCQlpZiAodGVzdHMpIHsKKwkJCXZhciBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgic3Ryb25nIik7CisJCQkJYi5pbm5lckhUTUwgPSAiUnVubmluZyAiICsgdGhpcy5uYW1lOwor
CQkJdmFyIGxpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGkiKTsKKwkJCQlsaS5hcHBlbmRD
aGlsZCggYiApOworCQkJCWxpLmNsYXNzTmFtZSA9ICJydW5uaW5nIjsKKwkJCQlsaS5pZCA9IHRo
aXMuaWQgPSAidGVzdC1vdXRwdXQiICsgdGVzdElkKys7CisJCQl0ZXN0cy5hcHBlbmRDaGlsZCgg
bGkgKTsKKwkJfQorCX0sCisJc2V0dXA6IGZ1bmN0aW9uKCkgeworCQlpZiAodGhpcy5tb2R1bGUg
IT0gY29uZmlnLnByZXZpb3VzTW9kdWxlKSB7CisJCQlpZiAoIGNvbmZpZy5wcmV2aW91c01vZHVs
ZSApIHsKKwkJCQlRVW5pdC5tb2R1bGVEb25lKCB7CisJCQkJCW5hbWU6IGNvbmZpZy5wcmV2aW91
c01vZHVsZSwKKwkJCQkJZmFpbGVkOiBjb25maWcubW9kdWxlU3RhdHMuYmFkLAorCQkJCQlwYXNz
ZWQ6IGNvbmZpZy5tb2R1bGVTdGF0cy5hbGwgLSBjb25maWcubW9kdWxlU3RhdHMuYmFkLAorCQkJ
CQl0b3RhbDogY29uZmlnLm1vZHVsZVN0YXRzLmFsbAorCQkJCX0gKTsKKwkJCX0KKwkJCWNvbmZp
Zy5wcmV2aW91c01vZHVsZSA9IHRoaXMubW9kdWxlOworCQkJY29uZmlnLm1vZHVsZVN0YXRzID0g
eyBhbGw6IDAsIGJhZDogMCB9OworCQkJUVVuaXQubW9kdWxlU3RhcnQoIHsKKwkJCQluYW1lOiB0
aGlzLm1vZHVsZQorCQkJfSApOworCQl9CisKKwkJY29uZmlnLmN1cnJlbnQgPSB0aGlzOworCQl0
aGlzLnRlc3RFbnZpcm9ubWVudCA9IGV4dGVuZCh7CisJCQlzZXR1cDogZnVuY3Rpb24oKSB7fSwK
KwkJCXRlYXJkb3duOiBmdW5jdGlvbigpIHt9CisJCX0sIHRoaXMubW9kdWxlVGVzdEVudmlyb25t
ZW50KTsKKwkJaWYgKHRoaXMudGVzdEVudmlyb25tZW50QXJnKSB7CisJCQlleHRlbmQodGhpcy50
ZXN0RW52aXJvbm1lbnQsIHRoaXMudGVzdEVudmlyb25tZW50QXJnKTsKKwkJfQorCisJCVFVbml0
LnRlc3RTdGFydCggeworCQkJbmFtZTogdGhpcy50ZXN0TmFtZQorCQl9ICk7CisKKwkJLy8gYWxs
b3cgdXRpbGl0eSBmdW5jdGlvbnMgdG8gYWNjZXNzIHRoZSBjdXJyZW50IHRlc3QgZW52aXJvbm1l
bnQKKwkJLy8gVE9ETyB3aHk/PworCQlRVW5pdC5jdXJyZW50X3Rlc3RFbnZpcm9ubWVudCA9IHRo
aXMudGVzdEVudmlyb25tZW50OworCQkKKwkJdHJ5IHsKKwkJCWlmICggIWNvbmZpZy5wb2xsdXRp
b24gKSB7CisJCQkJc2F2ZUdsb2JhbCgpOworCQkJfQorCisJCQl0aGlzLnRlc3RFbnZpcm9ubWVu
dC5zZXR1cC5jYWxsKHRoaXMudGVzdEVudmlyb25tZW50KTsKKwkJfSBjYXRjaChlKSB7CisJCQlR
VW5pdC5vayggZmFsc2UsICJTZXR1cCBmYWlsZWQgb24gIiArIHRoaXMudGVzdE5hbWUgKyAiOiAi
ICsgZS5tZXNzYWdlICk7CisJCX0KKwl9LAorCXJ1bjogZnVuY3Rpb24oKSB7CisJCWlmICggdGhp
cy5hc3luYyApIHsKKwkJCVFVbml0LnN0b3AoKTsKKwkJfQorCisJCWlmICggY29uZmlnLm5vdHJ5
Y2F0Y2ggKSB7CisJCQl0aGlzLmNhbGxiYWNrLmNhbGwodGhpcy50ZXN0RW52aXJvbm1lbnQpOwor
CQkJcmV0dXJuOworCQl9CisJCXRyeSB7CisJCQl0aGlzLmNhbGxiYWNrLmNhbGwodGhpcy50ZXN0
RW52aXJvbm1lbnQpOworCQl9IGNhdGNoKGUpIHsKKwkJCWZhaWwoIlRlc3QgIiArIHRoaXMudGVz
dE5hbWUgKyAiIGRpZWQsIGV4Y2VwdGlvbiBhbmQgdGVzdCBmb2xsb3dzIiwgZSwgdGhpcy5jYWxs
YmFjayk7CisJCQlRVW5pdC5vayggZmFsc2UsICJEaWVkIG9uIHRlc3QgIyIgKyAodGhpcy5hc3Nl
cnRpb25zLmxlbmd0aCArIDEpICsgIjogIiArIGUubWVzc2FnZSArICIgLSAiICsgUVVuaXQuanNE
dW1wLnBhcnNlKGUpICk7CisJCQkvLyBlbHNlIG5leHQgdGVzdCB3aWxsIGNhcnJ5IHRoZSByZXNw
b25zaWJpbGl0eQorCQkJc2F2ZUdsb2JhbCgpOworCisJCQkvLyBSZXN0YXJ0IHRoZSB0ZXN0cyBp
ZiB0aGV5J3JlIGJsb2NraW5nCisJCQlpZiAoIGNvbmZpZy5ibG9ja2luZyApIHsKKwkJCQlzdGFy
dCgpOworCQkJfQorCQl9CisJfSwKKwl0ZWFyZG93bjogZnVuY3Rpb24oKSB7CisJCXRyeSB7CisJ
CQljaGVja1BvbGx1dGlvbigpOworCQkJdGhpcy50ZXN0RW52aXJvbm1lbnQudGVhcmRvd24uY2Fs
bCh0aGlzLnRlc3RFbnZpcm9ubWVudCk7CisJCX0gY2F0Y2goZSkgeworCQkJUVVuaXQub2soIGZh
bHNlLCAiVGVhcmRvd24gZmFpbGVkIG9uICIgKyB0aGlzLnRlc3ROYW1lICsgIjogIiArIGUubWVz
c2FnZSApOworCQl9CisJfSwKKwlmaW5pc2g6IGZ1bmN0aW9uKCkgeworCQlpZiAoIHRoaXMuZXhw
ZWN0ZWQgJiYgdGhpcy5leHBlY3RlZCAhPSB0aGlzLmFzc2VydGlvbnMubGVuZ3RoICkgeworCQkJ
UVVuaXQub2soIGZhbHNlLCAiRXhwZWN0ZWQgIiArIHRoaXMuZXhwZWN0ZWQgKyAiIGFzc2VydGlv
bnMsIGJ1dCAiICsgdGhpcy5hc3NlcnRpb25zLmxlbmd0aCArICIgd2VyZSBydW4iICk7CisJCX0K
KwkJCisJCXZhciBnb29kID0gMCwgYmFkID0gMCwKKwkJCXRlc3RzID0gaWQoInF1bml0LXRlc3Rz
Iik7CisKKwkJY29uZmlnLnN0YXRzLmFsbCArPSB0aGlzLmFzc2VydGlvbnMubGVuZ3RoOworCQlj
b25maWcubW9kdWxlU3RhdHMuYWxsICs9IHRoaXMuYXNzZXJ0aW9ucy5sZW5ndGg7CisKKwkJaWYg
KCB0ZXN0cyApIHsKKwkJCXZhciBvbCAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvbCIpOwor
CisJCQlmb3IgKCB2YXIgaSA9IDA7IGkgPCB0aGlzLmFzc2VydGlvbnMubGVuZ3RoOyBpKysgKSB7
CisJCQkJdmFyIGFzc2VydGlvbiA9IHRoaXMuYXNzZXJ0aW9uc1tpXTsKKworCQkJCXZhciBsaSA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpIik7CisJCQkJbGkuY2xhc3NOYW1lID0gYXNzZXJ0
aW9uLnJlc3VsdCA/ICJwYXNzIiA6ICJmYWlsIjsKKwkJCQlsaS5pbm5lckhUTUwgPSBhc3NlcnRp
b24ubWVzc2FnZSB8fCAoYXNzZXJ0aW9uLnJlc3VsdCA/ICJva2F5IiA6ICJmYWlsZWQiKTsKKwkJ
CQlvbC5hcHBlbmRDaGlsZCggbGkgKTsKKworCQkJCWlmICggYXNzZXJ0aW9uLnJlc3VsdCApIHsK
KwkJCQkJZ29vZCsrOworCQkJCX0gZWxzZSB7CisJCQkJCWJhZCsrOworCQkJCQljb25maWcuc3Rh
dHMuYmFkKys7CisJCQkJCWNvbmZpZy5tb2R1bGVTdGF0cy5iYWQrKzsKKwkJCQl9CisJCQl9CisK
KwkJCS8vIHN0b3JlIHJlc3VsdCB3aGVuIHBvc3NpYmxlCisJCQlRVW5pdC5jb25maWcucmVvcmRl
ciAmJiBkZWZpbmVkLnNlc3Npb25TdG9yYWdlICYmIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oInF1
bml0LSIgKyB0aGlzLnRlc3ROYW1lLCBiYWQpOworCisJCQlpZiAoYmFkID09IDApIHsKKwkJCQlv
bC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworCQkJfQorCisJCQl2YXIgYiA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoInN0cm9uZyIpOworCQkJYi5pbm5lckhUTUwgPSB0aGlzLm5hbWUgKyAiIDxi
IGNsYXNzPSdjb3VudHMnPig8YiBjbGFzcz0nZmFpbGVkJz4iICsgYmFkICsgIjwvYj4sIDxiIGNs
YXNzPSdwYXNzZWQnPiIgKyBnb29kICsgIjwvYj4sICIgKyB0aGlzLmFzc2VydGlvbnMubGVuZ3Ro
ICsgIik8L2I+IjsKKwkJCQorCQkJYWRkRXZlbnQoYiwgImNsaWNrIiwgZnVuY3Rpb24oKSB7CisJ
CQkJdmFyIG5leHQgPSBiLm5leHRTaWJsaW5nLCBkaXNwbGF5ID0gbmV4dC5zdHlsZS5kaXNwbGF5
OworCQkJCW5leHQuc3R5bGUuZGlzcGxheSA9IGRpc3BsYXkgPT09ICJub25lIiA/ICJibG9jayIg
OiAibm9uZSI7CisJCQl9KTsKKwkJCQorCQkJYWRkRXZlbnQoYiwgImRibGNsaWNrIiwgZnVuY3Rp
b24oZSkgeworCQkJCXZhciB0YXJnZXQgPSBlICYmIGUudGFyZ2V0ID8gZS50YXJnZXQgOiB3aW5k
b3cuZXZlbnQuc3JjRWxlbWVudDsKKwkJCQlpZiAoIHRhcmdldC5ub2RlTmFtZS50b0xvd2VyQ2Fz
ZSgpID09ICJzcGFuIiB8fCB0YXJnZXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PSAiYiIgKSB7
CisJCQkJCXRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlOworCQkJCX0KKwkJCQlpZiAoIHdpbmRv
dy5sb2NhdGlvbiAmJiB0YXJnZXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gInN0cm9uZyIg
KSB7CisJCQkJCXdpbmRvdy5sb2NhdGlvbiA9IFFVbml0LnVybCh7IGZpbHRlcjogZ2V0VGV4dChb
dGFyZ2V0XSkucmVwbGFjZSgvXChbXildK1wpJC8sICIiKS5yZXBsYWNlKC8oXlxzKnxccyokKS9n
LCAiIikgfSk7CisJCQkJfQorCQkJfSk7CisKKwkJCXZhciBsaSA9IGlkKHRoaXMuaWQpOworCQkJ
bGkuY2xhc3NOYW1lID0gYmFkID8gImZhaWwiIDogInBhc3MiOworCQkJbGkucmVtb3ZlQ2hpbGQo
IGxpLmZpcnN0Q2hpbGQgKTsKKwkJCWxpLmFwcGVuZENoaWxkKCBiICk7CisJCQlsaS5hcHBlbmRD
aGlsZCggb2wgKTsKKworCQl9IGVsc2UgeworCQkJZm9yICggdmFyIGkgPSAwOyBpIDwgdGhpcy5h
c3NlcnRpb25zLmxlbmd0aDsgaSsrICkgeworCQkJCWlmICggIXRoaXMuYXNzZXJ0aW9uc1tpXS5y
ZXN1bHQgKSB7CisJCQkJCWJhZCsrOworCQkJCQljb25maWcuc3RhdHMuYmFkKys7CisJCQkJCWNv
bmZpZy5tb2R1bGVTdGF0cy5iYWQrKzsKKwkJCQl9CisJCQl9CisJCX0KKworCQl0cnkgeworCQkJ
UVVuaXQucmVzZXQoKTsKKwkJfSBjYXRjaChlKSB7CisJCQlmYWlsKCJyZXNldCgpIGZhaWxlZCwg
Zm9sbG93aW5nIFRlc3QgIiArIHRoaXMudGVzdE5hbWUgKyAiLCBleGNlcHRpb24gYW5kIHJlc2V0
IGZuIGZvbGxvd3MiLCBlLCBRVW5pdC5yZXNldCk7CisJCX0KKworCQlRVW5pdC50ZXN0RG9uZSgg
eworCQkJbmFtZTogdGhpcy50ZXN0TmFtZSwKKwkJCWZhaWxlZDogYmFkLAorCQkJcGFzc2VkOiB0
aGlzLmFzc2VydGlvbnMubGVuZ3RoIC0gYmFkLAorCQkJdG90YWw6IHRoaXMuYXNzZXJ0aW9ucy5s
ZW5ndGgKKwkJfSApOworCX0sCisJCisJcXVldWU6IGZ1bmN0aW9uKCkgeworCQl2YXIgdGVzdCA9
IHRoaXM7CisJCXN5bmNocm9uaXplKGZ1bmN0aW9uKCkgeworCQkJdGVzdC5pbml0KCk7CisJCX0p
OworCQlmdW5jdGlvbiBydW4oKSB7CisJCQkvLyBlYWNoIG9mIHRoZXNlIGNhbiBieSBhc3luYwor
CQkJc3luY2hyb25pemUoZnVuY3Rpb24oKSB7CisJCQkJdGVzdC5zZXR1cCgpOworCQkJfSk7CisJ
CQlzeW5jaHJvbml6ZShmdW5jdGlvbigpIHsKKwkJCQl0ZXN0LnJ1bigpOworCQkJfSk7CisJCQlz
eW5jaHJvbml6ZShmdW5jdGlvbigpIHsKKwkJCQl0ZXN0LnRlYXJkb3duKCk7CisJCQl9KTsKKwkJ
CXN5bmNocm9uaXplKGZ1bmN0aW9uKCkgeworCQkJCXRlc3QuZmluaXNoKCk7CisJCQl9KTsKKwkJ
fQorCQkvLyBkZWZlciB3aGVuIHByZXZpb3VzIHRlc3QgcnVuIHBhc3NlZCwgaWYgc3RvcmFnZSBp
cyBhdmFpbGFibGUKKwkJdmFyIGJhZCA9IFFVbml0LmNvbmZpZy5yZW9yZGVyICYmIGRlZmluZWQu
c2Vzc2lvblN0b3JhZ2UgJiYgK3Nlc3Npb25TdG9yYWdlLmdldEl0ZW0oInF1bml0LSIgKyB0aGlz
LnRlc3ROYW1lKTsKKwkJaWYgKGJhZCkgeworCQkJcnVuKCk7CisJCX0gZWxzZSB7CisJCQlzeW5j
aHJvbml6ZShydW4pOworCQl9OworCX0KKwkKK307CisKK3ZhciBRVW5pdCA9IHsKKworCS8vIGNh
bGwgb24gc3RhcnQgb2YgbW9kdWxlIHRlc3QgdG8gcHJlcGVuZCBuYW1lIHRvIGFsbCB0ZXN0cwor
CW1vZHVsZTogZnVuY3Rpb24obmFtZSwgdGVzdEVudmlyb25tZW50KSB7CisJCWNvbmZpZy5jdXJy
ZW50TW9kdWxlID0gbmFtZTsKKwkJY29uZmlnLmN1cnJlbnRNb2R1bGVUZXN0RW52aXJvbWVudCA9
IHRlc3RFbnZpcm9ubWVudDsKKwl9LAorCisJYXN5bmNUZXN0OiBmdW5jdGlvbih0ZXN0TmFtZSwg
ZXhwZWN0ZWQsIGNhbGxiYWNrKSB7CisJCWlmICggYXJndW1lbnRzLmxlbmd0aCA9PT0gMiApIHsK
KwkJCWNhbGxiYWNrID0gZXhwZWN0ZWQ7CisJCQlleHBlY3RlZCA9IDA7CisJCX0KKworCQlRVW5p
dC50ZXN0KHRlc3ROYW1lLCBleHBlY3RlZCwgY2FsbGJhY2ssIHRydWUpOworCX0sCisJCisJdGVz
dDogZnVuY3Rpb24odGVzdE5hbWUsIGV4cGVjdGVkLCBjYWxsYmFjaywgYXN5bmMpIHsKKwkJdmFy
IG5hbWUgPSAnPHNwYW4gY2xhc3M9InRlc3QtbmFtZSI+JyArIHRlc3ROYW1lICsgJzwvc3Bhbj4n
LCB0ZXN0RW52aXJvbm1lbnRBcmc7CisKKwkJaWYgKCBhcmd1bWVudHMubGVuZ3RoID09PSAyICkg
eworCQkJY2FsbGJhY2sgPSBleHBlY3RlZDsKKwkJCWV4cGVjdGVkID0gbnVsbDsKKwkJfQorCQkv
LyBpcyAybmQgYXJndW1lbnQgYSB0ZXN0RW52aXJvbm1lbnQ/CisJCWlmICggZXhwZWN0ZWQgJiYg
dHlwZW9mIGV4cGVjdGVkID09PSAnb2JqZWN0JykgeworCQkJdGVzdEVudmlyb25tZW50QXJnID0g
IGV4cGVjdGVkOworCQkJZXhwZWN0ZWQgPSBudWxsOworCQl9CisKKwkJaWYgKCBjb25maWcuY3Vy
cmVudE1vZHVsZSApIHsKKwkJCW5hbWUgPSAnPHNwYW4gY2xhc3M9Im1vZHVsZS1uYW1lIj4nICsg
Y29uZmlnLmN1cnJlbnRNb2R1bGUgKyAiPC9zcGFuPjogIiArIG5hbWU7CisJCX0KKworCQlpZiAo
ICF2YWxpZFRlc3QoY29uZmlnLmN1cnJlbnRNb2R1bGUgKyAiOiAiICsgdGVzdE5hbWUpICkgewor
CQkJcmV0dXJuOworCQl9CisJCQorCQl2YXIgdGVzdCA9IG5ldyBUZXN0KG5hbWUsIHRlc3ROYW1l
LCBleHBlY3RlZCwgdGVzdEVudmlyb25tZW50QXJnLCBhc3luYywgY2FsbGJhY2spOworCQl0ZXN0
Lm1vZHVsZSA9IGNvbmZpZy5jdXJyZW50TW9kdWxlOworCQl0ZXN0Lm1vZHVsZVRlc3RFbnZpcm9u
bWVudCA9IGNvbmZpZy5jdXJyZW50TW9kdWxlVGVzdEVudmlyb21lbnQ7CisJCXRlc3QucXVldWUo
KTsKKwl9LAorCQorCS8qKgorCSAqIFNwZWNpZnkgdGhlIG51bWJlciBvZiBleHBlY3RlZCBhc3Nl
cnRpb25zIHRvIGd1cmFudGVlIHRoYXQgZmFpbGVkIHRlc3QgKG5vIGFzc2VydGlvbnMgYXJlIHJ1
biBhdCBhbGwpIGRvbid0IHNsaXAgdGhyb3VnaC4KKwkgKi8KKwlleHBlY3Q6IGZ1bmN0aW9uKGFz
c2VydHMpIHsKKwkJY29uZmlnLmN1cnJlbnQuZXhwZWN0ZWQgPSBhc3NlcnRzOworCX0sCisKKwkv
KioKKwkgKiBBc3NlcnRzIHRydWUuCisJICogQGV4YW1wbGUgb2soICJhc2RmYXNkZiIubGVuZ3Ro
ID4gNSwgIlRoZXJlIG11c3QgYmUgYXQgbGVhc3QgNSBjaGFycyIgKTsKKwkgKi8KKwlvazogZnVu
Y3Rpb24oYSwgbXNnKSB7CisJCWEgPSAhIWE7CisJCXZhciBkZXRhaWxzID0geworCQkJcmVzdWx0
OiBhLAorCQkJbWVzc2FnZTogbXNnCisJCX07CisJCW1zZyA9IGVzY2FwZUh0bWwobXNnKTsKKwkJ
UVVuaXQubG9nKGRldGFpbHMpOworCQljb25maWcuY3VycmVudC5hc3NlcnRpb25zLnB1c2goewor
CQkJcmVzdWx0OiBhLAorCQkJbWVzc2FnZTogbXNnCisJCX0pOworCX0sCisKKwkvKioKKwkgKiBD
aGVja3MgdGhhdCB0aGUgZmlyc3QgdHdvIGFyZ3VtZW50cyBhcmUgZXF1YWwsIHdpdGggYW4gb3B0
aW9uYWwgbWVzc2FnZS4KKwkgKiBQcmludHMgb3V0IGJvdGggYWN0dWFsIGFuZCBleHBlY3RlZCB2
YWx1ZXMuCisJICoKKwkgKiBQcmVmZXJlZCB0byBvayggYWN0dWFsID09IGV4cGVjdGVkLCBtZXNz
YWdlICkKKwkgKgorCSAqIEBleGFtcGxlIGVxdWFsKCBmb3JtYXQoIlJlY2VpdmVkIHswfSBieXRl
cy4iLCAyKSwgIlJlY2VpdmVkIDIgYnl0ZXMuIiApOworCSAqCisJICogQHBhcmFtIE9iamVjdCBh
Y3R1YWwKKwkgKiBAcGFyYW0gT2JqZWN0IGV4cGVjdGVkCisJICogQHBhcmFtIFN0cmluZyBtZXNz
YWdlIChvcHRpb25hbCkKKwkgKi8KKwllcXVhbDogZnVuY3Rpb24oYWN0dWFsLCBleHBlY3RlZCwg
bWVzc2FnZSkgeworCQlRVW5pdC5wdXNoKGV4cGVjdGVkID09IGFjdHVhbCwgYWN0dWFsLCBleHBl
Y3RlZCwgbWVzc2FnZSk7CisJfSwKKworCW5vdEVxdWFsOiBmdW5jdGlvbihhY3R1YWwsIGV4cGVj
dGVkLCBtZXNzYWdlKSB7CisJCVFVbml0LnB1c2goZXhwZWN0ZWQgIT0gYWN0dWFsLCBhY3R1YWws
IGV4cGVjdGVkLCBtZXNzYWdlKTsKKwl9LAorCQorCWRlZXBFcXVhbDogZnVuY3Rpb24oYWN0dWFs
LCBleHBlY3RlZCwgbWVzc2FnZSkgeworCQlRVW5pdC5wdXNoKFFVbml0LmVxdWl2KGFjdHVhbCwg
ZXhwZWN0ZWQpLCBhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKTsKKwl9LAorCisJbm90RGVlcEVx
dWFsOiBmdW5jdGlvbihhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7CisJCVFVbml0LnB1c2go
IVFVbml0LmVxdWl2KGFjdHVhbCwgZXhwZWN0ZWQpLCBhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdl
KTsKKwl9LAorCisJc3RyaWN0RXF1YWw6IGZ1bmN0aW9uKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3Nh
Z2UpIHsKKwkJUVVuaXQucHVzaChleHBlY3RlZCA9PT0gYWN0dWFsLCBhY3R1YWwsIGV4cGVjdGVk
LCBtZXNzYWdlKTsKKwl9LAorCisJbm90U3RyaWN0RXF1YWw6IGZ1bmN0aW9uKGFjdHVhbCwgZXhw
ZWN0ZWQsIG1lc3NhZ2UpIHsKKwkJUVVuaXQucHVzaChleHBlY3RlZCAhPT0gYWN0dWFsLCBhY3R1
YWwsIGV4cGVjdGVkLCBtZXNzYWdlKTsKKwl9LAorCisJcmFpc2VzOiBmdW5jdGlvbihibG9jaywg
ZXhwZWN0ZWQsIG1lc3NhZ2UpIHsKKwkJdmFyIGFjdHVhbCwgb2sgPSBmYWxzZTsKKwkKKwkJaWYg
KHR5cGVvZiBleHBlY3RlZCA9PT0gJ3N0cmluZycpIHsKKwkJCW1lc3NhZ2UgPSBleHBlY3RlZDsK
KwkJCWV4cGVjdGVkID0gbnVsbDsKKwkJfQorCQorCQl0cnkgeworCQkJYmxvY2soKTsKKwkJfSBj
YXRjaCAoZSkgeworCQkJYWN0dWFsID0gZTsKKwkJfQorCQorCQlpZiAoYWN0dWFsKSB7CisJCQkv
LyB3ZSBkb24ndCB3YW50IHRvIHZhbGlkYXRlIHRocm93biBlcnJvcgorCQkJaWYgKCFleHBlY3Rl
ZCkgeworCQkJCW9rID0gdHJ1ZTsKKwkJCS8vIGV4cGVjdGVkIGlzIGEgcmVnZXhwCQorCQkJfSBl
bHNlIGlmIChRVW5pdC5vYmplY3RUeXBlKGV4cGVjdGVkKSA9PT0gInJlZ2V4cCIpIHsKKwkJCQlv
ayA9IGV4cGVjdGVkLnRlc3QoYWN0dWFsKTsKKwkJCS8vIGV4cGVjdGVkIGlzIGEgY29uc3RydWN0
b3IJCisJCQl9IGVsc2UgaWYgKGFjdHVhbCBpbnN0YW5jZW9mIGV4cGVjdGVkKSB7CisJCQkJb2sg
PSB0cnVlOworCQkJLy8gZXhwZWN0ZWQgaXMgYSB2YWxpZGF0aW9uIGZ1bmN0aW9uIHdoaWNoIHJl
dHVybnMgdHJ1ZSBpcyB2YWxpZGF0aW9uIHBhc3NlZAkKKwkJCX0gZWxzZSBpZiAoZXhwZWN0ZWQu
Y2FsbCh7fSwgYWN0dWFsKSA9PT0gdHJ1ZSkgeworCQkJCW9rID0gdHJ1ZTsKKwkJCX0KKwkJfQor
CQkJCisJCVFVbml0Lm9rKG9rLCBtZXNzYWdlKTsKKwl9LAorCisJc3RhcnQ6IGZ1bmN0aW9uKCkg
eworCQljb25maWcuc2VtYXBob3JlLS07CisJCWlmIChjb25maWcuc2VtYXBob3JlID4gMCkgewor
CQkJLy8gZG9uJ3Qgc3RhcnQgdW50aWwgZXF1YWwgbnVtYmVyIG9mIHN0b3AtY2FsbHMKKwkJCXJl
dHVybjsKKwkJfQorCQlpZiAoY29uZmlnLnNlbWFwaG9yZSA8IDApIHsKKwkJCS8vIGlnbm9yZSBp
ZiBzdGFydCBpcyBjYWxsZWQgbW9yZSBvZnRlbiB0aGVuIHN0b3AKKwkJCWNvbmZpZy5zZW1hcGhv
cmUgPSAwOworCQl9CisJCS8vIEEgc2xpZ2h0IGRlbGF5LCB0byBhdm9pZCBhbnkgY3VycmVudCBj
YWxsYmFja3MKKwkJaWYgKCBkZWZpbmVkLnNldFRpbWVvdXQgKSB7CisJCQl3aW5kb3cuc2V0VGlt
ZW91dChmdW5jdGlvbigpIHsKKwkJCQlpZiAoIGNvbmZpZy50aW1lb3V0ICkgeworCQkJCQljbGVh
clRpbWVvdXQoY29uZmlnLnRpbWVvdXQpOworCQkJCX0KKworCQkJCWNvbmZpZy5ibG9ja2luZyA9
IGZhbHNlOworCQkJCXByb2Nlc3MoKTsKKwkJCX0sIDEzKTsKKwkJfSBlbHNlIHsKKwkJCWNvbmZp
Zy5ibG9ja2luZyA9IGZhbHNlOworCQkJcHJvY2VzcygpOworCQl9CisJfSwKKwkKKwlzdG9wOiBm
dW5jdGlvbih0aW1lb3V0KSB7CisJCWNvbmZpZy5zZW1hcGhvcmUrKzsKKwkJY29uZmlnLmJsb2Nr
aW5nID0gdHJ1ZTsKKworCQlpZiAoIHRpbWVvdXQgJiYgZGVmaW5lZC5zZXRUaW1lb3V0ICkgewor
CQkJY2xlYXJUaW1lb3V0KGNvbmZpZy50aW1lb3V0KTsKKwkJCWNvbmZpZy50aW1lb3V0ID0gd2lu
ZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisJCQkJUVVuaXQub2soIGZhbHNlLCAiVGVzdCB0
aW1lZCBvdXQiICk7CisJCQkJUVVuaXQuc3RhcnQoKTsKKwkJCX0sIHRpbWVvdXQpOworCQl9CisJ
fSwKKworCXVybDogZnVuY3Rpb24oIHBhcmFtcyApIHsKKwkJcGFyYW1zID0gZXh0ZW5kKCBleHRl
bmQoIHt9LCBRVW5pdC51cmxQYXJhbXMgKSwgcGFyYW1zICk7CisJCXZhciBxdWVyeXN0cmluZyA9
ICI/IiwKKwkJCWtleTsKKwkJZm9yICgga2V5IGluIHBhcmFtcyApIHsKKwkJCXF1ZXJ5c3RyaW5n
ICs9IGVuY29kZVVSSUNvbXBvbmVudCgga2V5ICkgKyAiPSIgKworCQkJCWVuY29kZVVSSUNvbXBv
bmVudCggcGFyYW1zWyBrZXkgXSApICsgIiYiOworCQl9CisJCXJldHVybiB3aW5kb3cubG9jYXRp
b24ucGF0aG5hbWUgKyBxdWVyeXN0cmluZy5zbGljZSggMCwgLTEgKTsKKwl9Cit9OworCisvLyBC
YWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgZGVwcmVjYXRlZAorUVVuaXQuZXF1YWxzID0gUVVuaXQu
ZXF1YWw7CitRVW5pdC5zYW1lID0gUVVuaXQuZGVlcEVxdWFsOworCisvLyBNYWludGFpbiBpbnRl
cm5hbCBzdGF0ZQordmFyIGNvbmZpZyA9IHsKKwkvLyBUaGUgcXVldWUgb2YgdGVzdHMgdG8gcnVu
CisJcXVldWU6IFtdLAorCisJLy8gYmxvY2sgdW50aWwgZG9jdW1lbnQgcmVhZHkKKwlibG9ja2lu
ZzogdHJ1ZSwKKwkKKwkvLyBieSBkZWZhdWx0LCBydW4gcHJldmlvdXNseSBmYWlsZWQgdGVzdHMg
Zmlyc3QKKwkvLyB2ZXJ5IHVzZWZ1bCBpbiBjb21iaW5hdGlvbiB3aXRoICJIaWRlIHBhc3NlZCB0
ZXN0cyIgY2hlY2tlZAorCXJlb3JkZXI6IHRydWUsCisKKwlub2dsb2JhbHM6IGZhbHNlLAorCW5v
dHJ5Y2F0Y2g6IGZhbHNlCit9OworCisvLyBMb2FkIHBhcmFtYXRlcnMKKyhmdW5jdGlvbigpIHsK
Kwl2YXIgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb24gfHwgeyBzZWFyY2g6ICIiLCBwcm90b2Nv
bDogImZpbGU6IiB9LAorCQlwYXJhbXMgPSBsb2NhdGlvbi5zZWFyY2guc2xpY2UoIDEgKS5zcGxp
dCggIiYiICksCisJCWxlbmd0aCA9IHBhcmFtcy5sZW5ndGgsCisJCXVybFBhcmFtcyA9IHt9LAor
CQljdXJyZW50OworCisJaWYgKCBwYXJhbXNbIDAgXSApIHsKKwkJZm9yICggdmFyIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKysgKSB7CisJCQljdXJyZW50ID0gcGFyYW1zWyBpIF0uc3BsaXQoICI9IiAp
OworCQkJY3VycmVudFsgMCBdID0gZGVjb2RlVVJJQ29tcG9uZW50KCBjdXJyZW50WyAwIF0gKTsK
KwkJCS8vIGFsbG93IGp1c3QgYSBrZXkgdG8gdHVybiBvbiBhIGZsYWcsIGUuZy4sIHRlc3QuaHRt
bD9ub2dsb2JhbHMKKwkJCWN1cnJlbnRbIDEgXSA9IGN1cnJlbnRbIDEgXSA/IGRlY29kZVVSSUNv
bXBvbmVudCggY3VycmVudFsgMSBdICkgOiB0cnVlOworCQkJdXJsUGFyYW1zWyBjdXJyZW50WyAw
IF0gXSA9IGN1cnJlbnRbIDEgXTsKKwkJCWlmICggY3VycmVudFsgMCBdIGluIGNvbmZpZyApIHsK
KwkJCQljb25maWdbIGN1cnJlbnRbIDAgXSBdID0gY3VycmVudFsgMSBdOworCQkJfQorCQl9CisJ
fQorCisJUVVuaXQudXJsUGFyYW1zID0gdXJsUGFyYW1zOworCWNvbmZpZy5maWx0ZXIgPSB1cmxQ
YXJhbXMuZmlsdGVyOworCisJLy8gRmlndXJlIG91dCBpZiB3ZSdyZSBydW5uaW5nIHRoZSB0ZXN0
cyBmcm9tIGEgc2VydmVyIG9yIG5vdAorCVFVbml0LmlzTG9jYWwgPSAhIShsb2NhdGlvbi5wcm90
b2NvbCA9PT0gJ2ZpbGU6Jyk7Cit9KSgpOworCisvLyBFeHBvc2UgdGhlIEFQSSBhcyBnbG9iYWwg
dmFyaWFibGVzLCB1bmxlc3MgYW4gJ2V4cG9ydHMnCisvLyBvYmplY3QgZXhpc3RzLCBpbiB0aGF0
IGNhc2Ugd2UgYXNzdW1lIHdlJ3JlIGluIENvbW1vbkpTCitpZiAoIHR5cGVvZiBleHBvcnRzID09
PSAidW5kZWZpbmVkIiB8fCB0eXBlb2YgcmVxdWlyZSA9PT0gInVuZGVmaW5lZCIgKSB7CisJZXh0
ZW5kKHdpbmRvdywgUVVuaXQpOworCXdpbmRvdy5RVW5pdCA9IFFVbml0OworfSBlbHNlIHsKKwll
eHRlbmQoZXhwb3J0cywgUVVuaXQpOworCWV4cG9ydHMuUVVuaXQgPSBRVW5pdDsKK30KKworLy8g
ZGVmaW5lIHRoZXNlIGFmdGVyIGV4cG9zaW5nIGdsb2JhbHMgdG8ga2VlcCB0aGVtIGluIHRoZXNl
IFFVbml0IG5hbWVzcGFjZSBvbmx5CitleHRlbmQoUVVuaXQsIHsKKwljb25maWc6IGNvbmZpZywK
KworCS8vIEluaXRpYWxpemUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworCWluaXQ6IGZ1bmN0
aW9uKCkgeworCQlleHRlbmQoY29uZmlnLCB7CisJCQlzdGF0czogeyBhbGw6IDAsIGJhZDogMCB9
LAorCQkJbW9kdWxlU3RhdHM6IHsgYWxsOiAwLCBiYWQ6IDAgfSwKKwkJCXN0YXJ0ZWQ6ICtuZXcg
RGF0ZSwKKwkJCXVwZGF0ZVJhdGU6IDEwMDAsCisJCQlibG9ja2luZzogZmFsc2UsCisJCQlhdXRv
c3RhcnQ6IHRydWUsCisJCQlhdXRvcnVuOiBmYWxzZSwKKwkJCWZpbHRlcjogIiIsCisJCQlxdWV1
ZTogW10sCisJCQlzZW1hcGhvcmU6IDAKKwkJfSk7CisKKwkJdmFyIHRlc3RzID0gaWQoICJxdW5p
dC10ZXN0cyIgKSwKKwkJCWJhbm5lciA9IGlkKCAicXVuaXQtYmFubmVyIiApLAorCQkJcmVzdWx0
ID0gaWQoICJxdW5pdC10ZXN0cmVzdWx0IiApOworCisJCWlmICggdGVzdHMgKSB7CisJCQl0ZXN0
cy5pbm5lckhUTUwgPSAiIjsKKwkJfQorCisJCWlmICggYmFubmVyICkgeworCQkJYmFubmVyLmNs
YXNzTmFtZSA9ICIiOworCQl9CisKKwkJaWYgKCByZXN1bHQgKSB7CisJCQlyZXN1bHQucGFyZW50
Tm9kZS5yZW1vdmVDaGlsZCggcmVzdWx0ICk7CisJCX0KKwkJCisJCWlmICggdGVzdHMgKSB7CisJ
CQlyZXN1bHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAicCIgKTsKKwkJCXJlc3VsdC5pZCA9
ICJxdW5pdC10ZXN0cmVzdWx0IjsKKwkJCXJlc3VsdC5jbGFzc05hbWUgPSAicmVzdWx0IjsKKwkJ
CXRlc3RzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCByZXN1bHQsIHRlc3RzICk7CisJCQlyZXN1
bHQuaW5uZXJIVE1MID0gJ1J1bm5pbmcuLi48YnIvPiZuYnNwOyc7CisJCX0KKwl9LAorCQorCS8q
KgorCSAqIFJlc2V0cyB0aGUgdGVzdCBzZXR1cC4gVXNlZnVsIGZvciB0ZXN0cyB0aGF0IG1vZGlm
eSB0aGUgRE9NLgorCSAqIAorCSAqIElmIGpRdWVyeSBpcyBhdmFpbGFibGUsIHVzZXMgalF1ZXJ5
J3MgaHRtbCgpLCBvdGhlcndpc2UganVzdCBpbm5lckhUTUwuCisJICovCisJcmVzZXQ6IGZ1bmN0
aW9uKCkgeworCQlpZiAoIHdpbmRvdy5qUXVlcnkgKSB7CisJCQlqUXVlcnkoICIjbWFpbiwgI3F1
bml0LWZpeHR1cmUiICkuaHRtbCggY29uZmlnLmZpeHR1cmUgKTsKKwkJfSBlbHNlIHsKKwkJCXZh
ciBtYWluID0gaWQoICdtYWluJyApIHx8IGlkKCAncXVuaXQtZml4dHVyZScgKTsKKwkJCWlmICgg
bWFpbiApIHsKKwkJCQltYWluLmlubmVySFRNTCA9IGNvbmZpZy5maXh0dXJlOworCQkJfQorCQl9
CisJfSwKKwkKKwkvKioKKwkgKiBUcmlnZ2VyIGFuIGV2ZW50IG9uIGFuIGVsZW1lbnQuCisJICoK
KwkgKiBAZXhhbXBsZSB0cmlnZ2VyRXZlbnQoIGRvY3VtZW50LmJvZHksICJjbGljayIgKTsKKwkg
KgorCSAqIEBwYXJhbSBET01FbGVtZW50IGVsZW0KKwkgKiBAcGFyYW0gU3RyaW5nIHR5cGUKKwkg
Ki8KKwl0cmlnZ2VyRXZlbnQ6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBldmVudCApIHsKKwkJaWYg
KCBkb2N1bWVudC5jcmVhdGVFdmVudCApIHsKKwkJCWV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZl
bnQoIk1vdXNlRXZlbnRzIik7CisJCQlldmVudC5pbml0TW91c2VFdmVudCh0eXBlLCB0cnVlLCB0
cnVlLCBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcsCisJCQkJMCwgMCwgMCwgMCwgMCwg
ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDAsIG51bGwpOworCQkJZWxlbS5kaXNwYXRjaEV2
ZW50KCBldmVudCApOworCisJCX0gZWxzZSBpZiAoIGVsZW0uZmlyZUV2ZW50ICkgeworCQkJZWxl
bS5maXJlRXZlbnQoIm9uIit0eXBlKTsKKwkJfQorCX0sCisJCisJLy8gU2FmZSBvYmplY3QgdHlw
ZSBjaGVja2luZworCWlzOiBmdW5jdGlvbiggdHlwZSwgb2JqICkgeworCQlyZXR1cm4gUVVuaXQu
b2JqZWN0VHlwZSggb2JqICkgPT0gdHlwZTsKKwl9LAorCQorCW9iamVjdFR5cGU6IGZ1bmN0aW9u
KCBvYmogKSB7CisJCWlmICh0eXBlb2Ygb2JqID09PSAidW5kZWZpbmVkIikgeworCQkJCXJldHVy
biAidW5kZWZpbmVkIjsKKworCQkvLyBjb25zaWRlcjogdHlwZW9mIG51bGwgPT09IG9iamVjdAor
CQl9CisJCWlmIChvYmogPT09IG51bGwpIHsKKwkJCQlyZXR1cm4gIm51bGwiOworCQl9CisKKwkJ
dmFyIHR5cGUgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoIG9iaiApCisJCQkubWF0
Y2goL15cW29iamVjdFxzKC4qKVxdJC8pWzFdIHx8ICcnOworCisJCXN3aXRjaCAodHlwZSkgewor
CQkJCWNhc2UgJ051bWJlcic6CisJCQkJCQlpZiAoaXNOYU4ob2JqKSkgeworCQkJCQkJCQlyZXR1
cm4gIm5hbiI7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCQlyZXR1cm4gIm51bWJlciI7CisJCQkJ
CQl9CisJCQkJY2FzZSAnU3RyaW5nJzoKKwkJCQljYXNlICdCb29sZWFuJzoKKwkJCQljYXNlICdB
cnJheSc6CisJCQkJY2FzZSAnRGF0ZSc6CisJCQkJY2FzZSAnUmVnRXhwJzoKKwkJCQljYXNlICdG
dW5jdGlvbic6CisJCQkJCQlyZXR1cm4gdHlwZS50b0xvd2VyQ2FzZSgpOworCQl9CisJCWlmICh0
eXBlb2Ygb2JqID09PSAib2JqZWN0IikgeworCQkJCXJldHVybiAib2JqZWN0IjsKKwkJfQorCQly
ZXR1cm4gdW5kZWZpbmVkOworCX0sCisJCisJcHVzaDogZnVuY3Rpb24ocmVzdWx0LCBhY3R1YWws
IGV4cGVjdGVkLCBtZXNzYWdlKSB7CisJCXZhciBkZXRhaWxzID0geworCQkJcmVzdWx0OiByZXN1
bHQsCisJCQltZXNzYWdlOiBtZXNzYWdlLAorCQkJYWN0dWFsOiBhY3R1YWwsCisJCQlleHBlY3Rl
ZDogZXhwZWN0ZWQKKwkJfTsKKwkJCisJCW1lc3NhZ2UgPSBlc2NhcGVIdG1sKG1lc3NhZ2UpIHx8
IChyZXN1bHQgPyAib2theSIgOiAiZmFpbGVkIik7CisJCW1lc3NhZ2UgPSAnPHNwYW4gY2xhc3M9
InRlc3QtbWVzc2FnZSI+JyArIG1lc3NhZ2UgKyAiPC9zcGFuPiI7CisJCWV4cGVjdGVkID0gZXNj
YXBlSHRtbChRVW5pdC5qc0R1bXAucGFyc2UoZXhwZWN0ZWQpKTsKKwkJYWN0dWFsID0gZXNjYXBl
SHRtbChRVW5pdC5qc0R1bXAucGFyc2UoYWN0dWFsKSk7CisJCXZhciBvdXRwdXQgPSBtZXNzYWdl
ICsgJzx0YWJsZT48dHIgY2xhc3M9InRlc3QtZXhwZWN0ZWQiPjx0aD5FeHBlY3RlZDogPC90aD48
dGQ+PHByZT4nICsgZXhwZWN0ZWQgKyAnPC9wcmU+PC90ZD48L3RyPic7CisJCWlmIChhY3R1YWwg
IT0gZXhwZWN0ZWQpIHsKKwkJCW91dHB1dCArPSAnPHRyIGNsYXNzPSJ0ZXN0LWFjdHVhbCI+PHRo
PlJlc3VsdDogPC90aD48dGQ+PHByZT4nICsgYWN0dWFsICsgJzwvcHJlPjwvdGQ+PC90cj4nOwor
CQkJb3V0cHV0ICs9ICc8dHIgY2xhc3M9InRlc3QtZGlmZiI+PHRoPkRpZmY6IDwvdGg+PHRkPjxw
cmU+JyArIFFVbml0LmRpZmYoZXhwZWN0ZWQsIGFjdHVhbCkgKyc8L3ByZT48L3RkPjwvdHI+JzsK
KwkJfQorCQlpZiAoIXJlc3VsdCkgeworCQkJdmFyIHNvdXJjZSA9IHNvdXJjZUZyb21TdGFja3Ry
YWNlKCk7CisJCQlpZiAoc291cmNlKSB7CisJCQkJZGV0YWlscy5zb3VyY2UgPSBzb3VyY2U7CisJ
CQkJb3V0cHV0ICs9ICc8dHIgY2xhc3M9InRlc3Qtc291cmNlIj48dGg+U291cmNlOiA8L3RoPjx0
ZD48cHJlPicgKyBzb3VyY2UgKyc8L3ByZT48L3RkPjwvdHI+JzsKKwkJCX0KKwkJfQorCQlvdXRw
dXQgKz0gIjwvdGFibGU+IjsKKwkJCisJCVFVbml0LmxvZyhkZXRhaWxzKTsKKwkJCisJCWNvbmZp
Zy5jdXJyZW50LmFzc2VydGlvbnMucHVzaCh7CisJCQlyZXN1bHQ6ICEhcmVzdWx0LAorCQkJbWVz
c2FnZTogb3V0cHV0CisJCX0pOworCX0sCisJCisJLy8gTG9nZ2luZyBjYWxsYmFja3M7IGFsbCBy
ZWNlaXZlIGEgc2luZ2xlIGFyZ3VtZW50IHdpdGggdGhlIGxpc3RlZCBwcm9wZXJ0aWVzCisJLy8g
cnVuIHRlc3QvbG9ncy5odG1sIGZvciBhbnkgcmVsYXRlZCBjaGFuZ2VzCisJYmVnaW46IGZ1bmN0
aW9uKCkge30sCisJLy8gZG9uZTogeyBmYWlsZWQsIHBhc3NlZCwgdG90YWwsIHJ1bnRpbWUgfQor
CWRvbmU6IGZ1bmN0aW9uKCkge30sCisJLy8gbG9nOiB7IHJlc3VsdCwgYWN0dWFsLCBleHBlY3Rl
ZCwgbWVzc2FnZSB9CisJbG9nOiBmdW5jdGlvbigpIHt9LAorCS8vIHRlc3RTdGFydDogeyBuYW1l
IH0KKwl0ZXN0U3RhcnQ6IGZ1bmN0aW9uKCkge30sCisJLy8gdGVzdERvbmU6IHsgbmFtZSwgZmFp
bGVkLCBwYXNzZWQsIHRvdGFsIH0KKwl0ZXN0RG9uZTogZnVuY3Rpb24oKSB7fSwKKwkvLyBtb2R1
bGVTdGFydDogeyBuYW1lIH0KKwltb2R1bGVTdGFydDogZnVuY3Rpb24oKSB7fSwKKwkvLyBtb2R1
bGVEb25lOiB7IG5hbWUsIGZhaWxlZCwgcGFzc2VkLCB0b3RhbCB9CisJbW9kdWxlRG9uZTogZnVu
Y3Rpb24oKSB7fQorfSk7CisKK2lmICggdHlwZW9mIGRvY3VtZW50ID09PSAidW5kZWZpbmVkIiB8
fCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSAiY29tcGxldGUiICkgeworCWNvbmZpZy5hdXRvcnVu
ID0gdHJ1ZTsKK30KKworYWRkRXZlbnQod2luZG93LCAibG9hZCIsIGZ1bmN0aW9uKCkgeworCVFV
bml0LmJlZ2luKHt9KTsKKwkKKwkvLyBJbml0aWFsaXplIHRoZSBjb25maWcsIHNhdmluZyB0aGUg
ZXhlY3V0aW9uIHF1ZXVlCisJdmFyIG9sZGNvbmZpZyA9IGV4dGVuZCh7fSwgY29uZmlnKTsKKwlR
VW5pdC5pbml0KCk7CisJZXh0ZW5kKGNvbmZpZywgb2xkY29uZmlnKTsKKworCWNvbmZpZy5ibG9j
a2luZyA9IGZhbHNlOworCisJdmFyIHVzZXJBZ2VudCA9IGlkKCJxdW5pdC11c2VyQWdlbnQiKTsK
KwlpZiAoIHVzZXJBZ2VudCApIHsKKwkJdXNlckFnZW50LmlubmVySFRNTCA9IG5hdmlnYXRvci51
c2VyQWdlbnQ7CisJfQorCXZhciBiYW5uZXIgPSBpZCgicXVuaXQtaGVhZGVyIik7CisJaWYgKCBi
YW5uZXIgKSB7CisJCWJhbm5lci5pbm5lckhUTUwgPSAnPGEgaHJlZj0iJyArIFFVbml0LnVybCh7
IGZpbHRlcjogdW5kZWZpbmVkIH0pICsgJyI+ICcgKyBiYW5uZXIuaW5uZXJIVE1MICsgJzwvYT4g
JyArCisJCQknPGxhYmVsPjxpbnB1dCBuYW1lPSJub2dsb2JhbHMiIHR5cGU9ImNoZWNrYm94Iicg
KyAoIGNvbmZpZy5ub2dsb2JhbHMgPyAnIGNoZWNrZWQ9ImNoZWNrZWQiJyA6ICcnICkgKyAnPm5v
Z2xvYmFsczwvbGFiZWw+JyArCisJCQknPGxhYmVsPjxpbnB1dCBuYW1lPSJub3RyeWNhdGNoIiB0
eXBlPSJjaGVja2JveCInICsgKCBjb25maWcubm90cnljYXRjaCA/ICcgY2hlY2tlZD0iY2hlY2tl
ZCInIDogJycgKSArICc+bm90cnljYXRjaDwvbGFiZWw+JzsKKwkJYWRkRXZlbnQoIGJhbm5lciwg
ImNoYW5nZSIsIGZ1bmN0aW9uKCBldmVudCApIHsKKwkJCXZhciBwYXJhbXMgPSB7fTsKKwkJCXBh
cmFtc1sgZXZlbnQudGFyZ2V0Lm5hbWUgXSA9IGV2ZW50LnRhcmdldC5jaGVja2VkID8gdHJ1ZSA6
IHVuZGVmaW5lZDsKKwkJCXdpbmRvdy5sb2NhdGlvbiA9IFFVbml0LnVybCggcGFyYW1zICk7CisJ
CX0pOworCX0KKwkKKwl2YXIgdG9vbGJhciA9IGlkKCJxdW5pdC10ZXN0cnVubmVyLXRvb2xiYXIi
KTsKKwlpZiAoIHRvb2xiYXIgKSB7CisJCXZhciBmaWx0ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJpbnB1dCIpOworCQlmaWx0ZXIudHlwZSA9ICJjaGVja2JveCI7CisJCWZpbHRlci5pZCA9
ICJxdW5pdC1maWx0ZXItcGFzcyI7CisJCWFkZEV2ZW50KCBmaWx0ZXIsICJjbGljayIsIGZ1bmN0
aW9uKCkgeworCQkJdmFyIG9sID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInF1bml0LXRlc3Rz
Iik7CisJCQlpZiAoIGZpbHRlci5jaGVja2VkICkgeworCQkJCW9sLmNsYXNzTmFtZSA9IG9sLmNs
YXNzTmFtZSArICIgaGlkZXBhc3MiOworCQkJfSBlbHNlIHsKKwkJCQl2YXIgdG1wID0gIiAiICsg
b2wuY2xhc3NOYW1lLnJlcGxhY2UoIC9bXG5cdFxyXS9nLCAiICIgKSArICIgIjsKKwkJCQlvbC5j
bGFzc05hbWUgPSB0bXAucmVwbGFjZSgvIGhpZGVwYXNzIC8sICIgIik7CisJCQl9CisJCQlpZiAo
IGRlZmluZWQuc2Vzc2lvblN0b3JhZ2UgKSB7CisJCQkJc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgi
cXVuaXQtZmlsdGVyLXBhc3NlZC10ZXN0cyIsIGZpbHRlci5jaGVja2VkID8gInRydWUiIDogIiIp
OworCQkJfQorCQl9KTsKKwkJaWYgKCBkZWZpbmVkLnNlc3Npb25TdG9yYWdlICYmIHNlc3Npb25T
dG9yYWdlLmdldEl0ZW0oInF1bml0LWZpbHRlci1wYXNzZWQtdGVzdHMiKSApIHsKKwkJCWZpbHRl
ci5jaGVja2VkID0gdHJ1ZTsKKwkJCXZhciBvbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJx
dW5pdC10ZXN0cyIpOworCQkJb2wuY2xhc3NOYW1lID0gb2wuY2xhc3NOYW1lICsgIiBoaWRlcGFz
cyI7CisJCX0KKwkJdG9vbGJhci5hcHBlbmRDaGlsZCggZmlsdGVyICk7CisKKwkJdmFyIGxhYmVs
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGFiZWwiKTsKKwkJbGFiZWwuc2V0QXR0cmlidXRl
KCJmb3IiLCAicXVuaXQtZmlsdGVyLXBhc3MiKTsKKwkJbGFiZWwuaW5uZXJIVE1MID0gIkhpZGUg
cGFzc2VkIHRlc3RzIjsKKwkJdG9vbGJhci5hcHBlbmRDaGlsZCggbGFiZWwgKTsKKwl9CisKKwl2
YXIgbWFpbiA9IGlkKCdtYWluJykgfHwgaWQoJ3F1bml0LWZpeHR1cmUnKTsKKwlpZiAoIG1haW4g
KSB7CisJCWNvbmZpZy5maXh0dXJlID0gbWFpbi5pbm5lckhUTUw7CisJfQorCisJaWYgKGNvbmZp
Zy5hdXRvc3RhcnQpIHsKKwkJUVVuaXQuc3RhcnQoKTsKKwl9Cit9KTsKKworZnVuY3Rpb24gZG9u
ZSgpIHsKKwljb25maWcuYXV0b3J1biA9IHRydWU7CisKKwkvLyBMb2cgdGhlIGxhc3QgbW9kdWxl
IHJlc3VsdHMKKwlpZiAoIGNvbmZpZy5jdXJyZW50TW9kdWxlICkgeworCQlRVW5pdC5tb2R1bGVE
b25lKCB7CisJCQluYW1lOiBjb25maWcuY3VycmVudE1vZHVsZSwKKwkJCWZhaWxlZDogY29uZmln
Lm1vZHVsZVN0YXRzLmJhZCwKKwkJCXBhc3NlZDogY29uZmlnLm1vZHVsZVN0YXRzLmFsbCAtIGNv
bmZpZy5tb2R1bGVTdGF0cy5iYWQsCisJCQl0b3RhbDogY29uZmlnLm1vZHVsZVN0YXRzLmFsbAor
CQl9ICk7CisJfQorCisJdmFyIGJhbm5lciA9IGlkKCJxdW5pdC1iYW5uZXIiKSwKKwkJdGVzdHMg
PSBpZCgicXVuaXQtdGVzdHMiKSwKKwkJcnVudGltZSA9ICtuZXcgRGF0ZSAtIGNvbmZpZy5zdGFy
dGVkLAorCQlwYXNzZWQgPSBjb25maWcuc3RhdHMuYWxsIC0gY29uZmlnLnN0YXRzLmJhZCwKKwkJ
aHRtbCA9IFsKKwkJCSdUZXN0cyBjb21wbGV0ZWQgaW4gJywKKwkJCXJ1bnRpbWUsCisJCQknIG1p
bGxpc2Vjb25kcy48YnIvPicsCisJCQknPHNwYW4gY2xhc3M9InBhc3NlZCI+JywKKwkJCXBhc3Nl
ZCwKKwkJCSc8L3NwYW4+IHRlc3RzIG9mIDxzcGFuIGNsYXNzPSJ0b3RhbCI+JywKKwkJCWNvbmZp
Zy5zdGF0cy5hbGwsCisJCQknPC9zcGFuPiBwYXNzZWQsIDxzcGFuIGNsYXNzPSJmYWlsZWQiPics
CisJCQljb25maWcuc3RhdHMuYmFkLAorCQkJJzwvc3Bhbj4gZmFpbGVkLicKKwkJXS5qb2luKCcn
KTsKKworCWlmICggYmFubmVyICkgeworCQliYW5uZXIuY2xhc3NOYW1lID0gKGNvbmZpZy5zdGF0
cy5iYWQgPyAicXVuaXQtZmFpbCIgOiAicXVuaXQtcGFzcyIpOworCX0KKworCWlmICggdGVzdHMg
KSB7CQorCQlpZCggInF1bml0LXRlc3RyZXN1bHQiICkuaW5uZXJIVE1MID0gaHRtbDsKKwl9CisK
KwlRVW5pdC5kb25lKCB7CisJCWZhaWxlZDogY29uZmlnLnN0YXRzLmJhZCwKKwkJcGFzc2VkOiBw
YXNzZWQsIAorCQl0b3RhbDogY29uZmlnLnN0YXRzLmFsbCwKKwkJcnVudGltZTogcnVudGltZQor
CX0gKTsKKworCXRvcC5wb3N0TWVzc2FnZSgncXVuaXQ6OmRvbmUnLCAnKicpOworfQorCitmdW5j
dGlvbiB2YWxpZFRlc3QoIG5hbWUgKSB7CisJdmFyIGZpbHRlciA9IGNvbmZpZy5maWx0ZXIsCisJ
CXJ1biA9IGZhbHNlOworCisJaWYgKCAhZmlsdGVyICkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisK
Kwlub3QgPSBmaWx0ZXIuY2hhckF0KCAwICkgPT09ICIhIjsKKwlpZiAoIG5vdCApIHsKKwkJZmls
dGVyID0gZmlsdGVyLnNsaWNlKCAxICk7CisJfQorCisJaWYgKCBuYW1lLmluZGV4T2YoIGZpbHRl
ciApICE9PSAtMSApIHsKKwkJcmV0dXJuICFub3Q7CisJfQorCisJaWYgKCBub3QgKSB7CisJCXJ1
biA9IHRydWU7CisJfQorCisJcmV0dXJuIHJ1bjsKK30KKworLy8gc28gZmFyIHN1cHBvcnRzIG9u
bHkgRmlyZWZveCwgQ2hyb21lIGFuZCBPcGVyYSAoYnVnZ3kpCisvLyBjb3VsZCBiZSBleHRlbmRl
ZCBpbiB0aGUgZnV0dXJlIHRvIHVzZSBzb21ldGhpbmcgbGlrZSBodHRwczovL2dpdGh1Yi5jb20v
Y3Nub3Zlci9UcmFjZUtpdAorZnVuY3Rpb24gc291cmNlRnJvbVN0YWNrdHJhY2UoKSB7CisJdHJ5
IHsKKwkJdGhyb3cgbmV3IEVycm9yKCk7CisJfSBjYXRjaCAoIGUgKSB7CisJCWlmIChlLnN0YWNr
dHJhY2UpIHsKKwkJCS8vIE9wZXJhCisJCQlyZXR1cm4gZS5zdGFja3RyYWNlLnNwbGl0KCJcbiIp
WzZdOworCQl9IGVsc2UgaWYgKGUuc3RhY2spIHsKKwkJCS8vIEZpcmVmb3gsIENocm9tZQorCQkJ
cmV0dXJuIGUuc3RhY2suc3BsaXQoIlxuIilbNF07CisJCX0KKwl9Cit9CisKK2Z1bmN0aW9uIGVz
Y2FwZUh0bWwocykgeworCWlmICghcykgeworCQlyZXR1cm4gIiI7CisJfQorCXMgPSBzICsgIiI7
CisJcmV0dXJuIHMucmVwbGFjZSgvW1wmIjw+XFxdL2csIGZ1bmN0aW9uKHMpIHsKKwkJc3dpdGNo
KHMpIHsKKwkJCWNhc2UgIiYiOiByZXR1cm4gIiZhbXA7IjsKKwkJCWNhc2UgIlxcIjogcmV0dXJu
ICJcXFxcIjsKKwkJCWNhc2UgJyInOiByZXR1cm4gJ1wiJzsKKwkJCWNhc2UgIjwiOiByZXR1cm4g
IiZsdDsiOworCQkJY2FzZSAiPiI6IHJldHVybiAiJmd0OyI7CisJCQlkZWZhdWx0OiByZXR1cm4g
czsKKwkJfQorCX0pOworfQorCitmdW5jdGlvbiBzeW5jaHJvbml6ZSggY2FsbGJhY2sgKSB7CisJ
Y29uZmlnLnF1ZXVlLnB1c2goIGNhbGxiYWNrICk7CisKKwlpZiAoIGNvbmZpZy5hdXRvcnVuICYm
ICFjb25maWcuYmxvY2tpbmcgKSB7CisJCXByb2Nlc3MoKTsKKwl9Cit9CisKK2Z1bmN0aW9uIHBy
b2Nlc3MoKSB7CisJdmFyIHN0YXJ0ID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTsKKworCXdoaWxl
ICggY29uZmlnLnF1ZXVlLmxlbmd0aCAmJiAhY29uZmlnLmJsb2NraW5nICkgeworCQlpZiAoIGNv
bmZpZy51cGRhdGVSYXRlIDw9IDAgfHwgKCgobmV3IERhdGUoKSkuZ2V0VGltZSgpIC0gc3RhcnQp
IDwgY29uZmlnLnVwZGF0ZVJhdGUpICkgeworCQkJY29uZmlnLnF1ZXVlLnNoaWZ0KCkoKTsKKwkJ
fSBlbHNlIHsKKwkJCXdpbmRvdy5zZXRUaW1lb3V0KCBwcm9jZXNzLCAxMyApOworCQkJYnJlYWs7
CisJCX0KKwl9CisgIGlmICghY29uZmlnLmJsb2NraW5nICYmICFjb25maWcucXVldWUubGVuZ3Ro
KSB7CisgICAgZG9uZSgpOworICB9Cit9CisKK2Z1bmN0aW9uIHNhdmVHbG9iYWwoKSB7CisJY29u
ZmlnLnBvbGx1dGlvbiA9IFtdOworCQorCWlmICggY29uZmlnLm5vZ2xvYmFscyApIHsKKwkJZm9y
ICggdmFyIGtleSBpbiB3aW5kb3cgKSB7CisJCQljb25maWcucG9sbHV0aW9uLnB1c2goIGtleSAp
OworCQl9CisJfQorfQorCitmdW5jdGlvbiBjaGVja1BvbGx1dGlvbiggbmFtZSApIHsKKwl2YXIg
b2xkID0gY29uZmlnLnBvbGx1dGlvbjsKKwlzYXZlR2xvYmFsKCk7CisJCisJdmFyIG5ld0dsb2Jh
bHMgPSBkaWZmKCBvbGQsIGNvbmZpZy5wb2xsdXRpb24gKTsKKwlpZiAoIG5ld0dsb2JhbHMubGVu
Z3RoID4gMCApIHsKKwkJb2soIGZhbHNlLCAiSW50cm9kdWNlZCBnbG9iYWwgdmFyaWFibGUocyk6
ICIgKyBuZXdHbG9iYWxzLmpvaW4oIiwgIikgKTsKKwkJY29uZmlnLmN1cnJlbnQuZXhwZWN0ZWQr
KzsKKwl9CisKKwl2YXIgZGVsZXRlZEdsb2JhbHMgPSBkaWZmKCBjb25maWcucG9sbHV0aW9uLCBv
bGQgKTsKKwlpZiAoIGRlbGV0ZWRHbG9iYWxzLmxlbmd0aCA+IDAgKSB7CisJCW9rKCBmYWxzZSwg
IkRlbGV0ZWQgZ2xvYmFsIHZhcmlhYmxlKHMpOiAiICsgZGVsZXRlZEdsb2JhbHMuam9pbigiLCAi
KSApOworCQljb25maWcuY3VycmVudC5leHBlY3RlZCsrOworCX0KK30KKworLy8gcmV0dXJucyBh
IG5ldyBBcnJheSB3aXRoIHRoZSBlbGVtZW50cyB0aGF0IGFyZSBpbiBhIGJ1dCBub3QgaW4gYgor
ZnVuY3Rpb24gZGlmZiggYSwgYiApIHsKKwl2YXIgcmVzdWx0ID0gYS5zbGljZSgpOworCWZvciAo
IHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKyApIHsKKwkJZm9yICggdmFyIGogPSAw
OyBqIDwgYi5sZW5ndGg7IGorKyApIHsKKwkJCWlmICggcmVzdWx0W2ldID09PSBiW2pdICkgewor
CQkJCXJlc3VsdC5zcGxpY2UoaSwgMSk7CisJCQkJaS0tOworCQkJCWJyZWFrOworCQkJfQorCQl9
CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKK2Z1bmN0aW9uIGZhaWwobWVzc2FnZSwgZXhjZXB0
aW9uLCBjYWxsYmFjaykgeworCWlmICggdHlwZW9mIGNvbnNvbGUgIT09ICJ1bmRlZmluZWQiICYm
IGNvbnNvbGUuZXJyb3IgJiYgY29uc29sZS53YXJuICkgeworCQljb25zb2xlLmVycm9yKG1lc3Nh
Z2UpOworCQljb25zb2xlLmVycm9yKGV4Y2VwdGlvbik7CisJCWNvbnNvbGUud2FybihjYWxsYmFj
ay50b1N0cmluZygpKTsKKworCX0gZWxzZSBpZiAoIHdpbmRvdy5vcGVyYSAmJiBvcGVyYS5wb3N0
RXJyb3IgKSB7CisJCW9wZXJhLnBvc3RFcnJvcihtZXNzYWdlLCBleGNlcHRpb24sIGNhbGxiYWNr
LnRvU3RyaW5nKTsKKwl9Cit9CisKK2Z1bmN0aW9uIGV4dGVuZChhLCBiKSB7CisJZm9yICggdmFy
IHByb3AgaW4gYiApIHsKKwkJaWYgKCBiW3Byb3BdID09PSB1bmRlZmluZWQgKSB7CisJCQlkZWxl
dGUgYVtwcm9wXTsKKwkJfSBlbHNlIHsKKwkJCWFbcHJvcF0gPSBiW3Byb3BdOworCQl9CisJfQor
CisJcmV0dXJuIGE7Cit9CisKK2Z1bmN0aW9uIGFkZEV2ZW50KGVsZW0sIHR5cGUsIGZuKSB7CisJ
aWYgKCBlbGVtLmFkZEV2ZW50TGlzdGVuZXIgKSB7CisJCWVsZW0uYWRkRXZlbnRMaXN0ZW5lcigg
dHlwZSwgZm4sIGZhbHNlICk7CisJfSBlbHNlIGlmICggZWxlbS5hdHRhY2hFdmVudCApIHsKKwkJ
ZWxlbS5hdHRhY2hFdmVudCggIm9uIiArIHR5cGUsIGZuICk7CisJfSBlbHNlIHsKKwkJZm4oKTsK
Kwl9Cit9CisKK2Z1bmN0aW9uIGlkKG5hbWUpIHsKKwlyZXR1cm4gISEodHlwZW9mIGRvY3VtZW50
ICE9PSAidW5kZWZpbmVkIiAmJiBkb2N1bWVudCAmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCkg
JiYKKwkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG5hbWUgKTsKK30KKworLy8gVGVzdCBmb3Ig
ZXF1YWxpdHkgYW55IEphdmFTY3JpcHQgdHlwZS4KKy8vIERpc2N1c3Npb25zIGFuZCByZWZlcmVu
Y2U6IGh0dHA6Ly9waGlscmF0aGUuY29tL2FydGljbGVzL2VxdWl2CisvLyBUZXN0IHN1aXRlczog
aHR0cDovL3BoaWxyYXRoZS5jb20vdGVzdHMvZXF1aXYKKy8vIEF1dGhvcjogUGhpbGlwcGUgUmF0
aMOpIDxwcmF0aGVAZ21haWwuY29tPgorUVVuaXQuZXF1aXYgPSBmdW5jdGlvbiAoKSB7CisKKyAg
ICB2YXIgaW5uZXJFcXVpdjsgLy8gdGhlIHJlYWwgZXF1aXYgZnVuY3Rpb24KKyAgICB2YXIgY2Fs
bGVycyA9IFtdOyAvLyBzdGFjayB0byBkZWNpZGUgYmV0d2VlbiBza2lwL2Fib3J0IGZ1bmN0aW9u
cworICAgIHZhciBwYXJlbnRzID0gW107IC8vIHN0YWNrIHRvIGF2b2lkaW5nIGxvb3BzIGZyb20g
Y2lyY3VsYXIgcmVmZXJlbmNpbmcKKworICAgIC8vIENhbGwgdGhlIG8gcmVsYXRlZCBjYWxsYmFj
ayB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMuCisgICAgZnVuY3Rpb24gYmluZENhbGxiYWNrcyhv
LCBjYWxsYmFja3MsIGFyZ3MpIHsKKyAgICAgICAgdmFyIHByb3AgPSBRVW5pdC5vYmplY3RUeXBl
KG8pOworICAgICAgICBpZiAocHJvcCkgeworICAgICAgICAgICAgaWYgKFFVbml0Lm9iamVjdFR5
cGUoY2FsbGJhY2tzW3Byb3BdKSA9PT0gImZ1bmN0aW9uIikgeworICAgICAgICAgICAgICAgIHJl
dHVybiBjYWxsYmFja3NbcHJvcF0uYXBwbHkoY2FsbGJhY2tzLCBhcmdzKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrc1twcm9wXTsgLy8gb3Ig
dW5kZWZpbmVkCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdmFy
IGNhbGxiYWNrcyA9IGZ1bmN0aW9uICgpIHsKKworICAgICAgICAvLyBmb3Igc3RyaW5nLCBib29s
ZWFuLCBudW1iZXIgYW5kIG51bGwKKyAgICAgICAgZnVuY3Rpb24gdXNlU3RyaWN0RXF1YWxpdHko
YiwgYSkgeworICAgICAgICAgICAgaWYgKGIgaW5zdGFuY2VvZiBhLmNvbnN0cnVjdG9yIHx8IGEg
aW5zdGFuY2VvZiBiLmNvbnN0cnVjdG9yKSB7CisgICAgICAgICAgICAgICAgLy8gdG8gY2F0Y2gg
c2hvcnQgYW5ub3RhaW9uIFZTICduZXcnIGFubm90YXRpb24gb2YgYSBkZWNsYXJhdGlvbgorICAg
ICAgICAgICAgICAgIC8vIGUuZy4gdmFyIGkgPSAxOworICAgICAgICAgICAgICAgIC8vICAgICAg
dmFyIGogPSBuZXcgTnVtYmVyKDEpOworICAgICAgICAgICAgICAgIHJldHVybiBhID09IGI7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBhID09PSBiOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICJz
dHJpbmciOiB1c2VTdHJpY3RFcXVhbGl0eSwKKyAgICAgICAgICAgICJib29sZWFuIjogdXNlU3Ry
aWN0RXF1YWxpdHksCisgICAgICAgICAgICAibnVtYmVyIjogdXNlU3RyaWN0RXF1YWxpdHksCisg
ICAgICAgICAgICAibnVsbCI6IHVzZVN0cmljdEVxdWFsaXR5LAorICAgICAgICAgICAgInVuZGVm
aW5lZCI6IHVzZVN0cmljdEVxdWFsaXR5LAorCisgICAgICAgICAgICAibmFuIjogZnVuY3Rpb24g
KGIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaXNOYU4oYik7CisgICAgICAgICAgICB9LAor
CisgICAgICAgICAgICAiZGF0ZSI6IGZ1bmN0aW9uIChiLCBhKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIFFVbml0Lm9iamVjdFR5cGUoYikgPT09ICJkYXRlIiAmJiBhLnZhbHVlT2YoKSA9PT0g
Yi52YWx1ZU9mKCk7CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAicmVnZXhwIjogZnVu
Y3Rpb24gKGIsIGEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gUVVuaXQub2JqZWN0VHlwZShi
KSA9PT0gInJlZ2V4cCIgJiYKKyAgICAgICAgICAgICAgICAgICAgYS5zb3VyY2UgPT09IGIuc291
cmNlICYmIC8vIHRoZSByZWdleCBpdHNlbGYKKyAgICAgICAgICAgICAgICAgICAgYS5nbG9iYWwg
PT09IGIuZ2xvYmFsICYmIC8vIGFuZCBpdHMgbW9kaWZlcnMgKGdtaSkgLi4uCisgICAgICAgICAg
ICAgICAgICAgIGEuaWdub3JlQ2FzZSA9PT0gYi5pZ25vcmVDYXNlICYmCisgICAgICAgICAgICAg
ICAgICAgIGEubXVsdGlsaW5lID09PSBiLm11bHRpbGluZTsKKyAgICAgICAgICAgIH0sCisKKyAg
ICAgICAgICAgIC8vIC0gc2tpcCB3aGVuIHRoZSBwcm9wZXJ0eSBpcyBhIG1ldGhvZCBvZiBhbiBp
bnN0YW5jZSAoT09QKQorICAgICAgICAgICAgLy8gLSBhYm9ydCBvdGhlcndpc2UsCisgICAgICAg
ICAgICAvLyAgIGluaXRpYWwgPT09IHdvdWxkIGhhdmUgY2F0Y2ggaWRlbnRpY2FsIHJlZmVyZW5j
ZXMgYW55d2F5CisgICAgICAgICAgICAiZnVuY3Rpb24iOiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICAgICAgdmFyIGNhbGxlciA9IGNhbGxlcnNbY2FsbGVycy5sZW5ndGggLSAxXTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gY2FsbGVyICE9PSBPYmplY3QgJiYKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHR5cGVvZiBjYWxsZXIgIT09ICJ1bmRlZmluZWQiOworICAgICAgICAgICAgfSwKKwor
ICAgICAgICAgICAgImFycmF5IjogZnVuY3Rpb24gKGIsIGEpIHsKKyAgICAgICAgICAgICAgICB2
YXIgaSwgaiwgbG9vcDsKKyAgICAgICAgICAgICAgICB2YXIgbGVuOworCisgICAgICAgICAgICAg
ICAgLy8gYiBjb3VsZCBiZSBhbiBvYmplY3QgbGl0ZXJhbCBoZXJlCisgICAgICAgICAgICAgICAg
aWYgKCAhIChRVW5pdC5vYmplY3RUeXBlKGIpID09PSAiYXJyYXkiKSkgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfSAgIAorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGxlbiA9IGEubGVuZ3RoOworICAgICAgICAgICAgICAgIGlm
IChsZW4gIT09IGIubGVuZ3RoKSB7IC8vIHNhZmUgYW5kIGZhc3RlcgorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIC8vdHJhY2sgcmVmZXJlbmNlIHRvIGF2b2lkIGNpcmN1bGFyIHJlZmVy
ZW5jZXMKKyAgICAgICAgICAgICAgICBwYXJlbnRzLnB1c2goYSk7CisgICAgICAgICAgICAgICAg
Zm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGxvb3AgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZm9yKGo9MDtqPHBhcmVudHMubGVuZ3RoO2orKyl7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZihwYXJlbnRzW2pdID09PSBhW2ldKXsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb29wID0gdHJ1ZTsvL2RvbnQgcmV3YWxrIGFycmF5Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFsb29wICYmICEgaW5uZXJFcXVpdihhW2ldLCBiW2ldKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyZW50cy5wb3AoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBwYXJlbnRzLnBvcCgpOworICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgIm9iamVjdCI6IGZ1bmN0aW9u
IChiLCBhKSB7CisgICAgICAgICAgICAgICAgdmFyIGksIGosIGxvb3A7CisgICAgICAgICAgICAg
ICAgdmFyIGVxID0gdHJ1ZTsgLy8gdW5sZXNzIHdlIGNhbiBwcm9vdmUgaXQKKyAgICAgICAgICAg
ICAgICB2YXIgYVByb3BlcnRpZXMgPSBbXSwgYlByb3BlcnRpZXMgPSBbXTsgLy8gY29sbGVjdGlv
biBvZiBzdHJpbmdzCisKKyAgICAgICAgICAgICAgICAvLyBjb21wYXJpbmcgY29uc3RydWN0b3Jz
IGlzIG1vcmUgc3RyaWN0IHRoYW4gdXNpbmcgaW5zdGFuY2VvZgorICAgICAgICAgICAgICAgIGlm
ICggYS5jb25zdHJ1Y3RvciAhPT0gYi5jb25zdHJ1Y3RvcikgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8g
c3RhY2sgY29uc3RydWN0b3IgYmVmb3JlIHRyYXZlcnNpbmcgcHJvcGVydGllcworICAgICAgICAg
ICAgICAgIGNhbGxlcnMucHVzaChhLmNvbnN0cnVjdG9yKTsKKyAgICAgICAgICAgICAgICAvL3Ry
YWNrIHJlZmVyZW5jZSB0byBhdm9pZCBjaXJjdWxhciByZWZlcmVuY2VzCisgICAgICAgICAgICAg
ICAgcGFyZW50cy5wdXNoKGEpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZv
ciAoaSBpbiBhKSB7IC8vIGJlIHN0cmljdDogZG9uJ3QgZW5zdXJlcyBoYXNPd25Qcm9wZXJ0eSBh
bmQgZ28gZGVlcAorICAgICAgICAgICAgICAgICAgICBsb29wID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgIGZvcihqPTA7ajxwYXJlbnRzLmxlbmd0aDtqKyspeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYocGFyZW50c1tqXSA9PT0gYVtpXSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsb29wID0gdHJ1ZTsgLy9kb24ndCBnbyBkb3duIHRoZSBzYW1lIHBhdGggdHdpY2UKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBhUHJvcGVydGllcy5wdXNo
KGkpOyAvLyBjb2xsZWN0IGEncyBwcm9wZXJ0aWVzCisKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFsb29wICYmICEgaW5uZXJFcXVpdihhW2ldLCBiW2ldKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgZXEgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY2Fs
bGVycy5wb3AoKTsgLy8gdW5zdGFjaywgd2UgYXJlIGRvbmUKKyAgICAgICAgICAgICAgICBwYXJl
bnRzLnBvcCgpOworCisgICAgICAgICAgICAgICAgZm9yIChpIGluIGIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgYlByb3BlcnRpZXMucHVzaChpKTsgLy8gY29sbGVjdCBiJ3MgcHJvcGVydGllcwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEVuc3VyZXMgaWRlbnRpY2Fs
IHByb3BlcnRpZXMgbmFtZQorICAgICAgICAgICAgICAgIHJldHVybiBlcSAmJiBpbm5lckVxdWl2
KGFQcm9wZXJ0aWVzLnNvcnQoKSwgYlByb3BlcnRpZXMuc29ydCgpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfTsKKyAgICB9KCk7CisKKyAgICBpbm5lckVxdWl2ID0gZnVuY3Rpb24gKCkgeyAv
LyBjYW4gdGFrZSBtdWx0aXBsZSBhcmd1bWVudHMKKyAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5w
cm90b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzKTsKKyAgICAgICAgaWYgKGFyZ3MubGVuZ3Ro
IDwgMikgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIGVuZCB0cmFuc2l0aW9uCisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gKGZ1bmN0aW9uIChhLCBiKSB7CisgICAgICAgICAgICBp
ZiAoYSA9PT0gYikgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBjYXRjaCB0aGUg
bW9zdCB5b3UgY2FuCisgICAgICAgICAgICB9IGVsc2UgaWYgKGEgPT09IG51bGwgfHwgYiA9PT0g
bnVsbCB8fCB0eXBlb2YgYSA9PT0gInVuZGVmaW5lZCIgfHwgdHlwZW9mIGIgPT09ICJ1bmRlZmlu
ZWQiIHx8IFFVbml0Lm9iamVjdFR5cGUoYSkgIT09IFFVbml0Lm9iamVjdFR5cGUoYikpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGRvbid0IGxvc2UgdGltZSB3aXRoIGVycm9y
IHByb25lIGNhc2VzCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVy
biBiaW5kQ2FsbGJhY2tzKGEsIGNhbGxiYWNrcywgW2IsIGFdKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAvLyBhcHBseSB0cmFuc2l0aW9uIHdpdGggKDEuLm4pIGFyZ3VtZW50cworICAgICAg
ICB9KShhcmdzWzBdLCBhcmdzWzFdKSAmJiBhcmd1bWVudHMuY2FsbGVlLmFwcGx5KHRoaXMsIGFy
Z3Muc3BsaWNlKDEsIGFyZ3MubGVuZ3RoIC0xKSk7CisgICAgfTsKKworICAgIHJldHVybiBpbm5l
ckVxdWl2OworCit9KCk7CisKKy8qKgorICoganNEdW1wCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgg
QXJpZWwgRmxlc2xlciAtIGFmbGVzbGVyKGF0KWdtYWlsKGRvdCljb20gfCBodHRwOi8vZmxlc2xl
ci5ibG9nc3BvdC5jb20KKyAqIExpY2Vuc2VkIHVuZGVyIEJTRCAoaHR0cDovL3d3dy5vcGVuc291
cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHApCisgKiBEYXRlOiA1LzE1LzIwMDgKKyAq
IEBwcm9qZWN0RGVzY3JpcHRpb24gQWR2YW5jZWQgYW5kIGV4dGVuc2libGUgZGF0YSBkdW1waW5n
IGZvciBKYXZhc2NyaXB0LgorICogQHZlcnNpb24gMS4wLjAKKyAqIEBhdXRob3IgQXJpZWwgRmxl
c2xlcgorICogQGxpbmsge2h0dHA6Ly9mbGVzbGVyLmJsb2dzcG90LmNvbS8yMDA4LzA1L2pzZHVt
cC1wcmV0dHktZHVtcC1vZi1hbnktamF2YXNjcmlwdC5odG1sfQorICovCitRVW5pdC5qc0R1bXAg
PSAoZnVuY3Rpb24oKSB7CisJZnVuY3Rpb24gcXVvdGUoIHN0ciApIHsKKwkJcmV0dXJuICciJyAr
IHN0ci50b1N0cmluZygpLnJlcGxhY2UoLyIvZywgJ1xcIicpICsgJyInOworCX07CisJZnVuY3Rp
b24gbGl0ZXJhbCggbyApIHsKKwkJcmV0dXJuIG8gKyAnJzsJCisJfTsKKwlmdW5jdGlvbiBqb2lu
KCBwcmUsIGFyciwgcG9zdCApIHsKKwkJdmFyIHMgPSBqc0R1bXAuc2VwYXJhdG9yKCksCisJCQli
YXNlID0ganNEdW1wLmluZGVudCgpLAorCQkJaW5uZXIgPSBqc0R1bXAuaW5kZW50KDEpOworCQlp
ZiAoIGFyci5qb2luICkKKwkJCWFyciA9IGFyci5qb2luKCAnLCcgKyBzICsgaW5uZXIgKTsKKwkJ
aWYgKCAhYXJyICkKKwkJCXJldHVybiBwcmUgKyBwb3N0OworCQlyZXR1cm4gWyBwcmUsIGlubmVy
ICsgYXJyLCBiYXNlICsgcG9zdCBdLmpvaW4ocyk7CisJfTsKKwlmdW5jdGlvbiBhcnJheSggYXJy
ICkgeworCQl2YXIgaSA9IGFyci5sZW5ndGgsCXJldCA9IEFycmF5KGkpOwkJCQkJCisJCXRoaXMu
dXAoKTsKKwkJd2hpbGUgKCBpLS0gKQorCQkJcmV0W2ldID0gdGhpcy5wYXJzZSggYXJyW2ldICk7
CQkJCQorCQl0aGlzLmRvd24oKTsKKwkJcmV0dXJuIGpvaW4oICdbJywgcmV0LCAnXScgKTsKKwl9
OworCQorCXZhciByZU5hbWUgPSAvXmZ1bmN0aW9uIChcdyspLzsKKwkKKwl2YXIganNEdW1wID0g
eworCQlwYXJzZTpmdW5jdGlvbiggb2JqLCB0eXBlICkgeyAvL3R5cGUgaXMgdXNlZCBtb3N0bHkg
aW50ZXJuYWxseSwgeW91IGNhbiBmaXggYSAoY3VzdG9tKXR5cGUgaW4gYWR2YW5jZQorCQkJdmFy
CXBhcnNlciA9IHRoaXMucGFyc2Vyc1sgdHlwZSB8fCB0aGlzLnR5cGVPZihvYmopIF07CisJCQl0
eXBlID0gdHlwZW9mIHBhcnNlcjsJCQkKKwkJCQorCQkJcmV0dXJuIHR5cGUgPT0gJ2Z1bmN0aW9u
JyA/IHBhcnNlci5jYWxsKCB0aGlzLCBvYmogKSA6CisJCQkJICAgdHlwZSA9PSAnc3RyaW5nJyA/
IHBhcnNlciA6CisJCQkJICAgdGhpcy5wYXJzZXJzLmVycm9yOworCQl9LAorCQl0eXBlT2Y6ZnVu
Y3Rpb24oIG9iaiApIHsKKwkJCXZhciB0eXBlOworCQkJaWYgKCBvYmogPT09IG51bGwgKSB7CisJ
CQkJdHlwZSA9ICJudWxsIjsKKwkJCX0gZWxzZSBpZiAodHlwZW9mIG9iaiA9PT0gInVuZGVmaW5l
ZCIpIHsKKwkJCQl0eXBlID0gInVuZGVmaW5lZCI7CisJCQl9IGVsc2UgaWYgKFFVbml0LmlzKCJS
ZWdFeHAiLCBvYmopKSB7CisJCQkJdHlwZSA9ICJyZWdleHAiOworCQkJfSBlbHNlIGlmIChRVW5p
dC5pcygiRGF0ZSIsIG9iaikpIHsKKwkJCQl0eXBlID0gImRhdGUiOworCQkJfSBlbHNlIGlmIChR
VW5pdC5pcygiRnVuY3Rpb24iLCBvYmopKSB7CisJCQkJdHlwZSA9ICJmdW5jdGlvbiI7CisJCQl9
IGVsc2UgaWYgKHR5cGVvZiBvYmouc2V0SW50ZXJ2YWwgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Yg
b2JqLmRvY3VtZW50ICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2Ygb2JqLm5vZGVUeXBlID09PSAi
dW5kZWZpbmVkIikgeworCQkJCXR5cGUgPSAid2luZG93IjsKKwkJCX0gZWxzZSBpZiAob2JqLm5v
ZGVUeXBlID09PSA5KSB7CisJCQkJdHlwZSA9ICJkb2N1bWVudCI7CisJCQl9IGVsc2UgaWYgKG9i
ai5ub2RlVHlwZSkgeworCQkJCXR5cGUgPSAibm9kZSI7CisJCQl9IGVsc2UgaWYgKHR5cGVvZiBv
YmogPT09ICJvYmplY3QiICYmIHR5cGVvZiBvYmoubGVuZ3RoID09PSAibnVtYmVyIiAmJiBvYmou
bGVuZ3RoID49IDApIHsKKwkJCQl0eXBlID0gImFycmF5IjsKKwkJCX0gZWxzZSB7CisJCQkJdHlw
ZSA9IHR5cGVvZiBvYmo7CisJCQl9CisJCQlyZXR1cm4gdHlwZTsKKwkJfSwKKwkJc2VwYXJhdG9y
OmZ1bmN0aW9uKCkgeworCQkJcmV0dXJuIHRoaXMubXVsdGlsaW5lID8JdGhpcy5IVE1MID8gJzxi
ciAvPicgOiAnXG4nIDogdGhpcy5IVE1MID8gJyZuYnNwOycgOiAnICc7CisJCX0sCisJCWluZGVu
dDpmdW5jdGlvbiggZXh0cmEgKSB7Ly8gZXh0cmEgY2FuIGJlIGEgbnVtYmVyLCBzaG9ydGN1dCBm
b3IgaW5jcmVhc2luZy1jYWxsaW5nLWRlY3JlYXNpbmcKKwkJCWlmICggIXRoaXMubXVsdGlsaW5l
ICkKKwkJCQlyZXR1cm4gJyc7CisJCQl2YXIgY2hyID0gdGhpcy5pbmRlbnRDaGFyOworCQkJaWYg
KCB0aGlzLkhUTUwgKQorCQkJCWNociA9IGNoci5yZXBsYWNlKC9cdC9nLCcgICAnKS5yZXBsYWNl
KC8gL2csJyZuYnNwOycpOworCQkJcmV0dXJuIEFycmF5KCB0aGlzLl9kZXB0aF8gKyAoZXh0cmF8
fDApICkuam9pbihjaHIpOworCQl9LAorCQl1cDpmdW5jdGlvbiggYSApIHsKKwkJCXRoaXMuX2Rl
cHRoXyArPSBhIHx8IDE7CisJCX0sCisJCWRvd246ZnVuY3Rpb24oIGEgKSB7CisJCQl0aGlzLl9k
ZXB0aF8gLT0gYSB8fCAxOworCQl9LAorCQlzZXRQYXJzZXI6ZnVuY3Rpb24oIG5hbWUsIHBhcnNl
ciApIHsKKwkJCXRoaXMucGFyc2Vyc1tuYW1lXSA9IHBhcnNlcjsKKwkJfSwKKwkJLy8gVGhlIG5l
eHQgMyBhcmUgZXhwb3NlZCBzbyB5b3UgY2FuIHVzZSB0aGVtCisJCXF1b3RlOnF1b3RlLCAKKwkJ
bGl0ZXJhbDpsaXRlcmFsLAorCQlqb2luOmpvaW4sCisJCS8vCisJCV9kZXB0aF86IDEsCisJCS8v
IFRoaXMgaXMgdGhlIGxpc3Qgb2YgcGFyc2VycywgdG8gbW9kaWZ5IHRoZW0sIHVzZSBqc0R1bXAu
c2V0UGFyc2VyCisJCXBhcnNlcnM6eworCQkJd2luZG93OiAnW1dpbmRvd10nLAorCQkJZG9jdW1l
bnQ6ICdbRG9jdW1lbnRdJywKKwkJCWVycm9yOidbRVJST1JdJywgLy93aGVuIG5vIHBhcnNlciBp
cyBmb3VuZCwgc2hvdWxkbid0IGhhcHBlbgorCQkJdW5rbm93bjogJ1tVbmtub3duXScsCisJCQkn
bnVsbCc6J251bGwnLAorCQkJJ3VuZGVmaW5lZCc6J3VuZGVmaW5lZCcsCisJCQknZnVuY3Rpb24n
OmZ1bmN0aW9uKCBmbiApIHsKKwkJCQl2YXIgcmV0ID0gJ2Z1bmN0aW9uJywKKwkJCQkJbmFtZSA9
ICduYW1lJyBpbiBmbiA/IGZuLm5hbWUgOiAocmVOYW1lLmV4ZWMoZm4pfHxbXSlbMV07Ly9mdW5j
dGlvbnMgbmV2ZXIgaGF2ZSBuYW1lIGluIElFCisJCQkJaWYgKCBuYW1lICkKKwkJCQkJcmV0ICs9
ICcgJyArIG5hbWU7CisJCQkJcmV0ICs9ICcoJzsKKwkJCQkKKwkJCQlyZXQgPSBbIHJldCwgUVVu
aXQuanNEdW1wLnBhcnNlKCBmbiwgJ2Z1bmN0aW9uQXJncycgKSwgJyl7J10uam9pbignJyk7CisJ
CQkJcmV0dXJuIGpvaW4oIHJldCwgUVVuaXQuanNEdW1wLnBhcnNlKGZuLCdmdW5jdGlvbkNvZGUn
KSwgJ30nICk7CisJCQl9LAorCQkJYXJyYXk6IGFycmF5LAorCQkJbm9kZWxpc3Q6IGFycmF5LAor
CQkJYXJndW1lbnRzOiBhcnJheSwKKwkJCW9iamVjdDpmdW5jdGlvbiggbWFwICkgeworCQkJCXZh
ciByZXQgPSBbIF07CisJCQkJUVVuaXQuanNEdW1wLnVwKCk7CisJCQkJZm9yICggdmFyIGtleSBp
biBtYXAgKQorCQkJCQlyZXQucHVzaCggUVVuaXQuanNEdW1wLnBhcnNlKGtleSwna2V5JykgKyAn
OiAnICsgUVVuaXQuanNEdW1wLnBhcnNlKG1hcFtrZXldKSApOworCQkJCVFVbml0LmpzRHVtcC5k
b3duKCk7CisJCQkJcmV0dXJuIGpvaW4oICd7JywgcmV0LCAnfScgKTsKKwkJCX0sCisJCQlub2Rl
OmZ1bmN0aW9uKCBub2RlICkgeworCQkJCXZhciBvcGVuID0gUVVuaXQuanNEdW1wLkhUTUwgPyAn
Jmx0OycgOiAnPCcsCisJCQkJCWNsb3NlID0gUVVuaXQuanNEdW1wLkhUTUwgPyAnJmd0OycgOiAn
Pic7CisJCQkJCQorCQkJCXZhciB0YWcgPSBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksCisJ
CQkJCXJldCA9IG9wZW4gKyB0YWc7CisJCQkJCQorCQkJCWZvciAoIHZhciBhIGluIFFVbml0Lmpz
RHVtcC5ET01BdHRycyApIHsKKwkJCQkJdmFyIHZhbCA9IG5vZGVbUVVuaXQuanNEdW1wLkRPTUF0
dHJzW2FdXTsKKwkJCQkJaWYgKCB2YWwgKQorCQkJCQkJcmV0ICs9ICcgJyArIGEgKyAnPScgKyBR
VW5pdC5qc0R1bXAucGFyc2UoIHZhbCwgJ2F0dHJpYnV0ZScgKTsKKwkJCQl9CisJCQkJcmV0dXJu
IHJldCArIGNsb3NlICsgb3BlbiArICcvJyArIHRhZyArIGNsb3NlOworCQkJfSwKKwkJCWZ1bmN0
aW9uQXJnczpmdW5jdGlvbiggZm4gKSB7Ly9mdW5jdGlvbiBjYWxscyBpdCBpbnRlcm5hbGx5LCBp
dCdzIHRoZSBhcmd1bWVudHMgcGFydCBvZiB0aGUgZnVuY3Rpb24KKwkJCQl2YXIgbCA9IGZuLmxl
bmd0aDsKKwkJCQlpZiAoICFsICkgcmV0dXJuICcnOwkJCQkKKwkJCQkKKwkJCQl2YXIgYXJncyA9
IEFycmF5KGwpOworCQkJCXdoaWxlICggbC0tICkKKwkJCQkJYXJnc1tsXSA9IFN0cmluZy5mcm9t
Q2hhckNvZGUoOTcrbCk7Ly85NyBpcyAnYScKKwkJCQlyZXR1cm4gJyAnICsgYXJncy5qb2luKCcs
ICcpICsgJyAnOworCQkJfSwKKwkJCWtleTpxdW90ZSwgLy9vYmplY3QgY2FsbHMgaXQgaW50ZXJu
YWxseSwgdGhlIGtleSBwYXJ0IG9mIGFuIGl0ZW0gaW4gYSBtYXAKKwkJCWZ1bmN0aW9uQ29kZTon
W2NvZGVdJywgLy9mdW5jdGlvbiBjYWxscyBpdCBpbnRlcm5hbGx5LCBpdCdzIHRoZSBjb250ZW50
IG9mIHRoZSBmdW5jdGlvbgorCQkJYXR0cmlidXRlOnF1b3RlLCAvL25vZGUgY2FsbHMgaXQgaW50
ZXJuYWxseSwgaXQncyBhbiBodG1sIGF0dHJpYnV0ZSB2YWx1ZQorCQkJc3RyaW5nOnF1b3RlLAor
CQkJZGF0ZTpxdW90ZSwKKwkJCXJlZ2V4cDpsaXRlcmFsLCAvL3JlZ2V4CisJCQludW1iZXI6bGl0
ZXJhbCwKKwkJCSdib29sZWFuJzpsaXRlcmFsCisJCX0sCisJCURPTUF0dHJzOnsvL2F0dHJpYnV0
ZXMgdG8gZHVtcCBmcm9tIG5vZGVzLCBuYW1lPT5yZWFsTmFtZQorCQkJaWQ6J2lkJywKKwkJCW5h
bWU6J25hbWUnLAorCQkJJ2NsYXNzJzonY2xhc3NOYW1lJworCQl9LAorCQlIVE1MOmZhbHNlLC8v
aWYgdHJ1ZSwgZW50aXRpZXMgYXJlIGVzY2FwZWQgKCA8LCA+LCBcdCwgc3BhY2UgYW5kIFxuICkK
KwkJaW5kZW50Q2hhcjonICAnLC8vaW5kZW50YXRpb24gdW5pdAorCQltdWx0aWxpbmU6dHJ1ZSAv
L2lmIHRydWUsIGl0ZW1zIGluIGEgY29sbGVjdGlvbiwgYXJlIHNlcGFyYXRlZCBieSBhIFxuLCBl
bHNlIGp1c3QgYSBzcGFjZS4KKwl9OworCisJcmV0dXJuIGpzRHVtcDsKK30pKCk7CisKKy8vIGZy
b20gU2l6emxlLmpzCitmdW5jdGlvbiBnZXRUZXh0KCBlbGVtcyApIHsKKwl2YXIgcmV0ID0gIiIs
IGVsZW07CisKKwlmb3IgKCB2YXIgaSA9IDA7IGVsZW1zW2ldOyBpKysgKSB7CisJCWVsZW0gPSBl
bGVtc1tpXTsKKworCQkvLyBHZXQgdGhlIHRleHQgZnJvbSB0ZXh0IG5vZGVzIGFuZCBDREFUQSBu
b2RlcworCQlpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gNCAp
IHsKKwkJCXJldCArPSBlbGVtLm5vZGVWYWx1ZTsKKworCQkvLyBUcmF2ZXJzZSBldmVyeXRoaW5n
IGVsc2UsIGV4Y2VwdCBjb21tZW50IG5vZGVzCisJCX0gZWxzZSBpZiAoIGVsZW0ubm9kZVR5cGUg
IT09IDggKSB7CisJCQlyZXQgKz0gZ2V0VGV4dCggZWxlbS5jaGlsZE5vZGVzICk7CisJCX0KKwl9
CisKKwlyZXR1cm4gcmV0OworfTsKKworLyoKKyAqIEphdmFzY3JpcHQgRGlmZiBBbGdvcml0aG0K
KyAqICBCeSBKb2huIFJlc2lnIChodHRwOi8vZWpvaG4ub3JnLykKKyAqICBNb2RpZmllZCBieSBD
aHUgQWxhbiAic3ByaXRlIgorICoKKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4K
KyAqCisgKiBNb3JlIEluZm86CisgKiAgaHR0cDovL2Vqb2huLm9yZy9wcm9qZWN0cy9qYXZhc2Ny
aXB0LWRpZmYtYWxnb3JpdGhtLworICogIAorICogVXNhZ2U6IFFVbml0LmRpZmYoZXhwZWN0ZWQs
IGFjdHVhbCkKKyAqIAorICogUVVuaXQuZGlmZigidGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQg
b3ZlciIsICJ0aGUgcXVpY2sgZm94IGp1bXBzIG92ZXIiKSA9PSAidGhlICBxdWljayA8ZGVsPmJy
b3duIDwvZGVsPiBmb3ggPGRlbD5qdW1wZWQgPC9kZWw+PGlucz5qdW1wcyA8L2lucz4gb3ZlciIK
KyAqLworUVVuaXQuZGlmZiA9IChmdW5jdGlvbigpIHsKKwlmdW5jdGlvbiBkaWZmKG8sIG4pewor
CQl2YXIgbnMgPSBuZXcgT2JqZWN0KCk7CisJCXZhciBvcyA9IG5ldyBPYmplY3QoKTsKKwkJCisJ
CWZvciAodmFyIGkgPSAwOyBpIDwgbi5sZW5ndGg7IGkrKykgeworCQkJaWYgKG5zW25baV1dID09
IG51bGwpIAorCQkJCW5zW25baV1dID0geworCQkJCQlyb3dzOiBuZXcgQXJyYXkoKSwKKwkJCQkJ
bzogbnVsbAorCQkJCX07CisJCQluc1tuW2ldXS5yb3dzLnB1c2goaSk7CisJCX0KKwkJCisJCWZv
ciAodmFyIGkgPSAwOyBpIDwgby5sZW5ndGg7IGkrKykgeworCQkJaWYgKG9zW29baV1dID09IG51
bGwpIAorCQkJCW9zW29baV1dID0geworCQkJCQlyb3dzOiBuZXcgQXJyYXkoKSwKKwkJCQkJbjog
bnVsbAorCQkJCX07CisJCQlvc1tvW2ldXS5yb3dzLnB1c2goaSk7CisJCX0KKwkJCisJCWZvciAo
dmFyIGkgaW4gbnMpIHsKKwkJCWlmIChuc1tpXS5yb3dzLmxlbmd0aCA9PSAxICYmIHR5cGVvZihv
c1tpXSkgIT0gInVuZGVmaW5lZCIgJiYgb3NbaV0ucm93cy5sZW5ndGggPT0gMSkgeworCQkJCW5b
bnNbaV0ucm93c1swXV0gPSB7CisJCQkJCXRleHQ6IG5bbnNbaV0ucm93c1swXV0sCisJCQkJCXJv
dzogb3NbaV0ucm93c1swXQorCQkJCX07CisJCQkJb1tvc1tpXS5yb3dzWzBdXSA9IHsKKwkJCQkJ
dGV4dDogb1tvc1tpXS5yb3dzWzBdXSwKKwkJCQkJcm93OiBuc1tpXS5yb3dzWzBdCisJCQkJfTsK
KwkJCX0KKwkJfQorCQkKKwkJZm9yICh2YXIgaSA9IDA7IGkgPCBuLmxlbmd0aCAtIDE7IGkrKykg
eworCQkJaWYgKG5baV0udGV4dCAhPSBudWxsICYmIG5baSArIDFdLnRleHQgPT0gbnVsbCAmJiBu
W2ldLnJvdyArIDEgPCBvLmxlbmd0aCAmJiBvW25baV0ucm93ICsgMV0udGV4dCA9PSBudWxsICYm
CisJCQluW2kgKyAxXSA9PSBvW25baV0ucm93ICsgMV0pIHsKKwkJCQluW2kgKyAxXSA9IHsKKwkJ
CQkJdGV4dDogbltpICsgMV0sCisJCQkJCXJvdzogbltpXS5yb3cgKyAxCisJCQkJfTsKKwkJCQlv
W25baV0ucm93ICsgMV0gPSB7CisJCQkJCXRleHQ6IG9bbltpXS5yb3cgKyAxXSwKKwkJCQkJcm93
OiBpICsgMQorCQkJCX07CisJCQl9CisJCX0KKwkJCisJCWZvciAodmFyIGkgPSBuLmxlbmd0aCAt
IDE7IGkgPiAwOyBpLS0pIHsKKwkJCWlmIChuW2ldLnRleHQgIT0gbnVsbCAmJiBuW2kgLSAxXS50
ZXh0ID09IG51bGwgJiYgbltpXS5yb3cgPiAwICYmIG9bbltpXS5yb3cgLSAxXS50ZXh0ID09IG51
bGwgJiYKKwkJCW5baSAtIDFdID09IG9bbltpXS5yb3cgLSAxXSkgeworCQkJCW5baSAtIDFdID0g
eworCQkJCQl0ZXh0OiBuW2kgLSAxXSwKKwkJCQkJcm93OiBuW2ldLnJvdyAtIDEKKwkJCQl9Owor
CQkJCW9bbltpXS5yb3cgLSAxXSA9IHsKKwkJCQkJdGV4dDogb1tuW2ldLnJvdyAtIDFdLAorCQkJ
CQlyb3c6IGkgLSAxCisJCQkJfTsKKwkJCX0KKwkJfQorCQkKKwkJcmV0dXJuIHsKKwkJCW86IG8s
CisJCQluOiBuCisJCX07CisJfQorCQorCXJldHVybiBmdW5jdGlvbihvLCBuKXsKKwkJbyA9IG8u
cmVwbGFjZSgvXHMrJC8sICcnKTsKKwkJbiA9IG4ucmVwbGFjZSgvXHMrJC8sICcnKTsKKwkJdmFy
IG91dCA9IGRpZmYobyA9PSAiIiA/IFtdIDogby5zcGxpdCgvXHMrLyksIG4gPT0gIiIgPyBbXSA6
IG4uc3BsaXQoL1xzKy8pKTsKKworCQl2YXIgc3RyID0gIiI7CisJCQorCQl2YXIgb1NwYWNlID0g
by5tYXRjaCgvXHMrL2cpOworCQlpZiAob1NwYWNlID09IG51bGwpIHsKKwkJCW9TcGFjZSA9IFsi
ICJdOworCQl9CisJCWVsc2UgeworCQkJb1NwYWNlLnB1c2goIiAiKTsKKwkJfQorCQl2YXIgblNw
YWNlID0gbi5tYXRjaCgvXHMrL2cpOworCQlpZiAoblNwYWNlID09IG51bGwpIHsKKwkJCW5TcGFj
ZSA9IFsiICJdOworCQl9CisJCWVsc2UgeworCQkJblNwYWNlLnB1c2goIiAiKTsKKwkJfQorCQkK
KwkJaWYgKG91dC5uLmxlbmd0aCA9PSAwKSB7CisJCQlmb3IgKHZhciBpID0gMDsgaSA8IG91dC5v
Lmxlbmd0aDsgaSsrKSB7CisJCQkJc3RyICs9ICc8ZGVsPicgKyBvdXQub1tpXSArIG9TcGFjZVtp
XSArICI8L2RlbD4iOworCQkJfQorCQl9CisJCWVsc2UgeworCQkJaWYgKG91dC5uWzBdLnRleHQg
PT0gbnVsbCkgeworCQkJCWZvciAobiA9IDA7IG4gPCBvdXQuby5sZW5ndGggJiYgb3V0Lm9bbl0u
dGV4dCA9PSBudWxsOyBuKyspIHsKKwkJCQkJc3RyICs9ICc8ZGVsPicgKyBvdXQub1tuXSArIG9T
cGFjZVtuXSArICI8L2RlbD4iOworCQkJCX0KKwkJCX0KKwkJCQorCQkJZm9yICh2YXIgaSA9IDA7
IGkgPCBvdXQubi5sZW5ndGg7IGkrKykgeworCQkJCWlmIChvdXQubltpXS50ZXh0ID09IG51bGwp
IHsKKwkJCQkJc3RyICs9ICc8aW5zPicgKyBvdXQubltpXSArIG5TcGFjZVtpXSArICI8L2lucz4i
OworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJdmFyIHByZSA9ICIiOworCQkJCQkKKwkJCQkJZm9y
IChuID0gb3V0Lm5baV0ucm93ICsgMTsgbiA8IG91dC5vLmxlbmd0aCAmJiBvdXQub1tuXS50ZXh0
ID09IG51bGw7IG4rKykgeworCQkJCQkJcHJlICs9ICc8ZGVsPicgKyBvdXQub1tuXSArIG9TcGFj
ZVtuXSArICI8L2RlbD4iOworCQkJCQl9CisJCQkJCXN0ciArPSAiICIgKyBvdXQubltpXS50ZXh0
ICsgblNwYWNlW2ldICsgcHJlOworCQkJCX0KKwkJCX0KKwkJfQorCQkKKwkJcmV0dXJuIHN0cjsK
Kwl9OworfSkoKTsKKworfSkodGhpcyk7CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0
cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvcXVuaXQvcXVuaXQvcXVuaXQuanMKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB
ZGRlZDogYWxsb3ctdGFicwogICArIHllcwoKSW5kZXg6IExheW91dFRlc3RzL2pxdWVyeS9yZXNv
dXJjZXMvdGVzdC91bml0L2FqYXguanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanF1ZXJ5
L3Jlc291cmNlcy90ZXN0L3VuaXQvYWpheC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2pxdWVyeS9yZXNvdXJjZXMvdGVzdC91bml0L2FqYXguanMJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjI1MiBAQAorbW9kdWxlKCJhamF4IiwgeyB0ZWFyZG93bjogbW9kdWxlVGVhcmRvd24gfSk7
CisKKy8vIFNhZmFyaSAzIHJhbmRvbWx5IGNyYXNoZXMgd2hlbiBydW5uaW5nIHRoZXNlIHRlc3Rz
LAorLy8gYnV0IG9ubHkgaW4gdGhlIGZ1bGwgc3VpdGUgLSB5b3UgY2FuIHJ1biBqdXN0IHRoZSBB
amF4CisvLyB0ZXN0cyBhbmQgdGhleSdsbCBwYXNzCisvL2lmICggIWpRdWVyeS5icm93c2VyLnNh
ZmFyaSApIHsKKworaWYgKCAhaXNMb2NhbCApIHsKKwordGVzdCgialF1ZXJ5LmFqYXgoKSAtIHN1
Y2Nlc3MgY2FsbGJhY2tzIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KCA4ICk7CisKKwlqUXVlcnku
YWpheFNldHVwKHsgdGltZW91dDogMCB9KTsKKworCXN0b3AoKTsKKworCWpRdWVyeSgnI2Zvbycp
LmFqYXhTdGFydChmdW5jdGlvbigpeworCQlvayggdHJ1ZSwgImFqYXhTdGFydCIgKTsKKwl9KS5h
amF4U3RvcChmdW5jdGlvbigpeworCQlvayggdHJ1ZSwgImFqYXhTdG9wIiApOworCQlzdGFydCgp
OworCX0pLmFqYXhTZW5kKGZ1bmN0aW9uKCl7CisJCW9rKCB0cnVlLCAiYWpheFNlbmQiICk7CisJ
fSkuYWpheENvbXBsZXRlKGZ1bmN0aW9uKCl7CisJCW9rKCB0cnVlLCAiYWpheENvbXBsZXRlIiAp
OworCX0pLmFqYXhFcnJvcihmdW5jdGlvbigpeworCQlvayggZmFsc2UsICJhamF4RXJyb3IiICk7
CisJfSkuYWpheFN1Y2Nlc3MoZnVuY3Rpb24oKXsKKwkJb2soIHRydWUsICJhamF4U3VjY2VzcyIg
KTsKKwl9KTsKKworCWpRdWVyeS5hamF4KHsKKwkJdXJsOiB1cmwoImRhdGEvbmFtZS5odG1sIiks
CisJCWJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCl7IG9rKHRydWUsICJiZWZvcmVTZW5kIik7IH0sCisJ
CXN1Y2Nlc3M6IGZ1bmN0aW9uKCl7IG9rKHRydWUsICJzdWNjZXNzIik7IH0sCisJCWVycm9yOiBm
dW5jdGlvbigpeyBvayhmYWxzZSwgImVycm9yIik7IH0sCisJCWNvbXBsZXRlOiBmdW5jdGlvbigp
eyBvayh0cnVlLCAiY29tcGxldGUiKTsgfQorCX0pOworfSk7CisKK3Rlc3QoImpRdWVyeS5hamF4
KCkgLSBzdWNjZXNzIGNhbGxiYWNrcyAtICh1cmwsIG9wdGlvbnMpIHN5bnRheCIsIGZ1bmN0aW9u
KCkgeworCWV4cGVjdCggOCApOworCisJalF1ZXJ5LmFqYXhTZXR1cCh7IHRpbWVvdXQ6IDAgfSk7
CisKKwlzdG9wKCk7CisKKwlzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CisJCWpRdWVyeSgnI2Zvbycp
LmFqYXhTdGFydChmdW5jdGlvbigpeworCQkJb2soIHRydWUsICJhamF4U3RhcnQiICk7CisJCX0p
LmFqYXhTdG9wKGZ1bmN0aW9uKCl7CisJCQlvayggdHJ1ZSwgImFqYXhTdG9wIiApOworCQkJc3Rh
cnQoKTsKKwkJfSkuYWpheFNlbmQoZnVuY3Rpb24oKXsKKwkJCW9rKCB0cnVlLCAiYWpheFNlbmQi
ICk7CisJCX0pLmFqYXhDb21wbGV0ZShmdW5jdGlvbigpeworCQkJb2soIHRydWUsICJhamF4Q29t
cGxldGUiICk7CisJCX0pLmFqYXhFcnJvcihmdW5jdGlvbigpeworCQkJb2soIGZhbHNlLCAiYWph
eEVycm9yIiApOworCQl9KS5hamF4U3VjY2VzcyhmdW5jdGlvbigpeworCQkJb2soIHRydWUsICJh
amF4U3VjY2VzcyIgKTsKKwkJfSk7CisKKwkJalF1ZXJ5LmFqYXgoIHVybCgiZGF0YS9uYW1lLmh0
bWwiKSAsIHsKKwkJCWJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCl7IG9rKHRydWUsICJiZWZvcmVTZW5k
Iik7IH0sCisJCQlzdWNjZXNzOiBmdW5jdGlvbigpeyBvayh0cnVlLCAic3VjY2VzcyIpOyB9LAor
CQkJZXJyb3I6IGZ1bmN0aW9uKCl7IG9rKGZhbHNlLCAiZXJyb3IiKTsgfSwKKwkJCWNvbXBsZXRl
OiBmdW5jdGlvbigpeyBvayh0cnVlLCAiY29tcGxldGUiKTsgfQorCQl9KTsKKwl9LCAxMyk7Cit9
KTsKKwordGVzdCgialF1ZXJ5LmFqYXgoKSAtIHN1Y2Nlc3MgY2FsbGJhY2tzIChsYXRlIGJpbmRp
bmcpIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KCA4ICk7CisKKwlqUXVlcnkuYWpheFNldHVwKHsg
dGltZW91dDogMCB9KTsKKworCXN0b3AoKTsKKworCXNldFRpbWVvdXQoZnVuY3Rpb24oKXsKKwkJ
alF1ZXJ5KCcjZm9vJykuYWpheFN0YXJ0KGZ1bmN0aW9uKCl7CisJCQlvayggdHJ1ZSwgImFqYXhT
dGFydCIgKTsKKwkJfSkuYWpheFN0b3AoZnVuY3Rpb24oKXsKKwkJCW9rKCB0cnVlLCAiYWpheFN0
b3AiICk7CisJCQlzdGFydCgpOworCQl9KS5hamF4U2VuZChmdW5jdGlvbigpeworCQkJb2soIHRy
dWUsICJhamF4U2VuZCIgKTsKKwkJfSkuYWpheENvbXBsZXRlKGZ1bmN0aW9uKCl7CisJCQlvaygg
dHJ1ZSwgImFqYXhDb21wbGV0ZSIgKTsKKwkJfSkuYWpheEVycm9yKGZ1bmN0aW9uKCl7CisJCQlv
ayggZmFsc2UsICJhamF4RXJyb3IiICk7CisJCX0pLmFqYXhTdWNjZXNzKGZ1bmN0aW9uKCl7CisJ
CQlvayggdHJ1ZSwgImFqYXhTdWNjZXNzIiApOworCQl9KTsKKworCQlqUXVlcnkuYWpheCh7CisJ
CQl1cmw6IHVybCgiZGF0YS9uYW1lLmh0bWwiKSwKKwkJCWJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCl7
IG9rKHRydWUsICJiZWZvcmVTZW5kIik7IH0KKwkJfSkKKwkJCS5jb21wbGV0ZShmdW5jdGlvbigp
eyBvayh0cnVlLCAiY29tcGxldGUiKTsgfSkKKwkJCS5zdWNjZXNzKGZ1bmN0aW9uKCl7IG9rKHRy
dWUsICJzdWNjZXNzIik7IH0pCisJCQkuZXJyb3IoZnVuY3Rpb24oKXsgb2soZmFsc2UsICJlcnJv
ciIpOyB9KTsKKwl9LCAxMyk7Cit9KTsKKwordGVzdCgialF1ZXJ5LmFqYXgoKSAtIHN1Y2Nlc3Mg
Y2FsbGJhY2tzIChvbmNvbXBsZXRlIGJpbmRpbmcpIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KCA4
ICk7CisKKwlqUXVlcnkuYWpheFNldHVwKHsgdGltZW91dDogMCB9KTsKKworCXN0b3AoKTsKKwor
CXNldFRpbWVvdXQoZnVuY3Rpb24oKXsKKwkJalF1ZXJ5KCcjZm9vJykuYWpheFN0YXJ0KGZ1bmN0
aW9uKCl7CisJCQlvayggdHJ1ZSwgImFqYXhTdGFydCIgKTsKKwkJfSkuYWpheFN0b3AoZnVuY3Rp
b24oKXsKKwkJCW9rKCB0cnVlLCAiYWpheFN0b3AiICk7CisJCX0pLmFqYXhTZW5kKGZ1bmN0aW9u
KCl7CisJCQlvayggdHJ1ZSwgImFqYXhTZW5kIiApOworCQl9KS5hamF4Q29tcGxldGUoZnVuY3Rp
b24oKXsKKwkJCW9rKCB0cnVlLCAiYWpheENvbXBsZXRlIiApOworCQl9KS5hamF4RXJyb3IoZnVu
Y3Rpb24oKXsKKwkJCW9rKCBmYWxzZSwgImFqYXhFcnJvciIgKTsKKwkJfSkuYWpheFN1Y2Nlc3Mo
ZnVuY3Rpb24oKXsKKwkJCW9rKCB0cnVlLCAiYWpheFN1Y2Nlc3MiICk7CisJCX0pOworCisJCWpR
dWVyeS5hamF4KHsKKwkJCXVybDogdXJsKCJkYXRhL25hbWUuaHRtbCIpLAorCQkJYmVmb3JlU2Vu
ZDogZnVuY3Rpb24oKXsgb2sodHJ1ZSwgImJlZm9yZVNlbmQiKTsgfSwKKwkJCWNvbXBsZXRlOiBm
dW5jdGlvbih4aHIpIHsKKwkJCQl4aHIKKwkJCQkuY29tcGxldGUoZnVuY3Rpb24oKXsgb2sodHJ1
ZSwgImNvbXBsZXRlIik7IH0pCisJCQkJLnN1Y2Nlc3MoZnVuY3Rpb24oKXsgb2sodHJ1ZSwgInN1
Y2Nlc3MiKTsgfSkKKwkJCQkuZXJyb3IoZnVuY3Rpb24oKXsgb2soZmFsc2UsICJlcnJvciIpOyB9
KQorCQkJCS5jb21wbGV0ZShmdW5jdGlvbigpeyBzdGFydCgpOyB9KTsKKwkJCX0KKwkJfSk7CisJ
fSwgMTMpOworfSk7CisKK3Rlc3QoImpRdWVyeS5hamF4KCkgLSBzdWNjZXNzIGNhbGxiYWNrcyAo
dmVyeSBsYXRlIGJpbmRpbmcpIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KCA4ICk7CisKKwlqUXVl
cnkuYWpheFNldHVwKHsgdGltZW91dDogMCB9KTsKKworCXN0b3AoKTsKKworCXNldFRpbWVvdXQo
ZnVuY3Rpb24oKXsKKwkJalF1ZXJ5KCcjZm9vJykuYWpheFN0YXJ0KGZ1bmN0aW9uKCl7CisJCQlv
ayggdHJ1ZSwgImFqYXhTdGFydCIgKTsKKwkJfSkuYWpheFN0b3AoZnVuY3Rpb24oKXsKKwkJCW9r
KCB0cnVlLCAiYWpheFN0b3AiICk7CisJCX0pLmFqYXhTZW5kKGZ1bmN0aW9uKCl7CisJCQlvaygg
dHJ1ZSwgImFqYXhTZW5kIiApOworCQl9KS5hamF4Q29tcGxldGUoZnVuY3Rpb24oKXsKKwkJCW9r
KCB0cnVlLCAiYWpheENvbXBsZXRlIiApOworCQl9KS5hamF4RXJyb3IoZnVuY3Rpb24oKXsKKwkJ
CW9rKCBmYWxzZSwgImFqYXhFcnJvciIgKTsKKwkJfSkuYWpheFN1Y2Nlc3MoZnVuY3Rpb24oKXsK
KwkJCW9rKCB0cnVlLCAiYWpheFN1Y2Nlc3MiICk7CisJCX0pOworCisJCWpRdWVyeS5hamF4KHsK
KwkJCXVybDogdXJsKCJkYXRhL25hbWUuaHRtbCIpLAorCQkJYmVmb3JlU2VuZDogZnVuY3Rpb24o
KXsgb2sodHJ1ZSwgImJlZm9yZVNlbmQiKTsgfSwKKwkJCWNvbXBsZXRlOiBmdW5jdGlvbih4aHIp
IHsKKwkJCQlzZXRUaW1lb3V0IChmdW5jdGlvbigpIHsKKwkJCQkJeGhyCisJCQkJCS5jb21wbGV0
ZShmdW5jdGlvbigpeyBvayh0cnVlLCAiY29tcGxldGUiKTsgfSkKKwkJCQkJLnN1Y2Nlc3MoZnVu
Y3Rpb24oKXsgb2sodHJ1ZSwgInN1Y2Nlc3MiKTsgfSkKKwkJCQkJLmVycm9yKGZ1bmN0aW9uKCl7
IG9rKGZhbHNlLCAiZXJyb3IiKTsgfSkKKwkJCQkJLmNvbXBsZXRlKGZ1bmN0aW9uKCl7IHN0YXJ0
KCk7IH0pOworCQkJCX0sMTAwKTsKKwkJCX0KKwkJfSk7CisJfSwgMTMpOworfSk7CisKK3Rlc3Qo
ImpRdWVyeS5hamF4KCkgLSBzdWNjZXNzIGNhbGxiYWNrcyAob3JkZXIpIiwgZnVuY3Rpb24oKSB7
CisJZXhwZWN0KCAxICk7CisKKwlqUXVlcnkuYWpheFNldHVwKHsgdGltZW91dDogMCB9KTsKKwor
CXN0b3AoKTsKKworCXZhciB0ZXN0U3RyaW5nID0gIiI7CisKKwlzZXRUaW1lb3V0KGZ1bmN0aW9u
KCl7CisJCWpRdWVyeS5hamF4KHsKKwkJCXVybDogdXJsKCJkYXRhL25hbWUuaHRtbCIpLAorCQkJ
c3VjY2VzczogZnVuY3Rpb24oIF8xICwgXzIgLCB4aHIgKSB7CisJCQkJeGhyLnN1Y2Nlc3MoZnVu
Y3Rpb24oKSB7CisJCQkJCXhoci5zdWNjZXNzKGZ1bmN0aW9uKCkgeworCQkJCQkJdGVzdFN0cmlu
ZyArPSAiRSI7CisJCQkJCX0pOworCQkJCQl0ZXN0U3RyaW5nICs9ICJEIjsKKwkJCQl9KTsKKwkJ
CQl0ZXN0U3RyaW5nICs9ICJBIjsKKwkJCX0sCisJCQljb21wbGV0ZTogZnVuY3Rpb24oKSB7CisJ
CQkJc3RyaWN0RXF1YWwodGVzdFN0cmluZywgIkFCQ0RFIiwgIlByb3BlciBvcmRlciIpOworCQkJ
CXN0YXJ0KCk7CisJCQl9CisJCX0pLnN1Y2Nlc3MoZnVuY3Rpb24oKSB7CisJCQl0ZXN0U3RyaW5n
ICs9ICJCIjsKKwkJfSkuc3VjY2VzcyhmdW5jdGlvbigpIHsKKwkJCXRlc3RTdHJpbmcgKz0gIkMi
OworCQl9KTsKKwl9LCAxMyk7Cit9KTsKKwordGVzdCgialF1ZXJ5LmFqYXgoKSAtIGVycm9yIGNh
bGxiYWNrcyIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCggOCApOworCXN0b3AoKTsKKworCWpRdWVy
eSgnI2ZvbycpLmFqYXhTdGFydChmdW5jdGlvbigpeworCQlvayggdHJ1ZSwgImFqYXhTdGFydCIg
KTsKKwl9KS5hamF4U3RvcChmdW5jdGlvbigpeworCQlvayggdHJ1ZSwgImFqYXhTdG9wIiApOwor
CQlzdGFydCgpOworCX0pLmFqYXhTZW5kKGZ1bmN0aW9uKCl7CisJCW9rKCB0cnVlLCAiYWpheFNl
bmQiICk7CisJfSkuYWpheENvbXBsZXRlKGZ1bmN0aW9uKCl7CisJCW9rKCB0cnVlLCAiYWpheENv
bXBsZXRlIiApOworCX0pLmFqYXhFcnJvcihmdW5jdGlvbigpeworCQlvayggdHJ1ZSwgImFqYXhF
cnJvciIgKTsKKwl9KS5hamF4U3VjY2VzcyhmdW5jdGlvbigpeworCQlvayggZmFsc2UsICJhamF4
U3VjY2VzcyIgKTsKKwl9KTsKKworCWpRdWVyeS5hamF4U2V0dXAoeyB0aW1lb3V0OiA1MDAgfSk7
CisKKwlqUXVlcnkuYWpheCh7CisJCXVybDogdXJsKCJkYXRhL25hbWUucGhwP3dhaXQ9NSIpLAor
CQliZWZvcmVTZW5kOiBmdW5jdGlvbigpeyBvayh0cnVlLCAiYmVmb3JlU2VuZCIpOyB9LAorCQlz
dWNjZXNzOiBmdW5jdGlvbigpeyBvayhmYWxzZSwgInN1Y2Nlc3MiKTsgfSwKKwkJZXJyb3I6IGZ1
bmN0aW9uKCl7IG9rKHRydWUsICJlcnJvciIpOyB9LAorCQljb21wbGV0ZTogZnVuY3Rpb24oKXsg
b2sodHJ1ZSwgImNvbXBsZXRlIik7IH0KKwl9KTsKK30pOworCit0ZXN0KCAialF1ZXJ5LmFqYXgg
LSBtdWx0aXBsZSBtZXRob2Qgc2lnbmF0dXJlcyBpbnRyb2R1Y2VkIGluIDEuNSAoICM4MTA3KSIs
IGZ1bmN0aW9uKCkgeworCisJZXhwZWN0KCA0ICk7CisKKwlzdG9wKCk7CisKKwlqUXVlcnkud2hl
bigKKwkJalF1ZXJ5LmFqYXgoKS5zdWNjZXNzKGZ1bmN0aW9uKCkgeyBvayggdHJ1ZSwgJ1dpdGgg
bm8gYXJndW1lbnRzJyApOyB9KSwKKwkJalF1ZXJ5LmFqYXgoJ2RhdGEvbmFtZS5odG1sJykuc3Vj
Y2VzcyhmdW5jdGlvbigpIHsgb2soIHRydWUsICdXaXRoIG9ubHkgc3RyaW5nIFVSTCBhcmd1bWVu
dCcgKTsgfSksCisJCWpRdWVyeS5hamF4KCdkYXRhL25hbWUuaHRtbCcsIHt9ICkuc3VjY2Vzcyhm
dW5jdGlvbigpIHsgb2soIHRydWUsICdXaXRoIHN0cmluZyBVUkwgcGFyYW0gYW5kIG1hcCcgKTsg
fSksCisJCWpRdWVyeS5hamF4KHsgdXJsOiAnZGF0YS9uYW1lLmh0bWwnfSApLnN1Y2Nlc3MoZnVu
Y3Rpb24oKSB7IG9rKCB0cnVlLCAnV2l0aCBvbmx5IG1hcCcgKTsgfSkKKwkpLnRoZW4oIHN0YXJ0
LCBzdGFydCApOworCit9KTsKKwordGVzdCgialF1ZXJ5LmFqYXgoKSAtIHRleHRTdGF0dXMgYW5k
IGVycm9yVGhyb3duIHZhbHVlcyIsIGZ1bmN0aW9uKCkgeworCisJdmFyIG5iID0gMjsKKworCWV4
cGVjdCggMiAqIG5iICk7CisJc3RvcCgpOworCisJZnVuY3Rpb24gc3RhcnROKCkgeworCQlpZiAo
ICEoIC0tbmIgKSApIHsKKwkJCXN0YXJ0KCk7CisJCX0KKwl9CisKKwkvKgorCVNhZmFyaSAzLngg
cmV0dXJucyAiT0siIGluc3RlYWQgb2YgIk5vdCBGb3VuZCIKKwlTYWZhcmkgNC54IGRvZXNuJ3Qg
aGF2ZSB0aGlzIGlzc3VlIHNvIHRoZSB0ZXN0IHNob3VsZCBiZSByZS1pbnN0YXRlZCBvbmNlCisJ
d2UgZHJvcCBzdXBwb3J0IGZvciAzLngKKworCWpRdWVyeS5hamF4KHsKKwkJdXJsOiB1cmwoImRh
dGEvbm9uRXhpc3RpbmdVUkwiKSwKKwkJZXJyb3I6IGZ1bmN0aW9uKCBfICwgdGV4dFN0YXR1cyAs
IGVycm9yVGhyb3duICl7CisJCQlzdHJpY3RFcXVhbCggdGV4dFN0YXR1cywgImVycm9yIiwgInRl
eHRTdGF0dXMgaXMgJ2Vycm9yJyBmb3IgNDA0IiApOworCQkJc3RyaWN0RXF1YWwoIGVycm9yVGhy
b3duLCAiTm90IEZvdW5kIiwgImVycm9yVGhyb3duIGlzICdOb3QgRm91bmQnIGZvciA0MDQiKTsK
KwkJCXN0YXJ0TigpOworCQl9CisJfSk7CisJKi8KKworCWpRdWVyeS5hamF4KHsKKwkJdXJsOiB1
cmwoImRhdGEvbmFtZS5waHA/d2FpdD01IiksCisJCWVycm9yOiBmdW5jdGlvbiggXyAsIHRleHRT
dGF0dXMgLCBlcnJvclRocm93biApeworCQkJc3RyaWN0RXF1YWwoIHRleHRTdGF0dXMsICJhYm9y
dCIsICJ0ZXh0U3RhdHVzIGlzICdhYm9ydCcgZm9yIGFib3J0IiApOworCQkJc3RyaWN0RXF1YWwo
IGVycm9yVGhyb3duLCAiYWJvcnQiLCAiZXJyb3JUaHJvd24gaXMgJ2Fib3J0JyBmb3IgYWJvcnQi
KTsKKwkJCXN0YXJ0TigpOworCQl9CisJfSkuYWJvcnQoKTsKKworCWpRdWVyeS5hamF4KHsKKwkJ
dXJsOiB1cmwoImRhdGEvbmFtZS5waHA/d2FpdD01IiksCisJCWVycm9yOiBmdW5jdGlvbiggXyAs
IHRleHRTdGF0dXMgLCBlcnJvclRocm93biApeworCQkJc3RyaWN0RXF1YWwoIHRleHRTdGF0dXMs
ICJteXN0YXR1cyIsICJ0ZXh0U3RhdHVzIGlzICdteXN0YXR1cycgZm9yIGFib3J0KCdteXN0YXR1
cycpIiApOworCQkJc3RyaWN0RXF1YWwoIGVycm9yVGhyb3duLCAibXlzdGF0dXMiLCAiZXJyb3JU
aHJvd24gaXMgJ215c3RhdHVzJyBmb3IgYWJvcnQoJ215c3RhdHVzJykiKTsKKwkJCXN0YXJ0Tigp
OworCQl9CisJfSkuYWJvcnQoICJteXN0YXR1cyIgKTsKK30pOworCit0ZXN0KCJqUXVlcnkuYWph
eCgpIC0gcmVzcG9uc2VUZXh0IG9uIGVycm9yIiwgZnVuY3Rpb24oKSB7CisKKwlleHBlY3QoIDEg
KTsKKworCXN0b3AoKTsKKworCWpRdWVyeS5hamF4KHsKKwkJdXJsOiB1cmwoImRhdGEvZXJyb3JX
aXRoVGV4dC5waHAiKSwKKwkJZXJyb3I6IGZ1bmN0aW9uKHhocikgeworCQkJc3RyaWN0RXF1YWwo
IHhoci5yZXNwb25zZVRleHQgLCAicGxhaW4gdGV4dCBtZXNzYWdlIiAsICJUZXN0IGpxWEhSLnJl
c3BvbnNlVGV4dCBpcyBmaWxsZWQgZm9yIEhUVFAgZXJyb3JzIiApOworCQl9LAorCQljb21wbGV0
ZTogZnVuY3Rpb24oKSB7CisJCQlzdGFydCgpOworCQl9CisJfSk7Cit9KTsKKwordGVzdCgiLmFq
YXgoKSAtIHJldHJ5IHdpdGggalF1ZXJ5LmFqYXgoIHRoaXMgKSIsIGZ1bmN0aW9uKCkgeworCisJ
ZXhwZWN0KCAxICk7CisKKwlzdG9wKCk7CisKKwl2YXIgZmlyc3RUaW1lID0gMTsKKworCWpRdWVy
eS5hamF4KHsKKwkJdXJsOiB1cmwoImRhdGEvZXJyb3JXaXRoVGV4dC5waHAiKSwKKwkJZXJyb3I6
IGZ1bmN0aW9uKCkgeworCQkJaWYgKCBmaXJzdFRpbWUgKSB7CisJCQkJZmlyc3RUaW1lID0gMDsK
KwkJCQlqUXVlcnkuYWpheCggdGhpcyApOworCQkJfSBlbHNlIHsKKwkJCQlvayggdHJ1ZSAsICJU
ZXN0IHJldHJ5aW5nIHdpdGggalF1ZXJ5LmFqYXgodGhpcykgd29ya3MiICk7CisJCQkJc3RhcnQo
KTsKKwkJCX0KKwkJfQorCX0pOworCit9KTsKKwordGVzdCgiLmFqYXgoKSAtIGhlYWRlcnMiICwg
ZnVuY3Rpb24oKSB7CisKKwlleHBlY3QoIDQgKTsKKworCXN0b3AoKTsKKworCWpRdWVyeSgnI2Zv
bycpLmFqYXhTZW5kKGZ1bmN0aW9uKCBldnQsIHhociApIHsKKwkJeGhyLnNldFJlcXVlc3RIZWFk
ZXIoICJhamF4LXNlbmQiLCAidGVzdCIgKTsKKwl9KTsKKworCXZhciByZXF1ZXN0SGVhZGVycyA9
IHsKKwkJCXNpTVBsZTogInZhbHVlIiwKKwkJCSJTb21ldEhpbmctZWxzRSI6ICJvdGhlciB2YWx1
ZSIsCisJCQlPdGhFcjogInNvbWV0aGluZyBlbHNlIgorCQl9LAorCQlsaXN0ID0gW10sCisJCWk7
CisKKwlmb3IoIGkgaW4gcmVxdWVzdEhlYWRlcnMgKSB7CisJCWxpc3QucHVzaCggaSApOworCX0K
KwlsaXN0LnB1c2goICJhamF4LXNlbmQiICk7CisKKwlqUXVlcnkuYWpheCh1cmwoImRhdGEvaGVh
ZGVycy5waHA/a2V5cz0iK2xpc3Quam9pbiggIl8iICkgKSwgeworCisJCWhlYWRlcnM6IHJlcXVl
c3RIZWFkZXJzLAorCQlzdWNjZXNzOiBmdW5jdGlvbiggZGF0YSAsIF8gLCB4aHIgKSB7CisJCQl2
YXIgdG1wID0gW107CisJCQlmb3IgKCBpIGluIHJlcXVlc3RIZWFkZXJzICkgeworCQkJCXRtcC5w
dXNoKCBpICwgIjogIiAsIHJlcXVlc3RIZWFkZXJzWyBpIF0gLCAiXG4iICk7CisJCQl9CisJCQl0
bXAucHVzaCggICJhamF4LXNlbmQ6IHRlc3RcbiIgKTsKKwkJCXRtcCA9IHRtcC5qb2luKCAiIiAp
OworCisJCQlzdHJpY3RFcXVhbCggZGF0YSAsIHRtcCAsICJIZWFkZXJzIHdlcmUgc2VudCIgKTsK
KwkJCXN0cmljdEVxdWFsKCB4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoICJTYW1wbGUtSGVhZGVyIiAp
ICwgIkhlbGxvIFdvcmxkIiAsICJTYW1wbGUgaGVhZGVyIHJlY2VpdmVkIiApOworCQkJaWYgKCBq
UXVlcnkuYnJvd3Nlci5tb3ppbGxhICkgeworCQkJCW9rKCB0cnVlLCAiRmlyZWZveCBkb2Vzbid0
IHN1cHBvcnQgZW1wdHkgaGVhZGVycyIgKTsKKwkJCX0gZWxzZSB7CisJCQkJc3RyaWN0RXF1YWwo
IHhoci5nZXRSZXNwb25zZUhlYWRlciggIkVtcHR5LUhlYWRlciIgKSAsICIiICwgIkVtcHR5IGhl
YWRlciByZWNlaXZlZCIgKTsKKwkJCX0KKwkJCXN0cmljdEVxdWFsKCB4aHIuZ2V0UmVzcG9uc2VI
ZWFkZXIoICJTYW1wbGUtSGVhZGVyMiIgKSAsICJIZWxsbyBXb3JsZCAyIiAsICJTZWNvbmQgc2Ft
cGxlIGhlYWRlciByZWNlaXZlZCIgKTsKKwkJfSwKKwkJZXJyb3I6IGZ1bmN0aW9uKCl7IG9rKGZh
bHNlLCAiZXJyb3IiKTsgfQorCisJfSkudGhlbiggc3RhcnQsIHN0YXJ0ICk7CisKK30pOworCit0
ZXN0KCIuYWpheCgpIC0gQWNjZXB0IGhlYWRlciIgLCBmdW5jdGlvbigpIHsKKworCWV4cGVjdCgg
MSApOworCisJc3RvcCgpOworCisJalF1ZXJ5LmFqYXgodXJsKCJkYXRhL2hlYWRlcnMucGhwP2tl
eXM9YWNjZXB0IiksIHsKKwkJaGVhZGVyczogeworCQkJQWNjZXB0OiAidmVyeSB3cm9uZyBhY2Nl
cHQgdmFsdWUiCisJCX0sCisJCWJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCB4aHIgKSB7CisJCQl4aHIu
c2V0UmVxdWVzdEhlYWRlciggIkFjY2VwdCIsICIqLyoiICk7CisJCX0sCisJCXN1Y2Nlc3M6IGZ1
bmN0aW9uKCBkYXRhICkgeworCQkJc3RyaWN0RXF1YWwoIGRhdGEgLCAiYWNjZXB0OiAqLypcbiIg
LCAiVGVzdCBBY2NlcHQgaGVhZGVyIGlzIHNldCB0byBsYXN0IHZhbHVlIHByb3ZpZGVkIiApOwor
CQkJc3RhcnQoKTsKKwkJfSwKKwkJZXJyb3I6IGZ1bmN0aW9uKCl7IG9rKGZhbHNlLCAiZXJyb3Ii
KTsgfQorCX0pOworCit9KTsKKwordGVzdCgiLmFqYXgoKSAtIGNvbnRlbnRUeXBlIiAsIGZ1bmN0
aW9uKCkgeworCisJZXhwZWN0KCAyICk7CisKKwlzdG9wKCk7CisKKwl2YXIgY291bnQgPSAyOwor
CisJZnVuY3Rpb24gcmVzdGFydCgpIHsKKwkJaWYgKCAhIC0tY291bnQgKSB7CisJCQlzdGFydCgp
OworCQl9CisJfQorCisJalF1ZXJ5LmFqYXgodXJsKCJkYXRhL2hlYWRlcnMucGhwP2tleXM9Y29u
dGVudC10eXBlIiApLCB7CisJCWNvbnRlbnRUeXBlOiAidGVzdCIsCisJCXN1Y2Nlc3M6IGZ1bmN0
aW9uKCBkYXRhICkgeworCQkJc3RyaWN0RXF1YWwoIGRhdGEgLCAiY29udGVudC10eXBlOiB0ZXN0
XG4iICwgIlRlc3QgY29udGVudC10eXBlIGlzIHNlbnQgd2hlbiBvcHRpb25zLmNvbnRlbnRUeXBl
IGlzIHNldCIgKTsKKwkJfSwKKwkJY29tcGxldGU6IGZ1bmN0aW9uKCkgeworCQkJcmVzdGFydCgp
OworCQl9CisJfSk7CisKKwlqUXVlcnkuYWpheCh1cmwoImRhdGEvaGVhZGVycy5waHA/a2V5cz1j
b250ZW50LXR5cGUiICksIHsKKwkJY29udGVudFR5cGU6IGZhbHNlLAorCQlzdWNjZXNzOiBmdW5j
dGlvbiggZGF0YSApIHsKKwkJCXN0cmljdEVxdWFsKCBkYXRhICwgImNvbnRlbnQtdHlwZTogXG4i
ICwgIlRlc3QgY29udGVudC10eXBlIGlzIG5vdCBzZW50IHdoZW4gb3B0aW9ucy5jb250ZW50VHlw
ZT09PWZhbHNlIiApOworCQl9LAorCQljb21wbGV0ZTogZnVuY3Rpb24oKSB7CisJCQlyZXN0YXJ0
KCk7CisJCX0KKwl9KTsKKworfSk7CisKK3Rlc3QoIi5hamF4KCkgLSBwcm90b2NvbC1sZXNzIHVy
bHMiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMSk7CisKKwlqUXVlcnkuYWpheCh7CisJCXVybDog
Ii8vc29tZWRvbWFpbi5jb20iLAorCQliZWZvcmVTZW5kOiBmdW5jdGlvbiggeGhyLCBzZXR0aW5n
cyApIHsKKwkJCWVxdWFscyhzZXR0aW5ncy51cmwsIGxvY2F0aW9uLnByb3RvY29sICsgIi8vc29t
ZWRvbWFpbi5jb20iLCAiTWFrZSBzdXJlIHRoYXQgdGhlIHByb3RvY29sIGlzIGFkZGVkLiIpOwor
CQkJcmV0dXJuIGZhbHNlOworCQl9CisJfSk7Cit9KTsKKwordGVzdCgiLmFqYXgoKSAtIGhhc2gi
LCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMyk7CisKKwlqUXVlcnkuYWpheCh7CisJCXVybDogImRh
dGEvbmFtZS5odG1sI2ZvbyIsCisJCWJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCB4aHIsIHNldHRpbmdz
ICkgeworCQkJZXF1YWxzKHNldHRpbmdzLnVybCwgImRhdGEvbmFtZS5odG1sIiwgIk1ha2Ugc3Vy
ZSB0aGF0IHRoZSBVUkwgaXMgdHJpbW1lZC4iKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0p
OworCisJalF1ZXJ5LmFqYXgoeworCQl1cmw6ICJkYXRhL25hbWUuaHRtbD9hYmMjZm9vIiwKKwkJ
YmVmb3JlU2VuZDogZnVuY3Rpb24oIHhociwgc2V0dGluZ3MgKSB7CisJCWVxdWFscyhzZXR0aW5n
cy51cmwsICJkYXRhL25hbWUuaHRtbD9hYmMiLCAiTWFrZSBzdXJlIHRoYXQgdGhlIFVSTCBpcyB0
cmltbWVkLiIpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfSk7CisKKwlqUXVlcnkuYWpheCh7
CisJCXVybDogImRhdGEvbmFtZS5odG1sP2FiYyNmb28iLAorCQlkYXRhOiB7ICJ0ZXN0IjogMTIz
IH0sCisJCWJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCB4aHIsIHNldHRpbmdzICkgeworCQkJZXF1YWxz
KHNldHRpbmdzLnVybCwgImRhdGEvbmFtZS5odG1sP2FiYyZ0ZXN0PTEyMyIsICJNYWtlIHN1cmUg
dGhhdCB0aGUgVVJMIGlzIHRyaW1tZWQuIik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9KTsK
K30pOworCit0ZXN0KCJqUXVlcnkgYWpheCAtIGNyb3NzLWRvbWFpbiBkZXRlY3Rpb24iLCBmdW5j
dGlvbigpIHsKKworCWV4cGVjdCggNSApOworCisJdmFyIGxvYyA9IGRvY3VtZW50LmxvY2F0aW9u
LAorCQlvdGhlclBvcnQgPSBsb2MucG9ydCA9PT0gNjY2ID8gNjY3IDogNjY2LAorCQlvdGhlclBy
b3RvY29sID0gbG9jLnByb3RvY29sID09PSAiaHR0cDoiID8gImh0dHBzOiIgOiAiaHR0cDoiOwor
CisJalF1ZXJ5LmFqYXgoeworCQlkYXRhVHlwZTogImpzb25wIiwKKwkJdXJsOiBvdGhlclByb3Rv
Y29sICsgIi8vIiArIGxvYy5ob3N0LAorCQliZWZvcmVTZW5kOiBmdW5jdGlvbiggXyAsIHMgKSB7
CisJCQlvayggcy5jcm9zc0RvbWFpbiAsICJUZXN0IGRpZmZlcmVudCBwcm90b2NvbHMgYXJlIGRl
dGVjdGVkIGFzIGNyb3NzLWRvbWFpbiIgKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0pOwor
CisJalF1ZXJ5LmFqYXgoeworCQl1cmw6ICdhcHA6L3BhdGgnLAorCQliZWZvcmVTZW5kOiBmdW5j
dGlvbiggXyAsIHMgKSB7CisJCQlvayggcy5jcm9zc0RvbWFpbiAsICJBZG9iZSBBSVIgYXBwOi8g
VVJMIGRldGVjdGVkIGFzIGNyb3NzLWRvbWFpbiIgKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQor
CX0pOworCisJalF1ZXJ5LmFqYXgoeworCQlkYXRhVHlwZTogImpzb25wIiwKKwkJdXJsOiBsb2Mu
cHJvdG9jb2wgKyAnLy9zb21ld2Vic2l0ZXRoYXRkb2Vzbm90ZXhpc3QtNjU2MzI5NDc3NTQxLmNv
bTonICsgKCBsb2MucG9ydCB8fCA4MCApLAorCQliZWZvcmVTZW5kOiBmdW5jdGlvbiggXyAsIHMg
KSB7CisJCQlvayggcy5jcm9zc0RvbWFpbiAsICJUZXN0IGRpZmZlcmVudCBob3N0bmFtZXMgYXJl
IGRldGVjdGVkIGFzIGNyb3NzLWRvbWFpbiIgKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0p
OworCisJalF1ZXJ5LmFqYXgoeworCQlkYXRhVHlwZTogImpzb25wIiwKKwkJdXJsOiBsb2MucHJv
dG9jb2wgKyAiLy8iICsgbG9jLmhvc3RuYW1lICsgIjoiICsgb3RoZXJQb3J0LAorCQliZWZvcmVT
ZW5kOiBmdW5jdGlvbiggXyAsIHMgKSB7CisJCQlvayggcy5jcm9zc0RvbWFpbiAsICJUZXN0IGRp
ZmZlcmVudCBwb3J0cyBhcmUgZGV0ZWN0ZWQgYXMgY3Jvc3MtZG9tYWluIiApOworCQkJcmV0dXJu
IGZhbHNlOworCQl9CisJfSk7CisKKwlqUXVlcnkuYWpheCh7CisJCWRhdGFUeXBlOiAianNvbnAi
LAorCQl1cmw6IGxvYy5wcm90b2NvbCArICIvLyIgKyBsb2MuaG9zdCwKKwkJY3Jvc3NEb21haW46
IHRydWUsCisJCWJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCBfICwgcyApIHsKKwkJCW9rKCBzLmNyb3Nz
RG9tYWluICwgIlRlc3QgZm9yY2VkIGNyb3NzRG9tYWluIGlzIGRldGVjdGVkIGFzIGNyb3NzLWRv
bWFpbiIgKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0pOworCit9KTsKKwordGVzdCgiLmxv
YWQoKSAtIDQwNCBlcnJvciBjYWxsYmFja3MiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoIDYgKTsK
KwlzdG9wKCk7CisKKwlqUXVlcnkoJyNmb28nKS5hamF4U3RhcnQoZnVuY3Rpb24oKXsKKwkJb2so
IHRydWUsICJhamF4U3RhcnQiICk7CisJfSkuYWpheFN0b3AoZnVuY3Rpb24oKXsKKwkJb2soIHRy
dWUsICJhamF4U3RvcCIgKTsKKwkJc3RhcnQoKTsKKwl9KS5hamF4U2VuZChmdW5jdGlvbigpewor
CQlvayggdHJ1ZSwgImFqYXhTZW5kIiApOworCX0pLmFqYXhDb21wbGV0ZShmdW5jdGlvbigpewor
CQlvayggdHJ1ZSwgImFqYXhDb21wbGV0ZSIgKTsKKwl9KS5hamF4RXJyb3IoZnVuY3Rpb24oKXsK
KwkJb2soIHRydWUsICJhamF4RXJyb3IiICk7CisJfSkuYWpheFN1Y2Nlc3MoZnVuY3Rpb24oKXsK
KwkJb2soIGZhbHNlLCAiYWpheFN1Y2Nlc3MiICk7CisJfSk7CisKKwlqUXVlcnkoIjxkaXYvPiIp
LmxvYWQoImRhdGEvNDA0Lmh0bWwiLCBmdW5jdGlvbigpeworCQlvayh0cnVlLCAiY29tcGxldGUi
KTsKKwl9KTsKK30pOworCit0ZXN0KCJqUXVlcnkuYWpheCgpIC0gYWJvcnQiLCBmdW5jdGlvbigp
IHsKKwlleHBlY3QoIDggKTsKKwlzdG9wKCk7CisKKwlqUXVlcnkoJyNmb28nKS5hamF4U3RhcnQo
ZnVuY3Rpb24oKXsKKwkJb2soIHRydWUsICJhamF4U3RhcnQiICk7CisJfSkuYWpheFN0b3AoZnVu
Y3Rpb24oKXsKKwkJb2soIHRydWUsICJhamF4U3RvcCIgKTsKKwkJc3RhcnQoKTsKKwl9KS5hamF4
U2VuZChmdW5jdGlvbigpeworCQlvayggdHJ1ZSwgImFqYXhTZW5kIiApOworCX0pLmFqYXhDb21w
bGV0ZShmdW5jdGlvbigpeworCQlvayggdHJ1ZSwgImFqYXhDb21wbGV0ZSIgKTsKKwl9KTsKKwor
CXZhciB4aHIgPSBqUXVlcnkuYWpheCh7CisJCXVybDogdXJsKCJkYXRhL25hbWUucGhwP3dhaXQ9
NSIpLAorCQliZWZvcmVTZW5kOiBmdW5jdGlvbigpeyBvayh0cnVlLCAiYmVmb3JlU2VuZCIpOyB9
LAorCQljb21wbGV0ZTogZnVuY3Rpb24oKXsgb2sodHJ1ZSwgImNvbXBsZXRlIik7IH0KKwl9KTsK
KworCWVxdWFscyggeGhyLnJlYWR5U3RhdGUsIDEsICJYSFIgcmVhZHlTdGF0ZSBpbmRpY2F0ZXMg
c3VjY2Vzc2Z1bCBkaXNwYXRjaCIgKTsKKworCXhoci5hYm9ydCgpOworCWVxdWFscyggeGhyLnJl
YWR5U3RhdGUsIDAsICJYSFIgcmVhZHlTdGF0ZSBpbmRpY2F0ZXMgc3VjY2Vzc2Z1bCBhYm9ydGlv
biIgKTsKK30pOworCit0ZXN0KCJBamF4IGV2ZW50cyB3aXRoIGNvbnRleHQiLCBmdW5jdGlvbigp
IHsKKwlleHBlY3QoMTQpOworCisJc3RvcCgpOworCXZhciBjb250ZXh0ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2Iik7CisKKwlmdW5jdGlvbiBldmVudChlKXsKKwkJZXF1YWxzKCB0aGlz
LCBjb250ZXh0LCBlLnR5cGUgKTsKKwl9CisKKwlmdW5jdGlvbiBjYWxsYmFjayhtc2cpeworCQly
ZXR1cm4gZnVuY3Rpb24oKXsKKwkJCWVxdWFscyggdGhpcywgY29udGV4dCwgImNvbnRleHQgaXMg
cHJlc2VydmVkIG9uIGNhbGxiYWNrICIgKyBtc2cgKTsKKwkJfTsKKwl9CisKKwlmdW5jdGlvbiBu
b2NhbGxiYWNrKG1zZyl7CisJCXJldHVybiBmdW5jdGlvbigpeworCQkJZXF1YWxzKCB0eXBlb2Yg
dGhpcy51cmwsICJzdHJpbmciLCAiY29udGV4dCBpcyBzZXR0aW5ncyBvbiBjYWxsYmFjayAiICsg
bXNnICk7CisJCX07CisJfQorCisJalF1ZXJ5KCcjZm9vJykuYWRkKGNvbnRleHQpCisJCQkuYWph
eFNlbmQoZXZlbnQpCisJCQkuYWpheENvbXBsZXRlKGV2ZW50KQorCQkJLmFqYXhFcnJvcihldmVu
dCkKKwkJCS5hamF4U3VjY2VzcyhldmVudCk7CisKKwlqUXVlcnkuYWpheCh7CisJCXVybDogdXJs
KCJkYXRhL25hbWUuaHRtbCIpLAorCQliZWZvcmVTZW5kOiBjYWxsYmFjaygiYmVmb3JlU2VuZCIp
LAorCQlzdWNjZXNzOiBjYWxsYmFjaygic3VjY2VzcyIpLAorCQllcnJvcjogY2FsbGJhY2soImVy
cm9yIiksCisJCWNvbXBsZXRlOmZ1bmN0aW9uKCl7CisJCQljYWxsYmFjaygiY29tcGxldGUiKS5j
YWxsKHRoaXMpOworCisJCQlqUXVlcnkuYWpheCh7CisJCQkJdXJsOiB1cmwoImRhdGEvNDA0Lmh0
bWwiKSwKKwkJCQljb250ZXh0OiBjb250ZXh0LAorCQkJCWJlZm9yZVNlbmQ6IGNhbGxiYWNrKCJi
ZWZvcmVTZW5kIiksCisJCQkJZXJyb3I6IGNhbGxiYWNrKCJlcnJvciIpLAorCQkJCWNvbXBsZXRl
OiBmdW5jdGlvbigpeworCQkJCQljYWxsYmFjaygiY29tcGxldGUiKS5jYWxsKHRoaXMpOworCisJ
CQkJCWpRdWVyeSgnI2ZvbycpLmFkZChjb250ZXh0KS51bmJpbmQoKTsKKworCQkJCQlqUXVlcnku
YWpheCh7CisJCQkJCQl1cmw6IHVybCgiZGF0YS80MDQuaHRtbCIpLAorCQkJCQkJYmVmb3JlU2Vu
ZDogbm9jYWxsYmFjaygiYmVmb3JlU2VuZCIpLAorCQkJCQkJZXJyb3I6IG5vY2FsbGJhY2soImVy
cm9yIiksCisJCQkJCQljb21wbGV0ZTogZnVuY3Rpb24oKXsKKwkJCQkJCQlub2NhbGxiYWNrKCJj
b21wbGV0ZSIpLmNhbGwodGhpcyk7CisJCQkJCQkJc3RhcnQoKTsKKwkJCQkJCX0KKwkJCQkJfSk7
CisJCQkJfQorCQkJfSk7CisJCX0sCisJCWNvbnRleHQ6Y29udGV4dAorCX0pOworfSk7CisKK3Rl
c3QoImpRdWVyeS5hamF4IGNvbnRleHQgbW9kaWZpY2F0aW9uIiwgZnVuY3Rpb24oKSB7CisJZXhw
ZWN0KDEpOworCisJc3RvcCgpOworCisJdmFyIG9iaiA9IHt9OworCisJalF1ZXJ5LmFqYXgoewor
CQl1cmw6IHVybCgiZGF0YS9uYW1lLmh0bWwiKSwKKwkJY29udGV4dDogb2JqLAorCQliZWZvcmVT
ZW5kOiBmdW5jdGlvbigpeworCQkJdGhpcy50ZXN0ID0gImZvbyI7CisJCX0sCisJCWNvbXBsZXRl
OiBmdW5jdGlvbigpIHsKKwkJCXN0YXJ0KCk7CisJCX0KKwl9KTsKKworCWVxdWFscyggb2JqLnRl
c3QsICJmb28iLCAiTWFrZSBzdXJlIHRoZSBvcmlnaW5hbCBvYmplY3QgaXMgbWFpbnRhaW5lZC4i
ICk7Cit9KTsKKwordGVzdCgialF1ZXJ5LmFqYXggY29udGV4dCBtb2RpZmljYXRpb24gdGhyb3Vn
aCBhamF4U2V0dXAiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoNCk7CisKKwlzdG9wKCk7CisKKwl2
YXIgb2JqID0ge307CisKKwlqUXVlcnkuYWpheFNldHVwKHsKKwkJY29udGV4dDogb2JqCisJfSk7
CisKKwlzdHJpY3RFcXVhbCggalF1ZXJ5LmFqYXhTZXR0aW5ncy5jb250ZXh0LCBvYmosICJNYWtl
IHN1cmUgdGhlIGNvbnRleHQgaXMgcHJvcGVybHkgc2V0IGluIGFqYXhTZXR0aW5ncy4iICk7CisK
KwlqUXVlcnkuYWpheCh7CisJCXVybDogdXJsKCJkYXRhL25hbWUuaHRtbCIpLAorCQljb21wbGV0
ZTogZnVuY3Rpb24oKSB7CisJCQlzdHJpY3RFcXVhbCggdGhpcywgb2JqLCAiTWFrZSBzdXJlIHRo
ZSBvcmlnaW5hbCBvYmplY3QgaXMgbWFpbnRhaW5lZC4iICk7CisJCQlqUXVlcnkuYWpheCh7CisJ
CQkJdXJsOiB1cmwoImRhdGEvbmFtZS5odG1sIiksCisJCQkJY29udGV4dDoge30sCisJCQkJY29t
cGxldGU6IGZ1bmN0aW9uKCkgeworCQkJCQlvayggdGhpcyAhPT0gb2JqLCAiTWFrZSBzdXJlIG92
ZXJpZGRpbmcgY29udGV4dCBpcyBwb3NzaWJsZS4iICk7CisJCQkJCWpRdWVyeS5hamF4U2V0dXAo
eworCQkJCQkJY29udGV4dDogZmFsc2UKKwkJCQkJfSk7CisJCQkJCWpRdWVyeS5hamF4KHsKKwkJ
CQkJCXVybDogdXJsKCJkYXRhL25hbWUuaHRtbCIpLAorCQkJCQkJYmVmb3JlU2VuZDogZnVuY3Rp
b24oKXsKKwkJCQkJCQl0aGlzLnRlc3QgPSAiZm9vMiI7CisJCQkJCQl9LAorCQkJCQkJY29tcGxl
dGU6IGZ1bmN0aW9uKCkgeworCQkJCQkJCW9rKCB0aGlzICE9PSBvYmosICJNYWtlIHN1cmUgdW5z
ZXR0aW5nIGNvbnRleHQgaXMgcG9zc2libGUuIiApOworCQkJCQkJCXN0YXJ0KCk7CisJCQkJCQl9
CisJCQkJCX0pOworCQkJCX0KKwkJCX0pOworCQl9CisJfSk7Cit9KTsKKwordGVzdCgialF1ZXJ5
LmFqYXgoKSAtIGRpc2FibGVkIGdsb2JhbHMiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoIDMgKTsK
KwlzdG9wKCk7CisKKwlqUXVlcnkoJyNmb28nKS5hamF4U3RhcnQoZnVuY3Rpb24oKXsKKwkJb2so
IGZhbHNlLCAiYWpheFN0YXJ0IiApOworCX0pLmFqYXhTdG9wKGZ1bmN0aW9uKCl7CisJCW9rKCBm
YWxzZSwgImFqYXhTdG9wIiApOworCX0pLmFqYXhTZW5kKGZ1bmN0aW9uKCl7CisJCW9rKCBmYWxz
ZSwgImFqYXhTZW5kIiApOworCX0pLmFqYXhDb21wbGV0ZShmdW5jdGlvbigpeworCQlvayggZmFs
c2UsICJhamF4Q29tcGxldGUiICk7CisJfSkuYWpheEVycm9yKGZ1bmN0aW9uKCl7CisJCW9rKCBm
YWxzZSwgImFqYXhFcnJvciIgKTsKKwl9KS5hamF4U3VjY2VzcyhmdW5jdGlvbigpeworCQlvaygg
ZmFsc2UsICJhamF4U3VjY2VzcyIgKTsKKwl9KTsKKworCWpRdWVyeS5hamF4KHsKKwkJZ2xvYmFs
OiBmYWxzZSwKKwkJdXJsOiB1cmwoImRhdGEvbmFtZS5odG1sIiksCisJCWJlZm9yZVNlbmQ6IGZ1
bmN0aW9uKCl7IG9rKHRydWUsICJiZWZvcmVTZW5kIik7IH0sCisJCXN1Y2Nlc3M6IGZ1bmN0aW9u
KCl7IG9rKHRydWUsICJzdWNjZXNzIik7IH0sCisJCWVycm9yOiBmdW5jdGlvbigpeyBvayhmYWxz
ZSwgImVycm9yIik7IH0sCisJCWNvbXBsZXRlOiBmdW5jdGlvbigpeworCQkgIG9rKHRydWUsICJj
b21wbGV0ZSIpOworCQkgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsgc3RhcnQoKTsgfSwgMTMpOwor
CQl9CisJfSk7Cit9KTsKKwordGVzdCgialF1ZXJ5LmFqYXggLSB4bWw6IG5vbi1uYW1lc3BhY2Ug
ZWxlbWVudHMgaW5zaWRlIG5hbWVzcGFjZWQgZWxlbWVudHMiLCBmdW5jdGlvbigpIHsKKwlleHBl
Y3QoMyk7CisJc3RvcCgpOworCWpRdWVyeS5hamF4KHsKKwkgIHVybDogdXJsKCJkYXRhL3dpdGhf
ZnJpZXMueG1sIiksCisJICBkYXRhVHlwZTogInhtbCIsCisJICBzdWNjZXNzOiBmdW5jdGlvbihy
ZXNwKSB7CisJCWVxdWFscyggalF1ZXJ5KCJwcm9wZXJ0aWVzIiwgcmVzcCkubGVuZ3RoLCAxLCAn
cHJvcGVydGllcyBpbiByZXNwb25zZVhNTCcgKTsKKwkJZXF1YWxzKCBqUXVlcnkoImpzY29uZiIs
IHJlc3ApLmxlbmd0aCwgMSwgJ2pzY29uZiBpbiByZXNwb25zZVhNTCcgKTsKKwkJZXF1YWxzKCBq
UXVlcnkoInRoaW5nIiwgcmVzcCkubGVuZ3RoLCAyLCAndGhpbmdzIGluIHJlc3BvbnNlWE1MJyAp
OworCQlzdGFydCgpOworCSAgfQorCX0pOworfSk7CisKK3Rlc3QoImpRdWVyeS5hamF4IC0geG1s
OiBub24tbmFtZXNwYWNlIGVsZW1lbnRzIGluc2lkZSBuYW1lc3BhY2VkIGVsZW1lbnRzIChvdmVy
IEpTT05QKSIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgzKTsKKwlzdG9wKCk7CisJalF1ZXJ5LmFq
YXgoeworCSAgdXJsOiB1cmwoImRhdGEvd2l0aF9mcmllc19vdmVyX2pzb25wLnBocCIpLAorCSAg
ZGF0YVR5cGU6ICJqc29ucCB4bWwiLAorCSAgc3VjY2VzczogZnVuY3Rpb24ocmVzcCkgeworCQll
cXVhbHMoIGpRdWVyeSgicHJvcGVydGllcyIsIHJlc3ApLmxlbmd0aCwgMSwgJ3Byb3BlcnRpZXMg
aW4gcmVzcG9uc2VYTUwnICk7CisJCWVxdWFscyggalF1ZXJ5KCJqc2NvbmYiLCByZXNwKS5sZW5n
dGgsIDEsICdqc2NvbmYgaW4gcmVzcG9uc2VYTUwnICk7CisJCWVxdWFscyggalF1ZXJ5KCJ0aGlu
ZyIsIHJlc3ApLmxlbmd0aCwgMiwgJ3RoaW5ncyBpbiByZXNwb25zZVhNTCcgKTsKKwkJc3RhcnQo
KTsKKwkgIH0sCisJICBlcnJvcjogZnVuY3Rpb24oXzEsXzIsZXJyb3IpIHsKKwkJb2soIGZhbHNl
LCBlcnJvciApOworCQlzdGFydCgpOworCSAgfQorCX0pOworfSk7CisKK3Rlc3QoImpRdWVyeS5h
amF4IC0gSEVBRCByZXF1ZXN0cyIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgyKTsKKworCXN0b3Ao
KTsKKwlqUXVlcnkuYWpheCh7CisJCXVybDogdXJsKCJkYXRhL25hbWUuaHRtbCIpLAorCQl0eXBl
OiAiSEVBRCIsCisJCXN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEsIHN0YXR1cywgeGhyKXsKKwkJCXZh
ciBoID0geGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpOworCQkJb2soIC9EYXRlL2kudGVzdCho
KSwgJ05vIERhdGUgaW4gSEVBRCByZXNwb25zZScgKTsKKworCQkJalF1ZXJ5LmFqYXgoeworCQkJ
CXVybDogdXJsKCJkYXRhL25hbWUuaHRtbCIpLAorCQkJCWRhdGE6IHsgd2hpcF9pdDogImdvb2Qi
IH0sCisJCQkJdHlwZTogIkhFQUQiLAorCQkJCXN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEsIHN0YXR1
cywgeGhyKXsKKwkJCQkJdmFyIGggPSB4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCk7CisJCQkJ
CW9rKCAvRGF0ZS9pLnRlc3QoaCksICdObyBEYXRlIGluIEhFQUQgcmVzcG9uc2Ugd2l0aCBkYXRh
JyApOworCQkJCQlzdGFydCgpOworCQkJCX0KKwkJCX0pOworCQl9CisJfSk7CisKK30pOworCit0
ZXN0KCJqUXVlcnkuYWpheCAtIGJlZm9yZVNlbmQiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMSk7
CisJc3RvcCgpOworCisJdmFyIGNoZWNrID0gZmFsc2U7CisKKwlqUXVlcnkuYWpheFNldHVwKHsg
dGltZW91dDogMCB9KTsKKworCWpRdWVyeS5hamF4KHsKKwkJdXJsOiB1cmwoImRhdGEvbmFtZS5o
dG1sIiksCisJCWJlZm9yZVNlbmQ6IGZ1bmN0aW9uKHhtbCkgeworCQkJY2hlY2sgPSB0cnVlOwor
CQl9LAorCQlzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7CisJCQlvayggY2hlY2ssICJjaGVjayBi
ZWZvcmVTZW5kIHdhcyBleGVjdXRlZCIgKTsKKwkJCXN0YXJ0KCk7CisJCX0KKwl9KTsKK30pOwor
Cit0ZXN0KCJqUXVlcnkuYWpheCAtIGJlZm9yZVNlbmQsIGNhbmNlbCByZXF1ZXN0ICgjMjY4OCki
LCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMik7CisJdmFyIHJlcXVlc3QgPSBqUXVlcnkuYWpheCh7
CisJCXVybDogdXJsKCJkYXRhL25hbWUuaHRtbCIpLAorCQliZWZvcmVTZW5kOiBmdW5jdGlvbigp
IHsKKwkJCW9rKCB0cnVlLCAiYmVmb3JlU2VuZCBnb3QgY2FsbGVkLCBjYW5jZWxpbmciICk7CisJ
CQlyZXR1cm4gZmFsc2U7CisJCX0sCisJCXN1Y2Nlc3M6IGZ1bmN0aW9uKCkgeworCQkJb2soIGZh
bHNlLCAicmVxdWVzdCBkaWRuJ3QgZ2V0IGNhbmNlbGVkIiApOworCQl9LAorCQljb21wbGV0ZTog
ZnVuY3Rpb24oKSB7CisJCQlvayggZmFsc2UsICJyZXF1ZXN0IGRpZG4ndCBnZXQgY2FuY2VsZWQi
ICk7CisJCX0sCisJCWVycm9yOiBmdW5jdGlvbigpIHsKKwkJCW9rKCBmYWxzZSwgInJlcXVlc3Qg
ZGlkbid0IGdldCBjYW5jZWxlZCIgKTsKKwkJfQorCX0pOworCW9rKCByZXF1ZXN0ID09PSBmYWxz
ZSwgImNhbmNlbGVkIHJlcXVlc3QgbXVzdCByZXR1cm4gZmFsc2UgaW5zdGVhZCBvZiBYTUxIdHRw
UmVxdWVzdCBpbnN0YW5jZSIgKTsKK30pOworCit0ZXN0KCJqUXVlcnkuYWpheCAtIGJlZm9yZVNl
bmQsIGNhbmNlbCByZXF1ZXN0IG1hbnVhbGx5IiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDIpOwor
CXZhciByZXF1ZXN0ID0galF1ZXJ5LmFqYXgoeworCQl1cmw6IHVybCgiZGF0YS9uYW1lLmh0bWwi
KSwKKwkJYmVmb3JlU2VuZDogZnVuY3Rpb24oeGhyKSB7CisJCQlvayggdHJ1ZSwgImJlZm9yZVNl
bmQgZ290IGNhbGxlZCwgY2FuY2VsaW5nIiApOworCQkJeGhyLmFib3J0KCk7CisJCX0sCisJCXN1
Y2Nlc3M6IGZ1bmN0aW9uKCkgeworCQkJb2soIGZhbHNlLCAicmVxdWVzdCBkaWRuJ3QgZ2V0IGNh
bmNlbGVkIiApOworCQl9LAorCQljb21wbGV0ZTogZnVuY3Rpb24oKSB7CisJCQlvayggZmFsc2Us
ICJyZXF1ZXN0IGRpZG4ndCBnZXQgY2FuY2VsZWQiICk7CisJCX0sCisJCWVycm9yOiBmdW5jdGlv
bigpIHsKKwkJCW9rKCBmYWxzZSwgInJlcXVlc3QgZGlkbid0IGdldCBjYW5jZWxlZCIgKTsKKwkJ
fQorCX0pOworCW9rKCByZXF1ZXN0ID09PSBmYWxzZSwgImNhbmNlbGVkIHJlcXVlc3QgbXVzdCBy
ZXR1cm4gZmFsc2UgaW5zdGVhZCBvZiBYTUxIdHRwUmVxdWVzdCBpbnN0YW5jZSIgKTsKK30pOwor
Cit3aW5kb3cuZm9vYmFyID0gbnVsbDsKK3dpbmRvdy50ZXN0Rm9vID0gdW5kZWZpbmVkOworCit0
ZXN0KCJqUXVlcnkuYWpheCAtIGRhdGFUeXBlIGh0bWwiLCBmdW5jdGlvbigpIHsKKwlleHBlY3Qo
NSk7CisJc3RvcCgpOworCisJdmFyIHZlcmlmeUV2YWx1YXRpb24gPSBmdW5jdGlvbigpIHsKKwkJ
ZXF1YWxzKCB0ZXN0Rm9vLCAiZm9vIiwgJ0NoZWNrIGlmIHNjcmlwdCB3YXMgZXZhbHVhdGVkIGZv
ciBkYXRhdHlwZSBodG1sJyApOworCQllcXVhbHMoIGZvb2JhciwgImJhciIsICdDaGVjayBpZiBz
Y3JpcHQgc3JjIHdhcyBldmFsdWF0ZWQgZm9yIGRhdGF0eXBlIGh0bWwnICk7CisKKwkJc3RhcnQo
KTsKKwl9OworCisJalF1ZXJ5LmFqYXgoeworCSAgZGF0YVR5cGU6ICJodG1sIiwKKwkgIHVybDog
dXJsKCJkYXRhL3Rlc3QuaHRtbCIpLAorCSAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkgeworCQlq
UXVlcnkoIiNhcCIpLmh0bWwoZGF0YSk7CisJCW9rKCBkYXRhLm1hdGNoKC9eaHRtbCB0ZXh0Lyks
ICdDaGVjayBjb250ZW50IGZvciBkYXRhdHlwZSBodG1sJyApOworCQlzZXRUaW1lb3V0KHZlcmlm
eUV2YWx1YXRpb24sIDYwMCk7CisJICB9CisJfSk7Cit9KTsKKwordGVzdCgic2VyaWFsaXplKCki
LCBmdW5jdGlvbigpIHsKKwlleHBlY3QoNSk7CisKKwkvLyBBZGQgaHRtbDUgZWxlbWVudHMgb25s
eSBmb3Igc2VyaWFsaXplIGJlY2F1c2Ugc2VsZWN0b3IgY2FuJ3QgeWV0IGZpbmQgdGhlbSBvbiBu
b24taHRtbDUgYnJvd3NlcnMKKwlqUXVlcnkoIiNzZWFyY2giKS5hZnRlcigKKwkJJzxpbnB1dCB0
eXBlPSJlbWFpbCIgaWQ9Imh0bWw1ZW1haWwiIG5hbWU9ImVtYWlsIiB2YWx1ZT0iZGF2ZUBqcXVl
cnkuY29tIiAvPicrCisJCSc8aW5wdXQgdHlwZT0ibnVtYmVyIiBpZD0iaHRtbDVudW1iZXIiIG5h
bWU9Im51bWJlciIgdmFsdWU9IjQzIiAvPicKKwkpOworCisJZXF1YWxzKCBqUXVlcnkoJyNmb3Jt
Jykuc2VyaWFsaXplKCksCisJCSJhY3Rpb249VGVzdCZyYWRpbzI9b24mY2hlY2s9b24maGlkZGVu
PSZmb28lNUJiYXIlNUQ9Jm5hbWU9bmFtZSZzZWFyY2g9c2VhcmNoJmVtYWlsPWRhdmUlNDBqcXVl
cnkuY29tJm51bWJlcj00MyZzZWxlY3QxPSZzZWxlY3QyPTMmc2VsZWN0Mz0xJnNlbGVjdDM9MiZz
ZWxlY3Q1PTMiLAorCQknQ2hlY2sgZm9ybSBzZXJpYWxpemF0aW9uIGFzIHF1ZXJ5IHN0cmluZycp
OworCisJZXF1YWxzKCBqUXVlcnkoJyNmb3JtIDppbnB1dCcpLnNlcmlhbGl6ZSgpLAorCQkiYWN0
aW9uPVRlc3QmcmFkaW8yPW9uJmNoZWNrPW9uJmhpZGRlbj0mZm9vJTVCYmFyJTVEPSZuYW1lPW5h
bWUmc2VhcmNoPXNlYXJjaCZlbWFpbD1kYXZlJTQwanF1ZXJ5LmNvbSZudW1iZXI9NDMmc2VsZWN0
MT0mc2VsZWN0Mj0zJnNlbGVjdDM9MSZzZWxlY3QzPTImc2VsZWN0NT0zIiwKKwkJJ0NoZWNrIGlu
cHV0IHNlcmlhbGl6YXRpb24gYXMgcXVlcnkgc3RyaW5nJyk7CisKKwllcXVhbHMoIGpRdWVyeSgn
I3Rlc3RGb3JtJykuc2VyaWFsaXplKCksCisJCSdUMz0lM0YlMEQlMEFaJkgxPXgmSDI9JlBXRD0m
VDE9JlQyPVlFUyZNeStOYW1lPW1lJlMxPWFiYyZTMz1ZRVMmUzQ9JywKKwkJJ0NoZWNrIGZvcm0g
c2VyaWFsaXphdGlvbiBhcyBxdWVyeSBzdHJpbmcnKTsKKworCWVxdWFscyggalF1ZXJ5KCcjdGVz
dEZvcm0gOmlucHV0Jykuc2VyaWFsaXplKCksCisJCSdUMz0lM0YlMEQlMEFaJkgxPXgmSDI9JlBX
RD0mVDE9JlQyPVlFUyZNeStOYW1lPW1lJlMxPWFiYyZTMz1ZRVMmUzQ9JywKKwkJJ0NoZWNrIGlu
cHV0IHNlcmlhbGl6YXRpb24gYXMgcXVlcnkgc3RyaW5nJyk7CisKKwllcXVhbHMoIGpRdWVyeSgn
I2Zvcm0sICN0ZXN0Rm9ybScpLnNlcmlhbGl6ZSgpLAorCQkiYWN0aW9uPVRlc3QmcmFkaW8yPW9u
JmNoZWNrPW9uJmhpZGRlbj0mZm9vJTVCYmFyJTVEPSZuYW1lPW5hbWUmc2VhcmNoPXNlYXJjaCZl
bWFpbD1kYXZlJTQwanF1ZXJ5LmNvbSZudW1iZXI9NDMmc2VsZWN0MT0mc2VsZWN0Mj0zJnNlbGVj
dDM9MSZzZWxlY3QzPTImc2VsZWN0NT0zJlQzPSUzRiUwRCUwQVomSDE9eCZIMj0mUFdEPSZUMT0m
VDI9WUVTJk15K05hbWU9bWUmUzE9YWJjJlMzPVlFUyZTND0iLAorCQknTXVsdGlwbGUgZm9ybSBz
ZXJpYWxpemF0aW9uIGFzIHF1ZXJ5IHN0cmluZycpOworCisgIC8qIFRlbXBvcmFyaWx5IGRpc2Fi
bGVkLiBPcGVyYSAxMCBoYXMgcHJvYmxlbXMgd2l0aCBmb3JtIHNlcmlhbGl6YXRpb24uCisJZXF1
YWxzKCBqUXVlcnkoJyNmb3JtLCAjdGVzdEZvcm0gOmlucHV0Jykuc2VyaWFsaXplKCksCisJCSJh
Y3Rpb249VGVzdCZyYWRpbzI9b24mY2hlY2s9b24maGlkZGVuPSZmb28lNUJiYXIlNUQ9Jm5hbWU9
bmFtZSZzZWFyY2g9c2VhcmNoJmVtYWlsPWRhdmUlNDBqcXVlcnkuY29tJm51bWJlcj00MyZzZWxl
Y3QxPSZzZWxlY3QyPTMmc2VsZWN0Mz0xJnNlbGVjdDM9MiZUMz0lM0YlMEQlMEFaJkgxPXgmSDI9
JlBXRD0mVDE9JlQyPVlFUyZNeStOYW1lPW1lJlMxPWFiYyZTMz1ZRVMmUzQ9IiwKKwkJJ01peGVk
IGZvcm0vaW5wdXQgc2VyaWFsaXphdGlvbiBhcyBxdWVyeSBzdHJpbmcnKTsKKwkqLworCWpRdWVy
eSgiI2h0bWw1ZW1haWwsICNodG1sNW51bWJlciIpLnJlbW92ZSgpOworfSk7CisKK3Rlc3QoImpR
dWVyeS5wYXJhbSgpIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDI0KTsKKworCWVxdWFscyggIWpR
dWVyeS5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwsIHRydWUsICJ0cmFkaXRpb25hbCBmbGFnLCBm
YWxzeSBieSBkZWZhdWx0IiApOworCisJdmFyIHBhcmFtcyA9IHtmb286ImJhciIsIGJhejo0Miwg
cXV1eDoiQWxsIHlvdXIgYmFzZSBhcmUgYmVsb25nIHRvIHVzIn07CisJZXF1YWxzKCBqUXVlcnku
cGFyYW0ocGFyYW1zKSwgImZvbz1iYXImYmF6PTQyJnF1dXg9QWxsK3lvdXIrYmFzZSthcmUrYmVs
b25nK3RvK3VzIiwgInNpbXBsZSIgKTsKKworCXBhcmFtcyA9IHtzb21lTmFtZTogWzEsIDIsIDNd
LCByZWd1bGFyVGhpbmc6ICJibGFoIiB9OworCWVxdWFscyggalF1ZXJ5LnBhcmFtKHBhcmFtcyks
ICJzb21lTmFtZSU1QiU1RD0xJnNvbWVOYW1lJTVCJTVEPTImc29tZU5hbWUlNUIlNUQ9MyZyZWd1
bGFyVGhpbmc9YmxhaCIsICJ3aXRoIGFycmF5IiApOworCisJcGFyYW1zID0ge2ZvbzogWydhJywg
J2InLCAnYyddfTsKKwllcXVhbHMoIGpRdWVyeS5wYXJhbShwYXJhbXMpLCAiZm9vJTVCJTVEPWEm
Zm9vJTVCJTVEPWImZm9vJTVCJTVEPWMiLCAid2l0aCBhcnJheSBvZiBzdHJpbmdzIiApOworCisJ
cGFyYW1zID0ge2ZvbzogWyJiYXoiLCA0MiwgIkFsbCB5b3VyIGJhc2UgYXJlIGJlbG9uZyB0byB1
cyJdIH07CisJZXF1YWxzKCBqUXVlcnkucGFyYW0ocGFyYW1zKSwgImZvbyU1QiU1RD1iYXomZm9v
JTVCJTVEPTQyJmZvbyU1QiU1RD1BbGwreW91citiYXNlK2FyZStiZWxvbmcrdG8rdXMiLCAibW9y
ZSBhcnJheSIgKTsKKworCXBhcmFtcyA9IHtmb286IHsgYmFyOiAnYmF6JywgYmVlcDogNDIsIHF1
dXg6ICdBbGwgeW91ciBiYXNlIGFyZSBiZWxvbmcgdG8gdXMnIH0gfTsKKwllcXVhbHMoIGpRdWVy
eS5wYXJhbShwYXJhbXMpLCAiZm9vJTVCYmFyJTVEPWJheiZmb28lNUJiZWVwJTVEPTQyJmZvbyU1
QnF1dXglNUQ9QWxsK3lvdXIrYmFzZSthcmUrYmVsb25nK3RvK3VzIiwgImV2ZW4gbW9yZSBhcnJh
eXMiICk7CisKKwlwYXJhbXMgPSB7IGE6WzEsMl0sIGI6eyBjOjMsIGQ6WzQsNV0sIGU6eyB4Ols2
XSwgeTo3LCB6Ols4LDldIH0sIGY6dHJ1ZSwgZzpmYWxzZSwgaDp1bmRlZmluZWQgfSwgaTpbMTAs
MTFdLCBqOnRydWUsIGs6ZmFsc2UsIGw6W3VuZGVmaW5lZCwwXSwgbToiY293Ym95IGhhdD8iIH07
CisJZXF1YWxzKCBkZWNvZGVVUklDb21wb25lbnQoIGpRdWVyeS5wYXJhbShwYXJhbXMpICksICJh
W109MSZhW109MiZiW2NdPTMmYltkXVtdPTQmYltkXVtdPTUmYltlXVt4XVtdPTYmYltlXVt5XT03
JmJbZV1bel1bXT04JmJbZV1bel1bXT05JmJbZl09dHJ1ZSZiW2ddPWZhbHNlJmJbaF09dW5kZWZp
bmVkJmlbXT0xMCZpW109MTEmaj10cnVlJms9ZmFsc2UmbFtdPXVuZGVmaW5lZCZsW109MCZtPWNv
d2JveStoYXQ/IiwgImh1Z2Ugc3RydWN0dXJlIiApOworCisJcGFyYW1zID0geyBhOiBbIDAsIFsg
MSwgMiBdLCBbIDMsIFsgNCwgNSBdLCBbIDYgXSBdLCB7IGI6IFsgNywgWyA4LCA5IF0sIFsgeyBj
OiAxMCwgZDogMTEgfSBdLCBbIFsgMTIgXSBdLCBbIFsgWyAxMyBdIF0gXSwgeyBlOiB7IGY6IHsg
ZzogWyAxNCwgWyAxNSBdIF0gfSB9IH0sIDE2IF0gfSwgMTcgXSB9OworCWVxdWFscyggZGVjb2Rl
VVJJQ29tcG9uZW50KCBqUXVlcnkucGFyYW0ocGFyYW1zKSApLCAiYVtdPTAmYVsxXVtdPTEmYVsx
XVtdPTImYVsyXVtdPTMmYVsyXVsxXVtdPTQmYVsyXVsxXVtdPTUmYVsyXVsyXVtdPTYmYVszXVti
XVtdPTcmYVszXVtiXVsxXVtdPTgmYVszXVtiXVsxXVtdPTkmYVszXVtiXVsyXVswXVtjXT0xMCZh
WzNdW2JdWzJdWzBdW2RdPTExJmFbM11bYl1bM11bMF1bXT0xMiZhWzNdW2JdWzRdWzBdWzBdW109
MTMmYVszXVtiXVs1XVtlXVtmXVtnXVtdPTE0JmFbM11bYl1bNV1bZV1bZl1bZ11bMV1bXT0xNSZh
WzNdW2JdW109MTYmYVtdPTE3IiwgIm5lc3RlZCBhcnJheXMiICk7CisKKwlwYXJhbXMgPSB7IGE6
WzEsMl0sIGI6eyBjOjMsIGQ6WzQsNV0sIGU6eyB4Ols2XSwgeTo3LCB6Ols4LDldIH0sIGY6dHJ1
ZSwgZzpmYWxzZSwgaDp1bmRlZmluZWQgfSwgaTpbMTAsMTFdLCBqOnRydWUsIGs6ZmFsc2UsIGw6
W3VuZGVmaW5lZCwwXSwgbToiY293Ym95IGhhdD8iIH07CisJZXF1YWxzKCBqUXVlcnkucGFyYW0o
cGFyYW1zLHRydWUpLCAiYT0xJmE9MiZiPSU1Qm9iamVjdCtPYmplY3QlNUQmaT0xMCZpPTExJmo9
dHJ1ZSZrPWZhbHNlJmw9dW5kZWZpbmVkJmw9MCZtPWNvd2JveStoYXQlM0YiLCAiaHVnZSBzdHJ1
Y3R1cmUsIGZvcmNlZCB0cmFkaXRpb25hbCIgKTsKKworCWVxdWFscyggZGVjb2RlVVJJQ29tcG9u
ZW50KCBqUXVlcnkucGFyYW0oeyBhOiBbMSwyLDNdLCAnYltdJzogWzQsNSw2XSwgJ2NbZF0nOiBb
Nyw4LDldLCBlOiB7IGY6IFsxMF0sIGc6IFsxMSwxMl0sIGg6IDEzIH0gfSkgKSwgImFbXT0xJmFb
XT0yJmFbXT0zJmJbXT00JmJbXT01JmJbXT02JmNbZF1bXT03JmNbZF1bXT04JmNbZF1bXT05JmVb
Zl1bXT0xMCZlW2ddW109MTEmZVtnXVtdPTEyJmVbaF09MTMiLCAiTWFrZSBzdXJlIHBhcmFtcyBh
cmUgbm90IGRvdWJsZS1lbmNvZGVkLiIgKTsKKworCS8vIE1ha2Ugc3VyZSBlbXB0eSBhcnJheXMg
YW5kIG9iamVjdHMgYXJlIGhhbmRsZWQgIzY0ODEKKwllcXVhbHMoIGpRdWVyeS5wYXJhbSh7ImZv
byI6IHsiYmFyIjogW119IH0pLCAiZm9vJTVCYmFyJTVEPSIsICJFbXB0eSBhcnJheSBwYXJhbSIg
KTsKKwllcXVhbHMoIGpRdWVyeS5wYXJhbSh7ImZvbyI6IHsiYmFyIjogW10sIGZvbzogMX0gfSks
ICJmb28lNUJiYXIlNUQ9JmZvbyU1QmZvbyU1RD0xIiwgIkVtcHR5IGFycmF5IHBhcmFtIiApOwor
CWVxdWFscyggalF1ZXJ5LnBhcmFtKHsiZm9vIjogeyJiYXIiOiB7fX0gfSksICJmb28lNUJiYXIl
NUQ9IiwgIkVtcHR5IG9iamVjdCBwYXJhbSIgKTsKKworCS8vICM3OTQ1CisJZXF1YWxzKCBqUXVl
cnkucGFyYW0oeyJqcXVlcnkiOiAiMS40LjIifSksICJqcXVlcnk9MS40LjIiLCAiQ2hlY2sgdGhh
dCBvYmplY3Qgd2l0aCBhIGpRdWVyeSBwcm9wZXJ0eSBnZXQgc2VyaWFsaXplZCBjb3JyZWN0bHki
ICk7CisKKwlqUXVlcnkuYWpheFNldHVwKHsgdHJhZGl0aW9uYWw6IHRydWUgfSk7CisKKwl2YXIg
cGFyYW1zID0ge2ZvbzoiYmFyIiwgYmF6OjQyLCBxdXV4OiJBbGwgeW91ciBiYXNlIGFyZSBiZWxv
bmcgdG8gdXMifTsKKwllcXVhbHMoIGpRdWVyeS5wYXJhbShwYXJhbXMpLCAiZm9vPWJhciZiYXo9
NDImcXV1eD1BbGwreW91citiYXNlK2FyZStiZWxvbmcrdG8rdXMiLCAic2ltcGxlIiApOworCisJ
cGFyYW1zID0ge3NvbWVOYW1lOiBbMSwgMiwgM10sIHJlZ3VsYXJUaGluZzogImJsYWgiIH07CisJ
ZXF1YWxzKCBqUXVlcnkucGFyYW0ocGFyYW1zKSwgInNvbWVOYW1lPTEmc29tZU5hbWU9MiZzb21l
TmFtZT0zJnJlZ3VsYXJUaGluZz1ibGFoIiwgIndpdGggYXJyYXkiICk7CisKKwlwYXJhbXMgPSB7
Zm9vOiBbJ2EnLCAnYicsICdjJ119OworCWVxdWFscyggalF1ZXJ5LnBhcmFtKHBhcmFtcyksICJm
b289YSZmb289YiZmb289YyIsICJ3aXRoIGFycmF5IG9mIHN0cmluZ3MiICk7CisKKwlwYXJhbXMg
PSB7ImZvb1tdIjpbImJheiIsIDQyLCAiQWxsIHlvdXIgYmFzZSBhcmUgYmVsb25nIHRvIHVzIl19
OworCWVxdWFscyggalF1ZXJ5LnBhcmFtKHBhcmFtcyksICJmb28lNUIlNUQ9YmF6JmZvbyU1QiU1
RD00MiZmb28lNUIlNUQ9QWxsK3lvdXIrYmFzZSthcmUrYmVsb25nK3RvK3VzIiwgIm1vcmUgYXJy
YXkiICk7CisKKwlwYXJhbXMgPSB7ImZvb1tiYXJdIjoiYmF6IiwgImZvb1tiZWVwXSI6NDIsICJm
b29bcXV1eF0iOiJBbGwgeW91ciBiYXNlIGFyZSBiZWxvbmcgdG8gdXMifTsKKwllcXVhbHMoIGpR
dWVyeS5wYXJhbShwYXJhbXMpLCAiZm9vJTVCYmFyJTVEPWJheiZmb28lNUJiZWVwJTVEPTQyJmZv
byU1QnF1dXglNUQ9QWxsK3lvdXIrYmFzZSthcmUrYmVsb25nK3RvK3VzIiwgImV2ZW4gbW9yZSBh
cnJheXMiICk7CisKKwlwYXJhbXMgPSB7IGE6WzEsMl0sIGI6eyBjOjMsIGQ6WzQsNV0sIGU6eyB4
Ols2XSwgeTo3LCB6Ols4LDldIH0sIGY6dHJ1ZSwgZzpmYWxzZSwgaDp1bmRlZmluZWQgfSwgaTpb
MTAsMTFdLCBqOnRydWUsIGs6ZmFsc2UsIGw6W3VuZGVmaW5lZCwwXSwgbToiY293Ym95IGhhdD8i
IH07CisJZXF1YWxzKCBqUXVlcnkucGFyYW0ocGFyYW1zKSwgImE9MSZhPTImYj0lNUJvYmplY3Qr
T2JqZWN0JTVEJmk9MTAmaT0xMSZqPXRydWUmaz1mYWxzZSZsPXVuZGVmaW5lZCZsPTAmbT1jb3di
b3kraGF0JTNGIiwgImh1Z2Ugc3RydWN0dXJlIiApOworCisJcGFyYW1zID0geyBhOiBbIDAsIFsg
MSwgMiBdLCBbIDMsIFsgNCwgNSBdLCBbIDYgXSBdLCB7IGI6IFsgNywgWyA4LCA5IF0sIFsgeyBj
OiAxMCwgZDogMTEgfSBdLCBbIFsgMTIgXSBdLCBbIFsgWyAxMyBdIF0gXSwgeyBlOiB7IGY6IHsg
ZzogWyAxNCwgWyAxNSBdIF0gfSB9IH0sIDE2IF0gfSwgMTcgXSB9OworCWVxdWFscyggalF1ZXJ5
LnBhcmFtKHBhcmFtcyksICJhPTAmYT0xJTJDMiZhPTMlMkM0JTJDNSUyQzYmYT0lNUJvYmplY3Qr
T2JqZWN0JTVEJmE9MTciLCAibmVzdGVkIGFycmF5cyAobm90IHBvc3NpYmxlIHdoZW4galF1ZXJ5
LnBhcmFtLnRyYWRpdGlvbmFsID09IHRydWUpIiApOworCisJcGFyYW1zID0geyBhOlsxLDJdLCBi
OnsgYzozLCBkOls0LDVdLCBlOnsgeDpbNl0sIHk6NywgejpbOCw5XSB9LCBmOnRydWUsIGc6ZmFs
c2UsIGg6dW5kZWZpbmVkIH0sIGk6WzEwLDExXSwgajp0cnVlLCBrOmZhbHNlLCBsOlt1bmRlZmlu
ZWQsMF0sIG06ImNvd2JveSBoYXQ/IiB9OworCWVxdWFscyggZGVjb2RlVVJJQ29tcG9uZW50KCBq
UXVlcnkucGFyYW0ocGFyYW1zLGZhbHNlKSApLCAiYVtdPTEmYVtdPTImYltjXT0zJmJbZF1bXT00
JmJbZF1bXT01JmJbZV1beF1bXT02JmJbZV1beV09NyZiW2VdW3pdW109OCZiW2VdW3pdW109OSZi
W2ZdPXRydWUmYltnXT1mYWxzZSZiW2hdPXVuZGVmaW5lZCZpW109MTAmaVtdPTExJmo9dHJ1ZSZr
PWZhbHNlJmxbXT11bmRlZmluZWQmbFtdPTAmbT1jb3dib3kraGF0PyIsICJodWdlIHN0cnVjdHVy
ZSwgZm9yY2VkIG5vdCB0cmFkaXRpb25hbCIgKTsKKworCXBhcmFtcyA9IHsgcGFyYW0xOiBudWxs
IH07CisJZXF1YWxzKCBqUXVlcnkucGFyYW0ocGFyYW1zLGZhbHNlKSwgInBhcmFtMT1udWxsIiwg
Ik1ha2Ugc3VyZSB0aGF0IG51bGwgcGFyYW1zIGFyZW4ndCB0cmF2ZXJzZWQuIiApOworCisJcGFy
YW1zID0geyd0ZXN0JzogeydsZW5ndGgnOiAzLCAnZm9vJzogJ2Jhcid9IH07CisJZXF1YWxzKCBq
UXVlcnkucGFyYW0oIHBhcmFtcywgZmFsc2UgKSwgInRlc3QlNUJsZW5ndGglNUQ9MyZ0ZXN0JTVC
Zm9vJTVEPWJhciIsICJTdWItb2JqZWN0IHdpdGggYSBsZW5ndGggcHJvcGVydHkiICk7Cit9KTsK
KwordGVzdCgic3luY2hyb25vdXMgcmVxdWVzdCIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgxKTsK
KwlvayggL157ICJkYXRhIi8udGVzdCggalF1ZXJ5LmFqYXgoe3VybDogdXJsKCJkYXRhL2pzb25f
b2JqLmpzIiksIGRhdGFUeXBlOiAidGV4dCIsIGFzeW5jOiBmYWxzZX0pLnJlc3BvbnNlVGV4dCAp
LCAiY2hlY2sgcmV0dXJuZWQgdGV4dCIgKTsKK30pOworCit0ZXN0KCJzeW5jaHJvbm91cyByZXF1
ZXN0IHdpdGggY2FsbGJhY2tzIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDIpOworCXZhciByZXN1
bHQ7CisJalF1ZXJ5LmFqYXgoe3VybDogdXJsKCJkYXRhL2pzb25fb2JqLmpzIiksIGFzeW5jOiBm
YWxzZSwgZGF0YVR5cGU6ICJ0ZXh0Iiwgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkgeyBvayh0cnVl
LCAic3VjZXNzIGNhbGxiYWNrIGV4ZWN1dGVkIik7IHJlc3VsdCA9IGRhdGE7IH0gfSk7CisJb2so
IC9eeyAiZGF0YSIvLnRlc3QoIHJlc3VsdCApLCAiY2hlY2sgcmV0dXJuZWQgdGV4dCIgKTsKK30p
OworCit0ZXN0KCJwYXNzLXRocm91Z2ggcmVxdWVzdCBvYmplY3QiLCBmdW5jdGlvbigpIHsKKwll
eHBlY3QoOCk7CisJc3RvcCgpOworCisJdmFyIHRhcmdldCA9ICJkYXRhL25hbWUuaHRtbCI7CisJ
dmFyIHN1Y2Nlc3NDb3VudCA9IDA7CisJdmFyIGVycm9yQ291bnQgPSAwOworCXZhciBlcnJvckV4
ID0gIiI7CisJdmFyIHN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKKwkJc3VjY2Vzc0NvdW50Kys7CisJ
fTsKKwlqUXVlcnkoIiNmb28iKS5hamF4RXJyb3IoZnVuY3Rpb24gKGUsIHhtbCwgcywgZXgpIHsK
KwkJZXJyb3JDb3VudCsrOworCQllcnJvckV4ICs9ICI6ICIgKyB4bWwuc3RhdHVzOworCX0pOwor
CWpRdWVyeSgiI2ZvbyIpLm9uZSgnYWpheFN0b3AnLCBmdW5jdGlvbiAoKSB7CisJCWVxdWFscyhz
dWNjZXNzQ291bnQsIDUsICJDaGVjayBhbGwgYWpheCBjYWxscyBzdWNjZXNzZnVsIik7CisJCWVx
dWFscyhlcnJvckNvdW50LCAwLCAiQ2hlY2sgbm8gYWpheCBlcnJvcnMgKHN0YXR1cyIgKyBlcnJv
ckV4ICsgIikiKTsKKwkJalF1ZXJ5KCIjZm9vIikudW5iaW5kKCdhamF4RXJyb3InKTsKKworCQlz
dGFydCgpOworCX0pOworCisJb2soIGpRdWVyeS5nZXQodXJsKHRhcmdldCksIHN1Y2Nlc3MpLCAi
Z2V0IiApOworCW9rKCBqUXVlcnkucG9zdCh1cmwodGFyZ2V0KSwgc3VjY2VzcyksICJwb3N0IiAp
OworCW9rKCBqUXVlcnkuZ2V0U2NyaXB0KHVybCgiZGF0YS90ZXN0LmpzIiksIHN1Y2Nlc3MpLCAi
c2NyaXB0IiApOworCW9rKCBqUXVlcnkuZ2V0SlNPTih1cmwoImRhdGEvanNvbl9vYmouanMiKSwg
c3VjY2VzcyksICJqc29uIiApOworCW9rKCBqUXVlcnkuYWpheCh7dXJsOiB1cmwodGFyZ2V0KSwg
c3VjY2Vzczogc3VjY2Vzc30pLCAiZ2VuZXJpYyIgKTsKK30pOworCit0ZXN0KCJhamF4IGNhY2hl
IiwgZnVuY3Rpb24gKCkgeworCWV4cGVjdCgxOCk7CisKKwlzdG9wKCk7CisKKwl2YXIgY291bnQg
PSAwOworCisJalF1ZXJ5KCIjZmlyc3RwIikuYmluZCgiYWpheFN1Y2Nlc3MiLCBmdW5jdGlvbiAo
ZSwgeG1sLCBzKSB7CisJCXZhciByZSA9IC9fPSguKj8pKCZ8JCkvZzsKKwkJdmFyIG9sZE9uZSA9
IG51bGw7CisJCWZvciAodmFyIGkgPSAwOyBpIDwgNjsgaSsrKSB7CisJCQl2YXIgcmV0ID0gcmUu
ZXhlYyhzLnVybCk7CisJCQlpZiAoIXJldCkgeworCQkJCWJyZWFrOworCQkJfQorCQkJb2xkT25l
ID0gcmV0WzFdOworCQl9CisJCWVxdWFscyhpLCAxLCAiVGVzdCB0byBtYWtlIHN1cmUgb25seSBv
bmUgJ25vLWNhY2hlJyBwYXJhbWV0ZXIgaXMgdGhlcmUiKTsKKwkJb2sob2xkT25lICE9ICJ0b2Jl
cmVwbGFjZWQ1NTUiLCAiVGVzdCB0byBiZSBzdXJlIHBhcmFtZXRlciAoaWYgaXQgd2FzIHRoZXJl
KSB3YXMgcmVwbGFjZWQiKTsKKwkJaWYoKytjb3VudCA9PSA2KQorCQkJc3RhcnQoKTsKKwl9KTsK
KworCW9rKCBqUXVlcnkuYWpheCh7dXJsOiAiZGF0YS90ZXh0LnBocCIsIGNhY2hlOmZhbHNlfSks
ICJ0ZXN0IHdpdGggbm8gcGFyYW1ldGVycyIgKTsKKwlvayggalF1ZXJ5LmFqYXgoe3VybDogImRh
dGEvdGV4dC5waHA/cGl6emE9dHJ1ZSIsIGNhY2hlOmZhbHNlfSksICJ0ZXN0IHdpdGggMSBwYXJh
bWV0ZXIiICk7CisJb2soIGpRdWVyeS5hamF4KHt1cmw6ICJkYXRhL3RleHQucGhwP189dG9iZXJl
cGxhY2VkNTU1IiwgY2FjaGU6ZmFsc2V9KSwgInRlc3Qgd2l0aCBfPSBwYXJhbWV0ZXIiICk7CisJ
b2soIGpRdWVyeS5hamF4KHt1cmw6ICJkYXRhL3RleHQucGhwP3BpenphPXRydWUmXz10b2JlcmVw
bGFjZWQ1NTUiLCBjYWNoZTpmYWxzZX0pLCAidGVzdCB3aXRoIDEgcGFyYW1ldGVyIHBsdXMgXz0g
b25lIiApOworCW9rKCBqUXVlcnkuYWpheCh7dXJsOiAiZGF0YS90ZXh0LnBocD9fPXRvYmVyZXBs
YWNlZDU1NSZ0dj1mYWxzZSIsIGNhY2hlOmZhbHNlfSksICJ0ZXN0IHdpdGggMSBwYXJhbWV0ZXIg
cGx1cyBfPSBvbmUgYmVmb3JlIGl0IiApOworCW9rKCBqUXVlcnkuYWpheCh7dXJsOiAiZGF0YS90
ZXh0LnBocD9uYW1lPURhdmlkJl89dG9iZXJlcGxhY2VkNTU1Jndhc2hlcmU9dHJ1ZSIsIGNhY2hl
OmZhbHNlfSksICJ0ZXN0IHdpdGggMiBwYXJhbWV0ZXJzIHN1cnJvdW5kaW5nIF89IG9uZSIgKTsK
K30pOworCisvKgorICogVGVzdCBkaXNhYmxlZC4KKyAqIFRoZSBhc3NlcnRpb25zIGV4cGVjdCB0
aGF0IHRoZSBwYXNzZWQtaW4gb2JqZWN0IHdpbGwgYmUgbW9kaWZpZWQsCisgKiB3aGljaCBzaG91
bGRuJ3QgYmUgdGhlIGNhc2UuIEZpeGVzICM1NDM5LgordGVzdCgiZ2xvYmFsIGFqYXhTZXR0aW5n
cyIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgyKTsKKworCXZhciB0bXAgPSBqUXVlcnkuZXh0ZW5k
KHt9LCBqUXVlcnkuYWpheFNldHRpbmdzKTsKKwl2YXIgb3JpZyA9IHsgdXJsOiAiZGF0YS93aXRo
X2ZyaWVzLnhtbCIgfTsKKwl2YXIgdDsKKworCWpRdWVyeS5hamF4U2V0dXAoeyBkYXRhOiB7Zm9v
OiAnYmFyJywgYmFyOiAnQkFSJ30gfSk7CisKKwl0ID0galF1ZXJ5LmV4dGVuZCh7fSwgb3JpZyk7
CisJdC5kYXRhID0ge307CisJalF1ZXJ5LmFqYXgodCk7CisJb2soIHQudXJsLmluZGV4T2YoJ2Zv
bycpID4gLTEgJiYgdC51cmwuaW5kZXhPZignYmFyJykgPiAtMSwgIkNoZWNrIGV4dGVuZGluZyB7
fSIgKTsKKworCXQgPSBqUXVlcnkuZXh0ZW5kKHt9LCBvcmlnKTsKKwl0LmRhdGEgPSB7IHpvbzog
J2EnLCBwaW5nOiAnYicgfTsKKwlqUXVlcnkuYWpheCh0KTsKKwlvayggdC51cmwuaW5kZXhPZign
cGluZycpID4gLTEgJiYgdC51cmwuaW5kZXhPZignem9vJykgPiAtMSAmJiB0LnVybC5pbmRleE9m
KCdmb28nKSA+IC0xICYmIHQudXJsLmluZGV4T2YoJ2JhcicpID4gLTEsICJDaGVjayBleHRlbmRp
bmcgeyB6b286ICdhJywgcGluZzogJ2InIH0iICk7CisKKwlqUXVlcnkuYWpheFNldHRpbmdzID0g
dG1wOworfSk7CisqLworCit0ZXN0KCJsb2FkKFN0cmluZykiLCBmdW5jdGlvbigpIHsKKwlleHBl
Y3QoMSk7CisJc3RvcCgpOyAvLyBjaGVjayBpZiBsb2FkIGNhbiBiZSBjYWxsZWQgd2l0aCBvbmx5
IHVybAorCWpRdWVyeSgnI2ZpcnN0JykubG9hZCgiZGF0YS9uYW1lLmh0bWwiLCBzdGFydCk7Cit9
KTsKKwordGVzdCgibG9hZCgndXJsIHNlbGVjdG9yJykiLCBmdW5jdGlvbigpIHsKKwlleHBlY3Qo
MSk7CisJc3RvcCgpOyAvLyBjaGVjayBpZiBsb2FkIGNhbiBiZSBjYWxsZWQgd2l0aCBvbmx5IHVy
bAorCWpRdWVyeSgnI2ZpcnN0JykubG9hZCgiZGF0YS90ZXN0My5odG1sIGRpdi51c2VyIiwgZnVu
Y3Rpb24oKXsKKwkJZXF1YWxzKCBqUXVlcnkodGhpcykuY2hpbGRyZW4oImRpdiIpLmxlbmd0aCwg
MiwgIlZlcmlmeSB0aGF0IHNwZWNpZmljIGVsZW1lbnRzIHdlcmUgaW5qZWN0ZWQiICk7CisJCXN0
YXJ0KCk7CisJfSk7Cit9KTsKKwordGVzdCgibG9hZChTdHJpbmcsIEZ1bmN0aW9uKSB3aXRoIGFq
YXhTZXR1cCBvbiBkYXRhVHlwZSBqc29uLCBzZWUgIzIwNDYiLCBmdW5jdGlvbigpIHsKKwlleHBl
Y3QoMSk7CisJc3RvcCgpOworCWpRdWVyeS5hamF4U2V0dXAoeyBkYXRhVHlwZTogImpzb24iIH0p
OworCWpRdWVyeSgiI2ZpcnN0IikuYWpheENvbXBsZXRlKGZ1bmN0aW9uIChlLCB4bWwsIHMpIHsK
KwkJZXF1YWxzKCBzLmRhdGFUeXBlLCAiaHRtbCIsICJWZXJpZnkgdGhlIGxvYWQoKSBkYXRhVHlw
ZSB3YXMgaHRtbCIgKTsKKwkJalF1ZXJ5KCIjZmlyc3QiKS51bmJpbmQoImFqYXhDb21wbGV0ZSIp
OworCQlqUXVlcnkuYWpheFNldHVwKHsgZGF0YVR5cGU6ICIiIH0pOworCQlzdGFydCgpOworCX0p
OworCWpRdWVyeSgnI2ZpcnN0JykubG9hZCgiZGF0YS90ZXN0My5odG1sIik7Cit9KTsKKwordGVz
dCgibG9hZChTdHJpbmcsIEZ1bmN0aW9uKSAtIHNpbXBsZTogaW5qZWN0IHRleHQgaW50byBET00i
LCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMik7CisJc3RvcCgpOworCWpRdWVyeSgnI2ZpcnN0Jyku
bG9hZCh1cmwoImRhdGEvbmFtZS5odG1sIiksIGZ1bmN0aW9uKCkgeworCQlvayggL15FUlJPUi8u
dGVzdChqUXVlcnkoJyNmaXJzdCcpLnRleHQoKSksICdDaGVjayBpZiBjb250ZW50IHdhcyBpbmpl
Y3RlZCBpbnRvIHRoZSBET00nICk7CisJCXN0YXJ0KCk7CisJfSk7Cit9KTsKKwordGVzdCgibG9h
ZChTdHJpbmcsIEZ1bmN0aW9uKSAtIGNoZWNrIHNjcmlwdHMiLCBmdW5jdGlvbigpIHsKKwlleHBl
Y3QoNyk7CisJc3RvcCgpOworCisJdmFyIHZlcmlmeUV2YWx1YXRpb24gPSBmdW5jdGlvbigpIHsK
KwkJZXF1YWxzKCBmb29iYXIsICJiYXIiLCAnQ2hlY2sgaWYgc2NyaXB0IHNyYyB3YXMgZXZhbHVh
dGVkIGFmdGVyIGxvYWQnICk7CisJCWVxdWFscyggalF1ZXJ5KCcjYXAnKS5odG1sKCksICdiYXIn
LCAnQ2hlY2sgaWYgc2NyaXB0IGV2YWx1YXRpb24gaGFzIG1vZGlmaWVkIERPTScpOworCisJCXN0
YXJ0KCk7CisJfTsKKwlqUXVlcnkoJyNmaXJzdCcpLmxvYWQodXJsKCdkYXRhL3Rlc3QuaHRtbCcp
LCBmdW5jdGlvbigpIHsKKwkJb2soIGpRdWVyeSgnI2ZpcnN0JykuaHRtbCgpLm1hdGNoKC9eaHRt
bCB0ZXh0LyksICdDaGVjayBjb250ZW50IGFmdGVyIGxvYWRpbmcgaHRtbCcgKTsKKwkJZXF1YWxz
KCBqUXVlcnkoJyNmb28nKS5odG1sKCksICdmb28nLCAnQ2hlY2sgaWYgc2NyaXB0IGV2YWx1YXRp
b24gaGFzIG1vZGlmaWVkIERPTScpOworCQllcXVhbHMoIHRlc3RGb28sICJmb28iLCAnQ2hlY2sg
aWYgc2NyaXB0IHdhcyBldmFsdWF0ZWQgYWZ0ZXIgbG9hZCcgKTsKKwkJc2V0VGltZW91dCh2ZXJp
ZnlFdmFsdWF0aW9uLCA2MDApOworCX0pOworfSk7CisKK3Rlc3QoImxvYWQoU3RyaW5nLCBGdW5j
dGlvbikgLSBjaGVjayBmaWxlIHdpdGggb25seSBhIHNjcmlwdCB0YWciLCBmdW5jdGlvbigpIHsK
KwlleHBlY3QoMyk7CisJc3RvcCgpOworCisJalF1ZXJ5KCcjZmlyc3QnKS5sb2FkKHVybCgnZGF0
YS90ZXN0Mi5odG1sJyksIGZ1bmN0aW9uKCkgeworCQllcXVhbHMoIGpRdWVyeSgnI2ZvbycpLmh0
bWwoKSwgJ2ZvbycsICdDaGVjayBpZiBzY3JpcHQgZXZhbHVhdGlvbiBoYXMgbW9kaWZpZWQgRE9N
Jyk7CisJCWVxdWFscyggdGVzdEZvbywgImZvbyIsICdDaGVjayBpZiBzY3JpcHQgd2FzIGV2YWx1
YXRlZCBhZnRlciBsb2FkJyApOworCisJCXN0YXJ0KCk7CisJfSk7Cit9KTsKKwordGVzdCgibG9h
ZChTdHJpbmcsIEZ1bmN0aW9uKSAtIGRhdGFGaWx0ZXIgaW4gYWpheFNldHRpbmdzIiwgZnVuY3Rp
b24oKSB7CisJZXhwZWN0KDIpOworCXN0b3AoKTsKKwlqUXVlcnkuYWpheFNldHVwKHsgZGF0YUZp
bHRlcjogZnVuY3Rpb24oKSB7IHJldHVybiAiSGVsbG8gV29ybGQiOyB9IH0pOworCXZhciBkaXYg
PSBqUXVlcnkoIjxkaXYvPiIpLmxvYWQodXJsKCJkYXRhL25hbWUuaHRtbCIpLCBmdW5jdGlvbihy
ZXNwb25zZVRleHQpIHsKKwkJc3RyaWN0RXF1YWwoIGRpdi5odG1sKCksICJIZWxsbyBXb3JsZCIg
LCAiVGVzdCBkaXYgd2FzIGZpbGxlZCB3aXRoIGZpbHRlcmVkIGRhdGEiICk7CisJCXN0cmljdEVx
dWFsKCByZXNwb25zZVRleHQsICJIZWxsbyBXb3JsZCIgLCAiVGVzdCBjYWxsYmFjayByZWNlaXZl
cyBmaWx0ZXJlZCBkYXRhIiApOworCQlqUXVlcnkuYWpheFNldHVwKHsgZGF0YUZpbHRlcjogMCB9
KTsKKwkJc3RhcnQoKTsKKwl9KTsKK30pOworCit0ZXN0KCJsb2FkKFN0cmluZywgT2JqZWN0LCBG
dW5jdGlvbikiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMik7CisJc3RvcCgpOworCisJalF1ZXJ5
KCc8ZGl2IC8+JykubG9hZCh1cmwoJ2RhdGEvcGFyYW1zX2h0bWwucGhwJyksIHsgZm9vOjMsIGJh
cjonb2snIH0sIGZ1bmN0aW9uKCkgeworCQl2YXIgJHBvc3QgPSBqUXVlcnkodGhpcykuZmluZCgn
I3Bvc3QnKTsKKwkJZXF1YWxzKCAkcG9zdC5maW5kKCcjZm9vJykudGV4dCgpLCAnMycsICdDaGVj
ayBpZiBhIGhhc2ggb2YgZGF0YSBpcyBwYXNzZWQgY29ycmVjdGx5Jyk7CisJCWVxdWFscyggJHBv
c3QuZmluZCgnI2JhcicpLnRleHQoKSwgJ29rJywgJ0NoZWNrIGlmIGEgaGFzaCBvZiBkYXRhIGlz
IHBhc3NlZCBjb3JyZWN0bHknKTsKKwkJc3RhcnQoKTsKKwl9KTsKK30pOworCit0ZXN0KCJsb2Fk
KFN0cmluZywgU3RyaW5nLCBGdW5jdGlvbikiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMik7CisJ
c3RvcCgpOworCisJalF1ZXJ5KCc8ZGl2IC8+JykubG9hZCh1cmwoJ2RhdGEvcGFyYW1zX2h0bWwu
cGhwJyksICdmb289MyZiYXI9b2snLCBmdW5jdGlvbigpIHsKKwkJdmFyICRnZXQgPSBqUXVlcnko
dGhpcykuZmluZCgnI2dldCcpOworCQllcXVhbHMoICRnZXQuZmluZCgnI2ZvbycpLnRleHQoKSwg
JzMnLCAnQ2hlY2sgaWYgYSBzdHJpbmcgb2YgZGF0YSBpcyBwYXNzZWQgY29ycmVjdGx5Jyk7CisJ
CWVxdWFscyggJGdldC5maW5kKCcjYmFyJykudGV4dCgpLCAnb2snLCAnQ2hlY2sgaWYgYQkgb2Yg
ZGF0YSBpcyBwYXNzZWQgY29ycmVjdGx5Jyk7CisJCXN0YXJ0KCk7CisJfSk7Cit9KTsKKwordGVz
dCgialF1ZXJ5LmdldChTdHJpbmcsIEZ1bmN0aW9uKSAtIGRhdGEgaW4gYWpheFNldHRpbmdzICgj
ODI3NykiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMSk7CisJc3RvcCgpOworCWpRdWVyeS5hamF4
U2V0dXAoeworCQlkYXRhOiAiaGVsbG93b3JsZCIKKwl9KTsKKwlqUXVlcnkuZ2V0KHVybCgnZGF0
YS9lY2hvUXVlcnkucGhwJyksIGZ1bmN0aW9uKGRhdGEpIHsKKwkJb2soIC9oZWxsb3dvcmxkJC8u
dGVzdCggZGF0YSApLCAnRGF0YSBmcm9tIGFqYXhTZXR0aW5ncyB3YXMgdXNlZCcpOworCQlqUXVl
cnkuYWpheFNldHVwKHsKKwkJCWRhdGE6IG51bGwKKwkJfSk7CisJCXN0YXJ0KCk7CisJfSk7Cit9
KTsKKwordGVzdCgialF1ZXJ5LmdldChTdHJpbmcsIEhhc2gsIEZ1bmN0aW9uKSAtIHBhcnNlIHht
bCBhbmQgdXNlIHRleHQoKSBvbiBub2RlcyIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgyKTsKKwlz
dG9wKCk7CisJalF1ZXJ5LmdldCh1cmwoJ2RhdGEvZGFzaGJvYXJkLnhtbCcpLCBmdW5jdGlvbih4
bWwpIHsKKwkJdmFyIGNvbnRlbnQgPSBbXTsKKwkJalF1ZXJ5KCd0YWInLCB4bWwpLmVhY2goZnVu
Y3Rpb24oKSB7CisJCQljb250ZW50LnB1c2goalF1ZXJ5KHRoaXMpLnRleHQoKSk7CisJCX0pOwor
CQllcXVhbHMoIGNvbnRlbnRbMF0sICdibGFibGEnLCAnQ2hlY2sgZmlyc3QgdGFiJyk7CisJCWVx
dWFscyggY29udGVudFsxXSwgJ2JsdWJsdScsICdDaGVjayBzZWNvbmQgdGFiJyk7CisJCXN0YXJ0
KCk7CisJfSk7Cit9KTsKKwordGVzdCgialF1ZXJ5LmdldFNjcmlwdChTdHJpbmcsIEZ1bmN0aW9u
KSAtIHdpdGggY2FsbGJhY2siLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMyk7CisJc3RvcCgpOwor
CWpRdWVyeS5nZXRTY3JpcHQodXJsKCJkYXRhL3Rlc3QuanMiKSwgZnVuY3Rpb24oIGRhdGEsIF8s
IGpxWEhSICkgeworCQllcXVhbHMoIGZvb2JhciwgImJhciIsICdDaGVjayBpZiBzY3JpcHQgd2Fz
IGV2YWx1YXRlZCcgKTsKKwkJc3RyaWN0RXF1YWwoIGRhdGEsIGpxWEhSLnJlc3BvbnNlVGV4dCwg
IlNhbWUtZG9tYWluIHNjcmlwdCByZXF1ZXN0cyByZXR1cm5zIHRoZSBzb3VyY2Ugb2YgdGhlIHNj
cmlwdCAoIzgwODIpIiApOworCQlzZXRUaW1lb3V0KHN0YXJ0LCAxMDApOworCX0pOworfSk7CisK
K3Rlc3QoImpRdWVyeS5nZXRTY3JpcHQoU3RyaW5nLCBGdW5jdGlvbikgLSBubyBjYWxsYmFjayIs
IGZ1bmN0aW9uKCkgeworCWV4cGVjdCgxKTsKKwlzdG9wKCk7CisJalF1ZXJ5LmdldFNjcmlwdCh1
cmwoImRhdGEvdGVzdC5qcyIpLCBmdW5jdGlvbigpeworCQlzdGFydCgpOworCX0pOworfSk7CisK
K2pRdWVyeS5lYWNoKCBbICJTYW1lIERvbWFpbiIsICJDcm9zcyBEb21haW4iIF0gLCBmdW5jdGlv
biggY3Jvc3NEb21haW4gLCBsYWJlbCApIHsKKworCXRlc3QoImpRdWVyeS5hamF4KCkgLSBKU09O
UCwgIiArIGxhYmVsLCBmdW5jdGlvbigpIHsKKwkJZXhwZWN0KDIwKTsKKworCQl2YXIgY291bnQg
PSAwOworCQlmdW5jdGlvbiBwbHVzKCl7IGlmICggKytjb3VudCA9PSAxOCApIHN0YXJ0KCk7IH0K
KworCQlzdG9wKCk7CisKKwkJalF1ZXJ5LmFqYXgoeworCQkJdXJsOiAiZGF0YS9qc29ucC5waHAi
LAorCQkJZGF0YVR5cGU6ICJqc29ucCIsCisJCQljcm9zc0RvbWFpbjogY3Jvc3NEb21haW4sCisJ
CQlzdWNjZXNzOiBmdW5jdGlvbihkYXRhKXsKKwkJCQlvayggZGF0YS5kYXRhLCAiSlNPTiByZXN1
bHRzIHJldHVybmVkIChHRVQsIG5vIGNhbGxiYWNrKSIgKTsKKwkJCQlwbHVzKCk7CisJCQl9LAor
CQkJZXJyb3I6IGZ1bmN0aW9uKGRhdGEpeworCQkJCW9rKCBmYWxzZSwgIkFqYXggZXJyb3IgSlNP
TiAoR0VULCBubyBjYWxsYmFjaykiICk7CisJCQkJcGx1cygpOworCQkJfQorCQl9KTsKKworCQlq
UXVlcnkuYWpheCh7CisJCQl1cmw6ICJkYXRhL2pzb25wLnBocD9jYWxsYmFjaz0/IiwKKwkJCWRh
dGFUeXBlOiAianNvbnAiLAorCQkJY3Jvc3NEb21haW46IGNyb3NzRG9tYWluLAorCQkJc3VjY2Vz
czogZnVuY3Rpb24oZGF0YSl7CisJCQkJb2soIGRhdGEuZGF0YSwgIkpTT04gcmVzdWx0cyByZXR1
cm5lZCAoR0VULCB1cmwgY2FsbGJhY2spIiApOworCQkJCXBsdXMoKTsKKwkJCX0sCisJCQllcnJv
cjogZnVuY3Rpb24oZGF0YSl7CisJCQkJb2soIGZhbHNlLCAiQWpheCBlcnJvciBKU09OIChHRVQs
IHVybCBjYWxsYmFjaykiICk7CisJCQkJcGx1cygpOworCQkJfQorCQl9KTsKKworCQlqUXVlcnku
YWpheCh7CisJCQl1cmw6ICJkYXRhL2pzb25wLnBocCIsCisJCQlkYXRhVHlwZTogImpzb25wIiwK
KwkJCWNyb3NzRG9tYWluOiBjcm9zc0RvbWFpbiwKKwkJCWRhdGE6ICJjYWxsYmFjaz0/IiwKKwkJ
CXN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpeworCQkJCW9rKCBkYXRhLmRhdGEsICJKU09OIHJlc3Vs
dHMgcmV0dXJuZWQgKEdFVCwgZGF0YSBjYWxsYmFjaykiICk7CisJCQkJcGx1cygpOworCQkJfSwK
KwkJCWVycm9yOiBmdW5jdGlvbihkYXRhKXsKKwkJCQlvayggZmFsc2UsICJBamF4IGVycm9yIEpT
T04gKEdFVCwgZGF0YSBjYWxsYmFjaykiICk7CisJCQkJcGx1cygpOworCQkJfQorCQl9KTsKKwor
CQlqUXVlcnkuYWpheCh7CisJCQl1cmw6ICJkYXRhL2pzb25wLnBocD9jYWxsYmFjaz0/PyIsCisJ
CQlkYXRhVHlwZTogImpzb25wIiwKKwkJCWNyb3NzRG9tYWluOiBjcm9zc0RvbWFpbiwKKwkJCXN1
Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpeworCQkJCW9rKCBkYXRhLmRhdGEsICJKU09OIHJlc3VsdHMg
cmV0dXJuZWQgKEdFVCwgdXJsIGNvbnRleHQtZnJlZSBjYWxsYmFjaykiICk7CisJCQkJcGx1cygp
OworCQkJfSwKKwkJCWVycm9yOiBmdW5jdGlvbihkYXRhKXsKKwkJCQlvayggZmFsc2UsICJBamF4
IGVycm9yIEpTT04gKEdFVCwgdXJsIGNvbnRleHQtZnJlZSBjYWxsYmFjaykiICk7CisJCQkJcGx1
cygpOworCQkJfQorCQl9KTsKKworCQlqUXVlcnkuYWpheCh7CisJCQl1cmw6ICJkYXRhL2pzb25w
LnBocCIsCisJCQlkYXRhVHlwZTogImpzb25wIiwKKwkJCWNyb3NzRG9tYWluOiBjcm9zc0RvbWFp
biwKKwkJCWRhdGE6ICJjYWxsYmFjaz0/PyIsCisJCQlzdWNjZXNzOiBmdW5jdGlvbihkYXRhKXsK
KwkJCQlvayggZGF0YS5kYXRhLCAiSlNPTiByZXN1bHRzIHJldHVybmVkIChHRVQsIGRhdGEgY29u
dGV4dC1mcmVlIGNhbGxiYWNrKSIgKTsKKwkJCQlwbHVzKCk7CisJCQl9LAorCQkJZXJyb3I6IGZ1
bmN0aW9uKGRhdGEpeworCQkJCW9rKCBmYWxzZSwgIkFqYXggZXJyb3IgSlNPTiAoR0VULCBkYXRh
IGNvbnRleHQtZnJlZSBjYWxsYmFjaykiICk7CisJCQkJcGx1cygpOworCQkJfQorCQl9KTsKKwor
CQlqUXVlcnkuYWpheCh7CisJCQl1cmw6ICJkYXRhL2pzb25wLnBocC8/PyIsCisJCQlkYXRhVHlw
ZTogImpzb25wIiwKKwkJCWNyb3NzRG9tYWluOiBjcm9zc0RvbWFpbiwKKwkJCXN1Y2Nlc3M6IGZ1
bmN0aW9uKGRhdGEpeworCQkJCW9rKCBkYXRhLmRhdGEsICJKU09OIHJlc3VsdHMgcmV0dXJuZWQg
KEdFVCwgUkVTVC1saWtlKSIgKTsKKwkJCQlwbHVzKCk7CisJCQl9LAorCQkJZXJyb3I6IGZ1bmN0
aW9uKGRhdGEpeworCQkJCW9rKCBmYWxzZSwgIkFqYXggZXJyb3IgSlNPTiAoR0VULCBSRVNULWxp
a2UpIiApOworCQkJCXBsdXMoKTsKKwkJCX0KKwkJfSk7CisKKwkJalF1ZXJ5LmFqYXgoeworCQkJ
dXJsOiAiZGF0YS9qc29ucC5waHAvPz8/anNvbj0xIiwKKwkJCWRhdGFUeXBlOiAianNvbnAiLAor
CQkJY3Jvc3NEb21haW46IGNyb3NzRG9tYWluLAorCQkJc3VjY2VzczogZnVuY3Rpb24oZGF0YSl7
CisJCQkJc3RyaWN0RXF1YWwoIGpRdWVyeS50eXBlKGRhdGEpLCAiYXJyYXkiLCAiSlNPTiByZXN1
bHRzIHJldHVybmVkIChHRVQsIFJFU1QtbGlrZSB3aXRoIHBhcmFtKSIgKTsKKwkJCQlwbHVzKCk7
CisJCQl9LAorCQkJZXJyb3I6IGZ1bmN0aW9uKGRhdGEpeworCQkJCW9rKCBmYWxzZSwgIkFqYXgg
ZXJyb3IgSlNPTiAoR0VULCBSRVNULWxpa2Ugd2l0aCBwYXJhbSkiICk7CisJCQkJcGx1cygpOwor
CQkJfQorCQl9KTsKKworCQlqUXVlcnkuYWpheCh7CisJCQl1cmw6ICJkYXRhL2pzb25wLnBocCIs
CisJCQlkYXRhVHlwZTogImpzb25wIiwKKwkJCWNyb3NzRG9tYWluOiBjcm9zc0RvbWFpbiwKKwkJ
CWpzb25wOiAiY2FsbGJhY2siLAorCQkJc3VjY2VzczogZnVuY3Rpb24oZGF0YSl7CisJCQkJb2so
IGRhdGEuZGF0YSwgIkpTT04gcmVzdWx0cyByZXR1cm5lZCAoR0VULCBkYXRhIG9iaiBjYWxsYmFj
aykiICk7CisJCQkJcGx1cygpOworCQkJfSwKKwkJCWVycm9yOiBmdW5jdGlvbihkYXRhKXsKKwkJ
CQlvayggZmFsc2UsICJBamF4IGVycm9yIEpTT04gKEdFVCwgZGF0YSBvYmogY2FsbGJhY2spIiAp
OworCQkJCXBsdXMoKTsKKwkJCX0KKwkJfSk7CisKKwkJd2luZG93Lmpzb25wUmVzdWx0cyA9IGZ1
bmN0aW9uKGRhdGEpIHsKKwkJCW9rKCBkYXRhLmRhdGEsICJKU09OIHJlc3VsdHMgcmV0dXJuZWQg
KEdFVCwgY3VzdG9tIGNhbGxiYWNrIGZ1bmN0aW9uKSIgKTsKKwkJCXdpbmRvdy5qc29ucFJlc3Vs
dHMgPSB1bmRlZmluZWQ7CisJCQlwbHVzKCk7CisJCX07CisKKwkJalF1ZXJ5LmFqYXgoeworCQkJ
dXJsOiAiZGF0YS9qc29ucC5waHAiLAorCQkJZGF0YVR5cGU6ICJqc29ucCIsCisJCQljcm9zc0Rv
bWFpbjogY3Jvc3NEb21haW4sCisJCQlqc29ucENhbGxiYWNrOiAianNvbnBSZXN1bHRzIiwKKwkJ
CXN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpeworCQkJCW9rKCBkYXRhLmRhdGEsICJKU09OIHJlc3Vs
dHMgcmV0dXJuZWQgKEdFVCwgY3VzdG9tIGNhbGxiYWNrIG5hbWUpIiApOworCQkJCXBsdXMoKTsK
KwkJCX0sCisJCQllcnJvcjogZnVuY3Rpb24oZGF0YSl7CisJCQkJb2soIGZhbHNlLCAiQWpheCBl
cnJvciBKU09OIChHRVQsIGN1c3RvbSBjYWxsYmFjayBuYW1lKSIgKTsKKwkJCQlwbHVzKCk7CisJ
CQl9CisJCX0pOworCisJCWpRdWVyeS5hamF4KHsKKwkJCXVybDogImRhdGEvanNvbnAucGhwIiwK
KwkJCWRhdGFUeXBlOiAianNvbnAiLAorCQkJY3Jvc3NEb21haW46IGNyb3NzRG9tYWluLAorCQkJ
anNvbnBDYWxsYmFjazogImZ1bmN0aW9uVG9DbGVhblVwIiwKKwkJCXN1Y2Nlc3M6IGZ1bmN0aW9u
KGRhdGEpeworCQkJCW9rKCBkYXRhLmRhdGEsICJKU09OIHJlc3VsdHMgcmV0dXJuZWQgKEdFVCwg
Y3VzdG9tIGNhbGxiYWNrIG5hbWUgdG8gYmUgY2xlYW5lZCB1cCkiICk7CisJCQkJc3RyaWN0RXF1
YWwoIHdpbmRvdy5mdW5jdGlvblRvQ2xlYW5VcCwgdW5kZWZpbmVkLCAiQ2FsbGJhY2sgd2FzIHJl
bW92ZWQgKEdFVCwgY3VzdG9tIGNhbGxiYWNrIG5hbWUgdG8gYmUgY2xlYW5lZCB1cCkiICk7CisJ
CQkJcGx1cygpOworCQkJCXZhciB4aHI7CisJCQkJalF1ZXJ5LmFqYXgoeworCQkJCQl1cmw6ICJk
YXRhL2pzb25wLnBocCIsCisJCQkJCWRhdGFUeXBlOiAianNvbnAiLAorCQkJCQljcm9zc0RvbWFp
bjogY3Jvc3NEb21haW4sCisJCQkJCWpzb25wQ2FsbGJhY2s6ICJmdW5jdGlvblRvQ2xlYW5VcCIs
CisJCQkJCWJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCBqcVhIUiApIHsKKwkJCQkJCXhociA9IGpxWEhS
OworCQkJCQkJcmV0dXJuIGZhbHNlOworCQkJCQl9CisJCQkJfSk7CisJCQkJeGhyLmVycm9yKGZ1
bmN0aW9uKCkgeworCQkJCQlvayggdHJ1ZSwgIkFqYXggZXJyb3IgSlNPTiAoR0VULCBjdXN0b20g
Y2FsbGJhY2sgbmFtZSB0byBiZSBjbGVhbmVkIHVwKSIgKTsKKwkJCQkJc3RyaWN0RXF1YWwoIHdp
bmRvdy5mdW5jdGlvblRvQ2xlYW5VcCwgdW5kZWZpbmVkLCAiQ2FsbGJhY2sgd2FzIHJlbW92ZWQg
YWZ0ZXIgZWFybHkgYWJvcnQgKEdFVCwgY3VzdG9tIGNhbGxiYWNrIG5hbWUgdG8gYmUgY2xlYW5l
ZCB1cCkiICk7CisJCQkJCXBsdXMoKTsKKwkJCQl9KTsKKwkJCX0sCisJCQllcnJvcjogZnVuY3Rp
b24oZGF0YSl7CisJCQkJb2soIGZhbHNlLCAiQWpheCBlcnJvciBKU09OIChHRVQsIGN1c3RvbSBj
YWxsYmFjayBuYW1lIHRvIGJlIGNsZWFuZWQgdXApIiApOworCQkJCXBsdXMoKTsKKwkJCX0KKwkJ
fSk7CisKKwkJalF1ZXJ5LmFqYXgoeworCQkJdHlwZTogIlBPU1QiLAorCQkJdXJsOiAiZGF0YS9q
c29ucC5waHAiLAorCQkJZGF0YVR5cGU6ICJqc29ucCIsCisJCQljcm9zc0RvbWFpbjogY3Jvc3NE
b21haW4sCisJCQlzdWNjZXNzOiBmdW5jdGlvbihkYXRhKXsKKwkJCQlvayggZGF0YS5kYXRhLCAi
SlNPTiByZXN1bHRzIHJldHVybmVkIChQT1NULCBubyBjYWxsYmFjaykiICk7CisJCQkJcGx1cygp
OworCQkJfSwKKwkJCWVycm9yOiBmdW5jdGlvbihkYXRhKXsKKwkJCQlvayggZmFsc2UsICJBamF4
IGVycm9yIEpTT04gKEdFVCwgZGF0YSBvYmogY2FsbGJhY2spIiApOworCQkJCXBsdXMoKTsKKwkJ
CX0KKwkJfSk7CisKKwkJalF1ZXJ5LmFqYXgoeworCQkJdHlwZTogIlBPU1QiLAorCQkJdXJsOiAi
ZGF0YS9qc29ucC5waHAiLAorCQkJZGF0YTogImNhbGxiYWNrPT8iLAorCQkJZGF0YVR5cGU6ICJq
c29ucCIsCisJCQljcm9zc0RvbWFpbjogY3Jvc3NEb21haW4sCisJCQlzdWNjZXNzOiBmdW5jdGlv
bihkYXRhKXsKKwkJCQlvayggZGF0YS5kYXRhLCAiSlNPTiByZXN1bHRzIHJldHVybmVkIChQT1NU
LCBkYXRhIGNhbGxiYWNrKSIgKTsKKwkJCQlwbHVzKCk7CisJCQl9LAorCQkJZXJyb3I6IGZ1bmN0
aW9uKGRhdGEpeworCQkJCW9rKCBmYWxzZSwgIkFqYXggZXJyb3IgSlNPTiAoUE9TVCwgZGF0YSBj
YWxsYmFjaykiICk7CisJCQkJcGx1cygpOworCQkJfQorCQl9KTsKKworCQlqUXVlcnkuYWpheCh7
CisJCQl0eXBlOiAiUE9TVCIsCisJCQl1cmw6ICJkYXRhL2pzb25wLnBocCIsCisJCQlqc29ucDog
ImNhbGxiYWNrIiwKKwkJCWRhdGFUeXBlOiAianNvbnAiLAorCQkJY3Jvc3NEb21haW46IGNyb3Nz
RG9tYWluLAorCQkJc3VjY2VzczogZnVuY3Rpb24oZGF0YSl7CisJCQkJb2soIGRhdGEuZGF0YSwg
IkpTT04gcmVzdWx0cyByZXR1cm5lZCAoUE9TVCwgZGF0YSBvYmogY2FsbGJhY2spIiApOworCQkJ
CXBsdXMoKTsKKwkJCX0sCisJCQllcnJvcjogZnVuY3Rpb24oZGF0YSl7CisJCQkJb2soIGZhbHNl
LCAiQWpheCBlcnJvciBKU09OIChQT1NULCBkYXRhIG9iaiBjYWxsYmFjaykiICk7CisJCQkJcGx1
cygpOworCQkJfQorCQl9KTsKKworCQkvLyM3NTc4CisJCWpRdWVyeS5hamF4KHsKKwkJCXVybDog
ImRhdGEvanNvbnAucGhwIiwKKwkJCWRhdGFUeXBlOiAianNvbnAiLAorCQkJY3Jvc3NEb21haW46
IGNyb3NzRG9tYWluLAorCQkJYmVmb3JlU2VuZDogZnVuY3Rpb24oKXsKKwkJCQlzdHJpY3RFcXVh
bCggdGhpcy5jYWNoZSwgZmFsc2UsICJjYWNoZSBtdXN0IGJlIGZhbHNlIG9uIEpTT04gcmVxdWVz
dCIgKTsKKwkJCQlwbHVzKCk7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9KTsKKworCQlq
UXVlcnkuYWpheCh7CisJCQl1cmw6ICJkYXRhL2pzb25wLnBocD9jYWxsYmFjaz1YWFgiLAorCQkJ
ZGF0YVR5cGU6ICJqc29ucCIsCisJCQlqc29ucDogZmFsc2UsCisJCQlqc29ucENhbGxiYWNrOiAi
WFhYIiwKKwkJCWNyb3NzRG9tYWluOiBjcm9zc0RvbWFpbiwKKwkJCWJlZm9yZVNlbmQ6IGZ1bmN0
aW9uKCkgeworCQkJCW9rKCAvXmRhdGFcL2pzb25wLnBocFw/Y2FsbGJhY2s9WFhYJl89XGQrJC8u
dGVzdCggdGhpcy51cmwgKSAsCisJCQkJCSJUaGUgVVJMIHdhc24ndCBtZXNzZWQgd2l0aCAoR0VU
LCBjdXN0b20gY2FsbGJhY2sgbmFtZSB3aXRoIG5vIHVybCBtYW5pcHVsYXRpb24pIiApOworCQkJ
CXBsdXMoKTsKKwkJCX0sCisJCQlzdWNjZXNzOiBmdW5jdGlvbihkYXRhKXsKKwkJCQlvayggZGF0
YS5kYXRhLCAiSlNPTiByZXN1bHRzIHJldHVybmVkIChHRVQsIGN1c3RvbSBjYWxsYmFjayBuYW1l
IHdpdGggbm8gdXJsIG1hbmlwdWxhdGlvbikiICk7CisJCQkJcGx1cygpOworCQkJfSwKKwkJCWVy
cm9yOiBmdW5jdGlvbihkYXRhKXsKKwkJCQlvayggZmFsc2UsICJBamF4IGVycm9yIEpTT04gKEdF
VCwgY3VzdG9tIGNhbGxiYWNrIG5hbWUgd2l0aCBubyB1cmwgbWFuaXB1bGF0aW9uKSIgKTsKKwkJ
CQlwbHVzKCk7CisJCQl9CisJCX0pOworCisJfSk7Cit9KTsKKwordGVzdCgialF1ZXJ5LmFqYXgo
KSAtIHNjcmlwdCwgUmVtb3RlIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDIpOworCisJdmFyIGJh
c2UgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5yZXBsYWNlKC9bXlwvXSokLywgIiIpOworCisJc3Rv
cCgpOworCisJalF1ZXJ5LmFqYXgoeworCQl1cmw6IGJhc2UgKyAiZGF0YS90ZXN0LmpzIiwKKwkJ
ZGF0YVR5cGU6ICJzY3JpcHQiLAorCQlzdWNjZXNzOiBmdW5jdGlvbihkYXRhKXsKKwkJCW9rKCBm
b29iYXIsICJTY3JpcHQgcmVzdWx0cyByZXR1cm5lZCAoR0VULCBubyBjYWxsYmFjaykiICk7CisJ
CQlzdGFydCgpOworCQl9CisJfSk7Cit9KTsKKwordGVzdCgialF1ZXJ5LmFqYXgoKSAtIHNjcmlw
dCwgUmVtb3RlIHdpdGggUE9TVCIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgzKTsKKworCXZhciBi
YXNlID0gd2luZG93LmxvY2F0aW9uLmhyZWYucmVwbGFjZSgvW15cL10qJC8sICIiKTsKKworCXN0
b3AoKTsKKworCWpRdWVyeS5hamF4KHsKKwkJdXJsOiBiYXNlICsgImRhdGEvdGVzdC5qcyIsCisJ
CXR5cGU6ICJQT1NUIiwKKwkJZGF0YVR5cGU6ICJzY3JpcHQiLAorCQlzdWNjZXNzOiBmdW5jdGlv
bihkYXRhLCBzdGF0dXMpeworCQkJb2soIGZvb2JhciwgIlNjcmlwdCByZXN1bHRzIHJldHVybmVk
IChQT1NULCBubyBjYWxsYmFjaykiICk7CisJCQllcXVhbHMoIHN0YXR1cywgInN1Y2Nlc3MiLCAi
U2NyaXB0IHJlc3VsdHMgcmV0dXJuZWQgKFBPU1QsIG5vIGNhbGxiYWNrKSIgKTsKKwkJCXN0YXJ0
KCk7CisJCX0sCisJCWVycm9yOiBmdW5jdGlvbih4aHIpIHsKKwkJCW9rKCBmYWxzZSwgImFqYXgg
ZXJyb3IsIHN0YXR1cyBjb2RlOiAiICsgeGhyLnN0YXR1cyApOworCQkJc3RhcnQoKTsKKwkJfQor
CX0pOworfSk7CisKK3Rlc3QoImpRdWVyeS5hamF4KCkgLSBzY3JpcHQsIFJlbW90ZSB3aXRoIHNj
aGVtZS1sZXNzIFVSTCIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgyKTsKKworCXZhciBiYXNlID0g
d2luZG93LmxvY2F0aW9uLmhyZWYucmVwbGFjZSgvW15cL10qJC8sICIiKTsKKwliYXNlID0gYmFz
ZS5yZXBsYWNlKC9eLio/XC9cLy8sICIvLyIpOworCisJc3RvcCgpOworCisJalF1ZXJ5LmFqYXgo
eworCQl1cmw6IGJhc2UgKyAiZGF0YS90ZXN0LmpzIiwKKwkJZGF0YVR5cGU6ICJzY3JpcHQiLAor
CQlzdWNjZXNzOiBmdW5jdGlvbihkYXRhKXsKKwkJCW9rKCBmb29iYXIsICJTY3JpcHQgcmVzdWx0
cyByZXR1cm5lZCAoR0VULCBubyBjYWxsYmFjaykiICk7CisJCQlzdGFydCgpOworCQl9CisJfSk7
Cit9KTsKKwordGVzdCgialF1ZXJ5LmFqYXgoKSAtIG1hbGZvcm1lZCBKU09OIiwgZnVuY3Rpb24o
KSB7CisJZXhwZWN0KDIpOworCisJc3RvcCgpOworCisJalF1ZXJ5LmFqYXgoeworCQl1cmw6ICJk
YXRhL2JhZGpzb24uanMiLAorCQlkYXRhVHlwZTogImpzb24iLAorCQlzdWNjZXNzOiBmdW5jdGlv
bigpeworCQkJb2soIGZhbHNlLCAiU3VjY2Vzcy4iICk7CisJCQlzdGFydCgpOworCQl9LAorCQll
cnJvcjogZnVuY3Rpb24oeGhyLCBtc2csIGRldGFpbGVkTXNnKSB7CisJCQllcXVhbHMoICJwYXJz
ZXJlcnJvciIsIG1zZywgIkEgcGFyc2UgZXJyb3Igb2NjdXJyZWQuIiApOworCQkJb2soIC9eSW52
YWxpZCBKU09OLy50ZXN0KGRldGFpbGVkTXNnKSwgIkRldGFpbGVkIHBhcnNlcmVycm9yIG1lc3Nh
Z2UgcHJvdmlkZWQiICk7CisJICAJCXN0YXJ0KCk7CisJCX0KKwl9KTsKK30pOworCit0ZXN0KCJq
UXVlcnkuYWpheCgpIC0gc2NyaXB0IGJ5IGNvbnRlbnQtdHlwZSIsIGZ1bmN0aW9uKCkgeworCWV4
cGVjdCgyKTsKKworCXN0b3AoKTsKKworCWpRdWVyeS53aGVuKAorCisJCWpRdWVyeS5hamF4KHsK
KwkJCXVybDogImRhdGEvc2NyaXB0LnBocCIsCisJCQlkYXRhOiB7IGhlYWRlcjogInNjcmlwdCIg
fQorCQl9KSwKKworCQlqUXVlcnkuYWpheCh7CisJCQl1cmw6ICJkYXRhL3NjcmlwdC5waHAiLAor
CQkJZGF0YTogeyBoZWFkZXI6ICJlY21hIiB9CisJCX0pCisKKwkpLnRoZW4oIHN0YXJ0LCBzdGFy
dCApOworfSk7CisKK3Rlc3QoImpRdWVyeS5hamF4KCkgLSBqc29uIGJ5IGNvbnRlbnQtdHlwZSIs
IGZ1bmN0aW9uKCkgeworCWV4cGVjdCg1KTsKKworCXN0b3AoKTsKKworCWpRdWVyeS5hamF4KHsK
KwkJdXJsOiAiZGF0YS9qc29uLnBocCIsCisJCWRhdGE6IHsgaGVhZGVyOiAianNvbiIsIGpzb246
ICJhcnJheSIgfSwKKwkJc3VjY2VzczogZnVuY3Rpb24oIGpzb24gKSB7CisJICAJCW9rKCBqc29u
Lmxlbmd0aCA+PSAyLCAiQ2hlY2sgbGVuZ3RoIik7CisJICAJCWVxdWFscygganNvblswXS5uYW1l
LCAnSm9obicsICdDaGVjayBKU09OOiBmaXJzdCwgbmFtZScgKTsKKwkgIAkJZXF1YWxzKCBqc29u
WzBdLmFnZSwgMjEsICdDaGVjayBKU09OOiBmaXJzdCwgYWdlJyApOworCSAgCQllcXVhbHMoIGpz
b25bMV0ubmFtZSwgJ1BldGVyJywgJ0NoZWNrIEpTT046IHNlY29uZCwgbmFtZScgKTsKKwkgIAkJ
ZXF1YWxzKCBqc29uWzFdLmFnZSwgMjUsICdDaGVjayBKU09OOiBzZWNvbmQsIGFnZScgKTsKKwkg
IAkJc3RhcnQoKTsKKwkJfQorCX0pOworfSk7CisKK3Rlc3QoImpRdWVyeS5hamF4KCkgLSBqc29u
IGJ5IGNvbnRlbnQtdHlwZSBkaXNhYmxlZCB3aXRoIG9wdGlvbnMiLCBmdW5jdGlvbigpIHsKKwll
eHBlY3QoNik7CisKKwlzdG9wKCk7CisKKwlqUXVlcnkuYWpheCh7CisJCXVybDogdXJsKCJkYXRh
L2pzb24ucGhwIiksCisJCWRhdGE6IHsgaGVhZGVyOiAianNvbiIsIGpzb246ICJhcnJheSIgfSwK
KwkJY29udGVudHM6IHsKKwkJCWpzb246IGZhbHNlCisJCX0sCisJCXN1Y2Nlc3M6IGZ1bmN0aW9u
KCB0ZXh0ICkgeworCQkJZXF1YWxzKCB0eXBlb2YgdGV4dCAsICJzdHJpbmciICwgImpzb24gd2Fz
bid0IGF1dG8tZGV0ZXJtaW5lZCIgKTsKKwkJCXZhciBqc29uID0galF1ZXJ5LnBhcnNlSlNPTigg
dGV4dCApOworCSAgCQlvaygganNvbi5sZW5ndGggPj0gMiwgIkNoZWNrIGxlbmd0aCIpOworCSAg
CQllcXVhbHMoIGpzb25bMF0ubmFtZSwgJ0pvaG4nLCAnQ2hlY2sgSlNPTjogZmlyc3QsIG5hbWUn
ICk7CisJICAJCWVxdWFscygganNvblswXS5hZ2UsIDIxLCAnQ2hlY2sgSlNPTjogZmlyc3QsIGFn
ZScgKTsKKwkgIAkJZXF1YWxzKCBqc29uWzFdLm5hbWUsICdQZXRlcicsICdDaGVjayBKU09OOiBz
ZWNvbmQsIG5hbWUnICk7CisJICAJCWVxdWFscygganNvblsxXS5hZ2UsIDI1LCAnQ2hlY2sgSlNP
Tjogc2Vjb25kLCBhZ2UnICk7CisJICAJCXN0YXJ0KCk7CisJCX0KKwl9KTsKK30pOworCit0ZXN0
KCJqUXVlcnkuZ2V0SlNPTihTdHJpbmcsIEhhc2gsIEZ1bmN0aW9uKSAtIEpTT04gYXJyYXkiLCBm
dW5jdGlvbigpIHsKKwlleHBlY3QoNSk7CisJc3RvcCgpOworCWpRdWVyeS5nZXRKU09OKHVybCgi
ZGF0YS9qc29uLnBocCIpLCB7anNvbjogImFycmF5In0sIGZ1bmN0aW9uKGpzb24pIHsKKwkgIG9r
KCBqc29uLmxlbmd0aCA+PSAyLCAiQ2hlY2sgbGVuZ3RoIik7CisJICBlcXVhbHMoIGpzb25bMF0u
bmFtZSwgJ0pvaG4nLCAnQ2hlY2sgSlNPTjogZmlyc3QsIG5hbWUnICk7CisJICBlcXVhbHMoIGpz
b25bMF0uYWdlLCAyMSwgJ0NoZWNrIEpTT046IGZpcnN0LCBhZ2UnICk7CisJICBlcXVhbHMoIGpz
b25bMV0ubmFtZSwgJ1BldGVyJywgJ0NoZWNrIEpTT046IHNlY29uZCwgbmFtZScgKTsKKwkgIGVx
dWFscygganNvblsxXS5hZ2UsIDI1LCAnQ2hlY2sgSlNPTjogc2Vjb25kLCBhZ2UnICk7CisJICBz
dGFydCgpOworCX0pOworfSk7CisKK3Rlc3QoImpRdWVyeS5nZXRKU09OKFN0cmluZywgRnVuY3Rp
b24pIC0gSlNPTiBvYmplY3QiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMik7CisJc3RvcCgpOwor
CWpRdWVyeS5nZXRKU09OKHVybCgiZGF0YS9qc29uLnBocCIpLCBmdW5jdGlvbihqc29uKSB7CisJ
ICBpZiAoanNvbiAmJiBqc29uLmRhdGEpIHsKKwkJICBlcXVhbHMoIGpzb24uZGF0YS5sYW5nLCAn
ZW4nLCAnQ2hlY2sgSlNPTjogbGFuZycgKTsKKwkJICBlcXVhbHMoIGpzb24uZGF0YS5sZW5ndGgs
IDI1LCAnQ2hlY2sgSlNPTjogbGVuZ3RoJyApOworCSAgfQorCSAgc3RhcnQoKTsKKwl9KTsKK30p
OworCit0ZXN0KCJqUXVlcnkuZ2V0SlNPTiAtIFVzaW5nIE5hdGl2ZSBKU09OIiwgZnVuY3Rpb24o
KSB7CisJZXhwZWN0KDIpOworCisJdmFyIG9sZCA9IHdpbmRvdy5KU09OOworCUpTT04gPSB7CisJ
CXBhcnNlOiBmdW5jdGlvbihzdHIpeworCQkJb2soIHRydWUsICJWZXJpZnlpbmcgdGhhdCBwYXJz
ZSBtZXRob2Qgd2FzIHJ1biIgKTsKKwkJCXJldHVybiB0cnVlOworCQl9CisJfTsKKworCXN0b3Ao
KTsKKwlqUXVlcnkuZ2V0SlNPTih1cmwoImRhdGEvanNvbi5waHAiKSwgZnVuY3Rpb24oanNvbikg
eworCQl3aW5kb3cuSlNPTiA9IG9sZDsKKwkJZXF1YWxzKCBqc29uLCB0cnVlLCAiVmVyaWZ5aW5n
IHJldHVybiB2YWx1ZSIgKTsKKwkJc3RhcnQoKTsKKwl9KTsKK30pOworCit0ZXN0KCJqUXVlcnku
Z2V0SlNPTihTdHJpbmcsIEZ1bmN0aW9uKSAtIEpTT04gb2JqZWN0IHdpdGggYWJzb2x1dGUgdXJs
IHRvIGxvY2FsIGNvbnRlbnQiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMik7CisKKwl2YXIgYmFz
ZSA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnJlcGxhY2UoL1teXC9dKiQvLCAiIik7CisKKwlzdG9w
KCk7CisJalF1ZXJ5LmdldEpTT04odXJsKGJhc2UgKyAiZGF0YS9qc29uLnBocCIpLCBmdW5jdGlv
bihqc29uKSB7CisJICBlcXVhbHMoIGpzb24uZGF0YS5sYW5nLCAnZW4nLCAnQ2hlY2sgSlNPTjog
bGFuZycgKTsKKwkgIGVxdWFscygganNvbi5kYXRhLmxlbmd0aCwgMjUsICdDaGVjayBKU09OOiBs
ZW5ndGgnICk7CisJICBzdGFydCgpOworCX0pOworfSk7CisKK3Rlc3QoImpRdWVyeS5wb3N0IC0g
ZGF0YSIsIDMsIGZ1bmN0aW9uKCkgeworCXN0b3AoKTsKKworCWpRdWVyeS53aGVuKAorCQlqUXVl
cnkucG9zdCggdXJsKCAiZGF0YS9uYW1lLnBocCIgKSwgeyB4bWw6ICI1LTIiLCBsZW5ndGg6IDMg
fSwgZnVuY3Rpb24oIHhtbCApIHsKKwkJCWpRdWVyeSggJ21hdGgnLCB4bWwgKS5lYWNoKCBmdW5j
dGlvbigpIHsKKwkJCQllcXVhbHMoIGpRdWVyeSggJ2NhbGN1bGF0aW9uJywgdGhpcyApLnRleHQo
KSwgJzUtMicsICdDaGVjayBmb3IgWE1MJyApOworCQkJCWVxdWFscyggalF1ZXJ5KCAncmVzdWx0
JywgdGhpcyApLnRleHQoKSwgJzMnLCAnQ2hlY2sgZm9yIFhNTCcgKTsKKwkJCX0pOworCQl9KSwK
KworCQlqUXVlcnkuYWpheCh7CisJCQl1cmw6IHVybCgnZGF0YS9lY2hvRGF0YS5waHAnKSwKKwkJ
CXR5cGU6ICJQT1NUIiwKKwkJCWRhdGE6IHsKKwkJCQkndGVzdCc6IHsKKwkJCQkJJ2xlbmd0aCc6
IDcsCisJCQkJCQknZm9vJzogJ2JhcicKKwkJCQl9CisJCQl9LAorCQkJc3VjY2VzczogZnVuY3Rp
b24oIGRhdGEgKSB7CisJCQkJc3RyaWN0RXF1YWwoIGRhdGEsICd0ZXN0JTVCbGVuZ3RoJTVEPTcm
dGVzdCU1QmZvbyU1RD1iYXInLCAnQ2hlY2sgaWYgYSBzdWItb2JqZWN0IHdpdGggYSBsZW5ndGgg
cGFyYW0gaXMgc2VyaWFsaXplZCBjb3JyZWN0bHknKTsKKwkJCX0KKwkJfSkKKwkpLnRoZW4oIHN0
YXJ0LCBzdGFydCApOworCit9KTsKKwordGVzdCgialF1ZXJ5LnBvc3QoU3RyaW5nLCBIYXNoLCBG
dW5jdGlvbikgLSBzaW1wbGUgd2l0aCB4bWwiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoNCk7CisJ
c3RvcCgpOworCXZhciBkb25lID0gMDsKKworCWpRdWVyeS5wb3N0KHVybCgiZGF0YS9uYW1lLnBo
cCIpLCB7eG1sOiAiNS0yIn0sIGZ1bmN0aW9uKHhtbCl7CisJICBqUXVlcnkoJ21hdGgnLCB4bWwp
LmVhY2goZnVuY3Rpb24oKSB7CisJCQllcXVhbHMoIGpRdWVyeSgnY2FsY3VsYXRpb24nLCB0aGlz
KS50ZXh0KCksICc1LTInLCAnQ2hlY2sgZm9yIFhNTCcgKTsKKwkJCWVxdWFscyggalF1ZXJ5KCdy
ZXN1bHQnLCB0aGlzKS50ZXh0KCksICczJywgJ0NoZWNrIGZvciBYTUwnICk7CisJCSB9KTsKKwkg
IGlmICggKytkb25lID09PSAyICkgc3RhcnQoKTsKKwl9KTsKKworCWpRdWVyeS5wb3N0KHVybCgi
ZGF0YS9uYW1lLnBocD94bWw9NS0yIiksIHt9LCBmdW5jdGlvbih4bWwpeworCSAgalF1ZXJ5KCdt
YXRoJywgeG1sKS5lYWNoKGZ1bmN0aW9uKCkgeworCQkJZXF1YWxzKCBqUXVlcnkoJ2NhbGN1bGF0
aW9uJywgdGhpcykudGV4dCgpLCAnNS0yJywgJ0NoZWNrIGZvciBYTUwnICk7CisJCQllcXVhbHMo
IGpRdWVyeSgncmVzdWx0JywgdGhpcykudGV4dCgpLCAnMycsICdDaGVjayBmb3IgWE1MJyApOwor
CQkgfSk7CisJICBpZiAoICsrZG9uZSA9PT0gMiApIHN0YXJ0KCk7CisJfSk7Cit9KTsKKwordGVz
dCgialF1ZXJ5LmFqYXhTZXR1cCh7dGltZW91dDogTnVtYmVyfSkgLSB3aXRoIGdsb2JhbCB0aW1l
b3V0IiwgZnVuY3Rpb24oKSB7CisJc3RvcCgpOworCisJdmFyIHBhc3NlZCA9IDA7CisKKwlqUXVl
cnkuYWpheFNldHVwKHt0aW1lb3V0OiAxMDAwfSk7CisKKwl2YXIgcGFzcyA9IGZ1bmN0aW9uKCkg
eworCQlwYXNzZWQrKzsKKwkJaWYgKCBwYXNzZWQgPT0gMiApIHsKKwkJCW9rKCB0cnVlLCAnQ2hl
Y2sgbG9jYWwgYW5kIGdsb2JhbCBjYWxsYmFja3MgYWZ0ZXIgdGltZW91dCcgKTsKKwkJCWpRdWVy
eSgnI21haW4nKS51bmJpbmQoImFqYXhFcnJvciIpOworCQkJc3RhcnQoKTsKKwkJfQorCX07CisK
Kwl2YXIgZmFpbCA9IGZ1bmN0aW9uKGEsYixjKSB7CisJCW9rKCBmYWxzZSwgJ0NoZWNrIGZvciB0
aW1lb3V0IGZhaWxlZCAnICsgYSArICcgJyArIGIgKTsKKwkJc3RhcnQoKTsKKwl9OworCisJalF1
ZXJ5KCcjbWFpbicpLmFqYXhFcnJvcihwYXNzKTsKKworCWpRdWVyeS5hamF4KHsKKwkgIHR5cGU6
ICJHRVQiLAorCSAgdXJsOiB1cmwoImRhdGEvbmFtZS5waHA/d2FpdD01IiksCisJICBlcnJvcjog
cGFzcywKKwkgIHN1Y2Nlc3M6IGZhaWwKKwl9KTsKKworCS8vIHJlc2V0IHRpbWVvdXQKKwlqUXVl
cnkuYWpheFNldHVwKHt0aW1lb3V0OiAwfSk7Cit9KTsKKwordGVzdCgialF1ZXJ5LmFqYXhTZXR1
cCh7dGltZW91dDogTnVtYmVyfSkgd2l0aCBsb2NhbHRpbWVvdXQiLCBmdW5jdGlvbigpIHsKKwlz
dG9wKCk7CisJalF1ZXJ5LmFqYXhTZXR1cCh7dGltZW91dDogNTB9KTsKKworCWpRdWVyeS5hamF4
KHsKKwkgIHR5cGU6ICJHRVQiLAorCSAgdGltZW91dDogMTUwMDAsCisJICB1cmw6IHVybCgiZGF0
YS9uYW1lLnBocD93YWl0PTEiKSwKKwkgIGVycm9yOiBmdW5jdGlvbigpIHsKKwkJICAgb2soIGZh
bHNlLCAnQ2hlY2sgZm9yIGxvY2FsIHRpbWVvdXQgZmFpbGVkJyApOworCQkgICBzdGFydCgpOwor
CSAgfSwKKwkgIHN1Y2Nlc3M6IGZ1bmN0aW9uKCkgeworCQlvayggdHJ1ZSwgJ0NoZWNrIGZvciBs
b2NhbCB0aW1lb3V0JyApOworCQlzdGFydCgpOworCSAgfQorCX0pOworCisJLy8gcmVzZXQgdGlt
ZW91dAorCWpRdWVyeS5hamF4U2V0dXAoe3RpbWVvdXQ6IDB9KTsKK30pOworCit0ZXN0KCJqUXVl
cnkuYWpheCAtIHNpbXBsZSBnZXQiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMSk7CisJc3RvcCgp
OworCWpRdWVyeS5hamF4KHsKKwkgIHR5cGU6ICJHRVQiLAorCSAgdXJsOiB1cmwoImRhdGEvbmFt
ZS5waHA/bmFtZT1mb28iKSwKKwkgIHN1Y2Nlc3M6IGZ1bmN0aW9uKG1zZyl7CisJCWVxdWFscygg
bXNnLCAnYmFyJywgJ0NoZWNrIGZvciBHRVQnICk7CisJCXN0YXJ0KCk7CisJICB9CisJfSk7Cit9
KTsKKwordGVzdCgialF1ZXJ5LmFqYXggLSBzaW1wbGUgcG9zdCIsIGZ1bmN0aW9uKCkgeworCWV4
cGVjdCgxKTsKKwlzdG9wKCk7CisJalF1ZXJ5LmFqYXgoeworCSAgdHlwZTogIlBPU1QiLAorCSAg
dXJsOiB1cmwoImRhdGEvbmFtZS5waHAiKSwKKwkgIGRhdGE6ICJuYW1lPXBldGVyIiwKKwkgIHN1
Y2Nlc3M6IGZ1bmN0aW9uKG1zZyl7CisJCWVxdWFscyggbXNnLCAncGFuJywgJ0NoZWNrIGZvciBQ
T1NUJyApOworCQlzdGFydCgpOworCSAgfQorCX0pOworfSk7CisKK3Rlc3QoImFqYXhTZXR1cCgp
IiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDEpOworCXN0b3AoKTsKKwlqUXVlcnkuYWpheFNldHVw
KHsKKwkJdXJsOiB1cmwoImRhdGEvbmFtZS5waHA/bmFtZT1mb28iKSwKKwkJc3VjY2VzczogZnVu
Y3Rpb24obXNnKXsKKwkJCWVxdWFscyggbXNnLCAnYmFyJywgJ0NoZWNrIGZvciBHRVQnICk7CisJ
CQlzdGFydCgpOworCQl9CisJfSk7CisJalF1ZXJ5LmFqYXgoKTsKK30pOworCisvKgordGVzdCgi
Y3VzdG9tIHRpbWVvdXQgZG9lcyBub3Qgc2V0IGVycm9yIG1lc3NhZ2Ugd2hlbiB0aW1lb3V0IG9j
Y3Vycywgc2VlICM5NzAiLCBmdW5jdGlvbigpIHsKKwlzdG9wKCk7CisJalF1ZXJ5LmFqYXgoewor
CQl1cmw6ICJkYXRhL25hbWUucGhwP3dhaXQ9MSIsCisJCXRpbWVvdXQ6IDUwMCwKKwkJZXJyb3I6
IGZ1bmN0aW9uKHJlcXVlc3QsIHN0YXR1cykgeworCQkJb2soIHN0YXR1cyAhPSBudWxsLCAic3Rh
dHVzIHNob3VsZG4ndCBiZSBudWxsIGluIGVycm9yIGhhbmRsZXIiICk7CisJCQllcXVhbHMoICJ0
aW1lb3V0Iiwgc3RhdHVzICk7CisJCQlzdGFydCgpOworCQl9CisJfSk7Cit9KTsKKyovCisKK3Rl
c3QoImRhdGEgb3B0aW9uOiBldmFsdWF0ZSBmdW5jdGlvbiB2YWx1ZXMgKCMyODA2KSIsIGZ1bmN0
aW9uKCkgeworCXN0b3AoKTsKKwlqUXVlcnkuYWpheCh7CisJCXVybDogImRhdGEvZWNob1F1ZXJ5
LnBocCIsCisJCWRhdGE6IHsKKwkJCWtleTogZnVuY3Rpb24oKSB7CisJCQkJcmV0dXJuICJ2YWx1
ZSI7CisJCQl9CisJCX0sCisJCXN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3VsdCkgeworCQkJZXF1YWxz
KCByZXN1bHQsICJrZXk9dmFsdWUiICk7CisJCQlzdGFydCgpOworCQl9CisJfSk7Cit9KTsKKwor
dGVzdCgiZGF0YSBvcHRpb246IGVtcHR5IGJvZGllcyBmb3Igbm9uLUdFVCByZXF1ZXN0cyIsIGZ1
bmN0aW9uKCkgeworCXN0b3AoKTsKKwlqUXVlcnkuYWpheCh7CisJCXVybDogImRhdGEvZWNob0Rh
dGEucGhwIiwKKwkJZGF0YTogdW5kZWZpbmVkLAorCQl0eXBlOiAicG9zdCIsCisJCXN1Y2Nlc3M6
IGZ1bmN0aW9uKHJlc3VsdCkgeworCQkJZXF1YWxzKCByZXN1bHQsICIiICk7CisJCQlzdGFydCgp
OworCQl9CisJfSk7Cit9KTsKKwordmFyIGlmTW9kaWZpZWROb3cgPSBuZXcgRGF0ZSgpOworCitq
UXVlcnkuZWFjaCggeyAiIChjYWNoZSkiOiB0cnVlLCAiIChubyBjYWNoZSkiOiBmYWxzZSB9LCBm
dW5jdGlvbiggbGFiZWwsIGNhY2hlICkgeworCisJdGVzdCgialF1ZXJ5LmFqYXggLSBJZi1Nb2Rp
ZmllZC1TaW5jZSBzdXBwb3J0IiArIGxhYmVsLCBmdW5jdGlvbigpIHsKKwkJZXhwZWN0KCAzICk7
CisKKwkJc3RvcCgpOworCisJCXZhciB1cmwgPSAiZGF0YS9pZl9tb2RpZmllZF9zaW5jZS5waHA/
dHM9IiArIGlmTW9kaWZpZWROb3crKzsKKworCQlqUXVlcnkuYWpheCh7CisJCQl1cmw6IHVybCwK
KwkJCWlmTW9kaWZpZWQ6IHRydWUsCisJCQljYWNoZTogY2FjaGUsCisJCQlzdWNjZXNzOiBmdW5j
dGlvbihkYXRhLCBzdGF0dXMpIHsKKwkJCQllcXVhbHMoc3RhdHVzLCAic3VjY2VzcyIgKTsKKwor
CQkJCWpRdWVyeS5hamF4KHsKKwkJCQkJdXJsOiB1cmwsCisJCQkJCWlmTW9kaWZpZWQ6IHRydWUs
CisJCQkJCWNhY2hlOiBjYWNoZSwKKwkJCQkJc3VjY2VzczogZnVuY3Rpb24oZGF0YSwgc3RhdHVz
KSB7CisJCQkJCQlpZiAoIGRhdGEgPT09ICJGQUlMIiApIHsKKwkJCQkJCQlvayhqUXVlcnkuYnJv
d3Nlci5vcGVyYSwgIk9wZXJhIGlzIGluY2FwYWJsZSBvZiBkb2luZyAuc2V0UmVxdWVzdEhlYWRl
cignSWYtTW9kaWZpZWQtU2luY2UnKS4iKTsKKwkJCQkJCQlvayhqUXVlcnkuYnJvd3Nlci5vcGVy
YSwgIk9wZXJhIGlzIGluY2FwYWJsZSBvZiBkb2luZyAuc2V0UmVxdWVzdEhlYWRlcignSWYtTW9k
aWZpZWQtU2luY2UnKS4iKTsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJZXF1YWxzKHN0YXR1cywg
Im5vdG1vZGlmaWVkIik7CisJCQkJCQkJb2soZGF0YSA9PSBudWxsLCAicmVzcG9uc2UgYm9keSBz
aG91bGQgYmUgZW1wdHkiKTsKKwkJCQkJCX0KKwkJCQkJCXN0YXJ0KCk7CisJCQkgICAgICAgIH0s
CisJCQkJCWVycm9yOiBmdW5jdGlvbigpIHsKKwkJCQkJCS8vIERvIHRoaXMgYmVjYXVzZSBvcGVy
YSBzaW1wbHkgcmVmdXNlcyB0byBpbXBsZW1lbnQgMzA0IGhhbmRsaW5nIDooCisJCQkJCQkvLyBB
IGZlYXR1cmUtZHJpdmVuIHdheSBvZiBkZXRlY3RpbmcgdGhpcyB3b3VsZCBiZSBhcHByZWNpYXRl
ZAorCQkJCQkJLy8gU2VlOiBodHRwOi8vZ2lzdC5naXRodWIuY29tLzU5OTQxOQorCQkJCQkJb2so
alF1ZXJ5LmJyb3dzZXIub3BlcmEsICJlcnJvciIpOworCQkJCQkJb2soalF1ZXJ5LmJyb3dzZXIu
b3BlcmEsICJlcnJvciIpOworCQkJCQkJc3RhcnQoKTsKKwkJCQkJfQorCQkJCX0pOworCQkJfSwK
KwkJCWVycm9yOiBmdW5jdGlvbigpIHsKKwkJCQllcXVhbHMoZmFsc2UsICJlcnJvciIpOworCQkJ
CS8vIERvIHRoaXMgYmVjYXVzZSBvcGVyYSBzaW1wbHkgcmVmdXNlcyB0byBpbXBsZW1lbnQgMzA0
IGhhbmRsaW5nIDooCisJCQkJLy8gQSBmZWF0dXJlLWRyaXZlbiB3YXkgb2YgZGV0ZWN0aW5nIHRo
aXMgd291bGQgYmUgYXBwcmVjaWF0ZWQKKwkJCQkvLyBTZWU6IGh0dHA6Ly9naXN0LmdpdGh1Yi5j
b20vNTk5NDE5CisJCQkJb2soalF1ZXJ5LmJyb3dzZXIub3BlcmEsICJlcnJvciIpOworCQkJCXN0
YXJ0KCk7CisJCQl9CisJCX0pOworCX0pOworCisJdGVzdCgialF1ZXJ5LmFqYXggLSBFdGFnIHN1
cHBvcnQiICsgbGFiZWwsIGZ1bmN0aW9uKCkgeworCQlleHBlY3QoIDMgKTsKKworCQlzdG9wKCk7
CisKKwkJdmFyIHVybCA9ICJkYXRhL2V0YWcucGhwP3RzPSIgKyBpZk1vZGlmaWVkTm93Kys7CisK
KwkJalF1ZXJ5LmFqYXgoeworCQkJdXJsOiB1cmwsCisJCQlpZk1vZGlmaWVkOiB0cnVlLAorCQkJ
Y2FjaGU6IGNhY2hlLAorCQkJc3VjY2VzczogZnVuY3Rpb24oZGF0YSwgc3RhdHVzKSB7CisJCQkJ
ZXF1YWxzKHN0YXR1cywgInN1Y2Nlc3MiICk7CisKKwkJCQlqUXVlcnkuYWpheCh7CisJCQkJCXVy
bDogdXJsLAorCQkJCQlpZk1vZGlmaWVkOiB0cnVlLAorCQkJCQljYWNoZTogY2FjaGUsCisJCQkJ
CXN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEsIHN0YXR1cykgeworCQkJCQkJaWYgKCBkYXRhID09PSAi
RkFJTCIgKSB7CisJCQkJCQkJb2soalF1ZXJ5LmJyb3dzZXIub3BlcmEsICJPcGVyYSBpcyBpbmNh
cGFibGUgb2YgZG9pbmcgLnNldFJlcXVlc3RIZWFkZXIoJ0lmLU5vbmUtTWF0Y2gnKS4iKTsKKwkJ
CQkJCQlvayhqUXVlcnkuYnJvd3Nlci5vcGVyYSwgIk9wZXJhIGlzIGluY2FwYWJsZSBvZiBkb2lu
ZyAuc2V0UmVxdWVzdEhlYWRlcignSWYtTm9uZS1NYXRjaCcpLiIpOworCQkJCQkJfSBlbHNlIHsK
KwkJCQkJCQllcXVhbHMoc3RhdHVzLCAibm90bW9kaWZpZWQiKTsKKwkJCQkJCQlvayhkYXRhID09
IG51bGwsICJyZXNwb25zZSBib2R5IHNob3VsZCBiZSBlbXB0eSIpOworCQkJCQkJfQorCQkJCQkJ
c3RhcnQoKTsKKwkJCSAgICAgICAgfSwKKwkJCSAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKCkgewor
CQkJCQkJLy8gRG8gdGhpcyBiZWNhdXNlIG9wZXJhIHNpbXBseSByZWZ1c2VzIHRvIGltcGxlbWVu
dCAzMDQgaGFuZGxpbmcgOigKKwkJCQkJCS8vIEEgZmVhdHVyZS1kcml2ZW4gd2F5IG9mIGRldGVj
dGluZyB0aGlzIHdvdWxkIGJlIGFwcHJlY2lhdGVkCisJCQkJCQkvLyBTZWU6IGh0dHA6Ly9naXN0
LmdpdGh1Yi5jb20vNTk5NDE5CisJCQkJCQlvayhqUXVlcnkuYnJvd3Nlci5vcGVyYSwgImVycm9y
Iik7CisJCQkJCQlvayhqUXVlcnkuYnJvd3Nlci5vcGVyYSwgImVycm9yIik7CisJCQkJCQlzdGFy
dCgpOworCQkJCQl9CisJCQkJfSk7CisJCQl9LAorCQkJZXJyb3I6IGZ1bmN0aW9uKCkgeworCQkJ
CS8vIERvIHRoaXMgYmVjYXVzZSBvcGVyYSBzaW1wbHkgcmVmdXNlcyB0byBpbXBsZW1lbnQgMzA0
IGhhbmRsaW5nIDooCisJCQkJLy8gQSBmZWF0dXJlLWRyaXZlbiB3YXkgb2YgZGV0ZWN0aW5nIHRo
aXMgd291bGQgYmUgYXBwcmVjaWF0ZWQKKwkJCQkvLyBTZWU6IGh0dHA6Ly9naXN0LmdpdGh1Yi5j
b20vNTk5NDE5CisJCQkJb2soalF1ZXJ5LmJyb3dzZXIub3BlcmEsICJlcnJvciIpOworCQkJCXN0
YXJ0KCk7CisJCQl9CisJCX0pOworCX0pOworfSk7CisKK3Rlc3QoImpRdWVyeSBhamF4IC0gZmFp
bGluZyBjcm9zcy1kb21haW4iLCBmdW5jdGlvbigpIHsKKworCWV4cGVjdCggMiApOworCisJc3Rv
cCgpOworCisJdmFyIGkgPSAyOworCisJalF1ZXJ5LmFqYXgoeworCQl1cmw6ICdodHRwOi8vc29t
ZXdlYnNpdGV0aGF0ZG9lc25vdGV4aXN0LTY3ODY0ODYzNTc0NjU3NjU0LmNvbScsCisJCXN1Y2Nl
c3M6IGZ1bmN0aW9uKCl7IG9rKCBmYWxzZSAsICJzdWNjZXNzIiApOyB9LAorCQllcnJvcjogZnVu
Y3Rpb24oeGhyLF8sZSl7IG9rKCB0cnVlICwgImZpbGUgbm90IGZvdW5kOiAiICsgeGhyLnN0YXR1
cyArICIgPT4gIiArIGUgKTsgfSwKKwkJY29tcGxldGU6IGZ1bmN0aW9uKCkgeyBpZiAoICEgLS1p
ICkgc3RhcnQoKTsgfQorCX0pOworCisJalF1ZXJ5LmFqYXgoeworCQl1cmw6ICdodHRwOi8vd3d3
Lmdvb2dsZS5jb20nLAorCQlzdWNjZXNzOiBmdW5jdGlvbigpeyBvayggZmFsc2UgLCAic3VjY2Vz
cyIgKTsgfSwKKwkJZXJyb3I6IGZ1bmN0aW9uKHhocixfLGUpeyBvayggdHJ1ZSAsICJhY2Nlc3Mg
ZGVuaWVkOiAiICsgeGhyLnN0YXR1cyArICIgPT4gIiArIGUgKTsgfSwKKwkJY29tcGxldGU6IGZ1
bmN0aW9uKCkgeyBpZiAoICEgLS1pICkgc3RhcnQoKTsgfQorCX0pOworCit9KTsKKwordGVzdCgi
alF1ZXJ5IGFqYXggLSBhdG9tK3htbCIsIGZ1bmN0aW9uKCkgeworCisJc3RvcCgpOworCisJalF1
ZXJ5LmFqYXgoeworCQl1cmw6IHVybCggJ2RhdGEvYXRvbSt4bWwucGhwJyApLAorCQlzdWNjZXNz
OiBmdW5jdGlvbigpeyBvayggdHJ1ZSAsICJzdWNjZXNzIiApOyB9LAorCQllcnJvcjogZnVuY3Rp
b24oKXsgb2soIGZhbHNlICwgImVycm9yIiApOyB9LAorCQljb21wbGV0ZTogZnVuY3Rpb24oKSB7
IHN0YXJ0KCk7IH0KKwl9KTsKKworfSk7CisKK3Rlc3QoICJqUXVlcnkuYWpheCAtIExvY2F0aW9u
IG9iamVjdCBhcyB1cmwgKCM3NTMxKSIsIDEsIGZ1bmN0aW9uICgpIHsKKwl2YXIgc3VjY2VzcyA9
IGZhbHNlOworCXRyeSB7CisJCXZhciB4aHIgPSBqUXVlcnkuYWpheCh7IHVybDogd2luZG93Lmxv
Y2F0aW9uIH0pOworCQlzdWNjZXNzID0gdHJ1ZTsKKwkJeGhyLmFib3J0KCk7CisJfSBjYXRjaCAo
ZSkge30KKworCW9rKCBzdWNjZXNzLCAiZG9jdW1lbnQubG9jYXRpb24gZGlkIG5vdCBnZW5lcmF0
ZSBleGNlcHRpb24iICk7Cit9KTsKKwordGVzdCggImpRdWVyeS5hamF4IC0gc3RhdHVzQ29kZSIg
LCBmdW5jdGlvbigpIHsKKworCXZhciBjb3VudCA9IDEyOworCisJZXhwZWN0KCAyMCApOworCXN0
b3AoKTsKKworCWZ1bmN0aW9uIGNvdW50Q29tcGxldGUoKSB7CisJCWlmICggISAtLWNvdW50ICkg
eworCQkJc3RhcnQoKTsKKwkJfQorCX0KKworCWZ1bmN0aW9uIGNyZWF0ZVN0YXR1c0NvZGVzKCBu
YW1lICwgaXNTdWNjZXNzICkgeworCQluYW1lID0gIlRlc3QgIiArIG5hbWUgKyAiICIgKyAoIGlz
U3VjY2VzcyA/ICJzdWNjZXNzIiA6ICJlcnJvciIgKTsKKwkJcmV0dXJuIHsKKwkJCTIwMDogZnVu
Y3Rpb24oKSB7CisJCQkJb2soIGlzU3VjY2VzcyAsIG5hbWUgKTsKKwkJCX0sCisJCQk0MDQ6IGZ1
bmN0aW9uKCkgeworCQkJCW9rKCAhIGlzU3VjY2VzcyAsIG5hbWUgKTsKKwkJCX0KKwkJfTsKKwl9
CisKKwlqUXVlcnkuZWFjaCggeworCQkiZGF0YS9uYW1lLmh0bWwiOiB0cnVlLAorCQkiZGF0YS9z
b21lRmlsZVRoYXREb2VzTm90RXhpc3QuaHRtbCI6IGZhbHNlCisJfSAsIGZ1bmN0aW9uKCB1cmkg
LCBpc1N1Y2Nlc3MgKSB7CisKKwkJalF1ZXJ5LmFqYXgoIHVybCggdXJpICkgLCB7CisJCQlzdGF0
dXNDb2RlOiBjcmVhdGVTdGF0dXNDb2RlcyggImluIG9wdGlvbnMiICwgaXNTdWNjZXNzICksCisJ
CQljb21wbGV0ZTogY291bnRDb21wbGV0ZQorCQl9KTsKKworCQlqUXVlcnkuYWpheCggdXJsKCB1
cmkgKSAsIHsKKwkJCWNvbXBsZXRlOiBjb3VudENvbXBsZXRlCisJCX0pLnN0YXR1c0NvZGUoIGNy
ZWF0ZVN0YXR1c0NvZGVzKCAiaW1tZWRpYXRlbHkgd2l0aCBtZXRob2QiICwgaXNTdWNjZXNzICkg
KTsKKworCQlqUXVlcnkuYWpheCggdXJsKCB1cmkgKSAsIHsKKwkJCWNvbXBsZXRlOiBmdW5jdGlv
bihqcVhIUikgeworCQkJCWpxWEhSLnN0YXR1c0NvZGUoIGNyZWF0ZVN0YXR1c0NvZGVzKCAib24g
Y29tcGxldGUiICwgaXNTdWNjZXNzICkgKTsKKwkJCQljb3VudENvbXBsZXRlKCk7CisJCQl9CisJ
CX0pOworCisJCWpRdWVyeS5hamF4KCB1cmwoIHVyaSApICwgeworCQkJY29tcGxldGU6IGZ1bmN0
aW9uKGpxWEhSKSB7CisJCQkJc2V0VGltZW91dCggZnVuY3Rpb24oKSB7CisJCQkJCWpxWEhSLnN0
YXR1c0NvZGUoIGNyZWF0ZVN0YXR1c0NvZGVzKCAidmVyeSBsYXRlIGJpbmRpbmciICwgaXNTdWNj
ZXNzICkgKTsKKwkJCQkJY291bnRDb21wbGV0ZSgpOworCQkJCX0gLCAxMDAgKTsKKwkJCX0KKwkJ
fSk7CisKKwkJalF1ZXJ5LmFqYXgoIHVybCggdXJpICkgLCB7CisJCQlzdGF0dXNDb2RlOiBjcmVh
dGVTdGF0dXNDb2RlcyggImFsbCAob3B0aW9ucykiICwgaXNTdWNjZXNzICksCisJCQljb21wbGV0
ZTogZnVuY3Rpb24oanFYSFIpIHsKKwkJCQlqcVhIUi5zdGF0dXNDb2RlKCBjcmVhdGVTdGF0dXND
b2RlcyggImFsbCAob24gY29tcGxldGUpIiAsIGlzU3VjY2VzcyApICk7CisJCQkJc2V0VGltZW91
dCggZnVuY3Rpb24oKSB7CisJCQkJCWpxWEhSLnN0YXR1c0NvZGUoIGNyZWF0ZVN0YXR1c0NvZGVz
KCAiYWxsICh2ZXJ5IGxhdGUgYmluZGluZykiICwgaXNTdWNjZXNzICkgKTsKKwkJCQkJY291bnRD
b21wbGV0ZSgpOworCQkJCX0gLCAxMDAgKTsKKwkJCX0KKwkJfSkuc3RhdHVzQ29kZSggY3JlYXRl
U3RhdHVzQ29kZXMoICJhbGwgKGltbWVkaWF0ZWx5IHdpdGggbWV0aG9kKSIgLCBpc1N1Y2Nlc3Mg
KSApOworCisJCXZhciB0ZXN0U3RyaW5nID0gIiI7CisKKwkJalF1ZXJ5LmFqYXgoIHVybCggdXJp
ICksIHsKKwkJCXN1Y2Nlc3M6IGZ1bmN0aW9uKCBhICwgYiAsIGpxWEhSICkgeworCQkJCW9rKCBp
c1N1Y2Nlc3MgLCAic3VjY2VzcyIgKTsKKwkJCQl2YXIgc3RhdHVzQ29kZSA9IHt9OworCQkJCXN0
YXR1c0NvZGVbIGpxWEhSLnN0YXR1cyBdID0gZnVuY3Rpb24oKSB7CisJCQkJCXRlc3RTdHJpbmcg
Kz0gIkIiOworCQkJCX07CisJCQkJanFYSFIuc3RhdHVzQ29kZSggc3RhdHVzQ29kZSApOworCQkJ
CXRlc3RTdHJpbmcgKz0gIkEiOworCQkJfSwKKwkJCWVycm9yOiBmdW5jdGlvbigganFYSFIgKSB7
CisJCQkJb2soICEgaXNTdWNjZXNzICwgImVycm9yIiApOworCQkJCXZhciBzdGF0dXNDb2RlID0g
e307CisJCQkJc3RhdHVzQ29kZVsganFYSFIuc3RhdHVzIF0gPSBmdW5jdGlvbigpIHsKKwkJCQkJ
dGVzdFN0cmluZyArPSAiQiI7CisJCQkJfTsKKwkJCQlqcVhIUi5zdGF0dXNDb2RlKCBzdGF0dXND
b2RlICk7CisJCQkJdGVzdFN0cmluZyArPSAiQSI7CisJCQl9LAorCQkJY29tcGxldGU6IGZ1bmN0
aW9uKCkgeworCQkJCXN0cmljdEVxdWFsKCB0ZXN0U3RyaW5nICwgIkFCIiAsICJUZXN0IHN0YXR1
c0NvZGUgY2FsbGJhY2tzIGFyZSBvcmRlcmVkIGxpa2UgIiArCisJCQkJCQkoIGlzU3VjY2VzcyA/
ICJzdWNjZXNzIiA6ICAiZXJyb3IiICkgKyAiIGNhbGxiYWNrcyIgKTsKKwkJCQljb3VudENvbXBs
ZXRlKCk7CisJCQl9CisJCX0gKTsKKworCX0pOworfSk7CisKK3Rlc3QoImpRdWVyeS5hamF4IC0g
dHJhbnNpdGl2ZSBjb252ZXJzaW9ucyIsIGZ1bmN0aW9uKCkgeworCisJZXhwZWN0KCA4ICk7CisK
KwlzdG9wKCk7CisKKwlqUXVlcnkud2hlbigKKworCQlqUXVlcnkuYWpheCggdXJsKCJkYXRhL2pz
b24ucGhwIikgLCB7CisJCQljb252ZXJ0ZXJzOiB7CisJCQkJImpzb24gbXlKc29uIjogZnVuY3Rp
b24oIGRhdGEgKSB7CisJCQkJCW9rKCB0cnVlICwgImNvbnZlcnRlciBjYWxsZWQiICk7CisJCQkJ
CXJldHVybiBkYXRhOworCQkJCX0KKwkJCX0sCisJCQlkYXRhVHlwZTogIm15SnNvbiIsCisJCQlz
dWNjZXNzOiBmdW5jdGlvbigpIHsKKwkJCQlvayggdHJ1ZSAsICJUcmFuc2l0aXZlIGNvbnZlcnNp
b24gd29ya2VkIiApOworCQkJCXN0cmljdEVxdWFsKCB0aGlzLmRhdGFUeXBlc1swXSAsICJ0ZXh0
IiAsICJyZXNwb25zZSB3YXMgcmV0cmlldmVkIGFzIHRleHQiICk7CisJCQkJc3RyaWN0RXF1YWwo
IHRoaXMuZGF0YVR5cGVzWzFdICwgIm15anNvbiIgLCAicmVxdWVzdCBleHBlY3RlZCBteWpzb24g
ZGF0YVR5cGUiICk7CisJCQl9CisJCX0pLAorCisJCWpRdWVyeS5hamF4KCB1cmwoImRhdGEvanNv
bi5waHAiKSAsIHsKKwkJCWNvbnZlcnRlcnM6IHsKKwkJCQkianNvbiBteUpzb24iOiBmdW5jdGlv
biggZGF0YSApIHsKKwkJCQkJb2soIHRydWUgLCAiY29udmVydGVyIGNhbGxlZCAoKikiICk7CisJ
CQkJCXJldHVybiBkYXRhOworCQkJCX0KKwkJCX0sCisJCQljb250ZW50czogZmFsc2UsIC8qIGhl
YWRlcnMgYXJlIHdyb25nIHNvIHdlIGlnbm9yZSB0aGVtICovCisJCQlkYXRhVHlwZTogIiogbXlK
c29uIiwKKwkJCXN1Y2Nlc3M6IGZ1bmN0aW9uKCkgeworCQkJCW9rKCB0cnVlICwgIlRyYW5zaXRp
dmUgY29udmVyc2lvbiB3b3JrZWQgKCopIiApOworCQkJCXN0cmljdEVxdWFsKCB0aGlzLmRhdGFU
eXBlc1swXSAsICJ0ZXh0IiAsICJyZXNwb25zZSB3YXMgcmV0cmlldmVkIGFzIHRleHQgKCopIiAp
OworCQkJCXN0cmljdEVxdWFsKCB0aGlzLmRhdGFUeXBlc1sxXSAsICJteWpzb24iICwgInJlcXVl
c3QgZXhwZWN0ZWQgbXlqc29uIGRhdGFUeXBlICgqKSIgKTsKKwkJCX0KKwkJfSkKKworCSkudGhl
biggc3RhcnQgLCBzdGFydCApOworCit9KTsKKwordGVzdCgialF1ZXJ5LmFqYXggLSBvdmVycmlk
ZU1pbWVUeXBlIiwgZnVuY3Rpb24oKSB7CisKKwlleHBlY3QoIDIgKTsKKworCXN0b3AoKTsKKwor
CWpRdWVyeS53aGVuKAorCisJCWpRdWVyeS5hamF4KCB1cmwoImRhdGEvanNvbi5waHAiKSAsIHsK
KwkJCWJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCB4aHIgKSB7CisJCQkJeGhyLm92ZXJyaWRlTWltZVR5
cGUoICJhcHBsaWNhdGlvbi9qc29uIiApOworCQkJfSwKKwkJCXN1Y2Nlc3M6IGZ1bmN0aW9uKCBq
c29uICkgeworCQkJCW9rKCBqc29uLmRhdGEgLCAiTWltZXR5cGUgb3ZlcnJpZGVuIHVzaW5nIGJl
Zm9yZVNlbmQiICk7CisJCQl9CisJCX0pLAorCisJCWpRdWVyeS5hamF4KCB1cmwoImRhdGEvanNv
bi5waHAiKSAsIHsKKwkJCW1pbWVUeXBlOiAiYXBwbGljYXRpb24vanNvbiIsCisJCQlzdWNjZXNz
OiBmdW5jdGlvbigganNvbiApIHsKKwkJCQlvaygganNvbi5kYXRhICwgIk1pbWV0eXBlIG92ZXJy
aWRlbiB1c2luZyBtaW1lVHlwZSBvcHRpb24iICk7CisJCQl9CisJCX0pCisKKwkpLnRoZW4oIHN0
YXJ0ICwgc3RhcnQgKTsKKworfSk7CisKK3Rlc3QoImpRdWVyeS5hamF4IC0gYWJvcnQgaW4gcHJl
ZmlsdGVyIiwgZnVuY3Rpb24oKSB7CisKKwlleHBlY3QoIDEgKTsKKworCWpRdWVyeS5hamF4UHJl
ZmlsdGVyKGZ1bmN0aW9uKCBvcHRpb25zLCBfLCBqcVhIUiApIHsKKwkJaWYgKCBvcHRpb25zLmFi
b3J0SW5QcmVmaWx0ZXIgKSB7CisJCQlqcVhIUi5hYm9ydCgpOworCQl9CisJfSk7CisKKwlzdHJp
Y3RFcXVhbCggalF1ZXJ5LmFqYXgoeworCQlhYm9ydEluUHJlZmlsdGVyOiB0cnVlLAorCQllcnJv
cjogZnVuY3Rpb24oKSB7CisJCQlvayggZmFsc2UsICJlcnJvciBjYWxsYmFjayBjYWxsZWQiICk7
CisJCX0KKwl9KSwgZmFsc2UsICJSZXF1ZXN0IHdhcyBwcm9wZXJseSBhYm9ydGVkIGVhcmx5IGJ5
IHRoZSBwcmVmaWx0ZXIiICk7CisKK30pOworCit0ZXN0KCJqUXVlcnkuYWpheCAtIGFjdGl2ZSBj
b3VudGVyIiwgZnVuY3Rpb24oKSB7CisgICAgb2soIGpRdWVyeS5hY3RpdmUgPT0gMCwgImFqYXgg
YWN0aXZlIGNvdW50ZXIgc2hvdWxkIGJlIHplcm86ICIgKyBqUXVlcnkuYWN0aXZlICk7Cit9KTsK
KworfQorCisvL30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvdW5pdC9hamF4LmpzCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB5ZXMKCkluZGV4OiBMYXlvdXRUZXN0cy9qcXVl
cnkvcmVzb3VyY2VzL3Rlc3QvdW5pdC9hdHRyaWJ1dGVzLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC91bml0L2F0dHJpYnV0ZXMuanMJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvdW5pdC9hdHRyaWJ1dGVz
LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg0NiBAQAorbW9kdWxlKCJhdHRyaWJ1dGVzIiwg
eyB0ZWFyZG93bjogbW9kdWxlVGVhcmRvd24gfSk7CisKK3ZhciBiYXJlT2JqID0gZnVuY3Rpb24o
dmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9OwordmFyIGZ1bmN0aW9uUmV0dXJuaW5nT2JqID0gZnVu
Y3Rpb24odmFsdWUpIHsgcmV0dXJuIChmdW5jdGlvbigpIHsgcmV0dXJuIHZhbHVlOyB9KTsgfTsK
KwordGVzdCgialF1ZXJ5LnByb3BzOiBpdGVncml0eSB0ZXN0IiwgZnVuY3Rpb24oKSB7CisKKyAg
ZXhwZWN0KDEpOworCisgIC8vICBUaGlzIG11c3QgYmUgbWFpbnRhaW5lZCBhbmQgZXF1YWwgalF1
ZXJ5LnByb3BzCisgIC8vICBFbnN1cmUgdGhhdCBhY2NpZGVudGFsIG9yIGVycm9uZW91cyBwcm9w
ZXJ0eQorICAvLyAgb3ZlcndyaXRlcyBkb24ndCBvY2N1cgorICAvLyAgVGhpcyBpcyBzaW1wbHkg
Zm9yIGJldHRlciBjb2RlIGNvdmVyYWdlIGFuZCBmdXR1cmUgcHJvb2ZpbmcuCisgIHZhciBwcm9w
c1Nob3VsZEJlID0geworICAgICJmb3IiOiAiaHRtbEZvciIsCisgICAgImNsYXNzIjogImNsYXNz
TmFtZSIsCisgICAgcmVhZG9ubHk6ICJyZWFkT25seSIsCisgICAgbWF4bGVuZ3RoOiAibWF4TGVu
Z3RoIiwKKyAgICBjZWxsc3BhY2luZzogImNlbGxTcGFjaW5nIiwKKyAgICByb3dzcGFuOiAicm93
U3BhbiIsCisgICAgY29sc3BhbjogImNvbFNwYW4iLAorICAgIHRhYmluZGV4OiAidGFiSW5kZXgi
LAorICAgIHVzZW1hcDogInVzZU1hcCIsCisgICAgZnJhbWVib3JkZXI6ICJmcmFtZUJvcmRlciIK
KyAgfTsKKworICBzYW1lKHByb3BzU2hvdWxkQmUsIGpRdWVyeS5wcm9wcywgImpRdWVyeS5wcm9w
cyBwYXNzZXMgaW50ZWdyaXR5IGNoZWNrIik7CisKK30pOworCit0ZXN0KCJhdHRyKFN0cmluZyki
LCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMzcpOworCisJLy8gVGhpcyBvbmUgc29tZXRpbWVzIGZh
aWxzIHJhbmRvbWx5ID8hCisJZXF1YWxzKCBqUXVlcnkoJyN0ZXh0MScpLmF0dHIoJ3ZhbHVlJyks
ICJUZXN0IiwgJ0NoZWNrIGZvciB2YWx1ZSBhdHRyaWJ1dGUnICk7CisKKwllcXVhbHMoIGpRdWVy
eSgnI3RleHQxJykuYXR0cigndmFsdWUnLCAiVGVzdDIiKS5hdHRyKCdkZWZhdWx0VmFsdWUnKSwg
IlRlc3QiLCAnQ2hlY2sgZm9yIGRlZmF1bHRWYWx1ZSBhdHRyaWJ1dGUnICk7CisJZXF1YWxzKCBq
UXVlcnkoJyN0ZXh0MScpLmF0dHIoJ3R5cGUnKSwgInRleHQiLCAnQ2hlY2sgZm9yIHR5cGUgYXR0
cmlidXRlJyApOworCWVxdWFscyggalF1ZXJ5KCcjcmFkaW8xJykuYXR0cigndHlwZScpLCAicmFk
aW8iLCAnQ2hlY2sgZm9yIHR5cGUgYXR0cmlidXRlJyApOworCWVxdWFscyggalF1ZXJ5KCcjY2hl
Y2sxJykuYXR0cigndHlwZScpLCAiY2hlY2tib3giLCAnQ2hlY2sgZm9yIHR5cGUgYXR0cmlidXRl
JyApOworCWVxdWFscyggalF1ZXJ5KCcjc2ltb24xJykuYXR0cigncmVsJyksICJib29rbWFyayIs
ICdDaGVjayBmb3IgcmVsIGF0dHJpYnV0ZScgKTsKKwllcXVhbHMoIGpRdWVyeSgnI2dvb2dsZScp
LmF0dHIoJ3RpdGxlJyksICJHb29nbGUhIiwgJ0NoZWNrIGZvciB0aXRsZSBhdHRyaWJ1dGUnICk7
CisJZXF1YWxzKCBqUXVlcnkoJyNtYXJrJykuYXR0cignaHJlZmxhbmcnKSwgImVuIiwgJ0NoZWNr
IGZvciBocmVmbGFuZyBhdHRyaWJ1dGUnICk7CisJZXF1YWxzKCBqUXVlcnkoJyNlbicpLmF0dHIo
J2xhbmcnKSwgImVuIiwgJ0NoZWNrIGZvciBsYW5nIGF0dHJpYnV0ZScgKTsKKwllcXVhbHMoIGpR
dWVyeSgnI3NpbW9uJykuYXR0cignY2xhc3MnKSwgImJsb2cgbGluayIsICdDaGVjayBmb3IgY2xh
c3MgYXR0cmlidXRlJyApOworCWVxdWFscyggalF1ZXJ5KCcjbmFtZScpLmF0dHIoJ25hbWUnKSwg
Im5hbWUiLCAnQ2hlY2sgZm9yIG5hbWUgYXR0cmlidXRlJyApOworCWVxdWFscyggalF1ZXJ5KCcj
dGV4dDEnKS5hdHRyKCduYW1lJyksICJhY3Rpb24iLCAnQ2hlY2sgZm9yIG5hbWUgYXR0cmlidXRl
JyApOworCW9rKCBqUXVlcnkoJyNmb3JtJykuYXR0cignYWN0aW9uJykuaW5kZXhPZigiZm9ybWFj
dGlvbiIpID49IDAsICdDaGVjayBmb3IgYWN0aW9uIGF0dHJpYnV0ZScgKTsKKwkvLyBUZW1wb3Jh
cmlseSBkaXNhYmxlZC4gU2VlOiAjNDI5OQorCS8vIG9rKCBqUXVlcnkoJyNmb3JtJykuYXR0cign
YWN0aW9uJywnbmV3Zm9ybWFjdGlvbicpLmF0dHIoJ2FjdGlvbicpLmluZGV4T2YoIm5ld2Zvcm1h
Y3Rpb24iKSA+PSAwLCAnQ2hlY2sgdGhhdCBhY3Rpb24gYXR0cmlidXRlIHdhcyBjaGFuZ2VkJyAp
OworCWVxdWFscyggalF1ZXJ5KCcjdGV4dDEnKS5hdHRyKCdtYXhsZW5ndGgnKSwgJzMwJywgJ0No
ZWNrIGZvciBtYXhsZW5ndGggYXR0cmlidXRlJyApOworCWVxdWFscyggalF1ZXJ5KCcjdGV4dDEn
KS5hdHRyKCdtYXhMZW5ndGgnKSwgJzMwJywgJ0NoZWNrIGZvciBtYXhMZW5ndGggYXR0cmlidXRl
JyApOworCWVxdWFscyggalF1ZXJ5KCcjYXJlYTEnKS5hdHRyKCdtYXhMZW5ndGgnKSwgJzMwJywg
J0NoZWNrIGZvciBtYXhMZW5ndGggYXR0cmlidXRlJyApOworCWVxdWFscyggalF1ZXJ5KCcjc2Vs
ZWN0MicpLmF0dHIoJ3NlbGVjdGVkSW5kZXgnKSwgMywgJ0NoZWNrIGZvciBzZWxlY3RlZEluZGV4
IGF0dHJpYnV0ZScgKTsKKwllcXVhbHMoIGpRdWVyeSgnI2ZvbycpLmF0dHIoJ25vZGVOYW1lJyku
dG9VcHBlckNhc2UoKSwgJ0RJVicsICdDaGVjayBmb3Igbm9kZU5hbWUgYXR0cmlidXRlJyApOwor
CWVxdWFscyggalF1ZXJ5KCcjZm9vJykuYXR0cigndGFnTmFtZScpLnRvVXBwZXJDYXNlKCksICdE
SVYnLCAnQ2hlY2sgZm9yIHRhZ05hbWUgYXR0cmlidXRlJyApOworCisJLy8gdXNpbmcgaW5uZXJI
VE1MIGluIElFIGNhdXNlcyBocmVmIGF0dHJpYnV0ZSB0byBiZSBzZXJpYWxpemVkIHRvIHRoZSBm
dWxsIHBhdGgKKwlqUXVlcnkoJzxhLz4nKS5hdHRyKHsgJ2lkJzogJ3RBbmNob3I1JywgJ2hyZWYn
OiAnIzUnIH0pLmFwcGVuZFRvKCcjbWFpbicpOworCWVxdWFscyggalF1ZXJ5KCcjdEFuY2hvcjUn
KS5hdHRyKCdocmVmJyksICIjNSIsICdDaGVjayBmb3Igbm9uLWFic29sdXRlIGhyZWYgKGFuIGFu
Y2hvciknICk7CisKKwllcXVhbHMoIGpRdWVyeSgiPG9wdGlvbi8+IikuYXR0cigic2VsZWN0ZWQi
KSwgZmFsc2UsICJDaGVjayBzZWxlY3RlZCBhdHRyaWJ1dGUgb24gZGlzY29ubmVjdGVkIGVsZW1l
bnQuIiApOworCisKKwkvLyBSZWxhdGVkIHRvIFs1NTc0XSBhbmQgWzU2ODNdCisJdmFyIGJvZHkg
PSBkb2N1bWVudC5ib2R5LCAkYm9keSA9IGpRdWVyeShib2R5KTsKKworCW9rKCAkYm9keS5hdHRy
KCdmb28nKSA9PT0gdW5kZWZpbmVkLCAnTWFrZSBzdXJlIHRoYXQgYSBub24gZXhpc3RlbnQgYXR0
cmlidXRlIHJldHVybnMgdW5kZWZpbmVkJyApOworCW9rKCAkYm9keS5hdHRyKCduZXh0U2libGlu
ZycpID09PSBudWxsLCAnTWFrZSBzdXJlIGEgbnVsbCBleHBhbmRvIHJldHVybnMgbnVsbCcgKTsK
KworCWJvZHkuc2V0QXR0cmlidXRlKCdmb28nLCAnYmF6Jyk7CisJZXF1YWxzKCAkYm9keS5hdHRy
KCdmb28nKSwgJ2JheicsICdNYWtlIHN1cmUgdGhlIGRvbSBhdHRyaWJ1dGUgaXMgcmV0cmlldmVk
IHdoZW4gbm8gZXhwYW5kbyBpcyBmb3VuZCcgKTsKKworCWJvZHkuZm9vID0gJ2Jhcic7CisJZXF1
YWxzKCAkYm9keS5hdHRyKCdmb28nKSwgJ2JhcicsICdNYWtlIHN1cmUgdGhlIGV4cGFuZG8gaXMg
cHJlZmVycmVkIG92ZXIgdGhlIGRvbSBhdHRyaWJ1dGUnICk7CisKKwkkYm9keS5hdHRyKCdmb28n
LCdjb29sJyk7CisJZXF1YWxzKCAkYm9keS5hdHRyKCdmb28nKSwgJ2Nvb2wnLCAnTWFrZSBzdXJl
IHRoYXQgc2V0dGluZyB3b3JrcyB3ZWxsIHdoZW4gYm90aCBleHBhbmRvIGFuZCBkb20gYXR0cmli
dXRlIGFyZSBhdmFpbGFibGUnICk7CisKKwlib2R5LmZvbyA9IHVuZGVmaW5lZDsKKwlvayggJGJv
ZHkuYXR0cignZm9vJykgPT09IHVuZGVmaW5lZCwgJ01ha2Ugc3VyZSB0aGUgZXhwYW5kbyBpcyBw
cmVmZXJyZWQgb3ZlciB0aGUgZG9tIGF0dHJpYnV0ZSwgZXZlbiBpZiB1bmRlZmluZWQnICk7CisK
Kwlib2R5LnJlbW92ZUF0dHJpYnV0ZSgnZm9vJyk7IC8vIENsZWFudXAKKworCXZhciBzZWxlY3Qg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSwgb3B0Z3JvdXAgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJvcHRncm91cCIpLCBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJvcHRpb24iKTsKKwlvcHRncm91cC5hcHBlbmRDaGlsZCggb3B0aW9uICk7CisJc2VsZWN0LmFw
cGVuZENoaWxkKCBvcHRncm91cCApOworCisJZXF1YWxzKCBqUXVlcnkob3B0aW9uKS5hdHRyKCJz
ZWxlY3RlZCIpLCB0cnVlLCAiTWFrZSBzdXJlIHRoYXQgYSBzaW5nbGUgb3B0aW9uIGlzIHNlbGVj
dGVkLCBldmVuIHdoZW4gaW4gYW4gb3B0Z3JvdXAuIiApOworCisJb2soIGpRdWVyeSgiPGRpdi8+
IikuYXR0cigiZG9lc250ZXhpc3QiKSA9PT0gdW5kZWZpbmVkLCAiTWFrZSBzdXJlIHVuZGVmaW5l
ZCBpcyByZXR1cm5lZCB3aGVuIG5vIGF0dHJpYnV0ZSBpcyBmb3VuZC4iICk7CisJb2soIGpRdWVy
eSgpLmF0dHIoImRvZXNudGV4aXN0IikgPT09IHVuZGVmaW5lZCwgIk1ha2Ugc3VyZSB1bmRlZmlu
ZWQgaXMgcmV0dXJuZWQgd2hlbiBubyBlbGVtZW50IGlzIHRoZXJlLiIgKTsKKworCWVxdWFscygg
alF1ZXJ5KGRvY3VtZW50KS5hdHRyKCJub2RlTmFtZSIpLCAiI2RvY3VtZW50IiwgImF0dHIgd29y
a3MgY29ycmVjdGx5IG9uIGRvY3VtZW50IG5vZGVzIChidWcgIzc0NTEpLiIgKTsKKworCXZhciBh
dHRyaWJ1dGVOb2RlID0gZG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKCJpcnJlbGV2YW50IiksCisJ
CWNvbW1lbnROb2RlID0gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgic29tZSBjb21tZW50IiksCisJ
CXRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoInNvbWUgdGV4dCIpLAorCQlvYmog
PSB7fTsKKwlqUXVlcnkuZWFjaCggW2RvY3VtZW50LCBhdHRyaWJ1dGVOb2RlLCBjb21tZW50Tm9k
ZSwgdGV4dE5vZGUsIG9iaiwgIiNmaXJzdHAiXSwgZnVuY3Rpb24oIGksIGVsZSApIHsKKwkJc3Ry
aWN0RXF1YWwoIGpRdWVyeShlbGUpLmF0dHIoIm5vbmV4aXN0aW5nIiksIHVuZGVmaW5lZCwgImF0
dHIgd29ya3MgY29ycmVjdGx5IGZvciBub24gZXhpc3RpbmcgYXR0cmlidXRlcyAoYnVnICM3NTAw
KS4iICk7CisJfSk7Cit9KTsKKworaWYgKCAhaXNMb2NhbCApIHsKKwl0ZXN0KCJhdHRyKFN0cmlu
ZykgaW4gWE1MIEZpbGVzIiwgZnVuY3Rpb24oKSB7CisJCWV4cGVjdCgyKTsKKwkJc3RvcCgpOwor
CQlqUXVlcnkuZ2V0KCJkYXRhL2Rhc2hib2FyZC54bWwiLCBmdW5jdGlvbih4bWwpIHsKKwkJCWVx
dWFscyggalF1ZXJ5KCJsb2NhdGlvbnMiLCB4bWwpLmF0dHIoImNsYXNzIiksICJmb28iLCAiQ2hl
Y2sgY2xhc3MgYXR0cmlidXRlIGluIFhNTCBkb2N1bWVudCIgKTsKKwkJCWVxdWFscyggalF1ZXJ5
KCJsb2NhdGlvbiIsIHhtbCkuYXR0cigiZm9yIiksICJiYXIiLCAiQ2hlY2sgZm9yIGF0dHJpYnV0
ZSBpbiBYTUwgZG9jdW1lbnQiICk7CisJCQlzdGFydCgpOworCQl9KTsKKwl9KTsKK30KKwordGVz
dCgiYXR0cihTdHJpbmcsIEZ1bmN0aW9uKSIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgyKTsKKwll
cXVhbHMoIGpRdWVyeSgnI3RleHQxJykuYXR0cigndmFsdWUnLCBmdW5jdGlvbigpIHsgcmV0dXJu
IHRoaXMuaWQgO30pWzBdLnZhbHVlLCAidGV4dDEiLCAiU2V0IHZhbHVlIGZyb20gaWQiICk7CisJ
ZXF1YWxzKCBqUXVlcnkoJyN0ZXh0MScpLmF0dHIoJ3RpdGxlJywgZnVuY3Rpb24oaSkgeyByZXR1
cm4gaSB9KS5hdHRyKCd0aXRsZScpLCAiMCIsICJTZXQgdmFsdWUgd2l0aCBhbiBpbmRleCIpOwor
fSk7CisKK3Rlc3QoImF0dHIoSGFzaCkiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMyk7CisJdmFy
IHBhc3MgPSB0cnVlOworCWpRdWVyeSgiZGl2IikuYXR0cih7Zm9vOiAnYmF6Jywgem9vOiAncGlu
Zyd9KS5lYWNoKGZ1bmN0aW9uKCl7CisJCWlmICggdGhpcy5nZXRBdHRyaWJ1dGUoJ2ZvbycpICE9
ICJiYXoiICYmIHRoaXMuZ2V0QXR0cmlidXRlKCd6b28nKSAhPSAicGluZyIgKSBwYXNzID0gZmFs
c2U7CisJfSk7CisJb2soIHBhc3MsICJTZXQgTXVsdGlwbGUgQXR0cmlidXRlcyIgKTsKKwkJCSBl
cXVhbHMoIGpRdWVyeSgnI3RleHQxJykuYXR0cih7J3ZhbHVlJzogZnVuY3Rpb24oKSB7IHJldHVy
biB0aGlzLmlkOyB9fSlbMF0udmFsdWUsICJ0ZXh0MSIsICJTZXQgYXR0cmlidXRlIHRvIGNvbXB1
dGVkIHZhbHVlICMxIiApOworCQkJIGVxdWFscyggalF1ZXJ5KCcjdGV4dDEnKS5hdHRyKHsndGl0
bGUnOiBmdW5jdGlvbihpKSB7IHJldHVybiBpOyB9fSkuYXR0cigndGl0bGUnKSwgIjAiLCAiU2V0
IGF0dHJpYnV0ZSB0byBjb21wdXRlZCB2YWx1ZSAjMiIpOworCit9KTsKKwordGVzdCgiYXR0cihT
dHJpbmcsIE9iamVjdCkiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMzApOworCisJdmFyIGRpdiA9
IGpRdWVyeSgiZGl2IikuYXR0cigiZm9vIiwgImJhciIpLAorCQlmYWlsID0gZmFsc2U7CisKKwlm
b3IgKCB2YXIgaSA9IDA7IGkgPCBkaXYuc2l6ZSgpOyBpKysgKSB7CisJCWlmICggZGl2LmdldChp
KS5nZXRBdHRyaWJ1dGUoJ2ZvbycpICE9ICJiYXIiICl7CisJCQlmYWlsID0gaTsKKwkJCWJyZWFr
OworCQl9CisJfQorCisJZXF1YWxzKCBmYWlsLCBmYWxzZSwgIlNldCBBdHRyaWJ1dGUsIHRoZSAj
IitmYWlsKyIgZWxlbWVudCBkaWRuJ3QgZ2V0IHRoZSBhdHRyaWJ1dGUgJ2ZvbyciICk7CisKKwkv
LyBGYWlscyBvbiBJRSBzaW5jZSByZWNlbnQgY2hhbmdlcyB0byAuYXR0cigpCisJLy8gb2soIGpR
dWVyeSgiI2ZvbyIpLmF0dHIoeyJ3aWR0aCI6IG51bGx9KSwgIlRyeSB0byBzZXQgYW4gYXR0cmli
dXRlIHRvIG5vdGhpbmciICk7CisKKwlqUXVlcnkoIiNuYW1lIikuYXR0cignbmFtZScsICdzb21l
dGhpbmcnKTsKKwllcXVhbHMoIGpRdWVyeSgiI25hbWUiKS5hdHRyKCduYW1lJyksICdzb21ldGhp
bmcnLCAnU2V0IG5hbWUgYXR0cmlidXRlJyApOworCWpRdWVyeSgiI25hbWUiKS5hdHRyKCduYW1l
JywgbnVsbCk7CisJZXF1YWxzKCBqUXVlcnkoIiNuYW1lIikuYXR0cigndGl0bGUnKSwgJycsICdS
ZW1vdmUgbmFtZSBhdHRyaWJ1dGUnICk7CisJalF1ZXJ5KCIjY2hlY2syIikuYXR0cignY2hlY2tl
ZCcsIHRydWUpOworCWVxdWFscyggZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoZWNrMicpLmNo
ZWNrZWQsIHRydWUsICdTZXQgY2hlY2tlZCBhdHRyaWJ1dGUnICk7CisJalF1ZXJ5KCIjY2hlY2sy
IikuYXR0cignY2hlY2tlZCcsIGZhbHNlKTsKKwllcXVhbHMoIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdjaGVjazInKS5jaGVja2VkLCBmYWxzZSwgJ1NldCBjaGVja2VkIGF0dHJpYnV0ZScgKTsK
KwlqUXVlcnkoIiN0ZXh0MSIpLmF0dHIoJ3JlYWRvbmx5JywgdHJ1ZSk7CisJZXF1YWxzKCBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgndGV4dDEnKS5yZWFkT25seSwgdHJ1ZSwgJ1NldCByZWFkb25s
eSBhdHRyaWJ1dGUnICk7CisJalF1ZXJ5KCIjdGV4dDEiKS5hdHRyKCdyZWFkb25seScsIGZhbHNl
KTsKKwllcXVhbHMoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXh0MScpLnJlYWRPbmx5LCBm
YWxzZSwgJ1NldCByZWFkb25seSBhdHRyaWJ1dGUnICk7CisJalF1ZXJ5KCIjbmFtZSIpLmF0dHIo
J21heGxlbmd0aCcsICc1Jyk7CisJZXF1YWxzKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmFt
ZScpLm1heExlbmd0aCwgJzUnLCAnU2V0IG1heGxlbmd0aCBhdHRyaWJ1dGUnICk7CisJalF1ZXJ5
KCIjbmFtZSIpLmF0dHIoJ21heExlbmd0aCcsICcxMCcpOworCWVxdWFscyggZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ25hbWUnKS5tYXhMZW5ndGgsICcxMCcsICdTZXQgbWF4bGVuZ3RoIGF0dHJp
YnV0ZScgKTsKKworCXZhciBhdHRyaWJ1dGVOb2RlID0gZG9jdW1lbnQuY3JlYXRlQXR0cmlidXRl
KCJpcnJlbGV2YW50IiksCisJCWNvbW1lbnROb2RlID0gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgi
c29tZSBjb21tZW50IiksCisJCXRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoInNv
bWUgdGV4dCIpLAorCQlvYmogPSB7fTsKKwlqUXVlcnkuZWFjaCggW2RvY3VtZW50LCBvYmosICIj
Zmlyc3RwIl0sIGZ1bmN0aW9uKCBpLCBlbGUgKSB7CisJCXZhciAkZWxlID0galF1ZXJ5KCBlbGUg
KTsKKwkJJGVsZS5hdHRyKCAibm9uZXhpc3RpbmciLCAiZm9vIiApOworCQllcXVhbCggJGVsZS5h
dHRyKCJub25leGlzdGluZyIpLCAiZm9vIiwgImF0dHIobmFtZSwgdmFsdWUpIHdvcmtzIGNvcnJl
Y3RseSBmb3Igbm9uIGV4aXN0aW5nIGF0dHJpYnV0ZXMgKGJ1ZyAjNzUwMCkuIiApOworCX0pOwor
CWpRdWVyeS5lYWNoKCBbY29tbWVudE5vZGUsIHRleHROb2RlLCBhdHRyaWJ1dGVOb2RlXSwgZnVu
Y3Rpb24oIGksIGVsZSApIHsKKwkJdmFyICRlbGUgPSBqUXVlcnkoIGVsZSApOworCQkkZWxlLmF0
dHIoICJub25leGlzdGluZyIsICJmb28iICk7CisJCXN0cmljdEVxdWFsKCAkZWxlLmF0dHIoIm5v
bmV4aXN0aW5nIiksIHVuZGVmaW5lZCwgImF0dHIobmFtZSwgdmFsdWUpIHdvcmtzIGNvcnJlY3Rs
eSBvbiBjb21tZW50IGFuZCB0ZXh0IG5vZGVzIChidWcgIzc1MDApLiIgKTsKKwl9KTsKKwkvL2Ns
ZWFudXAKKwlqUXVlcnkuZWFjaCggW2RvY3VtZW50LCAiI2ZpcnN0cCJdLCBmdW5jdGlvbiggaSwg
ZWxlICkgeworCQlqUXVlcnkoIGVsZSApLnJlbW92ZUF0dHIoIm5vbmV4aXN0aW5nIik7CisJfSk7
CisKKwl2YXIgdGFibGUgPSBqUXVlcnkoJyN0YWJsZScpLmFwcGVuZCgiPHRyPjx0ZD5jZWxsPC90
ZD48L3RyPjx0cj48dGQ+Y2VsbDwvdGQ+PHRkPmNlbGw8L3RkPjwvdHI+PHRyPjx0ZD5jZWxsPC90
ZD48dGQ+Y2VsbDwvdGQ+PC90cj4iKSwKKwkJdGQgPSB0YWJsZS5maW5kKCd0ZDpmaXJzdCcpOwor
CXRkLmF0dHIoInJvd3NwYW4iLCAiMiIpOworCWVxdWFscyggdGRbMF0ucm93U3BhbiwgMiwgIkNo
ZWNrIHJvd3NwYW4gaXMgY29ycmVjdGx5IHNldCIgKTsKKwl0ZC5hdHRyKCJjb2xzcGFuIiwgIjIi
KTsKKwllcXVhbHMoIHRkWzBdLmNvbFNwYW4sIDIsICJDaGVjayBjb2xzcGFuIGlzIGNvcnJlY3Rs
eSBzZXQiICk7CisJdGFibGUuYXR0cigiY2VsbHNwYWNpbmciLCAiMiIpOworCWVxdWFscyggdGFi
bGVbMF0uY2VsbFNwYWNpbmcsIDIsICJDaGVjayBjZWxsc3BhY2luZyBpcyBjb3JyZWN0bHkgc2V0
IiApOworCisJLy8gZm9yICMxMDcwCisJalF1ZXJ5KCIjbmFtZSIpLmF0dHIoJ3NvbWVBdHRyJywg
JzAnKTsKKwllcXVhbHMoIGpRdWVyeSgiI25hbWUiKS5hdHRyKCdzb21lQXR0cicpLCAnMCcsICdT
ZXQgYXR0cmlidXRlIHRvIGEgc3RyaW5nIG9mICIwIicgKTsKKwlqUXVlcnkoIiNuYW1lIikuYXR0
cignc29tZUF0dHInLCAwKTsKKwllcXVhbHMoIGpRdWVyeSgiI25hbWUiKS5hdHRyKCdzb21lQXR0
cicpLCAwLCAnU2V0IGF0dHJpYnV0ZSB0byB0aGUgbnVtYmVyIDAnICk7CisJalF1ZXJ5KCIjbmFt
ZSIpLmF0dHIoJ3NvbWVBdHRyJywgMSk7CisJZXF1YWxzKCBqUXVlcnkoIiNuYW1lIikuYXR0cign
c29tZUF0dHInKSwgMSwgJ1NldCBhdHRyaWJ1dGUgdG8gdGhlIG51bWJlciAxJyApOworCisJLy8g
dXNpbmcgY29udGVudHMgd2lsbCBnZXQgY29tbWVudHMgcmVndWxhciwgdGV4dCwgYW5kIGNvbW1l
bnQgbm9kZXMKKwl2YXIgaiA9IGpRdWVyeSgiI25vbm5vZGVzIikuY29udGVudHMoKTsKKworCWou
YXR0cigibmFtZSIsICJhdHRydmFsdWUiKTsKKwllcXVhbHMoIGouYXR0cigibmFtZSIpLCAiYXR0
cnZhbHVlIiwgIkNoZWNrIG5vZGUsdGV4dG5vZGUsY29tbWVudCBmb3IgYXR0ciIgKTsKKwlqLnJl
bW92ZUF0dHIoIm5hbWUiKTsKKworCVFVbml0LnJlc2V0KCk7CisKKwl2YXIgdHlwZSA9IGpRdWVy
eSgiI2NoZWNrMiIpLmF0dHIoJ3R5cGUnKTsKKwl2YXIgdGhyb3duID0gZmFsc2U7CisJdHJ5IHsK
KwkJalF1ZXJ5KCIjY2hlY2syIikuYXR0cigndHlwZScsJ2hpZGRlbicpOworCX0gY2F0Y2goZSkg
eworCQl0aHJvd24gPSB0cnVlOworCX0KKwlvayggdGhyb3duLCAiRXhjZXB0aW9uIHRocm93biB3
aGVuIHRyeWluZyB0byBjaGFuZ2UgdHlwZSBwcm9wZXJ0eSIgKTsKKwllcXVhbHMoIHR5cGUsIGpR
dWVyeSgiI2NoZWNrMiIpLmF0dHIoJ3R5cGUnKSwgIlZlcmlmeSB0aGF0IHlvdSBjYW4ndCBjaGFu
Z2UgdGhlIHR5cGUgb2YgYW4gaW5wdXQgZWxlbWVudCIgKTsKKworCXZhciBjaGVjayA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CisJdmFyIHRocm93biA9IHRydWU7CisJdHJ5IHsK
KwkJalF1ZXJ5KGNoZWNrKS5hdHRyKCd0eXBlJywnY2hlY2tib3gnKTsKKwl9IGNhdGNoKGUpIHsK
KwkJdGhyb3duID0gZmFsc2U7CisJfQorCW9rKCB0aHJvd24sICJFeGNlcHRpb24gdGhyb3duIHdo
ZW4gdHJ5aW5nIHRvIGNoYW5nZSB0eXBlIHByb3BlcnR5IiApOworCWVxdWFscyggImNoZWNrYm94
IiwgalF1ZXJ5KGNoZWNrKS5hdHRyKCd0eXBlJyksICJWZXJpZnkgdGhhdCB5b3UgY2FuIGNoYW5n
ZSB0aGUgdHlwZSBvZiBhbiBpbnB1dCBlbGVtZW50IHRoYXQgaXNuJ3QgaW4gdGhlIERPTSIgKTsK
KworCXZhciBjaGVjayA9IGpRdWVyeSgiPGlucHV0IC8+Iik7CisJdmFyIHRocm93biA9IHRydWU7
CisJdHJ5IHsKKwkJY2hlY2suYXR0cigndHlwZScsJ2NoZWNrYm94Jyk7CisJfSBjYXRjaChlKSB7
CisJCXRocm93biA9IGZhbHNlOworCX0KKwlvayggdGhyb3duLCAiRXhjZXB0aW9uIHRocm93biB3
aGVuIHRyeWluZyB0byBjaGFuZ2UgdHlwZSBwcm9wZXJ0eSIgKTsKKwllcXVhbHMoICJjaGVja2Jv
eCIsIGNoZWNrLmF0dHIoJ3R5cGUnKSwgIlZlcmlmeSB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSB0
eXBlIG9mIGFuIGlucHV0IGVsZW1lbnQgdGhhdCBpc24ndCBpbiB0aGUgRE9NIiApOworCisJdmFy
IGJ1dHRvbiA9IGpRdWVyeSgiI2J1dHRvbiIpOworCXZhciB0aHJvd24gPSBmYWxzZTsKKwl0cnkg
eworCQlidXR0b24uYXR0cigndHlwZScsJ3N1Ym1pdCcpOworCX0gY2F0Y2goZSkgeworCQl0aHJv
d24gPSB0cnVlOworCX0KKwlvayggdGhyb3duLCAiRXhjZXB0aW9uIHRocm93biB3aGVuIHRyeWlu
ZyB0byBjaGFuZ2UgdHlwZSBwcm9wZXJ0eSIgKTsKKwllcXVhbHMoICJidXR0b24iLCBidXR0b24u
YXR0cigndHlwZScpLCAiVmVyaWZ5IHRoYXQgeW91IGNhbid0IGNoYW5nZSB0aGUgdHlwZSBvZiBh
IGJ1dHRvbiBlbGVtZW50IiApOworfSk7CisKK3Rlc3QoImF0dHIoanF1ZXJ5X21ldGhvZCkiLCBm
dW5jdGlvbigpeworCWV4cGVjdCg3KTsKKworCXZhciAkZWxlbSA9IGpRdWVyeSgiPGRpdiAvPiIp
LAorCQllbGVtID0gJGVsZW1bMF07CisKKwkvLyBvbmUgYXQgYSB0aW1lCisJJGVsZW0uYXR0cih7
J2h0bWwnOiAnZm9vJ30sIHRydWUpOworCWVxdWFscyggZWxlbS5pbm5lckhUTUwsICdmb28nLCAn
YXR0cihodG1sKScpOworCisJJGVsZW0uYXR0cih7J3RleHQnOiAnYmFyJ30sIHRydWUpOworCWVx
dWFscyggZWxlbS5pbm5lckhUTUwsICdiYXInLCAnYXR0cih0ZXh0KScpOworCisJJGVsZW0uYXR0
cih7J2Nzcyc6IHtjb2xvcjoncmVkJ319LCB0cnVlKTsKKwlvayggL14oI2ZmMDAwMHxyZWQpJC9p
LnRlc3QoZWxlbS5zdHlsZS5jb2xvciksICdhdHRyKGNzcyknKTsKKworCSRlbGVtLmF0dHIoeydo
ZWlnaHQnOiAxMH0sIHRydWUpOworCWVxdWFscyggZWxlbS5zdHlsZS5oZWlnaHQsICcxMHB4Jywg
J2F0dHIoaGVpZ2h0KScpOworCisJLy8gTXVsdGlwbGUgYXR0cmlidXRlcworCisJJGVsZW0uYXR0
cih7CisJCXdpZHRoOjEwLAorCQljc3M6eyBwYWRkaW5nTGVmdDoxLCBwYWRkaW5nUmlnaHQ6MSB9
CisJfSwgdHJ1ZSk7CisKKwllcXVhbHMoIGVsZW0uc3R5bGUud2lkdGgsICcxMHB4JywgJ2F0dHIo
ey4uLn0pJyk7CisJZXF1YWxzKCBlbGVtLnN0eWxlLnBhZGRpbmdMZWZ0LCAnMXB4JywgJ2F0dHIo
ey4uLn0pJyk7CisJZXF1YWxzKCBlbGVtLnN0eWxlLnBhZGRpbmdSaWdodCwgJzFweCcsICdhdHRy
KHsuLi59KScpOworfSk7CisKK2lmICggIWlzTG9jYWwgKSB7CisJdGVzdCgiYXR0cihTdHJpbmcs
IE9iamVjdCkgLSBMb2FkZWQgdmlhIFhNTCBkb2N1bWVudCIsIGZ1bmN0aW9uKCkgeworCQlleHBl
Y3QoMik7CisJCXN0b3AoKTsKKwkJalF1ZXJ5LmdldCgnZGF0YS9kYXNoYm9hcmQueG1sJywgZnVu
Y3Rpb24oeG1sKSB7CisJCQl2YXIgdGl0bGVzID0gW107CisJCQlqUXVlcnkoJ3RhYicsIHhtbCku
ZWFjaChmdW5jdGlvbigpIHsKKwkJCQl0aXRsZXMucHVzaChqUXVlcnkodGhpcykuYXR0cigndGl0
bGUnKSk7CisJCQl9KTsKKwkJCWVxdWFscyggdGl0bGVzWzBdLCAnTG9jYXRpb24nLCAnYXR0cigp
IGluIFhNTCBjb250ZXh0OiBDaGVjayBmaXJzdCB0aXRsZScgKTsKKwkJCWVxdWFscyggdGl0bGVz
WzFdLCAnVXNlcnMnLCAnYXR0cigpIGluIFhNTCBjb250ZXh0OiBDaGVjayBzZWNvbmQgdGl0bGUn
ICk7CisJCQlzdGFydCgpOworCQl9KTsKKwl9KTsKK30KKwordGVzdCgiYXR0cigndGFiaW5kZXgn
KSIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCg4KTsKKworCS8vIGVsZW1lbnRzIG5vdCBuYXRpdmVs
eSB0YWJiYWJsZQorCWVxdWFscyhqUXVlcnkoJyNsaXN0V2l0aFRhYkluZGV4JykuYXR0cigndGFi
aW5kZXgnKSwgNSwgJ25vdCBuYXRpdmVseSB0YWJiYWJsZSwgd2l0aCB0YWJpbmRleCBzZXQgdG8g
MCcpOworCWVxdWFscyhqUXVlcnkoJyNkaXZXaXRoTm9UYWJJbmRleCcpLmF0dHIoJ3RhYmluZGV4
JyksIHVuZGVmaW5lZCwgJ25vdCBuYXRpdmVseSB0YWJiYWJsZSwgbm8gdGFiaW5kZXggc2V0Jyk7
CisKKwkvLyBhbmNob3Igd2l0aCBocmVmCisJZXF1YWxzKGpRdWVyeSgnI2xpbmtXaXRoTm9UYWJJ
bmRleCcpLmF0dHIoJ3RhYmluZGV4JyksIDAsICdhbmNob3Igd2l0aCBocmVmLCBubyB0YWJpbmRl
eCBzZXQnKTsKKwllcXVhbHMoalF1ZXJ5KCcjbGlua1dpdGhUYWJJbmRleCcpLmF0dHIoJ3RhYmlu
ZGV4JyksIDIsICdhbmNob3Igd2l0aCBocmVmLCB0YWJpbmRleCBzZXQgdG8gMicpOworCWVxdWFs
cyhqUXVlcnkoJyNsaW5rV2l0aE5lZ2F0aXZlVGFiSW5kZXgnKS5hdHRyKCd0YWJpbmRleCcpLCAt
MSwgJ2FuY2hvciB3aXRoIGhyZWYsIHRhYmluZGV4IHNldCB0byAtMScpOworCisJLy8gYW5jaG9y
IHdpdGhvdXQgaHJlZgorCWVxdWFscyhqUXVlcnkoJyNsaW5rV2l0aE5vSHJlZldpdGhOb1RhYklu
ZGV4JykuYXR0cigndGFiaW5kZXgnKSwgdW5kZWZpbmVkLCAnYW5jaG9yIHdpdGhvdXQgaHJlZiwg
bm8gdGFiaW5kZXggc2V0Jyk7CisJZXF1YWxzKGpRdWVyeSgnI2xpbmtXaXRoTm9IcmVmV2l0aFRh
YkluZGV4JykuYXR0cigndGFiaW5kZXgnKSwgMSwgJ2FuY2hvciB3aXRob3V0IGhyZWYsIHRhYmlu
ZGV4IHNldCB0byAyJyk7CisJZXF1YWxzKGpRdWVyeSgnI2xpbmtXaXRoTm9IcmVmV2l0aE5lZ2F0
aXZlVGFiSW5kZXgnKS5hdHRyKCd0YWJpbmRleCcpLCAtMSwgJ2FuY2hvciB3aXRob3V0IGhyZWYs
IG5vIHRhYmluZGV4IHNldCcpOworfSk7CisKK3Rlc3QoImF0dHIoJ3RhYmluZGV4JywgdmFsdWUp
IiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDkpOworCisJdmFyIGVsZW1lbnQgPSBqUXVlcnkoJyNk
aXZXaXRoTm9UYWJJbmRleCcpOworCWVxdWFscyhlbGVtZW50LmF0dHIoJ3RhYmluZGV4JyksIHVu
ZGVmaW5lZCwgJ3N0YXJ0IHdpdGggbm8gdGFiaW5kZXgnKTsKKworCS8vIHNldCBhIHBvc2l0aXZl
IHN0cmluZworCWVsZW1lbnQuYXR0cigndGFiaW5kZXgnLCAnMScpOworCWVxdWFscyhlbGVtZW50
LmF0dHIoJ3RhYmluZGV4JyksIDEsICdzZXQgdGFiaW5kZXggdG8gMSAoc3RyaW5nKScpOworCisJ
Ly8gc2V0IGEgemVybyBzdHJpbmcKKwllbGVtZW50LmF0dHIoJ3RhYmluZGV4JywgJzAnKTsKKwll
cXVhbHMoZWxlbWVudC5hdHRyKCd0YWJpbmRleCcpLCAwLCAnc2V0IHRhYmluZGV4IHRvIDAgKHN0
cmluZyknKTsKKworCS8vIHNldCBhIG5lZ2F0aXZlIHN0cmluZworCWVsZW1lbnQuYXR0cigndGFi
aW5kZXgnLCAnLTEnKTsKKwllcXVhbHMoZWxlbWVudC5hdHRyKCd0YWJpbmRleCcpLCAtMSwgJ3Nl
dCB0YWJpbmRleCB0byAtMSAoc3RyaW5nKScpOworCisJLy8gc2V0IGEgcG9zaXRpdmUgbnVtYmVy
CisJZWxlbWVudC5hdHRyKCd0YWJpbmRleCcsIDEpOworCWVxdWFscyhlbGVtZW50LmF0dHIoJ3Rh
YmluZGV4JyksIDEsICdzZXQgdGFiaW5kZXggdG8gMSAobnVtYmVyKScpOworCisJLy8gc2V0IGEg
emVybyBudW1iZXIKKwllbGVtZW50LmF0dHIoJ3RhYmluZGV4JywgMCk7CisJZXF1YWxzKGVsZW1l
bnQuYXR0cigndGFiaW5kZXgnKSwgMCwgJ3NldCB0YWJpbmRleCB0byAwIChudW1iZXIpJyk7CisK
KwkvLyBzZXQgYSBuZWdhdGl2ZSBudW1iZXIKKwllbGVtZW50LmF0dHIoJ3RhYmluZGV4JywgLTEp
OworCWVxdWFscyhlbGVtZW50LmF0dHIoJ3RhYmluZGV4JyksIC0xLCAnc2V0IHRhYmluZGV4IHRv
IC0xIChudW1iZXIpJyk7CisKKwllbGVtZW50ID0galF1ZXJ5KCcjbGlua1dpdGhUYWJJbmRleCcp
OworCWVxdWFscyhlbGVtZW50LmF0dHIoJ3RhYmluZGV4JyksIDIsICdzdGFydCB3aXRoIHRhYmlu
ZGV4IDInKTsKKworCWVsZW1lbnQuYXR0cigndGFiaW5kZXgnLCAtMSk7CisJZXF1YWxzKGVsZW1l
bnQuYXR0cigndGFiaW5kZXgnKSwgLTEsICdzZXQgbmVnYXRpdmUgdGFiaW5kZXgnKTsKK30pOwor
Cit0ZXN0KCJyZW1vdmVBdHRyKFN0cmluZykiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoNyk7CisJ
ZXF1YWxzKCBqUXVlcnkoJyNtYXJrJykucmVtb3ZlQXR0ciggImNsYXNzIiApWzBdLmNsYXNzTmFt
ZSwgIiIsICJyZW1vdmUgY2xhc3MiICk7CisKKwl2YXIgYXR0cmlidXRlTm9kZSA9IGRvY3VtZW50
LmNyZWF0ZUF0dHJpYnV0ZSgiaXJyZWxldmFudCIpLAorCQljb21tZW50Tm9kZSA9IGRvY3VtZW50
LmNyZWF0ZUNvbW1lbnQoInNvbWUgY29tbWVudCIpLAorCQl0ZXh0Tm9kZSA9IGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKCJzb21lIHRleHQiKSwKKwkJb2JqID0ge307CisJLy9yZW1vdmVBdHRyIG9u
bHkgcmVhbGx5IHJlbW92ZXMgb24gRE9NIGVsZW1lbnQgbm9kZXMgaGFuZGxlIGFsbCBvdGhlciBz
ZXBlcmF0eWwKKwlzdHJpY3RFcXVhbCggalF1ZXJ5KCAiI2ZpcnN0cCIgKS5hdHRyKCAibm9uZXhp
c3RpbmciLCAiZm9vIiApLnJlbW92ZUF0dHIoICJub25leGlzdGluZyIgKVswXS5ub25leGlzdGlu
ZywgdW5kZWZpbmVkLCAicmVtb3ZlQXR0ciB3b3JrcyBjb3JyZWN0bHkgb24gRE9NIGVsZW1lbnQg
bm9kZXMiICk7CisKKwlqUXVlcnkuZWFjaCggW2RvY3VtZW50LCBvYmpdLCBmdW5jdGlvbiggaSwg
ZWxlICkgeworCQl2YXIgJGVsZSA9IGpRdWVyeSggZWxlICk7CisJCSRlbGUuYXR0ciggIm5vbmV4
aXN0aW5nIiwgImZvbyIgKS5yZW1vdmVBdHRyKCAibm9uZXhpc3RpbmciICk7CisJCXN0cmljdEVx
dWFsKCBlbGUubm9uZXhpc3RpbmcsICIiLCAicmVtb3ZlQXR0ciB3b3JrcyBjb3JyZWN0bHkgb24g
bm9uIERPTSBlbGVtZW50IG5vZGVzIChidWcgIzc1MDApLiIgKTsKKwl9KTsKKwlqUXVlcnkuZWFj
aCggW2NvbW1lbnROb2RlLCB0ZXh0Tm9kZSwgYXR0cmlidXRlTm9kZV0sIGZ1bmN0aW9uKCBpLCBl
bGUgKSB7CisJCSRlbGUgPSBqUXVlcnkoIGVsZSApOworCQkkZWxlLmF0dHIoICJub25leGlzdGlu
ZyIsICJmb28iICkucmVtb3ZlQXR0ciggIm5vbmV4aXN0aW5nIiApOworCQlzdHJpY3RFcXVhbCgg
ZWxlLm5vbmV4aXN0aW5nLCB1bmRlZmluZWQsICJyZW1vdmVBdHRyIHdvcmtzIGNvcnJlY3RseSBv
biBub24gRE9NIGVsZW1lbnQgbm9kZXMgKGJ1ZyAjNzUwMCkuIiApOworCX0pOworfSk7CisKK3Rl
c3QoInZhbCgpIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDIzKTsKKworCWRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCd0ZXh0MScpLnZhbHVlID0gImJsYSI7CisJZXF1YWxzKCBqUXVlcnkoIiN0ZXh0
MSIpLnZhbCgpLCAiYmxhIiwgIkNoZWNrIGZvciBtb2RpZmllZCB2YWx1ZSBvZiBpbnB1dCBlbGVt
ZW50IiApOworCisJUVVuaXQucmVzZXQoKTsKKworCWVxdWFscyggalF1ZXJ5KCIjdGV4dDEiKS52
YWwoKSwgIlRlc3QiLCAiQ2hlY2sgZm9yIHZhbHVlIG9mIGlucHV0IGVsZW1lbnQiICk7CisJLy8g
dGlja2V0ICMxNzE0IHRoaXMgY2F1c2VkIGEgSlMgZXJyb3IgaW4gSUUKKwllcXVhbHMoIGpRdWVy
eSgiI2ZpcnN0IikudmFsKCksICIiLCAiQ2hlY2sgYSBwYXJhZ3JhcGggZWxlbWVudCB0byBzZWUg
aWYgaXQgaGFzIGEgdmFsdWUiICk7CisJb2soIGpRdWVyeShbXSkudmFsKCkgPT09IHVuZGVmaW5l
ZCwgIkNoZWNrIGFuIGVtcHR5IGpRdWVyeSBvYmplY3Qgd2lsbCByZXR1cm4gdW5kZWZpbmVkIGZy
b20gdmFsIiApOworCisJZXF1YWxzKCBqUXVlcnkoJyNzZWxlY3QyJykudmFsKCksICczJywgJ0Nh
bGwgdmFsKCkgb24gYSBzaW5nbGU9InNpbmdsZSIgc2VsZWN0JyApOworCisJc2FtZSggalF1ZXJ5
KCcjc2VsZWN0MycpLnZhbCgpLCBbJzEnLCAnMiddLCAnQ2FsbCB2YWwoKSBvbiBhIG11bHRpcGxl
PSJtdWx0aXBsZSIgc2VsZWN0JyApOworCisJZXF1YWxzKCBqUXVlcnkoJyNvcHRpb24zYycpLnZh
bCgpLCAnMicsICdDYWxsIHZhbCgpIG9uIGEgb3B0aW9uIGVsZW1lbnQgd2l0aCB2YWx1ZScgKTsK
KworCWVxdWFscyggalF1ZXJ5KCcjb3B0aW9uM2EnKS52YWwoKSwgJycsICdDYWxsIHZhbCgpIG9u
IGEgb3B0aW9uIGVsZW1lbnQgd2l0aCBlbXB0eSB2YWx1ZScgKTsKKworCWVxdWFscyggalF1ZXJ5
KCcjb3B0aW9uM2UnKS52YWwoKSwgJ25vIHZhbHVlJywgJ0NhbGwgdmFsKCkgb24gYSBvcHRpb24g
ZWxlbWVudCB3aXRoIG5vIHZhbHVlIGF0dHJpYnV0ZScgKTsKKworCWVxdWFscyggalF1ZXJ5KCcj
b3B0aW9uM2EnKS52YWwoKSwgJycsICdDYWxsIHZhbCgpIG9uIGEgb3B0aW9uIGVsZW1lbnQgd2l0
aCBubyB2YWx1ZSBhdHRyaWJ1dGUnICk7CisKKwlqUXVlcnkoJyNzZWxlY3QzJykudmFsKCIiKTsK
KwlzYW1lKCBqUXVlcnkoJyNzZWxlY3QzJykudmFsKCksIFsnJ10sICdDYWxsIHZhbCgpIG9uIGEg
bXVsdGlwbGU9Im11bHRpcGxlIiBzZWxlY3QnICk7CisKKwlzYW1lKCBqUXVlcnkoJyNzZWxlY3Q0
JykudmFsKCksIFtdLCAnQ2FsbCB2YWwoKSBvbiBtdWx0aXBsZT0ibXVsdGlwbGUiIHNlbGVjdCB3
aXRoIGFsbCBkaXNhYmxlZCBvcHRpb25zJyApOworCisJalF1ZXJ5KCcjc2VsZWN0NCBvcHRncm91
cCcpLmFkZCgnI3NlbGVjdDQgPiBbZGlzYWJsZWRdJykuYXR0cignZGlzYWJsZWQnLCBmYWxzZSk7
CisJc2FtZSggalF1ZXJ5KCcjc2VsZWN0NCcpLnZhbCgpLCBbJzInLCAnMyddLCAnQ2FsbCB2YWwo
KSBvbiBtdWx0aXBsZT0ibXVsdGlwbGUiIHNlbGVjdCB3aXRoIHNvbWUgZGlzYWJsZWQgb3B0aW9u
cycgKTsKKworCWpRdWVyeSgnI3NlbGVjdDQnKS5hdHRyKCdkaXNhYmxlZCcsIHRydWUpOworCXNh
bWUoIGpRdWVyeSgnI3NlbGVjdDQnKS52YWwoKSwgWycyJywgJzMnXSwgJ0NhbGwgdmFsKCkgb24g
ZGlzYWJsZWQgbXVsdGlwbGU9Im11bHRpcGxlIiBzZWxlY3QnICk7CisKKwllcXVhbHMoIGpRdWVy
eSgnI3NlbGVjdDUnKS52YWwoKSwgIjMiLCAiQ2hlY2sgdmFsdWUgb24gYW1iaWd1b3VzIHNlbGVj
dC4iICk7CisKKwlqUXVlcnkoJyNzZWxlY3Q1JykudmFsKDEpOworCWVxdWFscyggalF1ZXJ5KCcj
c2VsZWN0NScpLnZhbCgpLCAiMSIsICJDaGVjayB2YWx1ZSBvbiBhbWJpZ3VvdXMgc2VsZWN0LiIg
KTsKKworCWpRdWVyeSgnI3NlbGVjdDUnKS52YWwoMyk7CisJZXF1YWxzKCBqUXVlcnkoJyNzZWxl
Y3Q1JykudmFsKCksICIzIiwgIkNoZWNrIHZhbHVlIG9uIGFtYmlndW91cyBzZWxlY3QuIiApOwor
CisJdmFyIGNoZWNrcyA9IGpRdWVyeSgiPGlucHV0IHR5cGU9J2NoZWNrYm94JyBuYW1lPSd0ZXN0
JyB2YWx1ZT0nMScvPjxpbnB1dCB0eXBlPSdjaGVja2JveCcgbmFtZT0ndGVzdCcgdmFsdWU9JzIn
Lz48aW5wdXQgdHlwZT0nY2hlY2tib3gnIG5hbWU9J3Rlc3QnIHZhbHVlPScnLz48aW5wdXQgdHlw
ZT0nY2hlY2tib3gnIG5hbWU9J3Rlc3QnLz4iKS5hcHBlbmRUbygiI2Zvcm0iKTsKKworCXNhbWUo
IGNoZWNrcy5zZXJpYWxpemUoKSwgIiIsICJHZXQgdW5jaGVja2VkIHZhbHVlcy4iICk7CisKKwll
cXVhbHMoIGNoZWNrcy5lcSgzKS52YWwoKSwgIm9uIiwgIk1ha2Ugc3VyZSBhIHZhbHVlIG9mICdv
bicgaXMgcHJvdmlkZWQgaWYgbm9uZSBpcyBzcGVjaWZpZWQuIiApOworCisJY2hlY2tzLnZhbChb
ICIyIiBdKTsKKwlzYW1lKCBjaGVja3Muc2VyaWFsaXplKCksICJ0ZXN0PTIiLCAiR2V0IGEgc2lu
Z2xlIGNoZWNrZWQgdmFsdWUuIiApOworCisJY2hlY2tzLnZhbChbICIxIiwgIiIgXSk7CisJc2Ft
ZSggY2hlY2tzLnNlcmlhbGl6ZSgpLCAidGVzdD0xJnRlc3Q9IiwgIkdldCBtdWx0aXBsZSBjaGVj
a2VkIHZhbHVlcy4iICk7CisKKwljaGVja3MudmFsKFsgIiIsICIyIiBdKTsKKwlzYW1lKCBjaGVj
a3Muc2VyaWFsaXplKCksICJ0ZXN0PTImdGVzdD0iLCAiR2V0IG11bHRpcGxlIGNoZWNrZWQgdmFs
dWVzLiIgKTsKKworCWNoZWNrcy52YWwoWyAiMSIsICJvbiIgXSk7CisJc2FtZSggY2hlY2tzLnNl
cmlhbGl6ZSgpLCAidGVzdD0xJnRlc3Q9b24iLCAiR2V0IG11bHRpcGxlIGNoZWNrZWQgdmFsdWVz
LiIgKTsKKworCWNoZWNrcy5yZW1vdmUoKTsKK30pOworCit2YXIgdGVzdFZhbCA9IGZ1bmN0aW9u
KHZhbHVlT2JqKSB7CisJZXhwZWN0KDgpOworCisJalF1ZXJ5KCIjdGV4dDEiKS52YWwodmFsdWVP
YmooICd0ZXN0JyApKTsKKwllcXVhbHMoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXh0MScp
LnZhbHVlLCAidGVzdCIsICJDaGVjayBmb3IgbW9kaWZpZWQgKHZpYSB2YWwoU3RyaW5nKSkgdmFs
dWUgb2YgaW5wdXQgZWxlbWVudCIgKTsKKworCWpRdWVyeSgiI3RleHQxIikudmFsKHZhbHVlT2Jq
KCB1bmRlZmluZWQgKSk7CisJZXF1YWxzKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGV4dDEn
KS52YWx1ZSwgIiIsICJDaGVjayBmb3IgbW9kaWZpZWQgKHZpYSB2YWwodW5kZWZpbmVkKSkgdmFs
dWUgb2YgaW5wdXQgZWxlbWVudCIgKTsKKworCWpRdWVyeSgiI3RleHQxIikudmFsKHZhbHVlT2Jq
KCA2NyApKTsKKwllcXVhbHMoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXh0MScpLnZhbHVl
LCAiNjciLCAiQ2hlY2sgZm9yIG1vZGlmaWVkICh2aWEgdmFsKE51bWJlcikpIHZhbHVlIG9mIGlu
cHV0IGVsZW1lbnQiICk7CisKKwlqUXVlcnkoIiN0ZXh0MSIpLnZhbCh2YWx1ZU9iaiggbnVsbCAp
KTsKKwllcXVhbHMoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXh0MScpLnZhbHVlLCAiIiwg
IkNoZWNrIGZvciBtb2RpZmllZCAodmlhIHZhbChudWxsKSkgdmFsdWUgb2YgaW5wdXQgZWxlbWVu
dCIgKTsKKworCWpRdWVyeSgiI3NlbGVjdDEiKS52YWwodmFsdWVPYmooICIzIiApKTsKKwllcXVh
bHMoIGpRdWVyeSgiI3NlbGVjdDEiKS52YWwoKSwgIjMiLCAiQ2hlY2sgZm9yIG1vZGlmaWVkICh2
aWEgdmFsKFN0cmluZykpIHZhbHVlIG9mIHNlbGVjdCBlbGVtZW50IiApOworCisJalF1ZXJ5KCIj
c2VsZWN0MSIpLnZhbCh2YWx1ZU9iaiggMiApKTsKKwllcXVhbHMoIGpRdWVyeSgiI3NlbGVjdDEi
KS52YWwoKSwgIjIiLCAiQ2hlY2sgZm9yIG1vZGlmaWVkICh2aWEgdmFsKE51bWJlcikpIHZhbHVl
IG9mIHNlbGVjdCBlbGVtZW50IiApOworCisJalF1ZXJ5KCIjc2VsZWN0MSIpLmFwcGVuZCgiPG9w
dGlvbiB2YWx1ZT0nNCc+Zm91cjwvb3B0aW9uPiIpOworCWpRdWVyeSgiI3NlbGVjdDEiKS52YWwo
dmFsdWVPYmooIDQgKSk7CisJZXF1YWxzKCBqUXVlcnkoIiNzZWxlY3QxIikudmFsKCksICI0Iiwg
IlNob3VsZCBiZSBwb3NzaWJsZSB0byBzZXQgdGhlIHZhbCgpIHRvIGEgbmV3bHkgY3JlYXRlZCBv
cHRpb24iICk7CisKKwkvLyB1c2luZyBjb250ZW50cyB3aWxsIGdldCBjb21tZW50cyByZWd1bGFy
LCB0ZXh0LCBhbmQgY29tbWVudCBub2RlcworCXZhciBqID0galF1ZXJ5KCIjbm9ubm9kZXMiKS5j
b250ZW50cygpOworCWoudmFsKHZhbHVlT2JqKCAiYXNkZiIgKSk7CisJZXF1YWxzKCBqLnZhbCgp
LCAiYXNkZiIsICJDaGVjayBub2RlLHRleHRub2RlLGNvbW1lbnQgd2l0aCB2YWwoKSIgKTsKKwlq
LnJlbW92ZUF0dHIoInZhbHVlIik7Cit9CisKK3Rlc3QoInZhbChTdHJpbmcvTnVtYmVyKSIsIGZ1
bmN0aW9uKCkgeworCXRlc3RWYWwoYmFyZU9iaik7Cit9KTsKKwordGVzdCgidmFsKEZ1bmN0aW9u
KSIsIGZ1bmN0aW9uKCkgeworCXRlc3RWYWwoZnVuY3Rpb25SZXR1cm5pbmdPYmopOworfSk7CisK
K3Rlc3QoICJ2YWwoQXJyYXkgb2YgTnVtYmVycykgKEJ1ZyAjNzEyMykiLCBmdW5jdGlvbigpIHsK
KwlleHBlY3QoNCk7CisJalF1ZXJ5KCcjZm9ybScpLmFwcGVuZCgnPGlucHV0IHR5cGU9ImNoZWNr
Ym94IiBuYW1lPSJhcnJheVRlc3QiIHZhbHVlPSIxIiAvPjxpbnB1dCB0eXBlPSJjaGVja2JveCIg
bmFtZT0iYXJyYXlUZXN0IiB2YWx1ZT0iMiIgLz48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9
ImFycmF5VGVzdCIgdmFsdWU9IjMiIGNoZWNrZWQ9ImNoZWNrZWQiIC8+PGlucHV0IHR5cGU9ImNo
ZWNrYm94IiBuYW1lPSJhcnJheVRlc3QiIHZhbHVlPSI0IiAvPicpOworCXZhciBlbGVtZW50cyA9
IGpRdWVyeSgnaW5wdXRbbmFtZT1hcnJheVRlc3RdJykudmFsKFsgMSwgMiBdKTsKKwlvayggZWxl
bWVudHNbMF0uY2hlY2tlZCwgIkZpcnN0IGVsZW1lbnQgd2FzIGNoZWNrZWQiICk7CisJb2soIGVs
ZW1lbnRzWzFdLmNoZWNrZWQsICJTZWNvbmQgZWxlbWVudCB3YXMgY2hlY2tlZCIgKTsKKwlvaygg
IWVsZW1lbnRzWzJdLmNoZWNrZWQsICJUaGlyZCBlbGVtZW50IHdhcyB1bmNoZWNrZWQiICk7CisJ
b2soICFlbGVtZW50c1szXS5jaGVja2VkLCAiRm91cnRoIGVsZW1lbnQgcmVtYWluZWQgdW5jaGVj
a2VkIiApOworCisJZWxlbWVudHMucmVtb3ZlKCk7Cit9KTsKKwordGVzdCgidmFsKEZ1bmN0aW9u
KSB3aXRoIGluY29taW5nIHZhbHVlIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDEwKTsKKworCXZh
ciBvbGRWYWwgPSBqUXVlcnkoIiN0ZXh0MSIpLnZhbCgpOworCisJalF1ZXJ5KCIjdGV4dDEiKS52
YWwoZnVuY3Rpb24oaSwgdmFsKSB7CisJCWVxdWFscyggdmFsLCBvbGRWYWwsICJNYWtlIHN1cmUg
dGhlIGluY29taW5nIHZhbHVlIGlzIGNvcnJlY3QuIiApOworCQlyZXR1cm4gInRlc3QiOworCX0p
OworCisJZXF1YWxzKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGV4dDEnKS52YWx1ZSwgInRl
c3QiLCAiQ2hlY2sgZm9yIG1vZGlmaWVkICh2aWEgdmFsKFN0cmluZykpIHZhbHVlIG9mIGlucHV0
IGVsZW1lbnQiICk7CisKKwlvbGRWYWwgPSBqUXVlcnkoIiN0ZXh0MSIpLnZhbCgpOworCisJalF1
ZXJ5KCIjdGV4dDEiKS52YWwoZnVuY3Rpb24oaSwgdmFsKSB7CisJCWVxdWFscyggdmFsLCBvbGRW
YWwsICJNYWtlIHN1cmUgdGhlIGluY29taW5nIHZhbHVlIGlzIGNvcnJlY3QuIiApOworCQlyZXR1
cm4gNjc7CisJfSk7CisKKwllcXVhbHMoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXh0MScp
LnZhbHVlLCAiNjciLCAiQ2hlY2sgZm9yIG1vZGlmaWVkICh2aWEgdmFsKE51bWJlcikpIHZhbHVl
IG9mIGlucHV0IGVsZW1lbnQiICk7CisKKwlvbGRWYWwgPSBqUXVlcnkoIiNzZWxlY3QxIikudmFs
KCk7CisKKwlqUXVlcnkoIiNzZWxlY3QxIikudmFsKGZ1bmN0aW9uKGksIHZhbCkgeworCQllcXVh
bHMoIHZhbCwgb2xkVmFsLCAiTWFrZSBzdXJlIHRoZSBpbmNvbWluZyB2YWx1ZSBpcyBjb3JyZWN0
LiIgKTsKKwkJcmV0dXJuICIzIjsKKwl9KTsKKworCWVxdWFscyggalF1ZXJ5KCIjc2VsZWN0MSIp
LnZhbCgpLCAiMyIsICJDaGVjayBmb3IgbW9kaWZpZWQgKHZpYSB2YWwoU3RyaW5nKSkgdmFsdWUg
b2Ygc2VsZWN0IGVsZW1lbnQiICk7CisKKwlvbGRWYWwgPSBqUXVlcnkoIiNzZWxlY3QxIikudmFs
KCk7CisKKwlqUXVlcnkoIiNzZWxlY3QxIikudmFsKGZ1bmN0aW9uKGksIHZhbCkgeworCQllcXVh
bHMoIHZhbCwgb2xkVmFsLCAiTWFrZSBzdXJlIHRoZSBpbmNvbWluZyB2YWx1ZSBpcyBjb3JyZWN0
LiIgKTsKKwkJcmV0dXJuIDI7CisJfSk7CisKKwllcXVhbHMoIGpRdWVyeSgiI3NlbGVjdDEiKS52
YWwoKSwgIjIiLCAiQ2hlY2sgZm9yIG1vZGlmaWVkICh2aWEgdmFsKE51bWJlcikpIHZhbHVlIG9m
IHNlbGVjdCBlbGVtZW50IiApOworCisJalF1ZXJ5KCIjc2VsZWN0MSIpLmFwcGVuZCgiPG9wdGlv
biB2YWx1ZT0nNCc+Zm91cjwvb3B0aW9uPiIpOworCisJb2xkVmFsID0galF1ZXJ5KCIjc2VsZWN0
MSIpLnZhbCgpOworCisJalF1ZXJ5KCIjc2VsZWN0MSIpLnZhbChmdW5jdGlvbihpLCB2YWwpIHsK
KwkJZXF1YWxzKCB2YWwsIG9sZFZhbCwgIk1ha2Ugc3VyZSB0aGUgaW5jb21pbmcgdmFsdWUgaXMg
Y29ycmVjdC4iICk7CisJCXJldHVybiA0OworCX0pOworCisJZXF1YWxzKCBqUXVlcnkoIiNzZWxl
Y3QxIikudmFsKCksICI0IiwgIlNob3VsZCBiZSBwb3NzaWJsZSB0byBzZXQgdGhlIHZhbCgpIHRv
IGEgbmV3bHkgY3JlYXRlZCBvcHRpb24iICk7Cit9KTsKKworLy8gdGVzdGluZyBpZiBhIGZvcm0u
cmVzZXQoKSBicmVha3MgYSBzdWJzZXF1ZW50IGNhbGwgdG8gYSBzZWxlY3QgZWxlbWVudCdzIC52
YWwoKSAoaW4gSUUgb25seSkKK3Rlc3QoInZhbChzZWxlY3QpIGFmdGVyIGZvcm0ucmVzZXQoKSAo
QnVnICMyNTUxKSIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgzKTsKKworCWpRdWVyeSgnPGZvcm0g
aWQ9ImtrIiBuYW1lPSJrayI+PHNlbGVjdCBpZD0ia2trIj48b3B0aW9uIHZhbHVlPSJjZiI+Y2Y8
L29wdGlvbj48b3B0aW9uIAl2YWx1ZT0iZ2YiPmdmPC9vcHRpb24+PC9zZWxlY3Q+PC9mb3JtPicp
LmFwcGVuZFRvKCIjbWFpbiIpOworCisJalF1ZXJ5KCIja2trIikudmFsKCAiZ2YiICk7CisKKwlk
b2N1bWVudC5ray5yZXNldCgpOworCisJZXF1YWwoIGpRdWVyeSgiI2trayIpWzBdLnZhbHVlLCAi
Y2YiLCAiQ2hlY2sgdmFsdWUgb2Ygc2VsZWN0IGFmdGVyIGZvcm0gcmVzZXQuIiApOworCWVxdWFs
KCBqUXVlcnkoIiNra2siKS52YWwoKSwgImNmIiwgIkNoZWNrIHZhbHVlIG9mIHNlbGVjdCBhZnRl
ciBmb3JtIHJlc2V0LiIgKTsKKworCS8vIHJlLXZlcmlmeSB0aGUgbXVsdGktc2VsZWN0IGlzIG5v
dCBicm9rZW4gKGFmdGVyIGZvcm0ucmVzZXQpIGJ5IG91ciBmaXggZm9yIHNpbmdsZS1zZWxlY3QK
KwlzYW1lKCBqUXVlcnkoJyNzZWxlY3QzJykudmFsKCksIFsnMScsICcyJ10sICdDYWxsIHZhbCgp
IG9uIGEgbXVsdGlwbGU9Im11bHRpcGxlIiBzZWxlY3QnICk7CisKKwlqUXVlcnkoIiNrayIpLnJl
bW92ZSgpOworfSk7IAorCit2YXIgdGVzdEFkZENsYXNzID0gZnVuY3Rpb24odmFsdWVPYmopIHsK
KwlleHBlY3QoNSk7CisJdmFyIGRpdiA9IGpRdWVyeSgiZGl2Iik7CisJZGl2LmFkZENsYXNzKCB2
YWx1ZU9iaigidGVzdCIpICk7CisJdmFyIHBhc3MgPSB0cnVlOworCWZvciAoIHZhciBpID0gMDsg
aSA8IGRpdi5zaXplKCk7IGkrKyApIHsKKwkgaWYgKCBkaXYuZ2V0KGkpLmNsYXNzTmFtZS5pbmRl
eE9mKCJ0ZXN0IikgPT0gLTEgKSBwYXNzID0gZmFsc2U7CisJfQorCW9rKCBwYXNzLCAiQWRkIENs
YXNzIiApOworCisJLy8gdXNpbmcgY29udGVudHMgd2lsbCBnZXQgcmVndWxhciwgdGV4dCwgYW5k
IGNvbW1lbnQgbm9kZXMKKwl2YXIgaiA9IGpRdWVyeSgiI25vbm5vZGVzIikuY29udGVudHMoKTsK
KwlqLmFkZENsYXNzKCB2YWx1ZU9iaigiYXNkZiIpICk7CisJb2soIGouaGFzQ2xhc3MoImFzZGYi
KSwgIkNoZWNrIG5vZGUsdGV4dG5vZGUsY29tbWVudCBmb3IgYWRkQ2xhc3MiICk7CisKKwlkaXYg
PSBqUXVlcnkoIjxkaXYvPiIpOworCisJZGl2LmFkZENsYXNzKCB2YWx1ZU9iaigidGVzdCIpICk7
CisJZXF1YWxzKCBkaXYuYXR0cigiY2xhc3MiKSwgInRlc3QiLCAiTWFrZSBzdXJlIHRoZXJlJ3Mg
bm8gZXh0cmEgd2hpdGVzcGFjZS4iICk7CisKKwlkaXYuYXR0cigiY2xhc3MiLCAiIGZvbyIpOwor
CWRpdi5hZGRDbGFzcyggdmFsdWVPYmooInRlc3QiKSApOworCWVxdWFscyggZGl2LmF0dHIoImNs
YXNzIiksICJmb28gdGVzdCIsICJNYWtlIHN1cmUgdGhlcmUncyBubyBleHRyYSB3aGl0ZXNwYWNl
LiIgKTsKKworCWRpdi5hdHRyKCJjbGFzcyIsICJmb28iKTsKKwlkaXYuYWRkQ2xhc3MoIHZhbHVl
T2JqKCJiYXIgYmF6IikgKTsKKwllcXVhbHMoIGRpdi5hdHRyKCJjbGFzcyIpLCAiZm9vIGJhciBi
YXoiLCAiTWFrZSBzdXJlIHRoZXJlIGlzbid0IHRvbyBtdWNoIHRyaW1taW5nLiIgKTsKK307CisK
K3Rlc3QoImFkZENsYXNzKFN0cmluZykiLCBmdW5jdGlvbigpIHsKKwl0ZXN0QWRkQ2xhc3MoYmFy
ZU9iaik7Cit9KTsKKwordGVzdCgiYWRkQ2xhc3MoRnVuY3Rpb24pIiwgZnVuY3Rpb24oKSB7CisJ
dGVzdEFkZENsYXNzKGZ1bmN0aW9uUmV0dXJuaW5nT2JqKTsKK30pOworCit0ZXN0KCJhZGRDbGFz
cyhGdW5jdGlvbikgd2l0aCBpbmNvbWluZyB2YWx1ZSIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCg0
NSk7CisKKwl2YXIgZGl2ID0galF1ZXJ5KCJkaXYiKSwgb2xkID0gZGl2Lm1hcChmdW5jdGlvbigp
eworCQlyZXR1cm4galF1ZXJ5KHRoaXMpLmF0dHIoImNsYXNzIik7CisJfSk7CisKKwlkaXYuYWRk
Q2xhc3MoZnVuY3Rpb24oaSwgdmFsKSB7CisJCWlmICggdGhpcy5pZCAhPT0gIl9maXJlYnVnQ29u
c29sZSIgKSB7CisJCQllcXVhbHMoIHZhbCwgb2xkW2ldLCAiTWFrZSBzdXJlIHRoZSBpbmNvbWlu
ZyB2YWx1ZSBpcyBjb3JyZWN0LiIgKTsKKwkJCXJldHVybiAidGVzdCI7CisJCX0KKwl9KTsKKwor
CXZhciBwYXNzID0gdHJ1ZTsKKwlmb3IgKCB2YXIgaSA9IDA7IGkgPCBkaXYuc2l6ZSgpOyBpKysg
KSB7CisJIGlmICggZGl2LmdldChpKS5jbGFzc05hbWUuaW5kZXhPZigidGVzdCIpID09IC0xICkg
cGFzcyA9IGZhbHNlOworCX0KKwlvayggcGFzcywgIkFkZCBDbGFzcyIgKTsKK30pOworCit2YXIg
dGVzdFJlbW92ZUNsYXNzID0gZnVuY3Rpb24odmFsdWVPYmopIHsKKwlleHBlY3QoNyk7CisKKwl2
YXIgJGRpdnMgPSBqUXVlcnkoJ2RpdicpOworCisJJGRpdnMuYWRkQ2xhc3MoInRlc3QiKS5yZW1v
dmVDbGFzcyggdmFsdWVPYmooInRlc3QiKSApOworCisJb2soICEkZGl2cy5pcygnLnRlc3QnKSwg
IlJlbW92ZSBDbGFzcyIgKTsKKworCVFVbml0LnJlc2V0KCk7CisJJGRpdnMgPSBqUXVlcnkoJ2Rp
dicpOworCisJJGRpdnMuYWRkQ2xhc3MoInRlc3QiKS5hZGRDbGFzcygiZm9vIikuYWRkQ2xhc3Mo
ImJhciIpOworCSRkaXZzLnJlbW92ZUNsYXNzKCB2YWx1ZU9iaigidGVzdCIpICkucmVtb3ZlQ2xh
c3MoIHZhbHVlT2JqKCJiYXIiKSApLnJlbW92ZUNsYXNzKCB2YWx1ZU9iaigiZm9vIikgKTsKKwor
CW9rKCAhJGRpdnMuaXMoJy50ZXN0LC5iYXIsLmZvbycpLCAiUmVtb3ZlIG11bHRpcGxlIGNsYXNz
ZXMiICk7CisKKwlRVW5pdC5yZXNldCgpOworCSRkaXZzID0galF1ZXJ5KCdkaXYnKTsKKworCS8v
IE1ha2Ugc3VyZSB0aGF0IGEgbnVsbCB2YWx1ZSBkb2Vzbid0IGNhdXNlIHByb2JsZW1zCisJJGRp
dnMuZXEoMCkuYWRkQ2xhc3MoInRlc3QiKS5yZW1vdmVDbGFzcyggdmFsdWVPYmoobnVsbCkgKTsK
KwlvayggJGRpdnMuZXEoMCkuaXMoJy50ZXN0JyksICJOdWxsIHZhbHVlIHBhc3NlZCB0byByZW1v
dmVDbGFzcyIgKTsKKworCSRkaXZzLmVxKDApLmFkZENsYXNzKCJ0ZXN0IikucmVtb3ZlQ2xhc3Mo
IHZhbHVlT2JqKCIiKSApOworCW9rKCAkZGl2cy5lcSgwKS5pcygnLnRlc3QnKSwgIkVtcHR5IHN0
cmluZyBwYXNzZWQgdG8gcmVtb3ZlQ2xhc3MiICk7CisKKwkvLyB1c2luZyBjb250ZW50cyB3aWxs
IGdldCByZWd1bGFyLCB0ZXh0LCBhbmQgY29tbWVudCBub2RlcworCXZhciBqID0galF1ZXJ5KCIj
bm9ubm9kZXMiKS5jb250ZW50cygpOworCWoucmVtb3ZlQ2xhc3MoIHZhbHVlT2JqKCJhc2RmIikg
KTsKKwlvayggIWouaGFzQ2xhc3MoImFzZGYiKSwgIkNoZWNrIG5vZGUsdGV4dG5vZGUsY29tbWVu
dCBmb3IgcmVtb3ZlQ2xhc3MiICk7CisKKwl2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiZGl2Iik7CisJZGl2LmNsYXNzTmFtZSA9ICIgdGVzdCBmb28gIjsKKworCWpRdWVyeShkaXYp
LnJlbW92ZUNsYXNzKCB2YWx1ZU9iaigiZm9vIikgKTsKKwllcXVhbHMoIGRpdi5jbGFzc05hbWUs
ICJ0ZXN0IiwgIk1ha2Ugc3VyZSByZW1haW5pbmcgY2xhc3NOYW1lIGlzIHRyaW1tZWQuIiApOwor
CisJZGl2LmNsYXNzTmFtZSA9ICIgdGVzdCAiOworCisJalF1ZXJ5KGRpdikucmVtb3ZlQ2xhc3Mo
IHZhbHVlT2JqKCJ0ZXN0IikgKTsKKwllcXVhbHMoIGRpdi5jbGFzc05hbWUsICIiLCAiTWFrZSBz
dXJlIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCBhZnRlciBldmVyeXRoaW5nIGlzIHJlbW92ZWQuIiAp
OworfTsKKwordGVzdCgicmVtb3ZlQ2xhc3MoU3RyaW5nKSAtIHNpbXBsZSIsIGZ1bmN0aW9uKCkg
eworCXRlc3RSZW1vdmVDbGFzcyhiYXJlT2JqKTsKK30pOworCit0ZXN0KCJyZW1vdmVDbGFzcyhG
dW5jdGlvbikgLSBzaW1wbGUiLCBmdW5jdGlvbigpIHsKKwl0ZXN0UmVtb3ZlQ2xhc3MoZnVuY3Rp
b25SZXR1cm5pbmdPYmopOworfSk7CisKK3Rlc3QoInJlbW92ZUNsYXNzKEZ1bmN0aW9uKSB3aXRo
IGluY29taW5nIHZhbHVlIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDQ1KTsKKworCXZhciAkZGl2
cyA9IGpRdWVyeSgnZGl2JykuYWRkQ2xhc3MoInRlc3QiKSwgb2xkID0gJGRpdnMubWFwKGZ1bmN0
aW9uKCl7CisJCXJldHVybiBqUXVlcnkodGhpcykuYXR0cigiY2xhc3MiKTsKKwl9KTsKKworCSRk
aXZzLnJlbW92ZUNsYXNzKGZ1bmN0aW9uKGksIHZhbCkgeworCQlpZiAoIHRoaXMuaWQgIT09ICJf
ZmlyZWJ1Z0NvbnNvbGUiICkgeworCQkJZXF1YWxzKCB2YWwsIG9sZFtpXSwgIk1ha2Ugc3VyZSB0
aGUgaW5jb21pbmcgdmFsdWUgaXMgY29ycmVjdC4iICk7CisJCQlyZXR1cm4gInRlc3QiOworCQl9
CisJfSk7CisKKwlvayggISRkaXZzLmlzKCcudGVzdCcpLCAiUmVtb3ZlIENsYXNzIiApOworCisJ
UVVuaXQucmVzZXQoKTsKK30pOworCit2YXIgdGVzdFRvZ2dsZUNsYXNzID0gZnVuY3Rpb24odmFs
dWVPYmopIHsKKwlleHBlY3QoMTcpOworCisJdmFyIGUgPSBqUXVlcnkoIiNmaXJzdHAiKTsKKwlv
ayggIWUuaXMoIi50ZXN0IiksICJBc3NlcnQgY2xhc3Mgbm90IHByZXNlbnQiICk7CisJZS50b2dn
bGVDbGFzcyggdmFsdWVPYmooInRlc3QiKSApOworCW9rKCBlLmlzKCIudGVzdCIpLCAiQXNzZXJ0
IGNsYXNzIHByZXNlbnQiICk7CisJZS50b2dnbGVDbGFzcyggdmFsdWVPYmooInRlc3QiKSApOwor
CW9rKCAhZS5pcygiLnRlc3QiKSwgIkFzc2VydCBjbGFzcyBub3QgcHJlc2VudCIgKTsKKworCS8v
IGNsYXNzIG5hbWUgd2l0aCBhIGJvb2xlYW4KKwllLnRvZ2dsZUNsYXNzKCB2YWx1ZU9iaigidGVz
dCIpLCBmYWxzZSApOworCW9rKCAhZS5pcygiLnRlc3QiKSwgIkFzc2VydCBjbGFzcyBub3QgcHJl
c2VudCIgKTsKKwllLnRvZ2dsZUNsYXNzKCB2YWx1ZU9iaigidGVzdCIpLCB0cnVlICk7CisJb2so
IGUuaXMoIi50ZXN0IiksICJBc3NlcnQgY2xhc3MgcHJlc2VudCIgKTsKKwllLnRvZ2dsZUNsYXNz
KCB2YWx1ZU9iaigidGVzdCIpLCBmYWxzZSApOworCW9rKCAhZS5pcygiLnRlc3QiKSwgIkFzc2Vy
dCBjbGFzcyBub3QgcHJlc2VudCIgKTsKKworCS8vIG11bHRpcGxlIGNsYXNzIG5hbWVzCisJZS5h
ZGRDbGFzcygidGVzdEEgdGVzdEIiKTsKKwlvayggKGUuaXMoIi50ZXN0QS50ZXN0QiIpKSwgIkFz
c2VydCAyIGRpZmZlcmVudCBjbGFzc2VzIHByZXNlbnQiICk7CisJZS50b2dnbGVDbGFzcyggdmFs
dWVPYmooInRlc3RCIHRlc3RDIikgKTsKKwlvayggKGUuaXMoIi50ZXN0QS50ZXN0QyIpICYmICFl
LmlzKCIudGVzdEIiKSksICJBc3NlcnQgMSBjbGFzcyBhZGRlZCwgMSBjbGFzcyByZW1vdmVkLCBh
bmQgMSBjbGFzcyBrZXB0IiApOworCWUudG9nZ2xlQ2xhc3MoIHZhbHVlT2JqKCJ0ZXN0QSB0ZXN0
QyIpICk7CisJb2soICghZS5pcygiLnRlc3RBIikgJiYgIWUuaXMoIi50ZXN0QiIpICYmICFlLmlz
KCIudGVzdEMiKSksICJBc3NlcnQgbm8gY2xhc3MgcHJlc2VudCIgKTsKKworCS8vIHRvZ2dsZUNs
YXNzIHN0b3JhZ2UKKwllLnRvZ2dsZUNsYXNzKHRydWUpOworCW9rKCBlWzBdLmNsYXNzTmFtZSA9
PT0gIiIsICJBc3NlcnQgY2xhc3MgaXMgZW1wdHkgKGRhdGEgd2FzIGVtcHR5KSIgKTsKKwllLmFk
ZENsYXNzKCJ0ZXN0RCB0ZXN0RSIpOworCW9rKCBlLmlzKCIudGVzdEQudGVzdEUiKSwgIkFzc2Vy
dCBjbGFzcyBwcmVzZW50IiApOworCWUudG9nZ2xlQ2xhc3MoKTsKKwlvayggIWUuaXMoIi50ZXN0
RC50ZXN0RSIpLCAiQXNzZXJ0IGNsYXNzIG5vdCBwcmVzZW50IiApOworCW9rKCBqUXVlcnkuX2Rh
dGEoZVswXSwgJ19fY2xhc3NOYW1lX18nKSA9PT0gJ3Rlc3REIHRlc3RFJywgIkFzc2VydCBkYXRh
IHdhcyBzdG9yZWQiICk7CisJZS50b2dnbGVDbGFzcygpOworCW9rKCBlLmlzKCIudGVzdEQudGVz
dEUiKSwgIkFzc2VydCBjbGFzcyBwcmVzZW50IChyZXN0b3JlZCBmcm9tIGRhdGEpIiApOworCWUu
dG9nZ2xlQ2xhc3MoZmFsc2UpOworCW9rKCAhZS5pcygiLnRlc3RELnRlc3RFIiksICJBc3NlcnQg
Y2xhc3Mgbm90IHByZXNlbnQiICk7CisJZS50b2dnbGVDbGFzcyh0cnVlKTsKKwlvayggZS5pcygi
LnRlc3RELnRlc3RFIiksICJBc3NlcnQgY2xhc3MgcHJlc2VudCAocmVzdG9yZWQgZnJvbSBkYXRh
KSIgKTsKKwllLnRvZ2dsZUNsYXNzKCk7CisJZS50b2dnbGVDbGFzcyhmYWxzZSk7CisJZS50b2dn
bGVDbGFzcygpOworCW9rKCBlLmlzKCIudGVzdEQudGVzdEUiKSwgIkFzc2VydCBjbGFzcyBwcmVz
ZW50IChyZXN0b3JlZCBmcm9tIGRhdGEpIiApOworCisJLy8gQ2xlYW51cAorCWUucmVtb3ZlQ2xh
c3MoInRlc3REIik7CisJalF1ZXJ5LnJlbW92ZURhdGEoZVswXSwgJ19fY2xhc3NOYW1lX18nLCB0
cnVlKTsKK307CisKK3Rlc3QoInRvZ2dsZUNsYXNzKFN0cmluZ3xib29sZWFufHVuZGVmaW5lZFss
IGJvb2xlYW5dKSIsIGZ1bmN0aW9uKCkgeworCXRlc3RUb2dnbGVDbGFzcyhiYXJlT2JqKTsKK30p
OworCit0ZXN0KCJ0b2dnbGVDbGFzcyhGdW5jdGlvblssIGJvb2xlYW5dKSIsIGZ1bmN0aW9uKCkg
eworCXRlc3RUb2dnbGVDbGFzcyhmdW5jdGlvblJldHVybmluZ09iaik7Cit9KTsKKwordGVzdCgi
dG9nZ2xlQ2xhc3MoRnVjbnRpb25bLCBib29sZWFuXSkgd2l0aCBpbmNvbWluZyB2YWx1ZSIsIGZ1
bmN0aW9uKCkgeworCWV4cGVjdCgxNCk7CisKKwl2YXIgZSA9IGpRdWVyeSgiI2ZpcnN0cCIpLCBv
bGQgPSBlLmF0dHIoImNsYXNzIik7CisJb2soICFlLmlzKCIudGVzdCIpLCAiQXNzZXJ0IGNsYXNz
IG5vdCBwcmVzZW50IiApOworCisJZS50b2dnbGVDbGFzcyhmdW5jdGlvbihpLCB2YWwpIHsKKwkJ
ZXF1YWxzKCB2YWwsIG9sZCwgIk1ha2Ugc3VyZSB0aGUgaW5jb21pbmcgdmFsdWUgaXMgY29ycmVj
dC4iICk7CisJCXJldHVybiAidGVzdCI7CisJfSk7CisJb2soIGUuaXMoIi50ZXN0IiksICJBc3Nl
cnQgY2xhc3MgcHJlc2VudCIgKTsKKworCW9sZCA9IGUuYXR0cigiY2xhc3MiKTsKKworCWUudG9n
Z2xlQ2xhc3MoZnVuY3Rpb24oaSwgdmFsKSB7CisJCWVxdWFscyggdmFsLCBvbGQsICJNYWtlIHN1
cmUgdGhlIGluY29taW5nIHZhbHVlIGlzIGNvcnJlY3QuIiApOworCQlyZXR1cm4gInRlc3QiOwor
CX0pOworCW9rKCAhZS5pcygiLnRlc3QiKSwgIkFzc2VydCBjbGFzcyBub3QgcHJlc2VudCIgKTsK
KworCW9sZCA9IGUuYXR0cigiY2xhc3MiKTsKKworCS8vIGNsYXNzIG5hbWUgd2l0aCBhIGJvb2xl
YW4KKwllLnRvZ2dsZUNsYXNzKGZ1bmN0aW9uKGksIHZhbCwgc3RhdGUpIHsKKwkJZXF1YWxzKCB2
YWwsIG9sZCwgIk1ha2Ugc3VyZSB0aGUgaW5jb21pbmcgdmFsdWUgaXMgY29ycmVjdC4iICk7CisJ
CWVxdWFscyggc3RhdGUsIGZhbHNlLCAiTWFrZSBzdXJlIHRoYXQgdGhlIHN0YXRlIGlzIHBhc3Nl
ZCBpbi4iICk7CisJCXJldHVybiAidGVzdCI7CisJfSwgZmFsc2UgKTsKKwlvayggIWUuaXMoIi50
ZXN0IiksICJBc3NlcnQgY2xhc3Mgbm90IHByZXNlbnQiICk7CisKKwlvbGQgPSBlLmF0dHIoImNs
YXNzIik7CisKKwllLnRvZ2dsZUNsYXNzKGZ1bmN0aW9uKGksIHZhbCwgc3RhdGUpIHsKKwkJZXF1
YWxzKCB2YWwsIG9sZCwgIk1ha2Ugc3VyZSB0aGUgaW5jb21pbmcgdmFsdWUgaXMgY29ycmVjdC4i
ICk7CisJCWVxdWFscyggc3RhdGUsIHRydWUsICJNYWtlIHN1cmUgdGhhdCB0aGUgc3RhdGUgaXMg
cGFzc2VkIGluLiIgKTsKKwkJcmV0dXJuICJ0ZXN0IjsKKwl9LCB0cnVlICk7CisJb2soIGUuaXMo
Ii50ZXN0IiksICJBc3NlcnQgY2xhc3MgcHJlc2VudCIgKTsKKworCW9sZCA9IGUuYXR0cigiY2xh
c3MiKTsKKworCWUudG9nZ2xlQ2xhc3MoZnVuY3Rpb24oaSwgdmFsLCBzdGF0ZSkgeworCQllcXVh
bHMoIHZhbCwgb2xkLCAiTWFrZSBzdXJlIHRoZSBpbmNvbWluZyB2YWx1ZSBpcyBjb3JyZWN0LiIg
KTsKKwkJZXF1YWxzKCBzdGF0ZSwgZmFsc2UsICJNYWtlIHN1cmUgdGhhdCB0aGUgc3RhdGUgaXMg
cGFzc2VkIGluLiIgKTsKKwkJcmV0dXJuICJ0ZXN0IjsKKwl9LCBmYWxzZSApOworCW9rKCAhZS5p
cygiLnRlc3QiKSwgIkFzc2VydCBjbGFzcyBub3QgcHJlc2VudCIgKTsKKworCS8vIENsZWFudXAK
KwllLnJlbW92ZUNsYXNzKCJ0ZXN0Iik7CisJalF1ZXJ5LnJlbW92ZURhdGEoZVswXSwgJ19fY2xh
c3NOYW1lX18nLCB0cnVlKTsKK30pOworCit0ZXN0KCJhZGRDbGFzcywgcmVtb3ZlQ2xhc3MsIGhh
c0NsYXNzIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDE3KTsKKworCXZhciBqcSA9IGpRdWVyeSgi
PHA+SGk8L3A+IiksIHggPSBqcVswXTsKKworCWpxLmFkZENsYXNzKCJoaSIpOworCWVxdWFscygg
eC5jbGFzc05hbWUsICJoaSIsICJDaGVjayBzaW5nbGUgYWRkZWQgY2xhc3MiICk7CisKKwlqcS5h
ZGRDbGFzcygiZm9vIGJhciIpOworCWVxdWFscyggeC5jbGFzc05hbWUsICJoaSBmb28gYmFyIiwg
IkNoZWNrIG1vcmUgYWRkZWQgY2xhc3NlcyIgKTsKKworCWpxLnJlbW92ZUNsYXNzKCk7CisJZXF1
YWxzKCB4LmNsYXNzTmFtZSwgIiIsICJSZW1vdmUgYWxsIGNsYXNzZXMiICk7CisKKwlqcS5hZGRD
bGFzcygiaGkgZm9vIGJhciIpOworCWpxLnJlbW92ZUNsYXNzKCJmb28iKTsKKwllcXVhbHMoIHgu
Y2xhc3NOYW1lLCAiaGkgYmFyIiwgIkNoZWNrIHJlbW92YWwgb2Ygb25lIGNsYXNzIiApOworCisJ
b2soIGpxLmhhc0NsYXNzKCJoaSIpLCAiQ2hlY2sgaGFzMSIgKTsKKwlvaygganEuaGFzQ2xhc3Mo
ImJhciIpLCAiQ2hlY2sgaGFzMiIgKTsKKworCXZhciBqcSA9IGpRdWVyeSgiPHAgY2xhc3M9J2Ns
YXNzMVxuY2xhc3MyXHRjbGEuc3MzXG5ccmNsYXNzNCc+PC9wPiIpOworCW9rKCBqcS5oYXNDbGFz
cygiY2xhc3MxIiksICJDaGVjayBoYXNDbGFzcyB3aXRoIGxpbmUgZmVlZCIgKTsKKwlvaygganEu
aXMoIi5jbGFzczEiKSwgIkNoZWNrIGlzIHdpdGggbGluZSBmZWVkIiApOworCW9rKCBqcS5oYXND
bGFzcygiY2xhc3MyIiksICJDaGVjayBoYXNDbGFzcyB3aXRoIHRhYiIgKTsKKwlvaygganEuaXMo
Ii5jbGFzczIiKSwgIkNoZWNrIGlzIHdpdGggdGFiIiApOworCW9rKCBqcS5oYXNDbGFzcygiY2xh
LnNzMyIpLCAiQ2hlY2sgaGFzQ2xhc3Mgd2l0aCBkb3QiICk7CisJb2soIGpxLmhhc0NsYXNzKCJj
bGFzczQiKSwgIkNoZWNrIGhhc0NsYXNzIHdpdGggY2FycmlhZ2UgcmV0dXJuIiApOworCW9rKCBq
cS5pcygiLmNsYXNzNCIpLCAiQ2hlY2sgaXMgd2l0aCBjYXJyaWFnZSByZXR1cm4iICk7CisKKwlq
cS5yZW1vdmVDbGFzcygiY2xhc3MyIik7CisJb2soIGpxLmhhc0NsYXNzKCJjbGFzczIiKT09ZmFs
c2UsICJDaGVjayB0aGUgY2xhc3MgaGFzIGJlZW4gcHJvcGVybHkgcmVtb3ZlZCIgKTsKKwlqcS5y
ZW1vdmVDbGFzcygiY2xhIik7CisJb2soIGpxLmhhc0NsYXNzKCJjbGEuc3MzIiksICJDaGVjayB0
aGUgZG90dGVkIGNsYXNzIGhhcyBub3QgYmVlbiByZW1vdmVkIiApOworCWpxLnJlbW92ZUNsYXNz
KCJjbGEuc3MzIik7CisJb2soIGpxLmhhc0NsYXNzKCJjbGEuc3MzIik9PWZhbHNlLCAiQ2hlY2sg
dGhlIGRvdHRlZCBjbGFzcyBoYXMgYmVlbiByZW1vdmVkIiApOworCWpxLnJlbW92ZUNsYXNzKCJj
bGFzczQiKTsKKwlvaygganEuaGFzQ2xhc3MoImNsYXNzNCIpPT1mYWxzZSwgIkNoZWNrIHRoZSBj
bGFzcyBoYXMgYmVlbiBwcm9wZXJseSByZW1vdmVkIiApOworfSk7CgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvdW5pdC9hdHRyaWJ1dGVzLmpz
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB5ZXMKCkluZGV4OiBMYXlvdXRUZXN0
cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvdW5pdC9jb3JlLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC91bml0L2NvcmUuanMJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvdW5pdC9jb3JlLmpzCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDEwMzYgQEAKK21vZHVsZSgiY29yZSIsIHsgdGVhcmRvd246IG1vZHVs
ZVRlYXJkb3duIH0pOworCit0ZXN0KCJCYXNpYyByZXF1aXJlbWVudHMiLCBmdW5jdGlvbigpIHsK
KwlleHBlY3QoNyk7CisJb2soIEFycmF5LnByb3RvdHlwZS5wdXNoLCAiQXJyYXkucHVzaCgpIiAp
OworCW9rKCBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHksICJGdW5jdGlvbi5hcHBseSgpIiApOwor
CW9rKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCwgImdldEVsZW1lbnRCeUlkIiApOworCW9rKCBk
b2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSwgImdldEVsZW1lbnRzQnlUYWdOYW1lIiApOwor
CW9rKCBSZWdFeHAsICJSZWdFeHAiICk7CisJb2soIGpRdWVyeSwgImpRdWVyeSIgKTsKKwlvaygg
JCwgIiQiICk7Cit9KTsKKwordGVzdCgialF1ZXJ5KCkiLCBmdW5jdGlvbigpIHsKKwlleHBlY3Qo
MjQpOworCisJLy8gQmFzaWMgY29uc3RydWN0b3IncyBiZWhhdmlvcgorCisJZXF1YWxzKCBqUXVl
cnkoKS5sZW5ndGgsIDAsICJqUXVlcnkoKSA9PT0galF1ZXJ5KFtdKSIgKTsKKwllcXVhbHMoIGpR
dWVyeSh1bmRlZmluZWQpLmxlbmd0aCwgMCwgImpRdWVyeSh1bmRlZmluZWQpID09PSBqUXVlcnko
W10pIiApOworCWVxdWFscyggalF1ZXJ5KG51bGwpLmxlbmd0aCwgMCwgImpRdWVyeShudWxsKSA9
PT0galF1ZXJ5KFtdKSIgKTsKKwllcXVhbHMoIGpRdWVyeSgiIikubGVuZ3RoLCAwLCAialF1ZXJ5
KCcnKSA9PT0galF1ZXJ5KFtdKSIgKTsKKworCXZhciBvYmogPSBqUXVlcnkoImRpdiIpOworCWVx
dWFscyggalF1ZXJ5KG9iaikuc2VsZWN0b3IsICJkaXYiLCAialF1ZXJ5KGpRdWVyeU9iaikgPT0g
alF1ZXJ5T2JqIiApOworCisJCS8vIGNhbiBhY3R1YWxseSB5aWVsZCBtb3JlIHRoYW4gb25lLCB3
aGVuIGlmcmFtZXMgYXJlIGluY2x1ZGVkLCB0aGUgd2luZG93IGlzIGFuIGFycmF5IGFzIHdlbGwK
KwllcXVhbHMoIGpRdWVyeSh3aW5kb3cpLmxlbmd0aCwgMSwgIkNvcnJlY3QgbnVtYmVyIG9mIGVs
ZW1lbnRzIGdlbmVyYXRlZCBmb3IgalF1ZXJ5KHdpbmRvdykiICk7CisKKworCXZhciBtYWluID0g
alF1ZXJ5KCIjbWFpbiIpOworCXNhbWUoIGpRdWVyeSgiZGl2IHAiLCBtYWluKS5nZXQoKSwgcSgi
c25kcCIsICJlbiIsICJzYXAiKSwgIkJhc2ljIHNlbGVjdG9yIHdpdGggalF1ZXJ5IG9iamVjdCBh
cyBjb250ZXh0IiApOworCisvKgorCS8vIGRpc2FibGVkIHNpbmNlIHRoaXMgdGVzdCB3YXMgZG9p
bmcgbm90aGluZy4gaSB0cmllZCB0byBmaXggaXQgYnV0IGknbSBub3Qgc3VyZQorCS8vIHdoYXQg
dGhlIGV4cGVjdGVkIGJlaGF2aW9yIHNob3VsZCBldmVuIGJlLiBGRiByZXR1cm5zICJcbiIgZm9y
IHRoZSB0ZXh0IG5vZGUKKwkvLyBtYWtlIHN1cmUgdGhpcyBpcyBoYW5kbGVkCisJdmFyIGNybGZD
b250YWluZXIgPSBqUXVlcnkoJzxwPlxyXG48L3A+Jyk7CisJdmFyIHggPSBjcmxmQ29udGFpbmVy
LmNvbnRlbnRzKCkuZ2V0KDApLm5vZGVWYWx1ZTsKKwllcXVhbHMoIHgsIHdoYXQ/Pz8sICJDaGVj
ayBmb3IgXFxyIGFuZCBcXG4gaW4galF1ZXJ5KCkiICk7CisqLworCisJLyogLy8gRGlzYWJsZWQg
dW50aWwgd2UgYWRkIHRoaXMgZnVuY3Rpb25hbGl0eSBpbgorCXZhciBwYXNzID0gdHJ1ZTsKKwl0
cnkgeworCQlqUXVlcnkoIjxkaXY+VGVzdGluZzwvZGl2PiIpLmFwcGVuZFRvKGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJpZnJhbWUiKS5jb250ZW50RG9jdW1lbnQuYm9keSk7CisJfSBjYXRjaChl
KXsKKwkJcGFzcyA9IGZhbHNlOworCX0KKwlvayggcGFzcywgImpRdWVyeSgnJmx0O3RhZyZndDsn
KSBuZWVkcyBvcHRpb25hbCBkb2N1bWVudCBwYXJhbWV0ZXIgdG8gZWFzZSBjcm9zcy1mcmFtZSBE
T00gd3JhbmdsaW5nLCBzZWUgIzk2OCIgKTsqLworCisJdmFyIGNvZGUgPSBqUXVlcnkoIjxjb2Rl
Lz4iKTsKKwllcXVhbHMoIGNvZGUubGVuZ3RoLCAxLCAiQ29ycmVjdCBudW1iZXIgb2YgZWxlbWVu
dHMgZ2VuZXJhdGVkIGZvciBjb2RlIiApOworCWVxdWFscyggY29kZS5wYXJlbnQoKS5sZW5ndGgs
IDAsICJNYWtlIHN1cmUgdGhhdCB0aGUgZ2VuZXJhdGVkIEhUTUwgaGFzIG5vIHBhcmVudC4iICk7
CisJdmFyIGltZyA9IGpRdWVyeSgiPGltZy8+Iik7CisJZXF1YWxzKCBpbWcubGVuZ3RoLCAxLCAi
Q29ycmVjdCBudW1iZXIgb2YgZWxlbWVudHMgZ2VuZXJhdGVkIGZvciBpbWciICk7CisJZXF1YWxz
KCBpbWcucGFyZW50KCkubGVuZ3RoLCAwLCAiTWFrZSBzdXJlIHRoYXQgdGhlIGdlbmVyYXRlZCBI
VE1MIGhhcyBubyBwYXJlbnQuIiApOworCXZhciBkaXYgPSBqUXVlcnkoIjxkaXYvPjxoci8+PGNv
ZGUvPjxiLz4iKTsKKwllcXVhbHMoIGRpdi5sZW5ndGgsIDQsICJDb3JyZWN0IG51bWJlciBvZiBl
bGVtZW50cyBnZW5lcmF0ZWQgZm9yIGRpdiBociBjb2RlIGIiICk7CisJZXF1YWxzKCBkaXYucGFy
ZW50KCkubGVuZ3RoLCAwLCAiTWFrZSBzdXJlIHRoYXQgdGhlIGdlbmVyYXRlZCBIVE1MIGhhcyBu
byBwYXJlbnQuIiApOworCisJZXF1YWxzKCBqUXVlcnkoWzEsMiwzXSkuZ2V0KDEpLCAyLCAiVGVz
dCBwYXNzaW5nIGFuIGFycmF5IHRvIHRoZSBmYWN0b3J5IiApOworCisJZXF1YWxzKCBqUXVlcnko
ZG9jdW1lbnQuYm9keSkuZ2V0KDApLCBqUXVlcnkoJ2JvZHknKS5nZXQoMCksICJUZXN0IHBhc3Np
bmcgYW4gaHRtbCBub2RlIHRvIHRoZSBmYWN0b3J5IiApOworCisJdmFyIGV4ZWMgPSBmYWxzZTsK
KworCXZhciBlbGVtID0galF1ZXJ5KCI8ZGl2Lz4iLCB7CisJCXdpZHRoOiAxMCwKKwkJY3NzOiB7
IHBhZGRpbmdMZWZ0OjEsIHBhZGRpbmdSaWdodDoxIH0sCisJCWNsaWNrOiBmdW5jdGlvbigpeyBv
ayhleGVjLCAiQ2xpY2sgZXhlY3V0ZWQuIik7IH0sCisJCXRleHQ6ICJ0ZXN0IiwKKwkJImNsYXNz
IjogInRlc3QyIiwKKwkJaWQ6ICJ0ZXN0MyIKKwl9KTsKKworCWVxdWFscyggZWxlbVswXS5zdHls
ZS53aWR0aCwgJzEwcHgnLCAnalF1ZXJ5KCkgcXVpY2sgc2V0dGVyIHdpZHRoJyk7CisJZXF1YWxz
KCBlbGVtWzBdLnN0eWxlLnBhZGRpbmdMZWZ0LCAnMXB4JywgJ2pRdWVyeSBxdWljayBzZXR0ZXIg
Y3NzJyk7CisJZXF1YWxzKCBlbGVtWzBdLnN0eWxlLnBhZGRpbmdSaWdodCwgJzFweCcsICdqUXVl
cnkgcXVpY2sgc2V0dGVyIGNzcycpOworCWVxdWFscyggZWxlbVswXS5jaGlsZE5vZGVzLmxlbmd0
aCwgMSwgJ2pRdWVyeSBxdWljayBzZXR0ZXIgdGV4dCcpOworCWVxdWFscyggZWxlbVswXS5maXJz
dENoaWxkLm5vZGVWYWx1ZSwgInRlc3QiLCAnalF1ZXJ5IHF1aWNrIHNldHRlciB0ZXh0Jyk7CisJ
ZXF1YWxzKCBlbGVtWzBdLmNsYXNzTmFtZSwgInRlc3QyIiwgJ2pRdWVyeSgpIHF1aWNrIHNldHRl
ciBjbGFzcycpOworCWVxdWFscyggZWxlbVswXS5pZCwgInRlc3QzIiwgJ2pRdWVyeSgpIHF1aWNr
IHNldHRlciBpZCcpOworCisJZXhlYyA9IHRydWU7CisJZWxlbS5jbGljaygpOworCisJLy8gbWFu
dWFsbHkgY2xlYW4gdXAgZGV0YWNoZWQgZWxlbWVudHMKKwllbGVtLnJlbW92ZSgpOworCisJZm9y
ICggdmFyIGkgPSAwOyBpIDwgMzsgKytpICkgeworCQllbGVtID0galF1ZXJ5KCI8aW5wdXQgdHlw
ZT0ndGV4dCcgdmFsdWU9J1RFU1QnIC8+Iik7CisJfQorCWVxdWFscyggZWxlbVswXS5kZWZhdWx0
VmFsdWUsICJURVNUIiwgIkVuc3VyZSBjYWNoZWQgbm9kZXMgYXJlIGNsb25lZCBwcm9wZXJseSAo
QnVnICM2NjU1KSIgKTsKKworCS8vIG1hbnVhbGx5IGNsZWFuIHVwIGRldGFjaGVkIGVsZW1lbnRz
CisJZWxlbS5yZW1vdmUoKTsKK30pOworCit0ZXN0KCJzZWxlY3RvciBzdGF0ZSIsIGZ1bmN0aW9u
KCkgeworCWV4cGVjdCgzMSk7CisKKwl2YXIgdGVzdDsKKworCXRlc3QgPSBqUXVlcnkodW5kZWZp
bmVkKTsKKwllcXVhbHMoIHRlc3Quc2VsZWN0b3IsICIiLCAiRW1wdHkgalF1ZXJ5IFNlbGVjdG9y
IiApOworCWVxdWFscyggdGVzdC5jb250ZXh0LCB1bmRlZmluZWQsICJFbXB0eSBqUXVlcnkgQ29u
dGV4dCIgKTsKKworCXRlc3QgPSBqUXVlcnkoZG9jdW1lbnQpOworCWVxdWFscyggdGVzdC5zZWxl
Y3RvciwgIiIsICJEb2N1bWVudCBTZWxlY3RvciIgKTsKKwllcXVhbHMoIHRlc3QuY29udGV4dCwg
ZG9jdW1lbnQsICJEb2N1bWVudCBDb250ZXh0IiApOworCisJdGVzdCA9IGpRdWVyeShkb2N1bWVu
dC5ib2R5KTsKKwllcXVhbHMoIHRlc3Quc2VsZWN0b3IsICIiLCAiQm9keSBTZWxlY3RvciIgKTsK
KwllcXVhbHMoIHRlc3QuY29udGV4dCwgZG9jdW1lbnQuYm9keSwgIkJvZHkgQ29udGV4dCIgKTsK
KworCXRlc3QgPSBqUXVlcnkoIiNtYWluIik7CisJZXF1YWxzKCB0ZXN0LnNlbGVjdG9yLCAiI21h
aW4iLCAiI21haW4gU2VsZWN0b3IiICk7CisJZXF1YWxzKCB0ZXN0LmNvbnRleHQsIGRvY3VtZW50
LCAiI21haW4gQ29udGV4dCIgKTsKKworCXRlc3QgPSBqUXVlcnkoIiNub3Rmb3VuZG5vbm8iKTsK
KwllcXVhbHMoIHRlc3Quc2VsZWN0b3IsICIjbm90Zm91bmRub25vIiwgIiNub3Rmb3VuZG5vbm8g
U2VsZWN0b3IiICk7CisJZXF1YWxzKCB0ZXN0LmNvbnRleHQsIGRvY3VtZW50LCAiI25vdGZvdW5k
bm9ubyBDb250ZXh0IiApOworCisJdGVzdCA9IGpRdWVyeSgiI21haW4iLCBkb2N1bWVudCk7CisJ
ZXF1YWxzKCB0ZXN0LnNlbGVjdG9yLCAiI21haW4iLCAiI21haW4gU2VsZWN0b3IiICk7CisJZXF1
YWxzKCB0ZXN0LmNvbnRleHQsIGRvY3VtZW50LCAiI21haW4gQ29udGV4dCIgKTsKKworCXRlc3Qg
PSBqUXVlcnkoIiNtYWluIiwgZG9jdW1lbnQuYm9keSk7CisJZXF1YWxzKCB0ZXN0LnNlbGVjdG9y
LCAiI21haW4iLCAiI21haW4gU2VsZWN0b3IiICk7CisJZXF1YWxzKCB0ZXN0LmNvbnRleHQsIGRv
Y3VtZW50LmJvZHksICIjbWFpbiBDb250ZXh0IiApOworCisJLy8gVGVzdCBjbG9uaW5nCisJdGVz
dCA9IGpRdWVyeSh0ZXN0KTsKKwllcXVhbHMoIHRlc3Quc2VsZWN0b3IsICIjbWFpbiIsICIjbWFp
biBTZWxlY3RvciIgKTsKKwllcXVhbHMoIHRlc3QuY29udGV4dCwgZG9jdW1lbnQuYm9keSwgIiNt
YWluIENvbnRleHQiICk7CisKKwl0ZXN0ID0galF1ZXJ5KGRvY3VtZW50LmJvZHkpLmZpbmQoIiNt
YWluIik7CisJZXF1YWxzKCB0ZXN0LnNlbGVjdG9yLCAiI21haW4iLCAiI21haW4gZmluZCBTZWxl
Y3RvciIgKTsKKwllcXVhbHMoIHRlc3QuY29udGV4dCwgZG9jdW1lbnQuYm9keSwgIiNtYWluIGZp
bmQgQ29udGV4dCIgKTsKKworCXRlc3QgPSBqUXVlcnkoIiNtYWluIikuZmlsdGVyKCJkaXYiKTsK
KwllcXVhbHMoIHRlc3Quc2VsZWN0b3IsICIjbWFpbi5maWx0ZXIoZGl2KSIsICIjbWFpbiBmaWx0
ZXIgU2VsZWN0b3IiICk7CisJZXF1YWxzKCB0ZXN0LmNvbnRleHQsIGRvY3VtZW50LCAiI21haW4g
ZmlsdGVyIENvbnRleHQiICk7CisKKwl0ZXN0ID0galF1ZXJ5KCIjbWFpbiIpLm5vdCgiZGl2Iik7
CisJZXF1YWxzKCB0ZXN0LnNlbGVjdG9yLCAiI21haW4ubm90KGRpdikiLCAiI21haW4gbm90IFNl
bGVjdG9yIiApOworCWVxdWFscyggdGVzdC5jb250ZXh0LCBkb2N1bWVudCwgIiNtYWluIG5vdCBD
b250ZXh0IiApOworCisJdGVzdCA9IGpRdWVyeSgiI21haW4iKS5maWx0ZXIoImRpdiIpLm5vdCgi
ZGl2Iik7CisJZXF1YWxzKCB0ZXN0LnNlbGVjdG9yLCAiI21haW4uZmlsdGVyKGRpdikubm90KGRp
dikiLCAiI21haW4gZmlsdGVyLCBub3QgU2VsZWN0b3IiICk7CisJZXF1YWxzKCB0ZXN0LmNvbnRl
eHQsIGRvY3VtZW50LCAiI21haW4gZmlsdGVyLCBub3QgQ29udGV4dCIgKTsKKworCXRlc3QgPSBq
UXVlcnkoIiNtYWluIikuZmlsdGVyKCJkaXYiKS5ub3QoImRpdiIpLmVuZCgpOworCWVxdWFscygg
dGVzdC5zZWxlY3RvciwgIiNtYWluLmZpbHRlcihkaXYpIiwgIiNtYWluIGZpbHRlciwgbm90LCBl
bmQgU2VsZWN0b3IiICk7CisJZXF1YWxzKCB0ZXN0LmNvbnRleHQsIGRvY3VtZW50LCAiI21haW4g
ZmlsdGVyLCBub3QsIGVuZCBDb250ZXh0IiApOworCisJdGVzdCA9IGpRdWVyeSgiI21haW4iKS5w
YXJlbnQoImJvZHkiKTsKKwllcXVhbHMoIHRlc3Quc2VsZWN0b3IsICIjbWFpbi5wYXJlbnQoYm9k
eSkiLCAiI21haW4gcGFyZW50IFNlbGVjdG9yIiApOworCWVxdWFscyggdGVzdC5jb250ZXh0LCBk
b2N1bWVudCwgIiNtYWluIHBhcmVudCBDb250ZXh0IiApOworCisJdGVzdCA9IGpRdWVyeSgiI21h
aW4iKS5lcSgwKTsKKwllcXVhbHMoIHRlc3Quc2VsZWN0b3IsICIjbWFpbi5zbGljZSgwLDEpIiwg
IiNtYWluIGVxIFNlbGVjdG9yIiApOworCWVxdWFscyggdGVzdC5jb250ZXh0LCBkb2N1bWVudCwg
IiNtYWluIGVxIENvbnRleHQiICk7CisKKwl2YXIgZCA9ICI8ZGl2IC8+IjsKKwllcXVhbHMoCisJ
CWpRdWVyeShkKS5hcHBlbmRUbyhqUXVlcnkoZCkpLnNlbGVjdG9yLAorCQlqUXVlcnkoZCkuYXBw
ZW5kVG8oZCkuc2VsZWN0b3IsCisJCSJtYW5pcHVsYXRpb24gbWV0aG9kcyBtYWtlIHNhbWUgc2Vs
ZWN0b3IgZm9yIGpRdWVyeSBvYmplY3RzIgorCSk7Cit9KTsKKworaWYgKCAhaXNMb2NhbCApIHsK
K3Rlc3QoImJyb3dzZXIiLCBmdW5jdGlvbigpIHsKKwlzdG9wKCk7CisKKwlqUXVlcnkuZ2V0KCJk
YXRhL3VhLnR4dCIsIGZ1bmN0aW9uKGRhdGEpeworCQl2YXIgdWFzID0gZGF0YS5zcGxpdCgiXG4i
KTsKKwkJZXhwZWN0KCAodWFzLmxlbmd0aCAtIDEpICogMiApOworCisJCWpRdWVyeS5lYWNoKHVh
cywgZnVuY3Rpb24oKXsKKwkJCXZhciBwYXJ0cyA9IHRoaXMuc3BsaXQoIlx0Iik7CisJCQlpZiAo
IHBhcnRzWzJdICkgeworCQkJCXZhciB1YSA9IGpRdWVyeS51YU1hdGNoKCBwYXJ0c1syXSApOwor
CQkJCWVxdWFscyggdWEuYnJvd3NlciwgcGFydHNbMF0sICJDaGVja2luZyBicm93c2VyIGZvciAi
ICsgcGFydHNbMl0gKTsKKwkJCQllcXVhbHMoIHVhLnZlcnNpb24sIHBhcnRzWzFdLCAiQ2hlY2tp
bmcgdmVyc2lvbiBzdHJpbmcgZm9yICIgKyBwYXJ0c1syXSApOworCQkJfQorCQl9KTsKKworCQlz
dGFydCgpOworCX0pOworfSk7Cit9CisKK3Rlc3QoIm5vQ29uZmxpY3QiLCBmdW5jdGlvbigpIHsK
KwlleHBlY3QoNyk7CisKKwl2YXIgJCQgPSBqUXVlcnk7CisKKwllcXVhbHMoIGpRdWVyeSwgalF1
ZXJ5Lm5vQ29uZmxpY3QoKSwgIm5vQ29uZmxpY3QgcmV0dXJuZWQgdGhlIGpRdWVyeSBvYmplY3Qi
ICk7CisJZXF1YWxzKCBqUXVlcnksICQkLCAiTWFrZSBzdXJlIGpRdWVyeSB3YXNuJ3QgdG91Y2hl
ZC4iICk7CisJZXF1YWxzKCAkLCBvcmlnaW5hbCQsICJNYWtlIHN1cmUgJCB3YXMgcmV2ZXJ0ZWQu
IiApOworCisJalF1ZXJ5ID0gJCA9ICQkOworCisJZXF1YWxzKCBqUXVlcnkubm9Db25mbGljdCh0
cnVlKSwgJCQsICJub0NvbmZsaWN0IHJldHVybmVkIHRoZSBqUXVlcnkgb2JqZWN0IiApOworCWVx
dWFscyggalF1ZXJ5LCBvcmlnaW5hbGpRdWVyeSwgIk1ha2Ugc3VyZSBqUXVlcnkgd2FzIHJldmVy
dGVkLiIgKTsKKwllcXVhbHMoICQsIG9yaWdpbmFsJCwgIk1ha2Ugc3VyZSAkIHdhcyByZXZlcnRl
ZC4iICk7CisJb2soICQkKCIjbWFpbiIpLmh0bWwoInRlc3QiKSwgIk1ha2Ugc3VyZSB0aGF0IGpR
dWVyeSBzdGlsbCB3b3Jrcy4iICk7CisKKwlqUXVlcnkgPSAkJDsKK30pOworCit0ZXN0KCJ0cmlt
IiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDkpOworCisJdmFyIG5ic3AgPSBTdHJpbmcuZnJvbUNo
YXJDb2RlKDE2MCk7CisKKwllcXVhbHMoIGpRdWVyeS50cmltKCJoZWxsbyAgIiksICJoZWxsbyIs
ICJ0cmFpbGluZyBzcGFjZSIgKTsKKwllcXVhbHMoIGpRdWVyeS50cmltKCIgIGhlbGxvIiksICJo
ZWxsbyIsICJsZWFkaW5nIHNwYWNlIiApOworCWVxdWFscyggalF1ZXJ5LnRyaW0oIiAgaGVsbG8g
ICAiKSwgImhlbGxvIiwgInNwYWNlIG9uIGJvdGggc2lkZXMiICk7CisJZXF1YWxzKCBqUXVlcnku
dHJpbSgiICAiICsgbmJzcCArICJoZWxsbyAgIiArIG5ic3AgKyAiICIpLCAiaGVsbG8iLCAiJm5i
c3A7IiApOworCisJZXF1YWxzKCBqUXVlcnkudHJpbSgpLCAiIiwgIk5vdGhpbmcgaW4uIiApOwor
CWVxdWFscyggalF1ZXJ5LnRyaW0oIHVuZGVmaW5lZCApLCAiIiwgIlVuZGVmaW5lZCIgKTsKKwll
cXVhbHMoIGpRdWVyeS50cmltKCBudWxsICksICIiLCAiTnVsbCIgKTsKKwllcXVhbHMoIGpRdWVy
eS50cmltKCA1ICksICI1IiwgIk51bWJlciIgKTsKKwllcXVhbHMoIGpRdWVyeS50cmltKCBmYWxz
ZSApLCAiZmFsc2UiLCAiQm9vbGVhbiIgKTsKK30pOworCit0ZXN0KCJ0eXBlIiwgZnVuY3Rpb24o
KSB7CisJZXhwZWN0KDIzKTsKKworCWVxdWFscyggalF1ZXJ5LnR5cGUobnVsbCksICJudWxsIiwg
Im51bGwiICk7CisJZXF1YWxzKCBqUXVlcnkudHlwZSh1bmRlZmluZWQpLCAidW5kZWZpbmVkIiwg
InVuZGVmaW5lZCIgKTsKKwllcXVhbHMoIGpRdWVyeS50eXBlKHRydWUpLCAiYm9vbGVhbiIsICJC
b29sZWFuIiApOworCWVxdWFscyggalF1ZXJ5LnR5cGUoZmFsc2UpLCAiYm9vbGVhbiIsICJCb29s
ZWFuIiApOworCWVxdWFscyggalF1ZXJ5LnR5cGUoQm9vbGVhbih0cnVlKSksICJib29sZWFuIiwg
IkJvb2xlYW4iICk7CisJZXF1YWxzKCBqUXVlcnkudHlwZSgwKSwgIm51bWJlciIsICJOdW1iZXIi
ICk7CisJZXF1YWxzKCBqUXVlcnkudHlwZSgxKSwgIm51bWJlciIsICJOdW1iZXIiICk7CisJZXF1
YWxzKCBqUXVlcnkudHlwZShOdW1iZXIoMSkpLCAibnVtYmVyIiwgIk51bWJlciIgKTsKKwllcXVh
bHMoIGpRdWVyeS50eXBlKCIiKSwgInN0cmluZyIsICJTdHJpbmciICk7CisJZXF1YWxzKCBqUXVl
cnkudHlwZSgiYSIpLCAic3RyaW5nIiwgIlN0cmluZyIgKTsKKwllcXVhbHMoIGpRdWVyeS50eXBl
KFN0cmluZygiYSIpKSwgInN0cmluZyIsICJTdHJpbmciICk7CisJZXF1YWxzKCBqUXVlcnkudHlw
ZSh7fSksICJvYmplY3QiLCAiT2JqZWN0IiApOworCWVxdWFscyggalF1ZXJ5LnR5cGUoL2Zvby8p
LCAicmVnZXhwIiwgIlJlZ0V4cCIgKTsKKwllcXVhbHMoIGpRdWVyeS50eXBlKG5ldyBSZWdFeHAo
ImFzZGYiKSksICJyZWdleHAiLCAiUmVnRXhwIiApOworCWVxdWFscyggalF1ZXJ5LnR5cGUoWzFd
KSwgImFycmF5IiwgIkFycmF5IiApOworCWVxdWFscyggalF1ZXJ5LnR5cGUobmV3IERhdGUoKSks
ICJkYXRlIiwgIkRhdGUiICk7CisJZXF1YWxzKCBqUXVlcnkudHlwZShuZXcgRnVuY3Rpb24oInJl
dHVybjsiKSksICJmdW5jdGlvbiIsICJGdW5jdGlvbiIgKTsKKwllcXVhbHMoIGpRdWVyeS50eXBl
KGZ1bmN0aW9uKCl7fSksICJmdW5jdGlvbiIsICJGdW5jdGlvbiIgKTsKKwllcXVhbHMoIGpRdWVy
eS50eXBlKHdpbmRvdyksICJvYmplY3QiLCAiV2luZG93IiApOworCWVxdWFscyggalF1ZXJ5LnR5
cGUoZG9jdW1lbnQpLCAib2JqZWN0IiwgIkRvY3VtZW50IiApOworCWVxdWFscyggalF1ZXJ5LnR5
cGUoZG9jdW1lbnQuYm9keSksICJvYmplY3QiLCAiRWxlbWVudCIgKTsKKwllcXVhbHMoIGpRdWVy
eS50eXBlKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJmb28iKSksICJvYmplY3QiLCAiVGV4dE5v
ZGUiICk7CisJZXF1YWxzKCBqUXVlcnkudHlwZShkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgiKiIpKSwgIm9iamVjdCIsICJOb2RlTGlzdCIgKTsKK30pOworCit0ZXN0KCJpc1BsYWluT2Jq
ZWN0IiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDE0KTsKKworCXN0b3AoKTsKKworCS8vIFRoZSB1
c2UgY2FzZSB0aGF0IHdlIHdhbnQgdG8gbWF0Y2gKKwlvayhqUXVlcnkuaXNQbGFpbk9iamVjdCh7
fSksICJ7fSIpOworCisJLy8gTm90IG9iamVjdHMgc2hvdWxkbid0IGJlIG1hdGNoZWQKKwlvaygh
alF1ZXJ5LmlzUGxhaW5PYmplY3QoIiIpLCAic3RyaW5nIik7CisJb2soIWpRdWVyeS5pc1BsYWlu
T2JqZWN0KDApICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCgxKSwgIm51bWJlciIpOworCW9rKCFq
UXVlcnkuaXNQbGFpbk9iamVjdCh0cnVlKSAmJiAhalF1ZXJ5LmlzUGxhaW5PYmplY3QoZmFsc2Up
LCAiYm9vbGVhbiIpOworCW9rKCFqUXVlcnkuaXNQbGFpbk9iamVjdChudWxsKSwgIm51bGwiKTsK
KwlvayghalF1ZXJ5LmlzUGxhaW5PYmplY3QodW5kZWZpbmVkKSwgInVuZGVmaW5lZCIpOworCisJ
Ly8gQXJyYXlzIHNob3VsZG4ndCBiZSBtYXRjaGVkCisJb2soIWpRdWVyeS5pc1BsYWluT2JqZWN0
KFtdKSwgImFycmF5Iik7CisKKwkvLyBJbnN0YW50aWF0ZWQgb2JqZWN0cyBzaG91bGRuJ3QgYmUg
bWF0Y2hlZAorCW9rKCFqUXVlcnkuaXNQbGFpbk9iamVjdChuZXcgRGF0ZSksICJuZXcgRGF0ZSIp
OworCisJdmFyIGZuID0gZnVuY3Rpb24oKXt9OworCisJLy8gRnVuY3Rpb25zIHNob3VsZG4ndCBi
ZSBtYXRjaGVkCisJb2soIWpRdWVyeS5pc1BsYWluT2JqZWN0KGZuKSwgImZuIik7CisKKwkvLyBB
Z2FpbiwgaW5zdGFudGlhdGVkIG9iamVjdHMgc2hvdWxkbid0IGJlIG1hdGNoZWQKKwlvayghalF1
ZXJ5LmlzUGxhaW5PYmplY3QobmV3IGZuKSwgIm5ldyBmbiAobm8gbWV0aG9kcykiKTsKKworCS8v
IE1ha2VzIHRoZSBmdW5jdGlvbiBhIGxpdHRsZSBtb3JlIHJlYWxpc3RpYworCS8vIChhbmQgaGFy
ZGVyIHRvIGRldGVjdCwgaW5jaWRlbnRhbGx5KQorCWZuLnByb3RvdHlwZSA9IHtzb21lTWV0aG9k
OiBmdW5jdGlvbigpe319OworCisJLy8gQWdhaW4sIGluc3RhbnRpYXRlZCBvYmplY3RzIHNob3Vs
ZG4ndCBiZSBtYXRjaGVkCisJb2soIWpRdWVyeS5pc1BsYWluT2JqZWN0KG5ldyBmbiksICJuZXcg
Zm4iKTsKKworCS8vIERPTSBFbGVtZW50CisJb2soIWpRdWVyeS5pc1BsYWluT2JqZWN0KGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKSwgIkRPTSBFbGVtZW50Iik7CisKKwkvLyBXaW5kb3cK
KwlvayghalF1ZXJ5LmlzUGxhaW5PYmplY3Qod2luZG93KSwgIndpbmRvdyIpOworCisJdHJ5IHsK
KwkJdmFyIGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOworCQlkb2N1
bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7CisKKwkJd2luZG93LmlmcmFtZURvbmUgPSBm
dW5jdGlvbihvdGhlck9iamVjdCl7CisJCQkvLyBPYmplY3RzIGZyb20gb3RoZXIgd2luZG93cyBz
aG91bGQgYmUgbWF0Y2hlZAorCQkJb2soalF1ZXJ5LmlzUGxhaW5PYmplY3QobmV3IG90aGVyT2Jq
ZWN0KSwgIm5ldyBvdGhlck9iamVjdCIpOworCQkJZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCgg
aWZyYW1lICk7CisJCQlzdGFydCgpOworCQl9OworCisJCXZhciBkb2MgPSBpZnJhbWUuY29udGVu
dERvY3VtZW50IHx8IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50OworCQlkb2Mub3Blbigp
OworCQlkb2Mud3JpdGUoIjxib2R5IG9ubG9hZD0nd2luZG93LnBhcmVudC5pZnJhbWVEb25lKE9i
amVjdCk7Jz4iKTsKKwkJZG9jLmNsb3NlKCk7CisJfSBjYXRjaChlKSB7CisJCWRvY3VtZW50LmJv
ZHkucmVtb3ZlQ2hpbGQoIGlmcmFtZSApOworCisJCW9rKHRydWUsICJuZXcgb3RoZXJPYmplY3Qg
LSBpZnJhbWVzIG5vdCBzdXBwb3J0ZWQiKTsKKwkJc3RhcnQoKTsKKwl9Cit9KTsKKwordGVzdCgi
aXNGdW5jdGlvbiIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgxOSk7CisKKwkvLyBNYWtlIHN1cmUg
dGhhdCBmYWxzZSB2YWx1ZXMgcmV0dXJuIGZhbHNlCisJb2soICFqUXVlcnkuaXNGdW5jdGlvbigp
LCAiTm8gVmFsdWUiICk7CisJb2soICFqUXVlcnkuaXNGdW5jdGlvbiggbnVsbCApLCAibnVsbCBW
YWx1ZSIgKTsKKwlvayggIWpRdWVyeS5pc0Z1bmN0aW9uKCB1bmRlZmluZWQgKSwgInVuZGVmaW5l
ZCBWYWx1ZSIgKTsKKwlvayggIWpRdWVyeS5pc0Z1bmN0aW9uKCAiIiApLCAiRW1wdHkgU3RyaW5n
IFZhbHVlIiApOworCW9rKCAhalF1ZXJ5LmlzRnVuY3Rpb24oIDAgKSwgIjAgVmFsdWUiICk7CisK
KwkvLyBDaGVjayBidWlsdC1pbnMKKwkvLyBTYWZhcmkgdXNlcyAiKEludGVybmFsIEZ1bmN0aW9u
KSIKKwlvayggalF1ZXJ5LmlzRnVuY3Rpb24oU3RyaW5nKSwgIlN0cmluZyBGdW5jdGlvbigiK1N0
cmluZysiKSIgKTsKKwlvayggalF1ZXJ5LmlzRnVuY3Rpb24oQXJyYXkpLCAiQXJyYXkgRnVuY3Rp
b24oIitBcnJheSsiKSIgKTsKKwlvayggalF1ZXJ5LmlzRnVuY3Rpb24oT2JqZWN0KSwgIk9iamVj
dCBGdW5jdGlvbigiK09iamVjdCsiKSIgKTsKKwlvayggalF1ZXJ5LmlzRnVuY3Rpb24oRnVuY3Rp
b24pLCAiRnVuY3Rpb24gRnVuY3Rpb24oIitGdW5jdGlvbisiKSIgKTsKKworCS8vIFdoZW4gc3Ry
aW5naWZpZWQsIHRoaXMgY291bGQgYmUgbWlzaW50ZXJwcmV0ZWQKKwl2YXIgbXlzdHIgPSAiZnVu
Y3Rpb24iOworCW9rKCAhalF1ZXJ5LmlzRnVuY3Rpb24obXlzdHIpLCAiRnVuY3Rpb24gU3RyaW5n
IiApOworCisJLy8gV2hlbiBzdHJpbmdpZmllZCwgdGhpcyBjb3VsZCBiZSBtaXNpbnRlcnByZXRl
ZAorCXZhciBteWFyciA9IFsgImZ1bmN0aW9uIiBdOworCW9rKCAhalF1ZXJ5LmlzRnVuY3Rpb24o
bXlhcnIpLCAiRnVuY3Rpb24gQXJyYXkiICk7CisKKwkvLyBXaGVuIHN0cmluZ2lmaWVkLCB0aGlz
IGNvdWxkIGJlIG1pc2ludGVycHJldGVkCisJdmFyIG15ZnVuY3Rpb24gPSB7ICJmdW5jdGlvbiI6
ICJ0ZXN0IiB9OworCW9rKCAhalF1ZXJ5LmlzRnVuY3Rpb24obXlmdW5jdGlvbiksICJGdW5jdGlv
biBPYmplY3QiICk7CisKKwkvLyBNYWtlIHN1cmUgbm9ybWFsIGZ1bmN0aW9ucyBzdGlsbCB3b3Jr
CisJdmFyIGZuID0gZnVuY3Rpb24oKXt9OworCW9rKCBqUXVlcnkuaXNGdW5jdGlvbihmbiksICJO
b3JtYWwgRnVuY3Rpb24iICk7CisKKwl2YXIgb2JqID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
b2JqZWN0Iik7CisKKwkvLyBGaXJlZm94IHNheXMgdGhpcyBpcyBhIGZ1bmN0aW9uCisJb2soICFq
UXVlcnkuaXNGdW5jdGlvbihvYmopLCAiT2JqZWN0IEVsZW1lbnQiICk7CisKKwkvLyBJRSBzYXlz
IHRoaXMgaXMgYW4gb2JqZWN0CisJLy8gU2luY2UgMS4zLCB0aGlzIGlzbid0IHN1cHBvcnRlZCAo
IzI5NjgpCisJLy9vayggalF1ZXJ5LmlzRnVuY3Rpb24ob2JqLmdldEF0dHJpYnV0ZSksICJnZXRB
dHRyaWJ1dGUgRnVuY3Rpb24iICk7CisKKwl2YXIgbm9kZXMgPSBkb2N1bWVudC5ib2R5LmNoaWxk
Tm9kZXM7CisKKwkvLyBTYWZhcmkgc2F5cyB0aGlzIGlzIGEgZnVuY3Rpb24KKwlvayggIWpRdWVy
eS5pc0Z1bmN0aW9uKG5vZGVzKSwgImNoaWxkTm9kZXMgUHJvcGVydHkiICk7CisKKwl2YXIgZmly
c3QgPSBkb2N1bWVudC5ib2R5LmZpcnN0Q2hpbGQ7CisKKwkvLyBOb3JtYWwgZWxlbWVudHMgYXJl
IHJlcG9ydGVkIG9rIGV2ZXJ5d2hlcmUKKwlvayggIWpRdWVyeS5pc0Z1bmN0aW9uKGZpcnN0KSwg
IkEgbm9ybWFsIERPTSBFbGVtZW50IiApOworCisJdmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiaW5wdXQiKTsKKwlpbnB1dC50eXBlID0gInRleHQiOworCWRvY3VtZW50LmJvZHku
YXBwZW5kQ2hpbGQoIGlucHV0ICk7CisKKwkvLyBJRSBzYXlzIHRoaXMgaXMgYW4gb2JqZWN0CisJ
Ly8gU2luY2UgMS4zLCB0aGlzIGlzbid0IHN1cHBvcnRlZCAoIzI5NjgpCisJLy9vayggalF1ZXJ5
LmlzRnVuY3Rpb24oaW5wdXQuZm9jdXMpLCAiQSBkZWZhdWx0IGZ1bmN0aW9uIHByb3BlcnR5IiAp
OworCisJZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCggaW5wdXQgKTsKKworCXZhciBhID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOworCWEuaHJlZiA9ICJzb21lLWZ1bmN0aW9uIjsKKwlk
b2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCBhICk7CisKKwkvLyBUaGlzIHNlcmlhbGl6ZXMgd2l0
aCB0aGUgd29yZCAnZnVuY3Rpb24nIGluIGl0CisJb2soICFqUXVlcnkuaXNGdW5jdGlvbihhKSwg
IkFuY2hvciBFbGVtZW50IiApOworCisJZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCggYSApOwor
CisJLy8gUmVjdXJzaXZlIGZ1bmN0aW9uIGNhbGxzIGhhdmUgbGVuZ3RocyBhbmQgYXJyYXktbGlr
ZSBwcm9wZXJ0aWVzCisJZnVuY3Rpb24gY2FsbG1lKGNhbGxiYWNrKXsKKwkJZnVuY3Rpb24gZm4o
cmVzcG9uc2UpeworCQkJY2FsbGJhY2socmVzcG9uc2UpOworCQl9CisKKwkJb2soIGpRdWVyeS5p
c0Z1bmN0aW9uKGZuKSwgIlJlY3Vyc2l2ZSBGdW5jdGlvbiBDYWxsIiApOworCisJCWZuKHsgc29t
ZTogImRhdGEiIH0pOworCX07CisKKwljYWxsbWUoZnVuY3Rpb24oKXsKKwkJY2FsbG1lKGZ1bmN0
aW9uKCl7fSk7CisJfSk7Cit9KTsKKwordGVzdCgiaXNYTUxEb2MgLSBIVE1MIiwgZnVuY3Rpb24o
KSB7CisJZXhwZWN0KDQpOworCisJb2soICFqUXVlcnkuaXNYTUxEb2MoIGRvY3VtZW50ICksICJI
VE1MIGRvY3VtZW50IiApOworCW9rKCAhalF1ZXJ5LmlzWE1MRG9jKCBkb2N1bWVudC5kb2N1bWVu
dEVsZW1lbnQgKSwgIkhUTUwgZG9jdW1lbnRFbGVtZW50IiApOworCW9rKCAhalF1ZXJ5LmlzWE1M
RG9jKCBkb2N1bWVudC5ib2R5ICksICJIVE1MIEJvZHkgRWxlbWVudCIgKTsKKworCXZhciBpZnJh
bWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKKwlkb2N1bWVudC5ib2R5LmFw
cGVuZENoaWxkKCBpZnJhbWUgKTsKKworCXRyeSB7CisJCXZhciBib2R5ID0galF1ZXJ5KGlmcmFt
ZSkuY29udGVudHMoKVswXTsKKworCQl0cnkgeworCQkJb2soICFqUXVlcnkuaXNYTUxEb2MoIGJv
ZHkgKSwgIklmcmFtZSBib2R5IGVsZW1lbnQiICk7CisJCX0gY2F0Y2goZSkgeworCQkJb2soIGZh
bHNlLCAiSWZyYW1lIGJvZHkgZWxlbWVudCBleGNlcHRpb24iICk7CisJCX0KKworCX0gY2F0Y2go
ZSkgeworCQlvayggdHJ1ZSwgIklmcmFtZSBib2R5IGVsZW1lbnQgLSBpZnJhbWUgbm90IHdvcmtp
bmcgY29ycmVjdGx5IiApOworCX0KKworCWRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoIGlmcmFt
ZSApOworfSk7CisKK2lmICggIWlzTG9jYWwgKSB7Cit0ZXN0KCJpc1hNTERvYyAtIFhNTCIsIGZ1
bmN0aW9uKCkgeworCWV4cGVjdCgzKTsKKwlzdG9wKCk7CisJalF1ZXJ5LmdldCgnZGF0YS9kYXNo
Ym9hcmQueG1sJywgZnVuY3Rpb24oeG1sKSB7CisJCW9rKCBqUXVlcnkuaXNYTUxEb2MoIHhtbCAp
LCAiWE1MIGRvY3VtZW50IiApOworCQlvayggalF1ZXJ5LmlzWE1MRG9jKCB4bWwuZG9jdW1lbnRF
bGVtZW50ICksICJYTUwgZG9jdW1lbnRFbGVtZW50IiApOworCQlvayggalF1ZXJ5LmlzWE1MRG9j
KCBqUXVlcnkoInRhYiIsIHhtbClbMF0gKSwgIlhNTCBUYWIgRWxlbWVudCIgKTsKKwkJc3RhcnQo
KTsKKwl9KTsKK30pOworfQorCit0ZXN0KCJpc1dpbmRvdyIsIGZ1bmN0aW9uKCkgeworCWV4cGVj
dCggMTIgKTsKKworCW9rKCBqUXVlcnkuaXNXaW5kb3cod2luZG93KSwgIndpbmRvdyIgKTsKKwlv
ayggIWpRdWVyeS5pc1dpbmRvdygpLCAiZW1wdHkiICk7CisJb2soICFqUXVlcnkuaXNXaW5kb3co
bnVsbCksICJudWxsIiApOworCW9rKCAhalF1ZXJ5LmlzV2luZG93KHVuZGVmaW5lZCksICJ1bmRl
ZmluZWQiICk7CisJb2soICFqUXVlcnkuaXNXaW5kb3coZG9jdW1lbnQpLCAiZG9jdW1lbnQiICk7
CisJb2soICFqUXVlcnkuaXNXaW5kb3coZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSwgImRvY3Vt
ZW50RWxlbWVudCIgKTsKKwlvayggIWpRdWVyeS5pc1dpbmRvdygiIiksICJzdHJpbmciICk7CisJ
b2soICFqUXVlcnkuaXNXaW5kb3coMSksICJudW1iZXIiICk7CisJb2soICFqUXVlcnkuaXNXaW5k
b3codHJ1ZSksICJib29sZWFuIiApOworCW9rKCAhalF1ZXJ5LmlzV2luZG93KHt9KSwgIm9iamVj
dCIgKTsKKwkvLyBITU1NCisJLy8gb2soICFqUXVlcnkuaXNXaW5kb3coeyBzZXRJbnRlcnZhbDog
ZnVuY3Rpb24oKXt9IH0pLCAiZmFrZSB3aW5kb3ciICk7CisJb2soICFqUXVlcnkuaXNXaW5kb3co
L3dpbmRvdy8pLCAicmVnZXhwIiApOworCW9rKCAhalF1ZXJ5LmlzV2luZG93KGZ1bmN0aW9uKCl7
fSksICJmdW5jdGlvbiIgKTsKK30pOworCit0ZXN0KCJqUXVlcnkoJ2h0bWwnKSIsIGZ1bmN0aW9u
KCkgeworCWV4cGVjdCgxNSk7CisKKwlRVW5pdC5yZXNldCgpOworCWpRdWVyeS5mb28gPSBmYWxz
ZTsKKwl2YXIgcyA9IGpRdWVyeSgiPHNjcmlwdD5qUXVlcnkuZm9vPSd0ZXN0Jzs8L3NjcmlwdD4i
KVswXTsKKwlvayggcywgIkNyZWF0aW5nIGEgc2NyaXB0IiApOworCW9rKCAhalF1ZXJ5LmZvbywg
Ik1ha2Ugc3VyZSB0aGUgc2NyaXB0IHdhc24ndCBleGVjdXRlZCBwcmVtYXR1cmVseSIgKTsKKwlq
UXVlcnkoImJvZHkiKS5hcHBlbmQoIjxzY3JpcHQ+alF1ZXJ5LmZvbz0ndGVzdCc7PC9zY3JpcHQ+
Iik7CisJb2soIGpRdWVyeS5mb28sICJFeGVjdXRpbmcgYSBzY3JpcHRzIGNvbnRlbnRzIGluIHRo
ZSByaWdodCBjb250ZXh0IiApOworCisJLy8gVGVzdCBtdWx0aS1saW5lIEhUTUwKKwl2YXIgZGl2
ID0galF1ZXJ5KCI8ZGl2PlxyXG5zb21lIHRleHRcbjxwPnNvbWUgcDwvcD5cbm1vcmUgdGV4dFxy
XG48L2Rpdj4iKVswXTsKKwllcXVhbHMoIGRpdi5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpLCAiRElW
IiwgIk1ha2Ugc3VyZSB3ZSdyZSBnZXR0aW5nIGEgZGl2LiIgKTsKKwllcXVhbHMoIGRpdi5maXJz
dENoaWxkLm5vZGVUeXBlLCAzLCAiVGV4dCBub2RlLiIgKTsKKwllcXVhbHMoIGRpdi5sYXN0Q2hp
bGQubm9kZVR5cGUsIDMsICJUZXh0IG5vZGUuIiApOworCWVxdWFscyggZGl2LmNoaWxkTm9kZXNb
MV0ubm9kZVR5cGUsIDEsICJQYXJhZ3JhcGguIiApOworCWVxdWFscyggZGl2LmNoaWxkTm9kZXNb
MV0uZmlyc3RDaGlsZC5ub2RlVHlwZSwgMywgIlBhcmFncmFwaCB0ZXh0LiIgKTsKKworCVFVbml0
LnJlc2V0KCk7CisJb2soIGpRdWVyeSgiPGxpbmsgcmVsPSdzdHlsZXNoZWV0Jy8+IilbMF0sICJD
cmVhdGluZyBhIGxpbmsiICk7CisKKwlvayggIWpRdWVyeSgiPHNjcmlwdC8+IilbMF0ucGFyZW50
Tm9kZSwgIkNyZWF0ZSBhIHNjcmlwdCIgKTsKKworCW9rKCBqUXVlcnkoIjxpbnB1dC8+IikuYXR0
cigidHlwZSIsICJoaWRkZW4iKSwgIkNyZWF0ZSBhbiBpbnB1dCBhbmQgc2V0IHRoZSB0eXBlLiIg
KTsKKworCXZhciBqID0galF1ZXJ5KCI8c3Bhbj5oaTwvc3Bhbj4gdGhlcmUgPCEtLSBtb24gYW1p
IC0tPiIpOworCW9rKCBqLmxlbmd0aCA+PSAyLCAiQ2hlY2sgbm9kZSx0ZXh0bm9kZSxjb21tZW50
IGNyZWF0aW9uIChzb21lIGJyb3dzZXJzIGRlbGV0ZSBjb21tZW50cykiICk7CisKKwlvayggIWpR
dWVyeSgiPG9wdGlvbj50ZXN0PC9vcHRpb24+IilbMF0uc2VsZWN0ZWQsICJNYWtlIHN1cmUgdGhh
dCBvcHRpb25zIGFyZSBhdXRvLXNlbGVjdGVkICMyMDUwIiApOworCisJb2soIGpRdWVyeSgiPGRp
dj48L2Rpdj4iKVswXSwgIkNyZWF0ZSBhIGRpdiB3aXRoIGNsb3NpbmcgdGFnLiIgKTsKKwlvaygg
alF1ZXJ5KCI8dGFibGU+PC90YWJsZT4iKVswXSwgIkNyZWF0ZSBhIHRhYmxlIHdpdGggY2xvc2lu
ZyB0YWcuIiApOworfSk7CisKK3Rlc3QoImpRdWVyeSgnaHRtbCcsIGNvbnRleHQpIiwgZnVuY3Rp
b24oKSB7CisJZXhwZWN0KDEpOworCisJdmFyICRkaXYgPSBqUXVlcnkoIjxkaXYvPiIpWzBdOwor
CXZhciAkc3BhbiA9IGpRdWVyeSgiPHNwYW4vPiIsICRkaXYpOworCWVxdWFscygkc3Bhbi5sZW5n
dGgsIDEsICJWZXJpZnkgYSBzcGFuIGNyZWF0ZWQgd2l0aCBhIGRpdiBjb250ZXh0IHdvcmtzLCAj
MTc2MyIpOworfSk7CisKK2lmICggIWlzTG9jYWwgKSB7Cit0ZXN0KCJqUXVlcnkoc2VsZWN0b3Is
IHhtbCkudGV4dChzdHIpIC0gTG9hZGVkIHZpYSBYTUwgZG9jdW1lbnQiLCBmdW5jdGlvbigpIHsK
KwlleHBlY3QoMik7CisJc3RvcCgpOworCWpRdWVyeS5nZXQoJ2RhdGEvZGFzaGJvYXJkLnhtbCcs
IGZ1bmN0aW9uKHhtbCkgeworCQkvLyB0ZXN0cyBmb3IgIzE0MTkgd2hlcmUgSUUgd2FzIGEgcHJv
YmxlbQorCQl2YXIgdGFiID0galF1ZXJ5KCJ0YWIiLCB4bWwpLmVxKDApOworCQllcXVhbHMoIHRh
Yi50ZXh0KCksICJibGFibGEiLCAiVmVyaWZ5IGluaXRpYWwgdGV4dCBjb3JyZWN0IiApOworCQl0
YWIudGV4dCgibmV3dGV4dCIpOworCQllcXVhbHMoIHRhYi50ZXh0KCksICJuZXd0ZXh0IiwgIlZl
cmlmeSBuZXcgdGV4dCBjb3JyZWN0IiApOworCQlzdGFydCgpOworCX0pOworfSk7Cit9CisKK3Rl
c3QoImVuZCgpIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDMpOworCWVxdWFscyggJ1lhaG9vJywg
alF1ZXJ5KCcjeWFob28nKS5wYXJlbnQoKS5lbmQoKS50ZXh0KCksICdDaGVjayBmb3IgZW5kJyAp
OworCW9rKCBqUXVlcnkoJyN5YWhvbycpLmVuZCgpLCAnQ2hlY2sgZm9yIGVuZCB3aXRoIG5vdGhp
bmcgdG8gZW5kJyApOworCisJdmFyIHggPSBqUXVlcnkoJyN5YWhvbycpOworCXgucGFyZW50KCk7
CisJZXF1YWxzKCAnWWFob28nLCBqUXVlcnkoJyN5YWhvbycpLnRleHQoKSwgJ0NoZWNrIGZvciBu
b24tZGVzdHJ1Y3RpdmUgYmVoYXZpb3VyJyApOworfSk7CisKK3Rlc3QoImxlbmd0aCIsIGZ1bmN0
aW9uKCkgeworCWV4cGVjdCgxKTsKKwllcXVhbHMoIGpRdWVyeSgiI21haW4gcCIpLmxlbmd0aCwg
NiwgIkdldCBOdW1iZXIgb2YgRWxlbWVudHMgRm91bmQiICk7Cit9KTsKKwordGVzdCgic2l6ZSgp
IiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDEpOworCWVxdWFscyggalF1ZXJ5KCIjbWFpbiBwIiku
c2l6ZSgpLCA2LCAiR2V0IE51bWJlciBvZiBFbGVtZW50cyBGb3VuZCIgKTsKK30pOworCit0ZXN0
KCJnZXQoKSIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgxKTsKKwlzYW1lKCBqUXVlcnkoIiNtYWlu
IHAiKS5nZXQoKSwgcSgiZmlyc3RwIiwiYXAiLCJzbmRwIiwiZW4iLCJzYXAiLCJmaXJzdCIpLCAi
R2V0IEFsbCBFbGVtZW50cyIgKTsKK30pOworCit0ZXN0KCJ0b0FycmF5KCkiLCBmdW5jdGlvbigp
IHsKKwlleHBlY3QoMSk7CisJc2FtZSggalF1ZXJ5KCIjbWFpbiBwIikudG9BcnJheSgpLAorCQlx
KCJmaXJzdHAiLCJhcCIsInNuZHAiLCJlbiIsInNhcCIsImZpcnN0IiksCisJCSJDb252ZXJ0IGpR
dWVyeSBvYmplY3QgdG8gYW4gQXJyYXkiICkKK30pCisKK3Rlc3QoImdldChOdW1iZXIpIiwgZnVu
Y3Rpb24oKSB7CisJZXhwZWN0KDIpOworCWVxdWFscyggalF1ZXJ5KCIjbWFpbiBwIikuZ2V0KDAp
LCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmlyc3RwIiksICJHZXQgQSBTaW5nbGUgRWxlbWVu
dCIgKTsKKwlzdHJpY3RFcXVhbCggalF1ZXJ5KCIjZmlyc3RwIikuZ2V0KDEpLCB1bmRlZmluZWQs
ICJUcnkgZ2V0IHdpdGggaW5kZXggbGFyZ2VyIGVsZW1lbnRzIGNvdW50IiApOworfSk7CisKK3Rl
c3QoImdldCgtTnVtYmVyKSIsZnVuY3Rpb24oKSB7CisJZXhwZWN0KDIpOworCWVxdWFscyggalF1
ZXJ5KCJwIikuZ2V0KC0xKSwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpcnN0IiksICJHZXQg
YSBzaW5nbGUgZWxlbWVudCB3aXRoIG5lZ2F0aXZlIGluZGV4IiApOworCXN0cmljdEVxdWFsKCBq
UXVlcnkoIiNmaXJzdHAiKS5nZXQoLTIpLCB1bmRlZmluZWQsICJUcnkgZ2V0IHdpdGggaW5kZXgg
bmVnYXRpdmUgaW5kZXggbGFyZ2VyIHRoZW4gZWxlbWVudHMgY291bnQiICk7Cit9KQorCit0ZXN0
KCJlYWNoKEZ1bmN0aW9uKSIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgxKTsKKwl2YXIgZGl2ID0g
alF1ZXJ5KCJkaXYiKTsKKwlkaXYuZWFjaChmdW5jdGlvbigpe3RoaXMuZm9vID0gJ3pvbyc7fSk7
CisJdmFyIHBhc3MgPSB0cnVlOworCWZvciAoIHZhciBpID0gMDsgaSA8IGRpdi5zaXplKCk7IGkr
KyApIHsKKwkJaWYgKCBkaXYuZ2V0KGkpLmZvbyAhPSAiem9vIiApIHBhc3MgPSBmYWxzZTsKKwl9
CisJb2soIHBhc3MsICJFeGVjdXRlIGEgZnVuY3Rpb24sIFJlbGF0aXZlIiApOworfSk7CisKK3Rl
c3QoInNsaWNlKCkiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoNyk7CisKKwl2YXIgJGxpbmtzID0g
alF1ZXJ5KCIjYXAgYSIpOworCisJc2FtZSggJGxpbmtzLnNsaWNlKDEsMikuZ2V0KCksIHEoImdy
b3VwcyIpLCAic2xpY2UoMSwyKSIgKTsKKwlzYW1lKCAkbGlua3Muc2xpY2UoMSkuZ2V0KCksIHEo
Imdyb3VwcyIsICJhbmNob3IxIiwgIm1hcmsiKSwgInNsaWNlKDEpIiApOworCXNhbWUoICRsaW5r
cy5zbGljZSgwLDMpLmdldCgpLCBxKCJnb29nbGUiLCAiZ3JvdXBzIiwgImFuY2hvcjEiKSwgInNs
aWNlKDAsMykiICk7CisJc2FtZSggJGxpbmtzLnNsaWNlKC0xKS5nZXQoKSwgcSgibWFyayIpLCAi
c2xpY2UoLTEpIiApOworCisJc2FtZSggJGxpbmtzLmVxKDEpLmdldCgpLCBxKCJncm91cHMiKSwg
ImVxKDEpIiApOworCXNhbWUoICRsaW5rcy5lcSgnMicpLmdldCgpLCBxKCJhbmNob3IxIiksICJl
cSgnMicpIiApOworCXNhbWUoICRsaW5rcy5lcSgtMSkuZ2V0KCksIHEoIm1hcmsiKSwgImVxKC0x
KSIgKTsKK30pOworCit0ZXN0KCJmaXJzdCgpL2xhc3QoKSIsIGZ1bmN0aW9uKCkgeworCWV4cGVj
dCg0KTsKKworCXZhciAkbGlua3MgPSBqUXVlcnkoIiNhcCBhIiksICRub25lID0galF1ZXJ5KCJh
c2RmIik7CisKKwlzYW1lKCAkbGlua3MuZmlyc3QoKS5nZXQoKSwgcSgiZ29vZ2xlIiksICJmaXJz
dCgpIiApOworCXNhbWUoICRsaW5rcy5sYXN0KCkuZ2V0KCksIHEoIm1hcmsiKSwgImxhc3QoKSIg
KTsKKworCXNhbWUoICRub25lLmZpcnN0KCkuZ2V0KCksIFtdLCAiZmlyc3QoKSBub25lIiApOwor
CXNhbWUoICRub25lLmxhc3QoKS5nZXQoKSwgW10sICJsYXN0KCkgbm9uZSIgKTsKK30pOworCit0
ZXN0KCJtYXAoKSIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgyKTsvL2V4cGVjdCg2KTsKKworCXNh
bWUoCisJCWpRdWVyeSgiI2FwIikubWFwKGZ1bmN0aW9uKCl7CisJCQlyZXR1cm4galF1ZXJ5KHRo
aXMpLmZpbmQoImEiKS5nZXQoKTsKKwkJfSkuZ2V0KCksCisJCXEoImdvb2dsZSIsICJncm91cHMi
LCAiYW5jaG9yMSIsICJtYXJrIiksCisJCSJBcnJheSBNYXAiCisJKTsKKworCXNhbWUoCisJCWpR
dWVyeSgiI2FwID4gYSIpLm1hcChmdW5jdGlvbigpeworCQkJcmV0dXJuIHRoaXMucGFyZW50Tm9k
ZTsKKwkJfSkuZ2V0KCksCisJCXEoImFwIiwiYXAiLCJhcCIpLAorCQkiU2luZ2xlIE1hcCIKKwkp
OworCisJcmV0dXJuOy8vdGhlc2UgaGF2ZW4ndCBiZWVuIGFjY2VwdGVkIHlldAorCisJLy9mb3Ig
IzI2MTYKKwl2YXIga2V5cyA9IGpRdWVyeS5tYXAoIHthOjEsYjoyfSwgZnVuY3Rpb24oIHYsIGsg
KXsKKwkJcmV0dXJuIGs7CisJfSwgWyBdICk7CisKKwllcXVhbHMoIGtleXMuam9pbigiIiksICJh
YiIsICJNYXAgdGhlIGtleXMgZnJvbSBhIGhhc2ggdG8gYW4gYXJyYXkiICk7CisKKwl2YXIgdmFs
dWVzID0galF1ZXJ5Lm1hcCgge2E6MSxiOjJ9LCBmdW5jdGlvbiggdiwgayApeworCQlyZXR1cm4g
djsKKwl9LCBbIF0gKTsKKworCWVxdWFscyggdmFsdWVzLmpvaW4oIiIpLCAiMTIiLCAiTWFwIHRo
ZSB2YWx1ZXMgZnJvbSBhIGhhc2ggdG8gYW4gYXJyYXkiICk7CisKKwl2YXIgc2NyaXB0cyA9IGRv
Y3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKTsKKwl2YXIgbWFwcGVkID0galF1
ZXJ5Lm1hcCggc2NyaXB0cywgZnVuY3Rpb24oIHYsIGsgKXsKKwkJcmV0dXJuIHY7CisJfSwge2xl
bmd0aDowfSApOworCisJZXF1YWxzKCBtYXBwZWQubGVuZ3RoLCBzY3JpcHRzLmxlbmd0aCwgIk1h
cCBhbiBhcnJheSgtbGlrZSkgdG8gYSBoYXNoIiApOworCisJdmFyIGZsYXQgPSBqUXVlcnkubWFw
KCBBcnJheSg0KSwgZnVuY3Rpb24oIHYsIGsgKXsKKwkJcmV0dXJuIGsgJSAyID8gayA6IFtrLGss
a107Ly90cnkgbWl4aW5nIGFycmF5IGFuZCByZWd1bGFyIHJldHVybnMKKwl9KTsKKworCWVxdWFs
cyggZmxhdC5qb2luKCIiKSwgIjAwMDEyMjIzIiwgInRyeSB0aGUgbmV3IGZsYXR0ZW4gdGVjaG5p
cXVlKCMyNjE2KSIgKTsKK30pOworCit0ZXN0KCJqUXVlcnkubWVyZ2UoKSIsIGZ1bmN0aW9uKCkg
eworCWV4cGVjdCg4KTsKKworCXZhciBwYXJzZSA9IGpRdWVyeS5tZXJnZTsKKworCXNhbWUoIHBh
cnNlKFtdLFtdKSwgW10sICJFbXB0eSBhcnJheXMiICk7CisKKwlzYW1lKCBwYXJzZShbMV0sWzJd
KSwgWzEsMl0sICJCYXNpYyIgKTsKKwlzYW1lKCBwYXJzZShbMSwyXSxbMyw0XSksIFsxLDIsMyw0
XSwgIkJhc2ljIiApOworCisJc2FtZSggcGFyc2UoWzEsMl0sW10pLCBbMSwyXSwgIlNlY29uZCBl
bXB0eSIgKTsKKwlzYW1lKCBwYXJzZShbXSxbMSwyXSksIFsxLDJdLCAiRmlyc3QgZW1wdHkiICk7
CisKKwkvLyBGaXhlZCBhdCBbNTk5OF0sICMzNjQxCisJc2FtZSggcGFyc2UoWy0yLC0xXSwgWzAs
MSwyXSksIFstMiwtMSwwLDEsMl0sICJTZWNvbmQgYXJyYXkgaW5jbHVkaW5nIGEgemVybyAoZmFs
c3kpIik7CisKKwkvLyBBZnRlciBmaXhpbmcgIzU1MjcKKwlzYW1lKCBwYXJzZShbXSwgW251bGws
IHVuZGVmaW5lZF0pLCBbbnVsbCwgdW5kZWZpbmVkXSwgIlNlY29uZCBhcnJheSBpbmNsdWRpbmcg
bnVsbCBhbmQgdW5kZWZpbmVkIHZhbHVlcyIpOworCXNhbWUoIHBhcnNlKHtsZW5ndGg6MH0sIFsx
LDJdKSwge2xlbmd0aDoyLCAwOjEsIDE6Mn0sICJGaXJzdCBhcnJheSBsaWtlIik7Cit9KTsKKwor
dGVzdCgialF1ZXJ5LmV4dGVuZChPYmplY3QsIE9iamVjdCkiLCBmdW5jdGlvbigpIHsKKwlleHBl
Y3QoMjgpOworCisJdmFyIHNldHRpbmdzID0geyB4bnVtYmVyMTogNSwgeG51bWJlcjI6IDcsIHhz
dHJpbmcxOiAicGV0ZXIiLCB4c3RyaW5nMjogInBhbiIgfSwKKwkJb3B0aW9ucyA9IHsgeG51bWJl
cjI6IDEsIHhzdHJpbmcyOiAieCIsIHh4eDogIm5ld3N0cmluZyIgfSwKKwkJb3B0aW9uc0NvcHkg
PSB7IHhudW1iZXIyOiAxLCB4c3RyaW5nMjogIngiLCB4eHg6ICJuZXdzdHJpbmciIH0sCisJCW1l
cmdlZCA9IHsgeG51bWJlcjE6IDUsIHhudW1iZXIyOiAxLCB4c3RyaW5nMTogInBldGVyIiwgeHN0
cmluZzI6ICJ4IiwgeHh4OiAibmV3c3RyaW5nIiB9LAorCQlkZWVwMSA9IHsgZm9vOiB7IGJhcjog
dHJ1ZSB9IH0sCisJCWRlZXAxY29weSA9IHsgZm9vOiB7IGJhcjogdHJ1ZSB9IH0sCisJCWRlZXAy
ID0geyBmb286IHsgYmF6OiB0cnVlIH0sIGZvbzI6IGRvY3VtZW50IH0sCisJCWRlZXAyY29weSA9
IHsgZm9vOiB7IGJhejogdHJ1ZSB9LCBmb28yOiBkb2N1bWVudCB9LAorCQlkZWVwbWVyZ2VkID0g
eyBmb286IHsgYmFyOiB0cnVlLCBiYXo6IHRydWUgfSwgZm9vMjogZG9jdW1lbnQgfSwKKwkJYXJy
ID0gWzEsIDIsIDNdLAorCQluZXN0ZWRhcnJheSA9IHsgYXJyOiBhcnIgfTsKKworCWpRdWVyeS5l
eHRlbmQoc2V0dGluZ3MsIG9wdGlvbnMpOworCXNhbWUoIHNldHRpbmdzLCBtZXJnZWQsICJDaGVj
ayBpZiBleHRlbmRlZDogc2V0dGluZ3MgbXVzdCBiZSBleHRlbmRlZCIgKTsKKwlzYW1lKCBvcHRp
b25zLCBvcHRpb25zQ29weSwgIkNoZWNrIGlmIG5vdCBtb2RpZmllZDogb3B0aW9ucyBtdXN0IG5v
dCBiZSBtb2RpZmllZCIgKTsKKworCWpRdWVyeS5leHRlbmQoc2V0dGluZ3MsIG51bGwsIG9wdGlv
bnMpOworCXNhbWUoIHNldHRpbmdzLCBtZXJnZWQsICJDaGVjayBpZiBleHRlbmRlZDogc2V0dGlu
Z3MgbXVzdCBiZSBleHRlbmRlZCIgKTsKKwlzYW1lKCBvcHRpb25zLCBvcHRpb25zQ29weSwgIkNo
ZWNrIGlmIG5vdCBtb2RpZmllZDogb3B0aW9ucyBtdXN0IG5vdCBiZSBtb2RpZmllZCIgKTsKKwor
CWpRdWVyeS5leHRlbmQodHJ1ZSwgZGVlcDEsIGRlZXAyKTsKKwlzYW1lKCBkZWVwMS5mb28sIGRl
ZXBtZXJnZWQuZm9vLCAiQ2hlY2sgaWYgZm9vOiBzZXR0aW5ncyBtdXN0IGJlIGV4dGVuZGVkIiAp
OworCXNhbWUoIGRlZXAyLmZvbywgZGVlcDJjb3B5LmZvbywgIkNoZWNrIGlmIG5vdCBkZWVwMjog
b3B0aW9ucyBtdXN0IG5vdCBiZSBtb2RpZmllZCIgKTsKKwllcXVhbHMoIGRlZXAxLmZvbzIsIGRv
Y3VtZW50LCAiTWFrZSBzdXJlIHRoYXQgYSBkZWVwIGNsb25lIHdhcyBub3QgYXR0ZW1wdGVkIG9u
IHRoZSBkb2N1bWVudCIgKTsKKworCW9rKCBqUXVlcnkuZXh0ZW5kKHRydWUsIHt9LCBuZXN0ZWRh
cnJheSkuYXJyICE9PSBhcnIsICJEZWVwIGV4dGVuZCBvZiBvYmplY3QgbXVzdCBjbG9uZSBjaGls
ZCBhcnJheSIgKTsKKworCS8vICM1OTkxCisJb2soIGpRdWVyeS5pc0FycmF5KCBqUXVlcnkuZXh0
ZW5kKHRydWUsIHsgYXJyOiB7fSB9LCBuZXN0ZWRhcnJheSkuYXJyICksICJDbG9uZWQgYXJyYXkg
aGV2ZSB0byBiZSBhbiBBcnJheSIgKTsKKwlvayggalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGpRdWVy
eS5leHRlbmQodHJ1ZSwgeyBhcnI6IGFyciB9LCB7IGFycjoge30gfSkuYXJyICksICJDbG9uZWQg
b2JqZWN0IGhldmUgdG8gYmUgYW4gcGxhaW4gb2JqZWN0IiApOworCisJdmFyIGVtcHR5ID0ge307
CisJdmFyIG9wdGlvbnNXaXRoTGVuZ3RoID0geyBmb286IHsgbGVuZ3RoOiAtMSB9IH07CisJalF1
ZXJ5LmV4dGVuZCh0cnVlLCBlbXB0eSwgb3B0aW9uc1dpdGhMZW5ndGgpOworCXNhbWUoIGVtcHR5
LmZvbywgb3B0aW9uc1dpdGhMZW5ndGguZm9vLCAiVGhlIGxlbmd0aCBwcm9wZXJ0eSBtdXN0IGNv
cHkgY29ycmVjdGx5IiApOworCisJZW1wdHkgPSB7fTsKKwl2YXIgb3B0aW9uc1dpdGhEYXRlID0g
eyBmb286IHsgZGF0ZTogbmV3IERhdGUgfSB9OworCWpRdWVyeS5leHRlbmQodHJ1ZSwgZW1wdHks
IG9wdGlvbnNXaXRoRGF0ZSk7CisJc2FtZSggZW1wdHkuZm9vLCBvcHRpb25zV2l0aERhdGUuZm9v
LCAiRGF0ZXMgY29weSBjb3JyZWN0bHkiICk7CisKKwl2YXIgbXlLbGFzcyA9IGZ1bmN0aW9uKCkg
e307CisJdmFyIGN1c3RvbU9iamVjdCA9IG5ldyBteUtsYXNzKCk7CisJdmFyIG9wdGlvbnNXaXRo
Q3VzdG9tT2JqZWN0ID0geyBmb286IHsgZGF0ZTogY3VzdG9tT2JqZWN0IH0gfTsKKwllbXB0eSA9
IHt9OworCWpRdWVyeS5leHRlbmQodHJ1ZSwgZW1wdHksIG9wdGlvbnNXaXRoQ3VzdG9tT2JqZWN0
KTsKKwlvayggZW1wdHkuZm9vICYmIGVtcHR5LmZvby5kYXRlID09PSBjdXN0b21PYmplY3QsICJD
dXN0b20gb2JqZWN0cyBjb3B5IGNvcnJlY3RseSAobm8gbWV0aG9kcykiICk7CisKKwkvLyBNYWtl
cyB0aGUgY2xhc3MgYSBsaXR0bGUgbW9yZSByZWFsaXN0aWMKKwlteUtsYXNzLnByb3RvdHlwZSA9
IHsgc29tZU1ldGhvZDogZnVuY3Rpb24oKXt9IH07CisJZW1wdHkgPSB7fTsKKwlqUXVlcnkuZXh0
ZW5kKHRydWUsIGVtcHR5LCBvcHRpb25zV2l0aEN1c3RvbU9iamVjdCk7CisJb2soIGVtcHR5LmZv
byAmJiBlbXB0eS5mb28uZGF0ZSA9PT0gY3VzdG9tT2JqZWN0LCAiQ3VzdG9tIG9iamVjdHMgY29w
eSBjb3JyZWN0bHkiICk7CisKKwl2YXIgcmV0ID0galF1ZXJ5LmV4dGVuZCh0cnVlLCB7IGZvbzog
NCB9LCB7IGZvbzogbmV3IE51bWJlcig1KSB9ICk7CisJb2soIHJldC5mb28gPT0gNSwgIldyYXBw
ZWQgbnVtYmVycyBjb3B5IGNvcnJlY3RseSIgKTsKKworCXZhciBudWxsVW5kZWY7CisJbnVsbFVu
ZGVmID0galF1ZXJ5LmV4dGVuZCh7fSwgb3B0aW9ucywgeyB4bnVtYmVyMjogbnVsbCB9KTsKKwlv
ayggbnVsbFVuZGVmLnhudW1iZXIyID09PSBudWxsLCAiQ2hlY2sgdG8gbWFrZSBzdXJlIG51bGwg
dmFsdWVzIGFyZSBjb3BpZWQiKTsKKworCW51bGxVbmRlZiA9IGpRdWVyeS5leHRlbmQoe30sIG9w
dGlvbnMsIHsgeG51bWJlcjI6IHVuZGVmaW5lZCB9KTsKKwlvayggbnVsbFVuZGVmLnhudW1iZXIy
ID09PSBvcHRpb25zLnhudW1iZXIyLCAiQ2hlY2sgdG8gbWFrZSBzdXJlIHVuZGVmaW5lZCB2YWx1
ZXMgYXJlIG5vdCBjb3BpZWQiKTsKKworCW51bGxVbmRlZiA9IGpRdWVyeS5leHRlbmQoe30sIG9w
dGlvbnMsIHsgeG51bWJlcjA6IG51bGwgfSk7CisJb2soIG51bGxVbmRlZi54bnVtYmVyMCA9PT0g
bnVsbCwgIkNoZWNrIHRvIG1ha2Ugc3VyZSBudWxsIHZhbHVlcyBhcmUgaW5zZXJ0ZWQiKTsKKwor
CXZhciB0YXJnZXQgPSB7fTsKKwl2YXIgcmVjdXJzaXZlID0geyBmb286dGFyZ2V0LCBiYXI6NSB9
OworCWpRdWVyeS5leHRlbmQodHJ1ZSwgdGFyZ2V0LCByZWN1cnNpdmUpOworCXNhbWUoIHRhcmdl
dCwgeyBiYXI6NSB9LCAiQ2hlY2sgdG8gbWFrZSBzdXJlIGEgcmVjdXJzaXZlIG9iaiBkb2Vzbid0
IGdvIG5ldmVyLWVuZGluZyBsb29wIGJ5IG5vdCBjb3B5aW5nIGl0IG92ZXIiICk7CisKKwl2YXIg
cmV0ID0galF1ZXJ5LmV4dGVuZCh0cnVlLCB7IGZvbzogW10gfSwgeyBmb286IFswXSB9ICk7IC8v
IDE5MDcKKwllcXVhbHMoIHJldC5mb28ubGVuZ3RoLCAxLCAiQ2hlY2sgdG8gbWFrZSBzdXJlIGEg
dmFsdWUgd2l0aCBjb2Vyc2lvbiAnZmFsc2UnIGNvcGllcyBvdmVyIHdoZW4gbmVjZXNzYXJ5IHRv
IGZpeCAjMTkwNyIgKTsKKworCXZhciByZXQgPSBqUXVlcnkuZXh0ZW5kKHRydWUsIHsgZm9vOiAi
MSwyLDMiIH0sIHsgZm9vOiBbMSwgMiwgM10gfSApOworCW9rKCB0eXBlb2YgcmV0LmZvbyAhPSAi
c3RyaW5nIiwgIkNoZWNrIHRvIG1ha2Ugc3VyZSB2YWx1ZXMgZXF1YWwgd2l0aCBjb2Vyc2lvbiAo
YnV0IG5vdCBhY3R1YWxseSBlcXVhbCkgb3ZlcndyaXRlIGNvcnJlY3RseSIgKTsKKworCXZhciBy
ZXQgPSBqUXVlcnkuZXh0ZW5kKHRydWUsIHsgZm9vOiJiYXIiIH0sIHsgZm9vOm51bGwgfSApOwor
CW9rKCB0eXBlb2YgcmV0LmZvbyAhPT0gJ3VuZGVmaW5lZCcsICJNYWtlIHN1cmUgYSBudWxsIHZh
bHVlIGRvZXNuJ3QgY3Jhc2ggd2l0aCBkZWVwIGV4dGVuZCwgZm9yICMxOTA4IiApOworCisJdmFy
IG9iaiA9IHsgZm9vOm51bGwgfTsKKwlqUXVlcnkuZXh0ZW5kKHRydWUsIG9iaiwgeyBmb286Im5v
dG51bGwiIH0gKTsKKwllcXVhbHMoIG9iai5mb28sICJub3RudWxsIiwgIk1ha2Ugc3VyZSBhIG51
bGwgdmFsdWUgY2FuIGJlIG92ZXJ3cml0dGVuIiApOworCisJZnVuY3Rpb24gZnVuYygpIHt9CisJ
alF1ZXJ5LmV4dGVuZChmdW5jLCB7IGtleTogInZhbHVlIiB9ICk7CisJZXF1YWxzKCBmdW5jLmtl
eSwgInZhbHVlIiwgIlZlcmlmeSBhIGZ1bmN0aW9uIGNhbiBiZSBleHRlbmRlZCIgKTsKKworCXZh
ciBkZWZhdWx0cyA9IHsgeG51bWJlcjE6IDUsIHhudW1iZXIyOiA3LCB4c3RyaW5nMTogInBldGVy
IiwgeHN0cmluZzI6ICJwYW4iIH0sCisJCWRlZmF1bHRzQ29weSA9IHsgeG51bWJlcjE6IDUsIHhu
dW1iZXIyOiA3LCB4c3RyaW5nMTogInBldGVyIiwgeHN0cmluZzI6ICJwYW4iIH0sCisJCW9wdGlv
bnMxID0geyB4bnVtYmVyMjogMSwgeHN0cmluZzI6ICJ4IiB9LAorCQlvcHRpb25zMUNvcHkgPSB7
IHhudW1iZXIyOiAxLCB4c3RyaW5nMjogIngiIH0sCisJCW9wdGlvbnMyID0geyB4c3RyaW5nMjog
Inh4IiwgeHh4OiAibmV3c3RyaW5neCIgfSwKKwkJb3B0aW9uczJDb3B5ID0geyB4c3RyaW5nMjog
Inh4IiwgeHh4OiAibmV3c3RyaW5neCIgfSwKKwkJbWVyZ2VkMiA9IHsgeG51bWJlcjE6IDUsIHhu
dW1iZXIyOiAxLCB4c3RyaW5nMTogInBldGVyIiwgeHN0cmluZzI6ICJ4eCIsIHh4eDogIm5ld3N0
cmluZ3giIH07CisKKwl2YXIgc2V0dGluZ3MgPSBqUXVlcnkuZXh0ZW5kKHt9LCBkZWZhdWx0cywg
b3B0aW9uczEsIG9wdGlvbnMyKTsKKwlzYW1lKCBzZXR0aW5ncywgbWVyZ2VkMiwgIkNoZWNrIGlm
IGV4dGVuZGVkOiBzZXR0aW5ncyBtdXN0IGJlIGV4dGVuZGVkIiApOworCXNhbWUoIGRlZmF1bHRz
LCBkZWZhdWx0c0NvcHksICJDaGVjayBpZiBub3QgbW9kaWZpZWQ6IG9wdGlvbnMxIG11c3Qgbm90
IGJlIG1vZGlmaWVkIiApOworCXNhbWUoIG9wdGlvbnMxLCBvcHRpb25zMUNvcHksICJDaGVjayBp
ZiBub3QgbW9kaWZpZWQ6IG9wdGlvbnMxIG11c3Qgbm90IGJlIG1vZGlmaWVkIiApOworCXNhbWUo
IG9wdGlvbnMyLCBvcHRpb25zMkNvcHksICJDaGVjayBpZiBub3QgbW9kaWZpZWQ6IG9wdGlvbnMy
IG11c3Qgbm90IGJlIG1vZGlmaWVkIiApOworfSk7CisKK3Rlc3QoImpRdWVyeS5lYWNoKE9iamVj
dCxGdW5jdGlvbikiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMTMpOworCWpRdWVyeS5lYWNoKCBb
MCwxLDJdLCBmdW5jdGlvbihpLCBuKXsKKwkJZXF1YWxzKCBpLCBuLCAiQ2hlY2sgYXJyYXkgaXRl
cmF0aW9uIiApOworCX0pOworCisJalF1ZXJ5LmVhY2goIFs1LDYsN10sIGZ1bmN0aW9uKGksIG4p
eworCQllcXVhbHMoIGksIG4gLSA1LCAiQ2hlY2sgYXJyYXkgaXRlcmF0aW9uIiApOworCX0pOwor
CisJalF1ZXJ5LmVhY2goIHsgbmFtZTogIm5hbWUiLCBsYW5nOiAibGFuZyIgfSwgZnVuY3Rpb24o
aSwgbil7CisJCWVxdWFscyggaSwgbiwgIkNoZWNrIG9iamVjdCBpdGVyYXRpb24iICk7CisJfSk7
CisKKwl2YXIgdG90YWwgPSAwOworCWpRdWVyeS5lYWNoKFsxLDIsM10sIGZ1bmN0aW9uKGksdil7
IHRvdGFsICs9IHY7IH0pOworCWVxdWFscyggdG90YWwsIDYsICJMb29waW5nIG92ZXIgYW4gYXJy
YXkiICk7CisJdG90YWwgPSAwOworCWpRdWVyeS5lYWNoKFsxLDIsM10sIGZ1bmN0aW9uKGksdil7
IHRvdGFsICs9IHY7IGlmICggaSA9PSAxICkgcmV0dXJuIGZhbHNlOyB9KTsKKwllcXVhbHMoIHRv
dGFsLCAzLCAiTG9vcGluZyBvdmVyIGFuIGFycmF5LCB3aXRoIGJyZWFrIiApOworCXRvdGFsID0g
MDsKKwlqUXVlcnkuZWFjaCh7ImEiOjEsImIiOjIsImMiOjN9LCBmdW5jdGlvbihpLHYpeyB0b3Rh
bCArPSB2OyB9KTsKKwllcXVhbHMoIHRvdGFsLCA2LCAiTG9vcGluZyBvdmVyIGFuIG9iamVjdCIg
KTsKKwl0b3RhbCA9IDA7CisJalF1ZXJ5LmVhY2goeyJhIjozLCJiIjozLCJjIjozfSwgZnVuY3Rp
b24oaSx2KXsgdG90YWwgKz0gdjsgcmV0dXJuIGZhbHNlOyB9KTsKKwllcXVhbHMoIHRvdGFsLCAz
LCAiTG9vcGluZyBvdmVyIGFuIG9iamVjdCwgd2l0aCBicmVhayIgKTsKKworCXZhciBmID0gZnVu
Y3Rpb24oKXt9OworCWYuZm9vID0gJ2Jhcic7CisJalF1ZXJ5LmVhY2goZiwgZnVuY3Rpb24oaSl7
CisJCWZbaV0gPSAnYmF6JzsKKwl9KTsKKwllcXVhbHMoICJiYXoiLCBmLmZvbywgIkxvb3Agb3Zl
ciBhIGZ1bmN0aW9uIiApOworfSk7CisKK3Rlc3QoImpRdWVyeS5tYWtlQXJyYXkiLCBmdW5jdGlv
bigpeworCWV4cGVjdCgxNyk7CisKKwllcXVhbHMoIGpRdWVyeS5tYWtlQXJyYXkoalF1ZXJ5KCdo
dG1sPionKSlbMF0ubm9kZU5hbWUudG9VcHBlckNhc2UoKSwgIkhFQUQiLCAiUGFzcyBtYWtlQXJy
YXkgYSBqUXVlcnkgb2JqZWN0IiApOworCisJZXF1YWxzKCBqUXVlcnkubWFrZUFycmF5KGRvY3Vt
ZW50LmdldEVsZW1lbnRzQnlOYW1lKCJQV0QiKSkuc2xpY2UoMCwxKVswXS5uYW1lLCAiUFdEIiwg
IlBhc3MgbWFrZUFycmF5IGEgbm9kZWxpc3QiICk7CisKKwllcXVhbHMoIChmdW5jdGlvbigpeyBy
ZXR1cm4galF1ZXJ5Lm1ha2VBcnJheShhcmd1bWVudHMpOyB9KSgxLDIpLmpvaW4oIiIpLCAiMTIi
LCAiUGFzcyBtYWtlQXJyYXkgYW4gYXJndW1lbnRzIGFycmF5IiApOworCisJZXF1YWxzKCBqUXVl
cnkubWFrZUFycmF5KFsxLDIsM10pLmpvaW4oIiIpLCAiMTIzIiwgIlBhc3MgbWFrZUFycmF5IGEg
cmVhbCBhcnJheSIgKTsKKworCWVxdWFscyggalF1ZXJ5Lm1ha2VBcnJheSgpLmxlbmd0aCwgMCwg
IlBhc3Mgbm90aGluZyB0byBtYWtlQXJyYXkgYW5kIGV4cGVjdCBhbiBlbXB0eSBhcnJheSIgKTsK
KworCWVxdWFscyggalF1ZXJ5Lm1ha2VBcnJheSggMCApWzBdLCAwICwgIlBhc3MgbWFrZUFycmF5
IGEgbnVtYmVyIiApOworCisJZXF1YWxzKCBqUXVlcnkubWFrZUFycmF5KCAiZm9vIiApWzBdLCAi
Zm9vIiwgIlBhc3MgbWFrZUFycmF5IGEgc3RyaW5nIiApOworCisJZXF1YWxzKCBqUXVlcnkubWFr
ZUFycmF5KCB0cnVlIClbMF0uY29uc3RydWN0b3IsIEJvb2xlYW4sICJQYXNzIG1ha2VBcnJheSBh
IGJvb2xlYW4iICk7CisKKwllcXVhbHMoIGpRdWVyeS5tYWtlQXJyYXkoIGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImRpdiIpIClbMF0ubm9kZU5hbWUudG9VcHBlckNhc2UoKSwgIkRJViIsICJQYXNz
IG1ha2VBcnJheSBhIHNpbmdsZSBub2RlIiApOworCisJZXF1YWxzKCBqUXVlcnkubWFrZUFycmF5
KCB7bGVuZ3RoOjIsIDA6ImEiLCAxOiJiIn0gKS5qb2luKCIiKSwgImFiIiwgIlBhc3MgbWFrZUFy
cmF5IGFuIGFycmF5IGxpa2UgbWFwICh3aXRoIGxlbmd0aCkiICk7CisKKwlvayggISFqUXVlcnku
bWFrZUFycmF5KCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2RlcyApLnNsaWNlKDAs
MSlbMF0ubm9kZU5hbWUsICJQYXNzIG1ha2VBcnJheSBhIGNoaWxkTm9kZXMgYXJyYXkiICk7CisK
KwkvLyBmdW5jdGlvbiwgaXMgdHJpY2t5IGFzIGl0IGhhcyBsZW5ndGgKKwllcXVhbHMoIGpRdWVy
eS5tYWtlQXJyYXkoIGZ1bmN0aW9uKCl7IHJldHVybiAxO30gKVswXSgpLCAxLCAiUGFzcyBtYWtl
QXJyYXkgYSBmdW5jdGlvbiIgKTsKKworCS8vd2luZG93LCBhbHNvIGhhcyBsZW5ndGgKKwllcXVh
bHMoIGpRdWVyeS5tYWtlQXJyYXkod2luZG93KVswXSwgd2luZG93LCAiUGFzcyBtYWtlQXJyYXkg
dGhlIHdpbmRvdyIgKTsKKworCWVxdWFscyggalF1ZXJ5Lm1ha2VBcnJheSgvYS8pWzBdLmNvbnN0
cnVjdG9yLCBSZWdFeHAsICJQYXNzIG1ha2VBcnJheSBhIHJlZ2V4IiApOworCisJb2soIGpRdWVy
eS5tYWtlQXJyYXkoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvcm0nKSkubGVuZ3RoID49IDEz
LCAiUGFzcyBtYWtlQXJyYXkgYSBmb3JtICh0cmVhdCBhcyBlbGVtZW50cykiICk7CisKKwkvLyBG
b3IgIzU2MTAKKwlzYW1lKCBqUXVlcnkubWFrZUFycmF5KHsnbGVuZ3RoJzogJzAnfSksIFtdLCAi
TWFrZSBzdXJlIG9iamVjdCBpcyBjb2VyY2VkIHByb3Blcmx5LiIpOworCXNhbWUoIGpRdWVyeS5t
YWtlQXJyYXkoeydsZW5ndGgnOiAnNSd9KSwgW10sICJNYWtlIHN1cmUgb2JqZWN0IGlzIGNvZXJj
ZWQgcHJvcGVybHkuIik7Cit9KTsKKwordGVzdCgialF1ZXJ5LmlzRW1wdHlPYmplY3QiLCBmdW5j
dGlvbigpeworCWV4cGVjdCgyKTsKKworCWVxdWFscyh0cnVlLCBqUXVlcnkuaXNFbXB0eU9iamVj
dCh7fSksICJpc0VtcHR5T2JqZWN0IG9uIGVtcHR5IG9iamVjdCBsaXRlcmFsIiApOworCWVxdWFs
cyhmYWxzZSwgalF1ZXJ5LmlzRW1wdHlPYmplY3Qoe2E6MX0pLCAiaXNFbXB0eU9iamVjdCBvbiBu
b24tZW1wdHkgb2JqZWN0IGxpdGVyYWwiICk7CisKKwkvLyBXaGF0IGFib3V0IHRoaXMgPworCS8v
IGVxdWFscyh0cnVlLCBqUXVlcnkuaXNFbXB0eU9iamVjdChudWxsKSwgImlzRW1wdHlPYmplY3Qg
b24gbnVsbCIgKTsKK30pOworCit0ZXN0KCJqUXVlcnkucHJveHkiLCBmdW5jdGlvbigpeworCWV4
cGVjdCg0KTsKKworCXZhciB0ZXN0ID0gZnVuY3Rpb24oKXsgZXF1YWxzKCB0aGlzLCB0aGlzT2Jq
ZWN0LCAiTWFrZSBzdXJlIHRoYXQgc2NvcGUgaXMgc2V0IHByb3Blcmx5LiIgKTsgfTsKKwl2YXIg
dGhpc09iamVjdCA9IHsgZm9vOiAiYmFyIiwgbWV0aG9kOiB0ZXN0IH07CisKKwkvLyBNYWtlIHN1
cmUgbm9ybWFsIHdvcmtzCisJdGVzdC5jYWxsKCB0aGlzT2JqZWN0ICk7CisKKwkvLyBCYXNpYyBz
Y29waW5nCisJalF1ZXJ5LnByb3h5KCB0ZXN0LCB0aGlzT2JqZWN0ICkoKTsKKworCS8vIE1ha2Ug
c3VyZSBpdCBkb2Vzbid0IGZyZWFrIG91dAorCWVxdWFscyggalF1ZXJ5LnByb3h5KCBudWxsLCB0
aGlzT2JqZWN0ICksIHVuZGVmaW5lZCwgIk1ha2Ugc3VyZSBubyBmdW5jdGlvbiB3YXMgcmV0dXJu
ZWQuIiApOworCisJLy8gVXNlIHRoZSBzdHJpbmcgc2hvcnRjdXQKKwlqUXVlcnkucHJveHkoIHRo
aXNPYmplY3QsICJtZXRob2QiICkoKTsKK30pOworCit0ZXN0KCJqUXVlcnkucGFyc2VKU09OIiwg
ZnVuY3Rpb24oKXsKKwlleHBlY3QoOCk7CisKKwllcXVhbHMoIGpRdWVyeS5wYXJzZUpTT04oKSwg
bnVsbCwgIk5vdGhpbmcgaW4sIG51bGwgb3V0LiIgKTsKKwllcXVhbHMoIGpRdWVyeS5wYXJzZUpT
T04oIG51bGwgKSwgbnVsbCwgIk5vdGhpbmcgaW4sIG51bGwgb3V0LiIgKTsKKwllcXVhbHMoIGpR
dWVyeS5wYXJzZUpTT04oICIiICksIG51bGwsICJOb3RoaW5nIGluLCBudWxsIG91dC4iICk7CisK
KwlzYW1lKCBqUXVlcnkucGFyc2VKU09OKCJ7fSIpLCB7fSwgIlBsYWluIG9iamVjdCBwYXJzaW5n
LiIgKTsKKwlzYW1lKCBqUXVlcnkucGFyc2VKU09OKCd7InRlc3QiOjF9JyksIHsidGVzdCI6MX0s
ICJQbGFpbiBvYmplY3QgcGFyc2luZy4iICk7CisKKwlzYW1lKCBqUXVlcnkucGFyc2VKU09OKCdc
bnsidGVzdCI6MX0nKSwgeyJ0ZXN0IjoxfSwgIk1ha2Ugc3VyZSBsZWFkaW5nIHdoaXRlc3BhY2Vz
IGFyZSBoYW5kbGVkLiIgKTsKKworCXRyeSB7CisJCWpRdWVyeS5wYXJzZUpTT04oInthOjF9Iik7
CisJCW9rKCBmYWxzZSwgIlRlc3QgbWFsZm9ybWVkIEpTT04gc3RyaW5nLiIgKTsKKwl9IGNhdGNo
KCBlICkgeworCQlvayggdHJ1ZSwgIlRlc3QgbWFsZm9ybWVkIEpTT04gc3RyaW5nLiIgKTsKKwl9
CisKKwl0cnkgeworCQlqUXVlcnkucGFyc2VKU09OKCJ7J2EnOjF9Iik7CisJCW9rKCBmYWxzZSwg
IlRlc3QgbWFsZm9ybWVkIEpTT04gc3RyaW5nLiIgKTsKKwl9IGNhdGNoKCBlICkgeworCQlvaygg
dHJ1ZSwgIlRlc3QgbWFsZm9ybWVkIEpTT04gc3RyaW5nLiIgKTsKKwl9Cit9KTsKKwordGVzdCgi
alF1ZXJ5LnN1YigpIC0gU3RhdGljIE1ldGhvZHMiLCBmdW5jdGlvbigpeworICAgIGV4cGVjdCgx
OCk7CisgICAgdmFyIFN1YmNsYXNzID0galF1ZXJ5LnN1YigpOworICAgIFN1YmNsYXNzLmV4dGVu
ZCh7CisgICAgICAgIHRvcExldmVsTWV0aG9kOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5kZWJ1
Zzt9LAorICAgICAgICBkZWJ1ZzogZmFsc2UsCisgICAgICAgIGNvbmZpZzogeworICAgICAgICAg
ICAgbG9jYWxlOiAnZW5fVVMnCisgICAgICAgIH0sCisgICAgICAgIHNldHVwOiBmdW5jdGlvbihj
b25maWcpIHsKKyAgICAgICAgICAgIHRoaXMuZXh0ZW5kKHRydWUsIHRoaXMuY29uZmlnLCBjb25m
aWcpOworICAgICAgICB9CisgICAgfSk7CisgICAgU3ViY2xhc3MuZm4uZXh0ZW5kKHtzdWJDbGFz
c01ldGhvZDogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzO319KTsKKworICAgIC8vVGVzdCBTaW1w
bGUgU3ViY2xhc3MKKyAgICBvayhTdWJjbGFzcy50b3BMZXZlbE1ldGhvZCgpID09PSBmYWxzZSwg
J1N1YmNsYXNzLnRvcExldmVsTWV0aG9kIHRob3VnaHQgZGVidWcgd2FzIHRydWUnKTsKKyAgICBv
ayhTdWJjbGFzcy5jb25maWcubG9jYWxlID09ICdlbl9VUycsIFN1YmNsYXNzLmNvbmZpZy5sb2Nh
bGUgKyAnIGlzIHdyb25nIScpOworICAgIHNhbWUoU3ViY2xhc3MuY29uZmlnLnRlc3QsIHVuZGVm
aW5lZCwgJ1N1YmNsYXNzLmNvbmZpZy50ZXN0IGlzIHNldCBpbmNvcnJlY3RseScpOworICAgIGVx
dWFsKGpRdWVyeS5hamF4LCBTdWJjbGFzcy5hamF4LCAnVGhlIHN1YmNsYXNzIGZhaWxlZCB0byBn
ZXQgYWxsIHRvcCBsZXZlbCBtZXRob2RzJyk7CisKKyAgICAvL0NyZWF0ZSBhIFN1YlN1YmNsYXNz
CisgICAgdmFyIFN1YlN1YmNsYXNzID0gU3ViY2xhc3Muc3ViKCk7CisKKyAgICAvL01ha2UgU3Vy
ZSB0aGUgU3ViU3ViY2xhc3MgaW5oZXJpdGVkIHByb3Blcmx5CisgICAgb2soU3ViU3ViY2xhc3Mu
dG9wTGV2ZWxNZXRob2QoKSA9PT0gZmFsc2UsICdTdWJTdWJjbGFzcy50b3BMZXZlbE1ldGhvZCB0
aG91Z2h0IGRlYnVnIHdhcyB0cnVlJyk7CisgICAgb2soU3ViU3ViY2xhc3MuY29uZmlnLmxvY2Fs
ZSA9PSAnZW5fVVMnLCBTdWJTdWJjbGFzcy5jb25maWcubG9jYWxlICsgJyBpcyB3cm9uZyEnKTsK
KyAgICBzYW1lKFN1YlN1YmNsYXNzLmNvbmZpZy50ZXN0LCB1bmRlZmluZWQsICdTdWJTdWJjbGFz
cy5jb25maWcudGVzdCBpcyBzZXQgaW5jb3JyZWN0bHknKTsKKyAgICBlcXVhbChqUXVlcnkuYWph
eCwgU3ViU3ViY2xhc3MuYWpheCwgJ1RoZSBzdWJzdWJjbGFzcyBmYWlsZWQgdG8gZ2V0IGFsbCB0
b3AgbGV2ZWwgbWV0aG9kcycpOworCisgICAgLy9Nb2RpZnkgVGhlIFN1YmNsYXNzIGFuZCB0ZXN0
IHRoZSBNb2RpZmljYXRpb25zCisgICAgU3ViU3ViY2xhc3MuZm4uZXh0ZW5kKHtzdWJTdWJDbGFz
c01ldGhvZDogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzO319KTsKKyAgICBTdWJTdWJjbGFzcy5z
ZXR1cCh7bG9jYWxlOiAnZXNfTVgnLCB0ZXN0OiAnd29ya2VkJ30pOworICAgIFN1YlN1YmNsYXNz
LmRlYnVnID0gdHJ1ZTsKKyAgICBTdWJTdWJjbGFzcy5hamF4ID0gZnVuY3Rpb24oKSB7cmV0dXJu
IGZhbHNlO307CisgICAgb2soU3ViU3ViY2xhc3MudG9wTGV2ZWxNZXRob2QoKSwgJ1N1YlN1YmNs
YXNzLnRvcExldmVsTWV0aG9kIHRob3VnaHQgZGVidWcgd2FzIGZhbHNlJyk7CisgICAgc2FtZShT
dWJTdWJjbGFzcyhkb2N1bWVudCkuc3ViQ2xhc3NNZXRob2QsIFN1YmNsYXNzLmZuLnN1YkNsYXNz
TWV0aG9kLCAnTWV0aG9kcyBEaWZmZXIhJyk7CisgICAgb2soU3ViU3ViY2xhc3MuY29uZmlnLmxv
Y2FsZSA9PSAnZXNfTVgnLCBTdWJTdWJjbGFzcy5jb25maWcubG9jYWxlICsgJyBpcyB3cm9uZyEn
KTsKKyAgICBvayhTdWJTdWJjbGFzcy5jb25maWcudGVzdCA9PSAnd29ya2VkJywgJ1N1YlN1YmNs
YXNzLmNvbmZpZy50ZXN0IGlzIHNldCBpbmNvcnJlY3RseScpOworICAgIG5vdEVxdWFsKGpRdWVy
eS5hamF4LCBTdWJTdWJjbGFzcy5hamF4LCAnVGhlIHN1YnN1YmNsYXNzIGZhaWxlZCB0byBnZXQg
YWxsIHRvcCBsZXZlbCBtZXRob2RzJyk7CisKKyAgICAvL1RoaXMgc2hvd3MgdGhhdCB0aGUgbW9k
aWZpY2F0aW9ucyB0byB0aGUgU3ViU3ViQ2xhc3MgZGlkIG5vdCBidWJibGUgYmFjayB1cCB0byBp
dCdzIHN1cGVyY2xhc3MKKyAgICBvayhTdWJjbGFzcy50b3BMZXZlbE1ldGhvZCgpID09PSBmYWxz
ZSwgJ1N1YmNsYXNzLnRvcExldmVsTWV0aG9kIHRob3VnaHQgZGVidWcgd2FzIHRydWUnKTsKKyAg
ICBvayhTdWJjbGFzcy5jb25maWcubG9jYWxlID09ICdlbl9VUycsIFN1YmNsYXNzLmNvbmZpZy5s
b2NhbGUgKyAnIGlzIHdyb25nIScpOworICAgIHNhbWUoU3ViY2xhc3MuY29uZmlnLnRlc3QsIHVu
ZGVmaW5lZCwgJ1N1YmNsYXNzLmNvbmZpZy50ZXN0IGlzIHNldCBpbmNvcnJlY3RseScpOworICAg
IHNhbWUoU3ViY2xhc3MoZG9jdW1lbnQpLnN1YlN1YkNsYXNzTWV0aG9kLCB1bmRlZmluZWQsICdz
dWJTdWJDbGFzc01ldGhvZCBzZXQgaW5jb3JyZWN0bHknKTsKKyAgICBlcXVhbChqUXVlcnkuYWph
eCwgU3ViY2xhc3MuYWpheCwgJ1RoZSBzdWJjbGFzcyBmYWlsZWQgdG8gZ2V0IGFsbCB0b3AgbGV2
ZWwgbWV0aG9kcycpOworfSk7CisKK3Rlc3QoImpRdWVyeS5zdWIoKSAtIC5mbiBNZXRob2RzIiwg
ZnVuY3Rpb24oKXsKKwlleHBlY3QoMzc4KTsKKworCXZhciBTdWJjbGFzcyA9IGpRdWVyeS5zdWIo
KSwKKwkJCVN1YmNsYXNzU3ViY2xhc3MgPSBTdWJjbGFzcy5zdWIoKSwKKwkJCWpRdWVyeURvY3Vt
ZW50ID0galF1ZXJ5KGRvY3VtZW50KSwKKwkJCXNlbGVjdG9ycywgY29udGV4dHMsIG1ldGhvZHMs
IG1ldGhvZCwgYXJnLCBkZXNjcmlwdGlvbjsKKworCWpRdWVyeURvY3VtZW50LnRvU3RyaW5nID0g
ZnVuY3Rpb24oKXsgcmV0dXJuICdqUXVlcnlEb2N1bWVudCc7IH07CisKKwlTdWJjbGFzcy5mbi5z
dWJjbGFzc01ldGhvZCA9IGZ1bmN0aW9uKCl7fTsKKwlTdWJjbGFzc1N1YmNsYXNzLmZuLnN1YmNs
YXNzU3ViY2xhc3NNZXRob2QgPSBmdW5jdGlvbigpe307CisKKwlzZWxlY3RvcnMgPSBbCisJCSdi
b2R5JywKKwkJJ2h0bWwsIGJvZHknLAorCQknPGRpdj48L2Rpdj4nCisJXTsKKworCW1ldGhvZHMg
PSBbIC8vIGFsbCBtZXRob2RzIHRoYXQgcmV0dXJuIGEgbmV3IGpRdWVyeSBpbnN0YW5jZQorCQlb
J2VxJywgMV0sCisJCVsnYWRkJywgZG9jdW1lbnRdLAorCQlbJ2VuZCddLAorCQlbJ2hhcyddLAor
CQlbJ2Nsb3Nlc3QnLCAnZGl2J10sCisJCVsnZmlsdGVyJywgZG9jdW1lbnRdLAorCQlbJ2ZpbmQn
LCAnZGl2J10KKwldOworCisJY29udGV4dHMgPSBbdW5kZWZpbmVkLCBkb2N1bWVudCwgalF1ZXJ5
RG9jdW1lbnRdOworCisJalF1ZXJ5LmVhY2goc2VsZWN0b3JzLCBmdW5jdGlvbihpLCBzZWxlY3Rv
cil7CisKKwkJalF1ZXJ5LmVhY2gobWV0aG9kcywgZnVuY3Rpb24oKXsKKwkJCW1ldGhvZCA9IHRo
aXNbMF07CisJCQlhcmcgPSB0aGlzWzFdOworCisJCQlqUXVlcnkuZWFjaChjb250ZXh0cywgZnVu
Y3Rpb24oaSwgY29udGV4dCl7CisKKwkJCQlkZXNjcmlwdGlvbiA9ICcoIicrc2VsZWN0b3IrJyIs
ICcrY29udGV4dCsnKS4nK21ldGhvZCsnKCcrKGFyZ3x8JycpKycpJzsKKworCQkJCXNhbWUoCisJ
CQkJCWpRdWVyeShzZWxlY3RvciwgY29udGV4dClbbWV0aG9kXShhcmcpLnN1YmNsYXNzTWV0aG9k
LCB1bmRlZmluZWQsCisJCQkJCSdqUXVlcnknK2Rlc2NyaXB0aW9uKycgZG9lc250IGhhdmUgU3Vi
Y2xhc3MgbWV0aG9kcycKKwkJCQkpOworCQkJCXNhbWUoCisJCQkJCWpRdWVyeShzZWxlY3Rvciwg
Y29udGV4dClbbWV0aG9kXShhcmcpLnN1YmNsYXNzU3ViY2xhc3NNZXRob2QsIHVuZGVmaW5lZCwK
KwkJCQkJJ2pRdWVyeScrZGVzY3JpcHRpb24rJyBkb2VzbnQgaGF2ZSBTdWJjbGFzc1N1YmNsYXNz
IG1ldGhvZHMnCisJCQkJKTsKKwkJCQlzYW1lKAorCQkJCQlTdWJjbGFzcyhzZWxlY3RvciwgY29u
dGV4dClbbWV0aG9kXShhcmcpLnN1YmNsYXNzTWV0aG9kLCBTdWJjbGFzcy5mbi5zdWJjbGFzc01l
dGhvZCwKKwkJCQkJJ1N1YmNsYXNzJytkZXNjcmlwdGlvbisnIGhhcyBTdWJjbGFzcyBtZXRob2Rz
JworCQkJCSk7CisJCQkJc2FtZSgKKwkJCQkJU3ViY2xhc3Moc2VsZWN0b3IsIGNvbnRleHQpW21l
dGhvZF0oYXJnKS5zdWJjbGFzc1N1YmNsYXNzTWV0aG9kLCB1bmRlZmluZWQsCisJCQkJCSdTdWJj
bGFzcycrZGVzY3JpcHRpb24rJyBkb2VzbnQgaGF2ZSBTdWJjbGFzc1N1YmNsYXNzIG1ldGhvZHMn
CisJCQkJKTsKKwkJCQlzYW1lKAorCQkJCQlTdWJjbGFzc1N1YmNsYXNzKHNlbGVjdG9yLCBjb250
ZXh0KVttZXRob2RdKGFyZykuc3ViY2xhc3NNZXRob2QsIFN1YmNsYXNzLmZuLnN1YmNsYXNzTWV0
aG9kLAorCQkJCQknU3ViY2xhc3NTdWJjbGFzcycrZGVzY3JpcHRpb24rJyBoYXMgU3ViY2xhc3Mg
bWV0aG9kcycKKwkJCQkpOworCQkJCXNhbWUoCisJCQkJCVN1YmNsYXNzU3ViY2xhc3Moc2VsZWN0
b3IsIGNvbnRleHQpW21ldGhvZF0oYXJnKS5zdWJjbGFzc1N1YmNsYXNzTWV0aG9kLCBTdWJjbGFz
c1N1YmNsYXNzLmZuLnN1YmNsYXNzU3ViY2xhc3NNZXRob2QsCisJCQkJCSdTdWJjbGFzc1N1YmNs
YXNzJytkZXNjcmlwdGlvbisnIGhhcyBTdWJjbGFzc1N1YmNsYXNzIG1ldGhvZHMnCisJCQkJKTsK
KworCQkJfSk7CisJCX0pOworCX0pOworCit9KTsKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91
dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC91bml0L2NvcmUuanMKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogYWxsb3ctdGFicwogICArIHllcwoKSW5kZXg6IExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJj
ZXMvdGVzdC91bml0L2Nzcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcXVlcnkvcmVz
b3VyY2VzL3Rlc3QvdW5pdC9jc3MuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcXVl
cnkvcmVzb3VyY2VzL3Rlc3QvdW5pdC9jc3MuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzM1
IEBACittb2R1bGUoImNzcyIsIHsgdGVhcmRvd246IG1vZHVsZVRlYXJkb3duIH0pOworCit0ZXN0
KCJjc3MoU3RyaW5nfEhhc2gpIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDQxKTsKKworCWVxdWFs
cyggalF1ZXJ5KCcjbWFpbicpLmNzcygiZGlzcGxheSIpLCAnYmxvY2snLCAnQ2hlY2sgZm9yIGNz
cyBwcm9wZXJ0eSAiZGlzcGxheSInKTsKKworCW9rKCBqUXVlcnkoJyNub3RoaWRkZW5kaXYnKS5p
cygnOnZpc2libGUnKSwgJ01vZGlmeWluZyBDU1MgZGlzcGxheTogQXNzZXJ0IGVsZW1lbnQgaXMg
dmlzaWJsZScpOworCWpRdWVyeSgnI25vdGhpZGRlbmRpdicpLmNzcyh7ZGlzcGxheTogJ25vbmUn
fSk7CisJb2soICFqUXVlcnkoJyNub3RoaWRkZW5kaXYnKS5pcygnOnZpc2libGUnKSwgJ01vZGlm
aWVkIENTUyBkaXNwbGF5OiBBc3NlcnQgZWxlbWVudCBpcyBoaWRkZW4nKTsKKwlqUXVlcnkoJyNu
b3RoaWRkZW5kaXYnKS5jc3Moe2Rpc3BsYXk6ICdibG9jayd9KTsKKwlvayggalF1ZXJ5KCcjbm90
aGlkZGVuZGl2JykuaXMoJzp2aXNpYmxlJyksICdNb2RpZmllZCBDU1MgZGlzcGxheTogQXNzZXJ0
IGVsZW1lbnQgaXMgdmlzaWJsZScpOworCisJdmFyIGRpdiA9IGpRdWVyeSggIjxkaXY+IiApOwor
CisJLy8gVGhlc2Ugc2hvdWxkIGJlICJhdXRvIiAob3Igc29tZSBiZXR0ZXIgdmFsdWUpCisJLy8g
dGVtcG9yYXJpbHkgcHJvdmlkZSAiMHB4IiBmb3IgYmFja3dhcmRzIGNvbXBhdAorCWVxdWFscygg
ZGl2LmNzcygid2lkdGgiKSwgIjBweCIsICJXaWR0aCBvbiBkaXNjb25uZWN0ZWQgbm9kZS4iICk7
CisJZXF1YWxzKCBkaXYuY3NzKCJoZWlnaHQiKSwgIjBweCIsICJIZWlnaHQgb24gZGlzY29ubmVj
dGVkIG5vZGUuIiApOworCisJZGl2LmNzcyh7IHdpZHRoOiA0LCBoZWlnaHQ6IDQgfSk7CisKKwll
cXVhbHMoIGRpdi5jc3MoIndpZHRoIiksICI0cHgiLCAiV2lkdGggb24gZGlzY29ubmVjdGVkIG5v
ZGUuIiApOworCWVxdWFscyggZGl2LmNzcygiaGVpZ2h0IiksICI0cHgiLCAiSGVpZ2h0IG9uIGRp
c2Nvbm5lY3RlZCBub2RlLiIgKTsKKworCXZhciBkaXYyID0galF1ZXJ5KCAiPGRpdiBzdHlsZT0n
ZGlzcGxheTpub25lOyc+PGlucHV0IHR5cGU9J3RleHQnIHN0eWxlPSdoZWlnaHQ6MjBweDsnLz48
dGV4dGFyZWEgc3R5bGU9J2hlaWdodDoyMHB4OycvPjxkaXYgc3R5bGU9J2hlaWdodDoyMHB4Oyc+
PC9kaXY+PC9kaXY+IikuYXBwZW5kVG8oImJvZHkiKTsKKworCWVxdWFscyggZGl2Mi5maW5kKCJp
bnB1dCIpLmNzcygiaGVpZ2h0IiksICIyMHB4IiwgIkhlaWdodCBvbiBoaWRkZW4gaW5wdXQuIiAp
OworCWVxdWFscyggZGl2Mi5maW5kKCJ0ZXh0YXJlYSIpLmNzcygiaGVpZ2h0IiksICIyMHB4Iiwg
IkhlaWdodCBvbiBoaWRkZW4gdGV4dGFyZWEuIiApOworCWVxdWFscyggZGl2Mi5maW5kKCJkaXYi
KS5jc3MoImhlaWdodCIpLCAiMjBweCIsICJIZWlnaHQgb24gaGlkZGVuIHRleHRhcmVhLiIgKTsK
KworCWRpdjIucmVtb3ZlKCk7CisKKwkvLyBoYW5kbGUgbmVnYXRpdmUgbnVtYmVycyBieSBpZ25v
cmluZyAjMTU5OSwgIzQyMTYKKwlqUXVlcnkoJyNub3RoaWRkZW5kaXYnKS5jc3MoeyAnd2lkdGgn
OiAxLCAnaGVpZ2h0JzogMSB9KTsKKworCXZhciB3aWR0aCA9IHBhcnNlRmxvYXQoalF1ZXJ5KCcj
bm90aGlkZGVuZGl2JykuY3NzKCd3aWR0aCcpKSwgaGVpZ2h0ID0gcGFyc2VGbG9hdChqUXVlcnko
JyNub3RoaWRkZW5kaXYnKS5jc3MoJ2hlaWdodCcpKTsKKwlqUXVlcnkoJyNub3RoaWRkZW5kaXYn
KS5jc3MoeyB3aWR0aDogLTEsIGhlaWdodDogLTEgfSk7CisJZXF1YWxzKCBwYXJzZUZsb2F0KGpR
dWVyeSgnI25vdGhpZGRlbmRpdicpLmNzcygnd2lkdGgnKSksIHdpZHRoLCAnVGVzdCBuZWdhdGl2
ZSB3aWR0aCBpZ25vcmVkJykKKwllcXVhbHMoIHBhcnNlRmxvYXQoalF1ZXJ5KCcjbm90aGlkZGVu
ZGl2JykuY3NzKCdoZWlnaHQnKSksIGhlaWdodCwgJ1Rlc3QgbmVnYXRpdmUgaGVpZ2h0IGlnbm9y
ZWQnKQorCisJZXF1YWxzKCBqUXVlcnkoJzxkaXYgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4nKS5j
c3MoJ2Rpc3BsYXknKSwgJ25vbmUnLCAnU3R5bGVzIG9uIGRpc2Nvbm5lY3RlZCBub2RlcycpOwor
CisJalF1ZXJ5KCcjZmxvYXRUZXN0JykuY3NzKHsnZmxvYXQnOiAncmlnaHQnfSk7CisJZXF1YWxz
KCBqUXVlcnkoJyNmbG9hdFRlc3QnKS5jc3MoJ2Zsb2F0JyksICdyaWdodCcsICdNb2RpZmllZCBD
U1MgZmxvYXQgdXNpbmcgImZsb2F0IjogQXNzZXJ0IGZsb2F0IGlzIHJpZ2h0Jyk7CisJalF1ZXJ5
KCcjZmxvYXRUZXN0JykuY3NzKHsnZm9udC1zaXplJzogJzMwcHgnfSk7CisJZXF1YWxzKCBqUXVl
cnkoJyNmbG9hdFRlc3QnKS5jc3MoJ2ZvbnQtc2l6ZScpLCAnMzBweCcsICdNb2RpZmllZCBDU1Mg
Zm9udC1zaXplOiBBc3NlcnQgZm9udC1zaXplIGlzIDMwcHgnKTsKKworCWpRdWVyeS5lYWNoKCIw
LDAuMjUsMC41LDAuNzUsMSIuc3BsaXQoJywnKSwgZnVuY3Rpb24oaSwgbikgeworCQlqUXVlcnko
JyNmb28nKS5jc3Moe29wYWNpdHk6IG59KTsKKwkJZXF1YWxzKCBqUXVlcnkoJyNmb28nKS5jc3Mo
J29wYWNpdHknKSwgcGFyc2VGbG9hdChuKSwgIkFzc2VydCBvcGFjaXR5IGlzICIgKyBwYXJzZUZs
b2F0KG4pICsgIiBhcyBhIFN0cmluZyIgKTsKKwkJalF1ZXJ5KCcjZm9vJykuY3NzKHtvcGFjaXR5
OiBwYXJzZUZsb2F0KG4pfSk7CisJCWVxdWFscyggalF1ZXJ5KCcjZm9vJykuY3NzKCdvcGFjaXR5
JyksIHBhcnNlRmxvYXQobiksICJBc3NlcnQgb3BhY2l0eSBpcyAiICsgcGFyc2VGbG9hdChuKSAr
ICIgYXMgYSBOdW1iZXIiICk7CisJfSk7CisJalF1ZXJ5KCcjZm9vJykuY3NzKHtvcGFjaXR5OiAn
J30pOworCWVxdWFscyggalF1ZXJ5KCcjZm9vJykuY3NzKCdvcGFjaXR5JyksICcxJywgIkFzc2Vy
dCBvcGFjaXR5IGlzIDEgd2hlbiBzZXQgdG8gYW4gZW1wdHkgU3RyaW5nIiApOworCisJZXF1YWxz
KCBqUXVlcnkoJyNlbXB0eScpLmNzcygnb3BhY2l0eScpLCAnMCcsICJBc3NlcnQgb3BhY2l0eSBp
cyBhY2Nlc3NpYmxlIHZpYSBmaWx0ZXIgcHJvcGVydHkgc2V0IGluIHN0eWxlc2hlZXQgaW4gSUUi
ICk7CisJalF1ZXJ5KCcjZW1wdHknKS5jc3MoeyBvcGFjaXR5OiAnMScgfSk7CisJZXF1YWxzKCBq
UXVlcnkoJyNlbXB0eScpLmNzcygnb3BhY2l0eScpLCAnMScsICJBc3NlcnQgb3BhY2l0eSBpcyB0
YWtlbiBmcm9tIHN0eWxlIGF0dHJpYnV0ZSB3aGVuIHNldCB2cyBzdHlsZXNoZWV0IGluIElFIHdp
dGggZmlsdGVycyIgKTsKKworCXZhciBkaXYgPSBqUXVlcnkoJyNub3RoaWRkZW5kaXYnKSwgY2hp
bGQgPSBqUXVlcnkoJyNub3RoaWRkZW5kaXZjaGlsZCcpOworCisJZXF1YWxzKCBwYXJzZUludChk
aXYuY3NzKCJmb250U2l6ZSIpKSwgMTYsICJWZXJpZnkgZm9udFNpemUgcHggc2V0LiIgKTsKKwll
cXVhbHMoIHBhcnNlSW50KGRpdi5jc3MoImZvbnQtc2l6ZSIpKSwgMTYsICJWZXJpZnkgZm9udFNp
emUgcHggc2V0LiIgKTsKKwllcXVhbHMoIHBhcnNlSW50KGNoaWxkLmNzcygiZm9udFNpemUiKSks
IDE2LCAiVmVyaWZ5IGZvbnRTaXplIHB4IHNldC4iICk7CisJZXF1YWxzKCBwYXJzZUludChjaGls
ZC5jc3MoImZvbnQtc2l6ZSIpKSwgMTYsICJWZXJpZnkgZm9udFNpemUgcHggc2V0LiIgKTsKKwor
CWNoaWxkLmNzcygiaGVpZ2h0IiwgIjEwMCUiKTsKKwllcXVhbHMoIGNoaWxkWzBdLnN0eWxlLmhl
aWdodCwgIjEwMCUiLCAiTWFrZSBzdXJlIHRoZSBoZWlnaHQgaXMgYmVpbmcgc2V0IGNvcnJlY3Rs
eS4iICk7CisKKwljaGlsZC5hdHRyKCJjbGFzcyIsICJlbSIpOworCWVxdWFscyggcGFyc2VJbnQo
Y2hpbGQuY3NzKCJmb250U2l6ZSIpKSwgMzIsICJWZXJpZnkgZm9udFNpemUgZW0gc2V0LiIgKTsK
KworCS8vIEhhdmUgdG8gdmVyaWZ5IHRoaXMgYXMgdGhlIHJlc3VsdCBkZXBlbmRzIHVwb24gdGhl
IGJyb3dzZXIncyBDU1MKKwkvLyBzdXBwb3J0IGZvciBmb250LXNpemUgcGVyY2VudGFnZXMKKwlj
aGlsZC5hdHRyKCJjbGFzcyIsICJwcmN0Iik7CisJdmFyIHByY3R2YWwgPSBwYXJzZUludChjaGls
ZC5jc3MoImZvbnRTaXplIikpLCBjaGVja3ZhbCA9IDA7CisJaWYgKCBwcmN0dmFsID09PSAxNiB8
fCBwcmN0dmFsID09PSAyNCApIHsKKwkJY2hlY2t2YWwgPSBwcmN0dmFsOworCX0KKworCWVxdWFs
cyggcHJjdHZhbCwgY2hlY2t2YWwsICJWZXJpZnkgZm9udFNpemUgJSBzZXQuIiApOworCisJZXF1
YWxzKCB0eXBlb2YgY2hpbGQuY3NzKCJ3aWR0aCIpLCAic3RyaW5nIiwgIk1ha2Ugc3VyZSB0aGF0
IGEgc3RyaW5nIHdpZHRoIGlzIHJldHVybmVkIGZyb20gY3NzKCd3aWR0aCcpLiIgKTsKKworCXZh
ciBvbGQgPSBjaGlsZFswXS5zdHlsZS5oZWlnaHQ7CisKKwkvLyBUZXN0IE5hTgorCWNoaWxkLmNz
cygiaGVpZ2h0IiwgcGFyc2VGbG9hdCgiem9vIikpOworCWVxdWFscyggY2hpbGRbMF0uc3R5bGUu
aGVpZ2h0LCBvbGQsICJNYWtlIHN1cmUgaGVpZ2h0IGlzbid0IGNoYW5nZWQgb24gTmFOLiIgKTsK
KworCS8vIFRlc3QgbnVsbAorCWNoaWxkLmNzcygiaGVpZ2h0IiwgbnVsbCk7CisJZXF1YWxzKCBj
aGlsZFswXS5zdHlsZS5oZWlnaHQsIG9sZCwgIk1ha2Ugc3VyZSBoZWlnaHQgaXNuJ3QgY2hhbmdl
ZCBvbiBudWxsLiIgKTsKKworCW9sZCA9IGNoaWxkWzBdLnN0eWxlLmZvbnRTaXplOworCisJLy8g
VGVzdCBOYU4KKwljaGlsZC5jc3MoImZvbnQtc2l6ZSIsIHBhcnNlRmxvYXQoInpvbyIpKTsKKwll
cXVhbHMoIGNoaWxkWzBdLnN0eWxlLmZvbnRTaXplLCBvbGQsICJNYWtlIHN1cmUgZm9udC1zaXpl
IGlzbid0IGNoYW5nZWQgb24gTmFOLiIgKTsKKworCS8vIFRlc3QgbnVsbAorCWNoaWxkLmNzcygi
Zm9udC1zaXplIiwgbnVsbCk7CisJZXF1YWxzKCBjaGlsZFswXS5zdHlsZS5mb250U2l6ZSwgb2xk
LCAiTWFrZSBzdXJlIGZvbnQtc2l6ZSBpc24ndCBjaGFuZ2VkIG9uIG51bGwuIiApOworfSk7CisK
K3Rlc3QoImNzcyhTdHJpbmcsIE9iamVjdCkiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMjIpOwor
CisJb2soIGpRdWVyeSgnI25vdGhpZGRlbmRpdicpLmlzKCc6dmlzaWJsZScpLCAnTW9kaWZ5aW5n
IENTUyBkaXNwbGF5OiBBc3NlcnQgZWxlbWVudCBpcyB2aXNpYmxlJyk7CisJalF1ZXJ5KCcjbm90
aGlkZGVuZGl2JykuY3NzKCJkaXNwbGF5IiwgJ25vbmUnKTsKKwlvayggIWpRdWVyeSgnI25vdGhp
ZGRlbmRpdicpLmlzKCc6dmlzaWJsZScpLCAnTW9kaWZpZWQgQ1NTIGRpc3BsYXk6IEFzc2VydCBl
bGVtZW50IGlzIGhpZGRlbicpOworCWpRdWVyeSgnI25vdGhpZGRlbmRpdicpLmNzcygiZGlzcGxh
eSIsICdibG9jaycpOworCW9rKCBqUXVlcnkoJyNub3RoaWRkZW5kaXYnKS5pcygnOnZpc2libGUn
KSwgJ01vZGlmaWVkIENTUyBkaXNwbGF5OiBBc3NlcnQgZWxlbWVudCBpcyB2aXNpYmxlJyk7CisK
KwlqUXVlcnkoIiNub3RoaWRkZW5kaXYiKS5jc3MoInRvcCIsICItMWVtIik7CisJb2soIGpRdWVy
eSgiI25vdGhpZGRlbmRpdiIpLmNzcygidG9wIiksIC0xNiwgIkNoZWNrIG5lZ2F0aXZlIG51bWJl
ciBpbiBFTXMuIiApOworCisJalF1ZXJ5KCcjZmxvYXRUZXN0JykuY3NzKCdmbG9hdCcsICdsZWZ0
Jyk7CisJZXF1YWxzKCBqUXVlcnkoJyNmbG9hdFRlc3QnKS5jc3MoJ2Zsb2F0JyksICdsZWZ0Jywg
J01vZGlmaWVkIENTUyBmbG9hdCB1c2luZyAiZmxvYXQiOiBBc3NlcnQgZmxvYXQgaXMgbGVmdCcp
OworCWpRdWVyeSgnI2Zsb2F0VGVzdCcpLmNzcygnZm9udC1zaXplJywgJzIwcHgnKTsKKwllcXVh
bHMoIGpRdWVyeSgnI2Zsb2F0VGVzdCcpLmNzcygnZm9udC1zaXplJyksICcyMHB4JywgJ01vZGlm
aWVkIENTUyBmb250LXNpemU6IEFzc2VydCBmb250LXNpemUgaXMgMjBweCcpOworCisJalF1ZXJ5
LmVhY2goIjAsMC4yNSwwLjUsMC43NSwxIi5zcGxpdCgnLCcpLCBmdW5jdGlvbihpLCBuKSB7CisJ
CWpRdWVyeSgnI2ZvbycpLmNzcygnb3BhY2l0eScsIG4pOworCQllcXVhbHMoIGpRdWVyeSgnI2Zv
bycpLmNzcygnb3BhY2l0eScpLCBwYXJzZUZsb2F0KG4pLCAiQXNzZXJ0IG9wYWNpdHkgaXMgIiAr
IHBhcnNlRmxvYXQobikgKyAiIGFzIGEgU3RyaW5nIiApOworCQlqUXVlcnkoJyNmb28nKS5jc3Mo
J29wYWNpdHknLCBwYXJzZUZsb2F0KG4pKTsKKwkJZXF1YWxzKCBqUXVlcnkoJyNmb28nKS5jc3Mo
J29wYWNpdHknKSwgcGFyc2VGbG9hdChuKSwgIkFzc2VydCBvcGFjaXR5IGlzICIgKyBwYXJzZUZs
b2F0KG4pICsgIiBhcyBhIE51bWJlciIgKTsKKwl9KTsKKwlqUXVlcnkoJyNmb28nKS5jc3MoJ29w
YWNpdHknLCAnJyk7CisJZXF1YWxzKCBqUXVlcnkoJyNmb28nKS5jc3MoJ29wYWNpdHknKSwgJzEn
LCAiQXNzZXJ0IG9wYWNpdHkgaXMgMSB3aGVuIHNldCB0byBhbiBlbXB0eSBTdHJpbmciICk7CisK
KwkvLyB1c2luZyBjb250ZW50cyB3aWxsIGdldCBjb21tZW50cyByZWd1bGFyLCB0ZXh0LCBhbmQg
Y29tbWVudCBub2RlcworCXZhciBqID0galF1ZXJ5KCIjbm9ubm9kZXMiKS5jb250ZW50cygpOwor
CWouY3NzKCJvdmVyZmxvdyIsICJ2aXNpYmxlIik7CisJZXF1YWxzKCBqLmNzcygib3ZlcmZsb3ci
KSwgInZpc2libGUiLCAiQ2hlY2sgbm9kZSx0ZXh0bm9kZSxjb21tZW50IGNzcyB3b3JrcyIgKTsK
KwkvLyBvcGVyYSBzb21ldGltZXMgZG9lc24ndCB1cGRhdGUgJ2Rpc3BsYXknIGNvcnJlY3RseSwg
c2VlICMyMDM3CisJalF1ZXJ5KCIjdDIwMzciKVswXS5pbm5lckhUTUwgPSBqUXVlcnkoIiN0MjAz
NyIpWzBdLmlubmVySFRNTAorCWVxdWFscyggalF1ZXJ5KCIjdDIwMzcgLmhpZGRlbiIpLmNzcygi
ZGlzcGxheSIpLCAibm9uZSIsICJNYWtlIHN1cmUgYnJvd3NlciB0aGlua3MgaXQgaXMgaGlkZGVu
IiApOworCisJdmFyIGRpdiA9IGpRdWVyeSgiI25vdGhpZGRlbmRpdiIpLAorCQlkaXNwbGF5ID0g
ZGl2LmNzcygiZGlzcGxheSIpLAorCQlyZXQgPSBkaXYuY3NzKCJkaXNwbGF5IiwgdW5kZWZpbmVk
KTsKKworCWVxdWFscyggcmV0LCBkaXYsICJNYWtlIHN1cmUgc2V0dGluZyB1bmRlZmluZWQgcmV0
dXJucyB0aGUgb3JpZ2luYWwgc2V0LiIgKTsKKwllcXVhbHMoIGRpdi5jc3MoImRpc3BsYXkiKSwg
ZGlzcGxheSwgIk1ha2Ugc3VyZSB0aGF0IHRoZSBkaXNwbGF5IHdhc24ndCBjaGFuZ2VkLiIgKTsK
KworCS8vIFRlc3QgZm9yIEJ1ZyAjNTUwOQorCXZhciBzdWNjZXNzID0gdHJ1ZTsKKwl0cnkgewor
CQlqUXVlcnkoJyNmb28nKS5jc3MoImJhY2tncm91bmRDb2xvciIsICJyZ2JhKDAsIDAsIDAsIDAu
MSkiKTsKKwl9CisJY2F0Y2ggKGUpIHsKKwkJc3VjY2VzcyA9IGZhbHNlOworCX0KKwlvayggc3Vj
Y2VzcywgIlNldHRpbmcgUkdCQSB2YWx1ZXMgZG9lcyBub3QgdGhyb3cgRXJyb3IiICk7Cit9KTsK
KworaWYgKCAhalF1ZXJ5LnN1cHBvcnQub3BhY2l0eSApIHsKKwl0ZXN0KCJjc3MoU3RyaW5nLCBP
YmplY3QpIGZvciBNU0lFIiwgZnVuY3Rpb24oKSB7CisJCS8vIGZvciAjMTQzOCwgSUUgdGhyb3dz
IEpTIGVycm9yIHdoZW4gZmlsdGVyIGV4aXN0cyBidXQgZG9lc24ndCBoYXZlIG9wYWNpdHkgaW4g
aXQKKwkJalF1ZXJ5KCcjZm9vJykuY3NzKCJmaWx0ZXIiLCAicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zv
cm0uTWljcm9zb2Z0LkNocm9tYShjb2xvcj0ncmVkJyk7Iik7CisJCWVxdWFscyggalF1ZXJ5KCcj
Zm9vJykuY3NzKCdvcGFjaXR5JyksICcxJywgIkFzc2VydCBvcGFjaXR5IGlzIDEgd2hlbiBhIGRp
ZmZlcmVudCBmaWx0ZXIgaXMgc2V0IGluIElFLCAjMTQzOCIgKTsKKworCQl2YXIgZmlsdGVyVmFs
ID0gInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYShvcGFjaXR5PTMwKSBw
cm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQmx1cihwaXhlbHJhZGl1cz01KSI7CisJ
CXZhciBmaWx0ZXJWYWwyID0gInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5hbHBo
YShvcGFjaXR5PTEwMCkgcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkJsdXIocGl4
ZWxyYWRpdXM9NSkiOworCQl2YXIgZmlsdGVyVmFsMyA9ICJwcm9naWQ6RFhJbWFnZVRyYW5zZm9y
bS5NaWNyb3NvZnQuQmx1cihwaXhlbHJhZGl1cz01KSI7CisJCWpRdWVyeSgnI2ZvbycpLmNzcygi
ZmlsdGVyIiwgZmlsdGVyVmFsKTsKKwkJZXF1YWxzKCBqUXVlcnkoJyNmb28nKS5jc3MoImZpbHRl
ciIpLCBmaWx0ZXJWYWwsICJjc3MoJ2ZpbHRlcicsIHZhbCkgd29ya3MiICk7CisJCWpRdWVyeSgn
I2ZvbycpLmNzcygib3BhY2l0eSIsIDEpOworCQllcXVhbHMoIGpRdWVyeSgnI2ZvbycpLmNzcygi
ZmlsdGVyIiksIGZpbHRlclZhbDIsICJTZXR0aW5nIG9wYWNpdHkgaW4gSUUgZG9lc24ndCBkdXBs
aWNhdGUgb3BhY2l0eSBmaWx0ZXIiICk7CisJCWVxdWFscyggalF1ZXJ5KCcjZm9vJykuY3NzKCJv
cGFjaXR5IiksIDEsICJTZXR0aW5nIG9wYWNpdHkgaW4gSUUgd2l0aCBvdGhlciBmaWx0ZXJzIHdv
cmtzIiApOworCQlqUXVlcnkoJyNmb28nKS5jc3MoImZpbHRlciIsIGZpbHRlclZhbDMpLmNzcygi
b3BhY2l0eSIsIDEpOworCQlvayggalF1ZXJ5KCcjZm9vJykuY3NzKCJmaWx0ZXIiKS5pbmRleE9m
KGZpbHRlclZhbDMpICE9PSAtMSwgIlNldHRpbmcgb3BhY2l0eSBpbiBJRSBkb2Vzbid0IGNsb2Ji
ZXIgb3RoZXIgZmlsdGVycyIgKTsKKwl9KTsKK30KKwordGVzdCgiY3NzKFN0cmluZywgRnVuY3Rp
b24pIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDMpOworCisJdmFyIHNpemVzID0gWyIxMHB4Iiwg
IjIwcHgiLCAiMzBweCJdOworCisJalF1ZXJ5KCI8ZGl2IGlkPSdjc3NGdW5jdGlvblRlc3QnPjxk
aXYgY2xhc3M9J2Nzc0Z1bmN0aW9uJz48L2Rpdj4iICsKKwkJCQkgIjxkaXYgY2xhc3M9J2Nzc0Z1
bmN0aW9uJz48L2Rpdj4iICsKKwkJCQkgIjxkaXYgY2xhc3M9J2Nzc0Z1bmN0aW9uJz48L2Rpdj48
L2Rpdj4iKQorCQkuYXBwZW5kVG8oImJvZHkiKTsKKworCXZhciBpbmRleCA9IDA7CisKKwlqUXVl
cnkoIiNjc3NGdW5jdGlvblRlc3QgZGl2IikuY3NzKCJmb250LXNpemUiLCBmdW5jdGlvbigpIHsK
KwkJdmFyIHNpemUgPSBzaXplc1tpbmRleF07CisJCWluZGV4Kys7CisJCXJldHVybiBzaXplOwor
CX0pOworCisJaW5kZXggPSAwOworCisJalF1ZXJ5KCIjY3NzRnVuY3Rpb25UZXN0IGRpdiIpLmVh
Y2goZnVuY3Rpb24oKSB7CisJCXZhciBjb21wdXRlZFNpemUgPSBqUXVlcnkodGhpcykuY3NzKCJm
b250LXNpemUiKQorCQl2YXIgZXhwZWN0ZWRTaXplID0gc2l6ZXNbaW5kZXhdCisJCWVxdWFscygg
Y29tcHV0ZWRTaXplLCBleHBlY3RlZFNpemUsICJEaXYgIyIgKyBpbmRleCArICIgc2hvdWxkIGJl
ICIgKyBleHBlY3RlZFNpemUgKTsKKwkJaW5kZXgrKzsKKwl9KTsKKworCWpRdWVyeSgiI2Nzc0Z1
bmN0aW9uVGVzdCIpLnJlbW92ZSgpOworfSk7CisKK3Rlc3QoImNzcyhTdHJpbmcsIEZ1bmN0aW9u
KSB3aXRoIGluY29taW5nIHZhbHVlIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDMpOworCisJdmFy
IHNpemVzID0gWyIxMHB4IiwgIjIwcHgiLCAiMzBweCJdOworCisJalF1ZXJ5KCI8ZGl2IGlkPSdj
c3NGdW5jdGlvblRlc3QnPjxkaXYgY2xhc3M9J2Nzc0Z1bmN0aW9uJz48L2Rpdj4iICsKKwkJCQkg
IjxkaXYgY2xhc3M9J2Nzc0Z1bmN0aW9uJz48L2Rpdj4iICsKKwkJCQkgIjxkaXYgY2xhc3M9J2Nz
c0Z1bmN0aW9uJz48L2Rpdj48L2Rpdj4iKQorCQkuYXBwZW5kVG8oImJvZHkiKTsKKworCXZhciBp
bmRleCA9IDA7CisKKwlqUXVlcnkoIiNjc3NGdW5jdGlvblRlc3QgZGl2IikuY3NzKCJmb250LXNp
emUiLCBmdW5jdGlvbigpIHsKKwkJdmFyIHNpemUgPSBzaXplc1tpbmRleF07CisJCWluZGV4Kys7
CisJCXJldHVybiBzaXplOworCX0pOworCisJaW5kZXggPSAwOworCisJalF1ZXJ5KCIjY3NzRnVu
Y3Rpb25UZXN0IGRpdiIpLmNzcygiZm9udC1zaXplIiwgZnVuY3Rpb24oaSwgY29tcHV0ZWRTaXpl
KSB7CisJCXZhciBleHBlY3RlZFNpemUgPSBzaXplc1tpbmRleF0KKwkJZXF1YWxzKCBjb21wdXRl
ZFNpemUsIGV4cGVjdGVkU2l6ZSwgIkRpdiAjIiArIGluZGV4ICsgIiBzaG91bGQgYmUgIiArIGV4
cGVjdGVkU2l6ZSApOworCQlpbmRleCsrOworCQlyZXR1cm4gY29tcHV0ZWRTaXplOworCX0pOwor
CisJalF1ZXJ5KCIjY3NzRnVuY3Rpb25UZXN0IikucmVtb3ZlKCk7Cit9KTsKKwordGVzdCgiY3Nz
KE9iamVjdCkgd2hlcmUgdmFsdWVzIGFyZSBGdW5jdGlvbnMiLCBmdW5jdGlvbigpIHsKKwlleHBl
Y3QoMyk7CisKKwl2YXIgc2l6ZXMgPSBbIjEwcHgiLCAiMjBweCIsICIzMHB4Il07CisKKwlqUXVl
cnkoIjxkaXYgaWQ9J2Nzc0Z1bmN0aW9uVGVzdCc+PGRpdiBjbGFzcz0nY3NzRnVuY3Rpb24nPjwv
ZGl2PiIgKworCQkJCSAiPGRpdiBjbGFzcz0nY3NzRnVuY3Rpb24nPjwvZGl2PiIgKworCQkJCSAi
PGRpdiBjbGFzcz0nY3NzRnVuY3Rpb24nPjwvZGl2PjwvZGl2PiIpCisJCS5hcHBlbmRUbygiYm9k
eSIpOworCisJdmFyIGluZGV4ID0gMDsKKworCWpRdWVyeSgiI2Nzc0Z1bmN0aW9uVGVzdCBkaXYi
KS5jc3Moe2ZvbnRTaXplOiBmdW5jdGlvbigpIHsKKwkJdmFyIHNpemUgPSBzaXplc1tpbmRleF07
CisJCWluZGV4Kys7CisJCXJldHVybiBzaXplOworCX19KTsKKworCWluZGV4ID0gMDsKKworCWpR
dWVyeSgiI2Nzc0Z1bmN0aW9uVGVzdCBkaXYiKS5lYWNoKGZ1bmN0aW9uKCkgeworCQl2YXIgY29t
cHV0ZWRTaXplID0galF1ZXJ5KHRoaXMpLmNzcygiZm9udC1zaXplIikKKwkJdmFyIGV4cGVjdGVk
U2l6ZSA9IHNpemVzW2luZGV4XQorCQllcXVhbHMoIGNvbXB1dGVkU2l6ZSwgZXhwZWN0ZWRTaXpl
LCAiRGl2ICMiICsgaW5kZXggKyAiIHNob3VsZCBiZSAiICsgZXhwZWN0ZWRTaXplICk7CisJCWlu
ZGV4Kys7CisJfSk7CisKKwlqUXVlcnkoIiNjc3NGdW5jdGlvblRlc3QiKS5yZW1vdmUoKTsKK30p
OworCit0ZXN0KCJjc3MoT2JqZWN0KSB3aGVyZSB2YWx1ZXMgYXJlIEZ1bmN0aW9ucyB3aXRoIGlu
Y29taW5nIHZhbHVlcyIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgzKTsKKworCXZhciBzaXplcyA9
IFsiMTBweCIsICIyMHB4IiwgIjMwcHgiXTsKKworCWpRdWVyeSgiPGRpdiBpZD0nY3NzRnVuY3Rp
b25UZXN0Jz48ZGl2IGNsYXNzPSdjc3NGdW5jdGlvbic+PC9kaXY+IiArCisJCQkJICI8ZGl2IGNs
YXNzPSdjc3NGdW5jdGlvbic+PC9kaXY+IiArCisJCQkJICI8ZGl2IGNsYXNzPSdjc3NGdW5jdGlv
bic+PC9kaXY+PC9kaXY+IikKKwkJLmFwcGVuZFRvKCJib2R5Iik7CisKKwl2YXIgaW5kZXggPSAw
OworCisJalF1ZXJ5KCIjY3NzRnVuY3Rpb25UZXN0IGRpdiIpLmNzcyh7Zm9udFNpemU6IGZ1bmN0
aW9uKCkgeworCQl2YXIgc2l6ZSA9IHNpemVzW2luZGV4XTsKKwkJaW5kZXgrKzsKKwkJcmV0dXJu
IHNpemU7CisJfX0pOworCisJaW5kZXggPSAwOworCisJalF1ZXJ5KCIjY3NzRnVuY3Rpb25UZXN0
IGRpdiIpLmNzcyh7ImZvbnQtc2l6ZSI6IGZ1bmN0aW9uKGksIGNvbXB1dGVkU2l6ZSkgeworCQl2
YXIgZXhwZWN0ZWRTaXplID0gc2l6ZXNbaW5kZXhdCisJCWVxdWFscyggY29tcHV0ZWRTaXplLCBl
eHBlY3RlZFNpemUsICJEaXYgIyIgKyBpbmRleCArICIgc2hvdWxkIGJlICIgKyBleHBlY3RlZFNp
emUgKTsKKwkJaW5kZXgrKzsKKwkJcmV0dXJuIGNvbXB1dGVkU2l6ZTsKKwl9fSk7CisKKwlqUXVl
cnkoIiNjc3NGdW5jdGlvblRlc3QiKS5yZW1vdmUoKTsKK30pOworCit0ZXN0KCJqUXVlcnkuY3Nz
KGVsZW0sICdoZWlnaHQnKSBkb2Vzbid0IGNsZWFyIHJhZGlvIGJ1dHRvbnMgKGJ1ZyAjMTA5NSki
LCBmdW5jdGlvbiAoKSB7CisJZXhwZWN0KDQpOworCisJdmFyICRjaGVja2VkdGVzdCA9IGpRdWVy
eSgiI2NoZWNrZWR0ZXN0Iik7CisJLy8gSUU2IHdhcyBjbGVhcmluZyAiY2hlY2tlZCIgaW4galF1
ZXJ5LmNzcyhlbGVtLCAiaGVpZ2h0Iik7CisJalF1ZXJ5LmNzcygkY2hlY2tlZHRlc3RbMF0sICJo
ZWlnaHQiKTsKKwlvayggISEgalF1ZXJ5KCI6cmFkaW86Zmlyc3QiLCAkY2hlY2tlZHRlc3QpLmF0
dHIoImNoZWNrZWQiKSwgIkNoZWNrIGZpcnN0IHJhZGlvIHN0aWxsIGNoZWNrZWQuIiApOworCW9r
KCAhIGpRdWVyeSgiOnJhZGlvOmxhc3QiLCAkY2hlY2tlZHRlc3QpLmF0dHIoImNoZWNrZWQiKSwg
IkNoZWNrIGxhc3QgcmFkaW8gc3RpbGwgTk9UIGNoZWNrZWQuIiApOworCW9rKCAhISBqUXVlcnko
IjpjaGVja2JveDpmaXJzdCIsICRjaGVja2VkdGVzdCkuYXR0cigiY2hlY2tlZCIpLCAiQ2hlY2sg
Zmlyc3QgY2hlY2tib3ggc3RpbGwgY2hlY2tlZC4iICk7CisJb2soICEgalF1ZXJ5KCI6Y2hlY2ti
b3g6bGFzdCIsICRjaGVja2VkdGVzdCkuYXR0cigiY2hlY2tlZCIpLCAiQ2hlY2sgbGFzdCBjaGVj
a2JveCBzdGlsbCBOT1QgY2hlY2tlZC4iICk7Cit9KTsKKwordGVzdCgiOnZpc2libGUgc2VsZWN0
b3Igd29ya3MgcHJvcGVybHkgb24gdGFibGUgZWxlbWVudHMgKGJ1ZyAjNDUxMikiLCBmdW5jdGlv
biAoKSB7CisJZXhwZWN0KDEpOworCisJalF1ZXJ5KCcjdGFibGUnKS5odG1sKCc8dHI+PHRkIHN0
eWxlPSJkaXNwbGF5Om5vbmUiPmNlbGw8L3RkPjx0ZD5jZWxsPC90ZD48L3RyPicpOworCWVxdWFs
cyhqUXVlcnkoJyN0YWJsZSB0ZDp2aXNpYmxlJykubGVuZ3RoLCAxLCAiaGlkZGVuIGNlbGwgaXMg
bm90IHBlcmNlaXZlZCBhcyB2aXNpYmxlIik7Cit9KTsKKwordGVzdCgiOnZpc2libGUgc2VsZWN0
b3Igd29ya3MgcHJvcGVybHkgb24gY2hpbGRyZW4gd2l0aCBhIGhpZGRlbiBwYXJlbnQgKGJ1ZyAj
NDUxMikiLCBmdW5jdGlvbiAoKSB7CisJZXhwZWN0KDEpOworCWpRdWVyeSgnI3RhYmxlJykuY3Nz
KCdkaXNwbGF5JywgJ25vbmUnKS5odG1sKCc8dHI+PHRkPmNlbGw8L3RkPjx0ZD5jZWxsPC90ZD48
L3RyPicpOworCWVxdWFscyhqUXVlcnkoJyN0YWJsZSB0ZDp2aXNpYmxlJykubGVuZ3RoLCAwLCAi
aGlkZGVuIGNlbGwgY2hpbGRyZW4gbm90IHBlcmNlaXZlZCBhcyB2aXNpYmxlIik7Cit9KTsKKwor
dGVzdCgiaW50ZXJuYWwgcmVmIHRvIGVsZW0ucnVudGltZVN0eWxlIChidWcgIzc2MDgpIiwgZnVu
Y3Rpb24gKCkgeworCWV4cGVjdCgxKTsKKwl2YXIgcmVzdWx0ID0gdHJ1ZTsKKwkKKwl0cnkgewor
CQlqUXVlcnkoIiNmb28iKS5jc3MoIHsgd2lkdGg6ICIwJSIgfSApLmNzcygid2lkdGgiKTsKKwl9
IGNhdGNoIChlKSB7CisJCXJlc3VsdCA9IGZhbHNlOworCX0KKworCW9rKCByZXN1bHQsICJlbGVt
LnJ1bnRpbWVTdHlsZSBkb2VzIG5vdCB0aHJvdyBleGNlcHRpb24iICk7Cit9KTsKClByb3BlcnR5
IGNoYW5nZXMgb246IExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC91bml0L2Nzcy5q
cwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkFkZGVkOiBhbGxvdy10YWJzCiAgICsgeWVzCgpJbmRleDogTGF5b3V0VGVz
dHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L3VuaXQvZGF0YS5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvdW5pdC9kYXRhLmpzCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L3VuaXQvZGF0YS5qcwkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0ODggQEAKK21vZHVsZSgiZGF0YSIsIHsgdGVhcmRvd246IG1vZHVs
ZVRlYXJkb3duIH0pOworCit0ZXN0KCJleHBhbmRvIiwgZnVuY3Rpb24oKXsKKwlleHBlY3QoMSk7
CisKKwllcXVhbHMoImV4cGFuZG8iIGluIGpRdWVyeSwgdHJ1ZSwgImpRdWVyeSBpcyBleHBvc2lu
ZyB0aGUgZXhwYW5kbyIpOworfSk7CisKK2Z1bmN0aW9uIGRhdGFUZXN0cyAoZWxlbSkgeworCS8v
IGV4cGVjdCgzMikKKworCWZ1bmN0aW9uIGdldENhY2hlTGVuZ3RoKCkgeworCQl2YXIgY2FjaGVM
ZW5ndGggPSAwOworCQlmb3IgKHZhciBpIGluIGpRdWVyeS5jYWNoZSkgeworCQkJKytjYWNoZUxl
bmd0aDsKKwkJfQorCisJCXJldHVybiBjYWNoZUxlbmd0aDsKKwl9CisKKwllcXVhbHMoIGpRdWVy
eS5kYXRhKGVsZW0sICJmb28iKSwgdW5kZWZpbmVkLCAiTm8gZGF0YSBleGlzdHMgaW5pdGlhbGx5
IiApOworCXN0cmljdEVxdWFsKCBqUXVlcnkuaGFzRGF0YShlbGVtKSwgZmFsc2UsICJqUXVlcnku
aGFzRGF0YSBhZ3JlZXMgbm8gZGF0YSBleGlzdHMgaW5pdGlhbGx5IiApOworCisJdmFyIGRhdGFP
YmogPSBqUXVlcnkuZGF0YShlbGVtKTsKKwllcXVhbHMoIHR5cGVvZiBkYXRhT2JqLCAib2JqZWN0
IiwgIkNhbGxpbmcgZGF0YSB3aXRoIG5vIGFyZ3MgZ2l2ZXMgdXMgYSBkYXRhIG9iamVjdCByZWZl
cmVuY2UiICk7CisJc3RyaWN0RXF1YWwoIGpRdWVyeS5kYXRhKGVsZW0pLCBkYXRhT2JqLCAiQ2Fs
bGluZyBqUXVlcnkuZGF0YSByZXR1cm5zIHRoZSBzYW1lIGRhdGEgb2JqZWN0IHdoZW4gY2FsbGVk
IG11bHRpcGxlIHRpbWVzIiApOworCisJc3RyaWN0RXF1YWwoIGpRdWVyeS5oYXNEYXRhKGVsZW0p
LCBmYWxzZSwgImpRdWVyeS5oYXNEYXRhIGFncmVlcyBubyBkYXRhIGV4aXN0cyBldmVuIHdoZW4g
YW4gZW1wdHkgZGF0YSBvYmogZXhpc3RzIiApOworCisJZGF0YU9iai5mb28gPSAiYmFyIjsKKwll
cXVhbHMoIGpRdWVyeS5kYXRhKGVsZW0sICJmb28iKSwgImJhciIsICJEYXRhIGlzIHJlYWRhYmxl
IGJ5IGpRdWVyeS5kYXRhIHdoZW4gc2V0IGRpcmVjdGx5IG9uIGEgcmV0dXJuZWQgZGF0YSBvYmpl
Y3QiICk7CisKKwlzdHJpY3RFcXVhbCggalF1ZXJ5Lmhhc0RhdGEoZWxlbSksIHRydWUsICJqUXVl
cnkuaGFzRGF0YSBhZ3JlZXMgZGF0YSBleGlzdHMgd2hlbiBkYXRhIGV4aXN0cyIgKTsKKworCWpR
dWVyeS5kYXRhKGVsZW0sICJmb28iLCAiYmF6Iik7CisJZXF1YWxzKCBqUXVlcnkuZGF0YShlbGVt
LCAiZm9vIiksICJiYXoiLCAiRGF0YSBjYW4gYmUgY2hhbmdlZCBieSBqUXVlcnkuZGF0YSIgKTsK
KwllcXVhbHMoIGRhdGFPYmouZm9vLCAiYmF6IiwgIkNoYW5nZXMgbWFkZSB0aHJvdWdoIGpRdWVy
eS5kYXRhIHByb3BhZ2F0ZSB0byByZWZlcmVuY2VkIGRhdGEgb2JqZWN0IiApOworCisJalF1ZXJ5
LmRhdGEoZWxlbSwgImZvbyIsIHVuZGVmaW5lZCk7CisJZXF1YWxzKCBqUXVlcnkuZGF0YShlbGVt
LCAiZm9vIiksICJiYXoiLCAiRGF0YSBpcyBub3QgdW5zZXQgYnkgcGFzc2luZyB1bmRlZmluZWQg
dG8galF1ZXJ5LmRhdGEiICk7CisKKwlqUXVlcnkuZGF0YShlbGVtLCAiZm9vIiwgbnVsbCk7CisJ
c3RyaWN0RXF1YWwoIGpRdWVyeS5kYXRhKGVsZW0sICJmb28iKSwgbnVsbCwgIlNldHRpbmcgbnVs
bCB1c2luZyBqUXVlcnkuZGF0YSB3b3JrcyBPSyIgKTsKKworCWpRdWVyeS5kYXRhKGVsZW0sICJm
b28iLCAiZm9vMSIpOworCisJalF1ZXJ5LmRhdGEoZWxlbSwgeyAiYmFyIiA6ICJiYXoiLCAiYm9v
bSIgOiAiYmxveiIgfSk7CisJc3RyaWN0RXF1YWwoIGpRdWVyeS5kYXRhKGVsZW0sICJmb28iKSwg
ImZvbzEiLCAiUGFzc2luZyBhbiBvYmplY3QgZXh0ZW5kcyB0aGUgZGF0YSBvYmplY3QgaW5zdGVh
ZCBvZiByZXBsYWNpbmcgaXQiICk7CisJZXF1YWxzKCBqUXVlcnkuZGF0YShlbGVtLCAiYm9vbSIp
LCAiYmxveiIsICJFeHRlbmRpbmcgdGhlIGRhdGEgb2JqZWN0IHdvcmtzIiApOworCisJalF1ZXJ5
Ll9kYXRhKGVsZW0sICJmb28iLCAiZm9vMiIpOworCWVxdWFscyggalF1ZXJ5Ll9kYXRhKGVsZW0s
ICJmb28iKSwgImZvbzIiLCAiU2V0dGluZyBpbnRlcm5hbCBkYXRhIHdvcmtzIiApOworCWVxdWFs
cyggalF1ZXJ5LmRhdGEoZWxlbSwgImZvbyIpLCAiZm9vMSIsICJTZXR0aW5nIGludGVybmFsIGRh
dGEgZG9lcyBub3Qgb3ZlcnJpZGUgdXNlciBkYXRhIiApOworCisJdmFyIGludGVybmFsRGF0YU9i
aiA9IGpRdWVyeS5kYXRhKGVsZW0sIGpRdWVyeS5leHBhbmRvKTsKKwlzdHJpY3RFcXVhbCggalF1
ZXJ5Ll9kYXRhKGVsZW0pLCBpbnRlcm5hbERhdGFPYmosICJJbnRlcm5hbCBkYXRhIG9iamVjdCBp
cyBhY2Nlc3NpYmxlIHZpYSBqUXVlcnkuZXhwYW5kbyBwcm9wZXJ0eSIgKTsKKwlub3RTdHJpY3RF
cXVhbCggZGF0YU9iaiwgaW50ZXJuYWxEYXRhT2JqLCAiSW50ZXJuYWwgZGF0YSBvYmplY3QgaXMg
bm90IHRoZSBzYW1lIGFzIHVzZXIgZGF0YSBvYmplY3QiICk7CisKKwlzdHJpY3RFcXVhbCggZWxl
bS5ib29tLCB1bmRlZmluZWQsICJEYXRhIGlzIG5ldmVyIHN0b3JlZCBkaXJlY3RseSBvbiB0aGUg
b2JqZWN0IiApOworCisJalF1ZXJ5LnJlbW92ZURhdGEoZWxlbSwgImZvbyIpOworCXN0cmljdEVx
dWFsKCBqUXVlcnkuZGF0YShlbGVtLCAiZm9vIiksIHVuZGVmaW5lZCwgImpRdWVyeS5yZW1vdmVE
YXRhIHJlbW92ZXMgc2luZ2xlIHByb3BlcnRpZXMiICk7CisKKwlqUXVlcnkucmVtb3ZlRGF0YShl
bGVtKTsKKwlzdHJpY3RFcXVhbCggalF1ZXJ5LmRhdGEoZWxlbSwgalF1ZXJ5LmV4cGFuZG8pLCBp
bnRlcm5hbERhdGFPYmosICJqUXVlcnkucmVtb3ZlRGF0YSBkb2VzIG5vdCByZW1vdmUgaW50ZXJu
YWwgZGF0YSBpZiBpdCBleGlzdHMiICk7CisKKwlqUXVlcnkucmVtb3ZlRGF0YShlbGVtLCB1bmRl
ZmluZWQsIHRydWUpOworCisJc3RyaWN0RXF1YWwoIGpRdWVyeS5kYXRhKGVsZW0sIGpRdWVyeS5l
eHBhbmRvKSwgdW5kZWZpbmVkLCAialF1ZXJ5LnJlbW92ZURhdGEgb24gaW50ZXJuYWwgZGF0YSB3
b3JrcyIgKTsKKwlzdHJpY3RFcXVhbCggalF1ZXJ5Lmhhc0RhdGEoZWxlbSksIGZhbHNlLCAialF1
ZXJ5Lmhhc0RhdGEgYWdyZWVzIGFsbCBkYXRhIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSBvYmplY3Qi
ICk7CisKKwlqUXVlcnkuX2RhdGEoZWxlbSwgImZvbyIsICJmb28yIik7CisJc3RyaWN0RXF1YWwo
IGpRdWVyeS5oYXNEYXRhKGVsZW0pLCB0cnVlLCAialF1ZXJ5Lmhhc0RhdGEgc2hvd3MgZGF0YSBl
eGlzdHMgZXZlbiBpZiBpdCBpcyBvbmx5IGludGVybmFsIGRhdGEiICk7CisKKwlqUXVlcnkuZGF0
YShlbGVtLCAiZm9vIiwgImZvbzEiKTsKKwllcXVhbHMoIGpRdWVyeS5fZGF0YShlbGVtLCAiZm9v
IiksICJmb28yIiwgIlNldHRpbmcgdXNlciBkYXRhIGRvZXMgbm90IG92ZXJyaWRlIGludGVybmFs
IGRhdGEiICk7CisKKwlqUXVlcnkucmVtb3ZlRGF0YShlbGVtLCB1bmRlZmluZWQsIHRydWUpOwor
CWVxdWFscyggalF1ZXJ5LmRhdGEoZWxlbSwgImZvbyIpLCAiZm9vMSIsICJqUXVlcnkucmVtb3Zl
RGF0YSBmb3IgaW50ZXJuYWwgZGF0YSBkb2VzIG5vdCByZW1vdmUgdXNlciBkYXRhIiApOworCisJ
aWYgKGVsZW0ubm9kZVR5cGUpIHsKKwkJdmFyIG9sZENhY2hlTGVuZ3RoID0gZ2V0Q2FjaGVMZW5n
dGgoKTsKKwkJalF1ZXJ5LnJlbW92ZURhdGEoZWxlbSwgImZvbyIpOworCisJCWVxdWFscyggZ2V0
Q2FjaGVMZW5ndGgoKSwgb2xkQ2FjaGVMZW5ndGggLSAxLCAiUmVtb3ZpbmcgdGhlIGxhc3QgaXRl
bSBpbiB0aGUgZGF0YSBvYmplY3QgZGVzdHJveXMgaXQiICk7CisJfQorCWVsc2UgeworCQlqUXVl
cnkucmVtb3ZlRGF0YShlbGVtLCAiZm9vIik7CisJCXZhciBleHBlY3RlZCwgYWN0dWFsOworCisJ
CWlmIChqUXVlcnkuc3VwcG9ydC5kZWxldGVFeHBhbmRvKSB7CisJCQlleHBlY3RlZCA9IGZhbHNl
OworCQkJYWN0dWFsID0galF1ZXJ5LmV4cGFuZG8gaW4gZWxlbTsKKwkJfQorCQllbHNlIHsKKwkJ
CWV4cGVjdGVkID0gbnVsbDsKKwkJCWFjdHVhbCA9IGVsZW1bIGpRdWVyeS5leHBhbmRvIF07CisJ
CX0KKworCQllcXVhbHMoIGFjdHVhbCwgZXhwZWN0ZWQsICJSZW1vdmluZyB0aGUgbGFzdCBpdGVt
IGluIHRoZSBkYXRhIG9iamVjdCBkZXN0cm95cyBpdCIgKTsKKwl9CisKKwlqUXVlcnkuZGF0YShl
bGVtLCAiZm9vIiwgImZvbzEiKTsKKwlqUXVlcnkuX2RhdGEoZWxlbSwgImZvbyIsICJmb28yIik7
CisKKwllcXVhbHMoIGpRdWVyeS5kYXRhKGVsZW0sICJmb28iKSwgImZvbzEiLCAiKHNhbml0eSBj
aGVjaykgRW5zdXJlIGRhdGEgaXMgc2V0IGluIHVzZXIgZGF0YSBvYmplY3QiICk7CisJZXF1YWxz
KCBqUXVlcnkuX2RhdGEoZWxlbSwgImZvbyIpLCAiZm9vMiIsICIoc2FuaXR5IGNoZWNrKSBFbnN1
cmUgZGF0YSBpcyBzZXQgaW4gaW50ZXJuYWwgZGF0YSBvYmplY3QiICk7CisKKwlqUXVlcnkucmVt
b3ZlRGF0YShlbGVtLCAiZm9vIiwgdHJ1ZSk7CisKKwlzdHJpY3RFcXVhbCggalF1ZXJ5LmRhdGEo
ZWxlbSwgalF1ZXJ5LmV4cGFuZG8pLCB1bmRlZmluZWQsICJSZW1vdmluZyB0aGUgbGFzdCBpdGVt
IGluIGludGVybmFsIGRhdGEgZGVzdHJveXMgdGhlIGludGVybmFsIGRhdGEgb2JqZWN0IiApOwor
CisJalF1ZXJ5Ll9kYXRhKGVsZW0sICJmb28iLCAiZm9vMiIpOworCWVxdWFscyggalF1ZXJ5Ll9k
YXRhKGVsZW0sICJmb28iKSwgImZvbzIiLCAiKHNhbml0eSBjaGVjaykgRW5zdXJlIGRhdGEgaXMg
c2V0IGluIGludGVybmFsIGRhdGEgb2JqZWN0IiApOworCisJalF1ZXJ5LnJlbW92ZURhdGEoZWxl
bSwgImZvbyIpOworCWVxdWFscyggalF1ZXJ5Ll9kYXRhKGVsZW0sICJmb28iKSwgImZvbzIiLCAi
KHNhbml0eSBjaGVjaykgalF1ZXJ5LnJlbW92ZURhdGEgZm9yIHVzZXIgZGF0YSBkb2VzIG5vdCBy
ZW1vdmUgaW50ZXJuYWwgZGF0YSIgKTsKKworCWlmIChlbGVtLm5vZGVUeXBlKSB7CisJCW9sZENh
Y2hlTGVuZ3RoID0gZ2V0Q2FjaGVMZW5ndGgoKTsKKwkJalF1ZXJ5LnJlbW92ZURhdGEoZWxlbSwg
ImZvbyIsIHRydWUpOworCQllcXVhbHMoIGdldENhY2hlTGVuZ3RoKCksIG9sZENhY2hlTGVuZ3Ro
IC0gMSwgIlJlbW92aW5nIHRoZSBsYXN0IGl0ZW0gaW4gdGhlIGludGVybmFsIGRhdGEgb2JqZWN0
IGFsc28gZGVzdHJveXMgdGhlIHVzZXIgZGF0YSBvYmplY3Qgd2hlbiBpdCBpcyBlbXB0eSIgKTsK
Kwl9CisJZWxzZSB7CisJCWpRdWVyeS5yZW1vdmVEYXRhKGVsZW0sICJmb28iLCB0cnVlKTsKKwor
CQlpZiAoalF1ZXJ5LnN1cHBvcnQuZGVsZXRlRXhwYW5kbykgeworCQkJZXhwZWN0ZWQgPSBmYWxz
ZTsKKwkJCWFjdHVhbCA9IGpRdWVyeS5leHBhbmRvIGluIGVsZW07CisJCX0KKwkJZWxzZSB7CisJ
CQlleHBlY3RlZCA9IG51bGw7CisJCQlhY3R1YWwgPSBlbGVtWyBqUXVlcnkuZXhwYW5kbyBdOwor
CQl9CisKKwkJZXF1YWxzKCBhY3R1YWwsIGV4cGVjdGVkLCAiUmVtb3ZpbmcgdGhlIGxhc3QgaXRl
bSBpbiB0aGUgaW50ZXJuYWwgZGF0YSBvYmplY3QgYWxzbyBkZXN0cm95cyB0aGUgdXNlciBkYXRh
IG9iamVjdCB3aGVuIGl0IGlzIGVtcHR5IiApOworCX0KK30KKwordGVzdCgialF1ZXJ5LmRhdGEi
LCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMTI4KTsKKworCXZhciBkaXYgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJkaXYiKTsKKworCWRhdGFUZXN0cyhkaXYpOworCWRhdGFUZXN0cyh7fSk7CisK
KwkvLyByZW1vdmUgYm91bmQgaGFuZGxlcnMgZnJvbSB3aW5kb3cgb2JqZWN0IHRvIHN0b3AgcG90
ZW50aWFsIGZhbHNlIHBvc2l0aXZlcyBjYXVzZWQgYnkgZml4IGZvciAjNTI4MCBpbgorCS8vIHRy
YW5zcG9ydHMveGhyLmpzCisJalF1ZXJ5KHdpbmRvdykudW5iaW5kKCJ1bmxvYWQiKTsKKworCWRh
dGFUZXN0cyh3aW5kb3cpOworCWRhdGFUZXN0cyhkb2N1bWVudCk7CisKKwkvLyBjbGVhbiB1cCB1
bmF0dGFjaGVkIGVsZW1lbnQKKwlqUXVlcnkoZGl2KS5yZW1vdmUoKTsKK30pOworCit0ZXN0KCJq
UXVlcnkuYWNjZXB0RGF0YSIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCg3KTsKKworCW9rKCBqUXVl
cnkuYWNjZXB0RGF0YSggZG9jdW1lbnQgKSwgImRvY3VtZW50IiApOworCW9rKCBqUXVlcnkuYWNj
ZXB0RGF0YSggZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICksICJkb2N1bWVudEVsZW1lbnQiICk7
CisJb2soIGpRdWVyeS5hY2NlcHREYXRhKCB7fSApLCAib2JqZWN0IiApOworCW9rKCAhalF1ZXJ5
LmFjY2VwdERhdGEoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImVtYmVkIikgKSwgImVtYmVkIiAp
OworCW9rKCAhalF1ZXJ5LmFjY2VwdERhdGEoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImFwcGxl
dCIpICksICJhcHBsZXQiICk7CisKKwl2YXIgZmxhc2ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJvYmplY3QiKTsKKwlmbGFzaC5zZXRBdHRyaWJ1dGUoImNsYXNzaWQiLCAiY2xzaWQ6RDI3Q0RC
NkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIik7CisJb2soIGpRdWVyeS5hY2NlcHREYXRh
KCBmbGFzaCApLCAiZmxhc2giICk7CisKKwl2YXIgYXBwbGV0ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgib2JqZWN0Iik7CisJYXBwbGV0LnNldEF0dHJpYnV0ZSgiY2xhc3NpZCIsICJjbHNpZDo4
QUQ5Qzg0MC0wNDRFLTExRDEtQjNFOS0wMDgwNUY0OTlEOTMiKTsKKwlvayggIWpRdWVyeS5hY2Nl
cHREYXRhKCBhcHBsZXQgKSwgImFwcGxldCIgKTsKK30pOworCit0ZXN0KCIuZGF0YSgpIiwgZnVu
Y3Rpb24oKSB7CisJZXhwZWN0KDUpOworCisJdmFyIGRpdiA9IGpRdWVyeSgiI2ZvbyIpOworCXN0
cmljdEVxdWFsKCBkaXYuZGF0YSgiZm9vIiksIHVuZGVmaW5lZCwgIk1ha2Ugc3VyZSB0aGF0IG1p
c3NpbmcgcmVzdWx0IGlzIHVuZGVmaW5lZCIgKTsKKwlkaXYuZGF0YSgidGVzdCIsICJzdWNjZXNz
Iik7CisKKwl2YXIgZGF0YU9iaiA9IGRpdi5kYXRhKCk7CisKKwkvLyBUT0RPOiBSZW1vdmUgdGhp
cyBoYWNrIHdoaWNoIHdhcyBpbnRyb2R1Y2VkIGluIDEuNS4xCisJZGVsZXRlIGRhdGFPYmoudG9K
U09OOworCisJc2FtZSggZGF0YU9iaiwge3Rlc3Q6ICJzdWNjZXNzIn0sICJkYXRhKCkgZ2V0IHRo
ZSBlbnRpcmUgZGF0YSBvYmplY3QiICk7CisJc3RyaWN0RXF1YWwoIGRpdi5kYXRhKCJmb28iKSwg
dW5kZWZpbmVkLCAiTWFrZSBzdXJlIHRoYXQgbWlzc2luZyByZXN1bHQgaXMgc3RpbGwgdW5kZWZp
bmVkIiApOworCisJdmFyIG5vZGl2ID0galF1ZXJ5KCIjdW5mb3VuZCIpOworCWVxdWFscyggbm9k
aXYuZGF0YSgpLCBudWxsLCAiZGF0YSgpIG9uIGVtcHR5IHNldCByZXR1cm5zIG51bGwiICk7CisK
Kwl2YXIgb2JqID0geyBmb286ICJiYXIiIH07CisJalF1ZXJ5KG9iaikuZGF0YSgiZm9vIiwgImJh
eiIpOworCisJZGF0YU9iaiA9IGpRdWVyeS5leHRlbmQodHJ1ZSwge30sIGpRdWVyeShvYmopLmRh
dGEoKSk7CisKKwkvLyBUT0RPOiBSZW1vdmUgdGhpcyBoYWNrIHdoaWNoIHdhcyBpbnRyb2R1Y2Vk
IGZvciAxLjUuMQorCWRlbGV0ZSBkYXRhT2JqLnRvSlNPTjsKKworCWRlZXBFcXVhbCggZGF0YU9i
aiwgeyBmb286ICJiYXoiIH0sICJSZXRyaWV2ZSBkYXRhIG9iamVjdCBmcm9tIGEgd3JhcHBlZCBK
UyBvYmplY3QgKCM3NTI0KSIgKTsKK30pOworCit0ZXN0KCIuZGF0YShTdHJpbmcpIGFuZCAuZGF0
YShTdHJpbmcsIE9iamVjdCkiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMjkpOworCXZhciBwYXJl
bnQgPSBqUXVlcnkoIjxkaXY+PGRpdj48L2Rpdj48L2Rpdj4iKSwKKwkJZGl2ID0gcGFyZW50LmNo
aWxkcmVuKCk7CisKKwlwYXJlbnQKKwkJLmJpbmQoImdldERhdGEiLCBmdW5jdGlvbigpeyBvaygg
ZmFsc2UsICJnZXREYXRhIGJ1YmJsZWQuIiApIH0pCisJCS5iaW5kKCJzZXREYXRhIiwgZnVuY3Rp
b24oKXsgb2soIGZhbHNlLCAic2V0RGF0YSBidWJibGVkLiIgKSB9KQorCQkuYmluZCgiY2hhbmdl
RGF0YSIsIGZ1bmN0aW9uKCl7IG9rKCBmYWxzZSwgImNoYW5nZURhdGEgYnViYmxlZC4iICkgfSk7
CisKKwlvayggZGl2LmRhdGEoInRlc3QiKSA9PT0gdW5kZWZpbmVkLCAiQ2hlY2sgZm9yIG5vIGRh
dGEgZXhpc3RzIiApOworCisJZGl2LmRhdGEoInRlc3QiLCAic3VjY2VzcyIpOworCWVxdWFscygg
ZGl2LmRhdGEoInRlc3QiKSwgInN1Y2Nlc3MiLCAiQ2hlY2sgZm9yIGFkZGVkIGRhdGEiICk7CisK
KwlkaXYuZGF0YSgidGVzdCIsICJvdmVyd3JpdHRlbiIpOworCWVxdWFscyggZGl2LmRhdGEoInRl
c3QiKSwgIm92ZXJ3cml0dGVuIiwgIkNoZWNrIGZvciBvdmVyd3JpdHRlbiBkYXRhIiApOworCisJ
ZGl2LmRhdGEoInRlc3QiLCB1bmRlZmluZWQpOworCWVxdWFscyggZGl2LmRhdGEoInRlc3QiKSwg
Im92ZXJ3cml0dGVuIiwgIkNoZWNrIHRoYXQgZGF0YSB3YXNuJ3QgcmVtb3ZlZCIpOworCisJZGl2
LmRhdGEoInRlc3QiLCBudWxsKTsKKwlvayggZGl2LmRhdGEoInRlc3QiKSA9PT0gbnVsbCwgIkNo
ZWNrIGZvciBudWxsIGRhdGEiKTsKKworCW9rKCBkaXYuZGF0YSgibm90ZXhpc3QiKSA9PT0gdW5k
ZWZpbmVkLCAiQ2hlY2sgZm9yIG5vIGRhdGEgZXhpc3RzIiApOworCisJZGl2LmRhdGEoInRlc3Qi
LCAib3ZlcndyaXR0ZW4iKTsKKwl2YXIgaGl0cyA9IHt0ZXN0OjB9LCBnZXRzID0ge3Rlc3Q6MH0s
IGNoYW5nZXMgPSB7dGVzdDowLCB2YWx1ZTpudWxsfTsKKworCisJZnVuY3Rpb24gbG9nQ2hhbmdl
RGF0YShlLGtleSx2YWx1ZSkgeworCQl2YXIgZGF0YUtleSA9IGtleTsKKwkJaWYgKCBlLm5hbWVz
cGFjZSApIHsKKwkJCWRhdGFLZXkgPSBkYXRhS2V5ICsgIi4iICsgZS5uYW1lc3BhY2U7CisJCX0K
KwkJY2hhbmdlc1trZXldICs9IHZhbHVlOworCQljaGFuZ2VzLnZhbHVlID0galF1ZXJ5LmRhdGEo
ZS50YXJnZXQsIGRhdGFLZXkpOworCX0KKworCWRpdgorCQkuYmluZCgic2V0RGF0YSIsZnVuY3Rp
b24oZSxrZXksdmFsdWUpeyBoaXRzW2tleV0gKz0gdmFsdWU7IH0pCisJCS5iaW5kKCJzZXREYXRh
LmZvbyIsZnVuY3Rpb24oZSxrZXksdmFsdWUpeyBoaXRzW2tleV0gKz0gdmFsdWU7IH0pCisJCS5i
aW5kKCJjaGFuZ2VEYXRhIixsb2dDaGFuZ2VEYXRhKQorCQkuYmluZCgiY2hhbmdlRGF0YS5mb28i
LGxvZ0NoYW5nZURhdGEpCisJCS5iaW5kKCJnZXREYXRhIixmdW5jdGlvbihlLGtleSl7IGdldHNb
a2V5XSArPSAxOyB9KQorCQkuYmluZCgiZ2V0RGF0YS5mb28iLGZ1bmN0aW9uKGUsa2V5KXsgZ2V0
c1trZXldICs9IDM7IH0pOworCisJZGl2LmRhdGEoInRlc3QuZm9vIiwgMik7CisJZXF1YWxzKCBk
aXYuZGF0YSgidGVzdCIpLCAib3ZlcndyaXR0ZW4iLCAiQ2hlY2sgZm9yIG9yaWdpbmFsIGRhdGEi
ICk7CisJZXF1YWxzKCBkaXYuZGF0YSgidGVzdC5mb28iKSwgMiwgIkNoZWNrIGZvciBuYW1lc3Bh
Y2VkIGRhdGEiICk7CisJZXF1YWxzKCBkaXYuZGF0YSgidGVzdC5iYXIiKSwgIm92ZXJ3cml0dGVu
IiwgIkNoZWNrIGZvciB1bm1hdGNoZWQgbmFtZXNwYWNlIiApOworCWVxdWFscyggaGl0cy50ZXN0
LCAyLCAiQ2hlY2sgdHJpZ2dlcmVkIHNldHRlciBmdW5jdGlvbnMiICk7CisJZXF1YWxzKCBnZXRz
LnRlc3QsIDUsICJDaGVjayB0cmlnZ2VyZWQgZ2V0dGVyIGZ1bmN0aW9ucyIgKTsKKwllcXVhbHMo
IGNoYW5nZXMudGVzdCwgMiwgIkNoZWNrIHNldHMgcmFpc2UgY2hhbmdlRGF0YSIpOworCWVxdWFs
cyggY2hhbmdlcy52YWx1ZSwgMiwgIkNoZWNrIGNoYW5nZURhdGEgYWZ0ZXIgZGF0YSBoYXMgYmVl
biBzZXQiICk7CisKKwloaXRzLnRlc3QgPSAwOworCWdldHMudGVzdCA9IDA7CisJY2hhbmdlcy50
ZXN0ID0gMDsKKwljaGFuZ2VzLnZhbHVlID0gbnVsbDsKKworCWRpdi5kYXRhKCJ0ZXN0IiwgMSk7
CisJZXF1YWxzKCBkaXYuZGF0YSgidGVzdCIpLCAxLCAiQ2hlY2sgZm9yIG9yaWdpbmFsIGRhdGEi
ICk7CisJZXF1YWxzKCBkaXYuZGF0YSgidGVzdC5mb28iKSwgMiwgIkNoZWNrIGZvciBuYW1lc3Bh
Y2VkIGRhdGEiICk7CisJZXF1YWxzKCBkaXYuZGF0YSgidGVzdC5iYXIiKSwgMSwgIkNoZWNrIGZv
ciB1bm1hdGNoZWQgbmFtZXNwYWNlIiApOworCWVxdWFscyggaGl0cy50ZXN0LCAxLCAiQ2hlY2sg
dHJpZ2dlcmVkIHNldHRlciBmdW5jdGlvbnMiICk7CisJZXF1YWxzKCBnZXRzLnRlc3QsIDUsICJD
aGVjayB0cmlnZ2VyZWQgZ2V0dGVyIGZ1bmN0aW9ucyIgKTsKKwllcXVhbHMoIGNoYW5nZXMudGVz
dCwgMSwgIkNoZWNrIHNldHMgcmFpc2UgY2hhbmdlRGF0YSIgKTsKKwllcXVhbHMoIGNoYW5nZXMu
dmFsdWUsIDEsICJDaGVjayBjaGFuZ2VEYXRhIGFmdGVyIGRhdGEgaGFzIGJlZW4gc2V0IiApOwor
CisJZGl2CisJCS5iaW5kKCJnZXREYXRhIixmdW5jdGlvbihlLGtleSl7IHJldHVybiBrZXkgKyAi
cm9vdCI7IH0pCisJCS5iaW5kKCJnZXREYXRhLmZvbyIsZnVuY3Rpb24oZSxrZXkpeyByZXR1cm4g
a2V5ICsgImZvbyI7IH0pOworCisJZXF1YWxzKCBkaXYuZGF0YSgidGVzdCIpLCAidGVzdHJvb3Qi
LCAiQ2hlY2sgZm9yIG9yaWdpbmFsIGRhdGEiICk7CisJZXF1YWxzKCBkaXYuZGF0YSgidGVzdC5m
b28iKSwgInRlc3Rmb28iLCAiQ2hlY2sgZm9yIG5hbWVzcGFjZWQgZGF0YSIgKTsKKwllcXVhbHMo
IGRpdi5kYXRhKCJ0ZXN0LmJhciIpLCAidGVzdHJvb3QiLCAiQ2hlY2sgZm9yIHVubWF0Y2hlZCBu
YW1lc3BhY2UiICk7CisKKwkvLyAjMzc0OAorCXZhciAkZWxlbSA9IGpRdWVyeSh7ZXhpc3RzOnRy
dWV9KTsKKwllcXVhbHMoICRlbGVtLmRhdGEoJ25vdGhpbmcnKSwgdW5kZWZpbmVkLCAiTm9uLWV4
aXN0ZW50IGRhdGEgcmV0dXJucyB1bmRlZmluZWQiKTsKKwllcXVhbHMoICRlbGVtLmRhdGEoJ251
bGwnLG51bGwpLmRhdGEoJ251bGwnKSwgbnVsbCwgIm51bGwncyBhcmUgcHJlc2VydmVkIik7CisJ
ZXF1YWxzKCAkZWxlbS5kYXRhKCdlbXB0eVN0cmluZycsJycpLmRhdGEoJ2VtcHR5U3RyaW5nJyks
ICcnLCAiRW1wdHkgc3RyaW5ncyBhcmUgcHJlc2VydmVkIik7CisJZXF1YWxzKCAkZWxlbS5kYXRh
KCdmYWxzZScsZmFsc2UpLmRhdGEoJ2ZhbHNlJyksIGZhbHNlLCAiZmFsc2UncyBhcmUgcHJlc2Vy
dmVkIik7CisJZXF1YWxzKCAkZWxlbS5kYXRhKCdleGlzdHMnKSwgdW5kZWZpbmVkLCAiRXhpc3Rp
bmcgZGF0YSBpcyBub3QgcmV0dXJuZWQiICk7CisKKwkvLyBDbGVhbiB1cAorCSRlbGVtLnJlbW92
ZURhdGEoKTsKKwlkZWVwRXF1YWwoICRlbGVtWzBdLCB7ZXhpc3RzOnRydWV9LCAicmVtb3ZlRGF0
YSBkb2VzIG5vdCBjbGVhciB0aGUgb2JqZWN0IiApOworCisJLy8gbWFudWFsbHkgY2xlYW4gdXAg
ZGV0YWNoZWQgZWxlbWVudHMKKwlwYXJlbnQucmVtb3ZlKCk7Cit9KTsKKwordGVzdCgiZGF0YS0q
IGF0dHJpYnV0ZXMiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMzcpOworCXZhciBkaXYgPSBqUXVl
cnkoIjxkaXY+IiksCisJCWNoaWxkID0galF1ZXJ5KCI8ZGl2IGRhdGEtbXlvYmo9J29sZCBkYXRh
JyBkYXRhLWlnbm9yZWQ9XCJET01cIiBkYXRhLW90aGVyPSd0ZXN0Jz48L2Rpdj4iKSwKKwkJZHVt
bXkgPSBqUXVlcnkoIjxkaXYgZGF0YS1teW9iaj0nb2xkIGRhdGEnIGRhdGEtaWdub3JlZD1cIkRP
TVwiIGRhdGEtb3RoZXI9J3Rlc3QnPjwvZGl2PiIpOworCisJZXF1YWxzKCBkaXYuZGF0YSgiYXR0
ciIpLCB1bmRlZmluZWQsICJDaGVjayBmb3Igbm9uLWV4aXN0aW5nIGRhdGEtYXR0ciBhdHRyaWJ1
dGUiICk7CisKKwlkaXYuYXR0cigiZGF0YS1hdHRyIiwgImV4aXN0cyIpOworCWVxdWFscyggZGl2
LmRhdGEoImF0dHIiKSwgImV4aXN0cyIsICJDaGVjayBmb3IgZXhpc3RpbmcgZGF0YS1hdHRyIGF0
dHJpYnV0ZSIgKTsKKworCWRpdi5hdHRyKCJkYXRhLWF0dHIiLCAiZXhpc3RzMiIpOworCWVxdWFs
cyggZGl2LmRhdGEoImF0dHIiKSwgImV4aXN0cyIsICJDaGVjayB0aGF0IHVwZGF0ZXMgdG8gZGF0
YS0gZG9uJ3QgdXBkYXRlIC5kYXRhKCkiICk7CisKKwlkaXYuZGF0YSgiYXR0ciIsICJpbnRlcm5h
bCIpLmF0dHIoImRhdGEtYXR0ciIsICJleHRlcm5hbCIpOworCWVxdWFscyggZGl2LmRhdGEoImF0
dHIiKSwgImludGVybmFsIiwgIkNoZWNrIGZvciAuZGF0YSgnYXR0cicpIHByZWNlZGVuY2UgKGlu
dGVybmFsID4gZXh0ZXJuYWwgZGF0YS0qIGF0dHJpYnV0ZSkiICk7CisKKwlkaXYucmVtb3ZlKCk7
CisKKwljaGlsZC5hcHBlbmRUbygnI21haW4nKTsKKwllcXVhbHMoIGNoaWxkLmRhdGEoIm15b2Jq
IiksICJvbGQgZGF0YSIsICJWYWx1ZSBhY2Nlc3NlZCBmcm9tIGRhdGEtKiBhdHRyaWJ1dGUiKTsK
KworCWNoaWxkLmRhdGEoIm15b2JqIiwgInJlcGxhY2VkIik7CisJZXF1YWxzKCBjaGlsZC5kYXRh
KCJteW9iaiIpLCAicmVwbGFjZWQiLCAiT3JpZ2luYWwgZGF0YSBvdmVyd3JpdHRlbiIpOworCisJ
Y2hpbGQuZGF0YSgiaWdub3JlZCIsICJjYWNoZSIpOworCWVxdWFscyggY2hpbGQuZGF0YSgiaWdu
b3JlZCIpLCAiY2FjaGUiLCAiQ2FjaGVkIGRhdGEgdXNlZCBiZWZvcmUgRE9NIGRhdGEtKiBmYWxs
YmFjayIpOworCisJdmFyIG9iaiA9IGNoaWxkLmRhdGEoKSwgb2JqMiA9IGR1bW15LmRhdGEoKSwg
Y2hlY2sgPSBbICJteW9iaiIsICJpZ25vcmVkIiwgIm90aGVyIiBdLCBudW0gPSAwLCBudW0yID0g
MDsKKworCWR1bW15LnJlbW92ZSgpOworCisJZm9yICggdmFyIGkgPSAwLCBsID0gY2hlY2subGVu
Z3RoOyBpIDwgbDsgaSsrICkgeworCQlvayggb2JqWyBjaGVja1tpXSBdLCAiTWFrZSBzdXJlIGRh
dGEtIHByb3BlcnR5IGV4aXN0cyB3aGVuIGNhbGxpbmcgZGF0YS0uIiApOworCQlvayggb2JqMlsg
Y2hlY2tbaV0gXSwgIk1ha2Ugc3VyZSBkYXRhLSBwcm9wZXJ0eSBleGlzdHMgd2hlbiBjYWxsaW5n
IGRhdGEtLiIgKTsKKwl9CisKKwlmb3IgKCB2YXIgcHJvcCBpbiBvYmogKSB7CisJCW51bSsrOwor
CX0KKworCWVxdWFscyggbnVtLCBjaGVjay5sZW5ndGgsICJNYWtlIHN1cmUgdGhhdCB0aGUgcmln
aHQgbnVtYmVyIG9mIHByb3BlcnRpZXMgY2FtZSB0aHJvdWdoLiIgKTsKKworCWZvciAoIHZhciBw
cm9wIGluIG9iajIgKSB7CisJCW51bTIrKzsKKwl9CisKKwllcXVhbHMoIG51bTIsIGNoZWNrLmxl
bmd0aCwgIk1ha2Ugc3VyZSB0aGF0IHRoZSByaWdodCBudW1iZXIgb2YgcHJvcGVydGllcyBjYW1l
IHRocm91Z2guIiApOworCisJY2hpbGQuYXR0cigiZGF0YS1vdGhlciIsICJuZXd2YWx1ZSIpOwor
CisJZXF1YWxzKCBjaGlsZC5kYXRhKCJvdGhlciIpLCAidGVzdCIsICJNYWtlIHN1cmUgdmFsdWUg
d2FzIHB1bGxlZCBpbiBwcm9wZXJseSBmcm9tIGEgLmRhdGEoKS4iICk7CisKKwljaGlsZAorCQku
YXR0cigiZGF0YS10cnVlIiwgInRydWUiKQorCQkuYXR0cigiZGF0YS1mYWxzZSIsICJmYWxzZSIp
CisJCS5hdHRyKCJkYXRhLWZpdmUiLCAiNSIpCisJCS5hdHRyKCJkYXRhLXBvaW50IiwgIjUuNSIp
CisJCS5hdHRyKCJkYXRhLXBvaW50ZSIsICI1LjVFMyIpCisJCS5hdHRyKCJkYXRhLXBvaW50YmFk
IiwgIjUuLjUiKQorCQkuYXR0cigiZGF0YS1wb2ludGJhZDIiLCAiLS4iKQorCQkuYXR0cigiZGF0
YS1iYWRqc29uIiwgInsxMjN9IikKKwkJLmF0dHIoImRhdGEtYmFkanNvbjIiLCAiW2FiY10iKQor
CQkuYXR0cigiZGF0YS1lbXB0eSIsICIiKQorCQkuYXR0cigiZGF0YS1zcGFjZSIsICIgIikKKwkJ
LmF0dHIoImRhdGEtbnVsbCIsICJudWxsIikKKwkJLmF0dHIoImRhdGEtc3RyaW5nIiwgInRlc3Qi
KTsKKworCXN0cmljdEVxdWFsKCBjaGlsZC5kYXRhKCd0cnVlJyksIHRydWUsICJQcmltaXRpdmUg
dHJ1ZSByZWFkIGZyb20gYXR0cmlidXRlIik7CisJc3RyaWN0RXF1YWwoIGNoaWxkLmRhdGEoJ2Zh
bHNlJyksIGZhbHNlLCAiUHJpbWl0aXZlIGZhbHNlIHJlYWQgZnJvbSBhdHRyaWJ1dGUiKTsKKwlz
dHJpY3RFcXVhbCggY2hpbGQuZGF0YSgnZml2ZScpLCA1LCAiUHJpbWl0aXZlIG51bWJlciByZWFk
IGZyb20gYXR0cmlidXRlIik7CisJc3RyaWN0RXF1YWwoIGNoaWxkLmRhdGEoJ3BvaW50JyksIDUu
NSwgIlByaW1pdGl2ZSBudW1iZXIgcmVhZCBmcm9tIGF0dHJpYnV0ZSIpOworCXN0cmljdEVxdWFs
KCBjaGlsZC5kYXRhKCdwb2ludGUnKSwgNTUwMCwgIlByaW1pdGl2ZSBudW1iZXIgcmVhZCBmcm9t
IGF0dHJpYnV0ZSIpOworCXN0cmljdEVxdWFsKCBjaGlsZC5kYXRhKCdwb2ludGJhZCcpLCAiNS4u
NSIsICJCYWQgbnVtYmVyIHJlYWQgZnJvbSBhdHRyaWJ1dGUiKTsKKwlzdHJpY3RFcXVhbCggY2hp
bGQuZGF0YSgncG9pbnRiYWQyJyksICItLiIsICJCYWQgbnVtYmVyIHJlYWQgZnJvbSBhdHRyaWJ1
dGUiKTsKKwlzdHJpY3RFcXVhbCggY2hpbGQuZGF0YSgnYmFkanNvbicpLCAiezEyM30iLCAiQmFk
IG51bWJlciByZWFkIGZyb20gYXR0cmlidXRlIik7CisJc3RyaWN0RXF1YWwoIGNoaWxkLmRhdGEo
J2JhZGpzb24yJyksICJbYWJjXSIsICJCYWQgbnVtYmVyIHJlYWQgZnJvbSBhdHRyaWJ1dGUiKTsK
KwlzdHJpY3RFcXVhbCggY2hpbGQuZGF0YSgnZW1wdHknKSwgIiIsICJFbXB0eSBzdHJpbmcgcmVh
ZCBmcm9tIGF0dHJpYnV0ZSIpOworCXN0cmljdEVxdWFsKCBjaGlsZC5kYXRhKCdzcGFjZScpLCAi
ICIsICJFbXB0eSBzdHJpbmcgcmVhZCBmcm9tIGF0dHJpYnV0ZSIpOworCXN0cmljdEVxdWFsKCBj
aGlsZC5kYXRhKCdudWxsJyksIG51bGwsICJQcmltaXRpdmUgbnVsbCByZWFkIGZyb20gYXR0cmli
dXRlIik7CisJc3RyaWN0RXF1YWwoIGNoaWxkLmRhdGEoJ3N0cmluZycpLCAidGVzdCIsICJUeXBp
Y2FsIHN0cmluZyByZWFkIGZyb20gYXR0cmlidXRlIik7CisKKwljaGlsZC5yZW1vdmUoKTsKKwor
CS8vIHRlc3RzIGZyb20gbWV0YWRhdGEgcGx1Z2luCisJZnVuY3Rpb24gdGVzdERhdGEoaW5kZXgs
IGVsZW0pIHsKKwkJc3dpdGNoIChpbmRleCkgeworCQljYXNlIDA6CisJCQllcXVhbHMoalF1ZXJ5
KGVsZW0pLmRhdGEoImZvbyIpLCAiYmFyIiwgIkNoZWNrIGZvbyBwcm9wZXJ0eSIpOworCQkJZXF1
YWxzKGpRdWVyeShlbGVtKS5kYXRhKCJiYXIiKSwgImJheiIsICJDaGVjayBiYXogcHJvcGVydHki
KTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQllcXVhbHMoalF1ZXJ5KGVsZW0pLmRhdGEoInRl
c3QiKSwgImJhciIsICJDaGVjayB0ZXN0IHByb3BlcnR5Iik7CisJCQllcXVhbHMoalF1ZXJ5KGVs
ZW0pLmRhdGEoImJhciIpLCAiYmF6IiwgIkNoZWNrIGJhciBwcm9wZXJ0eSIpOworCQkJYnJlYWs7
CisJCWNhc2UgMjoKKwkJCWVxdWFscyhqUXVlcnkoZWxlbSkuZGF0YSgiem9vb28iKSwgImJhciIs
ICJDaGVjayB6b29vbyBwcm9wZXJ0eSIpOworCQkJc2FtZShqUXVlcnkoZWxlbSkuZGF0YSgiYmFy
IiksIHsidGVzdCI6ImJheiJ9LCAiQ2hlY2sgYmFyIHByb3BlcnR5Iik7CisJCQlicmVhazsKKwkJ
Y2FzZSAzOgorCQkJZXF1YWxzKGpRdWVyeShlbGVtKS5kYXRhKCJudW1iZXIiKSwgdHJ1ZSwgIkNo
ZWNrIG51bWJlciBwcm9wZXJ0eSIpOworCQkJc2FtZShqUXVlcnkoZWxlbSkuZGF0YSgic3R1ZmYi
KSwgWzIsOF0sICJDaGVjayBzdHVmZiBwcm9wZXJ0eSIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6
CisJCQlvayhmYWxzZSwgWyJBc3NlcnRpb24gZmFpbGVkIG9uIGluZGV4ICIsIGluZGV4LCAiLCB3
aXRoIGRhdGEgIiwgZGF0YV0uam9pbignJykpOworCQl9CisJfQorCisJdmFyIG1ldGFkYXRhID0g
JzxvbD48bGkgY2xhc3M9InRlc3QgdGVzdDIiIGRhdGEtZm9vPSJiYXIiIGRhdGEtYmFyPSJiYXoi
IGRhdGEtYXJyPSJbMSwyXSI+U29tZSBzdHVmZjwvbGk+PGxpIGNsYXNzPSJ0ZXN0IHRlc3QyIiBk
YXRhLXRlc3Q9ImJhciIgZGF0YS1iYXI9ImJheiI+U29tZSBzdHVmZjwvbGk+PGxpIGNsYXNzPSJ0
ZXN0IHRlc3QyIiBkYXRhLXpvb29vPSJiYXIiIGRhdGEtYmFyPVwneyJ0ZXN0IjoiYmF6In1cJz5T
b21lIHN0dWZmPC9saT48bGkgY2xhc3M9InRlc3QgdGVzdDIiIGRhdGEtbnVtYmVyPXRydWUgZGF0
YS1zdHVmZj0iWzIsOF0iPlNvbWUgc3R1ZmY8L2xpPjwvb2w+JywKKwkJZWxlbSA9IGpRdWVyeSht
ZXRhZGF0YSkuYXBwZW5kVG8oJyNtYWluJyk7CisKKwllbGVtLmZpbmQoImxpIikuZWFjaCh0ZXN0
RGF0YSk7CisJZWxlbS5yZW1vdmUoKTsKK30pOworCit0ZXN0KCIuZGF0YShPYmplY3QpIiwgZnVu
Y3Rpb24oKSB7CisJZXhwZWN0KDQpOworCisJdmFyIGRpdiA9IGpRdWVyeSgiPGRpdi8+Iik7CisK
KwlkaXYuZGF0YSh7ICJ0ZXN0IjogImluIiwgInRlc3QyIjogImluMiIgfSk7CisJZXF1YWxzKCBk
aXYuZGF0YSgidGVzdCIpLCAiaW4iLCAiVmVyaWZ5IHNldHRpbmcgYW4gb2JqZWN0IGluIGRhdGEi
ICk7CisJZXF1YWxzKCBkaXYuZGF0YSgidGVzdDIiKSwgImluMiIsICJWZXJpZnkgc2V0dGluZyBh
biBvYmplY3QgaW4gZGF0YSIgKTsKKworCXZhciBvYmogPSB7dGVzdDoidW5zZXQifSwKKwkJanFv
YmogPSBqUXVlcnkob2JqKTsKKwlqcW9iai5kYXRhKCJ0ZXN0IiwgInVuc2V0Iik7CisJanFvYmou
ZGF0YSh7ICJ0ZXN0IjogImluIiwgInRlc3QyIjogImluMiIgfSk7CisJZXF1YWxzKCBqUXVlcnku
ZGF0YShvYmopLnRlc3QsICJpbiIsICJWZXJpZnkgc2V0dGluZyBhbiBvYmplY3Qgb24gYW4gb2Jq
ZWN0IGV4dGVuZHMgdGhlIGRhdGEgb2JqZWN0IiApOworCWVxdWFscyggb2JqLnRlc3QyLCB1bmRl
ZmluZWQsICJWZXJpZnkgc2V0dGluZyBhbiBvYmplY3Qgb24gYW4gb2JqZWN0IGRvZXMgbm90IGV4
dGVuZCB0aGUgb2JqZWN0IiApOworCisJLy8gbWFudWFsbHkgY2xlYW4gdXAgZGV0YWNoZWQgZWxl
bWVudHMKKwlkaXYucmVtb3ZlKCk7Cit9KTsKKwordGVzdCgialF1ZXJ5LnJlbW92ZURhdGEiLCBm
dW5jdGlvbigpIHsKKwlleHBlY3QoNik7CisJdmFyIGRpdiA9IGpRdWVyeSgiI2ZvbyIpWzBdOwor
CWpRdWVyeS5kYXRhKGRpdiwgInRlc3QiLCAidGVzdGluZyIpOworCWpRdWVyeS5yZW1vdmVEYXRh
KGRpdiwgInRlc3QiKTsKKwllcXVhbHMoIGpRdWVyeS5kYXRhKGRpdiwgInRlc3QiKSwgdW5kZWZp
bmVkLCAiQ2hlY2sgcmVtb3ZhbCBvZiBkYXRhIiApOworCisJalF1ZXJ5LmRhdGEoZGl2LCAidGVz
dDIiLCAidGVzdGluZyIpOworCWpRdWVyeS5yZW1vdmVEYXRhKCBkaXYgKTsKKwlvayggIWpRdWVy
eS5kYXRhKGRpdiwgInRlc3QyIiksICJNYWtlIHN1cmUgdGhhdCB0aGUgZGF0YSBwcm9wZXJ0eSBu
byBsb25nZXIgZXhpc3RzLiIgKTsKKwlvayggIWRpdlsgalF1ZXJ5LmV4cGFuZG8gXSwgIk1ha2Ug
c3VyZSB0aGUgZXhwYW5kbyBubyBsb25nZXIgZXhpc3RzLCBhcyB3ZWxsLiIgKTsKKworCXZhciBv
YmogPSB7fTsKKwlqUXVlcnkuZGF0YShvYmosICJ0ZXN0IiwgInRlc3RpbmciKTsKKwllcXVhbHMo
IGpRdWVyeShvYmopLmRhdGEoInRlc3QiKSwgInRlc3RpbmciLCAidmVyaWZ5IGRhdGEgb24gcGxh
aW4gb2JqZWN0Iik7CisJalF1ZXJ5LnJlbW92ZURhdGEob2JqLCAidGVzdCIpOworCWVxdWFscygg
alF1ZXJ5LmRhdGEob2JqLCAidGVzdCIpLCB1bmRlZmluZWQsICJDaGVjayByZW1vdmFsIG9mIGRh
dGEgb24gcGxhaW4gb2JqZWN0IiApOworCisJalF1ZXJ5LmRhdGEoIHdpbmRvdywgIkJBRCIsIHRy
dWUgKTsKKwlqUXVlcnkucmVtb3ZlRGF0YSggd2luZG93LCAiQkFEIiApOworCW9rKCAhalF1ZXJ5
LmRhdGEoIHdpbmRvdywgIkJBRCIgKSwgIk1ha2Ugc3VyZSB0aGF0IHRoZSB2YWx1ZSB3YXMgbm90
IHN0aWxsIHNldC4iICk7Cit9KTsKKwordGVzdCgiLnJlbW92ZURhdGEoKSIsIGZ1bmN0aW9uKCkg
eworCWV4cGVjdCg2KTsKKwl2YXIgZGl2ID0galF1ZXJ5KCIjZm9vIik7CisJZGl2LmRhdGEoInRl
c3QiLCAidGVzdGluZyIpOworCWRpdi5yZW1vdmVEYXRhKCJ0ZXN0Iik7CisJZXF1YWxzKCBkaXYu
ZGF0YSgidGVzdCIpLCB1bmRlZmluZWQsICJDaGVjayByZW1vdmFsIG9mIGRhdGEiICk7CisKKwlk
aXYuZGF0YSgidGVzdCIsICJ0ZXN0aW5nIik7CisJZGl2LmRhdGEoInRlc3QuZm9vIiwgInRlc3Rp
bmcyIik7CisJZGl2LnJlbW92ZURhdGEoInRlc3QuYmFyIik7CisJZXF1YWxzKCBkaXYuZGF0YSgi
dGVzdC5mb28iKSwgInRlc3RpbmcyIiwgIk1ha2Ugc3VyZSBkYXRhIGlzIGludGFjdCIgKTsKKwll
cXVhbHMoIGRpdi5kYXRhKCJ0ZXN0IiksICJ0ZXN0aW5nIiwgIk1ha2Ugc3VyZSBkYXRhIGlzIGlu
dGFjdCIgKTsKKworCWRpdi5yZW1vdmVEYXRhKCJ0ZXN0Iik7CisJZXF1YWxzKCBkaXYuZGF0YSgi
dGVzdC5mb28iKSwgInRlc3RpbmcyIiwgIk1ha2Ugc3VyZSBkYXRhIGlzIGludGFjdCIgKTsKKwll
cXVhbHMoIGRpdi5kYXRhKCJ0ZXN0IiksIHVuZGVmaW5lZCwgIk1ha2Ugc3VyZSBkYXRhIGlzIGlu
dGFjdCIgKTsKKworCWRpdi5yZW1vdmVEYXRhKCJ0ZXN0LmZvbyIpOworCWVxdWFscyggZGl2LmRh
dGEoInRlc3QuZm9vIiksIHVuZGVmaW5lZCwgIk1ha2Ugc3VyZSBkYXRhIGlzIGludGFjdCIgKTsK
K30pOworCitpZiAod2luZG93LkpTT04gJiYgd2luZG93LkpTT04uc3RyaW5naWZ5KSB7CisJdGVz
dCgiSlNPTiBzZXJpYWxpemF0aW9uICgjODEwOCkiLCBmdW5jdGlvbiAoKSB7CisJCWV4cGVjdCgx
KTsKKworCQl2YXIgb2JqID0geyBmb286ICJiYXIiIH07CisJCWpRdWVyeS5kYXRhKG9iaiwgImhp
ZGRlbiIsIHRydWUpOworCisJCWVxdWFscyggSlNPTi5zdHJpbmdpZnkob2JqKSwgJ3siZm9vIjoi
YmFyIn0nLCAiRXhwYW5kbyBpcyBoaWRkZW4gZnJvbSBKU09OLnN0cmluZ2lmeSIgKTsKKwl9KTsK
K30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlv
dXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvdW5pdC9kYXRhLmpzCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IGFsbG93LXRhYnMKICAgKyB5ZXMKCkluZGV4OiBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3Vy
Y2VzL3Rlc3QvdW5pdC9kZWZlcnJlZC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcXVl
cnkvcmVzb3VyY2VzL3Rlc3QvdW5pdC9kZWZlcnJlZC5qcwkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC91bml0L2RlZmVycmVkLmpzCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDIyMiBAQAorbW9kdWxlKCJkZWZlcnJlZCIsIHsgdGVhcmRvd246IG1vZHVs
ZVRlYXJkb3duIH0pOworCit0ZXN0KCJqUXVlcnkuX0RlZmVycmVkKCkiLCBmdW5jdGlvbigpIHsK
KworCWV4cGVjdCggMTEgKTsKKworCXZhciBkZWZlcnJlZCwKKwkJb2JqZWN0LAorCQl0ZXN0Owor
CisJZGVmZXJyZWQgPSBqUXVlcnkuX0RlZmVycmVkKCk7CisKKwl0ZXN0ID0gZmFsc2U7CisKKwlk
ZWZlcnJlZC5kb25lKCBmdW5jdGlvbiggdmFsdWUgKSB7CisJCWVxdWFscyggdmFsdWUgLCAidmFs
dWUiICwgIlRlc3QgcHJlLXJlc29sdmUgY2FsbGJhY2siICk7CisJCXRlc3QgPSB0cnVlOworCX0g
KTsKKworCWRlZmVycmVkLnJlc29sdmUoICJ2YWx1ZSIgKTsKKworCW9rKCB0ZXN0ICwgIlRlc3Qg
cHJlLXJlc29sdmUgY2FsbGJhY2tzIGNhbGxlZCByaWdodCBhd2F5IiApOworCisJdGVzdCA9IGZh
bHNlOworCisJZGVmZXJyZWQuZG9uZSggZnVuY3Rpb24oIHZhbHVlICkgeworCQllcXVhbHMoIHZh
bHVlICwgInZhbHVlIiAsICJUZXN0IHBvc3QtcmVzb2x2ZSBjYWxsYmFjayIgKTsKKwkJdGVzdCA9
IHRydWU7CisJfSApOworCisJb2soIHRlc3QgLCAiVGVzdCBwb3N0LXJlc29sdmUgY2FsbGJhY2tz
IGNhbGxlZCByaWdodCBhd2F5IiApOworCisJZGVmZXJyZWQuY2FuY2VsKCk7CisKKwl0ZXN0ID0g
dHJ1ZTsKKworCWRlZmVycmVkLmRvbmUoIGZ1bmN0aW9uKCkgeworCQlvayggZmFsc2UgLCAiQ2Fu
Y2VsIHdhcyBpZ25vcmVkIiApOworCQl0ZXN0ID0gZmFsc2U7CisJfSApOworCisJb2soIHRlc3Qg
LCAiVGVzdCBjYW5jZWwiICk7CisKKwlkZWZlcnJlZCA9IGpRdWVyeS5fRGVmZXJyZWQoKS5yZXNv
bHZlKCk7CisKKwl0cnkgeworCQlkZWZlcnJlZC5kb25lKCBmdW5jdGlvbigpIHsKKwkJCXRocm93
ICJFcnJvciI7CisJCX0gLCBmdW5jdGlvbigpIHsKKwkJCW9rKCB0cnVlICwgIlRlc3QgZGVmZXJy
ZWQgZG8gbm90IGNhbmNlbCBvbiBleGNlcHRpb24iICk7CisJCX0gKTsKKwl9IGNhdGNoKCBlICkg
eworCQlzdHJpY3RFcXVhbCggZSAsICJFcnJvciIgLCAiVGVzdCBkZWZlcnJlZCBwcm9wYWdhdGVz
IGV4Y2VwdGlvbnMiKTsKKwkJZGVmZXJyZWQuZG9uZSgpOworCX0KKworCXRlc3QgPSAiIjsKKwlk
ZWZlcnJlZCA9IGpRdWVyeS5fRGVmZXJyZWQoKS5kb25lKCBmdW5jdGlvbigpIHsKKworCQl0ZXN0
ICs9ICJBIjsKKworCX0sIGZ1bmN0aW9uKCkgeworCisJCXRlc3QgKz0gIkIiOworCisJfSApLnJl
c29sdmUoKTsKKworCXN0cmljdEVxdWFsKCB0ZXN0ICwgIkFCIiAsICJUZXN0IG11bHRpcGxlIGRv
bmUgcGFyYW1ldGVycyIgKTsKKworCXRlc3QgPSAiIjsKKworCWRlZmVycmVkLmRvbmUoIGZ1bmN0
aW9uKCkgeworCisJCWRlZmVycmVkLmRvbmUoIGZ1bmN0aW9uKCkgeworCisJCQl0ZXN0ICs9ICJD
IjsKKworCQl9ICk7CisKKwkJdGVzdCArPSAiQSI7CisKKwl9LCBmdW5jdGlvbigpIHsKKworCQl0
ZXN0ICs9ICJCIjsKKwl9ICk7CisKKwlzdHJpY3RFcXVhbCggdGVzdCAsICJBQkMiICwgIlRlc3Qg
ZG9uZSBjYWxsYmFja3Mgb3JkZXIiICk7CisKKwlkZWZlcnJlZCA9IGpRdWVyeS5fRGVmZXJyZWQo
KTsKKworCWRlZmVycmVkLnJlc29sdmVXaXRoKCBqUXVlcnkgLCBbIGRvY3VtZW50IF0gKS5kb25l
KCBmdW5jdGlvbiggZG9jICkgeworCQlvayggdGhpcyA9PT0galF1ZXJ5ICYmIGFyZ3VtZW50cy5s
ZW5ndGggPT09IDEgJiYgZG9jID09PSBkb2N1bWVudCAsICJUZXN0IGZpcmUgY29udGV4dCAmIGFy
Z3MiICk7CisJfSk7CisKKwkvLyAjODQyMQorCWRlZmVycmVkID0galF1ZXJ5Ll9EZWZlcnJlZCgp
OworCWRlZmVycmVkLnJlc29sdmVXaXRoKCkuZG9uZShmdW5jdGlvbigpIHsKKwkJb2soIHRydWUs
ICJUZXN0IHJlc29sdmVXaXRoIGNhbiBiZSBjYWxsZWQgd2l0aCBubyBhcmd1bWVudCIgKTsKKwl9
KTsKK30pOworCit0ZXN0KCJqUXVlcnkuRGVmZXJyZWQoKSIsIGZ1bmN0aW9uKCkgeworCisJZXhw
ZWN0KCAxMCApOworCisJalF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggZGVmZXIgKSB7CisJCXN0
cmljdEVxdWFsKCB0aGlzICwgZGVmZXIgLCAiRGVmZXIgcGFzc2VkIGFzIHRoaXMgJiBmaXJzdCBh
cmd1bWVudCIgKTsKKwkJdGhpcy5yZXNvbHZlKCAiZG9uZSIgKTsKKwl9KS50aGVuKCBmdW5jdGlv
biggdmFsdWUgKSB7CisJCXN0cmljdEVxdWFsKCB2YWx1ZSAsICJkb25lIiAsICJQYXNzZWQgZnVu
Y3Rpb24gZXhlY3V0ZWQiICk7CisJfSk7CisKKwlqUXVlcnkuRGVmZXJyZWQoKS5yZXNvbHZlKCku
dGhlbiggZnVuY3Rpb24oKSB7CisJCW9rKCB0cnVlICwgIlN1Y2Nlc3Mgb24gcmVzb2x2ZSIgKTsK
Kwl9LCBmdW5jdGlvbigpIHsKKwkJb2soIGZhbHNlICwgIkVycm9yIG9uIHJlc29sdmUiICk7CisJ
fSk7CisKKwlqUXVlcnkuRGVmZXJyZWQoKS5yZWplY3QoKS50aGVuKCBmdW5jdGlvbigpIHsKKwkJ
b2soIGZhbHNlICwgIlN1Y2Nlc3Mgb24gcmVqZWN0IiApOworCX0sIGZ1bmN0aW9uKCkgeworCQlv
ayggdHJ1ZSAsICJFcnJvciBvbiByZWplY3QiICk7CisJfSk7CisKKwkoIG5ldyBqUXVlcnkuRGVm
ZXJyZWQoIGZ1bmN0aW9uKCBkZWZlciApIHsKKwkJc3RyaWN0RXF1YWwoIHRoaXMgLCBkZWZlciAs
ICJEZWZlciBwYXNzZWQgYXMgdGhpcyAmIGZpcnN0IGFyZ3VtZW50IChuZXcpIiApOworCQl0aGlz
LnJlc29sdmUoICJkb25lIiApOworCX0pICkudGhlbiggZnVuY3Rpb24oIHZhbHVlICkgeworCQlz
dHJpY3RFcXVhbCggdmFsdWUgLCAiZG9uZSIgLCAiUGFzc2VkIGZ1bmN0aW9uIGV4ZWN1dGVkIChu
ZXcpIiApOworCX0pOworCisJKCBuZXcgalF1ZXJ5LkRlZmVycmVkKCkgKS5yZXNvbHZlKCkudGhl
biggZnVuY3Rpb24oKSB7CisJCW9rKCB0cnVlICwgIlN1Y2Nlc3Mgb24gcmVzb2x2ZSAobmV3KSIg
KTsKKwl9LCBmdW5jdGlvbigpIHsKKwkJb2soIGZhbHNlICwgIkVycm9yIG9uIHJlc29sdmUgKG5l
dykiICk7CisJfSk7CisKKwkoIG5ldyBqUXVlcnkuRGVmZXJyZWQoKSApLnJlamVjdCgpLnRoZW4o
IGZ1bmN0aW9uKCkgeworCQlvayggZmFsc2UgLCAiU3VjY2VzcyBvbiByZWplY3QgKG5ldykiICk7
CisJfSwgZnVuY3Rpb24oKSB7CisJCW9rKCB0cnVlICwgIkVycm9yIG9uIHJlamVjdCAobmV3KSIg
KTsKKwl9KTsKKworCXZhciB0bXAgPSBqUXVlcnkuRGVmZXJyZWQoKTsKKworCXN0cmljdEVxdWFs
KCB0bXAucHJvbWlzZSgpICwgdG1wLnByb21pc2UoKSAsICJUZXN0IGRlZmVycmVkIGFsd2F5cyBy
ZXR1cm4gc2FtZSBwcm9taXNlIiApOworCXN0cmljdEVxdWFsKCB0bXAucHJvbWlzZSgpICwgdG1w
LnByb21pc2UoKS5wcm9taXNlKCkgLCAiVGVzdCBkZWZlcnJlZCdzIHByb21pc2UgYWx3YXlzIHJl
dHVybiBzYW1lIHByb21pc2UgYXMgZGVmZXJyZWQiICk7Cit9KTsKKwordGVzdCgialF1ZXJ5Lndo
ZW4oKSIsIGZ1bmN0aW9uKCkgeworCisJZXhwZWN0KCAyMyApOworCisJLy8gU29tZSBvdGhlciBv
YmplY3RzCisJalF1ZXJ5LmVhY2goIHsKKworCQkiYW4gZW1wdHkgc3RyaW5nIjogIiIsCisJCSJh
IG5vbi1lbXB0eSBzdHJpbmciOiAic29tZSBzdHJpbmciLAorCQkiemVybyI6IDAsCisJCSJhIG51
bWJlciBvdGhlciB0aGFuIHplcm8iOiAxLAorCQkidHJ1ZSI6IHRydWUsCisJCSJmYWxzZSI6IGZh
bHNlLAorCQkibnVsbCI6IG51bGwsCisJCSJ1bmRlZmluZWQiOiB1bmRlZmluZWQsCisJCSJhIHBs
YWluIG9iamVjdCI6IHt9CisKKwl9ICwgZnVuY3Rpb24oIG1lc3NhZ2UgLCB2YWx1ZSApIHsKKwor
CQlvayggalF1ZXJ5LmlzRnVuY3Rpb24oIGpRdWVyeS53aGVuKCB2YWx1ZSApLnRoZW4oIGZ1bmN0
aW9uKCByZXNvbHZlVmFsdWUgKSB7CisJCQlzdHJpY3RFcXVhbCggcmVzb2x2ZVZhbHVlICwgdmFs
dWUgLCAiVGVzdCB0aGUgcHJvbWlzZSB3YXMgcmVzb2x2ZWQgd2l0aCAiICsgbWVzc2FnZSApOwor
CQl9ICkucHJvbWlzZSApICwgIlRlc3QgIiArIG1lc3NhZ2UgKyAiIHRyaWdnZXJzIHRoZSBjcmVh
dGlvbiBvZiBhIG5ldyBQcm9taXNlIiApOworCisJfSApOworCisJb2soIGpRdWVyeS5pc0Z1bmN0
aW9uKCBqUXVlcnkud2hlbigpLnRoZW4oIGZ1bmN0aW9uKCByZXNvbHZlVmFsdWUgKSB7CisJCXN0
cmljdEVxdWFsKCByZXNvbHZlVmFsdWUgLCB1bmRlZmluZWQgLCAiVGVzdCB0aGUgcHJvbWlzZSB3
YXMgcmVzb2x2ZWQgd2l0aCBubyBwYXJhbWV0ZXIiICk7CisJfSApLnByb21pc2UgKSAsICJUZXN0
IGNhbGxpbmcgd2hlbiB3aXRoIG5vIHBhcmFtZXRlciB0cmlnZ2VycyB0aGUgY3JlYXRpb24gb2Yg
YSBuZXcgUHJvbWlzZSIgKTsKKworCXZhciBjYWNoZSwgaTsKKworCWZvciggaSA9IDEgOyBpIDwg
NCA7IGkrKyApIHsKKwkJalF1ZXJ5LndoZW4oIGNhY2hlIHx8IGpRdWVyeS5EZWZlcnJlZCggZnVu
Y3Rpb24oKSB7CisJCQl0aGlzLnJlc29sdmUoIGkgKTsKKwkJfSkgKS50aGVuKCBmdW5jdGlvbigg
dmFsdWUgKSB7CisJCQlzdHJpY3RFcXVhbCggdmFsdWUgLCAxICwgIkZ1bmN0aW9uIGV4ZWN1dGVk
IiArICggaSA+IDEgPyAiIG9ubHkgb25jZSIgOiAiIiApICk7CisJCQljYWNoZSA9IHZhbHVlOwor
CQl9LCBmdW5jdGlvbigpIHsKKwkJCW9rKCBmYWxzZSAsICJGYWlsIGNhbGxlZCIgKTsKKwkJfSk7
CisJfQorfSk7CisKK3Rlc3QoImpRdWVyeS53aGVuKCkgLSBqb2luZWQiLCBmdW5jdGlvbigpIHsK
KworCWV4cGVjdCg4KTsKKworCWpRdWVyeS53aGVuKCAxLCAyLCAzICkuZG9uZSggZnVuY3Rpb24o
IGEsIGIsIGMgKSB7CisJCXN0cmljdEVxdWFsKCBhICwgMSAsICJUZXN0IGZpcnN0IHBhcmFtIGlz
IGZpcnN0IHJlc29sdmVkIHZhbHVlIC0gbm9uLW9ic2VydmFibGVzIiApOworCQlzdHJpY3RFcXVh
bCggYiAsIDIgLCAiVGVzdCBzZWNvbmQgcGFyYW0gaXMgc2Vjb25kIHJlc29sdmVkIHZhbHVlIC0g
bm9uLW9ic2VydmFibGVzIiApOworCQlzdHJpY3RFcXVhbCggYyAsIDMgLCAiVGVzdCB0aGlyZCBw
YXJhbSBpcyB0aGlyZCByZXNvbHZlZCB2YWx1ZSAtIG5vbi1vYnNlcnZhYmxlcyIgKTsKKwl9KS5m
YWlsKCBmdW5jdGlvbigpIHsKKwkJb2soIGZhbHNlICwgIlRlc3QgdGhlIGNyZWF0ZWQgZGVmZXJy
ZWQgd2FzIHJlc29sdmVkIC0gbm9uLW9ic2VydmFibGVzIik7CisJfSk7CisKKwl2YXIgc3VjY2Vz
c0RlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCkucmVzb2x2ZSggMSAsIDIgLCAzICksCisJCWVy
cm9yRGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKS5yZWplY3QoICJlcnJvciIgLCAiZXJyb3JQ
YXJhbSIgKTsKKworCWpRdWVyeS53aGVuKCAxICwgc3VjY2Vzc0RlZmVycmVkICwgMyApLmRvbmUo
IGZ1bmN0aW9uKCBhLCBiLCBjICkgeworCQlzdHJpY3RFcXVhbCggYSAsIDEgLCAiVGVzdCBmaXJz
dCBwYXJhbSBpcyBmaXJzdCByZXNvbHZlZCB2YWx1ZSAtIHJlc29sdmVkIG9ic2VydmFibGUiICk7
CisJCXNhbWUoIGIgLCBbIDEgLCAyICwgMyBdICwgIlRlc3Qgc2Vjb25kIHBhcmFtIGlzIHNlY29u
ZCByZXNvbHZlZCB2YWx1ZSAtIHJlc29sdmVkIG9ic2VydmFibGUiICk7CisJCXN0cmljdEVxdWFs
KCBjICwgMyAsICJUZXN0IHRoaXJkIHBhcmFtIGlzIHRoaXJkIHJlc29sdmVkIHZhbHVlIC0gcmVz
b2x2ZWQgb2JzZXJ2YWJsZSIgKTsKKwl9KS5mYWlsKCBmdW5jdGlvbigpIHsKKwkJb2soIGZhbHNl
ICwgIlRlc3QgdGhlIGNyZWF0ZWQgZGVmZXJyZWQgd2FzIHJlc29sdmVkIC0gcmVzb2x2ZWQgb2Jz
ZXJ2YWJsZSIpOworCX0pOworCisJalF1ZXJ5LndoZW4oIDEgLCBlcnJvckRlZmVycmVkICwgMyAp
LmRvbmUoIGZ1bmN0aW9uKCkgeworCQlvayggZmFsc2UgLCAiVGVzdCB0aGUgY3JlYXRlZCBkZWZl
cnJlZCB3YXMgcmVqZWN0ZWQgLSByZWplY3RlZCBvYnNlcnZhYmxlIik7CisJfSkuZmFpbCggZnVu
Y3Rpb24oIGVycm9yICwgZXJyb3JQYXJhbSApIHsKKwkJc3RyaWN0RXF1YWwoIGVycm9yICwgImVy
cm9yIiAsICJUZXN0IGZpcnN0IHBhcmFtIGlzIGZpcnN0IHJlamVjdGVkIHZhbHVlIC0gcmVqZWN0
ZWQgb2JzZXJ2YWJsZSIgKTsKKwkJc3RyaWN0RXF1YWwoIGVycm9yUGFyYW0gLCAiZXJyb3JQYXJh
bSIgLCAiVGVzdCBzZWNvbmQgcGFyYW0gaXMgc2Vjb25kIHJlamVjdGVkIHZhbHVlIC0gcmVqZWN0
ZWQgb2JzZXJ2YWJsZSIgKTsKKwl9KTsKK30pOwoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0
VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L3VuaXQvZGVmZXJyZWQuanMKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB
ZGRlZDogYWxsb3ctdGFicwogICArIHllcwoKSW5kZXg6IExheW91dFRlc3RzL2pxdWVyeS9yZXNv
dXJjZXMvdGVzdC91bml0L2RpbWVuc2lvbnMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
anF1ZXJ5L3Jlc291cmNlcy90ZXN0L3VuaXQvZGltZW5zaW9ucy5qcwkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC91bml0L2RpbWVuc2lvbnMuanMJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjI0IEBACittb2R1bGUoImRpbWVuc2lvbnMiLCB7IHRlYXJk
b3duOiBtb2R1bGVUZWFyZG93biB9KTsKKworZnVuY3Rpb24gcGFzcyggdmFsICkgeworCXJldHVy
biB2YWw7Cit9CisKK2Z1bmN0aW9uIGZuKCB2YWwgKSB7CisJcmV0dXJuIGZ1bmN0aW9uKCl7IHJl
dHVybiB2YWw7IH07Cit9CisKK2Z1bmN0aW9uIHRlc3RXaWR0aCggdmFsICkgeworCWV4cGVjdCg4
KTsKKworCXZhciAkZGl2ID0galF1ZXJ5KCIjbm90aGlkZGVuZGl2Iik7CisJJGRpdi53aWR0aCgg
dmFsKDMwKSApOworCWVxdWFscygkZGl2LndpZHRoKCksIDMwLCAiVGVzdCBzZXQgdG8gMzAgY29y
cmVjdGx5Iik7CisJJGRpdi5oaWRlKCk7CisJZXF1YWxzKCRkaXYud2lkdGgoKSwgMzAsICJUZXN0
IGhpZGRlbiBkaXYiKTsKKwkkZGl2LnNob3coKTsKKwkkZGl2LndpZHRoKCB2YWwoLTEpICk7IC8v
IGhhbmRsZSBuZWdhdGl2ZSBudW1iZXJzIGJ5IGlnbm9yaW5nICMxNTk5CisJZXF1YWxzKCRkaXYu
d2lkdGgoKSwgMzAsICJUZXN0IG5lZ2F0aXZlIHdpZHRoIGlnbm9yZWQiKTsKKwkkZGl2LmNzcygi
cGFkZGluZyIsICIyMHB4Iik7CisJZXF1YWxzKCRkaXYud2lkdGgoKSwgMzAsICJUZXN0IHBhZGRp
bmcgc3BlY2lmaWVkIHdpdGggcGl4ZWxzIik7CisJJGRpdi5jc3MoImJvcmRlciIsICIycHggc29s
aWQgI2ZmZiIpOworCWVxdWFscygkZGl2LndpZHRoKCksIDMwLCAiVGVzdCBib3JkZXIgc3BlY2lm
aWVkIHdpdGggcGl4ZWxzIik7CisKKwkkZGl2LmNzcyh7IGRpc3BsYXk6ICIiLCBib3JkZXI6ICIi
LCBwYWRkaW5nOiAiIiB9KTsKKworCWpRdWVyeSgiI25vdGhpZGRlbmRpdmNoaWxkIikuY3NzKHsg
d2lkdGg6IDIwLCBwYWRkaW5nOiAiM3B4IiwgYm9yZGVyOiAiMnB4IHNvbGlkICNmZmYiIH0pOwor
CWVxdWFscyhqUXVlcnkoIiNub3RoaWRkZW5kaXZjaGlsZCIpLndpZHRoKCksIDIwLCAiVGVzdCBj
aGlsZCB3aWR0aCB3aXRoIGJvcmRlciBhbmQgcGFkZGluZyIpOworCWpRdWVyeSgiI25vdGhpZGRl
bmRpdiwgI25vdGhpZGRlbmRpdmNoaWxkIikuY3NzKHsgYm9yZGVyOiAiIiwgcGFkZGluZzogIiIs
IHdpZHRoOiAiIiB9KTsKKworCXZhciBibGFoID0galF1ZXJ5KCJibGFoIik7CisJZXF1YWxzKCBi
bGFoLndpZHRoKCB2YWwoMTApICksIGJsYWgsICJNYWtlIHN1cmUgdGhhdCBzZXR0aW5nIGEgd2lk
dGggb24gYW4gZW1wdHkgc2V0IHJldHVybnMgdGhlIHNldC4iICk7CisJZXF1YWxzKCBibGFoLndp
ZHRoKCksIG51bGwsICJNYWtlIHN1cmUgJ251bGwnIGlzIHJldHVybmVkIG9uIGFuIGVtcHR5IHNl
dCIpOworCisJalF1ZXJ5LnJlbW92ZURhdGEoJGRpdlswXSwgJ29sZGRpc3BsYXknLCB0cnVlKTsK
K30KKwordGVzdCgid2lkdGgoKSIsIGZ1bmN0aW9uKCkgeworCXRlc3RXaWR0aCggcGFzcyApOwor
fSk7CisKK3Rlc3QoIndpZHRoKCkgd2l0aCBmdW5jdGlvbiIsIGZ1bmN0aW9uKCkgeworCXRlc3RX
aWR0aCggZm4gKTsKK30pOworCit0ZXN0KCJ3aWR0aCgpIHdpdGggZnVuY3Rpb24gYXJncyIsIGZ1
bmN0aW9uKCkgeworCWV4cGVjdCggMiApOworCisJdmFyICRkaXYgPSBqUXVlcnkoIiNub3RoaWRk
ZW5kaXYiKTsKKwkkZGl2LndpZHRoKCAzMCApLndpZHRoKGZ1bmN0aW9uKGksIHdpZHRoKSB7CisJ
CWVxdWFscyggd2lkdGgsIDMwLCAiTWFrZSBzdXJlIHByZXZpb3VzIHZhbHVlIGlzIGNvcnJyZWN0
LiIgKTsKKwkJcmV0dXJuIHdpZHRoICsgMTsKKwl9KTsKKworCWVxdWFscyggJGRpdi53aWR0aCgp
LCAzMSwgIk1ha2Ugc3VyZSB2YWx1ZSB3YXMgbW9kaWZpZWQgY29ycmVjdGx5LiIgKTsKK30pOwor
CitmdW5jdGlvbiB0ZXN0SGVpZ2h0KCB2YWwgKSB7CisJZXhwZWN0KDgpOworCisJdmFyICRkaXYg
PSBqUXVlcnkoIiNub3RoaWRkZW5kaXYiKTsKKwkkZGl2LmhlaWdodCggdmFsKDMwKSApOworCWVx
dWFscygkZGl2LmhlaWdodCgpLCAzMCwgIlRlc3Qgc2V0IHRvIDMwIGNvcnJlY3RseSIpOworCSRk
aXYuaGlkZSgpOworCWVxdWFscygkZGl2LmhlaWdodCgpLCAzMCwgIlRlc3QgaGlkZGVuIGRpdiIp
OworCSRkaXYuc2hvdygpOworCSRkaXYuaGVpZ2h0KCB2YWwoLTEpICk7IC8vIGhhbmRsZSBuZWdh
dGl2ZSBudW1iZXJzIGJ5IGlnbm9yaW5nICMxNTk5CisJZXF1YWxzKCRkaXYuaGVpZ2h0KCksIDMw
LCAiVGVzdCBuZWdhdGl2ZSBoZWlnaHQgaWdub3JlZCIpOworCSRkaXYuY3NzKCJwYWRkaW5nIiwg
IjIwcHgiKTsKKwllcXVhbHMoJGRpdi5oZWlnaHQoKSwgMzAsICJUZXN0IHBhZGRpbmcgc3BlY2lm
aWVkIHdpdGggcGl4ZWxzIik7CisJJGRpdi5jc3MoImJvcmRlciIsICIycHggc29saWQgI2ZmZiIp
OworCWVxdWFscygkZGl2LmhlaWdodCgpLCAzMCwgIlRlc3QgYm9yZGVyIHNwZWNpZmllZCB3aXRo
IHBpeGVscyIpOworCisJJGRpdi5jc3MoeyBkaXNwbGF5OiAiIiwgYm9yZGVyOiAiIiwgcGFkZGlu
ZzogIiIsIGhlaWdodDogIjFweCIgfSk7CisKKwlqUXVlcnkoIiNub3RoaWRkZW5kaXZjaGlsZCIp
LmNzcyh7IGhlaWdodDogMjAsIHBhZGRpbmc6ICIzcHgiLCBib3JkZXI6ICIycHggc29saWQgI2Zm
ZiIgfSk7CisJZXF1YWxzKGpRdWVyeSgiI25vdGhpZGRlbmRpdmNoaWxkIikuaGVpZ2h0KCksIDIw
LCAiVGVzdCBjaGlsZCBoZWlnaHQgd2l0aCBib3JkZXIgYW5kIHBhZGRpbmciKTsKKwlqUXVlcnko
IiNub3RoaWRkZW5kaXYsICNub3RoaWRkZW5kaXZjaGlsZCIpLmNzcyh7IGJvcmRlcjogIiIsIHBh
ZGRpbmc6ICIiLCBoZWlnaHQ6ICIiIH0pOworCisJdmFyIGJsYWggPSBqUXVlcnkoImJsYWgiKTsK
KwllcXVhbHMoIGJsYWguaGVpZ2h0KCB2YWwoMTApICksIGJsYWgsICJNYWtlIHN1cmUgdGhhdCBz
ZXR0aW5nIGEgaGVpZ2h0IG9uIGFuIGVtcHR5IHNldCByZXR1cm5zIHRoZSBzZXQuIiApOworCWVx
dWFscyggYmxhaC5oZWlnaHQoKSwgbnVsbCwgIk1ha2Ugc3VyZSAnbnVsbCcgaXMgcmV0dXJuZWQg
b24gYW4gZW1wdHkgc2V0Iik7CisKKwlqUXVlcnkucmVtb3ZlRGF0YSgkZGl2WzBdLCAnb2xkZGlz
cGxheScsIHRydWUpOworfQorCit0ZXN0KCJoZWlnaHQoKSIsIGZ1bmN0aW9uKCkgeworCXRlc3RI
ZWlnaHQoIHBhc3MgKTsKK30pOworCit0ZXN0KCJoZWlnaHQoKSB3aXRoIGZ1bmN0aW9uIiwgZnVu
Y3Rpb24oKSB7CisJdGVzdEhlaWdodCggZm4gKTsKK30pOworCit0ZXN0KCJoZWlnaHQoKSB3aXRo
IGZ1bmN0aW9uIGFyZ3MiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoIDIgKTsKKworCXZhciAkZGl2
ID0galF1ZXJ5KCIjbm90aGlkZGVuZGl2Iik7CisJJGRpdi5oZWlnaHQoIDMwICkuaGVpZ2h0KGZ1
bmN0aW9uKGksIGhlaWdodCkgeworCQllcXVhbHMoIGhlaWdodCwgMzAsICJNYWtlIHN1cmUgcHJl
dmlvdXMgdmFsdWUgaXMgY29ycnJlY3QuIiApOworCQlyZXR1cm4gaGVpZ2h0ICsgMTsKKwl9KTsK
KworCWVxdWFscyggJGRpdi5oZWlnaHQoKSwgMzEsICJNYWtlIHN1cmUgdmFsdWUgd2FzIG1vZGlm
aWVkIGNvcnJlY3RseS4iICk7Cit9KTsKKwordGVzdCgiaW5uZXJXaWR0aCgpIiwgZnVuY3Rpb24o
KSB7CisJZXhwZWN0KDQpOworCisJdmFyICRkaXYgPSBqUXVlcnkoIiNub3RoaWRkZW5kaXYiKTsK
KwkvLyBzZXQgc3R5bGVzCisJJGRpdi5jc3MoeworCQltYXJnaW46IDEwLAorCQlib3JkZXI6ICIy
cHggc29saWQgI2ZmZiIsCisJCXdpZHRoOiAzMAorCX0pOworCisJZXF1YWxzKCRkaXYuaW5uZXJX
aWR0aCgpLCAzMCwgIlRlc3Qgd2l0aCBtYXJnaW4gYW5kIGJvcmRlciIpOworCSRkaXYuY3NzKCJw
YWRkaW5nIiwgIjIwcHgiKTsKKwllcXVhbHMoJGRpdi5pbm5lcldpZHRoKCksIDcwLCAiVGVzdCB3
aXRoIG1hcmdpbiwgYm9yZGVyIGFuZCBwYWRkaW5nIik7CisJJGRpdi5oaWRlKCk7CisJZXF1YWxz
KCRkaXYuaW5uZXJXaWR0aCgpLCA3MCwgIlRlc3QgaGlkZGVuIGRpdiIpOworCisJLy8gcmVzZXQg
c3R5bGVzCisJJGRpdi5jc3MoeyBkaXNwbGF5OiAiIiwgYm9yZGVyOiAiIiwgcGFkZGluZzogIiIs
IHdpZHRoOiAiIiwgaGVpZ2h0OiAiIiB9KTsKKworCXZhciBkaXYgPSBqUXVlcnkoICI8ZGl2PiIg
KTsKKworCS8vIFRlbXBvcmFyaWx5IHJlcXVpcmUgMCBmb3IgYmFja3dhcmRzIGNvbXBhdCAtIHNo
b3VsZCBiZSBhdXRvCisJZXF1YWxzKCBkaXYuaW5uZXJXaWR0aCgpLCAwLCAiTWFrZSBzdXJlIHRo
YXQgZGlzY29ubmVjdGVkIG5vZGVzIGFyZSBoYW5kbGVkLiIgKTsKKworCWRpdi5yZW1vdmUoKTsK
KwlqUXVlcnkucmVtb3ZlRGF0YSgkZGl2WzBdLCAnb2xkZGlzcGxheScsIHRydWUpOworfSk7CisK
K3Rlc3QoImlubmVySGVpZ2h0KCkiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoNCk7CisKKwl2YXIg
JGRpdiA9IGpRdWVyeSgiI25vdGhpZGRlbmRpdiIpOworCS8vIHNldCBzdHlsZXMKKwkkZGl2LmNz
cyh7CisJCW1hcmdpbjogMTAsCisJCWJvcmRlcjogIjJweCBzb2xpZCAjZmZmIiwKKwkJaGVpZ2h0
OiAzMAorCX0pOworCisJZXF1YWxzKCRkaXYuaW5uZXJIZWlnaHQoKSwgMzAsICJUZXN0IHdpdGgg
bWFyZ2luIGFuZCBib3JkZXIiKTsKKwkkZGl2LmNzcygicGFkZGluZyIsICIyMHB4Iik7CisJZXF1
YWxzKCRkaXYuaW5uZXJIZWlnaHQoKSwgNzAsICJUZXN0IHdpdGggbWFyZ2luLCBib3JkZXIgYW5k
IHBhZGRpbmciKTsKKwkkZGl2LmhpZGUoKTsKKwllcXVhbHMoJGRpdi5pbm5lckhlaWdodCgpLCA3
MCwgIlRlc3QgaGlkZGVuIGRpdiIpOworCisJLy8gcmVzZXQgc3R5bGVzCisJJGRpdi5jc3MoeyBk
aXNwbGF5OiAiIiwgYm9yZGVyOiAiIiwgcGFkZGluZzogIiIsIHdpZHRoOiAiIiwgaGVpZ2h0OiAi
IiB9KTsKKworCXZhciBkaXYgPSBqUXVlcnkoICI8ZGl2PiIgKTsKKworCS8vIFRlbXBvcmFyaWx5
IHJlcXVpcmUgMCBmb3IgYmFja3dhcmRzIGNvbXBhdCAtIHNob3VsZCBiZSBhdXRvCisJZXF1YWxz
KCBkaXYuaW5uZXJIZWlnaHQoKSwgMCwgIk1ha2Ugc3VyZSB0aGF0IGRpc2Nvbm5lY3RlZCBub2Rl
cyBhcmUgaGFuZGxlZC4iICk7CisKKwlkaXYucmVtb3ZlKCk7CisJalF1ZXJ5LnJlbW92ZURhdGEo
JGRpdlswXSwgJ29sZGRpc3BsYXknLCB0cnVlKTsKK30pOworCit0ZXN0KCJvdXRlcldpZHRoKCki
LCBmdW5jdGlvbigpIHsKKwlleHBlY3QoNyk7CisKKwl2YXIgJGRpdiA9IGpRdWVyeSgiI25vdGhp
ZGRlbmRpdiIpOworCSRkaXYuY3NzKCJ3aWR0aCIsIDMwKTsKKworCWVxdWFscygkZGl2Lm91dGVy
V2lkdGgoKSwgMzAsICJUZXN0IHdpdGggb25seSB3aWR0aCBzZXQiKTsKKwkkZGl2LmNzcygicGFk
ZGluZyIsICIyMHB4Iik7CisJZXF1YWxzKCRkaXYub3V0ZXJXaWR0aCgpLCA3MCwgIlRlc3Qgd2l0
aCBwYWRkaW5nIik7CisJJGRpdi5jc3MoImJvcmRlciIsICIycHggc29saWQgI2ZmZiIpOworCWVx
dWFscygkZGl2Lm91dGVyV2lkdGgoKSwgNzQsICJUZXN0IHdpdGggcGFkZGluZyBhbmQgYm9yZGVy
Iik7CisJJGRpdi5jc3MoIm1hcmdpbiIsICIxMHB4Iik7CisJZXF1YWxzKCRkaXYub3V0ZXJXaWR0
aCgpLCA3NCwgIlRlc3Qgd2l0aCBwYWRkaW5nLCBib3JkZXIgYW5kIG1hcmdpbiB3aXRob3V0IG1h
cmdpbiBvcHRpb24iKTsKKwkkZGl2LmNzcygicG9zaXRpb24iLCAiYWJzb2x1dGUiKTsKKwllcXVh
bHMoJGRpdi5vdXRlcldpZHRoKHRydWUpLCA5NCwgIlRlc3Qgd2l0aCBwYWRkaW5nLCBib3JkZXIg
YW5kIG1hcmdpbiB3aXRoIG1hcmdpbiBvcHRpb24iKTsKKwkkZGl2LmhpZGUoKTsKKwllcXVhbHMo
JGRpdi5vdXRlcldpZHRoKHRydWUpLCA5NCwgIlRlc3QgaGlkZGVuIGRpdiB3aXRoIHBhZGRpbmcs
IGJvcmRlciBhbmQgbWFyZ2luIHdpdGggbWFyZ2luIG9wdGlvbiIpOworCisJLy8gcmVzZXQgc3R5
bGVzCisJJGRpdi5jc3MoeyBwb3NpdGlvbjogIiIsIGRpc3BsYXk6ICIiLCBib3JkZXI6ICIiLCBw
YWRkaW5nOiAiIiwgd2lkdGg6ICIiLCBoZWlnaHQ6ICIiIH0pOworCisJdmFyIGRpdiA9IGpRdWVy
eSggIjxkaXY+IiApOworCisJLy8gVGVtcG9yYXJpbHkgcmVxdWlyZSAwIGZvciBiYWNrd2FyZHMg
Y29tcGF0IC0gc2hvdWxkIGJlIGF1dG8KKwllcXVhbHMoIGRpdi5vdXRlcldpZHRoKCksIDAsICJN
YWtlIHN1cmUgdGhhdCBkaXNjb25uZWN0ZWQgbm9kZXMgYXJlIGhhbmRsZWQuIiApOworCisJZGl2
LnJlbW92ZSgpOworCWpRdWVyeS5yZW1vdmVEYXRhKCRkaXZbMF0sICdvbGRkaXNwbGF5JywgdHJ1
ZSk7Cit9KTsKKwordGVzdCgib3V0ZXJIZWlnaHQoKSIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCg3
KTsKKworCXZhciAkZGl2ID0galF1ZXJ5KCIjbm90aGlkZGVuZGl2Iik7CisJJGRpdi5jc3MoImhl
aWdodCIsIDMwKTsKKworCWVxdWFscygkZGl2Lm91dGVySGVpZ2h0KCksIDMwLCAiVGVzdCB3aXRo
IG9ubHkgd2lkdGggc2V0Iik7CisJJGRpdi5jc3MoInBhZGRpbmciLCAiMjBweCIpOworCWVxdWFs
cygkZGl2Lm91dGVySGVpZ2h0KCksIDcwLCAiVGVzdCB3aXRoIHBhZGRpbmciKTsKKwkkZGl2LmNz
cygiYm9yZGVyIiwgIjJweCBzb2xpZCAjZmZmIik7CisJZXF1YWxzKCRkaXYub3V0ZXJIZWlnaHQo
KSwgNzQsICJUZXN0IHdpdGggcGFkZGluZyBhbmQgYm9yZGVyIik7CisJJGRpdi5jc3MoIm1hcmdp
biIsICIxMHB4Iik7CisJZXF1YWxzKCRkaXYub3V0ZXJIZWlnaHQoKSwgNzQsICJUZXN0IHdpdGgg
cGFkZGluZywgYm9yZGVyIGFuZCBtYXJnaW4gd2l0aG91dCBtYXJnaW4gb3B0aW9uIik7CisJZXF1
YWxzKCRkaXYub3V0ZXJIZWlnaHQodHJ1ZSksIDk0LCAiVGVzdCB3aXRoIHBhZGRpbmcsIGJvcmRl
ciBhbmQgbWFyZ2luIHdpdGggbWFyZ2luIG9wdGlvbiIpOworCSRkaXYuaGlkZSgpOworCWVxdWFs
cygkZGl2Lm91dGVySGVpZ2h0KHRydWUpLCA5NCwgIlRlc3QgaGlkZGVuIGRpdiB3aXRoIHBhZGRp
bmcsIGJvcmRlciBhbmQgbWFyZ2luIHdpdGggbWFyZ2luIG9wdGlvbiIpOworCisJLy8gcmVzZXQg
c3R5bGVzCisJJGRpdi5jc3MoeyBkaXNwbGF5OiAiIiwgYm9yZGVyOiAiIiwgcGFkZGluZzogIiIs
IHdpZHRoOiAiIiwgaGVpZ2h0OiAiIiB9KTsKKworCXZhciBkaXYgPSBqUXVlcnkoICI8ZGl2PiIg
KTsKKworCS8vIFRlbXBvcmFyaWx5IHJlcXVpcmUgMCBmb3IgYmFja3dhcmRzIGNvbXBhdCAtIHNo
b3VsZCBiZSBhdXRvCisJZXF1YWxzKCBkaXYub3V0ZXJIZWlnaHQoKSwgMCwgIk1ha2Ugc3VyZSB0
aGF0IGRpc2Nvbm5lY3RlZCBub2RlcyBhcmUgaGFuZGxlZC4iICk7CisKKwlkaXYucmVtb3ZlKCk7
CisJalF1ZXJ5LnJlbW92ZURhdGEoJGRpdlswXSwgJ29sZGRpc3BsYXknLCB0cnVlKTsKK30pOwoK
UHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L3Vu
aXQvZGltZW5zaW9ucy5qcwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBhbGxvdy10YWJzCiAgICsgeWVzCgpJ
bmRleDogTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L3VuaXQvZWZmZWN0cy5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvdW5pdC9lZmZl
Y3RzLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0
L3VuaXQvZWZmZWN0cy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NjQgQEAKK21vZHVsZSgi
ZWZmZWN0cyIsIHsgdGVhcmRvd246IG1vZHVsZVRlYXJkb3duIH0pOworCit0ZXN0KCJzYW5pdHkg
Y2hlY2siLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMSk7CisJb2soIGpRdWVyeSgiI2RsOnZpc2li
bGUsICNtYWluOnZpc2libGUsICNmb286dmlzaWJsZSIpLmxlbmd0aCA9PT0gMywgIlFVbml0IHN0
YXRlIGlzIGNvcnJlY3QgZm9yIHRlc3RpbmcgZWZmZWN0cyIgKTsKK30pOworCit0ZXN0KCJzaG93
KCkiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMjgpOworCisJdmFyIGhpZGRlbmRpdiA9IGpRdWVy
eSgiZGl2LmhpZGRlbiIpOworCisJaGlkZGVuZGl2LmhpZGUoKS5zaG93KCk7CisKKwllcXVhbHMo
IGhpZGRlbmRpdi5jc3MoImRpc3BsYXkiKSwgImJsb2NrIiwgIk1ha2Ugc3VyZSBhIHByZS1oaWRk
ZW4gZGl2IGlzIHZpc2libGUuIiApOworCisJdmFyIGRpdiA9IGpRdWVyeSgiPGRpdj4iKS5oaWRl
KCkuYXBwZW5kVG8oIiNtYWluIikuc2hvdygpOworCisJZXF1YWwoIGRpdi5jc3MoImRpc3BsYXki
KSwgImJsb2NrIiwgIk1ha2Ugc3VyZSBwcmUtaGlkZGVuIGRpdnMgc2hvdyIgKTsKKworCVFVbml0
LnJlc2V0KCk7CisKKwloaWRkZW5kaXYgPSBqUXVlcnkoImRpdi5oaWRkZW4iKTsKKworCWVxdWFs
KGpRdWVyeS5jc3MoIGhpZGRlbmRpdlswXSwgImRpc3BsYXkiKSwgIm5vbmUiLCAiaGlkZGVuZGl2
IGlzIGRpc3BsYXk6IG5vbmUiKTsKKworCWhpZGRlbmRpdi5jc3MoImRpc3BsYXkiLCAiYmxvY2si
KTsKKwllcXVhbChqUXVlcnkuY3NzKCBoaWRkZW5kaXZbMF0sICJkaXNwbGF5IiksICJibG9jayIs
ICJoaWRkZW5kaXYgaXMgZGlzcGxheTogYmxvY2siKTsKKworCWhpZGRlbmRpdi5zaG93KCk7CisJ
ZXF1YWwoalF1ZXJ5LmNzcyggaGlkZGVuZGl2WzBdLCAiZGlzcGxheSIpLCAiYmxvY2siLCAiaGlk
ZGVuZGl2IGlzIGRpc3BsYXk6IGJsb2NrIik7CisKKwloaWRkZW5kaXYuY3NzKCJkaXNwbGF5Iiwi
Iik7CisKKwl2YXIgcGFzcyA9IHRydWUsIGRpdiA9IGpRdWVyeSgiI21haW4gZGl2Iik7CisJZGl2
LnNob3coKS5lYWNoKGZ1bmN0aW9uKCl7CisJCWlmICggdGhpcy5zdHlsZS5kaXNwbGF5ID09ICJu
b25lIiApIHBhc3MgPSBmYWxzZTsKKwl9KTsKKwlvayggcGFzcywgIlNob3ciICk7CisKKwl2YXIg
c3BlZWRzID0geworCQkibnVsbCBzcGVlZCI6IG51bGwsCisJCSJ1bmRlZmluZWQgc3BlZWQiOiB1
bmRlZmluZWQsCisJCSJlbXB0eSBzdHJpbmcgc3BlZWQiOiAiIiwKKwkJImZhbHNlIHNwZWVkIjog
ZmFsc2UKKwl9OworCisJalF1ZXJ5LmVhY2goc3BlZWRzLCBmdW5jdGlvbihuYW1lLCBzcGVlZCkg
eworCQlwYXNzID0gdHJ1ZTsKKwkJZGl2LmhpZGUoKS5zaG93KHNwZWVkKS5lYWNoKGZ1bmN0aW9u
KCkgeworCQkJaWYgKCB0aGlzLnN0eWxlLmRpc3BsYXkgPT0gIm5vbmUiICkgcGFzcyA9IGZhbHNl
OworCQl9KTsKKwkJb2soIHBhc3MsICJTaG93IHdpdGggIiArIG5hbWUpOworCX0pOworCisJalF1
ZXJ5LmVhY2goc3BlZWRzLCBmdW5jdGlvbihuYW1lLCBzcGVlZCkgeworCXBhc3MgPSB0cnVlOwor
CWRpdi5oaWRlKCkuc2hvdyhzcGVlZCwgZnVuY3Rpb24oKSB7CisJCQlwYXNzID0gZmFsc2U7CisJ
CX0pOworCQlvayggcGFzcywgIlNob3cgd2l0aCAiICsgbmFtZSArICIgZG9lcyBub3QgY2FsbCBh
bmltYXRlIGNhbGxiYWNrIiApOworCX0pOworCisJLy8gI3Nob3ctdGVzdHMgKiBpcyBzZXQgZGlz
cGxheTogbm9uZSBpbiBDU1MKKwlqUXVlcnkoIiNtYWluIikuYXBwZW5kKCc8ZGl2IGlkPSJzaG93
LXRlc3RzIj48ZGl2PjxwPjxhIGhyZWY9IiMiPjwvYT48L3A+PGNvZGU+PC9jb2RlPjxwcmU+PC9w
cmU+PHNwYW4+PC9zcGFuPjwvZGl2Pjx0YWJsZT48dGhlYWQ+PHRyPjx0aD48L3RoPjwvdHI+PC90
aGVhZD48dGJvZHk+PHRyPjx0ZD48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjx1bD48bGk+PC9s
aT48L3VsPjwvZGl2Pjx0YWJsZSBpZD0idGVzdC10YWJsZSI+PC90YWJsZT4nKTsKKworCXZhciBv
bGQgPSBqUXVlcnkoIiN0ZXN0LXRhYmxlIikuc2hvdygpLmNzcygiZGlzcGxheSIpICE9PSAidGFi
bGUiOworCWpRdWVyeSgiI3Rlc3QtdGFibGUiKS5yZW1vdmUoKTsKKworCXZhciB0ZXN0ID0gewor
CQkiZGl2IiAgICAgIDogImJsb2NrIiwKKwkJInAiICAgICAgICA6ICJibG9jayIsCisJCSJhIiAg
ICAgICAgOiAiaW5saW5lIiwKKwkJImNvZGUiICAgICA6ICJpbmxpbmUiLAorCQkicHJlIiAgICAg
IDogImJsb2NrIiwKKwkJInNwYW4iICAgICA6ICJpbmxpbmUiLAorCQkidGFibGUiICAgIDogb2xk
ID8gImJsb2NrIiA6ICJ0YWJsZSIsCisJCSJ0aGVhZCIgICAgOiBvbGQgPyAiYmxvY2siIDogInRh
YmxlLWhlYWRlci1ncm91cCIsCisJCSJ0Ym9keSIgICAgOiBvbGQgPyAiYmxvY2siIDogInRhYmxl
LXJvdy1ncm91cCIsCisJCSJ0ciIgICAgICAgOiBvbGQgPyAiYmxvY2siIDogInRhYmxlLXJvdyIs
CisJCSJ0aCIgICAgICAgOiBvbGQgPyAiYmxvY2siIDogInRhYmxlLWNlbGwiLAorCQkidGQiICAg
ICAgIDogb2xkID8gImJsb2NrIiA6ICJ0YWJsZS1jZWxsIiwKKwkJInVsIiAgICAgICA6ICJibG9j
ayIsCisJCSJsaSIgICAgICAgOiBvbGQgPyAiYmxvY2siIDogImxpc3QtaXRlbSIKKwl9OworCisJ
alF1ZXJ5LmVhY2godGVzdCwgZnVuY3Rpb24oc2VsZWN0b3IsIGV4cGVjdGVkKSB7CisJCXZhciBl
bGVtID0galF1ZXJ5KHNlbGVjdG9yLCAiI3Nob3ctdGVzdHMiKS5zaG93KCk7CisJCWVxdWFscygg
ZWxlbS5jc3MoImRpc3BsYXkiKSwgZXhwZWN0ZWQsICJTaG93IHVzaW5nIGNvcnJlY3QgZGlzcGxh
eSB0eXBlIGZvciAiICsgc2VsZWN0b3IgKTsKKwl9KTsKK30pOworCit0ZXN0KCJzaG93KE51bWJl
cikgLSBvdGhlciBkaXNwbGF5cyIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgxNSk7CisJUVVuaXQu
cmVzZXQoKTsKKwlzdG9wKCk7CisKKwkvLyAjc2hvdy10ZXN0cyAqIGlzIHNldCBkaXNwbGF5OiBu
b25lIGluIENTUworCWpRdWVyeSgiI21haW4iKS5hcHBlbmQoJzxkaXYgaWQ9InNob3ctdGVzdHMi
PjxkaXY+PHA+PGEgaHJlZj0iIyI+PC9hPjwvcD48Y29kZT48L2NvZGU+PHByZT48L3ByZT48c3Bh
bj48L3NwYW4+PC9kaXY+PHRhYmxlPjx0aGVhZD48dHI+PHRoPjwvdGg+PC90cj48L3RoZWFkPjx0
Ym9keT48dHI+PHRkPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PHVsPjxsaT48L2xpPjwvdWw+
PC9kaXY+PHRhYmxlIGlkPSJ0ZXN0LXRhYmxlIj48L3RhYmxlPicpOworCisJdmFyIG9sZCA9IGpR
dWVyeSgiI3Rlc3QtdGFibGUiKS5zaG93KCkuY3NzKCJkaXNwbGF5IikgIT09ICJ0YWJsZSIsCisJ
CW51bSA9IDA7CisJalF1ZXJ5KCIjdGVzdC10YWJsZSIpLnJlbW92ZSgpOworCisJdmFyIHRlc3Qg
PSB7CisJCSJkaXYiICAgICAgOiAiYmxvY2siLAorCQkicCIgICAgICAgIDogImJsb2NrIiwKKwkJ
ImEiICAgICAgICA6ICJpbmxpbmUiLAorCQkiY29kZSIgICAgIDogImlubGluZSIsCisJCSJwcmUi
ICAgICAgOiAiYmxvY2siLAorCQkic3BhbiIgICAgIDogImlubGluZSIsCisJCSJ0YWJsZSIgICAg
OiBvbGQgPyAiYmxvY2siIDogInRhYmxlIiwKKwkJInRoZWFkIiAgICA6IG9sZCA/ICJibG9jayIg
OiAidGFibGUtaGVhZGVyLWdyb3VwIiwKKwkJInRib2R5IiAgICA6IG9sZCA/ICJibG9jayIgOiAi
dGFibGUtcm93LWdyb3VwIiwKKwkJInRyIiAgICAgICA6IG9sZCA/ICJibG9jayIgOiAidGFibGUt
cm93IiwKKwkJInRoIiAgICAgICA6IG9sZCA/ICJibG9jayIgOiAidGFibGUtY2VsbCIsCisJCSJ0
ZCIgICAgICAgOiBvbGQgPyAiYmxvY2siIDogInRhYmxlLWNlbGwiLAorCQkidWwiICAgICAgIDog
ImJsb2NrIiwKKwkJImxpIiAgICAgICA6IG9sZCA/ICJibG9jayIgOiAibGlzdC1pdGVtIgorCX07
CisKKwlqUXVlcnkuZWFjaCh0ZXN0LCBmdW5jdGlvbihzZWxlY3RvciwgZXhwZWN0ZWQpIHsKKwkJ
dmFyIGVsZW0gPSBqUXVlcnkoc2VsZWN0b3IsICIjc2hvdy10ZXN0cyIpLnNob3coMSwgZnVuY3Rp
b24oKSB7CisJCQllcXVhbHMoIGVsZW0uY3NzKCJkaXNwbGF5IiksIGV4cGVjdGVkLCAiU2hvdyB1
c2luZyBjb3JyZWN0IGRpc3BsYXkgdHlwZSBmb3IgIiArIHNlbGVjdG9yICk7CisJCQlpZiAoICsr
bnVtID09PSAxNSApIHsKKwkJCQlzdGFydCgpOworCQkJfQorCQl9KTsKKwl9KTsKK30pOworCisK
KworLy8gU3VwcG9ydHMgIzczOTcKK3Rlc3QoIlBlcnNpc3QgY29ycmVjdCBkaXNwbGF5IHZhbHVl
IiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDMpOworCVFVbml0LnJlc2V0KCk7CisJc3RvcCgpOwor
CisJLy8gI3Nob3ctdGVzdHMgKiBpcyBzZXQgZGlzcGxheTogbm9uZSBpbiBDU1MKKwlqUXVlcnko
IiNtYWluIikuYXBwZW5kKCc8ZGl2IGlkPSJzaG93LXRlc3RzIj48c3BhbiBzdHlsZT0icG9zaXRp
b246YWJzb2x1dGU7Ij5mb288L3NwYW4+PC9kaXY+Jyk7CisKKwl2YXIgJHNwYW4gPSBqUXVlcnko
IiNzaG93LXRlc3RzIHNwYW4iKSwKKwkJZGlzcGxheU5vbmUgPSAkc3Bhbi5jc3MoImRpc3BsYXki
KSwKKwkJZGlzcGxheSA9ICcnLCBudW0gPSAwOworCisJJHNwYW4uc2hvdygpOworCisJZGlzcGxh
eSA9ICRzcGFuLmNzcygiZGlzcGxheSIpOworCisJJHNwYW4uaGlkZSgpOworCisJJHNwYW4uZmFk
ZUluKDEwMCwgZnVuY3Rpb24oKSB7CisJCWVxdWFscygkc3Bhbi5jc3MoImRpc3BsYXkiKSwgZGlz
cGxheSwgIkV4cGVjdGluZyBkaXNwbGF5OiAiICsgZGlzcGxheSk7CisJCSRzcGFuLmZhZGVPdXQo
MTAwLCBmdW5jdGlvbiAoKSB7CisJCQllcXVhbHMoJHNwYW4uY3NzKCJkaXNwbGF5IiksIGRpc3Bs
YXlOb25lLCAiRXhwZWN0aW5nIGRpc3BsYXk6ICIgKyBkaXNwbGF5Tm9uZSk7CisJCQkkc3Bhbi5m
YWRlSW4oMTAwLCBmdW5jdGlvbigpIHsKKwkJCQllcXVhbHMoJHNwYW4uY3NzKCJkaXNwbGF5Iiks
IGRpc3BsYXksICJFeHBlY3RpbmcgZGlzcGxheTogIiArIGRpc3BsYXkpOworCQkJCXN0YXJ0KCk7
CisJCQl9KTsKKwkJfSk7CisJfSk7Cit9KTsKKwordGVzdCgiYW5pbWF0ZShIYXNoLCBPYmplY3Qs
IEZ1bmN0aW9uKSIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgxKTsKKwlzdG9wKCk7CisJdmFyIGhh
c2ggPSB7b3BhY2l0eTogJ3Nob3cnfTsKKwl2YXIgaGFzaENvcHkgPSBqUXVlcnkuZXh0ZW5kKHt9
LCBoYXNoKTsKKwlqUXVlcnkoJyNmb28nKS5hbmltYXRlKGhhc2gsIDAsIGZ1bmN0aW9uKCkgewor
CQllcXVhbHMoIGhhc2gub3BhY2l0eSwgaGFzaENvcHkub3BhY2l0eSwgJ0NoZWNrIGlmIGFuaW1h
dGUgY2hhbmdlZCB0aGUgaGFzaCBwYXJhbWV0ZXInICk7CisJCXN0YXJ0KCk7CisJfSk7Cit9KTsK
KwordGVzdCgiYW5pbWF0ZSBuZWdhdGl2ZSBoZWlnaHQiLCBmdW5jdGlvbigpIHsKKwlleHBlY3Qo
MSk7CisJc3RvcCgpOworCWpRdWVyeSgiI2ZvbyIpLmFuaW1hdGUoeyBoZWlnaHQ6IC0xMDAgfSwg
MTAwLCBmdW5jdGlvbigpIHsKKwkJZXF1YWxzKCB0aGlzLm9mZnNldEhlaWdodCwgMCwgIlZlcmlm
eSBoZWlnaHQuIiApOworCQlzdGFydCgpOworCX0pOworfSk7CisKK3Rlc3QoImFuaW1hdGUgYmxv
Y2sgYXMgaW5saW5lIHdpZHRoL2hlaWdodCIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgzKTsKKwor
CXZhciBzcGFuID0galF1ZXJ5KCI8c3Bhbj4iKS5jc3MoImRpc3BsYXkiLCAiaW5saW5lLWJsb2Nr
IikuYXBwZW5kVG8oImJvZHkiKSwKKwkJZXhwZWN0ZWQgPSBzcGFuLmNzcygiZGlzcGxheSIpOwor
CisJc3Bhbi5yZW1vdmUoKTsKKworCWlmICggalF1ZXJ5LnN1cHBvcnQuaW5saW5lQmxvY2tOZWVk
c0xheW91dCB8fCBleHBlY3RlZCA9PT0gImlubGluZS1ibG9jayIgKSB7CisJCXN0b3AoKTsKKwor
CQlqUXVlcnkoIiNmb28iKS5jc3MoeyBkaXNwbGF5OiAiaW5saW5lIiwgd2lkdGg6ICcnLCBoZWln
aHQ6ICcnIH0pLmFuaW1hdGUoeyB3aWR0aDogNDIsIGhlaWdodDogNDIgfSwgMTAwLCBmdW5jdGlv
bigpIHsKKwkJCWVxdWFscyggalF1ZXJ5KHRoaXMpLmNzcygiZGlzcGxheSIpLCBqUXVlcnkuc3Vw
cG9ydC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0ID8gImlubGluZSIgOiAiaW5saW5lLWJsb2NrIiwg
ImlubGluZS1ibG9jayB3YXMgc2V0IG9uIG5vbi1mbG9hdGVkIGlubGluZSBlbGVtZW50IHdoZW4g
YW5pbWF0aW5nIHdpZHRoL2hlaWdodCIgKTsKKwkJCWVxdWFscyggdGhpcy5vZmZzZXRXaWR0aCwg
NDIsICJ3aWR0aCB3YXMgYW5pbWF0ZWQiICk7CisJCQllcXVhbHMoIHRoaXMub2Zmc2V0SGVpZ2h0
LCA0MiwgImhlaWdodCB3YXMgYW5pbWF0ZWQiICk7CisJCQlzdGFydCgpOworCQl9KTsKKworCS8v
IEJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IGlubGluZS1ibG9jaworCX0gZWxzZSB7CisJCW9rKCB0
cnVlLCAiQnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgaW5saW5lLWJsb2NrIiApOworCQlvayggdHJ1
ZSwgIkJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IGlubGluZS1ibG9jayIgKTsKKwkJb2soIHRydWUs
ICJCcm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCBpbmxpbmUtYmxvY2siICk7CisJfQorfSk7CisKK3Rl
c3QoImFuaW1hdGUgbmF0aXZlIGlubGluZSB3aWR0aC9oZWlnaHQiLCBmdW5jdGlvbigpIHsKKwll
eHBlY3QoMyk7CisKKwl2YXIgc3BhbiA9IGpRdWVyeSgiPHNwYW4+IikuY3NzKCJkaXNwbGF5Iiwg
ImlubGluZS1ibG9jayIpLmFwcGVuZFRvKCJib2R5IiksCisJCWV4cGVjdGVkID0gc3Bhbi5jc3Mo
ImRpc3BsYXkiKTsKKworCXNwYW4ucmVtb3ZlKCk7CisKKwlpZiAoIGpRdWVyeS5zdXBwb3J0Lmlu
bGluZUJsb2NrTmVlZHNMYXlvdXQgfHwgZXhwZWN0ZWQgPT09ICJpbmxpbmUtYmxvY2siICkgewor
CQlzdG9wKCk7CisJCWpRdWVyeSgiI2ZvbyIpLmNzcyh7IGRpc3BsYXk6ICIiLCB3aWR0aDogJycs
IGhlaWdodDogJycgfSkKKwkJCS5hcHBlbmQoJzxzcGFuPnRleHQ8L3NwYW4+JykKKwkJCS5jaGls
ZHJlbignc3BhbicpCisJCQkJLmFuaW1hdGUoeyB3aWR0aDogNDIsIGhlaWdodDogNDIgfSwgMTAw
LCBmdW5jdGlvbigpIHsKKwkJCQkJZXF1YWxzKCBqUXVlcnkodGhpcykuY3NzKCJkaXNwbGF5Iiks
ICJpbmxpbmUtYmxvY2siLCAiaW5saW5lLWJsb2NrIHdhcyBzZXQgb24gbm9uLWZsb2F0ZWQgaW5s
aW5lIGVsZW1lbnQgd2hlbiBhbmltYXRpbmcgd2lkdGgvaGVpZ2h0IiApOworCQkJCQllcXVhbHMo
IHRoaXMub2Zmc2V0V2lkdGgsIDQyLCAid2lkdGggd2FzIGFuaW1hdGVkIiApOworCQkJCQllcXVh
bHMoIHRoaXMub2Zmc2V0SGVpZ2h0LCA0MiwgImhlaWdodCB3YXMgYW5pbWF0ZWQiICk7CisJCQkJ
CXN0YXJ0KCk7CisJCQkJfSk7CisKKwkvLyBCcm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCBpbmxpbmUt
YmxvY2sKKwl9IGVsc2UgeworCQlvayggdHJ1ZSwgIkJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IGlu
bGluZS1ibG9jayIgKTsKKwkJb2soIHRydWUsICJCcm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCBpbmxp
bmUtYmxvY2siICk7CisJCW9rKCB0cnVlLCAiQnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgaW5saW5l
LWJsb2NrIiApOworCX0KK30pOworCit0ZXN0KCJhbmltYXRlIGJsb2NrIHdpZHRoL2hlaWdodCIs
IGZ1bmN0aW9uKCkgeworCWV4cGVjdCgzKTsKKwlzdG9wKCk7CisJalF1ZXJ5KCIjZm9vIikuY3Nz
KHsgZGlzcGxheTogImJsb2NrIiwgd2lkdGg6IDIwLCBoZWlnaHQ6IDIwIH0pLmFuaW1hdGUoeyB3
aWR0aDogNDIsIGhlaWdodDogNDIgfSwgMTAwLCBmdW5jdGlvbigpIHsKKwkJZXF1YWxzKCBqUXVl
cnkodGhpcykuY3NzKCJkaXNwbGF5IiksICJibG9jayIsICJpbmxpbmUtYmxvY2sgd2FzIG5vdCBz
ZXQgb24gYmxvY2sgZWxlbWVudCB3aGVuIGFuaW1hdGluZyB3aWR0aC9oZWlnaHQiICk7CisJCWVx
dWFscyggdGhpcy5vZmZzZXRXaWR0aCwgNDIsICJ3aWR0aCB3YXMgYW5pbWF0ZWQiICk7CisJCWVx
dWFscyggdGhpcy5vZmZzZXRIZWlnaHQsIDQyLCAiaGVpZ2h0IHdhcyBhbmltYXRlZCIgKTsKKwkJ
c3RhcnQoKTsKKwl9KTsKK30pOworCit0ZXN0KCJhbmltYXRlIHRhYmxlIHdpZHRoL2hlaWdodCIs
IGZ1bmN0aW9uKCkgeworCWV4cGVjdCgxKTsKKwlzdG9wKCk7CisKKwl2YXIgZGlzcGxheU1vZGUg
PSBqUXVlcnkoIiN0YWJsZSIpLmNzcygiZGlzcGxheSIpICE9PSAidGFibGUiID8gImJsb2NrIiA6
ICJ0YWJsZSI7CisKKwlqUXVlcnkoIiN0YWJsZSIpLmFuaW1hdGUoeyB3aWR0aDogNDIsIGhlaWdo
dDogNDIgfSwgMTAwLCBmdW5jdGlvbigpIHsKKwkJZXF1YWxzKCBqUXVlcnkodGhpcykuY3NzKCJk
aXNwbGF5IiksIGRpc3BsYXlNb2RlLCAiZGlzcGxheSBtb2RlIGlzIGNvcnJlY3QiICk7CisJCXN0
YXJ0KCk7CisJfSk7Cit9KTsKKwordGVzdCgiYW5pbWF0ZSB0YWJsZS1yb3cgd2lkdGgvaGVpZ2h0
IiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDMpOworCXN0b3AoKTsKKwl2YXIgdHIgPSBqUXVlcnko
IiN0YWJsZSIpCisJCS5hdHRyKHsgImNlbGxzcGFjaW5nIjogMCwgImNlbGxwYWRkaW5nIjogMCwg
ImJvcmRlciI6IDAgfSkKKwkJLmh0bWwoIjx0ciBzdHlsZT0naGVpZ2h0OjQycHg7Jz48dGQgc3R5
bGU9J3BhZGRpbmc6MDsnPjxkaXYgc3R5bGU9J3dpZHRoOjIwcHg7aGVpZ2h0OjIwcHg7Jz48L2Rp
dj48L3RkPjwvdHI+IikKKwkJLmZpbmQoInRyIik7CisKKwkvLyBJRTw4IHVzZXMg4oCcYmxvY2vi
gJ0gaW5zdGVhZCBvZiB0aGUgY29ycmVjdCBkaXNwbGF5IHR5cGUKKwl2YXIgZGlzcGxheU1vZGUg
PSB0ci5jc3MoImRpc3BsYXkiKSAhPT0gInRhYmxlLXJvdyIgPyAiYmxvY2siIDogInRhYmxlLXJv
dyI7CisKKwl0ci5hbmltYXRlKHsgd2lkdGg6IDEwLCBoZWlnaHQ6IDEwIH0sIDEwMCwgZnVuY3Rp
b24oKSB7CisJCWVxdWFscyggalF1ZXJ5KHRoaXMpLmNzcygiZGlzcGxheSIpLCBkaXNwbGF5TW9k
ZSwgImRpc3BsYXkgbW9kZSBpcyBjb3JyZWN0IiApOworCQllcXVhbHMoIHRoaXMub2Zmc2V0V2lk
dGgsIDIwLCAid2lkdGggYW5pbWF0ZWQgdG8gc2hyaW5rIHdyYXAgcG9pbnQiICk7CisJCWVxdWFs
cyggdGhpcy5vZmZzZXRIZWlnaHQsIDIwLCAiaGVpZ2h0IGFuaW1hdGVkIHRvIHNocmluayB3cmFw
IHBvaW50IiApOworCQlzdGFydCgpOworCX0pOworfSk7CisKK3Rlc3QoImFuaW1hdGUgdGFibGUt
Y2VsbCB3aWR0aC9oZWlnaHQiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMyk7CisJc3RvcCgpOwor
CXZhciB0ZCA9IGpRdWVyeSgiI3RhYmxlIikKKwkJLmF0dHIoeyAiY2VsbHNwYWNpbmciOiAwLCAi
Y2VsbHBhZGRpbmciOiAwLCAiYm9yZGVyIjogMCB9KQorCQkuaHRtbCgiPHRyPjx0ZCBzdHlsZT0n
d2lkdGg6NDJweDtoZWlnaHQ6NDJweDtwYWRkaW5nOjA7Jz48ZGl2IHN0eWxlPSd3aWR0aDoyMHB4
O2hlaWdodDoyMHB4Oyc+PC9kaXY+PC90ZD48L3RyPiIpCisJCS5maW5kKCJ0ZCIpOworCisJLy8g
SUU8OCB1c2VzIOKAnGJsb2Nr4oCdIGluc3RlYWQgb2YgdGhlIGNvcnJlY3QgZGlzcGxheSB0eXBl
CisJdmFyIGRpc3BsYXlNb2RlID0gdGQuY3NzKCJkaXNwbGF5IikgIT09ICJ0YWJsZS1jZWxsIiA/
ICJibG9jayIgOiAidGFibGUtY2VsbCI7CisKKwl0ZC5hbmltYXRlKHsgd2lkdGg6IDEwLCBoZWln
aHQ6IDEwIH0sIDEwMCwgZnVuY3Rpb24oKSB7CisJCWVxdWFscyggalF1ZXJ5KHRoaXMpLmNzcygi
ZGlzcGxheSIpLCBkaXNwbGF5TW9kZSwgImRpc3BsYXkgbW9kZSBpcyBjb3JyZWN0IiApOworCQll
cXVhbHMoIHRoaXMub2Zmc2V0V2lkdGgsIDIwLCAid2lkdGggYW5pbWF0ZWQgdG8gc2hyaW5rIHdy
YXAgcG9pbnQiICk7CisJCWVxdWFscyggdGhpcy5vZmZzZXRIZWlnaHQsIDIwLCAiaGVpZ2h0IGFu
aW1hdGVkIHRvIHNocmluayB3cmFwIHBvaW50IiApOworCQlzdGFydCgpOworCX0pOworfSk7CisK
K3Rlc3QoImFuaW1hdGUgcmVzZXRzIG92ZXJmbG93LXggYW5kIG92ZXJmbG93LXkgd2hlbiBmaW5p
c2hlZCIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgyKTsKKwlzdG9wKCk7CisJalF1ZXJ5KCIjZm9v
IikKKwkJLmNzcyh7IGRpc3BsYXk6ICJibG9jayIsIHdpZHRoOiAyMCwgaGVpZ2h0OiAyMCwgb3Zl
cmZsb3dYOiAidmlzaWJsZSIsIG92ZXJmbG93WTogImF1dG8iIH0pCisJCS5hbmltYXRlKHsgd2lk
dGg6IDQyLCBoZWlnaHQ6IDQyIH0sIDEwMCwgZnVuY3Rpb24oKSB7CisJCQllcXVhbHMoIHRoaXMu
c3R5bGUub3ZlcmZsb3dYLCAidmlzaWJsZSIsICJvdmVyZmxvdy14IGlzIHZpc2libGUiICk7CisJ
CQllcXVhbHMoIHRoaXMuc3R5bGUub3ZlcmZsb3dZLCAiYXV0byIsICJvdmVyZmxvdy15IGlzIGF1
dG8iICk7CisJCQlzdGFydCgpOworCQl9KTsKK30pOworCisvKiAvLyBUaGlzIHRlc3QgZW5kcyB1
cCBiZWluZyBmbGFreSBkZXBlbmRpbmcgdXBvbiB0aGUgQ1BVIGxvYWQKK3Rlc3QoImFuaW1hdGUg
b3B0aW9uIChxdWV1ZSA9PT0gZmFsc2UpIiwgZnVuY3Rpb24gKCkgeworCWV4cGVjdCgxKTsKKwlz
dG9wKCk7CisKKwl2YXIgb3JkZXIgPSBbXTsKKworCXZhciAkZm9vID0galF1ZXJ5KCIjZm9vIik7
CisJJGZvby5hbmltYXRlKHt3aWR0aDonMTAwcHgnfSwgMzAwMCwgZnVuY3Rpb24gKCkgeworCQkv
LyBzaG91bGQgZmluaXNoIGFmdGVyIHVucXVldWVkIGFuaW1hdGlvbiBzbyBzZWNvbmQKKwkJb3Jk
ZXIucHVzaCgyKTsKKwkJc2FtZSggb3JkZXIsIFsgMSwgMiBdLCAiQW5pbWF0aW9ucyBmaW5pc2hl
ZCBpbiB0aGUgY29ycmVjdCBvcmRlciIgKTsKKwkJc3RhcnQoKTsKKwl9KTsKKwkkZm9vLmFuaW1h
dGUoe2ZvbnRTaXplOicyZW0nfSwge3F1ZXVlOmZhbHNlLCBkdXJhdGlvbjoxMCwgY29tcGxldGU6
ZnVuY3Rpb24gKCkgeworCQkvLyBzaG9ydCBkdXJhdGlvbiBhbmQgb3V0IG9mIHF1ZXVlIHNvIHNo
b3VsZCBmaW5pc2ggZmlyc3QKKwkJb3JkZXIucHVzaCgxKTsKKwl9fSk7Cit9KTsKKyovCisKK3Rl
c3QoImFuaW1hdGUgd2l0aCBubyBwcm9wZXJ0aWVzIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDIp
OworCisJdmFyIGRpdnMgPSBqUXVlcnkoImRpdiIpLCBjb3VudCA9IDA7CisKKwlkaXZzLmFuaW1h
dGUoe30sIGZ1bmN0aW9uKCl7CisJCWNvdW50Kys7CisJfSk7CisKKwllcXVhbHMoIGRpdnMubGVu
Z3RoLCBjb3VudCwgIk1ha2Ugc3VyZSB0aGF0IGNhbGxiYWNrIGlzIGNhbGxlZCBmb3IgZWFjaCBl
bGVtZW50IGluIHRoZSBzZXQuIiApOworCisJc3RvcCgpOworCisJdmFyIGZvbyA9IGpRdWVyeSgi
I2ZvbyIpOworCisJZm9vLmFuaW1hdGUoe30pOworCWZvby5hbmltYXRlKHt0b3A6IDEwfSwgMTAw
LCBmdW5jdGlvbigpeworCQlvayggdHJ1ZSwgIkFuaW1hdGlvbiB3YXMgcHJvcGVybHkgZGVxdWV1
ZWQuIiApOworCQlzdGFydCgpOworCX0pOworfSk7CisKK3Rlc3QoImFuaW1hdGUgZHVyYXRpb24g
MCIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgxMSk7CisKKwlzdG9wKCk7CisKKwl2YXIgJGVsZW1z
ID0galF1ZXJ5KFt7IGE6MCB9LHsgYTowIH1dKSwgY291bnRlciA9IDA7CisKKwllcXVhbHMoIGpR
dWVyeS50aW1lcnMubGVuZ3RoLCAwLCAiTWFrZSBzdXJlIG5vIGFuaW1hdGlvbiB3YXMgcnVubmlu
ZyBmcm9tIGFub3RoZXIgdGVzdCIgKTsKKworCSRlbGVtcy5lcSgwKS5hbmltYXRlKCB7YToxfSwg
MCwgZnVuY3Rpb24oKXsKKwkJb2soIHRydWUsICJBbmltYXRlIGEgc2ltcGxlIHByb3BlcnR5LiIg
KTsKKwkJY291bnRlcisrOworCX0pOworCisJLy8gRmFpbGVkIHVudGlsIFs2MTE1XQorCWVxdWFs
cyggalF1ZXJ5LnRpbWVycy5sZW5ndGgsIDAsICJNYWtlIHN1cmUgc3luY2hyb25pYyBhbmltYXRp
b25zIGFyZSBub3QgbGVmdCBvbiBqUXVlcnkudGltZXJzIiApOworCisJZXF1YWxzKCBjb3VudGVy
LCAxLCAiT25lIHN5bmNocm9uaWMgYW5pbWF0aW9ucyIgKTsKKworCSRlbGVtcy5hbmltYXRlKCB7
IGE6MiB9LCAwLCBmdW5jdGlvbigpeworCQlvayggdHJ1ZSwgIkFuaW1hdGUgYSBzZWNvbmQgc2lt
cGxlIHByb3BlcnR5LiIgKTsKKwkJY291bnRlcisrOworCX0pOworCisJZXF1YWxzKCBjb3VudGVy
LCAzLCAiTXVsdGlwbGUgc3luY2hyb25pYyBhbmltYXRpb25zIiApOworCisJJGVsZW1zLmVxKDAp
LmFuaW1hdGUoIHthOjN9LCAwLCBmdW5jdGlvbigpeworCQlvayggdHJ1ZSwgIkFuaW1hdGUgYSB0
aGlyZCBzaW1wbGUgcHJvcGVydHkuIiApOworCQljb3VudGVyKys7CisJfSk7CisJJGVsZW1zLmVx
KDEpLmFuaW1hdGUoIHthOjN9LCAyMDAsIGZ1bmN0aW9uKCl7CisJCWNvdW50ZXIrKzsKKwkJLy8g
RmFpbGVkIHVudGlsIFs2MTE1XQorCQllcXVhbHMoIGNvdW50ZXIsIDUsICJPbmUgc3luY2hyb25p
YyBhbmQgb25lIGFzeW5jaHJvbmljIiApOworCQlzdGFydCgpOworCX0pOworCisJdmFyICRlbGVt
ID0galF1ZXJ5KCI8ZGl2IC8+Iik7CisJJGVsZW0uc2hvdygwLCBmdW5jdGlvbigpeworCQlvayh0
cnVlLCAiU2hvdyBjYWxsYmFjayB3aXRoIG5vIGR1cmF0aW9uIik7CisJfSk7CisJJGVsZW0uaGlk
ZSgwLCBmdW5jdGlvbigpeworCQlvayh0cnVlLCAiSGlkZSBjYWxsYmFjayB3aXRoIG5vIGR1cmF0
aW9uIik7CisJfSk7CisKKwkvLyBtYW51YWxseSBjbGVhbiB1cCBkZXRhY2hlZCBlbGVtZW50cwor
CSRlbGVtLnJlbW92ZSgpOworfSk7CisKK3Rlc3QoImFuaW1hdGUgaHlwaGVuYXRlZCBwcm9wZXJ0
aWVzIiwgZnVuY3Rpb24oKXsKKwlleHBlY3QoMSk7CisJc3RvcCgpOworCisJalF1ZXJ5KCIjZm9v
IikKKwkJLmNzcygiZm9udC1zaXplIiwgMTApCisJCS5hbmltYXRlKHsiZm9udC1zaXplIjogMjB9
LCAyMDAsIGZ1bmN0aW9uKCl7CisJCQllcXVhbHMoIHRoaXMuc3R5bGUuZm9udFNpemUsICIyMHB4
IiwgIlRoZSBmb250LXNpemUgcHJvcGVydHkgd2FzIGFuaW1hdGVkLiIgKTsKKwkJCXN0YXJ0KCk7
CisJCX0pOworfSk7CisKK3Rlc3QoImFuaW1hdGUgbm9uLWVsZW1lbnQiLCBmdW5jdGlvbigpewor
CWV4cGVjdCgxKTsKKwlzdG9wKCk7CisKKwl2YXIgb2JqID0geyB0ZXN0OiAwIH07CisKKwlqUXVl
cnkob2JqKS5hbmltYXRlKHt0ZXN0OiAyMDB9LCAyMDAsIGZ1bmN0aW9uKCl7CisJCWVxdWFscygg
b2JqLnRlc3QsIDIwMCwgIlRoZSBjdXN0b20gcHJvcGVydHkgc2hvdWxkIGJlIG1vZGlmaWVkLiIg
KTsKKwkJc3RhcnQoKTsKKwl9KTsKK30pOworCit0ZXN0KCJzdG9wKCkiLCBmdW5jdGlvbigpIHsK
KwlleHBlY3QoMyk7CisJc3RvcCgpOworCisJdmFyICRmb28gPSBqUXVlcnkoIiNmb28iKTsKKwl2
YXIgdyA9IDA7CisJJGZvby5oaWRlKCkud2lkdGgoMjAwKS53aWR0aCgpOworCisJJGZvby5hbmlt
YXRlKHsgd2lkdGg6J3Nob3cnIH0sIDEwMDApOworCXNldFRpbWVvdXQoZnVuY3Rpb24oKXsKKwkJ
dmFyIG53ID0gJGZvby53aWR0aCgpOworCQlub3RFcXVhbCggbncsIHcsICJBbiBhbmltYXRpb24g
b2NjdXJyZWQgIiArIG53ICsgInB4ICIgKyB3ICsgInB4Iik7CisJCSRmb28uc3RvcCgpOworCisJ
CW53ID0gJGZvby53aWR0aCgpOworCQlub3RFcXVhbCggbncsIHcsICJTdG9wIGRpZG4ndCByZXNl
dCB0aGUgYW5pbWF0aW9uICIgKyBudyArICJweCAiICsgdyArICJweCIpOworCQlzZXRUaW1lb3V0
KGZ1bmN0aW9uKCl7CisJCQkkZm9vLnJlbW92ZURhdGEoKTsKKwkJCSRmb28ucmVtb3ZlRGF0YSh1
bmRlZmluZWQsIHRydWUpOworCQkJZXF1YWxzKCBudywgJGZvby53aWR0aCgpLCAiVGhlIGFuaW1h
dGlvbiBkaWRuJ3QgY29udGludWUiICk7CisJCQlzdGFydCgpOworCQl9LCAxMDApOworCX0sIDEw
MCk7Cit9KTsKKwordGVzdCgic3RvcCgpIC0gc2V2ZXJhbCBpbiBxdWV1ZSIsIGZ1bmN0aW9uKCkg
eworCWV4cGVjdCgzKTsKKwlzdG9wKCk7CisKKwl2YXIgJGZvbyA9IGpRdWVyeSgiI2ZvbyIpOwor
CXZhciB3ID0gMDsKKwkkZm9vLmhpZGUoKS53aWR0aCgyMDApLndpZHRoKCk7CisKKwkkZm9vLmFu
aW1hdGUoeyB3aWR0aDonc2hvdycgfSwgMTAwMCk7CisJJGZvby5hbmltYXRlKHsgd2lkdGg6J2hp
ZGUnIH0sIDEwMDApOworCSRmb28uYW5pbWF0ZSh7IHdpZHRoOidzaG93JyB9LCAxMDAwKTsKKwlz
ZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CisJCWVxdWFscyggJGZvby5xdWV1ZSgpLmxlbmd0aCwgMywg
IkFsbCAzIHN0aWxsIGluIHRoZSBxdWV1ZSIgKTsKKwkJdmFyIG53ID0gJGZvby53aWR0aCgpOwor
CQlub3RFcXVhbCggbncsIHcsICJBbiBhbmltYXRpb24gb2NjdXJyZWQgIiArIG53ICsgInB4ICIg
KyB3ICsgInB4Iik7CisJCSRmb28uc3RvcCgpOworCisJCW53ID0gJGZvby53aWR0aCgpOworCQlu
b3RFcXVhbCggbncsIHcsICJTdG9wIGRpZG4ndCByZXNldCB0aGUgYW5pbWF0aW9uICIgKyBudyAr
ICJweCAiICsgdyArICJweCIpOworCisJCSRmb28uc3RvcCh0cnVlKTsKKwkJc3RhcnQoKTsKKwl9
LCAxMDApOworfSk7CisKK3Rlc3QoInN0b3AoY2xlYXJRdWV1ZSkiLCBmdW5jdGlvbigpIHsKKwll
eHBlY3QoNCk7CisJc3RvcCgpOworCisJdmFyICRmb28gPSBqUXVlcnkoIiNmb28iKTsKKwl2YXIg
dyA9IDA7CisJJGZvby5oaWRlKCkud2lkdGgoMjAwKS53aWR0aCgpOworCisJJGZvby5hbmltYXRl
KHsgd2lkdGg6J3Nob3cnIH0sIDEwMDApOworCSRmb28uYW5pbWF0ZSh7IHdpZHRoOidoaWRlJyB9
LCAxMDAwKTsKKwkkZm9vLmFuaW1hdGUoeyB3aWR0aDonc2hvdycgfSwgMTAwMCk7CisJc2V0VGlt
ZW91dChmdW5jdGlvbigpeworCQl2YXIgbncgPSAkZm9vLndpZHRoKCk7CisJCW9rKCBudyAhPSB3
LCAiQW4gYW5pbWF0aW9uIG9jY3VycmVkICIgKyBudyArICJweCAiICsgdyArICJweCIpOworCQkk
Zm9vLnN0b3AodHJ1ZSk7CisKKwkJbncgPSAkZm9vLndpZHRoKCk7CisJCW9rKCBudyAhPSB3LCAi
U3RvcCBkaWRuJ3QgcmVzZXQgdGhlIGFuaW1hdGlvbiAiICsgbncgKyAicHggIiArIHcgKyAicHgi
KTsKKworCQllcXVhbHMoICRmb28ucXVldWUoKS5sZW5ndGgsIDAsICJUaGUgYW5pbWF0aW9uIHF1
ZXVlIHdhcyBjbGVhcmVkIiApOworCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CisJCQllcXVhbHMo
IG53LCAkZm9vLndpZHRoKCksICJUaGUgYW5pbWF0aW9uIGRpZG4ndCBjb250aW51ZSIgKTsKKwkJ
CXN0YXJ0KCk7CisJCX0sIDEwMCk7CisJfSwgMTAwKTsKK30pOworCit0ZXN0KCJzdG9wKGNsZWFy
UXVldWUsIGdvdG9FbmQpIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDEpOworCXN0b3AoKTsKKwor
CXZhciAkZm9vID0galF1ZXJ5KCIjZm9vIik7CisJdmFyIHcgPSAwOworCSRmb28uaGlkZSgpLndp
ZHRoKDIwMCkud2lkdGgoKTsKKworCSRmb28uYW5pbWF0ZSh7IHdpZHRoOidzaG93JyB9LCAxMDAw
KTsKKwkkZm9vLmFuaW1hdGUoeyB3aWR0aDonaGlkZScgfSwgMTAwMCk7CisJJGZvby5hbmltYXRl
KHsgd2lkdGg6J3Nob3cnIH0sIDEwMDApOworCSRmb28uYW5pbWF0ZSh7IHdpZHRoOidoaWRlJyB9
LCAxMDAwKTsKKwlzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CisJCXZhciBudyA9ICRmb28ud2lkdGgo
KTsKKwkJb2soIG53ICE9IHcsICJBbiBhbmltYXRpb24gb2NjdXJyZWQgIiArIG53ICsgInB4ICIg
KyB3ICsgInB4Iik7CisJCSRmb28uc3RvcChmYWxzZSwgdHJ1ZSk7CisKKwkJbncgPSAkZm9vLndp
ZHRoKCk7CisJCS8vIERpc2FibGVkLCBiZWluZyBmbGFreQorCQkvL2VxdWFscyggbncsIDEsICJT
dG9wKCkgcmVzZXQgdGhlIGFuaW1hdGlvbiIgKTsKKworCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7
CisJCQkvLyBEaXNhYmxlZCwgYmVpbmcgZmxha3kKKwkJCS8vZXF1YWxzKCAkZm9vLnF1ZXVlKCku
bGVuZ3RoLCAyLCAiVGhlIG5leHQgYW5pbWF0aW9uIGNvbnRpbnVlZCIgKTsKKwkJCSRmb28uc3Rv
cCh0cnVlKTsKKwkJCXN0YXJ0KCk7CisJCX0sIDEwMCk7CisJfSwgMTAwKTsKK30pOworCit0ZXN0
KCJ0b2dnbGUoKSIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCg2KTsKKwl2YXIgeCA9IGpRdWVyeSgi
I2ZvbyIpOworCW9rKCB4LmlzKCI6dmlzaWJsZSIpLCAiaXMgdmlzaWJsZSIgKTsKKwl4LnRvZ2ds
ZSgpOworCW9rKCB4LmlzKCI6aGlkZGVuIiksICJpcyBoaWRkZW4iICk7CisJeC50b2dnbGUoKTsK
KwlvayggeC5pcygiOnZpc2libGUiKSwgImlzIHZpc2libGUgYWdhaW4iICk7CisKKwl4LnRvZ2ds
ZSh0cnVlKTsKKwlvayggeC5pcygiOnZpc2libGUiKSwgImlzIHZpc2libGUiICk7CisJeC50b2dn
bGUoZmFsc2UpOworCW9rKCB4LmlzKCI6aGlkZGVuIiksICJpcyBoaWRkZW4iICk7CisJeC50b2dn
bGUodHJ1ZSk7CisJb2soIHguaXMoIjp2aXNpYmxlIiksICJpcyB2aXNpYmxlIGFnYWluIiApOwor
fSk7CisKK2pRdWVyeS5jaGVja092ZXJmbG93RGlzcGxheSA9IGZ1bmN0aW9uKCl7CisJdmFyIG8g
PSBqUXVlcnkuY3NzKCB0aGlzLCAib3ZlcmZsb3ciICk7CisKKwllcXVhbHMobywgInZpc2libGUi
LCAiT3ZlcmZsb3cgc2hvdWxkIGJlIHZpc2libGU6ICIgKyBvKTsKKwllcXVhbHMoalF1ZXJ5LmNz
cyggdGhpcywgImRpc3BsYXkiICksICJpbmxpbmUiLCAiRGlzcGxheSBzaG91bGRuJ3QgYmUgdGFt
cGVyZWQgd2l0aC4iKTsKKworCXN0YXJ0KCk7Cit9CisKK3Rlc3QoICJqUXVlcnkuZngucHJvdG90
eXBlLmN1cigpIiwgNiwgZnVuY3Rpb24oKSB7CisJdmFyIGRpdiA9IGpRdWVyeSggIjxkaXY+PC9k
aXY+IiApLmFwcGVuZFRvKCAiI21haW4iICkuY3NzKHsKKwkJCWNvbG9yOiAiI0FCQyIsCisJCQli
b3JkZXI6ICI1cHggc29saWQgYmxhY2siLAorCQkJbGVmdDogImF1dG8iLAorCQkJbWFyZ2luQm90
dG9tOiAiLTExMDAwcHgiCisJCX0pWzBdOworCisJZXF1YWxzKAorCQkoIG5ldyBqUXVlcnkuZngo
IGRpdiwge30sICJjb2xvciIgKSApLmN1cigpLAorCQlqUXVlcnkuY3NzKCBkaXYsICJjb2xvciIg
KSwKKwkJIlJldHVybiB0aGUgc2FtZSB2YWx1ZSBhcyBqUXVlcnkuY3NzIGZvciBjb21wbGV4IHBy
b3BlcnRpZXMgKGJ1ZyAjNzkxMikiCisJKTsKKworCXN0cmljdEVxdWFsKAorCQkoIG5ldyBqUXVl
cnkuZngoIGRpdiwge30sICJib3JkZXJMZWZ0V2lkdGgiICkgKS5jdXIoKSwKKwkJNSwKKwkJIlJl
dHVybiBzaW1wbGUgdmFsdWVzIHBhcnNlZCBhcyBGbG9hdCIKKwkpOworCisJLy8gYmFja2dyb3Vu
ZFBvc2l0aW9uIGFjdHVhbGx5IHJldHVybnMgMCUgMCUgaW4gbW9zdCBicm93c2VyCisJLy8gdGhp
cyBmYWtlcyBhICIiIHJldHVybgorCWpRdWVyeS5jc3NIb29rcy5iYWNrZ3JvdW5kUG9zaXRpb24g
PSB7CisJCWdldDogZnVuY3Rpb24oKSB7CisJCQlvayggdHJ1ZSwgImhvb2sgdXNlZCIgKTsKKwkJ
CXJldHVybiAiIjsKKwkJfQorCX07CisKKwlzdHJpY3RFcXVhbCgKKwkJKCBuZXcgalF1ZXJ5LmZ4
KCBkaXYsIHt9LCAiYmFja2dyb3VuZFBvc2l0aW9uIiApICkuY3VyKCksCisJCTAsCisJCSJSZXR1
cm4gMCB3aGVuIGpRdWVyeS5jc3MgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmciCisJKTsKKworCWRl
bGV0ZSBqUXVlcnkuY3NzSG9va3MuYmFja2dyb3VuZFBvc2l0aW9uOworCisJc3RyaWN0RXF1YWwo
CisJCSggbmV3IGpRdWVyeS5meCggZGl2LCB7fSwgImxlZnQiICkgKS5jdXIoKSwKKwkJMCwKKwkJ
IlJldHVybiAwIHdoZW4galF1ZXJ5LmNzcyByZXR1cm5zICdhdXRvJyIKKwkpOworCisJZXF1YWxz
KAorCQkoIG5ldyBqUXVlcnkuZngoIGRpdiwge30sICJtYXJnaW5Cb3R0b20iICkgKS5jdXIoKSwK
KwkJLTExMDAwLAorCQkic3VwcG9ydCBuZWdhdGl2ZSB2YWx1ZXMgPCAtMTAwMDAgKGJ1ZyAjNzE5
MykiCisJKTsKK30pOworCit0ZXN0KCJKUyBPdmVyZmxvdyBhbmQgRGlzcGxheSIsIGZ1bmN0aW9u
KCkgeworCWV4cGVjdCgyKTsKKwlzdG9wKCk7CisJalF1ZXJ5Lm1ha2VUZXN0KCAiSlMgT3ZlcmZs
b3cgYW5kIERpc3BsYXkiICkKKwkJLmFkZENsYXNzKCJ3aWRld2lkdGgiKQorCQkuY3NzKHsgb3Zl
cmZsb3c6ICJ2aXNpYmxlIiwgZGlzcGxheTogImlubGluZSIgfSkKKwkJLmFkZENsYXNzKCJ3aWRl
d2lkdGgiKQorCQkudGV4dCgiU29tZSBzYW1wbGUgdGV4dC4iKQorCQkuYmVmb3JlKCJ0ZXh0IGJl
Zm9yZSIpCisJCS5hZnRlcigidGV4dCBhZnRlciIpCisJCS5hbmltYXRlKHsgb3BhY2l0eTogMC41
IH0sICJzbG93IiwgalF1ZXJ5LmNoZWNrT3ZlcmZsb3dEaXNwbGF5KTsKK30pOworCit0ZXN0KCJD
U1MgT3ZlcmZsb3cgYW5kIERpc3BsYXkiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMik7CisJc3Rv
cCgpOworCWpRdWVyeS5tYWtlVGVzdCggIkNTUyBPdmVyZmxvdyBhbmQgRGlzcGxheSIgKQorCQku
YWRkQ2xhc3MoIm92ZXJmbG93IGlubGluZSIpCisJCS5hZGRDbGFzcygid2lkZXdpZHRoIikKKwkJ
LnRleHQoIlNvbWUgc2FtcGxlIHRleHQuIikKKwkJLmJlZm9yZSgidGV4dCBiZWZvcmUiKQorCQku
YWZ0ZXIoInRleHQgYWZ0ZXIiKQorCQkuYW5pbWF0ZSh7IG9wYWNpdHk6IDAuNSB9LCAic2xvdyIs
IGpRdWVyeS5jaGVja092ZXJmbG93RGlzcGxheSk7Cit9KTsKKworalF1ZXJ5LmVhY2goIHsKKwki
Q1NTIEF1dG8iOiBmdW5jdGlvbihlbGVtLHByb3ApeworCQlqUXVlcnkoZWxlbSkuYWRkQ2xhc3Mo
ImF1dG8iICsgcHJvcCkKKwkJCS50ZXh0KCJUaGlzIGlzIGEgbG9uZyBzdHJpbmcgb2YgdGV4dC4i
KTsKKwkJcmV0dXJuICIiOworCX0sCisJIkpTIEF1dG8iOiBmdW5jdGlvbihlbGVtLHByb3Apewor
CQlqUXVlcnkoZWxlbSkuY3NzKHByb3AsIiIpCisJCQkudGV4dCgiVGhpcyBpcyBhIGxvbmcgc3Ry
aW5nIG9mIHRleHQuIik7CisJCXJldHVybiAiIjsKKwl9LAorCSJDU1MgMTAwIjogZnVuY3Rpb24o
ZWxlbSxwcm9wKXsKKwkJalF1ZXJ5KGVsZW0pLmFkZENsYXNzKCJsYXJnZSIgKyBwcm9wKTsKKwkJ
cmV0dXJuICIiOworCX0sCisJIkpTIDEwMCI6IGZ1bmN0aW9uKGVsZW0scHJvcCl7CisJCWpRdWVy
eShlbGVtKS5jc3MocHJvcCxwcm9wID09ICJvcGFjaXR5IiA/IDEgOiAiMTAwcHgiKTsKKwkJcmV0
dXJuIHByb3AgPT0gIm9wYWNpdHkiID8gMSA6IDEwMDsKKwl9LAorCSJDU1MgNTAiOiBmdW5jdGlv
bihlbGVtLHByb3ApeworCQlqUXVlcnkoZWxlbSkuYWRkQ2xhc3MoIm1lZCIgKyBwcm9wKTsKKwkJ
cmV0dXJuICIiOworCX0sCisJIkpTIDUwIjogZnVuY3Rpb24oZWxlbSxwcm9wKXsKKwkJalF1ZXJ5
KGVsZW0pLmNzcyhwcm9wLHByb3AgPT0gIm9wYWNpdHkiID8gMC41MCA6ICI1MHB4Iik7CisJCXJl
dHVybiBwcm9wID09ICJvcGFjaXR5IiA/IDAuNSA6IDUwOworCX0sCisJIkNTUyAwIjogZnVuY3Rp
b24oZWxlbSxwcm9wKXsKKwkJalF1ZXJ5KGVsZW0pLmFkZENsYXNzKCJubyIgKyBwcm9wKTsKKwkJ
cmV0dXJuICIiOworCX0sCisJIkpTIDAiOiBmdW5jdGlvbihlbGVtLHByb3ApeworCQlqUXVlcnko
ZWxlbSkuY3NzKHByb3AscHJvcCA9PSAib3BhY2l0eSIgPyAwIDogIjBweCIpOworCQlyZXR1cm4g
MDsKKwl9Cit9LCBmdW5jdGlvbihmbiwgZil7CisJalF1ZXJ5LmVhY2goIHsKKwkJInNob3ciOiBm
dW5jdGlvbihlbGVtLHByb3ApeworCQkJalF1ZXJ5KGVsZW0pLmhpZGUoKS5hZGRDbGFzcygid2lk
ZSIrcHJvcCk7CisJCQlyZXR1cm4gInNob3ciOworCQl9LAorCQkiaGlkZSI6IGZ1bmN0aW9uKGVs
ZW0scHJvcCl7CisJCQlqUXVlcnkoZWxlbSkuYWRkQ2xhc3MoIndpZGUiK3Byb3ApOworCQkJcmV0
dXJuICJoaWRlIjsKKwkJfSwKKwkJIjEwMCI6IGZ1bmN0aW9uKGVsZW0scHJvcCl7CisJCQlqUXVl
cnkoZWxlbSkuYWRkQ2xhc3MoIndpZGUiK3Byb3ApOworCQkJcmV0dXJuIHByb3AgPT0gIm9wYWNp
dHkiID8gMSA6IDEwMDsKKwkJfSwKKwkJIjUwIjogZnVuY3Rpb24oZWxlbSxwcm9wKXsKKwkJCXJl
dHVybiBwcm9wID09ICJvcGFjaXR5IiA/IDAuNTAgOiA1MDsKKwkJfSwKKwkJIjAiOiBmdW5jdGlv
bihlbGVtLHByb3ApeworCQkJalF1ZXJ5KGVsZW0pLmFkZENsYXNzKCJub2JhY2siKTsKKwkJCXJl
dHVybiAwOworCQl9CisJfSwgZnVuY3Rpb24odG4sIHQpeworCQl0ZXN0KGZuICsgIiB0byAiICsg
dG4sIGZ1bmN0aW9uKCkgeworCQkJdmFyIGVsZW0gPSBqUXVlcnkubWFrZVRlc3QoIGZuICsgIiB0
byAiICsgdG4gKTsKKworCQkJdmFyIHRfdyA9IHQoIGVsZW0sICJ3aWR0aCIgKTsKKwkJCXZhciBm
X3cgPSBmKCBlbGVtLCAid2lkdGgiICk7CisJCQl2YXIgdF9oID0gdCggZWxlbSwgImhlaWdodCIg
KTsKKwkJCXZhciBmX2ggPSBmKCBlbGVtLCAiaGVpZ2h0IiApOworCQkJdmFyIHRfbyA9IHQoIGVs
ZW0sICJvcGFjaXR5IiApOworCQkJdmFyIGZfbyA9IGYoIGVsZW0sICJvcGFjaXR5IiApOworCisJ
CQl2YXIgbnVtID0gMDsKKworCQkJaWYgKCB0X2ggPT0gInNob3ciICkgbnVtKys7CisJCQlpZiAo
IHRfdyA9PSAic2hvdyIgKSBudW0rKzsKKwkJCWlmICggdF93ID09ICJoaWRlInx8dF93ID09ICJz
aG93IiApIG51bSsrOworCQkJaWYgKCB0X2ggPT0gImhpZGUifHx0X2ggPT0gInNob3ciICkgbnVt
Kys7CisJCQlpZiAoIHRfbyA9PSAiaGlkZSJ8fHRfbyA9PSAic2hvdyIgKSBudW0rKzsKKwkJCWlm
ICggdF93ID09ICJoaWRlIiApIG51bSsrOworCQkJaWYgKCB0X28uY29uc3RydWN0b3IgPT0gTnVt
YmVyICkgbnVtICs9IDI7CisJCQlpZiAoIHRfdy5jb25zdHJ1Y3RvciA9PSBOdW1iZXIgKSBudW0g
Kz0gMjsKKwkJCWlmICggdF9oLmNvbnN0cnVjdG9yID09IE51bWJlciApIG51bSArPTI7CisKKwkJ
CWV4cGVjdChudW0pOworCQkJc3RvcCgpOworCisJCQl2YXIgYW5pbSA9IHsgd2lkdGg6IHRfdywg
aGVpZ2h0OiB0X2gsIG9wYWNpdHk6IHRfbyB9OworCisJCQllbGVtLmFuaW1hdGUoYW5pbSwgNTAs
IGZ1bmN0aW9uKCl7CisJCQkJaWYgKCB0X3cgPT0gInNob3ciICkKKwkJCQkJZXF1YWxzKCB0aGlz
LnN0eWxlLmRpc3BsYXksICJibG9jayIsICJTaG93aW5nLCBkaXNwbGF5IHNob3VsZCBibG9jazog
IiArIHRoaXMuc3R5bGUuZGlzcGxheSk7CisKKwkJCQlpZiAoIHRfdyA9PSAiaGlkZSJ8fHRfdyA9
PSAic2hvdyIgKQorCQkJCQlvayhmX3cgPT09ICIiID8gdGhpcy5zdHlsZS53aWR0aCA9PT0gZl93
IDogdGhpcy5zdHlsZS53aWR0aC5pbmRleE9mKGZfdykgPT09IDAsICJXaWR0aCBtdXN0IGJlIHJl
c2V0IHRvICIgKyBmX3cgKyAiOiAiICsgdGhpcy5zdHlsZS53aWR0aCk7CisKKwkJCQlpZiAoIHRf
aCA9PSAiaGlkZSJ8fHRfaCA9PSAic2hvdyIgKQorCQkJCQlvayhmX2ggPT09ICIiID8gdGhpcy5z
dHlsZS5oZWlnaHQgPT09IGZfaCA6IHRoaXMuc3R5bGUuaGVpZ2h0LmluZGV4T2YoZl9oKSA9PT0g
MCwgIkhlaWdodCBtdXN0IGJlIHJlc2V0IHRvICIgKyBmX2ggKyAiOiAiICsgdGhpcy5zdHlsZS5o
ZWlnaHQpOworCisJCQkJdmFyIGN1cl9vID0galF1ZXJ5LnN0eWxlKHRoaXMsICJvcGFjaXR5Iik7
CisKKwkJCQlpZiAoIHRfbyA9PSAiaGlkZSIgfHwgdF9vID09ICJzaG93IiApCisJCQkJCWVxdWFs
cyhjdXJfbywgZl9vLCAiT3BhY2l0eSBtdXN0IGJlIHJlc2V0IHRvICIgKyBmX28gKyAiOiAiICsg
Y3VyX28pOworCisJCQkJaWYgKCB0X3cgPT0gImhpZGUiICkKKwkJCQkJZXF1YWxzKHRoaXMuc3R5
bGUuZGlzcGxheSwgIm5vbmUiLCAiSGlkaW5nLCBkaXNwbGF5IHNob3VsZCBiZSBub25lOiAiICsg
dGhpcy5zdHlsZS5kaXNwbGF5KTsKKworCQkJCWlmICggdF9vLmNvbnN0cnVjdG9yID09IE51bWJl
ciApIHsKKwkJCQkJZXF1YWxzKGN1cl9vLCB0X28sICJGaW5hbCBvcGFjaXR5IHNob3VsZCBiZSAi
ICsgdF9vICsgIjogIiArIGN1cl9vKTsKKworCQkJCQlvayhqUXVlcnkuY3NzKHRoaXMsICJvcGFj
aXR5IikgIT0gIiIgfHwgY3VyX28gPT0gdF9vLCAiT3BhY2l0eSBzaG91bGQgYmUgZXhwbGljaXRs
eSBzZXQgdG8gIiArIHRfbyArICIsIGlzIGluc3RlYWQ6ICIgKyBjdXJfbyk7CisJCQkJfQorCisJ
CQkJaWYgKCB0X3cuY29uc3RydWN0b3IgPT0gTnVtYmVyICkgeworCQkJCQllcXVhbHModGhpcy5z
dHlsZS53aWR0aCwgdF93ICsgInB4IiwgIkZpbmFsIHdpZHRoIHNob3VsZCBiZSAiICsgdF93ICsg
IjogIiArIHRoaXMuc3R5bGUud2lkdGgpOworCisJCQkJCXZhciBjdXJfdyA9IGpRdWVyeS5jc3Mo
dGhpcywid2lkdGgiKTsKKworCQkJCQlvayh0aGlzLnN0eWxlLndpZHRoICE9ICIiIHx8IGN1cl93
ID09IHRfdywgIldpZHRoIHNob3VsZCBiZSBleHBsaWNpdGx5IHNldCB0byAiICsgdF93ICsgIiwg
aXMgaW5zdGVhZDogIiArIGN1cl93KTsKKwkJCQl9CisKKwkJCQlpZiAoIHRfaC5jb25zdHJ1Y3Rv
ciA9PSBOdW1iZXIgKSB7CisJCQkJCWVxdWFscyh0aGlzLnN0eWxlLmhlaWdodCwgdF9oICsgInB4
IiwgIkZpbmFsIGhlaWdodCBzaG91bGQgYmUgIiArIHRfaCArICI6ICIgKyB0aGlzLnN0eWxlLmhl
aWdodCk7CisKKwkJCQkJdmFyIGN1cl9oID0galF1ZXJ5LmNzcyh0aGlzLCJoZWlnaHQiKTsKKwor
CQkJCQlvayh0aGlzLnN0eWxlLmhlaWdodCAhPSAiIiB8fCBjdXJfaCA9PSB0X2gsICJIZWlnaHQg
c2hvdWxkIGJlIGV4cGxpY2l0bHkgc2V0IHRvICIgKyB0X2ggKyAiLCBpcyBpbnN0ZWFkOiAiICsg
Y3VyX3cpOworCQkJCX0KKworCQkJCWlmICggdF9oID09ICJzaG93IiApIHsKKwkJCQkJdmFyIG9s
ZF9oID0galF1ZXJ5LmNzcyh0aGlzLCAiaGVpZ2h0Iik7CisJCQkJCWpRdWVyeSh0aGlzKS5hcHBl
bmQoIjxici8+U29tZSBtb3JlIHRleHQ8YnIvPmFuZCBzb21lIG1vcmUuLi4iKTsKKworCQkJCQlp
ZiAoIC9BdXRvLy50ZXN0KCBmbiApICkgeworCQkJCQkJbm90RXF1YWwoalF1ZXJ5LmNzcyh0aGlz
LCAiaGVpZ2h0IiksIG9sZF9oLCAiTWFrZSBzdXJlIGhlaWdodCBpcyBhdXRvLiIpOworCQkJCQl9
IGVsc2UgeworCQkJCQkJZXF1YWxzKGpRdWVyeS5jc3ModGhpcywgImhlaWdodCIpLCBvbGRfaCwg
Ik1ha2Ugc3VyZSBoZWlnaHQgaXMgbm90IGF1dG8uIik7CisJCQkJCX0KKwkJCQl9CisKKwkJCQkv
LyBtYW51YWxseSByZW1vdmUgZ2VuZXJhdGVkIGVsZW1lbnQKKwkJCQlqUXVlcnkodGhpcykucmVt
b3ZlKCk7CisKKwkJCQlzdGFydCgpOworCQkJfSk7CisJCX0pOworCX0pOworfSk7CisKK2pRdWVy
eS5mbi5zYXZlU3RhdGUgPSBmdW5jdGlvbihoaWRkZW5PdmVyZmxvdyl7CisJdmFyIGNoZWNrID0g
WydvcGFjaXR5JywnaGVpZ2h0Jywnd2lkdGgnLCdkaXNwbGF5Jywnb3ZlcmZsb3cnXTsKKwlleHBl
Y3QoY2hlY2subGVuZ3RoKTsKKworCXN0b3AoKTsKKwlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9u
KCl7CisJCXZhciBzZWxmID0gdGhpczsKKwkJc2VsZi5zYXZlID0ge307CisJCWpRdWVyeS5lYWNo
KGNoZWNrLCBmdW5jdGlvbihpLGMpeworCQkJc2VsZi5zYXZlW2NdID0gYyA9PT0gIm92ZXJmbG93
IiAmJiBoaWRkZW5PdmVyZmxvdyA/ICJoaWRkZW4iIDogc2VsZi5zdHlsZVsgYyBdIHx8IGpRdWVy
eS5jc3Moc2VsZixjKTsKKwkJfSk7CisJfSk7Cit9OworCitqUXVlcnkuY2hlY2tTdGF0ZSA9IGZ1
bmN0aW9uKCl7CisJdmFyIHNlbGYgPSB0aGlzOworCWpRdWVyeS5lYWNoKHRoaXMuc2F2ZSwgZnVu
Y3Rpb24oYyx2KXsKKwkJdmFyIGN1ciA9IHNlbGYuc3R5bGVbIGMgXSB8fCBqUXVlcnkuY3NzKHNl
bGYsIGMpOworCQllcXVhbHMoIGN1ciwgdiwgIk1ha2Ugc3VyZSB0aGF0ICIgKyBjICsgIiBpcyBy
ZXNldCAoT2xkOiAiICsgdiArICIgQ3VyOiAiICsgY3VyICsgIikiKTsKKwl9KTsKKworCS8vIG1h
bnVhbGx5IGNsZWFuIGRhdGEgb24gbW9kaWZpZWQgZWxlbWVudAorCWpRdWVyeS5yZW1vdmVEYXRh
KHRoaXMsICdvbGRkaXNwbGF5JywgdHJ1ZSk7CisKKwlzdGFydCgpOworfQorCisvLyBDaGFpbmlu
ZyBUZXN0cwordGVzdCgiQ2hhaW4gZmFkZU91dCBmYWRlSW4iLCBmdW5jdGlvbigpIHsKKwlqUXVl
cnkoJyNmYWRlaW4gZGl2Jykuc2F2ZVN0YXRlKCkuZmFkZU91dCgnZmFzdCcpLmZhZGVJbignZmFz
dCcsalF1ZXJ5LmNoZWNrU3RhdGUpOworfSk7Cit0ZXN0KCJDaGFpbiBmYWRlSW4gZmFkZU91dCIs
IGZ1bmN0aW9uKCkgeworCWpRdWVyeSgnI2ZhZGVvdXQgZGl2Jykuc2F2ZVN0YXRlKCkuZmFkZUlu
KCdmYXN0JykuZmFkZU91dCgnZmFzdCcsalF1ZXJ5LmNoZWNrU3RhdGUpOworfSk7CisKK3Rlc3Qo
IkNoYWluIGhpZGUgc2hvdyIsIGZ1bmN0aW9uKCkgeworCWpRdWVyeSgnI3Nob3cgZGl2Jykuc2F2
ZVN0YXRlKGpRdWVyeS5zdXBwb3J0LnNocmlua1dyYXBCbG9ja3MpLmhpZGUoJ2Zhc3QnKS5zaG93
KCdmYXN0JyxqUXVlcnkuY2hlY2tTdGF0ZSk7Cit9KTsKK3Rlc3QoIkNoYWluIHNob3cgaGlkZSIs
IGZ1bmN0aW9uKCkgeworCWpRdWVyeSgnI2hpZGUgZGl2Jykuc2F2ZVN0YXRlKGpRdWVyeS5zdXBw
b3J0LnNocmlua1dyYXBCbG9ja3MpLnNob3coJ2Zhc3QnKS5oaWRlKCdmYXN0JyxqUXVlcnkuY2hl
Y2tTdGF0ZSk7Cit9KTsKK3Rlc3QoIkNoYWluIHNob3cgaGlkZSB3aXRoIGVhc2luZyBhbmQgY2Fs
bGJhY2siLCBmdW5jdGlvbigpIHsKKwlqUXVlcnkoJyNoaWRlIGRpdicpLnNhdmVTdGF0ZSgpLnNo
b3coJ2Zhc3QnKS5oaWRlKCdmYXN0JywnbGluZWFyJyxqUXVlcnkuY2hlY2tTdGF0ZSk7Cit9KTsK
KwordGVzdCgiQ2hhaW4gdG9nZ2xlIGluIiwgZnVuY3Rpb24oKSB7CisJalF1ZXJ5KCcjdG9nZ2xl
aW4gZGl2Jykuc2F2ZVN0YXRlKGpRdWVyeS5zdXBwb3J0LnNocmlua1dyYXBCbG9ja3MpLnRvZ2ds
ZSgnZmFzdCcpLnRvZ2dsZSgnZmFzdCcsalF1ZXJ5LmNoZWNrU3RhdGUpOworfSk7Cit0ZXN0KCJD
aGFpbiB0b2dnbGUgb3V0IiwgZnVuY3Rpb24oKSB7CisJalF1ZXJ5KCcjdG9nZ2xlb3V0IGRpdicp
LnNhdmVTdGF0ZShqUXVlcnkuc3VwcG9ydC5zaHJpbmtXcmFwQmxvY2tzKS50b2dnbGUoJ2Zhc3Qn
KS50b2dnbGUoJ2Zhc3QnLGpRdWVyeS5jaGVja1N0YXRlKTsKK30pOwordGVzdCgiQ2hhaW4gdG9n
Z2xlIG91dCB3aXRoIGVhc2luZyBhbmQgY2FsbGJhY2siLCBmdW5jdGlvbigpIHsKKwlqUXVlcnko
JyN0b2dnbGVvdXQgZGl2Jykuc2F2ZVN0YXRlKGpRdWVyeS5zdXBwb3J0LnNocmlua1dyYXBCbG9j
a3MpLnRvZ2dsZSgnZmFzdCcpLnRvZ2dsZSgnZmFzdCcsJ2xpbmVhcicsalF1ZXJ5LmNoZWNrU3Rh
dGUpOworfSk7Cit0ZXN0KCJDaGFpbiBzbGlkZURvd24gc2xpZGVVcCIsIGZ1bmN0aW9uKCkgewor
CWpRdWVyeSgnI3NsaWRlZG93biBkaXYnKS5zYXZlU3RhdGUoalF1ZXJ5LnN1cHBvcnQuc2hyaW5r
V3JhcEJsb2Nrcykuc2xpZGVEb3duKCdmYXN0Jykuc2xpZGVVcCgnZmFzdCcsalF1ZXJ5LmNoZWNr
U3RhdGUpOworfSk7Cit0ZXN0KCJDaGFpbiBzbGlkZVVwIHNsaWRlRG93biIsIGZ1bmN0aW9uKCkg
eworCWpRdWVyeSgnI3NsaWRldXAgZGl2Jykuc2F2ZVN0YXRlKGpRdWVyeS5zdXBwb3J0LnNocmlu
a1dyYXBCbG9ja3MpLnNsaWRlVXAoJ2Zhc3QnKS5zbGlkZURvd24oJ2Zhc3QnLGpRdWVyeS5jaGVj
a1N0YXRlKTsKK30pOwordGVzdCgiQ2hhaW4gc2xpZGVVcCBzbGlkZURvd24gd2l0aCBlYXNpbmcg
YW5kIGNhbGxiYWNrIiwgZnVuY3Rpb24oKSB7CisJalF1ZXJ5KCcjc2xpZGV1cCBkaXYnKS5zYXZl
U3RhdGUoalF1ZXJ5LnN1cHBvcnQuc2hyaW5rV3JhcEJsb2Nrcykuc2xpZGVVcCgnZmFzdCcpLnNs
aWRlRG93bignZmFzdCcsJ2xpbmVhcicsalF1ZXJ5LmNoZWNrU3RhdGUpOworfSk7CisKK3Rlc3Qo
IkNoYWluIHNsaWRlVG9nZ2xlIGluIiwgZnVuY3Rpb24oKSB7CisJalF1ZXJ5KCcjc2xpZGV0b2dn
bGVpbiBkaXYnKS5zYXZlU3RhdGUoalF1ZXJ5LnN1cHBvcnQuc2hyaW5rV3JhcEJsb2Nrcykuc2xp
ZGVUb2dnbGUoJ2Zhc3QnKS5zbGlkZVRvZ2dsZSgnZmFzdCcsalF1ZXJ5LmNoZWNrU3RhdGUpOwor
fSk7Cit0ZXN0KCJDaGFpbiBzbGlkZVRvZ2dsZSBvdXQiLCBmdW5jdGlvbigpIHsKKwlqUXVlcnko
JyNzbGlkZXRvZ2dsZW91dCBkaXYnKS5zYXZlU3RhdGUoalF1ZXJ5LnN1cHBvcnQuc2hyaW5rV3Jh
cEJsb2Nrcykuc2xpZGVUb2dnbGUoJ2Zhc3QnKS5zbGlkZVRvZ2dsZSgnZmFzdCcsalF1ZXJ5LmNo
ZWNrU3RhdGUpOworfSk7CisKK3Rlc3QoIkNoYWluIGZhZGVUb2dnbGUgaW4iLCBmdW5jdGlvbigp
IHsKKwlqUXVlcnkoJyNmYWRldG9nZ2xlaW4gZGl2Jykuc2F2ZVN0YXRlKCkuZmFkZVRvZ2dsZSgn
ZmFzdCcpLmZhZGVUb2dnbGUoJ2Zhc3QnLGpRdWVyeS5jaGVja1N0YXRlKTsKK30pOwordGVzdCgi
Q2hhaW4gZmFkZVRvZ2dsZSBvdXQiLCBmdW5jdGlvbigpIHsKKwlqUXVlcnkoJyNmYWRldG9nZ2xl
b3V0IGRpdicpLnNhdmVTdGF0ZSgpLmZhZGVUb2dnbGUoJ2Zhc3QnKS5mYWRlVG9nZ2xlKCdmYXN0
JyxqUXVlcnkuY2hlY2tTdGF0ZSk7Cit9KTsKKwordGVzdCgiQ2hhaW4gZmFkZVRvIDAuNSAxLjAg
d2l0aCBlYXNpbmcgYW5kIGNhbGxiYWNrKSIsIGZ1bmN0aW9uKCkgeworCWpRdWVyeSgnI2ZhZGV0
byBkaXYnKS5zYXZlU3RhdGUoKS5mYWRlVG8oJ2Zhc3QnLDAuNSkuZmFkZVRvKCdmYXN0JywxLjAs
J2xpbmVhcicsalF1ZXJ5LmNoZWNrU3RhdGUpOworfSk7CisKK2pRdWVyeS5tYWtlVGVzdCA9IGZ1
bmN0aW9uKCB0ZXh0ICl7CisJdmFyIGVsZW0gPSBqUXVlcnkoIjxkaXY+PC9kaXY+IikKKwkJLmF0
dHIoImlkIiwgInRlc3QiICsgalF1ZXJ5Lm1ha2VUZXN0LmlkKyspCisJCS5hZGRDbGFzcygiYm94
Iik7CisKKwlqUXVlcnkoIjxoND48L2g0PiIpCisJCS50ZXh0KCB0ZXh0ICkKKwkJLmFwcGVuZFRv
KCIjZngtdGVzdHMiKQorCQkuYWZ0ZXIoIGVsZW0gKTsKKworCXJldHVybiBlbGVtOworfQorCitq
UXVlcnkubWFrZVRlc3QuaWQgPSAxOworCit0ZXN0KCJqUXVlcnkuc2hvdygnZmFzdCcpIGRvZXNu
J3QgY2xlYXIgcmFkaW8gYnV0dG9ucyAoYnVnICMxMDk1KSIsIGZ1bmN0aW9uICgpIHsKKwlleHBl
Y3QoNCk7CisJc3RvcCgpOworCisJdmFyICRjaGVja2VkdGVzdCA9IGpRdWVyeSgiI2NoZWNrZWR0
ZXN0Iik7CisJLy8gSUU2IHdhcyBjbGVhcmluZyAiY2hlY2tlZCIgaW4galF1ZXJ5KGVsZW0pLnNo
b3coImZhc3QiKTsKKwkkY2hlY2tlZHRlc3QuaGlkZSgpLnNob3coImZhc3QiLCBmdW5jdGlvbigp
IHsKKwkJb2soICEhIGpRdWVyeSgiOnJhZGlvOmZpcnN0IiwgJGNoZWNrZWR0ZXN0KS5hdHRyKCJj
aGVja2VkIiksICJDaGVjayBmaXJzdCByYWRpbyBzdGlsbCBjaGVja2VkLiIgKTsKKwkJb2soICEg
alF1ZXJ5KCI6cmFkaW86bGFzdCIsICRjaGVja2VkdGVzdCkuYXR0cigiY2hlY2tlZCIpLCAiQ2hl
Y2sgbGFzdCByYWRpbyBzdGlsbCBOT1QgY2hlY2tlZC4iICk7CisJCW9rKCAhISBqUXVlcnkoIjpj
aGVja2JveDpmaXJzdCIsICRjaGVja2VkdGVzdCkuYXR0cigiY2hlY2tlZCIpLCAiQ2hlY2sgZmly
c3QgY2hlY2tib3ggc3RpbGwgY2hlY2tlZC4iICk7CisJCW9rKCAhIGpRdWVyeSgiOmNoZWNrYm94
Omxhc3QiLCAkY2hlY2tlZHRlc3QpLmF0dHIoImNoZWNrZWQiKSwgIkNoZWNrIGxhc3QgY2hlY2ti
b3ggc3RpbGwgTk9UIGNoZWNrZWQuIiApOworCQlzdGFydCgpOworCX0pOworfSk7CisKK3Rlc3Qo
ImFuaW1hdGUgd2l0aCBwZXItcHJvcGVydHkgZWFzaW5nIiwgZnVuY3Rpb24oKXsKKworCWV4cGVj
dCgzKTsKKwlzdG9wKCk7CisKKwl2YXIgX3Rlc3QxX2NhbGxlZCA9IGZhbHNlOworCXZhciBfdGVz
dDJfY2FsbGVkID0gZmFsc2U7CisJdmFyIF9kZWZhdWx0X3Rlc3RfY2FsbGVkID0gZmFsc2U7CisK
KwlqUXVlcnkuZWFzaW5nWydfdGVzdDEnXSA9IGZ1bmN0aW9uKCkgeworCQlfdGVzdDFfY2FsbGVk
ID0gdHJ1ZTsKKwl9OworCisJalF1ZXJ5LmVhc2luZ1snX3Rlc3QyJ10gPSBmdW5jdGlvbigpIHsK
KwkJX3Rlc3QyX2NhbGxlZCA9IHRydWU7CisJfTsKKworCWpRdWVyeS5lYXNpbmdbJ19kZWZhdWx0
X3Rlc3QnXSA9IGZ1bmN0aW9uKCkgeworCQlfZGVmYXVsdF90ZXN0X2NhbGxlZCA9IHRydWU7CisJ
fTsKKworCWpRdWVyeSh7YTowLGI6MCxjOjB9KS5hbmltYXRlKHsKKwkJYTogWzEwMCwgJ190ZXN0
MSddLAorCQliOiBbMTAwLCAnX3Rlc3QyJ10sCisJCWM6IDEwMAorCX0sIDQwMCwgJ19kZWZhdWx0
X3Rlc3QnLCBmdW5jdGlvbigpeworCQlzdGFydCgpOworCQlvayhfdGVzdDFfY2FsbGVkLCAiRWFz
aW5nIGZ1bmN0aW9uICgxKSBjYWxsZWQiKTsKKwkJb2soX3Rlc3QyX2NhbGxlZCwgIkVhc2luZyBm
dW5jdGlvbiAoMikgY2FsbGVkIik7CisJCW9rKF9kZWZhdWx0X3Rlc3RfY2FsbGVkLCAiRWFzaW5n
IGZ1bmN0aW9uIChfZGVmYXVsdCkgY2FsbGVkIik7CisJfSk7CisKK30pOworCit0ZXN0KCJoaWRl
IGhpZGRlbiBlbGVtZW50cyAoYnVnICM3MTQxKSIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgzKTsK
KwlRVW5pdC5yZXNldCgpOworCisJdmFyIGRpdiA9IGpRdWVyeSgiPGRpdiBzdHlsZT0nZGlzcGxh
eTpub25lJz48L2Rpdj4iKS5hcHBlbmRUbygiI21haW4iKTsKKwllcXVhbHMoIGRpdi5jc3MoImRp
c3BsYXkiKSwgIm5vbmUiLCAiRWxlbWVudCBpcyBoaWRkZW4gYnkgZGVmYXVsdCIgKTsKKwlkaXYu
aGlkZSgpOworCW9rKCAhalF1ZXJ5Ll9kYXRhKGRpdiwgIm9sZGRpc3BsYXkiKSwgIm9sZGRpc3Bs
YXkgaXMgdW5kZWZpbmVkIGFmdGVyIGhpZGluZyBhbiBhbHJlYWR5LWhpZGRlbiBlbGVtZW50IiAp
OworCWRpdi5zaG93KCk7CisJZXF1YWxzKCBkaXYuY3NzKCJkaXNwbGF5IiksICJibG9jayIsICJT
aG93IGEgZG91YmxlLWhpZGRlbiBlbGVtZW50IiApOworCisJZGl2LnJlbW92ZSgpOworfSk7CisK
K3Rlc3QoImhpZGUgaGlkZGVuIGVsZW1lbnRzLCB3aXRoIGFuaW1hdGlvbiAoYnVnICM3MTQxKSIs
IGZ1bmN0aW9uKCkgeworCWV4cGVjdCgzKTsKKwlRVW5pdC5yZXNldCgpOworCXN0b3AoKTsKKwor
CXZhciBkaXYgPSBqUXVlcnkoIjxkaXYgc3R5bGU9J2Rpc3BsYXk6bm9uZSc+PC9kaXY+IikuYXBw
ZW5kVG8oIiNtYWluIik7CisJZXF1YWxzKCBkaXYuY3NzKCJkaXNwbGF5IiksICJub25lIiwgIkVs
ZW1lbnQgaXMgaGlkZGVuIGJ5IGRlZmF1bHQiICk7CisJZGl2LmhpZGUoMSwgZnVuY3Rpb24gKCkg
eworCQlvayggIWpRdWVyeS5fZGF0YShkaXYsICJvbGRkaXNwbGF5IiksICJvbGRkaXNwbGF5IGlz
IHVuZGVmaW5lZCBhZnRlciBoaWRpbmcgYW4gYWxyZWFkeS1oaWRkZW4gZWxlbWVudCIgKTsKKwkJ
ZGl2LnNob3coMSwgZnVuY3Rpb24gKCkgeworCQkJZXF1YWxzKCBkaXYuY3NzKCJkaXNwbGF5Iiks
ICJibG9jayIsICJTaG93IGEgZG91YmxlLWhpZGRlbiBlbGVtZW50IiApOworCQkJc3RhcnQoKTsK
KwkJfSk7CisJfSk7Cit9KTsKKwordGVzdCgiYW5pbWF0ZSB1bml0LWxlc3MgcHJvcGVydGllcyAo
IzQ5NjYpIiwgMiwgZnVuY3Rpb24oKSB7CisJc3RvcCgpOworCXZhciBkaXYgPSBqUXVlcnkoICI8
ZGl2IHN0eWxlPSd6LWluZGV4OiAwOyBwb3NpdGlvbjogYWJzb2x1dGU7Jz48L2Rpdj4iICkuYXBw
ZW5kVG8oICIjbWFpbiIgKTsKKwllcXVhbCggZGl2LmNzcyggInotaW5kZXgiICksICIwIiwgInot
aW5kZXggaXMgMCIgKTsKKwlkaXYuYW5pbWF0ZSh7IHpJbmRleDogMiB9LCBmdW5jdGlvbigpIHsK
KwkJZXF1YWwoIGRpdi5jc3MoICJ6LWluZGV4IiApLCAiMiIsICJ6LWluZGV4IGlzIDIiICk7CisJ
CXN0YXJ0KCk7CisJfSk7Cit9KTsKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2px
dWVyeS9yZXNvdXJjZXMvdGVzdC91bml0L2VmZmVjdHMuanMKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogYWxs
b3ctdGFicwogICArIHllcwoKSW5kZXg6IExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVz
dC91bml0L2V2ZW50LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJj
ZXMvdGVzdC91bml0L2V2ZW50LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanF1ZXJ5
L3Jlc291cmNlcy90ZXN0L3VuaXQvZXZlbnQuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTk4
NSBAQAorbW9kdWxlKCJldmVudCIsIHsgdGVhcmRvd246IG1vZHVsZVRlYXJkb3duIH0pOworCit0
ZXN0KCJudWxsIG9yIHVuZGVmaW5lZCBoYW5kbGVyIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDIp
OworCS8vIFN1cHBvcnRzIEZpeGVzIGJ1ZyAjNzIyOQorCXRyeSB7CisJCWpRdWVyeSgiI2ZpcnN0
cCIpLmNsaWNrKG51bGwpOworCQlvayh0cnVlLCAiUGFzc2luZyBhIG51bGwgaGFuZGxlciB3aWxs
IG5vdCB0aHJvdyBhbiBleGNlcHRpb24iKTsKKwl9IGNhdGNoIChlKSB7fQorCisJdHJ5IHsKKwkJ
alF1ZXJ5KCIjZmlyc3RwIikuY2xpY2sodW5kZWZpbmVkKTsKKwkJb2sodHJ1ZSwgIlBhc3Npbmcg
YW4gdW5kZWZpbmVkIGhhbmRsZXIgd2lsbCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uIik7CisJfSBj
YXRjaCAoZSkge30KK30pOworCit0ZXN0KCJiaW5kKCksIHdpdGggZGF0YSIsIGZ1bmN0aW9uKCkg
eworCWV4cGVjdCgzKTsKKwl2YXIgaGFuZGxlciA9IGZ1bmN0aW9uKGV2ZW50KSB7CisJCW9rKCBl
dmVudC5kYXRhLCAiYmluZCgpIHdpdGggZGF0YSwgY2hlY2sgcGFzc2VkIGRhdGEgZXhpc3RzIiAp
OworCQllcXVhbHMoIGV2ZW50LmRhdGEuZm9vLCAiYmFyIiwgImJpbmQoKSB3aXRoIGRhdGEsIENo
ZWNrIHZhbHVlIG9mIHBhc3NlZCBkYXRhIiApOworCX07CisJalF1ZXJ5KCIjZmlyc3RwIikuYmlu
ZCgiY2xpY2siLCB7Zm9vOiAiYmFyIn0sIGhhbmRsZXIpLmNsaWNrKCkudW5iaW5kKCJjbGljayIs
IGhhbmRsZXIpOworCisJb2soICFqUXVlcnkuX2RhdGEoalF1ZXJ5KCIjZmlyc3RwIilbMF0sICJl
dmVudHMiKSwgIkV2ZW50IGhhbmRsZXIgdW5ib3VuZCB3aGVuIHVzaW5nIGRhdGEuIiApOworfSk7
CisKK3Rlc3QoImNsaWNrKCksIHdpdGggZGF0YSIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgzKTsK
Kwl2YXIgaGFuZGxlciA9IGZ1bmN0aW9uKGV2ZW50KSB7CisJCW9rKCBldmVudC5kYXRhLCAiYmlu
ZCgpIHdpdGggZGF0YSwgY2hlY2sgcGFzc2VkIGRhdGEgZXhpc3RzIiApOworCQllcXVhbHMoIGV2
ZW50LmRhdGEuZm9vLCAiYmFyIiwgImJpbmQoKSB3aXRoIGRhdGEsIENoZWNrIHZhbHVlIG9mIHBh
c3NlZCBkYXRhIiApOworCX07CisJalF1ZXJ5KCIjZmlyc3RwIikuY2xpY2soe2ZvbzogImJhciJ9
LCBoYW5kbGVyKS5jbGljaygpLnVuYmluZCgiY2xpY2siLCBoYW5kbGVyKTsKKworCW9rKCAhalF1
ZXJ5Ll9kYXRhKGpRdWVyeSgiI2ZpcnN0cCIpWzBdLCAiZXZlbnRzIiksICJFdmVudCBoYW5kbGVy
IHVuYm91bmQgd2hlbiB1c2luZyBkYXRhLiIgKTsKK30pOworCit0ZXN0KCJiaW5kKCksIHdpdGgg
ZGF0YSwgdHJpZ2dlciB3aXRoIGRhdGEiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoNCk7CisJdmFy
IGhhbmRsZXIgPSBmdW5jdGlvbihldmVudCwgZGF0YSkgeworCQlvayggZXZlbnQuZGF0YSwgImNo
ZWNrIHBhc3NlZCBkYXRhIGV4aXN0cyIgKTsKKwkJZXF1YWxzKCBldmVudC5kYXRhLmZvbywgImJh
ciIsICJDaGVjayB2YWx1ZSBvZiBwYXNzZWQgZGF0YSIgKTsKKwkJb2soIGRhdGEsICJDaGVjayB0
cmlnZ2VyIGRhdGEiICk7CisJCWVxdWFscyggZGF0YS5iYXIsICJmb28iLCAiQ2hlY2sgdmFsdWUg
b2YgdHJpZ2dlciBkYXRhIiApOworCX07CisJalF1ZXJ5KCIjZmlyc3RwIikuYmluZCgiY2xpY2si
LCB7Zm9vOiAiYmFyIn0sIGhhbmRsZXIpLnRyaWdnZXIoImNsaWNrIiwgW3tiYXI6ICJmb28ifV0p
LnVuYmluZCgiY2xpY2siLCBoYW5kbGVyKTsKK30pOworCit0ZXN0KCJiaW5kKCksIG11bHRpcGxl
IGV2ZW50cyBhdCBvbmNlIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDIpOworCXZhciBjbGlja0Nv
dW50ZXIgPSAwLAorCQltb3VzZW92ZXJDb3VudGVyID0gMDsKKwl2YXIgaGFuZGxlciA9IGZ1bmN0
aW9uKGV2ZW50KSB7CisJCWlmIChldmVudC50eXBlID09ICJjbGljayIpCisJCQljbGlja0NvdW50
ZXIgKz0gMTsKKwkJZWxzZSBpZiAoZXZlbnQudHlwZSA9PSAibW91c2VvdmVyIikKKwkJCW1vdXNl
b3ZlckNvdW50ZXIgKz0gMTsKKwl9OworCWpRdWVyeSgiI2ZpcnN0cCIpLmJpbmQoImNsaWNrIG1v
dXNlb3ZlciIsIGhhbmRsZXIpLnRyaWdnZXIoImNsaWNrIikudHJpZ2dlcigibW91c2VvdmVyIik7
CisJZXF1YWxzKCBjbGlja0NvdW50ZXIsIDEsICJiaW5kKCkgd2l0aCBtdWx0aXBsZSBldmVudHMg
YXQgb25jZSIgKTsKKwllcXVhbHMoIG1vdXNlb3ZlckNvdW50ZXIsIDEsICJiaW5kKCkgd2l0aCBt
dWx0aXBsZSBldmVudHMgYXQgb25jZSIgKTsKK30pOworCit0ZXN0KCJiaW5kKCksIG11bHRpcGxl
IGV2ZW50cyBhdCBvbmNlIGFuZCBuYW1lc3BhY2VzIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDcp
OworCisJdmFyIGN1ciwgb2JqID0ge307CisKKwl2YXIgZGl2ID0galF1ZXJ5KCI8ZGl2Lz4iKS5i
aW5kKCJmb2N1c2luLmEiLCBmdW5jdGlvbihlKSB7CisJCWVxdWFscyggZS50eXBlLCBjdXIsICJW
ZXJpZnkgcmlnaHQgc2luZ2xlIGV2ZW50IHdhcyBmaXJlZC4iICk7CisJfSk7CisKKwljdXIgPSAi
Zm9jdXNpbiI7CisJZGl2LnRyaWdnZXIoImZvY3VzaW4uYSIpOworCisJLy8gbWFudWFsbHkgY2xl
YW4gdXAgZGV0YWNoZWQgZWxlbWVudHMKKwlkaXYucmVtb3ZlKCk7CisKKwlkaXYgPSBqUXVlcnko
IjxkaXYvPiIpLmJpbmQoImNsaWNrIG1vdXNlb3ZlciIsIG9iaiwgZnVuY3Rpb24oZSkgeworCQll
cXVhbHMoIGUudHlwZSwgY3VyLCAiVmVyaWZ5IHJpZ2h0IG11bHRpIGV2ZW50IHdhcyBmaXJlZC4i
ICk7CisJCWVxdWFscyggZS5kYXRhLCBvYmosICJNYWtlIHN1cmUgdGhlIGRhdGEgY2FtZSBpbiBj
b3JyZWN0bHkuIiApOworCX0pOworCisJY3VyID0gImNsaWNrIjsKKwlkaXYudHJpZ2dlcigiY2xp
Y2siKTsKKworCWN1ciA9ICJtb3VzZW92ZXIiOworCWRpdi50cmlnZ2VyKCJtb3VzZW92ZXIiKTsK
KworCS8vIG1hbnVhbGx5IGNsZWFuIHVwIGRldGFjaGVkIGVsZW1lbnRzCisJZGl2LnJlbW92ZSgp
OworCisJZGl2ID0galF1ZXJ5KCI8ZGl2Lz4iKS5iaW5kKCJmb2N1c2luLmEgZm9jdXNvdXQuYiIs
IGZ1bmN0aW9uKGUpIHsKKwkJZXF1YWxzKCBlLnR5cGUsIGN1ciwgIlZlcmlmeSByaWdodCBtdWx0
aSBldmVudCB3YXMgZmlyZWQuIiApOworCX0pOworCisJY3VyID0gImZvY3VzaW4iOworCWRpdi50
cmlnZ2VyKCJmb2N1c2luLmEiKTsKKworCWN1ciA9ICJmb2N1c291dCI7CisJZGl2LnRyaWdnZXIo
ImZvY3Vzb3V0LmIiKTsKKworCS8vIG1hbnVhbGx5IGNsZWFuIHVwIGRldGFjaGVkIGVsZW1lbnRz
CisJZGl2LnJlbW92ZSgpOworfSk7CisKK3Rlc3QoImJpbmQoKSwgbmFtZXNwYWNlIHdpdGggc3Bl
Y2lhbCBhZGQiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMjQpOworCisJdmFyIGRpdiA9IGpRdWVy
eSgiPGRpdi8+IikuYmluZCgidGVzdCIsIGZ1bmN0aW9uKGUpIHsKKwkJb2soIHRydWUsICJUZXN0
IGV2ZW50IGZpcmVkLiIgKTsKKwl9KTsKKworCXZhciBpID0gMDsKKworCWpRdWVyeS5ldmVudC5z
cGVjaWFsLnRlc3QgPSB7CisJCV9kZWZhdWx0OiBmdW5jdGlvbihlKSB7CisJCQllcXVhbHMoIHRo
aXMsIGRvY3VtZW50LCAiTWFrZSBzdXJlIHdlJ3JlIGF0IHRoZSB0b3Agb2YgdGhlIGNoYWluLiIg
KTsKKwkJCWVxdWFscyggZS50eXBlLCAidGVzdCIsICJBbmQgdGhhdCB3ZSdyZSBzdGlsbCBkZWFs
aW5nIHdpdGggYSB0ZXN0IGV2ZW50LiIgKTsKKwkJCWVxdWFscyggZS50YXJnZXQsIGRpdlswXSwg
IkFuZCB0aGF0IHRoZSB0YXJnZXQgaXMgY29ycmVjdC4iICk7CisJCX0sCisJCXNldHVwOiBmdW5j
dGlvbigpe30sCisJCXRlYXJkb3duOiBmdW5jdGlvbigpeworCQkJb2sodHJ1ZSwgIlRlYXJkb3du
IGNhbGxlZC4iKTsKKwkJfSwKKwkJYWRkOiBmdW5jdGlvbiggaGFuZGxlT2JqICkgeworCQkJdmFy
IGhhbmRsZXIgPSBoYW5kbGVPYmouaGFuZGxlcjsKKwkJCWhhbmRsZU9iai5oYW5kbGVyID0gZnVu
Y3Rpb24oZSkgeworCQkJCWUueHl6ID0gKytpOworCQkJCWhhbmRsZXIuYXBwbHkoIHRoaXMsIGFy
Z3VtZW50cyApOworCQkJfTsKKwkJfSwKKwkJcmVtb3ZlOiBmdW5jdGlvbigpIHsKKwkJCW9rKHRy
dWUsICJSZW1vdmUgY2FsbGVkLiIpOworCQl9CisJfTsKKworCWRpdi5iaW5kKCJ0ZXN0LmEiLCB7
eDogMX0sIGZ1bmN0aW9uKGUpIHsKKwkJb2soICEhZS54eXosICJNYWtlIHN1cmUgdGhhdCB0aGUg
ZGF0YSBpcyBnZXR0aW5nIHBhc3NlZCB0aHJvdWdoLiIgKTsKKwkJZXF1YWxzKCBlLmRhdGEueCwg
MSwgIk1ha2Ugc3VyZSBkYXRhIGlzIGF0dGFjaGVkIHByb3Blcmx5LiIgKTsKKwl9KTsKKworCWRp
di5iaW5kKCJ0ZXN0LmIiLCB7eDogMn0sIGZ1bmN0aW9uKGUpIHsKKwkJb2soICEhZS54eXosICJN
YWtlIHN1cmUgdGhhdCB0aGUgZGF0YSBpcyBnZXR0aW5nIHBhc3NlZCB0aHJvdWdoLiIgKTsKKwkJ
ZXF1YWxzKCBlLmRhdGEueCwgMiwgIk1ha2Ugc3VyZSBkYXRhIGlzIGF0dGFjaGVkIHByb3Blcmx5
LiIgKTsKKwl9KTsKKworCS8vIFNob3VsZCB0cmlnZ2VyIDUKKwlkaXYudHJpZ2dlcigidGVzdCIp
OworCisJLy8gU2hvdWxkIHRyaWdnZXIgMgorCWRpdi50cmlnZ2VyKCJ0ZXN0LmEiKTsKKworCS8v
IFNob3VsZCB0cmlnZ2VyIDIKKwlkaXYudHJpZ2dlcigidGVzdC5iIik7CisKKwkvLyBTaG91bGQg
dHJpZ2dlciA0CisJZGl2LnVuYmluZCgidGVzdCIpOworCisJZGl2ID0galF1ZXJ5KCI8ZGl2Lz4i
KS5iaW5kKCJ0ZXN0IiwgZnVuY3Rpb24oZSkgeworCQlvayggdHJ1ZSwgIlRlc3QgZXZlbnQgZmly
ZWQuIiApOworCX0pOworCisJLy8gU2hvdWxkIHRyaWdnZXIgMgorCWRpdi5hcHBlbmRUbygiI21h
aW4iKS5yZW1vdmUoKTsKKworCWRlbGV0ZSBqUXVlcnkuZXZlbnQuc3BlY2lhbC50ZXN0OworfSk7
CisKK3Rlc3QoImJpbmQoKSwgbm8gZGF0YSIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgxKTsKKwl2
YXIgaGFuZGxlciA9IGZ1bmN0aW9uKGV2ZW50KSB7CisJCW9rICggIWV2ZW50LmRhdGEsICJDaGVj
ayB0aGF0IG5vIGRhdGEgaXMgYWRkZWQgdG8gdGhlIGV2ZW50IG9iamVjdCIgKTsKKwl9OworCWpR
dWVyeSgiI2ZpcnN0cCIpLmJpbmQoImNsaWNrIiwgaGFuZGxlcikudHJpZ2dlcigiY2xpY2siKTsK
K30pOworCit0ZXN0KCJiaW5kL29uZS91bmJpbmQoT2JqZWN0KSIsIGZ1bmN0aW9uKCl7CisJZXhw
ZWN0KDYpOworCisJdmFyIGNsaWNrQ291bnRlciA9IDAsIG1vdXNlb3ZlckNvdW50ZXIgPSAwOwor
CWZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHsKKwkJaWYgKGV2ZW50LnR5cGUgPT0gImNsaWNrIikK
KwkJCWNsaWNrQ291bnRlcisrOworCQllbHNlIGlmIChldmVudC50eXBlID09ICJtb3VzZW92ZXIi
KQorCQkJbW91c2VvdmVyQ291bnRlcisrOworCX07CisKKwlmdW5jdGlvbiBoYW5kbGVyV2l0aERh
dGEoZXZlbnQpIHsKKwkJaWYgKGV2ZW50LnR5cGUgPT0gImNsaWNrIikKKwkJCWNsaWNrQ291bnRl
ciArPSBldmVudC5kYXRhOworCQllbHNlIGlmIChldmVudC50eXBlID09ICJtb3VzZW92ZXIiKQor
CQkJbW91c2VvdmVyQ291bnRlciArPSBldmVudC5kYXRhOworCX07CisKKwlmdW5jdGlvbiB0cmln
Z2VyKCl7CisJCSRlbGVtLnRyaWdnZXIoImNsaWNrIikudHJpZ2dlcigibW91c2VvdmVyIik7CisJ
fQorCisJdmFyICRlbGVtID0galF1ZXJ5KCIjZmlyc3RwIikKKwkJLy8gUmVndWxhciBiaW5kCisJ
CS5iaW5kKHsKKwkJCWNsaWNrOmhhbmRsZXIsCisJCQltb3VzZW92ZXI6aGFuZGxlcgorCQl9KQor
CQkvLyBCaW5kIHdpdGggZGF0YQorCQkub25lKHsKKwkJCWNsaWNrOmhhbmRsZXJXaXRoRGF0YSwK
KwkJCW1vdXNlb3ZlcjpoYW5kbGVyV2l0aERhdGEKKwkJfSwgMiApOworCisJdHJpZ2dlcigpOwor
CisJZXF1YWxzKCBjbGlja0NvdW50ZXIsIDMsICJiaW5kKE9iamVjdCkiICk7CisJZXF1YWxzKCBt
b3VzZW92ZXJDb3VudGVyLCAzLCAiYmluZChPYmplY3QpIiApOworCisJdHJpZ2dlcigpOworCWVx
dWFscyggY2xpY2tDb3VudGVyLCA0LCAiYmluZChPYmplY3QpIiApOworCWVxdWFscyggbW91c2Vv
dmVyQ291bnRlciwgNCwgImJpbmQoT2JqZWN0KSIgKTsKKworCWpRdWVyeSgiI2ZpcnN0cCIpLnVu
YmluZCh7CisJCWNsaWNrOmhhbmRsZXIsCisJCW1vdXNlb3ZlcjpoYW5kbGVyCisJfSk7CisKKwl0
cmlnZ2VyKCk7CisJZXF1YWxzKCBjbGlja0NvdW50ZXIsIDQsICJiaW5kKE9iamVjdCkiICk7CisJ
ZXF1YWxzKCBtb3VzZW92ZXJDb3VudGVyLCA0LCAiYmluZChPYmplY3QpIiApOworfSk7CisKK3Rl
c3QoImxpdmUvZGllKE9iamVjdCksIGRlbGVnYXRlL3VuZGVsZWdhdGUoU3RyaW5nLCBPYmplY3Qp
IiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDYpOworCisJdmFyIGNsaWNrQ291bnRlciA9IDAsIG1v
dXNlb3ZlckNvdW50ZXIgPSAwLAorCQkkcCA9IGpRdWVyeSgiI2ZpcnN0cCIpLCAkYSA9ICRwLmZp
bmQoImE6Zmlyc3QiKTsKKworCXZhciBldmVudHMgPSB7CisJCWNsaWNrOiBmdW5jdGlvbiggZXZl
bnQgKSB7CisJCQljbGlja0NvdW50ZXIgKz0gKCBldmVudC5kYXRhIHx8IDEgKTsKKwkJfSwKKwkJ
bW91c2VvdmVyOiBmdW5jdGlvbiggZXZlbnQgKSB7CisJCQltb3VzZW92ZXJDb3VudGVyICs9ICgg
ZXZlbnQuZGF0YSB8fCAxICk7CisJCX0KKwl9OworCisJZnVuY3Rpb24gdHJpZ2dlcigpIHsKKwkJ
JGEudHJpZ2dlcigiY2xpY2siKS50cmlnZ2VyKCJtb3VzZW92ZXIiKTsKKwl9CisKKwkkYS5saXZl
KCBldmVudHMgKTsKKwkkcC5kZWxlZ2F0ZSggImEiLCBldmVudHMsIDIgKTsKKworCXRyaWdnZXIo
KTsKKwllcXVhbHMoIGNsaWNrQ291bnRlciwgMywgImxpdmUvZGVsZWdhdGUiICk7CisJZXF1YWxz
KCBtb3VzZW92ZXJDb3VudGVyLCAzLCAibGl2ZS9kZWxlZ2F0ZSIgKTsKKworCSRwLnVuZGVsZWdh
dGUoICJhIiwgZXZlbnRzICk7CisKKwl0cmlnZ2VyKCk7CisJZXF1YWxzKCBjbGlja0NvdW50ZXIs
IDQsICJ1bmRlbGVnYXRlIiApOworCWVxdWFscyggbW91c2VvdmVyQ291bnRlciwgNCwgInVuZGVs
ZWdhdGUiICk7CisKKwkkYS5kaWUoIGV2ZW50cyApOworCisJdHJpZ2dlcigpOworCWVxdWFscygg
Y2xpY2tDb3VudGVyLCA0LCAiZGllIiApOworCWVxdWFscyggbW91c2VvdmVyQ291bnRlciwgNCwg
ImRpZSIgKTsKK30pOworCit0ZXN0KCJsaXZlL2RlbGVnYXRlIGltbWVkaWF0ZSBwcm9wYWdhdGlv
biIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgyKTsKKworCXZhciAkcCA9IGpRdWVyeSgiI2ZpcnN0
cCIpLCAkYSA9ICRwLmZpbmQoImE6Zmlyc3QiKSwgbGFzdENsaWNrOworCisJbGFzdENsaWNrID0g
IiI7CisJJGEubGl2ZSggImNsaWNrIiwgZnVuY3Rpb24oZSkgeworCQlsYXN0Q2xpY2sgPSAiY2xp
Y2sxIjsKKwkJZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTsKKwl9KTsKKwkkYS5saXZlKCAi
Y2xpY2siLCBmdW5jdGlvbihlKSB7CisJCWxhc3RDbGljayA9ICJjbGljazIiOworCX0pOworCSRh
LnRyaWdnZXIoICJjbGljayIgKTsKKwllcXVhbHMoIGxhc3RDbGljaywgImNsaWNrMSIsICJsaXZl
IHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIgKTsKKwkkYS5kaWUoICJjbGljayIgKTsKKworCWxh
c3RDbGljayA9ICIiOworCSRwLmRlbGVnYXRlKCAiYSIsICJjbGljayIsIGZ1bmN0aW9uKGUpIHsK
KwkJbGFzdENsaWNrID0gImNsaWNrMSI7CisJCWUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7
CisJfSk7CisJJHAuZGVsZWdhdGUoICJhIiwgImNsaWNrIiwgZnVuY3Rpb24oZSkgeworCQlsYXN0
Q2xpY2sgPSAiY2xpY2syIjsKKwl9KTsKKwkkYS50cmlnZ2VyKCAiY2xpY2siICk7CisJZXF1YWxz
KCBsYXN0Q2xpY2ssICJjbGljazEiLCAiZGVsZWdhdGUgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9u
IiApOworCSRwLnVuZGVsZWdhdGUoICJjbGljayIgKTsKK30pOworCit0ZXN0KCJiaW5kL2RlbGVn
YXRlIGJ1YmJsaW5nLCBpc0RlZmF1bHRQcmV2ZW50ZWQiLCBmdW5jdGlvbigpIHsKKwlleHBlY3Qo
Mik7CisJdmFyICRhbmNob3IyID0galF1ZXJ5KCAiI2FuY2hvcjIiICksCisJCSRtYWluID0galF1
ZXJ5KCAiI21haW4iICksCisJCWZha2VDbGljayA9IGZ1bmN0aW9uKCRqcSkgeworCQkJLy8gVXNl
IGEgbmF0aXZlIGNsaWNrIHNvIHdlIGRvbid0IGdldCBqUXVlcnkgc2ltdWxhdGVkIGJ1YmJsaW5n
CisJCQlpZiAoIGRvY3VtZW50LmNyZWF0ZUV2ZW50ICkgeworCQkJCXZhciBlID0gZG9jdW1lbnQu
Y3JlYXRlRXZlbnQoICdNb3VzZUV2ZW50cycgKTsKKwkJCQllLmluaXRFdmVudCggImNsaWNrIiwg
dHJ1ZSwgdHJ1ZSApOworCQkJCSRqcVswXS5kaXNwYXRjaEV2ZW50KGUpOworCQkJfQorCQkJZWxz
ZSBpZiAoICRqcVswXS5jbGljayApIHsKKwkJCQkkanFbMF0uY2xpY2soKTsJLy8gSUUKKwkJCX0K
KwkJfTsKKwkkYW5jaG9yMi5jbGljayhmdW5jdGlvbihlKSB7CisJCWUucHJldmVudERlZmF1bHQo
KTsKKwl9KTsKKwkkbWFpbi5kZWxlZ2F0ZSgiI2ZvbyIsICJjbGljayIsIGZ1bmN0aW9uKGUpIHsK
KwkJdmFyIG9yaWcgPSBlLm9yaWdpbmFsRXZlbnQ7CisKKwkJaWYgKCB0eXBlb2Yob3JpZy5kZWZh
dWx0UHJldmVudGVkKSA9PT0gImJvb2xlYW4iIHx8IHR5cGVvZihvcmlnLnJldHVyblZhbHVlKSA9
PT0gImJvb2xlYW4iIHx8IG9yaWcuZ2V0UHJldmVudERlZmF1bHQgKSB7CisJCQllcXVhbHMoIGUu
aXNEZWZhdWx0UHJldmVudGVkKCksIHRydWUsICJpc0RlZmF1bHRQcmV2ZW50ZWQgdHJ1ZSBwYXNz
ZWQgdG8gYnViYmxlZCBldmVudCIgKTsKKworCQl9IGVsc2UgeworCQkJLy8gT3BlcmEgPCAxMSBk
b2Vzbid0IGltcGxlbWVudCBhbnkgaW50ZXJmYWNlIHdlIGNhbiB1c2UsIHNvIGdpdmUgaXQgYSBw
YXNzCisJCQlvayggdHJ1ZSwgImlzRGVmYXVsdFByZXZlbnRlZCBub3Qgc3VwcG9ydGVkIGJ5IHRo
aXMgYnJvd3NlciwgdGVzdCBza2lwcGVkIiApOworCQl9CisJfSk7CisJZmFrZUNsaWNrKCAkYW5j
aG9yMiApOworCSRhbmNob3IyLnVuYmluZCggImNsaWNrIiApOworCSRtYWluLnVuZGVsZWdhdGUo
ICJjbGljayIgKTsKKwkkYW5jaG9yMi5jbGljayhmdW5jdGlvbihlKSB7CisJCS8vIExldCB0aGUg
ZGVmYXVsdCBhY3Rpb24gb2NjdXIKKwl9KTsKKwkkbWFpbi5kZWxlZ2F0ZSgiI2ZvbyIsICJjbGlj
ayIsIGZ1bmN0aW9uKGUpIHsKKwkJZXF1YWxzKCBlLmlzRGVmYXVsdFByZXZlbnRlZCgpLCBmYWxz
ZSwgImlzRGVmYXVsdFByZXZlbnRlZCBmYWxzZSBwYXNzZWQgdG8gYnViYmxlZCBldmVudCIgKTsK
Kwl9KTsKKwlmYWtlQ2xpY2soICRhbmNob3IyICk7CisJJGFuY2hvcjIudW5iaW5kKCAiY2xpY2si
ICk7CisJJG1haW4udW5kZWxlZ2F0ZSggImNsaWNrIiApOworfSk7CisKK3Rlc3QoImJpbmQoKSwg
aWZyYW1lcyIsIGZ1bmN0aW9uKCkgeworCS8vIGV2ZW50cyBkb24ndCB3b3JrIHdpdGggaWZyYW1l
cywgc2VlICM5MzkgLSB0aGlzIHRlc3QgZmFpbHMgaW4gSUUgYmVjYXVzZSBvZiBjb250ZW50RG9j
dW1lbnQKKwl2YXIgZG9jID0galF1ZXJ5KCIjbG9hZGVkaWZyYW1lIikuY29udGVudHMoKTsKKwor
CWpRdWVyeSgiZGl2IiwgZG9jKS5iaW5kKCJjbGljayIsIGZ1bmN0aW9uKCkgeworCQlvayggdHJ1
ZSwgIkJpbmRpbmcgdG8gZWxlbWVudCBpbnNpZGUgaWZyYW1lIiApOworCX0pLmNsaWNrKCkudW5i
aW5kKCdjbGljaycpOworfSk7CisKK3Rlc3QoImJpbmQoKSwgdHJpZ2dlciBjaGFuZ2Ugb24gc2Vs
ZWN0IiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDUpOworCXZhciBjb3VudGVyID0gMDsKKwlmdW5j
dGlvbiBzZWxlY3RPbkNoYW5nZShldmVudCkgeworCQllcXVhbHMoIGV2ZW50LmRhdGEsIGNvdW50
ZXIrKywgIkV2ZW50LmRhdGEgaXMgbm90IGEgZ2xvYmFsIGV2ZW50IG9iamVjdCIgKTsKKwl9Owor
CWpRdWVyeSgiI2Zvcm0gc2VsZWN0IikuZWFjaChmdW5jdGlvbihpKXsKKwkJalF1ZXJ5KHRoaXMp
LmJpbmQoJ2NoYW5nZScsIGksIHNlbGVjdE9uQ2hhbmdlKTsKKwl9KS50cmlnZ2VyKCdjaGFuZ2Un
KTsKK30pOworCit0ZXN0KCJiaW5kKCksIG5hbWVzcGFjZWQgZXZlbnRzLCBjbG9uZWQgZXZlbnRz
IiwgMTgsIGZ1bmN0aW9uKCkgeworCXZhciBmaXJzdHAgPSBqUXVlcnkoICIjZmlyc3RwIiApOwor
CisJZmlyc3RwLmJpbmQoImN1c3RvbS50ZXN0IixmdW5jdGlvbihlKXsKKwkJb2soZmFsc2UsICJD
dXN0b20gZXZlbnQgdHJpZ2dlcmVkIik7CisJfSk7CisKKwlmaXJzdHAuYmluZCgiY2xpY2siLGZ1
bmN0aW9uKGUpeworCQlvayh0cnVlLCAiTm9ybWFsIGNsaWNrIHRyaWdnZXJlZCIpOworCQllcXVh
bCggZS50eXBlICsgZS5uYW1lc3BhY2UsICJjbGljayIsICJDaGVjayB0aGF0IG9ubHkgY2xpY2sg
ZXZlbnRzIHRyaWdnZXIgdGhpcyBmbiIgKTsKKwl9KTsKKworCWZpcnN0cC5iaW5kKCJjbGljay50
ZXN0IixmdW5jdGlvbihlKXsKKwkJdmFyIGNoZWNrID0gImNsaWNrIjsKKwkJb2soIHRydWUsICJO
YW1lc3BhY2VkIGNsaWNrIHRyaWdnZXJlZCIgKTsKKwkJaWYgKCBlLm5hbWVzcGFjZSApIHsKKwkJ
CWNoZWNrICs9ICJ0ZXN0IjsKKwkJfQorCQllcXVhbCggZS50eXBlICsgZS5uYW1lc3BhY2UsIGNo
ZWNrLCAiQ2hlY2sgdGhhdCBvbmx5IGNsaWNrL2NsaWNrLnRlc3QgZXZlbnRzIHRyaWdnZXIgdGhp
cyBmbiIgKTsKKwl9KTsKKworCS8vY2xvbmUodHJ1ZSkgZWxlbWVudCB0byB2ZXJpZnkgZXZlbnRz
IGFyZSBjbG9uZWQgY29ycmVjdGx5CisJZmlyc3RwID0gZmlyc3RwLmFkZCggZmlyc3RwLmNsb25l
KCB0cnVlICkuYXR0ciggImlkIiwgImZpcnN0cDIiICkuaW5zZXJ0QmVmb3JlKCBmaXJzdHAgKSAp
OworCisJLy8gVHJpZ2dlciBib3RoIGJvdW5kIGZuICg4KQorCWZpcnN0cC50cmlnZ2VyKCJjbGlj
ayIpOworCisJLy8gVHJpZ2dlciBvbmUgYm91bmQgZm4gKDQpCisJZmlyc3RwLnRyaWdnZXIoImNs
aWNrLnRlc3QiKTsKKworCS8vIFJlbW92ZSBvbmx5IHRoZSBvbmUgZm4KKwlmaXJzdHAudW5iaW5k
KCJjbGljay50ZXN0Iik7CisKKwkvLyBUcmlnZ2VyIHRoZSByZW1haW5pbmcgZm4gKDQpCisJZmly
c3RwLnRyaWdnZXIoImNsaWNrIik7CisKKwkvLyBSZW1vdmUgdGhlIHJlbWFpbmluZyBuYW1lc3Bh
Y2VkIGZuCisJZmlyc3RwLnVuYmluZCgiLnRlc3QiKTsKKworCS8vIFRyeSB0cmlnZ2VyaW5nIHRo
ZSBjdXN0b20gZXZlbnQgKDApCisJZmlyc3RwLnRyaWdnZXIoImN1c3RvbSIpOworCisJLy8gdXNp
bmcgY29udGVudHMgd2lsbCBnZXQgY29tbWVudHMgcmVndWxhciwgdGV4dCwgYW5kIGNvbW1lbnQg
bm9kZXMKKwlqUXVlcnkoIiNub25ub2RlcyIpLmNvbnRlbnRzKCkuYmluZCgidGVzdGVyIiwgZnVu
Y3Rpb24gKCkgeworCQllcXVhbHModGhpcy5ub2RlVHlwZSwgMSwgIkNoZWNrIG5vZGUsdGV4dG5v
ZGUsY29tbWVudCBiaW5kIGp1c3QgZG9lcyByZWFsIG5vZGVzIiApOworCX0pLnRyaWdnZXIoInRl
c3RlciIpOworCisJLy8gTWFrZSBzdXJlIGV2ZW50cyBzdGljayB3aXRoIGFwcGVuZFRvJ2QgZWxl
bWVudHMgKHdoaWNoIGFyZSBjbG9uZWQpICMyMDI3CisJalF1ZXJ5KCI8YSBocmVmPScjZmFpbCcg
Y2xhc3M9J3Rlc3QnPnRlc3Q8L2E+IikuY2xpY2soZnVuY3Rpb24oKXsgcmV0dXJuIGZhbHNlOyB9
KS5hcHBlbmRUbygiI21haW4iKTsKKwlvayggalF1ZXJ5KCJhLnRlc3Q6Zmlyc3QiKS50cmlnZ2Vy
SGFuZGxlcigiY2xpY2siKSA9PT0gZmFsc2UsICJIYW5kbGVyIGlzIGJvdW5kIHRvIGFwcGVuZFRv
J2QgZWxlbWVudHMiICk7Cit9KTsKKwordGVzdCgiYmluZCgpLCBtdWx0aS1uYW1lc3BhY2VkIGV2
ZW50cyIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCg2KTsKKworCXZhciBvcmRlciA9IFsKKwkJImNs
aWNrLnRlc3QuYWJjIiwKKwkJImNsaWNrLnRlc3QuYWJjIiwKKwkJImNsaWNrLnRlc3QiLAorCQki
Y2xpY2sudGVzdC5hYmMiLAorCQkiY2xpY2sudGVzdCIsCisJCSJjdXN0b20udGVzdDIiCisJXTsK
KworCWZ1bmN0aW9uIGNoZWNrKG5hbWUsIG1zZyl7CisJCXNhbWUobmFtZSwgb3JkZXIuc2hpZnQo
KSwgbXNnKTsKKwl9CisKKwlqUXVlcnkoIiNmaXJzdHAiKS5iaW5kKCJjdXN0b20udGVzdCIsZnVu
Y3Rpb24oZSl7CisJCWNoZWNrKCJjdXN0b20udGVzdCIsICJDdXN0b20gZXZlbnQgdHJpZ2dlcmVk
Iik7CisJfSk7CisKKwlqUXVlcnkoIiNmaXJzdHAiKS5iaW5kKCJjdXN0b20udGVzdDIiLGZ1bmN0
aW9uKGUpeworCQljaGVjaygiY3VzdG9tLnRlc3QyIiwgIkN1c3RvbSBldmVudCB0cmlnZ2VyZWQi
KTsKKwl9KTsKKworCWpRdWVyeSgiI2ZpcnN0cCIpLmJpbmQoImNsaWNrLnRlc3QiLGZ1bmN0aW9u
KGUpeworCQljaGVjaygiY2xpY2sudGVzdCIsICJOb3JtYWwgY2xpY2sgdHJpZ2dlcmVkIik7CisJ
fSk7CisKKwlqUXVlcnkoIiNmaXJzdHAiKS5iaW5kKCJjbGljay50ZXN0LmFiYyIsZnVuY3Rpb24o
ZSl7CisJCWNoZWNrKCJjbGljay50ZXN0LmFiYyIsICJOYW1lc3BhY2VkIGNsaWNrIHRyaWdnZXJl
ZCIpOworCX0pOworCisJLy8gVGhvc2Ugd291bGQgbm90IHRyaWdnZXIvdW5iaW5kICgjNTMwMykK
KwlqUXVlcnkoIiNmaXJzdHAiKS50cmlnZ2VyKCJjbGljay5hLnRlc3QiKTsKKwlqUXVlcnkoIiNm
aXJzdHAiKS51bmJpbmQoImNsaWNrLmEudGVzdCIpOworCisJLy8gVHJpZ2dlciBib3RoIGJvdW5k
IGZuICgxKQorCWpRdWVyeSgiI2ZpcnN0cCIpLnRyaWdnZXIoImNsaWNrLnRlc3QuYWJjIik7CisK
KwkvLyBUcmlnZ2VyIG9uZSBib3VuZCBmbiAoMSkKKwlqUXVlcnkoIiNmaXJzdHAiKS50cmlnZ2Vy
KCJjbGljay5hYmMiKTsKKworCS8vIFRyaWdnZXIgdHdvIGJvdW5kIGZuICgyKQorCWpRdWVyeSgi
I2ZpcnN0cCIpLnRyaWdnZXIoImNsaWNrLnRlc3QiKTsKKworCS8vIFJlbW92ZSBvbmx5IHRoZSBv
bmUgZm4KKwlqUXVlcnkoIiNmaXJzdHAiKS51bmJpbmQoImNsaWNrLmFiYyIpOworCisJLy8gVHJp
Z2dlciB0aGUgcmVtYWluaW5nIGZuICgxKQorCWpRdWVyeSgiI2ZpcnN0cCIpLnRyaWdnZXIoImNs
aWNrIik7CisKKwkvLyBSZW1vdmUgdGhlIHJlbWFpbmluZyBmbgorCWpRdWVyeSgiI2ZpcnN0cCIp
LnVuYmluZCgiLnRlc3QiKTsKKworCS8vIFRyaWdnZXIgdGhlIHJlbWFpbmluZyBmbiAoMSkKKwlq
UXVlcnkoIiNmaXJzdHAiKS50cmlnZ2VyKCJjdXN0b20iKTsKK30pOworCit0ZXN0KCJiaW5kKCks
IHdpdGggc2FtZSBmdW5jdGlvbiIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgyKQorCisJdmFyIGNv
dW50ID0gMCwgZnVuYyA9IGZ1bmN0aW9uKCl7CisJCWNvdW50Kys7CisJfTsKKworCWpRdWVyeSgi
I2xpdmVIYW5kbGVyT3JkZXIiKS5iaW5kKCJmb28uYmFyIiwgZnVuYykuYmluZCgiZm9vLnphciIs
IGZ1bmMpOworCWpRdWVyeSgiI2xpdmVIYW5kbGVyT3JkZXIiKS50cmlnZ2VyKCJmb28uYmFyIik7
CisKKwllcXVhbHMoY291bnQsIDEsICJWZXJpZnkgYmluZGluZyBmdW5jdGlvbiB3aXRoIG11bHRp
cGxlIG5hbWVzcGFjZXMuIiApOworCisJalF1ZXJ5KCIjbGl2ZUhhbmRsZXJPcmRlciIpLnVuYmlu
ZCgiZm9vLmJhciIsIGZ1bmMpLnVuYmluZCgiZm9vLnphciIsIGZ1bmMpOworCWpRdWVyeSgiI2xp
dmVIYW5kbGVyT3JkZXIiKS50cmlnZ2VyKCJmb28uYmFyIik7CisKKwllcXVhbHMoY291bnQsIDEs
ICJWZXJpZnkgdGhhdCByZW1vdmluZyBldmVudHMgc3RpbGwgd29yay4iICk7Cit9KTsKKwordGVz
dCgiYmluZCgpLCBtYWtlIHN1cmUgb3JkZXIgaXMgbWFpbnRhaW5lZCIsIGZ1bmN0aW9uKCkgewor
CWV4cGVjdCgxKTsKKworCXZhciBlbGVtID0galF1ZXJ5KCIjZmlyc3RwIiksIGxvZyA9IFtdLCBj
aGVjayA9IFtdOworCisJZm9yICggdmFyIGkgPSAwOyBpIDwgMTAwOyBpKysgKSAoZnVuY3Rpb24o
aSl7CisJCWVsZW0uYmluZCggImNsaWNrIiwgZnVuY3Rpb24oKXsKKwkJCWxvZy5wdXNoKCBpICk7
CisJCX0pOworCisJCWNoZWNrLnB1c2goIGkgKTsKKwl9KShpKTsKKworCWVsZW0udHJpZ2dlcigi
Y2xpY2siKTsKKworCWVxdWFscyggbG9nLmpvaW4oIiwiKSwgY2hlY2suam9pbigiLCIpLCAiTWFr
ZSBzdXJlIG9yZGVyIHdhcyBtYWludGFpbmVkLiIgKTsKKworCWVsZW0udW5iaW5kKCJjbGljayIp
OworfSk7CisKK3Rlc3QoImJpbmQoKSwgd2l0aCBkaWZmZXJlbnQgdGhpcyBvYmplY3QiLCBmdW5j
dGlvbigpIHsKKwlleHBlY3QoNCk7CisJdmFyIHRoaXNPYmplY3QgPSB7IG15VGhpczogdHJ1ZSB9
LAorCQlkYXRhID0geyBteURhdGE6IHRydWUgfSwKKwkJaGFuZGxlcjEgPSBmdW5jdGlvbiggZXZl
bnQgKSB7CisJCQllcXVhbHMoIHRoaXMsIHRoaXNPYmplY3QsICJiaW5kKCkgd2l0aCBkaWZmZXJl
bnQgdGhpcyBvYmplY3QiICk7CisJCX0sCisJCWhhbmRsZXIyID0gZnVuY3Rpb24oIGV2ZW50ICkg
eworCQkJZXF1YWxzKCB0aGlzLCB0aGlzT2JqZWN0LCAiYmluZCgpIHdpdGggZGlmZmVyZW50IHRo
aXMgb2JqZWN0IGFuZCBkYXRhIiApOworCQkJZXF1YWxzKCBldmVudC5kYXRhLCBkYXRhLCAiYmlu
ZCgpIHdpdGggZGlmZmVyZW50IHRoaXMgb2JqZWN0IGFuZCBkYXRhIiApOworCQl9OworCisJalF1
ZXJ5KCIjZmlyc3RwIikKKwkJLmJpbmQoImNsaWNrIiwgalF1ZXJ5LnByb3h5KGhhbmRsZXIxLCB0
aGlzT2JqZWN0KSkuY2xpY2soKS51bmJpbmQoImNsaWNrIiwgaGFuZGxlcjEpCisJCS5iaW5kKCJj
bGljayIsIGRhdGEsIGpRdWVyeS5wcm94eShoYW5kbGVyMiwgdGhpc09iamVjdCkpLmNsaWNrKCku
dW5iaW5kKCJjbGljayIsIGhhbmRsZXIyKTsKKworCW9rKCAhalF1ZXJ5Ll9kYXRhKGpRdWVyeSgi
I2ZpcnN0cCIpWzBdLCAiZXZlbnRzIiksICJFdmVudCBoYW5kbGVyIHVuYm91bmQgd2hlbiB1c2lu
ZyBkaWZmZXJlbnQgdGhpcyBvYmplY3QgYW5kIGRhdGEuIiApOworfSk7CisKK3Rlc3QoImJpbmQo
bmFtZSwgZmFsc2UpLCB1bmJpbmQobmFtZSwgZmFsc2UpIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0
KDMpOworCisJdmFyIG1haW4gPSAwOworCWpRdWVyeSgiI21haW4iKS5iaW5kKCJjbGljayIsIGZ1
bmN0aW9uKGUpeyBtYWluKys7IH0pOworCWpRdWVyeSgiI2FwIikudHJpZ2dlcigiY2xpY2siKTsK
KwllcXVhbHMoIG1haW4sIDEsICJWZXJpZnkgdGhhdCB0aGUgdHJpZ2dlciBoYXBwZW5lZCBjb3Jy
ZWN0bHkuIiApOworCisJbWFpbiA9IDA7CisJalF1ZXJ5KCIjYXAiKS5iaW5kKCJjbGljayIsIGZh
bHNlKTsKKwlqUXVlcnkoIiNhcCIpLnRyaWdnZXIoImNsaWNrIik7CisJZXF1YWxzKCBtYWluLCAw
LCAiVmVyaWZ5IHRoYXQgbm8gYnViYmxlIGhhcHBlbmVkLiIgKTsKKworCW1haW4gPSAwOworCWpR
dWVyeSgiI2FwIikudW5iaW5kKCJjbGljayIsIGZhbHNlKTsKKwlqUXVlcnkoIiNhcCIpLnRyaWdn
ZXIoImNsaWNrIik7CisJZXF1YWxzKCBtYWluLCAxLCAiVmVyaWZ5IHRoYXQgdGhlIHRyaWdnZXIg
aGFwcGVuZWQgY29ycmVjdGx5LiIgKTsKKworCS8vIG1hbnVhbGx5IGNsZWFuIHVwIGV2ZW50cyBm
cm9tIGVsZW1lbnRzIG91dHNpZGUgdGhlIGZpeHR1cmUKKwlqUXVlcnkoIiNtYWluIikudW5iaW5k
KCJjbGljayIpOworfSk7CisKK3Rlc3QoImJpbmQoKS90cmlnZ2VyKCkvdW5iaW5kKCkgb24gcGxh
aW4gb2JqZWN0IiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KCA3ICk7CisKKwl2YXIgb2JqID0ge307
CisKKwkvLyBNYWtlIHN1cmUgaXQgZG9lc24ndCBjb21wbGFpbiB3aGVuIG5vIGV2ZW50cyBhcmUg
Zm91bmQKKwlqUXVlcnkob2JqKS50cmlnZ2VyKCJ0ZXN0Iik7CisKKwkvLyBNYWtlIHN1cmUgaXQg
ZG9lc24ndCBjb21wbGFpbiB3aGVuIG5vIGV2ZW50cyBhcmUgZm91bmQKKwlqUXVlcnkob2JqKS51
bmJpbmQoInRlc3QiKTsKKworCWpRdWVyeShvYmopLmJpbmQoeworCQl0ZXN0OiBmdW5jdGlvbigp
IHsKKwkJCW9rKCB0cnVlLCAiQ3VzdG9tIGV2ZW50IHJ1bi4iICk7CisJCX0sCisJCXN1Ym1pdDog
ZnVuY3Rpb24oKSB7CisJCQlvayggdHJ1ZSwgIkN1c3RvbSBzdWJtaXQgZXZlbnQgcnVuLiIgKTsK
KwkJfQorCX0pOworCisJdmFyIGV2ZW50cyA9IGpRdWVyeS5fZGF0YShvYmosICJldmVudHMiKTsK
KwlvayggZXZlbnRzLCAiT2JqZWN0IGhhcyBldmVudHMgYm91bmQuIiApOworCWVxdWFscyggb2Jq
LmV2ZW50cywgdW5kZWZpbmVkLCAiRXZlbnRzIG9iamVjdCBvbiBwbGFpbiBvYmplY3RzIGlzIG5v
dCBldmVudHMiICk7CisJZXF1YWxzKCBvYmoudGVzdCwgdW5kZWZpbmVkLCAiTWFrZSBzdXJlIHRo
YXQgdGVzdCBldmVudCBpcyBub3Qgb24gdGhlIHBsYWluIG9iamVjdC4iICk7CisJZXF1YWxzKCBv
YmouaGFuZGxlLCB1bmRlZmluZWQsICJNYWtlIHN1cmUgdGhhdCB0aGUgZXZlbnQgaGFuZGxlciBp
cyBub3Qgb24gdGhlIHBsYWluIG9iamVjdC4iICk7CisKKwkvLyBTaG91bGQgdHJpZ2dlciAxCisJ
alF1ZXJ5KG9iaikudHJpZ2dlcigidGVzdCIpOworCWpRdWVyeShvYmopLnRyaWdnZXIoInN1Ym1p
dCIpOworCisJalF1ZXJ5KG9iaikudW5iaW5kKCJ0ZXN0Iik7CisJalF1ZXJ5KG9iaikudW5iaW5k
KCJzdWJtaXQiKTsKKworCS8vIFNob3VsZCB0cmlnZ2VyIDAKKwlqUXVlcnkob2JqKS50cmlnZ2Vy
KCJ0ZXN0Iik7CisKKwkvLyBNYWtlIHN1cmUgaXQgZG9lc24ndCBjb21wbGFpbiB3aGVuIG5vIGV2
ZW50cyBhcmUgZm91bmQKKwlqUXVlcnkob2JqKS51bmJpbmQoInRlc3QiKTsKKworCWVxdWFscygg
b2JqICYmIG9ialsgalF1ZXJ5LmV4cGFuZG8gXSAmJgorCQkJb2JqWyBqUXVlcnkuZXhwYW5kbyBd
WyBqUXVlcnkuZXhwYW5kbyBdICYmCisJCQlvYmpbIGpRdWVyeS5leHBhbmRvIF1bIGpRdWVyeS5l
eHBhbmRvIF0uZXZlbnRzLCB1bmRlZmluZWQsICJNYWtlIHN1cmUgZXZlbnRzIG9iamVjdCBpcyBy
ZW1vdmVkIiApOworfSk7CisKK3Rlc3QoInVuYmluZCh0eXBlKSIsIGZ1bmN0aW9uKCkgeworCWV4
cGVjdCggMCApOworCisJdmFyICRlbGVtID0galF1ZXJ5KCIjZmlyc3RwIiksCisJCW1lc3NhZ2U7
CisKKwlmdW5jdGlvbiBlcnJvcigpeworCQlvayggZmFsc2UsIG1lc3NhZ2UgKTsKKwl9CisKKwlt
ZXNzYWdlID0gInVuYmluZCBwYXNzaW5nIGZ1bmN0aW9uIjsKKwkkZWxlbS5iaW5kKCdlcnJvcjEn
LCBlcnJvcikudW5iaW5kKCdlcnJvcjEnLGVycm9yKS50cmlnZ2VySGFuZGxlcignZXJyb3IxJyk7
CisKKwltZXNzYWdlID0gInVuYmluZCBhbGwgZnJvbSBldmVudCI7CisJJGVsZW0uYmluZCgnZXJy
b3IxJywgZXJyb3IpLnVuYmluZCgnZXJyb3IxJykudHJpZ2dlckhhbmRsZXIoJ2Vycm9yMScpOwor
CisJbWVzc2FnZSA9ICJ1bmJpbmQgYWxsIjsKKwkkZWxlbS5iaW5kKCdlcnJvcjEnLCBlcnJvciku
dW5iaW5kKCkudHJpZ2dlckhhbmRsZXIoJ2Vycm9yMScpOworCisJbWVzc2FnZSA9ICJ1bmJpbmQg
bWFueSB3aXRoIGZ1bmN0aW9uIjsKKwkkZWxlbS5iaW5kKCdlcnJvcjEgZXJyb3IyJyxlcnJvcikK
KwkJLnVuYmluZCgnZXJyb3IxIGVycm9yMicsIGVycm9yICkKKwkJLnRyaWdnZXIoJ2Vycm9yMScp
LnRyaWdnZXJIYW5kbGVyKCdlcnJvcjInKTsKKworCW1lc3NhZ2UgPSAidW5iaW5kIG1hbnkiOyAv
LyAjMzUzOAorCSRlbGVtLmJpbmQoJ2Vycm9yMSBlcnJvcjInLGVycm9yKQorCQkudW5iaW5kKCdl
cnJvcjEgZXJyb3IyJykKKwkJLnRyaWdnZXIoJ2Vycm9yMScpLnRyaWdnZXJIYW5kbGVyKCdlcnJv
cjInKTsKKworCW1lc3NhZ2UgPSAidW5iaW5kIHdpdGhvdXQgYSB0eXBlIG9yIGhhbmRsZXIiOwor
CSRlbGVtLmJpbmQoImVycm9yMSBlcnJvcjIudGVzdCIsZXJyb3IpCisJCS51bmJpbmQoKQorCQku
dHJpZ2dlcigiZXJyb3IxIikudHJpZ2dlckhhbmRsZXIoImVycm9yMiIpOworfSk7CisKK3Rlc3Qo
InVuYmluZChldmVudE9iamVjdCkiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoNCk7CisKKwl2YXIg
JGVsZW0gPSBqUXVlcnkoIiNmaXJzdHAiKSwKKwkJbnVtOworCisJZnVuY3Rpb24gYXNzZXJ0KCBl
eHBlY3RlZCApeworCQludW0gPSAwOworCQkkZWxlbS50cmlnZ2VyKCdmb28nKS50cmlnZ2VySGFu
ZGxlcignYmFyJyk7CisJCWVxdWFscyggbnVtLCBleHBlY3RlZCwgIkNoZWNrIHRoZSByaWdodCBo
YW5kbGVycyBhcmUgdHJpZ2dlcmVkIiApOworCX0KKworCSRlbGVtCisJCS8vIFRoaXMgaGFuZGxl
ciBzaG91bGRuJ3QgYmUgdW5ib3VuZAorCQkuYmluZCgnZm9vJywgZnVuY3Rpb24oKXsKKwkJCW51
bSArPSAxOworCQl9KQorCQkuYmluZCgnZm9vJywgZnVuY3Rpb24oZSl7CisJCQkkZWxlbS51bmJp
bmQoIGUgKQorCQkJbnVtICs9IDI7CisJCX0pCisJCS8vIE5laXRoZXIgdGhpcyBvbmUKKwkJLmJp
bmQoJ2JhcicsIGZ1bmN0aW9uKCl7CisJCQludW0gKz0gNDsKKwkJfSk7CisKKwlhc3NlcnQoIDcg
KTsKKwlhc3NlcnQoIDUgKTsKKworCSRlbGVtLnVuYmluZCgnYmFyJyk7CisJYXNzZXJ0KCAxICk7
CisKKwkkZWxlbS51bmJpbmQoKTsKKwlhc3NlcnQoIDAgKTsKK30pOworCit0ZXN0KCJob3Zlcigp
IiwgZnVuY3Rpb24oKSB7CisJdmFyIHRpbWVzID0gMCwKKwkJaGFuZGxlcjEgPSBmdW5jdGlvbigg
ZXZlbnQgKSB7ICsrdGltZXM7IH0sCisJCWhhbmRsZXIyID0gZnVuY3Rpb24oIGV2ZW50ICkgeyAr
K3RpbWVzOyB9OworCisJalF1ZXJ5KCIjZmlyc3RwIikKKwkJLmhvdmVyKGhhbmRsZXIxLCBoYW5k
bGVyMikKKwkJLm1vdXNlZW50ZXIoKS5tb3VzZWxlYXZlKCkKKwkJLnVuYmluZCgibW91c2VlbnRl
ciIsIGhhbmRsZXIxKQorCQkudW5iaW5kKCJtb3VzZWxlYXZlIiwgaGFuZGxlcjIpCisJCS5ob3Zl
cihoYW5kbGVyMSkKKwkJLm1vdXNlZW50ZXIoKS5tb3VzZWxlYXZlKCkKKwkJLnVuYmluZCgibW91
c2VlbnRlciBtb3VzZWxlYXZlIiwgaGFuZGxlcjEpCisJCS5tb3VzZWVudGVyKCkubW91c2VsZWF2
ZSgpOworCisJZXF1YWxzKCB0aW1lcywgNCwgImhvdmVyIGhhbmRsZXJzIGZpcmVkIiApOworfSk7
CisKK3Rlc3QoInRyaWdnZXIoKSBzaG9ydGN1dHMiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoNik7
CisKKwl2YXIgZWxlbSA9IGpRdWVyeSgnPGxpPjxhIGhyZWY9IiMiPkNoYW5nZSBsb2NhdGlvbjwv
YT48L2xpPicpLnByZXBlbmRUbygnI2ZpcnN0VUwnKTsKKwllbGVtLmZpbmQoJ2EnKS5iaW5kKCdj
bGljaycsIGZ1bmN0aW9uKCkgeworCQl2YXIgY2xvc2UgPSBqUXVlcnkoJ3NwYW54JywgdGhpcyk7
IC8vIHNhbWUgd2l0aCBqUXVlcnkodGhpcykuZmluZCgnc3BhbicpOworCQllcXVhbHMoIGNsb3Nl
Lmxlbmd0aCwgMCwgIkNvbnRleHQgZWxlbWVudCBkb2VzIG5vdCBleGlzdCwgbGVuZ3RoIG11c3Qg
YmUgemVybyIgKTsKKwkJb2soICFjbG9zZVswXSwgIkNvbnRleHQgZWxlbWVudCBkb2VzIG5vdCBl
eGlzdCwgZGlyZWN0IGFjY2VzcyB0byBlbGVtZW50IG11c3QgcmV0dXJuIHVuZGVmaW5lZCIgKTsK
KwkJcmV0dXJuIGZhbHNlOworCX0pLmNsaWNrKCk7CisKKwkvLyBtYW51YWxseSBjbGVhbiB1cCBk
ZXRhY2hlZCBlbGVtZW50cworCWVsZW0ucmVtb3ZlKCk7CisKKwlqUXVlcnkoIiNjaGVjazEiKS5j
bGljayhmdW5jdGlvbigpIHsKKwkJb2soIHRydWUsICJjbGljayBldmVudCBoYW5kbGVyIGZvciBj
aGVja2JveCBnZXRzIGZpcmVkIHR3aWNlLCBzZWUgIzgxNSIgKTsKKwl9KS5jbGljaygpOworCisJ
dmFyIGNvdW50ZXIgPSAwOworCWpRdWVyeSgnI2ZpcnN0cCcpWzBdLm9uY2xpY2sgPSBmdW5jdGlv
bihldmVudCkgeworCQljb3VudGVyKys7CisJfTsKKwlqUXVlcnkoJyNmaXJzdHAnKS5jbGljaygp
OworCWVxdWFscyggY291bnRlciwgMSwgIkNoZWNrIHRoYXQgY2xpY2ssIHRyaWdnZXJzIG9uY2xp
Y2sgZXZlbnQgaGFuZGxlciBhbHNvIiApOworCisJdmFyIGNsaWNrQ291bnRlciA9IDA7CisJalF1
ZXJ5KCcjc2ltb24xJylbMF0ub25jbGljayA9IGZ1bmN0aW9uKGV2ZW50KSB7CisJCWNsaWNrQ291
bnRlcisrOworCX07CisJalF1ZXJ5KCcjc2ltb24xJykuY2xpY2soKTsKKwllcXVhbHMoIGNsaWNr
Q291bnRlciwgMSwgIkNoZWNrIHRoYXQgY2xpY2ssIHRyaWdnZXJzIG9uY2xpY2sgZXZlbnQgaGFu
ZGxlciBvbiBhbiBhIHRhZyBhbHNvIiApOworCisJZWxlbSA9IGpRdWVyeSgnPGltZyAvPicpLmxv
YWQoZnVuY3Rpb24oKXsKKwkJb2soIHRydWUsICJUcmlnZ2VyIHRoZSBsb2FkIGV2ZW50LCB1c2lu
ZyB0aGUgc2hvcnRjdXQgLmxvYWQoKSAoIzI4MTkpIik7CisJfSkubG9hZCgpOworCisJLy8gbWFu
dWFsbHkgY2xlYW4gdXAgZGV0YWNoZWQgZWxlbWVudHMKKwllbGVtLnJlbW92ZSgpOworfSk7CisK
K3Rlc3QoInRyaWdnZXIoKSBidWJibGluZyIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgxNCk7CisK
Kwl2YXIgZG9jID0gMCwgaHRtbCA9IDAsIGJvZHkgPSAwLCBtYWluID0gMCwgYXAgPSAwOworCisJ
alF1ZXJ5KGRvY3VtZW50KS5iaW5kKCJjbGljayIsIGZ1bmN0aW9uKGUpeyBpZiAoIGUudGFyZ2V0
ICE9PSBkb2N1bWVudCkgeyBkb2MrKzsgfSB9KTsKKwlqUXVlcnkoImh0bWwiKS5iaW5kKCJjbGlj
ayIsIGZ1bmN0aW9uKGUpeyBodG1sKys7IH0pOworCWpRdWVyeSgiYm9keSIpLmJpbmQoImNsaWNr
IiwgZnVuY3Rpb24oZSl7IGJvZHkrKzsgfSk7CisJalF1ZXJ5KCIjbWFpbiIpLmJpbmQoImNsaWNr
IiwgZnVuY3Rpb24oZSl7IG1haW4rKzsgfSk7CisJalF1ZXJ5KCIjYXAiKS5iaW5kKCJjbGljayIs
IGZ1bmN0aW9uKCl7IGFwKys7IHJldHVybiBmYWxzZTsgfSk7CisKKwlqUXVlcnkoImh0bWwiKS50
cmlnZ2VyKCJjbGljayIpOworCWVxdWFscyggZG9jLCAxLCAiSFRNTCBidWJibGUiICk7CisJZXF1
YWxzKCBodG1sLCAxLCAiSFRNTCBidWJibGUiICk7CisKKwlqUXVlcnkoImJvZHkiKS50cmlnZ2Vy
KCJjbGljayIpOworCWVxdWFscyggZG9jLCAyLCAiQm9keSBidWJibGUiICk7CisJZXF1YWxzKCBo
dG1sLCAyLCAiQm9keSBidWJibGUiICk7CisJZXF1YWxzKCBib2R5LCAxLCAiQm9keSBidWJibGUi
ICk7CisKKwlqUXVlcnkoIiNtYWluIikudHJpZ2dlcigiY2xpY2siKTsKKwllcXVhbHMoIGRvYywg
MywgIk1haW4gYnViYmxlIiApOworCWVxdWFscyggaHRtbCwgMywgIk1haW4gYnViYmxlIiApOwor
CWVxdWFscyggYm9keSwgMiwgIk1haW4gYnViYmxlIiApOworCWVxdWFscyggbWFpbiwgMSwgIk1h
aW4gYnViYmxlIiApOworCisJalF1ZXJ5KCIjYXAiKS50cmlnZ2VyKCJjbGljayIpOworCWVxdWFs
cyggZG9jLCAzLCAiYXAgYnViYmxlIiApOworCWVxdWFscyggaHRtbCwgMywgImFwIGJ1YmJsZSIg
KTsKKwllcXVhbHMoIGJvZHksIDIsICJhcCBidWJibGUiICk7CisJZXF1YWxzKCBtYWluLCAxLCAi
YXAgYnViYmxlIiApOworCWVxdWFscyggYXAsIDEsICJhcCBidWJibGUiICk7CisKKwkvLyBtYW51
YWxseSBjbGVhbiB1cCBldmVudHMgZnJvbSBlbGVtZW50cyBvdXRzaWRlIHRoZSBmaXh0dXJlCisJ
alF1ZXJ5KGRvY3VtZW50KS51bmJpbmQoImNsaWNrIik7CisJalF1ZXJ5KCJodG1sLCBib2R5LCAj
bWFpbiIpLnVuYmluZCgiY2xpY2siKTsKK30pOworCit0ZXN0KCJ0cmlnZ2VyKHR5cGUsIFtkYXRh
XSwgW2ZuXSkiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMTQpOworCisJdmFyIGhhbmRsZXIgPSBm
dW5jdGlvbihldmVudCwgYSwgYiwgYykgeworCQllcXVhbHMoIGV2ZW50LnR5cGUsICJjbGljayIs
ICJjaGVjayBwYXNzZWQgZGF0YSIgKTsKKwkJZXF1YWxzKCBhLCAxLCAiY2hlY2sgcGFzc2VkIGRh
dGEiICk7CisJCWVxdWFscyggYiwgIjIiLCAiY2hlY2sgcGFzc2VkIGRhdGEiICk7CisJCWVxdWFs
cyggYywgImFiYyIsICJjaGVjayBwYXNzZWQgZGF0YSIgKTsKKwkJcmV0dXJuICJ0ZXN0IjsKKwl9
OworCisJdmFyICRlbGVtID0galF1ZXJ5KCIjZmlyc3RwIik7CisKKwkvLyBTaW11bGF0ZSBhICJu
YXRpdmUiIGNsaWNrCisJJGVsZW1bMF0uY2xpY2sgPSBmdW5jdGlvbigpeworCQlvayggdHJ1ZSwg
Ik5hdGl2ZSBjYWxsIHdhcyB0cmlnZ2VyZWQiICk7CisJfTsKKworCS8vIFRyaWdnZXJzIGhhbmRs
cnMgYW5kIG5hdGl2ZQorCS8vIFRyaWdnZXIgNQorCSRlbGVtLmJpbmQoImNsaWNrIiwgaGFuZGxl
cikudHJpZ2dlcigiY2xpY2siLCBbMSwgIjIiLCAiYWJjIl0pOworCisJLy8gU2ltdWxhdGUgYSAi
bmF0aXZlIiBjbGljaworCSRlbGVtWzBdLmNsaWNrID0gZnVuY3Rpb24oKXsKKwkJb2soIGZhbHNl
LCAiTmF0aXZlIGNhbGwgd2FzIHRyaWdnZXJlZCIgKTsKKwl9OworCisJLy8gVHJpZ2dlciBvbmx5
IHRoZSBoYW5kbGVycyAobm8gbmF0aXZlKQorCS8vIFRyaWdnZXJzIDUKKwllcXVhbHMoICRlbGVt
LnRyaWdnZXJIYW5kbGVyKCJjbGljayIsIFsxLCAiMiIsICJhYmMiXSksICJ0ZXN0IiwgIlZlcmlm
eSBoYW5kbGVyIHJlc3BvbnNlIiApOworCisJdmFyIHBhc3MgPSB0cnVlOworCXRyeSB7CisJCWpR
dWVyeSgnI2Zvcm0gaW5wdXQ6Zmlyc3QnKS5oaWRlKCkudHJpZ2dlcignZm9jdXMnKTsKKwl9IGNh
dGNoKGUpIHsKKwkJcGFzcyA9IGZhbHNlOworCX0KKwlvayggcGFzcywgIlRyaWdnZXIgZm9jdXMg
b24gaGlkZGVuIGVsZW1lbnQiICk7CisKKwlwYXNzID0gdHJ1ZTsKKwl0cnkgeworCQlqUXVlcnko
JyNtYWluIHRhYmxlOmZpcnN0JykuYmluZCgndGVzdDp0ZXN0JywgZnVuY3Rpb24oKXt9KS50cmln
Z2VyKCd0ZXN0OnRlc3QnKTsKKwl9IGNhdGNoIChlKSB7CisJCXBhc3MgPSBmYWxzZTsKKwl9CisJ
b2soIHBhc3MsICJUcmlnZ2VyIG9uIGEgdGFibGUgd2l0aCBhIGNvbG9uIGluIHRoZSBldmVuIHR5
cGUsIHNlZSAjMzUzMyIgKTsKKworCXZhciBmb3JtID0galF1ZXJ5KCI8Zm9ybSBhY3Rpb249Jyc+
PC9mb3JtPiIpLmFwcGVuZFRvKCJib2R5Iik7CisKKwkvLyBNYWtlIHN1cmUgaXQgY2FuIGJlIHBy
ZXZlbnRlZCBsb2NhbGx5CisJZm9ybS5zdWJtaXQoZnVuY3Rpb24oKXsKKwkJb2soIHRydWUsICJM
b2NhbCBiaW5kIHN0aWxsIHdvcmtzLiIgKTsKKwkJcmV0dXJuIGZhbHNlOworCX0pOworCisJLy8g
VHJpZ2dlciAxCisJZm9ybS50cmlnZ2VyKCJzdWJtaXQiKTsKKworCWZvcm0udW5iaW5kKCJzdWJt
aXQiKTsKKworCWpRdWVyeShkb2N1bWVudCkuc3VibWl0KGZ1bmN0aW9uKCl7CisJCW9rKCB0cnVl
LCAiTWFrZSBzdXJlIGJ1YmJsZSB3b3JrcyB1cCB0byBkb2N1bWVudC4iICk7CisJCXJldHVybiBm
YWxzZTsKKwl9KTsKKworCS8vIFRyaWdnZXIgMQorCWZvcm0udHJpZ2dlcigic3VibWl0Iik7CisK
KwlqUXVlcnkoZG9jdW1lbnQpLnVuYmluZCgic3VibWl0Iik7CisKKwlmb3JtLnJlbW92ZSgpOwor
fSk7CisKK3Rlc3QoImpRdWVyeS5FdmVudC5jdXJyZW50VGFyZ2V0IiwgZnVuY3Rpb24oKXsKK30p
OworCit0ZXN0KCJ0cmlnZ2VyKGV2ZW50T2JqZWN0LCBbZGF0YV0sIFtmbl0pIiwgZnVuY3Rpb24o
KSB7CisJZXhwZWN0KDI1KTsKKworCXZhciAkcGFyZW50ID0galF1ZXJ5KCc8ZGl2IGlkPSJwYXIi
IC8+JykuaGlkZSgpLmFwcGVuZFRvKCdib2R5JyksCisJCSRjaGlsZCA9IGpRdWVyeSgnPHAgaWQ9
ImNoaWxkIj5mb288L3A+JykuYXBwZW5kVG8oICRwYXJlbnQgKTsKKworCXZhciBldmVudCA9IGpR
dWVyeS5FdmVudCgibm9OZXciKTsKKwlvayggZXZlbnQgIT0gd2luZG93LCAiSW5zdGFudGlhdGUg
alF1ZXJ5LkV2ZW50IHdpdGhvdXQgdGhlICduZXcnIGtleXdvcmQiICk7CisJZXF1YWxzKCBldmVu
dC50eXBlLCAibm9OZXciLCAiVmVyaWZ5IGl0cyB0eXBlIiApOworCisJZXF1YWxzKCBldmVudC5p
c0RlZmF1bHRQcmV2ZW50ZWQoKSwgZmFsc2UsICJWZXJpZnkgaXNEZWZhdWx0UHJldmVudGVkIiAp
OworCWVxdWFscyggZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSwgZmFsc2UsICJWZXJpZnkg
aXNQcm9wYWdhdGlvblN0b3BwZWQiICk7CisJZXF1YWxzKCBldmVudC5pc0ltbWVkaWF0ZVByb3Bh
Z2F0aW9uU3RvcHBlZCgpLCBmYWxzZSwgIlZlcmlmeSBpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3Rv
cHBlZCIgKTsKKworCWV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisJZXF1YWxzKCBldmVudC5pc0Rl
ZmF1bHRQcmV2ZW50ZWQoKSwgdHJ1ZSwgIlZlcmlmeSBpc0RlZmF1bHRQcmV2ZW50ZWQiICk7CisJ
ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CisJZXF1YWxzKCBldmVudC5pc1Byb3BhZ2F0aW9uU3Rv
cHBlZCgpLCB0cnVlLCAiVmVyaWZ5IGlzUHJvcGFnYXRpb25TdG9wcGVkIiApOworCisJZXZlbnQu
aXNQcm9wYWdhdGlvblN0b3BwZWQgPSBmdW5jdGlvbigpeyByZXR1cm4gZmFsc2UgfTsKKwlldmVu
dC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTsKKwllcXVhbHMoIGV2ZW50LmlzUHJvcGFnYXRp
b25TdG9wcGVkKCksIHRydWUsICJWZXJpZnkgaXNQcm9wYWdhdGlvblN0b3BwZWQiICk7CisJZXF1
YWxzKCBldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpLCB0cnVlLCAiVmVyaWZ5
IGlzUHJvcGFnYXRpb25TdG9wcGVkIiApOworCisJJHBhcmVudC5iaW5kKCdmb28nLGZ1bmN0aW9u
KGUpeworCQkvLyBUcmllcyBidWJibGluZworCQllcXVhbHMoIGUudHlwZSwgJ2ZvbycsICdWZXJp
ZnkgZXZlbnQgdHlwZSB3aGVuIHBhc3NlZCBwYXNzaW5nIGFuIGV2ZW50IG9iamVjdCcgKTsKKwkJ
ZXF1YWxzKCBlLnRhcmdldC5pZCwgJ2NoaWxkJywgJ1ZlcmlmeSBldmVudC50YXJnZXQgd2hlbiBw
YXNzZWQgcGFzc2luZyBhbiBldmVudCBvYmplY3QnICk7CisJCWVxdWFscyggZS5jdXJyZW50VGFy
Z2V0LmlkLCAncGFyJywgJ1ZlcmlmeSBldmVudC50YXJnZXQgd2hlbiBwYXNzZWQgcGFzc2luZyBh
biBldmVudCBvYmplY3QnICk7CisJCWVxdWFscyggZS5zZWNyZXQsICdib28hJywgJ1ZlcmlmeSBl
dmVudCBvYmplY3RcJ3MgY3VzdG9tIGF0dHJpYnV0ZSB3aGVuIHBhc3NlZCBwYXNzaW5nIGFuIGV2
ZW50IG9iamVjdCcgKTsKKwl9KTsKKworCS8vIHRlc3Qgd2l0aCBhbiBldmVudCBvYmplY3QKKwll
dmVudCA9IG5ldyBqUXVlcnkuRXZlbnQoImZvbyIpOworCWV2ZW50LnNlY3JldCA9ICdib28hJzsK
KwkkY2hpbGQudHJpZ2dlcihldmVudCk7CisKKwkvLyB0ZXN0IHdpdGggYSBsaXRlcmFsIG9iamVj
dAorCSRjaGlsZC50cmlnZ2VyKHt0eXBlOidmb28nLCBzZWNyZXQ6J2JvbyEnfSk7CisKKwkkcGFy
ZW50LnVuYmluZCgpOworCisJZnVuY3Rpb24gZXJyb3IoKXsKKwkJb2soIGZhbHNlLCAiVGhpcyBh
c3NlcnRpb24gc2hvdWxkbid0IGJlIHJlYWNoZWQiKTsKKwl9CisKKwkkcGFyZW50LmJpbmQoJ2Zv
bycsIGVycm9yICk7CisKKwkkY2hpbGQuYmluZCgnZm9vJyxmdW5jdGlvbihlLCBhLCBiLCBjICl7
CisJCWVxdWFscyggYXJndW1lbnRzLmxlbmd0aCwgNCwgIkNoZWNrIGFyZ3VtZW50cyBsZW5ndGgi
KTsKKwkJZXF1YWxzKCBhLCAxLCAiQ2hlY2sgZmlyc3QgY3VzdG9tIGFyZ3VtZW50Iik7CisJCWVx
dWFscyggYiwgMiwgIkNoZWNrIHNlY29uZCBjdXN0b20gYXJndW1lbnQiKTsKKwkJZXF1YWxzKCBj
LCAzLCAiQ2hlY2sgdGhpcmQgY3VzdG9tIGFyZ3VtZW50Iik7CisKKwkJZXF1YWxzKCBlLmlzRGVm
YXVsdFByZXZlbnRlZCgpLCBmYWxzZSwgIlZlcmlmeSBpc0RlZmF1bHRQcmV2ZW50ZWQiICk7CisJ
CWVxdWFscyggZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpLCBmYWxzZSwgIlZlcmlmeSBpc1Byb3Bh
Z2F0aW9uU3RvcHBlZCIgKTsKKwkJZXF1YWxzKCBlLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9w
cGVkKCksIGZhbHNlLCAiVmVyaWZ5IGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkIiApOwor
CisJCS8vIFNraXBzIGJvdGggZXJyb3JzCisJCWUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7
CisKKwkJcmV0dXJuICJyZXN1bHQiOworCX0pOworCisJLy8gV2Ugc2hvdWxkIGFkZCB0aGlzIGJh
Y2sgaW4gd2hlbiB3ZSB3YW50IHRvIHRlc3QgdGhlIG9yZGVyCisJLy8gaW4gd2hpY2ggZXZlbnQg
aGFuZGxlcnMgYXJlIGl0ZXJhdGVkLgorCS8vJGNoaWxkLmJpbmQoJ2ZvbycsIGVycm9yICk7CisK
KwlldmVudCA9IG5ldyBqUXVlcnkuRXZlbnQoImZvbyIpOworCSRjaGlsZC50cmlnZ2VyKCBldmVu
dCwgWzEsMiwzXSApLnVuYmluZCgpOworCWVxdWFscyggZXZlbnQucmVzdWx0LCAicmVzdWx0Iiwg
IkNoZWNrIGV2ZW50LnJlc3VsdCBhdHRyaWJ1dGUiKTsKKworCS8vIFdpbGwgZXJyb3IgaWYgaXQg
YnViYmxlcworCSRjaGlsZC50cmlnZ2VySGFuZGxlcignZm9vJyk7CisKKwkkY2hpbGQudW5iaW5k
KCk7CisJJHBhcmVudC51bmJpbmQoKS5yZW1vdmUoKTsKK30pOworCit0ZXN0KCJqUXVlcnkuRXZl
bnQuY3VycmVudFRhcmdldCIsIGZ1bmN0aW9uKCl7CisJZXhwZWN0KDEpOworCisJdmFyIGNvdW50
ZXIgPSAwLAorCQkkZWxlbSA9IGpRdWVyeSgnPGJ1dHRvbj5hPC9idXR0b24+JykuY2xpY2soZnVu
Y3Rpb24oZSl7CisJCWVxdWFscyggZS5jdXJyZW50VGFyZ2V0LCB0aGlzLCAiQ2hlY2sgY3VycmVu
dFRhcmdldCBvbiAiKyhjb3VudGVyKys/Im5hdGl2ZSI6ImZha2UiKSArIiBldmVudCIgKTsKKwl9
KTsKKworCS8vIEZha2UgZXZlbnQKKwkkZWxlbS50cmlnZ2VyKCdjbGljaycpOworCisJLy8gQ2xl
YW51cAorCSRlbGVtLnVuYmluZCgpOworfSk7CisKK3Rlc3QoInRvZ2dsZShGdW5jdGlvbiwgRnVu
Y3Rpb24sIC4uLikiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMTYpOworCisJdmFyIGNvdW50ID0g
MCwKKwkJZm4xID0gZnVuY3Rpb24oZSkgeyBjb3VudCsrOyB9LAorCQlmbjIgPSBmdW5jdGlvbihl
KSB7IGNvdW50LS07IH0sCisJCXByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24oZSkgeyBlLnByZXZl
bnREZWZhdWx0KCkgfSwKKwkJbGluayA9IGpRdWVyeSgnI21hcmsnKTsKKwlsaW5rLmNsaWNrKHBy
ZXZlbnREZWZhdWx0KS5jbGljaygpLnRvZ2dsZShmbjEsIGZuMikuY2xpY2soKS5jbGljaygpLmNs
aWNrKCkuY2xpY2soKS5jbGljaygpOworCWVxdWFscyggY291bnQsIDEsICJDaGVjayBmb3IgdG9n
Z2xlKGZuLCBmbikiICk7CisKKwlqUXVlcnkoIiNmaXJzdHAiKS50b2dnbGUoZnVuY3Rpb24gKCkg
eworCQllcXVhbHMoYXJndW1lbnRzLmxlbmd0aCwgNCwgInRvZ2dsZSBjb3JyZWN0bHkgcGFzc2Vz
IHRocm91Z2ggYWRkaXRpb25hbCB0cmlnZ2VyZWQgYXJndW1lbnRzLCBzZWUgIzE3MDEiICkKKwl9
LCBmdW5jdGlvbigpIHt9KS50cmlnZ2VyKCJjbGljayIsIFsgMSwgMiwgMyBdKTsKKworCXZhciBm
aXJzdCA9IDA7CisJalF1ZXJ5KCIjc2ltb24xIikub25lKCJjbGljayIsIGZ1bmN0aW9uKCkgewor
CQlvayggdHJ1ZSwgIkV4ZWN1dGUgZXZlbnQgb25seSBvbmNlIiApOworCQlqUXVlcnkodGhpcyku
dG9nZ2xlKGZ1bmN0aW9uKCkgeworCQkJZXF1YWxzKCBmaXJzdCsrLCAwLCAidG9nZ2xlKEZ1bmN0
aW9uLEZ1bmN0aW9uKSBhc3NpZ25lZCBmcm9tIHdpdGhpbiBvbmUoJ3h4eCcpLCBzZWUgIzEwNTQi
ICk7CisJCX0sIGZ1bmN0aW9uKCkgeworCQkJZXF1YWxzKCBmaXJzdCwgMSwgInRvZ2dsZShGdW5j
dGlvbixGdW5jdGlvbikgYXNzaWduZWQgZnJvbSB3aXRoaW4gb25lKCd4eHgnKSwgc2VlICMxMDU0
IiApOworCQl9KTsKKwkJcmV0dXJuIGZhbHNlOworCX0pLmNsaWNrKCkuY2xpY2soKS5jbGljaygp
OworCisJdmFyIHR1cm4gPSAwOworCXZhciBmbnMgPSBbCisJCWZ1bmN0aW9uKCl7CisJCQl0dXJu
ID0gMTsKKwkJfSwKKwkJZnVuY3Rpb24oKXsKKwkJCXR1cm4gPSAyOworCQl9LAorCQlmdW5jdGlv
bigpeworCQkJdHVybiA9IDM7CisJCX0KKwldOworCisJdmFyICRkaXYgPSBqUXVlcnkoIjxkaXY+
Jm5ic3A7PC9kaXY+IikudG9nZ2xlKCBmbnNbMF0sIGZuc1sxXSwgZm5zWzJdICk7CisJJGRpdi5j
bGljaygpOworCWVxdWFscyggdHVybiwgMSwgIlRyeWluZyB0b2dnbGUgd2l0aCAzIGZ1bmN0aW9u
cywgYXR0ZW1wdCAxIHlpZWxkcyAxIik7CisJJGRpdi5jbGljaygpOworCWVxdWFscyggdHVybiwg
MiwgIlRyeWluZyB0b2dnbGUgd2l0aCAzIGZ1bmN0aW9ucywgYXR0ZW1wdCAyIHlpZWxkcyAyIik7
CisJJGRpdi5jbGljaygpOworCWVxdWFscyggdHVybiwgMywgIlRyeWluZyB0b2dnbGUgd2l0aCAz
IGZ1bmN0aW9ucywgYXR0ZW1wdCAzIHlpZWxkcyAzIik7CisJJGRpdi5jbGljaygpOworCWVxdWFs
cyggdHVybiwgMSwgIlRyeWluZyB0b2dnbGUgd2l0aCAzIGZ1bmN0aW9ucywgYXR0ZW1wdCA0IHlp
ZWxkcyAxIik7CisJJGRpdi5jbGljaygpOworCWVxdWFscyggdHVybiwgMiwgIlRyeWluZyB0b2dn
bGUgd2l0aCAzIGZ1bmN0aW9ucywgYXR0ZW1wdCA1IHlpZWxkcyAyIik7CisKKwkkZGl2LnVuYmlu
ZCgnY2xpY2snLGZuc1swXSk7CisJdmFyIGRhdGEgPSBqUXVlcnkuX2RhdGEoICRkaXZbMF0sICdl
dmVudHMnICk7CisJb2soICFkYXRhLCAiVW5iaW5kaW5nIG9uZSBmdW5jdGlvbiBmcm9tIHRvZ2ds
ZSB1bmJpbmRzIHRoZW0gYWxsIik7CisKKwkvLyBtYW51YWxseSBjbGVhbiB1cCBkZXRhY2hlZCBl
bGVtZW50cworCSRkaXYucmVtb3ZlKCk7CisKKwkvLyBUZXN0IE11bHRpLVRvZ2dsZXMKKwl2YXIg
YSA9IFtdLCBiID0gW107CisJJGRpdiA9IGpRdWVyeSgiPGRpdi8+Iik7CisJJGRpdi50b2dnbGUo
ZnVuY3Rpb24oKXsgYS5wdXNoKDEpOyB9LCBmdW5jdGlvbigpeyBhLnB1c2goMik7IH0pOworCSRk
aXYuY2xpY2soKTsKKwlzYW1lKCBhLCBbMV0sICJDaGVjayB0aGF0IGEgY2xpY2sgd29ya2VkLiIg
KTsKKworCSRkaXYudG9nZ2xlKGZ1bmN0aW9uKCl7IGIucHVzaCgxKTsgfSwgZnVuY3Rpb24oKXsg
Yi5wdXNoKDIpOyB9KTsKKwkkZGl2LmNsaWNrKCk7CisJc2FtZSggYSwgWzEsMl0sICJDaGVjayB0
aGF0IGEgY2xpY2sgd29ya2VkIHdpdGggYSBzZWNvbmQgdG9nZ2xlLiIgKTsKKwlzYW1lKCBiLCBb
MV0sICJDaGVjayB0aGF0IGEgY2xpY2sgd29ya2VkIHdpdGggYSBzZWNvbmQgdG9nZ2xlLiIgKTsK
KworCSRkaXYuY2xpY2soKTsKKwlzYW1lKCBhLCBbMSwyLDFdLCAiQ2hlY2sgdGhhdCBhIGNsaWNr
IHdvcmtlZCB3aXRoIGEgc2Vjb25kIHRvZ2dsZSwgc2Vjb25kIGNsaWNrLiIgKTsKKwlzYW1lKCBi
LCBbMSwyXSwgIkNoZWNrIHRoYXQgYSBjbGljayB3b3JrZWQgd2l0aCBhIHNlY29uZCB0b2dnbGUs
IHNlY29uZCBjbGljay4iICk7CisKKwkvLyBtYW51YWxseSBjbGVhbiB1cCBkZXRhY2hlZCBlbGVt
ZW50cworCSRkaXYucmVtb3ZlKCk7Cit9KTsKKwordGVzdCgiLmxpdmUoKS8uZGllKCkiLCBmdW5j
dGlvbigpIHsKKwlleHBlY3QoNjYpOworCisJdmFyIHN1Ym1pdCA9IDAsIGRpdiA9IDAsIGxpdmVh
ID0gMCwgbGl2ZWIgPSAwOworCisJalF1ZXJ5KCJkaXYiKS5saXZlKCJzdWJtaXQiLCBmdW5jdGlv
bigpeyBzdWJtaXQrKzsgcmV0dXJuIGZhbHNlOyB9KTsKKwlqUXVlcnkoImRpdiIpLmxpdmUoImNs
aWNrIiwgZnVuY3Rpb24oKXsgZGl2Kys7IH0pOworCWpRdWVyeSgiZGl2I25vdGhpZGRlbmRpdiIp
LmxpdmUoImNsaWNrIiwgZnVuY3Rpb24oKXsgbGl2ZWErKzsgfSk7CisJalF1ZXJ5KCJkaXYjbm90
aGlkZGVuZGl2Y2hpbGQiKS5saXZlKCJjbGljayIsIGZ1bmN0aW9uKCl7IGxpdmViKys7IH0pOwor
CisJLy8gTm90aGluZyBzaG91bGQgdHJpZ2dlciBvbiB0aGUgYm9keQorCWpRdWVyeSgiYm9keSIp
LnRyaWdnZXIoImNsaWNrIik7CisJZXF1YWxzKCBzdWJtaXQsIDAsICJDbGljayBvbiBib2R5IiAp
OworCWVxdWFscyggZGl2LCAwLCAiQ2xpY2sgb24gYm9keSIgKTsKKwllcXVhbHMoIGxpdmVhLCAw
LCAiQ2xpY2sgb24gYm9keSIgKTsKKwllcXVhbHMoIGxpdmViLCAwLCAiQ2xpY2sgb24gYm9keSIg
KTsKKworCS8vIFRoaXMgc2hvdWxkIHRyaWdnZXIgdHdvIGV2ZW50cworCXN1Ym1pdCA9IDAsIGRp
diA9IDAsIGxpdmVhID0gMCwgbGl2ZWIgPSAwOworCWpRdWVyeSgiZGl2I25vdGhpZGRlbmRpdiIp
LnRyaWdnZXIoImNsaWNrIik7CisJZXF1YWxzKCBzdWJtaXQsIDAsICJDbGljayBvbiBkaXYiICk7
CisJZXF1YWxzKCBkaXYsIDEsICJDbGljayBvbiBkaXYiICk7CisJZXF1YWxzKCBsaXZlYSwgMSwg
IkNsaWNrIG9uIGRpdiIgKTsKKwllcXVhbHMoIGxpdmViLCAwLCAiQ2xpY2sgb24gZGl2IiApOwor
CisJLy8gVGhpcyBzaG91bGQgdHJpZ2dlciB0aHJlZSBldmVudHMgKHcvIGJ1YmJsaW5nKQorCXN1
Ym1pdCA9IDAsIGRpdiA9IDAsIGxpdmVhID0gMCwgbGl2ZWIgPSAwOworCWpRdWVyeSgiZGl2I25v
dGhpZGRlbmRpdmNoaWxkIikudHJpZ2dlcigiY2xpY2siKTsKKwllcXVhbHMoIHN1Ym1pdCwgMCwg
IkNsaWNrIG9uIGlubmVyIGRpdiIgKTsKKwllcXVhbHMoIGRpdiwgMiwgIkNsaWNrIG9uIGlubmVy
IGRpdiIgKTsKKwllcXVhbHMoIGxpdmVhLCAxLCAiQ2xpY2sgb24gaW5uZXIgZGl2IiApOworCWVx
dWFscyggbGl2ZWIsIDEsICJDbGljayBvbiBpbm5lciBkaXYiICk7CisKKwkvLyBUaGlzIHNob3Vs
ZCB0cmlnZ2VyIG9uZSBzdWJtaXQKKwlzdWJtaXQgPSAwLCBkaXYgPSAwLCBsaXZlYSA9IDAsIGxp
dmViID0gMDsKKwlqUXVlcnkoImRpdiNub3RoaWRkZW5kaXZjaGlsZCIpLnRyaWdnZXIoInN1Ym1p
dCIpOworCWVxdWFscyggc3VibWl0LCAxLCAiU3VibWl0IG9uIGRpdiIgKTsKKwllcXVhbHMoIGRp
diwgMCwgIlN1Ym1pdCBvbiBkaXYiICk7CisJZXF1YWxzKCBsaXZlYSwgMCwgIlN1Ym1pdCBvbiBk
aXYiICk7CisJZXF1YWxzKCBsaXZlYiwgMCwgIlN1Ym1pdCBvbiBkaXYiICk7CisKKwkvLyBNYWtl
IHN1cmUgbm8gb3RoZXIgZXZlbnRzIHdlcmUgcmVtb3ZlZCBpbiB0aGUgcHJvY2VzcworCXN1Ym1p
dCA9IDAsIGRpdiA9IDAsIGxpdmVhID0gMCwgbGl2ZWIgPSAwOworCWpRdWVyeSgiZGl2I25vdGhp
ZGRlbmRpdmNoaWxkIikudHJpZ2dlcigiY2xpY2siKTsKKwllcXVhbHMoIHN1Ym1pdCwgMCwgImRp
ZSBDbGljayBvbiBpbm5lciBkaXYiICk7CisJZXF1YWxzKCBkaXYsIDIsICJkaWUgQ2xpY2sgb24g
aW5uZXIgZGl2IiApOworCWVxdWFscyggbGl2ZWEsIDEsICJkaWUgQ2xpY2sgb24gaW5uZXIgZGl2
IiApOworCWVxdWFscyggbGl2ZWIsIDEsICJkaWUgQ2xpY2sgb24gaW5uZXIgZGl2IiApOworCisJ
Ly8gTm93IG1ha2Ugc3VyZSB0aGF0IHRoZSByZW1vdmFsIHdvcmtzCisJc3VibWl0ID0gMCwgZGl2
ID0gMCwgbGl2ZWEgPSAwLCBsaXZlYiA9IDA7CisJalF1ZXJ5KCJkaXYjbm90aGlkZGVuZGl2Y2hp
bGQiKS5kaWUoImNsaWNrIik7CisJalF1ZXJ5KCJkaXYjbm90aGlkZGVuZGl2Y2hpbGQiKS50cmln
Z2VyKCJjbGljayIpOworCWVxdWFscyggc3VibWl0LCAwLCAiZGllIENsaWNrIG9uIGlubmVyIGRp
diIgKTsKKwllcXVhbHMoIGRpdiwgMiwgImRpZSBDbGljayBvbiBpbm5lciBkaXYiICk7CisJZXF1
YWxzKCBsaXZlYSwgMSwgImRpZSBDbGljayBvbiBpbm5lciBkaXYiICk7CisJZXF1YWxzKCBsaXZl
YiwgMCwgImRpZSBDbGljayBvbiBpbm5lciBkaXYiICk7CisKKwkvLyBNYWtlIHN1cmUgdGhhdCB0
aGUgY2xpY2sgd2Fzbid0IHJlbW92ZWQgdG9vIGVhcmx5CisJc3VibWl0ID0gMCwgZGl2ID0gMCwg
bGl2ZWEgPSAwLCBsaXZlYiA9IDA7CisJalF1ZXJ5KCJkaXYjbm90aGlkZGVuZGl2IikudHJpZ2dl
cigiY2xpY2siKTsKKwllcXVhbHMoIHN1Ym1pdCwgMCwgImRpZSBDbGljayBvbiBpbm5lciBkaXYi
ICk7CisJZXF1YWxzKCBkaXYsIDEsICJkaWUgQ2xpY2sgb24gaW5uZXIgZGl2IiApOworCWVxdWFs
cyggbGl2ZWEsIDEsICJkaWUgQ2xpY2sgb24gaW5uZXIgZGl2IiApOworCWVxdWFscyggbGl2ZWIs
IDAsICJkaWUgQ2xpY2sgb24gaW5uZXIgZGl2IiApOworCisJLy8gTWFrZSBzdXJlIHRoYXQgc3Rv
cFByb3BnYXRpb24gZG9lc24ndCBzdG9wIGxpdmUgZXZlbnRzCisJc3VibWl0ID0gMCwgZGl2ID0g
MCwgbGl2ZWEgPSAwLCBsaXZlYiA9IDA7CisJalF1ZXJ5KCJkaXYjbm90aGlkZGVuZGl2Y2hpbGQi
KS5saXZlKCJjbGljayIsIGZ1bmN0aW9uKGUpeyBsaXZlYisrOyBlLnN0b3BQcm9wYWdhdGlvbigp
OyB9KTsKKwlqUXVlcnkoImRpdiNub3RoaWRkZW5kaXZjaGlsZCIpLnRyaWdnZXIoImNsaWNrIik7
CisJZXF1YWxzKCBzdWJtaXQsIDAsICJzdG9wUHJvcGFnYXRpb24gQ2xpY2sgb24gaW5uZXIgZGl2
IiApOworCWVxdWFscyggZGl2LCAxLCAic3RvcFByb3BhZ2F0aW9uIENsaWNrIG9uIGlubmVyIGRp
diIgKTsKKwllcXVhbHMoIGxpdmVhLCAwLCAic3RvcFByb3BhZ2F0aW9uIENsaWNrIG9uIGlubmVy
IGRpdiIgKTsKKwllcXVhbHMoIGxpdmViLCAxLCAic3RvcFByb3BhZ2F0aW9uIENsaWNrIG9uIGlu
bmVyIGRpdiIgKTsKKworCS8vIE1ha2Ugc3VyZSBjbGljayBldmVudHMgb25seSBmaXJlIHdpdGgg
cHJpbWFyeSBjbGljaworCXN1Ym1pdCA9IDAsIGRpdiA9IDAsIGxpdmVhID0gMCwgbGl2ZWIgPSAw
OworCXZhciBldmVudCA9IGpRdWVyeS5FdmVudCgiY2xpY2siKTsKKwlldmVudC5idXR0b24gPSAx
OworCWpRdWVyeSgiZGl2I25vdGhpZGRlbmRpdiIpLnRyaWdnZXIoZXZlbnQpOworCisJZXF1YWxz
KCBsaXZlYSwgMCwgImxpdmUgc2Vjb25kYXJ5IGNsaWNrIiApOworCisJalF1ZXJ5KCJkaXYjbm90
aGlkZGVuZGl2Y2hpbGQiKS5kaWUoImNsaWNrIik7CisJalF1ZXJ5KCJkaXYjbm90aGlkZGVuZGl2
IikuZGllKCJjbGljayIpOworCWpRdWVyeSgiZGl2IikuZGllKCJjbGljayIpOworCWpRdWVyeSgi
ZGl2IikuZGllKCJzdWJtaXQiKTsKKworCS8vIFRlc3QgYmluZGluZyB3aXRoIGEgZGlmZmVyZW50
IGNvbnRleHQKKwl2YXIgY2xpY2tlZCA9IDAsIGNvbnRhaW5lciA9IGpRdWVyeSgnI21haW4nKVsw
XTsKKwlqUXVlcnkoIiNmb28iLCBjb250YWluZXIpLmxpdmUoImNsaWNrIiwgZnVuY3Rpb24oZSl7
IGNsaWNrZWQrKzsgfSk7CisJalF1ZXJ5KCJkaXYiKS50cmlnZ2VyKCdjbGljaycpOworCWpRdWVy
eSgiI2ZvbyIpLnRyaWdnZXIoJ2NsaWNrJyk7CisJalF1ZXJ5KCIjbWFpbiIpLnRyaWdnZXIoJ2Ns
aWNrJyk7CisJalF1ZXJ5KCJib2R5IikudHJpZ2dlcignY2xpY2snKTsKKwllcXVhbHMoIGNsaWNr
ZWQsIDIsICJsaXZlIHdpdGggYSBjb250ZXh0IiApOworCisJLy8gTWFrZSBzdXJlIHRoZSBldmVu
dCBpcyBhY3R1YWxseSBzdG9yZWQgb24gdGhlIGNvbnRleHQKKwlvayggalF1ZXJ5Ll9kYXRhKGNv
bnRhaW5lciwgImV2ZW50cyIpLmxpdmUsICJsaXZlIHdpdGggYSBjb250ZXh0IiApOworCisJLy8g
VGVzdCB1bmJpbmRpbmcgd2l0aCBhIGRpZmZlcmVudCBjb250ZXh0CisJalF1ZXJ5KCIjZm9vIiwg
Y29udGFpbmVyKS5kaWUoImNsaWNrIik7CisJalF1ZXJ5KCIjZm9vIikudHJpZ2dlcignY2xpY2sn
KTsKKwllcXVhbHMoIGNsaWNrZWQsIDIsICJkaWUgd2l0aCBhIGNvbnRleHQiKTsKKworCS8vIFRl
c3QgYmluZGluZyB3aXRoIGV2ZW50IGRhdGEKKwlqUXVlcnkoIiNmb28iKS5saXZlKCJjbGljayIs
IHRydWUsIGZ1bmN0aW9uKGUpeyBlcXVhbHMoIGUuZGF0YSwgdHJ1ZSwgImxpdmUgd2l0aCBldmVu
dCBkYXRhIiApOyB9KTsKKwlqUXVlcnkoIiNmb28iKS50cmlnZ2VyKCJjbGljayIpLmRpZSgiY2xp
Y2siKTsKKworCS8vIFRlc3QgYmluZGluZyB3aXRoIHRyaWdnZXIgZGF0YQorCWpRdWVyeSgiI2Zv
byIpLmxpdmUoImNsaWNrIiwgZnVuY3Rpb24oZSwgZGF0YSl7IGVxdWFscyggZGF0YSwgdHJ1ZSwg
ImxpdmUgd2l0aCB0cmlnZ2VyIGRhdGEiICk7IH0pOworCWpRdWVyeSgiI2ZvbyIpLnRyaWdnZXIo
ImNsaWNrIiwgdHJ1ZSkuZGllKCJjbGljayIpOworCisJLy8gVGVzdCBiaW5kaW5nIHdpdGggZGlm
ZmVyZW50IHRoaXMgb2JqZWN0CisJalF1ZXJ5KCIjZm9vIikubGl2ZSgiY2xpY2siLCBqUXVlcnku
cHJveHkoZnVuY3Rpb24oZSl7IGVxdWFscyggdGhpcy5mb28sICJiYXIiLCAibGl2ZSB3aXRoIGV2
ZW50IHNjb3BlIiApOyB9LCB7IGZvbzogImJhciIgfSkpOworCWpRdWVyeSgiI2ZvbyIpLnRyaWdn
ZXIoImNsaWNrIikuZGllKCJjbGljayIpOworCisJLy8gVGVzdCBiaW5kaW5nIHdpdGggZGlmZmVy
ZW50IHRoaXMgb2JqZWN0LCBldmVudCBkYXRhLCBhbmQgdHJpZ2dlciBkYXRhCisJalF1ZXJ5KCIj
Zm9vIikubGl2ZSgiY2xpY2siLCB0cnVlLCBqUXVlcnkucHJveHkoZnVuY3Rpb24oZSwgZGF0YSl7
CisJCWVxdWFscyggZS5kYXRhLCB0cnVlLCAibGl2ZSB3aXRoIHdpdGggZGlmZmVyZW50IHRoaXMg
b2JqZWN0LCBldmVudCBkYXRhLCBhbmQgdHJpZ2dlciBkYXRhIiApOworCQllcXVhbHMoIHRoaXMu
Zm9vLCAiYmFyIiwgImxpdmUgd2l0aCB3aXRoIGRpZmZlcmVudCB0aGlzIG9iamVjdCwgZXZlbnQg
ZGF0YSwgYW5kIHRyaWdnZXIgZGF0YSIgKTsKKwkJZXF1YWxzKCBkYXRhLCB0cnVlLCAibGl2ZSB3
aXRoIHdpdGggZGlmZmVyZW50IHRoaXMgb2JqZWN0LCBldmVudCBkYXRhLCBhbmQgdHJpZ2dlciBk
YXRhIikKKwl9LCB7IGZvbzogImJhciIgfSkpOworCWpRdWVyeSgiI2ZvbyIpLnRyaWdnZXIoImNs
aWNrIiwgdHJ1ZSkuZGllKCJjbGljayIpOworCisJLy8gVmVyaWZ5IHRoYXQgcmV0dXJuIGZhbHNl
IHByZXZlbnRzIGRlZmF1bHQgYWN0aW9uCisJalF1ZXJ5KCIjYW5jaG9yMiIpLmxpdmUoImNsaWNr
IiwgZnVuY3Rpb24oKXsgcmV0dXJuIGZhbHNlOyB9KTsKKwl2YXIgaGFzaCA9IHdpbmRvdy5sb2Nh
dGlvbi5oYXNoOworCWpRdWVyeSgiI2FuY2hvcjIiKS50cmlnZ2VyKCJjbGljayIpOworCWVxdWFs
cyggd2luZG93LmxvY2F0aW9uLmhhc2gsIGhhc2gsICJyZXR1cm4gZmFsc2Ugd29ya2VkIiApOwor
CWpRdWVyeSgiI2FuY2hvcjIiKS5kaWUoImNsaWNrIik7CisKKwkvLyBWZXJpZnkgdGhhdCAucHJl
dmVudERlZmF1bHQoKSBwcmV2ZW50cyBkZWZhdWx0IGFjdGlvbgorCWpRdWVyeSgiI2FuY2hvcjIi
KS5saXZlKCJjbGljayIsIGZ1bmN0aW9uKGUpeyBlLnByZXZlbnREZWZhdWx0KCk7IH0pOworCXZh
ciBoYXNoID0gd2luZG93LmxvY2F0aW9uLmhhc2g7CisJalF1ZXJ5KCIjYW5jaG9yMiIpLnRyaWdn
ZXIoImNsaWNrIik7CisJZXF1YWxzKCB3aW5kb3cubG9jYXRpb24uaGFzaCwgaGFzaCwgImUucHJl
dmVudERlZmF1bHQoKSB3b3JrZWQiICk7CisJalF1ZXJ5KCIjYW5jaG9yMiIpLmRpZSgiY2xpY2si
KTsKKworCS8vIFRlc3QgYmluZGluZyB0aGUgc2FtZSBoYW5kbGVyIHRvIG11bHRpcGxlIHBvaW50
cworCXZhciBjYWxsZWQgPSAwOworCWZ1bmN0aW9uIGNhbGxiYWNrKCl7IGNhbGxlZCsrOyByZXR1
cm4gZmFsc2U7IH0KKworCWpRdWVyeSgiI25vdGhpZGRlbmRpdiIpLmxpdmUoImNsaWNrIiwgY2Fs
bGJhY2spOworCWpRdWVyeSgiI2FuY2hvcjIiKS5saXZlKCJjbGljayIsIGNhbGxiYWNrKTsKKwor
CWpRdWVyeSgiI25vdGhpZGRlbmRpdiIpLnRyaWdnZXIoImNsaWNrIik7CisJZXF1YWxzKCBjYWxs
ZWQsIDEsICJWZXJpZnkgdGhhdCBvbmx5IG9uZSBjbGljayBvY2N1cnJlZC4iICk7CisKKwljYWxs
ZWQgPSAwOworCWpRdWVyeSgiI2FuY2hvcjIiKS50cmlnZ2VyKCJjbGljayIpOworCWVxdWFscygg
Y2FsbGVkLCAxLCAiVmVyaWZ5IHRoYXQgb25seSBvbmUgY2xpY2sgb2NjdXJyZWQuIiApOworCisJ
Ly8gTWFrZSBzdXJlIHRoYXQgb25seSBvbmUgY2FsbGJhY2sgaXMgcmVtb3ZlZAorCWpRdWVyeSgi
I2FuY2hvcjIiKS5kaWUoImNsaWNrIiwgY2FsbGJhY2spOworCisJY2FsbGVkID0gMDsKKwlqUXVl
cnkoIiNub3RoaWRkZW5kaXYiKS50cmlnZ2VyKCJjbGljayIpOworCWVxdWFscyggY2FsbGVkLCAx
LCAiVmVyaWZ5IHRoYXQgb25seSBvbmUgY2xpY2sgb2NjdXJyZWQuIiApOworCisJY2FsbGVkID0g
MDsKKwlqUXVlcnkoIiNhbmNob3IyIikudHJpZ2dlcigiY2xpY2siKTsKKwllcXVhbHMoIGNhbGxl
ZCwgMCwgIlZlcmlmeSB0aGF0IG5vIGNsaWNrIG9jY3VycmVkLiIgKTsKKworCS8vIE1ha2Ugc3Vy
ZSB0aGF0IGl0IHN0aWxsIHdvcmtzIGlmIHRoZSBzZWxlY3RvciBpcyB0aGUgc2FtZSwKKwkvLyBi
dXQgdGhlIGV2ZW50IHR5cGUgaXMgZGlmZmVyZW50CisJalF1ZXJ5KCIjbm90aGlkZGVuZGl2Iiku
bGl2ZSgiZm9vIiwgY2FsbGJhY2spOworCisJLy8gQ2xlYW51cAorCWpRdWVyeSgiI25vdGhpZGRl
bmRpdiIpLmRpZSgiY2xpY2siLCBjYWxsYmFjayk7CisKKwljYWxsZWQgPSAwOworCWpRdWVyeSgi
I25vdGhpZGRlbmRpdiIpLnRyaWdnZXIoImNsaWNrIik7CisJZXF1YWxzKCBjYWxsZWQsIDAsICJW
ZXJpZnkgdGhhdCBubyBjbGljayBvY2N1cnJlZC4iICk7CisKKwljYWxsZWQgPSAwOworCWpRdWVy
eSgiI25vdGhpZGRlbmRpdiIpLnRyaWdnZXIoImZvbyIpOworCWVxdWFscyggY2FsbGVkLCAxLCAi
VmVyaWZ5IHRoYXQgb25lIGZvbyBvY2N1cnJlZC4iICk7CisKKwkvLyBDbGVhbnVwCisJalF1ZXJ5
KCIjbm90aGlkZGVuZGl2IikuZGllKCJmb28iLCBjYWxsYmFjayk7CisKKwkvLyBNYWtlIHN1cmUg
d2UgZG9uJ3QgbG9vc2UgdGhlIHRhcmdldCBieSBET00gbW9kaWZpY2F0aW9ucworCS8vIGFmdGVy
IHRoZSBidWJibGUgYWxyZWFkeSByZWFjaGVkIHRoZSBsaXZlSGFuZGxlcgorCXZhciBsaXZlYyA9
IDAsIGVsZW1EaXYgPSBqUXVlcnkoIiNub3RoaWRkZW5kaXZjaGlsZCIpLmh0bWwoJzxzcGFuPjwv
c3Bhbj4nKS5nZXQoMCk7CisKKwlqUXVlcnkoIiNub3RoaWRkZW5kaXZjaGlsZCIpLmxpdmUoImNs
aWNrIiwgZnVuY3Rpb24oZSl7IGpRdWVyeSgiI25vdGhpZGRlbmRpdmNoaWxkIikuaHRtbCgnJyk7
IH0pOworCWpRdWVyeSgiI25vdGhpZGRlbmRpdmNoaWxkIikubGl2ZSgiY2xpY2siLCBmdW5jdGlv
bihlKXsgaWYoZS50YXJnZXQpIHtsaXZlYysrO30gfSk7CisKKwlqUXVlcnkoIiNub3RoaWRkZW5k
aXYgc3BhbiIpLmNsaWNrKCk7CisJZXF1YWxzKCBqUXVlcnkoIiNub3RoaWRkZW5kaXYgc3BhbiIp
Lmxlbmd0aCwgMCwgIlZlcmlmeSB0aGF0IGZpcnN0IGhhbmRsZXIgb2NjdXJyZWQgYW5kIG1vZGlm
aWVkIHRoZSBET00uIiApOworCWVxdWFscyggbGl2ZWMsIDEsICJWZXJpZnkgdGhhdCBzZWNvbmQg
aGFuZGxlciBvY2N1cnJlZCBldmVuIHdpdGggbnVrZWQgdGFyZ2V0LiIgKTsKKworCS8vIENsZWFu
dXAKKwlqUXVlcnkoIiNub3RoaWRkZW5kaXZjaGlsZCIpLmRpZSgiY2xpY2siKTsKKworCS8vIFZl
cmlmeSB0aGF0IC5saXZlKCkgb2N1cnMgYW5kIGNhbmNlbCBidWJsZSBpbiB0aGUgc2FtZSBvcmRl
ciBhcworCS8vIHdlIHdvdWxkIGV4cGVjdCAuYmluZCgpIGFuZCAuY2xpY2soKSB3aXRob3V0IGRl
bGVnYXRpb24KKwl2YXIgbGl2ZWQgPSAwLCBsaXZlZSA9IDA7CisKKwkvLyBiaW5kIG9uZSBwYWly
IGluIG9uZSBvcmRlcgorCWpRdWVyeSgnc3BhbiNsaXZlU3BhbjEgYScpLmxpdmUoJ2NsaWNrJywg
ZnVuY3Rpb24oKXsgbGl2ZWQrKzsgcmV0dXJuIGZhbHNlOyB9KTsKKwlqUXVlcnkoJ3NwYW4jbGl2
ZVNwYW4xJykubGl2ZSgnY2xpY2snLCBmdW5jdGlvbigpeyBsaXZlZSsrOyB9KTsKKworCWpRdWVy
eSgnc3BhbiNsaXZlU3BhbjEgYScpLmNsaWNrKCk7CisJZXF1YWxzKCBsaXZlZCwgMSwgIlZlcmlm
eSB0aGF0IG9ubHkgb25lIGZpcnN0IGhhbmRsZXIgb2NjdXJyZWQuIiApOworCWVxdWFscyggbGl2
ZWUsIDAsICJWZXJpZnkgdGhhdCBzZWNvbmQgaGFuZGxlciBkb2Vzbid0LiIgKTsKKworCS8vIGFu
ZCBvbmUgcGFpciBpbiBpbnZlcnNlCisJalF1ZXJ5KCdzcGFuI2xpdmVTcGFuMicpLmxpdmUoJ2Ns
aWNrJywgZnVuY3Rpb24oKXsgbGl2ZWUrKzsgfSk7CisJalF1ZXJ5KCdzcGFuI2xpdmVTcGFuMiBh
JykubGl2ZSgnY2xpY2snLCBmdW5jdGlvbigpeyBsaXZlZCsrOyByZXR1cm4gZmFsc2U7IH0pOwor
CisJbGl2ZWQgPSAwOworCWxpdmVlID0gMDsKKwlqUXVlcnkoJ3NwYW4jbGl2ZVNwYW4yIGEnKS5j
bGljaygpOworCWVxdWFscyggbGl2ZWQsIDEsICJWZXJpZnkgdGhhdCBvbmx5IG9uZSBmaXJzdCBo
YW5kbGVyIG9jY3VycmVkLiIgKTsKKwllcXVhbHMoIGxpdmVlLCAwLCAiVmVyaWZ5IHRoYXQgc2Vj
b25kIGhhbmRsZXIgZG9lc24ndC4iICk7CisKKwkvLyBDbGVhbnVwCisJalF1ZXJ5KCJzcGFuI2xp
dmVTcGFuMSBhIikuZGllKCJjbGljayIpCisJalF1ZXJ5KCJzcGFuI2xpdmVTcGFuMSIpLmRpZSgi
Y2xpY2siKTsKKwlqUXVlcnkoInNwYW4jbGl2ZVNwYW4yIGEiKS5kaWUoImNsaWNrIik7CisJalF1
ZXJ5KCJzcGFuI2xpdmVTcGFuMiIpLmRpZSgiY2xpY2siKTsKKworCS8vIFRlc3QgdGhpcywgdGFy
Z2V0IGFuZCBjdXJyZW50VGFyZ2V0IGFyZSBjb3JyZWN0CisJalF1ZXJ5KCdzcGFuI2xpdmVTcGFu
MScpLmxpdmUoJ2NsaWNrJywgZnVuY3Rpb24oZSl7CisJCWVxdWFscyggdGhpcy5pZCwgJ2xpdmVT
cGFuMScsICdDaGVjayB0aGUgdGhpcyB3aXRoaW4gYSBsaXZlIGhhbmRsZXInICk7CisJCWVxdWFs
cyggZS5jdXJyZW50VGFyZ2V0LmlkLCAnbGl2ZVNwYW4xJywgJ0NoZWNrIHRoZSBldmVudC5jdXJy
ZW50VGFyZ2V0IHdpdGhpbiBhIGxpdmUgaGFuZGxlcicgKTsKKwkJZXF1YWxzKCBlLnRhcmdldC5u
b2RlTmFtZS50b1VwcGVyQ2FzZSgpLCAnQScsICdDaGVjayB0aGUgZXZlbnQudGFyZ2V0IHdpdGhp
biBhIGxpdmUgaGFuZGxlcicgKTsKKwl9KTsKKworCWpRdWVyeSgnc3BhbiNsaXZlU3BhbjEgYScp
LmNsaWNrKCk7CisKKwlqUXVlcnkoJ3NwYW4jbGl2ZVNwYW4xJykuZGllKCdjbGljaycpOworCisJ
Ly8gV29yayB3aXRoIGRlZXAgc2VsZWN0b3JzCisJbGl2ZWUgPSAwOworCisJZnVuY3Rpb24gY2xp
Y2tCKCl7IGxpdmVlKys7IH0KKworCWpRdWVyeSgiI25vdGhpZGRlbmRpdiBkaXYiKS5saXZlKCJj
bGljayIsIGZ1bmN0aW9uKCl7IGxpdmVlKys7IH0pOworCWpRdWVyeSgiI25vdGhpZGRlbmRpdiBk
aXYiKS5saXZlKCJjbGljayIsIGNsaWNrQik7CisJalF1ZXJ5KCIjbm90aGlkZGVuZGl2IGRpdiIp
LmxpdmUoIm1vdXNlb3ZlciIsIGZ1bmN0aW9uKCl7IGxpdmVlKys7IH0pOworCisJZXF1YWxzKCBs
aXZlZSwgMCwgIk5vIGNsaWNrcywgZGVlcCBzZWxlY3Rvci4iICk7CisKKwlsaXZlZSA9IDA7CisJ
alF1ZXJ5KCIjbm90aGlkZGVuZGl2Y2hpbGQiKS50cmlnZ2VyKCJjbGljayIpOworCWVxdWFscygg
bGl2ZWUsIDIsICJDbGljaywgZGVlcCBzZWxlY3Rvci4iICk7CisKKwlsaXZlZSA9IDA7CisJalF1
ZXJ5KCIjbm90aGlkZGVuZGl2Y2hpbGQiKS50cmlnZ2VyKCJtb3VzZW92ZXIiKTsKKwllcXVhbHMo
IGxpdmVlLCAxLCAiTW91c2VvdmVyLCBkZWVwIHNlbGVjdG9yLiIgKTsKKworCWpRdWVyeSgiI25v
dGhpZGRlbmRpdiBkaXYiKS5kaWUoIm1vdXNlb3ZlciIpOworCisJbGl2ZWUgPSAwOworCWpRdWVy
eSgiI25vdGhpZGRlbmRpdmNoaWxkIikudHJpZ2dlcigiY2xpY2siKTsKKwllcXVhbHMoIGxpdmVl
LCAyLCAiQ2xpY2ssIGRlZXAgc2VsZWN0b3IuIiApOworCisJbGl2ZWUgPSAwOworCWpRdWVyeSgi
I25vdGhpZGRlbmRpdmNoaWxkIikudHJpZ2dlcigibW91c2VvdmVyIik7CisJZXF1YWxzKCBsaXZl
ZSwgMCwgIk1vdXNlb3ZlciwgZGVlcCBzZWxlY3Rvci4iICk7CisKKwlqUXVlcnkoIiNub3RoaWRk
ZW5kaXYgZGl2IikuZGllKCJjbGljayIsIGNsaWNrQik7CisKKwlsaXZlZSA9IDA7CisJalF1ZXJ5
KCIjbm90aGlkZGVuZGl2Y2hpbGQiKS50cmlnZ2VyKCJjbGljayIpOworCWVxdWFscyggbGl2ZWUs
IDEsICJDbGljaywgZGVlcCBzZWxlY3Rvci4iICk7CisKKwlqUXVlcnkoIiNub3RoaWRkZW5kaXYg
ZGl2IikuZGllKCJjbGljayIpOworCisJalF1ZXJ5KCIjbm90aGlkZGVuZGl2IGRpdiIpLmxpdmUo
ImJsdXIiLCBmdW5jdGlvbigpeworCQlvayggdHJ1ZSwgIkxpdmUgZGl2IHRyaWdnZXIgYmx1ci4i
ICk7CisJfSk7CisKKwlqUXVlcnkoIiNub3RoaWRkZW5kaXYgZGl2IikudHJpZ2dlcigiYmx1ciIp
OworCisJalF1ZXJ5KCIjbm90aGlkZGVuZGl2IGRpdiIpLmRpZSgiYmx1ciIpOworfSk7CisKK3Rl
c3QoImRpZSBhbGwgYm91bmQgZXZlbnRzIiwgZnVuY3Rpb24oKXsKKwlleHBlY3QoMSk7CisKKwl2
YXIgY291bnQgPSAwOworCXZhciBkaXYgPSBqUXVlcnkoImRpdiNub3RoaWRkZW5kaXZjaGlsZCIp
OworCisJZGl2LmxpdmUoImNsaWNrIHN1Ym1pdCIsIGZ1bmN0aW9uKCl7IGNvdW50Kys7IH0pOwor
CWRpdi5kaWUoKTsKKworCWRpdi50cmlnZ2VyKCJjbGljayIpOworCWRpdi50cmlnZ2VyKCJzdWJt
aXQiKTsKKworCWVxdWFscyggY291bnQsIDAsICJNYWtlIHN1cmUgbm8gZXZlbnRzIHdlcmUgdHJp
Z2dlcmVkLiIgKTsKK30pOworCit0ZXN0KCJsaXZlIHdpdGggbXVsdGlwbGUgZXZlbnRzIiwgZnVu
Y3Rpb24oKXsKKwlleHBlY3QoMSk7CisKKwl2YXIgY291bnQgPSAwOworCXZhciBkaXYgPSBqUXVl
cnkoImRpdiNub3RoaWRkZW5kaXZjaGlsZCIpOworCisJZGl2LmxpdmUoImNsaWNrIHN1Ym1pdCIs
IGZ1bmN0aW9uKCl7IGNvdW50Kys7IH0pOworCisJZGl2LnRyaWdnZXIoImNsaWNrIik7CisJZGl2
LnRyaWdnZXIoInN1Ym1pdCIpOworCisJZXF1YWxzKCBjb3VudCwgMiwgIk1ha2Ugc3VyZSBib3Ro
IHRoZSBjbGljayBhbmQgc3VibWl0IHdlcmUgdHJpZ2dlcmVkLiIgKTsKKworCS8vIG1hbnVhbGx5
IGNsZWFuIHVwIGV2ZW50cyBmcm9tIGVsZW1lbnRzIG91dHNpZGUgdGhlIGZpeHR1cmUKKwlkaXYu
ZGllKCk7Cit9KTsKKwordGVzdCgibGl2ZSB3aXRoIG5hbWVzcGFjZXMiLCBmdW5jdGlvbigpewor
CWV4cGVjdCgxMik7CisKKwl2YXIgY291bnQxID0gMCwgY291bnQyID0gMDsKKworCWpRdWVyeSgi
I2xpdmVTcGFuMSIpLmxpdmUoImZvby5iYXIiLCBmdW5jdGlvbihlKXsKKwkJY291bnQxKys7CisJ
fSk7CisKKwlqUXVlcnkoIiNsaXZlU3BhbjEiKS5saXZlKCJmb28uemVkIiwgZnVuY3Rpb24oZSl7
CisJCWNvdW50MisrOworCX0pOworCisJalF1ZXJ5KCIjbGl2ZVNwYW4xIikudHJpZ2dlcigiZm9v
LmJhciIpOworCWVxdWFscyggY291bnQxLCAxLCAiR290IGxpdmUgZm9vLmJhciIgKTsKKwllcXVh
bHMoIGNvdW50MiwgMCwgIkdvdCBsaXZlIGZvby5iYXIiICk7CisKKwljb3VudDEgPSAwLCBjb3Vu
dDIgPSAwOworCisJalF1ZXJ5KCIjbGl2ZVNwYW4xIikudHJpZ2dlcigiZm9vLnplZCIpOworCWVx
dWFscyggY291bnQxLCAwLCAiR290IGxpdmUgZm9vLnplZCIgKTsKKwllcXVhbHMoIGNvdW50Miwg
MSwgIkdvdCBsaXZlIGZvby56ZWQiICk7CisKKwkvL3JlbW92ZSBvbmUKKwljb3VudDEgPSAwLCBj
b3VudDIgPSAwOworCisJalF1ZXJ5KCIjbGl2ZVNwYW4xIikuZGllKCJmb28uemVkIik7CisJalF1
ZXJ5KCIjbGl2ZVNwYW4xIikudHJpZ2dlcigiZm9vLmJhciIpOworCisJZXF1YWxzKCBjb3VudDEs
IDEsICJHb3QgbGl2ZSBmb28uYmFyIGFmdGVyIGRpZWluZyBmb28uemVkIiApOworCWVxdWFscygg
Y291bnQyLCAwLCAiR290IGxpdmUgZm9vLmJhciBhZnRlciBkaWVpbmcgZm9vLnplZCIgKTsKKwor
CWNvdW50MSA9IDAsIGNvdW50MiA9IDA7CisKKwlqUXVlcnkoIiNsaXZlU3BhbjEiKS50cmlnZ2Vy
KCJmb28uemVkIik7CisJZXF1YWxzKCBjb3VudDEsIDAsICJHb3QgbGl2ZSBmb28uemVkIiApOwor
CWVxdWFscyggY291bnQyLCAwLCAiR290IGxpdmUgZm9vLnplZCIgKTsKKworCS8vcmVtb3ZlIHRo
ZSBvdGhlcgorCWpRdWVyeSgiI2xpdmVTcGFuMSIpLmRpZSgiZm9vLmJhciIpOworCisJY291bnQx
ID0gMCwgY291bnQyID0gMDsKKworCWpRdWVyeSgiI2xpdmVTcGFuMSIpLnRyaWdnZXIoImZvby5i
YXIiKTsKKwllcXVhbHMoIGNvdW50MSwgMCwgIkRpZCBub3QgcmVzcG9uZCB0byBmb28uYmFyIGFm
dGVyIGRpZWluZyBpdCIgKTsKKwllcXVhbHMoIGNvdW50MiwgMCwgIkRpZCBub3QgcmVzcG9uZCB0
byBmb28uYmFyIGFmdGVyIGRpZWluZyBpdCIgKTsKKworCWpRdWVyeSgiI2xpdmVTcGFuMSIpLnRy
aWdnZXIoImZvby56ZWQiKTsKKwllcXVhbHMoIGNvdW50MSwgMCwgIkRpZCBub3QgdHJpZ2dlciBm
b28uemVkIGFnYWluIiApOworCWVxdWFscyggY291bnQyLCAwLCAiRGlkIG5vdCB0cmlnZ2VyIGZv
by56ZWQgYWdhaW4iICk7Cit9KTsKKwordGVzdCgibGl2ZSB3aXRoIGNoYW5nZSIsIGZ1bmN0aW9u
KCl7CisJZXhwZWN0KDgpOworCisJdmFyIHNlbGVjdENoYW5nZSA9IDAsIGNoZWNrYm94Q2hhbmdl
ID0gMDsKKworCXZhciBzZWxlY3QgPSBqUXVlcnkoInNlbGVjdFtuYW1lPSdTMSddIikKKwlzZWxl
Y3QubGl2ZSgiY2hhbmdlIiwgZnVuY3Rpb24oKSB7CisJCXNlbGVjdENoYW5nZSsrOworCX0pOwor
CisJdmFyIGNoZWNrYm94ID0galF1ZXJ5KCIjY2hlY2syIiksCisJCWNoZWNrYm94RnVuY3Rpb24g
PSBmdW5jdGlvbigpeworCQkJY2hlY2tib3hDaGFuZ2UrKzsKKwkJfQorCWNoZWNrYm94LmxpdmUo
ImNoYW5nZSIsIGNoZWNrYm94RnVuY3Rpb24pOworCisJLy8gdGVzdCBjbGljayBvbiBzZWxlY3QK
KworCS8vIHNlY29uZCBjbGljayB0aGF0IGNoYW5nZWQgaXQKKwlzZWxlY3RDaGFuZ2UgPSAwOwor
CXNlbGVjdFswXS5zZWxlY3RlZEluZGV4ID0gc2VsZWN0WzBdLnNlbGVjdGVkSW5kZXggPyAwIDog
MTsKKwlzZWxlY3QudHJpZ2dlcigiY2hhbmdlIik7CisJZXF1YWxzKCBzZWxlY3RDaGFuZ2UsIDEs
ICJDaGFuZ2Ugb24gY2xpY2suIiApOworCisJLy8gdGVzdCBrZXlzIG9uIHNlbGVjdAorCXNlbGVj
dENoYW5nZSA9IDA7CisJc2VsZWN0WzBdLnNlbGVjdGVkSW5kZXggPSBzZWxlY3RbMF0uc2VsZWN0
ZWRJbmRleCA/IDAgOiAxOworCXNlbGVjdC50cmlnZ2VyKCJjaGFuZ2UiKTsKKwllcXVhbHMoIHNl
bGVjdENoYW5nZSwgMSwgIkNoYW5nZSBvbiBrZXl1cC4iICk7CisKKwkvLyB0ZXN0IGNsaWNrIG9u
IGNoZWNrYm94CisJY2hlY2tib3gudHJpZ2dlcigiY2hhbmdlIik7CisJZXF1YWxzKCBjaGVja2Jv
eENoYW5nZSwgMSwgIkNoYW5nZSBvbiBjaGVja2JveC4iICk7CisKKwkvLyB0ZXN0IGJsdXIvZm9j
dXMgb24gdGV4dAorCXZhciB0ZXh0ID0galF1ZXJ5KCIjbmFtZSIpLCB0ZXh0Q2hhbmdlID0gMCwg
b2xkVGV4dFZhbCA9IHRleHQudmFsKCk7CisJdGV4dC5saXZlKCJjaGFuZ2UiLCBmdW5jdGlvbigp
IHsKKwkJdGV4dENoYW5nZSsrOworCX0pOworCisJdGV4dC52YWwob2xkVGV4dFZhbCsiZm9vIik7
CisJdGV4dC50cmlnZ2VyKCJjaGFuZ2UiKTsKKwllcXVhbHMoIHRleHRDaGFuZ2UsIDEsICJDaGFu
Z2Ugb24gdGV4dCBpbnB1dC4iICk7CisKKwl0ZXh0LnZhbChvbGRUZXh0VmFsKTsKKwl0ZXh0LmRp
ZSgiY2hhbmdlIik7CisKKwkvLyB0ZXN0IGJsdXIvZm9jdXMgb24gcGFzc3dvcmQKKwl2YXIgcGFz
c3dvcmQgPSBqUXVlcnkoIiNuYW1lIiksIHBhc3N3b3JkQ2hhbmdlID0gMCwgb2xkUGFzc3dvcmRW
YWwgPSBwYXNzd29yZC52YWwoKTsKKwlwYXNzd29yZC5saXZlKCJjaGFuZ2UiLCBmdW5jdGlvbigp
IHsKKwkJcGFzc3dvcmRDaGFuZ2UrKzsKKwl9KTsKKworCXBhc3N3b3JkLnZhbChvbGRQYXNzd29y
ZFZhbCArICJmb28iKTsKKwlwYXNzd29yZC50cmlnZ2VyKCJjaGFuZ2UiKTsKKwllcXVhbHMoIHBh
c3N3b3JkQ2hhbmdlLCAxLCAiQ2hhbmdlIG9uIHBhc3N3b3JkIGlucHV0LiIgKTsKKworCXBhc3N3
b3JkLnZhbChvbGRQYXNzd29yZFZhbCk7CisJcGFzc3dvcmQuZGllKCJjaGFuZ2UiKTsKKworCS8v
IG1ha2Ugc3VyZSBkaWUgd29ya3MKKworCS8vIGRpZSBhbGwgY2hhbmdlcworCXNlbGVjdENoYW5n
ZSA9IDA7CisJc2VsZWN0LmRpZSgiY2hhbmdlIik7CisJc2VsZWN0WzBdLnNlbGVjdGVkSW5kZXgg
PSBzZWxlY3RbMF0uc2VsZWN0ZWRJbmRleCA/IDAgOiAxOworCXNlbGVjdC50cmlnZ2VyKCJjaGFu
Z2UiKTsKKwllcXVhbHMoIHNlbGVjdENoYW5nZSwgMCwgIkRpZSBvbiBjbGljayB3b3Jrcy4iICk7
CisKKwlzZWxlY3RDaGFuZ2UgPSAwOworCXNlbGVjdFswXS5zZWxlY3RlZEluZGV4ID0gc2VsZWN0
WzBdLnNlbGVjdGVkSW5kZXggPyAwIDogMTsKKwlzZWxlY3QudHJpZ2dlcigiY2hhbmdlIik7CisJ
ZXF1YWxzKCBzZWxlY3RDaGFuZ2UsIDAsICJEaWUgb24ga2V5dXAgd29ya3MuIiApOworCisJLy8g
ZGllIHNwZWNpZmljIGNoZWNrYm94CisJY2hlY2tib3guZGllKCJjaGFuZ2UiLCBjaGVja2JveEZ1
bmN0aW9uKTsKKwljaGVja2JveC50cmlnZ2VyKCJjaGFuZ2UiKTsKKwllcXVhbHMoIGNoZWNrYm94
Q2hhbmdlLCAxLCAiRGllIG9uIGNoZWNrYm94LiIgKTsKK30pOworCit0ZXN0KCJsaXZlIHdpdGgg
c3VibWl0IiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDUpOworCisJdmFyIGNvdW50MSA9IDAsIGNv
dW50MiA9IDA7CisKKwlqUXVlcnkoIiN0ZXN0Rm9ybSIpLmxpdmUoInN1Ym1pdCIsIGZ1bmN0aW9u
KGV2KSB7CisJCWNvdW50MSsrOworCQlldi5wcmV2ZW50RGVmYXVsdCgpOworCX0pOworCisJalF1
ZXJ5KCJib2R5IikubGl2ZSgic3VibWl0IiwgZnVuY3Rpb24oZXYpIHsKKwkJY291bnQyKys7CisJ
CWV2LnByZXZlbnREZWZhdWx0KCk7CisJfSk7CisKKwlqUXVlcnkoIiN0ZXN0Rm9ybSBpbnB1dFtu
YW1lPXN1YjFdIikuc3VibWl0KCk7CisJZXF1YWxzKCBjb3VudDEsIDEsICJWZXJpZnkgZm9ybSBz
dWJtaXQuIiApOworCWVxdWFscyggY291bnQyLCAxLCAiVmVyaWZ5IGJvZHkgc3VibWl0LiIgKTsK
KworCWpRdWVyeSgiI3Rlc3RGb3JtIGlucHV0W25hbWU9c3ViMV0iKS5saXZlKCJjbGljayIsIGZ1
bmN0aW9uKGV2KSB7CisJCW9rKCB0cnVlLCAiY2FuY2VsbGluZyBzdWJtaXQgc3RpbGwgY2FsbHMg
Y2xpY2sgaGFuZGxlciIgKTsKKwl9KTsKKworCWpRdWVyeSgiI3Rlc3RGb3JtIGlucHV0W25hbWU9
c3ViMV0iKVswXS5jbGljaygpOworCWVxdWFscyggY291bnQxLCAyLCAiVmVyaWZ5IGZvcm0gc3Vi
bWl0LiIgKTsKKwllcXVhbHMoIGNvdW50MiwgMiwgIlZlcmlmeSBib2R5IHN1Ym1pdC4iICk7CisK
KwlqUXVlcnkoIiN0ZXN0Rm9ybSIpLmRpZSgic3VibWl0Iik7CisJalF1ZXJ5KCIjdGVzdEZvcm0g
aW5wdXRbbmFtZT1zdWIxXSIpLmRpZSgiY2xpY2siKTsKKwlqUXVlcnkoImJvZHkiKS5kaWUoInN1
Ym1pdCIpOworfSk7CisKK3Rlc3QoImxpdmUgd2l0aCBzcGVjaWFsIGV2ZW50cyIsIGZ1bmN0aW9u
KCkgeworCWV4cGVjdCgxMyk7CisKKwlqUXVlcnkuZXZlbnQuc3BlY2lhbC5mb28gPSB7CisJCXNl
dHVwOiBmdW5jdGlvbiggZGF0YSwgbmFtZXNwYWNlcywgaGFuZGxlciApIHsKKwkJCW9rKCB0cnVl
LCAiU2V0dXAgcnVuLiIgKTsKKwkJfSwKKwkJdGVhcmRvd246IGZ1bmN0aW9uKCBuYW1lc3BhY2Vz
ICkgeworCQkJb2soIHRydWUsICJUZWFyZG93biBydW4uIiApOworCQl9LAorCQlhZGQ6IGZ1bmN0
aW9uKCBoYW5kbGVPYmogKSB7CisJCQlvayggdHJ1ZSwgIkFkZCBydW4uIiApOworCQl9LAorCQly
ZW1vdmU6IGZ1bmN0aW9uKCBoYW5kbGVPYmogKSB7CisJCQlvayggdHJ1ZSwgIlJlbW92ZSBydW4u
IiApOworCQl9LAorCQlfZGVmYXVsdDogZnVuY3Rpb24oIGV2ZW50ICkgeworCQkJb2soIHRydWUs
ICJEZWZhdWx0IHJ1bi4iICk7CisJCX0KKwl9OworCisJLy8gUnVuOiBzZXR1cCwgYWRkCisJalF1
ZXJ5KCIjbGl2ZVNwYW4xIikubGl2ZSgiZm9vLmEiLCBmdW5jdGlvbihlKXsKKwkJb2soIHRydWUs
ICJIYW5kbGVyIDEgcnVuLiIgKTsKKwl9KTsKKworCS8vIFJ1bjogYWRkCisJalF1ZXJ5KCIjbGl2
ZVNwYW4xIikubGl2ZSgiZm9vLmIiLCBmdW5jdGlvbihlKXsKKwkJb2soIHRydWUsICJIYW5kbGVy
IDIgcnVuLiIgKTsKKwl9KTsKKworCS8vIFJ1bjogSGFuZGxlciAxLCBIYW5kbGVyIDIsIERlZmF1
bHQKKwlqUXVlcnkoIiNsaXZlU3BhbjEiKS50cmlnZ2VyKCJmb28iKTsKKworCS8vIFJ1bjogSGFu
ZGxlciAxLCBEZWZhdWx0CisJLy8gVE9ETzogTmFtZXNwYWNlIGRvZXNuJ3QgdHJpZ2dlciBkZWZh
dWx0ICg/KQorCWpRdWVyeSgiI2xpdmVTcGFuMSIpLnRyaWdnZXIoImZvby5hIik7CisKKwkvLyBS
dW46IHJlbW92ZQorCWpRdWVyeSgiI2xpdmVTcGFuMSIpLmRpZSgiZm9vLmEiKTsKKworCS8vIFJ1
bjogSGFuZGxlciAyLCBEZWZhdWx0CisJalF1ZXJ5KCIjbGl2ZVNwYW4xIikudHJpZ2dlcigiZm9v
Iik7CisKKwkvLyBSdW46IHJlbW92ZSwgdGVhcmRvd24KKwlqUXVlcnkoIiNsaXZlU3BhbjEiKS5k
aWUoImZvbyIpOworCisJZGVsZXRlIGpRdWVyeS5ldmVudC5zcGVjaWFsLmZvbzsKK30pOworCit0
ZXN0KCIuZGVsZWdhdGUoKS8udW5kZWxlZ2F0ZSgpIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDY1
KTsKKworCXZhciBzdWJtaXQgPSAwLCBkaXYgPSAwLCBsaXZlYSA9IDAsIGxpdmViID0gMDsKKwor
CWpRdWVyeSgiI2JvZHkiKS5kZWxlZ2F0ZSgiZGl2IiwgInN1Ym1pdCIsIGZ1bmN0aW9uKCl7IHN1
Ym1pdCsrOyByZXR1cm4gZmFsc2U7IH0pOworCWpRdWVyeSgiI2JvZHkiKS5kZWxlZ2F0ZSgiZGl2
IiwgImNsaWNrIiwgZnVuY3Rpb24oKXsgZGl2Kys7IH0pOworCWpRdWVyeSgiI2JvZHkiKS5kZWxl
Z2F0ZSgiZGl2I25vdGhpZGRlbmRpdiIsICJjbGljayIsIGZ1bmN0aW9uKCl7IGxpdmVhKys7IH0p
OworCWpRdWVyeSgiI2JvZHkiKS5kZWxlZ2F0ZSgiZGl2I25vdGhpZGRlbmRpdmNoaWxkIiwgImNs
aWNrIiwgZnVuY3Rpb24oKXsgbGl2ZWIrKzsgfSk7CisKKwkvLyBOb3RoaW5nIHNob3VsZCB0cmln
Z2VyIG9uIHRoZSBib2R5CisJalF1ZXJ5KCJib2R5IikudHJpZ2dlcigiY2xpY2siKTsKKwllcXVh
bHMoIHN1Ym1pdCwgMCwgIkNsaWNrIG9uIGJvZHkiICk7CisJZXF1YWxzKCBkaXYsIDAsICJDbGlj
ayBvbiBib2R5IiApOworCWVxdWFscyggbGl2ZWEsIDAsICJDbGljayBvbiBib2R5IiApOworCWVx
dWFscyggbGl2ZWIsIDAsICJDbGljayBvbiBib2R5IiApOworCisJLy8gVGhpcyBzaG91bGQgdHJp
Z2dlciB0d28gZXZlbnRzCisJc3VibWl0ID0gMCwgZGl2ID0gMCwgbGl2ZWEgPSAwLCBsaXZlYiA9
IDA7CisJalF1ZXJ5KCJkaXYjbm90aGlkZGVuZGl2IikudHJpZ2dlcigiY2xpY2siKTsKKwllcXVh
bHMoIHN1Ym1pdCwgMCwgIkNsaWNrIG9uIGRpdiIgKTsKKwllcXVhbHMoIGRpdiwgMSwgIkNsaWNr
IG9uIGRpdiIgKTsKKwllcXVhbHMoIGxpdmVhLCAxLCAiQ2xpY2sgb24gZGl2IiApOworCWVxdWFs
cyggbGl2ZWIsIDAsICJDbGljayBvbiBkaXYiICk7CisKKwkvLyBUaGlzIHNob3VsZCB0cmlnZ2Vy
IHRocmVlIGV2ZW50cyAody8gYnViYmxpbmcpCisJc3VibWl0ID0gMCwgZGl2ID0gMCwgbGl2ZWEg
PSAwLCBsaXZlYiA9IDA7CisJalF1ZXJ5KCJkaXYjbm90aGlkZGVuZGl2Y2hpbGQiKS50cmlnZ2Vy
KCJjbGljayIpOworCWVxdWFscyggc3VibWl0LCAwLCAiQ2xpY2sgb24gaW5uZXIgZGl2IiApOwor
CWVxdWFscyggZGl2LCAyLCAiQ2xpY2sgb24gaW5uZXIgZGl2IiApOworCWVxdWFscyggbGl2ZWEs
IDEsICJDbGljayBvbiBpbm5lciBkaXYiICk7CisJZXF1YWxzKCBsaXZlYiwgMSwgIkNsaWNrIG9u
IGlubmVyIGRpdiIgKTsKKworCS8vIFRoaXMgc2hvdWxkIHRyaWdnZXIgb25lIHN1Ym1pdAorCXN1
Ym1pdCA9IDAsIGRpdiA9IDAsIGxpdmVhID0gMCwgbGl2ZWIgPSAwOworCWpRdWVyeSgiZGl2I25v
dGhpZGRlbmRpdmNoaWxkIikudHJpZ2dlcigic3VibWl0Iik7CisJZXF1YWxzKCBzdWJtaXQsIDEs
ICJTdWJtaXQgb24gZGl2IiApOworCWVxdWFscyggZGl2LCAwLCAiU3VibWl0IG9uIGRpdiIgKTsK
KwllcXVhbHMoIGxpdmVhLCAwLCAiU3VibWl0IG9uIGRpdiIgKTsKKwllcXVhbHMoIGxpdmViLCAw
LCAiU3VibWl0IG9uIGRpdiIgKTsKKworCS8vIE1ha2Ugc3VyZSBubyBvdGhlciBldmVudHMgd2Vy
ZSByZW1vdmVkIGluIHRoZSBwcm9jZXNzCisJc3VibWl0ID0gMCwgZGl2ID0gMCwgbGl2ZWEgPSAw
LCBsaXZlYiA9IDA7CisJalF1ZXJ5KCJkaXYjbm90aGlkZGVuZGl2Y2hpbGQiKS50cmlnZ2VyKCJj
bGljayIpOworCWVxdWFscyggc3VibWl0LCAwLCAidW5kZWxlZ2F0ZSBDbGljayBvbiBpbm5lciBk
aXYiICk7CisJZXF1YWxzKCBkaXYsIDIsICJ1bmRlbGVnYXRlIENsaWNrIG9uIGlubmVyIGRpdiIg
KTsKKwllcXVhbHMoIGxpdmVhLCAxLCAidW5kZWxlZ2F0ZSBDbGljayBvbiBpbm5lciBkaXYiICk7
CisJZXF1YWxzKCBsaXZlYiwgMSwgInVuZGVsZWdhdGUgQ2xpY2sgb24gaW5uZXIgZGl2IiApOwor
CisJLy8gTm93IG1ha2Ugc3VyZSB0aGF0IHRoZSByZW1vdmFsIHdvcmtzCisJc3VibWl0ID0gMCwg
ZGl2ID0gMCwgbGl2ZWEgPSAwLCBsaXZlYiA9IDA7CisJalF1ZXJ5KCIjYm9keSIpLnVuZGVsZWdh
dGUoImRpdiNub3RoaWRkZW5kaXZjaGlsZCIsICJjbGljayIpOworCWpRdWVyeSgiZGl2I25vdGhp
ZGRlbmRpdmNoaWxkIikudHJpZ2dlcigiY2xpY2siKTsKKwllcXVhbHMoIHN1Ym1pdCwgMCwgInVu
ZGVsZWdhdGUgQ2xpY2sgb24gaW5uZXIgZGl2IiApOworCWVxdWFscyggZGl2LCAyLCAidW5kZWxl
Z2F0ZSBDbGljayBvbiBpbm5lciBkaXYiICk7CisJZXF1YWxzKCBsaXZlYSwgMSwgInVuZGVsZWdh
dGUgQ2xpY2sgb24gaW5uZXIgZGl2IiApOworCWVxdWFscyggbGl2ZWIsIDAsICJ1bmRlbGVnYXRl
IENsaWNrIG9uIGlubmVyIGRpdiIgKTsKKworCS8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBjbGljayB3
YXNuJ3QgcmVtb3ZlZCB0b28gZWFybHkKKwlzdWJtaXQgPSAwLCBkaXYgPSAwLCBsaXZlYSA9IDAs
IGxpdmViID0gMDsKKwlqUXVlcnkoImRpdiNub3RoaWRkZW5kaXYiKS50cmlnZ2VyKCJjbGljayIp
OworCWVxdWFscyggc3VibWl0LCAwLCAidW5kZWxlZ2F0ZSBDbGljayBvbiBpbm5lciBkaXYiICk7
CisJZXF1YWxzKCBkaXYsIDEsICJ1bmRlbGVnYXRlIENsaWNrIG9uIGlubmVyIGRpdiIgKTsKKwll
cXVhbHMoIGxpdmVhLCAxLCAidW5kZWxlZ2F0ZSBDbGljayBvbiBpbm5lciBkaXYiICk7CisJZXF1
YWxzKCBsaXZlYiwgMCwgInVuZGVsZWdhdGUgQ2xpY2sgb24gaW5uZXIgZGl2IiApOworCisJLy8g
TWFrZSBzdXJlIHRoYXQgc3RvcFByb3BnYXRpb24gZG9lc24ndCBzdG9wIGxpdmUgZXZlbnRzCisJ
c3VibWl0ID0gMCwgZGl2ID0gMCwgbGl2ZWEgPSAwLCBsaXZlYiA9IDA7CisJalF1ZXJ5KCIjYm9k
eSIpLmRlbGVnYXRlKCJkaXYjbm90aGlkZGVuZGl2Y2hpbGQiLCAiY2xpY2siLCBmdW5jdGlvbihl
KXsgbGl2ZWIrKzsgZS5zdG9wUHJvcGFnYXRpb24oKTsgfSk7CisJalF1ZXJ5KCJkaXYjbm90aGlk
ZGVuZGl2Y2hpbGQiKS50cmlnZ2VyKCJjbGljayIpOworCWVxdWFscyggc3VibWl0LCAwLCAic3Rv
cFByb3BhZ2F0aW9uIENsaWNrIG9uIGlubmVyIGRpdiIgKTsKKwllcXVhbHMoIGRpdiwgMSwgInN0
b3BQcm9wYWdhdGlvbiBDbGljayBvbiBpbm5lciBkaXYiICk7CisJZXF1YWxzKCBsaXZlYSwgMCwg
InN0b3BQcm9wYWdhdGlvbiBDbGljayBvbiBpbm5lciBkaXYiICk7CisJZXF1YWxzKCBsaXZlYiwg
MSwgInN0b3BQcm9wYWdhdGlvbiBDbGljayBvbiBpbm5lciBkaXYiICk7CisKKwkvLyBNYWtlIHN1
cmUgY2xpY2sgZXZlbnRzIG9ubHkgZmlyZSB3aXRoIHByaW1hcnkgY2xpY2sKKwlzdWJtaXQgPSAw
LCBkaXYgPSAwLCBsaXZlYSA9IDAsIGxpdmViID0gMDsKKwl2YXIgZXZlbnQgPSBqUXVlcnkuRXZl
bnQoImNsaWNrIik7CisJZXZlbnQuYnV0dG9uID0gMTsKKwlqUXVlcnkoImRpdiNub3RoaWRkZW5k
aXYiKS50cmlnZ2VyKGV2ZW50KTsKKworCWVxdWFscyggbGl2ZWEsIDAsICJkZWxlZ2F0ZSBzZWNv
bmRhcnkgY2xpY2siICk7CisKKwlqUXVlcnkoIiNib2R5IikudW5kZWxlZ2F0ZSgiZGl2I25vdGhp
ZGRlbmRpdmNoaWxkIiwgImNsaWNrIik7CisJalF1ZXJ5KCIjYm9keSIpLnVuZGVsZWdhdGUoImRp
diNub3RoaWRkZW5kaXYiLCAiY2xpY2siKTsKKwlqUXVlcnkoIiNib2R5IikudW5kZWxlZ2F0ZSgi
ZGl2IiwgImNsaWNrIik7CisJalF1ZXJ5KCIjYm9keSIpLnVuZGVsZWdhdGUoImRpdiIsICJzdWJt
aXQiKTsKKworCS8vIFRlc3QgYmluZGluZyB3aXRoIGEgZGlmZmVyZW50IGNvbnRleHQKKwl2YXIg
Y2xpY2tlZCA9IDAsIGNvbnRhaW5lciA9IGpRdWVyeSgnI21haW4nKVswXTsKKwlqUXVlcnkoIiNt
YWluIikuZGVsZWdhdGUoIiNmb28iLCAiY2xpY2siLCBmdW5jdGlvbihlKXsgY2xpY2tlZCsrOyB9
KTsKKwlqUXVlcnkoImRpdiIpLnRyaWdnZXIoJ2NsaWNrJyk7CisJalF1ZXJ5KCIjZm9vIikudHJp
Z2dlcignY2xpY2snKTsKKwlqUXVlcnkoIiNtYWluIikudHJpZ2dlcignY2xpY2snKTsKKwlqUXVl
cnkoImJvZHkiKS50cmlnZ2VyKCdjbGljaycpOworCWVxdWFscyggY2xpY2tlZCwgMiwgImRlbGVn
YXRlIHdpdGggYSBjb250ZXh0IiApOworCisJLy8gTWFrZSBzdXJlIHRoZSBldmVudCBpcyBhY3R1
YWxseSBzdG9yZWQgb24gdGhlIGNvbnRleHQKKwlvayggalF1ZXJ5Ll9kYXRhKGNvbnRhaW5lciwg
ImV2ZW50cyIpLmxpdmUsICJkZWxlZ2F0ZSB3aXRoIGEgY29udGV4dCIgKTsKKworCS8vIFRlc3Qg
dW5iaW5kaW5nIHdpdGggYSBkaWZmZXJlbnQgY29udGV4dAorCWpRdWVyeSgiI21haW4iKS51bmRl
bGVnYXRlKCIjZm9vIiwgImNsaWNrIik7CisJalF1ZXJ5KCIjZm9vIikudHJpZ2dlcignY2xpY2sn
KTsKKwllcXVhbHMoIGNsaWNrZWQsIDIsICJ1bmRlbGVnYXRlIHdpdGggYSBjb250ZXh0Iik7CisK
KwkvLyBUZXN0IGJpbmRpbmcgd2l0aCBldmVudCBkYXRhCisJalF1ZXJ5KCIjYm9keSIpLmRlbGVn
YXRlKCIjZm9vIiwgImNsaWNrIiwgdHJ1ZSwgZnVuY3Rpb24oZSl7IGVxdWFscyggZS5kYXRhLCB0
cnVlLCAiZGVsZWdhdGUgd2l0aCBldmVudCBkYXRhIiApOyB9KTsKKwlqUXVlcnkoIiNmb28iKS50
cmlnZ2VyKCJjbGljayIpOworCWpRdWVyeSgiI2JvZHkiKS51bmRlbGVnYXRlKCIjZm9vIiwgImNs
aWNrIik7CisKKwkvLyBUZXN0IGJpbmRpbmcgd2l0aCB0cmlnZ2VyIGRhdGEKKwlqUXVlcnkoIiNi
b2R5IikuZGVsZWdhdGUoIiNmb28iLCAiY2xpY2siLCBmdW5jdGlvbihlLCBkYXRhKXsgZXF1YWxz
KCBkYXRhLCB0cnVlLCAiZGVsZWdhdGUgd2l0aCB0cmlnZ2VyIGRhdGEiICk7IH0pOworCWpRdWVy
eSgiI2ZvbyIpLnRyaWdnZXIoImNsaWNrIiwgdHJ1ZSk7CisJalF1ZXJ5KCIjYm9keSIpLnVuZGVs
ZWdhdGUoIiNmb28iLCAiY2xpY2siKTsKKworCS8vIFRlc3QgYmluZGluZyB3aXRoIGRpZmZlcmVu
dCB0aGlzIG9iamVjdAorCWpRdWVyeSgiI2JvZHkiKS5kZWxlZ2F0ZSgiI2ZvbyIsICJjbGljayIs
IGpRdWVyeS5wcm94eShmdW5jdGlvbihlKXsgZXF1YWxzKCB0aGlzLmZvbywgImJhciIsICJkZWxl
Z2F0ZSB3aXRoIGV2ZW50IHNjb3BlIiApOyB9LCB7IGZvbzogImJhciIgfSkpOworCWpRdWVyeSgi
I2ZvbyIpLnRyaWdnZXIoImNsaWNrIik7CisJalF1ZXJ5KCIjYm9keSIpLnVuZGVsZWdhdGUoIiNm
b28iLCAiY2xpY2siKTsKKworCS8vIFRlc3QgYmluZGluZyB3aXRoIGRpZmZlcmVudCB0aGlzIG9i
amVjdCwgZXZlbnQgZGF0YSwgYW5kIHRyaWdnZXIgZGF0YQorCWpRdWVyeSgiI2JvZHkiKS5kZWxl
Z2F0ZSgiI2ZvbyIsICJjbGljayIsIHRydWUsIGpRdWVyeS5wcm94eShmdW5jdGlvbihlLCBkYXRh
KXsKKwkJZXF1YWxzKCBlLmRhdGEsIHRydWUsICJkZWxlZ2F0ZSB3aXRoIHdpdGggZGlmZmVyZW50
IHRoaXMgb2JqZWN0LCBldmVudCBkYXRhLCBhbmQgdHJpZ2dlciBkYXRhIiApOworCQllcXVhbHMo
IHRoaXMuZm9vLCAiYmFyIiwgImRlbGVnYXRlIHdpdGggd2l0aCBkaWZmZXJlbnQgdGhpcyBvYmpl
Y3QsIGV2ZW50IGRhdGEsIGFuZCB0cmlnZ2VyIGRhdGEiICk7CisJCWVxdWFscyggZGF0YSwgdHJ1
ZSwgImRlbGVnYXRlIHdpdGggd2l0aCBkaWZmZXJlbnQgdGhpcyBvYmplY3QsIGV2ZW50IGRhdGEs
IGFuZCB0cmlnZ2VyIGRhdGEiKQorCX0sIHsgZm9vOiAiYmFyIiB9KSk7CisJalF1ZXJ5KCIjZm9v
IikudHJpZ2dlcigiY2xpY2siLCB0cnVlKTsKKwlqUXVlcnkoIiNib2R5IikudW5kZWxlZ2F0ZSgi
I2ZvbyIsICJjbGljayIpOworCisJLy8gVmVyaWZ5IHRoYXQgcmV0dXJuIGZhbHNlIHByZXZlbnRz
IGRlZmF1bHQgYWN0aW9uCisJalF1ZXJ5KCIjYm9keSIpLmRlbGVnYXRlKCIjYW5jaG9yMiIsICJj
bGljayIsIGZ1bmN0aW9uKCl7IHJldHVybiBmYWxzZTsgfSk7CisJdmFyIGhhc2ggPSB3aW5kb3cu
bG9jYXRpb24uaGFzaDsKKwlqUXVlcnkoIiNhbmNob3IyIikudHJpZ2dlcigiY2xpY2siKTsKKwll
cXVhbHMoIHdpbmRvdy5sb2NhdGlvbi5oYXNoLCBoYXNoLCAicmV0dXJuIGZhbHNlIHdvcmtlZCIg
KTsKKwlqUXVlcnkoIiNib2R5IikudW5kZWxlZ2F0ZSgiI2FuY2hvcjIiLCAiY2xpY2siKTsKKwor
CS8vIFZlcmlmeSB0aGF0IC5wcmV2ZW50RGVmYXVsdCgpIHByZXZlbnRzIGRlZmF1bHQgYWN0aW9u
CisJalF1ZXJ5KCIjYm9keSIpLmRlbGVnYXRlKCIjYW5jaG9yMiIsICJjbGljayIsIGZ1bmN0aW9u
KGUpeyBlLnByZXZlbnREZWZhdWx0KCk7IH0pOworCXZhciBoYXNoID0gd2luZG93LmxvY2F0aW9u
Lmhhc2g7CisJalF1ZXJ5KCIjYW5jaG9yMiIpLnRyaWdnZXIoImNsaWNrIik7CisJZXF1YWxzKCB3
aW5kb3cubG9jYXRpb24uaGFzaCwgaGFzaCwgImUucHJldmVudERlZmF1bHQoKSB3b3JrZWQiICk7
CisJalF1ZXJ5KCIjYm9keSIpLnVuZGVsZWdhdGUoIiNhbmNob3IyIiwgImNsaWNrIik7CisKKwkv
LyBUZXN0IGJpbmRpbmcgdGhlIHNhbWUgaGFuZGxlciB0byBtdWx0aXBsZSBwb2ludHMKKwl2YXIg
Y2FsbGVkID0gMDsKKwlmdW5jdGlvbiBjYWxsYmFjaygpeyBjYWxsZWQrKzsgcmV0dXJuIGZhbHNl
OyB9CisKKwlqUXVlcnkoIiNib2R5IikuZGVsZWdhdGUoIiNub3RoaWRkZW5kaXYiLCAiY2xpY2si
LCBjYWxsYmFjayk7CisJalF1ZXJ5KCIjYm9keSIpLmRlbGVnYXRlKCIjYW5jaG9yMiIsICJjbGlj
ayIsIGNhbGxiYWNrKTsKKworCWpRdWVyeSgiI25vdGhpZGRlbmRpdiIpLnRyaWdnZXIoImNsaWNr
Iik7CisJZXF1YWxzKCBjYWxsZWQsIDEsICJWZXJpZnkgdGhhdCBvbmx5IG9uZSBjbGljayBvY2N1
cnJlZC4iICk7CisKKwljYWxsZWQgPSAwOworCWpRdWVyeSgiI2FuY2hvcjIiKS50cmlnZ2VyKCJj
bGljayIpOworCWVxdWFscyggY2FsbGVkLCAxLCAiVmVyaWZ5IHRoYXQgb25seSBvbmUgY2xpY2sg
b2NjdXJyZWQuIiApOworCisJLy8gTWFrZSBzdXJlIHRoYXQgb25seSBvbmUgY2FsbGJhY2sgaXMg
cmVtb3ZlZAorCWpRdWVyeSgiI2JvZHkiKS51bmRlbGVnYXRlKCIjYW5jaG9yMiIsICJjbGljayIs
IGNhbGxiYWNrKTsKKworCWNhbGxlZCA9IDA7CisJalF1ZXJ5KCIjbm90aGlkZGVuZGl2IikudHJp
Z2dlcigiY2xpY2siKTsKKwllcXVhbHMoIGNhbGxlZCwgMSwgIlZlcmlmeSB0aGF0IG9ubHkgb25l
IGNsaWNrIG9jY3VycmVkLiIgKTsKKworCWNhbGxlZCA9IDA7CisJalF1ZXJ5KCIjYW5jaG9yMiIp
LnRyaWdnZXIoImNsaWNrIik7CisJZXF1YWxzKCBjYWxsZWQsIDAsICJWZXJpZnkgdGhhdCBubyBj
bGljayBvY2N1cnJlZC4iICk7CisKKwkvLyBNYWtlIHN1cmUgdGhhdCBpdCBzdGlsbCB3b3JrcyBp
ZiB0aGUgc2VsZWN0b3IgaXMgdGhlIHNhbWUsCisJLy8gYnV0IHRoZSBldmVudCB0eXBlIGlzIGRp
ZmZlcmVudAorCWpRdWVyeSgiI2JvZHkiKS5kZWxlZ2F0ZSgiI25vdGhpZGRlbmRpdiIsICJmb28i
LCBjYWxsYmFjayk7CisKKwkvLyBDbGVhbnVwCisJalF1ZXJ5KCIjYm9keSIpLnVuZGVsZWdhdGUo
IiNub3RoaWRkZW5kaXYiLCAiY2xpY2siLCBjYWxsYmFjayk7CisKKwljYWxsZWQgPSAwOworCWpR
dWVyeSgiI25vdGhpZGRlbmRpdiIpLnRyaWdnZXIoImNsaWNrIik7CisJZXF1YWxzKCBjYWxsZWQs
IDAsICJWZXJpZnkgdGhhdCBubyBjbGljayBvY2N1cnJlZC4iICk7CisKKwljYWxsZWQgPSAwOwor
CWpRdWVyeSgiI25vdGhpZGRlbmRpdiIpLnRyaWdnZXIoImZvbyIpOworCWVxdWFscyggY2FsbGVk
LCAxLCAiVmVyaWZ5IHRoYXQgb25lIGZvbyBvY2N1cnJlZC4iICk7CisKKwkvLyBDbGVhbnVwCisJ
alF1ZXJ5KCIjYm9keSIpLnVuZGVsZWdhdGUoIiNub3RoaWRkZW5kaXYiLCAiZm9vIiwgY2FsbGJh
Y2spOworCisJLy8gTWFrZSBzdXJlIHdlIGRvbid0IGxvb3NlIHRoZSB0YXJnZXQgYnkgRE9NIG1v
ZGlmaWNhdGlvbnMKKwkvLyBhZnRlciB0aGUgYnViYmxlIGFscmVhZHkgcmVhY2hlZCB0aGUgbGl2
ZUhhbmRsZXIKKwl2YXIgbGl2ZWMgPSAwLCBlbGVtRGl2ID0galF1ZXJ5KCIjbm90aGlkZGVuZGl2
Y2hpbGQiKS5odG1sKCc8c3Bhbj48L3NwYW4+JykuZ2V0KDApOworCisJalF1ZXJ5KCIjYm9keSIp
LmRlbGVnYXRlKCIjbm90aGlkZGVuZGl2Y2hpbGQiLCAiY2xpY2siLCBmdW5jdGlvbihlKXsgalF1
ZXJ5KCIjbm90aGlkZGVuZGl2Y2hpbGQiKS5odG1sKCcnKTsgfSk7CisJalF1ZXJ5KCIjYm9keSIp
LmRlbGVnYXRlKCIjbm90aGlkZGVuZGl2Y2hpbGQiLCAiY2xpY2siLCBmdW5jdGlvbihlKXsgaWYo
ZS50YXJnZXQpIHtsaXZlYysrO30gfSk7CisKKwlqUXVlcnkoIiNub3RoaWRkZW5kaXYgc3BhbiIp
LmNsaWNrKCk7CisJZXF1YWxzKCBqUXVlcnkoIiNub3RoaWRkZW5kaXYgc3BhbiIpLmxlbmd0aCwg
MCwgIlZlcmlmeSB0aGF0IGZpcnN0IGhhbmRsZXIgb2NjdXJyZWQgYW5kIG1vZGlmaWVkIHRoZSBE
T00uIiApOworCWVxdWFscyggbGl2ZWMsIDEsICJWZXJpZnkgdGhhdCBzZWNvbmQgaGFuZGxlciBv
Y2N1cnJlZCBldmVuIHdpdGggbnVrZWQgdGFyZ2V0LiIgKTsKKworCS8vIENsZWFudXAKKwlqUXVl
cnkoIiNib2R5IikudW5kZWxlZ2F0ZSgiI25vdGhpZGRlbmRpdmNoaWxkIiwgImNsaWNrIik7CisK
KwkvLyBWZXJpZnkgdGhhdCAubGl2ZSgpIG9jdXJzIGFuZCBjYW5jZWwgYnVibGUgaW4gdGhlIHNh
bWUgb3JkZXIgYXMKKwkvLyB3ZSB3b3VsZCBleHBlY3QgLmJpbmQoKSBhbmQgLmNsaWNrKCkgd2l0
aG91dCBkZWxlZ2F0aW9uCisJdmFyIGxpdmVkID0gMCwgbGl2ZWUgPSAwOworCisJLy8gYmluZCBv
bmUgcGFpciBpbiBvbmUgb3JkZXIKKwlqUXVlcnkoIiNib2R5IikuZGVsZWdhdGUoJ3NwYW4jbGl2
ZVNwYW4xIGEnLCAnY2xpY2snLCBmdW5jdGlvbigpeyBsaXZlZCsrOyByZXR1cm4gZmFsc2U7IH0p
OworCWpRdWVyeSgiI2JvZHkiKS5kZWxlZ2F0ZSgnc3BhbiNsaXZlU3BhbjEnLCAnY2xpY2snLCBm
dW5jdGlvbigpeyBsaXZlZSsrOyB9KTsKKworCWpRdWVyeSgnc3BhbiNsaXZlU3BhbjEgYScpLmNs
aWNrKCk7CisJZXF1YWxzKCBsaXZlZCwgMSwgIlZlcmlmeSB0aGF0IG9ubHkgb25lIGZpcnN0IGhh
bmRsZXIgb2NjdXJyZWQuIiApOworCWVxdWFscyggbGl2ZWUsIDAsICJWZXJpZnkgdGhhdCBzZWNv
bmQgaGFuZGxlciBkb2Vzbid0LiIgKTsKKworCS8vIGFuZCBvbmUgcGFpciBpbiBpbnZlcnNlCisJ
alF1ZXJ5KCIjYm9keSIpLmRlbGVnYXRlKCdzcGFuI2xpdmVTcGFuMicsICdjbGljaycsIGZ1bmN0
aW9uKCl7IGxpdmVlKys7IH0pOworCWpRdWVyeSgiI2JvZHkiKS5kZWxlZ2F0ZSgnc3BhbiNsaXZl
U3BhbjIgYScsICdjbGljaycsIGZ1bmN0aW9uKCl7IGxpdmVkKys7IHJldHVybiBmYWxzZTsgfSk7
CisKKwlsaXZlZCA9IDA7CisJbGl2ZWUgPSAwOworCWpRdWVyeSgnc3BhbiNsaXZlU3BhbjIgYScp
LmNsaWNrKCk7CisJZXF1YWxzKCBsaXZlZCwgMSwgIlZlcmlmeSB0aGF0IG9ubHkgb25lIGZpcnN0
IGhhbmRsZXIgb2NjdXJyZWQuIiApOworCWVxdWFscyggbGl2ZWUsIDAsICJWZXJpZnkgdGhhdCBz
ZWNvbmQgaGFuZGxlciBkb2Vzbid0LiIgKTsKKworCS8vIENsZWFudXAKKwlqUXVlcnkoIiNib2R5
IikudW5kZWxlZ2F0ZSgiY2xpY2siKTsKKworCS8vIFRlc3QgdGhpcywgdGFyZ2V0IGFuZCBjdXJy
ZW50VGFyZ2V0IGFyZSBjb3JyZWN0CisJalF1ZXJ5KCIjYm9keSIpLmRlbGVnYXRlKCdzcGFuI2xp
dmVTcGFuMScsICdjbGljaycsIGZ1bmN0aW9uKGUpeworCQllcXVhbHMoIHRoaXMuaWQsICdsaXZl
U3BhbjEnLCAnQ2hlY2sgdGhlIHRoaXMgd2l0aGluIGEgZGVsZWdhdGUgaGFuZGxlcicgKTsKKwkJ
ZXF1YWxzKCBlLmN1cnJlbnRUYXJnZXQuaWQsICdsaXZlU3BhbjEnLCAnQ2hlY2sgdGhlIGV2ZW50
LmN1cnJlbnRUYXJnZXQgd2l0aGluIGEgZGVsZWdhdGUgaGFuZGxlcicgKTsKKwkJZXF1YWxzKCBl
LnRhcmdldC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpLCAnQScsICdDaGVjayB0aGUgZXZlbnQudGFy
Z2V0IHdpdGhpbiBhIGRlbGVnYXRlIGhhbmRsZXInICk7CisJfSk7CisKKwlqUXVlcnkoJ3NwYW4j
bGl2ZVNwYW4xIGEnKS5jbGljaygpOworCisJalF1ZXJ5KCIjYm9keSIpLnVuZGVsZWdhdGUoJ3Nw
YW4jbGl2ZVNwYW4xJywgJ2NsaWNrJyk7CisKKwkvLyBXb3JrIHdpdGggZGVlcCBzZWxlY3RvcnMK
KwlsaXZlZSA9IDA7CisKKwlmdW5jdGlvbiBjbGlja0IoKXsgbGl2ZWUrKzsgfQorCisJalF1ZXJ5
KCIjYm9keSIpLmRlbGVnYXRlKCIjbm90aGlkZGVuZGl2IGRpdiIsICJjbGljayIsIGZ1bmN0aW9u
KCl7IGxpdmVlKys7IH0pOworCWpRdWVyeSgiI2JvZHkiKS5kZWxlZ2F0ZSgiI25vdGhpZGRlbmRp
diBkaXYiLCAiY2xpY2siLCBjbGlja0IpOworCWpRdWVyeSgiI2JvZHkiKS5kZWxlZ2F0ZSgiI25v
dGhpZGRlbmRpdiBkaXYiLCAibW91c2VvdmVyIiwgZnVuY3Rpb24oKXsgbGl2ZWUrKzsgfSk7CisK
KwllcXVhbHMoIGxpdmVlLCAwLCAiTm8gY2xpY2tzLCBkZWVwIHNlbGVjdG9yLiIgKTsKKworCWxp
dmVlID0gMDsKKwlqUXVlcnkoIiNub3RoaWRkZW5kaXZjaGlsZCIpLnRyaWdnZXIoImNsaWNrIik7
CisJZXF1YWxzKCBsaXZlZSwgMiwgIkNsaWNrLCBkZWVwIHNlbGVjdG9yLiIgKTsKKworCWxpdmVl
ID0gMDsKKwlqUXVlcnkoIiNub3RoaWRkZW5kaXZjaGlsZCIpLnRyaWdnZXIoIm1vdXNlb3ZlciIp
OworCWVxdWFscyggbGl2ZWUsIDEsICJNb3VzZW92ZXIsIGRlZXAgc2VsZWN0b3IuIiApOworCisJ
alF1ZXJ5KCIjYm9keSIpLnVuZGVsZWdhdGUoIiNub3RoaWRkZW5kaXYgZGl2IiwgIm1vdXNlb3Zl
ciIpOworCisJbGl2ZWUgPSAwOworCWpRdWVyeSgiI25vdGhpZGRlbmRpdmNoaWxkIikudHJpZ2dl
cigiY2xpY2siKTsKKwllcXVhbHMoIGxpdmVlLCAyLCAiQ2xpY2ssIGRlZXAgc2VsZWN0b3IuIiAp
OworCisJbGl2ZWUgPSAwOworCWpRdWVyeSgiI25vdGhpZGRlbmRpdmNoaWxkIikudHJpZ2dlcigi
bW91c2VvdmVyIik7CisJZXF1YWxzKCBsaXZlZSwgMCwgIk1vdXNlb3ZlciwgZGVlcCBzZWxlY3Rv
ci4iICk7CisKKwlqUXVlcnkoIiNib2R5IikudW5kZWxlZ2F0ZSgiI25vdGhpZGRlbmRpdiBkaXYi
LCAiY2xpY2siLCBjbGlja0IpOworCisJbGl2ZWUgPSAwOworCWpRdWVyeSgiI25vdGhpZGRlbmRp
dmNoaWxkIikudHJpZ2dlcigiY2xpY2siKTsKKwllcXVhbHMoIGxpdmVlLCAxLCAiQ2xpY2ssIGRl
ZXAgc2VsZWN0b3IuIiApOworCisJalF1ZXJ5KCIjYm9keSIpLnVuZGVsZWdhdGUoIiNub3RoaWRk
ZW5kaXYgZGl2IiwgImNsaWNrIik7Cit9KTsKKwordGVzdCgidW5kZWxlZ2F0ZSBhbGwgYm91bmQg
ZXZlbnRzIiwgZnVuY3Rpb24oKXsKKwlleHBlY3QoMSk7CisKKwl2YXIgY291bnQgPSAwOworCXZh
ciBkaXYgPSBqUXVlcnkoIiNib2R5Iik7CisKKwlkaXYuZGVsZWdhdGUoImRpdiNub3RoaWRkZW5k
aXZjaGlsZCIsICJjbGljayBzdWJtaXQiLCBmdW5jdGlvbigpeyBjb3VudCsrOyB9KTsKKwlkaXYu
dW5kZWxlZ2F0ZSgpOworCisJalF1ZXJ5KCJkaXYjbm90aGlkZGVuZGl2Y2hpbGQiKS50cmlnZ2Vy
KCJjbGljayIpOworCWpRdWVyeSgiZGl2I25vdGhpZGRlbmRpdmNoaWxkIikudHJpZ2dlcigic3Vi
bWl0Iik7CisKKwllcXVhbHMoIGNvdW50LCAwLCAiTWFrZSBzdXJlIG5vIGV2ZW50cyB3ZXJlIHRy
aWdnZXJlZC4iICk7Cit9KTsKKwordGVzdCgiZGVsZWdhdGUgd2l0aCBtdWx0aXBsZSBldmVudHMi
LCBmdW5jdGlvbigpeworCWV4cGVjdCgxKTsKKworCXZhciBjb3VudCA9IDA7CisJdmFyIGRpdiA9
IGpRdWVyeSgiI2JvZHkiKTsKKworCWRpdi5kZWxlZ2F0ZSgiZGl2I25vdGhpZGRlbmRpdmNoaWxk
IiwgImNsaWNrIHN1Ym1pdCIsIGZ1bmN0aW9uKCl7IGNvdW50Kys7IH0pOworCisJalF1ZXJ5KCJk
aXYjbm90aGlkZGVuZGl2Y2hpbGQiKS50cmlnZ2VyKCJjbGljayIpOworCWpRdWVyeSgiZGl2I25v
dGhpZGRlbmRpdmNoaWxkIikudHJpZ2dlcigic3VibWl0Iik7CisKKwllcXVhbHMoIGNvdW50LCAy
LCAiTWFrZSBzdXJlIGJvdGggdGhlIGNsaWNrIGFuZCBzdWJtaXQgd2VyZSB0cmlnZ2VyZWQuIiAp
OworCisJalF1ZXJ5KCIjYm9keSIpLnVuZGVsZWdhdGUoKTsKK30pOworCit0ZXN0KCJkZWxlZ2F0
ZSB3aXRoIGNoYW5nZSIsIGZ1bmN0aW9uKCl7CisJZXhwZWN0KDgpOworCisJdmFyIHNlbGVjdENo
YW5nZSA9IDAsIGNoZWNrYm94Q2hhbmdlID0gMDsKKworCXZhciBzZWxlY3QgPSBqUXVlcnkoInNl
bGVjdFtuYW1lPSdTMSddIik7CisJalF1ZXJ5KCIjYm9keSIpLmRlbGVnYXRlKCJzZWxlY3RbbmFt
ZT0nUzEnXSIsICJjaGFuZ2UiLCBmdW5jdGlvbigpIHsKKwkJc2VsZWN0Q2hhbmdlKys7CisJfSk7
CisKKwl2YXIgY2hlY2tib3ggPSBqUXVlcnkoIiNjaGVjazIiKSwKKwkJY2hlY2tib3hGdW5jdGlv
biA9IGZ1bmN0aW9uKCl7CisJCQljaGVja2JveENoYW5nZSsrOworCQl9CisJalF1ZXJ5KCIjYm9k
eSIpLmRlbGVnYXRlKCIjY2hlY2syIiwgImNoYW5nZSIsIGNoZWNrYm94RnVuY3Rpb24pOworCisJ
Ly8gdGVzdCBjbGljayBvbiBzZWxlY3QKKworCS8vIHNlY29uZCBjbGljayB0aGF0IGNoYW5nZWQg
aXQKKwlzZWxlY3RDaGFuZ2UgPSAwOworCXNlbGVjdFswXS5zZWxlY3RlZEluZGV4ID0gc2VsZWN0
WzBdLnNlbGVjdGVkSW5kZXggPyAwIDogMTsKKwlzZWxlY3QudHJpZ2dlcigiY2hhbmdlIik7CisJ
ZXF1YWxzKCBzZWxlY3RDaGFuZ2UsIDEsICJDaGFuZ2Ugb24gY2xpY2suIiApOworCisJLy8gdGVz
dCBrZXlzIG9uIHNlbGVjdAorCXNlbGVjdENoYW5nZSA9IDA7CisJc2VsZWN0WzBdLnNlbGVjdGVk
SW5kZXggPSBzZWxlY3RbMF0uc2VsZWN0ZWRJbmRleCA/IDAgOiAxOworCXNlbGVjdC50cmlnZ2Vy
KCJjaGFuZ2UiKTsKKwllcXVhbHMoIHNlbGVjdENoYW5nZSwgMSwgIkNoYW5nZSBvbiBrZXl1cC4i
ICk7CisKKwkvLyB0ZXN0IGNsaWNrIG9uIGNoZWNrYm94CisJY2hlY2tib3gudHJpZ2dlcigiY2hh
bmdlIik7CisJZXF1YWxzKCBjaGVja2JveENoYW5nZSwgMSwgIkNoYW5nZSBvbiBjaGVja2JveC4i
ICk7CisKKwkvLyB0ZXN0IGJsdXIvZm9jdXMgb24gdGV4dAorCXZhciB0ZXh0ID0galF1ZXJ5KCIj
bmFtZSIpLCB0ZXh0Q2hhbmdlID0gMCwgb2xkVGV4dFZhbCA9IHRleHQudmFsKCk7CisJalF1ZXJ5
KCIjYm9keSIpLmRlbGVnYXRlKCIjbmFtZSIsICJjaGFuZ2UiLCBmdW5jdGlvbigpIHsKKwkJdGV4
dENoYW5nZSsrOworCX0pOworCisJdGV4dC52YWwob2xkVGV4dFZhbCsiZm9vIik7CisJdGV4dC50
cmlnZ2VyKCJjaGFuZ2UiKTsKKwllcXVhbHMoIHRleHRDaGFuZ2UsIDEsICJDaGFuZ2Ugb24gdGV4
dCBpbnB1dC4iICk7CisKKwl0ZXh0LnZhbChvbGRUZXh0VmFsKTsKKwlqUXVlcnkoIiNib2R5Iiku
ZGllKCJjaGFuZ2UiKTsKKworCS8vIHRlc3QgYmx1ci9mb2N1cyBvbiBwYXNzd29yZAorCXZhciBw
YXNzd29yZCA9IGpRdWVyeSgiI25hbWUiKSwgcGFzc3dvcmRDaGFuZ2UgPSAwLCBvbGRQYXNzd29y
ZFZhbCA9IHBhc3N3b3JkLnZhbCgpOworCWpRdWVyeSgiI2JvZHkiKS5kZWxlZ2F0ZSgiI25hbWUi
LCAiY2hhbmdlIiwgZnVuY3Rpb24oKSB7CisJCXBhc3N3b3JkQ2hhbmdlKys7CisJfSk7CisKKwlw
YXNzd29yZC52YWwob2xkUGFzc3dvcmRWYWwgKyAiZm9vIik7CisJcGFzc3dvcmQudHJpZ2dlcigi
Y2hhbmdlIik7CisJZXF1YWxzKCBwYXNzd29yZENoYW5nZSwgMSwgIkNoYW5nZSBvbiBwYXNzd29y
ZCBpbnB1dC4iICk7CisKKwlwYXNzd29yZC52YWwob2xkUGFzc3dvcmRWYWwpOworCWpRdWVyeSgi
I2JvZHkiKS51bmRlbGVnYXRlKCIjbmFtZSIsICJjaGFuZ2UiKTsKKworCS8vIG1ha2Ugc3VyZSBk
aWUgd29ya3MKKworCS8vIGRpZSBhbGwgY2hhbmdlcworCXNlbGVjdENoYW5nZSA9IDA7CisJalF1
ZXJ5KCIjYm9keSIpLnVuZGVsZWdhdGUoInNlbGVjdFtuYW1lPSdTMSddIiwgImNoYW5nZSIpOwor
CXNlbGVjdFswXS5zZWxlY3RlZEluZGV4ID0gc2VsZWN0WzBdLnNlbGVjdGVkSW5kZXggPyAwIDog
MTsKKwlzZWxlY3QudHJpZ2dlcigiY2hhbmdlIik7CisJZXF1YWxzKCBzZWxlY3RDaGFuZ2UsIDAs
ICJEaWUgb24gY2xpY2sgd29ya3MuIiApOworCisJc2VsZWN0Q2hhbmdlID0gMDsKKwlzZWxlY3Rb
MF0uc2VsZWN0ZWRJbmRleCA9IHNlbGVjdFswXS5zZWxlY3RlZEluZGV4ID8gMCA6IDE7CisJc2Vs
ZWN0LnRyaWdnZXIoImNoYW5nZSIpOworCWVxdWFscyggc2VsZWN0Q2hhbmdlLCAwLCAiRGllIG9u
IGtleXVwIHdvcmtzLiIgKTsKKworCS8vIGRpZSBzcGVjaWZpYyBjaGVja2JveAorCWpRdWVyeSgi
I2JvZHkiKS51bmRlbGVnYXRlKCIjY2hlY2syIiwgImNoYW5nZSIsIGNoZWNrYm94RnVuY3Rpb24p
OworCWNoZWNrYm94LnRyaWdnZXIoImNoYW5nZSIpOworCWVxdWFscyggY2hlY2tib3hDaGFuZ2Us
IDEsICJEaWUgb24gY2hlY2tib3guIiApOworfSk7CisKK3Rlc3QoImRlbGVnYXRlIHdpdGggc3Vi
bWl0IiwgZnVuY3Rpb24oKSB7CisJdmFyIGNvdW50MSA9IDAsIGNvdW50MiA9IDA7CisKKwlqUXVl
cnkoIiNib2R5IikuZGVsZWdhdGUoIiN0ZXN0Rm9ybSIsICJzdWJtaXQiLCBmdW5jdGlvbihldikg
eworCQljb3VudDErKzsKKwkJZXYucHJldmVudERlZmF1bHQoKTsKKwl9KTsKKworCWpRdWVyeShk
b2N1bWVudCkuZGVsZWdhdGUoImJvZHkiLCAic3VibWl0IiwgZnVuY3Rpb24oZXYpIHsKKwkJY291
bnQyKys7CisJCWV2LnByZXZlbnREZWZhdWx0KCk7CisJfSk7CisKKwlqUXVlcnkoIiN0ZXN0Rm9y
bSBpbnB1dFtuYW1lPXN1YjFdIikuc3VibWl0KCk7CisJZXF1YWxzKCBjb3VudDEsIDEsICJWZXJp
ZnkgZm9ybSBzdWJtaXQuIiApOworCWVxdWFscyggY291bnQyLCAxLCAiVmVyaWZ5IGJvZHkgc3Vi
bWl0LiIgKTsKKworCWpRdWVyeSgiI2JvZHkiKS51bmRlbGVnYXRlKCk7CisJalF1ZXJ5KGRvY3Vt
ZW50KS51bmRlbGVnYXRlKCk7Cit9KTsKKwordGVzdCgiTm9uIERPTSBlbGVtZW50IGV2ZW50cyIs
IGZ1bmN0aW9uKCkgeworCWV4cGVjdCgxKTsKKworCXZhciBvID0ge307CisKKwlqUXVlcnkobyku
YmluZCgnbm9uZWxlbWVudG9iaicsIGZ1bmN0aW9uKGUpIHsKKwkJb2soIHRydWUsICJFdmVudCBv
biBub24tRE9NIG9iamVjdCB0cmlnZ2VyZWQiICk7CisJfSk7CisKKwlqUXVlcnkobykudHJpZ2dl
cignbm9uZWxlbWVudG9iaicpOworfSk7CisKK3Rlc3QoIndpbmRvdyByZXNpemUiLCBmdW5jdGlv
bigpIHsKKwlleHBlY3QoMik7CisKKwlqUXVlcnkod2luZG93KS51bmJpbmQoKTsKKworCWpRdWVy
eSh3aW5kb3cpLmJpbmQoInJlc2l6ZSIsIGZ1bmN0aW9uKCl7CisJCW9rKCB0cnVlLCAiUmVzaXpl
IGV2ZW50IGZpcmVkLiIgKTsKKwl9KS5yZXNpemUoKS51bmJpbmQoInJlc2l6ZSIpOworCisJb2so
ICFqUXVlcnkuX2RhdGEod2luZG93LCAiX19ldmVudHNfXyIpLCAiTWFrZSBzdXJlIGFsbCB0aGUg
ZXZlbnRzIGFyZSBnb25lLiIgKTsKK30pOworCisvKgordGVzdCgialF1ZXJ5KGZ1bmN0aW9uKCQp
IHt9KSIsIGZ1bmN0aW9uKCkgeworCXN0b3AoKTsKKwlqUXVlcnkoZnVuY3Rpb24oJCkgeworCQll
cXVhbHMoalF1ZXJ5LCAkLCAicmVhZHkgZG9lc24ndCBwcm92aWRlIGFuIGV2ZW50IG9iamVjdCwg
aW5zdGVhZCBpdCBwcm92aWRlcyBhIHJlZmVyZW5jZSB0byB0aGUgalF1ZXJ5IGZ1bmN0aW9uLCBz
ZWUgaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9FdmVudHMvcmVhZHkjZm4iKTsKKwkJc3RhcnQoKTsK
Kwl9KTsKK30pOworCit0ZXN0KCJldmVudCBwcm9wZXJ0aWVzIiwgZnVuY3Rpb24oKSB7CisJc3Rv
cCgpOworCWpRdWVyeSgiI3NpbW9uMSIpLmNsaWNrKGZ1bmN0aW9uKGV2ZW50KSB7CisJCW9rKCBl
dmVudC50aW1lU3RhbXAsICJhc3NlcnQgZXZlbnQudGltZVN0YW1wIGlzIHByZXNlbnQiICk7CisJ
CXN0YXJ0KCk7CisJfSkuY2xpY2soKTsKK30pOworKi8KClByb3BlcnR5IGNoYW5nZXMgb246IExh
eW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC91bml0L2V2ZW50LmpzCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IGFsbG93LXRhYnMKICAgKyB5ZXMKCkluZGV4OiBMYXlvdXRUZXN0cy9qcXVlcnkvcmVz
b3VyY2VzL3Rlc3QvdW5pdC9tYW5pcHVsYXRpb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L3VuaXQvbWFuaXB1bGF0aW9uLmpzCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L3VuaXQvbWFuaXB1bGF0aW9u
LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzNjIgQEAKK21vZHVsZSgibWFuaXB1bGF0aW9u
IiwgeyB0ZWFyZG93bjogbW9kdWxlVGVhcmRvd24gfSk7CisKKy8vIEVuc3VyZSB0aGF0IGFuIGV4
dGVuZGVkIEFycmF5IHByb3RvdHlwZSBkb2Vzbid0IGJyZWFrIGpRdWVyeQorQXJyYXkucHJvdG90
eXBlLmFycmF5UHJvdG9GbiA9IGZ1bmN0aW9uKGFyZykgeyB0aHJvdygiYXJyYXlQcm90b0ZuIHNo
b3VsZCBub3QgYmUgY2FsbGVkIik7IH07CisKK3ZhciBiYXJlT2JqID0gZnVuY3Rpb24odmFsdWUp
IHsgcmV0dXJuIHZhbHVlOyB9OwordmFyIGZ1bmN0aW9uUmV0dXJuaW5nT2JqID0gZnVuY3Rpb24o
dmFsdWUpIHsgcmV0dXJuIChmdW5jdGlvbigpIHsgcmV0dXJuIHZhbHVlOyB9KTsgfTsKKwordGVz
dCgidGV4dCgpIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDIpOworCXZhciBleHBlY3RlZCA9ICJU
aGlzIGxpbmsgaGFzIGNsYXNzPVwiYmxvZ1wiOiBTaW1vbiBXaWxsaXNvbidzIFdlYmxvZyI7CisJ
ZXF1YWxzKCBqUXVlcnkoJyNzYXAnKS50ZXh0KCksIGV4cGVjdGVkLCAnQ2hlY2sgZm9yIG1lcmdl
ZCB0ZXh0IG9mIG1vcmUgdGhlbiBvbmUgZWxlbWVudC4nICk7CisKKwkvLyBDaGVjayBzZXJpYWxp
emF0aW9uIG9mIHRleHQgdmFsdWVzCisJZXF1YWxzKCBqUXVlcnkoZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUoImZvbyIpKS50ZXh0KCksICJmb28iLCAiVGV4dCBub2RlIHdhcyByZXRyZWl2ZWQgZnJv
bSAudGV4dCgpLiIgKTsKK30pOworCit2YXIgdGVzdFRleHQgPSBmdW5jdGlvbih2YWx1ZU9iaikg
eworCWV4cGVjdCg0KTsKKwl2YXIgdmFsID0gdmFsdWVPYmooIjxkaXY+PGI+SGVsbG88L2I+IGNy
dWVsIHdvcmxkITwvZGl2PiIpOworCWVxdWFscyggalF1ZXJ5KCIjZm9vIikudGV4dCh2YWwpWzBd
LmlubmVySFRNTC5yZXBsYWNlKC8+L2csICImZ3Q7IiksICImbHQ7ZGl2Jmd0OyZsdDtiJmd0O0hl
bGxvJmx0Oy9iJmd0OyBjcnVlbCB3b3JsZCEmbHQ7L2RpdiZndDsiLCAiQ2hlY2sgZXNjYXBlZCB0
ZXh0IiApOworCisJLy8gdXNpbmcgY29udGVudHMgd2lsbCBnZXQgY29tbWVudHMgcmVndWxhciwg
dGV4dCwgYW5kIGNvbW1lbnQgbm9kZXMKKwl2YXIgaiA9IGpRdWVyeSgiI25vbm5vZGVzIikuY29u
dGVudHMoKTsKKwlqLnRleHQodmFsdWVPYmooImhpISIpKTsKKwllcXVhbHMoIGpRdWVyeShqWzBd
KS50ZXh0KCksICJoaSEiLCAiQ2hlY2sgbm9kZSx0ZXh0bm9kZSxjb21tZW50IHdpdGggdGV4dCgp
IiApOworCWVxdWFscyggalsxXS5ub2RlVmFsdWUsICIgdGhlcmUgIiwgIkNoZWNrIG5vZGUsdGV4
dG5vZGUsY29tbWVudCB3aXRoIHRleHQoKSIgKTsKKworCS8vIEJsYWNrYmVycnkgNC42IGRvZXNu
J3QgbWFpbnRhaW4gY29tbWVudHMgaW4gdGhlIERPTQorCWVxdWFscyggalF1ZXJ5KCIjbm9ubm9k
ZXMiKVswXS5jaGlsZE5vZGVzLmxlbmd0aCA8IDMgPyA4IDogalsyXS5ub2RlVHlwZSwgOCwgIkNo
ZWNrIG5vZGUsdGV4dG5vZGUsY29tbWVudCB3aXRoIHRleHQoKSIgKTsKK30KKwordGVzdCgidGV4
dChTdHJpbmcpIiwgZnVuY3Rpb24oKSB7CisJdGVzdFRleHQoYmFyZU9iaikKK30pOworCit0ZXN0
KCJ0ZXh0KEZ1bmN0aW9uKSIsIGZ1bmN0aW9uKCkgeworCXRlc3RUZXh0KGZ1bmN0aW9uUmV0dXJu
aW5nT2JqKTsKK30pOworCit0ZXN0KCJ0ZXh0KEZ1bmN0aW9uKSB3aXRoIGluY29taW5nIHZhbHVl
IiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDIpOworCisJdmFyIG9sZCA9ICJUaGlzIGxpbmsgaGFz
IGNsYXNzPVwiYmxvZ1wiOiBTaW1vbiBXaWxsaXNvbidzIFdlYmxvZyI7CisKKwlqUXVlcnkoJyNz
YXAnKS50ZXh0KGZ1bmN0aW9uKGksIHZhbCkgeworCQllcXVhbHMoIHZhbCwgb2xkLCAiTWFrZSBz
dXJlIHRoZSBpbmNvbWluZyB2YWx1ZSBpcyBjb3JyZWN0LiIgKTsKKwkJcmV0dXJuICJmb29iYXIi
OworCX0pOworCisJZXF1YWxzKCBqUXVlcnkoIiNzYXAiKS50ZXh0KCksICJmb29iYXIiLCAnQ2hl
Y2sgZm9yIG1lcmdlZCB0ZXh0IG9mIG1vcmUgdGhlbiBvbmUgZWxlbWVudC4nICk7CisKKwlRVW5p
dC5yZXNldCgpOworfSk7CisKK3ZhciB0ZXN0V3JhcCA9IGZ1bmN0aW9uKHZhbCkgeworCWV4cGVj
dCgxOSk7CisJdmFyIGRlZmF1bHRUZXh0ID0gJ1RyeSB0aGVtIG91dDonCisJdmFyIHJlc3VsdCA9
IGpRdWVyeSgnI2ZpcnN0Jykud3JhcCh2YWwoICc8ZGl2IGNsYXNzPSJyZWQiPjxzcGFuPjwvc3Bh
bj48L2Rpdj4nICkpLnRleHQoKTsKKwllcXVhbHMoIGRlZmF1bHRUZXh0LCByZXN1bHQsICdDaGVj
ayBmb3Igd3JhcHBpbmcgb2Ygb24tdGhlLWZseSBodG1sJyApOworCW9rKCBqUXVlcnkoJyNmaXJz
dCcpLnBhcmVudCgpLnBhcmVudCgpLmlzKCcucmVkJyksICdDaGVjayBpZiB3cmFwcGVyIGhhcyBj
bGFzcyAicmVkIicgKTsKKworCVFVbml0LnJlc2V0KCk7CisJdmFyIGRlZmF1bHRUZXh0ID0gJ1Ry
eSB0aGVtIG91dDonCisJdmFyIHJlc3VsdCA9IGpRdWVyeSgnI2ZpcnN0Jykud3JhcCh2YWwoIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbXB0eScpICkpLnBhcmVudCgpOworCW9rKCByZXN1bHQu
aXMoJ29sJyksICdDaGVjayBmb3IgZWxlbWVudCB3cmFwcGluZycgKTsKKwllcXVhbHMoIHJlc3Vs
dC50ZXh0KCksIGRlZmF1bHRUZXh0LCAnQ2hlY2sgZm9yIGVsZW1lbnQgd3JhcHBpbmcnICk7CisK
KwlRVW5pdC5yZXNldCgpOworCWpRdWVyeSgnI2NoZWNrMScpLmNsaWNrKGZ1bmN0aW9uKCkgewor
CQl2YXIgY2hlY2tib3ggPSB0aGlzOworCQlvayggY2hlY2tib3guY2hlY2tlZCwgIkNoZWNrYm94
J3Mgc3RhdGUgaXMgZXJhc2VkIGFmdGVyIHdyYXAoKSBhY3Rpb24sIHNlZSAjNzY5IiApOworCQlq
UXVlcnkoY2hlY2tib3gpLndyYXAodmFsKCAnPGRpdiBpZD0iYzEiIHN0eWxlPSJkaXNwbGF5Om5v
bmU7Ij48L2Rpdj4nICkpOworCQlvayggY2hlY2tib3guY2hlY2tlZCwgIkNoZWNrYm94J3Mgc3Rh
dGUgaXMgZXJhc2VkIGFmdGVyIHdyYXAoKSBhY3Rpb24sIHNlZSAjNzY5IiApOworCX0pLmNsaWNr
KCk7CisKKwkvLyB1c2luZyBjb250ZW50cyB3aWxsIGdldCBjb21tZW50cyByZWd1bGFyLCB0ZXh0
LCBhbmQgY29tbWVudCBub2RlcworCXZhciBqID0galF1ZXJ5KCIjbm9ubm9kZXMiKS5jb250ZW50
cygpOworCWoud3JhcCh2YWwoICI8aT48L2k+IiApKTsKKworCS8vIEJsYWNrYmVycnkgNC42IGRv
ZXNuJ3QgbWFpbnRhaW4gY29tbWVudHMgaW4gdGhlIERPTQorCWVxdWFscyggalF1ZXJ5KCIjbm9u
bm9kZXMgPiBpIikubGVuZ3RoLCBqUXVlcnkoIiNub25ub2RlcyIpWzBdLmNoaWxkTm9kZXMubGVu
Z3RoLCAiQ2hlY2sgbm9kZSx0ZXh0bm9kZSxjb21tZW50IHdyYXBzIG9rIiApOworCWVxdWFscygg
alF1ZXJ5KCIjbm9ubm9kZXMgPiBpIikudGV4dCgpLCBqLnRleHQoKSwgIkNoZWNrIG5vZGUsdGV4
dG5vZGUsY29tbWVudCB3cmFwcyBkb2Vzbid0IGh1cnQgdGV4dCIgKTsKKworCS8vIFRyeSB3cmFw
cGluZyBhIGRpc2Nvbm5lY3RlZCBub2RlCisJdmFyIGNhY2hlTGVuZ3RoID0gMDsKKwlmb3IgKHZh
ciBpIGluIGpRdWVyeS5jYWNoZSkgeworCQljYWNoZUxlbmd0aCsrOworCX0KKworCWogPSBqUXVl
cnkoIjxsYWJlbC8+Iikud3JhcCh2YWwoICI8bGkvPiIgKSk7CisJZXF1YWxzKCBqWzBdLm5vZGVO
YW1lLnRvVXBwZXJDYXNlKCksICJMQUJFTCIsICJFbGVtZW50IGlzIGEgbGFiZWwiICk7CisJZXF1
YWxzKCBqWzBdLnBhcmVudE5vZGUubm9kZU5hbWUudG9VcHBlckNhc2UoKSwgIkxJIiwgIkVsZW1l
bnQgaGFzIGJlZW4gd3JhcHBlZCIgKTsKKworCWZvciAoaSBpbiBqUXVlcnkuY2FjaGUpIHsKKwkJ
Y2FjaGVMZW5ndGgtLTsKKwl9CisJZXF1YWxzKGNhY2hlTGVuZ3RoLCAwLCAiTm8gbWVtb3J5IGxl
YWsgaW4galF1ZXJ5LmNhY2hlIChidWcgIzcxNjUpIik7CisKKwkvLyBXcmFwIGFuIGVsZW1lbnQg
Y29udGFpbmluZyBhIHRleHQgbm9kZQorCWogPSBqUXVlcnkoIjxzcGFuLz4iKS53cmFwKCI8ZGl2
PnRlc3Q8L2Rpdj4iKTsKKwllcXVhbHMoIGpbMF0ucHJldmlvdXNTaWJsaW5nLm5vZGVUeXBlLCAz
LCAiTWFrZSBzdXJlIHRoZSBwcmV2aW91cyBub2RlIGlzIGEgdGV4dCBlbGVtZW50IiApOworCWVx
dWFscyggalswXS5wYXJlbnROb2RlLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCksICJESVYiLCAiQW5k
IHRoYXQgd2UncmUgaW4gdGhlIGRpdiBlbGVtZW50LiIgKTsKKworCS8vIFRyeSB0byB3cmFwIGFu
IGVsZW1lbnQgd2l0aCBtdWx0aXBsZSBlbGVtZW50cyAoc2hvdWxkIGZhaWwpCisJaiA9IGpRdWVy
eSgiPGRpdj48c3Bhbj48L3NwYW4+PC9kaXY+IikuY2hpbGRyZW4oKS53cmFwKCI8cD48L3A+PGRp
dj48L2Rpdj4iKTsKKwllcXVhbHMoIGpbMF0ucGFyZW50Tm9kZS5wYXJlbnROb2RlLmNoaWxkTm9k
ZXMubGVuZ3RoLCAxLCAiVGhlcmUgc2hvdWxkIG9ubHkgYmUgb25lIGVsZW1lbnQgd3JhcHBpbmcu
IiApOworCWVxdWFscyggai5sZW5ndGgsIDEsICJUaGVyZSBzaG91bGQgb25seSBiZSBvbmUgZWxl
bWVudCAobm8gY2xvbmluZykuIiApOworCWVxdWFscyggalswXS5wYXJlbnROb2RlLm5vZGVOYW1l
LnRvVXBwZXJDYXNlKCksICJQIiwgIlRoZSBzcGFuIHNob3VsZCBiZSBpbiB0aGUgcGFyYWdyYXBo
LiIgKTsKKworCS8vIFdyYXAgYW4gZWxlbWVudCB3aXRoIGEgalF1ZXJ5IHNldAorCWogPSBqUXVl
cnkoIjxzcGFuLz4iKS53cmFwKGpRdWVyeSgiPGRpdj48L2Rpdj4iKSk7CisJZXF1YWxzKCBqWzBd
LnBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwgImRpdiIsICJXcmFwcGluZyB3b3Jr
cy4iICk7CisKKwkvLyBXcmFwIGFuIGVsZW1lbnQgd2l0aCBhIGpRdWVyeSBzZXQgYW5kIGV2ZW50
CisJcmVzdWx0ID0galF1ZXJ5KCI8ZGl2PjwvZGl2PiIpLmNsaWNrKGZ1bmN0aW9uKCl7CisJCW9r
KHRydWUsICJFdmVudCB0cmlnZ2VyZWQuIik7CisKKwkJLy8gUmVtb3ZlIGhhbmRsZXJzIG9uIGRl
dGFjaGVkIGVsZW1lbnRzCisJCXJlc3VsdC51bmJpbmQoKTsKKwkJalF1ZXJ5KHRoaXMpLnVuYmlu
ZCgpOworCX0pOworCisJaiA9IGpRdWVyeSgiPHNwYW4vPiIpLndyYXAocmVzdWx0KTsKKwllcXVh
bHMoIGpbMF0ucGFyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCAiZGl2IiwgIldyYXBw
aW5nIHdvcmtzLiIgKTsKKworCWoucGFyZW50KCkudHJpZ2dlcigiY2xpY2siKTsKKworCS8vIGNs
ZWFuIHVwIGF0dGFjaGVkIGVsZW1lbnRzCisJUVVuaXQucmVzZXQoKTsKK30KKwordGVzdCgid3Jh
cChTdHJpbmd8RWxlbWVudCkiLCBmdW5jdGlvbigpIHsKKwl0ZXN0V3JhcChiYXJlT2JqKTsKK30p
OworCit0ZXN0KCJ3cmFwKEZ1bmN0aW9uKSIsIGZ1bmN0aW9uKCkgeworCXRlc3RXcmFwKGZ1bmN0
aW9uUmV0dXJuaW5nT2JqKTsKK30pCisKK3ZhciB0ZXN0V3JhcEFsbCA9IGZ1bmN0aW9uKHZhbCkg
eworCWV4cGVjdCg4KTsKKwl2YXIgcHJldiA9IGpRdWVyeSgiI2ZpcnN0cCIpWzBdLnByZXZpb3Vz
U2libGluZzsKKwl2YXIgcCA9IGpRdWVyeSgiI2ZpcnN0cCwjZmlyc3QiKVswXS5wYXJlbnROb2Rl
OworCisJdmFyIHJlc3VsdCA9IGpRdWVyeSgnI2ZpcnN0cCwjZmlyc3QnKS53cmFwQWxsKHZhbCgg
JzxkaXYgY2xhc3M9InJlZCI+PGRpdiBjbGFzcz0idG1wIj48L2Rpdj48L2Rpdj4nICkpOworCWVx
dWFscyggcmVzdWx0LnBhcmVudCgpLmxlbmd0aCwgMSwgJ0NoZWNrIGZvciB3cmFwcGluZyBvZiBv
bi10aGUtZmx5IGh0bWwnICk7CisJb2soIGpRdWVyeSgnI2ZpcnN0JykucGFyZW50KCkucGFyZW50
KCkuaXMoJy5yZWQnKSwgJ0NoZWNrIGlmIHdyYXBwZXIgaGFzIGNsYXNzICJyZWQiJyApOworCW9r
KCBqUXVlcnkoJyNmaXJzdHAnKS5wYXJlbnQoKS5wYXJlbnQoKS5pcygnLnJlZCcpLCAnQ2hlY2sg
aWYgd3JhcHBlciBoYXMgY2xhc3MgInJlZCInICk7CisJZXF1YWxzKCBqUXVlcnkoIiNmaXJzdCIp
LnBhcmVudCgpLnBhcmVudCgpWzBdLnByZXZpb3VzU2libGluZywgcHJldiwgIkNvcnJlY3QgUHJl
dmlvdXMgU2libGluZyIgKTsKKwllcXVhbHMoIGpRdWVyeSgiI2ZpcnN0IikucGFyZW50KCkucGFy
ZW50KClbMF0ucGFyZW50Tm9kZSwgcCwgIkNvcnJlY3QgUGFyZW50IiApOworCisJUVVuaXQucmVz
ZXQoKTsKKwl2YXIgcHJldiA9IGpRdWVyeSgiI2ZpcnN0cCIpWzBdLnByZXZpb3VzU2libGluZzsK
Kwl2YXIgcCA9IGpRdWVyeSgiI2ZpcnN0IilbMF0ucGFyZW50Tm9kZTsKKwl2YXIgcmVzdWx0ID0g
alF1ZXJ5KCcjZmlyc3RwLCNmaXJzdCcpLndyYXBBbGwodmFsKCBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnZW1wdHknKSApKTsKKwllcXVhbHMoIGpRdWVyeSgiI2ZpcnN0IikucGFyZW50KClbMF0s
IGpRdWVyeSgiI2ZpcnN0cCIpLnBhcmVudCgpWzBdLCAiU2FtZSBQYXJlbnQiICk7CisJZXF1YWxz
KCBqUXVlcnkoIiNmaXJzdCIpLnBhcmVudCgpWzBdLnByZXZpb3VzU2libGluZywgcHJldiwgIkNv
cnJlY3QgUHJldmlvdXMgU2libGluZyIgKTsKKwllcXVhbHMoIGpRdWVyeSgiI2ZpcnN0IikucGFy
ZW50KClbMF0ucGFyZW50Tm9kZSwgcCwgIkNvcnJlY3QgUGFyZW50IiApOworfQorCit0ZXN0KCJ3
cmFwQWxsKFN0cmluZ3xFbGVtZW50KSIsIGZ1bmN0aW9uKCkgeworCXRlc3RXcmFwQWxsKGJhcmVP
YmopOworfSk7CisKK3ZhciB0ZXN0V3JhcElubmVyID0gZnVuY3Rpb24odmFsKSB7CisJZXhwZWN0
KDExKTsKKwl2YXIgbnVtID0galF1ZXJ5KCIjZmlyc3QiKS5jaGlsZHJlbigpLmxlbmd0aDsKKwl2
YXIgcmVzdWx0ID0galF1ZXJ5KCcjZmlyc3QnKS53cmFwSW5uZXIodmFsKCc8ZGl2IGNsYXNzPSJy
ZWQiPjxkaXYgaWQ9InRtcCI+PC9kaXY+PC9kaXY+JykpOworCWVxdWFscyggalF1ZXJ5KCIjZmly
c3QiKS5jaGlsZHJlbigpLmxlbmd0aCwgMSwgIk9ubHkgb25lIGNoaWxkIiApOworCW9rKCBqUXVl
cnkoIiNmaXJzdCIpLmNoaWxkcmVuKCkuaXMoIi5yZWQiKSwgIlZlcmlmeSBSaWdodCBFbGVtZW50
IiApOworCWVxdWFscyggalF1ZXJ5KCIjZmlyc3QiKS5jaGlsZHJlbigpLmNoaWxkcmVuKCkuY2hp
bGRyZW4oKS5sZW5ndGgsIG51bSwgIlZlcmlmeSBFbGVtZW50cyBJbnRhY3QiICk7CisKKwlRVW5p
dC5yZXNldCgpOworCXZhciBudW0gPSBqUXVlcnkoIiNmaXJzdCIpLmh0bWwoImZvbzxkaXY+dGVz
dDwvZGl2PjxkaXY+dGVzdDI8L2Rpdj4iKS5jaGlsZHJlbigpLmxlbmd0aDsKKwl2YXIgcmVzdWx0
ID0galF1ZXJ5KCcjZmlyc3QnKS53cmFwSW5uZXIodmFsKCc8ZGl2IGNsYXNzPSJyZWQiPjxkaXYg
aWQ9InRtcCI+PC9kaXY+PC9kaXY+JykpOworCWVxdWFscyggalF1ZXJ5KCIjZmlyc3QiKS5jaGls
ZHJlbigpLmxlbmd0aCwgMSwgIk9ubHkgb25lIGNoaWxkIiApOworCW9rKCBqUXVlcnkoIiNmaXJz
dCIpLmNoaWxkcmVuKCkuaXMoIi5yZWQiKSwgIlZlcmlmeSBSaWdodCBFbGVtZW50IiApOworCWVx
dWFscyggalF1ZXJ5KCIjZmlyc3QiKS5jaGlsZHJlbigpLmNoaWxkcmVuKCkuY2hpbGRyZW4oKS5s
ZW5ndGgsIG51bSwgIlZlcmlmeSBFbGVtZW50cyBJbnRhY3QiICk7CisKKwlRVW5pdC5yZXNldCgp
OworCXZhciBudW0gPSBqUXVlcnkoIiNmaXJzdCIpLmNoaWxkcmVuKCkubGVuZ3RoOworCXZhciBy
ZXN1bHQgPSBqUXVlcnkoJyNmaXJzdCcpLndyYXBJbm5lcih2YWwoZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2VtcHR5JykpKTsKKwllcXVhbHMoIGpRdWVyeSgiI2ZpcnN0IikuY2hpbGRyZW4oKS5s
ZW5ndGgsIDEsICJPbmx5IG9uZSBjaGlsZCIgKTsKKwlvayggalF1ZXJ5KCIjZmlyc3QiKS5jaGls
ZHJlbigpLmlzKCIjZW1wdHkiKSwgIlZlcmlmeSBSaWdodCBFbGVtZW50IiApOworCWVxdWFscygg
alF1ZXJ5KCIjZmlyc3QiKS5jaGlsZHJlbigpLmNoaWxkcmVuKCkubGVuZ3RoLCBudW0sICJWZXJp
ZnkgRWxlbWVudHMgSW50YWN0IiApOworCisJdmFyIGRpdiA9IGpRdWVyeSgiPGRpdi8+Iik7CisJ
ZGl2LndyYXBJbm5lcih2YWwoIjxzcGFuPjwvc3Bhbj4iKSk7CisJZXF1YWxzKGRpdi5jaGlsZHJl
bigpLmxlbmd0aCwgMSwgIlRoZSBjb250ZW50cyB3ZXJlIHdyYXBwZWQuIik7CisJZXF1YWxzKGRp
di5jaGlsZHJlbigpWzBdLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksICJzcGFuIiwgIkEgc3BhbiB3
YXMgaW5zZXJ0ZWQuIik7Cit9CisKK3Rlc3QoIndyYXBJbm5lcihTdHJpbmd8RWxlbWVudCkiLCBm
dW5jdGlvbigpIHsKKwl0ZXN0V3JhcElubmVyKGJhcmVPYmopOworfSk7CisKK3Rlc3QoIndyYXBJ
bm5lcihGdW5jdGlvbikiLCBmdW5jdGlvbigpIHsKKwl0ZXN0V3JhcElubmVyKGZ1bmN0aW9uUmV0
dXJuaW5nT2JqKQorfSk7CisKK3Rlc3QoInVud3JhcCgpIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0
KDkpOworCisJalF1ZXJ5KCJib2R5IikuYXBwZW5kKCcgIDxkaXYgaWQ9InVud3JhcCIgc3R5bGU9
ImRpc3BsYXk6IG5vbmU7Ij4gPGRpdiBpZD0idW53cmFwMSI+IDxzcGFuIGNsYXNzPSJ1bndyYXAi
PmE8L3NwYW4+IDxzcGFuIGNsYXNzPSJ1bndyYXAiPmI8L3NwYW4+IDwvZGl2PiA8ZGl2IGlkPSJ1
bndyYXAyIj4gPHNwYW4gY2xhc3M9InVud3JhcCI+Yzwvc3Bhbj4gPHNwYW4gY2xhc3M9InVud3Jh
cCI+ZDwvc3Bhbj4gPC9kaXY+IDxkaXYgaWQ9InVud3JhcDMiPiA8Yj48c3BhbiBjbGFzcz0idW53
cmFwIHVud3JhcDMiPmU8L3NwYW4+PC9iPiA8Yj48c3BhbiBjbGFzcz0idW53cmFwIHVud3JhcDMi
PmY8L3NwYW4+PC9iPiA8L2Rpdj4gPC9kaXY+Jyk7CisKKwl2YXIgYWJjZCA9IGpRdWVyeSgnI3Vu
d3JhcDEgPiBzcGFuLCAjdW53cmFwMiA+IHNwYW4nKS5nZXQoKSwKKwkJYWJjZGVmID0galF1ZXJ5
KCcjdW53cmFwIHNwYW4nKS5nZXQoKTsKKworCWVxdWFscyggalF1ZXJ5KCcjdW53cmFwMSBzcGFu
JykuYWRkKCcjdW53cmFwMiBzcGFuOmZpcnN0JykudW53cmFwKCkubGVuZ3RoLCAzLCAnbWFrZSAj
dW53cmFwMSBhbmQgI3Vud3JhcDIgZ28gYXdheScgKTsKKwlzYW1lKCBqUXVlcnkoJyN1bndyYXAg
PiBzcGFuJykuZ2V0KCksIGFiY2QsICdhbGwgZm91ciBzcGFucyBzaG91bGQgc3RpbGwgZXhpc3Qn
ICk7CisKKwlzYW1lKCBqUXVlcnkoJyN1bndyYXAzIHNwYW4nKS51bndyYXAoKS5nZXQoKSwgalF1
ZXJ5KCcjdW53cmFwMyA+IHNwYW4nKS5nZXQoKSwgJ21ha2UgYWxsIGIgaW4gI3Vud3JhcDMgZ28g
YXdheScgKTsKKworCXNhbWUoIGpRdWVyeSgnI3Vud3JhcDMgc3BhbicpLnVud3JhcCgpLmdldCgp
LCBqUXVlcnkoJyN1bndyYXAgPiBzcGFuLnVud3JhcDMnKS5nZXQoKSwgJ21ha2UgI3Vud3JhcDMg
Z28gYXdheScgKTsKKworCXNhbWUoIGpRdWVyeSgnI3Vud3JhcCcpLmNoaWxkcmVuKCkuZ2V0KCks
IGFiY2RlZiwgJyN1bndyYXAgb25seSBjb250YWlucyA2IGNoaWxkIHNwYW5zJyApOworCisJc2Ft
ZSggalF1ZXJ5KCcjdW53cmFwID4gc3BhbicpLnVud3JhcCgpLmdldCgpLCBqUXVlcnkoJ2JvZHkg
PiBzcGFuLnVud3JhcCcpLmdldCgpLCAnbWFrZSB0aGUgNiBzcGFucyBiZWNvbWUgY2hpbGRyZW4g
b2YgYm9keScgKTsKKworCXNhbWUoIGpRdWVyeSgnYm9keSA+IHNwYW4udW53cmFwJykudW53cmFw
KCkuZ2V0KCksIGpRdWVyeSgnYm9keSA+IHNwYW4udW53cmFwJykuZ2V0KCksICdjYW5cJ3QgdW53
cmFwIGNoaWxkcmVuIG9mIGJvZHknICk7CisJc2FtZSggalF1ZXJ5KCdib2R5ID4gc3Bhbi51bndy
YXAnKS51bndyYXAoKS5nZXQoKSwgYWJjZGVmLCAnY2FuXCd0IHVud3JhcCBjaGlsZHJlbiBvZiBi
b2R5JyApOworCisJc2FtZSggalF1ZXJ5KCdib2R5ID4gc3Bhbi51bndyYXAnKS5nZXQoKSwgYWJj
ZGVmLCAnYm9keSBjb250YWlucyA2IC51bndyYXAgY2hpbGQgc3BhbnMnICk7CisKKwlqUXVlcnko
J2JvZHkgPiBzcGFuLnVud3JhcCcpLnJlbW92ZSgpOworfSk7CisKK3ZhciB0ZXN0QXBwZW5kID0g
ZnVuY3Rpb24odmFsdWVPYmopIHsKKwlleHBlY3QoMzcpOworCXZhciBkZWZhdWx0VGV4dCA9ICdU
cnkgdGhlbSBvdXQ6JworCXZhciByZXN1bHQgPSBqUXVlcnkoJyNmaXJzdCcpLmFwcGVuZCh2YWx1
ZU9iaignPGI+YnVnYTwvYj4nKSk7CisJZXF1YWxzKCByZXN1bHQudGV4dCgpLCBkZWZhdWx0VGV4
dCArICdidWdhJywgJ0NoZWNrIGlmIHRleHQgYXBwZW5kaW5nIHdvcmtzJyApOworCWVxdWFscygg
alF1ZXJ5KCcjc2VsZWN0MycpLmFwcGVuZCh2YWx1ZU9iaignPG9wdGlvbiB2YWx1ZT0iYXBwZW5k
VGVzdCI+QXBwZW5kIFRlc3Q8L29wdGlvbj4nKSkuZmluZCgnb3B0aW9uOmxhc3QtY2hpbGQnKS5h
dHRyKCd2YWx1ZScpLCAnYXBwZW5kVGVzdCcsICdBcHBlbmRpbmcgaHRtbCBvcHRpb25zIHRvIHNl
bGVjdCBlbGVtZW50Jyk7CisKKwlRVW5pdC5yZXNldCgpOworCXZhciBleHBlY3RlZCA9ICJUaGlz
IGxpbmsgaGFzIGNsYXNzPVwiYmxvZ1wiOiBTaW1vbiBXaWxsaXNvbidzIFdlYmxvZ1RyeSB0aGVt
IG91dDoiOworCWpRdWVyeSgnI3NhcCcpLmFwcGVuZCh2YWx1ZU9iaihkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnZmlyc3QnKSkpOworCWVxdWFscyggalF1ZXJ5KCcjc2FwJykudGV4dCgpLCBleHBl
Y3RlZCwgIkNoZWNrIGZvciBhcHBlbmRpbmcgb2YgZWxlbWVudCIgKTsKKworCVFVbml0LnJlc2V0
KCk7CisJZXhwZWN0ZWQgPSAiVGhpcyBsaW5rIGhhcyBjbGFzcz1cImJsb2dcIjogU2ltb24gV2ls
bGlzb24ncyBXZWJsb2dUcnkgdGhlbSBvdXQ6WWFob28iOworCWpRdWVyeSgnI3NhcCcpLmFwcGVu
ZCh2YWx1ZU9iaihbZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpcnN0JyksIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCd5YWhvbycpXSkpOworCWVxdWFscyggalF1ZXJ5KCcjc2FwJykudGV4dCgp
LCBleHBlY3RlZCwgIkNoZWNrIGZvciBhcHBlbmRpbmcgb2YgYXJyYXkgb2YgZWxlbWVudHMiICk7
CisKKwlRVW5pdC5yZXNldCgpOworCWV4cGVjdGVkID0gIlRoaXMgbGluayBoYXMgY2xhc3M9XCJi
bG9nXCI6IFNpbW9uIFdpbGxpc29uJ3MgV2VibG9nWWFob29UcnkgdGhlbSBvdXQ6IjsKKwlqUXVl
cnkoJyNzYXAnKS5hcHBlbmQodmFsdWVPYmooalF1ZXJ5KCIjeWFob28sICNmaXJzdCIpKSk7CisJ
ZXF1YWxzKCBqUXVlcnkoJyNzYXAnKS50ZXh0KCksIGV4cGVjdGVkLCAiQ2hlY2sgZm9yIGFwcGVu
ZGluZyBvZiBqUXVlcnkgb2JqZWN0IiApOworCisJUVVuaXQucmVzZXQoKTsKKwlqUXVlcnkoIiNz
YXAiKS5hcHBlbmQodmFsdWVPYmooIDUgKSk7CisJb2soIGpRdWVyeSgiI3NhcCIpWzBdLmlubmVy
SFRNTC5tYXRjaCggLzUkLyApLCAiQ2hlY2sgZm9yIGFwcGVuZGluZyBhIG51bWJlciIgKTsKKwor
CVFVbml0LnJlc2V0KCk7CisJalF1ZXJ5KCIjc2FwIikuYXBwZW5kKHZhbHVlT2JqKCAiIHRleHQg
d2l0aCBzcGFjZXMgIiApKTsKKwlvayggalF1ZXJ5KCIjc2FwIilbMF0uaW5uZXJIVE1MLm1hdGNo
KC8gdGV4dCB3aXRoIHNwYWNlcyAkLyksICJDaGVjayBmb3IgYXBwZW5kaW5nIHRleHQgd2l0aCBz
cGFjZXMiICk7CisKKwlRVW5pdC5yZXNldCgpOworCW9rKCBqUXVlcnkoIiNzYXAiKS5hcHBlbmQo
dmFsdWVPYmooIFtdICkpLCAiQ2hlY2sgZm9yIGFwcGVuZGluZyBhbiBlbXB0eSBhcnJheS4iICk7
CisJb2soIGpRdWVyeSgiI3NhcCIpLmFwcGVuZCh2YWx1ZU9iaiggIiIgKSksICJDaGVjayBmb3Ig
YXBwZW5kaW5nIGFuIGVtcHR5IHN0cmluZy4iICk7CisJb2soIGpRdWVyeSgiI3NhcCIpLmFwcGVu
ZCh2YWx1ZU9iaiggZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImZvbyIpICkpLCAiQ2hl
Y2sgZm9yIGFwcGVuZGluZyBhbiBlbXB0eSBub2RlbGlzdC4iICk7CisKKwlRVW5pdC5yZXNldCgp
OworCWpRdWVyeSgiZm9ybSIpLmFwcGVuZCh2YWx1ZU9iaignPGlucHV0IG5hbWU9InJhZGlvdGVz
dCIgdHlwZT0icmFkaW8iIGNoZWNrZWQ9ImNoZWNrZWQiIC8+JykpOworCWpRdWVyeSgiZm9ybSBp
bnB1dFtuYW1lPXJhZGlvdGVzdF0iKS5lYWNoKGZ1bmN0aW9uKCl7CisJCW9rKCBqUXVlcnkodGhp
cykuaXMoJzpjaGVja2VkJyksICJBcHBlbmQgY2hlY2tlZCByYWRpbyIpOworCX0pLnJlbW92ZSgp
OworCisJUVVuaXQucmVzZXQoKTsKKwlqUXVlcnkoImZvcm0iKS5hcHBlbmQodmFsdWVPYmooJzxp
bnB1dCBuYW1lPSJyYWRpb3Rlc3QiIHR5cGU9InJhZGlvIiBjaGVja2VkICAgID0gICBcJ2NoZWNr
ZWRcJyAvPicpKTsKKwlqUXVlcnkoImZvcm0gaW5wdXRbbmFtZT1yYWRpb3Rlc3RdIikuZWFjaChm
dW5jdGlvbigpeworCQlvayggalF1ZXJ5KHRoaXMpLmlzKCc6Y2hlY2tlZCcpLCAiQXBwZW5kIGFs
dGVybmF0ZWx5IGZvcm1hdGVkIGNoZWNrZWQgcmFkaW8iKTsKKwl9KS5yZW1vdmUoKTsKKworCVFV
bml0LnJlc2V0KCk7CisJalF1ZXJ5KCJmb3JtIikuYXBwZW5kKHZhbHVlT2JqKCc8aW5wdXQgbmFt
ZT0icmFkaW90ZXN0IiB0eXBlPSJyYWRpbyIgY2hlY2tlZCAvPicpKTsKKwlqUXVlcnkoImZvcm0g
aW5wdXRbbmFtZT1yYWRpb3Rlc3RdIikuZWFjaChmdW5jdGlvbigpeworCQlvayggalF1ZXJ5KHRo
aXMpLmlzKCc6Y2hlY2tlZCcpLCAiQXBwZW5kIEhUTUw1LWZvcm1hdGVkIGNoZWNrZWQgcmFkaW8i
KTsKKwl9KS5yZW1vdmUoKTsKKworCVFVbml0LnJlc2V0KCk7CisJalF1ZXJ5KCIjc2FwIikuYXBw
ZW5kKHZhbHVlT2JqKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybScpICkpOworCWVxdWFs
cyggalF1ZXJ5KCIjc2FwPmZvcm0iKS5zaXplKCksIDEsICJDaGVjayBmb3IgYXBwZW5kaW5nIGEg
Zm9ybSIgKTsgLy8gQnVnICM5MTAKKworCVFVbml0LnJlc2V0KCk7CisJdmFyIHBhc3MgPSB0cnVl
OworCXRyeSB7CisJCXZhciBib2R5ID0galF1ZXJ5KCIjaWZyYW1lIilbMF0uY29udGVudFdpbmRv
dy5kb2N1bWVudC5ib2R5OworCisJCXBhc3MgPSBmYWxzZTsKKwkJalF1ZXJ5KCBib2R5ICkuYXBw
ZW5kKHZhbHVlT2JqKCAiPGRpdj50ZXN0PC9kaXY+IiApKTsKKwkJcGFzcyA9IHRydWU7CisJfSBj
YXRjaChlKSB7fQorCisJb2soIHBhc3MsICJUZXN0IGZvciBhcHBlbmRpbmcgYSBET00gbm9kZSB0
byB0aGUgY29udGVudHMgb2YgYW4gSUZyYW1lIiApOworCisJUVVuaXQucmVzZXQoKTsKKwlqUXVl
cnkoJzxmaWVsZHNldC8+JykuYXBwZW5kVG8oJyNmb3JtJykuYXBwZW5kKHZhbHVlT2JqKCAnPGxl
Z2VuZCBpZD0ibGVnZW5kIj50ZXN0PC9sZWdlbmQ+JyApKTsKKwl0KCAnQXBwZW5kIGxlZ2VuZCcs
ICcjbGVnZW5kJywgWydsZWdlbmQnXSApOworCisJUVVuaXQucmVzZXQoKTsKKwlqUXVlcnkoJyNz
ZWxlY3QxJykuYXBwZW5kKHZhbHVlT2JqKCAnPE9QVElPTj5UZXN0PC9PUFRJT04+JyApKTsKKwll
cXVhbHMoIGpRdWVyeSgnI3NlbGVjdDEgb3B0aW9uOmxhc3QnKS50ZXh0KCksICJUZXN0IiwgIkFw
cGVuZGluZyAmbHQ7T1BUSU9OJmd0OyAoYWxsIGNhcHMpIiApOworCisJalF1ZXJ5KCcjdGFibGUn
KS5hcHBlbmQodmFsdWVPYmooICc8Y29sZ3JvdXA+PC9jb2xncm91cD4nICkpOworCW9rKCBqUXVl
cnkoJyN0YWJsZSBjb2xncm91cCcpLmxlbmd0aCwgIkFwcGVuZCBjb2xncm91cCIgKTsKKworCWpR
dWVyeSgnI3RhYmxlIGNvbGdyb3VwJykuYXBwZW5kKHZhbHVlT2JqKCAnPGNvbC8+JyApKTsKKwlv
ayggalF1ZXJ5KCcjdGFibGUgY29sZ3JvdXAgY29sJykubGVuZ3RoLCAiQXBwZW5kIGNvbCIgKTsK
KworCVFVbml0LnJlc2V0KCk7CisJalF1ZXJ5KCcjdGFibGUnKS5hcHBlbmQodmFsdWVPYmooICc8
Y2FwdGlvbj48L2NhcHRpb24+JyApKTsKKwlvayggalF1ZXJ5KCcjdGFibGUgY2FwdGlvbicpLmxl
bmd0aCwgIkFwcGVuZCBjYXB0aW9uIiApOworCisJUVVuaXQucmVzZXQoKTsKKwlqUXVlcnkoJ2Zv
cm06bGFzdCcpCisJCS5hcHBlbmQodmFsdWVPYmooICc8c2VsZWN0IGlkPSJhcHBlbmRTZWxlY3Qx
Ij48L3NlbGVjdD4nICkpCisJCS5hcHBlbmQodmFsdWVPYmooICc8c2VsZWN0IGlkPSJhcHBlbmRT
ZWxlY3QyIj48b3B0aW9uPlRlc3Q8L29wdGlvbj48L3NlbGVjdD4nICkpOworCisJdCggIkFwcGVu
ZCBTZWxlY3QiLCAiI2FwcGVuZFNlbGVjdDEsICNhcHBlbmRTZWxlY3QyIiwgWyJhcHBlbmRTZWxl
Y3QxIiwgImFwcGVuZFNlbGVjdDIiXSApOworCisJZXF1YWxzKCAiVHdvIG5vZGVzIiwgalF1ZXJ5
KCc8ZGl2IC8+JykuYXBwZW5kKCJUd28iLCAiIG5vZGVzIikudGV4dCgpLCAiQXBwZW5kaW5nIHR3
byB0ZXh0IG5vZGVzICgjNDAxMSkiICk7CisKKwkvLyB1c2luZyBjb250ZW50cyB3aWxsIGdldCBj
b21tZW50cyByZWd1bGFyLCB0ZXh0LCBhbmQgY29tbWVudCBub2RlcworCXZhciBqID0galF1ZXJ5
KCIjbm9ubm9kZXMiKS5jb250ZW50cygpOworCXZhciBkID0galF1ZXJ5KCI8ZGl2Lz4iKS5hcHBl
bmRUbygiI25vbm5vZGVzIikuYXBwZW5kKGopOworCWVxdWFscyggalF1ZXJ5KCIjbm9ubm9kZXMi
KS5sZW5ndGgsIDEsICJDaGVjayBub2RlLHRleHRub2RlLGNvbW1lbnQgYXBwZW5kIG1vdmVkIGxl
YXZpbmcganVzdCB0aGUgZGl2IiApOworCW9rKCBkLmNvbnRlbnRzKCkubGVuZ3RoID49IDIsICJD
aGVjayBub2RlLHRleHRub2RlLGNvbW1lbnQgYXBwZW5kIHdvcmtzIiApOworCWQuY29udGVudHMo
KS5hcHBlbmRUbygiI25vbm5vZGVzIik7CisJZC5yZW1vdmUoKTsKKwlvayggalF1ZXJ5KCIjbm9u
bm9kZXMiKS5jb250ZW50cygpLmxlbmd0aCA+PSAyLCAiQ2hlY2sgbm9kZSx0ZXh0bm9kZSxjb21t
ZW50IGFwcGVuZCBjbGVhbnVwIHdvcmtlZCIgKTsKK30KKwordGVzdCgiYXBwZW5kKFN0cmluZ3xF
bGVtZW50fEFycmF5Jmx0O0VsZW1lbnQmZ3Q7fGpRdWVyeSkiLCBmdW5jdGlvbigpIHsKKwl0ZXN0
QXBwZW5kKGJhcmVPYmopOworfSk7CisKK3Rlc3QoImFwcGVuZChGdW5jdGlvbikiLCBmdW5jdGlv
bigpIHsKKwl0ZXN0QXBwZW5kKGZ1bmN0aW9uUmV0dXJuaW5nT2JqKTsKK30pOworCit0ZXN0KCJh
cHBlbmQoRnVuY3Rpb24pIHdpdGggaW5jb21pbmcgdmFsdWUiLCBmdW5jdGlvbigpIHsKKwlleHBl
Y3QoMTIpOworCisJdmFyIGRlZmF1bHRUZXh0ID0gJ1RyeSB0aGVtIG91dDonLCBvbGQgPSBqUXVl
cnkoIiNmaXJzdCIpLmh0bWwoKTsKKworCXZhciByZXN1bHQgPSBqUXVlcnkoJyNmaXJzdCcpLmFw
cGVuZChmdW5jdGlvbihpLCB2YWwpeworCQllcXVhbHMoIHZhbCwgb2xkLCAiTWFrZSBzdXJlIHRo
ZSBpbmNvbWluZyB2YWx1ZSBpcyBjb3JyZWN0LiIgKTsKKwkJcmV0dXJuICc8Yj5idWdhPC9iPic7
CisJfSk7CisJZXF1YWxzKCByZXN1bHQudGV4dCgpLCBkZWZhdWx0VGV4dCArICdidWdhJywgJ0No
ZWNrIGlmIHRleHQgYXBwZW5kaW5nIHdvcmtzJyApOworCisJdmFyIHNlbGVjdCA9IGpRdWVyeSgn
I3NlbGVjdDMnKTsKKwlvbGQgPSBzZWxlY3QuaHRtbCgpOworCisJZXF1YWxzKCBzZWxlY3QuYXBw
ZW5kKGZ1bmN0aW9uKGksIHZhbCl7CisJCWVxdWFscyggdmFsLCBvbGQsICJNYWtlIHN1cmUgdGhl
IGluY29taW5nIHZhbHVlIGlzIGNvcnJlY3QuIiApOworCQlyZXR1cm4gJzxvcHRpb24gdmFsdWU9
ImFwcGVuZFRlc3QiPkFwcGVuZCBUZXN0PC9vcHRpb24+JzsKKwl9KS5maW5kKCdvcHRpb246bGFz
dC1jaGlsZCcpLmF0dHIoJ3ZhbHVlJyksICdhcHBlbmRUZXN0JywgJ0FwcGVuZGluZyBodG1sIG9w
dGlvbnMgdG8gc2VsZWN0IGVsZW1lbnQnKTsKKworCVFVbml0LnJlc2V0KCk7CisJdmFyIGV4cGVj
dGVkID0gIlRoaXMgbGluayBoYXMgY2xhc3M9XCJibG9nXCI6IFNpbW9uIFdpbGxpc29uJ3MgV2Vi
bG9nVHJ5IHRoZW0gb3V0OiI7CisJb2xkID0galF1ZXJ5KCIjc2FwIikuaHRtbCgpOworCisJalF1
ZXJ5KCcjc2FwJykuYXBwZW5kKGZ1bmN0aW9uKGksIHZhbCl7CisJCWVxdWFscyggdmFsLCBvbGQs
ICJNYWtlIHN1cmUgdGhlIGluY29taW5nIHZhbHVlIGlzIGNvcnJlY3QuIiApOworCQlyZXR1cm4g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpcnN0Jyk7CisJfSk7CisJZXF1YWxzKCBqUXVlcnko
JyNzYXAnKS50ZXh0KCksIGV4cGVjdGVkLCAiQ2hlY2sgZm9yIGFwcGVuZGluZyBvZiBlbGVtZW50
IiApOworCisJUVVuaXQucmVzZXQoKTsKKwlleHBlY3RlZCA9ICJUaGlzIGxpbmsgaGFzIGNsYXNz
PVwiYmxvZ1wiOiBTaW1vbiBXaWxsaXNvbidzIFdlYmxvZ1RyeSB0aGVtIG91dDpZYWhvbyI7CisJ
b2xkID0galF1ZXJ5KCIjc2FwIikuaHRtbCgpOworCisJalF1ZXJ5KCcjc2FwJykuYXBwZW5kKGZ1
bmN0aW9uKGksIHZhbCl7CisJCWVxdWFscyggdmFsLCBvbGQsICJNYWtlIHN1cmUgdGhlIGluY29t
aW5nIHZhbHVlIGlzIGNvcnJlY3QuIiApOworCQlyZXR1cm4gW2RvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdmaXJzdCcpLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneWFob28nKV07CisJfSk7CisJ
ZXF1YWxzKCBqUXVlcnkoJyNzYXAnKS50ZXh0KCksIGV4cGVjdGVkLCAiQ2hlY2sgZm9yIGFwcGVu
ZGluZyBvZiBhcnJheSBvZiBlbGVtZW50cyIgKTsKKworCVFVbml0LnJlc2V0KCk7CisJZXhwZWN0
ZWQgPSAiVGhpcyBsaW5rIGhhcyBjbGFzcz1cImJsb2dcIjogU2ltb24gV2lsbGlzb24ncyBXZWJs
b2dZYWhvb1RyeSB0aGVtIG91dDoiOworCW9sZCA9IGpRdWVyeSgiI3NhcCIpLmh0bWwoKTsKKwor
CWpRdWVyeSgnI3NhcCcpLmFwcGVuZChmdW5jdGlvbihpLCB2YWwpeworCQllcXVhbHMoIHZhbCwg
b2xkLCAiTWFrZSBzdXJlIHRoZSBpbmNvbWluZyB2YWx1ZSBpcyBjb3JyZWN0LiIgKTsKKwkJcmV0
dXJuIGpRdWVyeSgiI3lhaG9vLCAjZmlyc3QiKTsKKwl9KTsKKwllcXVhbHMoIGpRdWVyeSgnI3Nh
cCcpLnRleHQoKSwgZXhwZWN0ZWQsICJDaGVjayBmb3IgYXBwZW5kaW5nIG9mIGpRdWVyeSBvYmpl
Y3QiICk7CisKKwlRVW5pdC5yZXNldCgpOworCW9sZCA9IGpRdWVyeSgiI3NhcCIpLmh0bWwoKTsK
KworCWpRdWVyeSgiI3NhcCIpLmFwcGVuZChmdW5jdGlvbihpLCB2YWwpeworCQllcXVhbHMoIHZh
bCwgb2xkLCAiTWFrZSBzdXJlIHRoZSBpbmNvbWluZyB2YWx1ZSBpcyBjb3JyZWN0LiIgKTsKKwkJ
cmV0dXJuIDU7CisJfSk7CisJb2soIGpRdWVyeSgiI3NhcCIpWzBdLmlubmVySFRNTC5tYXRjaCgg
LzUkLyApLCAiQ2hlY2sgZm9yIGFwcGVuZGluZyBhIG51bWJlciIgKTsKKworCVFVbml0LnJlc2V0
KCk7Cit9KTsKKwordGVzdCgiYXBwZW5kIHRoZSBzYW1lIGZyYWdtZW50IHdpdGggZXZlbnRzIChC
dWcgIzY5OTcsIDU1NjYpIiwgZnVuY3Rpb24gKCkgeworCXZhciBkb0V4dHJhID0gIWpRdWVyeS5z
dXBwb3J0Lm5vQ2xvbmVFdmVudCAmJiBkb2N1bWVudC5maXJlRXZlbnQ7CisJZXhwZWN0KDIgKyAo
ZG9FeHRyYSA/IDEgOiAwKSk7CisJc3RvcCgxMDAwKTsKKworCXZhciBlbGVtZW50OworCisJLy8g
VGhpcyBwYXRjaCBtb2RpZmllZCB0aGUgd2F5IHRoYXQgY2xvbmluZyBvY2N1cnMgaW4gSUU7IHdl
IG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQKKwkvLyBuYXRpdmUgZXZlbnQgaGFuZGxlcnMgb24gdGhl
IG9yaWdpbmFsIG9iamVjdCBkb24ndCBnZXQgZGlzdHVyYmVkIHdoZW4gdGhleSBhcmUKKwkvLyBt
b2RpZmllZCBvbiB0aGUgY2xvbmUKKwlpZiAoIGRvRXh0cmEgKSB7CisJCWVsZW1lbnQgPSBqUXVl
cnkoImRpdjpmaXJzdCIpLmNsaWNrKGZ1bmN0aW9uICgpIHsKKwkJCW9rKHRydWUsICJFdmVudCBl
eGlzdHMgb24gb3JpZ2luYWwgYWZ0ZXIgYmVpbmcgdW5ib3VuZCBvbiBjbG9uZSIpOworCQkJalF1
ZXJ5KHRoaXMpLnVuYmluZCgnY2xpY2snKTsKKwkJfSk7CisJCXZhciBjbG9uZSA9IGVsZW1lbnQu
Y2xvbmUodHJ1ZSkudW5iaW5kKCdjbGljaycpOworCQljbG9uZVswXS5maXJlRXZlbnQoJ29uY2xp
Y2snKTsKKwkJZWxlbWVudFswXS5maXJlRXZlbnQoJ29uY2xpY2snKTsKKworCQkvLyBtYW51YWxs
eSBjbGVhbiB1cCBkZXRhY2hlZCBlbGVtZW50cworCQljbG9uZS5yZW1vdmUoKTsKKwl9CisKKwll
bGVtZW50ID0galF1ZXJ5KCI8YSBjbGFzcz0ndGVzdDY5OTcnPjwvYT4iKS5jbGljayhmdW5jdGlv
biAoKSB7CisJCW9rKHRydWUsICJBcHBlbmQgc2Vjb25kIGVsZW1lbnQgZXZlbnRzIHdvcmsiKTsK
Kwl9KTsKKworCWpRdWVyeSgiI2xpc3RXaXRoVGFiSW5kZXggbGkiKS5hcHBlbmQoZWxlbWVudCkK
KwkJLmZpbmQoJ2EudGVzdDY5OTcnKS5lcSgxKS5jbGljaygpOworCisJZWxlbWVudCA9IGpRdWVy
eSgiPGxpIGNsYXNzPSd0ZXN0Njk5Nyc+PC9saT4iKS5jbGljayhmdW5jdGlvbiAoKSB7CisJCW9r
KHRydWUsICJCZWZvcmUgc2Vjb25kIGVsZW1lbnQgZXZlbnRzIHdvcmsiKTsKKwkJc3RhcnQoKTsK
Kwl9KTsKKworCWpRdWVyeSgiI2xpc3RXaXRoVGFiSW5kZXggbGkiKS5iZWZvcmUoZWxlbWVudCk7
CisJalF1ZXJ5KCIjbGlzdFdpdGhUYWJJbmRleCBsaS50ZXN0Njk5NyIpLmVxKDEpLmNsaWNrKCk7
Cit9KTsKKwordGVzdCgiYXBwZW5kVG8oU3RyaW5nfEVsZW1lbnR8QXJyYXkmbHQ7RWxlbWVudCZn
dDt8alF1ZXJ5KSIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgxNik7CisKKwl2YXIgZGVmYXVsdFRl
eHQgPSAnVHJ5IHRoZW0gb3V0OicKKwlqUXVlcnkoJzxiPmJ1Z2E8L2I+JykuYXBwZW5kVG8oJyNm
aXJzdCcpOworCWVxdWFscyggalF1ZXJ5KCIjZmlyc3QiKS50ZXh0KCksIGRlZmF1bHRUZXh0ICsg
J2J1Z2EnLCAnQ2hlY2sgaWYgdGV4dCBhcHBlbmRpbmcgd29ya3MnICk7CisJZXF1YWxzKCBqUXVl
cnkoJzxvcHRpb24gdmFsdWU9ImFwcGVuZFRlc3QiPkFwcGVuZCBUZXN0PC9vcHRpb24+JykuYXBw
ZW5kVG8oJyNzZWxlY3QzJykucGFyZW50KCkuZmluZCgnb3B0aW9uOmxhc3QtY2hpbGQnKS5hdHRy
KCd2YWx1ZScpLCAnYXBwZW5kVGVzdCcsICdBcHBlbmRpbmcgaHRtbCBvcHRpb25zIHRvIHNlbGVj
dCBlbGVtZW50Jyk7CisKKwlRVW5pdC5yZXNldCgpOworCXZhciBsID0galF1ZXJ5KCIjZmlyc3Qi
KS5jaGlsZHJlbigpLmxlbmd0aCArIDI7CisJalF1ZXJ5KCI8c3Ryb25nPnRlc3Q8L3N0cm9uZz4i
KTsKKwlqUXVlcnkoIjxzdHJvbmc+dGVzdDwvc3Ryb25nPiIpOworCWpRdWVyeShbIGpRdWVyeSgi
PHN0cm9uZz50ZXN0PC9zdHJvbmc+IilbMF0sIGpRdWVyeSgiPHN0cm9uZz50ZXN0PC9zdHJvbmc+
IilbMF0gXSkKKwkJLmFwcGVuZFRvKCIjZmlyc3QiKTsKKwllcXVhbHMoIGpRdWVyeSgiI2ZpcnN0
IikuY2hpbGRyZW4oKS5sZW5ndGgsIGwsICJNYWtlIHN1cmUgdGhlIGVsZW1lbnRzIHdlcmUgaW5z
ZXJ0ZWQuIiApOworCWVxdWFscyggalF1ZXJ5KCIjZmlyc3QiKS5jaGlsZHJlbigpLmxhc3QoKVsw
XS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCAic3Ryb25nIiwgIlZlcmlmeSB0aGUgbGFzdCBlbGVt
ZW50LiIgKTsKKworCVFVbml0LnJlc2V0KCk7CisJdmFyIGV4cGVjdGVkID0gIlRoaXMgbGluayBo
YXMgY2xhc3M9XCJibG9nXCI6IFNpbW9uIFdpbGxpc29uJ3MgV2VibG9nVHJ5IHRoZW0gb3V0OiI7
CisJalF1ZXJ5KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaXJzdCcpKS5hcHBlbmRUbygnI3Nh
cCcpOworCWVxdWFscyggalF1ZXJ5KCcjc2FwJykudGV4dCgpLCBleHBlY3RlZCwgIkNoZWNrIGZv
ciBhcHBlbmRpbmcgb2YgZWxlbWVudCIgKTsKKworCVFVbml0LnJlc2V0KCk7CisJZXhwZWN0ZWQg
PSAiVGhpcyBsaW5rIGhhcyBjbGFzcz1cImJsb2dcIjogU2ltb24gV2lsbGlzb24ncyBXZWJsb2dU
cnkgdGhlbSBvdXQ6WWFob28iOworCWpRdWVyeShbZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zp
cnN0JyksIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd5YWhvbycpXSkuYXBwZW5kVG8oJyNzYXAn
KTsKKwllcXVhbHMoIGpRdWVyeSgnI3NhcCcpLnRleHQoKSwgZXhwZWN0ZWQsICJDaGVjayBmb3Ig
YXBwZW5kaW5nIG9mIGFycmF5IG9mIGVsZW1lbnRzIiApOworCisJUVVuaXQucmVzZXQoKTsKKwlv
ayggalF1ZXJ5KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpKS5hcHBlbmRUbygiYm9k
eSIpLmxlbmd0aCwgIk1ha2Ugc3VyZSBhIGRpc2Nvbm5lY3RlZCBzY3JpcHQgY2FuIGJlIGFwcGVu
ZGVkLiIgKTsKKworCVFVbml0LnJlc2V0KCk7CisJZXhwZWN0ZWQgPSAiVGhpcyBsaW5rIGhhcyBj
bGFzcz1cImJsb2dcIjogU2ltb24gV2lsbGlzb24ncyBXZWJsb2dZYWhvb1RyeSB0aGVtIG91dDoi
OworCWpRdWVyeSgiI3lhaG9vLCAjZmlyc3QiKS5hcHBlbmRUbygnI3NhcCcpOworCWVxdWFscygg
alF1ZXJ5KCcjc2FwJykudGV4dCgpLCBleHBlY3RlZCwgIkNoZWNrIGZvciBhcHBlbmRpbmcgb2Yg
alF1ZXJ5IG9iamVjdCIgKTsKKworCVFVbml0LnJlc2V0KCk7CisJalF1ZXJ5KCcjc2VsZWN0MScp
LmFwcGVuZFRvKCcjZm9vJyk7CisJdCggJ0FwcGVuZCBzZWxlY3QnLCAnI2ZvbyBzZWxlY3QnLCBb
J3NlbGVjdDEnXSApOworCisJUVVuaXQucmVzZXQoKTsKKwl2YXIgZGl2ID0galF1ZXJ5KCI8ZGl2
Lz4iKS5jbGljayhmdW5jdGlvbigpeworCQlvayh0cnVlLCAiUnVubmluZyBhIGNsb25lZCBjbGlj
ay4iKTsKKwl9KTsKKwlkaXYuYXBwZW5kVG8oIiNtYWluLCAjbW9yZXRlc3RzIik7CisKKwlqUXVl
cnkoIiNtYWluIGRpdjpsYXN0IikuY2xpY2soKTsKKwlqUXVlcnkoIiNtb3JldGVzdHMgZGl2Omxh
c3QiKS5jbGljaygpOworCisJUVVuaXQucmVzZXQoKTsKKwl2YXIgZGl2ID0galF1ZXJ5KCI8ZGl2
Lz4iKS5hcHBlbmRUbygiI21haW4sICNtb3JldGVzdHMiKTsKKworCWVxdWFscyggZGl2Lmxlbmd0
aCwgMiwgImFwcGVuZFRvIHJldHVybnMgdGhlIGluc2VydGVkIGVsZW1lbnRzIiApOworCisJZGl2
LmFkZENsYXNzKCJ0ZXN0Iik7CisKKwlvayggalF1ZXJ5KCIjbWFpbiBkaXY6bGFzdCIpLmhhc0Ns
YXNzKCJ0ZXN0IiksICJhcHBlbmRUbyBlbGVtZW50IHdhcyBtb2RpZmllZCBhZnRlciB0aGUgaW5z
ZXJ0aW9uIiApOworCW9rKCBqUXVlcnkoIiNtb3JldGVzdHMgZGl2Omxhc3QiKS5oYXNDbGFzcygi
dGVzdCIpLCAiYXBwZW5kVG8gZWxlbWVudCB3YXMgbW9kaWZpZWQgYWZ0ZXIgdGhlIGluc2VydGlv
biIgKTsKKworCVFVbml0LnJlc2V0KCk7CisKKwlkaXYgPSBqUXVlcnkoIjxkaXYvPiIpOworCWpR
dWVyeSgiPHNwYW4+YTwvc3Bhbj48Yj5iPC9iPiIpLmZpbHRlcigic3BhbiIpLmFwcGVuZFRvKCBk
aXYgKTsKKworCWVxdWFscyggZGl2LmNoaWxkcmVuKCkubGVuZ3RoLCAxLCAiTWFrZSBzdXJlIHRo
ZSByaWdodCBudW1iZXIgb2YgY2hpbGRyZW4gd2VyZSBpbnNlcnRlZC4iICk7CisKKwlkaXYgPSBq
UXVlcnkoIiNtb3JldGVzdHMgZGl2Iik7CisKKwl2YXIgbnVtID0galF1ZXJ5KCIjbWFpbiBkaXYi
KS5sZW5ndGg7CisJZGl2LnJlbW92ZSgpLmFwcGVuZFRvKCIjbWFpbiIpOworCisJZXF1YWxzKCBq
UXVlcnkoIiNtYWluIGRpdiIpLmxlbmd0aCwgbnVtLCAiTWFrZSBzdXJlIGFsbCB0aGUgcmVtb3Zl
ZCBkaXZzIHdlcmUgaW5zZXJ0ZWQuIiApOworCisJUVVuaXQucmVzZXQoKTsKK30pOworCit2YXIg
dGVzdFByZXBlbmQgPSBmdW5jdGlvbih2YWwpIHsKKwlleHBlY3QoNSk7CisJdmFyIGRlZmF1bHRU
ZXh0ID0gJ1RyeSB0aGVtIG91dDonCisJdmFyIHJlc3VsdCA9IGpRdWVyeSgnI2ZpcnN0JykucHJl
cGVuZCh2YWwoICc8Yj5idWdhPC9iPicgKSk7CisJZXF1YWxzKCByZXN1bHQudGV4dCgpLCAnYnVn
YScgKyBkZWZhdWx0VGV4dCwgJ0NoZWNrIGlmIHRleHQgcHJlcGVuZGluZyB3b3JrcycgKTsKKwll
cXVhbHMoIGpRdWVyeSgnI3NlbGVjdDMnKS5wcmVwZW5kKHZhbCggJzxvcHRpb24gdmFsdWU9InBy
ZXBlbmRUZXN0Ij5QcmVwZW5kIFRlc3Q8L29wdGlvbj4nICkpLmZpbmQoJ29wdGlvbjpmaXJzdC1j
aGlsZCcpLmF0dHIoJ3ZhbHVlJyksICdwcmVwZW5kVGVzdCcsICdQcmVwZW5kaW5nIGh0bWwgb3B0
aW9ucyB0byBzZWxlY3QgZWxlbWVudCcpOworCisJUVVuaXQucmVzZXQoKTsKKwl2YXIgZXhwZWN0
ZWQgPSAiVHJ5IHRoZW0gb3V0OlRoaXMgbGluayBoYXMgY2xhc3M9XCJibG9nXCI6IFNpbW9uIFdp
bGxpc29uJ3MgV2VibG9nIjsKKwlqUXVlcnkoJyNzYXAnKS5wcmVwZW5kKHZhbCggZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2ZpcnN0JykgKSk7CisJZXF1YWxzKCBqUXVlcnkoJyNzYXAnKS50ZXh0
KCksIGV4cGVjdGVkLCAiQ2hlY2sgZm9yIHByZXBlbmRpbmcgb2YgZWxlbWVudCIgKTsKKworCVFV
bml0LnJlc2V0KCk7CisJZXhwZWN0ZWQgPSAiVHJ5IHRoZW0gb3V0OllhaG9vVGhpcyBsaW5rIGhh
cyBjbGFzcz1cImJsb2dcIjogU2ltb24gV2lsbGlzb24ncyBXZWJsb2ciOworCWpRdWVyeSgnI3Nh
cCcpLnByZXBlbmQodmFsKCBbZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpcnN0JyksIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCd5YWhvbycpXSApKTsKKwllcXVhbHMoIGpRdWVyeSgnI3NhcCcp
LnRleHQoKSwgZXhwZWN0ZWQsICJDaGVjayBmb3IgcHJlcGVuZGluZyBvZiBhcnJheSBvZiBlbGVt
ZW50cyIgKTsKKworCVFVbml0LnJlc2V0KCk7CisJZXhwZWN0ZWQgPSAiWWFob29UcnkgdGhlbSBv
dXQ6VGhpcyBsaW5rIGhhcyBjbGFzcz1cImJsb2dcIjogU2ltb24gV2lsbGlzb24ncyBXZWJsb2ci
OworCWpRdWVyeSgnI3NhcCcpLnByZXBlbmQodmFsKCBqUXVlcnkoIiN5YWhvbywgI2ZpcnN0Iikg
KSk7CisJZXF1YWxzKCBqUXVlcnkoJyNzYXAnKS50ZXh0KCksIGV4cGVjdGVkLCAiQ2hlY2sgZm9y
IHByZXBlbmRpbmcgb2YgalF1ZXJ5IG9iamVjdCIgKTsKK307CisKK3Rlc3QoInByZXBlbmQoU3Ry
aW5nfEVsZW1lbnR8QXJyYXkmbHQ7RWxlbWVudCZndDt8alF1ZXJ5KSIsIGZ1bmN0aW9uKCkgewor
CXRlc3RQcmVwZW5kKGJhcmVPYmopOworfSk7CisKK3Rlc3QoInByZXBlbmQoRnVuY3Rpb24pIiwg
ZnVuY3Rpb24oKSB7CisJdGVzdFByZXBlbmQoZnVuY3Rpb25SZXR1cm5pbmdPYmopOworfSk7CisK
K3Rlc3QoInByZXBlbmQoRnVuY3Rpb24pIHdpdGggaW5jb21pbmcgdmFsdWUiLCBmdW5jdGlvbigp
IHsKKwlleHBlY3QoMTApOworCisJdmFyIGRlZmF1bHRUZXh0ID0gJ1RyeSB0aGVtIG91dDonLCBv
bGQgPSBqUXVlcnkoJyNmaXJzdCcpLmh0bWwoKTsKKwl2YXIgcmVzdWx0ID0galF1ZXJ5KCcjZmly
c3QnKS5wcmVwZW5kKGZ1bmN0aW9uKGksIHZhbCkgeworCQllcXVhbHMoIHZhbCwgb2xkLCAiTWFr
ZSBzdXJlIHRoZSBpbmNvbWluZyB2YWx1ZSBpcyBjb3JyZWN0LiIgKTsKKwkJcmV0dXJuICc8Yj5i
dWdhPC9iPic7CisJfSk7CisJZXF1YWxzKCByZXN1bHQudGV4dCgpLCAnYnVnYScgKyBkZWZhdWx0
VGV4dCwgJ0NoZWNrIGlmIHRleHQgcHJlcGVuZGluZyB3b3JrcycgKTsKKworCW9sZCA9IGpRdWVy
eSgiI3NlbGVjdDMiKS5odG1sKCk7CisKKwllcXVhbHMoIGpRdWVyeSgnI3NlbGVjdDMnKS5wcmVw
ZW5kKGZ1bmN0aW9uKGksIHZhbCkgeworCQllcXVhbHMoIHZhbCwgb2xkLCAiTWFrZSBzdXJlIHRo
ZSBpbmNvbWluZyB2YWx1ZSBpcyBjb3JyZWN0LiIgKTsKKwkJcmV0dXJuICc8b3B0aW9uIHZhbHVl
PSJwcmVwZW5kVGVzdCI+UHJlcGVuZCBUZXN0PC9vcHRpb24+JzsKKwl9KS5maW5kKCdvcHRpb246
Zmlyc3QtY2hpbGQnKS5hdHRyKCd2YWx1ZScpLCAncHJlcGVuZFRlc3QnLCAnUHJlcGVuZGluZyBo
dG1sIG9wdGlvbnMgdG8gc2VsZWN0IGVsZW1lbnQnKTsKKworCVFVbml0LnJlc2V0KCk7CisJdmFy
IGV4cGVjdGVkID0gIlRyeSB0aGVtIG91dDpUaGlzIGxpbmsgaGFzIGNsYXNzPVwiYmxvZ1wiOiBT
aW1vbiBXaWxsaXNvbidzIFdlYmxvZyI7CisJb2xkID0galF1ZXJ5KCcjc2FwJykuaHRtbCgpOwor
CisJalF1ZXJ5KCcjc2FwJykucHJlcGVuZChmdW5jdGlvbihpLCB2YWwpIHsKKwkJZXF1YWxzKCB2
YWwsIG9sZCwgIk1ha2Ugc3VyZSB0aGUgaW5jb21pbmcgdmFsdWUgaXMgY29ycmVjdC4iICk7CisJ
CXJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlyc3QnKTsKKwl9KTsKKworCWVxdWFs
cyggalF1ZXJ5KCcjc2FwJykudGV4dCgpLCBleHBlY3RlZCwgIkNoZWNrIGZvciBwcmVwZW5kaW5n
IG9mIGVsZW1lbnQiICk7CisKKwlRVW5pdC5yZXNldCgpOworCWV4cGVjdGVkID0gIlRyeSB0aGVt
IG91dDpZYWhvb1RoaXMgbGluayBoYXMgY2xhc3M9XCJibG9nXCI6IFNpbW9uIFdpbGxpc29uJ3Mg
V2VibG9nIjsKKwlvbGQgPSBqUXVlcnkoJyNzYXAnKS5odG1sKCk7CisKKwlqUXVlcnkoJyNzYXAn
KS5wcmVwZW5kKGZ1bmN0aW9uKGksIHZhbCkgeworCQllcXVhbHMoIHZhbCwgb2xkLCAiTWFrZSBz
dXJlIHRoZSBpbmNvbWluZyB2YWx1ZSBpcyBjb3JyZWN0LiIgKTsKKwkJcmV0dXJuIFtkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnZmlyc3QnKSwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3lhaG9v
JyldOworCX0pOworCisJZXF1YWxzKCBqUXVlcnkoJyNzYXAnKS50ZXh0KCksIGV4cGVjdGVkLCAi
Q2hlY2sgZm9yIHByZXBlbmRpbmcgb2YgYXJyYXkgb2YgZWxlbWVudHMiICk7CisKKwlRVW5pdC5y
ZXNldCgpOworCWV4cGVjdGVkID0gIllhaG9vVHJ5IHRoZW0gb3V0OlRoaXMgbGluayBoYXMgY2xh
c3M9XCJibG9nXCI6IFNpbW9uIFdpbGxpc29uJ3MgV2VibG9nIjsKKwlvbGQgPSBqUXVlcnkoJyNz
YXAnKS5odG1sKCk7CisKKwlqUXVlcnkoJyNzYXAnKS5wcmVwZW5kKGZ1bmN0aW9uKGksIHZhbCkg
eworCQllcXVhbHMoIHZhbCwgb2xkLCAiTWFrZSBzdXJlIHRoZSBpbmNvbWluZyB2YWx1ZSBpcyBj
b3JyZWN0LiIgKTsKKwkJcmV0dXJuIGpRdWVyeSgiI3lhaG9vLCAjZmlyc3QiKTsKKwl9KTsKKwor
CWVxdWFscyggalF1ZXJ5KCcjc2FwJykudGV4dCgpLCBleHBlY3RlZCwgIkNoZWNrIGZvciBwcmVw
ZW5kaW5nIG9mIGpRdWVyeSBvYmplY3QiICk7Cit9KTsKKwordGVzdCgicHJlcGVuZFRvKFN0cmlu
Z3xFbGVtZW50fEFycmF5Jmx0O0VsZW1lbnQmZ3Q7fGpRdWVyeSkiLCBmdW5jdGlvbigpIHsKKwll
eHBlY3QoNik7CisJdmFyIGRlZmF1bHRUZXh0ID0gJ1RyeSB0aGVtIG91dDonCisJalF1ZXJ5KCc8
Yj5idWdhPC9iPicpLnByZXBlbmRUbygnI2ZpcnN0Jyk7CisJZXF1YWxzKCBqUXVlcnkoJyNmaXJz
dCcpLnRleHQoKSwgJ2J1Z2EnICsgZGVmYXVsdFRleHQsICdDaGVjayBpZiB0ZXh0IHByZXBlbmRp
bmcgd29ya3MnICk7CisJZXF1YWxzKCBqUXVlcnkoJzxvcHRpb24gdmFsdWU9InByZXBlbmRUZXN0
Ij5QcmVwZW5kIFRlc3Q8L29wdGlvbj4nKS5wcmVwZW5kVG8oJyNzZWxlY3QzJykucGFyZW50KCku
ZmluZCgnb3B0aW9uOmZpcnN0LWNoaWxkJykuYXR0cigndmFsdWUnKSwgJ3ByZXBlbmRUZXN0Jywg
J1ByZXBlbmRpbmcgaHRtbCBvcHRpb25zIHRvIHNlbGVjdCBlbGVtZW50Jyk7CisKKwlRVW5pdC5y
ZXNldCgpOworCXZhciBleHBlY3RlZCA9ICJUcnkgdGhlbSBvdXQ6VGhpcyBsaW5rIGhhcyBjbGFz
cz1cImJsb2dcIjogU2ltb24gV2lsbGlzb24ncyBXZWJsb2ciOworCWpRdWVyeShkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnZmlyc3QnKSkucHJlcGVuZFRvKCcjc2FwJyk7CisJZXF1YWxzKCBqUXVl
cnkoJyNzYXAnKS50ZXh0KCksIGV4cGVjdGVkLCAiQ2hlY2sgZm9yIHByZXBlbmRpbmcgb2YgZWxl
bWVudCIgKTsKKworCVFVbml0LnJlc2V0KCk7CisJZXhwZWN0ZWQgPSAiVHJ5IHRoZW0gb3V0Ollh
aG9vVGhpcyBsaW5rIGhhcyBjbGFzcz1cImJsb2dcIjogU2ltb24gV2lsbGlzb24ncyBXZWJsb2ci
OworCWpRdWVyeShbZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpcnN0JyksIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCd5YWhvbycpXSkucHJlcGVuZFRvKCcjc2FwJyk7CisJZXF1YWxzKCBqUXVl
cnkoJyNzYXAnKS50ZXh0KCksIGV4cGVjdGVkLCAiQ2hlY2sgZm9yIHByZXBlbmRpbmcgb2YgYXJy
YXkgb2YgZWxlbWVudHMiICk7CisKKwlRVW5pdC5yZXNldCgpOworCWV4cGVjdGVkID0gIllhaG9v
VHJ5IHRoZW0gb3V0OlRoaXMgbGluayBoYXMgY2xhc3M9XCJibG9nXCI6IFNpbW9uIFdpbGxpc29u
J3MgV2VibG9nIjsKKwlqUXVlcnkoIiN5YWhvbywgI2ZpcnN0IikucHJlcGVuZFRvKCcjc2FwJyk7
CisJZXF1YWxzKCBqUXVlcnkoJyNzYXAnKS50ZXh0KCksIGV4cGVjdGVkLCAiQ2hlY2sgZm9yIHBy
ZXBlbmRpbmcgb2YgalF1ZXJ5IG9iamVjdCIgKTsKKworCVFVbml0LnJlc2V0KCk7CisJalF1ZXJ5
KCc8c2VsZWN0IGlkPSJwcmVwZW5kU2VsZWN0MSI+PC9zZWxlY3Q+JykucHJlcGVuZFRvKCdmb3Jt
Omxhc3QnKTsKKwlqUXVlcnkoJzxzZWxlY3QgaWQ9InByZXBlbmRTZWxlY3QyIj48b3B0aW9uPlRl
c3Q8L29wdGlvbj48L3NlbGVjdD4nKS5wcmVwZW5kVG8oJ2Zvcm06bGFzdCcpOworCisJdCggIlBy
ZXBlbmQgU2VsZWN0IiwgIiNwcmVwZW5kU2VsZWN0MiwgI3ByZXBlbmRTZWxlY3QxIiwgWyJwcmVw
ZW5kU2VsZWN0MiIsICJwcmVwZW5kU2VsZWN0MSJdICk7Cit9KTsKKwordmFyIHRlc3RCZWZvcmUg
PSBmdW5jdGlvbih2YWwpIHsKKwlleHBlY3QoNik7CisJdmFyIGV4cGVjdGVkID0gJ1RoaXMgaXMg
YSBub3JtYWwgbGluazogYnVnYVlhaG9vJzsKKwlqUXVlcnkoJyN5YWhvbycpLmJlZm9yZSh2YWwo
ICc8Yj5idWdhPC9iPicgKSk7CisJZXF1YWxzKCBqUXVlcnkoJyNlbicpLnRleHQoKSwgZXhwZWN0
ZWQsICdJbnNlcnQgU3RyaW5nIGJlZm9yZScgKTsKKworCVFVbml0LnJlc2V0KCk7CisJZXhwZWN0
ZWQgPSAiVGhpcyBpcyBhIG5vcm1hbCBsaW5rOiBUcnkgdGhlbSBvdXQ6WWFob28iOworCWpRdWVy
eSgnI3lhaG9vJykuYmVmb3JlKHZhbCggZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpcnN0Jykg
KSk7CisJZXF1YWxzKCBqUXVlcnkoJyNlbicpLnRleHQoKSwgZXhwZWN0ZWQsICJJbnNlcnQgZWxl
bWVudCBiZWZvcmUiICk7CisKKwlRVW5pdC5yZXNldCgpOworCWV4cGVjdGVkID0gIlRoaXMgaXMg
YSBub3JtYWwgbGluazogVHJ5IHRoZW0gb3V0OmRpdmVpbnRvbWFya1lhaG9vIjsKKwlqUXVlcnko
JyN5YWhvbycpLmJlZm9yZSh2YWwoIFtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlyc3QnKSwg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcmsnKV0gKSk7CisJZXF1YWxzKCBqUXVlcnkoJyNl
bicpLnRleHQoKSwgZXhwZWN0ZWQsICJJbnNlcnQgYXJyYXkgb2YgZWxlbWVudHMgYmVmb3JlIiAp
OworCisJUVVuaXQucmVzZXQoKTsKKwlleHBlY3RlZCA9ICJUaGlzIGlzIGEgbm9ybWFsIGxpbms6
IGRpdmVpbnRvbWFya1RyeSB0aGVtIG91dDpZYWhvbyI7CisJalF1ZXJ5KCcjeWFob28nKS5iZWZv
cmUodmFsKCBqUXVlcnkoIiNtYXJrLCAjZmlyc3QiKSApKTsKKwllcXVhbHMoIGpRdWVyeSgnI2Vu
JykudGV4dCgpLCBleHBlY3RlZCwgIkluc2VydCBqUXVlcnkgYmVmb3JlIiApOworCisJdmFyIHNl
dCA9IGpRdWVyeSgiPGRpdi8+IikuYmVmb3JlKCI8c3Bhbj50ZXN0PC9zcGFuPiIpOworCWVxdWFs
cyggc2V0WzBdLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksICJzcGFuIiwgIkluc2VydCB0aGUgZWxl
bWVudCBiZWZvcmUgdGhlIGRpc2Nvbm5lY3RlZCBub2RlLiIgKTsKKwllcXVhbHMoIHNldC5sZW5n
dGgsIDIsICJJbnNlcnQgdGhlIGVsZW1lbnQgYmVmb3JlIHRoZSBkaXNjb25uZWN0ZWQgbm9kZS4i
ICk7Cit9CisKK3Rlc3QoImJlZm9yZShTdHJpbmd8RWxlbWVudHxBcnJheSZsdDtFbGVtZW50Jmd0
O3xqUXVlcnkpIiwgZnVuY3Rpb24oKSB7CisJdGVzdEJlZm9yZShiYXJlT2JqKTsKK30pOworCit0
ZXN0KCJiZWZvcmUoRnVuY3Rpb24pIiwgZnVuY3Rpb24oKSB7CisJdGVzdEJlZm9yZShmdW5jdGlv
blJldHVybmluZ09iaik7Cit9KQorCit0ZXN0KCJpbnNlcnRCZWZvcmUoU3RyaW5nfEVsZW1lbnR8
QXJyYXkmbHQ7RWxlbWVudCZndDt8alF1ZXJ5KSIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCg0KTsK
Kwl2YXIgZXhwZWN0ZWQgPSAnVGhpcyBpcyBhIG5vcm1hbCBsaW5rOiBidWdhWWFob28nOworCWpR
dWVyeSgnPGI+YnVnYTwvYj4nKS5pbnNlcnRCZWZvcmUoJyN5YWhvbycpOworCWVxdWFscyggalF1
ZXJ5KCcjZW4nKS50ZXh0KCksIGV4cGVjdGVkLCAnSW5zZXJ0IFN0cmluZyBiZWZvcmUnICk7CisK
KwlRVW5pdC5yZXNldCgpOworCWV4cGVjdGVkID0gIlRoaXMgaXMgYSBub3JtYWwgbGluazogVHJ5
IHRoZW0gb3V0OllhaG9vIjsKKwlqUXVlcnkoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpcnN0
JykpLmluc2VydEJlZm9yZSgnI3lhaG9vJyk7CisJZXF1YWxzKCBqUXVlcnkoJyNlbicpLnRleHQo
KSwgZXhwZWN0ZWQsICJJbnNlcnQgZWxlbWVudCBiZWZvcmUiICk7CisKKwlRVW5pdC5yZXNldCgp
OworCWV4cGVjdGVkID0gIlRoaXMgaXMgYSBub3JtYWwgbGluazogVHJ5IHRoZW0gb3V0OmRpdmVp
bnRvbWFya1lhaG9vIjsKKwlqUXVlcnkoW2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaXJzdCcp
LCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFyaycpXSkuaW5zZXJ0QmVmb3JlKCcjeWFob28n
KTsKKwllcXVhbHMoIGpRdWVyeSgnI2VuJykudGV4dCgpLCBleHBlY3RlZCwgIkluc2VydCBhcnJh
eSBvZiBlbGVtZW50cyBiZWZvcmUiICk7CisKKwlRVW5pdC5yZXNldCgpOworCWV4cGVjdGVkID0g
IlRoaXMgaXMgYSBub3JtYWwgbGluazogZGl2ZWludG9tYXJrVHJ5IHRoZW0gb3V0OllhaG9vIjsK
KwlqUXVlcnkoIiNtYXJrLCAjZmlyc3QiKS5pbnNlcnRCZWZvcmUoJyN5YWhvbycpOworCWVxdWFs
cyggalF1ZXJ5KCcjZW4nKS50ZXh0KCksIGV4cGVjdGVkLCAiSW5zZXJ0IGpRdWVyeSBiZWZvcmUi
ICk7Cit9KTsKKwordmFyIHRlc3RBZnRlciA9IGZ1bmN0aW9uKHZhbCkgeworCWV4cGVjdCg2KTsK
Kwl2YXIgZXhwZWN0ZWQgPSAnVGhpcyBpcyBhIG5vcm1hbCBsaW5rOiBZYWhvb2J1Z2EnOworCWpR
dWVyeSgnI3lhaG9vJykuYWZ0ZXIodmFsKCAnPGI+YnVnYTwvYj4nICkpOworCWVxdWFscyggalF1
ZXJ5KCcjZW4nKS50ZXh0KCksIGV4cGVjdGVkLCAnSW5zZXJ0IFN0cmluZyBhZnRlcicgKTsKKwor
CVFVbml0LnJlc2V0KCk7CisJZXhwZWN0ZWQgPSAiVGhpcyBpcyBhIG5vcm1hbCBsaW5rOiBZYWhv
b1RyeSB0aGVtIG91dDoiOworCWpRdWVyeSgnI3lhaG9vJykuYWZ0ZXIodmFsKCBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnZmlyc3QnKSApKTsKKwllcXVhbHMoIGpRdWVyeSgnI2VuJykudGV4dCgp
LCBleHBlY3RlZCwgIkluc2VydCBlbGVtZW50IGFmdGVyIiApOworCisJUVVuaXQucmVzZXQoKTsK
KwlleHBlY3RlZCA9ICJUaGlzIGlzIGEgbm9ybWFsIGxpbms6IFlhaG9vVHJ5IHRoZW0gb3V0OmRp
dmVpbnRvbWFyayI7CisJalF1ZXJ5KCcjeWFob28nKS5hZnRlcih2YWwoIFtkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnZmlyc3QnKSwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcmsnKV0gKSk7
CisJZXF1YWxzKCBqUXVlcnkoJyNlbicpLnRleHQoKSwgZXhwZWN0ZWQsICJJbnNlcnQgYXJyYXkg
b2YgZWxlbWVudHMgYWZ0ZXIiICk7CisKKwlRVW5pdC5yZXNldCgpOworCWV4cGVjdGVkID0gIlRo
aXMgaXMgYSBub3JtYWwgbGluazogWWFob29kaXZlaW50b21hcmtUcnkgdGhlbSBvdXQ6IjsKKwlq
UXVlcnkoJyN5YWhvbycpLmFmdGVyKHZhbCggalF1ZXJ5KCIjbWFyaywgI2ZpcnN0IikgKSk7CisJ
ZXF1YWxzKCBqUXVlcnkoJyNlbicpLnRleHQoKSwgZXhwZWN0ZWQsICJJbnNlcnQgalF1ZXJ5IGFm
dGVyIiApOworCisJdmFyIHNldCA9IGpRdWVyeSgiPGRpdi8+IikuYWZ0ZXIoIjxzcGFuPnRlc3Q8
L3NwYW4+Iik7CisJZXF1YWxzKCBzZXRbMV0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwgInNwYW4i
LCAiSW5zZXJ0IHRoZSBlbGVtZW50IGFmdGVyIHRoZSBkaXNjb25uZWN0ZWQgbm9kZS4iICk7CisJ
ZXF1YWxzKCBzZXQubGVuZ3RoLCAyLCAiSW5zZXJ0IHRoZSBlbGVtZW50IGFmdGVyIHRoZSBkaXNj
b25uZWN0ZWQgbm9kZS4iICk7Cit9OworCit0ZXN0KCJhZnRlcihTdHJpbmd8RWxlbWVudHxBcnJh
eSZsdDtFbGVtZW50Jmd0O3xqUXVlcnkpIiwgZnVuY3Rpb24oKSB7CisJdGVzdEFmdGVyKGJhcmVP
YmopOworfSk7CisKK3Rlc3QoImFmdGVyKEZ1bmN0aW9uKSIsIGZ1bmN0aW9uKCkgeworCXRlc3RB
ZnRlcihmdW5jdGlvblJldHVybmluZ09iaik7Cit9KQorCit0ZXN0KCJpbnNlcnRBZnRlcihTdHJp
bmd8RWxlbWVudHxBcnJheSZsdDtFbGVtZW50Jmd0O3xqUXVlcnkpIiwgZnVuY3Rpb24oKSB7CisJ
ZXhwZWN0KDQpOworCXZhciBleHBlY3RlZCA9ICdUaGlzIGlzIGEgbm9ybWFsIGxpbms6IFlhaG9v
YnVnYSc7CisJalF1ZXJ5KCc8Yj5idWdhPC9iPicpLmluc2VydEFmdGVyKCcjeWFob28nKTsKKwll
cXVhbHMoIGpRdWVyeSgnI2VuJykudGV4dCgpLCBleHBlY3RlZCwgJ0luc2VydCBTdHJpbmcgYWZ0
ZXInICk7CisKKwlRVW5pdC5yZXNldCgpOworCWV4cGVjdGVkID0gIlRoaXMgaXMgYSBub3JtYWwg
bGluazogWWFob29UcnkgdGhlbSBvdXQ6IjsKKwlqUXVlcnkoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2ZpcnN0JykpLmluc2VydEFmdGVyKCcjeWFob28nKTsKKwllcXVhbHMoIGpRdWVyeSgnI2Vu
JykudGV4dCgpLCBleHBlY3RlZCwgIkluc2VydCBlbGVtZW50IGFmdGVyIiApOworCisJUVVuaXQu
cmVzZXQoKTsKKwlleHBlY3RlZCA9ICJUaGlzIGlzIGEgbm9ybWFsIGxpbms6IFlhaG9vVHJ5IHRo
ZW0gb3V0OmRpdmVpbnRvbWFyayI7CisJalF1ZXJ5KFtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
Zmlyc3QnKSwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21hcmsnKV0pLmluc2VydEFmdGVyKCcj
eWFob28nKTsKKwllcXVhbHMoIGpRdWVyeSgnI2VuJykudGV4dCgpLCBleHBlY3RlZCwgIkluc2Vy
dCBhcnJheSBvZiBlbGVtZW50cyBhZnRlciIgKTsKKworCVFVbml0LnJlc2V0KCk7CisJZXhwZWN0
ZWQgPSAiVGhpcyBpcyBhIG5vcm1hbCBsaW5rOiBZYWhvb2RpdmVpbnRvbWFya1RyeSB0aGVtIG91
dDoiOworCWpRdWVyeSgiI21hcmssICNmaXJzdCIpLmluc2VydEFmdGVyKCcjeWFob28nKTsKKwll
cXVhbHMoIGpRdWVyeSgnI2VuJykudGV4dCgpLCBleHBlY3RlZCwgIkluc2VydCBqUXVlcnkgYWZ0
ZXIiICk7Cit9KTsKKwordmFyIHRlc3RSZXBsYWNlV2l0aCA9IGZ1bmN0aW9uKHZhbCkgeworCWV4
cGVjdCgyMCk7CisJalF1ZXJ5KCcjeWFob28nKS5yZXBsYWNlV2l0aCh2YWwoICc8YiBpZD0icmVw
bGFjZSI+YnVnYTwvYj4nICkpOworCW9rKCBqUXVlcnkoIiNyZXBsYWNlIilbMF0sICdSZXBsYWNl
IGVsZW1lbnQgd2l0aCBzdHJpbmcnICk7CisJb2soICFqUXVlcnkoIiN5YWhvbyIpWzBdLCAnVmVy
aWZ5IHRoYXQgb3JpZ2luYWwgZWxlbWVudCBpcyBnb25lLCBhZnRlciBzdHJpbmcnICk7CisKKwlR
VW5pdC5yZXNldCgpOworCWpRdWVyeSgnI3lhaG9vJykucmVwbGFjZVdpdGgodmFsKCBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnZmlyc3QnKSApKTsKKwlvayggalF1ZXJ5KCIjZmlyc3QiKVswXSwg
J1JlcGxhY2UgZWxlbWVudCB3aXRoIGVsZW1lbnQnICk7CisJb2soICFqUXVlcnkoIiN5YWhvbyIp
WzBdLCAnVmVyaWZ5IHRoYXQgb3JpZ2luYWwgZWxlbWVudCBpcyBnb25lLCBhZnRlciBlbGVtZW50
JyApOworCisJUVVuaXQucmVzZXQoKTsKKwlqUXVlcnkoIiNtYWluIikuYXBwZW5kKCc8ZGl2IGlk
PSJiYXIiPjxkaXYgaWQ9ImJheiI+Rm9vPC9kaXY+PC9kaXY+Jyk7CisJalF1ZXJ5KCcjYmF6Jyku
cmVwbGFjZVdpdGgoIkJheiIpOworCWVxdWFscyggalF1ZXJ5KCIjYmFyIikudGV4dCgpLCJCYXoi
LCAnUmVwbGFjZSBlbGVtZW50IHdpdGggdGV4dCcgKTsKKwlvayggIWpRdWVyeSgiI2JheiIpWzBd
LCAnVmVyaWZ5IHRoYXQgb3JpZ2luYWwgZWxlbWVudCBpcyBnb25lLCBhZnRlciBlbGVtZW50JyAp
OworCisJUVVuaXQucmVzZXQoKTsKKwlqUXVlcnkoJyN5YWhvbycpLnJlcGxhY2VXaXRoKHZhbCgg
W2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaXJzdCcpLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnbWFyaycpXSApKTsKKwlvayggalF1ZXJ5KCIjZmlyc3QiKVswXSwgJ1JlcGxhY2UgZWxlbWVu
dCB3aXRoIGFycmF5IG9mIGVsZW1lbnRzJyApOworCW9rKCBqUXVlcnkoIiNtYXJrIilbMF0sICdS
ZXBsYWNlIGVsZW1lbnQgd2l0aCBhcnJheSBvZiBlbGVtZW50cycgKTsKKwlvayggIWpRdWVyeSgi
I3lhaG9vIilbMF0sICdWZXJpZnkgdGhhdCBvcmlnaW5hbCBlbGVtZW50IGlzIGdvbmUsIGFmdGVy
IGFycmF5IG9mIGVsZW1lbnRzJyApOworCisJUVVuaXQucmVzZXQoKTsKKwlqUXVlcnkoJyN5YWhv
bycpLnJlcGxhY2VXaXRoKHZhbCggalF1ZXJ5KCIjbWFyaywgI2ZpcnN0IikgKSk7CisJb2soIGpR
dWVyeSgiI2ZpcnN0IilbMF0sICdSZXBsYWNlIGVsZW1lbnQgd2l0aCBzZXQgb2YgZWxlbWVudHMn
ICk7CisJb2soIGpRdWVyeSgiI21hcmsiKVswXSwgJ1JlcGxhY2UgZWxlbWVudCB3aXRoIHNldCBv
ZiBlbGVtZW50cycgKTsKKwlvayggIWpRdWVyeSgiI3lhaG9vIilbMF0sICdWZXJpZnkgdGhhdCBv
cmlnaW5hbCBlbGVtZW50IGlzIGdvbmUsIGFmdGVyIHNldCBvZiBlbGVtZW50cycgKTsKKworCVFV
bml0LnJlc2V0KCk7CisJdmFyIHRtcCA9IGpRdWVyeSgiPGRpdi8+IikuYXBwZW5kVG8oImJvZHki
KS5jbGljayhmdW5jdGlvbigpeyBvayh0cnVlLCAiTmV3bHkgYm91bmQgY2xpY2sgcnVuLiIgKTsg
fSk7CisJdmFyIHkgPSBqUXVlcnkoJzxkaXYvPicpLmFwcGVuZFRvKCJib2R5IikuY2xpY2soZnVu
Y3Rpb24oKXsgb2sodHJ1ZSwgIlByZXZpb3VzbHkgYm91bmQgY2xpY2sgcnVuLiIgKTsgfSk7CisJ
dmFyIGNoaWxkID0geS5hcHBlbmQoIjxiPnRlc3Q8L2I+IikuZmluZCgiYiIpLmNsaWNrKGZ1bmN0
aW9uKCl7IG9rKHRydWUsICJDaGlsZCBib3VuZCBjbGljayBydW4uIiApOyByZXR1cm4gZmFsc2U7
IH0pOworCisJeS5yZXBsYWNlV2l0aCggdG1wICk7CisKKwl0bXAuY2xpY2soKTsKKwl5LmNsaWNr
KCk7IC8vIFNob3VsZG4ndCBiZSBydW4KKwljaGlsZC5jbGljaygpOyAvLyBTaG91bGRuJ3QgYmUg
cnVuCisKKwl0bXAucmVtb3ZlKCk7CisJeS5yZW1vdmUoKTsKKwljaGlsZC5yZW1vdmUoKTsKKwor
CVFVbml0LnJlc2V0KCk7CisKKwl5ID0galF1ZXJ5KCc8ZGl2Lz4nKS5hcHBlbmRUbygiYm9keSIp
LmNsaWNrKGZ1bmN0aW9uKCl7IG9rKHRydWUsICJQcmV2aW91c2x5IGJvdW5kIGNsaWNrIHJ1bi4i
ICk7IH0pOworCXZhciBjaGlsZDIgPSB5LmFwcGVuZCgiPHU+dGVzdDwvdT4iKS5maW5kKCJ1Iiku
Y2xpY2soZnVuY3Rpb24oKXsgb2sodHJ1ZSwgIkNoaWxkIDIgYm91bmQgY2xpY2sgcnVuLiIgKTsg
cmV0dXJuIGZhbHNlOyB9KTsKKworCXkucmVwbGFjZVdpdGgoIGNoaWxkMiApOworCisJY2hpbGQy
LmNsaWNrKCk7CisKKwl5LnJlbW92ZSgpOworCWNoaWxkMi5yZW1vdmUoKTsKKworCVFVbml0LnJl
c2V0KCk7CisKKwl2YXIgc2V0ID0galF1ZXJ5KCI8ZGl2Lz4iKS5yZXBsYWNlV2l0aCh2YWwoIjxz
cGFuPnRlc3Q8L3NwYW4+IikpOworCWVxdWFscyggc2V0WzBdLm5vZGVOYW1lLnRvTG93ZXJDYXNl
KCksICJzcGFuIiwgIlJlcGxhY2UgdGhlIGRpc2Nvbm5lY3RlZCBub2RlLiIgKTsKKwllcXVhbHMo
IHNldC5sZW5ndGgsIDEsICJSZXBsYWNlIHRoZSBkaXNjb25uZWN0ZWQgbm9kZS4iICk7CisKKwl2
YXIgJGRpdiA9IGpRdWVyeSgiPGRpdiBjbGFzcz0ncmVwbGFjZXdpdGgnPjwvZGl2PiIpLmFwcGVu
ZFRvKCJib2R5Iik7CisJLy8gVE9ETzogV29yayBvbiBqUXVlcnkoLi4uKSBpbmxpbmUgc2NyaXB0
IGV4ZWN1dGlvbgorCS8vJGRpdi5yZXBsYWNlV2l0aCgiPGRpdiBjbGFzcz0ncmVwbGFjZXdpdGgn
PjwvZGl2PjxzY3JpcHQ+IiArCisJCS8vImVxdWFscyhqUXVlcnkoJy5yZXBsYWNld2l0aCcpLmxl
bmd0aCwgMSwgJ0NoZWNrIG51bWJlciBvZiBlbGVtZW50cyBpbiBwYWdlLicpOyIgKworCQkvLyI8
L3NjcmlwdD4iKTsKKwllcXVhbHMoalF1ZXJ5KCcucmVwbGFjZXdpdGgnKS5sZW5ndGgsIDEsICdD
aGVjayBudW1iZXIgb2YgZWxlbWVudHMgaW4gcGFnZS4nKTsKKwlqUXVlcnkoJy5yZXBsYWNld2l0
aCcpLnJlbW92ZSgpOworCisJUVVuaXQucmVzZXQoKTsKKworCWpRdWVyeSgiI21haW4iKS5hcHBl
bmQoIjxkaXYgaWQ9J3JlcGxhY2VXaXRoJz48L2Rpdj4iKTsKKwllcXVhbHMoIGpRdWVyeSgiI21h
aW4iKS5maW5kKCJkaXZbaWQ9cmVwbGFjZVdpdGhdIikubGVuZ3RoLCAxLCAiTWFrZSBzdXJlIG9u
bHkgb25lIGRpdiBleGlzdHMuIiApOworCisJalF1ZXJ5KCIjcmVwbGFjZVdpdGgiKS5yZXBsYWNl
V2l0aCggdmFsKCI8ZGl2IGlkPSdyZXBsYWNlV2l0aCc+PC9kaXY+IikgKTsKKwllcXVhbHMoIGpR
dWVyeSgiI21haW4iKS5maW5kKCJkaXZbaWQ9cmVwbGFjZVdpdGhdIikubGVuZ3RoLCAxLCAiTWFr
ZSBzdXJlIG9ubHkgb25lIGRpdiBleGlzdHMuIiApOworCisJalF1ZXJ5KCIjcmVwbGFjZVdpdGgi
KS5yZXBsYWNlV2l0aCggdmFsKCI8ZGl2IGlkPSdyZXBsYWNlV2l0aCc+PC9kaXY+IikgKTsKKwll
cXVhbHMoIGpRdWVyeSgiI21haW4iKS5maW5kKCJkaXZbaWQ9cmVwbGFjZVdpdGhdIikubGVuZ3Ro
LCAxLCAiTWFrZSBzdXJlIG9ubHkgb25lIGRpdiBleGlzdHMuIiApOworfQorCit0ZXN0KCJyZXBs
YWNlV2l0aChTdHJpbmd8RWxlbWVudHxBcnJheSZsdDtFbGVtZW50Jmd0O3xqUXVlcnkpIiwgZnVu
Y3Rpb24oKSB7CisJdGVzdFJlcGxhY2VXaXRoKGJhcmVPYmopOworfSk7CisKK3Rlc3QoInJlcGxh
Y2VXaXRoKEZ1bmN0aW9uKSIsIGZ1bmN0aW9uKCkgeworCXRlc3RSZXBsYWNlV2l0aChmdW5jdGlv
blJldHVybmluZ09iaik7CisKKwlleHBlY3QoMjEpOworCisJdmFyIHkgPSBqUXVlcnkoIiN5YWhv
byIpWzBdOworCisJalF1ZXJ5KHkpLnJlcGxhY2VXaXRoKGZ1bmN0aW9uKCl7CisJCWVxdWFscygg
dGhpcywgeSwgIk1ha2Ugc3VyZSB0aGUgY29udGV4dCBpcyBjb21pbmcgaW4gY29ycmVjdGx5LiIg
KTsKKwl9KTsKKworCVFVbml0LnJlc2V0KCk7Cit9KTsKKwordGVzdCgicmVwbGFjZVdpdGgoc3Ry
aW5nKSBmb3IgbW9yZSB0aGFuIG9uZSBlbGVtZW50IiwgZnVuY3Rpb24oKXsKKwlleHBlY3QoMyk7
CisKKwllcXVhbHMoalF1ZXJ5KCcjZm9vIHAnKS5sZW5ndGgsIDMsICdlbnN1cmluZyB0aGF0IHRl
c3QgZGF0YSBoYXMgbm90IGNoYW5nZWQnKTsKKworCWpRdWVyeSgnI2ZvbyBwJykucmVwbGFjZVdp
dGgoJzxzcGFuPmJhcjwvc3Bhbj4nKTsKKwllcXVhbHMoalF1ZXJ5KCcjZm9vIHNwYW4nKS5sZW5n
dGgsIDMsICd2ZXJpZnkgdGhhdCBhbGwgdGhlIHRocmVlIG9yaWdpbmFsIGVsZW1lbnQgaGF2ZSBi
ZWVuIHJlcGxhY2VkJyk7CisJZXF1YWxzKGpRdWVyeSgnI2ZvbyBwJykubGVuZ3RoLCAwLCAndmVy
aWZ5IHRoYXQgYWxsIHRoZSB0aHJlZSBvcmlnaW5hbCBlbGVtZW50IGhhdmUgYmVlbiByZXBsYWNl
ZCcpOworfSk7CisKK3Rlc3QoInJlcGxhY2VBbGwoU3RyaW5nfEVsZW1lbnR8QXJyYXkmbHQ7RWxl
bWVudCZndDt8alF1ZXJ5KSIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgxMCk7CisJalF1ZXJ5KCc8
YiBpZD0icmVwbGFjZSI+YnVnYTwvYj4nKS5yZXBsYWNlQWxsKCIjeWFob28iKTsKKwlvayggalF1
ZXJ5KCIjcmVwbGFjZSIpWzBdLCAnUmVwbGFjZSBlbGVtZW50IHdpdGggc3RyaW5nJyApOworCW9r
KCAhalF1ZXJ5KCIjeWFob28iKVswXSwgJ1ZlcmlmeSB0aGF0IG9yaWdpbmFsIGVsZW1lbnQgaXMg
Z29uZSwgYWZ0ZXIgc3RyaW5nJyApOworCisJUVVuaXQucmVzZXQoKTsKKwlqUXVlcnkoZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpcnN0JykpLnJlcGxhY2VBbGwoIiN5YWhvbyIpOworCW9rKCBq
UXVlcnkoIiNmaXJzdCIpWzBdLCAnUmVwbGFjZSBlbGVtZW50IHdpdGggZWxlbWVudCcgKTsKKwlv
ayggIWpRdWVyeSgiI3lhaG9vIilbMF0sICdWZXJpZnkgdGhhdCBvcmlnaW5hbCBlbGVtZW50IGlz
IGdvbmUsIGFmdGVyIGVsZW1lbnQnICk7CisKKwlRVW5pdC5yZXNldCgpOworCWpRdWVyeShbZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpcnN0JyksIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdt
YXJrJyldKS5yZXBsYWNlQWxsKCIjeWFob28iKTsKKwlvayggalF1ZXJ5KCIjZmlyc3QiKVswXSwg
J1JlcGxhY2UgZWxlbWVudCB3aXRoIGFycmF5IG9mIGVsZW1lbnRzJyApOworCW9rKCBqUXVlcnko
IiNtYXJrIilbMF0sICdSZXBsYWNlIGVsZW1lbnQgd2l0aCBhcnJheSBvZiBlbGVtZW50cycgKTsK
KwlvayggIWpRdWVyeSgiI3lhaG9vIilbMF0sICdWZXJpZnkgdGhhdCBvcmlnaW5hbCBlbGVtZW50
IGlzIGdvbmUsIGFmdGVyIGFycmF5IG9mIGVsZW1lbnRzJyApOworCisJUVVuaXQucmVzZXQoKTsK
KwlqUXVlcnkoIiNtYXJrLCAjZmlyc3QiKS5yZXBsYWNlQWxsKCIjeWFob28iKTsKKwlvayggalF1
ZXJ5KCIjZmlyc3QiKVswXSwgJ1JlcGxhY2UgZWxlbWVudCB3aXRoIHNldCBvZiBlbGVtZW50cycg
KTsKKwlvayggalF1ZXJ5KCIjbWFyayIpWzBdLCAnUmVwbGFjZSBlbGVtZW50IHdpdGggc2V0IG9m
IGVsZW1lbnRzJyApOworCW9rKCAhalF1ZXJ5KCIjeWFob28iKVswXSwgJ1ZlcmlmeSB0aGF0IG9y
aWdpbmFsIGVsZW1lbnQgaXMgZ29uZSwgYWZ0ZXIgc2V0IG9mIGVsZW1lbnRzJyApOworfSk7CisK
K3Rlc3QoImpRdWVyeS5jbG9uZSgpICgjODAxNykiLCBmdW5jdGlvbigpIHsKKworCWV4cGVjdCgy
KTsKKworCW9rKCBqUXVlcnkuY2xvbmUgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIGpRdWVyeS5jbG9u
ZSApICwgImpRdWVyeS5jbG9uZSgpIHV0aWxpdHkgZXhpc3RzIGFuZCBpcyBhIGZ1bmN0aW9uLiIp
OworCisJdmFyIG1haW4gPSBqUXVlcnkoIiNtYWluIilbMF0sCisJCQljbG9uZSA9IGpRdWVyeS5j
bG9uZSggbWFpbiApOworCisJZXF1YWxzKCBtYWluLmNoaWxkTm9kZXMubGVuZ3RoLCBjbG9uZS5j
aGlsZE5vZGVzLmxlbmd0aCwgIlNpbXBsZSBjaGlsZCBsZW5ndGggdG8gZW5zdXJlIGEgbGFyZ2Ug
ZG9tIHRyZWUgY29waWVzIGNvcnJlY3RseSIgKTsKK30pOworCit0ZXN0KCJjbG9uZSgpICgjODA3
MCkiLCBmdW5jdGlvbiAoKSB7CisJZXhwZWN0KDIpOworCisJalF1ZXJ5KCc8c2VsZWN0IGNsYXNz
PSJ0ZXN0ODA3MCI+PC9zZWxlY3Q+PHNlbGVjdCBjbGFzcz0idGVzdDgwNzAiPjwvc2VsZWN0Picp
LmFwcGVuZFRvKCcjbWFpbicpOworCXZhciBzZWxlY3RzID0galF1ZXJ5KCcudGVzdDgwNzAnKTsK
KwlzZWxlY3RzLmFwcGVuZCgnPE9QVElPTj4xPC9PUFRJT04+PE9QVElPTj4yPC9PUFRJT04+Jyk7
CisKKwllcXVhbHMoIHNlbGVjdHNbMF0uY2hpbGROb2Rlcy5sZW5ndGgsIDIsICJGaXJzdCBzZWxl
Y3QgZ290IHR3byBub2RlcyIgKTsKKwllcXVhbHMoIHNlbGVjdHNbMV0uY2hpbGROb2Rlcy5sZW5n
dGgsIDIsICJTZWNvbmQgc2VsZWN0IGdvdCB0d28gbm9kZXMiICk7CisKKwlzZWxlY3RzLnJlbW92
ZSgpOworfSk7CisKK3Rlc3QoImNsb25lKCkiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMzcpOwor
CWVxdWFscyggJ1RoaXMgaXMgYSBub3JtYWwgbGluazogWWFob28nLCBqUXVlcnkoJyNlbicpLnRl
eHQoKSwgJ0Fzc2VydCB0ZXh0IGZvciAjZW4nICk7CisJdmFyIGNsb25lID0galF1ZXJ5KCcjeWFo
b28nKS5jbG9uZSgpOworCWVxdWFscyggJ1RyeSB0aGVtIG91dDpZYWhvbycsIGpRdWVyeSgnI2Zp
cnN0JykuYXBwZW5kKGNsb25lKS50ZXh0KCksICdDaGVjayBmb3IgY2xvbmUnICk7CisJZXF1YWxz
KCAnVGhpcyBpcyBhIG5vcm1hbCBsaW5rOiBZYWhvbycsIGpRdWVyeSgnI2VuJykudGV4dCgpLCAn
UmVhc3NlcnQgdGV4dCBmb3IgI2VuJyApOworCisJdmFyIGNsb25lVGFncyA9IFsKKwkJIjx0YWJs
ZS8+IiwgIjx0ci8+IiwgIjx0ZC8+IiwgIjxkaXYvPiIsCisJCSI8YnV0dG9uLz4iLCAiPHVsLz4i
LCAiPG9sLz4iLCAiPGxpLz4iLAorCQkiPGlucHV0IHR5cGU9J2NoZWNrYm94JyAvPiIsICI8c2Vs
ZWN0Lz4iLCAiPG9wdGlvbi8+IiwgIjx0ZXh0YXJlYS8+IiwKKwkJIjx0Ym9keS8+IiwgIjx0aGVh
ZC8+IiwgIjx0Zm9vdC8+IiwgIjxpZnJhbWUvPiIKKwldOworCWZvciAodmFyIGkgPSAwOyBpIDwg
Y2xvbmVUYWdzLmxlbmd0aDsgaSsrKSB7CisJCXZhciBqID0galF1ZXJ5KGNsb25lVGFnc1tpXSk7
CisJCWVxdWFscyggalswXS50YWdOYW1lLCBqLmNsb25lKClbMF0udGFnTmFtZSwgJ0Nsb25lIGEg
JyArIGNsb25lVGFnc1tpXSk7CisJfQorCisJLy8gdXNpbmcgY29udGVudHMgd2lsbCBnZXQgY29t
bWVudHMgcmVndWxhciwgdGV4dCwgYW5kIGNvbW1lbnQgbm9kZXMKKwl2YXIgY2wgPSBqUXVlcnko
IiNub25ub2RlcyIpLmNvbnRlbnRzKCkuY2xvbmUoKTsKKwlvayggY2wubGVuZ3RoID49IDIsICJD
aGVjayBub2RlLHRleHRub2RlLGNvbW1lbnQgY2xvbmUgd29ya3MgKHNvbWUgYnJvd3NlcnMgZGVs
ZXRlIGNvbW1lbnRzIG9uIGNsb25lKSIgKTsKKworCXZhciBkaXYgPSBqUXVlcnkoIjxkaXY+PHVs
PjxsaT50ZXN0PC9saT48L3VsPjwvZGl2PiIpLmNsaWNrKGZ1bmN0aW9uKCl7CisJCW9rKCB0cnVl
LCAiQm91bmQgZXZlbnQgc3RpbGwgZXhpc3RzLiIgKTsKKwl9KTsKKworCWNsb25lID0gZGl2LmNs
b25lKHRydWUpOworCisJLy8gbWFudWFsbHkgY2xlYW4gdXAgZGV0YWNoZWQgZWxlbWVudHMKKwlk
aXYucmVtb3ZlKCk7CisKKwlkaXYgPSBjbG9uZS5jbG9uZSh0cnVlKTsKKworCS8vIG1hbnVhbGx5
IGNsZWFuIHVwIGRldGFjaGVkIGVsZW1lbnRzCisJY2xvbmUucmVtb3ZlKCk7CisKKwllcXVhbHMo
IGRpdi5sZW5ndGgsIDEsICJPbmUgZWxlbWVudCBjbG9uZWQiICk7CisJZXF1YWxzKCBkaXZbMF0u
bm9kZU5hbWUudG9VcHBlckNhc2UoKSwgIkRJViIsICJESVYgZWxlbWVudCBjbG9uZWQiICk7CisJ
ZGl2LnRyaWdnZXIoImNsaWNrIik7CisKKwkvLyBtYW51YWxseSBjbGVhbiB1cCBkZXRhY2hlZCBl
bGVtZW50cworCWRpdi5yZW1vdmUoKTsKKworCWRpdiA9IGpRdWVyeSgiPGRpdi8+IikuYXBwZW5k
KFsgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGFibGUiKSwgZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgidGFibGUiKSBdKTsKKwlkaXYuZmluZCgidGFibGUiKS5jbGljayhmdW5jdGlvbigpeworCQlv
ayggdHJ1ZSwgIkJvdW5kIGV2ZW50IHN0aWxsIGV4aXN0cy4iICk7CisJfSk7CisKKwljbG9uZSA9
IGRpdi5jbG9uZSh0cnVlKTsKKwllcXVhbHMoIGNsb25lLmxlbmd0aCwgMSwgIk9uZSBlbGVtZW50
IGNsb25lZCIgKTsKKwllcXVhbHMoIGNsb25lWzBdLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCksICJE
SVYiLCAiRElWIGVsZW1lbnQgY2xvbmVkIiApOworCWNsb25lLmZpbmQoInRhYmxlOmxhc3QiKS50
cmlnZ2VyKCJjbGljayIpOworCisJLy8gbWFudWFsbHkgY2xlYW4gdXAgZGV0YWNoZWQgZWxlbWVu
dHMKKwlkaXYucmVtb3ZlKCk7CisJY2xvbmUucmVtb3ZlKCk7CisKKwl2YXIgZGl2RXZ0ID0galF1
ZXJ5KCI8ZGl2Pjx1bD48bGk+dGVzdDwvbGk+PC91bD48L2Rpdj4iKS5jbGljayhmdW5jdGlvbigp
eworCQlvayggZmFsc2UsICJCb3VuZCBldmVudCBzdGlsbCBleGlzdHMgYWZ0ZXIgLmNsb25lKCku
IiApOworCX0pLAorCQljbG9uZUV2dCA9IGRpdkV2dC5jbG9uZSgpOworCisJLy8gTWFrZSBzdXJl
IHRoYXQgZG9pbmcgLmNsb25lKCkgZG9lc24ndCBjbG9uZSBldmVudHMKKwljbG9uZUV2dC50cmln
Z2VyKCJjbGljayIpOworCisJY2xvbmVFdnQucmVtb3ZlKCk7CisJZGl2RXZ0LnJlbW92ZSgpOwor
CisJLy8gdGhpcyBpcyB0ZWNobmljYWxseSBhbiBpbnZhbGlkIG9iamVjdCwgYnV0IGJlY2F1c2Ug
b2YgdGhlIHNwZWNpYWwKKwkvLyBjbGFzc2lkIGluc3RhbnRpYXRpb24gaXQgaXMgdGhlIG9ubHkg
a2luZCB0aGF0IElFIGhhcyB0cm91YmxlIHdpdGgsCisJLy8gc28gbGV0J3MgdGVzdCB3aXRoIGl0
IHRvby4KKwlkaXYgPSBqUXVlcnkoIjxkaXYvPiIpLmh0bWwoJzxvYmplY3QgaGVpZ2h0PSIzNTUi
IHdpZHRoPSI0MjUiIGNsYXNzaWQ9ImNsc2lkOkQyN0NEQjZFLUFFNkQtMTFjZi05NkI4LTQ0NDU1
MzU0MDAwMCI+ICA8cGFyYW0gbmFtZT0ibW92aWUiIHZhbHVlPSJodHRwOi8vd3d3LnlvdXR1YmUu
Y29tL3YvM0tBTkkyZHBYTHcmYW1wO2hsPWVuIj4gIDxwYXJhbSBuYW1lPSJ3bW9kZSIgdmFsdWU9
InRyYW5zcGFyZW50Ij4gPC9vYmplY3Q+Jyk7CisKKwljbG9uZSA9IGRpdi5jbG9uZSh0cnVlKTsK
KwllcXVhbHMoIGNsb25lLmxlbmd0aCwgMSwgIk9uZSBlbGVtZW50IGNsb25lZCIgKTsKKwllcXVh
bHMoIGNsb25lLmh0bWwoKSwgZGl2Lmh0bWwoKSwgIkVsZW1lbnQgY29udGVudHMgY2xvbmVkIiAp
OworCWVxdWFscyggY2xvbmVbMF0ubm9kZU5hbWUudG9VcHBlckNhc2UoKSwgIkRJViIsICJESVYg
ZWxlbWVudCBjbG9uZWQiICk7CisKKwkvLyBhbmQgaGVyZSdzIGEgdmFsaWQgb25lLgorCWRpdiA9
IGpRdWVyeSgiPGRpdi8+IikuaHRtbCgnPG9iamVjdCBoZWlnaHQ9IjM1NSIgd2lkdGg9IjQyNSIg
dHlwZT0iYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giIGRhdGE9Imh0dHA6Ly93d3cueW91
dHViZS5jb20vdi8zS0FOSTJkcFhMdyZhbXA7aGw9ZW4iPiAgPHBhcmFtIG5hbWU9Im1vdmllIiB2
YWx1ZT0iaHR0cDovL3d3dy55b3V0dWJlLmNvbS92LzNLQU5JMmRwWEx3JmFtcDtobD1lbiI+ICA8
cGFyYW0gbmFtZT0id21vZGUiIHZhbHVlPSJ0cmFuc3BhcmVudCI+IDwvb2JqZWN0PicpOworCisJ
Y2xvbmUgPSBkaXYuY2xvbmUodHJ1ZSk7CisJZXF1YWxzKCBjbG9uZS5sZW5ndGgsIDEsICJPbmUg
ZWxlbWVudCBjbG9uZWQiICk7CisJZXF1YWxzKCBjbG9uZS5odG1sKCksIGRpdi5odG1sKCksICJF
bGVtZW50IGNvbnRlbnRzIGNsb25lZCIgKTsKKwllcXVhbHMoIGNsb25lWzBdLm5vZGVOYW1lLnRv
VXBwZXJDYXNlKCksICJESVYiLCAiRElWIGVsZW1lbnQgY2xvbmVkIiApOworCisJZGl2ID0galF1
ZXJ5KCI8ZGl2Lz4iKS5kYXRhKHsgYTogdHJ1ZSB9KTsKKwljbG9uZSA9IGRpdi5jbG9uZSh0cnVl
KTsKKwllcXVhbHMoIGNsb25lLmRhdGEoImEiKSwgdHJ1ZSwgIkRhdGEgY2xvbmVkLiIgKTsKKwlj
bG9uZS5kYXRhKCJhIiwgZmFsc2UpOworCWVxdWFscyggY2xvbmUuZGF0YSgiYSIpLCBmYWxzZSwg
IkVuc3VyZSBjbG9uZWQgZWxlbWVudCBkYXRhIG9iamVjdCB3YXMgY29ycmVjdGx5IG1vZGlmaWVk
IiApOworCWVxdWFscyggZGl2LmRhdGEoImEiKSwgdHJ1ZSwgIkVuc3VyZSBjbG9uZWQgZWxlbWVu
dCBkYXRhIG9iamVjdCBpcyBjb3BpZWQsIG5vdCByZWZlcmVuY2VkIiApOworCisJLy8gbWFudWFs
bHkgY2xlYW4gdXAgZGV0YWNoZWQgZWxlbWVudHMKKwlkaXYucmVtb3ZlKCk7CisJY2xvbmUucmVt
b3ZlKCk7CisKKwl2YXIgZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImZvcm0iKTsKKwlm
b3JtLmFjdGlvbiA9ICIvdGVzdC8iOworCXZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJkaXYiKTsKKwlkaXYuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ0ZXN0
IikgKTsKKwlmb3JtLmFwcGVuZENoaWxkKCBkaXYgKTsKKworCWVxdWFscyggalF1ZXJ5KGZvcm0p
LmNsb25lKCkuY2hpbGRyZW4oKS5sZW5ndGgsIDEsICJNYWtlIHN1cmUgd2UganVzdCBnZXQgdGhl
IGZvcm0gYmFjay4iICk7CisKKwllcXVhbCggalF1ZXJ5KCJib2R5IikuY2xvbmUoKS5jaGlsZHJl
bigpWzBdLmlkLCAicXVuaXQtaGVhZGVyIiwgIk1ha2Ugc3VyZSBjbG9uaW5nIGJvZHkgd29ya3Mi
ICk7Cit9KTsKKwordGVzdCgiY2xvbmUoZm9ybSBlbGVtZW50KSAoQnVnICMzODc5LCAjNjY1NSki
LCBmdW5jdGlvbigpIHsKKwlleHBlY3QoNik7CisJdmFyIGVsZW1lbnQgPSBqUXVlcnkoIjxzZWxl
Y3Q+PG9wdGlvbj5Gb288L29wdGlvbj48b3B0aW9uIHNlbGVjdGVkPkJhcjwvb3B0aW9uPjwvc2Vs
ZWN0PiIpOworCisJZXF1YWxzKCBlbGVtZW50LmNsb25lKCkuZmluZCgib3B0aW9uOnNlbGVjdGVk
IikudmFsKCksIGVsZW1lbnQuZmluZCgib3B0aW9uOnNlbGVjdGVkIikudmFsKCksICJTZWxlY3Rl
ZCBvcHRpb24gY2xvbmVkIGNvcnJlY3RseSIgKTsKKworCWVsZW1lbnQgPSBqUXVlcnkoIjxpbnB1
dCB0eXBlPSdjaGVja2JveCcgdmFsdWU9J2Zvbyc+IikuYXR0cignY2hlY2tlZCcsICdjaGVja2Vk
Jyk7CisJY2xvbmUgPSBlbGVtZW50LmNsb25lKCk7CisKKwllcXVhbHMoIGNsb25lLmlzKCI6Y2hl
Y2tlZCIpLCBlbGVtZW50LmlzKCI6Y2hlY2tlZCIpLCAiQ2hlY2tlZCBpbnB1dCBjbG9uZWQgY29y
cmVjdGx5IiApOworCWVxdWFscyggY2xvbmVbMF0uZGVmYXVsdFZhbHVlLCAiZm9vIiwgIkNoZWNr
ZWQgaW5wdXQgZGVmYXVsdFZhbHVlIGNsb25lZCBjb3JyZWN0bHkiICk7CisJZXF1YWxzKCBjbG9u
ZVswXS5kZWZhdWx0Q2hlY2tlZCwgIWpRdWVyeS5zdXBwb3J0Lm5vQ2xvbmVDaGVja2VkLCAiQ2hl
Y2tlZCBpbnB1dCBkZWZhdWx0Q2hlY2tlZCBjbG9uZWQgY29ycmVjdGx5IiApOworCisJZWxlbWVu
dCA9IGpRdWVyeSgiPGlucHV0IHR5cGU9J3RleHQnIHZhbHVlPSdmb28nPiIpOworCWNsb25lID0g
ZWxlbWVudC5jbG9uZSgpOworCWVxdWFscyggY2xvbmVbMF0uZGVmYXVsdFZhbHVlLCAiZm9vIiwg
IlRleHQgaW5wdXQgZGVmYXVsdFZhbHVlIGNsb25lZCBjb3JyZWN0bHkiICk7CisKKwllbGVtZW50
ID0galF1ZXJ5KCI8dGV4dGFyZWE+Zm9vPC90ZXh0YXJlYT4iKTsKKwljbG9uZSA9IGVsZW1lbnQu
Y2xvbmUoKTsKKwllcXVhbHMoIGNsb25lWzBdLmRlZmF1bHRWYWx1ZSwgImZvbyIsICJUZXh0YXJl
YSBkZWZhdWx0VmFsdWUgY2xvbmVkIGNvcnJlY3RseSIgKTsKK30pOworCit0ZXN0KCJjbG9uZSht
dWx0aXBsZSBzZWxlY3RlZCBvcHRpb25zKSAoQnVnICM4MTI5KSIsIGZ1bmN0aW9uKCkgeworCWV4
cGVjdCgxKTsKKwl2YXIgZWxlbWVudCA9IGpRdWVyeSgiPHNlbGVjdD48b3B0aW9uPkZvbzwvb3B0
aW9uPjxvcHRpb24gc2VsZWN0ZWQ+QmFyPC9vcHRpb24+PG9wdGlvbiBzZWxlY3RlZD5CYXo8L29w
dGlvbj48L3NlbGVjdD4iKTsKKworCWVxdWFscyggZWxlbWVudC5jbG9uZSgpLmZpbmQoIm9wdGlv
bjpzZWxlY3RlZCIpLmxlbmd0aCwgZWxlbWVudC5maW5kKCJvcHRpb246c2VsZWN0ZWQiKS5sZW5n
dGgsICJNdWx0aXBsZSBzZWxlY3RlZCBvcHRpb25zIGNsb25lZCBjb3JyZWN0bHkiICk7CisKK30p
OworCitpZiAoIWlzTG9jYWwpIHsKK3Rlc3QoImNsb25lKCkgb24gWE1MIG5vZGVzIiwgZnVuY3Rp
b24oKSB7CisJZXhwZWN0KDIpOworCXN0b3AoKTsKKwlqUXVlcnkuZ2V0KCJkYXRhL2Rhc2hib2Fy
ZC54bWwiLCBmdW5jdGlvbiAoeG1sKSB7CisJCXZhciByb290ID0galF1ZXJ5KHhtbC5kb2N1bWVu
dEVsZW1lbnQpLmNsb25lKCk7CisJCXZhciBvcmlnVGFiID0galF1ZXJ5KCJ0YWIiLCB4bWwpLmVx
KDApOworCQl2YXIgY2xvbmVUYWIgPSBqUXVlcnkoInRhYiIsIHJvb3QpLmVxKDApOworCQlvcmln
VGFiLnRleHQoIm9yaWd2YWwiKTsKKwkJY2xvbmVUYWIudGV4dCgiY2xvbmV2YWwiKTsKKwkJZXF1
YWxzKG9yaWdUYWIudGV4dCgpLCAib3JpZ3ZhbCIsICJDaGVjayBvcmlnaW5hbCBYTUwgbm9kZSB3
YXMgY29ycmVjdGx5IHNldCIpOworCQllcXVhbHMoY2xvbmVUYWIudGV4dCgpLCAiY2xvbmV2YWwi
LCAiQ2hlY2sgY2xvbmVkIFhNTCBub2RlIHdhcyBjb3JyZWN0bHkgc2V0Iik7CisJCXN0YXJ0KCk7
CisJfSk7Cit9KTsKK30KKwordmFyIHRlc3RIdG1sID0gZnVuY3Rpb24odmFsdWVPYmopIHsKKwll
eHBlY3QoMzEpOworCisJalF1ZXJ5LnNjcmlwdG9yZGVyID0gMDsKKworCXZhciBkaXYgPSBqUXVl
cnkoIiNtYWluID4gZGl2Iik7CisJZGl2Lmh0bWwodmFsdWVPYmooIjxiPnRlc3Q8L2I+IikpOwor
CXZhciBwYXNzID0gdHJ1ZTsKKwlmb3IgKCB2YXIgaSA9IDA7IGkgPCBkaXYuc2l6ZSgpOyBpKysg
KSB7CisJCWlmICggZGl2LmdldChpKS5jaGlsZE5vZGVzLmxlbmd0aCAhPSAxICkgcGFzcyA9IGZh
bHNlOworCX0KKwlvayggcGFzcywgIlNldCBIVE1MIiApOworCisJZGl2ID0galF1ZXJ5KCI8ZGl2
Lz4iKS5odG1sKCB2YWx1ZU9iaignPGRpdiBpZD0icGFyZW50XzEiPjxkaXYgaWQ9ImNoaWxkXzEi
Lz48L2Rpdj48ZGl2IGlkPSJwYXJlbnRfMiIvPicpICk7CisKKwllcXVhbHMoIGRpdi5jaGlsZHJl
bigpLmxlbmd0aCwgMiwgIk1ha2Ugc3VyZSB0d28gY2hpbGQgbm9kZXMgZXhpc3QuIiApOworCWVx
dWFscyggZGl2LmNoaWxkcmVuKCkuY2hpbGRyZW4oKS5sZW5ndGgsIDEsICJNYWtlIHN1cmUgdGhh
dCBhIGdyYW5kY2hpbGQgZXhpc3RzLiIgKTsKKworCXZhciBzcGFjZSA9IGpRdWVyeSgiPGRpdi8+
IikuaHRtbCh2YWx1ZU9iaigiJiMxNjA7IikpWzBdLmlubmVySFRNTDsKKwlvayggL15ceEEwJHxe
Jm5ic3A7JC8udGVzdCggc3BhY2UgKSwgIk1ha2Ugc3VyZSBlbnRpdGllcyBhcmUgcGFzc2VkIHRo
cm91Z2ggY29ycmVjdGx5LiIgKTsKKwllcXVhbHMoIGpRdWVyeSgiPGRpdi8+IikuaHRtbCh2YWx1
ZU9iaigiJmFtcDsiKSlbMF0uaW5uZXJIVE1MLCAiJmFtcDsiLCAiTWFrZSBzdXJlIGVudGl0aWVz
IGFyZSBwYXNzZWQgdGhyb3VnaCBjb3JyZWN0bHkuIiApOworCisJalF1ZXJ5KCIjbWFpbiIpLmh0
bWwodmFsdWVPYmooIjxzdHlsZT4uZm9vYmFye2NvbG9yOmdyZWVuO308L3N0eWxlPiIpKTsKKwor
CWVxdWFscyggalF1ZXJ5KCIjbWFpbiIpLmNoaWxkcmVuKCkubGVuZ3RoLCAxLCAiTWFrZSBzdXJl
IHRoZXJlIGlzIGEgY2hpbGQgZWxlbWVudC4iICk7CisJZXF1YWxzKCBqUXVlcnkoIiNtYWluIiku
Y2hpbGRyZW4oKVswXS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpLCAiU1RZTEUiLCAiQW5kIHRoYXQg
YSBzdHlsZSBlbGVtZW50IHdhcyBpbnNlcnRlZC4iICk7CisKKwlRVW5pdC5yZXNldCgpOworCS8v
IHVzaW5nIGNvbnRlbnRzIHdpbGwgZ2V0IGNvbW1lbnRzIHJlZ3VsYXIsIHRleHQsIGFuZCBjb21t
ZW50IG5vZGVzCisJdmFyIGogPSBqUXVlcnkoIiNub25ub2RlcyIpLmNvbnRlbnRzKCk7CisJai5o
dG1sKHZhbHVlT2JqKCI8Yj5ib2xkPC9iPiIpKTsKKworCS8vIHRoaXMgaXMgbmVlZGVkLCBvciB0
aGUgZXhwYW5kbyBhZGRlZCBieSBqUXVlcnkgdW5pcXVlIHdpbGwgeWllbGQgYSBkaWZmZXJlbnQg
aHRtbAorCWouZmluZCgnYicpLnJlbW92ZURhdGEoKTsKKwllcXVhbHMoIGouaHRtbCgpLnJlcGxh
Y2UoLyB4bWxucz0iW14iXSsiL2csICIiKS50b0xvd2VyQ2FzZSgpLCAiPGI+Ym9sZDwvYj4iLCAi
Q2hlY2sgbm9kZSx0ZXh0bm9kZSxjb21tZW50IHdpdGggaHRtbCgpIiApOworCisJalF1ZXJ5KCIj
bWFpbiIpLmh0bWwodmFsdWVPYmooIjxzZWxlY3QvPiIpKTsKKwlqUXVlcnkoIiNtYWluIHNlbGVj
dCIpLmh0bWwodmFsdWVPYmooIjxvcHRpb24+TzE8L29wdGlvbj48b3B0aW9uIHNlbGVjdGVkPSdz
ZWxlY3RlZCc+TzI8L29wdGlvbj48b3B0aW9uPk8zPC9vcHRpb24+IikpOworCWVxdWFscyggalF1
ZXJ5KCIjbWFpbiBzZWxlY3QiKS52YWwoKSwgIk8yIiwgIlNlbGVjdGVkIG9wdGlvbiBjb3JyZWN0
IiApOworCisJdmFyICRkaXYgPSBqUXVlcnkoJzxkaXYgLz4nKTsKKwllcXVhbHMoICRkaXYuaHRt
bCh2YWx1ZU9iaiggNSApKS5odG1sKCksICc1JywgJ1NldHRpbmcgYSBudW1iZXIgYXMgaHRtbCcg
KTsKKwllcXVhbHMoICRkaXYuaHRtbCh2YWx1ZU9iaiggMCApKS5odG1sKCksICcwJywgJ1NldHRp
bmcgYSB6ZXJvIGFzIGh0bWwnICk7CisKKwl2YXIgJGRpdjIgPSBqUXVlcnkoJzxkaXYvPicpLCBp
bnNlcnQgPSAiJmx0O2RpdiZndDtoZWxsbzEmbHQ7L2RpdiZndDsiOworCWVxdWFscyggJGRpdjIu
aHRtbChpbnNlcnQpLmh0bWwoKS5yZXBsYWNlKC8+L2csICImZ3Q7IiksIGluc2VydCwgIlZlcmlm
eSBlc2NhcGVkIGluc2VydGlvbi4iICk7CisJZXF1YWxzKCAkZGl2Mi5odG1sKCJ4IiArIGluc2Vy
dCkuaHRtbCgpLnJlcGxhY2UoLz4vZywgIiZndDsiKSwgIngiICsgaW5zZXJ0LCAiVmVyaWZ5IGVz
Y2FwZWQgaW5zZXJ0aW9uLiIgKTsKKwllcXVhbHMoICRkaXYyLmh0bWwoIiAiICsgaW5zZXJ0KS5o
dG1sKCkucmVwbGFjZSgvPi9nLCAiJmd0OyIpLCAiICIgKyBpbnNlcnQsICJWZXJpZnkgZXNjYXBl
ZCBpbnNlcnRpb24uIiApOworCisJdmFyIG1hcCA9IGpRdWVyeSgiPG1hcC8+IikuaHRtbCh2YWx1
ZU9iaigiPGFyZWEgaWQ9J21hcDAxJyBzaGFwZT0ncmVjdCcgY29vcmRzPSc1MCw1MCwxNTAsMTUw
JyBocmVmPSdodHRwOi8vd3d3LmpxdWVyeS5jb20vJyBhbHQ9J2pRdWVyeSc+IikpOworCisJZXF1
YWxzKCBtYXBbMF0uY2hpbGROb2Rlcy5sZW5ndGgsIDEsICJUaGUgYXJlYSB3YXMgaW5zZXJ0ZWQu
IiApOworCWVxdWFscyggbWFwWzBdLmZpcnN0Q2hpbGQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwg
ImFyZWEiLCAiVGhlIGFyZWEgd2FzIGluc2VydGVkLiIgKTsKKworCVFVbml0LnJlc2V0KCk7CisK
KwlqUXVlcnkoIiNtYWluIikuaHRtbCh2YWx1ZU9iaignPHNjcmlwdCB0eXBlPSJzb21ldGhpbmcv
ZWxzZSI+b2soIGZhbHNlLCAiTm9uLXNjcmlwdCBldmFsdWF0ZWQuIiApOzwvc2NyaXB0PjxzY3Jp
cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5vayggdHJ1ZSwgInRleHQvamF2YXNjcmlwdCBpcyBl
dmFsdWF0ZWQuIiApOzwvc2NyaXB0PjxzY3JpcHQ+b2soIHRydWUsICJObyB0eXBlIGlzIGV2YWx1
YXRlZC4iICk7PC9zY3JpcHQ+PGRpdj48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+b2so
IHRydWUsICJJbm5lciB0ZXh0L2phdmFzY3JpcHQgaXMgZXZhbHVhdGVkLiIgKTs8L3NjcmlwdD48
c2NyaXB0Pm9rKCB0cnVlLCAiSW5uZXIgTm8gdHlwZSBpcyBldmFsdWF0ZWQuIiApOzwvc2NyaXB0
PjxzY3JpcHQgdHlwZT0ic29tZXRoaW5nL2Vsc2UiPm9rKCBmYWxzZSwgIk5vbi1zY3JpcHQgZXZh
bHVhdGVkLiIgKTs8L3NjcmlwdD48L2Rpdj4nKSk7CisKKwlqUXVlcnkoIiNtYWluIikuaHRtbCh2
YWx1ZU9iaigiPHNjcmlwdD5vayggdHJ1ZSwgJ1Rlc3QgcmVwZWF0ZWQgaW5qZWN0aW9uIG9mIHNj
cmlwdC4nICk7PC9zY3JpcHQ+IikpOworCWpRdWVyeSgiI21haW4iKS5odG1sKHZhbHVlT2JqKCI8
c2NyaXB0Pm9rKCB0cnVlLCAnVGVzdCByZXBlYXRlZCBpbmplY3Rpb24gb2Ygc2NyaXB0LicgKTs8
L3NjcmlwdD4iKSk7CisJalF1ZXJ5KCIjbWFpbiIpLmh0bWwodmFsdWVPYmooIjxzY3JpcHQ+b2so
IHRydWUsICdUZXN0IHJlcGVhdGVkIGluamVjdGlvbiBvZiBzY3JpcHQuJyApOzwvc2NyaXB0PiIp
KTsKKworCWpRdWVyeSgiI21haW4iKS5odG1sKHZhbHVlT2JqKCc8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCI+b2soIHRydWUsICJqUXVlcnkoKS5odG1sKCkuZXZhbFNjcmlwdHMoKSBFdmFs
cyBTY3JpcHRzIFR3aWNlIGluIEZpcmVmb3gsIHNlZSAjOTc1ICgxKSIgKTs8L3NjcmlwdD4nKSk7
CisKKwlqUXVlcnkoIiNtYWluIikuaHRtbCh2YWx1ZU9iaignZm9vIDxmb3JtPjxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0Ij5vayggdHJ1ZSwgImpRdWVyeSgpLmh0bWwoKS5ldmFsU2NyaXB0
cygpIEV2YWxzIFNjcmlwdHMgVHdpY2UgaW4gRmlyZWZveCwgc2VlICM5NzUgKDIpIiApOzwvc2Ny
aXB0PjwvZm9ybT4nKSk7CisKKwlqUXVlcnkoIiNtYWluIikuaHRtbCh2YWx1ZU9iaigiPHNjcmlw
dD5lcXVhbHMoalF1ZXJ5LnNjcmlwdG9yZGVyKyssIDAsICdTY3JpcHQgaXMgZXhlY3V0ZWQgaW4g
b3JkZXInKTtlcXVhbHMoalF1ZXJ5KCcjc2NyaXB0b3JkZXInKS5sZW5ndGgsIDEsJ0V4ZWN1dGUg
YWZ0ZXIgaHRtbCAoZXZlbiB0aG91Z2ggYXBwZWFycyBiZWZvcmUpJyk8XC9zY3JpcHQ+PHNwYW4g
aWQ9J3NjcmlwdG9yZGVyJz48c2NyaXB0PmVxdWFscyhqUXVlcnkuc2NyaXB0b3JkZXIrKywgMSwg
J1NjcmlwdCAobmVzdGVkKSBpcyBleGVjdXRlZCBpbiBvcmRlcicpO2VxdWFscyhqUXVlcnkoJyNz
Y3JpcHRvcmRlcicpLmxlbmd0aCwgMSwnRXhlY3V0ZSBhZnRlciBodG1sJyk8XC9zY3JpcHQ+PC9z
cGFuPjxzY3JpcHQ+ZXF1YWxzKGpRdWVyeS5zY3JpcHRvcmRlcisrLCAyLCAnU2NyaXB0ICh1bm5l
c3RlZCkgaXMgZXhlY3V0ZWQgaW4gb3JkZXInKTtlcXVhbHMoalF1ZXJ5KCcjc2NyaXB0b3JkZXIn
KS5sZW5ndGgsIDEsJ0V4ZWN1dGUgYWZ0ZXIgaHRtbCcpPFwvc2NyaXB0PiIpKTsKK30KKwordGVz
dCgiaHRtbChTdHJpbmcpIiwgZnVuY3Rpb24oKSB7CisJdGVzdEh0bWwoYmFyZU9iaik7Cit9KTsK
KwordGVzdCgiaHRtbChGdW5jdGlvbikiLCBmdW5jdGlvbigpIHsKKwl0ZXN0SHRtbChmdW5jdGlv
blJldHVybmluZ09iaik7CisKKwlleHBlY3QoMzMpOworCisJUVVuaXQucmVzZXQoKTsKKworCWpR
dWVyeSgiI21haW4iKS5odG1sKGZ1bmN0aW9uKCl7CisJCXJldHVybiBqUXVlcnkodGhpcykudGV4
dCgpOworCX0pOworCisJb2soICEvPC8udGVzdCggalF1ZXJ5KCIjbWFpbiIpLmh0bWwoKSApLCAi
UmVwbGFjZSBodG1sIHdpdGggdGV4dC4iICk7CisJb2soIGpRdWVyeSgiI21haW4iKS5odG1sKCku
bGVuZ3RoID4gMCwgIk1ha2Ugc3VyZSB0ZXh0IGV4aXN0cy4iICk7Cit9KTsKKwordGVzdCgiaHRt
bChGdW5jdGlvbikgd2l0aCBpbmNvbWluZyB2YWx1ZSIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgy
MCk7CisKKwl2YXIgZGl2ID0galF1ZXJ5KCIjbWFpbiA+IGRpdiIpLCBvbGQgPSBkaXYubWFwKGZ1
bmN0aW9uKCl7IHJldHVybiBqUXVlcnkodGhpcykuaHRtbCgpIH0pOworCisJZGl2Lmh0bWwoZnVu
Y3Rpb24oaSwgdmFsKSB7CisJCWVxdWFscyggdmFsLCBvbGRbaV0sICJNYWtlIHN1cmUgdGhlIGlu
Y29taW5nIHZhbHVlIGlzIGNvcnJlY3QuIiApOworCQlyZXR1cm4gIjxiPnRlc3Q8L2I+IjsKKwl9
KTsKKworCXZhciBwYXNzID0gdHJ1ZTsKKwlkaXYuZWFjaChmdW5jdGlvbigpeworCQlpZiAoIHRo
aXMuY2hpbGROb2Rlcy5sZW5ndGggIT09IDEgKSB7CisJCQlwYXNzID0gZmFsc2U7CisJCX0KKwl9
KQorCW9rKCBwYXNzLCAiU2V0IEhUTUwiICk7CisKKwlRVW5pdC5yZXNldCgpOworCS8vIHVzaW5n
IGNvbnRlbnRzIHdpbGwgZ2V0IGNvbW1lbnRzIHJlZ3VsYXIsIHRleHQsIGFuZCBjb21tZW50IG5v
ZGVzCisJdmFyIGogPSBqUXVlcnkoIiNub25ub2RlcyIpLmNvbnRlbnRzKCk7CisJb2xkID0gai5t
YXAoZnVuY3Rpb24oKXsgcmV0dXJuIGpRdWVyeSh0aGlzKS5odG1sKCk7IH0pOworCisJai5odG1s
KGZ1bmN0aW9uKGksIHZhbCkgeworCQllcXVhbHMoIHZhbCwgb2xkW2ldLCAiTWFrZSBzdXJlIHRo
ZSBpbmNvbWluZyB2YWx1ZSBpcyBjb3JyZWN0LiIgKTsKKwkJcmV0dXJuICI8Yj5ib2xkPC9iPiI7
CisJfSk7CisKKwkvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgbm8gY29tbWVudCBpcyBpbiB0aGUg
ZG9jdW1lbnQKKwlpZiAoIGoubGVuZ3RoID09PSAyICkgeworCQllcXVhbHMoIG51bGwsIG51bGws
ICJNYWtlIHN1cmUgdGhlIGluY29taW5nIHZhbHVlIGlzIGNvcnJlY3QuIiApOworCX0KKworCWou
ZmluZCgnYicpLnJlbW92ZURhdGEoKTsKKwllcXVhbHMoIGouaHRtbCgpLnJlcGxhY2UoLyB4bWxu
cz0iW14iXSsiL2csICIiKS50b0xvd2VyQ2FzZSgpLCAiPGI+Ym9sZDwvYj4iLCAiQ2hlY2sgbm9k
ZSx0ZXh0bm9kZSxjb21tZW50IHdpdGggaHRtbCgpIiApOworCisJdmFyICRkaXYgPSBqUXVlcnko
JzxkaXYgLz4nKTsKKworCWVxdWFscyggJGRpdi5odG1sKGZ1bmN0aW9uKGksIHZhbCkgeworCQll
cXVhbHMoIHZhbCwgIiIsICJNYWtlIHN1cmUgdGhlIGluY29taW5nIHZhbHVlIGlzIGNvcnJlY3Qu
IiApOworCQlyZXR1cm4gNTsKKwl9KS5odG1sKCksICc1JywgJ1NldHRpbmcgYSBudW1iZXIgYXMg
aHRtbCcgKTsKKworCWVxdWFscyggJGRpdi5odG1sKGZ1bmN0aW9uKGksIHZhbCkgeworCQllcXVh
bHMoIHZhbCwgIjUiLCAiTWFrZSBzdXJlIHRoZSBpbmNvbWluZyB2YWx1ZSBpcyBjb3JyZWN0LiIg
KTsKKwkJcmV0dXJuIDA7CisJfSkuaHRtbCgpLCAnMCcsICdTZXR0aW5nIGEgemVybyBhcyBodG1s
JyApOworCisJdmFyICRkaXYyID0galF1ZXJ5KCc8ZGl2Lz4nKSwgaW5zZXJ0ID0gIiZsdDtkaXYm
Z3Q7aGVsbG8xJmx0Oy9kaXYmZ3Q7IjsKKwllcXVhbHMoICRkaXYyLmh0bWwoZnVuY3Rpb24oaSwg
dmFsKSB7CisJCWVxdWFscyggdmFsLCAiIiwgIk1ha2Ugc3VyZSB0aGUgaW5jb21pbmcgdmFsdWUg
aXMgY29ycmVjdC4iICk7CisJCXJldHVybiBpbnNlcnQ7CisJfSkuaHRtbCgpLnJlcGxhY2UoLz4v
ZywgIiZndDsiKSwgaW5zZXJ0LCAiVmVyaWZ5IGVzY2FwZWQgaW5zZXJ0aW9uLiIgKTsKKworCWVx
dWFscyggJGRpdjIuaHRtbChmdW5jdGlvbihpLCB2YWwpIHsKKwkJZXF1YWxzKCB2YWwucmVwbGFj
ZSgvPi9nLCAiJmd0OyIpLCBpbnNlcnQsICJNYWtlIHN1cmUgdGhlIGluY29taW5nIHZhbHVlIGlz
IGNvcnJlY3QuIiApOworCQlyZXR1cm4gIngiICsgaW5zZXJ0OworCX0pLmh0bWwoKS5yZXBsYWNl
KC8+L2csICImZ3Q7IiksICJ4IiArIGluc2VydCwgIlZlcmlmeSBlc2NhcGVkIGluc2VydGlvbi4i
ICk7CisKKwllcXVhbHMoICRkaXYyLmh0bWwoZnVuY3Rpb24oaSwgdmFsKSB7CisJCWVxdWFscygg
dmFsLnJlcGxhY2UoLz4vZywgIiZndDsiKSwgIngiICsgaW5zZXJ0LCAiTWFrZSBzdXJlIHRoZSBp
bmNvbWluZyB2YWx1ZSBpcyBjb3JyZWN0LiIgKTsKKwkJcmV0dXJuICIgIiArIGluc2VydDsKKwl9
KS5odG1sKCkucmVwbGFjZSgvPi9nLCAiJmd0OyIpLCAiICIgKyBpbnNlcnQsICJWZXJpZnkgZXNj
YXBlZCBpbnNlcnRpb24uIiApOworfSk7CisKK3ZhciB0ZXN0UmVtb3ZlID0gZnVuY3Rpb24obWV0
aG9kKSB7CisJZXhwZWN0KDkpOworCisJdmFyIGZpcnN0ID0galF1ZXJ5KCIjYXAiKS5jaGlsZHJl
bigiOmZpcnN0Iik7CisJZmlyc3QuZGF0YSgiZm9vIiwgImJhciIpOworCisJalF1ZXJ5KCIjYXAi
KS5jaGlsZHJlbigpW21ldGhvZF0oKTsKKwlvayggalF1ZXJ5KCIjYXAiKS50ZXh0KCkubGVuZ3Ro
ID4gMTAsICJDaGVjayB0ZXh0IGlzIG5vdCByZW1vdmVkIiApOworCWVxdWFscyggalF1ZXJ5KCIj
YXAiKS5jaGlsZHJlbigpLmxlbmd0aCwgMCwgIkNoZWNrIHJlbW92ZSIgKTsKKworCWVxdWFscygg
Zmlyc3QuZGF0YSgiZm9vIiksIG1ldGhvZCA9PSAicmVtb3ZlIiA/IG51bGwgOiAiYmFyIiApOwor
CisJUVVuaXQucmVzZXQoKTsKKwlqUXVlcnkoIiNhcCIpLmNoaWxkcmVuKClbbWV0aG9kXSgiYSIp
OworCW9rKCBqUXVlcnkoIiNhcCIpLnRleHQoKS5sZW5ndGggPiAxMCwgIkNoZWNrIHRleHQgaXMg
bm90IHJlbW92ZWQiICk7CisJZXF1YWxzKCBqUXVlcnkoIiNhcCIpLmNoaWxkcmVuKCkubGVuZ3Ro
LCAxLCAiQ2hlY2sgZmlsdGVyZWQgcmVtb3ZlIiApOworCisJalF1ZXJ5KCIjYXAiKS5jaGlsZHJl
bigpW21ldGhvZF0oImEsIGNvZGUiKTsKKwllcXVhbHMoIGpRdWVyeSgiI2FwIikuY2hpbGRyZW4o
KS5sZW5ndGgsIDAsICJDaGVjayBtdWx0aS1maWx0ZXJlZCByZW1vdmUiICk7CisKKwkvLyB1c2lu
ZyBjb250ZW50cyB3aWxsIGdldCBjb21tZW50cyByZWd1bGFyLCB0ZXh0LCBhbmQgY29tbWVudCBu
b2RlcworCS8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBubyBjb21tZW50IGlzIGluIHRoZSBkb2N1
bWVudAorCW9rKCBqUXVlcnkoIiNub25ub2RlcyIpLmNvbnRlbnRzKCkubGVuZ3RoID49IDIsICJD
aGVjayBub2RlLHRleHRub2RlLGNvbW1lbnQgcmVtb3ZlIHdvcmtzIiApOworCWpRdWVyeSgiI25v
bm5vZGVzIikuY29udGVudHMoKVttZXRob2RdKCk7CisJZXF1YWxzKCBqUXVlcnkoIiNub25ub2Rl
cyIpLmNvbnRlbnRzKCkubGVuZ3RoLCAwLCAiQ2hlY2sgbm9kZSx0ZXh0bm9kZSxjb21tZW50IHJl
bW92ZSB3b3JrcyIgKTsKKworCS8vIG1hbnVhbGx5IGNsZWFuIHVwIGRldGFjaGVkIGVsZW1lbnRz
CisJaWYgKG1ldGhvZCA9PT0gImRldGFjaCIpIHsKKwkJZmlyc3QucmVtb3ZlKCk7CisJfQorCisJ
UVVuaXQucmVzZXQoKTsKKworCXZhciBjb3VudCA9IDA7CisJdmFyIGZpcnN0ID0galF1ZXJ5KCIj
YXAiKS5jaGlsZHJlbigiOmZpcnN0Iik7CisJdmFyIGNsZWFuVXAgPSBmaXJzdC5jbGljayhmdW5j
dGlvbigpIHsgY291bnQrKyB9KVttZXRob2RdKCkuYXBwZW5kVG8oIiNtYWluIikuY2xpY2soKTsK
KworCWVxdWFscyggbWV0aG9kID09ICJyZW1vdmUiID8gMCA6IDEsIGNvdW50ICk7CisKKwkvLyBt
YW51YWxseSBjbGVhbiB1cCBkZXRhY2hlZCBlbGVtZW50cworCWNsZWFuVXAucmVtb3ZlKCk7Cit9
OworCit0ZXN0KCJyZW1vdmUoKSIsIGZ1bmN0aW9uKCkgeworCXRlc3RSZW1vdmUoInJlbW92ZSIp
OworfSk7CisKK3Rlc3QoImRldGFjaCgpIiwgZnVuY3Rpb24oKSB7CisJdGVzdFJlbW92ZSgiZGV0
YWNoIik7Cit9KTsKKwordGVzdCgiZW1wdHkoKSIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgzKTsK
KwllcXVhbHMoIGpRdWVyeSgiI2FwIikuY2hpbGRyZW4oKS5lbXB0eSgpLnRleHQoKS5sZW5ndGgs
IDAsICJDaGVjayB0ZXh0IGlzIHJlbW92ZWQiICk7CisJZXF1YWxzKCBqUXVlcnkoIiNhcCIpLmNo
aWxkcmVuKCkubGVuZ3RoLCA0LCAiQ2hlY2sgZWxlbWVudHMgYXJlIG5vdCByZW1vdmVkIiApOwor
CisJLy8gdXNpbmcgY29udGVudHMgd2lsbCBnZXQgY29tbWVudHMgcmVndWxhciwgdGV4dCwgYW5k
IGNvbW1lbnQgbm9kZXMKKwl2YXIgaiA9IGpRdWVyeSgiI25vbm5vZGVzIikuY29udGVudHMoKTsK
KwlqLmVtcHR5KCk7CisJZXF1YWxzKCBqLmh0bWwoKSwgIiIsICJDaGVjayBub2RlLHRleHRub2Rl
LGNvbW1lbnQgZW1wdHkgd29ya3MiICk7Cit9KTsKKwordGVzdCgialF1ZXJ5LmNsZWFuRGF0YSIs
IGZ1bmN0aW9uKCkgeworCWV4cGVjdCgxNCk7CisKKwl2YXIgdHlwZSwgcG9zLCBkaXYsIGNoaWxk
OworCisJdHlwZSA9ICJyZW1vdmUiOworCisJLy8gU2hvdWxkIHRyaWdnZXIgNCByZW1vdmUgZXZl
bnQKKwlkaXYgPSBnZXREaXYoKS5yZW1vdmUoKTsKKworCS8vIFNob3VsZCBib3RoIGRvIG5vdGhp
bmcKKwlwb3MgPSAiT3V0ZXIiOworCWRpdi50cmlnZ2VyKCJjbGljayIpOworCisJcG9zID0gIklu
bmVyIjsKKwlkaXYuY2hpbGRyZW4oKS50cmlnZ2VyKCJjbGljayIpOworCisJdHlwZSA9ICJlbXB0
eSI7CisJZGl2ID0gZ2V0RGl2KCk7CisJY2hpbGQgPSBkaXYuY2hpbGRyZW4oKTsKKworCS8vIFNo
b3VsZCB0cmlnZ2VyIDIgcmVtb3ZlIGV2ZW50CisJZGl2LmVtcHR5KCk7CisKKwkvLyBTaG91bGQg
dHJpZ2dlciAxCisJcG9zID0gIk91dGVyIjsKKwlkaXYudHJpZ2dlcigiY2xpY2siKTsKKworCS8v
IFNob3VsZCBkbyBub3RoaW5nCisJcG9zID0gIklubmVyIjsKKwljaGlsZC50cmlnZ2VyKCJjbGlj
ayIpOworCisJLy8gU2hvdWxkIHRyaWdnZXIgMgorCWRpdi5yZW1vdmUoKTsKKworCXR5cGUgPSAi
aHRtbCI7CisKKwlkaXYgPSBnZXREaXYoKTsKKwljaGlsZCA9IGRpdi5jaGlsZHJlbigpOworCisJ
Ly8gU2hvdWxkIHRyaWdnZXIgMiByZW1vdmUgZXZlbnQKKwlkaXYuaHRtbCgiPGRpdj48L2Rpdj4i
KTsKKworCS8vIFNob3VsZCB0cmlnZ2VyIDEKKwlwb3MgPSAiT3V0ZXIiOworCWRpdi50cmlnZ2Vy
KCJjbGljayIpOworCisJLy8gU2hvdWxkIGRvIG5vdGhpbmcKKwlwb3MgPSAiSW5uZXIiOworCWNo
aWxkLnRyaWdnZXIoImNsaWNrIik7CisKKwkvLyBTaG91bGQgdHJpZ2dlciAyCisJZGl2LnJlbW92
ZSgpOworCisJZnVuY3Rpb24gZ2V0RGl2KCkgeworCQl2YXIgZGl2ID0galF1ZXJ5KCI8ZGl2IGNs
YXNzPSdvdXRlcic+PGRpdiBjbGFzcz0naW5uZXInPjwvZGl2PjwvZGl2PiIpLmNsaWNrKGZ1bmN0
aW9uKCl7CisJCQlvayggdHJ1ZSwgdHlwZSArICIgIiArIHBvcyArICIgQ2xpY2sgZXZlbnQgZmly
ZWQuIiApOworCQl9KS5mb2N1cyhmdW5jdGlvbigpeworCQkJb2soIHRydWUsIHR5cGUgKyAiICIg
KyBwb3MgKyAiIEZvY3VzIGV2ZW50IGZpcmVkLiIgKTsKKwkJfSkuZmluZCgiZGl2IikuY2xpY2so
ZnVuY3Rpb24oKXsKKwkJCW9rKCBmYWxzZSwgdHlwZSArICIgIiArIHBvcyArICIgQ2xpY2sgZXZl
bnQgZmlyZWQuIiApOworCQl9KS5mb2N1cyhmdW5jdGlvbigpeworCQkJb2soIGZhbHNlLCB0eXBl
ICsgIiAiICsgcG9zICsgIiBGb2N1cyBldmVudCBmaXJlZC4iICk7CisJCX0pLmVuZCgpLmFwcGVu
ZFRvKCJib2R5Iik7CisKKwkJZGl2WzBdLmRldGFjaEV2ZW50ID0gZGl2WzBdLnJlbW92ZUV2ZW50
TGlzdGVuZXIgPSBmdW5jdGlvbih0KXsKKwkJCW9rKCB0cnVlLCB0eXBlICsgIiBPdXRlciAiICsg
dCArICIgZXZlbnQgdW5ib3VuZCIgKTsKKwkJfTsKKworCQlkaXZbMF0uZmlyc3RDaGlsZC5kZXRh
Y2hFdmVudCA9IGRpdlswXS5maXJzdENoaWxkLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlv
bih0KXsKKwkJCW9rKCB0cnVlLCB0eXBlICsgIiBJbm5lciAiICsgdCArICIgZXZlbnQgdW5ib3Vu
ZCIgKTsKKwkJfTsKKworCQlyZXR1cm4gZGl2OworCX0KK30pOworCit0ZXN0KCJqUXVlcnkuYnVp
bGRGcmFnbWVudCAtIG5vIHBsYWluLXRleHQgY2FjaGluZyAoQnVnICM2Nzc5KSIsIGZ1bmN0aW9u
KCkgeworCWV4cGVjdCgxKTsKKworCS8vIERPTSBtYW5pcHVsYXRpb24gZmFpbHMgaWYgYWRkZWQg
dGV4dCBtYXRjaGVzIGFuIE9iamVjdCBtZXRob2QKKwl2YXIgJGYgPSBqUXVlcnkoICI8ZGl2IC8+
IiApLmFwcGVuZFRvKCAiI21haW4iICksCisJCWJhZCA9IFsgInN0YXJ0LSIsICJ0b1N0cmluZyIs
ICJoYXNPd25Qcm9wZXJ0eSIsICJhcHBlbmQiLCAiaGVyZSZ0aGVyZSEiLCAiLWVuZCIgXTsKKwor
CWZvciAoIHZhciBpPTA7IGkgPCBiYWQubGVuZ3RoOyBpKysgKSB7CisJCXRyeSB7CisJCQkkZi5h
cHBlbmQoIGJhZFtpXSApOworCQl9CisJCWNhdGNoKGUpIHt9CisJfQorICAgIGVxdWFscygkZi50
ZXh0KCksIGJhZC5qb2luKCcnKSwgIkNhY2hlZCBzdHJpbmdzIHRoYXQgbWF0Y2ggT2JqZWN0IHBy
b3BlcnRpZXMiKTsKKwkkZi5yZW1vdmUoKTsKK30pOwoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5
b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L3VuaXQvbWFuaXB1bGF0aW9uLmpzCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB5ZXMKCkluZGV4OiBMYXlvdXRUZXN0cy9qcXVl
cnkvcmVzb3VyY2VzL3Rlc3QvdW5pdC9vZmZzZXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L3VuaXQvb2Zmc2V0LmpzCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L3VuaXQvb2Zmc2V0LmpzCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDQ1NSBAQAorbW9kdWxlKCJvZmZzZXQiLCB7IHRlYXJkb3duOiBtb2R1
bGVUZWFyZG93biB9KTsKKwordGVzdCgiZGlzY29ubmVjdGVkIG5vZGUiLCBmdW5jdGlvbigpIHsK
KwlleHBlY3QoMik7CisKKwl2YXIgcmVzdWx0ID0galF1ZXJ5KCBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKSApLm9mZnNldCgpOworCisJZXF1YWxzKCByZXN1bHQudG9wLCAwLCAiQ2hlY2sg
dG9wIiApOworCWVxdWFscyggcmVzdWx0LmxlZnQsIDAsICJDaGVjayBsZWZ0IiApOworfSk7CisK
K3ZhciBzdXBwb3J0c1Njcm9sbCA9IGZhbHNlOworCit0ZXN0b2Zmc2V0KCJhYnNvbHV0ZSIvKiBp
biBpZnJhbWUgKi8sIGZ1bmN0aW9uKCQsIGlmcmFtZSkgeworCWV4cGVjdCg0KTsKKworCXZhciBk
b2MgPSBpZnJhbWUuZG9jdW1lbnQsIHRlc3RzOworCisJLy8gZm9yY2UgYSBzY3JvbGwgdmFsdWUg
b24gdGhlIG1haW4gd2luZG93CisJLy8gdGhpcyBpbnN1cmVzIHRoYXQgdGhlIHJlc3VsdHMgd2ls
bCBiZSB3cm9uZworCS8vIGlmIHRoZSBvZmZzZXQgbWV0aG9kIGlzIHVzaW5nIHRoZSBzY3JvbGwg
b2Zmc2V0CisJLy8gb2YgdGhlIHBhcmVudCB3aW5kb3cKKwl2YXIgZm9yY2VTY3JvbGwgPSBqUXVl
cnkoJzxkaXY+JywgeyB3aWR0aDogMjAwMCwgaGVpZ2h0OiAyMDAwIH0pLmFwcGVuZFRvKCdib2R5
Jyk7CisJd2luZG93LnNjcm9sbFRvKDIwMCwgMjAwKTsKKworCWlmICggZG9jdW1lbnQuZG9jdW1l
bnRFbGVtZW50LnNjcm9sbFRvcCB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCApIHsKKwkJc3Vw
cG9ydHNTY3JvbGwgPSB0cnVlOworCX0KKworCXdpbmRvdy5zY3JvbGxUbygxLCAxKTsKKworCS8v
IGdldCBvZmZzZXQKKwl0ZXN0cyA9IFsKKwkJeyBpZDogJyNhYnNvbHV0ZS0xJywgdG9wOiAxLCBs
ZWZ0OiAxIH0KKwldOworCWpRdWVyeS5lYWNoKCB0ZXN0cywgZnVuY3Rpb24oKSB7CisJCWVxdWFs
cyggalF1ZXJ5KCB0aGlzLmlkLCBkb2MgKS5vZmZzZXQoKS50b3AsICB0aGlzLnRvcCwgICJqUXVl
cnkoJyIgKyB0aGlzLmlkICsgIicpLm9mZnNldCgpLnRvcCIgKTsKKwkJZXF1YWxzKCBqUXVlcnko
IHRoaXMuaWQsIGRvYyApLm9mZnNldCgpLmxlZnQsIHRoaXMubGVmdCwgImpRdWVyeSgnIiArIHRo
aXMuaWQgKyAiJykub2Zmc2V0KCkubGVmdCIgKTsKKwl9KTsKKworCisJLy8gZ2V0IHBvc2l0aW9u
CisJdGVzdHMgPSBbCisJCXsgaWQ6ICcjYWJzb2x1dGUtMScsIHRvcDogMCwgbGVmdDogMCB9CisJ
XTsKKwlqUXVlcnkuZWFjaCggdGVzdHMsIGZ1bmN0aW9uKCkgeworCQllcXVhbHMoIGpRdWVyeSgg
dGhpcy5pZCwgZG9jICkucG9zaXRpb24oKS50b3AsICB0aGlzLnRvcCwgICJqUXVlcnkoJyIgKyB0
aGlzLmlkICsgIicpLnBvc2l0aW9uKCkudG9wIiApOworCQllcXVhbHMoIGpRdWVyeSggdGhpcy5p
ZCwgZG9jICkucG9zaXRpb24oKS5sZWZ0LCB0aGlzLmxlZnQsICJqUXVlcnkoJyIgKyB0aGlzLmlk
ICsgIicpLnBvc2l0aW9uKCkubGVmdCIgKTsKKwl9KTsKKworCWZvcmNlU2Nyb2xsLnJlbW92ZSgp
OworfSk7CisKK3Rlc3RvZmZzZXQoImFic29sdXRlIiwgZnVuY3Rpb24oIGpRdWVyeSApIHsKKwll
eHBlY3QoMTc4KTsKKworCS8vIGdldCBvZmZzZXQgdGVzdHMKKwl2YXIgdGVzdHMgPSBbCisJCXsg
aWQ6ICcjYWJzb2x1dGUtMScsICAgICB0b3A6ICAxLCBsZWZ0OiAgMSB9LAorCQl7IGlkOiAnI2Fi
c29sdXRlLTEtMScsICAgdG9wOiAgNSwgbGVmdDogIDUgfSwKKwkJeyBpZDogJyNhYnNvbHV0ZS0x
LTEtMScsIHRvcDogIDksIGxlZnQ6ICA5IH0sCisJCXsgaWQ6ICcjYWJzb2x1dGUtMicsICAgICB0
b3A6IDIwLCBsZWZ0OiAyMCB9CisJXTsKKwlqUXVlcnkuZWFjaCggdGVzdHMsIGZ1bmN0aW9uKCkg
eworCQllcXVhbHMoIGpRdWVyeSggdGhpcy5pZCApLm9mZnNldCgpLnRvcCwgIHRoaXMudG9wLCAg
ImpRdWVyeSgnIiArIHRoaXMuaWQgKyAiJykub2Zmc2V0KCkudG9wIiApOworCQllcXVhbHMoIGpR
dWVyeSggdGhpcy5pZCApLm9mZnNldCgpLmxlZnQsIHRoaXMubGVmdCwgImpRdWVyeSgnIiArIHRo
aXMuaWQgKyAiJykub2Zmc2V0KCkubGVmdCIgKTsKKwl9KTsKKworCisJLy8gZ2V0IHBvc2l0aW9u
CisJdGVzdHMgPSBbCisJCXsgaWQ6ICcjYWJzb2x1dGUtMScsICAgICB0b3A6ICAwLCBsZWZ0OiAg
MCB9LAorCQl7IGlkOiAnI2Fic29sdXRlLTEtMScsICAgdG9wOiAgMSwgbGVmdDogIDEgfSwKKwkJ
eyBpZDogJyNhYnNvbHV0ZS0xLTEtMScsIHRvcDogIDEsIGxlZnQ6ICAxIH0sCisJCXsgaWQ6ICcj
YWJzb2x1dGUtMicsICAgICB0b3A6IDE5LCBsZWZ0OiAxOSB9CisJXTsKKwlqUXVlcnkuZWFjaCgg
dGVzdHMsIGZ1bmN0aW9uKCkgeworCQllcXVhbHMoIGpRdWVyeSggdGhpcy5pZCApLnBvc2l0aW9u
KCkudG9wLCAgdGhpcy50b3AsICAialF1ZXJ5KCciICsgdGhpcy5pZCArICInKS5wb3NpdGlvbigp
LnRvcCIgKTsKKwkJZXF1YWxzKCBqUXVlcnkoIHRoaXMuaWQgKS5wb3NpdGlvbigpLmxlZnQsIHRo
aXMubGVmdCwgImpRdWVyeSgnIiArIHRoaXMuaWQgKyAiJykucG9zaXRpb24oKS5sZWZ0IiApOwor
CX0pOworCisJLy8gdGVzdCAjNTc4MQorCXZhciBvZmZzZXQgPSBqUXVlcnkoICcjcG9zaXRpb25U
ZXN0JyApLm9mZnNldCh7IHRvcDogMTAsIGxlZnQ6IDEwIH0pLm9mZnNldCgpOworCWVxdWFscygg
b2Zmc2V0LnRvcCwgIDEwLCAiU2V0dGluZyBvZmZzZXQgb24gZWxlbWVudCB3aXRoIHBvc2l0aW9u
IGFic29sdXRlIGJ1dCAnYXV0bycgdmFsdWVzLiIgKQorCWVxdWFscyggb2Zmc2V0LmxlZnQsIDEw
LCAiU2V0dGluZyBvZmZzZXQgb24gZWxlbWVudCB3aXRoIHBvc2l0aW9uIGFic29sdXRlIGJ1dCAn
YXV0bycgdmFsdWVzLiIgKQorCisKKwkvLyBzZXQgb2Zmc2V0CisJdGVzdHMgPSBbCisJCXsgaWQ6
ICcjYWJzb2x1dGUtMicsICAgICB0b3A6IDMwLCBsZWZ0OiAzMCB9LAorCQl7IGlkOiAnI2Fic29s
dXRlLTInLCAgICAgdG9wOiAxMCwgbGVmdDogMTAgfSwKKwkJeyBpZDogJyNhYnNvbHV0ZS0yJywg
ICAgIHRvcDogLTEsIGxlZnQ6IC0xIH0sCisJCXsgaWQ6ICcjYWJzb2x1dGUtMicsICAgICB0b3A6
IDE5LCBsZWZ0OiAxOSB9LAorCQl7IGlkOiAnI2Fic29sdXRlLTEtMS0xJywgdG9wOiAxNSwgbGVm
dDogMTUgfSwKKwkJeyBpZDogJyNhYnNvbHV0ZS0xLTEtMScsIHRvcDogIDUsIGxlZnQ6ICA1IH0s
CisJCXsgaWQ6ICcjYWJzb2x1dGUtMS0xLTEnLCB0b3A6IC0xLCBsZWZ0OiAtMSB9LAorCQl7IGlk
OiAnI2Fic29sdXRlLTEtMS0xJywgdG9wOiAgOSwgbGVmdDogIDkgfSwKKwkJeyBpZDogJyNhYnNv
bHV0ZS0xLTEnLCAgIHRvcDogMTAsIGxlZnQ6IDEwIH0sCisJCXsgaWQ6ICcjYWJzb2x1dGUtMS0x
JywgICB0b3A6ICAwLCBsZWZ0OiAgMCB9LAorCQl7IGlkOiAnI2Fic29sdXRlLTEtMScsICAgdG9w
OiAtMSwgbGVmdDogLTEgfSwKKwkJeyBpZDogJyNhYnNvbHV0ZS0xLTEnLCAgIHRvcDogIDUsIGxl
ZnQ6ICA1IH0sCisJCXsgaWQ6ICcjYWJzb2x1dGUtMScsICAgICB0b3A6ICAyLCBsZWZ0OiAgMiB9
LAorCQl7IGlkOiAnI2Fic29sdXRlLTEnLCAgICAgdG9wOiAgMCwgbGVmdDogIDAgfSwKKwkJeyBp
ZDogJyNhYnNvbHV0ZS0xJywgICAgIHRvcDogLTEsIGxlZnQ6IC0xIH0sCisJCXsgaWQ6ICcjYWJz
b2x1dGUtMScsICAgICB0b3A6ICAxLCBsZWZ0OiAgMSB9CisJXTsKKwlqUXVlcnkuZWFjaCggdGVz
dHMsIGZ1bmN0aW9uKCkgeworCQlqUXVlcnkoIHRoaXMuaWQgKS5vZmZzZXQoeyB0b3A6IHRoaXMu
dG9wLCBsZWZ0OiB0aGlzLmxlZnQgfSk7CisJCWVxdWFscyggalF1ZXJ5KCB0aGlzLmlkICkub2Zm
c2V0KCkudG9wLCAgdGhpcy50b3AsICAialF1ZXJ5KCciICsgdGhpcy5pZCArICInKS5vZmZzZXQo
eyB0b3A6ICIgICsgdGhpcy50b3AgICsgIiB9KSIgKTsKKwkJZXF1YWxzKCBqUXVlcnkoIHRoaXMu
aWQgKS5vZmZzZXQoKS5sZWZ0LCB0aGlzLmxlZnQsICJqUXVlcnkoJyIgKyB0aGlzLmlkICsgIicp
Lm9mZnNldCh7IGxlZnQ6ICIgKyB0aGlzLmxlZnQgKyAiIH0pIiApOworCisJCXZhciB0b3AgPSB0
aGlzLnRvcCwgbGVmdCA9IHRoaXMubGVmdDsKKworCQlqUXVlcnkoIHRoaXMuaWQgKS5vZmZzZXQo
ZnVuY3Rpb24oaSwgdmFsKXsKKwkJCWVxdWFscyggdmFsLnRvcCwgdG9wLCAiVmVyaWZ5IGluY29t
aW5nIHRvcCBwb3NpdGlvbi4iICk7CisJCQllcXVhbHMoIHZhbC5sZWZ0LCBsZWZ0LCAiVmVyaWZ5
IGluY29taW5nIHRvcCBwb3NpdGlvbi4iICk7CisJCQlyZXR1cm4geyB0b3A6IHRvcCArIDEsIGxl
ZnQ6IGxlZnQgKyAxIH07CisJCX0pOworCQllcXVhbHMoIGpRdWVyeSggdGhpcy5pZCApLm9mZnNl
dCgpLnRvcCwgIHRoaXMudG9wICArIDEsICJqUXVlcnkoJyIgKyB0aGlzLmlkICsgIicpLm9mZnNl
dCh7IHRvcDogIiAgKyAodGhpcy50b3AgICsgMSkgKyAiIH0pIiApOworCQllcXVhbHMoIGpRdWVy
eSggdGhpcy5pZCApLm9mZnNldCgpLmxlZnQsIHRoaXMubGVmdCArIDEsICJqUXVlcnkoJyIgKyB0
aGlzLmlkICsgIicpLm9mZnNldCh7IGxlZnQ6ICIgKyAodGhpcy5sZWZ0ICsgMSkgKyAiIH0pIiAp
OworCisJCWpRdWVyeSggdGhpcy5pZCApCisJCQkub2Zmc2V0KHsgbGVmdDogdGhpcy5sZWZ0ICsg
MiB9KQorCQkJLm9mZnNldCh7IHRvcDogIHRoaXMudG9wICArIDIgfSk7CisJCWVxdWFscyggalF1
ZXJ5KCB0aGlzLmlkICkub2Zmc2V0KCkudG9wLCAgdGhpcy50b3AgICsgMiwgIlNldHRpbmcgb25l
IHByb3BlcnR5IGF0IGEgdGltZS4iICk7CisJCWVxdWFscyggalF1ZXJ5KCB0aGlzLmlkICkub2Zm
c2V0KCkubGVmdCwgdGhpcy5sZWZ0ICsgMiwgIlNldHRpbmcgb25lIHByb3BlcnR5IGF0IGEgdGlt
ZS4iICk7CisKKwkJalF1ZXJ5KCB0aGlzLmlkICkub2Zmc2V0KHsgdG9wOiB0aGlzLnRvcCwgbGVm
dDogdGhpcy5sZWZ0LCB1c2luZzogZnVuY3Rpb24oIHByb3BzICkgeworCQkJalF1ZXJ5KCB0aGlz
ICkuY3NzKHsKKwkJCQl0b3A6ICBwcm9wcy50b3AgICsgMSwKKwkJCQlsZWZ0OiBwcm9wcy5sZWZ0
ICsgMQorCQkJfSk7CisJCX19KTsKKwkJZXF1YWxzKCBqUXVlcnkoIHRoaXMuaWQgKS5vZmZzZXQo
KS50b3AsICB0aGlzLnRvcCAgKyAxLCAialF1ZXJ5KCciICsgdGhpcy5pZCArICInKS5vZmZzZXQo
eyB0b3A6ICIgICsgKHRoaXMudG9wICArIDEpICsgIiwgdXNpbmc6IGZuIH0pIiApOworCQllcXVh
bHMoIGpRdWVyeSggdGhpcy5pZCApLm9mZnNldCgpLmxlZnQsIHRoaXMubGVmdCArIDEsICJqUXVl
cnkoJyIgKyB0aGlzLmlkICsgIicpLm9mZnNldCh7IGxlZnQ6ICIgKyAodGhpcy5sZWZ0ICsgMSkg
KyAiLCB1c2luZzogZm4gfSkiICk7CisJfSk7Cit9KTsKKwordGVzdG9mZnNldCgicmVsYXRpdmUi
LCBmdW5jdGlvbiggalF1ZXJ5ICkgeworCWV4cGVjdCg2MCk7CisKKwkvLyBJRSBpcyBjb2xsYXBz
aW5nIHRoZSB0b3AgbWFyZ2luIG9mIDFweAorCXZhciBpZSA9IGpRdWVyeS5icm93c2VyLm1zaWUg
JiYgcGFyc2VJbnQoIGpRdWVyeS5icm93c2VyLnZlcnNpb24sIDEwICkgPCA4OworCisJLy8gZ2V0
IG9mZnNldAorCXZhciB0ZXN0cyA9IFsKKwkJeyBpZDogJyNyZWxhdGl2ZS0xJywgICB0b3A6IGll
ID8gICA2IDogICA3LCBsZWZ0OiAgNyB9LAorCQl7IGlkOiAnI3JlbGF0aXZlLTEtMScsIHRvcDog
aWUgPyAgMTMgOiAgMTUsIGxlZnQ6IDE1IH0sCisJCXsgaWQ6ICcjcmVsYXRpdmUtMicsICAgdG9w
OiBpZSA/IDE0MSA6IDE0MiwgbGVmdDogMjcgfQorCV07CisJalF1ZXJ5LmVhY2goIHRlc3RzLCBm
dW5jdGlvbigpIHsKKwkJZXF1YWxzKCBqUXVlcnkoIHRoaXMuaWQgKS5vZmZzZXQoKS50b3AsICB0
aGlzLnRvcCwgICJqUXVlcnkoJyIgKyB0aGlzLmlkICsgIicpLm9mZnNldCgpLnRvcCIgKTsKKwkJ
ZXF1YWxzKCBqUXVlcnkoIHRoaXMuaWQgKS5vZmZzZXQoKS5sZWZ0LCB0aGlzLmxlZnQsICJqUXVl
cnkoJyIgKyB0aGlzLmlkICsgIicpLm9mZnNldCgpLmxlZnQiICk7CisJfSk7CisKKworCS8vIGdl
dCBwb3NpdGlvbgorCXRlc3RzID0gWworCQl7IGlkOiAnI3JlbGF0aXZlLTEnLCAgIHRvcDogaWUg
PyAgIDUgOiAgIDYsIGxlZnQ6ICA2IH0sCisJCXsgaWQ6ICcjcmVsYXRpdmUtMS0xJywgdG9wOiBp
ZSA/ICAgNCA6ICAgNSwgbGVmdDogIDUgfSwKKwkJeyBpZDogJyNyZWxhdGl2ZS0yJywgICB0b3A6
IGllID8gMTQwIDogMTQxLCBsZWZ0OiAyNiB9CisJXTsKKwlqUXVlcnkuZWFjaCggdGVzdHMsIGZ1
bmN0aW9uKCkgeworCQllcXVhbHMoIGpRdWVyeSggdGhpcy5pZCApLnBvc2l0aW9uKCkudG9wLCAg
dGhpcy50b3AsICAialF1ZXJ5KCciICsgdGhpcy5pZCArICInKS5wb3NpdGlvbigpLnRvcCIgKTsK
KwkJZXF1YWxzKCBqUXVlcnkoIHRoaXMuaWQgKS5wb3NpdGlvbigpLmxlZnQsIHRoaXMubGVmdCwg
ImpRdWVyeSgnIiArIHRoaXMuaWQgKyAiJykucG9zaXRpb24oKS5sZWZ0IiApOworCX0pOworCisK
KwkvLyBzZXQgb2Zmc2V0CisJdGVzdHMgPSBbCisJCXsgaWQ6ICcjcmVsYXRpdmUtMicsICAgdG9w
OiAyMDAsIGxlZnQ6ICA1MCB9LAorCQl7IGlkOiAnI3JlbGF0aXZlLTInLCAgIHRvcDogMTAwLCBs
ZWZ0OiAgMTAgfSwKKwkJeyBpZDogJyNyZWxhdGl2ZS0yJywgICB0b3A6ICAtNSwgbGVmdDogIC01
IH0sCisJCXsgaWQ6ICcjcmVsYXRpdmUtMicsICAgdG9wOiAxNDIsIGxlZnQ6ICAyNyB9LAorCQl7
IGlkOiAnI3JlbGF0aXZlLTEtMScsIHRvcDogMTAwLCBsZWZ0OiAxMDAgfSwKKwkJeyBpZDogJyNy
ZWxhdGl2ZS0xLTEnLCB0b3A6ICAgNSwgbGVmdDogICA1IH0sCisJCXsgaWQ6ICcjcmVsYXRpdmUt
MS0xJywgdG9wOiAgLTEsIGxlZnQ6ICAtMSB9LAorCQl7IGlkOiAnI3JlbGF0aXZlLTEtMScsIHRv
cDogIDE1LCBsZWZ0OiAgMTUgfSwKKwkJeyBpZDogJyNyZWxhdGl2ZS0xJywgICB0b3A6IDEwMCwg
bGVmdDogMTAwIH0sCisJCXsgaWQ6ICcjcmVsYXRpdmUtMScsICAgdG9wOiAgIDAsIGxlZnQ6ICAg
MCB9LAorCQl7IGlkOiAnI3JlbGF0aXZlLTEnLCAgIHRvcDogIC0xLCBsZWZ0OiAgLTEgfSwKKwkJ
eyBpZDogJyNyZWxhdGl2ZS0xJywgICB0b3A6ICAgNywgbGVmdDogICA3IH0KKwldOworCWpRdWVy
eS5lYWNoKCB0ZXN0cywgZnVuY3Rpb24oKSB7CisJCWpRdWVyeSggdGhpcy5pZCApLm9mZnNldCh7
IHRvcDogdGhpcy50b3AsIGxlZnQ6IHRoaXMubGVmdCB9KTsKKwkJZXF1YWxzKCBqUXVlcnkoIHRo
aXMuaWQgKS5vZmZzZXQoKS50b3AsICB0aGlzLnRvcCwgICJqUXVlcnkoJyIgKyB0aGlzLmlkICsg
IicpLm9mZnNldCh7IHRvcDogIiAgKyB0aGlzLnRvcCAgKyAiIH0pIiApOworCQllcXVhbHMoIGpR
dWVyeSggdGhpcy5pZCApLm9mZnNldCgpLmxlZnQsIHRoaXMubGVmdCwgImpRdWVyeSgnIiArIHRo
aXMuaWQgKyAiJykub2Zmc2V0KHsgbGVmdDogIiArIHRoaXMubGVmdCArICIgfSkiICk7CisKKwkJ
alF1ZXJ5KCB0aGlzLmlkICkub2Zmc2V0KHsgdG9wOiB0aGlzLnRvcCwgbGVmdDogdGhpcy5sZWZ0
LCB1c2luZzogZnVuY3Rpb24oIHByb3BzICkgeworCQkJalF1ZXJ5KCB0aGlzICkuY3NzKHsKKwkJ
CQl0b3A6ICBwcm9wcy50b3AgICsgMSwKKwkJCQlsZWZ0OiBwcm9wcy5sZWZ0ICsgMQorCQkJfSk7
CisJCX19KTsKKwkJZXF1YWxzKCBqUXVlcnkoIHRoaXMuaWQgKS5vZmZzZXQoKS50b3AsICB0aGlz
LnRvcCAgKyAxLCAialF1ZXJ5KCciICsgdGhpcy5pZCArICInKS5vZmZzZXQoeyB0b3A6ICIgICsg
KHRoaXMudG9wICArIDEpICsgIiwgdXNpbmc6IGZuIH0pIiApOworCQllcXVhbHMoIGpRdWVyeSgg
dGhpcy5pZCApLm9mZnNldCgpLmxlZnQsIHRoaXMubGVmdCArIDEsICJqUXVlcnkoJyIgKyB0aGlz
LmlkICsgIicpLm9mZnNldCh7IGxlZnQ6ICIgKyAodGhpcy5sZWZ0ICsgMSkgKyAiLCB1c2luZzog
Zm4gfSkiICk7CisJfSk7Cit9KTsKKwordGVzdG9mZnNldCgic3RhdGljIiwgZnVuY3Rpb24oIGpR
dWVyeSApIHsKKwlleHBlY3QoODApOworCisJLy8gSUUgaXMgY29sbGFwc2luZyB0aGUgdG9wIG1h
cmdpbiBvZiAxcHgKKwl2YXIgaWUgPSBqUXVlcnkuYnJvd3Nlci5tc2llICYmIHBhcnNlSW50KCBq
UXVlcnkuYnJvd3Nlci52ZXJzaW9uLCAxMCApIDwgODsKKworCS8vIGdldCBvZmZzZXQKKwl2YXIg
dGVzdHMgPSBbCisJCXsgaWQ6ICcjc3RhdGljLTEnLCAgICAgdG9wOiBpZSA/ICAgNiA6ICAgNywg
bGVmdDogIDcgfSwKKwkJeyBpZDogJyNzdGF0aWMtMS0xJywgICB0b3A6IGllID8gIDEzIDogIDE1
LCBsZWZ0OiAxNSB9LAorCQl7IGlkOiAnI3N0YXRpYy0xLTEtMScsIHRvcDogaWUgPyAgMjAgOiAg
MjMsIGxlZnQ6IDIzIH0sCisJCXsgaWQ6ICcjc3RhdGljLTInLCAgICAgdG9wOiBpZSA/IDEyMSA6
IDEyMiwgbGVmdDogIDcgfQorCV07CisJalF1ZXJ5LmVhY2goIHRlc3RzLCBmdW5jdGlvbigpIHsK
KwkJZXF1YWxzKCBqUXVlcnkoIHRoaXMuaWQgKS5vZmZzZXQoKS50b3AsICB0aGlzLnRvcCwgICJq
UXVlcnkoJyIgKyB0aGlzLmlkICsgIicpLm9mZnNldCgpLnRvcCIgKTsKKwkJZXF1YWxzKCBqUXVl
cnkoIHRoaXMuaWQgKS5vZmZzZXQoKS5sZWZ0LCB0aGlzLmxlZnQsICJqUXVlcnkoJyIgKyB0aGlz
LmlkICsgIicpLm9mZnNldCgpLmxlZnQiICk7CisJfSk7CisKKworCS8vIGdldCBwb3NpdGlvbgor
CXRlc3RzID0gWworCQl7IGlkOiAnI3N0YXRpYy0xJywgICAgIHRvcDogaWUgPyAgIDUgOiAgIDYs
IGxlZnQ6ICA2IH0sCisJCXsgaWQ6ICcjc3RhdGljLTEtMScsICAgdG9wOiBpZSA/ICAxMiA6ICAx
NCwgbGVmdDogMTQgfSwKKwkJeyBpZDogJyNzdGF0aWMtMS0xLTEnLCB0b3A6IGllID8gIDE5IDog
IDIyLCBsZWZ0OiAyMiB9LAorCQl7IGlkOiAnI3N0YXRpYy0yJywgICAgIHRvcDogaWUgPyAxMjAg
OiAxMjEsIGxlZnQ6ICA2IH0KKwldOworCWpRdWVyeS5lYWNoKCB0ZXN0cywgZnVuY3Rpb24oKSB7
CisJCWVxdWFscyggalF1ZXJ5KCB0aGlzLmlkICkucG9zaXRpb24oKS50b3AsICB0aGlzLnRvcCwg
ICJqUXVlcnkoJyIgKyB0aGlzLnRvcCAgKyAiJykucG9zaXRpb24oKS50b3AiICk7CisJCWVxdWFs
cyggalF1ZXJ5KCB0aGlzLmlkICkucG9zaXRpb24oKS5sZWZ0LCB0aGlzLmxlZnQsICJqUXVlcnko
JyIgKyB0aGlzLmxlZnQgKyInKS5wb3NpdGlvbigpLmxlZnQiICk7CisJfSk7CisKKworCS8vIHNl
dCBvZmZzZXQKKwl0ZXN0cyA9IFsKKwkJeyBpZDogJyNzdGF0aWMtMicsICAgICB0b3A6IDIwMCwg
bGVmdDogMjAwIH0sCisJCXsgaWQ6ICcjc3RhdGljLTInLCAgICAgdG9wOiAxMDAsIGxlZnQ6IDEw
MCB9LAorCQl7IGlkOiAnI3N0YXRpYy0yJywgICAgIHRvcDogIC0yLCBsZWZ0OiAgLTIgfSwKKwkJ
eyBpZDogJyNzdGF0aWMtMicsICAgICB0b3A6IDEyMSwgbGVmdDogICA2IH0sCisJCXsgaWQ6ICcj
c3RhdGljLTEtMS0xJywgdG9wOiAgNTAsIGxlZnQ6ICA1MCB9LAorCQl7IGlkOiAnI3N0YXRpYy0x
LTEtMScsIHRvcDogIDEwLCBsZWZ0OiAgMTAgfSwKKwkJeyBpZDogJyNzdGF0aWMtMS0xLTEnLCB0
b3A6ICAtMSwgbGVmdDogIC0xIH0sCisJCXsgaWQ6ICcjc3RhdGljLTEtMS0xJywgdG9wOiAgMjIs
IGxlZnQ6ICAyMiB9LAorCQl7IGlkOiAnI3N0YXRpYy0xLTEnLCAgIHRvcDogIDI1LCBsZWZ0OiAg
MjUgfSwKKwkJeyBpZDogJyNzdGF0aWMtMS0xJywgICB0b3A6ICAxMCwgbGVmdDogIDEwIH0sCisJ
CXsgaWQ6ICcjc3RhdGljLTEtMScsICAgdG9wOiAgLTMsIGxlZnQ6ICAtMyB9LAorCQl7IGlkOiAn
I3N0YXRpYy0xLTEnLCAgIHRvcDogIDE0LCBsZWZ0OiAgMTQgfSwKKwkJeyBpZDogJyNzdGF0aWMt
MScsICAgICB0b3A6ICAzMCwgbGVmdDogIDMwIH0sCisJCXsgaWQ6ICcjc3RhdGljLTEnLCAgICAg
dG9wOiAgIDIsIGxlZnQ6ICAgMiB9LAorCQl7IGlkOiAnI3N0YXRpYy0xJywgICAgIHRvcDogIC0y
LCBsZWZ0OiAgLTIgfSwKKwkJeyBpZDogJyNzdGF0aWMtMScsICAgICB0b3A6ICAgNywgbGVmdDog
ICA3IH0KKwldOworCWpRdWVyeS5lYWNoKCB0ZXN0cywgZnVuY3Rpb24oKSB7CisJCWpRdWVyeSgg
dGhpcy5pZCApLm9mZnNldCh7IHRvcDogdGhpcy50b3AsIGxlZnQ6IHRoaXMubGVmdCB9KTsKKwkJ
ZXF1YWxzKCBqUXVlcnkoIHRoaXMuaWQgKS5vZmZzZXQoKS50b3AsICB0aGlzLnRvcCwgICJqUXVl
cnkoJyIgKyB0aGlzLmlkICsgIicpLm9mZnNldCh7IHRvcDogIiAgKyB0aGlzLnRvcCAgKyAiIH0p
IiApOworCQllcXVhbHMoIGpRdWVyeSggdGhpcy5pZCApLm9mZnNldCgpLmxlZnQsIHRoaXMubGVm
dCwgImpRdWVyeSgnIiArIHRoaXMuaWQgKyAiJykub2Zmc2V0KHsgbGVmdDogIiArIHRoaXMubGVm
dCArICIgfSkiICk7CisKKwkJalF1ZXJ5KCB0aGlzLmlkICkub2Zmc2V0KHsgdG9wOiB0aGlzLnRv
cCwgbGVmdDogdGhpcy5sZWZ0LCB1c2luZzogZnVuY3Rpb24oIHByb3BzICkgeworCQkJalF1ZXJ5
KCB0aGlzICkuY3NzKHsKKwkJCQl0b3A6ICBwcm9wcy50b3AgICsgMSwKKwkJCQlsZWZ0OiBwcm9w
cy5sZWZ0ICsgMQorCQkJfSk7CisJCX19KTsKKwkJZXF1YWxzKCBqUXVlcnkoIHRoaXMuaWQgKS5v
ZmZzZXQoKS50b3AsICB0aGlzLnRvcCAgKyAxLCAialF1ZXJ5KCciICsgdGhpcy5pZCArICInKS5v
ZmZzZXQoeyB0b3A6ICIgICsgKHRoaXMudG9wICArIDEpICsgIiwgdXNpbmc6IGZuIH0pIiApOwor
CQllcXVhbHMoIGpRdWVyeSggdGhpcy5pZCApLm9mZnNldCgpLmxlZnQsIHRoaXMubGVmdCArIDEs
ICJqUXVlcnkoJyIgKyB0aGlzLmlkICsgIicpLm9mZnNldCh7IGxlZnQ6ICIgKyAodGhpcy5sZWZ0
ICsgMSkgKyAiLCB1c2luZzogZm4gfSkiICk7CisJfSk7Cit9KTsKKwordGVzdG9mZnNldCgiZml4
ZWQiLCBmdW5jdGlvbiggalF1ZXJ5ICkgeworCWV4cGVjdCgyOCk7CisKKwlqUXVlcnkub2Zmc2V0
LmluaXRpYWxpemUoKTsKKworCXZhciB0ZXN0cyA9IFsKKwkJeyBpZDogJyNmaXhlZC0xJywgdG9w
OiAxMDAxLCBsZWZ0OiAxMDAxIH0sCisJCXsgaWQ6ICcjZml4ZWQtMicsIHRvcDogMTAyMSwgbGVm
dDogMTAyMSB9CisJXTsKKworCWpRdWVyeS5lYWNoKCB0ZXN0cywgZnVuY3Rpb24oKSB7CisJCWlm
ICggIXN1cHBvcnRzU2Nyb2xsICkgeworCQkJb2soIHRydWUsICJCcm93c2VyIGRvZXNuJ3Qgc3Vw
cG9ydCBzY3JvbGwgcG9zaXRpb24uIiApOworCQkJb2soIHRydWUsICJCcm93c2VyIGRvZXNuJ3Qg
c3VwcG9ydCBzY3JvbGwgcG9zaXRpb24uIiApOworCisJCX0gZWxzZSBpZiAoIGpRdWVyeS5vZmZz
ZXQuc3VwcG9ydHNGaXhlZFBvc2l0aW9uICkgeworCQkJZXF1YWxzKCBqUXVlcnkoIHRoaXMuaWQg
KS5vZmZzZXQoKS50b3AsICB0aGlzLnRvcCwgICJqUXVlcnkoJyIgKyB0aGlzLmlkICsgIicpLm9m
ZnNldCgpLnRvcCIgKTsKKwkJCWVxdWFscyggalF1ZXJ5KCB0aGlzLmlkICkub2Zmc2V0KCkubGVm
dCwgdGhpcy5sZWZ0LCAialF1ZXJ5KCciICsgdGhpcy5pZCArICInKS5vZmZzZXQoKS5sZWZ0IiAp
OworCQl9IGVsc2UgeworCQkJLy8gbmVlZCB0byBoYXZlIHNhbWUgbnVtYmVyIG9mIGFzc2VydGlv
bnMKKwkJCW9rKCB0cnVlLCAnRml4ZWQgcG9zaXRpb24gaXMgbm90IHN1cHBvcnRlZCcgKTsKKwkJ
CW9rKCB0cnVlLCAnRml4ZWQgcG9zaXRpb24gaXMgbm90IHN1cHBvcnRlZCcgKTsKKwkJfQorCX0p
OworCisJdGVzdHMgPSBbCisJCXsgaWQ6ICcjZml4ZWQtMScsIHRvcDogMTAwLCBsZWZ0OiAxMDAg
fSwKKwkJeyBpZDogJyNmaXhlZC0xJywgdG9wOiAgIDAsIGxlZnQ6ICAgMCB9LAorCQl7IGlkOiAn
I2ZpeGVkLTEnLCB0b3A6ICAtNCwgbGVmdDogIC00IH0sCisJCXsgaWQ6ICcjZml4ZWQtMicsIHRv
cDogMjAwLCBsZWZ0OiAyMDAgfSwKKwkJeyBpZDogJyNmaXhlZC0yJywgdG9wOiAgIDAsIGxlZnQ6
ICAgMCB9LAorCQl7IGlkOiAnI2ZpeGVkLTInLCB0b3A6ICAtNSwgbGVmdDogIC01IH0KKwldOwor
CisJalF1ZXJ5LmVhY2goIHRlc3RzLCBmdW5jdGlvbigpIHsKKwkJaWYgKCBqUXVlcnkub2Zmc2V0
LnN1cHBvcnRzRml4ZWRQb3NpdGlvbiApIHsKKwkJCWpRdWVyeSggdGhpcy5pZCApLm9mZnNldCh7
IHRvcDogdGhpcy50b3AsIGxlZnQ6IHRoaXMubGVmdCB9KTsKKwkJCWVxdWFscyggalF1ZXJ5KCB0
aGlzLmlkICkub2Zmc2V0KCkudG9wLCAgdGhpcy50b3AsICAialF1ZXJ5KCciICsgdGhpcy5pZCAr
ICInKS5vZmZzZXQoeyB0b3A6ICIgICsgdGhpcy50b3AgICsgIiB9KSIgKTsKKwkJCWVxdWFscygg
alF1ZXJ5KCB0aGlzLmlkICkub2Zmc2V0KCkubGVmdCwgdGhpcy5sZWZ0LCAialF1ZXJ5KCciICsg
dGhpcy5pZCArICInKS5vZmZzZXQoeyBsZWZ0OiAiICsgdGhpcy5sZWZ0ICsgIiB9KSIgKTsKKwor
CQkJalF1ZXJ5KCB0aGlzLmlkICkub2Zmc2V0KHsgdG9wOiB0aGlzLnRvcCwgbGVmdDogdGhpcy5s
ZWZ0LCB1c2luZzogZnVuY3Rpb24oIHByb3BzICkgeworCQkJCWpRdWVyeSggdGhpcyApLmNzcyh7
CisJCQkJCXRvcDogIHByb3BzLnRvcCAgKyAxLAorCQkJCQlsZWZ0OiBwcm9wcy5sZWZ0ICsgMQor
CQkJCX0pOworCQkJfX0pOworCQkJZXF1YWxzKCBqUXVlcnkoIHRoaXMuaWQgKS5vZmZzZXQoKS50
b3AsICB0aGlzLnRvcCAgKyAxLCAialF1ZXJ5KCciICsgdGhpcy5pZCArICInKS5vZmZzZXQoeyB0
b3A6ICIgICsgKHRoaXMudG9wICArIDEpICsgIiwgdXNpbmc6IGZuIH0pIiApOworCQkJZXF1YWxz
KCBqUXVlcnkoIHRoaXMuaWQgKS5vZmZzZXQoKS5sZWZ0LCB0aGlzLmxlZnQgKyAxLCAialF1ZXJ5
KCciICsgdGhpcy5pZCArICInKS5vZmZzZXQoeyBsZWZ0OiAiICsgKHRoaXMubGVmdCArIDEpICsg
IiwgdXNpbmc6IGZuIH0pIiApOworCQl9IGVsc2UgeworCQkJLy8gbmVlZCB0byBoYXZlIHNhbWUg
bnVtYmVyIG9mIGFzc2VydGlvbnMKKwkJCW9rKCB0cnVlLCAnRml4ZWQgcG9zaXRpb24gaXMgbm90
IHN1cHBvcnRlZCcgKTsKKwkJCW9rKCB0cnVlLCAnRml4ZWQgcG9zaXRpb24gaXMgbm90IHN1cHBv
cnRlZCcgKTsKKwkJCW9rKCB0cnVlLCAnRml4ZWQgcG9zaXRpb24gaXMgbm90IHN1cHBvcnRlZCcg
KTsKKwkJCW9rKCB0cnVlLCAnRml4ZWQgcG9zaXRpb24gaXMgbm90IHN1cHBvcnRlZCcgKTsKKwkJ
fQorCX0pOworfSk7CisKK3Rlc3RvZmZzZXQoInRhYmxlIiwgZnVuY3Rpb24oIGpRdWVyeSApIHsK
KwlleHBlY3QoNCk7CisKKwllcXVhbHMoIGpRdWVyeSgnI3RhYmxlLTEnKS5vZmZzZXQoKS50b3As
IDYsICJqUXVlcnkoJyN0YWJsZS0xJykub2Zmc2V0KCkudG9wIiApOworCWVxdWFscyggalF1ZXJ5
KCcjdGFibGUtMScpLm9mZnNldCgpLmxlZnQsIDYsICJqUXVlcnkoJyN0YWJsZS0xJykub2Zmc2V0
KCkubGVmdCIgKTsKKworCWVxdWFscyggalF1ZXJ5KCcjdGgtMScpLm9mZnNldCgpLnRvcCwgMTAs
ICJqUXVlcnkoJyN0aC0xJykub2Zmc2V0KCkudG9wIiApOworCWVxdWFscyggalF1ZXJ5KCcjdGgt
MScpLm9mZnNldCgpLmxlZnQsIDEwLCAialF1ZXJ5KCcjdGgtMScpLm9mZnNldCgpLmxlZnQiICk7
Cit9KTsKKwordGVzdG9mZnNldCgic2Nyb2xsIiwgZnVuY3Rpb24oIGpRdWVyeSwgd2luICkgewor
CWV4cGVjdCgxNik7CisKKwl2YXIgaWUgPSBqUXVlcnkuYnJvd3Nlci5tc2llICYmIHBhcnNlSW50
KCBqUXVlcnkuYnJvd3Nlci52ZXJzaW9uLCAxMCApIDwgODsKKworCS8vIElFIGlzIGNvbGxhcHNp
bmcgdGhlIHRvcCBtYXJnaW4gb2YgMXB4CisJZXF1YWxzKCBqUXVlcnkoJyNzY3JvbGwtMScpLm9m
ZnNldCgpLnRvcCwgaWUgPyA2IDogNywgImpRdWVyeSgnI3Njcm9sbC0xJykub2Zmc2V0KCkudG9w
IiApOworCWVxdWFscyggalF1ZXJ5KCcjc2Nyb2xsLTEnKS5vZmZzZXQoKS5sZWZ0LCA3LCAialF1
ZXJ5KCcjc2Nyb2xsLTEnKS5vZmZzZXQoKS5sZWZ0IiApOworCisJLy8gSUUgaXMgY29sbGFwc2lu
ZyB0aGUgdG9wIG1hcmdpbiBvZiAxcHgKKwllcXVhbHMoIGpRdWVyeSgnI3Njcm9sbC0xLTEnKS5v
ZmZzZXQoKS50b3AsIGllID8gOSA6IDExLCAialF1ZXJ5KCcjc2Nyb2xsLTEtMScpLm9mZnNldCgp
LnRvcCIgKTsKKwllcXVhbHMoIGpRdWVyeSgnI3Njcm9sbC0xLTEnKS5vZmZzZXQoKS5sZWZ0LCAx
MSwgImpRdWVyeSgnI3Njcm9sbC0xLTEnKS5vZmZzZXQoKS5sZWZ0IiApOworCisKKwkvLyBzY3Jv
bGwgb2Zmc2V0IHRlc3RzIC5zY3JvbGxUb3AvTGVmdAorCWVxdWFscyggalF1ZXJ5KCcjc2Nyb2xs
LTEnKS5zY3JvbGxUb3AoKSwgNSwgImpRdWVyeSgnI3Njcm9sbC0xJykuc2Nyb2xsVG9wKCkiICk7
CisJZXF1YWxzKCBqUXVlcnkoJyNzY3JvbGwtMScpLnNjcm9sbExlZnQoKSwgNSwgImpRdWVyeSgn
I3Njcm9sbC0xJykuc2Nyb2xsTGVmdCgpIiApOworCisJZXF1YWxzKCBqUXVlcnkoJyNzY3JvbGwt
MS0xJykuc2Nyb2xsVG9wKCksIDAsICJqUXVlcnkoJyNzY3JvbGwtMS0xJykuc2Nyb2xsVG9wKCki
ICk7CisJZXF1YWxzKCBqUXVlcnkoJyNzY3JvbGwtMS0xJykuc2Nyb2xsTGVmdCgpLCAwLCAialF1
ZXJ5KCcjc2Nyb2xsLTEtMScpLnNjcm9sbExlZnQoKSIgKTsKKworCS8vIGVxdWFscyggalF1ZXJ5
KCdib2R5Jykuc2Nyb2xsVG9wKCksIDAsICJqUXVlcnkoJ2JvZHknKS5zY3JvbGxUb3AoKSIgKTsK
KwkvLyBlcXVhbHMoIGpRdWVyeSgnYm9keScpLnNjcm9sbExlZnQoKSwgMCwgImpRdWVyeSgnYm9k
eScpLnNjcm9sbFRvcCgpIiApOworCisJd2luLm5hbWUgPSAidGVzdCI7CisKKwlpZiAoICFzdXBw
b3J0c1Njcm9sbCApIHsKKwkJb2soIHRydWUsICJCcm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCBzY3Jv
bGwgcG9zaXRpb24uIiApOworCQlvayggdHJ1ZSwgIkJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IHNj
cm9sbCBwb3NpdGlvbi4iICk7CisKKwkJb2soIHRydWUsICJCcm93c2VyIGRvZXNuJ3Qgc3VwcG9y
dCBzY3JvbGwgcG9zaXRpb24uIiApOworCQlvayggdHJ1ZSwgIkJyb3dzZXIgZG9lc24ndCBzdXBw
b3J0IHNjcm9sbCBwb3NpdGlvbi4iICk7CisJfSBlbHNlIHsKKwkJZXF1YWxzKCBqUXVlcnkod2lu
KS5zY3JvbGxUb3AoKSwgMTAwMCwgImpRdWVyeSh3aW5kb3cpLnNjcm9sbFRvcCgpIiApOworCQll
cXVhbHMoIGpRdWVyeSh3aW4pLnNjcm9sbExlZnQoKSwgMTAwMCwgImpRdWVyeSh3aW5kb3cpLnNj
cm9sbExlZnQoKSIgKTsKKworCQllcXVhbHMoIGpRdWVyeSh3aW4uZG9jdW1lbnQpLnNjcm9sbFRv
cCgpLCAxMDAwLCAialF1ZXJ5KGRvY3VtZW50KS5zY3JvbGxUb3AoKSIgKTsKKwkJZXF1YWxzKCBq
UXVlcnkod2luLmRvY3VtZW50KS5zY3JvbGxMZWZ0KCksIDEwMDAsICJqUXVlcnkoZG9jdW1lbnQp
LnNjcm9sbExlZnQoKSIgKTsKKwl9CisKKwkvLyB0ZXN0IGpRdWVyeSB1c2luZyBwYXJlbnQgd2lu
ZG93L2RvY3VtZW50CisJLy8galF1ZXJ5IHJlZmVyZW5jZSBoZXJlIGlzIGluIHRoZSBpZnJhbWUK
Kwl3aW5kb3cuc2Nyb2xsVG8oMCwwKTsKKwllcXVhbHMoIGpRdWVyeSh3aW5kb3cpLnNjcm9sbFRv
cCgpLCAwLCAialF1ZXJ5KHdpbmRvdykuc2Nyb2xsVG9wKCkgb3RoZXIgd2luZG93IiApOworCWVx
dWFscyggalF1ZXJ5KHdpbmRvdykuc2Nyb2xsTGVmdCgpLCAwLCAialF1ZXJ5KHdpbmRvdykuc2Ny
b2xsTGVmdCgpIG90aGVyIHdpbmRvdyIgKTsKKwllcXVhbHMoIGpRdWVyeShkb2N1bWVudCkuc2Ny
b2xsVG9wKCksIDAsICJqUXVlcnkod2luZG93KS5zY3JvbGxUb3AoKSBvdGhlciBkb2N1bWVudCIg
KTsKKwllcXVhbHMoIGpRdWVyeShkb2N1bWVudCkuc2Nyb2xsTGVmdCgpLCAwLCAialF1ZXJ5KHdp
bmRvdykuc2Nyb2xsTGVmdCgpIG90aGVyIGRvY3VtZW50IiApOworfSk7CisKK3Rlc3RvZmZzZXQo
ImJvZHkiLCBmdW5jdGlvbiggalF1ZXJ5ICkgeworCWV4cGVjdCgyKTsKKworCWVxdWFscyggalF1
ZXJ5KCdib2R5Jykub2Zmc2V0KCkudG9wLCAxLCAialF1ZXJ5KCcjYm9keScpLm9mZnNldCgpLnRv
cCIgKTsKKwllcXVhbHMoIGpRdWVyeSgnYm9keScpLm9mZnNldCgpLmxlZnQsIDEsICJqUXVlcnko
JyNib2R5Jykub2Zmc2V0KCkubGVmdCIgKTsKK30pOworCit0ZXN0KCJDaGFpbmluZyBvZmZzZXQo
Y29vcmRzKSByZXR1cm5zIGpRdWVyeSBvYmplY3QiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMik7
CisJdmFyIGNvb3JkcyA9IHsgdG9wOiAgMSwgbGVmdDogIDEgfTsKKwllcXVhbHMoIGpRdWVyeSgi
I2Fic29sdXRlLTEiKS5vZmZzZXQoY29vcmRzKS5zZWxlY3RvciwgIiNhYnNvbHV0ZS0xIiwgIm9m
ZnNldChjb29yZHMpIHJldHVybnMgalF1ZXJ5IG9iamVjdCIgKTsKKwllcXVhbHMoIGpRdWVyeSgi
I25vbi1leGlzdGVudCIpLm9mZnNldChjb29yZHMpLnNlbGVjdG9yLCAiI25vbi1leGlzdGVudCIs
ICJvZmZzZXQoY29vcmRzKSB3aXRoIGVtcHR5IGpRdWVyeSBzZXQgcmV0dXJucyBqUXVlcnkgb2Jq
ZWN0IiApOworfSk7CisKK3Rlc3QoIm9mZnNldFBhcmVudCIsIGZ1bmN0aW9uKCl7CisJZXhwZWN0
KDExKTsKKworCXZhciBib2R5ID0galF1ZXJ5KCJib2R5Iikub2Zmc2V0UGFyZW50KCk7CisJZXF1
YWxzKCBib2R5Lmxlbmd0aCwgMSwgIk9ubHkgb25lIG9mZnNldFBhcmVudCBmb3VuZC4iICk7CisJ
ZXF1YWxzKCBib2R5WzBdLCBkb2N1bWVudC5ib2R5LCAiVGhlIGJvZHkgaXMgaXRzIG93biBvZmZz
ZXRQYXJlbnQuIiApOworCisJdmFyIGhlYWRlciA9IGpRdWVyeSgiI3F1bml0LWhlYWRlciIpLm9m
ZnNldFBhcmVudCgpOworCWVxdWFscyggaGVhZGVyLmxlbmd0aCwgMSwgIk9ubHkgb25lIG9mZnNl
dFBhcmVudCBmb3VuZC4iICk7CisJZXF1YWxzKCBoZWFkZXJbMF0sIGRvY3VtZW50LmJvZHksICJU
aGUgYm9keSBpcyB0aGUgb2Zmc2V0UGFyZW50LiIgKTsKKworCXZhciBkaXYgPSBqUXVlcnkoIiNu
b3RoaWRkZW5kaXZjaGlsZCIpLm9mZnNldFBhcmVudCgpOworCWVxdWFscyggZGl2Lmxlbmd0aCwg
MSwgIk9ubHkgb25lIG9mZnNldFBhcmVudCBmb3VuZC4iICk7CisJZXF1YWxzKCBkaXZbMF0sIGRv
Y3VtZW50LmJvZHksICJUaGUgYm9keSBpcyB0aGUgb2Zmc2V0UGFyZW50LiIgKTsKKworCWpRdWVy
eSgiI25vdGhpZGRlbmRpdiIpLmNzcygicG9zaXRpb24iLCAicmVsYXRpdmUiKTsKKworCWRpdiA9
IGpRdWVyeSgiI25vdGhpZGRlbmRpdmNoaWxkIikub2Zmc2V0UGFyZW50KCk7CisJZXF1YWxzKCBk
aXYubGVuZ3RoLCAxLCAiT25seSBvbmUgb2Zmc2V0UGFyZW50IGZvdW5kLiIgKTsKKwllcXVhbHMo
IGRpdlswXSwgalF1ZXJ5KCIjbm90aGlkZGVuZGl2IilbMF0sICJUaGUgZGl2IGlzIHRoZSBvZmZz
ZXRQYXJlbnQuIiApOworCisJZGl2ID0galF1ZXJ5KCJib2R5LCAjbm90aGlkZGVuZGl2Y2hpbGQi
KS5vZmZzZXRQYXJlbnQoKTsKKwllcXVhbHMoIGRpdi5sZW5ndGgsIDIsICJUd28gb2Zmc2V0UGFy
ZW50IGZvdW5kLiIgKTsKKwllcXVhbHMoIGRpdlswXSwgZG9jdW1lbnQuYm9keSwgIlRoZSBib2R5
IGlzIHRoZSBvZmZzZXRQYXJlbnQuIiApOworCWVxdWFscyggZGl2WzFdLCBqUXVlcnkoIiNub3Ro
aWRkZW5kaXYiKVswXSwgIlRoZSBkaXYgaXMgdGhlIG9mZnNldFBhcmVudC4iICk7Cit9KTsKKwor
ZnVuY3Rpb24gdGVzdG9mZnNldChuYW1lLCBmbikgeworCisJdGVzdChuYW1lLCBmdW5jdGlvbigp
IHsKKwkJLy8gcGF1c2UgZXhlY3V0aW9uIGZvciBub3cKKwkJc3RvcCgpOworCisJCS8vIGxvYWQg
Zml4dHVyZSBpbiBpZnJhbWUKKwkJdmFyIGlmcmFtZSA9IGxvYWRGaXh0dXJlKCksCisJCQl3aW4g
PSBpZnJhbWUuY29udGVudFdpbmRvdywKKwkJCWludGVydmFsID0gc2V0SW50ZXJ2YWwoIGZ1bmN0
aW9uKCkgeworCQkJCWlmICggd2luICYmIHdpbi5qUXVlcnkgJiYgd2luLmpRdWVyeS5pc1JlYWR5
ICkgeworCQkJCQljbGVhckludGVydmFsKCBpbnRlcnZhbCApOworCQkJCQkvLyBjb250aW51ZQor
CQkJCQlzdGFydCgpOworCQkJCQkvLyBjYWxsIGFjdHVhbCB0ZXN0cyBwYXNzaW5nIHRoZSBjb3Jy
ZWN0IGpRdWVyeSBpc250YW5jZSB0byB1c2UKKwkJCQkJZm4uY2FsbCggdGhpcywgd2luLmpRdWVy
eSwgd2luICk7CisJCQkJCWRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoIGlmcmFtZSApOworCQkJ
CQlpZnJhbWUgPSBudWxsOworCQkJCX0KKwkJCX0sIDE1ICk7CisJfSk7CisKKwlmdW5jdGlvbiBs
b2FkRml4dHVyZSgpIHsKKwkJdmFyIHNyYyA9ICcuL2RhdGEvb2Zmc2V0LycgKyBuYW1lICsgJy5o
dG1sPycgKyBwYXJzZUludCggTWF0aC5yYW5kb20oKSoxMDAwLCAxMCApLAorCQkJaWZyYW1lID0g
alF1ZXJ5KCc8aWZyYW1lIC8+JykuY3NzKHsKKwkJCQl3aWR0aDogNTAwLCBoZWlnaHQ6IDUwMCwg
cG9zaXRpb246ICdhYnNvbHV0ZScsIHRvcDogLTYwMCwgbGVmdDogLTYwMCwgdmlzaWJsaXR5OiAn
aGlkZGVuJworCQkJfSkuYXBwZW5kVG8oJ2JvZHknKVswXTsKKwkJaWZyYW1lLmNvbnRlbnRXaW5k
b3cubG9jYXRpb24gPSBzcmM7CisJCXJldHVybiBpZnJhbWU7CisJfQorfQoKUHJvcGVydHkgY2hh
bmdlcyBvbjogTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L3VuaXQvb2Zmc2V0Lmpz
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB5ZXMKCkluZGV4OiBMYXlvdXRUZXN0
cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvdW5pdC9xdWV1ZS5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvdW5pdC9xdWV1ZS5qcwkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC91bml0L3F1ZXVlLmpzCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDE0OCBAQAorbW9kdWxlKCJxdWV1ZSIsIHsgdGVhcmRvd246IG1v
ZHVsZVRlYXJkb3duIH0pOworCit0ZXN0KCJxdWV1ZSgpIHdpdGggb3RoZXIgdHlwZXMiLGZ1bmN0
aW9uKCkgeworCWV4cGVjdCg5KTsKKwl2YXIgY291bnRlciA9IDA7CisKKwl2YXIgJGRpdiA9IGpR
dWVyeSh7fSk7CisKKwkkZGl2CisJCS5xdWV1ZSgnZm9vJyxmdW5jdGlvbigpeworCQkJZXF1YWxz
KCArK2NvdW50ZXIsIDEsICJEZXF1ZXVpbmciICk7CisJCQlqUXVlcnkuZGVxdWV1ZSh0aGlzLCdm
b28nKTsKKwkJfSkKKwkJLnF1ZXVlKCdmb28nLGZ1bmN0aW9uKCl7CisJCQllcXVhbHMoICsrY291
bnRlciwgMiwgIkRlcXVldWluZyIgKTsKKwkJCWpRdWVyeSh0aGlzKS5kZXF1ZXVlKCdmb28nKTsK
KwkJfSkKKwkJLnF1ZXVlKCdmb28nLGZ1bmN0aW9uKCl7CisJCQllcXVhbHMoICsrY291bnRlciwg
MywgIkRlcXVldWluZyIgKTsKKwkJfSkKKwkJLnF1ZXVlKCdmb28nLGZ1bmN0aW9uKCl7CisJCQll
cXVhbHMoICsrY291bnRlciwgNCwgIkRlcXVldWluZyIgKTsKKwkJfSk7CisKKwllcXVhbHMoICRk
aXYucXVldWUoJ2ZvbycpLmxlbmd0aCwgNCwgIlRlc3RpbmcgcXVldWUgbGVuZ3RoIiApOworCisJ
JGRpdi5kZXF1ZXVlKCdmb28nKTsKKworCWVxdWFscyggY291bnRlciwgMywgIlRlc3RpbmcgcHJl
dmlvdXMgY2FsbCB0byBkZXF1ZXVlIiApOworCWVxdWFscyggJGRpdi5xdWV1ZSgnZm9vJykubGVu
Z3RoLCAxLCAiVGVzdGluZyBxdWV1ZSBsZW5ndGgiICk7CisKKwkkZGl2LmRlcXVldWUoJ2Zvbycp
OworCisJZXF1YWxzKCBjb3VudGVyLCA0LCAiVGVzdGluZyBwcmV2aW91cyBjYWxsIHRvIGRlcXVl
dWUiICk7CisJZXF1YWxzKCAkZGl2LnF1ZXVlKCdmb28nKS5sZW5ndGgsIDAsICJUZXN0aW5nIHF1
ZXVlIGxlbmd0aCIgKTsKK30pOworCit0ZXN0KCJxdWV1ZShuYW1lKSBwYXNzZXMgaW4gdGhlIG5l
eHQgaXRlbSBpbiB0aGUgcXVldWUgYXMgYSBwYXJhbWV0ZXIiLCBmdW5jdGlvbigpIHsKKwlleHBl
Y3QoMik7CisKKwl2YXIgZGl2ID0galF1ZXJ5KHt9KTsKKwl2YXIgY291bnRlciA9IDA7CisKKwlk
aXYucXVldWUoImZvbyIsIGZ1bmN0aW9uKG5leHQpIHsKKwkJZXF1YWxzKCsrY291bnRlciwgMSwg
IkRlcXVldWVpbmciKTsKKwkJbmV4dCgpOworCX0pLnF1ZXVlKCJmb28iLCBmdW5jdGlvbihuZXh0
KSB7CisJCWVxdWFscygrK2NvdW50ZXIsIDIsICJOZXh0IHdhcyBjYWxsZWQiKTsKKwkJbmV4dCgp
OworCX0pLnF1ZXVlKCJiYXIiLCBmdW5jdGlvbigpIHsKKwkJZXF1YWxzKCsrY291bnRlciwgMywg
Ik90aGVyIHF1ZXVlcyBhcmUgbm90IHRyaWdnZXJlZCBieSBuZXh0KCkiKQorCX0pOworCisJZGl2
LmRlcXVldWUoImZvbyIpOworfSk7CisKK3Rlc3QoInF1ZXVlKG5hbWUpIHBhc3NlcyBpbiB0aGUg
bmV4dCBpdGVtIGluIHRoZSBxdWV1ZSBhcyBhIHBhcmFtZXRlciIsIGZ1bmN0aW9uKCkgeworCWV4
cGVjdCgyKTsKKworCXZhciBkaXYgPSBqUXVlcnkoe30pOworCXZhciBjb3VudGVyID0gMDsKKwor
CWRpdi5xdWV1ZSgiZm9vIiwgZnVuY3Rpb24obmV4dCkgeworCQllcXVhbHMoKytjb3VudGVyLCAx
LCAiRGVxdWV1ZWluZyIpOworCQluZXh0KCk7CisJfSkucXVldWUoImZvbyIsIGZ1bmN0aW9uKG5l
eHQpIHsKKwkJZXF1YWxzKCsrY291bnRlciwgMiwgIk5leHQgd2FzIGNhbGxlZCIpOworCQluZXh0
KCk7CisJfSkucXVldWUoImJhciIsIGZ1bmN0aW9uKCkgeworCQllcXVhbHMoKytjb3VudGVyLCAz
LCAiT3RoZXIgcXVldWVzIGFyZSBub3QgdHJpZ2dlcmVkIGJ5IG5leHQoKSIpCisJfSk7CisKKwlk
aXYuZGVxdWV1ZSgiZm9vIik7Cit9KTsKKwordGVzdCgicXVldWUoKSBwYXNzZXMgaW4gdGhlIG5l
eHQgaXRlbSBpbiB0aGUgcXVldWUgYXMgYSBwYXJhbWV0ZXIgdG8gZnggcXVldWVzIiwgZnVuY3Rp
b24oKSB7CisJZXhwZWN0KDIpOworCXN0b3AoKTsKKworCXZhciBkaXYgPSBqUXVlcnkoe30pOwor
CXZhciBjb3VudGVyID0gMDsKKworCWRpdi5xdWV1ZShmdW5jdGlvbihuZXh0KSB7CisJCWVxdWFs
cygrK2NvdW50ZXIsIDEsICJEZXF1ZXVlaW5nIik7CisJCXZhciBzZWxmID0gdGhpczsKKwkJc2V0
VGltZW91dChmdW5jdGlvbigpIHsgbmV4dCgpIH0sIDUwMCk7CisJfSkucXVldWUoZnVuY3Rpb24o
bmV4dCkgeworCQllcXVhbHMoKytjb3VudGVyLCAyLCAiTmV4dCB3YXMgY2FsbGVkIik7CisJCW5l
eHQoKTsKKwkJc3RhcnQoKTsKKwl9KS5xdWV1ZSgiYmFyIiwgZnVuY3Rpb24oKSB7CisJCWVxdWFs
cygrK2NvdW50ZXIsIDMsICJPdGhlciBxdWV1ZXMgYXJlIG5vdCB0cmlnZ2VyZWQgYnkgbmV4dCgp
IikKKwl9KTsKKworfSk7CisKK3Rlc3QoImRlbGF5KCkiLCBmdW5jdGlvbigpIHsKKwlleHBlY3Qo
Mik7CisJc3RvcCgpOworCisJdmFyIGZvbyA9IGpRdWVyeSh7fSksIHJ1biA9IDA7CisKKwlmb28u
ZGVsYXkoMTAwKS5xdWV1ZShmdW5jdGlvbigpeworCQlydW4gPSAxOworCQlvayggdHJ1ZSwgIlRo
ZSBmdW5jdGlvbiB3YXMgZGVxdWV1ZWQuIiApOworCQlzdGFydCgpOworCX0pOworCisJZXF1YWxz
KCBydW4sIDAsICJUaGUgZGVsYXkgZGVsYXllZCB0aGUgbmV4dCBmdW5jdGlvbiBmcm9tIHJ1bm5p
bmcuIiApOworfSk7CisKK3Rlc3QoImNsZWFyUXVldWUobmFtZSkgY2xlYXJzIHRoZSBxdWV1ZSIs
IGZ1bmN0aW9uKCkgeworCWV4cGVjdCgxKTsKKworCXZhciBkaXYgPSBqUXVlcnkoe30pOworCXZh
ciBjb3VudGVyID0gMDsKKworCWRpdi5xdWV1ZSgiZm9vIiwgZnVuY3Rpb24obmV4dCkgeworCQlj
b3VudGVyKys7CisJCWpRdWVyeSh0aGlzKS5jbGVhclF1ZXVlKCJmb28iKTsKKwkJbmV4dCgpOwor
CX0pLnF1ZXVlKCJmb28iLCBmdW5jdGlvbihuZXh0KSB7CisJCWNvdW50ZXIrKzsKKwl9KTsKKwor
CWRpdi5kZXF1ZXVlKCJmb28iKTsKKworCWVxdWFscyhjb3VudGVyLCAxLCAidGhlIHF1ZXVlIHdh
cyBjbGVhcmVkIik7Cit9KTsKKwordGVzdCgiY2xlYXJRdWV1ZSgpIGNsZWFycyB0aGUgZnggcXVl
dWUiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMSk7CisKKwl2YXIgZGl2ID0galF1ZXJ5KHt9KTsK
Kwl2YXIgY291bnRlciA9IDA7CisKKwlkaXYucXVldWUoZnVuY3Rpb24obmV4dCkgeworCQljb3Vu
dGVyKys7CisJCXZhciBzZWxmID0gdGhpczsKKwkJc2V0VGltZW91dChmdW5jdGlvbigpIHsgalF1
ZXJ5KHNlbGYpLmNsZWFyUXVldWUoKTsgbmV4dCgpOyB9LCA1MCk7CisJfSkucXVldWUoZnVuY3Rp
b24obmV4dCkgeworCQljb3VudGVyKys7CisJfSk7CisKKwllcXVhbHMoY291bnRlciwgMSwgInRo
ZSBxdWV1ZSB3YXMgY2xlYXJlZCIpOworCisJZGl2LnJlbW92ZURhdGEoKTsKK30pOwoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L3VuaXQvcXVl
dWUuanMKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogYWxsb3ctdGFicwogICArIHllcwoKSW5kZXg6IExheW91
dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC91bml0L3RyYXZlcnNpbmcuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvanF1ZXJ5L3Jlc291cmNlcy90ZXN0L3VuaXQvdHJhdmVyc2luZy5q
cwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pxdWVyeS9yZXNvdXJjZXMvdGVzdC91bml0
L3RyYXZlcnNpbmcuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDUyIEBACittb2R1bGUoInRy
YXZlcnNpbmciLCB7IHRlYXJkb3duOiBtb2R1bGVUZWFyZG93biB9KTsKKwordGVzdCgiZmluZChT
dHJpbmcpIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDUpOworCWVxdWFscyggJ1lhaG9vJywgalF1
ZXJ5KCcjZm9vJykuZmluZCgnLmJsb2dUZXN0JykudGV4dCgpLCAnQ2hlY2sgZm9yIGZpbmQnICk7
CisKKwkvLyB1c2luZyBjb250ZW50cyB3aWxsIGdldCBjb21tZW50cyByZWd1bGFyLCB0ZXh0LCBh
bmQgY29tbWVudCBub2RlcworCXZhciBqID0galF1ZXJ5KCIjbm9ubm9kZXMiKS5jb250ZW50cygp
OworCWVxdWFscyggai5maW5kKCJkaXYiKS5sZW5ndGgsIDAsICJDaGVjayBub2RlLHRleHRub2Rl
LGNvbW1lbnQgdG8gZmluZCB6ZXJvIGRpdnMiICk7CisKKwlzYW1lKCBqUXVlcnkoIiNtYWluIiku
ZmluZCgiPiBkaXYiKS5nZXQoKSwgcSgiZm9vIiwgIm1vcmV0ZXN0cyIsICJ0YWJpbmRleC10ZXN0
cyIsICJsaXZlSGFuZGxlck9yZGVyIiwgInNpYmxpbmdUZXN0IiksICJmaW5kIGNoaWxkIGVsZW1l
bnRzIiApOworCXNhbWUoIGpRdWVyeSgiI21haW4iKS5maW5kKCI+ICNmb28sID4gI21vcmV0ZXN0
cyIpLmdldCgpLCBxKCJmb28iLCAibW9yZXRlc3RzIiksICJmaW5kIGNoaWxkIGVsZW1lbnRzIiAp
OworCXNhbWUoIGpRdWVyeSgiI21haW4iKS5maW5kKCI+ICNmb28gPiBwIikuZ2V0KCksIHEoInNu
ZHAiLCAiZW4iLCAic2FwIiksICJmaW5kIGNoaWxkIGVsZW1lbnRzIiApOworfSk7CisKK3Rlc3Qo
ImlzKFN0cmluZykiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMjYpOworCW9rKCBqUXVlcnkoJyNm
b3JtJykuaXMoJ2Zvcm0nKSwgJ0NoZWNrIGZvciBlbGVtZW50OiBBIGZvcm0gbXVzdCBiZSBhIGZv
cm0nICk7CisJb2soICFqUXVlcnkoJyNmb3JtJykuaXMoJ2RpdicpLCAnQ2hlY2sgZm9yIGVsZW1l
bnQ6IEEgZm9ybSBpcyBub3QgYSBkaXYnICk7CisJb2soIGpRdWVyeSgnI21hcmsnKS5pcygnLmJs
b2cnKSwgJ0NoZWNrIGZvciBjbGFzczogRXhwZWN0ZWQgY2xhc3MgImJsb2ciJyApOworCW9rKCAh
alF1ZXJ5KCcjbWFyaycpLmlzKCcubGluaycpLCAnQ2hlY2sgZm9yIGNsYXNzOiBEaWQgbm90IGV4
cGVjdCBjbGFzcyAibGluayInICk7CisJb2soIGpRdWVyeSgnI3NpbW9uJykuaXMoJy5ibG9nLmxp
bmsnKSwgJ0NoZWNrIGZvciBtdWx0aXBsZSBjbGFzc2VzOiBFeHBlY3RlZCBjbGFzc2VzICJibG9n
IiBhbmQgImxpbmsiJyApOworCW9rKCAhalF1ZXJ5KCcjc2ltb24nKS5pcygnLmJsb2dUZXN0Jyks
ICdDaGVjayBmb3IgbXVsdGlwbGUgY2xhc3NlczogRXhwZWN0ZWQgY2xhc3NlcyAiYmxvZyIgYW5k
ICJsaW5rIiwgYnV0IG5vdCAiYmxvZ1Rlc3QiJyApOworCW9rKCBqUXVlcnkoJyNlbicpLmlzKCdb
bGFuZz0iZW4iXScpLCAnQ2hlY2sgZm9yIGF0dHJpYnV0ZTogRXhwZWN0ZWQgYXR0cmlidXRlIGxh
bmcgdG8gYmUgImVuIicgKTsKKwlvayggIWpRdWVyeSgnI2VuJykuaXMoJ1tsYW5nPSJkZSJdJyks
ICdDaGVjayBmb3IgYXR0cmlidXRlOiBFeHBlY3RlZCBhdHRyaWJ1dGUgbGFuZyB0byBiZSAiZW4i
LCBub3QgImRlIicgKTsKKwlvayggalF1ZXJ5KCcjdGV4dDEnKS5pcygnW3R5cGU9InRleHQiXScp
LCAnQ2hlY2sgZm9yIGF0dHJpYnV0ZTogRXhwZWN0ZWQgYXR0cmlidXRlIHR5cGUgdG8gYmUgInRl
eHQiJyApOworCW9rKCAhalF1ZXJ5KCcjdGV4dDEnKS5pcygnW3R5cGU9InJhZGlvIl0nKSwgJ0No
ZWNrIGZvciBhdHRyaWJ1dGU6IEV4cGVjdGVkIGF0dHJpYnV0ZSB0eXBlIHRvIGJlICJ0ZXh0Iiwg
bm90ICJyYWRpbyInICk7CisJb2soIGpRdWVyeSgnI3RleHQyJykuaXMoJzpkaXNhYmxlZCcpLCAn
Q2hlY2sgZm9yIHBzZXVkb2NsYXNzOiBFeHBlY3RlZCB0byBiZSBkaXNhYmxlZCcgKTsKKwlvaygg
IWpRdWVyeSgnI3RleHQxJykuaXMoJzpkaXNhYmxlZCcpLCAnQ2hlY2sgZm9yIHBzZXVkb2NsYXNz
OiBFeHBlY3RlZCBub3QgZGlzYWJsZWQnICk7CisJb2soIGpRdWVyeSgnI3JhZGlvMicpLmlzKCc6
Y2hlY2tlZCcpLCAnQ2hlY2sgZm9yIHBzZXVkb2NsYXNzOiBFeHBlY3RlZCB0byBiZSBjaGVja2Vk
JyApOworCW9rKCAhalF1ZXJ5KCcjcmFkaW8xJykuaXMoJzpjaGVja2VkJyksICdDaGVjayBmb3Ig
cHNldWRvY2xhc3M6IEV4cGVjdGVkIG5vdCBjaGVja2VkJyApOworCW9rKCBqUXVlcnkoJyNmb28n
KS5pcygnOmhhcyhwKScpLCAnQ2hlY2sgZm9yIGNoaWxkOiBFeHBlY3RlZCBhIGNoaWxkICJwIiBl
bGVtZW50JyApOworCW9rKCAhalF1ZXJ5KCcjZm9vJykuaXMoJzpoYXModWwpJyksICdDaGVjayBm
b3IgY2hpbGQ6IERpZCBub3QgZXhwZWN0ICJ1bCIgZWxlbWVudCcgKTsKKwlvayggalF1ZXJ5KCcj
Zm9vJykuaXMoJzpoYXMocCk6aGFzKGEpOmhhcyhjb2RlKScpLCAnQ2hlY2sgZm9yIGNoaWxkczog
RXhwZWN0ZWQgInAiLCAiYSIgYW5kICJjb2RlIiBjaGlsZCBlbGVtZW50cycgKTsKKwlvayggIWpR
dWVyeSgnI2ZvbycpLmlzKCc6aGFzKHApOmhhcyhhKTpoYXMoY29kZSk6aGFzKG9sKScpLCAnQ2hl
Y2sgZm9yIGNoaWxkczogRXhwZWN0ZWQgInAiLCAiYSIgYW5kICJjb2RlIiBjaGlsZCBlbGVtZW50
cywgYnV0IG5vICJvbCInICk7CisJb2soICFqUXVlcnkoJyNmb28nKS5pcygwKSwgJ0V4cGVjdGVk
IGZhbHNlIGZvciBhbiBpbnZhbGlkIGV4cHJlc3Npb24gLSAwJyApOworCW9rKCAhalF1ZXJ5KCcj
Zm9vJykuaXMobnVsbCksICdFeHBlY3RlZCBmYWxzZSBmb3IgYW4gaW52YWxpZCBleHByZXNzaW9u
IC0gbnVsbCcgKTsKKwlvayggIWpRdWVyeSgnI2ZvbycpLmlzKCcnKSwgJ0V4cGVjdGVkIGZhbHNl
IGZvciBhbiBpbnZhbGlkIGV4cHJlc3Npb24gLSAiIicgKTsKKwlvayggIWpRdWVyeSgnI2Zvbycp
LmlzKHVuZGVmaW5lZCksICdFeHBlY3RlZCBmYWxzZSBmb3IgYW4gaW52YWxpZCBleHByZXNzaW9u
IC0gdW5kZWZpbmVkJyApOworCisJLy8gdGVzdCBpcygpIHdpdGggY29tbWEtc2VwZXJhdGVkIGV4
cHJlc3Npb25zCisJb2soIGpRdWVyeSgnI2VuJykuaXMoJ1tsYW5nPSJlbiJdLFtsYW5nPSJkZSJd
JyksICdDb21tYS1zZXBlcmF0ZWQ7IENoZWNrIGZvciBsYW5nIGF0dHJpYnV0ZTogRXhwZWN0IGVu
IG9yIGRlJyApOworCW9rKCBqUXVlcnkoJyNlbicpLmlzKCdbbGFuZz0iZGUiXSxbbGFuZz0iZW4i
XScpLCAnQ29tbWEtc2VwZXJhdGVkOyBDaGVjayBmb3IgbGFuZyBhdHRyaWJ1dGU6IEV4cGVjdCBl
biBvciBkZScgKTsKKwlvayggalF1ZXJ5KCcjZW4nKS5pcygnW2xhbmc9ImVuIl0gLCBbbGFuZz0i
ZGUiXScpLCAnQ29tbWEtc2VwZXJhdGVkOyBDaGVjayBmb3IgbGFuZyBhdHRyaWJ1dGU6IEV4cGVj
dCBlbiBvciBkZScgKTsKKwlvayggalF1ZXJ5KCcjZW4nKS5pcygnW2xhbmc9ImRlIl0gLCBbbGFu
Zz0iZW4iXScpLCAnQ29tbWEtc2VwZXJhdGVkOyBDaGVjayBmb3IgbGFuZyBhdHRyaWJ1dGU6IEV4
cGVjdCBlbiBvciBkZScgKTsKK30pOworCit0ZXN0KCJpbmRleCgpIiwgZnVuY3Rpb24oKSB7CisJ
ZXhwZWN0KDEpOworCisJZXF1YWxzKCBqUXVlcnkoIiN0ZXh0MiIpLmluZGV4KCksIDIsICJSZXR1
cm5zIHRoZSBpbmRleCBvZiBhIGNoaWxkIGFtb25nc3QgaXRzIHNpYmxpbmdzIiApCit9KTsKKwor
dGVzdCgiaW5kZXgoT2JqZWN0fFN0cmluZ3x1bmRlZmluZWQpIiwgZnVuY3Rpb24oKSB7CisJZXhw
ZWN0KDE2KTsKKworCXZhciBlbGVtZW50cyA9IGpRdWVyeShbd2luZG93LCBkb2N1bWVudF0pLAor
CQlpbnB1dEVsZW1lbnRzID0galF1ZXJ5KCcjcmFkaW8xLCNyYWRpbzIsI2NoZWNrMSwjY2hlY2sy
Jyk7CisKKwkvLyBQYXNzaW5nIGEgbm9kZQorCWVxdWFscyggZWxlbWVudHMuaW5kZXgod2luZG93
KSwgMCwgIkNoZWNrIGZvciBpbmRleCBvZiBlbGVtZW50cyIgKTsKKwllcXVhbHMoIGVsZW1lbnRz
LmluZGV4KGRvY3VtZW50KSwgMSwgIkNoZWNrIGZvciBpbmRleCBvZiBlbGVtZW50cyIgKTsKKwll
cXVhbHMoIGlucHV0RWxlbWVudHMuaW5kZXgoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JhZGlv
MScpKSwgMCwgIkNoZWNrIGZvciBpbmRleCBvZiBlbGVtZW50cyIgKTsKKwllcXVhbHMoIGlucHV0
RWxlbWVudHMuaW5kZXgoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JhZGlvMicpKSwgMSwgIkNo
ZWNrIGZvciBpbmRleCBvZiBlbGVtZW50cyIgKTsKKwllcXVhbHMoIGlucHV0RWxlbWVudHMuaW5k
ZXgoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoZWNrMScpKSwgMiwgIkNoZWNrIGZvciBpbmRl
eCBvZiBlbGVtZW50cyIgKTsKKwllcXVhbHMoIGlucHV0RWxlbWVudHMuaW5kZXgoZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2NoZWNrMicpKSwgMywgIkNoZWNrIGZvciBpbmRleCBvZiBlbGVtZW50
cyIgKTsKKwllcXVhbHMoIGlucHV0RWxlbWVudHMuaW5kZXgod2luZG93KSwgLTEsICJDaGVjayBm
b3Igbm90IGZvdW5kIGluZGV4IiApOworCWVxdWFscyggaW5wdXRFbGVtZW50cy5pbmRleChkb2N1
bWVudCksIC0xLCAiQ2hlY2sgZm9yIG5vdCBmb3VuZCBpbmRleCIgKTsKKworCS8vIFBhc3Npbmcg
YSBqUXVlcnkgb2JqZWN0CisJLy8gZW5hYmxlZCBzaW5jZSBbNTUwMF0KKwllcXVhbHMoIGVsZW1l
bnRzLmluZGV4KCBlbGVtZW50cyApLCAwLCAiUGFzcyBpbiBhIGpRdWVyeSBvYmplY3QiICk7CisJ
ZXF1YWxzKCBlbGVtZW50cy5pbmRleCggZWxlbWVudHMuZXEoMSkgKSwgMSwgIlBhc3MgaW4gYSBq
UXVlcnkgb2JqZWN0IiApOworCWVxdWFscyggalF1ZXJ5KCIjZm9ybSA6cmFkaW8iKS5pbmRleCgg
alF1ZXJ5KCIjcmFkaW8yIikgKSwgMSwgIlBhc3MgaW4gYSBqUXVlcnkgb2JqZWN0IiApOworCisJ
Ly8gUGFzc2luZyBhIHNlbGVjdG9yIG9yIG5vdGhpbmcKKwkvLyBlbmFibGVkIHNpbmNlIFs2MzMw
XQorCWVxdWFscyggalF1ZXJ5KCcjdGV4dDInKS5pbmRleCgpLCAyLCAiQ2hlY2sgZm9yIGluZGV4
IGFtb25nc3Qgc2libGluZ3MiICk7CisJZXF1YWxzKCBqUXVlcnkoJyNmb3JtJykuY2hpbGRyZW4o
KS5lcSg0KS5pbmRleCgpLCA0LCAiQ2hlY2sgZm9yIGluZGV4IGFtb25nc3Qgc2libGluZ3MiICk7
CisJZXF1YWxzKCBqUXVlcnkoJyNyYWRpbzInKS5pbmRleCgnI2Zvcm0gOnJhZGlvJykgLCAxLCAi
Q2hlY2sgZm9yIGluZGV4IHdpdGhpbiBhIHNlbGVjdG9yIiApOworCWVxdWFscyggalF1ZXJ5KCcj
Zm9ybSA6cmFkaW8nKS5pbmRleCggalF1ZXJ5KCcjcmFkaW8yJykgKSwgMSwgIkNoZWNrIGZvciBp
bmRleCB3aXRoaW4gYSBzZWxlY3RvciIgKTsKKwllcXVhbHMoIGpRdWVyeSgnI3JhZGlvMicpLmlu
ZGV4KCcjZm9ybSA6dGV4dCcpICwgLTEsICJDaGVjayBmb3IgaW5kZXggbm90IGZvdW5kIHdpdGhp
biBhIHNlbGVjdG9yIiApOworfSk7CisKK3Rlc3QoImZpbHRlcihTZWxlY3RvcikiLCBmdW5jdGlv
bigpIHsKKwlleHBlY3QoNSk7CisJc2FtZSggalF1ZXJ5KCIjZm9ybSBpbnB1dCIpLmZpbHRlcigi
OmNoZWNrZWQiKS5nZXQoKSwgcSgicmFkaW8yIiwgImNoZWNrMSIpLCAiZmlsdGVyKFN0cmluZyki
ICk7CisJc2FtZSggalF1ZXJ5KCJwIikuZmlsdGVyKCIjYXAsICNzbmRwIikuZ2V0KCksIHEoImFw
IiwgInNuZHAiKSwgImZpbHRlcignU3RyaW5nLCBTdHJpbmcnKSIgKTsKKwlzYW1lKCBqUXVlcnko
InAiKS5maWx0ZXIoIiNhcCwjc25kcCIpLmdldCgpLCBxKCJhcCIsICJzbmRwIiksICJmaWx0ZXIo
J1N0cmluZyxTdHJpbmcnKSIgKTsKKworCS8vIHVzaW5nIGNvbnRlbnRzIHdpbGwgZ2V0IGNvbW1l
bnRzIHJlZ3VsYXIsIHRleHQsIGFuZCBjb21tZW50IG5vZGVzCisJdmFyIGogPSBqUXVlcnkoIiNu
b25ub2RlcyIpLmNvbnRlbnRzKCk7CisJZXF1YWxzKCBqLmZpbHRlcigic3BhbiIpLmxlbmd0aCwg
MSwgIkNoZWNrIG5vZGUsdGV4dG5vZGUsY29tbWVudCB0byBmaWx0ZXIgdGhlIG9uZSBzcGFuIiAp
OworCWVxdWFscyggai5maWx0ZXIoIltuYW1lXSIpLmxlbmd0aCwgMCwgIkNoZWNrIG5vZGUsdGV4
dG5vZGUsY29tbWVudCB0byBmaWx0ZXIgdGhlIG9uZSBzcGFuIiApOworfSk7CisKK3Rlc3QoImZp
bHRlcihGdW5jdGlvbikiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoMik7CisKKwlzYW1lKCBqUXVl
cnkoIiNtYWluIHAiKS5maWx0ZXIoZnVuY3Rpb24oKSB7IHJldHVybiAhalF1ZXJ5KCJhIiwgdGhp
cykubGVuZ3RoIH0pLmdldCgpLCBxKCJzbmRwIiwgImZpcnN0IiksICJmaWx0ZXIoRnVuY3Rpb24p
IiApOworCisJc2FtZSggalF1ZXJ5KCIjbWFpbiBwIikuZmlsdGVyKGZ1bmN0aW9uKGksIGVsZW0p
IHsgcmV0dXJuICFqUXVlcnkoImEiLCBlbGVtKS5sZW5ndGggfSkuZ2V0KCksIHEoInNuZHAiLCAi
Zmlyc3QiKSwgImZpbHRlcihGdW5jdGlvbikgdXNpbmcgYXJnIiApOworfSk7CisKK3Rlc3QoImZp
bHRlcihFbGVtZW50KSIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgxKTsKKworCXZhciBlbGVtZW50
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRleHQxIik7CisJc2FtZSggalF1ZXJ5KCIjZm9y
bSBpbnB1dCIpLmZpbHRlcihlbGVtZW50KS5nZXQoKSwgcSgidGV4dDEiKSwgImZpbHRlcihFbGVt
ZW50KSIgKTsKK30pOworCit0ZXN0KCJmaWx0ZXIoQXJyYXkpIiwgZnVuY3Rpb24oKSB7CisJZXhw
ZWN0KDEpOworCisJdmFyIGVsZW1lbnRzID0gWyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGV4
dDEiKSBdOworCXNhbWUoIGpRdWVyeSgiI2Zvcm0gaW5wdXQiKS5maWx0ZXIoZWxlbWVudHMpLmdl
dCgpLCBxKCJ0ZXh0MSIpLCAiZmlsdGVyKEVsZW1lbnQpIiApOworfSk7CisKK3Rlc3QoImZpbHRl
cihqUXVlcnkpIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDEpOworCisJdmFyIGVsZW1lbnRzID0g
alF1ZXJ5KCIjdGV4dDEiKTsKKwlzYW1lKCBqUXVlcnkoIiNmb3JtIGlucHV0IikuZmlsdGVyKGVs
ZW1lbnRzKS5nZXQoKSwgcSgidGV4dDEiKSwgImZpbHRlcihFbGVtZW50KSIgKTsKK30pCisKK3Rl
c3QoImNsb3Nlc3QoKSIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCgxMSk7CisJc2FtZSggalF1ZXJ5
KCJib2R5IikuY2xvc2VzdCgiYm9keSIpLmdldCgpLCBxKCJib2R5IiksICJjbG9zZXN0KGJvZHkp
IiApOworCXNhbWUoIGpRdWVyeSgiYm9keSIpLmNsb3Nlc3QoImh0bWwiKS5nZXQoKSwgcSgiaHRt
bCIpLCAiY2xvc2VzdChodG1sKSIgKTsKKwlzYW1lKCBqUXVlcnkoImJvZHkiKS5jbG9zZXN0KCJk
aXYiKS5nZXQoKSwgW10sICJjbG9zZXN0KGRpdikiICk7CisJc2FtZSggalF1ZXJ5KCIjbWFpbiIp
LmNsb3Nlc3QoInNwYW4sI2h0bWwiKS5nZXQoKSwgcSgiaHRtbCIpLCAiY2xvc2VzdChzcGFuLCNo
dG1sKSIgKTsKKworCXNhbWUoIGpRdWVyeSgiZGl2OmVxKDEpIikuY2xvc2VzdCgiZGl2OmZpcnN0
IikuZ2V0KCksIFtdLCAiY2xvc2VzdChkaXY6Zmlyc3QpIiApOworCXNhbWUoIGpRdWVyeSgiZGl2
IikuY2xvc2VzdCgiYm9keTpmaXJzdCBkaXY6bGFzdCIpLmdldCgpLCBxKCJmeC10ZXN0cyIpLCAi
Y2xvc2VzdChib2R5OmZpcnN0IGRpdjpsYXN0KSIgKTsKKworCS8vIFRlc3QgLmNsb3Nlc3QoKSBs
aW1pdGVkIGJ5IHRoZSBjb250ZXh0CisJdmFyIGpxID0galF1ZXJ5KCIjbm90aGlkZGVuZGl2Y2hp
bGQiKTsKKwlzYW1lKCBqcS5jbG9zZXN0KCJodG1sIiwgZG9jdW1lbnQuYm9keSkuZ2V0KCksIFtd
LCAiQ29udGV4dCBsaW1pdGVkLiIgKTsKKwlzYW1lKCBqcS5jbG9zZXN0KCJib2R5IiwgZG9jdW1l
bnQuYm9keSkuZ2V0KCksIFtdLCAiQ29udGV4dCBsaW1pdGVkLiIgKTsKKwlzYW1lKCBqcS5jbG9z
ZXN0KCIjbm90aGlkZGVuZGl2IiwgZG9jdW1lbnQuYm9keSkuZ2V0KCksIHEoIm5vdGhpZGRlbmRp
diIpLCAiQ29udGV4dCBub3QgcmVhY2hlZC4iICk7CisKKwkvL1Rlc3QgdGhhdCAuY2xvc2VzdCgp
IHJldHVybnMgdW5pcXVlJ2Qgc2V0CisJZXF1YWxzKCBqUXVlcnkoJyNtYWluIHAnKS5jbG9zZXN0
KCcjbWFpbicpLmxlbmd0aCwgMSwgIkNsb3Nlc3Qgc2hvdWxkIHJldHVybiBhIHVuaXF1ZSBzZXQi
ICk7CisKKwkvLyBUZXN0IG9uIGRpc2Nvbm5lY3RlZCBub2RlCisJZXF1YWxzKCBqUXVlcnkoIjxk
aXY+PHA+PC9wPjwvZGl2PiIpLmZpbmQoInAiKS5jbG9zZXN0KCJ0YWJsZSIpLmxlbmd0aCwgMCwg
Ik1ha2Ugc3VyZSBkaXNjb25uZWN0ZWQgY2xvc2VzdCB3b3JrLiIgKTsKK30pOworCit0ZXN0KCJj
bG9zZXN0KEFycmF5KSIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCg3KTsKKwlzYW1lKCBqUXVlcnko
ImJvZHkiKS5jbG9zZXN0KFsiYm9keSJdKSwgW3tzZWxlY3RvcjoiYm9keSIsIGVsZW06ZG9jdW1l
bnQuYm9keSwgbGV2ZWw6MX1dLCAiY2xvc2VzdChbYm9keV0pIiApOworCXNhbWUoIGpRdWVyeSgi
Ym9keSIpLmNsb3Nlc3QoWyJodG1sIl0pLCBbe3NlbGVjdG9yOiJodG1sIiwgZWxlbTpkb2N1bWVu
dC5kb2N1bWVudEVsZW1lbnQsIGxldmVsOjJ9XSwgImNsb3Nlc3QoW2h0bWxdKSIgKTsKKwlzYW1l
KCBqUXVlcnkoImJvZHkiKS5jbG9zZXN0KFsiZGl2Il0pLCBbXSwgImNsb3Nlc3QoW2Rpdl0pIiAp
OworCXNhbWUoIGpRdWVyeSgiI3lhaG9vIikuY2xvc2VzdChbImRpdiJdKSwgW3sic2VsZWN0b3Ii
OiJkaXYiLCAiZWxlbSI6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmb28iKSwgImxldmVsIjog
M30sIHsgInNlbGVjdG9yIjogImRpdiIsICJlbGVtIjogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
Im1haW4iKSwgImxldmVsIjogNCB9XSwgImNsb3Nlc3QoW2Rpdl0pIiApOworCXNhbWUoIGpRdWVy
eSgiI21haW4iKS5jbG9zZXN0KFsic3BhbiwjaHRtbCJdKSwgW3tzZWxlY3Rvcjoic3BhbiwjaHRt
bCIsIGVsZW06ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBsZXZlbDo0fV0sICJjbG9zZXN0KFtz
cGFuLCNodG1sXSkiICk7CisKKwlzYW1lKCBqUXVlcnkoImJvZHkiKS5jbG9zZXN0KFsiYm9keSIs
Imh0bWwiXSksIFt7c2VsZWN0b3I6ImJvZHkiLCBlbGVtOmRvY3VtZW50LmJvZHksIGxldmVsOjF9
LCB7c2VsZWN0b3I6Imh0bWwiLCBlbGVtOmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgbGV2ZWw6
Mn1dLCAiY2xvc2VzdChbYm9keSwgaHRtbF0pIiApOworCXNhbWUoIGpRdWVyeSgiYm9keSIpLmNs
b3Nlc3QoWyJzcGFuIiwiaHRtbCJdKSwgW3tzZWxlY3RvcjoiaHRtbCIsIGVsZW06ZG9jdW1lbnQu
ZG9jdW1lbnRFbGVtZW50LCBsZXZlbDoyfV0sICJjbG9zZXN0KFtib2R5LCBodG1sXSkiICk7Cit9
KTsKKwordGVzdCgibm90KFNlbGVjdG9yKSIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCg3KTsKKwll
cXVhbHMoIGpRdWVyeSgiI21haW4gPiBwI2FwID4gYSIpLm5vdCgiI2dvb2dsZSIpLmxlbmd0aCwg
MiwgIm5vdCgnc2VsZWN0b3InKSIgKTsKKwlzYW1lKCBqUXVlcnkoInAiKS5ub3QoIi5yZXN1bHQi
KS5nZXQoKSwgcSgiZmlyc3RwIiwgImFwIiwgInNuZHAiLCAiZW4iLCAic2FwIiwgImZpcnN0Iiks
ICJub3QoJy5jbGFzcycpIiApOworCXNhbWUoIGpRdWVyeSgicCIpLm5vdCgiI2FwLCAjc25kcCwg
LnJlc3VsdCIpLmdldCgpLCBxKCJmaXJzdHAiLCAiZW4iLCAic2FwIiwgImZpcnN0IiksICJub3Qo
J3NlbGVjdG9yLCBzZWxlY3RvcicpIiApOworCXNhbWUoIGpRdWVyeSgiI2Zvcm0gb3B0aW9uIiku
bm90KCJvcHRpb24uZW1wdHlvcHQ6Y29udGFpbnMoJ05vdGhpbmcnKSxbc2VsZWN0ZWRdLFt2YWx1
ZT0nMSddIikuZ2V0KCksIHEoIm9wdGlvbjFjIiwgIm9wdGlvbjFkIiwgIm9wdGlvbjJjIiwgIm9w
dGlvbjNkIiwgIm9wdGlvbjNlIiwgIm9wdGlvbjRlIiwib3B0aW9uNWIiKSwgIm5vdCgnY29tcGxl
eCBzZWxlY3RvcicpIik7CisKKwlzYW1lKCBqUXVlcnkoJyNhcCAqJykubm90KCdjb2RlJykuZ2V0
KCksIHEoImdvb2dsZSIsICJncm91cHMiLCAiYW5jaG9yMSIsICJtYXJrIiksICJub3QoJ3RhZyBz
ZWxlY3RvcicpIiApOworCXNhbWUoIGpRdWVyeSgnI2FwIConKS5ub3QoJ2NvZGUsICNtYXJrJyku
Z2V0KCksIHEoImdvb2dsZSIsICJncm91cHMiLCAiYW5jaG9yMSIpLCAibm90KCd0YWcsIElEIHNl
bGVjdG9yJykiICk7CisJc2FtZSggalF1ZXJ5KCcjYXAgKicpLm5vdCgnI21hcmssIGNvZGUnKS5n
ZXQoKSwgcSgiZ29vZ2xlIiwgImdyb3VwcyIsICJhbmNob3IxIiksICJub3QoJ0lELCB0YWcgc2Vs
ZWN0b3InKSIpOworfSk7CisKK3Rlc3QoIm5vdChFbGVtZW50KSIsIGZ1bmN0aW9uKCkgeworCWV4
cGVjdCgxKTsKKworCXZhciBzZWxlY3RzID0galF1ZXJ5KCIjZm9ybSBzZWxlY3QiKTsKKwlzYW1l
KCBzZWxlY3RzLm5vdCggc2VsZWN0c1sxXSApLmdldCgpLCBxKCJzZWxlY3QxIiwgInNlbGVjdDMi
LCAic2VsZWN0NCIsICJzZWxlY3Q1IiksICJmaWx0ZXIgb3V0IERPTSBlbGVtZW50Iik7Cit9KTsK
KwordGVzdCgibm90KEZ1bmN0aW9uKSIsIGZ1bmN0aW9uKCkgeworCXNhbWUoIGpRdWVyeSgiI21h
aW4gcCIpLm5vdChmdW5jdGlvbigpIHsgcmV0dXJuIGpRdWVyeSgiYSIsIHRoaXMpLmxlbmd0aCB9
KS5nZXQoKSwgcSgic25kcCIsICJmaXJzdCIpLCAibm90KEZ1bmN0aW9uKSIgKTsKK30pOworCit0
ZXN0KCJub3QoQXJyYXkpIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDIpOworCisJZXF1YWxzKCBq
UXVlcnkoIiNtYWluID4gcCNhcCA+IGEiKS5ub3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdv
b2dsZSIpKS5sZW5ndGgsIDIsICJub3QoRE9NRWxlbWVudCkiICk7CisJZXF1YWxzKCBqUXVlcnko
InAiKS5ub3QoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInAiKSkubGVuZ3RoLCAwLCAi
bm90KEFycmF5LWxpa2UgRE9NIGNvbGxlY3Rpb24pIiApOworfSk7CisKK3Rlc3QoIm5vdChqUXVl
cnkpIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDEpOworCisJc2FtZSggalF1ZXJ5KCJwIikubm90
KGpRdWVyeSgiI2FwLCAjc25kcCwgLnJlc3VsdCIpKS5nZXQoKSwgcSgiZmlyc3RwIiwgImVuIiwg
InNhcCIsICJmaXJzdCIpLCAibm90KGpRdWVyeSkiICk7Cit9KTsKKwordGVzdCgiaGFzKEVsZW1l
bnQpIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDIpOworCisJdmFyIG9iaiA9IGpRdWVyeSgiI21h
aW4iKS5oYXMoalF1ZXJ5KCIjc25kcCIpWzBdKTsKKwlzYW1lKCBvYmouZ2V0KCksIHEoIm1haW4i
KSwgIktlZXBzIGVsZW1lbnRzIHRoYXQgaGF2ZSB0aGUgZWxlbWVudCBhcyBhIGRlc2NlbmRhbnQi
ICk7CisKKwl2YXIgbXVsdGlwbGVQYXJlbnQgPSBqUXVlcnkoIiNtYWluLCAjaGVhZGVyIikuaGFz
KGpRdWVyeSgiI3NuZHAiKVswXSk7CisJc2FtZSggb2JqLmdldCgpLCBxKCJtYWluIiksICJEb2Vz
IG5vdCBpbmNsdWRlIGVsZW1lbnRzIHRoYXQgZG8gbm90IGhhdmUgdGhlIGVsZW1lbnQgYXMgYSBk
ZXNjZW5kYW50IiApOworfSk7CisKK3Rlc3QoImhhcyhTZWxlY3RvcikiLCBmdW5jdGlvbigpIHsK
KwlleHBlY3QoMyk7CisKKwl2YXIgb2JqID0galF1ZXJ5KCIjbWFpbiIpLmhhcygiI3NuZHAiKTsK
KwlzYW1lKCBvYmouZ2V0KCksIHEoIm1haW4iKSwgIktlZXBzIGVsZW1lbnRzIHRoYXQgaGF2ZSBh
bnkgZWxlbWVudCBtYXRjaGluZyB0aGUgc2VsZWN0b3IgYXMgYSBkZXNjZW5kYW50IiApOworCisJ
dmFyIG11bHRpcGxlUGFyZW50ID0galF1ZXJ5KCIjbWFpbiwgI2hlYWRlciIpLmhhcygiI3NuZHAi
KTsKKwlzYW1lKCBvYmouZ2V0KCksIHEoIm1haW4iKSwgIkRvZXMgbm90IGluY2x1ZGUgZWxlbWVu
dHMgdGhhdCBkbyBub3QgaGF2ZSB0aGUgZWxlbWVudCBhcyBhIGRlc2NlbmRhbnQiICk7CisKKwl2
YXIgbXVsdGlwbGVIYXMgPSBqUXVlcnkoIiNtYWluIikuaGFzKCIjc25kcCwgI2ZpcnN0Iik7CisJ
c2FtZSggbXVsdGlwbGVIYXMuZ2V0KCksIHEoIm1haW4iKSwgIk9ubHkgYWRkcyBlbGVtZW50cyBv
bmNlIiApOworfSk7CisKK3Rlc3QoImhhcyhBcnJheWlzaCkiLCBmdW5jdGlvbigpIHsKKwlleHBl
Y3QoMyk7CisKKwl2YXIgc2ltcGxlID0galF1ZXJ5KCIjbWFpbiIpLmhhcyhqUXVlcnkoIiNzbmRw
IikpOworCXNhbWUoIHNpbXBsZS5nZXQoKSwgcSgibWFpbiIpLCAiS2VlcHMgZWxlbWVudHMgdGhh
dCBoYXZlIGFueSBlbGVtZW50IGluIHRoZSBqUXVlcnkgbGlzdCBhcyBhIGRlc2NlbmRhbnQiICk7
CisKKwl2YXIgbXVsdGlwbGVQYXJlbnQgPSBqUXVlcnkoIiNtYWluLCAjaGVhZGVyIikuaGFzKGpR
dWVyeSgiI3NuZHAiKSk7CisJc2FtZSggbXVsdGlwbGVQYXJlbnQuZ2V0KCksIHEoIm1haW4iKSwg
IkRvZXMgbm90IGluY2x1ZGUgZWxlbWVudHMgdGhhdCBkbyBub3QgaGF2ZSBhbiBlbGVtZW50IGlu
IHRoZSBqUXVlcnkgbGlzdCBhcyBhIGRlc2NlbmRhbnQiICk7CisKKwl2YXIgbXVsdGlwbGVIYXMg
PSBqUXVlcnkoIiNtYWluIikuaGFzKGpRdWVyeSgiI3NuZHAsICNmaXJzdCIpKTsKKwlzYW1lKCBz
aW1wbGUuZ2V0KCksIHEoIm1haW4iKSwgIk9ubHkgYWRkcyBlbGVtZW50cyBvbmNlIiApOworfSk7
CisKK3Rlc3QoImFuZFNlbGYoKSIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCg0KTsKKwlzYW1lKCBq
UXVlcnkoIiNlbiIpLnNpYmxpbmdzKCkuYW5kU2VsZigpLmdldCgpLCBxKCJzbmRwIiwgImVuIiwg
InNhcCIpLCAiQ2hlY2sgZm9yIHNpYmxpbmdzIGFuZCBzZWxmIiApOworCXNhbWUoIGpRdWVyeSgi
I2ZvbyIpLmNoaWxkcmVuKCkuYW5kU2VsZigpLmdldCgpLCBxKCJmb28iLCAic25kcCIsICJlbiIs
ICJzYXAiKSwgIkNoZWNrIGZvciBjaGlsZHJlbiBhbmQgc2VsZiIgKTsKKwlzYW1lKCBqUXVlcnko
IiNzbmRwLCAjZW4iKS5wYXJlbnQoKS5hbmRTZWxmKCkuZ2V0KCksIHEoImZvbyIsInNuZHAiLCJl
biIpLCAiQ2hlY2sgZm9yIHBhcmVudCBhbmQgc2VsZiIgKTsKKwlzYW1lKCBqUXVlcnkoIiNncm91
cHMiKS5wYXJlbnRzKCJwLCBkaXYiKS5hbmRTZWxmKCkuZ2V0KCksIHEoIm1haW4iLCAiYXAiLCAi
Z3JvdXBzIiksICJDaGVjayBmb3IgcGFyZW50cyBhbmQgc2VsZiIgKTsKK30pOworCit0ZXN0KCJz
aWJsaW5ncyhbU3RyaW5nXSkiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoNSk7CisJc2FtZSggalF1
ZXJ5KCIjZW4iKS5zaWJsaW5ncygpLmdldCgpLCBxKCJzbmRwIiwgInNhcCIpLCAiQ2hlY2sgZm9y
IHNpYmxpbmdzIiApOworCXNhbWUoIGpRdWVyeSgiI3NuZHAiKS5zaWJsaW5ncygiOmhhcyhjb2Rl
KSIpLmdldCgpLCBxKCJzYXAiKSwgIkNoZWNrIGZvciBmaWx0ZXJlZCBzaWJsaW5ncyAoaGFzIGNv
ZGUgY2hpbGQgZWxlbWVudCkiICk7CisJc2FtZSggalF1ZXJ5KCIjc25kcCIpLnNpYmxpbmdzKCI6
aGFzKGEpIikuZ2V0KCksIHEoImVuIiwgInNhcCIpLCAiQ2hlY2sgZm9yIGZpbHRlcmVkIHNpYmxp
bmdzIChoYXMgYW5jaG9yIGNoaWxkIGVsZW1lbnQpIiApOworCXNhbWUoIGpRdWVyeSgiI2ZvbyIp
LnNpYmxpbmdzKCJmb3JtLCBiIikuZ2V0KCksIHEoImZvcm0iLCAiZmxvYXRUZXN0IiwgImxlbmd0
aHRlc3QiLCAibmFtZS10ZXN0cyIsICJ0ZXN0Rm9ybSIpLCAiQ2hlY2sgZm9yIG11bHRpcGxlIGZp
bHRlcnMiICk7CisJdmFyIHNldCA9IHEoInNuZHAiLCAiZW4iLCAic2FwIik7CisJc2FtZSggalF1
ZXJ5KCIjZW4sICNzbmRwIikuc2libGluZ3MoKS5nZXQoKSwgc2V0LCAiQ2hlY2sgZm9yIHVuaXF1
ZSByZXN1bHRzIGZyb20gc2libGluZ3MiICk7Cit9KTsKKwordGVzdCgiY2hpbGRyZW4oW1N0cmlu
Z10pIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDMpOworCXNhbWUoIGpRdWVyeSgiI2ZvbyIpLmNo
aWxkcmVuKCkuZ2V0KCksIHEoInNuZHAiLCAiZW4iLCAic2FwIiksICJDaGVjayBmb3IgY2hpbGRy
ZW4iICk7CisJc2FtZSggalF1ZXJ5KCIjZm9vIikuY2hpbGRyZW4oIjpoYXMoY29kZSkiKS5nZXQo
KSwgcSgic25kcCIsICJzYXAiKSwgIkNoZWNrIGZvciBmaWx0ZXJlZCBjaGlsZHJlbiIgKTsKKwlz
YW1lKCBqUXVlcnkoIiNmb28iKS5jaGlsZHJlbigiI2VuLCAjc2FwIikuZ2V0KCksIHEoImVuIiwg
InNhcCIpLCAiQ2hlY2sgZm9yIG11bHRpcGxlIGZpbHRlcnMiICk7Cit9KTsKKwordGVzdCgicGFy
ZW50KFtTdHJpbmddKSIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCg1KTsKKwllcXVhbHMoIGpRdWVy
eSgiI2dyb3VwcyIpLnBhcmVudCgpWzBdLmlkLCAiYXAiLCAiU2ltcGxlIHBhcmVudCBjaGVjayIg
KTsKKwllcXVhbHMoIGpRdWVyeSgiI2dyb3VwcyIpLnBhcmVudCgicCIpWzBdLmlkLCAiYXAiLCAi
RmlsdGVyZWQgcGFyZW50IGNoZWNrIiApOworCWVxdWFscyggalF1ZXJ5KCIjZ3JvdXBzIikucGFy
ZW50KCJkaXYiKS5sZW5ndGgsIDAsICJGaWx0ZXJlZCBwYXJlbnQgY2hlY2ssIG5vIG1hdGNoIiAp
OworCWVxdWFscyggalF1ZXJ5KCIjZ3JvdXBzIikucGFyZW50KCJkaXYsIHAiKVswXS5pZCwgImFw
IiwgIkNoZWNrIGZvciBtdWx0aXBsZSBmaWx0ZXJzIiApOworCXNhbWUoIGpRdWVyeSgiI2VuLCAj
c25kcCIpLnBhcmVudCgpLmdldCgpLCBxKCJmb28iKSwgIkNoZWNrIGZvciB1bmlxdWUgcmVzdWx0
cyBmcm9tIHBhcmVudCIgKTsKK30pOworCit0ZXN0KCJwYXJlbnRzKFtTdHJpbmddKSIsIGZ1bmN0
aW9uKCkgeworCWV4cGVjdCg1KTsKKwllcXVhbHMoIGpRdWVyeSgiI2dyb3VwcyIpLnBhcmVudHMo
KVswXS5pZCwgImFwIiwgIlNpbXBsZSBwYXJlbnRzIGNoZWNrIiApOworCWVxdWFscyggalF1ZXJ5
KCIjZ3JvdXBzIikucGFyZW50cygicCIpWzBdLmlkLCAiYXAiLCAiRmlsdGVyZWQgcGFyZW50cyBj
aGVjayIgKTsKKwllcXVhbHMoIGpRdWVyeSgiI2dyb3VwcyIpLnBhcmVudHMoImRpdiIpWzBdLmlk
LCAibWFpbiIsICJGaWx0ZXJlZCBwYXJlbnRzIGNoZWNrMiIgKTsKKwlzYW1lKCBqUXVlcnkoIiNn
cm91cHMiKS5wYXJlbnRzKCJwLCBkaXYiKS5nZXQoKSwgcSgiYXAiLCAibWFpbiIpLCAiQ2hlY2sg
Zm9yIG11bHRpcGxlIGZpbHRlcnMiICk7CisJc2FtZSggalF1ZXJ5KCIjZW4sICNzbmRwIikucGFy
ZW50cygpLmdldCgpLCBxKCJmb28iLCAibWFpbiIsICJkbCIsICJib2R5IiwgImh0bWwiKSwgIkNo
ZWNrIGZvciB1bmlxdWUgcmVzdWx0cyBmcm9tIHBhcmVudHMiICk7Cit9KTsKKwordGVzdCgicGFy
ZW50c1VudGlsKFtTdHJpbmddKSIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCg5KTsKKworCXZhciBw
YXJlbnRzID0galF1ZXJ5KCIjZ3JvdXBzIikucGFyZW50cygpOworCisJc2FtZSggalF1ZXJ5KCIj
Z3JvdXBzIikucGFyZW50c1VudGlsKCkuZ2V0KCksIHBhcmVudHMuZ2V0KCksICJwYXJlbnRzVW50
aWwgd2l0aCBubyBzZWxlY3RvciAobmV4dEFsbCkiICk7CisJc2FtZSggalF1ZXJ5KCIjZ3JvdXBz
IikucGFyZW50c1VudGlsKCIuZm9vIikuZ2V0KCksIHBhcmVudHMuZ2V0KCksICJwYXJlbnRzVW50
aWwgd2l0aCBpbnZhbGlkIHNlbGVjdG9yIChuZXh0QWxsKSIgKTsKKwlzYW1lKCBqUXVlcnkoIiNn
cm91cHMiKS5wYXJlbnRzVW50aWwoIiNodG1sIikuZ2V0KCksIHBhcmVudHMubm90KCc6bGFzdCcp
LmdldCgpLCAiU2ltcGxlIHBhcmVudHNVbnRpbCBjaGVjayIgKTsKKwllcXVhbHMoIGpRdWVyeSgi
I2dyb3VwcyIpLnBhcmVudHNVbnRpbCgiI2FwIikubGVuZ3RoLCAwLCAiU2ltcGxlIHBhcmVudHNV
bnRpbCBjaGVjayIgKTsKKwlzYW1lKCBqUXVlcnkoIiNncm91cHMiKS5wYXJlbnRzVW50aWwoIiNo
dG1sLCAjYm9keSIpLmdldCgpLCBwYXJlbnRzLnNsaWNlKCAwLCAzICkuZ2V0KCksICJMZXNzIHNp
bXBsZSBwYXJlbnRzVW50aWwgY2hlY2siICk7CisJc2FtZSggalF1ZXJ5KCIjZ3JvdXBzIikucGFy
ZW50c1VudGlsKCIjaHRtbCIsICJkaXYiKS5nZXQoKSwgalF1ZXJ5KCIjbWFpbiIpLmdldCgpLCAi
RmlsdGVyZWQgcGFyZW50c1VudGlsIGNoZWNrIiApOworCXNhbWUoIGpRdWVyeSgiI2dyb3VwcyIp
LnBhcmVudHNVbnRpbCgiI2h0bWwiLCAicCxkaXYsZGwiKS5nZXQoKSwgcGFyZW50cy5zbGljZSgg
MCwgMyApLmdldCgpLCAiTXVsdGlwbGUtZmlsdGVyZWQgcGFyZW50c1VudGlsIGNoZWNrIiApOwor
CWVxdWFscyggalF1ZXJ5KCIjZ3JvdXBzIikucGFyZW50c1VudGlsKCIjaHRtbCIsICJzcGFuIiku
bGVuZ3RoLCAwLCAiRmlsdGVyZWQgcGFyZW50c1VudGlsIGNoZWNrLCBubyBtYXRjaCIgKTsKKwlz
YW1lKCBqUXVlcnkoIiNncm91cHMsICNhcCIpLnBhcmVudHNVbnRpbCgiI2h0bWwiLCAicCxkaXYs
ZGwiKS5nZXQoKSwgcGFyZW50cy5zbGljZSggMCwgMyApLmdldCgpLCAiTXVsdGktc291cmNlLCBt
dWx0aXBsZS1maWx0ZXJlZCBwYXJlbnRzVW50aWwgY2hlY2siICk7Cit9KTsKKwordGVzdCgibmV4
dChbU3RyaW5nXSkiLCBmdW5jdGlvbigpIHsKKwlleHBlY3QoNCk7CisJZXF1YWxzKCBqUXVlcnko
IiNhcCIpLm5leHQoKVswXS5pZCwgImZvbyIsICJTaW1wbGUgbmV4dCBjaGVjayIgKTsKKwllcXVh
bHMoIGpRdWVyeSgiI2FwIikubmV4dCgiZGl2IilbMF0uaWQsICJmb28iLCAiRmlsdGVyZWQgbmV4
dCBjaGVjayIgKTsKKwllcXVhbHMoIGpRdWVyeSgiI2FwIikubmV4dCgicCIpLmxlbmd0aCwgMCwg
IkZpbHRlcmVkIG5leHQgY2hlY2ssIG5vIG1hdGNoIiApOworCWVxdWFscyggalF1ZXJ5KCIjYXAi
KS5uZXh0KCJkaXYsIHAiKVswXS5pZCwgImZvbyIsICJNdWx0aXBsZSBmaWx0ZXJzIiApOworfSk7
CisKK3Rlc3QoInByZXYoW1N0cmluZ10pIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDQpOworCWVx
dWFscyggalF1ZXJ5KCIjZm9vIikucHJldigpWzBdLmlkLCAiYXAiLCAiU2ltcGxlIHByZXYgY2hl
Y2siICk7CisJZXF1YWxzKCBqUXVlcnkoIiNmb28iKS5wcmV2KCJwIilbMF0uaWQsICJhcCIsICJG
aWx0ZXJlZCBwcmV2IGNoZWNrIiApOworCWVxdWFscyggalF1ZXJ5KCIjZm9vIikucHJldigiZGl2
IikubGVuZ3RoLCAwLCAiRmlsdGVyZWQgcHJldiBjaGVjaywgbm8gbWF0Y2giICk7CisJZXF1YWxz
KCBqUXVlcnkoIiNmb28iKS5wcmV2KCJwLCBkaXYiKVswXS5pZCwgImFwIiwgIk11bHRpcGxlIGZp
bHRlcnMiICk7Cit9KTsKKwordGVzdCgibmV4dEFsbChbU3RyaW5nXSkiLCBmdW5jdGlvbigpIHsK
KwlleHBlY3QoNCk7CisKKwl2YXIgZWxlbXMgPSBqUXVlcnkoJyNmb3JtJykuY2hpbGRyZW4oKTsK
KworCXNhbWUoIGpRdWVyeSgiI2xhYmVsLWZvciIpLm5leHRBbGwoKS5nZXQoKSwgZWxlbXMubm90
KCc6Zmlyc3QnKS5nZXQoKSwgIlNpbXBsZSBuZXh0QWxsIGNoZWNrIiApOworCXNhbWUoIGpRdWVy
eSgiI2xhYmVsLWZvciIpLm5leHRBbGwoJ2lucHV0JykuZ2V0KCksIGVsZW1zLm5vdCgnOmZpcnN0
JykuZmlsdGVyKCdpbnB1dCcpLmdldCgpLCAiRmlsdGVyZWQgbmV4dEFsbCBjaGVjayIgKTsKKwlz
YW1lKCBqUXVlcnkoIiNsYWJlbC1mb3IiKS5uZXh0QWxsKCdpbnB1dCxzZWxlY3QnKS5nZXQoKSwg
ZWxlbXMubm90KCc6Zmlyc3QnKS5maWx0ZXIoJ2lucHV0LHNlbGVjdCcpLmdldCgpLCAiTXVsdGlw
bGUtZmlsdGVyZWQgbmV4dEFsbCBjaGVjayIgKTsKKwlzYW1lKCBqUXVlcnkoIiNsYWJlbC1mb3Is
ICNoaWRkZW4xIikubmV4dEFsbCgnaW5wdXQsc2VsZWN0JykuZ2V0KCksIGVsZW1zLm5vdCgnOmZp
cnN0JykuZmlsdGVyKCdpbnB1dCxzZWxlY3QnKS5nZXQoKSwgIk11bHRpLXNvdXJjZSwgbXVsdGlw
bGUtZmlsdGVyZWQgbmV4dEFsbCBjaGVjayIgKTsKK30pOworCit0ZXN0KCJwcmV2QWxsKFtTdHJp
bmddKSIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCg0KTsKKworCXZhciBlbGVtcyA9IGpRdWVyeSgg
alF1ZXJ5KCcjZm9ybScpLmNoaWxkcmVuKCkuc2xpY2UoMCwgMTIpLmdldCgpLnJldmVyc2UoKSAp
OworCisJc2FtZSggalF1ZXJ5KCIjYXJlYTEiKS5wcmV2QWxsKCkuZ2V0KCksIGVsZW1zLmdldCgp
LCAiU2ltcGxlIHByZXZBbGwgY2hlY2siICk7CisJc2FtZSggalF1ZXJ5KCIjYXJlYTEiKS5wcmV2
QWxsKCdpbnB1dCcpLmdldCgpLCBlbGVtcy5maWx0ZXIoJ2lucHV0JykuZ2V0KCksICJGaWx0ZXJl
ZCBwcmV2QWxsIGNoZWNrIiApOworCXNhbWUoIGpRdWVyeSgiI2FyZWExIikucHJldkFsbCgnaW5w
dXQsc2VsZWN0JykuZ2V0KCksIGVsZW1zLmZpbHRlcignaW5wdXQsc2VsZWN0JykuZ2V0KCksICJN
dWx0aXBsZS1maWx0ZXJlZCBwcmV2QWxsIGNoZWNrIiApOworCXNhbWUoIGpRdWVyeSgiI2FyZWEx
LCAjaGlkZGVuMSIpLnByZXZBbGwoJ2lucHV0LHNlbGVjdCcpLmdldCgpLCBlbGVtcy5maWx0ZXIo
J2lucHV0LHNlbGVjdCcpLmdldCgpLCAiTXVsdGktc291cmNlLCBtdWx0aXBsZS1maWx0ZXJlZCBw
cmV2QWxsIGNoZWNrIiApOworfSk7CisKK3Rlc3QoIm5leHRVbnRpbChbU3RyaW5nXSkiLCBmdW5j
dGlvbigpIHsKKwlleHBlY3QoMTEpOworCisJdmFyIGVsZW1zID0galF1ZXJ5KCcjZm9ybScpLmNo
aWxkcmVuKCkuc2xpY2UoIDIsIDEyICk7CisKKwlzYW1lKCBqUXVlcnkoIiN0ZXh0MSIpLm5leHRV
bnRpbCgpLmdldCgpLCBqUXVlcnkoIiN0ZXh0MSIpLm5leHRBbGwoKS5nZXQoKSwgIm5leHRVbnRp
bCB3aXRoIG5vIHNlbGVjdG9yIChuZXh0QWxsKSIgKTsKKwlzYW1lKCBqUXVlcnkoIiN0ZXh0MSIp
Lm5leHRVbnRpbCgiLmZvbyIpLmdldCgpLCBqUXVlcnkoIiN0ZXh0MSIpLm5leHRBbGwoKS5nZXQo
KSwgIm5leHRVbnRpbCB3aXRoIGludmFsaWQgc2VsZWN0b3IgKG5leHRBbGwpIiApOworCXNhbWUo
IGpRdWVyeSgiI3RleHQxIikubmV4dFVudGlsKCIjYXJlYTEiKS5nZXQoKSwgZWxlbXMuZ2V0KCks
ICJTaW1wbGUgbmV4dFVudGlsIGNoZWNrIiApOworCWVxdWFscyggalF1ZXJ5KCIjdGV4dDEiKS5u
ZXh0VW50aWwoIiN0ZXh0MiIpLmxlbmd0aCwgMCwgIlNpbXBsZSBuZXh0VW50aWwgY2hlY2siICk7
CisJc2FtZSggalF1ZXJ5KCIjdGV4dDEiKS5uZXh0VW50aWwoIiNhcmVhMSwgI3JhZGlvMSIpLmdl
dCgpLCBqUXVlcnkoIiN0ZXh0MSIpLm5leHQoKS5nZXQoKSwgIkxlc3Mgc2ltcGxlIG5leHRVbnRp
bCBjaGVjayIgKTsKKwlzYW1lKCBqUXVlcnkoIiN0ZXh0MSIpLm5leHRVbnRpbCgiI2FyZWExIiwg
ImlucHV0IikuZ2V0KCksIGVsZW1zLm5vdCgiYnV0dG9uIikuZ2V0KCksICJGaWx0ZXJlZCBuZXh0
VW50aWwgY2hlY2siICk7CisJc2FtZSggalF1ZXJ5KCIjdGV4dDEiKS5uZXh0VW50aWwoIiNhcmVh
MSIsICJidXR0b24iKS5nZXQoKSwgZWxlbXMubm90KCJpbnB1dCIpLmdldCgpLCAiRmlsdGVyZWQg
bmV4dFVudGlsIGNoZWNrIiApOworCXNhbWUoIGpRdWVyeSgiI3RleHQxIikubmV4dFVudGlsKCIj
YXJlYTEiLCAiYnV0dG9uLGlucHV0IikuZ2V0KCksIGVsZW1zLmdldCgpLCAiTXVsdGlwbGUtZmls
dGVyZWQgbmV4dFVudGlsIGNoZWNrIiApOworCWVxdWFscyggalF1ZXJ5KCIjdGV4dDEiKS5uZXh0
VW50aWwoIiNhcmVhMSIsICJkaXYiKS5sZW5ndGgsIDAsICJGaWx0ZXJlZCBuZXh0VW50aWwgY2hl
Y2ssIG5vIG1hdGNoIiApOworCXNhbWUoIGpRdWVyeSgiI3RleHQxLCAjaGlkZGVuMSIpLm5leHRV
bnRpbCgiI2FyZWExIiwgImJ1dHRvbixpbnB1dCIpLmdldCgpLCBlbGVtcy5nZXQoKSwgIk11bHRp
LXNvdXJjZSwgbXVsdGlwbGUtZmlsdGVyZWQgbmV4dFVudGlsIGNoZWNrIiApOworCisJc2FtZSgg
alF1ZXJ5KCIjdGV4dDEiKS5uZXh0VW50aWwoIltjbGFzcz1mb29dIikuZ2V0KCksIGpRdWVyeSgi
I3RleHQxIikubmV4dEFsbCgpLmdldCgpLCAiTm9uLWVsZW1lbnQgbm9kZXMgbXVzdCBiZSBza2lw
cGVkLCBzaW5jZSB0aGV5IGhhdmUgbm8gYXR0cmlidXRlcyIgKTsKK30pOworCit0ZXN0KCJwcmV2
VW50aWwoW1N0cmluZ10pIiwgZnVuY3Rpb24oKSB7CisJZXhwZWN0KDEwKTsKKworCXZhciBlbGVt
cyA9IGpRdWVyeSgiI2FyZWExIikucHJldkFsbCgpOworCisJc2FtZSggalF1ZXJ5KCIjYXJlYTEi
KS5wcmV2VW50aWwoKS5nZXQoKSwgZWxlbXMuZ2V0KCksICJwcmV2VW50aWwgd2l0aCBubyBzZWxl
Y3RvciAocHJldkFsbCkiICk7CisJc2FtZSggalF1ZXJ5KCIjYXJlYTEiKS5wcmV2VW50aWwoIi5m
b28iKS5nZXQoKSwgZWxlbXMuZ2V0KCksICJwcmV2VW50aWwgd2l0aCBpbnZhbGlkIHNlbGVjdG9y
IChwcmV2QWxsKSIgKTsKKwlzYW1lKCBqUXVlcnkoIiNhcmVhMSIpLnByZXZVbnRpbCgibGFiZWwi
KS5nZXQoKSwgZWxlbXMubm90KCc6bGFzdCcpLmdldCgpLCAiU2ltcGxlIHByZXZVbnRpbCBjaGVj
ayIgKTsKKwllcXVhbHMoIGpRdWVyeSgiI2FyZWExIikucHJldlVudGlsKCIjYnV0dG9uIikubGVu
Z3RoLCAwLCAiU2ltcGxlIHByZXZVbnRpbCBjaGVjayIgKTsKKwlzYW1lKCBqUXVlcnkoIiNhcmVh
MSIpLnByZXZVbnRpbCgibGFiZWwsICNzZWFyY2giKS5nZXQoKSwgalF1ZXJ5KCIjYXJlYTEiKS5w
cmV2KCkuZ2V0KCksICJMZXNzIHNpbXBsZSBwcmV2VW50aWwgY2hlY2siICk7CisJc2FtZSggalF1
ZXJ5KCIjYXJlYTEiKS5wcmV2VW50aWwoImxhYmVsIiwgImlucHV0IikuZ2V0KCksIGVsZW1zLm5v
dCgnOmxhc3QnKS5ub3QoImJ1dHRvbiIpLmdldCgpLCAiRmlsdGVyZWQgcHJldlVudGlsIGNoZWNr
IiApOworCXNhbWUoIGpRdWVyeSgiI2FyZWExIikucHJldlVudGlsKCJsYWJlbCIsICJidXR0b24i
KS5nZXQoKSwgZWxlbXMubm90KCc6bGFzdCcpLm5vdCgiaW5wdXQiKS5nZXQoKSwgIkZpbHRlcmVk
IHByZXZVbnRpbCBjaGVjayIgKTsKKwlzYW1lKCBqUXVlcnkoIiNhcmVhMSIpLnByZXZVbnRpbCgi
bGFiZWwiLCAiYnV0dG9uLGlucHV0IikuZ2V0KCksIGVsZW1zLm5vdCgnOmxhc3QnKS5nZXQoKSwg
Ik11bHRpcGxlLWZpbHRlcmVkIHByZXZVbnRpbCBjaGVjayIgKTsKKwllcXVhbHMoIGpRdWVyeSgi
I2FyZWExIikucHJldlVudGlsKCJsYWJlbCIsICJkaXYiKS5sZW5ndGgsIDAsICJGaWx0ZXJlZCBw
cmV2VW50aWwgY2hlY2ssIG5vIG1hdGNoIiApOworCXNhbWUoIGpRdWVyeSgiI2FyZWExLCAjaGlk
ZGVuMSIpLnByZXZVbnRpbCgibGFiZWwiLCAiYnV0dG9uLGlucHV0IikuZ2V0KCksIGVsZW1zLm5v
dCgnOmxhc3QnKS5nZXQoKSwgIk11bHRpLXNvdXJjZSwgbXVsdGlwbGUtZmlsdGVyZWQgcHJldlVu
dGlsIGNoZWNrIiApOworfSk7CisKK3Rlc3QoImNvbnRlbnRzKCkiLCBmdW5jdGlvbigpIHsKKwll
eHBlY3QoMTIpOworCWVxdWFscyggalF1ZXJ5KCIjYXAiKS5jb250ZW50cygpLmxlbmd0aCwgOSwg
IkNoZWNrIGVsZW1lbnQgY29udGVudHMiICk7CisJb2soIGpRdWVyeSgiI2lmcmFtZSIpLmNvbnRl
bnRzKClbMF0sICJDaGVjayBleGlzdGFuY2Ugb2YgSUZyYW1lIGRvY3VtZW50IiApOworCXZhciBp
Ym9keSA9IGpRdWVyeSgiI2xvYWRlZGlmcmFtZSIpLmNvbnRlbnRzKClbMF0uYm9keTsKKwlvaygg
aWJvZHksICJDaGVjayBleGlzdGFuY2Ugb2YgSUZyYW1lIGJvZHkiICk7CisKKwllcXVhbHMoIGpR
dWVyeSgic3BhbiIsIGlib2R5KS50ZXh0KCksICJzcGFuIHRleHQiLCAiRmluZCBzcGFuIGluIElG
cmFtZSBhbmQgY2hlY2sgaXRzIHRleHQiICk7CisKKwlqUXVlcnkoaWJvZHkpLmFwcGVuZCgiPGRp
dj5pbml0IHRleHQ8L2Rpdj4iKTsKKwllcXVhbHMoIGpRdWVyeSgiZGl2IiwgaWJvZHkpLmxlbmd0
aCwgMiwgIkNoZWNrIHRoZSBvcmlnaW5hbCBkaXYgYW5kIHRoZSBuZXcgZGl2IGFyZSBpbiBJRnJh
bWUiICk7CisKKwllcXVhbHMoIGpRdWVyeSgiZGl2Omxhc3QiLCBpYm9keSkudGV4dCgpLCAiaW5p
dCB0ZXh0IiwgIkFkZCB0ZXh0IHRvIGRpdiBpbiBJRnJhbWUiICk7CisKKwlqUXVlcnkoImRpdjps
YXN0IiwgaWJvZHkpLnRleHQoImRpdiB0ZXh0Iik7CisJZXF1YWxzKCBqUXVlcnkoImRpdjpsYXN0
IiwgaWJvZHkpLnRleHQoKSwgImRpdiB0ZXh0IiwgIkFkZCB0ZXh0IHRvIGRpdiBpbiBJRnJhbWUi
ICk7CisKKwlqUXVlcnkoImRpdjpsYXN0IiwgaWJvZHkpLnJlbW92ZSgpOworCWVxdWFscyggalF1
ZXJ5KCJkaXYiLCBpYm9keSkubGVuZ3RoLCAxLCAiRGVsZXRlIHRoZSBkaXYgYW5kIGNoZWNrIG9u
bHkgb25lIGRpdiBsZWZ0IGluIElGcmFtZSIgKTsKKworCWVxdWFscyggalF1ZXJ5KCJkaXYiLCBp
Ym9keSkudGV4dCgpLCAic3BhbiB0ZXh0IiwgIk1ha2Ugc3VyZSB0aGUgY29ycmVjdCBkaXYgaXMg
c3RpbGwgbGVmdCBhZnRlciBkZWxldGlvbiBpbiBJRnJhbWUiICk7CisKKwlqUXVlcnkoIjx0YWJs
ZS8+IiwgaWJvZHkpLmFwcGVuZCgiPHRyPjx0ZD5jZWxsPC90ZD48L3RyPiIpLmFwcGVuZFRvKGli
b2R5KTsKKwlqUXVlcnkoInRhYmxlIiwgaWJvZHkpLnJlbW92ZSgpOworCWVxdWFscyggalF1ZXJ5
KCJkaXYiLCBpYm9keSkubGVuZ3RoLCAxLCAiQ2hlY2sgZm9yIEpTIGVycm9yIG9uIGFkZCBhbmQg
ZGVsZXRlIG9mIGEgdGFibGUgaW4gSUZyYW1lIiApOworCisJLy8gdXNpbmcgY29udGVudHMgd2ls
bCBnZXQgY29tbWVudHMgcmVndWxhciwgdGV4dCwgYW5kIGNvbW1lbnQgbm9kZXMKKwl2YXIgYyA9
IGpRdWVyeSgiI25vbm5vZGVzIikuY29udGVudHMoKS5jb250ZW50cygpOworCWVxdWFscyggYy5s
ZW5ndGgsIDEsICJDaGVjayBub2RlLHRleHRub2RlLGNvbW1lbnQgY29udGVudHMgaXMganVzdCBv
bmUiICk7CisJZXF1YWxzKCBjWzBdLm5vZGVWYWx1ZSwgImhpIiwgIkNoZWNrIG5vZGUsdGV4dG5v
ZGUsY29tbWVudCBjb250ZW50cyBpcyBqdXN0IHRoZSBvbmUgZnJvbSBzcGFuIiApOworfSk7CisK
K3Rlc3QoImFkZChTdHJpbmd8RWxlbWVudHxBcnJheXx1bmRlZmluZWQpIiwgZnVuY3Rpb24oKSB7
CisJZXhwZWN0KDE2KTsKKwlzYW1lKCBqUXVlcnkoIiNzbmRwIikuYWRkKCIjZW4iKS5hZGQoIiNz
YXAiKS5nZXQoKSwgcSgic25kcCIsICJlbiIsICJzYXAiKSwgIkNoZWNrIGVsZW1lbnRzIGZyb20g
ZG9jdW1lbnQiICk7CisJc2FtZSggalF1ZXJ5KCIjc25kcCIpLmFkZCggalF1ZXJ5KCIjZW4iKVsw
XSApLmFkZCggalF1ZXJ5KCIjc2FwIikgKS5nZXQoKSwgcSgic25kcCIsICJlbiIsICJzYXAiKSwg
IkNoZWNrIGVsZW1lbnRzIGZyb20gZG9jdW1lbnQiICk7CisJb2soIGpRdWVyeShbXSkuYWRkKGpR
dWVyeSgiI2Zvcm0iKVswXS5lbGVtZW50cykubGVuZ3RoID49IDEzLCAiQ2hlY2sgZWxlbWVudHMg
ZnJvbSBhcnJheSIgKTsKKworCS8vIEZvciB0aGUgdGltZSBiZWluZywgd2UncmUgZGlzY29udGlu
dWluZyBzdXBwb3J0IGZvciBqUXVlcnkoZm9ybS5lbGVtZW50cykgc2luY2UgaXQncyBhbWJpZ3Vv
dXMgaW4gSUUKKwkvLyB1c2UgalF1ZXJ5KFtdKS5hZGQoZm9ybS5lbGVtZW50cykgaW5zdGVhZC4K
KwkvL2VxdWFscyggalF1ZXJ5KFtdKS5hZGQoalF1ZXJ5KCIjZm9ybSIpWzBdLmVsZW1lbnRzKS5s
ZW5ndGgsIGpRdWVyeShqUXVlcnkoIiNmb3JtIilbMF0uZWxlbWVudHMpLmxlbmd0aCwgIkFycmF5
IGluIGNvbnN0cnVjdG9yIG11c3QgZXF1YWxzIGFycmF5IGluIGFkZCgpIiApOworCisJdmFyIGRp
dnMgPSBqUXVlcnkoIjxkaXYvPiIpLmFkZCgiI3NuZHAiKTsKKwlvayggIWRpdnNbMF0ucGFyZW50
Tm9kZSwgIk1ha2Ugc3VyZSB0aGUgZmlyc3QgZWxlbWVudCBpcyBzdGlsbCB0aGUgZGlzY29ubmVj
dGVkIG5vZGUuIiApOworCisJZGl2cyA9IGpRdWVyeSgiPGRpdj50ZXN0PC9kaXY+IikuYWRkKCIj
c25kcCIpOworCWVxdWFscyggZGl2c1swXS5wYXJlbnROb2RlLm5vZGVUeXBlLCAxMSwgIk1ha2Ug
c3VyZSB0aGUgZmlyc3QgZWxlbWVudCBpcyBzdGlsbCB0aGUgZGlzY29ubmVjdGVkIG5vZGUuIiAp
OworCisJZGl2cyA9IGpRdWVyeSgiI3NuZHAiKS5hZGQoIjxkaXYvPiIpOworCW9rKCAhZGl2c1sx
XS5wYXJlbnROb2RlLCAiTWFrZSBzdXJlIHRoZSBmaXJzdCBlbGVtZW50IGlzIHN0aWxsIHRoZSBk
aXNjb25uZWN0ZWQgbm9kZS4iICk7CisKKwl2YXIgdG1wID0galF1ZXJ5KCI8ZGl2Lz4iKTsKKwor
CXZhciB4ID0galF1ZXJ5KFtdKS5hZGQoalF1ZXJ5KCI8cCBpZD0neDEnPnh4eDwvcD4iKS5hcHBl
bmRUbyh0bXApKS5hZGQoalF1ZXJ5KCI8cCBpZD0neDInPnh4eDwvcD4iKS5hcHBlbmRUbyh0bXAp
KTsKKwllcXVhbHMoIHhbMF0uaWQsICJ4MSIsICJDaGVjayBvbi10aGUtZmx5IGVsZW1lbnQxIiAp
OworCWVxdWFscyggeFsxXS5pZCwgIngyIiwgIkNoZWNrIG9uLXRoZS1mbHkgZWxlbWVudDIiICk7
CisKKwl2YXIgeCA9IGpRdWVyeShbXSkuYWRkKGpRdWVyeSgiPHAgaWQ9J3gxJz54eHg8L3A+Iiku
YXBwZW5kVG8odG1wKVswXSkuYWRkKGpRdWVyeSgiPHAgaWQ9J3gyJz54eHg8L3A+IikuYXBwZW5k
VG8odG1wKVswXSk7CisJZXF1YWxzKCB4WzBdLmlkLCAieDEiLCAiQ2hlY2sgb24tdGhlLWZseSBl
bGVtZW50MSIgKTsKKwllcXVhbHMoIHhbMV0uaWQsICJ4MiIsICJDaGVjayBvbi10aGUtZmx5IGVs
ZW1lbnQyIiApOworCisJdmFyIHggPSBqUXVlcnkoW10pLmFkZChqUXVlcnkoIjxwIGlkPSd4MSc+
eHh4PC9wPiIpKS5hZGQoalF1ZXJ5KCI8cCBpZD0neDInPnh4eDwvcD4iKSk7CisJZXF1YWxzKCB4
WzBdLmlkLCAieDEiLCAiQ2hlY2sgb24tdGhlLWZseSBlbGVtZW50MSIgKTsKKwllcXVhbHMoIHhb
MV0uaWQsICJ4MiIsICJDaGVjayBvbi10aGUtZmx5IGVsZW1lbnQyIiApOworCisJdmFyIHggPSBq
UXVlcnkoW10pLmFkZCgiPHAgaWQ9J3gxJz54eHg8L3A+IikuYWRkKCI8cCBpZD0neDInPnh4eDwv
cD4iKTsKKwllcXVhbHMoIHhbMF0uaWQsICJ4MSIsICJDaGVjayBvbi10aGUtZmx5IGVsZW1lbnQx
IiApOworCWVxdWFscyggeFsxXS5pZCwgIngyIiwgIkNoZWNrIG9uLXRoZS1mbHkgZWxlbWVudDIi
ICk7CisKKwl2YXIgbm90RGVmaW5lZDsKKwllcXVhbHMoIGpRdWVyeShbXSkuYWRkKG5vdERlZmlu
ZWQpLmxlbmd0aCwgMCwgIkNoZWNrIHRoYXQgdW5kZWZpbmVkIGFkZHMgbm90aGluZyIgKTsKKwor
CW9rKCBqUXVlcnkoW10pLmFkZCggZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvcm0nKSApLmxl
bmd0aCA+PSAxMywgIkFkZCBhIGZvcm0gKGFkZHMgdGhlIGVsZW1lbnRzKSIgKTsKK30pOworCit0
ZXN0KCJhZGQoU3RyaW5nLCBDb250ZXh0KSIsIGZ1bmN0aW9uKCkgeworCWV4cGVjdCg2KTsKKwkK
KwlkZWVwRXF1YWwoIGpRdWVyeSggIiNmaXJzdHAiICkuYWRkKCAiI2FwIiApLmdldCgpLCBxKCAi
Zmlyc3RwIiwgImFwIiApLCAiQWRkIHNlbGVjdG9yIHRvIHNlbGVjdG9yICIgKTsKKwlkZWVwRXF1
YWwoIGpRdWVyeSggZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpcnN0cCIpICkuYWRkKCAiI2Fw
IiApLmdldCgpLCBxKCAiZmlyc3RwIiwgImFwIiApLCAiQWRkIGdFQklkIHRvIHNlbGVjdG9yIiAp
OworCWRlZXBFcXVhbCggalF1ZXJ5KCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmlyc3RwIikg
KS5hZGQoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhcCIpICkuZ2V0KCksIHEoICJmaXJzdHAi
LCAiYXAiICksICJBZGQgZ0VCSWQgdG8gZ0VCSWQiICk7CisKKwl2YXIgY3R4ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImZpcnN0cCIpOworCWRlZXBFcXVhbCggalF1ZXJ5KCAiI2ZpcnN0cCIg
KS5hZGQoICIjYXAiLCBjdHggKS5nZXQoKSwgcSggImZpcnN0cCIgKSwgIkFkZCBzZWxlY3RvciB0
byBzZWxlY3RvciAiICk7CisJZGVlcEVxdWFsKCBqUXVlcnkoIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJmaXJzdHAiKSApLmFkZCggIiNhcCIsIGN0eCApLmdldCgpLCBxKCAiZmlyc3RwIiApLCAi
QWRkIGdFQklkIHRvIHNlbGVjdG9yLCBub3QgaW4gY29udGV4dCIgKTsKKwlkZWVwRXF1YWwoIGpR
dWVyeSggZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpcnN0cCIpICkuYWRkKCAiI2FwIiwgZG9j
dW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXSApLmdldCgpLCBxKCAiZmlyc3Rw
IiwgImFwIiApLCAiQWRkIGdFQklkIHRvIHNlbGVjdG9yLCBpbiBjb250ZXh0IiApOworfSk7CgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9qcXVlcnkvcmVzb3VyY2VzL3Rlc3QvdW5p
dC90cmF2ZXJzaW5nLmpzCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IGFsbG93LXRhYnMKICAgKyB5ZXMKCg==
</data>
<flag name="review"
          id="77057"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>