<?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>172213</bug_id>
          
          <creation_ts>2017-05-17 01:57:23 -0700</creation_ts>
          <short_desc>Speedometer: check-in missing React TodoMVC dependency</short_desc>
          <delta_ts>2017-05-18 20:03:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit 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>170513</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Addy Osmani">addyo</reporter>
          <assigned_to name="Addy Osmani">addyo</assigned_to>
          <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>lforschler</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1309507</commentid>
    <comment_count>0</comment_count>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-05-17 01:57:23 -0700</bug_when>
    <thetext>Missing director.js dependencies must be added back in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309508</commentid>
    <comment_count>1</comment_count>
      <attachid>310361</attachid>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-05-17 02:00:09 -0700</bug_when>
    <thetext>Created attachment 310361
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309550</commentid>
    <comment_count>2</comment_count>
      <attachid>310361</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2017-05-17 04:32:48 -0700</bug_when>
    <thetext>Comment on attachment 310361
Patch

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

r=me, but consider using director.min.js.

&gt; PerformanceTests/Speedometer/resources/todomvc/architecture-examples/react/index.html:17
&gt; +    &lt;script src=&quot;node_modules/director/director.js&quot;&gt;&lt;/script&gt;

Don&apos;t you want to use director.min.js here to match other resources?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309643</commentid>
    <comment_count>3</comment_count>
      <attachid>310401</attachid>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-05-17 09:46:13 -0700</bug_when>
    <thetext>Created attachment 310401
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309695</commentid>
    <comment_count>4</comment_count>
      <attachid>310401</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2017-05-17 11:28:06 -0700</bug_when>
    <thetext>Comment on attachment 310401
Patch

Missing the added files, so the ChangeLog entry is wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309762</commentid>
    <comment_count>5</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2017-05-17 12:59:44 -0700</bug_when>
    <thetext>(In reply to David Kilzer (:ddkilzer) from comment #4)
&gt; Comment on attachment 310401 [details]
&gt; Patch
&gt; 
&gt; Missing the added files, so the ChangeLog entry is wrong.

And I assume you want to add the files still?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1310356</commentid>
    <comment_count>6</comment_count>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-05-18 17:29:27 -0700</bug_when>
    <thetext>Yes. Please excuse the missing file - unsure what is dropping `build` directories locally (checked gitignores). I&apos;m going to update this and double check the dependency is definitely in there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1310368</commentid>
    <comment_count>7</comment_count>
      <attachid>310582</attachid>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-05-18 17:46:11 -0700</bug_when>
    <thetext>Created attachment 310582
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1310405</commentid>
    <comment_count>8</comment_count>
      <attachid>310582</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-05-18 19:52:50 -0700</bug_when>
    <thetext>Comment on attachment 310582
Patch

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1310415</commentid>
    <comment_count>9</comment_count>
      <attachid>310582</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-05-18 20:03:56 -0700</bug_when>
    <thetext>Comment on attachment 310582
Patch

Clearing flags on attachment: 310582

Committed r217088: &lt;http://trac.webkit.org/changeset/217088&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1310416</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-05-18 20:03:58 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>310361</attachid>
            <date>2017-05-17 02:00:09 -0700</date>
            <delta_ts>2017-05-17 09:46:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-172213-20170517020008.patch</filename>
            <type>text/plain</type>
            <size>34753</size>
            <attacher name="Addy Osmani">addyo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2OTcxCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGEwYzcyZmM0Yzk2
MThjZGQyOGI2MjJlNTZkYjZiOWJlMTRkMGYwYTIuLmY5YjFiN2IwOTg5OTYxMzljYjMxN2EwMTY3
M2ZiOTdhOTE0Nzk2MTAgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTctMDUt
MTcgIEFkZHkgT3NtYW5pICA8YWRkeW9zbWFuaUBnbWFpbC5jb20+CisKKyAgICAgICAgU3BlZWRv
bWV0ZXI6IGNoZWNrLWluIG1pc3NpbmcgUmVhY3QgVG9kb01WQyBkZXBlbmRlbmN5CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIyMTMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgICogU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2luZGV4
Lmh0bWw6IEZpeCBwYXRoIHRvIGRpcmVjdG9yLmpzLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMv
ZGlyZWN0b3IvZGlyZWN0b3IuanM6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvZGly
ZWN0b3IvZGlyZWN0b3IubWluLmpzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL2Rp
cmVjdG9yL2VuZGVyLmpzOiBBZGRlZC4KKwogMjAxNy0wNS0xNiAgQWRkeSBPc21hbmkgIDxhZGR5
b3NtYW5pQGdtYWlsLmNvbT4KIAogICAgICAgICBVcGRhdGUgdG8gU3BlZWRvbWV0ZXIgMi4wIHcv
dXBkYXRlZCBmcmFtZXdvcmtzICsgbmV3IHdvcmtsb2FkcwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvcmVhY3QvaW5kZXguaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2luZGV4Lmh0bWwKaW5kZXgg
MjllNTYxNmJhYTYwMzZhNjViZWFmYzhmMGYwMDkzOWFiNWQwY2U3YS4uY2IwYjU0MWE2YTQ2ZDkx
MDEzNGEzNzYyNTc2ZDZlYzg0ZGI2MDcyOSAxMDA2NDQKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qv
aW5kZXguaHRtbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9pbmRleC5odG1sCkBAIC0xNCw3ICsx
NCw3IEBACiAgICAgICAgIDwvZm9vdGVyPgogCiAgICAgPHNjcmlwdCBzcmM9Im5vZGVfbW9kdWxl
cy9jbGFzc25hbWVzL2luZGV4LmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHNyYz0ibm9kZV9t
b2R1bGVzL2RpcmVjdG9yL2J1aWxkL2RpcmVjdG9yLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0ibm9kZV9tb2R1bGVzL2RpcmVjdG9yL2RpcmVjdG9yLmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHNyYz0ibm9kZV9tb2R1bGVzL3JlYWN0L2Rpc3QvcmVhY3Qtd2l0aC1hZGRvbnMubWlu
LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0ibm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9k
aXN0L3JlYWN0LWRvbS5taW4uanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJidWlsZC5t
aW4uanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1
bGVzL2RpcmVjdG9yL2RpcmVjdG9yLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVz
L2RpcmVjdG9yL2RpcmVjdG9yLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEwMzg4Nzg3MjM1YjcxYzBmNWNiOTY3
ZTc5NWMyYzY2OWE1NmYzNjkKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9u
b2RlX21vZHVsZXMvZGlyZWN0b3IvZGlyZWN0b3IuanMKQEAgLTAsMCArMSw3MjUgQEAKKworCisv
LworLy8gR2VuZXJhdGVkIG9uIFR1ZSBEZWMgMTYgMjAxNCAxMjoxMzo0NyBHTVQrMDEwMCAoQ0VU
KSBieSBDaGFybGllIFJvYmJpbnMsIFBhb2xvIEZyYWdvbWVuaSAmIHRoZSBDb250cmlidXRvcnMg
KFVzaW5nIENvZGVzdXJnZW9uKS4KKy8vIFZlcnNpb24gMS4yLjYKKy8vCisKKyhmdW5jdGlvbiAo
ZXhwb3J0cykgeworCisvKgorICogYnJvd3Nlci5qczogQnJvd3NlciBzcGVjaWZpYyBmdW5jdGlv
bmFsaXR5IGZvciBkaXJlY3Rvci4KKyAqCisgKiAoQykgMjAxMSwgQ2hhcmxpZSBSb2JiaW5zLCBQ
YW9sbyBGcmFnb21lbmksICYgdGhlIENvbnRyaWJ1dG9ycy4KKyAqIE1JVCBMSUNFTlNFCisgKgor
ICovCisKK3ZhciBkbG9jID0gZG9jdW1lbnQubG9jYXRpb247CisKK2Z1bmN0aW9uIGRsb2NIYXNo
RW1wdHkoKSB7CisgIC8vIE5vbi1JRSBicm93c2VycyByZXR1cm4gJycgd2hlbiB0aGUgYWRkcmVz
cyBiYXIgc2hvd3MgJyMnOyBEaXJlY3RvcidzIGxvZ2ljCisgIC8vIGFzc3VtZXMgYm90aCBtZWFu
IGVtcHR5LgorICByZXR1cm4gZGxvYy5oYXNoID09PSAnJyB8fCBkbG9jLmhhc2ggPT09ICcjJzsK
K30KKwordmFyIGxpc3RlbmVyID0geworICBtb2RlOiAnbW9kZXJuJywKKyAgaGFzaDogZGxvYy5o
YXNoLAorICBoaXN0b3J5OiBmYWxzZSwKKworICBjaGVjazogZnVuY3Rpb24gKCkgeworICAgIHZh
ciBoID0gZGxvYy5oYXNoOworICAgIGlmIChoICE9IHRoaXMuaGFzaCkgeworICAgICAgdGhpcy5o
YXNoID0gaDsKKyAgICAgIHRoaXMub25IYXNoQ2hhbmdlZCgpOworICAgIH0KKyAgfSwKKworICBm
aXJlOiBmdW5jdGlvbiAoKSB7CisgICAgaWYgKHRoaXMubW9kZSA9PT0gJ21vZGVybicpIHsKKyAg
ICAgIHRoaXMuaGlzdG9yeSA9PT0gdHJ1ZSA/IHdpbmRvdy5vbnBvcHN0YXRlKCkgOiB3aW5kb3cu
b25oYXNoY2hhbmdlKCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgdGhpcy5vbkhhc2hDaGFu
Z2VkKCk7CisgICAgfQorICB9LAorCisgIGluaXQ6IGZ1bmN0aW9uIChmbiwgaGlzdG9yeSkgewor
ICAgIHZhciBzZWxmID0gdGhpczsKKyAgICB0aGlzLmhpc3RvcnkgPSBoaXN0b3J5OworCisgICAg
aWYgKCFSb3V0ZXIubGlzdGVuZXJzKSB7CisgICAgICBSb3V0ZXIubGlzdGVuZXJzID0gW107Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gb25jaGFuZ2Uob25DaGFuZ2VFdmVudCkgeworICAgICAgZm9y
ICh2YXIgaSA9IDAsIGwgPSBSb3V0ZXIubGlzdGVuZXJzLmxlbmd0aDsgaSA8IGw7IGkrKykgewor
ICAgICAgICBSb3V0ZXIubGlzdGVuZXJzW2ldKG9uQ2hhbmdlRXZlbnQpOworICAgICAgfQorICAg
IH0KKworICAgIC8vbm90ZSBJRTggaXMgYmVpbmcgY291bnRlZCBhcyAnbW9kZXJuJyBiZWNhdXNl
IGl0IGhhcyB0aGUgaGFzaGNoYW5nZSBldmVudAorICAgIGlmICgnb25oYXNoY2hhbmdlJyBpbiB3
aW5kb3cgJiYgKGRvY3VtZW50LmRvY3VtZW50TW9kZSA9PT0gdW5kZWZpbmVkCisgICAgICB8fCBk
b2N1bWVudC5kb2N1bWVudE1vZGUgPiA3KSkgeworICAgICAgLy8gQXQgbGVhc3QgZm9yIG5vdyBI
VE1MNSBoaXN0b3J5IGlzIGF2YWlsYWJsZSBmb3IgJ21vZGVybicgYnJvd3NlcnMgb25seQorICAg
ICAgaWYgKHRoaXMuaGlzdG9yeSA9PT0gdHJ1ZSkgeworICAgICAgICAvLyBUaGVyZSBpcyBhbiBv
bGQgYnVnIGluIENocm9tZSB0aGF0IGNhdXNlcyBvbnBvcHN0YXRlIHRvIGZpcmUgZXZlbgorICAg
ICAgICAvLyB1cG9uIGluaXRpYWwgcGFnZSBsb2FkLiBTaW5jZSB0aGUgaGFuZGxlciBpcyBydW4g
bWFudWFsbHkgaW4gaW5pdCgpLAorICAgICAgICAvLyB0aGlzIHdvdWxkIGNhdXNlIENocm9tZSB0
byBydW4gaXQgdHdpc2UuIEN1cnJlbnRseSB0aGUgb25seQorICAgICAgICAvLyB3b3JrYXJvdW5k
IHNlZW1zIHRvIGJlIHRvIHNldCB0aGUgaGFuZGxlciBhZnRlciB0aGUgaW5pdGlhbCBwYWdlIGxv
YWQKKyAgICAgICAgLy8gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9k
ZXRhaWw/aWQ9NjMwNDAKKyAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAg
ICB3aW5kb3cub25wb3BzdGF0ZSA9IG9uY2hhbmdlOworICAgICAgICB9LCA1MDApOworICAgICAg
fQorICAgICAgZWxzZSB7CisgICAgICAgIHdpbmRvdy5vbmhhc2hjaGFuZ2UgPSBvbmNoYW5nZTsK
KyAgICAgIH0KKyAgICAgIHRoaXMubW9kZSA9ICdtb2Rlcm4nOworICAgIH0KKyAgICBlbHNlIHsK
KyAgICAgIC8vCisgICAgICAvLyBJRSBzdXBwb3J0LCBiYXNlZCBvbiBhIGNvbmNlcHQgYnkgRXJp
ayBBcnZpZHNvbiAuLi4KKyAgICAgIC8vCisgICAgICB2YXIgZnJhbWUgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdpZnJhbWUnKTsKKyAgICAgIGZyYW1lLmlkID0gJ3N0YXRlLWZyYW1lJzsKKyAg
ICAgIGZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgICBkb2N1bWVudC5ib2R5LmFw
cGVuZENoaWxkKGZyYW1lKTsKKyAgICAgIHRoaXMud3JpdGVGcmFtZSgnJyk7CisKKyAgICAgIGlm
ICgnb25wcm9wZXJ0eWNoYW5nZScgaW4gZG9jdW1lbnQgJiYgJ2F0dGFjaEV2ZW50JyBpbiBkb2N1
bWVudCkgeworICAgICAgICBkb2N1bWVudC5hdHRhY2hFdmVudCgnb25wcm9wZXJ0eWNoYW5nZScs
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICBpZiAoZXZlbnQucHJvcGVydHlOYW1lID09PSAnbG9j
YXRpb24nKSB7CisgICAgICAgICAgICBzZWxmLmNoZWNrKCk7CisgICAgICAgICAgfQorICAgICAg
ICB9KTsKKyAgICAgIH0KKworICAgICAgd2luZG93LnNldEludGVydmFsKGZ1bmN0aW9uICgpIHsg
c2VsZi5jaGVjaygpOyB9LCA1MCk7CisKKyAgICAgIHRoaXMub25IYXNoQ2hhbmdlZCA9IG9uY2hh
bmdlOworICAgICAgdGhpcy5tb2RlID0gJ2xlZ2FjeSc7CisgICAgfQorCisgICAgUm91dGVyLmxp
c3RlbmVycy5wdXNoKGZuKTsKKworICAgIHJldHVybiB0aGlzLm1vZGU7CisgIH0sCisKKyAgZGVz
dHJveTogZnVuY3Rpb24gKGZuKSB7CisgICAgaWYgKCFSb3V0ZXIgfHwgIVJvdXRlci5saXN0ZW5l
cnMpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIgbGlzdGVuZXJzID0gUm91dGVy
Lmxpc3RlbmVyczsKKworICAgIGZvciAodmFyIGkgPSBsaXN0ZW5lcnMubGVuZ3RoIC0gMTsgaSA+
PSAwOyBpLS0pIHsKKyAgICAgIGlmIChsaXN0ZW5lcnNbaV0gPT09IGZuKSB7CisgICAgICAgIGxp
c3RlbmVycy5zcGxpY2UoaSwgMSk7CisgICAgICB9CisgICAgfQorICB9LAorCisgIHNldEhhc2g6
IGZ1bmN0aW9uIChzKSB7CisgICAgLy8gTW96aWxsYSBhbHdheXMgYWRkcyBhbiBlbnRyeSB0byB0
aGUgaGlzdG9yeQorICAgIGlmICh0aGlzLm1vZGUgPT09ICdsZWdhY3knKSB7CisgICAgICB0aGlz
LndyaXRlRnJhbWUocyk7CisgICAgfQorCisgICAgaWYgKHRoaXMuaGlzdG9yeSA9PT0gdHJ1ZSkg
eworICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKHt9LCBkb2N1bWVudC50aXRsZSwgcyk7
CisgICAgICAvLyBGaXJlIGFuIG9ucG9wc3RhdGUgZXZlbnQgbWFudWFsbHkgc2luY2UgcHVzaGlu
ZyBkb2VzIG5vdCBvYnZpb3VzbHkKKyAgICAgIC8vIHRyaWdnZXIgdGhlIHBvcCBldmVudC4KKyAg
ICAgIHRoaXMuZmlyZSgpOworICAgIH0gZWxzZSB7CisgICAgICBkbG9jLmhhc2ggPSAoc1swXSA9
PT0gJy8nKSA/IHMgOiAnLycgKyBzOworICAgIH0KKyAgICByZXR1cm4gdGhpczsKKyAgfSwKKwor
ICB3cml0ZUZyYW1lOiBmdW5jdGlvbiAocykgeworICAgIC8vIElFIHN1cHBvcnQuLi4KKyAgICB2
YXIgZiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGF0ZS1mcmFtZScpOworICAgIHZhciBk
ID0gZi5jb250ZW50RG9jdW1lbnQgfHwgZi5jb250ZW50V2luZG93LmRvY3VtZW50OworICAgIGQu
b3BlbigpOworICAgIGQud3JpdGUoIjxzY3JpcHQ+X2hhc2ggPSAnIiArIHMgKyAiJzsgb25sb2Fk
ID0gcGFyZW50Lmxpc3RlbmVyLnN5bmNIYXNoOzxzY3JpcHQ+Iik7CisgICAgZC5jbG9zZSgpOwor
ICB9LAorCisgIHN5bmNIYXNoOiBmdW5jdGlvbiAoKSB7CisgICAgLy8gSUUgc3VwcG9ydC4uLgor
ICAgIHZhciBzID0gdGhpcy5faGFzaDsKKyAgICBpZiAocyAhPSBkbG9jLmhhc2gpIHsKKyAgICAg
IGRsb2MuaGFzaCA9IHM7CisgICAgfQorICAgIHJldHVybiB0aGlzOworICB9LAorCisgIG9uSGFz
aENoYW5nZWQ6IGZ1bmN0aW9uICgpIHt9Cit9OworCit2YXIgUm91dGVyID0gZXhwb3J0cy5Sb3V0
ZXIgPSBmdW5jdGlvbiAocm91dGVzKSB7CisgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSb3V0ZXIp
KSByZXR1cm4gbmV3IFJvdXRlcihyb3V0ZXMpOworCisgIHRoaXMucGFyYW1zICAgPSB7fTsKKyAg
dGhpcy5yb3V0ZXMgICA9IHt9OworICB0aGlzLm1ldGhvZHMgID0gWydvbicsICdvbmNlJywgJ2Fm
dGVyJywgJ2JlZm9yZSddOworICB0aGlzLnNjb3BlICAgID0gW107CisgIHRoaXMuX21ldGhvZHMg
PSB7fTsKKworICB0aGlzLl9pbnNlcnQgPSB0aGlzLmluc2VydDsKKyAgdGhpcy5pbnNlcnQgPSB0
aGlzLmluc2VydEV4OworCisgIHRoaXMuaGlzdG9yeVN1cHBvcnQgPSAod2luZG93Lmhpc3Rvcnkg
IT0gbnVsbCA/IHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSA6IG51bGwpICE9IG51bGwKKworICB0
aGlzLmNvbmZpZ3VyZSgpOworICB0aGlzLm1vdW50KHJvdXRlcyB8fCB7fSk7Cit9OworCitSb3V0
ZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAocikgeworICB2YXIgc2VsZiA9IHRoaXMKKyAg
ICAsIHJvdXRlVG87CisgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uKG9uQ2hhbmdlRXZlbnQpIHsK
KyAgICB2YXIgbmV3VVJMID0gb25DaGFuZ2VFdmVudCAmJiBvbkNoYW5nZUV2ZW50Lm5ld1VSTCB8
fCB3aW5kb3cubG9jYXRpb24uaGFzaDsKKyAgICB2YXIgdXJsID0gc2VsZi5oaXN0b3J5ID09PSB0
cnVlID8gc2VsZi5nZXRQYXRoKCkgOiBuZXdVUkwucmVwbGFjZSgvLiojLywgJycpOworICAgIHNl
bGYuZGlzcGF0Y2goJ29uJywgdXJsLmNoYXJBdCgwKSA9PT0gJy8nID8gdXJsIDogJy8nICsgdXJs
KTsKKyAgfTsKKworICBsaXN0ZW5lci5pbml0KHRoaXMuaGFuZGxlciwgdGhpcy5oaXN0b3J5KTsK
KworICBpZiAodGhpcy5oaXN0b3J5ID09PSBmYWxzZSkgeworICAgIGlmIChkbG9jSGFzaEVtcHR5
KCkgJiYgcikgeworICAgICAgZGxvYy5oYXNoID0gcjsKKyAgICB9IGVsc2UgaWYgKCFkbG9jSGFz
aEVtcHR5KCkpIHsKKyAgICAgIHNlbGYuZGlzcGF0Y2goJ29uJywgJy8nICsgZGxvYy5oYXNoLnJl
cGxhY2UoL14oI1wvfCN8XC8pLywgJycpKTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgaWYg
KHRoaXMuY29udmVydF9oYXNoX2luX2luaXQpIHsKKyAgICAgIC8vIFVzZSBoYXNoIGFzIHJvdXRl
CisgICAgICByb3V0ZVRvID0gZGxvY0hhc2hFbXB0eSgpICYmIHIgPyByIDogIWRsb2NIYXNoRW1w
dHkoKSA/IGRsb2MuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6IG51bGw7CisgICAgICBpZiAocm91
dGVUbykgeworICAgICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoe30sIGRvY3VtZW50
LnRpdGxlLCByb3V0ZVRvKTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvLyBV
c2UgY2Fub25pY2FsIHVybAorICAgICAgcm91dGVUbyA9IHRoaXMuZ2V0UGF0aCgpOworICAgIH0K
KworICAgIC8vIFJvdXRlciBoYXMgYmVlbiBpbml0aWFsaXplZCwgYnV0IGR1ZSB0byB0aGUgY2hy
b21lIGJ1ZyBpdCB3aWxsIG5vdAorICAgIC8vIHlldCBhY3R1YWxseSByb3V0ZSBIVE1MNSBoaXN0
b3J5IHN0YXRlIGNoYW5nZXMuIFRodXMsIGRlY2lkZSBpZiBzaG91bGQgcm91dGUuCisgICAgaWYg
KHJvdXRlVG8gfHwgdGhpcy5ydW5faW5faW5pdCA9PT0gdHJ1ZSkgeworICAgICAgdGhpcy5oYW5k
bGVyKCk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHRoaXM7Cit9OworCitSb3V0ZXIucHJvdG90
eXBlLmV4cGxvZGUgPSBmdW5jdGlvbiAoKSB7CisgIHZhciB2ID0gdGhpcy5oaXN0b3J5ID09PSB0
cnVlID8gdGhpcy5nZXRQYXRoKCkgOiBkbG9jLmhhc2g7CisgIGlmICh2LmNoYXJBdCgxKSA9PT0g
Jy8nKSB7IHY9di5zbGljZSgxKSB9CisgIHJldHVybiB2LnNsaWNlKDEsIHYubGVuZ3RoKS5zcGxp
dCgiLyIpOworfTsKKworUm91dGVyLnByb3RvdHlwZS5zZXRSb3V0ZSA9IGZ1bmN0aW9uIChpLCB2
LCB2YWwpIHsKKyAgdmFyIHVybCA9IHRoaXMuZXhwbG9kZSgpOworCisgIGlmICh0eXBlb2YgaSA9
PT0gJ251bWJlcicgJiYgdHlwZW9mIHYgPT09ICdzdHJpbmcnKSB7CisgICAgdXJsW2ldID0gdjsK
KyAgfQorICBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykgeworICAgIHVybC5zcGxp
Y2UoaSwgdiwgcyk7CisgIH0KKyAgZWxzZSB7CisgICAgdXJsID0gW2ldOworICB9CisKKyAgbGlz
dGVuZXIuc2V0SGFzaCh1cmwuam9pbignLycpKTsKKyAgcmV0dXJuIHVybDsKK307CisKKy8vCisv
LyAjIyMgZnVuY3Rpb24gaW5zZXJ0RXgobWV0aG9kLCBwYXRoLCByb3V0ZSwgcGFyZW50KQorLy8g
IyMjIyBAbWV0aG9kIHtzdHJpbmd9IE1ldGhvZCB0byBpbnNlcnQgdGhlIHNwZWNpZmljIGByb3V0
ZWAuCisvLyAjIyMjIEBwYXRoIHtBcnJheX0gUGFyc2VkIHBhdGggdG8gaW5zZXJ0IHRoZSBgcm91
dGVgIGF0LgorLy8gIyMjIyBAcm91dGUge0FycmF5fGZ1bmN0aW9ufSBSb3V0ZSBoYW5kbGVycyB0
byBpbnNlcnQuCisvLyAjIyMjIEBwYXJlbnQge09iamVjdH0gKipPcHRpb25hbCoqIFBhcmVudCAi
cm91dGVzIiB0byBpbnNlcnQgaW50by4KKy8vIGluc2VydCBhIGNhbGxiYWNrIHRoYXQgd2lsbCBv
bmx5IG9jY3VyIG9uY2UgcGVyIHRoZSBtYXRjaGVkIHJvdXRlLgorLy8KK1JvdXRlci5wcm90b3R5
cGUuaW5zZXJ0RXggPSBmdW5jdGlvbihtZXRob2QsIHBhdGgsIHJvdXRlLCBwYXJlbnQpIHsKKyAg
aWYgKG1ldGhvZCA9PT0gIm9uY2UiKSB7CisgICAgbWV0aG9kID0gIm9uIjsKKyAgICByb3V0ZSA9
IGZ1bmN0aW9uKHJvdXRlKSB7CisgICAgICB2YXIgb25jZSA9IGZhbHNlOworICAgICAgcmV0dXJu
IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAob25jZSkgcmV0dXJuOworICAgICAgICBvbmNlID0g
dHJ1ZTsKKyAgICAgICAgcmV0dXJuIHJvdXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAg
ICB9OworICAgIH0ocm91dGUpOworICB9CisgIHJldHVybiB0aGlzLl9pbnNlcnQobWV0aG9kLCBw
YXRoLCByb3V0ZSwgcGFyZW50KTsKK307CisKK1JvdXRlci5wcm90b3R5cGUuZ2V0Um91dGUgPSBm
dW5jdGlvbiAodikgeworICB2YXIgcmV0ID0gdjsKKworICBpZiAodHlwZW9mIHYgPT09ICJudW1i
ZXIiKSB7CisgICAgcmV0ID0gdGhpcy5leHBsb2RlKClbdl07CisgIH0KKyAgZWxzZSBpZiAodHlw
ZW9mIHYgPT09ICJzdHJpbmciKXsKKyAgICB2YXIgaCA9IHRoaXMuZXhwbG9kZSgpOworICAgIHJl
dCA9IGguaW5kZXhPZih2KTsKKyAgfQorICBlbHNlIHsKKyAgICByZXQgPSB0aGlzLmV4cGxvZGUo
KTsKKyAgfQorCisgIHJldHVybiByZXQ7Cit9OworCitSb3V0ZXIucHJvdG90eXBlLmRlc3Ryb3kg
PSBmdW5jdGlvbiAoKSB7CisgIGxpc3RlbmVyLmRlc3Ryb3kodGhpcy5oYW5kbGVyKTsKKyAgcmV0
dXJuIHRoaXM7Cit9OworCitSb3V0ZXIucHJvdG90eXBlLmdldFBhdGggPSBmdW5jdGlvbiAoKSB7
CisgIHZhciBwYXRoID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lOworICBpZiAocGF0aC5zdWJz
dHIoMCwgMSkgIT09ICcvJykgeworICAgIHBhdGggPSAnLycgKyBwYXRoOworICB9CisgIHJldHVy
biBwYXRoOworfTsKK2Z1bmN0aW9uIF9ldmVyeShhcnIsIGl0ZXJhdG9yKSB7CisgIGZvciAodmFy
IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7CisgICAgaWYgKGl0ZXJhdG9yKGFycltp
XSwgaSwgYXJyKSA9PT0gZmFsc2UpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIH0KK30KKwor
ZnVuY3Rpb24gX2ZsYXR0ZW4oYXJyKSB7CisgIHZhciBmbGF0ID0gW107CisgIGZvciAodmFyIGkg
PSAwLCBuID0gYXJyLmxlbmd0aDsgaSA8IG47IGkrKykgeworICAgIGZsYXQgPSBmbGF0LmNvbmNh
dChhcnJbaV0pOworICB9CisgIHJldHVybiBmbGF0OworfQorCitmdW5jdGlvbiBfYXN5bmNFdmVy
eVNlcmllcyhhcnIsIGl0ZXJhdG9yLCBjYWxsYmFjaykgeworICBpZiAoIWFyci5sZW5ndGgpIHsK
KyAgICByZXR1cm4gY2FsbGJhY2soKTsKKyAgfQorICB2YXIgY29tcGxldGVkID0gMDsKKyAgKGZ1
bmN0aW9uIGl0ZXJhdGUoKSB7CisgICAgaXRlcmF0b3IoYXJyW2NvbXBsZXRlZF0sIGZ1bmN0aW9u
KGVycikgeworICAgICAgaWYgKGVyciB8fCBlcnIgPT09IGZhbHNlKSB7CisgICAgICAgIGNhbGxi
YWNrKGVycik7CisgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24oKSB7fTsKKyAgICAgIH0gZWxz
ZSB7CisgICAgICAgIGNvbXBsZXRlZCArPSAxOworICAgICAgICBpZiAoY29tcGxldGVkID09PSBh
cnIubGVuZ3RoKSB7CisgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICBpdGVyYXRlKCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9KTsKKyAgfSkoKTsK
K30KKworZnVuY3Rpb24gcGFyYW1pZnlTdHJpbmcoc3RyLCBwYXJhbXMsIG1vZCkgeworICBtb2Qg
PSBzdHI7CisgIGZvciAodmFyIHBhcmFtIGluIHBhcmFtcykgeworICAgIGlmIChwYXJhbXMuaGFz
T3duUHJvcGVydHkocGFyYW0pKSB7CisgICAgICBtb2QgPSBwYXJhbXNbcGFyYW1dKHN0cik7Cisg
ICAgICBpZiAobW9kICE9PSBzdHIpIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQor
ICB9CisgIHJldHVybiBtb2QgPT09IHN0ciA/ICIoWy5fYS16QS1aMC05LSUoKV0rKSIgOiBtb2Q7
Cit9CisKK2Z1bmN0aW9uIHJlZ2lmeVN0cmluZyhzdHIsIHBhcmFtcykgeworICB2YXIgbWF0Y2hl
cywgbGFzdCA9IDAsIG91dCA9ICIiOworICB3aGlsZSAobWF0Y2hlcyA9IHN0ci5zdWJzdHIobGFz
dCkubWF0Y2goL1teXHdcZFwtICVAJl0qXCpbXlx3XGRcLSAlQCZdKi8pKSB7CisgICAgbGFzdCA9
IG1hdGNoZXMuaW5kZXggKyBtYXRjaGVzWzBdLmxlbmd0aDsKKyAgICBtYXRjaGVzWzBdID0gbWF0
Y2hlc1swXS5yZXBsYWNlKC9eXCovLCAiKFtfLigpIVxcICVAJmEtekEtWjAtOS1dKykiKTsKKyAg
ICBvdXQgKz0gc3RyLnN1YnN0cigwLCBtYXRjaGVzLmluZGV4KSArIG1hdGNoZXNbMF07CisgIH0K
KyAgc3RyID0gb3V0ICs9IHN0ci5zdWJzdHIobGFzdCk7CisgIHZhciBjYXB0dXJlcyA9IHN0ci5t
YXRjaCgvOihbXlwvXSspL2lnKSwgY2FwdHVyZSwgbGVuZ3RoOworICBpZiAoY2FwdHVyZXMpIHsK
KyAgICBsZW5ndGggPSBjYXB0dXJlcy5sZW5ndGg7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykgeworICAgICAgY2FwdHVyZSA9IGNhcHR1cmVzW2ldOworICAgICAgaWYgKGNh
cHR1cmUuc2xpY2UoMCwgMikgPT09ICI6OiIpIHsKKyAgICAgICAgc3RyID0gY2FwdHVyZS5zbGlj
ZSgxKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKGNhcHR1cmUs
IHBhcmFtaWZ5U3RyaW5nKGNhcHR1cmUsIHBhcmFtcykpOworICAgICAgfQorICAgIH0KKyAgfQor
ICByZXR1cm4gc3RyOworfQorCitmdW5jdGlvbiB0ZXJtaW5hdG9yKHJvdXRlcywgZGVsaW1pdGVy
LCBzdGFydCwgc3RvcCkgeworICB2YXIgbGFzdCA9IDAsIGxlZnQgPSAwLCByaWdodCA9IDAsIHN0
YXJ0ID0gKHN0YXJ0IHx8ICIoIikudG9TdHJpbmcoKSwgc3RvcCA9IChzdG9wIHx8ICIpIikudG9T
dHJpbmcoKSwgaTsKKyAgZm9yIChpID0gMDsgaSA8IHJvdXRlcy5sZW5ndGg7IGkrKykgeworICAg
IHZhciBjaHVuayA9IHJvdXRlc1tpXTsKKyAgICBpZiAoY2h1bmsuaW5kZXhPZihzdGFydCwgbGFz
dCkgPiBjaHVuay5pbmRleE9mKHN0b3AsIGxhc3QpIHx8IH5jaHVuay5pbmRleE9mKHN0YXJ0LCBs
YXN0KSAmJiAhfmNodW5rLmluZGV4T2Yoc3RvcCwgbGFzdCkgfHwgIX5jaHVuay5pbmRleE9mKHN0
YXJ0LCBsYXN0KSAmJiB+Y2h1bmsuaW5kZXhPZihzdG9wLCBsYXN0KSkgeworICAgICAgbGVmdCA9
IGNodW5rLmluZGV4T2Yoc3RhcnQsIGxhc3QpOworICAgICAgcmlnaHQgPSBjaHVuay5pbmRleE9m
KHN0b3AsIGxhc3QpOworICAgICAgaWYgKH5sZWZ0ICYmICF+cmlnaHQgfHwgIX5sZWZ0ICYmIH5y
aWdodCkgeworICAgICAgICB2YXIgdG1wID0gcm91dGVzLnNsaWNlKDAsIChpIHx8IDEpICsgMSku
am9pbihkZWxpbWl0ZXIpOworICAgICAgICByb3V0ZXMgPSBbIHRtcCBdLmNvbmNhdChyb3V0ZXMu
c2xpY2UoKGkgfHwgMSkgKyAxKSk7CisgICAgICB9CisgICAgICBsYXN0ID0gKHJpZ2h0ID4gbGVm
dCA/IHJpZ2h0IDogbGVmdCkgKyAxOworICAgICAgaSA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAg
IGxhc3QgPSAwOworICAgIH0KKyAgfQorICByZXR1cm4gcm91dGVzOworfQorCit2YXIgUVVFUllf
U0VQQVJBVE9SID0gL1w/LiovOworCitSb3V0ZXIucHJvdG90eXBlLmNvbmZpZ3VyZSA9IGZ1bmN0
aW9uKG9wdGlvbnMpIHsKKyAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CisgIGZvciAodmFyIGkg
PSAwOyBpIDwgdGhpcy5tZXRob2RzLmxlbmd0aDsgaSsrKSB7CisgICAgdGhpcy5fbWV0aG9kc1t0
aGlzLm1ldGhvZHNbaV1dID0gdHJ1ZTsKKyAgfQorICB0aGlzLnJlY3Vyc2UgPSBvcHRpb25zLnJl
Y3Vyc2UgfHwgdGhpcy5yZWN1cnNlIHx8IGZhbHNlOworICB0aGlzLmFzeW5jID0gb3B0aW9ucy5h
c3luYyB8fCBmYWxzZTsKKyAgdGhpcy5kZWxpbWl0ZXIgPSBvcHRpb25zLmRlbGltaXRlciB8fCAi
LyI7CisgIHRoaXMuc3RyaWN0ID0gdHlwZW9mIG9wdGlvbnMuc3RyaWN0ID09PSAidW5kZWZpbmVk
IiA/IHRydWUgOiBvcHRpb25zLnN0cmljdDsKKyAgdGhpcy5ub3Rmb3VuZCA9IG9wdGlvbnMubm90
Zm91bmQ7CisgIHRoaXMucmVzb3VyY2UgPSBvcHRpb25zLnJlc291cmNlOworICB0aGlzLmhpc3Rv
cnkgPSBvcHRpb25zLmh0bWw1aGlzdG9yeSAmJiB0aGlzLmhpc3RvcnlTdXBwb3J0IHx8IGZhbHNl
OworICB0aGlzLnJ1bl9pbl9pbml0ID0gdGhpcy5oaXN0b3J5ID09PSB0cnVlICYmIG9wdGlvbnMu
cnVuX2hhbmRsZXJfaW5faW5pdCAhPT0gZmFsc2U7CisgIHRoaXMuY29udmVydF9oYXNoX2luX2lu
aXQgPSB0aGlzLmhpc3RvcnkgPT09IHRydWUgJiYgb3B0aW9ucy5jb252ZXJ0X2hhc2hfaW5faW5p
dCAhPT0gZmFsc2U7CisgIHRoaXMuZXZlcnkgPSB7CisgICAgYWZ0ZXI6IG9wdGlvbnMuYWZ0ZXIg
fHwgbnVsbCwKKyAgICBiZWZvcmU6IG9wdGlvbnMuYmVmb3JlIHx8IG51bGwsCisgICAgb246IG9w
dGlvbnMub24gfHwgbnVsbAorICB9OworICByZXR1cm4gdGhpczsKK307CisKK1JvdXRlci5wcm90
b3R5cGUucGFyYW0gPSBmdW5jdGlvbih0b2tlbiwgbWF0Y2hlcikgeworICBpZiAodG9rZW5bMF0g
IT09ICI6IikgeworICAgIHRva2VuID0gIjoiICsgdG9rZW47CisgIH0KKyAgdmFyIGNvbXBpbGVk
ID0gbmV3IFJlZ0V4cCh0b2tlbiwgImciKTsKKyAgdGhpcy5wYXJhbXNbdG9rZW5dID0gZnVuY3Rp
b24oc3RyKSB7CisgICAgcmV0dXJuIHN0ci5yZXBsYWNlKGNvbXBpbGVkLCBtYXRjaGVyLnNvdXJj
ZSB8fCBtYXRjaGVyKTsKKyAgfTsKKyAgcmV0dXJuIHRoaXM7Cit9OworCitSb3V0ZXIucHJvdG90
eXBlLm9uID0gUm91dGVyLnByb3RvdHlwZS5yb3V0ZSA9IGZ1bmN0aW9uKG1ldGhvZCwgcGF0aCwg
cm91dGUpIHsKKyAgdmFyIHNlbGYgPSB0aGlzOworICBpZiAoIXJvdXRlICYmIHR5cGVvZiBwYXRo
ID09ICJmdW5jdGlvbiIpIHsKKyAgICByb3V0ZSA9IHBhdGg7CisgICAgcGF0aCA9IG1ldGhvZDsK
KyAgICBtZXRob2QgPSAib24iOworICB9CisgIGlmIChBcnJheS5pc0FycmF5KHBhdGgpKSB7Cisg
ICAgcmV0dXJuIHBhdGguZm9yRWFjaChmdW5jdGlvbihwKSB7CisgICAgICBzZWxmLm9uKG1ldGhv
ZCwgcCwgcm91dGUpOworICAgIH0pOworICB9CisgIGlmIChwYXRoLnNvdXJjZSkgeworICAgIHBh
dGggPSBwYXRoLnNvdXJjZS5yZXBsYWNlKC9cXFwvL2lnLCAiLyIpOworICB9CisgIGlmIChBcnJh
eS5pc0FycmF5KG1ldGhvZCkpIHsKKyAgICByZXR1cm4gbWV0aG9kLmZvckVhY2goZnVuY3Rpb24o
bSkgeworICAgICAgc2VsZi5vbihtLnRvTG93ZXJDYXNlKCksIHBhdGgsIHJvdXRlKTsKKyAgICB9
KTsKKyAgfQorICBwYXRoID0gcGF0aC5zcGxpdChuZXcgUmVnRXhwKHRoaXMuZGVsaW1pdGVyKSk7
CisgIHBhdGggPSB0ZXJtaW5hdG9yKHBhdGgsIHRoaXMuZGVsaW1pdGVyKTsKKyAgdGhpcy5pbnNl
cnQobWV0aG9kLCB0aGlzLnNjb3BlLmNvbmNhdChwYXRoKSwgcm91dGUpOworfTsKKworUm91dGVy
LnByb3RvdHlwZS5wYXRoID0gZnVuY3Rpb24ocGF0aCwgcm91dGVzRm4pIHsKKyAgdmFyIHNlbGYg
PSB0aGlzLCBsZW5ndGggPSB0aGlzLnNjb3BlLmxlbmd0aDsKKyAgaWYgKHBhdGguc291cmNlKSB7
CisgICAgcGF0aCA9IHBhdGguc291cmNlLnJlcGxhY2UoL1xcXC8vaWcsICIvIik7CisgIH0KKyAg
cGF0aCA9IHBhdGguc3BsaXQobmV3IFJlZ0V4cCh0aGlzLmRlbGltaXRlcikpOworICBwYXRoID0g
dGVybWluYXRvcihwYXRoLCB0aGlzLmRlbGltaXRlcik7CisgIHRoaXMuc2NvcGUgPSB0aGlzLnNj
b3BlLmNvbmNhdChwYXRoKTsKKyAgcm91dGVzRm4uY2FsbCh0aGlzLCB0aGlzKTsKKyAgdGhpcy5z
Y29wZS5zcGxpY2UobGVuZ3RoLCBwYXRoLmxlbmd0aCk7Cit9OworCitSb3V0ZXIucHJvdG90eXBl
LmRpc3BhdGNoID0gZnVuY3Rpb24obWV0aG9kLCBwYXRoLCBjYWxsYmFjaykgeworICB2YXIgc2Vs
ZiA9IHRoaXMsIGZucyA9IHRoaXMudHJhdmVyc2UobWV0aG9kLCBwYXRoLnJlcGxhY2UoUVVFUllf
U0VQQVJBVE9SLCAiIiksIHRoaXMucm91dGVzLCAiIiksIGludm9rZWQgPSB0aGlzLl9pbnZva2Vk
LCBhZnRlcjsKKyAgdGhpcy5faW52b2tlZCA9IHRydWU7CisgIGlmICghZm5zIHx8IGZucy5sZW5n
dGggPT09IDApIHsKKyAgICB0aGlzLmxhc3QgPSBbXTsKKyAgICBpZiAodHlwZW9mIHRoaXMubm90
Zm91bmQgPT09ICJmdW5jdGlvbiIpIHsKKyAgICAgIHRoaXMuaW52b2tlKFsgdGhpcy5ub3Rmb3Vu
ZCBdLCB7CisgICAgICAgIG1ldGhvZDogbWV0aG9kLAorICAgICAgICBwYXRoOiBwYXRoCisgICAg
ICB9LCBjYWxsYmFjayk7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBpZiAodGhp
cy5yZWN1cnNlID09PSAiZm9yd2FyZCIpIHsKKyAgICBmbnMgPSBmbnMucmV2ZXJzZSgpOworICB9
CisgIGZ1bmN0aW9uIHVwZGF0ZUFuZEludm9rZSgpIHsKKyAgICBzZWxmLmxhc3QgPSBmbnMuYWZ0
ZXI7CisgICAgc2VsZi5pbnZva2Uoc2VsZi5ydW5saXN0KGZucyksIHNlbGYsIGNhbGxiYWNrKTsK
KyAgfQorICBhZnRlciA9IHRoaXMuZXZlcnkgJiYgdGhpcy5ldmVyeS5hZnRlciA/IFsgdGhpcy5l
dmVyeS5hZnRlciBdLmNvbmNhdCh0aGlzLmxhc3QpIDogWyB0aGlzLmxhc3QgXTsKKyAgaWYgKGFm
dGVyICYmIGFmdGVyLmxlbmd0aCA+IDAgJiYgaW52b2tlZCkgeworICAgIGlmICh0aGlzLmFzeW5j
KSB7CisgICAgICB0aGlzLmludm9rZShhZnRlciwgdGhpcywgdXBkYXRlQW5kSW52b2tlKTsKKyAg
ICB9IGVsc2UgeworICAgICAgdGhpcy5pbnZva2UoYWZ0ZXIsIHRoaXMpOworICAgICAgdXBkYXRl
QW5kSW52b2tlKCk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworICB9CisgIHVwZGF0ZUFuZElu
dm9rZSgpOworICByZXR1cm4gdHJ1ZTsKK307CisKK1JvdXRlci5wcm90b3R5cGUuaW52b2tlID0g
ZnVuY3Rpb24oZm5zLCB0aGlzQXJnLCBjYWxsYmFjaykgeworICB2YXIgc2VsZiA9IHRoaXM7Cisg
IHZhciBhcHBseTsKKyAgaWYgKHRoaXMuYXN5bmMpIHsKKyAgICBhcHBseSA9IGZ1bmN0aW9uKGZu
LCBuZXh0KSB7CisgICAgICBpZiAoQXJyYXkuaXNBcnJheShmbikpIHsKKyAgICAgICAgcmV0dXJu
IF9hc3luY0V2ZXJ5U2VyaWVzKGZuLCBhcHBseSwgbmV4dCk7CisgICAgICB9IGVsc2UgaWYgKHR5
cGVvZiBmbiA9PSAiZnVuY3Rpb24iKSB7CisgICAgICAgIGZuLmFwcGx5KHRoaXNBcmcsIChmbnMu
Y2FwdHVyZXMgfHwgW10pLmNvbmNhdChuZXh0KSk7CisgICAgICB9CisgICAgfTsKKyAgICBfYXN5
bmNFdmVyeVNlcmllcyhmbnMsIGFwcGx5LCBmdW5jdGlvbigpIHsKKyAgICAgIGlmIChjYWxsYmFj
aykgeworICAgICAgICBjYWxsYmFjay5hcHBseSh0aGlzQXJnLCBhcmd1bWVudHMpOworICAgICAg
fQorICAgIH0pOworICB9IGVsc2UgeworICAgIGFwcGx5ID0gZnVuY3Rpb24oZm4pIHsKKyAgICAg
IGlmIChBcnJheS5pc0FycmF5KGZuKSkgeworICAgICAgICByZXR1cm4gX2V2ZXJ5KGZuLCBhcHBs
eSk7CisgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmbiA9PT0gImZ1bmN0aW9uIikgeworICAgICAg
ICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgZm5zLmNhcHR1cmVzIHx8IFtdKTsKKyAgICAgIH0g
ZWxzZSBpZiAodHlwZW9mIGZuID09PSAic3RyaW5nIiAmJiBzZWxmLnJlc291cmNlKSB7CisgICAg
ICAgIHNlbGYucmVzb3VyY2VbZm5dLmFwcGx5KHRoaXNBcmcsIGZucy5jYXB0dXJlcyB8fCBbXSk7
CisgICAgICB9CisgICAgfTsKKyAgICBfZXZlcnkoZm5zLCBhcHBseSk7CisgIH0KK307CisKK1Jv
dXRlci5wcm90b3R5cGUudHJhdmVyc2UgPSBmdW5jdGlvbihtZXRob2QsIHBhdGgsIHJvdXRlcywg
cmVnZXhwLCBmaWx0ZXIpIHsKKyAgdmFyIGZucyA9IFtdLCBjdXJyZW50LCBleGFjdCwgbWF0Y2gs
IG5leHQsIHRoYXQ7CisgIGZ1bmN0aW9uIGZpbHRlclJvdXRlcyhyb3V0ZXMpIHsKKyAgICBpZiAo
IWZpbHRlcikgeworICAgICAgcmV0dXJuIHJvdXRlczsKKyAgICB9CisgICAgZnVuY3Rpb24gZGVl
cENvcHkoc291cmNlKSB7CisgICAgICB2YXIgcmVzdWx0ID0gW107CisgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7IGkrKykgeworICAgICAgICByZXN1bHRbaV0gPSBBcnJh
eS5pc0FycmF5KHNvdXJjZVtpXSkgPyBkZWVwQ29weShzb3VyY2VbaV0pIDogc291cmNlW2ldOwor
ICAgICAgfQorICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgZnVuY3Rpb24gYXBwbHlG
aWx0ZXIoZm5zKSB7CisgICAgICBmb3IgKHZhciBpID0gZm5zLmxlbmd0aCAtIDE7IGkgPj0gMDsg
aS0tKSB7CisgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZuc1tpXSkpIHsKKyAgICAgICAgICBh
cHBseUZpbHRlcihmbnNbaV0pOworICAgICAgICAgIGlmIChmbnNbaV0ubGVuZ3RoID09PSAwKSB7
CisgICAgICAgICAgICBmbnMuc3BsaWNlKGksIDEpOworICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICBpZiAoIWZpbHRlcihmbnNbaV0pKSB7CisgICAgICAgICAgICBmbnMu
c3BsaWNlKGksIDEpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAg
ICB2YXIgbmV3Um91dGVzID0gZGVlcENvcHkocm91dGVzKTsKKyAgICBuZXdSb3V0ZXMubWF0Y2hl
ZCA9IHJvdXRlcy5tYXRjaGVkOworICAgIG5ld1JvdXRlcy5jYXB0dXJlcyA9IHJvdXRlcy5jYXB0
dXJlczsKKyAgICBuZXdSb3V0ZXMuYWZ0ZXIgPSByb3V0ZXMuYWZ0ZXIuZmlsdGVyKGZpbHRlcik7
CisgICAgYXBwbHlGaWx0ZXIobmV3Um91dGVzKTsKKyAgICByZXR1cm4gbmV3Um91dGVzOworICB9
CisgIGlmIChwYXRoID09PSB0aGlzLmRlbGltaXRlciAmJiByb3V0ZXNbbWV0aG9kXSkgeworICAg
IG5leHQgPSBbIFsgcm91dGVzLmJlZm9yZSwgcm91dGVzW21ldGhvZF0gXS5maWx0ZXIoQm9vbGVh
bikgXTsKKyAgICBuZXh0LmFmdGVyID0gWyByb3V0ZXMuYWZ0ZXIgXS5maWx0ZXIoQm9vbGVhbik7
CisgICAgbmV4dC5tYXRjaGVkID0gdHJ1ZTsKKyAgICBuZXh0LmNhcHR1cmVzID0gW107CisgICAg
cmV0dXJuIGZpbHRlclJvdXRlcyhuZXh0KTsKKyAgfQorICBmb3IgKHZhciByIGluIHJvdXRlcykg
eworICAgIGlmIChyb3V0ZXMuaGFzT3duUHJvcGVydHkocikgJiYgKCF0aGlzLl9tZXRob2RzW3Jd
IHx8IHRoaXMuX21ldGhvZHNbcl0gJiYgdHlwZW9mIHJvdXRlc1tyXSA9PT0gIm9iamVjdCIgJiYg
IUFycmF5LmlzQXJyYXkocm91dGVzW3JdKSkpIHsKKyAgICAgIGN1cnJlbnQgPSBleGFjdCA9IHJl
Z2V4cCArIHRoaXMuZGVsaW1pdGVyICsgcjsKKyAgICAgIGlmICghdGhpcy5zdHJpY3QpIHsKKyAg
ICAgICAgZXhhY3QgKz0gIlsiICsgdGhpcy5kZWxpbWl0ZXIgKyAiXT8iOworICAgICAgfQorICAg
ICAgbWF0Y2ggPSBwYXRoLm1hdGNoKG5ldyBSZWdFeHAoIl4iICsgZXhhY3QpKTsKKyAgICAgIGlm
ICghbWF0Y2gpIHsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgICBpZiAobWF0Y2hb
MF0gJiYgbWF0Y2hbMF0gPT0gcGF0aCAmJiByb3V0ZXNbcl1bbWV0aG9kXSkgeworICAgICAgICBu
ZXh0ID0gWyBbIHJvdXRlc1tyXS5iZWZvcmUsIHJvdXRlc1tyXVttZXRob2RdIF0uZmlsdGVyKEJv
b2xlYW4pIF07CisgICAgICAgIG5leHQuYWZ0ZXIgPSBbIHJvdXRlc1tyXS5hZnRlciBdLmZpbHRl
cihCb29sZWFuKTsKKyAgICAgICAgbmV4dC5tYXRjaGVkID0gdHJ1ZTsKKyAgICAgICAgbmV4dC5j
YXB0dXJlcyA9IG1hdGNoLnNsaWNlKDEpOworICAgICAgICBpZiAodGhpcy5yZWN1cnNlICYmIHJv
dXRlcyA9PT0gdGhpcy5yb3V0ZXMpIHsKKyAgICAgICAgICBuZXh0LnB1c2goWyByb3V0ZXMuYmVm
b3JlLCByb3V0ZXMub24gXS5maWx0ZXIoQm9vbGVhbikpOworICAgICAgICAgIG5leHQuYWZ0ZXIg
PSBuZXh0LmFmdGVyLmNvbmNhdChbIHJvdXRlcy5hZnRlciBdLmZpbHRlcihCb29sZWFuKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZpbHRlclJvdXRlcyhuZXh0KTsKKyAgICAgIH0KKyAg
ICAgIG5leHQgPSB0aGlzLnRyYXZlcnNlKG1ldGhvZCwgcGF0aCwgcm91dGVzW3JdLCBjdXJyZW50
KTsKKyAgICAgIGlmIChuZXh0Lm1hdGNoZWQpIHsKKyAgICAgICAgaWYgKG5leHQubGVuZ3RoID4g
MCkgeworICAgICAgICAgIGZucyA9IGZucy5jb25jYXQobmV4dCk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHRoaXMucmVjdXJzZSkgeworICAgICAgICAgIGZucy5wdXNoKFsgcm91dGVzW3JdLmJl
Zm9yZSwgcm91dGVzW3JdLm9uIF0uZmlsdGVyKEJvb2xlYW4pKTsKKyAgICAgICAgICBuZXh0LmFm
dGVyID0gbmV4dC5hZnRlci5jb25jYXQoWyByb3V0ZXNbcl0uYWZ0ZXIgXS5maWx0ZXIoQm9vbGVh
bikpOworICAgICAgICAgIGlmIChyb3V0ZXMgPT09IHRoaXMucm91dGVzKSB7CisgICAgICAgICAg
ICBmbnMucHVzaChbIHJvdXRlc1siYmVmb3JlIl0sIHJvdXRlc1sib24iXSBdLmZpbHRlcihCb29s
ZWFuKSk7CisgICAgICAgICAgICBuZXh0LmFmdGVyID0gbmV4dC5hZnRlci5jb25jYXQoWyByb3V0
ZXNbImFmdGVyIl0gXS5maWx0ZXIoQm9vbGVhbikpOworICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBmbnMubWF0Y2hlZCA9IHRydWU7CisgICAgICAgIGZucy5jYXB0dXJlcyA9IG5leHQu
Y2FwdHVyZXM7CisgICAgICAgIGZucy5hZnRlciA9IG5leHQuYWZ0ZXI7CisgICAgICAgIHJldHVy
biBmaWx0ZXJSb3V0ZXMoZm5zKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIGZhbHNl
OworfTsKKworUm91dGVyLnByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbihtZXRob2QsIHBhdGgs
IHJvdXRlLCBwYXJlbnQpIHsKKyAgdmFyIG1ldGhvZFR5cGUsIHBhcmVudFR5cGUsIGlzQXJyYXks
IG5lc3RlZCwgcGFydDsKKyAgcGF0aCA9IHBhdGguZmlsdGVyKGZ1bmN0aW9uKHApIHsKKyAgICBy
ZXR1cm4gcCAmJiBwLmxlbmd0aCA+IDA7CisgIH0pOworICBwYXJlbnQgPSBwYXJlbnQgfHwgdGhp
cy5yb3V0ZXM7CisgIHBhcnQgPSBwYXRoLnNoaWZ0KCk7CisgIGlmICgvXDp8XCovLnRlc3QocGFy
dCkgJiYgIS9cXGR8XFx3Ly50ZXN0KHBhcnQpKSB7CisgICAgcGFydCA9IHJlZ2lmeVN0cmluZyhw
YXJ0LCB0aGlzLnBhcmFtcyk7CisgIH0KKyAgaWYgKHBhdGgubGVuZ3RoID4gMCkgeworICAgIHBh
cmVudFtwYXJ0XSA9IHBhcmVudFtwYXJ0XSB8fCB7fTsKKyAgICByZXR1cm4gdGhpcy5pbnNlcnQo
bWV0aG9kLCBwYXRoLCByb3V0ZSwgcGFyZW50W3BhcnRdKTsKKyAgfQorICBpZiAoIXBhcnQgJiYg
IXBhdGgubGVuZ3RoICYmIHBhcmVudCA9PT0gdGhpcy5yb3V0ZXMpIHsKKyAgICBtZXRob2RUeXBl
ID0gdHlwZW9mIHBhcmVudFttZXRob2RdOworICAgIHN3aXRjaCAobWV0aG9kVHlwZSkgeworICAg
ICBjYXNlICJmdW5jdGlvbiI6CisgICAgICBwYXJlbnRbbWV0aG9kXSA9IFsgcGFyZW50W21ldGhv
ZF0sIHJvdXRlIF07CisgICAgICByZXR1cm47CisgICAgIGNhc2UgIm9iamVjdCI6CisgICAgICBw
YXJlbnRbbWV0aG9kXS5wdXNoKHJvdXRlKTsKKyAgICAgIHJldHVybjsKKyAgICAgY2FzZSAidW5k
ZWZpbmVkIjoKKyAgICAgIHBhcmVudFttZXRob2RdID0gcm91dGU7CisgICAgICByZXR1cm47Cisg
ICAgfQorICAgIHJldHVybjsKKyAgfQorICBwYXJlbnRUeXBlID0gdHlwZW9mIHBhcmVudFtwYXJ0
XTsKKyAgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkocGFyZW50W3BhcnRdKTsKKyAgaWYgKHBhcmVu
dFtwYXJ0XSAmJiAhaXNBcnJheSAmJiBwYXJlbnRUeXBlID09ICJvYmplY3QiKSB7CisgICAgbWV0
aG9kVHlwZSA9IHR5cGVvZiBwYXJlbnRbcGFydF1bbWV0aG9kXTsKKyAgICBzd2l0Y2ggKG1ldGhv
ZFR5cGUpIHsKKyAgICAgY2FzZSAiZnVuY3Rpb24iOgorICAgICAgcGFyZW50W3BhcnRdW21ldGhv
ZF0gPSBbIHBhcmVudFtwYXJ0XVttZXRob2RdLCByb3V0ZSBdOworICAgICAgcmV0dXJuOworICAg
ICBjYXNlICJvYmplY3QiOgorICAgICAgcGFyZW50W3BhcnRdW21ldGhvZF0ucHVzaChyb3V0ZSk7
CisgICAgICByZXR1cm47CisgICAgIGNhc2UgInVuZGVmaW5lZCI6CisgICAgICBwYXJlbnRbcGFy
dF1bbWV0aG9kXSA9IHJvdXRlOworICAgICAgcmV0dXJuOworICAgIH0KKyAgfSBlbHNlIGlmIChw
YXJlbnRUeXBlID09ICJ1bmRlZmluZWQiKSB7CisgICAgbmVzdGVkID0ge307CisgICAgbmVzdGVk
W21ldGhvZF0gPSByb3V0ZTsKKyAgICBwYXJlbnRbcGFydF0gPSBuZXN0ZWQ7CisgICAgcmV0dXJu
OworICB9CisgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCByb3V0ZSBjb250ZXh0OiAiICsgcGFy
ZW50VHlwZSk7Cit9OworCisKKworUm91dGVyLnByb3RvdHlwZS5leHRlbmQgPSBmdW5jdGlvbiht
ZXRob2RzKSB7CisgIHZhciBzZWxmID0gdGhpcywgbGVuID0gbWV0aG9kcy5sZW5ndGgsIGk7Cisg
IGZ1bmN0aW9uIGV4dGVuZChtZXRob2QpIHsKKyAgICBzZWxmLl9tZXRob2RzW21ldGhvZF0gPSB0
cnVlOworICAgIHNlbGZbbWV0aG9kXSA9IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIGV4dHJhID0g
YXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IFsgbWV0aG9kLCAiIiBdIDogWyBtZXRob2QgXTsKKyAg
ICAgIHNlbGYub24uYXBwbHkoc2VsZiwgZXh0cmEuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGlj
ZS5jYWxsKGFyZ3VtZW50cykpKTsKKyAgICB9OworICB9CisgIGZvciAoaSA9IDA7IGkgPCBsZW47
IGkrKykgeworICAgIGV4dGVuZChtZXRob2RzW2ldKTsKKyAgfQorfTsKKworUm91dGVyLnByb3Rv
dHlwZS5ydW5saXN0ID0gZnVuY3Rpb24oZm5zKSB7CisgIHZhciBydW5saXN0ID0gdGhpcy5ldmVy
eSAmJiB0aGlzLmV2ZXJ5LmJlZm9yZSA/IFsgdGhpcy5ldmVyeS5iZWZvcmUgXS5jb25jYXQoX2Zs
YXR0ZW4oZm5zKSkgOiBfZmxhdHRlbihmbnMpOworICBpZiAodGhpcy5ldmVyeSAmJiB0aGlzLmV2
ZXJ5Lm9uKSB7CisgICAgcnVubGlzdC5wdXNoKHRoaXMuZXZlcnkub24pOworICB9CisgIHJ1bmxp
c3QuY2FwdHVyZXMgPSBmbnMuY2FwdHVyZXM7CisgIHJ1bmxpc3Quc291cmNlID0gZm5zLnNvdXJj
ZTsKKyAgcmV0dXJuIHJ1bmxpc3Q7Cit9OworCitSb3V0ZXIucHJvdG90eXBlLm1vdW50ID0gZnVu
Y3Rpb24ocm91dGVzLCBwYXRoKSB7CisgIGlmICghcm91dGVzIHx8IHR5cGVvZiByb3V0ZXMgIT09
ICJvYmplY3QiIHx8IEFycmF5LmlzQXJyYXkocm91dGVzKSkgeworICAgIHJldHVybjsKKyAgfQor
ICB2YXIgc2VsZiA9IHRoaXM7CisgIHBhdGggPSBwYXRoIHx8IFtdOworICBpZiAoIUFycmF5Lmlz
QXJyYXkocGF0aCkpIHsKKyAgICBwYXRoID0gcGF0aC5zcGxpdChzZWxmLmRlbGltaXRlcik7Cisg
IH0KKyAgZnVuY3Rpb24gaW5zZXJ0T3JNb3VudChyb3V0ZSwgbG9jYWwpIHsKKyAgICB2YXIgcmVu
YW1lID0gcm91dGUsIHBhcnRzID0gcm91dGUuc3BsaXQoc2VsZi5kZWxpbWl0ZXIpLCByb3V0ZVR5
cGUgPSB0eXBlb2Ygcm91dGVzW3JvdXRlXSwgaXNSb3V0ZSA9IHBhcnRzWzBdID09PSAiIiB8fCAh
c2VsZi5fbWV0aG9kc1twYXJ0c1swXV0sIGV2ZW50ID0gaXNSb3V0ZSA/ICJvbiIgOiByZW5hbWU7
CisgICAgaWYgKGlzUm91dGUpIHsKKyAgICAgIHJlbmFtZSA9IHJlbmFtZS5zbGljZSgocmVuYW1l
Lm1hdGNoKG5ldyBSZWdFeHAoIl4iICsgc2VsZi5kZWxpbWl0ZXIpKSB8fCBbICIiIF0pWzBdLmxl
bmd0aCk7CisgICAgICBwYXJ0cy5zaGlmdCgpOworICAgIH0KKyAgICBpZiAoaXNSb3V0ZSAmJiBy
b3V0ZVR5cGUgPT09ICJvYmplY3QiICYmICFBcnJheS5pc0FycmF5KHJvdXRlc1tyb3V0ZV0pKSB7
CisgICAgICBsb2NhbCA9IGxvY2FsLmNvbmNhdChwYXJ0cyk7CisgICAgICBzZWxmLm1vdW50KHJv
dXRlc1tyb3V0ZV0sIGxvY2FsKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGlzUm91
dGUpIHsKKyAgICAgIGxvY2FsID0gbG9jYWwuY29uY2F0KHJlbmFtZS5zcGxpdChzZWxmLmRlbGlt
aXRlcikpOworICAgICAgbG9jYWwgPSB0ZXJtaW5hdG9yKGxvY2FsLCBzZWxmLmRlbGltaXRlcik7
CisgICAgfQorICAgIHNlbGYuaW5zZXJ0KGV2ZW50LCBsb2NhbCwgcm91dGVzW3JvdXRlXSk7Cisg
IH0KKyAgZm9yICh2YXIgcm91dGUgaW4gcm91dGVzKSB7CisgICAgaWYgKHJvdXRlcy5oYXNPd25Q
cm9wZXJ0eShyb3V0ZSkpIHsKKyAgICAgIGluc2VydE9yTW91bnQocm91dGUsIHBhdGguc2xpY2Uo
MCkpOworICAgIH0KKyAgfQorfTsKKworCisKK30odHlwZW9mIGV4cG9ydHMgPT09ICJvYmplY3Qi
ID8gZXhwb3J0cyA6IHdpbmRvdykpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9kaXJlY3Rvci9kaXJlY3Rvci5t
aW4uanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvZGlyZWN0b3IvZGlyZWN0b3Iu
bWluLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmM5NTZhZjQwMDk1YmMyMmM2ODg1ZjI3N2VkOWVmNWY3NDE2YmFl
NGYKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvZGly
ZWN0b3IvZGlyZWN0b3IubWluLmpzCkBAIC0wLDAgKzEsNyBAQAorCisKKy8vCisvLyBHZW5lcmF0
ZWQgb24gVHVlIERlYyAxNiAyMDE0IDEyOjEzOjQ3IEdNVCswMTAwIChDRVQpIGJ5IENoYXJsaWUg
Um9iYmlucywgUGFvbG8gRnJhZ29tZW5pICYgdGhlIENvbnRyaWJ1dG9ycyAoVXNpbmcgQ29kZXN1
cmdlb24pLgorLy8gVmVyc2lvbiAxLjIuNgorLy8KKyhmdW5jdGlvbihhKXtmdW5jdGlvbiBrKGEs
YixjLGQpe3ZhciBlPTAsZj0wLGc9MCxjPShjfHwiKCIpLnRvU3RyaW5nKCksZD0oZHx8IikiKS50
b1N0cmluZygpLGg7Zm9yKGg9MDtoPGEubGVuZ3RoO2grKyl7dmFyIGk9YVtoXTtpZihpLmluZGV4
T2YoYyxlKT5pLmluZGV4T2YoZCxlKXx8fmkuaW5kZXhPZihjLGUpJiYhfmkuaW5kZXhPZihkLGUp
fHwhfmkuaW5kZXhPZihjLGUpJiZ+aS5pbmRleE9mKGQsZSkpe2Y9aS5pbmRleE9mKGMsZSksZz1p
LmluZGV4T2YoZCxlKTtpZih+ZiYmIX5nfHwhfmYmJn5nKXt2YXIgaj1hLnNsaWNlKDAsKGh8fDEp
KzEpLmpvaW4oYik7YT1bal0uY29uY2F0KGEuc2xpY2UoKGh8fDEpKzEpKX1lPShnPmY/ZzpmKSsx
LGg9MH1lbHNlIGU9MH1yZXR1cm4gYX1mdW5jdGlvbiBqKGEsYil7dmFyIGMsZD0wLGU9IiI7d2hp
bGUoYz1hLnN1YnN0cihkKS5tYXRjaCgvW15cd1xkXC0gJUAmXSpcKlteXHdcZFwtICVAJl0qLykp
ZD1jLmluZGV4K2NbMF0ubGVuZ3RoLGNbMF09Y1swXS5yZXBsYWNlKC9eXCovLCIoW18uKCkhXFwg
JUAmYS16QS1aMC05LV0rKSIpLGUrPWEuc3Vic3RyKDAsYy5pbmRleCkrY1swXTthPWUrPWEuc3Vi
c3RyKGQpO3ZhciBmPWEubWF0Y2goLzooW15cL10rKS9pZyksZyxoO2lmKGYpe2g9Zi5sZW5ndGg7
Zm9yKHZhciBqPTA7ajxoO2orKylnPWZbal0sZy5zbGljZSgwLDIpPT09Ijo6Ij9hPWcuc2xpY2Uo
MSk6YT1hLnJlcGxhY2UoZyxpKGcsYikpfXJldHVybiBhfWZ1bmN0aW9uIGkoYSxiLGMpe2M9YTtm
b3IodmFyIGQgaW4gYilpZihiLmhhc093blByb3BlcnR5KGQpKXtjPWJbZF0oYSk7aWYoYyE9PWEp
YnJlYWt9cmV0dXJuIGM9PT1hPyIoWy5fYS16QS1aMC05LSUoKV0rKSI6Y31mdW5jdGlvbiBoKGEs
YixjKXtpZighYS5sZW5ndGgpcmV0dXJuIGMoKTt2YXIgZD0wOyhmdW5jdGlvbiBlKCl7YihhW2Rd
LGZ1bmN0aW9uKGIpe2J8fGI9PT0hMT8oYyhiKSxjPWZ1bmN0aW9uKCl7fSk6KGQrPTEsZD09PWEu
bGVuZ3RoP2MoKTplKCkpfSl9KSgpfWZ1bmN0aW9uIGcoYSl7dmFyIGI9W107Zm9yKHZhciBjPTAs
ZD1hLmxlbmd0aDtjPGQ7YysrKWI9Yi5jb25jYXQoYVtjXSk7cmV0dXJuIGJ9ZnVuY3Rpb24gZihh
LGIpe2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7Yys9MSlpZihiKGFbY10sYyxhKT09PSExKXJldHVy
bn1mdW5jdGlvbiBjKCl7cmV0dXJuIGIuaGFzaD09PSIifHxiLmhhc2g9PT0iIyJ9dmFyIGI9ZG9j
dW1lbnQubG9jYXRpb24sZD17bW9kZToibW9kZXJuIixoYXNoOmIuaGFzaCxoaXN0b3J5OiExLGNo
ZWNrOmZ1bmN0aW9uKCl7dmFyIGE9Yi5oYXNoO2EhPXRoaXMuaGFzaCYmKHRoaXMuaGFzaD1hLHRo
aXMub25IYXNoQ2hhbmdlZCgpKX0sZmlyZTpmdW5jdGlvbigpe3RoaXMubW9kZT09PSJtb2Rlcm4i
P3RoaXMuaGlzdG9yeT09PSEwP3dpbmRvdy5vbnBvcHN0YXRlKCk6d2luZG93Lm9uaGFzaGNoYW5n
ZSgpOnRoaXMub25IYXNoQ2hhbmdlZCgpfSxpbml0OmZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gZChh
KXtmb3IodmFyIGI9MCxjPWUubGlzdGVuZXJzLmxlbmd0aDtiPGM7YisrKWUubGlzdGVuZXJzW2Jd
KGEpfXZhciBjPXRoaXM7dGhpcy5oaXN0b3J5PWIsZS5saXN0ZW5lcnN8fChlLmxpc3RlbmVycz1b
XSk7aWYoIm9uaGFzaGNoYW5nZSJpbiB3aW5kb3cmJihkb2N1bWVudC5kb2N1bWVudE1vZGU9PT11
bmRlZmluZWR8fGRvY3VtZW50LmRvY3VtZW50TW9kZT43KSl0aGlzLmhpc3Rvcnk9PT0hMD9zZXRU
aW1lb3V0KGZ1bmN0aW9uKCl7d2luZG93Lm9ucG9wc3RhdGU9ZH0sNTAwKTp3aW5kb3cub25oYXNo
Y2hhbmdlPWQsdGhpcy5tb2RlPSJtb2Rlcm4iO2Vsc2V7dmFyIGY9ZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiaWZyYW1lIik7Zi5pZD0ic3RhdGUtZnJhbWUiLGYuc3R5bGUuZGlzcGxheT0ibm9uZSIs
ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmKSx0aGlzLndyaXRlRnJhbWUoIiIpLCJvbnByb3Bl
cnR5Y2hhbmdlImluIGRvY3VtZW50JiYiYXR0YWNoRXZlbnQiaW4gZG9jdW1lbnQmJmRvY3VtZW50
LmF0dGFjaEV2ZW50KCJvbnByb3BlcnR5Y2hhbmdlIixmdW5jdGlvbigpe2V2ZW50LnByb3BlcnR5
TmFtZT09PSJsb2NhdGlvbiImJmMuY2hlY2soKX0pLHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlv
bigpe2MuY2hlY2soKX0sNTApLHRoaXMub25IYXNoQ2hhbmdlZD1kLHRoaXMubW9kZT0ibGVnYWN5
In1lLmxpc3RlbmVycy5wdXNoKGEpO3JldHVybiB0aGlzLm1vZGV9LGRlc3Ryb3k6ZnVuY3Rpb24o
YSl7aWYoISFlJiYhIWUubGlzdGVuZXJzKXt2YXIgYj1lLmxpc3RlbmVycztmb3IodmFyIGM9Yi5s
ZW5ndGgtMTtjPj0wO2MtLSliW2NdPT09YSYmYi5zcGxpY2UoYywxKX19LHNldEhhc2g6ZnVuY3Rp
b24oYSl7dGhpcy5tb2RlPT09ImxlZ2FjeSImJnRoaXMud3JpdGVGcmFtZShhKSx0aGlzLmhpc3Rv
cnk9PT0hMD8od2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKHt9LGRvY3VtZW50LnRpdGxlLGEpLHRo
aXMuZmlyZSgpKTpiLmhhc2g9YVswXT09PSIvIj9hOiIvIithO3JldHVybiB0aGlzfSx3cml0ZUZy
YW1lOmZ1bmN0aW9uKGEpe3ZhciBiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzdGF0ZS1mcmFt
ZSIpLGM9Yi5jb250ZW50RG9jdW1lbnR8fGIuY29udGVudFdpbmRvdy5kb2N1bWVudDtjLm9wZW4o
KSxjLndyaXRlKCI8c2NyaXB0Pl9oYXNoID0gJyIrYSsiJzsgb25sb2FkID0gcGFyZW50Lmxpc3Rl
bmVyLnN5bmNIYXNoOzxzY3JpcHQ+IiksYy5jbG9zZSgpfSxzeW5jSGFzaDpmdW5jdGlvbigpe3Zh
ciBhPXRoaXMuX2hhc2g7YSE9Yi5oYXNoJiYoYi5oYXNoPWEpO3JldHVybiB0aGlzfSxvbkhhc2hD
aGFuZ2VkOmZ1bmN0aW9uKCl7fX0sZT1hLlJvdXRlcj1mdW5jdGlvbihhKXtpZih0aGlzIGluc3Rh
bmNlb2YgZSl0aGlzLnBhcmFtcz17fSx0aGlzLnJvdXRlcz17fSx0aGlzLm1ldGhvZHM9WyJvbiIs
Im9uY2UiLCJhZnRlciIsImJlZm9yZSJdLHRoaXMuc2NvcGU9W10sdGhpcy5fbWV0aG9kcz17fSx0
aGlzLl9pbnNlcnQ9dGhpcy5pbnNlcnQsdGhpcy5pbnNlcnQ9dGhpcy5pbnNlcnRFeCx0aGlzLmhp
c3RvcnlTdXBwb3J0PSh3aW5kb3cuaGlzdG9yeSE9bnVsbD93aW5kb3cuaGlzdG9yeS5wdXNoU3Rh
dGU6bnVsbCkhPW51bGwsdGhpcy5jb25maWd1cmUoKSx0aGlzLm1vdW50KGF8fHt9KTtlbHNlIHJl
dHVybiBuZXcgZShhKX07ZS5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihhKXt2YXIgZT10aGlzLGY7
dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKGEpe3ZhciBiPWEmJmEubmV3VVJMfHx3aW5kb3cubG9jYXRp
b24uaGFzaCxjPWUuaGlzdG9yeT09PSEwP2UuZ2V0UGF0aCgpOmIucmVwbGFjZSgvLiojLywiIik7
ZS5kaXNwYXRjaCgib24iLGMuY2hhckF0KDApPT09Ii8iP2M6Ii8iK2MpfSxkLmluaXQodGhpcy5o
YW5kbGVyLHRoaXMuaGlzdG9yeSksdGhpcy5oaXN0b3J5PT09ITE/YygpJiZhP2IuaGFzaD1hOmMo
KXx8ZS5kaXNwYXRjaCgib24iLCIvIitiLmhhc2gucmVwbGFjZSgvXigjXC98I3xcLykvLCIiKSk6
KHRoaXMuY29udmVydF9oYXNoX2luX2luaXQ/KGY9YygpJiZhP2E6YygpP251bGw6Yi5oYXNoLnJl
cGxhY2UoL14jLywiIiksZiYmd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHt9LGRvY3VtZW50
LnRpdGxlLGYpKTpmPXRoaXMuZ2V0UGF0aCgpLChmfHx0aGlzLnJ1bl9pbl9pbml0PT09ITApJiZ0
aGlzLmhhbmRsZXIoKSk7cmV0dXJuIHRoaXN9LGUucHJvdG90eXBlLmV4cGxvZGU9ZnVuY3Rpb24o
KXt2YXIgYT10aGlzLmhpc3Rvcnk9PT0hMD90aGlzLmdldFBhdGgoKTpiLmhhc2g7YS5jaGFyQXQo
MSk9PT0iLyImJihhPWEuc2xpY2UoMSkpO3JldHVybiBhLnNsaWNlKDEsYS5sZW5ndGgpLnNwbGl0
KCIvIil9LGUucHJvdG90eXBlLnNldFJvdXRlPWZ1bmN0aW9uKGEsYixjKXt2YXIgZT10aGlzLmV4
cGxvZGUoKTt0eXBlb2YgYT09Im51bWJlciImJnR5cGVvZiBiPT0ic3RyaW5nIj9lW2FdPWI6dHlw
ZW9mIGM9PSJzdHJpbmciP2Uuc3BsaWNlKGEsYixzKTplPVthXSxkLnNldEhhc2goZS5qb2luKCIv
IikpO3JldHVybiBlfSxlLnByb3RvdHlwZS5pbnNlcnRFeD1mdW5jdGlvbihhLGIsYyxkKXthPT09
Im9uY2UiJiYoYT0ib24iLGM9ZnVuY3Rpb24oYSl7dmFyIGI9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7
aWYoIWIpe2I9ITA7cmV0dXJuIGEuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19KGMpKTtyZXR1cm4g
dGhpcy5faW5zZXJ0KGEsYixjLGQpfSxlLnByb3RvdHlwZS5nZXRSb3V0ZT1mdW5jdGlvbihhKXt2
YXIgYj1hO2lmKHR5cGVvZiBhPT0ibnVtYmVyIiliPXRoaXMuZXhwbG9kZSgpW2FdO2Vsc2UgaWYo
dHlwZW9mIGE9PSJzdHJpbmciKXt2YXIgYz10aGlzLmV4cGxvZGUoKTtiPWMuaW5kZXhPZihhKX1l
bHNlIGI9dGhpcy5leHBsb2RlKCk7cmV0dXJuIGJ9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rp
b24oKXtkLmRlc3Ryb3kodGhpcy5oYW5kbGVyKTtyZXR1cm4gdGhpc30sZS5wcm90b3R5cGUuZ2V0
UGF0aD1mdW5jdGlvbigpe3ZhciBhPXdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZTthLnN1YnN0cigw
LDEpIT09Ii8iJiYoYT0iLyIrYSk7cmV0dXJuIGF9O3ZhciBsPS9cPy4qLztlLnByb3RvdHlwZS5j
b25maWd1cmU9ZnVuY3Rpb24oYSl7YT1hfHx7fTtmb3IodmFyIGI9MDtiPHRoaXMubWV0aG9kcy5s
ZW5ndGg7YisrKXRoaXMuX21ldGhvZHNbdGhpcy5tZXRob2RzW2JdXT0hMDt0aGlzLnJlY3Vyc2U9
YS5yZWN1cnNlfHx0aGlzLnJlY3Vyc2V8fCExLHRoaXMuYXN5bmM9YS5hc3luY3x8ITEsdGhpcy5k
ZWxpbWl0ZXI9YS5kZWxpbWl0ZXJ8fCIvIix0aGlzLnN0cmljdD10eXBlb2YgYS5zdHJpY3Q9PSJ1
bmRlZmluZWQiPyEwOmEuc3RyaWN0LHRoaXMubm90Zm91bmQ9YS5ub3Rmb3VuZCx0aGlzLnJlc291
cmNlPWEucmVzb3VyY2UsdGhpcy5oaXN0b3J5PWEuaHRtbDVoaXN0b3J5JiZ0aGlzLmhpc3RvcnlT
dXBwb3J0fHwhMSx0aGlzLnJ1bl9pbl9pbml0PXRoaXMuaGlzdG9yeT09PSEwJiZhLnJ1bl9oYW5k
bGVyX2luX2luaXQhPT0hMSx0aGlzLmNvbnZlcnRfaGFzaF9pbl9pbml0PXRoaXMuaGlzdG9yeT09
PSEwJiZhLmNvbnZlcnRfaGFzaF9pbl9pbml0IT09ITEsdGhpcy5ldmVyeT17YWZ0ZXI6YS5hZnRl
cnx8bnVsbCxiZWZvcmU6YS5iZWZvcmV8fG51bGwsb246YS5vbnx8bnVsbH07cmV0dXJuIHRoaXN9
LGUucHJvdG90eXBlLnBhcmFtPWZ1bmN0aW9uKGEsYil7YVswXSE9PSI6IiYmKGE9IjoiK2EpO3Zh
ciBjPW5ldyBSZWdFeHAoYSwiZyIpO3RoaXMucGFyYW1zW2FdPWZ1bmN0aW9uKGEpe3JldHVybiBh
LnJlcGxhY2UoYyxiLnNvdXJjZXx8Yil9O3JldHVybiB0aGlzfSxlLnByb3RvdHlwZS5vbj1lLnBy
b3RvdHlwZS5yb3V0ZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpczshYyYmdHlwZW9mIGI9PSJm
dW5jdGlvbiImJihjPWIsYj1hLGE9Im9uIik7aWYoQXJyYXkuaXNBcnJheShiKSlyZXR1cm4gYi5m
b3JFYWNoKGZ1bmN0aW9uKGIpe2Qub24oYSxiLGMpfSk7Yi5zb3VyY2UmJihiPWIuc291cmNlLnJl
cGxhY2UoL1xcXC8vaWcsIi8iKSk7aWYoQXJyYXkuaXNBcnJheShhKSlyZXR1cm4gYS5mb3JFYWNo
KGZ1bmN0aW9uKGEpe2Qub24oYS50b0xvd2VyQ2FzZSgpLGIsYyl9KTtiPWIuc3BsaXQobmV3IFJl
Z0V4cCh0aGlzLmRlbGltaXRlcikpLGI9ayhiLHRoaXMuZGVsaW1pdGVyKSx0aGlzLmluc2VydChh
LHRoaXMuc2NvcGUuY29uY2F0KGIpLGMpfSxlLnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKGEsYil7
dmFyIGM9dGhpcyxkPXRoaXMuc2NvcGUubGVuZ3RoO2Euc291cmNlJiYoYT1hLnNvdXJjZS5yZXBs
YWNlKC9cXFwvL2lnLCIvIikpLGE9YS5zcGxpdChuZXcgUmVnRXhwKHRoaXMuZGVsaW1pdGVyKSks
YT1rKGEsdGhpcy5kZWxpbWl0ZXIpLHRoaXMuc2NvcGU9dGhpcy5zY29wZS5jb25jYXQoYSksYi5j
YWxsKHRoaXMsdGhpcyksdGhpcy5zY29wZS5zcGxpY2UoZCxhLmxlbmd0aCl9LGUucHJvdG90eXBl
LmRpc3BhdGNoPWZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBoKCl7ZC5sYXN0PWUuYWZ0ZXIsZC5p
bnZva2UoZC5ydW5saXN0KGUpLGQsYyl9dmFyIGQ9dGhpcyxlPXRoaXMudHJhdmVyc2UoYSxiLnJl
cGxhY2UobCwiIiksdGhpcy5yb3V0ZXMsIiIpLGY9dGhpcy5faW52b2tlZCxnO3RoaXMuX2ludm9r
ZWQ9ITA7aWYoIWV8fGUubGVuZ3RoPT09MCl7dGhpcy5sYXN0PVtdLHR5cGVvZiB0aGlzLm5vdGZv
dW5kPT0iZnVuY3Rpb24iJiZ0aGlzLmludm9rZShbdGhpcy5ub3Rmb3VuZF0se21ldGhvZDphLHBh
dGg6Yn0sYyk7cmV0dXJuITF9dGhpcy5yZWN1cnNlPT09ImZvcndhcmQiJiYoZT1lLnJldmVyc2Uo
KSksZz10aGlzLmV2ZXJ5JiZ0aGlzLmV2ZXJ5LmFmdGVyP1t0aGlzLmV2ZXJ5LmFmdGVyXS5jb25j
YXQodGhpcy5sYXN0KTpbdGhpcy5sYXN0XTtpZihnJiZnLmxlbmd0aD4wJiZmKXt0aGlzLmFzeW5j
P3RoaXMuaW52b2tlKGcsdGhpcyxoKToodGhpcy5pbnZva2UoZyx0aGlzKSxoKCkpO3JldHVybiEw
fWgoKTtyZXR1cm4hMH0sZS5wcm90b3R5cGUuaW52b2tlPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10
aGlzLGU7dGhpcy5hc3luYz8oZT1mdW5jdGlvbihjLGQpe2lmKEFycmF5LmlzQXJyYXkoYykpcmV0
dXJuIGgoYyxlLGQpO3R5cGVvZiBjPT0iZnVuY3Rpb24iJiZjLmFwcGx5KGIsKGEuY2FwdHVyZXN8
fFtdKS5jb25jYXQoZCkpfSxoKGEsZSxmdW5jdGlvbigpe2MmJmMuYXBwbHkoYixhcmd1bWVudHMp
fSkpOihlPWZ1bmN0aW9uKGMpe2lmKEFycmF5LmlzQXJyYXkoYykpcmV0dXJuIGYoYyxlKTtpZih0
eXBlb2YgYz09ImZ1bmN0aW9uIilyZXR1cm4gYy5hcHBseShiLGEuY2FwdHVyZXN8fFtdKTt0eXBl
b2YgYz09InN0cmluZyImJmQucmVzb3VyY2UmJmQucmVzb3VyY2VbY10uYXBwbHkoYixhLmNhcHR1
cmVzfHxbXSl9LGYoYSxlKSl9LGUucHJvdG90eXBlLnRyYXZlcnNlPWZ1bmN0aW9uKGEsYixjLGQs
ZSl7ZnVuY3Rpb24gbChhKXtmdW5jdGlvbiBjKGEpe2Zvcih2YXIgYj1hLmxlbmd0aC0xO2I+PTA7
Yi0tKUFycmF5LmlzQXJyYXkoYVtiXSk/KGMoYVtiXSksYVtiXS5sZW5ndGg9PT0wJiZhLnNwbGlj
ZShiLDEpKTplKGFbYl0pfHxhLnNwbGljZShiLDEpfWZ1bmN0aW9uIGIoYSl7dmFyIGM9W107Zm9y
KHZhciBkPTA7ZDxhLmxlbmd0aDtkKyspY1tkXT1BcnJheS5pc0FycmF5KGFbZF0pP2IoYVtkXSk6
YVtkXTtyZXR1cm4gY31pZighZSlyZXR1cm4gYTt2YXIgZD1iKGEpO2QubWF0Y2hlZD1hLm1hdGNo
ZWQsZC5jYXB0dXJlcz1hLmNhcHR1cmVzLGQuYWZ0ZXI9YS5hZnRlci5maWx0ZXIoZSksYyhkKTty
ZXR1cm4gZH12YXIgZj1bXSxnLGgsaSxqLGs7aWYoYj09PXRoaXMuZGVsaW1pdGVyJiZjW2FdKXtq
PVtbYy5iZWZvcmUsY1thXV0uZmlsdGVyKEJvb2xlYW4pXSxqLmFmdGVyPVtjLmFmdGVyXS5maWx0
ZXIoQm9vbGVhbiksai5tYXRjaGVkPSEwLGouY2FwdHVyZXM9W107cmV0dXJuIGwoail9Zm9yKHZh
ciBtIGluIGMpaWYoYy5oYXNPd25Qcm9wZXJ0eShtKSYmKCF0aGlzLl9tZXRob2RzW21dfHx0aGlz
Ll9tZXRob2RzW21dJiZ0eXBlb2YgY1ttXT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KGNbbV0p
KSl7Zz1oPWQrdGhpcy5kZWxpbWl0ZXIrbSx0aGlzLnN0cmljdHx8KGgrPSJbIit0aGlzLmRlbGlt
aXRlcisiXT8iKSxpPWIubWF0Y2gobmV3IFJlZ0V4cCgiXiIraCkpO2lmKCFpKWNvbnRpbnVlO2lm
KGlbMF0mJmlbMF09PWImJmNbbV1bYV0pe2o9W1tjW21dLmJlZm9yZSxjW21dW2FdXS5maWx0ZXIo
Qm9vbGVhbildLGouYWZ0ZXI9W2NbbV0uYWZ0ZXJdLmZpbHRlcihCb29sZWFuKSxqLm1hdGNoZWQ9
ITAsai5jYXB0dXJlcz1pLnNsaWNlKDEpLHRoaXMucmVjdXJzZSYmYz09PXRoaXMucm91dGVzJiYo
ai5wdXNoKFtjLmJlZm9yZSxjLm9uXS5maWx0ZXIoQm9vbGVhbikpLGouYWZ0ZXI9ai5hZnRlci5j
b25jYXQoW2MuYWZ0ZXJdLmZpbHRlcihCb29sZWFuKSkpO3JldHVybiBsKGopfWo9dGhpcy50cmF2
ZXJzZShhLGIsY1ttXSxnKTtpZihqLm1hdGNoZWQpe2oubGVuZ3RoPjAmJihmPWYuY29uY2F0KGop
KSx0aGlzLnJlY3Vyc2UmJihmLnB1c2goW2NbbV0uYmVmb3JlLGNbbV0ub25dLmZpbHRlcihCb29s
ZWFuKSksai5hZnRlcj1qLmFmdGVyLmNvbmNhdChbY1ttXS5hZnRlcl0uZmlsdGVyKEJvb2xlYW4p
KSxjPT09dGhpcy5yb3V0ZXMmJihmLnB1c2goW2MuYmVmb3JlLGMub25dLmZpbHRlcihCb29sZWFu
KSksai5hZnRlcj1qLmFmdGVyLmNvbmNhdChbYy5hZnRlcl0uZmlsdGVyKEJvb2xlYW4pKSkpLGYu
bWF0Y2hlZD0hMCxmLmNhcHR1cmVzPWouY2FwdHVyZXMsZi5hZnRlcj1qLmFmdGVyO3JldHVybiBs
KGYpfX1yZXR1cm4hMX0sZS5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBl
LGYsZyxoLGk7Yj1iLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYSYmYS5sZW5ndGg+MH0pLGQ9
ZHx8dGhpcy5yb3V0ZXMsaT1iLnNoaWZ0KCksL1w6fFwqLy50ZXN0KGkpJiYhL1xcZHxcXHcvLnRl
c3QoaSkmJihpPWooaSx0aGlzLnBhcmFtcykpO2lmKGIubGVuZ3RoPjApe2RbaV09ZFtpXXx8e307
cmV0dXJuIHRoaXMuaW5zZXJ0KGEsYixjLGRbaV0pfXtpZighIWl8fCEhYi5sZW5ndGh8fGQhPT10
aGlzLnJvdXRlcyl7Zj10eXBlb2YgZFtpXSxnPUFycmF5LmlzQXJyYXkoZFtpXSk7aWYoZFtpXSYm
IWcmJmY9PSJvYmplY3QiKXtlPXR5cGVvZiBkW2ldW2FdO3N3aXRjaChlKXtjYXNlImZ1bmN0aW9u
IjpkW2ldW2FdPVtkW2ldW2FdLGNdO3JldHVybjtjYXNlIm9iamVjdCI6ZFtpXVthXS5wdXNoKGMp
O3JldHVybjtjYXNlInVuZGVmaW5lZCI6ZFtpXVthXT1jO3JldHVybn19ZWxzZSBpZihmPT0idW5k
ZWZpbmVkIil7aD17fSxoW2FdPWMsZFtpXT1oO3JldHVybn10aHJvdyBuZXcgRXJyb3IoIkludmFs
aWQgcm91dGUgY29udGV4dDogIitmKX1lPXR5cGVvZiBkW2FdO3N3aXRjaChlKXtjYXNlImZ1bmN0
aW9uIjpkW2FdPVtkW2FdLGNdO3JldHVybjtjYXNlIm9iamVjdCI6ZFthXS5wdXNoKGMpO3JldHVy
bjtjYXNlInVuZGVmaW5lZCI6ZFthXT1jO3JldHVybn19fSxlLnByb3RvdHlwZS5leHRlbmQ9ZnVu
Y3Rpb24oYSl7ZnVuY3Rpb24gZShhKXtiLl9tZXRob2RzW2FdPSEwLGJbYV09ZnVuY3Rpb24oKXt2
YXIgYz1hcmd1bWVudHMubGVuZ3RoPT09MT9bYSwiIl06W2FdO2Iub24uYXBwbHkoYixjLmNvbmNh
dChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKSl9fXZhciBiPXRoaXMsYz1h
Lmxlbmd0aCxkO2ZvcihkPTA7ZDxjO2QrKyllKGFbZF0pfSxlLnByb3RvdHlwZS5ydW5saXN0PWZ1
bmN0aW9uKGEpe3ZhciBiPXRoaXMuZXZlcnkmJnRoaXMuZXZlcnkuYmVmb3JlP1t0aGlzLmV2ZXJ5
LmJlZm9yZV0uY29uY2F0KGcoYSkpOmcoYSk7dGhpcy5ldmVyeSYmdGhpcy5ldmVyeS5vbiYmYi5w
dXNoKHRoaXMuZXZlcnkub24pLGIuY2FwdHVyZXM9YS5jYXB0dXJlcyxiLnNvdXJjZT1hLnNvdXJj
ZTtyZXR1cm4gYn0sZS5wcm90b3R5cGUubW91bnQ9ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBkKGIs
ZCl7dmFyIGU9YixmPWIuc3BsaXQoYy5kZWxpbWl0ZXIpLGc9dHlwZW9mIGFbYl0saD1mWzBdPT09
IiJ8fCFjLl9tZXRob2RzW2ZbMF1dLGk9aD8ib24iOmU7aCYmKGU9ZS5zbGljZSgoZS5tYXRjaChu
ZXcgUmVnRXhwKCJeIitjLmRlbGltaXRlcikpfHxbIiJdKVswXS5sZW5ndGgpLGYuc2hpZnQoKSk7
aCYmZz09PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShhW2JdKT8oZD1kLmNvbmNhdChmKSxjLm1v
dW50KGFbYl0sZCkpOihoJiYoZD1kLmNvbmNhdChlLnNwbGl0KGMuZGVsaW1pdGVyKSksZD1rKGQs
Yy5kZWxpbWl0ZXIpKSxjLmluc2VydChpLGQsYVtiXSkpfWlmKCEhYSYmdHlwZW9mIGE9PSJvYmpl
Y3QiJiYhQXJyYXkuaXNBcnJheShhKSl7dmFyIGM9dGhpcztiPWJ8fFtdLEFycmF5LmlzQXJyYXko
Yil8fChiPWIuc3BsaXQoYy5kZWxpbWl0ZXIpKTtmb3IodmFyIGUgaW4gYSlhLmhhc093blByb3Bl
cnR5KGUpJiZkKGUsYi5zbGljZSgwKSl9fX0pKHR5cGVvZiBleHBvcnRzPT0ib2JqZWN0Ij9leHBv
cnRzOndpbmRvdykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvZGlyZWN0b3IvZW5kZXIuanMgYi9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9yZWFjdC9ub2RlX21vZHVsZXMvZGlyZWN0b3IvZW5kZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmUzZWJj
NDFiMGJkZTA2NGJmZDMzNjNmZDVkZDBiMzQwNmVmYjllZgotLS0gL2Rldi9udWxsCisrKyBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9kaXJlY3Rvci9lbmRlci5qcwpAQCAtMCwwICsx
LDMgQEAKKyQuZW5kZXIoeworICByb3V0ZXI6IFJvdXRlcgorfSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>310401</attachid>
            <date>2017-05-17 09:46:13 -0700</date>
            <delta_ts>2017-05-18 17:46:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-172213-20170518014612.patch</filename>
            <type>text/plain</type>
            <size>2647</size>
            <attacher name="Addy Osmani">addyo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2OTcxCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGEwYzcyZmM0Yzk2
MThjZGQyOGI2MjJlNTZkYjZiOWJlMTRkMGYwYTIuLmY5YjFiN2IwOTg5OTYxMzljYjMxN2EwMTY3
M2ZiOTdhOTE0Nzk2MTAgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTctMDUt
MTcgIEFkZHkgT3NtYW5pICA8YWRkeW9zbWFuaUBnbWFpbC5jb20+CisKKyAgICAgICAgU3BlZWRv
bWV0ZXI6IGNoZWNrLWluIG1pc3NpbmcgUmVhY3QgVG9kb01WQyBkZXBlbmRlbmN5CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIyMTMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgICogU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2luZGV4
Lmh0bWw6IEZpeCBwYXRoIHRvIGRpcmVjdG9yLmpzLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMv
ZGlyZWN0b3IvZGlyZWN0b3IuanM6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvZGly
ZWN0b3IvZGlyZWN0b3IubWluLmpzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL2Rp
cmVjdG9yL2VuZGVyLmpzOiBBZGRlZC4KKwogMjAxNy0wNS0xNiAgQWRkeSBPc21hbmkgIDxhZGR5
b3NtYW5pQGdtYWlsLmNvbT4KIAogICAgICAgICBVcGRhdGUgdG8gU3BlZWRvbWV0ZXIgMi4wIHcv
dXBkYXRlZCBmcmFtZXdvcmtzICsgbmV3IHdvcmtsb2FkcwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdGVzdHMuanMgYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90ZXN0cy5qcwppbmRleCBjNjBiOGVjNjEyMmE5NzJjZmZh
MGE1YjY3ZGEwZDRkNjlhYmY3Y2M5Li5kYzU5ZjhmYzU1ZWE4ODcyZWVkOTg2MWI5ODg3YjY0NDRk
MGIxNWJlIDEwMDY0NAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90ZXN0cy5qcworKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
ZXN0cy5qcwpAQCAtMTY2LDcgKzE2Niw3IEBAIFN1aXRlcy5wdXNoKHsKIAogU3VpdGVzLnB1c2go
ewogICAgIG5hbWU6ICdFbWJlckpTLVRvZG9NVkMnLAotICAgIHVybDogJ3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMnLAorICAgIHVybDogJ3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2VtYmVyanMvaW5kZXguaHRtbCcsCiAgICAgcHJlcGFyZTogZnVuY3Rpb24gKHJ1
bm5lciwgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7CiAgICAgICAgIHJldHVybiBy
dW5uZXIud2FpdEZvckVsZW1lbnQoJyNuZXctdG9kbycpLnRoZW4oZnVuY3Rpb24gKGVsZW1lbnQp
IHsKICAgICAgICAgICAgIGVsZW1lbnQuZm9jdXMoKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L3JlYWN0L2luZGV4Lmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9pbmRleC5odG1sCmluZGV4IDI5
ZTU2MTZiYWE2MDM2YTY1YmVhZmM4ZjBmMDA5MzlhYjVkMGNlN2EuLmM4M2U1YTk5MzFlNjM5MDdl
MjU1ODRiMjliMDU1ZTI0ZDY2OWUxMDggMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2lu
ZGV4Lmh0bWwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvaW5kZXguaHRtbApAQCAtMTQsNyArMTQs
NyBAQAogICAgICAgICA8L2Zvb3Rlcj4KIAogICAgIDxzY3JpcHQgc3JjPSJub2RlX21vZHVsZXMv
Y2xhc3NuYW1lcy9pbmRleC5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9Im5vZGVfbW9k
dWxlcy9kaXJlY3Rvci9idWlsZC9kaXJlY3Rvci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBz
cmM9Im5vZGVfbW9kdWxlcy9kaXJlY3Rvci9idWlsZC9kaXJlY3Rvci5taW4uanMiPjwvc2NyaXB0
PgogICAgIDxzY3JpcHQgc3JjPSJub2RlX21vZHVsZXMvcmVhY3QvZGlzdC9yZWFjdC13aXRoLWFk
ZG9ucy5taW4uanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJub2RlX21vZHVsZXMvcmVh
Y3QtZG9tL2Rpc3QvcmVhY3QtZG9tLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9
ImJ1aWxkLm1pbi5qcyI+PC9zY3JpcHQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>310582</attachid>
            <date>2017-05-18 17:46:11 -0700</date>
            <delta_ts>2017-05-18 20:03:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-172213-20170518174611.patch</filename>
            <type>text/plain</type>
            <size>12438</size>
            <attacher name="Addy Osmani">addyo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2OTcxCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGEwYzcyZmM0Yzk2
MThjZGQyOGI2MjJlNTZkYjZiOWJlMTRkMGYwYTIuLjMxZmRhYTc3ZDA0NGI2ZjI2NzBjOWNiNTZm
NzhhY2VlNjFkNGEyODkgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTctMDUt
MTggIEFkZHkgT3NtYW5pICA8YWRkeW9zbWFuaUBnbWFpbC5jb20+CisKKyAgICAgICAgU3BlZWRv
bWV0ZXI6IGNoZWNrLWluIG1pc3NpbmcgUmVhY3QgVG9kb01WQyBkZXBlbmRlbmN5CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIyMTMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9pbmRleC5odG1sOiBm
aXggZGlyZWN0b3IubWluLmpzIHBhdGguCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9kaXJlY3Rv
ci9kaXJlY3Rvci5taW4uanM6IEFkZGVkLgorCiAyMDE3LTA1LTE2ICBBZGR5IE9zbWFuaSAgPGFk
ZHlvc21hbmlAZ21haWwuY29tPgogCiAgICAgICAgIFVwZGF0ZSB0byBTcGVlZG9tZXRlciAyLjAg
dy91cGRhdGVkIGZyYW1ld29ya3MgKyBuZXcgd29ya2xvYWRzCmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9yZWFjdC9pbmRleC5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvaW5kZXguaHRtbAppbmRl
eCAyOWU1NjE2YmFhNjAzNmE2NWJlYWZjOGYwZjAwOTM5YWI1ZDBjZTdhLi5mMTZiY2E2ZWIyNTMy
NTRjZDUwM2JlNTMzZGU4MDNmOGFkMTdmNTJiIDEwMDY0NAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFj
dC9pbmRleC5odG1sCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2luZGV4Lmh0bWwKQEAgLTE0LDcg
KzE0LDcgQEAKICAgICAgICAgPC9mb290ZXI+CiAKICAgICA8c2NyaXB0IHNyYz0ibm9kZV9tb2R1
bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJub2Rl
X21vZHVsZXMvZGlyZWN0b3IvYnVpbGQvZGlyZWN0b3IuanMiPjwvc2NyaXB0PgorICAgIDxzY3Jp
cHQgc3JjPSJub2RlX21vZHVsZXMvZGlyZWN0b3IvZGlyZWN0b3IubWluLmpzIj48L3NjcmlwdD4K
ICAgICA8c2NyaXB0IHNyYz0ibm9kZV9tb2R1bGVzL3JlYWN0L2Rpc3QvcmVhY3Qtd2l0aC1hZGRv
bnMubWluLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0ibm9kZV9tb2R1bGVzL3JlYWN0
LWRvbS9kaXN0L3JlYWN0LWRvbS5taW4uanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJi
dWlsZC5taW4uanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9k
ZV9tb2R1bGVzL2RpcmVjdG9yL2RpcmVjdG9yLm1pbi5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25v
ZGVfbW9kdWxlcy9kaXJlY3Rvci9kaXJlY3Rvci5taW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzk1NmFmNDAw
OTViYzIyYzY4ODVmMjc3ZWQ5ZWY1Zjc0MTZiYWU0ZgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9kaXJlY3Rvci9kaXJlY3Rvci5taW4uanMKQEAgLTAs
MCArMSw3IEBACisKKworLy8KKy8vIEdlbmVyYXRlZCBvbiBUdWUgRGVjIDE2IDIwMTQgMTI6MTM6
NDcgR01UKzAxMDAgKENFVCkgYnkgQ2hhcmxpZSBSb2JiaW5zLCBQYW9sbyBGcmFnb21lbmkgJiB0
aGUgQ29udHJpYnV0b3JzIChVc2luZyBDb2Rlc3VyZ2VvbikuCisvLyBWZXJzaW9uIDEuMi42Cisv
LworKGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGsoYSxiLGMsZCl7dmFyIGU9MCxmPTAsZz0wLGM9KGN8
fCIoIikudG9TdHJpbmcoKSxkPShkfHwiKSIpLnRvU3RyaW5nKCksaDtmb3IoaD0wO2g8YS5sZW5n
dGg7aCsrKXt2YXIgaT1hW2hdO2lmKGkuaW5kZXhPZihjLGUpPmkuaW5kZXhPZihkLGUpfHx+aS5p
bmRleE9mKGMsZSkmJiF+aS5pbmRleE9mKGQsZSl8fCF+aS5pbmRleE9mKGMsZSkmJn5pLmluZGV4
T2YoZCxlKSl7Zj1pLmluZGV4T2YoYyxlKSxnPWkuaW5kZXhPZihkLGUpO2lmKH5mJiYhfmd8fCF+
ZiYmfmcpe3ZhciBqPWEuc2xpY2UoMCwoaHx8MSkrMSkuam9pbihiKTthPVtqXS5jb25jYXQoYS5z
bGljZSgoaHx8MSkrMSkpfWU9KGc+Zj9nOmYpKzEsaD0wfWVsc2UgZT0wfXJldHVybiBhfWZ1bmN0
aW9uIGooYSxiKXt2YXIgYyxkPTAsZT0iIjt3aGlsZShjPWEuc3Vic3RyKGQpLm1hdGNoKC9bXlx3
XGRcLSAlQCZdKlwqW15cd1xkXC0gJUAmXSovKSlkPWMuaW5kZXgrY1swXS5sZW5ndGgsY1swXT1j
WzBdLnJlcGxhY2UoL15cKi8sIihbXy4oKSFcXCAlQCZhLXpBLVowLTktXSspIiksZSs9YS5zdWJz
dHIoMCxjLmluZGV4KStjWzBdO2E9ZSs9YS5zdWJzdHIoZCk7dmFyIGY9YS5tYXRjaCgvOihbXlwv
XSspL2lnKSxnLGg7aWYoZil7aD1mLmxlbmd0aDtmb3IodmFyIGo9MDtqPGg7aisrKWc9ZltqXSxn
LnNsaWNlKDAsMik9PT0iOjoiP2E9Zy5zbGljZSgxKTphPWEucmVwbGFjZShnLGkoZyxiKSl9cmV0
dXJuIGF9ZnVuY3Rpb24gaShhLGIsYyl7Yz1hO2Zvcih2YXIgZCBpbiBiKWlmKGIuaGFzT3duUHJv
cGVydHkoZCkpe2M9YltkXShhKTtpZihjIT09YSlicmVha31yZXR1cm4gYz09PWE/IihbLl9hLXpB
LVowLTktJSgpXSspIjpjfWZ1bmN0aW9uIGgoYSxiLGMpe2lmKCFhLmxlbmd0aClyZXR1cm4gYygp
O3ZhciBkPTA7KGZ1bmN0aW9uIGUoKXtiKGFbZF0sZnVuY3Rpb24oYil7Ynx8Yj09PSExPyhjKGIp
LGM9ZnVuY3Rpb24oKXt9KTooZCs9MSxkPT09YS5sZW5ndGg/YygpOmUoKSl9KX0pKCl9ZnVuY3Rp
b24gZyhhKXt2YXIgYj1bXTtmb3IodmFyIGM9MCxkPWEubGVuZ3RoO2M8ZDtjKyspYj1iLmNvbmNh
dChhW2NdKTtyZXR1cm4gYn1mdW5jdGlvbiBmKGEsYil7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtj
Kz0xKWlmKGIoYVtjXSxjLGEpPT09ITEpcmV0dXJufWZ1bmN0aW9uIGMoKXtyZXR1cm4gYi5oYXNo
PT09IiJ8fGIuaGFzaD09PSIjIn12YXIgYj1kb2N1bWVudC5sb2NhdGlvbixkPXttb2RlOiJtb2Rl
cm4iLGhhc2g6Yi5oYXNoLGhpc3Rvcnk6ITEsY2hlY2s6ZnVuY3Rpb24oKXt2YXIgYT1iLmhhc2g7
YSE9dGhpcy5oYXNoJiYodGhpcy5oYXNoPWEsdGhpcy5vbkhhc2hDaGFuZ2VkKCkpfSxmaXJlOmZ1
bmN0aW9uKCl7dGhpcy5tb2RlPT09Im1vZGVybiI/dGhpcy5oaXN0b3J5PT09ITA/d2luZG93Lm9u
cG9wc3RhdGUoKTp3aW5kb3cub25oYXNoY2hhbmdlKCk6dGhpcy5vbkhhc2hDaGFuZ2VkKCl9LGlu
aXQ6ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBkKGEpe2Zvcih2YXIgYj0wLGM9ZS5saXN0ZW5lcnMu
bGVuZ3RoO2I8YztiKyspZS5saXN0ZW5lcnNbYl0oYSl9dmFyIGM9dGhpczt0aGlzLmhpc3Rvcnk9
YixlLmxpc3RlbmVyc3x8KGUubGlzdGVuZXJzPVtdKTtpZigib25oYXNoY2hhbmdlImluIHdpbmRv
dyYmKGRvY3VtZW50LmRvY3VtZW50TW9kZT09PXVuZGVmaW5lZHx8ZG9jdW1lbnQuZG9jdW1lbnRN
b2RlPjcpKXRoaXMuaGlzdG9yeT09PSEwP3NldFRpbWVvdXQoZnVuY3Rpb24oKXt3aW5kb3cub25w
b3BzdGF0ZT1kfSw1MDApOndpbmRvdy5vbmhhc2hjaGFuZ2U9ZCx0aGlzLm1vZGU9Im1vZGVybiI7
ZWxzZXt2YXIgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTtmLmlkPSJzdGF0ZS1m
cmFtZSIsZi5zdHlsZS5kaXNwbGF5PSJub25lIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGYp
LHRoaXMud3JpdGVGcmFtZSgiIiksIm9ucHJvcGVydHljaGFuZ2UiaW4gZG9jdW1lbnQmJiJhdHRh
Y2hFdmVudCJpbiBkb2N1bWVudCYmZG9jdW1lbnQuYXR0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFu
Z2UiLGZ1bmN0aW9uKCl7ZXZlbnQucHJvcGVydHlOYW1lPT09ImxvY2F0aW9uIiYmYy5jaGVjaygp
fSksd2luZG93LnNldEludGVydmFsKGZ1bmN0aW9uKCl7Yy5jaGVjaygpfSw1MCksdGhpcy5vbkhh
c2hDaGFuZ2VkPWQsdGhpcy5tb2RlPSJsZWdhY3kifWUubGlzdGVuZXJzLnB1c2goYSk7cmV0dXJu
IHRoaXMubW9kZX0sZGVzdHJveTpmdW5jdGlvbihhKXtpZighIWUmJiEhZS5saXN0ZW5lcnMpe3Zh
ciBiPWUubGlzdGVuZXJzO2Zvcih2YXIgYz1iLmxlbmd0aC0xO2M+PTA7Yy0tKWJbY109PT1hJiZi
LnNwbGljZShjLDEpfX0sc2V0SGFzaDpmdW5jdGlvbihhKXt0aGlzLm1vZGU9PT0ibGVnYWN5IiYm
dGhpcy53cml0ZUZyYW1lKGEpLHRoaXMuaGlzdG9yeT09PSEwPyh3aW5kb3cuaGlzdG9yeS5wdXNo
U3RhdGUoe30sZG9jdW1lbnQudGl0bGUsYSksdGhpcy5maXJlKCkpOmIuaGFzaD1hWzBdPT09Ii8i
P2E6Ii8iK2E7cmV0dXJuIHRoaXN9LHdyaXRlRnJhbWU6ZnVuY3Rpb24oYSl7dmFyIGI9ZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInN0YXRlLWZyYW1lIiksYz1iLmNvbnRlbnREb2N1bWVudHx8Yi5j
b250ZW50V2luZG93LmRvY3VtZW50O2Mub3BlbigpLGMud3JpdGUoIjxzY3JpcHQ+X2hhc2ggPSAn
IithKyInOyBvbmxvYWQgPSBwYXJlbnQubGlzdGVuZXIuc3luY0hhc2g7PHNjcmlwdD4iKSxjLmNs
b3NlKCl9LHN5bmNIYXNoOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5faGFzaDthIT1iLmhhc2gmJihi
Lmhhc2g9YSk7cmV0dXJuIHRoaXN9LG9uSGFzaENoYW5nZWQ6ZnVuY3Rpb24oKXt9fSxlPWEuUm91
dGVyPWZ1bmN0aW9uKGEpe2lmKHRoaXMgaW5zdGFuY2VvZiBlKXRoaXMucGFyYW1zPXt9LHRoaXMu
cm91dGVzPXt9LHRoaXMubWV0aG9kcz1bIm9uIiwib25jZSIsImFmdGVyIiwiYmVmb3JlIl0sdGhp
cy5zY29wZT1bXSx0aGlzLl9tZXRob2RzPXt9LHRoaXMuX2luc2VydD10aGlzLmluc2VydCx0aGlz
Lmluc2VydD10aGlzLmluc2VydEV4LHRoaXMuaGlzdG9yeVN1cHBvcnQ9KHdpbmRvdy5oaXN0b3J5
IT1udWxsP3dpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZTpudWxsKSE9bnVsbCx0aGlzLmNvbmZpZ3Vy
ZSgpLHRoaXMubW91bnQoYXx8e30pO2Vsc2UgcmV0dXJuIG5ldyBlKGEpfTtlLnByb3RvdHlwZS5p
bml0PWZ1bmN0aW9uKGEpe3ZhciBlPXRoaXMsZjt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oYSl7dmFy
IGI9YSYmYS5uZXdVUkx8fHdpbmRvdy5sb2NhdGlvbi5oYXNoLGM9ZS5oaXN0b3J5PT09ITA/ZS5n
ZXRQYXRoKCk6Yi5yZXBsYWNlKC8uKiMvLCIiKTtlLmRpc3BhdGNoKCJvbiIsYy5jaGFyQXQoMCk9
PT0iLyI/YzoiLyIrYyl9LGQuaW5pdCh0aGlzLmhhbmRsZXIsdGhpcy5oaXN0b3J5KSx0aGlzLmhp
c3Rvcnk9PT0hMT9jKCkmJmE/Yi5oYXNoPWE6YygpfHxlLmRpc3BhdGNoKCJvbiIsIi8iK2IuaGFz
aC5yZXBsYWNlKC9eKCNcL3wjfFwvKS8sIiIpKToodGhpcy5jb252ZXJ0X2hhc2hfaW5faW5pdD8o
Zj1jKCkmJmE/YTpjKCk/bnVsbDpiLmhhc2gucmVwbGFjZSgvXiMvLCIiKSxmJiZ3aW5kb3cuaGlz
dG9yeS5yZXBsYWNlU3RhdGUoe30sZG9jdW1lbnQudGl0bGUsZikpOmY9dGhpcy5nZXRQYXRoKCks
KGZ8fHRoaXMucnVuX2luX2luaXQ9PT0hMCkmJnRoaXMuaGFuZGxlcigpKTtyZXR1cm4gdGhpc30s
ZS5wcm90b3R5cGUuZXhwbG9kZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuaGlzdG9yeT09PSEwP3Ro
aXMuZ2V0UGF0aCgpOmIuaGFzaDthLmNoYXJBdCgxKT09PSIvIiYmKGE9YS5zbGljZSgxKSk7cmV0
dXJuIGEuc2xpY2UoMSxhLmxlbmd0aCkuc3BsaXQoIi8iKX0sZS5wcm90b3R5cGUuc2V0Um91dGU9
ZnVuY3Rpb24oYSxiLGMpe3ZhciBlPXRoaXMuZXhwbG9kZSgpO3R5cGVvZiBhPT0ibnVtYmVyIiYm
dHlwZW9mIGI9PSJzdHJpbmciP2VbYV09Yjp0eXBlb2YgYz09InN0cmluZyI/ZS5zcGxpY2UoYSxi
LHMpOmU9W2FdLGQuc2V0SGFzaChlLmpvaW4oIi8iKSk7cmV0dXJuIGV9LGUucHJvdG90eXBlLmlu
c2VydEV4PWZ1bmN0aW9uKGEsYixjLGQpe2E9PT0ib25jZSImJihhPSJvbiIsYz1mdW5jdGlvbihh
KXt2YXIgYj0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighYil7Yj0hMDtyZXR1cm4gYS5hcHBseSh0
aGlzLGFyZ3VtZW50cyl9fX0oYykpO3JldHVybiB0aGlzLl9pbnNlcnQoYSxiLGMsZCl9LGUucHJv
dG90eXBlLmdldFJvdXRlPWZ1bmN0aW9uKGEpe3ZhciBiPWE7aWYodHlwZW9mIGE9PSJudW1iZXIi
KWI9dGhpcy5leHBsb2RlKClbYV07ZWxzZSBpZih0eXBlb2YgYT09InN0cmluZyIpe3ZhciBjPXRo
aXMuZXhwbG9kZSgpO2I9Yy5pbmRleE9mKGEpfWVsc2UgYj10aGlzLmV4cGxvZGUoKTtyZXR1cm4g
Yn0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2QuZGVzdHJveSh0aGlzLmhhbmRsZXIp
O3JldHVybiB0aGlzfSxlLnByb3RvdHlwZS5nZXRQYXRoPWZ1bmN0aW9uKCl7dmFyIGE9d2luZG93
LmxvY2F0aW9uLnBhdGhuYW1lO2Euc3Vic3RyKDAsMSkhPT0iLyImJihhPSIvIithKTtyZXR1cm4g
YX07dmFyIGw9L1w/LiovO2UucHJvdG90eXBlLmNvbmZpZ3VyZT1mdW5jdGlvbihhKXthPWF8fHt9
O2Zvcih2YXIgYj0wO2I8dGhpcy5tZXRob2RzLmxlbmd0aDtiKyspdGhpcy5fbWV0aG9kc1t0aGlz
Lm1ldGhvZHNbYl1dPSEwO3RoaXMucmVjdXJzZT1hLnJlY3Vyc2V8fHRoaXMucmVjdXJzZXx8ITEs
dGhpcy5hc3luYz1hLmFzeW5jfHwhMSx0aGlzLmRlbGltaXRlcj1hLmRlbGltaXRlcnx8Ii8iLHRo
aXMuc3RyaWN0PXR5cGVvZiBhLnN0cmljdD09InVuZGVmaW5lZCI/ITA6YS5zdHJpY3QsdGhpcy5u
b3Rmb3VuZD1hLm5vdGZvdW5kLHRoaXMucmVzb3VyY2U9YS5yZXNvdXJjZSx0aGlzLmhpc3Rvcnk9
YS5odG1sNWhpc3RvcnkmJnRoaXMuaGlzdG9yeVN1cHBvcnR8fCExLHRoaXMucnVuX2luX2luaXQ9
dGhpcy5oaXN0b3J5PT09ITAmJmEucnVuX2hhbmRsZXJfaW5faW5pdCE9PSExLHRoaXMuY29udmVy
dF9oYXNoX2luX2luaXQ9dGhpcy5oaXN0b3J5PT09ITAmJmEuY29udmVydF9oYXNoX2luX2luaXQh
PT0hMSx0aGlzLmV2ZXJ5PXthZnRlcjphLmFmdGVyfHxudWxsLGJlZm9yZTphLmJlZm9yZXx8bnVs
bCxvbjphLm9ufHxudWxsfTtyZXR1cm4gdGhpc30sZS5wcm90b3R5cGUucGFyYW09ZnVuY3Rpb24o
YSxiKXthWzBdIT09IjoiJiYoYT0iOiIrYSk7dmFyIGM9bmV3IFJlZ0V4cChhLCJnIik7dGhpcy5w
YXJhbXNbYV09ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZShjLGIuc291cmNlfHxiKX07cmV0
dXJuIHRoaXN9LGUucHJvdG90eXBlLm9uPWUucHJvdG90eXBlLnJvdXRlPWZ1bmN0aW9uKGEsYixj
KXt2YXIgZD10aGlzOyFjJiZ0eXBlb2YgYj09ImZ1bmN0aW9uIiYmKGM9YixiPWEsYT0ib24iKTtp
ZihBcnJheS5pc0FycmF5KGIpKXJldHVybiBiLmZvckVhY2goZnVuY3Rpb24oYil7ZC5vbihhLGIs
Yyl9KTtiLnNvdXJjZSYmKGI9Yi5zb3VyY2UucmVwbGFjZSgvXFxcLy9pZywiLyIpKTtpZihBcnJh
eS5pc0FycmF5KGEpKXJldHVybiBhLmZvckVhY2goZnVuY3Rpb24oYSl7ZC5vbihhLnRvTG93ZXJD
YXNlKCksYixjKX0pO2I9Yi5zcGxpdChuZXcgUmVnRXhwKHRoaXMuZGVsaW1pdGVyKSksYj1rKGIs
dGhpcy5kZWxpbWl0ZXIpLHRoaXMuaW5zZXJ0KGEsdGhpcy5zY29wZS5jb25jYXQoYiksYyl9LGUu
cHJvdG90eXBlLnBhdGg9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLGQ9dGhpcy5zY29wZS5sZW5n
dGg7YS5zb3VyY2UmJihhPWEuc291cmNlLnJlcGxhY2UoL1xcXC8vaWcsIi8iKSksYT1hLnNwbGl0
KG5ldyBSZWdFeHAodGhpcy5kZWxpbWl0ZXIpKSxhPWsoYSx0aGlzLmRlbGltaXRlciksdGhpcy5z
Y29wZT10aGlzLnNjb3BlLmNvbmNhdChhKSxiLmNhbGwodGhpcyx0aGlzKSx0aGlzLnNjb3BlLnNw
bGljZShkLGEubGVuZ3RoKX0sZS5wcm90b3R5cGUuZGlzcGF0Y2g9ZnVuY3Rpb24oYSxiLGMpe2Z1
bmN0aW9uIGgoKXtkLmxhc3Q9ZS5hZnRlcixkLmludm9rZShkLnJ1bmxpc3QoZSksZCxjKX12YXIg
ZD10aGlzLGU9dGhpcy50cmF2ZXJzZShhLGIucmVwbGFjZShsLCIiKSx0aGlzLnJvdXRlcywiIiks
Zj10aGlzLl9pbnZva2VkLGc7dGhpcy5faW52b2tlZD0hMDtpZighZXx8ZS5sZW5ndGg9PT0wKXt0
aGlzLmxhc3Q9W10sdHlwZW9mIHRoaXMubm90Zm91bmQ9PSJmdW5jdGlvbiImJnRoaXMuaW52b2tl
KFt0aGlzLm5vdGZvdW5kXSx7bWV0aG9kOmEscGF0aDpifSxjKTtyZXR1cm4hMX10aGlzLnJlY3Vy
c2U9PT0iZm9yd2FyZCImJihlPWUucmV2ZXJzZSgpKSxnPXRoaXMuZXZlcnkmJnRoaXMuZXZlcnku
YWZ0ZXI/W3RoaXMuZXZlcnkuYWZ0ZXJdLmNvbmNhdCh0aGlzLmxhc3QpOlt0aGlzLmxhc3RdO2lm
KGcmJmcubGVuZ3RoPjAmJmYpe3RoaXMuYXN5bmM/dGhpcy5pbnZva2UoZyx0aGlzLGgpOih0aGlz
Lmludm9rZShnLHRoaXMpLGgoKSk7cmV0dXJuITB9aCgpO3JldHVybiEwfSxlLnByb3RvdHlwZS5p
bnZva2U9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMsZTt0aGlzLmFzeW5jPyhlPWZ1bmN0aW9u
KGMsZCl7aWYoQXJyYXkuaXNBcnJheShjKSlyZXR1cm4gaChjLGUsZCk7dHlwZW9mIGM9PSJmdW5j
dGlvbiImJmMuYXBwbHkoYiwoYS5jYXB0dXJlc3x8W10pLmNvbmNhdChkKSl9LGgoYSxlLGZ1bmN0
aW9uKCl7YyYmYy5hcHBseShiLGFyZ3VtZW50cyl9KSk6KGU9ZnVuY3Rpb24oYyl7aWYoQXJyYXku
aXNBcnJheShjKSlyZXR1cm4gZihjLGUpO2lmKHR5cGVvZiBjPT0iZnVuY3Rpb24iKXJldHVybiBj
LmFwcGx5KGIsYS5jYXB0dXJlc3x8W10pO3R5cGVvZiBjPT0ic3RyaW5nIiYmZC5yZXNvdXJjZSYm
ZC5yZXNvdXJjZVtjXS5hcHBseShiLGEuY2FwdHVyZXN8fFtdKX0sZihhLGUpKX0sZS5wcm90b3R5
cGUudHJhdmVyc2U9ZnVuY3Rpb24oYSxiLGMsZCxlKXtmdW5jdGlvbiBsKGEpe2Z1bmN0aW9uIGMo
YSl7Zm9yKHZhciBiPWEubGVuZ3RoLTE7Yj49MDtiLS0pQXJyYXkuaXNBcnJheShhW2JdKT8oYyhh
W2JdKSxhW2JdLmxlbmd0aD09PTAmJmEuc3BsaWNlKGIsMSkpOmUoYVtiXSl8fGEuc3BsaWNlKGIs
MSl9ZnVuY3Rpb24gYihhKXt2YXIgYz1bXTtmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKyljW2Rd
PUFycmF5LmlzQXJyYXkoYVtkXSk/YihhW2RdKTphW2RdO3JldHVybiBjfWlmKCFlKXJldHVybiBh
O3ZhciBkPWIoYSk7ZC5tYXRjaGVkPWEubWF0Y2hlZCxkLmNhcHR1cmVzPWEuY2FwdHVyZXMsZC5h
ZnRlcj1hLmFmdGVyLmZpbHRlcihlKSxjKGQpO3JldHVybiBkfXZhciBmPVtdLGcsaCxpLGosaztp
ZihiPT09dGhpcy5kZWxpbWl0ZXImJmNbYV0pe2o9W1tjLmJlZm9yZSxjW2FdXS5maWx0ZXIoQm9v
bGVhbildLGouYWZ0ZXI9W2MuYWZ0ZXJdLmZpbHRlcihCb29sZWFuKSxqLm1hdGNoZWQ9ITAsai5j
YXB0dXJlcz1bXTtyZXR1cm4gbChqKX1mb3IodmFyIG0gaW4gYylpZihjLmhhc093blByb3BlcnR5
KG0pJiYoIXRoaXMuX21ldGhvZHNbbV18fHRoaXMuX21ldGhvZHNbbV0mJnR5cGVvZiBjW21dPT0i
b2JqZWN0IiYmIUFycmF5LmlzQXJyYXkoY1ttXSkpKXtnPWg9ZCt0aGlzLmRlbGltaXRlcittLHRo
aXMuc3RyaWN0fHwoaCs9IlsiK3RoaXMuZGVsaW1pdGVyKyJdPyIpLGk9Yi5tYXRjaChuZXcgUmVn
RXhwKCJeIitoKSk7aWYoIWkpY29udGludWU7aWYoaVswXSYmaVswXT09YiYmY1ttXVthXSl7aj1b
W2NbbV0uYmVmb3JlLGNbbV1bYV1dLmZpbHRlcihCb29sZWFuKV0sai5hZnRlcj1bY1ttXS5hZnRl
cl0uZmlsdGVyKEJvb2xlYW4pLGoubWF0Y2hlZD0hMCxqLmNhcHR1cmVzPWkuc2xpY2UoMSksdGhp
cy5yZWN1cnNlJiZjPT09dGhpcy5yb3V0ZXMmJihqLnB1c2goW2MuYmVmb3JlLGMub25dLmZpbHRl
cihCb29sZWFuKSksai5hZnRlcj1qLmFmdGVyLmNvbmNhdChbYy5hZnRlcl0uZmlsdGVyKEJvb2xl
YW4pKSk7cmV0dXJuIGwoail9aj10aGlzLnRyYXZlcnNlKGEsYixjW21dLGcpO2lmKGoubWF0Y2hl
ZCl7ai5sZW5ndGg+MCYmKGY9Zi5jb25jYXQoaikpLHRoaXMucmVjdXJzZSYmKGYucHVzaChbY1tt
XS5iZWZvcmUsY1ttXS5vbl0uZmlsdGVyKEJvb2xlYW4pKSxqLmFmdGVyPWouYWZ0ZXIuY29uY2F0
KFtjW21dLmFmdGVyXS5maWx0ZXIoQm9vbGVhbikpLGM9PT10aGlzLnJvdXRlcyYmKGYucHVzaChb
Yy5iZWZvcmUsYy5vbl0uZmlsdGVyKEJvb2xlYW4pKSxqLmFmdGVyPWouYWZ0ZXIuY29uY2F0KFtj
LmFmdGVyXS5maWx0ZXIoQm9vbGVhbikpKSksZi5tYXRjaGVkPSEwLGYuY2FwdHVyZXM9ai5jYXB0
dXJlcyxmLmFmdGVyPWouYWZ0ZXI7cmV0dXJuIGwoZil9fXJldHVybiExfSxlLnByb3RvdHlwZS5p
bnNlcnQ9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnLGgsaTtiPWIuZmlsdGVyKGZ1bmN0aW9u
KGEpe3JldHVybiBhJiZhLmxlbmd0aD4wfSksZD1kfHx0aGlzLnJvdXRlcyxpPWIuc2hpZnQoKSwv
XDp8XCovLnRlc3QoaSkmJiEvXFxkfFxcdy8udGVzdChpKSYmKGk9aihpLHRoaXMucGFyYW1zKSk7
aWYoYi5sZW5ndGg+MCl7ZFtpXT1kW2ldfHx7fTtyZXR1cm4gdGhpcy5pbnNlcnQoYSxiLGMsZFtp
XSl9e2lmKCEhaXx8ISFiLmxlbmd0aHx8ZCE9PXRoaXMucm91dGVzKXtmPXR5cGVvZiBkW2ldLGc9
QXJyYXkuaXNBcnJheShkW2ldKTtpZihkW2ldJiYhZyYmZj09Im9iamVjdCIpe2U9dHlwZW9mIGRb
aV1bYV07c3dpdGNoKGUpe2Nhc2UiZnVuY3Rpb24iOmRbaV1bYV09W2RbaV1bYV0sY107cmV0dXJu
O2Nhc2Uib2JqZWN0IjpkW2ldW2FdLnB1c2goYyk7cmV0dXJuO2Nhc2UidW5kZWZpbmVkIjpkW2ld
W2FdPWM7cmV0dXJufX1lbHNlIGlmKGY9PSJ1bmRlZmluZWQiKXtoPXt9LGhbYV09YyxkW2ldPWg7
cmV0dXJufXRocm93IG5ldyBFcnJvcigiSW52YWxpZCByb3V0ZSBjb250ZXh0OiAiK2YpfWU9dHlw
ZW9mIGRbYV07c3dpdGNoKGUpe2Nhc2UiZnVuY3Rpb24iOmRbYV09W2RbYV0sY107cmV0dXJuO2Nh
c2Uib2JqZWN0IjpkW2FdLnB1c2goYyk7cmV0dXJuO2Nhc2UidW5kZWZpbmVkIjpkW2FdPWM7cmV0
dXJufX19LGUucHJvdG90eXBlLmV4dGVuZD1mdW5jdGlvbihhKXtmdW5jdGlvbiBlKGEpe2IuX21l
dGhvZHNbYV09ITAsYlthXT1mdW5jdGlvbigpe3ZhciBjPWFyZ3VtZW50cy5sZW5ndGg9PT0xP1th
LCIiXTpbYV07Yi5vbi5hcHBseShiLGMuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxs
KGFyZ3VtZW50cykpKX19dmFyIGI9dGhpcyxjPWEubGVuZ3RoLGQ7Zm9yKGQ9MDtkPGM7ZCsrKWUo
YVtkXSl9LGUucHJvdG90eXBlLnJ1bmxpc3Q9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5ldmVyeSYm
dGhpcy5ldmVyeS5iZWZvcmU/W3RoaXMuZXZlcnkuYmVmb3JlXS5jb25jYXQoZyhhKSk6ZyhhKTt0
aGlzLmV2ZXJ5JiZ0aGlzLmV2ZXJ5Lm9uJiZiLnB1c2godGhpcy5ldmVyeS5vbiksYi5jYXB0dXJl
cz1hLmNhcHR1cmVzLGIuc291cmNlPWEuc291cmNlO3JldHVybiBifSxlLnByb3RvdHlwZS5tb3Vu
dD1mdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGQoYixkKXt2YXIgZT1iLGY9Yi5zcGxpdChjLmRlbGlt
aXRlciksZz10eXBlb2YgYVtiXSxoPWZbMF09PT0iInx8IWMuX21ldGhvZHNbZlswXV0saT1oPyJv
biI6ZTtoJiYoZT1lLnNsaWNlKChlLm1hdGNoKG5ldyBSZWdFeHAoIl4iK2MuZGVsaW1pdGVyKSl8
fFsiIl0pWzBdLmxlbmd0aCksZi5zaGlmdCgpKTtoJiZnPT09Im9iamVjdCImJiFBcnJheS5pc0Fy
cmF5KGFbYl0pPyhkPWQuY29uY2F0KGYpLGMubW91bnQoYVtiXSxkKSk6KGgmJihkPWQuY29uY2F0
KGUuc3BsaXQoYy5kZWxpbWl0ZXIpKSxkPWsoZCxjLmRlbGltaXRlcikpLGMuaW5zZXJ0KGksZCxh
W2JdKSl9aWYoISFhJiZ0eXBlb2YgYT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KGEpKXt2YXIg
Yz10aGlzO2I9Ynx8W10sQXJyYXkuaXNBcnJheShiKXx8KGI9Yi5zcGxpdChjLmRlbGltaXRlcikp
O2Zvcih2YXIgZSBpbiBhKWEuaGFzT3duUHJvcGVydHkoZSkmJmQoZSxiLnNsaWNlKDApKX19fSko
dHlwZW9mIGV4cG9ydHM9PSJvYmplY3QiP2V4cG9ydHM6d2luZG93KQpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUK
</data>

          </attachment>
      

    </bug>

</bugzilla>