<?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>54661</bug_id>
          
          <creation_ts>2011-02-17 07:47:54 -0800</creation_ts>
          <short_desc>Web Inspector: [Text editor] Optimize editing updates in main panel</short_desc>
          <delta_ts>2011-02-18 05:39:29 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>53588</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Andrey Adaikin">aandrey</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>podivilov</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>352886</commentid>
    <comment_count>0</comment_count>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2011-02-17 07:47:54 -0800</bug_when>
    <thetext>Optimize editing updates in the main panel. Instead of rebuilding all text chunks, now we update only those that has been changed. The same is to be done for the gutter panel in a separate CL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352896</commentid>
    <comment_count>1</comment_count>
      <attachid>82805</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2011-02-17 07:55:08 -0800</bug_when>
    <thetext>Created attachment 82805
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353494</commentid>
    <comment_count>2</comment_count>
      <attachid>82937</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2011-02-18 02:17:21 -0800</bug_when>
    <thetext>Created attachment 82937
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353505</commentid>
    <comment_count>3</comment_count>
      <attachid>82937</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-18 02:46:53 -0800</bug_when>
    <thetext>Comment on attachment 82937
Patch

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

It looks sane, but I am a bit concerned with the code bloat. Can we introduce new structures / abstractions to keep the code in a readable state?

&gt; Source/WebCore/inspector/front-end/TextViewer.js:44
&gt; +    this._mainPanel = new WebInspector.TextEditorMainPanel(this._textModel, url, syncScrollListener, syncDecorationsForLineListener, enterTextChangeMode, exitTextChangeMode);

6 parameters in the constructor makes it look like a bad design.

&gt; Source/WebCore/inspector/front-end/TextViewer.js:167
&gt; +        // FIXME: UPDATE GUTTER SMARTLY!

No need to shout :)

&gt; Source/WebCore/inspector/front-end/TextViewer.js:203
&gt; +        var mainChunk = this._mainPanel.chunkForLine(lineNumber);

It sounds like main/gutterChunk separation starts hitting us (code bloat)

&gt; Source/WebCore/inspector/front-end/TextViewer.js:773
&gt; +    _markSkippedPaintLines: function(startLine, endLine)

What is &quot;skipped line&quot; and why do we mark it?

&gt; Source/WebCore/inspector/front-end/TextViewer.js:1199
&gt; +        // Update the chunks in range: firstChunkNumber &lt;= index &lt;= lastChunkNumber

Can this method receive only ranges?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353529</commentid>
    <comment_count>4</comment_count>
      <attachid>82937</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2011-02-18 04:42:51 -0800</bug_when>
    <thetext>Comment on attachment 82937
Patch

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

&gt;&gt; Source/WebCore/inspector/front-end/TextViewer.js:44
&gt;&gt; +    this._mainPanel = new WebInspector.TextEditorMainPanel(this._textModel, url, syncScrollListener, syncDecorationsForLineListener, enterTextChangeMode, exitTextChangeMode);
&gt; 
&gt; 6 parameters in the constructor makes it look like a bad design.

yes! :) another option that I can think of is to just pass the &quot;this&quot; reference, as we already do for Chunk&apos;s constructor. can suggest anything else?

&gt;&gt; Source/WebCore/inspector/front-end/TextViewer.js:167
&gt;&gt; +        // FIXME: UPDATE GUTTER SMARTLY!
&gt; 
&gt; No need to shout :)

this is just for me. I can remove it.

&gt;&gt; Source/WebCore/inspector/front-end/TextViewer.js:203
&gt;&gt; +        var mainChunk = this._mainPanel.chunkForLine(lineNumber);
&gt; 
&gt; It sounds like main/gutterChunk separation starts hitting us (code bloat)

should I move the classes on it&apos;s own files (and maybe package=directory)? next CL? :)

&gt;&gt; Source/WebCore/inspector/front-end/TextViewer.js:773
&gt;&gt; +    _markSkippedPaintLines: function(startLine, endLine)
&gt; 
&gt; What is &quot;skipped line&quot; and why do we mark it?

we can not paint lines during an editing phase (this._dirtyLines !== undefined), neither we can just skip them, as it was before, because we will loose the callbacks from the highlighter for expanded lines.

&gt;&gt; Source/WebCore/inspector/front-end/TextViewer.js:1199
&gt;&gt; +        // Update the chunks in range: firstChunkNumber &lt;= index &lt;= lastChunkNumber
&gt; 
&gt; Can this method receive only ranges?

yes, the other 3 arguments can be calculated again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353534</commentid>
    <comment_count>5</comment_count>
      <attachid>82944</attachid>
    <who name="Andrey Adaikin">aandrey</who>
    <bug_when>2011-02-18 04:57:24 -0800</bug_when>
    <thetext>Created attachment 82944
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353545</commentid>
    <comment_count>6</comment_count>
      <attachid>82944</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-18 05:33:24 -0800</bug_when>
    <thetext>Comment on attachment 82944
Patch

Lets do the tests and the refactoring we discussed offline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353547</commentid>
    <comment_count>7</comment_count>
      <attachid>82944</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-02-18 05:39:19 -0800</bug_when>
    <thetext>Comment on attachment 82944
Patch

Clearing flags on attachment: 82944

Committed r78998: &lt;http://trac.webkit.org/changeset/78998&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353548</commentid>
    <comment_count>8</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-02-18 05:39:29 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82805</attachid>
            <date>2011-02-17 07:55:08 -0800</date>
            <delta_ts>2011-02-18 02:17:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54661-20110217185505.patch</filename>
            <type>text/plain</type>
            <size>23814</size>
            <attacher name="Andrey Adaikin">aandrey</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkZTdiOWUwMjg5MjhkOGJkYzk5OGYzYTJjN2UzYTI3MWYzNWIzZjYwLi4z
MDg1ODhlYWViZGFkN2Y5MjViYzZhMzJiOTlhYjg3ODUwNTJhNjJiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDIgQEAKKzIwMTEtMDItMTcgIEFuZHJleSBBZGFpa2luICA8YWFuZHJleUBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdl
YiBJbnNwZWN0b3I6IFtUZXh0IGVkaXRvcl0gT3B0aW1pemUgZWRpdGluZyB1cGRhdGVzIGluIG1h
aW4gcGFuZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU0NjYxCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRWaWV3ZXIuanM6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VGV4dFZpZXdlci5wcm90b3R5cGUuX3RleHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5UZXh0Vmlld2VyLnByb3RvdHlwZS5fZW50ZXJJbnRlcm5hbFRleHRDaGFuZ2VNb2RlKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5fZXhpdEludGVybmFsVGV4
dENoYW5nZU1vZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBl
Ll9zeW5jRGVjb3JhdGlvbnNGb3JMaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRp
dG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZS50ZXh0Q2hhbmdlZCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuX3Njcm9sbCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuY2h1bmtGb3JM
aW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3Rv
dHlwZS5fdG90YWxIZWlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0
ZXJQYW5lbC5wcm90b3R5cGUuX2V4cGFuZENodW5rcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvckd1dHRlckNodW5rKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
R3V0dGVyQ2h1bmsucHJvdG90eXBlLmFkZERlY29yYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JHdXR0ZXJDaHVuay5wcm90b3R5cGUucmVtb3ZlRGVjb3JhdGlvbik6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX2V4cGFuZENodW5rcyk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX2hpZ2hs
aWdodERhdGFSZWFkeSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5l
bC5wcm90b3R5cGUuX21hcmtTa2lwcGVkUGFpbnRMaW5lcyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX3BhaW50U2tpcHBlZExpbmVzKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fcGFpbnRM
aW5lcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5
cGUuX3BhaW50TGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5l
bC5wcm90b3R5cGUuX3Bvc2l0aW9uVG9TZWxlY3Rpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLl9hcHBseURvbVVwZGF0ZXMpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLl91cGRhdGVDaHVu
a3NGb3JSYW5nZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwu
cHJvdG90eXBlLl91cGRhdGVIaWdobGlnaHRzRm9yUmFuZ2UpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLl9jb2xsZWN0TGluZXNGcm9tRGl2KToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rLnByb3RvdHlwZS5nZXQgc3RhcnRMaW5lKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rLnByb3RvdHlwZS5zZXQg
c3RhcnRMaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rLnBy
b3RvdHlwZS5nZXRFeHBhbmRlZExpbmVSb3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRF
ZGl0b3JNYWluQ2h1bmsucHJvdG90eXBlLnVwZGF0ZUNvbGxhcHNlZExpbmVSb3cpOgorCiAyMDEx
LTAyLTE3ICBIdWkgSHVhbmcgIDxodWkuMi5odWFuZ0Bub2tpYS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgTGFzemxvIEdvbWJvcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvVGV4dFZpZXdlci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvVGV4dFZpZXdlci5qcwppbmRleCAxYmRkYmZjYjg3ZTQyYWI4ZTY0OGE0YjgyZjQ2
N2VmMjllOTc0MmI4Li4zN2RmYzc5ZjA0NWUxOTc5NjFiZTAyZTIzZWQ5ODMyZWI1YzYxMWQ0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRWaWV3ZXIu
anMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2VyLmpz
CkBAIC0zNyw5ICszNywxMSBAQCBXZWJJbnNwZWN0b3IuVGV4dFZpZXdlciA9IGZ1bmN0aW9uKHRl
eHRNb2RlbCwgcGxhdGZvcm0sIHVybCkKICAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJkaXYiKTsKICAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gInRleHQtZWRp
dG9yIG1vbm9zcGFjZSI7CiAKKyAgICB2YXIgZW50ZXJUZXh0Q2hhbmdlTW9kZSA9IHRoaXMuX2Vu
dGVySW50ZXJuYWxUZXh0Q2hhbmdlTW9kZS5iaW5kKHRoaXMpOworICAgIHZhciBleGl0VGV4dENo
YW5nZU1vZGUgPSB0aGlzLl9leGl0SW50ZXJuYWxUZXh0Q2hhbmdlTW9kZS5iaW5kKHRoaXMpOwog
ICAgIHZhciBzeW5jU2Nyb2xsTGlzdGVuZXIgPSB0aGlzLl9zeW5jU2Nyb2xsLmJpbmQodGhpcyk7
CiAgICAgdmFyIHN5bmNEZWNvcmF0aW9uc0ZvckxpbmVMaXN0ZW5lciA9IHRoaXMuX3N5bmNEZWNv
cmF0aW9uc0ZvckxpbmUuYmluZCh0aGlzKTsKLSAgICB0aGlzLl9tYWluUGFuZWwgPSBuZXcgV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwodGhpcy5fdGV4dE1vZGVsLCB1cmwsIHN5bmNT
Y3JvbGxMaXN0ZW5lciwgc3luY0RlY29yYXRpb25zRm9yTGluZUxpc3RlbmVyKTsKKyAgICB0aGlz
Ll9tYWluUGFuZWwgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwodGhpcy5f
dGV4dE1vZGVsLCB1cmwsIHN5bmNTY3JvbGxMaXN0ZW5lciwgc3luY0RlY29yYXRpb25zRm9yTGlu
ZUxpc3RlbmVyLCBlbnRlclRleHRDaGFuZ2VNb2RlLCBleGl0VGV4dENoYW5nZU1vZGUpOwogICAg
IHRoaXMuX2d1dHRlclBhbmVsID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVyUGFu
ZWwodGhpcy5fdGV4dE1vZGVsLCBzeW5jRGVjb3JhdGlvbnNGb3JMaW5lTGlzdGVuZXIpOwogICAg
IHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9tYWluUGFuZWwuZWxlbWVudCk7CiAgICAg
dGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2d1dHRlclBhbmVsLmVsZW1lbnQpOwpAQCAt
MTQ2LDggKzE0OCwyNCBAQCBXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUgPSB7CiAg
ICAgLy8gV2ViSW5zcGVjdG9yLlRleHRNb2RlbCBsaXN0ZW5lcgogICAgIF90ZXh0Q2hhbmdlZDog
ZnVuY3Rpb24ob2xkUmFuZ2UsIG5ld1JhbmdlLCBvbGRUZXh0LCBuZXdUZXh0KQogICAgIHsKLSAg
ICAgICAgdGhpcy5fbWFpblBhbmVsLnRleHRDaGFuZ2VkKCk7Ci0gICAgICAgIHRoaXMuX2d1dHRl
clBhbmVsLnRleHRDaGFuZ2VkKCk7CisgICAgICAgIGlmICghdGhpcy5faW50ZXJuYWxUZXh0Q2hh
bmdlTW9kZSkgeworICAgICAgICAgICAgdGhpcy5fbWFpblBhbmVsLnRleHRDaGFuZ2VkKG9sZFJh
bmdlLCBuZXdSYW5nZSk7CisgICAgICAgICAgICB0aGlzLl9ndXR0ZXJQYW5lbC50ZXh0Q2hhbmdl
ZChvbGRSYW5nZSwgbmV3UmFuZ2UpOworICAgICAgICAgICAgdGhpcy5fdXBkYXRlUGFuZWxPZmZz
ZXRzKCk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgX2VudGVySW50ZXJuYWxUZXh0Q2hhbmdl
TW9kZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5faW50ZXJuYWxUZXh0Q2hhbmdl
TW9kZSA9IHRydWU7CisgICAgfSwKKworICAgIF9leGl0SW50ZXJuYWxUZXh0Q2hhbmdlTW9kZTog
ZnVuY3Rpb24ob2xkUmFuZ2UsIG5ld1JhbmdlKQorICAgIHsKKyAgICAgICAgdGhpcy5faW50ZXJu
YWxUZXh0Q2hhbmdlTW9kZSA9IGZhbHNlOworCisgICAgICAgIC8vIEZJWE1FOiBVUERBVEUgR1VU
VEVSIFNNQVJUTFkhCisgICAgICAgIHRoaXMuX2d1dHRlclBhbmVsLnRleHRDaGFuZ2VkKG9sZFJh
bmdlLCBuZXdSYW5nZSk7CiAgICAgICAgIHRoaXMuX3VwZGF0ZVBhbmVsT2Zmc2V0cygpOwogICAg
IH0sCiAKQEAgLTE4MiwxMyArMjAwLDE5IEBAIFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgaWYgKGxpbmVOdW1iZXIgPj0gdGhpcy5fdGV4dE1vZGVsLmxpbmVz
Q291bnQpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdmFyIG1haW5DaHVuayA9IHRo
aXMuX21haW5QYW5lbC5tYWtlTGluZUFDaHVuayhsaW5lTnVtYmVyKTsKLSAgICAgICAgdmFyIGd1
dHRlckNodW5rID0gdGhpcy5fZ3V0dGVyUGFuZWwubWFrZUxpbmVBQ2h1bmsobGluZU51bWJlcik7
Ci0gICAgICAgIHZhciBoZWlnaHQgPSBtYWluQ2h1bmsuaGVpZ2h0OwotICAgICAgICBpZiAoaGVp
Z2h0KQotICAgICAgICAgICAgZ3V0dGVyQ2h1bmsuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgi
aGVpZ2h0IiwgaGVpZ2h0ICsgInB4Iik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGd1dHRl
ckNodW5rLmVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoImhlaWdodCIpOworICAgICAgICB2
YXIgbWFpbkNodW5rID0gdGhpcy5fbWFpblBhbmVsLmNodW5rRm9yTGluZShsaW5lTnVtYmVyKTsK
KyAgICAgICAgaWYgKG1haW5DaHVuay5saW5lc0NvdW50ID09PSAxKSB7CisgICAgICAgICAgICB2
YXIgZ3V0dGVyQ2h1bmsgPSB0aGlzLl9ndXR0ZXJQYW5lbC5tYWtlTGluZUFDaHVuayhsaW5lTnVt
YmVyKTsKKyAgICAgICAgICAgIHZhciBoZWlnaHQgPSBtYWluQ2h1bmsuaGVpZ2h0OworICAgICAg
ICAgICAgaWYgKGhlaWdodCkKKyAgICAgICAgICAgICAgICBndXR0ZXJDaHVuay5lbGVtZW50LnN0
eWxlLnNldFByb3BlcnR5KCJoZWlnaHQiLCBoZWlnaHQgKyAicHgiKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBndXR0ZXJDaHVuay5lbGVtZW50LnN0eWxlLnJlbW92ZVByb3Bl
cnR5KCJoZWlnaHQiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBndXR0ZXJD
aHVuayA9IHRoaXMuX2d1dHRlclBhbmVsLmNodW5rRm9yTGluZShsaW5lTnVtYmVyKTsKKyAgICAg
ICAgICAgIGlmIChndXR0ZXJDaHVuay5saW5lc0NvdW50ID09PSAxKQorICAgICAgICAgICAgICAg
IGd1dHRlckNodW5rLmVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoImhlaWdodCIpOworICAg
ICAgICB9CiAgICAgfQogfQogCkBAIC0yMjgsNyArMjUyLDcgQEAgV2ViSW5zcGVjdG9yLlRleHRF
ZGl0b3JDaHVua2VkUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICBjaHVuay5yZW1vdmVEZWNv
cmF0aW9uKGRlY29yYXRpb24pOwogICAgIH0sCiAKLSAgICB0ZXh0Q2hhbmdlZDogZnVuY3Rpb24o
b2xkUmFuZ2UsIG5ld1JhbmdlLCBvbGRUZXh0LCBuZXdUZXh0KQorICAgIHRleHRDaGFuZ2VkOiBm
dW5jdGlvbihvbGRSYW5nZSwgbmV3UmFuZ2UpCiAgICAgewogICAgICAgICB0aGlzLl9idWlsZENo
dW5rcygpOwogICAgIH0sCkBAIC0zMDYsNiArMzMwLDEwIEBAIFdlYkluc3BlY3Rvci5UZXh0RWRp
dG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZSA9IHsKIAogICAgIF9zY3JvbGw6IGZ1bmN0aW9uKCkK
ICAgICB7CisgICAgICAgIC8vIEZJWE1FOiBSZXBsYWNlIHRoZSAiMiIgd2l0aCB0aGUgcGFkZGlu
Zy1sZWZ0IHZhbHVlIGZyb20gQ1NTLgorICAgICAgICBpZiAodGhpcy5lbGVtZW50LnNjcm9sbExl
ZnQgPD0gMikKKyAgICAgICAgICAgIHRoaXMuZWxlbWVudC5zY3JvbGxMZWZ0ID0gMDsKKwogICAg
ICAgICB0aGlzLl9zY2hlZHVsZVJlcGFpbnRBbGwoKTsKICAgICAgICAgaWYgKHRoaXMuX3N5bmNT
Y3JvbGxMaXN0ZW5lcikKICAgICAgICAgICAgIHRoaXMuX3N5bmNTY3JvbGxMaXN0ZW5lcigpOwpA
QCAtMzUwLDcgKzM3OCw3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3RleHRDaHVua3MubGVuZ3RoIC0gMTsK
ICAgICB9LAogCi0gICAgX2NodW5rRm9yTGluZTogZnVuY3Rpb24obGluZU51bWJlcikKKyAgICBj
aHVua0ZvckxpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCiAgICAgewogICAgICAgICByZXR1cm4g
dGhpcy5fdGV4dENodW5rc1t0aGlzLl9jaHVua051bWJlckZvckxpbmUobGluZU51bWJlcildOwog
ICAgIH0sCkBAIC0zOTQsOSArNDIyLDE3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtl
ZFBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgbGFzdEVsZW1lbnQgPSAobGFzdEVsZW1lbnQg
fHwgZmlyc3RFbGVtZW50KS5uZXh0RWxlbWVudFNpYmxpbmc7CiAgICAgICAgIGlmIChsYXN0RWxl
bWVudCkKICAgICAgICAgICAgIHJldHVybiBsYXN0RWxlbWVudC5vZmZzZXRUb3AgLSBmaXJzdEVs
ZW1lbnQub2Zmc2V0VG9wOwotICAgICAgICBlbHNlIGlmIChmaXJzdEVsZW1lbnQub2Zmc2V0UGFy
ZW50KQotICAgICAgICAgICAgcmV0dXJuIGZpcnN0RWxlbWVudC5vZmZzZXRQYXJlbnQuc2Nyb2xs
SGVpZ2h0IC0gZmlyc3RFbGVtZW50Lm9mZnNldFRvcDsKLSAgICAgICAgcmV0dXJuIGZpcnN0RWxl
bWVudC5vZmZzZXRIZWlnaHQ7CisKKyAgICAgICAgdmFyIG9mZnNldFBhcmVudCA9IGZpcnN0RWxl
bWVudC5vZmZzZXRQYXJlbnQ7CisgICAgICAgIGlmIChvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0UGFy
ZW50LnNjcm9sbEhlaWdodCA+IG9mZnNldFBhcmVudC5jbGllbnRIZWlnaHQpCisgICAgICAgICAg
ICByZXR1cm4gb2Zmc2V0UGFyZW50LnNjcm9sbEhlaWdodCAtIGZpcnN0RWxlbWVudC5vZmZzZXRU
b3A7CisKKyAgICAgICAgdmFyIHRvdGFsID0gMDsKKyAgICAgICAgd2hpbGUgKGZpcnN0RWxlbWVu
dCAmJiBmaXJzdEVsZW1lbnQgIT09IGxhc3RFbGVtZW50KSB7CisgICAgICAgICAgICB0b3RhbCAr
PSBmaXJzdEVsZW1lbnQub2Zmc2V0SGVpZ2h0OworICAgICAgICAgICAgZmlyc3RFbGVtZW50ID0g
Zmlyc3RFbGVtZW50Lm5leHRFbGVtZW50U2libGluZzsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdG90YWw7CiAgICAgfSwKICAgICAKICAgICByZXNpemU6IGZ1bmN0aW9uKCkKQEAgLTQzMyw5
ICs0NjksOCBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlclBhbmVsLnByb3RvdHlwZSA9
IHsKIAogICAgIF9leHBhbmRDaHVua3M6IGZ1bmN0aW9uKGZyb21JbmRleCwgdG9JbmRleCkKICAg
ICB7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGV4dENodW5rcy5sZW5ndGg7
ICsraSkgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RleHRDaHVua3MubGVu
Z3RoOyArK2kpCiAgICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzW2ldLmV4cGFuZGVkID0gKGZy
b21JbmRleCA8PSBpICYmIGkgPCB0b0luZGV4KTsKLSAgICAgICAgfQogICAgIH0KIH0KIApAQCAt
NDY4LDkgKzUwMyw4IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0dGVyQ2h1bmsgPSBmdW5j
dGlvbih0ZXh0Vmlld2VyLCBzdGFydExpbmUsIGVuZExpbmUpCiAgICAgICAgIHRoaXMuZWxlbWVu
dC5hcHBlbmRDaGlsZChvdXRlclNwYW4pOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHZhciBsaW5l
TnVtYmVycyA9IFtdOwotICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRMaW5lOyBpIDwgZW5kTGlu
ZTsgKytpKSB7CisgICAgICAgIGZvciAodmFyIGkgPSBzdGFydExpbmU7IGkgPCBlbmRMaW5lOyAr
K2kpCiAgICAgICAgICAgICBsaW5lTnVtYmVycy5wdXNoKGkgKyAxKTsKLSAgICAgICAgfQogICAg
ICAgICB0aGlzLmVsZW1lbnQudGV4dENvbnRlbnQgPSBsaW5lTnVtYmVycy5qb2luKCJcbiIpOwog
ICAgIH0KIH0KQEAgLTQ3OCwxNiArNTEyLDE0IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yR3V0
dGVyQ2h1bmsgPSBmdW5jdGlvbih0ZXh0Vmlld2VyLCBzdGFydExpbmUsIGVuZExpbmUpCiBXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlckNodW5rLnByb3RvdHlwZSA9IHsKICAgICBhZGREZWNv
cmF0aW9uOiBmdW5jdGlvbihkZWNvcmF0aW9uKQogICAgIHsKLSAgICAgICAgaWYgKHR5cGVvZiBk
ZWNvcmF0aW9uID09PSAic3RyaW5nIikgeworICAgICAgICBpZiAodHlwZW9mIGRlY29yYXRpb24g
PT09ICJzdHJpbmciKQogICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoZGVj
b3JhdGlvbik7Ci0gICAgICAgIH0KICAgICB9LAogCiAgICAgcmVtb3ZlRGVjb3JhdGlvbjogZnVu
Y3Rpb24oZGVjb3JhdGlvbikKICAgICB7Ci0gICAgICAgIGlmICh0eXBlb2YgZGVjb3JhdGlvbiA9
PT0gInN0cmluZyIpIHsKKyAgICAgICAgaWYgKHR5cGVvZiBkZWNvcmF0aW9uID09PSAic3RyaW5n
IikKICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKGRlY29yYXRpb24p
OwotICAgICAgICB9CiAgICAgfSwKIAogICAgIGdldCBleHBhbmRlZCgpCkBAIC01NTYsMTIgKzU4
OCwxNCBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlckNodW5rLnByb3RvdHlwZSA9IHsK
ICAgICB9CiB9CiAKLVdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsID0gZnVuY3Rpb24o
dGV4dE1vZGVsLCB1cmwsIHN5bmNTY3JvbGxMaXN0ZW5lciwgc3luY0RlY29yYXRpb25zRm9yTGlu
ZUxpc3RlbmVyKQorV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwgPSBmdW5jdGlvbih0
ZXh0TW9kZWwsIHVybCwgc3luY1Njcm9sbExpc3RlbmVyLCBzeW5jRGVjb3JhdGlvbnNGb3JMaW5l
TGlzdGVuZXIsIGVudGVyVGV4dENoYW5nZU1vZGUsIGV4aXRUZXh0Q2hhbmdlTW9kZSkKIHsKICAg
ICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5jYWxsKHRoaXMsIHRleHRNb2Rl
bCk7CiAKICAgICB0aGlzLl9zeW5jU2Nyb2xsTGlzdGVuZXIgPSBzeW5jU2Nyb2xsTGlzdGVuZXI7
CiAgICAgdGhpcy5fc3luY0RlY29yYXRpb25zRm9yTGluZUxpc3RlbmVyID0gc3luY0RlY29yYXRp
b25zRm9yTGluZUxpc3RlbmVyOworICAgIHRoaXMuX2VudGVyVGV4dENoYW5nZU1vZGUgPSBlbnRl
clRleHRDaGFuZ2VNb2RlOworICAgIHRoaXMuX2V4aXRUZXh0Q2hhbmdlTW9kZSA9IGV4aXRUZXh0
Q2hhbmdlTW9kZTsKIAogICAgIHRoaXMuX3VybCA9IHVybDsKICAgICB0aGlzLl9oaWdobGlnaHRl
ciA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckhpZ2hsaWdodGVyKHRleHRNb2RlbCwgdGhp
cy5faGlnaGxpZ2h0RGF0YVJlYWR5LmJpbmQodGhpcykpOwpAQCAtNzIzLDI3ICs3NTcsNTkgQEAg
V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICB0
aGlzLl9oaWdobGlnaHRlci5oaWdobGlnaHQobGFzdFZpc2libGVMaW5lKTsKICAgICAgICAgZGVs
ZXRlIHRoaXMuX211dGVIaWdobGlnaHRMaXN0ZW5lcjsKIAotICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHRoaXMuX3RleHRDaHVua3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aDsgKytpKQogICAgICAgICAgICAgdGhp
cy5fdGV4dENodW5rc1tpXS5leHBhbmRlZCA9IChmcm9tSW5kZXggPD0gaSAmJiBpIDwgdG9JbmRl
eCk7Ci0gICAgICAgIH0KIAogICAgICAgICB0aGlzLl9yZXN0b3JlU2VsZWN0aW9uKHNlbGVjdGlv
bik7CiAgICAgfSwKIAogICAgIF9oaWdobGlnaHREYXRhUmVhZHk6IGZ1bmN0aW9uKGZyb21MaW5l
LCB0b0xpbmUpCiAgICAgewotICAgICAgICBpZiAodGhpcy5fbXV0ZUhpZ2hsaWdodExpc3RlbmVy
IHx8IHRoaXMuX2RpcnR5TGluZXMpCisgICAgICAgIGlmICh0aGlzLl9tdXRlSGlnaGxpZ2h0TGlz
dGVuZXIpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHRoaXMuX3BhaW50TGluZXMoZnJv
bUxpbmUsIHRvTGluZSwgdHJ1ZSAvKnJlc3RvcmVTZWxlY3Rpb24qLyk7CiAgICAgfSwKIAorICAg
IF9tYXJrU2tpcHBlZFBhaW50TGluZXM6IGZ1bmN0aW9uKHN0YXJ0TGluZSwgZW5kTGluZSkKKyAg
ICB7CisgICAgICAgIGlmICghdGhpcy5fc2tpcHBlZFBhaW50TGluZXMpCisgICAgICAgICAgICB0
aGlzLl9za2lwcGVkUGFpbnRMaW5lcyA9IFsgeyBzdGFydExpbmU6IHN0YXJ0TGluZSwgZW5kTGlu
ZTogZW5kTGluZSB9IF07CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCB0aGlzLl9za2lwcGVkUGFpbnRMaW5lcy5sZW5ndGg7ICsraSkgeworICAgICAgICAg
ICAgICAgIHZhciBjaHVuayA9IHRoaXMuX3NraXBwZWRQYWludExpbmVzW2ldOworICAgICAgICAg
ICAgICAgIGlmIChjaHVuay5zdGFydExpbmUgPD0gZW5kTGluZSAmJiBjaHVuay5lbmRMaW5lID49
IHN0YXJ0TGluZSkgeworICAgICAgICAgICAgICAgICAgICBjaHVuay5zdGFydExpbmUgPSBNYXRo
Lm1pbihjaHVuay5zdGFydExpbmUsIHN0YXJ0TGluZSk7CisgICAgICAgICAgICAgICAgICAgIGNo
dW5rLmVuZExpbmUgPSBNYXRoLm1heChjaHVuay5lbmRMaW5lLCBlbmRMaW5lKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHRoaXMuX3NraXBwZWRQYWludExpbmVzLnB1c2goeyBzdGFydExpbmU6IHN0YXJ0
TGluZSwgZW5kTGluZTogZW5kTGluZSB9KTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBfcGFp
bnRTa2lwcGVkTGluZXM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fc2tp
cHBlZFBhaW50TGluZXMgfHwgdGhpcy5fZGlydHlMaW5lcykKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9za2lwcGVkUGFpbnRMaW5lcy5sZW5n
dGg7ICsraSkgeworICAgICAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fc2tpcHBlZFBhaW50TGlu
ZXNbaV07CisgICAgICAgICAgICB0aGlzLl9wYWludExpbmVzKGNodW5rLnN0YXJ0TGluZSwgY2h1
bmsuZW5kTGluZSk7CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRlIHRoaXMuX3NraXBwZWRQYWlu
dExpbmVzOworICAgIH0sCisKICAgICBfcGFpbnRMaW5lczogZnVuY3Rpb24oZnJvbUxpbmUsIHRv
TGluZSwgcmVzdG9yZVNlbGVjdGlvbikKICAgICB7CisgICAgICAgIGlmICh0aGlzLl9kaXJ0eUxp
bmVzKSB7CisgICAgICAgICAgICB0aGlzLl9tYXJrU2tpcHBlZFBhaW50TGluZXMoZnJvbUxpbmUs
IHRvTGluZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICB2YXIg
c2VsZWN0aW9uOwotICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl9jaHVua0ZvckxpbmUoZnJvbUxp
bmUpOworICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLmNodW5rRm9yTGluZShmcm9tTGluZSk7CiAg
ICAgICAgIGZvciAodmFyIGkgPSBmcm9tTGluZTsgaSA8IHRvTGluZTsgKytpKSB7CiAgICAgICAg
ICAgICBpZiAoaSA+PSBjaHVuay5zdGFydExpbmUgKyBjaHVuay5saW5lc0NvdW50KQotICAgICAg
ICAgICAgICAgIGNodW5rID0gdGhpcy5fY2h1bmtGb3JMaW5lKGkpOworICAgICAgICAgICAgICAg
IGNodW5rID0gdGhpcy5jaHVua0ZvckxpbmUoaSk7CiAgICAgICAgICAgICB2YXIgbGluZVJvdyA9
IGNodW5rLmdldEV4cGFuZGVkTGluZVJvdyhpKTsKICAgICAgICAgICAgIGlmICghbGluZVJvdykK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTc1Nyw2ICs4MjMsMTEgQEAgV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogCiAgICAgX3BhaW50TGluZTog
ZnVuY3Rpb24obGluZVJvdywgbGluZU51bWJlcikKICAgICB7CisgICAgICAgIGlmICh0aGlzLl9k
aXJ0eUxpbmVzKSB7CisgICAgICAgICAgICB0aGlzLl9tYXJrU2tpcHBlZFBhaW50TGluZXMobGlu
ZU51bWJlciwgbGluZU51bWJlciArIDEpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKICAgICAgICAgdGhpcy5iZWdpbkRvbVVwZGF0ZXMoKTsKICAgICAgICAgdHJ5IHsKICAgICAg
ICAgICAgIHZhciBoaWdobGlnaHQgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKGxpbmVO
dW1iZXIsICJoaWdobGlnaHQiKTsKQEAgLTg5MSw3ICs5NjIsNyBAQCBXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAKICAgICBfcG9zaXRpb25Ub1NlbGVjdGlv
bjogZnVuY3Rpb24obGluZSwgY29sdW1uKQogICAgIHsKLSAgICAgICAgdmFyIGNodW5rID0gdGhp
cy5fY2h1bmtGb3JMaW5lKGxpbmUpOworICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLmNodW5rRm9y
TGluZShsaW5lKTsKICAgICAgICAgdmFyIGxpbmVSb3cgPSBjaHVuay5nZXRFeHBhbmRlZExpbmVS
b3cobGluZSk7CiAgICAgICAgIGlmIChsaW5lUm93KQogICAgICAgICAgICAgdmFyIHJhbmdlQm91
bmRhcnkgPSBsaW5lUm93LnJhbmdlQm91bmRhcnlGb3JPZmZzZXQoY29sdW1uKTsKQEAgLTk2Mywx
MiArMTAzNCw2IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9
IHsKICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5jb21wbGV0ZVVSTCh0aGlzLl91cmwsIGhy
ZWZWYWx1ZSk7CiAgICAgfSwKIAotICAgIHRleHRDaGFuZ2VkOiBmdW5jdGlvbihvbGRSYW5nZSwg
bmV3UmFuZ2UsIG9sZFRleHQsIG5ld1RleHQpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogVXBk
YXRlIG9ubHkgdGhhdCBwYXJ0IG9mIHRoZSBlZGl0b3IgdGhhdCBoYXMganVzdCBiZWVuIGNoYW5n
ZWQuCi0gICAgICAgIHRoaXMuX2J1aWxkQ2h1bmtzKCk7Ci0gICAgfSwKLQogICAgIF9oYW5kbGVE
T01VcGRhdGVzOiBmdW5jdGlvbihlKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX2RvbVVwZGF0
ZUNvYWxlc2NpbmdMZXZlbCkKQEAgLTEwNTksNiArMTEyNCw4IEBAIFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKHRoaXMuX3JlYWRPbmx5
KQogICAgICAgICAgICAgcmV0dXJuOwogCisgICAgICAgIHRoaXMuX2VudGVyVGV4dENoYW5nZU1v
ZGUoKTsKKwogICAgICAgICAvLyBGSVhNRTogREVMRVRFIERFQ09SQVRJT05TIElOIFRIRSBJTlZP
TFZFRCBDSFVOS1MgSUYgQU5ZISBTWU5DIFRIRSBHVVRURVIgQUxTTy4KIAogICAgICAgICAvLyBG
SVhNRTogREVMRVRFIE1BUktFRCBBTkQgSElHSExJR0hURUQgTElORVMgKElOVkFMSURBVEUgU0VB
UkNIIFJFU1VMVFMpISB0aGlzLl9tYXJrZWRSYW5nZUVsZW1lbnQKQEAgLTEwNzMsOSArMTE0MCw4
IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgICAgIHZhciBjaHVuayA9IHRoaXMuX3RleHRDaHVua3NbZmlyc3RDaHVua051bWJlciAtIDFd
OwogICAgICAgICAgICAgZmlyc3RMaW5lUm93ID0gY2h1bmsuZXhwYW5kZWQgPyBjaHVuay5nZXRF
eHBhbmRlZExpbmVSb3coY2h1bmsuc3RhcnRMaW5lICsgY2h1bmsubGluZXNDb3VudCAtIDEpIDog
Y2h1bmsuZWxlbWVudDsKICAgICAgICAgICAgIGZpcnN0TGluZVJvdyA9IGZpcnN0TGluZVJvdy5u
ZXh0U2libGluZzsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICBmaXJzdExpbmVSb3cgPSB0aGlzLmVsZW1lbnQuZmlyc3RDaGlsZDsKLSAgICAgICAgfQogCiAg
ICAgICAgIHZhciBsaW5lcyA9IFtdOwogICAgICAgICBmb3IgKHZhciBsaW5lUm93ID0gZmlyc3RM
aW5lUm93OyBsaW5lUm93OyBsaW5lUm93ID0gbGluZVJvdy5uZXh0U2libGluZykgewpAQCAtMTEw
OCwxOCArMTE3NCwxMzMgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90
eXBlID0gewogICAgICAgICBsaW5lcyA9IGxpbmVzLnNsaWNlKHN0YXJ0T2Zmc2V0LCBlbmRPZmZz
ZXQpOwogCiAgICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLl9nZXRTZWxlY3Rpb24oKTsKLSAg
ICAgICAgdGhpcy5iZWdpblVwZGF0ZXMoKTsKIAogICAgICAgICBpZiAobGluZXMubGVuZ3RoID09
PSAwICYmIGVuZExpbmUgPCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCkgewotICAgICAgICAg
ICAgdmFyIHJhbmdlID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0UmFuZ2Uoc3RhcnRMaW5lLCAwLCBl
bmRMaW5lLCAwKTsKLSAgICAgICAgICAgIHZhciBuZXdSYW5nZSA9IHRoaXMuX3RleHRNb2RlbC5z
ZXRUZXh0KHJhbmdlLCAnJyk7CisgICAgICAgICAgICB2YXIgb2xkUmFuZ2UgPSBuZXcgV2ViSW5z
cGVjdG9yLlRleHRSYW5nZShzdGFydExpbmUsIDAsIGVuZExpbmUsIDApOworICAgICAgICAgICAg
dmFyIG5ld1JhbmdlID0gdGhpcy5fdGV4dE1vZGVsLnNldFRleHQob2xkUmFuZ2UsICIiKTsKICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHZhciByYW5nZSA9IG5ldyBXZWJJbnNwZWN0b3Iu
VGV4dFJhbmdlKHN0YXJ0TGluZSwgMCwgZW5kTGluZSAtIDEsIHRoaXMuX3RleHRNb2RlbC5saW5l
TGVuZ3RoKGVuZExpbmUgLSAxKSk7Ci0gICAgICAgICAgICB2YXIgbmV3UmFuZ2UgPSB0aGlzLl90
ZXh0TW9kZWwuc2V0VGV4dChyYW5nZSwgbGluZXMuam9pbigiXG4iKSk7CisgICAgICAgICAgICB2
YXIgb2xkUmFuZ2UgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRSYW5nZShzdGFydExpbmUsIDAsIGVu
ZExpbmUgLSAxLCB0aGlzLl90ZXh0TW9kZWwubGluZUxlbmd0aChlbmRMaW5lIC0gMSkpOworICAg
ICAgICAgICAgdmFyIG5ld1JhbmdlID0gdGhpcy5fdGV4dE1vZGVsLnNldFRleHQob2xkUmFuZ2Us
IGxpbmVzLmpvaW4oIlxuIikpOwogICAgICAgICB9CiAKLSAgICAgICAgdGhpcy5lbmRVcGRhdGVz
KCk7CisgICAgICAgIHRoaXMuYmVnaW5Eb21VcGRhdGVzKCk7CisgICAgICAgIHRoaXMuX3VwZGF0
ZUNodW5rc0ZvclJhbmdlcyhvbGRSYW5nZSwgbmV3UmFuZ2UsIGZpcnN0Q2h1bmtOdW1iZXIsIGZp
cnN0TGluZVJvdywgZW5kTGluZSk7CisgICAgICAgIHRoaXMuX3VwZGF0ZUhpZ2hsaWdodHNGb3JS
YW5nZShuZXdSYW5nZSk7CisgICAgICAgIHRoaXMuX3BhaW50U2tpcHBlZExpbmVzKCk7CisgICAg
ICAgIHRoaXMuZW5kRG9tVXBkYXRlcygpOworCiAgICAgICAgIHRoaXMuX3Jlc3RvcmVTZWxlY3Rp
b24oc2VsZWN0aW9uKTsKKworICAgICAgICB0aGlzLl9leGl0VGV4dENoYW5nZU1vZGUob2xkUmFu
Z2UsIG5ld1JhbmdlKTsKKyAgICB9LAorCisgICAgX3VwZGF0ZUNodW5rc0ZvclJhbmdlczogZnVu
Y3Rpb24ob2xkUmFuZ2UsIG5ld1JhbmdlLCBmaXJzdENodW5rTnVtYmVyLCBmaXJzdExpbmVSb3cs
IGZpcnN0VW5tb2RpZmllZExpbmUpCisgICAgeworICAgICAgICAvLyBVcGRhdGUgdGhlIGNodW5r
cyBpbiByYW5nZTogZmlyc3RDaHVua051bWJlciA8PSBpbmRleCA8PSBsYXN0Q2h1bmtOdW1iZXIK
KyAgICAgICAgdmFyIGxhc3RDaHVua051bWJlciA9IGZpcnN0Q2h1bmtOdW1iZXI7CisgICAgICAg
IHdoaWxlIChsYXN0Q2h1bmtOdW1iZXIgKyAxIDwgdGhpcy5fdGV4dENodW5rcy5sZW5ndGgpIHsK
KyAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0Q2h1bmtzW2xhc3RDaHVua051bWJlciArIDFdLnN0
YXJ0TGluZSA+PSBmaXJzdFVubW9kaWZpZWRMaW5lKQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgKytsYXN0Q2h1bmtOdW1iZXI7CisgICAgICAgIH0KKworICAgICAgICB2YXIg
c3RhcnRMaW5lID0gdGhpcy5fdGV4dENodW5rc1tmaXJzdENodW5rTnVtYmVyXS5zdGFydExpbmU7
CisgICAgICAgIHZhciBsaW5lc0NvdW50ID0gdGhpcy5fdGV4dENodW5rc1tsYXN0Q2h1bmtOdW1i
ZXJdLnN0YXJ0TGluZSArIHRoaXMuX3RleHRDaHVua3NbbGFzdENodW5rTnVtYmVyXS5saW5lc0Nv
dW50IC0gc3RhcnRMaW5lOworICAgICAgICB2YXIgbGluZXNEaWZmID0gbmV3UmFuZ2UubGluZXND
b3VudCAtIG9sZFJhbmdlLmxpbmVzQ291bnQ7CisgICAgICAgIGxpbmVzQ291bnQgKz0gbGluZXNE
aWZmOworCisgICAgICAgIGlmIChsaW5lc0RpZmYpIHsKKyAgICAgICAgICAgIC8vIExpbmVzIHNo
aWZ0ZWQsIHVwZGF0ZSB0aGUgbGluZSBudW1iZXJzIG9mIHRoZSBjaHVua3MgYmVsb3cuCisgICAg
ICAgICAgICBmb3IgKHZhciBjaHVua051bWJlciA9IGxhc3RDaHVua051bWJlciArIDE7IGNodW5r
TnVtYmVyIDwgdGhpcy5fdGV4dENodW5rcy5sZW5ndGg7ICsrY2h1bmtOdW1iZXIpCisgICAgICAg
ICAgICAgICAgdGhpcy5fdGV4dENodW5rc1tjaHVua051bWJlcl0uc3RhcnRMaW5lICs9IGxpbmVz
RGlmZjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE1vc3QgZnJlcXVlbnQgY2FzZTogYSBjaHVu
ayByZW1haW5lZCB0aGUgc2FtZS4KKyAgICAgICAgZm9yICh2YXIgY2h1bmtOdW1iZXIgPSBmaXJz
dENodW5rTnVtYmVyOyBjaHVua051bWJlciA8PSBsYXN0Q2h1bmtOdW1iZXI7ICsrY2h1bmtOdW1i
ZXIpIHsKKyAgICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX3RleHRDaHVua3NbY2h1bmtOdW1i
ZXJdOworICAgICAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBjaHVuay5zdGFydExpbmU7CisgICAg
ICAgICAgICBmb3IgKHZhciBsaW5lUm93ID0gZmlyc3RMaW5lUm93OyBsaW5lUm93ICYmIGxpbmVO
dW1iZXIgPCBjaHVuay5zdGFydExpbmUgKyBjaHVuay5saW5lc0NvdW50OyBsaW5lUm93ID0gbGlu
ZVJvdy5uZXh0U2libGluZykgeworICAgICAgICAgICAgICAgIGlmIChsaW5lUm93LmxpbmVOdW1i
ZXIgIT09IGxpbmVOdW1iZXIgfHwgbGluZVJvdyAhPT0gY2h1bmsuZ2V0RXhwYW5kZWRMaW5lUm93
KGxpbmVOdW1iZXIpIHx8IGxpbmVSb3cudGV4dENvbnRlbnQgIT09IHRoaXMuX3RleHRNb2RlbC5s
aW5lKGxpbmVOdW1iZXIpIHx8ICFsaW5lUm93LmZpcnN0Q2hpbGQpCisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICsrbGluZU51bWJlcjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChsaW5lTnVtYmVyIDwgY2h1bmsuc3RhcnRMaW5lICsgY2h1bmsubGlu
ZXNDb3VudCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNodW5rLnVwZGF0
ZUNvbGxhcHNlZExpbmVSb3coKTsKKyAgICAgICAgICAgICsrZmlyc3RDaHVua051bWJlcjsKKyAg
ICAgICAgICAgIGZpcnN0TGluZVJvdyA9IGxpbmVSb3c7CisgICAgICAgICAgICBzdGFydExpbmUg
Kz0gY2h1bmsubGluZXNDb3VudDsKKyAgICAgICAgICAgIGxpbmVzQ291bnQgLT0gY2h1bmsubGlu
ZXNDb3VudDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmaXJzdENodW5rTnVtYmVyID4gbGFz
dENodW5rTnVtYmVyICYmIGxpbmVzQ291bnQgPT09IDApCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgLy8gTWF5YmUgbWVyZ2Ugd2l0aCB0aGUgbmV4dCBjaHVuaywgc28gdGhhdCB3ZSBz
aG91bGQgbm90IGNyZWF0ZSAxLXNpemVkIGNodW5rcyB3aGVuIGFwcGVuZGluZyBuZXcgbGluZXMg
b25lIGJ5IG9uZS4KKyAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fdGV4dENodW5rc1tsYXN0Q2h1
bmtOdW1iZXIgKyAxXTsKKyAgICAgICAgdmFyIGxpbmVzSW5MYXN0Q2h1bmsgPSBsaW5lc0NvdW50
ICUgdGhpcy5fZGVmYXVsdENodW5rU2l6ZTsKKyAgICAgICAgaWYgKGNodW5rICYmIGxpbmVzSW5M
YXN0Q2h1bmsgPiAwICYmIGxpbmVzSW5MYXN0Q2h1bmsgKyBjaHVuay5saW5lc0NvdW50IDw9IHRo
aXMuX2RlZmF1bHRDaHVua1NpemUpIHsKKyAgICAgICAgICAgICsrbGFzdENodW5rTnVtYmVyOwor
ICAgICAgICAgICAgbGluZXNDb3VudCArPSBjaHVuay5saW5lc0NvdW50OworICAgICAgICB9CisK
KyAgICAgICAgdmFyIHNjcm9sbFRvcCA9IHRoaXMuZWxlbWVudC5zY3JvbGxUb3A7CisgICAgICAg
IHZhciBzY3JvbGxMZWZ0ID0gdGhpcy5lbGVtZW50LnNjcm9sbExlZnQ7CisKKyAgICAgICAgLy8g
RGVsZXRlIGFsbCBET00gZWxlbWVudHMgdGhhdCB3ZXJlIGVpdGhlciBjb250cm9sbGVkIGJ5IHRo
ZSBvbGQgY2h1bmtzLCBvciBoYXZlIGp1c3QgYmVlbiBpbnNlcnRlZC4KKyAgICAgICAgd2hpbGUg
KGZpcnN0TGluZVJvdyAmJiAodHlwZW9mIGZpcnN0TGluZVJvdy5saW5lTnVtYmVyICE9PSAibnVt
YmVyIiB8fCBmaXJzdExpbmVSb3cubGluZU51bWJlciA8IHN0YXJ0TGluZSArIGxpbmVzQ291bnQp
KSB7CisgICAgICAgICAgICB2YXIgbGluZVJvdyA9IGZpcnN0TGluZVJvdzsKKyAgICAgICAgICAg
IGZpcnN0TGluZVJvdyA9IGZpcnN0TGluZVJvdy5uZXh0U2libGluZzsKKyAgICAgICAgICAgIHRo
aXMuZWxlbWVudC5yZW1vdmVDaGlsZChsaW5lUm93KTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IFJlcGxhY2Ugb2xkIGNodW5rcyB3aXRoIHRoZSBuZXcgb25lcy4KKyAgICAgICAgZm9yICh2YXIg
Y2h1bmtOdW1iZXIgPSBmaXJzdENodW5rTnVtYmVyOyBsaW5lc0NvdW50ID4gMDsgKytjaHVua051
bWJlcikgeworICAgICAgICAgICAgdmFyIGNodW5rTGluZXNDb3VudCA9IE1hdGgubWluKHRoaXMu
X2RlZmF1bHRDaHVua1NpemUsIGxpbmVzQ291bnQpOworICAgICAgICAgICAgdmFyIG5ld0NodW5r
ID0gdGhpcy5fY3JlYXRlTmV3Q2h1bmsoc3RhcnRMaW5lLCBzdGFydExpbmUgKyBjaHVua0xpbmVz
Q291bnQpOworICAgICAgICAgICAgdGhpcy5lbGVtZW50Lmluc2VydEJlZm9yZShuZXdDaHVuay5l
bGVtZW50LCBmaXJzdExpbmVSb3cpOworCisgICAgICAgICAgICBpZiAoY2h1bmtOdW1iZXIgPD0g
bGFzdENodW5rTnVtYmVyKQorICAgICAgICAgICAgICAgIHRoaXMuX3RleHRDaHVua3NbY2h1bmtO
dW1iZXJdID0gbmV3Q2h1bms7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGhp
cy5fdGV4dENodW5rcy5zcGxpY2UoY2h1bmtOdW1iZXIsIDAsIG5ld0NodW5rKTsKKyAgICAgICAg
ICAgIHN0YXJ0TGluZSArPSBjaHVua0xpbmVzQ291bnQ7CisgICAgICAgICAgICBsaW5lc0NvdW50
IC09IGNodW5rTGluZXNDb3VudDsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2h1bmtOdW1iZXIg
PD0gbGFzdENodW5rTnVtYmVyKQorICAgICAgICAgICAgdGhpcy5fdGV4dENodW5rcy5zcGxpY2Uo
Y2h1bmtOdW1iZXIsIGxhc3RDaHVua051bWJlciAtIGNodW5rTnVtYmVyICsgMSk7CisKKyAgICAg
ICAgdGhpcy5lbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFRvcDsKKyAgICAgICAgdGhpcy5lbGVt
ZW50LnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0OworICAgIH0sCisKKyAgICBfdXBkYXRlSGlnaGxp
Z2h0c0ZvclJhbmdlOiBmdW5jdGlvbihyYW5nZSkKKyAgICB7CisgICAgICAgIHZhciB2aXNpYmxl
RnJvbSA9IHRoaXMuZWxlbWVudC5zY3JvbGxUb3A7CisgICAgICAgIHZhciB2aXNpYmxlVG8gPSB0
aGlzLmVsZW1lbnQuc2Nyb2xsVG9wICsgdGhpcy5lbGVtZW50LmNsaWVudEhlaWdodDsKKworICAg
ICAgICB2YXIgb2Zmc2V0ID0gMDsKKyAgICAgICAgdmFyIGxhc3RWaXNpYmxlTGluZSA9IDA7Cisg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGV4dENodW5rcy5sZW5ndGg7ICsraSkg
eworICAgICAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fdGV4dENodW5rc1tpXTsKKyAgICAgICAg
ICAgIHZhciBjaHVua0hlaWdodCA9IGNodW5rLmhlaWdodDsKKyAgICAgICAgICAgIGlmIChvZmZz
ZXQgKyBjaHVua0hlaWdodCA+IHZpc2libGVGcm9tICYmIG9mZnNldCA8IHZpc2libGVUbykKKyAg
ICAgICAgICAgICAgICBsYXN0VmlzaWJsZUxpbmUgPSBjaHVuay5zdGFydExpbmUgKyBjaHVuay5s
aW5lc0NvdW50OworICAgICAgICAgICAgZWxzZSBpZiAob2Zmc2V0ID49IHZpc2libGVUbykKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIG9mZnNldCArPSBjaHVua0hlaWdodDsK
KyAgICAgICAgfQorCisgICAgICAgIGxhc3RWaXNpYmxlTGluZSA9IE1hdGgubWF4KGxhc3RWaXNp
YmxlTGluZSwgcmFuZ2UuZW5kTGluZSk7CisKKyAgICAgICAgdmFyIHVwZGF0ZWQgPSB0aGlzLl9o
aWdobGlnaHRlci51cGRhdGVIaWdobGlnaHQocmFuZ2Uuc3RhcnRMaW5lLCBsYXN0VmlzaWJsZUxp
bmUpOworICAgICAgICBpZiAoIXVwZGF0ZWQpIHsKKyAgICAgICAgICAgIC8vIEhpZ2hsaWdodHMg
Zm9yIHRoZSBjaHVua3MgYmVsb3cgYXJlIGludmFsaWQsIHNvIGp1c3QgY29sbGFwc2UgdGhlbS4K
KyAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9jaHVua051bWJlckZvckxpbmUocmFuZ2Uu
c3RhcnRMaW5lKTsgaSA8IHRoaXMuX3RleHRDaHVua3MubGVuZ3RoOyArK2kpCisgICAgICAgICAg
ICAgICAgdGhpcy5fdGV4dENodW5rc1tpXS5leHBhbmRlZCA9IGZhbHNlOworICAgICAgICB9CisK
KyAgICAgICAgdGhpcy5fcmVwYWludEFsbCgpOwogICAgIH0sCiAKICAgICBfY29sbGVjdExpbmVz
RnJvbURpdjogZnVuY3Rpb24obGluZXMsIGVsZW1lbnQpCkBAIC0xMTM0LDkgKzEzMTUsOSBAQCBX
ZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAg
ICBub2RlID0gbm9kZS50cmF2ZXJzZU5leHROb2RlKGVsZW1lbnQpOwogICAgICAgICB9CiAKLSAg
ICAgICAgdmFyIHRleHRDb250ZW50ID0gdGV4dENvbnRlbnRzLmpvaW4oJycpOworICAgICAgICB2
YXIgdGV4dENvbnRlbnQgPSB0ZXh0Q29udGVudHMuam9pbigiIik7CiAgICAgICAgIC8vIFRoZSBs
YXN0IFxuIChpZiBhbnkpIGRvZXMgbm90ICJjb3VudCIgaW4gYSBESVYuCi0gICAgICAgIHRleHRD
b250ZW50ID0gdGV4dENvbnRlbnQucmVwbGFjZSgvXG4kLywgJycpOworICAgICAgICB0ZXh0Q29u
dGVudCA9IHRleHRDb250ZW50LnJlcGxhY2UoL1xuJC8sICIiKTsKIAogICAgICAgICB0ZXh0Q29u
dGVudHMgPSB0ZXh0Q29udGVudC5zcGxpdCgiXG4iKTsKICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCB0ZXh0Q29udGVudHMubGVuZ3RoOyArK2kpCkBAIC0xMTU1LDIyICsxMzM2LDEzIEBAIFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rID0gZnVuY3Rpb24odGV4dFZpZXdlciwgc3Rh
cnRMaW5lLCBlbmRMaW5lKQogICAgIHRoaXMuZWxlbWVudC5saW5lTnVtYmVyID0gc3RhcnRMaW5l
OwogICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSAid2Via2l0LWxpbmUtY29udGVudCI7CiAK
LSAgICB0aGlzLnN0YXJ0TGluZSA9IHN0YXJ0TGluZTsKKyAgICB0aGlzLl9zdGFydExpbmUgPSBz
dGFydExpbmU7CiAgICAgZW5kTGluZSA9IE1hdGgubWluKHRoaXMuX3RleHRNb2RlbC5saW5lc0Nv
dW50LCBlbmRMaW5lKTsKICAgICB0aGlzLmxpbmVzQ291bnQgPSBlbmRMaW5lIC0gc3RhcnRMaW5l
OwogCiAgICAgdGhpcy5fZXhwYW5kZWQgPSBmYWxzZTsKIAotICAgIHZhciBsaW5lcyA9IFtdOwot
ICAgIGZvciAodmFyIGkgPSBzdGFydExpbmU7IGkgPCBlbmRMaW5lOyArK2kpIHsKLSAgICAgICAg
bGluZXMucHVzaCh0aGlzLl90ZXh0TW9kZWwubGluZShpKSk7Ci0gICAgfQotCi0gICAgdGhpcy5l
bGVtZW50LnRleHRDb250ZW50ID0gbGluZXMuam9pbigiXG4iKTsKLQotICAgIC8vIFRoZSBsYXN0
IGVtcHR5IGxpbmUgd2lsbCBnZXQgc3dhbGxvd2VkIG90aGVyd2lzZS4KLSAgICBpZiAoIWxpbmVz
W2xpbmVzLmxlbmd0aCAtIDFdKQotICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7CisgICAgdGhpcy51cGRhdGVDb2xsYXBzZWRMaW5l
Um93KCk7CiB9CiAKIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rLnByb3RvdHlwZSA9
IHsKQEAgLTEyMDMsNiArMTM3NSwyMSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5DaHVu
ay5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuZW5kRG9tVXBkYXRlcygp
OwogICAgIH0sCiAKKyAgICBnZXQgc3RhcnRMaW5lKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0
aGlzLl9zdGFydExpbmU7CisgICAgfSwKKworICAgIHNldCBzdGFydExpbmUoc3RhcnRMaW5lKQor
ICAgIHsKKyAgICAgICAgdGhpcy5fc3RhcnRMaW5lID0gc3RhcnRMaW5lOworICAgICAgICB0aGlz
LmVsZW1lbnQubGluZU51bWJlciA9IHN0YXJ0TGluZTsKKyAgICAgICAgaWYgKHRoaXMuX2V4cGFu
ZGVkTGluZVJvd3MpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fZXhw
YW5kZWRMaW5lUm93cy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICB0aGlzLl9leHBhbmRl
ZExpbmVSb3dzW2ldLmxpbmVOdW1iZXIgPSBzdGFydExpbmUgKyBpOworICAgICAgICB9CisgICAg
fSwKKwogICAgIGdldCBleHBhbmRlZCgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fZXhw
YW5kZWQ7CkBAIC0xMjc4LDUgKzE0NjUsMjIgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWlu
Q2h1bmsucHJvdG90eXBlID0gewogICAgICAgICBpZiAoIXRoaXMuX2V4cGFuZGVkTGluZVJvd3Mp
CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50OwogICAgICAgICByZXR1cm4gdGhpcy5f
ZXhwYW5kZWRMaW5lUm93c1tsaW5lTnVtYmVyIC0gdGhpcy5zdGFydExpbmVdOworICAgIH0sCisK
KyAgICB1cGRhdGVDb2xsYXBzZWRMaW5lUm93OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBp
ZiAodGhpcy5saW5lc0NvdW50ID09PSAxICYmIHRoaXMuX2V4cGFuZGVkKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIHZhciBsaW5lcyA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0g
dGhpcy5zdGFydExpbmU7IGkgPCB0aGlzLnN0YXJ0TGluZSArIHRoaXMubGluZXNDb3VudDsgKytp
KQorICAgICAgICAgICAgbGluZXMucHVzaCh0aGlzLl90ZXh0TW9kZWwubGluZShpKSk7CisKKyAg
ICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7CisgICAgICAgIHRoaXMuZWxlbWVu
dC50ZXh0Q29udGVudCA9IGxpbmVzLmpvaW4oIlxuIik7CisKKyAgICAgICAgLy8gVGhlIGxhc3Qg
ZW1wdHkgbGluZSB3aWxsIGdldCBzd2FsbG93ZWQgb3RoZXJ3aXNlLgorICAgICAgICBpZiAoIWxp
bmVzW2xpbmVzLmxlbmd0aCAtIDFdKQorICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIikpOwogICAgIH0KIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82937</attachid>
            <date>2011-02-18 02:17:21 -0800</date>
            <delta_ts>2011-02-18 04:57:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54661-20110218131718.patch</filename>
            <type>text/plain</type>
            <size>23872</size>
            <attacher name="Andrey Adaikin">aandrey</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwNTdkYTZhYTRkZDJiY2RmMGUzYTllMzg3NjFiZmQwMTc0Y2I0ZGQ0Li4x
ZTA3ODI4MDkxY2IxZGI1NjI3YjMzOGE1MmYxYzg5ZGZiZTIzMTMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDIgQEAKKzIwMTEtMDItMTggIEFuZHJleSBBZGFpa2luICA8YWFuZHJleUBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdl
YiBJbnNwZWN0b3I6IFtUZXh0IGVkaXRvcl0gT3B0aW1pemUgZWRpdGluZyB1cGRhdGVzIGluIG1h
aW4gcGFuZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU0NjYxCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRWaWV3ZXIuanM6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VGV4dFZpZXdlci5wcm90b3R5cGUuX3RleHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5UZXh0Vmlld2VyLnByb3RvdHlwZS5fZW50ZXJJbnRlcm5hbFRleHRDaGFuZ2VNb2RlKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5fZXhpdEludGVybmFsVGV4
dENoYW5nZU1vZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBl
Ll9zeW5jRGVjb3JhdGlvbnNGb3JMaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRp
dG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZS50ZXh0Q2hhbmdlZCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuX3Njcm9sbCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuY2h1bmtGb3JM
aW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3Rv
dHlwZS5fdG90YWxIZWlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0
ZXJQYW5lbC5wcm90b3R5cGUuX2V4cGFuZENodW5rcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvckd1dHRlckNodW5rKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
R3V0dGVyQ2h1bmsucHJvdG90eXBlLmFkZERlY29yYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JHdXR0ZXJDaHVuay5wcm90b3R5cGUucmVtb3ZlRGVjb3JhdGlvbik6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX2V4cGFuZENodW5rcyk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX2hpZ2hs
aWdodERhdGFSZWFkeSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5l
bC5wcm90b3R5cGUuX21hcmtTa2lwcGVkUGFpbnRMaW5lcyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX3BhaW50U2tpcHBlZExpbmVzKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fcGFpbnRM
aW5lcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5
cGUuX3BhaW50TGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5l
bC5wcm90b3R5cGUuX3Bvc2l0aW9uVG9TZWxlY3Rpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLl9hcHBseURvbVVwZGF0ZXMpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLl91cGRhdGVDaHVu
a3NGb3JSYW5nZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwu
cHJvdG90eXBlLl91cGRhdGVIaWdobGlnaHRzRm9yUmFuZ2UpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLl9jb2xsZWN0TGluZXNGcm9tRGl2KToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rLnByb3RvdHlwZS5nZXQgc3RhcnRMaW5lKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rLnByb3RvdHlwZS5zZXQg
c3RhcnRMaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rLnBy
b3RvdHlwZS5nZXRFeHBhbmRlZExpbmVSb3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRF
ZGl0b3JNYWluQ2h1bmsucHJvdG90eXBlLnVwZGF0ZUNvbGxhcHNlZExpbmVSb3cpOgorCiAyMDEx
LTAyLTE3ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1RleHRWaWV3ZXIuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1RleHRWaWV3ZXIuanMKaW5kZXggMWJkZGJmY2I4N2U0MmFiOGU2NDhhNGI4MmY0
NjdlZjI5ZTk3NDJiOC4uNTBjYTZhNDc2MjRlYzNhZTBiNzlhMzQwMGI1YmUwZmViNmQ3ZGY0OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2Vy
LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFZpZXdlci5q
cwpAQCAtMzcsOSArMzcsMTEgQEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIgPSBmdW5jdGlvbih0
ZXh0TW9kZWwsIHBsYXRmb3JtLCB1cmwpCiAgICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2Iik7CiAgICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJ0ZXh0LWVk
aXRvciBtb25vc3BhY2UiOwogCisgICAgdmFyIGVudGVyVGV4dENoYW5nZU1vZGUgPSB0aGlzLl9l
bnRlckludGVybmFsVGV4dENoYW5nZU1vZGUuYmluZCh0aGlzKTsKKyAgICB2YXIgZXhpdFRleHRD
aGFuZ2VNb2RlID0gdGhpcy5fZXhpdEludGVybmFsVGV4dENoYW5nZU1vZGUuYmluZCh0aGlzKTsK
ICAgICB2YXIgc3luY1Njcm9sbExpc3RlbmVyID0gdGhpcy5fc3luY1Njcm9sbC5iaW5kKHRoaXMp
OwogICAgIHZhciBzeW5jRGVjb3JhdGlvbnNGb3JMaW5lTGlzdGVuZXIgPSB0aGlzLl9zeW5jRGVj
b3JhdGlvbnNGb3JMaW5lLmJpbmQodGhpcyk7Ci0gICAgdGhpcy5fbWFpblBhbmVsID0gbmV3IFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsKHRoaXMuX3RleHRNb2RlbCwgdXJsLCBzeW5j
U2Nyb2xsTGlzdGVuZXIsIHN5bmNEZWNvcmF0aW9uc0ZvckxpbmVMaXN0ZW5lcik7CisgICAgdGhp
cy5fbWFpblBhbmVsID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsKHRoaXMu
X3RleHRNb2RlbCwgdXJsLCBzeW5jU2Nyb2xsTGlzdGVuZXIsIHN5bmNEZWNvcmF0aW9uc0Zvckxp
bmVMaXN0ZW5lciwgZW50ZXJUZXh0Q2hhbmdlTW9kZSwgZXhpdFRleHRDaGFuZ2VNb2RlKTsKICAg
ICB0aGlzLl9ndXR0ZXJQYW5lbCA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlclBh
bmVsKHRoaXMuX3RleHRNb2RlbCwgc3luY0RlY29yYXRpb25zRm9yTGluZUxpc3RlbmVyKTsKICAg
ICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fbWFpblBhbmVsLmVsZW1lbnQpOwogICAg
IHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9ndXR0ZXJQYW5lbC5lbGVtZW50KTsKQEAg
LTE0Niw4ICsxNDgsMjQgQEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlID0gewog
ICAgIC8vIFdlYkluc3BlY3Rvci5UZXh0TW9kZWwgbGlzdGVuZXIKICAgICBfdGV4dENoYW5nZWQ6
IGZ1bmN0aW9uKG9sZFJhbmdlLCBuZXdSYW5nZSwgb2xkVGV4dCwgbmV3VGV4dCkKICAgICB7Ci0g
ICAgICAgIHRoaXMuX21haW5QYW5lbC50ZXh0Q2hhbmdlZCgpOwotICAgICAgICB0aGlzLl9ndXR0
ZXJQYW5lbC50ZXh0Q2hhbmdlZCgpOworICAgICAgICBpZiAoIXRoaXMuX2ludGVybmFsVGV4dENo
YW5nZU1vZGUpIHsKKyAgICAgICAgICAgIHRoaXMuX21haW5QYW5lbC50ZXh0Q2hhbmdlZChvbGRS
YW5nZSwgbmV3UmFuZ2UpOworICAgICAgICAgICAgdGhpcy5fZ3V0dGVyUGFuZWwudGV4dENoYW5n
ZWQob2xkUmFuZ2UsIG5ld1JhbmdlKTsKKyAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVBhbmVsT2Zm
c2V0cygpOworICAgICAgICB9CisgICAgfSwKKworICAgIF9lbnRlckludGVybmFsVGV4dENoYW5n
ZU1vZGU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2ludGVybmFsVGV4dENoYW5n
ZU1vZGUgPSB0cnVlOworICAgIH0sCisKKyAgICBfZXhpdEludGVybmFsVGV4dENoYW5nZU1vZGU6
IGZ1bmN0aW9uKG9sZFJhbmdlLCBuZXdSYW5nZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2ludGVy
bmFsVGV4dENoYW5nZU1vZGUgPSBmYWxzZTsKKworICAgICAgICAvLyBGSVhNRTogVVBEQVRFIEdV
VFRFUiBTTUFSVExZIQorICAgICAgICB0aGlzLl9ndXR0ZXJQYW5lbC50ZXh0Q2hhbmdlZChvbGRS
YW5nZSwgbmV3UmFuZ2UpOwogICAgICAgICB0aGlzLl91cGRhdGVQYW5lbE9mZnNldHMoKTsKICAg
ICB9LAogCkBAIC0xODIsMTMgKzIwMCwxOSBAQCBXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90
b3R5cGUgPSB7CiAgICAgICAgIGlmIChsaW5lTnVtYmVyID49IHRoaXMuX3RleHRNb2RlbC5saW5l
c0NvdW50KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHZhciBtYWluQ2h1bmsgPSB0
aGlzLl9tYWluUGFuZWwubWFrZUxpbmVBQ2h1bmsobGluZU51bWJlcik7Ci0gICAgICAgIHZhciBn
dXR0ZXJDaHVuayA9IHRoaXMuX2d1dHRlclBhbmVsLm1ha2VMaW5lQUNodW5rKGxpbmVOdW1iZXIp
OwotICAgICAgICB2YXIgaGVpZ2h0ID0gbWFpbkNodW5rLmhlaWdodDsKLSAgICAgICAgaWYgKGhl
aWdodCkKLSAgICAgICAgICAgIGd1dHRlckNodW5rLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHko
ImhlaWdodCIsIGhlaWdodCArICJweCIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBndXR0
ZXJDaHVuay5lbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KCJoZWlnaHQiKTsKKyAgICAgICAg
dmFyIG1haW5DaHVuayA9IHRoaXMuX21haW5QYW5lbC5jaHVua0ZvckxpbmUobGluZU51bWJlcik7
CisgICAgICAgIGlmIChtYWluQ2h1bmsubGluZXNDb3VudCA9PT0gMSkgeworICAgICAgICAgICAg
dmFyIGd1dHRlckNodW5rID0gdGhpcy5fZ3V0dGVyUGFuZWwubWFrZUxpbmVBQ2h1bmsobGluZU51
bWJlcik7CisgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gbWFpbkNodW5rLmhlaWdodDsKKyAgICAg
ICAgICAgIGlmIChoZWlnaHQpCisgICAgICAgICAgICAgICAgZ3V0dGVyQ2h1bmsuZWxlbWVudC5z
dHlsZS5zZXRQcm9wZXJ0eSgiaGVpZ2h0IiwgaGVpZ2h0ICsgInB4Iik7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgZ3V0dGVyQ2h1bmsuZWxlbWVudC5zdHlsZS5yZW1vdmVQcm9w
ZXJ0eSgiaGVpZ2h0Iik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgZ3V0dGVy
Q2h1bmsgPSB0aGlzLl9ndXR0ZXJQYW5lbC5jaHVua0ZvckxpbmUobGluZU51bWJlcik7CisgICAg
ICAgICAgICBpZiAoZ3V0dGVyQ2h1bmsubGluZXNDb3VudCA9PT0gMSkKKyAgICAgICAgICAgICAg
ICBndXR0ZXJDaHVuay5lbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KCJoZWlnaHQiKTsKKyAg
ICAgICAgfQogICAgIH0KIH0KIApAQCAtMjI4LDcgKzI1Miw3IEBAIFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgY2h1bmsucmVtb3ZlRGVj
b3JhdGlvbihkZWNvcmF0aW9uKTsKICAgICB9LAogCi0gICAgdGV4dENoYW5nZWQ6IGZ1bmN0aW9u
KG9sZFJhbmdlLCBuZXdSYW5nZSwgb2xkVGV4dCwgbmV3VGV4dCkKKyAgICB0ZXh0Q2hhbmdlZDog
ZnVuY3Rpb24ob2xkUmFuZ2UsIG5ld1JhbmdlKQogICAgIHsKICAgICAgICAgdGhpcy5fYnVpbGRD
aHVua3MoKTsKICAgICB9LApAQCAtMzA2LDYgKzMzMCwxMCBAQCBXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUgPSB7CiAKICAgICBfc2Nyb2xsOiBmdW5jdGlvbigp
CiAgICAgeworICAgICAgICAvLyBGSVhNRTogUmVwbGFjZSB0aGUgIjIiIHdpdGggdGhlIHBhZGRp
bmctbGVmdCB2YWx1ZSBmcm9tIENTUy4KKyAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5zY3JvbGxM
ZWZ0IDw9IDIpCisgICAgICAgICAgICB0aGlzLmVsZW1lbnQuc2Nyb2xsTGVmdCA9IDA7CisKICAg
ICAgICAgdGhpcy5fc2NoZWR1bGVSZXBhaW50QWxsKCk7CiAgICAgICAgIGlmICh0aGlzLl9zeW5j
U2Nyb2xsTGlzdGVuZXIpCiAgICAgICAgICAgICB0aGlzLl9zeW5jU2Nyb2xsTGlzdGVuZXIoKTsK
QEAgLTM1MCw3ICszNzgsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5w
cm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aCAtIDE7
CiAgICAgfSwKIAotICAgIF9jaHVua0ZvckxpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAg
Y2h1bmtGb3JMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQogICAgIHsKICAgICAgICAgcmV0dXJu
IHRoaXMuX3RleHRDaHVua3NbdGhpcy5fY2h1bmtOdW1iZXJGb3JMaW5lKGxpbmVOdW1iZXIpXTsK
ICAgICB9LApAQCAtMzk0LDkgKzQyMiwxNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5r
ZWRQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGxhc3RFbGVtZW50ID0gKGxhc3RFbGVtZW50
IHx8IGZpcnN0RWxlbWVudCkubmV4dEVsZW1lbnRTaWJsaW5nOwogICAgICAgICBpZiAobGFzdEVs
ZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gbGFzdEVsZW1lbnQub2Zmc2V0VG9wIC0gZmlyc3RF
bGVtZW50Lm9mZnNldFRvcDsKLSAgICAgICAgZWxzZSBpZiAoZmlyc3RFbGVtZW50Lm9mZnNldFBh
cmVudCkKLSAgICAgICAgICAgIHJldHVybiBmaXJzdEVsZW1lbnQub2Zmc2V0UGFyZW50LnNjcm9s
bEhlaWdodCAtIGZpcnN0RWxlbWVudC5vZmZzZXRUb3A7Ci0gICAgICAgIHJldHVybiBmaXJzdEVs
ZW1lbnQub2Zmc2V0SGVpZ2h0OworCisgICAgICAgIHZhciBvZmZzZXRQYXJlbnQgPSBmaXJzdEVs
ZW1lbnQub2Zmc2V0UGFyZW50OworICAgICAgICBpZiAob2Zmc2V0UGFyZW50ICYmIG9mZnNldFBh
cmVudC5zY3JvbGxIZWlnaHQgPiBvZmZzZXRQYXJlbnQuY2xpZW50SGVpZ2h0KQorICAgICAgICAg
ICAgcmV0dXJuIG9mZnNldFBhcmVudC5zY3JvbGxIZWlnaHQgLSBmaXJzdEVsZW1lbnQub2Zmc2V0
VG9wOworCisgICAgICAgIHZhciB0b3RhbCA9IDA7CisgICAgICAgIHdoaWxlIChmaXJzdEVsZW1l
bnQgJiYgZmlyc3RFbGVtZW50ICE9PSBsYXN0RWxlbWVudCkgeworICAgICAgICAgICAgdG90YWwg
Kz0gZmlyc3RFbGVtZW50Lm9mZnNldEhlaWdodDsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudCA9
IGZpcnN0RWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmc7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRvdGFsOwogICAgIH0sCiAgICAgCiAgICAgcmVzaXplOiBmdW5jdGlvbigpCkBAIC00MzMs
OSArNDY5LDggQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJQYW5lbC5wcm90b3R5cGUg
PSB7CiAKICAgICBfZXhwYW5kQ2h1bmtzOiBmdW5jdGlvbihmcm9tSW5kZXgsIHRvSW5kZXgpCiAg
ICAgewotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RleHRDaHVua3MubGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90ZXh0Q2h1bmtzLmxl
bmd0aDsgKytpKQogICAgICAgICAgICAgdGhpcy5fdGV4dENodW5rc1tpXS5leHBhbmRlZCA9IChm
cm9tSW5kZXggPD0gaSAmJiBpIDwgdG9JbmRleCk7Ci0gICAgICAgIH0KICAgICB9CiB9CiAKQEAg
LTQ2OCw5ICs1MDMsOCBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlckNodW5rID0gZnVu
Y3Rpb24odGV4dFZpZXdlciwgc3RhcnRMaW5lLCBlbmRMaW5lKQogICAgICAgICB0aGlzLmVsZW1l
bnQuYXBwZW5kQ2hpbGQob3V0ZXJTcGFuKTsKICAgICB9IGVsc2UgewogICAgICAgICB2YXIgbGlu
ZU51bWJlcnMgPSBbXTsKLSAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0TGluZTsgaSA8IGVuZExp
bmU7ICsraSkgeworICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRMaW5lOyBpIDwgZW5kTGluZTsg
KytpKQogICAgICAgICAgICAgbGluZU51bWJlcnMucHVzaChpICsgMSk7Ci0gICAgICAgIH0KICAg
ICAgICAgdGhpcy5lbGVtZW50LnRleHRDb250ZW50ID0gbGluZU51bWJlcnMuam9pbigiXG4iKTsK
ICAgICB9CiB9CkBAIC00NzgsMTYgKzUxMiwxNCBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1
dHRlckNodW5rID0gZnVuY3Rpb24odGV4dFZpZXdlciwgc3RhcnRMaW5lLCBlbmRMaW5lKQogV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJDaHVuay5wcm90b3R5cGUgPSB7CiAgICAgYWRkRGVj
b3JhdGlvbjogZnVuY3Rpb24oZGVjb3JhdGlvbikKICAgICB7Ci0gICAgICAgIGlmICh0eXBlb2Yg
ZGVjb3JhdGlvbiA9PT0gInN0cmluZyIpIHsKKyAgICAgICAgaWYgKHR5cGVvZiBkZWNvcmF0aW9u
ID09PSAic3RyaW5nIikKICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKGRl
Y29yYXRpb24pOwotICAgICAgICB9CiAgICAgfSwKIAogICAgIHJlbW92ZURlY29yYXRpb246IGZ1
bmN0aW9uKGRlY29yYXRpb24pCiAgICAgewotICAgICAgICBpZiAodHlwZW9mIGRlY29yYXRpb24g
PT09ICJzdHJpbmciKSB7CisgICAgICAgIGlmICh0eXBlb2YgZGVjb3JhdGlvbiA9PT0gInN0cmlu
ZyIpCiAgICAgICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcyhkZWNvcmF0aW9u
KTsKLSAgICAgICAgfQogICAgIH0sCiAKICAgICBnZXQgZXhwYW5kZWQoKQpAQCAtNTU2LDEyICs1
ODgsMTQgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJDaHVuay5wcm90b3R5cGUgPSB7
CiAgICAgfQogfQogCi1XZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbCA9IGZ1bmN0aW9u
KHRleHRNb2RlbCwgdXJsLCBzeW5jU2Nyb2xsTGlzdGVuZXIsIHN5bmNEZWNvcmF0aW9uc0Zvckxp
bmVMaXN0ZW5lcikKK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsID0gZnVuY3Rpb24o
dGV4dE1vZGVsLCB1cmwsIHN5bmNTY3JvbGxMaXN0ZW5lciwgc3luY0RlY29yYXRpb25zRm9yTGlu
ZUxpc3RlbmVyLCBlbnRlclRleHRDaGFuZ2VNb2RlLCBleGl0VGV4dENoYW5nZU1vZGUpCiB7CiAg
ICAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwuY2FsbCh0aGlzLCB0ZXh0TW9k
ZWwpOwogCiAgICAgdGhpcy5fc3luY1Njcm9sbExpc3RlbmVyID0gc3luY1Njcm9sbExpc3RlbmVy
OwogICAgIHRoaXMuX3N5bmNEZWNvcmF0aW9uc0ZvckxpbmVMaXN0ZW5lciA9IHN5bmNEZWNvcmF0
aW9uc0ZvckxpbmVMaXN0ZW5lcjsKKyAgICB0aGlzLl9lbnRlclRleHRDaGFuZ2VNb2RlID0gZW50
ZXJUZXh0Q2hhbmdlTW9kZTsKKyAgICB0aGlzLl9leGl0VGV4dENoYW5nZU1vZGUgPSBleGl0VGV4
dENoYW5nZU1vZGU7CiAKICAgICB0aGlzLl91cmwgPSB1cmw7CiAgICAgdGhpcy5faGlnaGxpZ2h0
ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JIaWdobGlnaHRlcih0ZXh0TW9kZWwsIHRo
aXMuX2hpZ2hsaWdodERhdGFSZWFkeS5iaW5kKHRoaXMpKTsKQEAgLTcyMywyNyArNzU3LDU5IEBA
IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAg
dGhpcy5faGlnaGxpZ2h0ZXIuaGlnaGxpZ2h0KGxhc3RWaXNpYmxlTGluZSk7CiAgICAgICAgIGRl
bGV0ZSB0aGlzLl9tdXRlSGlnaGxpZ2h0TGlzdGVuZXI7CiAKLSAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgdGhpcy5fdGV4dENodW5rcy5sZW5ndGg7ICsraSkKICAgICAgICAgICAgIHRo
aXMuX3RleHRDaHVua3NbaV0uZXhwYW5kZWQgPSAoZnJvbUluZGV4IDw9IGkgJiYgaSA8IHRvSW5k
ZXgpOwotICAgICAgICB9CiAKICAgICAgICAgdGhpcy5fcmVzdG9yZVNlbGVjdGlvbihzZWxlY3Rp
b24pOwogICAgIH0sCiAKICAgICBfaGlnaGxpZ2h0RGF0YVJlYWR5OiBmdW5jdGlvbihmcm9tTGlu
ZSwgdG9MaW5lKQogICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX211dGVIaWdobGlnaHRMaXN0ZW5l
ciB8fCB0aGlzLl9kaXJ0eUxpbmVzKQorICAgICAgICBpZiAodGhpcy5fbXV0ZUhpZ2hsaWdodExp
c3RlbmVyKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB0aGlzLl9wYWludExpbmVzKGZy
b21MaW5lLCB0b0xpbmUsIHRydWUgLypyZXN0b3JlU2VsZWN0aW9uKi8pOwogICAgIH0sCiAKKyAg
ICBfbWFya1NraXBwZWRQYWludExpbmVzOiBmdW5jdGlvbihzdGFydExpbmUsIGVuZExpbmUpCisg
ICAgeworICAgICAgICBpZiAoIXRoaXMuX3NraXBwZWRQYWludExpbmVzKQorICAgICAgICAgICAg
dGhpcy5fc2tpcHBlZFBhaW50TGluZXMgPSBbIHsgc3RhcnRMaW5lOiBzdGFydExpbmUsIGVuZExp
bmU6IGVuZExpbmUgfSBdOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgdGhpcy5fc2tpcHBlZFBhaW50TGluZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl9za2lwcGVkUGFpbnRMaW5lc1tpXTsKKyAgICAgICAg
ICAgICAgICBpZiAoY2h1bmsuc3RhcnRMaW5lIDw9IGVuZExpbmUgJiYgY2h1bmsuZW5kTGluZSA+
PSBzdGFydExpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2h1bmsuc3RhcnRMaW5lID0gTWF0
aC5taW4oY2h1bmsuc3RhcnRMaW5lLCBzdGFydExpbmUpOworICAgICAgICAgICAgICAgICAgICBj
aHVuay5lbmRMaW5lID0gTWF0aC5tYXgoY2h1bmsuZW5kTGluZSwgZW5kTGluZSk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB0aGlzLl9za2lwcGVkUGFpbnRMaW5lcy5wdXNoKHsgc3RhcnRMaW5lOiBzdGFy
dExpbmUsIGVuZExpbmU6IGVuZExpbmUgfSk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgX3Bh
aW50U2tpcHBlZExpbmVzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX3Nr
aXBwZWRQYWludExpbmVzIHx8IHRoaXMuX2RpcnR5TGluZXMpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2tpcHBlZFBhaW50TGluZXMubGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX3NraXBwZWRQYWludExp
bmVzW2ldOworICAgICAgICAgICAgdGhpcy5fcGFpbnRMaW5lcyhjaHVuay5zdGFydExpbmUsIGNo
dW5rLmVuZExpbmUpOworICAgICAgICB9CisgICAgICAgIGRlbGV0ZSB0aGlzLl9za2lwcGVkUGFp
bnRMaW5lczsKKyAgICB9LAorCiAgICAgX3BhaW50TGluZXM6IGZ1bmN0aW9uKGZyb21MaW5lLCB0
b0xpbmUsIHJlc3RvcmVTZWxlY3Rpb24pCiAgICAgeworICAgICAgICBpZiAodGhpcy5fZGlydHlM
aW5lcykgeworICAgICAgICAgICAgdGhpcy5fbWFya1NraXBwZWRQYWludExpbmVzKGZyb21MaW5l
LCB0b0xpbmUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgdmFy
IHNlbGVjdGlvbjsKLSAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fY2h1bmtGb3JMaW5lKGZyb21M
aW5lKTsKKyAgICAgICAgdmFyIGNodW5rID0gdGhpcy5jaHVua0ZvckxpbmUoZnJvbUxpbmUpOwog
ICAgICAgICBmb3IgKHZhciBpID0gZnJvbUxpbmU7IGkgPCB0b0xpbmU7ICsraSkgewogICAgICAg
ICAgICAgaWYgKGkgPj0gY2h1bmsuc3RhcnRMaW5lICsgY2h1bmsubGluZXNDb3VudCkKLSAgICAg
ICAgICAgICAgICBjaHVuayA9IHRoaXMuX2NodW5rRm9yTGluZShpKTsKKyAgICAgICAgICAgICAg
ICBjaHVuayA9IHRoaXMuY2h1bmtGb3JMaW5lKGkpOwogICAgICAgICAgICAgdmFyIGxpbmVSb3cg
PSBjaHVuay5nZXRFeHBhbmRlZExpbmVSb3coaSk7CiAgICAgICAgICAgICBpZiAoIWxpbmVSb3cp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC03NTcsNiArODIzLDExIEBAIFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKIAogICAgIF9wYWludExpbmU6
IGZ1bmN0aW9uKGxpbmVSb3csIGxpbmVOdW1iZXIpCiAgICAgeworICAgICAgICBpZiAodGhpcy5f
ZGlydHlMaW5lcykgeworICAgICAgICAgICAgdGhpcy5fbWFya1NraXBwZWRQYWludExpbmVzKGxp
bmVOdW1iZXIsIGxpbmVOdW1iZXIgKyAxKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCiAgICAgICAgIHRoaXMuYmVnaW5Eb21VcGRhdGVzKCk7CiAgICAgICAgIHRyeSB7CiAgICAg
ICAgICAgICB2YXIgaGlnaGxpZ2h0ID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShsaW5l
TnVtYmVyLCAiaGlnaGxpZ2h0Iik7CkBAIC04OTEsNyArOTYyLDcgQEAgV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogCiAgICAgX3Bvc2l0aW9uVG9TZWxlY3Rp
b246IGZ1bmN0aW9uKGxpbmUsIGNvbHVtbikKICAgICB7Ci0gICAgICAgIHZhciBjaHVuayA9IHRo
aXMuX2NodW5rRm9yTGluZShsaW5lKTsKKyAgICAgICAgdmFyIGNodW5rID0gdGhpcy5jaHVua0Zv
ckxpbmUobGluZSk7CiAgICAgICAgIHZhciBsaW5lUm93ID0gY2h1bmsuZ2V0RXhwYW5kZWRMaW5l
Um93KGxpbmUpOwogICAgICAgICBpZiAobGluZVJvdykKICAgICAgICAgICAgIHZhciByYW5nZUJv
dW5kYXJ5ID0gbGluZVJvdy5yYW5nZUJvdW5kYXJ5Rm9yT2Zmc2V0KGNvbHVtbik7CkBAIC05NjMs
MTIgKzEwMzQsNiBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUg
PSB7CiAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuY29tcGxldGVVUkwodGhpcy5fdXJsLCBo
cmVmVmFsdWUpOwogICAgIH0sCiAKLSAgICB0ZXh0Q2hhbmdlZDogZnVuY3Rpb24ob2xkUmFuZ2Us
IG5ld1JhbmdlLCBvbGRUZXh0LCBuZXdUZXh0KQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IFVw
ZGF0ZSBvbmx5IHRoYXQgcGFydCBvZiB0aGUgZWRpdG9yIHRoYXQgaGFzIGp1c3QgYmVlbiBjaGFu
Z2VkLgotICAgICAgICB0aGlzLl9idWlsZENodW5rcygpOwotICAgIH0sCi0KICAgICBfaGFuZGxl
RE9NVXBkYXRlczogZnVuY3Rpb24oZSkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9kb21VcGRh
dGVDb2FsZXNjaW5nTGV2ZWwpCkBAIC0xMDU5LDYgKzExMjQsOCBAQCBXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICh0aGlzLl9yZWFkT25s
eSkKICAgICAgICAgICAgIHJldHVybjsKIAorICAgICAgICB0aGlzLl9lbnRlclRleHRDaGFuZ2VN
b2RlKCk7CisKICAgICAgICAgLy8gRklYTUU6IERFTEVURSBERUNPUkFUSU9OUyBJTiBUSEUgSU5W
T0xWRUQgQ0hVTktTIElGIEFOWSEgU1lOQyBUSEUgR1VUVEVSIEFMU08uCiAKICAgICAgICAgLy8g
RklYTUU6IERFTEVURSBNQVJLRUQgQU5EIEhJR0hMSUdIVEVEIExJTkVTIChJTlZBTElEQVRFIFNF
QVJDSCBSRVNVTFRTKSEgdGhpcy5fbWFya2VkUmFuZ2VFbGVtZW50CkBAIC0xMDczLDkgKzExNDAs
OCBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAg
ICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW2ZpcnN0Q2h1bmtOdW1iZXIgLSAx
XTsKICAgICAgICAgICAgIGZpcnN0TGluZVJvdyA9IGNodW5rLmV4cGFuZGVkID8gY2h1bmsuZ2V0
RXhwYW5kZWRMaW5lUm93KGNodW5rLnN0YXJ0TGluZSArIGNodW5rLmxpbmVzQ291bnQgLSAxKSA6
IGNodW5rLmVsZW1lbnQ7CiAgICAgICAgICAgICBmaXJzdExpbmVSb3cgPSBmaXJzdExpbmVSb3cu
bmV4dFNpYmxpbmc7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgZmlyc3RMaW5lUm93ID0gdGhpcy5lbGVtZW50LmZpcnN0Q2hpbGQ7Ci0gICAgICAgIH0KIAog
ICAgICAgICB2YXIgbGluZXMgPSBbXTsKICAgICAgICAgZm9yICh2YXIgbGluZVJvdyA9IGZpcnN0
TGluZVJvdzsgbGluZVJvdzsgbGluZVJvdyA9IGxpbmVSb3cubmV4dFNpYmxpbmcpIHsKQEAgLTEx
MDgsMTggKzExNzQsMTMzIEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgbGluZXMgPSBsaW5lcy5zbGljZShzdGFydE9mZnNldCwgZW5kT2Zm
c2V0KTsKIAogICAgICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5fZ2V0U2VsZWN0aW9uKCk7Ci0g
ICAgICAgIHRoaXMuYmVnaW5VcGRhdGVzKCk7CiAKICAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA9
PT0gMCAmJiBlbmRMaW5lIDwgdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQpIHsKLSAgICAgICAg
ICAgIHZhciByYW5nZSA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKHN0YXJ0TGluZSwgMCwg
ZW5kTGluZSwgMCk7Ci0gICAgICAgICAgICB2YXIgbmV3UmFuZ2UgPSB0aGlzLl90ZXh0TW9kZWwu
c2V0VGV4dChyYW5nZSwgJycpOworICAgICAgICAgICAgdmFyIG9sZFJhbmdlID0gbmV3IFdlYklu
c3BlY3Rvci5UZXh0UmFuZ2Uoc3RhcnRMaW5lLCAwLCBlbmRMaW5lLCAwKTsKKyAgICAgICAgICAg
IHZhciBuZXdSYW5nZSA9IHRoaXMuX3RleHRNb2RlbC5zZXRUZXh0KG9sZFJhbmdlLCAiIik7CiAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgV2ViSW5zcGVjdG9y
LlRleHRSYW5nZShzdGFydExpbmUsIDAsIGVuZExpbmUgLSAxLCB0aGlzLl90ZXh0TW9kZWwubGlu
ZUxlbmd0aChlbmRMaW5lIC0gMSkpOwotICAgICAgICAgICAgdmFyIG5ld1JhbmdlID0gdGhpcy5f
dGV4dE1vZGVsLnNldFRleHQocmFuZ2UsIGxpbmVzLmpvaW4oIlxuIikpOworICAgICAgICAgICAg
dmFyIG9sZFJhbmdlID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0UmFuZ2Uoc3RhcnRMaW5lLCAwLCBl
bmRMaW5lIC0gMSwgdGhpcy5fdGV4dE1vZGVsLmxpbmVMZW5ndGgoZW5kTGluZSAtIDEpKTsKKyAg
ICAgICAgICAgIHZhciBuZXdSYW5nZSA9IHRoaXMuX3RleHRNb2RlbC5zZXRUZXh0KG9sZFJhbmdl
LCBsaW5lcy5qb2luKCJcbiIpKTsKICAgICAgICAgfQogCi0gICAgICAgIHRoaXMuZW5kVXBkYXRl
cygpOworICAgICAgICB0aGlzLmJlZ2luRG9tVXBkYXRlcygpOworICAgICAgICB0aGlzLl91cGRh
dGVDaHVua3NGb3JSYW5nZXMob2xkUmFuZ2UsIG5ld1JhbmdlLCBmaXJzdENodW5rTnVtYmVyLCBm
aXJzdExpbmVSb3csIGVuZExpbmUpOworICAgICAgICB0aGlzLl91cGRhdGVIaWdobGlnaHRzRm9y
UmFuZ2UobmV3UmFuZ2UpOworICAgICAgICB0aGlzLl9wYWludFNraXBwZWRMaW5lcygpOworICAg
ICAgICB0aGlzLmVuZERvbVVwZGF0ZXMoKTsKKwogICAgICAgICB0aGlzLl9yZXN0b3JlU2VsZWN0
aW9uKHNlbGVjdGlvbik7CisKKyAgICAgICAgdGhpcy5fZXhpdFRleHRDaGFuZ2VNb2RlKG9sZFJh
bmdlLCBuZXdSYW5nZSk7CisgICAgfSwKKworICAgIF91cGRhdGVDaHVua3NGb3JSYW5nZXM6IGZ1
bmN0aW9uKG9sZFJhbmdlLCBuZXdSYW5nZSwgZmlyc3RDaHVua051bWJlciwgZmlyc3RMaW5lUm93
LCBmaXJzdFVubW9kaWZpZWRMaW5lKQorICAgIHsKKyAgICAgICAgLy8gVXBkYXRlIHRoZSBjaHVu
a3MgaW4gcmFuZ2U6IGZpcnN0Q2h1bmtOdW1iZXIgPD0gaW5kZXggPD0gbGFzdENodW5rTnVtYmVy
CisgICAgICAgIHZhciBsYXN0Q2h1bmtOdW1iZXIgPSBmaXJzdENodW5rTnVtYmVyOworICAgICAg
ICB3aGlsZSAobGFzdENodW5rTnVtYmVyICsgMSA8IHRoaXMuX3RleHRDaHVua3MubGVuZ3RoKSB7
CisgICAgICAgICAgICBpZiAodGhpcy5fdGV4dENodW5rc1tsYXN0Q2h1bmtOdW1iZXIgKyAxXS5z
dGFydExpbmUgPj0gZmlyc3RVbm1vZGlmaWVkTGluZSkKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICsrbGFzdENodW5rTnVtYmVyOworICAgICAgICB9CisKKyAgICAgICAgdmFy
IHN0YXJ0TGluZSA9IHRoaXMuX3RleHRDaHVua3NbZmlyc3RDaHVua051bWJlcl0uc3RhcnRMaW5l
OworICAgICAgICB2YXIgbGluZXNDb3VudCA9IHRoaXMuX3RleHRDaHVua3NbbGFzdENodW5rTnVt
YmVyXS5zdGFydExpbmUgKyB0aGlzLl90ZXh0Q2h1bmtzW2xhc3RDaHVua051bWJlcl0ubGluZXND
b3VudCAtIHN0YXJ0TGluZTsKKyAgICAgICAgdmFyIGxpbmVzRGlmZiA9IG5ld1JhbmdlLmxpbmVz
Q291bnQgLSBvbGRSYW5nZS5saW5lc0NvdW50OworICAgICAgICBsaW5lc0NvdW50ICs9IGxpbmVz
RGlmZjsKKworICAgICAgICBpZiAobGluZXNEaWZmKSB7CisgICAgICAgICAgICAvLyBMaW5lcyBz
aGlmdGVkLCB1cGRhdGUgdGhlIGxpbmUgbnVtYmVycyBvZiB0aGUgY2h1bmtzIGJlbG93LgorICAg
ICAgICAgICAgZm9yICh2YXIgY2h1bmtOdW1iZXIgPSBsYXN0Q2h1bmtOdW1iZXIgKyAxOyBjaHVu
a051bWJlciA8IHRoaXMuX3RleHRDaHVua3MubGVuZ3RoOyArK2NodW5rTnVtYmVyKQorICAgICAg
ICAgICAgICAgIHRoaXMuX3RleHRDaHVua3NbY2h1bmtOdW1iZXJdLnN0YXJ0TGluZSArPSBsaW5l
c0RpZmY7CisgICAgICAgIH0KKworICAgICAgICAvLyBNb3N0IGZyZXF1ZW50IGNhc2U6IGEgY2h1
bmsgcmVtYWluZWQgdGhlIHNhbWUuCisgICAgICAgIGZvciAodmFyIGNodW5rTnVtYmVyID0gZmly
c3RDaHVua051bWJlcjsgY2h1bmtOdW1iZXIgPD0gbGFzdENodW5rTnVtYmVyOyArK2NodW5rTnVt
YmVyKSB7CisgICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW2NodW5rTnVt
YmVyXTsKKyAgICAgICAgICAgIHZhciBsaW5lTnVtYmVyID0gY2h1bmsuc3RhcnRMaW5lOworICAg
ICAgICAgICAgZm9yICh2YXIgbGluZVJvdyA9IGZpcnN0TGluZVJvdzsgbGluZVJvdyAmJiBsaW5l
TnVtYmVyIDwgY2h1bmsuc3RhcnRMaW5lICsgY2h1bmsubGluZXNDb3VudDsgbGluZVJvdyA9IGxp
bmVSb3cubmV4dFNpYmxpbmcpIHsKKyAgICAgICAgICAgICAgICBpZiAobGluZVJvdy5saW5lTnVt
YmVyICE9PSBsaW5lTnVtYmVyIHx8IGxpbmVSb3cgIT09IGNodW5rLmdldEV4cGFuZGVkTGluZVJv
dyhsaW5lTnVtYmVyKSB8fCBsaW5lUm93LnRleHRDb250ZW50ICE9PSB0aGlzLl90ZXh0TW9kZWwu
bGluZShsaW5lTnVtYmVyKSB8fCAhbGluZVJvdy5maXJzdENoaWxkKQorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICArK2xpbmVOdW1iZXI7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAobGluZU51bWJlciA8IGNodW5rLnN0YXJ0TGluZSArIGNodW5rLmxp
bmVzQ291bnQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjaHVuay51cGRh
dGVDb2xsYXBzZWRMaW5lUm93KCk7CisgICAgICAgICAgICArK2ZpcnN0Q2h1bmtOdW1iZXI7Cisg
ICAgICAgICAgICBmaXJzdExpbmVSb3cgPSBsaW5lUm93OworICAgICAgICAgICAgc3RhcnRMaW5l
ICs9IGNodW5rLmxpbmVzQ291bnQ7CisgICAgICAgICAgICBsaW5lc0NvdW50IC09IGNodW5rLmxp
bmVzQ291bnQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZmlyc3RDaHVua051bWJlciA+IGxh
c3RDaHVua051bWJlciAmJiBsaW5lc0NvdW50ID09PSAwKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIC8vIE1heWJlIG1lcmdlIHdpdGggdGhlIG5leHQgY2h1bmssIHNvIHRoYXQgd2Ug
c2hvdWxkIG5vdCBjcmVhdGUgMS1zaXplZCBjaHVua3Mgd2hlbiBhcHBlbmRpbmcgbmV3IGxpbmVz
IG9uZSBieSBvbmUuCisgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX3RleHRDaHVua3NbbGFzdENo
dW5rTnVtYmVyICsgMV07CisgICAgICAgIHZhciBsaW5lc0luTGFzdENodW5rID0gbGluZXNDb3Vu
dCAlIHRoaXMuX2RlZmF1bHRDaHVua1NpemU7CisgICAgICAgIGlmIChjaHVuayAmJiBsaW5lc0lu
TGFzdENodW5rID4gMCAmJiBsaW5lc0luTGFzdENodW5rICsgY2h1bmsubGluZXNDb3VudCA8PSB0
aGlzLl9kZWZhdWx0Q2h1bmtTaXplKSB7CisgICAgICAgICAgICArK2xhc3RDaHVua051bWJlcjsK
KyAgICAgICAgICAgIGxpbmVzQ291bnQgKz0gY2h1bmsubGluZXNDb3VudDsKKyAgICAgICAgfQor
CisgICAgICAgIHZhciBzY3JvbGxUb3AgPSB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wOworICAgICAg
ICB2YXIgc2Nyb2xsTGVmdCA9IHRoaXMuZWxlbWVudC5zY3JvbGxMZWZ0OworCisgICAgICAgIC8v
IERlbGV0ZSBhbGwgRE9NIGVsZW1lbnRzIHRoYXQgd2VyZSBlaXRoZXIgY29udHJvbGxlZCBieSB0
aGUgb2xkIGNodW5rcywgb3IgaGF2ZSBqdXN0IGJlZW4gaW5zZXJ0ZWQuCisgICAgICAgIHdoaWxl
IChmaXJzdExpbmVSb3cgJiYgKHR5cGVvZiBmaXJzdExpbmVSb3cubGluZU51bWJlciAhPT0gIm51
bWJlciIgfHwgZmlyc3RMaW5lUm93LmxpbmVOdW1iZXIgPCBzdGFydExpbmUgKyBsaW5lc0NvdW50
IHx8IGZpcnN0TGluZVJvdy5saW5lTnVtYmVyID49IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50
KSkgeworICAgICAgICAgICAgdmFyIGxpbmVSb3cgPSBmaXJzdExpbmVSb3c7CisgICAgICAgICAg
ICBmaXJzdExpbmVSb3cgPSBmaXJzdExpbmVSb3cubmV4dFNpYmxpbmc7CisgICAgICAgICAgICB0
aGlzLmVsZW1lbnQucmVtb3ZlQ2hpbGQobGluZVJvdyk7CisgICAgICAgIH0KKworICAgICAgICAv
LyBSZXBsYWNlIG9sZCBjaHVua3Mgd2l0aCB0aGUgbmV3IG9uZXMuCisgICAgICAgIGZvciAodmFy
IGNodW5rTnVtYmVyID0gZmlyc3RDaHVua051bWJlcjsgbGluZXNDb3VudCA+IDA7ICsrY2h1bmtO
dW1iZXIpIHsKKyAgICAgICAgICAgIHZhciBjaHVua0xpbmVzQ291bnQgPSBNYXRoLm1pbih0aGlz
Ll9kZWZhdWx0Q2h1bmtTaXplLCBsaW5lc0NvdW50KTsKKyAgICAgICAgICAgIHZhciBuZXdDaHVu
ayA9IHRoaXMuX2NyZWF0ZU5ld0NodW5rKHN0YXJ0TGluZSwgc3RhcnRMaW5lICsgY2h1bmtMaW5l
c0NvdW50KTsKKyAgICAgICAgICAgIHRoaXMuZWxlbWVudC5pbnNlcnRCZWZvcmUobmV3Q2h1bmsu
ZWxlbWVudCwgZmlyc3RMaW5lUm93KTsKKworICAgICAgICAgICAgaWYgKGNodW5rTnVtYmVyIDw9
IGxhc3RDaHVua051bWJlcikKKyAgICAgICAgICAgICAgICB0aGlzLl90ZXh0Q2h1bmtzW2NodW5r
TnVtYmVyXSA9IG5ld0NodW5rOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHRo
aXMuX3RleHRDaHVua3Muc3BsaWNlKGNodW5rTnVtYmVyLCAwLCBuZXdDaHVuayk7CisgICAgICAg
ICAgICBzdGFydExpbmUgKz0gY2h1bmtMaW5lc0NvdW50OworICAgICAgICAgICAgbGluZXNDb3Vu
dCAtPSBjaHVua0xpbmVzQ291bnQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNodW5rTnVtYmVy
IDw9IGxhc3RDaHVua051bWJlcikKKyAgICAgICAgICAgIHRoaXMuX3RleHRDaHVua3Muc3BsaWNl
KGNodW5rTnVtYmVyLCBsYXN0Q2h1bmtOdW1iZXIgLSBjaHVua051bWJlciArIDEpOworCisgICAg
ICAgIHRoaXMuZWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7CisgICAgICAgIHRoaXMuZWxl
bWVudC5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDsKKyAgICB9LAorCisgICAgX3VwZGF0ZUhpZ2hs
aWdodHNGb3JSYW5nZTogZnVuY3Rpb24ocmFuZ2UpCisgICAgeworICAgICAgICB2YXIgdmlzaWJs
ZUZyb20gPSB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wOworICAgICAgICB2YXIgdmlzaWJsZVRvID0g
dGhpcy5lbGVtZW50LnNjcm9sbFRvcCArIHRoaXMuZWxlbWVudC5jbGllbnRIZWlnaHQ7CisKKyAg
ICAgICAgdmFyIG9mZnNldCA9IDA7CisgICAgICAgIHZhciBsYXN0VmlzaWJsZUxpbmUgPSAwOwor
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RleHRDaHVua3MubGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX3RleHRDaHVua3NbaV07CisgICAgICAg
ICAgICB2YXIgY2h1bmtIZWlnaHQgPSBjaHVuay5oZWlnaHQ7CisgICAgICAgICAgICBpZiAob2Zm
c2V0ICsgY2h1bmtIZWlnaHQgPiB2aXNpYmxlRnJvbSAmJiBvZmZzZXQgPCB2aXNpYmxlVG8pCisg
ICAgICAgICAgICAgICAgbGFzdFZpc2libGVMaW5lID0gY2h1bmsuc3RhcnRMaW5lICsgY2h1bmsu
bGluZXNDb3VudDsKKyAgICAgICAgICAgIGVsc2UgaWYgKG9mZnNldCA+PSB2aXNpYmxlVG8pCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBvZmZzZXQgKz0gY2h1bmtIZWlnaHQ7
CisgICAgICAgIH0KKworICAgICAgICBsYXN0VmlzaWJsZUxpbmUgPSBNYXRoLm1heChsYXN0Vmlz
aWJsZUxpbmUsIHJhbmdlLmVuZExpbmUpOworCisgICAgICAgIHZhciB1cGRhdGVkID0gdGhpcy5f
aGlnaGxpZ2h0ZXIudXBkYXRlSGlnaGxpZ2h0KHJhbmdlLnN0YXJ0TGluZSwgbGFzdFZpc2libGVM
aW5lKTsKKyAgICAgICAgaWYgKCF1cGRhdGVkKSB7CisgICAgICAgICAgICAvLyBIaWdobGlnaHRz
IGZvciB0aGUgY2h1bmtzIGJlbG93IGFyZSBpbnZhbGlkLCBzbyBqdXN0IGNvbGxhcHNlIHRoZW0u
CisgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fY2h1bmtOdW1iZXJGb3JMaW5lKHJhbmdl
LnN0YXJ0TGluZSk7IGkgPCB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aDsgKytpKQorICAgICAgICAg
ICAgICAgIHRoaXMuX3RleHRDaHVua3NbaV0uZXhwYW5kZWQgPSBmYWxzZTsKKyAgICAgICAgfQor
CisgICAgICAgIHRoaXMuX3JlcGFpbnRBbGwoKTsKICAgICB9LAogCiAgICAgX2NvbGxlY3RMaW5l
c0Zyb21EaXY6IGZ1bmN0aW9uKGxpbmVzLCBlbGVtZW50KQpAQCAtMTEzNCw5ICsxMzE1LDkgQEAg
V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICAg
ICAgbm9kZSA9IG5vZGUudHJhdmVyc2VOZXh0Tm9kZShlbGVtZW50KTsKICAgICAgICAgfQogCi0g
ICAgICAgIHZhciB0ZXh0Q29udGVudCA9IHRleHRDb250ZW50cy5qb2luKCcnKTsKKyAgICAgICAg
dmFyIHRleHRDb250ZW50ID0gdGV4dENvbnRlbnRzLmpvaW4oIiIpOwogICAgICAgICAvLyBUaGUg
bGFzdCBcbiAoaWYgYW55KSBkb2VzIG5vdCAiY291bnQiIGluIGEgRElWLgotICAgICAgICB0ZXh0
Q29udGVudCA9IHRleHRDb250ZW50LnJlcGxhY2UoL1xuJC8sICcnKTsKKyAgICAgICAgdGV4dENv
bnRlbnQgPSB0ZXh0Q29udGVudC5yZXBsYWNlKC9cbiQvLCAiIik7CiAKICAgICAgICAgdGV4dENv
bnRlbnRzID0gdGV4dENvbnRlbnQuc3BsaXQoIlxuIik7CiAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgdGV4dENvbnRlbnRzLmxlbmd0aDsgKytpKQpAQCAtMTE1NSwyMiArMTMzNiwxMyBAQCBX
ZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5DaHVuayA9IGZ1bmN0aW9uKHRleHRWaWV3ZXIsIHN0
YXJ0TGluZSwgZW5kTGluZSkKICAgICB0aGlzLmVsZW1lbnQubGluZU51bWJlciA9IHN0YXJ0TGlu
ZTsKICAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gIndlYmtpdC1saW5lLWNvbnRlbnQiOwog
Ci0gICAgdGhpcy5zdGFydExpbmUgPSBzdGFydExpbmU7CisgICAgdGhpcy5fc3RhcnRMaW5lID0g
c3RhcnRMaW5lOwogICAgIGVuZExpbmUgPSBNYXRoLm1pbih0aGlzLl90ZXh0TW9kZWwubGluZXND
b3VudCwgZW5kTGluZSk7CiAgICAgdGhpcy5saW5lc0NvdW50ID0gZW5kTGluZSAtIHN0YXJ0TGlu
ZTsKIAogICAgIHRoaXMuX2V4cGFuZGVkID0gZmFsc2U7CiAKLSAgICB2YXIgbGluZXMgPSBbXTsK
LSAgICBmb3IgKHZhciBpID0gc3RhcnRMaW5lOyBpIDwgZW5kTGluZTsgKytpKSB7Ci0gICAgICAg
IGxpbmVzLnB1c2godGhpcy5fdGV4dE1vZGVsLmxpbmUoaSkpOwotICAgIH0KLQotICAgIHRoaXMu
ZWxlbWVudC50ZXh0Q29udGVudCA9IGxpbmVzLmpvaW4oIlxuIik7Ci0KLSAgICAvLyBUaGUgbGFz
dCBlbXB0eSBsaW5lIHdpbGwgZ2V0IHN3YWxsb3dlZCBvdGhlcndpc2UuCi0gICAgaWYgKCFsaW5l
c1tsaW5lcy5sZW5ndGggLSAxXSkKLSAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIikpOworICAgIHRoaXMudXBkYXRlQ29sbGFwc2VkTGlu
ZVJvdygpOwogfQogCiBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5DaHVuay5wcm90b3R5cGUg
PSB7CkBAIC0xMjAzLDYgKzEzNzUsMjEgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1
bmsucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmVuZERvbVVwZGF0ZXMo
KTsKICAgICB9LAogCisgICAgZ2V0IHN0YXJ0TGluZSgpCisgICAgeworICAgICAgICByZXR1cm4g
dGhpcy5fc3RhcnRMaW5lOworICAgIH0sCisKKyAgICBzZXQgc3RhcnRMaW5lKHN0YXJ0TGluZSkK
KyAgICB7CisgICAgICAgIHRoaXMuX3N0YXJ0TGluZSA9IHN0YXJ0TGluZTsKKyAgICAgICAgdGhp
cy5lbGVtZW50LmxpbmVOdW1iZXIgPSBzdGFydExpbmU7CisgICAgICAgIGlmICh0aGlzLl9leHBh
bmRlZExpbmVSb3dzKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2V4
cGFuZGVkTGluZVJvd3MubGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgdGhpcy5fZXhwYW5k
ZWRMaW5lUm93c1tpXS5saW5lTnVtYmVyID0gc3RhcnRMaW5lICsgaTsKKyAgICAgICAgfQorICAg
IH0sCisKICAgICBnZXQgZXhwYW5kZWQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2V4
cGFuZGVkOwpAQCAtMTI3OCw1ICsxNDY1LDIyIEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFp
bkNodW5rLnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKCF0aGlzLl9leHBhbmRlZExpbmVSb3dz
KQogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudDsKICAgICAgICAgcmV0dXJuIHRoaXMu
X2V4cGFuZGVkTGluZVJvd3NbbGluZU51bWJlciAtIHRoaXMuc3RhcnRMaW5lXTsKKyAgICB9LAor
CisgICAgdXBkYXRlQ29sbGFwc2VkTGluZVJvdzogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAg
aWYgKHRoaXMubGluZXNDb3VudCA9PT0gMSAmJiB0aGlzLl9leHBhbmRlZCkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICB2YXIgbGluZXMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9
IHRoaXMuc3RhcnRMaW5lOyBpIDwgdGhpcy5zdGFydExpbmUgKyB0aGlzLmxpbmVzQ291bnQ7ICsr
aSkKKyAgICAgICAgICAgIGxpbmVzLnB1c2godGhpcy5fdGV4dE1vZGVsLmxpbmUoaSkpOworCisg
ICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOworICAgICAgICB0aGlzLmVsZW1l
bnQudGV4dENvbnRlbnQgPSBsaW5lcy5qb2luKCJcbiIpOworCisgICAgICAgIC8vIFRoZSBsYXN0
IGVtcHR5IGxpbmUgd2lsbCBnZXQgc3dhbGxvd2VkIG90aGVyd2lzZS4KKyAgICAgICAgaWYgKCFs
aW5lc1tsaW5lcy5sZW5ndGggLSAxXSkKKyAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTsKICAgICB9CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82944</attachid>
            <date>2011-02-18 04:57:24 -0800</date>
            <delta_ts>2011-02-18 05:39:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54661-20110218155721.patch</filename>
            <type>text/plain</type>
            <size>24229</size>
            <attacher name="Andrey Adaikin">aandrey</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwNTdkYTZhYTRkZDJiY2RmMGUzYTllMzg3NjFiZmQwMTc0Y2I0ZGQ0Li4x
ZTA3ODI4MDkxY2IxZGI1NjI3YjMzOGE1MmYxYzg5ZGZiZTIzMTMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDIgQEAKKzIwMTEtMDItMTggIEFuZHJleSBBZGFpa2luICA8YWFuZHJleUBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdl
YiBJbnNwZWN0b3I6IFtUZXh0IGVkaXRvcl0gT3B0aW1pemUgZWRpdGluZyB1cGRhdGVzIGluIG1h
aW4gcGFuZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU0NjYxCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRWaWV3ZXIuanM6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VGV4dFZpZXdlci5wcm90b3R5cGUuX3RleHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5UZXh0Vmlld2VyLnByb3RvdHlwZS5fZW50ZXJJbnRlcm5hbFRleHRDaGFuZ2VNb2RlKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZS5fZXhpdEludGVybmFsVGV4
dENoYW5nZU1vZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBl
Ll9zeW5jRGVjb3JhdGlvbnNGb3JMaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRp
dG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZS50ZXh0Q2hhbmdlZCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuX3Njcm9sbCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUuY2h1bmtGb3JM
aW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3Rv
dHlwZS5fdG90YWxIZWlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0
ZXJQYW5lbC5wcm90b3R5cGUuX2V4cGFuZENodW5rcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvckd1dHRlckNodW5rKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
R3V0dGVyQ2h1bmsucHJvdG90eXBlLmFkZERlY29yYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JHdXR0ZXJDaHVuay5wcm90b3R5cGUucmVtb3ZlRGVjb3JhdGlvbik6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX2V4cGFuZENodW5rcyk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX2hpZ2hs
aWdodERhdGFSZWFkeSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5l
bC5wcm90b3R5cGUuX21hcmtTa2lwcGVkUGFpbnRMaW5lcyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX3BhaW50U2tpcHBlZExpbmVzKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fcGFpbnRM
aW5lcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5
cGUuX3BhaW50TGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5l
bC5wcm90b3R5cGUuX3Bvc2l0aW9uVG9TZWxlY3Rpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLl9hcHBseURvbVVwZGF0ZXMpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLl91cGRhdGVDaHVu
a3NGb3JSYW5nZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwu
cHJvdG90eXBlLl91cGRhdGVIaWdobGlnaHRzRm9yUmFuZ2UpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlLl9jb2xsZWN0TGluZXNGcm9tRGl2KToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rLnByb3RvdHlwZS5nZXQgc3RhcnRMaW5lKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rLnByb3RvdHlwZS5zZXQg
c3RhcnRMaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rLnBy
b3RvdHlwZS5nZXRFeHBhbmRlZExpbmVSb3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRF
ZGl0b3JNYWluQ2h1bmsucHJvdG90eXBlLnVwZGF0ZUNvbGxhcHNlZExpbmVSb3cpOgorCiAyMDEx
LTAyLTE3ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1RleHRWaWV3ZXIuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1RleHRWaWV3ZXIuanMKaW5kZXggMWJkZGJmY2I4N2U0MmFiOGU2NDhhNGI4MmY0
NjdlZjI5ZTk3NDJiOC4uMTFhNzU0NTQxN2E4MmM1NWZjNTAzNmU5NWMyY2YxOTQzZjU0ZDI0NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2Vy
LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFZpZXdlci5q
cwpAQCAtMzcsOSArMzcsMTEgQEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIgPSBmdW5jdGlvbih0
ZXh0TW9kZWwsIHBsYXRmb3JtLCB1cmwpCiAgICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2Iik7CiAgICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJ0ZXh0LWVk
aXRvciBtb25vc3BhY2UiOwogCisgICAgdmFyIGVudGVyVGV4dENoYW5nZU1vZGUgPSB0aGlzLl9l
bnRlckludGVybmFsVGV4dENoYW5nZU1vZGUuYmluZCh0aGlzKTsKKyAgICB2YXIgZXhpdFRleHRD
aGFuZ2VNb2RlID0gdGhpcy5fZXhpdEludGVybmFsVGV4dENoYW5nZU1vZGUuYmluZCh0aGlzKTsK
ICAgICB2YXIgc3luY1Njcm9sbExpc3RlbmVyID0gdGhpcy5fc3luY1Njcm9sbC5iaW5kKHRoaXMp
OwogICAgIHZhciBzeW5jRGVjb3JhdGlvbnNGb3JMaW5lTGlzdGVuZXIgPSB0aGlzLl9zeW5jRGVj
b3JhdGlvbnNGb3JMaW5lLmJpbmQodGhpcyk7Ci0gICAgdGhpcy5fbWFpblBhbmVsID0gbmV3IFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsKHRoaXMuX3RleHRNb2RlbCwgdXJsLCBzeW5j
U2Nyb2xsTGlzdGVuZXIsIHN5bmNEZWNvcmF0aW9uc0ZvckxpbmVMaXN0ZW5lcik7CisgICAgdGhp
cy5fbWFpblBhbmVsID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsKHRoaXMu
X3RleHRNb2RlbCwgdXJsLCBzeW5jU2Nyb2xsTGlzdGVuZXIsIHN5bmNEZWNvcmF0aW9uc0Zvckxp
bmVMaXN0ZW5lciwgZW50ZXJUZXh0Q2hhbmdlTW9kZSwgZXhpdFRleHRDaGFuZ2VNb2RlKTsKICAg
ICB0aGlzLl9ndXR0ZXJQYW5lbCA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlclBh
bmVsKHRoaXMuX3RleHRNb2RlbCwgc3luY0RlY29yYXRpb25zRm9yTGluZUxpc3RlbmVyKTsKICAg
ICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fbWFpblBhbmVsLmVsZW1lbnQpOwogICAg
IHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9ndXR0ZXJQYW5lbC5lbGVtZW50KTsKQEAg
LTE0Niw4ICsxNDgsMjQgQEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlID0gewog
ICAgIC8vIFdlYkluc3BlY3Rvci5UZXh0TW9kZWwgbGlzdGVuZXIKICAgICBfdGV4dENoYW5nZWQ6
IGZ1bmN0aW9uKG9sZFJhbmdlLCBuZXdSYW5nZSwgb2xkVGV4dCwgbmV3VGV4dCkKICAgICB7Ci0g
ICAgICAgIHRoaXMuX21haW5QYW5lbC50ZXh0Q2hhbmdlZCgpOwotICAgICAgICB0aGlzLl9ndXR0
ZXJQYW5lbC50ZXh0Q2hhbmdlZCgpOworICAgICAgICBpZiAoIXRoaXMuX2ludGVybmFsVGV4dENo
YW5nZU1vZGUpIHsKKyAgICAgICAgICAgIHRoaXMuX21haW5QYW5lbC50ZXh0Q2hhbmdlZChvbGRS
YW5nZSwgbmV3UmFuZ2UpOworICAgICAgICAgICAgdGhpcy5fZ3V0dGVyUGFuZWwudGV4dENoYW5n
ZWQob2xkUmFuZ2UsIG5ld1JhbmdlKTsKKyAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVBhbmVsT2Zm
c2V0cygpOworICAgICAgICB9CisgICAgfSwKKworICAgIF9lbnRlckludGVybmFsVGV4dENoYW5n
ZU1vZGU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2ludGVybmFsVGV4dENoYW5n
ZU1vZGUgPSB0cnVlOworICAgIH0sCisKKyAgICBfZXhpdEludGVybmFsVGV4dENoYW5nZU1vZGU6
IGZ1bmN0aW9uKG9sZFJhbmdlLCBuZXdSYW5nZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2ludGVy
bmFsVGV4dENoYW5nZU1vZGUgPSBmYWxzZTsKKworICAgICAgICAvLyBGSVhNRTogVXBkYXRlIGd1
dHRlciBzbWFydGx5IQorICAgICAgICB0aGlzLl9ndXR0ZXJQYW5lbC50ZXh0Q2hhbmdlZChvbGRS
YW5nZSwgbmV3UmFuZ2UpOwogICAgICAgICB0aGlzLl91cGRhdGVQYW5lbE9mZnNldHMoKTsKICAg
ICB9LAogCkBAIC0xODIsMTMgKzIwMCwxOSBAQCBXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90
b3R5cGUgPSB7CiAgICAgICAgIGlmIChsaW5lTnVtYmVyID49IHRoaXMuX3RleHRNb2RlbC5saW5l
c0NvdW50KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHZhciBtYWluQ2h1bmsgPSB0
aGlzLl9tYWluUGFuZWwubWFrZUxpbmVBQ2h1bmsobGluZU51bWJlcik7Ci0gICAgICAgIHZhciBn
dXR0ZXJDaHVuayA9IHRoaXMuX2d1dHRlclBhbmVsLm1ha2VMaW5lQUNodW5rKGxpbmVOdW1iZXIp
OwotICAgICAgICB2YXIgaGVpZ2h0ID0gbWFpbkNodW5rLmhlaWdodDsKLSAgICAgICAgaWYgKGhl
aWdodCkKLSAgICAgICAgICAgIGd1dHRlckNodW5rLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHko
ImhlaWdodCIsIGhlaWdodCArICJweCIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBndXR0
ZXJDaHVuay5lbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KCJoZWlnaHQiKTsKKyAgICAgICAg
dmFyIG1haW5DaHVuayA9IHRoaXMuX21haW5QYW5lbC5jaHVua0ZvckxpbmUobGluZU51bWJlcik7
CisgICAgICAgIGlmIChtYWluQ2h1bmsubGluZXNDb3VudCA9PT0gMSkgeworICAgICAgICAgICAg
dmFyIGd1dHRlckNodW5rID0gdGhpcy5fZ3V0dGVyUGFuZWwubWFrZUxpbmVBQ2h1bmsobGluZU51
bWJlcik7CisgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gbWFpbkNodW5rLmhlaWdodDsKKyAgICAg
ICAgICAgIGlmIChoZWlnaHQpCisgICAgICAgICAgICAgICAgZ3V0dGVyQ2h1bmsuZWxlbWVudC5z
dHlsZS5zZXRQcm9wZXJ0eSgiaGVpZ2h0IiwgaGVpZ2h0ICsgInB4Iik7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgZ3V0dGVyQ2h1bmsuZWxlbWVudC5zdHlsZS5yZW1vdmVQcm9w
ZXJ0eSgiaGVpZ2h0Iik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgZ3V0dGVy
Q2h1bmsgPSB0aGlzLl9ndXR0ZXJQYW5lbC5jaHVua0ZvckxpbmUobGluZU51bWJlcik7CisgICAg
ICAgICAgICBpZiAoZ3V0dGVyQ2h1bmsubGluZXNDb3VudCA9PT0gMSkKKyAgICAgICAgICAgICAg
ICBndXR0ZXJDaHVuay5lbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KCJoZWlnaHQiKTsKKyAg
ICAgICAgfQogICAgIH0KIH0KIApAQCAtMjI4LDcgKzI1Miw3IEBAIFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yQ2h1bmtlZFBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgY2h1bmsucmVtb3ZlRGVj
b3JhdGlvbihkZWNvcmF0aW9uKTsKICAgICB9LAogCi0gICAgdGV4dENoYW5nZWQ6IGZ1bmN0aW9u
KG9sZFJhbmdlLCBuZXdSYW5nZSwgb2xkVGV4dCwgbmV3VGV4dCkKKyAgICB0ZXh0Q2hhbmdlZDog
ZnVuY3Rpb24ob2xkUmFuZ2UsIG5ld1JhbmdlKQogICAgIHsKICAgICAgICAgdGhpcy5fYnVpbGRD
aHVua3MoKTsKICAgICB9LApAQCAtMzA2LDYgKzMzMCwxMCBAQCBXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUgPSB7CiAKICAgICBfc2Nyb2xsOiBmdW5jdGlvbigp
CiAgICAgeworICAgICAgICAvLyBGSVhNRTogUmVwbGFjZSB0aGUgIjIiIHdpdGggdGhlIHBhZGRp
bmctbGVmdCB2YWx1ZSBmcm9tIENTUy4KKyAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5zY3JvbGxM
ZWZ0IDw9IDIpCisgICAgICAgICAgICB0aGlzLmVsZW1lbnQuc2Nyb2xsTGVmdCA9IDA7CisKICAg
ICAgICAgdGhpcy5fc2NoZWR1bGVSZXBhaW50QWxsKCk7CiAgICAgICAgIGlmICh0aGlzLl9zeW5j
U2Nyb2xsTGlzdGVuZXIpCiAgICAgICAgICAgICB0aGlzLl9zeW5jU2Nyb2xsTGlzdGVuZXIoKTsK
QEAgLTM1MCw3ICszNzgsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5w
cm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aCAtIDE7
CiAgICAgfSwKIAotICAgIF9jaHVua0ZvckxpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAg
Y2h1bmtGb3JMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQogICAgIHsKICAgICAgICAgcmV0dXJu
IHRoaXMuX3RleHRDaHVua3NbdGhpcy5fY2h1bmtOdW1iZXJGb3JMaW5lKGxpbmVOdW1iZXIpXTsK
ICAgICB9LApAQCAtMzk0LDkgKzQyMiwxNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5r
ZWRQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGxhc3RFbGVtZW50ID0gKGxhc3RFbGVtZW50
IHx8IGZpcnN0RWxlbWVudCkubmV4dEVsZW1lbnRTaWJsaW5nOwogICAgICAgICBpZiAobGFzdEVs
ZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gbGFzdEVsZW1lbnQub2Zmc2V0VG9wIC0gZmlyc3RF
bGVtZW50Lm9mZnNldFRvcDsKLSAgICAgICAgZWxzZSBpZiAoZmlyc3RFbGVtZW50Lm9mZnNldFBh
cmVudCkKLSAgICAgICAgICAgIHJldHVybiBmaXJzdEVsZW1lbnQub2Zmc2V0UGFyZW50LnNjcm9s
bEhlaWdodCAtIGZpcnN0RWxlbWVudC5vZmZzZXRUb3A7Ci0gICAgICAgIHJldHVybiBmaXJzdEVs
ZW1lbnQub2Zmc2V0SGVpZ2h0OworCisgICAgICAgIHZhciBvZmZzZXRQYXJlbnQgPSBmaXJzdEVs
ZW1lbnQub2Zmc2V0UGFyZW50OworICAgICAgICBpZiAob2Zmc2V0UGFyZW50ICYmIG9mZnNldFBh
cmVudC5zY3JvbGxIZWlnaHQgPiBvZmZzZXRQYXJlbnQuY2xpZW50SGVpZ2h0KQorICAgICAgICAg
ICAgcmV0dXJuIG9mZnNldFBhcmVudC5zY3JvbGxIZWlnaHQgLSBmaXJzdEVsZW1lbnQub2Zmc2V0
VG9wOworCisgICAgICAgIHZhciB0b3RhbCA9IDA7CisgICAgICAgIHdoaWxlIChmaXJzdEVsZW1l
bnQgJiYgZmlyc3RFbGVtZW50ICE9PSBsYXN0RWxlbWVudCkgeworICAgICAgICAgICAgdG90YWwg
Kz0gZmlyc3RFbGVtZW50Lm9mZnNldEhlaWdodDsKKyAgICAgICAgICAgIGZpcnN0RWxlbWVudCA9
IGZpcnN0RWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmc7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRvdGFsOwogICAgIH0sCiAgICAgCiAgICAgcmVzaXplOiBmdW5jdGlvbigpCkBAIC00MzMs
OSArNDY5LDggQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJQYW5lbC5wcm90b3R5cGUg
PSB7CiAKICAgICBfZXhwYW5kQ2h1bmtzOiBmdW5jdGlvbihmcm9tSW5kZXgsIHRvSW5kZXgpCiAg
ICAgewotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RleHRDaHVua3MubGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90ZXh0Q2h1bmtzLmxl
bmd0aDsgKytpKQogICAgICAgICAgICAgdGhpcy5fdGV4dENodW5rc1tpXS5leHBhbmRlZCA9IChm
cm9tSW5kZXggPD0gaSAmJiBpIDwgdG9JbmRleCk7Ci0gICAgICAgIH0KICAgICB9CiB9CiAKQEAg
LTQ2OCw5ICs1MDMsOCBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1dHRlckNodW5rID0gZnVu
Y3Rpb24odGV4dFZpZXdlciwgc3RhcnRMaW5lLCBlbmRMaW5lKQogICAgICAgICB0aGlzLmVsZW1l
bnQuYXBwZW5kQ2hpbGQob3V0ZXJTcGFuKTsKICAgICB9IGVsc2UgewogICAgICAgICB2YXIgbGlu
ZU51bWJlcnMgPSBbXTsKLSAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0TGluZTsgaSA8IGVuZExp
bmU7ICsraSkgeworICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRMaW5lOyBpIDwgZW5kTGluZTsg
KytpKQogICAgICAgICAgICAgbGluZU51bWJlcnMucHVzaChpICsgMSk7Ci0gICAgICAgIH0KICAg
ICAgICAgdGhpcy5lbGVtZW50LnRleHRDb250ZW50ID0gbGluZU51bWJlcnMuam9pbigiXG4iKTsK
ICAgICB9CiB9CkBAIC00NzgsMTYgKzUxMiwxNCBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckd1
dHRlckNodW5rID0gZnVuY3Rpb24odGV4dFZpZXdlciwgc3RhcnRMaW5lLCBlbmRMaW5lKQogV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJDaHVuay5wcm90b3R5cGUgPSB7CiAgICAgYWRkRGVj
b3JhdGlvbjogZnVuY3Rpb24oZGVjb3JhdGlvbikKICAgICB7Ci0gICAgICAgIGlmICh0eXBlb2Yg
ZGVjb3JhdGlvbiA9PT0gInN0cmluZyIpIHsKKyAgICAgICAgaWYgKHR5cGVvZiBkZWNvcmF0aW9u
ID09PSAic3RyaW5nIikKICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKGRl
Y29yYXRpb24pOwotICAgICAgICB9CiAgICAgfSwKIAogICAgIHJlbW92ZURlY29yYXRpb246IGZ1
bmN0aW9uKGRlY29yYXRpb24pCiAgICAgewotICAgICAgICBpZiAodHlwZW9mIGRlY29yYXRpb24g
PT09ICJzdHJpbmciKSB7CisgICAgICAgIGlmICh0eXBlb2YgZGVjb3JhdGlvbiA9PT0gInN0cmlu
ZyIpCiAgICAgICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcyhkZWNvcmF0aW9u
KTsKLSAgICAgICAgfQogICAgIH0sCiAKICAgICBnZXQgZXhwYW5kZWQoKQpAQCAtNTU2LDEyICs1
ODgsMTQgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JHdXR0ZXJDaHVuay5wcm90b3R5cGUgPSB7
CiAgICAgfQogfQogCi1XZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbCA9IGZ1bmN0aW9u
KHRleHRNb2RlbCwgdXJsLCBzeW5jU2Nyb2xsTGlzdGVuZXIsIHN5bmNEZWNvcmF0aW9uc0Zvckxp
bmVMaXN0ZW5lcikKK1dlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsID0gZnVuY3Rpb24o
dGV4dE1vZGVsLCB1cmwsIHN5bmNTY3JvbGxMaXN0ZW5lciwgc3luY0RlY29yYXRpb25zRm9yTGlu
ZUxpc3RlbmVyLCBlbnRlclRleHRDaGFuZ2VNb2RlLCBleGl0VGV4dENoYW5nZU1vZGUpCiB7CiAg
ICAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JDaHVua2VkUGFuZWwuY2FsbCh0aGlzLCB0ZXh0TW9k
ZWwpOwogCiAgICAgdGhpcy5fc3luY1Njcm9sbExpc3RlbmVyID0gc3luY1Njcm9sbExpc3RlbmVy
OwogICAgIHRoaXMuX3N5bmNEZWNvcmF0aW9uc0ZvckxpbmVMaXN0ZW5lciA9IHN5bmNEZWNvcmF0
aW9uc0ZvckxpbmVMaXN0ZW5lcjsKKyAgICB0aGlzLl9lbnRlclRleHRDaGFuZ2VNb2RlID0gZW50
ZXJUZXh0Q2hhbmdlTW9kZTsKKyAgICB0aGlzLl9leGl0VGV4dENoYW5nZU1vZGUgPSBleGl0VGV4
dENoYW5nZU1vZGU7CiAKICAgICB0aGlzLl91cmwgPSB1cmw7CiAgICAgdGhpcy5faGlnaGxpZ2h0
ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JIaWdobGlnaHRlcih0ZXh0TW9kZWwsIHRo
aXMuX2hpZ2hsaWdodERhdGFSZWFkeS5iaW5kKHRoaXMpKTsKQEAgLTcyMywyNyArNzU3LDU5IEBA
IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAg
dGhpcy5faGlnaGxpZ2h0ZXIuaGlnaGxpZ2h0KGxhc3RWaXNpYmxlTGluZSk7CiAgICAgICAgIGRl
bGV0ZSB0aGlzLl9tdXRlSGlnaGxpZ2h0TGlzdGVuZXI7CiAKLSAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgdGhpcy5fdGV4dENodW5rcy5sZW5ndGg7ICsraSkKICAgICAgICAgICAgIHRo
aXMuX3RleHRDaHVua3NbaV0uZXhwYW5kZWQgPSAoZnJvbUluZGV4IDw9IGkgJiYgaSA8IHRvSW5k
ZXgpOwotICAgICAgICB9CiAKICAgICAgICAgdGhpcy5fcmVzdG9yZVNlbGVjdGlvbihzZWxlY3Rp
b24pOwogICAgIH0sCiAKICAgICBfaGlnaGxpZ2h0RGF0YVJlYWR5OiBmdW5jdGlvbihmcm9tTGlu
ZSwgdG9MaW5lKQogICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX211dGVIaWdobGlnaHRMaXN0ZW5l
ciB8fCB0aGlzLl9kaXJ0eUxpbmVzKQorICAgICAgICBpZiAodGhpcy5fbXV0ZUhpZ2hsaWdodExp
c3RlbmVyKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB0aGlzLl9wYWludExpbmVzKGZy
b21MaW5lLCB0b0xpbmUsIHRydWUgLypyZXN0b3JlU2VsZWN0aW9uKi8pOwogICAgIH0sCiAKKyAg
ICBfbWFya1NraXBwZWRQYWludExpbmVzOiBmdW5jdGlvbihzdGFydExpbmUsIGVuZExpbmUpCisg
ICAgeworICAgICAgICBpZiAoIXRoaXMuX3NraXBwZWRQYWludExpbmVzKQorICAgICAgICAgICAg
dGhpcy5fc2tpcHBlZFBhaW50TGluZXMgPSBbIHsgc3RhcnRMaW5lOiBzdGFydExpbmUsIGVuZExp
bmU6IGVuZExpbmUgfSBdOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgdGhpcy5fc2tpcHBlZFBhaW50TGluZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl9za2lwcGVkUGFpbnRMaW5lc1tpXTsKKyAgICAgICAg
ICAgICAgICBpZiAoY2h1bmsuc3RhcnRMaW5lIDw9IGVuZExpbmUgJiYgY2h1bmsuZW5kTGluZSA+
PSBzdGFydExpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2h1bmsuc3RhcnRMaW5lID0gTWF0
aC5taW4oY2h1bmsuc3RhcnRMaW5lLCBzdGFydExpbmUpOworICAgICAgICAgICAgICAgICAgICBj
aHVuay5lbmRMaW5lID0gTWF0aC5tYXgoY2h1bmsuZW5kTGluZSwgZW5kTGluZSk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB0aGlzLl9za2lwcGVkUGFpbnRMaW5lcy5wdXNoKHsgc3RhcnRMaW5lOiBzdGFy
dExpbmUsIGVuZExpbmU6IGVuZExpbmUgfSk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgX3Bh
aW50U2tpcHBlZExpbmVzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX3Nr
aXBwZWRQYWludExpbmVzIHx8IHRoaXMuX2RpcnR5TGluZXMpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2tpcHBlZFBhaW50TGluZXMubGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX3NraXBwZWRQYWludExp
bmVzW2ldOworICAgICAgICAgICAgdGhpcy5fcGFpbnRMaW5lcyhjaHVuay5zdGFydExpbmUsIGNo
dW5rLmVuZExpbmUpOworICAgICAgICB9CisgICAgICAgIGRlbGV0ZSB0aGlzLl9za2lwcGVkUGFp
bnRMaW5lczsKKyAgICB9LAorCiAgICAgX3BhaW50TGluZXM6IGZ1bmN0aW9uKGZyb21MaW5lLCB0
b0xpbmUsIHJlc3RvcmVTZWxlY3Rpb24pCiAgICAgeworICAgICAgICBpZiAodGhpcy5fZGlydHlM
aW5lcykgeworICAgICAgICAgICAgdGhpcy5fbWFya1NraXBwZWRQYWludExpbmVzKGZyb21MaW5l
LCB0b0xpbmUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgdmFy
IHNlbGVjdGlvbjsKLSAgICAgICAgdmFyIGNodW5rID0gdGhpcy5fY2h1bmtGb3JMaW5lKGZyb21M
aW5lKTsKKyAgICAgICAgdmFyIGNodW5rID0gdGhpcy5jaHVua0ZvckxpbmUoZnJvbUxpbmUpOwog
ICAgICAgICBmb3IgKHZhciBpID0gZnJvbUxpbmU7IGkgPCB0b0xpbmU7ICsraSkgewogICAgICAg
ICAgICAgaWYgKGkgPj0gY2h1bmsuc3RhcnRMaW5lICsgY2h1bmsubGluZXNDb3VudCkKLSAgICAg
ICAgICAgICAgICBjaHVuayA9IHRoaXMuX2NodW5rRm9yTGluZShpKTsKKyAgICAgICAgICAgICAg
ICBjaHVuayA9IHRoaXMuY2h1bmtGb3JMaW5lKGkpOwogICAgICAgICAgICAgdmFyIGxpbmVSb3cg
PSBjaHVuay5nZXRFeHBhbmRlZExpbmVSb3coaSk7CiAgICAgICAgICAgICBpZiAoIWxpbmVSb3cp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC03NTcsNiArODIzLDExIEBAIFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKIAogICAgIF9wYWludExpbmU6
IGZ1bmN0aW9uKGxpbmVSb3csIGxpbmVOdW1iZXIpCiAgICAgeworICAgICAgICBpZiAodGhpcy5f
ZGlydHlMaW5lcykgeworICAgICAgICAgICAgdGhpcy5fbWFya1NraXBwZWRQYWludExpbmVzKGxp
bmVOdW1iZXIsIGxpbmVOdW1iZXIgKyAxKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCiAgICAgICAgIHRoaXMuYmVnaW5Eb21VcGRhdGVzKCk7CiAgICAgICAgIHRyeSB7CiAgICAg
ICAgICAgICB2YXIgaGlnaGxpZ2h0ID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShsaW5l
TnVtYmVyLCAiaGlnaGxpZ2h0Iik7CkBAIC04OTEsNyArOTYyLDcgQEAgV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogCiAgICAgX3Bvc2l0aW9uVG9TZWxlY3Rp
b246IGZ1bmN0aW9uKGxpbmUsIGNvbHVtbikKICAgICB7Ci0gICAgICAgIHZhciBjaHVuayA9IHRo
aXMuX2NodW5rRm9yTGluZShsaW5lKTsKKyAgICAgICAgdmFyIGNodW5rID0gdGhpcy5jaHVua0Zv
ckxpbmUobGluZSk7CiAgICAgICAgIHZhciBsaW5lUm93ID0gY2h1bmsuZ2V0RXhwYW5kZWRMaW5l
Um93KGxpbmUpOwogICAgICAgICBpZiAobGluZVJvdykKICAgICAgICAgICAgIHZhciByYW5nZUJv
dW5kYXJ5ID0gbGluZVJvdy5yYW5nZUJvdW5kYXJ5Rm9yT2Zmc2V0KGNvbHVtbik7CkBAIC05NjMs
MTIgKzEwMzQsNiBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUg
PSB7CiAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuY29tcGxldGVVUkwodGhpcy5fdXJsLCBo
cmVmVmFsdWUpOwogICAgIH0sCiAKLSAgICB0ZXh0Q2hhbmdlZDogZnVuY3Rpb24ob2xkUmFuZ2Us
IG5ld1JhbmdlLCBvbGRUZXh0LCBuZXdUZXh0KQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IFVw
ZGF0ZSBvbmx5IHRoYXQgcGFydCBvZiB0aGUgZWRpdG9yIHRoYXQgaGFzIGp1c3QgYmVlbiBjaGFu
Z2VkLgotICAgICAgICB0aGlzLl9idWlsZENodW5rcygpOwotICAgIH0sCi0KICAgICBfaGFuZGxl
RE9NVXBkYXRlczogZnVuY3Rpb24oZSkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9kb21VcGRh
dGVDb2FsZXNjaW5nTGV2ZWwpCkBAIC0xMDU5LDYgKzExMjQsOCBAQCBXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICh0aGlzLl9yZWFkT25s
eSkKICAgICAgICAgICAgIHJldHVybjsKIAorICAgICAgICB0aGlzLl9lbnRlclRleHRDaGFuZ2VN
b2RlKCk7CisKICAgICAgICAgLy8gRklYTUU6IERFTEVURSBERUNPUkFUSU9OUyBJTiBUSEUgSU5W
T0xWRUQgQ0hVTktTIElGIEFOWSEgU1lOQyBUSEUgR1VUVEVSIEFMU08uCiAKICAgICAgICAgLy8g
RklYTUU6IERFTEVURSBNQVJLRUQgQU5EIEhJR0hMSUdIVEVEIExJTkVTIChJTlZBTElEQVRFIFNF
QVJDSCBSRVNVTFRTKSEgdGhpcy5fbWFya2VkUmFuZ2VFbGVtZW50CkBAIC0xMDczLDkgKzExNDAs
OCBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAg
ICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW2ZpcnN0Q2h1bmtOdW1iZXIgLSAx
XTsKICAgICAgICAgICAgIGZpcnN0TGluZVJvdyA9IGNodW5rLmV4cGFuZGVkID8gY2h1bmsuZ2V0
RXhwYW5kZWRMaW5lUm93KGNodW5rLnN0YXJ0TGluZSArIGNodW5rLmxpbmVzQ291bnQgLSAxKSA6
IGNodW5rLmVsZW1lbnQ7CiAgICAgICAgICAgICBmaXJzdExpbmVSb3cgPSBmaXJzdExpbmVSb3cu
bmV4dFNpYmxpbmc7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgZmlyc3RMaW5lUm93ID0gdGhpcy5lbGVtZW50LmZpcnN0Q2hpbGQ7Ci0gICAgICAgIH0KIAog
ICAgICAgICB2YXIgbGluZXMgPSBbXTsKICAgICAgICAgZm9yICh2YXIgbGluZVJvdyA9IGZpcnN0
TGluZVJvdzsgbGluZVJvdzsgbGluZVJvdyA9IGxpbmVSb3cubmV4dFNpYmxpbmcpIHsKQEAgLTEx
MDgsMTggKzExNzQsMTQyIEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgbGluZXMgPSBsaW5lcy5zbGljZShzdGFydE9mZnNldCwgZW5kT2Zm
c2V0KTsKIAogICAgICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5fZ2V0U2VsZWN0aW9uKCk7Ci0g
ICAgICAgIHRoaXMuYmVnaW5VcGRhdGVzKCk7CiAKICAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA9
PT0gMCAmJiBlbmRMaW5lIDwgdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQpIHsKLSAgICAgICAg
ICAgIHZhciByYW5nZSA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKHN0YXJ0TGluZSwgMCwg
ZW5kTGluZSwgMCk7Ci0gICAgICAgICAgICB2YXIgbmV3UmFuZ2UgPSB0aGlzLl90ZXh0TW9kZWwu
c2V0VGV4dChyYW5nZSwgJycpOworICAgICAgICAgICAgdmFyIG9sZFJhbmdlID0gbmV3IFdlYklu
c3BlY3Rvci5UZXh0UmFuZ2Uoc3RhcnRMaW5lLCAwLCBlbmRMaW5lLCAwKTsKKyAgICAgICAgICAg
IHZhciBuZXdSYW5nZSA9IHRoaXMuX3RleHRNb2RlbC5zZXRUZXh0KG9sZFJhbmdlLCAiIik7CiAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgV2ViSW5zcGVjdG9y
LlRleHRSYW5nZShzdGFydExpbmUsIDAsIGVuZExpbmUgLSAxLCB0aGlzLl90ZXh0TW9kZWwubGlu
ZUxlbmd0aChlbmRMaW5lIC0gMSkpOwotICAgICAgICAgICAgdmFyIG5ld1JhbmdlID0gdGhpcy5f
dGV4dE1vZGVsLnNldFRleHQocmFuZ2UsIGxpbmVzLmpvaW4oIlxuIikpOworICAgICAgICAgICAg
dmFyIG9sZFJhbmdlID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0UmFuZ2Uoc3RhcnRMaW5lLCAwLCBl
bmRMaW5lIC0gMSwgdGhpcy5fdGV4dE1vZGVsLmxpbmVMZW5ndGgoZW5kTGluZSAtIDEpKTsKKyAg
ICAgICAgICAgIHZhciBuZXdSYW5nZSA9IHRoaXMuX3RleHRNb2RlbC5zZXRUZXh0KG9sZFJhbmdl
LCBsaW5lcy5qb2luKCJcbiIpKTsKICAgICAgICAgfQogCi0gICAgICAgIHRoaXMuZW5kVXBkYXRl
cygpOworICAgICAgICB0aGlzLmJlZ2luRG9tVXBkYXRlcygpOworICAgICAgICB0aGlzLl91cGRh
dGVDaHVua3NGb3JSYW5nZXMob2xkUmFuZ2UsIG5ld1JhbmdlKTsKKyAgICAgICAgdGhpcy5fdXBk
YXRlSGlnaGxpZ2h0c0ZvclJhbmdlKG5ld1JhbmdlKTsKKyAgICAgICAgdGhpcy5fcGFpbnRTa2lw
cGVkTGluZXMoKTsKKyAgICAgICAgdGhpcy5lbmREb21VcGRhdGVzKCk7CisKICAgICAgICAgdGhp
cy5fcmVzdG9yZVNlbGVjdGlvbihzZWxlY3Rpb24pOworCisgICAgICAgIHRoaXMuX2V4aXRUZXh0
Q2hhbmdlTW9kZShvbGRSYW5nZSwgbmV3UmFuZ2UpOworICAgIH0sCisKKyAgICBfdXBkYXRlQ2h1
bmtzRm9yUmFuZ2VzOiBmdW5jdGlvbihvbGRSYW5nZSwgbmV3UmFuZ2UpCisgICAgeworICAgICAg
ICAvLyBVcGRhdGUgdGhlIGNodW5rcyBpbiByYW5nZTogZmlyc3RDaHVua051bWJlciA8PSBpbmRl
eCA8PSBsYXN0Q2h1bmtOdW1iZXIKKyAgICAgICAgdmFyIGZpcnN0Q2h1bmtOdW1iZXIgPSB0aGlz
Ll9jaHVua051bWJlckZvckxpbmUob2xkUmFuZ2Uuc3RhcnRMaW5lKTsKKyAgICAgICAgdmFyIGxh
c3RDaHVua051bWJlciA9IGZpcnN0Q2h1bmtOdW1iZXI7CisgICAgICAgIHdoaWxlIChsYXN0Q2h1
bmtOdW1iZXIgKyAxIDwgdGhpcy5fdGV4dENodW5rcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGlm
ICh0aGlzLl90ZXh0Q2h1bmtzW2xhc3RDaHVua051bWJlciArIDFdLnN0YXJ0TGluZSA+IG9sZFJh
bmdlLmVuZExpbmUpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICArK2xhc3RD
aHVua051bWJlcjsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBzdGFydExpbmUgPSB0aGlzLl90
ZXh0Q2h1bmtzW2ZpcnN0Q2h1bmtOdW1iZXJdLnN0YXJ0TGluZTsKKyAgICAgICAgdmFyIGxpbmVz
Q291bnQgPSB0aGlzLl90ZXh0Q2h1bmtzW2xhc3RDaHVua051bWJlcl0uc3RhcnRMaW5lICsgdGhp
cy5fdGV4dENodW5rc1tsYXN0Q2h1bmtOdW1iZXJdLmxpbmVzQ291bnQgLSBzdGFydExpbmU7Cisg
ICAgICAgIHZhciBsaW5lc0RpZmYgPSBuZXdSYW5nZS5saW5lc0NvdW50IC0gb2xkUmFuZ2UubGlu
ZXNDb3VudDsKKyAgICAgICAgbGluZXNDb3VudCArPSBsaW5lc0RpZmY7CisKKyAgICAgICAgaWYg
KGxpbmVzRGlmZikgeworICAgICAgICAgICAgLy8gTGluZXMgc2hpZnRlZCwgdXBkYXRlIHRoZSBs
aW5lIG51bWJlcnMgb2YgdGhlIGNodW5rcyBiZWxvdy4KKyAgICAgICAgICAgIGZvciAodmFyIGNo
dW5rTnVtYmVyID0gbGFzdENodW5rTnVtYmVyICsgMTsgY2h1bmtOdW1iZXIgPCB0aGlzLl90ZXh0
Q2h1bmtzLmxlbmd0aDsgKytjaHVua051bWJlcikKKyAgICAgICAgICAgICAgICB0aGlzLl90ZXh0
Q2h1bmtzW2NodW5rTnVtYmVyXS5zdGFydExpbmUgKz0gbGluZXNEaWZmOworICAgICAgICB9CisK
KyAgICAgICAgdmFyIGZpcnN0TGluZVJvdzsKKyAgICAgICAgaWYgKGZpcnN0Q2h1bmtOdW1iZXIp
IHsKKyAgICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX3RleHRDaHVua3NbZmlyc3RDaHVua051
bWJlciAtIDFdOworICAgICAgICAgICAgZmlyc3RMaW5lUm93ID0gY2h1bmsuZXhwYW5kZWQgPyBj
aHVuay5nZXRFeHBhbmRlZExpbmVSb3coY2h1bmsuc3RhcnRMaW5lICsgY2h1bmsubGluZXNDb3Vu
dCAtIDEpIDogY2h1bmsuZWxlbWVudDsKKyAgICAgICAgICAgIGZpcnN0TGluZVJvdyA9IGZpcnN0
TGluZVJvdy5uZXh0U2libGluZzsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBmaXJzdExp
bmVSb3cgPSB0aGlzLmVsZW1lbnQuZmlyc3RDaGlsZDsKKworICAgICAgICAvLyBNb3N0IGZyZXF1
ZW50IGNhc2U6IGEgY2h1bmsgcmVtYWluZWQgdGhlIHNhbWUuCisgICAgICAgIGZvciAodmFyIGNo
dW5rTnVtYmVyID0gZmlyc3RDaHVua051bWJlcjsgY2h1bmtOdW1iZXIgPD0gbGFzdENodW5rTnVt
YmVyOyArK2NodW5rTnVtYmVyKSB7CisgICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl90ZXh0
Q2h1bmtzW2NodW5rTnVtYmVyXTsKKyAgICAgICAgICAgIHZhciBsaW5lTnVtYmVyID0gY2h1bmsu
c3RhcnRMaW5lOworICAgICAgICAgICAgZm9yICh2YXIgbGluZVJvdyA9IGZpcnN0TGluZVJvdzsg
bGluZVJvdyAmJiBsaW5lTnVtYmVyIDwgY2h1bmsuc3RhcnRMaW5lICsgY2h1bmsubGluZXNDb3Vu
dDsgbGluZVJvdyA9IGxpbmVSb3cubmV4dFNpYmxpbmcpIHsKKyAgICAgICAgICAgICAgICBpZiAo
bGluZVJvdy5saW5lTnVtYmVyICE9PSBsaW5lTnVtYmVyIHx8IGxpbmVSb3cgIT09IGNodW5rLmdl
dEV4cGFuZGVkTGluZVJvdyhsaW5lTnVtYmVyKSB8fCBsaW5lUm93LnRleHRDb250ZW50ICE9PSB0
aGlzLl90ZXh0TW9kZWwubGluZShsaW5lTnVtYmVyKSB8fCAhbGluZVJvdy5maXJzdENoaWxkKQor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICArK2xpbmVOdW1iZXI7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobGluZU51bWJlciA8IGNodW5rLnN0YXJ0
TGluZSArIGNodW5rLmxpbmVzQ291bnQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjaHVuay51cGRhdGVDb2xsYXBzZWRMaW5lUm93KCk7CisgICAgICAgICAgICArK2ZpcnN0
Q2h1bmtOdW1iZXI7CisgICAgICAgICAgICBmaXJzdExpbmVSb3cgPSBsaW5lUm93OworICAgICAg
ICAgICAgc3RhcnRMaW5lICs9IGNodW5rLmxpbmVzQ291bnQ7CisgICAgICAgICAgICBsaW5lc0Nv
dW50IC09IGNodW5rLmxpbmVzQ291bnQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZmlyc3RD
aHVua051bWJlciA+IGxhc3RDaHVua051bWJlciAmJiBsaW5lc0NvdW50ID09PSAwKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIE1heWJlIG1lcmdlIHdpdGggdGhlIG5leHQgY2h1
bmssIHNvIHRoYXQgd2Ugc2hvdWxkIG5vdCBjcmVhdGUgMS1zaXplZCBjaHVua3Mgd2hlbiBhcHBl
bmRpbmcgbmV3IGxpbmVzIG9uZSBieSBvbmUuCisgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX3Rl
eHRDaHVua3NbbGFzdENodW5rTnVtYmVyICsgMV07CisgICAgICAgIHZhciBsaW5lc0luTGFzdENo
dW5rID0gbGluZXNDb3VudCAlIHRoaXMuX2RlZmF1bHRDaHVua1NpemU7CisgICAgICAgIGlmIChj
aHVuayAmJiBsaW5lc0luTGFzdENodW5rID4gMCAmJiBsaW5lc0luTGFzdENodW5rICsgY2h1bmsu
bGluZXNDb3VudCA8PSB0aGlzLl9kZWZhdWx0Q2h1bmtTaXplKSB7CisgICAgICAgICAgICArK2xh
c3RDaHVua051bWJlcjsKKyAgICAgICAgICAgIGxpbmVzQ291bnQgKz0gY2h1bmsubGluZXNDb3Vu
dDsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBzY3JvbGxUb3AgPSB0aGlzLmVsZW1lbnQuc2Ny
b2xsVG9wOworICAgICAgICB2YXIgc2Nyb2xsTGVmdCA9IHRoaXMuZWxlbWVudC5zY3JvbGxMZWZ0
OworCisgICAgICAgIC8vIERlbGV0ZSBhbGwgRE9NIGVsZW1lbnRzIHRoYXQgd2VyZSBlaXRoZXIg
Y29udHJvbGxlZCBieSB0aGUgb2xkIGNodW5rcywgb3IgaGF2ZSBqdXN0IGJlZW4gaW5zZXJ0ZWQu
CisgICAgICAgIHdoaWxlIChmaXJzdExpbmVSb3cgJiYgKHR5cGVvZiBmaXJzdExpbmVSb3cubGlu
ZU51bWJlciAhPT0gIm51bWJlciIgfHwgZmlyc3RMaW5lUm93LmxpbmVOdW1iZXIgPCBzdGFydExp
bmUgKyBsaW5lc0NvdW50IHx8IGZpcnN0TGluZVJvdy5saW5lTnVtYmVyID49IHRoaXMuX3RleHRN
b2RlbC5saW5lc0NvdW50KSkgeworICAgICAgICAgICAgdmFyIGxpbmVSb3cgPSBmaXJzdExpbmVS
b3c7CisgICAgICAgICAgICBmaXJzdExpbmVSb3cgPSBmaXJzdExpbmVSb3cubmV4dFNpYmxpbmc7
CisgICAgICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlQ2hpbGQobGluZVJvdyk7CisgICAgICAg
IH0KKworICAgICAgICAvLyBSZXBsYWNlIG9sZCBjaHVua3Mgd2l0aCB0aGUgbmV3IG9uZXMuCisg
ICAgICAgIGZvciAodmFyIGNodW5rTnVtYmVyID0gZmlyc3RDaHVua051bWJlcjsgbGluZXNDb3Vu
dCA+IDA7ICsrY2h1bmtOdW1iZXIpIHsKKyAgICAgICAgICAgIHZhciBjaHVua0xpbmVzQ291bnQg
PSBNYXRoLm1pbih0aGlzLl9kZWZhdWx0Q2h1bmtTaXplLCBsaW5lc0NvdW50KTsKKyAgICAgICAg
ICAgIHZhciBuZXdDaHVuayA9IHRoaXMuX2NyZWF0ZU5ld0NodW5rKHN0YXJ0TGluZSwgc3RhcnRM
aW5lICsgY2h1bmtMaW5lc0NvdW50KTsKKyAgICAgICAgICAgIHRoaXMuZWxlbWVudC5pbnNlcnRC
ZWZvcmUobmV3Q2h1bmsuZWxlbWVudCwgZmlyc3RMaW5lUm93KTsKKworICAgICAgICAgICAgaWYg
KGNodW5rTnVtYmVyIDw9IGxhc3RDaHVua051bWJlcikKKyAgICAgICAgICAgICAgICB0aGlzLl90
ZXh0Q2h1bmtzW2NodW5rTnVtYmVyXSA9IG5ld0NodW5rOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHRoaXMuX3RleHRDaHVua3Muc3BsaWNlKGNodW5rTnVtYmVyLCAwLCBuZXdD
aHVuayk7CisgICAgICAgICAgICBzdGFydExpbmUgKz0gY2h1bmtMaW5lc0NvdW50OworICAgICAg
ICAgICAgbGluZXNDb3VudCAtPSBjaHVua0xpbmVzQ291bnQ7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGNodW5rTnVtYmVyIDw9IGxhc3RDaHVua051bWJlcikKKyAgICAgICAgICAgIHRoaXMuX3Rl
eHRDaHVua3Muc3BsaWNlKGNodW5rTnVtYmVyLCBsYXN0Q2h1bmtOdW1iZXIgLSBjaHVua051bWJl
ciArIDEpOworCisgICAgICAgIHRoaXMuZWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7Cisg
ICAgICAgIHRoaXMuZWxlbWVudC5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDsKKyAgICB9LAorCisg
ICAgX3VwZGF0ZUhpZ2hsaWdodHNGb3JSYW5nZTogZnVuY3Rpb24ocmFuZ2UpCisgICAgeworICAg
ICAgICB2YXIgdmlzaWJsZUZyb20gPSB0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wOworICAgICAgICB2
YXIgdmlzaWJsZVRvID0gdGhpcy5lbGVtZW50LnNjcm9sbFRvcCArIHRoaXMuZWxlbWVudC5jbGll
bnRIZWlnaHQ7CisKKyAgICAgICAgdmFyIG9mZnNldCA9IDA7CisgICAgICAgIHZhciBsYXN0Vmlz
aWJsZUxpbmUgPSAwOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RleHRDaHVu
a3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBjaHVuayA9IHRoaXMuX3RleHRDaHVu
a3NbaV07CisgICAgICAgICAgICB2YXIgY2h1bmtIZWlnaHQgPSBjaHVuay5oZWlnaHQ7CisgICAg
ICAgICAgICBpZiAob2Zmc2V0ICsgY2h1bmtIZWlnaHQgPiB2aXNpYmxlRnJvbSAmJiBvZmZzZXQg
PCB2aXNpYmxlVG8pCisgICAgICAgICAgICAgICAgbGFzdFZpc2libGVMaW5lID0gY2h1bmsuc3Rh
cnRMaW5lICsgY2h1bmsubGluZXNDb3VudDsKKyAgICAgICAgICAgIGVsc2UgaWYgKG9mZnNldCA+
PSB2aXNpYmxlVG8pCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBvZmZzZXQg
Kz0gY2h1bmtIZWlnaHQ7CisgICAgICAgIH0KKworICAgICAgICBsYXN0VmlzaWJsZUxpbmUgPSBN
YXRoLm1heChsYXN0VmlzaWJsZUxpbmUsIHJhbmdlLmVuZExpbmUpOworCisgICAgICAgIHZhciB1
cGRhdGVkID0gdGhpcy5faGlnaGxpZ2h0ZXIudXBkYXRlSGlnaGxpZ2h0KHJhbmdlLnN0YXJ0TGlu
ZSwgbGFzdFZpc2libGVMaW5lKTsKKyAgICAgICAgaWYgKCF1cGRhdGVkKSB7CisgICAgICAgICAg
ICAvLyBIaWdobGlnaHRzIGZvciB0aGUgY2h1bmtzIGJlbG93IGFyZSBpbnZhbGlkLCBzbyBqdXN0
IGNvbGxhcHNlIHRoZW0uCisgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fY2h1bmtOdW1i
ZXJGb3JMaW5lKHJhbmdlLnN0YXJ0TGluZSk7IGkgPCB0aGlzLl90ZXh0Q2h1bmtzLmxlbmd0aDsg
KytpKQorICAgICAgICAgICAgICAgIHRoaXMuX3RleHRDaHVua3NbaV0uZXhwYW5kZWQgPSBmYWxz
ZTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX3JlcGFpbnRBbGwoKTsKICAgICB9LAogCiAg
ICAgX2NvbGxlY3RMaW5lc0Zyb21EaXY6IGZ1bmN0aW9uKGxpbmVzLCBlbGVtZW50KQpAQCAtMTEz
NCw5ICsxMzI0LDkgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBl
ID0gewogICAgICAgICAgICAgbm9kZSA9IG5vZGUudHJhdmVyc2VOZXh0Tm9kZShlbGVtZW50KTsK
ICAgICAgICAgfQogCi0gICAgICAgIHZhciB0ZXh0Q29udGVudCA9IHRleHRDb250ZW50cy5qb2lu
KCcnKTsKKyAgICAgICAgdmFyIHRleHRDb250ZW50ID0gdGV4dENvbnRlbnRzLmpvaW4oIiIpOwog
ICAgICAgICAvLyBUaGUgbGFzdCBcbiAoaWYgYW55KSBkb2VzIG5vdCAiY291bnQiIGluIGEgRElW
LgotICAgICAgICB0ZXh0Q29udGVudCA9IHRleHRDb250ZW50LnJlcGxhY2UoL1xuJC8sICcnKTsK
KyAgICAgICAgdGV4dENvbnRlbnQgPSB0ZXh0Q29udGVudC5yZXBsYWNlKC9cbiQvLCAiIik7CiAK
ICAgICAgICAgdGV4dENvbnRlbnRzID0gdGV4dENvbnRlbnQuc3BsaXQoIlxuIik7CiAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dENvbnRlbnRzLmxlbmd0aDsgKytpKQpAQCAtMTE1NSwy
MiArMTM0NSwxMyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5DaHVuayA9IGZ1bmN0aW9u
KHRleHRWaWV3ZXIsIHN0YXJ0TGluZSwgZW5kTGluZSkKICAgICB0aGlzLmVsZW1lbnQubGluZU51
bWJlciA9IHN0YXJ0TGluZTsKICAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gIndlYmtpdC1s
aW5lLWNvbnRlbnQiOwogCi0gICAgdGhpcy5zdGFydExpbmUgPSBzdGFydExpbmU7CisgICAgdGhp
cy5fc3RhcnRMaW5lID0gc3RhcnRMaW5lOwogICAgIGVuZExpbmUgPSBNYXRoLm1pbih0aGlzLl90
ZXh0TW9kZWwubGluZXNDb3VudCwgZW5kTGluZSk7CiAgICAgdGhpcy5saW5lc0NvdW50ID0gZW5k
TGluZSAtIHN0YXJ0TGluZTsKIAogICAgIHRoaXMuX2V4cGFuZGVkID0gZmFsc2U7CiAKLSAgICB2
YXIgbGluZXMgPSBbXTsKLSAgICBmb3IgKHZhciBpID0gc3RhcnRMaW5lOyBpIDwgZW5kTGluZTsg
KytpKSB7Ci0gICAgICAgIGxpbmVzLnB1c2godGhpcy5fdGV4dE1vZGVsLmxpbmUoaSkpOwotICAg
IH0KLQotICAgIHRoaXMuZWxlbWVudC50ZXh0Q29udGVudCA9IGxpbmVzLmpvaW4oIlxuIik7Ci0K
LSAgICAvLyBUaGUgbGFzdCBlbXB0eSBsaW5lIHdpbGwgZ2V0IHN3YWxsb3dlZCBvdGhlcndpc2Uu
Ci0gICAgaWYgKCFsaW5lc1tsaW5lcy5sZW5ndGggLSAxXSkKLSAgICAgICAgdGhpcy5lbGVtZW50
LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIikpOworICAgIHRoaXMudXBk
YXRlQ29sbGFwc2VkTGluZVJvdygpOwogfQogCiBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5D
aHVuay5wcm90b3R5cGUgPSB7CkBAIC0xMjAzLDYgKzEzODQsMjEgQEAgV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3JNYWluQ2h1bmsucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl90ZXh0Vmlld2Vy
LmVuZERvbVVwZGF0ZXMoKTsKICAgICB9LAogCisgICAgZ2V0IHN0YXJ0TGluZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRMaW5lOworICAgIH0sCisKKyAgICBzZXQgc3RhcnRM
aW5lKHN0YXJ0TGluZSkKKyAgICB7CisgICAgICAgIHRoaXMuX3N0YXJ0TGluZSA9IHN0YXJ0TGlu
ZTsKKyAgICAgICAgdGhpcy5lbGVtZW50LmxpbmVOdW1iZXIgPSBzdGFydExpbmU7CisgICAgICAg
IGlmICh0aGlzLl9leHBhbmRlZExpbmVSb3dzKSB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHRoaXMuX2V4cGFuZGVkTGluZVJvd3MubGVuZ3RoOyArK2kpCisgICAgICAgICAgICAg
ICAgdGhpcy5fZXhwYW5kZWRMaW5lUm93c1tpXS5saW5lTnVtYmVyID0gc3RhcnRMaW5lICsgaTsK
KyAgICAgICAgfQorICAgIH0sCisKICAgICBnZXQgZXhwYW5kZWQoKQogICAgIHsKICAgICAgICAg
cmV0dXJuIHRoaXMuX2V4cGFuZGVkOwpAQCAtMTI3OCw1ICsxNDc0LDIyIEBAIFdlYkluc3BlY3Rv
ci5UZXh0RWRpdG9yTWFpbkNodW5rLnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKCF0aGlzLl9l
eHBhbmRlZExpbmVSb3dzKQogICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudDsKICAgICAg
ICAgcmV0dXJuIHRoaXMuX2V4cGFuZGVkTGluZVJvd3NbbGluZU51bWJlciAtIHRoaXMuc3RhcnRM
aW5lXTsKKyAgICB9LAorCisgICAgdXBkYXRlQ29sbGFwc2VkTGluZVJvdzogZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgaWYgKHRoaXMubGluZXNDb3VudCA9PT0gMSAmJiB0aGlzLl9leHBhbmRl
ZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgbGluZXMgPSBbXTsKKyAgICAg
ICAgZm9yICh2YXIgaSA9IHRoaXMuc3RhcnRMaW5lOyBpIDwgdGhpcy5zdGFydExpbmUgKyB0aGlz
LmxpbmVzQ291bnQ7ICsraSkKKyAgICAgICAgICAgIGxpbmVzLnB1c2godGhpcy5fdGV4dE1vZGVs
LmxpbmUoaSkpOworCisgICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOworICAg
ICAgICB0aGlzLmVsZW1lbnQudGV4dENvbnRlbnQgPSBsaW5lcy5qb2luKCJcbiIpOworCisgICAg
ICAgIC8vIFRoZSBsYXN0IGVtcHR5IGxpbmUgd2lsbCBnZXQgc3dhbGxvd2VkIG90aGVyd2lzZS4K
KyAgICAgICAgaWYgKCFsaW5lc1tsaW5lcy5sZW5ndGggLSAxXSkKKyAgICAgICAgICAgIHRoaXMu
ZWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTsKICAgICB9
CiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>