<?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>15834</bug_id>
          
          <creation_ts>2007-11-04 14:58:57 -0800</creation_ts>
          <short_desc>There are many subtle bugs in the Styles pane of the Web Inspector</short_desc>
          <delta_ts>2007-11-04 16:23:16 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Timothy Hatcher">timothy</reporter>
          <assigned_to name="Timothy Hatcher">timothy</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>60257</commentid>
    <comment_count>0</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2007-11-04 14:58:57 -0800</bug_when>
    <thetext>The styles pane has a few bugs.

- Poor handling of duplicate properties in the same rule. Some of this can&apos;t be fixed since we can&apos;t only get the &quot;winning&quot; value for duplicate properties. So we should only show one entry per unique property name.
- Computed style does not show font shorthand properties if font was used.
- Property priority is broken, the wrong properties are crossed out.
- Border shows null for the shorthand value.
- Shorthands don&apos;t show their priority.
- HSL and HEX colors have now preview swatch blocks.
- Complex code, making it hard to reuse for console.log later.

See attached file for some test cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60258</commentid>
    <comment_count>1</comment_count>
      <attachid>17037</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2007-11-04 14:59:13 -0800</bug_when>
    <thetext>Created attachment 17037
Test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60259</commentid>
    <comment_count>2</comment_count>
      <attachid>17038</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2007-11-04 15:06:49 -0800</bug_when>
    <thetext>Created attachment 17038
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60262</commentid>
    <comment_count>3</comment_count>
      <attachid>17038</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-11-04 15:57:56 -0800</bug_when>
    <thetext>Comment on attachment 17038
Patch

+        Bug 15834: There are many subtile bugs in the Styles pane of the Web Inspector

Typo: Subtile -&gt; Subtle

+        for (var i = 0; i &lt; boxes.length; ++i) {
+            var name = boxes[i];

Even though you&apos;ve defined name here, you still use boxes[i] later on.

It looks like PropertiesSidebarPane.js has a bunch of tabs in it.

I&apos;m not really sure what the changes to the TreeOutline code are supposed to be doing (the ChangeLog didn&apos;t mention them).

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60263</commentid>
    <comment_count>4</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2007-11-04 16:23:16 -0800</bug_when>
    <thetext>Fixed the issues Adam mentioned.
Landed in r r27431. http://trac.webkit.org/projects/webkit/changeset/27431</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>17037</attachid>
            <date>2007-11-04 14:59:13 -0800</date>
            <delta_ts>2007-11-04 14:59:13 -0800</delta_ts>
            <desc>Test case</desc>
            <filename>test.html</filename>
            <type>text/html</type>
            <size>1125</size>
            <attacher name="Timothy Hatcher">timothy</attacher>
            
              <data encoding="base64">PHN0eWxlPgoudGVzdDEwIHsKCWNvbG9yOiBibHVlICFpbXBvcnRhbnQ7Cn0KCi50ZXN0MSB7Cglt
YXJnaW46IDRweCA0cHggNHB4IDRweDsKCW1hcmdpbjogMTBweCAxMHB4IDEwcHggMTBweDsKCW1h
cmdpbi10b3A6IDEycHg7Cn0KCi50ZXN0MiB7CgltYXJnaW4tdG9wOiAycHg7CgltYXJnaW46IDRw
eCA0cHggNHB4IDRweDsKCW1hcmdpbi1ib3R0b206IDZweDsKCW1hcmdpbi10b3A6IDhweDsKCW1h
cmdpbjogMTBweCAxMHB4IDEwcHggMTBweDsKCW1hcmdpbi10b3A6IDEycHg7Cn0KCi50ZXN0MyB7
CgltYXJnaW4tdG9wOiAycHg7CgltYXJnaW4tdG9wOiA2cHg7CgltYXJnaW46IDRweCA0cHggNHB4
IDRweDsKfQoKLnRlc3Q0IHsKCWJvcmRlcjogMXB4IHNvbGlkIHJlZDsKCWJvcmRlci1jb2xvcjog
Z3JlZW47Cglib3JkZXItbGVmdC1jb2xvcjogYmx1ZTsKfQoKLnRlc3Q1IHsKCWJvcmRlci1sZWZ0
LWNvbG9yOiBibHVlOwoJYm9yZGVyLWNvbG9yOiBncmVlbjsKCWJvcmRlcjogMXB4IHNvbGlkIHJl
ZDsKfQoKLnRlc3Q5IHsKCWJvcmRlci13aWR0aDogMXB4OwoJYm9yZGVyLXN0eWxlOiBzb2xpZDsK
CWJvcmRlci1jb2xvcjogcmVkICFpbXBvcnRhbnQ7Cn0KCi50ZXN0NiB7Cglib3JkZXItY29sb3I6
IHllbGxvdzsKCWNvbG9yOiByZWQ7Cn0KCi50ZXN0NyB7Cgljb2xvcjogbGltZTsKfQoKLnRlc3Q4
IHsKCWJvcmRlci1yaWdodC1jb2xvcjogcmVkOwoJZm9udDogMTJweCBBcmlhbDsKfQo8L3N0eWxl
Pgo8ZGl2IGNsYXNzPSJ0ZXN0MSI+dGVzdCAxPC9kaXY+CjxkaXYgY2xhc3M9InRlc3QyIj50ZXN0
IDI8L2Rpdj4KPGRpdiBjbGFzcz0idGVzdDMiPnRlc3QgMzwvZGl2Pgo8ZGl2IGNsYXNzPSJ0ZXN0
NCI+dGVzdCA0PC9kaXY+CjxkaXYgY2xhc3M9InRlc3Q1Ij50ZXN0IDU8L2Rpdj4KPGRpdiBjbGFz
cz0idGVzdDUgdGVzdDYiPnRlc3QgNjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0ZXN0NSB0ZXN0NiB0ZXN0
NyI+dGVzdCA3PC9kaXY+CjxkaXYgY2xhc3M9InRlc3Q2IHRlc3Q3IHRlc3Q4Ij50ZXN0IDg8L2Rp
dj4KPGRpdiBjbGFzcz0idGVzdDYgdGVzdDcgdGVzdDkiPnRlc3QgOTwvZGl2Pgo8ZGl2IGNsYXNz
PSJ0ZXN0NiB0ZXN0NyB0ZXN0OSB0ZXN0MTAiPnRlc3QgMTA8L2Rpdj4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17038</attachid>
            <date>2007-11-04 15:06:49 -0800</date>
            <delta_ts>2007-11-04 15:57:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>15834.patch</filename>
            <type>text/plain</type>
            <size>66431</size>
            <attacher name="Timothy Hatcher">timothy</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDI3NDMw
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMDctMTEt
MDQgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAxNTgzNDogVGhlcmUgYXJlIG1h
bnkgc3VidGlsZSBidWdzIGluIHRoZSBTdHlsZXMgcGFuZSBvZiB0aGUgV2ViIEluc3BlY3Rvcgor
ICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTgzNAorCisg
ICAgICAgIC0gQnJva2UgdXAgRG9jdW1lbnRQYW5lbCBhbmQgYWRkZWQgdGhyZWUgU2lkZWJhclBh
bmUgc3ViLWNsYXNzZXMuCisgICAgICAgIC0gRml4ZWQgbWFueSBTdHlsZSBwYW5lIGJ1Z3MsIGlu
Y2x1ZGluZzoKKyAgICAgICAgICAqIFBvb3IgaGFuZGxpbmcgb2YgZHVwbGljYXRlIHByb3BlcnRp
ZXMgaW4gdGhlIHNhbWUgcnVsZS4gU29tZSBvZiB0aGlzIGNhbid0IGJlCisgICAgICAgICAgICBm
aXhlZCBzaW5jZSB3ZSBjYW4ndCBvbmx5IGdldCB0aGUgIndpbm5pbmciIHZhbHVlIGZvciBkdXBs
aWNhdGUgcHJvcGVydGllcy4KKyAgICAgICAgICAgIFNvIHdlIHNob3VsZCBvbmx5IHNob3cgb25l
IGVudHJ5IHBlciB1bmlxdWUgcHJvcGVydHkgbmFtZS4KKyAgICAgICAgICAqIENvbXB1dGVkIHN0
eWxlIGRvZXMgbm90IHNob3cgZm9udCBzaG9ydGhhbmQgc3ViLXByb3BlcnRpZXMgaWYgJ2ZvbnQn
IHdhcyB1c2VkLgorICAgICAgICAgICogUHJvcGVydHkgcHJpb3JpdHkgd2FzIGJyb2tlbiwgdGhl
IHdyb25nIHByb3BlcnRpZXMgd2VyZSBjcm9zc2VkIG91dC4KKyAgICAgICAgICAqIFRoZSAnYm9y
ZGVyJyBzaG9ydGhhbmQgc2hvd3MgbnVsbCBmb3IgdGhlIHNob3J0aGFuZCB2YWx1ZS4KKyAgICAg
ICAgICAqIFNob3J0aGFuZHMgZGlkbid0IHNob3cgdGhlaXIgcHJpb3JpdHkgKGUuZy4gIWltcG9y
dGFudCkuCisgICAgICAgICAgKiBIU0wgYW5kIEhUTUwgaGV4IGNvbG9ycyBkaWRuJ3QgaGF2ZSBw
cmV2aWV3IHN3YXRjaCBibG9ja3MuCisgICAgICAgICAgKiBDb2RlIHJlZmFjdG9yaW5nLCBtYWtp
bmcgaXQgZWFzaWVyIHRvIHJldXNlIGZvciBjb25zb2xlLmxvZyBsYXRlci4KKworICAgICAgICAq
IHBhZ2UvaW5zcGVjdG9yL0RvY3VtZW50UGFuZWwuanM6CisgICAgICAgICogcGFnZS9pbnNwZWN0
b3IvTWV0cmljc1NpZGViYXJQYW5lLmpzOiBBZGRlZC4KKyAgICAgICAgKiBwYWdlL2luc3BlY3Rv
ci9QYW5lbC5qczoKKyAgICAgICAgKiBwYWdlL2luc3BlY3Rvci9Qcm9wZXJ0aWVzU2VjdGlvbi5q
czoKKyAgICAgICAgKiBwYWdlL2luc3BlY3Rvci9Qcm9wZXJ0aWVzU2lkZWJhclBhbmUuanM6IEFk
ZGVkLgorICAgICAgICAqIHBhZ2UvaW5zcGVjdG9yL1NpZGViYXJQYW5lLmpzOgorICAgICAgICAq
IHBhZ2UvaW5zcGVjdG9yL1N0eWxlc1NpZGViYXJQYW5lLmpzOiBBZGRlZC4KKyAgICAgICAgKiBw
YWdlL2luc3BlY3Rvci9pbnNwZWN0b3IuaHRtbDoKKyAgICAgICAgKiBwYWdlL2luc3BlY3Rvci90
cmVlb3V0bGluZS5qczoKKwogMjAwNy0xMS0wNCAgRGF2aWQgRC4gS2lsemVyICA8ZGRraWx6ZXJA
d2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggYnVpbGQgd2hlbiBzcGFjZXMgYXBwZWFyIGluIHRo
ZSBXZWJLaXQgc291cmNlIHBhdGguCkluZGV4OiBwYWdlL2luc3BlY3Rvci9Eb2N1bWVudFBhbmVs
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHBhZ2UvaW5zcGVjdG9yL0RvY3VtZW50UGFuZWwuanMJKHJldmlz
aW9uIDI3MzcyKQorKysgcGFnZS9pbnNwZWN0b3IvRG9jdW1lbnRQYW5lbC5qcwkod29ya2luZyBj
b3B5KQpAQCAtNTUsOSArNTUsOSBAQCBXZWJJbnNwZWN0b3IuRG9jdW1lbnRQYW5lbCA9IGZ1bmN0
aW9uKHJlCiAgICAgZG9tVmlldy5jcnVtYnNFbGVtZW50LmFwcGVuZENoaWxkKGRvbVZpZXcuaW5u
ZXJDcnVtYnNFbGVtZW50KTsKIAogICAgIGRvbVZpZXcuc2lkZWJhclBhbmVzID0ge307Ci0gICAg
ZG9tVmlldy5zaWRlYmFyUGFuZXMuc3R5bGVzID0gbmV3IFdlYkluc3BlY3Rvci5TaWRlYmFyUGFu
ZSgiU3R5bGVzIik7Ci0gICAgZG9tVmlldy5zaWRlYmFyUGFuZXMubWV0cmljcyA9IG5ldyBXZWJJ
bnNwZWN0b3IuU2lkZWJhclBhbmUoIk1ldHJpY3MiKTsKLSAgICBkb21WaWV3LnNpZGViYXJQYW5l
cy5wcm9wZXJ0aWVzID0gbmV3IFdlYkluc3BlY3Rvci5TaWRlYmFyUGFuZSgiUHJvcGVydGllcyIp
OworICAgIGRvbVZpZXcuc2lkZWJhclBhbmVzLnN0eWxlcyA9IG5ldyBXZWJJbnNwZWN0b3IuU3R5
bGVzU2lkZWJhclBhbmUoKTsKKyAgICBkb21WaWV3LnNpZGViYXJQYW5lcy5tZXRyaWNzID0gbmV3
IFdlYkluc3BlY3Rvci5NZXRyaWNzU2lkZWJhclBhbmUoKTsKKyAgICBkb21WaWV3LnNpZGViYXJQ
YW5lcy5wcm9wZXJ0aWVzID0gbmV3IFdlYkluc3BlY3Rvci5Qcm9wZXJ0aWVzU2lkZWJhclBhbmUo
KTsKIAogICAgIHZhciBwYW5lbCA9IHRoaXM7CiAgICAgZG9tVmlldy5zaWRlYmFyUGFuZXMuc3R5
bGVzLm9uZXhwYW5kID0gZnVuY3Rpb24oKSB7IHBhbmVsLnVwZGF0ZVN0eWxlcygpIH07CkBAIC0x
MDUsNyArMTA1LDcgQEAgV2ViSW5zcGVjdG9yLkRvY3VtZW50UGFuZWwucHJvdG90eXBlID0gewog
ICAgICAgICBpZiAoIXRoaXMudmlld3MuZG9tLnRyZWVPdXRsaW5lIHx8ICF0aGlzLnZpZXdzLmRv
bS50cmVlT3V0bGluZS5zZWxlY3RlZFRyZWVFbGVtZW50KQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMudmlld3MuZG9tLnRyZWVPdXRsaW5lLnNlbGVjdGVk
VHJlZUVsZW1lbnQ7Ci0gICAgICAgIGVsZW1lbnQudXBkYXRlU2VsZWN0aW9uKGVsZW1lbnQpOwor
ICAgICAgICBlbGVtZW50LnVwZGF0ZVNlbGVjdGlvbigpOwogICAgIH0sCiAKICAgICBnZXQgcm9v
dERPTU5vZGUoKQpAQCAtMTgxLDggKzE4MSw3IEBAIFdlYkluc3BlY3Rvci5Eb2N1bWVudFBhbmVs
LnByb3RvdHlwZSA9IHsKICAgICAgICAgLy8gRklYTUU6IHRoaXMgY291bGQgdXNlIGZpbmRUcmVl
RWxlbWVudCB0byByZXVzZSBhIHRyZWUgZWxlbWVudCBpZiBpdCBhbHJlYWR5IGV4aXN0cwogICAg
ICAgICB2YXIgbm9kZSA9IChQcmVmZXJlbmNlcy5pZ25vcmVXaGl0ZXNwYWNlID8gZmlyc3RDaGls
ZFNraXBwaW5nV2hpdGVzcGFjZS5jYWxsKHRoaXMucm9vdERPTU5vZGUpIDogdGhpcy5yb290RE9N
Tm9kZS5maXJzdENoaWxkKTsKICAgICAgICAgd2hpbGUgKG5vZGUpIHsKLSAgICAgICAgICAgIHZh
ciBpdGVtID0gbmV3IFdlYkluc3BlY3Rvci5ET01Ob2RlVHJlZUVsZW1lbnQobm9kZSk7Ci0gICAg
ICAgICAgICB0aGlzLnZpZXdzLmRvbS50cmVlT3V0bGluZS5hcHBlbmRDaGlsZChpdGVtKTsKKyAg
ICAgICAgICAgIHRoaXMudmlld3MuZG9tLnRyZWVPdXRsaW5lLmFwcGVuZENoaWxkKG5ldyBXZWJJ
bnNwZWN0b3IuRE9NTm9kZVRyZWVFbGVtZW50KG5vZGUpKTsKICAgICAgICAgICAgIG5vZGUgPSBQ
cmVmZXJlbmNlcy5pZ25vcmVXaGl0ZXNwYWNlID8gbmV4dFNpYmxpbmdTa2lwcGluZ1doaXRlc3Bh
Y2UuY2FsbChub2RlKSA6IG5vZGUubmV4dFNpYmxpbmc7CiAgICAgICAgIH0KIApAQCAtMzEyLDM3
MCArMzExLDMyIEBAIFdlYkluc3BlY3Rvci5Eb2N1bWVudFBhbmVsLnByb3RvdHlwZSA9IHsKIAog
ICAgIHVwZGF0ZVN0eWxlczogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLnZp
ZXdzLmRvbS5zaWRlYmFyUGFuZXMuc3R5bGVzLmV4cGFuZGVkKQorICAgICAgICB2YXIgc3R5bGVz
U2lkZWJhclBhbmUgPSB0aGlzLnZpZXdzLmRvbS5zaWRlYmFyUGFuZXMuc3R5bGVzOworICAgICAg
ICBpZiAoIXN0eWxlc1NpZGViYXJQYW5lLmV4cGFuZGVkIHx8ICFzdHlsZXNTaWRlYmFyUGFuZS5u
ZWVkc1VwZGF0ZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKCF0aGlzLnZpZXdz
LmRvbS5zaWRlYmFyUGFuZXMuc3R5bGVzLm5lZWRzVXBkYXRlKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIHRoaXMudmlld3MuZG9tLnNpZGViYXJQYW5lcy5zdHlsZXMubmVlZHNVcGRh
dGUgPSBmYWxzZTsKLQotICAgICAgICB2YXIgc3R5bGVzQm9keSA9IHRoaXMudmlld3MuZG9tLnNp
ZGViYXJQYW5lcy5zdHlsZXMuYm9keUVsZW1lbnQ7Ci0KLSAgICAgICAgc3R5bGVzQm9keS5yZW1v
dmVDaGlsZHJlbigpOwotICAgICAgICB0aGlzLnZpZXdzLmRvbS5zaWRlYmFyUGFuZXMuc3R5bGVz
LnNlY3Rpb25zID0gW107Ci0KLSAgICAgICAgaWYgKCF0aGlzLmZvY3VzZWRET01Ob2RlKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBzdHlsZU5vZGUgPSB0aGlzLmZvY3VzZWRE
T01Ob2RlOwotICAgICAgICBpZiAoc3R5bGVOb2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9E
RSAmJiBzdHlsZU5vZGUucGFyZW50Tm9kZSkKLSAgICAgICAgICAgIHN0eWxlTm9kZSA9IHN0eWxl
Tm9kZS5wYXJlbnROb2RlOwotCi0gICAgICAgIHZhciBzdHlsZVJ1bGVzID0gW107Ci0gICAgICAg
IHZhciBzdHlsZVByb3BlcnRpZXMgPSBbXTsKLQotICAgICAgICBpZiAoc3R5bGVOb2RlLm5vZGVU
eXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkgewotICAgICAgICAgICAgdmFyIHByb3BlcnR5Q291
bnQgPSBbXTsKLQotICAgICAgICAgICAgdmFyIGNvbXB1dGVkU3R5bGUgPSBzdHlsZU5vZGUub3du
ZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKHN0eWxlTm9kZSk7Ci0gICAg
ICAgICAgICBpZiAoY29tcHV0ZWRTdHlsZSAmJiBjb21wdXRlZFN0eWxlLmxlbmd0aCkKLSAgICAg
ICAgICAgICAgICBzdHlsZVJ1bGVzLnB1c2goeyBpc0NvbXB1dGVkU3R5bGU6IHRydWUsIHNlbGVj
dG9yVGV4dDogIkNvbXB1dGVkIFN0eWxlIiwgc3R5bGU6IGNvbXB1dGVkU3R5bGUgfSk7Ci0KLSAg
ICAgICAgICAgIHZhciBzdHlsZU5vZGVOYW1lID0gc3R5bGVOb2RlLm5vZGVOYW1lLnRvTG93ZXJD
YXNlKCk7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlTm9kZS5hdHRyaWJ1
dGVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGF0dHIgPSBzdHlsZU5vZGUu
YXR0cmlidXRlc1tpXTsKLSAgICAgICAgICAgICAgICBpZiAoYXR0ci5zdHlsZSkgewotICAgICAg
ICAgICAgICAgICAgICB2YXIgYXR0clN0eWxlID0geyBhdHRyTmFtZTogYXR0ci5uYW1lLCBzdHls
ZTogYXR0ci5zdHlsZSB9OwotICAgICAgICAgICAgICAgICAgICBhdHRyU3R5bGUuc3VidGl0bGUg
PSAiZWxlbWVudFx1MjAxOXMgXHUyMDFDIiArIGF0dHIubmFtZSArICJcdTIwMUQgYXR0cmlidXRl
IjsKLSAgICAgICAgICAgICAgICAgICAgYXR0clN0eWxlLnNlbGVjdG9yVGV4dCA9IHN0eWxlTm9k
ZU5hbWUgKyAiWyIgKyBhdHRyLm5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdHRyLnZh
bHVlLmxlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJTdHlsZS5zZWxlY3RvclRl
eHQgKz0gIj0iICsgYXR0ci52YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgYXR0clN0eWxlLnNl
bGVjdG9yVGV4dCArPSAiXSI7Ci0gICAgICAgICAgICAgICAgICAgIHN0eWxlUnVsZXMucHVzaChh
dHRyU3R5bGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKHN0eWxlTm9kZS5zdHlsZSAmJiBzdHlsZU5vZGUuc3R5bGUubGVuZ3RoKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIGlubGluZVN0eWxlID0geyBzZWxlY3RvclRleHQ6ICJJbmxpbmUgU3R5
bGUgQXR0cmlidXRlIiwgc3R5bGU6IHN0eWxlTm9kZS5zdHlsZSB9OwotICAgICAgICAgICAgICAg
IGlubGluZVN0eWxlLnN1YnRpdGxlID0gImVsZW1lbnRcdTIwMTlzIFx1MjAxQ3N0eWxlXHUyMDFE
IGF0dHJpYnV0ZSI7Ci0gICAgICAgICAgICAgICAgc3R5bGVSdWxlcy5wdXNoKGlubGluZVN0eWxl
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIG1hdGNoZWRTdHlsZVJ1bGVzID0g
c3R5bGVOb2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0TWF0Y2hlZENTU1J1bGVzKHN0
eWxlTm9kZSwgIiIsICFQcmVmZXJlbmNlcy5zaG93VXNlckFnZW50U3R5bGVzKTsKLSAgICAgICAg
ICAgIGlmIChtYXRjaGVkU3R5bGVSdWxlcykgewotICAgICAgICAgICAgICAgIGZvciAodmFyIGkg
PSBtYXRjaGVkU3R5bGVSdWxlcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkKLSAgICAgICAgICAg
ICAgICAgICAgc3R5bGVSdWxlcy5wdXNoKG1hdGNoZWRTdHlsZVJ1bGVzW2ldKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgdmFyIHByaW9yaXR5VXNlZCA9IGZhbHNlOwotICAgICAgICAg
ICAgdmFyIHVzZWRQcm9wZXJ0aWVzID0ge307Ci0gICAgICAgICAgICB2YXIgc2hvcnRoYW5kUHJv
cGVydGllcyA9IHt9OwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZVJ1bGVz
Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgc3R5bGVQcm9wZXJ0aWVzW2ldID0gW107
Ci0KLSAgICAgICAgICAgICAgICB2YXIgc3R5bGUgPSBzdHlsZVJ1bGVzW2ldLnN0eWxlOwotICAg
ICAgICAgICAgICAgIHZhciBzdHlsZVNob3J0aGFuZExvb2t1cCA9IFtdOwotICAgICAgICAgICAg
ICAgIGZvciAodmFyIGogPSAwOyBqIDwgc3R5bGUubGVuZ3RoOyArK2opIHsKLSAgICAgICAgICAg
ICAgICAgICAgdmFyIHByb3AgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9
IHN0eWxlW2pdOwotICAgICAgICAgICAgICAgICAgICB2YXIgc2hvcnRoYW5kID0gc3R5bGUuZ2V0
UHJvcGVydHlTaG9ydGhhbmQobmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghc2hvcnRo
YW5kICYmIHN0eWxlUnVsZXNbaV0uaXNDb21wdXRlZFN0eWxlKQotICAgICAgICAgICAgICAgICAg
ICAgICAgc2hvcnRoYW5kID0gc2hvcnRoYW5kUHJvcGVydGllc1tuYW1lXTsKLQotICAgICAgICAg
ICAgICAgICAgICBpZiAoc2hvcnRoYW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm9w
ID0gc3R5bGVTaG9ydGhhbmRMb29rdXBbc2hvcnRoYW5kXTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHNob3J0aGFuZFByb3BlcnRpZXNbbmFtZV0gPSBzaG9ydGhhbmQ7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoIXByaW9yaXR5VXNlZCAmJiBzdHls
ZS5nZXRQcm9wZXJ0eVByaW9yaXR5KG5hbWUpLmxlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHByaW9yaXR5VXNlZCA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHByb3Ap
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3Auc3ViUHJvcGVydGllcy5wdXNoKG5hbWUp
OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
cHJvcCA9IHsgc3R5bGU6IHN0eWxlLCBzdWJQcm9wZXJ0aWVzOiBbbmFtZV0sIHVudXNlZFByb3Bl
cnRpZXM6IFtdLCBuYW1lOiAoc2hvcnRoYW5kID8gc2hvcnRoYW5kIDogbmFtZSkgfTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHN0eWxlUHJvcGVydGllc1tpXS5wdXNoKHByb3ApOwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoc2hvcnRoYW5kKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3R5bGVTaG9ydGhhbmRMb29rdXBbc2hvcnRoYW5kXSA9IHByb3A7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHlsZVJ1bGVzW2ldLmlzQ29tcHV0ZWRTdHlsZSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb3BlcnR5Q291bnRbc2hv
cnRoYW5kXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlD
b3VudFtzaG9ydGhhbmRdID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3AudW51c2VkUHJv
cGVydGllc1tzaG9ydGhhbmRdID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByb3BlcnR5Q291bnRbc2hvcnRoYW5kXSsrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHN0eWxlUnVsZXNbaV0uaXNDb21wdXRlZFN0eWxlKQotICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgdXNlZFByb3BlcnRpZXNbbmFt
ZV0gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBpZiAoc2hvcnRoYW5kKQotICAgICAgICAg
ICAgICAgICAgICAgICAgdXNlZFByb3BlcnRpZXNbc2hvcnRoYW5kXSA9IHRydWU7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eUNvdW50W25hbWVdKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eUNvdW50W25hbWVdID0gMTsKLSAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3AudW51c2VkUHJvcGVydGllc1tu
YW1lXSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUNvdW50W25hbWVd
Kys7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmIChwcmlvcml0eVVzZWQpIHsKLSAgICAgICAgICAgICAgICAv
LyB3YWxrIHRoZSBwcm9wZXJ0aWVzIGFnYWluIGFuZCBhY2NvdW50IGZvciAhaW1wb3J0YW50Ci0g
ICAgICAgICAgICAgICAgdmFyIHByaW9yaXR5Q291bnQgPSBbXTsKLSAgICAgICAgICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHN0eWxlUnVsZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHN0eWxlUnVsZXNbaV0uaXNDb21wdXRlZFN0eWxlKQotICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBzdHlsZSA9IHN0
eWxlUnVsZXNbaV0uc3R5bGU7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBq
IDwgc3R5bGVQcm9wZXJ0aWVzW2ldLmxlbmd0aDsgKytqKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgcHJvcCA9IHN0eWxlUHJvcGVydGllc1tpXVtqXTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcHJvcC5zdWJQcm9wZXJ0aWVzLmxlbmd0aDsgKytr
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBwcm9wLnN1YlByb3Bl
cnRpZXNba107Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlLmdldFByb3Bl
cnR5UHJpb3JpdHkobmFtZSkubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghcHJpb3JpdHlDb3VudFtuYW1lXSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHByb3AudW51c2VkUHJvcGVydGllc1tuYW1lXSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wLnVudXNlZFByb3BlcnRpZXNbbmFtZV0g
PSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5Q291
bnRbbmFtZV0gPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHlDb3VudFtuYW1lXSsr
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChwcmlvcml0eUNvdW50W25hbWVdKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHByb3AudW51c2VkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICB2YXIgc3R5bGVSdWxlc0xlbmd0aCA9IHN0eWxlUnVsZXMubGVuZ3RoOwot
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZVJ1bGVzTGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgICAgICAgICB2YXIgc2VsZWN0b3JUZXh0ID0gc3R5bGVSdWxlc1tpXS5zZWxlY3Rv
clRleHQ7Ci0KLSAgICAgICAgICAgICAgICB2YXIgc2VjdGlvbiA9IG5ldyBXZWJJbnNwZWN0b3Iu
UHJvcGVydGllc1NlY3Rpb24oc2VsZWN0b3JUZXh0KTsKLSAgICAgICAgICAgICAgICBzZWN0aW9u
LmV4cGFuZGVkID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgIGlmIChzdHlsZVJ1bGVzW2ldLmlz
Q29tcHV0ZWRTdHlsZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoUHJlZmVyZW5jZXMuc2hv
d0luaGVyaXRlZENvbXB1dGVkU3R5bGVQcm9wZXJ0aWVzKQotICAgICAgICAgICAgICAgICAgICAg
ICAgc2VjdGlvbi5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoInNob3ctaW5oZXJpdGVkIik7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgdmFyIHNob3dJbmhlcml0ZWRMYWJlbCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImxhYmVsIik7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBzaG93SW5oZXJpdGVk
SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgICAgICAgICAgICAg
ICAgICBzaG93SW5oZXJpdGVkSW5wdXQudHlwZSA9ICJjaGVja2JveCI7Ci0gICAgICAgICAgICAg
ICAgICAgIHNob3dJbmhlcml0ZWRJbnB1dC5jaGVja2VkID0gUHJlZmVyZW5jZXMuc2hvd0luaGVy
aXRlZENvbXB1dGVkU3R5bGVQcm9wZXJ0aWVzOwotCi0gICAgICAgICAgICAgICAgICAgIHZhciBj
b21wdXRlZFN0eWxlU2VjdGlvbiA9IHNlY3Rpb247Ci0gICAgICAgICAgICAgICAgICAgIHZhciBz
aG93SW5oZXJpdGVkVG9nZ2xlRnVuY3Rpb24gPSBmdW5jdGlvbihldmVudCkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgUHJlZmVyZW5jZXMuc2hvd0luaGVyaXRlZENvbXB1dGVkU3R5bGVQcm9w
ZXJ0aWVzID0gc2hvd0luaGVyaXRlZElucHV0LmNoZWNrZWQ7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoUHJlZmVyZW5jZXMuc2hvd0luaGVyaXRlZENvbXB1dGVkU3R5bGVQcm9wZXJ0aWVz
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkU3R5bGVTZWN0aW9uLmVsZW1l
bnQuYWRkU3R5bGVDbGFzcygic2hvdy1pbmhlcml0ZWQiKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlZFN0eWxlU2VjdGlv
bi5lbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoInNob3ctaW5oZXJpdGVkIik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKLSAgICAgICAgICAgICAgICAg
ICAgfTsKLQotICAgICAgICAgICAgICAgICAgICBzaG93SW5oZXJpdGVkTGFiZWwuYWRkRXZlbnRM
aXN0ZW5lcigiY2xpY2siLCBzaG93SW5oZXJpdGVkVG9nZ2xlRnVuY3Rpb24sIGZhbHNlKTsKLQot
ICAgICAgICAgICAgICAgICAgICBzaG93SW5oZXJpdGVkTGFiZWwuYXBwZW5kQ2hpbGQoc2hvd0lu
aGVyaXRlZElucHV0KTsKLSAgICAgICAgICAgICAgICAgICAgc2hvd0luaGVyaXRlZExhYmVsLmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJTaG93IGltcGxpY2l0IHByb3BlcnRp
ZXMiKSk7Ci0gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uc3VidGl0bGVFbGVtZW50LmFwcGVu
ZENoaWxkKHNob3dJbmhlcml0ZWRMYWJlbCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgdmFyIHNoZWV0OwotICAgICAgICAgICAgICAgICAgICB2YXIgZmls
ZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGVSdWxlc1tpXS5zdWJ0aXRs
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNoZWV0ID0gc3R5bGVSdWxlc1tpXS5zdWJ0aXRs
ZTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGVSdWxlc1tpXS5wYXJlbnRTdHls
ZVNoZWV0ICYmIHN0eWxlUnVsZXNbaV0ucGFyZW50U3R5bGVTaGVldC5ocmVmKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgdXJsID0gc3R5bGVSdWxlc1tpXS5wYXJlbnRTdHlsZVNoZWV0
LmhyZWY7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzaGVldCA9IFdlYkluc3BlY3Rvci5saW5r
aWZ5VVJMKHVybCwgdXJsLnRyaW1VUkwoV2ViSW5zcGVjdG9yLm1haW5SZXNvdXJjZS5kb21haW4p
LmVzY2FwZUhUTUwoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHlsZVJ1bGVzW2ldLnBhcmVudFN0eWxlU2hl
ZXQgJiYgIXN0eWxlUnVsZXNbaV0ucGFyZW50U3R5bGVTaGVldC5vd25lck5vZGUpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzaGVldCA9ICJ1c2VyIGFnZW50IHN0eWxlc2hlZXQiOwotICAgICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBzaGVldCA9ICJpbmxp
bmUgc3R5bGVzaGVldCI7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGUpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzZWN0aW9uLnN1YnRpdGxlRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJm
aWxlIik7Ci0KLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi5zdWJ0aXRsZSA9IHNoZWV0Owot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHN0eWxlc0JvZHkuYXBwZW5kQ2hp
bGQoc2VjdGlvbi5lbGVtZW50KTsKLSAgICAgICAgICAgICAgICB0aGlzLnZpZXdzLmRvbS5zaWRl
YmFyUGFuZXMuc3R5bGVzLnNlY3Rpb25zLnB1c2goc2VjdGlvbik7Ci0KLSAgICAgICAgICAgICAg
ICB2YXIgcHJvcGVydGllcyA9IHN0eWxlUHJvcGVydGllc1tpXTsKLSAgICAgICAgICAgICAgICB2
YXIgaXNDb21wdXRlZFN0eWxlID0gc3R5bGVSdWxlc1tpXS5pc0NvbXB1dGVkU3R5bGU7Ci0KLSAg
ICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHByb3BlcnRpZXMubGVuZ3RoOyArK2op
IHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHByb3AgPSBwcm9wZXJ0aWVzW2pdOwogCi0gICAg
ICAgICAgICAgICAgICAgIHZhciBwcm9wVHJlZUVsZW1lbnQgPSBuZXcgV2ViSW5zcGVjdG9yLlN0
eWxlUHJvcGVydHlUcmVlRWxlbWVudChwcm9wLCBpc0NvbXB1dGVkU3R5bGUsIHVzZWRQcm9wZXJ0
aWVzKTsKLSAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi5wcm9wZXJ0aWVzVHJlZU91dGxpbmUu
YXBwZW5kQ2hpbGQocHJvcFRyZWVFbGVtZW50KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBjYW4ndCBzdHlsZSB0aGlz
IG5vZGUKLSAgICAgICAgfQorICAgICAgICBzdHlsZXNTaWRlYmFyUGFuZS51cGRhdGUodGhpcy5m
b2N1c2VkRE9NTm9kZSk7CisgICAgICAgIHN0eWxlc1NpZGViYXJQYW5lLm5lZWRzVXBkYXRlID0g
ZmFsc2U7CiAgICAgfSwKIAogICAgIHVwZGF0ZU1ldHJpY3M6IGZ1bmN0aW9uKCkKICAgICB7Ci0g
ICAgICAgIGlmICghdGhpcy52aWV3cy5kb20uc2lkZWJhclBhbmVzLm1ldHJpY3MuZXhwYW5kZWQp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICghdGhpcy52aWV3cy5kb20uc2lkZWJh
clBhbmVzLm1ldHJpY3MubmVlZHNVcGRhdGUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgdGhpcy52aWV3cy5kb20uc2lkZWJhclBhbmVzLm1ldHJpY3MubmVlZHNVcGRhdGUgPSBmYWxz
ZTsKLQotICAgICAgICB2YXIgbWV0cmljc0JvZHkgPSB0aGlzLnZpZXdzLmRvbS5zaWRlYmFyUGFu
ZXMubWV0cmljcy5ib2R5RWxlbWVudDsKLQotICAgICAgICBtZXRyaWNzQm9keS5yZW1vdmVDaGls
ZHJlbigpOwotCi0gICAgICAgIGlmICghdGhpcy5mb2N1c2VkRE9NTm9kZSkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICB2YXIgc3R5bGU7Ci0gICAgICAgIGlmICh0aGlzLmZvY3VzZWRE
T01Ob2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICAgICAgICAgIHN0eWxl
ID0gdGhpcy5mb2N1c2VkRE9NTm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1
dGVkU3R5bGUodGhpcy5mb2N1c2VkRE9NTm9kZSk7Ci0gICAgICAgIGlmICghc3R5bGUpCisgICAg
ICAgIHZhciBtZXRyaWNzU2lkZWJhclBhbmUgPSB0aGlzLnZpZXdzLmRvbS5zaWRlYmFyUGFuZXMu
bWV0cmljczsKKyAgICAgICAgaWYgKCFtZXRyaWNzU2lkZWJhclBhbmUuZXhwYW5kZWQgfHwgIW1l
dHJpY3NTaWRlYmFyUGFuZS5uZWVkc1VwZGF0ZSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAg
ICAgICB2YXIgbWV0cmljc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsK
LSAgICAgICAgbWV0cmljc0VsZW1lbnQuY2xhc3NOYW1lID0gIm1ldHJpY3MiOwotCi0gICAgICAg
IGZ1bmN0aW9uIGJveFBhcnRWYWx1ZShzdHlsZSwgbmFtZSwgc3VmZml4KQotICAgICAgICB7Ci0g
ICAgICAgICAgICB2YXIgdmFsdWUgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUgKyBzdWZm
aXgpOwotICAgICAgICAgICAgaWYgKHZhbHVlID09PSAiIiB8fCB2YWx1ZSA9PT0gIjBweCIpCi0g
ICAgICAgICAgICAgICAgdmFsdWUgPSAiXHUyMDEyIjsKLSAgICAgICAgICAgIHJldHVybiB2YWx1
ZS5yZXBsYWNlKC9weCQvLCAiIik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBEaXNwbGF5IHR5
cGVzIGZvciB3aGljaCBtYXJnaW4gaXMgaWdub3JlZC4KLSAgICAgICAgdmFyIG5vTWFyZ2luRGlz
cGxheVR5cGUgPSB7Ci0gICAgICAgICAgICAidGFibGUtY2VsbCI6IHRydWUsCi0gICAgICAgICAg
ICAidGFibGUtY29sdW1uIjogdHJ1ZSwKLSAgICAgICAgICAgICJ0YWJsZS1jb2x1bW4tZ3JvdXAi
OiB0cnVlLAotICAgICAgICAgICAgInRhYmxlLWZvb3Rlci1ncm91cCI6IHRydWUsCi0gICAgICAg
ICAgICAidGFibGUtaGVhZGVyLWdyb3VwIjogdHJ1ZSwKLSAgICAgICAgICAgICJ0YWJsZS1yb3ci
OiB0cnVlLAotICAgICAgICAgICAgInRhYmxlLXJvdy1ncm91cCI6IHRydWUKLSAgICAgICAgfTsK
LQotICAgICAgICAvLyBEaXNwbGF5IHR5cGVzIGZvciB3aGljaCBwYWRkaW5nIGlzIGlnbm9yZWQu
Ci0gICAgICAgIHZhciBub1BhZGRpbmdEaXNwbGF5VHlwZSA9IHsKLSAgICAgICAgICAgICJ0YWJs
ZS1jb2x1bW4iOiB0cnVlLAotICAgICAgICAgICAgInRhYmxlLWNvbHVtbi1ncm91cCI6IHRydWUs
Ci0gICAgICAgICAgICAidGFibGUtZm9vdGVyLWdyb3VwIjogdHJ1ZSwKLSAgICAgICAgICAgICJ0
YWJsZS1oZWFkZXItZ3JvdXAiOiB0cnVlLAotICAgICAgICAgICAgInRhYmxlLXJvdyI6IHRydWUs
Ci0gICAgICAgICAgICAidGFibGUtcm93LWdyb3VwIjogdHJ1ZQotICAgICAgICB9OwotCi0gICAg
ICAgIHZhciBib3hlcyA9IFsiY29udGVudCIsICJwYWRkaW5nIiwgImJvcmRlciIsICJtYXJnaW4i
XTsKLSAgICAgICAgdmFyIHByZXZpb3VzQm94OwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGJveGVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgbmFtZSA9IGJveGVzW2ldOwot
Ci0gICAgICAgICAgICBpZiAobmFtZSA9PT0gIm1hcmdpbiIgJiYgbm9NYXJnaW5EaXNwbGF5VHlw
ZVtzdHlsZS5kaXNwbGF5XSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IGlmIChuYW1lID09PSAicGFkZGluZyIgJiYgbm9QYWRkaW5nRGlzcGxheVR5cGVbc3R5bGUuZGlz
cGxheV0pCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIHZhciBib3hF
bGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgICAgICBib3hF
bGVtZW50LmNsYXNzTmFtZSA9IG5hbWU7Ci0KLSAgICAgICAgICAgIGlmIChib3hlc1tpXSA9PT0g
ImNvbnRlbnQiKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gc3R5bGUud2lkdGgucmVw
bGFjZSgvcHgkLywgIiIpOwotICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSBzdHlsZS5oZWln
aHQucmVwbGFjZSgvcHgkLywgIiIpOwotICAgICAgICAgICAgICAgIGJveEVsZW1lbnQudGV4dENv
bnRlbnQgPSB3aWR0aCArICIgXHUwMEQ3ICIgKyBoZWlnaHQ7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIHZhciBzdWZmaXggPSBib3hlc1tpXSA9PT0gImJvcmRlciIgPyAi
LXdpZHRoIiA6ICIiOwotCi0gICAgICAgICAgICAgICAgdmFyIGxhYmVsRWxlbWVudCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgICAgICAgICAgICAgIGxhYmVsRWxlbWVudC5j
bGFzc05hbWUgPSAibGFiZWwiOwotICAgICAgICAgICAgICAgIGxhYmVsRWxlbWVudC50ZXh0Q29u
dGVudCA9IG5hbWU7Ci0gICAgICAgICAgICAgICAgYm94RWxlbWVudC5hcHBlbmRDaGlsZChsYWJl
bEVsZW1lbnQpOwotCi0gICAgICAgICAgICAgICAgdmFyIHRvcEVsZW1lbnQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgICAgICAgICB0b3BFbGVtZW50LmNsYXNzTmFt
ZSA9ICJ0b3AiOwotICAgICAgICAgICAgICAgIHRvcEVsZW1lbnQudGV4dENvbnRlbnQgPSBib3hQ
YXJ0VmFsdWUoc3R5bGUsIG5hbWUgKyAiLXRvcCIsIHN1ZmZpeCk7Ci0gICAgICAgICAgICAgICAg
Ym94RWxlbWVudC5hcHBlbmRDaGlsZCh0b3BFbGVtZW50KTsKLQotICAgICAgICAgICAgICAgIHZh
ciBsZWZ0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgICAgICAg
ICAgICAgIGxlZnRFbGVtZW50LmNsYXNzTmFtZSA9ICJsZWZ0IjsKLSAgICAgICAgICAgICAgICBs
ZWZ0RWxlbWVudC50ZXh0Q29udGVudCA9IGJveFBhcnRWYWx1ZShzdHlsZSwgbmFtZSArICItbGVm
dCIsIHN1ZmZpeCk7Ci0gICAgICAgICAgICAgICAgYm94RWxlbWVudC5hcHBlbmRDaGlsZChsZWZ0
RWxlbWVudCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNCb3gpCi0gICAgICAgICAg
ICAgICAgICAgIGJveEVsZW1lbnQuYXBwZW5kQ2hpbGQocHJldmlvdXNCb3gpOwotCi0gICAgICAg
ICAgICAgICAgdmFyIHJpZ2h0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
OwotICAgICAgICAgICAgICAgIHJpZ2h0RWxlbWVudC5jbGFzc05hbWUgPSAicmlnaHQiOwotICAg
ICAgICAgICAgICAgIHJpZ2h0RWxlbWVudC50ZXh0Q29udGVudCA9IGJveFBhcnRWYWx1ZShzdHls
ZSwgbmFtZSArICItcmlnaHQiLCBzdWZmaXgpOwotICAgICAgICAgICAgICAgIGJveEVsZW1lbnQu
YXBwZW5kQ2hpbGQocmlnaHRFbGVtZW50KTsKLQotICAgICAgICAgICAgICAgIHZhciBib3R0b21F
bGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgICAgICAgICAg
Ym90dG9tRWxlbWVudC5jbGFzc05hbWUgPSAiYm90dG9tIjsKLSAgICAgICAgICAgICAgICBib3R0
b21FbGVtZW50LnRleHRDb250ZW50ID0gYm94UGFydFZhbHVlKHN0eWxlLCBuYW1lICsgIi1ib3R0
b20iLCBzdWZmaXgpOwotICAgICAgICAgICAgICAgIGJveEVsZW1lbnQuYXBwZW5kQ2hpbGQoYm90
dG9tRWxlbWVudCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHByZXZpb3VzQm94ID0g
Ym94RWxlbWVudDsKLSAgICAgICAgfQotCi0gICAgICAgIG1ldHJpY3NFbGVtZW50LmFwcGVuZENo
aWxkKHByZXZpb3VzQm94KTsKLSAgICAgICAgbWV0cmljc0JvZHkuYXBwZW5kQ2hpbGQobWV0cmlj
c0VsZW1lbnQpOworICAgICAgICBtZXRyaWNzU2lkZWJhclBhbmUudXBkYXRlKHRoaXMuZm9jdXNl
ZERPTU5vZGUpOworICAgICAgICBtZXRyaWNzU2lkZWJhclBhbmUubmVlZHNVcGRhdGUgPSBmYWxz
ZTsKICAgICB9LAogCiAgICAgdXBkYXRlUHJvcGVydGllczogZnVuY3Rpb24oKQogICAgIHsKLSAg
ICAgICAgaWYgKCF0aGlzLnZpZXdzLmRvbS5zaWRlYmFyUGFuZXMucHJvcGVydGllcy5leHBhbmRl
ZCkKKyAgICAgICAgdmFyIHByb3BlcnRpZXNTaWRlYmFyUGFuZSA9IHRoaXMudmlld3MuZG9tLnNp
ZGViYXJQYW5lcy5wcm9wZXJ0aWVzOworICAgICAgICBpZiAoIXByb3BlcnRpZXNTaWRlYmFyUGFu
ZS5leHBhbmRlZCB8fCAhcHJvcGVydGllc1NpZGViYXJQYW5lLm5lZWRzVXBkYXRlKQogICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoIXRoaXMudmlld3MuZG9tLnNpZGViYXJQYW5lcy5w
cm9wZXJ0aWVzLm5lZWRzVXBkYXRlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRo
aXMudmlld3MuZG9tLnNpZGViYXJQYW5lcy5wcm9wZXJ0aWVzLm5lZWRzVXBkYXRlID0gZmFsc2U7
Ci0KLSAgICAgICAgdmFyIHByb3BlcnRpZXNCb2R5ID0gdGhpcy52aWV3cy5kb20uc2lkZWJhclBh
bmVzLnByb3BlcnRpZXMuYm9keUVsZW1lbnQ7Ci0KLSAgICAgICAgcHJvcGVydGllc0JvZHkucmVt
b3ZlQ2hpbGRyZW4oKTsKLSAgICAgICAgdGhpcy52aWV3cy5kb20uc2lkZWJhclBhbmVzLnByb3Bl
cnRpZXMuc2VjdGlvbnMgPSBbXTsKLQotICAgICAgICBpZiAoIXRoaXMuZm9jdXNlZERPTU5vZGUp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZm9yICh2YXIgcHJvdG90eXBlID0gdGhp
cy5mb2N1c2VkRE9NTm9kZTsgcHJvdG90eXBlOyBwcm90b3R5cGUgPSBwcm90b3R5cGUuX19wcm90
b19fKSB7Ci0gICAgICAgICAgICB2YXIgaGFzQ2hpbGRyZW4gPSBmYWxzZTsKLSAgICAgICAgICAg
IGZvciAodmFyIHByb3AgaW4gcHJvdG90eXBlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHByb3Ag
PT09ICJfX3RyZWVFbGVtZW50SWRlbnRpZmllciIpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBlLmhhc093blByb3BlcnR5KHByb3Ap
KQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgIGhhc0No
aWxkcmVuID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKCFoYXNDaGlsZHJlbikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICAgICAgdmFyIHRpdGxlID0gT2JqZWN0LmRlc2NyaWJlKHByb3RvdHlwZSk7Ci0g
ICAgICAgICAgICB2YXIgc3VidGl0bGU7Ci0gICAgICAgICAgICBpZiAodGl0bGUubWF0Y2goL1By
b3RvdHlwZSQvKSkgewotICAgICAgICAgICAgICAgIHRpdGxlID0gdGl0bGUucmVwbGFjZSgvUHJv
dG90eXBlJC8sICIiKTsKLSAgICAgICAgICAgICAgICBzdWJ0aXRsZSA9ICJQcm90b3R5cGUiOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgc2VjdGlvbiA9IG5ldyBXZWJJbnNwZWN0
b3IuUHJvcGVydGllc1NlY3Rpb24odGl0bGUsIHN1YnRpdGxlKTsKLSAgICAgICAgICAgIHNlY3Rp
b24ub25wb3B1bGF0ZSA9IFdlYkluc3BlY3Rvci5ET01Qcm9wZXJ0aWVzU2VjdGlvbi5vbnBvcHVs
YXRlKHByb3RvdHlwZSk7CiAKLSAgICAgICAgICAgIHByb3BlcnRpZXNCb2R5LmFwcGVuZENoaWxk
KHNlY3Rpb24uZWxlbWVudCk7Ci0gICAgICAgICAgICB0aGlzLnZpZXdzLmRvbS5zaWRlYmFyUGFu
ZXMucHJvcGVydGllcy5zZWN0aW9ucy5wdXNoKHNlY3Rpb24pOwotICAgICAgICB9CisgICAgICAg
IHByb3BlcnRpZXNTaWRlYmFyUGFuZS51cGRhdGUodGhpcy5mb2N1c2VkRE9NTm9kZSk7CisgICAg
ICAgIHByb3BlcnRpZXNTaWRlYmFyUGFuZS5uZWVkc1VwZGF0ZSA9IGZhbHNlOwogICAgIH0sCiAK
ICAgICBoYW5kbGVLZXlFdmVudDogZnVuY3Rpb24oZXZlbnQpCkBAIC03MjEsMjU4ICszODIsOTAg
QEAgV2ViSW5zcGVjdG9yLkRvY3VtZW50UGFuZWwucHJvdG90eXBlID0gewogCiBXZWJJbnNwZWN0
b3IuRG9jdW1lbnRQYW5lbC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlNvdXJj
ZVBhbmVsLnByb3RvdHlwZTsKIAotV2ViSW5zcGVjdG9yLkRPTVByb3BlcnRpZXNTZWN0aW9uID0g
ZnVuY3Rpb24oKQotewotICAgIC8vIEZJWE1FOiBQZXJoYXBzIHRoaXMgc2hvdWxkIGJlIGEgcmVh
bCBzdWJjbGFzcyBzb21lZGF5Ci19Ci0KLVdlYkluc3BlY3Rvci5ET01Qcm9wZXJ0aWVzU2VjdGlv
bi5vbnBvcHVsYXRlID0gZnVuY3Rpb24ocHJvdG90eXBlKQotewotICAgIHJldHVybiBmdW5jdGlv
bihzZWN0aW9uKSB7Ci0gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gT2JqZWN0LnNvcnRlZFByb3Bl
cnRpZXMocHJvdG90eXBlKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVz
Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgbmFtZSA9IHByb3BlcnRpZXNbaV07Ci0g
ICAgICAgICAgICBpZiAoIXByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShuYW1lKSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChuYW1lID09PSAiX190cmVlRWxlbWVu
dElkZW50aWZpZXIiKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgdmFy
IGl0ZW0gPSBuZXcgV2ViSW5zcGVjdG9yLkRPTVByb3BlcnR5VHJlZUVsZW1lbnQobmFtZSwgcHJv
dG90eXBlKTsKLSAgICAgICAgICAgIHNlY3Rpb24ucHJvcGVydGllc1RyZWVPdXRsaW5lLmFwcGVu
ZENoaWxkKGl0ZW0pOwotICAgICAgICB9Ci0gICAgfQotfQotCiBXZWJJbnNwZWN0b3IuRE9NTm9k
ZVRyZWVFbGVtZW50ID0gZnVuY3Rpb24obm9kZSkKIHsKICAgICB2YXIgaGFzQ2hpbGRyZW4gPSAo
UHJlZmVyZW5jZXMuaWdub3JlV2hpdGVzcGFjZSA/IChmaXJzdENoaWxkU2tpcHBpbmdXaGl0ZXNw
YWNlLmNhbGwobm9kZSkgPyB0cnVlIDogZmFsc2UpIDogbm9kZS5oYXNDaGlsZE5vZGVzKCkpOwot
CiAgICAgdmFyIHRpdGxlSW5mbyA9IG5vZGVUaXRsZUluZm8uY2FsbChub2RlLCBoYXNDaGlsZHJl
biwgV2ViSW5zcGVjdG9yLmxpbmtpZnlVUkwpOwotICAgIHZhciB0aXRsZSA9IHRpdGxlSW5mby50
aXRsZTsKLSAgICBoYXNDaGlsZHJlbiA9IHRpdGxlSW5mby5oYXNDaGlsZHJlbjsKLQotICAgIHZh
ciBpdGVtID0gbmV3IFRyZWVFbGVtZW50KHRpdGxlLCBub2RlLCBoYXNDaGlsZHJlbik7Ci0gICAg
aXRlbS51cGRhdGVTZWxlY3Rpb24gPSBXZWJJbnNwZWN0b3IuRE9NTm9kZVRyZWVFbGVtZW50LnVw
ZGF0ZVNlbGVjdGlvbjsKLSAgICBpdGVtLm9ucG9wdWxhdGUgPSBXZWJJbnNwZWN0b3IuRE9NTm9k
ZVRyZWVFbGVtZW50LnBvcHVsYXRlOwotICAgIGl0ZW0ub25leHBhbmQgPSBXZWJJbnNwZWN0b3Iu
RE9NTm9kZVRyZWVFbGVtZW50LmV4cGFuZGVkOwotICAgIGl0ZW0ub25jb2xsYXBzZSA9IFdlYklu
c3BlY3Rvci5ET01Ob2RlVHJlZUVsZW1lbnQuY29sbGFwc2VkOwotICAgIGl0ZW0ub25zZWxlY3Qg
PSBXZWJJbnNwZWN0b3IuRE9NTm9kZVRyZWVFbGVtZW50LnNlbGVjdGVkOwotICAgIGl0ZW0ub25y
ZXZlYWwgPSBXZWJJbnNwZWN0b3IuRE9NTm9kZVRyZWVFbGVtZW50LnJldmVhbGVkOwotICAgIGl0
ZW0ub25kYmxjbGljayA9IFdlYkluc3BlY3Rvci5ET01Ob2RlVHJlZUVsZW1lbnQuZG91YmxlQ2xp
Y2tlZDsKLSAgICBpZiAoaGFzQ2hpbGRyZW4pIAotICAgICAgICBpdGVtLndoaXRlc3BhY2VJZ25v
cmVkID0gUHJlZmVyZW5jZXMuaWdub3JlV2hpdGVzcGFjZTsKLSAgICByZXR1cm4gaXRlbTsKLX0K
LQotV2ViSW5zcGVjdG9yLkRPTU5vZGVUcmVlRWxlbWVudC51cGRhdGVTZWxlY3Rpb24gPSBmdW5j
dGlvbihlbGVtZW50KQotewotICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC5fbGlzdEl0ZW1O
b2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWVsZW1lbnQuc2VsZWN0aW9uRWxlbWVu
dCkgewotICAgICAgICBlbGVtZW50LnNlbGVjdGlvbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKTsKLSAgICAgICAgZWxlbWVudC5zZWxlY3Rpb25FbGVtZW50LmNsYXNzTmFt
ZSA9ICJzZWxlY3Rpb24gc2VsZWN0ZWQiOwotICAgICAgICBlbGVtZW50Ll9saXN0SXRlbU5vZGUu
aW5zZXJ0QmVmb3JlKGVsZW1lbnQuc2VsZWN0aW9uRWxlbWVudCwgZWxlbWVudC5fbGlzdEl0ZW1O
b2RlLmZpcnN0Q2hpbGQpOwotICAgIH0KLQotICAgIGVsZW1lbnQuc2VsZWN0aW9uRWxlbWVudC5z
dHlsZS5oZWlnaHQgPSBlbGVtZW50Ll9saXN0SXRlbU5vZGUub2Zmc2V0SGVpZ2h0ICsgInB4IjsK
LX0KLQotV2ViSW5zcGVjdG9yLkRPTU5vZGVUcmVlRWxlbWVudC5wb3B1bGF0ZSA9IGZ1bmN0aW9u
KGVsZW1lbnQpCi17Ci0gICAgaWYgKGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoIHx8IGVsZW1lbnQu
d2hpdGVzcGFjZUlnbm9yZWQgIT09IFByZWZlcmVuY2VzLmlnbm9yZVdoaXRlc3BhY2UpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICBlbGVtZW50
LndoaXRlc3BhY2VJZ25vcmVkID0gUHJlZmVyZW5jZXMuaWdub3JlV2hpdGVzcGFjZTsKLQotICAg
IHZhciBub2RlID0gKFByZWZlcmVuY2VzLmlnbm9yZVdoaXRlc3BhY2UgPyBmaXJzdENoaWxkU2tp
cHBpbmdXaGl0ZXNwYWNlLmNhbGwoZWxlbWVudC5yZXByZXNlbnRlZE9iamVjdCkgOiBlbGVtZW50
LnJlcHJlc2VudGVkT2JqZWN0LmZpcnN0Q2hpbGQpOwotICAgIHdoaWxlIChub2RlKSB7Ci0gICAg
ICAgIHZhciBpdGVtID0gbmV3IFdlYkluc3BlY3Rvci5ET01Ob2RlVHJlZUVsZW1lbnQobm9kZSk7
Ci0gICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoaXRlbSk7Ci0gICAgICAgIG5vZGUgPSBQcmVm
ZXJlbmNlcy5pZ25vcmVXaGl0ZXNwYWNlID8gbmV4dFNpYmxpbmdTa2lwcGluZ1doaXRlc3BhY2Uu
Y2FsbChub2RlKSA6IG5vZGUubmV4dFNpYmxpbmc7Ci0gICAgfQotCi0gICAgaWYgKGVsZW1lbnQu
cmVwcmVzZW50ZWRPYmplY3Qubm9kZVR5cGUgPT0gTm9kZS5FTEVNRU5UX05PREUpIHsKLSAgICAg
ICAgdmFyIHRpdGxlID0gIjxzcGFuIGNsYXNzPVwid2Via2l0LWh0bWwtdGFnIGNsb3NlXCI+Jmx0
Oy8iICsgZWxlbWVudC5yZXByZXNlbnRlZE9iamVjdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLmVz
Y2FwZUhUTUwoKSArICImZ3Q7PC9zcGFuPiI7Ci0gICAgICAgIHZhciBpdGVtID0gbmV3IFRyZWVF
bGVtZW50KHRpdGxlLCBlbGVtZW50LnJlcHJlc2VudGVkT2JqZWN0LCBmYWxzZSk7Ci0gICAgICAg
IGl0ZW0uc2VsZWN0YWJsZSA9IGZhbHNlOwotICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGl0
ZW0pOwotICAgIH0KLX0KLQotV2ViSW5zcGVjdG9yLkRPTU5vZGVUcmVlRWxlbWVudC5leHBhbmRl
ZCA9IGZ1bmN0aW9uKGVsZW1lbnQpCi17Ci0gICAgZWxlbWVudC50cmVlT3V0bGluZS5wYW5lbC51
cGRhdGVUcmVlU2VsZWN0aW9uKCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5ET01Ob2RlVHJlZUVsZW1l
bnQuY29sbGFwc2VkID0gZnVuY3Rpb24oZWxlbWVudCkKLXsKLSAgICBlbGVtZW50LnRyZWVPdXRs
aW5lLnBhbmVsLnVwZGF0ZVRyZWVTZWxlY3Rpb24oKTsKLX0KIAotV2ViSW5zcGVjdG9yLkRPTU5v
ZGVUcmVlRWxlbWVudC5yZXZlYWxlZCA9IGZ1bmN0aW9uKGVsZW1lbnQpCi17Ci0gICAgaWYgKCFl
bGVtZW50Ll9saXN0SXRlbU5vZGUgfHwgIWVsZW1lbnQudHJlZU91dGxpbmUgfHwgIWVsZW1lbnQu
dHJlZU91dGxpbmUuX2NoaWxkcmVuTGlzdE5vZGUpCi0gICAgICAgIHJldHVybjsKLSAgICB2YXIg
cGFyZW50ID0gZWxlbWVudC50cmVlT3V0bGluZS5wYW5lbC52aWV3cy5kb20udHJlZUNvbnRlbnRF
bGVtZW50OwotICAgIHBhcmVudC5zY3JvbGxUb0VsZW1lbnQoZWxlbWVudC5fbGlzdEl0ZW1Ob2Rl
KTsKLX0KLQotV2ViSW5zcGVjdG9yLkRPTU5vZGVUcmVlRWxlbWVudC5zZWxlY3RlZCA9IGZ1bmN0
aW9uKGVsZW1lbnQpCi17Ci0gICAgdmFyIHBhbmVsID0gZWxlbWVudC50cmVlT3V0bGluZS5wYW5l
bDsKLSAgICBwYW5lbC5mb2N1c2VkRE9NTm9kZSA9IGVsZW1lbnQucmVwcmVzZW50ZWRPYmplY3Q7
CisgICAgaWYgKHRpdGxlSW5mby5oYXNDaGlsZHJlbikgCisgICAgICAgIHRoaXMud2hpdGVzcGFj
ZUlnbm9yZWQgPSBQcmVmZXJlbmNlcy5pZ25vcmVXaGl0ZXNwYWNlOwogCi0gICAgLy8gQ2FsbCB1
cGRhdGVTZWxlY3Rpb24gdHdpY2UgdG8gbWFrZSBzdXJlIHRoZSBoZWlnaHQgaXMgY29ycmVjdCwK
LSAgICAvLyB0aGUgZmlyc3QgdGltZSBtaWdodCBoYXZlIGEgYmFkIGhlaWdodCBiZWNhdXNlIHdl
IGFyZSBpbiBhIHdlaXJkIHRyZWUgc3RhdGUKLSAgICBlbGVtZW50LnVwZGF0ZVNlbGVjdGlvbihl
bGVtZW50KTsKLSAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBlbGVtZW50LnVwZGF0ZVNlbGVj
dGlvbihlbGVtZW50KSB9LCAwKTsKKyAgICBUcmVlRWxlbWVudC5jYWxsKHRoaXMsIHRpdGxlSW5m
by50aXRsZSwgbm9kZSwgdGl0bGVJbmZvLmhhc0NoaWxkcmVuKTsKIH0KIAotV2ViSW5zcGVjdG9y
LkRPTU5vZGVUcmVlRWxlbWVudC5kb3VibGVDbGlja2VkID0gZnVuY3Rpb24oZWxlbWVudCkKLXsK
LSAgICB2YXIgcGFuZWwgPSBlbGVtZW50LnRyZWVPdXRsaW5lLnBhbmVsOwotICAgIHBhbmVsLnJv
b3RET01Ob2RlID0gZWxlbWVudC5yZXByZXNlbnRlZE9iamVjdC5wYXJlbnROb2RlOwotICAgIHBh
bmVsLmZvY3VzZWRET01Ob2RlID0gZWxlbWVudC5yZXByZXNlbnRlZE9iamVjdDsKLX0KK1dlYklu
c3BlY3Rvci5ET01Ob2RlVHJlZUVsZW1lbnQucHJvdG90eXBlID0geworICAgIHVwZGF0ZVNlbGVj
dGlvbjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9saXN0SXRlbU5vZGUp
CisgICAgICAgICAgICByZXR1cm47CiAKLVdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVs
ZW1lbnQgPSBmdW5jdGlvbihwcm9wLCBjb21wdXRlZFN0eWxlLCB1c2VkUHJvcGVydGllcykKLXsK
LSAgICB2YXIgb3ZlcmxvYWRDb3VudCA9IDA7Ci0gICAgdmFyIHByaW9yaXR5OwotICAgIGlmIChw
cm9wLnN1YlByb3BlcnRpZXMgJiYgcHJvcC5zdWJQcm9wZXJ0aWVzLmxlbmd0aCA+IDEpIHsKLSAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wLnN1YlByb3BlcnRpZXMubGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICAgIHZhciBuYW1lID0gcHJvcC5zdWJQcm9wZXJ0aWVzW2ldOwotICAgICAg
ICAgICAgaWYgKCFwcmlvcml0eSkKLSAgICAgICAgICAgICAgICBwcmlvcml0eSA9IHByb3Auc3R5
bGUuZ2V0UHJvcGVydHlQcmlvcml0eShuYW1lKTsKLSAgICAgICAgICAgIGlmIChwcm9wLnVudXNl
ZFByb3BlcnRpZXNbbmFtZV0pCi0gICAgICAgICAgICAgICAgb3ZlcmxvYWRDb3VudCsrOworICAg
ICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uRWxlbWVudCkgeworICAgICAgICAgICAgdGhpcy5zZWxl
Y3Rpb25FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgICAg
ICB0aGlzLnNlbGVjdGlvbkVsZW1lbnQuY2xhc3NOYW1lID0gInNlbGVjdGlvbiBzZWxlY3RlZCI7
CisgICAgICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuc2VsZWN0
aW9uRWxlbWVudCwgdGhpcy5fbGlzdEl0ZW1Ob2RlLmZpcnN0Q2hpbGQpOwogICAgICAgICB9Ci0g
ICAgfQogCi0gICAgaWYgKCFwcmlvcml0eSkKLSAgICAgICAgcHJpb3JpdHkgPSBwcm9wLnN0eWxl
LmdldFByb3BlcnR5UHJpb3JpdHkocHJvcC5uYW1lKTsKKyAgICAgICAgdGhpcy5zZWxlY3Rpb25F
bGVtZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuX2xpc3RJdGVtTm9kZS5vZmZzZXRIZWlnaHQgKyAi
cHgiOworICAgIH0sCiAKLSAgICB2YXIgb3ZlcmxvYWRlZCA9IChwcm9wLnVudXNlZFByb3BlcnRp
ZXNbcHJvcC5uYW1lXSB8fCBvdmVybG9hZENvdW50ID09PSBwcm9wLnN1YlByb3BlcnRpZXMubGVu
Z3RoKTsKLSAgICB2YXIgdGl0bGUgPSBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVt
ZW50LmNyZWF0ZVRpdGxlKHByb3AubmFtZSwgcHJvcC5zdHlsZSwgb3ZlcmxvYWRlZCwgcHJpb3Jp
dHksIGNvbXB1dGVkU3R5bGUsIHVzZWRQcm9wZXJ0aWVzKTsKKyAgICBvbnBvcHVsYXRlOiBmdW5j
dGlvbigpCisgICAgeworICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggfHwgdGhpcy53
aGl0ZXNwYWNlSWdub3JlZCAhPT0gUHJlZmVyZW5jZXMuaWdub3JlV2hpdGVzcGFjZSkKKyAgICAg
ICAgICAgIHJldHVybjsKIAotICAgIHZhciBpdGVtID0gbmV3IFRyZWVFbGVtZW50KHRpdGxlLCBw
cm9wLCAocHJvcC5zdWJQcm9wZXJ0aWVzICYmIHByb3Auc3ViUHJvcGVydGllcy5sZW5ndGggPiAx
KSk7Ci0gICAgaXRlbS5jb21wdXRlZFN0eWxlID0gY29tcHV0ZWRTdHlsZTsKLSAgICBpdGVtLm9u
cG9wdWxhdGUgPSBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnBvcHVsYXRl
OwotICAgIHJldHVybiBpdGVtOwotfQorICAgICAgICB0aGlzLnJlbW92ZUNoaWxkcmVuKCk7Cisg
ICAgICAgIHRoaXMud2hpdGVzcGFjZUlnbm9yZWQgPSBQcmVmZXJlbmNlcy5pZ25vcmVXaGl0ZXNw
YWNlOwogCi1XZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LmNyZWF0ZVRpdGxl
ID0gZnVuY3Rpb24obmFtZSwgc3R5bGUsIG92ZXJsb2FkZWQsIHByaW9yaXR5LCBjb21wdXRlZCwg
dXNlZFByb3BlcnRpZXMpCi17Ci0gICAgLy8gIk5pY2tuYW1lcyIgZm9yIHNvbWUgY29tbW9uIHZh
bHVlcyB0aGF0IGFyZSBlYXNpZXIgdG8gcmVhZC4KLSAgICB2YXIgdmFsdWVOaWNrbmFtZSA9IHsK
LSAgICAgICAgInJnYigwLCAwLCAwKSI6ICJibGFjayIsCi0gICAgICAgICJyZ2IoMjU1LCAyNTUs
IDI1NSkiOiAid2hpdGUiLAotICAgICAgICAicmdiYSgwLCAwLCAwLCAwKSI6ICJ0cmFuc3BhcmVu
dCIKLSAgICB9OwotCi0gICAgdmFyIGFsd2F5c1Nob3dDb21wdXRlZFByb3BlcnRpZXMgPSB7ICJk
aXNwbGF5IjogdHJ1ZSwgImhlaWdodCI6IHRydWUsICJ3aWR0aCI6IHRydWUgfTsKLQotICAgIHZh
ciB2YWx1ZSA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSk7Ci0KLSAgICB2YXIgdGV4dFZh
bHVlID0gdmFsdWU7Ci0gICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgIHZhciB1cmxzID0gdmFsdWUu
bWF0Y2goL3VybFwoW14pXStcKS8pOwotICAgICAgICBpZiAodXJscykgewotICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCB1cmxzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIHVybCA9IHVybHNbaV0uc3Vic3RyaW5nKDQsIHVybHNbaV0ubGVuZ3RoIC0gMSk7Ci0gICAg
ICAgICAgICAgICAgdGV4dFZhbHVlID0gdGV4dFZhbHVlLnJlcGxhY2UodXJsc1tpXSwgInVybCgi
ICsgV2ViSW5zcGVjdG9yLmxpbmtpZnlVUkwodXJsKSArICIpIik7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUgaW4gdmFsdWVOaWNrbmFtZSkK
LSAgICAgICAgICAgICAgICB0ZXh0VmFsdWUgPSB2YWx1ZU5pY2tuYW1lW3ZhbHVlXTsKLSAgICAg
ICAgICAgIHRleHRWYWx1ZSA9IHRleHRWYWx1ZS5lc2NhcGVIVE1MKCk7CisgICAgICAgIHZhciBu
b2RlID0gKFByZWZlcmVuY2VzLmlnbm9yZVdoaXRlc3BhY2UgPyBmaXJzdENoaWxkU2tpcHBpbmdX
aGl0ZXNwYWNlLmNhbGwodGhpcy5yZXByZXNlbnRlZE9iamVjdCkgOiB0aGlzLnJlcHJlc2VudGVk
T2JqZWN0LmZpcnN0Q2hpbGQpOworICAgICAgICB3aGlsZSAobm9kZSkgeworICAgICAgICAgICAg
dGhpcy5hcHBlbmRDaGlsZChuZXcgV2ViSW5zcGVjdG9yLkRPTU5vZGVUcmVlRWxlbWVudChub2Rl
KSk7CisgICAgICAgICAgICBub2RlID0gUHJlZmVyZW5jZXMuaWdub3JlV2hpdGVzcGFjZSA/IG5l
eHRTaWJsaW5nU2tpcHBpbmdXaGl0ZXNwYWNlLmNhbGwobm9kZSkgOiBub2RlLm5leHRTaWJsaW5n
OwogICAgICAgICB9Ci0gICAgfQogCi0gICAgdmFyIGNsYXNzZXMgPSBbXTsKLSAgICBpZiAoIWNv
bXB1dGVkICYmIChzdHlsZS5pc1Byb3BlcnR5SW1wbGljaXQobmFtZSkgfHwgdmFsdWUgPT0gImlu
aXRpYWwiKSkKLSAgICAgICAgY2xhc3Nlcy5wdXNoKCJpbXBsaWNpdCIpOwotICAgIGlmIChjb21w
dXRlZCAmJiAhdXNlZFByb3BlcnRpZXNbbmFtZV0gJiYgIWFsd2F5c1Nob3dDb21wdXRlZFByb3Bl
cnRpZXNbbmFtZV0pCi0gICAgICAgIGNsYXNzZXMucHVzaCgiaW5oZXJpdGVkIik7Ci0gICAgaWYg
KG92ZXJsb2FkZWQpCi0gICAgICAgIGNsYXNzZXMucHVzaCgib3ZlcmxvYWRlZCIpOwotCi0gICAg
dmFyIHRpdGxlID0gIiI7Ci0gICAgaWYgKGNsYXNzZXMubGVuZ3RoKQotICAgICAgICB0aXRsZSAr
PSAiPHNwYW4gY2xhc3M9XCIiICsgY2xhc3Nlcy5qb2luKCIgIikgKyAiXCI+IjsKLQotICAgIHRp
dGxlICs9ICI8c3BhbiBjbGFzcz1cIm5hbWVcIj4iICsgbmFtZS5lc2NhcGVIVE1MKCkgKyAiPC9z
cGFuPjogIjsKLSAgICB0aXRsZSArPSAiPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPiIgKyB0ZXh0VmFs
dWU7Ci0gICAgaWYgKHByaW9yaXR5ICYmIHByaW9yaXR5Lmxlbmd0aCkKLSAgICAgICAgdGl0bGUg
Kz0gIiAhIiArIHByaW9yaXR5OwotICAgIHRpdGxlICs9ICI8L3NwYW4+OyI7Ci0KLSAgICBpZiAo
dmFsdWUpIHsKLSAgICAgICAgLy8gRklYTUU6IHRoaXMgZG9zZW4ndCBjYXRjaCBrZXl3b3JkIGJh
c2VkIGNvbG9ycyBsaWtlIGJsYWNrIGFuZCB3aGl0ZQotICAgICAgICB2YXIgY29sb3JzID0gdmFs
dWUubWF0Y2goLyhyZ2JcKFswLTldKyxccz9bMC05XSssXHM/WzAtOV0rXCkpfChyZ2JhXChbMC05
XSssXHM/WzAtOV0rLFxzP1swLTldKyxccz9bMC05XStcKSkvZyk7Ci0gICAgICAgIGlmIChjb2xv
cnMpIHsKLSAgICAgICAgICAgIHZhciBjb2xvcnNMZW5ndGggPSBjb2xvcnMubGVuZ3RoOwotICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2xvcnNMZW5ndGg7ICsraSkKLSAgICAgICAg
ICAgICAgICB0aXRsZSArPSAiPHNwYW4gY2xhc3M9XCJzd2F0Y2hcIiBzdHlsZT1cImJhY2tncm91
bmQtY29sb3I6ICIgKyBjb2xvcnNbaV0gKyAiXCI+PC9zcGFuPiI7CisgICAgICAgIGlmICh0aGlz
LnJlcHJlc2VudGVkT2JqZWN0Lm5vZGVUeXBlID09IE5vZGUuRUxFTUVOVF9OT0RFKSB7CisgICAg
ICAgICAgICB2YXIgdGl0bGUgPSAiPHNwYW4gY2xhc3M9XCJ3ZWJraXQtaHRtbC10YWcgY2xvc2Vc
Ij4mbHQ7LyIgKyB0aGlzLnJlcHJlc2VudGVkT2JqZWN0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCku
ZXNjYXBlSFRNTCgpICsgIiZndDs8L3NwYW4+IjsKKyAgICAgICAgICAgIHZhciBpdGVtID0gbmV3
IFRyZWVFbGVtZW50KHRpdGxlLCB0aGlzLnJlcHJlc2VudGVkT2JqZWN0LCBmYWxzZSk7CisgICAg
ICAgICAgICBpdGVtLnNlbGVjdGFibGUgPSBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMuYXBwZW5k
Q2hpbGQoaXRlbSk7CiAgICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoY2xhc3Nlcy5sZW5ndGgp
Ci0gICAgICAgIHRpdGxlICs9ICI8L3NwYW4+IjsKLQotICAgIHJldHVybiB0aXRsZTsKLX0KKyAg
ICB9LAogCi1XZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnBvcHVsYXRlID0g
ZnVuY3Rpb24oZWxlbWVudCkKLXsKLSAgICBpZiAoZWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpCi0g
ICAgICAgIHJldHVybjsKKyAgICBvbmV4cGFuZDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAg
dGhpcy50cmVlT3V0bGluZS5wYW5lbC51cGRhdGVUcmVlU2VsZWN0aW9uKCk7CisgICAgfSwKIAot
ICAgIHZhciBwcm9wID0gZWxlbWVudC5yZXByZXNlbnRlZE9iamVjdDsKLSAgICBpZiAocHJvcC5z
dWJQcm9wZXJ0aWVzICYmIHByb3Auc3ViUHJvcGVydGllcy5sZW5ndGggPiAxKSB7Ci0gICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcC5zdWJQcm9wZXJ0aWVzLmxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgICAgICB2YXIgbmFtZSA9IHByb3Auc3ViUHJvcGVydGllc1tpXTsKLSAgICAgICAgICAg
IHZhciBvdmVybG9hZGVkID0gKHByb3AudW51c2VkUHJvcGVydGllc1twcm9wLm5hbWVdIHx8IHBy
b3AudW51c2VkUHJvcGVydGllc1tuYW1lXSk7Ci0gICAgICAgICAgICB2YXIgcHJpb3JpdHkgPSBw
cm9wLnN0eWxlLmdldFByb3BlcnR5UHJpb3JpdHkobmFtZSk7Ci0gICAgICAgICAgICB2YXIgdGl0
bGUgPSBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LmNyZWF0ZVRpdGxlKG5h
bWUsIHByb3Auc3R5bGUsIG92ZXJsb2FkZWQsIHByaW9yaXR5LCBlbGVtZW50LmNvbXB1dGVkU3R5
bGUpOwotICAgICAgICAgICAgdmFyIHN1Yml0ZW0gPSBuZXcgVHJlZUVsZW1lbnQodGl0bGUsIHt9
LCBmYWxzZSk7Ci0gICAgICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHN1Yml0ZW0pOwotICAg
ICAgICB9Ci0gICAgfQotfQorICAgIG9uY29sbGFwc2U6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIHRoaXMudHJlZU91dGxpbmUucGFuZWwudXBkYXRlVHJlZVNlbGVjdGlvbigpOworICAgIH0s
CiAKLVdlYkluc3BlY3Rvci5ET01Qcm9wZXJ0eVRyZWVFbGVtZW50ID0gZnVuY3Rpb24obmFtZSwg
b2JqZWN0KQotewotICAgIHZhciB0aXRsZSA9ICI8c3BhbiBjbGFzcz1cIm5hbWVcIj4iICsgbmFt
ZS5lc2NhcGVIVE1MKCkgKyAiPC9zcGFuPjogIjsKLSAgICB0aXRsZSArPSAiPHNwYW4gY2xhc3M9
XCJ2YWx1ZVwiPiIgKyBPYmplY3QuZGVzY3JpYmUob2JqZWN0W25hbWVdLCB0cnVlKS5lc2NhcGVI
VE1MKCkgKyAiPC9zcGFuPiI7CisgICAgb25yZXZlYWw6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIGlmICghdGhpcy5fbGlzdEl0ZW1Ob2RlIHx8ICF0aGlzLnRyZWVPdXRsaW5lIHx8ICF0aGlz
LnRyZWVPdXRsaW5lLl9jaGlsZHJlbkxpc3ROb2RlKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB2YXIgcGFyZW50ID0gdGhpcy50cmVlT3V0bGluZS5wYW5lbC52aWV3cy5kb20udHJlZUNv
bnRlbnRFbGVtZW50OworICAgICAgICBwYXJlbnQuc2Nyb2xsVG9FbGVtZW50KHRoaXMuX2xpc3RJ
dGVtTm9kZSk7CisgICAgfSwKIAotICAgIHZhciBoYXNDaGlsZHJlbiA9IGZhbHNlOwotICAgIHZh
ciB0eXBlID0gdHlwZW9mIG9iamVjdFtuYW1lXTsKLSAgICBpZiAob2JqZWN0W25hbWVdICYmICh0
eXBlID09PSAib2JqZWN0IiB8fCB0eXBlID09PSAiZnVuY3Rpb24iKSkgewotICAgICAgICBmb3Ig
KHZhbHVlIGluIG9iamVjdFtuYW1lXSkgewotICAgICAgICAgICAgaGFzQ2hpbGRyZW4gPSB0cnVl
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisgICAgb25zZWxlY3Q6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMudHJlZU91dGxpbmUucGFuZWwuZm9jdXNlZERP
TU5vZGUgPSB0aGlzLnJlcHJlc2VudGVkT2JqZWN0OwogCi0gICAgdmFyIHJlcHJlc2VudGVkT2Jq
ID0geyBvYmplY3Q6IG9iamVjdCwgbmFtZTogbmFtZSB9OwotICAgIHZhciBpdGVtID0gbmV3IFRy
ZWVFbGVtZW50KHRpdGxlLCByZXByZXNlbnRlZE9iaiwgaGFzQ2hpbGRyZW4pOwotICAgIGl0ZW0u
b25wb3B1bGF0ZSA9IFdlYkluc3BlY3Rvci5ET01Qcm9wZXJ0eVRyZWVFbGVtZW50LnBvcHVsYXRl
OwotICAgIHJldHVybiBpdGVtOwotfQorICAgICAgICAvLyBDYWxsIHVwZGF0ZVNlbGVjdGlvbiB0
d2ljZSB0byBtYWtlIHN1cmUgdGhlIGhlaWdodCBpcyBjb3JyZWN0LAorICAgICAgICAvLyB0aGUg
Zmlyc3QgdGltZSBtaWdodCBoYXZlIGEgYmFkIGhlaWdodCBiZWNhdXNlIHdlIGFyZSBpbiBhIHdl
aXJkIHRyZWUgc3RhdGUKKyAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oKTsKIAotV2ViSW5z
cGVjdG9yLkRPTVByb3BlcnR5VHJlZUVsZW1lbnQucG9wdWxhdGUgPSBmdW5jdGlvbihlbGVtZW50
KQotewotICAgIGlmIChlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCkKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXM7CisgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24o
KSB7IGVsZW1lbnQudXBkYXRlU2VsZWN0aW9uKCkgfSwgMCk7CisgICAgfSwKIAotICAgIHZhciBw
YXJlbnQgPSBlbGVtZW50LnJlcHJlc2VudGVkT2JqZWN0Lm9iamVjdFtlbGVtZW50LnJlcHJlc2Vu
dGVkT2JqZWN0Lm5hbWVdOwotICAgIHZhciBwcm9wZXJ0aWVzID0gT2JqZWN0LnNvcnRlZFByb3Bl
cnRpZXMocGFyZW50KTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgaWYgKHByb3BlcnRpZXNbaV0gPT09ICJfX3RyZWVFbGVtZW50SWRl
bnRpZmllciIpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdmFyIGl0ZW0gPSBuZXcg
V2ViSW5zcGVjdG9yLkRPTVByb3BlcnR5VHJlZUVsZW1lbnQocHJvcGVydGllc1tpXSwgcGFyZW50
KTsKLSAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChpdGVtKTsKKyAgICBvbmRibGNsaWNrOiBm
dW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgcGFuZWwgPSB0aGlzLnRyZWVPdXRsaW5lLnBh
bmVsOworICAgICAgICBwYW5lbC5yb290RE9NTm9kZSA9IHRoaXMucmVwcmVzZW50ZWRPYmplY3Qu
cGFyZW50Tm9kZTsKKyAgICAgICAgcGFuZWwuZm9jdXNlZERPTU5vZGUgPSB0aGlzLnJlcHJlc2Vu
dGVkT2JqZWN0OwogICAgIH0KIH0KKworV2ViSW5zcGVjdG9yLkRPTU5vZGVUcmVlRWxlbWVudC5w
cm90b3R5cGUuX19wcm90b19fID0gVHJlZUVsZW1lbnQucHJvdG90eXBlOwpJbmRleDogcGFnZS9p
bnNwZWN0b3IvTWV0cmljc1NpZGViYXJQYW5lLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvaW5zcGVj
dG9yL01ldHJpY3NTaWRlYmFyUGFuZS5qcwkocmV2aXNpb24gMCkKKysrIHBhZ2UvaW5zcGVjdG9y
L01ldHJpY3NTaWRlYmFyUGFuZS5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitX
ZWJJbnNwZWN0b3IuTWV0cmljc1NpZGViYXJQYW5lID0gZnVuY3Rpb24oKQoreworICAgIFdlYklu
c3BlY3Rvci5TaWRlYmFyUGFuZS5jYWxsKHRoaXMsICJNZXRyaWNzIik7Cit9CisKK1dlYkluc3Bl
Y3Rvci5NZXRyaWNzU2lkZWJhclBhbmUucHJvdG90eXBlID0geworICAgIHVwZGF0ZTogZnVuY3Rp
b24obm9kZSkKKyAgICB7CisgICAgICAgIHZhciBib2R5ID0gdGhpcy5ib2R5RWxlbWVudDsKKwor
ICAgICAgICBib2R5LnJlbW92ZUNoaWxkcmVuKCk7CisKKyAgICAgICAgaWYgKCFub2RlKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBzdHlsZTsKKyAgICAgICAgaWYgKG5vZGUu
bm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKQorICAgICAgICAgICAgc3R5bGUgPSBub2Rl
Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShub2RlKTsKKyAgICAg
ICAgaWYgKCFzdHlsZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgbWV0cmlj
c0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgbWV0cmlj
c0VsZW1lbnQuY2xhc3NOYW1lID0gIm1ldHJpY3MiOworCisgICAgICAgIGZ1bmN0aW9uIGJveFBh
cnRWYWx1ZShzdHlsZSwgbmFtZSwgc3VmZml4KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIg
dmFsdWUgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUgKyBzdWZmaXgpOworICAgICAgICAg
ICAgaWYgKHZhbHVlID09PSAiIiB8fCB2YWx1ZSA9PT0gIjBweCIpCisgICAgICAgICAgICAgICAg
dmFsdWUgPSAiXHUyMDEyIjsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9weCQv
LCAiIik7CisgICAgICAgIH0KKworICAgICAgICAvLyBEaXNwbGF5IHR5cGVzIGZvciB3aGljaCBt
YXJnaW4gaXMgaWdub3JlZC4KKyAgICAgICAgdmFyIG5vTWFyZ2luRGlzcGxheVR5cGUgPSB7Cisg
ICAgICAgICAgICAidGFibGUtY2VsbCI6IHRydWUsCisgICAgICAgICAgICAidGFibGUtY29sdW1u
IjogdHJ1ZSwKKyAgICAgICAgICAgICJ0YWJsZS1jb2x1bW4tZ3JvdXAiOiB0cnVlLAorICAgICAg
ICAgICAgInRhYmxlLWZvb3Rlci1ncm91cCI6IHRydWUsCisgICAgICAgICAgICAidGFibGUtaGVh
ZGVyLWdyb3VwIjogdHJ1ZSwKKyAgICAgICAgICAgICJ0YWJsZS1yb3ciOiB0cnVlLAorICAgICAg
ICAgICAgInRhYmxlLXJvdy1ncm91cCI6IHRydWUKKyAgICAgICAgfTsKKworICAgICAgICAvLyBE
aXNwbGF5IHR5cGVzIGZvciB3aGljaCBwYWRkaW5nIGlzIGlnbm9yZWQuCisgICAgICAgIHZhciBu
b1BhZGRpbmdEaXNwbGF5VHlwZSA9IHsKKyAgICAgICAgICAgICJ0YWJsZS1jb2x1bW4iOiB0cnVl
LAorICAgICAgICAgICAgInRhYmxlLWNvbHVtbi1ncm91cCI6IHRydWUsCisgICAgICAgICAgICAi
dGFibGUtZm9vdGVyLWdyb3VwIjogdHJ1ZSwKKyAgICAgICAgICAgICJ0YWJsZS1oZWFkZXItZ3Jv
dXAiOiB0cnVlLAorICAgICAgICAgICAgInRhYmxlLXJvdyI6IHRydWUsCisgICAgICAgICAgICAi
dGFibGUtcm93LWdyb3VwIjogdHJ1ZQorICAgICAgICB9OworCisgICAgICAgIHZhciBib3hlcyA9
IFsiY29udGVudCIsICJwYWRkaW5nIiwgImJvcmRlciIsICJtYXJnaW4iXTsKKyAgICAgICAgdmFy
IHByZXZpb3VzQm94OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJveGVzLmxlbmd0aDsg
KytpKSB7CisgICAgICAgICAgICB2YXIgbmFtZSA9IGJveGVzW2ldOworCisgICAgICAgICAgICBp
ZiAobmFtZSA9PT0gIm1hcmdpbiIgJiYgbm9NYXJnaW5EaXNwbGF5VHlwZVtzdHlsZS5kaXNwbGF5
XSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChuYW1lID09PSAi
cGFkZGluZyIgJiYgbm9QYWRkaW5nRGlzcGxheVR5cGVbc3R5bGUuZGlzcGxheV0pCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHZhciBib3hFbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgICAgICBib3hFbGVtZW50LmNsYXNzTmFt
ZSA9IG5hbWU7CisKKyAgICAgICAgICAgIGlmIChib3hlc1tpXSA9PT0gImNvbnRlbnQiKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gc3R5bGUud2lkdGgucmVwbGFjZSgvcHgkLywgIiIp
OworICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSBzdHlsZS5oZWlnaHQucmVwbGFjZSgvcHgk
LywgIiIpOworICAgICAgICAgICAgICAgIGJveEVsZW1lbnQudGV4dENvbnRlbnQgPSB3aWR0aCAr
ICIgXHUwMEQ3ICIgKyBoZWlnaHQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIHZhciBzdWZmaXggPSBib3hlc1tpXSA9PT0gImJvcmRlciIgPyAiLXdpZHRoIiA6ICIiOwor
CisgICAgICAgICAgICAgICAgdmFyIGxhYmVsRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImRpdiIpOworICAgICAgICAgICAgICAgIGxhYmVsRWxlbWVudC5jbGFzc05hbWUgPSAibGFi
ZWwiOworICAgICAgICAgICAgICAgIGxhYmVsRWxlbWVudC50ZXh0Q29udGVudCA9IG5hbWU7Cisg
ICAgICAgICAgICAgICAgYm94RWxlbWVudC5hcHBlbmRDaGlsZChsYWJlbEVsZW1lbnQpOworCisg
ICAgICAgICAgICAgICAgdmFyIHRvcEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKKyAgICAgICAgICAgICAgICB0b3BFbGVtZW50LmNsYXNzTmFtZSA9ICJ0b3AiOworICAg
ICAgICAgICAgICAgIHRvcEVsZW1lbnQudGV4dENvbnRlbnQgPSBib3hQYXJ0VmFsdWUoc3R5bGUs
IG5hbWUgKyAiLXRvcCIsIHN1ZmZpeCk7CisgICAgICAgICAgICAgICAgYm94RWxlbWVudC5hcHBl
bmRDaGlsZCh0b3BFbGVtZW50KTsKKworICAgICAgICAgICAgICAgIHZhciBsZWZ0RWxlbWVudCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICAgICAgICAgIGxlZnRFbGVt
ZW50LmNsYXNzTmFtZSA9ICJsZWZ0IjsKKyAgICAgICAgICAgICAgICBsZWZ0RWxlbWVudC50ZXh0
Q29udGVudCA9IGJveFBhcnRWYWx1ZShzdHlsZSwgbmFtZSArICItbGVmdCIsIHN1ZmZpeCk7Cisg
ICAgICAgICAgICAgICAgYm94RWxlbWVudC5hcHBlbmRDaGlsZChsZWZ0RWxlbWVudCk7CisKKyAg
ICAgICAgICAgICAgICBpZiAocHJldmlvdXNCb3gpCisgICAgICAgICAgICAgICAgICAgIGJveEVs
ZW1lbnQuYXBwZW5kQ2hpbGQocHJldmlvdXNCb3gpOworCisgICAgICAgICAgICAgICAgdmFyIHJp
Z2h0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICAgICAg
ICAgIHJpZ2h0RWxlbWVudC5jbGFzc05hbWUgPSAicmlnaHQiOworICAgICAgICAgICAgICAgIHJp
Z2h0RWxlbWVudC50ZXh0Q29udGVudCA9IGJveFBhcnRWYWx1ZShzdHlsZSwgbmFtZSArICItcmln
aHQiLCBzdWZmaXgpOworICAgICAgICAgICAgICAgIGJveEVsZW1lbnQuYXBwZW5kQ2hpbGQocmln
aHRFbGVtZW50KTsKKworICAgICAgICAgICAgICAgIHZhciBib3R0b21FbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgICAgICAgICAgYm90dG9tRWxlbWVudC5j
bGFzc05hbWUgPSAiYm90dG9tIjsKKyAgICAgICAgICAgICAgICBib3R0b21FbGVtZW50LnRleHRD
b250ZW50ID0gYm94UGFydFZhbHVlKHN0eWxlLCBuYW1lICsgIi1ib3R0b20iLCBzdWZmaXgpOwor
ICAgICAgICAgICAgICAgIGJveEVsZW1lbnQuYXBwZW5kQ2hpbGQoYm90dG9tRWxlbWVudCk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByZXZpb3VzQm94ID0gYm94RWxlbWVudDsKKyAg
ICAgICAgfQorCisgICAgICAgIG1ldHJpY3NFbGVtZW50LmFwcGVuZENoaWxkKHByZXZpb3VzQm94
KTsKKyAgICAgICAgYm9keS5hcHBlbmRDaGlsZChtZXRyaWNzRWxlbWVudCk7CisgICAgfQorfQor
CitXZWJJbnNwZWN0b3IuTWV0cmljc1NpZGViYXJQYW5lLnByb3RvdHlwZS5fX3Byb3RvX18gPSBX
ZWJJbnNwZWN0b3IuU2lkZWJhclBhbmUucHJvdG90eXBlOwpJbmRleDogcGFnZS9pbnNwZWN0b3Iv
UGFuZWwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9pbnNwZWN0b3IvUGFuZWwuanMJKHJldmlzaW9u
IDI3MzcyKQorKysgcGFnZS9pbnNwZWN0b3IvUGFuZWwuanMJKHdvcmtpbmcgY29weSkKQEAgLTEz
NCw3ICsxMzQsNiBAQCBXZWJJbnNwZWN0b3IuUGFuZWwucHJvdG90eXBlID0gewogCiAgICAgc2V0
IGN1cnJlbnRWaWV3KHgpCiAgICAgewotICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLmxvZyh4
KTsKICAgICAgICAgaWYgKHR5cGVvZiB4ID09PSAic3RyaW5nIiB8fCB4IGluc3RhbmNlb2YgU3Ry
aW5nKQogICAgICAgICAgICAgeCA9IHRoaXMudmlld3NbeF07CiAKSW5kZXg6IHBhZ2UvaW5zcGVj
dG9yL1Byb3BlcnRpZXNTZWN0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvaW5zcGVjdG9yL1By
b3BlcnRpZXNTZWN0aW9uLmpzCShyZXZpc2lvbiAyNzM3MikKKysrIHBhZ2UvaW5zcGVjdG9yL1By
b3BlcnRpZXNTZWN0aW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIFdlYklu
c3BlY3Rvci5Qcm9wZXJ0aWVzU2VjdGlvbiA9IGZ1bmN0aW8KICAgICB0aGlzLnByb3BlcnRpZXNF
bGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib2wiKTsKICAgICB0aGlzLnByb3BlcnRp
ZXNFbGVtZW50LmNsYXNzTmFtZSA9ICJwcm9wZXJ0aWVzIjsKICAgICB0aGlzLnByb3BlcnRpZXNU
cmVlT3V0bGluZSA9IG5ldyBUcmVlT3V0bGluZSh0aGlzLnByb3BlcnRpZXNFbGVtZW50KTsKKyAg
ICB0aGlzLnByb3BlcnRpZXNUcmVlT3V0bGluZS5zZWN0aW9uID0gdGhpczsKIAogICAgIHRoaXMu
ZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmhlYWRlckVsZW1lbnQpOwogICAgIHRoaXMuZWxlbWVu
dC5hcHBlbmRDaGlsZCh0aGlzLnByb3BlcnRpZXNFbGVtZW50KTsKSW5kZXg6IHBhZ2UvaW5zcGVj
dG9yL1Byb3BlcnRpZXNTaWRlYmFyUGFuZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdlL2luc3BlY3Rv
ci9Qcm9wZXJ0aWVzU2lkZWJhclBhbmUuanMJKHJldmlzaW9uIDApCisrKyBwYWdlL2luc3BlY3Rv
ci9Qcm9wZXJ0aWVzU2lkZWJhclBhbmUuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworV2ViSW5zcGVjdG9yLlByb3BlcnRpZXNTaWRlYmFyUGFuZSA9IGZ1bmN0aW9uKCkKK3sKKyAg
ICBXZWJJbnNwZWN0b3IuU2lkZWJhclBhbmUuY2FsbCh0aGlzLCAiUHJvcGVydGllcyIpOworfQor
CitXZWJJbnNwZWN0b3IuUHJvcGVydGllc1NpZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKKyAgICB1
cGRhdGU6IGZ1bmN0aW9uKG9iamVjdCkKKyAgICB7CisgICAgICAgIHZhciBib2R5ID0gdGhpcy5i
b2R5RWxlbWVudDsKKworICAgICAgICBib2R5LnJlbW92ZUNoaWxkcmVuKCk7CisKKyAgICAgICAg
dGhpcy5zZWN0aW9ucyA9IFtdOworCisgICAgICAgIGlmICghb2JqZWN0KQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGZvciAodmFyIHByb3RvdHlwZSA9IG9iamVjdDsgcHJvdG90eXBl
OyBwcm90b3R5cGUgPSBwcm90b3R5cGUuX19wcm90b19fKSB7CisgICAgICAgICAgICB2YXIgc2Vj
dGlvbiA9IG5ldyBXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydGllc1NlY3Rpb24ocHJvdG90eXBl
KTsKKyAgICAgICAgICAgIHRoaXMuc2VjdGlvbnMucHVzaChzZWN0aW9uKTsKKyAgICAgICAgICAg
IGJvZHkuYXBwZW5kQ2hpbGQoc2VjdGlvbi5lbGVtZW50KTsKKyAgICAgICAgfQorICAgIH0KK30K
KworV2ViSW5zcGVjdG9yLlByb3BlcnRpZXNTaWRlYmFyUGFuZS5wcm90b3R5cGUuX19wcm90b19f
ID0gV2ViSW5zcGVjdG9yLlNpZGViYXJQYW5lLnByb3RvdHlwZTsKKworV2ViSW5zcGVjdG9yLk9i
amVjdFByb3BlcnRpZXNTZWN0aW9uID0gZnVuY3Rpb24ob2JqZWN0KQoreworICAgIHZhciB0aXRs
ZSA9IE9iamVjdC5kZXNjcmliZShvYmplY3QpOworICAgIHZhciBzdWJ0aXRsZTsKKyAgICBpZiAo
dGl0bGUubWF0Y2goL1Byb3RvdHlwZSQvKSkgeworCQl0aXRsZSA9IHRpdGxlLnJlcGxhY2UoL1By
b3RvdHlwZSQvLCAiIik7CisJCXN1YnRpdGxlID0gIlByb3RvdHlwZSI7CisgICAgfQorCisgICAg
dGhpcy5vYmplY3QgPSBvYmplY3Q7CisKKyAgICBXZWJJbnNwZWN0b3IuUHJvcGVydGllc1NlY3Rp
b24uY2FsbCh0aGlzLCB0aXRsZSwgc3VidGl0bGUpOworfQorCitXZWJJbnNwZWN0b3IuT2JqZWN0
UHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlID0geworICAgIG9ucG9wdWxhdGU6IGZ1bmN0aW9u
KCkKKyAgICB7CisJCXZhciBwcm9wZXJ0aWVzID0gT2JqZWN0LnNvcnRlZFByb3BlcnRpZXModGhp
cy5vYmplY3QpOworCQlmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyArK2kp
IHsKKwkJCXZhciBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0aWVzW2ldOworCQkJaWYgKCF0aGlzLm9i
amVjdC5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eU5hbWUpIHx8IHByb3BlcnR5TmFtZSA9PT0gIl9f
dHJlZUVsZW1lbnRJZGVudGlmaWVyIikKKwkJCQljb250aW51ZTsKKwkJCXRoaXMucHJvcGVydGll
c1RyZWVPdXRsaW5lLmFwcGVuZENoaWxkKG5ldyBXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydHlU
cmVlRWxlbWVudCh0aGlzLm9iamVjdCwgcHJvcGVydHlOYW1lKSk7CisJCX0KKyAgICB9Cit9CisK
K1dlYkluc3BlY3Rvci5PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUuX19wcm90b19f
ID0gV2ViSW5zcGVjdG9yLlByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZTsKKworV2ViSW5zcGVj
dG9yLk9iamVjdFByb3BlcnR5VHJlZUVsZW1lbnQgPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5
TmFtZSkKK3sKKyAgICB2YXIgdGl0bGUgPSAiPHNwYW4gY2xhc3M9XCJuYW1lXCI+IiArIHByb3Bl
cnR5TmFtZS5lc2NhcGVIVE1MKCkgKyAiPC9zcGFuPjogIjsKKyAgICB0aXRsZSArPSAiPHNwYW4g
Y2xhc3M9XCJ2YWx1ZVwiPiIgKyBPYmplY3QuZGVzY3JpYmUob2JqZWN0W3Byb3BlcnR5TmFtZV0s
IHRydWUpLmVzY2FwZUhUTUwoKSArICI8L3NwYW4+IjsKKworICAgIHZhciBoYXNTdWJQcm9wZXJ0
aWVzID0gZmFsc2U7CisgICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqZWN0W3Byb3BlcnR5TmFtZV07
CisgICAgaWYgKG9iamVjdFtwcm9wZXJ0eU5hbWVdICYmICh0eXBlID09PSAib2JqZWN0IiB8fCB0
eXBlID09PSAiZnVuY3Rpb24iKSkgeworICAgICAgICBmb3IgKHN1YlByb3BlcnR5TmFtZSBpbiBv
YmplY3RbcHJvcGVydHlOYW1lXSkgeworCQkJaWYgKHN1YlByb3BlcnR5TmFtZSA9PT0gIl9fdHJl
ZUVsZW1lbnRJZGVudGlmaWVyIikKKwkJCQljb250aW51ZTsKKyAgICAgICAgICAgIGhhc1N1YlBy
b3BlcnRpZXMgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisK
Kwl0aGlzLm9iamVjdCA9IG9iamVjdDsKKwl0aGlzLnByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFt
ZTsKKworICAgIFRyZWVFbGVtZW50LmNhbGwodGhpcywgdGl0bGUsIG51bGwsIGhhc1N1YlByb3Bl
cnRpZXMpOworfQorCitXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydHlUcmVlRWxlbWVudC5wcm90
b3R5cGUgPSB7CisgICAgb25wb3B1bGF0ZTogZnVuY3Rpb24oKQorICAgIHsKKwkJaWYgKHRoaXMu
Y2hpbGRyZW4ubGVuZ3RoKQorCQkJcmV0dXJuOworCisJCXZhciBvYmplY3QgPSB0aGlzLm9iamVj
dFt0aGlzLnByb3BlcnR5TmFtZV07CisJCXZhciBwcm9wZXJ0aWVzID0gT2JqZWN0LnNvcnRlZFBy
b3BlcnRpZXMob2JqZWN0KTsKKwkJZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0
aDsgKytpKSB7CisJCQl2YXIgcHJvcGVydHlOYW1lID0gcHJvcGVydGllc1tpXTsKKwkJCWlmIChw
cm9wZXJ0eU5hbWUgPT09ICJfX3RyZWVFbGVtZW50SWRlbnRpZmllciIpCisJCQkJY29udGludWU7
CisJCQl0aGlzLmFwcGVuZENoaWxkKG5ldyBXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydHlUcmVl
RWxlbWVudChvYmplY3QsIHByb3BlcnR5TmFtZSkpOworCQl9CisgICAgfQorfQorCitXZWJJbnNw
ZWN0b3IuT2JqZWN0UHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUuX19wcm90b19fID0gVHJl
ZUVsZW1lbnQucHJvdG90eXBlOwpJbmRleDogcGFnZS9pbnNwZWN0b3IvU2lkZWJhclBhbmUuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gcGFnZS9pbnNwZWN0b3IvU2lkZWJhclBhbmUuanMJKHJldmlzaW9uIDI3
MzcyKQorKysgcGFnZS9pbnNwZWN0b3IvU2lkZWJhclBhbmUuanMJKHdvcmtpbmcgY29weSkKQEAg
LTQ2LDggKzQ2LDYgQEAgV2ViSW5zcGVjdG9yLlNpZGViYXJQYW5lID0gZnVuY3Rpb24odGl0bAog
ICAgIHRoaXMudGl0bGUgPSB0aXRsZTsKICAgICB0aGlzLmdyb3diYXJWaXNpYmxlID0gZmFsc2U7
CiAgICAgdGhpcy5leHBhbmRlZCA9IGZhbHNlOwotICAgIHRoaXMub25leHBhbmQgPSBudWxsOwot
ICAgIHRoaXMub25jb2xsYXBzZSA9IG51bGw7CiB9CiAKIFdlYkluc3BlY3Rvci5TaWRlYmFyUGFu
ZS5wcm90b3R5cGUgPSB7CkluZGV4OiBwYWdlL2luc3BlY3Rvci9TdHlsZXNTaWRlYmFyUGFuZS5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBwYWdlL2luc3BlY3Rvci9TdHlsZXNTaWRlYmFyUGFuZS5qcwkocmV2
aXNpb24gMCkKKysrIHBhZ2UvaW5zcGVjdG9yL1N0eWxlc1NpZGViYXJQYW5lLmpzCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDQ1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZSA9
IGZ1bmN0aW9uKCkKK3sKKyAgICBXZWJJbnNwZWN0b3IuU2lkZWJhclBhbmUuY2FsbCh0aGlzLCAi
U3R5bGVzIik7Cit9CisKK1dlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5wcm90b3R5cGUg
PSB7CisgICAgdXBkYXRlOiBmdW5jdGlvbihub2RlKQorICAgIHsKKyAgICAgICAgdmFyIGJvZHkg
PSB0aGlzLmJvZHlFbGVtZW50OworCisgICAgICAgIGJvZHkucmVtb3ZlQ2hpbGRyZW4oKTsKKwor
ICAgICAgICB0aGlzLnNlY3Rpb25zID0gW107CisKKyAgICAgICAgaWYgKCFub2RlKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRf
Tk9ERSAmJiBub2RlLnBhcmVudE5vZGUpCisgICAgICAgICAgICBub2RlID0gbm9kZS5wYXJlbnRO
b2RlOworCisgICAgICAgIHZhciBzdHlsZVJ1bGVzID0gW107CisgICAgICAgIHZhciBzdHlsZVBy
b3BlcnRpZXMgPSBbXTsKKworICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVN
RU5UX05PREUpIHsKKyAgICAgICAgICAgIHZhciBwcm9wZXJ0eUNvdW50ID0gW107CisKKyAgICAg
ICAgICAgIHZhciBjb21wdXRlZFN0eWxlID0gbm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3
LmdldENvbXB1dGVkU3R5bGUobm9kZSk7CisgICAgICAgICAgICBpZiAoY29tcHV0ZWRTdHlsZSAm
JiBjb21wdXRlZFN0eWxlLmxlbmd0aCkKKyAgICAgICAgICAgICAgICBzdHlsZVJ1bGVzLnB1c2go
eyBjb21wdXRlZFN0eWxlOiB0cnVlLCBzZWxlY3RvclRleHQ6ICJDb21wdXRlZCBTdHlsZSIsIHN0
eWxlOiBjb21wdXRlZFN0eWxlIH0pOworCisgICAgICAgICAgICB2YXIgbm9kZU5hbWUgPSBub2Rl
Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IG5vZGUuYXR0cmlidXRlcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIHZhciBhdHRy
ID0gbm9kZS5hdHRyaWJ1dGVzW2ldOworICAgICAgICAgICAgICAgIGlmIChhdHRyLnN0eWxlKSB7
CisgICAgICAgICAgICAgICAgICAgIHZhciBhdHRyU3R5bGUgPSB7IHN0eWxlOiBhdHRyLnN0eWxl
IH07CisgICAgICAgICAgICAgICAgICAgIGF0dHJTdHlsZS5zdWJ0aXRsZSA9ICJlbGVtZW50XHUy
MDE5cyBcdTIwMUMiICsgYXR0ci5uYW1lICsgIlx1MjAxRCBhdHRyaWJ1dGUiOworICAgICAgICAg
ICAgICAgICAgICBhdHRyU3R5bGUuc2VsZWN0b3JUZXh0ID0gbm9kZU5hbWUgKyAiWyIgKyBhdHRy
Lm5hbWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChhdHRyLnZhbHVlLmxlbmd0aCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGF0dHJTdHlsZS5zZWxlY3RvclRleHQgKz0gIj0iICsgYXR0ci52
YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgYXR0clN0eWxlLnNlbGVjdG9yVGV4dCArPSAiXSI7
CisgICAgICAgICAgICAgICAgICAgIHN0eWxlUnVsZXMucHVzaChhdHRyU3R5bGUpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG5vZGUuc3R5bGUg
JiYgbm9kZS5zdHlsZS5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICB2YXIgaW5saW5lU3R5bGUg
PSB7IHNlbGVjdG9yVGV4dDogIklubGluZSBTdHlsZSBBdHRyaWJ1dGUiLCBzdHlsZTogbm9kZS5z
dHlsZSB9OworICAgICAgICAgICAgICAgIGlubGluZVN0eWxlLnN1YnRpdGxlID0gImVsZW1lbnRc
dTIwMTlzIFx1MjAxQ3N0eWxlXHUyMDFEIGF0dHJpYnV0ZSI7CisgICAgICAgICAgICAgICAgc3R5
bGVSdWxlcy5wdXNoKGlubGluZVN0eWxlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
dmFyIG1hdGNoZWRTdHlsZVJ1bGVzID0gbm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3Lmdl
dE1hdGNoZWRDU1NSdWxlcyhub2RlLCAiIiwgIVByZWZlcmVuY2VzLnNob3dVc2VyQWdlbnRTdHls
ZXMpOworICAgICAgICAgICAgaWYgKG1hdGNoZWRTdHlsZVJ1bGVzKSB7CisJCQkJLy8gQWRkIHJ1
bGVzIGluIHJldmVyc2Ugb3JkZXIgdG8gbWF0Y2ggdGhlIGNhc2NhZGUgb3JkZXIuCisgICAgICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IChtYXRjaGVkU3R5bGVSdWxlcy5sZW5ndGggLSAxKTsgaSA+
PSAwOyAtLWkpCisgICAgICAgICAgICAgICAgICAgIHN0eWxlUnVsZXMucHVzaChtYXRjaGVkU3R5
bGVSdWxlc1tpXSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciB1c2VkUHJvcGVy
dGllcyA9IHt9OworICAgICAgICAgICAgdmFyIHByaW9yaXR5VXNlZCA9IGZhbHNlOworCisgICAg
ICAgICAgICAvLyBXYWxrIHRoZSBzdHlsZSBydWxlcyBhbmQgbWFrZSBhIGxpc3Qgb2YgYWxsIHVz
ZWQgYW5kIG92ZXJsb2FkZWQgcHJvcGVydGllcy4KKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgc3R5bGVSdWxlcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChzdHls
ZVJ1bGVzW2ldLmNvbXB1dGVkU3R5bGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICAgICAgc3R5bGVSdWxlc1tpXS5vdmVybG9hZGVkUHJvcGVydGllcyA9IHt9
OworCisgICAgICAgICAgICAgICAgdmFyIGZvdW5kUHJvcGVydGllcyA9IHt9OworCisgICAgICAg
ICAgICAgICAgdmFyIHN0eWxlID0gc3R5bGVSdWxlc1tpXS5zdHlsZTsKKyAgICAgICAgICAgICAg
ICBmb3IgKHZhciBqID0gMDsgaiA8IHN0eWxlLmxlbmd0aDsgKytqKSB7CisgICAgICAgICAgICAg
ICAgICAgIHZhciBuYW1lID0gc3R5bGVbal07CisgICAgICAgICAgICAgICAgICAgIHZhciBzaG9y
dGhhbmQgPSBzdHlsZS5nZXRQcm9wZXJ0eVNob3J0aGFuZChuYW1lKTsKKyAgICAgICAgICAgICAg
ICAgICAgdmFyIG92ZXJsb2FkZWQgPSAobmFtZSBpbiB1c2VkUHJvcGVydGllcyk7CisKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFwcmlvcml0eVVzZWQgJiYgc3R5bGUuZ2V0UHJvcGVydHlQcmlv
cml0eShuYW1lKS5sZW5ndGgpCisgICAgICAgICAgICAgICAgICAgICAgICBwcmlvcml0eVVzZWQg
PSB0cnVlOworCisgICAgICAgICAgICAgICAgICAgIGlmIChvdmVybG9hZGVkKQorICAgICAgICAg
ICAgICAgICAgICAgICAgc3R5bGVSdWxlc1tpXS5vdmVybG9hZGVkUHJvcGVydGllc1tuYW1lXSA9
IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgZm91bmRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNob3J0aGFuZCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZvdW5kUHJvcGVydGllc1tzaG9ydGhhbmRdID0gdHJ1ZTsKKworICAgICAgICAgICAg
ICAgICAgICBpZiAobmFtZSA9PT0gImZvbnQiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBUaGUgZm9udCBwcm9wZXJ0eSBpcyBub3QgcmVwb3J0ZWQgYXMgYSBzaG9ydGhhbmQuIFJlcG9y
dCBmaW5kaW5nIHRoZSBpbmRpdmlkdWFsCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9w
ZXJ0aWVzIHNvIHRoZXkgYXJlIHZpc2libGUgaW4gY29tcHV0ZWQgc3R5bGUuCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hlbiBodHRwOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTU5OCBpcyBmaXhlZC4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZvdW5kUHJvcGVydGllc1siZm9udC1mYW1pbHkiXSA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICBmb3VuZFByb3BlcnRpZXNbImZvbnQtc2l6ZSJdID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvdW5kUHJvcGVydGllc1siZm9udC1zdHlsZSJdID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kUHJvcGVydGllc1siZm9udC12YXJpYW50Il0g
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRQcm9wZXJ0aWVzWyJmb250LXdl
aWdodCJdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kUHJvcGVydGllc1si
bGluZS1oZWlnaHQiXSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBBZGQgYWxsIHRoZSBwcm9wZXJ0aWVzIGZvdW5k
IGluIHRoaXMgc3R5bGUgdG8gdGhlIHVzZWQgcHJvcGVydGllcyBsaXN0LgorICAgICAgICAgICAg
ICAgIC8vIERvIHRoaXMgaGVyZSBzbyBvbmx5IGZ1dHVyZSBydWxlcyBhcmUgYWZmZWN0IGJ5IHBy
b3BlcnRpZXMgdXNlZCBpbiB0aGlzIHJ1bGUuCisgICAgICAgICAgICAgICAgZm9yICh2YXIgbmFt
ZSBpbiBmb3VuZFByb3BlcnRpZXMpCisgICAgICAgICAgICAgICAgICAgIHVzZWRQcm9wZXJ0aWVz
W25hbWVdID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHByaW9yaXR5
VXNlZCkgeworICAgICAgICAgICAgICAgIC8vIFdhbGsgdGhlIHByb3BlcnRpZXMgYWdhaW4gYW5k
IGFjY291bnQgZm9yICFpbXBvcnRhbnQuCisgICAgICAgICAgICAgICAgdmFyIGZvdW5kUHJpb3Jp
dHlQcm9wZXJ0aWVzID0gW107CisKKyAgICAgICAgICAgICAgICAvLyBXYWxrIGluIHJldmVyc2Ug
dG8gbWF0Y2ggdGhlIG9yZGVyICFpbXBvcnRhbnQgb3ZlcnJpZGVzLgorICAgICAgICAgICAgICAg
IGZvciAodmFyIGkgPSAoc3R5bGVSdWxlcy5sZW5ndGggLSAxKTsgaSA+PSAwOyAtLWkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlUnVsZXNbaV0uY29tcHV0ZWRTdHlsZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgICAgIHZhciBm
b3VuZFByb3BlcnRpZXMgPSB7fTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHN0eWxlID0gc3R5
bGVSdWxlc1tpXS5zdHlsZTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGog
PCBzdHlsZS5sZW5ndGg7ICsraikgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUg
PSBzdHlsZVtqXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2tpcCBkdXBsaWNhdGUg
cHJvcGVydGllcyBpbiB0aGUgc2FtZSBydWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG5hbWUgaW4gZm91bmRQcm9wZXJ0aWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZFByb3BlcnRpZXNbbmFtZV0g
PSB0cnVlOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGUuZ2V0UHJvcGVydHlQ
cmlvcml0eShuYW1lKS5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IShuYW1lIGluIGZvdW5kUHJpb3JpdHlQcm9wZXJ0aWVzKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVsZXRlIHN0eWxlUnVsZXNbaV0ub3ZlcmxvYWRlZFByb3BlcnRpZXNbbmFt
ZV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHlsZVJ1bGVzW2ldLm92ZXJsb2FkZWRQcm9wZXJ0aWVzW25hbWVdID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZFByaW9yaXR5UHJvcGVydGll
c1tuYW1lXSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUg
aW4gZm91bmRQcmlvcml0eVByb3BlcnRpZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3R5bGVSdWxlc1tpXS5vdmVybG9hZGVkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8vIE1ha2UgYSBwcm9wZXJ0eSBzZWN0aW9uIGZvciBlYWNoIHN0eWxlIHJ1bGUuCisg
ICAgICAgICAgICB2YXIgc3R5bGVSdWxlc0xlbmd0aCA9IHN0eWxlUnVsZXMubGVuZ3RoOworICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZVJ1bGVzTGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgICAgICAgICB2YXIgc3R5bGVSdWxlID0gc3R5bGVSdWxlc1tpXTsKKyAgICAgICAgICAg
ICAgICB2YXIgc3VidGl0bGUgPSBzdHlsZVJ1bGUuc3VidGl0bGU7CisgICAgICAgICAgICAgICAg
ZGVsZXRlIHN0eWxlUnVsZS5zdWJ0aXRsZTsKKworICAgICAgICAgICAgICAgIHZhciBjb21wdXRl
ZFN0eWxlID0gc3R5bGVSdWxlLmNvbXB1dGVkU3R5bGU7CisgICAgICAgICAgICAgICAgZGVsZXRl
IHN0eWxlUnVsZS5jb21wdXRlZFN0eWxlOworCisgICAgICAgICAgICAgICAgdmFyIG92ZXJsb2Fk
ZWRQcm9wZXJ0aWVzID0gc3R5bGVSdWxlLm92ZXJsb2FkZWRQcm9wZXJ0aWVzOworICAgICAgICAg
ICAgICAgIGRlbGV0ZSBzdHlsZVJ1bGUub3ZlcmxvYWRlZFByb3BlcnRpZXM7CisKKyAgICAgICAg
ICAgICAgICB2YXIgc2VjdGlvbiA9IG5ldyBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2Vj
dGlvbihzdHlsZVJ1bGUsIHN1YnRpdGxlLCBjb21wdXRlZFN0eWxlLCAob3ZlcmxvYWRlZFByb3Bl
cnRpZXMgfHwgdXNlZFByb3BlcnRpZXMpKTsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmV4cGFu
ZGVkID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kQ2hpbGQoc2VjdGlvbi5l
bGVtZW50KTsKKyAgICAgICAgICAgICAgICB0aGlzLnNlY3Rpb25zLnB1c2goc2VjdGlvbik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBjYW4ndCBzdHls
ZSB0aGlzIG5vZGUKKyAgICAgICAgfQorICAgIH0KK30KKworV2ViSW5zcGVjdG9yLlN0eWxlc1Np
ZGViYXJQYW5lLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuU2lkZWJhclBhbmUu
cHJvdG90eXBlOworCitXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbiA9IGZ1bmN0
aW9uKHN0eWxlUnVsZSwgc3VidGl0bGUsIGNvbXB1dGVkU3R5bGUsIG92ZXJsb2FkZWRPclVzZWRQ
cm9wZXJ0aWVzKQoreworICAgIFdlYkluc3BlY3Rvci5Qcm9wZXJ0aWVzU2VjdGlvbi5jYWxsKHRo
aXMsIHN0eWxlUnVsZS5zZWxlY3RvclRleHQpOworCisgICAgdGhpcy5zdHlsZVJ1bGUgPSBzdHls
ZVJ1bGU7CisgICAgdGhpcy5jb21wdXRlZFN0eWxlID0gY29tcHV0ZWRTdHlsZTsKKworICAgIGlm
IChjb21wdXRlZFN0eWxlKQorICAgICAgICB0aGlzLnVzZWRQcm9wZXJ0aWVzID0gb3ZlcmxvYWRl
ZE9yVXNlZFByb3BlcnRpZXM7CisgICAgZWxzZQorICAgICAgICB0aGlzLm92ZXJsb2FkZWRQcm9w
ZXJ0aWVzID0gb3ZlcmxvYWRlZE9yVXNlZFByb3BlcnRpZXMgfHwge307CisKKyAgICBpZiAoY29t
cHV0ZWRTdHlsZSkgeworICAgICAgICBpZiAoUHJlZmVyZW5jZXMuc2hvd0luaGVyaXRlZENvbXB1
dGVkU3R5bGVQcm9wZXJ0aWVzKQorICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xh
c3MoInNob3ctaW5oZXJpdGVkIik7CisKKyAgICAgICAgdmFyIHNob3dJbmhlcml0ZWRMYWJlbCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7CisgICAgICAgIHZhciBzaG93SW5oZXJp
dGVkSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOworICAgICAgICBzaG93
SW5oZXJpdGVkSW5wdXQudHlwZSA9ICJjaGVja2JveCI7CisgICAgICAgIHNob3dJbmhlcml0ZWRJ
bnB1dC5jaGVja2VkID0gUHJlZmVyZW5jZXMuc2hvd0luaGVyaXRlZENvbXB1dGVkU3R5bGVQcm9w
ZXJ0aWVzOworCisgICAgICAgIHZhciBjb21wdXRlZFN0eWxlU2VjdGlvbiA9IHRoaXM7CisgICAg
ICAgIHZhciBzaG93SW5oZXJpdGVkVG9nZ2xlRnVuY3Rpb24gPSBmdW5jdGlvbihldmVudCkgewor
ICAgICAgICAgICAgUHJlZmVyZW5jZXMuc2hvd0luaGVyaXRlZENvbXB1dGVkU3R5bGVQcm9wZXJ0
aWVzID0gc2hvd0luaGVyaXRlZElucHV0LmNoZWNrZWQ7CisgICAgICAgICAgICBpZiAoUHJlZmVy
ZW5jZXMuc2hvd0luaGVyaXRlZENvbXB1dGVkU3R5bGVQcm9wZXJ0aWVzKQorICAgICAgICAgICAg
ICAgIGNvbXB1dGVkU3R5bGVTZWN0aW9uLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygic2hvdy1pbmhl
cml0ZWQiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb21wdXRlZFN0eWxl
U2VjdGlvbi5lbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoInNob3ctaW5oZXJpdGVkIik7CisgICAg
ICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgfTsKKworICAgICAgICBz
aG93SW5oZXJpdGVkTGFiZWwuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBzaG93SW5oZXJpdGVk
VG9nZ2xlRnVuY3Rpb24sIGZhbHNlKTsKKworICAgICAgICBzaG93SW5oZXJpdGVkTGFiZWwuYXBw
ZW5kQ2hpbGQoc2hvd0luaGVyaXRlZElucHV0KTsKKyAgICAgICAgc2hvd0luaGVyaXRlZExhYmVs
LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJTaG93IGluaGVyaXRlZCBwcm9w
ZXJ0aWVzIikpOworICAgICAgICB0aGlzLnN1YnRpdGxlRWxlbWVudC5hcHBlbmRDaGlsZChzaG93
SW5oZXJpdGVkTGFiZWwpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghc3VidGl0bGUpIHsK
KyAgICAgICAgICAgIGlmICh0aGlzLnN0eWxlUnVsZS5wYXJlbnRTdHlsZVNoZWV0ICYmIHRoaXMu
c3R5bGVSdWxlLnBhcmVudFN0eWxlU2hlZXQuaHJlZikgeworICAgICAgICAgICAgICAgIHZhciB1
cmwgPSB0aGlzLnN0eWxlUnVsZS5wYXJlbnRTdHlsZVNoZWV0LmhyZWY7CisgICAgICAgICAgICAg
ICAgc3VidGl0bGUgPSBXZWJJbnNwZWN0b3IubGlua2lmeVVSTCh1cmwsIHVybC50cmltVVJMKFdl
Ykluc3BlY3Rvci5tYWluUmVzb3VyY2UuZG9tYWluKS5lc2NhcGVIVE1MKCkpOworICAgICAgICAg
ICAgICAgIHRoaXMuc3VidGl0bGVFbGVtZW50LmFkZFN0eWxlQ2xhc3MoImZpbGUiKTsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdHlsZVJ1bGUucGFyZW50U3R5bGVTaGVldCAmJiAhdGhp
cy5zdHlsZVJ1bGUucGFyZW50U3R5bGVTaGVldC5vd25lck5vZGUpCisgICAgICAgICAgICAgICAg
c3VidGl0bGUgPSAidXNlciBhZ2VudCBzdHlsZXNoZWV0IjsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBzdWJ0aXRsZSA9ICJpbmxpbmUgc3R5bGVzaGVldCI7CisgICAgICAgIH0K
KworICAgICAgICB0aGlzLnN1YnRpdGxlID0gc3VidGl0bGU7CisgICAgfQorfQorCitXZWJJbnNw
ZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUgPSB7CisgICAgb25wb3B1bGF0
ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIHN0eWxlID0gdGhpcy5zdHlsZVJ1bGUu
c3R5bGU7CisgICAgICAgIGlmICghc3R5bGUubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIHZhciBmb3VuZFByb3BlcnRpZXMgPSB7fTsKKworICAgICAgICAvLyBBZGQgcHJv
cGVydGllcyBpbiByZXZlcnNlIG9yZGVyIHRvIGJldHRlciBtYXRjaCBob3cgdGhlIHN0eWxlCisJ
CS8vIHN5c3RlbSBwaWNrcyB0aGUgd2lubmluZyB2YWx1ZSBmb3IgZHVwbGljYXRlIHByb3BlcnRp
ZXMuCisgICAgICAgIGZvciAodmFyIGkgPSAoc3R5bGUubGVuZ3RoIC0gMSk7IGkgPj0gMDsgLS1p
KSB7CisgICAgICAgICAgICB2YXIgbmFtZSA9IHN0eWxlW2ldOworICAgICAgICAgICAgdmFyIHNo
b3J0aGFuZCA9IHN0eWxlLmdldFByb3BlcnR5U2hvcnRoYW5kKG5hbWUpOworCisgICAgICAgICAg
ICBpZiAobmFtZSBpbiBmb3VuZFByb3BlcnRpZXMgfHwgKHNob3J0aGFuZCAmJiBzaG9ydGhhbmQg
aW4gZm91bmRQcm9wZXJ0aWVzKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgZm91bmRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChzaG9y
dGhhbmQpCisgICAgICAgICAgICAgICAgZm91bmRQcm9wZXJ0aWVzW3Nob3J0aGFuZF0gPSB0cnVl
OworCisgICAgICAgICAgICBpZiAodGhpcy5jb21wdXRlZFN0eWxlKQorICAgICAgICAgICAgICAg
IHZhciBpbmhlcml0ZWQgPSAodGhpcy51c2VkUHJvcGVydGllcyAmJiAhKChzaG9ydGhhbmQgfHwg
bmFtZSkgaW4gdGhpcy51c2VkUHJvcGVydGllcykpOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgdmFyIG92ZXJsb2FkZWQgPSAoKHNob3J0aGFuZCB8fCBuYW1lKSBpbiB0aGlz
Lm92ZXJsb2FkZWRQcm9wZXJ0aWVzKTsKKworICAgICAgICAgICAgICAgIGlmIChzaG9ydGhhbmQg
JiYgIW92ZXJsb2FkZWQpIHsKKwkJCQkJLy8gRmluZCBvdXQgaWYgYWxsIHRoZSBpbmRpdmlkdWFs
IHByb3BlcnRpZXMgb2YgYSBzaG9ydGhhbmQKKwkJCQkJLy8gYXJlIG92ZXJsb2FkZWQgYW5kIG1h
cmsgdGhlIHNob3J0aGFuZCBhcyBvdmVybG9hZGVkIHRvby4KKworICAgICAgICAgICAgICAgICAg
ICB2YXIgY291bnQgPSAwOworICAgICAgICAgICAgICAgICAgICB2YXIgb3ZlcmxvYWRDb3VudCA9
IDA7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc3R5bGUubGVuZ3Ro
OyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRpdmlkdWFsUHJvcGVydHkg
PSBzdHlsZVtqXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZS5nZXRQcm9wZXJ0
eVNob3J0aGFuZChpbmRpdmlkdWFsUHJvcGVydHkpICE9PSBzaG9ydGhhbmQpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICArK2Nv
dW50OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGl2aWR1YWxQcm9wZXJ0eSBpbiB0
aGlzLm92ZXJsb2FkZWRQcm9wZXJ0aWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsr
b3ZlcmxvYWRDb3VudDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIG92ZXJsb2FkZWQgPSAob3ZlcmxvYWRDb3VudCA+PSBjb3VudCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgaXRlbSA9IG5ldyBXZWJJbnNw
ZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50KHN0eWxlLCAoc2hvcnRoYW5kIHx8IG5hbWUp
LCB0aGlzLmNvbXB1dGVkU3R5bGUsIChzaG9ydGhhbmQgPyB0cnVlIDogZmFsc2UpLCAob3Zlcmxv
YWRlZCB8fCBpbmhlcml0ZWQpKTsKKyAgICAgICAgICAgIHRoaXMucHJvcGVydGllc1RyZWVPdXRs
aW5lLmluc2VydENoaWxkKGl0ZW0sIDApOworICAgICAgICB9CisgICAgfQorfQorCitXZWJJbnNw
ZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5z
cGVjdG9yLlByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZTsKKworV2ViSW5zcGVjdG9yLlN0eWxl
UHJvcGVydHlUcmVlRWxlbWVudCA9IGZ1bmN0aW9uKHN0eWxlLCBuYW1lLCBjb21wdXRlZFN0eWxl
LCBzaG9ydGhhbmQsIG92ZXJsb2FkZWRPckluaGVyaXRlZCkKK3sKKyAgICAvLyBUaGVzZSBwcm9w
ZXJ0aWVzIHNob3VsZCBhbHdheXMgc2hvdyBmb3IgQ29tcHV0ZWQgU3R5bGUKKyAgICB2YXIgYWx3
YXlzU2hvd0NvbXB1dGVkUHJvcGVydGllcyA9IHsgImRpc3BsYXkiOiB0cnVlLCAiaGVpZ2h0Ijog
dHJ1ZSwgIndpZHRoIjogdHJ1ZSB9OworCisgICAgLy8gIk5pY2tuYW1lcyIgZm9yIHNvbWUgY29t
bW9uIHZhbHVlcyB0aGF0IGFyZSBlYXNpZXIgdG8gcmVhZC4KKyAgICB2YXIgdmFsdWVOaWNrbmFt
ZXMgPSB7CisgICAgICAgICJyZ2IoMCwgMCwgMCkiOiAiYmxhY2siLAorICAgICAgICAiIzAwMCI6
ICJibGFjayIsCisgICAgICAgICIjMDAwMDAwIjogImJsYWNrIiwKKyAgICAgICAgInJnYigyNTUs
IDI1NSwgMjU1KSI6ICJ3aGl0ZSIsCisgICAgICAgICIjZmZmIjogIndoaXRlIiwKKyAgICAgICAg
IiNmZmZmZmYiOiAid2hpdGUiLAorICAgICAgICAiI0ZGRiI6ICJ3aGl0ZSIsCisgICAgICAgICIj
RkZGRkZGIjogIndoaXRlIiwKKyAgICAgICAgInJnYmEoMCwgMCwgMCwgMCkiOiAidHJhbnNwYXJl
bnQiLAorICAgICAgICAicmdiKDI1NSwgMCwgMCkiOiAicmVkIiwKKyAgICAgICAgInJnYigwLCAy
NTUsIDApIjogImxpbWUiLAorICAgICAgICAicmdiKDAsIDAsIDI1NSkiOiAiYmx1ZSIsCisgICAg
ICAgICJyZ2IoMjU1LCAyNTUsIDApIjogInllbGxvdyIsCisgICAgICAgICJyZ2IoMjU1LCAwLCAy
NTUpIjogIm1hZ2VudGEiLAorICAgICAgICAicmdiKDAsIDI1NSwgMjU1KSI6ICJjeWFuIgorICAg
IH07CisKKyAgICB0aGlzLnN0eWxlID0gc3R5bGU7CisgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAg
ICB0aGlzLmNvbXB1dGVkU3R5bGUgPSBjb21wdXRlZFN0eWxlOworICAgIHRoaXMuc2hvcnRoYW5k
ID0gc2hvcnRoYW5kOworICAgIHRoaXMub3ZlcmxvYWRlZCA9ICghY29tcHV0ZWRTdHlsZSAmJiBv
dmVybG9hZGVkT3JJbmhlcml0ZWQpOworICAgIHRoaXMuaW5oZXJpdGVkID0gKGNvbXB1dGVkU3R5
bGUgJiYgb3ZlcmxvYWRlZE9ySW5oZXJpdGVkICYmICEobmFtZSBpbiBhbHdheXNTaG93Q29tcHV0
ZWRQcm9wZXJ0aWVzKSk7CisKKyAgICB2YXIgcHJpb3JpdHkgPSBzdHlsZS5nZXRQcm9wZXJ0eVBy
aW9yaXR5KG5hbWUpOworICAgIHZhciB2YWx1ZSA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFt
ZSk7CisgICAgdmFyIGh0bWxWYWx1ZSA9IHZhbHVlOworCisgICAgaWYgKHByaW9yaXR5ICYmICFw
cmlvcml0eS5sZW5ndGgpCisgICAgICAgIGRlbGV0ZSBwcmlvcml0eTsKKworICAgIGlmICghcHJp
b3JpdHkgJiYgc2hvcnRoYW5kKSB7CisgICAgICAgIC8vIFByaW9yaXR5IGlzIG5vdCByZXR1cm5l
ZCBmb3Igc2hvcnRoYW5kcywgZmluZCB0aGUgcHJpb3JpdHkgZnJvbSBhbiBpbmRpdmlkdWFsIHBy
b3BlcnR5LgorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlLmxlbmd0aDsgKytpKSB7
CisgICAgICAgICAgICB2YXIgaW5kaXZpZHVhbFByb3BlcnR5ID0gc3R5bGVbaV07CisgICAgICAg
ICAgICBpZiAoc3R5bGUuZ2V0UHJvcGVydHlTaG9ydGhhbmQoaW5kaXZpZHVhbFByb3BlcnR5KSAh
PT0gbmFtZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHByaW9yaXR5
ID0gc3R5bGUuZ2V0UHJvcGVydHlQcmlvcml0eShpbmRpdmlkdWFsUHJvcGVydHkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodmFsdWUpIHsKKyAgICAg
ICAgdmFyIHVybHMgPSB2YWx1ZS5tYXRjaCgvdXJsXChbXildK1wpLyk7CisgICAgICAgIGlmICh1
cmxzKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVybHMubGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgICAgICAgICB2YXIgdXJsID0gdXJsc1tpXS5zdWJzdHJpbmcoNCwgdXJsc1tp
XS5sZW5ndGggLSAxKTsKKyAgICAgICAgICAgICAgICBodG1sVmFsdWUgPSBodG1sVmFsdWUucmVw
bGFjZSh1cmxzW2ldLCAidXJsKCIgKyBXZWJJbnNwZWN0b3IubGlua2lmeVVSTCh1cmwpICsgIiki
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICh2YWx1
ZSBpbiB2YWx1ZU5pY2tuYW1lcykKKyAgICAgICAgICAgICAgICBodG1sVmFsdWUgPSB2YWx1ZU5p
Y2tuYW1lc1t2YWx1ZV07CisgICAgICAgICAgICBodG1sVmFsdWUgPSBodG1sVmFsdWUuZXNjYXBl
SFRNTCgpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChzaG9ydGhhbmQpIHsKKyAgICAgICAg
Ly8gU29tZSBzaG9ydGhhbmRzIChsaWtlIGJvcmRlcikgcmV0dXJuIGEgbnVsbCB2YWx1ZSwgc28g
Y29tcHV0ZSBhIHNob3J0aGFuZCB2YWx1ZS4KKyAgICAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlz
IHdoZW4gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4MjMgaXMgZml4
ZWQuCisKKyAgICAgICAgdmFsdWUgPSAiIjsKKworICAgICAgICB2YXIgZm91bmRQcm9wZXJ0aWVz
ID0ge307CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGUubGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgICAgIHZhciBpbmRpdmlkdWFsUHJvcGVydHkgPSBzdHlsZVtpXTsKKyAgICAgICAg
ICAgIGlmIChzdHlsZS5nZXRQcm9wZXJ0eVNob3J0aGFuZChpbmRpdmlkdWFsUHJvcGVydHkpICE9
PSBuYW1lIHx8IGluZGl2aWR1YWxQcm9wZXJ0eSBpbiBmb3VuZFByb3BlcnRpZXMpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHZhciBpbmRpdmlkdWFsVmFsdWUgPSBz
dHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGluZGl2aWR1YWxQcm9wZXJ0eSk7CisgICAgICAgICAgICBp
ZiAoc3R5bGUuaXNQcm9wZXJ0eUltcGxpY2l0KGluZGl2aWR1YWxQcm9wZXJ0eSkgfHwgaW5kaXZp
ZHVhbFZhbHVlID09PSAiaW5pdGlhbCIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgIGZvdW5kUHJvcGVydGllc1tpbmRpdmlkdWFsUHJvcGVydHldID0gdHJ1ZTsKKwor
ICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCkKKyAgICAgICAgICAgICAgICB2YWx1ZSArPSAi
ICI7CisgICAgICAgICAgICB2YWx1ZSArPSBpbmRpdmlkdWFsVmFsdWU7CisgICAgICAgIH0KKwor
ICAgICAgICBodG1sVmFsdWUgPSB2YWx1ZS5lc2NhcGVIVE1MKCk7CisgICAgfSBlbHNlCisgICAg
ICAgIGh0bWxWYWx1ZSA9IHZhbHVlID0gIiI7CisKKyAgICB2YXIgY2xhc3NlcyA9IFtdOworICAg
IGlmICghY29tcHV0ZWRTdHlsZSAmJiAoc3R5bGUuaXNQcm9wZXJ0eUltcGxpY2l0KG5hbWUpIHx8
IHZhbHVlID09PSAiaW5pdGlhbCIpKQorICAgICAgICBjbGFzc2VzLnB1c2goImltcGxpY2l0Iik7
CisgICAgaWYgKHRoaXMuaW5oZXJpdGVkKQorICAgICAgICBjbGFzc2VzLnB1c2goImluaGVyaXRl
ZCIpOworICAgIGlmICh0aGlzLm92ZXJsb2FkZWQpCisgICAgICAgIGNsYXNzZXMucHVzaCgib3Zl
cmxvYWRlZCIpOworCisgICAgdmFyIHRpdGxlID0gIiI7CisgICAgaWYgKGNsYXNzZXMubGVuZ3Ro
KQorICAgICAgICB0aXRsZSArPSAiPHNwYW4gY2xhc3M9XCIiICsgY2xhc3Nlcy5qb2luKCIgIikg
KyAiXCI+IjsKKworICAgIHRpdGxlICs9ICI8c3BhbiBjbGFzcz1cIm5hbWVcIj4iICsgbmFtZS5l
c2NhcGVIVE1MKCkgKyAiPC9zcGFuPjogIjsKKyAgICB0aXRsZSArPSAiPHNwYW4gY2xhc3M9XCJ2
YWx1ZVwiPiIgKyBodG1sVmFsdWU7CisgICAgaWYgKHByaW9yaXR5KQorICAgICAgICB0aXRsZSAr
PSAiICEiICsgcHJpb3JpdHk7CisgICAgdGl0bGUgKz0gIjwvc3Bhbj47IjsKKworICAgIGlmICh2
YWx1ZSkgeworICAgICAgICAvLyBGSVhNRTogdGhpcyBkb3Nlbid0IGNhdGNoIGtleXdvcmQgYmFz
ZWQgY29sb3JzIGxpa2UgYmxhY2sgYW5kIHdoaXRlCisgICAgICAgIHZhciBjb2xvcnMgPSB2YWx1
ZS5tYXRjaCgvKChyZ2J8aHNsKWE/XChbXildK1wpKXwoI1swLTlhLWZBLUZdezZ9KXwoI1swLTlh
LWZBLUZdezN9KS9nKTsKKyAgICAgICAgaWYgKGNvbG9ycykgeworICAgICAgICAgICAgdmFyIGNv
bG9yc0xlbmd0aCA9IGNvbG9ycy5sZW5ndGg7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGNvbG9yc0xlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIHRpdGxlICs9ICI8c3BhbiBj
bGFzcz1cInN3YXRjaFwiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogIiArIGNvbG9yc1tpXSAr
ICJcIj48L3NwYW4+IjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChjbGFzc2VzLmxlbmd0
aCkKKyAgICAgICAgdGl0bGUgKz0gIjwvc3Bhbj4iOworCisgICAgVHJlZUVsZW1lbnQuY2FsbCh0
aGlzLCB0aXRsZSwgbnVsbCwgc2hvcnRoYW5kKTsKKworICAgIHRoaXMudG9vbHRpcCA9IG5hbWUg
KyAiOiAiICsgKHZhbHVlTmlja25hbWVzW3ZhbHVlXSB8fCB2YWx1ZSkgKyAocHJpb3JpdHkgPyAi
ICEiICsgcHJpb3JpdHkgOiAiIik7Cit9CisKK1dlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJl
ZUVsZW1lbnQucHJvdG90eXBlID0geworICAgIG9ucG9wdWxhdGU6IGZ1bmN0aW9uKCkKKyAgICB7
CisJCS8vIE9ubHkgcG9wdWxhdGUgb25jZSBhbmQgaWYgdGhpcyBwcm9wZXJ0eSBpcyBhIHNob3J0
aGFuZC4KKyAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLnNob3J0aGFu
ZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgZm91bmRQcm9wZXJ0aWVzID0g
e307CisKKyAgICAgICAgLy8gQWRkIHByb3BlcnRpZXMgaW4gcmV2ZXJzZSBvcmRlciB0byBiZXR0
ZXIgbWF0Y2ggaG93IHRoZSBzdHlsZQorCQkvLyBzeXN0ZW0gcGlja3MgdGhlIHdpbm5pbmcgdmFs
dWUgZm9yIGR1cGxpY2F0ZSBwcm9wZXJ0aWVzLgorICAgICAgICBmb3IgKHZhciBpID0gKHRoaXMu
c3R5bGUubGVuZ3RoIC0gMSk7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgICAgICB2YXIgbmFtZSA9
IHRoaXMuc3R5bGVbaV07CisgICAgICAgICAgICB2YXIgc2hvcnRoYW5kID0gdGhpcy5zdHlsZS5n
ZXRQcm9wZXJ0eVNob3J0aGFuZChuYW1lKTsKKworICAgICAgICAgICAgaWYgKHNob3J0aGFuZCAh
PT0gdGhpcy5uYW1lIHx8IG5hbWUgaW4gZm91bmRQcm9wZXJ0aWVzKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgICAgICBmb3VuZFByb3BlcnRpZXNbbmFtZV0gPSB0cnVlOwor
CisgICAgICAgICAgICBpZiAodGhpcy5jb21wdXRlZFN0eWxlKQorICAgICAgICAgICAgICAgIHZh
ciBpbmhlcml0ZWQgPSAodGhpcy50cmVlT3V0bGluZS5zZWN0aW9uLnVzZWRQcm9wZXJ0aWVzICYm
ICEobmFtZSBpbiB0aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24udXNlZFByb3BlcnRpZXMpKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB2YXIgb3ZlcmxvYWRlZCA9IChuYW1lIGlu
IHRoaXMudHJlZU91dGxpbmUuc2VjdGlvbi5vdmVybG9hZGVkUHJvcGVydGllcyk7CisKKyAgICAg
ICAgICAgIHZhciBpdGVtID0gbmV3IFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1l
bnQodGhpcy5zdHlsZSwgbmFtZSwgdGhpcy5jb21wdXRlZFN0eWxlLCBmYWxzZSwgKGluaGVyaXRl
ZCB8fCBvdmVybG9hZGVkKSk7CisgICAgICAgICAgICB0aGlzLmluc2VydENoaWxkKGl0ZW0sIDAp
OworICAgICAgICB9CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVF
bGVtZW50LnByb3RvdHlwZS5fX3Byb3RvX18gPSBUcmVlRWxlbWVudC5wcm90b3R5cGU7CkluZGV4
OiBwYWdlL2luc3BlY3Rvci9pbnNwZWN0b3IuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdlL2luc3Bl
Y3Rvci9pbnNwZWN0b3IuaHRtbAkocmV2aXNpb24gMjczNzIpCisrKyBwYWdlL2luc3BlY3Rvci9p
bnNwZWN0b3IuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsOSBAQCBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPCiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiIHNyYz0iUmVzb3VyY2VDYXRlZ29yeS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlw
dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU2lkZWJhclBhbmUuanMiPjwvc2NyaXB0Pgog
ICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlByb3BlcnRpZXNTZWN0aW9u
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJN
ZXRyaWNzU2lkZWJhclBhbmUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0IiBzcmM9IlByb3BlcnRpZXNTaWRlYmFyUGFuZS5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU3R5bGVzU2lkZWJhclBhbmUuanMi
Pjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlBhbmVs
LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJS
ZXNvdXJjZVBhbmVsLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCIgc3JjPSJTb3VyY2VQYW5lbC5qcyI+PC9zY3JpcHQ+CkluZGV4OiBwYWdlL2luc3BlY3Rv
ci90cmVlb3V0bGluZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdlL2luc3BlY3Rvci90cmVlb3V0bGlu
ZS5qcwkocmV2aXNpb24gMjczNzIpCisrKyBwYWdlL2luc3BlY3Rvci90cmVlb3V0bGluZS5qcwko
d29ya2luZyBjb3B5KQpAQCAtMjc4LDggKzI3OCw4IEBAIFRyZWVPdXRsaW5lLnByb3RvdHlwZS5m
aW5kVHJlZUVsZW1lbnQgPSAKICAgICB9CiAKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFuY2Vz
dG9ycy5sZW5ndGg7ICsraSkgewotICAgICAgICBpdGVtID0gdGhpcy5maW5kVHJlZUVsZW1lbnQo
YW5jZXN0b3JzW2ldKTsKLSAgICAgICAgaWYgKGFuY2VzdG9yc1tpXSAhPT0gcmVwcmVzZW50ZWRP
YmplY3QgJiYgaXRlbS5vbnBvcHVsYXRlKQorICAgICAgICBpdGVtID0gdGhpcy5maW5kVHJlZUVs
ZW1lbnQoYW5jZXN0b3JzW2ldLCBpc0FuY2VzdG9yLCBnZXRQYXJlbnQpOworICAgICAgICBpZiAo
YW5jZXN0b3JzW2ldICE9PSByZXByZXNlbnRlZE9iamVjdCAmJiBpdGVtICYmIGl0ZW0ub25wb3B1
bGF0ZSkKICAgICAgICAgICAgIGl0ZW0ub25wb3B1bGF0ZShpdGVtKTsKICAgICB9CiAKQEAgLTM3
OCw3ICszNzgsNyBAQCBUcmVlT3V0bGluZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGRyZW5SZWN1CiBm
dW5jdGlvbiBUcmVlRWxlbWVudCh0aXRsZSwgcmVwcmVzZW50ZWRPYmplY3QsIGhhc0NoaWxkcmVu
KQogewogICAgIHRoaXMuX3RpdGxlID0gdGl0bGU7Ci0gICAgdGhpcy5yZXByZXNlbnRlZE9iamVj
dCA9IHJlcHJlc2VudGVkT2JqZWN0OworICAgIHRoaXMucmVwcmVzZW50ZWRPYmplY3QgPSAocmVw
cmVzZW50ZWRPYmplY3QgfHwge30pOwogCiAgICAgaWYgKHRoaXMucmVwcmVzZW50ZWRPYmplY3Qu
X190cmVlRWxlbWVudElkZW50aWZpZXIpCiAgICAgICAgIHRoaXMuaWRlbnRpZmllciA9IHRoaXMu
cmVwcmVzZW50ZWRPYmplY3QuX190cmVlRWxlbWVudElkZW50aWZpZXI7CkBAIC0zOTMsMTMgKzM5
Myw2IEBAIGZ1bmN0aW9uIFRyZWVFbGVtZW50KHRpdGxlLCByZXByZXNlbnRlZE8KICAgICB0aGlz
LnNlbGVjdGFibGUgPSB0cnVlOwogICAgIHRoaXMuaGFzQ2hpbGRyZW4gPSBoYXNDaGlsZHJlbjsK
ICAgICB0aGlzLmNoaWxkcmVuID0gW107Ci0gICAgdGhpcy5vbnBvcHVsYXRlID0gbnVsbDsKLSAg
ICB0aGlzLm9uZXhwYW5kID0gbnVsbDsKLSAgICB0aGlzLm9uY29sbGFwc2UgPSBudWxsOwotICAg
IHRoaXMub25yZXZlYWwgPSBudWxsOwotICAgIHRoaXMub25zZWxlY3QgPSBudWxsOwotICAgIHRo
aXMub25kZXNlbGVjdCA9IG51bGw7Ci0gICAgdGhpcy5vbmRibGNsaWNrID0gbnVsbDsKICAgICB0
aGlzLnRyZWVPdXRsaW5lID0gbnVsbDsKICAgICB0aGlzLnBhcmVudCA9IG51bGw7CiAgICAgdGhp
cy5wcmV2aW91c1NpYmxpbmcgPSBudWxsOwo=
</data>
<flag name="review"
          id="7244"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>