<?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>118896</bug_id>
          
          <creation_ts>2013-07-19 03:52:56 -0700</creation_ts>
          <short_desc>Web Inspector: support click-and-drag editing of CSS numeric values</short_desc>
          <delta_ts>2013-07-24 11:12:50 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antoine Quint">graouts</reporter>
          <assigned_to name="Antoine Quint">graouts</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>910080</commentid>
    <comment_count>0</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2013-07-19 03:52:56 -0700</bug_when>
    <thetext>We should support click-and-drag editing of CSS numeric values which Adobe apps support and Bret Victor&apos;s Tangle library supports too (https://github.com/worrydream/Tangle).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910081</commentid>
    <comment_count>1</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2013-07-19 03:53:04 -0700</bug_when>
    <thetext>&lt;rdar://problem/13993923&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911056</commentid>
    <comment_count>2</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2013-07-23 09:02:30 -0700</bug_when>
    <thetext>Made very good progress on this, I should have a fix ready for review soon.

However, there is an issue with the handling of the Command key since jump-to-definition also acts on Cmd+click to highlight tokens and jump to the definition on click. Should we just override the whole jump-to-definition behaviour when the token is a number in favour of click-and-drag editing? Or we should use an alternate key modifier system? Or is there a better way yet?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911058</commentid>
    <comment_count>3</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2013-07-23 09:12:35 -0700</bug_when>
    <thetext>I think it is possible for command-click on a number to take you somewhere different compared to command clicking the property or even another adjacent value of the same property when complex SASS is involved. Right Joe?

It could be the option key, since that is the key used in conjunction with the arrow keys.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911088</commentid>
    <comment_count>4</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2013-07-23 11:09:16 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; It could be the option key, since that is the key used in conjunction with the arrow keys.

Option key also has the role of incrementing by .1 rather 1, and shift by 10. We could use the control key?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911094</commentid>
    <comment_count>5</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2013-07-23 11:20:38 -0700</bug_when>
    <thetext>I think we may also need a way to change the cursor outside of the inspector window as well so that while you&apos;re dragging to adjust the value, the cursor remains &quot;col-resize&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911099</commentid>
    <comment_count>6</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2013-07-23 11:29:20 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; It could be the option key, since that is the key used in conjunction with the arrow keys.
&gt; 
&gt; Option key also has the role of incrementing by .1 rather 1, and shift by 10. We could use the control key?

The shortcuts should match the modifiers used by the arrow keys. Right now option-arrow is increment by one (except when near zero). So that shouldn&apos;t change to 0.1. Option-shift-arrow is 10. If you want 0.1 separate, then that would be a better candidate for control-arrow or option-control-arrow (thick conflicts with a system wide zoom accessibility shortcut).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911101</commentid>
    <comment_count>7</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2013-07-23 11:33:18 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; I think we may also need a way to change the cursor outside of the inspector window as well so that while you&apos;re dragging to adjust the value, the cursor remains &quot;col-resize&quot;.

WebInspector.elementDragStart handles this by adding a a top level element that covers the whole inspector. We can break that out into a reusable piece (and rename it to something other than glass pane…).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911102</commentid>
    <comment_count>8</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-07-23 11:41:05 -0700</bug_when>
    <thetext>Possible idea: make different dragging adjustment rates matching the keyboard arrow adjustments

  Option Drag       = default behavior, change value by 1 per pixel, and maybe also 0.1 when near -1..1
  Shift+Option Drag = change value by 10 per pixel, for wide adjustments (you can toggle shift on/off while dragging. Too crazy?)
  ???+Option Drag   = change value by 0.1 per pixel, for fine grained adjustment (maybe not Ctrl, since that could trigger a right click on OS X)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911107</commentid>
    <comment_count>9</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2013-07-23 11:48:24 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Possible idea: make different dragging adjustment rates matching the keyboard arrow adjustments
&gt; 
&gt;   Option Drag       = default behavior, change value by 1 per pixel, and maybe also 0.1 when near -1..1
&gt;   Shift+Option Drag = change value by 10 per pixel, for wide adjustments (you can toggle shift on/off while dragging. Too crazy?)
&gt;   ???+Option Drag   = change value by 0.1 per pixel, for fine grained adjustment (maybe not Ctrl, since that could trigger a right click on OS X)

That is what I was getting at. Make the modifiers match what we use for the arrow keys, except dragging instead of arrow keys. And add a new modifier for explicit 0.1.

I think allowing you to change modifiers mid-drag makes sense and should be supported.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911231</commentid>
    <comment_count>10</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2013-07-23 23:52:14 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #5)
&gt; &gt; I think we may also need a way to change the cursor outside of the inspector window as well so that while you&apos;re dragging to adjust the value, the cursor remains &quot;col-resize&quot;.
&gt; 
&gt; WebInspector.elementDragStart handles this by adding a a top level element that covers the whole inspector. We can break that out into a reusable piece (and rename it to something other than glass pane…).

Hmm, would that set the cursor outside of the window as well?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911232</commentid>
    <comment_count>11</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2013-07-23 23:53:37 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; Possible idea: make different dragging adjustment rates matching the keyboard arrow adjustments
&gt; &gt; 
&gt; &gt;   Option Drag       = default behavior, change value by 1 per pixel, and maybe also 0.1 when near -1..1
&gt; &gt;   Shift+Option Drag = change value by 10 per pixel, for wide adjustments (you can toggle shift on/off while dragging. Too crazy?)
&gt; &gt;   ???+Option Drag   = change value by 0.1 per pixel, for fine grained adjustment (maybe not Ctrl, since that could trigger a right click on OS X)
&gt; 
&gt; That is what I was getting at. Make the modifiers match what we use for the arrow keys, except dragging instead of arrow keys. And add a new modifier for explicit 0.1.
&gt; 
&gt; I think allowing you to change modifiers mid-drag makes sense and should be supported.

Yes, that&apos;s what I have working now, it&apos;s not a problem. Maybe Cmd+Option+Drag for the 0.1 change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911281</commentid>
    <comment_count>12</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2013-07-24 06:09:23 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #7)
&gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; I think we may also need a way to change the cursor outside of the inspector window as well so that while you&apos;re dragging to adjust the value, the cursor remains &quot;col-resize&quot;.
&gt; &gt; 
&gt; &gt; WebInspector.elementDragStart handles this by adding a a top level element that covers the whole inspector. We can break that out into a reusable piece (and rename it to something other than glass pane…).
&gt; 
&gt; Hmm, would that set the cursor outside of the window as well?

Oh, I didn&apos;t catch the &quot;outside the window part&quot;. No, it wouldn&apos;t. We would need to add InspectorFrontendHost or WebCore API for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911285</commentid>
    <comment_count>13</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2013-07-24 06:18:54 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #10)
&gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; &gt; I think we may also need a way to change the cursor outside of the inspector window as well so that while you&apos;re dragging to adjust the value, the cursor remains &quot;col-resize&quot;.
&gt; &gt; &gt; 
&gt; &gt; &gt; WebInspector.elementDragStart handles this by adding a a top level element that covers the whole inspector. We can break that out into a reusable piece (and rename it to something other than glass pane…).
&gt; &gt; 
&gt; &gt; Hmm, would that set the cursor outside of the window as well?
&gt; 
&gt; Oh, I didn&apos;t catch the &quot;outside the window part&quot;. No, it wouldn&apos;t. We would need to add InspectorFrontendHost or WebCore API for that.

We can deal with that as a followup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911289</commentid>
    <comment_count>14</comment_count>
      <attachid>207392</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2013-07-24 06:52:09 -0700</bug_when>
    <thetext>Created attachment 207392
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911293</commentid>
    <comment_count>15</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2013-07-24 06:57:37 -0700</bug_when>
    <thetext>&gt; &gt; Oh, I didn&apos;t catch the &quot;outside the window part&quot;. No, it wouldn&apos;t. We would need to add InspectorFrontendHost or WebCore API for that.
&gt; 
&gt; We can deal with that as a followup.

Follow up is https://bugs.webkit.org/show_bug.cgi?id=119045.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911296</commentid>
    <comment_count>16</comment_count>
      <attachid>207392</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2013-07-24 07:29:03 -0700</bug_when>
    <thetext>Comment on attachment 207392
Patch

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

r- for now. Looking good!

&gt; Source/WebInspectorUI/UserInterface/CodeMirrorAdditions.js:289
&gt; +        var foundNumber = WebInspector.alterNumberInRange(amount, codeMirror, startPosition, endPosition, true);

This is a layering violation, since this file is meant to be standalone from the Inspector (if anyone else ever wanted to use it or merge things back to CodeMirror.)

You should keep alterNumberInRange in this file and use CodeMirror.defineExtension to add it to CodeMirror instances. Then the codeMirror parameter would be removed, and you would use &apos;this&apos; for the CM instance.

&gt; Source/WebInspectorUI/UserInterface/CodeMirrorAdditions.js:340
&gt; +    CodeMirror.defineOption(&quot;dragToAdjustNumbers&quot;, false, function(codeMirror, value, oldValue) {
&gt; +        if (!codeMirror.dragToAdjustController)
&gt; +            codeMirror.dragToAdjustController = new WebInspector.DragToAdjustController(codeMirror);
&gt; +        codeMirror.dragToAdjustController.enabled = value;
&gt; +    });

This should live in DragToAdjustController.js like the other add-on options, they all self-define. You could also define it as default true, so you don&apos;t need to touch all instances and we won&apos;t forget it if we add more later.

&gt; Source/WebInspectorUI/UserInterface/CodeMirrorAdditions.js:355
&gt; +WebInspector.alterNumberInRange = function(amount, codeMirror, startPosition, endPosition, affectsSelection)

See previous comment.

&gt; Source/WebInspectorUI/UserInterface/CodeMirrorOverrides.css:87
&gt; +.CodeMirror.drag-to-adjust .CodeMirror-lines {
&gt; +    cursor: col-resize;
&gt; +}

This should be in a DragToAdjustController.css file to be better associated with the class. CodeMirrorOverrides.css is only meant to correct/override some of the default CodeMirror styles to better match our platform.

&gt; Source/WebInspectorUI/UserInterface/ConsolePrompt.js:42
&gt; +        dragToAdjustNumbers: true

See comment about making this the default so you don&apos;t need to do this everywhere.

&gt; Source/WebInspectorUI/UserInterface/DragToAdjustController.js:26
&gt; +WebInspector.DragToAdjustController = function(codeMirror)

I feel the name DragToAdjustController is too generic. We also try to put CodeMirror in the name for these, since they are deeply integrated with CodeMirror and not a higher level.

I would suggest CodeMirrorDragToAlterNumberController or CodeMirrorAlterNumberController if you want to move the rest of the alter number code into this one file, and all under the option.

&gt; Source/WebInspectorUI/UserInterface/DragToAdjustController.js:40
&gt; +    set active(active)

I am torn about having just setters that look like they are public (no underscore). I would prefer them to be underscored, but then that conflicts with the internal property names. Could these just be private methods since there is no getter (even if it makes the call sites uglier)? Or switch the internal properties to double underscore prefixes and have the setters have a single underscore?

You should add a // Private comment too to separate the methods.

&gt; Source/WebInspectorUI/UserInterface/DragToAdjustController.js:49
&gt; +        }
&gt; +        else {

One line.

&gt; Source/WebInspectorUI/UserInterface/DragToAdjustController.js:67
&gt; +            WebInspector.elementDragEnd(window.event);

You should assert window.event somewhere. Or add event as a parameter if this becomes a private method.

&gt; Source/WebInspectorUI/UserInterface/DragToAdjustController.js:84
&gt; +            this._element.addEventListener(&quot;mouseenter&quot;, this, false);
&gt; +            this._element.addEventListener(&quot;mouseleave&quot;, this, false);
&gt; +        } else {
&gt; +            this._element.removeEventListener(&quot;mouseenter&quot;, this, false);
&gt; +            this._element.removeEventListener(&quot;mouseleave&quot;, this, false);

We don&apos;t include the optional capture parameter if it is false.

&gt; Source/WebInspectorUI/UserInterface/DragToAdjustController.js:110
&gt; +    handleEvent: function(event)

I would put this above the private methods in a &quot;protected section&quot; labeled with a // Protected comment.

&gt; Source/WebInspectorUI/UserInterface/DragToAdjustController.js:152
&gt; +        if (this._hoveredTokenInfo &amp;&amp;
&gt; +            this._hoveredTokenInfo.line === position.line &amp;&amp;
&gt; +            this._hoveredTokenInfo.token.start === token.start &amp;&amp;
&gt; +            this._hoveredTokenInfo.token.end === token.end)
&gt; +            return;

Excessive wrapping. Could be two lines:

if (this._hoveredTokenInfo &amp;&amp; this._hoveredTokenInfo.line === position.line &amp;&amp;
    this._hoveredTokenInfo.token.start === token.start &amp;&amp; this._hoveredTokenInfo.token.end === token.end)

&gt; Source/WebInspectorUI/UserInterface/DragToAdjustController.js:154
&gt; +        var containsNumber = token.type.indexOf(&quot;number&quot;) !== -1;

This works, but it also differs from the arrow key alter number logic. This way makes more sense, but it still has the issue of &lt;rdar://problem/13877085&gt; where up/down (and now drag) over the unit does not work. We should fix and consolidate the logic for both when we fix &lt;rdar://problem/13877085&gt;.

&gt; Source/WebInspectorUI/UserInterface/DragToAdjustController.js:192
&gt; +        if (event.metaKey)

I think control would be better than command, it is closer in the key cluster of option, shift and control. Command also seems more sacred… *waves hands*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911301</commentid>
    <comment_count>17</comment_count>
      <attachid>207394</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2013-07-24 07:54:55 -0700</bug_when>
    <thetext>Created attachment 207394
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911302</commentid>
    <comment_count>18</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2013-07-24 07:55:25 -0700</bug_when>
    <thetext>New patch deals with all of Tim&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911324</commentid>
    <comment_count>19</comment_count>
      <attachid>207394</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-07-24 09:06:29 -0700</bug_when>
    <thetext>Comment on attachment 207394
Patch

Clearing flags on attachment: 207394

Committed r153087: &lt;http://trac.webkit.org/changeset/153087&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911325</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-07-24 09:06:32 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911354</commentid>
    <comment_count>21</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2013-07-24 10:34:08 -0700</bug_when>
    <thetext>Followup bug: https://bugs.webkit.org/show_bug.cgi?id=119048.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911368</commentid>
    <comment_count>22</comment_count>
      <attachid>207394</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-07-24 11:12:50 -0700</bug_when>
    <thetext>Comment on attachment 207394
Patch

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

Nice!

&gt; Source/WebInspectorUI/UserInterface/CodeMirrorDragToAlterNumberController.js:95
&gt; +        if (active) {
&gt; +            WebInspector.notifications.addEventListener(WebInspector.Notification.GlobalModifierKeysDidChange, this._modifiersDidChange, this);
&gt; +            this._element.addEventListener(&quot;mousemove&quot;, this);

By only starting to listen to mousemove and  modifier changes on &quot;mouseenter&quot; you&apos;ll miss any modifiers / hovered token the initial moment the mouse enters. I see currently the code updates this on mousemove, but right on &quot;mouseenter&quot; if you don&apos;t move the mouse the state could be wrong. Maybe this could affect a number right on the edge of an editor area. Maybe that is too obscure or doesn&apos;t even repro.

&gt; Source/WebInspectorUI/UserInterface/Main.html:143
&gt; +    &lt;script src=&quot;CodeMirrorDragToAlterNumberController.js&quot;&gt;&lt;/script&gt;

Why not put this down with the other CodeMirror*Controller files?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207392</attachid>
            <date>2013-07-24 06:52:09 -0700</date>
            <delta_ts>2013-07-24 07:54:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-118896-20130724155207.patch</filename>
            <type>text/plain</type>
            <size>27610</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUyODg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCA3
YmIyNGI5YmMyZTYyZTQ1ZDNhMzc2MDY2NzRiMTlhY2I2YTQwMjkxLi5jMTIxY2JlNjJiZTRjZTYx
YzIzZjFkM2Y5Yjg3ZGYxOWMxMWY5ODk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTIgQEAKKzIwMTMtMDctMjQgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNv
bT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBzdXBwb3J0IGNsaWNrLWFuZC1kcmFnIGVkaXRp
bmcgb2YgQ1NTIG51bWVyaWMgdmFsdWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTg4OTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgYWRqdXN0bWVudCBvZiBudW1lcmljIHZh
bHVlcyBpbiB0aGUgdmFyaW91cyBDb2RlTWlycm9yIGVkaXRvcnMKKyAgICAgICAgYnkgaG9sZGlu
ZyB0aGUgb3B0aW9uIGtleSBhbmQgZHJhZ2dpbmcgdGhlIG1vdXNlLiBCeSBkZWZhdWx0LCBkcmFn
Z2luZyBvbmUgcGl4ZWwKKyAgICAgICAgY2hhbmdlcyB0aGUgdmFsdWUgYnkgMSwgYnV0IGtleSBt
b2RpZmllcnMgYWxsb3cgdG8gY3VzdG9taXplIHRoYXQgYmVoYXZpb3IgYnkgdXNpbmcKKyAgICAg
ICAgdGhlIGNvbW1hbmQga2V5IHRvIGNoYW5nZSB0aGUgdmFsdWUgdG8gMC4xIGFuZCB0aGUgc2hp
ZnQga2V5IHRvIGNoYW5nZSB0aGUgdmFsdWUgdG8gMTAuCisgICAgICAgICAgCisgICAgICAgICog
VXNlckludGVyZmFjZS9DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5qczoKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvcik6CisgICAgICAgIFR1
cm4gb24gdGhlIG5ldyAiZHJhZ1RvQWRqdXN0TnVtYmVycyIgQ29kZU1pcnJvciBvcHRpb24uCisK
KyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvZGVNaXJyb3JBZGRpdGlvbnMuanM6CisgICAgICAg
IFNwbGl0IGFkanVzdE51bWJlcigpIGludG8gdHdvIG1ldGhvZHMgc3VjaCB0aGF0IHdlIG1heSB1
c2UgaXRzIGxvZ2ljIGZyb20gdGhlCisgICAgICAgIERyYWdUb0FkanVzdENvbnRyb2xsZXIuIFRo
ZSBuZXcgbWV0aG9kLCBXZWJJbnNwZWN0b3IuYWx0ZXJOdW1iZXJJblJhbmdlKCkgYWxsb3cKKyAg
ICAgICAgdG8gc2V0IGJlZ2luIGFuZCBlbmQgQ29kZU1pcnJvciBwb3NpdGlvbnMgc3VjaCB0aGF0
IHRoZSBleGlzdGluZyBhbHRlck51bWJlcigpCisgICAgICAgIGNhbiB1c2UgaW5mb3JtYXRpb24g
YmFzZWQgb24gdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uLCBhbmQgRHJhZ1RvQWRqdXN0Q29u
dHJvbGxlcgorICAgICAgICBjYW4gdXNlIGluZm9ybWF0aW9uIGJhc2VkIG9uIHRoZSBob3ZlcmVk
IHRva2VuLgorCisgICAgICAgIFdlIGFsc28gZGVmaW5lIHRoZSBuZXcgImRyYWdUb0FkanVzdE51
bWJlcnMiIENvZGVNaXJyb3Igb3B0aW9uLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9Db2Rl
TWlycm9yT3ZlcnJpZGVzLmNzczoKKyAgICAgICAgKC5Db2RlTWlycm9yLmRyYWctdG8tYWRqdXN0
IC5Db2RlTWlycm9yLWxpbmVzKToKKyAgICAgICAgU2V0IHRoZSBjdXJzb3IgdG8gImNvbC1yZXNp
emUiIHdoZW4gYSBudW1iZXIgdG9rZW4gaXMgaG92ZXJlZCBhbmQgdGhlIG9wdGlvbiBrZXkKKyAg
ICAgICAgbW9kaWZpZXIgaXMgcHJlc3NlZC4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29u
c29sZVByb21wdC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlUHJvbXB0KToKKyAg
ICAgICAgVHVybiBvbiB0aGUgbmV3ICJkcmFnVG9BZGp1c3ROdW1iZXJzIiBDb2RlTWlycm9yIG9w
dGlvbi4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRHJhZ1RvQWRqdXN0Q29udHJvbGxlci5q
czogQWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhZ1RvQWRqdXN0Q29udHJvbGxlcik6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhZ1RvQWRqdXN0Q29udHJvbGxlci5wcm90b3R5cGUu
c2V0IGFjdGl2ZSk6CisgICAgICAgIFRoZSAiYWN0aXZlIiBwcm9wZXJ0eSBpcyBzZXQgd2hlbiB0
aGUgbW91c2UgaXMgb3ZlciB0aGUgYXNzb2NpYXRlZCBDb2RlTWlycm9yCisgICAgICAgIGVkaXRv
ciBhbmQgd2hlbiBpdCdzIG9uIHdlIHRyYWNrIGFsbCAibW91c2Vtb3ZlIiBldmVudHMgc3VjaCB0
aGF0IHdlIG1heQorICAgICAgICBpZGVudGlmeSB0b2tlbnMgY29udGFpbmluZyBudW1lcmljIHZh
bHVlcy4gV2UgYWxzbyBzdGFydCB0cmFja2luZyBjaGFuZ2VzIHRvIHRoZQorICAgICAgICBvcHRp
b24gbW9kaWZpZXIga2V5IHByZXNzIHN0YXRlIHN1Y2ggdGhhdCB3ZSBtYXkgY2hhbmdlIHRoZSBj
dXJzb3IgYWNjb3JkaW5nbHkuCisgICAgICAgIFdlIGVuc3VyZSB0aGF0IHRoZSBDb2RlTWlycm9y
IGluc3RhbmNlIGlzIG5vdCByZWFkLW9ubHkgc3VjaCB0aGF0IHdlIGRvbid0CisgICAgICAgIGFs
bG93IGFkanVzdG1lbnQgb2YgbnVtZXJpYyB2YWx1ZXMgaW4gcGxhY2VzIHdoZXJlIHRoZXkgY291
bGRuJ3QgYmUgY29tbWl0dGVkLgorCisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhZ1RvQWRqdXN0
Q29udHJvbGxlci5wcm90b3R5cGUuc2V0IGRyYWdnaW5nKToKKyAgICAgICAgVGhlICJkcmFnZ2lu
ZyIgcHJvcGVydHkgcmVmbGVjdHMgd2hldGhlcmUgYSBkcmFnZ2luZy10by1hZGp1c3QgaW50ZXJh
Y3Rpb24KKyAgICAgICAgaXMgdW5kZXJ3YXkuIFdlIGNhbGwgaW50byBXZWJJbnNwZWN0b3IuZWxl
bWVudERyYWdTdGFydCgpIGFuZCBXZWJJbnNwZWN0b3IuZWxlbWVudERyYWdFbmQoKQorICAgICAg
ICB0byBzZXQgdGhlIGN1cnNvciB0byAiY29sLXJlc2l6ZSIgZm9yIHRoZSB3aG9sZSBkb2N1bWVu
dCB3aGlsZSB0cmFja2luZyBtb3VzZW1vdmUKKyAgICAgICAgYW5kIG1vdXNldXAgZXZlbnRzIGF0
IHRoZSB3aW5kb3cgbGV2ZWwgc3VjaCB0aGF0IHdlIGNhbiBkcmFnLXRvLWFkanVzdCBldmVuIG91
dHNpZGUKKyAgICAgICAgb2YgdGhlIGluc3BlY3RvciB3aW5kb3cuCisKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5EcmFnVG9BZGp1c3RDb250cm9sbGVyLnByb3RvdHlwZS5zZXQgZW5hYmxlZCk6Cisg
ICAgICAgIFRoZSAiZW5hYmxlZCIgcHJvcGVydHkgY29udHJvbHMgd2hldGhlciB0aGUgYXNzb2Np
YXRlZCBDb2RlTWlycm9yIGluc3RhbmNlCisgICAgICAgIG1heSBhY3QgdXBvbiBob3ZlcmluZyBu
dW1lcmljIHZhbHVlcyB0byBhZGp1c3QgdGhlbSB2aWEgYSBkcmFnIGludGVyYWN0aW9uLgorCisg
ICAgICAgIChXZWJJbnNwZWN0b3IuRHJhZ1RvQWRqdXN0Q29udHJvbGxlci5wcm90b3R5cGUuc2V0
IHRyYWNrc01vdXNlQ2xpY2tBbmREcmFnKToKKyAgICAgICAgVGhlICJ0cmFja3NNb3VzZUNsaWNr
QW5kRHJhZyIgcHJvcGVydHkgaXMgc2V0IHRvIHRydWUgd2hlbmV2ZXIgdGhlIGNvbnRyb2xsZXIK
KyAgICAgICAgaGFzIGRldGVjdGVkIHRoYXQgYSB0b2tlbiBjb250YWluaW5nIGEgbnVtZXJpYyB2
YWx1ZSBpcyBiZWluZyBob3ZlcmVkIGFuZCB0aGUKKyAgICAgICAgb3B0aW9uIG1vZGlmaWVyIGtl
eSBpcyBwcmVzc2VkLiBUaGlzIHByb3BlcnR5IGNvbnRyb2xzIHRoZSBjdXJzb3IgdmFsdWUgZm9y
IHRoZQorICAgICAgICBob3ZlcmVkIHRva2VuIHRvIHJlZmxlY3QgdGhhdCBhIGRyYWctdG8tYWRq
dXN0IGludGVyYWN0aW9uIGlzIGFsbG93ZWQgYW5kIHRyYWNrcworICAgICAgICAibW91c2Vkb3du
IiBldmVudHMgZm9yIHdoZW4gYSBkcmFnZ2luZyBpbnRlcmFjdGlvbiBtYXkgYmUgaW5pdGlhdGVk
LgorCisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhZ1RvQWRqdXN0Q29udHJvbGxlci5wcm90b3R5
cGUuX21vZGlmaWVyc0RpZENoYW5nZSk6CisgICAgICAgIFNldHMgdGhlICJ0cmFja3NNb3VzZUNs
aWNrQW5kRHJhZyIgZGVwZW5kaW5nIG9uIHRoZSBhdmFpbGFiaWxpdHkgb2YgYSBob3ZlcmVkCisg
ICAgICAgIHRva2VuIGNvbnRhaW5pbmcgYSBudW1lcmljIHZhbHVlIGFuZCB0aGUgcHJlc3NlZCBz
dGF0ZSBvZiB0aGUgb3B0aW9uIG1vZGlmaWVkIGtleS4KKworICAgICAgICAoV2ViSW5zcGVjdG9y
LkRyYWdUb0FkanVzdENvbnRyb2xsZXIucHJvdG90eXBlLmhhbmRsZUV2ZW50KToKKyAgICAgICAg
UHJveHkgZm9yIHZhcmlvdXMgZXZlbnQtc3BlY2lmaWMgbWV0aG9kcyB0byBkZWFsIHdpdGggbW91
c2UgZXZlbnRzLiBXZSBhbHNvIGJpbmQKKyAgICAgICAgdGhlIHZhbHVlIG9mIHRoZSAiYWN0aXZl
IiBwcm9wZXJ0eSB0byB0aGUgIm1vdXNlZW50ZXIiIGFuZCAibW91c2VsZWF2ZSIgZXZlbnRzCisg
ICAgICAgIGlmIHdlJ3JlIG5vdCBjdXJyZW50bHkgZHJhZ2dpbmctdG8tYWRqdXN0LgorCisgICAg
ICAgIChXZWJJbnNwZWN0b3IuRHJhZ1RvQWRqdXN0Q29udHJvbGxlci5wcm90b3R5cGUuX21vdXNl
TW92ZWQpOgorICAgICAgICBIYW5kbGVzICJtb3VzZW1vdmUiIGV2ZW50cyB3aGVuIHdlJ3JlIG5v
dCBpbiB0aGUgImRyYWdnaW5nIiBzdGF0ZSBzdWNoIHRoYXQgd2UKKyAgICAgICAgY2hlY2sgdGhl
IGN1cnJlbnRseSBob3ZlcmVkIHRva2VuLCBpZiBhbnksIHRvIHNlZSBpZiBpdCBjb250YWlucyBh
IG51bWJlciB0aGF0CisgICAgICAgIHdlIG1heSBkcmFnLXRvLWFkanVzdC4gU3Vic2VxdWVudGx5
LCB3ZSBtYXkgZW50ZXIgdGhlICJ0cmFja3NNb3VzZUNsaWNrQW5kRHJhZyIKKyAgICAgICAgc3Rh
dGUuCisKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmFnVG9BZGp1c3RDb250cm9sbGVyLnByb3Rv
dHlwZS5fbW91c2VXYXNQcmVzc2VkKToKKyAgICAgICAgSGFuZGxlcyAibW91c2Vkb3duIiBldmVu
dHMgZHVyaW5nIGEgZHJhZy10by1hZGp1c3QgaW50ZXJhY3Rpb24uIFdlIHNpbXBseSB0cmFjawor
ICAgICAgICB0aGUgY3VycmVudCBtb3VzZSBwb3NpdGlvbiBpbiB0aGUgeC1heGlzIGFuZCBlbnRl
ciB0aGUgImRyYWdnaW5nIiBzdGF0ZS4KKworICAgICAgICAoV2ViSW5zcGVjdG9yLkRyYWdUb0Fk
anVzdENvbnRyb2xsZXIucHJvdG90eXBlLl9tb3VzZVdhc0RyYWdnZWQpOgorICAgICAgICBIYW5k
bGVzICJtb3VzZW1vdmUiIGV2ZW50cyB3aGVuIHdlIGFyZSBpbiB0aGUgImRyYWdnaW5nIiBzdGF0
ZS4gV2UgY29tcGFyZSB0aGUKKyAgICAgICAgY3VycmVudCBtb3VzZSBwb3NpdGlvbiBpbiB0aGUg
eC1heGlzIHdpdGggdGhlIGxhc3QgcmVjb3JlZGVkIHZhbHVlIGFuZCBkZXRlcm1pbmUKKyAgICAg
ICAgdGhlIGFtb3VudCBieSB3aGljaCB3ZSBzaG91bGQgYWRqdXN0IHRoZSB2YWx1ZSwgdGFraW5n
IGludG8gYWNjb3VudCB0aGUgc2hpZnQgYW5kCisgICAgICAgIGNvbW1hbmQgbW9kaWZpZXIga2V5
cy4gV2UgdGhlbiBjYWxsIGludG8gV2ViSW5zcGVjdG9yLmFsdGVyTnVtYmVySW5SYW5nZSgpIHRv
CisgICAgICAgIGFwcGx5IHRoZSBjaGFuZ2UgYW1vdW50IHRvIHRoZSBhc3NvY2lhdGVkIENvZGVN
aXJyb3IgZWRpdG9yLgorCisgICAgICAgIChXZWJJbnNwZWN0b3IuRHJhZ1RvQWRqdXN0Q29udHJv
bGxlci5wcm90b3R5cGUuX21vdXNlV2FzUmVsZWFzZWQpOgorICAgICAgICBIYW5kbGVzICJtb3Vz
ZXVwIiBldmVudHMsIHNpbXBseSBleGl0aW5nIHRoZSAiZHJhZ2dpbmciIHN0YXRlIGFuZCByZXNl
dHRpbmcgb3RoZXIKKyAgICAgICAgcGFyYW1ldGVycyB3ZSB3b3VsZCBoYXZlIGN1c3RvbWl6ZWQg
YXMgYSByZXN1bHQgb2YgdGhlIGRyYWctdG8tYWRqdXN0IGludGVyYWN0aW9uLgorCisgICAgICAg
IChXZWJJbnNwZWN0b3IuRHJhZ1RvQWRqdXN0Q29udHJvbGxlci5wcm90b3R5cGUuX3Jlc2V0KToK
KyAgICAgICAgUmVzZXR0aW5nIHNvbWUgcGFyYW1ldGVycyB3ZSB3b3VsZCBoYXZlIGN1c3RvbWl6
ZWQgYXMgYSByZXN1bHQgb2YgdGhlIGRyYWctdG8tYWRqdXN0CisgICAgICAgIGludGVyYWN0aW9u
LgorCisgICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CisgICAgICAgIEluY2x1ZGUg
dGhlIG5ldyBEcmFnVG9BZGp1c3RDb250cm9sbGVyLmpzIGZpbGUuCisKKyAgICAgICAgKiBVc2Vy
SW50ZXJmYWNlL01haW4uanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuZWxlbWVudERyYWdTdGFy
dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuZWxlbWVudERyYWdFbmQpOgorICAgICAgICBBZGQg
YW4gZXh0cmEgcGFyYW1ldGVyIHRvIGVsZW1lbnREcmFnU3RhcnQoKSBzdWNoIHRoYXQgdGhlIGNh
bGxlciBtYXkgc3BlY2lmeSB0aGUgZXZlbnQKKyAgICAgICAgdGFyZ2V0IGZvciB0aGUgIm1vdXNl
bW92ZSIgYW5kICJtb3VzZXVwIiBldmVudHMuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Rl
eHRFZGl0b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvcik6CisgICAgICAg
IFR1cm4gb24gdGhlIG5ldyAiZHJhZ1RvQWRqdXN0TnVtYmVycyIgQ29kZU1pcnJvciBvcHRpb24u
CisKIDIwMTMtMDctMTcgIFNlb2tqdSBLd29uICA8c2Vva2p1Lmt3b25AZ21haWwuY29tPgogCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IEZpeCBhIHR5cG8gaW4gV2ViSW5zcGVjdG9yLmxvYWRlZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ1NTU3R5bGVE
ZWNsYXJhdGlvblRleHRFZGl0b3IuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5qcwppbmRleCAzNTc0MDNhMWU0MzQ1
MDg5NmZjMjc2Y2U2NzA5Yjk5OGE4NzcwMTcwLi43M2NiZmRlODkzZTU5NGY0NmNmYmE1ZDI0MGZk
ODI1Nzk0NGFiZTkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5qcworKysgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9DU1NTdHlsZURlY2xhcmF0aW9uVGV4dEVkaXRvci5qcwpA
QCAtNTAsNyArNTAsOCBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblRleHRFZGl0
b3IgPSBmdW5jdGlvbihkZWxlZ2F0ZSwgc3R5bGUsIGVsZW1lbnQpCiAgICAgICAgIGluZGVudFVu
aXQ6IDQsCiAgICAgICAgIHNtYXJ0SW5kZW50OiBmYWxzZSwKICAgICAgICAgbWF0Y2hCcmFja2V0
czogdHJ1ZSwKLSAgICAgICAgYXV0b0Nsb3NlQnJhY2tldHM6IHRydWUKKyAgICAgICAgYXV0b0Ns
b3NlQnJhY2tldHM6IHRydWUsCisgICAgICAgIGRyYWdUb0FkanVzdE51bWJlcnM6IHRydWUKICAg
ICB9KTsKIAogICAgIHRoaXMuX2NvZGVNaXJyb3Iub24oImNoYW5nZSIsIHRoaXMuX2NvbnRlbnRD
aGFuZ2VkLmJpbmQodGhpcykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvQ29kZU1pcnJvckFkZGl0aW9ucy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0NvZGVNaXJyb3JBZGRpdGlvbnMuanMKaW5kZXggMWFjOWNiZmUwOWE1
M2ZmMWMzNTZiOTBmMDYwNjIyODRjZjE5NGVkMy4uZWY5MmI0OGM0MjFjYWI3ODdmOGY2ZDA2Y2Zi
MjM2YjliZDg0YzhhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQ29kZU1pcnJvckFkZGl0aW9ucy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9Db2RlTWlycm9yQWRkaXRpb25zLmpzCkBAIC0yODMsOTAgKzI4MywxMiBA
QAogCiAgICAgZnVuY3Rpb24gYWx0ZXJOdW1iZXIoYW1vdW50LCBjb2RlTWlycm9yKQogICAgIHsK
LSAgICAgICAgdmFyIHNlbGVjdGlvbkFuY2hvciA9IGNvZGVNaXJyb3IuZ2V0Q3Vyc29yKCJhbmNo
b3IiKTsKLSAgICAgICAgdmFyIHNlbGVjdGlvbkhlYWQgPSBjb2RlTWlycm9yLmdldEN1cnNvcigi
aGVhZCIpOworICAgICAgICB2YXIgc3RhcnRQb3NpdGlvbiA9IGNvZGVNaXJyb3IuZ2V0Q3Vyc29y
KCJhbmNob3IiKTsKKyAgICAgICAgdmFyIGVuZFBvc2l0aW9uID0gY29kZU1pcnJvci5nZXRDdXJz
b3IoImhlYWQiKTsKIAotICAgICAgICAvLyBXZSBkb24ndCB0cnkgaWYgdGhlIHJhbmdlIGlzIG11
bHRpbGluZSwgcGFzcyB0byBhbm90aGVyIGtleSBoYW5kbGVyLgotICAgICAgICBpZiAoc2VsZWN0
aW9uQW5jaG9yLmxpbmUgIT09IHNlbGVjdGlvbkhlYWQubGluZSkKKyAgICAgICAgdmFyIGZvdW5k
TnVtYmVyID0gV2ViSW5zcGVjdG9yLmFsdGVyTnVtYmVySW5SYW5nZShhbW91bnQsIGNvZGVNaXJy
b3IsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCB0cnVlKTsKKyAgICAgICAgaWYgKCFmb3Vu
ZE51bWJlcikKICAgICAgICAgICAgIHJldHVybiBDb2RlTWlycm9yLlBhc3M7Ci0KLSAgICAgICAg
dmFyIGxpbmUgPSBjb2RlTWlycm9yLmdldExpbmUoc2VsZWN0aW9uQW5jaG9yLmxpbmUpOwotCi0g
ICAgICAgIHZhciBmb3VuZFBlcmlvZCA9IGZhbHNlOwotCi0gICAgICAgIHZhciBzdGFydCA9IE5h
TjsKLSAgICAgICAgdmFyIGVuZCA9IE5hTjsKLQotICAgICAgICBmb3IgKHZhciBpID0gc2VsZWN0
aW9uQW5jaG9yLmNoOyBpID49IDA7IC0taSkgewotICAgICAgICAgICAgdmFyIGNoYXJhY3RlciA9
IGxpbmUuY2hhckF0KGkpOwotCi0gICAgICAgICAgICBpZiAoY2hhcmFjdGVyID09PSAiLiIpIHsK
LSAgICAgICAgICAgICAgICBpZiAoZm91bmRQZXJpb2QpCi0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIGZvdW5kUGVyaW9kID0gdHJ1ZTsKLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAoY2hhcmFjdGVyICE9PSAiLSIgJiYgY2hhcmFjdGVyICE9PSAiKyIgJiYgaXNOYU4o
cGFyc2VJbnQoY2hhcmFjdGVyKSkpIHsKLSAgICAgICAgICAgICAgICAvLyBGb3VuZCB0aGUgZW5k
IGFscmVhZHksIGp1c3Qgc2NhbiBiYWNrd2FyZHMuCi0gICAgICAgICAgICAgICAgaWYgKGkgPT09
IHNlbGVjdGlvbkFuY2hvci5jaCkgewotICAgICAgICAgICAgICAgICAgICBlbmQgPSBpOwotICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3RhcnQgPSBpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlzTmFOKGVuZCkpIHsKLSAgICAgICAgICAgIGZvciAo
dmFyIGkgPSBzZWxlY3Rpb25BbmNob3IuY2ggKyAxOyBpIDwgbGluZS5sZW5ndGg7ICsraSkgewot
ICAgICAgICAgICAgICAgIHZhciBjaGFyYWN0ZXIgPSBsaW5lLmNoYXJBdChpKTsKLQotICAgICAg
ICAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT09ICIuIikgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoZm91bmRQZXJpb2QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IGk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIGZvdW5kUGVyaW9kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKGlzTmFOKHBhcnNlSW50KGNoYXJhY3RlcikpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGVuZCA9IGk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGVuZCA9IGkgKyAxOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gTm8gbnVtYmVyIHJhbmdlIGZvdW5kLCBwYXNzIHRvIGFub3RoZXIga2V5
IGhhbmRsZXIuCi0gICAgICAgIGlmIChpc05hTihzdGFydCkgfHwgaXNOYU4oZW5kKSkKLSAgICAg
ICAgICAgIHJldHVybiBDb2RlTWlycm9yLlBhc3M7Ci0KLSAgICAgICAgdmFyIG51bWJlciA9IHBh
cnNlRmxvYXQobGluZS5zdWJzdHJpbmcoc3RhcnQsIGVuZCkpOwotICAgICAgICBpZiAobnVtYmVy
IDwgMSAmJiBudW1iZXIgPj0gLTEgJiYgYW1vdW50ID09PSAxKQotICAgICAgICAgICAgYW1vdW50
ID0gMC4xOwotICAgICAgICBlbHNlIGlmIChudW1iZXIgPD0gMSAmJiBudW1iZXIgPiAtMSAmJiBh
bW91bnQgPT09IC0xKQotICAgICAgICAgICAgYW1vdW50ID0gLTAuMTsKLQotICAgICAgICAvLyBN
YWtlIHRoZSBuZXcgbnVtYmVyIGFuZCBjb25zdHJhaW4gaXQgdG8gYSBwcmVjaXNpb24gb2YgNiwg
dGhpcyBtYXRjaGVzIG51bWJlcnMgdGhlIGVuZ2luZSByZXR1cm5zLgotICAgICAgICAvLyBVc2Ug
dGhlIE51bWJlciBjb25zdHJ1Y3RvciB0byBmb3JnZXQgdGhlIGZpeGVkIHByZWNpc2lvbiwgc28g
MS4xMDAwMDAgd2lsbCBwcmludCBhcyAxLjEuCi0gICAgICAgIHZhciBhbHRlcmVkTnVtYmVyID0g
TnVtYmVyKChudW1iZXIgKyBhbW91bnQpLnRvRml4ZWQoNikpOwotICAgICAgICB2YXIgYWx0ZXJl
ZE51bWJlclN0cmluZyA9IGFsdGVyZWROdW1iZXIudG9TdHJpbmcoKTsKLQotICAgICAgICB2YXIg
ZnJvbSA9IHtsaW5lOiBzZWxlY3Rpb25BbmNob3IubGluZSwgY2g6IHN0YXJ0fTsKLSAgICAgICAg
dmFyIHRvID0ge2xpbmU6IHNlbGVjdGlvbkFuY2hvci5saW5lLCBjaDogZW5kfTsKLQotICAgICAg
ICBjb2RlTWlycm9yLnJlcGxhY2VSYW5nZShhbHRlcmVkTnVtYmVyU3RyaW5nLCBmcm9tLCB0byk7
Ci0KLSAgICAgICAgdmFyIG5ld1RvID0ge2xpbmU6IHNlbGVjdGlvbkFuY2hvci5saW5lLCBjaDog
ZnJvbS5jaCArIGFsdGVyZWROdW1iZXJTdHJpbmcubGVuZ3RofTsKLQotICAgICAgICAvLyBGaXgg
dXAgdGhlIHNlbGVjdGlvbiBzbyBpdCBmb2xsb3dzIHRoZSBpbmNyZWFzZSBvciBkZWNyZWFzZSBp
biB0aGUgcmVwbGFjZW1lbnQgbGVuZ3RoLgotICAgICAgICBpZiAoc2VsZWN0aW9uSGVhZC5jaCA+
PSB0by5jaCkKLSAgICAgICAgICAgIHNlbGVjdGlvbkhlYWQgPSBuZXdUbzsKLQotICAgICAgICBp
ZiAoc2VsZWN0aW9uQW5jaG9yLmNoID49IHRvLmNoKQotICAgICAgICAgICAgc2VsZWN0aW9uQW5j
aG9yID0gbmV3VG87Ci0KLSAgICAgICAgY29kZU1pcnJvci5zZXRTZWxlY3Rpb24oc2VsZWN0aW9u
QW5jaG9yLCBzZWxlY3Rpb25IZWFkKTsKICAgICB9CiAKICAgICBmdW5jdGlvbiBpZ25vcmVLZXko
Y29kZU1pcnJvcikKQEAgLTQxMCw2ICszMzIsMTMgQEAKICAgICBleHRyYUpTT05UeXBlcy5mb3JF
YWNoKGZ1bmN0aW9uKHR5cGUpIHsKICAgICAgICAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKHR5cGUs
IHtuYW1lOiAiamF2YXNjcmlwdCIsIGpzb246IHRydWV9KTsKICAgICB9KTsKKworICAgIENvZGVN
aXJyb3IuZGVmaW5lT3B0aW9uKCJkcmFnVG9BZGp1c3ROdW1iZXJzIiwgZmFsc2UsIGZ1bmN0aW9u
KGNvZGVNaXJyb3IsIHZhbHVlLCBvbGRWYWx1ZSkgeworICAgICAgICBpZiAoIWNvZGVNaXJyb3Iu
ZHJhZ1RvQWRqdXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGNvZGVNaXJyb3IuZHJhZ1RvQWRq
dXN0Q29udHJvbGxlciA9IG5ldyBXZWJJbnNwZWN0b3IuRHJhZ1RvQWRqdXN0Q29udHJvbGxlcihj
b2RlTWlycm9yKTsKKyAgICAgICAgY29kZU1pcnJvci5kcmFnVG9BZGp1c3RDb250cm9sbGVyLmVu
YWJsZWQgPSB2YWx1ZTsKKyAgICB9KTsKKwogfSkoKTsKIAogV2ViSW5zcGVjdG9yLmNvbXBhcmVD
b2RlTWlycm9yUG9zaXRpb25zID0gZnVuY3Rpb24oYSwgYikKQEAgLTQyMiwzICszNTEsOTIgQEAg
V2ViSW5zcGVjdG9yLmNvbXBhcmVDb2RlTWlycm9yUG9zaXRpb25zID0gZnVuY3Rpb24oYSwgYikK
ICAgICB2YXIgYkNvbHVtbiA9ICJjaCIgaW4gYiA/IGIuY2ggOiBOdW1iZXIuTUFYX1ZBTFVFOwog
ICAgIHJldHVybiBhQ29sdW1uIC0gYkNvbHVtbjsKIH07CisKK1dlYkluc3BlY3Rvci5hbHRlck51
bWJlckluUmFuZ2UgPSBmdW5jdGlvbihhbW91bnQsIGNvZGVNaXJyb3IsIHN0YXJ0UG9zaXRpb24s
IGVuZFBvc2l0aW9uLCBhZmZlY3RzU2VsZWN0aW9uKQoreworICAgIC8vIFdlIGRvbid0IHRyeSBp
ZiB0aGUgcmFuZ2UgaXMgbXVsdGlsaW5lLCBwYXNzIHRvIGFub3RoZXIga2V5IGhhbmRsZXIuCisg
ICAgaWYgKHN0YXJ0UG9zaXRpb24ubGluZSAhPT0gZW5kUG9zaXRpb24ubGluZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgdmFyIGxpbmUgPSBjb2RlTWlycm9yLmdldExpbmUoc3RhcnRQ
b3NpdGlvbi5saW5lKTsKKworICAgIHZhciBmb3VuZFBlcmlvZCA9IGZhbHNlOworCisgICAgdmFy
IHN0YXJ0ID0gTmFOOworICAgIHZhciBlbmQgPSBOYU47CisKKyAgICBmb3IgKHZhciBpID0gc3Rh
cnRQb3NpdGlvbi5jaDsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgdmFyIGNoYXJhY3RlciA9IGxp
bmUuY2hhckF0KGkpOworCisgICAgICAgIGlmIChjaGFyYWN0ZXIgPT09ICIuIikgeworICAgICAg
ICAgICAgaWYgKGZvdW5kUGVyaW9kKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgZm91bmRQZXJpb2QgPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKGNoYXJhY3RlciAhPT0g
Ii0iICYmIGNoYXJhY3RlciAhPT0gIisiICYmIGlzTmFOKHBhcnNlSW50KGNoYXJhY3RlcikpKSB7
CisgICAgICAgICAgICAvLyBGb3VuZCB0aGUgZW5kIGFscmVhZHksIGp1c3Qgc2NhbiBiYWNrd2Fy
ZHMuCisgICAgICAgICAgICBpZiAoaSA9PT0gc3RhcnRQb3NpdGlvbi5jaCkgeworICAgICAgICAg
ICAgICAgIGVuZCA9IGk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3RhcnQgPSBpOwor
ICAgIH0KKworICAgIGlmIChpc05hTihlbmQpKSB7CisgICAgICAgIGZvciAodmFyIGkgPSBzdGFy
dFBvc2l0aW9uLmNoICsgMTsgaSA8IGxpbmUubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZh
ciBjaGFyYWN0ZXIgPSBsaW5lLmNoYXJBdChpKTsKKworICAgICAgICAgICAgaWYgKGNoYXJhY3Rl
ciA9PT0gIi4iKSB7CisgICAgICAgICAgICAgICAgaWYgKGZvdW5kUGVyaW9kKSB7CisgICAgICAg
ICAgICAgICAgICAgIGVuZCA9IGk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZvdW5kUGVyaW9kID0gdHJ1ZTsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoaXNOYU4ocGFyc2VJbnQoY2hhcmFjdGVyKSkpIHsKKyAgICAgICAg
ICAgICAgICBlbmQgPSBpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBlbmQgPSBpICsgMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE5v
IG51bWJlciByYW5nZSBmb3VuZCwgcGFzcyB0byBhbm90aGVyIGtleSBoYW5kbGVyLgorICAgIGlm
IChpc05hTihzdGFydCkgfHwgaXNOYU4oZW5kKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgdmFyIG51bWJlciA9IHBhcnNlRmxvYXQobGluZS5zdWJzdHJpbmcoc3RhcnQsIGVuZCkpOwor
ICAgIGlmIChudW1iZXIgPCAxICYmIG51bWJlciA+PSAtMSAmJiBhbW91bnQgPT09IDEpCisgICAg
ICAgIGFtb3VudCA9IDAuMTsKKyAgICBlbHNlIGlmIChudW1iZXIgPD0gMSAmJiBudW1iZXIgPiAt
MSAmJiBhbW91bnQgPT09IC0xKQorICAgICAgICBhbW91bnQgPSAtMC4xOworCisgICAgLy8gTWFr
ZSB0aGUgbmV3IG51bWJlciBhbmQgY29uc3RyYWluIGl0IHRvIGEgcHJlY2lzaW9uIG9mIDYsIHRo
aXMgbWF0Y2hlcyBudW1iZXJzIHRoZSBlbmdpbmUgcmV0dXJucy4KKyAgICAvLyBVc2UgdGhlIE51
bWJlciBjb25zdHJ1Y3RvciB0byBmb3JnZXQgdGhlIGZpeGVkIHByZWNpc2lvbiwgc28gMS4xMDAw
MDAgd2lsbCBwcmludCBhcyAxLjEuCisgICAgdmFyIGFsdGVyZWROdW1iZXIgPSBOdW1iZXIoKG51
bWJlciArIGFtb3VudCkudG9GaXhlZCg2KSk7CisgICAgdmFyIGFsdGVyZWROdW1iZXJTdHJpbmcg
PSBhbHRlcmVkTnVtYmVyLnRvU3RyaW5nKCk7CisKKyAgICB2YXIgZnJvbSA9IHtsaW5lOiBzdGFy
dFBvc2l0aW9uLmxpbmUsIGNoOiBzdGFydH07CisgICAgdmFyIHRvID0ge2xpbmU6IHN0YXJ0UG9z
aXRpb24ubGluZSwgY2g6IGVuZH07CisKKyAgICBjb2RlTWlycm9yLnJlcGxhY2VSYW5nZShhbHRl
cmVkTnVtYmVyU3RyaW5nLCBmcm9tLCB0byk7CisKKyAgICBpZiAoYWZmZWN0c1NlbGVjdGlvbikg
eworICAgICAgICB2YXIgbmV3VG8gPSB7bGluZTogc3RhcnRQb3NpdGlvbi5saW5lLCBjaDogZnJv
bS5jaCArIGFsdGVyZWROdW1iZXJTdHJpbmcubGVuZ3RofTsKKworICAgICAgICAvLyBGaXggdXAg
dGhlIHNlbGVjdGlvbiBzbyBpdCBmb2xsb3dzIHRoZSBpbmNyZWFzZSBvciBkZWNyZWFzZSBpbiB0
aGUgcmVwbGFjZW1lbnQgbGVuZ3RoLgorICAgICAgICBpZiAoZW5kUG9zaXRpb24uY2ggPj0gdG8u
Y2gpCisgICAgICAgICAgICBlbmRQb3NpdGlvbiA9IG5ld1RvOworCisgICAgICAgIGlmIChzdGFy
dFBvc2l0aW9uLmNoID49IHRvLmNoKQorICAgICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IG5ld1Rv
OworCisgICAgICAgIGNvZGVNaXJyb3Iuc2V0U2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBv
c2l0aW9uKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvZGVNaXJyb3JPdmVycmlkZXMuY3NzIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29kZU1pcnJvck92ZXJyaWRlcy5j
c3MKaW5kZXggZDc3ZGM5YTBlYzBlMDc1Yzg3NGVlMGM3MjgwZTcwMDVhMzVjM2VmOC4uZDcxMWE3
N2E0OTQxM2NjNzc4N2ExYjJiYjExOWZhMWQ2NjQyMzJmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29kZU1pcnJvck92ZXJyaWRlcy5jc3MKKysrIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29kZU1pcnJvck92ZXJyaWRlcy5j
c3MKQEAgLTgxLDMgKzgxLDcgQEAKICAgICBmb250LWZhbWlseTogIkx1Y2lkYSBHcmFuZGUiLCBz
YW5zLXNlcmlmOwogICAgIHRleHQtYWxpZ246IHJpZ2h0OwogfQorCisuQ29kZU1pcnJvci5kcmFn
LXRvLWFkanVzdCAuQ29kZU1pcnJvci1saW5lcyB7CisgICAgY3Vyc29yOiBjb2wtcmVzaXplOwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29uc29s
ZVByb21wdC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnNvbGVQ
cm9tcHQuanMKaW5kZXggNWI2MmI4YTFmZWJiZWIxNjkyN2ZjMjc5ODE2ZGVhMGI4YWM1OGQ5ZC4u
M2RlN2U5ZTg2ZWU1ZDc5Y2Y2ZjA5MzM3NzlkYjc3OTkyMTY5ZDY5YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29uc29sZVByb21wdC5qcworKysgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db25zb2xlUHJvbXB0LmpzCkBAIC0z
OCw3ICszOCw4IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlUHJvbXB0ID0gZnVuY3Rpb24oZGVsZWdh
dGUsIG1pbWVUeXBlLCBlbGVtZW50KQogICAgICAgICBtb2RlOiBtaW1lVHlwZSwKICAgICAgICAg
aW5kZW50V2l0aFRhYnM6IHRydWUsCiAgICAgICAgIGluZGVudFVuaXQ6IDQsCi0gICAgICAgIG1h
dGNoQnJhY2tldHM6IHRydWUKKyAgICAgICAgbWF0Y2hCcmFja2V0czogdHJ1ZSwKKyAgICAgICAg
ZHJhZ1RvQWRqdXN0TnVtYmVyczogdHJ1ZQogICAgIH0pOwogCiAgICAgdmFyIGtleU1hcCA9IHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0RyYWdUb0Fk
anVzdENvbnRyb2xsZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9E
cmFnVG9BZGp1c3RDb250cm9sbGVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4MWQ2N2Y0ZDhhZGVhM2JjYTE2
NzA4NDNiMTA1OGY0MWEzYjZjZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9EcmFnVG9BZGp1c3RDb250cm9sbGVyLmpzCkBAIC0wLDAgKzEs
MjE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLkRyYWdUb0FkanVzdENvbnRyb2xsZXIg
PSBmdW5jdGlvbihjb2RlTWlycm9yKQoreworICAgIHRoaXMuX2NvZGVNaXJyb3IgPSBjb2RlTWly
cm9yOworICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlOworICAgIHRoaXMuX2RyYWdnaW5nID0gZmFs
c2U7CisgICAgdGhpcy5fZW5hYmxlZCA9IGZhbHNlOworICAgIHRoaXMuX3RyYWNrc01vdXNlQ2xp
Y2tBbmREcmFnID0gZmFsc2U7Cit9OworCitXZWJJbnNwZWN0b3IuRHJhZ1RvQWRqdXN0Q29udHJv
bGxlci5TdHlsZUNsYXNzTmFtZSA9ICJkcmFnLXRvLWFkanVzdCI7CisKK1dlYkluc3BlY3Rvci5E
cmFnVG9BZGp1c3RDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKKyAgICBjb25zdHJ1Y3RvcjogV2Vi
SW5zcGVjdG9yLkRyYWdUb0FkanVzdENvbnRyb2xsZXIsCisKKyAgICBzZXQgYWN0aXZlKGFjdGl2
ZSkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9hY3RpdmUgPT09IGFjdGl2ZSB8fCB0aGlzLl9j
b2RlTWlycm9yLmdldE9wdGlvbigicmVhZE9ubHkiKSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBpZiAoYWN0aXZlKSB7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3Iubm90aWZpY2F0
aW9ucy5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Ob3RpZmljYXRpb24uR2xvYmFsTW9k
aWZpZXJLZXlzRGlkQ2hhbmdlLCB0aGlzLl9tb2RpZmllcnNEaWRDaGFuZ2UsIHRoaXMpOworICAg
ICAgICAgICAgdGhpcy5fZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlz
LCBmYWxzZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBXZWJJbnNw
ZWN0b3Iubm90aWZpY2F0aW9ucy5yZW1vdmVFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5Ob3Rp
ZmljYXRpb24uR2xvYmFsTW9kaWZpZXJLZXlzRGlkQ2hhbmdlLCB0aGlzLl9tb2RpZmllcnNEaWRD
aGFuZ2UsIHRoaXMpOworICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVFdmVudExpc3Rl
bmVyKCJtb3VzZW1vdmUiLCB0aGlzLCBmYWxzZSk7CisgICAgICAgICAgICB0aGlzLl9ob3ZlcmVk
VG9rZW5JbmZvID0gbnVsbDsKKyAgICAgICAgICAgIHRoaXMudHJhY2tzTW91c2VDbGlja0FuZERy
YWcgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX2FjdGl2ZSA9IGFjdGl2ZTsK
KyAgICB9LAorCisgICAgc2V0IGRyYWdnaW5nKGRyYWdnaW5nKQorICAgIHsKKyAgICAgICAgaWYg
KHRoaXMuX2RyYWdnaW5nID09PSBkcmFnZ2luZykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgICAgIGlmIChkcmFnZ2luZykKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5lbGVt
ZW50RHJhZ1N0YXJ0KHRoaXMuX2VsZW1lbnQsIHRoaXMsIHRoaXMsIHdpbmRvdy5ldmVudCwgImNv
bC1yZXNpemUiLCB3aW5kb3cpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBXZWJJbnNwZWN0
b3IuZWxlbWVudERyYWdFbmQod2luZG93LmV2ZW50KTsKKworICAgICAgICB0aGlzLl9kcmFnZ2lu
ZyA9IGRyYWdnaW5nOworICAgIH0sCisKKyAgICBzZXQgZW5hYmxlZChlbmFibGVkKQorICAgIHsK
KyAgICAgICAgaWYgKHRoaXMuX2VuYWJsZWQgPT09IGVuYWJsZWQpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgdGhpcy5fZWxlbWVudCA9IHRoaXMuX2NvZGVNaXJyb3IuZ2V0V3JhcHBl
ckVsZW1lbnQoKTsKKworICAgICAgICBpZiAoZW5hYmxlZCkgeworICAgICAgICAgICAgdGhpcy5f
ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIiwgdGhpcywgZmFsc2UpOworICAg
ICAgICAgICAgdGhpcy5fZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIiwgdGhp
cywgZmFsc2UpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5y
ZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIiwgdGhpcywgZmFsc2UpOworICAgICAgICAg
ICAgdGhpcy5fZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIiwgdGhpcywg
ZmFsc2UpOworICAgICAgICB9CisgICAgfSwKKworICAgIHNldCB0cmFja3NNb3VzZUNsaWNrQW5k
RHJhZyh0cmFja3NNb3VzZUNsaWNrQW5kRHJhZykKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl90
cmFja3NNb3VzZUNsaWNrQW5kRHJhZyA9PT0gdHJhY2tzTW91c2VDbGlja0FuZERyYWcpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAodHJhY2tzTW91c2VDbGlja0Fu
ZERyYWcpIHsKKyAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChXZWJJbnNw
ZWN0b3IuRHJhZ1RvQWRqdXN0Q29udHJvbGxlci5TdHlsZUNsYXNzTmFtZSk7CisgICAgICAgICAg
ICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgdGhpcywgdHJ1ZSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUo
V2ViSW5zcGVjdG9yLkRyYWdUb0FkanVzdENvbnRyb2xsZXIuU3R5bGVDbGFzc05hbWUpOworICAg
ICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIHRoaXMsIHRy
dWUpOworICAgICAgICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICB0aGlzLl90cmFja3NNb3VzZUNsaWNrQW5kRHJhZyA9IHRyYWNrc01vdXNl
Q2xpY2tBbmREcmFnCisgICAgfSwKKworICAgIF9tb2RpZmllcnNEaWRDaGFuZ2U6IGZ1bmN0aW9u
KGV2ZW50KQorICAgIHsKKyAgICAgICAgdGhpcy50cmFja3NNb3VzZUNsaWNrQW5kRHJhZyA9IHRo
aXMuX2hvdmVyZWRUb2tlbkluZm8gJiYgdGhpcy5faG92ZXJlZFRva2VuSW5mby5jb250YWluc051
bWJlciAmJiBXZWJJbnNwZWN0b3IubW9kaWZpZXJLZXlzLmFsdEtleTsKKyAgICB9LAorCisgICAg
aGFuZGxlRXZlbnQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgc3dpdGNoKGV2ZW50
LnR5cGUpIHsKKyAgICAgICAgY2FzZSAibW91c2VlbnRlciI6CisgICAgICAgICAgICBpZiAoIXRo
aXMuX2RyYWdnaW5nKQorICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJtb3VzZWxlYXZlIjoKKyAgICAgICAgICAgIGlm
ICghdGhpcy5fZHJhZ2dpbmcpCisgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJtb3VzZW1vdmUiOgorICAgICAgICAg
ICAgaWYgKHRoaXMuX2RyYWdnaW5nKQorICAgICAgICAgICAgICAgIHRoaXMuX21vdXNlV2FzRHJh
Z2dlZChldmVudCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGhpcy5fbW91
c2VNb3ZlZChldmVudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAibW91c2Vk
b3duIjoKKyAgICAgICAgICAgIHRoaXMuX21vdXNlV2FzUHJlc3NlZChldmVudCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAibW91c2V1cCI6CisgICAgICAgICAgICB0aGlzLl9t
b3VzZVdhc1JlbGVhc2VkKGV2ZW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfSwKKyAgICAKKyAgICBfbW91c2VNb3ZlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAg
ICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLl9jb2RlTWlycm9yLmNvb3Jkc0NoYXIoe2xlZnQ6IGV2
ZW50LnBhZ2VYLCB0b3A6IGV2ZW50LnBhZ2VZfSk7CisgICAgICAgIHZhciB0b2tlbiA9IHRoaXMu
X2NvZGVNaXJyb3IuZ2V0VG9rZW5BdChwb3NpdGlvbik7CisKKyAgICAgICAgaWYgKCF0b2tlbiB8
fCAhdG9rZW4udHlwZSB8fCAhdG9rZW4uc3RyaW5nKSB7CisgICAgICAgICAgICBpZiAodGhpcy5f
aG92ZXJlZFRva2VuSW5mbykKKyAgICAgICAgICAgICAgICB0aGlzLl9yZXNldCgpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gU3RvcCByaWdodCBoZXJlIGlm
IHdlJ3JlIGhvdmVyaW5nIHRoZSBzYW1lIHRva2VuIGFzIHdlIHdlcmUgbGFzdCB0aW1lLgorICAg
ICAgICBpZiAodGhpcy5faG92ZXJlZFRva2VuSW5mbyAmJgorICAgICAgICAgICAgdGhpcy5faG92
ZXJlZFRva2VuSW5mby5saW5lID09PSBwb3NpdGlvbi5saW5lICYmCisgICAgICAgICAgICB0aGlz
Ll9ob3ZlcmVkVG9rZW5JbmZvLnRva2VuLnN0YXJ0ID09PSB0b2tlbi5zdGFydCAmJgorICAgICAg
ICAgICAgdGhpcy5faG92ZXJlZFRva2VuSW5mby50b2tlbi5lbmQgPT09IHRva2VuLmVuZCkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgY29udGFpbnNOdW1iZXIgPSB0b2tlbi50
eXBlLmluZGV4T2YoIm51bWJlciIpICE9PSAtMTsKKyAgICAgICAgdGhpcy5faG92ZXJlZFRva2Vu
SW5mbyA9IHsKKyAgICAgICAgICAgIHRva2VuOiB0b2tlbiwKKyAgICAgICAgICAgIGxpbmU6IHBv
c2l0aW9uLmxpbmUsCisgICAgICAgICAgICBjb250YWluc051bWJlcjogY29udGFpbnNOdW1iZXIs
CisgICAgICAgICAgICBzdGFydFBvc2l0aW9uOiB7CisgICAgICAgICAgICAgICAgY2g6IHRva2Vu
LnN0YXJ0LAorICAgICAgICAgICAgICAgIGxpbmU6IHBvc2l0aW9uLmxpbmUKKyAgICAgICAgICAg
IH0sCisgICAgICAgICAgICBlbmRQb3NpdGlvbjogeworICAgICAgICAgICAgICAgIGNoOiB0b2tl
bi5lbmQsCisgICAgICAgICAgICAgICAgbGluZTogcG9zaXRpb24ubGluZQorICAgICAgICAgICAg
fQorICAgICAgICB9OworCisgICAgICAgIHRoaXMudHJhY2tzTW91c2VDbGlja0FuZERyYWcgPSBj
b250YWluc051bWJlciAmJiBldmVudC5hbHRLZXk7CisgICAgfSwKKyAgICAKKyAgICBfbW91c2VX
YXNQcmVzc2VkOiBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIHRoaXMuX2xhc3RYID0g
ZXZlbnQuc2NyZWVuWDsKKworICAgICAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZTsKKworICAgICAg
ICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24o
KTsKKyAgICB9LAorCisgICAgX21vdXNlV2FzRHJhZ2dlZDogZnVuY3Rpb24oZXZlbnQpCisgICAg
eworICAgICAgICB2YXIgeCA9IGV2ZW50LnNjcmVlblg7CisgICAgICAgIHZhciBhbW91bnQgPSB4
IC0gdGhpcy5fbGFzdFg7CisKKyAgICAgICAgaWYgKE1hdGguYWJzKGFtb3VudCkgPCAxKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX2xhc3RYID0geDsKKworICAgICAgICBp
ZiAoZXZlbnQubWV0YUtleSkKKyAgICAgICAgICAgIGFtb3VudCAvPSAxMDsKKyAgICAgICAgZWxz
ZSBpZiAoZXZlbnQuc2hpZnRLZXkpCisgICAgICAgICAgICBhbW91bnQgKj0gMTA7CisKKyAgICAg
ICAgV2ViSW5zcGVjdG9yLmFsdGVyTnVtYmVySW5SYW5nZShhbW91bnQsIHRoaXMuX2NvZGVNaXJy
b3IsIHRoaXMuX2hvdmVyZWRUb2tlbkluZm8uc3RhcnRQb3NpdGlvbiwgdGhpcy5faG92ZXJlZFRv
a2VuSW5mby5lbmRQb3NpdGlvbiwgZmFsc2UpOworCisgICAgICAgIGV2ZW50LnByZXZlbnREZWZh
dWx0KCk7CisgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworICAgIH0sCisKKyAgICBf
bW91c2VXYXNSZWxlYXNlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB0aGlzLmRy
YWdnaW5nID0gZmFsc2U7CisKKyAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAg
ICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CisKKyAgICAgICAgdGhpcy5fcmVzZXQoKTsKKyAg
ICB9LAorICAgIAorICAgIF9yZXNldDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5f
aG92ZXJlZFRva2VuSW5mbyA9IG51bGw7CisgICAgICAgIHRoaXMudHJhY2tzTW91c2VDbGlja0Fu
ZERyYWcgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFdl
Ykluc3BlY3Rvci5EcmFnVG9BZGp1c3RDb250cm9sbGVyLlN0eWxlQ2xhc3NOYW1lKTsKKyAgICB9
Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFp
bi5odG1sIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCmlu
ZGV4IGUwYmYyOTdmZDE2ZmQ3MDhhZTYyNTYyYWNiMTIzYWRkNmZkZDc2NTQuLjY0YjI2ZGYzMWFl
MDAyNjViNjQzZGE3NzBkYTg3ZGRhN2Q3MTIzMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwKQEAgLTEzOSw2ICsxMzksNyBAQAogICAgIDxzY3Jp
cHQgc3JjPSJVdGlsaXRpZXMuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJXZWJJbnNw
ZWN0b3IuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJPYmplY3QuanMiPjwvc2NyaXB0
PgorICAgIDxzY3JpcHQgc3JjPSJEcmFnVG9BZGp1c3RDb250cm9sbGVyLmpzIj48L3NjcmlwdD4K
ICAgICA8c2NyaXB0IHNyYz0iQ29kZU1pcnJvckFkZGl0aW9ucy5qcyI+PC9zY3JpcHQ+CiAgICAg
PHNjcmlwdCBzcmM9IlNldHRpbmcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJJbnNw
ZWN0b3JCYWNrZW5kLmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9NYWluLmpzCmluZGV4IDBlNjM5NWVlM2M1YzhiMjYxZmZlNjk5ZmE0MTU1ZTNiMmQ5
Y2JlZDYuLjhmYThhNGVmMTZiMDNiMDVlM2Y4MTA3OGIyZmRjMmU2ZTI0ODYxZDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uanMKKysrIGIvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5qcwpAQCAtMTMzOSw3ICsxMzM5
LDcgQEAgV2ViSW5zcGVjdG9yLl9nZW5lcmF0ZURpc2Nsb3N1cmVUcmlhbmdsZUltYWdlcyA9IGZ1
bmN0aW9uKCkKICAgICBnZW5lcmF0ZUNvbG9yZWRJbWFnZXNGb3JDU1MoIkltYWdlcy9EaXNjbG9z
dXJlVHJpYW5nbGVUaW55Q2xvc2VkLnBkZiIsIHNwZWNpZmljYXRpb25zLCA4LCA4LCAiZGlzY2xv
c3VyZS10cmlhbmdsZS10aW55LWNsb3NlZC0iKTsKIH0KIAotV2ViSW5zcGVjdG9yLmVsZW1lbnRE
cmFnU3RhcnQgPSBmdW5jdGlvbihlbGVtZW50LCBkaXZpZGVyRHJhZywgZWxlbWVudERyYWdFbmQs
IGV2ZW50LCBjdXJzb3IpCitXZWJJbnNwZWN0b3IuZWxlbWVudERyYWdTdGFydCA9IGZ1bmN0aW9u
KGVsZW1lbnQsIGRpdmlkZXJEcmFnLCBlbGVtZW50RHJhZ0VuZCwgZXZlbnQsIGN1cnNvciwgZXZl
bnRUYXJnZXQpCiB7CiAgICAgaWYgKFdlYkluc3BlY3Rvci5fZWxlbWVudERyYWdnaW5nRXZlbnRM
aXN0ZW5lciB8fCBXZWJJbnNwZWN0b3IuX2VsZW1lbnRFbmREcmFnZ2luZ0V2ZW50TGlzdGVuZXIp
CiAgICAgICAgIFdlYkluc3BlY3Rvci5lbGVtZW50RHJhZ0VuZChldmVudCk7CkBAIC0xMzYwLDgg
KzEzNjAsMTAgQEAgV2ViSW5zcGVjdG9yLmVsZW1lbnREcmFnU3RhcnQgPSBmdW5jdGlvbihlbGVt
ZW50LCBkaXZpZGVyRHJhZywgZWxlbWVudERyYWdFbmQsIGUKICAgICBXZWJJbnNwZWN0b3IuX2Vs
ZW1lbnRFbmREcmFnZ2luZ0V2ZW50TGlzdGVuZXIgPSBlbGVtZW50RHJhZ0VuZDsKICAgICAKICAg
ICB2YXIgdGFyZ2V0RG9jdW1lbnQgPSBldmVudC50YXJnZXQub3duZXJEb2N1bWVudDsKLSAgICB0
YXJnZXREb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCBkaXZpZGVyRHJhZywg
dHJ1ZSk7Ci0gICAgdGFyZ2V0RG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIGVs
ZW1lbnREcmFnRW5kLCB0cnVlKTsKKworICAgIFdlYkluc3BlY3Rvci5fZWxlbWVudERyYWdnaW5n
RXZlbnRUYXJnZXQgPSBldmVudFRhcmdldCB8fCB0YXJnZXREb2N1bWVudDsKKyAgICBXZWJJbnNw
ZWN0b3IuX2VsZW1lbnREcmFnZ2luZ0V2ZW50VGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNl
bW92ZSIsIGRpdmlkZXJEcmFnLCB0cnVlKTsKKyAgICBXZWJJbnNwZWN0b3IuX2VsZW1lbnREcmFn
Z2luZ0V2ZW50VGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCBlbGVtZW50RHJhZ0Vu
ZCwgdHJ1ZSk7CiAgICAgCiAgICAgdGFyZ2V0RG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSBj
dXJzb3I7CiAgICAgCkBAIC0xMzcwLDE2ICsxMzcyLDE2IEBAIFdlYkluc3BlY3Rvci5lbGVtZW50
RHJhZ1N0YXJ0ID0gZnVuY3Rpb24oZWxlbWVudCwgZGl2aWRlckRyYWcsIGVsZW1lbnREcmFnRW5k
LCBlCiAKIFdlYkluc3BlY3Rvci5lbGVtZW50RHJhZ0VuZCA9IGZ1bmN0aW9uKGV2ZW50KQogewot
ICAgIHZhciB0YXJnZXREb2N1bWVudCA9IGV2ZW50LnRhcmdldC5vd25lckRvY3VtZW50OwotICAg
IHRhcmdldERvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIFdlYkluc3Bl
Y3Rvci5fZWxlbWVudERyYWdnaW5nRXZlbnRMaXN0ZW5lciwgdHJ1ZSk7Ci0gICAgdGFyZ2V0RG9j
dW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIFdlYkluc3BlY3Rvci5fZWxlbWVu
dEVuZERyYWdnaW5nRXZlbnRMaXN0ZW5lciwgdHJ1ZSk7CisgICAgV2ViSW5zcGVjdG9yLl9lbGVt
ZW50RHJhZ2dpbmdFdmVudFRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCBX
ZWJJbnNwZWN0b3IuX2VsZW1lbnREcmFnZ2luZ0V2ZW50TGlzdGVuZXIsIHRydWUpOworICAgIFdl
Ykluc3BlY3Rvci5fZWxlbWVudERyYWdnaW5nRXZlbnRUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5l
cigibW91c2V1cCIsIFdlYkluc3BlY3Rvci5fZWxlbWVudEVuZERyYWdnaW5nRXZlbnRMaXN0ZW5l
ciwgdHJ1ZSk7CiAgICAgCi0gICAgdGFyZ2V0RG9jdW1lbnQuYm9keS5zdHlsZS5yZW1vdmVQcm9w
ZXJ0eSgiY3Vyc29yIik7CisgICAgZXZlbnQudGFyZ2V0Lm93bmVyRG9jdW1lbnQuYm9keS5zdHls
ZS5yZW1vdmVQcm9wZXJ0eSgiY3Vyc29yIik7CiAgICAgCiAgICAgaWYgKFdlYkluc3BlY3Rvci5f
ZWxlbWVudERyYWdnaW5nR2xhc3NQYW5lKQogICAgICAgICBXZWJJbnNwZWN0b3IuX2VsZW1lbnRE
cmFnZ2luZ0dsYXNzUGFuZS5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKFdlYkluc3BlY3Rvci5f
ZWxlbWVudERyYWdnaW5nR2xhc3NQYW5lKTsKICAgICAKICAgICBkZWxldGUgV2ViSW5zcGVjdG9y
Ll9lbGVtZW50RHJhZ2dpbmdHbGFzc1BhbmU7CisgICAgZGVsZXRlIFdlYkluc3BlY3Rvci5fZWxl
bWVudERyYWdnaW5nRXZlbnRUYXJnZXQ7CiAgICAgZGVsZXRlIFdlYkluc3BlY3Rvci5fZWxlbWVu
dERyYWdnaW5nRXZlbnRMaXN0ZW5lcjsKICAgICBkZWxldGUgV2ViSW5zcGVjdG9yLl9lbGVtZW50
RW5kRHJhZ2dpbmdFdmVudExpc3RlbmVyOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVGV4dEVkaXRvci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1RleHRFZGl0b3IuanMKaW5kZXggYzgzYTlhMDVkNTQyNjBmZjI5
OGQwNWEyMmRiZWM4MDRhZmFhOWEyZS4uNDM0NGZjOTdmZGY0NzM3YzBlOTJhZDdhMTRkODA1ZjIy
NWRlYzAxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
VGV4dEVkaXRvci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9U
ZXh0RWRpdG9yLmpzCkBAIC00MSw3ICs0MSw4IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yID0g
ZnVuY3Rpb24oZWxlbWVudCwgbWltZVR5cGUsIGRlbGVnYXRlKQogICAgICAgICBsaW5lTnVtYmVy
czogdHJ1ZSwKICAgICAgICAgbGluZVdyYXBwaW5nOiB0cnVlLAogICAgICAgICBtYXRjaEJyYWNr
ZXRzOiB0cnVlLAotICAgICAgICBhdXRvQ2xvc2VCcmFja2V0czogdHJ1ZQorICAgICAgICBhdXRv
Q2xvc2VCcmFja2V0czogdHJ1ZSwKKyAgICAgICAgZHJhZ1RvQWRqdXN0TnVtYmVyczogdHJ1ZQog
ICAgIH0pOwogCiAgICAgdGhpcy5fY29kZU1pcnJvci5vbigiY2hhbmdlIiwgdGhpcy5fY29udGVu
dENoYW5nZWQuYmluZCh0aGlzKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207394</attachid>
            <date>2013-07-24 07:54:55 -0700</date>
            <delta_ts>2013-07-24 11:12:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-118896-20130724165453.patch</filename>
            <type>text/plain</type>
            <size>24876</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUyODg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCA3
YmIyNGI5YmMyZTYyZTQ1ZDNhMzc2MDY2NzRiMTlhY2I2YTQwMjkxLi5lMjJkODgwYjUxZmJmODAx
MTVhY2EyNDQyMmI2OWQ3YzIwMjg2ZTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDAgQEAKKzIwMTMtMDctMjQgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNv
bT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBzdXBwb3J0IGNsaWNrLWFuZC1kcmFnIGVkaXRp
bmcgb2YgQ1NTIG51bWVyaWMgdmFsdWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTg4OTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgYWRqdXN0bWVudCBvZiBudW1lcmljIHZh
bHVlcyBpbiB0aGUgdmFyaW91cyBDb2RlTWlycm9yIGVkaXRvcnMKKyAgICAgICAgYnkgaG9sZGlu
ZyB0aGUgb3B0aW9uIGtleSBhbmQgZHJhZ2dpbmcgdGhlIG1vdXNlLiBCeSBkZWZhdWx0LCBkcmFn
Z2luZyBvbmUgcGl4ZWwKKyAgICAgICAgY2hhbmdlcyB0aGUgdmFsdWUgYnkgMSwgYnV0IGtleSBt
b2RpZmllcnMgYWxsb3cgdG8gY3VzdG9taXplIHRoYXQgYmVoYXZpb3IgYnkgdXNpbmcKKyAgICAg
ICAgdGhlIGNvbnRyb2wga2V5IHRvIGNoYW5nZSB0aGUgdmFsdWUgdG8gMC4xIGFuZCB0aGUgc2hp
ZnQga2V5IHRvIGNoYW5nZSB0aGUgdmFsdWUgdG8gMTAuCisKKyAgICAgICAgKiBVc2VySW50ZXJm
YWNlL0NvZGVNaXJyb3JBZGRpdGlvbnMuanM6CisgICAgICAgIFNwbGl0IGFkanVzdE51bWJlcigp
IGludG8gdHdvIG1ldGhvZHMgc3VjaCB0aGF0IHdlIG1heSB1c2UgaXRzIGxvZ2ljIGZyb20gdGhl
CisgICAgICAgIENvZGVNaXJyb3JEcmFnVG9BbHRlck51bWJlckNvbnRyb2xsZXIuIFRoZSBuZXcg
bWV0aG9kLCBDb2RlTWlycm9yLnByb3RvdHlwZS5hbHRlck51bWJlckluUmFuZ2UoKQorICAgICAg
ICBhbGxvdyB0byBzZXQgYmVnaW4gYW5kIGVuZCBDb2RlTWlycm9yIHBvc2l0aW9ucyBzdWNoIHRo
YXQgdGhlIGV4aXN0aW5nIGFsdGVyTnVtYmVyKCkKKyAgICAgICAgY2FuIHVzZSBpbmZvcm1hdGlv
biBiYXNlZCBvbiB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24sIGFuZCBDb2RlTWlycm9yRHJh
Z1RvQWx0ZXJOdW1iZXJDb250cm9sbGVyCisgICAgICAgIGNhbiB1c2UgaW5mb3JtYXRpb24gYmFz
ZWQgb24gdGhlIGhvdmVyZWQgdG9rZW4uCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvZGVN
aXJyb3JEcmFnVG9BbHRlck51bWJlckNvbnRyb2xsZXIuY3NzOiBBZGRlZC4KKyAgICAgICAgKC5D
b2RlTWlycm9yLmRyYWctdG8tYWRqdXN0IC5Db2RlTWlycm9yLWxpbmVzKToKKyAgICAgICAgU2V0
IHRoZSBjdXJzb3IgdG8gImNvbC1yZXNpemUiIHdoZW4gYSBudW1iZXIgdG9rZW4gaXMgaG92ZXJl
ZCBhbmQgdGhlIG9wdGlvbiBrZXkKKyAgICAgICAgbW9kaWZpZXIgaXMgcHJlc3NlZC4KKworICAg
ICAgICAqIFVzZXJJbnRlcmZhY2UvQ29kZU1pcnJvckRyYWdUb0FsdGVyTnVtYmVyQ29udHJvbGxl
ci5qczogQWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckRyYWdUb0FsdGVy
TnVtYmVyQ29udHJvbGxlcik6CisgICAgICAgIFdlIGRlZmluZSB0aGUgbmV3ICJkcmFnVG9BZGp1
c3ROdW1iZXJzIiBDb2RlTWlycm9yIG9wdGlvbi4KKworICAgICAgICAoV2ViSW5zcGVjdG9yLkNv
ZGVNaXJyb3JEcmFnVG9BbHRlck51bWJlckNvbnRyb2xsZXIucHJvdG90eXBlLnNldCBlbmFibGVk
KToKKyAgICAgICAgVGhlICJlbmFibGVkIiBwcm9wZXJ0eSBjb250cm9scyB3aGV0aGVyIHRoZSBh
c3NvY2lhdGVkIENvZGVNaXJyb3IgaW5zdGFuY2UKKyAgICAgICAgbWF5IGFjdCB1cG9uIGhvdmVy
aW5nIG51bWVyaWMgdmFsdWVzIHRvIGFkanVzdCB0aGVtIHZpYSBhIGRyYWcgaW50ZXJhY3Rpb24u
CisKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yRHJhZ1RvQWx0ZXJOdW1iZXJDb250
cm9sbGVyLnByb3RvdHlwZS5oYW5kbGVFdmVudCk6CisgICAgICAgIFByb3h5IGZvciB2YXJpb3Vz
IGV2ZW50LXNwZWNpZmljIG1ldGhvZHMgdG8gZGVhbCB3aXRoIG1vdXNlIGV2ZW50cy4gV2UgYWxz
byBiaW5kCisgICAgICAgIHRoZSB2YWx1ZSBvZiB0aGUgImFjdGl2ZSIgcHJvcGVydHkgdG8gdGhl
ICJtb3VzZWVudGVyIiBhbmQgIm1vdXNlbGVhdmUiIGV2ZW50cworICAgICAgICBpZiB3ZSdyZSBu
b3QgY3VycmVudGx5IGRyYWdnaW5nLXRvLWFkanVzdC4KKworICAgICAgICAoV2ViSW5zcGVjdG9y
LkNvZGVNaXJyb3JEcmFnVG9BbHRlck51bWJlckNvbnRyb2xsZXIucHJvdG90eXBlLl9zZXRBY3Rp
dmUpOgorICAgICAgICBUaGUgImFjdGl2ZSIgcHJvcGVydHkgaXMgc2V0IHdoZW4gdGhlIG1vdXNl
IGlzIG92ZXIgdGhlIGFzc29jaWF0ZWQgQ29kZU1pcnJvcgorICAgICAgICBlZGl0b3IgYW5kIHdo
ZW4gaXQncyBvbiB3ZSB0cmFjayBhbGwgIm1vdXNlbW92ZSIgZXZlbnRzIHN1Y2ggdGhhdCB3ZSBt
YXkKKyAgICAgICAgaWRlbnRpZnkgdG9rZW5zIGNvbnRhaW5pbmcgbnVtZXJpYyB2YWx1ZXMuIFdl
IGFsc28gc3RhcnQgdHJhY2tpbmcgY2hhbmdlcyB0byB0aGUKKyAgICAgICAgb3B0aW9uIG1vZGlm
aWVyIGtleSBwcmVzcyBzdGF0ZSBzdWNoIHRoYXQgd2UgbWF5IGNoYW5nZSB0aGUgY3Vyc29yIGFj
Y29yZGluZ2x5LgorICAgICAgICBXZSBlbnN1cmUgdGhhdCB0aGUgQ29kZU1pcnJvciBpbnN0YW5j
ZSBpcyBub3QgcmVhZC1vbmx5IHN1Y2ggdGhhdCB3ZSBkb24ndAorICAgICAgICBhbGxvdyBhZGp1
c3RtZW50IG9mIG51bWVyaWMgdmFsdWVzIGluIHBsYWNlcyB3aGVyZSB0aGV5IGNvdWxkbid0IGJl
IGNvbW1pdHRlZC4KKworICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JEcmFnVG9BbHRl
ck51bWJlckNvbnRyb2xsZXIucHJvdG90eXBlLl9zZXREcmFnZ2luZyk6CisgICAgICAgIFRoZSAi
ZHJhZ2dpbmciIHByb3BlcnR5IHJlZmxlY3RzIHdoZXRoZXIgYSBkcmFnZ2luZy10by1hZGp1c3Qg
aW50ZXJhY3Rpb24KKyAgICAgICAgaXMgdW5kZXJ3YXkuIFdlIGNhbGwgaW50byBXZWJJbnNwZWN0
b3IuZWxlbWVudERyYWdTdGFydCgpIGFuZCBXZWJJbnNwZWN0b3IuZWxlbWVudERyYWdFbmQoKQor
ICAgICAgICB0byBzZXQgdGhlIGN1cnNvciB0byAiY29sLXJlc2l6ZSIgZm9yIHRoZSB3aG9sZSBk
b2N1bWVudCB3aGlsZSB0cmFja2luZyBtb3VzZW1vdmUKKyAgICAgICAgYW5kIG1vdXNldXAgZXZl
bnRzIGF0IHRoZSB3aW5kb3cgbGV2ZWwgc3VjaCB0aGF0IHdlIGNhbiBkcmFnLXRvLWFkanVzdCBl
dmVuIG91dHNpZGUKKyAgICAgICAgb2YgdGhlIGluc3BlY3RvciB3aW5kb3cuCisKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Db2RlTWlycm9yRHJhZ1RvQWx0ZXJOdW1iZXJDb250cm9sbGVyLnByb3Rv
dHlwZS5fc2V0VHJhY2tzTW91c2VDbGlja0FuZERyYWcpOgorICAgICAgICBUaGUgInRyYWNrc01v
dXNlQ2xpY2tBbmREcmFnIiBwcm9wZXJ0eSBpcyBzZXQgdG8gdHJ1ZSB3aGVuZXZlciB0aGUgY29u
dHJvbGxlcgorICAgICAgICBoYXMgZGV0ZWN0ZWQgdGhhdCBhIHRva2VuIGNvbnRhaW5pbmcgYSBu
dW1lcmljIHZhbHVlIGlzIGJlaW5nIGhvdmVyZWQgYW5kIHRoZQorICAgICAgICBvcHRpb24gbW9k
aWZpZXIga2V5IGlzIHByZXNzZWQuIFRoaXMgcHJvcGVydHkgY29udHJvbHMgdGhlIGN1cnNvciB2
YWx1ZSBmb3IgdGhlCisgICAgICAgIGhvdmVyZWQgdG9rZW4gdG8gcmVmbGVjdCB0aGF0IGEgZHJh
Zy10by1hZGp1c3QgaW50ZXJhY3Rpb24gaXMgYWxsb3dlZCBhbmQgdHJhY2tzCisgICAgICAgICJt
b3VzZWRvd24iIGV2ZW50cyBmb3Igd2hlbiBhIGRyYWdnaW5nIGludGVyYWN0aW9uIG1heSBiZSBp
bml0aWF0ZWQuCisKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yRHJhZ1RvQWx0ZXJO
dW1iZXJDb250cm9sbGVyLnByb3RvdHlwZS5fbW9kaWZpZXJzRGlkQ2hhbmdlKToKKyAgICAgICAg
U2V0cyB0aGUgInRyYWNrc01vdXNlQ2xpY2tBbmREcmFnIiBwcm9wZXJ0eSBkZXBlbmRpbmcgb24g
dGhlIGF2YWlsYWJpbGl0eSBvZiBhIGhvdmVyZWQKKyAgICAgICAgdG9rZW4gY29udGFpbmluZyBh
IG51bWVyaWMgdmFsdWUgYW5kIHRoZSBwcmVzc2VkIHN0YXRlIG9mIHRoZSBvcHRpb24gbW9kaWZp
ZWQga2V5LgorCisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckRyYWdUb0FsdGVyTnVt
YmVyQ29udHJvbGxlci5wcm90b3R5cGUuX21vdXNlTW92ZWQpOgorICAgICAgICBIYW5kbGVzICJt
b3VzZW1vdmUiIGV2ZW50cyB3aGVuIHdlJ3JlIG5vdCBpbiB0aGUgImRyYWdnaW5nIiBzdGF0ZSBz
dWNoIHRoYXQgd2UKKyAgICAgICAgY2hlY2sgdGhlIGN1cnJlbnRseSBob3ZlcmVkIHRva2VuLCBp
ZiBhbnksIHRvIHNlZSBpZiBpdCBjb250YWlucyBhIG51bWJlciB0aGF0CisgICAgICAgIHdlIG1h
eSBkcmFnLXRvLWFkanVzdC4gU3Vic2VxdWVudGx5LCB3ZSBtYXkgZW50ZXIgdGhlICJ0cmFja3NN
b3VzZUNsaWNrQW5kRHJhZyIKKyAgICAgICAgc3RhdGUuCisKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Db2RlTWlycm9yRHJhZ1RvQWx0ZXJOdW1iZXJDb250cm9sbGVyLnByb3RvdHlwZS5fbW91c2VX
YXNQcmVzc2VkKToKKyAgICAgICAgSGFuZGxlcyAibW91c2Vkb3duIiBldmVudHMgZHVyaW5nIGEg
ZHJhZy10by1hZGp1c3QgaW50ZXJhY3Rpb24uIFdlIHNpbXBseSB0cmFjaworICAgICAgICB0aGUg
Y3VycmVudCBtb3VzZSBwb3NpdGlvbiBpbiB0aGUgeC1heGlzIGFuZCBlbnRlciB0aGUgImRyYWdn
aW5nIiBzdGF0ZS4KKworICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JEcmFnVG9BbHRl
ck51bWJlckNvbnRyb2xsZXIucHJvdG90eXBlLl9tb3VzZVdhc0RyYWdnZWQpOgorICAgICAgICBI
YW5kbGVzICJtb3VzZW1vdmUiIGV2ZW50cyB3aGVuIHdlIGFyZSBpbiB0aGUgImRyYWdnaW5nIiBz
dGF0ZS4gV2UgY29tcGFyZSB0aGUKKyAgICAgICAgY3VycmVudCBtb3VzZSBwb3NpdGlvbiBpbiB0
aGUgeC1heGlzIHdpdGggdGhlIGxhc3QgcmVjb3JlZGVkIHZhbHVlIGFuZCBkZXRlcm1pbmUKKyAg
ICAgICAgdGhlIGFtb3VudCBieSB3aGljaCB3ZSBzaG91bGQgYWRqdXN0IHRoZSB2YWx1ZSwgdGFr
aW5nIGludG8gYWNjb3VudCB0aGUgc2hpZnQgYW5kCisgICAgICAgIGNvbnRyb2wgbW9kaWZpZXIg
a2V5cy4gV2UgdGhlbiBjYWxsIGludG8gV2ViSW5zcGVjdG9yLmFsdGVyTnVtYmVySW5SYW5nZSgp
IHRvCisgICAgICAgIGFwcGx5IHRoZSBjaGFuZ2UgYW1vdW50IHRvIHRoZSBhc3NvY2lhdGVkIENv
ZGVNaXJyb3IgZWRpdG9yLgorCisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckRyYWdU
b0FsdGVyTnVtYmVyQ29udHJvbGxlci5wcm90b3R5cGUuX21vdXNlV2FzUmVsZWFzZWQpOgorICAg
ICAgICBIYW5kbGVzICJtb3VzZXVwIiBldmVudHMsIHNpbXBseSBleGl0aW5nIHRoZSAiZHJhZ2dp
bmciIHN0YXRlIGFuZCByZXNldHRpbmcgb3RoZXIKKyAgICAgICAgcGFyYW1ldGVycyB3ZSB3b3Vs
ZCBoYXZlIGN1c3RvbWl6ZWQgYXMgYSByZXN1bHQgb2YgdGhlIGRyYWctdG8tYWRqdXN0IGludGVy
YWN0aW9uLgorCisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckRyYWdUb0FsdGVyTnVt
YmVyQ29udHJvbGxlci5wcm90b3R5cGUuX3Jlc2V0KToKKyAgICAgICAgUmVzZXR0aW5nIHNvbWUg
cGFyYW1ldGVycyB3ZSB3b3VsZCBoYXZlIGN1c3RvbWl6ZWQgYXMgYSByZXN1bHQgb2YgdGhlIGRy
YWctdG8tYWRqdXN0CisgICAgICAgIGludGVyYWN0aW9uLgorCisgICAgICAgICogVXNlckludGVy
ZmFjZS9NYWluLmh0bWw6CisgICAgICAgIEluY2x1ZGUgdGhlIG5ldyBDb2RlTWlycm9yRHJhZ1Rv
QWx0ZXJOdW1iZXJDb250cm9sbGVyLntqc3xjc3N9IGZpbGVzLgorCisgICAgICAgICogVXNlcklu
dGVyZmFjZS9NYWluLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLmVsZW1lbnREcmFnU3RhcnQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLmVsZW1lbnREcmFnRW5kKToKKyAgICAgICAgQWRkIGFu
IGV4dHJhIHBhcmFtZXRlciB0byBlbGVtZW50RHJhZ1N0YXJ0KCkgc3VjaCB0aGF0IHRoZSBjYWxs
ZXIgbWF5IHNwZWNpZnkgdGhlIGV2ZW50CisgICAgICAgIHRhcmdldCBmb3IgdGhlICJtb3VzZW1v
dmUiIGFuZCAibW91c2V1cCIgZXZlbnRzLgorCiAyMDEzLTA3LTE3ICBTZW9ranUgS3dvbiAgPHNl
b2tqdS5rd29uQGdtYWlsLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBGaXggYSB0eXBv
IGluIFdlYkluc3BlY3Rvci5sb2FkZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL0NvZGVNaXJyb3JBZGRpdGlvbnMuanMgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Db2RlTWlycm9yQWRkaXRpb25zLmpzCmluZGV4IDFhYzljYmZl
MDlhNTNmZjFjMzU2YjkwZjA2MDYyMjg0Y2YxOTRlZDMuLmRiOTUwOGM5OWUzNjFmNjBlOGQ3NGRi
MTNlZmFhNDIyMDE1NTYwNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0NvZGVNaXJyb3JBZGRpdGlvbnMuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvQ29kZU1pcnJvckFkZGl0aW9ucy5qcwpAQCAtMjgxLDIzICsyODEs
MTkgQEAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSk7CiAKLSAgICBmdW5jdGlvbiBhbHRl
ck51bWJlcihhbW91bnQsIGNvZGVNaXJyb3IpCi0gICAgewotICAgICAgICB2YXIgc2VsZWN0aW9u
QW5jaG9yID0gY29kZU1pcnJvci5nZXRDdXJzb3IoImFuY2hvciIpOwotICAgICAgICB2YXIgc2Vs
ZWN0aW9uSGVhZCA9IGNvZGVNaXJyb3IuZ2V0Q3Vyc29yKCJoZWFkIik7Ci0KKyAgICBDb2RlTWly
cm9yLmRlZmluZUV4dGVuc2lvbigiYWx0ZXJOdW1iZXJJblJhbmdlIiwgZnVuY3Rpb24oYW1vdW50
LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgYWZmZWN0c1NlbGVjdGlvbikgewogICAgICAg
ICAvLyBXZSBkb24ndCB0cnkgaWYgdGhlIHJhbmdlIGlzIG11bHRpbGluZSwgcGFzcyB0byBhbm90
aGVyIGtleSBoYW5kbGVyLgotICAgICAgICBpZiAoc2VsZWN0aW9uQW5jaG9yLmxpbmUgIT09IHNl
bGVjdGlvbkhlYWQubGluZSkKLSAgICAgICAgICAgIHJldHVybiBDb2RlTWlycm9yLlBhc3M7Cisg
ICAgICAgIGlmIChzdGFydFBvc2l0aW9uLmxpbmUgIT09IGVuZFBvc2l0aW9uLmxpbmUpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgdmFyIGxpbmUgPSBjb2RlTWlycm9yLmdl
dExpbmUoc2VsZWN0aW9uQW5jaG9yLmxpbmUpOworICAgICAgICB2YXIgbGluZSA9IHRoaXMuZ2V0
TGluZShzdGFydFBvc2l0aW9uLmxpbmUpOwogCiAgICAgICAgIHZhciBmb3VuZFBlcmlvZCA9IGZh
bHNlOwogCiAgICAgICAgIHZhciBzdGFydCA9IE5hTjsKICAgICAgICAgdmFyIGVuZCA9IE5hTjsK
IAotICAgICAgICBmb3IgKHZhciBpID0gc2VsZWN0aW9uQW5jaG9yLmNoOyBpID49IDA7IC0taSkg
eworICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRQb3NpdGlvbi5jaDsgaSA+PSAwOyAtLWkpIHsK
ICAgICAgICAgICAgIHZhciBjaGFyYWN0ZXIgPSBsaW5lLmNoYXJBdChpKTsKIAogICAgICAgICAg
ICAgaWYgKGNoYXJhY3RlciA9PT0gIi4iKSB7CkBAIC0zMDYsNyArMzAyLDcgQEAKICAgICAgICAg
ICAgICAgICBmb3VuZFBlcmlvZCA9IHRydWU7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoYXJh
Y3RlciAhPT0gIi0iICYmIGNoYXJhY3RlciAhPT0gIisiICYmIGlzTmFOKHBhcnNlSW50KGNoYXJh
Y3RlcikpKSB7CiAgICAgICAgICAgICAgICAgLy8gRm91bmQgdGhlIGVuZCBhbHJlYWR5LCBqdXN0
IHNjYW4gYmFja3dhcmRzLgotICAgICAgICAgICAgICAgIGlmIChpID09PSBzZWxlY3Rpb25BbmNo
b3IuY2gpIHsKKyAgICAgICAgICAgICAgICBpZiAoaSA9PT0gc3RhcnRQb3NpdGlvbi5jaCkgewog
ICAgICAgICAgICAgICAgICAgICBlbmQgPSBpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICB9CkBAIC0zMTgsNyArMzE0LDcgQEAKICAgICAgICAgfQogCiAg
ICAgICAgIGlmIChpc05hTihlbmQpKSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gc2VsZWN0
aW9uQW5jaG9yLmNoICsgMTsgaSA8IGxpbmUubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGZv
ciAodmFyIGkgPSBzdGFydFBvc2l0aW9uLmNoICsgMTsgaSA8IGxpbmUubGVuZ3RoOyArK2kpIHsK
ICAgICAgICAgICAgICAgICB2YXIgY2hhcmFjdGVyID0gbGluZS5jaGFyQXQoaSk7CiAKICAgICAg
ICAgICAgICAgICBpZiAoY2hhcmFjdGVyID09PSAiLiIpIHsKQEAgLTMzOSw3ICszMzUsNyBAQAog
CiAgICAgICAgIC8vIE5vIG51bWJlciByYW5nZSBmb3VuZCwgcGFzcyB0byBhbm90aGVyIGtleSBo
YW5kbGVyLgogICAgICAgICBpZiAoaXNOYU4oc3RhcnQpIHx8IGlzTmFOKGVuZCkpCi0gICAgICAg
ICAgICByZXR1cm4gQ29kZU1pcnJvci5QYXNzOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgICAgIHZhciBudW1iZXIgPSBwYXJzZUZsb2F0KGxpbmUuc3Vic3RyaW5nKHN0YXJ0LCBl
bmQpKTsKICAgICAgICAgaWYgKG51bWJlciA8IDEgJiYgbnVtYmVyID49IC0xICYmIGFtb3VudCA9
PT0gMSkKQEAgLTM1MiwyMSArMzQ4LDM1IEBACiAgICAgICAgIHZhciBhbHRlcmVkTnVtYmVyID0g
TnVtYmVyKChudW1iZXIgKyBhbW91bnQpLnRvRml4ZWQoNikpOwogICAgICAgICB2YXIgYWx0ZXJl
ZE51bWJlclN0cmluZyA9IGFsdGVyZWROdW1iZXIudG9TdHJpbmcoKTsKIAotICAgICAgICB2YXIg
ZnJvbSA9IHtsaW5lOiBzZWxlY3Rpb25BbmNob3IubGluZSwgY2g6IHN0YXJ0fTsKLSAgICAgICAg
dmFyIHRvID0ge2xpbmU6IHNlbGVjdGlvbkFuY2hvci5saW5lLCBjaDogZW5kfTsKKyAgICAgICAg
dmFyIGZyb20gPSB7bGluZTogc3RhcnRQb3NpdGlvbi5saW5lLCBjaDogc3RhcnR9OworICAgICAg
ICB2YXIgdG8gPSB7bGluZTogc3RhcnRQb3NpdGlvbi5saW5lLCBjaDogZW5kfTsKIAotICAgICAg
ICBjb2RlTWlycm9yLnJlcGxhY2VSYW5nZShhbHRlcmVkTnVtYmVyU3RyaW5nLCBmcm9tLCB0byk7
CisgICAgICAgIHRoaXMucmVwbGFjZVJhbmdlKGFsdGVyZWROdW1iZXJTdHJpbmcsIGZyb20sIHRv
KTsKIAotICAgICAgICB2YXIgbmV3VG8gPSB7bGluZTogc2VsZWN0aW9uQW5jaG9yLmxpbmUsIGNo
OiBmcm9tLmNoICsgYWx0ZXJlZE51bWJlclN0cmluZy5sZW5ndGh9OworICAgICAgICBpZiAoYWZm
ZWN0c1NlbGVjdGlvbikgeworICAgICAgICAgICAgdmFyIG5ld1RvID0ge2xpbmU6IHN0YXJ0UG9z
aXRpb24ubGluZSwgY2g6IGZyb20uY2ggKyBhbHRlcmVkTnVtYmVyU3RyaW5nLmxlbmd0aH07CiAK
LSAgICAgICAgLy8gRml4IHVwIHRoZSBzZWxlY3Rpb24gc28gaXQgZm9sbG93cyB0aGUgaW5jcmVh
c2Ugb3IgZGVjcmVhc2UgaW4gdGhlIHJlcGxhY2VtZW50IGxlbmd0aC4KLSAgICAgICAgaWYgKHNl
bGVjdGlvbkhlYWQuY2ggPj0gdG8uY2gpCi0gICAgICAgICAgICBzZWxlY3Rpb25IZWFkID0gbmV3
VG87CisgICAgICAgICAgICAvLyBGaXggdXAgdGhlIHNlbGVjdGlvbiBzbyBpdCBmb2xsb3dzIHRo
ZSBpbmNyZWFzZSBvciBkZWNyZWFzZSBpbiB0aGUgcmVwbGFjZW1lbnQgbGVuZ3RoLgorICAgICAg
ICAgICAgaWYgKGVuZFBvc2l0aW9uLmNoID49IHRvLmNoKQorICAgICAgICAgICAgICAgIGVuZFBv
c2l0aW9uID0gbmV3VG87CiAKLSAgICAgICAgaWYgKHNlbGVjdGlvbkFuY2hvci5jaCA+PSB0by5j
aCkKLSAgICAgICAgICAgIHNlbGVjdGlvbkFuY2hvciA9IG5ld1RvOworICAgICAgICAgICAgaWYg
KHN0YXJ0UG9zaXRpb24uY2ggPj0gdG8uY2gpCisgICAgICAgICAgICAgICAgc3RhcnRQb3NpdGlv
biA9IG5ld1RvOworCisgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvbihzdGFydFBvc2l0aW9u
LCBlbmRQb3NpdGlvbik7CisgICAgICAgIH0KIAotICAgICAgICBjb2RlTWlycm9yLnNldFNlbGVj
dGlvbihzZWxlY3Rpb25BbmNob3IsIHNlbGVjdGlvbkhlYWQpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9KTsKKworICAgIGZ1bmN0aW9uIGFsdGVyTnVtYmVyKGFtb3VudCwgY29kZU1pcnJv
cikKKyAgICB7CisgICAgICAgIHZhciBzdGFydFBvc2l0aW9uID0gY29kZU1pcnJvci5nZXRDdXJz
b3IoImFuY2hvciIpOworICAgICAgICB2YXIgZW5kUG9zaXRpb24gPSBjb2RlTWlycm9yLmdldEN1
cnNvcigiaGVhZCIpOworCisgICAgICAgIHZhciBmb3VuZE51bWJlciA9IGNvZGVNaXJyb3IuYWx0
ZXJOdW1iZXJJblJhbmdlKGFtb3VudCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIHRydWUp
OworICAgICAgICBpZiAoIWZvdW5kTnVtYmVyKQorICAgICAgICAgICAgcmV0dXJuIENvZGVNaXJy
b3IuUGFzczsKICAgICB9CiAKICAgICBmdW5jdGlvbiBpZ25vcmVLZXkoY29kZU1pcnJvcikKQEAg
LTQxMCw2ICs0MjAsNyBAQAogICAgIGV4dHJhSlNPTlR5cGVzLmZvckVhY2goZnVuY3Rpb24odHlw
ZSkgewogICAgICAgICBDb2RlTWlycm9yLmRlZmluZU1JTUUodHlwZSwge25hbWU6ICJqYXZhc2Ny
aXB0IiwganNvbjogdHJ1ZX0pOwogICAgIH0pOworCiB9KSgpOwogCiBXZWJJbnNwZWN0b3IuY29t
cGFyZUNvZGVNaXJyb3JQb3NpdGlvbnMgPSBmdW5jdGlvbihhLCBiKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29kZU1pcnJvckRyYWdUb0FsdGVyTnVt
YmVyQ29udHJvbGxlci5jc3MgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9D
b2RlTWlycm9yRHJhZ1RvQWx0ZXJOdW1iZXJDb250cm9sbGVyLmNzcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNjdk
NmIzNjFmMzRmM2Y0NmUzNzA3NDVmMjcwZDQ3ODYxOGRiNzFlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29kZU1pcnJvckRyYWdUb0FsdGVy
TnVtYmVyQ29udHJvbGxlci5jc3MKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy5Db2Rl
TWlycm9yLmRyYWctdG8tYWRqdXN0IC5Db2RlTWlycm9yLWxpbmVzIHsKKyAgICBjdXJzb3I6IGNv
bC1yZXNpemU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9Db2RlTWlycm9yRHJhZ1RvQWx0ZXJOdW1iZXJDb250cm9sbGVyLmpzIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29kZU1pcnJvckRyYWdUb0FsdGVyTnVtYmVyQ29u
dHJvbGxlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hN2Y1ZDZlYTRlMjAwYjdlNjQ4YzM0NTUzNGZiNGQzM2Zm
Njk0YmFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQ29kZU1pcnJvckRyYWdUb0FsdGVyTnVtYmVyQ29udHJvbGxlci5qcwpAQCAtMCwwICsx
LDIyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rvci5Db2RlTWlycm9yRHJhZ1RvQWx0ZXJO
dW1iZXJDb250cm9sbGVyID0gZnVuY3Rpb24oY29kZU1pcnJvcikKK3sKKyAgICB0aGlzLl9jb2Rl
TWlycm9yID0gY29kZU1pcnJvcjsKKyAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTsKKyAgICB0aGlz
Ll9kcmFnZ2luZyA9IGZhbHNlOworICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTsKKyAgICB0aGlz
Ll90cmFja3NNb3VzZUNsaWNrQW5kRHJhZyA9IGZhbHNlOworfTsKKworV2ViSW5zcGVjdG9yLkNv
ZGVNaXJyb3JEcmFnVG9BbHRlck51bWJlckNvbnRyb2xsZXIuU3R5bGVDbGFzc05hbWUgPSAiZHJh
Zy10by1hZGp1c3QiOworCitXZWJJbnNwZWN0b3IuQ29kZU1pcnJvckRyYWdUb0FsdGVyTnVtYmVy
Q29udHJvbGxlci5wcm90b3R5cGUgPSB7CisgICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5D
b2RlTWlycm9yRHJhZ1RvQWx0ZXJOdW1iZXJDb250cm9sbGVyLAorCisgICAgLy8gUHVibGljCisK
KyAgICBzZXQgZW5hYmxlZChlbmFibGVkKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2VuYWJs
ZWQgPT09IGVuYWJsZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy5fZWxl
bWVudCA9IHRoaXMuX2NvZGVNaXJyb3IuZ2V0V3JhcHBlckVsZW1lbnQoKTsKKworICAgICAgICBp
ZiAoZW5hYmxlZCkgeworICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5hZGRFdmVudExpc3RlbmVy
KCJtb3VzZWVudGVyIiwgdGhpcyk7CisgICAgICAgICAgICB0aGlzLl9lbGVtZW50LmFkZEV2ZW50
TGlzdGVuZXIoIm1vdXNlbGVhdmUiLCB0aGlzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsIHRoaXMp
OworICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWxl
YXZlIiwgdGhpcyk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLy8gUHJvdGVjdGVkCisKKyAg
ICBoYW5kbGVFdmVudDogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICBzd2l0Y2goZXZl
bnQudHlwZSkgeworICAgICAgICBjYXNlICJtb3VzZWVudGVyIjoKKyAgICAgICAgICAgIGlmICgh
dGhpcy5fZHJhZ2dpbmcpCisgICAgICAgICAgICAgICAgdGhpcy5fc2V0QWN0aXZlKHRydWUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIm1vdXNlbGVhdmUiOgorICAgICAgICAg
ICAgaWYgKCF0aGlzLl9kcmFnZ2luZykKKyAgICAgICAgICAgICAgICB0aGlzLl9zZXRBY3RpdmUo
ZmFsc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIm1vdXNlbW92ZSI6Cisg
ICAgICAgICAgICBpZiAodGhpcy5fZHJhZ2dpbmcpCisgICAgICAgICAgICAgICAgdGhpcy5fbW91
c2VXYXNEcmFnZ2VkKGV2ZW50KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0
aGlzLl9tb3VzZU1vdmVkKGV2ZW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
ICJtb3VzZWRvd24iOgorICAgICAgICAgICAgdGhpcy5fbW91c2VXYXNQcmVzc2VkKGV2ZW50KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJtb3VzZXVwIjoKKyAgICAgICAgICAg
IHRoaXMuX21vdXNlV2FzUmVsZWFzZWQoZXZlbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9LAorCisgICAgLy8gUHJpdmF0ZQorCisgICAgX3NldEFjdGl2ZTogZnVuY3Rp
b24oYWN0aXZlKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gYWN0aXZlIHx8
IHRoaXMuX2NvZGVNaXJyb3IuZ2V0T3B0aW9uKCJyZWFkT25seSIpKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIGlmIChhY3RpdmUpIHsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5u
b3RpZmljYXRpb25zLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLk5vdGlmaWNhdGlvbi5H
bG9iYWxNb2RpZmllcktleXNEaWRDaGFuZ2UsIHRoaXMuX21vZGlmaWVyc0RpZENoYW5nZSwgdGhp
cyk7CisgICAgICAgICAgICB0aGlzLl9lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92
ZSIsIHRoaXMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLm5v
dGlmaWNhdGlvbnMucmVtb3ZlRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuTm90aWZpY2F0aW9u
Lkdsb2JhbE1vZGlmaWVyS2V5c0RpZENoYW5nZSwgdGhpcy5fbW9kaWZpZXJzRGlkQ2hhbmdlLCB0
aGlzKTsKKyAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91
c2Vtb3ZlIiwgdGhpcyk7CisgICAgICAgICAgICB0aGlzLl9ob3ZlcmVkVG9rZW5JbmZvID0gbnVs
bDsKKyAgICAgICAgICAgIHRoaXMuX3NldFRyYWNrc01vdXNlQ2xpY2tBbmREcmFnKGZhbHNlKTsK
KyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX2FjdGl2ZSA9IGFjdGl2ZTsKKyAgICB9LAorCisg
ICAgX3NldERyYWdnaW5nOiBmdW5jdGlvbihkcmFnZ2luZykKKyAgICB7CisgICAgICAgIGlmICh0
aGlzLl9kcmFnZ2luZyA9PT0gZHJhZ2dpbmcpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgICAgICBjb25zb2xlLmFzc2VydCh3aW5kb3cuZXZlbnQpOworICAgICAgICBpZiAoZHJh
Z2dpbmcpCisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZWxlbWVudERyYWdTdGFydCh0aGlzLl9l
bGVtZW50LCB0aGlzLCB0aGlzLCB3aW5kb3cuZXZlbnQsICJjb2wtcmVzaXplIiwgd2luZG93KTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmVsZW1lbnREcmFnRW5kKHdp
bmRvdy5ldmVudCk7CisKKyAgICAgICAgdGhpcy5fZHJhZ2dpbmcgPSBkcmFnZ2luZzsKKyAgICB9
LAorCisgICAgX3NldFRyYWNrc01vdXNlQ2xpY2tBbmREcmFnOiBmdW5jdGlvbih0cmFja3NNb3Vz
ZUNsaWNrQW5kRHJhZykKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl90cmFja3NNb3VzZUNsaWNr
QW5kRHJhZyA9PT0gdHJhY2tzTW91c2VDbGlja0FuZERyYWcpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgICAgICBpZiAodHJhY2tzTW91c2VDbGlja0FuZERyYWcpIHsKKyAgICAg
ICAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChXZWJJbnNwZWN0b3IuQ29kZU1pcnJv
ckRyYWdUb0FsdGVyTnVtYmVyQ29udHJvbGxlci5TdHlsZUNsYXNzTmFtZSk7CisgICAgICAgICAg
ICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgdGhpcywgdHJ1ZSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUo
V2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JEcmFnVG9BbHRlck51bWJlckNvbnRyb2xsZXIuU3R5bGVD
bGFzc05hbWUpOworICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNl
ZG93biIsIHRoaXMsIHRydWUpOworICAgICAgICAgICAgdGhpcy5fc2V0RHJhZ2dpbmcoZmFsc2Up
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0aGlzLl90cmFja3NNb3VzZUNsaWNrQW5k
RHJhZyA9IHRyYWNrc01vdXNlQ2xpY2tBbmREcmFnOworICAgIH0sCisKKyAgICBfbW9kaWZpZXJz
RGlkQ2hhbmdlOiBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIHRoaXMuX3NldFRyYWNr
c01vdXNlQ2xpY2tBbmREcmFnKHRoaXMuX2hvdmVyZWRUb2tlbkluZm8gJiYgdGhpcy5faG92ZXJl
ZFRva2VuSW5mby5jb250YWluc051bWJlciAmJiBXZWJJbnNwZWN0b3IubW9kaWZpZXJLZXlzLmFs
dEtleSk7CisgICAgfSwKKyAgICAKKyAgICBfbW91c2VNb3ZlZDogZnVuY3Rpb24oZXZlbnQpCisg
ICAgeworICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLl9jb2RlTWlycm9yLmNvb3Jkc0NoYXIo
e2xlZnQ6IGV2ZW50LnBhZ2VYLCB0b3A6IGV2ZW50LnBhZ2VZfSk7CisgICAgICAgIHZhciB0b2tl
biA9IHRoaXMuX2NvZGVNaXJyb3IuZ2V0VG9rZW5BdChwb3NpdGlvbik7CisKKyAgICAgICAgaWYg
KCF0b2tlbiB8fCAhdG9rZW4udHlwZSB8fCAhdG9rZW4uc3RyaW5nKSB7CisgICAgICAgICAgICBp
ZiAodGhpcy5faG92ZXJlZFRva2VuSW5mbykKKyAgICAgICAgICAgICAgICB0aGlzLl9yZXNldCgp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gU3RvcCByaWdo
dCBoZXJlIGlmIHdlJ3JlIGhvdmVyaW5nIHRoZSBzYW1lIHRva2VuIGFzIHdlIHdlcmUgbGFzdCB0
aW1lLgorICAgICAgICBpZiAodGhpcy5faG92ZXJlZFRva2VuSW5mbyAmJiB0aGlzLl9ob3ZlcmVk
VG9rZW5JbmZvLmxpbmUgPT09IHBvc2l0aW9uLmxpbmUgJiYKKyAgICAgICAgICAgIHRoaXMuX2hv
dmVyZWRUb2tlbkluZm8udG9rZW4uc3RhcnQgPT09IHRva2VuLnN0YXJ0ICYmIHRoaXMuX2hvdmVy
ZWRUb2tlbkluZm8udG9rZW4uZW5kID09PSB0b2tlbi5lbmQpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgdmFyIGNvbnRhaW5zTnVtYmVyID0gdG9rZW4udHlwZS5pbmRleE9mKCJudW1i
ZXIiKSAhPT0gLTE7CisgICAgICAgIHRoaXMuX2hvdmVyZWRUb2tlbkluZm8gPSB7CisgICAgICAg
ICAgICB0b2tlbjogdG9rZW4sCisgICAgICAgICAgICBsaW5lOiBwb3NpdGlvbi5saW5lLAorICAg
ICAgICAgICAgY29udGFpbnNOdW1iZXI6IGNvbnRhaW5zTnVtYmVyLAorICAgICAgICAgICAgc3Rh
cnRQb3NpdGlvbjogeworICAgICAgICAgICAgICAgIGNoOiB0b2tlbi5zdGFydCwKKyAgICAgICAg
ICAgICAgICBsaW5lOiBwb3NpdGlvbi5saW5lCisgICAgICAgICAgICB9LAorICAgICAgICAgICAg
ZW5kUG9zaXRpb246IHsKKyAgICAgICAgICAgICAgICBjaDogdG9rZW4uZW5kLAorICAgICAgICAg
ICAgICAgIGxpbmU6IHBvc2l0aW9uLmxpbmUKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKwor
ICAgICAgICB0aGlzLl9zZXRUcmFja3NNb3VzZUNsaWNrQW5kRHJhZyhjb250YWluc051bWJlciAm
JiBldmVudC5hbHRLZXkpOworICAgIH0sCisgICAgCisgICAgX21vdXNlV2FzUHJlc3NlZDogZnVu
Y3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB0aGlzLl9sYXN0WCA9IGV2ZW50LnNjcmVlblg7
CisKKyAgICAgICAgdGhpcy5fc2V0RHJhZ2dpbmcodHJ1ZSk7CisKKyAgICAgICAgZXZlbnQucHJl
dmVudERlZmF1bHQoKTsKKyAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgfSwK
KworICAgIF9tb3VzZVdhc0RyYWdnZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAg
dmFyIHggPSBldmVudC5zY3JlZW5YOworICAgICAgICB2YXIgYW1vdW50ID0geCAtIHRoaXMuX2xh
c3RYOworCisgICAgICAgIGlmIChNYXRoLmFicyhhbW91bnQpIDwgMSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICB0aGlzLl9sYXN0WCA9IHg7CisKKyAgICAgICAgaWYgKGV2ZW50LmN0
cmxLZXkpCisgICAgICAgICAgICBhbW91bnQgLz0gMTA7CisgICAgICAgIGVsc2UgaWYgKGV2ZW50
LnNoaWZ0S2V5KQorICAgICAgICAgICAgYW1vdW50ICo9IDEwOworCisgICAgICAgIHRoaXMuX2Nv
ZGVNaXJyb3IuYWx0ZXJOdW1iZXJJblJhbmdlKGFtb3VudCwgdGhpcy5faG92ZXJlZFRva2VuSW5m
by5zdGFydFBvc2l0aW9uLCB0aGlzLl9ob3ZlcmVkVG9rZW5JbmZvLmVuZFBvc2l0aW9uLCBmYWxz
ZSk7CisKKyAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgZXZlbnQuc3Rv
cFByb3BhZ2F0aW9uKCk7CisgICAgfSwKKworICAgIF9tb3VzZVdhc1JlbGVhc2VkOiBmdW5jdGlv
bihldmVudCkKKyAgICB7CisgICAgICAgIHRoaXMuX3NldERyYWdnaW5nKGZhbHNlKTsKKworICAg
ICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRp
b24oKTsKKworICAgICAgICB0aGlzLl9yZXNldCgpOworICAgIH0sCisgICAgCisgICAgX3Jlc2V0
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9ob3ZlcmVkVG9rZW5JbmZvID0gbnVs
bDsKKyAgICAgICAgdGhpcy5fc2V0VHJhY2tzTW91c2VDbGlja0FuZERyYWcoZmFsc2UpOworICAg
ICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoV2ViSW5zcGVjdG9yLkNvZGVNaXJy
b3JEcmFnVG9BbHRlck51bWJlckNvbnRyb2xsZXIuU3R5bGVDbGFzc05hbWUpOworICAgIH0KK307
CisKK0NvZGVNaXJyb3IuZGVmaW5lT3B0aW9uKCJkcmFnVG9BZGp1c3ROdW1iZXJzIiwgdHJ1ZSwg
ZnVuY3Rpb24oY29kZU1pcnJvciwgdmFsdWUsIG9sZFZhbHVlKSB7CisgICAgaWYgKCFjb2RlTWly
cm9yLmRyYWdUb0FsdGVyTnVtYmVyQ29udHJvbGxlcikKKyAgICAgICAgY29kZU1pcnJvci5kcmFn
VG9BbHRlck51bWJlckNvbnRyb2xsZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JEcmFn
VG9BbHRlck51bWJlckNvbnRyb2xsZXIoY29kZU1pcnJvcik7CisgICAgY29kZU1pcnJvci5kcmFn
VG9BbHRlck51bWJlckNvbnRyb2xsZXIuZW5hYmxlZCA9IHZhbHVlOworfSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwKaW5kZXggZTBiZjI5N2ZkMTZm
ZDcwOGFlNjI1NjJhY2IxMjNhZGQ2ZmRkNzY1NC4uNGJlNTJhNWMzMmE5Zjc4NTNiNzA4MDJhNzI3
YzEzYzc3MWM2MWUxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvTWFpbi5odG1sCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L01haW4uaHRtbApAQCAtMTE2LDYgKzExNiw3IEBACiAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiBocmVmPSJDb2RlTWlycm9yT3ZlcnJpZGVzLmNzcyI+CiAgICAgPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiBocmVmPSJDb25zb2xlUHJvbXB0LmNzcyI+CiAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiBocmVmPSJDU1NDb2xvclBpY2tlci5jc3MiPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIg
aHJlZj0iQ29kZU1pcnJvckRyYWdUb0FsdGVyTnVtYmVyQ29udHJvbGxlci5jc3MiPgogCiAgICAg
PHNjcmlwdCBzcmM9IkV4dGVybmFsL0NvZGVNaXJyb3IvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+
CiAgICAgPHNjcmlwdCBzcmM9IkV4dGVybmFsL0NvZGVNaXJyb3IvY29tbWVudC5qcyI+PC9zY3Jp
cHQ+CkBAIC0xMzksNiArMTQwLDcgQEAKICAgICA8c2NyaXB0IHNyYz0iVXRpbGl0aWVzLmpzIj48
L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iV2ViSW5zcGVjdG9yLmpzIj48L3NjcmlwdD4KICAg
ICA8c2NyaXB0IHNyYz0iT2JqZWN0LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iQ29k
ZU1pcnJvckRyYWdUb0FsdGVyTnVtYmVyQ29udHJvbGxlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNj
cmlwdCBzcmM9IkNvZGVNaXJyb3JBZGRpdGlvbnMuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQg
c3JjPSJTZXR0aW5nLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iSW5zcGVjdG9yQmFj
a2VuZC5qcyI+PC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9NYWluLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
TWFpbi5qcwppbmRleCAwZTYzOTVlZTNjNWM4YjI2MWZmZTY5OWZhNDE1NWUzYjJkOWNiZWQ2Li44
ZmE4YTRlZjE2YjAzYjA1ZTNmODEwNzhiMmZkYzJlNmUyNDg2MWQ3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmpzCisrKyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uanMKQEAgLTEzMzksNyArMTMzOSw3IEBAIFdl
Ykluc3BlY3Rvci5fZ2VuZXJhdGVEaXNjbG9zdXJlVHJpYW5nbGVJbWFnZXMgPSBmdW5jdGlvbigp
CiAgICAgZ2VuZXJhdGVDb2xvcmVkSW1hZ2VzRm9yQ1NTKCJJbWFnZXMvRGlzY2xvc3VyZVRyaWFu
Z2xlVGlueUNsb3NlZC5wZGYiLCBzcGVjaWZpY2F0aW9ucywgOCwgOCwgImRpc2Nsb3N1cmUtdHJp
YW5nbGUtdGlueS1jbG9zZWQtIik7CiB9CiAKLVdlYkluc3BlY3Rvci5lbGVtZW50RHJhZ1N0YXJ0
ID0gZnVuY3Rpb24oZWxlbWVudCwgZGl2aWRlckRyYWcsIGVsZW1lbnREcmFnRW5kLCBldmVudCwg
Y3Vyc29yKQorV2ViSW5zcGVjdG9yLmVsZW1lbnREcmFnU3RhcnQgPSBmdW5jdGlvbihlbGVtZW50
LCBkaXZpZGVyRHJhZywgZWxlbWVudERyYWdFbmQsIGV2ZW50LCBjdXJzb3IsIGV2ZW50VGFyZ2V0
KQogewogICAgIGlmIChXZWJJbnNwZWN0b3IuX2VsZW1lbnREcmFnZ2luZ0V2ZW50TGlzdGVuZXIg
fHwgV2ViSW5zcGVjdG9yLl9lbGVtZW50RW5kRHJhZ2dpbmdFdmVudExpc3RlbmVyKQogICAgICAg
ICBXZWJJbnNwZWN0b3IuZWxlbWVudERyYWdFbmQoZXZlbnQpOwpAQCAtMTM2MCw4ICsxMzYwLDEw
IEBAIFdlYkluc3BlY3Rvci5lbGVtZW50RHJhZ1N0YXJ0ID0gZnVuY3Rpb24oZWxlbWVudCwgZGl2
aWRlckRyYWcsIGVsZW1lbnREcmFnRW5kLCBlCiAgICAgV2ViSW5zcGVjdG9yLl9lbGVtZW50RW5k
RHJhZ2dpbmdFdmVudExpc3RlbmVyID0gZWxlbWVudERyYWdFbmQ7CiAgICAgCiAgICAgdmFyIHRh
cmdldERvY3VtZW50ID0gZXZlbnQudGFyZ2V0Lm93bmVyRG9jdW1lbnQ7Ci0gICAgdGFyZ2V0RG9j
dW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgZGl2aWRlckRyYWcsIHRydWUpOwot
ICAgIHRhcmdldERvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCBlbGVtZW50RHJh
Z0VuZCwgdHJ1ZSk7CisKKyAgICBXZWJJbnNwZWN0b3IuX2VsZW1lbnREcmFnZ2luZ0V2ZW50VGFy
Z2V0ID0gZXZlbnRUYXJnZXQgfHwgdGFyZ2V0RG9jdW1lbnQ7CisgICAgV2ViSW5zcGVjdG9yLl9l
bGVtZW50RHJhZ2dpbmdFdmVudFRhcmdldC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCBk
aXZpZGVyRHJhZywgdHJ1ZSk7CisgICAgV2ViSW5zcGVjdG9yLl9lbGVtZW50RHJhZ2dpbmdFdmVu
dFRhcmdldC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgZWxlbWVudERyYWdFbmQsIHRydWUp
OwogICAgIAogICAgIHRhcmdldERvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gY3Vyc29yOwog
ICAgIApAQCAtMTM3MCwxNiArMTM3MiwxNiBAQCBXZWJJbnNwZWN0b3IuZWxlbWVudERyYWdTdGFy
dCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGRpdmlkZXJEcmFnLCBlbGVtZW50RHJhZ0VuZCwgZQogCiBX
ZWJJbnNwZWN0b3IuZWxlbWVudERyYWdFbmQgPSBmdW5jdGlvbihldmVudCkKIHsKLSAgICB2YXIg
dGFyZ2V0RG9jdW1lbnQgPSBldmVudC50YXJnZXQub3duZXJEb2N1bWVudDsKLSAgICB0YXJnZXRE
b2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCBXZWJJbnNwZWN0b3IuX2Vs
ZW1lbnREcmFnZ2luZ0V2ZW50TGlzdGVuZXIsIHRydWUpOwotICAgIHRhcmdldERvY3VtZW50LnJl
bW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCBXZWJJbnNwZWN0b3IuX2VsZW1lbnRFbmREcmFn
Z2luZ0V2ZW50TGlzdGVuZXIsIHRydWUpOworICAgIFdlYkluc3BlY3Rvci5fZWxlbWVudERyYWdn
aW5nRXZlbnRUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgV2ViSW5zcGVj
dG9yLl9lbGVtZW50RHJhZ2dpbmdFdmVudExpc3RlbmVyLCB0cnVlKTsKKyAgICBXZWJJbnNwZWN0
b3IuX2VsZW1lbnREcmFnZ2luZ0V2ZW50VGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNl
dXAiLCBXZWJJbnNwZWN0b3IuX2VsZW1lbnRFbmREcmFnZ2luZ0V2ZW50TGlzdGVuZXIsIHRydWUp
OwogICAgIAotICAgIHRhcmdldERvY3VtZW50LmJvZHkuc3R5bGUucmVtb3ZlUHJvcGVydHkoImN1
cnNvciIpOworICAgIGV2ZW50LnRhcmdldC5vd25lckRvY3VtZW50LmJvZHkuc3R5bGUucmVtb3Zl
UHJvcGVydHkoImN1cnNvciIpOwogICAgIAogICAgIGlmIChXZWJJbnNwZWN0b3IuX2VsZW1lbnRE
cmFnZ2luZ0dsYXNzUGFuZSkKICAgICAgICAgV2ViSW5zcGVjdG9yLl9lbGVtZW50RHJhZ2dpbmdH
bGFzc1BhbmUucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChXZWJJbnNwZWN0b3IuX2VsZW1lbnRE
cmFnZ2luZ0dsYXNzUGFuZSk7CiAgICAgCiAgICAgZGVsZXRlIFdlYkluc3BlY3Rvci5fZWxlbWVu
dERyYWdnaW5nR2xhc3NQYW5lOworICAgIGRlbGV0ZSBXZWJJbnNwZWN0b3IuX2VsZW1lbnREcmFn
Z2luZ0V2ZW50VGFyZ2V0OwogICAgIGRlbGV0ZSBXZWJJbnNwZWN0b3IuX2VsZW1lbnREcmFnZ2lu
Z0V2ZW50TGlzdGVuZXI7CiAgICAgZGVsZXRlIFdlYkluc3BlY3Rvci5fZWxlbWVudEVuZERyYWdn
aW5nRXZlbnRMaXN0ZW5lcjsKICAgICAK
</data>

          </attachment>
      

    </bug>

</bugzilla>