<?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>66656</bug_id>
          
          <creation_ts>2011-08-22 03:13:23 -0700</creation_ts>
          <short_desc>Web Inspector: Prepare utilities.js for compilation</short_desc>
          <delta_ts>2011-08-23 02:23:46 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>66655</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Pavel Feldman">pfeldman</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>454514</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-08-22 03:13:23 -0700</bug_when>
    <thetext>Do not use &quot;this&quot; within non-prototypes, get rid of WebInspector dependencies</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454561</commentid>
    <comment_count>1</comment_count>
      <attachid>104669</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-08-22 06:16:54 -0700</bug_when>
    <thetext>Created attachment 104669
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454577</commentid>
    <comment_count>2</comment_count>
      <attachid>104673</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-08-22 06:53:54 -0700</bug_when>
    <thetext>Created attachment 104673
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454586</commentid>
    <comment_count>3</comment_count>
      <attachid>104673</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-08-22 07:22:56 -0700</bug_when>
    <thetext>Comment on attachment 104673
Patch

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

&gt; Source/WebCore/inspector/front-end/ConsoleView.js:999
&gt; +        formatters.s = formatters.f = formatters.i = formatters.d = valueFormatter;

Split to multiple lines or use a for?

&gt; Source/WebCore/inspector/front-end/DOMAgent.js:249
&gt; +        var currentNode = node.parentNode;
&gt; +        while (currentNode) {
&gt; +            if (this === currentNode)
&gt; +                return true;
&gt; +            currentNode = currentNode.parentNode;
&gt; +        }

nit: this is better written as a for loop (I know you&apos;re just moving it around, hence just a nit)

&gt; Source/WebCore/inspector/front-end/DOMAgent.js:255
&gt; +        return descendant !== null &amp;&amp; descendant.isAncestor(this);

return !!descendant &amp;&amp; descendant.isAncestor(this);

&gt; Source/WebCore/inspector/front-end/DOMAgent.js:264
&gt; +        if (!this.nodeValue.length)
&gt; +            return true;
&gt; +        return this.nodeValue.match(/^[\s\xA0]+$/);

nit: do we need an explicit optimization here? also, why do we use match() instead of test()?
This would be more readable as /^\s*$/.test(this.nodeValue);

&gt; Source/WebCore/inspector/front-end/ElementsPanel.js:482
&gt; +            if (!updateBreadcrumbs &amp;&amp; (this.selectedDOMNode() === parent || this.selectedDOMNode().isAncestor(parent)))

This seems to have slightly different semantics to the old code.

&gt; Source/WebCore/inspector/front-end/utilities.js:481
&gt;      while (currentNode) {
&gt; -        if (ancestor === currentNode)
&gt; +        if (this === currentNode)
&gt;              return true;
&gt;          currentNode = currentNode.parentNode;
&gt;      }

nit: for?

&gt; Source/WebCore/inspector/front-end/utilities.js:487
&gt; +    return descendant !== null &amp;&amp; descendant.isAncestor(this);

!!descendant &amp;&amp; ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454593</commentid>
    <comment_count>4</comment_count>
      <attachid>104673</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-08-22 07:32:36 -0700</bug_when>
    <thetext>Comment on attachment 104673
Patch

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

&gt;&gt; Source/WebCore/inspector/front-end/ConsoleView.js:999
&gt;&gt; +        formatters.s = formatters.f = formatters.i = formatters.d = valueFormatter;
&gt; 
&gt; Split to multiple lines or use a for?

Done.

&gt;&gt; Source/WebCore/inspector/front-end/DOMAgent.js:249
&gt;&gt; +        }
&gt; 
&gt; nit: this is better written as a for loop (I know you&apos;re just moving it around, hence just a nit)

I don&apos;t want to change anything...

&gt;&gt; Source/WebCore/inspector/front-end/DOMAgent.js:255
&gt;&gt; +        return descendant !== null &amp;&amp; descendant.isAncestor(this);
&gt; 
&gt; return !!descendant &amp;&amp; descendant.isAncestor(this);

Done.

&gt;&gt; Source/WebCore/inspector/front-end/utilities.js:481
&gt;&gt;      }
&gt; 
&gt; nit: for?

Did not want to change much

&gt;&gt; Source/WebCore/inspector/front-end/utilities.js:487
&gt;&gt; +    return descendant !== null &amp;&amp; descendant.isAncestor(this);
&gt; 
&gt; !!descendant &amp;&amp; ...

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454594</commentid>
    <comment_count>5</comment_count>
      <attachid>104678</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-08-22 07:35:02 -0700</bug_when>
    <thetext>Created attachment 104678
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454600</commentid>
    <comment_count>6</comment_count>
      <attachid>104678</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-08-22 07:44:25 -0700</bug_when>
    <thetext>Comment on attachment 104678
Patch

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455263</commentid>
    <comment_count>7</comment_count>
      <attachid>104678</attachid>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2011-08-23 02:10:27 -0700</bug_when>
    <thetext>Comment on attachment 104678
Patch

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

&gt; Source/WebCore/inspector/front-end/inspector.js:1720
&gt; +Number.secondsToString = function(seconds, higherResolution)

Might as well fix these two methods up with some nice JS doc comments now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455269</commentid>
    <comment_count>8</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-08-23 02:23:46 -0700</bug_when>
    <thetext>Committed r93584: &lt;http://trac.webkit.org/changeset/93584&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104669</attachid>
            <date>2011-08-22 06:16:54 -0700</date>
            <delta_ts>2011-08-22 06:53:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66656-20110822171651.patch</filename>
            <type>text/plain</type>
            <size>36147</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM1MDEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlYTgxNWVmNjg4ZDRiMTQ4
ZGI1NThmOTMxN2M3MmY0ZjYzNDM1YjU1Li5kNTFiMWMwNzY5ZWY4ODA0ZjQ1NDIzM2FmOGQxNWE0
NDU3YjZiODYyIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjMgQEAKKzIwMTEtMDgtMjIgIFBhdmVs
IEZlbGRtYW4gIDxwZmVsZG1hbkBnb29nbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6
IFByZXBhcmUgdXRpbGl0aWVzLmpzIGZvciBjb21waWxhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2NjU2CisKKyAgICAgICAgUmVtb3ZlcyAi
dGhpcyIgdXNhZ2UgaW4gZnVuY3Rpb25zLCBkb2VzIG5vdCBkZWZpbmUgZ2V0dGVycyBmb3Igb2Zm
c2V0cy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVZpZXcuanM6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQ29uc29sZU1lc3NhZ2UucHJvdG90eXBlLl9mb3JtYXQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkNvbnNvbGVNZXNzYWdlLnByb3RvdHlwZS5fZm9ybWF0V2l0aFN1YnN0aXR1dGlvblN0cmlu
Zy52YWx1ZUZvcm1hdHRlcik6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2Vu
dC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5hcHByb3ByaWF0
ZVNlbGVjdG9yRm9yKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5p
c0FuY2VzdG9yKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5pc0Rl
c2NlbmRhbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLmlzV2hp
dGVzcGFjZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhR3JpZC5qczoKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5EYXRhR3JpZC5wcm90b3R5cGUuX3Jlc2l6ZXJEcmFnZ2luZyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YUdyaWROb2RlLnByb3RvdHlwZS5pc0V2ZW50V2l0
aGluRGlzY2xvc3VyZVRyaWFuZ2xlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0Ry
YXdlci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLmdldCBzYXZl
ZEhlaWdodCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5vblJlc2l6
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5fc3RhcnRTdGF0dXNC
YXJEcmFnZ2luZyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5fc3Rh
dHVzQmFyRHJhZ2dpbmcpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQ
YW5lbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlwZS51
cGRhdGVNb2RpZmllZE5vZGVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVs
LnByb3RvdHlwZS51cGRhdGVCcmVhZGNydW1iKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVt
ZW50c1BhbmVsLnByb3RvdHlwZS51cGRhdGVCcmVhZGNydW1iU2l6ZXMuY3J1bWJzQXJlU21hbGxl
clRoYW5Db250YWluZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNU
cmVlT3V0bGluZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5l
LnByb3RvdHlwZS5maW5kVHJlZUVsZW1lbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1l
bnRzVHJlZU91dGxpbmUucHJvdG90eXBlLl90cmVlRWxlbWVudEZyb21FdmVudCk6CisgICAgICAg
ICgpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvUmVtb3RlT2JqZWN0LmpzOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zy
b250LWVuZC9SZXNvdXJjZVRpbWluZ1ZpZXcuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVz
b3VyY2VUaW1pbmdWaWV3LmNyZWF0ZVRpbWluZ1RhYmxlKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
ZnJvbnQtZW5kL1Jlc291cmNlc1BhbmVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJhc2VT
dG9yYWdlVHJlZUVsZW1lbnQucHJvdG90eXBlLmlzRXZlbnRXaXRoaW5EaXNjbG9zdXJlVHJpYW5n
bGUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuX3N0YXJ0U2lkZWJhclJl
c2l6ZURyYWcpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU29mdENvbnRleHRNZW51
LmpzOgorICAgICAgICAoLldlYkluc3BlY3Rvci5Tb2Z0Q29udGV4dE1lbnUucHJvdG90eXBlLnNo
b3cpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvVG9vbGJhci5qczoKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Ub29sYmFyRHJvcGRvd24ucHJvdG90eXBlLnNob3cpOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvV2F0Y2hFeHByZXNzaW9uc1NpZGViYXJQYW5lLmpzOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLldhdGNoRXhwcmVzc2lvbnNTZWN0aW9uLnByb3RvdHlwZS5fdXBk
YXRlSG92ZXJlZEVsZW1lbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVj
dG9yLmpzOgorICAgICAgICAoTnVtYmVyLnNlY29uZHNUb1N0cmluZyk6CisgICAgICAgIChOdW1i
ZXIuYnl0ZXNUb1N0cmluZyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC90cmVlb3V0
bGluZS5qczoKKyAgICAgICAgKFRyZWVFbGVtZW50LnByb3RvdHlwZS5pc0V2ZW50V2l0aGluRGlz
Y2xvc3VyZVRyaWFuZ2xlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGll
cy5qczoKKyAgICAgICAgKHNldHVwUHJvdG90eXBlVXRpbGl0aWVzLkVsZW1lbnQucHJvdG90eXBl
LnRvdGFsT2Zmc2V0TGVmdCk6CisgICAgICAgIChzZXR1cFByb3RvdHlwZVV0aWxpdGllcy5FbGVt
ZW50LnByb3RvdHlwZS50b3RhbE9mZnNldFRvcCk6CisgICAgICAgIChzZXR1cFByb3RvdHlwZVV0
aWxpdGllcy5FbGVtZW50LnByb3RvdHlwZS5vZmZzZXRSZWxhdGl2ZVRvV2luZG93KToKKyAgICAg
ICAgKHNldHVwUHJvdG90eXBlVXRpbGl0aWVzKToKKyAgICAgICAgKHNldHVwUHJvdG90eXBlVXRp
bGl0aWVzLik6CisgICAgICAgICgpOgorCiAyMDExLTA4LTE4ICBQYXZlbCBQb2Rpdmlsb3YgIDxw
b2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGV4dHJhY3Qg
YnJlYWtwb2ludCBtYW5hZ2VtZW50IGNvZGUgdG8gYSBzZXBhcmF0ZSBjbGFzcyBhbmQgYWRkIHRl
c3RzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25z
b2xlVmlldy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVZp
ZXcuanMKaW5kZXggOTI2MmU1Y2JiN2MwYmJjNzFiM2VhMTQ4NmViOTBlMGU5Y2UxZjRlZS4uMTVm
MDBjNDEzOGY0MjdlNDMxYTEwNzhlNTU2YWRlNTVhZDg1MjdkNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qcworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzCkBAIC05ODAsOCArOTgw
LDYgQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLnByb3RvdHlwZSA9IHsKICAgICBfZm9y
bWF0V2l0aFN1YnN0aXR1dGlvblN0cmluZzogZnVuY3Rpb24ocGFyYW1ldGVycywgZm9ybWF0dGVk
UmVzdWx0KQogICAgIHsKICAgICAgICAgdmFyIGZvcm1hdHRlcnMgPSB7fQotICAgICAgICBmb3Ig
KHZhciBpIGluIFN0cmluZy5zdGFuZGFyZEZvcm1hdHRlcnMpCi0gICAgICAgICAgICBmb3JtYXR0
ZXJzW2ldID0gU3RyaW5nLnN0YW5kYXJkRm9ybWF0dGVyc1tpXTsKIAogICAgICAgICBmdW5jdGlv
biBjb25zb2xlRm9ybWF0V3JhcHBlcihmb3JjZSkKICAgICAgICAgewpAQCAtOTkwLDEwICs5ODgs
MTUgQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLnByb3RvdHlwZSA9IHsKICAgICAgICAg
ICAgIH07CiAgICAgICAgIH0KIAorICAgICAgICBmdW5jdGlvbiB2YWx1ZUZvcm1hdHRlcihvYmop
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBvYmouZGVzY3JpcHRpb247CisgICAgICAg
IH0KKwogICAgICAgICAvLyBGaXJlYnVnIHVzZXMgJW8gZm9yIGZvcm1hdHRpbmcgb2JqZWN0cy4K
ICAgICAgICAgZm9ybWF0dGVycy5vID0gY29uc29sZUZvcm1hdFdyYXBwZXIoKTsKICAgICAgICAg
Ly8gRmlyZWJ1ZyBhbGxvd3MgYm90aCAlaSBhbmQgJWQgZm9yIGZvcm1hdHRpbmcgaW50ZWdlcnMu
Ci0gICAgICAgIGZvcm1hdHRlcnMuaSA9IGZvcm1hdHRlcnMuZDsKKyAgICAgICAgZm9ybWF0dGVy
cy5zID0gZm9ybWF0dGVycy5mID0gZm9ybWF0dGVycy5pID0gZm9ybWF0dGVycy5kID0gdmFsdWVG
b3JtYXR0ZXI7CiAgICAgICAgIC8vIFN1cHBvcnQgJU8gdG8gZm9yY2Ugb2JqZWN0IGZvcm1hdHRp
bmcsIGluc3RlYWQgb2YgdGhlIHR5cGUtYmFzZWQgJW8gZm9ybWF0dGluZy4KICAgICAgICAgZm9y
bWF0dGVycy5PID0gY29uc29sZUZvcm1hdFdyYXBwZXIodHJ1ZSk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzCmluZGV4IDczMDAzNzFhYjc3MDJl
ZmI5NGY1M2UyMjQ4NjRhNDQ1NDljZjNlMDkuLjA1NGZhNzhiMGRjMjRhNGUxOGFiMjlmZjJlN2Q4
NDk3MTViYWNiN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvRE9NQWdlbnQuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9E
T01BZ2VudC5qcwpAQCAtMjE2LDcgKzIxNiw3IEBAIFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3Rv
dHlwZSA9IHsKIAogICAgIGFwcHJvcHJpYXRlU2VsZWN0b3JGb3I6IGZ1bmN0aW9uKGp1c3RTZWxl
Y3RvcikKICAgICB7Ci0gICAgICAgIHZhciBsb3dlckNhc2VOYW1lID0gdGhpcy5sb2NhbE5hbWUo
KSB8fCBub2RlLm5vZGVOYW1lKCkudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgdmFyIGxvd2VyQ2Fz
ZU5hbWUgPSB0aGlzLmxvY2FsTmFtZSgpIHx8IHRoaXMubm9kZU5hbWUoKS50b0xvd2VyQ2FzZSgp
OwogCiAgICAgICAgIHZhciBpZCA9IHRoaXMuZ2V0QXR0cmlidXRlKCJpZCIpOwogICAgICAgICBp
ZiAoaWQpIHsKQEAgLTIzNiw2ICsyMzYsMzQgQEAgV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90
eXBlID0gewogICAgICAgICByZXR1cm4gbG93ZXJDYXNlTmFtZTsKICAgICB9LAogCisgICAgaXNB
bmNlc3RvcjogZnVuY3Rpb24obm9kZSkKKyAgICB7CisgICAgICAgIGlmICghbm9kZSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAgICAgdmFyIGN1cnJlbnROb2RlID0gbm9k
ZS5wYXJlbnROb2RlOworICAgICAgICB3aGlsZSAoY3VycmVudE5vZGUpIHsKKyAgICAgICAgICAg
IGlmICh0aGlzID09PSBjdXJyZW50Tm9kZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUucGFyZW50Tm9kZTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSwKKworICAgIGlzRGVzY2VuZGFudDog
ZnVuY3Rpb24oZGVzY2VuZGFudCkKKyAgICB7CisgICAgICAgIHJldHVybiBkZXNjZW5kYW50ICE9
PSBudWxsICYmIGRlc2NlbmRhbnQuaXNBbmNlc3Rvcih0aGlzKTsKKyAgICB9LAorCisgICAgaXNX
aGl0ZXNwYWNlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodGhpcy5ub2RlVHlwZSAh
PT0gTm9kZS5URVhUX05PREUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlm
ICghdGhpcy5ub2RlVmFsdWUubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIHJldHVybiB0aGlzLm5vZGVWYWx1ZS5tYXRjaCgvXltcc1x4QTBdKyQvKTsKKyAgICB9LAor
CiAgICAgX3NldEF0dHJpYnV0ZXNQYXlsb2FkOiBmdW5jdGlvbihhdHRycykKICAgICB7CiAgICAg
ICAgIHRoaXMuX2F0dHJpYnV0ZXMgPSBbXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvRGF0YUdyaWQuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0RhdGFHcmlkLmpzCmluZGV4IGMzNDgwNmQ3MTVlYmQ1YzlmYWIwMmMzYTczMDA2
M2NjNzRlMWQwYjIuLjIyYzg5NThiMzBhNTUxZTFkOGY3ZGY1ODQzYzZlNWE4OWFkOGM4N2EgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGF0YUdyaWQuanMK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhR3JpZC5qcwpAQCAt
OTY1LDcgKzk2NSw3IEBAIFdlYkluc3BlY3Rvci5EYXRhR3JpZC5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIAogICAgICAgICAvLyBDb25zdHJhaW4gdGhlIGRyYWdwb2ludCB0byBiZSB3aXRoaW4gdGhl
IGNvbnRhaW5pbmcgZGl2IG9mIHRoZQogICAgICAgICAvLyBkYXRhZ3JpZC4KLSAgICAgICAgdmFy
IGRyYWdQb2ludCA9IGV2ZW50LmNsaWVudFggLSB0aGlzLmVsZW1lbnQudG90YWxPZmZzZXRMZWZ0
OworICAgICAgICB2YXIgZHJhZ1BvaW50ID0gZXZlbnQuY2xpZW50WCAtIHRoaXMuZWxlbWVudC50
b3RhbE9mZnNldExlZnQoKTsKICAgICAgICAgLy8gQ29uc3RyYWluIHRoZSBkcmFncG9pbnQgdG8g
YmUgd2l0aGluIHRoZSBzcGFjZSBtYWRlIHVwIGJ5IHRoZQogICAgICAgICAvLyBjb2x1bW4gZGly
ZWN0bHkgdG8gdGhlIGxlZnQgYW5kIHRoZSBjb2x1bW4gZGlyZWN0bHkgdG8gdGhlIHJpZ2h0Lgog
ICAgICAgICB2YXIgbGVmdENlbGxJbmRleCA9IHJlc2l6ZXIubGVmdE5laWdoYm9yaW5nQ29sdW1u
SUQ7CkBAIC0xNDQ1LDcgKzE0NDUsNyBAQCBXZWJJbnNwZWN0b3IuRGF0YUdyaWROb2RlLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgaWYgKCFjZWxsLmhhc1N0eWxlQ2xhc3MoImRpc2Nsb3N1cmUiKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgdmFyIGNvbXB1dGVkTGVmdFBhZGRp
bmcgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjZWxsKS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJw
YWRkaW5nLWxlZnQiKS5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19QWCk7Ci0g
ICAgICAgIHZhciBsZWZ0ID0gY2VsbC50b3RhbE9mZnNldExlZnQgKyBjb21wdXRlZExlZnRQYWRk
aW5nOworICAgICAgICB2YXIgbGVmdCA9IGNlbGwudG90YWxPZmZzZXRMZWZ0KCkgKyBjb21wdXRl
ZExlZnRQYWRkaW5nOwogICAgICAgICByZXR1cm4gZXZlbnQucGFnZVggPj0gbGVmdCAmJiBldmVu
dC5wYWdlWCA8PSBsZWZ0ICsgdGhpcy5kaXNjbG9zdXJlVG9nZ2xlV2lkdGg7CiAgICAgfSwKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EcmF3ZXIuanMg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RyYXdlci5qcwppbmRleCA0ZWRh
ODRhNzhjMThjYzgzNDVhN2I4OGVjMzc1YTA0ZTFmYjg0YTNjLi42ODVhNjZmNTAwNzdlYTcwOTBl
YzIwMjE0NDkwZTA2YTQwNmU0OTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0RyYXdlci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0RyYXdlci5qcwpAQCAtNzcsNyArNzcsNyBAQCBXZWJJbnNwZWN0b3IuRHJhd2VyLnBy
b3RvdHlwZSA9IHsKICAgICBnZXQgc2F2ZWRIZWlnaHQoKQogICAgIHsKICAgICAgICAgdmFyIGhl
aWdodCA9IHRoaXMuX3NhdmVkSGVpZ2h0IHx8IHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQ7Ci0g
ICAgICAgIHJldHVybiBOdW1iZXIuY29uc3RyYWluKGhlaWdodCwgUHJlZmVyZW5jZXMubWluQ29u
c29sZUhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IC0gdGhpcy5fbWFpbkVsZW1lbnQudG90YWxP
ZmZzZXRUb3AgLSBQcmVmZXJlbmNlcy5taW5Db25zb2xlSGVpZ2h0KTsKKyAgICAgICAgcmV0dXJu
IE51bWJlci5jb25zdHJhaW4oaGVpZ2h0LCBQcmVmZXJlbmNlcy5taW5Db25zb2xlSGVpZ2h0LCB3
aW5kb3cuaW5uZXJIZWlnaHQgLSB0aGlzLl9tYWluRWxlbWVudC50b3RhbE9mZnNldFRvcCgpIC0g
UHJlZmVyZW5jZXMubWluQ29uc29sZUhlaWdodCk7CiAgICAgfSwKIAogICAgIHNob3dWaWV3OiBm
dW5jdGlvbih2aWV3KQpAQCAtMjA2LDcgKzIwNiw3IEBAIFdlYkluc3BlY3Rvci5EcmF3ZXIucHJv
dG90eXBlID0gewogICAgICAgICB2YXIgaGVpZ2h0OwogICAgICAgICBpZiAodGhpcy5zdGF0ZSA9
PT0gV2ViSW5zcGVjdG9yLkRyYXdlci5TdGF0ZS5WYXJpYWJsZSkgewogICAgICAgICAgICAgaGVp
Z2h0ID0gcGFyc2VJbnQodGhpcy5lbGVtZW50LnN0eWxlLmhlaWdodCk7Ci0gICAgICAgICAgICBo
ZWlnaHQgPSBOdW1iZXIuY29uc3RyYWluKGhlaWdodCwgUHJlZmVyZW5jZXMubWluQ29uc29sZUhl
aWdodCwgd2luZG93LmlubmVySGVpZ2h0IC0gdGhpcy5fbWFpbkVsZW1lbnQudG90YWxPZmZzZXRU
b3AgLSBQcmVmZXJlbmNlcy5taW5Db25zb2xlSGVpZ2h0KTsKKyAgICAgICAgICAgIGhlaWdodCA9
IE51bWJlci5jb25zdHJhaW4oaGVpZ2h0LCBQcmVmZXJlbmNlcy5taW5Db25zb2xlSGVpZ2h0LCB3
aW5kb3cuaW5uZXJIZWlnaHQgLSB0aGlzLl9tYWluRWxlbWVudC50b3RhbE9mZnNldFRvcCgpIC0g
UHJlZmVyZW5jZXMubWluQ29uc29sZUhlaWdodCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgaGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IC0gdGhpcy5fdG9vbGJhckVsZW1lbnQub2Zm
c2V0SGVpZ2h0OwogCkBAIC0zMzEsNyArMzMxLDcgQEAgV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90
b3R5cGUgPSB7CiAKICAgICAgICAgV2ViSW5zcGVjdG9yLmVsZW1lbnREcmFnU3RhcnQodGhpcy5f
bWFpblN0YXR1c0JhciwgdGhpcy5fc3RhdHVzQmFyRHJhZ2dpbmcuYmluZCh0aGlzKSwgdGhpcy5f
ZW5kU3RhdHVzQmFyRHJhZ2dpbmcuYmluZCh0aGlzKSwgZXZlbnQsICJyb3ctcmVzaXplIik7CiAK
LSAgICAgICAgdGhpcy5fc3RhdHVzQmFyRHJhZ09mZnNldCA9IGV2ZW50LnBhZ2VZIC0gdGhpcy5l
bGVtZW50LnRvdGFsT2Zmc2V0VG9wOworICAgICAgICB0aGlzLl9zdGF0dXNCYXJEcmFnT2Zmc2V0
ID0gZXZlbnQucGFnZVkgLSB0aGlzLmVsZW1lbnQudG90YWxPZmZzZXRUb3AoKTsKIAogICAgICAg
ICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICB9LApAQCAtMzM5LDcgKzMzOSw3IEBAIFdl
Ykluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlID0gewogICAgIF9zdGF0dXNCYXJEcmFnZ2luZzog
ZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICB2YXIgaGVpZ2h0ID0gd2luZG93LmlubmVy
SGVpZ2h0IC0gZXZlbnQucGFnZVkgKyB0aGlzLl9zdGF0dXNCYXJEcmFnT2Zmc2V0OwotICAgICAg
ICBoZWlnaHQgPSBOdW1iZXIuY29uc3RyYWluKGhlaWdodCwgUHJlZmVyZW5jZXMubWluQ29uc29s
ZUhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IC0gdGhpcy5fbWFpbkVsZW1lbnQudG90YWxPZmZz
ZXRUb3AgLSBQcmVmZXJlbmNlcy5taW5Db25zb2xlSGVpZ2h0KTsKKyAgICAgICAgaGVpZ2h0ID0g
TnVtYmVyLmNvbnN0cmFpbihoZWlnaHQsIFByZWZlcmVuY2VzLm1pbkNvbnNvbGVIZWlnaHQsIHdp
bmRvdy5pbm5lckhlaWdodCAtIHRoaXMuX21haW5FbGVtZW50LnRvdGFsT2Zmc2V0VG9wKCkgLSBQ
cmVmZXJlbmNlcy5taW5Db25zb2xlSGVpZ2h0KTsKIAogICAgICAgICB0aGlzLl9tYWluRWxlbWVu
dC5zdHlsZS5ib3R0b20gPSBoZWlnaHQgKyAicHgiOwogICAgICAgICB0aGlzLmVsZW1lbnQuc3R5
bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgInB4IjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcwppbmRleCAzYmM3ZmMxMjFlNTQ3NDQ5M2M1
MDBhNDJlNGNmYzkwNjQ0MTE0ZTM5Li40YWIwMjdkYTlmY2U5OWJkYjQ5ZGEwZmJlY2JmNjJmNDU5
MGM1MWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Vs
ZW1lbnRzUGFuZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9F
bGVtZW50c1BhbmVsLmpzCkBAIC00NzksNyArNDc5LDcgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRz
UGFuZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIHVwZGF0ZWRQYXJlbnRUcmVlRWxl
bWVudHMucHVzaChwYXJlbnROb2RlSXRlbSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGlmICghdXBkYXRlQnJlYWRjcnVtYnMgJiYgKHRoaXMuc2VsZWN0ZWRET01Ob2RlKCkgPT09IHBh
cmVudCB8fCBpc0FuY2VzdG9yTm9kZSh0aGlzLnNlbGVjdGVkRE9NTm9kZSgpLCBwYXJlbnQpKSkK
KyAgICAgICAgICAgIGlmICghdXBkYXRlQnJlYWRjcnVtYnMgJiYgKHRoaXMuc2VsZWN0ZWRET01O
b2RlKCkgPT09IHBhcmVudCB8fCB0aGlzLnNlbGVjdGVkRE9NTm9kZSgpLmlzQW5jZXN0b3IocGFy
ZW50KSkpCiAgICAgICAgICAgICAgICAgdXBkYXRlQnJlYWRjcnVtYnMgPSB0cnVlOwogICAgICAg
ICB9CiAKQEAgLTYyMSw3ICs2MjEsNyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbC5wcm90
b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAg
Y2FzZSBOb2RlLlRFWFRfTk9ERToKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzTm9kZVdoaXRl
c3BhY2UuY2FsbChjdXJyZW50KSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQuaXNX
aGl0ZXNwYWNlKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjcnVtYlRpdGxlID0gV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCIod2hpdGVzcGFjZSkiKTsKICAgICAgICAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgICAgICAgICAgY3J1bWJUaXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0
cmluZygiKHRleHQpIik7CkBAIC03ODMsNyArNzgzLDcgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRz
UGFuZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAgdmFyIGVycm9yV2FybmluZ0VsZW1lbnQg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXJyb3Itd2FybmluZy1jb3VudCIpOwogICAgICAg
ICAgICAgaWYgKCFXZWJJbnNwZWN0b3IuZHJhd2VyLnZpc2libGUgJiYgZXJyb3JXYXJuaW5nRWxl
bWVudCkKICAgICAgICAgICAgICAgICByaWdodFBhZGRpbmcgKz0gZXJyb3JXYXJuaW5nRWxlbWVu
dC5vZmZzZXRXaWR0aDsKLSAgICAgICAgICAgIHJldHVybiAoKGNydW1icy50b3RhbE9mZnNldExl
ZnQgKyBjcnVtYnMub2Zmc2V0V2lkdGggKyByaWdodFBhZGRpbmcpIDwgd2luZG93LmlubmVyV2lk
dGgpOworICAgICAgICAgICAgcmV0dXJuICgoY3J1bWJzLnRvdGFsT2Zmc2V0TGVmdCgpICsgY3J1
bWJzLm9mZnNldFdpZHRoICsgcmlnaHRQYWRkaW5nKSA8IHdpbmRvdy5pbm5lcldpZHRoKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGlmIChjcnVtYnNBcmVTbWFsbGVyVGhhbkNvbnRhaW5lcigpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1Ry
ZWVPdXRsaW5lLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50
c1RyZWVPdXRsaW5lLmpzCmluZGV4IDNkOTBlYzVmMzRlZDY4NzE4M2UyNjIwNWE1ZDQyNjQ2YTUx
YzFjYWEuLmFhNjE3Nzg3YzVmYTUxZGEzNmVkNmM1ZTc3Mjc5ODYzYmFkMWUxZWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGlu
ZS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzVHJl
ZU91dGxpbmUuanMKQEAgLTE0Niw2ICsxNDYsMTAgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJl
ZU91dGxpbmUucHJvdG90eXBlID0gewogCiAgICAgZmluZFRyZWVFbGVtZW50OiBmdW5jdGlvbihu
b2RlKQogICAgIHsKKyAgICAgICAgZnVuY3Rpb24gaXNBbmNlc3Rvck5vZGUoYW5jZXN0b3IsIG5v
ZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhbmNlc3Rvci5pc0FuY2VzdG9yKG5v
ZGUpOworICAgICAgICB9CiAgICAgICAgIHZhciB0cmVlRWxlbWVudCA9IFRyZWVPdXRsaW5lLnBy
b3RvdHlwZS5maW5kVHJlZUVsZW1lbnQuY2FsbCh0aGlzLCBub2RlLCBpc0FuY2VzdG9yTm9kZSwg
cGFyZW50Tm9kZSk7CiAgICAgICAgIGlmICghdHJlZUVsZW1lbnQgJiYgbm9kZS5ub2RlVHlwZSgp
ID09PSBOb2RlLlRFWFRfTk9ERSkgewogICAgICAgICAgICAgLy8gVGhlIHRleHQgbm9kZSBtaWdo
dCBoYXZlIGJlZW4gaW5saW5lZCBpZiBpdCB3YXMgc2hvcnQsIHNvIHRyeSB0byBmaW5kIHRoZSBw
YXJlbnQgZWxlbWVudC4KQEAgLTE5Nyw3ICsyMDEsNyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNU
cmVlT3V0bGluZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIC8vIGl0ZW1zIGV4dGVuZCBhdCBsZWFz
dCB0byB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgb3V0ZXIgPG9sPiBjb250YWluZXIuCiAgICAgICAg
IC8vIEluIHRoZSBuby13b3JkLXdyYXAgbW9kZSB0aGUgb3V0ZXIgPG9sPiBtYXkgYmUgd2lkZXIg
dGhhbiB0aGUgdHJlZSBjb250YWluZXIKICAgICAgICAgLy8gKGFuZCBwYXJ0aWFsbHkgaGlkZGVu
KSwgaW4gd2hpY2ggY2FzZSB3ZSBhcmUgbGVmdCB0byB1c2Ugb25seSBpdHMgcmlnaHQgYm91bmRh
cnkuCi0gICAgICAgIHZhciB4ID0gc2Nyb2xsQ29udGFpbmVyLnRvdGFsT2Zmc2V0TGVmdCArIHNj
cm9sbENvbnRhaW5lci5vZmZzZXRXaWR0aCAtIDM2OworICAgICAgICB2YXIgeCA9IHNjcm9sbENv
bnRhaW5lci50b3RhbE9mZnNldExlZnQoKSArIHNjcm9sbENvbnRhaW5lci5vZmZzZXRXaWR0aCAt
IDM2OwogCiAgICAgICAgIHZhciB5ID0gZXZlbnQucGFnZVk7CiAKQEAgLTE0NjYsNyArMTQ3MCw3
IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAg
ICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBOb2RlLlRFWFRfTk9ERToKLSAg
ICAgICAgICAgICAgICBpZiAoaXNOb2RlV2hpdGVzcGFjZS5jYWxsKG5vZGUpKQorICAgICAgICAg
ICAgICAgIGlmIChub2RlLmlzV2hpdGVzcGFjZSgpKQogICAgICAgICAgICAgICAgICAgICBpbmZv
LnRpdGxlRE9NLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIod2hpdGVzcGFj
ZSkiKSk7CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChu
b2RlLnBhcmVudE5vZGUgJiYgbm9kZS5wYXJlbnROb2RlLm5vZGVOYW1lKCkudG9Mb3dlckNhc2Uo
KSA9PT0gInNjcmlwdCIpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvUmVtb3RlT2JqZWN0LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9SZW1vdGVPYmplY3QuanMKaW5kZXggODlkMDE3NGUyYjUzNjgzNWYyMjE2ZDMyNjY5M2Ux
MjVhOTU4MzgwOS4uNzIwMTgxODk4MTkyNmNjMWQ1MDIzOTJhYjgzMmNjNzk5NjQ2NDJjYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZW1vdGVPYmplY3Qu
anMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZW1vdGVPYmplY3Qu
anMKQEAgLTQyLDYgKzQyLDcgQEAgV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdCA9IGZ1bmN0aW9u
KG9iamVjdElkLCB0eXBlLCBzdWJ0eXBlLCB2YWx1ZSwgZGVzY3JpcHRpb24KICAgICAgICAgY29u
c29sZS5hc3NlcnQodHlwZSAhPT0gIm9iamVjdCIgfHwgdmFsdWUgPT09IG51bGwpOwogICAgICAg
ICB0aGlzLl9kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uIHx8ICh2YWx1ZSArICIiKTsKICAgICAg
ICAgdGhpcy5faGFzQ2hpbGRyZW4gPSBmYWxzZTsKKyAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVl
OwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9SZXNvdXJjZVRpbWluZ1ZpZXcuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1Jlc291cmNlVGltaW5nVmlldy5qcwppbmRleCBlOTYyNGJmMDNiNWEyNzQyZmIwY2My
MTRjMzA4NTY3NjQxNTA3ZDFkLi4yZjEzZTkzZTUzNDJlNmEzYTI2MTU4NTA2ZDMwNGIzODM4N2E2
YzRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291
cmNlVGltaW5nVmlldy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1Jlc291cmNlVGltaW5nVmlldy5qcwpAQCAtMTQ4LDcgKzE0OCw3IEBAIFdlYkluc3BlY3Rvci5S
ZXNvdXJjZVRpbWluZ1ZpZXcuY3JlYXRlVGltaW5nVGFibGUgPSBmdW5jdGlvbihyZXNvdXJjZSkK
ICAgICAgICAgICAgIHRpdGxlLnN0eWxlLnJpZ2h0ID0gKHNjYWxlICogKHRvdGFsIC0gcm93c1tp
XS5lbmQpICsgMykgKyAicHgiOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB0aXRsZS5zdHls
ZS5sZWZ0ID0gKHNjYWxlICogcm93c1tpXS5zdGFydCArIDMpICsgInB4IjsKLSAgICAgICAgdGl0
bGUudGV4dENvbnRlbnQgPSBOdW1iZXIubWlsbGlzVG9TdHJpbmcocm93c1tpXS5lbmQgLSByb3dz
W2ldLnN0YXJ0KTsKKyAgICAgICAgdGl0bGUudGV4dENvbnRlbnQgPSBOdW1iZXIuc2Vjb25kc1Rv
U3RyaW5nKChyb3dzW2ldLmVuZCAtIHJvd3NbaV0uc3RhcnQpIC8gMTAwMCk7CiAgICAgICAgIHJv
dy5hcHBlbmRDaGlsZCh0aXRsZSk7CiAKICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZXNQYW5l
bC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VzUGFuZWwu
anMKaW5kZXggOTNmMzJlMTJiMjVkY2RhMjJkODc3YzIwMDgwNGFhODdiMzMwNWY0ZS4uNzNlZTdh
YmIzNjI5MDgyNTUyZjM4Nzg5ZTFjY2UyMmU0ZjZjOWY1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZXNQYW5lbC5qcworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlc1BhbmVsLmpzCkBAIC05NzIsNyAr
OTcyLDcgQEAgV2ViSW5zcGVjdG9yLkJhc2VTdG9yYWdlVHJlZUVsZW1lbnQucHJvdG90eXBlID0g
ewogICAgICAgICAvLyBIZW5jZSB3ZSBuZWVkIHRvIHRha2UgcGFkZGluZyBpbnRvIGNvbnNpZGVy
YXRpb24uIFRoaXMgYWxsIGlzIG5lZWRlZCBmb3IgbGVhZGluZwogICAgICAgICAvLyBpY29ucyBp
biB0aGUgdHJlZS4KICAgICAgICAgY29uc3QgcGFkZGluZ0xlZnQgPSAxNDsKLSAgICAgICAgdmFy
IGxlZnQgPSB0aGlzLmxpc3RJdGVtRWxlbWVudC50b3RhbE9mZnNldExlZnQgKyBwYWRkaW5nTGVm
dDsKKyAgICAgICAgdmFyIGxlZnQgPSB0aGlzLmxpc3RJdGVtRWxlbWVudC50b3RhbE9mZnNldExl
ZnQoKSArIHBhZGRpbmdMZWZ0OwogICAgICAgICByZXR1cm4gZXZlbnQucGFnZVggPj0gbGVmdCAm
JiBldmVudC5wYWdlWCA8PSBsZWZ0ICsgdGhpcy5hcnJvd1RvZ2dsZVdpZHRoICYmIHRoaXMuaGFz
Q2hpbGRyZW47CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1NjcmlwdHNQYW5lbC5qcwppbmRleCBjZmFjNGEwODIyYmMxMWQ2ZTU2MzVlZWQxYzkz
YzMwZmU5OGQxODg1Li41YTg0MWVmZmFlYzUxZWQzZDhkNzMwZGMyODc2ZTVjZTg2ZTMwNzM5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5l
bC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5l
bC5qcwpAQCAtNzY0LDcgKzc2NCw3IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90
eXBlID0gewogICAgICAgICBXZWJJbnNwZWN0b3IuZWxlbWVudERyYWdTdGFydCh0aGlzLnNpZGVi
YXJFbGVtZW50LCB0aGlzLl9zaWRlYmFyUmVzaXplRHJhZy5iaW5kKHRoaXMpLCB0aGlzLl9lbmRT
aWRlYmFyUmVzaXplRHJhZy5iaW5kKHRoaXMpLCBldmVudCwgImV3LXJlc2l6ZSIpOwogCiAgICAg
ICAgIGlmIChldmVudC50YXJnZXQgPT09IHRoaXMuc2lkZWJhclJlc2l6ZVdpZGdldEVsZW1lbnQp
Ci0gICAgICAgICAgICB0aGlzLl9kcmFnT2Zmc2V0ID0gKGV2ZW50LnRhcmdldC5vZmZzZXRXaWR0
aCAtIChldmVudC5wYWdlWCAtIGV2ZW50LnRhcmdldC50b3RhbE9mZnNldExlZnQpKTsKKyAgICAg
ICAgICAgIHRoaXMuX2RyYWdPZmZzZXQgPSAoZXZlbnQudGFyZ2V0Lm9mZnNldFdpZHRoIC0gKGV2
ZW50LnBhZ2VYIC0gZXZlbnQudGFyZ2V0LnRvdGFsT2Zmc2V0TGVmdCgpKSk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIHRoaXMuX2RyYWdPZmZzZXQgPSAwOwogICAgIH0sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvZnRDb250ZXh0TWVudS5qcyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU29mdENvbnRleHRNZW51LmpzCmlu
ZGV4IDAyMTQ5ODI2OGU4ODljNTA1YjU5NjgzY2I4YjRhYTVmY2FmZDRiMzMuLjI1OGExZjc0YmI5
NDlhY2IxYTFiYzY5YWY1MjIyNmNiNTVkNDU3MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvU29mdENvbnRleHRNZW51LmpzCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU29mdENvbnRleHRNZW51LmpzCkBAIC00Myw4ICs0Myw4
IEBAIFdlYkluc3BlY3Rvci5Tb2Z0Q29udGV4dE1lbnUucHJvdG90eXBlID0gewogICAgICAgICB2
YXIgdGFyZ2V0RWxlbWVudCA9IGV2ZW50LnRhcmdldDsKICAgICAgICAgd2hpbGUgKHRhcmdldEVs
ZW1lbnQgJiYgd2luZG93ICE9PSB0YXJnZXRFbGVtZW50Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZp
ZXcpIHsKICAgICAgICAgICAgIHZhciBmcmFtZUVsZW1lbnQgPSB0YXJnZXRFbGVtZW50Lm93bmVy
RG9jdW1lbnQuZGVmYXVsdFZpZXcuZnJhbWVFbGVtZW50OwotICAgICAgICAgICAgYWJzb2x1dGVZ
ICs9IGZyYW1lRWxlbWVudC50b3RhbE9mZnNldFRvcDsKLSAgICAgICAgICAgIGFic29sdXRlWCAr
PSBmcmFtZUVsZW1lbnQudG90YWxPZmZzZXRMZWZ0OworICAgICAgICAgICAgYWJzb2x1dGVZICs9
IGZyYW1lRWxlbWVudC50b3RhbE9mZnNldFRvcCgpOworICAgICAgICAgICAgYWJzb2x1dGVYICs9
IGZyYW1lRWxlbWVudC50b3RhbE9mZnNldExlZnQoKTsKICAgICAgICAgICAgIHRhcmdldEVsZW1l
bnQgPSBmcmFtZUVsZW1lbnQ7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Ub29sYmFyLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9Ub29sYmFyLmpzCmluZGV4IDYxZmEyZjcxMGFmM2Q0NDIwZDc5NDNkMjIz
MjNhMWRjYTAwZDE5N2QuLjMxMjIzZTE0MWJlYjBmNDExZmRjNTc4Nzk2ZTU0OTAzMDYyMzM2YTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVG9vbGJhci5q
cworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Rvb2xiYXIuanMKQEAg
LTE4NywxMCArMTg3LDEwIEBAIFdlYkluc3BlY3Rvci5Ub29sYmFyRHJvcGRvd24ucHJvdG90eXBl
ID0gewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB2YXIgc3R5bGUgPSB0aGlzLmVsZW1l
bnQuc3R5bGU7CiAgICAgICAgIHRoaXMuX3BvcHVsYXRlKCk7Ci0gICAgICAgIHZhciB0b3AgPSB0
aGlzLl9hcnJvdy50b3RhbE9mZnNldFRvcCArIHRoaXMuX2Fycm93LmNsaWVudEhlaWdodDsKKyAg
ICAgICAgdmFyIHRvcCA9IHRoaXMuX2Fycm93LnRvdGFsT2Zmc2V0VG9wKCkgKyB0aGlzLl9hcnJv
dy5jbGllbnRIZWlnaHQ7CiAgICAgICAgIHRoaXMuX2Fycm93LmFkZFN0eWxlQ2xhc3MoImRyb3Bk
b3duLXZpc2libGUiKTsKICAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLnRvcCA9IHRvcCArICJw
eCI7Ci0gICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5sZWZ0ID0gdGhpcy5fYXJyb3cudG90YWxP
ZmZzZXRMZWZ0ICsgInB4IjsKKyAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmxlZnQgPSB0aGlz
Ll9hcnJvdy50b3RhbE9mZnNldExlZnQoKSArICJweCI7CiAgICAgICAgIHRoaXMuX2NvbnRlbnRF
bGVtZW50LnN0eWxlLm1heEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHRvcCAtIDIwICsg
InB4IjsKICAgICAgICAgdGhpcy5fdG9vbGJhci5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpOwog
ICAgICAgICBXZWJJbnNwZWN0b3IuY3VycmVudEZvY3VzRWxlbWVudCA9IHRoaXMuY29udGVudEVs
ZW1lbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dh
dGNoRXhwcmVzc2lvbnNTaWRlYmFyUGFuZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvV2F0Y2hFeHByZXNzaW9uc1NpZGViYXJQYW5lLmpzCmluZGV4IGZkMmM1NjVkNzA1
YzAwNjI0NGY4MmM2NDJiYWJkOTRhOGUxM2JjMzcuLjY1YTQwMGZkZWM2YzY5NzAxNGU4OTMwODFh
MTE5ZDBmNWJmNzgzMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvV2F0Y2hFeHByZXNzaW9uc1NpZGViYXJQYW5lLmpzCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvV2F0Y2hFeHByZXNzaW9uc1NpZGViYXJQYW5lLmpzCkBAIC0y
NTksNyArMjU5LDcgQEAgV2ViSW5zcGVjdG9yLldhdGNoRXhwcmVzc2lvbnNTZWN0aW9uLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgICAgIHZhciBuZXh0ID0gdGhpcy5faG92ZXJlZEVsZW1lbnQubmV4
dFNpYmxpbmc7CiAgICAgICAgICAgICB3aGlsZShuZXh0ICYmICFuZXh0LmNsaWVudEhlaWdodCkK
ICAgICAgICAgICAgICAgICBuZXh0ID0gbmV4dC5uZXh0U2libGluZzsKLSAgICAgICAgICAgIGlm
ICghbmV4dCB8fCBuZXh0LnRvdGFsT2Zmc2V0VG9wID4gcGFnZVkpCisgICAgICAgICAgICBpZiAo
IW5leHQgfHwgbmV4dC50b3RhbE9mZnNldFRvcCgpID4gcGFnZVkpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB0aGlzLl9ob3ZlcmVkRWxlbWVudCA9IG5leHQ7CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVj
dG9yLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMK
aW5kZXggMDc2ODAwYjg3ZjdkMmU0MjFhOTFmYjdkMTJhODQ1NzdmYmI4ZTQxYS4uMGNmM2JjNjk5
YTNjMzI3ZGJmNjljMjM5ZWY1ZDZkOGRkOGRiYTcwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKQEAgLTE3MTYsMyArMTcxNiw1MCBAQCBX
ZWJJbnNwZWN0b3IuUGFuZWxIaXN0b3J5LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5faGlz
dG9yeUl0ZXJhdG9yID0gdGhpcy5faGlzdG9yeS5sZW5ndGggLSAxOwogICAgIH0KIH0KKworTnVt
YmVyLnNlY29uZHNUb1N0cmluZyA9IGZ1bmN0aW9uKHNlY29uZHMsIGhpZ2hlclJlc29sdXRpb24p
Cit7CisgICAgaWYgKHNlY29uZHMgPT09IDApCisgICAgICAgIHJldHVybiAiMCI7CisKKyAgICB2
YXIgbXMgPSBzZWNvbmRzICogMTAwMDsKKyAgICBpZiAoaGlnaGVyUmVzb2x1dGlvbiAmJiBtcyA8
IDEwMDApCisgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiUuM2ZtcyIsIG1z
KTsKKyAgICBlbHNlIGlmIChtcyA8IDEwMDApCisgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIiUuMGZtcyIsIG1zKTsKKworICAgIGlmIChzZWNvbmRzIDwgNjApCisgICAgICAg
IHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiUuMmZzIiwgc2Vjb25kcyk7CisKKyAgICB2
YXIgbWludXRlcyA9IHNlY29uZHMgLyA2MDsKKyAgICBpZiAobWludXRlcyA8IDYwKQorICAgICAg
ICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlLjFmbWluIiwgbWludXRlcyk7CisKKyAg
ICB2YXIgaG91cnMgPSBtaW51dGVzIC8gNjA7CisgICAgaWYgKGhvdXJzIDwgMjQpCisgICAgICAg
IHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiUuMWZocnMiLCBob3Vycyk7CisKKyAgICB2
YXIgZGF5cyA9IGhvdXJzIC8gMjQ7CisgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygi
JS4xZiBkYXlzIiwgZGF5cyk7Cit9CisKK051bWJlci5ieXRlc1RvU3RyaW5nID0gZnVuY3Rpb24o
Ynl0ZXMsIGhpZ2hlclJlc29sdXRpb24pCit7CisgICAgaWYgKHR5cGVvZiBoaWdoZXJSZXNvbHV0
aW9uID09PSAidW5kZWZpbmVkIikKKyAgICAgICAgaGlnaGVyUmVzb2x1dGlvbiA9IHRydWU7CisK
KyAgICBpZiAoYnl0ZXMgPCAxMDI0KQorICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCIlLjBmQiIsIGJ5dGVzKTsKKworICAgIHZhciBraWxvYnl0ZXMgPSBieXRlcyAvIDEwMjQ7
CisgICAgaWYgKGhpZ2hlclJlc29sdXRpb24gJiYga2lsb2J5dGVzIDwgMTAyNCkKKyAgICAgICAg
cmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygiJS4yZktCIiwga2lsb2J5dGVzKTsKKyAgICBl
bHNlIGlmIChraWxvYnl0ZXMgPCAxMDI0KQorICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCIlLjBmS0IiLCBraWxvYnl0ZXMpOworCisgICAgdmFyIG1lZ2FieXRlcyA9IGtpbG9i
eXRlcyAvIDEwMjQ7CisgICAgaWYgKGhpZ2hlclJlc29sdXRpb24pCisgICAgICAgIHJldHVybiBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiUuMmZNQiIsIG1lZ2FieXRlcyk7CisgICAgZWxzZQorICAg
ICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlLjBmTUIiLCBtZWdhYnl0ZXMpOwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90cmVlb3V0
bGluZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdHJlZW91dGxpbmUu
anMKaW5kZXggYjg4MTg2NWRmZjMwODA2ZWJjZGI3YjgyNjg3NDEwOWMzN2NkYWFmNi4uZDBkMmI1
ZjE0NmE1ZjNmNDI4MTBiOTNkM2ZlMTJmOTc2ZDgxM2MzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90cmVlb3V0bGluZS5qcworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3RyZWVvdXRsaW5lLmpzCkBAIC05MjQsNiArOTI0LDYg
QEAgVHJlZUVsZW1lbnQucHJvdG90eXBlLnRyYXZlcnNlUHJldmlvdXNUcmVlRWxlbWVudCA9IGZ1
bmN0aW9uKHNraXBIaWRkZW4sIGRvbnRQb3AKIAogVHJlZUVsZW1lbnQucHJvdG90eXBlLmlzRXZl
bnRXaXRoaW5EaXNjbG9zdXJlVHJpYW5nbGUgPSBmdW5jdGlvbihldmVudCkKIHsKLSAgICB2YXIg
bGVmdCA9IHRoaXMuX2xpc3RJdGVtTm9kZS50b3RhbE9mZnNldExlZnQ7CisgICAgdmFyIGxlZnQg
PSB0aGlzLl9saXN0SXRlbU5vZGUudG90YWxPZmZzZXRMZWZ0KCk7CiAgICAgcmV0dXJuIGV2ZW50
LnBhZ2VYID49IGxlZnQgJiYgZXZlbnQucGFnZVggPD0gbGVmdCArIHRoaXMuYXJyb3dUb2dnbGVX
aWR0aCAmJiB0aGlzLmhhc0NoaWxkcmVuOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcwppbmRleCBiMWYzMzE1OWUyM2Y3MzU0NzlkMzRlMGZk
NDZmODUwMDViNzZlZjkxLi5hNTdhOTg3NTg2ZjFmZTBkNTE1MWVlNTFlNDUyM2JjMWMzMWIyZjcw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGll
cy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5q
cwpAQCAtMjYxLDIxICsyNjEsMjEgQEAgRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlQ2hpbGQgPSBm
dW5jdGlvbihlbGVtZW50TmFtZSwgY2xhc3NOYW1lKQogCiBEb2N1bWVudEZyYWdtZW50LnByb3Rv
dHlwZS5jcmVhdGVDaGlsZCA9IEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZUNoaWxkOwogCi1FbGVt
ZW50LnByb3RvdHlwZS5fX2RlZmluZUdldHRlcl9fKCJ0b3RhbE9mZnNldExlZnQiLCBmdW5jdGlv
bigpCitFbGVtZW50LnByb3RvdHlwZS50b3RhbE9mZnNldExlZnQgPSBmdW5jdGlvbigpCiB7CiAg
ICAgdmFyIHRvdGFsID0gMDsKICAgICBmb3IgKHZhciBlbGVtZW50ID0gdGhpczsgZWxlbWVudDsg
ZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50KQogICAgICAgICB0b3RhbCArPSBlbGVtZW50
Lm9mZnNldExlZnQgKyAodGhpcyAhPT0gZWxlbWVudCA/IGVsZW1lbnQuY2xpZW50TGVmdCA6IDAp
OwogICAgIHJldHVybiB0b3RhbDsKLX0pOworfQogCi1FbGVtZW50LnByb3RvdHlwZS5fX2RlZmlu
ZUdldHRlcl9fKCJ0b3RhbE9mZnNldFRvcCIsIGZ1bmN0aW9uKCkKK0VsZW1lbnQucHJvdG90eXBl
LnRvdGFsT2Zmc2V0VG9wID0gZnVuY3Rpb24oKQogewogICAgIHZhciB0b3RhbCA9IDA7CiAgICAg
Zm9yICh2YXIgZWxlbWVudCA9IHRoaXM7IGVsZW1lbnQ7IGVsZW1lbnQgPSBlbGVtZW50Lm9mZnNl
dFBhcmVudCkKICAgICAgICAgdG90YWwgKz0gZWxlbWVudC5vZmZzZXRUb3AgKyAodGhpcyAhPT0g
ZWxlbWVudCA/IGVsZW1lbnQuY2xpZW50VG9wIDogMCk7CiAgICAgcmV0dXJuIHRvdGFsOwotfSk7
Cit9CiAKIEVsZW1lbnQucHJvdG90eXBlLm9mZnNldFJlbGF0aXZlVG9XaW5kb3cgPSBmdW5jdGlv
bih0YXJnZXRXaW5kb3cpCiB7CkBAIC0yODMsOCArMjgzLDggQEAgRWxlbWVudC5wcm90b3R5cGUu
b2Zmc2V0UmVsYXRpdmVUb1dpbmRvdyA9IGZ1bmN0aW9uKHRhcmdldFdpbmRvdykKICAgICB2YXIg
Y3VyRWxlbWVudCA9IHRoaXM7CiAgICAgdmFyIGN1cldpbmRvdyA9IHRoaXMub3duZXJEb2N1bWVu
dC5kZWZhdWx0VmlldzsKICAgICB3aGlsZSAoY3VyV2luZG93ICYmIGN1ckVsZW1lbnQpIHsKLSAg
ICAgICAgZWxlbWVudE9mZnNldC54ICs9IGN1ckVsZW1lbnQudG90YWxPZmZzZXRMZWZ0OwotICAg
ICAgICBlbGVtZW50T2Zmc2V0LnkgKz0gY3VyRWxlbWVudC50b3RhbE9mZnNldFRvcDsKKyAgICAg
ICAgZWxlbWVudE9mZnNldC54ICs9IGN1ckVsZW1lbnQudG90YWxPZmZzZXRMZWZ0KCk7CisgICAg
ICAgIGVsZW1lbnRPZmZzZXQueSArPSBjdXJFbGVtZW50LnRvdGFsT2Zmc2V0VG9wKCk7CiAgICAg
ICAgIGlmIChjdXJXaW5kb3cgPT09IHRhcmdldFdpbmRvdykKICAgICAgICAgICAgIGJyZWFrOwog
CkBAIC00NjgsMTEzICs0NjgsMjcgQEAgU3RyaW5nLnByb3RvdHlwZS5yZW1vdmVVUkxGcmFnbWVu
dCA9IGZ1bmN0aW9uKCkKICAgICByZXR1cm4gdGhpcy5zdWJzdHJpbmcoMCwgZnJhZ21lbnRJbmRl
eCk7CiB9CiAKLXdpbmRvdy5pc05vZGVXaGl0ZXNwYWNlID0gZnVuY3Rpb24oKQotewotICAgIGlm
ICghdGhpcyB8fCB0aGlzLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmICghdGhpcy5ub2RlVmFsdWUubGVuZ3RoKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICByZXR1cm4gdGhpcy5ub2RlVmFsdWUubWF0Y2goL15bXHNceEEwXSskLyk7
Ci19Ci0KLWZ1bmN0aW9uIG5vZGVEaXNwbGF5TmFtZSgpCi17Ci0gICAgaWYgKCF0aGlzKQotICAg
ICAgICByZXR1cm4gIiI7Ci0KLSAgICBzd2l0Y2ggKHRoaXMubm9kZVR5cGUpIHsKLSAgICAgICAg
Y2FzZSBOb2RlLkRPQ1VNRU5UX05PREU6Ci0gICAgICAgICAgICByZXR1cm4gIkRvY3VtZW50IjsK
LQotICAgICAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOgotICAgICAgICAgICAgdmFyIG5hbWUg
PSAiPCIgKyB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7Ci0KLSAgICAgICAgICAgIGlmICh0
aGlzLmhhc0F0dHJpYnV0ZXMoKSkgewotICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMu
Z2V0QXR0cmlidXRlKCJpZCIpOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAg
ICAgICAgICAgICAgbmFtZSArPSAiIGlkPVwiIiArIHZhbHVlICsgIlwiIjsKLSAgICAgICAgICAg
ICAgICB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKCJjbGFzcyIpOwotICAgICAgICAgICAgICAg
IGlmICh2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgbmFtZSArPSAiIGNsYXNzPVwiIiArIHZh
bHVlICsgIlwiIjsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5ub2RlTmFtZS50b0xvd2VyQ2Fz
ZSgpID09PSAiYSIpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmdldEF0dHJp
YnV0ZSgibmFtZSIpOwotICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBuYW1lICs9ICIgbmFtZT1cIiIgKyB2YWx1ZSArICJcIiI7Ci0gICAgICAg
ICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArPSAi
IGhyZWY9XCIiICsgdmFsdWUgKyAiXCIiOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhp
cy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAiaW1nIikgewotICAgICAgICAgICAgICAgICAg
ICB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKCJzcmMiKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArPSAiIHNyYz1cIiIgKyB2
YWx1ZSArICJcIiI7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm5vZGVOYW1lLnRv
TG93ZXJDYXNlKCkgPT09ICJpZnJhbWUiKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0g
dGhpcy5nZXRBdHRyaWJ1dGUoInNyYyIpOwotICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lICs9ICIgc3JjPVwiIiArIHZhbHVlICsgIlwi
IjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2Uo
KSA9PT0gImlucHV0IikgewotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuZ2V0QXR0
cmlidXRlKCJuYW1lIik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG5hbWUgKz0gIiBuYW1lPVwiIiArIHZhbHVlICsgIlwiIjsKLSAgICAg
ICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZSgidHlwZSIpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lICs9
ICIgdHlwZT1cIiIgKyB2YWx1ZSArICJcIiI7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0
aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJmb3JtIikgewotICAgICAgICAgICAgICAg
ICAgICB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKCJhY3Rpb24iKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArPSAiIGFjdGlv
bj1cIiIgKyB2YWx1ZSArICJcIiI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICByZXR1cm4gbmFtZSArICI+IjsKLQotICAgICAgICBjYXNlIE5vZGUuVEVY
VF9OT0RFOgotICAgICAgICAgICAgaWYgKGlzTm9kZVdoaXRlc3BhY2UuY2FsbCh0aGlzKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gIih3aGl0ZXNwYWNlKSI7Ci0gICAgICAgICAgICByZXR1cm4g
IlwiIiArIHRoaXMubm9kZVZhbHVlICsgIlwiIjsKLQotICAgICAgICBjYXNlIE5vZGUuQ09NTUVO
VF9OT0RFOgotICAgICAgICAgICAgcmV0dXJuICI8IS0tIiArIHRoaXMubm9kZVZhbHVlICsgIi0t
PiI7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBOb2RlLkRPQ1VNRU5UX1RZUEVfTk9ERToK
LSAgICAgICAgICAgIHZhciBkb2NUeXBlID0gIjwhRE9DVFlQRSAiICsgdGhpcy5ub2RlTmFtZTsK
LSAgICAgICAgICAgIGlmICh0aGlzLnB1YmxpY0lkKSB7Ci0gICAgICAgICAgICAgICAgZG9jVHlw
ZSArPSAiIFBVQkxJQyBcIiIgKyB0aGlzLnB1YmxpY0lkICsgIlwiIjsKLSAgICAgICAgICAgICAg
ICBpZiAodGhpcy5zeXN0ZW1JZCkKLSAgICAgICAgICAgICAgICAgICAgZG9jVHlwZSArPSAiIFwi
IiArIHRoaXMuc3lzdGVtSWQgKyAiXCIiOwotICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnN5
c3RlbUlkKQotICAgICAgICAgICAgICAgIGRvY1R5cGUgKz0gIiBTWVNURU0gXCIiICsgdGhpcy5z
eXN0ZW1JZCArICJcIiI7Ci0gICAgICAgICAgICBpZiAodGhpcy5pbnRlcm5hbFN1YnNldCkKLSAg
ICAgICAgICAgICAgICBkb2NUeXBlICs9ICIgWyIgKyB0aGlzLmludGVybmFsU3Vic2V0ICsgIl0i
OwotICAgICAgICAgICAgcmV0dXJuIGRvY1R5cGUgKyAiPiI7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKS5jb2xsYXBzZVdoaXRlc3BhY2UoKTsKLX0KLQot
d2luZG93LmlzQW5jZXN0b3JOb2RlID0gZnVuY3Rpb24oYW5jZXN0b3IsIG5vZGUpCitOb2RlLnBy
b3RvdHlwZS5pc0FuY2VzdG9yID0gZnVuY3Rpb24obm9kZSkKIHsKLSAgICBpZiAoIW5vZGUgfHwg
IWFuY2VzdG9yKQorICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
dmFyIGN1cnJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlOwogICAgIHdoaWxlIChjdXJyZW50Tm9k
ZSkgewotICAgICAgICBpZiAoYW5jZXN0b3IgPT09IGN1cnJlbnROb2RlKQorICAgICAgICBpZiAo
dGhpcyA9PT0gY3VycmVudE5vZGUpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
Y3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5wYXJlbnROb2RlOwogICAgIH0KICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXdpbmRvdy5pc0Rlc2NlbmRhbnROb2RlID0gZnVuY3Rpb24oZGVzY2VuZGFu
dCkKK05vZGUucHJvdG90eXBlLmlzRGVzY2VuZGFudCA9IGZ1bmN0aW9uKGRlc2NlbmRhbnQpCiB7
Ci0gICAgcmV0dXJuIGlzQW5jZXN0b3JOb2RlKGRlc2NlbmRhbnQsIHRoaXMpOworICAgIHJldHVy
biBkZXNjZW5kYW50ICE9PSBudWxsICYmIGRlc2NlbmRhbnQuaXNBbmNlc3Rvcih0aGlzKTsKIH0K
IAotZnVuY3Rpb24gdHJhdmVyc2VOZXh0Tm9kZShzdGF5V2l0aGluKQorTm9kZS5wcm90b3R5cGUu
dHJhdmVyc2VOZXh0Tm9kZSA9IGZ1bmN0aW9uKHN0YXlXaXRoaW4pCiB7Ci0gICAgaWYgKCF0aGlz
KQotICAgICAgICByZXR1cm47Ci0KICAgICB2YXIgbm9kZSA9IHRoaXMuZmlyc3RDaGlsZDsKICAg
ICBpZiAobm9kZSkKICAgICAgICAgcmV0dXJuIG5vZGU7CkBAIC01OTUsMTAgKzUwOSw4IEBAIGZ1
bmN0aW9uIHRyYXZlcnNlTmV4dE5vZGUoc3RheVdpdGhpbikKICAgICByZXR1cm4gbm9kZS5uZXh0
U2libGluZzsKIH0KIAotZnVuY3Rpb24gdHJhdmVyc2VQcmV2aW91c05vZGUoc3RheVdpdGhpbikK
K05vZGUucHJvdG90eXBlLnRyYXZlcnNlUHJldmlvdXNOb2RlID0gZnVuY3Rpb24oc3RheVdpdGhp
bikKIHsKLSAgICBpZiAoIXRoaXMpCi0gICAgICAgIHJldHVybjsKICAgICBpZiAoc3RheVdpdGhp
biAmJiB0aGlzID09PSBzdGF5V2l0aGluKQogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB2YXIg
bm9kZSA9IHRoaXMucHJldmlvdXNTaWJsaW5nOwpAQCAtNjE0LDY4ICs1MjYsNiBAQCB3aW5kb3cu
cGFyZW50Tm9kZSA9IGZ1bmN0aW9uKG5vZGUpCiAgICAgcmV0dXJuIG5vZGUucGFyZW50Tm9kZTsK
IH0KIAotTm9kZS5wcm90b3R5cGUuaXNXaGl0ZXNwYWNlID0gaXNOb2RlV2hpdGVzcGFjZTsKLU5v
ZGUucHJvdG90eXBlLmRpc3BsYXlOYW1lID0gbm9kZURpc3BsYXlOYW1lOwotTm9kZS5wcm90b3R5
cGUuaXNBbmNlc3RvciA9IGZ1bmN0aW9uKG5vZGUpCi17Ci0gICAgcmV0dXJuIGlzQW5jZXN0b3JO
b2RlKHRoaXMsIG5vZGUpOwotfTsKLU5vZGUucHJvdG90eXBlLmlzRGVzY2VuZGFudCA9IGlzRGVz
Y2VuZGFudE5vZGU7Ci1Ob2RlLnByb3RvdHlwZS50cmF2ZXJzZU5leHROb2RlID0gdHJhdmVyc2VO
ZXh0Tm9kZTsKLU5vZGUucHJvdG90eXBlLnRyYXZlcnNlUHJldmlvdXNOb2RlID0gdHJhdmVyc2VQ
cmV2aW91c05vZGU7Ci0KLU51bWJlci5taWxsaXNUb1N0cmluZyA9IGZ1bmN0aW9uKG1zLCBoaWdo
ZXJSZXNvbHV0aW9uKQotewotICAgIHJldHVybiBOdW1iZXIuc2Vjb25kc1RvU3RyaW5nKG1zIC8g
MTAwMCwgaGlnaGVyUmVzb2x1dGlvbik7Ci19Ci0KLU51bWJlci5zZWNvbmRzVG9TdHJpbmcgPSBm
dW5jdGlvbihzZWNvbmRzLCBoaWdoZXJSZXNvbHV0aW9uKQotewotICAgIGlmIChzZWNvbmRzID09
PSAwKQotICAgICAgICByZXR1cm4gIjAiOwotCi0gICAgdmFyIG1zID0gc2Vjb25kcyAqIDEwMDA7
Ci0gICAgaWYgKGhpZ2hlclJlc29sdXRpb24gJiYgbXMgPCAxMDAwKQotICAgICAgICByZXR1cm4g
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlLjNmbXMiLCBtcyk7Ci0gICAgZWxzZSBpZiAobXMgPCAx
MDAwKQotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlLjBmbXMiLCBtcyk7
Ci0KLSAgICBpZiAoc2Vjb25kcyA8IDYwKQotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCIlLjJmcyIsIHNlY29uZHMpOwotCi0gICAgdmFyIG1pbnV0ZXMgPSBzZWNvbmRzIC8g
NjA7Ci0gICAgaWYgKG1pbnV0ZXMgPCA2MCkKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5V
SVN0cmluZygiJS4xZm1pbiIsIG1pbnV0ZXMpOwotCi0gICAgdmFyIGhvdXJzID0gbWludXRlcyAv
IDYwOwotICAgIGlmIChob3VycyA8IDI0KQotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCIlLjFmaHJzIiwgaG91cnMpOwotCi0gICAgdmFyIGRheXMgPSBob3VycyAvIDI0Owot
ICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiUuMWYgZGF5cyIsIGRheXMpOwotfQot
Ci1OdW1iZXIuYnl0ZXNUb1N0cmluZyA9IGZ1bmN0aW9uKGJ5dGVzLCBoaWdoZXJSZXNvbHV0aW9u
KQotewotICAgIGlmICh0eXBlb2YgaGlnaGVyUmVzb2x1dGlvbiA9PT0gInVuZGVmaW5lZCIpCi0g
ICAgICAgIGhpZ2hlclJlc29sdXRpb24gPSB0cnVlOwotCi0gICAgaWYgKGJ5dGVzIDwgMTAyNCkK
LSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygiJS4wZkIiLCBieXRlcyk7Ci0K
LSAgICB2YXIga2lsb2J5dGVzID0gYnl0ZXMgLyAxMDI0OwotICAgIGlmIChoaWdoZXJSZXNvbHV0
aW9uICYmIGtpbG9ieXRlcyA8IDEwMjQpCi0gICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIiUuMmZLQiIsIGtpbG9ieXRlcyk7Ci0gICAgZWxzZSBpZiAoa2lsb2J5dGVzIDwgMTAy
NCkKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygiJS4wZktCIiwga2lsb2J5
dGVzKTsKLQotICAgIHZhciBtZWdhYnl0ZXMgPSBraWxvYnl0ZXMgLyAxMDI0OwotICAgIGlmICho
aWdoZXJSZXNvbHV0aW9uKQotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIl
LjJmTUIiLCBtZWdhYnl0ZXMpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiJS4wZk1CIiwgbWVnYWJ5dGVzKTsKLX0KLQogTnVtYmVyLmNvbnN0cmFpbiA9
IGZ1bmN0aW9uKG51bSwgbWluLCBtYXgpCiB7CiAgICAgaWYgKG51bSA8IG1pbikKQEAgLTcwOCw0
NSArNTU4LDYzIEBAIEhUTUxUZXh0QXJlYUVsZW1lbnQucHJvdG90eXBlLm1vdmVDdXJzb3JUb0Vu
ZCA9IGZ1bmN0aW9uKCkKICAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKGxlbmd0aCwgbGVuZ3Ro
KTsKIH0KIAotT2JqZWN0LmRlZmluZVByb3BlcnR5KEFycmF5LnByb3RvdHlwZSwgInJlbW92ZSIs
IHsgdmFsdWU6IGZ1bmN0aW9uKHZhbHVlLCBvbmx5Rmlyc3QpCitPYmplY3QuZGVmaW5lUHJvcGVy
dHkoQXJyYXkucHJvdG90eXBlLCAicmVtb3ZlIiwKIHsKLSAgICBpZiAob25seUZpcnN0KSB7Ci0g
ICAgICAgIHZhciBpbmRleCA9IHRoaXMuaW5kZXhPZih2YWx1ZSk7Ci0gICAgICAgIGlmIChpbmRl
eCAhPT0gLTEpCi0gICAgICAgICAgICB0aGlzLnNwbGljZShpbmRleCwgMSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7Ci0gICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBpZiAodGhpc1tpXSA9PT0gdmFs
dWUpCi0gICAgICAgICAgICB0aGlzLnNwbGljZShpLCAxKTsKKyAgICAvKioKKyAgICAgKiBAdGhp
cyB7QXJyYXkuPCo+fQorICAgICAqLworICAgIHZhbHVlOiBmdW5jdGlvbih2YWx1ZSwgb25seUZp
cnN0KQorICAgIHsKKyAgICAgICAgaWYgKG9ubHlGaXJzdCkgeworICAgICAgICAgICAgdmFyIGlu
ZGV4ID0gdGhpcy5pbmRleE9mKHZhbHVlKTsKKyAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEp
CisgICAgICAgICAgICAgICAgdGhpcy5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgCisgICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAg
aWYgKHRoaXNbaV0gPT09IHZhbHVlKQorICAgICAgICAgICAgICAgIHRoaXMuc3BsaWNlKGksIDEp
OworICAgICAgICB9CiAgICAgfQotfX0pOworfSk7CiAKLU9iamVjdC5kZWZpbmVQcm9wZXJ0eShB
cnJheS5wcm90b3R5cGUsICJrZXlTZXQiLCB7IHZhbHVlOiBmdW5jdGlvbigpCitPYmplY3QuZGVm
aW5lUHJvcGVydHkoQXJyYXkucHJvdG90eXBlLCAia2V5U2V0IiwKIHsKLSAgICB2YXIga2V5cyA9
IHt9OwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7ICsraSkKLSAgICAgICAg
a2V5c1t0aGlzW2ldXSA9IHRydWU7Ci0gICAgcmV0dXJuIGtleXM7Ci19fSk7CisgICAgLyoqCisg
ICAgICogQHRoaXMge0FycmF5LjwqPn0KKyAgICAgKi8KKyAgICB2YWx1ZTogZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgdmFyIGtleXMgPSB7fTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCB0aGlzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAga2V5c1t0aGlzW2ldXSA9IHRydWU7Cisg
ICAgICAgIHJldHVybiBrZXlzOworICAgIH0KK30pOwogCi1PYmplY3QuZGVmaW5lUHJvcGVydHko
QXJyYXkucHJvdG90eXBlLCAidXBwZXJCb3VuZCIsIHsgdmFsdWU6IGZ1bmN0aW9uKHZhbHVlKQor
T2JqZWN0LmRlZmluZVByb3BlcnR5KEFycmF5LnByb3RvdHlwZSwgInVwcGVyQm91bmQiLCAKIHsK
LSAgICB2YXIgZmlyc3QgPSAwOwotICAgIHZhciBjb3VudCA9IHRoaXMubGVuZ3RoOwotICAgIHdo
aWxlIChjb3VudCA+IDApIHsKLSAgICAgIHZhciBzdGVwID0gY291bnQgPj4gMTsKLSAgICAgIHZh
ciBtaWRkbGUgPSBmaXJzdCArIHN0ZXA7Ci0gICAgICBpZiAodmFsdWUgPj0gdGhpc1ttaWRkbGVd
KSB7Ci0gICAgICAgICAgZmlyc3QgPSBtaWRkbGUgKyAxOwotICAgICAgICAgIGNvdW50IC09IHN0
ZXAgKyAxOwotICAgICAgfSBlbHNlCi0gICAgICAgICAgY291bnQgPSBzdGVwOworICAgIC8qKgor
ICAgICAqIEB0aGlzIHtBcnJheS48bnVtYmVyPn0KKyAgICAgKi8KKyAgICB2YWx1ZTogZnVuY3Rp
b24odmFsdWUpCisgICAgeworICAgICAgICB2YXIgZmlyc3QgPSAwOworICAgICAgICB2YXIgY291
bnQgPSB0aGlzLmxlbmd0aDsKKyAgICAgICAgd2hpbGUgKGNvdW50ID4gMCkgeworICAgICAgICAg
IHZhciBzdGVwID0gY291bnQgPj4gMTsKKyAgICAgICAgICB2YXIgbWlkZGxlID0gZmlyc3QgKyBz
dGVwOworICAgICAgICAgIGlmICh2YWx1ZSA+PSB0aGlzW21pZGRsZV0pIHsKKyAgICAgICAgICAg
ICAgZmlyc3QgPSBtaWRkbGUgKyAxOworICAgICAgICAgICAgICBjb3VudCAtPSBzdGVwICsgMTsK
KyAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgY291bnQgPSBzdGVwOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBmaXJzdDsKICAgICB9Ci0gICAgcmV0dXJuIGZpcnN0OwotfX0pOwor
fSk7CiAKIEFycmF5LmRpZmYgPSBmdW5jdGlvbihsZWZ0LCByaWdodCkKIHsKQEAgLTgzMiw3ICs3
MDAsNyBAQCBTdHJpbmcudG9rZW5pemVGb3JtYXRTdHJpbmcgPSBmdW5jdGlvbihmb3JtYXQpCiAK
ICAgICAgICAgaWYgKCFpc05hTihmb3JtYXRbaW5kZXhdKSkgewogICAgICAgICAgICAgLy8gVGhl
IGZpcnN0IGNoYXJhY3RlciBpcyBhIG51bWJlciwgaXQgbWlnaHQgYmUgYSBzdWJzdGl0dXRpb24g
aW5kZXguCi0gICAgICAgICAgICB2YXIgbnVtYmVyID0gcGFyc2VJbnQoZm9ybWF0LnN1YnN0cmlu
ZyhpbmRleCkpOworICAgICAgICAgICAgdmFyIG51bWJlciA9IHBhcnNlSW50KGZvcm1hdC5zdWJz
dHJpbmcoaW5kZXgpLCAxMCk7CiAgICAgICAgICAgICB3aGlsZSAoIWlzTmFOKGZvcm1hdFtpbmRl
eF0pKQogICAgICAgICAgICAgICAgICsraW5kZXg7CiAgICAgICAgICAgICAvLyBJZiB0aGUgbnVt
YmVyIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCBlbmRzIHdpdGggYSAiJCIsCkBAIC04NDgsNyAr
NzE2LDcgQEAgU3RyaW5nLnRva2VuaXplRm9ybWF0U3RyaW5nID0gZnVuY3Rpb24oZm9ybWF0KQog
ICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHByZWNpc2lvbiBzcGVjaWZpZXIuIElmIG5vIGRpZ2l0
IGZvbGxvd3MgdGhlICIuIiwKICAgICAgICAgICAgIC8vIHRoZW4gdGhlIHByZWNpc2lvbiBzaG91
bGQgYmUgemVyby4KICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAgICBwcmVjaXNpb24g
PSBwYXJzZUludChmb3JtYXQuc3Vic3RyaW5nKGluZGV4KSk7CisgICAgICAgICAgICBwcmVjaXNp
b24gPSBwYXJzZUludChmb3JtYXQuc3Vic3RyaW5nKGluZGV4KSwgMTApOwogICAgICAgICAgICAg
aWYgKGlzTmFOKHByZWNpc2lvbikpCiAgICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gMDsKICAg
ICAgICAgICAgIHdoaWxlICghaXNOYU4oZm9ybWF0W2luZGV4XSkpCkBAIC04NjksMTcgKzczNywx
MSBAQCBTdHJpbmcudG9rZW5pemVGb3JtYXRTdHJpbmcgPSBmdW5jdGlvbihmb3JtYXQpCiBTdHJp
bmcuc3RhbmRhcmRGb3JtYXR0ZXJzID0gewogICAgIGQ6IGZ1bmN0aW9uKHN1YnN0aXR1dGlvbikK
ICAgICB7Ci0gICAgICAgIGlmICh0eXBlb2Ygc3Vic3RpdHV0aW9uID09ICJvYmplY3QiICYmIFdl
Ykluc3BlY3Rvci5SZW1vdGVPYmplY3QudHlwZShzdWJzdGl0dXRpb24pID09PSAibnVtYmVyIikK
LSAgICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbi5kZXNjcmlwdGlvbjsKLSAg
ICAgICAgc3Vic3RpdHV0aW9uID0gcGFyc2VJbnQoc3Vic3RpdHV0aW9uKTsKICAgICAgICAgcmV0
dXJuICFpc05hTihzdWJzdGl0dXRpb24pID8gc3Vic3RpdHV0aW9uIDogMDsKICAgICB9LAogCiAg
ICAgZjogZnVuY3Rpb24oc3Vic3RpdHV0aW9uLCB0b2tlbikKICAgICB7Ci0gICAgICAgIGlmICh0
eXBlb2Ygc3Vic3RpdHV0aW9uID09ICJvYmplY3QiICYmIFdlYkluc3BlY3Rvci5SZW1vdGVPYmpl
Y3QudHlwZShzdWJzdGl0dXRpb24pID09PSAibnVtYmVyIikKLSAgICAgICAgICAgIHN1YnN0aXR1
dGlvbiA9IHN1YnN0aXR1dGlvbi5kZXNjcmlwdGlvbjsKLSAgICAgICAgc3Vic3RpdHV0aW9uID0g
cGFyc2VGbG9hdChzdWJzdGl0dXRpb24pOwogICAgICAgICBpZiAoc3Vic3RpdHV0aW9uICYmIHRv
a2VuLnByZWNpc2lvbiA+IC0xKQogICAgICAgICAgICAgc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0
aW9uLnRvRml4ZWQodG9rZW4ucHJlY2lzaW9uKTsKICAgICAgICAgcmV0dXJuICFpc05hTihzdWJz
dGl0dXRpb24pID8gc3Vic3RpdHV0aW9uIDogKHRva2VuLnByZWNpc2lvbiA+IC0xID8gTnVtYmVy
KDApLnRvRml4ZWQodG9rZW4ucHJlY2lzaW9uKSA6IDApOwpAQCAtODg3LDExICs3NDksOSBAQCBT
dHJpbmcuc3RhbmRhcmRGb3JtYXR0ZXJzID0gewogCiAgICAgczogZnVuY3Rpb24oc3Vic3RpdHV0
aW9uKQogICAgIHsKLSAgICAgICAgaWYgKHR5cGVvZiBzdWJzdGl0dXRpb24gPT0gIm9iamVjdCIg
JiYgV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC50eXBlKHN1YnN0aXR1dGlvbikgIT09ICJudWxs
IikKLSAgICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbi5kZXNjcmlwdGlvbjsK
ICAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGlvbjsKLSAgICB9LAotfTsKKyAgICB9Cit9CiAKIFN0
cmluZy52c3ByaW50ZiA9IGZ1bmN0aW9uKGZvcm1hdCwgc3Vic3RpdHV0aW9ucykKIHsKQEAgLTEw
NDgsNyArOTA4LDcgQEAgZnVuY3Rpb24gaGlnaGxpZ2h0U2VhcmNoUmVzdWx0cyhlbGVtZW50LCBy
ZXN1bHRSYW5nZXMsIGNoYW5nZXMpCiAgICAgICAgIHdoaWxlIChjdXJyZW50U25hcHNob3RJdGVt
IDwgc25hcHNob3RMZW5ndGgpIHsKICAgICAgICAgICAgIHRleHROb2RlID0gdGV4dE5vZGVTbmFw
c2hvdC5zbmFwc2hvdEl0ZW0oY3VycmVudFNuYXBzaG90SXRlbSsrKTsKICAgICAgICAgICAgIHNu
YXBzaG90Tm9kZU9mZnNldCArPSB0ZXh0Tm9kZS5ub2RlVmFsdWUubGVuZ3RoOwotICAgICAgICAg
ICAgdmFyIHRleHQgPSB0ZXh0Tm9kZS50ZXh0Q29udGVudDsKKyAgICAgICAgICAgIHRleHQgPSB0
ZXh0Tm9kZS50ZXh0Q29udGVudDsKICAgICAgICAgICAgIGlmIChsZW5ndGggPCB0ZXh0Lmxlbmd0
aCkgewogICAgICAgICAgICAgICAgIHRleHROb2RlLnRleHRDb250ZW50ID0gdGV4dC5zdWJzdHJp
bmcobGVuZ3RoKTsKICAgICAgICAgICAgICAgICBjaGFuZ2VzLnB1c2goeyBub2RlOiB0ZXh0Tm9k
ZSwgdHlwZTogImNoYW5nZWQiLCBvbGRUZXh0OiB0ZXh0LCBuZXdUZXh0OiB0ZXh0Tm9kZS50ZXh0
Q29udGVudCB9KTsKQEAgLTExMDIsMTMgKzk2MiwxMyBAQCBmdW5jdGlvbiByZXZlcnREb21DaGFu
Z2VzKGRvbUNoYW5nZXMpCiBmdW5jdGlvbiBjcmVhdGVTZWFyY2hSZWdleChxdWVyeSwgZXh0cmFG
bGFncykKIHsKICAgICAvLyBUaGlzIHNob3VsZCBiZSBrZXB0IHRoZSBzYW1lIGFzIHRoZSBvbmUg
aW4gSW5zcGVjdG9yUGFnZUFnZW50LmNwcC4KLSAgICByZWdleFNwZWNpYWxDaGFyYWN0ZXJzID0g
IltdKCl7fSstKi4sP1xcXiR8IjsKKyAgICB2YXIgcmVnZXhTcGVjaWFsQ2hhcmFjdGVycyA9ICJb
XSgpe30rLSouLD9cXF4kfCI7CiAgICAgdmFyIHJlZ2V4ID0gIiI7CiAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBxdWVyeS5sZW5ndGg7ICsraSkgewotICAgICAgICB2YXIgY2hhciA9IHF1ZXJ5LmNo
YXJBdChpKTsKLSAgICAgICAgaWYgKHJlZ2V4U3BlY2lhbENoYXJhY3RlcnMuaW5kZXhPZihjaGFy
KSAhPSAtMSkKKyAgICAgICAgdmFyIGMgPSBxdWVyeS5jaGFyQXQoaSk7CisgICAgICAgIGlmIChy
ZWdleFNwZWNpYWxDaGFyYWN0ZXJzLmluZGV4T2YoYykgIT0gLTEpCiAgICAgICAgICAgICByZWdl
eCArPSAiXFwiOwotICAgICAgICByZWdleCArPSBjaGFyOworICAgICAgICByZWdleCArPSBjOwog
ICAgIH0KICAgICByZXR1cm4gbmV3IFJlZ0V4cChyZWdleCwgImkiICsgKGV4dHJhRmxhZ3MgfHwg
IiIpKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104673</attachid>
            <date>2011-08-22 06:53:54 -0700</date>
            <delta_ts>2011-08-22 07:34:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66656-20110822175352.patch</filename>
            <type>text/plain</type>
            <size>43972</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM1MDEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlYTgxNWVmNjg4ZDRiMTQ4
ZGI1NThmOTMxN2M3MmY0ZjYzNDM1YjU1Li5kNTFiMWMwNzY5ZWY4ODA0ZjQ1NDIzM2FmOGQxNWE0
NDU3YjZiODYyIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjMgQEAKKzIwMTEtMDgtMjIgIFBhdmVs
IEZlbGRtYW4gIDxwZmVsZG1hbkBnb29nbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6
IFByZXBhcmUgdXRpbGl0aWVzLmpzIGZvciBjb21waWxhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2NjU2CisKKyAgICAgICAgUmVtb3ZlcyAi
dGhpcyIgdXNhZ2UgaW4gZnVuY3Rpb25zLCBkb2VzIG5vdCBkZWZpbmUgZ2V0dGVycyBmb3Igb2Zm
c2V0cy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVZpZXcuanM6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQ29uc29sZU1lc3NhZ2UucHJvdG90eXBlLl9mb3JtYXQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkNvbnNvbGVNZXNzYWdlLnByb3RvdHlwZS5fZm9ybWF0V2l0aFN1YnN0aXR1dGlvblN0cmlu
Zy52YWx1ZUZvcm1hdHRlcik6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2Vu
dC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5hcHByb3ByaWF0
ZVNlbGVjdG9yRm9yKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5p
c0FuY2VzdG9yKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5pc0Rl
c2NlbmRhbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLmlzV2hp
dGVzcGFjZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhR3JpZC5qczoKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5EYXRhR3JpZC5wcm90b3R5cGUuX3Jlc2l6ZXJEcmFnZ2luZyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YUdyaWROb2RlLnByb3RvdHlwZS5pc0V2ZW50V2l0
aGluRGlzY2xvc3VyZVRyaWFuZ2xlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0Ry
YXdlci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLmdldCBzYXZl
ZEhlaWdodCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5vblJlc2l6
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5fc3RhcnRTdGF0dXNC
YXJEcmFnZ2luZyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5fc3Rh
dHVzQmFyRHJhZ2dpbmcpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQ
YW5lbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlwZS51
cGRhdGVNb2RpZmllZE5vZGVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVs
LnByb3RvdHlwZS51cGRhdGVCcmVhZGNydW1iKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVt
ZW50c1BhbmVsLnByb3RvdHlwZS51cGRhdGVCcmVhZGNydW1iU2l6ZXMuY3J1bWJzQXJlU21hbGxl
clRoYW5Db250YWluZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNU
cmVlT3V0bGluZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5l
LnByb3RvdHlwZS5maW5kVHJlZUVsZW1lbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1l
bnRzVHJlZU91dGxpbmUucHJvdG90eXBlLl90cmVlRWxlbWVudEZyb21FdmVudCk6CisgICAgICAg
ICgpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvUmVtb3RlT2JqZWN0LmpzOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zy
b250LWVuZC9SZXNvdXJjZVRpbWluZ1ZpZXcuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVz
b3VyY2VUaW1pbmdWaWV3LmNyZWF0ZVRpbWluZ1RhYmxlKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
ZnJvbnQtZW5kL1Jlc291cmNlc1BhbmVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJhc2VT
dG9yYWdlVHJlZUVsZW1lbnQucHJvdG90eXBlLmlzRXZlbnRXaXRoaW5EaXNjbG9zdXJlVHJpYW5n
bGUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuX3N0YXJ0U2lkZWJhclJl
c2l6ZURyYWcpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU29mdENvbnRleHRNZW51
LmpzOgorICAgICAgICAoLldlYkluc3BlY3Rvci5Tb2Z0Q29udGV4dE1lbnUucHJvdG90eXBlLnNo
b3cpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvVG9vbGJhci5qczoKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Ub29sYmFyRHJvcGRvd24ucHJvdG90eXBlLnNob3cpOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvV2F0Y2hFeHByZXNzaW9uc1NpZGViYXJQYW5lLmpzOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLldhdGNoRXhwcmVzc2lvbnNTZWN0aW9uLnByb3RvdHlwZS5fdXBk
YXRlSG92ZXJlZEVsZW1lbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVj
dG9yLmpzOgorICAgICAgICAoTnVtYmVyLnNlY29uZHNUb1N0cmluZyk6CisgICAgICAgIChOdW1i
ZXIuYnl0ZXNUb1N0cmluZyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC90cmVlb3V0
bGluZS5qczoKKyAgICAgICAgKFRyZWVFbGVtZW50LnByb3RvdHlwZS5pc0V2ZW50V2l0aGluRGlz
Y2xvc3VyZVRyaWFuZ2xlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGll
cy5qczoKKyAgICAgICAgKHNldHVwUHJvdG90eXBlVXRpbGl0aWVzLkVsZW1lbnQucHJvdG90eXBl
LnRvdGFsT2Zmc2V0TGVmdCk6CisgICAgICAgIChzZXR1cFByb3RvdHlwZVV0aWxpdGllcy5FbGVt
ZW50LnByb3RvdHlwZS50b3RhbE9mZnNldFRvcCk6CisgICAgICAgIChzZXR1cFByb3RvdHlwZVV0
aWxpdGllcy5FbGVtZW50LnByb3RvdHlwZS5vZmZzZXRSZWxhdGl2ZVRvV2luZG93KToKKyAgICAg
ICAgKHNldHVwUHJvdG90eXBlVXRpbGl0aWVzKToKKyAgICAgICAgKHNldHVwUHJvdG90eXBlVXRp
bGl0aWVzLik6CisgICAgICAgICgpOgorCiAyMDExLTA4LTE4ICBQYXZlbCBQb2Rpdmlsb3YgIDxw
b2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGV4dHJhY3Qg
YnJlYWtwb2ludCBtYW5hZ2VtZW50IGNvZGUgdG8gYSBzZXBhcmF0ZSBjbGFzcyBhbmQgYWRkIHRl
c3RzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25z
b2xlVmlldy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVZp
ZXcuanMKaW5kZXggOTI2MmU1Y2JiN2MwYmJjNzFiM2VhMTQ4NmViOTBlMGU5Y2UxZjRlZS4uMTVm
MDBjNDEzOGY0MjdlNDMxYTEwNzhlNTU2YWRlNTVhZDg1MjdkNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qcworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzCkBAIC05ODAsOCArOTgw
LDYgQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLnByb3RvdHlwZSA9IHsKICAgICBfZm9y
bWF0V2l0aFN1YnN0aXR1dGlvblN0cmluZzogZnVuY3Rpb24ocGFyYW1ldGVycywgZm9ybWF0dGVk
UmVzdWx0KQogICAgIHsKICAgICAgICAgdmFyIGZvcm1hdHRlcnMgPSB7fQotICAgICAgICBmb3Ig
KHZhciBpIGluIFN0cmluZy5zdGFuZGFyZEZvcm1hdHRlcnMpCi0gICAgICAgICAgICBmb3JtYXR0
ZXJzW2ldID0gU3RyaW5nLnN0YW5kYXJkRm9ybWF0dGVyc1tpXTsKIAogICAgICAgICBmdW5jdGlv
biBjb25zb2xlRm9ybWF0V3JhcHBlcihmb3JjZSkKICAgICAgICAgewpAQCAtOTkwLDEwICs5ODgs
MTUgQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLnByb3RvdHlwZSA9IHsKICAgICAgICAg
ICAgIH07CiAgICAgICAgIH0KIAorICAgICAgICBmdW5jdGlvbiB2YWx1ZUZvcm1hdHRlcihvYmop
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBvYmouZGVzY3JpcHRpb247CisgICAgICAg
IH0KKwogICAgICAgICAvLyBGaXJlYnVnIHVzZXMgJW8gZm9yIGZvcm1hdHRpbmcgb2JqZWN0cy4K
ICAgICAgICAgZm9ybWF0dGVycy5vID0gY29uc29sZUZvcm1hdFdyYXBwZXIoKTsKICAgICAgICAg
Ly8gRmlyZWJ1ZyBhbGxvd3MgYm90aCAlaSBhbmQgJWQgZm9yIGZvcm1hdHRpbmcgaW50ZWdlcnMu
Ci0gICAgICAgIGZvcm1hdHRlcnMuaSA9IGZvcm1hdHRlcnMuZDsKKyAgICAgICAgZm9ybWF0dGVy
cy5zID0gZm9ybWF0dGVycy5mID0gZm9ybWF0dGVycy5pID0gZm9ybWF0dGVycy5kID0gdmFsdWVG
b3JtYXR0ZXI7CiAgICAgICAgIC8vIFN1cHBvcnQgJU8gdG8gZm9yY2Ugb2JqZWN0IGZvcm1hdHRp
bmcsIGluc3RlYWQgb2YgdGhlIHR5cGUtYmFzZWQgJW8gZm9ybWF0dGluZy4KICAgICAgICAgZm9y
bWF0dGVycy5PID0gY29uc29sZUZvcm1hdFdyYXBwZXIodHJ1ZSk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzCmluZGV4IDczMDAzNzFhYjc3MDJl
ZmI5NGY1M2UyMjQ4NjRhNDQ1NDljZjNlMDkuLjA1NGZhNzhiMGRjMjRhNGUxOGFiMjlmZjJlN2Q4
NDk3MTViYWNiN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvRE9NQWdlbnQuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9E
T01BZ2VudC5qcwpAQCAtMjE2LDcgKzIxNiw3IEBAIFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3Rv
dHlwZSA9IHsKIAogICAgIGFwcHJvcHJpYXRlU2VsZWN0b3JGb3I6IGZ1bmN0aW9uKGp1c3RTZWxl
Y3RvcikKICAgICB7Ci0gICAgICAgIHZhciBsb3dlckNhc2VOYW1lID0gdGhpcy5sb2NhbE5hbWUo
KSB8fCBub2RlLm5vZGVOYW1lKCkudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgdmFyIGxvd2VyQ2Fz
ZU5hbWUgPSB0aGlzLmxvY2FsTmFtZSgpIHx8IHRoaXMubm9kZU5hbWUoKS50b0xvd2VyQ2FzZSgp
OwogCiAgICAgICAgIHZhciBpZCA9IHRoaXMuZ2V0QXR0cmlidXRlKCJpZCIpOwogICAgICAgICBp
ZiAoaWQpIHsKQEAgLTIzNiw2ICsyMzYsMzQgQEAgV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90
eXBlID0gewogICAgICAgICByZXR1cm4gbG93ZXJDYXNlTmFtZTsKICAgICB9LAogCisgICAgaXNB
bmNlc3RvcjogZnVuY3Rpb24obm9kZSkKKyAgICB7CisgICAgICAgIGlmICghbm9kZSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAgICAgdmFyIGN1cnJlbnROb2RlID0gbm9k
ZS5wYXJlbnROb2RlOworICAgICAgICB3aGlsZSAoY3VycmVudE5vZGUpIHsKKyAgICAgICAgICAg
IGlmICh0aGlzID09PSBjdXJyZW50Tm9kZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUucGFyZW50Tm9kZTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSwKKworICAgIGlzRGVzY2VuZGFudDog
ZnVuY3Rpb24oZGVzY2VuZGFudCkKKyAgICB7CisgICAgICAgIHJldHVybiBkZXNjZW5kYW50ICE9
PSBudWxsICYmIGRlc2NlbmRhbnQuaXNBbmNlc3Rvcih0aGlzKTsKKyAgICB9LAorCisgICAgaXNX
aGl0ZXNwYWNlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodGhpcy5ub2RlVHlwZSAh
PT0gTm9kZS5URVhUX05PREUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlm
ICghdGhpcy5ub2RlVmFsdWUubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIHJldHVybiB0aGlzLm5vZGVWYWx1ZS5tYXRjaCgvXltcc1x4QTBdKyQvKTsKKyAgICB9LAor
CiAgICAgX3NldEF0dHJpYnV0ZXNQYXlsb2FkOiBmdW5jdGlvbihhdHRycykKICAgICB7CiAgICAg
ICAgIHRoaXMuX2F0dHJpYnV0ZXMgPSBbXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvRGF0YUdyaWQuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0RhdGFHcmlkLmpzCmluZGV4IGMzNDgwNmQ3MTVlYmQ1YzlmYWIwMmMzYTczMDA2
M2NjNzRlMWQwYjIuLjIyYzg5NThiMzBhNTUxZTFkOGY3ZGY1ODQzYzZlNWE4OWFkOGM4N2EgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGF0YUdyaWQuanMK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhR3JpZC5qcwpAQCAt
OTY1LDcgKzk2NSw3IEBAIFdlYkluc3BlY3Rvci5EYXRhR3JpZC5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIAogICAgICAgICAvLyBDb25zdHJhaW4gdGhlIGRyYWdwb2ludCB0byBiZSB3aXRoaW4gdGhl
IGNvbnRhaW5pbmcgZGl2IG9mIHRoZQogICAgICAgICAvLyBkYXRhZ3JpZC4KLSAgICAgICAgdmFy
IGRyYWdQb2ludCA9IGV2ZW50LmNsaWVudFggLSB0aGlzLmVsZW1lbnQudG90YWxPZmZzZXRMZWZ0
OworICAgICAgICB2YXIgZHJhZ1BvaW50ID0gZXZlbnQuY2xpZW50WCAtIHRoaXMuZWxlbWVudC50
b3RhbE9mZnNldExlZnQoKTsKICAgICAgICAgLy8gQ29uc3RyYWluIHRoZSBkcmFncG9pbnQgdG8g
YmUgd2l0aGluIHRoZSBzcGFjZSBtYWRlIHVwIGJ5IHRoZQogICAgICAgICAvLyBjb2x1bW4gZGly
ZWN0bHkgdG8gdGhlIGxlZnQgYW5kIHRoZSBjb2x1bW4gZGlyZWN0bHkgdG8gdGhlIHJpZ2h0Lgog
ICAgICAgICB2YXIgbGVmdENlbGxJbmRleCA9IHJlc2l6ZXIubGVmdE5laWdoYm9yaW5nQ29sdW1u
SUQ7CkBAIC0xNDQ1LDcgKzE0NDUsNyBAQCBXZWJJbnNwZWN0b3IuRGF0YUdyaWROb2RlLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgaWYgKCFjZWxsLmhhc1N0eWxlQ2xhc3MoImRpc2Nsb3N1cmUiKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgdmFyIGNvbXB1dGVkTGVmdFBhZGRp
bmcgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjZWxsKS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJw
YWRkaW5nLWxlZnQiKS5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19QWCk7Ci0g
ICAgICAgIHZhciBsZWZ0ID0gY2VsbC50b3RhbE9mZnNldExlZnQgKyBjb21wdXRlZExlZnRQYWRk
aW5nOworICAgICAgICB2YXIgbGVmdCA9IGNlbGwudG90YWxPZmZzZXRMZWZ0KCkgKyBjb21wdXRl
ZExlZnRQYWRkaW5nOwogICAgICAgICByZXR1cm4gZXZlbnQucGFnZVggPj0gbGVmdCAmJiBldmVu
dC5wYWdlWCA8PSBsZWZ0ICsgdGhpcy5kaXNjbG9zdXJlVG9nZ2xlV2lkdGg7CiAgICAgfSwKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EcmF3ZXIuanMg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RyYXdlci5qcwppbmRleCA0ZWRh
ODRhNzhjMThjYzgzNDVhN2I4OGVjMzc1YTA0ZTFmYjg0YTNjLi42ODVhNjZmNTAwNzdlYTcwOTBl
YzIwMjE0NDkwZTA2YTQwNmU0OTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0RyYXdlci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0RyYXdlci5qcwpAQCAtNzcsNyArNzcsNyBAQCBXZWJJbnNwZWN0b3IuRHJhd2VyLnBy
b3RvdHlwZSA9IHsKICAgICBnZXQgc2F2ZWRIZWlnaHQoKQogICAgIHsKICAgICAgICAgdmFyIGhl
aWdodCA9IHRoaXMuX3NhdmVkSGVpZ2h0IHx8IHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQ7Ci0g
ICAgICAgIHJldHVybiBOdW1iZXIuY29uc3RyYWluKGhlaWdodCwgUHJlZmVyZW5jZXMubWluQ29u
c29sZUhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IC0gdGhpcy5fbWFpbkVsZW1lbnQudG90YWxP
ZmZzZXRUb3AgLSBQcmVmZXJlbmNlcy5taW5Db25zb2xlSGVpZ2h0KTsKKyAgICAgICAgcmV0dXJu
IE51bWJlci5jb25zdHJhaW4oaGVpZ2h0LCBQcmVmZXJlbmNlcy5taW5Db25zb2xlSGVpZ2h0LCB3
aW5kb3cuaW5uZXJIZWlnaHQgLSB0aGlzLl9tYWluRWxlbWVudC50b3RhbE9mZnNldFRvcCgpIC0g
UHJlZmVyZW5jZXMubWluQ29uc29sZUhlaWdodCk7CiAgICAgfSwKIAogICAgIHNob3dWaWV3OiBm
dW5jdGlvbih2aWV3KQpAQCAtMjA2LDcgKzIwNiw3IEBAIFdlYkluc3BlY3Rvci5EcmF3ZXIucHJv
dG90eXBlID0gewogICAgICAgICB2YXIgaGVpZ2h0OwogICAgICAgICBpZiAodGhpcy5zdGF0ZSA9
PT0gV2ViSW5zcGVjdG9yLkRyYXdlci5TdGF0ZS5WYXJpYWJsZSkgewogICAgICAgICAgICAgaGVp
Z2h0ID0gcGFyc2VJbnQodGhpcy5lbGVtZW50LnN0eWxlLmhlaWdodCk7Ci0gICAgICAgICAgICBo
ZWlnaHQgPSBOdW1iZXIuY29uc3RyYWluKGhlaWdodCwgUHJlZmVyZW5jZXMubWluQ29uc29sZUhl
aWdodCwgd2luZG93LmlubmVySGVpZ2h0IC0gdGhpcy5fbWFpbkVsZW1lbnQudG90YWxPZmZzZXRU
b3AgLSBQcmVmZXJlbmNlcy5taW5Db25zb2xlSGVpZ2h0KTsKKyAgICAgICAgICAgIGhlaWdodCA9
IE51bWJlci5jb25zdHJhaW4oaGVpZ2h0LCBQcmVmZXJlbmNlcy5taW5Db25zb2xlSGVpZ2h0LCB3
aW5kb3cuaW5uZXJIZWlnaHQgLSB0aGlzLl9tYWluRWxlbWVudC50b3RhbE9mZnNldFRvcCgpIC0g
UHJlZmVyZW5jZXMubWluQ29uc29sZUhlaWdodCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgaGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IC0gdGhpcy5fdG9vbGJhckVsZW1lbnQub2Zm
c2V0SGVpZ2h0OwogCkBAIC0zMzEsNyArMzMxLDcgQEAgV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90
b3R5cGUgPSB7CiAKICAgICAgICAgV2ViSW5zcGVjdG9yLmVsZW1lbnREcmFnU3RhcnQodGhpcy5f
bWFpblN0YXR1c0JhciwgdGhpcy5fc3RhdHVzQmFyRHJhZ2dpbmcuYmluZCh0aGlzKSwgdGhpcy5f
ZW5kU3RhdHVzQmFyRHJhZ2dpbmcuYmluZCh0aGlzKSwgZXZlbnQsICJyb3ctcmVzaXplIik7CiAK
LSAgICAgICAgdGhpcy5fc3RhdHVzQmFyRHJhZ09mZnNldCA9IGV2ZW50LnBhZ2VZIC0gdGhpcy5l
bGVtZW50LnRvdGFsT2Zmc2V0VG9wOworICAgICAgICB0aGlzLl9zdGF0dXNCYXJEcmFnT2Zmc2V0
ID0gZXZlbnQucGFnZVkgLSB0aGlzLmVsZW1lbnQudG90YWxPZmZzZXRUb3AoKTsKIAogICAgICAg
ICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICB9LApAQCAtMzM5LDcgKzMzOSw3IEBAIFdl
Ykluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlID0gewogICAgIF9zdGF0dXNCYXJEcmFnZ2luZzog
ZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICB2YXIgaGVpZ2h0ID0gd2luZG93LmlubmVy
SGVpZ2h0IC0gZXZlbnQucGFnZVkgKyB0aGlzLl9zdGF0dXNCYXJEcmFnT2Zmc2V0OwotICAgICAg
ICBoZWlnaHQgPSBOdW1iZXIuY29uc3RyYWluKGhlaWdodCwgUHJlZmVyZW5jZXMubWluQ29uc29s
ZUhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IC0gdGhpcy5fbWFpbkVsZW1lbnQudG90YWxPZmZz
ZXRUb3AgLSBQcmVmZXJlbmNlcy5taW5Db25zb2xlSGVpZ2h0KTsKKyAgICAgICAgaGVpZ2h0ID0g
TnVtYmVyLmNvbnN0cmFpbihoZWlnaHQsIFByZWZlcmVuY2VzLm1pbkNvbnNvbGVIZWlnaHQsIHdp
bmRvdy5pbm5lckhlaWdodCAtIHRoaXMuX21haW5FbGVtZW50LnRvdGFsT2Zmc2V0VG9wKCkgLSBQ
cmVmZXJlbmNlcy5taW5Db25zb2xlSGVpZ2h0KTsKIAogICAgICAgICB0aGlzLl9tYWluRWxlbWVu
dC5zdHlsZS5ib3R0b20gPSBoZWlnaHQgKyAicHgiOwogICAgICAgICB0aGlzLmVsZW1lbnQuc3R5
bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgInB4IjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcwppbmRleCAzYmM3ZmMxMjFlNTQ3NDQ5M2M1
MDBhNDJlNGNmYzkwNjQ0MTE0ZTM5Li40YWIwMjdkYTlmY2U5OWJkYjQ5ZGEwZmJlY2JmNjJmNDU5
MGM1MWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Vs
ZW1lbnRzUGFuZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9F
bGVtZW50c1BhbmVsLmpzCkBAIC00NzksNyArNDc5LDcgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRz
UGFuZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIHVwZGF0ZWRQYXJlbnRUcmVlRWxl
bWVudHMucHVzaChwYXJlbnROb2RlSXRlbSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGlmICghdXBkYXRlQnJlYWRjcnVtYnMgJiYgKHRoaXMuc2VsZWN0ZWRET01Ob2RlKCkgPT09IHBh
cmVudCB8fCBpc0FuY2VzdG9yTm9kZSh0aGlzLnNlbGVjdGVkRE9NTm9kZSgpLCBwYXJlbnQpKSkK
KyAgICAgICAgICAgIGlmICghdXBkYXRlQnJlYWRjcnVtYnMgJiYgKHRoaXMuc2VsZWN0ZWRET01O
b2RlKCkgPT09IHBhcmVudCB8fCB0aGlzLnNlbGVjdGVkRE9NTm9kZSgpLmlzQW5jZXN0b3IocGFy
ZW50KSkpCiAgICAgICAgICAgICAgICAgdXBkYXRlQnJlYWRjcnVtYnMgPSB0cnVlOwogICAgICAg
ICB9CiAKQEAgLTYyMSw3ICs2MjEsNyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbC5wcm90
b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAg
Y2FzZSBOb2RlLlRFWFRfTk9ERToKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzTm9kZVdoaXRl
c3BhY2UuY2FsbChjdXJyZW50KSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQuaXNX
aGl0ZXNwYWNlKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjcnVtYlRpdGxlID0gV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCIod2hpdGVzcGFjZSkiKTsKICAgICAgICAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgICAgICAgICAgY3J1bWJUaXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0
cmluZygiKHRleHQpIik7CkBAIC03ODMsNyArNzgzLDcgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRz
UGFuZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAgdmFyIGVycm9yV2FybmluZ0VsZW1lbnQg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXJyb3Itd2FybmluZy1jb3VudCIpOwogICAgICAg
ICAgICAgaWYgKCFXZWJJbnNwZWN0b3IuZHJhd2VyLnZpc2libGUgJiYgZXJyb3JXYXJuaW5nRWxl
bWVudCkKICAgICAgICAgICAgICAgICByaWdodFBhZGRpbmcgKz0gZXJyb3JXYXJuaW5nRWxlbWVu
dC5vZmZzZXRXaWR0aDsKLSAgICAgICAgICAgIHJldHVybiAoKGNydW1icy50b3RhbE9mZnNldExl
ZnQgKyBjcnVtYnMub2Zmc2V0V2lkdGggKyByaWdodFBhZGRpbmcpIDwgd2luZG93LmlubmVyV2lk
dGgpOworICAgICAgICAgICAgcmV0dXJuICgoY3J1bWJzLnRvdGFsT2Zmc2V0TGVmdCgpICsgY3J1
bWJzLm9mZnNldFdpZHRoICsgcmlnaHRQYWRkaW5nKSA8IHdpbmRvdy5pbm5lcldpZHRoKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGlmIChjcnVtYnNBcmVTbWFsbGVyVGhhbkNvbnRhaW5lcigpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1Ry
ZWVPdXRsaW5lLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50
c1RyZWVPdXRsaW5lLmpzCmluZGV4IDNkOTBlYzVmMzRlZDY4NzE4M2UyNjIwNWE1ZDQyNjQ2YTUx
YzFjYWEuLmFhNjE3Nzg3YzVmYTUxZGEzNmVkNmM1ZTc3Mjc5ODYzYmFkMWUxZWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGlu
ZS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzVHJl
ZU91dGxpbmUuanMKQEAgLTE0Niw2ICsxNDYsMTAgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJl
ZU91dGxpbmUucHJvdG90eXBlID0gewogCiAgICAgZmluZFRyZWVFbGVtZW50OiBmdW5jdGlvbihu
b2RlKQogICAgIHsKKyAgICAgICAgZnVuY3Rpb24gaXNBbmNlc3Rvck5vZGUoYW5jZXN0b3IsIG5v
ZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhbmNlc3Rvci5pc0FuY2VzdG9yKG5v
ZGUpOworICAgICAgICB9CiAgICAgICAgIHZhciB0cmVlRWxlbWVudCA9IFRyZWVPdXRsaW5lLnBy
b3RvdHlwZS5maW5kVHJlZUVsZW1lbnQuY2FsbCh0aGlzLCBub2RlLCBpc0FuY2VzdG9yTm9kZSwg
cGFyZW50Tm9kZSk7CiAgICAgICAgIGlmICghdHJlZUVsZW1lbnQgJiYgbm9kZS5ub2RlVHlwZSgp
ID09PSBOb2RlLlRFWFRfTk9ERSkgewogICAgICAgICAgICAgLy8gVGhlIHRleHQgbm9kZSBtaWdo
dCBoYXZlIGJlZW4gaW5saW5lZCBpZiBpdCB3YXMgc2hvcnQsIHNvIHRyeSB0byBmaW5kIHRoZSBw
YXJlbnQgZWxlbWVudC4KQEAgLTE5Nyw3ICsyMDEsNyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNU
cmVlT3V0bGluZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIC8vIGl0ZW1zIGV4dGVuZCBhdCBsZWFz
dCB0byB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgb3V0ZXIgPG9sPiBjb250YWluZXIuCiAgICAgICAg
IC8vIEluIHRoZSBuby13b3JkLXdyYXAgbW9kZSB0aGUgb3V0ZXIgPG9sPiBtYXkgYmUgd2lkZXIg
dGhhbiB0aGUgdHJlZSBjb250YWluZXIKICAgICAgICAgLy8gKGFuZCBwYXJ0aWFsbHkgaGlkZGVu
KSwgaW4gd2hpY2ggY2FzZSB3ZSBhcmUgbGVmdCB0byB1c2Ugb25seSBpdHMgcmlnaHQgYm91bmRh
cnkuCi0gICAgICAgIHZhciB4ID0gc2Nyb2xsQ29udGFpbmVyLnRvdGFsT2Zmc2V0TGVmdCArIHNj
cm9sbENvbnRhaW5lci5vZmZzZXRXaWR0aCAtIDM2OworICAgICAgICB2YXIgeCA9IHNjcm9sbENv
bnRhaW5lci50b3RhbE9mZnNldExlZnQoKSArIHNjcm9sbENvbnRhaW5lci5vZmZzZXRXaWR0aCAt
IDM2OwogCiAgICAgICAgIHZhciB5ID0gZXZlbnQucGFnZVk7CiAKQEAgLTE0NjYsNyArMTQ3MCw3
IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAg
ICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBOb2RlLlRFWFRfTk9ERToKLSAg
ICAgICAgICAgICAgICBpZiAoaXNOb2RlV2hpdGVzcGFjZS5jYWxsKG5vZGUpKQorICAgICAgICAg
ICAgICAgIGlmIChub2RlLmlzV2hpdGVzcGFjZSgpKQogICAgICAgICAgICAgICAgICAgICBpbmZv
LnRpdGxlRE9NLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIod2hpdGVzcGFj
ZSkiKSk7CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChu
b2RlLnBhcmVudE5vZGUgJiYgbm9kZS5wYXJlbnROb2RlLm5vZGVOYW1lKCkudG9Mb3dlckNhc2Uo
KSA9PT0gInNjcmlwdCIpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvUmVtb3RlT2JqZWN0LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9SZW1vdGVPYmplY3QuanMKaW5kZXggODlkMDE3NGUyYjUzNjgzNWYyMjE2ZDMyNjY5M2Ux
MjVhOTU4MzgwOS4uNzIwMTgxODk4MTkyNmNjMWQ1MDIzOTJhYjgzMmNjNzk5NjQ2NDJjYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZW1vdGVPYmplY3Qu
anMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZW1vdGVPYmplY3Qu
anMKQEAgLTQyLDYgKzQyLDcgQEAgV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdCA9IGZ1bmN0aW9u
KG9iamVjdElkLCB0eXBlLCBzdWJ0eXBlLCB2YWx1ZSwgZGVzY3JpcHRpb24KICAgICAgICAgY29u
c29sZS5hc3NlcnQodHlwZSAhPT0gIm9iamVjdCIgfHwgdmFsdWUgPT09IG51bGwpOwogICAgICAg
ICB0aGlzLl9kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uIHx8ICh2YWx1ZSArICIiKTsKICAgICAg
ICAgdGhpcy5faGFzQ2hpbGRyZW4gPSBmYWxzZTsKKyAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVl
OwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9SZXNvdXJjZVRpbWluZ1ZpZXcuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1Jlc291cmNlVGltaW5nVmlldy5qcwppbmRleCBlOTYyNGJmMDNiNWEyNzQyZmIwY2My
MTRjMzA4NTY3NjQxNTA3ZDFkLi4yZjEzZTkzZTUzNDJlNmEzYTI2MTU4NTA2ZDMwNGIzODM4N2E2
YzRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291
cmNlVGltaW5nVmlldy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1Jlc291cmNlVGltaW5nVmlldy5qcwpAQCAtMTQ4LDcgKzE0OCw3IEBAIFdlYkluc3BlY3Rvci5S
ZXNvdXJjZVRpbWluZ1ZpZXcuY3JlYXRlVGltaW5nVGFibGUgPSBmdW5jdGlvbihyZXNvdXJjZSkK
ICAgICAgICAgICAgIHRpdGxlLnN0eWxlLnJpZ2h0ID0gKHNjYWxlICogKHRvdGFsIC0gcm93c1tp
XS5lbmQpICsgMykgKyAicHgiOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB0aXRsZS5zdHls
ZS5sZWZ0ID0gKHNjYWxlICogcm93c1tpXS5zdGFydCArIDMpICsgInB4IjsKLSAgICAgICAgdGl0
bGUudGV4dENvbnRlbnQgPSBOdW1iZXIubWlsbGlzVG9TdHJpbmcocm93c1tpXS5lbmQgLSByb3dz
W2ldLnN0YXJ0KTsKKyAgICAgICAgdGl0bGUudGV4dENvbnRlbnQgPSBOdW1iZXIuc2Vjb25kc1Rv
U3RyaW5nKChyb3dzW2ldLmVuZCAtIHJvd3NbaV0uc3RhcnQpIC8gMTAwMCk7CiAgICAgICAgIHJv
dy5hcHBlbmRDaGlsZCh0aXRsZSk7CiAKICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZXNQYW5l
bC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VzUGFuZWwu
anMKaW5kZXggOTNmMzJlMTJiMjVkY2RhMjJkODc3YzIwMDgwNGFhODdiMzMwNWY0ZS4uNzNlZTdh
YmIzNjI5MDgyNTUyZjM4Nzg5ZTFjY2UyMmU0ZjZjOWY1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZXNQYW5lbC5qcworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlc1BhbmVsLmpzCkBAIC05NzIsNyAr
OTcyLDcgQEAgV2ViSW5zcGVjdG9yLkJhc2VTdG9yYWdlVHJlZUVsZW1lbnQucHJvdG90eXBlID0g
ewogICAgICAgICAvLyBIZW5jZSB3ZSBuZWVkIHRvIHRha2UgcGFkZGluZyBpbnRvIGNvbnNpZGVy
YXRpb24uIFRoaXMgYWxsIGlzIG5lZWRlZCBmb3IgbGVhZGluZwogICAgICAgICAvLyBpY29ucyBp
biB0aGUgdHJlZS4KICAgICAgICAgY29uc3QgcGFkZGluZ0xlZnQgPSAxNDsKLSAgICAgICAgdmFy
IGxlZnQgPSB0aGlzLmxpc3RJdGVtRWxlbWVudC50b3RhbE9mZnNldExlZnQgKyBwYWRkaW5nTGVm
dDsKKyAgICAgICAgdmFyIGxlZnQgPSB0aGlzLmxpc3RJdGVtRWxlbWVudC50b3RhbE9mZnNldExl
ZnQoKSArIHBhZGRpbmdMZWZ0OwogICAgICAgICByZXR1cm4gZXZlbnQucGFnZVggPj0gbGVmdCAm
JiBldmVudC5wYWdlWCA8PSBsZWZ0ICsgdGhpcy5hcnJvd1RvZ2dsZVdpZHRoICYmIHRoaXMuaGFz
Q2hpbGRyZW47CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1NjcmlwdHNQYW5lbC5qcwppbmRleCBjZmFjNGEwODIyYmMxMWQ2ZTU2MzVlZWQxYzkz
YzMwZmU5OGQxODg1Li41YTg0MWVmZmFlYzUxZWQzZDhkNzMwZGMyODc2ZTVjZTg2ZTMwNzM5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5l
bC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5l
bC5qcwpAQCAtNzY0LDcgKzc2NCw3IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90
eXBlID0gewogICAgICAgICBXZWJJbnNwZWN0b3IuZWxlbWVudERyYWdTdGFydCh0aGlzLnNpZGVi
YXJFbGVtZW50LCB0aGlzLl9zaWRlYmFyUmVzaXplRHJhZy5iaW5kKHRoaXMpLCB0aGlzLl9lbmRT
aWRlYmFyUmVzaXplRHJhZy5iaW5kKHRoaXMpLCBldmVudCwgImV3LXJlc2l6ZSIpOwogCiAgICAg
ICAgIGlmIChldmVudC50YXJnZXQgPT09IHRoaXMuc2lkZWJhclJlc2l6ZVdpZGdldEVsZW1lbnQp
Ci0gICAgICAgICAgICB0aGlzLl9kcmFnT2Zmc2V0ID0gKGV2ZW50LnRhcmdldC5vZmZzZXRXaWR0
aCAtIChldmVudC5wYWdlWCAtIGV2ZW50LnRhcmdldC50b3RhbE9mZnNldExlZnQpKTsKKyAgICAg
ICAgICAgIHRoaXMuX2RyYWdPZmZzZXQgPSAoZXZlbnQudGFyZ2V0Lm9mZnNldFdpZHRoIC0gKGV2
ZW50LnBhZ2VYIC0gZXZlbnQudGFyZ2V0LnRvdGFsT2Zmc2V0TGVmdCgpKSk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIHRoaXMuX2RyYWdPZmZzZXQgPSAwOwogICAgIH0sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvZnRDb250ZXh0TWVudS5qcyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU29mdENvbnRleHRNZW51LmpzCmlu
ZGV4IDAyMTQ5ODI2OGU4ODljNTA1YjU5NjgzY2I4YjRhYTVmY2FmZDRiMzMuLjI1OGExZjc0YmI5
NDlhY2IxYTFiYzY5YWY1MjIyNmNiNTVkNDU3MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvU29mdENvbnRleHRNZW51LmpzCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU29mdENvbnRleHRNZW51LmpzCkBAIC00Myw4ICs0Myw4
IEBAIFdlYkluc3BlY3Rvci5Tb2Z0Q29udGV4dE1lbnUucHJvdG90eXBlID0gewogICAgICAgICB2
YXIgdGFyZ2V0RWxlbWVudCA9IGV2ZW50LnRhcmdldDsKICAgICAgICAgd2hpbGUgKHRhcmdldEVs
ZW1lbnQgJiYgd2luZG93ICE9PSB0YXJnZXRFbGVtZW50Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZp
ZXcpIHsKICAgICAgICAgICAgIHZhciBmcmFtZUVsZW1lbnQgPSB0YXJnZXRFbGVtZW50Lm93bmVy
RG9jdW1lbnQuZGVmYXVsdFZpZXcuZnJhbWVFbGVtZW50OwotICAgICAgICAgICAgYWJzb2x1dGVZ
ICs9IGZyYW1lRWxlbWVudC50b3RhbE9mZnNldFRvcDsKLSAgICAgICAgICAgIGFic29sdXRlWCAr
PSBmcmFtZUVsZW1lbnQudG90YWxPZmZzZXRMZWZ0OworICAgICAgICAgICAgYWJzb2x1dGVZICs9
IGZyYW1lRWxlbWVudC50b3RhbE9mZnNldFRvcCgpOworICAgICAgICAgICAgYWJzb2x1dGVYICs9
IGZyYW1lRWxlbWVudC50b3RhbE9mZnNldExlZnQoKTsKICAgICAgICAgICAgIHRhcmdldEVsZW1l
bnQgPSBmcmFtZUVsZW1lbnQ7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Ub29sYmFyLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9Ub29sYmFyLmpzCmluZGV4IDYxZmEyZjcxMGFmM2Q0NDIwZDc5NDNkMjIz
MjNhMWRjYTAwZDE5N2QuLjMxMjIzZTE0MWJlYjBmNDExZmRjNTc4Nzk2ZTU0OTAzMDYyMzM2YTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVG9vbGJhci5q
cworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Rvb2xiYXIuanMKQEAg
LTE4NywxMCArMTg3LDEwIEBAIFdlYkluc3BlY3Rvci5Ub29sYmFyRHJvcGRvd24ucHJvdG90eXBl
ID0gewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB2YXIgc3R5bGUgPSB0aGlzLmVsZW1l
bnQuc3R5bGU7CiAgICAgICAgIHRoaXMuX3BvcHVsYXRlKCk7Ci0gICAgICAgIHZhciB0b3AgPSB0
aGlzLl9hcnJvdy50b3RhbE9mZnNldFRvcCArIHRoaXMuX2Fycm93LmNsaWVudEhlaWdodDsKKyAg
ICAgICAgdmFyIHRvcCA9IHRoaXMuX2Fycm93LnRvdGFsT2Zmc2V0VG9wKCkgKyB0aGlzLl9hcnJv
dy5jbGllbnRIZWlnaHQ7CiAgICAgICAgIHRoaXMuX2Fycm93LmFkZFN0eWxlQ2xhc3MoImRyb3Bk
b3duLXZpc2libGUiKTsKICAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLnRvcCA9IHRvcCArICJw
eCI7Ci0gICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5sZWZ0ID0gdGhpcy5fYXJyb3cudG90YWxP
ZmZzZXRMZWZ0ICsgInB4IjsKKyAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmxlZnQgPSB0aGlz
Ll9hcnJvdy50b3RhbE9mZnNldExlZnQoKSArICJweCI7CiAgICAgICAgIHRoaXMuX2NvbnRlbnRF
bGVtZW50LnN0eWxlLm1heEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHRvcCAtIDIwICsg
InB4IjsKICAgICAgICAgdGhpcy5fdG9vbGJhci5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpOwog
ICAgICAgICBXZWJJbnNwZWN0b3IuY3VycmVudEZvY3VzRWxlbWVudCA9IHRoaXMuY29udGVudEVs
ZW1lbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dh
dGNoRXhwcmVzc2lvbnNTaWRlYmFyUGFuZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvV2F0Y2hFeHByZXNzaW9uc1NpZGViYXJQYW5lLmpzCmluZGV4IGZkMmM1NjVkNzA1
YzAwNjI0NGY4MmM2NDJiYWJkOTRhOGUxM2JjMzcuLjY1YTQwMGZkZWM2YzY5NzAxNGU4OTMwODFh
MTE5ZDBmNWJmNzgzMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvV2F0Y2hFeHByZXNzaW9uc1NpZGViYXJQYW5lLmpzCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvV2F0Y2hFeHByZXNzaW9uc1NpZGViYXJQYW5lLmpzCkBAIC0y
NTksNyArMjU5LDcgQEAgV2ViSW5zcGVjdG9yLldhdGNoRXhwcmVzc2lvbnNTZWN0aW9uLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgICAgIHZhciBuZXh0ID0gdGhpcy5faG92ZXJlZEVsZW1lbnQubmV4
dFNpYmxpbmc7CiAgICAgICAgICAgICB3aGlsZShuZXh0ICYmICFuZXh0LmNsaWVudEhlaWdodCkK
ICAgICAgICAgICAgICAgICBuZXh0ID0gbmV4dC5uZXh0U2libGluZzsKLSAgICAgICAgICAgIGlm
ICghbmV4dCB8fCBuZXh0LnRvdGFsT2Zmc2V0VG9wID4gcGFnZVkpCisgICAgICAgICAgICBpZiAo
IW5leHQgfHwgbmV4dC50b3RhbE9mZnNldFRvcCgpID4gcGFnZVkpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB0aGlzLl9ob3ZlcmVkRWxlbWVudCA9IG5leHQ7CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVj
dG9yLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMK
aW5kZXggMDc2ODAwYjg3ZjdkMmU0MjFhOTFmYjdkMTJhODQ1NzdmYmI4ZTQxYS4uMGNmM2JjNjk5
YTNjMzI3ZGJmNjljMjM5ZWY1ZDZkOGRkOGRiYTcwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKQEAgLTE3MTYsMyArMTcxNiw1MCBAQCBX
ZWJJbnNwZWN0b3IuUGFuZWxIaXN0b3J5LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5faGlz
dG9yeUl0ZXJhdG9yID0gdGhpcy5faGlzdG9yeS5sZW5ndGggLSAxOwogICAgIH0KIH0KKworTnVt
YmVyLnNlY29uZHNUb1N0cmluZyA9IGZ1bmN0aW9uKHNlY29uZHMsIGhpZ2hlclJlc29sdXRpb24p
Cit7CisgICAgaWYgKHNlY29uZHMgPT09IDApCisgICAgICAgIHJldHVybiAiMCI7CisKKyAgICB2
YXIgbXMgPSBzZWNvbmRzICogMTAwMDsKKyAgICBpZiAoaGlnaGVyUmVzb2x1dGlvbiAmJiBtcyA8
IDEwMDApCisgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiUuM2ZtcyIsIG1z
KTsKKyAgICBlbHNlIGlmIChtcyA8IDEwMDApCisgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIiUuMGZtcyIsIG1zKTsKKworICAgIGlmIChzZWNvbmRzIDwgNjApCisgICAgICAg
IHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiUuMmZzIiwgc2Vjb25kcyk7CisKKyAgICB2
YXIgbWludXRlcyA9IHNlY29uZHMgLyA2MDsKKyAgICBpZiAobWludXRlcyA8IDYwKQorICAgICAg
ICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlLjFmbWluIiwgbWludXRlcyk7CisKKyAg
ICB2YXIgaG91cnMgPSBtaW51dGVzIC8gNjA7CisgICAgaWYgKGhvdXJzIDwgMjQpCisgICAgICAg
IHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiUuMWZocnMiLCBob3Vycyk7CisKKyAgICB2
YXIgZGF5cyA9IGhvdXJzIC8gMjQ7CisgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygi
JS4xZiBkYXlzIiwgZGF5cyk7Cit9CisKK051bWJlci5ieXRlc1RvU3RyaW5nID0gZnVuY3Rpb24o
Ynl0ZXMsIGhpZ2hlclJlc29sdXRpb24pCit7CisgICAgaWYgKHR5cGVvZiBoaWdoZXJSZXNvbHV0
aW9uID09PSAidW5kZWZpbmVkIikKKyAgICAgICAgaGlnaGVyUmVzb2x1dGlvbiA9IHRydWU7CisK
KyAgICBpZiAoYnl0ZXMgPCAxMDI0KQorICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCIlLjBmQiIsIGJ5dGVzKTsKKworICAgIHZhciBraWxvYnl0ZXMgPSBieXRlcyAvIDEwMjQ7
CisgICAgaWYgKGhpZ2hlclJlc29sdXRpb24gJiYga2lsb2J5dGVzIDwgMTAyNCkKKyAgICAgICAg
cmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygiJS4yZktCIiwga2lsb2J5dGVzKTsKKyAgICBl
bHNlIGlmIChraWxvYnl0ZXMgPCAxMDI0KQorICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCIlLjBmS0IiLCBraWxvYnl0ZXMpOworCisgICAgdmFyIG1lZ2FieXRlcyA9IGtpbG9i
eXRlcyAvIDEwMjQ7CisgICAgaWYgKGhpZ2hlclJlc29sdXRpb24pCisgICAgICAgIHJldHVybiBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiUuMmZNQiIsIG1lZ2FieXRlcyk7CisgICAgZWxzZQorICAg
ICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlLjBmTUIiLCBtZWdhYnl0ZXMpOwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90cmVlb3V0
bGluZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdHJlZW91dGxpbmUu
anMKaW5kZXggYjg4MTg2NWRmZjMwODA2ZWJjZGI3YjgyNjg3NDEwOWMzN2NkYWFmNi4uZWEzY2Rl
Njg0NzJkNWQzODA4ZGUyODk2MTkxNDUwMTAzNGRiNDdkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90cmVlb3V0bGluZS5qcworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3RyZWVvdXRsaW5lLmpzCkBAIC0yNiw4ICsyNiwxNCBA
QAogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KICAqLwogCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICovCiBmdW5jdGlv
biBUcmVlT3V0bGluZShsaXN0Tm9kZSkKIHsKKyAgICAvKioKKyAgICAgKiBAdHlwZSB7QXJyYXku
PFRyZWVFbGVtZW50Pn0KKyAgICAgKi8KICAgICB0aGlzLmNoaWxkcmVuID0gW107CiAgICAgdGhp
cy5zZWxlY3RlZFRyZWVFbGVtZW50ID0gbnVsbDsKICAgICB0aGlzLl9jaGlsZHJlbkxpc3ROb2Rl
ID0gbGlzdE5vZGU7CkBAIC00Nyw3ICs1Myw3IEBAIGZ1bmN0aW9uIFRyZWVPdXRsaW5lKGxpc3RO
b2RlKQogCiBUcmVlT3V0bGluZS5fa25vd25UcmVlRWxlbWVudE5leHRJZGVudGlmaWVyID0gMTsK
IAotVHJlZU91dGxpbmUuX2FwcGVuZENoaWxkID0gZnVuY3Rpb24oY2hpbGQpCitUcmVlT3V0bGlu
ZS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQgPSBmdW5jdGlvbihjaGlsZCkKIHsKICAgICBpZiAoIWNo
aWxkKQogICAgICAgICB0aHJvdygiY2hpbGQgY2FuJ3QgYmUgdW5kZWZpbmVkIG9yIG51bGwiKTsK
QEAgLTg4LDcgKzk0LDcgQEAgVHJlZU91dGxpbmUuX2FwcGVuZENoaWxkID0gZnVuY3Rpb24oY2hp
bGQpCiAgICAgY2hpbGQuX2F0dGFjaCgpOwogfQogCi1UcmVlT3V0bGluZS5faW5zZXJ0Q2hpbGQg
PSBmdW5jdGlvbihjaGlsZCwgaW5kZXgpCitUcmVlT3V0bGluZS5wcm90b3R5cGUuaW5zZXJ0Q2hp
bGQgPSBmdW5jdGlvbihjaGlsZCwgaW5kZXgpCiB7CiAgICAgaWYgKCFjaGlsZCkKICAgICAgICAg
dGhyb3coImNoaWxkIGNhbid0IGJlIHVuZGVmaW5lZCBvciBudWxsIik7CkBAIC0xMzYsNyArMTQy
LDcgQEAgVHJlZU91dGxpbmUuX2luc2VydENoaWxkID0gZnVuY3Rpb24oY2hpbGQsIGluZGV4KQog
ICAgIGNoaWxkLl9hdHRhY2goKTsKIH0KIAotVHJlZU91dGxpbmUuX3JlbW92ZUNoaWxkQXRJbmRl
eCA9IGZ1bmN0aW9uKGNoaWxkSW5kZXgpCitUcmVlT3V0bGluZS5wcm90b3R5cGUucmVtb3ZlQ2hp
bGRBdEluZGV4ID0gZnVuY3Rpb24oY2hpbGRJbmRleCkKIHsKICAgICBpZiAoY2hpbGRJbmRleCA8
IDAgfHwgY2hpbGRJbmRleCA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aCkKICAgICAgICAgdGhyb3co
ImNoaWxkSW5kZXggb3V0IG9mIHJhbmdlIik7CkBAIC0xNzEsNyArMTc3LDcgQEAgVHJlZU91dGxp
bmUuX3JlbW92ZUNoaWxkQXRJbmRleCA9IGZ1bmN0aW9uKGNoaWxkSW5kZXgpCiAgICAgY2hpbGQu
cHJldmlvdXNTaWJsaW5nID0gbnVsbDsKIH0KIAotVHJlZU91dGxpbmUuX3JlbW92ZUNoaWxkID0g
ZnVuY3Rpb24oY2hpbGQpCitUcmVlT3V0bGluZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5j
dGlvbihjaGlsZCkKIHsKICAgICBpZiAoIWNoaWxkKQogICAgICAgICB0aHJvdygiY2hpbGQgY2Fu
J3QgYmUgdW5kZWZpbmVkIG9yIG51bGwiKTsKQEAgLTE4MCwxMCArMTg2LDEwIEBAIFRyZWVPdXRs
aW5lLl9yZW1vdmVDaGlsZCA9IGZ1bmN0aW9uKGNoaWxkKQogICAgIGlmIChjaGlsZEluZGV4ID09
PSAtMSkKICAgICAgICAgdGhyb3coImNoaWxkIG5vdCBmb3VuZCBpbiB0aGlzIG5vZGUncyBjaGls
ZHJlbiIpOwogCi0gICAgVHJlZU91dGxpbmUuX3JlbW92ZUNoaWxkQXRJbmRleC5jYWxsKHRoaXMs
IGNoaWxkSW5kZXgpOworICAgIHRoaXMucmVtb3ZlQ2hpbGRBdEluZGV4LmNhbGwodGhpcywgY2hp
bGRJbmRleCk7CiB9CiAKLVRyZWVPdXRsaW5lLl9yZW1vdmVDaGlsZHJlbiA9IGZ1bmN0aW9uKCkK
K1RyZWVPdXRsaW5lLnByb3RvdHlwZS5yZW1vdmVDaGlsZHJlbiA9IGZ1bmN0aW9uKCkKIHsKICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHsKICAgICAg
ICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTsKQEAgLTIwNCw3ICsyMTAsNyBAQCBUcmVl
T3V0bGluZS5fcmVtb3ZlQ2hpbGRyZW4gPSBmdW5jdGlvbigpCiAgICAgdGhpcy5jaGlsZHJlbiA9
IFtdOwogfQogCi1UcmVlT3V0bGluZS5fcmVtb3ZlQ2hpbGRyZW5SZWN1cnNpdmUgPSBmdW5jdGlv
bigpCitUcmVlT3V0bGluZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGRyZW5SZWN1cnNpdmUgPSBmdW5j
dGlvbigpCiB7CiAgICAgdmFyIGNoaWxkcmVuVG9SZW1vdmUgPSB0aGlzLmNoaWxkcmVuOwogCkBA
IC0yMTYsNyArMjIyLDcgQEAgVHJlZU91dGxpbmUuX3JlbW92ZUNoaWxkcmVuUmVjdXJzaXZlID0g
ZnVuY3Rpb24oKQogICAgIH0KIAogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW5Ub1Jl
bW92ZS5sZW5ndGg7ICsraSkgewotICAgICAgICB2YXIgY2hpbGQgPSBjaGlsZHJlblRvUmVtb3Zl
W2ldOworICAgICAgICBjaGlsZCA9IGNoaWxkcmVuVG9SZW1vdmVbaV07CiAgICAgICAgIGNoaWxk
LmRlc2VsZWN0KCk7CiAgICAgICAgIGlmIChjaGlsZC50cmVlT3V0bGluZSkKICAgICAgICAgICAg
IGNoaWxkLnRyZWVPdXRsaW5lLl9mb3JnZXRUcmVlRWxlbWVudChjaGlsZCk7CkBAIC0zMjIsOCAr
MzI4LDggQEAgVHJlZU91dGxpbmUucHJvdG90eXBlLmZpbmRUcmVlRWxlbWVudCA9IGZ1bmN0aW9u
KHJlcHJlc2VudGVkT2JqZWN0LCBpc0FuY2VzdG9yLAogICAgICAgICAvLyBGSVhNRTogd2UgY291
bGQgZG8gc29tZXRoaW5nIGZhc3RlciB0aGFuIGZpbmRUcmVlRWxlbWVudCBzaW5jZSB3ZSB3aWxs
IGtub3cgdGhlIG5leHQKICAgICAgICAgLy8gYW5jZXN0b3IgZXhpc3RzIGluIHRoZSB0cmVlLgog
ICAgICAgICBpdGVtID0gdGhpcy5maW5kVHJlZUVsZW1lbnQoYW5jZXN0b3JzW2ldLCBpc0FuY2Vz
dG9yLCBnZXRQYXJlbnQpOwotICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLm9ucG9wdWxhdGUpCi0g
ICAgICAgICAgICBpdGVtLm9ucG9wdWxhdGUoaXRlbSk7CisgICAgICAgIGlmIChpdGVtKQorICAg
ICAgICAgICAgaXRlbS5vbnBvcHVsYXRlKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHRoaXMuZ2V0
Q2FjaGVkVHJlZUVsZW1lbnQocmVwcmVzZW50ZWRPYmplY3QpOwpAQCAtMzkyLDcgKzM5OCw3IEBA
IFRyZWVPdXRsaW5lLnByb3RvdHlwZS5fdHJlZUtleURvd24gPSBmdW5jdGlvbihldmVudCkKICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRyZWVFbGVtZW50LmV4cGFuZCgpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChldmVudC5rZXlDb2RlID09PSBX
ZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5LZXlzLkJhY2tzcGFjZS5jb2RlIHx8IGV2ZW50
LmtleUNvZGUgPT09IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXMuRGVsZXRlLmNv
ZGUpIHsKKyAgICB9IGVsc2UgaWYgKGV2ZW50LmtleUNvZGUgPT09IDI3IC8qIEVzYyAqLyB8fCBl
dmVudC5rZXlDb2RlID09PSA0NiAvKiBEZWxldGUgKi8pIHsKICAgICAgICAgaWYgKHRoaXMuc2Vs
ZWN0ZWRUcmVlRWxlbWVudC5vbmRlbGV0ZSkKICAgICAgICAgICAgIGhhbmRsZWQgPSB0aGlzLnNl
bGVjdGVkVHJlZUVsZW1lbnQub25kZWxldGUoKTsKICAgICB9IGVsc2UgaWYgKGlzRW50ZXJLZXko
ZXZlbnQpKSB7CkBAIC00NDEsMTMgKzQ0Nyw5IEBAIFRyZWVPdXRsaW5lLnByb3RvdHlwZS5yZXZl
YWxBbmRTZWxlY3QgPSBmdW5jdGlvbihvbWl0Rm9jdXMpCiAgICAgLy8gdGhpcyBpcyB0aGUgcm9v
dCwgZG8gbm90aGluZwogfQogCi1UcmVlT3V0bGluZS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQgPSBU
cmVlT3V0bGluZS5fYXBwZW5kQ2hpbGQ7Ci1UcmVlT3V0bGluZS5wcm90b3R5cGUuaW5zZXJ0Q2hp
bGQgPSBUcmVlT3V0bGluZS5faW5zZXJ0Q2hpbGQ7Ci1UcmVlT3V0bGluZS5wcm90b3R5cGUucmVt
b3ZlQ2hpbGQgPSBUcmVlT3V0bGluZS5fcmVtb3ZlQ2hpbGQ7Ci1UcmVlT3V0bGluZS5wcm90b3R5
cGUucmVtb3ZlQ2hpbGRBdEluZGV4ID0gVHJlZU91dGxpbmUuX3JlbW92ZUNoaWxkQXRJbmRleDsK
LVRyZWVPdXRsaW5lLnByb3RvdHlwZS5yZW1vdmVDaGlsZHJlbiA9IFRyZWVPdXRsaW5lLl9yZW1v
dmVDaGlsZHJlbjsKLVRyZWVPdXRsaW5lLnByb3RvdHlwZS5yZW1vdmVDaGlsZHJlblJlY3Vyc2l2
ZSA9IFRyZWVPdXRsaW5lLl9yZW1vdmVDaGlsZHJlblJlY3Vyc2l2ZTsKLQorLyoqCisgKiBAY29u
c3RydWN0b3IKKyAqLwogZnVuY3Rpb24gVHJlZUVsZW1lbnQodGl0bGUsIHJlcHJlc2VudGVkT2Jq
ZWN0LCBoYXNDaGlsZHJlbikKIHsKICAgICB0aGlzLl90aXRsZSA9IHRpdGxlOwpAQCAtNTg2LDEy
ICs1ODgsMTIgQEAgVHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgIH0KIH0KIAotVHJlZUVs
ZW1lbnQucHJvdG90eXBlLmFwcGVuZENoaWxkID0gVHJlZU91dGxpbmUuX2FwcGVuZENoaWxkOwot
VHJlZUVsZW1lbnQucHJvdG90eXBlLmluc2VydENoaWxkID0gVHJlZU91dGxpbmUuX2luc2VydENo
aWxkOwotVHJlZUVsZW1lbnQucHJvdG90eXBlLnJlbW92ZUNoaWxkID0gVHJlZU91dGxpbmUuX3Jl
bW92ZUNoaWxkOwotVHJlZUVsZW1lbnQucHJvdG90eXBlLnJlbW92ZUNoaWxkQXRJbmRleCA9IFRy
ZWVPdXRsaW5lLl9yZW1vdmVDaGlsZEF0SW5kZXg7Ci1UcmVlRWxlbWVudC5wcm90b3R5cGUucmVt
b3ZlQ2hpbGRyZW4gPSBUcmVlT3V0bGluZS5fcmVtb3ZlQ2hpbGRyZW47Ci1UcmVlRWxlbWVudC5w
cm90b3R5cGUucmVtb3ZlQ2hpbGRyZW5SZWN1cnNpdmUgPSBUcmVlT3V0bGluZS5fcmVtb3ZlQ2hp
bGRyZW5SZWN1cnNpdmU7CitUcmVlRWxlbWVudC5wcm90b3R5cGUuYXBwZW5kQ2hpbGQgPSBUcmVl
T3V0bGluZS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ7CitUcmVlRWxlbWVudC5wcm90b3R5cGUuaW5z
ZXJ0Q2hpbGQgPSBUcmVlT3V0bGluZS5wcm90b3R5cGUuaW5zZXJ0Q2hpbGQ7CitUcmVlRWxlbWVu
dC5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBUcmVlT3V0bGluZS5wcm90b3R5cGUucmVtb3ZlQ2hp
bGQ7CitUcmVlRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlQ2hpbGRBdEluZGV4ID0gVHJlZU91dGxp
bmUucHJvdG90eXBlLnJlbW92ZUNoaWxkQXRJbmRleDsKK1RyZWVFbGVtZW50LnByb3RvdHlwZS5y
ZW1vdmVDaGlsZHJlbiA9IFRyZWVPdXRsaW5lLnByb3RvdHlwZS5yZW1vdmVDaGlsZHJlbjsKK1Ry
ZWVFbGVtZW50LnByb3RvdHlwZS5yZW1vdmVDaGlsZHJlblJlY3Vyc2l2ZSA9IFRyZWVPdXRsaW5l
LnByb3RvdHlwZS5yZW1vdmVDaGlsZHJlblJlY3Vyc2l2ZTsKIAogVHJlZUVsZW1lbnQucHJvdG90
eXBlLl9hdHRhY2ggPSBmdW5jdGlvbigpCiB7CkBAIC03MzEsOCArNzMzLDcgQEAgVHJlZUVsZW1l
bnQucHJvdG90eXBlLmV4cGFuZCA9IGZ1bmN0aW9uKCkKICAgICAgICAgaWYgKHRoaXMuaGlkZGVu
KQogICAgICAgICAgICAgdGhpcy5fY2hpbGRyZW5MaXN0Tm9kZS5hZGRTdHlsZUNsYXNzKCJoaWRk
ZW4iKTsKIAotICAgICAgICBpZiAodGhpcy5vbnBvcHVsYXRlKQotICAgICAgICAgICAgdGhpcy5v
bnBvcHVsYXRlKHRoaXMpOworICAgICAgICB0aGlzLm9ucG9wdWxhdGUoKTsKIAogICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpCiAgICAgICAgICAg
ICB0aGlzLmNoaWxkcmVuW2ldLl9hdHRhY2goKTsKQEAgLTgyMSw2ICs4MjIsMTAgQEAgVHJlZUVs
ZW1lbnQucHJvdG90eXBlLnNlbGVjdE9uTW91c2VEb3duID0gZnVuY3Rpb24oZXZlbnQpCiAgICAg
dGhpcy5zZWxlY3QoZmFsc2UsIHRydWUpOwogfQogCisvKioKKyAqIEBwYXJhbSB7Ym9vbGVhbj19
IG9taXRGb2N1cworICogQHBhcmFtIHtib29sZWFuPX0gc2VsZWN0ZWRCeVVzZXIKKyAqLwogVHJl
ZUVsZW1lbnQucHJvdG90eXBlLnNlbGVjdCA9IGZ1bmN0aW9uKG9taXRGb2N1cywgc2VsZWN0ZWRC
eVVzZXIpCiB7CiAgICAgaWYgKCF0aGlzLnRyZWVPdXRsaW5lIHx8ICF0aGlzLnNlbGVjdGFibGUg
fHwgdGhpcy5zZWxlY3RlZCkKQEAgLTg1MSw2ICs4NTYsOSBAQCBUcmVlRWxlbWVudC5wcm90b3R5
cGUucmV2ZWFsQW5kU2VsZWN0ID0gZnVuY3Rpb24ob21pdEZvY3VzKQogICAgIHRoaXMuc2VsZWN0
KG9taXRGb2N1cyk7CiB9CiAKKy8qKgorICogQHBhcmFtIHtib29sZWFuPX0gc3VwcmVzc09uRGVz
ZWxlY3QKKyAqLwogVHJlZUVsZW1lbnQucHJvdG90eXBlLmRlc2VsZWN0ID0gZnVuY3Rpb24oc3Vw
cmVzc09uRGVzZWxlY3QpCiB7CiAgICAgaWYgKCF0aGlzLnRyZWVPdXRsaW5lIHx8IHRoaXMudHJl
ZU91dGxpbmUuc2VsZWN0ZWRUcmVlRWxlbWVudCAhPT0gdGhpcyB8fCAhdGhpcy5zZWxlY3RlZCkK
QEAgLTg2NiwxMCArODc0LDE1IEBAIFRyZWVFbGVtZW50LnByb3RvdHlwZS5kZXNlbGVjdCA9IGZ1
bmN0aW9uKHN1cHJlc3NPbkRlc2VsZWN0KQogICAgIHJldHVybiB0cnVlOwogfQogCitUcmVlRWxl
bWVudC5wcm90b3R5cGUub25wb3B1bGF0ZSA9IGZ1bmN0aW9uKCkKK3sKKyAgICAvLyBPdmVycmlk
ZW4gYnkgc3ViY2xhc3Nlcy4KK30KKwogVHJlZUVsZW1lbnQucHJvdG90eXBlLnRyYXZlcnNlTmV4
dFRyZWVFbGVtZW50ID0gZnVuY3Rpb24oc2tpcEhpZGRlbiwgc3RheVdpdGhpbiwgZG9udFBvcHVs
YXRlLCBpbmZvKQogewotICAgIGlmICghZG9udFBvcHVsYXRlICYmIHRoaXMuaGFzQ2hpbGRyZW4g
JiYgdGhpcy5vbnBvcHVsYXRlKQotICAgICAgICB0aGlzLm9ucG9wdWxhdGUodGhpcyk7CisgICAg
aWYgKCFkb250UG9wdWxhdGUgJiYgdGhpcy5oYXNDaGlsZHJlbikKKyAgICAgICAgdGhpcy5vbnBv
cHVsYXRlKCk7CiAKICAgICBpZiAoaW5mbykKICAgICAgICAgaW5mby5kZXB0aENoYW5nZSA9IDA7
CkBAIC05MDQsMTIgKzkxNywxMiBAQCBUcmVlRWxlbWVudC5wcm90b3R5cGUudHJhdmVyc2VOZXh0
VHJlZUVsZW1lbnQgPSBmdW5jdGlvbihza2lwSGlkZGVuLCBzdGF5V2l0aGluLAogVHJlZUVsZW1l
bnQucHJvdG90eXBlLnRyYXZlcnNlUHJldmlvdXNUcmVlRWxlbWVudCA9IGZ1bmN0aW9uKHNraXBI
aWRkZW4sIGRvbnRQb3B1bGF0ZSkKIHsKICAgICB2YXIgZWxlbWVudCA9IHNraXBIaWRkZW4gPyAo
dGhpcy5yZXZlYWxlZCgpID8gdGhpcy5wcmV2aW91c1NpYmxpbmcgOiBudWxsKSA6IHRoaXMucHJl
dmlvdXNTaWJsaW5nOwotICAgIGlmICghZG9udFBvcHVsYXRlICYmIGVsZW1lbnQgJiYgZWxlbWVu
dC5oYXNDaGlsZHJlbiAmJiBlbGVtZW50Lm9ucG9wdWxhdGUpCi0gICAgICAgIGVsZW1lbnQub25w
b3B1bGF0ZShlbGVtZW50KTsKKyAgICBpZiAoIWRvbnRQb3B1bGF0ZSAmJiBlbGVtZW50ICYmIGVs
ZW1lbnQuaGFzQ2hpbGRyZW4pCisgICAgICAgIGVsZW1lbnQub25wb3B1bGF0ZSgpOwogCiAgICAg
d2hpbGUgKGVsZW1lbnQgJiYgKHNraXBIaWRkZW4gPyAoZWxlbWVudC5yZXZlYWxlZCgpICYmIGVs
ZW1lbnQuZXhwYW5kZWQgPyBlbGVtZW50LmNoaWxkcmVuW2VsZW1lbnQuY2hpbGRyZW4ubGVuZ3Ro
IC0gMV0gOiBudWxsKSA6IGVsZW1lbnQuY2hpbGRyZW5bZWxlbWVudC5jaGlsZHJlbi5sZW5ndGgg
LSAxXSkpIHsKLSAgICAgICAgaWYgKCFkb250UG9wdWxhdGUgJiYgZWxlbWVudC5oYXNDaGlsZHJl
biAmJiBlbGVtZW50Lm9ucG9wdWxhdGUpCi0gICAgICAgICAgICBlbGVtZW50Lm9ucG9wdWxhdGUo
ZWxlbWVudCk7CisgICAgICAgIGlmICghZG9udFBvcHVsYXRlICYmIGVsZW1lbnQuaGFzQ2hpbGRy
ZW4pCisgICAgICAgICAgICBlbGVtZW50Lm9ucG9wdWxhdGUoKTsKICAgICAgICAgZWxlbWVudCA9
IChza2lwSGlkZGVuID8gKGVsZW1lbnQucmV2ZWFsZWQoKSAmJiBlbGVtZW50LmV4cGFuZGVkID8g
ZWxlbWVudC5jaGlsZHJlbltlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCAtIDFdIDogbnVsbCkgOiBl
bGVtZW50LmNoaWxkcmVuW2VsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoIC0gMV0pOwogICAgIH0KIApA
QCAtOTI0LDYgKzkzNyw2IEBAIFRyZWVFbGVtZW50LnByb3RvdHlwZS50cmF2ZXJzZVByZXZpb3Vz
VHJlZUVsZW1lbnQgPSBmdW5jdGlvbihza2lwSGlkZGVuLCBkb250UG9wCiAKIFRyZWVFbGVtZW50
LnByb3RvdHlwZS5pc0V2ZW50V2l0aGluRGlzY2xvc3VyZVRyaWFuZ2xlID0gZnVuY3Rpb24oZXZl
bnQpCiB7Ci0gICAgdmFyIGxlZnQgPSB0aGlzLl9saXN0SXRlbU5vZGUudG90YWxPZmZzZXRMZWZ0
OworICAgIHZhciBsZWZ0ID0gdGhpcy5fbGlzdEl0ZW1Ob2RlLnRvdGFsT2Zmc2V0TGVmdCgpOwog
ICAgIHJldHVybiBldmVudC5wYWdlWCA+PSBsZWZ0ICYmIGV2ZW50LnBhZ2VYIDw9IGxlZnQgKyB0
aGlzLmFycm93VG9nZ2xlV2lkdGggJiYgdGhpcy5oYXNDaGlsZHJlbjsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMKaW5kZXggYjFmMzMxNTll
MjNmNzM1NDc5ZDM0ZTBmZDQ2Zjg1MDA1Yjc2ZWY5MS4uYTU3YTk4NzU4NmYxZmUwZDUxNTFlZTUx
ZTQ1MjNiYzFjMzFiMmY3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC91dGlsaXRpZXMuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC91dGlsaXRpZXMuanMKQEAgLTI2MSwyMSArMjYxLDIxIEBAIEVsZW1lbnQucHJvdG90eXBl
LmNyZWF0ZUNoaWxkID0gZnVuY3Rpb24oZWxlbWVudE5hbWUsIGNsYXNzTmFtZSkKIAogRG9jdW1l
bnRGcmFnbWVudC5wcm90b3R5cGUuY3JlYXRlQ2hpbGQgPSBFbGVtZW50LnByb3RvdHlwZS5jcmVh
dGVDaGlsZDsKIAotRWxlbWVudC5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXygidG90YWxPZmZz
ZXRMZWZ0IiwgZnVuY3Rpb24oKQorRWxlbWVudC5wcm90b3R5cGUudG90YWxPZmZzZXRMZWZ0ID0g
ZnVuY3Rpb24oKQogewogICAgIHZhciB0b3RhbCA9IDA7CiAgICAgZm9yICh2YXIgZWxlbWVudCA9
IHRoaXM7IGVsZW1lbnQ7IGVsZW1lbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudCkKICAgICAgICAg
dG90YWwgKz0gZWxlbWVudC5vZmZzZXRMZWZ0ICsgKHRoaXMgIT09IGVsZW1lbnQgPyBlbGVtZW50
LmNsaWVudExlZnQgOiAwKTsKICAgICByZXR1cm4gdG90YWw7Ci19KTsKK30KIAotRWxlbWVudC5w
cm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXygidG90YWxPZmZzZXRUb3AiLCBmdW5jdGlvbigpCitF
bGVtZW50LnByb3RvdHlwZS50b3RhbE9mZnNldFRvcCA9IGZ1bmN0aW9uKCkKIHsKICAgICB2YXIg
dG90YWwgPSAwOwogICAgIGZvciAodmFyIGVsZW1lbnQgPSB0aGlzOyBlbGVtZW50OyBlbGVtZW50
ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQpCiAgICAgICAgIHRvdGFsICs9IGVsZW1lbnQub2Zmc2V0
VG9wICsgKHRoaXMgIT09IGVsZW1lbnQgPyBlbGVtZW50LmNsaWVudFRvcCA6IDApOwogICAgIHJl
dHVybiB0b3RhbDsKLX0pOworfQogCiBFbGVtZW50LnByb3RvdHlwZS5vZmZzZXRSZWxhdGl2ZVRv
V2luZG93ID0gZnVuY3Rpb24odGFyZ2V0V2luZG93KQogewpAQCAtMjgzLDggKzI4Myw4IEBAIEVs
ZW1lbnQucHJvdG90eXBlLm9mZnNldFJlbGF0aXZlVG9XaW5kb3cgPSBmdW5jdGlvbih0YXJnZXRX
aW5kb3cpCiAgICAgdmFyIGN1ckVsZW1lbnQgPSB0aGlzOwogICAgIHZhciBjdXJXaW5kb3cgPSB0
aGlzLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7CiAgICAgd2hpbGUgKGN1cldpbmRvdyAmJiBj
dXJFbGVtZW50KSB7Ci0gICAgICAgIGVsZW1lbnRPZmZzZXQueCArPSBjdXJFbGVtZW50LnRvdGFs
T2Zmc2V0TGVmdDsKLSAgICAgICAgZWxlbWVudE9mZnNldC55ICs9IGN1ckVsZW1lbnQudG90YWxP
ZmZzZXRUb3A7CisgICAgICAgIGVsZW1lbnRPZmZzZXQueCArPSBjdXJFbGVtZW50LnRvdGFsT2Zm
c2V0TGVmdCgpOworICAgICAgICBlbGVtZW50T2Zmc2V0LnkgKz0gY3VyRWxlbWVudC50b3RhbE9m
ZnNldFRvcCgpOwogICAgICAgICBpZiAoY3VyV2luZG93ID09PSB0YXJnZXRXaW5kb3cpCiAgICAg
ICAgICAgICBicmVhazsKIApAQCAtNDY4LDExMyArNDY4LDI3IEBAIFN0cmluZy5wcm90b3R5cGUu
cmVtb3ZlVVJMRnJhZ21lbnQgPSBmdW5jdGlvbigpCiAgICAgcmV0dXJuIHRoaXMuc3Vic3RyaW5n
KDAsIGZyYWdtZW50SW5kZXgpOwogfQogCi13aW5kb3cuaXNOb2RlV2hpdGVzcGFjZSA9IGZ1bmN0
aW9uKCkKLXsKLSAgICBpZiAoIXRoaXMgfHwgdGhpcy5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05P
REUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXRoaXMubm9kZVZhbHVlLmxlbmd0
aCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIHRoaXMubm9kZVZhbHVlLm1hdGNo
KC9eW1xzXHhBMF0rJC8pOwotfQotCi1mdW5jdGlvbiBub2RlRGlzcGxheU5hbWUoKQotewotICAg
IGlmICghdGhpcykKLSAgICAgICAgcmV0dXJuICIiOwotCi0gICAgc3dpdGNoICh0aGlzLm5vZGVU
eXBlKSB7Ci0gICAgICAgIGNhc2UgTm9kZS5ET0NVTUVOVF9OT0RFOgotICAgICAgICAgICAgcmV0
dXJuICJEb2N1bWVudCI7Ci0KLSAgICAgICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERToKLSAgICAg
ICAgICAgIHZhciBuYW1lID0gIjwiICsgdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOwotCi0g
ICAgICAgICAgICBpZiAodGhpcy5oYXNBdHRyaWJ1dGVzKCkpIHsKLSAgICAgICAgICAgICAgICB2
YXIgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZSgiaWQiKTsKLSAgICAgICAgICAgICAgICBpZiAo
dmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIG5hbWUgKz0gIiBpZD1cIiIgKyB2YWx1ZSArICJc
IiI7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZSgiY2xhc3MiKTsK
LSAgICAgICAgICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIG5hbWUgKz0g
IiBjbGFzcz1cIiIgKyB2YWx1ZSArICJcIiI7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMubm9k
ZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gImEiKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVl
ID0gdGhpcy5nZXRBdHRyaWJ1dGUoIm5hbWUiKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZh
bHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArPSAiIG5hbWU9XCIiICsgdmFsdWUg
KyAiXCIiOwotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKCJo
cmVmIik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG5hbWUgKz0gIiBocmVmPVwiIiArIHZhbHVlICsgIlwiIjsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gImltZyIpIHsKLSAg
ICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZSgic3JjIik7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUg
Kz0gIiBzcmM9XCIiICsgdmFsdWUgKyAiXCIiOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
dGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAiaWZyYW1lIikgewotICAgICAgICAgICAg
ICAgICAgICB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKCJzcmMiKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArPSAiIHNyYz1c
IiIgKyB2YWx1ZSArICJcIiI7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm5vZGVO
YW1lLnRvTG93ZXJDYXNlKCkgPT09ICJpbnB1dCIpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFs
dWUgPSB0aGlzLmdldEF0dHJpYnV0ZSgibmFtZSIpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
dmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lICs9ICIgbmFtZT1cIiIgKyB2YWx1
ZSArICJcIiI7Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUo
InR5cGUiKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgICAg
ICAgICAgICAgbmFtZSArPSAiIHR5cGU9XCIiICsgdmFsdWUgKyAiXCIiOwotICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAodGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAiZm9ybSIpIHsK
LSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZSgiYWN0aW9uIik7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IG5hbWUgKz0gIiBhY3Rpb249XCIiICsgdmFsdWUgKyAiXCIiOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIG5hbWUgKyAiPiI7Ci0KLSAgICAg
ICAgY2FzZSBOb2RlLlRFWFRfTk9ERToKLSAgICAgICAgICAgIGlmIChpc05vZGVXaGl0ZXNwYWNl
LmNhbGwodGhpcykpCi0gICAgICAgICAgICAgICAgcmV0dXJuICIod2hpdGVzcGFjZSkiOwotICAg
ICAgICAgICAgcmV0dXJuICJcIiIgKyB0aGlzLm5vZGVWYWx1ZSArICJcIiI7Ci0KLSAgICAgICAg
Y2FzZSBOb2RlLkNPTU1FTlRfTk9ERToKLSAgICAgICAgICAgIHJldHVybiAiPCEtLSIgKyB0aGlz
Lm5vZGVWYWx1ZSArICItLT4iOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgTm9kZS5ET0NV
TUVOVF9UWVBFX05PREU6Ci0gICAgICAgICAgICB2YXIgZG9jVHlwZSA9ICI8IURPQ1RZUEUgIiAr
IHRoaXMubm9kZU5hbWU7Ci0gICAgICAgICAgICBpZiAodGhpcy5wdWJsaWNJZCkgewotICAgICAg
ICAgICAgICAgIGRvY1R5cGUgKz0gIiBQVUJMSUMgXCIiICsgdGhpcy5wdWJsaWNJZCArICJcIiI7
Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3lzdGVtSWQpCi0gICAgICAgICAgICAgICAgICAg
IGRvY1R5cGUgKz0gIiBcIiIgKyB0aGlzLnN5c3RlbUlkICsgIlwiIjsKLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAodGhpcy5zeXN0ZW1JZCkKLSAgICAgICAgICAgICAgICBkb2NUeXBlICs9ICIgU1lT
VEVNIFwiIiArIHRoaXMuc3lzdGVtSWQgKyAiXCIiOwotICAgICAgICAgICAgaWYgKHRoaXMuaW50
ZXJuYWxTdWJzZXQpCi0gICAgICAgICAgICAgICAgZG9jVHlwZSArPSAiIFsiICsgdGhpcy5pbnRl
cm5hbFN1YnNldCArICJdIjsKLSAgICAgICAgICAgIHJldHVybiBkb2NUeXBlICsgIj4iOwotICAg
IH0KLQotICAgIHJldHVybiB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkuY29sbGFwc2VXaGl0
ZXNwYWNlKCk7Ci19Ci0KLXdpbmRvdy5pc0FuY2VzdG9yTm9kZSA9IGZ1bmN0aW9uKGFuY2VzdG9y
LCBub2RlKQorTm9kZS5wcm90b3R5cGUuaXNBbmNlc3RvciA9IGZ1bmN0aW9uKG5vZGUpCiB7Ci0g
ICAgaWYgKCFub2RlIHx8ICFhbmNlc3RvcikKKyAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIHZhciBjdXJyZW50Tm9kZSA9IG5vZGUucGFyZW50Tm9kZTsKICAgICB3
aGlsZSAoY3VycmVudE5vZGUpIHsKLSAgICAgICAgaWYgKGFuY2VzdG9yID09PSBjdXJyZW50Tm9k
ZSkKKyAgICAgICAgaWYgKHRoaXMgPT09IGN1cnJlbnROb2RlKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUucGFyZW50Tm9kZTsKICAg
ICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi13aW5kb3cuaXNEZXNjZW5kYW50Tm9kZSA9IGZ1
bmN0aW9uKGRlc2NlbmRhbnQpCitOb2RlLnByb3RvdHlwZS5pc0Rlc2NlbmRhbnQgPSBmdW5jdGlv
bihkZXNjZW5kYW50KQogewotICAgIHJldHVybiBpc0FuY2VzdG9yTm9kZShkZXNjZW5kYW50LCB0
aGlzKTsKKyAgICByZXR1cm4gZGVzY2VuZGFudCAhPT0gbnVsbCAmJiBkZXNjZW5kYW50LmlzQW5j
ZXN0b3IodGhpcyk7CiB9CiAKLWZ1bmN0aW9uIHRyYXZlcnNlTmV4dE5vZGUoc3RheVdpdGhpbikK
K05vZGUucHJvdG90eXBlLnRyYXZlcnNlTmV4dE5vZGUgPSBmdW5jdGlvbihzdGF5V2l0aGluKQog
ewotICAgIGlmICghdGhpcykKLSAgICAgICAgcmV0dXJuOwotCiAgICAgdmFyIG5vZGUgPSB0aGlz
LmZpcnN0Q2hpbGQ7CiAgICAgaWYgKG5vZGUpCiAgICAgICAgIHJldHVybiBub2RlOwpAQCAtNTk1
LDEwICs1MDksOCBAQCBmdW5jdGlvbiB0cmF2ZXJzZU5leHROb2RlKHN0YXlXaXRoaW4pCiAgICAg
cmV0dXJuIG5vZGUubmV4dFNpYmxpbmc7CiB9CiAKLWZ1bmN0aW9uIHRyYXZlcnNlUHJldmlvdXNO
b2RlKHN0YXlXaXRoaW4pCitOb2RlLnByb3RvdHlwZS50cmF2ZXJzZVByZXZpb3VzTm9kZSA9IGZ1
bmN0aW9uKHN0YXlXaXRoaW4pCiB7Ci0gICAgaWYgKCF0aGlzKQotICAgICAgICByZXR1cm47CiAg
ICAgaWYgKHN0YXlXaXRoaW4gJiYgdGhpcyA9PT0gc3RheVdpdGhpbikKICAgICAgICAgcmV0dXJu
IG51bGw7CiAgICAgdmFyIG5vZGUgPSB0aGlzLnByZXZpb3VzU2libGluZzsKQEAgLTYxNCw2OCAr
NTI2LDYgQEAgd2luZG93LnBhcmVudE5vZGUgPSBmdW5jdGlvbihub2RlKQogICAgIHJldHVybiBu
b2RlLnBhcmVudE5vZGU7CiB9CiAKLU5vZGUucHJvdG90eXBlLmlzV2hpdGVzcGFjZSA9IGlzTm9k
ZVdoaXRlc3BhY2U7Ci1Ob2RlLnByb3RvdHlwZS5kaXNwbGF5TmFtZSA9IG5vZGVEaXNwbGF5TmFt
ZTsKLU5vZGUucHJvdG90eXBlLmlzQW5jZXN0b3IgPSBmdW5jdGlvbihub2RlKQotewotICAgIHJl
dHVybiBpc0FuY2VzdG9yTm9kZSh0aGlzLCBub2RlKTsKLX07Ci1Ob2RlLnByb3RvdHlwZS5pc0Rl
c2NlbmRhbnQgPSBpc0Rlc2NlbmRhbnROb2RlOwotTm9kZS5wcm90b3R5cGUudHJhdmVyc2VOZXh0
Tm9kZSA9IHRyYXZlcnNlTmV4dE5vZGU7Ci1Ob2RlLnByb3RvdHlwZS50cmF2ZXJzZVByZXZpb3Vz
Tm9kZSA9IHRyYXZlcnNlUHJldmlvdXNOb2RlOwotCi1OdW1iZXIubWlsbGlzVG9TdHJpbmcgPSBm
dW5jdGlvbihtcywgaGlnaGVyUmVzb2x1dGlvbikKLXsKLSAgICByZXR1cm4gTnVtYmVyLnNlY29u
ZHNUb1N0cmluZyhtcyAvIDEwMDAsIGhpZ2hlclJlc29sdXRpb24pOwotfQotCi1OdW1iZXIuc2Vj
b25kc1RvU3RyaW5nID0gZnVuY3Rpb24oc2Vjb25kcywgaGlnaGVyUmVzb2x1dGlvbikKLXsKLSAg
ICBpZiAoc2Vjb25kcyA9PT0gMCkKLSAgICAgICAgcmV0dXJuICIwIjsKLQotICAgIHZhciBtcyA9
IHNlY29uZHMgKiAxMDAwOwotICAgIGlmIChoaWdoZXJSZXNvbHV0aW9uICYmIG1zIDwgMTAwMCkK
LSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygiJS4zZm1zIiwgbXMpOwotICAg
IGVsc2UgaWYgKG1zIDwgMTAwMCkKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiJS4wZm1zIiwgbXMpOwotCi0gICAgaWYgKHNlY29uZHMgPCA2MCkKLSAgICAgICAgcmV0dXJu
IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJS4yZnMiLCBzZWNvbmRzKTsKLQotICAgIHZhciBtaW51
dGVzID0gc2Vjb25kcyAvIDYwOwotICAgIGlmIChtaW51dGVzIDwgNjApCi0gICAgICAgIHJldHVy
biBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiUuMWZtaW4iLCBtaW51dGVzKTsKLQotICAgIHZhciBo
b3VycyA9IG1pbnV0ZXMgLyA2MDsKLSAgICBpZiAoaG91cnMgPCAyNCkKLSAgICAgICAgcmV0dXJu
IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJS4xZmhycyIsIGhvdXJzKTsKLQotICAgIHZhciBkYXlz
ID0gaG91cnMgLyAyNDsKLSAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlLjFmIGRh
eXMiLCBkYXlzKTsKLX0KLQotTnVtYmVyLmJ5dGVzVG9TdHJpbmcgPSBmdW5jdGlvbihieXRlcywg
aGlnaGVyUmVzb2x1dGlvbikKLXsKLSAgICBpZiAodHlwZW9mIGhpZ2hlclJlc29sdXRpb24gPT09
ICJ1bmRlZmluZWQiKQotICAgICAgICBoaWdoZXJSZXNvbHV0aW9uID0gdHJ1ZTsKLQotICAgIGlm
IChieXRlcyA8IDEwMjQpCi0gICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiUu
MGZCIiwgYnl0ZXMpOwotCi0gICAgdmFyIGtpbG9ieXRlcyA9IGJ5dGVzIC8gMTAyNDsKLSAgICBp
ZiAoaGlnaGVyUmVzb2x1dGlvbiAmJiBraWxvYnl0ZXMgPCAxMDI0KQotICAgICAgICByZXR1cm4g
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlLjJmS0IiLCBraWxvYnl0ZXMpOwotICAgIGVsc2UgaWYg
KGtpbG9ieXRlcyA8IDEwMjQpCi0gICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmco
IiUuMGZLQiIsIGtpbG9ieXRlcyk7Ci0KLSAgICB2YXIgbWVnYWJ5dGVzID0ga2lsb2J5dGVzIC8g
MTAyNDsKLSAgICBpZiAoaGlnaGVyUmVzb2x1dGlvbikKLSAgICAgICAgcmV0dXJuIFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiJS4yZk1CIiwgbWVnYWJ5dGVzKTsKLSAgICBlbHNlCi0gICAgICAgIHJl
dHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiUuMGZNQiIsIG1lZ2FieXRlcyk7Ci19Ci0KIE51
bWJlci5jb25zdHJhaW4gPSBmdW5jdGlvbihudW0sIG1pbiwgbWF4KQogewogICAgIGlmIChudW0g
PCBtaW4pCkBAIC03MDgsNDUgKzU1OCw2MyBAQCBIVE1MVGV4dEFyZWFFbGVtZW50LnByb3RvdHlw
ZS5tb3ZlQ3Vyc29yVG9FbmQgPSBmdW5jdGlvbigpCiAgICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5n
ZShsZW5ndGgsIGxlbmd0aCk7CiB9CiAKLU9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90
b3R5cGUsICJyZW1vdmUiLCB7IHZhbHVlOiBmdW5jdGlvbih2YWx1ZSwgb25seUZpcnN0KQorT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KEFycmF5LnByb3RvdHlwZSwgInJlbW92ZSIsCiB7Ci0gICAgaWYg
KG9ubHlGaXJzdCkgewotICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmluZGV4T2YodmFsdWUpOwot
ICAgICAgICBpZiAoaW5kZXggIT09IC0xKQotICAgICAgICAgICAgdGhpcy5zcGxpY2UoaW5kZXgs
IDEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdmFyIGxlbmd0aCA9IHRoaXMubGVu
Z3RoOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYg
KHRoaXNbaV0gPT09IHZhbHVlKQotICAgICAgICAgICAgdGhpcy5zcGxpY2UoaSwgMSk7CisgICAg
LyoqCisgICAgICogQHRoaXMge0FycmF5LjwqPn0KKyAgICAgKi8KKyAgICB2YWx1ZTogZnVuY3Rp
b24odmFsdWUsIG9ubHlGaXJzdCkKKyAgICB7CisgICAgICAgIGlmIChvbmx5Rmlyc3QpIHsKKyAg
ICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuaW5kZXhPZih2YWx1ZSk7CisgICAgICAgICAgICBp
ZiAoaW5kZXggIT09IC0xKQorICAgICAgICAgICAgICAgIHRoaXMuc3BsaWNlKGluZGV4LCAxKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIAorICAgICAgICB2YXIgbGVuZ3Ro
ID0gdGhpcy5sZW5ndGg7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgICAgIGlmICh0aGlzW2ldID09PSB2YWx1ZSkKKyAgICAgICAgICAgICAgICB0
aGlzLnNwbGljZShpLCAxKTsKKyAgICAgICAgfQogICAgIH0KLX19KTsKK30pOwogCi1PYmplY3Qu
ZGVmaW5lUHJvcGVydHkoQXJyYXkucHJvdG90eXBlLCAia2V5U2V0IiwgeyB2YWx1ZTogZnVuY3Rp
b24oKQorT2JqZWN0LmRlZmluZVByb3BlcnR5KEFycmF5LnByb3RvdHlwZSwgImtleVNldCIsCiB7
Ci0gICAgdmFyIGtleXMgPSB7fTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3Ro
OyArK2kpCi0gICAgICAgIGtleXNbdGhpc1tpXV0gPSB0cnVlOwotICAgIHJldHVybiBrZXlzOwot
fX0pOworICAgIC8qKgorICAgICAqIEB0aGlzIHtBcnJheS48Kj59CisgICAgICovCisgICAgdmFs
dWU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBrZXlzID0ge307CisgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGtleXNbdGhp
c1tpXV0gPSB0cnVlOworICAgICAgICByZXR1cm4ga2V5czsKKyAgICB9Cit9KTsKIAotT2JqZWN0
LmRlZmluZVByb3BlcnR5KEFycmF5LnByb3RvdHlwZSwgInVwcGVyQm91bmQiLCB7IHZhbHVlOiBm
dW5jdGlvbih2YWx1ZSkKK09iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsICJ1
cHBlckJvdW5kIiwgCiB7Ci0gICAgdmFyIGZpcnN0ID0gMDsKLSAgICB2YXIgY291bnQgPSB0aGlz
Lmxlbmd0aDsKLSAgICB3aGlsZSAoY291bnQgPiAwKSB7Ci0gICAgICB2YXIgc3RlcCA9IGNvdW50
ID4+IDE7Ci0gICAgICB2YXIgbWlkZGxlID0gZmlyc3QgKyBzdGVwOwotICAgICAgaWYgKHZhbHVl
ID49IHRoaXNbbWlkZGxlXSkgewotICAgICAgICAgIGZpcnN0ID0gbWlkZGxlICsgMTsKLSAgICAg
ICAgICBjb3VudCAtPSBzdGVwICsgMTsKLSAgICAgIH0gZWxzZQotICAgICAgICAgIGNvdW50ID0g
c3RlcDsKKyAgICAvKioKKyAgICAgKiBAdGhpcyB7QXJyYXkuPG51bWJlcj59CisgICAgICovCisg
ICAgdmFsdWU6IGZ1bmN0aW9uKHZhbHVlKQorICAgIHsKKyAgICAgICAgdmFyIGZpcnN0ID0gMDsK
KyAgICAgICAgdmFyIGNvdW50ID0gdGhpcy5sZW5ndGg7CisgICAgICAgIHdoaWxlIChjb3VudCA+
IDApIHsKKyAgICAgICAgICB2YXIgc3RlcCA9IGNvdW50ID4+IDE7CisgICAgICAgICAgdmFyIG1p
ZGRsZSA9IGZpcnN0ICsgc3RlcDsKKyAgICAgICAgICBpZiAodmFsdWUgPj0gdGhpc1ttaWRkbGVd
KSB7CisgICAgICAgICAgICAgIGZpcnN0ID0gbWlkZGxlICsgMTsKKyAgICAgICAgICAgICAgY291
bnQgLT0gc3RlcCArIDE7CisgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgIGNvdW50ID0g
c3RlcDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmlyc3Q7CiAgICAgfQotICAgIHJldHVy
biBmaXJzdDsKLX19KTsKK30pOwogCiBBcnJheS5kaWZmID0gZnVuY3Rpb24obGVmdCwgcmlnaHQp
CiB7CkBAIC04MzIsNyArNzAwLDcgQEAgU3RyaW5nLnRva2VuaXplRm9ybWF0U3RyaW5nID0gZnVu
Y3Rpb24oZm9ybWF0KQogCiAgICAgICAgIGlmICghaXNOYU4oZm9ybWF0W2luZGV4XSkpIHsKICAg
ICAgICAgICAgIC8vIFRoZSBmaXJzdCBjaGFyYWN0ZXIgaXMgYSBudW1iZXIsIGl0IG1pZ2h0IGJl
IGEgc3Vic3RpdHV0aW9uIGluZGV4LgotICAgICAgICAgICAgdmFyIG51bWJlciA9IHBhcnNlSW50
KGZvcm1hdC5zdWJzdHJpbmcoaW5kZXgpKTsKKyAgICAgICAgICAgIHZhciBudW1iZXIgPSBwYXJz
ZUludChmb3JtYXQuc3Vic3RyaW5nKGluZGV4KSwgMTApOwogICAgICAgICAgICAgd2hpbGUgKCFp
c05hTihmb3JtYXRbaW5kZXhdKSkKICAgICAgICAgICAgICAgICArK2luZGV4OwogICAgICAgICAg
ICAgLy8gSWYgdGhlIG51bWJlciBpcyBncmVhdGVyIHRoYW4gemVybyBhbmQgZW5kcyB3aXRoIGEg
IiQiLApAQCAtODQ4LDcgKzcxNiw3IEBAIFN0cmluZy50b2tlbml6ZUZvcm1hdFN0cmluZyA9IGZ1
bmN0aW9uKGZvcm1hdCkKICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBwcmVjaXNpb24gc3BlY2lm
aWVyLiBJZiBubyBkaWdpdCBmb2xsb3dzIHRoZSAiLiIsCiAgICAgICAgICAgICAvLyB0aGVuIHRo
ZSBwcmVjaXNpb24gc2hvdWxkIGJlIHplcm8uCiAgICAgICAgICAgICArK2luZGV4OwotICAgICAg
ICAgICAgcHJlY2lzaW9uID0gcGFyc2VJbnQoZm9ybWF0LnN1YnN0cmluZyhpbmRleCkpOworICAg
ICAgICAgICAgcHJlY2lzaW9uID0gcGFyc2VJbnQoZm9ybWF0LnN1YnN0cmluZyhpbmRleCksIDEw
KTsKICAgICAgICAgICAgIGlmIChpc05hTihwcmVjaXNpb24pKQogICAgICAgICAgICAgICAgIHBy
ZWNpc2lvbiA9IDA7CiAgICAgICAgICAgICB3aGlsZSAoIWlzTmFOKGZvcm1hdFtpbmRleF0pKQpA
QCAtODY5LDE3ICs3MzcsMTEgQEAgU3RyaW5nLnRva2VuaXplRm9ybWF0U3RyaW5nID0gZnVuY3Rp
b24oZm9ybWF0KQogU3RyaW5nLnN0YW5kYXJkRm9ybWF0dGVycyA9IHsKICAgICBkOiBmdW5jdGlv
bihzdWJzdGl0dXRpb24pCiAgICAgewotICAgICAgICBpZiAodHlwZW9mIHN1YnN0aXR1dGlvbiA9
PSAib2JqZWN0IiAmJiBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LnR5cGUoc3Vic3RpdHV0aW9u
KSA9PT0gIm51bWJlciIpCi0gICAgICAgICAgICBzdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb24u
ZGVzY3JpcHRpb247Ci0gICAgICAgIHN1YnN0aXR1dGlvbiA9IHBhcnNlSW50KHN1YnN0aXR1dGlv
bik7CiAgICAgICAgIHJldHVybiAhaXNOYU4oc3Vic3RpdHV0aW9uKSA/IHN1YnN0aXR1dGlvbiA6
IDA7CiAgICAgfSwKIAogICAgIGY6IGZ1bmN0aW9uKHN1YnN0aXR1dGlvbiwgdG9rZW4pCiAgICAg
ewotICAgICAgICBpZiAodHlwZW9mIHN1YnN0aXR1dGlvbiA9PSAib2JqZWN0IiAmJiBXZWJJbnNw
ZWN0b3IuUmVtb3RlT2JqZWN0LnR5cGUoc3Vic3RpdHV0aW9uKSA9PT0gIm51bWJlciIpCi0gICAg
ICAgICAgICBzdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb24uZGVzY3JpcHRpb247Ci0gICAgICAg
IHN1YnN0aXR1dGlvbiA9IHBhcnNlRmxvYXQoc3Vic3RpdHV0aW9uKTsKICAgICAgICAgaWYgKHN1
YnN0aXR1dGlvbiAmJiB0b2tlbi5wcmVjaXNpb24gPiAtMSkKICAgICAgICAgICAgIHN1YnN0aXR1
dGlvbiA9IHN1YnN0aXR1dGlvbi50b0ZpeGVkKHRva2VuLnByZWNpc2lvbik7CiAgICAgICAgIHJl
dHVybiAhaXNOYU4oc3Vic3RpdHV0aW9uKSA/IHN1YnN0aXR1dGlvbiA6ICh0b2tlbi5wcmVjaXNp
b24gPiAtMSA/IE51bWJlcigwKS50b0ZpeGVkKHRva2VuLnByZWNpc2lvbikgOiAwKTsKQEAgLTg4
NywxMSArNzQ5LDkgQEAgU3RyaW5nLnN0YW5kYXJkRm9ybWF0dGVycyA9IHsKIAogICAgIHM6IGZ1
bmN0aW9uKHN1YnN0aXR1dGlvbikKICAgICB7Ci0gICAgICAgIGlmICh0eXBlb2Ygc3Vic3RpdHV0
aW9uID09ICJvYmplY3QiICYmIFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QudHlwZShzdWJzdGl0
dXRpb24pICE9PSAibnVsbCIpCi0gICAgICAgICAgICBzdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRp
b24uZGVzY3JpcHRpb247CiAgICAgICAgIHJldHVybiBzdWJzdGl0dXRpb247Ci0gICAgfSwKLX07
CisgICAgfQorfQogCiBTdHJpbmcudnNwcmludGYgPSBmdW5jdGlvbihmb3JtYXQsIHN1YnN0aXR1
dGlvbnMpCiB7CkBAIC0xMDQ4LDcgKzkwOCw3IEBAIGZ1bmN0aW9uIGhpZ2hsaWdodFNlYXJjaFJl
c3VsdHMoZWxlbWVudCwgcmVzdWx0UmFuZ2VzLCBjaGFuZ2VzKQogICAgICAgICB3aGlsZSAoY3Vy
cmVudFNuYXBzaG90SXRlbSA8IHNuYXBzaG90TGVuZ3RoKSB7CiAgICAgICAgICAgICB0ZXh0Tm9k
ZSA9IHRleHROb2RlU25hcHNob3Quc25hcHNob3RJdGVtKGN1cnJlbnRTbmFwc2hvdEl0ZW0rKyk7
CiAgICAgICAgICAgICBzbmFwc2hvdE5vZGVPZmZzZXQgKz0gdGV4dE5vZGUubm9kZVZhbHVlLmxl
bmd0aDsKLSAgICAgICAgICAgIHZhciB0ZXh0ID0gdGV4dE5vZGUudGV4dENvbnRlbnQ7CisgICAg
ICAgICAgICB0ZXh0ID0gdGV4dE5vZGUudGV4dENvbnRlbnQ7CiAgICAgICAgICAgICBpZiAobGVu
Z3RoIDwgdGV4dC5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICB0ZXh0Tm9kZS50ZXh0Q29udGVu
dCA9IHRleHQuc3Vic3RyaW5nKGxlbmd0aCk7CiAgICAgICAgICAgICAgICAgY2hhbmdlcy5wdXNo
KHsgbm9kZTogdGV4dE5vZGUsIHR5cGU6ICJjaGFuZ2VkIiwgb2xkVGV4dDogdGV4dCwgbmV3VGV4
dDogdGV4dE5vZGUudGV4dENvbnRlbnQgfSk7CkBAIC0xMTAyLDEzICs5NjIsMTMgQEAgZnVuY3Rp
b24gcmV2ZXJ0RG9tQ2hhbmdlcyhkb21DaGFuZ2VzKQogZnVuY3Rpb24gY3JlYXRlU2VhcmNoUmVn
ZXgocXVlcnksIGV4dHJhRmxhZ3MpCiB7CiAgICAgLy8gVGhpcyBzaG91bGQgYmUga2VwdCB0aGUg
c2FtZSBhcyB0aGUgb25lIGluIEluc3BlY3RvclBhZ2VBZ2VudC5jcHAuCi0gICAgcmVnZXhTcGVj
aWFsQ2hhcmFjdGVycyA9ICJbXSgpe30rLSouLD9cXF4kfCI7CisgICAgdmFyIHJlZ2V4U3BlY2lh
bENoYXJhY3RlcnMgPSAiW10oKXt9Ky0qLiw/XFxeJHwiOwogICAgIHZhciByZWdleCA9ICIiOwog
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlcnkubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdmFy
IGNoYXIgPSBxdWVyeS5jaGFyQXQoaSk7Ci0gICAgICAgIGlmIChyZWdleFNwZWNpYWxDaGFyYWN0
ZXJzLmluZGV4T2YoY2hhcikgIT0gLTEpCisgICAgICAgIHZhciBjID0gcXVlcnkuY2hhckF0KGkp
OworICAgICAgICBpZiAocmVnZXhTcGVjaWFsQ2hhcmFjdGVycy5pbmRleE9mKGMpICE9IC0xKQog
ICAgICAgICAgICAgcmVnZXggKz0gIlxcIjsKLSAgICAgICAgcmVnZXggKz0gY2hhcjsKKyAgICAg
ICAgcmVnZXggKz0gYzsKICAgICB9CiAgICAgcmV0dXJuIG5ldyBSZWdFeHAocmVnZXgsICJpIiAr
IChleHRyYUZsYWdzIHx8ICIiKSk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104678</attachid>
            <date>2011-08-22 07:35:02 -0700</date>
            <delta_ts>2011-08-23 02:10:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66656-20110822183500.patch</filename>
            <type>text/plain</type>
            <size>44070</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM1MDEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlYTgxNWVmNjg4ZDRiMTQ4
ZGI1NThmOTMxN2M3MmY0ZjYzNDM1YjU1Li5kNTFiMWMwNzY5ZWY4ODA0ZjQ1NDIzM2FmOGQxNWE0
NDU3YjZiODYyIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjMgQEAKKzIwMTEtMDgtMjIgIFBhdmVs
IEZlbGRtYW4gIDxwZmVsZG1hbkBnb29nbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6
IFByZXBhcmUgdXRpbGl0aWVzLmpzIGZvciBjb21waWxhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2NjU2CisKKyAgICAgICAgUmVtb3ZlcyAi
dGhpcyIgdXNhZ2UgaW4gZnVuY3Rpb25zLCBkb2VzIG5vdCBkZWZpbmUgZ2V0dGVycyBmb3Igb2Zm
c2V0cy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVZpZXcuanM6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQ29uc29sZU1lc3NhZ2UucHJvdG90eXBlLl9mb3JtYXQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkNvbnNvbGVNZXNzYWdlLnByb3RvdHlwZS5fZm9ybWF0V2l0aFN1YnN0aXR1dGlvblN0cmlu
Zy52YWx1ZUZvcm1hdHRlcik6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2Vu
dC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5hcHByb3ByaWF0
ZVNlbGVjdG9yRm9yKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5p
c0FuY2VzdG9yKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5pc0Rl
c2NlbmRhbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLmlzV2hp
dGVzcGFjZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhR3JpZC5qczoKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5EYXRhR3JpZC5wcm90b3R5cGUuX3Jlc2l6ZXJEcmFnZ2luZyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YUdyaWROb2RlLnByb3RvdHlwZS5pc0V2ZW50V2l0
aGluRGlzY2xvc3VyZVRyaWFuZ2xlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0Ry
YXdlci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLmdldCBzYXZl
ZEhlaWdodCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5vblJlc2l6
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5fc3RhcnRTdGF0dXNC
YXJEcmFnZ2luZyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5fc3Rh
dHVzQmFyRHJhZ2dpbmcpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQ
YW5lbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlwZS51
cGRhdGVNb2RpZmllZE5vZGVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVs
LnByb3RvdHlwZS51cGRhdGVCcmVhZGNydW1iKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVt
ZW50c1BhbmVsLnByb3RvdHlwZS51cGRhdGVCcmVhZGNydW1iU2l6ZXMuY3J1bWJzQXJlU21hbGxl
clRoYW5Db250YWluZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNU
cmVlT3V0bGluZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRsaW5l
LnByb3RvdHlwZS5maW5kVHJlZUVsZW1lbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1l
bnRzVHJlZU91dGxpbmUucHJvdG90eXBlLl90cmVlRWxlbWVudEZyb21FdmVudCk6CisgICAgICAg
ICgpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvUmVtb3RlT2JqZWN0LmpzOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zy
b250LWVuZC9SZXNvdXJjZVRpbWluZ1ZpZXcuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVz
b3VyY2VUaW1pbmdWaWV3LmNyZWF0ZVRpbWluZ1RhYmxlKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
ZnJvbnQtZW5kL1Jlc291cmNlc1BhbmVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJhc2VT
dG9yYWdlVHJlZUVsZW1lbnQucHJvdG90eXBlLmlzRXZlbnRXaXRoaW5EaXNjbG9zdXJlVHJpYW5n
bGUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuX3N0YXJ0U2lkZWJhclJl
c2l6ZURyYWcpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU29mdENvbnRleHRNZW51
LmpzOgorICAgICAgICAoLldlYkluc3BlY3Rvci5Tb2Z0Q29udGV4dE1lbnUucHJvdG90eXBlLnNo
b3cpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvVG9vbGJhci5qczoKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Ub29sYmFyRHJvcGRvd24ucHJvdG90eXBlLnNob3cpOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvV2F0Y2hFeHByZXNzaW9uc1NpZGViYXJQYW5lLmpzOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLldhdGNoRXhwcmVzc2lvbnNTZWN0aW9uLnByb3RvdHlwZS5fdXBk
YXRlSG92ZXJlZEVsZW1lbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVj
dG9yLmpzOgorICAgICAgICAoTnVtYmVyLnNlY29uZHNUb1N0cmluZyk6CisgICAgICAgIChOdW1i
ZXIuYnl0ZXNUb1N0cmluZyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC90cmVlb3V0
bGluZS5qczoKKyAgICAgICAgKFRyZWVFbGVtZW50LnByb3RvdHlwZS5pc0V2ZW50V2l0aGluRGlz
Y2xvc3VyZVRyaWFuZ2xlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGll
cy5qczoKKyAgICAgICAgKHNldHVwUHJvdG90eXBlVXRpbGl0aWVzLkVsZW1lbnQucHJvdG90eXBl
LnRvdGFsT2Zmc2V0TGVmdCk6CisgICAgICAgIChzZXR1cFByb3RvdHlwZVV0aWxpdGllcy5FbGVt
ZW50LnByb3RvdHlwZS50b3RhbE9mZnNldFRvcCk6CisgICAgICAgIChzZXR1cFByb3RvdHlwZVV0
aWxpdGllcy5FbGVtZW50LnByb3RvdHlwZS5vZmZzZXRSZWxhdGl2ZVRvV2luZG93KToKKyAgICAg
ICAgKHNldHVwUHJvdG90eXBlVXRpbGl0aWVzKToKKyAgICAgICAgKHNldHVwUHJvdG90eXBlVXRp
bGl0aWVzLik6CisgICAgICAgICgpOgorCiAyMDExLTA4LTE4ICBQYXZlbCBQb2Rpdmlsb3YgIDxw
b2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGV4dHJhY3Qg
YnJlYWtwb2ludCBtYW5hZ2VtZW50IGNvZGUgdG8gYSBzZXBhcmF0ZSBjbGFzcyBhbmQgYWRkIHRl
c3RzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25z
b2xlVmlldy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVZp
ZXcuanMKaW5kZXggOTI2MmU1Y2JiN2MwYmJjNzFiM2VhMTQ4NmViOTBlMGU5Y2UxZjRlZS4uNmQ1
Zjc4ODU3ZDc5OTM2ZGNmNWIwNTdlNzNkOGRhMDM3ZWIzOWU0YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qcworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzCkBAIC05ODAsOCArOTgw
LDYgQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLnByb3RvdHlwZSA9IHsKICAgICBfZm9y
bWF0V2l0aFN1YnN0aXR1dGlvblN0cmluZzogZnVuY3Rpb24ocGFyYW1ldGVycywgZm9ybWF0dGVk
UmVzdWx0KQogICAgIHsKICAgICAgICAgdmFyIGZvcm1hdHRlcnMgPSB7fQotICAgICAgICBmb3Ig
KHZhciBpIGluIFN0cmluZy5zdGFuZGFyZEZvcm1hdHRlcnMpCi0gICAgICAgICAgICBmb3JtYXR0
ZXJzW2ldID0gU3RyaW5nLnN0YW5kYXJkRm9ybWF0dGVyc1tpXTsKIAogICAgICAgICBmdW5jdGlv
biBjb25zb2xlRm9ybWF0V3JhcHBlcihmb3JjZSkKICAgICAgICAgewpAQCAtOTkwLDEwICs5ODgs
MTkgQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLnByb3RvdHlwZSA9IHsKICAgICAgICAg
ICAgIH07CiAgICAgICAgIH0KIAorICAgICAgICBmdW5jdGlvbiB2YWx1ZUZvcm1hdHRlcihvYmop
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBvYmouZGVzY3JpcHRpb247CisgICAgICAg
IH0KKwogICAgICAgICAvLyBGaXJlYnVnIHVzZXMgJW8gZm9yIGZvcm1hdHRpbmcgb2JqZWN0cy4K
ICAgICAgICAgZm9ybWF0dGVycy5vID0gY29uc29sZUZvcm1hdFdyYXBwZXIoKTsKKyAgICAgICAg
Zm9ybWF0dGVycy5zID0gdmFsdWVGb3JtYXR0ZXI7CisgICAgICAgIGZvcm1hdHRlcnMuZiA9IHZh
bHVlRm9ybWF0dGVyOwogICAgICAgICAvLyBGaXJlYnVnIGFsbG93cyBib3RoICVpIGFuZCAlZCBm
b3IgZm9ybWF0dGluZyBpbnRlZ2Vycy4KLSAgICAgICAgZm9ybWF0dGVycy5pID0gZm9ybWF0dGVy
cy5kOworICAgICAgICBmb3JtYXR0ZXJzLmkgPSB2YWx1ZUZvcm1hdHRlcjsKKyAgICAgICAgZm9y
bWF0dGVycy5kID0gdmFsdWVGb3JtYXR0ZXI7CisKICAgICAgICAgLy8gU3VwcG9ydCAlTyB0byBm
b3JjZSBvYmplY3QgZm9ybWF0dGluZywgaW5zdGVhZCBvZiB0aGUgdHlwZS1iYXNlZCAlbyBmb3Jt
YXR0aW5nLgogICAgICAgICBmb3JtYXR0ZXJzLk8gPSBjb25zb2xlRm9ybWF0V3JhcHBlcih0cnVl
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01B
Z2VudC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMK
aW5kZXggNzMwMDM3MWFiNzcwMmVmYjk0ZjUzZTIyNDg2NGE0NDU0OWNmM2UwOS4uMDU0ZmE3OGIw
ZGMyNGE0ZTE4YWIyOWZmMmU3ZDg0OTcxNWJhY2I3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzCkBAIC0yMTYsNyArMjE2LDcgQEAgV2ViSW5z
cGVjdG9yLkRPTU5vZGUucHJvdG90eXBlID0gewogCiAgICAgYXBwcm9wcmlhdGVTZWxlY3RvckZv
cjogZnVuY3Rpb24oanVzdFNlbGVjdG9yKQogICAgIHsKLSAgICAgICAgdmFyIGxvd2VyQ2FzZU5h
bWUgPSB0aGlzLmxvY2FsTmFtZSgpIHx8IG5vZGUubm9kZU5hbWUoKS50b0xvd2VyQ2FzZSgpOwor
ICAgICAgICB2YXIgbG93ZXJDYXNlTmFtZSA9IHRoaXMubG9jYWxOYW1lKCkgfHwgdGhpcy5ub2Rl
TmFtZSgpLnRvTG93ZXJDYXNlKCk7CiAKICAgICAgICAgdmFyIGlkID0gdGhpcy5nZXRBdHRyaWJ1
dGUoImlkIik7CiAgICAgICAgIGlmIChpZCkgewpAQCAtMjM2LDYgKzIzNiwzNCBAQCBXZWJJbnNw
ZWN0b3IuRE9NTm9kZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiBsb3dlckNhc2VOYW1l
OwogICAgIH0sCiAKKyAgICBpc0FuY2VzdG9yOiBmdW5jdGlvbihub2RlKQorICAgIHsKKyAgICAg
ICAgaWYgKCFub2RlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgICAgICB2
YXIgY3VycmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGU7CisgICAgICAgIHdoaWxlIChjdXJyZW50
Tm9kZSkgeworICAgICAgICAgICAgaWYgKHRoaXMgPT09IGN1cnJlbnROb2RlKQorICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9k
ZS5wYXJlbnROb2RlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9LAor
CisgICAgaXNEZXNjZW5kYW50OiBmdW5jdGlvbihkZXNjZW5kYW50KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGRlc2NlbmRhbnQgIT09IG51bGwgJiYgZGVzY2VuZGFudC5pc0FuY2VzdG9yKHRoaXMp
OworICAgIH0sCisKKyAgICBpc1doaXRlc3BhY2U6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IGlmICh0aGlzLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgaWYgKCF0aGlzLm5vZGVWYWx1ZS5sZW5ndGgpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHRoaXMubm9kZVZhbHVlLm1hdGNoKC9eW1xz
XHhBMF0rJC8pOworICAgIH0sCisKICAgICBfc2V0QXR0cmlidXRlc1BheWxvYWQ6IGZ1bmN0aW9u
KGF0dHJzKQogICAgIHsKICAgICAgICAgdGhpcy5fYXR0cmlidXRlcyA9IFtdOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhR3JpZC5qcyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGF0YUdyaWQuanMKaW5kZXggYzM0ODA2ZDcx
NWViZDVjOWZhYjAyYzNhNzMwMDYzY2M3NGUxZDBiMi4uMjJjODk1OGIzMGE1NTFlMWQ4ZjdkZjU4
NDNjNmU1YTg5YWQ4Yzg3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9EYXRhR3JpZC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0RhdGFHcmlkLmpzCkBAIC05NjUsNyArOTY1LDcgQEAgV2ViSW5zcGVjdG9yLkRhdGFHcmlk
LnByb3RvdHlwZSA9IHsKICAgICAgICAgCiAgICAgICAgIC8vIENvbnN0cmFpbiB0aGUgZHJhZ3Bv
aW50IHRvIGJlIHdpdGhpbiB0aGUgY29udGFpbmluZyBkaXYgb2YgdGhlCiAgICAgICAgIC8vIGRh
dGFncmlkLgotICAgICAgICB2YXIgZHJhZ1BvaW50ID0gZXZlbnQuY2xpZW50WCAtIHRoaXMuZWxl
bWVudC50b3RhbE9mZnNldExlZnQ7CisgICAgICAgIHZhciBkcmFnUG9pbnQgPSBldmVudC5jbGll
bnRYIC0gdGhpcy5lbGVtZW50LnRvdGFsT2Zmc2V0TGVmdCgpOwogICAgICAgICAvLyBDb25zdHJh
aW4gdGhlIGRyYWdwb2ludCB0byBiZSB3aXRoaW4gdGhlIHNwYWNlIG1hZGUgdXAgYnkgdGhlCiAg
ICAgICAgIC8vIGNvbHVtbiBkaXJlY3RseSB0byB0aGUgbGVmdCBhbmQgdGhlIGNvbHVtbiBkaXJl
Y3RseSB0byB0aGUgcmlnaHQuCiAgICAgICAgIHZhciBsZWZ0Q2VsbEluZGV4ID0gcmVzaXplci5s
ZWZ0TmVpZ2hib3JpbmdDb2x1bW5JRDsKQEAgLTE0NDUsNyArMTQ0NSw3IEBAIFdlYkluc3BlY3Rv
ci5EYXRhR3JpZE5vZGUucHJvdG90eXBlID0gewogICAgICAgICBpZiAoIWNlbGwuaGFzU3R5bGVD
bGFzcygiZGlzY2xvc3VyZSIpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB2
YXIgY29tcHV0ZWRMZWZ0UGFkZGluZyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGNlbGwpLmdl
dFByb3BlcnR5Q1NTVmFsdWUoInBhZGRpbmctbGVmdCIpLmdldEZsb2F0VmFsdWUoQ1NTUHJpbWl0
aXZlVmFsdWUuQ1NTX1BYKTsKLSAgICAgICAgdmFyIGxlZnQgPSBjZWxsLnRvdGFsT2Zmc2V0TGVm
dCArIGNvbXB1dGVkTGVmdFBhZGRpbmc7CisgICAgICAgIHZhciBsZWZ0ID0gY2VsbC50b3RhbE9m
ZnNldExlZnQoKSArIGNvbXB1dGVkTGVmdFBhZGRpbmc7CiAgICAgICAgIHJldHVybiBldmVudC5w
YWdlWCA+PSBsZWZ0ICYmIGV2ZW50LnBhZ2VYIDw9IGxlZnQgKyB0aGlzLmRpc2Nsb3N1cmVUb2dn
bGVXaWR0aDsKICAgICB9LAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0RyYXdlci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
RHJhd2VyLmpzCmluZGV4IDRlZGE4NGE3OGMxOGNjODM0NWE3Yjg4ZWMzNzVhMDRlMWZiODRhM2Mu
LjY4NWE2NmY1MDA3N2VhNzA5MGVjMjAyMTQ0OTBlMDZhNDA2ZTQ5MDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRHJhd2VyLmpzCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRHJhd2VyLmpzCkBAIC03Nyw3ICs3Nyw3IEBAIFdl
Ykluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlID0gewogICAgIGdldCBzYXZlZEhlaWdodCgpCiAg
ICAgewogICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5fc2F2ZWRIZWlnaHQgfHwgdGhpcy5lbGVt
ZW50Lm9mZnNldEhlaWdodDsKLSAgICAgICAgcmV0dXJuIE51bWJlci5jb25zdHJhaW4oaGVpZ2h0
LCBQcmVmZXJlbmNlcy5taW5Db25zb2xlSGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgLSB0aGlz
Ll9tYWluRWxlbWVudC50b3RhbE9mZnNldFRvcCAtIFByZWZlcmVuY2VzLm1pbkNvbnNvbGVIZWln
aHQpOworICAgICAgICByZXR1cm4gTnVtYmVyLmNvbnN0cmFpbihoZWlnaHQsIFByZWZlcmVuY2Vz
Lm1pbkNvbnNvbGVIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCAtIHRoaXMuX21haW5FbGVtZW50
LnRvdGFsT2Zmc2V0VG9wKCkgLSBQcmVmZXJlbmNlcy5taW5Db25zb2xlSGVpZ2h0KTsKICAgICB9
LAogCiAgICAgc2hvd1ZpZXc6IGZ1bmN0aW9uKHZpZXcpCkBAIC0yMDYsNyArMjA2LDcgQEAgV2Vi
SW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBoZWlnaHQ7CiAgICAg
ICAgIGlmICh0aGlzLnN0YXRlID09PSBXZWJJbnNwZWN0b3IuRHJhd2VyLlN0YXRlLlZhcmlhYmxl
KSB7CiAgICAgICAgICAgICBoZWlnaHQgPSBwYXJzZUludCh0aGlzLmVsZW1lbnQuc3R5bGUuaGVp
Z2h0KTsKLSAgICAgICAgICAgIGhlaWdodCA9IE51bWJlci5jb25zdHJhaW4oaGVpZ2h0LCBQcmVm
ZXJlbmNlcy5taW5Db25zb2xlSGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgLSB0aGlzLl9tYWlu
RWxlbWVudC50b3RhbE9mZnNldFRvcCAtIFByZWZlcmVuY2VzLm1pbkNvbnNvbGVIZWlnaHQpOwor
ICAgICAgICAgICAgaGVpZ2h0ID0gTnVtYmVyLmNvbnN0cmFpbihoZWlnaHQsIFByZWZlcmVuY2Vz
Lm1pbkNvbnNvbGVIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCAtIHRoaXMuX21haW5FbGVtZW50
LnRvdGFsT2Zmc2V0VG9wKCkgLSBQcmVmZXJlbmNlcy5taW5Db25zb2xlSGVpZ2h0KTsKICAgICAg
ICAgfSBlbHNlCiAgICAgICAgICAgICBoZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSB0aGlz
Ll90b29sYmFyRWxlbWVudC5vZmZzZXRIZWlnaHQ7CiAKQEAgLTMzMSw3ICszMzEsNyBAQCBXZWJJ
bnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZSA9IHsKIAogICAgICAgICBXZWJJbnNwZWN0b3IuZWxl
bWVudERyYWdTdGFydCh0aGlzLl9tYWluU3RhdHVzQmFyLCB0aGlzLl9zdGF0dXNCYXJEcmFnZ2lu
Zy5iaW5kKHRoaXMpLCB0aGlzLl9lbmRTdGF0dXNCYXJEcmFnZ2luZy5iaW5kKHRoaXMpLCBldmVu
dCwgInJvdy1yZXNpemUiKTsKIAotICAgICAgICB0aGlzLl9zdGF0dXNCYXJEcmFnT2Zmc2V0ID0g
ZXZlbnQucGFnZVkgLSB0aGlzLmVsZW1lbnQudG90YWxPZmZzZXRUb3A7CisgICAgICAgIHRoaXMu
X3N0YXR1c0JhckRyYWdPZmZzZXQgPSBldmVudC5wYWdlWSAtIHRoaXMuZWxlbWVudC50b3RhbE9m
ZnNldFRvcCgpOwogCiAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgIH0sCkBA
IC0zMzksNyArMzM5LDcgQEAgV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUgPSB7CiAgICAg
X3N0YXR1c0JhckRyYWdnaW5nOiBmdW5jdGlvbihldmVudCkKICAgICB7CiAgICAgICAgIHZhciBo
ZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSBldmVudC5wYWdlWSArIHRoaXMuX3N0YXR1c0Jh
ckRyYWdPZmZzZXQ7Ci0gICAgICAgIGhlaWdodCA9IE51bWJlci5jb25zdHJhaW4oaGVpZ2h0LCBQ
cmVmZXJlbmNlcy5taW5Db25zb2xlSGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgLSB0aGlzLl9t
YWluRWxlbWVudC50b3RhbE9mZnNldFRvcCAtIFByZWZlcmVuY2VzLm1pbkNvbnNvbGVIZWlnaHQp
OworICAgICAgICBoZWlnaHQgPSBOdW1iZXIuY29uc3RyYWluKGhlaWdodCwgUHJlZmVyZW5jZXMu
bWluQ29uc29sZUhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IC0gdGhpcy5fbWFpbkVsZW1lbnQu
dG90YWxPZmZzZXRUb3AoKSAtIFByZWZlcmVuY2VzLm1pbkNvbnNvbGVIZWlnaHQpOwogCiAgICAg
ICAgIHRoaXMuX21haW5FbGVtZW50LnN0eWxlLmJvdHRvbSA9IGhlaWdodCArICJweCI7CiAgICAg
ICAgIHRoaXMuZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAicHgiOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpzIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpzCmluZGV4
IDNiYzdmYzEyMWU1NDc0NDkzYzUwMGE0MmU0Y2ZjOTA2NDQxMTRlMzkuLjBkMDg2ZjY2ZmQ3ZmVk
ZTIxNGFjNjUzNjM3MmE2YzAyZWY2ZTA3M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwuanMKQEAgLTQ3OSw3ICs0NzksNyBAQCBX
ZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAg
dXBkYXRlZFBhcmVudFRyZWVFbGVtZW50cy5wdXNoKHBhcmVudE5vZGVJdGVtKTsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgaWYgKCF1cGRhdGVCcmVhZGNydW1icyAmJiAodGhpcy5zZWxl
Y3RlZERPTU5vZGUoKSA9PT0gcGFyZW50IHx8IGlzQW5jZXN0b3JOb2RlKHRoaXMuc2VsZWN0ZWRE
T01Ob2RlKCksIHBhcmVudCkpKQorICAgICAgICAgICAgaWYgKCF1cGRhdGVCcmVhZGNydW1icyAm
JiAodGhpcy5zZWxlY3RlZERPTU5vZGUoKSA9PT0gcGFyZW50IHx8ICh0aGlzLnNlbGVjdGVkRE9N
Tm9kZSgpICYmIHRoaXMuc2VsZWN0ZWRET01Ob2RlKCkuaXNBbmNlc3RvcihwYXJlbnQpKSkpCiAg
ICAgICAgICAgICAgICAgdXBkYXRlQnJlYWRjcnVtYnMgPSB0cnVlOwogICAgICAgICB9CiAKQEAg
LTYyMSw3ICs2MjEsNyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbC5wcm90b3R5cGUgPSB7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgY2FzZSBOb2Rl
LlRFWFRfTk9ERToKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzTm9kZVdoaXRlc3BhY2UuY2Fs
bChjdXJyZW50KSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQuaXNXaGl0ZXNwYWNl
KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjcnVtYlRpdGxlID0gV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCIod2hpdGVzcGFjZSkiKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgICAgICAgICAgY3J1bWJUaXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiKHRl
eHQpIik7CkBAIC03ODMsNyArNzgzLDcgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJv
dG90eXBlID0gewogICAgICAgICAgICAgdmFyIGVycm9yV2FybmluZ0VsZW1lbnQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiZXJyb3Itd2FybmluZy1jb3VudCIpOwogICAgICAgICAgICAgaWYg
KCFXZWJJbnNwZWN0b3IuZHJhd2VyLnZpc2libGUgJiYgZXJyb3JXYXJuaW5nRWxlbWVudCkKICAg
ICAgICAgICAgICAgICByaWdodFBhZGRpbmcgKz0gZXJyb3JXYXJuaW5nRWxlbWVudC5vZmZzZXRX
aWR0aDsKLSAgICAgICAgICAgIHJldHVybiAoKGNydW1icy50b3RhbE9mZnNldExlZnQgKyBjcnVt
YnMub2Zmc2V0V2lkdGggKyByaWdodFBhZGRpbmcpIDwgd2luZG93LmlubmVyV2lkdGgpOworICAg
ICAgICAgICAgcmV0dXJuICgoY3J1bWJzLnRvdGFsT2Zmc2V0TGVmdCgpICsgY3J1bWJzLm9mZnNl
dFdpZHRoICsgcmlnaHRQYWRkaW5nKSA8IHdpbmRvdy5pbm5lcldpZHRoKTsKICAgICAgICAgfQog
CiAgICAgICAgIGlmIChjcnVtYnNBcmVTbWFsbGVyVGhhbkNvbnRhaW5lcigpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1RyZWVPdXRsaW5l
LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1RyZWVPdXRs
aW5lLmpzCmluZGV4IDNkOTBlYzVmMzRlZDY4NzE4M2UyNjIwNWE1ZDQyNjQ2YTUxYzFjYWEuLmFh
NjE3Nzg3YzVmYTUxZGEzNmVkNmM1ZTc3Mjc5ODYzYmFkMWUxZWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGluZS5qcworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzVHJlZU91dGxpbmUu
anMKQEAgLTE0Niw2ICsxNDYsMTAgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxpbmUu
cHJvdG90eXBlID0gewogCiAgICAgZmluZFRyZWVFbGVtZW50OiBmdW5jdGlvbihub2RlKQogICAg
IHsKKyAgICAgICAgZnVuY3Rpb24gaXNBbmNlc3Rvck5vZGUoYW5jZXN0b3IsIG5vZGUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhbmNlc3Rvci5pc0FuY2VzdG9yKG5vZGUpOworICAg
ICAgICB9CiAgICAgICAgIHZhciB0cmVlRWxlbWVudCA9IFRyZWVPdXRsaW5lLnByb3RvdHlwZS5m
aW5kVHJlZUVsZW1lbnQuY2FsbCh0aGlzLCBub2RlLCBpc0FuY2VzdG9yTm9kZSwgcGFyZW50Tm9k
ZSk7CiAgICAgICAgIGlmICghdHJlZUVsZW1lbnQgJiYgbm9kZS5ub2RlVHlwZSgpID09PSBOb2Rl
LlRFWFRfTk9ERSkgewogICAgICAgICAgICAgLy8gVGhlIHRleHQgbm9kZSBtaWdodCBoYXZlIGJl
ZW4gaW5saW5lZCBpZiBpdCB3YXMgc2hvcnQsIHNvIHRyeSB0byBmaW5kIHRoZSBwYXJlbnQgZWxl
bWVudC4KQEAgLTE5Nyw3ICsyMDEsNyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlT3V0bGlu
ZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIC8vIGl0ZW1zIGV4dGVuZCBhdCBsZWFzdCB0byB0aGUg
cmlnaHQgZWRnZSBvZiB0aGUgb3V0ZXIgPG9sPiBjb250YWluZXIuCiAgICAgICAgIC8vIEluIHRo
ZSBuby13b3JkLXdyYXAgbW9kZSB0aGUgb3V0ZXIgPG9sPiBtYXkgYmUgd2lkZXIgdGhhbiB0aGUg
dHJlZSBjb250YWluZXIKICAgICAgICAgLy8gKGFuZCBwYXJ0aWFsbHkgaGlkZGVuKSwgaW4gd2hp
Y2ggY2FzZSB3ZSBhcmUgbGVmdCB0byB1c2Ugb25seSBpdHMgcmlnaHQgYm91bmRhcnkuCi0gICAg
ICAgIHZhciB4ID0gc2Nyb2xsQ29udGFpbmVyLnRvdGFsT2Zmc2V0TGVmdCArIHNjcm9sbENvbnRh
aW5lci5vZmZzZXRXaWR0aCAtIDM2OworICAgICAgICB2YXIgeCA9IHNjcm9sbENvbnRhaW5lci50
b3RhbE9mZnNldExlZnQoKSArIHNjcm9sbENvbnRhaW5lci5vZmZzZXRXaWR0aCAtIDM2OwogCiAg
ICAgICAgIHZhciB5ID0gZXZlbnQucGFnZVk7CiAKQEAgLTE0NjYsNyArMTQ3MCw3IEBAIFdlYklu
c3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAg
ICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBOb2RlLlRFWFRfTk9ERToKLSAgICAgICAgICAg
ICAgICBpZiAoaXNOb2RlV2hpdGVzcGFjZS5jYWxsKG5vZGUpKQorICAgICAgICAgICAgICAgIGlm
IChub2RlLmlzV2hpdGVzcGFjZSgpKQogICAgICAgICAgICAgICAgICAgICBpbmZvLnRpdGxlRE9N
LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIod2hpdGVzcGFjZSkiKSk7CiAg
ICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLnBhcmVu
dE5vZGUgJiYgbm9kZS5wYXJlbnROb2RlLm5vZGVOYW1lKCkudG9Mb3dlckNhc2UoKSA9PT0gInNj
cmlwdCIpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
UmVtb3RlT2JqZWN0LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZW1v
dGVPYmplY3QuanMKaW5kZXggODlkMDE3NGUyYjUzNjgzNWYyMjE2ZDMyNjY5M2UxMjVhOTU4Mzgw
OS4uNzIwMTgxODk4MTkyNmNjMWQ1MDIzOTJhYjgzMmNjNzk5NjQ2NDJjYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZW1vdGVPYmplY3QuanMKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZW1vdGVPYmplY3QuanMKQEAgLTQy
LDYgKzQyLDcgQEAgV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdCA9IGZ1bmN0aW9uKG9iamVjdElk
LCB0eXBlLCBzdWJ0eXBlLCB2YWx1ZSwgZGVzY3JpcHRpb24KICAgICAgICAgY29uc29sZS5hc3Nl
cnQodHlwZSAhPT0gIm9iamVjdCIgfHwgdmFsdWUgPT09IG51bGwpOwogICAgICAgICB0aGlzLl9k
ZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uIHx8ICh2YWx1ZSArICIiKTsKICAgICAgICAgdGhpcy5f
aGFzQ2hpbGRyZW4gPSBmYWxzZTsKKyAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOwogICAgIH0K
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNv
dXJjZVRpbWluZ1ZpZXcuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jl
c291cmNlVGltaW5nVmlldy5qcwppbmRleCBlOTYyNGJmMDNiNWEyNzQyZmIwY2MyMTRjMzA4NTY3
NjQxNTA3ZDFkLi4yZjEzZTkzZTUzNDJlNmEzYTI2MTU4NTA2ZDMwNGIzODM4N2E2YzRiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlVGltaW5n
Vmlldy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNl
VGltaW5nVmlldy5qcwpAQCAtMTQ4LDcgKzE0OCw3IEBAIFdlYkluc3BlY3Rvci5SZXNvdXJjZVRp
bWluZ1ZpZXcuY3JlYXRlVGltaW5nVGFibGUgPSBmdW5jdGlvbihyZXNvdXJjZSkKICAgICAgICAg
ICAgIHRpdGxlLnN0eWxlLnJpZ2h0ID0gKHNjYWxlICogKHRvdGFsIC0gcm93c1tpXS5lbmQpICsg
MykgKyAicHgiOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB0aXRsZS5zdHlsZS5sZWZ0ID0g
KHNjYWxlICogcm93c1tpXS5zdGFydCArIDMpICsgInB4IjsKLSAgICAgICAgdGl0bGUudGV4dENv
bnRlbnQgPSBOdW1iZXIubWlsbGlzVG9TdHJpbmcocm93c1tpXS5lbmQgLSByb3dzW2ldLnN0YXJ0
KTsKKyAgICAgICAgdGl0bGUudGV4dENvbnRlbnQgPSBOdW1iZXIuc2Vjb25kc1RvU3RyaW5nKChy
b3dzW2ldLmVuZCAtIHJvd3NbaV0uc3RhcnQpIC8gMTAwMCk7CiAgICAgICAgIHJvdy5hcHBlbmRD
aGlsZCh0aXRsZSk7CiAKICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZXNQYW5lbC5qcyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VzUGFuZWwuanMKaW5kZXgg
OTNmMzJlMTJiMjVkY2RhMjJkODc3YzIwMDgwNGFhODdiMzMwNWY0ZS4uNzNlZTdhYmIzNjI5MDgy
NTUyZjM4Nzg5ZTFjY2UyMmU0ZjZjOWY1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZXNQYW5lbC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlc1BhbmVsLmpzCkBAIC05NzIsNyArOTcyLDcgQEAg
V2ViSW5zcGVjdG9yLkJhc2VTdG9yYWdlVHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAg
ICAvLyBIZW5jZSB3ZSBuZWVkIHRvIHRha2UgcGFkZGluZyBpbnRvIGNvbnNpZGVyYXRpb24uIFRo
aXMgYWxsIGlzIG5lZWRlZCBmb3IgbGVhZGluZwogICAgICAgICAvLyBpY29ucyBpbiB0aGUgdHJl
ZS4KICAgICAgICAgY29uc3QgcGFkZGluZ0xlZnQgPSAxNDsKLSAgICAgICAgdmFyIGxlZnQgPSB0
aGlzLmxpc3RJdGVtRWxlbWVudC50b3RhbE9mZnNldExlZnQgKyBwYWRkaW5nTGVmdDsKKyAgICAg
ICAgdmFyIGxlZnQgPSB0aGlzLmxpc3RJdGVtRWxlbWVudC50b3RhbE9mZnNldExlZnQoKSArIHBh
ZGRpbmdMZWZ0OwogICAgICAgICByZXR1cm4gZXZlbnQucGFnZVggPj0gbGVmdCAmJiBldmVudC5w
YWdlWCA8PSBsZWZ0ICsgdGhpcy5hcnJvd1RvZ2dsZVdpZHRoICYmIHRoaXMuaGFzQ2hpbGRyZW47
CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9TY3JpcHRzUGFuZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Nj
cmlwdHNQYW5lbC5qcwppbmRleCBjZmFjNGEwODIyYmMxMWQ2ZTU2MzVlZWQxYzkzYzMwZmU5OGQx
ODg1Li41YTg0MWVmZmFlYzUxZWQzZDhkNzMwZGMyODc2ZTVjZTg2ZTMwNzM5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwpAQCAt
NzY0LDcgKzc2NCw3IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlID0gewog
ICAgICAgICBXZWJJbnNwZWN0b3IuZWxlbWVudERyYWdTdGFydCh0aGlzLnNpZGViYXJFbGVtZW50
LCB0aGlzLl9zaWRlYmFyUmVzaXplRHJhZy5iaW5kKHRoaXMpLCB0aGlzLl9lbmRTaWRlYmFyUmVz
aXplRHJhZy5iaW5kKHRoaXMpLCBldmVudCwgImV3LXJlc2l6ZSIpOwogCiAgICAgICAgIGlmIChl
dmVudC50YXJnZXQgPT09IHRoaXMuc2lkZWJhclJlc2l6ZVdpZGdldEVsZW1lbnQpCi0gICAgICAg
ICAgICB0aGlzLl9kcmFnT2Zmc2V0ID0gKGV2ZW50LnRhcmdldC5vZmZzZXRXaWR0aCAtIChldmVu
dC5wYWdlWCAtIGV2ZW50LnRhcmdldC50b3RhbE9mZnNldExlZnQpKTsKKyAgICAgICAgICAgIHRo
aXMuX2RyYWdPZmZzZXQgPSAoZXZlbnQudGFyZ2V0Lm9mZnNldFdpZHRoIC0gKGV2ZW50LnBhZ2VY
IC0gZXZlbnQudGFyZ2V0LnRvdGFsT2Zmc2V0TGVmdCgpKSk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIHRoaXMuX2RyYWdPZmZzZXQgPSAwOwogICAgIH0sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvZnRDb250ZXh0TWVudS5qcyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU29mdENvbnRleHRNZW51LmpzCmluZGV4IDAyMTQ5
ODI2OGU4ODljNTA1YjU5NjgzY2I4YjRhYTVmY2FmZDRiMzMuLjI1OGExZjc0YmI5NDlhY2IxYTFi
YzY5YWY1MjIyNmNiNTVkNDU3MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvU29mdENvbnRleHRNZW51LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvU29mdENvbnRleHRNZW51LmpzCkBAIC00Myw4ICs0Myw4IEBAIFdlYklu
c3BlY3Rvci5Tb2Z0Q29udGV4dE1lbnUucHJvdG90eXBlID0gewogICAgICAgICB2YXIgdGFyZ2V0
RWxlbWVudCA9IGV2ZW50LnRhcmdldDsKICAgICAgICAgd2hpbGUgKHRhcmdldEVsZW1lbnQgJiYg
d2luZG93ICE9PSB0YXJnZXRFbGVtZW50Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpIHsKICAg
ICAgICAgICAgIHZhciBmcmFtZUVsZW1lbnQgPSB0YXJnZXRFbGVtZW50Lm93bmVyRG9jdW1lbnQu
ZGVmYXVsdFZpZXcuZnJhbWVFbGVtZW50OwotICAgICAgICAgICAgYWJzb2x1dGVZICs9IGZyYW1l
RWxlbWVudC50b3RhbE9mZnNldFRvcDsKLSAgICAgICAgICAgIGFic29sdXRlWCArPSBmcmFtZUVs
ZW1lbnQudG90YWxPZmZzZXRMZWZ0OworICAgICAgICAgICAgYWJzb2x1dGVZICs9IGZyYW1lRWxl
bWVudC50b3RhbE9mZnNldFRvcCgpOworICAgICAgICAgICAgYWJzb2x1dGVYICs9IGZyYW1lRWxl
bWVudC50b3RhbE9mZnNldExlZnQoKTsKICAgICAgICAgICAgIHRhcmdldEVsZW1lbnQgPSBmcmFt
ZUVsZW1lbnQ7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9Ub29sYmFyLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9Ub29sYmFyLmpzCmluZGV4IDYxZmEyZjcxMGFmM2Q0NDIwZDc5NDNkMjIzMjNhMWRjYTAw
ZDE5N2QuLjMxMjIzZTE0MWJlYjBmNDExZmRjNTc4Nzk2ZTU0OTAzMDYyMzM2YTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVG9vbGJhci5qcworKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Rvb2xiYXIuanMKQEAgLTE4NywxMCAr
MTg3LDEwIEBAIFdlYkluc3BlY3Rvci5Ub29sYmFyRHJvcGRvd24ucHJvdG90eXBlID0gewogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB2YXIgc3R5bGUgPSB0aGlzLmVsZW1lbnQuc3R5bGU7
CiAgICAgICAgIHRoaXMuX3BvcHVsYXRlKCk7Ci0gICAgICAgIHZhciB0b3AgPSB0aGlzLl9hcnJv
dy50b3RhbE9mZnNldFRvcCArIHRoaXMuX2Fycm93LmNsaWVudEhlaWdodDsKKyAgICAgICAgdmFy
IHRvcCA9IHRoaXMuX2Fycm93LnRvdGFsT2Zmc2V0VG9wKCkgKyB0aGlzLl9hcnJvdy5jbGllbnRI
ZWlnaHQ7CiAgICAgICAgIHRoaXMuX2Fycm93LmFkZFN0eWxlQ2xhc3MoImRyb3Bkb3duLXZpc2li
bGUiKTsKICAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLnRvcCA9IHRvcCArICJweCI7Ci0gICAg
ICAgIHRoaXMuZWxlbWVudC5zdHlsZS5sZWZ0ID0gdGhpcy5fYXJyb3cudG90YWxPZmZzZXRMZWZ0
ICsgInB4IjsKKyAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmxlZnQgPSB0aGlzLl9hcnJvdy50
b3RhbE9mZnNldExlZnQoKSArICJweCI7CiAgICAgICAgIHRoaXMuX2NvbnRlbnRFbGVtZW50LnN0
eWxlLm1heEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHRvcCAtIDIwICsgInB4IjsKICAg
ICAgICAgdGhpcy5fdG9vbGJhci5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpOwogICAgICAgICBX
ZWJJbnNwZWN0b3IuY3VycmVudEZvY3VzRWxlbWVudCA9IHRoaXMuY29udGVudEVsZW1lbnQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dhdGNoRXhwcmVz
c2lvbnNTaWRlYmFyUGFuZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
V2F0Y2hFeHByZXNzaW9uc1NpZGViYXJQYW5lLmpzCmluZGV4IGZkMmM1NjVkNzA1YzAwNjI0NGY4
MmM2NDJiYWJkOTRhOGUxM2JjMzcuLjY1YTQwMGZkZWM2YzY5NzAxNGU4OTMwODFhMTE5ZDBmNWJm
NzgzMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2F0
Y2hFeHByZXNzaW9uc1NpZGViYXJQYW5lLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvV2F0Y2hFeHByZXNzaW9uc1NpZGViYXJQYW5lLmpzCkBAIC0yNTksNyArMjU5
LDcgQEAgV2ViSW5zcGVjdG9yLldhdGNoRXhwcmVzc2lvbnNTZWN0aW9uLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgICAgIHZhciBuZXh0ID0gdGhpcy5faG92ZXJlZEVsZW1lbnQubmV4dFNpYmxpbmc7
CiAgICAgICAgICAgICB3aGlsZShuZXh0ICYmICFuZXh0LmNsaWVudEhlaWdodCkKICAgICAgICAg
ICAgICAgICBuZXh0ID0gbmV4dC5uZXh0U2libGluZzsKLSAgICAgICAgICAgIGlmICghbmV4dCB8
fCBuZXh0LnRvdGFsT2Zmc2V0VG9wID4gcGFnZVkpCisgICAgICAgICAgICBpZiAoIW5leHQgfHwg
bmV4dC50b3RhbE9mZnNldFRvcCgpID4gcGFnZVkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB0aGlzLl9ob3ZlcmVkRWxlbWVudCA9IG5leHQ7CiAgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKaW5kZXggMDc2
ODAwYjg3ZjdkMmU0MjFhOTFmYjdkMTJhODQ1NzdmYmI4ZTQxYS4uMGNmM2JjNjk5YTNjMzI3ZGJm
NjljMjM5ZWY1ZDZkOGRkOGRiYTcwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9pbnNwZWN0b3IuanMKQEAgLTE3MTYsMyArMTcxNiw1MCBAQCBXZWJJbnNwZWN0
b3IuUGFuZWxIaXN0b3J5LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5faGlzdG9yeUl0ZXJh
dG9yID0gdGhpcy5faGlzdG9yeS5sZW5ndGggLSAxOwogICAgIH0KIH0KKworTnVtYmVyLnNlY29u
ZHNUb1N0cmluZyA9IGZ1bmN0aW9uKHNlY29uZHMsIGhpZ2hlclJlc29sdXRpb24pCit7CisgICAg
aWYgKHNlY29uZHMgPT09IDApCisgICAgICAgIHJldHVybiAiMCI7CisKKyAgICB2YXIgbXMgPSBz
ZWNvbmRzICogMTAwMDsKKyAgICBpZiAoaGlnaGVyUmVzb2x1dGlvbiAmJiBtcyA8IDEwMDApCisg
ICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiUuM2ZtcyIsIG1zKTsKKyAgICBl
bHNlIGlmIChtcyA8IDEwMDApCisgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmco
IiUuMGZtcyIsIG1zKTsKKworICAgIGlmIChzZWNvbmRzIDwgNjApCisgICAgICAgIHJldHVybiBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiUuMmZzIiwgc2Vjb25kcyk7CisKKyAgICB2YXIgbWludXRl
cyA9IHNlY29uZHMgLyA2MDsKKyAgICBpZiAobWludXRlcyA8IDYwKQorICAgICAgICByZXR1cm4g
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlLjFmbWluIiwgbWludXRlcyk7CisKKyAgICB2YXIgaG91
cnMgPSBtaW51dGVzIC8gNjA7CisgICAgaWYgKGhvdXJzIDwgMjQpCisgICAgICAgIHJldHVybiBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiUuMWZocnMiLCBob3Vycyk7CisKKyAgICB2YXIgZGF5cyA9
IGhvdXJzIC8gMjQ7CisgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygiJS4xZiBkYXlz
IiwgZGF5cyk7Cit9CisKK051bWJlci5ieXRlc1RvU3RyaW5nID0gZnVuY3Rpb24oYnl0ZXMsIGhp
Z2hlclJlc29sdXRpb24pCit7CisgICAgaWYgKHR5cGVvZiBoaWdoZXJSZXNvbHV0aW9uID09PSAi
dW5kZWZpbmVkIikKKyAgICAgICAgaGlnaGVyUmVzb2x1dGlvbiA9IHRydWU7CisKKyAgICBpZiAo
Ynl0ZXMgPCAxMDI0KQorICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlLjBm
QiIsIGJ5dGVzKTsKKworICAgIHZhciBraWxvYnl0ZXMgPSBieXRlcyAvIDEwMjQ7CisgICAgaWYg
KGhpZ2hlclJlc29sdXRpb24gJiYga2lsb2J5dGVzIDwgMTAyNCkKKyAgICAgICAgcmV0dXJuIFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiJS4yZktCIiwga2lsb2J5dGVzKTsKKyAgICBlbHNlIGlmIChr
aWxvYnl0ZXMgPCAxMDI0KQorICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIl
LjBmS0IiLCBraWxvYnl0ZXMpOworCisgICAgdmFyIG1lZ2FieXRlcyA9IGtpbG9ieXRlcyAvIDEw
MjQ7CisgICAgaWYgKGhpZ2hlclJlc29sdXRpb24pCisgICAgICAgIHJldHVybiBXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIiUuMmZNQiIsIG1lZ2FieXRlcyk7CisgICAgZWxzZQorICAgICAgICByZXR1
cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlLjBmTUIiLCBtZWdhYnl0ZXMpOworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90cmVlb3V0bGluZS5qcyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdHJlZW91dGxpbmUuanMKaW5kZXgg
Yjg4MTg2NWRmZjMwODA2ZWJjZGI3YjgyNjg3NDEwOWMzN2NkYWFmNi4uZWEzY2RlNjg0NzJkNWQz
ODA4ZGUyODk2MTkxNDUwMTAzNGRiNDdkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC90cmVlb3V0bGluZS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL3RyZWVvdXRsaW5lLmpzCkBAIC0yNiw4ICsyNiwxNCBAQAogICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICovCiBmdW5jdGlvbiBUcmVlT3V0
bGluZShsaXN0Tm9kZSkKIHsKKyAgICAvKioKKyAgICAgKiBAdHlwZSB7QXJyYXkuPFRyZWVFbGVt
ZW50Pn0KKyAgICAgKi8KICAgICB0aGlzLmNoaWxkcmVuID0gW107CiAgICAgdGhpcy5zZWxlY3Rl
ZFRyZWVFbGVtZW50ID0gbnVsbDsKICAgICB0aGlzLl9jaGlsZHJlbkxpc3ROb2RlID0gbGlzdE5v
ZGU7CkBAIC00Nyw3ICs1Myw3IEBAIGZ1bmN0aW9uIFRyZWVPdXRsaW5lKGxpc3ROb2RlKQogCiBU
cmVlT3V0bGluZS5fa25vd25UcmVlRWxlbWVudE5leHRJZGVudGlmaWVyID0gMTsKIAotVHJlZU91
dGxpbmUuX2FwcGVuZENoaWxkID0gZnVuY3Rpb24oY2hpbGQpCitUcmVlT3V0bGluZS5wcm90b3R5
cGUuYXBwZW5kQ2hpbGQgPSBmdW5jdGlvbihjaGlsZCkKIHsKICAgICBpZiAoIWNoaWxkKQogICAg
ICAgICB0aHJvdygiY2hpbGQgY2FuJ3QgYmUgdW5kZWZpbmVkIG9yIG51bGwiKTsKQEAgLTg4LDcg
Kzk0LDcgQEAgVHJlZU91dGxpbmUuX2FwcGVuZENoaWxkID0gZnVuY3Rpb24oY2hpbGQpCiAgICAg
Y2hpbGQuX2F0dGFjaCgpOwogfQogCi1UcmVlT3V0bGluZS5faW5zZXJ0Q2hpbGQgPSBmdW5jdGlv
bihjaGlsZCwgaW5kZXgpCitUcmVlT3V0bGluZS5wcm90b3R5cGUuaW5zZXJ0Q2hpbGQgPSBmdW5j
dGlvbihjaGlsZCwgaW5kZXgpCiB7CiAgICAgaWYgKCFjaGlsZCkKICAgICAgICAgdGhyb3coImNo
aWxkIGNhbid0IGJlIHVuZGVmaW5lZCBvciBudWxsIik7CkBAIC0xMzYsNyArMTQyLDcgQEAgVHJl
ZU91dGxpbmUuX2luc2VydENoaWxkID0gZnVuY3Rpb24oY2hpbGQsIGluZGV4KQogICAgIGNoaWxk
Ll9hdHRhY2goKTsKIH0KIAotVHJlZU91dGxpbmUuX3JlbW92ZUNoaWxkQXRJbmRleCA9IGZ1bmN0
aW9uKGNoaWxkSW5kZXgpCitUcmVlT3V0bGluZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGRBdEluZGV4
ID0gZnVuY3Rpb24oY2hpbGRJbmRleCkKIHsKICAgICBpZiAoY2hpbGRJbmRleCA8IDAgfHwgY2hp
bGRJbmRleCA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aCkKICAgICAgICAgdGhyb3coImNoaWxkSW5k
ZXggb3V0IG9mIHJhbmdlIik7CkBAIC0xNzEsNyArMTc3LDcgQEAgVHJlZU91dGxpbmUuX3JlbW92
ZUNoaWxkQXRJbmRleCA9IGZ1bmN0aW9uKGNoaWxkSW5kZXgpCiAgICAgY2hpbGQucHJldmlvdXNT
aWJsaW5nID0gbnVsbDsKIH0KIAotVHJlZU91dGxpbmUuX3JlbW92ZUNoaWxkID0gZnVuY3Rpb24o
Y2hpbGQpCitUcmVlT3V0bGluZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbihjaGls
ZCkKIHsKICAgICBpZiAoIWNoaWxkKQogICAgICAgICB0aHJvdygiY2hpbGQgY2FuJ3QgYmUgdW5k
ZWZpbmVkIG9yIG51bGwiKTsKQEAgLTE4MCwxMCArMTg2LDEwIEBAIFRyZWVPdXRsaW5lLl9yZW1v
dmVDaGlsZCA9IGZ1bmN0aW9uKGNoaWxkKQogICAgIGlmIChjaGlsZEluZGV4ID09PSAtMSkKICAg
ICAgICAgdGhyb3coImNoaWxkIG5vdCBmb3VuZCBpbiB0aGlzIG5vZGUncyBjaGlsZHJlbiIpOwog
Ci0gICAgVHJlZU91dGxpbmUuX3JlbW92ZUNoaWxkQXRJbmRleC5jYWxsKHRoaXMsIGNoaWxkSW5k
ZXgpOworICAgIHRoaXMucmVtb3ZlQ2hpbGRBdEluZGV4LmNhbGwodGhpcywgY2hpbGRJbmRleCk7
CiB9CiAKLVRyZWVPdXRsaW5lLl9yZW1vdmVDaGlsZHJlbiA9IGZ1bmN0aW9uKCkKK1RyZWVPdXRs
aW5lLnByb3RvdHlwZS5yZW1vdmVDaGlsZHJlbiA9IGZ1bmN0aW9uKCkKIHsKICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHsKICAgICAgICAgdmFyIGNo
aWxkID0gdGhpcy5jaGlsZHJlbltpXTsKQEAgLTIwNCw3ICsyMTAsNyBAQCBUcmVlT3V0bGluZS5f
cmVtb3ZlQ2hpbGRyZW4gPSBmdW5jdGlvbigpCiAgICAgdGhpcy5jaGlsZHJlbiA9IFtdOwogfQog
Ci1UcmVlT3V0bGluZS5fcmVtb3ZlQ2hpbGRyZW5SZWN1cnNpdmUgPSBmdW5jdGlvbigpCitUcmVl
T3V0bGluZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGRyZW5SZWN1cnNpdmUgPSBmdW5jdGlvbigpCiB7
CiAgICAgdmFyIGNoaWxkcmVuVG9SZW1vdmUgPSB0aGlzLmNoaWxkcmVuOwogCkBAIC0yMTYsNyAr
MjIyLDcgQEAgVHJlZU91dGxpbmUuX3JlbW92ZUNoaWxkcmVuUmVjdXJzaXZlID0gZnVuY3Rpb24o
KQogICAgIH0KIAogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW5Ub1JlbW92ZS5sZW5n
dGg7ICsraSkgewotICAgICAgICB2YXIgY2hpbGQgPSBjaGlsZHJlblRvUmVtb3ZlW2ldOworICAg
ICAgICBjaGlsZCA9IGNoaWxkcmVuVG9SZW1vdmVbaV07CiAgICAgICAgIGNoaWxkLmRlc2VsZWN0
KCk7CiAgICAgICAgIGlmIChjaGlsZC50cmVlT3V0bGluZSkKICAgICAgICAgICAgIGNoaWxkLnRy
ZWVPdXRsaW5lLl9mb3JnZXRUcmVlRWxlbWVudChjaGlsZCk7CkBAIC0zMjIsOCArMzI4LDggQEAg
VHJlZU91dGxpbmUucHJvdG90eXBlLmZpbmRUcmVlRWxlbWVudCA9IGZ1bmN0aW9uKHJlcHJlc2Vu
dGVkT2JqZWN0LCBpc0FuY2VzdG9yLAogICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgZG8gc29t
ZXRoaW5nIGZhc3RlciB0aGFuIGZpbmRUcmVlRWxlbWVudCBzaW5jZSB3ZSB3aWxsIGtub3cgdGhl
IG5leHQKICAgICAgICAgLy8gYW5jZXN0b3IgZXhpc3RzIGluIHRoZSB0cmVlLgogICAgICAgICBp
dGVtID0gdGhpcy5maW5kVHJlZUVsZW1lbnQoYW5jZXN0b3JzW2ldLCBpc0FuY2VzdG9yLCBnZXRQ
YXJlbnQpOwotICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLm9ucG9wdWxhdGUpCi0gICAgICAgICAg
ICBpdGVtLm9ucG9wdWxhdGUoaXRlbSk7CisgICAgICAgIGlmIChpdGVtKQorICAgICAgICAgICAg
aXRlbS5vbnBvcHVsYXRlKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHRoaXMuZ2V0Q2FjaGVkVHJl
ZUVsZW1lbnQocmVwcmVzZW50ZWRPYmplY3QpOwpAQCAtMzkyLDcgKzM5OCw3IEBAIFRyZWVPdXRs
aW5lLnByb3RvdHlwZS5fdHJlZUtleURvd24gPSBmdW5jdGlvbihldmVudCkKICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5zZWxlY3RlZFRyZWVFbGVtZW50LmV4cGFuZCgpOwogICAgICAgICAgICAg
fQogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChldmVudC5rZXlDb2RlID09PSBXZWJJbnNwZWN0
b3IuS2V5Ym9hcmRTaG9ydGN1dC5LZXlzLkJhY2tzcGFjZS5jb2RlIHx8IGV2ZW50LmtleUNvZGUg
PT09IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXMuRGVsZXRlLmNvZGUpIHsKKyAg
ICB9IGVsc2UgaWYgKGV2ZW50LmtleUNvZGUgPT09IDI3IC8qIEVzYyAqLyB8fCBldmVudC5rZXlD
b2RlID09PSA0NiAvKiBEZWxldGUgKi8pIHsKICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRUcmVl
RWxlbWVudC5vbmRlbGV0ZSkKICAgICAgICAgICAgIGhhbmRsZWQgPSB0aGlzLnNlbGVjdGVkVHJl
ZUVsZW1lbnQub25kZWxldGUoKTsKICAgICB9IGVsc2UgaWYgKGlzRW50ZXJLZXkoZXZlbnQpKSB7
CkBAIC00NDEsMTMgKzQ0Nyw5IEBAIFRyZWVPdXRsaW5lLnByb3RvdHlwZS5yZXZlYWxBbmRTZWxl
Y3QgPSBmdW5jdGlvbihvbWl0Rm9jdXMpCiAgICAgLy8gdGhpcyBpcyB0aGUgcm9vdCwgZG8gbm90
aGluZwogfQogCi1UcmVlT3V0bGluZS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQgPSBUcmVlT3V0bGlu
ZS5fYXBwZW5kQ2hpbGQ7Ci1UcmVlT3V0bGluZS5wcm90b3R5cGUuaW5zZXJ0Q2hpbGQgPSBUcmVl
T3V0bGluZS5faW5zZXJ0Q2hpbGQ7Ci1UcmVlT3V0bGluZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQg
PSBUcmVlT3V0bGluZS5fcmVtb3ZlQ2hpbGQ7Ci1UcmVlT3V0bGluZS5wcm90b3R5cGUucmVtb3Zl
Q2hpbGRBdEluZGV4ID0gVHJlZU91dGxpbmUuX3JlbW92ZUNoaWxkQXRJbmRleDsKLVRyZWVPdXRs
aW5lLnByb3RvdHlwZS5yZW1vdmVDaGlsZHJlbiA9IFRyZWVPdXRsaW5lLl9yZW1vdmVDaGlsZHJl
bjsKLVRyZWVPdXRsaW5lLnByb3RvdHlwZS5yZW1vdmVDaGlsZHJlblJlY3Vyc2l2ZSA9IFRyZWVP
dXRsaW5lLl9yZW1vdmVDaGlsZHJlblJlY3Vyc2l2ZTsKLQorLyoqCisgKiBAY29uc3RydWN0b3IK
KyAqLwogZnVuY3Rpb24gVHJlZUVsZW1lbnQodGl0bGUsIHJlcHJlc2VudGVkT2JqZWN0LCBoYXND
aGlsZHJlbikKIHsKICAgICB0aGlzLl90aXRsZSA9IHRpdGxlOwpAQCAtNTg2LDEyICs1ODgsMTIg
QEAgVHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgIH0KIH0KIAotVHJlZUVsZW1lbnQucHJv
dG90eXBlLmFwcGVuZENoaWxkID0gVHJlZU91dGxpbmUuX2FwcGVuZENoaWxkOwotVHJlZUVsZW1l
bnQucHJvdG90eXBlLmluc2VydENoaWxkID0gVHJlZU91dGxpbmUuX2luc2VydENoaWxkOwotVHJl
ZUVsZW1lbnQucHJvdG90eXBlLnJlbW92ZUNoaWxkID0gVHJlZU91dGxpbmUuX3JlbW92ZUNoaWxk
OwotVHJlZUVsZW1lbnQucHJvdG90eXBlLnJlbW92ZUNoaWxkQXRJbmRleCA9IFRyZWVPdXRsaW5l
Ll9yZW1vdmVDaGlsZEF0SW5kZXg7Ci1UcmVlRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlQ2hpbGRy
ZW4gPSBUcmVlT3V0bGluZS5fcmVtb3ZlQ2hpbGRyZW47Ci1UcmVlRWxlbWVudC5wcm90b3R5cGUu
cmVtb3ZlQ2hpbGRyZW5SZWN1cnNpdmUgPSBUcmVlT3V0bGluZS5fcmVtb3ZlQ2hpbGRyZW5SZWN1
cnNpdmU7CitUcmVlRWxlbWVudC5wcm90b3R5cGUuYXBwZW5kQ2hpbGQgPSBUcmVlT3V0bGluZS5w
cm90b3R5cGUuYXBwZW5kQ2hpbGQ7CitUcmVlRWxlbWVudC5wcm90b3R5cGUuaW5zZXJ0Q2hpbGQg
PSBUcmVlT3V0bGluZS5wcm90b3R5cGUuaW5zZXJ0Q2hpbGQ7CitUcmVlRWxlbWVudC5wcm90b3R5
cGUucmVtb3ZlQ2hpbGQgPSBUcmVlT3V0bGluZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ7CitUcmVl
RWxlbWVudC5wcm90b3R5cGUucmVtb3ZlQ2hpbGRBdEluZGV4ID0gVHJlZU91dGxpbmUucHJvdG90
eXBlLnJlbW92ZUNoaWxkQXRJbmRleDsKK1RyZWVFbGVtZW50LnByb3RvdHlwZS5yZW1vdmVDaGls
ZHJlbiA9IFRyZWVPdXRsaW5lLnByb3RvdHlwZS5yZW1vdmVDaGlsZHJlbjsKK1RyZWVFbGVtZW50
LnByb3RvdHlwZS5yZW1vdmVDaGlsZHJlblJlY3Vyc2l2ZSA9IFRyZWVPdXRsaW5lLnByb3RvdHlw
ZS5yZW1vdmVDaGlsZHJlblJlY3Vyc2l2ZTsKIAogVHJlZUVsZW1lbnQucHJvdG90eXBlLl9hdHRh
Y2ggPSBmdW5jdGlvbigpCiB7CkBAIC03MzEsOCArNzMzLDcgQEAgVHJlZUVsZW1lbnQucHJvdG90
eXBlLmV4cGFuZCA9IGZ1bmN0aW9uKCkKICAgICAgICAgaWYgKHRoaXMuaGlkZGVuKQogICAgICAg
ICAgICAgdGhpcy5fY2hpbGRyZW5MaXN0Tm9kZS5hZGRTdHlsZUNsYXNzKCJoaWRkZW4iKTsKIAot
ICAgICAgICBpZiAodGhpcy5vbnBvcHVsYXRlKQotICAgICAgICAgICAgdGhpcy5vbnBvcHVsYXRl
KHRoaXMpOworICAgICAgICB0aGlzLm9ucG9wdWxhdGUoKTsKIAogICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpCiAgICAgICAgICAgICB0aGlzLmNo
aWxkcmVuW2ldLl9hdHRhY2goKTsKQEAgLTgyMSw2ICs4MjIsMTAgQEAgVHJlZUVsZW1lbnQucHJv
dG90eXBlLnNlbGVjdE9uTW91c2VEb3duID0gZnVuY3Rpb24oZXZlbnQpCiAgICAgdGhpcy5zZWxl
Y3QoZmFsc2UsIHRydWUpOwogfQogCisvKioKKyAqIEBwYXJhbSB7Ym9vbGVhbj19IG9taXRGb2N1
cworICogQHBhcmFtIHtib29sZWFuPX0gc2VsZWN0ZWRCeVVzZXIKKyAqLwogVHJlZUVsZW1lbnQu
cHJvdG90eXBlLnNlbGVjdCA9IGZ1bmN0aW9uKG9taXRGb2N1cywgc2VsZWN0ZWRCeVVzZXIpCiB7
CiAgICAgaWYgKCF0aGlzLnRyZWVPdXRsaW5lIHx8ICF0aGlzLnNlbGVjdGFibGUgfHwgdGhpcy5z
ZWxlY3RlZCkKQEAgLTg1MSw2ICs4NTYsOSBAQCBUcmVlRWxlbWVudC5wcm90b3R5cGUucmV2ZWFs
QW5kU2VsZWN0ID0gZnVuY3Rpb24ob21pdEZvY3VzKQogICAgIHRoaXMuc2VsZWN0KG9taXRGb2N1
cyk7CiB9CiAKKy8qKgorICogQHBhcmFtIHtib29sZWFuPX0gc3VwcmVzc09uRGVzZWxlY3QKKyAq
LwogVHJlZUVsZW1lbnQucHJvdG90eXBlLmRlc2VsZWN0ID0gZnVuY3Rpb24oc3VwcmVzc09uRGVz
ZWxlY3QpCiB7CiAgICAgaWYgKCF0aGlzLnRyZWVPdXRsaW5lIHx8IHRoaXMudHJlZU91dGxpbmUu
c2VsZWN0ZWRUcmVlRWxlbWVudCAhPT0gdGhpcyB8fCAhdGhpcy5zZWxlY3RlZCkKQEAgLTg2Niwx
MCArODc0LDE1IEBAIFRyZWVFbGVtZW50LnByb3RvdHlwZS5kZXNlbGVjdCA9IGZ1bmN0aW9uKHN1
cHJlc3NPbkRlc2VsZWN0KQogICAgIHJldHVybiB0cnVlOwogfQogCitUcmVlRWxlbWVudC5wcm90
b3R5cGUub25wb3B1bGF0ZSA9IGZ1bmN0aW9uKCkKK3sKKyAgICAvLyBPdmVycmlkZW4gYnkgc3Vi
Y2xhc3Nlcy4KK30KKwogVHJlZUVsZW1lbnQucHJvdG90eXBlLnRyYXZlcnNlTmV4dFRyZWVFbGVt
ZW50ID0gZnVuY3Rpb24oc2tpcEhpZGRlbiwgc3RheVdpdGhpbiwgZG9udFBvcHVsYXRlLCBpbmZv
KQogewotICAgIGlmICghZG9udFBvcHVsYXRlICYmIHRoaXMuaGFzQ2hpbGRyZW4gJiYgdGhpcy5v
bnBvcHVsYXRlKQotICAgICAgICB0aGlzLm9ucG9wdWxhdGUodGhpcyk7CisgICAgaWYgKCFkb250
UG9wdWxhdGUgJiYgdGhpcy5oYXNDaGlsZHJlbikKKyAgICAgICAgdGhpcy5vbnBvcHVsYXRlKCk7
CiAKICAgICBpZiAoaW5mbykKICAgICAgICAgaW5mby5kZXB0aENoYW5nZSA9IDA7CkBAIC05MDQs
MTIgKzkxNywxMiBAQCBUcmVlRWxlbWVudC5wcm90b3R5cGUudHJhdmVyc2VOZXh0VHJlZUVsZW1l
bnQgPSBmdW5jdGlvbihza2lwSGlkZGVuLCBzdGF5V2l0aGluLAogVHJlZUVsZW1lbnQucHJvdG90
eXBlLnRyYXZlcnNlUHJldmlvdXNUcmVlRWxlbWVudCA9IGZ1bmN0aW9uKHNraXBIaWRkZW4sIGRv
bnRQb3B1bGF0ZSkKIHsKICAgICB2YXIgZWxlbWVudCA9IHNraXBIaWRkZW4gPyAodGhpcy5yZXZl
YWxlZCgpID8gdGhpcy5wcmV2aW91c1NpYmxpbmcgOiBudWxsKSA6IHRoaXMucHJldmlvdXNTaWJs
aW5nOwotICAgIGlmICghZG9udFBvcHVsYXRlICYmIGVsZW1lbnQgJiYgZWxlbWVudC5oYXNDaGls
ZHJlbiAmJiBlbGVtZW50Lm9ucG9wdWxhdGUpCi0gICAgICAgIGVsZW1lbnQub25wb3B1bGF0ZShl
bGVtZW50KTsKKyAgICBpZiAoIWRvbnRQb3B1bGF0ZSAmJiBlbGVtZW50ICYmIGVsZW1lbnQuaGFz
Q2hpbGRyZW4pCisgICAgICAgIGVsZW1lbnQub25wb3B1bGF0ZSgpOwogCiAgICAgd2hpbGUgKGVs
ZW1lbnQgJiYgKHNraXBIaWRkZW4gPyAoZWxlbWVudC5yZXZlYWxlZCgpICYmIGVsZW1lbnQuZXhw
YW5kZWQgPyBlbGVtZW50LmNoaWxkcmVuW2VsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoIC0gMV0gOiBu
dWxsKSA6IGVsZW1lbnQuY2hpbGRyZW5bZWxlbWVudC5jaGlsZHJlbi5sZW5ndGggLSAxXSkpIHsK
LSAgICAgICAgaWYgKCFkb250UG9wdWxhdGUgJiYgZWxlbWVudC5oYXNDaGlsZHJlbiAmJiBlbGVt
ZW50Lm9ucG9wdWxhdGUpCi0gICAgICAgICAgICBlbGVtZW50Lm9ucG9wdWxhdGUoZWxlbWVudCk7
CisgICAgICAgIGlmICghZG9udFBvcHVsYXRlICYmIGVsZW1lbnQuaGFzQ2hpbGRyZW4pCisgICAg
ICAgICAgICBlbGVtZW50Lm9ucG9wdWxhdGUoKTsKICAgICAgICAgZWxlbWVudCA9IChza2lwSGlk
ZGVuID8gKGVsZW1lbnQucmV2ZWFsZWQoKSAmJiBlbGVtZW50LmV4cGFuZGVkID8gZWxlbWVudC5j
aGlsZHJlbltlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCAtIDFdIDogbnVsbCkgOiBlbGVtZW50LmNo
aWxkcmVuW2VsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoIC0gMV0pOwogICAgIH0KIApAQCAtOTI0LDYg
KzkzNyw2IEBAIFRyZWVFbGVtZW50LnByb3RvdHlwZS50cmF2ZXJzZVByZXZpb3VzVHJlZUVsZW1l
bnQgPSBmdW5jdGlvbihza2lwSGlkZGVuLCBkb250UG9wCiAKIFRyZWVFbGVtZW50LnByb3RvdHlw
ZS5pc0V2ZW50V2l0aGluRGlzY2xvc3VyZVRyaWFuZ2xlID0gZnVuY3Rpb24oZXZlbnQpCiB7Ci0g
ICAgdmFyIGxlZnQgPSB0aGlzLl9saXN0SXRlbU5vZGUudG90YWxPZmZzZXRMZWZ0OworICAgIHZh
ciBsZWZ0ID0gdGhpcy5fbGlzdEl0ZW1Ob2RlLnRvdGFsT2Zmc2V0TGVmdCgpOwogICAgIHJldHVy
biBldmVudC5wYWdlWCA+PSBsZWZ0ICYmIGV2ZW50LnBhZ2VYIDw9IGxlZnQgKyB0aGlzLmFycm93
VG9nZ2xlV2lkdGggJiYgdGhpcy5oYXNDaGlsZHJlbjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMKaW5kZXggYjFmMzMxNTllMjNmNzM1NDc5
ZDM0ZTBmZDQ2Zjg1MDA1Yjc2ZWY5MS4uNTJmNWZjY2FhM2IwM2Y1ZTQ5MjBhYzk2M2UwMGFjNjJm
ZjA3NDc0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91
dGlsaXRpZXMuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGls
aXRpZXMuanMKQEAgLTI2MSwyMSArMjYxLDIxIEBAIEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZUNo
aWxkID0gZnVuY3Rpb24oZWxlbWVudE5hbWUsIGNsYXNzTmFtZSkKIAogRG9jdW1lbnRGcmFnbWVu
dC5wcm90b3R5cGUuY3JlYXRlQ2hpbGQgPSBFbGVtZW50LnByb3RvdHlwZS5jcmVhdGVDaGlsZDsK
IAotRWxlbWVudC5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXygidG90YWxPZmZzZXRMZWZ0Iiwg
ZnVuY3Rpb24oKQorRWxlbWVudC5wcm90b3R5cGUudG90YWxPZmZzZXRMZWZ0ID0gZnVuY3Rpb24o
KQogewogICAgIHZhciB0b3RhbCA9IDA7CiAgICAgZm9yICh2YXIgZWxlbWVudCA9IHRoaXM7IGVs
ZW1lbnQ7IGVsZW1lbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudCkKICAgICAgICAgdG90YWwgKz0g
ZWxlbWVudC5vZmZzZXRMZWZ0ICsgKHRoaXMgIT09IGVsZW1lbnQgPyBlbGVtZW50LmNsaWVudExl
ZnQgOiAwKTsKICAgICByZXR1cm4gdG90YWw7Ci19KTsKK30KIAotRWxlbWVudC5wcm90b3R5cGUu
X19kZWZpbmVHZXR0ZXJfXygidG90YWxPZmZzZXRUb3AiLCBmdW5jdGlvbigpCitFbGVtZW50LnBy
b3RvdHlwZS50b3RhbE9mZnNldFRvcCA9IGZ1bmN0aW9uKCkKIHsKICAgICB2YXIgdG90YWwgPSAw
OwogICAgIGZvciAodmFyIGVsZW1lbnQgPSB0aGlzOyBlbGVtZW50OyBlbGVtZW50ID0gZWxlbWVu
dC5vZmZzZXRQYXJlbnQpCiAgICAgICAgIHRvdGFsICs9IGVsZW1lbnQub2Zmc2V0VG9wICsgKHRo
aXMgIT09IGVsZW1lbnQgPyBlbGVtZW50LmNsaWVudFRvcCA6IDApOwogICAgIHJldHVybiB0b3Rh
bDsKLX0pOworfQogCiBFbGVtZW50LnByb3RvdHlwZS5vZmZzZXRSZWxhdGl2ZVRvV2luZG93ID0g
ZnVuY3Rpb24odGFyZ2V0V2luZG93KQogewpAQCAtMjgzLDggKzI4Myw4IEBAIEVsZW1lbnQucHJv
dG90eXBlLm9mZnNldFJlbGF0aXZlVG9XaW5kb3cgPSBmdW5jdGlvbih0YXJnZXRXaW5kb3cpCiAg
ICAgdmFyIGN1ckVsZW1lbnQgPSB0aGlzOwogICAgIHZhciBjdXJXaW5kb3cgPSB0aGlzLm93bmVy
RG9jdW1lbnQuZGVmYXVsdFZpZXc7CiAgICAgd2hpbGUgKGN1cldpbmRvdyAmJiBjdXJFbGVtZW50
KSB7Ci0gICAgICAgIGVsZW1lbnRPZmZzZXQueCArPSBjdXJFbGVtZW50LnRvdGFsT2Zmc2V0TGVm
dDsKLSAgICAgICAgZWxlbWVudE9mZnNldC55ICs9IGN1ckVsZW1lbnQudG90YWxPZmZzZXRUb3A7
CisgICAgICAgIGVsZW1lbnRPZmZzZXQueCArPSBjdXJFbGVtZW50LnRvdGFsT2Zmc2V0TGVmdCgp
OworICAgICAgICBlbGVtZW50T2Zmc2V0LnkgKz0gY3VyRWxlbWVudC50b3RhbE9mZnNldFRvcCgp
OwogICAgICAgICBpZiAoY3VyV2luZG93ID09PSB0YXJnZXRXaW5kb3cpCiAgICAgICAgICAgICBi
cmVhazsKIApAQCAtNDY4LDExMyArNDY4LDI3IEBAIFN0cmluZy5wcm90b3R5cGUucmVtb3ZlVVJM
RnJhZ21lbnQgPSBmdW5jdGlvbigpCiAgICAgcmV0dXJuIHRoaXMuc3Vic3RyaW5nKDAsIGZyYWdt
ZW50SW5kZXgpOwogfQogCi13aW5kb3cuaXNOb2RlV2hpdGVzcGFjZSA9IGZ1bmN0aW9uKCkKLXsK
LSAgICBpZiAoIXRoaXMgfHwgdGhpcy5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXRoaXMubm9kZVZhbHVlLmxlbmd0aCkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIHRoaXMubm9kZVZhbHVlLm1hdGNoKC9eW1xzXHhB
MF0rJC8pOwotfQotCi1mdW5jdGlvbiBub2RlRGlzcGxheU5hbWUoKQotewotICAgIGlmICghdGhp
cykKLSAgICAgICAgcmV0dXJuICIiOwotCi0gICAgc3dpdGNoICh0aGlzLm5vZGVUeXBlKSB7Ci0g
ICAgICAgIGNhc2UgTm9kZS5ET0NVTUVOVF9OT0RFOgotICAgICAgICAgICAgcmV0dXJuICJEb2N1
bWVudCI7Ci0KLSAgICAgICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERToKLSAgICAgICAgICAgIHZh
ciBuYW1lID0gIjwiICsgdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOwotCi0gICAgICAgICAg
ICBpZiAodGhpcy5oYXNBdHRyaWJ1dGVzKCkpIHsKLSAgICAgICAgICAgICAgICB2YXIgdmFsdWUg
PSB0aGlzLmdldEF0dHJpYnV0ZSgiaWQiKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUpCi0g
ICAgICAgICAgICAgICAgICAgIG5hbWUgKz0gIiBpZD1cIiIgKyB2YWx1ZSArICJcIiI7Ci0gICAg
ICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZSgiY2xhc3MiKTsKLSAgICAgICAg
ICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIG5hbWUgKz0gIiBjbGFzcz1c
IiIgKyB2YWx1ZSArICJcIiI7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMubm9kZU5hbWUudG9M
b3dlckNhc2UoKSA9PT0gImEiKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5n
ZXRBdHRyaWJ1dGUoIm5hbWUiKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgbmFtZSArPSAiIG5hbWU9XCIiICsgdmFsdWUgKyAiXCIiOwot
ICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKCJocmVmIik7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5h
bWUgKz0gIiBocmVmPVwiIiArIHZhbHVlICsgIlwiIjsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gImltZyIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZSgic3JjIik7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgKz0gIiBzcmM9
XCIiICsgdmFsdWUgKyAiXCIiOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5ub2Rl
TmFtZS50b0xvd2VyQ2FzZSgpID09PSAiaWZyYW1lIikgewotICAgICAgICAgICAgICAgICAgICB2
YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKCJzcmMiKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArPSAiIHNyYz1cIiIgKyB2YWx1
ZSArICJcIiI7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm5vZGVOYW1lLnRvTG93
ZXJDYXNlKCkgPT09ICJpbnB1dCIpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlz
LmdldEF0dHJpYnV0ZSgibmFtZSIpOwotICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBuYW1lICs9ICIgbmFtZT1cIiIgKyB2YWx1ZSArICJcIiI7
Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoInR5cGUiKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAg
bmFtZSArPSAiIHR5cGU9XCIiICsgdmFsdWUgKyAiXCIiOwotICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAodGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAiZm9ybSIpIHsKLSAgICAgICAg
ICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZSgiYWN0aW9uIik7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgKz0g
IiBhY3Rpb249XCIiICsgdmFsdWUgKyAiXCIiOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIG5hbWUgKyAiPiI7Ci0KLSAgICAgICAgY2FzZSBO
b2RlLlRFWFRfTk9ERToKLSAgICAgICAgICAgIGlmIChpc05vZGVXaGl0ZXNwYWNlLmNhbGwodGhp
cykpCi0gICAgICAgICAgICAgICAgcmV0dXJuICIod2hpdGVzcGFjZSkiOwotICAgICAgICAgICAg
cmV0dXJuICJcIiIgKyB0aGlzLm5vZGVWYWx1ZSArICJcIiI7Ci0KLSAgICAgICAgY2FzZSBOb2Rl
LkNPTU1FTlRfTk9ERToKLSAgICAgICAgICAgIHJldHVybiAiPCEtLSIgKyB0aGlzLm5vZGVWYWx1
ZSArICItLT4iOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgTm9kZS5ET0NVTUVOVF9UWVBF
X05PREU6Ci0gICAgICAgICAgICB2YXIgZG9jVHlwZSA9ICI8IURPQ1RZUEUgIiArIHRoaXMubm9k
ZU5hbWU7Ci0gICAgICAgICAgICBpZiAodGhpcy5wdWJsaWNJZCkgewotICAgICAgICAgICAgICAg
IGRvY1R5cGUgKz0gIiBQVUJMSUMgXCIiICsgdGhpcy5wdWJsaWNJZCArICJcIiI7Ci0gICAgICAg
ICAgICAgICAgaWYgKHRoaXMuc3lzdGVtSWQpCi0gICAgICAgICAgICAgICAgICAgIGRvY1R5cGUg
Kz0gIiBcIiIgKyB0aGlzLnN5c3RlbUlkICsgIlwiIjsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAo
dGhpcy5zeXN0ZW1JZCkKLSAgICAgICAgICAgICAgICBkb2NUeXBlICs9ICIgU1lTVEVNIFwiIiAr
IHRoaXMuc3lzdGVtSWQgKyAiXCIiOwotICAgICAgICAgICAgaWYgKHRoaXMuaW50ZXJuYWxTdWJz
ZXQpCi0gICAgICAgICAgICAgICAgZG9jVHlwZSArPSAiIFsiICsgdGhpcy5pbnRlcm5hbFN1YnNl
dCArICJdIjsKLSAgICAgICAgICAgIHJldHVybiBkb2NUeXBlICsgIj4iOwotICAgIH0KLQotICAg
IHJldHVybiB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkuY29sbGFwc2VXaGl0ZXNwYWNlKCk7
Ci19Ci0KLXdpbmRvdy5pc0FuY2VzdG9yTm9kZSA9IGZ1bmN0aW9uKGFuY2VzdG9yLCBub2RlKQor
Tm9kZS5wcm90b3R5cGUuaXNBbmNlc3RvciA9IGZ1bmN0aW9uKG5vZGUpCiB7Ci0gICAgaWYgKCFu
b2RlIHx8ICFhbmNlc3RvcikKKyAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIHZhciBjdXJyZW50Tm9kZSA9IG5vZGUucGFyZW50Tm9kZTsKICAgICB3aGlsZSAoY3Vy
cmVudE5vZGUpIHsKLSAgICAgICAgaWYgKGFuY2VzdG9yID09PSBjdXJyZW50Tm9kZSkKKyAgICAg
ICAgaWYgKHRoaXMgPT09IGN1cnJlbnROb2RlKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUucGFyZW50Tm9kZTsKICAgICB9CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi13aW5kb3cuaXNEZXNjZW5kYW50Tm9kZSA9IGZ1bmN0aW9uKGRl
c2NlbmRhbnQpCitOb2RlLnByb3RvdHlwZS5pc0Rlc2NlbmRhbnQgPSBmdW5jdGlvbihkZXNjZW5k
YW50KQogewotICAgIHJldHVybiBpc0FuY2VzdG9yTm9kZShkZXNjZW5kYW50LCB0aGlzKTsKKyAg
ICByZXR1cm4gISFkZXNjZW5kYW50ICYmIGRlc2NlbmRhbnQuaXNBbmNlc3Rvcih0aGlzKTsKIH0K
IAotZnVuY3Rpb24gdHJhdmVyc2VOZXh0Tm9kZShzdGF5V2l0aGluKQorTm9kZS5wcm90b3R5cGUu
dHJhdmVyc2VOZXh0Tm9kZSA9IGZ1bmN0aW9uKHN0YXlXaXRoaW4pCiB7Ci0gICAgaWYgKCF0aGlz
KQotICAgICAgICByZXR1cm47Ci0KICAgICB2YXIgbm9kZSA9IHRoaXMuZmlyc3RDaGlsZDsKICAg
ICBpZiAobm9kZSkKICAgICAgICAgcmV0dXJuIG5vZGU7CkBAIC01OTUsMTAgKzUwOSw4IEBAIGZ1
bmN0aW9uIHRyYXZlcnNlTmV4dE5vZGUoc3RheVdpdGhpbikKICAgICByZXR1cm4gbm9kZS5uZXh0
U2libGluZzsKIH0KIAotZnVuY3Rpb24gdHJhdmVyc2VQcmV2aW91c05vZGUoc3RheVdpdGhpbikK
K05vZGUucHJvdG90eXBlLnRyYXZlcnNlUHJldmlvdXNOb2RlID0gZnVuY3Rpb24oc3RheVdpdGhp
bikKIHsKLSAgICBpZiAoIXRoaXMpCi0gICAgICAgIHJldHVybjsKICAgICBpZiAoc3RheVdpdGhp
biAmJiB0aGlzID09PSBzdGF5V2l0aGluKQogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB2YXIg
bm9kZSA9IHRoaXMucHJldmlvdXNTaWJsaW5nOwpAQCAtNjE0LDY4ICs1MjYsNiBAQCB3aW5kb3cu
cGFyZW50Tm9kZSA9IGZ1bmN0aW9uKG5vZGUpCiAgICAgcmV0dXJuIG5vZGUucGFyZW50Tm9kZTsK
IH0KIAotTm9kZS5wcm90b3R5cGUuaXNXaGl0ZXNwYWNlID0gaXNOb2RlV2hpdGVzcGFjZTsKLU5v
ZGUucHJvdG90eXBlLmRpc3BsYXlOYW1lID0gbm9kZURpc3BsYXlOYW1lOwotTm9kZS5wcm90b3R5
cGUuaXNBbmNlc3RvciA9IGZ1bmN0aW9uKG5vZGUpCi17Ci0gICAgcmV0dXJuIGlzQW5jZXN0b3JO
b2RlKHRoaXMsIG5vZGUpOwotfTsKLU5vZGUucHJvdG90eXBlLmlzRGVzY2VuZGFudCA9IGlzRGVz
Y2VuZGFudE5vZGU7Ci1Ob2RlLnByb3RvdHlwZS50cmF2ZXJzZU5leHROb2RlID0gdHJhdmVyc2VO
ZXh0Tm9kZTsKLU5vZGUucHJvdG90eXBlLnRyYXZlcnNlUHJldmlvdXNOb2RlID0gdHJhdmVyc2VQ
cmV2aW91c05vZGU7Ci0KLU51bWJlci5taWxsaXNUb1N0cmluZyA9IGZ1bmN0aW9uKG1zLCBoaWdo
ZXJSZXNvbHV0aW9uKQotewotICAgIHJldHVybiBOdW1iZXIuc2Vjb25kc1RvU3RyaW5nKG1zIC8g
MTAwMCwgaGlnaGVyUmVzb2x1dGlvbik7Ci19Ci0KLU51bWJlci5zZWNvbmRzVG9TdHJpbmcgPSBm
dW5jdGlvbihzZWNvbmRzLCBoaWdoZXJSZXNvbHV0aW9uKQotewotICAgIGlmIChzZWNvbmRzID09
PSAwKQotICAgICAgICByZXR1cm4gIjAiOwotCi0gICAgdmFyIG1zID0gc2Vjb25kcyAqIDEwMDA7
Ci0gICAgaWYgKGhpZ2hlclJlc29sdXRpb24gJiYgbXMgPCAxMDAwKQotICAgICAgICByZXR1cm4g
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlLjNmbXMiLCBtcyk7Ci0gICAgZWxzZSBpZiAobXMgPCAx
MDAwKQotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlLjBmbXMiLCBtcyk7
Ci0KLSAgICBpZiAoc2Vjb25kcyA8IDYwKQotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCIlLjJmcyIsIHNlY29uZHMpOwotCi0gICAgdmFyIG1pbnV0ZXMgPSBzZWNvbmRzIC8g
NjA7Ci0gICAgaWYgKG1pbnV0ZXMgPCA2MCkKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5V
SVN0cmluZygiJS4xZm1pbiIsIG1pbnV0ZXMpOwotCi0gICAgdmFyIGhvdXJzID0gbWludXRlcyAv
IDYwOwotICAgIGlmIChob3VycyA8IDI0KQotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCIlLjFmaHJzIiwgaG91cnMpOwotCi0gICAgdmFyIGRheXMgPSBob3VycyAvIDI0Owot
ICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiUuMWYgZGF5cyIsIGRheXMpOwotfQot
Ci1OdW1iZXIuYnl0ZXNUb1N0cmluZyA9IGZ1bmN0aW9uKGJ5dGVzLCBoaWdoZXJSZXNvbHV0aW9u
KQotewotICAgIGlmICh0eXBlb2YgaGlnaGVyUmVzb2x1dGlvbiA9PT0gInVuZGVmaW5lZCIpCi0g
ICAgICAgIGhpZ2hlclJlc29sdXRpb24gPSB0cnVlOwotCi0gICAgaWYgKGJ5dGVzIDwgMTAyNCkK
LSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygiJS4wZkIiLCBieXRlcyk7Ci0K
LSAgICB2YXIga2lsb2J5dGVzID0gYnl0ZXMgLyAxMDI0OwotICAgIGlmIChoaWdoZXJSZXNvbHV0
aW9uICYmIGtpbG9ieXRlcyA8IDEwMjQpCi0gICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIiUuMmZLQiIsIGtpbG9ieXRlcyk7Ci0gICAgZWxzZSBpZiAoa2lsb2J5dGVzIDwgMTAy
NCkKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygiJS4wZktCIiwga2lsb2J5
dGVzKTsKLQotICAgIHZhciBtZWdhYnl0ZXMgPSBraWxvYnl0ZXMgLyAxMDI0OwotICAgIGlmICho
aWdoZXJSZXNvbHV0aW9uKQotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIl
LjJmTUIiLCBtZWdhYnl0ZXMpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiJS4wZk1CIiwgbWVnYWJ5dGVzKTsKLX0KLQogTnVtYmVyLmNvbnN0cmFpbiA9
IGZ1bmN0aW9uKG51bSwgbWluLCBtYXgpCiB7CiAgICAgaWYgKG51bSA8IG1pbikKQEAgLTcwOCw0
NSArNTU4LDYzIEBAIEhUTUxUZXh0QXJlYUVsZW1lbnQucHJvdG90eXBlLm1vdmVDdXJzb3JUb0Vu
ZCA9IGZ1bmN0aW9uKCkKICAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKGxlbmd0aCwgbGVuZ3Ro
KTsKIH0KIAotT2JqZWN0LmRlZmluZVByb3BlcnR5KEFycmF5LnByb3RvdHlwZSwgInJlbW92ZSIs
IHsgdmFsdWU6IGZ1bmN0aW9uKHZhbHVlLCBvbmx5Rmlyc3QpCitPYmplY3QuZGVmaW5lUHJvcGVy
dHkoQXJyYXkucHJvdG90eXBlLCAicmVtb3ZlIiwKIHsKLSAgICBpZiAob25seUZpcnN0KSB7Ci0g
ICAgICAgIHZhciBpbmRleCA9IHRoaXMuaW5kZXhPZih2YWx1ZSk7Ci0gICAgICAgIGlmIChpbmRl
eCAhPT0gLTEpCi0gICAgICAgICAgICB0aGlzLnNwbGljZShpbmRleCwgMSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7Ci0gICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBpZiAodGhpc1tpXSA9PT0gdmFs
dWUpCi0gICAgICAgICAgICB0aGlzLnNwbGljZShpLCAxKTsKKyAgICAvKioKKyAgICAgKiBAdGhp
cyB7QXJyYXkuPCo+fQorICAgICAqLworICAgIHZhbHVlOiBmdW5jdGlvbih2YWx1ZSwgb25seUZp
cnN0KQorICAgIHsKKyAgICAgICAgaWYgKG9ubHlGaXJzdCkgeworICAgICAgICAgICAgdmFyIGlu
ZGV4ID0gdGhpcy5pbmRleE9mKHZhbHVlKTsKKyAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEp
CisgICAgICAgICAgICAgICAgdGhpcy5zcGxpY2UoaW5kZXgsIDEpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgCisgICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAg
aWYgKHRoaXNbaV0gPT09IHZhbHVlKQorICAgICAgICAgICAgICAgIHRoaXMuc3BsaWNlKGksIDEp
OworICAgICAgICB9CiAgICAgfQotfX0pOworfSk7CiAKLU9iamVjdC5kZWZpbmVQcm9wZXJ0eShB
cnJheS5wcm90b3R5cGUsICJrZXlTZXQiLCB7IHZhbHVlOiBmdW5jdGlvbigpCitPYmplY3QuZGVm
aW5lUHJvcGVydHkoQXJyYXkucHJvdG90eXBlLCAia2V5U2V0IiwKIHsKLSAgICB2YXIga2V5cyA9
IHt9OwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7ICsraSkKLSAgICAgICAg
a2V5c1t0aGlzW2ldXSA9IHRydWU7Ci0gICAgcmV0dXJuIGtleXM7Ci19fSk7CisgICAgLyoqCisg
ICAgICogQHRoaXMge0FycmF5LjwqPn0KKyAgICAgKi8KKyAgICB2YWx1ZTogZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgdmFyIGtleXMgPSB7fTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCB0aGlzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAga2V5c1t0aGlzW2ldXSA9IHRydWU7Cisg
ICAgICAgIHJldHVybiBrZXlzOworICAgIH0KK30pOwogCi1PYmplY3QuZGVmaW5lUHJvcGVydHko
QXJyYXkucHJvdG90eXBlLCAidXBwZXJCb3VuZCIsIHsgdmFsdWU6IGZ1bmN0aW9uKHZhbHVlKQor
T2JqZWN0LmRlZmluZVByb3BlcnR5KEFycmF5LnByb3RvdHlwZSwgInVwcGVyQm91bmQiLCAKIHsK
LSAgICB2YXIgZmlyc3QgPSAwOwotICAgIHZhciBjb3VudCA9IHRoaXMubGVuZ3RoOwotICAgIHdo
aWxlIChjb3VudCA+IDApIHsKLSAgICAgIHZhciBzdGVwID0gY291bnQgPj4gMTsKLSAgICAgIHZh
ciBtaWRkbGUgPSBmaXJzdCArIHN0ZXA7Ci0gICAgICBpZiAodmFsdWUgPj0gdGhpc1ttaWRkbGVd
KSB7Ci0gICAgICAgICAgZmlyc3QgPSBtaWRkbGUgKyAxOwotICAgICAgICAgIGNvdW50IC09IHN0
ZXAgKyAxOwotICAgICAgfSBlbHNlCi0gICAgICAgICAgY291bnQgPSBzdGVwOworICAgIC8qKgor
ICAgICAqIEB0aGlzIHtBcnJheS48bnVtYmVyPn0KKyAgICAgKi8KKyAgICB2YWx1ZTogZnVuY3Rp
b24odmFsdWUpCisgICAgeworICAgICAgICB2YXIgZmlyc3QgPSAwOworICAgICAgICB2YXIgY291
bnQgPSB0aGlzLmxlbmd0aDsKKyAgICAgICAgd2hpbGUgKGNvdW50ID4gMCkgeworICAgICAgICAg
IHZhciBzdGVwID0gY291bnQgPj4gMTsKKyAgICAgICAgICB2YXIgbWlkZGxlID0gZmlyc3QgKyBz
dGVwOworICAgICAgICAgIGlmICh2YWx1ZSA+PSB0aGlzW21pZGRsZV0pIHsKKyAgICAgICAgICAg
ICAgZmlyc3QgPSBtaWRkbGUgKyAxOworICAgICAgICAgICAgICBjb3VudCAtPSBzdGVwICsgMTsK
KyAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgY291bnQgPSBzdGVwOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBmaXJzdDsKICAgICB9Ci0gICAgcmV0dXJuIGZpcnN0OwotfX0pOwor
fSk7CiAKIEFycmF5LmRpZmYgPSBmdW5jdGlvbihsZWZ0LCByaWdodCkKIHsKQEAgLTgzMiw3ICs3
MDAsNyBAQCBTdHJpbmcudG9rZW5pemVGb3JtYXRTdHJpbmcgPSBmdW5jdGlvbihmb3JtYXQpCiAK
ICAgICAgICAgaWYgKCFpc05hTihmb3JtYXRbaW5kZXhdKSkgewogICAgICAgICAgICAgLy8gVGhl
IGZpcnN0IGNoYXJhY3RlciBpcyBhIG51bWJlciwgaXQgbWlnaHQgYmUgYSBzdWJzdGl0dXRpb24g
aW5kZXguCi0gICAgICAgICAgICB2YXIgbnVtYmVyID0gcGFyc2VJbnQoZm9ybWF0LnN1YnN0cmlu
ZyhpbmRleCkpOworICAgICAgICAgICAgdmFyIG51bWJlciA9IHBhcnNlSW50KGZvcm1hdC5zdWJz
dHJpbmcoaW5kZXgpLCAxMCk7CiAgICAgICAgICAgICB3aGlsZSAoIWlzTmFOKGZvcm1hdFtpbmRl
eF0pKQogICAgICAgICAgICAgICAgICsraW5kZXg7CiAgICAgICAgICAgICAvLyBJZiB0aGUgbnVt
YmVyIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCBlbmRzIHdpdGggYSAiJCIsCkBAIC04NDgsNyAr
NzE2LDcgQEAgU3RyaW5nLnRva2VuaXplRm9ybWF0U3RyaW5nID0gZnVuY3Rpb24oZm9ybWF0KQog
ICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHByZWNpc2lvbiBzcGVjaWZpZXIuIElmIG5vIGRpZ2l0
IGZvbGxvd3MgdGhlICIuIiwKICAgICAgICAgICAgIC8vIHRoZW4gdGhlIHByZWNpc2lvbiBzaG91
bGQgYmUgemVyby4KICAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgICAgICBwcmVjaXNpb24g
PSBwYXJzZUludChmb3JtYXQuc3Vic3RyaW5nKGluZGV4KSk7CisgICAgICAgICAgICBwcmVjaXNp
b24gPSBwYXJzZUludChmb3JtYXQuc3Vic3RyaW5nKGluZGV4KSwgMTApOwogICAgICAgICAgICAg
aWYgKGlzTmFOKHByZWNpc2lvbikpCiAgICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gMDsKICAg
ICAgICAgICAgIHdoaWxlICghaXNOYU4oZm9ybWF0W2luZGV4XSkpCkBAIC04NjksMTcgKzczNywx
MSBAQCBTdHJpbmcudG9rZW5pemVGb3JtYXRTdHJpbmcgPSBmdW5jdGlvbihmb3JtYXQpCiBTdHJp
bmcuc3RhbmRhcmRGb3JtYXR0ZXJzID0gewogICAgIGQ6IGZ1bmN0aW9uKHN1YnN0aXR1dGlvbikK
ICAgICB7Ci0gICAgICAgIGlmICh0eXBlb2Ygc3Vic3RpdHV0aW9uID09ICJvYmplY3QiICYmIFdl
Ykluc3BlY3Rvci5SZW1vdGVPYmplY3QudHlwZShzdWJzdGl0dXRpb24pID09PSAibnVtYmVyIikK
LSAgICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbi5kZXNjcmlwdGlvbjsKLSAg
ICAgICAgc3Vic3RpdHV0aW9uID0gcGFyc2VJbnQoc3Vic3RpdHV0aW9uKTsKICAgICAgICAgcmV0
dXJuICFpc05hTihzdWJzdGl0dXRpb24pID8gc3Vic3RpdHV0aW9uIDogMDsKICAgICB9LAogCiAg
ICAgZjogZnVuY3Rpb24oc3Vic3RpdHV0aW9uLCB0b2tlbikKICAgICB7Ci0gICAgICAgIGlmICh0
eXBlb2Ygc3Vic3RpdHV0aW9uID09ICJvYmplY3QiICYmIFdlYkluc3BlY3Rvci5SZW1vdGVPYmpl
Y3QudHlwZShzdWJzdGl0dXRpb24pID09PSAibnVtYmVyIikKLSAgICAgICAgICAgIHN1YnN0aXR1
dGlvbiA9IHN1YnN0aXR1dGlvbi5kZXNjcmlwdGlvbjsKLSAgICAgICAgc3Vic3RpdHV0aW9uID0g
cGFyc2VGbG9hdChzdWJzdGl0dXRpb24pOwogICAgICAgICBpZiAoc3Vic3RpdHV0aW9uICYmIHRv
a2VuLnByZWNpc2lvbiA+IC0xKQogICAgICAgICAgICAgc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0
aW9uLnRvRml4ZWQodG9rZW4ucHJlY2lzaW9uKTsKICAgICAgICAgcmV0dXJuICFpc05hTihzdWJz
dGl0dXRpb24pID8gc3Vic3RpdHV0aW9uIDogKHRva2VuLnByZWNpc2lvbiA+IC0xID8gTnVtYmVy
KDApLnRvRml4ZWQodG9rZW4ucHJlY2lzaW9uKSA6IDApOwpAQCAtODg3LDExICs3NDksOSBAQCBT
dHJpbmcuc3RhbmRhcmRGb3JtYXR0ZXJzID0gewogCiAgICAgczogZnVuY3Rpb24oc3Vic3RpdHV0
aW9uKQogICAgIHsKLSAgICAgICAgaWYgKHR5cGVvZiBzdWJzdGl0dXRpb24gPT0gIm9iamVjdCIg
JiYgV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC50eXBlKHN1YnN0aXR1dGlvbikgIT09ICJudWxs
IikKLSAgICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbi5kZXNjcmlwdGlvbjsK
ICAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGlvbjsKLSAgICB9LAotfTsKKyAgICB9Cit9CiAKIFN0
cmluZy52c3ByaW50ZiA9IGZ1bmN0aW9uKGZvcm1hdCwgc3Vic3RpdHV0aW9ucykKIHsKQEAgLTEw
NDgsNyArOTA4LDcgQEAgZnVuY3Rpb24gaGlnaGxpZ2h0U2VhcmNoUmVzdWx0cyhlbGVtZW50LCBy
ZXN1bHRSYW5nZXMsIGNoYW5nZXMpCiAgICAgICAgIHdoaWxlIChjdXJyZW50U25hcHNob3RJdGVt
IDwgc25hcHNob3RMZW5ndGgpIHsKICAgICAgICAgICAgIHRleHROb2RlID0gdGV4dE5vZGVTbmFw
c2hvdC5zbmFwc2hvdEl0ZW0oY3VycmVudFNuYXBzaG90SXRlbSsrKTsKICAgICAgICAgICAgIHNu
YXBzaG90Tm9kZU9mZnNldCArPSB0ZXh0Tm9kZS5ub2RlVmFsdWUubGVuZ3RoOwotICAgICAgICAg
ICAgdmFyIHRleHQgPSB0ZXh0Tm9kZS50ZXh0Q29udGVudDsKKyAgICAgICAgICAgIHRleHQgPSB0
ZXh0Tm9kZS50ZXh0Q29udGVudDsKICAgICAgICAgICAgIGlmIChsZW5ndGggPCB0ZXh0Lmxlbmd0
aCkgewogICAgICAgICAgICAgICAgIHRleHROb2RlLnRleHRDb250ZW50ID0gdGV4dC5zdWJzdHJp
bmcobGVuZ3RoKTsKICAgICAgICAgICAgICAgICBjaGFuZ2VzLnB1c2goeyBub2RlOiB0ZXh0Tm9k
ZSwgdHlwZTogImNoYW5nZWQiLCBvbGRUZXh0OiB0ZXh0LCBuZXdUZXh0OiB0ZXh0Tm9kZS50ZXh0
Q29udGVudCB9KTsKQEAgLTExMDIsMTMgKzk2MiwxMyBAQCBmdW5jdGlvbiByZXZlcnREb21DaGFu
Z2VzKGRvbUNoYW5nZXMpCiBmdW5jdGlvbiBjcmVhdGVTZWFyY2hSZWdleChxdWVyeSwgZXh0cmFG
bGFncykKIHsKICAgICAvLyBUaGlzIHNob3VsZCBiZSBrZXB0IHRoZSBzYW1lIGFzIHRoZSBvbmUg
aW4gSW5zcGVjdG9yUGFnZUFnZW50LmNwcC4KLSAgICByZWdleFNwZWNpYWxDaGFyYWN0ZXJzID0g
IltdKCl7fSstKi4sP1xcXiR8IjsKKyAgICB2YXIgcmVnZXhTcGVjaWFsQ2hhcmFjdGVycyA9ICJb
XSgpe30rLSouLD9cXF4kfCI7CiAgICAgdmFyIHJlZ2V4ID0gIiI7CiAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBxdWVyeS5sZW5ndGg7ICsraSkgewotICAgICAgICB2YXIgY2hhciA9IHF1ZXJ5LmNo
YXJBdChpKTsKLSAgICAgICAgaWYgKHJlZ2V4U3BlY2lhbENoYXJhY3RlcnMuaW5kZXhPZihjaGFy
KSAhPSAtMSkKKyAgICAgICAgdmFyIGMgPSBxdWVyeS5jaGFyQXQoaSk7CisgICAgICAgIGlmIChy
ZWdleFNwZWNpYWxDaGFyYWN0ZXJzLmluZGV4T2YoYykgIT0gLTEpCiAgICAgICAgICAgICByZWdl
eCArPSAiXFwiOwotICAgICAgICByZWdleCArPSBjaGFyOworICAgICAgICByZWdleCArPSBjOwog
ICAgIH0KICAgICByZXR1cm4gbmV3IFJlZ0V4cChyZWdleCwgImkiICsgKGV4dHJhRmxhZ3MgfHwg
IiIpKTsKIH0K
</data>
<flag name="review"
          id="100589"
          type_id="1"
          status="+"
          setter="tonyg"
    />
          </attachment>
      

    </bug>

</bugzilla>