<?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>77175</bug_id>
          
          <creation_ts>2012-01-26 19:51:47 -0800</creation_ts>
          <short_desc>Import Chromium&apos;s dom_perf test</short_desc>
          <delta_ts>2012-01-27 14:03:41 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>77037</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>abarth</cc>
    
    <cc>fishd</cc>
    
    <cc>ojan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>543758</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-01-26 19:51:47 -0800</bug_when>
    <thetext>Chromium perf bots run dom_perf tests internally developed at Google. However, this test suite hasn&apos;t been publicly available despite the fact it has caught a number of webcore regressions. We should import it to WebKit to be ran by run-perf-test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543859</commentid>
    <comment_count>1</comment_count>
      <attachid>124266</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-01-26 23:52:46 -0800</bug_when>
    <thetext>Created attachment 124266
Adds dom_perf</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543874</commentid>
    <comment_count>2</comment_count>
      <attachid>124266</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-27 01:04:29 -0800</bug_when>
    <thetext>Comment on attachment 124266
Adds dom_perf

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

Is this the canonical version of this perf test?  If not, should we add a README file explaining where to find the canonical version?

&gt; PerformanceTests/ChangeLog:13
&gt; +        * ChromiumDOMPerf: Added.

Can we just call it DOMPerf?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543916</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-01-27 02:29:55 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 124266 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=124266&amp;action=review
&gt; 
&gt; Is this the canonical version of this perf test?  If not, should we add a README file explaining where to find the canonical version?

By &quot;canonical&quot;, do you mean the original version? There&apos;s a copy of this benchmark in Google&apos;s internal repository but we can&apos;t really point to that since it&apos;s not publicly available. ChromiumDOMPerf/resources/dom is an exact copy of the original benchmark (except indentation styles and some minor nits).

I don&apos;t think anyone&apos;s working to make the rest of test suite publicly available and I don&apos;t plan to.

&gt;&gt; PerformanceTests/ChangeLog:13
&gt;&gt; +        * ChromiumDOMPerf: Added.
&gt; 
&gt; Can we just call it DOMPerf?

I want to keep this name to differentiate it from other DOM perf tests will be adding.\</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543922</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-27 02:42:01 -0800</bug_when>
    <thetext>&gt; By &quot;canonical&quot;, do you mean the original version? There&apos;s a copy of this benchmark in Google&apos;s internal repository but we can&apos;t really point to that since it&apos;s not publicly available. ChromiumDOMPerf/resources/dom is an exact copy of the original benchmark (except indentation styles and some minor nits).
&gt; 
&gt; I don&apos;t think anyone&apos;s working to make the rest of test suite publicly available and I don&apos;t plan to.

Ok.

&gt; &gt;&gt; PerformanceTests/ChangeLog:13
&gt; &gt;&gt; +        * ChromiumDOMPerf: Added.
&gt; &gt; 
&gt; &gt; Can we just call it DOMPerf?
&gt; 
&gt; I want to keep this name to differentiate it from other DOM perf tests will be adding.\

Maybe we should give it a snappier name then?  Maybe something like DOMSpider ?  Calling it ChromiumDOMPerf seems to imply that it belongs to Chromium, which isn&apos;t really right.  It belongs to the WebKit community (or perhaps the open source community at large).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544343</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-01-27 14:03:41 -0800</bug_when>
    <thetext>Committed r106147: &lt;http://trac.webkit.org/changeset/106147&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124266</attachid>
            <date>2012-01-26 23:52:46 -0800</date>
            <delta_ts>2012-01-27 01:04:28 -0800</delta_ts>
            <desc>Adds dom_perf</desc>
            <filename>bug-77175-20120126235244.patch</filename>
            <type>text/plain</type>
            <size>138795</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMDYwODkpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDEyLTAxLTI2ICBS
eW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEltcG9ydCBDaHJvbWl1
bSdzIGRvbV9wZXJmIHRlc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTc3MTc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgSW1wb3J0IGRvbV9wZXJmLgorCisgICAgICAgIE5vdGUgcmVzb3VyY2VzL2RvbS9z
dWl0ZXMuanMgaXNuJ3QgdXNlZCBieSBhbnkgaHRtbCBmaWxlIHlldCBidXQgaXQgd2lsbCBiZSB1
c2VkIGJ5IENocm9taXVtIHBvcnQKKyAgICAgICAgb25jZSBpdHMgcGVyZiBib3RzIHN0YXJ0IHB1
bGxpbmcgdGVzdCBmaWxlcyBmcm9tIFdlYktpdCByZXBvc2l0b3J5IGluc3RlYWQgb2YgR29vZ2xl
J3MgaW50ZXJuYWwgcmVwb3NpdG9yeS4KKworICAgICAgICAqIENocm9taXVtRE9NUGVyZjogQWRk
ZWQuCisgICAgICAgICogQ2hyb21pdW1ET01QZXJmL0FjY2Vzc29ycy5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBDaHJvbWl1bURPTVBlcmYvQ2xvbmVOb2Rlcy5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBDaHJvbWl1bURPTVBlcmYvQ3JlYXRlTm9kZXMuaHRtbDogQWRkZWQuCisgICAgICAgICogQ2hy
b21pdW1ET01QZXJmL0RPTURpdldhbGsuaHRtbDogQWRkZWQuCisgICAgICAgICogQ2hyb21pdW1E
T01QZXJmL0RPTVRhYmxlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIENocm9taXVtRE9NUGVyZi9E
T01XYWxrLmh0bWw6IEFkZGVkLgorICAgICAgICAqIENocm9taXVtRE9NUGVyZi9FdmVudHMuaHRt
bDogQWRkZWQuCisgICAgICAgICogQ2hyb21pdW1ET01QZXJmL0dldEVsZW1lbnQuaHRtbDogQWRk
ZWQuCisgICAgICAgICogQ2hyb21pdW1ET01QZXJmL0dyaWRTb3J0Lmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIENocm9taXVtRE9NUGVyZi9UZW1wbGF0ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBD
aHJvbWl1bURPTVBlcmYvcmVzb3VyY2VzOiBBZGRlZC4KKyAgICAgICAgKiBDaHJvbWl1bURPTVBl
cmYvcmVzb3VyY2VzL2NvbW1vbi5qczogQWRkZWQuCisgICAgICAgICogQ2hyb21pdW1ET01QZXJm
L3Jlc291cmNlcy9kb206IEFkZGVkLgorICAgICAgICAqIENocm9taXVtRE9NUGVyZi9yZXNvdXJj
ZXMvZG9tL2FjY2Vzc29ycy5qczogQWRkZWQuCisgICAgICAgICogQ2hyb21pdW1ET01QZXJmL3Jl
c291cmNlcy9kb20vY2xvbmVub2Rlcy5qczogQWRkZWQuCisgICAgICAgICogQ2hyb21pdW1ET01Q
ZXJmL3Jlc291cmNlcy9kb20vY3JlYXRlbm9kZXMuanM6IEFkZGVkLgorICAgICAgICAqIENocm9t
aXVtRE9NUGVyZi9yZXNvdXJjZXMvZG9tL2RvbWRpdndhbGsuanM6IEFkZGVkLgorICAgICAgICAq
IENocm9taXVtRE9NUGVyZi9yZXNvdXJjZXMvZG9tL2RvbXRhYmxlLmpzOiBBZGRlZC4KKyAgICAg
ICAgKiBDaHJvbWl1bURPTVBlcmYvcmVzb3VyY2VzL2RvbS9kb213YWxrLmpzOiBBZGRlZC4KKyAg
ICAgICAgKiBDaHJvbWl1bURPTVBlcmYvcmVzb3VyY2VzL2RvbS9ldmVudHMuanM6IEFkZGVkLgor
ICAgICAgICAqIENocm9taXVtRE9NUGVyZi9yZXNvdXJjZXMvZG9tL2dldGVsZW1lbnQuanM6IEFk
ZGVkLgorICAgICAgICAqIENocm9taXVtRE9NUGVyZi9yZXNvdXJjZXMvZG9tL2dyaWRzb3J0Lmpz
OiBBZGRlZC4KKyAgICAgICAgKiBDaHJvbWl1bURPTVBlcmYvcmVzb3VyY2VzL2RvbS9zdWl0ZXMu
anM6IEFkZGVkLgorICAgICAgICAqIENocm9taXVtRE9NUGVyZi9yZXNvdXJjZXMvZG9tL3RlbXBs
YXRlLmpzOiBBZGRlZC4KKyAgICAgICAgKiByZXNvdXJjZXMvcnVubmVyLmpzOgorCiAyMDEyLTAx
LTI1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIGh0bWw1LWZ1
bGwtcmVuZGVyLmh0bWwgZmFpbHMgZHVlIHRvIGEgbG9nCkluZGV4OiBQZXJmb3JtYW5jZVRlc3Rz
L0Nocm9taXVtRE9NUGVyZi9BY2Nlc3NvcnMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5j
ZVRlc3RzL0Nocm9taXVtRE9NUGVyZi9BY2Nlc3NvcnMuaHRtbAkocmV2aXNpb24gMCkKKysrIFBl
cmZvcm1hbmNlVGVzdHMvQ2hyb21pdW1ET01QZXJmL0FjY2Vzc29ycy5odG1sCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDExIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8ZGl2
IGlkPSJjb250YWluZXIiPjxzcGFuIGlkPSJiZW5jaG1hcmtfY29udGVudCI+PC9zcGFuPjwvZGl2
PgorPHByZSBpZD0ibG9nIj48L3ByZT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz
cmM9Ii4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0
L2phdmFzY3JpcHQiIHNyYz0icmVzb3VyY2VzL2NvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJyZXNvdXJjZXMvZG9tL2FjY2Vzc29ycy5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0PiBydW5CZW5jaG1hcmtTdWl0ZShBY2Nlc3NvcnNUZXN0KTsgPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0Nocm9taXVt
RE9NUGVyZi9DbG9uZU5vZGVzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9D
aHJvbWl1bURPTVBlcmYvQ2xvbmVOb2Rlcy5odG1sCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFu
Y2VUZXN0cy9DaHJvbWl1bURPTVBlcmYvQ2xvbmVOb2Rlcy5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDExIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8ZGl2IGlkPSJj
b250YWluZXIiPjxzcGFuIGlkPSJiZW5jaG1hcmtfY29udGVudCI+PC9zcGFuPjwvZGl2PgorPHBy
ZSBpZD0ibG9nIj48L3ByZT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4u
L3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiIHNyYz0icmVzb3VyY2VzL2NvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCIgc3JjPSJyZXNvdXJjZXMvZG9tL2Nsb25lbm9kZXMuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdD4gcnVuQmVuY2htYXJrU3VpdGUoQ2xvbmVOb2Rlc1Rlc3QpOyA8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hyb21pdW1ET01Q
ZXJmL0NyZWF0ZU5vZGVzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9DaHJv
bWl1bURPTVBlcmYvQ3JlYXRlTm9kZXMuaHRtbAkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNl
VGVzdHMvQ2hyb21pdW1ET01QZXJmL0NyZWF0ZU5vZGVzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxkaXYgaWQ9ImNv
bnRhaW5lciI+PHNwYW4gaWQ9ImJlbmNobWFya19jb250ZW50Ij48L3NwYW4+PC9kaXY+Cis8cHJl
IGlkPSJsb2ciPjwvcHJlPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4v
cmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCIgc3JjPSJyZXNvdXJjZXMvY29tbW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0IiBzcmM9InJlc291cmNlcy9kb20vY3JlYXRlbm9kZXMuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdD4gcnVuQmVuY2htYXJrU3VpdGUoQ3JlYXRlTm9kZXNUZXN0KTsgPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0Nocm9taXVtRE9N
UGVyZi9ET01EaXZXYWxrLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9DaHJv
bWl1bURPTVBlcmYvRE9NRGl2V2Fsay5odG1sCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VU
ZXN0cy9DaHJvbWl1bURPTVBlcmYvRE9NRGl2V2Fsay5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDExIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8ZGl2IGlkPSJjb250
YWluZXIiPjxzcGFuIGlkPSJiZW5jaG1hcmtfY29udGVudCI+PC9zcGFuPjwvZGl2PgorPHByZSBp
ZD0ibG9nIj48L3ByZT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL3Jl
c291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiIHNyYz0icmVzb3VyY2VzL2NvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCIgc3JjPSJyZXNvdXJjZXMvZG9tL2RvbWRpdndhbGsuanMiPjwvc2NyaXB0
PgorPHNjcmlwdD4gcnVuQmVuY2htYXJrU3VpdGUoRE9NRGl2V2Fsa1Rlc3QpOyA8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hyb21pdW1ET01QZXJm
L0RPTVRhYmxlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9DaHJvbWl1bURP
TVBlcmYvRE9NVGFibGUuaHRtbAkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvQ2hy
b21pdW1ET01QZXJmL0RPTVRhYmxlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxkaXYgaWQ9ImNvbnRhaW5lciI+PHNw
YW4gaWQ9ImJlbmNobWFya19jb250ZW50Ij48L3NwYW4+PC9kaXY+Cis8cHJlIGlkPSJsb2ciPjwv
cHJlPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vcmVzb3VyY2VzL3J1
bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJy
ZXNvdXJjZXMvY29tbW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0IiBzcmM9InJlc291cmNlcy9kb20vZG9tdGFibGUuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4g
cnVuQmVuY2htYXJrU3VpdGUoRE9NVGFibGVUZXN0KTsgPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0Nocm9taXVtRE9NUGVyZi9ET01XYWxrLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9DaHJvbWl1bURPTVBlcmYvRE9NV2Fsay5o
dG1sCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9DaHJvbWl1bURPTVBlcmYvRE9N
V2Fsay5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGJvZHk+Cis8ZGl2IGlkPSJjb250YWluZXIiPjxzcGFuIGlkPSJiZW5jaG1hcmtf
Y29udGVudCI+PC9zcGFuPjwvZGl2PgorPHByZSBpZD0ibG9nIj48L3ByZT4KKzxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0icmVzb3VyY2VzL2NvbW1vbi5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJyZXNvdXJj
ZXMvZG9tL2RvbXdhbGsuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4gcnVuQmVuY2htYXJrU3VpdGUo
RE9NV2Fsa1Rlc3QpOyA8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IFBlcmZvcm1h
bmNlVGVzdHMvQ2hyb21pdW1ET01QZXJmL0V2ZW50cy5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZv
cm1hbmNlVGVzdHMvQ2hyb21pdW1ET01QZXJmL0V2ZW50cy5odG1sCShyZXZpc2lvbiAwKQorKysg
UGVyZm9ybWFuY2VUZXN0cy9DaHJvbWl1bURPTVBlcmYvRXZlbnRzLmh0bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxkaXYg
aWQ9ImNvbnRhaW5lciI+PHNwYW4gaWQ9ImJlbmNobWFya19jb250ZW50Ij48L3NwYW4+PC9kaXY+
Cis8cHJlIGlkPSJsb2ciPjwvcHJlPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNy
Yz0iLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCIgc3JjPSJyZXNvdXJjZXMvY29tbW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
dHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InJlc291cmNlcy9kb20vZXZlbnRzLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQ+IHJ1bkJlbmNobWFya1N1aXRlKEV2ZW50VGVzdCk7IDwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9DaHJvbWl1bURPTVBlcmYv
R2V0RWxlbWVudC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvQ2hyb21pdW1E
T01QZXJmL0dldEVsZW1lbnQuaHRtbAkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMv
Q2hyb21pdW1ET01QZXJmL0dldEVsZW1lbnQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPGRpdiBpZD0iY29udGFpbmVy
Ij48c3BhbiBpZD0iYmVuY2htYXJrX2NvbnRlbnQiPjwvc3Bhbj48L2Rpdj4KKzxwcmUgaWQ9Imxv
ZyI+PC9wcmU+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9yZXNvdXJj
ZXMvcnVubmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz
cmM9InJlc291cmNlcy9jb21tb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiIHNyYz0icmVzb3VyY2VzL2RvbS9nZXRlbGVtZW50LmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQ+IHJ1bkJlbmNobWFya1N1aXRlKEdldEVsZW1lbnRUZXN0KTsgPC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0Nocm9taXVtRE9NUGVyZi9Hcmlk
U29ydC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvQ2hyb21pdW1ET01QZXJm
L0dyaWRTb3J0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0Nocm9taXVt
RE9NUGVyZi9HcmlkU29ydC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8ZGl2IGlkPSJjb250YWluZXIiPjxzcGFuIGlk
PSJiZW5jaG1hcmtfY29udGVudCI+PC9zcGFuPjwvZGl2PgorPHByZSBpZD0ibG9nIj48L3ByZT4K
KzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL3Jlc291cmNlcy9ydW5uZXIu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0icmVzb3Vy
Y2VzL2NvbW1vbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg
c3JjPSJyZXNvdXJjZXMvZG9tL2dyaWRzb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+IHJ1bkJl
bmNobWFya1N1aXRlKEdyaWRTb3J0VGVzdCk7IDwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJ
bmRleDogUGVyZm9ybWFuY2VUZXN0cy9DaHJvbWl1bURPTVBlcmYvVGVtcGxhdGUuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0Nocm9taXVtRE9NUGVyZi9UZW1wbGF0ZS5odG1s
CShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9DaHJvbWl1bURPTVBlcmYvVGVtcGxh
dGUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxib2R5PgorPGRpdiBpZD0iY29udGFpbmVyIj48c3BhbiBpZD0iYmVuY2htYXJrX2Nv
bnRlbnQiPjwvc3Bhbj48L2Rpdj4KKzxwcmUgaWQ9ImxvZyI+PC9wcmU+Cis8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InJlc291cmNlcy9jb21tb24uanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0icmVzb3VyY2Vz
L2RvbS90ZW1wbGF0ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PiBydW5CZW5jaG1hcmtTdWl0ZShU
ZW1wbGF0ZVRlc3QpOyA8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IFBlcmZvcm1h
bmNlVGVzdHMvQ2hyb21pdW1ET01QZXJmL3Jlc291cmNlcy9jb21tb24uanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gUGVyZm9ybWFuY2VUZXN0cy9DaHJvbWl1bURPTVBlcmYvcmVzb3VyY2VzL2NvbW1vbi5qcwko
cmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvQ2hyb21pdW1ET01QZXJmL3Jlc291cmNl
cy9jb21tb24uanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDA1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gQSBmcmFtZXdvcmsg
Zm9yIHJ1bm5pbmcgdGhlIGJlbmNobWFyayBzdWl0ZXMgYW5kIGNvbXB1dGluZyBhIHNjb3JlIGJh
c2VkCisvLyBvbiB0aW1pbmcgbWVhc3VyZW1lbnRzLgorLy8KKy8vIFRpbWUgbWVhc3VyZW1lbnRz
IGFyZSBjb21wdXRlZCBieSBzdW1taW5nIGluZGl2aWR1YWwgbWVhc3VyZW1lbnRzIGluIGEKKy8v
IHRlc3QncyBydW4oKSBmdW5jdGlvbi4gIEJlY2F1c2UgSmF2YXNjcmlwdCBnZW5lcmFsbHkgaGFz
IGEgMW1zIHRpbWVyCisvLyBncmFudWxhcml0eSwgdGVzdHMgc2hvdWxkIGJlIGNhcmVmdWwgdG8g
dGFrZSBhdCBsZWFzdCAybXMgdG8gcnVuLiAgVGVzdHMKKy8vIHdoaWNoIHJ1biBpbiBsZXNzIHRo
YW4gMW1zIGFyZSBpbnZhbGlkLiAgU29tZSBvbGRlciBicm93c2VycyBoYXZlIGxlc3MKKy8vIHRp
bWVyIHJlc29sdXRpb24sIGFzIGxvdyBhcyAxNW1zLiAgT24gdGhlc2Ugc3lzdGVtcyB0ZXN0cyB3
aGljaCB0YWtlIGxlc3MKKy8vIHRoYW4gMTVtcyB0byBydW4gYXJlIGludmFsaWQuCisvLworLy8g
U2NvcmVzIGZvciBhIGJlbmNobWFyayBzdWl0ZSBhcmUgY2FsY3VsYXRlZCBhcyB0aGUgZ2VvbWV0
cmljIG1lYW4gYWNyb3NzCisvLyBhbGwgYmVuY2htYXJrcyB3aGljaCBjb21wcmlzZSB0aGF0IHN1
aXRlLgorLy8KKy8vIE92ZXJhbGwgc2NvcmUgaXMgY2FsY3VsYXRlZCBhcyB0aGUgZ2VvbWV0cmlj
IG1lYW4gYWNyb3NzIGFsbCBiZW5jaG1hcmsKKy8vIHN1aXRlcy4KKworLy8gQmVuY2htYXJrIE9i
amVjdC4KKy8vIEEgYmVuY2htYXJrIGlzIGEgdGVzdCB3aGljaCBjYW4gYmUgcnVuIGFzIHBhcnQg
b2YgYSBCZW5jaG1hcmtTdWl0ZS4KKy8vCisvLyBFYWNoIHRlc3QgcHJvdmlkZXMgdGhlIGZvbGxv
d2luZyBwcm9wZXJ0aWVzOgorLy8gICAgbmFtZQorLy8gICAgICBUaGUgbmFtZSBvZiB0aGUgYmVu
Y2htYXJrLgorLy8gICAgcnVuCisvLyAgICAgIFRoZSB3b3JrIGZ1bmN0aW9uIHdoaWNoIGlzIG1l
YXN1cmVkCisvLyAgICBvcHRfc2V0dXAgKG9wdGlvbmFsKQorLy8gICAgICBBIGZ1bmN0aW9uIHdo
aWNoIGlzIHJ1biBiZWZvcmUgZWFjaCBiZW5jaG1hcmsgaXRlcmF0aW9uLgorLy8gICAgb3B0X2Ns
ZWFudXAgKG9wdGlvbmFsKQorLy8gICAgICBBIGZ1bmN0aW9uIHRvIGNsZWFudXAgYW55IHNpZGUt
ZWZmZWN0cyBvZiBhIGJlbmNobWFyay4KKy8vICAgIG9wdF9zaGFyZVNldHVwIChvcHRpb25hbCkK
Ky8vICAgICAgQSBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUgc2V0dXAgZnVuY3Rpb24gc2hv
dWxkIGJlIHJ1biBvbmNlIG9yIHdpdGgKKy8vICAgICAgZWFjaCBiZW5jaG1hcmsgaXRlcmF0aW9u
LiAgKGRlZmF1bHQgaXMgZmFsc2UpCisvLworCisvLyBBZGQgZWFjaCBtZXRob2QgdG8gQXJyYXlz
LCB0byBhbGxvdyBlYXN5IGl0ZXJhdGlvbiBvdmVyIGVsZW1lbnRzCitpZighQXJyYXkucHJvdG90
eXBlLmZvckVhY2gpIHsKKyAgICAvLyBmb3JFYWNoJ3MgY2FsbGluZyBzeW50YXggaXM6CisgICAg
Ly8gICBbXS5mb3JFYWNoKGZ1bmMsIHNjb3BlKTsKKyAgICAvLyByZWdpc3RlcmVkIGNhbGxiYWNr
cyBhbHdheXMgZ2V0IDMgYXJnczoKKyAgICAvLyAgIFtdLmZvckVhY2goZnVuY3Rpb24oaXRlbSwg
aW5kZXgsIGZ1bGxBcnJheSl7fSk7CisgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2ggPSBmdW5j
dGlvbihjYWxsYmFjaywgc2NvcGUpIHsKKyAgICAgICAgY2FsbGJhY2sgPSBoaXRjaChzY29wZSwg
Y2FsbGJhY2spOworICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5sZW5ndGg7IGkg
PCBsZW47IGkrKykKKyAgICAgICAgICAgIGNhbGxiYWNrKHRoaXNbaV0sIGksIHRoaXMpOworICAg
IH07Cit9CisKK2J5SWQgPSBmdW5jdGlvbihpZCwgZG9jKSB7CisgICAgaWYgKHR5cGVvZiBpZCA9
PSAic3RyaW5nIikKKyAgICAgICAgcmV0dXJuIChkb2N8fGRvY3VtZW50KS5nZXRFbGVtZW50QnlJ
ZChpZCk7CisgICAgcmV0dXJuIGlkOworfTsKKworLy8gQSB1dGlsaXR5IG9iamVjdCBmb3IgbWVh
c3VyaW5nIHRpbWUgaW50ZXJ2YWxzLgorZnVuY3Rpb24gSW50ZXJ2YWwoKSB7CisgIHZhciBzdGFy
dF8gPSAwOworICB2YXIgc3RvcF8gPSAwOworICB0aGlzLnN0YXJ0ID0gZnVuY3Rpb24oKSB7IHN0
YXJ0XyA9IG5ldyBEYXRlKCk7IH07CisgIHRoaXMuc3RvcCA9IGZ1bmN0aW9uKCkgeyBzdG9wXyA9
IG5ldyBEYXRlKCk7IH07CisgIHRoaXMubWljcm9zZWNvbmRzID0gZnVuY3Rpb24oKSB7IHJldHVy
biAoc3RvcF8gLSBzdGFydF8pICogMTAwMDsgfTsKK30KKworLy8gQSBzdHViIHByb2ZpbGVyIG9i
amVjdC4KK2Z1bmN0aW9uIFBzZXVkb1Byb2ZpbGVyKCkge30KK1BzZXVkb1Byb2ZpbGVyLnByb3Rv
dHlwZS5zdGFydCA9IGZ1bmN0aW9uKCkge307CitQc2V1ZG9Qcm9maWxlci5wcm90b3R5cGUuc3Rv
cCA9IGZ1bmN0aW9uKCkge307CisKK3ZhciBjaHJvbWl1bVByb2ZpbGVySW5pdE9uY2UgPSBmYWxz
ZTsgICAvLyBDaHJvbWl1bSBwcm9maWxlciBpbml0aWFsaXphdGlvbi4KKworLy8gQ3Jvc3MtcGxh
dGZvcm0gZnVuY3Rpb24gdG8gZ2V0IHRoZSBwcm9maWxlciBvYmplY3QuCisvLyBGb3IgY2hyb21p
dW0sIHJldHVybnMgYSBQcm9maWxlciBvYmplY3Qgd2hpY2ggY2FuIGJlIHVzZWQgZHVyaW5nIHRo
ZSBydW4uCisvLyBGb3Igb3RoZXIgYnJvd3NlcnMsIHJldHVybnMgYSBQc2V1ZG9Qcm9maWxlciBv
YmplY3QuCitmdW5jdGlvbiBHZXRQcm9maWxlcigpIHsKKyAgICBpZiAod2luZG93LmNocm9taXVt
ICYmIHdpbmRvdy5jaHJvbWl1bS5Qcm9maWxlcikgeworICAgICAgICB2YXIgcHJvZmlsZXIgPSBu
ZXcgd2luZG93LmNocm9taXVtLlByb2ZpbGVyKCk7CisgICAgICAgIGlmICghY2hyb21pdW1Qcm9m
aWxlckluaXRPbmNlKSB7CisgICAgICAgICAgICBjaHJvbWl1bVByb2ZpbGVySW5pdE9uY2UgPSB0
cnVlOworICAgICAgICAgICAgcHJvZmlsZXIuc3RvcCgpOworICAgICAgICAgICAgaWYgKHByb2Zp
bGVyLmNsZWFyKQorICAgICAgICAgICAgICAgIHByb2ZpbGVyLmNsZWFyKCk7CisgICAgICAgICAg
ICBpZiAocHJvZmlsZXIuc2V0VGhyZWFkTmFtZSkKKyAgICAgICAgICAgICAgICBwcm9maWxlci5z
ZXRUaHJlYWROYW1lKCJkb21wZXJmIGphdmFzY3JpcHQiKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gcHJvZmlsZXI7CisgICAgfQorICAgIHJldHVybiBuZXcgUHNldWRvUHJvZmlsZXIoKTsK
K30KKworLy8gVG8gbWFrZSB0aGUgYmVuY2htYXJrIHJlc3VsdHMgcHJlZGljdGFibGUsIHdlIHJl
cGxhY2UgTWF0aC5yYW5kb20gd2l0aCBhCisvLyAxMDAlIGRldGVybWluaXN0aWMgYWx0ZXJuYXRp
dmUuCitNYXRoLnJhbmRvbSA9IChmdW5jdGlvbigpIHsKKyAgICB2YXIgc2VlZCA9IDQ5NzM0MzIx
OworICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgLy8gUm9iZXJ0IEplbmtpbnMnIDMy
IGJpdCBpbnRlZ2VyIGhhc2ggZnVuY3Rpb24uCisgICAgICAgIHNlZWQgPSAoKHNlZWQgKyAweDdl
ZDU1ZDE2KSArIChzZWVkIDw8IDEyKSkgICYgMHhmZmZmZmZmZjsKKyAgICAgICAgc2VlZCA9ICgo
c2VlZCBeIDB4Yzc2MWMyM2MpIF4gKHNlZWQgPj4+IDE5KSkgJiAweGZmZmZmZmZmOworICAgICAg
ICBzZWVkID0gKChzZWVkICsgMHgxNjU2NjdiMSkgKyAoc2VlZCA8PCA1KSkgICAmIDB4ZmZmZmZm
ZmY7CisgICAgICAgIHNlZWQgPSAoKHNlZWQgKyAweGQzYTI2NDZjKSBeIChzZWVkIDw8IDkpKSAg
ICYgMHhmZmZmZmZmZjsKKyAgICAgICAgc2VlZCA9ICgoc2VlZCArIDB4ZmQ3MDQ2YzUpICsgKHNl
ZWQgPDwgMykpICAgJiAweGZmZmZmZmZmOworICAgICAgICBzZWVkID0gKChzZWVkIF4gMHhiNTVh
NGYwOSkgXiAoc2VlZCA+Pj4gMTYpKSAmIDB4ZmZmZmZmZmY7CisgICAgICAgIHJldHVybiAoc2Vl
ZCAmIDB4ZmZmZmZmZikgLyAweDEwMDAwMDAwOworICAgIH07Cit9KSgpOworCitmdW5jdGlvbiBC
ZW5jaG1hcmsobmFtZSwgcnVuLCBvcHRfc2V0dXAsIG9wdF9jbGVhbnVwLCBvcHRfc2hhcmVTZXR1
cCkgeworICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgdGhpcy50aW1lVG9SdW4gPSA1MDA7IC8v
IG1zCisgICAgdGhpcy5ydW4gPSBydW47CisgICAgdGhpcy5zZXR1cCA9IG9wdF9zZXR1cDsKKyAg
ICB0aGlzLmNsZWFudXAgPSBvcHRfY2xlYW51cDsKKyAgICB0aGlzLnNoYXJlU2V0dXAgPSBvcHRf
c2hhcmVTZXR1cDsKK30KKworLy8gQmVuY2htYXJrU3VpdGUKKy8vIEEgZ3JvdXAgb2YgYmVuY2ht
YXJrcyB0aGF0IGNhbiBiZSBydW4gdG9nZXRoZXIuCitmdW5jdGlvbiBCZW5jaG1hcmtTdWl0ZShu
YW1lLCBiZW5jaG1hcmtzKSB7CisgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICB0aGlzLmJlbmNo
bWFya3MgPSBiZW5jaG1hcmtzOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5iZW5jaG1h
cmtzLmxlbmd0aDsgaSsrKQorICAgICAgICB0aGlzLmJlbmNobWFya3NbaV0uc3VpdGUgPSB0aGlz
OworICAgIHRoaXMuc3VpdGVGaWxlID0gdGhpcy5jdXJyZW50U3VpdGVGaWxlOworfQorCisvLyBU
aGlzIGNvbXB1dGVzIHRoZSBhbW91bnQgb2Ygb3ZlcmhlYWQgaXMgYXNzb2NpYXRlZCB3aXRoIHRo
ZSBjYWxsIHRvIHRoZSB0ZXN0CisvLyBmdW5jdGlvbiBhbmQgZ2V0dGluZyB0aGUgZGF0ZS4gCitC
ZW5jaG1hcmtTdWl0ZS5zdGFydCA9IG5ldyBEYXRlKCk7CisKK0JlbmNobWFya1N1aXRlLk1hdGgg
PSBuZXcgKGZ1bmN0aW9uKCkgeworICAgIC8vIENvbXB1dGVzIHRoZSBnZW9tZXRyaWMgbWVhbiBv
ZiBhIHNldCBvZiBudW1iZXJzLgorICAgIC8vIG51bGxzIGluIG51bWJlcnMgd2lsbCBiZSBpZ25v
cmVkCisgICAgLy8gbWluTnVtYmVyIGlzIG9wdGlvbmFsIChkZWZhdWx0cyB0byAwLjAwMSkgYW55
dGhpbmcgc21hbGxlciB0aGFuIHRoaXMKKyAgICAvLyB3aWxsIGJlIGNoYW5nZWQgdG8gdGhpcyB2
YWx1ZSwgZWxpbWluYXRpbmcgaW5maW5pdGUgcmVzdWx0cworICAgIC8vIG1hcEZuIGlzIGFuIG9w
dGlvbmFsIGFyZyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBhIG1hcCBmdW5jdGlvbiBvbiBudW1iZXJz
CisgICAgdGhpcy5HZW9tZXRyaWNNZWFuID0gZnVuY3Rpb24obnVtYmVycywgbWluTnVtYmVyLCBt
YXBGbikgeworICAgICAgICBpZiAobWFwRm4pCisgICAgICAgICAgICBudW1iZXJzID0gZG9qby5t
YXAobnVtYmVycywgbWFwRm4pOworICAgICAgICB2YXIgbG9nID0gMDsKKyAgICAgICAgdmFyIG5O
dW1iZXJzID0gMDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSBudW1iZXJzLmxlbmd0aDsg
aSA8IG47IGkrKykgeworICAgICAgICAgICAgdmFyIG51bWJlciA9IG51bWJlcnNbaV07CisgICAg
ICAgICAgICBpZiAobnVtYmVyKSB7CisgICAgICAgICAgICAgICAgaWYgKG51bWJlciA8IG1pbk51
bWJlcikKKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyID0gbWluTnVtYmVyOworICAgICAgICAg
ICAgICAgIG5OdW1iZXJzKys7CisgICAgICAgICAgICAgICAgbG9nICs9IE1hdGgubG9nKG51bWJl
cik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE1hdGgucG93KE1h
dGguRSwgbG9nIC8gbk51bWJlcnMpOworICAgIH07CisKKyAgICAvLyBDb21wYXJlcyB0d28gb2Jq
ZWN0cyB1c2luZyBidWlsdC1pbiBKYXZhU2NyaXB0IG9wZXJhdG9ycy4KKyAgICB0aGlzLmFzY2Vu
ZCA9IGZ1bmN0aW9uKGEsIGIpIHsKKyAgICAgICAgaWYgKGEgPCBiKQorICAgICAgICAgIHJldHVy
biAtMTsKKyAgICAgICAgZWxzZSBpZiAoYSA+IGIpCisgICAgICAgICAgcmV0dXJuIDE7CisgICAg
ICAgIHJldHVybiAwOworICAgIH07Cit9KTsKKworLy8gQmVuY2htYXJrIHJlc3VsdHMgaG9sZCB0
aGUgYmVuY2htYXJrIGFuZCB0aGUgbWVhc3VyZWQgdGltZSB1c2VkIHRvIHJ1biB0aGUKKy8vIGJl
bmNobWFyay4gVGhlIGJlbmNobWFyayBzY29yZSBpcyBjb21wdXRlZCBsYXRlciBvbmNlIGEgZnVs
bCBiZW5jaG1hcmsgc3VpdGUKKy8vIGhhcyBydW4gdG8gY29tcGxldGlvbi4KK2Z1bmN0aW9uIEJl
bmNobWFya1Jlc3VsdChiZW5jaG1hcmssIHRpbWVzLCBlcnJvciwgYmVuY2htYXJrQ29udGVudCkg
eworICAgIHRoaXMuYmVuY2htYXJrID0gYmVuY2htYXJrOworICAgIHRoaXMuZXJyb3IgPSBlcnJv
cjsKKyAgICB0aGlzLnRpbWVzID0gdGltZXM7CisKKyAgICB0aGlzLmNvdW50Tm9kZXMgPSBmdW5j
dGlvbihwYXJlbnQpIHsKKyAgICAgICAgdmFyIG5EZXNjZW5kYW50cyA9IDA7CisgICAgICAgIGZv
ciAodmFyIGNoaWxkID0gcGFyZW50LmZpcnN0Q2hpbGQ7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLm5l
eHRTaWJsaW5nKQorICAgICAgICAgICAgbkRlc2NlbmRhbnRzICs9IGNvdW50Tm9kZXMoY2hpbGQp
OworICAgICAgICByZXR1cm4gbkRlc2NlbmRhbnRzICsgMTsKKyAgICB9OworCisgICAgaWYgKGJl
bmNobWFya0NvbnRlbnQpIHsKKyAgICAgICAgdmFyIG5Ob2RlcyA9IGNvdW50Tm9kZXMoYmVuY2ht
YXJrQ29udGVudCkgLSAxOworICAgICAgICBpZiAobk5vZGVzID4gMCkgeworICAgICAgICAgICAg
dGhpcy5odG1sID0gYmVuY2htYXJrQ29udGVudC5pbm5lckhUTUw7CisgICAgICAgICAgICB0aGlz
Lm5Ob2RlcyA9IG5Ob2RlczsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIWVycm9yKSB7Cisg
ICAgICAgIHZhciBkYXRhID0gdGltZXMuc2xpY2UoKTsKKyAgICAgICAgdmFyIGNvdW50ID0gZGF0
YS5sZW5ndGg7CisKKyAgICAgICAgLy8gU29ydCB0aGUgZGF0YSBzbyB0aGF0IGFsbCBzZWVtaW5n
bHkKKyAgICAgICAgLy8gaW5zaWduaWZpY2FudCB2YWx1ZXMgc3VjaCBhcyAwLjAwMDAwMDAwMyB3
aWxsCisgICAgICAgIC8vIGJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5IGFuZCB0aGVp
cgorICAgICAgICAvLyBjb250cmlidXRpb24gdG8gdGhlIG1lYW4gYW5kIHZhcmlhbmNlIG9mIHRo
ZQorICAgICAgICAvLyBkYXRhIHdpbGwgbm90IGJlIGxvc3QgYmVjYXVzZSBvZiB0aGUgcHJlY2lz
aW9uCisgICAgICAgIC8vIG9mIHRoZSBDUFUuCisgICAgICAgIGRhdGEuc29ydChCZW5jaG1hcmtT
dWl0ZS5NYXRoLmFzY2VuZCk7CisKKyAgICAgICAgLy8gU2luY2UgdGhlIGRhdGEgaXMgbm93IHNv
cnRlZCwgdGhlIG1pbmltdW0gdmFsdWUKKyAgICAgICAgLy8gaXMgYXQgdGhlIGJlZ2lubmluZyBv
ZiB0aGUgYXJyYXksIHRoZSBtZWRpYW4KKyAgICAgICAgLy8gdmFsdWUgaXMgaW4gdGhlIG1pZGRs
ZSBvZiB0aGUgYXJyYXksIGFuZCB0aGUKKyAgICAgICAgLy8gbWF4aW11bSB2YWx1ZSBpcyBhdCB0
aGUgZW5kIG9mIHRoZSBhcnJheS4KKyAgICAgICAgdGhpcy5taW4gPSBkYXRhWzBdOworICAgICAg
ICB2YXIgbWlkZGxlID0gTWF0aC5mbG9vcihkYXRhLmxlbmd0aCAvIDIpOworICAgICAgICBpZiAo
KGRhdGEubGVuZ3RoICUgMikgIT09IDApCisgICAgICAgICAgICB0aGlzLm1lZGlhbiA9IGRhdGFb
bWlkZGxlXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy5tZWRpYW4gPSAoZGF0YVtt
aWRkbGUgLSAxXSArIGRhdGFbbWlkZGxlXSkgLyAyOworICAgICAgICB0aGlzLm1heCA9IGRhdGFb
ZGF0YS5sZW5ndGggLSAxXTsKKworICAgICAgICAvLyBDb21wdXRlIHRoZSBtZWFuIGFuZCB2YXJp
YW5jZSB1c2luZyBhCisgICAgICAgIC8vIG51bWVyaWNhbGx5IHN0YWJsZSBhbGdvcml0aG0uCisg
ICAgICAgIHZhciBzcXN1bSA9IDA7CisgICAgICAgIHRoaXMubWVhbiA9IGRhdGFbMF07CisgICAg
ICAgIHZhciBuWmVyb3MgPSAwOworICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGRhdGEubGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciB4ID0gZGF0YVtpXTsKKyAgICAgICAgICAgIHZh
ciBkZWx0YSA9IHggLSB0aGlzLm1lYW47CisgICAgICAgICAgICB2YXIgc3dlZXAgPSBpICsgMS4w
OworICAgICAgICAgICAgdGhpcy5tZWFuICs9IGRlbHRhIC8gc3dlZXA7CisgICAgICAgICAgICBz
cXN1bSArPSBkZWx0YSAqIGRlbHRhICogKGkgLyBzd2VlcCk7CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5zdW0gPSB0aGlzLm1lYW4gKiBjb3VudDsKKyAgICAgICAgdGhpcy52YXJpYW5jZSA9IHNx
c3VtIC8gY291bnQ7CisKKyAgICAgICAgdGhpcy5zZGV2ID0gTWF0aC5zcXJ0KHRoaXMudmFyaWFu
Y2UpOworICAgICAgICB0aGlzLnNjb3JlID0gMTAwMCAvIHRoaXMubWVhbjsKKyAgICB9CisKKyAg
ICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBzID0KKyAgICAgICAg
ICAiIG1pbjogIiArIHRoaXMubWluICsgCisgICAgICAgICAgIiBtYXg6ICIgKyB0aGlzLm1heCAr
IAorICAgICAgICAgICIgbWVhbjogIiArIHRoaXMubWVhbiArIAorICAgICAgICAgICIgbWVkaWFu
OiAiICsgdGhpcy5tZWRpYW4gKyAKKyAgICAgICAgICAiIHNkZXY6ICIgKyB0aGlzLnNkZXY7Cisg
ICAgICAgIHJldHVybiBzOworICAgIH07CisKKyAgICAvLyBDb252ZXJ0IHJlc3VsdHMgdG8gbnVt
YmVycy4gVXNlZCBieSB0aGUgZ2VvbWV0cmljIG1lYW4gY29tcHV0YXRpb24uCisgICAgdGhpcy52
YWx1ZU9mID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLnRpbWU7IH07Cit9CisKKy8vIFJ1bnMg
YSBzaW5nbGUgYmVuY2htYXJrIGFuZCBjb21wdXRlcyB0aGUgYXZlcmFnZSB0aW1lIGl0IHRha2Vz
IHRvIHJ1biBhCisvLyBzaW5nbGUgaXRlcmF0aW9uLgorQmVuY2htYXJrU3VpdGUucHJvdG90eXBl
LlJ1blNpbmdsZSA9IGZ1bmN0aW9uKGJlbmNobWFyaywgdGltZXMpIHsKKyAgICB2YXIgZWxhcHNl
ZCA9IDA7CisgICAgdmFyIHN0YXJ0ID0gbmV3IERhdGUoKTsKKyAgICB2YXIgcnVuSW50ZXJ2YWwg
PSBuZXcgSW50ZXJ2YWwoKTsKKyAgICB2YXIgc2V0dXBSZXR1cm4gPSBudWxsOworICAgIHZhciBy
dW5SZXR1cm4gPSBudWxsOworICAgIHZhciB0aW1lOworICAgIHZhciB0b3RhbFRpbWUgPSAwOwor
ICAgIHZhciBuWmVyb3MgPSAwOworICAgIHZhciBlcnJvciA9IG51bGw7CisgICAgdmFyIHByb2Zp
bGVyID0gR2V0UHJvZmlsZXIoKTsKKyAgICBmb3IgKHZhciBuID0gMDsgIWVycm9yICYmIHRvdGFs
VGltZSA8IGJlbmNobWFyay50aW1lVG9SdW47ICBuKyspIHsKKyAgICAgICAgaWYgKHRoaXMuYmVu
Y2htYXJrQ29udGVudCkKKyAgICAgICAgICAgIHRoaXMuYmVuY2htYXJrQ29udGVudEhvbGRlci5y
ZW1vdmVDaGlsZCh0aGlzLmJlbmNobWFya0NvbnRlbnQpOworICAgICAgICB0aGlzLmJlbmNobWFy
a0NvbnRlbnQgPSB0aGlzLmJlbmNobWFya0NvbnRlbnRQcm90by5jbG9uZU5vZGUoKTsKKyAgICAg
ICAgdGhpcy5iZW5jaG1hcmtDb250ZW50SG9sZGVyLmFwcGVuZENoaWxkKHRoaXMuYmVuY2htYXJr
Q29udGVudCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAoYmVuY2htYXJrLnNldHVw
KSB7CisgICAgICAgICAgICAgICAgaWYgKCFzZXR1cFJldHVybiB8fCAhYmVuY2htYXJrLnNoYXJl
U2V0dXApCisgICAgICAgICAgICAgICAgICAgIHNldHVwUmV0dXJuID0gYmVuY2htYXJrLnNldHVw
KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByb2ZpbGVyLnN0YXJ0KCk7CisgICAg
ICAgICAgICBydW5JbnRlcnZhbC5zdGFydCgpOworICAgICAgICAgICAgcnVuUmV0dXJuID0gYmVu
Y2htYXJrLnJ1bihzZXR1cFJldHVybik7CisgICAgICAgICAgICBydW5JbnRlcnZhbC5zdG9wKCk7
CisgICAgICAgICAgICBwcm9maWxlci5zdG9wKCk7CisgICAgICAgICAgICB0aW1lID0gcnVuSW50
ZXJ2YWwubWljcm9zZWNvbmRzKCkgLyAxMDAwOworICAgICAgICAgICAgaWYgKHRpbWUgPiAwKSB7
CisgICAgICAgICAgICAgICAgdGltZXMucHVzaCh0aW1lKTsKKyAgICAgICAgICAgICAgICBlbGFw
c2VkICs9IHRpbWU7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICB0aW1lcy5w
dXNoKDApOworICAgICAgICAgICAgaWYgKGJlbmNobWFyay5jbGVhbnVwKQorICAgICAgICAgICAg
ICAgIGJlbmNobWFyay5jbGVhbnVwKHJ1blJldHVybik7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsK
KyAgICAgICAgICAgIGVycm9yID0gZTsKKyAgICAgICAgfQorICAgICAgICB0b3RhbFRpbWUgPSBu
ZXcgRGF0ZSgpIC0gc3RhcnQ7CisgICAgfQorCisgICAgdmFyIHJlc3VsdCA9IG5ldyBCZW5jaG1h
cmtSZXN1bHQoYmVuY2htYXJrLCB0aW1lcywgZXJyb3IsIG51bGwpOworICAgIGlmICh0aGlzLmJl
bmNobWFya0NvbnRlbnQpIHsKKyAgICAgICAgdGhpcy5iZW5jaG1hcmtDb250ZW50SG9sZGVyLnJl
bW92ZUNoaWxkKHRoaXMuYmVuY2htYXJrQ29udGVudCk7CisgICAgICAgIHRoaXMuYmVuY2htYXJr
Q29udGVudCA9IG51bGw7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9OworCitCZW5jaG1h
cmtTdWl0ZS5wcm90b3R5cGUuZ2VuZXJhdGVUcmVlID0gZnVuY3Rpb24ocGFyZW50LCB3aWR0aCwg
ZGVwdGgpIHsKKyAgICB2YXIgaWQgPSBwYXJlbnQuaWQ7CisgICAgaWYgKGRlcHRoICE9PSAwKSB7
CisgICAgICAgIHZhciBtaWRkbGUgPSBNYXRoLmZsb29yKHdpZHRoIC8gMik7CisgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgd2lkdGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgPT0gbWlk
ZGxlKSB7CisgICAgICAgICAgICAgICAgdmFyIGRpdk5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKTsKKyAgICAgICAgICAgICAgICAvLyBUT0RPOltkYXZlXSB0aGlzIGNhdXNlcyB1
cyB0byBoYXZlIHBvdGVudGlhbGx5IHZlcnkgbG9uZworICAgICAgICAgICAgICAgIC8vIGlkcy4g
V2UgbWlnaHQgd2FudCB0byBlbmNvZGUgdGhlc2UgdmFsdWVzIGludG8gYSBzbWFsbGVyIHN0cmlu
ZworICAgICAgICAgICAgICAgIGRpdk5vZGUuaWQgPSBpZCArICc6KCcgKyBpICsgJywgMCknOwor
ICAgICAgICAgICAgICAgIHBhcmVudC5hcHBlbmRDaGlsZChkaXZOb2RlKTsKKyAgICAgICAgICAg
ICAgICB0aGlzLmdlbmVyYXRlVHJlZShkaXZOb2RlLCB3aWR0aCwgZGVwdGggLSAxKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIHAgPSBwYXJlbnQ7CisgICAgICAg
ICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpOyBqKyspIHsKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIGRpdk5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAg
ICAgICAgICAgICAgZGl2Tm9kZS5pZCA9IGlkICsgJzooJyArIGkgKyAnLCcgKyBqICsgJyknOwor
ICAgICAgICAgICAgICAgICAgICBwLmFwcGVuZENoaWxkKGRpdk5vZGUpOworICAgICAgICAgICAg
ICAgICAgICBwID0gZGl2Tm9kZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
dmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgICAgICAg
ICAgc3Bhbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShwLmlkKSk7CisgICAg
ICAgICAgICAgICAgcC5hcHBlbmRDaGlsZChzcGFuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KK307CisKKy8vIEdlbmVyYXRlcyBhIERPTSB0cmVlIChkb2Vzbid0IGluc2VydCBp
dCBpbnRvIHRoZSBkb2N1bWVudCkuCisvLyBUaGUgd2lkdGggYW5kIGRlcHRoIGFyZ3VtZW50cyBo
ZWxwIHNoYXBlIHRoZSAiYnVzaGluZXNzIiBvZiB0aGUgZnVsbCB0cmVlLgorLy8gVGhlIGFwcHJv
YWNoIGlzIHRvIHJlY3Vyc2l2ZWx5IGdlbmVyYXRlIGEgc2V0IG9mIHN1YnRyZWVzLiBBdCBlYWNo
IHJvb3Qgd2UKKy8vIGdlbmVyYXRlIHdpZHRoIHRyZWVzLCBvZiBpbmNyZWFzaW5nIGRlcHRoLCBm
cm9tIDEgdG8gd2lkdGguICBUaGVuIHdlIHJlY3Vyc2UKKy8vIGZyb20gdGhlIG1pZGRsZSBjaGls
ZCBvZiB0aGlzIHN1YnRyZWUuIFdlIGRvIHRoaXMgdXAgdG8gZGVwdGggdGltZXMuICByZXBzCisv
LyBhbGxvd3MgdXMgdG8gZHVwbGljYXRlIGEgc2V0IG9mIHRyZWVzLCB3aXRob3V0IGFkZGl0aW9u
YWwgcmVjdXJzaW9ucy4gCitCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuZ2VuZXJhdGVET01UcmVl
ID0gZnVuY3Rpb24od2lkdGgsIGRlcHRoLCByZXBzKSB7CisgICAgdmFyIHRvcCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworCisgICAgdG9wLmlkID0gInRlc3QiOworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgcmVwczsgaSsrKSB7CisgICAgICAgIHZhciBkaXZOb2RlID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgIGRpdk5vZGUuaWQgPSAidGVzdCIgKyBp
OworICAgICAgICB0aGlzLmdlbmVyYXRlVHJlZShkaXZOb2RlLCB3aWR0aCwgZGVwdGgpOworICAg
ICAgICB0b3AuYXBwZW5kQ2hpbGQoZGl2Tm9kZSk7CisgICAgfQorICAgIHJldHVybiB0b3A7Cit9
OworCisvLyBHZW5lcmF0ZSBhIHNtYWxsIHNpemVkIHRyZWUuCisvLyA5MiBzcGFuIGxlYXZlcywg
bWF4IGRlcHRoOiAyMywgYXZnIGRlcHRoOiAxNAorQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLmdl
bmVyYXRlU21hbGxUcmVlID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVE
T01UcmVlKDE0LCAxMiwgMTApOworfTsKKworLy8gR2VuZXJhdGUgYSBtZWRpdW0gc2l6ZWQgdHJl
ZS4KKy8vIDEzMjAgc3BhbiBsZWF2ZXMsIG1heCBkZXB0aDogMjcsIGF2ZyBkZXB0aDogMTYKK0Jl
bmNobWFya1N1aXRlLnByb3RvdHlwZS5nZW5lcmF0ZU1lZGl1bVRyZWUgPSBmdW5jdGlvbigpIHsK
KyAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZURPTVRyZWUoMTksIDEzLCA5KTsKK307CisKKy8vIEdl
bmVyYXRlIGEgbGFyZ2Ugc2l6ZWQgdHJlZS4KKy8vIDI2MDAgc3BhbiBsZWF2ZXMsIG1heCBkZXB0
aDogNTUsIGF2ZyBkZXB0aDogMzAKK0JlbmNobWFya1N1aXRlLnByb3RvdHlwZS5nZW5lcmF0ZUxh
cmdlVHJlZSA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLmdlbmVyYXRlRE9NVHJlZSgy
NiwgMjYsIDQpOworfTsKKworZnVuY3Rpb24gcnVuQmVuY2htYXJrU3VpdGUoc3VpdGUpIHsKKyAg
ICBzdGFydEN1c3RvbSgyMCwgZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgY29udGFpbmVyID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhaW5lcicpOworICAgICAgICB2YXIgY29udGVu
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiZW5jaG1hcmtfY29udGVudCcpOworICAgICAg
ICBzdWl0ZS5iZW5jaG1hcmtDb250ZW50SG9sZGVyID0gY29udGFpbmVyOworICAgICAgICBzdWl0
ZS5iZW5jaG1hcmtDb250ZW50UHJvdG8gPSBjb250ZW50OworICAgICAgICB2YXIgdG90YWxNZWFu
VGltZSA9IDA7CisgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc3VpdGUuYmVuY2htYXJrcy5s
ZW5ndGg7IGorKykgeworICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHN1aXRlLlJ1blNpbmdsZShz
dWl0ZS5iZW5jaG1hcmtzW2pdLCBbXSk7CisgICAgICAgICAgICBpZiAocmVzdWx0LmVycm9yKQor
ICAgICAgICAgICAgICAgIGxvZyhyZXN1bHQuZXJyb3IpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHRvdGFsTWVhblRpbWUgKz0gcmVzdWx0Lm1lYW47CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRvdGFsTWVhblRpbWU7CisgICAgfSwgZnVuY3Rpb24gKCkgeworICAgICAg
ICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhaW5lcicpOwor
ICAgICAgICBpZiAoY29udGFpbmVyLmZpcnN0Q2hpbGQpCisgICAgICAgICAgICBjb250YWluZXIu
cmVtb3ZlQ2hpbGQoY29udGFpbmVyLmZpcnN0Q2hpbGQpOworICAgIH0pOworfQpJbmRleDogUGVy
Zm9ybWFuY2VUZXN0cy9DaHJvbWl1bURPTVBlcmYvcmVzb3VyY2VzL2RvbS9hY2Nlc3NvcnMuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9DaHJvbWl1bURPTVBlcmYvcmVzb3VyY2Vz
L2RvbS9hY2Nlc3NvcnMuanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0Nocm9t
aXVtRE9NUGVyZi9yZXNvdXJjZXMvZG9tL2FjY2Vzc29ycy5qcwkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBBY2Nlc3NvcnMgLSBtZWFzdXJlIGFjY2VzcyBnZXQvc2V0IHByb3BlcnRp
ZXMgb24gdmFyaW91cyBvYmplY3RzLgorCisvLyBBY2Nlc3NvcnMgYXJlIGdlbmVyYWxseSBwcmV0
dHkgcXVpY2suICBXZSBsb29wIG9uIGVhY2ggYWNjZXNzb3IKKy8vIG1hbnkgdGltZXMgaW4gb3Jk
ZXIgdG8gY3JhbmsgdXAgdGhlIHRpbWUgb2YgdGhlIG1pY3JvYmVuY2htYXJrCisvLyBzbyB0aGF0
IG1lYXN1cmVtZW50cyBhcmUgbW9yZSBzdWJzdGFudGlhbC4gIFZhbHVlcyB3ZXJlIGNob3Nlbgor
Ly8gdG8gbWFrZSBGaXJlZm94MyBwZXJmb3JtYW5jZSBsYW5kIGluIHRoZSAxMDAtMzAwbXMgcmFu
Z2UuCit2YXIga0JpZ0NvdW50ID0gMTUwMDAwMDsKK3ZhciBrTGl0dGxlQ291bnQgPSAzMDAwMDA7
Cit2YXIga1RpbnlDb3VudCA9IDMwMDAwOwordmFyIGtWZXJ5VGlueUNvdW50ID0gNTAwMDsKKwor
dmFyIEFjY2Vzc29ycyA9IHt9OworCitBY2Nlc3NvcnMuV2luZG93R2V0ID0gZnVuY3Rpb24oKSB7
CisgICAgdmFyIG5Mb29wcyA9IGtMaXR0bGVDb3VudDsKKyAgICBmb3IgKHZhciBsb29wID0gMDsg
bG9vcCA8IG5Mb29wczsgbG9vcCsrKQorICAgICAgICB3aW5kb3cubGVuZ3RoOworfQorCitBY2Nl
c3NvcnMuV2luZG93U2V0ID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIG5Mb29wcyA9IGtCaWdDb3Vu
dDsKKyAgICBmb3IgKHZhciBsb29wID0gMDsgbG9vcCA8IGtMaXR0bGVDb3VudDsgbG9vcCsrKQor
ICAgICAgICB3aW5kb3cubmFtZSA9ICJ0aXRsZSI7Cit9CisKK0FjY2Vzc29ycy5Sb290R2V0ID0g
ZnVuY3Rpb24oKSB7CisgICAgdmFyIG5Mb29wcyA9IGtMaXR0bGVDb3VudDsKKyAgICBmb3IgKHZh
ciBsb29wID0gMDsgbG9vcCA8IG5Mb29wczsgbG9vcCsrKQorICAgICAgICBsZW5ndGg7Cit9CisK
K0FjY2Vzc29ycy5Sb290U2V0ID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIG5Mb29wcyA9IGtMaXR0
bGVDb3VudDsKKyAgICBmb3IgKHZhciBsb29wID0gMDsgbG9vcCA8IG5Mb29wczsgbG9vcCsrKQor
ICAgICAgICB0aXRsZSA9ICJuYW1lIjsKK30KKworQWNjZXNzb3JzLkRvY3VtZW50R2V0ID0gZnVu
Y3Rpb24oKSB7CisgICAgdmFyIG5Mb29wcyA9IGtMaXR0bGVDb3VudDsKKyAgICBmb3IgKHZhciBs
b29wID0gMDsgbG9vcCA8IG5Mb29wczsgbG9vcCsrKQorICAgICAgICBkb2N1bWVudC5ub2RlVHlw
ZTsKK30KKworQWNjZXNzb3JzLkRvY3VtZW50U2V0ID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIG5M
b29wcyA9IGtWZXJ5VGlueUNvdW50OworICAgIGZvciAodmFyIGxvb3AgPSAwOyBsb29wIDwgbkxv
b3BzOyBsb29wKyspCisgICAgICAgIGRvY3VtZW50LnRpdGxlID0gIm5hbWUiOworfQorCitBY2Nl
c3NvcnMuRE9NT2JqZWN0U2V0dXAgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgbzEgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgdmFyIG8yID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgic3BhbiIpOworICAgIG8xLmFwcGVuZENoaWxkKG8yKTsKKyAgICB0aGlzLnN1aXRlLmJl
bmNobWFya0NvbnRlbnQuYXBwZW5kQ2hpbGQobzEpOworICAgIHJldHVybiBvMTsKK30KKworQWNj
ZXNzb3JzLkRPTU9iamVjdEdldCA9IGZ1bmN0aW9uKG8xKSB7CisgICAgdmFyIG5Mb29wcyA9IGtM
aXR0bGVDb3VudDsKKyAgICBmb3IgKHZhciBsb29wID0gMDsgbG9vcCA8IG5Mb29wczsgbG9vcCsr
KQorICAgICAgICBvMS5ub2RlVHlwZTsKK30KKworQWNjZXNzb3JzLkRPTU9iamVjdFNldCA9IGZ1
bmN0aW9uKG8xKSB7CisgICAgdmFyIG5Mb29wcyA9IGtMaXR0bGVDb3VudDsKKyAgICB2YXIgdGl0
bGUgPSAidGl0bGUiOworICAgIGZvciAodmFyIGxvb3AgPSAwOyBsb29wIDwgbkxvb3BzOyBsb29w
KyspCisgICAgICAgIG8xLnRpdGxlID0gdGl0bGU7Cit9CisKK0FjY2Vzc29ycy5PYmplY3RHZXQg
PSBmdW5jdGlvbihvMSkgeworICAgIHZhciBuTG9vcHMgPSBrQmlnQ291bnQ7CisgICAgZm9yICh2
YXIgbG9vcCA9IDA7IGxvb3AgPCBuTG9vcHM7IGxvb3ArKykKKyAgICAgICAgbzEubm9kZVR5cGU7
Cit9CisKK0FjY2Vzc29ycy5Ob2RlTGlzdFNldHVwID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIG8x
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgIHZhciBvMiA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICBvMS5hcHBlbmRDaGlsZChvMik7CisgICAgdGhp
cy5zdWl0ZS5iZW5jaG1hcmtDb250ZW50LmFwcGVuZENoaWxkKG8xKTsKKyAgICByZXR1cm4gbzEu
Y2hpbGROb2RlczsKK30KKworQWNjZXNzb3JzLk5vZGVMaXN0R2V0ID0gZnVuY3Rpb24obzEpIHsK
KyAgICB2YXIgbkxvb3BzID0ga0xpdHRsZUNvdW50OworICAgIGZvciAodmFyIGxvb3AgPSAwOyBs
b29wIDwgbkxvb3BzOyBsb29wKyspCisgICAgICAgIG8xLmxlbmd0aDsKK30KKworQWNjZXNzb3Jz
LkNTU1NldHVwID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJzcGFuIik7CisgICAgc3Bhbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0
Tm9kZSgidGVzdCIpKTsKKyAgICBzcGFuLnN0eWxlLmZvbnRXZWlnaHQgPSAiYm9sZCI7CisgICAg
dGhpcy5zdWl0ZS5iZW5jaG1hcmtDb250ZW50LmFwcGVuZENoaWxkKHNwYW4pOworICAgIHJldHVy
biBzcGFuOworfQorICAKKworQWNjZXNzb3JzLkNTU0dldCA9IGZ1bmN0aW9uKHNwYW4pIHsKKyAg
ICB2YXIgbkxvb3BzID0ga0xpdHRsZUNvdW50OworICAgIGZvciAodmFyIGxvb3AgPSAwOyBsb29w
IDwgbkxvb3BzOyBsb29wKyspCisgICAgICAgIHNwYW4uc3R5bGUuZm9udFdlaWdodDsKK30KKwor
QWNjZXNzb3JzLkNTU1NldCA9IGZ1bmN0aW9uKHNwYW4pIHsKKyAgICB2YXIgbkxvb3BzID0ga1Rp
bnlDb3VudDsKKyAgICBmb3IgKHZhciBsb29wID0gMDsgbG9vcCA8IG5Mb29wczsgbG9vcCsrKQor
ICAgICAgICBzcGFuLnN0eWxlLmZvbnRXZWlnaHQgPSAiYm9sZCI7Cit9CisKK3ZhciBBY2Nlc3Nv
cnNUZXN0ID0gbmV3IEJlbmNobWFya1N1aXRlKCdBY2Nlc3NvcnMnLCBbCisgICAgbmV3IEJlbmNo
bWFyaygiQ1NTIFN0eWxlIEdldCIsIEFjY2Vzc29ycy5DU1NHZXQsIEFjY2Vzc29ycy5DU1NTZXR1
cCksCisgICAgbmV3IEJlbmNobWFyaygiQ1NTIFN0eWxlIFNldCIsIEFjY2Vzc29ycy5DU1NTZXQs
IEFjY2Vzc29ycy5DU1NTZXR1cCksCisgICAgbmV3IEJlbmNobWFyaygiRG9jdW1lbnQgR2V0IE5v
ZGVUeXBlIiwgQWNjZXNzb3JzLkRvY3VtZW50R2V0KSwKKyAgICBuZXcgQmVuY2htYXJrKCJEb2N1
bWVudCBTZXQgVGl0bGUiLCBBY2Nlc3NvcnMuRG9jdW1lbnRTZXQpLAorICAgIG5ldyBCZW5jaG1h
cmsoIk5vZGVsaXN0IEdldCBMZW5ndGgiLCBBY2Nlc3NvcnMuTm9kZUxpc3RHZXQsIEFjY2Vzc29y
cy5Ob2RlTGlzdFNldHVwKSwKKyAgICBuZXcgQmVuY2htYXJrKCJTcGFuIEdldCBOb2RlVHlwZSIs
IEFjY2Vzc29ycy5ET01PYmplY3RHZXQsIEFjY2Vzc29ycy5ET01PYmplY3RTZXR1cCksCisgICAg
bmV3IEJlbmNobWFyaygiU3BhbiBTZXQgVGl0bGUiLCBBY2Nlc3NvcnMuRE9NT2JqZWN0U2V0LCBB
Y2Nlc3NvcnMuRE9NT2JqZWN0U2V0dXApLAorICAgIG5ldyBCZW5jaG1hcmsoIlJvb3QgR2V0IExl
bmd0aCIsIEFjY2Vzc29ycy5Sb290R2V0KSwKKyAgICBuZXcgQmVuY2htYXJrKCJSb290IFNldCBU
aXRsZSIsIEFjY2Vzc29ycy5Sb290U2V0KSwKKyAgICBuZXcgQmVuY2htYXJrKCJXaW5kb3cgR2V0
IExlbmd0aCIsIEFjY2Vzc29ycy5XaW5kb3dHZXQpLAorICAgIG5ldyBCZW5jaG1hcmsoIldpbmRv
dyBTZXQgTmFtZSIsIEFjY2Vzc29ycy5XaW5kb3dTZXQpCitdKTsKSW5kZXg6IFBlcmZvcm1hbmNl
VGVzdHMvQ2hyb21pdW1ET01QZXJmL3Jlc291cmNlcy9kb20vY2xvbmVub2Rlcy5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0Nocm9taXVtRE9NUGVyZi9yZXNvdXJjZXMvZG9tL2Ns
b25lbm9kZXMuanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0Nocm9taXVtRE9N
UGVyZi9yZXNvdXJjZXMvZG9tL2Nsb25lbm9kZXMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
OTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBUZXN0cyBjbG9uaW5nIGFuZCBhcHBlbmRpbmcgc21hbGwgYW5kIG1lZGl1bSBET00g
dHJlZXMuCitmdW5jdGlvbiBDbG9uZU5vZGVzKHNpemUsIHN0eWxlKSB7CisgICAgdmFyIG1lID0g
dGhpczsKKyAgICB0aGlzLnNpemUgPSBzaXplOworICAgIHRoaXMuc3R5bGUgPSBzdHlsZTsKKwor
ICAgIHRoaXMubmFtZSA9IG1lLnNpemUgKyAnLCAnICsgbWUuc3R5bGU7CisKKyAgICB2YXIgbkNs
b25lcyA9IDA7CisKKyAgICB0aGlzLlNldHVwID0gZnVuY3Rpb24oKSB7CisgICAgICAgIC8vIGdl
dERPTVRyZWUgd2lsbCBpbml0aWFsaXplIHRoZSBnbG9iYWwgdHJlZSBpZiBuZWNlc3NhcnkuCisg
ICAgICAgIG1lLmRvbVRyZWUgPSBtZS5nZXRET01UcmVlKCk7CisgICAgICAgIGlmIChtZS5zdHls
ZSA9PSAnYXBwZW5kJykKKyAgICAgICAgICAgIG1lLmRvbVRyZWUgPSBtZS5kb21UcmVlLmNsb25l
Tm9kZSh0cnVlKTsKKyAgICB9OworCisgICAgdGhpcy5UZXN0ID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHZhciBrSXRlcmF0aW9ucyA9IDEwOworICAgICAgICBpZiAobWUuc3R5bGUgPT0gJ2Nsb25l
JykgeworICAgICAgICAgICAgZm9yICh2YXIgaXRlcmF0aW9ucyA9IDA7IGl0ZXJhdGlvbnMgPCBr
SXRlcmF0aW9uczsgaXRlcmF0aW9ucysrKQorICAgICAgICAgICAgICAgIG1lLmRvbVRyZWUuY2xv
bmVOb2RlKHRydWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yICh2YXIgaXRl
cmF0aW9ucyA9IDA7IGl0ZXJhdGlvbnMgPCBrSXRlcmF0aW9uczsgaXRlcmF0aW9ucysrKQorICAg
ICAgICAgICAgICAgIHRoaXMuc3VpdGUuYmVuY2htYXJrQ29udGVudC5hcHBlbmRDaGlsZChtZS5k
b21UcmVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvLyBSZXR1cm5zIGEgdHJlZSBvZiBz
aXplIG1lLnNpemUgZnJvbSB0aGUgcG9vbCBpbiB0aGUgcHJvdG90eXBlLCBjcmVhdGluZyAKKyAg
ICAvLyBvbmUgaWYgbmVlZGVkLgorICAgIHRoaXMuZ2V0RE9NVHJlZSA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICB2YXIgZG9tVHJlZSA9IG1lLlRyZWVzW21lLnNpemVdOworICAgICAgICBpZiAoIWRv
bVRyZWUpIHsKKyAgICAgICAgICAgIHN3aXRjaCAodGhpcy5zaXplKSB7CisgICAgICAgICAgICBj
YXNlICdzbWFsbCc6CisgICAgICAgICAgICAgICAgZG9tVHJlZSA9IEJlbmNobWFya1N1aXRlLnBy
b3RvdHlwZS5nZW5lcmF0ZVNtYWxsVHJlZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSAnbWVkaXVtJzoKKyAgICAgICAgICAgICAgICBkb21UcmVlID0gQmVuY2ht
YXJrU3VpdGUucHJvdG90eXBlLmdlbmVyYXRlTWVkaXVtVHJlZSgpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSAnbGFyZ2UnOgorICAgICAgICAgICAgICAgIGRvbVRy
ZWUgPSBCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuZ2VuZXJhdGVMYXJnZVRyZWUoKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1lLlRyZWVzW21l
LnNpemVdID0gZG9tVHJlZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZG9tVHJlZTsKKyAg
ICB9OworCisgICAgdGhpcy5HZXRCZW5jaG1hcmsgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0
dXJuIG5ldyBCZW5jaG1hcmsodGhpcy5uYW1lLCB0aGlzLlRlc3QsIHRoaXMuU2V0dXApOworICAg
IH07Cit9OworCitDbG9uZU5vZGVzLnByb3RvdHlwZSA9IHsKKyAgICBTaXplczogWydzbWFsbCcs
ICdtZWRpdW0nXSwKKyAgICBTdHlsZXM6IFsnY2xvbmUnLCAnYXBwZW5kJ10sCisgICAgVHJlZXM6
IHt9Cit9OworCisvLyBHZW5lcmF0ZSBhIHRlc3QgZm9yIGVhY2ggc2l6ZS9zdHlsZSBjb21iaW5h
dGlvbi4KK3ZhciBiZW5jaG1hcmtzID0gW107CitDbG9uZU5vZGVzLnByb3RvdHlwZS5TaXplcy5m
b3JFYWNoKGZ1bmN0aW9uKHNpemUpIHsKKyAgICBDbG9uZU5vZGVzLnByb3RvdHlwZS5TdHlsZXMu
Zm9yRWFjaChmdW5jdGlvbihzdHlsZSkgeworICAgICAgICBiZW5jaG1hcmtzLnB1c2gobmV3IENs
b25lTm9kZXMoc2l6ZSwgc3R5bGUpLkdldEJlbmNobWFyaygpKTsKKyAgICB9KTsKK30pOworCit2
YXIgQ2xvbmVOb2Rlc1Rlc3QgPSBuZXcgQmVuY2htYXJrU3VpdGUoJ0Nsb25lTm9kZXMnLCBiZW5j
aG1hcmtzKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hyb21pdW1ET01QZXJmL3Jlc291cmNl
cy9kb20vY3JlYXRlbm9kZXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9DaHJv
bWl1bURPTVBlcmYvcmVzb3VyY2VzL2RvbS9jcmVhdGVub2Rlcy5qcwkocmV2aXNpb24gMCkKKysr
IFBlcmZvcm1hbmNlVGVzdHMvQ2hyb21pdW1ET01QZXJmL3Jlc291cmNlcy9kb20vY3JlYXRlbm9k
ZXMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjI5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gQ3JlYXRlTm9kZXMKKy8vIFRl
c3QgbWVjaGFuaXNtcyBmb3IgY3JlYXRpbmcgYW5kIGluc2VydGluZyBub2RlcyBpbnRvIGEgRE9N
IHRyZWUuCisvLworLy8gVGhlcmUgYXJlIG1hbnkgd2F5cyB0byBhZGQgbm9kZXMgaW50byBhIERP
TSB0cmVlLiAgVGhpcyB0ZXN0IGV4ZXJjaXNlcworLy8gdXNlIG9mOgorLy8gICAgLSBjcmVhdGVF
bGVtZW50KCkvYXBwZW5kQ2hpbGQoKQorLy8gICAgLSBjcmVhdGVEb2N1bWVudEZyYWdtZW50KCkK
Ky8vICAgIC0gaW5uZXJIVE1MKCkKKy8vICAgIC0gc3BhbnMKKworZnVuY3Rpb24gQ3JlYXRlTm9k
ZXMoKSB7fQorCitDcmVhdGVOb2Rlcy5uSXRlcmF0aW9ucyA9IDEwMDAwOworQ3JlYXRlTm9kZXMu
bkl0ZXJhdGlvbnNTbG93ID0gMjAwMDsKK0NyZWF0ZU5vZGVzLmN1cnJlbnRJdGVyYXRpb25zID0g
Q3JlYXRlTm9kZXMubkl0ZXJhdGlvbnM7CitDcmVhdGVOb2Rlcy5ub2RlUHJvdG8gPSBudWxsOwor
CitDcmVhdGVOb2Rlcy5jcmVhdGVOb2RlID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKCFDcmVhdGVO
b2Rlcy5ub2RlUHJvdG8pIHsKKyAgICAgICAgdmFyIGh0bWwgPSB0aGlzLmdldE5vZGVIVE1MKCk7
CisgICAgICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAg
ICAgICBzcGFuLmlubmVySFRNTCA9IGh0bWw7CisgICAgICAgIENyZWF0ZU5vZGVzLm5vZGVQcm90
byA9IHNwYW4uZmlyc3RDaGlsZDsKKyAgICB9CisgICAgcmV0dXJuIENyZWF0ZU5vZGVzLm5vZGVQ
cm90bzsKK307CisKK0NyZWF0ZU5vZGVzLmdldE5vZGVIVE1MID0gZnVuY3Rpb24oKSB7CisgICAg
cmV0dXJuICI8ZGl2IHN0eWxlPVwiZm9udC1zdHlsZTpib2xkXCI+dGVzdDwvZGl2PiI7Cit9Owor
CitDcmVhdGVOb2Rlcy5hcHBlbmROb2Rlc1dpdGhET00gPSBmdW5jdGlvbihub2RlKSB7CisgICAg
dmFyIG5vZGVzID0gQ3JlYXRlTm9kZXMuY3JlYXRlTm9kZXNXaXRoRE9NKG5vZGUpOworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgQ3JlYXRlTm9kZXMubkl0ZXJhdGlvbnM7IGkrKykKKyAgICAgICAg
dGhpcy5zdWl0ZS5iZW5jaG1hcmtDb250ZW50LmFwcGVuZENoaWxkKG5vZGVzW2ldKTsKKyAgICBD
cmVhdGVOb2Rlcy5mb3JjZU5vZGUodGhpcyk7Cit9OworCitDcmVhdGVOb2Rlcy5qdXN0QXBwZW5k
Tm9kZXNXaXRoRE9NID0gZnVuY3Rpb24obm9kZXMpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IENyZWF0ZU5vZGVzLm5JdGVyYXRpb25zOyBpKyspCisgICAgICAgIHRoaXMuc3VpdGUuYmVuY2ht
YXJrQ29udGVudC5hcHBlbmRDaGlsZChub2Rlc1tpXSk7Cit9OworCitDcmVhdGVOb2Rlcy5jcmVh
dGVOb2Rlc1dpdGhIVE1MID0gZnVuY3Rpb24oaHRtbCkgeworICAgIHZhciBhbGxIVE1MID0gIiI7
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBDcmVhdGVOb2Rlcy5jdXJyZW50SXRlcmF0aW9uczsg
aSsrKQorICAgICAgICBhbGxIVE1MICs9IGh0bWw7CisgICAgcmV0dXJuIGFsbEhUTUw7Cit9Owor
CitDcmVhdGVOb2Rlcy5jaGVja05vZGVzID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIGxlbmd0aCA9
IHRoaXMuc3VpdGUuYmVuY2htYXJrQ29udGVudC5jaGlsZE5vZGVzLmxlbmd0aDsKKyAgICB2YXIg
Y291bnQgPSBDcmVhdGVOb2Rlcy5jdXJyZW50SXRlcmF0aW9uczsKKyAgICBpZiAobGVuZ3RoICE9
IGNvdW50KQorICAgICAgICB0aHJvdyAiU2hvdWxkIGhhdmUgIiArIGNvdW50ICsgIiBub2Rlcywg
aGF2ZTogIiArIGxlbmd0aDsKK307CisKKy8vIEVuc3VyZXMgdGhhdCB0aGUgbm9kZSBoYXMgcmVh
bGx5IGJlZW4gY3JlYXRlZCBhbmQgbm90IGp1c3QgZGVsYXllZAorQ3JlYXRlTm9kZXMuZm9yY2VO
b2RlID0gZnVuY3Rpb24oYmVuY2htYXJrKSB7CisgICAgdmFyIGNoaWxkID0gIGJlbmNobWFyay5z
dWl0ZS5iZW5jaG1hcmtDb250ZW50LmNoaWxkTm9kZXNbQ3JlYXRlTm9kZXMubkl0ZXJhdGlvbnMg
LyAyXTsKK307CisKK0NyZWF0ZU5vZGVzLmFwcGVuZE5vZGVzV2l0aEhUTUwgPSBmdW5jdGlvbiho
dG1sKSB7CisgICAgdmFyIGFsbEhUTUwgPSBDcmVhdGVOb2Rlcy5jcmVhdGVOb2Rlc1dpdGhIVE1M
KGh0bWwpOworICAgIHRoaXMuc3VpdGUuYmVuY2htYXJrQ29udGVudC5pbm5lckhUTUwgPSBhbGxI
VE1MOworICAgIENyZWF0ZU5vZGVzLmZvcmNlTm9kZSh0aGlzKTsKK307CisKK0NyZWF0ZU5vZGVz
LmNyZWF0ZU5vZGVzV2l0aERPTSA9IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICB2YXIgbm9kZXMgPSBb
XTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IENyZWF0ZU5vZGVzLm5JdGVyYXRpb25zOyBpKysp
CisgICAgICAgIG5vZGVzLnB1c2gobm9kZS5jbG9uZU5vZGUodHJ1ZSkpOworICAgIHJldHVybiBu
b2RlczsKK307CisKK0NyZWF0ZU5vZGVzLmNyZWF0ZU5vZGVzV2l0aERPTVNldHVwID0gZnVuY3Rp
b24oKSB7CisgICAgcmV0dXJuIGNyZWF0ZU5vZGVzV2l0aERPTShjcmVhdGVOb2RlKCkpOworfTsK
KworQ3JlYXRlTm9kZXMuY3JlYXRlTm9kZVNldHVwID0gZnVuY3Rpb24oKSB7CisgICAgQ3JlYXRl
Tm9kZXMuY3VycmVudEl0ZXJhdGlvbnMgPSBDcmVhdGVOb2Rlcy5uSXRlcmF0aW9uczsKKyAgICBy
ZXR1cm4gQ3JlYXRlTm9kZXMuY3JlYXRlTm9kZSgpOworfTsKKworQ3JlYXRlTm9kZXMuY3JlYXRl
Tm9kZXNXaXRoSFRNTFVzaW5nU3BhbnMgPSBmdW5jdGlvbihodG1sKSB7CisgICAgdmFyIHNwYW5z
ID0gW107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBDcmVhdGVOb2Rlcy5jdXJyZW50SXRlcmF0
aW9uczsgaSsrKSB7CisgICAgICAgIHZhciBzcGFuTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoInNwYW4iKTsKKyAgICAgICAgc3Bhbk5vZGUuaW5uZXJIVE1MID0gaHRtbDsKKyAgICAgICAg
c3BhbnMucHVzaChzcGFuTm9kZSk7CisgICAgfQorICAgIHJldHVybiBzcGFuczsKK307CisKK0Ny
ZWF0ZU5vZGVzLmFwcGVuZE5vZGVzV2l0aEhUTUxVc2luZ1NwYW5zID0gZnVuY3Rpb24oaHRtbCkg
eworICAgIHZhciBzcGFucyA9IENyZWF0ZU5vZGVzLmNyZWF0ZU5vZGVzV2l0aEhUTUxVc2luZ1Nw
YW5zKGh0bWwpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgQ3JlYXRlTm9kZXMuY3VycmVudEl0
ZXJhdGlvbnM7IGkrKykKKyAgICAgICAgdGhpcy5zdWl0ZS5iZW5jaG1hcmtDb250ZW50LmFwcGVu
ZENoaWxkKHNwYW5zW2ldKTsKKyAgICBDcmVhdGVOb2Rlcy5mb3JjZU5vZGUodGhpcyk7Cit9Owor
CitDcmVhdGVOb2Rlcy5hcHBlbmROb2Rlc1dpdGhIVE1MVXNpbmdEb2N1bWVudEZyYWdtZW50cyA9
IGZ1bmN0aW9uKGh0bWwpIHsKKyAgICB2YXIgZnJhZ21lbnRzID0gQ3JlYXRlTm9kZXMuY3JlYXRl
Tm9kZXNXaXRoSFRNTFVzaW5nRG9jdW1lbnRGcmFnbWVudHMoaHRtbCk7CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBDcmVhdGVOb2Rlcy5uSXRlcmF0aW9uczsgaSsrKQorICAgICAgICB0aGlzLnN1
aXRlLmJlbmNobWFya0NvbnRlbnQuYXBwZW5kQ2hpbGQoZnJhZ21lbnRzW2ldKTsKKyAgICBDcmVh
dGVOb2Rlcy5mb3JjZU5vZGUodGhpcyk7Cit9OworCitDcmVhdGVOb2Rlcy5jcmVhdGVOb2Rlc1dp
dGhIVE1MVXNpbmdEb2N1bWVudEZyYWdtZW50cyA9IGZ1bmN0aW9uKGh0bWwpIHsKKyAgICB2YXIg
ZnJhZ21lbnRzID0gW107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBDcmVhdGVOb2Rlcy5uSXRl
cmF0aW9uczsgaSsrKSB7CisgICAgICAgIHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURv
Y3VtZW50RnJhZ21lbnQoKTsKKyAgICAgICAgZnJhZ21lbnQuaW5uZXJIVE1MID0gaHRtbDsKKyAg
ICAgICAgZnJhZ21lbnRzLnB1c2goZnJhZ21lbnQpOworICAgIH0KKyAgICByZXR1cm4gZnJhZ21l
bnRzOworfTsKKworQ3JlYXRlTm9kZXMuYXBwZW5kTm9kZXNXaXRoRE9NVXNpbmdEb2N1bWVudEZy
YWdtZW50ID0gZnVuY3Rpb24obm9kZSkgeworICAgIHZhciBmcmFnbWVudCA9IENyZWF0ZU5vZGVz
LmNyZWF0ZU5vZGVzV2l0aERPTVVzaW5nRG9jdW1lbnRGcmFnbWVudChub2RlKTsKKyAgICB0aGlz
LnN1aXRlLmJlbmNobWFya0NvbnRlbnQuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpOworICAgIENyZWF0
ZU5vZGVzLmZvcmNlTm9kZSh0aGlzKTsKK307CisKK0NyZWF0ZU5vZGVzLmFwcGVuZE5vZGVzV2l0
aERPTVVzaW5nU2hhcmVkRG9jdW1lbnRGcmFnbWVudCA9IGZ1bmN0aW9uKGZyYWdtZW50KSB7Cisg
ICAgdGhpcy5zdWl0ZS5iZW5jaG1hcmtDb250ZW50LmFwcGVuZENoaWxkKGZyYWdtZW50LmNsb25l
Tm9kZSh0cnVlKSk7CisgICAgQ3JlYXRlTm9kZXMuZm9yY2VOb2RlKHRoaXMpOworfTsKKworQ3Jl
YXRlTm9kZXMuY3JlYXRlTm9kZXNXaXRoRE9NVXNpbmdEb2N1bWVudEZyYWdtZW50ID0gZnVuY3Rp
b24obm9kZSkgeworICAgIHZhciBub2RlcyA9IENyZWF0ZU5vZGVzLmNyZWF0ZU5vZGVzV2l0aERP
TShub2RlKTsKKyAgICB2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdt
ZW50KCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBDcmVhdGVOb2Rlcy5uSXRlcmF0aW9uczsg
aSsrKQorICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChub2Rlc1tpXSk7CisgICAgcmV0dXJu
IGZyYWdtZW50OworfTsKKworQ3JlYXRlTm9kZXMuY3JlYXRlU2hhcmVkRG9jdW1lbnRGcmFnbWVu
dCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBub2RlcyA9IENyZWF0ZU5vZGVzLmNyZWF0ZU5vZGVz
V2l0aERPTShDcmVhdGVOb2Rlcy5jcmVhdGVOb2RlKCkpOworICAgIHZhciBmcmFnbWVudCA9IGRv
Y3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IENyZWF0ZU5vZGVzLm5JdGVyYXRpb25zOyBpKyspCisgICAgICAgIGZyYWdtZW50LmFwcGVuZENo
aWxkKG5vZGVzW2ldKTsKKyAgICByZXR1cm4gZnJhZ21lbnQ7Cit9OworCitDcmVhdGVOb2Rlcy5j
cmVhdGVIVE1MU2V0dXAgPSBmdW5jdGlvbigpIHsKKyAgICBDcmVhdGVOb2Rlcy5jdXJyZW50SXRl
cmF0aW9ucyA9IENyZWF0ZU5vZGVzLm5JdGVyYXRpb25zU2xvdzsKKyAgICByZXR1cm4gQ3JlYXRl
Tm9kZXMuZ2V0Tm9kZUhUTUwoKTsKK307CisKK0NyZWF0ZU5vZGVzLmNyZWF0ZUlGcmFtZXNIVE1M
ID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIGh0bWwgPSBbXTsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDEwMDsgaSsrKQorICAgICAgICBodG1sLnB1c2goIjxpZnJhbWUgc3JjPSdibGFuay5odG1s
Jz48L2lmcmFtZT4iKTsKKyAgICByZXR1cm4gaHRtbC5qb2luKCcnKTsKK30KKworQ3JlYXRlTm9k
ZXMuYXBwZW5kSUZyYW1lc0hUTUwgPSBmdW5jdGlvbihodG1sKSB7CisgICAgdGhpcy5zdWl0ZS5i
ZW5jaG1hcmtDb250ZW50LmlubmVySFRNTCA9IGh0bWw7Cit9CisKK0NyZWF0ZU5vZGVzLmNyZWF0
ZUlGcmFtZXNET00gPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgbm9kZXMgPSBbXTsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisgICAgICAgIHZhciBpZnJhbWUgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKKyAgICAgICAgaWZyYW1lLnNyYyA9ICdibGFuay5o
dG1sJzsKKyAgICAgICAgbm9kZXMucHVzaChpZnJhbWUpOworICAgIH0KKyAgICByZXR1cm4gbm9k
ZXM7Cit9CisKK0NyZWF0ZU5vZGVzLmFwcGVuZElGcmFtZXNET00gPSBmdW5jdGlvbihub2Rlcykg
eworICAgIHZhciBjb250ZW50ID0gdGhpcy5zdWl0ZS5iZW5jaG1hcmtDb250ZW50OworICAgIGZv
ciAodmFyIGkgPSAwLCBsID0gbm9kZXMubGVuZ3RoOyBpIDwgbDsgaSsrKQorICAgICAgICBjb250
ZW50LmFwcGVuZENoaWxkKG5vZGVzW2ldKTsKK30KKwordmFyIENyZWF0ZU5vZGVzVGVzdCA9IG5l
dyBCZW5jaG1hcmtTdWl0ZSgnQ3JlYXRlTm9kZXMnLCBbCisgICAgbmV3IEJlbmNobWFyaygiYXBw
ZW5kLCBET00sIERvY3VtZW50RnJhZ21lbnQiLAorICAgICAgICBDcmVhdGVOb2Rlcy5hcHBlbmRO
b2Rlc1dpdGhET01Vc2luZ0RvY3VtZW50RnJhZ21lbnQsIENyZWF0ZU5vZGVzLmNyZWF0ZU5vZGVT
ZXR1cCwgQ3JlYXRlTm9kZXMuY2hlY2tOb2RlcyksCisgICAgbmV3IEJlbmNobWFyaygiY3JlYXRl
LCBET00sIERvY3VtZW50RnJhZ21lbnQiLAorICAgICAgICBDcmVhdGVOb2Rlcy5jcmVhdGVOb2Rl
c1dpdGhET01Vc2luZ0RvY3VtZW50RnJhZ21lbnQsIENyZWF0ZU5vZGVzLmNyZWF0ZU5vZGVTZXR1
cCksCisgICAgbmV3IEJlbmNobWFyaygiYXBwZW5kLCBET00sIFNoYXJlZERvY3VtZW50RnJhZ21l
bnQiLAorICAgICAgICBDcmVhdGVOb2Rlcy5hcHBlbmROb2Rlc1dpdGhET01Vc2luZ1NoYXJlZERv
Y3VtZW50RnJhZ21lbnQsIENyZWF0ZU5vZGVzLmNyZWF0ZVNoYXJlZERvY3VtZW50RnJhZ21lbnQs
ICBDcmVhdGVOb2Rlcy5jaGVja05vZGVzKSwKKyAgICBuZXcgQmVuY2htYXJrKCJjcmVhdGUsIERP
TSIsCisgICAgICAgIENyZWF0ZU5vZGVzLmNyZWF0ZU5vZGVzV2l0aERPTSwgQ3JlYXRlTm9kZXMu
Y3JlYXRlTm9kZVNldHVwKSwKKyAgICBuZXcgQmVuY2htYXJrKCJhcHBlbmQsIERPTSIsIAorICAg
ICAgICBDcmVhdGVOb2Rlcy5hcHBlbmROb2Rlc1dpdGhET00sIENyZWF0ZU5vZGVzLmNyZWF0ZU5v
ZGVTZXR1cCwgQ3JlYXRlTm9kZXMuY2hlY2tOb2RlcyksCisgICAgbmV3IEJlbmNobWFyaygiYXBw
ZW5kLCBET00sIGlGcmFtZSIsCisgICAgICAgIENyZWF0ZU5vZGVzLmFwcGVuZElGcmFtZXNET00s
IENyZWF0ZU5vZGVzLmNyZWF0ZUlGcmFtZXNET00pLAorICAgIG5ldyBCZW5jaG1hcmsoImFwcGVu
ZCwgSFRNTCIsIAorICAgICAgICBDcmVhdGVOb2Rlcy5hcHBlbmROb2Rlc1dpdGhIVE1MLCBDcmVh
dGVOb2Rlcy5jcmVhdGVIVE1MU2V0dXAsIENyZWF0ZU5vZGVzLmNoZWNrTm9kZXMpLAorICAgIG5l
dyBCZW5jaG1hcmsoImNyZWF0ZSwgSFRNTCwgU3BhbnMiLCAKKyAgICAgICAgQ3JlYXRlTm9kZXMu
Y3JlYXRlTm9kZXNXaXRoSFRNTFVzaW5nU3BhbnMsIENyZWF0ZU5vZGVzLmNyZWF0ZUhUTUxTZXR1
cCksCisgICAgbmV3IEJlbmNobWFyaygiYXBwZW5kLCBIVE1MLCBTcGFucyIsCisgICAgICAgIENy
ZWF0ZU5vZGVzLmFwcGVuZE5vZGVzV2l0aEhUTUxVc2luZ1NwYW5zLCBDcmVhdGVOb2Rlcy5jcmVh
dGVIVE1MU2V0dXAsIENyZWF0ZU5vZGVzLmNoZWNrTm9kZXMpLAorICAgIG5ldyBCZW5jaG1hcmso
ImFwcGVuZCwgSFRNTCwgaUZyYW1lIiwKKyAgICAgICAgQ3JlYXRlTm9kZXMuYXBwZW5kSUZyYW1l
c0hUTUwsIENyZWF0ZU5vZGVzLmNyZWF0ZUlGcmFtZXNIVE1MKQorXSk7CkluZGV4OiBQZXJmb3Jt
YW5jZVRlc3RzL0Nocm9taXVtRE9NUGVyZi9yZXNvdXJjZXMvZG9tL2RvbWRpdndhbGsuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9DaHJvbWl1bURPTVBlcmYvcmVzb3VyY2VzL2Rv
bS9kb21kaXZ3YWxrLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9DaHJvbWl1
bURPTVBlcmYvcmVzb3VyY2VzL2RvbS9kb21kaXZ3YWxrLmpzCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDE3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPTURpdldhbGsKKy8vIFRlc3RzIGl0ZXJhdGlvbiBvZiBhIERPTSB0cmVl
IHdoaWNoIGlzIGNvbXByaXNlZCBvZiBhIGhpZXJhcmNoaWNhbAorLy8gc2V0IG9mIGRpdiBzZWN0
aW9ucy4KKy8vCisvLyBUd28gbWVjaGFuaXNtcyBhcmUgdXNlZCB0byBpdGVyYXRlIHRoZSBET00g
dHJlZToKKy8vICAgIC0gcmVjdXJzaXZlIGl0ZXJhdGlvbiB2aWEgTm9kZS5jaGlsZHJlbgorLy8g
ICAgLSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZQorLy8KKy8vIFZhcmlvdXMgdHJlZSBz
aXplcyBhcmUgdGVzdGVkOgorLy8gICAgLSBzbWFsbCwgbWVkaXVtLCBhbmQgbGFyZ2UgRE9Ncwor
Ly8KKy8vIEJlY2F1c2UgdGhpcyB0ZXN0IGlzIHJ1biByZXBlYXRlZGx5IG9uIHRoZSBzYW1lIERP
TSB0cmVlLCB0aGUgZmlyc3QKKy8vIGl0ZXJhdGlvbiBtYXkgY2F1c2UgY3JlYXRpb24gb2YgdGhl
IEpTIERPTSBPYmplY3RzLCBhbmQgc3Vic2VxdWVudAorLy8gaXRlcmF0aW9ucyB3aWxsIHVzZSB0
aGUgY2FjaGVkIGluc3RhbmNlIG9mIHRoYXQgSlMgT2JqZWN0LgorLy8KKworLy8gVGhlc2UgdGVz
dHMgdHJ5IHdhbGtpbmcgb3ZlciBkaWZmZXJlbnQgRE9NIHRyZWVzIGZ1bGwgb2YgZGl2cworLy8g
Rmlyc3QgY3JlYXRlIGEgRERXYWxrVGVzdCwgdXNpbmcgdGhlIGFib3ZlIHZhbHVlcywKKy8vIHRo
ZW4gY2FsbCBHZXRCZW5jaG1hcmsoKQorZnVuY3Rpb24gRERXYWxrVGVzdChzaXplLCBhcHBlbmRT
dHlsZSwgdHJhdmVyc2VTdHlsZSkgeworICAgIHZhciBtZSA9IHRoaXM7CisgICAgdGhpcy5zaXpl
ID0gc2l6ZTsKKyAgICB0aGlzLmFwcGVuZFN0eWxlID0gYXBwZW5kU3R5bGU7CisgICAgdGhpcy50
cmF2ZXJzZVN0eWxlID0gdHJhdmVyc2VTdHlsZTsKKyAgICB0aGlzLm5vZGVzRm91bmQgPSAwOwor
CisgICAgdGhpcy5uYW1lID0gKHRoaXMuU2l6ZXMubGVuZ3RoID4gMSA/IChtZS5zaXplICsgIiwg
IikgOiAiIikgKyBtZS5hcHBlbmRTdHlsZSArICIsICIgKyBtZS50cmF2ZXJzZVN0eWxlOworCisg
ICAgdGhpcy5zZXR1cERPTSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgZG9tVHJlZSA9IG1l
LmdldERPTVRyZWUoKS5jbG9uZU5vZGUodHJ1ZSk7CisgICAgICAgIHRoaXMuc3VpdGUuYmVuY2ht
YXJrQ29udGVudC5hcHBlbmRDaGlsZChkb21UcmVlKTsKKyAgICAgICAgbWUubm9kZXNGb3VuZCA9
IDA7CisgICAgICAgIHJldHVybiBkb21UcmVlOworICAgIH07CisKKyAgICB0aGlzLnNldHVwSFRN
TCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnN1aXRlLmJlbmNobWFya0NvbnRlbnQuaW5u
ZXJIVE1MID0gbWUuZ2V0RE9NVHJlZSgpLmlubmVySFRNTDsKKyAgICAgICAgbWUubm9kZXNGb3Vu
ZCA9IDA7CisgICAgfTsKKyAgCisgICAgaWYgKHRoaXMuYXBwZW5kU3R5bGUgPT0gIkRPTSIpCisg
ICAgICAgIHRoaXMuU2V0dXAgPSB0aGlzLnNldHVwRE9NOworICAgIGVsc2UKKyAgICAgICAgdGhp
cy5TZXR1cCA9IHRoaXMuc2V0dXBIVE1MOworICAKKyAgICB0aGlzLnJlY3Vyc2VDaGlsZE5vZGVz
ID0gZnVuY3Rpb24oaGFuZGxlKSB7CisgICAgICAgIGZ1bmN0aW9uIHdhbGtTdWJ0cmVlKHBhcmVu
dCwgZGVwdGgpIHsKKyAgICAgICAgICAgIGlmIChtZS5ub2Rlc0ZvdW5kID09IG1lLm1heE5vZGVz
Rm91bmQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgaWYgKHBhcmVudC5ub2RlTmFtZSA9PSAiU1BBTiIgJiYgZGVwdGggPiAwKQor
ICAgICAgICAgICAgICAgICAgICBtZS5ub2Rlc0ZvdW5kKys7CisgICAgICAgICAgICAgICAgdmFy
IGNoaWxkcmVuID0gcGFyZW50LmNoaWxkTm9kZXM7CisgICAgICAgICAgICAgICAgdmFyIG5DaGls
ZHJlbiA9IGNoaWxkcmVuLmxlbmd0aDsKKyAgICAgICAgICAgICAgICB3aGlsZSAobkNoaWxkcmVu
LS0gPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW25DaGls
ZHJlbl07CisgICAgICAgICAgICAgICAgICAgIHdhbGtTdWJ0cmVlKGNoaWxkLCBkZXB0aCArIDEp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB3
YWxrU3VidHJlZSh0aGlzLnN1aXRlLmJlbmNobWFya0NvbnRlbnQsIDApOworICAgIH07CisgIAor
ICAgIHRoaXMucmVjdXJzZVNpYmxpbmdzID0gZnVuY3Rpb24oaGFuZGxlKSB7CisgICAgICAgIGZ1
bmN0aW9uIHdhbGtTdWJ0cmVlKHBhcmVudCwgZGVwdGgpIHsKKyAgICAgICAgICAgIGlmIChtZS5u
b2Rlc0ZvdW5kID09IG1lLm1heE5vZGVzRm91bmQpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHBhcmVudC5ub2RlTmFtZSA9
PSAiU1BBTiIgJiYgZGVwdGggPiAwKQorICAgICAgICAgICAgICAgICAgICBtZS5ub2Rlc0ZvdW5k
Kys7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgY2hpbGQgPSBwYXJlbnQuZmlyc3RDaGlsZDsg
Y2hpbGQgIT09IG51bGw7IGNoaWxkID0gY2hpbGQubmV4dFNpYmxpbmcpCisgICAgICAgICAgICAg
ICAgICB3YWxrU3VidHJlZShjaGlsZCwgZGVwdGggKyAxKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICB3YWxrU3VidHJlZSh0aGlzLnN1aXRlLmJlbmNobWFya0NvbnRlbnQsIDAp
OworICAgIH07CisKKyAgICB0aGlzLmdldEVsZW1lbnRzID0gZnVuY3Rpb24oaGFuZGxlKSB7Cisg
ICAgICAgIHZhciBrSXRlcmF0aW9ucyA9IDEwOworCisgICAgICAgIGZvciAodmFyIGl0ZXJhdGlv
bnMgPSAwOyBpdGVyYXRpb25zIDwga0l0ZXJhdGlvbnM7IGl0ZXJhdGlvbnMrKykgeworICAgICAg
ICAgICAgbWUubm9kZXNGb3VuZCA9IDA7CisgICAgICAgICAgICB2YXIgaXRlbXMgPSB0aGlzLnN1
aXRlLmJlbmNobWFya0NvbnRlbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNwYW4iKTsKKyAgICAg
ICAgICAgIGZvciAodmFyIGluZGV4ID0gMCwgbGVuZ3RoID0gaXRlbXMubGVuZ3RoOyBpbmRleCA8
IGxlbmd0aDsgKytpbmRleCkgeworICAgICAgICAgICAgICAgIHZhciBpdGVtID0gaXRlbXNbaW5k
ZXhdOworICAgICAgICAgICAgICAgIHZhciBub2RlTmFtZSA9IGl0ZW0ubm9kZU5hbWU7CisgICAg
ICAgICAgICAgICAgKyttZS5ub2Rlc0ZvdW5kOworICAgICAgICAgICAgICAgIGlmIChtZS5ub2Rl
c0ZvdW5kID09IG1lLm1heE5vZGVzRm91bmQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKKyAgICB0aGlzLlRlc3QgPSB0aGlz
W3RoaXMudHJhdmVyc2VTdHlsZV07CisKKyAgICB0aGlzLkNsZWFudXAgPSBmdW5jdGlvbihoYW5k
bGUpIHsKKyAgICAgICAgdmFyIGV4cGVjdGVkQ291bnQgPSBtZS5FeHBlY3RlZENvdW50c1ttZS5z
aXplXTsKKyAgICAgICAgaWYgKG1lLm5vZGVzRm91bmQgIT0gZXhwZWN0ZWRDb3VudCkKKyAgICAg
ICAgICAgIHRocm93ICJXcm9uZyBudW1iZXIgb2Ygbm9kZXMgZm91bmQ6ICIgKyBtZS5ub2Rlc0Zv
dW5kICsgIiBleHBlY3RlZDogIiArIGV4cGVjdGVkQ291bnQ7CisgICAgfTsKKworICAgIHRoaXMu
R2V0QmVuY2htYXJrID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBuZXcgQmVuY2htYXJr
KHRoaXMubmFtZSwgdGhpcy5UZXN0LCB0aGlzLlNldHVwLCB0aGlzLkNsZWFudXApOyAgICAKKyAg
ICB9OworCisgICAgdGhpcy5nZXRET01UcmVlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBk
b21UcmVlID0gbWUuVHJlZXNbbWUuc2l6ZV07CisgICAgICAgIGlmICghZG9tVHJlZSkgeworICAg
ICAgICAgICAgc3dpdGNoIChtZS5zaXplKSB7CisgICAgICAgICAgICBjYXNlICJzbWFsbCIgOiBk
b21UcmVlID0gQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLmdlbmVyYXRlU21hbGxUcmVlKCk7IGJy
ZWFrOworICAgICAgICAgICAgY2FzZSAibWVkaXVtIiA6IGRvbVRyZWUgPSBCZW5jaG1hcmtTdWl0
ZS5wcm90b3R5cGUuZ2VuZXJhdGVNZWRpdW1UcmVlKCk7IGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSAibGFyZ2UiIDogZG9tVHJlZSA9IEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5nZW5lcmF0ZUxh
cmdlVHJlZSgpOyBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1lLlRyZWVzW21l
LnNpemVdID0gZG9tVHJlZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZG9tVHJlZTsKKyAg
ICB9OworfQorCitERFdhbGtUZXN0LnByb3RvdHlwZSA9IHsKKyAgICAvLyBEaWZmZXJlbnQgc2l6
ZXMgYXJlIHBvc3NpYmxlLCBidXQgd2UgdHJ5IHRvIGtlZXAgdGhlIHJ1bnRpbWUgYW5kIG1lbW9y
eQorICAgIC8vIGNvbnN1bXB0aW9uIHJlYXNvbmFibGUuCisgICAgU2l6ZXM6IFsibWVkaXVtIl0s
CisgICAgVHJlZXM6IHt9LAorICAgIEFwcGVuZFN0eWxlczogWyJET00iLCAiSFRNTCJdLAorICAg
IFRyYXZlcnNlU3R5bGVzOiBbInJlY3Vyc2VDaGlsZE5vZGVzIiwgInJlY3Vyc2VTaWJsaW5ncyIs
ICJnZXRFbGVtZW50cyJdLAorICAgIEV4cGVjdGVkQ291bnRzIDogeyJzbWFsbCIgOiA5MCwgIm1l
ZGl1bSI6IDIxMDYsICJsYXJnZSIgOiAyMDAwfSwKKworICAgIC8vIExpbWl0cyB0aGUgbnVtYmVy
IG9mIG5vZGVzIHRvIHRoaXMgbnVtYmVyCisgICAgLy8gSWYgd2UgZG9uJ3QgZG8gdGhpcyB0aGUg
dGVzdHMgY2FuIHRha2UgdG9vIGxvbmcgdG8gcnVuCisgICAgbWF4Tm9kZXNGb3VuZCA6IDEwMDAw
Cit9OworCisKKy8vIEdlbmVyYXRlIHRoZSBtYXRyaXggb2YgYWxsIGJlbmNobWFya3MKK3ZhciBi
ZW5jaG1hcmtzID0gW107CitERFdhbGtUZXN0LnByb3RvdHlwZS5TaXplcy5mb3JFYWNoKGZ1bmN0
aW9uKHNpemUpIHsKKyAgICBERFdhbGtUZXN0LnByb3RvdHlwZS5BcHBlbmRTdHlsZXMuZm9yRWFj
aChmdW5jdGlvbihhcHBlbmRTdHlsZSkgeworICAgICAgICBERFdhbGtUZXN0LnByb3RvdHlwZS5U
cmF2ZXJzZVN0eWxlcy5mb3JFYWNoKGZ1bmN0aW9uKHRyYXZlcnNlU3R5bGUpIHsKKyAgICAgICAg
ICAgIGJlbmNobWFya3MucHVzaChuZXcgRERXYWxrVGVzdChzaXplLCBhcHBlbmRTdHlsZSwgdHJh
dmVyc2VTdHlsZSkuR2V0QmVuY2htYXJrKCkpOworICAgICAgICB9KTsKKyAgICB9KTsKK30pOwor
Cit2YXIgRE9NRGl2V2Fsa1Rlc3QgPSBuZXcgQmVuY2htYXJrU3VpdGUoIkRPTURpdldhbGsiLCBi
ZW5jaG1hcmtzKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hyb21pdW1ET01QZXJmL3Jlc291
cmNlcy9kb20vZG9tdGFibGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9DaHJv
bWl1bURPTVBlcmYvcmVzb3VyY2VzL2RvbS9kb210YWJsZS5qcwkocmV2aXNpb24gMCkKKysrIFBl
cmZvcm1hbmNlVGVzdHMvQ2hyb21pdW1ET01QZXJmL3Jlc291cmNlcy9kb20vZG9tdGFibGUuanMJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE9NVGFibGUgLSBhIGJlbmNobWFyayBj
cmVhdGluZyB0YWJsZXMgYW5kIGFjY2Vzc2luZyB0YWJsZSBlbGVtZW50cworLy8KKy8vIFRoaXMg
YmVuY2htYXJrIHRlc3RzIGRpZmZlcmVudCBtZWNoYW5pc21zIGZvciBjcmVhdGluZyBhbiBIVE1M
IHRhYmxlLiBCeQorLy8gZWl0aGVyIGNyZWF0aW5nIHRoZSBET00gZWxlbWVudHMgaW5kaXZpZHVh
bGx5IG9yIGJ5IGNyZWF0aW5nIGFuIGlubmVyIEhUTUwKKy8vIGFzIGEgc3RyaW5nLiBUaGUgZWZm
ZWN0IG9mIGZvcmNpbmcgYSBsYXlvdXQgaXMgYWxzbyBtZWFzdXJlZC4KKy8vIEEgc2Vjb25kIHBh
cnQgb2YgdGhlIGJlbmNobWFyayBzdW1zIHRoZSBjb250ZW50cyBvZiBhbGwgZWxlbWVudHMuIEFn
YWluCisvLyBpbiBvbmUgc2V0IHRoZSBiZW5jaG1hcmsgaXMgY3JlYXRlZCB1c2luZyBET00gZnVu
Y3Rpb25zIGZyb20gSmF2YVNjcmlwdCwKKy8vIGNhdXNpbmcgYWxsIG5vZGVzIHRvIGJlIHByZXdy
YXBwZWQsIHdoaWxlIGluIGEgc2Vjb25kIHNldCB0aGUgdGFibGUgaXMKKy8vIGNyZWF0ZWQgdXNp
bmcgaW5uZXIgSFRNTCB3aGljaCB3aWxsIHdyYXAgdGhlIGVsZW1lbnRzIGF0IGFjY2Vzcy4KKwor
Ly8gU2l6ZSBvZiB0aGUgY3JlYXRlZCB0YWJsZXMuCit2YXIgRE9NVGFibGVfbWF4Um93cyA9IDEw
MDsKK3ZhciBET01UYWJsZV9tYXhDb2xzID0gNDA7CisKKy8vIEhlbHBlciB2YXJpYWJsZSB0byBj
cmVhdGUgY29uc2lzdGVudCB2YWx1ZXMgZm9yIHRoZSB0YWJsZSBlbGVtZW50cy4KK3ZhciBET01U
YWJsZV9lbGVtZW50X2NvdW50ID0gMDsKKworLy8gRnVuY3Rpb25zIG5lZWRlZCB0byBjcmVhdGUg
YSB0YWJsZSBieSBjcmVhdGluZyBpbmRpdmlkdWFsIERPTSBlbGVtZW50cy4KK2Z1bmN0aW9uIERP
TVRhYmxlX0NyZWF0ZUNlbGwocm93X2lkLCBjb2xfaWQpIHsKKyAgICB2YXIgY2VsbCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7CisgICAgY2VsbC5pZCA9ICIkIiArIHJvd19pZCArICIk
IiArIGNvbF9pZDsKKyAgICBjZWxsLnRleHRDb250ZW50ID0gRE9NVGFibGVfZWxlbWVudF9jb3Vu
dCsrOworICAgIHJldHVybiBjZWxsOworfQorCitmdW5jdGlvbiBET01UYWJsZV9DcmVhdGVSb3co
cm93X2lkLCBjb2xzKSB7CisgICAgdmFyIHJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRy
Iik7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2xzOyBpKyspCisgICAgICAgIHJvdy5hcHBl
bmRDaGlsZChET01UYWJsZV9DcmVhdGVDZWxsKHJvd19pZCwgaSkpOworICAgIHJldHVybiByb3c7
Cit9CisKK2Z1bmN0aW9uIERPTVRhYmxlX0NyZWF0ZVRhYmxlKHJvd3MsIGNvbHMpIHsKKyAgICB2
YXIgdGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgcm93czsgaSsrKQorICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZChET01UYWJs
ZV9DcmVhdGVSb3coaSwgY29scykpOworICAgIHJldHVybiB0YWJsZTsKK30KKworLy8gRnVuY3Rp
b25zIG5lZWRlZCB0byBjcmVhdGUgYSB0YWJsZSBieSBjcmVhdGluZyBhIGJpZyBwaWVjZSBvZiBI
VE1MIGluIGEKKy8vIHNpbmdsZSBzdHJpbmcuCitmdW5jdGlvbiBET01UYWJsZV9DcmVhdGVDZWxs
SUgocm93X2lkLCBjb2xfaWQpIHsKKyAgICByZXR1cm4gJzx0ZCBpZD0iJCcgKyByb3dfaWQgKyAn
JCcgKyBjb2xfaWQgKyAnIj4nICsgRE9NVGFibGVfZWxlbWVudF9jb3VudCsrICsgJzwvdGQ+JzsK
K30KKworZnVuY3Rpb24gRE9NVGFibGVfQ3JlYXRlUm93SUgocm93X2lkLCBjb2xzKSB7CisgICAg
dmFyIGh0bWxfc3RyaW5nID0gJzx0cj4nOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sczsg
aSsrKQorICAgICAgICBodG1sX3N0cmluZyArPSBET01UYWJsZV9DcmVhdGVDZWxsSUgocm93X2lk
LCBpKTsKKyAgICByZXR1cm4gaHRtbF9zdHJpbmcgKyAnPC90cj4nOworfQorCitmdW5jdGlvbiBE
T01UYWJsZV9DcmVhdGVUYWJsZUlIKHJvd3MsIGNvbHMpIHsKKyAgICB2YXIgaHRtbF9zdHJpbmcg
PSAnPHRhYmxlPic7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzOyBpKyspCisgICAgICAg
IGh0bWxfc3RyaW5nICs9IERPTVRhYmxlX0NyZWF0ZVJvd0lIKGksIGNvbHMpOworICAgIHJldHVy
biBodG1sX3N0cmluZyArICc8L3RhYmxlPic7Cit9CisKKworLy8gU2hhcmVkIHNldHVwIGZ1bmN0
aW9uIGZvciBhbGwgdGFibGUgY3JlYXRpb24gdGVzdHMuCitmdW5jdGlvbiBET01UYWJsZV9DcmVh
dGVTZXR1cCgpIHsKKyAgICBET01UYWJsZV9lbGVtZW50X2NvdW50ID0gMDsKKyAgICByZXR1cm4g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJlbmNobWFya19jb250ZW50Iik7Cit9CisKK2Z1bmN0
aW9uIERPTVRhYmxlX0NyZWF0ZShyb290X2VsZW1lbnQpIHsKKyAgICAvLyBDcmVhdGUgdGhlIHRh
YmxlIGFuZCBhZGQgaXQgdG8gdGhlIHJvb3RfZWxlbWVudCBmb3IgdGhlIGJlbmNobWFyay4KKyAg
ICByb290X2VsZW1lbnQuYXBwZW5kQ2hpbGQoRE9NVGFibGVfQ3JlYXRlVGFibGUoRE9NVGFibGVf
bWF4Um93cywgRE9NVGFibGVfbWF4Q29scykpOworICAgIHJldHVybiByb290X2VsZW1lbnQ7Cit9
CisKK2Z1bmN0aW9uIERPTVRhYmxlX0NyZWF0ZUxheW91dChyb290X2VsZW1lbnQpIHsKKyAgICAv
LyBDcmVhdGUgdGhlIHRhYmxlIGFuZCBhZGQgaXQgdG8gdGhlIHJvb3RfZWxlbWVudCBmb3IgdGhl
IGJlbmNobWFyay4KKyAgICByb290X2VsZW1lbnQuYXBwZW5kQ2hpbGQoRE9NVGFibGVfQ3JlYXRl
VGFibGUoRE9NVGFibGVfbWF4Um93cywgRE9NVGFibGVfbWF4Q29scykpOworICAgIC8vIEZvcmNl
IGEgbGF5b3V0IGJ5IHJlcXVlc3RpbmcgdGhlIGhlaWdodCBvZiB0aGUgdGFibGUuIFRoZSByZXN1
bHQgaXMKKyAgICAvLyBnb2luZyB0byBiZSBpZ25vcmVkIGJlY2F1c2UgdGhlcmUgaXMgbm90IGNs
ZWFudXAgZnVuY3Rpb24gcmVnaXN0ZXJlZC4KKyAgICByZXR1cm4gcm9vdF9lbGVtZW50LnNjcm9s
bEhlaWdodDsKK30KKworZnVuY3Rpb24gRE9NVGFibGVfSW5uZXJIVE1MKHJvb3RfZWxlbWVudCkg
eworICAgIC8vIENyZWF0ZSB0aGUgSFRNTCBzdHJpbmcgZm9yIHRoZSB0YWJsZSBhbmQgc2V0IGl0
IGF0IHRoZSByb290X2VsZW1lbnQgZm9yIHRoZSBiZW5jaG1hcmsuCisgICAgcm9vdF9lbGVtZW50
LmlubmVySFRNTCA9IERPTVRhYmxlX0NyZWF0ZVRhYmxlSUgoRE9NVGFibGVfbWF4Um93cywgRE9N
VGFibGVfbWF4Q29scyk7CisgICAgcmV0dXJuIHJvb3RfZWxlbWVudDsKK30KKworZnVuY3Rpb24g
RE9NVGFibGVfSW5uZXJIVE1MTGF5b3V0KHJvb3RfZWxlbWVudCkgeworICAgIC8vIENyZWF0ZSB0
aGUgSFRNTCBzdHJpbmcgZm9yIHRoZSB0YWJsZSBhbmQgc2V0IGl0IGF0IHRoZSByb290X2VsZW1l
bnQgZm9yIHRoZSBiZW5jaG1hcmsuCisgICAgcm9vdF9lbGVtZW50LmlubmVySFRNTCA9IERPTVRh
YmxlX0NyZWF0ZVRhYmxlSUgoRE9NVGFibGVfbWF4Um93cywgRE9NVGFibGVfbWF4Q29scyk7Cisg
ICAgLy8gRm9yY2UgYSBsYXlvdXQgYnkgcmVxdWVzdGluZyB0aGUgaGVpZ2h0IG9mIHRoZSB0YWJs
ZS4gVGhlIHJlc3VsdCBpcworICAgIC8vIGdvaW5nIHRvIGJlIGlnbm9yZWQgYmVjYXVzZSB0aGVy
ZSBpcyBub3QgY2xlYW51cCBmdW5jdGlvbiByZWdpc3RlcmVkLgorICAgIHJldHVybiByb290X2Vs
ZW1lbnQuc2Nyb2xsSGVpZ2h0OworfQorCitmdW5jdGlvbiBET01UYWJsZVN1bV9TZXR1cCgpIHsK
KyAgICAvLyBDcmVhdGUgdGhlIHRhYmxlIHRvIGJlIHN1bW1lZCB1c2luZyBET00gb3BlcmF0aW9u
cyBmcm9tIEphdmFTY3JpcHQuIEJ5CisgICAgLy8gZG9pbmcgaXQgdGhpcyB3YXkgdGhlIGVsZW1l
bnRzIGFyZSBhbGwgcHJlLXdyYXBwZWQuCisgICAgRE9NVGFibGVfZWxlbWVudF9jb3VudCA9IDA7
CisgICAgdmFyIHJvb3RfZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJiZW5jaG1h
cmtfY29udGVudCIpOworICAgIHZhciB0YWJsZSA9IERPTVRhYmxlX0NyZWF0ZVRhYmxlKERPTVRh
YmxlX21heFJvd3MsIERPTVRhYmxlX21heENvbHMqNSk7CisgICAgcm9vdF9lbGVtZW50LmFwcGVu
ZENoaWxkKHRhYmxlKTsKKyAgICByZXR1cm4gcm9vdF9lbGVtZW50OworfQorCitmdW5jdGlvbiBE
T01UYWJsZVN1bV9TZXR1cElIKCkgeworICAgIC8vIENyZWF0ZSB0aGUgdGFibGUgdG8gYmUgc3Vt
bWVkIHVzaW5nIElubmVySFRNTC4gQnkgZG9pbmcgaXQgdGhpcyB3YXkgdGhlCisgICAgLy8gZWxl
bWVudHMgbmVlZCB0byBiZSB3cmFwcGVkIG9uIGFjY2Vzcy4KKyAgICBET01UYWJsZV9lbGVtZW50
X2NvdW50ID0gMDsKKyAgICB2YXIgcm9vdF9lbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImJlbmNobWFya19jb250ZW50Iik7CisgICAgdmFyIHRhYmxlID0gRE9NVGFibGVfQ3JlYXRl
VGFibGVJSChET01UYWJsZV9tYXhSb3dzLCBET01UYWJsZV9tYXhDb2xzKjUpOworICAgIHJvb3Rf
ZWxlbWVudC5pbm5lckhUTUwgPSB0YWJsZTsKKyAgICByZXR1cm4gcm9vdF9lbGVtZW50OworfQor
CitmdW5jdGlvbiBET01UYWJsZVN1bV9CeUlkKGlnbm9yZSkgeworICAgIC8vIFN1bSBhbGwgZWxl
bWVudHMgaW4gdGhlIHRhYmxlIGJ5IGZpbmRpbmcgZWFjaCBlbGVtZW50IGJ5IGl0cyBpZC4KKyAg
ICB2YXIgc3VtID0gMDsKKyAgICB2YXIgbWF4Um93cyA9IERPTVRhYmxlX21heFJvd3M7CisgICAg
dmFyIG1heENvbHMgPSBET01UYWJsZV9tYXhDb2xzKjU7CisgICAgZm9yICh2YXIgciA9IDA7IHIg
PCBtYXhSb3dzOyByKyspIHsKKyAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBtYXhDb2xzOyBj
KyspIHsKKyAgICAgICAgICAgIHZhciBjZWxsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIiQi
K3IrIiQiK2MpOworICAgICAgICAgICAgc3VtICs9ICgrY2VsbC50ZXh0Q29udGVudCk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN1bTsKK30KKworZnVuY3Rpb24gRE9NVGFibGVTdW1f
QnlUYWdOYW1lKHJvb3RfZWxlbWVudCkgeworICAgIC8vIFN1bSBhbGwgZWxlbWVudHMgaW4gdGhl
IHRhYmxlIGJ5IGdldHRpbmcgYSBOb2RlTGlzdCBvZiBhbGwgInRkIiBlbGVtZW50cy4KKyAgICB2
YXIgc3VtID0gMDsKKyAgICB2YXIgbm9kZXMgPSByb290X2VsZW1lbnQuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoInRkIik7CisgICAgdmFyIGxlbmd0aCA9IG5vZGVzLmxlbmd0aDsKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIHZhciBjZWxsID0gbm9kZXNbaV07
CisgICAgICAgIHN1bSArPSAoK2NlbGwudGV4dENvbnRlbnQpOworICAgIH0KKyAgICByZXR1cm4g
c3VtOworfQorCit2YXIgRE9NVGFibGVUZXN0ID0gbmV3IEJlbmNobWFya1N1aXRlKCdET01UYWJs
ZScsIFsKKyAgICBuZXcgQmVuY2htYXJrKCJjcmVhdGUiLCBET01UYWJsZV9DcmVhdGUsIERPTVRh
YmxlX0NyZWF0ZVNldHVwKSwKKyAgICBuZXcgQmVuY2htYXJrKCJjcmVhdGUgYW5kIGxheW91dCIs
IERPTVRhYmxlX0NyZWF0ZUxheW91dCwgRE9NVGFibGVfQ3JlYXRlU2V0dXApLAorICAgIG5ldyBC
ZW5jaG1hcmsoImNyZWF0ZSB3aXRoIGlubmVySFRNTCIsIERPTVRhYmxlX0lubmVySFRNTCwgRE9N
VGFibGVfQ3JlYXRlU2V0dXApLAorICAgIG5ldyBCZW5jaG1hcmsoImNyZWF0ZSBhbmQgbGF5b3V0
IHdpdGggaW5uZXJIVE1MIiwgRE9NVGFibGVfSW5uZXJIVE1MTGF5b3V0LCBET01UYWJsZV9DcmVh
dGVTZXR1cCksCisgICAgbmV3IEJlbmNobWFyaygic3VtIGVsZW1lbnRzIGJ5IGlkIiwgRE9NVGFi
bGVTdW1fQnlJZCwgRE9NVGFibGVTdW1fU2V0dXApLAorICAgIG5ldyBCZW5jaG1hcmsoInN1bSBl
bGVtZW50cyBieSBpZCB3aXRoIGlubmVySFRNTCIsIERPTVRhYmxlU3VtX0J5SWQsIERPTVRhYmxl
U3VtX1NldHVwSUgpLAorICAgIG5ldyBCZW5jaG1hcmsoInN1bSBlbGVtZW50cyBieSB0YWduYW1l
IiwgRE9NVGFibGVTdW1fQnlUYWdOYW1lLCBET01UYWJsZVN1bV9TZXR1cCksCisgICAgbmV3IEJl
bmNobWFyaygic3VtIGVsZW1lbnRzIGJ5IHRhZ25hbWUgd2l0aCBpbm5lckhUTUwiLCBET01UYWJs
ZVN1bV9CeVRhZ05hbWUsIERPTVRhYmxlU3VtX1NldHVwSUgpCitdKTsKKwpJbmRleDogUGVyZm9y
bWFuY2VUZXN0cy9DaHJvbWl1bURPTVBlcmYvcmVzb3VyY2VzL2RvbS9kb213YWxrLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvQ2hyb21pdW1ET01QZXJmL3Jlc291cmNlcy9kb20v
ZG9td2Fsay5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvQ2hyb21pdW1ET01Q
ZXJmL3Jlc291cmNlcy9kb20vZG9td2Fsay5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBET01XYWxrIC0gYSBiZW5jaG1hcmsgZm9yIHdhbGtpbmcgdGhlIERPTQorLy8KKy8vIFRo
aXMgYmVuY2htYXJrIHRlc3RzIGRpZmZlcmVudCBtZWNoYW5pc21zIGZvciB0b3VjaGluZyBldmVy
eSBlbGVtZW50CisvLyBpbiBhIHNlY3Rpb24gb2YgdGhlIERPTS4gVGhlIGVsZW1lbnRzIGFyZSBj
cmVhdGVkIGZyb20gSmF2YVNjcmlwdCBjYXVzaW5nCisvLyB0aGVtIHRvIGJlIHByZS13cmFwcGVk
LgorLy8KKy8vIFRlc3RzIHNtYWxsIGl0ZXJhdGlvbnMgYW5kIGxhcmdlIGl0ZXJhdGlvbnMgdG8g
c2VlIGlmIHRoZXJlIGlzIGEgZGlmZmVyZW5jZS4KKworCisvLyBXZSB1c2UgdHdvIG1lY2hhbmlz
bXMgdG8gd2FsayB0aGUgRE9NLCBhbmQgdGhlbgorLy8gdmVyaWZ5IHRoYXQgYm90aCB5aWVsZCB0
aGUgc2FtZSByZXN1bHQuCit2YXIgX19udW1fbm9kZXMgPSAwOworCisvLyBXZSBjcmVhdGUgYSB0
YWJsZSB0byBpdGVyYXRlIGFzIHBhcnQgb2YgdGhpcyB0ZXN0LgorLy8gRm9yIG5vdyBpdCdzIGp1
c3QgYSBiaWcgdGFibGUgd2l0aCBsb3RzIG9mIGVsZW1lbnRzLgorZnVuY3Rpb24gRE9NV2Fsa19D
cmVhdGVUYWJsZShoZWlnaHQsIHdpZHRoKSB7CisgICAgdmFyIHRhYmxlID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImZha2VfZG9tIik7CisgICAgaWYgKHRhYmxlKSB7CisgICAgICAgIC8vIGNs
ZWFyIG91dCBleGlzdGluZyB0YWJsZQorICAgICAgICB3aGlsZSAodGFibGUucm93cy5sZW5ndGgg
PiAwKQorICAgICAgICAgICAgdGFibGUuZGVsZXRlUm93KDApOworICAgIH0gZWxzZSB7CisgICAg
ICAgIHZhciBkb2MgPSBkb2N1bWVudDsKKyAgICAgICAgdGFibGUgPSBkb2MuY3JlYXRlRWxlbWVu
dCgidGFibGUiKTsKKyAgICAgICAgdGFibGUuaWQgPSAiZmFrZV9kb20iOworICAgICAgICB0YWJs
ZS5ib3JkZXIgPSAxOworCisgICAgICAgIGZvciAodmFyIHJvdyA9IDA7IHJvdyA8IGhlaWdodDsg
cm93KyspIHsKKyAgICAgICAgICAgIHZhciByb3dfb2JqZWN0ID0gZG9jLmNyZWF0ZUVsZW1lbnQo
InRyIik7CisgICAgICAgICAgICBmb3IgKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCB3aWR0aDsg
Y29sdW1uKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgY29sX29iamVjdCA9IGRvYy5jcmVhdGVF
bGVtZW50KCJ0ZCIpOworICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUocm93LnRvU3RyaW5nKCkgKyAiLiIgKyBjb2x1bW4udG9TdHJpbmcoKSk7CisgICAg
ICAgICAgICAgICAgY29sX29iamVjdC5hcHBlbmRDaGlsZCh0ZXh0KTsKKyAgICAgICAgICAgICAg
ICByb3dfb2JqZWN0LmFwcGVuZENoaWxkKGNvbF9vYmplY3QpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQocm93X29iamVjdCk7CisgICAgICAgIH0KKyAgICAg
ICAgdmFyIGNvbnRlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYmVuY2htYXJrX2NvbnRl
bnQiKTsKKyAgICAgICAgY29udGVudC5hcHBlbmRDaGlsZCh0YWJsZSk7CisgICAgICAgIHZhciBo
dG1sID0gY29udGVudC5pbm5lckhUTUw7CisgICAgICAgIHZhciB3aWR0aCA9IGNvbnRlbnQuY2xp
ZW50V2lkdGg7CisgICAgfQorICAgIHJldHVybiB0YWJsZTsKK30KKworZnVuY3Rpb24gRE9NV2Fs
a19TZXR1cFNtYWxsKCkgeworICAgIC8vIENyZWF0ZXMgYSB0YWJsZSB3aXRoIDEwMCBub2Rlcy4K
KyAgICBET01XYWxrX0NyZWF0ZVRhYmxlKDEwLCAxMCk7Cit9CisKK2Z1bmN0aW9uIERPTVdhbGtf
U2V0dXBMYXJnZSgpIHsKKyAgICAvLyBDcmVhdGVzIGEgdGFibGUgd2l0aCA0MDAwIG5vZGVzLgor
ICAgIERPTVdhbGtfQ3JlYXRlVGFibGUoMjAwLCAyMDApOworfQorCisvLyBXYWxrcyB0aGUgRE9N
IHZpYSBnZXRFbGVtZW50c0J5VGFnTmFtZS4KK2Z1bmN0aW9uIERPTVdhbGtfQnlUYWdOYW1lKHRh
YmxlKSB7CisgICAgdmFyIGl0ZW1zID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTsK
KyAgICB2YXIgaXRlbTsKKyAgICB2YXIgbGVuZ3RoID0gaXRlbXMubGVuZ3RoOworICAgIGZvciAo
dmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspCisgICAgICAgIGl0ZW0gPSBp
dGVtc1tpbmRleF07CisKKyAgICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiBub2RlcyBzZWVuLgor
ICAgIHJldHVybiBpdGVtcy5sZW5ndGg7Cit9CisKK2Z1bmN0aW9uIERPTVdhbGtfQnlUYWdOYW1l
RHJpdmVyKGxvb3BzKSB7CisgICAgdmFyIHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImJlbmNobWFya19jb250ZW50Iik7CisgICAgZm9yICh2YXIgbG9vcCA9IDA7IGxvb3AgPCBsb29w
czsgbG9vcCsrKQorICAgICAgICBfX251bV9ub2RlcyA9IERPTVdhbGtfQnlUYWdOYW1lKHRhYmxl
KTsKK30KKworZnVuY3Rpb24gRE9NV2Fsa19CeVRhZ05hbWVTbWFsbCgpIHsKKyAgICAvLyBUaGlz
IHRlc3QgcnVucyBpbiBhIHNob3J0IHRpbWUuICBXZSBsb29wIGEgZmV3IHRpbWVzIGluIG9yZGVy
IHRvIGF2b2lkIHNtYWxsIHRpbWUgbWVhc3VyZW1lbnRzLgorICAgIERPTVdhbGtfQnlUYWdOYW1l
RHJpdmVyKDEwMDApOworfQorCitmdW5jdGlvbiBET01XYWxrX0J5VGFnTmFtZUxhcmdlKCkgewor
ICAgIERPTVdhbGtfQnlUYWdOYW1lRHJpdmVyKDEpOworfQorCitmdW5jdGlvbiBET01XYWxrX1Jl
Y3Vyc2l2ZShub2RlKSB7CisgICAgLy8gQ291bnQgRWxlbWVudCBOb2RlcyBvbmx5LgorICAgIC8v
IElFIGRvZXMgbm90IGRlZmluZSB0aGUgTm9kZSBjb25zdGFudHMuCisgICAgdmFyIGNvdW50ID0g
KG5vZGUubm9kZVR5cGUgPT0gLyogTm9kZS5FTEVNRU5UX05PREUgKi8gMSkgPyAxIDogMDsKKwor
ICAgIHZhciBjaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDsKKyAgICB3aGlsZSAoY2hpbGQgIT09IG51
bGwpIHsKKyAgICAgICAgY291bnQgKz0gRE9NV2Fsa19SZWN1cnNpdmUoY2hpbGQpOworICAgICAg
ICBjaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nOworICAgIH0KKworICAgIHJldHVybiBjb3VudDsK
K30KKworLy8gV2Fsa3MgdGhlIERPTSB2aWEgYSByZWN1cnNpdmUgd2FsaworZnVuY3Rpb24gRE9N
V2Fsa19SZWN1cnNpdmVEcml2ZXIobG9vcHMpIHsKKyAgICB2YXIgdGFibGUgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiYmVuY2htYXJrX2NvbnRlbnQiKTsKKyAgICBmb3IgKHZhciBsb29wID0g
MDsgbG9vcCA8IGxvb3BzOyBsb29wKyspIHsKKyAgICAgICAgdmFyIGNvdW50ID0gRE9NV2Fsa19S
ZWN1cnNpdmUodGFibGUpIC0gMTsgIC8vIGRvbid0IGNvdW50IHRoZSByb290IG5vZGUuCisgICAg
ICAgIGlmIChjb3VudCAhPSBfX251bV9ub2RlcyB8fCBjb3VudCA9PT0gMCkKKyAgICAgICAgICAg
IHRocm93ICJET01XYWxrIGZhaWxlZCEgIEV4cGVjdGVkICIgKyBfX251bV9ub2RlcyArICIgbm9k
ZXMgYnV0IGZvdW5kICIgKyBjb3VudCArICIuIjsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIERPTVdh
bGtfUmVjdXJzaXZlU21hbGwoKSB7CisgICAgLy8gVGhpcyB0ZXN0IHJ1bnMgaW4gYSBzaG9ydCB0
aW1lLiAgV2UgbG9vcCBhIGZldyB0aW1lcyBpbiBvcmRlciB0byBhdm9pZCBzbWFsbCB0aW1lIG1l
YXN1cmVtZW50cy4KKyAgICBET01XYWxrX1JlY3Vyc2l2ZURyaXZlcigyMDApOworfQorCitmdW5j
dGlvbiBET01XYWxrX1JlY3Vyc2l2ZUxhcmdlKCkgeworICAgIC8vIE9ubHkgaXRlcmF0ZSBvbmNl
IG92ZXIgdGhlIGxhcmdlIERPTSBzdHJ1Y3R1cmVzLgorICAgIERPTVdhbGtfUmVjdXJzaXZlRHJp
dmVyKDEpOworfQorCisKK3ZhciBET01XYWxrVGVzdCA9IG5ldyBCZW5jaG1hcmtTdWl0ZSgnRE9N
V2FsaycsIFsKKyAgICBuZXcgQmVuY2htYXJrKCJET01XYWxrQnlUYWcgKDEwMCBub2RlcykiLCBE
T01XYWxrX0J5VGFnTmFtZVNtYWxsLCBET01XYWxrX1NldHVwU21hbGwpLAorICAgIG5ldyBCZW5j
aG1hcmsoIkRPTVdhbGtSZWN1cnNpdmUgKDEwMCBub2RlcykiLCBET01XYWxrX1JlY3Vyc2l2ZVNt
YWxsLCBET01XYWxrX1NldHVwU21hbGwpLAorICAgIG5ldyBCZW5jaG1hcmsoIkRPTVdhbGtCeVRh
ZyAoNDAwMCBub2RlcykiLCBET01XYWxrX0J5VGFnTmFtZUxhcmdlLCBET01XYWxrX1NldHVwTGFy
Z2UpLAorICAgIG5ldyBCZW5jaG1hcmsoIkRPTVdhbGtSZWN1cnNpdmUgKDQwMDAgbm9kZXMpIiwg
RE9NV2Fsa19SZWN1cnNpdmVMYXJnZSwgRE9NV2Fsa19TZXR1cExhcmdlKQorXSk7CkluZGV4OiBQ
ZXJmb3JtYW5jZVRlc3RzL0Nocm9taXVtRE9NUGVyZi9yZXNvdXJjZXMvZG9tL2V2ZW50cy5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0Nocm9taXVtRE9NUGVyZi9yZXNvdXJjZXMv
ZG9tL2V2ZW50cy5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvQ2hyb21pdW1E
T01QZXJmL3Jlc291cmNlcy9kb20vZXZlbnRzLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIEV2ZW50cyB0ZXN0IC0gdGVzdCB0aGUgaG9va2luZyBhbmQgZGlzcGF0Y2ggb2YgZXZl
bnRzLgorLy8KKy8vIFRoaXMgaXMgYSBmYWlybHkgc2ltcGxlIHRlc3QgZm9yIG1lYXN1cmluZyBl
dmVudCBwZWZvcm1hbmNlLgorLy8gV2UgY3JlYXRlIGEgRE9NIHN0cnVjdHVyZSAoYSBzZXQgb2Yg
bmVzdGVkIGRpdnMpIHRvIHRlc3Qgd2l0aC4KKy8vCisvLyBUaGUgSG9va2luZyB0ZXN0IG1lYXN1
cmVzIHRoZSB0aW1lIHRvIHJlZ2lzdGVyIG9uY2xpY2sgaGFuZGxlcnMgZm9yCisvLyBlYWNoIG5v
ZGUgaW4gdGhlIHN0cnVjdHVyZS4gIFRoaXMgc2ltdWxhdGVzIGNvbmRpdGlvbnMgd2hlcmUgYXBw
bGljYXRpb25zCisvLyByZWdpc3RlciBldmVudCBoYW5kbGVycyBvbiBtYW55IG5vZGVzIHByb2dy
YW1hdGljYWxseS4KKy8vCisvLyBUaGUgRGlzcGF0Y2ggdGVzdCBtZWFzdXJlcyB0aGUgdGltZSB0
byBkaXNwYXRjaCBldmVudHMgdG8gZWFjaCBub2RlCisvLyBpbiB0aGUgc3RydWN0dXJlLiAgSW4g
dGhpcyBjYXNlLCB3ZSByZWdpc3RlciB0aGUgZXZlbnQgaGFuZGxlciBhcyBwYXJ0CisvLyBvZiB0
aGUgSFRNTCBmb3IgdGhlIHN0cnVjdHVyZSwgYW5kIHRoZW4gc2ltcGx5IHNpbXVsYXRlIG9uY2xp
Y2sgZXZlbnRzCisvLyB0byBlYWNoIG5vZGUuCisvLworLy8gV29ya3MgaW4gSUUsIEZGLCBTYWZh
cmksIGFuZCBDaHJvbWUuCisKK3ZhciBFdmVudHNfY291bnRlciA9IDA7CitmdW5jdGlvbiBFdmVu
dENsaWNrSGFuZGxlcigpIHsKKyAgICBFdmVudHNfY291bnRlcisrOworfQorCitmdW5jdGlvbiBF
dmVudHNUZXN0KHJvd3MsIGNvbHMpIHsKKyAgICB2YXIgbWUgPSB0aGlzOworICAgIHRoaXMucm93
cyA9IHJvd3M7CisgICAgdGhpcy5jb2xzID0gY29sczsKKyAgICB0aGlzLmNlbGxfY291bnQgPSAw
OyAvLyBUcmFjayB0aGUgbnVtYmVyIG9mIGNlbGxzIGNyZWF0ZWQgaW4gb3VyIGRvbSB0cmVlLgor
ICAgIHRoaXMucHJveGllcyA9IFtdOworICAgIHRoaXMucmFuZG9tX2lkcyA9IFtdOworCisgICAg
Ly8gQ3JlYXRlIGEgRE9NIHN0cnVjdHVyZSBhbmQgb3B0aW9uYWxseSByZWdpc3RlciBldmVudCBo
YW5kbGVycyBvbiBlYWNoIG5vZGUuCisgICAgLy8gQ3JlYXRlIHRoZSBzdHJ1Y3R1cmUgYnkgc2V0
dGluZyBpbm5lckhUTUwgc28gdGhhdCB0aGUgRE9NIG5vZGVzIGFyZSBub3QKKyAgICAvLyBwcmUt
d3JhcHBlZCBmb3IgSlMgYWNjZXNzLgorICAgIHRoaXMuQ3JlYXRlVGFibGUgPSBmdW5jdGlvbihh
ZGRfZXZlbnRfbGlzdGVuZXJzKSB7CisgICAgICAgIHZhciBodG1sX3N0cmluZyA9ICc8ZGl2Pic7
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWUucm93czsgaSsrKQorICAgICAgICAgICAg
aHRtbF9zdHJpbmcgKz0gbWUuQ3JlYXRlUm93KGksIG1lLmNvbHMsIGFkZF9ldmVudF9saXN0ZW5l
cnMpOworICAgICAgICByZXR1cm4gaHRtbF9zdHJpbmcgKyAnPC9kaXY+JzsKKyAgICB9OworCisg
ICAgLy8gUmV0dXJucyBhbiBodG1sIHN0cmluZyBmb3IgYSBkaXYgd2l0aCBhIHJvdy9jb2x1bW4g
YmFzZWQgaWQsIHdpdGggYW4gb3B0aW9uYWwgb25jbGljayBoYW5kbGVyLgorICAgIHRoaXMuQ3Jl
YXRlQ2VsbCA9IGZ1bmN0aW9uKHJvd19pZCwgY29sX2lkLCBhZGRfZXZlbnRfbGlzdGVuZXJzKSB7
CisgICAgICAgIHZhciBzdHIgPSAgJzxkaXYgaWQ9InInICsgcm93X2lkICsgJ2MnICsgY29sX2lk
ICsgJyInOworICAgICAgICBpZiAoYWRkX2V2ZW50X2xpc3RlbmVycykKKyAgICAgICAgICAgIHN0
ciArPSAnIG9uY2xpY2s9IkV2ZW50Q2xpY2tIYW5kbGVyKCk7Iic7CisgICAgICAgIHN0ciArPSAn
PicrIG1lLmNlbGxfY291bnQrKyArICc8L2Rpdj4nOworICAgICAgICByZXR1cm4gc3RyOworICAg
IH07CisKKyAgICAvLyBSZXR1cm5zIGFuIGh0bWwgc3RyaW5nIHdpdGggYW4gb3V0ZXIgZGl2IGNv
bnRhaW5pbmcgfGNvbHN8IGlubmVyIGRpdnMsCisgICAgLy8gb3B0aW9uYWxseSBoYXZpbmcgYW4g
b25jbGljayBoYW5kbGVyLgorICAgIHRoaXMuQ3JlYXRlUm93ID0gZnVuY3Rpb24ocm93X2lkLCBj
b2xzLCBhZGRfZXZlbnRfbGlzdGVuZXJzKSB7CisgICAgICAgIHZhciBodG1sX3N0cmluZyA9ICc8
ZGl2IGlkPSJyJyArIHJvd19pZCArICciPic7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
Y29sczsgaSsrKQorICAgICAgICAgICAgaHRtbF9zdHJpbmcgKz0gbWUuQ3JlYXRlQ2VsbChyb3df
aWQsIGksIGFkZF9ldmVudF9saXN0ZW5lcnMpOworICAgICAgICByZXR1cm4gaHRtbF9zdHJpbmcg
KyAnPC9kaXY+JzsKKyAgICB9OworCisgICAgLy8gUHJlcGFyZXMgZm9yIHRlc3Rpbmcgd2l0aCBl
bGVtZW50cyB0aGF0IGhhdmUgbm8gcHJlLWRlZmluZWQgb25jbGljaworICAgIC8vIGhhbmRsZXJz
LgorICAgIHRoaXMuU2V0dXAgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgbWUuY2VsbF9jb3VudCA9
IDA7CisgICAgICAgIEV2ZW50c19jb3VudGVyID0gMDsKKyAgICAgICAgdmFyIHJvb3RfZWxlbWVu
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJiZW5jaG1hcmtfY29udGVudCIpOworICAgICAg
ICByb290X2VsZW1lbnQuaW5uZXJIVE1MID0gbWUuQ3JlYXRlVGFibGUoZmFsc2UpOworICAgICAg
ICByZXR1cm4gcm9vdF9lbGVtZW50OworICAgIH07CisKKyAgICAvLyBTaW1pbGFyIHRvIFNldHVw
LCBidXQgd2l0aCBvbmNsaWNrIGhhbmRsZXJzIGFscmVhZHkgZGVmaW5lZCBpbiB0aGUgaHRtbC4K
KyAgICB0aGlzLlNldHVwV2l0aExpc3RlbmVycyA9IGZ1bmN0aW9uKCkgeworICAgICAgICBtZS5j
ZWxsX2NvdW50ID0gMDsKKyAgICAgICAgRXZlbnRzX2NvdW50ZXIgPSAwOworICAgICAgICB2YXIg
cm9vdF9lbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJlbmNobWFya19jb250ZW50
Iik7CisgICAgICAgIHJvb3RfZWxlbWVudC5pbm5lckhUTUwgPSBtZS5DcmVhdGVUYWJsZSh0cnVl
KTsKKyAgICAgICAgcmV0dXJuIHJvb3RfZWxlbWVudDsKKyAgICB9OworCisgICAgLy8gU2V0cyB1
cCBmb3IgdGVzdGluZyBwZXJmb3JtYW5jZSBvZiByZW1vdmluZyBldmVudCBoYW5kbGVycy4KKyAg
ICB0aGlzLlNldHVwRm9yVGVhcmRvd24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgbWUucmFuZG9t
X2lkcyA9IFtdOworICAgICAgICBtZS5TZXR1cFdpdGhMaXN0ZW5lcnMoKTsKKyAgICAgICAgdmFy
IHRtcCA9IFtdOworICAgICAgICBmb3IgKHZhciByb3cgPSAwOyByb3cgPCBtZS5yb3dzOyByb3cr
KykgeworICAgICAgICAgICAgZm9yICh2YXIgY29sID0gMDsgY29sIDwgbWUuY29sczsgY29sKysp
CisgICAgICAgICAgICAgICAgdG1wLnB1c2goInIiICsgcm93ICsgImMiICsgY29sKTsKKyAgICAg
ICAgfQorICAgICAgICB3aGlsZSAodG1wLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIHZhciBp
bmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHRtcC5sZW5ndGgpOworICAgICAgICAg
ICAgbWUucmFuZG9tX2lkcy5wdXNoKHRtcC5zcGxpY2UoaW5kZXgsIDEpKTsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICAvLyBUZXN0cyB0aGUgdGltZSBpdCB0YWtlcyB0byBnbyB0aHJvdWdoIGFu
ZCBob29rIGFsbCBlbGVtZW50cyBpbiBvdXIgZG9tLgorICAgIHRoaXMuSG9va1Rlc3QgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgdmFyIG5vZGVfY291bnQgPSAwOworCisgICAgICAgIHZhciByb3df
aWQgPSAwOworICAgICAgICB3aGlsZSh0cnVlKSB7CisgICAgICAgICAgICB2YXIgcm93ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3InICsgcm93X2lkKTsKKyAgICAgICAgICAgIGlmIChyb3cg
PT0gdW5kZWZpbmVkKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICB2YXIg
Y29sX2lkID0gMDsKKyAgICAgICAgICAgIHdoaWxlKHRydWUpIHsKKyAgICAgICAgICAgICAgICB2
YXIgY29sID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3InICsgcm93X2lkICsgJ2MnICsgY29s
X2lkKTsKKyAgICAgICAgICAgICAgICBpZiAoY29sID09IHVuZGVmaW5lZCkKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBpZiAoY29sLmFkZEV2ZW50TGlzdGVu
ZXIpCisgICAgICAgICAgICAgICAgICAgIGNvbC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIEV2
ZW50Q2xpY2tIYW5kbGVyLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoY29sLmF0
dGFjaEV2ZW50KQorICAgICAgICAgICAgICAgICAgICBjb2wuYXR0YWNoRXZlbnQoIm9uY2xpY2si
LCBFdmVudENsaWNrSGFuZGxlcik7IC8vIFRvIHN1cHBvcnQgSUUKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIHRocm93ICJGQUlMRUQgVE8gQVRUQUNIIEVWRU5UUyI7
CisgICAgICAgICAgICAgICAgY29sX2lkKys7CisgICAgICAgICAgICAgICAgbm9kZV9jb3VudCsr
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByb3dfaWQrKzsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChub2RlX2NvdW50ICE9IG1lLnJvd3MgKiBtZS5jb2xzKQorICAgICAgICAgICAg
dGhyb3cgIkVSUk9SIC0gZGlkIG5vdCBpdGVyYXRlIGFsbCBub2RlcyI7CisgICAgfTsKKworICAg
IC8vIFRlc3RzIHRoZSB0aW1lIGl0IHRha2VzIHRvIGdvIHRocm91Z2ggYW5kIGhvb2sgYWxsIGVs
ZW1lbnRzIGluIG91ciBkb20uCisgICAgLy8gQ3JlYXRlcyBuZXcgcHJveHkgb2JqZWN0IGZvciBl
YWNoIHJlZ2lzdHJhdGlvbgorICAgIHRoaXMuSG9va1Rlc3RQcm94eSA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICB2YXIgbm9kZV9jb3VudCA9IDA7CisKKyAgICAgICAgdmFyIHJvd19pZCA9IDA7Cisg
ICAgICAgIHdoaWxlKHRydWUpIHsKKyAgICAgICAgICAgIHZhciByb3cgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgncicgKyByb3dfaWQpOworICAgICAgICAgICAgaWYgKHJvdyA9PSB1bmRlZmlu
ZWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIHZhciBjb2xfaWQgPSAw
OworICAgICAgICAgICAgd2hpbGUodHJ1ZSkgeworICAgICAgICAgICAgICAgIHZhciBjb2wgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgncicgKyByb3dfaWQgKyAnYycgKyBjb2xfaWQpOworICAg
ICAgICAgICAgICAgIGlmIChjb2wgPT0gdW5kZWZpbmVkKQorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgICAgIHZhciBwcm94eSA9IGZ1bmN0aW9uKCkge307CisgICAg
ICAgICAgICAgICAgcHJveHkuY29sID0gY29sOworICAgICAgICAgICAgICAgIG1lLnByb3hpZXMu
cHVzaChwcm94eSk7CisgICAgICAgICAgICAgICAgaWYgKGNvbC5hZGRFdmVudExpc3RlbmVyKQor
ICAgICAgICAgICAgICAgICAgICBjb2wuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBwcm94eSwg
ZmFsc2UpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbC5hdHRhY2hFdmVudCkKKyAgICAg
ICAgICAgICAgICAgICAgY29sLmF0dGFjaEV2ZW50KCJvbmNsaWNrIiwgcHJveHkpOyAvLyBUbyBz
dXBwb3J0IElFCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB0aHJv
dyAiRkFJTEVEIFRPIEFUVEFDSCBFVkVOVFMiOworICAgICAgICAgICAgICAgIGNvbF9pZCsrOwor
ICAgICAgICAgICAgICAgIG5vZGVfY291bnQrKzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcm93X2lkKys7CisgICAgICAgIH0KKworICAgICAgICBpZiAobm9kZV9jb3VudCAhPSBtZS5y
b3dzICogbWUuY29scykKKyAgICAgICAgICAgIHRocm93ICJFUlJPUiAtIGRpZCBub3QgaXRlcmF0
ZSBhbGwgbm9kZXMiOworICAgIH07CisKKyAgICAvLyBUZXN0cyBmaXJpbmcgdGhlIGV2ZW50cyBm
b3IgZWFjaCBlbGVtZW50IGluIG91ciBkb20uCisgICAgdGhpcy5EaXNwYXRjaFRlc3QgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgdmFyIG5vZGVfY291bnQgPSAwOworCisgICAgICAgIHZhciByb3df
aWQgPSAwOworICAgICAgICB3aGlsZSh0cnVlKSB7CisgICAgICAgICAgICB2YXIgcm93ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3InICsgcm93X2lkKTsKKyAgICAgICAgICAgIGlmIChyb3cg
PT0gdW5kZWZpbmVkKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICB2YXIg
Y29sX2lkID0gMDsKKyAgICAgICAgICAgIHdoaWxlKHRydWUpIHsKKyAgICAgICAgICAgICAgICB2
YXIgY29sID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3InICsgcm93X2lkICsgJ2MnICsgY29s
X2lkKTsKKyAgICAgICAgICAgICAgICBpZiAoY29sID09IHVuZGVmaW5lZCkKKyAgICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmNyZWF0ZUV2ZW50
KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50
KCJNb3VzZUV2ZW50cyIpOworICAgICAgICAgICAgICAgICAgICBldmVudC5pbml0TW91c2VFdmVu
dCgiY2xpY2siLCB0cnVlLCB0cnVlLCB3aW5kb3csIDAsIDAsIDAsIDAsIDAsIGZhbHNlLCBmYWxz
ZSwgZmFsc2UsIGZhbHNlLCAwLCBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgY29sLmRpc3Bh
dGNoRXZlbnQoZXZlbnQpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sLmZpcmVFdmVu
dCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVu
dE9iamVjdCgpOworICAgICAgICAgICAgICAgICAgICBjb2wuZmlyZUV2ZW50KCJvbmNsaWNrIiwg
ZXZlbnQpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICB0aHJv
dyAiRkFJTEVEIFRPIEZJUkUgRVZFTlRTIjsKKworICAgICAgICAgICAgICAgIGNvbF9pZCsrOwor
ICAgICAgICAgICAgICAgIG5vZGVfY291bnQrKzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcm93X2lkKys7CisgICAgICAgIH0KKworICAgICAgICBpZiAoRXZlbnRzX2NvdW50ZXIgIT0g
bWUucm93cyAqIG1lLmNvbHMpCisgICAgICAgICAgICB0aHJvdyAiRVJST1IgLSBkaWQgbm90IGZp
cmUgZXZlbnRzIG9uIGFsbCBub2RlcyEiICsgRXZlbnRzX2NvdW50ZXI7CisgICAgfTsKKworICAg
IC8vIFRlc3RzIHJlbW92aW5nIGV2ZW50IGhhbmRsZXJzLgorICAgIHRoaXMuVGVhcmRvd25UZXN0
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBub2RlX2NvdW50ID0gMDsKKyAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBtZS5yYW5kb21faWRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAg
ICB2YXIgY29sID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobWUucmFuZG9tX2lkc1tpXSk7Cisg
ICAgICAgICAgICBpZiAoY29sLnJlbW92ZUV2ZW50TGlzdGVuZXIpCisgICAgICAgICAgICAgICAg
Y29sLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIiwgRXZlbnRDbGlja0hhbmRsZXIsIGZhbHNl
KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNvbC5kZXRhY2hFdmVudCkKKyAgICAgICAgICAgICAg
ICBjb2wuZGV0YWNoRXZlbnQoIm9uY2xpY2siLCBFdmVudENsaWNrSGFuZGxlcik7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGhyb3cgIkZBSUxFRCBUTyBGSVJFIEVWRU5UUyI7
CisgICAgICAgICAgICBub2RlX2NvdW50Kys7CisgICAgICAgIH0KKworICAgICAgICBpZiAobm9k
ZV9jb3VudCAhPSBtZS5yb3dzICogbWUuY29scykKKyAgICAgICAgICAgIHRocm93ICJFUlJPUiAt
IGRpZCBub3QgcmVtb3ZlIGxpc3RlbmVycyBmcm9tIGFsbCBub2RlcyEgIiArIG5vZGVfY291bnQ7
CisgICAgfTsKKworICAgIC8vIFJlbW92ZXMgZXZlbnQgaGFuZGxlcnMgYW5kIHRoZWlyIGFzc29j
aWF0ZWQgcHJveHkgb2JqZWN0cy4KKyAgICB0aGlzLlByb3h5Q2xlYW51cCA9IGZ1bmN0aW9uKCkg
eworICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IG1lLnByb3hpZXMubGVuZ3RoOyBpIDwgbjsg
aSsrKSB7CisgICAgICAgICAgICB2YXIgcHJveHkgPSBtZS5wcm94aWVzW2ldOworICAgICAgICAg
ICAgdmFyIGNvbCA9IHByb3h5LmNvbDsKKyAgICAgICAgICAgIGlmIChjb2wucmVtb3ZlRXZlbnRM
aXN0ZW5lcikKKyAgICAgICAgICAgICAgICBjb2wucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2si
LCBwcm94eSwgZmFsc2UpOworICAgICAgICAgICAgZWxzZSBpZiAoY29sLmRldGFjaEV2ZW50KQor
ICAgICAgICAgICAgICAgIGNvbC5kZXRhY2hFdmVudCgib25jbGljayIsIHByb3h5KTsgLy8gVG8g
c3VwcG9ydCBJRQorICAgICAgICB9CisgICAgICAgIG1lLnByb3hpZXMgPSBbXTsKKyAgICB9Owor
fQorCit2YXIgc21hbGxfdGVzdCA9IG5ldyBFdmVudHNUZXN0KDEwMCwgMTApOwordmFyIGxhcmdl
X3Rlc3QgPSBuZXcgRXZlbnRzVGVzdCgxMDAsIDUwKTsKK3ZhciBleHRyYV9sYXJnZV90ZXN0ID0g
bmV3IEV2ZW50c1Rlc3QoMjAwLCAyMCk7CisKK3ZhciBFdmVudFRlc3QgPSBuZXcgQmVuY2htYXJr
U3VpdGUoJ0V2ZW50cycsIFsKKyAgICBuZXcgQmVuY2htYXJrKCJFdmVudCBIb29raW5nICgxMDAw
IG5vZGVzKSIsIHNtYWxsX3Rlc3QuSG9va1Rlc3QsIHNtYWxsX3Rlc3QuU2V0dXApLAorICAgIG5l
dyBCZW5jaG1hcmsoIkV2ZW50IERpc3BhdGNoICgxMDAwIG5vZGVzKSIsIHNtYWxsX3Rlc3QuRGlz
cGF0Y2hUZXN0LCBzbWFsbF90ZXN0LlNldHVwV2l0aExpc3RlbmVycyksCisgICAgbmV3IEJlbmNo
bWFyaygiRXZlbnQgSG9va2luZyAoNTAwMCBub2RlcykiLCBsYXJnZV90ZXN0Lkhvb2tUZXN0LCBs
YXJnZV90ZXN0LlNldHVwKSwKKyAgICBuZXcgQmVuY2htYXJrKCJFdmVudCBIb29raW5nIFByb3h5
ICg0MDAwIG5vZGVzKSIsCisgICAgICAgIGV4dHJhX2xhcmdlX3Rlc3QuSG9va1Rlc3RQcm94eSwg
ZXh0cmFfbGFyZ2VfdGVzdC5TZXR1cCwgZXh0cmFfbGFyZ2VfdGVzdC5Qcm94eUNsZWFudXApLAor
ICAgIG5ldyBCZW5jaG1hcmsoIkV2ZW50IERpc3BhdGNoICg1MDAwIG5vZGVzKSIsIGxhcmdlX3Rl
c3QuRGlzcGF0Y2hUZXN0LCBsYXJnZV90ZXN0LlNldHVwV2l0aExpc3RlbmVycyksCisgICAgbmV3
IEJlbmNobWFyaygiRXZlbnQgVGVhcmRvd24gKDUwMDAgbm9kZXMpIiwgbGFyZ2VfdGVzdC5UZWFy
ZG93blRlc3QsIGxhcmdlX3Rlc3QuU2V0dXBGb3JUZWFyZG93biksCisgICAgbmV3IEJlbmNobWFy
aygiRXZlbnQgVGVhcmRvd24gKDQwMDAgbm9kZXMpIiwgZXh0cmFfbGFyZ2VfdGVzdC5UZWFyZG93
blRlc3QsIGV4dHJhX2xhcmdlX3Rlc3QuU2V0dXBGb3JUZWFyZG93bikKK10pOwpJbmRleDogUGVy
Zm9ybWFuY2VUZXN0cy9DaHJvbWl1bURPTVBlcmYvcmVzb3VyY2VzL2RvbS9nZXRlbGVtZW50Lmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvQ2hyb21pdW1ET01QZXJmL3Jlc291cmNl
cy9kb20vZ2V0ZWxlbWVudC5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvQ2hy
b21pdW1ET01QZXJmL3Jlc291cmNlcy9kb20vZ2V0ZWxlbWVudC5qcwkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwyMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBUZXN0cyBsb29raW5nIGZvciBpZHMgaW4gZGlmZmVyZW50IERPTSB0
cmVlcyBmdWxsIG9mIGRpdiBlbGVtZW50cy4KK2Z1bmN0aW9uIEdldEVsZW1lbnRUZXN0KHNpemUs
IGFwcGVuZFN0eWxlLCB0cmVlU3R5bGUpIHsKKyAgICB2YXIgbWUgPSB0aGlzOworICAgIHRoaXMu
c2l6ZSA9IHNpemU7CisgICAgdGhpcy5hcHBlbmRTdHlsZSA9IGFwcGVuZFN0eWxlOworICAgIHRo
aXMuaWRzID0gbnVsbDsKKyAgICB0aGlzLnRyZWVTdHlsZSA9IHRyZWVTdHlsZTsKKyAgICB0aGlz
Lm5hbWUgPSAodGhpcy5TaXplcy5sZW5ndGggPiAxID8gKG1lLnNpemUgKyAiLCAiKSA6ICIiKSAr
IG1lLmFwcGVuZFN0eWxlICsgIiwgIiArIG1lLnRyZWVTdHlsZTsKKworICAgIHRoaXMuc2V0dXBE
T00gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGRvbVRyZWUgPSBtZS5nZXRET01UcmVlKCku
Y2xvbmVOb2RlKHRydWUpOworICAgICAgICB0aGlzLnN1aXRlLmJlbmNobWFya0NvbnRlbnQuYXBw
ZW5kQ2hpbGQoZG9tVHJlZSk7CisgICAgICAgIG1lLm5vZGVzRm91bmQgPSAwOworICAgICAgICBt
ZS5pZHMgPSBtZS5nZXRJZHMoKTsKKyAgICAgICAgcmV0dXJuIGRvbVRyZWU7CisgICAgfTsKKwor
ICAgIHRoaXMuc2V0dXBIVE1MID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuc3VpdGUuYmVu
Y2htYXJrQ29udGVudC5pbm5lckhUTUwgPSBtZS5nZXRET01UcmVlKCkuaW5uZXJIVE1MOworICAg
ICAgICBtZS5ub2Rlc0ZvdW5kID0gMDsKKyAgICAgICAgbWUuaWRzID0gbWUuZ2V0SWRzKCk7Cisg
ICAgfTsKKworICAgIGlmICh0aGlzLmFwcGVuZFN0eWxlID09ICJET00iKQorICAgICAgICB0aGlz
LlNldHVwID0gdGhpcy5zZXR1cERPTTsKKyAgICBlbHNlCisgICAgICAgIHRoaXMuU2V0dXAgPSB0
aGlzLnNldHVwSFRNTDsKKworICAgIHRoaXMuVGVzdCA9IGZ1bmN0aW9uKGhhbmRsZSkgeworICAg
ICAgICB2YXIga0l0ZXJhdGlvbnMgPSAxOworICAgICAgICBmb3IgKHZhciBpdGVyYXRpb25zID0g
MDsgaXRlcmF0aW9ucyA8IGtJdGVyYXRpb25zOyBpdGVyYXRpb25zKyspIHsKKyAgICAgICAgICAg
IG1lLm5vZGVzRm91bmQgPSAwOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IG1l
Lmlkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgICAgICAgIHZhciBkaXYgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZChtZS5pZHNbaV0pOworICAgICAgICAgICAgICAgIHZhciBu
b2RlTmFtZSA9IGRpdi5ub2RlTmFtZTsKKyAgICAgICAgICAgICAgICBtZS5ub2Rlc0ZvdW5kKys7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGhpcy5DbGVhbnVwID0g
ZnVuY3Rpb24oaGFuZGxlKSB7CisgICAgICAgIHZhciBleHBlY3RlZENvdW50ID0gbWUuaWRzLmxl
bmd0aDsKKyAgICAgICAgaWYgKG1lLm5vZGVzRm91bmQgIT0gZXhwZWN0ZWRDb3VudCkKKyAgICAg
ICAgICAgIHRocm93ICJXcm9uZyBudW1iZXIgb2Ygbm9kZXMgZm91bmQ6ICIgKyBtZS5ub2Rlc0Zv
dW5kICsgIiBleHBlY3RlZDogIiArIGV4cGVjdGVkQ291bnQ7CisgICAgfTsKKworICAgIHRoaXMu
R2V0QmVuY2htYXJrID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBuZXcgQmVuY2htYXJr
KHRoaXMubmFtZSwgdGhpcy5UZXN0LCB0aGlzLlNldHVwLCB0aGlzLkNsZWFudXApOworICAgIH07
CisKKyAgICB0aGlzLmdldElkc0Zyb21UcmVlID0gZnVuY3Rpb24ocGFyZW50LCBtYXhOdW1iZXJP
Zk5vZGVzKSB7CisgICAgICAgIHZhciBhbGxEaXZzID0gcGFyZW50LmdldEVsZW1lbnRzQnlUYWdO
YW1lKCJkaXYiKTsKKyAgICAgICAgdmFyIGxlbiA9IGFsbERpdnMubGVuZ3RoOworICAgICAgICB2
YXIgc2tpcDsKKyAgICAgICAgaWYgKG1heE51bWJlck9mTm9kZXMgPj0gYWxsRGl2cy5sZW5ndGgp
CisgICAgICAgICAgICBza2lwID0gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2tpcCA9
IE1hdGguZmxvb3IoYWxsRGl2cy5sZW5ndGggLyBtYXhOdW1iZXJPZk5vZGVzKSAtIDE7CisgICAg
ICAgIHZhciBpZHMgPSBbXTsKKyAgICAgICAgdmFyIGwgPSAwOworICAgICAgICBmb3IgKHZhciBp
ID0gMCwgbGVuID0gYWxsRGl2cy5sZW5ndGg7IGkgPCBsZW4gJiYgbCA8IG1heE51bWJlck9mTm9k
ZXM7IGkgKz0gKHNraXAgKyAxKSkgeworICAgICAgICAgICAgdmFyIGRpdiA9IGFsbERpdnNbaV07
CisgICAgICAgICAgICBpZHMucHVzaChkaXYuaWQpOworICAgICAgICAgICAgbCsrOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBpZHM7CisgICAgfTsKKworICAgIHRoaXMuY3JlYXRlVHJlZUFu
ZElkcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgbWF4TnVtYmVyT2ZOb2RlcyA9IDIwMDAw
OworICAgICAgICB2YXIgZG9tVHJlZTsKKworICAgICAgICBpZiAobWUudHJlZVN0eWxlID09ICJk
dXBzIikgeworICAgICAgICAgICAgLy8gV2UgdXNlIGZvdXIgb2YgdGhlIHRyZWVzIGZvciB0aGUg
ZHVwcyBzdHlsZSwKKyAgICAgICAgICAgIC8vIHNvIHRoZXkgZ2V0IHRvbyBiaWcgaWYgeW91IHVz
ZSB0aGUgZnVsbCBzaXplIGZvciB0aGUgYmlnZ2VyIHRyZWVzCisgICAgICAgICAgICBzd2l0Y2gg
KG1lLnNpemUpIHsKKyAgICAgICAgICAgIGNhc2UgInNtYWxsIjoKKyAgICAgICAgICAgICAgICBk
b21UcmVlID0gQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLmdlbmVyYXRlU21hbGxUcmVlKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICJtZWRpdW0iOgorICAgICAg
ICAgICAgICAgIGRvbVRyZWUgPSBCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuZ2VuZXJhdGVET01U
cmVlKDE1LCAxMiwgNCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
ICJsYXJnZSI6CisgICAgICAgICAgICAgICAgZG9tVHJlZSA9IEJlbmNobWFya1N1aXRlLnByb3Rv
dHlwZS5nZW5lcmF0ZURPTVRyZWUoMjYsIDI2LCAxKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN3aXRjaCAobWUu
c2l6ZSkgeworICAgICAgICAgICAgY2FzZSAic21hbGwiOgorICAgICAgICAgICAgICAgIGRvbVRy
ZWUgPSBCZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuZ2VuZXJhdGVTbWFsbFRyZWUoKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgIm1lZGl1bSI6CisgICAgICAgICAg
ICAgICAgZG9tVHJlZSA9IEJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5nZW5lcmF0ZU1lZGl1bVRy
ZWUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgImxhcmdlIjoK
KyAgICAgICAgICAgICAgICBkb21UcmVlID0gQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLmdlbmVy
YXRlTGFyZ2VUcmVlKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICB2YXIgYWxsRGl2cyA9IGRvbVRyZWUuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoIioiKTsKKyAgICAgICAgdmFyIGxlbiA9IGFsbERpdnMubGVuZ3RoOworICAgICAgICB2
YXIgbW9kQnk7CisgICAgICAgIGlmIChtYXhOdW1iZXJPZk5vZGVzID49IGFsbERpdnMubGVuZ3Ro
KQorICAgICAgICAgICAgbW9kQnkgPSAxOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtb2RC
eSA9IE1hdGguZmxvb3IoYWxsRGl2cy5sZW5ndGggLyBtYXhOdW1iZXJPZk5vZGVzKTsKKyAgICAg
ICAgdmFyIGlkcyA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYWxsRGl2cy5s
ZW5ndGg7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgICAgdmFyIG1vZCA9IGkgJSBtb2RCeTsK
KyAgICAgICAgICAgIHZhciBkaXYgPSBhbGxEaXZzW2ldOworICAgICAgICAgICAgaWYgKG1vZCA9
PSAwICYmIGlkcy5sZW5ndGggPCBtYXhOdW1iZXJPZk5vZGVzKSB7CisgICAgICAgICAgICAgICAg
aWYgKGRpdi5pZCAmJiBkaXYuaWQgIT0gIiIpCisgICAgICAgICAgICAgICAgICAgIGlkcy5wdXNo
KGRpdi5pZCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1lLnRyZWVTdHlsZSA9PSAic3BhcnNl
IikKKyAgICAgICAgICAgICAgICBkaXYuaWQgPSBudWxsOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKG1lLnRyZWVTdHlsZSA9PSAiZHVwcyIpIHsKKyAgICAgICAgICAgIHZhciBuZXdSb290ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IDU7IGkrKykKKyAgICAgICAgICAgICAgICBuZXdSb290LmFwcGVuZENoaWxkKGRvbVRy
ZWUuY2xvbmVOb2RlKHRydWUpKTsKKyAgICAgICAgICAgIGRvbVRyZWUgPSBuZXdSb290OworICAg
ICAgICB9CisKKyAgICAgICAgdmFyIHRyZWVBbmRJZHMgPSB7CisgICAgICAgICAgICB0cmVlOiBk
b21UcmVlLAorICAgICAgICAgICAgaWRzOiBpZHMKKyAgICAgICAgfTsKKyAgICAgICAgcmV0dXJu
IHRyZWVBbmRJZHM7CisgICAgfTsKKworICAgIHRoaXMuZ2V0VHJlZUFuZElkcyA9IGZ1bmN0aW9u
KCkgeworICAgICAgICB2YXIgdHJlZUFuZElkc01hcCA9IG1lLlRyZWVBbmRJZHNbbWUuc2l6ZV07
CisgICAgICAgIGlmICghdHJlZUFuZElkc01hcCkgeworICAgICAgICAgICAgdHJlZUFuZElkc01h
cCA9IHt9OworICAgICAgICAgICAgbWUuVHJlZUFuZElkc1ttZS5zaXplXSA9IHRyZWVBbmRJZHNN
YXA7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHRyZWVBbmRJZHMgPSB0cmVlQW5kSWRzTWFwW21l
LnRyZWVTdHlsZV07CisgICAgICAgIGlmICghdHJlZUFuZElkcykgeworICAgICAgICAgICAgdHJl
ZUFuZElkcyA9IG1lLmNyZWF0ZVRyZWVBbmRJZHMoKTsKKyAgICAgICAgICAgIHRyZWVBbmRJZHNN
YXBbbWUudHJlZVN0eWxlXSA9IHRyZWVBbmRJZHM7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRyZWVBbmRJZHM7CisgICAgfTsKKworICAgIHRoaXMuZ2V0RE9NVHJlZSA9IGZ1bmN0aW9uKCkg
eworICAgICAgICB2YXIgdHJlZUFuZElkcyA9IG1lLmdldFRyZWVBbmRJZHMoKTsKKyAgICAgICAg
cmV0dXJuIHRyZWVBbmRJZHMudHJlZTsKKyAgICB9OworCisgICAgdGhpcy5nZXRJZHMgPSBmdW5j
dGlvbigpIHsKKyAgICAgICAgdmFyIHRyZWVBbmRJZHMgPSBtZS5nZXRUcmVlQW5kSWRzKCk7Cisg
ICAgICAgIHJldHVybiB0cmVlQW5kSWRzLmlkczsKKyAgICB9OworfQorCitHZXRFbGVtZW50VGVz
dC5wcm90b3R5cGUgPSB7CisgICAgLy8gRGlmZmVyZW50IHNpemVzIGFyZSBwb3NzaWJsZSwgYnV0
IHdlIHRyeSB0byBrZWVwIHRoZSBydW50aW1lIGFuZCBtZW1vcnkKKyAgICAvLyBjb25zdW1wdGlv
biByZWFzb25hYmxlLgorICAgIFNpemVzOiBbIm1lZGl1bSJdLAorICAgIFRyZWVTdHlsZXM6IFsi
c3BhcnNlIiwgImRlbnNlIiwgImR1cHMiXSwKKyAgICBUcmVlQW5kSWRzOiB7fSwKKyAgICBBcHBl
bmRTdHlsZXM6IFsiRE9NIiwgIkhUTUwiXQorfTsKKworLy8gR2VuZXJhdGUgdGhlIG1hdHJpeCBv
ZiBhbGwgYmVuY2htYXJrcwordmFyIGJlbmNobWFya3MgPSBbXTsKK0dldEVsZW1lbnRUZXN0LnBy
b3RvdHlwZS5TaXplcy5mb3JFYWNoKGZ1bmN0aW9uKHNpemUpIHsKKyAgICBHZXRFbGVtZW50VGVz
dC5wcm90b3R5cGUuQXBwZW5kU3R5bGVzLmZvckVhY2goZnVuY3Rpb24oYXBwZW5kU3R5bGUpIHsK
KyAgICAgICAgR2V0RWxlbWVudFRlc3QucHJvdG90eXBlLlRyZWVTdHlsZXMuZm9yRWFjaChmdW5j
dGlvbih0cmVlU3R5bGUpIHsKKyAgICAgICAgICAgIGJlbmNobWFya3MucHVzaChuZXcgR2V0RWxl
bWVudFRlc3Qoc2l6ZSwgYXBwZW5kU3R5bGUsIHRyZWVTdHlsZSkuR2V0QmVuY2htYXJrKCkpOwor
ICAgICAgICB9KTsKKyAgICB9KTsKK30pOworCit2YXIgR2V0RWxlbWVudFRlc3QgPSBuZXcgQmVu
Y2htYXJrU3VpdGUoIkdldCBFbGVtZW50cyIsIGJlbmNobWFya3MpOwpJbmRleDogUGVyZm9ybWFu
Y2VUZXN0cy9DaHJvbWl1bURPTVBlcmYvcmVzb3VyY2VzL2RvbS9ncmlkc29ydC5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0Nocm9taXVtRE9NUGVyZi9yZXNvdXJjZXMvZG9tL2dy
aWRzb3J0LmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9DaHJvbWl1bURPTVBl
cmYvcmVzb3VyY2VzL2RvbS9ncmlkc29ydC5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBHcmlkU29ydAorLy8KKy8vIFRoaXMgdGVzdCBpcyBkZXNpZ25lZCB0byB0ZXN0IHRoZSBw
ZXJmb3JtYW5jZSBvZiBzb3J0aW5nIGEgZ3JpZCBvZiBub2RlcworLy8gc3VjaCBhcyB3aGF0IHlv
dSBtaWdodCB1c2UgaW4gYSBzcHJlYWRzaGVldCBhcHBsaWNhdGlvbi4KKworLy8gcmV0dXJucyBh
biBhcnJheSBvZiBpbnRlZ2VycyBmcm9tIDAgdG8gdG90YWxDZWxscworZnVuY3Rpb24gZ2VuZXJh
dGVWYWx1ZXNBcnJheSh0b3RhbENlbGxzKSB7CisgICAgdmFyIHZhbHVlcyA9IFtdOworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgdG90YWxDZWxsczsgaSsrKQorICAgICAgICB2YWx1ZXNbaV0gPSBp
OworICAgIHJldHVybiB2YWx1ZXM7Cit9CisKKy8vIGNyZWF0ZXMgdmFsdWUgdGV4dCBub2RlcyBp
biBhIHRhYmxlIHVzaW5nIERPTSBtZXRob2RzCitmdW5jdGlvbiBwb3B1bGF0ZVRhYmxlVXNpbmdE
b20odGFibGVJZCwgd2lkdGgsIGhlaWdodCkgeworICAgIHZhciB0YWJsZSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKHRhYmxlSWQpOworICAgIHZhciB2YWx1ZXMgPSBnZW5lcmF0ZVZhbHVlc0Fy
cmF5KHdpZHRoICogaGVpZ2h0KTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGVpZ2h0OyBp
KyspIHsKKyAgICAgICAgdmFyIHJvdyA9IHRhYmxlLmluc2VydFJvdyhpKTsKKyAgICAgICAgZm9y
ICh2YXIgaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7CisgICAgICAgICAgICB2YXIgY2VsbCA9IHJv
dy5pbnNlcnRDZWxsKGopOworICAgICAgICAgICAgdmFyIHZhbHVlSW5kZXggPSBNYXRoLmZsb29y
KE1hdGgucmFuZG9tKCkgKiB2YWx1ZXMubGVuZ3RoKTsKKyAgICAgICAgICAgIHZhciB2YWx1ZSA9
IHZhbHVlcy5zcGxpY2UodmFsdWVJbmRleCwgMSk7CisgICAgICAgICAgICBjZWxsLmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHZhbHVlKSk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKKy8vIHJldHVybnMgSFRNTCBzdHJpbmcgZm9yIHJvd3MvY29sdW1ucyBvZiB0YWJsZSBkYXRh
CitmdW5jdGlvbiBnZXRUYWJsZUNvbnRlbnRIVE1MKHdpZHRoLCBoZWlnaHQpIHsKKyAgICB2YXIg
dmFsdWVzID0gZ2VuZXJhdGVWYWx1ZXNBcnJheSh3aWR0aCAqIGhlaWdodCk7CisKKyAgICB2YXIg
aHRtbCA9IFtdOyAvLyBmcmFnbWVudHMgd2Ugd2lsbCBqb2luIHRvZ2V0aGVyIGF0IHRoZSBlbmQK
KyAgICB2YXIgaHRtbEluZGV4ICA9IDA7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhlaWdo
dDsgaSsrKSB7CisgICAgICAgIGh0bWwucHVzaCgiPHRyPiIpOworICAgICAgICBmb3IgKHZhciBq
ID0gMDsgaiA8IHdpZHRoOyBqKyspIHsKKyAgICAgICAgICAgIGh0bWwucHVzaCgiPHRkPiIpOwor
ICAgICAgICAgICAgdmFyIHZhbHVlSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB2
YWx1ZXMubGVuZ3RoKTsKKyAgICAgICAgICAgIHZhciB2YWx1ZSA9IHZhbHVlcy5zcGxpY2UodmFs
dWVJbmRleCwgMSk7CisgICAgICAgICAgICBodG1sLnB1c2godmFsdWUpOworICAgICAgICAgICAg
aHRtbC5wdXNoKCI8L3RkPiIpOworICAgICAgICB9CisgICAgICAgIGh0bWwucHVzaCgiPC90cj4i
KTsKKyAgICB9CisgICAgcmV0dXJuIGh0bWwuam9pbigiIik7Cit9CisKKy8vIFdoZW4gc29ydGlu
ZyBhIHRhYmxlIGJ5IGEgY29sdW1uLCB3ZSBjcmVhdGUgb25lIG9mIHRoZXNlIGZvciBlYWNoCisv
LyBjZWxsIGluIHRoZSBjb2x1bW4sIGFuZCBpdCBrZWVwcyBwb2ludGVycyB0byBhbGwgdGhlIG5v
ZGVzIGluIHRoYXQKKy8vIHJvdy4gVGhpcyB3YXkgd2UgY2FuIHNvcnQgYW4gYXJyYXkgb2YgU29y
dEhlbHBlciBvYmplY3RzLCBhbmQgdGhlbgorLy8gdXNlIHRoZSBzaWJsaW5nIG5vZGUgcG9pbnRl
cnMgdG8gbW92ZSBhbGwgdmFsdWVzIGluIGEgcm93IHRvIHRoZWlyCisvLyBwcm9wZXIgcGxhY2Ug
YWNjb3JkaW5nIHRvIHRoZSBuZXcgc29ydCBvcmRlci4KK2Z1bmN0aW9uIFNvcnRIZWxwZXIocm93
LCBpbmRleCkgeworICAgIHRoaXMubm9kZXMgPSBbXTsKKyAgICB2YXIgbnVtQ2VsbHMgPSByb3cu
Y2VsbHMubGVuZ3RoOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtQ2VsbHM7IGkrKykKKyAg
ICAgICAgdGhpcy5ub2Rlc1tpXSA9IHJvdy5jZWxsc1tpXS5maXJzdENoaWxkOworICAgIHRoaXMu
b3JpZ2luYWxJbmRleCA9IGluZGV4OworfQorCitmdW5jdGlvbiBjb21wYXJlKGEsIGIpIHsKKyAg
ICByZXR1cm4gYSAtIGI7Cit9CisKKy8vIHNvcnRzIGFsbCByb3dzIG9mIHRoZSB0YWJsZSBvbiBh
IGdpdmVuIGNvbHVtbgorZnVuY3Rpb24gc29ydFRhYmxlT25Db2x1bW4odGFibGUsIGNvbHVtbklu
ZGV4KSB7CisgICAgdmFyIG51bVJvd3MgPSB0YWJsZS5yb3dzLmxlbmd0aDsKKyAgICB2YXIgc29y
dEhlbHBlcnMgPSBbXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bVJvd3M7IGkrKykKKyAg
ICAgICAgc29ydEhlbHBlcnMucHVzaChuZXcgU29ydEhlbHBlcih0YWJsZS5yb3dzW2ldLCBpKSk7
CisKKyAgICAvLyBzb3J0IGJ5IG5vZGVWYWx1ZSB3aXRoIG9yaWdpbmFsIHBvc2l0aW9uIGJyZWFr
aW5nIHRpZXMKKyAgICBzb3J0SGVscGVycy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsKKyAgICAgICAg
dmFyIGNtcCA9IGNvbXBhcmUoTnVtYmVyKGEubm9kZXNbY29sdW1uSW5kZXhdLm5vZGVWYWx1ZSks
IE51bWJlcihiLm5vZGVzW2NvbHVtbkluZGV4XS5ub2RlVmFsdWUpKTsKKyAgICAgICAgaWYgKGNt
cCA9PT0gMCkKKyAgICAgICAgICAgIHJldHVybiBjb21wYXJlKGEub3JpZ2luYWxJbmRleCwgYi5v
cmlnaW5hbEluZGV4KTsKKyAgICAgICAgcmV0dXJuIGNtcDsKKyAgICB9KTsKKworICAgIC8vIG5v
dyBwbGFjZSBhbGwgY2VsbHMgaW4gdGhlaXIgbmV3IHBvc2l0aW9uCisgICAgdmFyIG51bVNvcnRI
ZWxwZXJzID0gc29ydEhlbHBlcnMubGVuZ3RoOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVt
U29ydEhlbHBlcnM7IGkrKykgeworICAgICAgICB2YXIgaGVscGVyID0gc29ydEhlbHBlcnNbaV07
CisgICAgICAgIGlmIChpID09IGhlbHBlci5vcmlnaW5hbEluZGV4KQorICAgICAgICAgICAgY29u
dGludWU7IC8vIG5vIG5lZWQgdG8gbW92ZSB0aGlzIHJvdworICAgICAgICB2YXIgY29sdW1uQ291
bnQgPSB0YWJsZS5yb3dzW2ldLmNlbGxzLmxlbmd0aDsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7
IGogPCBjb2x1bW5Db3VudDsgaisrKSB7CisgICAgICAgICAgICB2YXIgY2VsbCA9IHRhYmxlLnJv
d3NbaV0uY2VsbHNbal07CisgICAgICAgICAgICBpZiAoY2VsbC5maXJzdENoaWxkKSB7CisgICAg
ICAgICAgICAgICAgLy8gYSBTb3J0SGVscGVyIHdpbGwgc3RpbGwgaGF2ZSBhIHJlZmVyZW5jZSB0
byB0aGlzIG5vZGUsIHNvIGl0CisgICAgICAgICAgICAgICAgLy8gd29uJ3QgZ2V0IG9ycGhhbmVk
L2dhcmJhZ2UgY29sbGVjdGVkCisgICAgICAgICAgICAgICAgY2VsbC5yZW1vdmVDaGlsZChjZWxs
LmZpcnN0Q2hpbGQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2VsbC5hcHBlbmRDaGls
ZChoZWxwZXIubm9kZXNbal0pOworICAgICAgICB9CisgICAgfQorfQorCitmdW5jdGlvbiBjbGVh
ckV4aXN0aW5nVGFibGUoKSB7CisgICAgdmFyIHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImdyaWRzb3J0X3RhYmxlIik7CisgICAgaWYgKHRhYmxlKSB7CisgICAgICAgIC8vIGNsZWFy
IG91dCBleGlzdGluZyB0YWJsZQorICAgICAgICB0YWJsZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxk
KHRhYmxlKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVRhYmxlVXNpbmdEb20oKSB7Cisg
ICAgY2xlYXJFeGlzdGluZ1RhYmxlKCk7CisgICAgdmFyIHRhYmxlID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgidGFibGUiKTsKKyAgICB0YWJsZS5pZCA9ICJncmlkc29ydF90YWJsZSI7CisgICAg
dGFibGUuYm9yZGVyID0gMTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYmVuY2htYXJr
X2NvbnRlbnQiKS5hcHBlbmRDaGlsZCh0YWJsZSk7CisgICAgcG9wdWxhdGVUYWJsZVVzaW5nRG9t
KCJncmlkc29ydF90YWJsZSIsIDYwLCA2MCk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVRhYmxlVXNp
bmdJbm5lckh0bWwoKSB7CisgICAgY2xlYXJFeGlzdGluZ1RhYmxlKCk7CisgICAgdmFyIHRhYmxl
Q29udGVudCA9IGdldFRhYmxlQ29udGVudEhUTUwoNjAsIDYwKTsKKyAgICB2YXIgaHRtbCA9ICI8
dGFibGUgaWQ9J2dyaWRzb3J0X3RhYmxlJyBib3JkZXI9JzEnPiIgKyB0YWJsZUNvbnRlbnQgKyAi
PC90YWJsZT4iOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJiZW5jaG1hcmtfY29udGVu
dCIpLmlubmVySFRNTCA9IGh0bWw7Cit9CisKK2Z1bmN0aW9uIHNvcnRUYWJsZSgpIHsKKyAgICB2
YXIgdGFibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3JpZHNvcnRfdGFibGUiKTsKKyAg
ICAvLyBUT0RPIC0gaXQgbWlnaHQgYmUgaW50ZXJlc3RpbmcgdG8gc29ydCBzZXZlcmFsIChvciBh
bGwpCisgICAgLy8gY29sdW1ucyBpbiBzdWNjZXNzaW9uLCBidXQgZm9yIG5vdyB0aGF0J3MgZmFp
cmx5IHNsb3cKKyAgICBzb3J0VGFibGVPbkNvbHVtbih0YWJsZSwgMCk7Cit9CisKK3ZhciBHcmlk
U29ydFRlc3QgPSBuZXcgQmVuY2htYXJrU3VpdGUoJ0dyaWRTb3J0JywgWworICAgIG5ldyBCZW5j
aG1hcmsoIlNvcnREb21UYWJsZSAoNjB4NjApIiwgc29ydFRhYmxlLCBjcmVhdGVUYWJsZVVzaW5n
RG9tLCBudWxsLCBmYWxzZSksCisgICAgbmV3IEJlbmNobWFyaygiU29ydElubmVySHRtbFRhYmxl
ICg2MHg2MCkiLCBzb3J0VGFibGUsIGNyZWF0ZVRhYmxlVXNpbmdJbm5lckh0bWwsIG51bGwsIGZh
bHNlKQorXSk7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0Nocm9taXVtRE9NUGVyZi9yZXNvdXJj
ZXMvZG9tL3N1aXRlcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0Nocm9taXVt
RE9NUGVyZi9yZXNvdXJjZXMvZG9tL3N1aXRlcy5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1h
bmNlVGVzdHMvQ2hyb21pdW1ET01QZXJmL3Jlc291cmNlcy9kb20vc3VpdGVzLmpzCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDEyIEBACit2YXIgc3VpdGVGaWxlcyA9IFsKKyAgICAiZG9tL2FjY2Vz
c29ycy5qcyIsIAorICAgICJkb20vY3JlYXRlbm9kZXMuanMiLAorICAgICJkb20vZG9tdGFibGUu
anMiLCAKKyAgICAiZG9tL2RvbXdhbGsuanMiLCAKKyAgICAiZG9tL2RvbWRpdndhbGsuanMiLCAK
KyAgICAiZG9tL2Nsb25lbm9kZXMuanMiLCAKKyAgICAiZG9tL2dldGVsZW1lbnQuanMiLCAKKyAg
ICAiZG9tL2V2ZW50cy5qcyIsIAorICAgICJkb20vZ3JpZHNvcnQuanMiLCAKKyAgICAiZG9tL3Rl
bXBsYXRlLmpzIgorXTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hyb21pdW1ET01QZXJmL3Jl
c291cmNlcy9kb20vdGVtcGxhdGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9D
aHJvbWl1bURPTVBlcmYvcmVzb3VyY2VzL2RvbS90ZW1wbGF0ZS5qcwkocmV2aXNpb24gMCkKKysr
IFBlcmZvcm1hbmNlVGVzdHMvQ2hyb21pdW1ET01QZXJmL3Jlc291cmNlcy9kb20vdGVtcGxhdGUu
anMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIFRlbXBsYXRlIFRlc3QKKy8vIFRo
aXMgdGVzdCB1c2VzIGEgc2ltcGxlIEpTIHRlbXBsYXRpbmcgc3lzdGVtIGZvciBpbmplY3Rpbmcg
SlNPTiBkYXRhIGludG8KKy8vIGFuIEhUTUwgcGFnZS4gIEl0IGlzIGRlc2lnbmVkIHRvIHVzZSB0
aGUga2luZCBvZiBET00gbWFuaXB1bGF0aW9uIGNvbW1vbgorLy8gaW4gdGVtcGxhdGluZyBzeXN0
ZW1zLgorLy8KKy8vIENvZGUgZnJvbSBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZ29vZ2xlLWpz
dGVtcGxhdGUvc291cmNlL2Jyb3dzZS90cnVuay9qc3RlbXBsYXRlLmpzCisKKy8vIFRoaXMgaXMg
dGhlIEhUTUwgY29kZSB0byB1c2UgaW4gdGhlIHRlbXBsYXRlIHRlc3QKK3ZhciBjb250ZW50ID0i
XAorPHN0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiPiBcCitib2R5IHtcCisgIGJvcmRlci10b3A6IDEw
cHggc29saWQgIzNCODVFMztcCisgIGNvbG9yOiAjMzMzO1wKKyAgZm9udC1mYW1pbHk6IFZlcmRh
bmEsQXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7XAorfVwKK2JvZHksIHRkIHtcCisgIGZvbnQt
c2l6ZTogMTFweDtcCit9XAorYTpsaW5rLCBhOnZpc2l0ZWQge1wKKyAgY29sb3I6ICMyQzNFQkE7
XAorICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XAorfVwKK2E6aG92ZXIge1wKKyAgY29sb3I6IHJl
ZDtcCisgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1wKK31cCitoMSB7XAorICBib3JkZXIt
bGVmdDogMTBweCBzb2xpZCAjRkZGO1wKKyAgZm9udC1zaXplOiAxNnB4O1wKKyAgZm9udC13ZWln
aHQ6IGJvbGQ7XAorICBtYXJnaW46IDA7XAorICBwYWRkaW5nOiAwLjJlbTtcCisgIGNvbG9yOiAj
M0I4NUUzO1wKK31cCitoMiB7XAorICBib3JkZXItbGVmdDogMTBweCBzb2xpZCAjRkZGO1wKKyAg
Zm9udC1zaXplOiAxMXB4O1wKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcCisgIG1hcmdpbjogMDtc
CisgIHBhZGRpbmc6IDAgNmVtIDAuMmVtIDAuMmVtO1wKK31cCisuZGV0YWlscyB7XAorICBtYXJn
aW46IDAuNGVtIDEuOWVtIDAgMS4yZW07XAorICBwYWRkaW5nOiAwIDAuNGVtIDAuM2VtIDA7XAor
ICB3aGl0ZS1zcGFjZTogbm93cmFwO1wKK31cCisuZGV0YWlscyAub3V0ZXIge1wKKyAgcGFkZGlu
Zy1yaWdodDogMDtcCisgIHZlcnRpY2FsLWFsaWduOiB0b3A7XAorfVwKKy5kZXRhaWxzIC50b3Ag
e1wKKyAgYm9yZGVyLXRvcDogMnB4IHNvbGlkICMzMzM7XAorICBmb250LXdlaWdodDogYm9sZDtc
CisgIG1hcmdpbi10b3A6IDAuNGVtO1wKK31cCisuZGV0YWlscyAuaGVhZGVyMiB7XAorICBmb250
LXdlaWdodDogYm9sZDtcCisgIHBhZGRpbmctbGVmdDogMC45ZW07XAorfVwKKy5kZXRhaWxzIC5r
ZXkge1wKKyAgcGFkZGluZy1sZWZ0OiAxLjFlbTtcCisgIHZlcnRpY2FsLWFsaWduOiB0b3A7XAor
fVwKKy5kZXRhaWxzIC52YWx1ZSB7XAorICB0ZXh0LWFsaWduOiByaWdodDtcCisgIGNvbG9yOiAj
MzMzO1wKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7XAorfVwKKy5kZXRhaWxzIC56ZWJyYSB7XAorICBi
YWNrZ3JvdW5kOiAjRUVFO1wKK31cCisubG93ZXIge1wKKyAgdGV4dC10cmFuc2Zvcm06IGxvd2Vy
Y2FzZTtcCit9XAorPC9zdHlsZT4gXAorICA8aDEgY2xhc3M9XCJsb3dlclwiPkFib3V0IFN0YXRz
PC9oMT4gXAorICA8dGFibGUgY2xhc3M9XCJkZXRhaWxzXCIgY2VsbHNwYWNpbmc9XCIwXCIgY2Vs
bHBhZGRpbmc9XCIwXCIgYm9yZGVyPVwiMFwiPiBcCisgICAgPHRib2R5PiBcCisgICAgICA8dHI+
IFwKKyAgICAgICAgPHRkIGNsYXNzPVwib3V0ZXJcIj4gXAorICAgICAgICAgIDx0YWJsZSBjZWxs
c3BhY2luZz1cIjBcIiBjZWxscGFkZGluZz1cIjBcIiBib3JkZXI9XCIwXCI+IFwKKyAgICAgICAg
ICAgIDx0Ym9keT4gXAorICAgICAgICAgICAgICA8dHI+IFwKKyAgICAgICAgICAgICAgICA8dGQg
Y2xhc3M9XCJ0b3BcIiB3aWR0aD1cIjEwMFwiPkNvdW50ZXJzPC90ZD4gXAorICAgICAgICAgICAg
ICAgIDx0ZCBjbGFzcz1cInRvcCB2YWx1ZVwiIGNvbHNwYW49Mj48L3RkPiBcCisgICAgICAgICAg
ICAgIDwvdHI+IFwKKyAgICAgICAgICAgICAgPHRyPiBcCisgICAgICAgICAgICAgICAgPHRkIGNs
YXNzPVwiaGVhZGVyMiBsb3dlclwiIHdpZHRoPVwiMjAwXCI+bmFtZTwvdGQ+IFwKKyAgICAgICAg
ICAgICAgICA8dGQgY2xhc3M9XCJoZWFkZXIyIGxvd2VyXCI+dmFsdWU8L3RkPiBcCisgICAgICAg
ICAgICAgICAgPHRkIGNsYXNzPVwiaGVhZGVyMiBsb3dlclwiPmRlbHRhPC90ZD4gXAorICAgICAg
ICAgICAgICA8L3RyPiBcCisgICAgICAgICAgICAgIDx0ciBqc3NlbGVjdD1cImNvdW50ZXJzXCIg
bmFtZT1cImNvdW50ZXJcIj4gXAorICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImtleVwiIHdp
ZHRoPVwiMjAwXCIganNjb250ZW50PVwibmFtZVwiPjwvdGQ+IFwKKyAgICAgICAgICAgICAgICA8
dGQgY2xhc3M9XCJ2YWx1ZVwiIGpzY29udGVudD1cInZhbHVlXCI+PC90ZD4gXAorICAgICAgICAg
ICAgICAgIDx0ZCBjbGFzcz1cInZhbHVlXCIganNjb250ZW50PVwiZGVsdGFcIj48L3RkPiBcCisg
ICAgICAgICAgICAgIDwvdHI+IFwKKyAgICAgICAgICAgIDwvdGJvZHk+IFwKKyAgICAgICAgICA8
L3RhYmxlPiBcCisgICAgICAgIDwvdGQ+IFwKKyAgICAgICAgPHRkIHdpZHRoPVwiMTVcIi8+IFwK
KyAgICAgICAgPHRkIGNsYXNzPVwib3V0ZXJcIj4gXAorICAgICAgICAgIDx0YWJsZSBjZWxsc3Bh
Y2luZz1cIjBcIiBjZWxscGFkZGluZz1cIjBcIiBib3JkZXI9XCIwXCI+IFwKKyAgICAgICAgICAg
IDx0Ym9keT4gXAorICAgICAgICAgICAgICA8dHI+IFwKKyAgICAgICAgICAgICAgICA8dGQgY2xh
c3M9XCJ0b3BcIiB3aWR0aD1cIjEwMFwiPlRpbWVyczwvdGQ+IFwKKyAgICAgICAgICAgICAgICA8
dGQgY2xhc3M9XCJ0b3AgdmFsdWVcIj48L3RkPiBcCisgICAgICAgICAgICAgICAgPHRkIGNsYXNz
PVwidG9wIHZhbHVlXCIgY29sc3Bhbj0zPjwvdGQ+IFwKKyAgICAgICAgICAgICAgPC90cj4gXAor
ICAgICAgICAgICAgICA8dHI+IFwKKyAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJoZWFkZXIy
IGxvd2VyXCIgd2lkdGg9XCIyMDBcIj5uYW1lPC90ZD4gXAorICAgICAgICAgICAgICAgIDx0ZCBj
bGFzcz1cImhlYWRlcjIgbG93ZXJcIj5jb3VudDwvdGQ+IFwKKyAgICAgICAgICAgICAgICA8dGQg
Y2xhc3M9XCJoZWFkZXIyIGxvd2VyXCI+dGltZSAobXMpPC90ZD4gXAorICAgICAgICAgICAgICAg
IDx0ZCBjbGFzcz1cImhlYWRlcjIgbG93ZXJcIj5hdmcgdGltZSAobXMpPC90ZD4gXAorICAgICAg
ICAgICAgICA8L3RyPiBcCisgICAgICAgICAgICAgIDx0ciBqc3NlbGVjdD1cInRpbWVyc1wiIG5h
bWU9XCJ0aW1lclwiPiBcCisgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwia2V5XCIgd2lkdGg9
XCIyMDBcIiBqc2NvbnRlbnQ9XCJuYW1lXCI+PC90ZD4gXAorICAgICAgICAgICAgICAgIDx0ZCBj
bGFzcz1cInZhbHVlXCIganNjb250ZW50PVwidmFsdWVcIj48L3RkPiBcCisgICAgICAgICAgICAg
ICAgPHRkIGNsYXNzPVwidmFsdWVcIiBqc2NvbnRlbnQ9XCJ0aW1lXCI+PC90ZD4gXAorICAgICAg
ICAgICAgICAgIDx0ZCBjbGFzcz1cInZhbHVlXCI+PC90ZD4gXAorICAgICAgICAgICAgICA8L3Ry
PiBcCisgICAgICAgICAgICA8L3Rib2R5PiBcCisgICAgICAgICAgPC90YWJsZT4gXAorICAgICAg
ICA8L3RkPiBcCisgICAgICA8L3RyPiBcCisgICAgPC90Ym9keT4gXAorICA8L3RhYmxlPjxici8+
IFwKKzwvYm9keT4gXAorPC9odG1sPiBcCisiOworCisvLyBHZW5lcmljIFRlbXBsYXRlIExpYnJh
cnkKKworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFRoaXMgZmlsZSBjb250YWlucyBtaXNjZWxsYW5l
b3VzIGJhc2ljIGZ1bmN0aW9uYWxpdHkuCisgKgorICovCisKKy8qKgorICogUmV0dXJucyB0aGUg
ZG9jdW1lbnQgb3duZXIgb2YgdGhlIGdpdmVuIGVsZW1lbnQuIEluIHBhcnRpY3VsYXIsCisgKiBy
ZXR1cm5zIHdpbmRvdy5kb2N1bWVudCBpZiBub2RlIGlzIG51bGwgb3IgdGhlIGJyb3dzZXIgZG9l
cyBub3QKKyAqIHN1cHBvcnQgb3duZXJEb2N1bWVudC4KKyAqCisgKiBAcGFyYW0ge05vZGV9IG5v
ZGUgIFRoZSBub2RlIHdob3NlIG93bmVyRG9jdW1lbnQgaXMgcmVxdWlyZWQuCisgKiBAcmV0dXJu
cyB7RG9jdW1lbnR8TnVsbH0gIFRoZSBvd25lciBkb2N1bWVudCBvciBudWxsIGlmIHVuc3VwcG9y
dGVkLgorICovCitmdW5jdGlvbiBUZW1wbGF0ZV9vd25lckRvY3VtZW50KG5vZGUpIHsKKyAgICBy
ZXR1cm4gKG5vZGUgPyBub2RlLm93bmVyRG9jdW1lbnQgOiBudWxsKSB8fCBkb2N1bWVudDsKK30K
KworLyoqCisgKiBXcmFwcGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBDU1MgdW5pdHMgKHBpeGVscykg
c3RyaW5nCisgKgorICogQHBhcmFtIHtOdW1iZXJ9IG51bVBpeGVscyAgTnVtYmVyIG9mIHBpeGVs
cywgbWF5IGJlIGZsb2F0aW5nIHBvaW50LgorICogQHJldHVybnMge1N0cmluZ30gIENvcnJlc3Bv
bmRpbmcgQ1NTIHVuaXRzIHN0cmluZy4KKyAqLworZnVuY3Rpb24gVGVtcGxhdGVfcHgobnVtUGl4
ZWxzKSB7CisgICAgcmV0dXJuIHJvdW5kKG51bVBpeGVscykgKyAicHgiOworfQorCisvKioKKyAq
IFNldHMgZGlzcGxheSB0byBub25lLiBEb2luZyB0aGlzIGFzIGEgZnVuY3Rpb24gc2F2ZXMgYSBm
ZXcgYnl0ZXMgZm9yCisgKiB0aGUgJ3N0eWxlLmRpc3BsYXknIHByb3BlcnR5IGFuZCB0aGUgJ25v
bmUnIGxpdGVyYWwuCisgKgorICogQHBhcmFtIHtFbGVtZW50fSBub2RlICBUaGUgZG9tIGVsZW1l
bnQgdG8gbWFuaXB1bGF0ZS4KKyAqLworZnVuY3Rpb24gVGVtcGxhdGVfZGlzcGxheU5vbmUobm9k
ZSkgeworICAgIG5vZGUuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKK30KKworLyoqCisgKiBTZXRz
IGRpc3BsYXkgdG8gZGVmYXVsdC4KKyAqCisgKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGUgIFRoZSBk
b20gZWxlbWVudCB0byBtYW5pcHVsYXRlLgorICovCitmdW5jdGlvbiBUZW1wbGF0ZV9kaXNwbGF5
RGVmYXVsdChub2RlKSB7CisgICAgbm9kZS5zdHlsZS5kaXNwbGF5ID0gJyc7Cit9CisKK3ZhciBE
T01fRUxFTUVOVF9OT0RFID0gMTsKK3ZhciBET01fQVRUUklCVVRFX05PREUgPSAyOwordmFyIERP
TV9URVhUX05PREUgPSAzOwordmFyIERPTV9DREFUQV9TRUNUSU9OX05PREUgPSA0OwordmFyIERP
TV9FTlRJVFlfUkVGRVJFTkNFX05PREUgPSA1OwordmFyIERPTV9FTlRJVFlfTk9ERSA9IDY7Cit2
YXIgRE9NX1BST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSA9IDc7Cit2YXIgRE9NX0NPTU1FTlRf
Tk9ERSA9IDg7Cit2YXIgRE9NX0RPQ1VNRU5UX05PREUgPSA5OwordmFyIERPTV9ET0NVTUVOVF9U
WVBFX05PREUgPSAxMDsKK3ZhciBET01fRE9DVU1FTlRfRlJBR01FTlRfTk9ERSA9IDExOwordmFy
IERPTV9OT1RBVElPTl9OT0RFID0gMTI7CisKKy8qKgorICogR2V0IGFuIGF0dHJpYnV0ZSBmcm9t
IHRoZSBET00uICBTaW1wbGUgcmVkaXJlY3QsIGV4aXN0cyB0byBjb21wcmVzcyBjb2RlLgorICoK
KyAqIEBwYXJhbSB7RWxlbWVudH0gbm9kZSAgRWxlbWVudCB0byBpbnRlcnJvZ2F0ZS4KKyAqIEBw
YXJhbSB7U3RyaW5nfSBuYW1lICBOYW1lIG9mIHBhcmFtZXRlciB0byBleHRyYWN0LgorICogQHJl
dHVybiB7U3RyaW5nfSAgUmVzdWx0aW5nIGF0dHJpYnV0ZS4KKyAqLworZnVuY3Rpb24gVGVtcGxh
dGVfZG9tR2V0QXR0cmlidXRlKG5vZGUsIG5hbWUpIHsKKyAgICByZXR1cm4gbm9kZS5nZXRBdHRy
aWJ1dGUobmFtZSk7Cit9CisKKy8qKgorICogU2V0IGFuIGF0dHJpYnV0ZSBpbiB0aGUgRE9NLiAg
U2ltcGxlIHJlZGlyZWN0IHRvIGNvbXByZXNzIGNvZGUuCisgKgorICogQHBhcmFtIHtFbGVtZW50
fSBub2RlICBFbGVtZW50IHRvIGludGVycm9nYXRlLgorICogQHBhcmFtIHtTdHJpbmd9IG5hbWUg
IE5hbWUgb2YgcGFyYW1ldGVyIHRvIHNldC4KKyAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZSAgU2V0
IGF0dHJpYnV0ZSB0byB0aGlzIHZhbHVlLgorICovCitmdW5jdGlvbiBUZW1wbGF0ZV9kb21TZXRB
dHRyaWJ1dGUobm9kZSwgbmFtZSwgdmFsdWUpIHsKKyAgICBub2RlLnNldEF0dHJpYnV0ZShuYW1l
LCB2YWx1ZSk7Cit9CisKKy8qKgorICogUmVtb3ZlIGFuIGF0dHJpYnV0ZSBmcm9tIHRoZSBET00u
ICBTaW1wbGUgcmVkaXJlY3QgdG8gY29tcHJlc3MgY29kZS4KKyAqCisgKiBAcGFyYW0ge0VsZW1l
bnR9IG5vZGUgIEVsZW1lbnQgdG8gaW50ZXJyb2dhdGUuCisgKiBAcGFyYW0ge1N0cmluZ30gbmFt
ZSAgTmFtZSBvZiBwYXJhbWV0ZXIgdG8gcmVtb3ZlLgorICovCitmdW5jdGlvbiBUZW1wbGF0ZV9k
b21SZW1vdmVBdHRyaWJ1dGUobm9kZSwgbmFtZSkgeworICAgIG5vZGUucmVtb3ZlQXR0cmlidXRl
KG5hbWUpOworfQorCisvKioKKyAqIENsb25lIGEgbm9kZSBpbiB0aGUgRE9NLgorICoKKyAqIEBw
YXJhbSB7Tm9kZX0gbm9kZSAgTm9kZSB0byBjbG9uZS4KKyAqIEByZXR1cm4ge05vZGV9ICBDbG9u
ZWQgbm9kZS4KKyAqLworZnVuY3Rpb24gVGVtcGxhdGVfZG9tQ2xvbmVOb2RlKG5vZGUpIHsKKyAg
ICByZXR1cm4gbm9kZS5jbG9uZU5vZGUodHJ1ZSk7Cit9CisKKy8qKgorICogUmV0dXJuIGEgc2Fm
ZSBzdHJpbmcgZm9yIHRoZSBjbGFzc05hbWUgb2YgYSBub2RlLgorICogSWYgY2xhc3NOYW1lIGlz
IG5vdCBhIHN0cmluZywgcmV0dXJucyAiIi4KKyAqCisgKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGUg
IERPTSBlbGVtZW50IHRvIHF1ZXJ5LgorICogQHJldHVybiB7U3RyaW5nfQorICovCitmdW5jdGlv
biBUZW1wbGF0ZV9kb21DbGFzc05hbWUobm9kZSkgeworICAgIHJldHVybiBub2RlLmNsYXNzTmFt
ZSA/ICIiICsgbm9kZS5jbGFzc05hbWUgOiAiIjsKK30KKworLyoqCisgKiBJbnNlcnRzIGEgbmV3
IGNoaWxkIGJlZm9yZSBhIGdpdmVuIHNpYmxpbmcuCisgKgorICogQHBhcmFtIHtOb2RlfSBuZXdD
aGlsZCAgTm9kZSB0byBpbnNlcnQuCisgKiBAcGFyYW0ge05vZGV9IG9sZENoaWxkICBTaWJsaW5n
IG5vZGUuCisgKiBAcmV0dXJuIHtOb2RlfSAgUmVmZXJlbmNlIHRvIG5ldyBjaGlsZC4KKyAqLwor
ZnVuY3Rpb24gVGVtcGxhdGVfZG9tSW5zZXJ0QmVmb3JlKG5ld0NoaWxkLCBvbGRDaGlsZCkgewor
ICAgIHJldHVybiBvbGRDaGlsZC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShuZXdDaGlsZCwgb2xk
Q2hpbGQpOworfQorCisvKioKKyAqIEFwcGVuZHMgYSBuZXcgY2hpbGQgdG8gdGhlIHNwZWNpZmll
ZCAocGFyZW50KSBub2RlLgorICoKKyAqIEBwYXJhbSB7RWxlbWVudH0gbm9kZSAgUGFyZW50IGVs
ZW1lbnQuCisgKiBAcGFyYW0ge05vZGV9IGNoaWxkICBDaGlsZCBub2RlIHRvIGFwcGVuZC4KKyAq
IEByZXR1cm4ge05vZGV9ICBOZXdseSBhcHBlbmRlZCBub2RlLgorICovCitmdW5jdGlvbiBUZW1w
bGF0ZV9kb21BcHBlbmRDaGlsZChub2RlLCBjaGlsZCkgeworICAgIHJldHVybiBub2RlLmFwcGVu
ZENoaWxkKGNoaWxkKTsKK30KKworLyoqCisgKiBSZW1vdmUgYSBuZXcgY2hpbGQgZnJvbSB0aGUg
c3BlY2lmaWVkIChwYXJlbnQpIG5vZGUuCisgKgorICogQHBhcmFtIHtFbGVtZW50fSBub2RlICBQ
YXJlbnQgZWxlbWVudC4KKyAqIEBwYXJhbSB7Tm9kZX0gY2hpbGQgIENoaWxkIG5vZGUgdG8gcmVt
b3ZlLgorICogQHJldHVybiB7Tm9kZX0gIFJlbW92ZWQgbm9kZS4KKyAqLworZnVuY3Rpb24gVGVt
cGxhdGVfZG9tUmVtb3ZlQ2hpbGQobm9kZSwgY2hpbGQpIHsKKyAgICByZXR1cm4gbm9kZS5yZW1v
dmVDaGlsZChjaGlsZCk7Cit9CisKKy8qKgorICogUmVwbGFjZXMgYW4gb2xkIGNoaWxkIG5vZGUg
d2l0aCBhIG5ldyBjaGlsZCBub2RlLgorICoKKyAqIEBwYXJhbSB7Tm9kZX0gbmV3Q2hpbGQgIE5l
dyBjaGlsZCB0byBhcHBlbmQuCisgKiBAcGFyYW0ge05vZGV9IG9sZENoaWxkICBPbGQgY2hpbGQg
dG8gcmVtb3ZlLgorICogQHJldHVybiB7Tm9kZX0gIFJlcGxhY2VkIG5vZGUuCisgKi8KK2Z1bmN0
aW9uIFRlbXBsYXRlX2RvbVJlcGxhY2VDaGlsZChuZXdDaGlsZCwgb2xkQ2hpbGQpIHsKKyAgICBy
ZXR1cm4gb2xkQ2hpbGQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobmV3Q2hpbGQsIG9sZENoaWxk
KTsKK30KKworLyoqCisgKiBSZW1vdmVzIGEgbm9kZSBmcm9tIHRoZSBET00uCisgKgorICogQHBh
cmFtIHtOb2RlfSBub2RlICBUaGUgbm9kZSB0byByZW1vdmUuCisgKiBAcmV0dXJuIHtOb2RlfSAg
VGhlIHJlbW92ZWQgbm9kZS4KKyAqLworZnVuY3Rpb24gVGVtcGxhdGVfZG9tUmVtb3ZlTm9kZShu
b2RlKSB7CisgICAgcmV0dXJuIFRlbXBsYXRlX2RvbVJlbW92ZUNoaWxkKG5vZGUucGFyZW50Tm9k
ZSwgbm9kZSk7Cit9CisKKy8qKgorICogQ3JlYXRlcyBhIG5ldyB0ZXh0IG5vZGUgaW4gdGhlIGdp
dmVuIGRvY3VtZW50LgorICoKKyAqIEBwYXJhbSB7RG9jdW1lbnR9IGRvYyAgVGFyZ2V0IGRvY3Vt
ZW50LgorICogQHBhcmFtIHtTdHJpbmd9IHRleHQgIFRleHQgY29tcG9zaW5nIG5ldyB0ZXh0IG5v
ZGUuCisgKiBAcmV0dXJuIHtUZXh0fSAgTmV3bHkgY29uc3RydWN0ZWQgdGV4dCBub2RlLgorICov
CitmdW5jdGlvbiBUZW1wbGF0ZV9kb21DcmVhdGVUZXh0Tm9kZShkb2MsIHRleHQpIHsKKyAgICBy
ZXR1cm4gZG9jLmNyZWF0ZVRleHROb2RlKHRleHQpOworfQorCisvKioKKyAqIFJlZGlyZWN0IHRv
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkCisgKgorICogQHBhcmFtIHtEb2N1bWVudH0gZG9jICBU
YXJnZXQgZG9jdW1lbnQuCisgKiBAcGFyYW0ge1N0cmluZ30gaWQgIElkIG9mIHJlcXVlc3RlZCBu
b2RlLgorICogQHJldHVybiB7RWxlbWVudHxOdWxsfSAgUmVzdWx0aW5nIGVsZW1lbnQuCisgKi8K
K2Z1bmN0aW9uIFRlbXBsYXRlX2RvbUdldEVsZW1lbnRCeUlkKGRvYywgaWQpIHsKKyAgICByZXR1
cm4gZG9jLmdldEVsZW1lbnRCeUlkKGlkKTsKK30KKworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFRo
aXMgZmlsZSBjb250YWlucyBqYXZhc2NyaXB0IHV0aWxpdHkgZnVuY3Rpb25zIHRoYXQKKyAqIGRv
IG5vdCBkZXBlbmQgb24gYW55dGhpbmcgZGVmaW5lZCBlbHNld2hlcmUuCisgKgorICovCisKKy8q
KgorICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGxlbmd0aCBwcm9wZXJ0eSBvZiB0aGUgZ2l2
ZW4gb2JqZWN0LiBVc2VkCisgKiB0byByZWR1Y2UgY29tcGlsZWQgY29kZSBzaXplLgorICoKKyAq
IEBwYXJhbSB7QXJyYXkgfCBTdHJpbmd9IGEgIFRoZSBzdHJpbmcgb3IgYXJyYXkgdG8gaW50ZXJy
b2dhdGUuCisgKiBAcmV0dXJuIHtOdW1iZXJ9ICBUaGUgdmFsdWUgb2YgdGhlIGxlbmd0aCBwcm9w
ZXJ0eS4KKyAqLworZnVuY3Rpb24gVGVtcGxhdGVfanNMZW5ndGgoYSkgeworICAgIHJldHVybiBh
Lmxlbmd0aDsKK30KKwordmFyIG1pbiA9IE1hdGgubWluOwordmFyIG1heCA9IE1hdGgubWF4Owor
dmFyIGNlaWwgPSBNYXRoLmNlaWw7Cit2YXIgZmxvb3IgPSBNYXRoLmZsb29yOwordmFyIHJvdW5k
ID0gTWF0aC5yb3VuZDsKK3ZhciBhYnMgPSBNYXRoLmFiczsKKworLyoqCisgKiBDb3BpZXMgYWxs
IHByb3BlcnRpZXMgZnJvbSBzZWNvbmQgb2JqZWN0IHRvIHRoZSBmaXJzdC4gIE1vZGlmaWVzIHRv
LgorICoKKyAqIEBwYXJhbSB7T2JqZWN0fSB0byAgVGhlIHRhcmdldCBvYmplY3QuCisgKiBAcGFy
YW0ge09iamVjdH0gZnJvbSAgVGhlIHNvdXJjZSBvYmplY3QuCisgKi8KK2Z1bmN0aW9uIFRlbXBs
YXRlX2NvcHlQcm9wZXJ0aWVzKHRvLCBmcm9tKSB7CisgICAgZm9yZWFjaGluKGZyb20sIGZ1bmN0
aW9uKHApIHsgdG9bcF0gPSBmcm9tW3BdOyB9KTsKK30KKworLyoqCisgKiBJdGVyYXRlcyBvdmVy
IHRoZSBhcnJheSwgY2FsbGluZyB0aGUgZ2l2ZW4gZnVuY3Rpb24gZm9yIGVhY2gKKyAqIGVsZW1l
bnQuCisgKgorICogQHBhcmFtIHtBcnJheX0gYXJyYXkKKyAqIEBwYXJhbSB7RnVuY3Rpb259IGZu
CisgKi8KK2Z1bmN0aW9uIGZvcmVhY2goYXJyYXksIGZuKSB7CisgICAgdmFyIEkgPSBUZW1wbGF0
ZV9qc0xlbmd0aChhcnJheSk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBJOyArK2kpCisgICAg
ICAgIGZuKGFycmF5W2ldLCBpKTsKK30KKworLyoqCisgKiBTYWZlbHkgaXRlcmF0ZXMgb3ZlciBh
bGwgcHJvcGVydGllcyBvZiB0aGUgZ2l2ZW4gb2JqZWN0LCBjYWxsaW5nCisgKiB0aGUgZ2l2ZW4g
ZnVuY3Rpb24gZm9yIGVhY2ggcHJvcGVydHkuIElmIG9wdF9hbGwgaXNuJ3QgdHJ1ZSwgdXNlcwor
ICogaGFzT3duUHJvcGVydHkoKSB0byBhc3N1cmUgdGhlIHByb3BlcnR5IGlzIG9uIHRoZSBvYmpl
Y3QsIG5vdCBvbgorICogaXRzIHByb3RvdHlwZS4KKyAqCisgKiBAcGFyYW0ge09iamVjdH0gb2Jq
ZWN0CisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbgorICogQHBhcmFtIHtCb29sZWFufSBvcHRfYWxs
ICBJZiB0cnVlLCBhbHNvIGl0ZXJhdGVzIG92ZXIgaW5oZXJpdGVkIHByb3BlcnRpZXMuCisgKi8K
K2Z1bmN0aW9uIGZvcmVhY2hpbihvYmplY3QsIGZuLCBvcHRfYWxsKSB7CisgICAgZm9yICh2YXIg
aSBpbiBvYmplY3QpIHsKKyAgICAgICAgaWYgKG9wdF9hbGwgfHwgIW9iamVjdC5oYXNPd25Qcm9w
ZXJ0eSB8fCBvYmplY3QuaGFzT3duUHJvcGVydHkoaSkpCisgICAgICAgICAgICBmbihpLCBvYmpl
Y3RbaV0pOworICAgIH0KK30KKworLyoqCisgKiBUcmltIHdoaXRlc3BhY2UgZnJvbSBiZWdpbiBh
bmQgZW5kIG9mIHN0cmluZy4KKyAqCisgKiBAc2VlIHRlc3RTdHJpbmdUcmltKCk7CisgKgorICog
QHBhcmFtIHtTdHJpbmd9IHN0ciAgSW5wdXQgc3RyaW5nLgorICogQHJldHVybiB7U3RyaW5nfSAg
VHJpbW1lZCBzdHJpbmcuCisgKi8KK2Z1bmN0aW9uIFRlbXBsYXRlX3N0cmluZ1RyaW0oc3RyKSB7
CisgICAgcmV0dXJuIFRlbXBsYXRlX3N0cmluZ1RyaW1SaWdodChzdHJpbmdUcmltTGVmdChzdHIp
KTsKK30KKworLyoqCisgKiBUcmltIHdoaXRlc3BhY2UgZnJvbSBiZWdpbm5pbmcgb2Ygc3RyaW5n
LgorICoKKyAqIEBzZWUgdGVzdFN0cmluZ1RyaW1MZWZ0KCk7CisgKgorICogQHBhcmFtIHtTdHJp
bmd9IHN0ciAgSW5wdXQgc3RyaW5nLgorICogQHJldHVybiB7U3RyaW5nfSAgVHJpbW1lZCBzdHJp
bmcuCisgKi8KK2Z1bmN0aW9uIFRlbXBsYXRlX3N0cmluZ1RyaW1MZWZ0KHN0cikgeworICAgIHJl
dHVybiBzdHIucmVwbGFjZSgvXlxzKy8sICIiKTsKK30KKworLyoqCisgKiBUcmltIHdoaXRlc3Bh
Y2UgZnJvbSBlbmQgb2Ygc3RyaW5nLgorICoKKyAqIEBzZWUgdGVzdFN0cmluZ1RyaW1SaWdodCgp
OworICoKKyAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgIElucHV0IHN0cmluZy4KKyAqIEByZXR1cm4g
e1N0cmluZ30gIFRyaW1tZWQgc3RyaW5nLgorICovCitmdW5jdGlvbiBUZW1wbGF0ZV9zdHJpbmdU
cmltUmlnaHQoc3RyKSB7CisgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9ccyskLywgIiIpOworfQor
CisvKioKKyAqIEpzY29tcGlsZXIgd3JhcHBlciBmb3IgcGFyc2VJbnQoKSB3aXRoIGJhc2UgMTAu
CisgKgorICogQHBhcmFtIHtTdHJpbmd9IHMgU3RyaW5nIHJlcGVyc2VudGF0aW9uIG9mIGEgbnVt
YmVyLgorICoKKyAqIEByZXR1cm4ge051bWJlcn0gVGhlIGludGVnZXIgY29udGFpbmVkIGluIHMs
IGNvbnZlcnRlZCBvbiBiYXNlIDEwLgorICovCitmdW5jdGlvbiBUZW1wbGF0ZV9wYXJzZUludDEw
KHMpIHsKKyAgICByZXR1cm4gcGFyc2VJbnQocywgMTApOworfQorLyoqCisgKiBAZmlsZW92ZXJ2
aWV3IEEgc2ltcGxlIGZvcm1hdHRlciB0byBwcm9qZWN0IEphdmFTY3JpcHQgZGF0YSBpbnRvCisg
KiBIVE1MIHRlbXBsYXRlcy4gVGhlIHRlbXBsYXRlIGlzIGVkaXRlZCBpbiBwbGFjZS4gSS5lLiBp
biBvcmRlciB0bworICogaW5zdGFudGlhdGUgYSB0ZW1wbGF0ZSwgY2xvbmUgaXQgZnJvbSB0aGUg
RE9NIGZpcnN0LCBhbmQgdGhlbgorICogcHJvY2VzcyB0aGUgY2xvbmVkIHRlbXBsYXRlLiBUaGlz
IGFsbG93cyBmb3IgdXBkYXRpbmcgb2YgdGVtcGxhdGVzOgorICogSWYgdGhlIHRlbXBsYXRlcyBp
cyBwcm9jZXNzZWQgYWdhaW4sIGNoYW5nZWQgdmFsdWVzIGFyZSBtZXJlbHkKKyAqIHVwZGF0ZWQu
CisgKgorICogTk9URTogSUUgRE9NIGRvZXNuJ3QgaGF2ZSBpbXBvcnROb2RlKCkuCisgKgorICog
Tk9URTogVGhlIHByb3BlcnR5IG5hbWUgImxlbmd0aCIgbXVzdCBub3QgYmUgdXNlZCBpbiBpbnB1
dAorICogZGF0YSwgc2VlIGNvbW1lbnQgaW4ganN0U2VsZWN0XygpLgorICovCisKKy8qKgorICog
TmFtZXMgb2YganN0ZW1wbGF0ZSBhdHRyaWJ1dGVzLiBUaGVzZSBhdHRyaWJ1dGVzIGFyZSBhdHRh
Y2hlZCB0bworICogbm9ybWFsIEhUTUwgZWxlbWVudHMgYW5kIGJpbmQgZXhwcmVzc2lvbiBjb250
ZXh0IGRhdGEgdG8gdGhlIEhUTUwKKyAqIGZyYWdtZW50IHRoYXQgaXMgdXNlZCBhcyB0ZW1wbGF0
ZS4KKyAqLwordmFyIEFUVF9zZWxlY3QgPSAnanNzZWxlY3QnOwordmFyIEFUVF9pbnN0YW5jZSA9
ICdqc2luc3RhbmNlJzsKK3ZhciBBVFRfZGlzcGxheSA9ICdqc2Rpc3BsYXknOwordmFyIEFUVF92
YWx1ZXMgPSAnanN2YWx1ZXMnOwordmFyIEFUVF9ldmFsID0gJ2pzZXZhbCc7Cit2YXIgQVRUX3Ry
YW5zY2x1ZGUgPSAndHJhbnNjbHVkZSc7Cit2YXIgQVRUX2NvbnRlbnQgPSAnanNjb250ZW50JzsK
KworLyoqCisgKiBOYW1lcyBvZiBzcGVjaWFsIHZhcmlhYmxlcyBkZWZpbmVkIGJ5IHRoZSBqc3Rl
bXBsYXRlIGV2YWx1YXRpb24KKyAqIGNvbnRleHQuIFRoZXNlIGNhbiBiZSB1c2VkIGluIGpzIGV4
cHJlc3Npb24gaW4ganN0ZW1wbGF0ZQorICogYXR0cmlidXRlcy4KKyAqLwordmFyIFZBUl9pbmRl
eCA9ICckaW5kZXgnOwordmFyIFZBUl90aGlzID0gJyR0aGlzJzsKKworLyoqCisgKiBDb250ZXh0
IGZvciBwcm9jZXNzaW5nIGEganN0ZW1wbGF0ZS4gVGhlIGNvbnRleHQgY29udGFpbnMgYSBjb250
ZXh0CisgKiBvYmplY3QsIHdob3NlIHByb3BlcnRpZXMgY2FuIGJlIHJlZmVycmVkIHRvIGluIGpz
dGVtcGxhdGUKKyAqIGV4cHJlc3Npb25zLCBhbmQgaXQgaG9sZHMgdGhlIGxvY2FsbHkgZGVmaW5l
ZCB2YXJpYWJsZXMuCisgKgorICogQHBhcmFtIHtPYmplY3R9IG9wdF9kYXRhIFRoZSBjb250ZXh0
IG9iamVjdC4gTnVsbCBpZiBubyBjb250ZXh0LgorICoKKyAqIEBwYXJhbSB7T2JqZWN0fSBvcHRf
cGFyZW50IFRoZSBwYXJlbnQgY29udGV4dCwgZnJvbSB3aGljaCBsb2NhbAorICogdmFyaWFibGVz
IGFyZSBpbmhlcml0ZWQuIE5vcm1hbGx5IHRoZSBjb250ZXh0IG9iamVjdCBvZiB0aGUgcGFyZW50
CisgKiBjb250ZXh0IGlzIHRoZSBvYmplY3Qgd2hvc2UgcHJvcGVydHkgdGhlIHBhcmVudCBvYmpl
Y3QgaXMuIE51bGwgZm9yIHRoZQorICogY29udGV4dCBvZiB0aGUgcm9vdCBvYmplY3QuCisgKgor
ICogQGNvbnN0cnVjdG9yCisgKi8KK2Z1bmN0aW9uIEpzRXhwckNvbnRleHQob3B0X2RhdGEsIG9w
dF9wYXJlbnQpIHsKKyAgICB2YXIgbWUgPSB0aGlzOworCisgICAgLyoqCisgICAgICogVGhlIGxv
Y2FsIGNvbnRleHQgb2YgdGhlIGlucHV0IGRhdGEgaW4gd2hpY2ggdGhlIGpzdGVtcGxhdGUKKyAg
ICAgKiBleHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkLiBOb3RpY2UgdGhhdCB0aGlzIGlzIHVzdWFs
bHkgYW4gT2JqZWN0LAorICAgICAqIGJ1dCBpdCBjYW4gYWxzbyBiZSBhIHNjYWxhciB2YWx1ZSAo
YW5kIHRoZW4gc3RpbGwgdGhlIGV4cHJlc3Npb24KKyAgICAgKiAkdGhpcyBjYW4gYmUgdXNlZCB0
byByZWZlciB0byBpdCkuIE5vdGljZSB0aGlzIGNhbiBiZSBhIHNjYWxhcgorICAgICAqIHZhbHVl
LCBpbmNsdWRpbmcgdW5kZWZpbmVkLgorICAgICAqCisgICAgICogQHR5cGUge09iamVjdH0KKyAg
ICAgKi8KKyAgICBtZS5kYXRhXyA9IG9wdF9kYXRhOworCisgICAgLyoqCisgICAgICogVGhlIGNv
bnRleHQgZm9yIHZhcmlhYmxlIGRlZmluaXRpb25zIGluIHdoaWNoIHRoZSBqc3RlbXBsYXRlCisg
ICAgICogZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRlZC4gT3RoZXIgdGhhbiBmb3IgdGhlIGxvY2Fs
IGNvbnRleHQsCisgICAgICogd2hpY2ggcmVwbGFjZXMgdGhlIHBhcmVudCBjb250ZXh0LCB2YXJp
YWJsZSBkZWZpbml0aW9ucyBvZiB0aGUKKyAgICAgKiBwYXJlbnQgYXJlIGluaGVyaXRlZC4gVGhl
IHNwZWNpYWwgdmFyaWFibGUgJHRoaXMgcG9pbnRzIHRvIGRhdGFfLgorICAgICAqCisgICAgICog
QHR5cGUge09iamVjdH0KKyAgICAgKi8KKyAgICBtZS52YXJzXyA9IHt9OworICAgIGlmIChvcHRf
cGFyZW50KQorICAgICAgICBUZW1wbGF0ZV9jb3B5UHJvcGVydGllcyhtZS52YXJzXywgb3B0X3Bh
cmVudC52YXJzXyk7CisgICAgdGhpcy52YXJzX1tWQVJfdGhpc10gPSBtZS5kYXRhXzsKK30KKwor
LyoqCisgKiBFdmFsdWF0ZXMgdGhlIGdpdmVuIGV4cHJlc3Npb24gaW4gdGhlIGNvbnRleHQgb2Yg
dGhlIGN1cnJlbnQKKyAqIGNvbnRleHQgb2JqZWN0IGFuZCB0aGUgY3VycmVudCBsb2NhbCB2YXJp
YWJsZXMuCisgKgorICogQHBhcmFtIHtTdHJpbmd9IGV4cHIgQSBqYXZhc2NyaXB0IGV4cHJlc3Np
b24uCisgKgorICogQHBhcmFtIHtFbGVtZW50fSB0ZW1wbGF0ZSBET00gbm9kZSBvZiB0aGUgdGVt
cGxhdGUuCisgKgorICogQHJldHVybiBUaGUgdmFsdWUgb2YgdGhhdCBleHByZXNzaW9uLgorICov
CitKc0V4cHJDb250ZXh0LnByb3RvdHlwZS5qc2V2YWwgPSBmdW5jdGlvbihleHByLCB0ZW1wbGF0
ZSkgeworICAgIHdpdGggKHRoaXMudmFyc18pIHsKKyAgICAgICAgd2l0aCAodGhpcy5kYXRhXykg
eworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKGZ1bmN0aW9uKCkg
eyByZXR1cm4gZXZhbCgnWycgKyBleHByICsgJ11bMF0nKTsgfSkuY2FsbCh0ZW1wbGF0ZSk7Cisg
ICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9OworCisvKioKKyAqIENsb25lcyB0aGUg
Y3VycmVudCBjb250ZXh0IGZvciBhIG5ldyBjb250ZXh0IG9iamVjdC4gVGhlIGNsb25lZAorICog
Y29udGV4dCBoYXMgdGhlIGRhdGEgb2JqZWN0IGFzIGl0cyBjb250ZXh0IG9iamVjdCBhbmQgdGhl
IGN1cnJlbnQKKyAqIGNvbnRleHQgYXMgaXRzIHBhcmVudCBjb250ZXh0LiBJdCBhbHNvIHNldHMg
dGhlICRpbmRleCB2YXJpYWJsZSB0bworICogdGhlIGdpdmVuIHZhbHVlLiBUaGlzIHZhbHVlIHVz
dWFsbHkgaXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBkYXRhCisgKiBvYmplY3QgaW4gYSBsaXN0IGZv
ciB3aGljaCBhIHRlbXBsYXRlIGlzIGluc3RhbnRpYXRlZCBtdWx0aXBseS4KKyAqCisgKiBAcGFy
YW0ge09iamVjdH0gZGF0YSBUaGUgbmV3IGNvbnRleHQgb2JqZWN0LgorICoKKyAqIEBwYXJhbSB7
TnVtYmVyfSBpbmRleCBQb3NpdGlvbiBvZiB0aGUgbmV3IGNvbnRleHQgd2hlbiBtdWx0aXBseQor
ICogaW5zdGFudGlhdGVkLiAoU2VlIGltcGxlbWVudGF0aW9uIG9mIGpzdFNlbGVjdCgpLikKKyAq
CisgKiBAcmV0dXJuIHtKc0V4cHJDb250ZXh0fQorICovCitKc0V4cHJDb250ZXh0LnByb3RvdHlw
ZS5jbG9uZSA9IGZ1bmN0aW9uKGRhdGEsIGluZGV4KSB7CisgICAgdmFyIHJldCA9IG5ldyBKc0V4
cHJDb250ZXh0KGRhdGEsIHRoaXMpOworICAgIHJldC5zZXRWYXJpYWJsZShWQVJfaW5kZXgsIGlu
ZGV4KTsKKyAgICBpZiAodGhpcy5yZXNvbHZlcl8pCisgICAgICAgIHJldC5zZXRTdWJUZW1wbGF0
ZVJlc29sdmVyKHRoaXMucmVzb2x2ZXJfKTsKKyAgICByZXR1cm4gcmV0OworfTsKKworLyoqCisg
KiBCaW5kcyBhIGxvY2FsIHZhcmlhYmxlIHRvIHRoZSBnaXZlbiB2YWx1ZS4gSWYgc2V0IGZyb20g
anN0ZW1wbGF0ZQorICoganN2YWx1ZSBleHByZXNzaW9ucywgdmFyaWFibGUgbmFtZXMgbXVzdCBz
dGFydCB3aXRoICQsIGJ1dCBpbiB0aGUKKyAqIEFQSSB0aGV5IG9ubHkgaGF2ZSB0byBiZSB2YWxp
ZCBqYXZhc2NyaXB0IGlkZW50aWZpZXIuCisgKgorICogQHBhcmFtIHtTdHJpbmd9IG5hbWUKKyAq
CisgKiBAcGFyYW0ge09iamVjdH0gdmFsdWUKKyAqLworSnNFeHByQ29udGV4dC5wcm90b3R5cGUu
c2V0VmFyaWFibGUgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkgeworICAgIHRoaXMudmFyc19bbmFt
ZV0gPSB2YWx1ZTsKK307CisKKy8qKgorICogU2V0cyB0aGUgZnVuY3Rpb24gdXNlZCB0byByZXNv
bHZlIHRoZSB2YWx1ZXMgb2YgdGhlIHRyYW5zY2x1ZGUKKyAqIGF0dHJpYnV0ZSBpbnRvIERPTSBu
b2Rlcy4gQnkgZGVmYXVsdCwgdGhpcyBpcyBqc3RHZXRUZW1wbGF0ZSgpLiBUaGUKKyAqIHZhbHVl
IHNldCBoZXJlIGlzIGluaGVyaXRlZCBieSBjbG9uZXMgb2YgdGhpcyBjb250ZXh0LgorICoKKyAq
IEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmVyIFRoZSBmdW5jdGlvbiB1c2VkIHRvIHJlc29sdmUg
dHJhbnNjbHVkZQorICogaWRzIGludG8gYSBET00gbm9kZSBvZiBhIHN1YnRlbXBsYXRlLiBUaGUg
RE9NIG5vZGUgcmV0dXJuZWQgYnkgdGhpcworICogZnVuY3Rpb24gd2lsbCBiZSBpbnNlcnRlZCBp
bnRvIHRoZSB0ZW1wbGF0ZSBpbnN0YW5jZSBiZWluZworICogcHJvY2Vzc2VkLiBUaHVzLCB0aGUg
cmVzb2x2ZXIgZnVuY3Rpb24gbXVzdCBpbnN0YW50aWF0ZSB0aGUKKyAqIHN1YnRlbXBsYXRlIGFz
IG5lY2Vzc2FyeS4KKyAqLworSnNFeHByQ29udGV4dC5wcm90b3R5cGUuc2V0U3ViVGVtcGxhdGVS
ZXNvbHZlciA9IGZ1bmN0aW9uKHJlc29sdmVyKSB7CisgICAgdGhpcy5yZXNvbHZlcl8gPSByZXNv
bHZlcjsKK307CisKKy8qKgorICogUmVzb2x2ZXMgYSBzdWIgdGVtcGxhdGUgZnJvbSBhbiBpZC4g
VXNlZCB0byBwcm9jZXNzIHRoZSB0cmFuc2NsdWRlCisgKiBhdHRyaWJ1dGUuIElmIGEgcmVzb2x2
ZXIgZnVuY3Rpb24gd2FzIHNldCB1c2luZworICogc2V0U3ViVGVtcGxhdGVSZXNvbHZlcigpLCBp
dCB3aWxsIGJlIHVzZWQsIG90aGVyd2lzZQorICoganN0R2V0VGVtcGxhdGUoKS4KKyAqCisgKiBA
cGFyYW0ge1N0cmluZ30gaWQgVGhlIGlkIG9mIHRoZSBzdWIgdGVtcGxhdGUuCisgKgorICogQHJl
dHVybiB7Tm9kZX0gVGhlIHJvb3QgRE9NIG5vZGUgb2YgdGhlIHN1YiB0ZW1wbGF0ZSwgZm9yIGRp
cmVjdAorICogaW5zZXJ0aW9uIGludG8gdGhlIGN1cnJlbnRseSBwcm9jZXNzZWQgdGVtcGxhdGUg
aW5zdGFuY2UuCisgKi8KK0pzRXhwckNvbnRleHQucHJvdG90eXBlLmdldFN1YlRlbXBsYXRlID0g
ZnVuY3Rpb24oaWQpIHsKKyAgICByZXR1cm4gKHRoaXMucmVzb2x2ZXJfIHx8IGpzdEdldFRlbXBs
YXRlKS5jYWxsKHRoaXMsIGlkKTsKK307CisKKy8qKgorICogSFRNTCB0ZW1wbGF0ZSBwcm9jZXNz
b3IuIERhdGEgdmFsdWVzIGFyZSBib3VuZCB0byBIVE1MIHRlbXBsYXRlcworICogdXNpbmcgdGhl
IGF0dHJpYnV0ZXMgdHJhbnNjbHVkZSwganNzZWxlY3QsIGpzZGlzcGxheSwganNjb250ZW50LAor
ICoganN2YWx1ZXMuIFRoZSB0ZW1wbGF0ZSBpcyBtb2RpZmVkIGluIHBsYWNlLiBUaGUgdmFsdWVz
IG9mIHRob3NlCisgKiBhdHRyaWJ1dGVzIGFyZSBKYXZhU2NyaXB0IGV4cHJlc3Npb25zIHRoYXQg
YXJlIGV2YWx1YXRlZCBpbiB0aGUKKyAqIGNvbnRleHQgb2YgdGhlIGRhdGEgb2JqZWN0IGZyYWdt
ZW50LgorICoKKyAqIEBwYXJhbSB7SnNFeHByQ29udGV4dH0gY29udGV4dCBDb250ZXh0IGNyZWF0
ZWQgZnJvbSB0aGUgaW5wdXQgZGF0YQorICogb2JqZWN0LgorICoKKyAqIEBwYXJhbSB7RWxlbWVu
dH0gdGVtcGxhdGUgRE9NIG5vZGUgb2YgdGhlIHRlbXBsYXRlLiBUaGlzIHdpbGwgYmUKKyAqIHBy
b2Nlc3NlZCBpbiBwbGFjZS4gQWZ0ZXIgcHJvY2Vzc2luZywgaXQgd2lsbCBzdGlsbCBiZSBhIHZh
bGlkCisgKiB0ZW1wbGF0ZSB0aGF0LCBpZiBwcm9jZXNzZWQgYWdhaW4gd2l0aCB0aGUgc2FtZSBk
YXRhLCB3aWxsIHJlbWFpbgorICogdW5jaGFuZ2VkLgorICovCitmdW5jdGlvbiBqc3RQcm9jZXNz
KGNvbnRleHQsIHRlbXBsYXRlKSB7CisgICAgdmFyIHByb2Nlc3NvciA9IG5ldyBKc3RQcm9jZXNz
b3IoKTsKKyAgICBwcm9jZXNzb3IucnVuXyhbIHByb2Nlc3NvciwgcHJvY2Vzc29yLmpzdFByb2Nl
c3NfLCBjb250ZXh0LCB0ZW1wbGF0ZSBdKTsKK30KKworLyoqCisgKiBJbnRlcm5hbCBjbGFzcyB1
c2VkIGJ5IGpzdGVtcGxhdGVzIHRvIG1haW50YWluIGNvbnRleHQuCisgKiBOT1RFOiBUaGlzIGlz
IG5lY2Vzc2FyeSB0byBwcm9jZXNzIGRlZXAgdGVtcGxhdGVzIGluIFNhZmFyaQorICogd2hpY2gg
aGFzIGEgcmVsYXRpdmVseSBzaGFsbG93IHN0YWNrLgorICogQGNsYXNzCisgKi8KK2Z1bmN0aW9u
IEpzdFByb2Nlc3NvcigpIHsKK30KKworLyoqCisgKiBSdW5zIHRoZSBzdGF0ZSBtYWNoaW5lLCBi
ZWdpbm5pbmcgd2l0aCBmdW5jdGlvbiAic3RhcnQiLgorICoKKyAqIEBwYXJhbSB7QXJyYXl9IHN0
YXJ0IFRoZSBmaXJzdCBmdW5jdGlvbiB0byBydW4sIGluIHRoZSBmb3JtCisgKiBbb2JqZWN0LCBt
ZXRob2QsIGFyZ3MgLi4uXQorICovCitKc3RQcm9jZXNzb3IucHJvdG90eXBlLnJ1bl8gPSBmdW5j
dGlvbihzdGFydCkgeworICAgIHZhciBtZSA9IHRoaXM7CisKKyAgICBtZS5xdWV1ZV8gPSBbIHN0
YXJ0IF07CisgICAgd2hpbGUgKFRlbXBsYXRlX2pzTGVuZ3RoKG1lLnF1ZXVlXykpIHsKKyAgICAg
ICAgdmFyIGYgPSBtZS5xdWV1ZV8uc2hpZnQoKTsKKyAgICAgICAgZlsxXS5hcHBseShmWzBdLCBm
LnNsaWNlKDIpKTsKKyAgICB9Cit9OworCisvKioKKyAqIEFwcGVuZHMgYSBmdW5jdGlvbiB0byBi
ZSBjYWxsZWQgbGF0ZXIuCisgKiBBbmFsb2dvdXMgdG8gY2FsbGluZyB0aGF0IGZ1bmN0aW9uIG9u
IGEgc3Vic2VxdWVudCBsaW5lLCBvciBhIHN1YnNlcXVlbnQKKyAqIGl0ZXJhdGlvbiBvZiBhIGxv
b3AuCisgKgorICogQHBhcmFtIHtBcnJheX0gZiAgQSBmdW5jdGlvbiBpbiB0aGUgZm9ybSBbb2Jq
ZWN0LCBtZXRob2QsIGFyZ3MgLi4uXQorICovCitKc3RQcm9jZXNzb3IucHJvdG90eXBlLmVucXVl
dWVfID0gZnVuY3Rpb24oZikgeworICAgIHRoaXMucXVldWVfLnB1c2goZik7Cit9OworCisvKioK
KyAqIEltcGxlbWVudHMgaW50ZXJuYWxzIG9mIGpzdFByb2Nlc3MuCisgKgorICogQHBhcmFtIHtK
c0V4cHJDb250ZXh0fSBjb250ZXh0CisgKgorICogQHBhcmFtIHtFbGVtZW50fSB0ZW1wbGF0ZQor
ICovCitKc3RQcm9jZXNzb3IucHJvdG90eXBlLmpzdFByb2Nlc3NfID0gZnVuY3Rpb24oY29udGV4
dCwgdGVtcGxhdGUpIHsKKyAgICB2YXIgbWUgPSB0aGlzOworCisgICAgdmFyIHRyYW5zY2x1ZGUg
PSBUZW1wbGF0ZV9kb21HZXRBdHRyaWJ1dGUodGVtcGxhdGUsIEFUVF90cmFuc2NsdWRlKTsKKyAg
ICBpZiAodHJhbnNjbHVkZSkgeworICAgICAgICB2YXIgdHIgPSBjb250ZXh0LmdldFN1YlRlbXBs
YXRlKHRyYW5zY2x1ZGUpOworICAgICAgICBpZiAodHIpIHsKKyAgICAgICAgICAgIFRlbXBsYXRl
X2RvbVJlcGxhY2VDaGlsZCh0ciwgdGVtcGxhdGUpOworICAgICAgICAgICAgbWUuZW5xdWV1ZV8o
WyBtZSwgbWUuanN0UHJvY2Vzc18sIGNvbnRleHQsIHRyIF0pOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIFRlbXBsYXRlX2RvbVJlbW92ZU5vZGUodGVtcGxhdGUpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgdmFyIHNlbGVjdCA9IFRlbXBsYXRlX2RvbUdldEF0dHJpYnV0ZSh0
ZW1wbGF0ZSwgQVRUX3NlbGVjdCk7CisgICAgaWYgKHNlbGVjdCkgeworICAgICAgICBtZS5qc3RT
ZWxlY3RfKGNvbnRleHQsIHRlbXBsYXRlLCBzZWxlY3QpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgdmFyIGRpc3BsYXkgPSBUZW1wbGF0ZV9kb21HZXRBdHRyaWJ1dGUodGVtcGxhdGUs
IEFUVF9kaXNwbGF5KTsKKyAgICBpZiAoZGlzcGxheSkgeworICAgICAgICBpZiAoIWNvbnRleHQu
anNldmFsKGRpc3BsYXksIHRlbXBsYXRlKSkgeworICAgICAgICAgICAgVGVtcGxhdGVfZGlzcGxh
eU5vbmUodGVtcGxhdGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IFRlbXBsYXRlX2Rpc3BsYXlEZWZhdWx0KHRlbXBsYXRlKTsKKyAgICB9CisKKyAgICB2YXIgdmFs
dWVzID0gVGVtcGxhdGVfZG9tR2V0QXR0cmlidXRlKHRlbXBsYXRlLCBBVFRfdmFsdWVzKTsKKyAg
ICBpZiAodmFsdWVzKQorICAgICAgICBtZS5qc3RWYWx1ZXNfKGNvbnRleHQsIHRlbXBsYXRlLCB2
YWx1ZXMpOworCisgICAgdmFyIGV4cHJlc3Npb25zID0gVGVtcGxhdGVfZG9tR2V0QXR0cmlidXRl
KHRlbXBsYXRlLCBBVFRfZXZhbCk7CisgICAgaWYgKGV4cHJlc3Npb25zKSB7CisgICAgICAgIGZv
cmVhY2goZXhwcmVzc2lvbnMuc3BsaXQoL1xzKjtccyovKSwgZnVuY3Rpb24oZXhwcmVzc2lvbikg
eworICAgICAgICAgICAgZXhwcmVzc2lvbiA9IFRlbXBsYXRlX3N0cmluZ1RyaW0oZXhwcmVzc2lv
bik7CisgICAgICAgICAgICBpZiAoVGVtcGxhdGVfanNMZW5ndGgoZXhwcmVzc2lvbikpCisgICAg
ICAgICAgICAgICAgY29udGV4dC5qc2V2YWwoZXhwcmVzc2lvbiwgdGVtcGxhdGUpOworICAgICAg
ICB9KTsKKyAgICB9CisKKyAgICB2YXIgY29udGVudCA9IFRlbXBsYXRlX2RvbUdldEF0dHJpYnV0
ZSh0ZW1wbGF0ZSwgQVRUX2NvbnRlbnQpOworICAgIGlmIChjb250ZW50KQorICAgICAgICBtZS5q
c3RDb250ZW50Xyhjb250ZXh0LCB0ZW1wbGF0ZSwgY29udGVudCk7CisgICAgZWxzZSB7CisgICAg
ICAgIHZhciBjaGlsZG5vZGVzID0gW107CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgVGVt
cGxhdGVfanNMZW5ndGgodGVtcGxhdGUuY2hpbGROb2Rlcyk7ICsraSkgeworICAgICAgICAgICAg
aWYgKHRlbXBsYXRlLmNoaWxkTm9kZXNbaV0ubm9kZVR5cGUgPT0gRE9NX0VMRU1FTlRfTk9ERSkK
KyAgICAgICAgICAgICAgICBtZS5lbnF1ZXVlXyhbbWUsIG1lLmpzdFByb2Nlc3NfLCBjb250ZXh0
LCB0ZW1wbGF0ZS5jaGlsZE5vZGVzW2ldXSk7CisgICAgICAgIH0KKyAgICB9Cit9OworCisvKioK
KyAqIEltcGxlbWVudHMgdGhlIGpzc2VsZWN0IGF0dHJpYnV0ZTogZXZhbHV0ZXMgdGhlIHZhbHVl
IG9mIHRoZQorICoganNzZWxlY3QgYXR0cmlidXRlIGluIHRoZSBjdXJyZW50IGNvbnRleHQsIHdp
dGggdGhlIGN1cnJlbnQKKyAqIHZhcmlhYmxlIGJpbmRpbmdzIChzZWUgSnNFeHByQ29udGV4dC5q
c2V2YWwoKSkuIElmIHRoZSB2YWx1ZSBpcyBhbgorICogYXJyYXksIHRoZSBjdXJyZW50IHRlbXBs
YXRlIG5vZGUgaXMgbXVsdGlwbGllZCBvbmNlIGZvciBldmVyeQorICogZWxlbWVudCBpbiB0aGUg
YXJyYXksIHdpdGggdGhlIGFycmF5IGVsZW1lbnQgYmVpbmcgdGhlIGNvbnRleHQKKyAqIG9iamVj
dC4gSWYgdGhlIGFycmF5IGlzIGVtcHR5LCBvciB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCB0aGVu
IHRoZQorICogY3VycmVudCB0ZW1wbGF0ZSBub2RlIGlzIGRyb3BwZWQuIElmIHRoZSB2YWx1ZSBp
cyBub3QgYW4gYXJyYXksCisgKiB0aGVuIGl0IGlzIGp1c3QgbWFkZSB0aGUgY29udGV4dCBvYmpl
Y3QuCisgKgorICogQHBhcmFtIHtKc0V4cHJDb250ZXh0fSBjb250ZXh0IFRoZSBjdXJyZW50IGV2
YWx1YXRpb24gY29udGV4dC4KKyAqCisgKiBAcGFyYW0ge0VsZW1lbnR9IHRlbXBsYXRlIFRoZSBj
dXJyZW50bHkgcHJvY2Vzc2VkIG5vZGUgb2YgdGhlIHRlbXBsYXRlLgorICoKKyAqIEBwYXJhbSB7
U3RyaW5nfSBzZWxlY3QgVGhlIGphdmFzY3JpcHQgZXhwcmVzc2lvbiB0byBldmFsdWF0ZS4KKyAq
CisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9jZXNzIFRoZSBmdW5jdGlvbiB0byBjb250aW51ZSBw
cm9jZXNzaW5nIHdpdGguCisgKi8KK0pzdFByb2Nlc3Nvci5wcm90b3R5cGUuanN0U2VsZWN0XyA9
IGZ1bmN0aW9uKGNvbnRleHQsIHRlbXBsYXRlLCBzZWxlY3QpIHsKKyAgICB2YXIgbWUgPSB0aGlz
OworCisgICAgdmFyIHZhbHVlID0gY29udGV4dC5qc2V2YWwoc2VsZWN0LCB0ZW1wbGF0ZSk7Cisg
ICAgVGVtcGxhdGVfZG9tUmVtb3ZlQXR0cmlidXRlKHRlbXBsYXRlLCBBVFRfc2VsZWN0KTsKKwor
ICAgIHZhciBpbnN0YW5jZSA9IFRlbXBsYXRlX2RvbUdldEF0dHJpYnV0ZSh0ZW1wbGF0ZSwgQVRU
X2luc3RhbmNlKTsKKyAgICB2YXIgaW5zdGFuY2VfbGFzdCA9IGZhbHNlOworICAgIGlmIChpbnN0
YW5jZSkgeworICAgICAgICBpZiAoaW5zdGFuY2UuY2hhckF0KDApID09ICcqJykgeworICAgICAg
ICAgICAgaW5zdGFuY2UgPSBUZW1wbGF0ZV9wYXJzZUludDEwKGluc3RhbmNlLnN1YnN0cigxKSk7
CisgICAgICAgICAgICBpbnN0YW5jZV9sYXN0ID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBpbnN0YW5jZSA9IFRlbXBsYXRlX3BhcnNlSW50MTAoaW5zdGFuY2UpOworICAgIH0K
KworICAgIHZhciBtdWx0aXBsZSA9ICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0g
J29iamVjdCcgJiYgdHlwZW9mIHZhbHVlLmxlbmd0aCA9PSAnbnVtYmVyJyk7CisgICAgdmFyIG11
bHRpcGxlX2VtcHR5ID0gKG11bHRpcGxlICYmIHZhbHVlLmxlbmd0aCA9PSAwKTsKKworICAgIGlm
IChtdWx0aXBsZSkgeworICAgICAgICBpZiAobXVsdGlwbGVfZW1wdHkpIHsKKyAgICAgICAgICAg
IGlmICghaW5zdGFuY2UpIHsKKyAgICAgICAgICAgICAgICBUZW1wbGF0ZV9kb21TZXRBdHRyaWJ1
dGUodGVtcGxhdGUsIEFUVF9zZWxlY3QsIHNlbGVjdCk7CisgICAgICAgICAgICAgICAgVGVtcGxh
dGVfZG9tU2V0QXR0cmlidXRlKHRlbXBsYXRlLCBBVFRfaW5zdGFuY2UsICcqMCcpOworICAgICAg
ICAgICAgICAgIFRlbXBsYXRlX2Rpc3BsYXlOb25lKHRlbXBsYXRlKTsKKyAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgIFRlbXBsYXRlX2RvbVJlbW92ZU5vZGUodGVtcGxhdGUpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgVGVtcGxhdGVfZGlzcGxheURlZmF1bHQodGVt
cGxhdGUpOworICAgICAgICAgICAgaWYgKGluc3RhbmNlID09PSBudWxsIHx8IGluc3RhbmNlID09
PSAiIiB8fCBpbnN0YW5jZSA9PT0gdW5kZWZpbmVkIHx8CisgICAgICAgICAgICAgICAgKGluc3Rh
bmNlX2xhc3QgJiYgaW5zdGFuY2UgPCBUZW1wbGF0ZV9qc0xlbmd0aCh2YWx1ZSkgLSAxKSkgewor
ICAgICAgICAgICAgICAgIHZhciB0ZW1wbGF0ZW5vZGVzID0gW107CisgICAgICAgICAgICAgICAg
dmFyIGluc3RhbmNlc19zdGFydCA9IGluc3RhbmNlIHx8IDA7CisgICAgICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IGluc3RhbmNlc19zdGFydCArIDE7IGkgPCBUZW1wbGF0ZV9qc0xlbmd0aCh2YWx1
ZSk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IFRlbXBsYXRlX2RvbUNs
b25lTm9kZSh0ZW1wbGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlbm9kZXMucHVz
aChub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGVfZG9tSW5zZXJ0QmVmb3JlKG5v
ZGUsIHRlbXBsYXRlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGVtcGxh
dGVub2Rlcy5wdXNoKHRlbXBsYXRlKTsKKworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgVGVtcGxhdGVfanNMZW5ndGgodGVtcGxhdGVub2Rlcyk7ICsraSkgeworICAgICAgICAg
ICAgICAgICAgICB2YXIgaWkgPSBpICsgaW5zdGFuY2VzX3N0YXJ0OworICAgICAgICAgICAgICAg
ICAgICB2YXIgdiA9IHZhbHVlW2lpXTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSB0ZW1w
bGF0ZW5vZGVzW2ldOworCisgICAgICAgICAgICAgICAgICAgIG1lLmVucXVldWVfKFttZSwgbWUu
anN0UHJvY2Vzc18sIGNvbnRleHQuY2xvbmUodiwgaWkpLCB0XSk7CisgICAgICAgICAgICAgICAg
ICAgIHZhciBpbnN0YW5jZVN0ciA9IChpaSA9PSBUZW1wbGF0ZV9qc0xlbmd0aCh2YWx1ZSkgLSAx
ID8gJyonIDogJycpICsgaWk7CisgICAgICAgICAgICAgICAgICAgIG1lLmVucXVldWVfKFtudWxs
LCBwb3N0UHJvY2Vzc011bHRpcGxlXywgdCwgc2VsZWN0LCBpbnN0YW5jZVN0cl0pOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5zdGFuY2UgPCBUZW1wbGF0ZV9q
c0xlbmd0aCh2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICB2YXIgdiA9IHZhbHVlW2luc3RhbmNl
XTsKKworICAgICAgICAgICAgICAgIG1lLmVucXVldWVfKFttZSwgbWUuanN0UHJvY2Vzc18sIGNv
bnRleHQuY2xvbmUodiwgaW5zdGFuY2UpLCB0ZW1wbGF0ZV0pOworICAgICAgICAgICAgICAgIHZh
ciBpbnN0YW5jZVN0ciA9IChpbnN0YW5jZSA9PSBUZW1wbGF0ZV9qc0xlbmd0aCh2YWx1ZSkgLSAx
ID8gJyonIDogJycpICsgaW5zdGFuY2U7CisgICAgICAgICAgICAgICAgbWUuZW5xdWV1ZV8oW251
bGwsIHBvc3RQcm9jZXNzTXVsdGlwbGVfLCB0ZW1wbGF0ZSwgc2VsZWN0LCBpbnN0YW5jZVN0cl0p
OworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgVGVtcGxhdGVfZG9tUmVtb3Zl
Tm9kZSh0ZW1wbGF0ZSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAodmFs
dWUgPT0gbnVsbCkgeworICAgICAgICAgICAgVGVtcGxhdGVfZG9tU2V0QXR0cmlidXRlKHRlbXBs
YXRlLCBBVFRfc2VsZWN0LCBzZWxlY3QpOworICAgICAgICAgICAgVGVtcGxhdGVfZGlzcGxheU5v
bmUodGVtcGxhdGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbWUuZW5xdWV1ZV8o
W21lLCBtZS5qc3RQcm9jZXNzXywgY29udGV4dC5jbG9uZSh2YWx1ZSwgMCksIHRlbXBsYXRlXSk7
CisgICAgICAgICAgICBtZS5lbnF1ZXVlXyhbbnVsbCwgcG9zdFByb2Nlc3NTaW5nbGVfLCB0ZW1w
bGF0ZSwgc2VsZWN0XSk7CisgICAgICAgIH0KKyAgICB9Cit9OworCisvKioKKyAqIFNldHMgQVRU
X3NlbGVjdCBhbmQgQVRUX2luc3RhbmNlIGZvbGxvd2luZyByZWN1cnNpb24gdG8ganN0UHJvY2Vz
cy4KKyAqCisgKiBAcGFyYW0ge0VsZW1lbnR9IHRlbXBsYXRlICBUaGUgdGVtcGxhdGUKKyAqCisg
KiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0ICBUaGUganNzZWxlY3Qgc3RyaW5nCisgKgorICogQHBh
cmFtIHtTdHJpbmd9IGluc3RhbmNlU3RyICBUaGUgbmV3IHZhbHVlIGZvciB0aGUganNpbnN0YW5j
ZSBhdHRyaWJ1dGUKKyAqLworZnVuY3Rpb24gcG9zdFByb2Nlc3NNdWx0aXBsZV8odGVtcGxhdGUs
IHNlbGVjdCwgaW5zdGFuY2VTdHIpIHsKKyAgICBUZW1wbGF0ZV9kb21TZXRBdHRyaWJ1dGUodGVt
cGxhdGUsIEFUVF9zZWxlY3QsIHNlbGVjdCk7CisgICAgVGVtcGxhdGVfZG9tU2V0QXR0cmlidXRl
KHRlbXBsYXRlLCBBVFRfaW5zdGFuY2UsIGluc3RhbmNlU3RyKTsKK30KKworLyoqCisgKiBTZXRz
IEFUVF9zZWxlY3QgYW5kIG1ha2VzIHRoZSBlbGVtZW50IHZpc2libGUgZm9sbG93aW5nIHJlY3Vy
c2lvbiB0bworICoganN0UHJvY2Vzcy4KKyAqCisgKiBAcGFyYW0ge0VsZW1lbnR9IHRlbXBsYXRl
ICBUaGUgdGVtcGxhdGUKKyAqCisgKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0ICBUaGUganNzZWxl
Y3Qgc3RyaW5nCisgKi8KK2Z1bmN0aW9uIHBvc3RQcm9jZXNzU2luZ2xlXyh0ZW1wbGF0ZSwgc2Vs
ZWN0KSB7CisgICAgVGVtcGxhdGVfZG9tU2V0QXR0cmlidXRlKHRlbXBsYXRlLCBBVFRfc2VsZWN0
LCBzZWxlY3QpOworICAgIFRlbXBsYXRlX2Rpc3BsYXlEZWZhdWx0KHRlbXBsYXRlKTsKK30KKwor
LyoqCisgKiBJbXBsZW1lbnRzIHRoZSBqc3ZhbHVlcyBhdHRyaWJ1dGU6IGV2YWx1YXRlcyBlYWNo
IG9mIHRoZSB2YWx1ZXMgYW5kCisgKiBhc3NpZ25zIHRoZW0gdG8gdmFyaWFibGVzIGluIHRoZSBj
dXJyZW50IGNvbnRleHQgKGlmIHRoZSBuYW1lCisgKiBzdGFydHMgd2l0aCAnJCcsIGphdmFzY3Jp
cHQgcHJvcGVydGllcyBvZiB0aGUgY3VycmVudCB0ZW1wbGF0ZSBub2RlCisgKiAoaWYgdGhlIG5h
bWUgc3RhcnRzIHdpdGggJy4nKSwgb3IgRE9NIGF0dHJpYnV0ZXMgb2YgdGhlIGN1cnJlbnQKKyAq
IHRlbXBsYXRlIG5vZGUgKG90aGVyd2lzZSkuIFNpbmNlIERPTSBhdHRyaWJ1dGUgdmFsdWVzIGFy
ZSBhbHdheXMKKyAqIHN0cmluZ3MsIHRoZSB2YWx1ZSBpcyBjb2VyY2VkIHRvIHN0cmluZyBpbiB0
aGUgbGF0dGVyIGNhc2UsCisgKiBvdGhlcndpc2UgaXQncyB0aGUgdW5jb2VyY2VkIGphdmFzY3Jp
cHQgdmFsdWUuCisgKgorICogQHBhcmFtIHtKc0V4cHJDb250ZXh0fSBjb250ZXh0IEN1cnJlbnQg
ZXZhbHVhdGlvbiBjb250ZXh0LgorICoKKyAqIEBwYXJhbSB7RWxlbWVudH0gdGVtcGxhdGUgQ3Vy
cmVudGx5IHByb2Nlc3NlZCB0ZW1wbGF0ZSBub2RlLgorICoKKyAqIEBwYXJhbSB7U3RyaW5nfSB2
YWx1ZXNTdHIgVmFsdWUgb2YgdGhlIGpzdmFsdWVzIGF0dHJpYnV0ZSB0byBiZQorICogcHJvY2Vz
c2VkLgorICovCitKc3RQcm9jZXNzb3IucHJvdG90eXBlLmpzdFZhbHVlc18gPSBmdW5jdGlvbihj
b250ZXh0LCB0ZW1wbGF0ZSwgdmFsdWVzU3RyKSB7CisgICAgdmFyIHZhbHVlcyA9IHZhbHVlc1N0
ci5zcGxpdCgvXHMqO1xzKi8pOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgVGVtcGxhdGVfanNM
ZW5ndGgodmFsdWVzKTsgKytpKSB7CisgICAgICAgIHZhciBjb2xvbiA9IHZhbHVlc1tpXS5pbmRl
eE9mKCc6Jyk7CisgICAgICAgIGlmIChjb2xvbiA8IDApCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgdmFyIGxhYmVsID0gVGVtcGxhdGVfc3RyaW5nVHJpbSh2YWx1ZXNbaV0uc3Vic3Ry
KDAsIGNvbG9uKSk7CisgICAgICAgIHZhciB2YWx1ZSA9IGNvbnRleHQuanNldmFsKHZhbHVlc1tp
XS5zdWJzdHIoY29sb24gKyAxKSwgdGVtcGxhdGUpOworCisgICAgICAgIGlmIChsYWJlbC5jaGFy
QXQoMCkgPT0gJyQnKQorICAgICAgICAgICAgY29udGV4dC5zZXRWYXJpYWJsZShsYWJlbCwgdmFs
dWUpOworICAgICAgICBlbHNlIGlmIChsYWJlbC5jaGFyQXQoMCkgPT0gJy4nKQorICAgICAgICAg
ICAgdGVtcGxhdGVbbGFiZWwuc3Vic3RyKDEpXSA9IHZhbHVlOworICAgICAgICBlbHNlIGlmIChs
YWJlbCkgeworICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnYm9vbGVhbicpIHsKKyAg
ICAgICAgICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICAgICAgICAgIFRlbXBsYXRlX2Rv
bVNldEF0dHJpYnV0ZSh0ZW1wbGF0ZSwgbGFiZWwsIGxhYmVsKTsKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIFRlbXBsYXRlX2RvbVJlbW92ZUF0dHJpYnV0ZSh0ZW1w
bGF0ZSwgbGFiZWwpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgVGVtcGxh
dGVfZG9tU2V0QXR0cmlidXRlKHRlbXBsYXRlLCBsYWJlbCwgJycgKyB2YWx1ZSk7CisgICAgICAg
IH0KKyAgICB9Cit9OworCisvKioKKyAqIEltcGxlbWVudHMgdGhlIGpzY29udGVudCBhdHRyaWJ1
dGUuIEV2YWx1dGVzIHRoZSBleHByZXNzaW9uIGluCisgKiBqc2NvbnRlbnQgaW4gdGhlIGN1cnJl
bnQgY29udGV4dCBhbmQgd2l0aCB0aGUgY3VycmVudCB2YXJpYWJsZXMsCisgKiBhbmQgYXNzaWdu
cyBpdHMgc3RyaW5nIHZhbHVlIHRvIHRoZSBjb250ZW50IG9mIHRoZSBjdXJyZW50IHRlbXBsYXRl
CisgKiBub2RlLgorICoKKyAqIEBwYXJhbSB7SnNFeHByQ29udGV4dH0gY29udGV4dCBDdXJyZW50
IGV2YWx1YXRpb24gY29udGV4dC4KKyAqCisgKiBAcGFyYW0ge0VsZW1lbnR9IHRlbXBsYXRlIEN1
cnJlbnRseSBwcm9jZXNzZWQgdGVtcGxhdGUgbm9kZS4KKyAqCisgKiBAcGFyYW0ge1N0cmluZ30g
Y29udGVudCBWYWx1ZSBvZiB0aGUganNjb250ZW50IGF0dHJpYnV0ZSB0byBiZQorICogcHJvY2Vz
c2VkLgorICovCitKc3RQcm9jZXNzb3IucHJvdG90eXBlLmpzdENvbnRlbnRfID0gZnVuY3Rpb24o
Y29udGV4dCwgdGVtcGxhdGUsIGNvbnRlbnQpIHsKKyAgICB2YXIgdmFsdWUgPSAnJyArIGNvbnRl
eHQuanNldmFsKGNvbnRlbnQsIHRlbXBsYXRlKTsKKyAgICBpZiAodGVtcGxhdGUuaW5uZXJIVE1M
ID09IHZhbHVlKQorICAgICAgICByZXR1cm47CisgICAgd2hpbGUgKHRlbXBsYXRlLmZpcnN0Q2hp
bGQpCisgICAgICAgIFRlbXBsYXRlX2RvbVJlbW92ZU5vZGUodGVtcGxhdGUuZmlyc3RDaGlsZCk7
CisgICAgdmFyIHQgPSBUZW1wbGF0ZV9kb21DcmVhdGVUZXh0Tm9kZShUZW1wbGF0ZV9vd25lckRv
Y3VtZW50KHRlbXBsYXRlKSwgdmFsdWUpOworICAgIFRlbXBsYXRlX2RvbUFwcGVuZENoaWxkKHRl
bXBsYXRlLCB0KTsKK307CisKKy8qKgorICogSGVscHMgdG8gaW1wbGVtZW50IHRoZSB0cmFuc2Ns
dWRlIGF0dHJpYnV0ZSwgYW5kIGlzIHRoZSBpbml0aWFsCisgKiBjYWxsIHRvIGdldCBob2xkIG9m
IGEgdGVtcGxhdGUgZnJvbSBpdHMgSUQuCisgKgorICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhl
IElEIG9mIHRoZSBIVE1MIGVsZW1lbnQgdXNlZCBhcyB0ZW1wbGF0ZS4KKyAqCisgKiBAcmV0dXJu
cyB7RWxlbWVudH0gVGhlIERPTSBub2RlIG9mIHRoZSB0ZW1wbGF0ZS4gKE9ubHkgZWxlbWVudAor
ICogbm9kZXMgY2FuIGJlIGZvdW5kIGJ5IElELCBoZW5jZSBpdCdzIGEgRWxlbWVudC4pCisgKi8K
K2Z1bmN0aW9uIGpzdEdldFRlbXBsYXRlKG5hbWUpIHsKKyAgICB2YXIgc2VjdGlvbiA9IFRlbXBs
YXRlX2RvbUdldEVsZW1lbnRCeUlkKGRvY3VtZW50LCBuYW1lKTsKKyAgICBpZiAoc2VjdGlvbikg
eworICAgICAgICB2YXIgcmV0ID0gVGVtcGxhdGVfZG9tQ2xvbmVOb2RlKHNlY3Rpb24pOworICAg
ICAgICBUZW1wbGF0ZV9kb21SZW1vdmVBdHRyaWJ1dGUocmV0LCAnaWQnKTsKKyAgICAgICAgcmV0
dXJuIHJldDsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIG51bGw7Cit9CisKK3dpbmRvd1sn
anN0R2V0VGVtcGxhdGUnXSA9IGpzdEdldFRlbXBsYXRlOword2luZG93Wydqc3RQcm9jZXNzJ10g
PSBqc3RQcm9jZXNzOword2luZG93WydKc0V4cHJDb250ZXh0J10gPSBKc0V4cHJDb250ZXh0Owor
CitmdW5jdGlvbiBUZW1wbGF0ZVRlc3QoKSB7CisgICAgLy8gRmluZCB0aGUgbG9jYXRpb24gdG8g
aW5zZXJ0IHRoZSBjb250ZW50CisgICAgdmFyIHRwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J2JlbmNobWFya19jb250ZW50Jyk7CisKKyAgICAvLyBJbmplY3QgdGhlIGNvbnRlbnQKKyAgICB0
cC5pbm5lckhUTUwgPSBjb250ZW50OworCisgICAgLy8gUnVuIHRoZSB0ZW1wbGF0ZQorICAgIHZh
ciBjeCA9IG5ldyBKc0V4cHJDb250ZXh0KAorICAgIHsiY291bnRlcnMiOiBbCisgICAgICAgIHsi
bmFtZSI6IkNocm9tZTpJbml0IiwidGltZSI6NX0sCisgICAgICAgIHsiZGVsdGEiOjAsIm5hbWUi
OiJTaHV0ZG93bjp3aW5kb3dfY2xvc2U6dGltZSIsInRpbWUiOjExMSwidmFsdWUiOjF9LAorICAg
ICAgICB7ImRlbHRhIjowLCJuYW1lIjoiIFNodXRkb3duOndpbmRvd19jbG9zZTp0aW1lTUEiLCJ2
YWx1ZSI6MTExfSwKKyAgICAgICAgeyJkZWx0YSI6MCwibmFtZSI6IlNodXRkb3duOndpbmRvd19j
bG9zZTp0aW1lX3BlIiwidGltZSI6MTExLCJ2YWx1ZSI6MX0sCisgICAgICAgIHsiZGVsdGEiOjAs
Im5hbWUiOiIgU2h1dGRvd246d2luZG93X2Nsb3NlOnRpbWVfcCIsInZhbHVlIjoxMTF9LAorICAg
ICAgICB7ImRlbHRhIjowLCJuYW1lIjoiU2h1dGRvd246cmVuZGVyZXJzOnRvdGFsIiwidGltZSI6
MSwidmFsdWUiOjF9LAorICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoiIFNodXRkb3duOnJlbmRl
cmVyczp0b3RhbE1BWCIsInZhbHVlIjoxfSwKKyAgICAgICAgeyJkZWx0YSI6MCwibmFtZSI6IlNo
dXRkb3duOnJlbmRlcmVyczpzbG93IiwidGltZSI6MCwidmFsdWUiOjF9LAorICAgICAgICB7ImRl
bHRhIjowLCJuYW1lIjoiIFNodXRkb3duOnJlbmRlcmVyczpzbG93TUFYIiwidmFsdWUiOjEwfSwK
KyAgICAgICAgeyJkZWx0YSI6MCwibmFtZSI6IkROUzpQcmVmZXRjaFF1ZXVlIiwidGltZSI6Miwi
dmFsdWUiOjZ9LAorICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoiIEROUzpQcmVmZXRjaFF1ZXVl
TUFYIiwidmFsdWUiOjF9LAorICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoiRE5TOlByZWZldGNo
Rm91bmROYW1lTCIsInRpbWUiOjEwNDgsInZhbHVlIjoxMDAzfSwKKyAgICAgICAgeyJkZWx0YSI6
MCwibmFtZSI6IiBETlM6UHJlZmV0Y2hGb3VuZE5hbWVMTUFYIiwidmFsdWUiOjQ2fSwKKyAgICAg
ICAgeyJkZWx0YSI6MCwibmFtZSI6IlNCOlF1ZXVlRGVwdGgiLCJ0aW1lIjowLCJ2YWx1ZSI6MX0s
CisgICAgICAgIHsiZGVsdGEiOjAsIm5hbWUiOiIgU0I6UXVldWVEZXB0aE1BWCIsInZhbHVlIjow
fSwKKyAgICAgICAgeyJkZWx0YSI6MTAyLCJuYW1lIjoiSVBDOlNlbmRNc2dDb3VudCIsInZhbHVl
IjoxMDE2fSwKKyAgICAgICAgeyJkZWx0YSI6OTgsIm5hbWUiOiJDaHJvbWU6UHJvY01zZ0wgVUki
LCJ0aW1lIjoyNzc3LCJ2YWx1ZSI6MTM3OH0sCisgICAgICAgIHsiZGVsdGEiOjIzODEsIm5hbWUi
OiIgQ2hyb21lOlByb2NNc2dMIFVJTUFYIiwidmFsdWUiOjI0MDl9LAorICAgICAgICB7ImRlbHRh
Ijo5OCwibmFtZSI6IkNocm9tZTpUb3RhbE1zZ0wgVUkiLCJ0aW1lIjo1NzE1LCJ2YWx1ZSI6MTM3
OH0sCisgICAgICAgIHsiZGVsdGEiOjE1MTgsIm5hbWUiOiIgQ2hyb21lOlRvdGFsTXNnTCBVSU1B
WCIsInZhbHVlIjoyNDA5fSwKKyAgICAgICAgeyJuYW1lIjoiQ2hyb21lOlJlbmRlcmVySW5pdCIs
InRpbWUiOjl9LAorICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoiV2ViRnJhbWVBY3RpdmVDb3Vu
dCIsInZhbHVlIjoyfSwKKyAgICAgICAgeyJkZWx0YSI6MCwibmFtZSI6IkdlYXJzOkxvYWRUaW1l
IiwidGltZSI6MSwidmFsdWUiOjF9LAorICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoiIEdlYXJz
OkxvYWRUaW1lTUFYIiwidmFsdWUiOjF9LAorICAgICAgICB7ImRlbHRhIjoxLCJuYW1lIjoiVVJM
UmVxdWVzdENvdW50IiwidmFsdWUiOjQxfSwKKyAgICAgICAgeyJkZWx0YSI6MSwibmFtZSI6Im1p
bWVfc25pZmZlcjpTaG91bGRTbmlmZk1pbWVUIiwidGltZSI6MjcsInZhbHVlIjoyN30sCisgICAg
ICAgIHsiZGVsdGEiOjAsIm5hbWUiOiIgbWltZV9zbmlmZmVyOlNob3VsZFNuaWZmTWltZSIsInZh
bHVlIjoxfSwKKyAgICAgICAgeyJkZWx0YSI6MywibmFtZSI6IlJlc291cmNlTG9hZFNlcnZlciIs
InRpbWUiOjEwNjUsInZhbHVlIjo3M30sCisgICAgICAgIHsiZGVsdGEiOjAsIm5hbWUiOiIgUmVz
b3VyY2VMb2FkU2VydmVyTUFYIiwidmFsdWUiOjUxfSwKKyAgICAgICAgeyJkZWx0YSI6MTEsIm5h
bWUiOiJXZWJGcmFtZVBhaW50VGltZSIsInRpbWUiOjIzMiwidmFsdWUiOjQyfSwKKyAgICAgICAg
eyJkZWx0YSI6OSwibmFtZSI6IiBXZWJGcmFtZVBhaW50VGltZU1BWCIsInZhbHVlIjo0MX0sCisg
ICAgICAgIHsiZGVsdGEiOjExLCJuYW1lIjoiTVBBcmNoOlJXSF9Pbk1zZ1BhaW50UmVjdCIsInRp
bWUiOjEzNiwidmFsdWUiOjQyfSwKKyAgICAgICAgeyJkZWx0YSI6MCwibmFtZSI6IiBNUEFyY2g6
UldIX09uTXNnUGFpbnRSZWN0TUFYIiwidmFsdWUiOjl9LAorICAgICAgICB7ImRlbHRhIjowLCJu
YW1lIjoiTlBPYmplY3RzIiwidmFsdWUiOjJ9LAorICAgICAgICB7ImRlbHRhIjo2MDA4ODMyLCJu
YW1lIjoiVjg6T3NNZW1vcnlBbGxvY2F0ZWQiLCJ2YWx1ZSI6Mjg0MjIxNDR9LAorICAgICAgICB7
ImRlbHRhIjo3OTA1LCJuYW1lIjoiVjg6R2xvYmFsSGFuZGxlcyIsInZhbHVlIjoxNjgzMn0sCisg
ICAgICAgIHsiZGVsdGEiOjAsIm5hbWUiOiJWODpQY3JlTWFsbG9jQ291bnQiLCJ2YWx1ZSI6MH0s
CisgICAgICAgIHsiZGVsdGEiOjEsIm5hbWUiOiJWODpPYmplY3RQcm9wZXJ0aWVzVG9EaWN0aW9u
YSIsInZhbHVlIjoxNn0sCisgICAgICAgIHsiZGVsdGEiOjAsIm5hbWUiOiJWODpPYmplY3RFbGVt
ZW50c1RvRGljdGlvbmFyeSIsInZhbHVlIjowfSwKKyAgICAgICAgeyJkZWx0YSI6MTEyODY1Miwi
bmFtZSI6IlY4OkFsaXZlQWZ0ZXJMYXN0R0MiLCJ2YWx1ZSI6NDQ2NzU5Nn0sCisgICAgICAgIHsi
ZGVsdGEiOjAsIm5hbWUiOiJWODpPYmpzU2luY2VMYXN0WW91bmciLCJ2YWx1ZSI6MH0sCisgICAg
ICAgIHsiZGVsdGEiOjAsIm5hbWUiOiJWODpPYmpzU2luY2VMYXN0RnVsbCIsInZhbHVlIjowfSwK
KyAgICAgICAgeyJkZWx0YSI6MjA0OCwibmFtZSI6IlY4OlN5bWJvbFRhYmxlQ2FwYWNpdHkiLCJ2
YWx1ZSI6MTIyODh9LAorICAgICAgICB7ImRlbHRhIjoxNDkzLCJuYW1lIjoiVjg6TnVtYmVyT2ZT
eW1ib2xzIiwidmFsdWUiOjY4NjV9LAorICAgICAgICB7ImRlbHRhIjoxMDA0NDIsIm5hbWUiOiJW
ODpUb3RhbEV4dGVybmFsU3RyaW5nTWVtb3J5IiwidmFsdWUiOjM1OTE4NH0sCisgICAgICAgIHsi
ZGVsdGEiOjAsIm5hbWUiOiJWODpTY3JpcHRXcmFwcGVycyIsInZhbHVlIjowfSwKKyAgICAgICAg
eyJkZWx0YSI6MywibmFtZSI6IlY4OkNhbGxJbml0aWFsaXplU3R1YnMiLCJ2YWx1ZSI6MjB9LAor
ICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoiVjg6Q2FsbFByZU1vbm9tb3JwaGljU3R1YnMiLCJ2
YWx1ZSI6NH0sCisgICAgICAgIHsiZGVsdGEiOjAsIm5hbWUiOiJWODpDYWxsTm9ybWFsU3R1YnMi
LCJ2YWx1ZSI6MH0sCisgICAgICAgIHsiZGVsdGEiOjYsIm5hbWUiOiJWODpDYWxsTWVnYW1vcnBo
aWNTdHVicyIsInZhbHVlIjo0NH0sCisgICAgICAgIHsiZGVsdGEiOjAsIm5hbWUiOiJWODpBcmd1
bWVudHNBZGFwdG9ycyIsInZhbHVlIjowfSwKKyAgICAgICAgeyJkZWx0YSI6NjQ3LCJuYW1lIjoi
Vjg6Q29tcGlsYXRpb25DYWNoZUhpdHMiLCJ2YWx1ZSI6MTI2OX0sCisgICAgICAgIHsiZGVsdGEi
OjksIm5hbWUiOiJWODpDb21waWxhdGlvbkNhY2hlTWlzc2VzIiwidmFsdWUiOjU3fSwKKyAgICAg
ICAgeyJkZWx0YSI6MCwibmFtZSI6IlY4OlJlZ0V4cENhY2hlSGl0cyIsInZhbHVlIjoyfSwKKyAg
ICAgICAgeyJkZWx0YSI6MCwibmFtZSI6IlY4OlJlZ0V4cENhY2hlTWlzc2VzIiwidmFsdWUiOjZ9
LAorICAgICAgICB7ImRlbHRhIjo2MjYwLCJuYW1lIjoiVjg6VG90YWxFdmFsU2l6ZSIsInZhbHVl
IjoxMjYyMX0sCisgICAgICAgIHsiZGVsdGEiOjUwMjIxLCJuYW1lIjoiVjg6VG90YWxMb2FkU2l6
ZSIsInZhbHVlIjoyMTczNjJ9LAorICAgICAgICB7ImRlbHRhIjo2MzczNCwibmFtZSI6IlY4OlRv
dGFsUGFyc2VTaXplIiwidmFsdWUiOjI5OTEzNX0sCisgICAgICAgIHsiZGVsdGEiOjE1MTc0LCJu
YW1lIjoiVjg6VG90YWxQcmVwYXJzZVNraXBwZWQiLCJ2YWx1ZSI6NjE4MjR9LAorICAgICAgICB7
ImRlbHRhIjo2OTkzMiwibmFtZSI6IlY4OlRvdGFsQ29tcGlsZVNpemUiLCJ2YWx1ZSI6MzEzMDQ4
fSwKKyAgICAgICAgeyJkZWx0YSI6MjIsIm5hbWUiOiJWODpDb2RlU3R1YnMiLCJ2YWx1ZSI6MTE3
fSwKKyAgICAgICAgeyJkZWx0YSI6MTE4NSwibmFtZSI6IlY4OlRvdGFsU3R1YnNDb2RlU2l6ZSIs
InZhbHVlIjo2NDU2fSwKKyAgICAgICAgeyJkZWx0YSI6NDU5ODcsIm5hbWUiOiJWODpUb3RhbENv
bXBpbGVkQ29kZVNpemUiLCJ2YWx1ZSI6MTY5NTQ2fSwKKyAgICAgICAgeyJkZWx0YSI6MCwibmFt
ZSI6IlY4OkdDQ29tcGFjdG9yQ2F1c2VkQnlSZXF1ZXN0IiwidmFsdWUiOjB9LAorICAgICAgICB7
ImRlbHRhIjowLCJuYW1lIjoiVjg6R0NDb21wYWN0b3JDYXVzZWRCeVByb21vdGUiLCJ2YWx1ZSI6
MH0sCisgICAgICAgIHsiZGVsdGEiOjAsIm5hbWUiOiJWODpHQ0NvbXBhY3RvckNhdXNlZEJ5T2xk
c3BhYyIsInZhbHVlIjowfSwKKyAgICAgICAgeyJkZWx0YSI6MCwibmFtZSI6IlY4OkdDQ29tcGFj
dG9yQ2F1c2VkQnlXZWFrSGFuIiwidmFsdWUiOjB9LAorICAgICAgICB7ImRlbHRhIjowLCJuYW1l
IjoiVjg6R0NMYXN0UmVzb3J0RnJvbUpTIiwidmFsdWUiOjB9LAorICAgICAgICB7ImRlbHRhIjow
LCJuYW1lIjoiVjg6R0NMYXN0UmVzb3J0RnJvbUhhbmRsZXMiLCJ2YWx1ZSI6MH0sCisgICAgICAg
IHsiZGVsdGEiOjAsIm5hbWUiOiJWODpLZXllZExvYWRHZW5lcmljU21pIiwidmFsdWUiOjB9LAor
ICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoiVjg6S2V5ZWRMb2FkR2VuZXJpY1N5bWJvbCIsInZh
bHVlIjowfSwKKyAgICAgICAgeyJkZWx0YSI6MCwibmFtZSI6IlY4OktleWVkTG9hZEdlbmVyaWNT
bG93IiwidmFsdWUiOjB9LAorICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoiVjg6S2V5ZWRMb2Fk
RnVuY3Rpb25Qcm90b3R5cGUiLCJ2YWx1ZSI6MH0sCisgICAgICAgIHsiZGVsdGEiOjAsIm5hbWUi
OiJWODpLZXllZExvYWRTdHJpbmdMZW5ndGgiLCJ2YWx1ZSI6MH0sCisgICAgICAgIHsiZGVsdGEi
OjAsIm5hbWUiOiJWODpLZXllZExvYWRBcnJheUxlbmd0aCIsInZhbHVlIjowfSwKKyAgICAgICAg
eyJkZWx0YSI6MCwibmFtZSI6IlY4OktleWVkTG9hZENvbnN0YW50RnVuY3Rpb24iLCJ2YWx1ZSI6
MH0sCisgICAgICAgIHsiZGVsdGEiOjAsIm5hbWUiOiJWODpLZXllZExvYWRGaWVsZCIsInZhbHVl
IjowfSwKKyAgICAgICAgeyJkZWx0YSI6MCwibmFtZSI6IlY4OktleWVkTG9hZENhbGxiYWNrIiwi
dmFsdWUiOjB9LAorICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoiVjg6S2V5ZWRMb2FkSW50ZXJj
ZXB0b3IiLCJ2YWx1ZSI6MH0sCisgICAgICAgIHsiZGVsdGEiOjAsIm5hbWUiOiJWODpLZXllZFN0
b3JlRmllbGQiLCJ2YWx1ZSI6MH0sCisgICAgICAgIHsiZGVsdGEiOjAsIm5hbWUiOiJWODpGb3JJ
biIsInZhbHVlIjowfSwKKyAgICAgICAgeyJkZWx0YSI6MiwibmFtZSI6IlY4OkVudW1DYWNoZUhp
dHMiLCJ2YWx1ZSI6OX0sCisgICAgICAgIHsiZGVsdGEiOjQsIm5hbWUiOiJWODpFbnVtQ2FjaGVN
aXNzZXMiLCJ2YWx1ZSI6MjN9LAorICAgICAgICB7ImRlbHRhIjozNzI0LCJuYW1lIjoiVjg6UmVs
b2NJbmZvQ291bnQiLCJ2YWx1ZSI6MTgzNzR9LAorICAgICAgICB7ImRlbHRhIjo2MDgwLCJuYW1l
IjoiVjg6UmVsb2NJbmZvU2l6ZSIsInZhbHVlIjozMDI4N30sCisgICAgICAgIHsiZGVsdGEiOjAs
Im5hbWUiOiJIaXN0b3J5OkluaXRUaW1lIiwidGltZSI6MTIsInZhbHVlIjoxfSwKKyAgICAgICAg
eyJkZWx0YSI6MCwibmFtZSI6IiBIaXN0b3J5OkluaXRUaW1lTUFYIiwidmFsdWUiOjEyfSwKKyAg
ICAgICAgeyJkZWx0YSI6MSwibmFtZSI6Ikhpc3Rvcnk6R2V0RmF2SWNvbkZvclVSTCIsInRpbWUi
OjAsInZhbHVlIjoyMn0sCisgICAgICAgIHsiZGVsdGEiOjAsIm5hbWUiOiIgSGlzdG9yeTpHZXRG
YXZJY29uRm9yVVJMTUFYIiwidmFsdWUiOjB9LAorICAgICAgICB7ImRlbHRhIjoyLCJuYW1lIjoi
Vjg6UHJlUGFyc2UiLCJ0aW1lIjo5LCJ2YWx1ZSI6MTF9LAorICAgICAgICB7ImRlbHRhIjo5LCJu
YW1lIjoiVjg6UGFyc2UiLCJ0aW1lIjo5LCJ2YWx1ZSI6NTd9LAorICAgICAgICB7ImRlbHRhIjoz
LCJuYW1lIjoiVjg6Q29tcGlsZSIsInRpbWUiOjMsInZhbHVlIjoyMn0sCisgICAgICAgIHsiZGVs
dGEiOjQ5LCJuYW1lIjoiVjg6UGFyc2VMYXp5IiwidGltZSI6MTcsInZhbHVlIjoyMzF9LAorICAg
ICAgICB7ImRlbHRhIjo0NywibmFtZSI6IlY4OkNvbXBpbGVMYXp5IiwidGltZSI6MywidmFsdWUi
OjIyMX0sCisgICAgICAgIHsiZGVsdGEiOjEyLCJuYW1lIjoiVjg6R0NTY2F2ZW5nZXIiLCJ0aW1l
IjoxMywidmFsdWUiOjI4fSwKKyAgICAgICAgeyJkZWx0YSI6MCwibmFtZSI6Ik5ld1RhYlBhZ2U6
U2VhcmNoVVJMczpUb3RhbCIsInRpbWUiOjAsInZhbHVlIjoxfSwKKyAgICAgICAgeyJkZWx0YSI6
MCwibmFtZSI6IiBOZXdUYWJQYWdlOlNlYXJjaFVSTHM6VG90YWxNIiwidmFsdWUiOjB9LAorICAg
ICAgICB7ImRlbHRhIjo2LCJuYW1lIjoiVjg6Q29tcGlsZUV2YWwiLCJ0aW1lIjoxLCJ2YWx1ZSI6
MzV9LAorICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoiTWVtb3J5OkNhY2hlZEZvbnRBbmREQyIs
InRpbWUiOjMsInZhbHVlIjozfSwKKyAgICAgICAgeyJkZWx0YSI6MCwibmFtZSI6IiBNZW1vcnk6
Q2FjaGVkRm9udEFuZERDTUFYIiwidmFsdWUiOjJ9LAorICAgICAgICB7ImRlbHRhIjowLCJuYW1l
IjoiUmVzb3VyY2VMb2FkZXJXYWl0IiwidGltZSI6MTI5NiwidmFsdWUiOjQ4fSwKKyAgICAgICAg
eyJkZWx0YSI6MCwibmFtZSI6IiBSZXNvdXJjZUxvYWRlcldhaXRNQVgiLCJ2YWx1ZSI6NTV9LAor
ICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoiSGlzdG9yeTpHZXRQYWdlVGh1bWJuYWlsIiwidGlt
ZSI6MTUsInZhbHVlIjo5fSwKKyAgICAgICAgeyJkZWx0YSI6MCwibmFtZSI6IiBIaXN0b3J5Okdl
dFBhZ2VUaHVtYm5haWxNQVgiLCJ2YWx1ZSI6MTB9LAorICAgICAgICB7ImRlbHRhIjo5LCJuYW1l
IjoiTVBBcmNoOlJXSF9JbnB1dEV2ZW50RGVsdGEiLCJ0aW1lIjozMjcsInZhbHVlIjoxNzB9LAor
ICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoiIE1QQXJjaDpSV0hfSW5wdXRFdmVudERlbHRhTUEi
LCJ2YWx1ZSI6MTU0fSwKKyAgICAgICAgeyJkZWx0YSI6MCwibmFtZSI6Ik9tbmlib3g6UXVlcnlC
b29rbWFya3NUaW1lIiwidGltZSI6MiwidmFsdWUiOjQ0fSwKKyAgICAgICAgeyJkZWx0YSI6MCwi
bmFtZSI6IiBPbW5pYm94OlF1ZXJ5Qm9va21hcmtzVGltZU1BIiwidmFsdWUiOjF9LAorICAgICAg
ICB7ImRlbHRhIjowLCJuYW1lIjoiQ2hyb21lOkRlbGF5TXNnVUkiLCJ2YWx1ZSI6M30sCisgICAg
ICAgIHsiZGVsdGEiOjAsIm5hbWUiOiJBdXRvY29tcGxldGU6SGlzdG9yeUFzeW5jUXVlciIsInRp
bWUiOjM1MSwidmFsdWUiOjg2fSwKKyAgICAgICAgeyJkZWx0YSI6MCwibmFtZSI6IiBBdXRvY29t
cGxldGU6SGlzdG9yeUFzeW5jUXVlIiwidmFsdWUiOjEwfSwKKyAgICAgICAgeyJkZWx0YSI6MCwi
bmFtZSI6Ikhpc3Rvcnk6UXVlcnlIaXN0b3J5IiwidGltZSI6MTAxOCwidmFsdWUiOjQ0fSwKKyAg
ICAgICAgeyJkZWx0YSI6MCwibmFtZSI6IiBIaXN0b3J5OlF1ZXJ5SGlzdG9yeU1BWCIsInZhbHVl
IjoyMzN9LAorICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoiRGlza0NhY2hlOkdldEZpbGVGb3JO
ZXdCbG9jayIsInRpbWUiOjAsInZhbHVlIjozNH0sCisgICAgICAgIHsiZGVsdGEiOjAsIm5hbWUi
OiIgRGlza0NhY2hlOkdldEZpbGVGb3JOZXdCbG9jayIsInZhbHVlIjowfSwKKyAgICAgICAgeyJk
ZWx0YSI6MCwibmFtZSI6IkRpc2tDYWNoZTpDcmVhdGVCbG9jayIsInRpbWUiOjAsInZhbHVlIjoz
NH0sCisgICAgICAgIHsiZGVsdGEiOjAsIm5hbWUiOiIgRGlza0NhY2hlOkNyZWF0ZUJsb2NrTUFY
IiwidmFsdWUiOjB9LAorICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoiRGlza0NhY2hlOkNyZWF0
ZVRpbWUiLCJ0aW1lIjowLCJ2YWx1ZSI6MTB9LAorICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoi
IERpc2tDYWNoZTpDcmVhdGVUaW1lTUFYIiwidmFsdWUiOjB9LAorICAgICAgICB7ImRlbHRhIjow
LCJuYW1lIjoiRE5TOlByZWZldGNoUG9zaXRpdmVIaXRMIiwidGltZSI6MTA0OCwidmFsdWUiOjJ9
LAorICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoiIEROUzpQcmVmZXRjaFBvc2l0aXZlSGl0TE1B
WCIsInZhbHVlIjoxMDAyfSwKKyAgICAgICAgeyJkZWx0YSI6MCwibmFtZSI6IkRpc2tDYWNoZTpH
ZXRSYW5raW5ncyIsInRpbWUiOjAsInZhbHVlIjoyN30sCisgICAgICAgIHsiZGVsdGEiOjAsIm5h
bWUiOiIgRGlza0NhY2hlOkdldFJhbmtpbmdzTUFYIiwidmFsdWUiOjB9LAorICAgICAgICB7ImRl
bHRhIjowLCJuYW1lIjoiRGlza0NhY2hlOkRlbGV0ZUhlYWRlciIsInRpbWUiOjAsInZhbHVlIjoz
fSwKKyAgICAgICAgeyJkZWx0YSI6MCwibmFtZSI6IiBEaXNrQ2FjaGU6RGVsZXRlSGVhZGVyTUFY
IiwidmFsdWUiOjB9LAorICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoiRGlza0NhY2hlOkRlbGV0
ZURhdGEiLCJ0aW1lIjowLCJ2YWx1ZSI6M30sCisgICAgICAgIHsiZGVsdGEiOjAsIm5hbWUiOiIg
RGlza0NhY2hlOkRlbGV0ZURhdGFNQVgiLCJ2YWx1ZSI6MH0sCisgICAgICAgIHsiZGVsdGEiOjAs
Im5hbWUiOiJEaXNrQ2FjaGU6RGVsZXRlQmxvY2siLCJ0aW1lIjowLCJ2YWx1ZSI6Nn0sCisgICAg
ICAgIHsiZGVsdGEiOjAsIm5hbWUiOiIgRGlza0NhY2hlOkRlbGV0ZUJsb2NrTUFYIiwidmFsdWUi
OjB9LAorICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoiU2Vzc2lvblJlc3RvcmU6bGFzdF9zZXNz
aW9uX2YiLCJ0aW1lIjowLCJ2YWx1ZSI6MX0sCisgICAgICAgIHsiZGVsdGEiOjAsIm5hbWUiOiIg
U2Vzc2lvblJlc3RvcmU6bGFzdF9zZXNzaW9uXyIsInZhbHVlIjowfSwKKyAgICAgICAgeyJkZWx0
YSI6MywibmFtZSI6IlNlc3Npb25SZXN0b3JlOmNvbW1hbmRfc2l6ZSIsInRpbWUiOjI5NDAsInZh
bHVlIjozNn0sCisgICAgICAgIHsiZGVsdGEiOjAsIm5hbWUiOiIgU2Vzc2lvblJlc3RvcmU6Y29t
bWFuZF9zaXplTSIsInZhbHVlIjoyNzd9LAorICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoiRE5T
OkluZGVwZW5kZW50TmF2aWdhdGlvbiIsInRpbWUiOjIsInZhbHVlIjo0fSwKKyAgICAgICAgeyJk
ZWx0YSI6MCwibmFtZSI6IiBETlM6SW5kZXBlbmRlbnROYXZpZ2F0aW9uTUFYIiwidmFsdWUiOjF9
LAorICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoiRGlza0NhY2hlOlVwZGF0ZVJhbmsiLCJ0aW1l
IjoxLCJ2YWx1ZSI6MjV9LAorICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoiIERpc2tDYWNoZTpV
cGRhdGVSYW5rTUFYIiwidmFsdWUiOjF9LAorICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoiRGlz
a0NhY2hlOldyaXRlVGltZSIsInRpbWUiOjEsInZhbHVlIjoyMX0sCisgICAgICAgIHsiZGVsdGEi
OjAsIm5hbWUiOiIgRGlza0NhY2hlOldyaXRlVGltZU1BWCIsInZhbHVlIjoxfSwKKyAgICAgICAg
eyJkZWx0YSI6MCwibmFtZSI6Ik5ldDpUcmFuc2FjdGlvbl9MYXRlbmN5IiwidGltZSI6MTgzLCJ2
YWx1ZSI6N30sCisgICAgICAgIHsiZGVsdGEiOjAsIm5hbWUiOiIgTmV0OlRyYW5zYWN0aW9uX0xh
dGVuY3lNQVgiLCJ2YWx1ZSI6Mzd9LAorICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoiTmV0OlRy
YW5zYWN0aW9uX0JhbmR3aWR0aCIsInRpbWUiOjQwLCJ2YWx1ZSI6N30sCisgICAgICAgIHsiZGVs
dGEiOjAsIm5hbWUiOiIgTmV0OlRyYW5zYWN0aW9uX0JhbmR3aWR0aE1BWCIsInZhbHVlIjo4fSwK
KyAgICAgICAgeyJkZWx0YSI6MCwibmFtZSI6Ik5ld1RhYlVJIGxvYWQiLCJ0aW1lIjo1NjQsInZh
bHVlIjoxfSwKKyAgICAgICAgeyJkZWx0YSI6MCwibmFtZSI6IiBOZXdUYWJVSSBsb2FkTUFYIiwi
dmFsdWUiOjU2NH0sCisgICAgICAgIHsiZGVsdGEiOjAsIm5hbWUiOiJEaXNrQ2FjaGU6T3BlblRp
bWUiLCJ0aW1lIjowLCJ2YWx1ZSI6Mn0sCisgICAgICAgIHsiZGVsdGEiOjAsIm5hbWUiOiIgRGlz
a0NhY2hlOk9wZW5UaW1lTUFYIiwidmFsdWUiOjB9LAorICAgICAgICB7ImRlbHRhIjowLCJuYW1l
IjoiRGlza0NhY2hlOlJlYWRUaW1lIiwidGltZSI6MCwidmFsdWUiOjR9LAorICAgICAgICB7ImRl
bHRhIjowLCJuYW1lIjoiIERpc2tDYWNoZTpSZWFkVGltZU1BWCIsInZhbHVlIjowfSwKKyAgICAg
ICAgeyJkZWx0YSI6MCwibmFtZSI6Ik1QQXJjaDpSV0hIX1doaXRlb3V0RHVyYXRpb25fIiwidGlt
ZSI6MjcsInZhbHVlIjoxfSwKKyAgICAgICAgeyJkZWx0YSI6MCwibmFtZSI6IiBNUEFyY2g6UldI
SF9XaGl0ZW91dER1cmF0aW9uIiwidmFsdWUiOjI3fSwKKyAgICAgICAgeyJkZWx0YSI6MSwibmFt
ZSI6IkFzeW5jSU86SVBDQ2hhbm5lbENsb3NlIiwidGltZSI6MCwidmFsdWUiOjR9LAorICAgICAg
ICB7ImRlbHRhIjowLCJuYW1lIjoiIEFzeW5jSU86SVBDQ2hhbm5lbENsb3NlTUFYIiwidmFsdWUi
OjB9LAorICAgICAgICB7Im5hbWUiOiJHZXRIaXN0b3J5VGltZXIiLCJ0aW1lIjowfSwKKyAgICAg
ICAgeyJkZWx0YSI6MCwibmFtZSI6IkRpc2tDYWNoZTpFbnRyaWVzIiwidGltZSI6NywidmFsdWUi
OjF9LAorICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoiIERpc2tDYWNoZTpFbnRyaWVzTUFYIiwi
dmFsdWUiOjd9LAorICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoiRGlza0NhY2hlOlNpemUiLCJ0
aW1lIjowLCJ2YWx1ZSI6MX0sCisgICAgICAgIHsiZGVsdGEiOjAsIm5hbWUiOiIgRGlza0NhY2hl
OlNpemVNQVgiLCJ2YWx1ZSI6MH0sCisgICAgICAgIHsiZGVsdGEiOjAsIm5hbWUiOiJEaXNrQ2Fj
aGU6TWF4U2l6ZSIsInRpbWUiOjgwLCJ2YWx1ZSI6MX0sCisgICAgICAgIHsiZGVsdGEiOjAsIm5h
bWUiOiIgRGlza0NhY2hlOk1heFNpemVNQVgiLCJ2YWx1ZSI6ODB9LAorICAgICAgICB7ImRlbHRh
IjowLCJuYW1lIjoiSGlzdG9yeTpBZGRGVFNEYXRhIiwidGltZSI6MSwidmFsdWUiOjF9LAorICAg
ICAgICB7ImRlbHRhIjowLCJuYW1lIjoiIEhpc3Rvcnk6QWRkRlRTRGF0YU1BWCIsInZhbHVlIjox
fSwKKyAgICAgICAgeyJkZWx0YSI6MCwibmFtZSI6IkNocm9tZTpTbG93TXNnVUkiLCJ2YWx1ZSI6
MX0KKyAgICBdLAorICAgICJ0aW1lcnMiOlsKKyAgICAgICAgeyJuYW1lIjoiQ2hyb21lOkluaXQi
LCJ0aW1lIjo1fSwKKyAgICAgICAgeyJkZWx0YSI6MCwibmFtZSI6IlNodXRkb3duOndpbmRvd19j
bG9zZTp0aW1lIiwidGltZSI6MTExLCJ2YWx1ZSI6MX0sCisgICAgICAgIHsiZGVsdGEiOjAsIm5h
bWUiOiJTaHV0ZG93bjp3aW5kb3dfY2xvc2U6dGltZV9wZSIsInRpbWUiOjExMSwidmFsdWUiOjF9
LAorICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoiU2h1dGRvd246cmVuZGVyZXJzOnRvdGFsIiwi
dGltZSI6MSwidmFsdWUiOjF9LAorICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoiU2h1dGRvd246
cmVuZGVyZXJzOnNsb3ciLCJ0aW1lIjowLCJ2YWx1ZSI6MX0sCisgICAgICAgIHsiZGVsdGEiOjAs
Im5hbWUiOiJETlM6UHJlZmV0Y2hRdWV1ZSIsInRpbWUiOjIsInZhbHVlIjo2fSwKKyAgICAgICAg
eyJkZWx0YSI6MCwibmFtZSI6IkROUzpQcmVmZXRjaEZvdW5kTmFtZUwiLCJ0aW1lIjoxMDQ4LCJ2
YWx1ZSI6MTAwM30sCisgICAgICAgIHsiZGVsdGEiOjAsIm5hbWUiOiJTQjpRdWV1ZURlcHRoIiwi
dGltZSI6MCwidmFsdWUiOjF9LAorICAgICAgICB7ImRlbHRhIjo5OCwibmFtZSI6IkNocm9tZTpQ
cm9jTXNnTCBVSSIsInRpbWUiOjI3NzcsInZhbHVlIjoxMzc4fSwKKyAgICAgICAgeyJkZWx0YSI6
OTgsIm5hbWUiOiJDaHJvbWU6VG90YWxNc2dMIFVJIiwidGltZSI6NTcxNSwidmFsdWUiOjEzNzh9
LAorICAgICAgICB7Im5hbWUiOiJDaHJvbWU6UmVuZGVyZXJJbml0IiwidGltZSI6OX0sCisgICAg
ICAgIHsiZGVsdGEiOjAsIm5hbWUiOiJHZWFyczpMb2FkVGltZSIsInRpbWUiOjEsInZhbHVlIjox
fSwKKyAgICAgICAgeyJkZWx0YSI6MSwibmFtZSI6Im1pbWVfc25pZmZlcjpTaG91bGRTbmlmZk1p
bWVUIiwidGltZSI6MjcsInZhbHVlIjoyN30sCisgICAgICAgIHsiZGVsdGEiOjMsIm5hbWUiOiJS
ZXNvdXJjZUxvYWRTZXJ2ZXIiLCJ0aW1lIjoxMDY1LCJ2YWx1ZSI6NzN9LAorICAgICAgICB7ImRl
bHRhIjoxMSwibmFtZSI6IldlYkZyYW1lUGFpbnRUaW1lIiwidGltZSI6MjMyLCJ2YWx1ZSI6NDJ9
LAorICAgICAgICB7ImRlbHRhIjoxMSwibmFtZSI6Ik1QQXJjaDpSV0hfT25Nc2dQYWludFJlY3Qi
LCJ0aW1lIjoxMzYsInZhbHVlIjo0Mn0sCisgICAgICAgIHsiZGVsdGEiOjAsIm5hbWUiOiJIaXN0
b3J5OkluaXRUaW1lIiwidGltZSI6MTIsInZhbHVlIjoxfSwKKyAgICAgICAgeyJkZWx0YSI6MSwi
bmFtZSI6Ikhpc3Rvcnk6R2V0RmF2SWNvbkZvclVSTCIsInRpbWUiOjAsInZhbHVlIjoyMn0sCisg
ICAgICAgIHsiZGVsdGEiOjIsIm5hbWUiOiJWODpQcmVQYXJzZSIsInRpbWUiOjksInZhbHVlIjox
MX0sCisgICAgICAgIHsiZGVsdGEiOjksIm5hbWUiOiJWODpQYXJzZSIsInRpbWUiOjksInZhbHVl
Ijo1N30sCisgICAgICAgIHsiZGVsdGEiOjMsIm5hbWUiOiJWODpDb21waWxlIiwidGltZSI6Mywi
dmFsdWUiOjIyfSwKKyAgICAgICAgeyJkZWx0YSI6NDksIm5hbWUiOiJWODpQYXJzZUxhenkiLCJ0
aW1lIjoxNywidmFsdWUiOjIzMX0sCisgICAgICAgIHsiZGVsdGEiOjQ3LCJuYW1lIjoiVjg6Q29t
cGlsZUxhenkiLCJ0aW1lIjozLCJ2YWx1ZSI6MjIxfSwKKyAgICAgICAgeyJkZWx0YSI6MTIsIm5h
bWUiOiJWODpHQ1NjYXZlbmdlciIsInRpbWUiOjEzLCJ2YWx1ZSI6Mjh9LAorICAgICAgICB7ImRl
bHRhIjowLCJuYW1lIjoiTmV3VGFiUGFnZTpTZWFyY2hVUkxzOlRvdGFsIiwidGltZSI6MCwidmFs
dWUiOjF9LAorICAgICAgICB7ImRlbHRhIjo2LCJuYW1lIjoiVjg6Q29tcGlsZUV2YWwiLCJ0aW1l
IjoxLCJ2YWx1ZSI6MzV9LAorICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoiTWVtb3J5OkNhY2hl
ZEZvbnRBbmREQyIsInRpbWUiOjMsInZhbHVlIjozfSwKKyAgICAgICAgeyJkZWx0YSI6MCwibmFt
ZSI6IlJlc291cmNlTG9hZGVyV2FpdCIsInRpbWUiOjEyOTYsInZhbHVlIjo0OH0sCisgICAgICAg
IHsiZGVsdGEiOjAsIm5hbWUiOiJIaXN0b3J5OkdldFBhZ2VUaHVtYm5haWwiLCJ0aW1lIjoxNSwi
dmFsdWUiOjl9LAorICAgICAgICB7ImRlbHRhIjo5LCJuYW1lIjoiTVBBcmNoOlJXSF9JbnB1dEV2
ZW50RGVsdGEiLCJ0aW1lIjozMjcsInZhbHVlIjoxNzB9LAorICAgICAgICB7ImRlbHRhIjowLCJu
YW1lIjoiT21uaWJveDpRdWVyeUJvb2ttYXJrc1RpbWUiLCJ0aW1lIjoyLCJ2YWx1ZSI6NDR9LAor
ICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoiQXV0b2NvbXBsZXRlOkhpc3RvcnlBc3luY1F1ZXIi
LCJ0aW1lIjozNTEsInZhbHVlIjo4Nn0sCisgICAgICAgIHsiZGVsdGEiOjAsIm5hbWUiOiJIaXN0
b3J5OlF1ZXJ5SGlzdG9yeSIsInRpbWUiOjEwMTgsInZhbHVlIjo0NH0sCisgICAgICAgIHsiZGVs
dGEiOjAsIm5hbWUiOiJEaXNrQ2FjaGU6R2V0RmlsZUZvck5ld0Jsb2NrIiwidGltZSI6MCwidmFs
dWUiOjM0fSwKKyAgICAgICAgeyJkZWx0YSI6MCwibmFtZSI6IkRpc2tDYWNoZTpDcmVhdGVCbG9j
ayIsInRpbWUiOjAsInZhbHVlIjozNH0sCisgICAgICAgIHsiZGVsdGEiOjAsIm5hbWUiOiJEaXNr
Q2FjaGU6Q3JlYXRlVGltZSIsInRpbWUiOjAsInZhbHVlIjoxMH0sCisgICAgICAgIHsiZGVsdGEi
OjAsIm5hbWUiOiJETlM6UHJlZmV0Y2hQb3NpdGl2ZUhpdEwiLCJ0aW1lIjoxMDQ4LCJ2YWx1ZSI6
Mn0sCisgICAgICAgIHsiZGVsdGEiOjAsIm5hbWUiOiJEaXNrQ2FjaGU6R2V0UmFua2luZ3MiLCJ0
aW1lIjowLCJ2YWx1ZSI6Mjd9LAorICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoiRGlza0NhY2hl
OkRlbGV0ZUhlYWRlciIsInRpbWUiOjAsInZhbHVlIjozfSwKKyAgICAgICAgeyJkZWx0YSI6MCwi
bmFtZSI6IkRpc2tDYWNoZTpEZWxldGVEYXRhIiwidGltZSI6MCwidmFsdWUiOjN9LAorICAgICAg
ICB7ImRlbHRhIjowLCJuYW1lIjoiRGlza0NhY2hlOkRlbGV0ZUJsb2NrIiwidGltZSI6MCwidmFs
dWUiOjZ9LAorICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoiU2Vzc2lvblJlc3RvcmU6bGFzdF9z
ZXNzaW9uX2YiLCJ0aW1lIjowLCJ2YWx1ZSI6MX0sCisgICAgICAgIHsiZGVsdGEiOjMsIm5hbWUi
OiJTZXNzaW9uUmVzdG9yZTpjb21tYW5kX3NpemUiLCJ0aW1lIjoyOTQwLCJ2YWx1ZSI6MzZ9LAor
ICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoiRE5TOkluZGVwZW5kZW50TmF2aWdhdGlvbiIsInRp
bWUiOjIsInZhbHVlIjo0fSwKKyAgICAgICAgeyJkZWx0YSI6MCwibmFtZSI6IkRpc2tDYWNoZTpV
cGRhdGVSYW5rIiwidGltZSI6MSwidmFsdWUiOjI1fSwKKyAgICAgICAgeyJkZWx0YSI6MCwibmFt
ZSI6IkRpc2tDYWNoZTpXcml0ZVRpbWUiLCJ0aW1lIjoxLCJ2YWx1ZSI6MjF9LAorICAgICAgICB7
ImRlbHRhIjowLCJuYW1lIjoiTmV0OlRyYW5zYWN0aW9uX0xhdGVuY3kiLCJ0aW1lIjoxODMsInZh
bHVlIjo3fSwKKyAgICAgICAgeyJkZWx0YSI6MCwibmFtZSI6Ik5ldDpUcmFuc2FjdGlvbl9CYW5k
d2lkdGgiLCJ0aW1lIjo0MCwidmFsdWUiOjd9LAorICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoi
TmV3VGFiVUkgbG9hZCIsInRpbWUiOjU2NCwidmFsdWUiOjF9LAorICAgICAgICB7ImRlbHRhIjow
LCJuYW1lIjoiRGlza0NhY2hlOk9wZW5UaW1lIiwidGltZSI6MCwidmFsdWUiOjJ9LAorICAgICAg
ICB7ImRlbHRhIjowLCJuYW1lIjoiRGlza0NhY2hlOlJlYWRUaW1lIiwidGltZSI6MCwidmFsdWUi
OjR9LAorICAgICAgICB7ImRlbHRhIjowLCJuYW1lIjoiTVBBcmNoOlJXSEhfV2hpdGVvdXREdXJh
dGlvbl8iLCJ0aW1lIjoyNywidmFsdWUiOjF9LAorICAgICAgICB7ImRlbHRhIjoxLCJuYW1lIjoi
QXN5bmNJTzpJUENDaGFubmVsQ2xvc2UiLCJ0aW1lIjowLCJ2YWx1ZSI6NH0sCisgICAgICAgIHsi
bmFtZSI6IkdldEhpc3RvcnlUaW1lciIsInRpbWUiOjB9LAorICAgICAgICB7ImRlbHRhIjowLCJu
YW1lIjoiRGlza0NhY2hlOkVudHJpZXMiLCJ0aW1lIjo3LCJ2YWx1ZSI6MX0sCisgICAgICAgIHsi
ZGVsdGEiOjAsIm5hbWUiOiJEaXNrQ2FjaGU6U2l6ZSIsInRpbWUiOjAsInZhbHVlIjoxfSwKKyAg
ICAgICAgeyJkZWx0YSI6MCwibmFtZSI6IkRpc2tDYWNoZTpNYXhTaXplIiwidGltZSI6ODAsInZh
bHVlIjoxfSwKKyAgICAgICAgeyJkZWx0YSI6MCwibmFtZSI6Ikhpc3Rvcnk6QWRkRlRTRGF0YSIs
InRpbWUiOjEsInZhbHVlIjoxfQorICAgIF19KTsKKyAgICBqc3RQcm9jZXNzKGN4LCB0cCk7Cit9
CisKK3ZhciBUZW1wbGF0ZVRlc3QgPSBuZXcgQmVuY2htYXJrU3VpdGUoJ1RlbXBsYXRlJywgW25l
dyBCZW5jaG1hcmsoIlRlbXBsYXRlIixUZW1wbGF0ZVRlc3QpXSk7CkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL3Jlc291cmNlcy9ydW5uZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0
cy9yZXNvdXJjZXMvcnVubmVyLmpzCShyZXZpc2lvbiAxMDU3NDApCisrKyBQZXJmb3JtYW5jZVRl
c3RzL3Jlc291cmNlcy9ydW5uZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTgwLDEwICs4MCwxNSBA
QCBmdW5jdGlvbiBydW5Mb29wKCkKIH0KIAogZnVuY3Rpb24gcnVuKCkgewotICAgIHZhciBzdGFy
dCA9IG5ldyBEYXRlKCk7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3aW5kb3cubG9vcHNQZXJS
dW47ICsraSkKLSAgICAgICAgd2luZG93LnJ1bkZ1bmN0aW9uKCk7Ci0gICAgdmFyIHRpbWUgPSBu
ZXcgRGF0ZSgpIC0gc3RhcnQ7CisgICAgaWYgKHdpbmRvdy5jdXN0b21SdW5GdW5jdGlvbikKKyAg
ICAgICAgdmFyIHRpbWUgPSB3aW5kb3cuY3VzdG9tUnVuRnVuY3Rpb24oKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgdmFyIHN0YXJ0ID0gbmV3IERhdGUoKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCB3aW5kb3cubG9vcHNQZXJSdW47ICsraSkKKyAgICAgICAgICAgIHdpbmRvdy5ydW5GdW5j
dGlvbigpOworICAgICAgICB2YXIgdGltZSA9IG5ldyBEYXRlKCkgLSBzdGFydDsKKyAgICB9CisK
ICAgICB3aW5kb3cuY29tcGxldGVkUnVucysrOwogICAgIGlmICh3aW5kb3cuY29tcGxldGVkUnVu
cyA8PSAwKSB7CiAgICAgICAgIGxvZygiSWdub3Jpbmcgd2FybS11cCBydW4gKCIgKyB0aW1lICsg
IikiKTsKQEAgLTEwNCw2ICsxMDksMTYgQEAgZnVuY3Rpb24gc3RhcnQocnVuQ291bnQsIHJ1bkZ1
bmN0aW9uLCBsbwogICAgIHJ1bkxvb3AoKTsKIH0KIAorZnVuY3Rpb24gc3RhcnRDdXN0b20ocnVu
Q291bnQsIGN1c3RvbVJ1bkZ1bmN0aW9uLCBkb25lRnVuY3Rpb24pIHsKKyAgICB3aW5kb3cucnVu
Q291bnQgPSBydW5Db3VudDsKKyAgICB3aW5kb3cuY3VzdG9tUnVuRnVuY3Rpb24gPSBjdXN0b21S
dW5GdW5jdGlvbjsKKyAgICB3aW5kb3cubG9vcHNQZXJSdW4gPSAxOworICAgIHdpbmRvdy5kb25l
RnVuY3Rpb24gPSBkb25lRnVuY3Rpb24gfHwgZnVuY3Rpb24oKSB7fTsKKworICAgIGxvZygiUnVu
bmluZyAiICsgcnVuQ291bnQgKyAiIHRpbWVzIik7CisgICAgcnVuTG9vcCgpOworfQorCiBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
d2FpdFVudGlsRG9uZSgpOwogICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsK
</data>
<flag name="review"
          id="125480"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>