<?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>50223</bug_id>
          
          <creation_ts>2010-11-30 04:01:17 -0800</creation_ts>
          <short_desc>Web Inspector: refactor SourceFrame to simplify implementing of js beautifier</short_desc>
          <delta_ts>2010-12-08 02:44:54 -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>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Pavel Podivilov">podivilov</reporter>
          <assigned_to name="Pavel Podivilov">podivilov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>314943</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-11-30 04:01:17 -0800</bug_when>
    <thetext>Web Inspector: refactor SourceFrame to simplify implementing of js beautifier.

* do not store breakpoints in SourceFrame (in SourceFrame._breakpoints and SourceFrame._textModel) since we already store them in BreakpointManager
* move user input processing from SourceFrame to SourceFrameController, since SourceFrame doesn&apos;t know about line -&gt; sourceID mapping and therefore is unable to modify model directly (set breakpoint and such)
* introduce ScriptBreakpointView class that represents a single blue breakpoint bar on a source frame line gutter
* BreakpointManager shouldn&apos;t require breakpoint url to set a breakpoint</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314944</commentid>
    <comment_count>1</comment_count>
      <attachid>75121</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-11-30 04:02:36 -0800</bug_when>
    <thetext>Created attachment 75121
Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315173</commentid>
    <comment_count>2</comment_count>
      <attachid>75121</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-11-30 11:08:17 -0800</bug_when>
    <thetext>Comment on attachment 75121
Patch.

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

I really don&apos;t see how this is better than what we have today. Why do you think it helps with the beautification?

&gt; WebCore/inspector/front-end/ScriptView.js:95
&gt; +    _getSourceIDs: function()

WebCore does not use get prefix for getters.

&gt; WebCore/inspector/front-end/SourceFrame.js:181
&gt; +    hasTextViewer: function()

SourceFrame should not expose textViewer notion outside itself and should entirely encapsulate viewer together with its lazy initialization business.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315588</commentid>
    <comment_count>3</comment_count>
      <attachid>75264</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-12-01 03:40:50 -0800</bug_when>
    <thetext>Created attachment 75264
Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315590</commentid>
    <comment_count>4</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-12-01 04:02:27 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 75121 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=75121&amp;action=review
&gt; 
&gt; I really don&apos;t see how this is better than what we have today. Why do you think it helps with the beautification?

The idea was to implement beautification in a presentation layer - just display formatted text and draw breakpoints and messages according to mapping between initial and formatted script.
Currently SourceFrame is neither a pure view nor a pure model. It implements drawing functionality, owns model data and process user input. This makes further code modification nearly impossible.
After isolating drawing aspects from model and input processing, beautification could be implemented with a several trivial modifications in presentation code.

&gt; 
&gt; &gt; WebCore/inspector/front-end/ScriptView.js:95
&gt; &gt; +    _getSourceIDs: function()
&gt; 
&gt; WebCore does not use get prefix for getters.
Done.

&gt; 
&gt; &gt; WebCore/inspector/front-end/SourceFrame.js:181
&gt; &gt; +    hasTextViewer: function()
&gt; 
&gt; SourceFrame should not expose textViewer notion outside itself and should entirely encapsulate viewer together with its lazy initialization business.
Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315630</commentid>
    <comment_count>5</comment_count>
      <attachid>75264</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-12-01 07:19:50 -0800</bug_when>
    <thetext>Comment on attachment 75264
Patch.

This change suffers from several things as we discussed offline:
- too big coupling with source frame via ad-hoc listeners
- not really a controller - more of a breakpoints aspect in SourceFrameController
- lots of code moved for no good reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316783</commentid>
    <comment_count>6</comment_count>
      <attachid>75490</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-12-03 04:39:54 -0800</bug_when>
    <thetext>Created attachment 75490
Remove breakpoint storages from SourceFrame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316819</commentid>
    <comment_count>7</comment_count>
      <attachid>75490</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-12-03 07:45:15 -0800</bug_when>
    <thetext>Comment on attachment 75490
Remove breakpoint storages from SourceFrame.

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

Looks good, but still requires polish.

&gt; WebCore/inspector/front-end/BreakpointManager.js:71
&gt; +    breakpointsForSourceIDs: function(sourceIDs)

It is more efficient, but API method like this does not look natural. It seems like having this filter belonging to the client would be better (i.e. making findBreakpoints(filter) public).

&gt; WebCore/inspector/front-end/ScriptView.js:111
&gt; +    _url: function()

I don&apos;t see where this is used.

&gt; WebCore/inspector/front-end/SourceFrame.js:43
&gt; +    this._delegate = delegate;

Generic name like &quot;_delegate&quot; with no declared api seems too bad. You should have defined a class for it. Like WebInspector.SourceFrameDelegate with constructor that receives all the callbacks..

&gt; WebCore/inspector/front-end/SourceFrame.js:106
&gt;          if (this._textViewer)

Who is calling this method? Should there be a listener within SourceFrame that handles it now?

&gt; WebCore/inspector/front-end/SourceFrame.js:431
&gt; +        var breakpoints = this._delegate.findAllBreakpoints();

findAllBreakpoints -&gt; breakpoints() ?

&gt; WebCore/inspector/front-end/SourceFrame.js:475
&gt; +        if (!WebInspector.panels.scripts)

We don&apos;t seem to depend on panels.scripts anymore. Should be based on delegate

&gt; WebCore/inspector/front-end/SourceView.js:137
&gt; +        WebInspector.breakpointManager.setBreakpoint(sourceID, this._url(), line, true, &quot;&quot;);

Ok, _url is used here, but this is too bad. In fact, now that ResourceView is so basic, we can inherit SourceView and ScriptView from each other. Or both from a single base class.

&gt; WebCore/inspector/front-end/SourceView.js:142
&gt; +    _findAllBreakpoints: function()

It would be nice to extract these into SourceFrameDelegateImpl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317552</commentid>
    <comment_count>8</comment_count>
      <attachid>75673</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-12-06 04:29:15 -0800</bug_when>
    <thetext>Created attachment 75673
Comments addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317554</commentid>
    <comment_count>9</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-12-06 04:32:17 -0800</bug_when>
    <thetext>&gt; &gt; WebCore/inspector/front-end/SourceFrame.js:475
&gt; &gt; +        if (!WebInspector.panels.scripts)
&gt; 
&gt; We don&apos;t seem to depend on panels.scripts anymore. Should be based on delegate
&gt; 

SourceFrame still depends on panels.scripts a lot. I think fixing it deserves a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318161</commentid>
    <comment_count>10</comment_count>
      <attachid>75673</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-12-07 06:38:21 -0800</bug_when>
    <thetext>Comment on attachment 75673
Comments addressed.

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

&gt; WebCore/inspector/front-end/ScriptView.js:39
&gt; +    this.script.addEventListener(&quot;source-changed&quot;, this._scriptSourceChanged, this);

You are introducing a lot of named events. You should start using constants for them.

&gt; WebCore/inspector/front-end/ScriptsPanel.js:293
&gt; +        var breakpoints = WebInspector.breakpointManager.findBreakpoints(function(b) { return b.sourceID === editData.sourceID });

Sound like this should belong to source frame now?

&gt; WebCore/inspector/front-end/SourceFrame.js:780
&gt; +WebInspector.SourceFrameDelegate.prototype = {

Most of these methods should belong to SourceFrame in order to reduce the delegate API surface.

&gt; WebCore/inspector/front-end/SourceView.js:247
&gt; +WebInspector.ResourceFrameDelegate.prototype = {

SourceFrame does not display arbitrary resources, why is it ResourceFrameDelegate? And hat is this _canEditScripts check used for?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318162</commentid>
    <comment_count>11</comment_count>
      <attachid>75673</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-12-07 06:43:07 -0800</bug_when>
    <thetext>Comment on attachment 75673
Comments addressed.

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

&gt; WebCore/inspector/front-end/ScriptView.js:121
&gt; +    this._script = script;

You should call superclass&apos;s constructor.

&gt; WebCore/inspector/front-end/ScriptView.js:125
&gt; +    _canEditScripts: function()

You should not override private members declared in different units.

&gt; WebCore/inspector/front-end/ScriptView.js:127
&gt; +        return true;

canEditScript returning &apos;true&apos; made me think that you forgot about the Preference flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318184</commentid>
    <comment_count>12</comment_count>
      <attachid>75817</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-12-07 08:00:26 -0800</bug_when>
    <thetext>Created attachment 75817
Comments addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318185</commentid>
    <comment_count>13</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-12-07 08:06:23 -0800</bug_when>
    <thetext>&gt; &gt; WebCore/inspector/front-end/ScriptsPanel.js:293
&gt; &gt; +        var breakpoints = WebInspector.breakpointManager.findBreakpoints(function(b) { return b.sourceID === editData.sourceID });
&gt; 
&gt; Sound like this should belong to source frame now?
&gt; 

There&apos;s bunch of ScriptsPanel&apos;s methods that belong to SourceFrame. Let me fix this in a separate patch targeted at ScriptsPanel refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318225</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 09:02:23 -0800</bug_when>
    <thetext>Attachment 75817 did not pass style-queue:

Failed to run &quot;[u&apos;git&apos;, u&apos;reset&apos;, u&apos;--hard&apos;, u&apos;refs/remotes/trunk&apos;]&quot; exit_code: 128
error: Could not write new index file.
fatal: Could not reset index file to revision &apos;refs/remotes/trunk&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318279</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 10:02:53 -0800</bug_when>
    <thetext>Attachment 75817 did not pass style-queue:

Failed to run &quot;[u&apos;git&apos;, u&apos;reset&apos;, u&apos;--hard&apos;, u&apos;refs/remotes/trunk&apos;]&quot; exit_code: 128
error: Could not write new index file.
fatal: Could not reset index file to revision &apos;refs/remotes/trunk&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318325</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 11:04:02 -0800</bug_when>
    <thetext>Attachment 75817 did not pass style-queue:

Failed to run &quot;[u&apos;git&apos;, u&apos;reset&apos;, u&apos;--hard&apos;, u&apos;refs/remotes/trunk&apos;]&quot; exit_code: 128
error: Could not write new index file.
fatal: Could not reset index file to revision &apos;refs/remotes/trunk&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318378</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 12:05:25 -0800</bug_when>
    <thetext>Attachment 75817 did not pass style-queue:

Failed to run &quot;[u&apos;git&apos;, u&apos;reset&apos;, u&apos;--hard&apos;, u&apos;refs/remotes/trunk&apos;]&quot; exit_code: 128
error: Could not write new index file.
fatal: Could not reset index file to revision &apos;refs/remotes/trunk&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318601</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 21:37:34 -0800</bug_when>
    <thetext>Attachment 75817 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/update-webkit&apos;]&quot; exit_code: 2
Updating OpenSource
Incomplete data: Delta source ended unexpectedly at /usr/lib/git-core/git-svn line 5061

Died at WebKitTools/Scripts/update-webkit line 132.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318701</commentid>
    <comment_count>19</comment_count>
      <attachid>75817</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-12-08 02:21:32 -0800</bug_when>
    <thetext>Comment on attachment 75817
Comments addressed.

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

Please look into further elimination of the delegate via passing script[] into constructor + relying upon new script listener for live edit.

&gt; WebCore/inspector/front-end/Script.js:60
&gt; +WebInspector.Script.SourceChangedEvent = &quot;source-changed&quot;;

Nit: I&apos;d form it as 

WebInspector.Script.Events = {
    SourceChanged: &quot;source-changed&quot;
}

&gt; WebCore/inspector/front-end/ScriptView.js:36
&gt; +    var delegate = new WebInspector.ScriptFrameDelegate(this.script);

You could name it ScriptFrameDelegateImpl for better clarity.

&gt; WebCore/inspector/front-end/SourceFrame.js:428
&gt; +        breakpoint.addEventListener(&quot;enable-changed&quot;, this._breakpointChanged, this);

Any chance these names get constants as well?

&gt; WebCore/inspector/front-end/SourceFrame.js:865
&gt; +    {

Add comment // Implemented by subclasses.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318705</commentid>
    <comment_count>20</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-12-08 02:44:54 -0800</bug_when>
    <thetext>Committed r73499: &lt;http://trac.webkit.org/changeset/73499&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75121</attachid>
            <date>2010-11-30 04:02:36 -0800</date>
            <delta_ts>2010-12-01 03:40:50 -0800</delta_ts>
            <desc>Patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>35166</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NGI3M2QxYS4uNjExZjFhZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2OSBAQAorMjAxMC0xMS0zMCAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiByZWZhY3RvciBTb3VyY2VGcmFt
ZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwMjIz
CisKKyAgICAgICAgRG8gbm90IHN0b3JlIGJyZWFrcG9pbnRzIGluIFNvdXJjZUZyYW1lIChpbiBT
b3VyY2VGcmFtZS5fYnJlYWtwb2ludHMgYW5kIFNvdXJjZUZyYW1lLl90ZXh0TW9kZWwpCisgICAg
ICAgIHNpbmNlIHdlIGFscmVhZHkgc3RvcmUgdGhlbSBpbiBCcmVha3BvaW50TWFuYWdlci4KKyAg
ICAgICAgTW92ZSB1c2VyIGlucHV0IHByb2Nlc3NpbmcgZnJvbSBTb3VyY2VGcmFtZSB0byBTb3Vy
Y2VGcmFtZUNvbnRyb2xsZXIsIHNpbmNlIFNvdXJjZUZyYW1lIGRvZXNuJ3Qga25vdyBhYm91dAor
ICAgICAgICBsaW5lIC0+IHNvdXJjZUlEIG1hcHBpbmcgYW5kIHRoZXJlZm9yZSBpcyB1bmFibGUg
dG8gbW9kaWZ5IG1vZGVsIGRpcmVjdGx5IChzZXQgYnJlYWtwb2ludCBhbmQgc3VjaCkuCisgICAg
ICAgIEludHJvZHVjZSBTY3JpcHRCcmVha3BvaW50VmlldyBjbGFzcyB0aGF0IHJlcHJlc2VudHMg
YSBzaW5nbGUgYmx1ZSBicmVha3BvaW50IGJhciBvbiBhIHNvdXJjZSBmcmFtZSBsaW5lIGd1dHRl
ci4KKyAgICAgICAgQnJlYWtwb2ludE1hbmFnZXIgc2hvdWxkbid0IHJlcXVpcmUgYnJlYWtwb2lu
dCB1cmwgdG8gc2V0IGEgYnJlYWtwb2ludC4KKworICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1l
bmQvQnJlYWtwb2ludE1hbmFnZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2lu
dE1hbmFnZXIucHJvdG90eXBlLnNldE9uZVRpbWVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuc2V0QnJlYWtwb2ludCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLnJlc3RvcmVkQnJl
YWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90
eXBlLmJyZWFrcG9pbnRzRm9yU291cmNlSUQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5icmVha3BvaW50c0ZvclNvdXJjZUlEcyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLl9maW5kQnJlYWtwb2lu
dHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5m
aW5kQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIu
cHJvdG90eXBlLl9zZXRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50TWFuYWdlci5wcm90b3R5cGUuX3NldEJyZWFrcG9pbnRPbkJhY2tlbmQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQv
U2NyaXB0Vmlldy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRWaWV3KToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5TY3JpcHRWaWV3LnByb3RvdHlwZS5fZ2V0U291cmNlSURzKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qczoKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLl9icmVha3BvaW50QWRkZWQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuY3JlYXRlQnJlYWtwb2lu
dFZpZXcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuZWRp
dFNjcmlwdFNvdXJjZS5teWNhbGxiYWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRz
UGFuZWwucHJvdG90eXBlLmVkaXRTY3JpcHRTb3VyY2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlNjcmlwdHNQYW5lbC5wcm90b3R5cGUudXJsRm9yU291cmNlSUQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNjcmlwdEJyZWFrcG9pbnRWaWV3KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3Jp
cHRCcmVha3BvaW50Vmlldy5wcm90b3R5cGUuX3Nob3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlNjcmlwdEJyZWFrcG9pbnRWaWV3LnByb3RvdHlwZS5faGlkZSk6CisgICAgICAgICogaW5zcGVj
dG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3Vy
Y2VGcmFtZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLmhh
c1RleHRWaWV3ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlw
ZS5fY3JlYXRlVmlld2VySWZOZWVkZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lLnByb3RvdHlwZS5zZXRCcmVha3BvaW50RGVjb3JhdGlvbik6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLnJlbW92ZUJyZWFrcG9pbnREZWNvcmF0aW9uKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuZWRpdEJyZWFrcG9p
bnRDb25kaXRpb24uY29tbWl0dGVkQ2FsbGJhY2spOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNv
dXJjZUZyYW1lLnByb3RvdHlwZS5lZGl0QnJlYWtwb2ludENvbmRpdGlvbi5jYW5jZWxsZWRDYWxs
YmFjayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLmVkaXRC
cmVha3BvaW50Q29uZGl0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5w
cm90b3R5cGUuX2NvbnRleHRNZW51KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFt
ZS5wcm90b3R5cGUuX21vdXNlRG93bik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJh
bWUucHJvdG90eXBlLl9zaG93QnJlYWtwb2ludENvbmRpdGlvblBvcHVwKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX2hpZGVCcmVha3BvaW50Q29uZGl0aW9u
UG9wdXApOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lQ29udHJvbGxlcik6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVDb250cm9sbGVyLnByb3RvdHlwZS5fdGV4
dFZpZXdlckNyZWF0ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lQ29udHJv
bGxlci5wcm90b3R5cGUuX2NvbnRleHRNZW51KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3Vy
Y2VGcmFtZUNvbnRyb2xsZXIucHJvdG90eXBlLl9tb3VzZURvd24pOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNvdXJjZUZyYW1lQ29udHJvbGxlci5wcm90b3R5cGUuX2FkZEJyZWFrcG9pbnQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lQ29udHJvbGxlci5wcm90b3R5cGUuX2Fk
ZENvbmRpdGlvbmFsQnJlYWtwb2ludC5kaWRFZGl0QnJlYWtwb2ludENvbmRpdGlvbik6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVDb250cm9sbGVyLnByb3RvdHlwZS5fYWRkQ29u
ZGl0aW9uYWxCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZUNv
bnRyb2xsZXIucHJvdG90eXBlLl9lZGl0QnJlYWtwb2ludENvbmRpdGlvbi5kaWRFZGl0QnJlYWtw
b2ludENvbmRpdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVDb250cm9s
bGVyLnByb3RvdHlwZS5fZWRpdEJyZWFrcG9pbnRDb25kaXRpb24pOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNvdXJjZUZyYW1lQ29udHJvbGxlci5wcm90b3R5cGUuX2NvbnRpbnVlVG9MaW5lKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZVZpZXcuanM6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU291cmNlVmlldyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlVmll
dy5wcm90b3R5cGUuX2NvbnRlbnRMb2FkZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJj
ZVZpZXcucHJvdG90eXBlLl9lZGl0TGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNl
Vmlldy5wcm90b3R5cGUuX2dldFNvdXJjZUlEcyk6CisKIDIwMTAtMTEtMjkgIEFkYW0gQmFydGgg
IDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdl
ci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcwpp
bmRleCAzZDUxMDkyLi5kODI2NGZhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzCkBAIC0zMyw3ICszMyw3IEBAIFdlYkluc3BlY3Rvci5C
cmVha3BvaW50TWFuYWdlciA9IGZ1bmN0aW9uKCkKIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFu
YWdlci5wcm90b3R5cGUgPSB7CiAgICAgc2V0T25lVGltZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHNv
dXJjZUlELCBsaW5lKQogICAgIHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcgV2ViSW5z
cGVjdG9yLkJyZWFrcG9pbnQodGhpcywgc291cmNlSUQsIHVuZGVmaW5lZCwgbGluZSwgdHJ1ZSwg
dW5kZWZpbmVkKTsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkJy
ZWFrcG9pbnQodGhpcywgc291cmNlSUQsIGxpbmUsIHRydWUsIHVuZGVmaW5lZCk7CiAgICAgICAg
IGlmICh0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50LmlkXSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgaWYgKHRoaXMuX29uZVRpbWVCcmVha3BvaW50KQpAQCAtNTEsMzggKzUxLDQ1
IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAg
IH0KICAgICB9LAogCi0gICAgc2V0QnJlYWtwb2ludDogZnVuY3Rpb24oc291cmNlSUQsIHVybCwg
bGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKQorICAgIHNldEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHNv
dXJjZUlELCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24pCiAgICAgewotICAgICAgICB2YXIgYnJl
YWtwb2ludCA9IHRoaXMuX3NldEJyZWFrcG9pbnQoc291cmNlSUQsIHVybCwgbGluZSwgZW5hYmxl
ZCwgY29uZGl0aW9uKTsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9zZXRCcmVha3Bv
aW50KHNvdXJjZUlELCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24pOwogICAgICAgICBpZiAoYnJl
YWtwb2ludCkKICAgICAgICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnRPbkJhY2tlbmQoYnJlYWtw
b2ludCk7CiAgICAgfSwKIAogICAgIHJlc3RvcmVkQnJlYWtwb2ludDogZnVuY3Rpb24oc291cmNl
SUQsIHVybCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKQogICAgIHsKLSAgICAgICAgdGhpcy5f
c2V0QnJlYWtwb2ludChzb3VyY2VJRCwgdXJsLCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24pOwor
ICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50KHNvdXJjZUlELCBsaW5lLCBlbmFibGVkLCBjb25k
aXRpb24pOwogICAgIH0sCiAKICAgICBicmVha3BvaW50c0ZvclNvdXJjZUlEOiBmdW5jdGlvbihz
b3VyY2VJRCkKICAgICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50cyA9IFtdOwotICAgICAgICBm
b3IgKHZhciBpZCBpbiB0aGlzLl9icmVha3BvaW50cykgewotICAgICAgICAgICAgaWYgKHRoaXMu
X2JyZWFrcG9pbnRzW2lkXS5zb3VyY2VJRCA9PT0gc291cmNlSUQpCi0gICAgICAgICAgICAgICAg
YnJlYWtwb2ludHMucHVzaCh0aGlzLl9icmVha3BvaW50c1tpZF0pOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBicmVha3BvaW50czsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmRCcmVha3Bv
aW50cyhmdW5jdGlvbihiKSB7IHJldHVybiBiLnNvdXJjZUlEID09PSBzb3VyY2VJRDsgfSk7Cisg
ICAgfSwKKworICAgIGJyZWFrcG9pbnRzRm9yU291cmNlSURzOiBmdW5jdGlvbihzb3VyY2VJRHMp
CisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fZmluZEJyZWFrcG9pbnRzKGZ1bmN0aW9uKGIp
IHsgcmV0dXJuIGIuc291cmNlSUQgaW4gc291cmNlSURzOyB9KTsKICAgICB9LAogCi0gICAgYnJl
YWtwb2ludHNGb3JVUkw6IGZ1bmN0aW9uKHVybCkKKyAgICBfZmluZEJyZWFrcG9pbnRzOiBmdW5j
dGlvbihmaWx0ZXIpCiAgICAgewogICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSBbXTsKICAgICAg
ICAgZm9yICh2YXIgaWQgaW4gdGhpcy5fYnJlYWtwb2ludHMpIHsKLSAgICAgICAgICAgIGlmICh0
aGlzLl9icmVha3BvaW50c1tpZF0udXJsID09PSB1cmwpCi0gICAgICAgICAgICAgICAgYnJlYWtw
b2ludHMucHVzaCh0aGlzLl9icmVha3BvaW50c1tpZF0pOworICAgICAgICAgICAgdmFyIGJyZWFr
cG9pbnQgPSB0aGlzLl9icmVha3BvaW50c1tpZF07CisgICAgICAgICAgICBpZiAoZmlsdGVyKGJy
ZWFrcG9pbnQpKQorICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRzLnB1c2goYnJlYWtwb2ludCk7
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGJyZWFrcG9pbnRzOwogICAgIH0sCiAKKyAgICBm
aW5kQnJlYWtwb2ludDogZnVuY3Rpb24oc291cmNlSUQsIGxpbmVOdW1iZXIpCisgICAgeworICAg
ICAgICB2YXIgYnJlYWtwb2ludElkID0gV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuanNCcmVha3Bv
aW50SWQoc291cmNlSUQsIGxpbmVOdW1iZXIpOworICAgICAgICByZXR1cm4gdGhpcy5fYnJlYWtw
b2ludHNbYnJlYWtwb2ludElkXTsKKyAgICB9LAorCiAgICAgcmVzZXQ6IGZ1bmN0aW9uKCkKICAg
ICB7CiAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzID0ge307CkBAIC05MCw5ICs5Nyw5IEBAIFdl
Ykluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMu
X25hdGl2ZUJyZWFrcG9pbnRzID0ge307CiAgICAgfSwKIAotICAgIF9zZXRCcmVha3BvaW50OiBm
dW5jdGlvbihzb3VyY2VJRCwgdXJsLCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24pCisgICAgX3Nl
dEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24p
CiAgICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtw
b2ludCh0aGlzLCBzb3VyY2VJRCwgdXJsLCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24pOworICAg
ICAgICB2YXIgYnJlYWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCh0aGlzLCBz
b3VyY2VJRCwgbGluZSwgZW5hYmxlZCwgY29uZGl0aW9uKTsKICAgICAgICAgaWYgKHRoaXMuX2Jy
ZWFrcG9pbnRzW2JyZWFrcG9pbnQuaWRdKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBp
ZiAodGhpcy5fb25lVGltZUJyZWFrcG9pbnQgJiYgKHRoaXMuX29uZVRpbWVCcmVha3BvaW50Lmlk
ID09IGJyZWFrcG9pbnQuaWQpKQpAQCAtMTIyLDcgKzEyOSw3IEBAIFdlYkluc3BlY3Rvci5CcmVh
a3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgIGJyZWFrcG9pbnQucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgaWYgKHN1Y2Nl
c3MpCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnQoYnJlYWtwb2ludC5z
b3VyY2VJRCwgYnJlYWtwb2ludC51cmwsIGxpbmUsIGJyZWFrcG9pbnQuZW5hYmxlZCwgYnJlYWtw
b2ludC5jb25kaXRpb24pOworICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50
KGJyZWFrcG9pbnQuc291cmNlSUQsIGxpbmUsIGJyZWFrcG9pbnQuZW5hYmxlZCwgYnJlYWtwb2lu
dC5jb25kaXRpb24pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIEluc3BlY3Rv
ckJhY2tlbmQuc2V0QnJlYWtwb2ludChicmVha3BvaW50LnNvdXJjZUlELCBicmVha3BvaW50Lmxp
bmUsIGJyZWFrcG9pbnQuZW5hYmxlZCwgYnJlYWtwb2ludC5jb25kaXRpb24sIGRpZFNldEJyZWFr
cG9pbnQuYmluZCh0aGlzKSk7CkBAIC0zMTksMTUgKzMyNiwxNiBAQCBXZWJJbnNwZWN0b3IuQnJl
YWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0gewogCiBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1h
bmFnZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBl
OwogCi1XZWJJbnNwZWN0b3IuQnJlYWtwb2ludCA9IGZ1bmN0aW9uKGJyZWFrcG9pbnRNYW5hZ2Vy
LCBzb3VyY2VJRCwgdXJsLCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24pCitXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludCA9IGZ1bmN0aW9uKGJyZWFrcG9pbnRNYW5hZ2VyLCBzb3VyY2VJRCwgbGluZSwg
ZW5hYmxlZCwgY29uZGl0aW9uKQogewotICAgIHRoaXMudXJsID0gdXJsOwogICAgIHRoaXMubGlu
ZSA9IGxpbmU7CiAgICAgdGhpcy5zb3VyY2VJRCA9IHNvdXJjZUlEOwogICAgIHRoaXMuX2VuYWJs
ZWQgPSBlbmFibGVkOwogICAgIHRoaXMuX2NvbmRpdGlvbiA9IGNvbmRpdGlvbiB8fCAiIjsKICAg
ICB0aGlzLl9zb3VyY2VUZXh0ID0gIiI7CiAgICAgdGhpcy5fYnJlYWtwb2ludE1hbmFnZXIgPSBi
cmVha3BvaW50TWFuYWdlcjsKKyAgICAvLyBGSVhNRTogYnJlYWtwb2ludCBVUkwgaXMgb25seSBu
ZWVkZWQgZm9yIEJyZWFrcG9pbnRzU2lkZWJhclBhbmUsIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCBm
cm9tIEJyZWFrcG9pbnRNYW5hZ2VyLgorICAgIHRoaXMudXJsID0gV2ViSW5zcGVjdG9yLnBhbmVs
cy5zY3JpcHRzLnVybEZvclNvdXJjZUlEKHRoaXMuc291cmNlSUQpOwogfQogCiBXZWJJbnNwZWN0
b3IuQnJlYWtwb2ludC5qc0JyZWFrcG9pbnRJZCA9IGZ1bmN0aW9uKHNvdXJjZUlELCBsaW5lKQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdFZpZXcuanMgYi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Vmlldy5qcwppbmRleCBkODc4ZTliLi4z
NjFlYTE2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Vmll
dy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Vmlldy5qcwpAQCAt
MzQsNyArMzQsOCBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0VmlldyA9IGZ1bmN0aW9uKHNjcmlwdCkK
ICAgICB0aGlzLl9mcmFtZU5lZWRzU2V0dXAgPSB0cnVlOwogICAgIHRoaXMuX3NvdXJjZUZyYW1l
U2V0dXAgPSBmYWxzZTsKICAgICB2YXIgY2FuRWRpdFNjcmlwdHMgPSBXZWJJbnNwZWN0b3IucGFu
ZWxzLnNjcmlwdHMuY2FuRWRpdFNjcmlwdHMoKTsKLSAgICB0aGlzLnNvdXJjZUZyYW1lID0gbmV3
IFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZSh0aGlzLmVsZW1lbnQsIHRoaXMuX2FkZEJyZWFrcG9p
bnQuYmluZCh0aGlzKSwgY2FuRWRpdFNjcmlwdHMgPyB0aGlzLl9lZGl0TGluZS5iaW5kKHRoaXMp
IDogbnVsbCwgdGhpcy5fY29udGludWVUb0xpbmUuYmluZCh0aGlzKSk7CisgICAgdGhpcy5zb3Vy
Y2VGcmFtZSA9IG5ldyBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUodGhpcy5lbGVtZW50LCBjYW5F
ZGl0U2NyaXB0cyA/IHRoaXMuX2VkaXRMaW5lLmJpbmQodGhpcykgOiBudWxsKTsKKyAgICB0aGlz
Ll9zb3VyY2VGcmFtZUNvbnRyb2xsZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lQ29u
dHJvbGxlcih0aGlzLnNvdXJjZUZyYW1lLCB0aGlzLl9nZXRTb3VyY2VJRHMuYmluZCh0aGlzKSwg
dGhpcy5fc291cmNlSURGb3JMaW5lLmJpbmQodGhpcykpOwogfQogCiBXZWJJbnNwZWN0b3IuU2Ny
aXB0Vmlldy5wcm90b3R5cGUgPSB7CkBAIC04NSwyNiArODYsMTkgQEAgV2ViSW5zcGVjdG9yLlNj
cmlwdFZpZXcucHJvdG90eXBlID0gewogICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoInNjcmlwdC1yZXNvdXJjZS12aWV3cyIpLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7CiAg
ICAgfSwKIAotICAgIF9jb250aW51ZVRvTGluZTogZnVuY3Rpb24obGluZSkKLSAgICB7Ci0gICAg
ICAgIHZhciBzY3JpcHRzUGFuZWwgPSBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHM7Ci0gICAg
ICAgIGlmIChzY3JpcHRzUGFuZWwpCi0gICAgICAgICAgICBzY3JpcHRzUGFuZWwuY29udGludWVU
b0xpbmUodGhpcy5zY3JpcHQuc291cmNlSUQsIGxpbmUpOwotICAgIH0sCi0KLSAgICBfYWRkQnJl
YWtwb2ludDogZnVuY3Rpb24obGluZSkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5icmVh
a3BvaW50TWFuYWdlci5zZXRCcmVha3BvaW50KHRoaXMuc2NyaXB0LnNvdXJjZUlELCB0aGlzLnNj
cmlwdC5zb3VyY2VVUkwsIGxpbmUsIHRydWUsICIiKTsKLSAgICAgICAgaWYgKCFXZWJJbnNwZWN0
b3IucGFuZWxzLnNjcmlwdHMuYnJlYWtwb2ludHNBY3RpdmF0ZWQpCi0gICAgICAgICAgICBXZWJJ
bnNwZWN0b3IucGFuZWxzLnNjcmlwdHMudG9nZ2xlQnJlYWtwb2ludHNDbGlja2VkKCk7Ci0gICAg
fSwKLQogICAgIF9lZGl0TGluZUNvbXBsZXRlOiBmdW5jdGlvbihuZXdCb2R5KQogICAgIHsKICAg
ICAgICAgdGhpcy5zY3JpcHQuc291cmNlID0gbmV3Qm9keTsKICAgICAgICAgdGhpcy5zb3VyY2VG
cmFtZS51cGRhdGVDb250ZW50KHRoaXMuX3ByZXBlbmRXaGl0ZXNwYWNlKG5ld0JvZHkpKTsKICAg
ICB9LAogCisgICAgX2dldFNvdXJjZUlEczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFy
IHJlc3VsdCA9IHt9OworICAgICAgICByZXN1bHRbdGhpcy5zY3JpcHQuc291cmNlSURdID0gdHJ1
ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9LAorCiAgICAgX3NvdXJjZUlERm9yTGlu
ZTogZnVuY3Rpb24obGluZSkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLnNjcmlwdC5zb3Vy
Y2VJRDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFu
ZWwuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCmluZGV4
IDBhM2M3YTkuLjllZjE1YTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9TY3JpcHRzUGFuZWwuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Njcmlw
dHNQYW5lbC5qcwpAQCAtMjk3LDggKzI5NywxNCBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVs
LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHNvdXJjZUZyYW1lID0gdGhpcy5fc291cmNlRnJh
bWVGb3JTY3JpcHRPclJlc291cmNlKG9iamVjdCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAo
c291cmNlRnJhbWUpCi0gICAgICAgICAgICBzb3VyY2VGcmFtZS5hZGRCcmVha3BvaW50KGJyZWFr
cG9pbnQpOworICAgICAgICBpZiAoc291cmNlRnJhbWUgJiYgc291cmNlRnJhbWUuaGFzVGV4dFZp
ZXdlcigpKQorICAgICAgICAgICAgdGhpcy5jcmVhdGVCcmVha3BvaW50VmlldyhicmVha3BvaW50
LCBzb3VyY2VGcmFtZSk7CisKKyAgICB9LAorCisgICAgY3JlYXRlQnJlYWtwb2ludFZpZXc6IGZ1
bmN0aW9uKGJyZWFrcG9pbnQsIHNvdXJjZUZyYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5l
dyBXZWJJbnNwZWN0b3IuU2NyaXB0QnJlYWtwb2ludFZpZXcoYnJlYWtwb2ludCwgc291cmNlRnJh
bWUpOwogICAgIH0sCiAKICAgICBjYW5FZGl0U2NyaXB0czogZnVuY3Rpb24oKQpAQCAtMzMxLDcg
KzMzNyw3IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlID0gewogICAgICAg
ICAgICAgICAgIHZhciBuZXdMaW5lID0gYnJlYWtwb2ludC5saW5lOwogICAgICAgICAgICAgICAg
IGlmIChzdWNjZXNzICYmIGJyZWFrcG9pbnQubGluZSA+PSBsaW5lKQogICAgICAgICAgICAgICAg
ICAgICBuZXdMaW5lICs9IGxpbmVzQ291bnRUb1NoaWZ0OwotICAgICAgICAgICAgICAgIFdlYklu
c3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5zZXRCcmVha3BvaW50KHNvdXJjZUlELCBicmVha3Bv
aW50LnVybCwgbmV3TGluZSwgYnJlYWtwb2ludC5lbmFibGVkLCBicmVha3BvaW50LmNvbmRpdGlv
bik7CisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLnNldEJy
ZWFrcG9pbnQoc291cmNlSUQsIG5ld0xpbmUsIGJyZWFrcG9pbnQuZW5hYmxlZCwgYnJlYWtwb2lu
dC5jb25kaXRpb24pOwogICAgICAgICAgICAgfQogICAgICAgICB9OwogICAgICAgICBJbnNwZWN0
b3JCYWNrZW5kLmVkaXRTY3JpcHRTb3VyY2Uoc291cmNlSUQsIG5ld0NvbnRlbnQsIG15Y2FsbGJh
Y2suYmluZCh0aGlzKSk7CkBAIC01NjYsNiArNTcyLDEyIEBAIFdlYkluc3BlY3Rvci5TY3JpcHRz
UGFuZWwucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gdmlldy5zb3VyY2VGcmFtZTsKICAg
ICB9LAogCisgICAgdXJsRm9yU291cmNlSUQ6IGZ1bmN0aW9uKHNvdXJjZUlEKQorICAgIHsKKyAg
ICAgICAgdmFyIHNjcmlwdE9yUmVzb3VyY2UgPSB0aGlzLl9zb3VyY2VJRE1hcFtzb3VyY2VJRF07
CisgICAgICAgIHJldHVybiBzY3JpcHRPclJlc291cmNlLnVybCB8fCBzY3JpcHRPclJlc291cmNl
LnNvdXJjZVVSTDsKKyAgICB9LAorCiAgICAgX3NvdXJjZUZyYW1lRm9yU2NyaXB0T3JSZXNvdXJj
ZTogZnVuY3Rpb24oc2NyaXB0T3JSZXNvdXJjZSkKICAgICB7CiAgICAgICAgIGlmIChzY3JpcHRP
clJlc291cmNlIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlJlc291cmNlKQpAQCAtMTA5MiwzICsx
MTA0LDMyIEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlID0gewogCiBXZWJJ
bnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3Iu
UGFuZWwucHJvdG90eXBlOwogCitXZWJJbnNwZWN0b3IuU2NyaXB0QnJlYWtwb2ludFZpZXcgPSBm
dW5jdGlvbihicmVha3BvaW50LCBzb3VyY2VGcmFtZSkKK3sKKyAgICB0aGlzLl9icmVha3BvaW50
ID0gYnJlYWtwb2ludDsKKyAgICB0aGlzLl9zb3VyY2VGcmFtZSA9IHNvdXJjZUZyYW1lOworCisg
ICAgdGhpcy5fbGluZU51bWJlciA9IHRoaXMuX2JyZWFrcG9pbnQubGluZSAtIDE7CisgICAgaWYg
KHRoaXMuX2xpbmVOdW1iZXIgPj0gdGhpcy5fc291cmNlRnJhbWUudGV4dE1vZGVsLmxpbmVzQ291
bnQpCisgICAgICAgIHJldHVybjsKKworICAgIHRoaXMuX2JyZWFrcG9pbnQuc291cmNlVGV4dCA9
IHRoaXMuX3NvdXJjZUZyYW1lLnRleHRNb2RlbC5saW5lKHRoaXMuX2xpbmVOdW1iZXIpOworCisg
ICAgdGhpcy5fYnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKCJlbmFibGUtY2hhbmdlZCIsIHRo
aXMuX3Nob3csIHRoaXMpOworICAgIHRoaXMuX2JyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcigi
Y29uZGl0aW9uLWNoYW5nZWQiLCB0aGlzLl9zaG93LCB0aGlzKTsKKyAgICB0aGlzLl9icmVha3Bv
aW50LmFkZEV2ZW50TGlzdGVuZXIoInJlbW92ZWQiLCB0aGlzLl9oaWRlLCB0aGlzKTsKKworICAg
IHRoaXMuX3Nob3coKTsKK30KKworV2ViSW5zcGVjdG9yLlNjcmlwdEJyZWFrcG9pbnRWaWV3LnBy
b3RvdHlwZSA9IHsKKyAgICBfc2hvdzogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5f
c291cmNlRnJhbWUuc2V0QnJlYWtwb2ludERlY29yYXRpb24odGhpcy5fbGluZU51bWJlciwgdGhp
cy5fYnJlYWtwb2ludC5lbmFibGVkLCB0aGlzLl9icmVha3BvaW50LmNvbmRpdGlvbik7CisgICAg
fSwKKworICAgIF9oaWRlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9zb3VyY2VG
cmFtZS5yZW1vdmVCcmVha3BvaW50RGVjb3JhdGlvbih0aGlzLl9saW5lTnVtYmVyKTsKKyAgICB9
Cit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUu
anMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMKaW5kZXggOGUw
NzdjZC4uYjUzNTFiZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Nv
dXJjZUZyYW1lLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFt
ZS5qcwpAQCAtMjgsNyArMjgsNyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1XZWJJbnNwZWN0
b3IuU291cmNlRnJhbWUgPSBmdW5jdGlvbihwYXJlbnRFbGVtZW50LCBhZGRCcmVha3BvaW50RGVs
ZWdhdGUsIGVkaXREZWxlZ2F0ZSwgY29udGludWVUb0hlcmVEZWxlZ2F0ZSkKK1dlYkluc3BlY3Rv
ci5Tb3VyY2VGcmFtZSA9IGZ1bmN0aW9uKHBhcmVudEVsZW1lbnQsIGVkaXREZWxlZ2F0ZSkKIHsK
ICAgICB0aGlzLl9wYXJlbnRFbGVtZW50ID0gcGFyZW50RWxlbWVudDsKIApAQCAtMzgsMTIgKzM4
LDkgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lID0gZnVuY3Rpb24ocGFyZW50RWxlbWVudCwg
YWRkQnJlYWtwb2ludERlbGVnYXRlLCBlZGl0RGUKICAgICB0aGlzLl9tZXNzYWdlcyA9IFtdOwog
ICAgIHRoaXMuX3Jvd01lc3NhZ2VzID0ge307CiAgICAgdGhpcy5fbWVzc2FnZUJ1YmJsZXMgPSB7
fTsKLSAgICB0aGlzLmJyZWFrcG9pbnRzID0gW107CiAKICAgICB0aGlzLl9sb2FkZWQgPSBmYWxz
ZTsKIAotICAgIHRoaXMuX2NvbnRpbnVlVG9IZXJlRGVsZWdhdGUgPSBjb250aW51ZVRvSGVyZURl
bGVnYXRlOwotICAgIHRoaXMuX2FkZEJyZWFrcG9pbnREZWxlZ2F0ZSA9IGFkZEJyZWFrcG9pbnRE
ZWxlZ2F0ZTsKICAgICB0aGlzLl9lZGl0RGVsZWdhdGUgPSBlZGl0RGVsZWdhdGU7CiAgICAgdGhp
cy5fcG9wb3Zlck9iamVjdEdyb3VwID0gInBvcG92ZXIiOwogfQpAQCAtMTA1LDIzICsxMDIsNiBA
QCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhp
cy5fbGluZU51bWJlclRvUmV2ZWFsID0gbGluZU51bWJlcjsKICAgICB9LAogCi0gICAgYWRkQnJl
YWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2ludCkKLSAgICB7Ci0gICAgICAgIHRoaXMuYnJlYWtw
b2ludHMucHVzaChicmVha3BvaW50KTsKLSAgICAgICAgYnJlYWtwb2ludC5hZGRFdmVudExpc3Rl
bmVyKCJyZW1vdmVkIiwgdGhpcy5fYnJlYWtwb2ludFJlbW92ZWQsIHRoaXMpOwotICAgICAgICBp
ZiAodGhpcy5fdGV4dFZpZXdlcikKLSAgICAgICAgICAgIHRoaXMuX2FkZEJyZWFrcG9pbnRUb1Nv
dXJjZShicmVha3BvaW50KTsKLSAgICB9LAotCi0gICAgX2JyZWFrcG9pbnRSZW1vdmVkOiBmdW5j
dGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQudGFyZ2V0
OwotCi0gICAgICAgIHRoaXMuYnJlYWtwb2ludHMucmVtb3ZlKGJyZWFrcG9pbnQpOwotICAgICAg
ICBpZiAodGhpcy5fdGV4dFZpZXdlcikKLSAgICAgICAgICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9p
bnRGcm9tU291cmNlKGJyZWFrcG9pbnQpOwotICAgIH0sCi0KICAgICBhZGRNZXNzYWdlOiBmdW5j
dGlvbihtc2cpCiAgICAgewogICAgICAgICAvLyBEb24ndCBhZGQgdGhlIG1lc3NhZ2UgaWYgdGhl
cmUgaXMgbm8gbWVzc2FnZSBvciB2YWxpZCBsaW5lIG9yIGlmIHRoZSBtc2cgaXNuJ3QgYW4gZXJy
b3Igb3Igd2FybmluZy4KQEAgLTE5OCw2ICsxNzgsMTEgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9saW5lVG9IaWdobGln
aHQ7CiAgICAgfSwKIAorICAgIGhhc1RleHRWaWV3ZXI6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiAhIXRoaXMuX3RleHRWaWV3ZXI7CisgICAgfSwKKwogICAgIF9jcmVhdGVWaWV3
ZXJJZk5lZWRlZDogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl92aXNpYmxl
IHx8ICF0aGlzLl9sb2FkZWQgfHwgdGhpcy5fdGV4dFZpZXdlcikKQEAgLTIxMSwxNCArMTk2LDEw
IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIGVsZW1l
bnQuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIiwgdGhpcy5fc2Nyb2xsLmJpbmQodGhpcyksIHRy
dWUpOwogICAgICAgICB0aGlzLl9wYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKGVsZW1lbnQpOwog
Ci0gICAgICAgIHRoaXMuX25lZWRzUHJvZ3JhbUNvdW50ZXJJbWFnZSA9IHRydWU7Ci0gICAgICAg
IHRoaXMuX25lZWRzQnJlYWtwb2ludEltYWdlcyA9IHRydWU7Ci0KICAgICAgICAgdGhpcy5fdGV4
dFZpZXdlci5iZWdpblVwZGF0ZXMoKTsKIAogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLm1pbWVU
eXBlID0gdGhpcy5fbWltZVR5cGU7CiAgICAgICAgIHRoaXMuX2FkZEV4aXN0aW5nTWVzc2FnZXNU
b1NvdXJjZSgpOwotICAgICAgICB0aGlzLl9hZGRFeGlzdGluZ0JyZWFrcG9pbnRzVG9Tb3VyY2Uo
KTsKICAgICAgICAgdGhpcy5fdXBkYXRlRXhlY3V0aW9uTGluZSgpOwogICAgICAgICB0aGlzLl91
cGRhdGVEaWZmRGVjb3JhdGlvbnMoKTsKICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZXNpemUo
KTsKQEAgLTIzOCw3ICsyMTksMTEgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0TGluZSh0aGlzLl9saW5lVG9IaWdobGln
aHQpOwogICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2xpbmVUb0hpZ2hsaWdodDsKICAgICAgICAg
fQorCisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJ0ZXh0LXZpZXdlci1j
cmVhdGVkIik7CisKICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5lbmRVcGRhdGVzKCk7CisKICAg
ICAgICAgaWYgKHRoaXMuX2VkaXREZWxlZ2F0ZSkKICAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3
ZXIuZWRpdENhbGxiYWNrID0gdGhpcy5fZWRpdERlbGVnYXRlOwogICAgIH0sCkBAIC0zMDksMjQg
KzI5NCw2IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAg
IG1zZy5fcmVzb3VyY2VNZXNzYWdlUmVwZWF0Q291bnRFbGVtZW50LnRleHRDb250ZW50ID0gV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKCIgKHJlcGVhdGVkICVkIHRpbWVzKSIsIG1zZy5yZXBlYXRDb3Vu
dCk7CiAgICAgfSwKIAotICAgIF9icmVha3BvaW50Q2hhbmdlZDogZnVuY3Rpb24oZXZlbnQpCi0g
ICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50LnRhcmdldDsKLSAgICAgICAgdmFy
IGxpbmVOdW1iZXIgPSBicmVha3BvaW50LmxpbmUgLSAxOwotICAgICAgICBpZiAobGluZU51bWJl
ciA+PSB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBpZiAoYnJlYWtwb2ludC5lbmFibGVkKQotICAgICAgICAgICAgdGhpcy5fdGV4dFZp
ZXdlci5yZW1vdmVEZWNvcmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJlYWtwb2ludC1kaXNh
YmxlZCIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmFkZERl
Y29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50LWRpc2FibGVkIik7Ci0KLSAg
ICAgICAgaWYgKGJyZWFrcG9pbnQuY29uZGl0aW9uKQotICAgICAgICAgICAgdGhpcy5fdGV4dFZp
ZXdlci5hZGREZWNvcmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJlYWtwb2ludC1jb25kaXRp
b25hbCIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLnJlbW92
ZURlY29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50LWNvbmRpdGlvbmFsIik7
Ci0gICAgfSwKLQogICAgIF91cGRhdGVFeGVjdXRpb25MaW5lOiBmdW5jdGlvbihwcmV2aW91c0xp
bmUpCiAgICAgewogICAgICAgICBpZiAocHJldmlvdXNMaW5lKSB7CkBAIC00MjksODYgKzM5Niw2
MCBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICBtc2cu
X3Jlc291cmNlTWVzc2FnZUxpbmVFbGVtZW50ID0gbWVzc2FnZUxpbmVFbGVtZW50OwogICAgIH0s
CiAKLSAgICBfYWRkRXhpc3RpbmdCcmVha3BvaW50c1RvU291cmNlOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYnJlYWtwb2ludHMubGVuZ3RoOyAr
K2kpCi0gICAgICAgICAgICB0aGlzLl9hZGRCcmVha3BvaW50VG9Tb3VyY2UodGhpcy5icmVha3Bv
aW50c1tpXSk7Ci0gICAgfSwKLQotICAgIF9hZGRCcmVha3BvaW50VG9Tb3VyY2U6IGZ1bmN0aW9u
KGJyZWFrcG9pbnQpCisgICAgc2V0QnJlYWtwb2ludERlY29yYXRpb246IGZ1bmN0aW9uKGxpbmVO
dW1iZXIsIGVuYWJsZWQsIGhhc0NvbmRpdGlvbikKICAgICB7Ci0gICAgICAgIGJyZWFrcG9pbnQu
YWRkRXZlbnRMaXN0ZW5lcigiZW5hYmxlLWNoYW5nZWQiLCB0aGlzLl9icmVha3BvaW50Q2hhbmdl
ZCwgdGhpcyk7Ci0gICAgICAgIGJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29uZGl0aW9u
LWNoYW5nZWQiLCB0aGlzLl9icmVha3BvaW50Q2hhbmdlZCwgdGhpcyk7Ci0KLSAgICAgICAgdmFy
IGxpbmVOdW1iZXIgPSBicmVha3BvaW50LmxpbmUgLSAxOwotICAgICAgICBpZiAobGluZU51bWJl
ciA+PSB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICB0aGlzLl90ZXh0TW9kZWwuc2V0QXR0cmlidXRlKGxpbmVOdW1iZXIsICJicmVha3Bv
aW50IiwgYnJlYWtwb2ludCk7Ci0gICAgICAgIGJyZWFrcG9pbnQuc291cmNlVGV4dCA9IHRoaXMu
X3RleHRNb2RlbC5saW5lKGJyZWFrcG9pbnQubGluZSAtIDEpOwotCiAgICAgICAgIHRoaXMuX3Rl
eHRWaWV3ZXIuYmVnaW5VcGRhdGVzKCk7CiAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuYWRkRGVj
b3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQiKTsKLSAgICAgICAgaWYgKCFi
cmVha3BvaW50LmVuYWJsZWQpCisgICAgICAgIGlmICghZW5hYmxlZCkKICAgICAgICAgICAgIHRo
aXMuX3RleHRWaWV3ZXIuYWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9p
bnQtZGlzYWJsZWQiKTsKLSAgICAgICAgaWYgKGJyZWFrcG9pbnQuY29uZGl0aW9uKQorICAgICAg
ICBlbHNlCisgICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLnJlbW92ZURlY29yYXRpb24obGlu
ZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50LWRpc2FibGVkIik7CisgICAgICAgIGlmIChoYXND
b25kaXRpb24pCiAgICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmFkZERlY29yYXRpb24obGlu
ZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50LWNvbmRpdGlvbmFsIik7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIucmVtb3ZlRGVjb3JhdGlvbihsaW5lTnVtYmVy
LCAid2Via2l0LWJyZWFrcG9pbnQtY29uZGl0aW9uYWwiKTsKICAgICAgICAgdGhpcy5fdGV4dFZp
ZXdlci5lbmRVcGRhdGVzKCk7CiAgICAgfSwKIAotICAgIF9yZW1vdmVCcmVha3BvaW50RnJvbVNv
dXJjZTogZnVuY3Rpb24oYnJlYWtwb2ludCkKKyAgICByZW1vdmVCcmVha3BvaW50RGVjb3JhdGlv
bjogZnVuY3Rpb24obGluZU51bWJlcikKICAgICB7Ci0gICAgICAgIGJyZWFrcG9pbnQucmVtb3Zl
RXZlbnRMaXN0ZW5lcigiZW5hYmxlLWNoYW5nZWQiLCBudWxsLCB0aGlzKTsKLSAgICAgICAgYnJl
YWtwb2ludC5yZW1vdmVFdmVudExpc3RlbmVyKCJjb25kaXRpb24tY2hhbmdlZCIsIG51bGwsIHRo
aXMpOwotCi0gICAgICAgIHZhciBsaW5lTnVtYmVyID0gYnJlYWtwb2ludC5saW5lIC0gMTsKICAg
ICAgICAgdGhpcy5fdGV4dFZpZXdlci5iZWdpblVwZGF0ZXMoKTsKLSAgICAgICAgdGhpcy5fdGV4
dE1vZGVsLnJlbW92ZUF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiYnJlYWtwb2ludCIpOwogICAgICAg
ICB0aGlzLl90ZXh0Vmlld2VyLnJlbW92ZURlY29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1i
cmVha3BvaW50Iik7CiAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIucmVtb3ZlRGVjb3JhdGlvbihs
aW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQtZGlzYWJsZWQiKTsKICAgICAgICAgdGhpcy5f
dGV4dFZpZXdlci5yZW1vdmVEZWNvcmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJlYWtwb2lu
dC1jb25kaXRpb25hbCIpOwogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmVuZFVwZGF0ZXMoKTsK
ICAgICB9LAogCi0gICAgX2NvbnRleHRNZW51OiBmdW5jdGlvbihldmVudCkKKyAgICBlZGl0QnJl
YWtwb2ludENvbmRpdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwgY29uZGl0aW9uLCBjYWxsYmFj
aykKICAgICB7Ci0gICAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQuZW5jbG9zaW5nTm9k
ZU9yU2VsZldpdGhDbGFzcygid2Via2l0LWxpbmUtbnVtYmVyIik7Ci0gICAgICAgIGlmICghdGFy
Z2V0KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgcm93ID0gdGFyZ2V0LnBhcmVu
dEVsZW1lbnQ7CisgICAgICAgIHRoaXMuX3Nob3dCcmVha3BvaW50Q29uZGl0aW9uUG9wdXAobGlu
ZU51bWJlciArIDEpOwogCi0gICAgICAgIGlmICghV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRz
KQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgaGlkZVBvcHVwID0gdGhpcy5faGlk
ZUJyZWFrcG9pbnRDb25kaXRpb25Qb3B1cC5iaW5kKHRoaXMsIGxpbmVOdW1iZXIgKyAxKTsKIAot
ICAgICAgICB2YXIgbGluZU51bWJlciA9IHJvdy5saW5lTnVtYmVyOwotICAgICAgICB2YXIgY29u
dGV4dE1lbnUgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnRleHRNZW51KCk7Ci0KLSAgICAgICAgY29u
dGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNvbnRpbnVlIHRvIEhl
cmUiKSwgdGhpcy5fY29udGludWVUb0hlcmVEZWxlZ2F0ZS5iaW5kKHRoaXMsIGxpbmVOdW1iZXIg
KyAxKSk7CisgICAgICAgIGZ1bmN0aW9uIGNvbW1pdHRlZENhbGxiYWNrKGVsZW1lbnQsIG5ld1Rl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGhpZGVQb3B1cCgpOworICAgICAgICAgICAgY2Fs
bGJhY2sodHJ1ZSwgbmV3VGV4dCk7CisgICAgICAgIH0KIAotICAgICAgICB2YXIgYnJlYWtwb2lu
dCA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUobGluZU51bWJlciwgImJyZWFrcG9pbnQi
KTsKLSAgICAgICAgaWYgKCFicmVha3BvaW50KSB7Ci0gICAgICAgICAgICAvLyBUaGlzIHJvdyBk
b2Vzbid0IGhhdmUgYSBicmVha3BvaW50OiBXZSB3YW50IHRvIHNob3cgQWRkIEJyZWFrcG9pbnQg
YW5kIEFkZCBhbmQgRWRpdCBCcmVha3BvaW50LgotICAgICAgICAgICAgY29udGV4dE1lbnUuYXBw
ZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkFkZCBCcmVha3BvaW50IiksIHRoaXMuX2Fk
ZEJyZWFrcG9pbnREZWxlZ2F0ZS5iaW5kKHRoaXMsIGxpbmVOdW1iZXIgKyAxKSk7CisgICAgICAg
IGZ1bmN0aW9uIGNhbmNlbGxlZENhbGxiYWNrKCkKKyAgICAgICAgeworICAgICAgICAgICAgaGlk
ZVBvcHVwKCk7CisgICAgICAgICAgICBjYWxsYmFjayhmYWxzZSk7CisgICAgICAgIH0KIAotICAg
ICAgICAgICAgZnVuY3Rpb24gYWRkQ29uZGl0aW9uYWxCcmVha3BvaW50KCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICB0aGlzLl9hZGRCcmVha3BvaW50RGVsZWdhdGUobGluZU51bWJl
ciArIDEpOwotICAgICAgICAgICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fdGV4dE1vZGVs
LmdldEF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiYnJlYWtwb2ludCIpOwotICAgICAgICAgICAgICAg
IGlmIChicmVha3BvaW50KQotICAgICAgICAgICAgICAgICAgICB0aGlzLl9lZGl0QnJlYWtwb2lu
dENvbmRpdGlvbihicmVha3BvaW50KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgV2ViSW5zcGVj
dG9yLnN0YXJ0RWRpdGluZyh0aGlzLl9lZGl0b3JFbGVtZW50LCBjb21taXR0ZWRDYWxsYmFjaywg
Y2FuY2VsbGVkQ2FsbGJhY2spOworICAgICAgICB0aGlzLl9lZGl0b3JFbGVtZW50LnZhbHVlID0g
Y29uZGl0aW9uOworICAgICAgICB0aGlzLl9lZGl0b3JFbGVtZW50LnNlbGVjdCgpOworICAgIH0s
CiAKLSAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJBZGQgQ29uZGl0aW9uYWwgQnJlYWtwb2ludOKApiIpLCBhZGRDb25kaXRpb25hbEJyZWFr
cG9pbnQuYmluZCh0aGlzKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBUaGlz
IHJvdyBoYXMgYSBicmVha3BvaW50LCB3ZSB3YW50IHRvIHNob3cgZWRpdCBhbmQgcmVtb3ZlIGJy
ZWFrcG9pbnQsIGFuZCBlaXRoZXIgZGlzYWJsZSBvciBlbmFibGUuCi0gICAgICAgICAgICBjb250
ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmVtb3ZlIEJyZWFrcG9p
bnQiKSwgYnJlYWtwb2ludC5yZW1vdmUuYmluZChicmVha3BvaW50KSk7Ci0gICAgICAgICAgICBj
b250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiRWRpdCBCcmVha3Bv
aW504oCmIiksIHRoaXMuX2VkaXRCcmVha3BvaW50Q29uZGl0aW9uLmJpbmQodGhpcywgYnJlYWtw
b2ludCkpOwotICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQuZW5hYmxlZCkKLSAgICAgICAgICAg
ICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiRGlzYWJs
ZSBCcmVha3BvaW50IiksIGZ1bmN0aW9uKCkgeyBicmVha3BvaW50LmVuYWJsZWQgPSBmYWxzZTsg
fSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5k
SXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkVuYWJsZSBCcmVha3BvaW50IiksIGZ1bmN0aW9u
KCkgeyBicmVha3BvaW50LmVuYWJsZWQgPSB0cnVlOyB9KTsKLSAgICAgICAgfQotICAgICAgICBj
b250ZXh0TWVudS5zaG93KGV2ZW50KTsKKyAgICBfY29udGV4dE1lbnU6IGZ1bmN0aW9uKGV2ZW50
KQorICAgIHsKKyAgICAgICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldC5lbmNsb3NpbmdOb2Rl
T3JTZWxmV2l0aENsYXNzKCJ3ZWJraXQtbGluZS1udW1iZXIiKTsKKyAgICAgICAgaWYgKCF0YXJn
ZXQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHZhciBsaW5lTnVtYmVyID0gdGFyZ2V0
LnBhcmVudEVsZW1lbnQubGluZU51bWJlcjsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9M
aXN0ZW5lcnMoImNvbnRleHRtZW51IiwgeyBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLCBvcmlnaW5h
bEV2ZW50OiBldmVudCB9KTsKICAgICB9LAogCiAgICAgX3Njcm9sbDogZnVuY3Rpb24oZXZlbnQp
CkBAIC01MjUsMTggKzQ2Niw4IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUg
PSB7CiAgICAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2Vs
ZldpdGhDbGFzcygid2Via2l0LWxpbmUtbnVtYmVyIik7CiAgICAgICAgIGlmICghdGFyZ2V0KQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgcm93ID0gdGFyZ2V0LnBhcmVudEVsZW1l
bnQ7Ci0KLSAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSByb3cubGluZU51bWJlcjsKLQotICAgICAg
ICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUobGluZU51bWJl
ciwgImJyZWFrcG9pbnQiKTsKLSAgICAgICAgaWYgKGJyZWFrcG9pbnQpIHsKLSAgICAgICAgICAg
IGlmIChldmVudC5zaGlmdEtleSkKLSAgICAgICAgICAgICAgICBicmVha3BvaW50LmVuYWJsZWQg
PSAhYnJlYWtwb2ludC5lbmFibGVkOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGJyZWFrcG9pbnQucmVtb3ZlKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdGhpcy5f
YWRkQnJlYWtwb2ludERlbGVnYXRlKGxpbmVOdW1iZXIgKyAxKTsKKyAgICAgICAgdmFyIGxpbmVO
dW1iZXIgPSB0YXJnZXQucGFyZW50RWxlbWVudC5saW5lTnVtYmVyOworICAgICAgICB0aGlzLmRp
c3BhdGNoRXZlbnRUb0xpc3RlbmVycygibW91c2Vkb3duIiwgeyBsaW5lTnVtYmVyOiBsaW5lTnVt
YmVyLCBvcmlnaW5hbEV2ZW50OiBldmVudCB9KTsKICAgICAgICAgZXZlbnQucHJldmVudERlZmF1
bHQoKTsKICAgICB9LAogCkBAIC02OTgsNDAgKzYyOSw4IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VG
cmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5l
dmFsdWF0ZUluU2VsZWN0ZWRDYWxsRnJhbWUoZWxlbWVudC50ZXh0Q29udGVudCwgZmFsc2UsIHRo
aXMuX3BvcG92ZXJPYmplY3RHcm91cCwgZXZhbHVhdGVDYWxsYmFjay5iaW5kKHRoaXMpKTsKICAg
ICB9LAogCi0gICAgX2VkaXRCcmVha3BvaW50Q29uZGl0aW9uOiBmdW5jdGlvbihicmVha3BvaW50
KQotICAgIHsKLSAgICAgICAgdGhpcy5fc2hvd0JyZWFrcG9pbnRDb25kaXRpb25Qb3B1cChicmVh
a3BvaW50LmxpbmUpOwotCi0gICAgICAgIGZ1bmN0aW9uIGNvbW1pdHRlZChlbGVtZW50LCBuZXdU
ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBicmVha3BvaW50LmNvbmRpdGlvbiA9IG5ld1Rl
eHQ7Ci0gICAgICAgICAgICBkaXNtaXNzZWQuY2FsbCh0aGlzKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGZ1bmN0aW9uIGRpc21pc3NlZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0aGlz
Ll9jb25kaXRpb25FbGVtZW50KQotICAgICAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIucmVt
b3ZlRGVjb3JhdGlvbihicmVha3BvaW50LmxpbmUgLSAxLCB0aGlzLl9jb25kaXRpb25FbGVtZW50
KTsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jb25kaXRpb25FZGl0b3JFbGVtZW50OwotICAg
ICAgICAgICAgZGVsZXRlIHRoaXMuX2NvbmRpdGlvbkVsZW1lbnQ7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2YXIgZGlzbWlzc2VkSGFuZGxlciA9IGRpc21pc3NlZC5iaW5kKHRoaXMpOwotICAgICAg
ICB0aGlzLl9jb25kaXRpb25FZGl0b3JFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCBk
aXNtaXNzZWRIYW5kbGVyLCBmYWxzZSk7Ci0KLSAgICAgICAgV2ViSW5zcGVjdG9yLnN0YXJ0RWRp
dGluZyh0aGlzLl9jb25kaXRpb25FZGl0b3JFbGVtZW50LCBjb21taXR0ZWQuYmluZCh0aGlzKSwg
ZGlzbWlzc2VkSGFuZGxlcik7Ci0gICAgICAgIHRoaXMuX2NvbmRpdGlvbkVkaXRvckVsZW1lbnQu
dmFsdWUgPSBicmVha3BvaW50LmNvbmRpdGlvbjsKLSAgICAgICAgdGhpcy5fY29uZGl0aW9uRWRp
dG9yRWxlbWVudC5zZWxlY3QoKTsKLSAgICB9LAotCiAgICAgX3Nob3dCcmVha3BvaW50Q29uZGl0
aW9uUG9wdXA6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCiAgICAgewotICAgICAgICB0aGlzLl9jb25k
aXRpb25FbGVtZW50ID0gdGhpcy5fY3JlYXRlQ29uZGl0aW9uRWxlbWVudChsaW5lTnVtYmVyKTsK
LSAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5hZGREZWNvcmF0aW9uKGxpbmVOdW1iZXIgLSAxLCB0
aGlzLl9jb25kaXRpb25FbGVtZW50KTsKLSAgICB9LAotCi0gICAgX2NyZWF0ZUNvbmRpdGlvbkVs
ZW1lbnQ6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCi0gICAgewogICAgICAgICB2YXIgY29uZGl0aW9u
RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICBjb25kaXRp
b25FbGVtZW50LmNsYXNzTmFtZSA9ICJzb3VyY2UtZnJhbWUtYnJlYWtwb2ludC1jb25kaXRpb24i
OwogCkBAIC03NDYsOSArNjQ1LDE3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5
cGUgPSB7CiAgICAgICAgIGVkaXRvckVsZW1lbnQuY2xhc3NOYW1lID0gIm1vbm9zcGFjZSI7CiAg
ICAgICAgIGVkaXRvckVsZW1lbnQudHlwZSA9ICJ0ZXh0IgogICAgICAgICBjb25kaXRpb25FbGVt
ZW50LmFwcGVuZENoaWxkKGVkaXRvckVsZW1lbnQpOwotICAgICAgICB0aGlzLl9jb25kaXRpb25F
ZGl0b3JFbGVtZW50ID0gZWRpdG9yRWxlbWVudDsKIAotICAgICAgICByZXR1cm4gY29uZGl0aW9u
RWxlbWVudDsKKyAgICAgICAgdGhpcy5fY29uZGl0aW9uRWxlbWVudCA9IGNvbmRpdGlvbkVsZW1l
bnQ7CisgICAgICAgIHRoaXMuX2VkaXRvckVsZW1lbnQgPSBlZGl0b3JFbGVtZW50OworICAgICAg
ICB0aGlzLl90ZXh0Vmlld2VyLmFkZERlY29yYXRpb24obGluZU51bWJlciAtIDEsIHRoaXMuX2Nv
bmRpdGlvbkVsZW1lbnQpOworICAgIH0sCisKKyAgICBfaGlkZUJyZWFrcG9pbnRDb25kaXRpb25Q
b3B1cDogZnVuY3Rpb24obGluZU51bWJlcikKKyAgICB7CisgICAgICAgIHRoaXMuX3RleHRWaWV3
ZXIucmVtb3ZlRGVjb3JhdGlvbihsaW5lTnVtYmVyIC0gMSwgdGhpcy5fY29uZGl0aW9uRWxlbWVu
dCk7CisgICAgICAgIGRlbGV0ZSB0aGlzLl9lZGl0b3JFbGVtZW50OworICAgICAgICBkZWxldGUg
dGhpcy5fY29uZGl0aW9uRWxlbWVudDsKICAgICB9LAogCiAgICAgX2V2YWxTZWxlY3Rpb25JbkNh
bGxGcmFtZTogZnVuY3Rpb24oZXZlbnQpCkBAIC03NzYsNSArNjgzLDExNiBAQCBXZWJJbnNwZWN0
b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgIH0KIH0KIAotCiBXZWJJbnNwZWN0b3Iu
U291cmNlRnJhbWUucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJv
dG90eXBlOworCitXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVDb250cm9sbGVyID0gZnVuY3Rpb24o
c291cmNlRnJhbWUsIGdldFNvdXJjZUlEcywgc291cmNlSURGb3JMaW5lKQoreworICAgIHRoaXMu
X3NvdXJjZUZyYW1lID0gc291cmNlRnJhbWU7CisgICAgdGhpcy5fZ2V0U291cmNlSURzID0gZ2V0
U291cmNlSURzOworICAgIHRoaXMuX3NvdXJjZUlERm9yTGluZSA9IHNvdXJjZUlERm9yTGluZTsK
KworICAgIHRoaXMuX3NvdXJjZUZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoInRleHQtdmlld2VyLWNy
ZWF0ZWQiLCB0aGlzLl90ZXh0Vmlld2VyQ3JlYXRlZCwgdGhpcyk7CisgICAgdGhpcy5fc291cmNl
RnJhbWUuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCB0aGlzLl9jb250ZXh0TWVudSwg
dGhpcyk7CisgICAgdGhpcy5fc291cmNlRnJhbWUuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3du
IiwgdGhpcy5fbW91c2VEb3duLCB0aGlzKTsKK30KKworV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1l
Q29udHJvbGxlci5wcm90b3R5cGUgPSB7CisgICAgX3RleHRWaWV3ZXJDcmVhdGVkOiBmdW5jdGlv
bihldmVudCkKKyAgICB7CisgICAgICAgIGlmICghV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRz
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBicmVha3BvaW50cyA9IFdlYklu
c3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5icmVha3BvaW50c0ZvclNvdXJjZUlEcyh0aGlzLl9n
ZXRTb3VyY2VJRHMoKSk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnJlYWtwb2ludHMu
bGVuZ3RoOyArK2kpCisgICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMuY3Jl
YXRlQnJlYWtwb2ludFZpZXcoYnJlYWtwb2ludHNbaV0sIHRoaXMuX3NvdXJjZUZyYW1lKTsKKyAg
ICB9LAorCisgICAgX2NvbnRleHRNZW51OiBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAg
IHZhciBsaW5lTnVtYmVyID0gZXZlbnQuZGF0YS5saW5lTnVtYmVyICsgMTsKKyAgICAgICAgdmFy
IG9yaWdpbmFsRXZlbnQgPSBldmVudC5kYXRhLm9yaWdpbmFsRXZlbnQ7CisKKyAgICAgICAgaWYg
KCFXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgdmFyIHNvdXJjZUlEID0gdGhpcy5fc291cmNlSURGb3JMaW5lKGxpbmVOdW1iZXIpOwor
ICAgICAgICBpZiAoIXNvdXJjZUlEKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZh
ciBjb250ZXh0TWVudSA9IG5ldyBXZWJJbnNwZWN0b3IuQ29udGV4dE1lbnUoKTsKKyAgICAgICAg
Y29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNvbnRpbnVlIHRv
IEhlcmUiKSwgdGhpcy5fY29udGludWVUb0xpbmUuYmluZCh0aGlzLCBzb3VyY2VJRCwgbGluZU51
bWJlcikpOworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IFdlYkluc3BlY3Rvci5icmVha3BvaW50
TWFuYWdlci5maW5kQnJlYWtwb2ludChzb3VyY2VJRCwgbGluZU51bWJlcik7CisgICAgICAgIGlm
IChicmVha3BvaW50KSB7CisgICAgICAgICAgICAvLyBUaGlzIHJvdyBoYXMgYSBicmVha3BvaW50
LCB3ZSB3YW50IHRvIHNob3cgZWRpdCBhbmQgcmVtb3ZlIGJyZWFrcG9pbnQsIGFuZCBlaXRoZXIg
ZGlzYWJsZSBvciBlbmFibGUuCisgICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiUmVtb3ZlIEJyZWFrcG9pbnQiKSwgYnJlYWtwb2ludC5yZW1v
dmUuYmluZChicmVha3BvaW50KSk7CisgICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVt
KFdlYkluc3BlY3Rvci5VSVN0cmluZygiRWRpdCBCcmVha3BvaW504oCmIiksIHRoaXMuX2VkaXRC
cmVha3BvaW50Q29uZGl0aW9uLmJpbmQodGhpcywgYnJlYWtwb2ludCkpOworICAgICAgICAgICAg
aWYgKGJyZWFrcG9pbnQuZW5hYmxlZCkKKyAgICAgICAgICAgICAgICBjb250ZXh0TWVudS5hcHBl
bmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiRGlzYWJsZSBCcmVha3BvaW50IiksIGZ1bmN0
aW9uKCkgeyBicmVha3BvaW50LmVuYWJsZWQgPSBmYWxzZTsgfSk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIkVuYWJsZSBCcmVha3BvaW50IiksIGZ1bmN0aW9uKCkgeyBicmVha3BvaW50LmVuYWJs
ZWQgPSB0cnVlOyB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFRoaXMgcm93
IGRvZXNuJ3QgaGF2ZSBhIGJyZWFrcG9pbnQ6IFdlIHdhbnQgdG8gc2hvdyBBZGQgQnJlYWtwb2lu
dCBhbmQgQWRkIGFuZCBFZGl0IEJyZWFrcG9pbnQuCisgICAgICAgICAgICBjb250ZXh0TWVudS5h
cHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiQWRkIEJyZWFrcG9pbnQiKSwgdGhpcy5f
YWRkQnJlYWtwb2ludC5iaW5kKHRoaXMsIHNvdXJjZUlELCBsaW5lTnVtYmVyKSk7CisgICAgICAg
ICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiQWRkIENv
bmRpdGlvbmFsIEJyZWFrcG9pbnTigKYiKSwgdGhpcy5fYWRkQ29uZGl0aW9uYWxCcmVha3BvaW50
LmJpbmQodGhpcywgc291cmNlSUQsIGxpbmVOdW1iZXIpKTsKKyAgICAgICAgfQorICAgICAgICBj
b250ZXh0TWVudS5zaG93KG9yaWdpbmFsRXZlbnQpOworICAgIH0sCisKKyAgICBfbW91c2VEb3du
OiBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIHZhciBsaW5lTnVtYmVyID0gZXZlbnQu
ZGF0YS5saW5lTnVtYmVyICsgMTsKKyAgICAgICAgdmFyIG9yaWdpbmFsRXZlbnQgPSBldmVudC5k
YXRhLm9yaWdpbmFsRXZlbnQ7CisKKyAgICAgICAgaWYgKCFXZWJJbnNwZWN0b3IucGFuZWxzLnNj
cmlwdHMpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIHNvdXJjZUlEID0gdGhp
cy5fc291cmNlSURGb3JMaW5lKGxpbmVOdW1iZXIpOworICAgICAgICBpZiAoIXNvdXJjZUlEKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBicmVha3BvaW50ID0gV2ViSW5zcGVj
dG9yLmJyZWFrcG9pbnRNYW5hZ2VyLmZpbmRCcmVha3BvaW50KHNvdXJjZUlELCBsaW5lTnVtYmVy
KTsKKyAgICAgICAgaWYgKGJyZWFrcG9pbnQpIHsKKyAgICAgICAgICAgIGlmIChvcmlnaW5hbEV2
ZW50LnNoaWZ0S2V5KQorICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQuZW5hYmxlZCA9ICFicmVh
a3BvaW50LmVuYWJsZWQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYnJlYWtw
b2ludC5yZW1vdmUoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB0aGlzLl9hZGRCcmVh
a3BvaW50KHNvdXJjZUlELCBsaW5lTnVtYmVyKTsKKyAgICB9LAorCisgICAgX2FkZEJyZWFrcG9p
bnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCBsaW5lTnVtYmVyLCBjb25kaXRpb24pCisgICAgeworICAg
ICAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuc2V0QnJlYWtwb2ludChzb3VyY2VJ
RCwgbGluZU51bWJlciwgdHJ1ZSwgY29uZGl0aW9uIHx8ICIiKTsKKyAgICAgICAgaWYgKCFXZWJJ
bnNwZWN0b3IucGFuZWxzLnNjcmlwdHMuYnJlYWtwb2ludHNBY3RpdmF0ZWQpCisgICAgICAgICAg
ICBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMudG9nZ2xlQnJlYWtwb2ludHNDbGlja2VkKCk7
CisgICAgfSwKKworICAgIF9hZGRDb25kaXRpb25hbEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHNvdXJj
ZUlELCBsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgdmFyIHNvdXJjZUZyYW1lTGluZU51bWJl
ciA9IGxpbmVOdW1iZXIgLSAxOworICAgICAgICBmdW5jdGlvbiBkaWRFZGl0QnJlYWtwb2ludENv
bmRpdGlvbihjb21taXR0ZWQsIGNvbmRpdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgdGhp
cy5fc291cmNlRnJhbWUucmVtb3ZlQnJlYWtwb2ludERlY29yYXRpb24oc291cmNlRnJhbWVMaW5l
TnVtYmVyKTsKKyAgICAgICAgICAgIGlmIChjb21taXR0ZWQpCisgICAgICAgICAgICAgICAgdGhp
cy5fYWRkQnJlYWtwb2ludChzb3VyY2VJRCwgbGluZU51bWJlciwgY29uZGl0aW9uKTsKKyAgICAg
ICAgfQorICAgICAgICB0aGlzLl9zb3VyY2VGcmFtZS5zZXRCcmVha3BvaW50RGVjb3JhdGlvbihz
b3VyY2VGcmFtZUxpbmVOdW1iZXIsIHRydWUsIHRydWUpOworICAgICAgICB0aGlzLl9zb3VyY2VG
cmFtZS5lZGl0QnJlYWtwb2ludENvbmRpdGlvbihzb3VyY2VGcmFtZUxpbmVOdW1iZXIsICIiLCBk
aWRFZGl0QnJlYWtwb2ludENvbmRpdGlvbi5iaW5kKHRoaXMpKTsKKyAgICB9LAorCisgICAgX2Vk
aXRCcmVha3BvaW50Q29uZGl0aW9uOiBmdW5jdGlvbihicmVha3BvaW50KQorICAgIHsKKyAgICAg
ICAgdmFyIHNvdXJjZUZyYW1lTGluZU51bWJlciA9IGJyZWFrcG9pbnQubGluZSAtIDE7CisgICAg
ICAgIGZ1bmN0aW9uIGRpZEVkaXRCcmVha3BvaW50Q29uZGl0aW9uKGNvbW1pdHRlZCwgY29uZGl0
aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29tbWl0dGVkKQorICAgICAgICAgICAg
ICAgIGJyZWFrcG9pbnQuY29uZGl0aW9uID0gY29uZGl0aW9uOworICAgICAgICB9CisgICAgICAg
IHRoaXMuX3NvdXJjZUZyYW1lLmVkaXRCcmVha3BvaW50Q29uZGl0aW9uKHNvdXJjZUZyYW1lTGlu
ZU51bWJlciwgYnJlYWtwb2ludC5jb25kaXRpb24sIGRpZEVkaXRCcmVha3BvaW50Q29uZGl0aW9u
KTsKKyAgICB9LAorCisgICAgX2NvbnRpbnVlVG9MaW5lOiBmdW5jdGlvbihzb3VyY2VJRCwgbGlu
ZU51bWJlcikKKyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5jb250
aW51ZVRvTGluZShzb3VyY2VJRCwgbGluZU51bWJlcik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZVZpZXcuanMgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvU291cmNlVmlldy5qcwppbmRleCBlNzY0Y2Y4Li5mN2EyNjc5IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlVmlldy5qcworKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlVmlldy5qcwpAQCAtMzMsNyArMzMsOCBA
QCBXZWJJbnNwZWN0b3IuU291cmNlVmlldyA9IGZ1bmN0aW9uKHJlc291cmNlKQogICAgIHRoaXMu
ZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJzb3VyY2UiKTsKIAogICAgIHZhciBjYW5FZGl0U2NyaXB0
cyA9IFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cyAmJiBXZWJJbnNwZWN0b3IucGFuZWxzLnNj
cmlwdHMuY2FuRWRpdFNjcmlwdHMoKSAmJiByZXNvdXJjZS50eXBlID09PSBXZWJJbnNwZWN0b3Iu
UmVzb3VyY2UuVHlwZS5TY3JpcHQ7Ci0gICAgdGhpcy5zb3VyY2VGcmFtZSA9IG5ldyBXZWJJbnNw
ZWN0b3IuU291cmNlRnJhbWUodGhpcy5lbGVtZW50LCB0aGlzLl9hZGRCcmVha3BvaW50LmJpbmQo
dGhpcyksIGNhbkVkaXRTY3JpcHRzID8gdGhpcy5fZWRpdExpbmUuYmluZCh0aGlzKSA6IG51bGws
IHRoaXMuX2NvbnRpbnVlVG9MaW5lLmJpbmQodGhpcykpOworICAgIHRoaXMuc291cmNlRnJhbWUg
PSBuZXcgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lKHRoaXMuZWxlbWVudCwgY2FuRWRpdFNjcmlw
dHMgPyB0aGlzLl9lZGl0TGluZS5iaW5kKHRoaXMpIDogbnVsbCk7CisgICAgdGhpcy5fc291cmNl
RnJhbWVDb250cm9sbGVyID0gbmV3IFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZUNvbnRyb2xsZXIo
dGhpcy5zb3VyY2VGcmFtZSwgdGhpcy5fZ2V0U291cmNlSURzLmJpbmQodGhpcyksIHRoaXMuX3Nv
dXJjZUlERm9yTGluZS5iaW5kKHRoaXMpKTsKICAgICByZXNvdXJjZS5hZGRFdmVudExpc3RlbmVy
KCJmaW5pc2hlZCIsIHRoaXMuX3Jlc291cmNlTG9hZGluZ0ZpbmlzaGVkLCB0aGlzKTsKICAgICB0
aGlzLl9mcmFtZU5lZWRzU2V0dXAgPSB0cnVlOwogfQpAQCAtMTAwLDkgKzEwMSw2IEBAIFdlYklu
c3BlY3Rvci5Tb3VyY2VWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIG1pbWVUeXBlID0g
dGhpcy5fY2Fub25pY2FsTWltZVR5cGUodGhpcy5yZXNvdXJjZSk7CiAgICAgICAgIHRoaXMuc291
cmNlRnJhbWUuc2V0Q29udGVudChtaW1lVHlwZSwgY29udGVudCwgdGhpcy5yZXNvdXJjZS51cmwp
OwogICAgICAgICB0aGlzLl9zb3VyY2VGcmFtZVNldHVwRmluaXNoZWQoKTsKLSAgICAgICAgdmFy
IGJyZWFrcG9pbnRzID0gV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLmJyZWFrcG9pbnRz
Rm9yVVJMKHRoaXMucmVzb3VyY2UudXJsKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBi
cmVha3BvaW50cy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRoaXMuc291cmNlRnJhbWUuYWRk
QnJlYWtwb2ludChicmVha3BvaW50c1tpXSk7CiAgICAgfSwKIAogICAgIF9jYW5vbmljYWxNaW1l
VHlwZTogZnVuY3Rpb24ocmVzb3VyY2UpCkBAIC0xMTksMjMgKzExNyw2IEBAIFdlYkluc3BlY3Rv
ci5Tb3VyY2VWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5yZXNvdXJjZS5yZW1vdmVF
dmVudExpc3RlbmVyKCJmaW5pc2hlZCIsIHRoaXMuX3Jlc291cmNlTG9hZGluZ0ZpbmlzaGVkLCB0
aGlzKTsKICAgICB9LAogCi0gICAgX2NvbnRpbnVlVG9MaW5lOiBmdW5jdGlvbihsaW5lKQotICAg
IHsKLSAgICAgICAgdmFyIHNjcmlwdHNQYW5lbCA9IFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0
czsKLSAgICAgICAgaWYgKHNjcmlwdHNQYW5lbCkgewotICAgICAgICAgICAgdmFyIHNvdXJjZUlE
ID0gdGhpcy5fc291cmNlSURGb3JMaW5lKGxpbmUpOwotICAgICAgICAgICAgc2NyaXB0c1BhbmVs
LmNvbnRpbnVlVG9MaW5lKHNvdXJjZUlELCBsaW5lKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAg
ICBfYWRkQnJlYWtwb2ludDogZnVuY3Rpb24obGluZSkKLSAgICB7Ci0gICAgICAgIHZhciBzb3Vy
Y2VJRCA9IHRoaXMuX3NvdXJjZUlERm9yTGluZShsaW5lKTsKLSAgICAgICAgV2ViSW5zcGVjdG9y
LmJyZWFrcG9pbnRNYW5hZ2VyLnNldEJyZWFrcG9pbnQoc291cmNlSUQsIHRoaXMucmVzb3VyY2Uu
dXJsLCBsaW5lLCB0cnVlLCAiIik7Ci0gICAgICAgIGlmICghV2ViSW5zcGVjdG9yLnBhbmVscy5z
Y3JpcHRzLmJyZWFrcG9pbnRzQWN0aXZhdGVkKQotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBh
bmVscy5zY3JpcHRzLnRvZ2dsZUJyZWFrcG9pbnRzQ2xpY2tlZCgpOwotICAgIH0sCi0KICAgICBf
ZWRpdExpbmU6IGZ1bmN0aW9uKGxpbmUsIG5ld0NvbnRlbnQsIGNhbmNlbEVkaXRpbmdDYWxsYmFj
aykKICAgICB7CiAgICAgICAgIHZhciBsaW5lcyA9IFtdOwpAQCAtMTQ5LDcgKzEzMCw3IEBAIFdl
Ykluc3BlY3Rvci5Tb3VyY2VWaWV3LnByb3RvdHlwZSA9IHsKIAogICAgICAgICB2YXIgbGluZXND
b3VudFRvU2hpZnQgPSBuZXdDb250ZW50LnNwbGl0KCJcbiIpLmxlbmd0aCAtIDE7CiAgICAgICAg
IHZhciBuZXdDb250ZW50ID0gbGluZXMuam9pbigiXG4iKTsKLSAgICAgICAgV2ViSW5zcGVjdG9y
LnBhbmVscy5zY3JpcHRzLmVkaXRTY3JpcHRTb3VyY2UodGhpcy5fc291cmNlSURGb3JMaW5lKGxp
bmUpLCBuZXdDb250ZW50LCBsaW5lLCBsaW5lc0NvdW50VG9TaGlmdCwgdGhpcy5fZWRpdExpbmVD
b21wbGV0ZS5iaW5kKHRoaXMsIG5ld0NvbnRlbnQpLCBjYW5jZWxFZGl0aW5nQ2FsbGJhY2spOwor
ICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMuZWRpdFNjcmlwdFNvdXJjZSh0aGlz
Ll9zb3VyY2VJREZvckxpbmUobGluZSArIDEpLCBuZXdDb250ZW50LCBsaW5lLCBsaW5lc0NvdW50
VG9TaGlmdCwgdGhpcy5fZWRpdExpbmVDb21wbGV0ZS5iaW5kKHRoaXMsIG5ld0NvbnRlbnQpLCBj
YW5jZWxFZGl0aW5nQ2FsbGJhY2spOwogICAgIH0sCiAKICAgICBfZWRpdExpbmVDb21wbGV0ZTog
ZnVuY3Rpb24obmV3Q29udGVudCkKQEAgLTE1Nyw2ICsxMzgsMTUgQEAgV2ViSW5zcGVjdG9yLlNv
dXJjZVZpZXcucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLnJlc291cmNlLmNvbnRlbnQgPSBu
ZXdDb250ZW50OwogICAgIH0sCiAKKyAgICBfZ2V0U291cmNlSURzOiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICB2YXIgcmVzdWx0ID0ge307CisgICAgICAgIHZhciBzY3JpcHRzID0gdGhpcy5y
ZXNvdXJjZS5zY3JpcHRzOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjcmlwdHMubGVu
Z3RoOyArK2kpCisgICAgICAgICAgICByZXN1bHRbc2NyaXB0c1tpXS5zb3VyY2VJRF0gPSB0cnVl
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0sCisKICAgICBfc291cmNlSURGb3JMaW5l
OiBmdW5jdGlvbihsaW5lKQogICAgIHsKICAgICAgICAgdmFyIHNvdXJjZUlEID0gbnVsbDsK
</data>
<flag name="review"
          id="65864"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75264</attachid>
            <date>2010-12-01 03:40:50 -0800</date>
            <delta_ts>2010-12-03 04:39:54 -0800</delta_ts>
            <desc>Patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>35122</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzRhYjM5YS4uNGU0ZDdiYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2OSBAQAorMjAxMC0xMS0zMCAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiByZWZhY3RvciBTb3VyY2VGcmFt
ZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwMjIz
CisKKyAgICAgICAgRG8gbm90IHN0b3JlIGJyZWFrcG9pbnRzIGluIFNvdXJjZUZyYW1lIChpbiBT
b3VyY2VGcmFtZS5fYnJlYWtwb2ludHMgYW5kIFNvdXJjZUZyYW1lLl90ZXh0TW9kZWwpCisgICAg
ICAgIHNpbmNlIHdlIGFscmVhZHkgc3RvcmUgdGhlbSBpbiBCcmVha3BvaW50TWFuYWdlci4KKyAg
ICAgICAgTW92ZSB1c2VyIGlucHV0IHByb2Nlc3NpbmcgZnJvbSBTb3VyY2VGcmFtZSB0byBTb3Vy
Y2VGcmFtZUNvbnRyb2xsZXIsIHNpbmNlIFNvdXJjZUZyYW1lIGRvZXNuJ3Qga25vdyBhYm91dAor
ICAgICAgICBsaW5lIC0+IHNvdXJjZUlEIG1hcHBpbmcgYW5kIHRoZXJlZm9yZSBpcyB1bmFibGUg
dG8gbW9kaWZ5IG1vZGVsIGRpcmVjdGx5IChzZXQgYnJlYWtwb2ludCBhbmQgc3VjaCkuCisgICAg
ICAgIEludHJvZHVjZSBTY3JpcHRCcmVha3BvaW50VmlldyBjbGFzcyB0aGF0IHJlcHJlc2VudHMg
YSBzaW5nbGUgYmx1ZSBicmVha3BvaW50IGJhciBvbiBhIHNvdXJjZSBmcmFtZSBsaW5lIGd1dHRl
ci4KKyAgICAgICAgQnJlYWtwb2ludE1hbmFnZXIgc2hvdWxkbid0IHJlcXVpcmUgYnJlYWtwb2lu
dCB1cmwgdG8gc2V0IGEgYnJlYWtwb2ludC4KKworICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1l
bmQvQnJlYWtwb2ludE1hbmFnZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2lu
dE1hbmFnZXIucHJvdG90eXBlLnNldE9uZVRpbWVCcmVha3BvaW50KToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuc2V0QnJlYWtwb2ludCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLnJlc3RvcmVkQnJl
YWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90
eXBlLmJyZWFrcG9pbnRzRm9yU291cmNlSUQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5icmVha3BvaW50c0ZvclNvdXJjZUlEcyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLl9maW5kQnJlYWtwb2lu
dHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5m
aW5kQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIu
cHJvdG90eXBlLl9zZXRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50TWFuYWdlci5wcm90b3R5cGUuX3NldEJyZWFrcG9pbnRPbkJhY2tlbmQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQv
U2NyaXB0Vmlldy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRWaWV3KToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5TY3JpcHRWaWV3LnByb3RvdHlwZS5fZ2V0U291cmNlSURzKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qczoKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLl9icmVha3BvaW50QWRkZWQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuY3JlYXRlQnJlYWtwb2lu
dFZpZXcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuZWRp
dFNjcmlwdFNvdXJjZS5teWNhbGxiYWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRz
UGFuZWwucHJvdG90eXBlLmVkaXRTY3JpcHRTb3VyY2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlNjcmlwdHNQYW5lbC5wcm90b3R5cGUudXJsRm9yU291cmNlSUQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNjcmlwdEJyZWFrcG9pbnRWaWV3KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3Jp
cHRCcmVha3BvaW50Vmlldy5wcm90b3R5cGUuX3Nob3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlNjcmlwdEJyZWFrcG9pbnRWaWV3LnByb3RvdHlwZS5faGlkZSk6CisgICAgICAgICogaW5zcGVj
dG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3Vy
Y2VGcmFtZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLmhh
c1RleHRWaWV3ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlw
ZS5fY3JlYXRlVmlld2VySWZOZWVkZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lLnByb3RvdHlwZS5zZXRCcmVha3BvaW50RGVjb3JhdGlvbik6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLnJlbW92ZUJyZWFrcG9pbnREZWNvcmF0aW9uKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuZWRpdEJyZWFrcG9p
bnRDb25kaXRpb24uY29tbWl0dGVkQ2FsbGJhY2spOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNv
dXJjZUZyYW1lLnByb3RvdHlwZS5lZGl0QnJlYWtwb2ludENvbmRpdGlvbi5jYW5jZWxsZWRDYWxs
YmFjayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLmVkaXRC
cmVha3BvaW50Q29uZGl0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5w
cm90b3R5cGUuX2NvbnRleHRNZW51KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFt
ZS5wcm90b3R5cGUuX21vdXNlRG93bik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJh
bWUucHJvdG90eXBlLl9zaG93QnJlYWtwb2ludENvbmRpdGlvblBvcHVwKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX2hpZGVCcmVha3BvaW50Q29uZGl0aW9u
UG9wdXApOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lQ29udHJvbGxlcik6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVDb250cm9sbGVyLnByb3RvdHlwZS5fdGV4
dFZpZXdlckNyZWF0ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lQ29udHJv
bGxlci5wcm90b3R5cGUuX2NvbnRleHRNZW51KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3Vy
Y2VGcmFtZUNvbnRyb2xsZXIucHJvdG90eXBlLl9tb3VzZURvd24pOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNvdXJjZUZyYW1lQ29udHJvbGxlci5wcm90b3R5cGUuX2FkZEJyZWFrcG9pbnQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lQ29udHJvbGxlci5wcm90b3R5cGUuX2Fk
ZENvbmRpdGlvbmFsQnJlYWtwb2ludC5kaWRFZGl0QnJlYWtwb2ludENvbmRpdGlvbik6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVDb250cm9sbGVyLnByb3RvdHlwZS5fYWRkQ29u
ZGl0aW9uYWxCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZUNv
bnRyb2xsZXIucHJvdG90eXBlLl9lZGl0QnJlYWtwb2ludENvbmRpdGlvbi5kaWRFZGl0QnJlYWtw
b2ludENvbmRpdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVDb250cm9s
bGVyLnByb3RvdHlwZS5fZWRpdEJyZWFrcG9pbnRDb25kaXRpb24pOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNvdXJjZUZyYW1lQ29udHJvbGxlci5wcm90b3R5cGUuX2NvbnRpbnVlVG9MaW5lKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZVZpZXcuanM6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU291cmNlVmlldyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlVmll
dy5wcm90b3R5cGUuX2NvbnRlbnRMb2FkZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJj
ZVZpZXcucHJvdG90eXBlLl9lZGl0TGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNl
Vmlldy5wcm90b3R5cGUuX2dldFNvdXJjZUlEcyk6CisKIDIwMTAtMTEtMzAgIEtlbnQgVGFtdXJh
ICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVy
LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5h
Z2VyLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpz
CmluZGV4IDNkNTEwOTIuLmQ4MjY0ZmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMKQEAgLTMzLDcgKzMzLDcgQEAgV2ViSW5zcGVjdG9y
LkJyZWFrcG9pbnRNYW5hZ2VyID0gZnVuY3Rpb24oKQogV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRN
YW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICBzZXRPbmVUaW1lQnJlYWtwb2ludDogZnVuY3Rpb24o
c291cmNlSUQsIGxpbmUpCiAgICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IG5ldyBXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludCh0aGlzLCBzb3VyY2VJRCwgdW5kZWZpbmVkLCBsaW5lLCB0cnVl
LCB1bmRlZmluZWQpOworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludCh0aGlzLCBzb3VyY2VJRCwgbGluZSwgdHJ1ZSwgdW5kZWZpbmVkKTsKICAgICAg
ICAgaWYgKHRoaXMuX2JyZWFrcG9pbnRzW2JyZWFrcG9pbnQuaWRdKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICBpZiAodGhpcy5fb25lVGltZUJyZWFrcG9pbnQpCkBAIC01MSwzOCArNTEs
NDUgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgfQogICAgIH0sCiAKLSAgICBzZXRCcmVha3BvaW50OiBmdW5jdGlvbihzb3VyY2VJRCwgdXJs
LCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24pCisgICAgc2V0QnJlYWtwb2ludDogZnVuY3Rpb24o
c291cmNlSUQsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbikKICAgICB7Ci0gICAgICAgIHZhciBi
cmVha3BvaW50ID0gdGhpcy5fc2V0QnJlYWtwb2ludChzb3VyY2VJRCwgdXJsLCBsaW5lLCBlbmFi
bGVkLCBjb25kaXRpb24pOworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX3NldEJyZWFr
cG9pbnQoc291cmNlSUQsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7CiAgICAgICAgIGlmIChi
cmVha3BvaW50KQogICAgICAgICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludE9uQmFja2VuZChicmVh
a3BvaW50KTsKICAgICB9LAogCiAgICAgcmVzdG9yZWRCcmVha3BvaW50OiBmdW5jdGlvbihzb3Vy
Y2VJRCwgdXJsLCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24pCiAgICAgewotICAgICAgICB0aGlz
Ll9zZXRCcmVha3BvaW50KHNvdXJjZUlELCB1cmwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7
CisgICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnQoc291cmNlSUQsIGxpbmUsIGVuYWJsZWQsIGNv
bmRpdGlvbik7CiAgICAgfSwKIAogICAgIGJyZWFrcG9pbnRzRm9yU291cmNlSUQ6IGZ1bmN0aW9u
KHNvdXJjZUlEKQogICAgIHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gW107Ci0gICAgICAg
IGZvciAodmFyIGlkIGluIHRoaXMuX2JyZWFrcG9pbnRzKSB7Ci0gICAgICAgICAgICBpZiAodGhp
cy5fYnJlYWtwb2ludHNbaWRdLnNvdXJjZUlEID09PSBzb3VyY2VJRCkKLSAgICAgICAgICAgICAg
ICBicmVha3BvaW50cy5wdXNoKHRoaXMuX2JyZWFrcG9pbnRzW2lkXSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIGJyZWFrcG9pbnRzOworICAgICAgICByZXR1cm4gdGhpcy5fZmluZEJyZWFr
cG9pbnRzKGZ1bmN0aW9uKGIpIHsgcmV0dXJuIGIuc291cmNlSUQgPT09IHNvdXJjZUlEOyB9KTsK
KyAgICB9LAorCisgICAgYnJlYWtwb2ludHNGb3JTb3VyY2VJRHM6IGZ1bmN0aW9uKHNvdXJjZUlE
cykKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9maW5kQnJlYWtwb2ludHMoZnVuY3Rpb24o
YikgeyByZXR1cm4gYi5zb3VyY2VJRCBpbiBzb3VyY2VJRHM7IH0pOwogICAgIH0sCiAKLSAgICBi
cmVha3BvaW50c0ZvclVSTDogZnVuY3Rpb24odXJsKQorICAgIF9maW5kQnJlYWtwb2ludHM6IGZ1
bmN0aW9uKGZpbHRlcikKICAgICB7CiAgICAgICAgIHZhciBicmVha3BvaW50cyA9IFtdOwogICAg
ICAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl9icmVha3BvaW50cykgewotICAgICAgICAgICAgaWYg
KHRoaXMuX2JyZWFrcG9pbnRzW2lkXS51cmwgPT09IHVybCkKLSAgICAgICAgICAgICAgICBicmVh
a3BvaW50cy5wdXNoKHRoaXMuX2JyZWFrcG9pbnRzW2lkXSk7CisgICAgICAgICAgICB2YXIgYnJl
YWtwb2ludCA9IHRoaXMuX2JyZWFrcG9pbnRzW2lkXTsKKyAgICAgICAgICAgIGlmIChmaWx0ZXIo
YnJlYWtwb2ludCkpCisgICAgICAgICAgICAgICAgYnJlYWtwb2ludHMucHVzaChicmVha3BvaW50
KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gYnJlYWtwb2ludHM7CiAgICAgfSwKIAorICAg
IGZpbmRCcmVha3BvaW50OiBmdW5jdGlvbihzb3VyY2VJRCwgbGluZU51bWJlcikKKyAgICB7Cisg
ICAgICAgIHZhciBicmVha3BvaW50SWQgPSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5qc0JyZWFr
cG9pbnRJZChzb3VyY2VJRCwgbGluZU51bWJlcik7CisgICAgICAgIHJldHVybiB0aGlzLl9icmVh
a3BvaW50c1ticmVha3BvaW50SWRdOworICAgIH0sCisKICAgICByZXNldDogZnVuY3Rpb24oKQog
ICAgIHsKICAgICAgICAgdGhpcy5fYnJlYWtwb2ludHMgPSB7fTsKQEAgLTkwLDkgKzk3LDkgQEAg
V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhp
cy5fbmF0aXZlQnJlYWtwb2ludHMgPSB7fTsKICAgICB9LAogCi0gICAgX3NldEJyZWFrcG9pbnQ6
IGZ1bmN0aW9uKHNvdXJjZUlELCB1cmwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbikKKyAgICBf
c2V0QnJlYWtwb2ludDogZnVuY3Rpb24oc291cmNlSUQsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlv
bikKICAgICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rvci5CcmVh
a3BvaW50KHRoaXMsIHNvdXJjZUlELCB1cmwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7Cisg
ICAgICAgIHZhciBicmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rvci5CcmVha3BvaW50KHRoaXMs
IHNvdXJjZUlELCBsaW5lLCBlbmFibGVkLCBjb25kaXRpb24pOwogICAgICAgICBpZiAodGhpcy5f
YnJlYWtwb2ludHNbYnJlYWtwb2ludC5pZF0pCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IGlmICh0aGlzLl9vbmVUaW1lQnJlYWtwb2ludCAmJiAodGhpcy5fb25lVGltZUJyZWFrcG9pbnQu
aWQgPT0gYnJlYWtwb2ludC5pZCkpCkBAIC0xMjIsNyArMTI5LDcgQEAgV2ViSW5zcGVjdG9yLkJy
ZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgYnJlYWtwb2ludC5yZW1vdmUoKTsKICAgICAgICAgICAgICAgICBpZiAoc3Vj
Y2VzcykKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludChicmVha3BvaW50
LnNvdXJjZUlELCBicmVha3BvaW50LnVybCwgbGluZSwgYnJlYWtwb2ludC5lbmFibGVkLCBicmVh
a3BvaW50LmNvbmRpdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldEJyZWFrcG9p
bnQoYnJlYWtwb2ludC5zb3VyY2VJRCwgbGluZSwgYnJlYWtwb2ludC5lbmFibGVkLCBicmVha3Bv
aW50LmNvbmRpdGlvbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgSW5zcGVj
dG9yQmFja2VuZC5zZXRCcmVha3BvaW50KGJyZWFrcG9pbnQuc291cmNlSUQsIGJyZWFrcG9pbnQu
bGluZSwgYnJlYWtwb2ludC5lbmFibGVkLCBicmVha3BvaW50LmNvbmRpdGlvbiwgZGlkU2V0QnJl
YWtwb2ludC5iaW5kKHRoaXMpKTsKQEAgLTMxOSwxNSArMzI2LDE2IEBAIFdlYkluc3BlY3Rvci5C
cmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAKIFdlYkluc3BlY3Rvci5CcmVha3BvaW50
TWFuYWdlci5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5
cGU7CiAKLVdlYkluc3BlY3Rvci5CcmVha3BvaW50ID0gZnVuY3Rpb24oYnJlYWtwb2ludE1hbmFn
ZXIsIHNvdXJjZUlELCB1cmwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbikKK1dlYkluc3BlY3Rv
ci5CcmVha3BvaW50ID0gZnVuY3Rpb24oYnJlYWtwb2ludE1hbmFnZXIsIHNvdXJjZUlELCBsaW5l
LCBlbmFibGVkLCBjb25kaXRpb24pCiB7Ci0gICAgdGhpcy51cmwgPSB1cmw7CiAgICAgdGhpcy5s
aW5lID0gbGluZTsKICAgICB0aGlzLnNvdXJjZUlEID0gc291cmNlSUQ7CiAgICAgdGhpcy5fZW5h
YmxlZCA9IGVuYWJsZWQ7CiAgICAgdGhpcy5fY29uZGl0aW9uID0gY29uZGl0aW9uIHx8ICIiOwog
ICAgIHRoaXMuX3NvdXJjZVRleHQgPSAiIjsKICAgICB0aGlzLl9icmVha3BvaW50TWFuYWdlciA9
IGJyZWFrcG9pbnRNYW5hZ2VyOworICAgIC8vIEZJWE1FOiBicmVha3BvaW50IFVSTCBpcyBvbmx5
IG5lZWRlZCBmb3IgQnJlYWtwb2ludHNTaWRlYmFyUGFuZSwgYW5kIHNob3VsZCBiZSByZW1vdmVk
IGZyb20gQnJlYWtwb2ludE1hbmFnZXIuCisgICAgdGhpcy51cmwgPSBXZWJJbnNwZWN0b3IucGFu
ZWxzLnNjcmlwdHMudXJsRm9yU291cmNlSUQodGhpcy5zb3VyY2VJRCk7CiB9CiAKIFdlYkluc3Bl
Y3Rvci5CcmVha3BvaW50LmpzQnJlYWtwb2ludElkID0gZnVuY3Rpb24oc291cmNlSUQsIGxpbmUp
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Vmlldy5qcyBi
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRWaWV3LmpzCmluZGV4IGQ4NzhlOWIu
LmM2NzMzMDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRW
aWV3LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRWaWV3LmpzCkBA
IC0zNCw3ICszNCw4IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRWaWV3ID0gZnVuY3Rpb24oc2NyaXB0
KQogICAgIHRoaXMuX2ZyYW1lTmVlZHNTZXR1cCA9IHRydWU7CiAgICAgdGhpcy5fc291cmNlRnJh
bWVTZXR1cCA9IGZhbHNlOwogICAgIHZhciBjYW5FZGl0U2NyaXB0cyA9IFdlYkluc3BlY3Rvci5w
YW5lbHMuc2NyaXB0cy5jYW5FZGl0U2NyaXB0cygpOwotICAgIHRoaXMuc291cmNlRnJhbWUgPSBu
ZXcgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lKHRoaXMuZWxlbWVudCwgdGhpcy5fYWRkQnJlYWtw
b2ludC5iaW5kKHRoaXMpLCBjYW5FZGl0U2NyaXB0cyA/IHRoaXMuX2VkaXRMaW5lLmJpbmQodGhp
cykgOiBudWxsLCB0aGlzLl9jb250aW51ZVRvTGluZS5iaW5kKHRoaXMpKTsKKyAgICB0aGlzLnNv
dXJjZUZyYW1lID0gbmV3IFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZSh0aGlzLmVsZW1lbnQsIGNh
bkVkaXRTY3JpcHRzID8gdGhpcy5fZWRpdExpbmUuYmluZCh0aGlzKSA6IG51bGwpOworICAgIHRo
aXMuX3NvdXJjZUZyYW1lQ29udHJvbGxlciA9IG5ldyBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVD
b250cm9sbGVyKHRoaXMuc291cmNlRnJhbWUsIHRoaXMuX3NvdXJjZUlEcy5iaW5kKHRoaXMpLCB0
aGlzLl9zb3VyY2VJREZvckxpbmUuYmluZCh0aGlzKSk7CiB9CiAKIFdlYkluc3BlY3Rvci5TY3Jp
cHRWaWV3LnByb3RvdHlwZSA9IHsKQEAgLTg1LDI2ICs4NiwxOSBAQCBXZWJJbnNwZWN0b3IuU2Ny
aXB0Vmlldy5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgic2NyaXB0LXJlc291cmNlLXZpZXdzIikuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KTsKICAg
ICB9LAogCi0gICAgX2NvbnRpbnVlVG9MaW5lOiBmdW5jdGlvbihsaW5lKQotICAgIHsKLSAgICAg
ICAgdmFyIHNjcmlwdHNQYW5lbCA9IFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0czsKLSAgICAg
ICAgaWYgKHNjcmlwdHNQYW5lbCkKLSAgICAgICAgICAgIHNjcmlwdHNQYW5lbC5jb250aW51ZVRv
TGluZSh0aGlzLnNjcmlwdC5zb3VyY2VJRCwgbGluZSk7Ci0gICAgfSwKLQotICAgIF9hZGRCcmVh
a3BvaW50OiBmdW5jdGlvbihsaW5lKQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmJyZWFr
cG9pbnRNYW5hZ2VyLnNldEJyZWFrcG9pbnQodGhpcy5zY3JpcHQuc291cmNlSUQsIHRoaXMuc2Ny
aXB0LnNvdXJjZVVSTCwgbGluZSwgdHJ1ZSwgIiIpOwotICAgICAgICBpZiAoIVdlYkluc3BlY3Rv
ci5wYW5lbHMuc2NyaXB0cy5icmVha3BvaW50c0FjdGl2YXRlZCkKLSAgICAgICAgICAgIFdlYklu
c3BlY3Rvci5wYW5lbHMuc2NyaXB0cy50b2dnbGVCcmVha3BvaW50c0NsaWNrZWQoKTsKLSAgICB9
LAotCiAgICAgX2VkaXRMaW5lQ29tcGxldGU6IGZ1bmN0aW9uKG5ld0JvZHkpCiAgICAgewogICAg
ICAgICB0aGlzLnNjcmlwdC5zb3VyY2UgPSBuZXdCb2R5OwogICAgICAgICB0aGlzLnNvdXJjZUZy
YW1lLnVwZGF0ZUNvbnRlbnQodGhpcy5fcHJlcGVuZFdoaXRlc3BhY2UobmV3Qm9keSkpOwogICAg
IH0sCiAKKyAgICBfc291cmNlSURzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgcmVz
dWx0ID0ge307CisgICAgICAgIHJlc3VsdFt0aGlzLnNjcmlwdC5zb3VyY2VJRF0gPSB0cnVlOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0sCisKICAgICBfc291cmNlSURGb3JMaW5lOiBm
dW5jdGlvbihsaW5lKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuc2NyaXB0LnNvdXJjZUlE
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5q
cyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKaW5kZXggNjFh
MmYyOC4uYWE1MzdmMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Nj
cmlwdHNQYW5lbC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1Bh
bmVsLmpzCkBAIC0yOTgsNyArMjk4LDEzIEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJv
dG90eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAgaWYgKHNvdXJjZUZyYW1lKQotICAgICAg
ICAgICAgc291cmNlRnJhbWUuYWRkQnJlYWtwb2ludChicmVha3BvaW50KTsKKyAgICAgICAgICAg
IHRoaXMuY3JlYXRlQnJlYWtwb2ludFZpZXcoYnJlYWtwb2ludCwgc291cmNlRnJhbWUpOworCisg
ICAgfSwKKworICAgIGNyZWF0ZUJyZWFrcG9pbnRWaWV3OiBmdW5jdGlvbihicmVha3BvaW50LCBz
b3VyY2VGcmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlNjcmlw
dEJyZWFrcG9pbnRWaWV3KGJyZWFrcG9pbnQsIHNvdXJjZUZyYW1lKTsKICAgICB9LAogCiAgICAg
Y2FuRWRpdFNjcmlwdHM6IGZ1bmN0aW9uKCkKQEAgLTMxMiw3ICszMTgsNyBAQCBXZWJJbnNwZWN0
b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICAvLyBOZWVkIHRvIGNsZWFyIGJyZWFrcG9pbnRzIGFuZCByZS1jcmVhdGUgdGhlbSBsYXRl
ciB3aGVuIGVkaXRpbmcgc291cmNlLgotICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSBXZWJJbnNw
ZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuYnJlYWtwb2ludHNGb3JTb3VyY2VJRChzb3VyY2VJRCk7
CisgICAgICAgIHZhciBicmVha3BvaW50cyA9IFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFuYWdl
ci5icmVha3BvaW50c0ZvclNvdXJjZUlEKGVkaXREYXRhLnNvdXJjZUlEKTsKICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBicmVha3BvaW50cy5sZW5ndGg7ICsraSkKICAgICAgICAgICAgIGJy
ZWFrcG9pbnRzW2ldLnJlbW92ZSgpOwogCkBAIC0zMzIsNyArMzM4LDcgQEAgV2ViSW5zcGVjdG9y
LlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgdmFyIG5ld0xpbmUg
PSBicmVha3BvaW50LmxpbmU7CiAgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgYnJlYWtw
b2ludC5saW5lID49IGVkaXREYXRhLmxpbmUpCiAgICAgICAgICAgICAgICAgICAgIG5ld0xpbmUg
Kz0gZWRpdERhdGEubGluZXNDb3VudFRvU2hpZnQ7Ci0gICAgICAgICAgICAgICAgV2ViSW5zcGVj
dG9yLmJyZWFrcG9pbnRNYW5hZ2VyLnNldEJyZWFrcG9pbnQoZWRpdERhdGEuc291cmNlSUQsIGJy
ZWFrcG9pbnQudXJsLCBuZXdMaW5lLCBicmVha3BvaW50LmVuYWJsZWQsIGJyZWFrcG9pbnQuY29u
ZGl0aW9uKTsKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIu
c2V0QnJlYWtwb2ludChlZGl0RGF0YS5zb3VyY2VJRCwgbmV3TGluZSwgYnJlYWtwb2ludC5lbmFi
bGVkLCBicmVha3BvaW50LmNvbmRpdGlvbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH07CiAg
ICAgICAgIEluc3BlY3RvckJhY2tlbmQuZWRpdFNjcmlwdFNvdXJjZShlZGl0RGF0YS5zb3VyY2VJ
RCwgZWRpdERhdGEuY29udGVudCwgbXljYWxsYmFjay5iaW5kKHRoaXMpKTsKQEAgLTU2Nyw2ICs1
NzMsMTIgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAg
IHJldHVybiB2aWV3LnNvdXJjZUZyYW1lOwogICAgIH0sCiAKKyAgICB1cmxGb3JTb3VyY2VJRDog
ZnVuY3Rpb24oc291cmNlSUQpCisgICAgeworICAgICAgICB2YXIgc2NyaXB0T3JSZXNvdXJjZSA9
IHRoaXMuX3NvdXJjZUlETWFwW3NvdXJjZUlEXTsKKyAgICAgICAgcmV0dXJuIHNjcmlwdE9yUmVz
b3VyY2UudXJsIHx8IHNjcmlwdE9yUmVzb3VyY2Uuc291cmNlVVJMOworICAgIH0sCisKICAgICBf
c291cmNlRnJhbWVGb3JTY3JpcHRPclJlc291cmNlOiBmdW5jdGlvbihzY3JpcHRPclJlc291cmNl
KQogICAgIHsKICAgICAgICAgaWYgKHNjcmlwdE9yUmVzb3VyY2UgaW5zdGFuY2VvZiBXZWJJbnNw
ZWN0b3IuUmVzb3VyY2UpCkBAIC0xMDkzLDMgKzExMDUsMzIgQEAgV2ViSW5zcGVjdG9yLlNjcmlw
dHNQYW5lbC5wcm90b3R5cGUgPSB7CiAKIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90
eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5QYW5lbC5wcm90b3R5cGU7CiAKK1dlYkluc3Bl
Y3Rvci5TY3JpcHRCcmVha3BvaW50VmlldyA9IGZ1bmN0aW9uKGJyZWFrcG9pbnQsIHNvdXJjZUZy
YW1lKQoreworICAgIHRoaXMuX2JyZWFrcG9pbnQgPSBicmVha3BvaW50OworICAgIHRoaXMuX3Nv
dXJjZUZyYW1lID0gc291cmNlRnJhbWU7CisKKyAgICB0aGlzLl9saW5lTnVtYmVyID0gdGhpcy5f
YnJlYWtwb2ludC5saW5lIC0gMTsKKyAgICBpZiAodGhpcy5fbGluZU51bWJlciA+PSB0aGlzLl9z
b3VyY2VGcmFtZS50ZXh0TW9kZWwubGluZXNDb3VudCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
dGhpcy5fYnJlYWtwb2ludC5zb3VyY2VUZXh0ID0gdGhpcy5fc291cmNlRnJhbWUudGV4dE1vZGVs
LmxpbmUodGhpcy5fbGluZU51bWJlcik7CisKKyAgICB0aGlzLl9icmVha3BvaW50LmFkZEV2ZW50
TGlzdGVuZXIoImVuYWJsZS1jaGFuZ2VkIiwgdGhpcy5fc2hvdywgdGhpcyk7CisgICAgdGhpcy5f
YnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKCJjb25kaXRpb24tY2hhbmdlZCIsIHRoaXMuX3No
b3csIHRoaXMpOworICAgIHRoaXMuX2JyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVtb3Zl
ZCIsIHRoaXMuX2hpZGUsIHRoaXMpOworCisgICAgdGhpcy5fc2hvdygpOworfQorCitXZWJJbnNw
ZWN0b3IuU2NyaXB0QnJlYWtwb2ludFZpZXcucHJvdG90eXBlID0geworICAgIF9zaG93OiBmdW5j
dGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9zb3VyY2VGcmFtZS5zZXRCcmVha3BvaW50RGVj
b3JhdGlvbih0aGlzLl9saW5lTnVtYmVyLCB0aGlzLl9icmVha3BvaW50LmVuYWJsZWQsIHRoaXMu
X2JyZWFrcG9pbnQuY29uZGl0aW9uKTsKKyAgICB9LAorCisgICAgX2hpZGU6IGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIHRoaXMuX3NvdXJjZUZyYW1lLnJlbW92ZUJyZWFrcG9pbnREZWNvcmF0
aW9uKHRoaXMuX2xpbmVOdW1iZXIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9Tb3VyY2VGcmFtZS5qcwppbmRleCA4ZTA3N2NkLi5mNjQ5YzlhIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzCkBAIC0yOCw3ICsyOCw3IEBACiAgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZSA9IGZ1bmN0aW9uKHBh
cmVudEVsZW1lbnQsIGFkZEJyZWFrcG9pbnREZWxlZ2F0ZSwgZWRpdERlbGVnYXRlLCBjb250aW51
ZVRvSGVyZURlbGVnYXRlKQorV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lID0gZnVuY3Rpb24ocGFy
ZW50RWxlbWVudCwgZWRpdERlbGVnYXRlKQogewogICAgIHRoaXMuX3BhcmVudEVsZW1lbnQgPSBw
YXJlbnRFbGVtZW50OwogCkBAIC0zOCwxMiArMzgsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJh
bWUgPSBmdW5jdGlvbihwYXJlbnRFbGVtZW50LCBhZGRCcmVha3BvaW50RGVsZWdhdGUsIGVkaXRE
ZQogICAgIHRoaXMuX21lc3NhZ2VzID0gW107CiAgICAgdGhpcy5fcm93TWVzc2FnZXMgPSB7fTsK
ICAgICB0aGlzLl9tZXNzYWdlQnViYmxlcyA9IHt9OwotICAgIHRoaXMuYnJlYWtwb2ludHMgPSBb
XTsKIAogICAgIHRoaXMuX2xvYWRlZCA9IGZhbHNlOwogCi0gICAgdGhpcy5fY29udGludWVUb0hl
cmVEZWxlZ2F0ZSA9IGNvbnRpbnVlVG9IZXJlRGVsZWdhdGU7Ci0gICAgdGhpcy5fYWRkQnJlYWtw
b2ludERlbGVnYXRlID0gYWRkQnJlYWtwb2ludERlbGVnYXRlOwogICAgIHRoaXMuX2VkaXREZWxl
Z2F0ZSA9IGVkaXREZWxlZ2F0ZTsKICAgICB0aGlzLl9wb3BvdmVyT2JqZWN0R3JvdXAgPSAicG9w
b3ZlciI7CiB9CkBAIC0xMDUsMjMgKzEwMiw2IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5w
cm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLl9saW5lTnVtYmVyVG9SZXZlYWwgPSBsaW5l
TnVtYmVyOwogICAgIH0sCiAKLSAgICBhZGRCcmVha3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50
KQotICAgIHsKLSAgICAgICAgdGhpcy5icmVha3BvaW50cy5wdXNoKGJyZWFrcG9pbnQpOwotICAg
ICAgICBicmVha3BvaW50LmFkZEV2ZW50TGlzdGVuZXIoInJlbW92ZWQiLCB0aGlzLl9icmVha3Bv
aW50UmVtb3ZlZCwgdGhpcyk7Ci0gICAgICAgIGlmICh0aGlzLl90ZXh0Vmlld2VyKQotICAgICAg
ICAgICAgdGhpcy5fYWRkQnJlYWtwb2ludFRvU291cmNlKGJyZWFrcG9pbnQpOwotICAgIH0sCi0K
LSAgICBfYnJlYWtwb2ludFJlbW92ZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAg
dmFyIGJyZWFrcG9pbnQgPSBldmVudC50YXJnZXQ7Ci0KLSAgICAgICAgdGhpcy5icmVha3BvaW50
cy5yZW1vdmUoYnJlYWtwb2ludCk7Ci0gICAgICAgIGlmICh0aGlzLl90ZXh0Vmlld2VyKQotICAg
ICAgICAgICAgdGhpcy5fcmVtb3ZlQnJlYWtwb2ludEZyb21Tb3VyY2UoYnJlYWtwb2ludCk7Ci0g
ICAgfSwKLQogICAgIGFkZE1lc3NhZ2U6IGZ1bmN0aW9uKG1zZykKICAgICB7CiAgICAgICAgIC8v
IERvbid0IGFkZCB0aGUgbWVzc2FnZSBpZiB0aGVyZSBpcyBubyBtZXNzYWdlIG9yIHZhbGlkIGxp
bmUgb3IgaWYgdGhlIG1zZyBpc24ndCBhbiBlcnJvciBvciB3YXJuaW5nLgpAQCAtMjExLDE0ICsx
OTEsMTAgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAg
ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLCB0aGlzLl9zY3JvbGwuYmluZCh0aGlz
KSwgdHJ1ZSk7CiAgICAgICAgIHRoaXMuX3BhcmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoZWxlbWVu
dCk7CiAKLSAgICAgICAgdGhpcy5fbmVlZHNQcm9ncmFtQ291bnRlckltYWdlID0gdHJ1ZTsKLSAg
ICAgICAgdGhpcy5fbmVlZHNCcmVha3BvaW50SW1hZ2VzID0gdHJ1ZTsKLQogICAgICAgICB0aGlz
Ll90ZXh0Vmlld2VyLmJlZ2luVXBkYXRlcygpOwogCiAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIu
bWltZVR5cGUgPSB0aGlzLl9taW1lVHlwZTsKICAgICAgICAgdGhpcy5fYWRkRXhpc3RpbmdNZXNz
YWdlc1RvU291cmNlKCk7Ci0gICAgICAgIHRoaXMuX2FkZEV4aXN0aW5nQnJlYWtwb2ludHNUb1Nv
dXJjZSgpOwogICAgICAgICB0aGlzLl91cGRhdGVFeGVjdXRpb25MaW5lKCk7CiAgICAgICAgIHRo
aXMuX3VwZGF0ZURpZmZEZWNvcmF0aW9ucygpOwogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLnJl
c2l6ZSgpOwpAQCAtMjM4LDcgKzIxNCwxMSBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJv
dG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRMaW5lKHRoaXMuX2xpbmVUb0hp
Z2hsaWdodCk7CiAgICAgICAgICAgICBkZWxldGUgdGhpcy5fbGluZVRvSGlnaGxpZ2h0OwogICAg
ICAgICB9CisKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoInRleHQtdmll
d2VyLWNyZWF0ZWQiKTsKKwogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmVuZFVwZGF0ZXMoKTsK
KwogICAgICAgICBpZiAodGhpcy5fZWRpdERlbGVnYXRlKQogICAgICAgICAgICAgdGhpcy5fdGV4
dFZpZXdlci5lZGl0Q2FsbGJhY2sgPSB0aGlzLl9lZGl0RGVsZWdhdGU7CiAgICAgfSwKQEAgLTMw
OSwyNCArMjg5LDYgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgbXNnLl9yZXNvdXJjZU1lc3NhZ2VSZXBlYXRDb3VudEVsZW1lbnQudGV4dENvbnRlbnQg
PSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiAocmVwZWF0ZWQgJWQgdGltZXMpIiwgbXNnLnJlcGVh
dENvdW50KTsKICAgICB9LAogCi0gICAgX2JyZWFrcG9pbnRDaGFuZ2VkOiBmdW5jdGlvbihldmVu
dCkKLSAgICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQudGFyZ2V0OwotICAgICAg
ICB2YXIgbGluZU51bWJlciA9IGJyZWFrcG9pbnQubGluZSAtIDE7Ci0gICAgICAgIGlmIChsaW5l
TnVtYmVyID49IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50KQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIGlmIChicmVha3BvaW50LmVuYWJsZWQpCi0gICAgICAgICAgICB0aGlzLl90
ZXh0Vmlld2VyLnJlbW92ZURlY29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50
LWRpc2FibGVkIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIu
YWRkRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQtZGlzYWJsZWQiKTsK
LQotICAgICAgICBpZiAoYnJlYWtwb2ludC5jb25kaXRpb24pCi0gICAgICAgICAgICB0aGlzLl90
ZXh0Vmlld2VyLmFkZERlY29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50LWNv
bmRpdGlvbmFsIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIu
cmVtb3ZlRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQtY29uZGl0aW9u
YWwiKTsKLSAgICB9LAotCiAgICAgX3VwZGF0ZUV4ZWN1dGlvbkxpbmU6IGZ1bmN0aW9uKHByZXZp
b3VzTGluZSkKICAgICB7CiAgICAgICAgIGlmIChwcmV2aW91c0xpbmUpIHsKQEAgLTQyOSw4NiAr
MzkxLDY0IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAg
IG1zZy5fcmVzb3VyY2VNZXNzYWdlTGluZUVsZW1lbnQgPSBtZXNzYWdlTGluZUVsZW1lbnQ7CiAg
ICAgfSwKIAotICAgIF9hZGRFeGlzdGluZ0JyZWFrcG9pbnRzVG9Tb3VyY2U6IGZ1bmN0aW9uKCkK
KyAgICBzZXRCcmVha3BvaW50RGVjb3JhdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwgZW5hYmxl
ZCwgaGFzQ29uZGl0aW9uKQogICAgIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlz
LmJyZWFrcG9pbnRzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGhpcy5fYWRkQnJlYWtwb2lu
dFRvU291cmNlKHRoaXMuYnJlYWtwb2ludHNbaV0pOwotICAgIH0sCi0KLSAgICBfYWRkQnJlYWtw
b2ludFRvU291cmNlOiBmdW5jdGlvbihicmVha3BvaW50KQotICAgIHsKLSAgICAgICAgYnJlYWtw
b2ludC5hZGRFdmVudExpc3RlbmVyKCJlbmFibGUtY2hhbmdlZCIsIHRoaXMuX2JyZWFrcG9pbnRD
aGFuZ2VkLCB0aGlzKTsKLSAgICAgICAgYnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKCJjb25k
aXRpb24tY2hhbmdlZCIsIHRoaXMuX2JyZWFrcG9pbnRDaGFuZ2VkLCB0aGlzKTsKLQotICAgICAg
ICB2YXIgbGluZU51bWJlciA9IGJyZWFrcG9pbnQubGluZSAtIDE7Ci0gICAgICAgIGlmIChsaW5l
TnVtYmVyID49IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50KQorICAgICAgICBpZiAoIXRoaXMu
X3RleHRWaWV3ZXIpCiAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fdGV4dE1v
ZGVsLnNldEF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiYnJlYWtwb2ludCIsIGJyZWFrcG9pbnQpOwot
ICAgICAgICBicmVha3BvaW50LnNvdXJjZVRleHQgPSB0aGlzLl90ZXh0TW9kZWwubGluZShicmVh
a3BvaW50LmxpbmUgLSAxKTsKLQogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmJlZ2luVXBkYXRl
cygpOwogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmFkZERlY29yYXRpb24obGluZU51bWJlciwg
IndlYmtpdC1icmVha3BvaW50Iik7Ci0gICAgICAgIGlmICghYnJlYWtwb2ludC5lbmFibGVkKQor
ICAgICAgICBpZiAoIWVuYWJsZWQpCiAgICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmFkZERl
Y29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50LWRpc2FibGVkIik7Ci0gICAg
ICAgIGlmIChicmVha3BvaW50LmNvbmRpdGlvbikKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
dGhpcy5fdGV4dFZpZXdlci5yZW1vdmVEZWNvcmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJl
YWtwb2ludC1kaXNhYmxlZCIpOworICAgICAgICBpZiAoaGFzQ29uZGl0aW9uKQogICAgICAgICAg
ICAgdGhpcy5fdGV4dFZpZXdlci5hZGREZWNvcmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJl
YWtwb2ludC1jb25kaXRpb25hbCIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0aGlzLl90
ZXh0Vmlld2VyLnJlbW92ZURlY29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50
LWNvbmRpdGlvbmFsIik7CiAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuZW5kVXBkYXRlcygpOwog
ICAgIH0sCiAKLSAgICBfcmVtb3ZlQnJlYWtwb2ludEZyb21Tb3VyY2U6IGZ1bmN0aW9uKGJyZWFr
cG9pbnQpCisgICAgcmVtb3ZlQnJlYWtwb2ludERlY29yYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1i
ZXIpCiAgICAgewotICAgICAgICBicmVha3BvaW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImVuYWJs
ZS1jaGFuZ2VkIiwgbnVsbCwgdGhpcyk7Ci0gICAgICAgIGJyZWFrcG9pbnQucmVtb3ZlRXZlbnRM
aXN0ZW5lcigiY29uZGl0aW9uLWNoYW5nZWQiLCBudWxsLCB0aGlzKTsKLQotICAgICAgICB2YXIg
bGluZU51bWJlciA9IGJyZWFrcG9pbnQubGluZSAtIDE7CisgICAgICAgIGlmICghdGhpcy5fdGV4
dFZpZXdlcikKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5i
ZWdpblVwZGF0ZXMoKTsKLSAgICAgICAgdGhpcy5fdGV4dE1vZGVsLnJlbW92ZUF0dHJpYnV0ZShs
aW5lTnVtYmVyLCAiYnJlYWtwb2ludCIpOwogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLnJlbW92
ZURlY29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50Iik7CiAgICAgICAgIHRo
aXMuX3RleHRWaWV3ZXIucmVtb3ZlRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFr
cG9pbnQtZGlzYWJsZWQiKTsKICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZW1vdmVEZWNvcmF0
aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJlYWtwb2ludC1jb25kaXRpb25hbCIpOwogICAgICAg
ICB0aGlzLl90ZXh0Vmlld2VyLmVuZFVwZGF0ZXMoKTsKICAgICB9LAogCi0gICAgX2NvbnRleHRN
ZW51OiBmdW5jdGlvbihldmVudCkKKyAgICBlZGl0QnJlYWtwb2ludENvbmRpdGlvbjogZnVuY3Rp
b24obGluZU51bWJlciwgY29uZGl0aW9uLCBjYWxsYmFjaykKICAgICB7Ci0gICAgICAgIHZhciB0
YXJnZXQgPSBldmVudC50YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcygid2Via2l0
LWxpbmUtbnVtYmVyIik7Ci0gICAgICAgIGlmICghdGFyZ2V0KQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB2YXIgcm93ID0gdGFyZ2V0LnBhcmVudEVsZW1lbnQ7CisgICAgICAgIHRoaXMu
X3Nob3dCcmVha3BvaW50Q29uZGl0aW9uUG9wdXAobGluZU51bWJlciArIDEpOwogCi0gICAgICAg
IGlmICghV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIHZhciBsaW5lTnVtYmVyID0gcm93LmxpbmVOdW1iZXI7Ci0gICAgICAgIHZhciBj
b250ZXh0TWVudSA9IG5ldyBXZWJJbnNwZWN0b3IuQ29udGV4dE1lbnUoKTsKKyAgICAgICAgdmFy
IGhpZGVQb3B1cCA9IHRoaXMuX2hpZGVCcmVha3BvaW50Q29uZGl0aW9uUG9wdXAuYmluZCh0aGlz
LCBsaW5lTnVtYmVyICsgMSk7CiAKLSAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIkNvbnRpbnVlIHRvIEhlcmUiKSwgdGhpcy5fY29udGludWVUb0hl
cmVEZWxlZ2F0ZS5iaW5kKHRoaXMsIGxpbmVOdW1iZXIgKyAxKSk7CisgICAgICAgIGZ1bmN0aW9u
IGNvbW1pdHRlZENhbGxiYWNrKGVsZW1lbnQsIG5ld1RleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGhpZGVQb3B1cCgpOworICAgICAgICAgICAgY2FsbGJhY2sodHJ1ZSwgbmV3VGV4dCk7Cisg
ICAgICAgIH0KIAotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX3RleHRNb2RlbC5nZXRB
dHRyaWJ1dGUobGluZU51bWJlciwgImJyZWFrcG9pbnQiKTsKLSAgICAgICAgaWYgKCFicmVha3Bv
aW50KSB7Ci0gICAgICAgICAgICAvLyBUaGlzIHJvdyBkb2Vzbid0IGhhdmUgYSBicmVha3BvaW50
OiBXZSB3YW50IHRvIHNob3cgQWRkIEJyZWFrcG9pbnQgYW5kIEFkZCBhbmQgRWRpdCBCcmVha3Bv
aW50LgotICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIkFkZCBCcmVha3BvaW50IiksIHRoaXMuX2FkZEJyZWFrcG9pbnREZWxlZ2F0ZS5iaW5k
KHRoaXMsIGxpbmVOdW1iZXIgKyAxKSk7CisgICAgICAgIGZ1bmN0aW9uIGNhbmNlbGxlZENhbGxi
YWNrKCkKKyAgICAgICAgeworICAgICAgICAgICAgaGlkZVBvcHVwKCk7CisgICAgICAgICAgICBj
YWxsYmFjayhmYWxzZSk7CisgICAgICAgIH0KIAotICAgICAgICAgICAgZnVuY3Rpb24gYWRkQ29u
ZGl0aW9uYWxCcmVha3BvaW50KCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aGlz
Ll9hZGRCcmVha3BvaW50RGVsZWdhdGUobGluZU51bWJlciArIDEpOwotICAgICAgICAgICAgICAg
IHZhciBicmVha3BvaW50ID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0dHJpYnV0ZShsaW5lTnVtYmVy
LCAiYnJlYWtwb2ludCIpOwotICAgICAgICAgICAgICAgIGlmIChicmVha3BvaW50KQotICAgICAg
ICAgICAgICAgICAgICB0aGlzLl9lZGl0QnJlYWtwb2ludENvbmRpdGlvbihicmVha3BvaW50KTsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgV2ViSW5zcGVjdG9yLnN0YXJ0RWRpdGluZyh0aGlzLl9l
ZGl0b3JFbGVtZW50LCBjb21taXR0ZWRDYWxsYmFjaywgY2FuY2VsbGVkQ2FsbGJhY2spOworICAg
ICAgICB0aGlzLl9lZGl0b3JFbGVtZW50LnZhbHVlID0gY29uZGl0aW9uOworICAgICAgICB0aGlz
Ll9lZGl0b3JFbGVtZW50LnNlbGVjdCgpOworICAgIH0sCiAKLSAgICAgICAgICAgIGNvbnRleHRN
ZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJBZGQgQ29uZGl0aW9uYWwgQnJl
YWtwb2ludOKApiIpLCBhZGRDb25kaXRpb25hbEJyZWFrcG9pbnQuYmluZCh0aGlzKSk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBUaGlzIHJvdyBoYXMgYSBicmVha3BvaW50LCB3
ZSB3YW50IHRvIHNob3cgZWRpdCBhbmQgcmVtb3ZlIGJyZWFrcG9pbnQsIGFuZCBlaXRoZXIgZGlz
YWJsZSBvciBlbmFibGUuCi0gICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYklu
c3BlY3Rvci5VSVN0cmluZygiUmVtb3ZlIEJyZWFrcG9pbnQiKSwgYnJlYWtwb2ludC5yZW1vdmUu
YmluZChicmVha3BvaW50KSk7Ci0gICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiRWRpdCBCcmVha3BvaW504oCmIiksIHRoaXMuX2VkaXRCcmVh
a3BvaW50Q29uZGl0aW9uLmJpbmQodGhpcywgYnJlYWtwb2ludCkpOwotICAgICAgICAgICAgaWYg
KGJyZWFrcG9pbnQuZW5hYmxlZCkKLSAgICAgICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJ
dGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiRGlzYWJsZSBCcmVha3BvaW50IiksIGZ1bmN0aW9u
KCkgeyBicmVha3BvaW50LmVuYWJsZWQgPSBmYWxzZTsgfSk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIkVuYWJsZSBCcmVha3BvaW50IiksIGZ1bmN0aW9uKCkgeyBicmVha3BvaW50LmVuYWJsZWQg
PSB0cnVlOyB9KTsKLSAgICAgICAgfQotICAgICAgICBjb250ZXh0TWVudS5zaG93KGV2ZW50KTsK
KyAgICBfY29udGV4dE1lbnU6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgdmFyIHRh
cmdldCA9IGV2ZW50LnRhcmdldC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKCJ3ZWJraXQt
bGluZS1udW1iZXIiKTsKKyAgICAgICAgaWYgKCF0YXJnZXQpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIHZhciBsaW5lTnVtYmVyID0gdGFyZ2V0LnBhcmVudEVsZW1lbnQubGluZU51bWJl
cjsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImNvbnRleHRtZW51Iiwg
eyBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLCBvcmlnaW5hbEV2ZW50OiBldmVudCB9KTsKICAgICB9
LAogCiAgICAgX3Njcm9sbDogZnVuY3Rpb24oZXZlbnQpCkBAIC01MjUsMTggKzQ2NSw4IEBAIFdl
Ykluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciB0YXJnZXQg
PSBldmVudC50YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcygid2Via2l0LWxpbmUt
bnVtYmVyIik7CiAgICAgICAgIGlmICghdGFyZ2V0KQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB2YXIgcm93ID0gdGFyZ2V0LnBhcmVudEVsZW1lbnQ7Ci0KLSAgICAgICAgdmFyIGxpbmVO
dW1iZXIgPSByb3cubGluZU51bWJlcjsKLQotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMu
X3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUobGluZU51bWJlciwgImJyZWFrcG9pbnQiKTsKLSAgICAg
ICAgaWYgKGJyZWFrcG9pbnQpIHsKLSAgICAgICAgICAgIGlmIChldmVudC5zaGlmdEtleSkKLSAg
ICAgICAgICAgICAgICBicmVha3BvaW50LmVuYWJsZWQgPSAhYnJlYWtwb2ludC5lbmFibGVkOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQucmVtb3ZlKCk7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdGhpcy5fYWRkQnJlYWtwb2ludERlbGVnYXRlKGxp
bmVOdW1iZXIgKyAxKTsKKyAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSB0YXJnZXQucGFyZW50RWxl
bWVudC5saW5lTnVtYmVyOworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygi
bW91c2Vkb3duIiwgeyBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLCBvcmlnaW5hbEV2ZW50OiBldmVu
dCB9KTsKICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICB9LAogCkBAIC02OTgs
NDAgKzYyOCw4IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5ldmFsdWF0ZUluU2VsZWN0ZWRDYWxsRnJh
bWUoZWxlbWVudC50ZXh0Q29udGVudCwgZmFsc2UsIHRoaXMuX3BvcG92ZXJPYmplY3RHcm91cCwg
ZXZhbHVhdGVDYWxsYmFjay5iaW5kKHRoaXMpKTsKICAgICB9LAogCi0gICAgX2VkaXRCcmVha3Bv
aW50Q29uZGl0aW9uOiBmdW5jdGlvbihicmVha3BvaW50KQotICAgIHsKLSAgICAgICAgdGhpcy5f
c2hvd0JyZWFrcG9pbnRDb25kaXRpb25Qb3B1cChicmVha3BvaW50LmxpbmUpOwotCi0gICAgICAg
IGZ1bmN0aW9uIGNvbW1pdHRlZChlbGVtZW50LCBuZXdUZXh0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBicmVha3BvaW50LmNvbmRpdGlvbiA9IG5ld1RleHQ7Ci0gICAgICAgICAgICBkaXNtaXNz
ZWQuY2FsbCh0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGRpc21pc3NlZCgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0aGlzLl9jb25kaXRpb25FbGVtZW50KQotICAg
ICAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIucmVtb3ZlRGVjb3JhdGlvbihicmVha3BvaW50
LmxpbmUgLSAxLCB0aGlzLl9jb25kaXRpb25FbGVtZW50KTsKLSAgICAgICAgICAgIGRlbGV0ZSB0
aGlzLl9jb25kaXRpb25FZGl0b3JFbGVtZW50OwotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2Nv
bmRpdGlvbkVsZW1lbnQ7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgZGlzbWlzc2VkSGFuZGxl
ciA9IGRpc21pc3NlZC5iaW5kKHRoaXMpOwotICAgICAgICB0aGlzLl9jb25kaXRpb25FZGl0b3JF
bGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCBkaXNtaXNzZWRIYW5kbGVyLCBmYWxzZSk7
Ci0KLSAgICAgICAgV2ViSW5zcGVjdG9yLnN0YXJ0RWRpdGluZyh0aGlzLl9jb25kaXRpb25FZGl0
b3JFbGVtZW50LCBjb21taXR0ZWQuYmluZCh0aGlzKSwgZGlzbWlzc2VkSGFuZGxlcik7Ci0gICAg
ICAgIHRoaXMuX2NvbmRpdGlvbkVkaXRvckVsZW1lbnQudmFsdWUgPSBicmVha3BvaW50LmNvbmRp
dGlvbjsKLSAgICAgICAgdGhpcy5fY29uZGl0aW9uRWRpdG9yRWxlbWVudC5zZWxlY3QoKTsKLSAg
ICB9LAotCiAgICAgX3Nob3dCcmVha3BvaW50Q29uZGl0aW9uUG9wdXA6IGZ1bmN0aW9uKGxpbmVO
dW1iZXIpCiAgICAgewotICAgICAgICB0aGlzLl9jb25kaXRpb25FbGVtZW50ID0gdGhpcy5fY3Jl
YXRlQ29uZGl0aW9uRWxlbWVudChsaW5lTnVtYmVyKTsKLSAgICAgICAgdGhpcy5fdGV4dFZpZXdl
ci5hZGREZWNvcmF0aW9uKGxpbmVOdW1iZXIgLSAxLCB0aGlzLl9jb25kaXRpb25FbGVtZW50KTsK
LSAgICB9LAotCi0gICAgX2NyZWF0ZUNvbmRpdGlvbkVsZW1lbnQ6IGZ1bmN0aW9uKGxpbmVOdW1i
ZXIpCi0gICAgewogICAgICAgICB2YXIgY29uZGl0aW9uRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICBjb25kaXRpb25FbGVtZW50LmNsYXNzTmFtZSA9ICJz
b3VyY2UtZnJhbWUtYnJlYWtwb2ludC1jb25kaXRpb24iOwogCkBAIC03NDYsOSArNjQ0LDE3IEBA
IFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIGVkaXRvckVs
ZW1lbnQuY2xhc3NOYW1lID0gIm1vbm9zcGFjZSI7CiAgICAgICAgIGVkaXRvckVsZW1lbnQudHlw
ZSA9ICJ0ZXh0IgogICAgICAgICBjb25kaXRpb25FbGVtZW50LmFwcGVuZENoaWxkKGVkaXRvckVs
ZW1lbnQpOwotICAgICAgICB0aGlzLl9jb25kaXRpb25FZGl0b3JFbGVtZW50ID0gZWRpdG9yRWxl
bWVudDsKIAotICAgICAgICByZXR1cm4gY29uZGl0aW9uRWxlbWVudDsKKyAgICAgICAgdGhpcy5f
Y29uZGl0aW9uRWxlbWVudCA9IGNvbmRpdGlvbkVsZW1lbnQ7CisgICAgICAgIHRoaXMuX2VkaXRv
ckVsZW1lbnQgPSBlZGl0b3JFbGVtZW50OworICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmFkZERl
Y29yYXRpb24obGluZU51bWJlciAtIDEsIHRoaXMuX2NvbmRpdGlvbkVsZW1lbnQpOworICAgIH0s
CisKKyAgICBfaGlkZUJyZWFrcG9pbnRDb25kaXRpb25Qb3B1cDogZnVuY3Rpb24obGluZU51bWJl
cikKKyAgICB7CisgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIucmVtb3ZlRGVjb3JhdGlvbihsaW5l
TnVtYmVyIC0gMSwgdGhpcy5fY29uZGl0aW9uRWxlbWVudCk7CisgICAgICAgIGRlbGV0ZSB0aGlz
Ll9lZGl0b3JFbGVtZW50OworICAgICAgICBkZWxldGUgdGhpcy5fY29uZGl0aW9uRWxlbWVudDsK
ICAgICB9LAogCiAgICAgX2V2YWxTZWxlY3Rpb25JbkNhbGxGcmFtZTogZnVuY3Rpb24oZXZlbnQp
CkBAIC03NzYsNSArNjgyLDExNiBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBl
ID0gewogICAgIH0KIH0KIAotCiBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9f
cHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlOworCitXZWJJbnNwZWN0b3Iu
U291cmNlRnJhbWVDb250cm9sbGVyID0gZnVuY3Rpb24oc291cmNlRnJhbWUsIHNvdXJjZUlEcywg
c291cmNlSURGb3JMaW5lKQoreworICAgIHRoaXMuX3NvdXJjZUZyYW1lID0gc291cmNlRnJhbWU7
CisgICAgdGhpcy5fc291cmNlSURzID0gc291cmNlSURzOworICAgIHRoaXMuX3NvdXJjZUlERm9y
TGluZSA9IHNvdXJjZUlERm9yTGluZTsKKworICAgIHRoaXMuX3NvdXJjZUZyYW1lLmFkZEV2ZW50
TGlzdGVuZXIoInRleHQtdmlld2VyLWNyZWF0ZWQiLCB0aGlzLl90ZXh0Vmlld2VyQ3JlYXRlZCwg
dGhpcyk7CisgICAgdGhpcy5fc291cmNlRnJhbWUuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1l
bnUiLCB0aGlzLl9jb250ZXh0TWVudSwgdGhpcyk7CisgICAgdGhpcy5fc291cmNlRnJhbWUuYWRk
RXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgdGhpcy5fbW91c2VEb3duLCB0aGlzKTsKK30KKwor
V2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lQ29udHJvbGxlci5wcm90b3R5cGUgPSB7CisgICAgX3Rl
eHRWaWV3ZXJDcmVhdGVkOiBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIGlmICghV2Vi
SW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IHZhciBicmVha3BvaW50cyA9IFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5icmVha3Bv
aW50c0ZvclNvdXJjZUlEcyh0aGlzLl9zb3VyY2VJRHMoKSk7CisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgYnJlYWtwb2ludHMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICBXZWJJbnNwZWN0
b3IucGFuZWxzLnNjcmlwdHMuY3JlYXRlQnJlYWtwb2ludFZpZXcoYnJlYWtwb2ludHNbaV0sIHRo
aXMuX3NvdXJjZUZyYW1lKTsKKyAgICB9LAorCisgICAgX2NvbnRleHRNZW51OiBmdW5jdGlvbihl
dmVudCkKKyAgICB7CisgICAgICAgIHZhciBsaW5lTnVtYmVyID0gZXZlbnQuZGF0YS5saW5lTnVt
YmVyICsgMTsKKyAgICAgICAgdmFyIG9yaWdpbmFsRXZlbnQgPSBldmVudC5kYXRhLm9yaWdpbmFs
RXZlbnQ7CisKKyAgICAgICAgaWYgKCFXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIHNvdXJjZUlEID0gdGhpcy5fc291cmNlSURG
b3JMaW5lKGxpbmVOdW1iZXIpOworICAgICAgICBpZiAoIXNvdXJjZUlEKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIHZhciBjb250ZXh0TWVudSA9IG5ldyBXZWJJbnNwZWN0b3IuQ29u
dGV4dE1lbnUoKTsKKyAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIkNvbnRpbnVlIHRvIEhlcmUiKSwgdGhpcy5fY29udGludWVUb0xpbmUuYmluZCh0
aGlzLCBzb3VyY2VJRCwgbGluZU51bWJlcikpOworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IFdl
Ykluc3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5maW5kQnJlYWtwb2ludChzb3VyY2VJRCwgbGlu
ZU51bWJlcik7CisgICAgICAgIGlmIChicmVha3BvaW50KSB7CisgICAgICAgICAgICAvLyBUaGlz
IHJvdyBoYXMgYSBicmVha3BvaW50LCB3ZSB3YW50IHRvIHNob3cgZWRpdCBhbmQgcmVtb3ZlIGJy
ZWFrcG9pbnQsIGFuZCBlaXRoZXIgZGlzYWJsZSBvciBlbmFibGUuCisgICAgICAgICAgICBjb250
ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmVtb3ZlIEJyZWFrcG9p
bnQiKSwgYnJlYWtwb2ludC5yZW1vdmUuYmluZChicmVha3BvaW50KSk7CisgICAgICAgICAgICBj
b250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiRWRpdCBCcmVha3Bv
aW504oCmIiksIHRoaXMuX2VkaXRCcmVha3BvaW50Q29uZGl0aW9uLmJpbmQodGhpcywgYnJlYWtw
b2ludCkpOworICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQuZW5hYmxlZCkKKyAgICAgICAgICAg
ICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiRGlzYWJs
ZSBCcmVha3BvaW50IiksIGZ1bmN0aW9uKCkgeyBicmVha3BvaW50LmVuYWJsZWQgPSBmYWxzZTsg
fSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5k
SXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkVuYWJsZSBCcmVha3BvaW50IiksIGZ1bmN0aW9u
KCkgeyBicmVha3BvaW50LmVuYWJsZWQgPSB0cnVlOyB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIC8vIFRoaXMgcm93IGRvZXNuJ3QgaGF2ZSBhIGJyZWFrcG9pbnQ6IFdlIHdhbnQg
dG8gc2hvdyBBZGQgQnJlYWtwb2ludCBhbmQgQWRkIGFuZCBFZGl0IEJyZWFrcG9pbnQuCisgICAg
ICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiQWRk
IEJyZWFrcG9pbnQiKSwgdGhpcy5fYWRkQnJlYWtwb2ludC5iaW5kKHRoaXMsIHNvdXJjZUlELCBs
aW5lTnVtYmVyKSk7CisgICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiQWRkIENvbmRpdGlvbmFsIEJyZWFrcG9pbnTigKYiKSwgdGhpcy5fYWRk
Q29uZGl0aW9uYWxCcmVha3BvaW50LmJpbmQodGhpcywgc291cmNlSUQsIGxpbmVOdW1iZXIpKTsK
KyAgICAgICAgfQorICAgICAgICBjb250ZXh0TWVudS5zaG93KG9yaWdpbmFsRXZlbnQpOworICAg
IH0sCisKKyAgICBfbW91c2VEb3duOiBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIHZh
ciBsaW5lTnVtYmVyID0gZXZlbnQuZGF0YS5saW5lTnVtYmVyICsgMTsKKyAgICAgICAgdmFyIG9y
aWdpbmFsRXZlbnQgPSBldmVudC5kYXRhLm9yaWdpbmFsRXZlbnQ7CisKKyAgICAgICAgaWYgKCFX
ZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgdmFyIHNvdXJjZUlEID0gdGhpcy5fc291cmNlSURGb3JMaW5lKGxpbmVOdW1iZXIpOworICAg
ICAgICBpZiAoIXNvdXJjZUlEKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBi
cmVha3BvaW50ID0gV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLmZpbmRCcmVha3BvaW50
KHNvdXJjZUlELCBsaW5lTnVtYmVyKTsKKyAgICAgICAgaWYgKGJyZWFrcG9pbnQpIHsKKyAgICAg
ICAgICAgIGlmIChvcmlnaW5hbEV2ZW50LnNoaWZ0S2V5KQorICAgICAgICAgICAgICAgIGJyZWFr
cG9pbnQuZW5hYmxlZCA9ICFicmVha3BvaW50LmVuYWJsZWQ7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgYnJlYWtwb2ludC5yZW1vdmUoKTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICB0aGlzLl9hZGRCcmVha3BvaW50KHNvdXJjZUlELCBsaW5lTnVtYmVyKTsKKyAgICB9
LAorCisgICAgX2FkZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCBsaW5lTnVtYmVyLCBj
b25kaXRpb24pCisgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIu
c2V0QnJlYWtwb2ludChzb3VyY2VJRCwgbGluZU51bWJlciwgdHJ1ZSwgY29uZGl0aW9uIHx8ICIi
KTsKKyAgICAgICAgaWYgKCFXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMuYnJlYWtwb2ludHNB
Y3RpdmF0ZWQpCisgICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMudG9nZ2xl
QnJlYWtwb2ludHNDbGlja2VkKCk7CisgICAgfSwKKworICAgIF9hZGRDb25kaXRpb25hbEJyZWFr
cG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCBsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgdmFy
IHNvdXJjZUZyYW1lTGluZU51bWJlciA9IGxpbmVOdW1iZXIgLSAxOworICAgICAgICBmdW5jdGlv
biBkaWRFZGl0QnJlYWtwb2ludENvbmRpdGlvbihjb21taXR0ZWQsIGNvbmRpdGlvbikKKyAgICAg
ICAgeworICAgICAgICAgICAgdGhpcy5fc291cmNlRnJhbWUucmVtb3ZlQnJlYWtwb2ludERlY29y
YXRpb24oc291cmNlRnJhbWVMaW5lTnVtYmVyKTsKKyAgICAgICAgICAgIGlmIChjb21taXR0ZWQp
CisgICAgICAgICAgICAgICAgdGhpcy5fYWRkQnJlYWtwb2ludChzb3VyY2VJRCwgbGluZU51bWJl
ciwgY29uZGl0aW9uKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9zb3VyY2VGcmFtZS5zZXRC
cmVha3BvaW50RGVjb3JhdGlvbihzb3VyY2VGcmFtZUxpbmVOdW1iZXIsIHRydWUsIHRydWUpOwor
ICAgICAgICB0aGlzLl9zb3VyY2VGcmFtZS5lZGl0QnJlYWtwb2ludENvbmRpdGlvbihzb3VyY2VG
cmFtZUxpbmVOdW1iZXIsICIiLCBkaWRFZGl0QnJlYWtwb2ludENvbmRpdGlvbi5iaW5kKHRoaXMp
KTsKKyAgICB9LAorCisgICAgX2VkaXRCcmVha3BvaW50Q29uZGl0aW9uOiBmdW5jdGlvbihicmVh
a3BvaW50KQorICAgIHsKKyAgICAgICAgdmFyIHNvdXJjZUZyYW1lTGluZU51bWJlciA9IGJyZWFr
cG9pbnQubGluZSAtIDE7CisgICAgICAgIGZ1bmN0aW9uIGRpZEVkaXRCcmVha3BvaW50Q29uZGl0
aW9uKGNvbW1pdHRlZCwgY29uZGl0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29t
bWl0dGVkKQorICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQuY29uZGl0aW9uID0gY29uZGl0aW9u
OworICAgICAgICB9CisgICAgICAgIHRoaXMuX3NvdXJjZUZyYW1lLmVkaXRCcmVha3BvaW50Q29u
ZGl0aW9uKHNvdXJjZUZyYW1lTGluZU51bWJlciwgYnJlYWtwb2ludC5jb25kaXRpb24sIGRpZEVk
aXRCcmVha3BvaW50Q29uZGl0aW9uKTsKKyAgICB9LAorCisgICAgX2NvbnRpbnVlVG9MaW5lOiBm
dW5jdGlvbihzb3VyY2VJRCwgbGluZU51bWJlcikKKyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rv
ci5wYW5lbHMuc2NyaXB0cy5jb250aW51ZVRvTGluZShzb3VyY2VJRCwgbGluZU51bWJlcik7Cisg
ICAgfQorfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZVZp
ZXcuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlVmlldy5qcwppbmRleCA5
NjE2MzIxLi40MWM5YzQ1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
U291cmNlVmlldy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlVmll
dy5qcwpAQCAtMzMsNyArMzMsOCBAQCBXZWJJbnNwZWN0b3IuU291cmNlVmlldyA9IGZ1bmN0aW9u
KHJlc291cmNlKQogICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJzb3VyY2UiKTsKIAog
ICAgIHZhciBjYW5FZGl0U2NyaXB0cyA9IFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cyAmJiBX
ZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMuY2FuRWRpdFNjcmlwdHMoKSAmJiByZXNvdXJjZS50
eXBlID09PSBXZWJJbnNwZWN0b3IuUmVzb3VyY2UuVHlwZS5TY3JpcHQ7Ci0gICAgdGhpcy5zb3Vy
Y2VGcmFtZSA9IG5ldyBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUodGhpcy5lbGVtZW50LCB0aGlz
Ll9hZGRCcmVha3BvaW50LmJpbmQodGhpcyksIGNhbkVkaXRTY3JpcHRzID8gdGhpcy5fZWRpdExp
bmUuYmluZCh0aGlzKSA6IG51bGwsIHRoaXMuX2NvbnRpbnVlVG9MaW5lLmJpbmQodGhpcykpOwor
ICAgIHRoaXMuc291cmNlRnJhbWUgPSBuZXcgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lKHRoaXMu
ZWxlbWVudCwgY2FuRWRpdFNjcmlwdHMgPyB0aGlzLl9lZGl0TGluZS5iaW5kKHRoaXMpIDogbnVs
bCk7CisgICAgdGhpcy5fc291cmNlRnJhbWVDb250cm9sbGVyID0gbmV3IFdlYkluc3BlY3Rvci5T
b3VyY2VGcmFtZUNvbnRyb2xsZXIodGhpcy5zb3VyY2VGcmFtZSwgdGhpcy5fc291cmNlSURzLmJp
bmQodGhpcyksIHRoaXMuX3NvdXJjZUlERm9yTGluZS5iaW5kKHRoaXMpKTsKICAgICByZXNvdXJj
ZS5hZGRFdmVudExpc3RlbmVyKCJmaW5pc2hlZCIsIHRoaXMuX3Jlc291cmNlTG9hZGluZ0Zpbmlz
aGVkLCB0aGlzKTsKICAgICB0aGlzLl9mcmFtZU5lZWRzU2V0dXAgPSB0cnVlOwogfQpAQCAtMTAw
LDkgKzEwMSw2IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VWaWV3LnByb3RvdHlwZSA9IHsKICAgICAg
ICAgdmFyIG1pbWVUeXBlID0gdGhpcy5fY2Fub25pY2FsTWltZVR5cGUodGhpcy5yZXNvdXJjZSk7
CiAgICAgICAgIHRoaXMuc291cmNlRnJhbWUuc2V0Q29udGVudChtaW1lVHlwZSwgY29udGVudCwg
dGhpcy5yZXNvdXJjZS51cmwpOwogICAgICAgICB0aGlzLl9zb3VyY2VGcmFtZVNldHVwRmluaXNo
ZWQoKTsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRN
YW5hZ2VyLmJyZWFrcG9pbnRzRm9yVVJMKHRoaXMucmVzb3VyY2UudXJsKTsKLSAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBicmVha3BvaW50cy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRo
aXMuc291cmNlRnJhbWUuYWRkQnJlYWtwb2ludChicmVha3BvaW50c1tpXSk7CiAgICAgfSwKIAog
ICAgIF9jYW5vbmljYWxNaW1lVHlwZTogZnVuY3Rpb24ocmVzb3VyY2UpCkBAIC0xMTksMjMgKzEx
Nyw2IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhp
cy5yZXNvdXJjZS5yZW1vdmVFdmVudExpc3RlbmVyKCJmaW5pc2hlZCIsIHRoaXMuX3Jlc291cmNl
TG9hZGluZ0ZpbmlzaGVkLCB0aGlzKTsKICAgICB9LAogCi0gICAgX2NvbnRpbnVlVG9MaW5lOiBm
dW5jdGlvbihsaW5lKQotICAgIHsKLSAgICAgICAgdmFyIHNjcmlwdHNQYW5lbCA9IFdlYkluc3Bl
Y3Rvci5wYW5lbHMuc2NyaXB0czsKLSAgICAgICAgaWYgKHNjcmlwdHNQYW5lbCkgewotICAgICAg
ICAgICAgdmFyIHNvdXJjZUlEID0gdGhpcy5fc291cmNlSURGb3JMaW5lKGxpbmUpOwotICAgICAg
ICAgICAgc2NyaXB0c1BhbmVsLmNvbnRpbnVlVG9MaW5lKHNvdXJjZUlELCBsaW5lKTsKLSAgICAg
ICAgfQotICAgIH0sCi0KLSAgICBfYWRkQnJlYWtwb2ludDogZnVuY3Rpb24obGluZSkKLSAgICB7
Ci0gICAgICAgIHZhciBzb3VyY2VJRCA9IHRoaXMuX3NvdXJjZUlERm9yTGluZShsaW5lKTsKLSAg
ICAgICAgV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLnNldEJyZWFrcG9pbnQoc291cmNl
SUQsIHRoaXMucmVzb3VyY2UudXJsLCBsaW5lLCB0cnVlLCAiIik7Ci0gICAgICAgIGlmICghV2Vi
SW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLmJyZWFrcG9pbnRzQWN0aXZhdGVkKQotICAgICAgICAg
ICAgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnRvZ2dsZUJyZWFrcG9pbnRzQ2xpY2tlZCgp
OwotICAgIH0sCi0KICAgICBfZWRpdExpbmU6IGZ1bmN0aW9uKGxpbmUsIG5ld0NvbnRlbnQsIGNh
bmNlbEVkaXRpbmdDYWxsYmFjaykKICAgICB7CiAgICAgICAgIHZhciBsaW5lcyA9IFtdOwpAQCAt
MTQ4LDcgKzEyOSw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VWaWV3LnByb3RvdHlwZSA9IHsKICAg
ICAgICAgfQogCiAgICAgICAgIHZhciBlZGl0RGF0YSA9IHt9OwotICAgICAgICBlZGl0RGF0YS5z
b3VyY2VJRCA9IHRoaXMuX3NvdXJjZUlERm9yTGluZShsaW5lKTsKKyAgICAgICAgZWRpdERhdGEu
c291cmNlSUQgPSB0aGlzLl9zb3VyY2VJREZvckxpbmUobGluZSArIDEpOwogICAgICAgICBlZGl0
RGF0YS5jb250ZW50ID0gbGluZXMuam9pbigiXG4iKTsKICAgICAgICAgZWRpdERhdGEubGluZSA9
IGxpbmU7CiAgICAgICAgIGVkaXREYXRhLmxpbmVzQ291bnRUb1NoaWZ0ID0gbmV3Q29udGVudC5z
cGxpdCgiXG4iKS5sZW5ndGggLSAxOwpAQCAtMTcxLDYgKzE1MiwxNSBAQCBXZWJJbnNwZWN0b3Iu
U291cmNlVmlldy5wcm90b3R5cGUgPSB7CiAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuc2Ny
aXB0cy5lZGl0U2NyaXB0U291cmNlKG5ld0VkaXREYXRhLCB0aGlzLl9lZGl0TGluZUNvbXBsZXRl
LmJpbmQodGhpcywgbmV3RWRpdERhdGEpKTsKICAgICB9LAogCisgICAgX3NvdXJjZUlEczogZnVu
Y3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IHt9OworICAgICAgICB2YXIgc2Ny
aXB0cyA9IHRoaXMucmVzb3VyY2Uuc2NyaXB0czsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBzY3JpcHRzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgcmVzdWx0W3NjcmlwdHNbaV0uc291
cmNlSURdID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9LAorCiAgICAgX3Nv
dXJjZUlERm9yTGluZTogZnVuY3Rpb24obGluZSkKICAgICB7CiAgICAgICAgIHZhciBzb3VyY2VJ
RCA9IG51bGw7Cg==
</data>
<flag name="review"
          id="66041"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75490</attachid>
            <date>2010-12-03 04:39:54 -0800</date>
            <delta_ts>2010-12-06 04:29:15 -0800</delta_ts>
            <desc>Remove breakpoint storages from SourceFrame.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>19376</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NjIzY2Y3OC4uNjdkYWI0YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MyBAQAorMjAxMC0xMi0wMyAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBTb3VyY2VGcmFtZSByZWZhY3Rv
cmluZy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUw
MjIzCisKKyAgICAgICAgU291cmNlRnJhbWUgc2hvdWxkIGFzayBCcmVha3BvaW50TWFuYWdlciBh
Ym91dCBleGlzdGluZyBicmVha3BvaW50cyBpbnN0ZWFkIG9mIG1haW50YWluaW5nCisgICAgICAg
IGl0J3Mgb3duIHN0b3JhZ2VzLgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVh
a3BvaW50TWFuYWdlci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdl
ci5wcm90b3R5cGUuYnJlYWtwb2ludHNGb3JTb3VyY2VJRCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLmJyZWFrcG9pbnRzRm9yU291cmNlSURzKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuX2ZpbmRC
cmVha3BvaW50cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJv
dG90eXBlLmZpbmRCcmVha3BvaW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1Nj
cmlwdFZpZXcuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0Vmlldyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU2NyaXB0Vmlldy5wcm90b3R5cGUuX2ZpbmRBbGxCcmVha3BvaW50cyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0Vmlldy5wcm90b3R5cGUuX3VybCk6CisgICAg
ICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanM6CisgICAgICAgICogaW5z
cGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
b3VyY2VGcmFtZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBl
LmFkZEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3Rv
dHlwZS5fY3JlYXRlVmlld2VySWZOZWVkZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJj
ZUZyYW1lLnByb3RvdHlwZS5fZWRpdExpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJj
ZUZyYW1lLnByb3RvdHlwZS5fYWRkRXhpc3RpbmdCcmVha3BvaW50c1RvU291cmNlKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX2FkZEJyZWFrcG9pbnRUb1Nv
dXJjZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9yZW1v
dmVCcmVha3BvaW50RnJvbVNvdXJjZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJh
bWUucHJvdG90eXBlLl9jb250ZXh0TWVudS5hZGRDb25kaXRpb25hbEJyZWFrcG9pbnQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fY29udGV4dE1lbnUpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fbW91c2VEb3duKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZVZpZXcuanM6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU291cmNlVmlldyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlVmll
dy5wcm90b3R5cGUuX2NvbnRlbnRMb2FkZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJj
ZVZpZXcucHJvdG90eXBlLl9hZGRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
b3VyY2VWaWV3LnByb3RvdHlwZS5fZmluZEFsbEJyZWFrcG9pbnRzKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5Tb3VyY2VWaWV3LnByb3RvdHlwZS5fZmluZEJyZWFrcG9pbnQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcucHJvdG90eXBlLl9lZGl0TGluZSk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU291cmNlVmlldy5wcm90b3R5cGUuX3VybCk6CisKIDIwMTAtMTItMDIgIFNp
bW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2ZXJ0IHI3
MzIxNyBhbmQgcjczMjI3IGJlY2F1c2Ugb2YgY29udGludWVkIGJ1c3RhZ2UuCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMgYi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMKaW5kZXggM2Q1MTA5
Mi4uMDc4YmY1MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFr
cG9pbnRNYW5hZ2VyLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3Bv
aW50TWFuYWdlci5qcwpAQCAtNjUsMjQgKzY1LDMxIEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50
TWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAgICBicmVha3BvaW50c0ZvclNvdXJjZUlEOiBmdW5j
dGlvbihzb3VyY2VJRCkKICAgICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50cyA9IFtdOwotICAg
ICAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl9icmVha3BvaW50cykgewotICAgICAgICAgICAgaWYg
KHRoaXMuX2JyZWFrcG9pbnRzW2lkXS5zb3VyY2VJRCA9PT0gc291cmNlSUQpCi0gICAgICAgICAg
ICAgICAgYnJlYWtwb2ludHMucHVzaCh0aGlzLl9icmVha3BvaW50c1tpZF0pOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBicmVha3BvaW50czsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmRC
cmVha3BvaW50cyhmdW5jdGlvbihiKSB7IHJldHVybiBiLnNvdXJjZUlEID09PSBzb3VyY2VJRDsg
fSk7CisgICAgfSwKKworICAgIGJyZWFrcG9pbnRzRm9yU291cmNlSURzOiBmdW5jdGlvbihzb3Vy
Y2VJRHMpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fZmluZEJyZWFrcG9pbnRzKGZ1bmN0
aW9uKGIpIHsgcmV0dXJuIGIuc291cmNlSUQgaW4gc291cmNlSURzOyB9KTsKICAgICB9LAogCi0g
ICAgYnJlYWtwb2ludHNGb3JVUkw6IGZ1bmN0aW9uKHVybCkKKyAgICBfZmluZEJyZWFrcG9pbnRz
OiBmdW5jdGlvbihmaWx0ZXIpCiAgICAgewogICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSBbXTsK
ICAgICAgICAgZm9yICh2YXIgaWQgaW4gdGhpcy5fYnJlYWtwb2ludHMpIHsKLSAgICAgICAgICAg
IGlmICh0aGlzLl9icmVha3BvaW50c1tpZF0udXJsID09PSB1cmwpCi0gICAgICAgICAgICAgICAg
YnJlYWtwb2ludHMucHVzaCh0aGlzLl9icmVha3BvaW50c1tpZF0pOworICAgICAgICAgICB2YXIg
YnJlYWtwb2ludCA9IHRoaXMuX2JyZWFrcG9pbnRzW2lkXTsKKyAgICAgICAgICAgaWYgKGZpbHRl
cihicmVha3BvaW50KSkKKyAgICAgICAgICAgICAgIGJyZWFrcG9pbnRzLnB1c2goYnJlYWtwb2lu
dCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGJyZWFrcG9pbnRzOwogICAgIH0sCiAKKyAg
ICBmaW5kQnJlYWtwb2ludDogZnVuY3Rpb24oc291cmNlSUQsIGxpbmVOdW1iZXIpCisgICAgewor
ICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQuanNCcmVh
a3BvaW50SWQoc291cmNlSUQsIGxpbmVOdW1iZXIpOworICAgICAgICByZXR1cm4gdGhpcy5fYnJl
YWtwb2ludHNbYnJlYWtwb2ludElkXTsKKyAgICB9LAorCiAgICAgcmVzZXQ6IGZ1bmN0aW9uKCkK
ICAgICB7CiAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzID0ge307CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Vmlldy5qcyBiL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9TY3JpcHRWaWV3LmpzCmluZGV4IGQ4NzhlOWIuLjcxMzM3MzUgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRWaWV3LmpzCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRWaWV3LmpzCkBAIC0zMyw4ICszMywxNSBAQCBX
ZWJJbnNwZWN0b3IuU2NyaXB0VmlldyA9IGZ1bmN0aW9uKHNjcmlwdCkKIAogICAgIHRoaXMuX2Zy
YW1lTmVlZHNTZXR1cCA9IHRydWU7CiAgICAgdGhpcy5fc291cmNlRnJhbWVTZXR1cCA9IGZhbHNl
OwotICAgIHZhciBjYW5FZGl0U2NyaXB0cyA9IFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5j
YW5FZGl0U2NyaXB0cygpOwotICAgIHRoaXMuc291cmNlRnJhbWUgPSBuZXcgV2ViSW5zcGVjdG9y
LlNvdXJjZUZyYW1lKHRoaXMuZWxlbWVudCwgdGhpcy5fYWRkQnJlYWtwb2ludC5iaW5kKHRoaXMp
LCBjYW5FZGl0U2NyaXB0cyA/IHRoaXMuX2VkaXRMaW5lLmJpbmQodGhpcykgOiBudWxsLCB0aGlz
Ll9jb250aW51ZVRvTGluZS5iaW5kKHRoaXMpKTsKKworICAgIHZhciBkZWxlZ2F0ZSA9IHt9Owor
ICAgIGRlbGVnYXRlLmFkZEJyZWFrcG9pbnQgPSB0aGlzLl9hZGRCcmVha3BvaW50LmJpbmQodGhp
cyk7CisgICAgZGVsZWdhdGUuY29udGludWVUb0xpbmUgPSB0aGlzLl9jb250aW51ZVRvTGluZS5i
aW5kKHRoaXMpOworICAgIGRlbGVnYXRlLmZpbmRBbGxCcmVha3BvaW50cyA9IHRoaXMuX2ZpbmRB
bGxCcmVha3BvaW50cy5iaW5kKHRoaXMpOworICAgIGRlbGVnYXRlLmZpbmRCcmVha3BvaW50ID0g
dGhpcy5fZmluZEJyZWFrcG9pbnQuYmluZCh0aGlzKTsKKyAgICBpZiAoV2ViSW5zcGVjdG9yLnBh
bmVscy5zY3JpcHRzLmNhbkVkaXRTY3JpcHRzKCkpCisgICAgICAgIGRlbGVnYXRlLmVkaXRMaW5l
ID0gdGhpcy5fZWRpdExpbmUuYmluZCh0aGlzKTsKKyAgICB0aGlzLnNvdXJjZUZyYW1lID0gbmV3
IFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZSh0aGlzLmVsZW1lbnQsIGRlbGVnYXRlKTsKIH0KIAog
V2ViSW5zcGVjdG9yLlNjcmlwdFZpZXcucHJvdG90eXBlID0gewpAQCAtODUsMTggKzkyLDkgQEAg
V2ViSW5zcGVjdG9yLlNjcmlwdFZpZXcucHJvdG90eXBlID0gewogICAgICAgICAgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInNjcmlwdC1yZXNvdXJjZS12aWV3cyIpLmFwcGVuZENoaWxkKHRo
aXMuZWxlbWVudCk7CiAgICAgfSwKIAotICAgIF9jb250aW51ZVRvTGluZTogZnVuY3Rpb24obGlu
ZSkKLSAgICB7Ci0gICAgICAgIHZhciBzY3JpcHRzUGFuZWwgPSBXZWJJbnNwZWN0b3IucGFuZWxz
LnNjcmlwdHM7Ci0gICAgICAgIGlmIChzY3JpcHRzUGFuZWwpCi0gICAgICAgICAgICBzY3JpcHRz
UGFuZWwuY29udGludWVUb0xpbmUodGhpcy5zY3JpcHQuc291cmNlSUQsIGxpbmUpOwotICAgIH0s
Ci0KLSAgICBfYWRkQnJlYWtwb2ludDogZnVuY3Rpb24obGluZSkKKyAgICBfZmluZEFsbEJyZWFr
cG9pbnRzOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2lu
dE1hbmFnZXIuc2V0QnJlYWtwb2ludCh0aGlzLnNjcmlwdC5zb3VyY2VJRCwgdGhpcy5zY3JpcHQu
c291cmNlVVJMLCBsaW5lLCB0cnVlLCAiIik7Ci0gICAgICAgIGlmICghV2ViSW5zcGVjdG9yLnBh
bmVscy5zY3JpcHRzLmJyZWFrcG9pbnRzQWN0aXZhdGVkKQotICAgICAgICAgICAgV2ViSW5zcGVj
dG9yLnBhbmVscy5zY3JpcHRzLnRvZ2dsZUJyZWFrcG9pbnRzQ2xpY2tlZCgpOworICAgICAgICBy
ZXR1cm4gV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLmJyZWFrcG9pbnRzRm9yU291cmNl
SUQodGhpcy5zY3JpcHQuc291cmNlSUQpOwogICAgIH0sCiAKICAgICBfZWRpdExpbmVDb21wbGV0
ZTogZnVuY3Rpb24obmV3Qm9keSkKQEAgLTExMCw2ICsxMDgsMTEgQEAgV2ViSW5zcGVjdG9yLlNj
cmlwdFZpZXcucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gdGhpcy5zY3JpcHQuc291cmNl
SUQ7CiAgICAgfSwKIAorICAgIF91cmw6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVy
biB0aGlzLnNjcmlwdC5zb3VyY2VVUkw7CisgICAgfSwKKwogICAgIC8vIFRoZSBmb2xsb3dpbmcg
bWV0aG9kcyBhcmUgcHVsbGVkIGZyb20gU291cmNlVmlldywgc2luY2UgdGhleSBhcmUKICAgICAv
LyBnZW5lcmljIGFuZCB3b3JrIHdpdGggU2NyaXB0VmlldyBqdXN0IGZpbmUuCiAKQEAgLTEyNyw2
ICsxMzAsOSBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0Vmlldy5wcm90b3R5cGUgPSB7CiAgICAgc2hv
d2luZ0ZpcnN0U2VhcmNoUmVzdWx0OiBXZWJJbnNwZWN0b3IuU291cmNlVmlldy5wcm90b3R5cGUu
c2hvd2luZ0ZpcnN0U2VhcmNoUmVzdWx0LAogICAgIHNob3dpbmdMYXN0U2VhcmNoUmVzdWx0OiBX
ZWJJbnNwZWN0b3IuU291cmNlVmlldy5wcm90b3R5cGUuc2hvd2luZ0xhc3RTZWFyY2hSZXN1bHQs
CiAgICAgX2p1bXBUb1NlYXJjaFJlc3VsdDogV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcucHJvdG90
eXBlLl9qdW1wVG9TZWFyY2hSZXN1bHQsCisgICAgX2FkZEJyZWFrcG9pbnQ6IFdlYkluc3BlY3Rv
ci5Tb3VyY2VWaWV3LnByb3RvdHlwZS5fYWRkQnJlYWtwb2ludCwKKyAgICBfZmluZEJyZWFrcG9p
bnQ6IFdlYkluc3BlY3Rvci5Tb3VyY2VWaWV3LnByb3RvdHlwZS5fZmluZEJyZWFrcG9pbnQsCisg
ICAgX2NvbnRpbnVlVG9MaW5lOiBXZWJJbnNwZWN0b3IuU291cmNlVmlldy5wcm90b3R5cGUuX2Nv
bnRpbnVlVG9MaW5lLAogICAgIF9lZGl0TGluZTogV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcucHJv
dG90eXBlLl9lZGl0TGluZSwKICAgICByZXNpemU6IFdlYkluc3BlY3Rvci5Tb3VyY2VWaWV3LnBy
b3RvdHlwZS5yZXNpemUKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9TY3JpcHRzUGFuZWwuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1Bh
bmVsLmpzCmluZGV4IDYxYTJmMjguLmZmYzk5YmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1NjcmlwdHNQYW5lbC5qcwpAQCAtMzEyLDcgKzMxMiw3IEBAIFdlYkluc3BlY3Rvci5T
Y3JpcHRzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
IC8vIE5lZWQgdG8gY2xlYXIgYnJlYWtwb2ludHMgYW5kIHJlLWNyZWF0ZSB0aGVtIGxhdGVyIHdo
ZW4gZWRpdGluZyBzb3VyY2UuCi0gICAgICAgIHZhciBicmVha3BvaW50cyA9IFdlYkluc3BlY3Rv
ci5icmVha3BvaW50TWFuYWdlci5icmVha3BvaW50c0ZvclNvdXJjZUlEKHNvdXJjZUlEKTsKKyAg
ICAgICAgdmFyIGJyZWFrcG9pbnRzID0gV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLmJy
ZWFrcG9pbnRzRm9yU291cmNlSUQoZWRpdERhdGEuc291cmNlSUQpOwogICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGJyZWFrcG9pbnRzLmxlbmd0aDsgKytpKQogICAgICAgICAgICAgYnJlYWtw
b2ludHNbaV0ucmVtb3ZlKCk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9Tb3VyY2VGcmFtZS5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VG
cmFtZS5qcwppbmRleCA4ZTA3N2NkLi4zYjVmZTMzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1NvdXJjZUZyYW1lLmpzCkBAIC0yOCw3ICsyOCw3IEBACiAgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
ICovCiAKLVdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZSA9IGZ1bmN0aW9uKHBhcmVudEVsZW1lbnQs
IGFkZEJyZWFrcG9pbnREZWxlZ2F0ZSwgZWRpdERlbGVnYXRlLCBjb250aW51ZVRvSGVyZURlbGVn
YXRlKQorV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lID0gZnVuY3Rpb24ocGFyZW50RWxlbWVudCwg
ZGVsZWdhdGUpCiB7CiAgICAgdGhpcy5fcGFyZW50RWxlbWVudCA9IHBhcmVudEVsZW1lbnQ7CiAK
QEAgLTM4LDEzICszOCw5IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZSA9IGZ1bmN0aW9uKHBh
cmVudEVsZW1lbnQsIGFkZEJyZWFrcG9pbnREZWxlZ2F0ZSwgZWRpdERlCiAgICAgdGhpcy5fbWVz
c2FnZXMgPSBbXTsKICAgICB0aGlzLl9yb3dNZXNzYWdlcyA9IHt9OwogICAgIHRoaXMuX21lc3Nh
Z2VCdWJibGVzID0ge307Ci0gICAgdGhpcy5icmVha3BvaW50cyA9IFtdOwogCiAgICAgdGhpcy5f
bG9hZGVkID0gZmFsc2U7Ci0KLSAgICB0aGlzLl9jb250aW51ZVRvSGVyZURlbGVnYXRlID0gY29u
dGludWVUb0hlcmVEZWxlZ2F0ZTsKLSAgICB0aGlzLl9hZGRCcmVha3BvaW50RGVsZWdhdGUgPSBh
ZGRCcmVha3BvaW50RGVsZWdhdGU7Ci0gICAgdGhpcy5fZWRpdERlbGVnYXRlID0gZWRpdERlbGVn
YXRlOworICAgIHRoaXMuX2RlbGVnYXRlID0gZGVsZWdhdGU7CiAgICAgdGhpcy5fcG9wb3Zlck9i
amVjdEdyb3VwID0gInBvcG92ZXIiOwogfQogCkBAIC0xMDcsMjEgKzEwMywxMCBAQCBXZWJJbnNw
ZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogCiAgICAgYWRkQnJlYWtwb2ludDogZnVu
Y3Rpb24oYnJlYWtwb2ludCkKICAgICB7Ci0gICAgICAgIHRoaXMuYnJlYWtwb2ludHMucHVzaChi
cmVha3BvaW50KTsKLSAgICAgICAgYnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKCJyZW1vdmVk
IiwgdGhpcy5fYnJlYWtwb2ludFJlbW92ZWQsIHRoaXMpOwogICAgICAgICBpZiAodGhpcy5fdGV4
dFZpZXdlcikKICAgICAgICAgICAgIHRoaXMuX2FkZEJyZWFrcG9pbnRUb1NvdXJjZShicmVha3Bv
aW50KTsKICAgICB9LAogCi0gICAgX2JyZWFrcG9pbnRSZW1vdmVkOiBmdW5jdGlvbihldmVudCkK
LSAgICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQudGFyZ2V0OwotCi0gICAgICAg
IHRoaXMuYnJlYWtwb2ludHMucmVtb3ZlKGJyZWFrcG9pbnQpOwotICAgICAgICBpZiAodGhpcy5f
dGV4dFZpZXdlcikKLSAgICAgICAgICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9pbnRGcm9tU291cmNl
KGJyZWFrcG9pbnQpOwotICAgIH0sCi0KICAgICBhZGRNZXNzYWdlOiBmdW5jdGlvbihtc2cpCiAg
ICAgewogICAgICAgICAvLyBEb24ndCBhZGQgdGhlIG1lc3NhZ2UgaWYgdGhlcmUgaXMgbm8gbWVz
c2FnZSBvciB2YWxpZCBsaW5lIG9yIGlmIHRoZSBtc2cgaXNuJ3QgYW4gZXJyb3Igb3Igd2Fybmlu
Zy4KQEAgLTIzOSw4ICsyMjQsMjAgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9saW5lVG9IaWdobGlnaHQ7CiAgICAgICAg
IH0KICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5lbmRVcGRhdGVzKCk7Ci0gICAgICAgIGlmICh0
aGlzLl9lZGl0RGVsZWdhdGUpCi0gICAgICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmVkaXRDYWxs
YmFjayA9IHRoaXMuX2VkaXREZWxlZ2F0ZTsKKyAgICAgICAgaWYgKHRoaXMuX2RlbGVnYXRlLmVk
aXRMaW5lKQorICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5lZGl0Q2FsbGJhY2sgPSB0aGlz
Ll9lZGl0TGluZS5iaW5kKHRoaXMpOworICAgIH0sCisKKyAgICBfZWRpdExpbmU6IGZ1bmN0aW9u
KGxpbmVOdW1iZXIsIG5ld0NvbnRlbnQsIGNhbmNlbEVkaXRpbmdDYWxsYmFjaykKKyAgICB7Cisg
ICAgICAgIHZhciBsaW5lcyA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMu
X3RleHRNb2RlbC5saW5lc0NvdW50OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpID09PSBsaW5l
TnVtYmVyKQorICAgICAgICAgICAgICAgIGxpbmVzLnB1c2gobmV3Q29udGVudCk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgbGluZXMucHVzaCh0aGlzLl90ZXh0TW9kZWwubGlu
ZShpKSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fZGVsZWdhdGUuZWRpdExpbmUobGluZU51
bWJlciArIDEsIG5ld0NvbnRlbnQuc3BsaXQoIlxuIikubGVuZ3RoIC0gMSwgbGluZXMuam9pbigi
XG4iKSwgY2FuY2VsRWRpdGluZ0NhbGxiYWNrKTsKICAgICB9LAogCiAgICAgZmluZFNlYXJjaE1h
dGNoZXM6IGZ1bmN0aW9uKHF1ZXJ5KQpAQCAtNDMxLDIxICs0MjgsMjIgQEAgV2ViSW5zcGVjdG9y
LlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKIAogICAgIF9hZGRFeGlzdGluZ0JyZWFrcG9pbnRz
VG9Tb3VyY2U6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
dGhpcy5icmVha3BvaW50cy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRoaXMuX2FkZEJyZWFr
cG9pbnRUb1NvdXJjZSh0aGlzLmJyZWFrcG9pbnRzW2ldKTsKKyAgICAgICAgdmFyIGJyZWFrcG9p
bnRzID0gdGhpcy5fZGVsZWdhdGUuZmluZEFsbEJyZWFrcG9pbnRzKCk7CisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgYnJlYWtwb2ludHMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICB0aGlz
Ll9hZGRCcmVha3BvaW50VG9Tb3VyY2UoYnJlYWtwb2ludHNbaV0pOwogICAgIH0sCiAKICAgICBf
YWRkQnJlYWtwb2ludFRvU291cmNlOiBmdW5jdGlvbihicmVha3BvaW50KQogICAgIHsKICAgICAg
ICAgYnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKCJlbmFibGUtY2hhbmdlZCIsIHRoaXMuX2Jy
ZWFrcG9pbnRDaGFuZ2VkLCB0aGlzKTsKICAgICAgICAgYnJlYWtwb2ludC5hZGRFdmVudExpc3Rl
bmVyKCJjb25kaXRpb24tY2hhbmdlZCIsIHRoaXMuX2JyZWFrcG9pbnRDaGFuZ2VkLCB0aGlzKTsK
KyAgICAgICAgYnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKCJyZW1vdmVkIiwgdGhpcy5fcmVt
b3ZlQnJlYWtwb2ludEZyb21Tb3VyY2UsIHRoaXMpOwogCiAgICAgICAgIHZhciBsaW5lTnVtYmVy
ID0gYnJlYWtwb2ludC5saW5lIC0gMTsKICAgICAgICAgaWYgKGxpbmVOdW1iZXIgPj0gdGhpcy5f
dGV4dE1vZGVsLmxpbmVzQ291bnQpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdGhp
cy5fdGV4dE1vZGVsLnNldEF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiYnJlYWtwb2ludCIsIGJyZWFr
cG9pbnQpOwotICAgICAgICBicmVha3BvaW50LnNvdXJjZVRleHQgPSB0aGlzLl90ZXh0TW9kZWwu
bGluZShicmVha3BvaW50LmxpbmUgLSAxKTsKKyAgICAgICAgYnJlYWtwb2ludC5zb3VyY2VUZXh0
ID0gdGhpcy5fdGV4dE1vZGVsLmxpbmUobGluZU51bWJlcik7CiAKICAgICAgICAgdGhpcy5fdGV4
dFZpZXdlci5iZWdpblVwZGF0ZXMoKTsKICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5hZGREZWNv
cmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJlYWtwb2ludCIpOwpAQCAtNDU2LDE0ICs0NTQs
MTYgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhp
cy5fdGV4dFZpZXdlci5lbmRVcGRhdGVzKCk7CiAgICAgfSwKIAotICAgIF9yZW1vdmVCcmVha3Bv
aW50RnJvbVNvdXJjZTogZnVuY3Rpb24oYnJlYWtwb2ludCkKKyAgICBfcmVtb3ZlQnJlYWtwb2lu
dEZyb21Tb3VyY2U6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKKyAgICAgICAgdmFyIGJyZWFrcG9p
bnQgPSBldmVudC50YXJnZXQ7CisKICAgICAgICAgYnJlYWtwb2ludC5yZW1vdmVFdmVudExpc3Rl
bmVyKCJlbmFibGUtY2hhbmdlZCIsIG51bGwsIHRoaXMpOwogICAgICAgICBicmVha3BvaW50LnJl
bW92ZUV2ZW50TGlzdGVuZXIoImNvbmRpdGlvbi1jaGFuZ2VkIiwgbnVsbCwgdGhpcyk7CisgICAg
ICAgIGJyZWFrcG9pbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVtb3ZlZCIsIG51bGwsIHRoaXMp
OwogCiAgICAgICAgIHZhciBsaW5lTnVtYmVyID0gYnJlYWtwb2ludC5saW5lIC0gMTsKICAgICAg
ICAgdGhpcy5fdGV4dFZpZXdlci5iZWdpblVwZGF0ZXMoKTsKLSAgICAgICAgdGhpcy5fdGV4dE1v
ZGVsLnJlbW92ZUF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiYnJlYWtwb2ludCIpOwogICAgICAgICB0
aGlzLl90ZXh0Vmlld2VyLnJlbW92ZURlY29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1icmVh
a3BvaW50Iik7CiAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIucmVtb3ZlRGVjb3JhdGlvbihsaW5l
TnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQtZGlzYWJsZWQiKTsKICAgICAgICAgdGhpcy5fdGV4
dFZpZXdlci5yZW1vdmVEZWNvcmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJlYWtwb2ludC1j
b25kaXRpb25hbCIpOwpAQCAtNDcyLDI4ICs0NzIsMjcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lLnByb3RvdHlwZSA9IHsKIAogICAgIF9jb250ZXh0TWVudTogZnVuY3Rpb24oZXZlbnQpCiAg
ICAgewotICAgICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0LmVuY2xvc2luZ05vZGVPclNl
bGZXaXRoQ2xhc3MoIndlYmtpdC1saW5lLW51bWJlciIpOwotICAgICAgICBpZiAoIXRhcmdldCkK
KyAgICAgICAgaWYgKCFXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMpCiAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIHZhciByb3cgPSB0YXJnZXQucGFyZW50RWxlbWVudDsKIAotICAgICAg
ICBpZiAoIVdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cykKKyAgICAgICAgdmFyIHRhcmdldCA9
IGV2ZW50LnRhcmdldC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKCJ3ZWJraXQtbGluZS1u
dW1iZXIiKTsKKyAgICAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIHZhciBsaW5lTnVtYmVyID0gdGFyZ2V0LnBhcmVudEVsZW1lbnQubGluZU51bWJlciArIDE7
CiAKLSAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSByb3cubGluZU51bWJlcjsKICAgICAgICAgdmFy
IGNvbnRleHRNZW51ID0gbmV3IFdlYkluc3BlY3Rvci5Db250ZXh0TWVudSgpOwogCi0gICAgICAg
IGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDb250aW51ZSB0
byBIZXJlIiksIHRoaXMuX2NvbnRpbnVlVG9IZXJlRGVsZWdhdGUuYmluZCh0aGlzLCBsaW5lTnVt
YmVyICsgMSkpOworICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5V
SVN0cmluZygiQ29udGludWUgdG8gSGVyZSIpLCB0aGlzLl9kZWxlZ2F0ZS5jb250aW51ZVRvTGlu
ZS5iaW5kKHRoaXMuX2RlbGVnYXRlLCBsaW5lTnVtYmVyKSk7CiAKLSAgICAgICAgdmFyIGJyZWFr
cG9pbnQgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKGxpbmVOdW1iZXIsICJicmVha3Bv
aW50Iik7CisgICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fZGVsZWdhdGUuZmluZEJyZWFr
cG9pbnQobGluZU51bWJlcik7CiAgICAgICAgIGlmICghYnJlYWtwb2ludCkgewogICAgICAgICAg
ICAgLy8gVGhpcyByb3cgZG9lc24ndCBoYXZlIGEgYnJlYWtwb2ludDogV2Ugd2FudCB0byBzaG93
IEFkZCBCcmVha3BvaW50IGFuZCBBZGQgYW5kIEVkaXQgQnJlYWtwb2ludC4KLSAgICAgICAgICAg
IGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJBZGQgQnJlYWtw
b2ludCIpLCB0aGlzLl9hZGRCcmVha3BvaW50RGVsZWdhdGUuYmluZCh0aGlzLCBsaW5lTnVtYmVy
ICsgMSkpOworICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIkFkZCBCcmVha3BvaW50IiksIHRoaXMuX2RlbGVnYXRlLmFkZEJyZWFrcG9pbnQu
YmluZCh0aGlzLl9kZWxlZ2F0ZSwgbGluZU51bWJlcikpOwogCiAgICAgICAgICAgICBmdW5jdGlv
biBhZGRDb25kaXRpb25hbEJyZWFrcG9pbnQoKQogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHRoaXMuX2FkZEJyZWFrcG9pbnREZWxlZ2F0ZShsaW5lTnVtYmVyICsgMSk7Ci0gICAgICAg
ICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKGxp
bmVOdW1iZXIsICJicmVha3BvaW50Iik7CisgICAgICAgICAgICAgICAgdGhpcy5fZGVsZWdhdGUu
YWRkQnJlYWtwb2ludChsaW5lTnVtYmVyKTsKKyAgICAgICAgICAgICAgICB2YXIgYnJlYWtwb2lu
dCA9IHRoaXMuX2RlbGVnYXRlLmZpbmRCcmVha3BvaW50KGxpbmVOdW1iZXIpOwogICAgICAgICAg
ICAgICAgIGlmIChicmVha3BvaW50KQogICAgICAgICAgICAgICAgICAgICB0aGlzLl9lZGl0QnJl
YWtwb2ludENvbmRpdGlvbihicmVha3BvaW50KTsKICAgICAgICAgICAgIH0KQEAgLTUyNSwxOCAr
NTI0LDE2IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAg
IHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcygi
d2Via2l0LWxpbmUtbnVtYmVyIik7CiAgICAgICAgIGlmICghdGFyZ2V0KQogICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB2YXIgcm93ID0gdGFyZ2V0LnBhcmVudEVsZW1lbnQ7Ci0KLSAgICAg
ICAgdmFyIGxpbmVOdW1iZXIgPSByb3cubGluZU51bWJlcjsKKyAgICAgICAgdmFyIGxpbmVOdW1i
ZXIgPSB0YXJnZXQucGFyZW50RWxlbWVudC5saW5lTnVtYmVyICsgMTsKIAotICAgICAgICB2YXIg
YnJlYWtwb2ludCA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUobGluZU51bWJlciwgImJy
ZWFrcG9pbnQiKTsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9kZWxlZ2F0ZS5maW5k
QnJlYWtwb2ludChsaW5lTnVtYmVyKTsKICAgICAgICAgaWYgKGJyZWFrcG9pbnQpIHsKICAgICAg
ICAgICAgIGlmIChldmVudC5zaGlmdEtleSkKICAgICAgICAgICAgICAgICBicmVha3BvaW50LmVu
YWJsZWQgPSAhYnJlYWtwb2ludC5lbmFibGVkOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgIGJyZWFrcG9pbnQucmVtb3ZlKCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
dGhpcy5fYWRkQnJlYWtwb2ludERlbGVnYXRlKGxpbmVOdW1iZXIgKyAxKTsKKyAgICAgICAgICAg
IHRoaXMuX2RlbGVnYXRlLmFkZEJyZWFrcG9pbnQobGluZU51bWJlcik7CiAgICAgICAgIGV2ZW50
LnByZXZlbnREZWZhdWx0KCk7CiAgICAgfSwKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1NvdXJjZVZpZXcuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
U291cmNlVmlldy5qcwppbmRleCA5NjE2MzIxLi4yMWZhZmNlIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlVmlldy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvU291cmNlVmlldy5qcwpAQCAtMzIsOCArMzIsMTQgQEAgV2ViSW5zcGVjdG9y
LlNvdXJjZVZpZXcgPSBmdW5jdGlvbihyZXNvdXJjZSkKIAogICAgIHRoaXMuZWxlbWVudC5hZGRT
dHlsZUNsYXNzKCJzb3VyY2UiKTsKIAotICAgIHZhciBjYW5FZGl0U2NyaXB0cyA9IFdlYkluc3Bl
Y3Rvci5wYW5lbHMuc2NyaXB0cyAmJiBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMuY2FuRWRp
dFNjcmlwdHMoKSAmJiByZXNvdXJjZS50eXBlID09PSBXZWJJbnNwZWN0b3IuUmVzb3VyY2UuVHlw
ZS5TY3JpcHQ7Ci0gICAgdGhpcy5zb3VyY2VGcmFtZSA9IG5ldyBXZWJJbnNwZWN0b3IuU291cmNl
RnJhbWUodGhpcy5lbGVtZW50LCB0aGlzLl9hZGRCcmVha3BvaW50LmJpbmQodGhpcyksIGNhbkVk
aXRTY3JpcHRzID8gdGhpcy5fZWRpdExpbmUuYmluZCh0aGlzKSA6IG51bGwsIHRoaXMuX2NvbnRp
bnVlVG9MaW5lLmJpbmQodGhpcykpOworICAgIHZhciBkZWxlZ2F0ZSA9IHt9OworICAgIGRlbGVn
YXRlLmFkZEJyZWFrcG9pbnQgPSB0aGlzLl9hZGRCcmVha3BvaW50LmJpbmQodGhpcyk7CisgICAg
ZGVsZWdhdGUuY29udGludWVUb0xpbmUgPSB0aGlzLl9jb250aW51ZVRvTGluZS5iaW5kKHRoaXMp
OworICAgIGRlbGVnYXRlLmZpbmRBbGxCcmVha3BvaW50cyA9IHRoaXMuX2ZpbmRBbGxCcmVha3Bv
aW50cy5iaW5kKHRoaXMpOworICAgIGRlbGVnYXRlLmZpbmRCcmVha3BvaW50ID0gdGhpcy5fZmlu
ZEJyZWFrcG9pbnQuYmluZCh0aGlzKTsKKyAgICBpZiAoV2ViSW5zcGVjdG9yLnBhbmVscy5zY3Jp
cHRzICYmIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5jYW5FZGl0U2NyaXB0cygpICYmIHJl
c291cmNlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5SZXNvdXJjZS5UeXBlLlNjcmlwdCkKKyAgICAg
ICAgZGVsZWdhdGUuZWRpdExpbmUgPSB0aGlzLl9lZGl0TGluZS5iaW5kKHRoaXMpOworICAgIHRo
aXMuc291cmNlRnJhbWUgPSBuZXcgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lKHRoaXMuZWxlbWVu
dCwgZGVsZWdhdGUpOwogICAgIHJlc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoImZpbmlzaGVkIiwg
dGhpcy5fcmVzb3VyY2VMb2FkaW5nRmluaXNoZWQsIHRoaXMpOwogICAgIHRoaXMuX2ZyYW1lTmVl
ZHNTZXR1cCA9IHRydWU7CiB9CkBAIC0xMDAsOSArMTA2LDYgQEAgV2ViSW5zcGVjdG9yLlNvdXJj
ZVZpZXcucHJvdG90eXBlID0gewogICAgICAgICB2YXIgbWltZVR5cGUgPSB0aGlzLl9jYW5vbmlj
YWxNaW1lVHlwZSh0aGlzLnJlc291cmNlKTsKICAgICAgICAgdGhpcy5zb3VyY2VGcmFtZS5zZXRD
b250ZW50KG1pbWVUeXBlLCBjb250ZW50LCB0aGlzLnJlc291cmNlLnVybCk7CiAgICAgICAgIHRo
aXMuX3NvdXJjZUZyYW1lU2V0dXBGaW5pc2hlZCgpOwotICAgICAgICB2YXIgYnJlYWtwb2ludHMg
PSBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuYnJlYWtwb2ludHNGb3JVUkwodGhpcy5y
ZXNvdXJjZS51cmwpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJyZWFrcG9pbnRzLmxl
bmd0aDsgKytpKQotICAgICAgICAgICAgdGhpcy5zb3VyY2VGcmFtZS5hZGRCcmVha3BvaW50KGJy
ZWFrcG9pbnRzW2ldKTsKICAgICB9LAogCiAgICAgX2Nhbm9uaWNhbE1pbWVUeXBlOiBmdW5jdGlv
bihyZXNvdXJjZSkKQEAgLTEzMSwyOCArMTM0LDMzIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VWaWV3
LnByb3RvdHlwZSA9IHsKICAgICBfYWRkQnJlYWtwb2ludDogZnVuY3Rpb24obGluZSkKICAgICB7
CiAgICAgICAgIHZhciBzb3VyY2VJRCA9IHRoaXMuX3NvdXJjZUlERm9yTGluZShsaW5lKTsKLSAg
ICAgICAgV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLnNldEJyZWFrcG9pbnQoc291cmNl
SUQsIHRoaXMucmVzb3VyY2UudXJsLCBsaW5lLCB0cnVlLCAiIik7CisgICAgICAgIFdlYkluc3Bl
Y3Rvci5icmVha3BvaW50TWFuYWdlci5zZXRCcmVha3BvaW50KHNvdXJjZUlELCB0aGlzLl91cmwo
KSwgbGluZSwgdHJ1ZSwgIiIpOwogICAgICAgICBpZiAoIVdlYkluc3BlY3Rvci5wYW5lbHMuc2Ny
aXB0cy5icmVha3BvaW50c0FjdGl2YXRlZCkKICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5l
bHMuc2NyaXB0cy50b2dnbGVCcmVha3BvaW50c0NsaWNrZWQoKTsKICAgICB9LAogCi0gICAgX2Vk
aXRMaW5lOiBmdW5jdGlvbihsaW5lLCBuZXdDb250ZW50LCBjYW5jZWxFZGl0aW5nQ2FsbGJhY2sp
CisgICAgX2ZpbmRBbGxCcmVha3BvaW50czogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdmFy
IGxpbmVzID0gW107Ci0gICAgICAgIHZhciB0ZXh0TW9kZWwgPSB0aGlzLnNvdXJjZUZyYW1lLnRl
eHRNb2RlbDsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0TW9kZWwubGluZXNDb3Vu
dDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoaSA9PT0gbGluZSkKLSAgICAgICAgICAgICAgICBs
aW5lcy5wdXNoKG5ld0NvbnRlbnQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGxpbmVzLnB1c2godGV4dE1vZGVsLmxpbmUoaSkpOwotICAgICAgICB9CisgICAgICAgIHZhciBz
b3VyY2VJRHMgPSB7fTsKKyAgICAgICAgdmFyIHNjcmlwdHMgPSB0aGlzLnJlc291cmNlLnNjcmlw
dHM7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NyaXB0cy5sZW5ndGg7ICsraSkKKyAg
ICAgICAgICAgIHNvdXJjZUlEc1tzY3JpcHRzW2ldLnNvdXJjZUlEXSA9IHRydWU7CisgICAgICAg
IHJldHVybiBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuYnJlYWtwb2ludHNGb3JTb3Vy
Y2VJRHMoc291cmNlSURzKTsKKyAgICB9LAogCi0gICAgICAgIHZhciBlZGl0RGF0YSA9IHt9Owot
ICAgICAgICBlZGl0RGF0YS5zb3VyY2VJRCA9IHRoaXMuX3NvdXJjZUlERm9yTGluZShsaW5lKTsK
LSAgICAgICAgZWRpdERhdGEuY29udGVudCA9IGxpbmVzLmpvaW4oIlxuIik7Ci0gICAgICAgIGVk
aXREYXRhLmxpbmUgPSBsaW5lOwotICAgICAgICBlZGl0RGF0YS5saW5lc0NvdW50VG9TaGlmdCA9
IG5ld0NvbnRlbnQuc3BsaXQoIlxuIikubGVuZ3RoIC0gMTsKKyAgICBfZmluZEJyZWFrcG9pbnQ6
IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgeworICAgICAgICB2YXIgc291cmNlSUQgPSB0aGlz
Ll9zb3VyY2VJREZvckxpbmUobGluZU51bWJlcik7CisgICAgICAgIHJldHVybiBXZWJJbnNwZWN0
b3IuYnJlYWtwb2ludE1hbmFnZXIuZmluZEJyZWFrcG9pbnQoc291cmNlSUQsIGxpbmVOdW1iZXIp
OworICAgIH0sCiAKKyAgICBfZWRpdExpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGxpbmVzQ291
bnRUb1NoaWZ0LCBuZXdDb250ZW50LCBjYW5jZWxFZGl0aW5nQ2FsbGJhY2spCisgICAgeworICAg
ICAgICB2YXIgZWRpdERhdGEgPSB7fTsKKyAgICAgICAgZWRpdERhdGEuc291cmNlSUQgPSB0aGlz
Ll9zb3VyY2VJREZvckxpbmUobGluZU51bWJlcik7CisgICAgICAgIGVkaXREYXRhLmNvbnRlbnQg
PSBuZXdDb250ZW50OworICAgICAgICBlZGl0RGF0YS5saW5lID0gbGluZU51bWJlcjsKKyAgICAg
ICAgZWRpdERhdGEubGluZXNDb3VudFRvU2hpZnQgPSBsaW5lc0NvdW50VG9TaGlmdDsKICAgICAg
ICAgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLmVkaXRTY3JpcHRTb3VyY2UoZWRpdERhdGEs
IHRoaXMuX2VkaXRMaW5lQ29tcGxldGUuYmluZCh0aGlzLCBlZGl0RGF0YSksIGNhbmNlbEVkaXRp
bmdDYWxsYmFjayk7CiAgICAgfSwKIApAQCAtMTg2LDYgKzE5NCwxMSBAQCBXZWJJbnNwZWN0b3Iu
U291cmNlVmlldy5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiBzb3VyY2VJRDsKICAgICB9
LAogCisgICAgX3VybDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMucmVz
b3VyY2UudXJsOworICAgIH0sCisKICAgICAvLyBUaGUgcmVzdCBvZiB0aGUgbWV0aG9kcyBpbiB0
aGlzIHByb3RvdHlwZSBuZWVkIHRvIGJlIGdlbmVyaWMgZW5vdWdoIHRvIHdvcmsgd2l0aCBhIFNj
cmlwdFZpZXcuCiAgICAgLy8gVGhlIFNjcmlwdFZpZXcgcHJvdG90eXBlIHB1bGxzIHRoZXNlIG1l
dGhvZHMgaW50byBpdCdzIHByb3RvdHlwZSB0byBhdm9pZCBkdXBsaWNhdGUgY29kZS4KIAo=
</data>
<flag name="review"
          id="66303"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75673</attachid>
            <date>2010-12-06 04:29:15 -0800</date>
            <delta_ts>2010-12-07 08:00:26 -0800</delta_ts>
            <desc>Comments addressed.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>28459</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ODllMTM0NTMuLjdlODI1ZWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjEgQEAKKzIwMTAtMTItMDYgIFBhdmVsIFBvZGl2
aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogU291cmNlRnJhbWUgcmVmYWN0
b3JpbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
MDIyMworCisgICAgICAgIFNvdXJjZUZyYW1lIHNob3VsZCBhc2sgQnJlYWtwb2ludE1hbmFnZXIg
YWJvdXQgZXhpc3RpbmcgYnJlYWtwb2ludHMgaW5zdGVhZCBvZiBtYWludGFpbmluZworICAgICAg
ICBpdCdzIG93biBzdG9yYWdlcy4gTW92ZSBjb21tb24gY29kZSBmcm9tIFNjcmlwdFZpZXcgYW5k
IFNvdXJjZVZpZXcgdG8gU291cmNlRnJhbWVEZWxlZ2F0ZS4KKworICAgICAgICAqIGluc3BlY3Rv
ci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLmZpbmRCcmVha3BvaW50cyk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLmZpbmRCcmVha3BvaW50KToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdC5qczoKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5TY3JpcHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5cGUu
Z2V0IGxpbmVzQ291bnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5cGUu
Z2V0IHNvdXJjZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0LnByb3RvdHlwZS5zZXQg
c291cmNlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdFZpZXcuanM6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0Vmlldyk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U2NyaXB0Vmlldy5wcm90b3R5cGUuX3NjcmlwdFNvdXJjZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlNjcmlwdEZyYW1lRGVsZWdhdGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNj
cmlwdEZyYW1lRGVsZWdhdGUucHJvdG90eXBlLl9jYW5FZGl0U2NyaXB0cyk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU2NyaXB0RnJhbWVEZWxlZ2F0ZS5wcm90b3R5cGUuX2VkaXRMaW5lQ29tcGxl
dGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdEZyYW1lRGVsZWdhdGUucHJvdG90eXBl
Ll9zY3JpcHRzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRGcmFtZURlbGVnYXRlLnBy
b3RvdHlwZS5fdXJsKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5l
bC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwpOgorICAgICAgICAqIGlu
c3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U291cmNlRnJhbWUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlw
ZS5fY3JlYXRlVmlld2VySWZOZWVkZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lLnByb3RvdHlwZS5fZWRpdExpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lLnByb3RvdHlwZS5fYnJlYWtwb2ludEFkZGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
b3VyY2VGcmFtZS5wcm90b3R5cGUuX2FkZEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fYnJlYWtwb2ludFJlbW92ZWQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fY29udGV4dE1lbnUuYWRkQ29uZGl0
aW9uYWxCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90
b3R5cGUuX2NvbnRleHRNZW51KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5w
cm90b3R5cGUuX21vdXNlRG93bik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVE
ZWxlZ2F0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVEZWxlZ2F0ZS5wcm90
b3R5cGUuYWRkQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVE
ZWxlZ2F0ZS5wcm90b3R5cGUuYnJlYWtwb2ludHMuZmlsdGVyKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Tb3VyY2VGcmFtZURlbGVnYXRlLnByb3RvdHlwZS5icmVha3BvaW50cyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVEZWxlZ2F0ZS5wcm90b3R5cGUuY2FuRWRpdFNjcmlw
dHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lRGVsZWdhdGUucHJvdG90eXBl
LmNvbnRpbnVlVG9MaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZURlbGVn
YXRlLnByb3RvdHlwZS5lZGl0TGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJh
bWVEZWxlZ2F0ZS5wcm90b3R5cGUuX3JldmVydEVkaXRMaW5lKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Tb3VyY2VGcmFtZURlbGVnYXRlLnByb3RvdHlwZS5maW5kQnJlYWtwb2ludCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVEZWxlZ2F0ZS5wcm90b3R5cGUuc2hvdWxkRGlz
cGxheUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lRGVsZWdh
dGUucHJvdG90eXBlLl9zb3VyY2VJREZvckxpbmUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9u
dC1lbmQvU291cmNlVmlldy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VWaWV3KToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VWaWV3LnByb3RvdHlwZS5fY29udGVudExvYWRl
ZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VGcmFtZURlbGVnYXRlKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZUZyYW1lRGVsZWdhdGUucHJvdG90eXBlLl9jYW5FZGl0
U2NyaXB0cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VGcmFtZURlbGVnYXRlLnBy
b3RvdHlwZS5fZWRpdExpbmVDb21wbGV0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3Vy
Y2VGcmFtZURlbGVnYXRlLnByb3RvdHlwZS5fc2NyaXB0cyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuUmVzb3VyY2VGcmFtZURlbGVnYXRlLnByb3RvdHlwZS5fdXJsKToKKwogMjAxMC0xMS0zMCAg
THVpeiBBZ29zdGluaSAgPGx1aXouYWdvc3RpbmlAb3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9CcmVha3BvaW50TWFuYWdlci5qcwppbmRleCAzZDUxMDkyLi5mNzEyMzY3IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMKKysrIGIv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzCkBAIC02Mywy
NCArNjMsMjEgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludChzb3VyY2VJRCwgdXJsLCBsaW5lLCBlbmFibGVk
LCBjb25kaXRpb24pOwogICAgIH0sCiAKLSAgICBicmVha3BvaW50c0ZvclNvdXJjZUlEOiBmdW5j
dGlvbihzb3VyY2VJRCkKKyAgICBmaW5kQnJlYWtwb2ludHM6IGZ1bmN0aW9uKGZpbHRlcikKICAg
ICB7CiAgICAgICAgIHZhciBicmVha3BvaW50cyA9IFtdOwogICAgICAgICBmb3IgKHZhciBpZCBp
biB0aGlzLl9icmVha3BvaW50cykgewotICAgICAgICAgICAgaWYgKHRoaXMuX2JyZWFrcG9pbnRz
W2lkXS5zb3VyY2VJRCA9PT0gc291cmNlSUQpCi0gICAgICAgICAgICAgICAgYnJlYWtwb2ludHMu
cHVzaCh0aGlzLl9icmVha3BvaW50c1tpZF0pOworICAgICAgICAgICB2YXIgYnJlYWtwb2ludCA9
IHRoaXMuX2JyZWFrcG9pbnRzW2lkXTsKKyAgICAgICAgICAgaWYgKGZpbHRlcihicmVha3BvaW50
KSkKKyAgICAgICAgICAgICAgIGJyZWFrcG9pbnRzLnB1c2goYnJlYWtwb2ludCk7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIGJyZWFrcG9pbnRzOwogICAgIH0sCiAKLSAgICBicmVha3BvaW50
c0ZvclVSTDogZnVuY3Rpb24odXJsKQorICAgIGZpbmRCcmVha3BvaW50OiBmdW5jdGlvbihzb3Vy
Y2VJRCwgbGluZU51bWJlcikKICAgICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50cyA9IFtdOwot
ICAgICAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl9icmVha3BvaW50cykgewotICAgICAgICAgICAg
aWYgKHRoaXMuX2JyZWFrcG9pbnRzW2lkXS51cmwgPT09IHVybCkKLSAgICAgICAgICAgICAgICBi
cmVha3BvaW50cy5wdXNoKHRoaXMuX2JyZWFrcG9pbnRzW2lkXSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIGJyZWFrcG9pbnRzOworICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gV2ViSW5z
cGVjdG9yLkJyZWFrcG9pbnQuanNCcmVha3BvaW50SWQoc291cmNlSUQsIGxpbmVOdW1iZXIpOwor
ICAgICAgICByZXR1cm4gdGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2ludElkXTsKICAgICB9LAog
CiAgICAgcmVzZXQ6IGZ1bmN0aW9uKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9TY3JpcHQuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Lmpz
CmluZGV4IGJlM2YwMjAuLjRkMzU1ZjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9TY3JpcHQuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Njcmlw
dC5qcwpAQCAtMjcsNyArMjcsNyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0ID0gZnVuY3Rpb24oc291
cmNlSUQsIHNvdXJjZVVSTCwgc291cmNlLCBzdGFydGluZ0xpbmUsIGVycm9yTAogewogICAgIHRo
aXMuc291cmNlSUQgPSBzb3VyY2VJRDsKICAgICB0aGlzLnNvdXJjZVVSTCA9IHNvdXJjZVVSTDsK
LSAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTsKKyAgICB0aGlzLl9zb3VyY2UgPSBzb3VyY2U7CiAg
ICAgdGhpcy5zdGFydGluZ0xpbmUgPSBzdGFydGluZ0xpbmU7CiAgICAgdGhpcy5lcnJvckxpbmUg
PSBlcnJvckxpbmU7CiAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7CkBAIC03
MSw1ICs3MSwxOSBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAg
ICAgIHRoaXMuX2xpbmVzQ291bnQrKzsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdGhpcy5f
bGluZXNDb3VudDsKKyAgICB9LAorCisgICAgZ2V0IHNvdXJjZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gdGhpcy5fc291cmNlOworICAgIH0sCisKKyAgICBzZXQgc291cmNlKHNvdXJjZSkKKyAg
ICB7CisgICAgICAgIHRoaXMuX3NvdXJjZSA9IHNvdXJjZTsKKyAgICAgICAgdGhpcy5kaXNwYXRj
aEV2ZW50VG9MaXN0ZW5lcnMoInNvdXJjZS1jaGFuZ2VkIik7CiAgICAgfQogfQorCitXZWJJbnNw
ZWN0b3IuU2NyaXB0LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuT2JqZWN0LnBy
b3RvdHlwZTsKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Njcmlw
dFZpZXcuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Vmlldy5qcwppbmRl
eCBkODc4ZTliLi5mNTZhODZlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU2NyaXB0Vmlldy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0
Vmlldy5qcwpAQCAtMzMsOCArMzMsMTAgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdFZpZXcgPSBmdW5j
dGlvbihzY3JpcHQpCiAKICAgICB0aGlzLl9mcmFtZU5lZWRzU2V0dXAgPSB0cnVlOwogICAgIHRo
aXMuX3NvdXJjZUZyYW1lU2V0dXAgPSBmYWxzZTsKLSAgICB2YXIgY2FuRWRpdFNjcmlwdHMgPSBX
ZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMuY2FuRWRpdFNjcmlwdHMoKTsKLSAgICB0aGlzLnNv
dXJjZUZyYW1lID0gbmV3IFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZSh0aGlzLmVsZW1lbnQsIHRo
aXMuX2FkZEJyZWFrcG9pbnQuYmluZCh0aGlzKSwgY2FuRWRpdFNjcmlwdHMgPyB0aGlzLl9lZGl0
TGluZS5iaW5kKHRoaXMpIDogbnVsbCwgdGhpcy5fY29udGludWVUb0xpbmUuYmluZCh0aGlzKSk7
CisgICAgdmFyIGRlbGVnYXRlID0gbmV3IFdlYkluc3BlY3Rvci5TY3JpcHRGcmFtZURlbGVnYXRl
KHRoaXMuc2NyaXB0KTsKKyAgICB0aGlzLnNvdXJjZUZyYW1lID0gbmV3IFdlYkluc3BlY3Rvci5T
b3VyY2VGcmFtZSh0aGlzLmVsZW1lbnQsIGRlbGVnYXRlKTsKKworICAgIHRoaXMuc2NyaXB0LmFk
ZEV2ZW50TGlzdGVuZXIoInNvdXJjZS1jaGFuZ2VkIiwgdGhpcy5fc2NyaXB0U291cmNlQ2hhbmdl
ZCwgdGhpcyk7CiB9CiAKIFdlYkluc3BlY3Rvci5TY3JpcHRWaWV3LnByb3RvdHlwZSA9IHsKQEAg
LTg1LDI5ICs4Nyw5IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRWaWV3LnByb3RvdHlwZSA9IHsKICAg
ICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzY3JpcHQtcmVzb3VyY2Utdmlld3Mi
KS5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpOwogICAgIH0sCiAKLSAgICBfY29udGludWVUb0xp
bmU6IGZ1bmN0aW9uKGxpbmUpCi0gICAgewotICAgICAgICB2YXIgc2NyaXB0c1BhbmVsID0gV2Vi
SW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzOwotICAgICAgICBpZiAoc2NyaXB0c1BhbmVsKQotICAg
ICAgICAgICAgc2NyaXB0c1BhbmVsLmNvbnRpbnVlVG9MaW5lKHRoaXMuc2NyaXB0LnNvdXJjZUlE
LCBsaW5lKTsKLSAgICB9LAotCi0gICAgX2FkZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGxpbmUpCi0g
ICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuc2V0QnJlYWtwb2lu
dCh0aGlzLnNjcmlwdC5zb3VyY2VJRCwgdGhpcy5zY3JpcHQuc291cmNlVVJMLCBsaW5lLCB0cnVl
LCAiIik7Ci0gICAgICAgIGlmICghV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLmJyZWFrcG9p
bnRzQWN0aXZhdGVkKQotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnRv
Z2dsZUJyZWFrcG9pbnRzQ2xpY2tlZCgpOwotICAgIH0sCi0KLSAgICBfZWRpdExpbmVDb21wbGV0
ZTogZnVuY3Rpb24obmV3Qm9keSkKKyAgICBfc2NyaXB0U291cmNlQ2hhbmdlZDogZnVuY3Rpb24o
ZXZlbnQpCiAgICAgewotICAgICAgICB0aGlzLnNjcmlwdC5zb3VyY2UgPSBuZXdCb2R5OwotICAg
ICAgICB0aGlzLnNvdXJjZUZyYW1lLnVwZGF0ZUNvbnRlbnQodGhpcy5fcHJlcGVuZFdoaXRlc3Bh
Y2UobmV3Qm9keSkpOwotICAgIH0sCi0KLSAgICBfc291cmNlSURGb3JMaW5lOiBmdW5jdGlvbihs
aW5lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuc2NyaXB0LnNvdXJjZUlEOworICAgICAg
ICB0aGlzLnNvdXJjZUZyYW1lLnVwZGF0ZUNvbnRlbnQodGhpcy5fcHJlcGVuZFdoaXRlc3BhY2Uo
dGhpcy5zY3JpcHQuc291cmNlKSk7CiAgICAgfSwKIAogICAgIC8vIFRoZSBmb2xsb3dpbmcgbWV0
aG9kcyBhcmUgcHVsbGVkIGZyb20gU291cmNlVmlldywgc2luY2UgdGhleSBhcmUKQEAgLTEyNyw5
ICsxMDksMzggQEAgV2ViSW5zcGVjdG9yLlNjcmlwdFZpZXcucHJvdG90eXBlID0gewogICAgIHNo
b3dpbmdGaXJzdFNlYXJjaFJlc3VsdDogV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcucHJvdG90eXBl
LnNob3dpbmdGaXJzdFNlYXJjaFJlc3VsdCwKICAgICBzaG93aW5nTGFzdFNlYXJjaFJlc3VsdDog
V2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcucHJvdG90eXBlLnNob3dpbmdMYXN0U2VhcmNoUmVzdWx0
LAogICAgIF9qdW1wVG9TZWFyY2hSZXN1bHQ6IFdlYkluc3BlY3Rvci5Tb3VyY2VWaWV3LnByb3Rv
dHlwZS5fanVtcFRvU2VhcmNoUmVzdWx0LAotICAgIF9lZGl0TGluZTogV2ViSW5zcGVjdG9yLlNv
dXJjZVZpZXcucHJvdG90eXBlLl9lZGl0TGluZSwKICAgICByZXNpemU6IFdlYkluc3BlY3Rvci5T
b3VyY2VWaWV3LnByb3RvdHlwZS5yZXNpemUKIH0KIAogV2ViSW5zcGVjdG9yLlNjcmlwdFZpZXcu
cHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5WaWV3LnByb3RvdHlwZTsKIAorV2Vi
SW5zcGVjdG9yLlNvdXJjZVZpZXcucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5S
ZXNvdXJjZVZpZXcucHJvdG90eXBlOworCitXZWJJbnNwZWN0b3IuU2NyaXB0RnJhbWVEZWxlZ2F0
ZSA9IGZ1bmN0aW9uKHNjcmlwdCkKK3sKKyAgICB0aGlzLl9zY3JpcHQgPSBzY3JpcHQ7Cit9CisK
K1dlYkluc3BlY3Rvci5TY3JpcHRGcmFtZURlbGVnYXRlLnByb3RvdHlwZSA9IHsKKyAgICBfY2Fu
RWRpdFNjcmlwdHM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0sCisKKyAgICBfZWRpdExpbmVDb21wbGV0ZTogZnVuY3Rpb24ocmV2ZXJ0RWRpdExpbmVDYWxs
YmFjaywgbmV3Q29udGVudCkKKyAgICB7CisgICAgICAgIHRoaXMuX3NjcmlwdC5zb3VyY2UgPSBu
ZXdDb250ZW50OworICAgIH0sCisKKyAgICBfc2NyaXB0czogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFt0aGlzLl9zY3JpcHRdOworICAgIH0sCisKKyAgICBfdXJsOiBmdW5jdGlv
bigpCisgICAgeworICAgICAgICAgcmV0dXJuIHRoaXMuX3NjcmlwdC5zb3VyY2VVUkw7CisgICAg
fQorfQorCitXZWJJbnNwZWN0b3IuU2NyaXB0RnJhbWVEZWxlZ2F0ZS5wcm90b3R5cGUuX19wcm90
b19fID0gV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lRGVsZWdhdGUucHJvdG90eXBlOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcyBiL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKaW5kZXggNjFhMmYyOC4uOTQ2
NTcwMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5l
bC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzCkBA
IC0xNzUsOCArMTc1LDYgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbCA9IGZ1bmN0aW9uKCkK
IAogICAgIHRoaXMuX2RlYnVnZ2VyRW5hYmxlZCA9IFByZWZlcmVuY2VzLmRlYnVnZ2VyQWx3YXlz
RW5hYmxlZDsKIAotICAgIFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5hZGRFdmVudExp
c3RlbmVyKCJicmVha3BvaW50LWFkZGVkIiwgdGhpcy5fYnJlYWtwb2ludEFkZGVkLCB0aGlzKTsK
LQogICAgIHRoaXMucmVzZXQoKTsKIH0KIApAQCAtMjgxLDI2ICsyNzksNiBAQCBXZWJJbnNwZWN0
b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgZGVsZXRlIHJlc291cmNlLl9z
Y3JpcHRzUGVuZGluZ1Jlc291cmNlTG9hZDsKICAgICB9LAogCi0gICAgX2JyZWFrcG9pbnRBZGRl
ZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50
LmRhdGE7Ci0KLSAgICAgICAgdmFyIHNvdXJjZUZyYW1lOwotICAgICAgICBpZiAoYnJlYWtwb2lu
dC51cmwpIHsKLSAgICAgICAgICAgIHZhciByZXNvdXJjZSA9IFdlYkluc3BlY3Rvci5yZXNvdXJj
ZUZvclVSTChicmVha3BvaW50LnVybCk7Ci0gICAgICAgICAgICBpZiAocmVzb3VyY2UgJiYgcmVz
b3VyY2UuZmluaXNoZWQpCi0gICAgICAgICAgICAgICAgc291cmNlRnJhbWUgPSB0aGlzLl9zb3Vy
Y2VGcmFtZUZvclNjcmlwdE9yUmVzb3VyY2UocmVzb3VyY2UpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKGJyZWFrcG9pbnQuc291cmNlSUQgJiYgIXNvdXJjZUZyYW1lKSB7Ci0gICAgICAgICAg
ICB2YXIgb2JqZWN0ID0gdGhpcy5fc291cmNlSURNYXBbYnJlYWtwb2ludC5zb3VyY2VJRF0KLSAg
ICAgICAgICAgIHNvdXJjZUZyYW1lID0gdGhpcy5fc291cmNlRnJhbWVGb3JTY3JpcHRPclJlc291
cmNlKG9iamVjdCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc291cmNlRnJhbWUpCi0gICAg
ICAgICAgICBzb3VyY2VGcmFtZS5hZGRCcmVha3BvaW50KGJyZWFrcG9pbnQpOwotICAgIH0sCi0K
ICAgICBjYW5FZGl0U2NyaXB0czogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgcmV0dXJuIFBy
ZWZlcmVuY2VzLmNhbkVkaXRTY3JpcHRTb3VyY2U7CkBAIC0zMTIsNyArMjkwLDcgQEAgV2ViSW5z
cGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgLy8gTmVlZCB0byBjbGVhciBicmVha3BvaW50cyBhbmQgcmUtY3JlYXRlIHRoZW0g
bGF0ZXIgd2hlbiBlZGl0aW5nIHNvdXJjZS4KLSAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gV2Vi
SW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLmJyZWFrcG9pbnRzRm9yU291cmNlSUQoc291cmNl
SUQpOworICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1h
bmFnZXIuZmluZEJyZWFrcG9pbnRzKGZ1bmN0aW9uKGIpIHsgcmV0dXJuIGIuc291cmNlSUQgPT09
IGVkaXREYXRhLnNvdXJjZUlEIH0pOwogICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJyZWFr
cG9pbnRzLmxlbmd0aDsgKytpKQogICAgICAgICAgICAgYnJlYWtwb2ludHNbaV0ucmVtb3ZlKCk7
CiAKQEAgLTEwOTIsNCArMTA3MCwzIEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90
eXBlID0gewogfQogCiBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5fX3Byb3Rv
X18gPSBXZWJJbnNwZWN0b3IuUGFuZWwucHJvdG90eXBlOwotCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvU291cmNlRnJhbWUuanMKaW5kZXggOGUwNzdjZC4uYzczNTc3MCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcwpAQCAtMjgsOSArMjgsMTAgQEAK
ICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lID0gZnVuY3Rp
b24ocGFyZW50RWxlbWVudCwgYWRkQnJlYWtwb2ludERlbGVnYXRlLCBlZGl0RGVsZWdhdGUsIGNv
bnRpbnVlVG9IZXJlRGVsZWdhdGUpCitXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUgPSBmdW5jdGlv
bihwYXJlbnRFbGVtZW50LCBkZWxlZ2F0ZSkKIHsKICAgICB0aGlzLl9wYXJlbnRFbGVtZW50ID0g
cGFyZW50RWxlbWVudDsKKyAgICB0aGlzLl9kZWxlZ2F0ZSA9IGRlbGVnYXRlOwogCiAgICAgdGhp
cy5fdGV4dE1vZGVsID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTW9kZWwoKTsKICAgICB0
aGlzLl90ZXh0TW9kZWwucmVwbGFjZVRhYnNXaXRoU3BhY2VzID0gdHJ1ZTsKQEAgLTM4LDEzICsz
OSw4IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZSA9IGZ1bmN0aW9uKHBhcmVudEVsZW1lbnQs
IGFkZEJyZWFrcG9pbnREZWxlZ2F0ZSwgZWRpdERlCiAgICAgdGhpcy5fbWVzc2FnZXMgPSBbXTsK
ICAgICB0aGlzLl9yb3dNZXNzYWdlcyA9IHt9OwogICAgIHRoaXMuX21lc3NhZ2VCdWJibGVzID0g
e307Ci0gICAgdGhpcy5icmVha3BvaW50cyA9IFtdOwogCiAgICAgdGhpcy5fbG9hZGVkID0gZmFs
c2U7Ci0KLSAgICB0aGlzLl9jb250aW51ZVRvSGVyZURlbGVnYXRlID0gY29udGludWVUb0hlcmVE
ZWxlZ2F0ZTsKLSAgICB0aGlzLl9hZGRCcmVha3BvaW50RGVsZWdhdGUgPSBhZGRCcmVha3BvaW50
RGVsZWdhdGU7Ci0gICAgdGhpcy5fZWRpdERlbGVnYXRlID0gZWRpdERlbGVnYXRlOwogICAgIHRo
aXMuX3BvcG92ZXJPYmplY3RHcm91cCA9ICJwb3BvdmVyIjsKIH0KIApAQCAtMTA1LDIzICsxMDEs
NiBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICAgICAg
dGhpcy5fbGluZU51bWJlclRvUmV2ZWFsID0gbGluZU51bWJlcjsKICAgICB9LAogCi0gICAgYWRk
QnJlYWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2ludCkKLSAgICB7Ci0gICAgICAgIHRoaXMuYnJl
YWtwb2ludHMucHVzaChicmVha3BvaW50KTsKLSAgICAgICAgYnJlYWtwb2ludC5hZGRFdmVudExp
c3RlbmVyKCJyZW1vdmVkIiwgdGhpcy5fYnJlYWtwb2ludFJlbW92ZWQsIHRoaXMpOwotICAgICAg
ICBpZiAodGhpcy5fdGV4dFZpZXdlcikKLSAgICAgICAgICAgIHRoaXMuX2FkZEJyZWFrcG9pbnRU
b1NvdXJjZShicmVha3BvaW50KTsKLSAgICB9LAotCi0gICAgX2JyZWFrcG9pbnRSZW1vdmVkOiBm
dW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQudGFy
Z2V0OwotCi0gICAgICAgIHRoaXMuYnJlYWtwb2ludHMucmVtb3ZlKGJyZWFrcG9pbnQpOwotICAg
ICAgICBpZiAodGhpcy5fdGV4dFZpZXdlcikKLSAgICAgICAgICAgIHRoaXMuX3JlbW92ZUJyZWFr
cG9pbnRGcm9tU291cmNlKGJyZWFrcG9pbnQpOwotICAgIH0sCi0KICAgICBhZGRNZXNzYWdlOiBm
dW5jdGlvbihtc2cpCiAgICAgewogICAgICAgICAvLyBEb24ndCBhZGQgdGhlIG1lc3NhZ2UgaWYg
dGhlcmUgaXMgbm8gbWVzc2FnZSBvciB2YWxpZCBsaW5lIG9yIGlmIHRoZSBtc2cgaXNuJ3QgYW4g
ZXJyb3Igb3Igd2FybmluZy4KQEAgLTIxMSwxNCArMTkwLDEwIEBAIFdlYkluc3BlY3Rvci5Tb3Vy
Y2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigi
c2Nyb2xsIiwgdGhpcy5fc2Nyb2xsLmJpbmQodGhpcyksIHRydWUpOwogICAgICAgICB0aGlzLl9w
YXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKGVsZW1lbnQpOwogCi0gICAgICAgIHRoaXMuX25lZWRz
UHJvZ3JhbUNvdW50ZXJJbWFnZSA9IHRydWU7Ci0gICAgICAgIHRoaXMuX25lZWRzQnJlYWtwb2lu
dEltYWdlcyA9IHRydWU7Ci0KICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5iZWdpblVwZGF0ZXMo
KTsKIAogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLm1pbWVUeXBlID0gdGhpcy5fbWltZVR5cGU7
CiAgICAgICAgIHRoaXMuX2FkZEV4aXN0aW5nTWVzc2FnZXNUb1NvdXJjZSgpOwotICAgICAgICB0
aGlzLl9hZGRFeGlzdGluZ0JyZWFrcG9pbnRzVG9Tb3VyY2UoKTsKICAgICAgICAgdGhpcy5fdXBk
YXRlRXhlY3V0aW9uTGluZSgpOwogICAgICAgICB0aGlzLl91cGRhdGVEaWZmRGVjb3JhdGlvbnMo
KTsKICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZXNpemUoKTsKQEAgLTIzOCw5ICsyMTMsMjgg
QEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRo
aXMuaGlnaGxpZ2h0TGluZSh0aGlzLl9saW5lVG9IaWdobGlnaHQpOwogICAgICAgICAgICAgZGVs
ZXRlIHRoaXMuX2xpbmVUb0hpZ2hsaWdodDsKICAgICAgICAgfQorCisgICAgICAgIHZhciBicmVh
a3BvaW50cyA9IHRoaXMuX2RlbGVnYXRlLmJyZWFrcG9pbnRzKCk7CisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgYnJlYWtwb2ludHMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICB0aGlzLl9h
ZGRCcmVha3BvaW50KGJyZWFrcG9pbnRzW2ldKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmJyZWFr
cG9pbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoImJyZWFrcG9pbnQtYWRkZWQiLCB0aGlzLl9i
cmVha3BvaW50QWRkZWQsIHRoaXMpOworCiAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuZW5kVXBk
YXRlcygpOwotICAgICAgICBpZiAodGhpcy5fZWRpdERlbGVnYXRlKQotICAgICAgICAgICAgdGhp
cy5fdGV4dFZpZXdlci5lZGl0Q2FsbGJhY2sgPSB0aGlzLl9lZGl0RGVsZWdhdGU7CisKKyAgICAg
ICAgaWYgKHRoaXMuX2RlbGVnYXRlLmNhbkVkaXRTY3JpcHRzKCkpCisgICAgICAgICAgICB0aGlz
Ll90ZXh0Vmlld2VyLmVkaXRDYWxsYmFjayA9IHRoaXMuX2VkaXRMaW5lLmJpbmQodGhpcyk7Cisg
ICAgfSwKKworICAgIF9lZGl0TGluZTogZnVuY3Rpb24obGluZU51bWJlciwgbmV3Q29udGVudCwg
Y2FuY2VsRWRpdGluZ0NhbGxiYWNrKQorICAgIHsKKyAgICAgICAgdmFyIGxpbmVzID0gW107Cisg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQ7ICsr
aSkgeworICAgICAgICAgICAgaWYgKGkgPT09IGxpbmVOdW1iZXIpCisgICAgICAgICAgICAgICAg
bGluZXMucHVzaChuZXdDb250ZW50KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBsaW5lcy5wdXNoKHRoaXMuX3RleHRNb2RlbC5saW5lKGkpKTsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLl9kZWxlZ2F0ZS5lZGl0TGluZShsaW5lTnVtYmVyICsgMSwgbmV3Q29udGVudC5zcGxp
dCgiXG4iKS5sZW5ndGggLSAxLCBsaW5lcy5qb2luKCJcbiIpLCBjYW5jZWxFZGl0aW5nQ2FsbGJh
Y2spOwogICAgIH0sCiAKICAgICBmaW5kU2VhcmNoTWF0Y2hlczogZnVuY3Rpb24ocXVlcnkpCkBA
IC00MjksMjMgKzQyMywyNSBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0g
ewogICAgICAgICBtc2cuX3Jlc291cmNlTWVzc2FnZUxpbmVFbGVtZW50ID0gbWVzc2FnZUxpbmVF
bGVtZW50OwogICAgIH0sCiAKLSAgICBfYWRkRXhpc3RpbmdCcmVha3BvaW50c1RvU291cmNlOiBm
dW5jdGlvbigpCisgICAgX2JyZWFrcG9pbnRBZGRlZDogZnVuY3Rpb24oZXZlbnQpCiAgICAgewot
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYnJlYWtwb2ludHMubGVuZ3RoOyArK2kp
Ci0gICAgICAgICAgICB0aGlzLl9hZGRCcmVha3BvaW50VG9Tb3VyY2UodGhpcy5icmVha3BvaW50
c1tpXSk7CisgICAgICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQuZGF0YTsKKworICAgICAgICBp
ZiAodGhpcy5fZGVsZWdhdGUuc2hvdWxkRGlzcGxheUJyZWFrcG9pbnQoYnJlYWtwb2ludCkpCisg
ICAgICAgICAgICB0aGlzLl9hZGRCcmVha3BvaW50KGJyZWFrcG9pbnQpOwogICAgIH0sCiAKLSAg
ICBfYWRkQnJlYWtwb2ludFRvU291cmNlOiBmdW5jdGlvbihicmVha3BvaW50KQorICAgIF9hZGRC
cmVha3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50KQogICAgIHsKLSAgICAgICAgYnJlYWtwb2lu
dC5hZGRFdmVudExpc3RlbmVyKCJlbmFibGUtY2hhbmdlZCIsIHRoaXMuX2JyZWFrcG9pbnRDaGFu
Z2VkLCB0aGlzKTsKLSAgICAgICAgYnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKCJjb25kaXRp
b24tY2hhbmdlZCIsIHRoaXMuX2JyZWFrcG9pbnRDaGFuZ2VkLCB0aGlzKTsKLQogICAgICAgICB2
YXIgbGluZU51bWJlciA9IGJyZWFrcG9pbnQubGluZSAtIDE7CiAgICAgICAgIGlmIChsaW5lTnVt
YmVyID49IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50KQogICAgICAgICAgICAgcmV0dXJuOwog
Ci0gICAgICAgIHRoaXMuX3RleHRNb2RlbC5zZXRBdHRyaWJ1dGUobGluZU51bWJlciwgImJyZWFr
cG9pbnQiLCBicmVha3BvaW50KTsKLSAgICAgICAgYnJlYWtwb2ludC5zb3VyY2VUZXh0ID0gdGhp
cy5fdGV4dE1vZGVsLmxpbmUoYnJlYWtwb2ludC5saW5lIC0gMSk7CisgICAgICAgIGJyZWFrcG9p
bnQuYWRkRXZlbnRMaXN0ZW5lcigiZW5hYmxlLWNoYW5nZWQiLCB0aGlzLl9icmVha3BvaW50Q2hh
bmdlZCwgdGhpcyk7CisgICAgICAgIGJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29uZGl0
aW9uLWNoYW5nZWQiLCB0aGlzLl9icmVha3BvaW50Q2hhbmdlZCwgdGhpcyk7CisgICAgICAgIGJy
ZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVtb3ZlZCIsIHRoaXMuX2JyZWFrcG9pbnRSZW1v
dmVkLCB0aGlzKTsKKworICAgICAgICBicmVha3BvaW50LnNvdXJjZVRleHQgPSB0aGlzLl90ZXh0
TW9kZWwubGluZShsaW5lTnVtYmVyKTsKIAogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmJlZ2lu
VXBkYXRlcygpOwogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmFkZERlY29yYXRpb24obGluZU51
bWJlciwgIndlYmtpdC1icmVha3BvaW50Iik7CkBAIC00NTYsMTQgKzQ1MiwxNiBAQCBXZWJJbnNw
ZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl90ZXh0Vmlld2Vy
LmVuZFVwZGF0ZXMoKTsKICAgICB9LAogCi0gICAgX3JlbW92ZUJyZWFrcG9pbnRGcm9tU291cmNl
OiBmdW5jdGlvbihicmVha3BvaW50KQorICAgIF9icmVha3BvaW50UmVtb3ZlZDogZnVuY3Rpb24o
ZXZlbnQpCiAgICAgeworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50LnRhcmdldDsKKwog
ICAgICAgICBicmVha3BvaW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImVuYWJsZS1jaGFuZ2VkIiwg
bnVsbCwgdGhpcyk7CiAgICAgICAgIGJyZWFrcG9pbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY29u
ZGl0aW9uLWNoYW5nZWQiLCBudWxsLCB0aGlzKTsKKyAgICAgICAgYnJlYWtwb2ludC5yZW1vdmVF
dmVudExpc3RlbmVyKCJyZW1vdmVkIiwgbnVsbCwgdGhpcyk7CiAKICAgICAgICAgdmFyIGxpbmVO
dW1iZXIgPSBicmVha3BvaW50LmxpbmUgLSAxOwogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmJl
Z2luVXBkYXRlcygpOwotICAgICAgICB0aGlzLl90ZXh0TW9kZWwucmVtb3ZlQXR0cmlidXRlKGxp
bmVOdW1iZXIsICJicmVha3BvaW50Iik7CiAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIucmVtb3Zl
RGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQiKTsKICAgICAgICAgdGhp
cy5fdGV4dFZpZXdlci5yZW1vdmVEZWNvcmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJlYWtw
b2ludC1kaXNhYmxlZCIpOwogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLnJlbW92ZURlY29yYXRp
b24obGluZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50LWNvbmRpdGlvbmFsIik7CkBAIC00NzIs
MjggKzQ3MCwyNyBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogCiAg
ICAgX2NvbnRleHRNZW51OiBmdW5jdGlvbihldmVudCkKICAgICB7Ci0gICAgICAgIHZhciB0YXJn
ZXQgPSBldmVudC50YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcygid2Via2l0LWxp
bmUtbnVtYmVyIik7Ci0gICAgICAgIGlmICghdGFyZ2V0KQorICAgICAgICBpZiAoIVdlYkluc3Bl
Y3Rvci5wYW5lbHMuc2NyaXB0cykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdmFyIHJv
dyA9IHRhcmdldC5wYXJlbnRFbGVtZW50OwogCi0gICAgICAgIGlmICghV2ViSW5zcGVjdG9yLnBh
bmVscy5zY3JpcHRzKQorICAgICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0LmVuY2xvc2lu
Z05vZGVPclNlbGZXaXRoQ2xhc3MoIndlYmtpdC1saW5lLW51bWJlciIpOworICAgICAgICBpZiAo
IXRhcmdldCkKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSB0
YXJnZXQucGFyZW50RWxlbWVudC5saW5lTnVtYmVyICsgMTsKIAotICAgICAgICB2YXIgbGluZU51
bWJlciA9IHJvdy5saW5lTnVtYmVyOwogICAgICAgICB2YXIgY29udGV4dE1lbnUgPSBuZXcgV2Vi
SW5zcGVjdG9yLkNvbnRleHRNZW51KCk7CiAKLSAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRl
bShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNvbnRpbnVlIHRvIEhlcmUiKSwgdGhpcy5fY29udGlu
dWVUb0hlcmVEZWxlZ2F0ZS5iaW5kKHRoaXMsIGxpbmVOdW1iZXIgKyAxKSk7CisgICAgICAgIGNv
bnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDb250aW51ZSB0byBI
ZXJlIiksIHRoaXMuX2RlbGVnYXRlLmNvbnRpbnVlVG9MaW5lLmJpbmQodGhpcy5fZGVsZWdhdGUs
IGxpbmVOdW1iZXIpKTsKIAotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX3RleHRNb2Rl
bC5nZXRBdHRyaWJ1dGUobGluZU51bWJlciwgImJyZWFrcG9pbnQiKTsKKyAgICAgICAgdmFyIGJy
ZWFrcG9pbnQgPSB0aGlzLl9kZWxlZ2F0ZS5maW5kQnJlYWtwb2ludChsaW5lTnVtYmVyKTsKICAg
ICAgICAgaWYgKCFicmVha3BvaW50KSB7CiAgICAgICAgICAgICAvLyBUaGlzIHJvdyBkb2Vzbid0
IGhhdmUgYSBicmVha3BvaW50OiBXZSB3YW50IHRvIHNob3cgQWRkIEJyZWFrcG9pbnQgYW5kIEFk
ZCBhbmQgRWRpdCBCcmVha3BvaW50LgotICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRl
bShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkFkZCBCcmVha3BvaW50IiksIHRoaXMuX2FkZEJyZWFr
cG9pbnREZWxlZ2F0ZS5iaW5kKHRoaXMsIGxpbmVOdW1iZXIgKyAxKSk7CisgICAgICAgICAgICBj
b250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiQWRkIEJyZWFrcG9p
bnQiKSwgdGhpcy5fZGVsZWdhdGUuYWRkQnJlYWtwb2ludC5iaW5kKHRoaXMuX2RlbGVnYXRlLCBs
aW5lTnVtYmVyKSk7CiAKICAgICAgICAgICAgIGZ1bmN0aW9uIGFkZENvbmRpdGlvbmFsQnJlYWtw
b2ludCgpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fYWRkQnJlYWtwb2lu
dERlbGVnYXRlKGxpbmVOdW1iZXIgKyAxKTsKLSAgICAgICAgICAgICAgICB2YXIgYnJlYWtwb2lu
dCA9IHRoaXMuX3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUobGluZU51bWJlciwgImJyZWFrcG9pbnQi
KTsKKyAgICAgICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5hZGRCcmVha3BvaW50KGxpbmVOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fZGVsZWdhdGUuZmlu
ZEJyZWFrcG9pbnQobGluZU51bWJlcik7CiAgICAgICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQp
CiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VkaXRCcmVha3BvaW50Q29uZGl0aW9uKGJyZWFr
cG9pbnQpOwogICAgICAgICAgICAgfQpAQCAtNTI1LDE4ICs1MjIsMTYgQEAgV2ViSW5zcGVjdG9y
LlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIHRhcmdldCA9IGV2ZW50LnRh
cmdldC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKCJ3ZWJraXQtbGluZS1udW1iZXIiKTsK
ICAgICAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZhciBy
b3cgPSB0YXJnZXQucGFyZW50RWxlbWVudDsKKyAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSB0YXJn
ZXQucGFyZW50RWxlbWVudC5saW5lTnVtYmVyICsgMTsKIAotICAgICAgICB2YXIgbGluZU51bWJl
ciA9IHJvdy5saW5lTnVtYmVyOwotCi0gICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fdGV4
dE1vZGVsLmdldEF0dHJpYnV0ZShsaW5lTnVtYmVyLCAiYnJlYWtwb2ludCIpOworICAgICAgICB2
YXIgYnJlYWtwb2ludCA9IHRoaXMuX2RlbGVnYXRlLmZpbmRCcmVha3BvaW50KGxpbmVOdW1iZXIp
OwogICAgICAgICBpZiAoYnJlYWtwb2ludCkgewogICAgICAgICAgICAgaWYgKGV2ZW50LnNoaWZ0
S2V5KQogICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQuZW5hYmxlZCA9ICFicmVha3BvaW50LmVu
YWJsZWQ7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgYnJlYWtwb2ludC5yZW1v
dmUoKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0aGlzLl9hZGRCcmVha3BvaW50RGVs
ZWdhdGUobGluZU51bWJlciArIDEpOworICAgICAgICAgICAgdGhpcy5fZGVsZWdhdGUuYWRkQnJl
YWtwb2ludChsaW5lTnVtYmVyKTsKICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAg
ICB9LAogCkBAIC03NzYsNSArNzcxLDk3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90
b3R5cGUgPSB7CiAgICAgfQogfQogCi0KIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5
cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGU7CisKK1dlYkluc3Bl
Y3Rvci5Tb3VyY2VGcmFtZURlbGVnYXRlID0gZnVuY3Rpb24oKQoreworfQorCitXZWJJbnNwZWN0
b3IuU291cmNlRnJhbWVEZWxlZ2F0ZS5wcm90b3R5cGUgPSB7CisgICAgYWRkQnJlYWtwb2ludDog
ZnVuY3Rpb24obGluZU51bWJlcikKKyAgICB7CisgICAgICAgIHZhciBzb3VyY2VJRCA9IHRoaXMu
X3NvdXJjZUlERm9yTGluZShsaW5lTnVtYmVyKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmJyZWFr
cG9pbnRNYW5hZ2VyLnNldEJyZWFrcG9pbnQoc291cmNlSUQsIHRoaXMuX3VybCgpLCBsaW5lTnVt
YmVyLCB0cnVlLCAiIik7CisgICAgICAgIGlmICghV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRz
LmJyZWFrcG9pbnRzQWN0aXZhdGVkKQorICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5z
Y3JpcHRzLnRvZ2dsZUJyZWFrcG9pbnRzQ2xpY2tlZCgpOworICAgIH0sCisKKyAgICBicmVha3Bv
aW50czogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIHNvdXJjZUlEcyA9IHt9OworICAg
ICAgICB2YXIgc2NyaXB0cyA9IHRoaXMuX3NjcmlwdHMoKTsKKyAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgc291cmNlSURzW3Njcmlw
dHNbaV0uc291cmNlSURdID0gdHJ1ZTsKKyAgICAgICAgZnVuY3Rpb24gZmlsdGVyKGJyZWFrcG9p
bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBicmVha3BvaW50LnNvdXJjZUlEIGlu
IHNvdXJjZUlEczsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLmJyZWFr
cG9pbnRNYW5hZ2VyLmZpbmRCcmVha3BvaW50cyhmaWx0ZXIpOworICAgIH0sCisKKyAgICBjYW5F
ZGl0U2NyaXB0czogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rv
ci5wYW5lbHMuc2NyaXB0cy5jYW5FZGl0U2NyaXB0cygpICYmIHRoaXMuX2NhbkVkaXRTY3JpcHRz
KCk7CisgICAgfSwKKworICAgIGNvbnRpbnVlVG9MaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQor
ICAgIHsKKyAgICAgICAgdmFyIHNvdXJjZUlEID0gdGhpcy5fc291cmNlSURGb3JMaW5lKGxpbmVO
dW1iZXIpOworICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMuY29udGludWVUb0xp
bmUoc291cmNlSUQsIGxpbmVOdW1iZXIpOworICAgIH0sCisKKyAgICBlZGl0TGluZTogZnVuY3Rp
b24obGluZU51bWJlciwgbGluZXNDb3VudFRvU2hpZnQsIG5ld0NvbnRlbnQsIGNhbmNlbEVkaXRp
bmdDYWxsYmFjaykKKyAgICB7CisgICAgICAgIHZhciBlZGl0RGF0YSA9IHt9OworICAgICAgICBl
ZGl0RGF0YS5zb3VyY2VJRCA9IHRoaXMuX3NvdXJjZUlERm9yTGluZShsaW5lTnVtYmVyKTsKKyAg
ICAgICAgZWRpdERhdGEuY29udGVudCA9IG5ld0NvbnRlbnQ7CisgICAgICAgIGVkaXREYXRhLmxp
bmUgPSBsaW5lTnVtYmVyOworICAgICAgICBlZGl0RGF0YS5saW5lc0NvdW50VG9TaGlmdCA9IGxp
bmVzQ291bnRUb1NoaWZ0OworCisgICAgICAgIHZhciByZXZlcnRFZGl0TGluZUNhbGxiYWNrID0g
dGhpcy5fcmV2ZXJ0RWRpdExpbmUuYmluZCh0aGlzLCBlZGl0RGF0YSk7CisgICAgICAgIFdlYklu
c3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5lZGl0U2NyaXB0U291cmNlKGVkaXREYXRhLCB0aGlzLl9l
ZGl0TGluZUNvbXBsZXRlLmJpbmQodGhpcywgcmV2ZXJ0RWRpdExpbmVDYWxsYmFjayksIGNhbmNl
bEVkaXRpbmdDYWxsYmFjayk7CisgICAgfSwKKworICAgIF9yZXZlcnRFZGl0TGluZTogZnVuY3Rp
b24oZWRpdERhdGEsIGNvbnRlbnRUb1JldmVydFRvKQorICAgIHsKKyAgICAgICAgdmFyIG5ld0Vk
aXREYXRhID0ge307CisgICAgICAgIG5ld0VkaXREYXRhLnNvdXJjZUlEID0gZWRpdERhdGEuc291
cmNlSUQ7CisgICAgICAgIG5ld0VkaXREYXRhLmNvbnRlbnQgPSBjb250ZW50VG9SZXZlcnRUbzsK
KyAgICAgICAgbmV3RWRpdERhdGEubGluZSA9IGVkaXREYXRhLmxpbmU7CisgICAgICAgIG5ld0Vk
aXREYXRhLmxpbmVzQ291bnRUb1NoaWZ0ID0gLWVkaXREYXRhLmxpbmVzQ291bnRUb1NoaWZ0Owor
CisgICAgICAgIHZhciByZXZlcnRFZGl0TGluZUNhbGxiYWNrID0gdGhpcy5fcmV2ZXJ0RWRpdExp
bmUuYmluZCh0aGlzLCBuZXdFZGl0RGF0YSk7CisgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMu
c2NyaXB0cy5lZGl0U2NyaXB0U291cmNlKG5ld0VkaXREYXRhLCB0aGlzLl9lZGl0TGluZUNvbXBs
ZXRlLmJpbmQodGhpcywgcmV2ZXJ0RWRpdExpbmVDYWxsYmFjaykpOworICAgIH0sCisKKyAgICBm
aW5kQnJlYWtwb2ludDogZnVuY3Rpb24obGluZU51bWJlcikKKyAgICB7CisgICAgICAgIHZhciBz
b3VyY2VJRCA9IHRoaXMuX3NvdXJjZUlERm9yTGluZShsaW5lTnVtYmVyKTsKKyAgICAgICAgcmV0
dXJuIFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5maW5kQnJlYWtwb2ludChzb3VyY2VJ
RCwgbGluZU51bWJlcik7CisgICAgfSwKKworICAgIHNob3VsZERpc3BsYXlCcmVha3BvaW50OiBm
dW5jdGlvbihicmVha3BvaW50KQorICAgIHsKKyAgICAgICAgdmFyIHNjcmlwdHMgPSB0aGlzLl9z
Y3JpcHRzKCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NyaXB0cy5sZW5ndGg7ICsr
aSkgeworICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQuc291cmNlSUQgPT09IHNjcmlwdHNbaV0u
c291cmNlSUQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0sCisKKyAgICBfc291cmNlSURGb3JMaW5lOiBmdW5jdGlv
bihsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgdmFyIHNvdXJjZUlEID0gbnVsbDsKKyAgICAg
ICAgdmFyIHNjcmlwdHMgPSB0aGlzLl9zY3JpcHRzKCk7CisgICAgICAgIHZhciBjbG9zZXN0U3Rh
cnRpbmdMaW5lID0gMDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0
aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgc2NyaXB0ID0gc2NyaXB0c1tpXTsKKyAgICAgICAg
ICAgIGlmIChzY3JpcHQuc3RhcnRpbmdMaW5lIDw9IGxpbmVOdW1iZXIgJiYgc2NyaXB0LnN0YXJ0
aW5nTGluZSA+PSBjbG9zZXN0U3RhcnRpbmdMaW5lKSB7CisgICAgICAgICAgICAgICAgY2xvc2Vz
dFN0YXJ0aW5nTGluZSA9IHNjcmlwdC5zdGFydGluZ0xpbmU7CisgICAgICAgICAgICAgICAgc291
cmNlSUQgPSBzY3JpcHQuc291cmNlSUQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHNvdXJjZUlEOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9Tb3VyY2VWaWV3LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1NvdXJjZVZpZXcuanMKaW5kZXggOTYxNjMyMS4uNmM4NWU2ZCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZVZpZXcuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1NvdXJjZVZpZXcuanMKQEAgLTMyLDggKzMyLDggQEAgV2ViSW5zcGVjdG9y
LlNvdXJjZVZpZXcgPSBmdW5jdGlvbihyZXNvdXJjZSkKIAogICAgIHRoaXMuZWxlbWVudC5hZGRT
dHlsZUNsYXNzKCJzb3VyY2UiKTsKIAotICAgIHZhciBjYW5FZGl0U2NyaXB0cyA9IFdlYkluc3Bl
Y3Rvci5wYW5lbHMuc2NyaXB0cyAmJiBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMuY2FuRWRp
dFNjcmlwdHMoKSAmJiByZXNvdXJjZS50eXBlID09PSBXZWJJbnNwZWN0b3IuUmVzb3VyY2UuVHlw
ZS5TY3JpcHQ7Ci0gICAgdGhpcy5zb3VyY2VGcmFtZSA9IG5ldyBXZWJJbnNwZWN0b3IuU291cmNl
RnJhbWUodGhpcy5lbGVtZW50LCB0aGlzLl9hZGRCcmVha3BvaW50LmJpbmQodGhpcyksIGNhbkVk
aXRTY3JpcHRzID8gdGhpcy5fZWRpdExpbmUuYmluZCh0aGlzKSA6IG51bGwsIHRoaXMuX2NvbnRp
bnVlVG9MaW5lLmJpbmQodGhpcykpOworICAgIHZhciBkZWxlZ2F0ZSA9IG5ldyBXZWJJbnNwZWN0
b3IuUmVzb3VyY2VGcmFtZURlbGVnYXRlKHRoaXMucmVzb3VyY2UpOworICAgIHRoaXMuc291cmNl
RnJhbWUgPSBuZXcgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lKHRoaXMuZWxlbWVudCwgZGVsZWdh
dGUpOwogICAgIHJlc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoImZpbmlzaGVkIiwgdGhpcy5fcmVz
b3VyY2VMb2FkaW5nRmluaXNoZWQsIHRoaXMpOwogICAgIHRoaXMuX2ZyYW1lTmVlZHNTZXR1cCA9
IHRydWU7CiB9CkBAIC0xMDAsOSArMTAwLDYgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcucHJv
dG90eXBlID0gewogICAgICAgICB2YXIgbWltZVR5cGUgPSB0aGlzLl9jYW5vbmljYWxNaW1lVHlw
ZSh0aGlzLnJlc291cmNlKTsKICAgICAgICAgdGhpcy5zb3VyY2VGcmFtZS5zZXRDb250ZW50KG1p
bWVUeXBlLCBjb250ZW50LCB0aGlzLnJlc291cmNlLnVybCk7CiAgICAgICAgIHRoaXMuX3NvdXJj
ZUZyYW1lU2V0dXBGaW5pc2hlZCgpOwotICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSBXZWJJbnNw
ZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuYnJlYWtwb2ludHNGb3JVUkwodGhpcy5yZXNvdXJjZS51
cmwpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJyZWFrcG9pbnRzLmxlbmd0aDsgKytp
KQotICAgICAgICAgICAgdGhpcy5zb3VyY2VGcmFtZS5hZGRCcmVha3BvaW50KGJyZWFrcG9pbnRz
W2ldKTsKICAgICB9LAogCiAgICAgX2Nhbm9uaWNhbE1pbWVUeXBlOiBmdW5jdGlvbihyZXNvdXJj
ZSkKQEAgLTExOSw3MyArMTE2LDYgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcucHJvdG90eXBl
ID0gewogICAgICAgICB0aGlzLnJlc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImZpbmlzaGVk
IiwgdGhpcy5fcmVzb3VyY2VMb2FkaW5nRmluaXNoZWQsIHRoaXMpOwogICAgIH0sCiAKLSAgICBf
Y29udGludWVUb0xpbmU6IGZ1bmN0aW9uKGxpbmUpCi0gICAgewotICAgICAgICB2YXIgc2NyaXB0
c1BhbmVsID0gV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzOwotICAgICAgICBpZiAoc2NyaXB0
c1BhbmVsKSB7Ci0gICAgICAgICAgICB2YXIgc291cmNlSUQgPSB0aGlzLl9zb3VyY2VJREZvckxp
bmUobGluZSk7Ci0gICAgICAgICAgICBzY3JpcHRzUGFuZWwuY29udGludWVUb0xpbmUoc291cmNl
SUQsIGxpbmUpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9hZGRCcmVha3BvaW50OiBmdW5j
dGlvbihsaW5lKQotICAgIHsKLSAgICAgICAgdmFyIHNvdXJjZUlEID0gdGhpcy5fc291cmNlSURG
b3JMaW5lKGxpbmUpOwotICAgICAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuc2V0
QnJlYWtwb2ludChzb3VyY2VJRCwgdGhpcy5yZXNvdXJjZS51cmwsIGxpbmUsIHRydWUsICIiKTsK
LSAgICAgICAgaWYgKCFXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMuYnJlYWtwb2ludHNBY3Rp
dmF0ZWQpCi0gICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMudG9nZ2xlQnJl
YWtwb2ludHNDbGlja2VkKCk7Ci0gICAgfSwKLQotICAgIF9lZGl0TGluZTogZnVuY3Rpb24obGlu
ZSwgbmV3Q29udGVudCwgY2FuY2VsRWRpdGluZ0NhbGxiYWNrKQotICAgIHsKLSAgICAgICAgdmFy
IGxpbmVzID0gW107Ci0gICAgICAgIHZhciB0ZXh0TW9kZWwgPSB0aGlzLnNvdXJjZUZyYW1lLnRl
eHRNb2RlbDsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0TW9kZWwubGluZXNDb3Vu
dDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoaSA9PT0gbGluZSkKLSAgICAgICAgICAgICAgICBs
aW5lcy5wdXNoKG5ld0NvbnRlbnQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGxpbmVzLnB1c2godGV4dE1vZGVsLmxpbmUoaSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFy
IGVkaXREYXRhID0ge307Ci0gICAgICAgIGVkaXREYXRhLnNvdXJjZUlEID0gdGhpcy5fc291cmNl
SURGb3JMaW5lKGxpbmUpOwotICAgICAgICBlZGl0RGF0YS5jb250ZW50ID0gbGluZXMuam9pbigi
XG4iKTsKLSAgICAgICAgZWRpdERhdGEubGluZSA9IGxpbmU7Ci0gICAgICAgIGVkaXREYXRhLmxp
bmVzQ291bnRUb1NoaWZ0ID0gbmV3Q29udGVudC5zcGxpdCgiXG4iKS5sZW5ndGggLSAxOwotCi0g
ICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5lZGl0U2NyaXB0U291cmNlKGVkaXRE
YXRhLCB0aGlzLl9lZGl0TGluZUNvbXBsZXRlLmJpbmQodGhpcywgZWRpdERhdGEpLCBjYW5jZWxF
ZGl0aW5nQ2FsbGJhY2spOwotICAgIH0sCi0KLSAgICBfZWRpdExpbmVDb21wbGV0ZTogZnVuY3Rp
b24oZWRpdERhdGEsIG5ld0NvbnRlbnQpCi0gICAgewotICAgICAgICB0aGlzLnJlc291cmNlLnNl
dENvbnRlbnQobmV3Q29udGVudCwgdGhpcy5fcmV2ZXJ0RWRpdExpbmUuYmluZCh0aGlzLCBlZGl0
RGF0YSkpOwotICAgIH0sCi0KLSAgICBfcmV2ZXJ0RWRpdExpbmU6IGZ1bmN0aW9uKGVkaXREYXRh
LCBjb250ZW50VG9SZXZlcnRUbykKLSAgICB7Ci0gICAgICAgIHZhciBuZXdFZGl0RGF0YSA9IHt9
OwotICAgICAgICBuZXdFZGl0RGF0YS5zb3VyY2VJRCA9IGVkaXREYXRhLnNvdXJjZUlEOwotICAg
ICAgICBuZXdFZGl0RGF0YS5jb250ZW50ID0gZWRpdERhdGEuY29udGVudDsKLSAgICAgICAgbmV3
RWRpdERhdGEubGluZSA9IGVkaXREYXRhLmxpbmU7Ci0gICAgICAgIG5ld0VkaXREYXRhLmxpbmVz
Q291bnRUb1NoaWZ0ID0gLWVkaXREYXRhLmxpbmVzQ291bnRUb1NoaWZ0OwotICAgICAgICBXZWJJ
bnNwZWN0b3IucGFuZWxzLnNjcmlwdHMuZWRpdFNjcmlwdFNvdXJjZShuZXdFZGl0RGF0YSwgdGhp
cy5fZWRpdExpbmVDb21wbGV0ZS5iaW5kKHRoaXMsIG5ld0VkaXREYXRhKSk7Ci0gICAgfSwKLQot
ICAgIF9zb3VyY2VJREZvckxpbmU6IGZ1bmN0aW9uKGxpbmUpCi0gICAgewotICAgICAgICB2YXIg
c291cmNlSUQgPSBudWxsOwotICAgICAgICB2YXIgY2xvc2VzdFN0YXJ0aW5nTGluZSA9IDA7Ci0g
ICAgICAgIHZhciBzY3JpcHRzID0gdGhpcy5yZXNvdXJjZS5zY3JpcHRzOwotICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHNjcmlwdHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBz
Y3JpcHQgPSBzY3JpcHRzW2ldOwotICAgICAgICAgICAgaWYgKHNjcmlwdC5zdGFydGluZ0xpbmUg
PD0gbGluZSAmJiBzY3JpcHQuc3RhcnRpbmdMaW5lID49IGNsb3Nlc3RTdGFydGluZ0xpbmUpIHsK
LSAgICAgICAgICAgICAgICBjbG9zZXN0U3RhcnRpbmdMaW5lID0gc2NyaXB0LnN0YXJ0aW5nTGlu
ZTsKLSAgICAgICAgICAgICAgICBzb3VyY2VJRCA9IHNjcmlwdC5zb3VyY2VJRDsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gc291cmNlSUQ7Ci0gICAgfSwKLQogICAg
IC8vIFRoZSByZXN0IG9mIHRoZSBtZXRob2RzIGluIHRoaXMgcHJvdG90eXBlIG5lZWQgdG8gYmUg
Z2VuZXJpYyBlbm91Z2ggdG8gd29yayB3aXRoIGEgU2NyaXB0Vmlldy4KICAgICAvLyBUaGUgU2Ny
aXB0VmlldyBwcm90b3R5cGUgcHVsbHMgdGhlc2UgbWV0aG9kcyBpbnRvIGl0J3MgcHJvdG90eXBl
IHRvIGF2b2lkIGR1cGxpY2F0ZSBjb2RlLgogCkBAIC0zMDgsMyArMjM4LDMyIEBAIFdlYkluc3Bl
Y3Rvci5Tb3VyY2VWaWV3LnByb3RvdHlwZSA9IHsKIH0KIAogV2ViSW5zcGVjdG9yLlNvdXJjZVZp
ZXcucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5SZXNvdXJjZVZpZXcucHJvdG90
eXBlOworCitXZWJJbnNwZWN0b3IuUmVzb3VyY2VGcmFtZURlbGVnYXRlID0gZnVuY3Rpb24ocmVz
b3VyY2UpCit7CisgICAgdGhpcy5fcmVzb3VyY2UgPSByZXNvdXJjZTsKK30KKworV2ViSW5zcGVj
dG9yLlJlc291cmNlRnJhbWVEZWxlZ2F0ZS5wcm90b3R5cGUgPSB7CisgICAgX2NhbkVkaXRTY3Jp
cHRzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2UudHlw
ZSA9PT0gV2ViSW5zcGVjdG9yLlJlc291cmNlLlR5cGUuU2NyaXB0OworICAgIH0sCisKKyAgICBf
ZWRpdExpbmVDb21wbGV0ZTogZnVuY3Rpb24ocmV2ZXJ0RWRpdExpbmVDYWxsYmFjaywgbmV3Q29u
dGVudCkKKyAgICB7CisgICAgICAgIHRoaXMuX3Jlc291cmNlLnNldENvbnRlbnQobmV3Q29udGVu
dCwgcmV2ZXJ0RWRpdExpbmVDYWxsYmFjayk7CisgICAgfSwKKworICAgIF9zY3JpcHRzOiBmdW5j
dGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2Uuc2NyaXB0czsKKyAg
ICB9LAorCisgICAgX3VybDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgIHJldHVybiB0aGlz
Ll9yZXNvdXJjZS51cmw7CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuUmVzb3VyY2VGcmFtZURl
bGVnYXRlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVEZWxl
Z2F0ZS5wcm90b3R5cGU7Cg==
</data>
<flag name="review"
          id="66504"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75817</attachid>
            <date>2010-12-07 08:00:26 -0800</date>
            <delta_ts>2010-12-08 02:21:32 -0800</delta_ts>
            <desc>Comments addressed.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>27455</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NzZkNGJjNy4uNzgwMzVlNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NCBAQAorMjAxMC0xMi0wNyAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBTb3VyY2VGcmFtZSByZWZhY3Rv
cmluZy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUw
MjIzCisKKyAgICAgICAgU291cmNlRnJhbWUgc2hvdWxkIGFzayBCcmVha3BvaW50TWFuYWdlciBh
Ym91dCBleGlzdGluZyBicmVha3BvaW50cyBpbnN0ZWFkIG9mIG1haW50YWluaW5nCisgICAgICAg
IGl0J3Mgb3duIHN0b3JhZ2VzLiBNb3ZlIGNvbW1vbiBjb2RlIGZyb20gU2NyaXB0VmlldyBhbmQg
U291cmNlVmlldyB0byBTb3VyY2VGcmFtZS4KKworICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1l
bmQvQnJlYWtwb2ludE1hbmFnZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2lu
dE1hbmFnZXIucHJvdG90eXBlLmZpbmRCcmVha3BvaW50cyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLmZpbmRCcmVha3BvaW50KToKKyAgICAgICAg
KiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
Y3JpcHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5cGUuZ2V0IGxpbmVz
Q291bnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5cGUuZ2V0IHNvdXJj
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0LnByb3RvdHlwZS5zZXQgc291cmNlKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdFZpZXcuanM6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU2NyaXB0Vmlldyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0Vmll
dy5wcm90b3R5cGUuX3NjcmlwdFNvdXJjZUNoYW5nZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlNjcmlwdEZyYW1lRGVsZWdhdGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdEZyYW1l
RGVsZWdhdGUucHJvdG90eXBlLmNhbkVkaXRTY3JpcHRzKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5TY3JpcHRGcmFtZURlbGVnYXRlLnByb3RvdHlwZS5lZGl0TGluZUNvbXBsZXRlKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5TY3JpcHRGcmFtZURlbGVnYXRlLnByb3RvdHlwZS5zY3JpcHRzKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qczoKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1l
bmQvU291cmNlRnJhbWUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUpOiBB
ZGQgY29tbW9uIG1ldGhvZHMgb2YgU2NyaXB0VmlldyBhbmQgU291cmNlVmlldy4KKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZURlbGVnYXRlKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Tb3VyY2VGcmFtZURlbGVnYXRlLnByb3RvdHlwZS5jYW5FZGl0U2NyaXB0cyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVEZWxlZ2F0ZS5wcm90b3R5cGUuZWRpdExpbmVDb21w
bGV0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVEZWxlZ2F0ZS5wcm90b3R5
cGUuc2NyaXB0cyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VWaWV3Lmpz
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlNvdXJjZVZpZXcucHJvdG90eXBlLl9jb250ZW50TG9hZGVkKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5SZXNvdXJjZUZyYW1lRGVsZWdhdGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJl
c291cmNlRnJhbWVEZWxlZ2F0ZS5wcm90b3R5cGUuY2FuRWRpdFNjcmlwdHMpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlJlc291cmNlRnJhbWVEZWxlZ2F0ZS5wcm90b3R5cGUuZWRpdExpbmVDb21w
bGV0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VGcmFtZURlbGVnYXRlLnByb3Rv
dHlwZS5zY3JpcHRzKToKKwogMjAxMC0xMi0wNiAgQWxleGV5IE1hcmluaWNoZXYgIDxhbWFyaW5p
Y2hldkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxs
LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5h
Z2VyLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpz
CmluZGV4IDNkNTEwOTIuLmY3MTIzNjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMKQEAgLTYzLDI0ICs2MywyMSBAQCBXZWJJbnNwZWN0
b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9zZXRCcmVh
a3BvaW50KHNvdXJjZUlELCB1cmwsIGxpbmUsIGVuYWJsZWQsIGNvbmRpdGlvbik7CiAgICAgfSwK
IAotICAgIGJyZWFrcG9pbnRzRm9yU291cmNlSUQ6IGZ1bmN0aW9uKHNvdXJjZUlEKQorICAgIGZp
bmRCcmVha3BvaW50czogZnVuY3Rpb24oZmlsdGVyKQogICAgIHsKICAgICAgICAgdmFyIGJyZWFr
cG9pbnRzID0gW107CiAgICAgICAgIGZvciAodmFyIGlkIGluIHRoaXMuX2JyZWFrcG9pbnRzKSB7
Ci0gICAgICAgICAgICBpZiAodGhpcy5fYnJlYWtwb2ludHNbaWRdLnNvdXJjZUlEID09PSBzb3Vy
Y2VJRCkKLSAgICAgICAgICAgICAgICBicmVha3BvaW50cy5wdXNoKHRoaXMuX2JyZWFrcG9pbnRz
W2lkXSk7CisgICAgICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fYnJlYWtwb2ludHNbaWRd
OworICAgICAgICAgICBpZiAoZmlsdGVyKGJyZWFrcG9pbnQpKQorICAgICAgICAgICAgICAgYnJl
YWtwb2ludHMucHVzaChicmVha3BvaW50KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gYnJl
YWtwb2ludHM7CiAgICAgfSwKIAotICAgIGJyZWFrcG9pbnRzRm9yVVJMOiBmdW5jdGlvbih1cmwp
CisgICAgZmluZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlELCBsaW5lTnVtYmVyKQogICAg
IHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gW107Ci0gICAgICAgIGZvciAodmFyIGlkIGlu
IHRoaXMuX2JyZWFrcG9pbnRzKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5fYnJlYWtwb2ludHNb
aWRdLnVybCA9PT0gdXJsKQotICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRzLnB1c2godGhpcy5f
YnJlYWtwb2ludHNbaWRdKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYnJlYWtwb2ludHM7
CisgICAgICAgIHZhciBicmVha3BvaW50SWQgPSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5qc0Jy
ZWFrcG9pbnRJZChzb3VyY2VJRCwgbGluZU51bWJlcik7CisgICAgICAgIHJldHVybiB0aGlzLl9i
cmVha3BvaW50c1ticmVha3BvaW50SWRdOwogICAgIH0sCiAKICAgICByZXNldDogZnVuY3Rpb24o
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdC5qcyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHQuanMKaW5kZXggYmUzZjAyMC4uOWM4NWIx
YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdC5qcworKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0LmpzCkBAIC0yNyw3ICsyNyw3IEBA
IFdlYkluc3BlY3Rvci5TY3JpcHQgPSBmdW5jdGlvbihzb3VyY2VJRCwgc291cmNlVVJMLCBzb3Vy
Y2UsIHN0YXJ0aW5nTGluZSwgZXJyb3JMCiB7CiAgICAgdGhpcy5zb3VyY2VJRCA9IHNvdXJjZUlE
OwogICAgIHRoaXMuc291cmNlVVJMID0gc291cmNlVVJMOwotICAgIHRoaXMuc291cmNlID0gc291
cmNlOworICAgIHRoaXMuX3NvdXJjZSA9IHNvdXJjZTsKICAgICB0aGlzLnN0YXJ0aW5nTGluZSA9
IHN0YXJ0aW5nTGluZTsKICAgICB0aGlzLmVycm9yTGluZSA9IGVycm9yTGluZTsKICAgICB0aGlz
LmVycm9yTWVzc2FnZSA9IGVycm9yTWVzc2FnZTsKQEAgLTU3LDYgKzU3LDggQEAgV2ViSW5zcGVj
dG9yLlNjcmlwdC5Xb3JsZFR5cGUgPSB7CiAgICAgRVhURU5TSU9OU19XT1JMRDogMQogfQogCitX
ZWJJbnNwZWN0b3IuU2NyaXB0LlNvdXJjZUNoYW5nZWRFdmVudCA9ICJzb3VyY2UtY2hhbmdlZCI7
CisKIFdlYkluc3BlY3Rvci5TY3JpcHQucHJvdG90eXBlID0gewogICAgIGdldCBsaW5lc0NvdW50
KCkKICAgICB7CkBAIC03MSw1ICs3MywxOSBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0LnByb3RvdHlw
ZSA9IHsKICAgICAgICAgICAgIHRoaXMuX2xpbmVzQ291bnQrKzsKICAgICAgICAgfQogICAgICAg
ICByZXR1cm4gdGhpcy5fbGluZXNDb3VudDsKKyAgICB9LAorCisgICAgZ2V0IHNvdXJjZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlOworICAgIH0sCisKKyAgICBzZXQgc291
cmNlKHNvdXJjZSkKKyAgICB7CisgICAgICAgIHRoaXMuX3NvdXJjZSA9IHNvdXJjZTsKKyAgICAg
ICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlNjcmlwdC5Tb3Vy
Y2VDaGFuZ2VkRXZlbnQpOwogICAgIH0KIH0KKworV2ViSW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5
cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGU7CisKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRWaWV3LmpzIGIvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdFZpZXcuanMKaW5kZXggZDg3OGU5Yi4uMTdkZDAzYSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdFZpZXcuanMKKysr
IGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdFZpZXcuanMKQEAgLTMzLDggKzMz
LDEwIEBAIFdlYkluc3BlY3Rvci5TY3JpcHRWaWV3ID0gZnVuY3Rpb24oc2NyaXB0KQogCiAgICAg
dGhpcy5fZnJhbWVOZWVkc1NldHVwID0gdHJ1ZTsKICAgICB0aGlzLl9zb3VyY2VGcmFtZVNldHVw
ID0gZmFsc2U7Ci0gICAgdmFyIGNhbkVkaXRTY3JpcHRzID0gV2ViSW5zcGVjdG9yLnBhbmVscy5z
Y3JpcHRzLmNhbkVkaXRTY3JpcHRzKCk7Ci0gICAgdGhpcy5zb3VyY2VGcmFtZSA9IG5ldyBXZWJJ
bnNwZWN0b3IuU291cmNlRnJhbWUodGhpcy5lbGVtZW50LCB0aGlzLl9hZGRCcmVha3BvaW50LmJp
bmQodGhpcyksIGNhbkVkaXRTY3JpcHRzID8gdGhpcy5fZWRpdExpbmUuYmluZCh0aGlzKSA6IG51
bGwsIHRoaXMuX2NvbnRpbnVlVG9MaW5lLmJpbmQodGhpcykpOworICAgIHZhciBkZWxlZ2F0ZSA9
IG5ldyBXZWJJbnNwZWN0b3IuU2NyaXB0RnJhbWVEZWxlZ2F0ZSh0aGlzLnNjcmlwdCk7CisgICAg
dGhpcy5zb3VyY2VGcmFtZSA9IG5ldyBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUodGhpcy5lbGVt
ZW50LCBkZWxlZ2F0ZSk7CisKKyAgICB0aGlzLnNjcmlwdC5hZGRFdmVudExpc3RlbmVyKFdlYklu
c3BlY3Rvci5TY3JpcHQuU291cmNlQ2hhbmdlZEV2ZW50LCB0aGlzLl9zY3JpcHRTb3VyY2VDaGFu
Z2VkLCB0aGlzKTsKIH0KIAogV2ViSW5zcGVjdG9yLlNjcmlwdFZpZXcucHJvdG90eXBlID0gewpA
QCAtODUsMjkgKzg3LDkgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdFZpZXcucHJvdG90eXBlID0gewog
ICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNjcmlwdC1yZXNvdXJjZS12aWV3
cyIpLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7CiAgICAgfSwKIAotICAgIF9jb250aW51ZVRv
TGluZTogZnVuY3Rpb24obGluZSkKLSAgICB7Ci0gICAgICAgIHZhciBzY3JpcHRzUGFuZWwgPSBX
ZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHM7Ci0gICAgICAgIGlmIChzY3JpcHRzUGFuZWwpCi0g
ICAgICAgICAgICBzY3JpcHRzUGFuZWwuY29udGludWVUb0xpbmUodGhpcy5zY3JpcHQuc291cmNl
SUQsIGxpbmUpOwotICAgIH0sCi0KLSAgICBfYWRkQnJlYWtwb2ludDogZnVuY3Rpb24obGluZSkK
KyAgICBfc2NyaXB0U291cmNlQ2hhbmdlZDogZnVuY3Rpb24oZXZlbnQpCiAgICAgewotICAgICAg
ICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuc2V0QnJlYWtwb2ludCh0aGlzLnNjcmlw
dC5zb3VyY2VJRCwgdGhpcy5zY3JpcHQuc291cmNlVVJMLCBsaW5lLCB0cnVlLCAiIik7Ci0gICAg
ICAgIGlmICghV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLmJyZWFrcG9pbnRzQWN0aXZhdGVk
KQotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnRvZ2dsZUJyZWFrcG9p
bnRzQ2xpY2tlZCgpOwotICAgIH0sCi0KLSAgICBfZWRpdExpbmVDb21wbGV0ZTogZnVuY3Rpb24o
bmV3Qm9keSkKLSAgICB7Ci0gICAgICAgIHRoaXMuc2NyaXB0LnNvdXJjZSA9IG5ld0JvZHk7Ci0g
ICAgICAgIHRoaXMuc291cmNlRnJhbWUudXBkYXRlQ29udGVudCh0aGlzLl9wcmVwZW5kV2hpdGVz
cGFjZShuZXdCb2R5KSk7Ci0gICAgfSwKLQotICAgIF9zb3VyY2VJREZvckxpbmU6IGZ1bmN0aW9u
KGxpbmUpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5zY3JpcHQuc291cmNlSUQ7CisgICAg
ICAgIHRoaXMuc291cmNlRnJhbWUudXBkYXRlQ29udGVudCh0aGlzLl9wcmVwZW5kV2hpdGVzcGFj
ZSh0aGlzLnNjcmlwdC5zb3VyY2UpKTsKICAgICB9LAogCiAgICAgLy8gVGhlIGZvbGxvd2luZyBt
ZXRob2RzIGFyZSBwdWxsZWQgZnJvbSBTb3VyY2VWaWV3LCBzaW5jZSB0aGV5IGFyZQpAQCAtMTI3
LDkgKzEwOSwzMiBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0Vmlldy5wcm90b3R5cGUgPSB7CiAgICAg
c2hvd2luZ0ZpcnN0U2VhcmNoUmVzdWx0OiBXZWJJbnNwZWN0b3IuU291cmNlVmlldy5wcm90b3R5
cGUuc2hvd2luZ0ZpcnN0U2VhcmNoUmVzdWx0LAogICAgIHNob3dpbmdMYXN0U2VhcmNoUmVzdWx0
OiBXZWJJbnNwZWN0b3IuU291cmNlVmlldy5wcm90b3R5cGUuc2hvd2luZ0xhc3RTZWFyY2hSZXN1
bHQsCiAgICAgX2p1bXBUb1NlYXJjaFJlc3VsdDogV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcucHJv
dG90eXBlLl9qdW1wVG9TZWFyY2hSZXN1bHQsCi0gICAgX2VkaXRMaW5lOiBXZWJJbnNwZWN0b3Iu
U291cmNlVmlldy5wcm90b3R5cGUuX2VkaXRMaW5lLAogICAgIHJlc2l6ZTogV2ViSW5zcGVjdG9y
LlNvdXJjZVZpZXcucHJvdG90eXBlLnJlc2l6ZQogfQogCiBXZWJJbnNwZWN0b3IuU2NyaXB0Vmll
dy5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90eXBlOwogCitX
ZWJJbnNwZWN0b3IuU2NyaXB0RnJhbWVEZWxlZ2F0ZSA9IGZ1bmN0aW9uKHNjcmlwdCkKK3sKKyAg
ICBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVEZWxlZ2F0ZS5jYWxsKHRoaXMpOworICAgIHRoaXMu
X3NjcmlwdCA9IHNjcmlwdDsKK30KKworV2ViSW5zcGVjdG9yLlNjcmlwdEZyYW1lRGVsZWdhdGUu
cHJvdG90eXBlID0geworICAgIGNhbkVkaXRTY3JpcHRzOiBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLmNhbkVkaXRTY3JpcHRzKCk7
CisgICAgfSwKKworICAgIGVkaXRMaW5lQ29tcGxldGU6IGZ1bmN0aW9uKHJldmVydEVkaXRMaW5l
Q2FsbGJhY2ssIG5ld0NvbnRlbnQpCisgICAgeworICAgICAgICB0aGlzLl9zY3JpcHQuc291cmNl
ID0gbmV3Q29udGVudDsKKyAgICB9LAorCisgICAgc2NyaXB0czogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIFt0aGlzLl9zY3JpcHRdOworICAgIH0KK30KKworV2ViSW5zcGVjdG9y
LlNjcmlwdEZyYW1lRGVsZWdhdGUucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5T
b3VyY2VGcmFtZURlbGVnYXRlLnByb3RvdHlwZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU2NyaXB0c1BhbmVsLmpzCmluZGV4IDYxYTJmMjguLjk0NjU3MDIgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwpAQCAtMTc1LDggKzE3NSw2IEBAIFdl
Ykluc3BlY3Rvci5TY3JpcHRzUGFuZWwgPSBmdW5jdGlvbigpCiAKICAgICB0aGlzLl9kZWJ1Z2dl
ckVuYWJsZWQgPSBQcmVmZXJlbmNlcy5kZWJ1Z2dlckFsd2F5c0VuYWJsZWQ7CiAKLSAgICBXZWJJ
bnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcigiYnJlYWtwb2ludC1h
ZGRlZCIsIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCwgdGhpcyk7Ci0KICAgICB0aGlzLnJlc2V0KCk7
CiB9CiAKQEAgLTI4MSwyNiArMjc5LDYgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90
b3R5cGUgPSB7CiAgICAgICAgIGRlbGV0ZSByZXNvdXJjZS5fc2NyaXB0c1BlbmRpbmdSZXNvdXJj
ZUxvYWQ7CiAgICAgfSwKIAotICAgIF9icmVha3BvaW50QWRkZWQ6IGZ1bmN0aW9uKGV2ZW50KQot
ICAgIHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBldmVudC5kYXRhOwotCi0gICAgICAgIHZh
ciBzb3VyY2VGcmFtZTsKLSAgICAgICAgaWYgKGJyZWFrcG9pbnQudXJsKSB7Ci0gICAgICAgICAg
ICB2YXIgcmVzb3VyY2UgPSBXZWJJbnNwZWN0b3IucmVzb3VyY2VGb3JVUkwoYnJlYWtwb2ludC51
cmwpOwotICAgICAgICAgICAgaWYgKHJlc291cmNlICYmIHJlc291cmNlLmZpbmlzaGVkKQotICAg
ICAgICAgICAgICAgIHNvdXJjZUZyYW1lID0gdGhpcy5fc291cmNlRnJhbWVGb3JTY3JpcHRPclJl
c291cmNlKHJlc291cmNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChicmVha3BvaW50LnNv
dXJjZUlEICYmICFzb3VyY2VGcmFtZSkgewotICAgICAgICAgICAgdmFyIG9iamVjdCA9IHRoaXMu
X3NvdXJjZUlETWFwW2JyZWFrcG9pbnQuc291cmNlSURdCi0gICAgICAgICAgICBzb3VyY2VGcmFt
ZSA9IHRoaXMuX3NvdXJjZUZyYW1lRm9yU2NyaXB0T3JSZXNvdXJjZShvYmplY3QpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKHNvdXJjZUZyYW1lKQotICAgICAgICAgICAgc291cmNlRnJhbWUu
YWRkQnJlYWtwb2ludChicmVha3BvaW50KTsKLSAgICB9LAotCiAgICAgY2FuRWRpdFNjcmlwdHM6
IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHJldHVybiBQcmVmZXJlbmNlcy5jYW5FZGl0U2Ny
aXB0U291cmNlOwpAQCAtMzEyLDcgKzI5MCw3IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwu
cHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIC8vIE5lZWQgdG8g
Y2xlYXIgYnJlYWtwb2ludHMgYW5kIHJlLWNyZWF0ZSB0aGVtIGxhdGVyIHdoZW4gZWRpdGluZyBz
b3VyY2UuCi0gICAgICAgIHZhciBicmVha3BvaW50cyA9IFdlYkluc3BlY3Rvci5icmVha3BvaW50
TWFuYWdlci5icmVha3BvaW50c0ZvclNvdXJjZUlEKHNvdXJjZUlEKTsKKyAgICAgICAgdmFyIGJy
ZWFrcG9pbnRzID0gV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLmZpbmRCcmVha3BvaW50
cyhmdW5jdGlvbihiKSB7IHJldHVybiBiLnNvdXJjZUlEID09PSBlZGl0RGF0YS5zb3VyY2VJRCB9
KTsKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBicmVha3BvaW50cy5sZW5ndGg7ICsraSkK
ICAgICAgICAgICAgIGJyZWFrcG9pbnRzW2ldLnJlbW92ZSgpOwogCkBAIC0xMDkyLDQgKzEwNzAs
MyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9IHsKIH0KIAogV2ViSW5z
cGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlBh
bmVsLnByb3RvdHlwZTsKLQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1NvdXJjZUZyYW1lLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1l
LmpzCmluZGV4IDhlMDc3Y2QuLjZjMzIyM2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU291cmNlRnJhbWUuanMKQEAgLTI4LDkgKzI4LDEwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAKLVdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZSA9IGZ1bmN0aW9uKHBhcmVudEVsZW1lbnQsIGFk
ZEJyZWFrcG9pbnREZWxlZ2F0ZSwgZWRpdERlbGVnYXRlLCBjb250aW51ZVRvSGVyZURlbGVnYXRl
KQorV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lID0gZnVuY3Rpb24ocGFyZW50RWxlbWVudCwgZGVs
ZWdhdGUpCiB7CiAgICAgdGhpcy5fcGFyZW50RWxlbWVudCA9IHBhcmVudEVsZW1lbnQ7CisgICAg
dGhpcy5fZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKIAogICAgIHRoaXMuX3RleHRNb2RlbCA9IG5ldyBX
ZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1vZGVsKCk7CiAgICAgdGhpcy5fdGV4dE1vZGVsLnJlcGxh
Y2VUYWJzV2l0aFNwYWNlcyA9IHRydWU7CkBAIC0zOCwxMyArMzksOCBAQCBXZWJJbnNwZWN0b3Iu
U291cmNlRnJhbWUgPSBmdW5jdGlvbihwYXJlbnRFbGVtZW50LCBhZGRCcmVha3BvaW50RGVsZWdh
dGUsIGVkaXREZQogICAgIHRoaXMuX21lc3NhZ2VzID0gW107CiAgICAgdGhpcy5fcm93TWVzc2Fn
ZXMgPSB7fTsKICAgICB0aGlzLl9tZXNzYWdlQnViYmxlcyA9IHt9OwotICAgIHRoaXMuYnJlYWtw
b2ludHMgPSBbXTsKIAogICAgIHRoaXMuX2xvYWRlZCA9IGZhbHNlOwotCi0gICAgdGhpcy5fY29u
dGludWVUb0hlcmVEZWxlZ2F0ZSA9IGNvbnRpbnVlVG9IZXJlRGVsZWdhdGU7Ci0gICAgdGhpcy5f
YWRkQnJlYWtwb2ludERlbGVnYXRlID0gYWRkQnJlYWtwb2ludERlbGVnYXRlOwotICAgIHRoaXMu
X2VkaXREZWxlZ2F0ZSA9IGVkaXREZWxlZ2F0ZTsKICAgICB0aGlzLl9wb3BvdmVyT2JqZWN0R3Jv
dXAgPSAicG9wb3ZlciI7CiB9CiAKQEAgLTEwNSwyMyArMTAxLDYgQEAgV2ViSW5zcGVjdG9yLlNv
dXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMuX2xpbmVOdW1iZXJUb1Jl
dmVhbCA9IGxpbmVOdW1iZXI7CiAgICAgfSwKIAotICAgIGFkZEJyZWFrcG9pbnQ6IGZ1bmN0aW9u
KGJyZWFrcG9pbnQpCi0gICAgewotICAgICAgICB0aGlzLmJyZWFrcG9pbnRzLnB1c2goYnJlYWtw
b2ludCk7Ci0gICAgICAgIGJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVtb3ZlZCIsIHRo
aXMuX2JyZWFrcG9pbnRSZW1vdmVkLCB0aGlzKTsKLSAgICAgICAgaWYgKHRoaXMuX3RleHRWaWV3
ZXIpCi0gICAgICAgICAgICB0aGlzLl9hZGRCcmVha3BvaW50VG9Tb3VyY2UoYnJlYWtwb2ludCk7
Ci0gICAgfSwKLQotICAgIF9icmVha3BvaW50UmVtb3ZlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAg
ewotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50LnRhcmdldDsKLQotICAgICAgICB0aGlz
LmJyZWFrcG9pbnRzLnJlbW92ZShicmVha3BvaW50KTsKLSAgICAgICAgaWYgKHRoaXMuX3RleHRW
aWV3ZXIpCi0gICAgICAgICAgICB0aGlzLl9yZW1vdmVCcmVha3BvaW50RnJvbVNvdXJjZShicmVh
a3BvaW50KTsKLSAgICB9LAotCiAgICAgYWRkTWVzc2FnZTogZnVuY3Rpb24obXNnKQogICAgIHsK
ICAgICAgICAgLy8gRG9uJ3QgYWRkIHRoZSBtZXNzYWdlIGlmIHRoZXJlIGlzIG5vIG1lc3NhZ2Ug
b3IgdmFsaWQgbGluZSBvciBpZiB0aGUgbXNnIGlzbid0IGFuIGVycm9yIG9yIHdhcm5pbmcuCkBA
IC0yMTEsMTQgKzE5MCwxMCBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0g
ewogICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsIHRoaXMuX3Njcm9s
bC5iaW5kKHRoaXMpLCB0cnVlKTsKICAgICAgICAgdGhpcy5fcGFyZW50RWxlbWVudC5hcHBlbmRD
aGlsZChlbGVtZW50KTsKIAotICAgICAgICB0aGlzLl9uZWVkc1Byb2dyYW1Db3VudGVySW1hZ2Ug
PSB0cnVlOwotICAgICAgICB0aGlzLl9uZWVkc0JyZWFrcG9pbnRJbWFnZXMgPSB0cnVlOwotCiAg
ICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuYmVnaW5VcGRhdGVzKCk7CiAKICAgICAgICAgdGhpcy5f
dGV4dFZpZXdlci5taW1lVHlwZSA9IHRoaXMuX21pbWVUeXBlOwogICAgICAgICB0aGlzLl9hZGRF
eGlzdGluZ01lc3NhZ2VzVG9Tb3VyY2UoKTsKLSAgICAgICAgdGhpcy5fYWRkRXhpc3RpbmdCcmVh
a3BvaW50c1RvU291cmNlKCk7CiAgICAgICAgIHRoaXMuX3VwZGF0ZUV4ZWN1dGlvbkxpbmUoKTsK
ICAgICAgICAgdGhpcy5fdXBkYXRlRGlmZkRlY29yYXRpb25zKCk7CiAgICAgICAgIHRoaXMuX3Rl
eHRWaWV3ZXIucmVzaXplKCk7CkBAIC0yMzgsOSArMjEzLDE2IEBAIFdlYkluc3BlY3Rvci5Tb3Vy
Y2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodExpbmUodGhp
cy5fbGluZVRvSGlnaGxpZ2h0KTsKICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9saW5lVG9IaWdo
bGlnaHQ7CiAgICAgICAgIH0KKworICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSB0aGlzLl9icmVh
a3BvaW50cygpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJyZWFrcG9pbnRzLmxlbmd0
aDsgKytpKQorICAgICAgICAgICAgdGhpcy5fYWRkQnJlYWtwb2ludChicmVha3BvaW50c1tpXSk7
CisgICAgICAgIFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVy
KCJicmVha3BvaW50LWFkZGVkIiwgdGhpcy5fYnJlYWtwb2ludEFkZGVkLCB0aGlzKTsKKwogICAg
ICAgICB0aGlzLl90ZXh0Vmlld2VyLmVuZFVwZGF0ZXMoKTsKLSAgICAgICAgaWYgKHRoaXMuX2Vk
aXREZWxlZ2F0ZSkKLSAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuZWRpdENhbGxiYWNrID0g
dGhpcy5fZWRpdERlbGVnYXRlOworCisgICAgICAgIGlmICh0aGlzLl9kZWxlZ2F0ZS5jYW5FZGl0
U2NyaXB0cygpKQorICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5lZGl0Q2FsbGJhY2sgPSB0
aGlzLl9lZGl0TGluZS5iaW5kKHRoaXMpOwogICAgIH0sCiAKICAgICBmaW5kU2VhcmNoTWF0Y2hl
czogZnVuY3Rpb24ocXVlcnkpCkBAIC00MjksMjMgKzQxMSwyNSBAQCBXZWJJbnNwZWN0b3IuU291
cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICBtc2cuX3Jlc291cmNlTWVzc2FnZUxpbmVF
bGVtZW50ID0gbWVzc2FnZUxpbmVFbGVtZW50OwogICAgIH0sCiAKLSAgICBfYWRkRXhpc3RpbmdC
cmVha3BvaW50c1RvU291cmNlOiBmdW5jdGlvbigpCisgICAgX2JyZWFrcG9pbnRBZGRlZDogZnVu
Y3Rpb24oZXZlbnQpCiAgICAgewotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYnJl
YWtwb2ludHMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0aGlzLl9hZGRCcmVha3BvaW50VG9T
b3VyY2UodGhpcy5icmVha3BvaW50c1tpXSk7CisgICAgICAgIHZhciBicmVha3BvaW50ID0gZXZl
bnQuZGF0YTsKKworICAgICAgICBpZiAodGhpcy5fc2hvdWxkRGlzcGxheUJyZWFrcG9pbnQoYnJl
YWtwb2ludCkpCisgICAgICAgICAgICB0aGlzLl9hZGRCcmVha3BvaW50KGJyZWFrcG9pbnQpOwog
ICAgIH0sCiAKLSAgICBfYWRkQnJlYWtwb2ludFRvU291cmNlOiBmdW5jdGlvbihicmVha3BvaW50
KQorICAgIF9hZGRCcmVha3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50KQogICAgIHsKLSAgICAg
ICAgYnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKCJlbmFibGUtY2hhbmdlZCIsIHRoaXMuX2Jy
ZWFrcG9pbnRDaGFuZ2VkLCB0aGlzKTsKLSAgICAgICAgYnJlYWtwb2ludC5hZGRFdmVudExpc3Rl
bmVyKCJjb25kaXRpb24tY2hhbmdlZCIsIHRoaXMuX2JyZWFrcG9pbnRDaGFuZ2VkLCB0aGlzKTsK
LQogICAgICAgICB2YXIgbGluZU51bWJlciA9IGJyZWFrcG9pbnQubGluZSAtIDE7CiAgICAgICAg
IGlmIChsaW5lTnVtYmVyID49IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50KQogICAgICAgICAg
ICAgcmV0dXJuOwogCi0gICAgICAgIHRoaXMuX3RleHRNb2RlbC5zZXRBdHRyaWJ1dGUobGluZU51
bWJlciwgImJyZWFrcG9pbnQiLCBicmVha3BvaW50KTsKLSAgICAgICAgYnJlYWtwb2ludC5zb3Vy
Y2VUZXh0ID0gdGhpcy5fdGV4dE1vZGVsLmxpbmUoYnJlYWtwb2ludC5saW5lIC0gMSk7CisgICAg
ICAgIGJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcigiZW5hYmxlLWNoYW5nZWQiLCB0aGlzLl9i
cmVha3BvaW50Q2hhbmdlZCwgdGhpcyk7CisgICAgICAgIGJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0
ZW5lcigiY29uZGl0aW9uLWNoYW5nZWQiLCB0aGlzLl9icmVha3BvaW50Q2hhbmdlZCwgdGhpcyk7
CisgICAgICAgIGJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVtb3ZlZCIsIHRoaXMuX2Jy
ZWFrcG9pbnRSZW1vdmVkLCB0aGlzKTsKKworICAgICAgICBicmVha3BvaW50LnNvdXJjZVRleHQg
PSB0aGlzLl90ZXh0TW9kZWwubGluZShsaW5lTnVtYmVyKTsKIAogICAgICAgICB0aGlzLl90ZXh0
Vmlld2VyLmJlZ2luVXBkYXRlcygpOwogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmFkZERlY29y
YXRpb24obGluZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50Iik7CkBAIC00NTYsMTQgKzQ0MCwx
NiBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICB0aGlz
Ll90ZXh0Vmlld2VyLmVuZFVwZGF0ZXMoKTsKICAgICB9LAogCi0gICAgX3JlbW92ZUJyZWFrcG9p
bnRGcm9tU291cmNlOiBmdW5jdGlvbihicmVha3BvaW50KQorICAgIF9icmVha3BvaW50UmVtb3Zl
ZDogZnVuY3Rpb24oZXZlbnQpCiAgICAgeworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50
LnRhcmdldDsKKwogICAgICAgICBicmVha3BvaW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImVuYWJs
ZS1jaGFuZ2VkIiwgbnVsbCwgdGhpcyk7CiAgICAgICAgIGJyZWFrcG9pbnQucmVtb3ZlRXZlbnRM
aXN0ZW5lcigiY29uZGl0aW9uLWNoYW5nZWQiLCBudWxsLCB0aGlzKTsKKyAgICAgICAgYnJlYWtw
b2ludC5yZW1vdmVFdmVudExpc3RlbmVyKCJyZW1vdmVkIiwgbnVsbCwgdGhpcyk7CiAKICAgICAg
ICAgdmFyIGxpbmVOdW1iZXIgPSBicmVha3BvaW50LmxpbmUgLSAxOwogICAgICAgICB0aGlzLl90
ZXh0Vmlld2VyLmJlZ2luVXBkYXRlcygpOwotICAgICAgICB0aGlzLl90ZXh0TW9kZWwucmVtb3Zl
QXR0cmlidXRlKGxpbmVOdW1iZXIsICJicmVha3BvaW50Iik7CiAgICAgICAgIHRoaXMuX3RleHRW
aWV3ZXIucmVtb3ZlRGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQiKTsK
ICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZW1vdmVEZWNvcmF0aW9uKGxpbmVOdW1iZXIsICJ3
ZWJraXQtYnJlYWtwb2ludC1kaXNhYmxlZCIpOwogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLnJl
bW92ZURlY29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50LWNvbmRpdGlvbmFs
Iik7CkBAIC00NzIsMjggKzQ1OCwyNyBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90
eXBlID0gewogCiAgICAgX2NvbnRleHRNZW51OiBmdW5jdGlvbihldmVudCkKICAgICB7Ci0gICAg
ICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFz
cygid2Via2l0LWxpbmUtbnVtYmVyIik7Ci0gICAgICAgIGlmICghdGFyZ2V0KQorICAgICAgICBp
ZiAoIVdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cykKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgdmFyIHJvdyA9IHRhcmdldC5wYXJlbnRFbGVtZW50OwogCi0gICAgICAgIGlmICghV2Vi
SW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzKQorICAgICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFy
Z2V0LmVuY2xvc2luZ05vZGVPclNlbGZXaXRoQ2xhc3MoIndlYmtpdC1saW5lLW51bWJlciIpOwor
ICAgICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdmFyIGxp
bmVOdW1iZXIgPSB0YXJnZXQucGFyZW50RWxlbWVudC5saW5lTnVtYmVyICsgMTsKIAotICAgICAg
ICB2YXIgbGluZU51bWJlciA9IHJvdy5saW5lTnVtYmVyOwogICAgICAgICB2YXIgY29udGV4dE1l
bnUgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnRleHRNZW51KCk7CiAKLSAgICAgICAgY29udGV4dE1l
bnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNvbnRpbnVlIHRvIEhlcmUiKSwg
dGhpcy5fY29udGludWVUb0hlcmVEZWxlZ2F0ZS5iaW5kKHRoaXMsIGxpbmVOdW1iZXIgKyAxKSk7
CisgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJD
b250aW51ZSB0byBIZXJlIiksIHRoaXMuX2NvbnRpbnVlVG9MaW5lLmJpbmQodGhpcywgbGluZU51
bWJlcikpOwogCi0gICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fdGV4dE1vZGVsLmdldEF0
dHJpYnV0ZShsaW5lTnVtYmVyLCAiYnJlYWtwb2ludCIpOworICAgICAgICB2YXIgYnJlYWtwb2lu
dCA9IHRoaXMuX2ZpbmRCcmVha3BvaW50KGxpbmVOdW1iZXIpOwogICAgICAgICBpZiAoIWJyZWFr
cG9pbnQpIHsKICAgICAgICAgICAgIC8vIFRoaXMgcm93IGRvZXNuJ3QgaGF2ZSBhIGJyZWFrcG9p
bnQ6IFdlIHdhbnQgdG8gc2hvdyBBZGQgQnJlYWtwb2ludCBhbmQgQWRkIGFuZCBFZGl0IEJyZWFr
cG9pbnQuCi0gICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5V
SVN0cmluZygiQWRkIEJyZWFrcG9pbnQiKSwgdGhpcy5fYWRkQnJlYWtwb2ludERlbGVnYXRlLmJp
bmQodGhpcywgbGluZU51bWJlciArIDEpKTsKKyAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVu
ZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJBZGQgQnJlYWtwb2ludCIpLCB0aGlzLl9zZXRC
cmVha3BvaW50LmJpbmQodGhpcywgbGluZU51bWJlcikpOwogCiAgICAgICAgICAgICBmdW5jdGlv
biBhZGRDb25kaXRpb25hbEJyZWFrcG9pbnQoKQogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHRoaXMuX2FkZEJyZWFrcG9pbnREZWxlZ2F0ZShsaW5lTnVtYmVyICsgMSk7Ci0gICAgICAg
ICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl90ZXh0TW9kZWwuZ2V0QXR0cmlidXRlKGxp
bmVOdW1iZXIsICJicmVha3BvaW50Iik7CisgICAgICAgICAgICAgICAgdGhpcy5fc2V0QnJlYWtw
b2ludChsaW5lTnVtYmVyKTsKKyAgICAgICAgICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMu
X2ZpbmRCcmVha3BvaW50KGxpbmVOdW1iZXIpOwogICAgICAgICAgICAgICAgIGlmIChicmVha3Bv
aW50KQogICAgICAgICAgICAgICAgICAgICB0aGlzLl9lZGl0QnJlYWtwb2ludENvbmRpdGlvbihi
cmVha3BvaW50KTsKICAgICAgICAgICAgIH0KQEAgLTUyNSwxOCArNTEwLDE2IEBAIFdlYkluc3Bl
Y3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciB0YXJnZXQgPSBldmVu
dC50YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcygid2Via2l0LWxpbmUtbnVtYmVy
Iik7CiAgICAgICAgIGlmICghdGFyZ2V0KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2
YXIgcm93ID0gdGFyZ2V0LnBhcmVudEVsZW1lbnQ7Ci0KLSAgICAgICAgdmFyIGxpbmVOdW1iZXIg
PSByb3cubGluZU51bWJlcjsKKyAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSB0YXJnZXQucGFyZW50
RWxlbWVudC5saW5lTnVtYmVyICsgMTsKIAotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMu
X3RleHRNb2RlbC5nZXRBdHRyaWJ1dGUobGluZU51bWJlciwgImJyZWFrcG9pbnQiKTsKKyAgICAg
ICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9maW5kQnJlYWtwb2ludChsaW5lTnVtYmVyKTsKICAg
ICAgICAgaWYgKGJyZWFrcG9pbnQpIHsKICAgICAgICAgICAgIGlmIChldmVudC5zaGlmdEtleSkK
ICAgICAgICAgICAgICAgICBicmVha3BvaW50LmVuYWJsZWQgPSAhYnJlYWtwb2ludC5lbmFibGVk
OwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQucmVtb3ZlKCk7
CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdGhpcy5fYWRkQnJlYWtwb2ludERlbGVnYXRl
KGxpbmVOdW1iZXIgKyAxKTsKKyAgICAgICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnQobGluZU51
bWJlcik7CiAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgfSwKIApAQCAtNzcz
LDggKzc1NiwxMjAgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAg
ICB7CiAgICAgICAgIGlmICh0aGlzLl90ZXh0Vmlld2VyKQogICAgICAgICAgICAgdGhpcy5fdGV4
dFZpZXdlci5yZXNpemUoKTsKKyAgICB9LAorCisgICAgX2NvbnRpbnVlVG9MaW5lOiBmdW5jdGlv
bihsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgdmFyIHNvdXJjZUlEID0gdGhpcy5fc291cmNl
SURGb3JMaW5lKGxpbmVOdW1iZXIpOworICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlw
dHMuY29udGludWVUb0xpbmUoc291cmNlSUQsIGxpbmVOdW1iZXIpOworICAgIH0sCisKKyAgICBf
ZWRpdExpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIG5ld0NvbnRlbnQsIGNhbmNlbEVkaXRpbmdD
YWxsYmFjaykKKyAgICB7CisgICAgICAgIGxpbmVOdW1iZXIgKz0gMTsKKworICAgICAgICB2YXIg
bGluZXMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90ZXh0TW9kZWwu
bGluZXNDb3VudDsgKytpKSB7CisgICAgICAgICAgICBpZiAoaSA9PT0gbGluZU51bWJlciAtIDEp
CisgICAgICAgICAgICAgICAgbGluZXMucHVzaChuZXdDb250ZW50KTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKHRoaXMuX3RleHRNb2RlbC5saW5lKGkpKTsK
KyAgICAgICAgfQorCisgICAgICAgIHZhciBlZGl0RGF0YSA9IHt9OworICAgICAgICBlZGl0RGF0
YS5zb3VyY2VJRCA9IHRoaXMuX3NvdXJjZUlERm9yTGluZShsaW5lTnVtYmVyKTsKKyAgICAgICAg
ZWRpdERhdGEuY29udGVudCA9IGxpbmVzLmpvaW4oIlxuIik7CisgICAgICAgIGVkaXREYXRhLmxp
bmUgPSBsaW5lTnVtYmVyOworICAgICAgICBlZGl0RGF0YS5saW5lc0NvdW50VG9TaGlmdCA9IG5l
d0NvbnRlbnQuc3BsaXQoIlxuIikubGVuZ3RoIC0gMTsKKyAgICAgICAgdGhpcy5fZG9FZGl0TGlu
ZShlZGl0RGF0YSwgY2FuY2VsRWRpdGluZ0NhbGxiYWNrKTsKKyAgICB9LAorCisgICAgX3JldmVy
dEVkaXRMaW5lOiBmdW5jdGlvbihlZGl0RGF0YSwgY29udGVudFRvUmV2ZXJ0VG8pCisgICAgewor
ICAgICAgICB2YXIgbmV3RWRpdERhdGEgPSB7fTsKKyAgICAgICAgbmV3RWRpdERhdGEuc291cmNl
SUQgPSBlZGl0RGF0YS5zb3VyY2VJRDsKKyAgICAgICAgbmV3RWRpdERhdGEuY29udGVudCA9IGNv
bnRlbnRUb1JldmVydFRvOworICAgICAgICBuZXdFZGl0RGF0YS5saW5lID0gZWRpdERhdGEubGlu
ZTsKKyAgICAgICAgbmV3RWRpdERhdGEubGluZXNDb3VudFRvU2hpZnQgPSAtZWRpdERhdGEubGlu
ZXNDb3VudFRvU2hpZnQ7CisgICAgICAgIHRoaXMuX2RvRWRpdExpbmUobmV3RWRpdERhdGEpOwor
ICAgIH0sCisKKyAgICBfZG9FZGl0TGluZTogZnVuY3Rpb24oZWRpdERhdGEsIGNhbmNlbEVkaXRp
bmdDYWxsYmFjaykKKyAgICB7CisgICAgICAgIHZhciByZXZlcnRFZGl0aW5nQ2FsbGJhY2sgPSB0
aGlzLl9yZXZlcnRFZGl0TGluZS5iaW5kKHRoaXMsIGVkaXREYXRhKTsKKyAgICAgICAgdmFyIGNv
bW1pdEVkaXRpbmdDYWxsYmFjayA9IHRoaXMuX2RlbGVnYXRlLmVkaXRMaW5lQ29tcGxldGUuYmlu
ZCh0aGlzLl9kZWxlZ2F0ZSwgcmV2ZXJ0RWRpdGluZ0NhbGxiYWNrKTsKKyAgICAgICAgV2ViSW5z
cGVjdG9yLnBhbmVscy5zY3JpcHRzLmVkaXRTY3JpcHRTb3VyY2UoZWRpdERhdGEsIGNvbW1pdEVk
aXRpbmdDYWxsYmFjaywgY2FuY2VsRWRpdGluZ0NhbGxiYWNrKTsKKyAgICB9LAorCisgICAgX3Nl
dEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgeworICAgICAgICB2YXIgc291
cmNlSUQgPSB0aGlzLl9zb3VyY2VJREZvckxpbmUobGluZU51bWJlcik7CisgICAgICAgIFdlYklu
c3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5zZXRCcmVha3BvaW50KHNvdXJjZUlELCB0aGlzLl91
cmwsIGxpbmVOdW1iZXIsIHRydWUsICIiKTsKKyAgICAgICAgaWYgKCFXZWJJbnNwZWN0b3IucGFu
ZWxzLnNjcmlwdHMuYnJlYWtwb2ludHNBY3RpdmF0ZWQpCisgICAgICAgICAgICBXZWJJbnNwZWN0
b3IucGFuZWxzLnNjcmlwdHMudG9nZ2xlQnJlYWtwb2ludHNDbGlja2VkKCk7CisgICAgfSwKKwor
ICAgIF9icmVha3BvaW50czogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIHNvdXJjZUlE
cyA9IHt9OworICAgICAgICB2YXIgc2NyaXB0cyA9IHRoaXMuX2RlbGVnYXRlLnNjcmlwdHMoKTsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgKytpKQorICAgICAg
ICAgICAgc291cmNlSURzW3NjcmlwdHNbaV0uc291cmNlSURdID0gdHJ1ZTsKKyAgICAgICAgZnVu
Y3Rpb24gZmlsdGVyKGJyZWFrcG9pbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBi
cmVha3BvaW50LnNvdXJjZUlEIGluIHNvdXJjZUlEczsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLmZpbmRCcmVha3BvaW50cyhmaWx0ZXIp
OworICAgIH0sCisKKyAgICBfZmluZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisg
ICAgeworICAgICAgICB2YXIgc291cmNlSUQgPSB0aGlzLl9zb3VyY2VJREZvckxpbmUobGluZU51
bWJlcik7CisgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuZmlu
ZEJyZWFrcG9pbnQoc291cmNlSUQsIGxpbmVOdW1iZXIpOworICAgIH0sCisKKyAgICBfc2hvdWxk
RGlzcGxheUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisgICAgeworICAgICAgICB2
YXIgc2NyaXB0cyA9IHRoaXMuX2RlbGVnYXRlLnNjcmlwdHMoKTsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoYnJlYWtw
b2ludC5zb3VyY2VJRCA9PT0gc2NyaXB0c1tpXS5zb3VyY2VJRCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSwKKwor
ICAgIF9zb3VyY2VJREZvckxpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgeworICAgICAg
ICB2YXIgc291cmNlSUQgPSBudWxsOworICAgICAgICB2YXIgc2NyaXB0cyA9IHRoaXMuX2RlbGVn
YXRlLnNjcmlwdHMoKTsKKyAgICAgICAgdmFyIGNsb3Nlc3RTdGFydGluZ0xpbmUgPSAwOworICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjcmlwdHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
ICAgIHZhciBzY3JpcHQgPSBzY3JpcHRzW2ldOworICAgICAgICAgICAgaWYgKHNjcmlwdC5zdGFy
dGluZ0xpbmUgPD0gbGluZU51bWJlciAmJiBzY3JpcHQuc3RhcnRpbmdMaW5lID49IGNsb3Nlc3RT
dGFydGluZ0xpbmUpIHsKKyAgICAgICAgICAgICAgICBjbG9zZXN0U3RhcnRpbmdMaW5lID0gc2Ny
aXB0LnN0YXJ0aW5nTGluZTsKKyAgICAgICAgICAgICAgICBzb3VyY2VJRCA9IHNjcmlwdC5zb3Vy
Y2VJRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc291cmNlSUQ7
CiAgICAgfQogfQogCi0KIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX19wcm90
b19fID0gV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGU7CisKK1dlYkluc3BlY3Rvci5Tb3Vy
Y2VGcmFtZURlbGVnYXRlID0gZnVuY3Rpb24oKQoreworfQorCitXZWJJbnNwZWN0b3IuU291cmNl
RnJhbWVEZWxlZ2F0ZS5wcm90b3R5cGUgPSB7CisgICAgY2FuRWRpdFNjcmlwdHM6IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgfSwKKworICAgIGVkaXRMaW5lQ29tcGxldGU6IGZ1bmN0aW9uKHJldmVy
dEVkaXRMaW5lQ2FsbGJhY2ssIG5ld0NvbnRlbnQpCisgICAgeworICAgIH0sCisKKyAgICBzY3Jp
cHRzOiBmdW5jdGlvbigpCisgICAgeworICAgIH0KK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VWaWV3LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1NvdXJjZVZpZXcuanMKaW5kZXggOTYxNjMyMS4uZjY0Nzc4ZSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZVZpZXcuanMKKysrIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1NvdXJjZVZpZXcuanMKQEAgLTMyLDggKzMyLDggQEAgV2ViSW5zcGVj
dG9yLlNvdXJjZVZpZXcgPSBmdW5jdGlvbihyZXNvdXJjZSkKIAogICAgIHRoaXMuZWxlbWVudC5h
ZGRTdHlsZUNsYXNzKCJzb3VyY2UiKTsKIAotICAgIHZhciBjYW5FZGl0U2NyaXB0cyA9IFdlYklu
c3BlY3Rvci5wYW5lbHMuc2NyaXB0cyAmJiBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMuY2Fu
RWRpdFNjcmlwdHMoKSAmJiByZXNvdXJjZS50eXBlID09PSBXZWJJbnNwZWN0b3IuUmVzb3VyY2Uu
VHlwZS5TY3JpcHQ7Ci0gICAgdGhpcy5zb3VyY2VGcmFtZSA9IG5ldyBXZWJJbnNwZWN0b3IuU291
cmNlRnJhbWUodGhpcy5lbGVtZW50LCB0aGlzLl9hZGRCcmVha3BvaW50LmJpbmQodGhpcyksIGNh
bkVkaXRTY3JpcHRzID8gdGhpcy5fZWRpdExpbmUuYmluZCh0aGlzKSA6IG51bGwsIHRoaXMuX2Nv
bnRpbnVlVG9MaW5lLmJpbmQodGhpcykpOworICAgIHZhciBkZWxlZ2F0ZSA9IG5ldyBXZWJJbnNw
ZWN0b3IuUmVzb3VyY2VGcmFtZURlbGVnYXRlKHRoaXMucmVzb3VyY2UpOworICAgIHRoaXMuc291
cmNlRnJhbWUgPSBuZXcgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lKHRoaXMuZWxlbWVudCwgZGVs
ZWdhdGUpOwogICAgIHJlc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoImZpbmlzaGVkIiwgdGhpcy5f
cmVzb3VyY2VMb2FkaW5nRmluaXNoZWQsIHRoaXMpOwogICAgIHRoaXMuX2ZyYW1lTmVlZHNTZXR1
cCA9IHRydWU7CiB9CkBAIC0xMDAsOSArMTAwLDYgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcu
cHJvdG90eXBlID0gewogICAgICAgICB2YXIgbWltZVR5cGUgPSB0aGlzLl9jYW5vbmljYWxNaW1l
VHlwZSh0aGlzLnJlc291cmNlKTsKICAgICAgICAgdGhpcy5zb3VyY2VGcmFtZS5zZXRDb250ZW50
KG1pbWVUeXBlLCBjb250ZW50LCB0aGlzLnJlc291cmNlLnVybCk7CiAgICAgICAgIHRoaXMuX3Nv
dXJjZUZyYW1lU2V0dXBGaW5pc2hlZCgpOwotICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSBXZWJJ
bnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuYnJlYWtwb2ludHNGb3JVUkwodGhpcy5yZXNvdXJj
ZS51cmwpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJyZWFrcG9pbnRzLmxlbmd0aDsg
KytpKQotICAgICAgICAgICAgdGhpcy5zb3VyY2VGcmFtZS5hZGRCcmVha3BvaW50KGJyZWFrcG9p
bnRzW2ldKTsKICAgICB9LAogCiAgICAgX2Nhbm9uaWNhbE1pbWVUeXBlOiBmdW5jdGlvbihyZXNv
dXJjZSkKQEAgLTExOSw3MyArMTE2LDYgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcucHJvdG90
eXBlID0gewogICAgICAgICB0aGlzLnJlc291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImZpbmlz
aGVkIiwgdGhpcy5fcmVzb3VyY2VMb2FkaW5nRmluaXNoZWQsIHRoaXMpOwogICAgIH0sCiAKLSAg
ICBfY29udGludWVUb0xpbmU6IGZ1bmN0aW9uKGxpbmUpCi0gICAgewotICAgICAgICB2YXIgc2Ny
aXB0c1BhbmVsID0gV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzOwotICAgICAgICBpZiAoc2Ny
aXB0c1BhbmVsKSB7Ci0gICAgICAgICAgICB2YXIgc291cmNlSUQgPSB0aGlzLl9zb3VyY2VJREZv
ckxpbmUobGluZSk7Ci0gICAgICAgICAgICBzY3JpcHRzUGFuZWwuY29udGludWVUb0xpbmUoc291
cmNlSUQsIGxpbmUpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9hZGRCcmVha3BvaW50OiBm
dW5jdGlvbihsaW5lKQotICAgIHsKLSAgICAgICAgdmFyIHNvdXJjZUlEID0gdGhpcy5fc291cmNl
SURGb3JMaW5lKGxpbmUpOwotICAgICAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIu
c2V0QnJlYWtwb2ludChzb3VyY2VJRCwgdGhpcy5yZXNvdXJjZS51cmwsIGxpbmUsIHRydWUsICIi
KTsKLSAgICAgICAgaWYgKCFXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMuYnJlYWtwb2ludHNB
Y3RpdmF0ZWQpCi0gICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMudG9nZ2xl
QnJlYWtwb2ludHNDbGlja2VkKCk7Ci0gICAgfSwKLQotICAgIF9lZGl0TGluZTogZnVuY3Rpb24o
bGluZSwgbmV3Q29udGVudCwgY2FuY2VsRWRpdGluZ0NhbGxiYWNrKQotICAgIHsKLSAgICAgICAg
dmFyIGxpbmVzID0gW107Ci0gICAgICAgIHZhciB0ZXh0TW9kZWwgPSB0aGlzLnNvdXJjZUZyYW1l
LnRleHRNb2RlbDsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0TW9kZWwubGluZXND
b3VudDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoaSA9PT0gbGluZSkKLSAgICAgICAgICAgICAg
ICBsaW5lcy5wdXNoKG5ld0NvbnRlbnQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIGxpbmVzLnB1c2godGV4dE1vZGVsLmxpbmUoaSkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
dmFyIGVkaXREYXRhID0ge307Ci0gICAgICAgIGVkaXREYXRhLnNvdXJjZUlEID0gdGhpcy5fc291
cmNlSURGb3JMaW5lKGxpbmUpOwotICAgICAgICBlZGl0RGF0YS5jb250ZW50ID0gbGluZXMuam9p
bigiXG4iKTsKLSAgICAgICAgZWRpdERhdGEubGluZSA9IGxpbmU7Ci0gICAgICAgIGVkaXREYXRh
LmxpbmVzQ291bnRUb1NoaWZ0ID0gbmV3Q29udGVudC5zcGxpdCgiXG4iKS5sZW5ndGggLSAxOwot
Ci0gICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5lZGl0U2NyaXB0U291cmNlKGVk
aXREYXRhLCB0aGlzLl9lZGl0TGluZUNvbXBsZXRlLmJpbmQodGhpcywgZWRpdERhdGEpLCBjYW5j
ZWxFZGl0aW5nQ2FsbGJhY2spOwotICAgIH0sCi0KLSAgICBfZWRpdExpbmVDb21wbGV0ZTogZnVu
Y3Rpb24oZWRpdERhdGEsIG5ld0NvbnRlbnQpCi0gICAgewotICAgICAgICB0aGlzLnJlc291cmNl
LnNldENvbnRlbnQobmV3Q29udGVudCwgdGhpcy5fcmV2ZXJ0RWRpdExpbmUuYmluZCh0aGlzLCBl
ZGl0RGF0YSkpOwotICAgIH0sCi0KLSAgICBfcmV2ZXJ0RWRpdExpbmU6IGZ1bmN0aW9uKGVkaXRE
YXRhLCBjb250ZW50VG9SZXZlcnRUbykKLSAgICB7Ci0gICAgICAgIHZhciBuZXdFZGl0RGF0YSA9
IHt9OwotICAgICAgICBuZXdFZGl0RGF0YS5zb3VyY2VJRCA9IGVkaXREYXRhLnNvdXJjZUlEOwot
ICAgICAgICBuZXdFZGl0RGF0YS5jb250ZW50ID0gZWRpdERhdGEuY29udGVudDsKLSAgICAgICAg
bmV3RWRpdERhdGEubGluZSA9IGVkaXREYXRhLmxpbmU7Ci0gICAgICAgIG5ld0VkaXREYXRhLmxp
bmVzQ291bnRUb1NoaWZ0ID0gLWVkaXREYXRhLmxpbmVzQ291bnRUb1NoaWZ0OwotICAgICAgICBX
ZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMuZWRpdFNjcmlwdFNvdXJjZShuZXdFZGl0RGF0YSwg
dGhpcy5fZWRpdExpbmVDb21wbGV0ZS5iaW5kKHRoaXMsIG5ld0VkaXREYXRhKSk7Ci0gICAgfSwK
LQotICAgIF9zb3VyY2VJREZvckxpbmU6IGZ1bmN0aW9uKGxpbmUpCi0gICAgewotICAgICAgICB2
YXIgc291cmNlSUQgPSBudWxsOwotICAgICAgICB2YXIgY2xvc2VzdFN0YXJ0aW5nTGluZSA9IDA7
Ci0gICAgICAgIHZhciBzY3JpcHRzID0gdGhpcy5yZXNvdXJjZS5zY3JpcHRzOwotICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHNjcmlwdHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZh
ciBzY3JpcHQgPSBzY3JpcHRzW2ldOwotICAgICAgICAgICAgaWYgKHNjcmlwdC5zdGFydGluZ0xp
bmUgPD0gbGluZSAmJiBzY3JpcHQuc3RhcnRpbmdMaW5lID49IGNsb3Nlc3RTdGFydGluZ0xpbmUp
IHsKLSAgICAgICAgICAgICAgICBjbG9zZXN0U3RhcnRpbmdMaW5lID0gc2NyaXB0LnN0YXJ0aW5n
TGluZTsKLSAgICAgICAgICAgICAgICBzb3VyY2VJRCA9IHNjcmlwdC5zb3VyY2VJRDsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gc291cmNlSUQ7Ci0gICAgfSwKLQog
ICAgIC8vIFRoZSByZXN0IG9mIHRoZSBtZXRob2RzIGluIHRoaXMgcHJvdG90eXBlIG5lZWQgdG8g
YmUgZ2VuZXJpYyBlbm91Z2ggdG8gd29yayB3aXRoIGEgU2NyaXB0Vmlldy4KICAgICAvLyBUaGUg
U2NyaXB0VmlldyBwcm90b3R5cGUgcHVsbHMgdGhlc2UgbWV0aG9kcyBpbnRvIGl0J3MgcHJvdG90
eXBlIHRvIGF2b2lkIGR1cGxpY2F0ZSBjb2RlLgogCkBAIC0zMDgsMyArMjM4LDI4IEBAIFdlYklu
c3BlY3Rvci5Tb3VyY2VWaWV3LnByb3RvdHlwZSA9IHsKIH0KIAogV2ViSW5zcGVjdG9yLlNvdXJj
ZVZpZXcucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5SZXNvdXJjZVZpZXcucHJv
dG90eXBlOworCitXZWJJbnNwZWN0b3IuUmVzb3VyY2VGcmFtZURlbGVnYXRlID0gZnVuY3Rpb24o
cmVzb3VyY2UpCit7CisgICAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lRGVsZWdhdGUuY2FsbCh0
aGlzKTsKKyAgICB0aGlzLl9yZXNvdXJjZSA9IHJlc291cmNlOworfQorCitXZWJJbnNwZWN0b3Iu
UmVzb3VyY2VGcmFtZURlbGVnYXRlLnByb3RvdHlwZSA9IHsKKyAgICBjYW5FZGl0U2NyaXB0czog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5wYW5lbHMuc2Ny
aXB0cy5jYW5FZGl0U2NyaXB0cygpICYmIHRoaXMuX3Jlc291cmNlLnR5cGUgPT09IFdlYkluc3Bl
Y3Rvci5SZXNvdXJjZS5UeXBlLlNjcmlwdDsKKyAgICB9LAorCisgICAgZWRpdExpbmVDb21wbGV0
ZTogZnVuY3Rpb24ocmV2ZXJ0RWRpdExpbmVDYWxsYmFjaywgbmV3Q29udGVudCkKKyAgICB7Cisg
ICAgICAgIHRoaXMuX3Jlc291cmNlLnNldENvbnRlbnQobmV3Q29udGVudCwgcmV2ZXJ0RWRpdExp
bmVDYWxsYmFjayk7CisgICAgfSwKKworICAgIHNjcmlwdHM6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZS5zY3JpcHRzOworICAgIH0KK30KKworV2ViSW5z
cGVjdG9yLlJlc291cmNlRnJhbWVEZWxlZ2F0ZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5z
cGVjdG9yLlNvdXJjZUZyYW1lRGVsZWdhdGUucHJvdG90eXBlOwo=
</data>
<flag name="review"
          id="66661"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>