<?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>54385</bug_id>
          
          <creation_ts>2011-02-14 03:25:32 -0800</creation_ts>
          <short_desc>Web Inspector: [Chromium] Landing detailed heap snapshots, part 3</short_desc>
          <delta_ts>2011-03-02 02:21:46 -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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>50510</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mikhail Naganov">mnaganov</reporter>
          <assigned_to name="Mikhail Naganov">mnaganov</assigned_to>
          <cc>abarth</cc>
    
    <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>eric</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>350576</commentid>
    <comment_count>0</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-02-14 03:25:32 -0800</bug_when>
    <thetext>Provide node classes for data grid views:
 - summary -- list of objects by constuctor;
 - diff -- summaries btw two snapshots;
 - explorer -- explore heap graph;
 - dominator tree;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350579</commentid>
    <comment_count>1</comment_count>
      <attachid>82301</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-02-14 03:28:47 -0800</bug_when>
    <thetext>Created attachment 82301
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350702</commentid>
    <comment_count>2</comment_count>
      <attachid>82301</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-14 09:22:44 -0800</bug_when>
    <thetext>Comment on attachment 82301
patch

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

&gt; Source/WebCore/inspector/front-end/DetailedHeapshotGridNodes.js:34
&gt; +    this.defaultPopulateCount = populateCount;

_defaultPopulateCount

&gt; Source/WebCore/inspector/front-end/DetailedHeapshotGridNodes.js:35
&gt; +    this.provider = null;

this._provider

&gt; Source/WebCore/inspector/front-end/DetailedHeapshotGridNodes.js:53
&gt; +            this.provider.sort(this.comparator());

{ on the next line.

&gt; Source/WebCore/inspector/front-end/DetailedHeapshotGridNodes.js:325
&gt; +    this.isDeletedNode = !!baseSnapshot;

Should be private

&gt; Source/WebCore/inspector/front-end/DetailedHeapshotGridNodes.js:399
&gt; +    this.name = constructor;

Make thing private.

&gt; Source/WebCore/inspector/front-end/DetailedHeapshotGridNodes.js:476
&gt; +    this.it1 = it1;

Make things private please.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350745</commentid>
    <comment_count>3</comment_count>
      <attachid>82301</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-02-14 10:26:00 -0800</bug_when>
    <thetext>Comment on attachment 82301
patch

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

&gt;&gt; Source/WebCore/inspector/front-end/DetailedHeapshotGridNodes.js:34
&gt;&gt; +    this.defaultPopulateCount = populateCount;
&gt; 
&gt; _defaultPopulateCount

Done.

&gt;&gt; Source/WebCore/inspector/front-end/DetailedHeapshotGridNodes.js:35
&gt;&gt; +    this.provider = null;
&gt; 
&gt; this._provider

Done.

&gt;&gt; Source/WebCore/inspector/front-end/DetailedHeapshotGridNodes.js:53
&gt;&gt; +            this.provider.sort(this.comparator());
&gt; 
&gt; { on the next line.

Done.

&gt;&gt; Source/WebCore/inspector/front-end/DetailedHeapshotGridNodes.js:325
&gt;&gt; +    this.isDeletedNode = !!baseSnapshot;
&gt; 
&gt; Should be private

Done.

&gt;&gt; Source/WebCore/inspector/front-end/DetailedHeapshotGridNodes.js:399
&gt;&gt; +    this.name = constructor;
&gt; 
&gt; Make thing private.

Done.

&gt;&gt; Source/WebCore/inspector/front-end/DetailedHeapshotGridNodes.js:476
&gt;&gt; +    this.it1 = it1;
&gt; 
&gt; Make things private please.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350747</commentid>
    <comment_count>4</comment_count>
      <attachid>82332</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-02-14 10:27:52 -0800</bug_when>
    <thetext>Created attachment 82332
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352003</commentid>
    <comment_count>5</comment_count>
      <attachid>82332</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-16 05:42:00 -0800</bug_when>
    <thetext>Comment on attachment 82332
patch

I am concerned with the amount of the code you are adding. We already show up for too long. Could you please make your code for profiler panel reside in an iframe and load on demand?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352009</commentid>
    <comment_count>6</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-02-16 05:51:43 -0800</bug_when>
    <thetext>@pfeldman: OK. I will move it to an iframe.

Manually committed http://trac.webkit.org/changeset/78700


2011-02-14  Mikhail Naganov  &lt;mnaganov@chromium.org&gt;

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Landing detailed heap snapshots, part 3.
        https://bugs.webkit.org/show_bug.cgi?id=54385

        Provide node classes for data grid views:
         - summary -- list of objects by constuctor;
         - diff -- summaries btw two snapshots;
         - explorer -- explore heap graph;
         - dominators tree;

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/DetailedHeapshotGridNodes.js: Added.
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotFilteredOrderedIterator):
        (WebInspector.HeapSnapshotFilteredOrderedIterator.prototype.incInstancesCount):
        (WebInspector.HeapSnapshotFilteredOrderedIterator.prototype.get instancesCount):
        (WebInspector.HeapSnapshotFilteredOrderedIterator.prototype.next):
        (WebInspector.HeapSnapshotFilteredOrderedIterator.prototype.resetInstancesCount):
        (WebInspector.HeapSnapshotEdgesProvider):
        (WebInspector.HeapSnapshotNodesProvider):
        * inspector/front-end/PleaseWaitMessage.js:
        (WebInspector.PleaseWaitMessage.prototype.get instance):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352167</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-16 10:20:29 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/78700 might have broken GTK Linux 32-bit Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82301</attachid>
            <date>2011-02-14 03:28:47 -0800</date>
            <delta_ts>2011-02-14 10:27:52 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch-54385</filename>
            <type>text/plain</type>
            <size>34825</size>
            <attacher name="Mikhail Naganov">mnaganov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwNDBjYmUzLi41NTVlM2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIg
QEAKKzIwMTEtMDItMTQgIE1pa2hhaWwgTmFnYW5vdiAgPG1uYWdhbm92QGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBbQ2hyb21pdW1dIExhbmRpbmcgZGV0YWlsZWQgaGVhcCBzbmFwc2hvdHMsIHBhcnQg
My4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0Mzg1
CisKKyAgICAgICAgUHJvdmlkZSBub2RlIGNsYXNzZXMgZm9yIGRhdGEgZ3JpZCB2aWV3czoKKyAg
ICAgICAgIC0gc3VtbWFyeSAtLSBsaXN0IG9mIG9iamVjdHMgYnkgY29uc3R1Y3RvcjsKKyAgICAg
ICAgIC0gZGlmZiAtLSBzdW1tYXJpZXMgYnR3IHR3byBzbmFwc2hvdHM7CisgICAgICAgICAtIGV4
cGxvcmVyIC0tIGV4cGxvcmUgaGVhcCBncmFwaDsKKyAgICAgICAgIC0gZG9taW5hdG9ycyB0cmVl
OworCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRGV0YWlsZWRIZWFw
c2hvdEdyaWROb2Rlcy5qczogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9I
ZWFwU25hcHNob3QuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RmlsdGVy
ZWRPcmRlcmVkSXRlcmF0b3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEZp
bHRlcmVkT3JkZXJlZEl0ZXJhdG9yLnByb3RvdHlwZS5pbmNJbnN0YW5jZXNDb3VudCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RmlsdGVyZWRPcmRlcmVkSXRlcmF0b3IucHJv
dG90eXBlLmdldCBpbnN0YW5jZXNDb3VudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90RmlsdGVyZWRPcmRlcmVkSXRlcmF0b3IucHJvdG90eXBlLm5leHQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEZpbHRlcmVkT3JkZXJlZEl0ZXJhdG9yLnByb3RvdHlw
ZS5yZXNldEluc3RhbmNlc0NvdW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RFZGdlc1Byb3ZpZGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2Rl
c1Byb3ZpZGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1BsZWFzZVdhaXRNZXNz
YWdlLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlBsZWFzZVdhaXRNZXNzYWdlLnByb3RvdHlw
ZS5nZXQgaW5zdGFuY2UpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFy
YzoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sOgorCiAyMDEx
LTAyLTEzICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYW4gQmVybnN0ZWluLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGViODAxNmMuLmUyN2Vj
MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTQ2ODIsNiArNDY4Miw3IEBACiAgICAgICAgICAgICAn
aW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhYmFzZVRhYmxlVmlldy5qcycsCiAgICAgICAgICAgICAn
aW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhR3JpZC5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9y
L2Zyb250LWVuZC9EZWJ1Z2dlck1vZGVsLmpzJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvZnJv
bnQtZW5kL0RldGFpbGVkSGVhcHNob3RHcmlkTm9kZXMuanMnLAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9mcm9udC1lbmQvRGV0YWlsZWRIZWFwc2hvdFZpZXcuanMnLAogICAgICAgICAgICAgJ2lu
c3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9m
cm9udC1lbmQvRE9NU3RvcmFnZS5qcycsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCmluZGV4IDJhOGYzNDAuLmJkYTdhMjUgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC02NTg0OSw2ICs2NTg0OSwxMCBA
QAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
aW5zcGVjdG9yXGZyb250LWVuZFxEZXRhaWxlZEhlYXBzaG90R3JpZE5vZGVzLmpzIgorCQkJCQk+
CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9y
XGZyb250LWVuZFxEZXRhaWxlZEhlYXBzaG90Vmlldy5qcyIKIAkJCQkJPgogCQkJCTwvRmlsZT4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGV0YWlsZWRI
ZWFwc2hvdEdyaWROb2Rlcy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
RGV0YWlsZWRIZWFwc2hvdEdyaWROb2Rlcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5jMGZmMTgzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9EZXRhaWxlZEhlYXBzaG90R3JpZE5vZGVzLmpzCkBAIC0wLDAgKzEsNjk0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdyaWROb2RlID0gZnVuY3Rpb24odHJlZSwgaGFz
Q2hpbGRyZW4sIHBvcHVsYXRlQ291bnQpCit7CisgICAgV2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9k
ZS5jYWxsKHRoaXMsIG51bGwsIGhhc0NoaWxkcmVuKTsKKyAgICB0aGlzLmRlZmF1bHRQb3B1bGF0
ZUNvdW50ID0gcG9wdWxhdGVDb3VudDsKKyAgICB0aGlzLnByb3ZpZGVyID0gbnVsbDsKKyAgICB0
aGlzLmFkZEV2ZW50TGlzdGVuZXIoInBvcHVsYXRlIiwgdGhpcy5fcG9wdWxhdGUsIHRoaXMpOwor
fQorCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R3JpZE5vZGUucHJvdG90eXBlID0geworICAg
IGNyZWF0ZUNlbGw6IGZ1bmN0aW9uKGNvbHVtbklkZW50aWZpZXIpCisgICAgeworICAgICAgICB2
YXIgY2VsbCA9IFdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGUucHJvdG90eXBlLmNyZWF0ZUNlbGwu
Y2FsbCh0aGlzLCBjb2x1bW5JZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKHRoaXMuX3NlYXJjaE1h
dGNoZWQpCisgICAgICAgICAgICBjZWxsLmFkZFN0eWxlQ2xhc3MoImhpZ2hsaWdodCIpOworICAg
ICAgICByZXR1cm4gY2VsbDsKKyAgICB9LAorCisgICAgX3BvcHVsYXRlOiBmdW5jdGlvbihldmVu
dCkKKyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5QbGVhc2VXYWl0TWVzc2FnZS5wcm90b3R5
cGUuc3RhcnRBY3Rpb24odGhpcy5kYXRhR3JpZC5lbGVtZW50LCBkb1BvcHVsYXRlLmJpbmQodGhp
cykpOworCisgICAgICAgIGZ1bmN0aW9uIGRvUG9wdWxhdGUoKSB7CisgICAgICAgICAgICB0aGlz
LnByb3ZpZGVyLnNvcnQodGhpcy5jb21wYXJhdG9yKCkpOworICAgICAgICAgICAgdGhpcy5wcm92
aWRlci5maXJzdCgpOworICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZUNoaWxkcmVuKCk7CisgICAg
ICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvcHVsYXRlIiwgdGhpcy5fcG9wdWxh
dGUsIHRoaXMpOworICAgICAgICB9CisgICAgfSwKKworICAgIHBvcHVsYXRlQ2hpbGRyZW46IGZ1
bmN0aW9uKHByb3ZpZGVyLCBob3dNYW55LCBhdEluZGV4KQorICAgIHsKKyAgICAgICAgaWYgKCFo
b3dNYW55ICYmIHByb3ZpZGVyKSB7CisgICAgICAgICAgICBob3dNYW55ID0gcHJvdmlkZXIuaW5z
dGFuY2VzQ291bnQ7CisgICAgICAgICAgICBwcm92aWRlci5yZXNldEluc3RhbmNlc0NvdW50KCk7
CisgICAgICAgIH0KKyAgICAgICAgcHJvdmlkZXIgPSBwcm92aWRlciB8fCB0aGlzLnByb3ZpZGVy
OworICAgICAgICBob3dNYW55ID0gaG93TWFueSB8fCB0aGlzLmRlZmF1bHRQb3B1bGF0ZUNvdW50
OworICAgICAgICBhdEluZGV4ID0gYXRJbmRleCB8fCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsKKyAg
ICAgICAgdmFyIGhhdmVTYXZlZENoaWxkcmVuID0gISF0aGlzLl9zYXZlZENoaWxkcmVuOworICAg
ICAgICBpZiAoaGF2ZVNhdmVkQ2hpbGRyZW4pIHsKKyAgICAgICAgICAgIGhhdmVTYXZlZENoaWxk
cmVuID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKHZhciBjIGluIHRoaXMuX3NhdmVkQ2hpbGRy
ZW4pIHsKKyAgICAgICAgICAgICAgICBoYXZlU2F2ZWRDaGlsZHJlbiA9IHRydWU7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yICgg
OyBob3dNYW55ID4gMCAmJiBwcm92aWRlci5oYXNOZXh0KCk7IHByb3ZpZGVyLm5leHQoKSwgcHJv
dmlkZXIuaW5jSW5zdGFuY2VzQ291bnQoKSwgLS1ob3dNYW55KSB7CisgICAgICAgICAgICB2YXIg
aXRlbSA9IHByb3ZpZGVyLml0ZW07CisgICAgICAgICAgICBpZiAoaGF2ZVNhdmVkQ2hpbGRyZW4p
IHsKKyAgICAgICAgICAgICAgICB2YXIgaGFzaCA9IHRoaXMuY2hpbGRIYXNoRm9yRW50aXR5KGl0
ZW0pOworICAgICAgICAgICAgICAgIGlmIChoYXNoIGluIHRoaXMuX3NhdmVkQ2hpbGRyZW4pIHsK
KyAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRDaGlsZCh0aGlzLl9zYXZlZENoaWxkcmVu
W2hhc2hdLCBhdEluZGV4KyspOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLmluc2VydENoaWxk
KHRoaXMuY3JlYXRlQ2hpbGROb2RlKHByb3ZpZGVyKSwgYXRJbmRleCsrKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAocHJvdmlkZXIuaGFzTmV4dCgpKQorICAgICAgICAgICAgdGhpcy5pbnNlcnRD
aGlsZChuZXcgV2ViSW5zcGVjdG9yLlNob3dNb3JlRGF0YUdyaWROb2RlKHRoaXMucG9wdWxhdGVD
aGlsZHJlbi5iaW5kKHRoaXMsIHByb3ZpZGVyKSwgdGhpcy5kZWZhdWx0UG9wdWxhdGVDb3VudCwg
cHJvdmlkZXIubGVuZ3RoKSwgYXRJbmRleCsrKTsKKyAgICB9LAorCisgICAgX3NhdmVDaGlsZHJl
bjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fc2F2ZWRDaGlsZHJlbiA9IHt9Owor
ICAgICAgICBmb3IgKHZhciBpID0gMCwgY2hpbGRyZW5Db3VudCA9IHRoaXMuY2hpbGRyZW4ubGVu
Z3RoOyBpIDwgY2hpbGRyZW5Db3VudDsgKytpKSB7CisgICAgICAgICAgICB2YXIgY2hpbGQgPSB0
aGlzLmNoaWxkcmVuW2ldOworICAgICAgICAgICAgaWYgKGNoaWxkLmV4cGFuZGVkKQorICAgICAg
ICAgICAgICAgIHRoaXMuX3NhdmVkQ2hpbGRyZW5bdGhpcy5jaGlsZEhhc2hGb3JOb2RlKGNoaWxk
KV0gPSBjaGlsZDsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBzb3J0OiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICB2YXIgY29tcGFyYXRvciA9IHRoaXMuY29tcGFyYXRvcigpOworICAgICAg
ICBXZWJJbnNwZWN0b3IuUGxlYXNlV2FpdE1lc3NhZ2UucHJvdG90eXBlLnN0YXJ0QWN0aW9uKHRo
aXMuZGF0YUdyaWQuZWxlbWVudCwgZG9Tb3J0LmJpbmQodGhpcykpOworCisgICAgICAgIGZ1bmN0
aW9uIGRvU29ydCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5wcm92aWRlci5z
b3J0KGNvbXBhcmF0b3IpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHRo
aXMuX3NhdmVDaGlsZHJlbigpOworICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZHJlbigpOwor
ICAgICAgICAgICAgdGhpcy5wcm92aWRlci5maXJzdCgpOworICAgICAgICAgICAgdGhpcy5wb3B1
bGF0ZUNoaWxkcmVuKHRoaXMucHJvdmlkZXIpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAs
IGwgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7ICsraSkgeworICAgICAgICAgICAgICAg
IHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07CisgICAgICAgICAgICAgICAgaWYgKGNoaWxk
LmV4cGFuZGVkKQorICAgICAgICAgICAgICAgICAgICBjaGlsZC5zb3J0KCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9Cit9OworCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R3Jp
ZE5vZGUucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5EYXRhR3JpZE5vZGUucHJv
dG90eXBlOworCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R2VuZXJpY09iamVjdE5vZGUgPSBm
dW5jdGlvbih0cmVlLCBub2RlLCBoYXNDaGlsZHJlbiwgcG9wdWxhdGVDb3VudCkKK3sKKyAgICBX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R3JpZE5vZGUuY2FsbCh0aGlzLCB0cmVlLCBoYXNDaGls
ZHJlbiwgcG9wdWxhdGVDb3VudCk7CisgICAgdGhpcy5uYW1lID0gbm9kZS5uYW1lOworICAgIHRo
aXMudHlwZSA9IG5vZGUudHlwZTsKKyAgICB0aGlzLnNoYWxsb3dTaXplID0gbm9kZS5zZWxmU2l6
ZTsKKyAgICB0aGlzLnJldGFpbmVkU2l6ZSA9IG5vZGUucmV0YWluZWRTaXplOworICAgIHRoaXMu
cmV0YWluZWRTaXplRXhhY3QgPSB0aGlzLnNoYWxsb3dTaXplID09PSB0aGlzLnJldGFpbmVkU2l6
ZTsKKyAgICB0aGlzLnNuYXBzaG90Tm9kZUlkID0gbm9kZS5pZDsKKyAgICB0aGlzLnNuYXBzaG90
Tm9kZUluZGV4ID0gbm9kZS5ub2RlSW5kZXg7Cit9OworCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90R2VuZXJpY09iamVjdE5vZGUucHJvdG90eXBlID0geworICAgIGNyZWF0ZUNlbGw6IGZ1bmN0
aW9uKGNvbHVtbklkZW50aWZpZXIpCisgICAgeworICAgICAgICB2YXIgY2VsbCA9IGNvbHVtbklk
ZW50aWZpZXIgIT09ICJvYmplY3QiID8gV2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZS5wcm90b3R5
cGUuY3JlYXRlQ2VsbC5jYWxsKHRoaXMsIGNvbHVtbklkZW50aWZpZXIpIDogdGhpcy5fY3JlYXRl
T2JqZWN0Q2VsbCgpOworICAgICAgICBpZiAodGhpcy5fc2VhcmNoTWF0Y2hlZCkKKyAgICAgICAg
ICAgIGNlbGwuYWRkU3R5bGVDbGFzcygiaGlnaGxpZ2h0Iik7CisgICAgICAgIHJldHVybiBjZWxs
OworICAgIH0sCisKKyAgICBfY3JlYXRlT2JqZWN0Q2VsbDogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgdmFyIGNlbGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOworICAgICAgICBj
ZWxsLmNsYXNzTmFtZSA9ICJvYmplY3QtY29sdW1uIjsKKyAgICAgICAgdmFyIGRpdiA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICBkaXYuY2xhc3NOYW1lID0gInNvdXJj
ZS1jb2RlIGV2ZW50LXByb3BlcnRpZXMiOworICAgICAgICBkaXYuc3R5bGUub3ZlcmZsb3cgPSAi
aGlkZGVuIjsKKyAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmRhdGFbIm9iamVjdCJdOworICAgICAg
ICBpZiAodGhpcy5wcmVmaXhPYmplY3RDZWxsKQorICAgICAgICAgICAgdGhpcy5wcmVmaXhPYmpl
Y3RDZWxsKGRpdiwgZGF0YSk7CisgICAgICAgIHZhciB2YWx1ZVNwYW4gPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgIHZhbHVlU3Bhbi5jbGFzc05hbWUgPSAidmFsdWUg
Y29uc29sZS1mb3JtYXR0ZWQtIiArIGRhdGEudmFsdWVTdHlsZTsKKyAgICAgICAgdmFsdWVTcGFu
LnRleHRDb250ZW50ID0gZGF0YS52YWx1ZTsKKyAgICAgICAgZGl2LmFwcGVuZENoaWxkKHZhbHVl
U3Bhbik7CisgICAgICAgIGNlbGwuYXBwZW5kQ2hpbGQoZGl2KTsKKyAgICAgICAgY2VsbC5hZGRT
dHlsZUNsYXNzKCJkaXNjbG9zdXJlIik7CisgICAgICAgIGlmICh0aGlzLmRlcHRoKQorICAgICAg
ICAgICAgY2VsbC5zdHlsZS5zZXRQcm9wZXJ0eSgicGFkZGluZy1sZWZ0IiwgKHRoaXMuZGVwdGgg
KiB0aGlzLmRhdGFHcmlkLmluZGVudFdpZHRoKSArICJweCIpOworICAgICAgICByZXR1cm4gY2Vs
bDsKKyAgICB9LAorCisgICAgZ2V0IGNvdW50UGVyY2VudCgpCisgICAgeworICAgICAgICByZXR1
cm4gdGhpcy5jb3VudCAvIHRoaXMudHJlZS5zbmFwc2hvdC5ub2Rlc0NvdW50ICogMTAwLjA7Cisg
ICAgfSwKKworICAgIGdldCBkYXRhKCkKKyAgICB7CisgICAgICAgIHZhciBkYXRhID0gdGhpcy5l
bXB0eURhdGEoKTsKKworICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLm5hbWU7CisgICAgICAgIHZh
ciB2YWx1ZVN0eWxlID0gIm9iamVjdCI7CisgICAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7Cisg
ICAgICAgIGNhc2UgInN0cmluZyI6CisgICAgICAgICAgICB2YWx1ZSA9ICJcIiIgKyB2YWx1ZSAr
ICJcIiI7CisgICAgICAgICAgICB2YWx1ZVN0eWxlID0gInN0cmluZyI7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAicmVnZXhwIjoKKyAgICAgICAgICAgIHZhbHVlID0gIi8iICsg
dmFsdWUgKyAiLyI7CisgICAgICAgICAgICB2YWx1ZVN0eWxlID0gInN0cmluZyI7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiY2xvc3VyZSI6CisgICAgICAgICAgICB2YWx1ZSA9
ICJmdW5jdGlvbiAiICsgdmFsdWUgKyAiKCkiOworICAgICAgICAgICAgdmFsdWVTdHlsZSA9ICJm
dW5jdGlvbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAibnVtYmVyIjoKKyAg
ICAgICAgICAgIHZhbHVlU3R5bGUgPSAibnVtYmVyIjsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlICJoaWRkZW4iOgorICAgICAgICAgICAgdmFsdWVTdHlsZSA9ICJudWxsIjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJhcnJheSI6CisgICAgICAgICAgICB2YWx1
ZSArPSAiW10iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH07CisgICAgICAgIGRhdGFb
Im9iamVjdCJdID0geyB2YWx1ZVN0eWxlOiB2YWx1ZVN0eWxlLCB2YWx1ZTogdmFsdWUgKyAiIEAi
ICsgdGhpcy5zbmFwc2hvdE5vZGVJZCB9OworCisgICAgICAgIHZhciB2aWV3ID0gdGhpcy5kYXRh
R3JpZC5zbmFwc2hvdFZpZXc7CisgICAgICAgIGRhdGFbInNoYWxsb3dTaXplIl0gPSB2aWV3LnNo
b3dTaGFsbG93U2l6ZUFzUGVyY2VudCA/IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJS4yZiUlIiwg
dGhpcy5zaGFsbG93U2l6ZVBlcmNlbnQpIDogTnVtYmVyLmJ5dGVzVG9TdHJpbmcodGhpcy5zaGFs
bG93U2l6ZSk7CisgICAgICAgIGRhdGFbInJldGFpbmVkU2l6ZSJdID0gKHRoaXMucmV0YWluZWRT
aXplRXhhY3QgPyAiIiA6ICJcdTIyNDgiKSArICh2aWV3LnNob3dSZXRhaW5lZFNpemVBc1BlcmNl
bnQgPyBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiUuMmYlJSIsIHRoaXMucmV0YWluZWRTaXplUGVy
Y2VudCkgOiBOdW1iZXIuYnl0ZXNUb1N0cmluZyh0aGlzLnJldGFpbmVkU2l6ZSkpOworCisgICAg
ICAgIHJldHVybiB0aGlzLmVuaGFuY2VEYXRhID8gdGhpcy5lbmhhbmNlRGF0YShkYXRhKSA6IGRh
dGE7CisgICAgfSwKKworICAgIHNldCBleGFjdFJldGFpbmVkU2l6ZShzaXplKQorICAgIHsKKyAg
ICAgICAgdGhpcy5yZXRhaW5lZFNpemUgPSBzaXplOworICAgICAgICB0aGlzLnJldGFpbmVkU2l6
ZUV4YWN0ID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5yZWZyZXNoKCk7CisgICAgfSwKKworICAgIGdl
dCByZXRhaW5lZFNpemVQZXJjZW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLnJldGFp
bmVkU2l6ZSAvIHRoaXMuZGF0YUdyaWQuc25hcHNob3QudG90YWxTaXplICogMTAwLjA7CisgICAg
fSwKKworICAgIGdldCBzaGFsbG93U2l6ZVBlcmNlbnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuc2hhbGxvd1NpemUgLyB0aGlzLmRhdGFHcmlkLnNuYXBzaG90LnRvdGFsU2l6ZSAqIDEw
MC4wOworICAgIH0KK30KKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVyaWNPYmplY3RO
b2RlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R3JpZE5v
ZGUucHJvdG90eXBlOworCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90T2JqZWN0Tm9kZSA9IGZ1
bmN0aW9uKHRyZWUsIGVkZ2UpCit7CisgICAgdmFyIG5vZGUgPSBlZGdlLm5vZGU7CisgICAgdmFy
IHByb3ZpZGVyID0gdGhpcy5fY3JlYXRlRWRnZXNQcm92aWRlcih0cmVlLnNuYXBzaG90LCBub2Rl
LnJhd0VkZ2VzKTsKKyAgICBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R2VuZXJpY09iamVjdE5v
ZGUuY2FsbCh0aGlzLCB0cmVlLCBub2RlLCAhcHJvdmlkZXIuaXNFbXB0eSwgMTAwKTsKKyAgICB0
aGlzLnJlZmVyZW5jZU5hbWUgPSBlZGdlLm5hbWU7CisgICAgdGhpcy5yZWZlcmVuY2VUeXBlID0g
ZWRnZS50eXBlOworICAgIHRoaXMucHJvdmlkZXIgPSBwcm92aWRlcjsKK30KKworV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdE9iamVjdE5vZGUucHJvdG90eXBlID0geworICAgIGNyZWF0ZUNoaWxk
Tm9kZTogZnVuY3Rpb24ocHJvdmlkZXIpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RPYmplY3ROb2RlKHRoaXMuZGF0YUdyaWQsIHByb3ZpZGVyLml0
ZW0pOworICAgIH0sCisKKyAgICBfY3JlYXRlRWRnZXNQcm92aWRlcjogZnVuY3Rpb24oc25hcHNo
b3QsIHJhd0VkZ2VzKQorICAgIHsKKyAgICAgICAgdmFyIHNob3dIaWRkZW5EYXRhID0gV2ViSW5z
cGVjdG9yLkRldGFpbGVkSGVhcHNob3RWaWV3LnByb3RvdHlwZS5zaG93SGlkZGVuRGF0YTsKKyAg
ICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZXNQcm92aWRlcigK
KyAgICAgICAgICAgIHNuYXBzaG90LAorICAgICAgICAgICAgcmF3RWRnZXMsCisgICAgICAgICAg
ICBmdW5jdGlvbihlZGdlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICFlZGdlLmlzSW52aXNp
YmxlCisgICAgICAgICAgICAgICAgICAgICYmIChzaG93SGlkZGVuRGF0YSB8fCAoIWVkZ2UuaXNI
aWRkZW4gJiYgIWVkZ2Uubm9kZS5pc0hpZGRlbikpOworICAgICAgICAgICAgfSk7CisgICAgfSwK
KworICAgIGNoaWxkSGFzaEZvckVudGl0eTogZnVuY3Rpb24oZWRnZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBlZGdlLnR5cGUgKyAiIyIgKyBlZGdlLm5hbWU7CisgICAgfSwKKworICAgIGNoaWxk
SGFzaEZvck5vZGU6IGZ1bmN0aW9uKGNoaWxkTm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBj
aGlsZE5vZGUucmVmZXJlbmNlVHlwZSArICIjIiArIGNoaWxkTm9kZS5yZWZlcmVuY2VOYW1lOwor
ICAgIH0sCisKKyAgICBjb21wYXJhdG9yOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIg
c29ydEFzY2VuZGluZyA9IHRoaXMuZGF0YUdyaWQuc29ydE9yZGVyID09PSAiYXNjZW5kaW5nIjsK
KyAgICAgICAgdmFyIHNvcnRDb2x1bW5JZGVudGlmaWVyID0gdGhpcy5kYXRhR3JpZC5zb3J0Q29s
dW1uSWRlbnRpZmllcjsKKyAgICAgICAgdmFyIHNvcnRGaWVsZHMgPSB7CisgICAgICAgICAgICBv
YmplY3Q6IFsiIWVkZ2VOYW1lIiwgc29ydEFzY2VuZGluZywgInJldGFpbmVkU2l6ZSIsIGZhbHNl
XSwKKyAgICAgICAgICAgIGNvdW50OiBbIiFlZGdlTmFtZSIsIHRydWUsICJyZXRhaW5lZFNpemUi
LCBmYWxzZV0sCisgICAgICAgICAgICBzaGFsbG93U2l6ZTogWyJzZWxmU2l6ZSIsIHNvcnRBc2Nl
bmRpbmcsICIhZWRnZU5hbWUiLCB0cnVlXSwKKyAgICAgICAgICAgIHJldGFpbmVkU2l6ZTogWyJy
ZXRhaW5lZFNpemUiLCBzb3J0QXNjZW5kaW5nLCAiIWVkZ2VOYW1lIiwgdHJ1ZV0KKyAgICAgICAg
fVtzb3J0Q29sdW1uSWRlbnRpZmllcl0gfHwgWyIhZWRnZU5hbWUiLCB0cnVlLCAicmV0YWluZWRT
aXplIiwgZmFsc2VdOworICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEZp
bHRlcmVkT3JkZXJlZEl0ZXJhdG9yLnByb3RvdHlwZS5jcmVhdGVDb21wYXJhdG9yKHNvcnRGaWVs
ZHMpOworICAgIH0sCisKKyAgICBlbXB0eURhdGE6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IHJldHVybiB7Y291bnQ6IiIsIGFkZGVkQ291bnQ6ICIiLCByZW1vdmVkQ291bnQ6ICIiLCBjb3Vu
dERlbHRhOiIiLCBhZGRlZFNpemU6ICIiLCByZW1vdmVkU2l6ZTogIiIsIHNpemVEZWx0YTogIiJ9
OworICAgIH0sCisKKyAgICBlbmhhbmNlRGF0YTogZnVuY3Rpb24oZGF0YSkKKyAgICB7CisgICAg
ICAgIHZhciBuYW1lID0gdGhpcy5yZWZlcmVuY2VOYW1lOworICAgICAgICBpZiAobmFtZSA9PT0g
IiIpIG5hbWUgPSAiKGVtcHR5KSI7CisgICAgICAgIHZhciBuYW1lQ2xhc3MgPSAibmFtZSI7Cisg
ICAgICAgIHN3aXRjaCAodGhpcy5yZWZlcmVuY2VUeXBlKSB7CisgICAgICAgIGNhc2UgImNvbnRl
eHQiOgorICAgICAgICAgICAgbmFtZUNsYXNzID0gImNvbnNvbGUtZm9ybWF0dGVkLW51bWJlciI7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiaW50ZXJuYWwiOgorICAgICAgICBj
YXNlICJoaWRkZW4iOgorICAgICAgICAgICAgbmFtZUNsYXNzID0gImNvbnNvbGUtZm9ybWF0dGVk
LW51bGwiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGF0YVsib2Jq
ZWN0Il0ubmFtZUNsYXNzID0gbmFtZUNsYXNzOworICAgICAgICBkYXRhWyJvYmplY3QiXS5uYW1l
ID0gbmFtZTsKKyAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgfSwKKworICAgIHByZWZpeE9iamVj
dENlbGw6IGZ1bmN0aW9uKGRpdiwgZGF0YSkKKyAgICB7CisgICAgICAgIHZhciBuYW1lU3BhbiA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAgICAgbmFtZVNwYW4uY2xhc3NO
YW1lID0gZGF0YS5uYW1lQ2xhc3M7CisgICAgICAgIG5hbWVTcGFuLnRleHRDb250ZW50ID0gZGF0
YS5uYW1lOworICAgICAgICB2YXIgc2VwYXJhdG9yU3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoInNwYW4iKTsKKyAgICAgICAgc2VwYXJhdG9yU3Bhbi5jbGFzc05hbWUgPSAic2VwYXJhdG9y
IjsKKyAgICAgICAgc2VwYXJhdG9yU3Bhbi50ZXh0Q29udGVudCA9ICI6ICI7CisgICAgICAgIGRp
di5hcHBlbmRDaGlsZChuYW1lU3Bhbik7CisgICAgICAgIGRpdi5hcHBlbmRDaGlsZChzZXBhcmF0
b3JTcGFuKTsKKyAgICB9Cit9CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RPYmplY3ROb2Rl
LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R2VuZXJpY09i
amVjdE5vZGUucHJvdG90eXBlOworCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90SW5zdGFuY2VO
b2RlID0gZnVuY3Rpb24odHJlZSwgYmFzZVNuYXBzaG90LCBzbmFwc2hvdCwgbm9kZSkKK3sKKyAg
ICB2YXIgcHJvdmlkZXIgPSB0aGlzLl9jcmVhdGVFZGdlc1Byb3ZpZGVyKGJhc2VTbmFwc2hvdCB8
fCBzbmFwc2hvdCwgbm9kZS5yYXdFZGdlcyk7ICAKKyAgICBXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90R2VuZXJpY09iamVjdE5vZGUuY2FsbCh0aGlzLCB0cmVlLCBub2RlLCAhcHJvdmlkZXIuaXNF
bXB0eSwgMTAwKTsKKyAgICB0aGlzLmlzRGVsZXRlZE5vZGUgPSAhIWJhc2VTbmFwc2hvdDsKKyAg
ICB0aGlzLnByb3ZpZGVyID0gcHJvdmlkZXI7ICAgIAorfTsKKworV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdEluc3RhbmNlTm9kZS5wcm90b3R5cGUgPSB7CisgICAgY3JlYXRlQ2hpbGROb2RlOiBm
dW5jdGlvbihwcm92aWRlcikKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdE9iamVjdE5vZGUodGhpcy5kYXRhR3JpZCwgcHJvdmlkZXIuaXRlbSk7Cisg
ICAgfSwKKworICAgIF9jcmVhdGVFZGdlc1Byb3ZpZGVyOiBmdW5jdGlvbihzbmFwc2hvdCwgcmF3
RWRnZXMpCisgICAgeworICAgICAgICB2YXIgc2hvd0hpZGRlbkRhdGEgPSBXZWJJbnNwZWN0b3Iu
RGV0YWlsZWRIZWFwc2hvdFZpZXcucHJvdG90eXBlLnNob3dIaWRkZW5EYXRhOworICAgICAgICBy
ZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlc1Byb3ZpZGVyKAorICAgICAg
ICAgICAgc25hcHNob3QsCisgICAgICAgICAgICByYXdFZGdlcywKKyAgICAgICAgICAgIGZ1bmN0
aW9uKGVkZ2UpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIWVkZ2UuaXNJbnZpc2libGUKKyAg
ICAgICAgICAgICAgICAgICAgJiYgKHNob3dIaWRkZW5EYXRhIHx8ICghZWRnZS5pc0hpZGRlbiAm
JiAhZWRnZS5ub2RlLmlzSGlkZGVuKSk7CisgICAgICAgICAgICB9KTsKKyAgICB9LAorCisgICAg
Y2hpbGRIYXNoRm9yRW50aXR5OiBmdW5jdGlvbihlZGdlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVkZ2UudHlwZSArICIjIiArIGVkZ2UubmFtZTsKKyAgICB9LAorCisgICAgY2hpbGRIYXNoRm9y
Tm9kZTogZnVuY3Rpb24oY2hpbGROb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNoaWxkTm9k
ZS5yZWZlcmVuY2VUeXBlICsgIiMiICsgY2hpbGROb2RlLnJlZmVyZW5jZU5hbWU7CisgICAgfSwK
KworICAgIGNvbXBhcmF0b3I6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBzb3J0QXNj
ZW5kaW5nID0gdGhpcy5kYXRhR3JpZC5zb3J0T3JkZXIgPT09ICJhc2NlbmRpbmciOworICAgICAg
ICB2YXIgc29ydENvbHVtbklkZW50aWZpZXIgPSB0aGlzLmRhdGFHcmlkLnNvcnRDb2x1bW5JZGVu
dGlmaWVyOworICAgICAgICB2YXIgc29ydEZpZWxkcyA9IHsKKyAgICAgICAgICAgIG9iamVjdDog
WyIhZWRnZU5hbWUiLCBzb3J0QXNjZW5kaW5nLCAicmV0YWluZWRTaXplIiwgZmFsc2VdLAorICAg
ICAgICAgICAgY291bnQ6IFsiIWVkZ2VOYW1lIiwgdHJ1ZSwgInJldGFpbmVkU2l6ZSIsIGZhbHNl
XSwKKyAgICAgICAgICAgIGFkZGVkU2l6ZTogWyJzZWxmU2l6ZSIsIHNvcnRBc2NlbmRpbmcsICIh
ZWRnZU5hbWUiLCB0cnVlXSwKKyAgICAgICAgICAgIHJlbW92ZWRTaXplOiBbInNlbGZTaXplIiwg
c29ydEFzY2VuZGluZywgIiFlZGdlTmFtZSIsIHRydWVdLAorICAgICAgICAgICAgc2hhbGxvd1Np
emU6IFsic2VsZlNpemUiLCBzb3J0QXNjZW5kaW5nLCAiIWVkZ2VOYW1lIiwgdHJ1ZV0sCisgICAg
ICAgICAgICByZXRhaW5lZFNpemU6IFsicmV0YWluZWRTaXplIiwgc29ydEFzY2VuZGluZywgIiFl
ZGdlTmFtZSIsIHRydWVdCisgICAgICAgIH1bc29ydENvbHVtbklkZW50aWZpZXJdIHx8IFsiIWVk
Z2VOYW1lIiwgdHJ1ZSwgInJldGFpbmVkU2l6ZSIsIGZhbHNlXTsKKyAgICAgICAgcmV0dXJuIFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RGaWx0ZXJlZE9yZGVyZWRJdGVyYXRvci5wcm90b3R5cGUu
Y3JlYXRlQ29tcGFyYXRvcihzb3J0RmllbGRzKTsKKyAgICB9LAorCisgICAgZW1wdHlEYXRhOiBm
dW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4ge2NvdW50OiIiLCBjb3VudERlbHRhOiIi
LCBzaXplRGVsdGE6ICIifTsKKyAgICB9LAorCisgICAgZW5oYW5jZURhdGE6IGZ1bmN0aW9uKGRh
dGEpCisgICAgeworICAgICAgICBpZiAodGhpcy5pc0RlbGV0ZWROb2RlKSB7CisgICAgICAgICAg
ICBkYXRhWyJhZGRlZENvdW50Il0gPSAiIjsKKyAgICAgICAgICAgIGRhdGFbImFkZGVkU2l6ZSJd
ID0gIiI7CisgICAgICAgICAgICBkYXRhWyJyZW1vdmVkQ291bnQiXSA9ICJcdTIwMjIiOworICAg
ICAgICAgICAgZGF0YVsicmVtb3ZlZFNpemUiXSA9IE51bWJlci5ieXRlc1RvU3RyaW5nKHRoaXMu
c2hhbGxvd1NpemUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGF0YVsiYWRkZWRD
b3VudCJdID0gIlx1MjAyMiI7CisgICAgICAgICAgICBkYXRhWyJhZGRlZFNpemUiXSA9IE51bWJl
ci5ieXRlc1RvU3RyaW5nKHRoaXMuc2hhbGxvd1NpemUpOworICAgICAgICAgICAgZGF0YVsicmVt
b3ZlZENvdW50Il0gPSAiIjsKKyAgICAgICAgICAgIGRhdGFbInJlbW92ZWRTaXplIl0gPSAiIjsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gZGF0YTsKKyAgICB9Cit9CisKK1dlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RJbnN0YW5jZU5vZGUucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RHZW5lcmljT2JqZWN0Tm9kZS5wcm90b3R5cGU7CisKK1dlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RDb25zdHJ1Y3Rvck5vZGUgPSBmdW5jdGlvbih0cmVlLCBjb25zdHJ1
Y3RvciwgYWdncmVnYXRlKQoreworICAgIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHcmlkTm9k
ZS5jYWxsKHRoaXMsIHRyZWUsIGFnZ3JlZ2F0ZS5jb3VudCA+IDAsIDEwMCk7CisgICAgdGhpcy5u
YW1lID0gY29uc3RydWN0b3I7CisgICAgdGhpcy5jb3VudCA9IGFnZ3JlZ2F0ZS5jb3VudDsKKyAg
ICB0aGlzLnNoYWxsb3dTaXplID0gYWdncmVnYXRlLnNlbGY7CisgICAgdGhpcy5yZXRhaW5lZFNp
emUgPSBhZ2dyZWdhdGUubWF4UmV0OworICAgIHRoaXMucHJvdmlkZXIgPSB0aGlzLl9jcmVhdGVO
b2Rlc1Byb3ZpZGVyKHRyZWUuc25hcHNob3QsIGFnZ3JlZ2F0ZS50eXBlLCBhZ2dyZWdhdGUubmFt
ZSk7Cit9CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RDb25zdHJ1Y3Rvck5vZGUucHJvdG90
eXBlID0geworICAgIGNyZWF0ZUNoaWxkTm9kZTogZnVuY3Rpb24ocHJvdmlkZXIpCisgICAgewor
ICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RJbnN0YW5jZU5vZGUo
dGhpcy5kYXRhR3JpZCwgbnVsbCwgdGhpcy5kYXRhR3JpZC5zbmFwc2hvdCwgcHJvdmlkZXIuaXRl
bSk7CisgICAgfSwKKworICAgIF9jcmVhdGVOb2Rlc1Byb3ZpZGVyOiBmdW5jdGlvbihzbmFwc2hv
dCwgbm9kZVR5cGUsIG5vZGVOYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90Tm9kZXNQcm92aWRlcigKKyAgICAgICAgICAgIHNuYXBzaG90LAor
ICAgICAgICAgICAgc25hcHNob3QuYWxsTm9kZXMsCisgICAgICAgICAgICBmdW5jdGlvbiAobm9k
ZSkgeworICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS50eXBlID09PSBub2RlVHlwZQorICAg
ICAgICAgICAgICAgICAgICAgJiYgKG5vZGVOYW1lID09PSBudWxsIHx8IG5vZGUubmFtZSA9PT0g
bm9kZU5hbWUpOworICAgICAgICAgICAgfSk7CisgICAgfSwKKworICAgIGNvbXBhcmF0b3I6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBzb3J0QXNjZW5kaW5nID0gdGhpcy5kYXRhR3Jp
ZC5zb3J0T3JkZXIgPT09ICJhc2NlbmRpbmciOworICAgICAgICB2YXIgc29ydENvbHVtbklkZW50
aWZpZXIgPSB0aGlzLmRhdGFHcmlkLnNvcnRDb2x1bW5JZGVudGlmaWVyOworICAgICAgICB2YXIg
c29ydEZpZWxkcyA9IHsKKyAgICAgICAgICAgIG9iamVjdDogWyJpZCIsIHNvcnRBc2NlbmRpbmcs
ICJyZXRhaW5lZFNpemUiLCBmYWxzZV0sCisgICAgICAgICAgICBjb3VudDogWyJpZCIsIHRydWUs
ICJyZXRhaW5lZFNpemUiLCBmYWxzZV0sCisgICAgICAgICAgICBzaGFsbG93U2l6ZTogWyJzZWxm
U2l6ZSIsIHNvcnRBc2NlbmRpbmcsICJpZCIsIHRydWVdLAorICAgICAgICAgICAgcmV0YWluZWRT
aXplOiBbInJldGFpbmVkU2l6ZSIsIHNvcnRBc2NlbmRpbmcsICJpZCIsIHRydWVdCisgICAgICAg
IH1bc29ydENvbHVtbklkZW50aWZpZXJdOworICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdEZpbHRlcmVkT3JkZXJlZEl0ZXJhdG9yLnByb3RvdHlwZS5jcmVhdGVDb21wYXJh
dG9yKHNvcnRGaWVsZHMpOworICAgIH0sCisKKyAgICBjaGlsZEhhc2hGb3JFbnRpdHk6IGZ1bmN0
aW9uKG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gbm9kZS5pZDsKKyAgICB9LAorCisgICAg
Y2hpbGRIYXNoRm9yTm9kZTogZnVuY3Rpb24oY2hpbGROb2RlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGNoaWxkTm9kZS5zbmFwc2hvdE5vZGVJZDsKKyAgICB9LAorCisgICAgZ2V0IGRhdGEoKQor
ICAgIHsKKyAgICAgICAgdmFyIGRhdGEgPSB7b2JqZWN0OiB0aGlzLm5hbWUsIGNvdW50OiB0aGlz
LmNvdW50fTsKKyAgICAgICAgdmFyIHZpZXcgPSB0aGlzLmRhdGFHcmlkLnNuYXBzaG90VmlldzsK
KyAgICAgICAgZGF0YVsiY291bnQiXSA9IHZpZXcuc2hvd0NvdW50QXNQZXJjZW50ID8gV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCIlLjJmJSUiLCB0aGlzLmNvdW50UGVyY2VudCkgOiB0aGlzLmNvdW50
OworICAgICAgICBkYXRhWyJzaGFsbG93U2l6ZSJdID0gdmlldy5zaG93U2hhbGxvd1NpemVBc1Bl
cmNlbnQgPyBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiUuMmYlJSIsIHRoaXMuc2hhbGxvd1NpemVQ
ZXJjZW50KSA6IE51bWJlci5ieXRlc1RvU3RyaW5nKHRoaXMuc2hhbGxvd1NpemUpOworICAgICAg
ICBkYXRhWyJyZXRhaW5lZFNpemUiXSA9ICI+ICIgKyAodmlldy5zaG93UmV0YWluZWRTaXplQXNQ
ZXJjZW50ID8gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlLjJmJSUiLCB0aGlzLnJldGFpbmVkU2l6
ZVBlcmNlbnQpIDogTnVtYmVyLmJ5dGVzVG9TdHJpbmcodGhpcy5yZXRhaW5lZFNpemUpKTsKKyAg
ICAgICAgcmV0dXJuIGRhdGE7CisgICAgfSwKKworICAgIGdldCBjb3VudFBlcmNlbnQoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuY291bnQgLyB0aGlzLmRhdGFHcmlkLnNuYXBzaG90Lm5v
ZGVzQ291bnQgKiAxMDAuMDsKKyAgICB9LAorCisgICAgZ2V0IHJldGFpbmVkU2l6ZVBlcmNlbnQo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMucmV0YWluZWRTaXplIC8gdGhpcy5kYXRhR3Jp
ZC5zbmFwc2hvdC50b3RhbFNpemUgKiAxMDAuMDsKKyAgICB9LAorCisgICAgZ2V0IHNoYWxsb3dT
aXplUGVyY2VudCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5zaGFsbG93U2l6ZSAvIHRo
aXMuZGF0YUdyaWQuc25hcHNob3QudG90YWxTaXplICogMTAwLjA7CisgICAgfQorfTsKKworV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdENvbnN0cnVjdG9yTm9kZS5wcm90b3R5cGUuX19wcm90b19f
ID0gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdyaWROb2RlLnByb3RvdHlwZTsKKworV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdEl0ZXJhdG9yc1R1cGxlID0gZnVuY3Rpb24oaXQxLCBpdDIpCit7
CisgICAgdGhpcy5pdDEgPSBpdDE7CisgICAgdGhpcy5pdDIgPSBpdDI7Cit9CisKK1dlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RJdGVyYXRvcnNUdXBsZS5wcm90b3R5cGUgPSB7CisgICAgZmlyc3Q6
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuaXQxLmZpcnN0KCk7CisgICAgICAgIHRo
aXMuaXQyLmZpcnN0KCk7CisgICAgfSwKKworICAgIHJlc2V0SW5zdGFuY2VzQ291bnQ6IGZ1bmN0
aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuaXQxLnJlc2V0SW5zdGFuY2VzQ291bnQoKTsKKyAg
ICAgICAgdGhpcy5pdDIucmVzZXRJbnN0YW5jZXNDb3VudCgpOworICAgIH0sCisKKyAgICBzb3J0
OiBmdW5jdGlvbihjb21wYXJhdG9yKQorICAgIHsKKyAgICAgICAgdGhpcy5pdDEuc29ydChjb21w
YXJhdG9yKTsKKyAgICAgICAgdGhpcy5pdDIuc29ydChjb21wYXJhdG9yKTsKKyAgICB9Cit9Owor
CitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGlmZk5vZGUgPSBmdW5jdGlvbih0cmVlLCBjb25z
dHJ1Y3RvciwgYmFzZUFnZ3JlZ2F0ZSwgYWdncmVnYXRlKQoreworICAgIGlmICghYmFzZUFnZ3Jl
Z2F0ZSkKKyAgICAgICAgYmFzZUFnZ3JlZ2F0ZSA9IHsgY291bnQ6IDAsIHNlbGY6IDAsIG1heFJl
dDogMCwgdHlwZTphZ2dyZWdhdGUudHlwZSwgbmFtZTphZ2dyZWdhdGUubmFtZSwgaWR4czogW10g
fTsKKyAgICBpZiAoIWFnZ3JlZ2F0ZSkKKyAgICAgICAgYWdncmVnYXRlID0geyBjb3VudDogMCwg
c2VsZjogMCwgbWF4UmV0OiAwLCB0eXBlOmJhc2VBZ2dyZWdhdGUudHlwZSwgbmFtZTpiYXNlQWdn
cmVnYXRlLm5hbWUsIGlkeHM6IFtdIH07CisgICAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdy
aWROb2RlLmNhbGwodGhpcywgdHJlZSwgdHJ1ZSwgNTApOworICAgIHRoaXMubmFtZSA9IGNvbnN0
cnVjdG9yOworICAgIHRoaXMuX2NhbGN1bGF0ZURpZmYodHJlZS5iYXNlU25hcHNob3QsIHRyZWUu
c25hcHNob3QsIGJhc2VBZ2dyZWdhdGUuaWR4cywgYWdncmVnYXRlLmlkeHMpOworICAgIHRoaXMu
cHJvdmlkZXIgPSB0aGlzLl9jcmVhdGVOb2Rlc1Byb3ZpZGVyKHRyZWUuYmFzZVNuYXBzaG90LCB0
cmVlLnNuYXBzaG90LCBhZ2dyZWdhdGUudHlwZSwgYWdncmVnYXRlLm5hbWUpOworfQorCitXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90RGlmZk5vZGUucHJvdG90eXBlID0geworICAgIF9jYWxjdWxh
dGVEaWZmOiBmdW5jdGlvbihiYXNlU25hcHNob3QsIHNuYXBzaG90LCBiYXNlSW5kZXhlcywgY3Vy
cmVudEluZGV4ZXMpCisgICAgeworICAgICAgICB2YXIgaSA9IDAsIGwgPSBiYXNlSW5kZXhlcy5s
ZW5ndGg7CisgICAgICAgIHZhciBqID0gMCwgbSA9IGN1cnJlbnRJbmRleGVzLmxlbmd0aDsKKyAg
ICAgICAgdGhpcy5hZGRlZENvdW50ID0gMDsKKyAgICAgICAgdGhpcy5yZW1vdmVkQ291bnQgPSAw
OworICAgICAgICB0aGlzLmFkZGVkU2l6ZSA9IDA7CisgICAgICAgIHRoaXMucmVtb3ZlZFNpemUg
PSAwOworICAgICAgICB2YXIgbm9kZUEgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5v
ZGUoYmFzZVNuYXBzaG90KTsKKyAgICAgICAgdmFyIG5vZGVCID0gbmV3IFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3ROb2RlKHNuYXBzaG90KTsKKyAgICAgICAgbm9kZUEubm9kZUluZGV4ID0gYmFz
ZUluZGV4ZXNbaV07CisgICAgICAgIG5vZGVCLm5vZGVJbmRleCA9IGN1cnJlbnRJbmRleGVzW2pd
OworICAgICAgICB3aGlsZSAoaSA8IGwgJiYgaiA8IG0pIHsKKyAgICAgICAgICAgIGlmIChub2Rl
QS5pZCA8IG5vZGVCLmlkKSB7CisgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVkQ291bnQrKzsK
KyAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZWRTaXplICs9IG5vZGVBLnNlbGZTaXplOworICAg
ICAgICAgICAgICAgIG5vZGVBLm5vZGVJbmRleCA9IGJhc2VJbmRleGVzWysraV07CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKG5vZGVBLmlkID4gbm9kZUIuaWQpIHsKKyAgICAgICAgICAgICAgICB0
aGlzLmFkZGVkQ291bnQrKzsKKyAgICAgICAgICAgICAgICB0aGlzLmFkZGVkU2l6ZSArPSBub2Rl
Qi5zZWxmU2l6ZTsKKyAgICAgICAgICAgICAgICBub2RlQi5ub2RlSW5kZXggPSBjdXJyZW50SW5k
ZXhlc1srK2pdOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgbm9kZUEubm9kZUluZGV4ID0gYmFzZUluZGV4ZXNbKytpXTsKKyAgICAgICAgICAg
ICAgICBub2RlQi5ub2RlSW5kZXggPSBjdXJyZW50SW5kZXhlc1srK2pdOyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoaSA8IGwpIHsKKyAg
ICAgICAgICAgIHRoaXMucmVtb3ZlZENvdW50Kys7CisgICAgICAgICAgICB0aGlzLnJlbW92ZWRT
aXplICs9IG5vZGVBLnNlbGZTaXplOworICAgICAgICAgICAgbm9kZUEubm9kZUluZGV4ID0gYmFz
ZUluZGV4ZXNbKytpXTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoaiA8IG0pIHsKKyAgICAg
ICAgICAgIHRoaXMuYWRkZWRDb3VudCsrOworICAgICAgICAgICAgdGhpcy5hZGRlZFNpemUgKz0g
bm9kZUIuc2VsZlNpemU7CisgICAgICAgICAgICBub2RlQi5ub2RlSW5kZXggPSBjdXJyZW50SW5k
ZXhlc1srK2pdOyAgICAgICAgICAgICAgICAKKyAgICAgICAgfQorICAgICAgICB0aGlzLmNvdW50
RGVsdGEgPSB0aGlzLmFkZGVkQ291bnQgLSB0aGlzLnJlbW92ZWRDb3VudDsKKyAgICAgICAgdGhp
cy5zaXplRGVsdGEgPSB0aGlzLmFkZGVkU2l6ZSAtIHRoaXMucmVtb3ZlZFNpemU7CisgICAgfSwK
KworICAgIGNyZWF0ZUNoaWxkTm9kZTogZnVuY3Rpb24ocHJvdmlkZXIpCisgICAgeworICAgICAg
ICBpZiAocHJvdmlkZXIgPT09IHRoaXMucHJvdmlkZXIuaXQxKQorICAgICAgICAgICAgcmV0dXJu
IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90SW5zdGFuY2VOb2RlKHRoaXMuZGF0YUdyaWQs
IG51bGwsIHByb3ZpZGVyLnNuYXBzaG90LCBwcm92aWRlci5pdGVtKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90SW5zdGFuY2VO
b2RlKHRoaXMuZGF0YUdyaWQsIHByb3ZpZGVyLnNuYXBzaG90LCBudWxsLCBwcm92aWRlci5pdGVt
KTsKKyAgICB9LAorCisgICAgX2NyZWF0ZU5vZGVzUHJvdmlkZXI6IGZ1bmN0aW9uKGJhc2VTbmFw
c2hvdCwgc25hcHNob3QsIG5vZGVUeXBlLCBub2RlTmFtZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEl0ZXJhdG9yc1R1cGxlKAorICAgICAgICAg
ICAgY3JlYXRlUHJvdmlkZXIoc25hcHNob3QsIGJhc2VTbmFwc2hvdCksIGNyZWF0ZVByb3ZpZGVy
KGJhc2VTbmFwc2hvdCwgc25hcHNob3QpKTsKKworICAgICAgICBmdW5jdGlvbiBjcmVhdGVQcm92
aWRlcihzbmFwc2hvdCwgb3RoZXJTbmFwc2hvdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZXNQcm92aWRlcigKKyAgICAgICAg
ICAgICAgICBzbmFwc2hvdCwKKyAgICAgICAgICAgICAgICBzbmFwc2hvdC5hbGxOb2RlcywKKyAg
ICAgICAgICAgICAgICBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG5vZGUudHlwZSA9PT0gbm9kZVR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAmJiAo
bm9kZU5hbWUgPT09IG51bGwgfHwgbm9kZS5uYW1lID09PSBub2RlTmFtZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAmJiAhKG5vZGUuaWQgaW4gb3RoZXJTbmFwc2hvdC5pZHNNYXApOworICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfSwKKworICAgIGNvbXBhcmF0b3I6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBzb3J0QXNjZW5kaW5nID0gdGhpcy5kYXRhR3Jp
ZC5zb3J0T3JkZXIgPT09ICJhc2NlbmRpbmciOworICAgICAgICB2YXIgc29ydENvbHVtbklkZW50
aWZpZXIgPSB0aGlzLmRhdGFHcmlkLnNvcnRDb2x1bW5JZGVudGlmaWVyOworICAgICAgICB2YXIg
c29ydEZpZWxkcyA9IHsKKyAgICAgICAgICAgIG9iamVjdDogWyJpZCIsIHNvcnRBc2NlbmRpbmcs
ICJzZWxmU2l6ZSIsIGZhbHNlXSwKKyAgICAgICAgICAgIGFkZGVkQ291bnQ6IFsic2VsZlNpemUi
LCBzb3J0QXNjZW5kaW5nLCAiaWQiLCB0cnVlXSwKKyAgICAgICAgICAgIHJlbW92ZWRDb3VudDog
WyJzZWxmU2l6ZSIsIHNvcnRBc2NlbmRpbmcsICJpZCIsIHRydWVdLAorICAgICAgICAgICAgY291
bnREZWx0YTogWyJzZWxmU2l6ZSIsIHNvcnRBc2NlbmRpbmcsICJpZCIsIHRydWVdLAorICAgICAg
ICAgICAgYWRkZWRTaXplOiBbInNlbGZTaXplIiwgc29ydEFzY2VuZGluZywgImlkIiwgdHJ1ZV0s
CisgICAgICAgICAgICByZW1vdmVkU2l6ZTogWyJzZWxmU2l6ZSIsIHNvcnRBc2NlbmRpbmcsICJp
ZCIsIHRydWVdLAorICAgICAgICAgICAgc2l6ZURlbHRhOiBbInNlbGZTaXplIiwgc29ydEFzY2Vu
ZGluZywgImlkIiwgdHJ1ZV0KKyAgICAgICAgfVtzb3J0Q29sdW1uSWRlbnRpZmllcl07CisgICAg
ICAgIHJldHVybiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RmlsdGVyZWRPcmRlcmVkSXRlcmF0
b3IucHJvdG90eXBlLmNyZWF0ZUNvbXBhcmF0b3Ioc29ydEZpZWxkcyk7CisgICAgfSwKKworICAg
IHBvcHVsYXRlQ2hpbGRyZW46IGZ1bmN0aW9uKHByb3ZpZGVyLCBob3dNYW55LCBhdEluZGV4KQor
ICAgIHsKKyAgICAgICAgaWYgKCFwcm92aWRlciAmJiAhaG93TWFueSkgeworICAgICAgICAgICAg
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdyaWROb2RlLnByb3RvdHlwZS5wb3B1bGF0ZUNoaWxk
cmVuLmNhbGwodGhpcywgdGhpcy5wcm92aWRlci5pdDEsIHRoaXMuZGVmYXVsdFBvcHVsYXRlQ291
bnQpOworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdyaWROb2RlLnByb3Rv
dHlwZS5wb3B1bGF0ZUNoaWxkcmVuLmNhbGwodGhpcywgdGhpcy5wcm92aWRlci5pdDIsIHRoaXMu
ZGVmYXVsdFBvcHVsYXRlQ291bnQpOworICAgICAgICB9IGVsc2UgaWYgKCFob3dNYW55KSB7Cisg
ICAgICAgICAgICBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R3JpZE5vZGUucHJvdG90eXBlLnBv
cHVsYXRlQ2hpbGRyZW4uY2FsbCh0aGlzLCB0aGlzLnByb3ZpZGVyLml0MSk7CisgICAgICAgICAg
ICBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R3JpZE5vZGUucHJvdG90eXBlLnBvcHVsYXRlQ2hp
bGRyZW4uY2FsbCh0aGlzLCB0aGlzLnByb3ZpZGVyLml0Mik7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdyaWROb2RlLnByb3RvdHlwZS5wb3B1
bGF0ZUNoaWxkcmVuLmNhbGwodGhpcywgcHJvdmlkZXIsIGhvd01hbnksIGF0SW5kZXgpOworICAg
IH0sCisKKyAgICBzaWduRm9yRGVsdGE6IGZ1bmN0aW9uKGRlbHRhKQorICAgIHsKKyAgICAgICAg
aWYgKGRlbHRhID09PSAwKQorICAgICAgICAgICAgcmV0dXJuICIiOworICAgICAgICBpZiAoZGVs
dGEgPiAwKQorICAgICAgICAgICAgcmV0dXJuICIrIjsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcmV0dXJuICJcdTIyMTIiOyAgLy8gTWF0aCBtaW51cyBzaWduLCBzYW1lIHdpZHRoIGFzIHBs
dXMuCisgICAgfSwKKworICAgIGdldCBkYXRhKCkKKyAgICB7CisgICAgICAgIHZhciBkYXRhID0g
e29iamVjdDogdGhpcy5uYW1lfTsKKworICAgICAgICBkYXRhWyJhZGRlZENvdW50Il0gPSB0aGlz
LmFkZGVkQ291bnQ7CisgICAgICAgIGRhdGFbInJlbW92ZWRDb3VudCJdID0gdGhpcy5yZW1vdmVk
Q291bnQ7CisgICAgICAgIGRhdGFbImNvdW50RGVsdGEiXSA9IFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiJXMlZCIsIHRoaXMuc2lnbkZvckRlbHRhKHRoaXMuY291bnREZWx0YSksIE1hdGguYWJzKHRo
aXMuY291bnREZWx0YSkpOworICAgICAgICBkYXRhWyJhZGRlZFNpemUiXSA9IE51bWJlci5ieXRl
c1RvU3RyaW5nKHRoaXMuYWRkZWRTaXplKTsKKyAgICAgICAgZGF0YVsicmVtb3ZlZFNpemUiXSA9
IE51bWJlci5ieXRlc1RvU3RyaW5nKHRoaXMucmVtb3ZlZFNpemUpOworICAgICAgICBkYXRhWyJz
aXplRGVsdGEiXSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJXMlcyIsIHRoaXMuc2lnbkZvckRl
bHRhKHRoaXMuc2l6ZURlbHRhKSwgTnVtYmVyLmJ5dGVzVG9TdHJpbmcoTWF0aC5hYnModGhpcy5z
aXplRGVsdGEpKSk7CisKKyAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgfSwKKworICAgIGdldCB6
ZXJvRGlmZigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5hZGRlZENvdW50ID09PSAwICYm
IHRoaXMucmVtb3ZlZENvdW50ID09PSAwOworICAgIH0KK307CisKK1dlYkluc3BlY3Rvci5IZWFw
U25hcHNob3REaWZmTm9kZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdEdyaWROb2RlLnByb3RvdHlwZTsKKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERv
bWluYXRvck9iamVjdE5vZGUgPSBmdW5jdGlvbih0cmVlLCBub2RlKQoreworICAgIHZhciBwcm92
aWRlciA9IHRoaXMuX2NyZWF0ZU5vZGVzUHJvdmlkZXIodHJlZS5zbmFwc2hvdCwgbm9kZS5ub2Rl
SW5kZXgpOworICAgIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHZW5lcmljT2JqZWN0Tm9kZS5j
YWxsKHRoaXMsIHRyZWUsIG5vZGUsICFwcm92aWRlci5pc0VtcHR5LCAyNSk7CisgICAgdGhpcy5w
cm92aWRlciA9IHByb3ZpZGVyOworfTsKKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERvbWlu
YXRvck9iamVjdE5vZGUucHJvdG90eXBlID0geworICAgIGNyZWF0ZUNoaWxkTm9kZTogZnVuY3Rp
b24ocHJvdmlkZXIpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3REb21pbmF0b3JPYmplY3ROb2RlKHRoaXMuZGF0YUdyaWQsIHByb3ZpZGVyLml0ZW0p
OworICAgIH0sCisKKyAgICBfY3JlYXRlTm9kZXNQcm92aWRlcjogZnVuY3Rpb24oc25hcHNob3Qs
IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIHZhciBzaG93SGlkZGVuRGF0YSA9IFdlYkluc3Bl
Y3Rvci5EZXRhaWxlZEhlYXBzaG90Vmlldy5wcm90b3R5cGUuc2hvd0hpZGRlbkRhdGE7CisgICAg
ICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVzUHJvdmlkZXIoCisg
ICAgICAgICAgICBzbmFwc2hvdCwKKyAgICAgICAgICAgIHNuYXBzaG90LmFsbE5vZGVzLAorICAg
ICAgICAgICAgZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgdmFyIGRvbWluYXRv
ckluZGV4ID0gbm9kZS5kb21pbmF0b3JJbmRleCgpOworICAgICAgICAgICAgICAgICByZXR1cm4g
ZG9taW5hdG9ySW5kZXggPT09IG5vZGVJbmRleAorICAgICAgICAgICAgICAgICAgICAgJiYgZG9t
aW5hdG9ySW5kZXggIT09IG5vZGUubm9kZUluZGV4CisgICAgICAgICAgICAgICAgICAgICAmJiAo
c2hvd0hpZGRlbkRhdGEgfHwgIW5vZGUuaXNIaWRkZW4pOworICAgICAgICAgICAgfSk7CisgICAg
fSwKKworICAgIGNoaWxkSGFzaEZvckVudGl0eTogZnVuY3Rpb24obm9kZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBub2RlLmlkOworICAgIH0sCisKKyAgICBjaGlsZEhhc2hGb3JOb2RlOiBmdW5j
dGlvbihjaGlsZE5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gY2hpbGROb2RlLnNuYXBzaG90
Tm9kZUlkOworICAgIH0sCisKKyAgICBjb21wYXJhdG9yOiBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICB2YXIgc29ydEFzY2VuZGluZyA9IHRoaXMuZGF0YUdyaWQuc29ydE9yZGVyID09PSAiYXNj
ZW5kaW5nIjsKKyAgICAgICAgdmFyIHNvcnRDb2x1bW5JZGVudGlmaWVyID0gdGhpcy5kYXRhR3Jp
ZC5zb3J0Q29sdW1uSWRlbnRpZmllcjsKKyAgICAgICAgdmFyIHNvcnRGaWVsZHMgPSB7CisgICAg
ICAgICAgICBvYmplY3Q6IFsiaWQiLCBzb3J0QXNjZW5kaW5nLCAicmV0YWluZWRTaXplIiwgZmFs
c2VdLAorICAgICAgICAgICAgc2hhbGxvd1NpemU6IFsic2VsZlNpemUiLCBzb3J0QXNjZW5kaW5n
LCAiaWQiLCB0cnVlXSwKKyAgICAgICAgICAgIHJldGFpbmVkU2l6ZTogWyJyZXRhaW5lZFNpemUi
LCBzb3J0QXNjZW5kaW5nLCAiaWQiLCB0cnVlXQorICAgICAgICB9W3NvcnRDb2x1bW5JZGVudGlm
aWVyXTsKKyAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RGaWx0ZXJlZE9y
ZGVyZWRJdGVyYXRvci5wcm90b3R5cGUuY3JlYXRlQ29tcGFyYXRvcihzb3J0RmllbGRzKTsKKyAg
ICB9LAorCisgICAgZW1wdHlEYXRhOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4g
e307CisgICAgfQorfTsKKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERvbWluYXRvck9iamVj
dE5vZGUucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHZW5l
cmljT2JqZWN0Tm9kZS5wcm90b3R5cGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvSGVhcFNuYXBzaG90LmpzCmluZGV4IGVmNDUwYWYuLjI3YTI5Y2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90Lmpz
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90Lmpz
CkBAIC01NTIsMTQgKzU1MiwxNCBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlw
ZSA9IHsKICAgICB9CiB9OwogCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RmlsdGVyZWRPcmRl
cmVkSXRlcmF0b3IgPSBmdW5jdGlvbihzbmFwc2hvdCwgaXRlcmF0b3IsIGZpbHRlcikKK1dlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RGaWx0ZXJlZE9yZGVyZWRJdGVyYXRvciA9IGZ1bmN0aW9uKGl0
ZXJhdG9yLCBmaWx0ZXIpCiB7Ci0gICAgdGhpcy5fc25hcHNob3QgPSBzbmFwc2hvdDsKICAgICB0
aGlzLl9maWx0ZXIgPSBmaWx0ZXI7CiAgICAgdGhpcy5faXRlcmF0b3IgPSBpdGVyYXRvcjsKICAg
ICB0aGlzLl9pdGVyYXRpb25PcmRlciA9IG51bGw7CiAgICAgdGhpcy5fcG9zaXRpb24gPSAwOwog
ICAgIHRoaXMuX2xhc3RDb21wYXJhdG9yID0gbnVsbDsKKyAgICB0aGlzLl9pbnN0YW5jZXNDb3Vu
dCA9IDA7CiB9CiAKIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RGaWx0ZXJlZE9yZGVyZWRJdGVy
YXRvci5wcm90b3R5cGUgPSB7CkBAIC01ODgsNiArNTg4LDE2IEBAIFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RGaWx0ZXJlZE9yZGVyZWRJdGVyYXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJl
dHVybiB0aGlzLl9wb3NpdGlvbiA8IHRoaXMuX2l0ZXJhdGlvbk9yZGVyLmxlbmd0aDsKICAgICB9
LAogCisgICAgaW5jSW5zdGFuY2VzQ291bnQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgICsr
dGhpcy5faW5zdGFuY2VzQ291bnQ7CisgICAgfSwKKworICAgIGdldCBpbnN0YW5jZXNDb3VudCgp
CisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2VzQ291bnQ7CisgICAgfSwKKwog
ICAgIGdldCBpc0VtcHR5KCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9pdGVyYXRpb25PcmRl
cikKQEAgLTYyMyw2ICs2MzMsMTEgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEZpbHRlcmVk
T3JkZXJlZEl0ZXJhdG9yLnByb3RvdHlwZSA9IHsKICAgICBuZXh0OiBmdW5jdGlvbigpCiAgICAg
ewogICAgICAgICArK3RoaXMuX3Bvc2l0aW9uOworICAgIH0sCisKKyAgICByZXNldEluc3RhbmNl
c0NvdW50OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9pbnN0YW5jZXNDb3VudCA9
IDA7CiAgICAgfQogfQogCkBAIC02MzMsNyArNjQ4LDggQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdEZpbHRlcmVkT3JkZXJlZEl0ZXJhdG9yLnByb3RvdHlwZS5jcmVhdGVDb21wYXJhdG9yID0g
ZnUKIAogV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2VzUHJvdmlkZXIgPSBmdW5jdGlvbihz
bmFwc2hvdCwgcmF3RWRnZXMsIGZpbHRlcikKIHsKLSAgICBXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90RmlsdGVyZWRPcmRlcmVkSXRlcmF0b3IuY2FsbCh0aGlzLCBzbmFwc2hvdCwgbmV3IFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RFZGdlSXRlcmF0b3IobmV3IFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RFZGdlKHNuYXBzaG90LCByYXdFZGdlcykpLCBmaWx0ZXIpOworICAgIHRoaXMuc25hcHNo
b3QgPSBzbmFwc2hvdDsKKyAgICBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RmlsdGVyZWRPcmRl
cmVkSXRlcmF0b3IuY2FsbCh0aGlzLCBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2VJ
dGVyYXRvcihuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2Uoc25hcHNob3QsIHJhd0Vk
Z2VzKSksIGZpbHRlcik7CiB9CiAKIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlc1Byb3Zp
ZGVyLnByb3RvdHlwZSA9IHsKQEAgLTY0OSw4ICs2NjUsOCBAQCBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90RWRnZXNQcm92aWRlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdmFyIGVkZ2VBID0g
dGhpcy5faXRlcmF0b3IuaXRlbS5jbG9uZSgpOwogICAgICAgICB2YXIgZWRnZUIgPSBlZGdlQS5j
bG9uZSgpOwotICAgICAgICB2YXIgbm9kZUEgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dE5vZGUodGhpcy5fc25hcHNob3QpOwotICAgICAgICB2YXIgbm9kZUIgPSBuZXcgV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdE5vZGUodGhpcy5fc25hcHNob3QpOworICAgICAgICB2YXIgbm9kZUEg
PSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUodGhpcy5zbmFwc2hvdCk7CisgICAg
ICAgIHZhciBub2RlQiA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZSh0aGlzLnNu
YXBzaG90KTsKIAogICAgICAgICBmdW5jdGlvbiBzb3J0QnlFZGdlRmllbGROYW1lKGFzY2VuZGlu
ZywgaW5kZXhBLCBpbmRleEIpCiAgICAgICAgIHsKQEAgLTcxNSw3ICs3MzEsOCBAQCBXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90RWRnZXNQcm92aWRlci5wcm90b3R5cGUuX19wcm90b19fID0gV2Vi
SW5zcGVjdG9yLkhlYXBTbgogCiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZXNQcm92aWRl
ciA9IGZ1bmN0aW9uKHNuYXBzaG90LCBub2RlcywgZmlsdGVyKQogewotICAgIFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RGaWx0ZXJlZE9yZGVyZWRJdGVyYXRvci5jYWxsKHRoaXMsIHNuYXBzaG90
LCBub2RlcywgZmlsdGVyKTsKKyAgICB0aGlzLnNuYXBzaG90ID0gc25hcHNob3Q7CisgICAgV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdEZpbHRlcmVkT3JkZXJlZEl0ZXJhdG9yLmNhbGwodGhpcywg
bm9kZXMsIGZpbHRlcik7CiB9CiAKIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2Rlc1Byb3Zp
ZGVyLnByb3RvdHlwZSA9IHsKQEAgLTcyOSw4ICs3NDYsOCBAQCBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90Tm9kZXNQcm92aWRlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBhc2NlbmRpbmcx
ID0gY29tcGFyYXRvci5hc2NlbmRpbmcxOwogICAgICAgICB2YXIgYXNjZW5kaW5nMiA9IGNvbXBh
cmF0b3IuYXNjZW5kaW5nMjsKIAotICAgICAgICB2YXIgbm9kZUEgPSBuZXcgV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdE5vZGUodGhpcy5fc25hcHNob3QpOwotICAgICAgICB2YXIgbm9kZUIgPSBu
ZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUodGhpcy5fc25hcHNob3QpOworICAgICAg
ICB2YXIgbm9kZUEgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUodGhpcy5zbmFw
c2hvdCk7CisgICAgICAgIHZhciBub2RlQiA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
Tm9kZSh0aGlzLnNuYXBzaG90KTsKIAogICAgICAgICBmdW5jdGlvbiBzb3J0QnlOb2RlRmllbGQo
ZmllbGROYW1lLCBhc2NlbmRpbmcsIGluZGV4QSwgaW5kZXhCKQogICAgICAgICB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1BsZWFzZVdhaXRNZXNzYWdl
LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9QbGVhc2VXYWl0TWVzc2Fn
ZS5qcwppbmRleCA1NGQ4MDVkLi5lMTk4MGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1BsZWFzZVdhaXRNZXNzYWdlLmpzCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUGxlYXNlV2FpdE1lc3NhZ2UuanMKQEAgLTU5LDcgKzU5
LDcgQEAgV2ViSW5zcGVjdG9yLlBsZWFzZVdhaXRNZXNzYWdlLnByb3RvdHlwZSA9IHsKIAogICAg
IGdldCBpbnN0YW5jZSgpCiAgICAgewotICAgICAgICBpZiAoISJfaW5zdGFuY2UiIGluIFdlYklu
c3BlY3Rvci5QbGVhc2VXYWl0TWVzc2FnZS5wcm90b3R5cGUpCisgICAgICAgIGlmICghKCJfaW5z
dGFuY2UiIGluIFdlYkluc3BlY3Rvci5QbGVhc2VXYWl0TWVzc2FnZS5wcm90b3R5cGUpKQogICAg
ICAgICAgICAgV2ViSW5zcGVjdG9yLlBsZWFzZVdhaXRNZXNzYWdlLnByb3RvdHlwZS5faW5zdGFu
Y2UgPSBuZXcgV2ViSW5zcGVjdG9yLlBsZWFzZVdhaXRNZXNzYWdlKCk7CiAgICAgICAgIHJldHVy
biBXZWJJbnNwZWN0b3IuUGxlYXNlV2FpdE1lc3NhZ2UucHJvdG90eXBlLl9pbnN0YW5jZTsKICAg
ICB9LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJL
aXQucXJjIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCmlu
ZGV4IGRkMzI1YmEuLmJiZGZmOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvV2ViS2l0LnFyYworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1dlYktpdC5xcmMKQEAgLTI3LDYgKzI3LDcgQEAKICAgICA8ZmlsZT5EYXRhYmFzZS5q
czwvZmlsZT4KICAgICA8ZmlsZT5EYXRhYmFzZVF1ZXJ5Vmlldy5qczwvZmlsZT4KICAgICA8Zmls
ZT5EYXRhYmFzZVRhYmxlVmlldy5qczwvZmlsZT4KKyAgICA8ZmlsZT5EZXRhaWxlZEhlYXBzaG90
R3JpZE5vZGVzLmpzPC9maWxlPgogICAgIDxmaWxlPkRldGFpbGVkSGVhcHNob3RWaWV3LmpzPC9m
aWxlPgogICAgIDxmaWxlPkRhdGFHcmlkLmpzPC9maWxlPgogICAgIDxmaWxlPkRlYnVnZ2VyTW9k
ZWwuanM8L2ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL2luc3BlY3Rvci5odG1sIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9p
bnNwZWN0b3IuaHRtbAppbmRleCAwNDM1ZGMzLi41NWIzMmZkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKQEAgLTE0Miw2ICsxNDIs
NyBAQCBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlBy
b2ZpbGVWaWV3LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCIgc3JjPSJIZWFwU25hcHNob3QuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4
dC9qYXZhc2NyaXB0IiBzcmM9IkhlYXBTbmFwc2hvdFZpZXcuanMiPjwvc2NyaXB0PgorICAgIDxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkRldGFpbGVkSGVhcHNob3RHcmlkTm9k
ZXMuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9
IkRldGFpbGVkSGVhcHNob3RWaWV3LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCIgc3JjPSJEZWJ1Z2dlck1vZGVsLmpzIj48L3NjcmlwdD4KICAgICA8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJET01BZ2VudC5qcyI+PC9zY3JpcHQ+Cg==
</data>
<flag name="review"
          id="73957"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
    <flag name="commit-queue"
          id="73958"
          type_id="3"
          status="-"
          setter="mnaganov"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82332</attachid>
            <date>2011-02-14 10:27:52 -0800</date>
            <delta_ts>2011-02-16 05:42:00 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch-54385</filename>
            <type>text/plain</type>
            <size>34981</size>
            <attacher name="Mikhail Naganov">mnaganov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwNDBjYmUzLi41NTVlM2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIg
QEAKKzIwMTEtMDItMTQgIE1pa2hhaWwgTmFnYW5vdiAgPG1uYWdhbm92QGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBbQ2hyb21pdW1dIExhbmRpbmcgZGV0YWlsZWQgaGVhcCBzbmFwc2hvdHMsIHBhcnQg
My4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0Mzg1
CisKKyAgICAgICAgUHJvdmlkZSBub2RlIGNsYXNzZXMgZm9yIGRhdGEgZ3JpZCB2aWV3czoKKyAg
ICAgICAgIC0gc3VtbWFyeSAtLSBsaXN0IG9mIG9iamVjdHMgYnkgY29uc3R1Y3RvcjsKKyAgICAg
ICAgIC0gZGlmZiAtLSBzdW1tYXJpZXMgYnR3IHR3byBzbmFwc2hvdHM7CisgICAgICAgICAtIGV4
cGxvcmVyIC0tIGV4cGxvcmUgaGVhcCBncmFwaDsKKyAgICAgICAgIC0gZG9taW5hdG9ycyB0cmVl
OworCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRGV0YWlsZWRIZWFw
c2hvdEdyaWROb2Rlcy5qczogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9I
ZWFwU25hcHNob3QuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RmlsdGVy
ZWRPcmRlcmVkSXRlcmF0b3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEZp
bHRlcmVkT3JkZXJlZEl0ZXJhdG9yLnByb3RvdHlwZS5pbmNJbnN0YW5jZXNDb3VudCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RmlsdGVyZWRPcmRlcmVkSXRlcmF0b3IucHJv
dG90eXBlLmdldCBpbnN0YW5jZXNDb3VudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90RmlsdGVyZWRPcmRlcmVkSXRlcmF0b3IucHJvdG90eXBlLm5leHQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEZpbHRlcmVkT3JkZXJlZEl0ZXJhdG9yLnByb3RvdHlw
ZS5yZXNldEluc3RhbmNlc0NvdW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RFZGdlc1Byb3ZpZGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2Rl
c1Byb3ZpZGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1BsZWFzZVdhaXRNZXNz
YWdlLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlBsZWFzZVdhaXRNZXNzYWdlLnByb3RvdHlw
ZS5nZXQgaW5zdGFuY2UpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFy
YzoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sOgorCiAyMDEx
LTAyLTEzICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYW4gQmVybnN0ZWluLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGViODAxNmMuLmUyN2Vj
MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTQ2ODIsNiArNDY4Miw3IEBACiAgICAgICAgICAgICAn
aW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhYmFzZVRhYmxlVmlldy5qcycsCiAgICAgICAgICAgICAn
aW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhR3JpZC5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9y
L2Zyb250LWVuZC9EZWJ1Z2dlck1vZGVsLmpzJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvZnJv
bnQtZW5kL0RldGFpbGVkSGVhcHNob3RHcmlkTm9kZXMuanMnLAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9mcm9udC1lbmQvRGV0YWlsZWRIZWFwc2hvdFZpZXcuanMnLAogICAgICAgICAgICAgJ2lu
c3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9m
cm9udC1lbmQvRE9NU3RvcmFnZS5qcycsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCmluZGV4IDJhOGYzNDAuLmJkYTdhMjUgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC02NTg0OSw2ICs2NTg0OSwxMCBA
QAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
aW5zcGVjdG9yXGZyb250LWVuZFxEZXRhaWxlZEhlYXBzaG90R3JpZE5vZGVzLmpzIgorCQkJCQk+
CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9y
XGZyb250LWVuZFxEZXRhaWxlZEhlYXBzaG90Vmlldy5qcyIKIAkJCQkJPgogCQkJCTwvRmlsZT4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGV0YWlsZWRI
ZWFwc2hvdEdyaWROb2Rlcy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
RGV0YWlsZWRIZWFwc2hvdEdyaWROb2Rlcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4wNmE3Y2M4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9EZXRhaWxlZEhlYXBzaG90R3JpZE5vZGVzLmpzCkBAIC0wLDAgKzEsNjk1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdyaWROb2RlID0gZnVuY3Rpb24odHJlZSwgaGFz
Q2hpbGRyZW4sIHBvcHVsYXRlQ291bnQpCit7CisgICAgV2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9k
ZS5jYWxsKHRoaXMsIG51bGwsIGhhc0NoaWxkcmVuKTsKKyAgICB0aGlzLl9kZWZhdWx0UG9wdWxh
dGVDb3VudCA9IHBvcHVsYXRlQ291bnQ7CisgICAgdGhpcy5fcHJvdmlkZXIgPSBudWxsOworICAg
IHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigicG9wdWxhdGUiLCB0aGlzLl9wb3B1bGF0ZSwgdGhpcyk7
Cit9CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHcmlkTm9kZS5wcm90b3R5cGUgPSB7Cisg
ICAgY3JlYXRlQ2VsbDogZnVuY3Rpb24oY29sdW1uSWRlbnRpZmllcikKKyAgICB7CisgICAgICAg
IHZhciBjZWxsID0gV2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZS5wcm90b3R5cGUuY3JlYXRlQ2Vs
bC5jYWxsKHRoaXMsIGNvbHVtbklkZW50aWZpZXIpOworICAgICAgICBpZiAodGhpcy5fc2VhcmNo
TWF0Y2hlZCkKKyAgICAgICAgICAgIGNlbGwuYWRkU3R5bGVDbGFzcygiaGlnaGxpZ2h0Iik7Cisg
ICAgICAgIHJldHVybiBjZWxsOworICAgIH0sCisKKyAgICBfcG9wdWxhdGU6IGZ1bmN0aW9uKGV2
ZW50KQorICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLlBsZWFzZVdhaXRNZXNzYWdlLnByb3Rv
dHlwZS5zdGFydEFjdGlvbih0aGlzLmRhdGFHcmlkLmVsZW1lbnQsIGRvUG9wdWxhdGUuYmluZCh0
aGlzKSk7CisKKyAgICAgICAgZnVuY3Rpb24gZG9Qb3B1bGF0ZSgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHRoaXMuX3Byb3ZpZGVyLnNvcnQodGhpcy5jb21wYXJhdG9yKCkpOworICAgICAgICAg
ICAgdGhpcy5fcHJvdmlkZXIuZmlyc3QoKTsKKyAgICAgICAgICAgIHRoaXMucG9wdWxhdGVDaGls
ZHJlbigpOworICAgICAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb3B1bGF0ZSIs
IHRoaXMuX3BvcHVsYXRlLCB0aGlzKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBwb3B1bGF0
ZUNoaWxkcmVuOiBmdW5jdGlvbihwcm92aWRlciwgaG93TWFueSwgYXRJbmRleCkKKyAgICB7Cisg
ICAgICAgIGlmICghaG93TWFueSAmJiBwcm92aWRlcikgeworICAgICAgICAgICAgaG93TWFueSA9
IHByb3ZpZGVyLmluc3RhbmNlc0NvdW50OworICAgICAgICAgICAgcHJvdmlkZXIucmVzZXRJbnN0
YW5jZXNDb3VudCgpOworICAgICAgICB9CisgICAgICAgIHByb3ZpZGVyID0gcHJvdmlkZXIgfHwg
dGhpcy5fcHJvdmlkZXI7CisgICAgICAgIGhvd01hbnkgPSBob3dNYW55IHx8IHRoaXMuX2RlZmF1
bHRQb3B1bGF0ZUNvdW50OworICAgICAgICBhdEluZGV4ID0gYXRJbmRleCB8fCB0aGlzLmNoaWxk
cmVuLmxlbmd0aDsKKyAgICAgICAgdmFyIGhhdmVTYXZlZENoaWxkcmVuID0gISF0aGlzLl9zYXZl
ZENoaWxkcmVuOworICAgICAgICBpZiAoaGF2ZVNhdmVkQ2hpbGRyZW4pIHsKKyAgICAgICAgICAg
IGhhdmVTYXZlZENoaWxkcmVuID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKHZhciBjIGluIHRo
aXMuX3NhdmVkQ2hpbGRyZW4pIHsKKyAgICAgICAgICAgICAgICBoYXZlU2F2ZWRDaGlsZHJlbiA9
IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgZm9yICggOyBob3dNYW55ID4gMCAmJiBwcm92aWRlci5oYXNOZXh0KCk7IHByb3Zp
ZGVyLm5leHQoKSwgcHJvdmlkZXIuaW5jSW5zdGFuY2VzQ291bnQoKSwgLS1ob3dNYW55KSB7Cisg
ICAgICAgICAgICB2YXIgaXRlbSA9IHByb3ZpZGVyLml0ZW07CisgICAgICAgICAgICBpZiAoaGF2
ZVNhdmVkQ2hpbGRyZW4pIHsKKyAgICAgICAgICAgICAgICB2YXIgaGFzaCA9IHRoaXMuX2NoaWxk
SGFzaEZvckVudGl0eShpdGVtKTsKKyAgICAgICAgICAgICAgICBpZiAoaGFzaCBpbiB0aGlzLl9z
YXZlZENoaWxkcmVuKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0Q2hpbGQodGhp
cy5fc2F2ZWRDaGlsZHJlbltoYXNoXSwgYXRJbmRleCsrKTsKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
dGhpcy5pbnNlcnRDaGlsZCh0aGlzLl9jcmVhdGVDaGlsZE5vZGUocHJvdmlkZXIpLCBhdEluZGV4
KyspOworICAgICAgICB9CisgICAgICAgIGlmIChwcm92aWRlci5oYXNOZXh0KCkpCisgICAgICAg
ICAgICB0aGlzLmluc2VydENoaWxkKG5ldyBXZWJJbnNwZWN0b3IuU2hvd01vcmVEYXRhR3JpZE5v
ZGUodGhpcy5wb3B1bGF0ZUNoaWxkcmVuLmJpbmQodGhpcywgcHJvdmlkZXIpLCB0aGlzLl9kZWZh
dWx0UG9wdWxhdGVDb3VudCwgcHJvdmlkZXIubGVuZ3RoKSwgYXRJbmRleCsrKTsKKyAgICB9LAor
CisgICAgX3NhdmVDaGlsZHJlbjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fc2F2
ZWRDaGlsZHJlbiA9IHt9OworICAgICAgICBmb3IgKHZhciBpID0gMCwgY2hpbGRyZW5Db3VudCA9
IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgY2hpbGRyZW5Db3VudDsgKytpKSB7CisgICAgICAg
ICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldOworICAgICAgICAgICAgaWYgKGNoaWxk
LmV4cGFuZGVkKQorICAgICAgICAgICAgICAgIHRoaXMuX3NhdmVkQ2hpbGRyZW5bdGhpcy5fY2hp
bGRIYXNoRm9yTm9kZShjaGlsZCldID0gY2hpbGQ7CisgICAgICAgIH0KKyAgICB9LAorCisgICAg
c29ydDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIGNvbXBhcmF0b3IgPSB0aGlzLmNv
bXBhcmF0b3IoKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLlBsZWFzZVdhaXRNZXNzYWdlLnByb3Rv
dHlwZS5zdGFydEFjdGlvbih0aGlzLmRhdGFHcmlkLmVsZW1lbnQsIGRvU29ydC5iaW5kKHRoaXMp
KTsKKworICAgICAgICBmdW5jdGlvbiBkb1NvcnQoKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoIXRoaXMuX3Byb3ZpZGVyLnNvcnQoY29tcGFyYXRvcikpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgdGhpcy5fc2F2ZUNoaWxkcmVuKCk7CisgICAgICAgICAgICB0aGlz
LnJlbW92ZUNoaWxkcmVuKCk7CisgICAgICAgICAgICB0aGlzLl9wcm92aWRlci5maXJzdCgpOwor
ICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZUNoaWxkcmVuKHRoaXMuX3Byb3ZpZGVyKTsKKyAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldOworICAg
ICAgICAgICAgICAgIGlmIChjaGlsZC5leHBhbmRlZCkKKyAgICAgICAgICAgICAgICAgICAgY2hp
bGQuc29ydCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfTsKKworV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdEdyaWROb2RlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNw
ZWN0b3IuRGF0YUdyaWROb2RlLnByb3RvdHlwZTsKKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dEdlbmVyaWNPYmplY3ROb2RlID0gZnVuY3Rpb24odHJlZSwgbm9kZSwgaGFzQ2hpbGRyZW4sIHBv
cHVsYXRlQ291bnQpCit7CisgICAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdyaWROb2RlLmNh
bGwodGhpcywgdHJlZSwgaGFzQ2hpbGRyZW4sIHBvcHVsYXRlQ291bnQpOworICAgIHRoaXMuX25h
bWUgPSBub2RlLm5hbWU7CisgICAgdGhpcy5fdHlwZSA9IG5vZGUudHlwZTsKKyAgICB0aGlzLl9z
aGFsbG93U2l6ZSA9IG5vZGUuc2VsZlNpemU7CisgICAgdGhpcy5fcmV0YWluZWRTaXplID0gbm9k
ZS5yZXRhaW5lZFNpemU7CisgICAgdGhpcy5fcmV0YWluZWRTaXplRXhhY3QgPSB0aGlzLl9zaGFs
bG93U2l6ZSA9PT0gdGhpcy5fcmV0YWluZWRTaXplOworICAgIHRoaXMuc25hcHNob3ROb2RlSWQg
PSBub2RlLmlkOworICAgIHRoaXMuc25hcHNob3ROb2RlSW5kZXggPSBub2RlLm5vZGVJbmRleDsK
K307CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHZW5lcmljT2JqZWN0Tm9kZS5wcm90b3R5
cGUgPSB7CisgICAgY3JlYXRlQ2VsbDogZnVuY3Rpb24oY29sdW1uSWRlbnRpZmllcikKKyAgICB7
CisgICAgICAgIHZhciBjZWxsID0gY29sdW1uSWRlbnRpZmllciAhPT0gIm9iamVjdCIgPyBXZWJJ
bnNwZWN0b3IuRGF0YUdyaWROb2RlLnByb3RvdHlwZS5jcmVhdGVDZWxsLmNhbGwodGhpcywgY29s
dW1uSWRlbnRpZmllcikgOiB0aGlzLl9jcmVhdGVPYmplY3RDZWxsKCk7CisgICAgICAgIGlmICh0
aGlzLl9zZWFyY2hNYXRjaGVkKQorICAgICAgICAgICAgY2VsbC5hZGRTdHlsZUNsYXNzKCJoaWdo
bGlnaHQiKTsKKyAgICAgICAgcmV0dXJuIGNlbGw7CisgICAgfSwKKworICAgIF9jcmVhdGVPYmpl
Y3RDZWxsOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgY2VsbCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoInRkIik7CisgICAgICAgIGNlbGwuY2xhc3NOYW1lID0gIm9iamVjdC1jb2x1
bW4iOworICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Cisg
ICAgICAgIGRpdi5jbGFzc05hbWUgPSAic291cmNlLWNvZGUgZXZlbnQtcHJvcGVydGllcyI7Cisg
ICAgICAgIGRpdi5zdHlsZS5vdmVyZmxvdyA9ICJoaWRkZW4iOworICAgICAgICB2YXIgZGF0YSA9
IHRoaXMuZGF0YVsib2JqZWN0Il07CisgICAgICAgIGlmICh0aGlzLl9wcmVmaXhPYmplY3RDZWxs
KQorICAgICAgICAgICAgdGhpcy5fcHJlZml4T2JqZWN0Q2VsbChkaXYsIGRhdGEpOworICAgICAg
ICB2YXIgdmFsdWVTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgICAg
ICB2YWx1ZVNwYW4uY2xhc3NOYW1lID0gInZhbHVlIGNvbnNvbGUtZm9ybWF0dGVkLSIgKyBkYXRh
LnZhbHVlU3R5bGU7CisgICAgICAgIHZhbHVlU3Bhbi50ZXh0Q29udGVudCA9IGRhdGEudmFsdWU7
CisgICAgICAgIGRpdi5hcHBlbmRDaGlsZCh2YWx1ZVNwYW4pOworICAgICAgICBjZWxsLmFwcGVu
ZENoaWxkKGRpdik7CisgICAgICAgIGNlbGwuYWRkU3R5bGVDbGFzcygiZGlzY2xvc3VyZSIpOwor
ICAgICAgICBpZiAodGhpcy5kZXB0aCkKKyAgICAgICAgICAgIGNlbGwuc3R5bGUuc2V0UHJvcGVy
dHkoInBhZGRpbmctbGVmdCIsICh0aGlzLmRlcHRoICogdGhpcy5kYXRhR3JpZC5pbmRlbnRXaWR0
aCkgKyAicHgiKTsKKyAgICAgICAgcmV0dXJuIGNlbGw7CisgICAgfSwKKworICAgIGdldCBfY291
bnRQZXJjZW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9jb3VudCAvIHRoaXMudHJl
ZS5zbmFwc2hvdC5ub2Rlc0NvdW50ICogMTAwLjA7CisgICAgfSwKKworICAgIGdldCBkYXRhKCkK
KyAgICB7CisgICAgICAgIHZhciBkYXRhID0gdGhpcy5fZW1wdHlEYXRhKCk7CisKKyAgICAgICAg
dmFyIHZhbHVlID0gdGhpcy5fbmFtZTsKKyAgICAgICAgdmFyIHZhbHVlU3R5bGUgPSAib2JqZWN0
IjsKKyAgICAgICAgc3dpdGNoICh0aGlzLl90eXBlKSB7CisgICAgICAgIGNhc2UgInN0cmluZyI6
CisgICAgICAgICAgICB2YWx1ZSA9ICJcIiIgKyB2YWx1ZSArICJcIiI7CisgICAgICAgICAgICB2
YWx1ZVN0eWxlID0gInN0cmluZyI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAi
cmVnZXhwIjoKKyAgICAgICAgICAgIHZhbHVlID0gIi8iICsgdmFsdWUgKyAiLyI7CisgICAgICAg
ICAgICB2YWx1ZVN0eWxlID0gInN0cmluZyI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSAiY2xvc3VyZSI6CisgICAgICAgICAgICB2YWx1ZSA9ICJmdW5jdGlvbiAiICsgdmFsdWUg
KyAiKCkiOworICAgICAgICAgICAgdmFsdWVTdHlsZSA9ICJmdW5jdGlvbiI7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSAibnVtYmVyIjoKKyAgICAgICAgICAgIHZhbHVlU3R5bGUg
PSAibnVtYmVyIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJoaWRkZW4iOgor
ICAgICAgICAgICAgdmFsdWVTdHlsZSA9ICJudWxsIjsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlICJhcnJheSI6CisgICAgICAgICAgICB2YWx1ZSArPSAiW10iOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH07CisgICAgICAgIGRhdGFbIm9iamVjdCJdID0geyB2YWx1ZVN0
eWxlOiB2YWx1ZVN0eWxlLCB2YWx1ZTogdmFsdWUgKyAiIEAiICsgdGhpcy5zbmFwc2hvdE5vZGVJ
ZCB9OworCisgICAgICAgIHZhciB2aWV3ID0gdGhpcy5kYXRhR3JpZC5zbmFwc2hvdFZpZXc7Cisg
ICAgICAgIGRhdGFbInNoYWxsb3dTaXplIl0gPSB2aWV3LnNob3dTaGFsbG93U2l6ZUFzUGVyY2Vu
dCA/IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJS4yZiUlIiwgdGhpcy5fc2hhbGxvd1NpemVQZXJj
ZW50KSA6IE51bWJlci5ieXRlc1RvU3RyaW5nKHRoaXMuX3NoYWxsb3dTaXplKTsKKyAgICAgICAg
ZGF0YVsicmV0YWluZWRTaXplIl0gPSAodGhpcy5fcmV0YWluZWRTaXplRXhhY3QgPyAiIiA6ICJc
dTIyNDgiKSArICh2aWV3LnNob3dSZXRhaW5lZFNpemVBc1BlcmNlbnQgPyBXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIiUuMmYlJSIsIHRoaXMuX3JldGFpbmVkU2l6ZVBlcmNlbnQpIDogTnVtYmVyLmJ5
dGVzVG9TdHJpbmcodGhpcy5fcmV0YWluZWRTaXplKSk7CisKKyAgICAgICAgcmV0dXJuIHRoaXMu
X2VuaGFuY2VEYXRhID8gdGhpcy5fZW5oYW5jZURhdGEoZGF0YSkgOiBkYXRhOworICAgIH0sCisK
KyAgICBzZXQgZXhhY3RSZXRhaW5lZFNpemUoc2l6ZSkKKyAgICB7CisgICAgICAgIHRoaXMuX3Jl
dGFpbmVkU2l6ZSA9IHNpemU7CisgICAgICAgIHRoaXMuX3JldGFpbmVkU2l6ZUV4YWN0ID0gdHJ1
ZTsKKyAgICAgICAgdGhpcy5yZWZyZXNoKCk7CisgICAgfSwKKworICAgIGdldCBfcmV0YWluZWRT
aXplUGVyY2VudCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fcmV0YWluZWRTaXplIC8g
dGhpcy5kYXRhR3JpZC5zbmFwc2hvdC50b3RhbFNpemUgKiAxMDAuMDsKKyAgICB9LAorCisgICAg
Z2V0IF9zaGFsbG93U2l6ZVBlcmNlbnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3No
YWxsb3dTaXplIC8gdGhpcy5kYXRhR3JpZC5zbmFwc2hvdC50b3RhbFNpemUgKiAxMDAuMDsKKyAg
ICB9Cit9CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHZW5lcmljT2JqZWN0Tm9kZS5wcm90
b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdyaWROb2RlLnByb3Rv
dHlwZTsKKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE9iamVjdE5vZGUgPSBmdW5jdGlvbih0
cmVlLCBlZGdlKQoreworICAgIHZhciBub2RlID0gZWRnZS5ub2RlOworICAgIHZhciBwcm92aWRl
ciA9IHRoaXMuX2NyZWF0ZUVkZ2VzUHJvdmlkZXIodHJlZS5zbmFwc2hvdCwgbm9kZS5yYXdFZGdl
cyk7CisgICAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVyaWNPYmplY3ROb2RlLmNhbGwo
dGhpcywgdHJlZSwgbm9kZSwgIXByb3ZpZGVyLmlzRW1wdHksIDEwMCk7CisgICAgdGhpcy5fcmVm
ZXJlbmNlTmFtZSA9IGVkZ2UubmFtZTsKKyAgICB0aGlzLl9yZWZlcmVuY2VUeXBlID0gZWRnZS50
eXBlOworICAgIHRoaXMuX3Byb3ZpZGVyID0gcHJvdmlkZXI7Cit9CisKK1dlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RPYmplY3ROb2RlLnByb3RvdHlwZSA9IHsKKyAgICBfY3JlYXRlQ2hpbGROb2Rl
OiBmdW5jdGlvbihwcm92aWRlcikKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdE9iamVjdE5vZGUodGhpcy5kYXRhR3JpZCwgcHJvdmlkZXIuaXRlbSk7
CisgICAgfSwKKworICAgIF9jcmVhdGVFZGdlc1Byb3ZpZGVyOiBmdW5jdGlvbihzbmFwc2hvdCwg
cmF3RWRnZXMpCisgICAgeworICAgICAgICB2YXIgc2hvd0hpZGRlbkRhdGEgPSBXZWJJbnNwZWN0
b3IuRGV0YWlsZWRIZWFwc2hvdFZpZXcucHJvdG90eXBlLnNob3dIaWRkZW5EYXRhOworICAgICAg
ICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlc1Byb3ZpZGVyKAorICAg
ICAgICAgICAgc25hcHNob3QsCisgICAgICAgICAgICByYXdFZGdlcywKKyAgICAgICAgICAgIGZ1
bmN0aW9uKGVkZ2UpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIWVkZ2UuaXNJbnZpc2libGUK
KyAgICAgICAgICAgICAgICAgICAgJiYgKHNob3dIaWRkZW5EYXRhIHx8ICghZWRnZS5pc0hpZGRl
biAmJiAhZWRnZS5ub2RlLmlzSGlkZGVuKSk7CisgICAgICAgICAgICB9KTsKKyAgICB9LAorCisg
ICAgX2NoaWxkSGFzaEZvckVudGl0eTogZnVuY3Rpb24oZWRnZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBlZGdlLnR5cGUgKyAiIyIgKyBlZGdlLm5hbWU7CisgICAgfSwKKworICAgIF9jaGlsZEhh
c2hGb3JOb2RlOiBmdW5jdGlvbihjaGlsZE5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gY2hp
bGROb2RlLl9yZWZlcmVuY2VUeXBlICsgIiMiICsgY2hpbGROb2RlLl9yZWZlcmVuY2VOYW1lOwor
ICAgIH0sCisKKyAgICBjb21wYXJhdG9yOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIg
c29ydEFzY2VuZGluZyA9IHRoaXMuZGF0YUdyaWQuc29ydE9yZGVyID09PSAiYXNjZW5kaW5nIjsK
KyAgICAgICAgdmFyIHNvcnRDb2x1bW5JZGVudGlmaWVyID0gdGhpcy5kYXRhR3JpZC5zb3J0Q29s
dW1uSWRlbnRpZmllcjsKKyAgICAgICAgdmFyIHNvcnRGaWVsZHMgPSB7CisgICAgICAgICAgICBv
YmplY3Q6IFsiIWVkZ2VOYW1lIiwgc29ydEFzY2VuZGluZywgInJldGFpbmVkU2l6ZSIsIGZhbHNl
XSwKKyAgICAgICAgICAgIGNvdW50OiBbIiFlZGdlTmFtZSIsIHRydWUsICJyZXRhaW5lZFNpemUi
LCBmYWxzZV0sCisgICAgICAgICAgICBzaGFsbG93U2l6ZTogWyJzZWxmU2l6ZSIsIHNvcnRBc2Nl
bmRpbmcsICIhZWRnZU5hbWUiLCB0cnVlXSwKKyAgICAgICAgICAgIHJldGFpbmVkU2l6ZTogWyJy
ZXRhaW5lZFNpemUiLCBzb3J0QXNjZW5kaW5nLCAiIWVkZ2VOYW1lIiwgdHJ1ZV0KKyAgICAgICAg
fVtzb3J0Q29sdW1uSWRlbnRpZmllcl0gfHwgWyIhZWRnZU5hbWUiLCB0cnVlLCAicmV0YWluZWRT
aXplIiwgZmFsc2VdOworICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEZp
bHRlcmVkT3JkZXJlZEl0ZXJhdG9yLnByb3RvdHlwZS5jcmVhdGVDb21wYXJhdG9yKHNvcnRGaWVs
ZHMpOworICAgIH0sCisKKyAgICBfZW1wdHlEYXRhOiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICByZXR1cm4ge2NvdW50OiIiLCBhZGRlZENvdW50OiAiIiwgcmVtb3ZlZENvdW50OiAiIiwgY291
bnREZWx0YToiIiwgYWRkZWRTaXplOiAiIiwgcmVtb3ZlZFNpemU6ICIiLCBzaXplRGVsdGE6ICIi
fTsKKyAgICB9LAorCisgICAgX2VuaGFuY2VEYXRhOiBmdW5jdGlvbihkYXRhKQorICAgIHsKKyAg
ICAgICAgdmFyIG5hbWUgPSB0aGlzLl9yZWZlcmVuY2VOYW1lOworICAgICAgICBpZiAobmFtZSA9
PT0gIiIpIG5hbWUgPSAiKGVtcHR5KSI7CisgICAgICAgIHZhciBuYW1lQ2xhc3MgPSAibmFtZSI7
CisgICAgICAgIHN3aXRjaCAodGhpcy5fcmVmZXJlbmNlVHlwZSkgeworICAgICAgICBjYXNlICJj
b250ZXh0IjoKKyAgICAgICAgICAgIG5hbWVDbGFzcyA9ICJjb25zb2xlLWZvcm1hdHRlZC1udW1i
ZXIiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgImludGVybmFsIjoKKyAgICAg
ICAgY2FzZSAiaGlkZGVuIjoKKyAgICAgICAgICAgIG5hbWVDbGFzcyA9ICJjb25zb2xlLWZvcm1h
dHRlZC1udWxsIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRhdGFb
Im9iamVjdCJdLm5hbWVDbGFzcyA9IG5hbWVDbGFzczsKKyAgICAgICAgZGF0YVsib2JqZWN0Il0u
bmFtZSA9IG5hbWU7CisgICAgICAgIHJldHVybiBkYXRhOworICAgIH0sCisKKyAgICBfcHJlZml4
T2JqZWN0Q2VsbDogZnVuY3Rpb24oZGl2LCBkYXRhKQorICAgIHsKKyAgICAgICAgdmFyIG5hbWVT
cGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgICAgICBuYW1lU3Bhbi5j
bGFzc05hbWUgPSBkYXRhLm5hbWVDbGFzczsKKyAgICAgICAgbmFtZVNwYW4udGV4dENvbnRlbnQg
PSBkYXRhLm5hbWU7CisgICAgICAgIHZhciBzZXBhcmF0b3JTcGFuID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgic3BhbiIpOworICAgICAgICBzZXBhcmF0b3JTcGFuLmNsYXNzTmFtZSA9ICJzZXBh
cmF0b3IiOworICAgICAgICBzZXBhcmF0b3JTcGFuLnRleHRDb250ZW50ID0gIjogIjsKKyAgICAg
ICAgZGl2LmFwcGVuZENoaWxkKG5hbWVTcGFuKTsKKyAgICAgICAgZGl2LmFwcGVuZENoaWxkKHNl
cGFyYXRvclNwYW4pOworICAgIH0KK30KKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE9iamVj
dE5vZGUucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHZW5l
cmljT2JqZWN0Tm9kZS5wcm90b3R5cGU7CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RJbnN0
YW5jZU5vZGUgPSBmdW5jdGlvbih0cmVlLCBiYXNlU25hcHNob3QsIHNuYXBzaG90LCBub2RlKQor
eworICAgIHZhciBwcm92aWRlciA9IHRoaXMuX2NyZWF0ZUVkZ2VzUHJvdmlkZXIoYmFzZVNuYXBz
aG90IHx8IHNuYXBzaG90LCBub2RlLnJhd0VkZ2VzKTsgIAorICAgIFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RHZW5lcmljT2JqZWN0Tm9kZS5jYWxsKHRoaXMsIHRyZWUsIG5vZGUsICFwcm92aWRl
ci5pc0VtcHR5LCAxMDApOworICAgIHRoaXMuX2lzRGVsZXRlZE5vZGUgPSAhIWJhc2VTbmFwc2hv
dDsKKyAgICB0aGlzLl9wcm92aWRlciA9IHByb3ZpZGVyOyAgICAKK307CisKK1dlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RJbnN0YW5jZU5vZGUucHJvdG90eXBlID0geworICAgIF9jcmVhdGVDaGls
ZE5vZGU6IGZ1bmN0aW9uKHByb3ZpZGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90T2JqZWN0Tm9kZSh0aGlzLmRhdGFHcmlkLCBwcm92aWRlci5p
dGVtKTsKKyAgICB9LAorCisgICAgX2NyZWF0ZUVkZ2VzUHJvdmlkZXI6IGZ1bmN0aW9uKHNuYXBz
aG90LCByYXdFZGdlcykKKyAgICB7CisgICAgICAgIHZhciBzaG93SGlkZGVuRGF0YSA9IFdlYklu
c3BlY3Rvci5EZXRhaWxlZEhlYXBzaG90Vmlldy5wcm90b3R5cGUuc2hvd0hpZGRlbkRhdGE7Cisg
ICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2VzUHJvdmlkZXIo
CisgICAgICAgICAgICBzbmFwc2hvdCwKKyAgICAgICAgICAgIHJhd0VkZ2VzLAorICAgICAgICAg
ICAgZnVuY3Rpb24oZWRnZSkgeworICAgICAgICAgICAgICAgIHJldHVybiAhZWRnZS5pc0ludmlz
aWJsZQorICAgICAgICAgICAgICAgICAgICAmJiAoc2hvd0hpZGRlbkRhdGEgfHwgKCFlZGdlLmlz
SGlkZGVuICYmICFlZGdlLm5vZGUuaXNIaWRkZW4pKTsKKyAgICAgICAgICAgIH0pOworICAgIH0s
CisKKyAgICBfY2hpbGRIYXNoRm9yRW50aXR5OiBmdW5jdGlvbihlZGdlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVkZ2UudHlwZSArICIjIiArIGVkZ2UubmFtZTsKKyAgICB9LAorCisgICAgX2No
aWxkSGFzaEZvck5vZGU6IGZ1bmN0aW9uKGNoaWxkTm9kZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBjaGlsZE5vZGUuX3JlZmVyZW5jZVR5cGUgKyAiIyIgKyBjaGlsZE5vZGUuX3JlZmVyZW5jZU5h
bWU7CisgICAgfSwKKworICAgIGNvbXBhcmF0b3I6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IHZhciBzb3J0QXNjZW5kaW5nID0gdGhpcy5kYXRhR3JpZC5zb3J0T3JkZXIgPT09ICJhc2NlbmRp
bmciOworICAgICAgICB2YXIgc29ydENvbHVtbklkZW50aWZpZXIgPSB0aGlzLmRhdGFHcmlkLnNv
cnRDb2x1bW5JZGVudGlmaWVyOworICAgICAgICB2YXIgc29ydEZpZWxkcyA9IHsKKyAgICAgICAg
ICAgIG9iamVjdDogWyIhZWRnZU5hbWUiLCBzb3J0QXNjZW5kaW5nLCAicmV0YWluZWRTaXplIiwg
ZmFsc2VdLAorICAgICAgICAgICAgY291bnQ6IFsiIWVkZ2VOYW1lIiwgdHJ1ZSwgInJldGFpbmVk
U2l6ZSIsIGZhbHNlXSwKKyAgICAgICAgICAgIGFkZGVkU2l6ZTogWyJzZWxmU2l6ZSIsIHNvcnRB
c2NlbmRpbmcsICIhZWRnZU5hbWUiLCB0cnVlXSwKKyAgICAgICAgICAgIHJlbW92ZWRTaXplOiBb
InNlbGZTaXplIiwgc29ydEFzY2VuZGluZywgIiFlZGdlTmFtZSIsIHRydWVdLAorICAgICAgICAg
ICAgc2hhbGxvd1NpemU6IFsic2VsZlNpemUiLCBzb3J0QXNjZW5kaW5nLCAiIWVkZ2VOYW1lIiwg
dHJ1ZV0sCisgICAgICAgICAgICByZXRhaW5lZFNpemU6IFsicmV0YWluZWRTaXplIiwgc29ydEFz
Y2VuZGluZywgIiFlZGdlTmFtZSIsIHRydWVdCisgICAgICAgIH1bc29ydENvbHVtbklkZW50aWZp
ZXJdIHx8IFsiIWVkZ2VOYW1lIiwgdHJ1ZSwgInJldGFpbmVkU2l6ZSIsIGZhbHNlXTsKKyAgICAg
ICAgcmV0dXJuIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RGaWx0ZXJlZE9yZGVyZWRJdGVyYXRv
ci5wcm90b3R5cGUuY3JlYXRlQ29tcGFyYXRvcihzb3J0RmllbGRzKTsKKyAgICB9LAorCisgICAg
X2VtcHR5RGF0YTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHtjb3VudDoiIiwg
Y291bnREZWx0YToiIiwgc2l6ZURlbHRhOiAiIn07CisgICAgfSwKKworICAgIF9lbmhhbmNlRGF0
YTogZnVuY3Rpb24oZGF0YSkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9pc0RlbGV0ZWROb2Rl
KSB7CisgICAgICAgICAgICBkYXRhWyJhZGRlZENvdW50Il0gPSAiIjsKKyAgICAgICAgICAgIGRh
dGFbImFkZGVkU2l6ZSJdID0gIiI7CisgICAgICAgICAgICBkYXRhWyJyZW1vdmVkQ291bnQiXSA9
ICJcdTIwMjIiOworICAgICAgICAgICAgZGF0YVsicmVtb3ZlZFNpemUiXSA9IE51bWJlci5ieXRl
c1RvU3RyaW5nKHRoaXMuX3NoYWxsb3dTaXplKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGRhdGFbImFkZGVkQ291bnQiXSA9ICJcdTIwMjIiOworICAgICAgICAgICAgZGF0YVsiYWRk
ZWRTaXplIl0gPSBOdW1iZXIuYnl0ZXNUb1N0cmluZyh0aGlzLl9zaGFsbG93U2l6ZSk7CisgICAg
ICAgICAgICBkYXRhWyJyZW1vdmVkQ291bnQiXSA9ICIiOworICAgICAgICAgICAgZGF0YVsicmVt
b3ZlZFNpemUiXSA9ICIiOworICAgICAgICB9CisgICAgICAgIHJldHVybiBkYXRhOworICAgIH0K
K30KKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEluc3RhbmNlTm9kZS5wcm90b3R5cGUuX19w
cm90b19fID0gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVyaWNPYmplY3ROb2RlLnByb3Rv
dHlwZTsKKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdENvbnN0cnVjdG9yTm9kZSA9IGZ1bmN0
aW9uKHRyZWUsIGNvbnN0cnVjdG9yLCBhZ2dyZWdhdGUpCit7CisgICAgV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdEdyaWROb2RlLmNhbGwodGhpcywgdHJlZSwgYWdncmVnYXRlLmNvdW50ID4gMCwg
MTAwKTsKKyAgICB0aGlzLl9uYW1lID0gY29uc3RydWN0b3I7CisgICAgdGhpcy5fY291bnQgPSBh
Z2dyZWdhdGUuY291bnQ7CisgICAgdGhpcy5fc2hhbGxvd1NpemUgPSBhZ2dyZWdhdGUuc2VsZjsK
KyAgICB0aGlzLl9yZXRhaW5lZFNpemUgPSBhZ2dyZWdhdGUubWF4UmV0OworICAgIHRoaXMuX3By
b3ZpZGVyID0gdGhpcy5fY3JlYXRlTm9kZXNQcm92aWRlcih0cmVlLnNuYXBzaG90LCBhZ2dyZWdh
dGUudHlwZSwgYWdncmVnYXRlLm5hbWUpOworfQorCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
Q29uc3RydWN0b3JOb2RlLnByb3RvdHlwZSA9IHsKKyAgICBfY3JlYXRlQ2hpbGROb2RlOiBmdW5j
dGlvbihwcm92aWRlcikKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdEluc3RhbmNlTm9kZSh0aGlzLmRhdGFHcmlkLCBudWxsLCB0aGlzLmRhdGFHcmlk
LnNuYXBzaG90LCBwcm92aWRlci5pdGVtKTsKKyAgICB9LAorCisgICAgX2NyZWF0ZU5vZGVzUHJv
dmlkZXI6IGZ1bmN0aW9uKHNuYXBzaG90LCBub2RlVHlwZSwgbm9kZU5hbWUpCisgICAgeworICAg
ICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2Rlc1Byb3ZpZGVyKAor
ICAgICAgICAgICAgc25hcHNob3QsCisgICAgICAgICAgICBzbmFwc2hvdC5hbGxOb2RlcywKKyAg
ICAgICAgICAgIGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAgICAgICAgICAgIHJldHVybiBub2Rl
LnR5cGUgPT09IG5vZGVUeXBlCisgICAgICAgICAgICAgICAgICAgICAmJiAobm9kZU5hbWUgPT09
IG51bGwgfHwgbm9kZS5uYW1lID09PSBub2RlTmFtZSk7CisgICAgICAgICAgICB9KTsKKyAgICB9
LAorCisgICAgY29tcGFyYXRvcjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIHNvcnRB
c2NlbmRpbmcgPSB0aGlzLmRhdGFHcmlkLnNvcnRPcmRlciA9PT0gImFzY2VuZGluZyI7CisgICAg
ICAgIHZhciBzb3J0Q29sdW1uSWRlbnRpZmllciA9IHRoaXMuZGF0YUdyaWQuc29ydENvbHVtbklk
ZW50aWZpZXI7CisgICAgICAgIHZhciBzb3J0RmllbGRzID0geworICAgICAgICAgICAgb2JqZWN0
OiBbImlkIiwgc29ydEFzY2VuZGluZywgInJldGFpbmVkU2l6ZSIsIGZhbHNlXSwKKyAgICAgICAg
ICAgIGNvdW50OiBbImlkIiwgdHJ1ZSwgInJldGFpbmVkU2l6ZSIsIGZhbHNlXSwKKyAgICAgICAg
ICAgIHNoYWxsb3dTaXplOiBbInNlbGZTaXplIiwgc29ydEFzY2VuZGluZywgImlkIiwgdHJ1ZV0s
CisgICAgICAgICAgICByZXRhaW5lZFNpemU6IFsicmV0YWluZWRTaXplIiwgc29ydEFzY2VuZGlu
ZywgImlkIiwgdHJ1ZV0KKyAgICAgICAgfVtzb3J0Q29sdW1uSWRlbnRpZmllcl07CisgICAgICAg
IHJldHVybiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RmlsdGVyZWRPcmRlcmVkSXRlcmF0b3Iu
cHJvdG90eXBlLmNyZWF0ZUNvbXBhcmF0b3Ioc29ydEZpZWxkcyk7CisgICAgfSwKKworICAgIF9j
aGlsZEhhc2hGb3JFbnRpdHk6IGZ1bmN0aW9uKG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4g
bm9kZS5pZDsKKyAgICB9LAorCisgICAgX2NoaWxkSGFzaEZvck5vZGU6IGZ1bmN0aW9uKGNoaWxk
Tm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjaGlsZE5vZGUuc25hcHNob3ROb2RlSWQ7Cisg
ICAgfSwKKworICAgIGdldCBkYXRhKCkKKyAgICB7CisgICAgICAgIHZhciBkYXRhID0ge29iamVj
dDogdGhpcy5fbmFtZSwgY291bnQ6IHRoaXMuX2NvdW50fTsKKyAgICAgICAgdmFyIHZpZXcgPSB0
aGlzLmRhdGFHcmlkLnNuYXBzaG90VmlldzsKKyAgICAgICAgZGF0YVsiY291bnQiXSA9IHZpZXcu
c2hvd0NvdW50QXNQZXJjZW50ID8gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlLjJmJSUiLCB0aGlz
Ll9jb3VudFBlcmNlbnQpIDogdGhpcy5fY291bnQ7CisgICAgICAgIGRhdGFbInNoYWxsb3dTaXpl
Il0gPSB2aWV3LnNob3dTaGFsbG93U2l6ZUFzUGVyY2VudCA/IFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiJS4yZiUlIiwgdGhpcy5fc2hhbGxvd1NpemVQZXJjZW50KSA6IE51bWJlci5ieXRlc1RvU3Ry
aW5nKHRoaXMuX3NoYWxsb3dTaXplKTsKKyAgICAgICAgZGF0YVsicmV0YWluZWRTaXplIl0gPSAi
PiAiICsgKHZpZXcuc2hvd1JldGFpbmVkU2l6ZUFzUGVyY2VudCA/IFdlYkluc3BlY3Rvci5VSVN0
cmluZygiJS4yZiUlIiwgdGhpcy5fcmV0YWluZWRTaXplUGVyY2VudCkgOiBOdW1iZXIuYnl0ZXNU
b1N0cmluZyh0aGlzLl9yZXRhaW5lZFNpemUpKTsKKyAgICAgICAgcmV0dXJuIGRhdGE7CisgICAg
fSwKKworICAgIGdldCBfY291bnRQZXJjZW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlz
Ll9jb3VudCAvIHRoaXMuZGF0YUdyaWQuc25hcHNob3Qubm9kZXNDb3VudCAqIDEwMC4wOworICAg
IH0sCisKKyAgICBnZXQgX3JldGFpbmVkU2l6ZVBlcmNlbnQoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX3JldGFpbmVkU2l6ZSAvIHRoaXMuZGF0YUdyaWQuc25hcHNob3QudG90YWxTaXpl
ICogMTAwLjA7CisgICAgfSwKKworICAgIGdldCBfc2hhbGxvd1NpemVQZXJjZW50KCkKKyAgICB7
CisgICAgICAgIHJldHVybiB0aGlzLl9zaGFsbG93U2l6ZSAvIHRoaXMuZGF0YUdyaWQuc25hcHNo
b3QudG90YWxTaXplICogMTAwLjA7CisgICAgfQorfTsKKworV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdENvbnN0cnVjdG9yTm9kZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdEdyaWROb2RlLnByb3RvdHlwZTsKKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dEl0ZXJhdG9yc1R1cGxlID0gZnVuY3Rpb24oaXQxLCBpdDIpCit7CisgICAgdGhpcy5faXQxID0g
aXQxOworICAgIHRoaXMuX2l0MiA9IGl0MjsKK30KKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dEl0ZXJhdG9yc1R1cGxlLnByb3RvdHlwZSA9IHsKKyAgICBmaXJzdDogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgdGhpcy5faXQxLmZpcnN0KCk7CisgICAgICAgIHRoaXMuX2l0Mi5maXJzdCgp
OworICAgIH0sCisKKyAgICByZXNldEluc3RhbmNlc0NvdW50OiBmdW5jdGlvbigpCisgICAgewor
ICAgICAgICB0aGlzLl9pdDEucmVzZXRJbnN0YW5jZXNDb3VudCgpOworICAgICAgICB0aGlzLl9p
dDIucmVzZXRJbnN0YW5jZXNDb3VudCgpOworICAgIH0sCisKKyAgICBzb3J0OiBmdW5jdGlvbihj
b21wYXJhdG9yKQorICAgIHsKKyAgICAgICAgdGhpcy5faXQxLnNvcnQoY29tcGFyYXRvcik7Cisg
ICAgICAgIHRoaXMuX2l0Mi5zb3J0KGNvbXBhcmF0b3IpOworICAgIH0KK307CisKK1dlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3REaWZmTm9kZSA9IGZ1bmN0aW9uKHRyZWUsIGNvbnN0cnVjdG9yLCBi
YXNlQWdncmVnYXRlLCBhZ2dyZWdhdGUpCit7CisgICAgaWYgKCFiYXNlQWdncmVnYXRlKQorICAg
ICAgICBiYXNlQWdncmVnYXRlID0geyBjb3VudDogMCwgc2VsZjogMCwgbWF4UmV0OiAwLCB0eXBl
OmFnZ3JlZ2F0ZS50eXBlLCBuYW1lOmFnZ3JlZ2F0ZS5uYW1lLCBpZHhzOiBbXSB9OworICAgIGlm
ICghYWdncmVnYXRlKQorICAgICAgICBhZ2dyZWdhdGUgPSB7IGNvdW50OiAwLCBzZWxmOiAwLCBt
YXhSZXQ6IDAsIHR5cGU6YmFzZUFnZ3JlZ2F0ZS50eXBlLCBuYW1lOmJhc2VBZ2dyZWdhdGUubmFt
ZSwgaWR4czogW10gfTsKKyAgICBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R3JpZE5vZGUuY2Fs
bCh0aGlzLCB0cmVlLCB0cnVlLCA1MCk7CisgICAgdGhpcy5fbmFtZSA9IGNvbnN0cnVjdG9yOwor
ICAgIHRoaXMuX2NhbGN1bGF0ZURpZmYodHJlZS5iYXNlU25hcHNob3QsIHRyZWUuc25hcHNob3Qs
IGJhc2VBZ2dyZWdhdGUuaWR4cywgYWdncmVnYXRlLmlkeHMpOworICAgIHRoaXMuX3Byb3ZpZGVy
ID0gdGhpcy5fY3JlYXRlTm9kZXNQcm92aWRlcih0cmVlLmJhc2VTbmFwc2hvdCwgdHJlZS5zbmFw
c2hvdCwgYWdncmVnYXRlLnR5cGUsIGFnZ3JlZ2F0ZS5uYW1lKTsKK30KKworV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdERpZmZOb2RlLnByb3RvdHlwZSA9IHsKKyAgICBfY2FsY3VsYXRlRGlmZjog
ZnVuY3Rpb24oYmFzZVNuYXBzaG90LCBzbmFwc2hvdCwgYmFzZUluZGV4ZXMsIGN1cnJlbnRJbmRl
eGVzKQorICAgIHsKKyAgICAgICAgdmFyIGkgPSAwLCBsID0gYmFzZUluZGV4ZXMubGVuZ3RoOwor
ICAgICAgICB2YXIgaiA9IDAsIG0gPSBjdXJyZW50SW5kZXhlcy5sZW5ndGg7CisgICAgICAgIHRo
aXMuX2FkZGVkQ291bnQgPSAwOworICAgICAgICB0aGlzLl9yZW1vdmVkQ291bnQgPSAwOworICAg
ICAgICB0aGlzLl9hZGRlZFNpemUgPSAwOworICAgICAgICB0aGlzLl9yZW1vdmVkU2l6ZSA9IDA7
CisgICAgICAgIHZhciBub2RlQSA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZShi
YXNlU25hcHNob3QpOworICAgICAgICB2YXIgbm9kZUIgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdE5vZGUoc25hcHNob3QpOworICAgICAgICBub2RlQS5ub2RlSW5kZXggPSBiYXNlSW5k
ZXhlc1tpXTsKKyAgICAgICAgbm9kZUIubm9kZUluZGV4ID0gY3VycmVudEluZGV4ZXNbal07Cisg
ICAgICAgIHdoaWxlIChpIDwgbCAmJiBqIDwgbSkgeworICAgICAgICAgICAgaWYgKG5vZGVBLmlk
IDwgbm9kZUIuaWQpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVkQ291bnQrKzsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVkU2l6ZSArPSBub2RlQS5zZWxmU2l6ZTsKKyAgICAg
ICAgICAgICAgICBub2RlQS5ub2RlSW5kZXggPSBiYXNlSW5kZXhlc1srK2ldOworICAgICAgICAg
ICAgfSBlbHNlIGlmIChub2RlQS5pZCA+IG5vZGVCLmlkKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5fYWRkZWRDb3VudCsrOworICAgICAgICAgICAgICAgIHRoaXMuX2FkZGVkU2l6ZSArPSBub2Rl
Qi5zZWxmU2l6ZTsKKyAgICAgICAgICAgICAgICBub2RlQi5ub2RlSW5kZXggPSBjdXJyZW50SW5k
ZXhlc1srK2pdOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgbm9kZUEubm9kZUluZGV4ID0gYmFzZUluZGV4ZXNbKytpXTsKKyAgICAgICAgICAg
ICAgICBub2RlQi5ub2RlSW5kZXggPSBjdXJyZW50SW5kZXhlc1srK2pdOyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoaSA8IGwpIHsKKyAg
ICAgICAgICAgIHRoaXMuX3JlbW92ZWRDb3VudCsrOworICAgICAgICAgICAgdGhpcy5fcmVtb3Zl
ZFNpemUgKz0gbm9kZUEuc2VsZlNpemU7CisgICAgICAgICAgICBub2RlQS5ub2RlSW5kZXggPSBi
YXNlSW5kZXhlc1srK2ldOworICAgICAgICB9CisgICAgICAgIHdoaWxlIChqIDwgbSkgeworICAg
ICAgICAgICAgdGhpcy5fYWRkZWRDb3VudCsrOworICAgICAgICAgICAgdGhpcy5fYWRkZWRTaXpl
ICs9IG5vZGVCLnNlbGZTaXplOworICAgICAgICAgICAgbm9kZUIubm9kZUluZGV4ID0gY3VycmVu
dEluZGV4ZXNbKytqXTsgICAgICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICAgICAgdGhpcy5f
Y291bnREZWx0YSA9IHRoaXMuX2FkZGVkQ291bnQgLSB0aGlzLl9yZW1vdmVkQ291bnQ7CisgICAg
ICAgIHRoaXMuX3NpemVEZWx0YSA9IHRoaXMuX2FkZGVkU2l6ZSAtIHRoaXMuX3JlbW92ZWRTaXpl
OworICAgIH0sCisKKyAgICBfY3JlYXRlQ2hpbGROb2RlOiBmdW5jdGlvbihwcm92aWRlcikKKyAg
ICB7CisgICAgICAgIGlmIChwcm92aWRlciA9PT0gdGhpcy5fcHJvdmlkZXIuX2l0MSkKKyAgICAg
ICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEluc3RhbmNlTm9kZSh0
aGlzLmRhdGFHcmlkLCBudWxsLCBwcm92aWRlci5zbmFwc2hvdCwgcHJvdmlkZXIuaXRlbSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdEluc3RhbmNlTm9kZSh0aGlzLmRhdGFHcmlkLCBwcm92aWRlci5zbmFwc2hvdCwgbnVsbCwg
cHJvdmlkZXIuaXRlbSk7CisgICAgfSwKKworICAgIF9jcmVhdGVOb2Rlc1Byb3ZpZGVyOiBmdW5j
dGlvbihiYXNlU25hcHNob3QsIHNuYXBzaG90LCBub2RlVHlwZSwgbm9kZU5hbWUpCisgICAgewor
ICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RJdGVyYXRvcnNUdXBs
ZSgKKyAgICAgICAgICAgIGNyZWF0ZVByb3ZpZGVyKHNuYXBzaG90LCBiYXNlU25hcHNob3QpLCBj
cmVhdGVQcm92aWRlcihiYXNlU25hcHNob3QsIHNuYXBzaG90KSk7CisKKyAgICAgICAgZnVuY3Rp
b24gY3JlYXRlUHJvdmlkZXIoc25hcHNob3QsIG90aGVyU25hcHNob3QpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVzUHJvdmlk
ZXIoCisgICAgICAgICAgICAgICAgc25hcHNob3QsCisgICAgICAgICAgICAgICAgc25hcHNob3Qu
YWxsTm9kZXMsCisgICAgICAgICAgICAgICAgZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBub2RlLnR5cGUgPT09IG5vZGVUeXBlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgKG5vZGVOYW1lID09PSBudWxsIHx8IG5vZGUubmFtZSA9PT0gbm9kZU5hbWUp
CisgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIShub2RlLmlkIGluIG90aGVyU25hcHNob3Qu
aWRzTWFwKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBj
b21wYXJhdG9yOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgc29ydEFzY2VuZGluZyA9
IHRoaXMuZGF0YUdyaWQuc29ydE9yZGVyID09PSAiYXNjZW5kaW5nIjsKKyAgICAgICAgdmFyIHNv
cnRDb2x1bW5JZGVudGlmaWVyID0gdGhpcy5kYXRhR3JpZC5zb3J0Q29sdW1uSWRlbnRpZmllcjsK
KyAgICAgICAgdmFyIHNvcnRGaWVsZHMgPSB7CisgICAgICAgICAgICBvYmplY3Q6IFsiaWQiLCBz
b3J0QXNjZW5kaW5nLCAic2VsZlNpemUiLCBmYWxzZV0sCisgICAgICAgICAgICBhZGRlZENvdW50
OiBbInNlbGZTaXplIiwgc29ydEFzY2VuZGluZywgImlkIiwgdHJ1ZV0sCisgICAgICAgICAgICBy
ZW1vdmVkQ291bnQ6IFsic2VsZlNpemUiLCBzb3J0QXNjZW5kaW5nLCAiaWQiLCB0cnVlXSwKKyAg
ICAgICAgICAgIGNvdW50RGVsdGE6IFsic2VsZlNpemUiLCBzb3J0QXNjZW5kaW5nLCAiaWQiLCB0
cnVlXSwKKyAgICAgICAgICAgIGFkZGVkU2l6ZTogWyJzZWxmU2l6ZSIsIHNvcnRBc2NlbmRpbmcs
ICJpZCIsIHRydWVdLAorICAgICAgICAgICAgcmVtb3ZlZFNpemU6IFsic2VsZlNpemUiLCBzb3J0
QXNjZW5kaW5nLCAiaWQiLCB0cnVlXSwKKyAgICAgICAgICAgIHNpemVEZWx0YTogWyJzZWxmU2l6
ZSIsIHNvcnRBc2NlbmRpbmcsICJpZCIsIHRydWVdCisgICAgICAgIH1bc29ydENvbHVtbklkZW50
aWZpZXJdOworICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEZpbHRlcmVk
T3JkZXJlZEl0ZXJhdG9yLnByb3RvdHlwZS5jcmVhdGVDb21wYXJhdG9yKHNvcnRGaWVsZHMpOwor
ICAgIH0sCisKKyAgICBwb3B1bGF0ZUNoaWxkcmVuOiBmdW5jdGlvbihwcm92aWRlciwgaG93TWFu
eSwgYXRJbmRleCkKKyAgICB7CisgICAgICAgIGlmICghcHJvdmlkZXIgJiYgIWhvd01hbnkpIHsK
KyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHcmlkTm9kZS5wcm90b3R5cGUu
cG9wdWxhdGVDaGlsZHJlbi5jYWxsKHRoaXMsIHRoaXMuX3Byb3ZpZGVyLl9pdDEsIHRoaXMuX2Rl
ZmF1bHRQb3B1bGF0ZUNvdW50KTsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RHcmlkTm9kZS5wcm90b3R5cGUucG9wdWxhdGVDaGlsZHJlbi5jYWxsKHRoaXMsIHRoaXMuX3By
b3ZpZGVyLl9pdDIsIHRoaXMuX2RlZmF1bHRQb3B1bGF0ZUNvdW50KTsKKyAgICAgICAgfSBlbHNl
IGlmICghaG93TWFueSkgeworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdy
aWROb2RlLnByb3RvdHlwZS5wb3B1bGF0ZUNoaWxkcmVuLmNhbGwodGhpcywgdGhpcy5fcHJvdmlk
ZXIuX2l0MSk7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R3JpZE5vZGUu
cHJvdG90eXBlLnBvcHVsYXRlQ2hpbGRyZW4uY2FsbCh0aGlzLCB0aGlzLl9wcm92aWRlci5faXQy
KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
R3JpZE5vZGUucHJvdG90eXBlLnBvcHVsYXRlQ2hpbGRyZW4uY2FsbCh0aGlzLCBwcm92aWRlciwg
aG93TWFueSwgYXRJbmRleCk7CisgICAgfSwKKworICAgIF9zaWduRm9yRGVsdGE6IGZ1bmN0aW9u
KGRlbHRhKQorICAgIHsKKyAgICAgICAgaWYgKGRlbHRhID09PSAwKQorICAgICAgICAgICAgcmV0
dXJuICIiOworICAgICAgICBpZiAoZGVsdGEgPiAwKQorICAgICAgICAgICAgcmV0dXJuICIrIjsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuICJcdTIyMTIiOyAgLy8gTWF0aCBtaW51
cyBzaWduLCBzYW1lIHdpZHRoIGFzIHBsdXMuCisgICAgfSwKKworICAgIGdldCBkYXRhKCkKKyAg
ICB7CisgICAgICAgIHZhciBkYXRhID0ge29iamVjdDogdGhpcy5fbmFtZX07CisKKyAgICAgICAg
ZGF0YVsiYWRkZWRDb3VudCJdID0gdGhpcy5fYWRkZWRDb3VudDsKKyAgICAgICAgZGF0YVsicmVt
b3ZlZENvdW50Il0gPSB0aGlzLl9yZW1vdmVkQ291bnQ7CisgICAgICAgIGRhdGFbImNvdW50RGVs
dGEiXSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJXMlZCIsIHRoaXMuX3NpZ25Gb3JEZWx0YSh0
aGlzLl9jb3VudERlbHRhKSwgTWF0aC5hYnModGhpcy5fY291bnREZWx0YSkpOworICAgICAgICBk
YXRhWyJhZGRlZFNpemUiXSA9IE51bWJlci5ieXRlc1RvU3RyaW5nKHRoaXMuX2FkZGVkU2l6ZSk7
CisgICAgICAgIGRhdGFbInJlbW92ZWRTaXplIl0gPSBOdW1iZXIuYnl0ZXNUb1N0cmluZyh0aGlz
Ll9yZW1vdmVkU2l6ZSk7CisgICAgICAgIGRhdGFbInNpemVEZWx0YSJdID0gV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCIlcyVzIiwgdGhpcy5fc2lnbkZvckRlbHRhKHRoaXMuX3NpemVEZWx0YSksIE51
bWJlci5ieXRlc1RvU3RyaW5nKE1hdGguYWJzKHRoaXMuX3NpemVEZWx0YSkpKTsKKworICAgICAg
ICByZXR1cm4gZGF0YTsKKyAgICB9LAorCisgICAgZ2V0IHplcm9EaWZmKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0aGlzLl9hZGRlZENvdW50ID09PSAwICYmIHRoaXMuX3JlbW92ZWRDb3VudCA9
PT0gMDsKKyAgICB9Cit9OworCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGlmZk5vZGUucHJv
dG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHcmlkTm9kZS5wcm90
b3R5cGU7CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3REb21pbmF0b3JPYmplY3ROb2RlID0g
ZnVuY3Rpb24odHJlZSwgbm9kZSkKK3sKKyAgICB2YXIgcHJvdmlkZXIgPSB0aGlzLl9jcmVhdGVO
b2Rlc1Byb3ZpZGVyKHRyZWUuc25hcHNob3QsIG5vZGUubm9kZUluZGV4KTsKKyAgICBXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90R2VuZXJpY09iamVjdE5vZGUuY2FsbCh0aGlzLCB0cmVlLCBub2Rl
LCAhcHJvdmlkZXIuaXNFbXB0eSwgMjUpOworICAgIHRoaXMuX3Byb3ZpZGVyID0gcHJvdmlkZXI7
Cit9OworCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RG9taW5hdG9yT2JqZWN0Tm9kZS5wcm90
b3R5cGUgPSB7CisgICAgX2NyZWF0ZUNoaWxkTm9kZTogZnVuY3Rpb24ocHJvdmlkZXIpCisgICAg
eworICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REb21pbmF0b3JP
YmplY3ROb2RlKHRoaXMuZGF0YUdyaWQsIHByb3ZpZGVyLml0ZW0pOworICAgIH0sCisKKyAgICBf
Y3JlYXRlTm9kZXNQcm92aWRlcjogZnVuY3Rpb24oc25hcHNob3QsIG5vZGVJbmRleCkKKyAgICB7
CisgICAgICAgIHZhciBzaG93SGlkZGVuRGF0YSA9IFdlYkluc3BlY3Rvci5EZXRhaWxlZEhlYXBz
aG90Vmlldy5wcm90b3R5cGUuc2hvd0hpZGRlbkRhdGE7CisgICAgICAgIHJldHVybiBuZXcgV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVzUHJvdmlkZXIoCisgICAgICAgICAgICBzbmFwc2hv
dCwKKyAgICAgICAgICAgIHNuYXBzaG90LmFsbE5vZGVzLAorICAgICAgICAgICAgZnVuY3Rpb24g
KG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgdmFyIGRvbWluYXRvckluZGV4ID0gbm9kZS5kb21p
bmF0b3JJbmRleCgpOworICAgICAgICAgICAgICAgICByZXR1cm4gZG9taW5hdG9ySW5kZXggPT09
IG5vZGVJbmRleAorICAgICAgICAgICAgICAgICAgICAgJiYgZG9taW5hdG9ySW5kZXggIT09IG5v
ZGUubm9kZUluZGV4CisgICAgICAgICAgICAgICAgICAgICAmJiAoc2hvd0hpZGRlbkRhdGEgfHwg
IW5vZGUuaXNIaWRkZW4pOworICAgICAgICAgICAgfSk7CisgICAgfSwKKworICAgIF9jaGlsZEhh
c2hGb3JFbnRpdHk6IGZ1bmN0aW9uKG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gbm9kZS5p
ZDsKKyAgICB9LAorCisgICAgX2NoaWxkSGFzaEZvck5vZGU6IGZ1bmN0aW9uKGNoaWxkTm9kZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBjaGlsZE5vZGUuc25hcHNob3ROb2RlSWQ7CisgICAgfSwK
KworICAgIGNvbXBhcmF0b3I6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBzb3J0QXNj
ZW5kaW5nID0gdGhpcy5kYXRhR3JpZC5zb3J0T3JkZXIgPT09ICJhc2NlbmRpbmciOworICAgICAg
ICB2YXIgc29ydENvbHVtbklkZW50aWZpZXIgPSB0aGlzLmRhdGFHcmlkLnNvcnRDb2x1bW5JZGVu
dGlmaWVyOworICAgICAgICB2YXIgc29ydEZpZWxkcyA9IHsKKyAgICAgICAgICAgIG9iamVjdDog
WyJpZCIsIHNvcnRBc2NlbmRpbmcsICJyZXRhaW5lZFNpemUiLCBmYWxzZV0sCisgICAgICAgICAg
ICBzaGFsbG93U2l6ZTogWyJzZWxmU2l6ZSIsIHNvcnRBc2NlbmRpbmcsICJpZCIsIHRydWVdLAor
ICAgICAgICAgICAgcmV0YWluZWRTaXplOiBbInJldGFpbmVkU2l6ZSIsIHNvcnRBc2NlbmRpbmcs
ICJpZCIsIHRydWVdCisgICAgICAgIH1bc29ydENvbHVtbklkZW50aWZpZXJdOworICAgICAgICBy
ZXR1cm4gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEZpbHRlcmVkT3JkZXJlZEl0ZXJhdG9yLnBy
b3RvdHlwZS5jcmVhdGVDb21wYXJhdG9yKHNvcnRGaWVsZHMpOworICAgIH0sCisKKyAgICBfZW1w
dHlEYXRhOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4ge307CisgICAgfQorfTsK
KworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERvbWluYXRvck9iamVjdE5vZGUucHJvdG90eXBl
Ll9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHZW5lcmljT2JqZWN0Tm9kZS5w
cm90b3R5cGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0hlYXBTbmFwc2hvdC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVh
cFNuYXBzaG90LmpzCmluZGV4IGVmNDUwYWYuLjI3YTI5Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90LmpzCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90LmpzCkBAIC01NTIsMTQgKzU1
MiwxNCBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZSA9IHsKICAgICB9CiB9
OwogCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RmlsdGVyZWRPcmRlcmVkSXRlcmF0b3IgPSBm
dW5jdGlvbihzbmFwc2hvdCwgaXRlcmF0b3IsIGZpbHRlcikKK1dlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RGaWx0ZXJlZE9yZGVyZWRJdGVyYXRvciA9IGZ1bmN0aW9uKGl0ZXJhdG9yLCBmaWx0ZXIp
CiB7Ci0gICAgdGhpcy5fc25hcHNob3QgPSBzbmFwc2hvdDsKICAgICB0aGlzLl9maWx0ZXIgPSBm
aWx0ZXI7CiAgICAgdGhpcy5faXRlcmF0b3IgPSBpdGVyYXRvcjsKICAgICB0aGlzLl9pdGVyYXRp
b25PcmRlciA9IG51bGw7CiAgICAgdGhpcy5fcG9zaXRpb24gPSAwOwogICAgIHRoaXMuX2xhc3RD
b21wYXJhdG9yID0gbnVsbDsKKyAgICB0aGlzLl9pbnN0YW5jZXNDb3VudCA9IDA7CiB9CiAKIFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RGaWx0ZXJlZE9yZGVyZWRJdGVyYXRvci5wcm90b3R5cGUg
PSB7CkBAIC01ODgsNiArNTg4LDE2IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RGaWx0ZXJl
ZE9yZGVyZWRJdGVyYXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiB0aGlzLl9wb3Np
dGlvbiA8IHRoaXMuX2l0ZXJhdGlvbk9yZGVyLmxlbmd0aDsKICAgICB9LAogCisgICAgaW5jSW5z
dGFuY2VzQ291bnQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgICsrdGhpcy5faW5zdGFuY2Vz
Q291bnQ7CisgICAgfSwKKworICAgIGdldCBpbnN0YW5jZXNDb3VudCgpCisgICAgeworICAgICAg
ICByZXR1cm4gdGhpcy5faW5zdGFuY2VzQ291bnQ7CisgICAgfSwKKwogICAgIGdldCBpc0VtcHR5
KCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9pdGVyYXRpb25PcmRlcikKQEAgLTYyMyw2ICs2
MzMsMTEgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEZpbHRlcmVkT3JkZXJlZEl0ZXJhdG9y
LnByb3RvdHlwZSA9IHsKICAgICBuZXh0OiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICArK3Ro
aXMuX3Bvc2l0aW9uOworICAgIH0sCisKKyAgICByZXNldEluc3RhbmNlc0NvdW50OiBmdW5jdGlv
bigpCisgICAgeworICAgICAgICB0aGlzLl9pbnN0YW5jZXNDb3VudCA9IDA7CiAgICAgfQogfQog
CkBAIC02MzMsNyArNjQ4LDggQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEZpbHRlcmVkT3Jk
ZXJlZEl0ZXJhdG9yLnByb3RvdHlwZS5jcmVhdGVDb21wYXJhdG9yID0gZnUKIAogV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdEVkZ2VzUHJvdmlkZXIgPSBmdW5jdGlvbihzbmFwc2hvdCwgcmF3RWRn
ZXMsIGZpbHRlcikKIHsKLSAgICBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RmlsdGVyZWRPcmRl
cmVkSXRlcmF0b3IuY2FsbCh0aGlzLCBzbmFwc2hvdCwgbmV3IFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RFZGdlSXRlcmF0b3IobmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlKHNuYXBz
aG90LCByYXdFZGdlcykpLCBmaWx0ZXIpOworICAgIHRoaXMuc25hcHNob3QgPSBzbmFwc2hvdDsK
KyAgICBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RmlsdGVyZWRPcmRlcmVkSXRlcmF0b3IuY2Fs
bCh0aGlzLCBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2VJdGVyYXRvcihuZXcgV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2Uoc25hcHNob3QsIHJhd0VkZ2VzKSksIGZpbHRlcik7
CiB9CiAKIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlc1Byb3ZpZGVyLnByb3RvdHlwZSA9
IHsKQEAgLTY0OSw4ICs2NjUsOCBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZXNQcm92
aWRlci5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdmFyIGVkZ2VBID0gdGhpcy5faXRlcmF0b3Iu
aXRlbS5jbG9uZSgpOwogICAgICAgICB2YXIgZWRnZUIgPSBlZGdlQS5jbG9uZSgpOwotICAgICAg
ICB2YXIgbm9kZUEgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUodGhpcy5fc25h
cHNob3QpOwotICAgICAgICB2YXIgbm9kZUIgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dE5vZGUodGhpcy5fc25hcHNob3QpOworICAgICAgICB2YXIgbm9kZUEgPSBuZXcgV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdE5vZGUodGhpcy5zbmFwc2hvdCk7CisgICAgICAgIHZhciBub2RlQiA9
IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZSh0aGlzLnNuYXBzaG90KTsKIAogICAg
ICAgICBmdW5jdGlvbiBzb3J0QnlFZGdlRmllbGROYW1lKGFzY2VuZGluZywgaW5kZXhBLCBpbmRl
eEIpCiAgICAgICAgIHsKQEAgLTcxNSw3ICs3MzEsOCBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90RWRnZXNQcm92aWRlci5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLkhlYXBT
bgogCiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZXNQcm92aWRlciA9IGZ1bmN0aW9uKHNu
YXBzaG90LCBub2RlcywgZmlsdGVyKQogewotICAgIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RG
aWx0ZXJlZE9yZGVyZWRJdGVyYXRvci5jYWxsKHRoaXMsIHNuYXBzaG90LCBub2RlcywgZmlsdGVy
KTsKKyAgICB0aGlzLnNuYXBzaG90ID0gc25hcHNob3Q7CisgICAgV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdEZpbHRlcmVkT3JkZXJlZEl0ZXJhdG9yLmNhbGwodGhpcywgbm9kZXMsIGZpbHRlcik7
CiB9CiAKIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2Rlc1Byb3ZpZGVyLnByb3RvdHlwZSA9
IHsKQEAgLTcyOSw4ICs3NDYsOCBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZXNQcm92
aWRlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBhc2NlbmRpbmcxID0gY29tcGFyYXRvci5h
c2NlbmRpbmcxOwogICAgICAgICB2YXIgYXNjZW5kaW5nMiA9IGNvbXBhcmF0b3IuYXNjZW5kaW5n
MjsKIAotICAgICAgICB2YXIgbm9kZUEgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5v
ZGUodGhpcy5fc25hcHNob3QpOwotICAgICAgICB2YXIgbm9kZUIgPSBuZXcgV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdE5vZGUodGhpcy5fc25hcHNob3QpOworICAgICAgICB2YXIgbm9kZUEgPSBu
ZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUodGhpcy5zbmFwc2hvdCk7CisgICAgICAg
IHZhciBub2RlQiA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZSh0aGlzLnNuYXBz
aG90KTsKIAogICAgICAgICBmdW5jdGlvbiBzb3J0QnlOb2RlRmllbGQoZmllbGROYW1lLCBhc2Nl
bmRpbmcsIGluZGV4QSwgaW5kZXhCKQogICAgICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1BsZWFzZVdhaXRNZXNzYWdlLmpzIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9QbGVhc2VXYWl0TWVzc2FnZS5qcwppbmRleCA1NGQ4
MDVkLi5lMTk4MGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1BsZWFzZVdhaXRNZXNzYWdlLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvUGxlYXNlV2FpdE1lc3NhZ2UuanMKQEAgLTU5LDcgKzU5LDcgQEAgV2ViSW5zcGVj
dG9yLlBsZWFzZVdhaXRNZXNzYWdlLnByb3RvdHlwZSA9IHsKIAogICAgIGdldCBpbnN0YW5jZSgp
CiAgICAgewotICAgICAgICBpZiAoISJfaW5zdGFuY2UiIGluIFdlYkluc3BlY3Rvci5QbGVhc2VX
YWl0TWVzc2FnZS5wcm90b3R5cGUpCisgICAgICAgIGlmICghKCJfaW5zdGFuY2UiIGluIFdlYklu
c3BlY3Rvci5QbGVhc2VXYWl0TWVzc2FnZS5wcm90b3R5cGUpKQogICAgICAgICAgICAgV2ViSW5z
cGVjdG9yLlBsZWFzZVdhaXRNZXNzYWdlLnByb3RvdHlwZS5faW5zdGFuY2UgPSBuZXcgV2ViSW5z
cGVjdG9yLlBsZWFzZVdhaXRNZXNzYWdlKCk7CiAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3Iu
UGxlYXNlV2FpdE1lc3NhZ2UucHJvdG90eXBlLl9pbnN0YW5jZTsKICAgICB9LApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCmluZGV4IGRkMzI1YmEuLmJi
ZGZmOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2Vi
S2l0LnFyYworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5x
cmMKQEAgLTI3LDYgKzI3LDcgQEAKICAgICA8ZmlsZT5EYXRhYmFzZS5qczwvZmlsZT4KICAgICA8
ZmlsZT5EYXRhYmFzZVF1ZXJ5Vmlldy5qczwvZmlsZT4KICAgICA8ZmlsZT5EYXRhYmFzZVRhYmxl
Vmlldy5qczwvZmlsZT4KKyAgICA8ZmlsZT5EZXRhaWxlZEhlYXBzaG90R3JpZE5vZGVzLmpzPC9m
aWxlPgogICAgIDxmaWxlPkRldGFpbGVkSGVhcHNob3RWaWV3LmpzPC9maWxlPgogICAgIDxmaWxl
PkRhdGFHcmlkLmpzPC9maWxlPgogICAgIDxmaWxlPkRlYnVnZ2VyTW9kZWwuanM8L2ZpbGU+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5o
dG1sIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbApp
bmRleCAwNDM1ZGMzLi41NWIzMmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKQEAgLTE0Miw2ICsxNDIsNyBAQCBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
ICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlByb2ZpbGVWaWV3LmpzIj48
L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJIZWFwU25h
cHNob3QuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz
cmM9IkhlYXBTbmFwc2hvdFZpZXcuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4
dC9qYXZhc2NyaXB0IiBzcmM9IkRldGFpbGVkSGVhcHNob3RHcmlkTm9kZXMuanMiPjwvc2NyaXB0
PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkRldGFpbGVkSGVhcHNo
b3RWaWV3LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg
c3JjPSJEZWJ1Z2dlck1vZGVsLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCIgc3JjPSJET01BZ2VudC5qcyI+PC9zY3JpcHQ+Cg==
</data>
<flag name="review"
          id="73992"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
    <flag name="commit-queue"
          id="73993"
          type_id="3"
          status="-"
          setter="mnaganov"
    />
          </attachment>
      

    </bug>

</bugzilla>