<?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>147572</bug_id>
          
          <creation_ts>2015-08-03 11:23:44 -0700</creation_ts>
          <short_desc>Web Inspector: Add VisualStyleSelectorSection</short_desc>
          <delta_ts>2015-08-10 13:50:11 -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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>147563</blocked>
    
    <blocked>147570</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Devin Rousso">hi</reporter>
          <assigned_to name="Devin Rousso">hi</assigned_to>
          <cc>bburg</cc>
    
    <cc>commit-queue</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>jonowells</cc>
    
    <cc>mattbaker</cc>
    
    <cc>nvasilyev</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1114256</commentid>
    <comment_count>0</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2015-08-03 11:23:44 -0700</bug_when>
    <thetext>Create a list for selected Node&apos;s CSS selectors that will be used in the Visual style details panel in the CSS sidebar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114266</commentid>
    <comment_count>1</comment_count>
      <attachid>258089</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2015-08-03 11:30:22 -0700</bug_when>
    <thetext>Created attachment 258089
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114724</commentid>
    <comment_count>2</comment_count>
      <attachid>258201</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2015-08-04 12:59:53 -0700</bug_when>
    <thetext>Created attachment 258201
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115218</commentid>
    <comment_count>3</comment_count>
      <attachid>258331</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2015-08-05 18:24:45 -0700</bug_when>
    <thetext>Created attachment 258331
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115364</commentid>
    <comment_count>4</comment_count>
      <attachid>258331</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2015-08-06 10:42:35 -0700</bug_when>
    <thetext>Comment on attachment 258331
Patch

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

Looking good, a few things need to be cleaned up before landing. If you could post a screenshot of the widget in action, that would be useful for review (this patch doesn&apos;t add any instantiations to the inspector UI).

&gt; Source/WebInspectorUI/ChangeLog:8
&gt; +        * UserInterface/Models/CSSRule.js:

You should add a high level description of the patch. Change notes for existing classes would speed up review as well.

&gt; Source/WebInspectorUI/UserInterface/Models/CSSRule.js:185
&gt; +        var mediaText = &quot;&quot;;

s/var/let/

&gt; Source/WebInspectorUI/UserInterface/Models/CSSStyleDeclaration.js:201
&gt; +        this.text = this._initialText;

Should this set this.modified = false?

&gt; Source/WebInspectorUI/UserInterface/Models/CSSStyleDeclaration.js:280
&gt; +        var numMediaQueries = 0;

let mediaQueriesCount

&gt; Source/WebInspectorUI/UserInterface/Models/CSSStyleDeclaration.js:292
&gt; +            styleText += &quot;    &quot;.repeat(numMediaQueries) + this._ownerRule.selectorText;

It seems like this string pasting code would be easy to regress. Can you add a little test that dumps the generated rule string for some common cases?

&gt; Source/WebInspectorUI/UserInterface/Models/CSSStyleDeclaration.js:294
&gt; +            styleText += this._selectorElement.textContent;

err, this is a model class, right? Why does it own a DOM element?

&gt; Source/WebInspectorUI/UserInterface/Views/CSSStyleDeclarationSection.js:-458
&gt; -    _generateCSSRuleString()

Oh, I guess this was just moved around. You should still clean up the let and variable names.

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorItem.css:36
&gt; +    background-color: rgb(34, 131, 246) !important;

We have moved to using hsl() for inspector colors.

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorItem.css:82
&gt; +    /* TODO: Fix cursor bar and highlight height */

We don&apos;t use TODO, either fix it or make it a FIXME.

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorItem.css:89
&gt; +    cursor bar from displaying at the beginning of the em-dash */

Nit: trailing period.

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorItem.css:90
&gt; +    content: &quot; \2014&quot;;

I would add /* em-dash */ at the end.

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorItem.js:26
&gt; +WebInspector.VisualStyleSelectorItem = class VisualStyleSelectorItem extends WebInspector.GeneralTreeElement

I found it weird that this extends TreeElement but doesn&apos;t have that suffix. Not sure if there are other cases of this, or if we want to start the trend.

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorItem.js:33
&gt; +            console.assert(style.ownerRule);

Add an instanceof check.

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorItem.js:101
&gt; +        this._listItemNode.classList.remove(&quot;editable&quot;);

Is a super call expected here?

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorItem.js:108
&gt; +        var titleText = this._mainTitleElement.textContent;

s/var/let/

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorItem.js:155
&gt; +        this._checkboxElement.title = this._checkboxElement.checked ? WebInspector.UIString(&quot;Click to disable the selected rule&quot;) : WebInspector.UIString(&quot;Click to enable the selected rule&quot;);

Nit: I would use if/else, as this line wraps very long.

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorItem.js:167
&gt; +        if (event.keyCode === 13) {

What is 13?

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorItem.js:169
&gt; +            return;

return not necessary.

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorItem.js:194
&gt; +}

Nit: trailing ;

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.css:32
&gt; +    border-bottom: 1px solid rgb(179, 179, 179);

Nit: use hsl

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.css:42
&gt; +    width: calc(100% - 85px);

sexy. Does this work?

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.css:69
&gt; +    border-left: 1px solid lightgrey;

Nit: don&apos;t use lightgrey keyword.

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.css:80
&gt; +    opacity: 0.7;

You might want to use -webkit-filter instead of opacity, which always seems to come back and cause problems with layering.

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.css:103
&gt; +    background-color: rgb(242, 242, 242);

Nit (many places): don&apos;t use rgb() or keywords.

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:2
&gt; + * Copyright (C) 2013, 2Apple Inc. All rights reserved.

err, what?

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:30
&gt; +        var selectorSection = {element: document.createElement(&quot;div&quot;)};

hmm, is this trickery required to avoid TDZ errors?

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:38
&gt; +        this._delegate = delegate || null

Nit: trailing ;

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:76
&gt; +            this._nodeStyles.__lastSelectedRule = style;

Use a symbol instead of __prop.

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:102
&gt; +            selector.addEventListener(WebInspector.VisualStyleSelectorItem.Event.StyleTextReset, this._styleTextReset.bind(this));

no need to bind, just pass `this` as third arg.

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:226
&gt; +        this._currentSelector.className = &quot;current-selector &quot; + selectedTreeElement.iconClassName;

classList.add(...)

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:228
&gt; +        var text = selectedTreeElement.mainTitle;

let selectorText = ...

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:235
&gt; +        this.dispatchEventToListeners(WebInspector.VisualStyleSelectorSection.Event.SelectorChanged);

Should this fire if the tree element is deselected, or is there always one element selected? If the latter is true, add an assertion at the top of this method.

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:254
&gt; +        var enabled = event &amp;&amp; event.data &amp;&amp; event.data.enabled;

const styleEnabled

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:255
&gt; +        var style = this.currentRule();

is this a single style declaration or a rule? Not clear from these variable names.

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:256
&gt; +        if (!style)

Should this be an assertion?

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:259
&gt; +        var text = style.text;

let styleText = ...

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:263
&gt; +        var replacement = &quot;&quot;;

// Comment or uncomment the style text.
let newStyleText = ...;

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:270
&gt; +        style[WebInspector.VisualStyleDetailsPanel.StyleDisabled] = !enabled;

Whoa, what&apos;s going on here? This should use a getter/setter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115372</commentid>
    <comment_count>5</comment_count>
      <attachid>258331</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2015-08-06 10:58:42 -0700</bug_when>
    <thetext>Comment on attachment 258331
Patch

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/CSSStyleDeclaration.js:292
&gt;&gt; +            styleText += &quot;    &quot;.repeat(numMediaQueries) + this._ownerRule.selectorText;
&gt; 
&gt; It seems like this string pasting code would be easy to regress. Can you add a little test that dumps the generated rule string for some common cases?

Yeah I&apos;ll add that.

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/CSSStyleDeclaration.js:294
&gt;&gt; +            styleText += this._selectorElement.textContent;
&gt; 
&gt; err, this is a model class, right? Why does it own a DOM element?

This was accidentally included.  I&apos;ll remove it.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorItem.js:26
&gt;&gt; +WebInspector.VisualStyleSelectorItem = class VisualStyleSelectorItem extends WebInspector.GeneralTreeElement
&gt; 
&gt; I found it weird that this extends TreeElement but doesn&apos;t have that suffix. Not sure if there are other cases of this, or if we want to start the trend.

Good point.  I&apos;ll change it to WebInspector.VisualStyleSelectorTreeItem.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorItem.js:101
&gt;&gt; +        this._listItemNode.classList.remove(&quot;editable&quot;);
&gt; 
&gt; Is a super call expected here?

No.  This is just called by TreeElement (if it exists) whenever that element is deselected.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorItem.js:167
&gt;&gt; +        if (event.keyCode === 13) {
&gt; 
&gt; What is 13?

13 is Enter

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.css:42
&gt;&gt; +    width: calc(100% - 85px);
&gt; 
&gt; sexy. Does this work?

Yeah it does.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:2
&gt;&gt; + * Copyright (C) 2013, 2Apple Inc. All rights reserved.
&gt; 
&gt; err, what?

Whoops.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:30
&gt;&gt; +        var selectorSection = {element: document.createElement(&quot;div&quot;)};
&gt; 
&gt; hmm, is this trickery required to avoid TDZ errors?

Yeah.  I also needed it to be selectorSection.element for it to work with DetailsSection as it expects a class with that property.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:226
&gt;&gt; +        this._currentSelector.className = &quot;current-selector &quot; + selectedTreeElement.iconClassName;
&gt; 
&gt; classList.add(...)

I actually want to replace the entire classList since the iconClassName may change between different treeElements.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:235
&gt;&gt; +        this.dispatchEventToListeners(WebInspector.VisualStyleSelectorSection.Event.SelectorChanged);
&gt; 
&gt; Should this fire if the tree element is deselected, or is there always one element selected? If the latter is true, add an assertion at the top of this method.

There is always one tree element selected.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:255
&gt;&gt; +        var style = this.currentRule();
&gt; 
&gt; is this a single style declaration or a rule? Not clear from these variable names.

currentStyle is much clearer.  I&apos;ll change that.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:270
&gt;&gt; +        style[WebInspector.VisualStyleDetailsPanel.StyleDisabled] = !enabled;
&gt; 
&gt; Whoa, what&apos;s going on here? This should use a getter/setter.

This is used in https://bugs.webkit.org/show_bug.cgi?id=147570.  Its a symbol that tracks whether that particular rule has been disabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115373</commentid>
    <comment_count>6</comment_count>
      <attachid>258331</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2015-08-06 10:58:43 -0700</bug_when>
    <thetext>Comment on attachment 258331
Patch

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/CSSStyleDeclaration.js:292
&gt;&gt; +            styleText += &quot;    &quot;.repeat(numMediaQueries) + this._ownerRule.selectorText;
&gt; 
&gt; It seems like this string pasting code would be easy to regress. Can you add a little test that dumps the generated rule string for some common cases?

Yeah I&apos;ll add that.

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/CSSStyleDeclaration.js:294
&gt;&gt; +            styleText += this._selectorElement.textContent;
&gt; 
&gt; err, this is a model class, right? Why does it own a DOM element?

This was accidentally included.  I&apos;ll remove it.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorItem.js:26
&gt;&gt; +WebInspector.VisualStyleSelectorItem = class VisualStyleSelectorItem extends WebInspector.GeneralTreeElement
&gt; 
&gt; I found it weird that this extends TreeElement but doesn&apos;t have that suffix. Not sure if there are other cases of this, or if we want to start the trend.

Good point.  I&apos;ll change it to WebInspector.VisualStyleSelectorTreeItem.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorItem.js:101
&gt;&gt; +        this._listItemNode.classList.remove(&quot;editable&quot;);
&gt; 
&gt; Is a super call expected here?

No.  This is just called by TreeElement (if it exists) whenever that element is deselected.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorItem.js:167
&gt;&gt; +        if (event.keyCode === 13) {
&gt; 
&gt; What is 13?

13 is Enter

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.css:42
&gt;&gt; +    width: calc(100% - 85px);
&gt; 
&gt; sexy. Does this work?

Yeah it does.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:2
&gt;&gt; + * Copyright (C) 2013, 2Apple Inc. All rights reserved.
&gt; 
&gt; err, what?

Whoops.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:30
&gt;&gt; +        var selectorSection = {element: document.createElement(&quot;div&quot;)};
&gt; 
&gt; hmm, is this trickery required to avoid TDZ errors?

Yeah.  I also needed it to be selectorSection.element for it to work with DetailsSection as it expects a class with that property.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:226
&gt;&gt; +        this._currentSelector.className = &quot;current-selector &quot; + selectedTreeElement.iconClassName;
&gt; 
&gt; classList.add(...)

I actually want to replace the entire classList since the iconClassName may change between different treeElements.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:235
&gt;&gt; +        this.dispatchEventToListeners(WebInspector.VisualStyleSelectorSection.Event.SelectorChanged);
&gt; 
&gt; Should this fire if the tree element is deselected, or is there always one element selected? If the latter is true, add an assertion at the top of this method.

There is always one tree element selected.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:255
&gt;&gt; +        var style = this.currentRule();
&gt; 
&gt; is this a single style declaration or a rule? Not clear from these variable names.

currentStyle is much clearer.  I&apos;ll change that.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:270
&gt;&gt; +        style[WebInspector.VisualStyleDetailsPanel.StyleDisabled] = !enabled;
&gt; 
&gt; Whoa, what&apos;s going on here? This should use a getter/setter.

This is used in https://bugs.webkit.org/show_bug.cgi?id=147570.  Its a symbol that tracks whether that particular rule has been disabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115378</commentid>
    <comment_count>7</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2015-08-06 11:07:04 -0700</bug_when>
    <thetext>You should also add aria roles so that these sections are accessible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115379</commentid>
    <comment_count>8</comment_count>
      <attachid>258331</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2015-08-06 11:08:06 -0700</bug_when>
    <thetext>Comment on attachment 258331
Patch

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

&gt;&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:270
&gt;&gt;&gt;&gt; +        style[WebInspector.VisualStyleDetailsPanel.StyleDisabled] = !enabled;
&gt;&gt;&gt; 
&gt;&gt;&gt; Whoa, what&apos;s going on here? This should use a getter/setter.
&gt;&gt; 
&gt;&gt; This is used in https://bugs.webkit.org/show_bug.cgi?id=147570.  Its a symbol that tracks whether that particular rule has been disabled.
&gt; 
&gt; This is used in https://bugs.webkit.org/show_bug.cgi?id=147570.  Its a symbol that tracks whether that particular rule has been disabled.

Oh, I see. I think we have settled on suffixing these with Symbol, so that this is more obvious. i.e., WebInspector.VisualStyleDetailsPanel.StyleDisabledSymbol</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115662</commentid>
    <comment_count>9</comment_count>
      <attachid>258460</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2015-08-06 23:09:52 -0700</bug_when>
    <thetext>Created attachment 258460
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115953</commentid>
    <comment_count>10</comment_count>
      <attachid>258460</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2015-08-07 18:29:38 -0700</bug_when>
    <thetext>Comment on attachment 258460
Patch

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

This patch looks ready, modulo the line comments and accessibility support. Once you add the latter or explain why it&apos;s not necessary, i&apos;ll r+ the patch.

&gt; Source/WebInspectorUI/UserInterface/Models/CSSStyleDeclaration.js:47
&gt; +        this.modified = false;

Please make it this._modified and add a getter. Or, add a getter and don&apos;t keep the member---you should be able to recompute modified as this.text === this._initialText.

&gt; Source/WebInspectorUI/UserInterface/Models/CSSStyleDeclaration.js:191
&gt; +            this.modified = modified;

Here, you can still fire the event in this branch.

&gt; Source/WebInspectorUI/UserInterface/Models/CSSStyleDeclaration.js:200
&gt; +        this.text = this._initialText;

I think this._modified would be reset here too?

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.css:110
&gt; +.details-section.visual-style-selector-section &gt; .content &gt; .selectors &gt; .selector-list &gt; .section-divider &gt; .disclosure-button,

You could use :matches to shorten this selector list.

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:2
&gt; + * Copyright (C) 2015, Apple Inc. All rights reserved.

No comma.

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:123
&gt; +                for (let existingRule of uniqueRules) {

Is there a way we can use a Map and compute a unique key rather than doing this n^2 comparison? For example, it could get the rule&apos;s id and join its array elements into a string. Even better would be to add a toString() method to CSSId, but I don&apos;t recall whether CSSId is an inspector model class or if we use the raw protocol payload.

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:193
&gt; +            let divider = new WebInspector.GeneralTreeElement(&quot;section-divider&quot;, WebInspector.UIString(&quot;Inherited from %s&quot;).format(WebInspector.displayNameForNode(inherited.node)));

Please format the string into a local on a separate line for readability.

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:224
&gt; +        this._currentSelectorElement.className = &quot;current-selector &quot; + selectedTreeElement.iconClassName;

I would add a comment that we intentionally clear past class names, so this doesn&apos;t get bulk converted by accident.

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:252
&gt; +        let styleEnabled = event &amp;&amp; event.data &amp;&amp; event.data.enabled;

Move this closer to first use.

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorTreeItem.css:74
&gt; +    -webkit-user-modify: read-write-plaintext-only;

Cool, didn&apos;t know about that.

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorTreeItem.js:30
&gt; +        let iconClassName;

I thought this wasn&apos;t supposed to work..

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorTreeItem.js:33
&gt; +            console.assert(style.ownerRule instanceof WebInspector.CSSRule);

add style.ownerRule as an argument, so it gets logged when the assertion fails.

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorTreeItem.js:72
&gt; +    // Overrides from TreeElement (Private)

I would just say

// Protected

since it&apos;s obviously making a super call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116000</commentid>
    <comment_count>11</comment_count>
      <attachid>258460</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2015-08-07 22:20:40 -0700</bug_when>
    <thetext>Comment on attachment 258460
Patch

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/CSSStyleDeclaration.js:47
&gt;&gt; +        this.modified = false;
&gt; 
&gt; Please make it this._modified and add a getter. Or, add a getter and don&apos;t keep the member---you should be able to recompute modified as this.text === this._initialText.

I&apos;ll add a getter and make it this._modified, but I still want a member variable.  The idea behind this._modified and the event firing below is to only fire the event if the modified state changes, not every single time the text is modified.  If the text is already modified from the initial state, there is no reason to fire another event since it has already been marked as modified.  If instead the text is reset back to the initial value, then an event should be fired (and again if the text is modified later).

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/CSSStyleDeclaration.js:191
&gt;&gt; +            this.modified = modified;
&gt; 
&gt; Here, you can still fire the event in this branch.

What do you mean by that?

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/CSSStyleDeclaration.js:200
&gt;&gt; +        this.text = this._initialText;
&gt; 
&gt; I think this._modified would be reset here too?

I actually don&apos;t want to reset this._modified because that will interfere with the logic in &quot;set text()&quot; above and prevent WebInspector.CSSStyleDeclaration.Event.InitialTextModified from firing.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:123
&gt;&gt; +                for (let existingRule of uniqueRules) {
&gt; 
&gt; Is there a way we can use a Map and compute a unique key rather than doing this n^2 comparison? For example, it could get the rule&apos;s id and join its array elements into a string. Even better would be to add a toString() method to CSSId, but I don&apos;t recall whether CSSId is an inspector model class or if we use the raw protocol payload.

That&apos;s a really good idea!

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorTreeItem.js:30
&gt;&gt; +        let iconClassName;
&gt; 
&gt; I thought this wasn&apos;t supposed to work..

This works just fine.  What doesn&apos;t work is using &quot;this&quot; before the super() call below.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116229</commentid>
    <comment_count>12</comment_count>
      <attachid>258460</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2015-08-10 09:56:29 -0700</bug_when>
    <thetext>Comment on attachment 258460
Patch

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

&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Models/CSSStyleDeclaration.js:47
&gt;&gt;&gt; +        this.modified = false;
&gt;&gt; 
&gt;&gt; Please make it this._modified and add a getter. Or, add a getter and don&apos;t keep the member---you should be able to recompute modified as this.text === this._initialText.
&gt; 
&gt; I&apos;ll add a getter and make it this._modified, but I still want a member variable.  The idea behind this._modified and the event firing below is to only fire the event if the modified state changes, not every single time the text is modified.  If the text is already modified from the initial state, there is no reason to fire another event since it has already been marked as modified.  If instead the text is reset back to the initial value, then an event should be fired (and again if the text is modified later).

Oh, I see. Maybe we should think of a better name for this variable, like this._haveModifiedText.

&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Models/CSSStyleDeclaration.js:191
&gt;&gt;&gt; +            this.modified = modified;
&gt;&gt; 
&gt;&gt; Here, you can still fire the event in this branch.
&gt; 
&gt; What do you mean by that?

Oh, I meant that if get modified() was not relying on a member variable, you could still use the same branch for firing the InitialTextModified event.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116246</commentid>
    <comment_count>13</comment_count>
      <attachid>258623</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2015-08-10 10:58:46 -0700</bug_when>
    <thetext>Created attachment 258623
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116259</commentid>
    <comment_count>14</comment_count>
      <attachid>258623</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2015-08-10 11:21:24 -0700</bug_when>
    <thetext>Comment on attachment 258623
Patch

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

r=me with a few things noted inline. We can tackle accessibility once it&apos;s all glued together.

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:94
&gt; +        // Reverse the array to allow ensure that splicing the array will not mess with the order.

Nit: allow ensure

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorSection.js:224
&gt; +            selectorText += &quot; \u2014 &quot; + mediaText;

Add end of line comment: // em-dash.

&gt; Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorTreeItem.js:109
&gt; +    get _selectorText()

This should either not be a getter, or should be public/protected. I think it would be fine as a public getter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116291</commentid>
    <comment_count>15</comment_count>
      <attachid>258639</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2015-08-10 12:49:41 -0700</bug_when>
    <thetext>Created attachment 258639
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116320</commentid>
    <comment_count>16</comment_count>
      <attachid>258639</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-10 13:50:06 -0700</bug_when>
    <thetext>Comment on attachment 258639
Patch

Clearing flags on attachment: 258639

Committed r188226: &lt;http://trac.webkit.org/changeset/188226&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116321</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-10 13:50:11 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258089</attachid>
            <date>2015-08-03 11:30:22 -0700</date>
            <delta_ts>2015-08-04 12:59:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147572-20150803113016.patch</filename>
            <type>text/plain</type>
            <size>40599</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IGQzYzhiODQyZTNjZGQ1ODc0N2E4MzFmN2M0MmM2
OTUyZTMzNzA0OWEuLjgyYTJjZGExZGU1NTBiNDRjYWQxZWYxNWRlZWZhZTdiODVmMzQ1OTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgxIEBACisyMDE1LTA4LTAzICBEZXZp
biBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBB
ZGQgVmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzU3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTUnVsZS5qczoK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NSdWxlLnByb3RvdHlwZS5nZXQgbWVkaWFUZXh0KToK
KyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9DU1NTdHlsZURlY2xhcmF0aW9uLmpzOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24pOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLnNldCB0ZXh0KToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZS5yZXNldFRleHQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLmdl
bmVyYXRlQ1NTUnVsZVN0cmluZyk6CisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9DU1NT
dHlsZURlY2xhcmF0aW9uU2VjdGlvbi5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHls
ZURlY2xhcmF0aW9uU2VjdGlvbi5wcm90b3R5cGUuX2hhbmRsZVNlbGVjdG9yUGFzdGUuX2hhbmRs
ZUNvbnRleHRNZW51RXZlbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFy
YXRpb25TZWN0aW9uLnByb3RvdHlwZS5faGFuZGxlU2VsZWN0b3JQYXN0ZS5fZ2VuZXJhdGVDU1NS
dWxlU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL1Zpc3Vh
bFN0eWxlU2VsZWN0b3JJdGVtLmNzczogQWRkZWQuCisgICAgICAgICguaXRlbS52aXN1YWwtc3R5
bGUtc2VsZWN0b3ItaXRlbSk6CisgICAgICAgICguaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3It
aXRlbS5zZWxlY3RlZCk6CisgICAgICAgICguaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRl
bSA+IC5kaXNjbG9zdXJlLWJ1dHRvbik6CisgICAgICAgICguaXRlbS52aXN1YWwtc3R5bGUtc2Vs
ZWN0b3ItaXRlbSA+IGlucHV0W3R5cGU9ImNoZWNrYm94Il0pOgorICAgICAgICAoLml0ZW0udmlz
dWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0gPiAuaWNvbik6CisgICAgICAgICguaXRlbS52aXN1YWwt
c3R5bGUtc2VsZWN0b3ItaXRlbS5tb2RpZmllZCA+IC5pY29uKToKKyAgICAgICAgKC5pdGVtLnZp
c3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtID4gLnRpdGxlcyk6CisgICAgICAgICguaXRlbS52aXN1
YWwtc3R5bGUtc2VsZWN0b3ItaXRlbTpub3QoLmRvbS1lbGVtZW50LWljb24pID4gLnRpdGxlcyA+
IC50aXRsZSk6CisgICAgICAgICguaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbTpub3Qo
LmRvbS1lbGVtZW50LWljb24pLmVkaXRhYmxlID4gLnRpdGxlcyA+IC50aXRsZSk6CisgICAgICAg
ICguaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbTpub3QoLmRvbS1lbGVtZW50LWljb24p
LmVkaXRhYmxlID4gLnRpdGxlcyA+IC50aXRsZTpmb2N1cyk6CisgICAgICAgICguaXRlbS52aXN1
YWwtc3R5bGUtc2VsZWN0b3ItaXRlbSA+IC50aXRsZXMgPiAuc3VidGl0bGU6OmJlZm9yZSk6Cisg
ICAgICAgICguaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbSA+IC50aXRsZXMgPiAuc3Vi
dGl0bGUpOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvVmlzdWFsU3R5bGVTZWxlY3Rv
ckl0ZW0uanM6IEFkZGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0
b3JJdGVtKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9ySXRlbS5w
cm90b3R5cGUuZ2V0IGljb25DbGFzc05hbWUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlZpc3Vh
bFN0eWxlU2VsZWN0b3JJdGVtLnByb3RvdHlwZS5vbmF0dGFjaCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3Rvckl0ZW0ucHJvdG90eXBlLm9uZGVzZWxlY3QpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JJdGVtLnByb3RvdHlwZS5nZXQg
X3NlbGVjdG9yVGV4dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3Rv
ckl0ZW0ucHJvdG90eXBlLl9oaWdobGlnaHROb2Rlc1dpdGhTZWxlY3Rvcik6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3Rvckl0ZW0ucHJvdG90eXBlLl9oaWRlRE9NTm9k
ZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3Rvckl0
ZW0ucHJvdG90eXBlLl9oYW5kbGVDb250ZXh0TWVudUV2ZW50KToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9ySXRlbS5wcm90b3R5cGUuX2hhbmRsZUNoZWNrYm94Q2hh
bmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3Rvckl0ZW0ucHJv
dG90eXBlLl91cGRhdGVDaGVja2JveFRpdGxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1
YWxTdHlsZVNlbGVjdG9ySXRlbS5wcm90b3R5cGUuX2hhbmRsZU1haW5UaXRsZU1vdXNlRG93bik6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3Rvckl0ZW0ucHJvdG90eXBl
Ll9oYW5kbGVNYWluVGl0bGVLZXlEb3duKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxT
dHlsZVNlbGVjdG9ySXRlbS5wcm90b3R5cGUuX2NvbW1pdFNlbGVjdG9yKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9ySXRlbS5wcm90b3R5cGUuX3N0eWxlVGV4dE1v
ZGlmaWVkKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL1Zpc3VhbFN0eWxlU2VsZWN0
b3JTZWN0aW9uLmNzczogQWRkZWQuCisgICAgICAgICguZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1z
dHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmhlYWRlcik6CisgICAgICAgICguZGV0YWlscy1zZWN0
aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uOm5vdCguY29sbGFwc2VkKSA+IC5oZWFk
ZXIpOgorICAgICAgICAoQG1lZGlhICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIp
KToKKyAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rp
b24gPiAuaGVhZGVyID4gLmN1cnJlbnQtc2VsZWN0b3IpOgorICAgICAgICAoLnZpc3VhbC1zdHls
ZS1zZWxlY3Rvci1zZWN0aW9uLmRldGFpbHMtc2VjdGlvbjpub3QoLmNvbGxhcHNlZCkgPiAuaGVh
ZGVyID4gLmN1cnJlbnQtc2VsZWN0b3IpOgorICAgICAgICAoLmRldGFpbHMtc2VjdGlvbi52aXN1
YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5oZWFkZXIgPiAuY3VycmVudC1zZWxlY3RvciA+
IC5pY29uKToKKyAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9y
LXNlY3Rpb24gPiAuaGVhZGVyID4gLmN1cnJlbnQtc2VsZWN0b3IgPiBzcGFuKToKKyAgICAgICAg
KC5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24gPiAuaGVhZGVy
ID4gLmNvbnRyb2xzKToKKyAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNl
bGVjdG9yLXNlY3Rpb24uY29sbGFwc2VkID4gLmhlYWRlciA+IC5jb250cm9scyk6CisgICAgICAg
ICguZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmhlYWRl
ciA+IC5jb250cm9scyA+IC52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbi1hZGQtcnVsZSk6
CisgICAgICAgICguZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9u
ID4gLmNvbnRlbnQgPiAuc2VsZWN0b3JzKToKKyAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24udmlz
dWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24gPiAuY29udGVudCA+IC5zZWxlY3RvcnMgPiAuc2Vs
ZWN0b3ItbGlzdCk6CisgICAgICAgICguZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxl
Y3Rvci1zZWN0aW9uID4gLmNvbnRlbnQgPiAuc2VsZWN0b3JzID4gLnNlbGVjdG9yLWxpc3QgPiAu
dmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW06bnRoLWNoaWxkKG9kZCkpOgorICAgICAgICAoLmRl
dGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5jb250ZW50ID4g
LnNlbGVjdG9ycyA+IC5zZWxlY3Rvci1saXN0ID4gLnNlY3Rpb24tZGl2aWRlcik6CisgICAgICAg
ICguZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmNvbnRl
bnQgPiAuc2VsZWN0b3JzID4gLnNlbGVjdG9yLWxpc3QgPiAuc2VjdGlvbi1kaXZpZGVyID4gLmlj
b24pOgorICAgICAgICAoLmRldGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2Vj
dGlvbiA+IC5jb250ZW50ID4gLnNlbGVjdG9ycyA+IC5zZWxlY3Rvci1saXN0ID4gLnNlY3Rpb24t
ZGl2aWRlciA+IC50aXRsZXMgPiAudGl0bGUpOgorICAgICAgICAoLmRldGFpbHMtc2VjdGlvbi52
aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5jb250ZW50ID4gLnNlbGVjdG9ycyA+IC5z
ZWxlY3Rvci1saXN0ID4gLnNlY3Rpb24tZGl2aWRlciB+IC52aXN1YWwtc3R5bGUtc2VsZWN0b3It
aXRlbTpudGgtY2hpbGQoZXZlbikpOgorICAgICAgICAoLmRldGFpbHMtc2VjdGlvbi52aXN1YWwt
c3R5bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5jb250ZW50ID4gLnNlbGVjdG9ycyA+IC5zZWxlY3Rv
ci1saXN0ID4gLnNlY3Rpb24tZGl2aWRlciB+IC52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbTpu
dGgtY2hpbGQob2RkKSk6CisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9WaXN1YWxTdHls
ZVNlbGVjdG9yU2VjdGlvbi5qczogQWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFs
U3R5bGVTZWxlY3RvclNlY3Rpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxl
U2VsZWN0b3JTZWN0aW9uLnByb3RvdHlwZS51cGRhdGUuY3JlYXRlU2VsZWN0b3JJdGVtKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5wcm90b3R5cGUu
dXBkYXRlLnVuaXF1ZU9yZGVyZWRSdWxlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFs
U3R5bGVTZWxlY3RvclNlY3Rpb24ucHJvdG90eXBlLnVwZGF0ZS5pbnNlcnRBbGxNYXRjaGluZ1Bz
ZXVkb1J1bGVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yU2Vj
dGlvbi5wcm90b3R5cGUudXBkYXRlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxTdHls
ZVNlbGVjdG9yU2VjdGlvbi5wcm90b3R5cGUuY3VycmVudFJ1bGUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLnByb3RvdHlwZS5fc2VsZWN0b3JDaGFu
Z2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5w
cm90b3R5cGUuX3N0eWxlVGV4dFJlc2V0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxT
dHlsZVNlbGVjdG9yU2VjdGlvbi5wcm90b3R5cGUuX2FkZE5ld1J1bGUpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLnByb3RvdHlwZS5fdHJlZUVsZW1l
bnRDaGVja2JveFRvZ2dsZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2Vs
ZWN0b3JTZWN0aW9uLnByb3RvdHlwZS5faGFuZGxlTW91c2VPdmVyKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5wcm90b3R5cGUuX2hhbmRsZU1vdXNl
T3V0KToKKwogMjAxNS0wOC0wMiAgTWF0dCBCYWtlciAgPG1hdHRiYWtlckBhcHBsZS5jb20+CiAK
ICAgICAgICAgV2ViIEluc3BlY3RvcjogVW5uYW1lc3BhY2VkIEZvcm1hdHRlciBjbGFzc2VzIGJy
ZWFrIENTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTUnVsZS5qcyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1NSdWxlLmpzCmluZGV4IGE5NGUyN2I1
NjY0NjJhOTBhOWQ0NmM5NTFjOTU2NGQyNzIyNzIyNjguLmNjOTkyZGMzNTE3NTg1ZWE0OTM0YTRh
OTZmNWEyMjk0Nzg5OGMzZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL01vZGVscy9DU1NSdWxlLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL01vZGVscy9DU1NSdWxlLmpzCkBAIC0xNzcsNiArMTc3LDE5IEBAIFdlYklu
c3BlY3Rvci5DU1NSdWxlID0gY2xhc3MgQ1NTUnVsZSBleHRlbmRzIFdlYkluc3BlY3Rvci5PYmpl
Y3QKICAgICAgICAgcmV0dXJuIHRoaXMuX21lZGlhTGlzdDsKICAgICB9CiAKKyAgICBnZXQgbWVk
aWFUZXh0KCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fbWVkaWFMaXN0Lmxlbmd0aCkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgbWVkaWFUZXh0ID0gIiI7CisKKyAgICAg
ICAgZm9yICh2YXIgbWVkaWEgb2YgdGhpcy5fbWVkaWFMaXN0KQorICAgICAgICAgICAgbWVkaWFU
ZXh0ICs9IG1lZGlhLnRleHQ7CisKKyAgICAgICAgcmV0dXJuIG1lZGlhVGV4dDsKKyAgICB9CisK
ICAgICBpc0VxdWFsVG8ocnVsZSkKICAgICB7CiAgICAgICAgIGlmICghcnVsZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1NTdHlsZURl
Y2xhcmF0aW9uLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxz
L0NTU1N0eWxlRGVjbGFyYXRpb24uanMKaW5kZXggOTQwNzhjZmQwY2M5YmFkOGM0YjBmMzAxZTQ2
YWEzZWFlYThkYWJkZi4uZTdmMmM3NDk0YTgwNzhjZTMxOTZjNjk0NzBkY2FjZDg5N2U0NDI5YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NT
U1N0eWxlRGVjbGFyYXRpb24uanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvTW9kZWxzL0NTU1N0eWxlRGVjbGFyYXRpb24uanMKQEAgLTQzLDYgKzQzLDkgQEAgV2Vi
SW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24gPSBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9u
IGV4dGVuZHMgV2ViSW5zcGVjdG8KICAgICAgICAgdGhpcy5fcGVuZGluZ1Byb3BlcnRpZXMgPSBb
XTsKICAgICAgICAgdGhpcy5fcHJvcGVydHlOYW1lTWFwID0ge307CiAKKyAgICAgICAgdGhpcy5f
aW5pdGlhbFRleHQgPSB0ZXh0OworICAgICAgICB0aGlzLm1vZGlmaWVkID0gZmFsc2U7CisKICAg
ICAgICAgdGhpcy51cGRhdGUodGV4dCwgcHJvcGVydGllcywgc3R5bGVTaGVldFRleHRSYW5nZSwg
dHJ1ZSk7CiAgICAgfQogCkBAIC0xODMsOSArMTg2LDIxIEBAIFdlYkluc3BlY3Rvci5DU1NTdHls
ZURlY2xhcmF0aW9uID0gY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbiBleHRlbmRzIFdlYkluc3Bl
Y3RvCiAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB0ZXh0KQogICAgICAgICAgICAgcmV0dXJu
OwogCisgICAgICAgIHZhciBtb2RpZmllZCA9IHRleHQgIT09IHRoaXMuX2luaXRpYWxUZXh0Owor
CisgICAgICAgIGlmIChtb2RpZmllZCAhPT0gdGhpcy5tb2RpZmllZCkgeworICAgICAgICAgICAg
dGhpcy5tb2RpZmllZCA9IG1vZGlmaWVkOworICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50
VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24uRXZlbnQuSW5pdGlh
bFRleHRNb2RpZmllZCk7CisgICAgICAgIH0KKwogICAgICAgICB0aGlzLl9ub2RlU3R5bGVzLmNo
YW5nZVN0eWxlVGV4dCh0aGlzLCB0ZXh0KTsKICAgICB9CiAKKyAgICByZXNldFRleHQoKQorICAg
IHsKKyAgICAgICAgdGhpcy50ZXh0ID0gdGhpcy5faW5pdGlhbFRleHQ7CisgICAgfQorCiAgICAg
Z2V0IHByb3BlcnRpZXMoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb3BlcnRpZXM7
CkBAIC0yNjAsNiArMjc1LDQ2IEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uID0g
Y2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbiBleHRlbmRzIFdlYkluc3BlY3RvCiAgICAgICAgIHJl
dHVybiBuZXdQcm9wZXJ0eTsKICAgICB9CiAKKyAgICBnZW5lcmF0ZUNTU1J1bGVTdHJpbmcoKQor
ICAgIHsKKyAgICAgICAgdmFyIG51bU1lZGlhUXVlcmllcyA9IDA7CisgICAgICAgIHZhciBzdHls
ZVRleHQgPSAiIjsKKworICAgICAgICBpZiAodGhpcy5fb3duZXJSdWxlKSB7CisgICAgICAgICAg
ICB2YXIgbWVkaWFMaXN0ID0gdGhpcy5fb3duZXJSdWxlLm1lZGlhTGlzdDsKKyAgICAgICAgICAg
IGlmIChtZWRpYUxpc3QubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgbnVtTWVkaWFRdWVyaWVz
ID0gbWVkaWFMaXN0Lmxlbmd0aDsKKworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBudW1N
ZWRpYVF1ZXJpZXMgLSAxOyBpID49IDA7IC0taSkKKyAgICAgICAgICAgICAgICAgICAgc3R5bGVU
ZXh0ICs9ICIgICAgIi5yZXBlYXQobnVtTWVkaWFRdWVyaWVzIC0gaSAtIDEpICsgIkBtZWRpYSAi
ICsgbWVkaWFMaXN0W2ldLnRleHQgKyAiIHtcbiI7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHN0eWxlVGV4dCArPSAiICAgICIucmVwZWF0KG51bU1lZGlhUXVlcmllcykgKyB0aGlzLl9v
d25lclJ1bGUuc2VsZWN0b3JUZXh0OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN0eWxl
VGV4dCArPSB0aGlzLl9zZWxlY3RvckVsZW1lbnQudGV4dENvbnRlbnQ7CisKKyAgICAgICAgc3R5
bGVUZXh0ICs9ICIge1xuIjsKKworICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBvZiB0aGlzLl9w
cm9wZXJ0aWVzKSB7CisgICAgICAgICAgICBpZiAocHJvcGVydHkuYW5vbnltb3VzKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBzdHlsZVRleHQgKz0gIiAgICAiLnJl
cGVhdChudW1NZWRpYVF1ZXJpZXMgKyAxKSArIHByb3BlcnR5LnRleHQudHJpbSgpOworCisgICAg
ICAgICAgICBpZiAoIXN0eWxlVGV4dC5lbmRzV2l0aCgiOyIpKQorICAgICAgICAgICAgICAgIHN0
eWxlVGV4dCArPSAiOyI7CisKKyAgICAgICAgICAgIHN0eWxlVGV4dCArPSAiXG4iOworICAgICAg
ICB9CisKKyAgICAgICAgZm9yICh2YXIgaSA9IG51bU1lZGlhUXVlcmllczsgaSA+IDA7IC0taSkK
KyAgICAgICAgICAgIHN0eWxlVGV4dCArPSAiICAgICIucmVwZWF0KGkpICsgIn1cbiI7CisKKyAg
ICAgICAgc3R5bGVUZXh0ICs9ICJ9IjsKKworICAgICAgICByZXR1cm4gc3R5bGVUZXh0OworICAg
IH0KKwogICAgIC8vIFByb3RlY3RlZAogCiAgICAgZ2V0IG5vZGVTdHlsZXMoKQpAQCAtMjY5LDcg
KzMyNCw4IEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uID0gY2xhc3MgQ1NTU3R5
bGVEZWNsYXJhdGlvbiBleHRlbmRzIFdlYkluc3BlY3RvCiB9OwogCiBXZWJJbnNwZWN0b3IuQ1NT
U3R5bGVEZWNsYXJhdGlvbi5FdmVudCA9IHsKLSAgICBQcm9wZXJ0aWVzQ2hhbmdlZDogImNzcy1z
dHlsZS1kZWNsYXJhdGlvbi1wcm9wZXJ0aWVzLWNoYW5nZWQiCisgICAgUHJvcGVydGllc0NoYW5n
ZWQ6ICJjc3Mtc3R5bGUtZGVjbGFyYXRpb24tcHJvcGVydGllcy1jaGFuZ2VkIiwKKyAgICBJbml0
aWFsVGV4dE1vZGlmaWVkOiAiY3NzLXN0eWxlLWRlY2xhcmF0aW9uLWluaXRpYWwtdGV4dC1tb2Rp
ZmllZCIKIH07CiAKIFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLlR5cGUgPSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9DU1NT
dHlsZURlY2xhcmF0aW9uU2VjdGlvbi5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL1ZpZXdzL0NTU1N0eWxlRGVjbGFyYXRpb25TZWN0aW9uLmpzCmluZGV4IGUzMDA0MmNh
ZmQwYWY0NWNmNThiOThjMzRjNjVkZmQwODlhOWQxMTcuLjRlNzliNWY5MDUyNTgzNDQ3ZDVlODU1
M2Q1NmExYWM1NGU1YmY1NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1ZpZXdzL0NTU1N0eWxlRGVjbGFyYXRpb25TZWN0aW9uLmpzCisrKyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NTU1N0eWxlRGVjbGFyYXRpb25T
ZWN0aW9uLmpzCkBAIC00NTMsNDkgKzQ1MywxMiBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNs
YXJhdGlvblNlY3Rpb24ucHJvdG90eXBlID0gewogICAgICAgICB2YXIgY29udGV4dE1lbnUgPSBu
ZXcgV2ViSW5zcGVjdG9yLkNvbnRleHRNZW51KGV2ZW50KTsKIAogICAgICAgICBjb250ZXh0TWVu
dS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ29weSBSdWxlIiksIGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNvcHlUZXh0KHRoaXMuX2dl
bmVyYXRlQ1NTUnVsZVN0cmluZygpKTsKKyAgICAgICAgICAgIEluc3BlY3RvckZyb250ZW5kSG9z
dC5jb3B5VGV4dCh0aGlzLl9zdHlsZS5nZW5lcmF0ZUNTU1J1bGVTdHJpbmcoKSk7CiAgICAgICAg
IH0uYmluZCh0aGlzKSk7CiAKICAgICAgICAgY29udGV4dE1lbnUuc2hvdygpOwogICAgIH0sCiAK
LSAgICBfZ2VuZXJhdGVDU1NSdWxlU3RyaW5nOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2
YXIgbnVtTWVkaWFRdWVyaWVzID0gMDsKLSAgICAgICAgdmFyIHN0eWxlVGV4dCA9ICIiOwotCi0g
ICAgICAgIGlmICh0aGlzLl9zdHlsZS5vd25lclJ1bGUpIHsKLSAgICAgICAgICAgIHZhciBtZWRp
YUxpc3QgPSB0aGlzLl9zdHlsZS5vd25lclJ1bGUubWVkaWFMaXN0OwotICAgICAgICAgICAgaWYg
KG1lZGlhTGlzdC5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBudW1NZWRpYVF1ZXJpZXMgPSBt
ZWRpYUxpc3QubGVuZ3RoOwotCi0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IG51bU1lZGlh
UXVlcmllcyAtIDE7IGkgPj0gMDsgLS1pKQotICAgICAgICAgICAgICAgICAgICBzdHlsZVRleHQg
Kz0gIiAgICAiLnJlcGVhdChudW1NZWRpYVF1ZXJpZXMgLSBpIC0gMSkgKyAiQG1lZGlhICIgKyBt
ZWRpYUxpc3RbaV0udGV4dCArICIge1xuIjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
c3R5bGVUZXh0ICs9ICIgICAgIi5yZXBlYXQobnVtTWVkaWFRdWVyaWVzKSArIHRoaXMuX3N0eWxl
Lm93bmVyUnVsZS5zZWxlY3RvclRleHQ7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgc3R5
bGVUZXh0ICs9IHRoaXMuX3NlbGVjdG9yRWxlbWVudC50ZXh0Q29udGVudDsKLQotICAgICAgICBz
dHlsZVRleHQgKz0gIiB7XG4iOwotCi0gICAgICAgIGZvciAodmFyIHByb3BlcnR5IG9mIHRoaXMu
X3N0eWxlLnZpc2libGVQcm9wZXJ0aWVzKSB7Ci0gICAgICAgICAgICBzdHlsZVRleHQgKz0gIiAg
ICAiLnJlcGVhdChudW1NZWRpYVF1ZXJpZXMgKyAxKSArIHByb3BlcnR5LnRleHQudHJpbSgpOwot
Ci0gICAgICAgICAgICBpZiAoIXN0eWxlVGV4dC5lbmRzV2l0aCgiOyIpKQotICAgICAgICAgICAg
ICAgIHN0eWxlVGV4dCArPSAiOyI7Ci0KLSAgICAgICAgICAgIHN0eWxlVGV4dCArPSAiXG4iOwot
ICAgICAgICB9Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IG51bU1lZGlhUXVlcmllczsgaSA+IDA7
IC0taSkKLSAgICAgICAgICAgIHN0eWxlVGV4dCArPSAiICAgICIucmVwZWF0KGkpICsgIn1cbiI7
Ci0KLSAgICAgICAgc3R5bGVUZXh0ICs9ICJ9IjsKLQotICAgICAgICByZXR1cm4gc3R5bGVUZXh0
OwotICAgIH0sCi0KICAgICBfdG9nZ2xlUnVsZU9uT2ZmOiBmdW5jdGlvbigpCiAgICAgewogICAg
ICAgICBpZiAodGhpcy5faGFzSW52YWxpZFNlbGVjdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVmlzdWFsU3R5bGVTZWxlY3Rvckl0ZW0u
Y3NzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVmlzdWFsU3R5
bGVTZWxlY3Rvckl0ZW0uY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmNjkwNWMwMjdmZjdhMDE0NWNmZWJkZjIy
MGNlODJhMzExZjBhNTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9WaWV3cy9WaXN1YWxTdHlsZVNlbGVjdG9ySXRlbS5jc3MKQEAgLTAsMCAr
MSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy5pdGVtLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtIHsK
KyAgICBkaXNwbGF5OiBmbGV4OworICAgIHdpZHRoOiAxMDAlOworICAgIGhlaWdodDogMjVweDsK
KyAgICBwYWRkaW5nOiAycHggMDsKKyAgICBsaW5lLWhlaWdodDogMjBweDsKKyAgICBmb250LXNp
emU6IDExcHg7Cit9CisKKy5pdGVtLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtLnNlbGVjdGVk
IHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMzQsIDEzMSwgMjQ2KSAhaW1wb3J0YW50Owor
ICAgIGNvbG9yOiB3aGl0ZTsKK30KKworLml0ZW0udmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0g
PiAuZGlzY2xvc3VyZS1idXR0b24geworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKy5pdGVtLnZp
c3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtID4gaW5wdXRbdHlwZT0iY2hlY2tib3giXSB7CisgICAg
bWFyZ2luOiA0LjVweCAwIDRweCA1cHg7Cit9CisKKy5pdGVtLnZpc3VhbC1zdHlsZS1zZWxlY3Rv
ci1pdGVtID4gLmljb24geworICAgIHdpZHRoOiAxNnB4OworICAgIGhlaWdodDogMTZweDsKKyAg
ICBtYXJnaW46IDIuNXB4IDAgMi41cHggNHB4OworfQorCisuaXRlbS52aXN1YWwtc3R5bGUtc2Vs
ZWN0b3ItaXRlbS5tb2RpZmllZCA+IC5pY29uIHsKKyAgICAtd2Via2l0LWZpbHRlcjogYnJpZ2h0
bmVzcygwLjc1KTsKK30KKworLml0ZW0udmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0gPiAudGl0
bGVzIHsKKyAgICBvdmVyZmxvdzogaGlkZGVuOworICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cisg
ICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CisgICAgcGFkZGluZzogMCAycHggMCAzcHg7Cit9
CisKKy5pdGVtLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtOm5vdCguZG9tLWVsZW1lbnQtaWNv
bikgPiAudGl0bGVzID4gLnRpdGxlIHsKKyAgICBwYWRkaW5nOiAwIDFweCAycHg7CisgICAgbGlu
ZS1oZWlnaHQ6IDEycHg7CisgICAgb3V0bGluZTogbm9uZTsKK30KKworLml0ZW0udmlzdWFsLXN0
eWxlLXNlbGVjdG9yLWl0ZW06bm90KC5kb20tZWxlbWVudC1pY29uKS5lZGl0YWJsZSA+IC50aXRs
ZXMgPiAudGl0bGUgeworICAgIGN1cnNvcjogdGV4dDsKKyAgICAtd2Via2l0LXVzZXItc2VsZWN0
OiB0ZXh0OworICAgIC13ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQtd3JpdGUtcGxhaW50ZXh0LW9u
bHk7Cit9CisKKy5pdGVtLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtOm5vdCguZG9tLWVsZW1l
bnQtaWNvbikuZWRpdGFibGUgPiAudGl0bGVzID4gLnRpdGxlOmZvY3VzIHsKKyAgICBjb2xvcjog
YmxhY2s7CisgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisgICAgYm9yZGVyLXJhZGl1czog
MnB4OworICAgIGJveC1zaGFkb3c6IGhzbGEoMCwgMCUsIDAlLCAwLjE1KSAwIDFweCAwLCAwIDAg
MCAzcHggaHNsYSgwLCAxMDAlLCAxMDAlLCAwLjMpOworICAgIC8qIFRPRE86IEZpeCBjdXJzb3Ig
YmFyIGFuZCBoaWdobGlnaHQgaGVpZ2h0ICovCit9CisKKy5pdGVtLnZpc3VhbC1zdHlsZS1zZWxl
Y3Rvci1pdGVtID4gLnRpdGxlcyA+IC5zdWJ0aXRsZTo6YmVmb3JlIHsKKyAgICBtYXJnaW4tcmln
aHQ6IDVweDsKKyAgICBmb250LXNpemU6IDExcHg7CisgICAgLyogVGhlIGV4dHJhIHNwYWNlIGF0
IHRoZSBiZWdpbm5pbmcgaXMgbmVjZXNzYXJ5IHRvIHByZXZlbnQgdGhlIC13ZWJraXQtdXNlci1t
b2RpZnkKKyAgICBjdXJzb3IgYmFyIGZyb20gZGlzcGxheWluZyBhdCB0aGUgYmVnaW5uaW5nIG9m
IHRoZSBlbS1kYXNoICovCisgICAgY29udGVudDogIiBcMjAxNCI7Cit9CisKKy5pdGVtLnZpc3Vh
bC1zdHlsZS1zZWxlY3Rvci1pdGVtID4gLnRpdGxlcyA+IC5zdWJ0aXRsZSB7CisgICAgZm9udC1z
aXplOiA5cHg7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9WaWV3cy9WaXN1YWxTdHlsZVNlbGVjdG9ySXRlbS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Zpc3VhbFN0eWxlU2VsZWN0b3JJdGVtLmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjVjMjc5YmUyNzM3OTEyZTlhODQ5ZTljZmRkZWZiMjc0NDI1NDQyZjMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9WaXN1
YWxTdHlsZVNlbGVjdG9ySXRlbS5qcwpAQCAtMCwwICsxLDE5NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dl
Ykluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9ySXRlbSA9IGNsYXNzIFZpc3VhbFN0eWxlU2Vs
ZWN0b3JJdGVtIGV4dGVuZHMgV2ViSW5zcGVjdG9yLkdlbmVyYWxUcmVlRWxlbWVudAoreworICAg
IGNvbnN0cnVjdG9yKHN0eWxlLCB0aXRsZSwgc3VidGl0bGUpCisgICAgeworICAgICAgICB2YXIg
aWNvbkNsYXNzTmFtZTsKKyAgICAgICAgc3dpdGNoIChzdHlsZS50eXBlKSB7CisgICAgICAgIGNh
c2UgV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24uVHlwZS5SdWxlOgorICAgICAgICAg
ICAgY29uc29sZS5hc3NlcnQoc3R5bGUub3duZXJSdWxlKTsKKworICAgICAgICAgICAgaWYgKHN0
eWxlLmluaGVyaXRlZCkKKyAgICAgICAgICAgICAgICBpY29uQ2xhc3NOYW1lID0gV2ViSW5zcGVj
dG9yLkNTU1N0eWxlRGVjbGFyYXRpb25TZWN0aW9uLkluaGVyaXRlZFN0eWxlUnVsZUljb25TdHls
ZUNsYXNzTmFtZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLm93bmVyUnVsZS50eXBlID09
PSBXZWJJbnNwZWN0b3IuQ1NTUnVsZS5UeXBlLkF1dGhvcikKKyAgICAgICAgICAgICAgICBpY29u
Q2xhc3NOYW1lID0gV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25TZWN0aW9uLkF1dGhv
clN0eWxlUnVsZUljb25TdHlsZUNsYXNzTmFtZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxl
Lm93bmVyUnVsZS50eXBlID09PSBXZWJJbnNwZWN0b3IuQ1NTUnVsZS5UeXBlLlVzZXIpCisgICAg
ICAgICAgICAgICAgaWNvbkNsYXNzTmFtZSA9IFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0
aW9uU2VjdGlvbi5Vc2VyU3R5bGVSdWxlSWNvblN0eWxlQ2xhc3NOYW1lOworICAgICAgICAgICAg
ZWxzZSBpZiAoc3R5bGUub3duZXJSdWxlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5DU1NSdWxlLlR5
cGUuVXNlckFnZW50KQorICAgICAgICAgICAgICAgIGljb25DbGFzc05hbWUgPSBXZWJJbnNwZWN0
b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblNlY3Rpb24uVXNlckFnZW50U3R5bGVSdWxlSWNvblN0eWxl
Q2xhc3NOYW1lOworICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGUub3duZXJSdWxlLnR5cGUgPT09
IFdlYkluc3BlY3Rvci5DU1NSdWxlLlR5cGUuSW5zcGVjdG9yKQorICAgICAgICAgICAgICAgIGlj
b25DbGFzc05hbWUgPSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblNlY3Rpb24uSW5z
cGVjdG9yU3R5bGVSdWxlSWNvblN0eWxlQ2xhc3NOYW1lOworICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5UeXBlLklubGlu
ZToKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5UeXBlLkF0
dHJpYnV0ZToKKyAgICAgICAgICAgIGlmIChzdHlsZS5pbmhlcml0ZWQpCisgICAgICAgICAgICAg
ICAgaWNvbkNsYXNzTmFtZSA9IFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uU2VjdGlv
bi5Jbmhlcml0ZWRFbGVtZW50U3R5bGVSdWxlSWNvblN0eWxlQ2xhc3NOYW1lOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGljb25DbGFzc05hbWUgPSBXZWJJbnNwZWN0b3IuRE9N
VHJlZUVsZW1lbnRQYXRoQ29tcG9uZW50LkRPTUVsZW1lbnRJY29uU3R5bGVDbGFzc05hbWU7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHRpdGxlID0gdGl0bGUudHJp
bSgpOworCisgICAgICAgIHN1cGVyKFsidmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0iLCBpY29u
Q2xhc3NOYW1lXSwgdGl0bGUsIHN1YnRpdGxlLCBzdHlsZSk7CisKKyAgICAgICAgdGhpcy5faWNv
bkNsYXNzTmFtZSA9IGljb25DbGFzc05hbWU7CisgICAgICAgIHRoaXMuX2xhc3RWYWx1ZSA9IHRp
dGxlOworICAgICAgICB0aGlzLl9lbmFibGVFZGl0aW5nID0gdHJ1ZTsKKyAgICB9CisKKyAgICAv
LyBQdWJsaWMKKworICAgIGdldCBpY29uQ2xhc3NOYW1lKCkKKyAgICB7CisgICAgICAgIHJldHVy
biB0aGlzLl9pY29uQ2xhc3NOYW1lOworICAgIH0KKworICAgIC8vIE92ZXJyaWRlcyBmcm9tIFRy
ZWVFbGVtZW50IChQcml2YXRlKQorCisgICAgb25hdHRhY2goKQorICAgIHsKKyAgICAgICAgc3Vw
ZXIub25hdHRhY2goKTsKKworICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUuYWRkRXZlbnRMaXN0
ZW5lcigibW91c2VvdmVyIiwgdGhpcy5faGlnaGxpZ2h0Tm9kZXNXaXRoU2VsZWN0b3IuYmluZCh0
aGlzKSk7CisgICAgICAgIHRoaXMuX2xpc3RJdGVtTm9kZS5hZGRFdmVudExpc3RlbmVyKCJtb3Vz
ZW91dCIsIHRoaXMuX2hpZGVET01Ob2RlSGlnaGxpZ2h0LmJpbmQodGhpcykpOworICAgICAgICB0
aGlzLl9saXN0SXRlbU5vZGUuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCB0aGlzLl9o
YW5kbGVDb250ZXh0TWVudUV2ZW50LmJpbmQodGhpcykpOworCisgICAgICAgIHRoaXMuX2NoZWNr
Ym94RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CisgICAgICAgIHRo
aXMuX2NoZWNrYm94RWxlbWVudC50eXBlID0gImNoZWNrYm94IjsKKyAgICAgICAgdGhpcy5fY2hl
Y2tib3hFbGVtZW50LmNoZWNrZWQgPSAhdGhpcy5yZXByZXNlbnRlZE9iamVjdC5fX3Zpc3VhbFN0
eWxlRGlzYWJsZWQ7CisgICAgICAgIHRoaXMuX3VwZGF0ZUNoZWNrYm94VGl0bGUoKTsKKyAgICAg
ICAgdGhpcy5fY2hlY2tib3hFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIHRoaXMu
X2hhbmRsZUNoZWNrYm94Q2hhbmdlZC5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5fbGlzdEl0
ZW1Ob2RlLmluc2VydEJlZm9yZSh0aGlzLl9jaGVja2JveEVsZW1lbnQsIHRoaXMuX2ljb25FbGVt
ZW50KTsKKworICAgICAgICB0aGlzLl9tYWluVGl0bGVFbGVtZW50LnNwZWxsY2hlY2sgPSBmYWxz
ZTsKKyAgICAgICAgdGhpcy5fbWFpblRpdGxlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3Vz
ZWRvd24iLCB0aGlzLl9oYW5kbGVNYWluVGl0bGVNb3VzZURvd24uYmluZCh0aGlzKSk7CisgICAg
ICAgIHRoaXMuX21haW5UaXRsZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRo
aXMuX2hhbmRsZU1haW5UaXRsZUtleURvd24uYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX21h
aW5UaXRsZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLCB0aGlzLl9oaWdobGlnaHRO
b2Rlc1dpdGhTZWxlY3Rvci5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5fbWFpblRpdGxlRWxl
bWVudC5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgdGhpcy5fY29tbWl0U2VsZWN0b3IuYmluZCh0
aGlzKSk7CisKKyAgICAgICAgdGhpcy5yZXByZXNlbnRlZE9iamVjdC5hZGRFdmVudExpc3RlbmVy
KFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLkV2ZW50LkluaXRpYWxUZXh0TW9kaWZp
ZWQsIHRoaXMuX3N0eWxlVGV4dE1vZGlmaWVkLCB0aGlzKTsKKyAgICAgICAgdGhpcy5fc3R5bGVU
ZXh0TW9kaWZpZWQoKTsKKyAgICB9CisKKyAgICBvbmRlc2VsZWN0KCkKKyAgICB7CisgICAgICAg
IHRoaXMuX2xpc3RJdGVtTm9kZS5jbGFzc0xpc3QucmVtb3ZlKCJlZGl0YWJsZSIpOworICAgIH0K
KworICAgIC8vIFByaXZhdGUKKworICAgIGdldCBfc2VsZWN0b3JUZXh0KCkKKyAgICB7CisgICAg
ICAgIHZhciB0aXRsZVRleHQgPSB0aGlzLl9tYWluVGl0bGVFbGVtZW50LnRleHRDb250ZW50Owor
CisgICAgICAgIGlmICghdGl0bGVUZXh0IHx8ICF0aXRsZVRleHQubGVuZ3RoKQorICAgICAgICAg
ICAgdGl0bGVUZXh0ID0gdGhpcy5fbWFpblRpdGxlOworCisgICAgICAgIHJldHVybiB0aXRsZVRl
eHQudHJpbSgpOworICAgIH0KKworICAgIF9oaWdobGlnaHROb2Rlc1dpdGhTZWxlY3RvcigpCisg
ICAgeworICAgICAgICBpZiAoIXRoaXMucmVwcmVzZW50ZWRPYmplY3Qub3duZXJSdWxlKSB7Cisg
ICAgICAgICAgICBXZWJJbnNwZWN0b3IuZG9tVHJlZU1hbmFnZXIuaGlnaGxpZ2h0RE9NTm9kZSh0
aGlzLnJlcHJlc2VudGVkT2JqZWN0Lm5vZGUuaWQpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgV2ViSW5zcGVjdG9yLmRvbVRyZWVNYW5hZ2VyLmhpZ2hsaWdodFNl
bGVjdG9yKHRoaXMuX3NlbGVjdG9yVGV4dCwgdGhpcy5yZXByZXNlbnRlZE9iamVjdC5ub2RlLm93
bmVyRG9jdW1lbnQuZnJhbWVJZGVudGlmaWVyKTsKKyAgICB9CisKKyAgICBfaGlkZURPTU5vZGVI
aWdobGlnaHQoKQorICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmRvbVRyZWVNYW5hZ2VyLmhp
ZGVET01Ob2RlSGlnaGxpZ2h0KCk7CisgICAgfQorCisgICAgX2hhbmRsZUNvbnRleHRNZW51RXZl
bnQoZXZlbnQpCisgICAgeworICAgICAgICB2YXIgY29udGV4dE1lbnUgPSBuZXcgV2ViSW5zcGVj
dG9yLkNvbnRleHRNZW51KGV2ZW50KTsKKworICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVt
KFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ29weSBSdWxlIiksIGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNvcHlUZXh0KHRoaXMucmVwcmVzZW50ZWRPYmpl
Y3QuZ2VuZXJhdGVDU1NSdWxlU3RyaW5nKCkpOworICAgICAgICB9LmJpbmQodGhpcykpOworCisg
ICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSZXNl
dCIpLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHRoaXMucmVwcmVzZW50ZWRPYmplY3QucmVz
ZXRUZXh0KCk7CisgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJ
bnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3Rvckl0ZW0uRXZlbnQuU3R5bGVUZXh0UmVzZXQpOwor
ICAgICAgICB9LmJpbmQodGhpcykpOworCisgICAgICAgIGNvbnRleHRNZW51LnNob3coKTsKKyAg
ICB9CisKKyAgICBfaGFuZGxlQ2hlY2tib3hDaGFuZ2VkKGV2ZW50KQorICAgIHsKKyAgICAgICAg
dGhpcy5fdXBkYXRlQ2hlY2tib3hUaXRsZSgpOworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRU
b0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3Rvckl0ZW0uRXZlbnQuQ2hl
Y2tib3hDaGFuZ2VkLCB7ZW5hYmxlZDogdGhpcy5fY2hlY2tib3hFbGVtZW50LmNoZWNrZWR9KTsK
KyAgICB9CisKKyAgICBfdXBkYXRlQ2hlY2tib3hUaXRsZSgpCisgICAgeworICAgICAgICB0aGlz
Ll9jaGVja2JveEVsZW1lbnQudGl0bGUgPSB0aGlzLl9jaGVja2JveEVsZW1lbnQuY2hlY2tlZCA/
IFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ2xpY2sgdG8gZGlzYWJsZSB0aGUgc2VsZWN0ZWQgcnVs
ZSIpIDogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDbGljayB0byBlbmFibGUgdGhlIHNlbGVjdGVk
IHJ1bGUiKTsKKyAgICB9CisKKyAgICBfaGFuZGxlTWFpblRpdGxlTW91c2VEb3duKGV2ZW50KQor
ICAgIHsKKyAgICAgICAgdGhpcy5fbGlzdEl0ZW1Ob2RlLmNsYXNzTGlzdC50b2dnbGUoImVkaXRh
YmxlIiwgdGhpcy5zZWxlY3RlZCk7CisgICAgfQorCisgICAgX2hhbmRsZU1haW5UaXRsZUtleURv
d24oZXZlbnQpCisgICAgeworICAgICAgICB0aGlzLl9oaWdobGlnaHROb2Rlc1dpdGhTZWxlY3Rv
cigpOworCisgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSAxMykgeworICAgICAgICAgICAg
dGhpcy5fbWFpblRpdGxlRWxlbWVudC5ibHVyKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBfY29tbWl0U2VsZWN0b3IoKQorICAgIHsKKyAgICAgICAgdGhp
cy5faGlkZURPTU5vZGVIaWdobGlnaHQoKTsKKyAgICAgICAgdGhpcy5fbGlzdEl0ZW1Ob2RlLmNs
YXNzTGlzdC5yZW1vdmUoImVkaXRhYmxlIik7CisKKyAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5f
c2VsZWN0b3JUZXh0OworICAgICAgICBpZiAodmFsdWUgPT09IHRoaXMuX2xhc3RWYWx1ZSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLnJlcHJlc2VudGVkT2JqZWN0Lm93bmVy
UnVsZS5zZWxlY3RvclRleHQgPSB2YWx1ZTsKKyAgICB9CisKKyAgICBfc3R5bGVUZXh0TW9kaWZp
ZWQoKQorICAgIHsKKyAgICAgICAgdGhpcy5fbGlzdEl0ZW1Ob2RlLmNsYXNzTGlzdC50b2dnbGUo
Im1vZGlmaWVkIiwgdGhpcy5yZXByZXNlbnRlZE9iamVjdC5tb2RpZmllZCk7CisgICAgfQorfTsK
KworV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JJdGVtLkV2ZW50ID0geworICAgIFN0
eWxlVGV4dFJlc2V0OiAidmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0tc3R5bGUtdGV4dC1yZXNl
dCIsCisgICAgQ2hlY2tib3hDaGFuZ2VkOiAidmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0tY2hl
Y2tib3gtY2hhbmdlZCIKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1ZpZXdzL1Zpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLmNzcyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Zpc3VhbFN0eWxlU2VsZWN0b3JTZWN0
aW9uLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40YzFkODA5OGI2MjM0YjU5N2MxNWRjNjcyZDQ2M2IyYWY5MmRh
YjFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvVmlld3MvVmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24uY3NzCkBAIC0wLDAgKzEsMTI5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLmRldGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2Vj
dGlvbiA+IC5oZWFkZXIgeworICAgIGRpc3BsYXk6IGZsZXg7CisgICAgaGVpZ2h0OiAyMnB4Owor
ICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOworICAgIGZvbnQtd2VpZ2h0OiBsaWdodGVyOwor
fQorCisuZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uOm5vdCgu
Y29sbGFwc2VkKSA+IC5oZWFkZXIgeworICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2Io
MTc5LCAxNzksIDE3OSk7Cit9CisKK0BtZWRpYSAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJh
dGlvOiAyKSB7CisgICAgLmRldGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2Vj
dGlvbjpub3QoLmNvbGxhcHNlZCkgPiAuaGVhZGVyIHsKKyAgICAgICAgYm9yZGVyLXdpZHRoOiAw
LjVweCAhaW1wb3J0YW50OworICAgIH0KK30KKworLmRldGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5
bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5oZWFkZXIgPiAuY3VycmVudC1zZWxlY3RvciB7CisgICAg
d2lkdGg6IGNhbGMoMTAwJSAtIDg1cHgpOworICAgIG1hcmdpbi1sZWZ0OiA2cHg7CisgICAgZm9u
dC13ZWlnaHQ6IG5vcm1hbDsKKyAgICB3aGl0ZS1zcGFjZTogbm93cmFwOworICAgIG92ZXJmbG93
OiBoaWRkZW47CisgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Cit9CisKKy52aXN1YWwtc3R5
bGUtc2VsZWN0b3Itc2VjdGlvbi5kZXRhaWxzLXNlY3Rpb246bm90KC5jb2xsYXBzZWQpID4gLmhl
YWRlciA+IC5jdXJyZW50LXNlbGVjdG9yIHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisuZGV0
YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmhlYWRlciA+IC5j
dXJyZW50LXNlbGVjdG9yID4gLmljb24geworICAgIHdpZHRoOiAxNnB4OworICAgIGhlaWdodDog
MTZweDsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAzcHg7Cit9CisKKy5kZXRh
aWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24gPiAuaGVhZGVyID4gLmN1
cnJlbnQtc2VsZWN0b3IgPiBzcGFuIHsKKyAgICBtYXJnaW4tbGVmdDogMjFweDsKK30KKworLmRl
dGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5oZWFkZXIgPiAu
Y29udHJvbHMgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICByaWdodDogMDsKKyAgICB0
b3A6IDA7CisgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBsaWdodGdyZXk7Cit9CisKKy5kZXRh
aWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24uY29sbGFwc2VkID4gLmhl
YWRlciA+IC5jb250cm9scyB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworLmRldGFpbHMtc2Vj
dGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5oZWFkZXIgPiAuY29udHJvbHMg
PiAudmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24tYWRkLXJ1bGUgeworICAgIHdpZHRoOiAy
M3B4OworICAgIGhlaWdodDogMjFweDsKKyAgICBwYWRkaW5nOiA0cHggNXB4OworICAgIG9wYWNp
dHk6IDAuNzsKK30KKworLmRldGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2Vj
dGlvbiA+IC5jb250ZW50ID4gLnNlbGVjdG9ycyB7CisgICAgbWF4LWhlaWdodDogMTEwcHg7Cisg
ICAgb3ZlcmZsb3c6IGF1dG87Cit9CisKKy5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNl
bGVjdG9yLXNlY3Rpb24gPiAuY29udGVudCA+IC5zZWxlY3RvcnMgPiAuc2VsZWN0b3ItbGlzdCB7
CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmctbGVmdDogMDsKKyAgICBvdXRsaW5lOiBub25l
OworfQorCisuZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4g
LmNvbnRlbnQgPiAuc2VsZWN0b3JzID4gLnNlbGVjdG9yLWxpc3QgPiAudmlzdWFsLXN0eWxlLXNl
bGVjdG9yLWl0ZW06bnRoLWNoaWxkKG9kZCkgeworICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRl
OworfQorCisuZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4g
LmNvbnRlbnQgPiAuc2VsZWN0b3JzID4gLnNlbGVjdG9yLWxpc3QgPiAuc2VjdGlvbi1kaXZpZGVy
IHsKKyAgICBwb3NpdGlvbjogLXdlYmtpdC1zdGlja3k7CisgICAgdG9wOiAtMXB4OworICAgIGhl
aWdodDogMTdweDsKKyAgICBwYWRkaW5nOiAycHg7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmdi
KDI0MiwgMjQyLCAyNDIpOworICAgIGJvcmRlci1jb2xvcjogcmdiKDE3OSwgMTc5LCAxNzkpOwor
ICAgIGJvcmRlci1zdHlsZTogc29saWQ7CisgICAgYm9yZGVyLXdpZHRoOiAxcHggMDsKKyAgICB6
LWluZGV4OiAxMDA7Cit9CisKKy5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9y
LXNlY3Rpb24gPiAuY29udGVudCA+IC5zZWxlY3RvcnMgPiAuc2VsZWN0b3ItbGlzdCA+IC5zZWN0
aW9uLWRpdmlkZXIgPiAuZGlzY2xvc3VyZS1idXR0b24sCisuZGV0YWlscy1zZWN0aW9uLnZpc3Vh
bC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmNvbnRlbnQgPiAuc2VsZWN0b3JzID4gLnNlbGVj
dG9yLWxpc3QgPiAuc2VjdGlvbi1kaXZpZGVyID4gLmljb24geworICAgIGRpc3BsYXk6IG5vbmU7
Cit9CisKKy5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24gPiAu
Y29udGVudCA+IC5zZWxlY3RvcnMgPiAuc2VsZWN0b3ItbGlzdCA+IC5zZWN0aW9uLWRpdmlkZXIg
PiAudGl0bGVzID4gLnRpdGxlIHsKKyAgICBvdmVyZmxvdzogaGlkZGVuOworICAgIHdoaXRlLXNw
YWNlOiBub3dyYXA7CisgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Cit9CisKKy5kZXRhaWxz
LXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24gPiAuY29udGVudCA+IC5zZWxl
Y3RvcnMgPiAuc2VsZWN0b3ItbGlzdCA+IC5zZWN0aW9uLWRpdmlkZXIgfiAudmlzdWFsLXN0eWxl
LXNlbGVjdG9yLWl0ZW06bnRoLWNoaWxkKGV2ZW4pIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3
aGl0ZTsKK30KKworLmRldGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlv
biA+IC5jb250ZW50ID4gLnNlbGVjdG9ycyA+IC5zZWxlY3Rvci1saXN0ID4gLnNlY3Rpb24tZGl2
aWRlciB+IC52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbTpudGgtY2hpbGQob2RkKSB7CisgICAg
YmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9WaXN1YWxTdHlsZVNlbGVjdG9yU2VjdGlv
bi5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Zpc3VhbFN0
eWxlU2VsZWN0b3JTZWN0aW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE5NDU1MDMzNTZhYzZjOGIxODU3MjUx
ZWJjMmZjOWI1YzJlNGIwNWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9WaWV3cy9WaXN1YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5qcwpAQCAt
MCwwICsxLDMwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMywgMkFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2Vs
ZWN0b3JTZWN0aW9uID0gY2xhc3MgVmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24gZXh0ZW5kcyBX
ZWJJbnNwZWN0b3IuRGV0YWlsc1NlY3Rpb24KK3sKKyAgICBjb25zdHJ1Y3RvcihkZWxlZ2F0ZSkK
KyAgICB7CisgICAgICAgIHZhciBzZWxlY3RvclNlY3Rpb24gPSB7ZWxlbWVudDogZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiZGl2Iil9OworICAgICAgICBzZWxlY3RvclNlY3Rpb24uZWxlbWVudC5j
bGFzc0xpc3QuYWRkKCJzZWxlY3RvcnMiKTsKKworICAgICAgICB2YXIgY29udHJvbEVsZW1lbnQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgY29udHJvbEVsZW1lbnQu
Y2xhc3NMaXN0LmFkZCgiY29udHJvbHMiKTsKKworICAgICAgICBzdXBlcigidmlzdWFsLXN0eWxl
LXNlbGVjdG9yLXNlY3Rpb24iLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlN0eWxlIFJ1bGVzIiks
IFtzZWxlY3RvclNlY3Rpb25dLCBjb250cm9sRWxlbWVudCk7CisKKyAgICAgICAgdGhpcy5fZGVs
ZWdhdGUgPSBkZWxlZ2F0ZSB8fCBudWxsCisgICAgICAgIHRoaXMuX25vZGVTdHlsZXMgPSBudWxs
OworCisgICAgICAgIHRoaXMuX2N1cnJlbnRTZWxlY3RvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImRpdiIpOworICAgICAgICB0aGlzLl9jdXJyZW50U2VsZWN0b3IuY2xhc3NMaXN0LmFkZCgi
Y3VycmVudC1zZWxlY3RvciIpOworCisgICAgICAgIHZhciBjdXJyZW50U2VsZWN0b3JJY29uID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7CisgICAgICAgIGN1cnJlbnRTZWxlY3Rvcklj
b24uY2xhc3NMaXN0LmFkZCgiaWNvbiIpOworICAgICAgICB0aGlzLl9jdXJyZW50U2VsZWN0b3Iu
YXBwZW5kQ2hpbGQoY3VycmVudFNlbGVjdG9ySWNvbik7CisKKyAgICAgICAgdGhpcy5fY3VycmVu
dFNlbGVjdG9yVGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAgICAg
dGhpcy5fY3VycmVudFNlbGVjdG9yLmFwcGVuZENoaWxkKHRoaXMuX2N1cnJlbnRTZWxlY3RvclRl
eHQpOworCisgICAgICAgIHRoaXMuX2hlYWRlckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fY3Vy
cmVudFNlbGVjdG9yKTsKKworICAgICAgICB2YXIgc2VsZWN0b3JMaXN0ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgib2wiKTsKKyAgICAgICAgc2VsZWN0b3JMaXN0LmNsYXNzTGlzdC5hZGQoInNl
bGVjdG9yLWxpc3QiKTsKKyAgICAgICAgc2VsZWN0b3JTZWN0aW9uLmVsZW1lbnQuYXBwZW5kQ2hp
bGQoc2VsZWN0b3JMaXN0KTsKKworICAgICAgICB0aGlzLl9zZWxlY3RvcnMgPSBuZXcgV2ViSW5z
cGVjdG9yLlRyZWVPdXRsaW5lKHNlbGVjdG9yTGlzdCk7CisgICAgICAgIHRoaXMuX3NlbGVjdG9y
cy5vbnNlbGVjdCA9IHRoaXMuX3NlbGVjdG9yQ2hhbmdlZC5iaW5kKHRoaXMpOworICAgICAgICB0
aGlzLl9mb2N1c05leHROZXdJbnNwZWN0b3JSdWxlID0gZmFsc2U7CisKKyAgICAgICAgd3JhcHBl
ZFNWR0RvY3VtZW50KCJJbWFnZXMvUGx1cy5zdmciLCAidmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNl
Y3Rpb24tYWRkLXJ1bGUiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNsaWNrIHRvIGFkZCBhIG5l
dyBydWxlLiIpLCBmdW5jdGlvbih3cmFwcGVyKSB7CisgICAgICAgICAgICB3cmFwcGVyLmFkZEV2
ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fYWRkTmV3UnVsZS5iaW5kKHRoaXMpKTsKKyAgICAg
ICAgICAgIGNvbnRyb2xFbGVtZW50LmFwcGVuZENoaWxkKHdyYXBwZXIpOworICAgICAgICB9LmJp
bmQodGhpcykpOworCisgICAgICAgIHRoaXMuX2hlYWRlckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5l
cigibW91c2VvdmVyIiwgdGhpcy5faGFuZGxlTW91c2VPdmVyLmJpbmQodGhpcykpOworICAgICAg
ICB0aGlzLl9oZWFkZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IiwgdGhpcy5f
aGFuZGxlTW91c2VPdXQuYmluZCh0aGlzKSk7CisgICAgfQorCisgICAgLy8gUHVibGljCisKKyAg
ICB1cGRhdGUobm9kZVN0eWxlcykKKyAgICB7CisgICAgICAgIHZhciBzdHlsZSA9IHRoaXMuY3Vy
cmVudFJ1bGUoKTsKKyAgICAgICAgaWYgKHN0eWxlKQorICAgICAgICAgICAgdGhpcy5fbm9kZVN0
eWxlcy5fX2xhc3RTZWxlY3RlZFJ1bGUgPSBzdHlsZTsKKworICAgICAgICBpZiAobm9kZVN0eWxl
cykKKyAgICAgICAgICAgIHRoaXMuX25vZGVTdHlsZXMgPSBub2RlU3R5bGVzOworCisgICAgICAg
IGlmICghdGhpcy5fbm9kZVN0eWxlcykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0
aGlzLl9zZWxlY3RvcnMucmVtb3ZlQ2hpbGRyZW4oKTsKKworICAgICAgICB2YXIgcHJldmlvdXNS
dWxlID0gbnVsbDsKKworICAgICAgICAvLyBQc2V1ZG8gU3R5bGVzCisgICAgICAgIHZhciBwc2V1
ZG9FbGVtZW50cyA9IHRoaXMuX25vZGVTdHlsZXMucHNldWRvRWxlbWVudHM7CisgICAgICAgIHZh
ciBwc2V1ZG9SdWxlcyA9IFtdOworCisgICAgICAgIGZvciAodmFyIHBzZXVkb0lkZW50aWZpZXIg
aW4gcHNldWRvRWxlbWVudHMpCisgICAgICAgICAgICBwc2V1ZG9SdWxlcyA9IHBzZXVkb1J1bGVz
LmNvbmNhdChwc2V1ZG9FbGVtZW50c1twc2V1ZG9JZGVudGlmaWVyXS5tYXRjaGVkUnVsZXMpOwor
CisgICAgICAgIHZhciBvcmRlcmVkUHNldWRvUnVsZXMgPSB1bmlxdWVPcmRlcmVkUnVsZXMocHNl
dWRvUnVsZXMpOworICAgICAgICAvLyBSZXZlcnNlIHRoZSBhcnJheSB0byBhbGxvdyBlbnN1cmUg
dGhhdCBzcGxpY2luZyB0aGUgYXJyYXkgd2lsbCBub3QgbWVzcyB3aXRoIHRoZSBvcmRlci4KKyAg
ICAgICAgaWYgKG9yZGVyZWRQc2V1ZG9SdWxlcy5sZW5ndGgpCisgICAgICAgICAgICBvcmRlcmVk
UHNldWRvUnVsZXMucmV2ZXJzZSgpOworCisgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVNlbGVjdG9y
SXRlbShzdHlsZSwgdGl0bGUsIHN1YnRpdGxlKSB7CisgICAgICAgICAgICB2YXIgc2VsZWN0b3Ig
PSBuZXcgV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JJdGVtKHN0eWxlLCB0aXRsZSwg
c3VidGl0bGUpOworICAgICAgICAgICAgc2VsZWN0b3IuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNw
ZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3Rvckl0ZW0uRXZlbnQuU3R5bGVUZXh0UmVzZXQsIHRoaXMu
X3N0eWxlVGV4dFJlc2V0LmJpbmQodGhpcykpOworICAgICAgICAgICAgc2VsZWN0b3IuYWRkRXZl
bnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3Rvckl0ZW0uRXZlbnQuQ2hl
Y2tib3hDaGFuZ2VkLCB0aGlzLl90cmVlRWxlbWVudENoZWNrYm94VG9nZ2xlZC5iaW5kKHRoaXMp
KTsKKyAgICAgICAgICAgIHRoaXMuX3NlbGVjdG9ycy5hcHBlbmRDaGlsZChzZWxlY3Rvcik7CisK
KyAgICAgICAgICAgIGlmICh0aGlzLl9mb2N1c05leHROZXdJbnNwZWN0b3JSdWxlICYmIHN0eWxl
Lm93bmVyUnVsZSAmJiBzdHlsZS5vd25lclJ1bGUudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkNTU1J1
bGUuVHlwZS5JbnNwZWN0b3IpIHsKKyAgICAgICAgICAgICAgICBzZWxlY3Rvci5zZWxlY3QodHJ1
ZSk7CisgICAgICAgICAgICAgICAgc2VsZWN0b3IuZWxlbWVudC5zY3JvbGxJbnRvVmlldygpOwor
ICAgICAgICAgICAgICAgIHRoaXMuX25vZGVTdHlsZXMuX19sYXN0U2VsZWN0ZWRSdWxlID0gc3R5
bGU7CisgICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNOZXh0TmV3SW5zcGVjdG9yUnVsZSA9IGZh
bHNlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKHRoaXMuX25vZGVTdHlsZXMuX19sYXN0U2VsZWN0ZWRSdWxlID09PSBzdHlsZSkgewor
ICAgICAgICAgICAgICAgIHNlbGVjdG9yLnNlbGVjdCh0cnVlKTsKKyAgICAgICAgICAgICAgICBz
ZWxlY3Rvci5lbGVtZW50LnNjcm9sbEludG9WaWV3KCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBmdW5jdGlvbiB1bmlxdWVPcmRlcmVkUnVsZXMob3JkZXJlZFJ1bGVzKQor
ICAgICAgICB7CisgICAgICAgICAgICB2YXIgdW5pcXVlUnVsZXMgPSBbXTsKKworICAgICAgICAg
ICAgZm9yICh2YXIgcnVsZSBvZiBvcmRlcmVkUnVsZXMpIHsKKyAgICAgICAgICAgICAgICB2YXIg
Zm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBleGlzdGluZ1J1bGUgb2Yg
dW5pcXVlUnVsZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFydWxlLmlzRXF1YWxUbyhl
eGlzdGluZ1J1bGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoZm91bmQpCisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgdW5pcXVlUnVsZXMucHVz
aChydWxlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHVuaXF1ZVJ1bGVz
OworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gaW5zZXJ0QWxsTWF0Y2hpbmdQc2V1ZG9S
dWxlcyhmb3JjZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFvcmRlcmVkUHNldWRvUnVs
ZXMubGVuZ3RoKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKGZv
cmNlKSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IG9yZGVyZWRQc2V1ZG9SdWxlcy5s
ZW5ndGggLSAxOyBqID49IDA7IC0taikgeworICAgICAgICAgICAgICAgICAgICB2YXIgcHNldWRv
UnVsZSA9IG9yZGVyZWRQc2V1ZG9SdWxlc1tqXTsKKyAgICAgICAgICAgICAgICAgICAgY3JlYXRl
U2VsZWN0b3JJdGVtLmNhbGwodGhpcywgcHNldWRvUnVsZS5zdHlsZSwgcHNldWRvUnVsZS5zZWxl
Y3RvclRleHQsIHBzZXVkb1J1bGUubWVkaWFUZXh0KTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgb3JkZXJlZFBzZXVkb1J1bGVzID0gW107CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICghcHJldmlvdXNSdWxlKQorICAgICAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICAgICAgZm9yICh2YXIgaiA9IG9yZGVyZWRQc2V1ZG9SdWxlcy5sZW5ndGggLSAxOyBq
ID49IDA7IC0taikgeworICAgICAgICAgICAgICAgIHZhciBwc2V1ZG9SdWxlID0gb3JkZXJlZFBz
ZXVkb1J1bGVzW2pdOworICAgICAgICAgICAgICAgIGlmICghcHNldWRvUnVsZS5zZWxlY3Rvcklz
R3JlYXRlcihwcmV2aW91c1J1bGUubW9zdFNwZWNpZmljU2VsZWN0b3IpKQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGNyZWF0ZVNlbGVjdG9ySXRlbS5j
YWxsKHRoaXMsIHBzZXVkb1J1bGUuc3R5bGUsIHBzZXVkb1J1bGUuc2VsZWN0b3JUZXh0LCBwc2V1
ZG9SdWxlLm1lZGlhVGV4dCk7CisgICAgICAgICAgICAgICAgcHJldmlvdXNSdWxlID0gcHNldWRv
UnVsZTsKKyAgICAgICAgICAgICAgICBvcmRlcmVkUHNldWRvUnVsZXMuc3BsaWNlKGosIDEpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCF0aGlzLl9ub2RlU3R5bGVz
Ll9fbGFzdFNlbGVjdGVkUnVsZSkKKyAgICAgICAgICAgIHRoaXMuX25vZGVTdHlsZXMuX19sYXN0
U2VsZWN0ZWRSdWxlID0gdGhpcy5fbm9kZVN0eWxlcy5pbmxpbmVTdHlsZTsKKworICAgICAgICAv
LyBJbmxpbmUgU3R5bGUKKyAgICAgICAgY3JlYXRlU2VsZWN0b3JJdGVtLmNhbGwodGhpcywgdGhp
cy5fbm9kZVN0eWxlcy5pbmxpbmVTdHlsZSwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJUaGlzIEVs
ZW1lbnQiKSk7CisKKyAgICAgICAgLy8gTWF0Y2hlZCBSdWxlcworICAgICAgICBmb3IgKHZhciBy
dWxlIG9mIHVuaXF1ZU9yZGVyZWRSdWxlcyh0aGlzLl9ub2RlU3R5bGVzLm1hdGNoZWRSdWxlcykp
IHsKKyAgICAgICAgICAgIGlmIChydWxlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5DU1NSdWxlLlR5
cGUuVXNlckFnZW50KSB7CisgICAgICAgICAgICAgICAgaW5zZXJ0QWxsTWF0Y2hpbmdQc2V1ZG9S
dWxlcy5jYWxsKHRoaXMsIHRydWUpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpbnNlcnRBbGxNYXRjaGluZ1BzZXVkb1J1bGVzLmNhbGwo
dGhpcyk7CisgICAgICAgICAgICBjcmVhdGVTZWxlY3Rvckl0ZW0uY2FsbCh0aGlzLCBydWxlLnN0
eWxlLCBydWxlLnNlbGVjdG9yVGV4dCwgcnVsZS5tZWRpYVRleHQpOworICAgICAgICAgICAgcHJl
dmlvdXNSdWxlID0gcnVsZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEp1c3QgaW4gY2FzZSB0
aGVyZSBhcmUgYW55IHJlbWFpbmluZyBwc2V1ZG8tc3R5bGVzLgorICAgICAgICBpbnNlcnRBbGxN
YXRjaGluZ1BzZXVkb1J1bGVzLmNhbGwodGhpcywgdHJ1ZSk7CisKKyAgICAgICAgLy8gSW5oZXJp
dGVkIFJ1bGVzCisgICAgICAgIGZvciAodmFyIGluaGVyaXRlZCBvZiB0aGlzLl9ub2RlU3R5bGVz
LmluaGVyaXRlZFJ1bGVzKSB7CisgICAgICAgICAgICBpZiAoIWluaGVyaXRlZC5tYXRjaGVkUnVs
ZXMgfHwgIWluaGVyaXRlZC5tYXRjaGVkUnVsZXMubGVuZ3RoKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICB2YXIgZGl2aWRlciA9IG5ldyBXZWJJbnNwZWN0b3IuR2Vu
ZXJhbFRyZWVFbGVtZW50KCJzZWN0aW9uLWRpdmlkZXIiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmco
IkluaGVyaXRlZCBmcm9tICVzIikuZm9ybWF0KFdlYkluc3BlY3Rvci5kaXNwbGF5TmFtZUZvck5v
ZGUoaW5oZXJpdGVkLm5vZGUpKSk7CisgICAgICAgICAgICBkaXZpZGVyLnNlbGVjdGFibGUgPSBm
YWxzZTsKKyAgICAgICAgICAgIHRoaXMuX3NlbGVjdG9ycy5hcHBlbmRDaGlsZChkaXZpZGVyKTsK
KworICAgICAgICAgICAgZm9yICh2YXIgcnVsZSBvZiB1bmlxdWVPcmRlcmVkUnVsZXMoaW5oZXJp
dGVkLm1hdGNoZWRSdWxlcykpIHsKKyAgICAgICAgICAgICAgICBpZiAocnVsZS50eXBlID09PSBX
ZWJJbnNwZWN0b3IuQ1NTUnVsZS5UeXBlLlVzZXJBZ2VudCkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgICAgICAgICBjcmVhdGVTZWxlY3Rvckl0ZW0uY2FsbCh0aGlz
LCBydWxlLnN0eWxlLCBydWxlLnNlbGVjdG9yVGV4dCwgcnVsZS5tZWRpYVRleHQpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fZm9jdXNOZXh0TmV3SW5zcGVjdG9y
UnVsZSA9IGZhbHNlOworICAgIH0KKworICAgIGN1cnJlbnRSdWxlKCkKKyAgICB7CisgICAgICAg
IGlmICghdGhpcy5fbm9kZVN0eWxlcyB8fCAhdGhpcy5fc2VsZWN0b3JzLnNlbGVjdGVkVHJlZUVs
ZW1lbnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVj
dG9ycy5zZWxlY3RlZFRyZWVFbGVtZW50LnJlcHJlc2VudGVkT2JqZWN0OworICAgIH0KKworICAg
IC8vIFByaXZhdGUKKworICAgIF9zZWxlY3RvckNoYW5nZWQoc2VsZWN0ZWRUcmVlRWxlbWVudCkK
KyAgICB7CisgICAgICAgIGlmICghc2VsZWN0ZWRUcmVlRWxlbWVudCkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICB0aGlzLl9jdXJyZW50U2VsZWN0b3IuY2xhc3NOYW1lID0gImN1cnJl
bnQtc2VsZWN0b3IgIiArIHNlbGVjdGVkVHJlZUVsZW1lbnQuaWNvbkNsYXNzTmFtZTsKKworICAg
ICAgICB2YXIgdGV4dCA9IHNlbGVjdGVkVHJlZUVsZW1lbnQubWFpblRpdGxlOworICAgICAgICB2
YXIgc3VidGl0bGUgPSBzZWxlY3RlZFRyZWVFbGVtZW50LnN1YnRpdGxlOworICAgICAgICBpZiAo
c3VidGl0bGUgJiYgc3VidGl0bGUubGVuZ3RoKQorICAgICAgICAgICAgdGV4dCArPSAiIFx1MjAx
NCAiICsgc3VidGl0bGU7CisKKyAgICAgICAgdGhpcy5fY3VycmVudFNlbGVjdG9yVGV4dC50ZXh0
Q29udGVudCA9IHRleHQ7CisKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMo
V2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLkV2ZW50LlNlbGVjdG9yQ2hh
bmdlZCk7CisgICAgfQorCisgICAgX3N0eWxlVGV4dFJlc2V0KCkKKyAgICB7CisgICAgICAgIHRo
aXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVj
dG9yU2VjdGlvbi5FdmVudC5TZWxlY3RvckNoYW5nZWQpOworICAgIH0KKworICAgIF9hZGROZXdS
dWxlKGV2ZW50KQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9ub2RlU3R5bGVzKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX25vZGVTdHlsZXMuYWRkRW1wdHlSdWxlKCk7
CisgICAgICAgIHRoaXMuX2ZvY3VzTmV4dE5ld0luc3BlY3RvclJ1bGUgPSB0cnVlOworICAgIH0K
KworICAgIF90cmVlRWxlbWVudENoZWNrYm94VG9nZ2xlZChldmVudCkKKyAgICB7CisgICAgICAg
IHZhciBlbmFibGVkID0gZXZlbnQgJiYgZXZlbnQuZGF0YSAmJiBldmVudC5kYXRhLmVuYWJsZWQ7
CisgICAgICAgIHZhciBzdHlsZSA9IHRoaXMuY3VycmVudFJ1bGUoKTsKKyAgICAgICAgaWYgKCFz
dHlsZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgdGV4dCA9IHN0eWxlLnRl
eHQ7CisgICAgICAgIGlmICghdGV4dCB8fCAhdGV4dC5sZW5ndGgpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgdmFyIHJlcGxhY2VtZW50ID0gIiI7CisgICAgICAgIGlmIChlbmFibGVk
KQorICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSB0ZXh0LnJlcGxhY2UoL1xzKihcL1wqfFwqXC8p
XHMqL2csICIiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSAiLyog
IiArIHRleHQucmVwbGFjZSgvKFxzKjsoPyEkKVxzKikvZywgIiQxICovLyogIikgKyAiICovIjsK
KworICAgICAgICBzdHlsZS50ZXh0ID0gcmVwbGFjZW1lbnQ7CisgICAgICAgIHN0eWxlLl9fdmlz
dWFsU3R5bGVEaXNhYmxlZCA9ICFlbmFibGVkOworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRU
b0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24uRXZlbnQu
U2VsZWN0b3JDaGFuZ2VkKTsKKworICAgIH0KKworICAgIF9oYW5kbGVNb3VzZU92ZXIoKQorICAg
IHsKKyAgICAgICAgaWYgKCF0aGlzLmNvbGxhcHNlZCkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICB2YXIgc3R5bGUgPSB0aGlzLmN1cnJlbnRSdWxlKCk7CisKKyAgICAgICAgaWYgKCFz
dHlsZS5vd25lclJ1bGUpIHsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kb21UcmVlTWFuYWdl
ci5oaWdobGlnaHRET01Ob2RlKHN0eWxlLm5vZGUuaWQpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgV2ViSW5zcGVjdG9yLmRvbVRyZWVNYW5hZ2VyLmhpZ2hsaWdo
dFNlbGVjdG9yKHN0eWxlLm93bmVyUnVsZS5zZWxlY3RvclRleHQsIHN0eWxlLm5vZGUub3duZXJE
b2N1bWVudC5mcmFtZUlkZW50aWZpZXIpOworICAgIH0KKworICAgIF9oYW5kbGVNb3VzZU91dCgp
CisgICAgeworICAgICAgICBpZiAoIXRoaXMuY29sbGFwc2VkKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIFdlYkluc3BlY3Rvci5kb21UcmVlTWFuYWdlci5oaWRlRE9NTm9kZUhpZ2hs
aWdodCgpOworICAgIH0KK307CisKK1dlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yU2Vj
dGlvbi5FdmVudCA9IHsKKyAgICBTZWxlY3RvckNoYW5nZWQ6ICJ2aXN1YWwtc3R5bGUtc2VsZWN0
b3ItY2hhbmdlZCIKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258201</attachid>
            <date>2015-08-04 12:59:53 -0700</date>
            <delta_ts>2015-08-05 18:24:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147572-20150804125945.patch</filename>
            <type>text/plain</type>
            <size>40659</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IGQzYzhiODQyZTNjZGQ1ODc0N2E4MzFmN2M0MmM2
OTUyZTMzNzA0OWEuLjM5NjA1ZDA0MWRmODc1YWY4ZTEyZGQwYTFkMzRlNzU3Njg4NDRlZmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgxIEBACisyMDE1LTA4LTA0ICBEZXZp
biBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBB
ZGQgVmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzU3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTUnVsZS5qczoK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NSdWxlLnByb3RvdHlwZS5nZXQgbWVkaWFUZXh0KToK
KyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9DU1NTdHlsZURlY2xhcmF0aW9uLmpzOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24pOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLnNldCB0ZXh0KToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZS5yZXNldFRleHQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLmdl
bmVyYXRlQ1NTUnVsZVN0cmluZyk6CisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9DU1NT
dHlsZURlY2xhcmF0aW9uU2VjdGlvbi5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHls
ZURlY2xhcmF0aW9uU2VjdGlvbi5wcm90b3R5cGUuX2hhbmRsZVNlbGVjdG9yUGFzdGUuX2hhbmRs
ZUNvbnRleHRNZW51RXZlbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFy
YXRpb25TZWN0aW9uLnByb3RvdHlwZS5faGFuZGxlU2VsZWN0b3JQYXN0ZS5fZ2VuZXJhdGVDU1NS
dWxlU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL1Zpc3Vh
bFN0eWxlU2VsZWN0b3JJdGVtLmNzczogQWRkZWQuCisgICAgICAgICguaXRlbS52aXN1YWwtc3R5
bGUtc2VsZWN0b3ItaXRlbSk6CisgICAgICAgICguaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3It
aXRlbS5zZWxlY3RlZCk6CisgICAgICAgICguaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRl
bSA+IC5kaXNjbG9zdXJlLWJ1dHRvbik6CisgICAgICAgICguaXRlbS52aXN1YWwtc3R5bGUtc2Vs
ZWN0b3ItaXRlbSA+IGlucHV0W3R5cGU9ImNoZWNrYm94Il0pOgorICAgICAgICAoLml0ZW0udmlz
dWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0gPiAuaWNvbik6CisgICAgICAgICguaXRlbS52aXN1YWwt
c3R5bGUtc2VsZWN0b3ItaXRlbS5tb2RpZmllZCA+IC5pY29uKToKKyAgICAgICAgKC5pdGVtLnZp
c3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtID4gLnRpdGxlcyk6CisgICAgICAgICguaXRlbS52aXN1
YWwtc3R5bGUtc2VsZWN0b3ItaXRlbTpub3QoLmRvbS1lbGVtZW50LWljb24pID4gLnRpdGxlcyA+
IC50aXRsZSk6CisgICAgICAgICguaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbTpub3Qo
LmRvbS1lbGVtZW50LWljb24pLmVkaXRhYmxlID4gLnRpdGxlcyA+IC50aXRsZSk6CisgICAgICAg
ICguaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbTpub3QoLmRvbS1lbGVtZW50LWljb24p
LmVkaXRhYmxlID4gLnRpdGxlcyA+IC50aXRsZTpmb2N1cyk6CisgICAgICAgICguaXRlbS52aXN1
YWwtc3R5bGUtc2VsZWN0b3ItaXRlbSA+IC50aXRsZXMgPiAuc3VidGl0bGU6OmJlZm9yZSk6Cisg
ICAgICAgICguaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbSA+IC50aXRsZXMgPiAuc3Vi
dGl0bGUpOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvVmlzdWFsU3R5bGVTZWxlY3Rv
ckl0ZW0uanM6IEFkZGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0
b3JJdGVtKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9ySXRlbS5w
cm90b3R5cGUuZ2V0IGljb25DbGFzc05hbWUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlZpc3Vh
bFN0eWxlU2VsZWN0b3JJdGVtLnByb3RvdHlwZS5vbmF0dGFjaCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3Rvckl0ZW0ucHJvdG90eXBlLm9uZGVzZWxlY3QpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JJdGVtLnByb3RvdHlwZS5nZXQg
X3NlbGVjdG9yVGV4dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3Rv
ckl0ZW0ucHJvdG90eXBlLl9oaWdobGlnaHROb2Rlc1dpdGhTZWxlY3Rvcik6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3Rvckl0ZW0ucHJvdG90eXBlLl9oaWRlRE9NTm9k
ZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3Rvckl0
ZW0ucHJvdG90eXBlLl9oYW5kbGVDb250ZXh0TWVudUV2ZW50KToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9ySXRlbS5wcm90b3R5cGUuX2hhbmRsZUNoZWNrYm94Q2hh
bmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3Rvckl0ZW0ucHJv
dG90eXBlLl91cGRhdGVDaGVja2JveFRpdGxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1
YWxTdHlsZVNlbGVjdG9ySXRlbS5wcm90b3R5cGUuX2hhbmRsZU1haW5UaXRsZU1vdXNlRG93bik6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3Rvckl0ZW0ucHJvdG90eXBl
Ll9oYW5kbGVNYWluVGl0bGVLZXlEb3duKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxT
dHlsZVNlbGVjdG9ySXRlbS5wcm90b3R5cGUuX2NvbW1pdFNlbGVjdG9yKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9ySXRlbS5wcm90b3R5cGUuX3N0eWxlVGV4dE1v
ZGlmaWVkKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL1Zpc3VhbFN0eWxlU2VsZWN0
b3JTZWN0aW9uLmNzczogQWRkZWQuCisgICAgICAgICguZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1z
dHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmhlYWRlcik6CisgICAgICAgICguZGV0YWlscy1zZWN0
aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uOm5vdCguY29sbGFwc2VkKSA+IC5oZWFk
ZXIpOgorICAgICAgICAoQG1lZGlhICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIp
KToKKyAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rp
b24gPiAuaGVhZGVyID4gLmN1cnJlbnQtc2VsZWN0b3IpOgorICAgICAgICAoLnZpc3VhbC1zdHls
ZS1zZWxlY3Rvci1zZWN0aW9uLmRldGFpbHMtc2VjdGlvbjpub3QoLmNvbGxhcHNlZCkgPiAuaGVh
ZGVyID4gLmN1cnJlbnQtc2VsZWN0b3IpOgorICAgICAgICAoLmRldGFpbHMtc2VjdGlvbi52aXN1
YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5oZWFkZXIgPiAuY3VycmVudC1zZWxlY3RvciA+
IC5pY29uKToKKyAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9y
LXNlY3Rpb24gPiAuaGVhZGVyID4gLmN1cnJlbnQtc2VsZWN0b3IgPiBzcGFuKToKKyAgICAgICAg
KC5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24gPiAuaGVhZGVy
ID4gLmNvbnRyb2xzKToKKyAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNl
bGVjdG9yLXNlY3Rpb24uY29sbGFwc2VkID4gLmhlYWRlciA+IC5jb250cm9scyk6CisgICAgICAg
ICguZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmhlYWRl
ciA+IC5jb250cm9scyA+IC52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbi1hZGQtcnVsZSk6
CisgICAgICAgICguZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9u
ID4gLmNvbnRlbnQgPiAuc2VsZWN0b3JzKToKKyAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24udmlz
dWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24gPiAuY29udGVudCA+IC5zZWxlY3RvcnMgPiAuc2Vs
ZWN0b3ItbGlzdCk6CisgICAgICAgICguZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxl
Y3Rvci1zZWN0aW9uID4gLmNvbnRlbnQgPiAuc2VsZWN0b3JzID4gLnNlbGVjdG9yLWxpc3QgPiAu
dmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW06bnRoLWNoaWxkKG9kZCkpOgorICAgICAgICAoLmRl
dGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5jb250ZW50ID4g
LnNlbGVjdG9ycyA+IC5zZWxlY3Rvci1saXN0ID4gLnNlY3Rpb24tZGl2aWRlcik6CisgICAgICAg
ICguZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmNvbnRl
bnQgPiAuc2VsZWN0b3JzID4gLnNlbGVjdG9yLWxpc3QgPiAuc2VjdGlvbi1kaXZpZGVyID4gLmlj
b24pOgorICAgICAgICAoLmRldGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2Vj
dGlvbiA+IC5jb250ZW50ID4gLnNlbGVjdG9ycyA+IC5zZWxlY3Rvci1saXN0ID4gLnNlY3Rpb24t
ZGl2aWRlciA+IC50aXRsZXMgPiAudGl0bGUpOgorICAgICAgICAoLmRldGFpbHMtc2VjdGlvbi52
aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5jb250ZW50ID4gLnNlbGVjdG9ycyA+IC5z
ZWxlY3Rvci1saXN0ID4gLnNlY3Rpb24tZGl2aWRlciB+IC52aXN1YWwtc3R5bGUtc2VsZWN0b3It
aXRlbTpudGgtY2hpbGQoZXZlbikpOgorICAgICAgICAoLmRldGFpbHMtc2VjdGlvbi52aXN1YWwt
c3R5bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5jb250ZW50ID4gLnNlbGVjdG9ycyA+IC5zZWxlY3Rv
ci1saXN0ID4gLnNlY3Rpb24tZGl2aWRlciB+IC52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbTpu
dGgtY2hpbGQob2RkKSk6CisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9WaXN1YWxTdHls
ZVNlbGVjdG9yU2VjdGlvbi5qczogQWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFs
U3R5bGVTZWxlY3RvclNlY3Rpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxl
U2VsZWN0b3JTZWN0aW9uLnByb3RvdHlwZS51cGRhdGUuY3JlYXRlU2VsZWN0b3JJdGVtKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5wcm90b3R5cGUu
dXBkYXRlLnVuaXF1ZU9yZGVyZWRSdWxlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFs
U3R5bGVTZWxlY3RvclNlY3Rpb24ucHJvdG90eXBlLnVwZGF0ZS5pbnNlcnRBbGxNYXRjaGluZ1Bz
ZXVkb1J1bGVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yU2Vj
dGlvbi5wcm90b3R5cGUudXBkYXRlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxTdHls
ZVNlbGVjdG9yU2VjdGlvbi5wcm90b3R5cGUuY3VycmVudFJ1bGUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLnByb3RvdHlwZS5fc2VsZWN0b3JDaGFu
Z2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5w
cm90b3R5cGUuX3N0eWxlVGV4dFJlc2V0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxT
dHlsZVNlbGVjdG9yU2VjdGlvbi5wcm90b3R5cGUuX2FkZE5ld1J1bGUpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLnByb3RvdHlwZS5fdHJlZUVsZW1l
bnRDaGVja2JveFRvZ2dsZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2Vs
ZWN0b3JTZWN0aW9uLnByb3RvdHlwZS5faGFuZGxlTW91c2VPdmVyKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5wcm90b3R5cGUuX2hhbmRsZU1vdXNl
T3V0KToKKwogMjAxNS0wOC0wMiAgTWF0dCBCYWtlciAgPG1hdHRiYWtlckBhcHBsZS5jb20+CiAK
ICAgICAgICAgV2ViIEluc3BlY3RvcjogVW5uYW1lc3BhY2VkIEZvcm1hdHRlciBjbGFzc2VzIGJy
ZWFrIENTU1N0eWxlRGVjbGFyYXRpb25UZXh0RWRpdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTUnVsZS5qcyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1NSdWxlLmpzCmluZGV4IGE5NGUyN2I1
NjY0NjJhOTBhOWQ0NmM5NTFjOTU2NGQyNzIyNzIyNjguLmNjOTkyZGMzNTE3NTg1ZWE0OTM0YTRh
OTZmNWEyMjk0Nzg5OGMzZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL01vZGVscy9DU1NSdWxlLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL01vZGVscy9DU1NSdWxlLmpzCkBAIC0xNzcsNiArMTc3LDE5IEBAIFdlYklu
c3BlY3Rvci5DU1NSdWxlID0gY2xhc3MgQ1NTUnVsZSBleHRlbmRzIFdlYkluc3BlY3Rvci5PYmpl
Y3QKICAgICAgICAgcmV0dXJuIHRoaXMuX21lZGlhTGlzdDsKICAgICB9CiAKKyAgICBnZXQgbWVk
aWFUZXh0KCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fbWVkaWFMaXN0Lmxlbmd0aCkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgbWVkaWFUZXh0ID0gIiI7CisKKyAgICAg
ICAgZm9yICh2YXIgbWVkaWEgb2YgdGhpcy5fbWVkaWFMaXN0KQorICAgICAgICAgICAgbWVkaWFU
ZXh0ICs9IG1lZGlhLnRleHQ7CisKKyAgICAgICAgcmV0dXJuIG1lZGlhVGV4dDsKKyAgICB9CisK
ICAgICBpc0VxdWFsVG8ocnVsZSkKICAgICB7CiAgICAgICAgIGlmICghcnVsZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1NTdHlsZURl
Y2xhcmF0aW9uLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxz
L0NTU1N0eWxlRGVjbGFyYXRpb24uanMKaW5kZXggOTQwNzhjZmQwY2M5YmFkOGM0YjBmMzAxZTQ2
YWEzZWFlYThkYWJkZi4uZTdmMmM3NDk0YTgwNzhjZTMxOTZjNjk0NzBkY2FjZDg5N2U0NDI5YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NT
U1N0eWxlRGVjbGFyYXRpb24uanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvTW9kZWxzL0NTU1N0eWxlRGVjbGFyYXRpb24uanMKQEAgLTQzLDYgKzQzLDkgQEAgV2Vi
SW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24gPSBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9u
IGV4dGVuZHMgV2ViSW5zcGVjdG8KICAgICAgICAgdGhpcy5fcGVuZGluZ1Byb3BlcnRpZXMgPSBb
XTsKICAgICAgICAgdGhpcy5fcHJvcGVydHlOYW1lTWFwID0ge307CiAKKyAgICAgICAgdGhpcy5f
aW5pdGlhbFRleHQgPSB0ZXh0OworICAgICAgICB0aGlzLm1vZGlmaWVkID0gZmFsc2U7CisKICAg
ICAgICAgdGhpcy51cGRhdGUodGV4dCwgcHJvcGVydGllcywgc3R5bGVTaGVldFRleHRSYW5nZSwg
dHJ1ZSk7CiAgICAgfQogCkBAIC0xODMsOSArMTg2LDIxIEBAIFdlYkluc3BlY3Rvci5DU1NTdHls
ZURlY2xhcmF0aW9uID0gY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbiBleHRlbmRzIFdlYkluc3Bl
Y3RvCiAgICAgICAgIGlmICh0aGlzLl90ZXh0ID09PSB0ZXh0KQogICAgICAgICAgICAgcmV0dXJu
OwogCisgICAgICAgIHZhciBtb2RpZmllZCA9IHRleHQgIT09IHRoaXMuX2luaXRpYWxUZXh0Owor
CisgICAgICAgIGlmIChtb2RpZmllZCAhPT0gdGhpcy5tb2RpZmllZCkgeworICAgICAgICAgICAg
dGhpcy5tb2RpZmllZCA9IG1vZGlmaWVkOworICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50
VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24uRXZlbnQuSW5pdGlh
bFRleHRNb2RpZmllZCk7CisgICAgICAgIH0KKwogICAgICAgICB0aGlzLl9ub2RlU3R5bGVzLmNo
YW5nZVN0eWxlVGV4dCh0aGlzLCB0ZXh0KTsKICAgICB9CiAKKyAgICByZXNldFRleHQoKQorICAg
IHsKKyAgICAgICAgdGhpcy50ZXh0ID0gdGhpcy5faW5pdGlhbFRleHQ7CisgICAgfQorCiAgICAg
Z2V0IHByb3BlcnRpZXMoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb3BlcnRpZXM7
CkBAIC0yNjAsNiArMjc1LDQ2IEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uID0g
Y2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbiBleHRlbmRzIFdlYkluc3BlY3RvCiAgICAgICAgIHJl
dHVybiBuZXdQcm9wZXJ0eTsKICAgICB9CiAKKyAgICBnZW5lcmF0ZUNTU1J1bGVTdHJpbmcoKQor
ICAgIHsKKyAgICAgICAgdmFyIG51bU1lZGlhUXVlcmllcyA9IDA7CisgICAgICAgIHZhciBzdHls
ZVRleHQgPSAiIjsKKworICAgICAgICBpZiAodGhpcy5fb3duZXJSdWxlKSB7CisgICAgICAgICAg
ICB2YXIgbWVkaWFMaXN0ID0gdGhpcy5fb3duZXJSdWxlLm1lZGlhTGlzdDsKKyAgICAgICAgICAg
IGlmIChtZWRpYUxpc3QubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgbnVtTWVkaWFRdWVyaWVz
ID0gbWVkaWFMaXN0Lmxlbmd0aDsKKworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBudW1N
ZWRpYVF1ZXJpZXMgLSAxOyBpID49IDA7IC0taSkKKyAgICAgICAgICAgICAgICAgICAgc3R5bGVU
ZXh0ICs9ICIgICAgIi5yZXBlYXQobnVtTWVkaWFRdWVyaWVzIC0gaSAtIDEpICsgIkBtZWRpYSAi
ICsgbWVkaWFMaXN0W2ldLnRleHQgKyAiIHtcbiI7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHN0eWxlVGV4dCArPSAiICAgICIucmVwZWF0KG51bU1lZGlhUXVlcmllcykgKyB0aGlzLl9v
d25lclJ1bGUuc2VsZWN0b3JUZXh0OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN0eWxl
VGV4dCArPSB0aGlzLl9zZWxlY3RvckVsZW1lbnQudGV4dENvbnRlbnQ7CisKKyAgICAgICAgc3R5
bGVUZXh0ICs9ICIge1xuIjsKKworICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBvZiB0aGlzLl9w
cm9wZXJ0aWVzKSB7CisgICAgICAgICAgICBpZiAocHJvcGVydHkuYW5vbnltb3VzKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBzdHlsZVRleHQgKz0gIiAgICAiLnJl
cGVhdChudW1NZWRpYVF1ZXJpZXMgKyAxKSArIHByb3BlcnR5LnRleHQudHJpbSgpOworCisgICAg
ICAgICAgICBpZiAoIXN0eWxlVGV4dC5lbmRzV2l0aCgiOyIpKQorICAgICAgICAgICAgICAgIHN0
eWxlVGV4dCArPSAiOyI7CisKKyAgICAgICAgICAgIHN0eWxlVGV4dCArPSAiXG4iOworICAgICAg
ICB9CisKKyAgICAgICAgZm9yICh2YXIgaSA9IG51bU1lZGlhUXVlcmllczsgaSA+IDA7IC0taSkK
KyAgICAgICAgICAgIHN0eWxlVGV4dCArPSAiICAgICIucmVwZWF0KGkpICsgIn1cbiI7CisKKyAg
ICAgICAgc3R5bGVUZXh0ICs9ICJ9IjsKKworICAgICAgICByZXR1cm4gc3R5bGVUZXh0OworICAg
IH0KKwogICAgIC8vIFByb3RlY3RlZAogCiAgICAgZ2V0IG5vZGVTdHlsZXMoKQpAQCAtMjY5LDcg
KzMyNCw4IEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uID0gY2xhc3MgQ1NTU3R5
bGVEZWNsYXJhdGlvbiBleHRlbmRzIFdlYkluc3BlY3RvCiB9OwogCiBXZWJJbnNwZWN0b3IuQ1NT
U3R5bGVEZWNsYXJhdGlvbi5FdmVudCA9IHsKLSAgICBQcm9wZXJ0aWVzQ2hhbmdlZDogImNzcy1z
dHlsZS1kZWNsYXJhdGlvbi1wcm9wZXJ0aWVzLWNoYW5nZWQiCisgICAgUHJvcGVydGllc0NoYW5n
ZWQ6ICJjc3Mtc3R5bGUtZGVjbGFyYXRpb24tcHJvcGVydGllcy1jaGFuZ2VkIiwKKyAgICBJbml0
aWFsVGV4dE1vZGlmaWVkOiAiY3NzLXN0eWxlLWRlY2xhcmF0aW9uLWluaXRpYWwtdGV4dC1tb2Rp
ZmllZCIKIH07CiAKIFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLlR5cGUgPSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9DU1NT
dHlsZURlY2xhcmF0aW9uU2VjdGlvbi5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL1ZpZXdzL0NTU1N0eWxlRGVjbGFyYXRpb25TZWN0aW9uLmpzCmluZGV4IGUzMDA0MmNh
ZmQwYWY0NWNmNThiOThjMzRjNjVkZmQwODlhOWQxMTcuLjRlNzliNWY5MDUyNTgzNDQ3ZDVlODU1
M2Q1NmExYWM1NGU1YmY1NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1ZpZXdzL0NTU1N0eWxlRGVjbGFyYXRpb25TZWN0aW9uLmpzCisrKyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NTU1N0eWxlRGVjbGFyYXRpb25T
ZWN0aW9uLmpzCkBAIC00NTMsNDkgKzQ1MywxMiBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNs
YXJhdGlvblNlY3Rpb24ucHJvdG90eXBlID0gewogICAgICAgICB2YXIgY29udGV4dE1lbnUgPSBu
ZXcgV2ViSW5zcGVjdG9yLkNvbnRleHRNZW51KGV2ZW50KTsKIAogICAgICAgICBjb250ZXh0TWVu
dS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ29weSBSdWxlIiksIGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNvcHlUZXh0KHRoaXMuX2dl
bmVyYXRlQ1NTUnVsZVN0cmluZygpKTsKKyAgICAgICAgICAgIEluc3BlY3RvckZyb250ZW5kSG9z
dC5jb3B5VGV4dCh0aGlzLl9zdHlsZS5nZW5lcmF0ZUNTU1J1bGVTdHJpbmcoKSk7CiAgICAgICAg
IH0uYmluZCh0aGlzKSk7CiAKICAgICAgICAgY29udGV4dE1lbnUuc2hvdygpOwogICAgIH0sCiAK
LSAgICBfZ2VuZXJhdGVDU1NSdWxlU3RyaW5nOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2
YXIgbnVtTWVkaWFRdWVyaWVzID0gMDsKLSAgICAgICAgdmFyIHN0eWxlVGV4dCA9ICIiOwotCi0g
ICAgICAgIGlmICh0aGlzLl9zdHlsZS5vd25lclJ1bGUpIHsKLSAgICAgICAgICAgIHZhciBtZWRp
YUxpc3QgPSB0aGlzLl9zdHlsZS5vd25lclJ1bGUubWVkaWFMaXN0OwotICAgICAgICAgICAgaWYg
KG1lZGlhTGlzdC5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBudW1NZWRpYVF1ZXJpZXMgPSBt
ZWRpYUxpc3QubGVuZ3RoOwotCi0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IG51bU1lZGlh
UXVlcmllcyAtIDE7IGkgPj0gMDsgLS1pKQotICAgICAgICAgICAgICAgICAgICBzdHlsZVRleHQg
Kz0gIiAgICAiLnJlcGVhdChudW1NZWRpYVF1ZXJpZXMgLSBpIC0gMSkgKyAiQG1lZGlhICIgKyBt
ZWRpYUxpc3RbaV0udGV4dCArICIge1xuIjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
c3R5bGVUZXh0ICs9ICIgICAgIi5yZXBlYXQobnVtTWVkaWFRdWVyaWVzKSArIHRoaXMuX3N0eWxl
Lm93bmVyUnVsZS5zZWxlY3RvclRleHQ7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgc3R5
bGVUZXh0ICs9IHRoaXMuX3NlbGVjdG9yRWxlbWVudC50ZXh0Q29udGVudDsKLQotICAgICAgICBz
dHlsZVRleHQgKz0gIiB7XG4iOwotCi0gICAgICAgIGZvciAodmFyIHByb3BlcnR5IG9mIHRoaXMu
X3N0eWxlLnZpc2libGVQcm9wZXJ0aWVzKSB7Ci0gICAgICAgICAgICBzdHlsZVRleHQgKz0gIiAg
ICAiLnJlcGVhdChudW1NZWRpYVF1ZXJpZXMgKyAxKSArIHByb3BlcnR5LnRleHQudHJpbSgpOwot
Ci0gICAgICAgICAgICBpZiAoIXN0eWxlVGV4dC5lbmRzV2l0aCgiOyIpKQotICAgICAgICAgICAg
ICAgIHN0eWxlVGV4dCArPSAiOyI7Ci0KLSAgICAgICAgICAgIHN0eWxlVGV4dCArPSAiXG4iOwot
ICAgICAgICB9Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IG51bU1lZGlhUXVlcmllczsgaSA+IDA7
IC0taSkKLSAgICAgICAgICAgIHN0eWxlVGV4dCArPSAiICAgICIucmVwZWF0KGkpICsgIn1cbiI7
Ci0KLSAgICAgICAgc3R5bGVUZXh0ICs9ICJ9IjsKLQotICAgICAgICByZXR1cm4gc3R5bGVUZXh0
OwotICAgIH0sCi0KICAgICBfdG9nZ2xlUnVsZU9uT2ZmOiBmdW5jdGlvbigpCiAgICAgewogICAg
ICAgICBpZiAodGhpcy5faGFzSW52YWxpZFNlbGVjdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVmlzdWFsU3R5bGVTZWxlY3Rvckl0ZW0u
Y3NzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVmlzdWFsU3R5
bGVTZWxlY3Rvckl0ZW0uY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmNjkwNWMwMjdmZjdhMDE0NWNmZWJkZjIy
MGNlODJhMzExZjBhNTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9WaWV3cy9WaXN1YWxTdHlsZVNlbGVjdG9ySXRlbS5jc3MKQEAgLTAsMCAr
MSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy5pdGVtLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtIHsK
KyAgICBkaXNwbGF5OiBmbGV4OworICAgIHdpZHRoOiAxMDAlOworICAgIGhlaWdodDogMjVweDsK
KyAgICBwYWRkaW5nOiAycHggMDsKKyAgICBsaW5lLWhlaWdodDogMjBweDsKKyAgICBmb250LXNp
emU6IDExcHg7Cit9CisKKy5pdGVtLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtLnNlbGVjdGVk
IHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMzQsIDEzMSwgMjQ2KSAhaW1wb3J0YW50Owor
ICAgIGNvbG9yOiB3aGl0ZTsKK30KKworLml0ZW0udmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0g
PiAuZGlzY2xvc3VyZS1idXR0b24geworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKy5pdGVtLnZp
c3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtID4gaW5wdXRbdHlwZT0iY2hlY2tib3giXSB7CisgICAg
bWFyZ2luOiA0LjVweCAwIDRweCA1cHg7Cit9CisKKy5pdGVtLnZpc3VhbC1zdHlsZS1zZWxlY3Rv
ci1pdGVtID4gLmljb24geworICAgIHdpZHRoOiAxNnB4OworICAgIGhlaWdodDogMTZweDsKKyAg
ICBtYXJnaW46IDIuNXB4IDAgMi41cHggNHB4OworfQorCisuaXRlbS52aXN1YWwtc3R5bGUtc2Vs
ZWN0b3ItaXRlbS5tb2RpZmllZCA+IC5pY29uIHsKKyAgICAtd2Via2l0LWZpbHRlcjogYnJpZ2h0
bmVzcygwLjc1KTsKK30KKworLml0ZW0udmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0gPiAudGl0
bGVzIHsKKyAgICBvdmVyZmxvdzogaGlkZGVuOworICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cisg
ICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CisgICAgcGFkZGluZzogMCAycHggMCAzcHg7Cit9
CisKKy5pdGVtLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtOm5vdCguZG9tLWVsZW1lbnQtaWNv
bikgPiAudGl0bGVzID4gLnRpdGxlIHsKKyAgICBwYWRkaW5nOiAwIDFweCAycHg7CisgICAgbGlu
ZS1oZWlnaHQ6IDEycHg7CisgICAgb3V0bGluZTogbm9uZTsKK30KKworLml0ZW0udmlzdWFsLXN0
eWxlLXNlbGVjdG9yLWl0ZW06bm90KC5kb20tZWxlbWVudC1pY29uKS5lZGl0YWJsZSA+IC50aXRs
ZXMgPiAudGl0bGUgeworICAgIGN1cnNvcjogdGV4dDsKKyAgICAtd2Via2l0LXVzZXItc2VsZWN0
OiB0ZXh0OworICAgIC13ZWJraXQtdXNlci1tb2RpZnk6IHJlYWQtd3JpdGUtcGxhaW50ZXh0LW9u
bHk7Cit9CisKKy5pdGVtLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtOm5vdCguZG9tLWVsZW1l
bnQtaWNvbikuZWRpdGFibGUgPiAudGl0bGVzID4gLnRpdGxlOmZvY3VzIHsKKyAgICBjb2xvcjog
YmxhY2s7CisgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisgICAgYm9yZGVyLXJhZGl1czog
MnB4OworICAgIGJveC1zaGFkb3c6IGhzbGEoMCwgMCUsIDAlLCAwLjE1KSAwIDFweCAwLCAwIDAg
MCAzcHggaHNsYSgwLCAxMDAlLCAxMDAlLCAwLjMpOworICAgIC8qIFRPRE86IEZpeCBjdXJzb3Ig
YmFyIGFuZCBoaWdobGlnaHQgaGVpZ2h0ICovCit9CisKKy5pdGVtLnZpc3VhbC1zdHlsZS1zZWxl
Y3Rvci1pdGVtID4gLnRpdGxlcyA+IC5zdWJ0aXRsZTo6YmVmb3JlIHsKKyAgICBtYXJnaW4tcmln
aHQ6IDVweDsKKyAgICBmb250LXNpemU6IDExcHg7CisgICAgLyogVGhlIGV4dHJhIHNwYWNlIGF0
IHRoZSBiZWdpbm5pbmcgaXMgbmVjZXNzYXJ5IHRvIHByZXZlbnQgdGhlIC13ZWJraXQtdXNlci1t
b2RpZnkKKyAgICBjdXJzb3IgYmFyIGZyb20gZGlzcGxheWluZyBhdCB0aGUgYmVnaW5uaW5nIG9m
IHRoZSBlbS1kYXNoICovCisgICAgY29udGVudDogIiBcMjAxNCI7Cit9CisKKy5pdGVtLnZpc3Vh
bC1zdHlsZS1zZWxlY3Rvci1pdGVtID4gLnRpdGxlcyA+IC5zdWJ0aXRsZSB7CisgICAgZm9udC1z
aXplOiA5cHg7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9WaWV3cy9WaXN1YWxTdHlsZVNlbGVjdG9ySXRlbS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Zpc3VhbFN0eWxlU2VsZWN0b3JJdGVtLmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjNlMzI3ODJlOTZmOTBhZWZhZjE1OTdhNGY3NTJmNzYzNjRiMGQxZjMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9WaXN1
YWxTdHlsZVNlbGVjdG9ySXRlbS5qcwpAQCAtMCwwICsxLDE5NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dl
Ykluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9ySXRlbSA9IGNsYXNzIFZpc3VhbFN0eWxlU2Vs
ZWN0b3JJdGVtIGV4dGVuZHMgV2ViSW5zcGVjdG9yLkdlbmVyYWxUcmVlRWxlbWVudAoreworICAg
IGNvbnN0cnVjdG9yKHN0eWxlLCB0aXRsZSwgc3VidGl0bGUpCisgICAgeworICAgICAgICB2YXIg
aWNvbkNsYXNzTmFtZTsKKyAgICAgICAgc3dpdGNoIChzdHlsZS50eXBlKSB7CisgICAgICAgIGNh
c2UgV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24uVHlwZS5SdWxlOgorICAgICAgICAg
ICAgY29uc29sZS5hc3NlcnQoc3R5bGUub3duZXJSdWxlKTsKKworICAgICAgICAgICAgaWYgKHN0
eWxlLmluaGVyaXRlZCkKKyAgICAgICAgICAgICAgICBpY29uQ2xhc3NOYW1lID0gV2ViSW5zcGVj
dG9yLkNTU1N0eWxlRGVjbGFyYXRpb25TZWN0aW9uLkluaGVyaXRlZFN0eWxlUnVsZUljb25TdHls
ZUNsYXNzTmFtZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLm93bmVyUnVsZS50eXBlID09
PSBXZWJJbnNwZWN0b3IuQ1NTUnVsZS5UeXBlLkF1dGhvcikKKyAgICAgICAgICAgICAgICBpY29u
Q2xhc3NOYW1lID0gV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25TZWN0aW9uLkF1dGhv
clN0eWxlUnVsZUljb25TdHlsZUNsYXNzTmFtZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxl
Lm93bmVyUnVsZS50eXBlID09PSBXZWJJbnNwZWN0b3IuQ1NTUnVsZS5UeXBlLlVzZXIpCisgICAg
ICAgICAgICAgICAgaWNvbkNsYXNzTmFtZSA9IFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0
aW9uU2VjdGlvbi5Vc2VyU3R5bGVSdWxlSWNvblN0eWxlQ2xhc3NOYW1lOworICAgICAgICAgICAg
ZWxzZSBpZiAoc3R5bGUub3duZXJSdWxlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5DU1NSdWxlLlR5
cGUuVXNlckFnZW50KQorICAgICAgICAgICAgICAgIGljb25DbGFzc05hbWUgPSBXZWJJbnNwZWN0
b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblNlY3Rpb24uVXNlckFnZW50U3R5bGVSdWxlSWNvblN0eWxl
Q2xhc3NOYW1lOworICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGUub3duZXJSdWxlLnR5cGUgPT09
IFdlYkluc3BlY3Rvci5DU1NSdWxlLlR5cGUuSW5zcGVjdG9yKQorICAgICAgICAgICAgICAgIGlj
b25DbGFzc05hbWUgPSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblNlY3Rpb24uSW5z
cGVjdG9yU3R5bGVSdWxlSWNvblN0eWxlQ2xhc3NOYW1lOworICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5UeXBlLklubGlu
ZToKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5UeXBlLkF0
dHJpYnV0ZToKKyAgICAgICAgICAgIGlmIChzdHlsZS5pbmhlcml0ZWQpCisgICAgICAgICAgICAg
ICAgaWNvbkNsYXNzTmFtZSA9IFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uU2VjdGlv
bi5Jbmhlcml0ZWRFbGVtZW50U3R5bGVSdWxlSWNvblN0eWxlQ2xhc3NOYW1lOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGljb25DbGFzc05hbWUgPSBXZWJJbnNwZWN0b3IuRE9N
VHJlZUVsZW1lbnRQYXRoQ29tcG9uZW50LkRPTUVsZW1lbnRJY29uU3R5bGVDbGFzc05hbWU7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHRpdGxlID0gdGl0bGUudHJp
bSgpOworCisgICAgICAgIHN1cGVyKFsidmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0iLCBpY29u
Q2xhc3NOYW1lXSwgdGl0bGUsIHN1YnRpdGxlLCBzdHlsZSk7CisKKyAgICAgICAgdGhpcy5faWNv
bkNsYXNzTmFtZSA9IGljb25DbGFzc05hbWU7CisgICAgICAgIHRoaXMuX2xhc3RWYWx1ZSA9IHRp
dGxlOworICAgICAgICB0aGlzLl9lbmFibGVFZGl0aW5nID0gdHJ1ZTsKKyAgICB9CisKKyAgICAv
LyBQdWJsaWMKKworICAgIGdldCBpY29uQ2xhc3NOYW1lKCkKKyAgICB7CisgICAgICAgIHJldHVy
biB0aGlzLl9pY29uQ2xhc3NOYW1lOworICAgIH0KKworICAgIC8vIE92ZXJyaWRlcyBmcm9tIFRy
ZWVFbGVtZW50IChQcml2YXRlKQorCisgICAgb25hdHRhY2goKQorICAgIHsKKyAgICAgICAgc3Vw
ZXIub25hdHRhY2goKTsKKworICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUuYWRkRXZlbnRMaXN0
ZW5lcigibW91c2VvdmVyIiwgdGhpcy5faGlnaGxpZ2h0Tm9kZXNXaXRoU2VsZWN0b3IuYmluZCh0
aGlzKSk7CisgICAgICAgIHRoaXMuX2xpc3RJdGVtTm9kZS5hZGRFdmVudExpc3RlbmVyKCJtb3Vz
ZW91dCIsIHRoaXMuX2hpZGVET01Ob2RlSGlnaGxpZ2h0LmJpbmQodGhpcykpOworICAgICAgICB0
aGlzLl9saXN0SXRlbU5vZGUuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCB0aGlzLl9o
YW5kbGVDb250ZXh0TWVudUV2ZW50LmJpbmQodGhpcykpOworCisgICAgICAgIHRoaXMuX2NoZWNr
Ym94RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CisgICAgICAgIHRo
aXMuX2NoZWNrYm94RWxlbWVudC50eXBlID0gImNoZWNrYm94IjsKKyAgICAgICAgdGhpcy5fY2hl
Y2tib3hFbGVtZW50LmNoZWNrZWQgPSAhdGhpcy5yZXByZXNlbnRlZE9iamVjdFtXZWJJbnNwZWN0
b3IuVmlzdWFsU3R5bGVEZXRhaWxzUGFuZWwuU3R5bGVEaXNhYmxlZF07CisgICAgICAgIHRoaXMu
X3VwZGF0ZUNoZWNrYm94VGl0bGUoKTsKKyAgICAgICAgdGhpcy5fY2hlY2tib3hFbGVtZW50LmFk
ZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIHRoaXMuX2hhbmRsZUNoZWNrYm94Q2hhbmdlZC5iaW5k
KHRoaXMpKTsKKyAgICAgICAgdGhpcy5fbGlzdEl0ZW1Ob2RlLmluc2VydEJlZm9yZSh0aGlzLl9j
aGVja2JveEVsZW1lbnQsIHRoaXMuX2ljb25FbGVtZW50KTsKKworICAgICAgICB0aGlzLl9tYWlu
VGl0bGVFbGVtZW50LnNwZWxsY2hlY2sgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fbWFpblRpdGxl
RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCB0aGlzLl9oYW5kbGVNYWluVGl0
bGVNb3VzZURvd24uYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX21haW5UaXRsZUVsZW1lbnQu
YWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMuX2hhbmRsZU1haW5UaXRsZUtleURvd24u
YmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX21haW5UaXRsZUVsZW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcigia2V5dXAiLCB0aGlzLl9oaWdobGlnaHROb2Rlc1dpdGhTZWxlY3Rvci5iaW5kKHRoaXMp
KTsKKyAgICAgICAgdGhpcy5fbWFpblRpdGxlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJibHVy
IiwgdGhpcy5fY29tbWl0U2VsZWN0b3IuYmluZCh0aGlzKSk7CisKKyAgICAgICAgdGhpcy5yZXBy
ZXNlbnRlZE9iamVjdC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xh
cmF0aW9uLkV2ZW50LkluaXRpYWxUZXh0TW9kaWZpZWQsIHRoaXMuX3N0eWxlVGV4dE1vZGlmaWVk
LCB0aGlzKTsKKyAgICAgICAgdGhpcy5fc3R5bGVUZXh0TW9kaWZpZWQoKTsKKyAgICB9CisKKyAg
ICBvbmRlc2VsZWN0KCkKKyAgICB7CisgICAgICAgIHRoaXMuX2xpc3RJdGVtTm9kZS5jbGFzc0xp
c3QucmVtb3ZlKCJlZGl0YWJsZSIpOworICAgIH0KKworICAgIC8vIFByaXZhdGUKKworICAgIGdl
dCBfc2VsZWN0b3JUZXh0KCkKKyAgICB7CisgICAgICAgIHZhciB0aXRsZVRleHQgPSB0aGlzLl9t
YWluVGl0bGVFbGVtZW50LnRleHRDb250ZW50OworCisgICAgICAgIGlmICghdGl0bGVUZXh0IHx8
ICF0aXRsZVRleHQubGVuZ3RoKQorICAgICAgICAgICAgdGl0bGVUZXh0ID0gdGhpcy5fbWFpblRp
dGxlOworCisgICAgICAgIHJldHVybiB0aXRsZVRleHQudHJpbSgpOworICAgIH0KKworICAgIF9o
aWdobGlnaHROb2Rlc1dpdGhTZWxlY3RvcigpCisgICAgeworICAgICAgICBpZiAoIXRoaXMucmVw
cmVzZW50ZWRPYmplY3Qub3duZXJSdWxlKSB7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZG9t
VHJlZU1hbmFnZXIuaGlnaGxpZ2h0RE9NTm9kZSh0aGlzLnJlcHJlc2VudGVkT2JqZWN0Lm5vZGUu
aWQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgV2ViSW5zcGVj
dG9yLmRvbVRyZWVNYW5hZ2VyLmhpZ2hsaWdodFNlbGVjdG9yKHRoaXMuX3NlbGVjdG9yVGV4dCwg
dGhpcy5yZXByZXNlbnRlZE9iamVjdC5ub2RlLm93bmVyRG9jdW1lbnQuZnJhbWVJZGVudGlmaWVy
KTsKKyAgICB9CisKKyAgICBfaGlkZURPTU5vZGVIaWdobGlnaHQoKQorICAgIHsKKyAgICAgICAg
V2ViSW5zcGVjdG9yLmRvbVRyZWVNYW5hZ2VyLmhpZGVET01Ob2RlSGlnaGxpZ2h0KCk7CisgICAg
fQorCisgICAgX2hhbmRsZUNvbnRleHRNZW51RXZlbnQoZXZlbnQpCisgICAgeworICAgICAgICB2
YXIgY29udGV4dE1lbnUgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnRleHRNZW51KGV2ZW50KTsKKwor
ICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ29w
eSBSdWxlIiksIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LmNvcHlUZXh0KHRoaXMucmVwcmVzZW50ZWRPYmplY3QuZ2VuZXJhdGVDU1NSdWxlU3RyaW5nKCkp
OworICAgICAgICB9LmJpbmQodGhpcykpOworCisgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0
ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSZXNldCIpLCBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgIHRoaXMucmVwcmVzZW50ZWRPYmplY3QucmVzZXRUZXh0KCk7CisgICAgICAgICAgICB0aGlz
LmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3Rv
ckl0ZW0uRXZlbnQuU3R5bGVUZXh0UmVzZXQpOworICAgICAgICB9LmJpbmQodGhpcykpOworCisg
ICAgICAgIGNvbnRleHRNZW51LnNob3coKTsKKyAgICB9CisKKyAgICBfaGFuZGxlQ2hlY2tib3hD
aGFuZ2VkKGV2ZW50KQorICAgIHsKKyAgICAgICAgdGhpcy5fdXBkYXRlQ2hlY2tib3hUaXRsZSgp
OworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuVmlz
dWFsU3R5bGVTZWxlY3Rvckl0ZW0uRXZlbnQuQ2hlY2tib3hDaGFuZ2VkLCB7ZW5hYmxlZDogdGhp
cy5fY2hlY2tib3hFbGVtZW50LmNoZWNrZWR9KTsKKyAgICB9CisKKyAgICBfdXBkYXRlQ2hlY2ti
b3hUaXRsZSgpCisgICAgeworICAgICAgICB0aGlzLl9jaGVja2JveEVsZW1lbnQudGl0bGUgPSB0
aGlzLl9jaGVja2JveEVsZW1lbnQuY2hlY2tlZCA/IFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ2xp
Y2sgdG8gZGlzYWJsZSB0aGUgc2VsZWN0ZWQgcnVsZSIpIDogV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KCJDbGljayB0byBlbmFibGUgdGhlIHNlbGVjdGVkIHJ1bGUiKTsKKyAgICB9CisKKyAgICBfaGFu
ZGxlTWFpblRpdGxlTW91c2VEb3duKGV2ZW50KQorICAgIHsKKyAgICAgICAgdGhpcy5fbGlzdEl0
ZW1Ob2RlLmNsYXNzTGlzdC50b2dnbGUoImVkaXRhYmxlIiwgdGhpcy5zZWxlY3RlZCk7CisgICAg
fQorCisgICAgX2hhbmRsZU1haW5UaXRsZUtleURvd24oZXZlbnQpCisgICAgeworICAgICAgICB0
aGlzLl9oaWdobGlnaHROb2Rlc1dpdGhTZWxlY3RvcigpOworCisgICAgICAgIGlmIChldmVudC5r
ZXlDb2RlID09PSAxMykgeworICAgICAgICAgICAgdGhpcy5fbWFpblRpdGxlRWxlbWVudC5ibHVy
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBfY29tbWl0
U2VsZWN0b3IoKQorICAgIHsKKyAgICAgICAgdGhpcy5faGlkZURPTU5vZGVIaWdobGlnaHQoKTsK
KyAgICAgICAgdGhpcy5fbGlzdEl0ZW1Ob2RlLmNsYXNzTGlzdC5yZW1vdmUoImVkaXRhYmxlIik7
CisKKyAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5fc2VsZWN0b3JUZXh0OworICAgICAgICBpZiAo
dmFsdWUgPT09IHRoaXMuX2xhc3RWYWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICB0aGlzLnJlcHJlc2VudGVkT2JqZWN0Lm93bmVyUnVsZS5zZWxlY3RvclRleHQgPSB2YWx1ZTsK
KyAgICB9CisKKyAgICBfc3R5bGVUZXh0TW9kaWZpZWQoKQorICAgIHsKKyAgICAgICAgdGhpcy5f
bGlzdEl0ZW1Ob2RlLmNsYXNzTGlzdC50b2dnbGUoIm1vZGlmaWVkIiwgdGhpcy5yZXByZXNlbnRl
ZE9iamVjdC5tb2RpZmllZCk7CisgICAgfQorfTsKKworV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxl
U2VsZWN0b3JJdGVtLkV2ZW50ID0geworICAgIFN0eWxlVGV4dFJlc2V0OiAidmlzdWFsLXN0eWxl
LXNlbGVjdG9yLWl0ZW0tc3R5bGUtdGV4dC1yZXNldCIsCisgICAgQ2hlY2tib3hDaGFuZ2VkOiAi
dmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0tY2hlY2tib3gtY2hhbmdlZCIKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Zpc3VhbFN0eWxl
U2VsZWN0b3JTZWN0aW9uLmNzcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1ZpZXdzL1Zpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YzFkODA5
OGI2MjM0YjU5N2MxNWRjNjcyZDQ2M2IyYWY5MmRhYjFjCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVmlzdWFsU3R5bGVTZWxlY3Rv
clNlY3Rpb24uY3NzCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLmRldGFpbHMtc2Vj
dGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5oZWFkZXIgeworICAgIGRpc3Bs
YXk6IGZsZXg7CisgICAgaGVpZ2h0OiAyMnB4OworICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRl
OworICAgIGZvbnQtd2VpZ2h0OiBsaWdodGVyOworfQorCisuZGV0YWlscy1zZWN0aW9uLnZpc3Vh
bC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uOm5vdCguY29sbGFwc2VkKSA+IC5oZWFkZXIgeworICAg
IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2IoMTc5LCAxNzksIDE3OSk7Cit9CisKK0BtZWRp
YSAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSB7CisgICAgLmRldGFpbHMtc2Vj
dGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbjpub3QoLmNvbGxhcHNlZCkgPiAuaGVh
ZGVyIHsKKyAgICAgICAgYm9yZGVyLXdpZHRoOiAwLjVweCAhaW1wb3J0YW50OworICAgIH0KK30K
KworLmRldGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5oZWFk
ZXIgPiAuY3VycmVudC1zZWxlY3RvciB7CisgICAgd2lkdGg6IGNhbGMoMTAwJSAtIDg1cHgpOwor
ICAgIG1hcmdpbi1sZWZ0OiA2cHg7CisgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgICB3aGl0
ZS1zcGFjZTogbm93cmFwOworICAgIG92ZXJmbG93OiBoaWRkZW47CisgICAgdGV4dC1vdmVyZmxv
dzogZWxsaXBzaXM7Cit9CisKKy52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbi5kZXRhaWxz
LXNlY3Rpb246bm90KC5jb2xsYXBzZWQpID4gLmhlYWRlciA+IC5jdXJyZW50LXNlbGVjdG9yIHsK
KyAgICBkaXNwbGF5OiBub25lOworfQorCisuZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1z
ZWxlY3Rvci1zZWN0aW9uID4gLmhlYWRlciA+IC5jdXJyZW50LXNlbGVjdG9yID4gLmljb24gewor
ICAgIHdpZHRoOiAxNnB4OworICAgIGhlaWdodDogMTZweDsKKyAgICBwb3NpdGlvbjogYWJzb2x1
dGU7CisgICAgdG9wOiAzcHg7Cit9CisKKy5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNl
bGVjdG9yLXNlY3Rpb24gPiAuaGVhZGVyID4gLmN1cnJlbnQtc2VsZWN0b3IgPiBzcGFuIHsKKyAg
ICBtYXJnaW4tbGVmdDogMjFweDsKK30KKworLmRldGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5bGUt
c2VsZWN0b3Itc2VjdGlvbiA+IC5oZWFkZXIgPiAuY29udHJvbHMgeworICAgIHBvc2l0aW9uOiBh
YnNvbHV0ZTsKKyAgICByaWdodDogMDsKKyAgICB0b3A6IDA7CisgICAgYm9yZGVyLWxlZnQ6IDFw
eCBzb2xpZCBsaWdodGdyZXk7Cit9CisKKy5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNl
bGVjdG9yLXNlY3Rpb24uY29sbGFwc2VkID4gLmhlYWRlciA+IC5jb250cm9scyB7CisgICAgZGlz
cGxheTogbm9uZTsKK30KKworLmRldGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3It
c2VjdGlvbiA+IC5oZWFkZXIgPiAuY29udHJvbHMgPiAudmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNl
Y3Rpb24tYWRkLXJ1bGUgeworICAgIHdpZHRoOiAyM3B4OworICAgIGhlaWdodDogMjFweDsKKyAg
ICBwYWRkaW5nOiA0cHggNXB4OworICAgIG9wYWNpdHk6IDAuNzsKK30KKworLmRldGFpbHMtc2Vj
dGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5jb250ZW50ID4gLnNlbGVjdG9y
cyB7CisgICAgbWF4LWhlaWdodDogMTEwcHg7CisgICAgb3ZlcmZsb3c6IGF1dG87Cit9CisKKy5k
ZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24gPiAuY29udGVudCA+
IC5zZWxlY3RvcnMgPiAuc2VsZWN0b3ItbGlzdCB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRp
bmctbGVmdDogMDsKKyAgICBvdXRsaW5lOiBub25lOworfQorCisuZGV0YWlscy1zZWN0aW9uLnZp
c3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmNvbnRlbnQgPiAuc2VsZWN0b3JzID4gLnNl
bGVjdG9yLWxpc3QgPiAudmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW06bnRoLWNoaWxkKG9kZCkg
eworICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOworfQorCisuZGV0YWlscy1zZWN0aW9uLnZp
c3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmNvbnRlbnQgPiAuc2VsZWN0b3JzID4gLnNl
bGVjdG9yLWxpc3QgPiAuc2VjdGlvbi1kaXZpZGVyIHsKKyAgICBwb3NpdGlvbjogLXdlYmtpdC1z
dGlja3k7CisgICAgdG9wOiAtMXB4OworICAgIGhlaWdodDogMTdweDsKKyAgICBwYWRkaW5nOiAy
cHg7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI0MiwgMjQyLCAyNDIpOworICAgIGJvcmRl
ci1jb2xvcjogcmdiKDE3OSwgMTc5LCAxNzkpOworICAgIGJvcmRlci1zdHlsZTogc29saWQ7Cisg
ICAgYm9yZGVyLXdpZHRoOiAxcHggMDsKKyAgICB6LWluZGV4OiAxMDA7Cit9CisKKy5kZXRhaWxz
LXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24gPiAuY29udGVudCA+IC5zZWxl
Y3RvcnMgPiAuc2VsZWN0b3ItbGlzdCA+IC5zZWN0aW9uLWRpdmlkZXIgPiAuZGlzY2xvc3VyZS1i
dXR0b24sCisuZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4g
LmNvbnRlbnQgPiAuc2VsZWN0b3JzID4gLnNlbGVjdG9yLWxpc3QgPiAuc2VjdGlvbi1kaXZpZGVy
ID4gLmljb24geworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKy5kZXRhaWxzLXNlY3Rpb24udmlz
dWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24gPiAuY29udGVudCA+IC5zZWxlY3RvcnMgPiAuc2Vs
ZWN0b3ItbGlzdCA+IC5zZWN0aW9uLWRpdmlkZXIgPiAudGl0bGVzID4gLnRpdGxlIHsKKyAgICBv
dmVyZmxvdzogaGlkZGVuOworICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CisgICAgdGV4dC1vdmVy
ZmxvdzogZWxsaXBzaXM7Cit9CisKKy5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVj
dG9yLXNlY3Rpb24gPiAuY29udGVudCA+IC5zZWxlY3RvcnMgPiAuc2VsZWN0b3ItbGlzdCA+IC5z
ZWN0aW9uLWRpdmlkZXIgfiAudmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW06bnRoLWNoaWxkKGV2
ZW4pIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKK30KKworLmRldGFpbHMtc2VjdGlv
bi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5jb250ZW50ID4gLnNlbGVjdG9ycyA+
IC5zZWxlY3Rvci1saXN0ID4gLnNlY3Rpb24tZGl2aWRlciB+IC52aXN1YWwtc3R5bGUtc2VsZWN0
b3ItaXRlbTpudGgtY2hpbGQob2RkKSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJl
bnQ7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9W
aWV3cy9WaXN1YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Zpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmE3MjQyNDM4OGQwYzY5YTA3NzNmYzA3YmUxNjk4YzdiNTY0NDJiYzUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9WaXN1
YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5qcwpAQCAtMCwwICsxLDMwMSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMywgMkFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uID0gY2xhc3MgVmlzdWFs
U3R5bGVTZWxlY3RvclNlY3Rpb24gZXh0ZW5kcyBXZWJJbnNwZWN0b3IuRGV0YWlsc1NlY3Rpb24K
K3sKKyAgICBjb25zdHJ1Y3RvcihkZWxlZ2F0ZSkKKyAgICB7CisgICAgICAgIHZhciBzZWxlY3Rv
clNlY3Rpb24gPSB7ZWxlbWVudDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iil9OworICAg
ICAgICBzZWxlY3RvclNlY3Rpb24uZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJzZWxlY3RvcnMiKTsK
KworICAgICAgICB2YXIgY29udHJvbEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKKyAgICAgICAgY29udHJvbEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY29udHJvbHMiKTsK
KworICAgICAgICBzdXBlcigidmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24iLCBXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIlN0eWxlIFJ1bGVzIiksIFtzZWxlY3RvclNlY3Rpb25dLCBjb250cm9s
RWxlbWVudCk7CisKKyAgICAgICAgdGhpcy5fZGVsZWdhdGUgPSBkZWxlZ2F0ZSB8fCBudWxsCisg
ICAgICAgIHRoaXMuX25vZGVTdHlsZXMgPSBudWxsOworCisgICAgICAgIHRoaXMuX2N1cnJlbnRT
ZWxlY3RvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICB0aGlzLl9j
dXJyZW50U2VsZWN0b3IuY2xhc3NMaXN0LmFkZCgiY3VycmVudC1zZWxlY3RvciIpOworCisgICAg
ICAgIHZhciBjdXJyZW50U2VsZWN0b3JJY29uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1n
Iik7CisgICAgICAgIGN1cnJlbnRTZWxlY3Rvckljb24uY2xhc3NMaXN0LmFkZCgiaWNvbiIpOwor
ICAgICAgICB0aGlzLl9jdXJyZW50U2VsZWN0b3IuYXBwZW5kQ2hpbGQoY3VycmVudFNlbGVjdG9y
SWNvbik7CisKKyAgICAgICAgdGhpcy5fY3VycmVudFNlbGVjdG9yVGV4dCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAgICAgdGhpcy5fY3VycmVudFNlbGVjdG9yLmFwcGVu
ZENoaWxkKHRoaXMuX2N1cnJlbnRTZWxlY3RvclRleHQpOworCisgICAgICAgIHRoaXMuX2hlYWRl
ckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fY3VycmVudFNlbGVjdG9yKTsKKworICAgICAgICB2
YXIgc2VsZWN0b3JMaXN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib2wiKTsKKyAgICAgICAg
c2VsZWN0b3JMaXN0LmNsYXNzTGlzdC5hZGQoInNlbGVjdG9yLWxpc3QiKTsKKyAgICAgICAgc2Vs
ZWN0b3JTZWN0aW9uLmVsZW1lbnQuYXBwZW5kQ2hpbGQoc2VsZWN0b3JMaXN0KTsKKworICAgICAg
ICB0aGlzLl9zZWxlY3RvcnMgPSBuZXcgV2ViSW5zcGVjdG9yLlRyZWVPdXRsaW5lKHNlbGVjdG9y
TGlzdCk7CisgICAgICAgIHRoaXMuX3NlbGVjdG9ycy5vbnNlbGVjdCA9IHRoaXMuX3NlbGVjdG9y
Q2hhbmdlZC5iaW5kKHRoaXMpOworICAgICAgICB0aGlzLl9mb2N1c05leHROZXdJbnNwZWN0b3JS
dWxlID0gZmFsc2U7CisKKyAgICAgICAgd3JhcHBlZFNWR0RvY3VtZW50KCJJbWFnZXMvUGx1cy5z
dmciLCAidmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24tYWRkLXJ1bGUiLCBXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIkNsaWNrIHRvIGFkZCBhIG5ldyBydWxlLiIpLCBmdW5jdGlvbih3cmFwcGVy
KSB7CisgICAgICAgICAgICB3cmFwcGVyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5f
YWRkTmV3UnVsZS5iaW5kKHRoaXMpKTsKKyAgICAgICAgICAgIGNvbnRyb2xFbGVtZW50LmFwcGVu
ZENoaWxkKHdyYXBwZXIpOworICAgICAgICB9LmJpbmQodGhpcykpOworCisgICAgICAgIHRoaXMu
X2hlYWRlckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIiwgdGhpcy5faGFuZGxl
TW91c2VPdmVyLmJpbmQodGhpcykpOworICAgICAgICB0aGlzLl9oZWFkZXJFbGVtZW50LmFkZEV2
ZW50TGlzdGVuZXIoIm1vdXNlb3V0IiwgdGhpcy5faGFuZGxlTW91c2VPdXQuYmluZCh0aGlzKSk7
CisgICAgfQorCisgICAgLy8gUHVibGljCisKKyAgICB1cGRhdGUobm9kZVN0eWxlcykKKyAgICB7
CisgICAgICAgIHZhciBzdHlsZSA9IHRoaXMuY3VycmVudFJ1bGUoKTsKKyAgICAgICAgaWYgKHN0
eWxlKQorICAgICAgICAgICAgdGhpcy5fbm9kZVN0eWxlcy5fX2xhc3RTZWxlY3RlZFJ1bGUgPSBz
dHlsZTsKKworICAgICAgICBpZiAobm9kZVN0eWxlcykKKyAgICAgICAgICAgIHRoaXMuX25vZGVT
dHlsZXMgPSBub2RlU3R5bGVzOworCisgICAgICAgIGlmICghdGhpcy5fbm9kZVN0eWxlcykKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLl9zZWxlY3RvcnMucmVtb3ZlQ2hpbGRy
ZW4oKTsKKworICAgICAgICB2YXIgcHJldmlvdXNSdWxlID0gbnVsbDsKKworICAgICAgICAvLyBQ
c2V1ZG8gU3R5bGVzCisgICAgICAgIHZhciBwc2V1ZG9FbGVtZW50cyA9IHRoaXMuX25vZGVTdHls
ZXMucHNldWRvRWxlbWVudHM7CisgICAgICAgIHZhciBwc2V1ZG9SdWxlcyA9IFtdOworCisgICAg
ICAgIGZvciAodmFyIHBzZXVkb0lkZW50aWZpZXIgaW4gcHNldWRvRWxlbWVudHMpCisgICAgICAg
ICAgICBwc2V1ZG9SdWxlcyA9IHBzZXVkb1J1bGVzLmNvbmNhdChwc2V1ZG9FbGVtZW50c1twc2V1
ZG9JZGVudGlmaWVyXS5tYXRjaGVkUnVsZXMpOworCisgICAgICAgIHZhciBvcmRlcmVkUHNldWRv
UnVsZXMgPSB1bmlxdWVPcmRlcmVkUnVsZXMocHNldWRvUnVsZXMpOworICAgICAgICAvLyBSZXZl
cnNlIHRoZSBhcnJheSB0byBhbGxvdyBlbnN1cmUgdGhhdCBzcGxpY2luZyB0aGUgYXJyYXkgd2ls
bCBub3QgbWVzcyB3aXRoIHRoZSBvcmRlci4KKyAgICAgICAgaWYgKG9yZGVyZWRQc2V1ZG9SdWxl
cy5sZW5ndGgpCisgICAgICAgICAgICBvcmRlcmVkUHNldWRvUnVsZXMucmV2ZXJzZSgpOworCisg
ICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVNlbGVjdG9ySXRlbShzdHlsZSwgdGl0bGUsIHN1YnRpdGxl
KSB7CisgICAgICAgICAgICB2YXIgc2VsZWN0b3IgPSBuZXcgV2ViSW5zcGVjdG9yLlZpc3VhbFN0
eWxlU2VsZWN0b3JJdGVtKHN0eWxlLCB0aXRsZSwgc3VidGl0bGUpOworICAgICAgICAgICAgc2Vs
ZWN0b3IuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3Rvckl0
ZW0uRXZlbnQuU3R5bGVUZXh0UmVzZXQsIHRoaXMuX3N0eWxlVGV4dFJlc2V0LmJpbmQodGhpcykp
OworICAgICAgICAgICAgc2VsZWN0b3IuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuVmlz
dWFsU3R5bGVTZWxlY3Rvckl0ZW0uRXZlbnQuQ2hlY2tib3hDaGFuZ2VkLCB0aGlzLl90cmVlRWxl
bWVudENoZWNrYm94VG9nZ2xlZC5iaW5kKHRoaXMpKTsKKyAgICAgICAgICAgIHRoaXMuX3NlbGVj
dG9ycy5hcHBlbmRDaGlsZChzZWxlY3Rvcik7CisKKyAgICAgICAgICAgIGlmICh0aGlzLl9mb2N1
c05leHROZXdJbnNwZWN0b3JSdWxlICYmIHN0eWxlLm93bmVyUnVsZSAmJiBzdHlsZS5vd25lclJ1
bGUudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkNTU1J1bGUuVHlwZS5JbnNwZWN0b3IpIHsKKyAgICAg
ICAgICAgICAgICBzZWxlY3Rvci5zZWxlY3QodHJ1ZSk7CisgICAgICAgICAgICAgICAgc2VsZWN0
b3IuZWxlbWVudC5zY3JvbGxJbnRvVmlldygpOworICAgICAgICAgICAgICAgIHRoaXMuX25vZGVT
dHlsZXMuX19sYXN0U2VsZWN0ZWRSdWxlID0gc3R5bGU7CisgICAgICAgICAgICAgICAgdGhpcy5f
Zm9jdXNOZXh0TmV3SW5zcGVjdG9yUnVsZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRoaXMuX25vZGVTdHlsZXMuX19s
YXN0U2VsZWN0ZWRSdWxlID09PSBzdHlsZSkgeworICAgICAgICAgICAgICAgIHNlbGVjdG9yLnNl
bGVjdCh0cnVlKTsKKyAgICAgICAgICAgICAgICBzZWxlY3Rvci5lbGVtZW50LnNjcm9sbEludG9W
aWV3KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB1bmlx
dWVPcmRlcmVkUnVsZXMob3JkZXJlZFJ1bGVzKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIg
dW5pcXVlUnVsZXMgPSBbXTsKKworICAgICAgICAgICAgZm9yICh2YXIgcnVsZSBvZiBvcmRlcmVk
UnVsZXMpIHsKKyAgICAgICAgICAgICAgICB2YXIgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICBmb3IgKHZhciBleGlzdGluZ1J1bGUgb2YgdW5pcXVlUnVsZXMpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFydWxlLmlzRXF1YWxUbyhleGlzdGluZ1J1bGUpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBpZiAoZm91bmQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgICAgICAgICAgdW5pcXVlUnVsZXMucHVzaChydWxlKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgcmV0dXJuIHVuaXF1ZVJ1bGVzOworICAgICAgICB9CisKKyAgICAgICAgZnVu
Y3Rpb24gaW5zZXJ0QWxsTWF0Y2hpbmdQc2V1ZG9SdWxlcyhmb3JjZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKCFvcmRlcmVkUHNldWRvUnVsZXMubGVuZ3RoKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICAgICAgaWYgKGZvcmNlKSB7CisgICAgICAgICAgICAgICAgZm9y
ICh2YXIgaiA9IG9yZGVyZWRQc2V1ZG9SdWxlcy5sZW5ndGggLSAxOyBqID49IDA7IC0taikgewor
ICAgICAgICAgICAgICAgICAgICB2YXIgcHNldWRvUnVsZSA9IG9yZGVyZWRQc2V1ZG9SdWxlc1tq
XTsKKyAgICAgICAgICAgICAgICAgICAgY3JlYXRlU2VsZWN0b3JJdGVtLmNhbGwodGhpcywgcHNl
dWRvUnVsZS5zdHlsZSwgcHNldWRvUnVsZS5zZWxlY3RvclRleHQsIHBzZXVkb1J1bGUubWVkaWFU
ZXh0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb3JkZXJlZFBzZXVkb1J1
bGVzID0gW107CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJldmlvdXNSdWxl
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgZm9yICh2YXIgaiA9IG9y
ZGVyZWRQc2V1ZG9SdWxlcy5sZW5ndGggLSAxOyBqID49IDA7IC0taikgeworICAgICAgICAgICAg
ICAgIHZhciBwc2V1ZG9SdWxlID0gb3JkZXJlZFBzZXVkb1J1bGVzW2pdOworICAgICAgICAgICAg
ICAgIGlmICghcHNldWRvUnVsZS5zZWxlY3RvcklzR3JlYXRlcihwcmV2aW91c1J1bGUubW9zdFNw
ZWNpZmljU2VsZWN0b3IpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgICAgIGNyZWF0ZVNlbGVjdG9ySXRlbS5jYWxsKHRoaXMsIHBzZXVkb1J1bGUuc3R5bGUs
IHBzZXVkb1J1bGUuc2VsZWN0b3JUZXh0LCBwc2V1ZG9SdWxlLm1lZGlhVGV4dCk7CisgICAgICAg
ICAgICAgICAgcHJldmlvdXNSdWxlID0gcHNldWRvUnVsZTsKKyAgICAgICAgICAgICAgICBvcmRl
cmVkUHNldWRvUnVsZXMuc3BsaWNlKGosIDEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgaWYgKCF0aGlzLl9ub2RlU3R5bGVzLl9fbGFzdFNlbGVjdGVkUnVsZSkKKyAgICAg
ICAgICAgIHRoaXMuX25vZGVTdHlsZXMuX19sYXN0U2VsZWN0ZWRSdWxlID0gdGhpcy5fbm9kZVN0
eWxlcy5pbmxpbmVTdHlsZTsKKworICAgICAgICAvLyBJbmxpbmUgU3R5bGUKKyAgICAgICAgY3Jl
YXRlU2VsZWN0b3JJdGVtLmNhbGwodGhpcywgdGhpcy5fbm9kZVN0eWxlcy5pbmxpbmVTdHlsZSwg
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJUaGlzIEVsZW1lbnQiKSk7CisKKyAgICAgICAgLy8gTWF0
Y2hlZCBSdWxlcworICAgICAgICBmb3IgKHZhciBydWxlIG9mIHVuaXF1ZU9yZGVyZWRSdWxlcyh0
aGlzLl9ub2RlU3R5bGVzLm1hdGNoZWRSdWxlcykpIHsKKyAgICAgICAgICAgIGlmIChydWxlLnR5
cGUgPT09IFdlYkluc3BlY3Rvci5DU1NSdWxlLlR5cGUuVXNlckFnZW50KSB7CisgICAgICAgICAg
ICAgICAgaW5zZXJ0QWxsTWF0Y2hpbmdQc2V1ZG9SdWxlcy5jYWxsKHRoaXMsIHRydWUpOworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbnNl
cnRBbGxNYXRjaGluZ1BzZXVkb1J1bGVzLmNhbGwodGhpcyk7CisgICAgICAgICAgICBjcmVhdGVT
ZWxlY3Rvckl0ZW0uY2FsbCh0aGlzLCBydWxlLnN0eWxlLCBydWxlLnNlbGVjdG9yVGV4dCwgcnVs
ZS5tZWRpYVRleHQpOworICAgICAgICAgICAgcHJldmlvdXNSdWxlID0gcnVsZTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIEp1c3QgaW4gY2FzZSB0aGVyZSBhcmUgYW55IHJlbWFpbmluZyBwc2V1
ZG8tc3R5bGVzLgorICAgICAgICBpbnNlcnRBbGxNYXRjaGluZ1BzZXVkb1J1bGVzLmNhbGwodGhp
cywgdHJ1ZSk7CisKKyAgICAgICAgLy8gSW5oZXJpdGVkIFJ1bGVzCisgICAgICAgIGZvciAodmFy
IGluaGVyaXRlZCBvZiB0aGlzLl9ub2RlU3R5bGVzLmluaGVyaXRlZFJ1bGVzKSB7CisgICAgICAg
ICAgICBpZiAoIWluaGVyaXRlZC5tYXRjaGVkUnVsZXMgfHwgIWluaGVyaXRlZC5tYXRjaGVkUnVs
ZXMubGVuZ3RoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICB2YXIg
ZGl2aWRlciA9IG5ldyBXZWJJbnNwZWN0b3IuR2VuZXJhbFRyZWVFbGVtZW50KCJzZWN0aW9uLWRp
dmlkZXIiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkluaGVyaXRlZCBmcm9tICVzIikuZm9ybWF0
KFdlYkluc3BlY3Rvci5kaXNwbGF5TmFtZUZvck5vZGUoaW5oZXJpdGVkLm5vZGUpKSk7CisgICAg
ICAgICAgICBkaXZpZGVyLnNlbGVjdGFibGUgPSBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMuX3Nl
bGVjdG9ycy5hcHBlbmRDaGlsZChkaXZpZGVyKTsKKworICAgICAgICAgICAgZm9yICh2YXIgcnVs
ZSBvZiB1bmlxdWVPcmRlcmVkUnVsZXMoaW5oZXJpdGVkLm1hdGNoZWRSdWxlcykpIHsKKyAgICAg
ICAgICAgICAgICBpZiAocnVsZS50eXBlID09PSBXZWJJbnNwZWN0b3IuQ1NTUnVsZS5UeXBlLlVz
ZXJBZ2VudCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAg
ICBjcmVhdGVTZWxlY3Rvckl0ZW0uY2FsbCh0aGlzLCBydWxlLnN0eWxlLCBydWxlLnNlbGVjdG9y
VGV4dCwgcnVsZS5tZWRpYVRleHQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgdGhpcy5fZm9jdXNOZXh0TmV3SW5zcGVjdG9yUnVsZSA9IGZhbHNlOworICAgIH0KKworICAg
IGN1cnJlbnRSdWxlKCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fbm9kZVN0eWxlcyB8fCAh
dGhpcy5fc2VsZWN0b3JzLnNlbGVjdGVkVHJlZUVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdG9ycy5zZWxlY3RlZFRyZWVFbGVtZW50LnJl
cHJlc2VudGVkT2JqZWN0OworICAgIH0KKworICAgIC8vIFByaXZhdGUKKworICAgIF9zZWxlY3Rv
ckNoYW5nZWQoc2VsZWN0ZWRUcmVlRWxlbWVudCkKKyAgICB7CisgICAgICAgIGlmICghc2VsZWN0
ZWRUcmVlRWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLl9jdXJy
ZW50U2VsZWN0b3IuY2xhc3NOYW1lID0gImN1cnJlbnQtc2VsZWN0b3IgIiArIHNlbGVjdGVkVHJl
ZUVsZW1lbnQuaWNvbkNsYXNzTmFtZTsKKworICAgICAgICB2YXIgdGV4dCA9IHNlbGVjdGVkVHJl
ZUVsZW1lbnQubWFpblRpdGxlOworICAgICAgICB2YXIgc3VidGl0bGUgPSBzZWxlY3RlZFRyZWVF
bGVtZW50LnN1YnRpdGxlOworICAgICAgICBpZiAoc3VidGl0bGUgJiYgc3VidGl0bGUubGVuZ3Ro
KQorICAgICAgICAgICAgdGV4dCArPSAiIFx1MjAxNCAiICsgc3VidGl0bGU7CisKKyAgICAgICAg
dGhpcy5fY3VycmVudFNlbGVjdG9yVGV4dC50ZXh0Q29udGVudCA9IHRleHQ7CisKKyAgICAgICAg
dGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2Vs
ZWN0b3JTZWN0aW9uLkV2ZW50LlNlbGVjdG9yQ2hhbmdlZCk7CisgICAgfQorCisgICAgX3N0eWxl
VGV4dFJlc2V0KCkKKyAgICB7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJz
KFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5FdmVudC5TZWxlY3RvckNo
YW5nZWQpOworICAgIH0KKworICAgIF9hZGROZXdSdWxlKGV2ZW50KQorICAgIHsKKyAgICAgICAg
aWYgKCF0aGlzLl9ub2RlU3R5bGVzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRo
aXMuX25vZGVTdHlsZXMuYWRkRW1wdHlSdWxlKCk7CisgICAgICAgIHRoaXMuX2ZvY3VzTmV4dE5l
d0luc3BlY3RvclJ1bGUgPSB0cnVlOworICAgIH0KKworICAgIF90cmVlRWxlbWVudENoZWNrYm94
VG9nZ2xlZChldmVudCkKKyAgICB7CisgICAgICAgIHZhciBlbmFibGVkID0gZXZlbnQgJiYgZXZl
bnQuZGF0YSAmJiBldmVudC5kYXRhLmVuYWJsZWQ7CisgICAgICAgIHZhciBzdHlsZSA9IHRoaXMu
Y3VycmVudFJ1bGUoKTsKKyAgICAgICAgaWYgKCFzdHlsZSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICB2YXIgdGV4dCA9IHN0eWxlLnRleHQ7CisgICAgICAgIGlmICghdGV4dCB8fCAh
dGV4dC5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIHJlcGxhY2Vt
ZW50ID0gIiI7CisgICAgICAgIGlmIChlbmFibGVkKQorICAgICAgICAgICAgcmVwbGFjZW1lbnQg
PSB0ZXh0LnJlcGxhY2UoL1xzKihcL1wqfFwqXC8pXHMqL2csICIiKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSAiLyogIiArIHRleHQucmVwbGFjZSgvKFxzKjsoPyEk
KVxzKikvZywgIiQxICovLyogIikgKyAiICovIjsKKworICAgICAgICBzdHlsZS50ZXh0ID0gcmVw
bGFjZW1lbnQ7CisgICAgICAgIHN0eWxlW1dlYkluc3BlY3Rvci5WaXN1YWxTdHlsZURldGFpbHNQ
YW5lbC5TdHlsZURpc2FibGVkXSA9ICFlbmFibGVkOworICAgICAgICB0aGlzLmRpc3BhdGNoRXZl
bnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24uRXZl
bnQuU2VsZWN0b3JDaGFuZ2VkKTsKKworICAgIH0KKworICAgIF9oYW5kbGVNb3VzZU92ZXIoKQor
ICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLmNvbGxhcHNlZCkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICB2YXIgc3R5bGUgPSB0aGlzLmN1cnJlbnRSdWxlKCk7CisKKyAgICAgICAgaWYg
KCFzdHlsZS5vd25lclJ1bGUpIHsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kb21UcmVlTWFu
YWdlci5oaWdobGlnaHRET01Ob2RlKHN0eWxlLm5vZGUuaWQpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgV2ViSW5zcGVjdG9yLmRvbVRyZWVNYW5hZ2VyLmhpZ2hs
aWdodFNlbGVjdG9yKHN0eWxlLm93bmVyUnVsZS5zZWxlY3RvclRleHQsIHN0eWxlLm5vZGUub3du
ZXJEb2N1bWVudC5mcmFtZUlkZW50aWZpZXIpOworICAgIH0KKworICAgIF9oYW5kbGVNb3VzZU91
dCgpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuY29sbGFwc2VkKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIFdlYkluc3BlY3Rvci5kb21UcmVlTWFuYWdlci5oaWRlRE9NTm9kZUhp
Z2hsaWdodCgpOworICAgIH0KK307CisKK1dlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9y
U2VjdGlvbi5FdmVudCA9IHsKKyAgICBTZWxlY3RvckNoYW5nZWQ6ICJ2aXN1YWwtc3R5bGUtc2Vs
ZWN0b3ItY2hhbmdlZCIKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258331</attachid>
            <date>2015-08-05 18:24:45 -0700</date>
            <delta_ts>2015-08-06 23:09:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147572-20150805182437.patch</filename>
            <type>text/plain</type>
            <size>40518</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IGMxZjQwNGQ3ZGIzN2NiOTJiZDY0YmU5NTAzYmU0
OGUyMDAwNWVkZGMuLmViMWViMTIyZjM2YmNiMzM0NWQzY2FiNjAxOWFiODQxMjdlYmQ0NWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgxIEBACisyMDE1LTA4LTA1ICBEZXZp
biBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBB
ZGQgVmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzU3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTUnVsZS5qczoK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NSdWxlLnByb3RvdHlwZS5nZXQgbWVkaWFUZXh0KToK
KyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9DU1NTdHlsZURlY2xhcmF0aW9uLmpzOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24pOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLnNldCB0ZXh0KToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZS5yZXNldFRleHQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLmdl
bmVyYXRlQ1NTUnVsZVN0cmluZyk6CisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9DU1NT
dHlsZURlY2xhcmF0aW9uU2VjdGlvbi5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHls
ZURlY2xhcmF0aW9uU2VjdGlvbi5wcm90b3R5cGUuX2hhbmRsZUNvbnRleHRNZW51RXZlbnQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25TZWN0aW9uLnByb3RvdHlw
ZS5fZ2VuZXJhdGVDU1NSdWxlU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBVc2VySW50ZXJm
YWNlL1ZpZXdzL1Zpc3VhbFN0eWxlU2VsZWN0b3JJdGVtLmNzczogQWRkZWQuCisgICAgICAgICgu
aXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbSk6CisgICAgICAgICguaXRlbS52aXN1YWwt
c3R5bGUtc2VsZWN0b3ItaXRlbS5zZWxlY3RlZCk6CisgICAgICAgICguaXRlbS52aXN1YWwtc3R5
bGUtc2VsZWN0b3ItaXRlbSA+IC5kaXNjbG9zdXJlLWJ1dHRvbik6CisgICAgICAgICguaXRlbS52
aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbSA+IGlucHV0W3R5cGU9ImNoZWNrYm94Il0pOgorICAg
ICAgICAoLml0ZW0udmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0gPiAuaWNvbik6CisgICAgICAg
ICguaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbS5tb2RpZmllZCA+IC5pY29uKToKKyAg
ICAgICAgKC5pdGVtLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtID4gLnRpdGxlcyk6CisgICAg
ICAgICguaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbTpub3QoLmRvbS1lbGVtZW50LWlj
b24pID4gLnRpdGxlcyA+IC50aXRsZSk6CisgICAgICAgICguaXRlbS52aXN1YWwtc3R5bGUtc2Vs
ZWN0b3ItaXRlbTpub3QoLmRvbS1lbGVtZW50LWljb24pLmVkaXRhYmxlID4gLnRpdGxlcyA+IC50
aXRsZSk6CisgICAgICAgICguaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbTpub3QoLmRv
bS1lbGVtZW50LWljb24pLmVkaXRhYmxlID4gLnRpdGxlcyA+IC50aXRsZTpmb2N1cyk6CisgICAg
ICAgICguaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbSA+IC50aXRsZXMgPiAuc3VidGl0
bGU6OmJlZm9yZSk6CisgICAgICAgICguaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbSA+
IC50aXRsZXMgPiAuc3VidGl0bGUpOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvVmlz
dWFsU3R5bGVTZWxlY3Rvckl0ZW0uanM6IEFkZGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLlZp
c3VhbFN0eWxlU2VsZWN0b3JJdGVtKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxTdHls
ZVNlbGVjdG9ySXRlbS5wcm90b3R5cGUuZ2V0IGljb25DbGFzc05hbWUpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JJdGVtLnByb3RvdHlwZS5vbmF0dGFjaCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3Rvckl0ZW0ucHJvdG90eXBlLm9u
ZGVzZWxlY3QpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JJdGVt
LnByb3RvdHlwZS5nZXQgX3NlbGVjdG9yVGV4dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlz
dWFsU3R5bGVTZWxlY3Rvckl0ZW0ucHJvdG90eXBlLl9oaWdobGlnaHROb2Rlc1dpdGhTZWxlY3Rv
cik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3Rvckl0ZW0ucHJvdG90
eXBlLl9oaWRlRE9NTm9kZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFs
U3R5bGVTZWxlY3Rvckl0ZW0ucHJvdG90eXBlLl9oYW5kbGVDb250ZXh0TWVudUV2ZW50KToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9ySXRlbS5wcm90b3R5cGUuX2hh
bmRsZUNoZWNrYm94Q2hhbmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVT
ZWxlY3Rvckl0ZW0ucHJvdG90eXBlLl91cGRhdGVDaGVja2JveFRpdGxlKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9ySXRlbS5wcm90b3R5cGUuX2hhbmRsZU1haW5U
aXRsZU1vdXNlRG93bik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3Rv
ckl0ZW0ucHJvdG90eXBlLl9oYW5kbGVNYWluVGl0bGVLZXlEb3duKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9ySXRlbS5wcm90b3R5cGUuX2NvbW1pdFNlbGVjdG9y
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9ySXRlbS5wcm90b3R5
cGUuX3N0eWxlVGV4dE1vZGlmaWVkKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL1Zp
c3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLmNzczogQWRkZWQuCisgICAgICAgICguZGV0YWlscy1z
ZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmhlYWRlcik6CisgICAgICAg
ICguZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uOm5vdCguY29s
bGFwc2VkKSA+IC5oZWFkZXIpOgorICAgICAgICAoQG1lZGlhICgtd2Via2l0LW1pbi1kZXZpY2Ut
cGl4ZWwtcmF0aW86IDIpKToKKyAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxl
LXNlbGVjdG9yLXNlY3Rpb24gPiAuaGVhZGVyID4gLmN1cnJlbnQtc2VsZWN0b3IpOgorICAgICAg
ICAoLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uLmRldGFpbHMtc2VjdGlvbjpub3QoLmNv
bGxhcHNlZCkgPiAuaGVhZGVyID4gLmN1cnJlbnQtc2VsZWN0b3IpOgorICAgICAgICAoLmRldGFp
bHMtc2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5oZWFkZXIgPiAuY3Vy
cmVudC1zZWxlY3RvciA+IC5pY29uKToKKyAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24udmlzdWFs
LXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24gPiAuaGVhZGVyID4gLmN1cnJlbnQtc2VsZWN0b3IgPiBz
cGFuKToKKyAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNl
Y3Rpb24gPiAuaGVhZGVyID4gLmNvbnRyb2xzKToKKyAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24u
dmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24uY29sbGFwc2VkID4gLmhlYWRlciA+IC5jb250
cm9scyk6CisgICAgICAgICguZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1z
ZWN0aW9uID4gLmhlYWRlciA+IC5jb250cm9scyA+IC52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2Vj
dGlvbi1hZGQtcnVsZSk6CisgICAgICAgICguZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1z
ZWxlY3Rvci1zZWN0aW9uID4gLmNvbnRlbnQgPiAuc2VsZWN0b3JzKToKKyAgICAgICAgKC5kZXRh
aWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24gPiAuY29udGVudCA+IC5z
ZWxlY3RvcnMgPiAuc2VsZWN0b3ItbGlzdCk6CisgICAgICAgICguZGV0YWlscy1zZWN0aW9uLnZp
c3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmNvbnRlbnQgPiAuc2VsZWN0b3JzID4gLnNl
bGVjdG9yLWxpc3QgPiAudmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW06bnRoLWNoaWxkKG9kZCkp
OgorICAgICAgICAoLmRldGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlv
biA+IC5jb250ZW50ID4gLnNlbGVjdG9ycyA+IC5zZWxlY3Rvci1saXN0ID4gLnNlY3Rpb24tZGl2
aWRlcik6CisgICAgICAgICguZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1z
ZWN0aW9uID4gLmNvbnRlbnQgPiAuc2VsZWN0b3JzID4gLnNlbGVjdG9yLWxpc3QgPiAuc2VjdGlv
bi1kaXZpZGVyID4gLmljb24pOgorICAgICAgICAoLmRldGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5
bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5jb250ZW50ID4gLnNlbGVjdG9ycyA+IC5zZWxlY3Rvci1s
aXN0ID4gLnNlY3Rpb24tZGl2aWRlciA+IC50aXRsZXMgPiAudGl0bGUpOgorICAgICAgICAoLmRl
dGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5jb250ZW50ID4g
LnNlbGVjdG9ycyA+IC5zZWxlY3Rvci1saXN0ID4gLnNlY3Rpb24tZGl2aWRlciB+IC52aXN1YWwt
c3R5bGUtc2VsZWN0b3ItaXRlbTpudGgtY2hpbGQoZXZlbikpOgorICAgICAgICAoLmRldGFpbHMt
c2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5jb250ZW50ID4gLnNlbGVj
dG9ycyA+IC5zZWxlY3Rvci1saXN0ID4gLnNlY3Rpb24tZGl2aWRlciB+IC52aXN1YWwtc3R5bGUt
c2VsZWN0b3ItaXRlbTpudGgtY2hpbGQob2RkKSk6CisgICAgICAgICogVXNlckludGVyZmFjZS9W
aWV3cy9WaXN1YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5qczogQWRkZWQuCisgICAgICAgIChXZWJJ
bnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24pOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLnByb3RvdHlwZS51cGRhdGUuY3JlYXRlU2Vs
ZWN0b3JJdGVtKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yU2Vj
dGlvbi5wcm90b3R5cGUudXBkYXRlLnVuaXF1ZU9yZGVyZWRSdWxlcyk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24ucHJvdG90eXBlLnVwZGF0ZS5pbnNl
cnRBbGxNYXRjaGluZ1BzZXVkb1J1bGVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxT
dHlsZVNlbGVjdG9yU2VjdGlvbi5wcm90b3R5cGUudXBkYXRlKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5wcm90b3R5cGUuY3VycmVudFJ1bGUpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLnByb3RvdHlw
ZS5fc2VsZWN0b3JDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNl
bGVjdG9yU2VjdGlvbi5wcm90b3R5cGUuX3N0eWxlVGV4dFJlc2V0KToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5wcm90b3R5cGUuX2FkZE5ld1J1bGUp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLnByb3Rv
dHlwZS5fdHJlZUVsZW1lbnRDaGVja2JveFRvZ2dsZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlZpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLnByb3RvdHlwZS5faGFuZGxlTW91c2VPdmVyKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5wcm90b3R5
cGUuX2hhbmRsZU1vdXNlT3V0KToKKwogMjAxNS0wOC0wNSAgTWF0dCBCYWtlciAgPG1hdHRiYWtl
ckBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogUkVHUkVTU0lPTiAocjE4Nzkw
MCk6IEJyZWFrcG9pbnQgY29udGV4dCBtZW51IGlzIGJyb2tlbiBpbiBEZWJ1Z2dlciB0YWIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1NS
dWxlLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NTU1J1
bGUuanMKaW5kZXggYTk0ZTI3YjU2NjQ2MmE5MGE5ZDQ2Yzk1MWM5NTY0ZDI3MjI3MjI2OC4uY2M5
OTJkYzM1MTc1ODVlYTQ5MzRhNGE5NmY1YTIyOTQ3ODk4YzNlMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NTU1J1bGUuanMKKysrIGIvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NTU1J1bGUuanMKQEAgLTE3
Nyw2ICsxNzcsMTkgQEAgV2ViSW5zcGVjdG9yLkNTU1J1bGUgPSBjbGFzcyBDU1NSdWxlIGV4dGVu
ZHMgV2ViSW5zcGVjdG9yLk9iamVjdAogICAgICAgICByZXR1cm4gdGhpcy5fbWVkaWFMaXN0Owog
ICAgIH0KIAorICAgIGdldCBtZWRpYVRleHQoKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9t
ZWRpYUxpc3QubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBtZWRp
YVRleHQgPSAiIjsKKworICAgICAgICBmb3IgKHZhciBtZWRpYSBvZiB0aGlzLl9tZWRpYUxpc3Qp
CisgICAgICAgICAgICBtZWRpYVRleHQgKz0gbWVkaWEudGV4dDsKKworICAgICAgICByZXR1cm4g
bWVkaWFUZXh0OworICAgIH0KKwogICAgIGlzRXF1YWxUbyhydWxlKQogICAgIHsKICAgICAgICAg
aWYgKCFydWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvTW9kZWxzL0NTU1N0eWxlRGVjbGFyYXRpb24uanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTU3R5bGVEZWNsYXJhdGlvbi5qcwppbmRleCA5NDA3OGNm
ZDBjYzliYWQ4YzRiMGYzMDFlNDZhYTNlYWVhOGRhYmRmLi5lN2YyYzc0OTRhODA3OGNlMzE5NmM2
OTQ3MGRjYWNkODk3ZTQ0MjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Nb2RlbHMvQ1NTU3R5bGVEZWNsYXJhdGlvbi5qcworKysgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTU3R5bGVEZWNsYXJhdGlvbi5qcwpA
QCAtNDMsNiArNDMsOSBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbiA9IGNsYXNz
IENTU1N0eWxlRGVjbGFyYXRpb24gZXh0ZW5kcyBXZWJJbnNwZWN0bwogICAgICAgICB0aGlzLl9w
ZW5kaW5nUHJvcGVydGllcyA9IFtdOwogICAgICAgICB0aGlzLl9wcm9wZXJ0eU5hbWVNYXAgPSB7
fTsKIAorICAgICAgICB0aGlzLl9pbml0aWFsVGV4dCA9IHRleHQ7CisgICAgICAgIHRoaXMubW9k
aWZpZWQgPSBmYWxzZTsKKwogICAgICAgICB0aGlzLnVwZGF0ZSh0ZXh0LCBwcm9wZXJ0aWVzLCBz
dHlsZVNoZWV0VGV4dFJhbmdlLCB0cnVlKTsKICAgICB9CiAKQEAgLTE4Myw5ICsxODYsMjEgQEAg
V2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24gPSBjbGFzcyBDU1NTdHlsZURlY2xhcmF0
aW9uIGV4dGVuZHMgV2ViSW5zcGVjdG8KICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHRleHQp
CiAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAgICAgdmFyIG1vZGlmaWVkID0gdGV4dCAhPT0g
dGhpcy5faW5pdGlhbFRleHQ7CisKKyAgICAgICAgaWYgKG1vZGlmaWVkICE9PSB0aGlzLm1vZGlm
aWVkKSB7CisgICAgICAgICAgICB0aGlzLm1vZGlmaWVkID0gbW9kaWZpZWQ7CisgICAgICAgICAg
ICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNs
YXJhdGlvbi5FdmVudC5Jbml0aWFsVGV4dE1vZGlmaWVkKTsKKyAgICAgICAgfQorCiAgICAgICAg
IHRoaXMuX25vZGVTdHlsZXMuY2hhbmdlU3R5bGVUZXh0KHRoaXMsIHRleHQpOwogICAgIH0KIAor
ICAgIHJlc2V0VGV4dCgpCisgICAgeworICAgICAgICB0aGlzLnRleHQgPSB0aGlzLl9pbml0aWFs
VGV4dDsKKyAgICB9CisKICAgICBnZXQgcHJvcGVydGllcygpCiAgICAgewogICAgICAgICByZXR1
cm4gdGhpcy5fcHJvcGVydGllczsKQEAgLTI2MCw2ICsyNzUsNDYgQEAgV2ViSW5zcGVjdG9yLkNT
U1N0eWxlRGVjbGFyYXRpb24gPSBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uIGV4dGVuZHMgV2Vi
SW5zcGVjdG8KICAgICAgICAgcmV0dXJuIG5ld1Byb3BlcnR5OwogICAgIH0KIAorICAgIGdlbmVy
YXRlQ1NTUnVsZVN0cmluZygpCisgICAgeworICAgICAgICB2YXIgbnVtTWVkaWFRdWVyaWVzID0g
MDsKKyAgICAgICAgdmFyIHN0eWxlVGV4dCA9ICIiOworCisgICAgICAgIGlmICh0aGlzLl9vd25l
clJ1bGUpIHsKKyAgICAgICAgICAgIHZhciBtZWRpYUxpc3QgPSB0aGlzLl9vd25lclJ1bGUubWVk
aWFMaXN0OworICAgICAgICAgICAgaWYgKG1lZGlhTGlzdC5sZW5ndGgpIHsKKyAgICAgICAgICAg
ICAgICBudW1NZWRpYVF1ZXJpZXMgPSBtZWRpYUxpc3QubGVuZ3RoOworCisgICAgICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IG51bU1lZGlhUXVlcmllcyAtIDE7IGkgPj0gMDsgLS1pKQorICAgICAg
ICAgICAgICAgICAgICBzdHlsZVRleHQgKz0gIiAgICAiLnJlcGVhdChudW1NZWRpYVF1ZXJpZXMg
LSBpIC0gMSkgKyAiQG1lZGlhICIgKyBtZWRpYUxpc3RbaV0udGV4dCArICIge1xuIjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgc3R5bGVUZXh0ICs9ICIgICAgIi5yZXBlYXQobnVtTWVk
aWFRdWVyaWVzKSArIHRoaXMuX293bmVyUnVsZS5zZWxlY3RvclRleHQ7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgc3R5bGVUZXh0ICs9IHRoaXMuX3NlbGVjdG9yRWxlbWVudC50ZXh0Q29u
dGVudDsKKworICAgICAgICBzdHlsZVRleHQgKz0gIiB7XG4iOworCisgICAgICAgIGZvciAodmFy
IHByb3BlcnR5IG9mIHRoaXMuX3Byb3BlcnRpZXMpIHsKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0
eS5hbm9ueW1vdXMpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHN0
eWxlVGV4dCArPSAiICAgICIucmVwZWF0KG51bU1lZGlhUXVlcmllcyArIDEpICsgcHJvcGVydHku
dGV4dC50cmltKCk7CisKKyAgICAgICAgICAgIGlmICghc3R5bGVUZXh0LmVuZHNXaXRoKCI7Iikp
CisgICAgICAgICAgICAgICAgc3R5bGVUZXh0ICs9ICI7IjsKKworICAgICAgICAgICAgc3R5bGVU
ZXh0ICs9ICJcbiI7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHZhciBpID0gbnVtTWVkaWFR
dWVyaWVzOyBpID4gMDsgLS1pKQorICAgICAgICAgICAgc3R5bGVUZXh0ICs9ICIgICAgIi5yZXBl
YXQoaSkgKyAifVxuIjsKKworICAgICAgICBzdHlsZVRleHQgKz0gIn0iOworCisgICAgICAgIHJl
dHVybiBzdHlsZVRleHQ7CisgICAgfQorCiAgICAgLy8gUHJvdGVjdGVkCiAKICAgICBnZXQgbm9k
ZVN0eWxlcygpCkBAIC0yNjksNyArMzI0LDggQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFy
YXRpb24gPSBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uIGV4dGVuZHMgV2ViSW5zcGVjdG8KIH07
CiAKIFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLkV2ZW50ID0gewotICAgIFByb3Bl
cnRpZXNDaGFuZ2VkOiAiY3NzLXN0eWxlLWRlY2xhcmF0aW9uLXByb3BlcnRpZXMtY2hhbmdlZCIK
KyAgICBQcm9wZXJ0aWVzQ2hhbmdlZDogImNzcy1zdHlsZS1kZWNsYXJhdGlvbi1wcm9wZXJ0aWVz
LWNoYW5nZWQiLAorICAgIEluaXRpYWxUZXh0TW9kaWZpZWQ6ICJjc3Mtc3R5bGUtZGVjbGFyYXRp
b24taW5pdGlhbC10ZXh0LW1vZGlmaWVkIgogfTsKIAogV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVj
bGFyYXRpb24uVHlwZSA9IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1ZpZXdzL0NTU1N0eWxlRGVjbGFyYXRpb25TZWN0aW9uLmpzIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ1NTU3R5bGVEZWNsYXJhdGlvblNlY3Rp
b24uanMKaW5kZXggYjNlMGQwNzZjZjFjNzI2YmJkNjE3NzI5NjQ4OTk2N2NmODcxMTI5Yy4uNTZk
OWQ2MmQ3YzlmOGViNTA0NDkzMjAyODhmZmNlOTExZjYyY2M1NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ1NTU3R5bGVEZWNsYXJhdGlvblNl
Y3Rpb24uanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3Mv
Q1NTU3R5bGVEZWNsYXJhdGlvblNlY3Rpb24uanMKQEAgLTQ0OSw0OSArNDQ5LDEyIEBAIFdlYklu
c3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uU2VjdGlvbiA9IGNsYXNzIENTU1N0eWxlRGVjbGFy
YXRpb25TZWN0aW9uIGV4dGVuCiAgICAgICAgIH0KIAogICAgICAgICBjb250ZXh0TWVudS5hcHBl
bmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ29weSBSdWxlIiksIGZ1bmN0aW9uKCkgewot
ICAgICAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNvcHlUZXh0KHRoaXMuX2dlbmVyYXRl
Q1NTUnVsZVN0cmluZygpKTsKKyAgICAgICAgICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5jb3B5
VGV4dCh0aGlzLl9zdHlsZS5nZW5lcmF0ZUNTU1J1bGVTdHJpbmcoKSk7CiAgICAgICAgIH0uYmlu
ZCh0aGlzKSk7CiAKICAgICAgICAgY29udGV4dE1lbnUuc2hvdygpOwogICAgIH0KIAotICAgIF9n
ZW5lcmF0ZUNTU1J1bGVTdHJpbmcoKQotICAgIHsKLSAgICAgICAgdmFyIG51bU1lZGlhUXVlcmll
cyA9IDA7Ci0gICAgICAgIHZhciBzdHlsZVRleHQgPSAiIjsKLQotICAgICAgICBpZiAodGhpcy5f
c3R5bGUub3duZXJSdWxlKSB7Ci0gICAgICAgICAgICB2YXIgbWVkaWFMaXN0ID0gdGhpcy5fc3R5
bGUub3duZXJSdWxlLm1lZGlhTGlzdDsKLSAgICAgICAgICAgIGlmIChtZWRpYUxpc3QubGVuZ3Ro
KSB7Ci0gICAgICAgICAgICAgICAgbnVtTWVkaWFRdWVyaWVzID0gbWVkaWFMaXN0Lmxlbmd0aDsK
LQotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBudW1NZWRpYVF1ZXJpZXMgLSAxOyBpID49
IDA7IC0taSkKLSAgICAgICAgICAgICAgICAgICAgc3R5bGVUZXh0ICs9ICIgICAgIi5yZXBlYXQo
bnVtTWVkaWFRdWVyaWVzIC0gaSAtIDEpICsgIkBtZWRpYSAiICsgbWVkaWFMaXN0W2ldLnRleHQg
KyAiIHtcbiI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN0eWxlVGV4dCArPSAiICAg
ICIucmVwZWF0KG51bU1lZGlhUXVlcmllcykgKyB0aGlzLl9zdHlsZS5vd25lclJ1bGUuc2VsZWN0
b3JUZXh0OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHN0eWxlVGV4dCArPSB0aGlzLl9z
ZWxlY3RvckVsZW1lbnQudGV4dENvbnRlbnQ7Ci0KLSAgICAgICAgc3R5bGVUZXh0ICs9ICIge1xu
IjsKLQotICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBvZiB0aGlzLl9zdHlsZS52aXNpYmxlUHJv
cGVydGllcykgewotICAgICAgICAgICAgc3R5bGVUZXh0ICs9ICIgICAgIi5yZXBlYXQobnVtTWVk
aWFRdWVyaWVzICsgMSkgKyBwcm9wZXJ0eS50ZXh0LnRyaW0oKTsKLQotICAgICAgICAgICAgaWYg
KCFzdHlsZVRleHQuZW5kc1dpdGgoIjsiKSkKLSAgICAgICAgICAgICAgICBzdHlsZVRleHQgKz0g
IjsiOwotCi0gICAgICAgICAgICBzdHlsZVRleHQgKz0gIlxuIjsKLSAgICAgICAgfQotCi0gICAg
ICAgIGZvciAodmFyIGkgPSBudW1NZWRpYVF1ZXJpZXM7IGkgPiAwOyAtLWkpCi0gICAgICAgICAg
ICBzdHlsZVRleHQgKz0gIiAgICAiLnJlcGVhdChpKSArICJ9XG4iOwotCi0gICAgICAgIHN0eWxl
VGV4dCArPSAifSI7Ci0KLSAgICAgICAgcmV0dXJuIHN0eWxlVGV4dDsKLSAgICB9Ci0KICAgICBf
dG9nZ2xlUnVsZU9uT2ZmKCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9oYXNJbnZhbGlkU2Vs
ZWN0b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9W
aWV3cy9WaXN1YWxTdHlsZVNlbGVjdG9ySXRlbS5jc3MgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9WaWV3cy9WaXN1YWxTdHlsZVNlbGVjdG9ySXRlbS5jc3MKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYWY2OTA1YzAyN2ZmN2EwMTQ1Y2ZlYmRmMjIwY2U4MmEzMTFmMGE1MgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Zpc3VhbFN0
eWxlU2VsZWN0b3JJdGVtLmNzcwpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLml0ZW0u
dmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0geworICAgIGRpc3BsYXk6IGZsZXg7CisgICAgd2lk
dGg6IDEwMCU7CisgICAgaGVpZ2h0OiAyNXB4OworICAgIHBhZGRpbmc6IDJweCAwOworICAgIGxp
bmUtaGVpZ2h0OiAyMHB4OworICAgIGZvbnQtc2l6ZTogMTFweDsKK30KKworLml0ZW0udmlzdWFs
LXN0eWxlLXNlbGVjdG9yLWl0ZW0uc2VsZWN0ZWQgeworICAgIGJhY2tncm91bmQtY29sb3I6IHJn
YigzNCwgMTMxLCAyNDYpICFpbXBvcnRhbnQ7CisgICAgY29sb3I6IHdoaXRlOworfQorCisuaXRl
bS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbSA+IC5kaXNjbG9zdXJlLWJ1dHRvbiB7CisgICAg
ZGlzcGxheTogbm9uZTsKK30KKworLml0ZW0udmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0gPiBp
bnB1dFt0eXBlPSJjaGVja2JveCJdIHsKKyAgICBtYXJnaW46IDQuNXB4IDAgNHB4IDVweDsKK30K
KworLml0ZW0udmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0gPiAuaWNvbiB7CisgICAgd2lkdGg6
IDE2cHg7CisgICAgaGVpZ2h0OiAxNnB4OworICAgIG1hcmdpbjogMi41cHggMCAyLjVweCA0cHg7
Cit9CisKKy5pdGVtLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtLm1vZGlmaWVkID4gLmljb24g
eworICAgIC13ZWJraXQtZmlsdGVyOiBicmlnaHRuZXNzKDAuNzUpOworfQorCisuaXRlbS52aXN1
YWwtc3R5bGUtc2VsZWN0b3ItaXRlbSA+IC50aXRsZXMgeworICAgIG92ZXJmbG93OiBoaWRkZW47
CisgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKKyAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsK
KyAgICBwYWRkaW5nOiAwIDJweCAwIDNweDsKK30KKworLml0ZW0udmlzdWFsLXN0eWxlLXNlbGVj
dG9yLWl0ZW06bm90KC5kb20tZWxlbWVudC1pY29uKSA+IC50aXRsZXMgPiAudGl0bGUgeworICAg
IHBhZGRpbmc6IDAgMXB4IDJweDsKKyAgICBsaW5lLWhlaWdodDogMTJweDsKKyAgICBvdXRsaW5l
OiBub25lOworfQorCisuaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbTpub3QoLmRvbS1l
bGVtZW50LWljb24pLmVkaXRhYmxlID4gLnRpdGxlcyA+IC50aXRsZSB7CisgICAgY3Vyc29yOiB0
ZXh0OworICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IHRleHQ7CisgICAgLXdlYmtpdC11c2VyLW1v
ZGlmeTogcmVhZC13cml0ZS1wbGFpbnRleHQtb25seTsKK30KKworLml0ZW0udmlzdWFsLXN0eWxl
LXNlbGVjdG9yLWl0ZW06bm90KC5kb20tZWxlbWVudC1pY29uKS5lZGl0YWJsZSA+IC50aXRsZXMg
PiAudGl0bGU6Zm9jdXMgeworICAgIGNvbG9yOiBibGFjazsKKyAgICBiYWNrZ3JvdW5kLWNvbG9y
OiB3aGl0ZTsKKyAgICBib3JkZXItcmFkaXVzOiAycHg7CisgICAgYm94LXNoYWRvdzogaHNsYSgw
LCAwJSwgMCUsIDAuMTUpIDAgMXB4IDAsIDAgMCAwIDNweCBoc2xhKDAsIDEwMCUsIDEwMCUsIDAu
Myk7CisgICAgLyogVE9ETzogRml4IGN1cnNvciBiYXIgYW5kIGhpZ2hsaWdodCBoZWlnaHQgKi8K
K30KKworLml0ZW0udmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0gPiAudGl0bGVzID4gLnN1YnRp
dGxlOjpiZWZvcmUgeworICAgIG1hcmdpbi1yaWdodDogNXB4OworICAgIGZvbnQtc2l6ZTogMTFw
eDsKKyAgICAvKiBUaGUgZXh0cmEgc3BhY2UgYXQgdGhlIGJlZ2lubmluZyBpcyBuZWNlc3Nhcnkg
dG8gcHJldmVudCB0aGUgLXdlYmtpdC11c2VyLW1vZGlmeQorICAgIGN1cnNvciBiYXIgZnJvbSBk
aXNwbGF5aW5nIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGVtLWRhc2ggKi8KKyAgICBjb250ZW50
OiAiIFwyMDE0IjsKK30KKworLml0ZW0udmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0gPiAudGl0
bGVzID4gLnN1YnRpdGxlIHsKKyAgICBmb250LXNpemU6IDlweDsKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Zpc3VhbFN0eWxlU2VsZWN0
b3JJdGVtLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVmlz
dWFsU3R5bGVTZWxlY3Rvckl0ZW0uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2UzMjc4MmU5NmY5MGFlZmFmMTU5
N2E0Zjc1MmY3NjM2NGIwZDFmMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Zpc3VhbFN0eWxlU2VsZWN0b3JJdGVtLmpzCkBAIC0w
LDAgKzEsMTk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0
b3JJdGVtID0gY2xhc3MgVmlzdWFsU3R5bGVTZWxlY3Rvckl0ZW0gZXh0ZW5kcyBXZWJJbnNwZWN0
b3IuR2VuZXJhbFRyZWVFbGVtZW50Cit7CisgICAgY29uc3RydWN0b3Ioc3R5bGUsIHRpdGxlLCBz
dWJ0aXRsZSkKKyAgICB7CisgICAgICAgIHZhciBpY29uQ2xhc3NOYW1lOworICAgICAgICBzd2l0
Y2ggKHN0eWxlLnR5cGUpIHsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNs
YXJhdGlvbi5UeXBlLlJ1bGU6CisgICAgICAgICAgICBjb25zb2xlLmFzc2VydChzdHlsZS5vd25l
clJ1bGUpOworCisgICAgICAgICAgICBpZiAoc3R5bGUuaW5oZXJpdGVkKQorICAgICAgICAgICAg
ICAgIGljb25DbGFzc05hbWUgPSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblNlY3Rp
b24uSW5oZXJpdGVkU3R5bGVSdWxlSWNvblN0eWxlQ2xhc3NOYW1lOworICAgICAgICAgICAgZWxz
ZSBpZiAoc3R5bGUub3duZXJSdWxlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5DU1NSdWxlLlR5cGUu
QXV0aG9yKQorICAgICAgICAgICAgICAgIGljb25DbGFzc05hbWUgPSBXZWJJbnNwZWN0b3IuQ1NT
U3R5bGVEZWNsYXJhdGlvblNlY3Rpb24uQXV0aG9yU3R5bGVSdWxlSWNvblN0eWxlQ2xhc3NOYW1l
OworICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGUub3duZXJSdWxlLnR5cGUgPT09IFdlYkluc3Bl
Y3Rvci5DU1NSdWxlLlR5cGUuVXNlcikKKyAgICAgICAgICAgICAgICBpY29uQ2xhc3NOYW1lID0g
V2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25TZWN0aW9uLlVzZXJTdHlsZVJ1bGVJY29u
U3R5bGVDbGFzc05hbWU7CisgICAgICAgICAgICBlbHNlIGlmIChzdHlsZS5vd25lclJ1bGUudHlw
ZSA9PT0gV2ViSW5zcGVjdG9yLkNTU1J1bGUuVHlwZS5Vc2VyQWdlbnQpCisgICAgICAgICAgICAg
ICAgaWNvbkNsYXNzTmFtZSA9IFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uU2VjdGlv
bi5Vc2VyQWdlbnRTdHlsZVJ1bGVJY29uU3R5bGVDbGFzc05hbWU7CisgICAgICAgICAgICBlbHNl
IGlmIChzdHlsZS5vd25lclJ1bGUudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkNTU1J1bGUuVHlwZS5J
bnNwZWN0b3IpCisgICAgICAgICAgICAgICAgaWNvbkNsYXNzTmFtZSA9IFdlYkluc3BlY3Rvci5D
U1NTdHlsZURlY2xhcmF0aW9uU2VjdGlvbi5JbnNwZWN0b3JTdHlsZVJ1bGVJY29uU3R5bGVDbGFz
c05hbWU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5D
U1NTdHlsZURlY2xhcmF0aW9uLlR5cGUuSW5saW5lOgorICAgICAgICBjYXNlIFdlYkluc3BlY3Rv
ci5DU1NTdHlsZURlY2xhcmF0aW9uLlR5cGUuQXR0cmlidXRlOgorICAgICAgICAgICAgaWYgKHN0
eWxlLmluaGVyaXRlZCkKKyAgICAgICAgICAgICAgICBpY29uQ2xhc3NOYW1lID0gV2ViSW5zcGVj
dG9yLkNTU1N0eWxlRGVjbGFyYXRpb25TZWN0aW9uLkluaGVyaXRlZEVsZW1lbnRTdHlsZVJ1bGVJ
Y29uU3R5bGVDbGFzc05hbWU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaWNv
bkNsYXNzTmFtZSA9IFdlYkluc3BlY3Rvci5ET01UcmVlRWxlbWVudFBhdGhDb21wb25lbnQuRE9N
RWxlbWVudEljb25TdHlsZUNsYXNzTmFtZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgdGl0bGUgPSB0aXRsZS50cmltKCk7CisKKyAgICAgICAgc3VwZXIoWyJ2aXN1
YWwtc3R5bGUtc2VsZWN0b3ItaXRlbSIsIGljb25DbGFzc05hbWVdLCB0aXRsZSwgc3VidGl0bGUs
IHN0eWxlKTsKKworICAgICAgICB0aGlzLl9pY29uQ2xhc3NOYW1lID0gaWNvbkNsYXNzTmFtZTsK
KyAgICAgICAgdGhpcy5fbGFzdFZhbHVlID0gdGl0bGU7CisgICAgICAgIHRoaXMuX2VuYWJsZUVk
aXRpbmcgPSB0cnVlOworICAgIH0KKworICAgIC8vIFB1YmxpYworCisgICAgZ2V0IGljb25DbGFz
c05hbWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2ljb25DbGFzc05hbWU7CisgICAg
fQorCisgICAgLy8gT3ZlcnJpZGVzIGZyb20gVHJlZUVsZW1lbnQgKFByaXZhdGUpCisKKyAgICBv
bmF0dGFjaCgpCisgICAgeworICAgICAgICBzdXBlci5vbmF0dGFjaCgpOworCisgICAgICAgIHRo
aXMuX2xpc3RJdGVtTm9kZS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLCB0aGlzLl9oaWdo
bGlnaHROb2Rlc1dpdGhTZWxlY3Rvci5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5fbGlzdEl0
ZW1Ob2RlLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IiwgdGhpcy5faGlkZURPTU5vZGVIaWdo
bGlnaHQuYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX2xpc3RJdGVtTm9kZS5hZGRFdmVudExp
c3RlbmVyKCJjb250ZXh0bWVudSIsIHRoaXMuX2hhbmRsZUNvbnRleHRNZW51RXZlbnQuYmluZCh0
aGlzKSk7CisKKyAgICAgICAgdGhpcy5fY2hlY2tib3hFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiaW5wdXQiKTsKKyAgICAgICAgdGhpcy5fY2hlY2tib3hFbGVtZW50LnR5cGUgPSAi
Y2hlY2tib3giOworICAgICAgICB0aGlzLl9jaGVja2JveEVsZW1lbnQuY2hlY2tlZCA9ICF0aGlz
LnJlcHJlc2VudGVkT2JqZWN0W1dlYkluc3BlY3Rvci5WaXN1YWxTdHlsZURldGFpbHNQYW5lbC5T
dHlsZURpc2FibGVkXTsKKyAgICAgICAgdGhpcy5fdXBkYXRlQ2hlY2tib3hUaXRsZSgpOworICAg
ICAgICB0aGlzLl9jaGVja2JveEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgdGhp
cy5faGFuZGxlQ2hlY2tib3hDaGFuZ2VkLmJpbmQodGhpcykpOworICAgICAgICB0aGlzLl9saXN0
SXRlbU5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuX2NoZWNrYm94RWxlbWVudCwgdGhpcy5faWNvbkVs
ZW1lbnQpOworCisgICAgICAgIHRoaXMuX21haW5UaXRsZUVsZW1lbnQuc3BlbGxjaGVjayA9IGZh
bHNlOworICAgICAgICB0aGlzLl9tYWluVGl0bGVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1v
dXNlZG93biIsIHRoaXMuX2hhbmRsZU1haW5UaXRsZU1vdXNlRG93bi5iaW5kKHRoaXMpKTsKKyAg
ICAgICAgdGhpcy5fbWFpblRpdGxlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwg
dGhpcy5faGFuZGxlTWFpblRpdGxlS2V5RG93bi5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5f
bWFpblRpdGxlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsIHRoaXMuX2hpZ2hsaWdo
dE5vZGVzV2l0aFNlbGVjdG9yLmJpbmQodGhpcykpOworICAgICAgICB0aGlzLl9tYWluVGl0bGVF
bGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCB0aGlzLl9jb21taXRTZWxlY3Rvci5iaW5k
KHRoaXMpKTsKKworICAgICAgICB0aGlzLnJlcHJlc2VudGVkT2JqZWN0LmFkZEV2ZW50TGlzdGVu
ZXIoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24uRXZlbnQuSW5pdGlhbFRleHRNb2Rp
ZmllZCwgdGhpcy5fc3R5bGVUZXh0TW9kaWZpZWQsIHRoaXMpOworICAgICAgICB0aGlzLl9zdHls
ZVRleHRNb2RpZmllZCgpOworICAgIH0KKworICAgIG9uZGVzZWxlY3QoKQorICAgIHsKKyAgICAg
ICAgdGhpcy5fbGlzdEl0ZW1Ob2RlLmNsYXNzTGlzdC5yZW1vdmUoImVkaXRhYmxlIik7CisgICAg
fQorCisgICAgLy8gUHJpdmF0ZQorCisgICAgZ2V0IF9zZWxlY3RvclRleHQoKQorICAgIHsKKyAg
ICAgICAgdmFyIHRpdGxlVGV4dCA9IHRoaXMuX21haW5UaXRsZUVsZW1lbnQudGV4dENvbnRlbnQ7
CisKKyAgICAgICAgaWYgKCF0aXRsZVRleHQgfHwgIXRpdGxlVGV4dC5sZW5ndGgpCisgICAgICAg
ICAgICB0aXRsZVRleHQgPSB0aGlzLl9tYWluVGl0bGU7CisKKyAgICAgICAgcmV0dXJuIHRpdGxl
VGV4dC50cmltKCk7CisgICAgfQorCisgICAgX2hpZ2hsaWdodE5vZGVzV2l0aFNlbGVjdG9yKCkK
KyAgICB7CisgICAgICAgIGlmICghdGhpcy5yZXByZXNlbnRlZE9iamVjdC5vd25lclJ1bGUpIHsK
KyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kb21UcmVlTWFuYWdlci5oaWdobGlnaHRET01Ob2Rl
KHRoaXMucmVwcmVzZW50ZWRPYmplY3Qubm9kZS5pZCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBXZWJJbnNwZWN0b3IuZG9tVHJlZU1hbmFnZXIuaGlnaGxpZ2h0
U2VsZWN0b3IodGhpcy5fc2VsZWN0b3JUZXh0LCB0aGlzLnJlcHJlc2VudGVkT2JqZWN0Lm5vZGUu
b3duZXJEb2N1bWVudC5mcmFtZUlkZW50aWZpZXIpOworICAgIH0KKworICAgIF9oaWRlRE9NTm9k
ZUhpZ2hsaWdodCgpCisgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IuZG9tVHJlZU1hbmFnZXIu
aGlkZURPTU5vZGVIaWdobGlnaHQoKTsKKyAgICB9CisKKyAgICBfaGFuZGxlQ29udGV4dE1lbnVF
dmVudChldmVudCkKKyAgICB7CisgICAgICAgIHZhciBjb250ZXh0TWVudSA9IG5ldyBXZWJJbnNw
ZWN0b3IuQ29udGV4dE1lbnUoZXZlbnQpOworCisgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0
ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDb3B5IFJ1bGUiKSwgZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QuY29weVRleHQodGhpcy5yZXByZXNlbnRlZE9i
amVjdC5nZW5lcmF0ZUNTU1J1bGVTdHJpbmcoKSk7CisgICAgICAgIH0uYmluZCh0aGlzKSk7CisK
KyAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJl
c2V0IiksIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdGhpcy5yZXByZXNlbnRlZE9iamVjdC5y
ZXNldFRleHQoKTsKKyAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdl
Ykluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9ySXRlbS5FdmVudC5TdHlsZVRleHRSZXNldCk7
CisgICAgICAgIH0uYmluZCh0aGlzKSk7CisKKyAgICAgICAgY29udGV4dE1lbnUuc2hvdygpOwor
ICAgIH0KKworICAgIF9oYW5kbGVDaGVja2JveENoYW5nZWQoZXZlbnQpCisgICAgeworICAgICAg
ICB0aGlzLl91cGRhdGVDaGVja2JveFRpdGxlKCk7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVu
dFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9ySXRlbS5FdmVudC5D
aGVja2JveENoYW5nZWQsIHtlbmFibGVkOiB0aGlzLl9jaGVja2JveEVsZW1lbnQuY2hlY2tlZH0p
OworICAgIH0KKworICAgIF91cGRhdGVDaGVja2JveFRpdGxlKCkKKyAgICB7CisgICAgICAgIHRo
aXMuX2NoZWNrYm94RWxlbWVudC50aXRsZSA9IHRoaXMuX2NoZWNrYm94RWxlbWVudC5jaGVja2Vk
ID8gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDbGljayB0byBkaXNhYmxlIHRoZSBzZWxlY3RlZCBy
dWxlIikgOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNsaWNrIHRvIGVuYWJsZSB0aGUgc2VsZWN0
ZWQgcnVsZSIpOworICAgIH0KKworICAgIF9oYW5kbGVNYWluVGl0bGVNb3VzZURvd24oZXZlbnQp
CisgICAgeworICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUuY2xhc3NMaXN0LnRvZ2dsZSgiZWRp
dGFibGUiLCB0aGlzLnNlbGVjdGVkKTsKKyAgICB9CisKKyAgICBfaGFuZGxlTWFpblRpdGxlS2V5
RG93bihldmVudCkKKyAgICB7CisgICAgICAgIHRoaXMuX2hpZ2hsaWdodE5vZGVzV2l0aFNlbGVj
dG9yKCk7CisKKyAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDEzKSB7CisgICAgICAgICAg
ICB0aGlzLl9tYWluVGl0bGVFbGVtZW50LmJsdXIoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIF9jb21taXRTZWxlY3RvcigpCisgICAgeworICAgICAgICB0
aGlzLl9oaWRlRE9NTm9kZUhpZ2hsaWdodCgpOworICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUu
Y2xhc3NMaXN0LnJlbW92ZSgiZWRpdGFibGUiKTsKKworICAgICAgICB2YXIgdmFsdWUgPSB0aGlz
Ll9zZWxlY3RvclRleHQ7CisgICAgICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5fbGFzdFZhbHVlKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMucmVwcmVzZW50ZWRPYmplY3Qub3du
ZXJSdWxlLnNlbGVjdG9yVGV4dCA9IHZhbHVlOworICAgIH0KKworICAgIF9zdHlsZVRleHRNb2Rp
ZmllZCgpCisgICAgeworICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUuY2xhc3NMaXN0LnRvZ2ds
ZSgibW9kaWZpZWQiLCB0aGlzLnJlcHJlc2VudGVkT2JqZWN0Lm1vZGlmaWVkKTsKKyAgICB9Cit9
OworCitXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3Rvckl0ZW0uRXZlbnQgPSB7CisgICAg
U3R5bGVUZXh0UmVzZXQ6ICJ2aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbS1zdHlsZS10ZXh0LXJl
c2V0IiwKKyAgICBDaGVja2JveENoYW5nZWQ6ICJ2aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbS1j
aGVja2JveC1jaGFuZ2VkIgorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvVmlld3MvVmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24uY3NzIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVmlzdWFsU3R5bGVTZWxlY3RvclNl
Y3Rpb24uY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYyZWQ3MGY3NzZiZGEwZGE3MjMwMDMyZWJlOTY1M2YxNzNl
YWJiMGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9WaWV3cy9WaXN1YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5jc3MKQEAgLTAsMCArMSwxMjcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisuZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1z
ZWN0aW9uID4gLmhlYWRlciB7CisgICAgZGlzcGxheTogZmxleDsKKyAgICBoZWlnaHQ6IDIycHg7
Cit9CisKKy5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb246bm90
KC5jb2xsYXBzZWQpID4gLmhlYWRlciB7CisgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJn
YigxNzksIDE3OSwgMTc5KTsKK30KKworQG1lZGlhICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwt
cmF0aW86IDIpIHsKKyAgICAuZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1z
ZWN0aW9uOm5vdCguY29sbGFwc2VkKSA+IC5oZWFkZXIgeworICAgICAgICBib3JkZXItd2lkdGg6
IDAuNXB4ICFpbXBvcnRhbnQ7CisgICAgfQorfQorCisuZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1z
dHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmhlYWRlciA+IC5jdXJyZW50LXNlbGVjdG9yIHsKKyAg
ICB3aWR0aDogY2FsYygxMDAlIC0gODVweCk7CisgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CisgICAg
Zm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgICB3aGl0ZS1zcGFjZTogbm93cmFwOworICAgIG92ZXJm
bG93OiBoaWRkZW47CisgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Cit9CisKKy52aXN1YWwt
c3R5bGUtc2VsZWN0b3Itc2VjdGlvbi5kZXRhaWxzLXNlY3Rpb246bm90KC5jb2xsYXBzZWQpID4g
LmhlYWRlciA+IC5jdXJyZW50LXNlbGVjdG9yIHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisu
ZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmhlYWRlciA+
IC5jdXJyZW50LXNlbGVjdG9yID4gLmljb24geworICAgIHdpZHRoOiAxNnB4OworICAgIGhlaWdo
dDogMTZweDsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAzcHg7Cit9CisKKy5k
ZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24gPiAuaGVhZGVyID4g
LmN1cnJlbnQtc2VsZWN0b3IgPiBzcGFuIHsKKyAgICBtYXJnaW4tbGVmdDogMjFweDsKK30KKwor
LmRldGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5oZWFkZXIg
PiAuY29udHJvbHMgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICByaWdodDogMDsKKyAg
ICB0b3A6IDA7CisgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBsaWdodGdyZXk7Cit9CisKKy5k
ZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24uY29sbGFwc2VkID4g
LmhlYWRlciA+IC5jb250cm9scyB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworLmRldGFpbHMt
c2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5oZWFkZXIgPiAuY29udHJv
bHMgPiAudmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24tYWRkLXJ1bGUgeworICAgIHdpZHRo
OiAyM3B4OworICAgIGhlaWdodDogMjFweDsKKyAgICBwYWRkaW5nOiA0cHggNXB4OworICAgIG9w
YWNpdHk6IDAuNzsKK30KKworLmRldGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3It
c2VjdGlvbiA+IC5jb250ZW50ID4gLnNlbGVjdG9ycyB7CisgICAgbWF4LWhlaWdodDogMTEwcHg7
CisgICAgb3ZlcmZsb3c6IGF1dG87Cit9CisKKy5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxl
LXNlbGVjdG9yLXNlY3Rpb24gPiAuY29udGVudCA+IC5zZWxlY3RvcnMgPiAuc2VsZWN0b3ItbGlz
dCB7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmctbGVmdDogMDsKKyAgICBvdXRsaW5lOiBu
b25lOworfQorCisuZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9u
ID4gLmNvbnRlbnQgPiAuc2VsZWN0b3JzID4gLnNlbGVjdG9yLWxpc3QgPiAudmlzdWFsLXN0eWxl
LXNlbGVjdG9yLWl0ZW06bnRoLWNoaWxkKG9kZCkgeworICAgIGJhY2tncm91bmQtY29sb3I6IHdo
aXRlOworfQorCisuZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9u
ID4gLmNvbnRlbnQgPiAuc2VsZWN0b3JzID4gLnNlbGVjdG9yLWxpc3QgPiAuc2VjdGlvbi1kaXZp
ZGVyIHsKKyAgICBwb3NpdGlvbjogLXdlYmtpdC1zdGlja3k7CisgICAgdG9wOiAtMXB4OworICAg
IGhlaWdodDogMTdweDsKKyAgICBwYWRkaW5nOiAycHg7CisgICAgYmFja2dyb3VuZC1jb2xvcjog
cmdiKDI0MiwgMjQyLCAyNDIpOworICAgIGJvcmRlci1jb2xvcjogcmdiKDE3OSwgMTc5LCAxNzkp
OworICAgIGJvcmRlci1zdHlsZTogc29saWQ7CisgICAgYm9yZGVyLXdpZHRoOiAxcHggMDsKKyAg
ICB6LWluZGV4OiAxMDA7Cit9CisKKy5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVj
dG9yLXNlY3Rpb24gPiAuY29udGVudCA+IC5zZWxlY3RvcnMgPiAuc2VsZWN0b3ItbGlzdCA+IC5z
ZWN0aW9uLWRpdmlkZXIgPiAuZGlzY2xvc3VyZS1idXR0b24sCisuZGV0YWlscy1zZWN0aW9uLnZp
c3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmNvbnRlbnQgPiAuc2VsZWN0b3JzID4gLnNl
bGVjdG9yLWxpc3QgPiAuc2VjdGlvbi1kaXZpZGVyID4gLmljb24geworICAgIGRpc3BsYXk6IG5v
bmU7Cit9CisKKy5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24g
PiAuY29udGVudCA+IC5zZWxlY3RvcnMgPiAuc2VsZWN0b3ItbGlzdCA+IC5zZWN0aW9uLWRpdmlk
ZXIgPiAudGl0bGVzID4gLnRpdGxlIHsKKyAgICBvdmVyZmxvdzogaGlkZGVuOworICAgIHdoaXRl
LXNwYWNlOiBub3dyYXA7CisgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Cit9CisKKy5kZXRh
aWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24gPiAuY29udGVudCA+IC5z
ZWxlY3RvcnMgPiAuc2VsZWN0b3ItbGlzdCA+IC5zZWN0aW9uLWRpdmlkZXIgfiAudmlzdWFsLXN0
eWxlLXNlbGVjdG9yLWl0ZW06bnRoLWNoaWxkKGV2ZW4pIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9y
OiB3aGl0ZTsKK30KKworLmRldGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2Vj
dGlvbiA+IC5jb250ZW50ID4gLnNlbGVjdG9ycyA+IC5zZWxlY3Rvci1saXN0ID4gLnNlY3Rpb24t
ZGl2aWRlciB+IC52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbTpudGgtY2hpbGQob2RkKSB7Cisg
ICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9WaXN1YWxTdHlsZVNlbGVjdG9yU2Vj
dGlvbi5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Zpc3Vh
bFN0eWxlU2VsZWN0b3JTZWN0aW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE3MjQyNDM4OGQwYzY5YTA3NzNm
YzA3YmUxNjk4YzdiNTY0NDJiYzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9WaXN1YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5qcwpA
QCAtMCwwICsxLDMwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMywgMkFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxl
U2VsZWN0b3JTZWN0aW9uID0gY2xhc3MgVmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24gZXh0ZW5k
cyBXZWJJbnNwZWN0b3IuRGV0YWlsc1NlY3Rpb24KK3sKKyAgICBjb25zdHJ1Y3RvcihkZWxlZ2F0
ZSkKKyAgICB7CisgICAgICAgIHZhciBzZWxlY3RvclNlY3Rpb24gPSB7ZWxlbWVudDogZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiZGl2Iil9OworICAgICAgICBzZWxlY3RvclNlY3Rpb24uZWxlbWVu
dC5jbGFzc0xpc3QuYWRkKCJzZWxlY3RvcnMiKTsKKworICAgICAgICB2YXIgY29udHJvbEVsZW1l
bnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgY29udHJvbEVsZW1l
bnQuY2xhc3NMaXN0LmFkZCgiY29udHJvbHMiKTsKKworICAgICAgICBzdXBlcigidmlzdWFsLXN0
eWxlLXNlbGVjdG9yLXNlY3Rpb24iLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlN0eWxlIFJ1bGVz
IiksIFtzZWxlY3RvclNlY3Rpb25dLCBjb250cm9sRWxlbWVudCk7CisKKyAgICAgICAgdGhpcy5f
ZGVsZWdhdGUgPSBkZWxlZ2F0ZSB8fCBudWxsCisgICAgICAgIHRoaXMuX25vZGVTdHlsZXMgPSBu
dWxsOworCisgICAgICAgIHRoaXMuX2N1cnJlbnRTZWxlY3RvciA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImRpdiIpOworICAgICAgICB0aGlzLl9jdXJyZW50U2VsZWN0b3IuY2xhc3NMaXN0LmFk
ZCgiY3VycmVudC1zZWxlY3RvciIpOworCisgICAgICAgIHZhciBjdXJyZW50U2VsZWN0b3JJY29u
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7CisgICAgICAgIGN1cnJlbnRTZWxlY3Rv
ckljb24uY2xhc3NMaXN0LmFkZCgiaWNvbiIpOworICAgICAgICB0aGlzLl9jdXJyZW50U2VsZWN0
b3IuYXBwZW5kQ2hpbGQoY3VycmVudFNlbGVjdG9ySWNvbik7CisKKyAgICAgICAgdGhpcy5fY3Vy
cmVudFNlbGVjdG9yVGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAg
ICAgdGhpcy5fY3VycmVudFNlbGVjdG9yLmFwcGVuZENoaWxkKHRoaXMuX2N1cnJlbnRTZWxlY3Rv
clRleHQpOworCisgICAgICAgIHRoaXMuX2hlYWRlckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5f
Y3VycmVudFNlbGVjdG9yKTsKKworICAgICAgICB2YXIgc2VsZWN0b3JMaXN0ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgib2wiKTsKKyAgICAgICAgc2VsZWN0b3JMaXN0LmNsYXNzTGlzdC5hZGQo
InNlbGVjdG9yLWxpc3QiKTsKKyAgICAgICAgc2VsZWN0b3JTZWN0aW9uLmVsZW1lbnQuYXBwZW5k
Q2hpbGQoc2VsZWN0b3JMaXN0KTsKKworICAgICAgICB0aGlzLl9zZWxlY3RvcnMgPSBuZXcgV2Vi
SW5zcGVjdG9yLlRyZWVPdXRsaW5lKHNlbGVjdG9yTGlzdCk7CisgICAgICAgIHRoaXMuX3NlbGVj
dG9ycy5vbnNlbGVjdCA9IHRoaXMuX3NlbGVjdG9yQ2hhbmdlZC5iaW5kKHRoaXMpOworICAgICAg
ICB0aGlzLl9mb2N1c05leHROZXdJbnNwZWN0b3JSdWxlID0gZmFsc2U7CisKKyAgICAgICAgd3Jh
cHBlZFNWR0RvY3VtZW50KCJJbWFnZXMvUGx1cy5zdmciLCAidmlzdWFsLXN0eWxlLXNlbGVjdG9y
LXNlY3Rpb24tYWRkLXJ1bGUiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNsaWNrIHRvIGFkZCBh
IG5ldyBydWxlLiIpLCBmdW5jdGlvbih3cmFwcGVyKSB7CisgICAgICAgICAgICB3cmFwcGVyLmFk
ZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fYWRkTmV3UnVsZS5iaW5kKHRoaXMpKTsKKyAg
ICAgICAgICAgIGNvbnRyb2xFbGVtZW50LmFwcGVuZENoaWxkKHdyYXBwZXIpOworICAgICAgICB9
LmJpbmQodGhpcykpOworCisgICAgICAgIHRoaXMuX2hlYWRlckVsZW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcigibW91c2VvdmVyIiwgdGhpcy5faGFuZGxlTW91c2VPdmVyLmJpbmQodGhpcykpOworICAg
ICAgICB0aGlzLl9oZWFkZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IiwgdGhp
cy5faGFuZGxlTW91c2VPdXQuYmluZCh0aGlzKSk7CisgICAgfQorCisgICAgLy8gUHVibGljCisK
KyAgICB1cGRhdGUobm9kZVN0eWxlcykKKyAgICB7CisgICAgICAgIHZhciBzdHlsZSA9IHRoaXMu
Y3VycmVudFJ1bGUoKTsKKyAgICAgICAgaWYgKHN0eWxlKQorICAgICAgICAgICAgdGhpcy5fbm9k
ZVN0eWxlcy5fX2xhc3RTZWxlY3RlZFJ1bGUgPSBzdHlsZTsKKworICAgICAgICBpZiAobm9kZVN0
eWxlcykKKyAgICAgICAgICAgIHRoaXMuX25vZGVTdHlsZXMgPSBub2RlU3R5bGVzOworCisgICAg
ICAgIGlmICghdGhpcy5fbm9kZVN0eWxlcykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICB0aGlzLl9zZWxlY3RvcnMucmVtb3ZlQ2hpbGRyZW4oKTsKKworICAgICAgICB2YXIgcHJldmlv
dXNSdWxlID0gbnVsbDsKKworICAgICAgICAvLyBQc2V1ZG8gU3R5bGVzCisgICAgICAgIHZhciBw
c2V1ZG9FbGVtZW50cyA9IHRoaXMuX25vZGVTdHlsZXMucHNldWRvRWxlbWVudHM7CisgICAgICAg
IHZhciBwc2V1ZG9SdWxlcyA9IFtdOworCisgICAgICAgIGZvciAodmFyIHBzZXVkb0lkZW50aWZp
ZXIgaW4gcHNldWRvRWxlbWVudHMpCisgICAgICAgICAgICBwc2V1ZG9SdWxlcyA9IHBzZXVkb1J1
bGVzLmNvbmNhdChwc2V1ZG9FbGVtZW50c1twc2V1ZG9JZGVudGlmaWVyXS5tYXRjaGVkUnVsZXMp
OworCisgICAgICAgIHZhciBvcmRlcmVkUHNldWRvUnVsZXMgPSB1bmlxdWVPcmRlcmVkUnVsZXMo
cHNldWRvUnVsZXMpOworICAgICAgICAvLyBSZXZlcnNlIHRoZSBhcnJheSB0byBhbGxvdyBlbnN1
cmUgdGhhdCBzcGxpY2luZyB0aGUgYXJyYXkgd2lsbCBub3QgbWVzcyB3aXRoIHRoZSBvcmRlci4K
KyAgICAgICAgaWYgKG9yZGVyZWRQc2V1ZG9SdWxlcy5sZW5ndGgpCisgICAgICAgICAgICBvcmRl
cmVkUHNldWRvUnVsZXMucmV2ZXJzZSgpOworCisgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVNlbGVj
dG9ySXRlbShzdHlsZSwgdGl0bGUsIHN1YnRpdGxlKSB7CisgICAgICAgICAgICB2YXIgc2VsZWN0
b3IgPSBuZXcgV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JJdGVtKHN0eWxlLCB0aXRs
ZSwgc3VidGl0bGUpOworICAgICAgICAgICAgc2VsZWN0b3IuYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3Rvckl0ZW0uRXZlbnQuU3R5bGVUZXh0UmVzZXQsIHRo
aXMuX3N0eWxlVGV4dFJlc2V0LmJpbmQodGhpcykpOworICAgICAgICAgICAgc2VsZWN0b3IuYWRk
RXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3Rvckl0ZW0uRXZlbnQu
Q2hlY2tib3hDaGFuZ2VkLCB0aGlzLl90cmVlRWxlbWVudENoZWNrYm94VG9nZ2xlZC5iaW5kKHRo
aXMpKTsKKyAgICAgICAgICAgIHRoaXMuX3NlbGVjdG9ycy5hcHBlbmRDaGlsZChzZWxlY3Rvcik7
CisKKyAgICAgICAgICAgIGlmICh0aGlzLl9mb2N1c05leHROZXdJbnNwZWN0b3JSdWxlICYmIHN0
eWxlLm93bmVyUnVsZSAmJiBzdHlsZS5vd25lclJ1bGUudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkNT
U1J1bGUuVHlwZS5JbnNwZWN0b3IpIHsKKyAgICAgICAgICAgICAgICBzZWxlY3Rvci5zZWxlY3Qo
dHJ1ZSk7CisgICAgICAgICAgICAgICAgc2VsZWN0b3IuZWxlbWVudC5zY3JvbGxJbnRvVmlldygp
OworICAgICAgICAgICAgICAgIHRoaXMuX25vZGVTdHlsZXMuX19sYXN0U2VsZWN0ZWRSdWxlID0g
c3R5bGU7CisgICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNOZXh0TmV3SW5zcGVjdG9yUnVsZSA9
IGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKHRoaXMuX25vZGVTdHlsZXMuX19sYXN0U2VsZWN0ZWRSdWxlID09PSBzdHlsZSkg
eworICAgICAgICAgICAgICAgIHNlbGVjdG9yLnNlbGVjdCh0cnVlKTsKKyAgICAgICAgICAgICAg
ICBzZWxlY3Rvci5lbGVtZW50LnNjcm9sbEludG9WaWV3KCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBmdW5jdGlvbiB1bmlxdWVPcmRlcmVkUnVsZXMob3JkZXJlZFJ1bGVz
KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgdW5pcXVlUnVsZXMgPSBbXTsKKworICAgICAg
ICAgICAgZm9yICh2YXIgcnVsZSBvZiBvcmRlcmVkUnVsZXMpIHsKKyAgICAgICAgICAgICAgICB2
YXIgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBleGlzdGluZ1J1bGUg
b2YgdW5pcXVlUnVsZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFydWxlLmlzRXF1YWxU
byhleGlzdGluZ1J1bGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoZm91bmQpCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgdW5pcXVlUnVsZXMu
cHVzaChydWxlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHVuaXF1ZVJ1
bGVzOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gaW5zZXJ0QWxsTWF0Y2hpbmdQc2V1
ZG9SdWxlcyhmb3JjZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFvcmRlcmVkUHNldWRv
UnVsZXMubGVuZ3RoKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYg
KGZvcmNlKSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IG9yZGVyZWRQc2V1ZG9SdWxl
cy5sZW5ndGggLSAxOyBqID49IDA7IC0taikgeworICAgICAgICAgICAgICAgICAgICB2YXIgcHNl
dWRvUnVsZSA9IG9yZGVyZWRQc2V1ZG9SdWxlc1tqXTsKKyAgICAgICAgICAgICAgICAgICAgY3Jl
YXRlU2VsZWN0b3JJdGVtLmNhbGwodGhpcywgcHNldWRvUnVsZS5zdHlsZSwgcHNldWRvUnVsZS5z
ZWxlY3RvclRleHQsIHBzZXVkb1J1bGUubWVkaWFUZXh0KTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgb3JkZXJlZFBzZXVkb1J1bGVzID0gW107CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghcHJldmlvdXNSdWxlKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAgICAgZm9yICh2YXIgaiA9IG9yZGVyZWRQc2V1ZG9SdWxlcy5sZW5ndGggLSAx
OyBqID49IDA7IC0taikgeworICAgICAgICAgICAgICAgIHZhciBwc2V1ZG9SdWxlID0gb3JkZXJl
ZFBzZXVkb1J1bGVzW2pdOworICAgICAgICAgICAgICAgIGlmICghcHNldWRvUnVsZS5zZWxlY3Rv
cklzR3JlYXRlcihwcmV2aW91c1J1bGUubW9zdFNwZWNpZmljU2VsZWN0b3IpKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGNyZWF0ZVNlbGVjdG9ySXRl
bS5jYWxsKHRoaXMsIHBzZXVkb1J1bGUuc3R5bGUsIHBzZXVkb1J1bGUuc2VsZWN0b3JUZXh0LCBw
c2V1ZG9SdWxlLm1lZGlhVGV4dCk7CisgICAgICAgICAgICAgICAgcHJldmlvdXNSdWxlID0gcHNl
dWRvUnVsZTsKKyAgICAgICAgICAgICAgICBvcmRlcmVkUHNldWRvUnVsZXMuc3BsaWNlKGosIDEp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCF0aGlzLl9ub2RlU3R5
bGVzLl9fbGFzdFNlbGVjdGVkUnVsZSkKKyAgICAgICAgICAgIHRoaXMuX25vZGVTdHlsZXMuX19s
YXN0U2VsZWN0ZWRSdWxlID0gdGhpcy5fbm9kZVN0eWxlcy5pbmxpbmVTdHlsZTsKKworICAgICAg
ICAvLyBJbmxpbmUgU3R5bGUKKyAgICAgICAgY3JlYXRlU2VsZWN0b3JJdGVtLmNhbGwodGhpcywg
dGhpcy5fbm9kZVN0eWxlcy5pbmxpbmVTdHlsZSwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJUaGlz
IEVsZW1lbnQiKSk7CisKKyAgICAgICAgLy8gTWF0Y2hlZCBSdWxlcworICAgICAgICBmb3IgKHZh
ciBydWxlIG9mIHVuaXF1ZU9yZGVyZWRSdWxlcyh0aGlzLl9ub2RlU3R5bGVzLm1hdGNoZWRSdWxl
cykpIHsKKyAgICAgICAgICAgIGlmIChydWxlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5DU1NSdWxl
LlR5cGUuVXNlckFnZW50KSB7CisgICAgICAgICAgICAgICAgaW5zZXJ0QWxsTWF0Y2hpbmdQc2V1
ZG9SdWxlcy5jYWxsKHRoaXMsIHRydWUpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpbnNlcnRBbGxNYXRjaGluZ1BzZXVkb1J1bGVzLmNh
bGwodGhpcyk7CisgICAgICAgICAgICBjcmVhdGVTZWxlY3Rvckl0ZW0uY2FsbCh0aGlzLCBydWxl
LnN0eWxlLCBydWxlLnNlbGVjdG9yVGV4dCwgcnVsZS5tZWRpYVRleHQpOworICAgICAgICAgICAg
cHJldmlvdXNSdWxlID0gcnVsZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEp1c3QgaW4gY2Fz
ZSB0aGVyZSBhcmUgYW55IHJlbWFpbmluZyBwc2V1ZG8tc3R5bGVzLgorICAgICAgICBpbnNlcnRB
bGxNYXRjaGluZ1BzZXVkb1J1bGVzLmNhbGwodGhpcywgdHJ1ZSk7CisKKyAgICAgICAgLy8gSW5o
ZXJpdGVkIFJ1bGVzCisgICAgICAgIGZvciAodmFyIGluaGVyaXRlZCBvZiB0aGlzLl9ub2RlU3R5
bGVzLmluaGVyaXRlZFJ1bGVzKSB7CisgICAgICAgICAgICBpZiAoIWluaGVyaXRlZC5tYXRjaGVk
UnVsZXMgfHwgIWluaGVyaXRlZC5tYXRjaGVkUnVsZXMubGVuZ3RoKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgICAgICB2YXIgZGl2aWRlciA9IG5ldyBXZWJJbnNwZWN0b3Iu
R2VuZXJhbFRyZWVFbGVtZW50KCJzZWN0aW9uLWRpdmlkZXIiLCBXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIkluaGVyaXRlZCBmcm9tICVzIikuZm9ybWF0KFdlYkluc3BlY3Rvci5kaXNwbGF5TmFtZUZv
ck5vZGUoaW5oZXJpdGVkLm5vZGUpKSk7CisgICAgICAgICAgICBkaXZpZGVyLnNlbGVjdGFibGUg
PSBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMuX3NlbGVjdG9ycy5hcHBlbmRDaGlsZChkaXZpZGVy
KTsKKworICAgICAgICAgICAgZm9yICh2YXIgcnVsZSBvZiB1bmlxdWVPcmRlcmVkUnVsZXMoaW5o
ZXJpdGVkLm1hdGNoZWRSdWxlcykpIHsKKyAgICAgICAgICAgICAgICBpZiAocnVsZS50eXBlID09
PSBXZWJJbnNwZWN0b3IuQ1NTUnVsZS5UeXBlLlVzZXJBZ2VudCkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBjcmVhdGVTZWxlY3Rvckl0ZW0uY2FsbCh0
aGlzLCBydWxlLnN0eWxlLCBydWxlLnNlbGVjdG9yVGV4dCwgcnVsZS5tZWRpYVRleHQpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fZm9jdXNOZXh0TmV3SW5zcGVj
dG9yUnVsZSA9IGZhbHNlOworICAgIH0KKworICAgIGN1cnJlbnRSdWxlKCkKKyAgICB7CisgICAg
ICAgIGlmICghdGhpcy5fbm9kZVN0eWxlcyB8fCAhdGhpcy5fc2VsZWN0b3JzLnNlbGVjdGVkVHJl
ZUVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Nl
bGVjdG9ycy5zZWxlY3RlZFRyZWVFbGVtZW50LnJlcHJlc2VudGVkT2JqZWN0OworICAgIH0KKwor
ICAgIC8vIFByaXZhdGUKKworICAgIF9zZWxlY3RvckNoYW5nZWQoc2VsZWN0ZWRUcmVlRWxlbWVu
dCkKKyAgICB7CisgICAgICAgIGlmICghc2VsZWN0ZWRUcmVlRWxlbWVudCkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICB0aGlzLl9jdXJyZW50U2VsZWN0b3IuY2xhc3NOYW1lID0gImN1
cnJlbnQtc2VsZWN0b3IgIiArIHNlbGVjdGVkVHJlZUVsZW1lbnQuaWNvbkNsYXNzTmFtZTsKKwor
ICAgICAgICB2YXIgdGV4dCA9IHNlbGVjdGVkVHJlZUVsZW1lbnQubWFpblRpdGxlOworICAgICAg
ICB2YXIgc3VidGl0bGUgPSBzZWxlY3RlZFRyZWVFbGVtZW50LnN1YnRpdGxlOworICAgICAgICBp
ZiAoc3VidGl0bGUgJiYgc3VidGl0bGUubGVuZ3RoKQorICAgICAgICAgICAgdGV4dCArPSAiIFx1
MjAxNCAiICsgc3VidGl0bGU7CisKKyAgICAgICAgdGhpcy5fY3VycmVudFNlbGVjdG9yVGV4dC50
ZXh0Q29udGVudCA9IHRleHQ7CisKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5l
cnMoV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLkV2ZW50LlNlbGVjdG9y
Q2hhbmdlZCk7CisgICAgfQorCisgICAgX3N0eWxlVGV4dFJlc2V0KCkKKyAgICB7CisgICAgICAg
IHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNl
bGVjdG9yU2VjdGlvbi5FdmVudC5TZWxlY3RvckNoYW5nZWQpOworICAgIH0KKworICAgIF9hZGRO
ZXdSdWxlKGV2ZW50KQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9ub2RlU3R5bGVzKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX25vZGVTdHlsZXMuYWRkRW1wdHlSdWxl
KCk7CisgICAgICAgIHRoaXMuX2ZvY3VzTmV4dE5ld0luc3BlY3RvclJ1bGUgPSB0cnVlOworICAg
IH0KKworICAgIF90cmVlRWxlbWVudENoZWNrYm94VG9nZ2xlZChldmVudCkKKyAgICB7CisgICAg
ICAgIHZhciBlbmFibGVkID0gZXZlbnQgJiYgZXZlbnQuZGF0YSAmJiBldmVudC5kYXRhLmVuYWJs
ZWQ7CisgICAgICAgIHZhciBzdHlsZSA9IHRoaXMuY3VycmVudFJ1bGUoKTsKKyAgICAgICAgaWYg
KCFzdHlsZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgdGV4dCA9IHN0eWxl
LnRleHQ7CisgICAgICAgIGlmICghdGV4dCB8fCAhdGV4dC5sZW5ndGgpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgdmFyIHJlcGxhY2VtZW50ID0gIiI7CisgICAgICAgIGlmIChlbmFi
bGVkKQorICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSB0ZXh0LnJlcGxhY2UoL1xzKihcL1wqfFwq
XC8pXHMqL2csICIiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVwbGFjZW1lbnQgPSAi
LyogIiArIHRleHQucmVwbGFjZSgvKFxzKjsoPyEkKVxzKikvZywgIiQxICovLyogIikgKyAiICov
IjsKKworICAgICAgICBzdHlsZS50ZXh0ID0gcmVwbGFjZW1lbnQ7CisgICAgICAgIHN0eWxlW1dl
Ykluc3BlY3Rvci5WaXN1YWxTdHlsZURldGFpbHNQYW5lbC5TdHlsZURpc2FibGVkXSA9ICFlbmFi
bGVkOworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3Iu
VmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24uRXZlbnQuU2VsZWN0b3JDaGFuZ2VkKTsKKworICAg
IH0KKworICAgIF9oYW5kbGVNb3VzZU92ZXIoKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLmNv
bGxhcHNlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgc3R5bGUgPSB0aGlz
LmN1cnJlbnRSdWxlKCk7CisKKyAgICAgICAgaWYgKCFzdHlsZS5vd25lclJ1bGUpIHsKKyAgICAg
ICAgICAgIFdlYkluc3BlY3Rvci5kb21UcmVlTWFuYWdlci5oaWdobGlnaHRET01Ob2RlKHN0eWxl
Lm5vZGUuaWQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgV2Vi
SW5zcGVjdG9yLmRvbVRyZWVNYW5hZ2VyLmhpZ2hsaWdodFNlbGVjdG9yKHN0eWxlLm93bmVyUnVs
ZS5zZWxlY3RvclRleHQsIHN0eWxlLm5vZGUub3duZXJEb2N1bWVudC5mcmFtZUlkZW50aWZpZXIp
OworICAgIH0KKworICAgIF9oYW5kbGVNb3VzZU91dCgpCisgICAgeworICAgICAgICBpZiAoIXRo
aXMuY29sbGFwc2VkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFdlYkluc3BlY3Rv
ci5kb21UcmVlTWFuYWdlci5oaWRlRE9NTm9kZUhpZ2hsaWdodCgpOworICAgIH0KK307CisKK1dl
Ykluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5FdmVudCA9IHsKKyAgICBTZWxl
Y3RvckNoYW5nZWQ6ICJ2aXN1YWwtc3R5bGUtc2VsZWN0b3ItY2hhbmdlZCIKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258460</attachid>
            <date>2015-08-06 23:09:52 -0700</date>
            <delta_ts>2015-08-10 10:58:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147572-20150806230941.patch</filename>
            <type>text/plain</type>
            <size>41585</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDE2YjI3ZTdiYzQyYTU0ZmMyMjRiZjMyODNhMDA5
MDg0ZmRkYzZkMGIuLjI0Zjc4NjZmMWVmOWIxMjI4MTkxOWE2ODhiMmJiZGE2Njc0NjJmNWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkyIEBACisyMDE1LTA4LTA2ICBEZXZp
biBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBB
ZGQgVmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzU3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkc3MgYSBzZWN0aW9uIHRvIHRoZSBuZXcgVmlzdWFsIHN0
eWxlIHNpZGViYXIgcGFuZWwgdGhhdCBjb250YWlucyB0aGUgbGlzdCBvZgorICAgICAgICBzdHls
ZXMgZm9yIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbm9kZS4KKworICAgICAgICAqIFVzZXJJbnRl
cmZhY2UvTW9kZWxzL0NTU1J1bGUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUnVsZS5w
cm90b3R5cGUuZ2V0IG1lZGlhVGV4dCk6CisgICAgICAgIFJldHVybnMgYSBzdHJpbmcgY29udGFp
bmluZyB0aGUgbGlzdCBvZiBtZWRpYSBxdWVyaWVzLgorCisgICAgICAgICogVXNlckludGVyZmFj
ZS9Nb2RlbHMvQ1NTU3R5bGVEZWNsYXJhdGlvbi5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5D
U1NTdHlsZURlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xh
cmF0aW9uLnByb3RvdHlwZS5zZXQgdGV4dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5
bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUucmVzZXRUZXh0KToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZS5nZW5lcmF0ZUNTU1J1bGVTdHJpbmcpOgor
ICAgICAgICBHZW5lcmF0ZXMgYSBmb3JtYXR0ZWQgc3RyaW5nIG9mIHRoZSBzdHlsZSB0ZXh0Lgor
CisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9DU1NTdHlsZURlY2xhcmF0aW9uU2VjdGlv
bi5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uU2VjdGlvbi5w
cm90b3R5cGUuX2hhbmRsZUNvbnRleHRNZW51RXZlbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkNTU1N0eWxlRGVjbGFyYXRpb25TZWN0aW9uLnByb3RvdHlwZS5fZ2VuZXJhdGVDU1NSdWxlU3Ry
aW5nKTogRGVsZXRlZC4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvVmlzdWFsU3R5
bGVTZWxlY3RvclNlY3Rpb24uY3NzOiBBZGRlZC4KKyAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24u
dmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24gPiAuaGVhZGVyKToKKyAgICAgICAgKC5kZXRh
aWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb246bm90KC5jb2xsYXBzZWQp
ID4gLmhlYWRlcik6CisgICAgICAgIChAbWVkaWEgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1y
YXRpbzogMikpOgorICAgICAgICAoLmRldGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0
b3Itc2VjdGlvbiA+IC5oZWFkZXIgPiAuY3VycmVudC1zZWxlY3Rvcik6CisgICAgICAgICgudmlz
dWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24uZGV0YWlscy1zZWN0aW9uOm5vdCguY29sbGFwc2Vk
KSA+IC5oZWFkZXIgPiAuY3VycmVudC1zZWxlY3Rvcik6CisgICAgICAgICguZGV0YWlscy1zZWN0
aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmhlYWRlciA+IC5jdXJyZW50LXNl
bGVjdG9yID4gLmljb24pOgorICAgICAgICAoLmRldGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5bGUt
c2VsZWN0b3Itc2VjdGlvbiA+IC5oZWFkZXIgPiAuY3VycmVudC1zZWxlY3RvciA+IHNwYW4pOgor
ICAgICAgICAoLmRldGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbiA+
IC5oZWFkZXIgPiAuY29udHJvbHMpOgorICAgICAgICAoLmRldGFpbHMtc2VjdGlvbi52aXN1YWwt
c3R5bGUtc2VsZWN0b3Itc2VjdGlvbi5jb2xsYXBzZWQgPiAuaGVhZGVyID4gLmNvbnRyb2xzKToK
KyAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24g
PiAuaGVhZGVyID4gLmNvbnRyb2xzID4gLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uLWFk
ZC1ydWxlKToKKyAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9y
LXNlY3Rpb24gPiAuY29udGVudCA+IC5zZWxlY3RvcnMpOgorICAgICAgICAoLmRldGFpbHMtc2Vj
dGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5jb250ZW50ID4gLnNlbGVjdG9y
cyA+IC5zZWxlY3Rvci1saXN0KToKKyAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0
eWxlLXNlbGVjdG9yLXNlY3Rpb24gPiAuY29udGVudCA+IC5zZWxlY3RvcnMgPiAuc2VsZWN0b3It
bGlzdCA+IC52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbTpudGgtY2hpbGQob2RkKSk6CisgICAg
ICAgICguZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmNv
bnRlbnQgPiAuc2VsZWN0b3JzID4gLnNlbGVjdG9yLWxpc3QgPiAuc2VjdGlvbi1kaXZpZGVyKToK
KyAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24g
PiAuY29udGVudCA+IC5zZWxlY3RvcnMgPiAuc2VsZWN0b3ItbGlzdCA+IC5zZWN0aW9uLWRpdmlk
ZXIgPiAuaWNvbik6CisgICAgICAgICguZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxl
Y3Rvci1zZWN0aW9uID4gLmNvbnRlbnQgPiAuc2VsZWN0b3JzID4gLnNlbGVjdG9yLWxpc3QgPiAu
c2VjdGlvbi1kaXZpZGVyID4gLnRpdGxlcyA+IC50aXRsZSk6CisgICAgICAgICguZGV0YWlscy1z
ZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmNvbnRlbnQgPiAuc2VsZWN0
b3JzID4gLnNlbGVjdG9yLWxpc3QgPiAuc2VjdGlvbi1kaXZpZGVyIH4gLnZpc3VhbC1zdHlsZS1z
ZWxlY3Rvci1pdGVtOm50aC1jaGlsZChldmVuKSk6CisgICAgICAgICguZGV0YWlscy1zZWN0aW9u
LnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmNvbnRlbnQgPiAuc2VsZWN0b3JzID4g
LnNlbGVjdG9yLWxpc3QgPiAuc2VjdGlvbi1kaXZpZGVyIH4gLnZpc3VhbC1zdHlsZS1zZWxlY3Rv
ci1pdGVtOm50aC1jaGlsZChvZGQpKToKKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3Mv
VmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24uanM6IEFkZGVkLgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5W
aXN1YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5wcm90b3R5cGUudXBkYXRlLmNyZWF0ZVNlbGVjdG9y
SXRlbSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24u
cHJvdG90eXBlLnVwZGF0ZS51bmlxdWVPcmRlcmVkUnVsZXMpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLnByb3RvdHlwZS51cGRhdGUuaW5zZXJ0QWxs
TWF0Y2hpbmdQc2V1ZG9SdWxlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVT
ZWxlY3RvclNlY3Rpb24ucHJvdG90eXBlLnVwZGF0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24ucHJvdG90eXBlLmN1cnJlbnRTdHlsZSk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24ucHJvdG90eXBlLl9z
ZWxlY3RvckNoYW5nZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0
b3JTZWN0aW9uLnByb3RvdHlwZS5fc3R5bGVUZXh0UmVzZXQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLnByb3RvdHlwZS5fYWRkTmV3UnVsZSk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24ucHJvdG90eXBl
Ll90cmVlRWxlbWVudENoZWNrYm94VG9nZ2xlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlz
dWFsU3R5bGVTZWxlY3RvclNlY3Rpb24ucHJvdG90eXBlLl9oYW5kbGVNb3VzZU92ZXIpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLnByb3RvdHlwZS5f
aGFuZGxlTW91c2VPdXQpOgorCisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9WaXN1YWxT
dHlsZVNlbGVjdG9yVHJlZUl0ZW0uY3NzOiBBZGRlZC4KKyAgICAgICAgKC5pdGVtLnZpc3VhbC1z
dHlsZS1zZWxlY3Rvci1pdGVtKToKKyAgICAgICAgKC5pdGVtLnZpc3VhbC1zdHlsZS1zZWxlY3Rv
ci1pdGVtLnNlbGVjdGVkKToKKyAgICAgICAgKC5pdGVtLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1p
dGVtID4gLmRpc2Nsb3N1cmUtYnV0dG9uKToKKyAgICAgICAgKC5pdGVtLnZpc3VhbC1zdHlsZS1z
ZWxlY3Rvci1pdGVtID4gaW5wdXRbdHlwZT0iY2hlY2tib3giXSk6CisgICAgICAgICguaXRlbS52
aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbSA+IC5pY29uKToKKyAgICAgICAgKC5pdGVtLnZpc3Vh
bC1zdHlsZS1zZWxlY3Rvci1pdGVtLm1vZGlmaWVkID4gLmljb24pOgorICAgICAgICAoLml0ZW0u
dmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0gPiAudGl0bGVzKToKKyAgICAgICAgKC5pdGVtLnZp
c3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtOm5vdCguZG9tLWVsZW1lbnQtaWNvbikgPiAudGl0bGVz
ID4gLnRpdGxlKToKKyAgICAgICAgKC5pdGVtLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtOm5v
dCguZG9tLWVsZW1lbnQtaWNvbikuZWRpdGFibGUgPiAudGl0bGVzID4gLnRpdGxlKToKKyAgICAg
ICAgKC5pdGVtLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtOm5vdCguZG9tLWVsZW1lbnQtaWNv
bikuZWRpdGFibGUgPiAudGl0bGVzID4gLnRpdGxlOmZvY3VzKToKKyAgICAgICAgKC5pdGVtLnZp
c3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtID4gLnRpdGxlcyA+IC5zdWJ0aXRsZTo6YmVmb3JlKToK
KyAgICAgICAgKC5pdGVtLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtID4gLnRpdGxlcyA+IC5z
dWJ0aXRsZSk6CisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL1Zpc3VhbFN0eWxlU2Vs
ZWN0b3JUcmVlSXRlbS5qczogQWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5
bGVTZWxlY3RvclRyZWVJdGVtKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNl
bGVjdG9yVHJlZUl0ZW0ucHJvdG90eXBlLmdldCBpY29uQ2xhc3NOYW1lKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yVHJlZUl0ZW0ucHJvdG90eXBlLm9uYXR0YWNo
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yVHJlZUl0ZW0ucHJv
dG90eXBlLm9uZGVzZWxlY3QpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2Vs
ZWN0b3JUcmVlSXRlbS5wcm90b3R5cGUuZ2V0IF9zZWxlY3RvclRleHQpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JUcmVlSXRlbS5wcm90b3R5cGUuX2hpZ2hsaWdo
dE5vZGVzV2l0aFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNl
bGVjdG9yVHJlZUl0ZW0ucHJvdG90eXBlLl9oaWRlRE9NTm9kZUhpZ2hsaWdodCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3RvclRyZWVJdGVtLnByb3RvdHlwZS5faGFu
ZGxlQ29udGV4dE1lbnVFdmVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVT
ZWxlY3RvclRyZWVJdGVtLnByb3RvdHlwZS5faGFuZGxlQ2hlY2tib3hDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yVHJlZUl0ZW0ucHJvdG90eXBlLl91
cGRhdGVDaGVja2JveFRpdGxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNl
bGVjdG9yVHJlZUl0ZW0ucHJvdG90eXBlLl9oYW5kbGVNYWluVGl0bGVNb3VzZURvd24pOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JUcmVlSXRlbS5wcm90b3R5cGUu
X2hhbmRsZU1haW5UaXRsZUtleURvd24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlZpc3VhbFN0
eWxlU2VsZWN0b3JUcmVlSXRlbS5wcm90b3R5cGUuX2NvbW1pdFNlbGVjdG9yKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yVHJlZUl0ZW0ucHJvdG90eXBlLl9zdHls
ZVRleHRNb2RpZmllZCk6CisKIDIwMTUtMDgtMDUgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBw
bGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IE1vdmUgdGhlIE1ldHJpY3Mgc3R5bGUg
c2lkZWJhciBwYW5lbCBpbnRvIENvbXB1dGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTUnVsZS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1NSdWxlLmpzCmluZGV4IGE5NGUyN2I1NjY0NjJh
OTBhOWQ0NmM5NTFjOTU2NGQyNzIyNzIyNjguLmYwYWY2YWQ0Mjk4YjZlMzUyYjllMDA3N2E5MTAy
MmMwN2QwMGRiYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL01vZGVscy9DU1NSdWxlLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL01vZGVscy9DU1NSdWxlLmpzCkBAIC0xNzcsNiArMTc3LDE4IEBAIFdlYkluc3BlY3Rv
ci5DU1NSdWxlID0gY2xhc3MgQ1NTUnVsZSBleHRlbmRzIFdlYkluc3BlY3Rvci5PYmplY3QKICAg
ICAgICAgcmV0dXJuIHRoaXMuX21lZGlhTGlzdDsKICAgICB9CiAKKyAgICBnZXQgbWVkaWFUZXh0
KCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fbWVkaWFMaXN0Lmxlbmd0aCkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBsZXQgbWVkaWFUZXh0ID0gIiI7CisgICAgICAgIGZvciAo
bGV0IG1lZGlhIG9mIHRoaXMuX21lZGlhTGlzdCkKKyAgICAgICAgICAgIG1lZGlhVGV4dCArPSBt
ZWRpYS50ZXh0OworCisgICAgICAgIHJldHVybiBtZWRpYVRleHQ7CisgICAgfQorCiAgICAgaXNF
cXVhbFRvKHJ1bGUpCiAgICAgewogICAgICAgICBpZiAoIXJ1bGUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTU3R5bGVEZWNsYXJhdGlv
bi5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1NTdHls
ZURlY2xhcmF0aW9uLmpzCmluZGV4IDk0MDc4Y2ZkMGNjOWJhZDhjNGIwZjMwMWU0NmFhM2VhZWE4
ZGFiZGYuLjQxZmI3NGMyMjFhNmY0MmNkOTk1MmYwMWI2YTAwMWFkMjlkY2I4ODEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1NTdHlsZURl
Y2xhcmF0aW9uLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01v
ZGVscy9DU1NTdHlsZURlY2xhcmF0aW9uLmpzCkBAIC00Myw2ICs0Myw5IEBAIFdlYkluc3BlY3Rv
ci5DU1NTdHlsZURlY2xhcmF0aW9uID0gY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbiBleHRlbmRz
IFdlYkluc3BlY3RvCiAgICAgICAgIHRoaXMuX3BlbmRpbmdQcm9wZXJ0aWVzID0gW107CiAgICAg
ICAgIHRoaXMuX3Byb3BlcnR5TmFtZU1hcCA9IHt9OwogCisgICAgICAgIHRoaXMuX2luaXRpYWxU
ZXh0ID0gdGV4dDsKKyAgICAgICAgdGhpcy5tb2RpZmllZCA9IGZhbHNlOworCiAgICAgICAgIHRo
aXMudXBkYXRlKHRleHQsIHByb3BlcnRpZXMsIHN0eWxlU2hlZXRUZXh0UmFuZ2UsIHRydWUpOwog
ICAgIH0KIApAQCAtMTgzLDkgKzE4NiwyMCBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJh
dGlvbiA9IGNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb24gZXh0ZW5kcyBXZWJJbnNwZWN0bwogICAg
ICAgICBpZiAodGhpcy5fdGV4dCA9PT0gdGV4dCkKICAgICAgICAgICAgIHJldHVybjsKIAorICAg
ICAgICB2YXIgbW9kaWZpZWQgPSB0ZXh0ICE9PSB0aGlzLl9pbml0aWFsVGV4dDsKKyAgICAgICAg
aWYgKG1vZGlmaWVkICE9PSB0aGlzLm1vZGlmaWVkKSB7CisgICAgICAgICAgICB0aGlzLm1vZGlm
aWVkID0gbW9kaWZpZWQ7CisgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVy
cyhXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5FdmVudC5Jbml0aWFsVGV4dE1vZGlm
aWVkKTsKKyAgICAgICAgfQorCiAgICAgICAgIHRoaXMuX25vZGVTdHlsZXMuY2hhbmdlU3R5bGVU
ZXh0KHRoaXMsIHRleHQpOwogICAgIH0KIAorICAgIHJlc2V0VGV4dCgpCisgICAgeworICAgICAg
ICB0aGlzLnRleHQgPSB0aGlzLl9pbml0aWFsVGV4dDsKKyAgICB9CisKICAgICBnZXQgcHJvcGVy
dGllcygpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fcHJvcGVydGllczsKQEAgLTI2MCw2
ICsyNzQsNDMgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24gPSBjbGFzcyBDU1NT
dHlsZURlY2xhcmF0aW9uIGV4dGVuZHMgV2ViSW5zcGVjdG8KICAgICAgICAgcmV0dXJuIG5ld1By
b3BlcnR5OwogICAgIH0KIAorICAgIGdlbmVyYXRlQ1NTUnVsZVN0cmluZygpCisgICAgeworICAg
ICAgICBpZiAoIXRoaXMuX293bmVyUnVsZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBsZXQgc3R5bGVUZXh0ID0gIiI7CisgICAgICAgIGxldCBtZWRpYVF1ZXJpZXNDb3VudCA9IDA7
CisgICAgICAgIGxldCBtZWRpYUxpc3QgPSB0aGlzLl9vd25lclJ1bGUubWVkaWFMaXN0OworICAg
ICAgICBpZiAobWVkaWFMaXN0Lmxlbmd0aCkgeworICAgICAgICAgICAgbWVkaWFRdWVyaWVzQ291
bnQgPSBtZWRpYUxpc3QubGVuZ3RoOworCisgICAgICAgICAgICBmb3IgKGxldCBpID0gbWVkaWFR
dWVyaWVzQ291bnQgLSAxOyBpID49IDA7IC0taSkKKyAgICAgICAgICAgICAgICBzdHlsZVRleHQg
Kz0gIiAgICAiLnJlcGVhdChtZWRpYVF1ZXJpZXNDb3VudCAtIGkgLSAxKSArICJAbWVkaWEgIiAr
IG1lZGlhTGlzdFtpXS50ZXh0ICsgIiB7XG4iOworICAgICAgICB9CisKKyAgICAgICAgc3R5bGVU
ZXh0ICs9ICIgICAgIi5yZXBlYXQobWVkaWFRdWVyaWVzQ291bnQpICsgdGhpcy5fb3duZXJSdWxl
LnNlbGVjdG9yVGV4dCArICIge1xuIjsKKworICAgICAgICBmb3IgKGxldCBwcm9wZXJ0eSBvZiB0
aGlzLl9wcm9wZXJ0aWVzKSB7CisgICAgICAgICAgICBpZiAocHJvcGVydHkuYW5vbnltb3VzKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBzdHlsZVRleHQgKz0gIiAg
ICAiLnJlcGVhdChtZWRpYVF1ZXJpZXNDb3VudCArIDEpICsgcHJvcGVydHkudGV4dC50cmltKCk7
CisKKyAgICAgICAgICAgIGlmICghc3R5bGVUZXh0LmVuZHNXaXRoKCI7IikpCisgICAgICAgICAg
ICAgICAgc3R5bGVUZXh0ICs9ICI7IjsKKworICAgICAgICAgICAgc3R5bGVUZXh0ICs9ICJcbiI7
CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGxldCBpID0gbWVkaWFRdWVyaWVzQ291bnQ7IGkg
PiAwOyAtLWkpCisgICAgICAgICAgICBzdHlsZVRleHQgKz0gIiAgICAiLnJlcGVhdChpKSArICJ9
XG4iOworCisgICAgICAgIHN0eWxlVGV4dCArPSAifSI7CisKKyAgICAgICAgcmV0dXJuIHN0eWxl
VGV4dDsKKyAgICB9CisKICAgICAvLyBQcm90ZWN0ZWQKIAogICAgIGdldCBub2RlU3R5bGVzKCkK
QEAgLTI2OSw3ICszMjAsOCBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbiA9IGNs
YXNzIENTU1N0eWxlRGVjbGFyYXRpb24gZXh0ZW5kcyBXZWJJbnNwZWN0bwogfTsKIAogV2ViSW5z
cGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24uRXZlbnQgPSB7Ci0gICAgUHJvcGVydGllc0NoYW5n
ZWQ6ICJjc3Mtc3R5bGUtZGVjbGFyYXRpb24tcHJvcGVydGllcy1jaGFuZ2VkIgorICAgIFByb3Bl
cnRpZXNDaGFuZ2VkOiAiY3NzLXN0eWxlLWRlY2xhcmF0aW9uLXByb3BlcnRpZXMtY2hhbmdlZCIs
CisgICAgSW5pdGlhbFRleHRNb2RpZmllZDogImNzcy1zdHlsZS1kZWNsYXJhdGlvbi1pbml0aWFs
LXRleHQtbW9kaWZpZWQiCiB9OwogCiBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5U
eXBlID0gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Vmlld3MvQ1NTU3R5bGVEZWNsYXJhdGlvblNlY3Rpb24uanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9WaWV3cy9DU1NTdHlsZURlY2xhcmF0aW9uU2VjdGlvbi5qcwppbmRl
eCBiM2UwZDA3NmNmMWM3MjZiYmQ2MTc3Mjk2NDg5OTY3Y2Y4NzExMjljLi41NmQ5ZDYyZDdjOWY4
ZWI1MDQ0OTMyMDI4OGZmY2U5MTFmNjJjYzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9DU1NTdHlsZURlY2xhcmF0aW9uU2VjdGlvbi5qcwor
KysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9DU1NTdHlsZURl
Y2xhcmF0aW9uU2VjdGlvbi5qcwpAQCAtNDQ5LDQ5ICs0NDksMTIgQEAgV2ViSW5zcGVjdG9yLkNT
U1N0eWxlRGVjbGFyYXRpb25TZWN0aW9uID0gY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvblNlY3Rp
b24gZXh0ZW4KICAgICAgICAgfQogCiAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKCJDb3B5IFJ1bGUiKSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICBJbnNwZWN0b3JGcm9udGVuZEhvc3QuY29weVRleHQodGhpcy5fZ2VuZXJhdGVDU1NSdWxlU3Ry
aW5nKCkpOworICAgICAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNvcHlUZXh0KHRoaXMu
X3N0eWxlLmdlbmVyYXRlQ1NTUnVsZVN0cmluZygpKTsKICAgICAgICAgfS5iaW5kKHRoaXMpKTsK
IAogICAgICAgICBjb250ZXh0TWVudS5zaG93KCk7CiAgICAgfQogCi0gICAgX2dlbmVyYXRlQ1NT
UnVsZVN0cmluZygpCi0gICAgewotICAgICAgICB2YXIgbnVtTWVkaWFRdWVyaWVzID0gMDsKLSAg
ICAgICAgdmFyIHN0eWxlVGV4dCA9ICIiOwotCi0gICAgICAgIGlmICh0aGlzLl9zdHlsZS5vd25l
clJ1bGUpIHsKLSAgICAgICAgICAgIHZhciBtZWRpYUxpc3QgPSB0aGlzLl9zdHlsZS5vd25lclJ1
bGUubWVkaWFMaXN0OwotICAgICAgICAgICAgaWYgKG1lZGlhTGlzdC5sZW5ndGgpIHsKLSAgICAg
ICAgICAgICAgICBudW1NZWRpYVF1ZXJpZXMgPSBtZWRpYUxpc3QubGVuZ3RoOwotCi0gICAgICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IG51bU1lZGlhUXVlcmllcyAtIDE7IGkgPj0gMDsgLS1pKQot
ICAgICAgICAgICAgICAgICAgICBzdHlsZVRleHQgKz0gIiAgICAiLnJlcGVhdChudW1NZWRpYVF1
ZXJpZXMgLSBpIC0gMSkgKyAiQG1lZGlhICIgKyBtZWRpYUxpc3RbaV0udGV4dCArICIge1xuIjsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3R5bGVUZXh0ICs9ICIgICAgIi5yZXBlYXQo
bnVtTWVkaWFRdWVyaWVzKSArIHRoaXMuX3N0eWxlLm93bmVyUnVsZS5zZWxlY3RvclRleHQ7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgc3R5bGVUZXh0ICs9IHRoaXMuX3NlbGVjdG9yRWxl
bWVudC50ZXh0Q29udGVudDsKLQotICAgICAgICBzdHlsZVRleHQgKz0gIiB7XG4iOwotCi0gICAg
ICAgIGZvciAodmFyIHByb3BlcnR5IG9mIHRoaXMuX3N0eWxlLnZpc2libGVQcm9wZXJ0aWVzKSB7
Ci0gICAgICAgICAgICBzdHlsZVRleHQgKz0gIiAgICAiLnJlcGVhdChudW1NZWRpYVF1ZXJpZXMg
KyAxKSArIHByb3BlcnR5LnRleHQudHJpbSgpOwotCi0gICAgICAgICAgICBpZiAoIXN0eWxlVGV4
dC5lbmRzV2l0aCgiOyIpKQotICAgICAgICAgICAgICAgIHN0eWxlVGV4dCArPSAiOyI7Ci0KLSAg
ICAgICAgICAgIHN0eWxlVGV4dCArPSAiXG4iOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yICh2
YXIgaSA9IG51bU1lZGlhUXVlcmllczsgaSA+IDA7IC0taSkKLSAgICAgICAgICAgIHN0eWxlVGV4
dCArPSAiICAgICIucmVwZWF0KGkpICsgIn1cbiI7Ci0KLSAgICAgICAgc3R5bGVUZXh0ICs9ICJ9
IjsKLQotICAgICAgICByZXR1cm4gc3R5bGVUZXh0OwotICAgIH0KLQogICAgIF90b2dnbGVSdWxl
T25PZmYoKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX2hhc0ludmFsaWRTZWxlY3RvcikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Zpc3Vh
bFN0eWxlU2VsZWN0b3JTZWN0aW9uLmNzcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL1ZpZXdzL1Zpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLmNzcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
MWU3OTAwNjNmMjg5MDViNzg2ODEyYTkxMTUwYWU2ODkyNGU5NmFiCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVmlzdWFsU3R5bGVT
ZWxlY3RvclNlY3Rpb24uY3NzCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLmRldGFp
bHMtc2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5oZWFkZXIgeworICAg
IGRpc3BsYXk6IGZsZXg7CisgICAgaGVpZ2h0OiAyMnB4OworfQorCisuZGV0YWlscy1zZWN0aW9u
LnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uOm5vdCguY29sbGFwc2VkKSA+IC5oZWFkZXIg
eworICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBoc2woMCwgMCUsIDcwJSk7Cit9CisKK0Bt
ZWRpYSAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSB7CisgICAgLmRldGFpbHMt
c2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbjpub3QoLmNvbGxhcHNlZCkgPiAu
aGVhZGVyIHsKKyAgICAgICAgYm9yZGVyLXdpZHRoOiAwLjVweCAhaW1wb3J0YW50OworICAgIH0K
K30KKworLmRldGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5o
ZWFkZXIgPiAuY3VycmVudC1zZWxlY3RvciB7CisgICAgd2lkdGg6IGNhbGMoMTAwJSAtIDg1cHgp
OworICAgIG1hcmdpbi1sZWZ0OiAxMHB4OworICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgICAg
d2hpdGUtc3BhY2U6IG5vd3JhcDsKKyAgICBvdmVyZmxvdzogaGlkZGVuOworICAgIHRleHQtb3Zl
cmZsb3c6IGVsbGlwc2lzOworfQorCisudmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24uZGV0
YWlscy1zZWN0aW9uOm5vdCguY29sbGFwc2VkKSA+IC5oZWFkZXIgPiAuY3VycmVudC1zZWxlY3Rv
ciB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworLmRldGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5
bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5oZWFkZXIgPiAuY3VycmVudC1zZWxlY3RvciA+IC5pY29u
IHsKKyAgICB3aWR0aDogMTZweDsKKyAgICBoZWlnaHQ6IDE2cHg7CisgICAgcG9zaXRpb246IGFi
c29sdXRlOworICAgIHRvcDogM3B4OworfQorCisuZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHls
ZS1zZWxlY3Rvci1zZWN0aW9uID4gLmhlYWRlciA+IC5jdXJyZW50LXNlbGVjdG9yID4gc3BhbiB7
CisgICAgbWFyZ2luLWxlZnQ6IDIxcHg7Cit9CisKKy5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0
eWxlLXNlbGVjdG9yLXNlY3Rpb24gPiAuaGVhZGVyID4gLmNvbnRyb2xzIHsKKyAgICBwb3NpdGlv
bjogYWJzb2x1dGU7CisgICAgcmlnaHQ6IDA7CisgICAgdG9wOiAwOworICAgIGJvcmRlci1sZWZ0
OiAxcHggc29saWQgaHNsKDAsIDAlLCA4MyUpOworfQorCisuZGV0YWlscy1zZWN0aW9uLnZpc3Vh
bC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uLmNvbGxhcHNlZCA+IC5oZWFkZXIgPiAuY29udHJvbHMg
eworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKy5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxl
LXNlbGVjdG9yLXNlY3Rpb24gPiAuaGVhZGVyID4gLmNvbnRyb2xzID4gLnZpc3VhbC1zdHlsZS1z
ZWxlY3Rvci1zZWN0aW9uLWFkZC1ydWxlIHsKKyAgICB3aWR0aDogMjNweDsKKyAgICBoZWlnaHQ6
IDIxcHg7CisgICAgcGFkZGluZzogNHB4IDVweDsKKyAgICAtd2Via2l0LWZpbHRlcjogb3BhY2l0
eSgwLjcpOworfQorCisuZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0
aW9uID4gLmNvbnRlbnQgPiAuc2VsZWN0b3JzIHsKKyAgICBtYXgtaGVpZ2h0OiAxMTBweDsKKyAg
ICBvdmVyZmxvdzogYXV0bzsKK30KKworLmRldGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5bGUtc2Vs
ZWN0b3Itc2VjdGlvbiA+IC5jb250ZW50ID4gLnNlbGVjdG9ycyA+IC5zZWxlY3Rvci1saXN0IHsK
KyAgICBtYXJnaW46IDA7CisgICAgcGFkZGluZy1sZWZ0OiAwOworICAgIG91dGxpbmU6IG5vbmU7
Cit9CisKKy5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24gPiAu
Y29udGVudCA+IC5zZWxlY3RvcnMgPiAuc2VsZWN0b3ItbGlzdCA+IC52aXN1YWwtc3R5bGUtc2Vs
ZWN0b3ItaXRlbTpudGgtY2hpbGQob2RkKSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogaHNsKDAs
IDEwMCUsIDEwMCUpOworfQorCisuZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rv
ci1zZWN0aW9uID4gLmNvbnRlbnQgPiAuc2VsZWN0b3JzID4gLnNlbGVjdG9yLWxpc3QgPiAuc2Vj
dGlvbi1kaXZpZGVyIHsKKyAgICBwb3NpdGlvbjogLXdlYmtpdC1zdGlja3k7CisgICAgdG9wOiAt
MXB4OworICAgIGhlaWdodDogMTdweDsKKyAgICBwYWRkaW5nOiAycHg7CisgICAgYmFja2dyb3Vu
ZC1jb2xvcjogaHNsKDAsIDAlLCA5NSUpOworICAgIGJvcmRlci1jb2xvcjogaHNsKDAsIDAlLCA3
MCUpOworICAgIGJvcmRlci1zdHlsZTogc29saWQ7CisgICAgYm9yZGVyLXdpZHRoOiAxcHggMDsK
KyAgICB6LWluZGV4OiAxMDA7Cit9CisKKy5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNl
bGVjdG9yLXNlY3Rpb24gPiAuY29udGVudCA+IC5zZWxlY3RvcnMgPiAuc2VsZWN0b3ItbGlzdCA+
IC5zZWN0aW9uLWRpdmlkZXIgPiAuZGlzY2xvc3VyZS1idXR0b24sCisuZGV0YWlscy1zZWN0aW9u
LnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmNvbnRlbnQgPiAuc2VsZWN0b3JzID4g
LnNlbGVjdG9yLWxpc3QgPiAuc2VjdGlvbi1kaXZpZGVyID4gLmljb24geworICAgIGRpc3BsYXk6
IG5vbmU7Cit9CisKKy5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rp
b24gPiAuY29udGVudCA+IC5zZWxlY3RvcnMgPiAuc2VsZWN0b3ItbGlzdCA+IC5zZWN0aW9uLWRp
dmlkZXIgPiAudGl0bGVzID4gLnRpdGxlIHsKKyAgICBvdmVyZmxvdzogaGlkZGVuOworICAgIHdo
aXRlLXNwYWNlOiBub3dyYXA7CisgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Cit9CisKKy5k
ZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24gPiAuY29udGVudCA+
IC5zZWxlY3RvcnMgPiAuc2VsZWN0b3ItbGlzdCA+IC5zZWN0aW9uLWRpdmlkZXIgfiAudmlzdWFs
LXN0eWxlLXNlbGVjdG9yLWl0ZW06bnRoLWNoaWxkKGV2ZW4pIHsKKyAgICBiYWNrZ3JvdW5kLWNv
bG9yOiBoc2woMCwgMTAwJSwgMTAwJSk7Cit9CisKKy5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0
eWxlLXNlbGVjdG9yLXNlY3Rpb24gPiAuY29udGVudCA+IC5zZWxlY3RvcnMgPiAuc2VsZWN0b3It
bGlzdCA+IC5zZWN0aW9uLWRpdmlkZXIgfiAudmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW06bnRo
LWNoaWxkKG9kZCkgeworICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVmlzdWFs
U3R5bGVTZWxlY3RvclNlY3Rpb24uanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9WaWV3cy9WaXN1YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41M2My
OTVmOWFjZTgwZTAwZTdkNDJhMmQ0Y2FlYjJiMjdiOTQ3ZDhmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVmlzdWFsU3R5bGVTZWxl
Y3RvclNlY3Rpb24uanMKQEAgLTAsMCArMSwzMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVj
dG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uID0gY2xhc3MgVmlzdWFsU3R5bGVTZWxlY3Rv
clNlY3Rpb24gZXh0ZW5kcyBXZWJJbnNwZWN0b3IuRGV0YWlsc1NlY3Rpb24KK3sKKyAgICBjb25z
dHJ1Y3RvcihkZWxlZ2F0ZSkKKyAgICB7CisgICAgICAgIGxldCBzZWxlY3RvclNlY3Rpb24gPSB7
ZWxlbWVudDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iil9OworICAgICAgICBzZWxlY3Rv
clNlY3Rpb24uZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJzZWxlY3RvcnMiKTsKKworICAgICAgICBs
ZXQgY29udHJvbEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAg
ICAgY29udHJvbEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY29udHJvbHMiKTsKKworICAgICAgICBz
dXBlcigidmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24iLCBXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIlN0eWxlIFJ1bGVzIiksIFtzZWxlY3RvclNlY3Rpb25dLCBjb250cm9sRWxlbWVudCk7CisK
KyAgICAgICAgdGhpcy5fZGVsZWdhdGUgPSBkZWxlZ2F0ZSB8fCBudWxsOworICAgICAgICB0aGlz
Ll9ub2RlU3R5bGVzID0gbnVsbDsKKworICAgICAgICB0aGlzLl9jdXJyZW50U2VsZWN0b3JFbGVt
ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgIHRoaXMuX2N1cnJl
bnRTZWxlY3RvckVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY3VycmVudC1zZWxlY3RvciIpOworCisg
ICAgICAgIGxldCBjdXJyZW50U2VsZWN0b3JJY29uRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImltZyIpOworICAgICAgICBjdXJyZW50U2VsZWN0b3JJY29uRWxlbWVudC5jbGFzc0xp
c3QuYWRkKCJpY29uIik7CisgICAgICAgIHRoaXMuX2N1cnJlbnRTZWxlY3RvckVsZW1lbnQuYXBw
ZW5kQ2hpbGQoY3VycmVudFNlbGVjdG9ySWNvbkVsZW1lbnQpOworCisgICAgICAgIHRoaXMuX2N1
cnJlbnRTZWxlY3RvclRleHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAg
ICAgIHRoaXMuX2N1cnJlbnRTZWxlY3RvckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fY3VycmVu
dFNlbGVjdG9yVGV4dCk7CisKKyAgICAgICAgdGhpcy5faGVhZGVyRWxlbWVudC5hcHBlbmRDaGls
ZCh0aGlzLl9jdXJyZW50U2VsZWN0b3JFbGVtZW50KTsKKworICAgICAgICBsZXQgc2VsZWN0b3JM
aXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9sIik7CisgICAgICAgIHNlbGVj
dG9yTGlzdEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgic2VsZWN0b3ItbGlzdCIpOworICAgICAgICBz
ZWxlY3RvclNlY3Rpb24uZWxlbWVudC5hcHBlbmRDaGlsZChzZWxlY3Rvckxpc3RFbGVtZW50KTsK
KworICAgICAgICB0aGlzLl9zZWxlY3RvcnMgPSBuZXcgV2ViSW5zcGVjdG9yLlRyZWVPdXRsaW5l
KHNlbGVjdG9yTGlzdEVsZW1lbnQpOworICAgICAgICB0aGlzLl9zZWxlY3RvcnMub25zZWxlY3Qg
PSB0aGlzLl9zZWxlY3RvckNoYW5nZWQuYmluZCh0aGlzKTsKKyAgICAgICAgdGhpcy5fZm9jdXNO
ZXh0TmV3SW5zcGVjdG9yUnVsZSA9IGZhbHNlOworCisgICAgICAgIHdyYXBwZWRTVkdEb2N1bWVu
dCgiSW1hZ2VzL1BsdXMuc3ZnIiwgInZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uLWFkZC1y
dWxlIiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDbGljayB0byBhZGQgYSBuZXcgcnVsZS4iKSwg
ZnVuY3Rpb24od3JhcHBlcikgeworICAgICAgICAgICAgd3JhcHBlci5hZGRFdmVudExpc3RlbmVy
KCJjbGljayIsIHRoaXMuX2FkZE5ld1J1bGUuYmluZCh0aGlzKSk7CisgICAgICAgICAgICBjb250
cm9sRWxlbWVudC5hcHBlbmRDaGlsZCh3cmFwcGVyKTsKKyAgICAgICAgfS5iaW5kKHRoaXMpKTsK
KworICAgICAgICB0aGlzLl9oZWFkZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3Zl
ciIsIHRoaXMuX2hhbmRsZU1vdXNlT3Zlci5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5faGVh
ZGVyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsIHRoaXMuX2hhbmRsZU1vdXNl
T3V0LmJpbmQodGhpcykpOworICAgIH0KKworICAgIC8vIFB1YmxpYworCisgICAgdXBkYXRlKG5v
ZGVTdHlsZXMpCisgICAgeworICAgICAgICBsZXQgc3R5bGUgPSB0aGlzLmN1cnJlbnRTdHlsZSgp
OworICAgICAgICBpZiAoc3R5bGUpCisgICAgICAgICAgICB0aGlzLl9ub2RlU3R5bGVzW1dlYklu
c3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5MYXN0U2VsZWN0ZWRSdWxlU3ltYm9s
XSA9IHN0eWxlOworCisgICAgICAgIGlmIChub2RlU3R5bGVzKQorICAgICAgICAgICAgdGhpcy5f
bm9kZVN0eWxlcyA9IG5vZGVTdHlsZXM7CisKKyAgICAgICAgaWYgKCF0aGlzLl9ub2RlU3R5bGVz
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX3NlbGVjdG9ycy5yZW1vdmVD
aGlsZHJlbigpOworICAgICAgICBsZXQgcHJldmlvdXNSdWxlID0gbnVsbDsKKworICAgICAgICAv
LyBQc2V1ZG8gU3R5bGVzCisgICAgICAgIGxldCBwc2V1ZG9SdWxlcyA9IFtdOworICAgICAgICBs
ZXQgcHNldWRvRWxlbWVudHMgPSB0aGlzLl9ub2RlU3R5bGVzLnBzZXVkb0VsZW1lbnRzOworICAg
ICAgICBmb3IgKGxldCBwc2V1ZG9JZGVudGlmaWVyIGluIHBzZXVkb0VsZW1lbnRzKQorICAgICAg
ICAgICAgcHNldWRvUnVsZXMgPSBwc2V1ZG9SdWxlcy5jb25jYXQocHNldWRvRWxlbWVudHNbcHNl
dWRvSWRlbnRpZmllcl0ubWF0Y2hlZFJ1bGVzKTsKKworICAgICAgICBsZXQgb3JkZXJlZFBzZXVk
b1J1bGVzID0gdW5pcXVlT3JkZXJlZFJ1bGVzKHBzZXVkb1J1bGVzKTsKKyAgICAgICAgLy8gUmV2
ZXJzZSB0aGUgYXJyYXkgdG8gYWxsb3cgZW5zdXJlIHRoYXQgc3BsaWNpbmcgdGhlIGFycmF5IHdp
bGwgbm90IG1lc3Mgd2l0aCB0aGUgb3JkZXIuCisgICAgICAgIGlmIChvcmRlcmVkUHNldWRvUnVs
ZXMubGVuZ3RoKQorICAgICAgICAgICAgb3JkZXJlZFBzZXVkb1J1bGVzLnJldmVyc2UoKTsKKwor
ICAgICAgICBmdW5jdGlvbiBjcmVhdGVTZWxlY3Rvckl0ZW0oc3R5bGUsIHRpdGxlLCBzdWJ0aXRs
ZSkgeworICAgICAgICAgICAgbGV0IHNlbGVjdG9yID0gbmV3IFdlYkluc3BlY3Rvci5WaXN1YWxT
dHlsZVNlbGVjdG9yVHJlZUl0ZW0oc3R5bGUsIHRpdGxlLCBzdWJ0aXRsZSk7CisgICAgICAgICAg
ICBzZWxlY3Rvci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVj
dG9yVHJlZUl0ZW0uRXZlbnQuU3R5bGVUZXh0UmVzZXQsIHRoaXMuX3N0eWxlVGV4dFJlc2V0LCB0
aGlzKTsKKyAgICAgICAgICAgIHNlbGVjdG9yLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9y
LlZpc3VhbFN0eWxlU2VsZWN0b3JUcmVlSXRlbS5FdmVudC5DaGVja2JveENoYW5nZWQsIHRoaXMu
X3RyZWVFbGVtZW50Q2hlY2tib3hUb2dnbGVkLCB0aGlzKTsKKyAgICAgICAgICAgIHRoaXMuX3Nl
bGVjdG9ycy5hcHBlbmRDaGlsZChzZWxlY3Rvcik7CisKKyAgICAgICAgICAgIGlmICh0aGlzLl9m
b2N1c05leHROZXdJbnNwZWN0b3JSdWxlICYmIHN0eWxlLm93bmVyUnVsZSAmJiBzdHlsZS5vd25l
clJ1bGUudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkNTU1J1bGUuVHlwZS5JbnNwZWN0b3IpIHsKKyAg
ICAgICAgICAgICAgICBzZWxlY3Rvci5zZWxlY3QodHJ1ZSk7CisgICAgICAgICAgICAgICAgc2Vs
ZWN0b3IuZWxlbWVudC5zY3JvbGxJbnRvVmlldygpOworICAgICAgICAgICAgICAgIHRoaXMuX25v
ZGVTdHlsZXNbV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLkxhc3RTZWxl
Y3RlZFJ1bGVTeW1ib2xdID0gc3R5bGU7CisgICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNOZXh0
TmV3SW5zcGVjdG9yUnVsZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRoaXMuX25vZGVTdHlsZXNbV2ViSW5zcGVjdG9y
LlZpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLkxhc3RTZWxlY3RlZFJ1bGVTeW1ib2xdID09PSBz
dHlsZSkgeworICAgICAgICAgICAgICAgIHNlbGVjdG9yLnNlbGVjdCh0cnVlKTsKKyAgICAgICAg
ICAgICAgICBzZWxlY3Rvci5lbGVtZW50LnNjcm9sbEludG9WaWV3KCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB1bmlxdWVPcmRlcmVkUnVsZXMob3JkZXJl
ZFJ1bGVzKQorICAgICAgICB7CisgICAgICAgICAgICBsZXQgdW5pcXVlUnVsZXMgPSBbXTsKKyAg
ICAgICAgICAgIGZvciAobGV0IHJ1bGUgb2Ygb3JkZXJlZFJ1bGVzKSB7CisgICAgICAgICAgICAg
ICAgbGV0IGZvdW5kID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZm9yIChsZXQgZXhpc3RpbmdS
dWxlIG9mIHVuaXF1ZVJ1bGVzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghcnVsZS5pc0Vx
dWFsVG8oZXhpc3RpbmdSdWxlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGZvdW5kKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIHVuaXF1ZVJ1
bGVzLnB1c2gocnVsZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB1bmlx
dWVSdWxlczsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGluc2VydEFsbE1hdGNoaW5n
UHNldWRvUnVsZXMoZm9yY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghb3JkZXJlZFBz
ZXVkb1J1bGVzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAg
IGlmIChmb3JjZSkgeworICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBvcmRlcmVkUHNldWRv
UnVsZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgICAgICAgICAgICAgbGV0
IHBzZXVkb1J1bGUgPSBvcmRlcmVkUHNldWRvUnVsZXNbaV07CisgICAgICAgICAgICAgICAgICAg
IGNyZWF0ZVNlbGVjdG9ySXRlbS5jYWxsKHRoaXMsIHBzZXVkb1J1bGUuc3R5bGUsIHBzZXVkb1J1
bGUuc2VsZWN0b3JUZXh0LCBwc2V1ZG9SdWxlLm1lZGlhVGV4dCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIG9yZGVyZWRQc2V1ZG9SdWxlcyA9IFtdOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIXByZXZpb3VzUnVsZSkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSBvcmRlcmVkUHNldWRvUnVsZXMubGVuZ3Ro
IC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgICAgICAgICBsZXQgcHNldWRvUnVsZSA9IG9y
ZGVyZWRQc2V1ZG9SdWxlc1tpXTsKKyAgICAgICAgICAgICAgICBpZiAoIXBzZXVkb1J1bGUuc2Vs
ZWN0b3JJc0dyZWF0ZXIocHJldmlvdXNSdWxlLm1vc3RTcGVjaWZpY1NlbGVjdG9yKSkKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBjcmVhdGVTZWxlY3Rv
ckl0ZW0uY2FsbCh0aGlzLCBwc2V1ZG9SdWxlLnN0eWxlLCBwc2V1ZG9SdWxlLnNlbGVjdG9yVGV4
dCwgcHNldWRvUnVsZS5tZWRpYVRleHQpOworICAgICAgICAgICAgICAgIHByZXZpb3VzUnVsZSA9
IHBzZXVkb1J1bGU7CisgICAgICAgICAgICAgICAgb3JkZXJlZFBzZXVkb1J1bGVzLnNwbGljZShp
LCAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghdGhpcy5fbm9k
ZVN0eWxlc1tXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24uTGFzdFNlbGVj
dGVkUnVsZVN5bWJvbF0pCisgICAgICAgICAgICB0aGlzLl9ub2RlU3R5bGVzW1dlYkluc3BlY3Rv
ci5WaXN1YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5MYXN0U2VsZWN0ZWRSdWxlU3ltYm9sXSA9IHRo
aXMuX25vZGVTdHlsZXMuaW5saW5lU3R5bGU7CisKKyAgICAgICAgLy8gSW5saW5lIFN0eWxlCisg
ICAgICAgIGNyZWF0ZVNlbGVjdG9ySXRlbS5jYWxsKHRoaXMsIHRoaXMuX25vZGVTdHlsZXMuaW5s
aW5lU3R5bGUsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiVGhpcyBFbGVtZW50IikpOworCisgICAg
ICAgIC8vIE1hdGNoZWQgUnVsZXMKKyAgICAgICAgZm9yIChsZXQgcnVsZSBvZiB1bmlxdWVPcmRl
cmVkUnVsZXModGhpcy5fbm9kZVN0eWxlcy5tYXRjaGVkUnVsZXMpKSB7CisgICAgICAgICAgICBp
ZiAocnVsZS50eXBlID09PSBXZWJJbnNwZWN0b3IuQ1NTUnVsZS5UeXBlLlVzZXJBZ2VudCkgewor
ICAgICAgICAgICAgICAgIGluc2VydEFsbE1hdGNoaW5nUHNldWRvUnVsZXMuY2FsbCh0aGlzLCB0
cnVlKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaW5zZXJ0QWxsTWF0Y2hpbmdQc2V1ZG9SdWxlcy5jYWxsKHRoaXMpOworICAgICAgICAg
ICAgY3JlYXRlU2VsZWN0b3JJdGVtLmNhbGwodGhpcywgcnVsZS5zdHlsZSwgcnVsZS5zZWxlY3Rv
clRleHQsIHJ1bGUubWVkaWFUZXh0KTsKKyAgICAgICAgICAgIHByZXZpb3VzUnVsZSA9IHJ1bGU7
CisgICAgICAgIH0KKworICAgICAgICAvLyBKdXN0IGluIGNhc2UgdGhlcmUgYXJlIGFueSByZW1h
aW5pbmcgcHNldWRvLXN0eWxlcy4KKyAgICAgICAgaW5zZXJ0QWxsTWF0Y2hpbmdQc2V1ZG9SdWxl
cy5jYWxsKHRoaXMsIHRydWUpOworCisgICAgICAgIC8vIEluaGVyaXRlZCBSdWxlcworICAgICAg
ICBmb3IgKGxldCBpbmhlcml0ZWQgb2YgdGhpcy5fbm9kZVN0eWxlcy5pbmhlcml0ZWRSdWxlcykg
eworICAgICAgICAgICAgaWYgKCFpbmhlcml0ZWQubWF0Y2hlZFJ1bGVzIHx8ICFpbmhlcml0ZWQu
bWF0Y2hlZFJ1bGVzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgbGV0IGRpdmlkZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkdlbmVyYWxUcmVlRWxlbWVudCgi
c2VjdGlvbi1kaXZpZGVyIiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJJbmhlcml0ZWQgZnJvbSAl
cyIpLmZvcm1hdChXZWJJbnNwZWN0b3IuZGlzcGxheU5hbWVGb3JOb2RlKGluaGVyaXRlZC5ub2Rl
KSkpOworICAgICAgICAgICAgZGl2aWRlci5zZWxlY3RhYmxlID0gZmFsc2U7CisgICAgICAgICAg
ICB0aGlzLl9zZWxlY3RvcnMuYXBwZW5kQ2hpbGQoZGl2aWRlcik7CisKKyAgICAgICAgICAgIGZv
ciAobGV0IHJ1bGUgb2YgdW5pcXVlT3JkZXJlZFJ1bGVzKGluaGVyaXRlZC5tYXRjaGVkUnVsZXMp
KSB7CisgICAgICAgICAgICAgICAgaWYgKHJ1bGUudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkNTU1J1
bGUuVHlwZS5Vc2VyQWdlbnQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgICAgICAgICAgY3JlYXRlU2VsZWN0b3JJdGVtLmNhbGwodGhpcywgcnVsZS5zdHlsZSwgcnVs
ZS5zZWxlY3RvclRleHQsIHJ1bGUubWVkaWFUZXh0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIHRoaXMuX2ZvY3VzTmV4dE5ld0luc3BlY3RvclJ1bGUgPSBmYWxzZTsKKyAg
ICB9CisKKyAgICBjdXJyZW50U3R5bGUoKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9ub2Rl
U3R5bGVzIHx8ICF0aGlzLl9zZWxlY3RvcnMuc2VsZWN0ZWRUcmVlRWxlbWVudCkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0b3JzLnNlbGVjdGVkVHJl
ZUVsZW1lbnQucmVwcmVzZW50ZWRPYmplY3Q7CisgICAgfQorCisgICAgLy8gUHJpdmF0ZQorCisg
ICAgX3NlbGVjdG9yQ2hhbmdlZChzZWxlY3RlZFRyZWVFbGVtZW50KQorICAgIHsKKyAgICAgICAg
Y29uc29sZS5hc3NlcnQoc2VsZWN0ZWRUcmVlRWxlbWVudCk7CisgICAgICAgIGlmICghc2VsZWN0
ZWRUcmVlRWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLl9jdXJy
ZW50U2VsZWN0b3JFbGVtZW50LmNsYXNzTmFtZSA9ICJjdXJyZW50LXNlbGVjdG9yICIgKyBzZWxl
Y3RlZFRyZWVFbGVtZW50Lmljb25DbGFzc05hbWU7CisKKyAgICAgICAgbGV0IHNlbGVjdG9yVGV4
dCA9IHNlbGVjdGVkVHJlZUVsZW1lbnQubWFpblRpdGxlOworICAgICAgICBsZXQgbWVkaWFUZXh0
ID0gc2VsZWN0ZWRUcmVlRWxlbWVudC5zdWJ0aXRsZTsKKyAgICAgICAgaWYgKG1lZGlhVGV4dCAm
JiBtZWRpYVRleHQubGVuZ3RoKQorICAgICAgICAgICAgc2VsZWN0b3JUZXh0ICs9ICIgXHUyMDE0
ICIgKyBtZWRpYVRleHQ7CisKKyAgICAgICAgdGhpcy5fY3VycmVudFNlbGVjdG9yVGV4dC50ZXh0
Q29udGVudCA9IHNlbGVjdG9yVGV4dDsKKworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xp
c3RlbmVycyhXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24uRXZlbnQuU2Vs
ZWN0b3JDaGFuZ2VkKTsKKyAgICB9CisKKyAgICBfc3R5bGVUZXh0UmVzZXQoKQorICAgIHsKKyAg
ICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlZpc3VhbFN0
eWxlU2VsZWN0b3JTZWN0aW9uLkV2ZW50LlNlbGVjdG9yQ2hhbmdlZCk7CisgICAgfQorCisgICAg
X2FkZE5ld1J1bGUoZXZlbnQpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX25vZGVTdHlsZXMp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy5fbm9kZVN0eWxlcy5hZGRFbXB0
eVJ1bGUoKTsKKyAgICAgICAgdGhpcy5fZm9jdXNOZXh0TmV3SW5zcGVjdG9yUnVsZSA9IHRydWU7
CisgICAgfQorCisgICAgX3RyZWVFbGVtZW50Q2hlY2tib3hUb2dnbGVkKGV2ZW50KQorICAgIHsK
KyAgICAgICAgbGV0IHN0eWxlRW5hYmxlZCA9IGV2ZW50ICYmIGV2ZW50LmRhdGEgJiYgZXZlbnQu
ZGF0YS5lbmFibGVkOworICAgICAgICBsZXQgc3R5bGUgPSB0aGlzLmN1cnJlbnRTdHlsZSgpOwor
ICAgICAgICBpZiAoIXN0eWxlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGxldCBz
dHlsZVRleHQgPSBzdHlsZS50ZXh0OworICAgICAgICBpZiAoIXN0eWxlVGV4dCB8fCAhc3R5bGVU
ZXh0Lmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBDb21tZW50IG9y
IHVuY29tbWVudCB0aGUgc3R5bGUgdGV4dC4KKyAgICAgICAgbGV0IG5ld1N0eWxlVGV4dCA9ICIi
OworICAgICAgICBpZiAoc3R5bGVFbmFibGVkKQorICAgICAgICAgICAgbmV3U3R5bGVUZXh0ID0g
c3R5bGVUZXh0LnJlcGxhY2UoL1xzKihcL1wqfFwqXC8pXHMqL2csICIiKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbmV3U3R5bGVUZXh0ID0gIi8qICIgKyBzdHlsZVRleHQucmVwbGFjZSgv
KFxzKjsoPyEkKVxzKikvZywgIiQxICovLyogIikgKyAiICovIjsKKworICAgICAgICBzdHlsZS50
ZXh0ID0gbmV3U3R5bGVUZXh0OworICAgICAgICBzdHlsZVtXZWJJbnNwZWN0b3IuVmlzdWFsU3R5
bGVEZXRhaWxzUGFuZWwuU3R5bGVEaXNhYmxlZFN5bWJvbF0gPSAhc3R5bGVFbmFibGVkOworICAg
ICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuVmlzdWFsU3R5
bGVTZWxlY3RvclNlY3Rpb24uRXZlbnQuU2VsZWN0b3JDaGFuZ2VkKTsKKworICAgIH0KKworICAg
IF9oYW5kbGVNb3VzZU92ZXIoKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLmNvbGxhcHNlZCkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBsZXQgc3R5bGUgPSB0aGlzLmN1cnJlbnRT
dHlsZSgpOworICAgICAgICBpZiAoIXN0eWxlLm93bmVyUnVsZSkgeworICAgICAgICAgICAgV2Vi
SW5zcGVjdG9yLmRvbVRyZWVNYW5hZ2VyLmhpZ2hsaWdodERPTU5vZGUoc3R5bGUubm9kZS5pZCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBXZWJJbnNwZWN0b3Iu
ZG9tVHJlZU1hbmFnZXIuaGlnaGxpZ2h0U2VsZWN0b3Ioc3R5bGUub3duZXJSdWxlLnNlbGVjdG9y
VGV4dCwgc3R5bGUubm9kZS5vd25lckRvY3VtZW50LmZyYW1lSWRlbnRpZmllcik7CisgICAgfQor
CisgICAgX2hhbmRsZU1vdXNlT3V0KCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5jb2xsYXBz
ZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgV2ViSW5zcGVjdG9yLmRvbVRyZWVN
YW5hZ2VyLmhpZGVET01Ob2RlSGlnaGxpZ2h0KCk7CisgICAgfQorfTsKKworV2ViSW5zcGVjdG9y
LlZpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLkxhc3RTZWxlY3RlZFJ1bGVTeW1ib2wgPSBTeW1i
b2woInZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uLWxhc3Qtc2VsZWN0ZWQtcnVsZSIpOwor
CitXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24uRXZlbnQgPSB7CisgICAg
U2VsZWN0b3JDaGFuZ2VkOiAidmlzdWFsLXN0eWxlLXNlbGVjdG9yLWNoYW5nZWQiCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9WaXN1YWxT
dHlsZVNlbGVjdG9yVHJlZUl0ZW0uY3NzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvVmlld3MvVmlzdWFsU3R5bGVTZWxlY3RvclRyZWVJdGVtLmNzcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5l
NDU4ZGVjYmNlMzY0Y2I0MDNjODNlZjQ1MGY5MWVkNjcxNDJmYmI2Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVmlzdWFsU3R5bGVT
ZWxlY3RvclRyZWVJdGVtLmNzcwpAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLml0ZW0u
dmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0geworICAgIGRpc3BsYXk6IGZsZXg7CisgICAgd2lk
dGg6IDEwMCU7CisgICAgaGVpZ2h0OiAyNXB4OworICAgIHBhZGRpbmc6IDJweCAwOworICAgIGxp
bmUtaGVpZ2h0OiAyMHB4OworICAgIGZvbnQtc2l6ZTogMTFweDsKK30KKworLml0ZW0udmlzdWFs
LXN0eWxlLXNlbGVjdG9yLWl0ZW0uc2VsZWN0ZWQgeworICAgIGJhY2tncm91bmQtY29sb3I6IGhz
bCgyMTMsIDkyJSwgNTUlKSAhaW1wb3J0YW50OworICAgIGNvbG9yOiBoc2woMCwgMTAwJSwgMTAw
JSk7Cit9CisKKy5pdGVtLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtID4gLmRpc2Nsb3N1cmUt
YnV0dG9uIHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisuaXRlbS52aXN1YWwtc3R5bGUtc2Vs
ZWN0b3ItaXRlbSA+IGlucHV0W3R5cGU9ImNoZWNrYm94Il0geworICAgIG1hcmdpbjogNC41cHgg
MCA0cHggNXB4OworfQorCisuaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbSA+IC5pY29u
IHsKKyAgICB3aWR0aDogMTZweDsKKyAgICBoZWlnaHQ6IDE2cHg7CisgICAgbWFyZ2luOiAyLjVw
eCAwIDIuNXB4IDRweDsKK30KKworLml0ZW0udmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0ubW9k
aWZpZWQgPiAuaWNvbiB7CisgICAgLXdlYmtpdC1maWx0ZXI6IGJyaWdodG5lc3MoMC43NSk7Cit9
CisKKy5pdGVtLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtID4gLnRpdGxlcyB7CisgICAgb3Zl
cmZsb3c6IGhpZGRlbjsKKyAgICB3aGl0ZS1zcGFjZTogbm93cmFwOworICAgIHRleHQtb3ZlcmZs
b3c6IGVsbGlwc2lzOworICAgIHBhZGRpbmc6IDAgMnB4IDAgM3B4OworfQorCisuaXRlbS52aXN1
YWwtc3R5bGUtc2VsZWN0b3ItaXRlbTpub3QoLmRvbS1lbGVtZW50LWljb24pID4gLnRpdGxlcyA+
IC50aXRsZSB7CisgICAgcGFkZGluZzogMCAxcHggMnB4OworICAgIGxpbmUtaGVpZ2h0OiAxMnB4
OworICAgIG91dGxpbmU6IG5vbmU7Cit9CisKKy5pdGVtLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1p
dGVtOm5vdCguZG9tLWVsZW1lbnQtaWNvbikuZWRpdGFibGUgPiAudGl0bGVzID4gLnRpdGxlIHsK
KyAgICBjdXJzb3I6IHRleHQ7CisgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogdGV4dDsKKyAgICAt
d2Via2l0LXVzZXItbW9kaWZ5OiByZWFkLXdyaXRlLXBsYWludGV4dC1vbmx5OworfQorCisuaXRl
bS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbTpub3QoLmRvbS1lbGVtZW50LWljb24pLmVkaXRh
YmxlID4gLnRpdGxlcyA+IC50aXRsZTpmb2N1cyB7CisgICAgY29sb3I6IGJsYWNrOworICAgIGJh
Y2tncm91bmQtY29sb3I6IGhzbCgwLCAxMDAlLCAxMDAlKTsKKyAgICBib3JkZXItcmFkaXVzOiAy
cHg7CisgICAgYm94LXNoYWRvdzogaHNsYSgwLCAwJSwgMCUsIDAuMTUpIDAgMXB4IDAsIDAgMCAw
IDNweCBoc2xhKDAsIDEwMCUsIDEwMCUsIDAuMyk7Cit9CisKKy5pdGVtLnZpc3VhbC1zdHlsZS1z
ZWxlY3Rvci1pdGVtID4gLnRpdGxlcyA+IC5zdWJ0aXRsZTo6YmVmb3JlIHsKKyAgICBtYXJnaW4t
cmlnaHQ6IDVweDsKKyAgICBmb250LXNpemU6IDExcHg7CisgICAgLyogVGhlIGV4dHJhIHNwYWNl
IGF0IHRoZSBiZWdpbm5pbmcgaXMgbmVjZXNzYXJ5IHRvIHByZXZlbnQgdGhlIC13ZWJraXQtdXNl
ci1tb2RpZnkKKyAgICBjdXJzb3IgYmFyIGZyb20gZGlzcGxheWluZyBhdCB0aGUgYmVnaW5uaW5n
IG9mIHRoZSBlbS1kYXNoLiAqLworICAgIGNvbnRlbnQ6ICIgXDIwMTQiOyAvKiBlbS1kYXNoICov
Cit9CisKKy5pdGVtLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtID4gLnRpdGxlcyA+IC5zdWJ0
aXRsZSB7CisgICAgZm9udC1zaXplOiA5cHg7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9WaXN1YWxTdHlsZVNlbGVjdG9yVHJlZUl0ZW0u
anMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9WaXN1YWxTdHls
ZVNlbGVjdG9yVHJlZUl0ZW0uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzczYjJhZmI1YzIzYjBkODEzOTRhMGI4
N2M0NDY4YTA1YWYxNzIxNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Zpc3VhbFN0eWxlU2VsZWN0b3JUcmVlSXRlbS5qcwpAQCAt
MCwwICsxLDE5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVj
dG9yVHJlZUl0ZW0gPSBjbGFzcyBWaXN1YWxTdHlsZVNlbGVjdG9yVHJlZUl0ZW0gZXh0ZW5kcyBX
ZWJJbnNwZWN0b3IuR2VuZXJhbFRyZWVFbGVtZW50Cit7CisgICAgY29uc3RydWN0b3Ioc3R5bGUs
IHRpdGxlLCBzdWJ0aXRsZSkKKyAgICB7CisgICAgICAgIGxldCBpY29uQ2xhc3NOYW1lOworICAg
ICAgICBzd2l0Y2ggKHN0eWxlLnR5cGUpIHsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ1NT
U3R5bGVEZWNsYXJhdGlvbi5UeXBlLlJ1bGU6CisgICAgICAgICAgICBjb25zb2xlLmFzc2VydChz
dHlsZS5vd25lclJ1bGUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuQ1NTUnVsZSk7CisKKyAgICAg
ICAgICAgIGlmIChzdHlsZS5pbmhlcml0ZWQpCisgICAgICAgICAgICAgICAgaWNvbkNsYXNzTmFt
ZSA9IFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uU2VjdGlvbi5Jbmhlcml0ZWRTdHls
ZVJ1bGVJY29uU3R5bGVDbGFzc05hbWU7CisgICAgICAgICAgICBlbHNlIGlmIChzdHlsZS5vd25l
clJ1bGUudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkNTU1J1bGUuVHlwZS5BdXRob3IpCisgICAgICAg
ICAgICAgICAgaWNvbkNsYXNzTmFtZSA9IFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9u
U2VjdGlvbi5BdXRob3JTdHlsZVJ1bGVJY29uU3R5bGVDbGFzc05hbWU7CisgICAgICAgICAgICBl
bHNlIGlmIChzdHlsZS5vd25lclJ1bGUudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkNTU1J1bGUuVHlw
ZS5Vc2VyKQorICAgICAgICAgICAgICAgIGljb25DbGFzc05hbWUgPSBXZWJJbnNwZWN0b3IuQ1NT
U3R5bGVEZWNsYXJhdGlvblNlY3Rpb24uVXNlclN0eWxlUnVsZUljb25TdHlsZUNsYXNzTmFtZTsK
KyAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLm93bmVyUnVsZS50eXBlID09PSBXZWJJbnNwZWN0
b3IuQ1NTUnVsZS5UeXBlLlVzZXJBZ2VudCkKKyAgICAgICAgICAgICAgICBpY29uQ2xhc3NOYW1l
ID0gV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25TZWN0aW9uLlVzZXJBZ2VudFN0eWxl
UnVsZUljb25TdHlsZUNsYXNzTmFtZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLm93bmVy
UnVsZS50eXBlID09PSBXZWJJbnNwZWN0b3IuQ1NTUnVsZS5UeXBlLkluc3BlY3RvcikKKyAgICAg
ICAgICAgICAgICBpY29uQ2xhc3NOYW1lID0gV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRp
b25TZWN0aW9uLkluc3BlY3RvclN0eWxlUnVsZUljb25TdHlsZUNsYXNzTmFtZTsKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRp
b24uVHlwZS5JbmxpbmU6CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFy
YXRpb24uVHlwZS5BdHRyaWJ1dGU6CisgICAgICAgICAgICBpZiAoc3R5bGUuaW5oZXJpdGVkKQor
ICAgICAgICAgICAgICAgIGljb25DbGFzc05hbWUgPSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNs
YXJhdGlvblNlY3Rpb24uSW5oZXJpdGVkRWxlbWVudFN0eWxlUnVsZUljb25TdHlsZUNsYXNzTmFt
ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpY29uQ2xhc3NOYW1lID0gV2Vi
SW5zcGVjdG9yLkRPTVRyZWVFbGVtZW50UGF0aENvbXBvbmVudC5ET01FbGVtZW50SWNvblN0eWxl
Q2xhc3NOYW1lOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICB0aXRs
ZSA9IHRpdGxlLnRyaW0oKTsKKworICAgICAgICBzdXBlcihbInZpc3VhbC1zdHlsZS1zZWxlY3Rv
ci1pdGVtIiwgaWNvbkNsYXNzTmFtZV0sIHRpdGxlLCBzdWJ0aXRsZSwgc3R5bGUpOworCisgICAg
ICAgIHRoaXMuX2ljb25DbGFzc05hbWUgPSBpY29uQ2xhc3NOYW1lOworICAgICAgICB0aGlzLl9s
YXN0VmFsdWUgPSB0aXRsZTsKKyAgICAgICAgdGhpcy5fZW5hYmxlRWRpdGluZyA9IHRydWU7Cisg
ICAgfQorCisgICAgLy8gUHVibGljCisKKyAgICBnZXQgaWNvbkNsYXNzTmFtZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gdGhpcy5faWNvbkNsYXNzTmFtZTsKKyAgICB9CisKKyAgICAvLyBPdmVy
cmlkZXMgZnJvbSBUcmVlRWxlbWVudCAoUHJpdmF0ZSkKKworICAgIG9uYXR0YWNoKCkKKyAgICB7
CisgICAgICAgIHN1cGVyLm9uYXR0YWNoKCk7CisKKyAgICAgICAgdGhpcy5fbGlzdEl0ZW1Ob2Rl
LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsIHRoaXMuX2hpZ2hsaWdodE5vZGVzV2l0aFNl
bGVjdG9yLmJpbmQodGhpcykpOworICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUuYWRkRXZlbnRM
aXN0ZW5lcigibW91c2VvdXQiLCB0aGlzLl9oaWRlRE9NTm9kZUhpZ2hsaWdodC5iaW5kKHRoaXMp
KTsKKyAgICAgICAgdGhpcy5fbGlzdEl0ZW1Ob2RlLmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRt
ZW51IiwgdGhpcy5faGFuZGxlQ29udGV4dE1lbnVFdmVudC5iaW5kKHRoaXMpKTsKKworICAgICAg
ICB0aGlzLl9jaGVja2JveEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIp
OworICAgICAgICB0aGlzLl9jaGVja2JveEVsZW1lbnQudHlwZSA9ICJjaGVja2JveCI7CisgICAg
ICAgIHRoaXMuX2NoZWNrYm94RWxlbWVudC5jaGVja2VkID0gIXRoaXMucmVwcmVzZW50ZWRPYmpl
Y3RbV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlRGV0YWlsc1BhbmVsLlN0eWxlRGlzYWJsZWRTeW1i
b2xdOworICAgICAgICB0aGlzLl91cGRhdGVDaGVja2JveFRpdGxlKCk7CisgICAgICAgIHRoaXMu
X2NoZWNrYm94RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCB0aGlzLl9oYW5kbGVD
aGVja2JveENoYW5nZWQuYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX2xpc3RJdGVtTm9kZS5p
bnNlcnRCZWZvcmUodGhpcy5fY2hlY2tib3hFbGVtZW50LCB0aGlzLl9pY29uRWxlbWVudCk7CisK
KyAgICAgICAgdGhpcy5fbWFpblRpdGxlRWxlbWVudC5zcGVsbGNoZWNrID0gZmFsc2U7CisgICAg
ICAgIHRoaXMuX21haW5UaXRsZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwg
dGhpcy5faGFuZGxlTWFpblRpdGxlTW91c2VEb3duLmJpbmQodGhpcykpOworICAgICAgICB0aGlz
Ll9tYWluVGl0bGVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLl9oYW5k
bGVNYWluVGl0bGVLZXlEb3duLmJpbmQodGhpcykpOworICAgICAgICB0aGlzLl9tYWluVGl0bGVF
bGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIiwgdGhpcy5faGlnaGxpZ2h0Tm9kZXNXaXRo
U2VsZWN0b3IuYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX21haW5UaXRsZUVsZW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcigiYmx1ciIsIHRoaXMuX2NvbW1pdFNlbGVjdG9yLmJpbmQodGhpcykpOwor
CisgICAgICAgIHRoaXMucmVwcmVzZW50ZWRPYmplY3QuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNw
ZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5FdmVudC5Jbml0aWFsVGV4dE1vZGlmaWVkLCB0aGlz
Ll9zdHlsZVRleHRNb2RpZmllZCwgdGhpcyk7CisgICAgICAgIHRoaXMuX3N0eWxlVGV4dE1vZGlm
aWVkKCk7CisgICAgfQorCisgICAgb25kZXNlbGVjdCgpCisgICAgeworICAgICAgICB0aGlzLl9s
aXN0SXRlbU5vZGUuY2xhc3NMaXN0LnJlbW92ZSgiZWRpdGFibGUiKTsKKyAgICB9CisKKyAgICAv
LyBQcml2YXRlCisKKyAgICBnZXQgX3NlbGVjdG9yVGV4dCgpCisgICAgeworICAgICAgICBsZXQg
dGl0bGVUZXh0ID0gdGhpcy5fbWFpblRpdGxlRWxlbWVudC50ZXh0Q29udGVudDsKKyAgICAgICAg
aWYgKCF0aXRsZVRleHQgfHwgIXRpdGxlVGV4dC5sZW5ndGgpCisgICAgICAgICAgICB0aXRsZVRl
eHQgPSB0aGlzLl9tYWluVGl0bGU7CisKKyAgICAgICAgcmV0dXJuIHRpdGxlVGV4dC50cmltKCk7
CisgICAgfQorCisgICAgX2hpZ2hsaWdodE5vZGVzV2l0aFNlbGVjdG9yKCkKKyAgICB7CisgICAg
ICAgIGlmICghdGhpcy5yZXByZXNlbnRlZE9iamVjdC5vd25lclJ1bGUpIHsKKyAgICAgICAgICAg
IFdlYkluc3BlY3Rvci5kb21UcmVlTWFuYWdlci5oaWdobGlnaHRET01Ob2RlKHRoaXMucmVwcmVz
ZW50ZWRPYmplY3Qubm9kZS5pZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBXZWJJbnNwZWN0b3IuZG9tVHJlZU1hbmFnZXIuaGlnaGxpZ2h0U2VsZWN0b3IodGhp
cy5fc2VsZWN0b3JUZXh0LCB0aGlzLnJlcHJlc2VudGVkT2JqZWN0Lm5vZGUub3duZXJEb2N1bWVu
dC5mcmFtZUlkZW50aWZpZXIpOworICAgIH0KKworICAgIF9oaWRlRE9NTm9kZUhpZ2hsaWdodCgp
CisgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IuZG9tVHJlZU1hbmFnZXIuaGlkZURPTU5vZGVI
aWdobGlnaHQoKTsKKyAgICB9CisKKyAgICBfaGFuZGxlQ29udGV4dE1lbnVFdmVudChldmVudCkK
KyAgICB7CisgICAgICAgIGxldCBjb250ZXh0TWVudSA9IG5ldyBXZWJJbnNwZWN0b3IuQ29udGV4
dE1lbnUoZXZlbnQpOworCisgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKCJDb3B5IFJ1bGUiKSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBJbnNw
ZWN0b3JGcm9udGVuZEhvc3QuY29weVRleHQodGhpcy5yZXByZXNlbnRlZE9iamVjdC5nZW5lcmF0
ZUNTU1J1bGVTdHJpbmcoKSk7CisgICAgICAgIH0uYmluZCh0aGlzKSk7CisKKyAgICAgICAgY29u
dGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJlc2V0IiksIGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgdGhpcy5yZXByZXNlbnRlZE9iamVjdC5yZXNldFRleHQoKTsK
KyAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5W
aXN1YWxTdHlsZVNlbGVjdG9yVHJlZUl0ZW0uRXZlbnQuU3R5bGVUZXh0UmVzZXQpOworICAgICAg
ICB9LmJpbmQodGhpcykpOworCisgICAgICAgIGNvbnRleHRNZW51LnNob3coKTsKKyAgICB9CisK
KyAgICBfaGFuZGxlQ2hlY2tib3hDaGFuZ2VkKGV2ZW50KQorICAgIHsKKyAgICAgICAgdGhpcy5f
dXBkYXRlQ2hlY2tib3hUaXRsZSgpOworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3Rl
bmVycyhXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3RvclRyZWVJdGVtLkV2ZW50LkNoZWNr
Ym94Q2hhbmdlZCwge2VuYWJsZWQ6IHRoaXMuX2NoZWNrYm94RWxlbWVudC5jaGVja2VkfSk7Cisg
ICAgfQorCisgICAgX3VwZGF0ZUNoZWNrYm94VGl0bGUoKQorICAgIHsKKyAgICAgICAgaWYgKHRo
aXMuX2NoZWNrYm94RWxlbWVudC5jaGVja2VkKQorICAgICAgICAgICAgdGhpcy5fY2hlY2tib3hF
bGVtZW50LnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDbGljayB0byBkaXNhYmxlIHRo
ZSBzZWxlY3RlZCBydWxlIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMuX2NoZWNr
Ym94RWxlbWVudC50aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ2xpY2sgdG8gZW5hYmxl
IHRoZSBzZWxlY3RlZCBydWxlIik7CisgICAgfQorCisgICAgX2hhbmRsZU1haW5UaXRsZU1vdXNl
RG93bihldmVudCkKKyAgICB7CisgICAgICAgIHRoaXMuX2xpc3RJdGVtTm9kZS5jbGFzc0xpc3Qu
dG9nZ2xlKCJlZGl0YWJsZSIsIHRoaXMuc2VsZWN0ZWQpOworICAgIH0KKworICAgIF9oYW5kbGVN
YWluVGl0bGVLZXlEb3duKGV2ZW50KQorICAgIHsKKyAgICAgICAgdGhpcy5faGlnaGxpZ2h0Tm9k
ZXNXaXRoU2VsZWN0b3IoKTsKKworICAgICAgICBsZXQgZW50ZXJLZXlDb2RlID0gV2ViSW5zcGVj
dG9yLktleWJvYXJkU2hvcnRjdXQuS2V5LkVudGVyLmtleUNvZGU7CisgICAgICAgIGlmIChldmVu
dC5rZXlDb2RlID09PSBlbnRlcktleUNvZGUpCisgICAgICAgICAgICB0aGlzLl9tYWluVGl0bGVF
bGVtZW50LmJsdXIoKTsKKyAgICB9CisKKyAgICBfY29tbWl0U2VsZWN0b3IoKQorICAgIHsKKyAg
ICAgICAgdGhpcy5faGlkZURPTU5vZGVIaWdobGlnaHQoKTsKKyAgICAgICAgdGhpcy5fbGlzdEl0
ZW1Ob2RlLmNsYXNzTGlzdC5yZW1vdmUoImVkaXRhYmxlIik7CisKKyAgICAgICAgbGV0IHZhbHVl
ID0gdGhpcy5fc2VsZWN0b3JUZXh0OworICAgICAgICBpZiAodmFsdWUgPT09IHRoaXMuX2xhc3RW
YWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLnJlcHJlc2VudGVkT2Jq
ZWN0Lm93bmVyUnVsZS5zZWxlY3RvclRleHQgPSB2YWx1ZTsKKyAgICB9CisKKyAgICBfc3R5bGVU
ZXh0TW9kaWZpZWQoKQorICAgIHsKKyAgICAgICAgdGhpcy5fbGlzdEl0ZW1Ob2RlLmNsYXNzTGlz
dC50b2dnbGUoIm1vZGlmaWVkIiwgdGhpcy5yZXByZXNlbnRlZE9iamVjdC5tb2RpZmllZCk7Cisg
ICAgfQorfTsKKworV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JUcmVlSXRlbS5FdmVu
dCA9IHsKKyAgICBTdHlsZVRleHRSZXNldDogInZpc3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtLXN0
eWxlLXRleHQtcmVzZXQiLAorICAgIENoZWNrYm94Q2hhbmdlZDogInZpc3VhbC1zdHlsZS1zZWxl
Y3Rvci1pdGVtLWNoZWNrYm94LWNoYW5nZWQiCit9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258623</attachid>
            <date>2015-08-10 10:58:46 -0700</date>
            <delta_ts>2015-08-10 12:49:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147572-20150810105832.patch</filename>
            <type>text/plain</type>
            <size>45847</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDMwMGE0YTIwMjQ2Yjg0NjE1NTExYTc5YTEzYzA2
MmI0ZjFiZjkzM2QuLmM3OGVhN2U5NTljNzljZDRhZjJkNTY5Nzc0ZTRhYjY3M2Y3ZWI4N2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDE1LTA4LTEwICBEZXZp
biBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBB
ZGQgVmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzU3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkc3MgYSBzZWN0aW9uIHRvIHRoZSBuZXcgVmlzdWFsIHN0
eWxlIHNpZGViYXIgcGFuZWwgdGhhdCBjb250YWlucyB0aGUgbGlzdCBvZgorICAgICAgICBzdHls
ZXMgZm9yIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbm9kZS4KKworICAgICAgICAqIFVzZXJJbnRl
cmZhY2UvTW9kZWxzL0NTU1J1bGUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUnVsZS5w
cm90b3R5cGUuZ2V0IG1lZGlhVGV4dCk6CisgICAgICAgIFJldHVybnMgYSBzdHJpbmcgY29udGFp
bmluZyB0aGUgbGlzdCBvZiBtZWRpYSBxdWVyaWVzLgorCisgICAgICAgICogVXNlckludGVyZmFj
ZS9Nb2RlbHMvQ1NTU3R5bGVEZWNsYXJhdGlvbi5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5D
U1NTdHlsZURlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xh
cmF0aW9uLnByb3RvdHlwZS5zZXQgdGV4dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5
bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUuZ2V0IG1vZGlmaWVkKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZS5yZXNldFRleHQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLmdlbmVyYXRlQ1NTUnVs
ZVN0cmluZyk6CisgICAgICAgIEdlbmVyYXRlcyBhIGZvcm1hdHRlZCBzdHJpbmcgb2YgdGhlIHN0
eWxlIHRleHQuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL0NTU1N0eWxlRGVjbGFy
YXRpb25TZWN0aW9uLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRp
b25TZWN0aW9uLnByb3RvdHlwZS5faGFuZGxlQ29udGV4dE1lbnVFdmVudCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblNlY3Rpb24ucHJvdG90eXBlLl9nZW5lcmF0
ZUNTU1J1bGVTdHJpbmcpOiBEZWxldGVkLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3
cy9WaXN1YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5jc3M6IEFkZGVkLgorICAgICAgICAoLmRldGFp
bHMtc2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5oZWFkZXIpOgorICAg
ICAgICAoLmRldGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbjpub3Qo
LmNvbGxhcHNlZCkgPiAuaGVhZGVyKToKKyAgICAgICAgKEBtZWRpYSAoLXdlYmtpdC1taW4tZGV2
aWNlLXBpeGVsLXJhdGlvOiAyKSk6CisgICAgICAgICguZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1z
dHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmhlYWRlciA+IC5jdXJyZW50LXNlbGVjdG9yKToKKyAg
ICAgICAgKC52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbi5kZXRhaWxzLXNlY3Rpb246bm90
KC5jb2xsYXBzZWQpID4gLmhlYWRlciA+IC5jdXJyZW50LXNlbGVjdG9yKToKKyAgICAgICAgKC5k
ZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24gPiAuaGVhZGVyID4g
LmN1cnJlbnQtc2VsZWN0b3IgPiAuaWNvbik6CisgICAgICAgICguZGV0YWlscy1zZWN0aW9uLnZp
c3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmhlYWRlciA+IC5jdXJyZW50LXNlbGVjdG9y
ID4gc3Bhbik6CisgICAgICAgICguZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rv
ci1zZWN0aW9uID4gLmhlYWRlciA+IC5jb250cm9scyk6CisgICAgICAgICguZGV0YWlscy1zZWN0
aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uLmNvbGxhcHNlZCA+IC5oZWFkZXIgPiAu
Y29udHJvbHMpOgorICAgICAgICAoLmRldGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0
b3Itc2VjdGlvbiA+IC5oZWFkZXIgPiAuY29udHJvbHMgPiAudmlzdWFsLXN0eWxlLXNlbGVjdG9y
LXNlY3Rpb24tYWRkLXJ1bGUpOgorICAgICAgICAoLmRldGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5
bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5jb250ZW50ID4gLnNlbGVjdG9ycyk6CisgICAgICAgICgu
ZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmNvbnRlbnQg
PiAuc2VsZWN0b3JzID4gLnNlbGVjdG9yLWxpc3QpOgorICAgICAgICAoLmRldGFpbHMtc2VjdGlv
bi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5jb250ZW50ID4gLnNlbGVjdG9ycyA+
IC5zZWxlY3Rvci1saXN0ID4gLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtOm50aC1jaGlsZChv
ZGQpKToKKyAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNl
Y3Rpb24gPiAuY29udGVudCA+IC5zZWxlY3RvcnMgPiAuc2VsZWN0b3ItbGlzdCA+IC5zZWN0aW9u
LWRpdmlkZXIpOgorICAgICAgICAoLmRldGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0
b3Itc2VjdGlvbiA+IC5jb250ZW50ID4gLnNlbGVjdG9ycyA+IC5zZWxlY3Rvci1saXN0ID4gLnNl
Y3Rpb24tZGl2aWRlciA+IC5pY29uKToKKyAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24udmlzdWFs
LXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24gPiAuY29udGVudCA+IC5zZWxlY3RvcnMgPiAuc2VsZWN0
b3ItbGlzdCA+IC5zZWN0aW9uLWRpdmlkZXIgPiA6bWF0Y2hlcyguZGlzY2xvc3VyZS1idXR0b24s
IC5pY29uKSk6CisgICAgICAgICguZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rv
ci1zZWN0aW9uID4gLmNvbnRlbnQgPiAuc2VsZWN0b3JzID4gLnNlbGVjdG9yLWxpc3QgPiAuc2Vj
dGlvbi1kaXZpZGVyID4gLnRpdGxlcyA+IC50aXRsZSk6CisgICAgICAgICguZGV0YWlscy1zZWN0
aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmNvbnRlbnQgPiAuc2VsZWN0b3Jz
ID4gLnNlbGVjdG9yLWxpc3QgPiAuc2VjdGlvbi1kaXZpZGVyIH4gLnZpc3VhbC1zdHlsZS1zZWxl
Y3Rvci1pdGVtOm50aC1jaGlsZChldmVuKSk6CisgICAgICAgICguZGV0YWlscy1zZWN0aW9uLnZp
c3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmNvbnRlbnQgPiAuc2VsZWN0b3JzID4gLnNl
bGVjdG9yLWxpc3QgPiAuc2VjdGlvbi1kaXZpZGVyIH4gLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1p
dGVtOm50aC1jaGlsZChvZGQpKToKKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvVmlz
dWFsU3R5bGVTZWxlY3RvclNlY3Rpb24uanM6IEFkZGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlZpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1
YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5wcm90b3R5cGUudXBkYXRlLmNyZWF0ZVNlbGVjdG9ySXRl
bSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24ucHJv
dG90eXBlLnVwZGF0ZS51bmlxdWVPcmRlcmVkUnVsZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlZpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLnByb3RvdHlwZS51cGRhdGUuaW5zZXJ0QWxsTWF0
Y2hpbmdQc2V1ZG9SdWxlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxl
Y3RvclNlY3Rpb24ucHJvdG90eXBlLnVwZGF0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlz
dWFsU3R5bGVTZWxlY3RvclNlY3Rpb24ucHJvdG90eXBlLmN1cnJlbnRTdHlsZSk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24ucHJvdG90eXBlLl9zZWxl
Y3RvckNoYW5nZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JT
ZWN0aW9uLnByb3RvdHlwZS5fc3R5bGVUZXh0UmVzZXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlZpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLnByb3RvdHlwZS5fYWRkTmV3UnVsZSk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24ucHJvdG90eXBlLl90
cmVlRWxlbWVudENoZWNrYm94VG9nZ2xlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFs
U3R5bGVTZWxlY3RvclNlY3Rpb24ucHJvdG90eXBlLl9oYW5kbGVNb3VzZU92ZXIpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLnByb3RvdHlwZS5faGFu
ZGxlTW91c2VPdXQpOgorCisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9WaXN1YWxTdHls
ZVNlbGVjdG9yVHJlZUl0ZW0uY3NzOgorICAgICAgICAoLml0ZW0udmlzdWFsLXN0eWxlLXNlbGVj
dG9yLWl0ZW0pOgorICAgICAgICAoLml0ZW0udmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0uc2Vs
ZWN0ZWQpOgorICAgICAgICAoLml0ZW0udmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0gPiAuZGlz
Y2xvc3VyZS1idXR0b24pOgorICAgICAgICAoLml0ZW0udmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0
ZW0gPiBpbnB1dFt0eXBlPSJjaGVja2JveCJdKToKKyAgICAgICAgKC5pdGVtLnZpc3VhbC1zdHls
ZS1zZWxlY3Rvci1pdGVtID4gLmljb24pOgorICAgICAgICAoLml0ZW0udmlzdWFsLXN0eWxlLXNl
bGVjdG9yLWl0ZW0ubW9kaWZpZWQgPiAuaWNvbik6CisgICAgICAgICguaXRlbS52aXN1YWwtc3R5
bGUtc2VsZWN0b3ItaXRlbS5zZWxlY3Rvci1pbnZhbGlkID4gLmljb24pOgorICAgICAgICAoLml0
ZW0udmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0uc2VsZWN0b3ItaW52YWxpZCA+IC50aXRsZXMg
PiAudGl0bGUpOgorICAgICAgICAoLml0ZW0udmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0uc2Vs
ZWN0b3ItaW52YWxpZCA+IC50aXRsZXMgPiAudGl0bGU6OmJlZm9yZSk6CisgICAgICAgICguaXRl
bS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbSA+IC50aXRsZXMpOgorICAgICAgICAoLml0ZW0u
dmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW06bm90KC5kb20tZWxlbWVudC1pY29uKSA+IC50aXRs
ZXMgPiAudGl0bGUpOgorICAgICAgICAoLml0ZW0udmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW06
bm90KC5kb20tZWxlbWVudC1pY29uKS5lZGl0YWJsZSA+IC50aXRsZXMgPiAudGl0bGUpOgorICAg
ICAgICAoLml0ZW0udmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW06bm90KC5kb20tZWxlbWVudC1p
Y29uKS5lZGl0YWJsZSA+IC50aXRsZXMgPiAudGl0bGU6Zm9jdXMpOgorICAgICAgICAoLml0ZW0u
dmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0gPiAudGl0bGVzID4gLnN1YnRpdGxlOjpiZWZvcmUp
OgorICAgICAgICAoLml0ZW0udmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0gPiAudGl0bGVzID4g
LnN1YnRpdGxlKToKKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvVmlzdWFsU3R5bGVT
ZWxlY3RvclRyZWVJdGVtLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2Vs
ZWN0b3JUcmVlSXRlbSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3Rv
clRyZWVJdGVtLnByb3RvdHlwZS5pY29uQ2xhc3NOYW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5WaXN1YWxTdHlsZVNlbGVjdG9yVHJlZUl0ZW0ucHJvdG90eXBlLm9uYXR0YWNoKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yVHJlZUl0ZW0ucHJvdG90eXBlLm9u
ZGVzZWxlY3QpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JUcmVl
SXRlbS5wcm90b3R5cGUuZ2V0IF9zZWxlY3RvclRleHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlZpc3VhbFN0eWxlU2VsZWN0b3JUcmVlSXRlbS5wcm90b3R5cGUuX2hpZ2hsaWdodE5vZGVzV2l0
aFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yVHJl
ZUl0ZW0ucHJvdG90eXBlLl9oaWRlRE9NTm9kZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3RvclRyZWVJdGVtLnByb3RvdHlwZS5faGFuZGxlQ29udGV4
dE1lbnVFdmVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3RvclRy
ZWVJdGVtLnByb3RvdHlwZS5faGFuZGxlQ2hlY2tib3hDaGFuZ2VkKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yVHJlZUl0ZW0ucHJvdG90eXBlLl91cGRhdGVDaGVj
a2JveFRpdGxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yVHJl
ZUl0ZW0ucHJvdG90eXBlLl9oYW5kbGVNYWluVGl0bGVNb3VzZURvd24pOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JUcmVlSXRlbS5wcm90b3R5cGUuX2hhbmRsZU1h
aW5UaXRsZUtleURvd24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0
b3JUcmVlSXRlbS5wcm90b3R5cGUuX2NvbW1pdFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yVHJlZUl0ZW0ucHJvdG90eXBlLl9zdHlsZVRleHRNb2Rp
ZmllZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3RvclRyZWVJdGVt
LnByb3RvdHlwZS5fc2VsZWN0b3JDaGFuZ2VkKToKKwogMjAxNS0wOC0wOCAgRGV2aW4gUm91c3Nv
ICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogVGltZWxpbmUg
cnVsZXIgaGFuZGxlIHRvb2x0aXAgc2hvd3Mgd3JvbmcgdmFsdWUgd2hlbiBoYW5kbGVzIG92ZXJs
YXAKQEAgLTEzMSw2ICsyMjYsMzYgQEAKICAgICAgICAgKFdlYkluc3BlY3Rvci5zdGFydEVkaXRp
bmcuZGVmYXVsdEZpbmlzaEhhbmRsZXIpOgogICAgICAgICAoV2ViSW5zcGVjdG9yLnN0YXJ0RWRp
dGluZy5oYW5kbGVFZGl0aW5nUmVzdWx0KToKIAorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmll
d3MvVmlzdWFsU3R5bGVTZWxlY3RvclRyZWVJdGVtLmNzczogQWRkZWQuCisgICAgICAgICguaXRl
bS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbSk6CisgICAgICAgICguaXRlbS52aXN1YWwtc3R5
bGUtc2VsZWN0b3ItaXRlbS5zZWxlY3RlZCk6CisgICAgICAgICguaXRlbS52aXN1YWwtc3R5bGUt
c2VsZWN0b3ItaXRlbSA+IC5kaXNjbG9zdXJlLWJ1dHRvbik6CisgICAgICAgICguaXRlbS52aXN1
YWwtc3R5bGUtc2VsZWN0b3ItaXRlbSA+IGlucHV0W3R5cGU9ImNoZWNrYm94Il0pOgorICAgICAg
ICAoLml0ZW0udmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0gPiAuaWNvbik6CisgICAgICAgICgu
aXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbS5tb2RpZmllZCA+IC5pY29uKToKKyAgICAg
ICAgKC5pdGVtLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtID4gLnRpdGxlcyk6CisgICAgICAg
ICguaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbTpub3QoLmRvbS1lbGVtZW50LWljb24p
ID4gLnRpdGxlcyA+IC50aXRsZSk6CisgICAgICAgICguaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0
b3ItaXRlbTpub3QoLmRvbS1lbGVtZW50LWljb24pLmVkaXRhYmxlID4gLnRpdGxlcyA+IC50aXRs
ZSk6CisgICAgICAgICguaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbTpub3QoLmRvbS1l
bGVtZW50LWljb24pLmVkaXRhYmxlID4gLnRpdGxlcyA+IC50aXRsZTpmb2N1cyk6CisgICAgICAg
ICguaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbSA+IC50aXRsZXMgPiAuc3VidGl0bGU6
OmJlZm9yZSk6CisgICAgICAgICguaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbSA+IC50
aXRsZXMgPiAuc3VidGl0bGUpOgorCisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9WaXN1
YWxTdHlsZVNlbGVjdG9yVHJlZUl0ZW0uanM6IEFkZGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlZpc3VhbFN0eWxlU2VsZWN0b3JUcmVlSXRlbSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlz
dWFsU3R5bGVTZWxlY3RvclRyZWVJdGVtLnByb3RvdHlwZS5nZXQgaWNvbkNsYXNzTmFtZSk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3RvclRyZWVJdGVtLnByb3RvdHlw
ZS5vbmF0dGFjaCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3RvclRy
ZWVJdGVtLnByb3RvdHlwZS5vbmRlc2VsZWN0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1
YWxTdHlsZVNlbGVjdG9yVHJlZUl0ZW0ucHJvdG90eXBlLmdldCBfc2VsZWN0b3JUZXh0KToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yVHJlZUl0ZW0ucHJvdG90eXBl
Ll9oaWdobGlnaHROb2Rlc1dpdGhTZWxlY3Rvcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlz
dWFsU3R5bGVTZWxlY3RvclRyZWVJdGVtLnByb3RvdHlwZS5faGlkZURPTU5vZGVIaWdobGlnaHQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JUcmVlSXRlbS5wcm90
b3R5cGUuX2hhbmRsZUNvbnRleHRNZW51RXZlbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlZp
c3VhbFN0eWxlU2VsZWN0b3JUcmVlSXRlbS5wcm90b3R5cGUuX2hhbmRsZUNoZWNrYm94Q2hhbmdl
ZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3RvclRyZWVJdGVtLnBy
b3RvdHlwZS5fdXBkYXRlQ2hlY2tib3hUaXRsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlz
dWFsU3R5bGVTZWxlY3RvclRyZWVJdGVtLnByb3RvdHlwZS5faGFuZGxlTWFpblRpdGxlTW91c2VE
b3duKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yVHJlZUl0ZW0u
cHJvdG90eXBlLl9oYW5kbGVNYWluVGl0bGVLZXlEb3duKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5WaXN1YWxTdHlsZVNlbGVjdG9yVHJlZUl0ZW0ucHJvdG90eXBlLl9jb21taXRTZWxlY3Rvcik6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3RvclRyZWVJdGVtLnByb3Rv
dHlwZS5fc3R5bGVUZXh0TW9kaWZpZWQpOgorCiAyMDE1LTA4LTA1ICBEZXZpbiBSb3Vzc28gIDxk
cm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBNb3ZlIHRoZSBNZXRy
aWNzIHN0eWxlIHNpZGViYXIgcGFuZWwgaW50byBDb21wdXRlZApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NTU1J1bGUuanMgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTUnVsZS5qcwppbmRleCBhOTRl
MjdiNTY2NDYyYTkwYTlkNDZjOTUxYzk1NjRkMjcyMjcyMjY4Li5mMGFmNmFkNDI5OGI2ZTM1MmI5
ZTAwNzdhOTEwMjJjMDdkMDBkYmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTUnVsZS5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTUnVsZS5qcwpAQCAtMTc3LDYgKzE3NywxOCBAQCBX
ZWJJbnNwZWN0b3IuQ1NTUnVsZSA9IGNsYXNzIENTU1J1bGUgZXh0ZW5kcyBXZWJJbnNwZWN0b3Iu
T2JqZWN0CiAgICAgICAgIHJldHVybiB0aGlzLl9tZWRpYUxpc3Q7CiAgICAgfQogCisgICAgZ2V0
IG1lZGlhVGV4dCgpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX21lZGlhTGlzdC5sZW5ndGgp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbGV0IG1lZGlhVGV4dCA9ICIiOworICAg
ICAgICBmb3IgKGxldCBtZWRpYSBvZiB0aGlzLl9tZWRpYUxpc3QpCisgICAgICAgICAgICBtZWRp
YVRleHQgKz0gbWVkaWEudGV4dDsKKworICAgICAgICByZXR1cm4gbWVkaWFUZXh0OworICAgIH0K
KwogICAgIGlzRXF1YWxUbyhydWxlKQogICAgIHsKICAgICAgICAgaWYgKCFydWxlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NTU1N0eWxl
RGVjbGFyYXRpb24uanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2Rl
bHMvQ1NTU3R5bGVEZWNsYXJhdGlvbi5qcwppbmRleCA5NDA3OGNmZDBjYzliYWQ4YzRiMGYzMDFl
NDZhYTNlYWVhOGRhYmRmLi45ZjEwZDNmYWIwNjc5MTQ0MGJhM2EzNDM4NDc3Mzk3YmNjYmYzYTc1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMv
Q1NTU3R5bGVEZWNsYXJhdGlvbi5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9Nb2RlbHMvQ1NTU3R5bGVEZWNsYXJhdGlvbi5qcwpAQCAtNDMsNiArNDMsOSBAQCBX
ZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbiA9IGNsYXNzIENTU1N0eWxlRGVjbGFyYXRp
b24gZXh0ZW5kcyBXZWJJbnNwZWN0bwogICAgICAgICB0aGlzLl9wZW5kaW5nUHJvcGVydGllcyA9
IFtdOwogICAgICAgICB0aGlzLl9wcm9wZXJ0eU5hbWVNYXAgPSB7fTsKIAorICAgICAgICB0aGlz
Ll9pbml0aWFsVGV4dCA9IHRleHQ7CisgICAgICAgIHRoaXMuX2hhc01vZGlmaWVkSW5pdGlhbFRl
eHQgPSBmYWxzZTsKKwogICAgICAgICB0aGlzLnVwZGF0ZSh0ZXh0LCBwcm9wZXJ0aWVzLCBzdHls
ZVNoZWV0VGV4dFJhbmdlLCB0cnVlKTsKICAgICB9CiAKQEAgLTE4Myw5ICsxODYsMjUgQEAgV2Vi
SW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24gPSBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9u
IGV4dGVuZHMgV2ViSW5zcGVjdG8KICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHRleHQpCiAg
ICAgICAgICAgICByZXR1cm47CiAKKyAgICAgICAgdmFyIG1vZGlmaWVkID0gdGV4dCAhPT0gdGhp
cy5faW5pdGlhbFRleHQ7CisgICAgICAgIGlmIChtb2RpZmllZCAhPT0gdGhpcy5faGFzTW9kaWZp
ZWRJbml0aWFsVGV4dCkgeworICAgICAgICAgICAgdGhpcy5faGFzTW9kaWZpZWRJbml0aWFsVGV4
dCA9IG1vZGlmaWVkOworICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMo
V2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24uRXZlbnQuSW5pdGlhbFRleHRNb2RpZmll
ZCk7CisgICAgICAgIH0KKwogICAgICAgICB0aGlzLl9ub2RlU3R5bGVzLmNoYW5nZVN0eWxlVGV4
dCh0aGlzLCB0ZXh0KTsKICAgICB9CiAKKyAgICByZXNldFRleHQoKQorICAgIHsKKyAgICAgICAg
dGhpcy50ZXh0ID0gdGhpcy5faW5pdGlhbFRleHQ7CisgICAgfQorCisgICAgZ2V0IG1vZGlmaWVk
KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9oYXNNb2RpZmllZEluaXRpYWxUZXh0Owor
ICAgIH0KKwogICAgIGdldCBwcm9wZXJ0aWVzKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlz
Ll9wcm9wZXJ0aWVzOwpAQCAtMjYwLDYgKzI3OSw0MyBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVE
ZWNsYXJhdGlvbiA9IGNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb24gZXh0ZW5kcyBXZWJJbnNwZWN0
bwogICAgICAgICByZXR1cm4gbmV3UHJvcGVydHk7CiAgICAgfQogCisgICAgZ2VuZXJhdGVDU1NS
dWxlU3RyaW5nKCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fb3duZXJSdWxlKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGxldCBzdHlsZVRleHQgPSAiIjsKKyAgICAgICAgbGV0
IG1lZGlhUXVlcmllc0NvdW50ID0gMDsKKyAgICAgICAgbGV0IG1lZGlhTGlzdCA9IHRoaXMuX293
bmVyUnVsZS5tZWRpYUxpc3Q7CisgICAgICAgIGlmIChtZWRpYUxpc3QubGVuZ3RoKSB7CisgICAg
ICAgICAgICBtZWRpYVF1ZXJpZXNDb3VudCA9IG1lZGlhTGlzdC5sZW5ndGg7CisKKyAgICAgICAg
ICAgIGZvciAobGV0IGkgPSBtZWRpYVF1ZXJpZXNDb3VudCAtIDE7IGkgPj0gMDsgLS1pKQorICAg
ICAgICAgICAgICAgIHN0eWxlVGV4dCArPSAiICAgICIucmVwZWF0KG1lZGlhUXVlcmllc0NvdW50
IC0gaSAtIDEpICsgIkBtZWRpYSAiICsgbWVkaWFMaXN0W2ldLnRleHQgKyAiIHtcbiI7CisgICAg
ICAgIH0KKworICAgICAgICBzdHlsZVRleHQgKz0gIiAgICAiLnJlcGVhdChtZWRpYVF1ZXJpZXND
b3VudCkgKyB0aGlzLl9vd25lclJ1bGUuc2VsZWN0b3JUZXh0ICsgIiB7XG4iOworCisgICAgICAg
IGZvciAobGV0IHByb3BlcnR5IG9mIHRoaXMuX3Byb3BlcnRpZXMpIHsKKyAgICAgICAgICAgIGlm
IChwcm9wZXJ0eS5hbm9ueW1vdXMpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgIHN0eWxlVGV4dCArPSAiICAgICIucmVwZWF0KG1lZGlhUXVlcmllc0NvdW50ICsgMSkg
KyBwcm9wZXJ0eS50ZXh0LnRyaW0oKTsKKworICAgICAgICAgICAgaWYgKCFzdHlsZVRleHQuZW5k
c1dpdGgoIjsiKSkKKyAgICAgICAgICAgICAgICBzdHlsZVRleHQgKz0gIjsiOworCisgICAgICAg
ICAgICBzdHlsZVRleHQgKz0gIlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAobGV0IGkg
PSBtZWRpYVF1ZXJpZXNDb3VudDsgaSA+IDA7IC0taSkKKyAgICAgICAgICAgIHN0eWxlVGV4dCAr
PSAiICAgICIucmVwZWF0KGkpICsgIn1cbiI7CisKKyAgICAgICAgc3R5bGVUZXh0ICs9ICJ9IjsK
KworICAgICAgICByZXR1cm4gc3R5bGVUZXh0OworICAgIH0KKwogICAgIC8vIFByb3RlY3RlZAog
CiAgICAgZ2V0IG5vZGVTdHlsZXMoKQpAQCAtMjY5LDcgKzMyNSw4IEBAIFdlYkluc3BlY3Rvci5D
U1NTdHlsZURlY2xhcmF0aW9uID0gY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbiBleHRlbmRzIFdl
Ykluc3BlY3RvCiB9OwogCiBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5FdmVudCA9
IHsKLSAgICBQcm9wZXJ0aWVzQ2hhbmdlZDogImNzcy1zdHlsZS1kZWNsYXJhdGlvbi1wcm9wZXJ0
aWVzLWNoYW5nZWQiCisgICAgUHJvcGVydGllc0NoYW5nZWQ6ICJjc3Mtc3R5bGUtZGVjbGFyYXRp
b24tcHJvcGVydGllcy1jaGFuZ2VkIiwKKyAgICBJbml0aWFsVGV4dE1vZGlmaWVkOiAiY3NzLXN0
eWxlLWRlY2xhcmF0aW9uLWluaXRpYWwtdGV4dC1tb2RpZmllZCIKIH07CiAKIFdlYkluc3BlY3Rv
ci5DU1NTdHlsZURlY2xhcmF0aW9uLlR5cGUgPSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9DU1NTdHlsZURlY2xhcmF0aW9uU2VjdGlvbi5q
cyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NTU1N0eWxlRGVj
bGFyYXRpb25TZWN0aW9uLmpzCmluZGV4IGIzZTBkMDc2Y2YxYzcyNmJiZDYxNzcyOTY0ODk5Njdj
Zjg3MTEyOWMuLjU2ZDlkNjJkN2M5ZjhlYjUwNDQ5MzIwMjg4ZmZjZTkxMWY2MmNjNTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NTU1N0eWxl
RGVjbGFyYXRpb25TZWN0aW9uLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL1ZpZXdzL0NTU1N0eWxlRGVjbGFyYXRpb25TZWN0aW9uLmpzCkBAIC00NDksNDkgKzQ0
OSwxMiBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblNlY3Rpb24gPSBjbGFzcyBD
U1NTdHlsZURlY2xhcmF0aW9uU2VjdGlvbiBleHRlbgogICAgICAgICB9CiAKICAgICAgICAgY29u
dGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNvcHkgUnVsZSIpLCBm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5jb3B5VGV4dCh0
aGlzLl9nZW5lcmF0ZUNTU1J1bGVTdHJpbmcoKSk7CisgICAgICAgICAgICBJbnNwZWN0b3JGcm9u
dGVuZEhvc3QuY29weVRleHQodGhpcy5fc3R5bGUuZ2VuZXJhdGVDU1NSdWxlU3RyaW5nKCkpOwog
ICAgICAgICB9LmJpbmQodGhpcykpOwogCiAgICAgICAgIGNvbnRleHRNZW51LnNob3coKTsKICAg
ICB9CiAKLSAgICBfZ2VuZXJhdGVDU1NSdWxlU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHZhciBu
dW1NZWRpYVF1ZXJpZXMgPSAwOwotICAgICAgICB2YXIgc3R5bGVUZXh0ID0gIiI7Ci0KLSAgICAg
ICAgaWYgKHRoaXMuX3N0eWxlLm93bmVyUnVsZSkgewotICAgICAgICAgICAgdmFyIG1lZGlhTGlz
dCA9IHRoaXMuX3N0eWxlLm93bmVyUnVsZS5tZWRpYUxpc3Q7Ci0gICAgICAgICAgICBpZiAobWVk
aWFMaXN0Lmxlbmd0aCkgewotICAgICAgICAgICAgICAgIG51bU1lZGlhUXVlcmllcyA9IG1lZGlh
TGlzdC5sZW5ndGg7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gbnVtTWVkaWFRdWVy
aWVzIC0gMTsgaSA+PSAwOyAtLWkpCi0gICAgICAgICAgICAgICAgICAgIHN0eWxlVGV4dCArPSAi
ICAgICIucmVwZWF0KG51bU1lZGlhUXVlcmllcyAtIGkgLSAxKSArICJAbWVkaWEgIiArIG1lZGlh
TGlzdFtpXS50ZXh0ICsgIiB7XG4iOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzdHls
ZVRleHQgKz0gIiAgICAiLnJlcGVhdChudW1NZWRpYVF1ZXJpZXMpICsgdGhpcy5fc3R5bGUub3du
ZXJSdWxlLnNlbGVjdG9yVGV4dDsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBzdHlsZVRl
eHQgKz0gdGhpcy5fc2VsZWN0b3JFbGVtZW50LnRleHRDb250ZW50OwotCi0gICAgICAgIHN0eWxl
VGV4dCArPSAiIHtcbiI7Ci0KLSAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgb2YgdGhpcy5fc3R5
bGUudmlzaWJsZVByb3BlcnRpZXMpIHsKLSAgICAgICAgICAgIHN0eWxlVGV4dCArPSAiICAgICIu
cmVwZWF0KG51bU1lZGlhUXVlcmllcyArIDEpICsgcHJvcGVydHkudGV4dC50cmltKCk7Ci0KLSAg
ICAgICAgICAgIGlmICghc3R5bGVUZXh0LmVuZHNXaXRoKCI7IikpCi0gICAgICAgICAgICAgICAg
c3R5bGVUZXh0ICs9ICI7IjsKLQotICAgICAgICAgICAgc3R5bGVUZXh0ICs9ICJcbiI7Ci0gICAg
ICAgIH0KLQotICAgICAgICBmb3IgKHZhciBpID0gbnVtTWVkaWFRdWVyaWVzOyBpID4gMDsgLS1p
KQotICAgICAgICAgICAgc3R5bGVUZXh0ICs9ICIgICAgIi5yZXBlYXQoaSkgKyAifVxuIjsKLQot
ICAgICAgICBzdHlsZVRleHQgKz0gIn0iOwotCi0gICAgICAgIHJldHVybiBzdHlsZVRleHQ7Ci0g
ICAgfQotCiAgICAgX3RvZ2dsZVJ1bGVPbk9mZigpCiAgICAgewogICAgICAgICBpZiAodGhpcy5f
aGFzSW52YWxpZFNlbGVjdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvVmlld3MvVmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24uY3NzIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVmlzdWFsU3R5bGVTZWxlY3RvclNl
Y3Rpb24uY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUzMTVmNDU1ZmJiYTA4ODA3ZDk3ZmE3NWY4NDIwYmQ4NGNm
N2NkZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9WaWV3cy9WaXN1YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5jc3MKQEAgLTAsMCArMSwxMjYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisuZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1z
ZWN0aW9uID4gLmhlYWRlciB7CisgICAgZGlzcGxheTogZmxleDsKKyAgICBoZWlnaHQ6IDIycHg7
Cit9CisKKy5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb246bm90
KC5jb2xsYXBzZWQpID4gLmhlYWRlciB7CisgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGhz
bCgwLCAwJSwgNzAlKTsKK30KKworQG1lZGlhICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0
aW86IDIpIHsKKyAgICAuZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0
aW9uOm5vdCguY29sbGFwc2VkKSA+IC5oZWFkZXIgeworICAgICAgICBib3JkZXItd2lkdGg6IDAu
NXB4ICFpbXBvcnRhbnQ7CisgICAgfQorfQorCisuZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHls
ZS1zZWxlY3Rvci1zZWN0aW9uID4gLmhlYWRlciA+IC5jdXJyZW50LXNlbGVjdG9yIHsKKyAgICB3
aWR0aDogY2FsYygxMDAlIC0gODVweCk7CisgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CisgICAgZm9u
dC13ZWlnaHQ6IG5vcm1hbDsKKyAgICB3aGl0ZS1zcGFjZTogbm93cmFwOworICAgIG92ZXJmbG93
OiBoaWRkZW47CisgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Cit9CisKKy52aXN1YWwtc3R5
bGUtc2VsZWN0b3Itc2VjdGlvbi5kZXRhaWxzLXNlY3Rpb246bm90KC5jb2xsYXBzZWQpID4gLmhl
YWRlciA+IC5jdXJyZW50LXNlbGVjdG9yIHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisuZGV0
YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmhlYWRlciA+IC5j
dXJyZW50LXNlbGVjdG9yID4gLmljb24geworICAgIHdpZHRoOiAxNnB4OworICAgIGhlaWdodDog
MTZweDsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAzcHg7Cit9CisKKy5kZXRh
aWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24gPiAuaGVhZGVyID4gLmN1
cnJlbnQtc2VsZWN0b3IgPiBzcGFuIHsKKyAgICBtYXJnaW4tbGVmdDogMjFweDsKK30KKworLmRl
dGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5oZWFkZXIgPiAu
Y29udHJvbHMgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICByaWdodDogMDsKKyAgICB0
b3A6IDA7CisgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBoc2woMCwgMCUsIDgzJSk7Cit9CisK
Ky5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24uY29sbGFwc2Vk
ID4gLmhlYWRlciA+IC5jb250cm9scyB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworLmRldGFp
bHMtc2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5oZWFkZXIgPiAuY29u
dHJvbHMgPiAudmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24tYWRkLXJ1bGUgeworICAgIHdp
ZHRoOiAyM3B4OworICAgIGhlaWdodDogMjFweDsKKyAgICBwYWRkaW5nOiA0cHggNXB4OworICAg
IC13ZWJraXQtZmlsdGVyOiBvcGFjaXR5KDAuNyk7Cit9CisKKy5kZXRhaWxzLXNlY3Rpb24udmlz
dWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24gPiAuY29udGVudCA+IC5zZWxlY3RvcnMgeworICAg
IG1heC1oZWlnaHQ6IDExMHB4OworICAgIG92ZXJmbG93OiBhdXRvOworfQorCisuZGV0YWlscy1z
ZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmNvbnRlbnQgPiAuc2VsZWN0
b3JzID4gLnNlbGVjdG9yLWxpc3QgeworICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5nLWxlZnQ6
IDA7CisgICAgb3V0bGluZTogbm9uZTsKK30KKworLmRldGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5
bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5jb250ZW50ID4gLnNlbGVjdG9ycyA+IC5zZWxlY3Rvci1s
aXN0ID4gLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtOm50aC1jaGlsZChvZGQpIHsKKyAgICBi
YWNrZ3JvdW5kLWNvbG9yOiBoc2woMCwgMTAwJSwgMTAwJSk7Cit9CisKKy5kZXRhaWxzLXNlY3Rp
b24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24gPiAuY29udGVudCA+IC5zZWxlY3RvcnMg
PiAuc2VsZWN0b3ItbGlzdCA+IC5zZWN0aW9uLWRpdmlkZXIgeworICAgIHBvc2l0aW9uOiAtd2Vi
a2l0LXN0aWNreTsKKyAgICB0b3A6IC0xcHg7CisgICAgaGVpZ2h0OiAxN3B4OworICAgIHBhZGRp
bmc6IDJweDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBoc2woMCwgMCUsIDk1JSk7CisgICAgYm9y
ZGVyLWNvbG9yOiBoc2woMCwgMCUsIDcwJSk7CisgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKKyAg
ICBib3JkZXItd2lkdGg6IDFweCAwOworICAgIHotaW5kZXg6IDEwMDsKK30KKworLmRldGFpbHMt
c2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5jb250ZW50ID4gLnNlbGVj
dG9ycyA+IC5zZWxlY3Rvci1saXN0ID4gLnNlY3Rpb24tZGl2aWRlciA+IDptYXRjaGVzKC5kaXNj
bG9zdXJlLWJ1dHRvbiwgLmljb24pIHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisuZGV0YWls
cy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmNvbnRlbnQgPiAuc2Vs
ZWN0b3JzID4gLnNlbGVjdG9yLWxpc3QgPiAuc2VjdGlvbi1kaXZpZGVyID4gLnRpdGxlcyA+IC50
aXRsZSB7CisgICAgb3ZlcmZsb3c6IGhpZGRlbjsKKyAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwor
ICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOworfQorCisuZGV0YWlscy1zZWN0aW9uLnZpc3Vh
bC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmNvbnRlbnQgPiAuc2VsZWN0b3JzID4gLnNlbGVj
dG9yLWxpc3QgPiAuc2VjdGlvbi1kaXZpZGVyIH4gLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVt
Om50aC1jaGlsZChldmVuKSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogaHNsKDAsIDEwMCUsIDEw
MCUpOworfQorCisuZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9u
ID4gLmNvbnRlbnQgPiAuc2VsZWN0b3JzID4gLnNlbGVjdG9yLWxpc3QgPiAuc2VjdGlvbi1kaXZp
ZGVyIH4gLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtOm50aC1jaGlsZChvZGQpIHsKKyAgICBi
YWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Zpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9u
LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVmlzdWFsU3R5
bGVTZWxlY3RvclNlY3Rpb24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzRkNGE4MGQxODU0MGZhNzk2ZWRiNzU5
NmI4MWI0NWFjNmVlNWI4OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Zpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLmpzCkBAIC0w
LDAgKzEsMjk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0
b3JTZWN0aW9uID0gY2xhc3MgVmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24gZXh0ZW5kcyBXZWJJ
bnNwZWN0b3IuRGV0YWlsc1NlY3Rpb24KK3sKKyAgICBjb25zdHJ1Y3RvcihkZWxlZ2F0ZSkKKyAg
ICB7CisgICAgICAgIGxldCBzZWxlY3RvclNlY3Rpb24gPSB7ZWxlbWVudDogZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2Iil9OworICAgICAgICBzZWxlY3RvclNlY3Rpb24uZWxlbWVudC5jbGFz
c0xpc3QuYWRkKCJzZWxlY3RvcnMiKTsKKworICAgICAgICBsZXQgY29udHJvbEVsZW1lbnQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgY29udHJvbEVsZW1lbnQuY2xh
c3NMaXN0LmFkZCgiY29udHJvbHMiKTsKKworICAgICAgICBzdXBlcigidmlzdWFsLXN0eWxlLXNl
bGVjdG9yLXNlY3Rpb24iLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlN0eWxlIFJ1bGVzIiksIFtz
ZWxlY3RvclNlY3Rpb25dLCBjb250cm9sRWxlbWVudCk7CisKKyAgICAgICAgdGhpcy5fZGVsZWdh
dGUgPSBkZWxlZ2F0ZSB8fCBudWxsOworICAgICAgICB0aGlzLl9ub2RlU3R5bGVzID0gbnVsbDsK
KworICAgICAgICB0aGlzLl9jdXJyZW50U2VsZWN0b3JFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiZGl2Iik7CisgICAgICAgIHRoaXMuX2N1cnJlbnRTZWxlY3RvckVsZW1lbnQuY2xh
c3NMaXN0LmFkZCgiY3VycmVudC1zZWxlY3RvciIpOworCisgICAgICAgIGxldCBjdXJyZW50U2Vs
ZWN0b3JJY29uRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpOworICAgICAg
ICBjdXJyZW50U2VsZWN0b3JJY29uRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJpY29uIik7CisgICAg
ICAgIHRoaXMuX2N1cnJlbnRTZWxlY3RvckVsZW1lbnQuYXBwZW5kQ2hpbGQoY3VycmVudFNlbGVj
dG9ySWNvbkVsZW1lbnQpOworCisgICAgICAgIHRoaXMuX2N1cnJlbnRTZWxlY3RvclRleHQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgIHRoaXMuX2N1cnJlbnRTZWxl
Y3RvckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fY3VycmVudFNlbGVjdG9yVGV4dCk7CisKKyAg
ICAgICAgdGhpcy5faGVhZGVyRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9jdXJyZW50U2VsZWN0
b3JFbGVtZW50KTsKKworICAgICAgICBsZXQgc2VsZWN0b3JMaXN0RWxlbWVudCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoIm9sIik7CisgICAgICAgIHNlbGVjdG9yTGlzdEVsZW1lbnQuY2xhc3NM
aXN0LmFkZCgic2VsZWN0b3ItbGlzdCIpOworICAgICAgICBzZWxlY3RvclNlY3Rpb24uZWxlbWVu
dC5hcHBlbmRDaGlsZChzZWxlY3Rvckxpc3RFbGVtZW50KTsKKworICAgICAgICB0aGlzLl9zZWxl
Y3RvcnMgPSBuZXcgV2ViSW5zcGVjdG9yLlRyZWVPdXRsaW5lKHNlbGVjdG9yTGlzdEVsZW1lbnQp
OworICAgICAgICB0aGlzLl9zZWxlY3RvcnMub25zZWxlY3QgPSB0aGlzLl9zZWxlY3RvckNoYW5n
ZWQuYmluZCh0aGlzKTsKKyAgICAgICAgdGhpcy5fZm9jdXNOZXh0TmV3SW5zcGVjdG9yUnVsZSA9
IGZhbHNlOworCisgICAgICAgIHdyYXBwZWRTVkdEb2N1bWVudCgiSW1hZ2VzL1BsdXMuc3ZnIiwg
InZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uLWFkZC1ydWxlIiwgV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJDbGljayB0byBhZGQgYSBuZXcgcnVsZS4iKSwgZnVuY3Rpb24od3JhcHBlcikgewor
ICAgICAgICAgICAgd3JhcHBlci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX2FkZE5l
d1J1bGUuYmluZCh0aGlzKSk7CisgICAgICAgICAgICBjb250cm9sRWxlbWVudC5hcHBlbmRDaGls
ZCh3cmFwcGVyKTsKKyAgICAgICAgfS5iaW5kKHRoaXMpKTsKKworICAgICAgICB0aGlzLl9oZWFk
ZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsIHRoaXMuX2hhbmRsZU1vdXNl
T3Zlci5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5faGVhZGVyRWxlbWVudC5hZGRFdmVudExp
c3RlbmVyKCJtb3VzZW91dCIsIHRoaXMuX2hhbmRsZU1vdXNlT3V0LmJpbmQodGhpcykpOworICAg
IH0KKworICAgIC8vIFB1YmxpYworCisgICAgdXBkYXRlKG5vZGVTdHlsZXMpCisgICAgeworICAg
ICAgICBsZXQgc3R5bGUgPSB0aGlzLmN1cnJlbnRTdHlsZSgpOworICAgICAgICBpZiAoc3R5bGUp
CisgICAgICAgICAgICB0aGlzLl9ub2RlU3R5bGVzW1dlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNl
bGVjdG9yU2VjdGlvbi5MYXN0U2VsZWN0ZWRSdWxlU3ltYm9sXSA9IHN0eWxlOworCisgICAgICAg
IGlmIChub2RlU3R5bGVzKQorICAgICAgICAgICAgdGhpcy5fbm9kZVN0eWxlcyA9IG5vZGVTdHls
ZXM7CisKKyAgICAgICAgaWYgKCF0aGlzLl9ub2RlU3R5bGVzKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIHRoaXMuX3NlbGVjdG9ycy5yZW1vdmVDaGlsZHJlbigpOworICAgICAgICBs
ZXQgcHJldmlvdXNSdWxlID0gbnVsbDsKKworICAgICAgICAvLyBQc2V1ZG8gU3R5bGVzCisgICAg
ICAgIGxldCBwc2V1ZG9SdWxlcyA9IFtdOworICAgICAgICBsZXQgcHNldWRvRWxlbWVudHMgPSB0
aGlzLl9ub2RlU3R5bGVzLnBzZXVkb0VsZW1lbnRzOworICAgICAgICBmb3IgKGxldCBwc2V1ZG9J
ZGVudGlmaWVyIGluIHBzZXVkb0VsZW1lbnRzKQorICAgICAgICAgICAgcHNldWRvUnVsZXMgPSBw
c2V1ZG9SdWxlcy5jb25jYXQocHNldWRvRWxlbWVudHNbcHNldWRvSWRlbnRpZmllcl0ubWF0Y2hl
ZFJ1bGVzKTsKKworICAgICAgICBsZXQgb3JkZXJlZFBzZXVkb1J1bGVzID0gdW5pcXVlT3JkZXJl
ZFJ1bGVzKHBzZXVkb1J1bGVzKTsKKyAgICAgICAgLy8gUmV2ZXJzZSB0aGUgYXJyYXkgdG8gYWxs
b3cgZW5zdXJlIHRoYXQgc3BsaWNpbmcgdGhlIGFycmF5IHdpbGwgbm90IG1lc3Mgd2l0aCB0aGUg
b3JkZXIuCisgICAgICAgIGlmIChvcmRlcmVkUHNldWRvUnVsZXMubGVuZ3RoKQorICAgICAgICAg
ICAgb3JkZXJlZFBzZXVkb1J1bGVzLnJldmVyc2UoKTsKKworICAgICAgICBmdW5jdGlvbiBjcmVh
dGVTZWxlY3Rvckl0ZW0oc3R5bGUsIHRpdGxlLCBzdWJ0aXRsZSkgeworICAgICAgICAgICAgbGV0
IHNlbGVjdG9yID0gbmV3IFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yVHJlZUl0ZW0o
c3R5bGUsIHRpdGxlLCBzdWJ0aXRsZSk7CisgICAgICAgICAgICBzZWxlY3Rvci5hZGRFdmVudExp
c3RlbmVyKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yVHJlZUl0ZW0uRXZlbnQuU3R5
bGVUZXh0UmVzZXQsIHRoaXMuX3N0eWxlVGV4dFJlc2V0LCB0aGlzKTsKKyAgICAgICAgICAgIHNl
bGVjdG9yLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JU
cmVlSXRlbS5FdmVudC5DaGVja2JveENoYW5nZWQsIHRoaXMuX3RyZWVFbGVtZW50Q2hlY2tib3hU
b2dnbGVkLCB0aGlzKTsKKyAgICAgICAgICAgIHRoaXMuX3NlbGVjdG9ycy5hcHBlbmRDaGlsZChz
ZWxlY3Rvcik7CisKKyAgICAgICAgICAgIGlmICh0aGlzLl9mb2N1c05leHROZXdJbnNwZWN0b3JS
dWxlICYmIHN0eWxlLm93bmVyUnVsZSAmJiBzdHlsZS5vd25lclJ1bGUudHlwZSA9PT0gV2ViSW5z
cGVjdG9yLkNTU1J1bGUuVHlwZS5JbnNwZWN0b3IpIHsKKyAgICAgICAgICAgICAgICBzZWxlY3Rv
ci5zZWxlY3QodHJ1ZSk7CisgICAgICAgICAgICAgICAgc2VsZWN0b3IuZWxlbWVudC5zY3JvbGxJ
bnRvVmlldygpOworICAgICAgICAgICAgICAgIHRoaXMuX25vZGVTdHlsZXNbV2ViSW5zcGVjdG9y
LlZpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLkxhc3RTZWxlY3RlZFJ1bGVTeW1ib2xdID0gc3R5
bGU7CisgICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNOZXh0TmV3SW5zcGVjdG9yUnVsZSA9IGZh
bHNlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKHRoaXMuX25vZGVTdHlsZXNbV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JT
ZWN0aW9uLkxhc3RTZWxlY3RlZFJ1bGVTeW1ib2xdID09PSBzdHlsZSkgeworICAgICAgICAgICAg
ICAgIHNlbGVjdG9yLnNlbGVjdCh0cnVlKTsKKyAgICAgICAgICAgICAgICBzZWxlY3Rvci5lbGVt
ZW50LnNjcm9sbEludG9WaWV3KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBmdW5jdGlvbiB1bmlxdWVPcmRlcmVkUnVsZXMob3JkZXJlZFJ1bGVzKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoIW9yZGVyZWRSdWxlcyB8fCAhb3JkZXJlZFJ1bGVzLmxlbmd0aCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5OworCisgICAgICAgICAgICBsZXQgdW5pcXVl
UnVsZXMgPSBuZXcgTWFwOworICAgICAgICAgICAgZm9yIChsZXQgcnVsZSBvZiBvcmRlcmVkUnVs
ZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXVuaXF1ZVJ1bGVzLmhhcyhydWxlLmlkKSkKKyAg
ICAgICAgICAgICAgICAgICAgdW5pcXVlUnVsZXMuc2V0KHJ1bGUuaWQsIHJ1bGUpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odW5pcXVlUnVsZXMudmFsdWVz
KCkpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gaW5zZXJ0QWxsTWF0Y2hpbmdQc2V1
ZG9SdWxlcyhmb3JjZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFvcmRlcmVkUHNldWRv
UnVsZXMubGVuZ3RoKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYg
KGZvcmNlKSB7CisgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IG9yZGVyZWRQc2V1ZG9SdWxl
cy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICAgICAgICAgICAgICBsZXQgcHNl
dWRvUnVsZSA9IG9yZGVyZWRQc2V1ZG9SdWxlc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgY3Jl
YXRlU2VsZWN0b3JJdGVtLmNhbGwodGhpcywgcHNldWRvUnVsZS5zdHlsZSwgcHNldWRvUnVsZS5z
ZWxlY3RvclRleHQsIHBzZXVkb1J1bGUubWVkaWFUZXh0KTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgb3JkZXJlZFBzZXVkb1J1bGVzID0gW107CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghcHJldmlvdXNSdWxlKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAgICAgZm9yIChsZXQgaSA9IG9yZGVyZWRQc2V1ZG9SdWxlcy5sZW5ndGggLSAx
OyBpID49IDA7IC0taSkgeworICAgICAgICAgICAgICAgIGxldCBwc2V1ZG9SdWxlID0gb3JkZXJl
ZFBzZXVkb1J1bGVzW2ldOworICAgICAgICAgICAgICAgIGlmICghcHNldWRvUnVsZS5zZWxlY3Rv
cklzR3JlYXRlcihwcmV2aW91c1J1bGUubW9zdFNwZWNpZmljU2VsZWN0b3IpKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGNyZWF0ZVNlbGVjdG9ySXRl
bS5jYWxsKHRoaXMsIHBzZXVkb1J1bGUuc3R5bGUsIHBzZXVkb1J1bGUuc2VsZWN0b3JUZXh0LCBw
c2V1ZG9SdWxlLm1lZGlhVGV4dCk7CisgICAgICAgICAgICAgICAgcHJldmlvdXNSdWxlID0gcHNl
dWRvUnVsZTsKKyAgICAgICAgICAgICAgICBvcmRlcmVkUHNldWRvUnVsZXMuc3BsaWNlKGksIDEp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCF0aGlzLl9ub2RlU3R5
bGVzW1dlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5MYXN0U2VsZWN0ZWRS
dWxlU3ltYm9sXSkKKyAgICAgICAgICAgIHRoaXMuX25vZGVTdHlsZXNbV2ViSW5zcGVjdG9yLlZp
c3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLkxhc3RTZWxlY3RlZFJ1bGVTeW1ib2xdID0gdGhpcy5f
bm9kZVN0eWxlcy5pbmxpbmVTdHlsZTsKKworICAgICAgICAvLyBJbmxpbmUgU3R5bGUKKyAgICAg
ICAgY3JlYXRlU2VsZWN0b3JJdGVtLmNhbGwodGhpcywgdGhpcy5fbm9kZVN0eWxlcy5pbmxpbmVT
dHlsZSwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJUaGlzIEVsZW1lbnQiKSk7CisKKyAgICAgICAg
Ly8gTWF0Y2hlZCBSdWxlcworICAgICAgICBmb3IgKGxldCBydWxlIG9mIHVuaXF1ZU9yZGVyZWRS
dWxlcyh0aGlzLl9ub2RlU3R5bGVzLm1hdGNoZWRSdWxlcykpIHsKKyAgICAgICAgICAgIGlmIChy
dWxlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5DU1NSdWxlLlR5cGUuVXNlckFnZW50KSB7CisgICAg
ICAgICAgICAgICAgaW5zZXJ0QWxsTWF0Y2hpbmdQc2V1ZG9SdWxlcy5jYWxsKHRoaXMsIHRydWUp
OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpbnNlcnRBbGxNYXRjaGluZ1BzZXVkb1J1bGVzLmNhbGwodGhpcyk7CisgICAgICAgICAgICBj
cmVhdGVTZWxlY3Rvckl0ZW0uY2FsbCh0aGlzLCBydWxlLnN0eWxlLCBydWxlLnNlbGVjdG9yVGV4
dCwgcnVsZS5tZWRpYVRleHQpOworICAgICAgICAgICAgcHJldmlvdXNSdWxlID0gcnVsZTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIEp1c3QgaW4gY2FzZSB0aGVyZSBhcmUgYW55IHJlbWFpbmlu
ZyBwc2V1ZG8tc3R5bGVzLgorICAgICAgICBpbnNlcnRBbGxNYXRjaGluZ1BzZXVkb1J1bGVzLmNh
bGwodGhpcywgdHJ1ZSk7CisKKyAgICAgICAgLy8gSW5oZXJpdGVkIFJ1bGVzCisgICAgICAgIGZv
ciAobGV0IGluaGVyaXRlZCBvZiB0aGlzLl9ub2RlU3R5bGVzLmluaGVyaXRlZFJ1bGVzKSB7Cisg
ICAgICAgICAgICBpZiAoIWluaGVyaXRlZC5tYXRjaGVkUnVsZXMgfHwgIWluaGVyaXRlZC5tYXRj
aGVkUnVsZXMubGVuZ3RoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAg
ICBsZXQgZGl2aWRlclRleHQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkluaGVyaXRlZCBmcm9t
ICVzIikuZm9ybWF0KFdlYkluc3BlY3Rvci5kaXNwbGF5TmFtZUZvck5vZGUoaW5oZXJpdGVkLm5v
ZGUpKTsKKyAgICAgICAgICAgIGxldCBkaXZpZGVyID0gbmV3IFdlYkluc3BlY3Rvci5HZW5lcmFs
VHJlZUVsZW1lbnQoInNlY3Rpb24tZGl2aWRlciIsIGRpdmlkZXJUZXh0KTsKKyAgICAgICAgICAg
IGRpdmlkZXIuc2VsZWN0YWJsZSA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5fc2VsZWN0b3Jz
LmFwcGVuZENoaWxkKGRpdmlkZXIpOworCisgICAgICAgICAgICBmb3IgKGxldCBydWxlIG9mIHVu
aXF1ZU9yZGVyZWRSdWxlcyhpbmhlcml0ZWQubWF0Y2hlZFJ1bGVzKSkgeworICAgICAgICAgICAg
ICAgIGlmIChydWxlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5DU1NSdWxlLlR5cGUuVXNlckFnZW50
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGNyZWF0
ZVNlbGVjdG9ySXRlbS5jYWxsKHRoaXMsIHJ1bGUuc3R5bGUsIHJ1bGUuc2VsZWN0b3JUZXh0LCBy
dWxlLm1lZGlhVGV4dCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0aGlz
Ll9mb2N1c05leHROZXdJbnNwZWN0b3JSdWxlID0gZmFsc2U7CisgICAgfQorCisgICAgY3VycmVu
dFN0eWxlKCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fbm9kZVN0eWxlcyB8fCAhdGhpcy5f
c2VsZWN0b3JzLnNlbGVjdGVkVHJlZUVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdG9ycy5zZWxlY3RlZFRyZWVFbGVtZW50LnJlcHJlc2Vu
dGVkT2JqZWN0OworICAgIH0KKworICAgIC8vIFByaXZhdGUKKworICAgIF9zZWxlY3RvckNoYW5n
ZWQoc2VsZWN0ZWRUcmVlRWxlbWVudCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHNl
bGVjdGVkVHJlZUVsZW1lbnQpOworICAgICAgICBpZiAoIXNlbGVjdGVkVHJlZUVsZW1lbnQpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gVGhlIGNsYXNzIG5lZWRzIHRvIGJlIGNv
bXBsZXRlbHkgcmVzZXQgYXMgdGhlIHByZXZpb3VzbHkgc2VsZWN0ZWQgdHJlZUVsZW1lbnQgbW9z
dCBsaWtlbHkgaGFkCisgICAgICAgIC8vIGEgZGlmZmVyZW50IGljb24gY2xhc3NOYW1lIGFuZCBp
dCBpcyBzaW1wbGVyIHRvIHJlZ2VuZXJhdGUgdGhlIGNsYXNzIHRoYW4gdG8gZmluZCBvdXQgd2hp
Y2gKKyAgICAgICAgLy8gY2xhc3Mgd2FzIHByZXZpb3VzbHkgYXBwbGllZC4KKyAgICAgICAgdGhp
cy5fY3VycmVudFNlbGVjdG9yRWxlbWVudC5jbGFzc05hbWUgPSAiY3VycmVudC1zZWxlY3RvciAi
ICsgc2VsZWN0ZWRUcmVlRWxlbWVudC5pY29uQ2xhc3NOYW1lOworCisgICAgICAgIGxldCBzZWxl
Y3RvclRleHQgPSBzZWxlY3RlZFRyZWVFbGVtZW50Lm1haW5UaXRsZTsKKyAgICAgICAgbGV0IG1l
ZGlhVGV4dCA9IHNlbGVjdGVkVHJlZUVsZW1lbnQuc3VidGl0bGU7CisgICAgICAgIGlmIChtZWRp
YVRleHQgJiYgbWVkaWFUZXh0Lmxlbmd0aCkKKyAgICAgICAgICAgIHNlbGVjdG9yVGV4dCArPSAi
IFx1MjAxNCAiICsgbWVkaWFUZXh0OworCisgICAgICAgIHRoaXMuX2N1cnJlbnRTZWxlY3RvclRl
eHQudGV4dENvbnRlbnQgPSBzZWxlY3RvclRleHQ7CisKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2
ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLkV2
ZW50LlNlbGVjdG9yQ2hhbmdlZCk7CisgICAgfQorCisgICAgX3N0eWxlVGV4dFJlc2V0KCkKKyAg
ICB7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5W
aXN1YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5FdmVudC5TdHlsZVRleHRDaGFuZ2VkKTsKKyAgICB9
CisKKyAgICBfYWRkTmV3UnVsZShldmVudCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fbm9k
ZVN0eWxlcykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLl9ub2RlU3R5bGVz
LmFkZEVtcHR5UnVsZSgpOworICAgICAgICB0aGlzLl9mb2N1c05leHROZXdJbnNwZWN0b3JSdWxl
ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBfdHJlZUVsZW1lbnRDaGVja2JveFRvZ2dsZWQoZXZlbnQp
CisgICAgeworICAgICAgICBsZXQgc3R5bGUgPSB0aGlzLmN1cnJlbnRTdHlsZSgpOworICAgICAg
ICBpZiAoIXN0eWxlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGxldCBzdHlsZVRl
eHQgPSBzdHlsZS50ZXh0OworICAgICAgICBpZiAoIXN0eWxlVGV4dCB8fCAhc3R5bGVUZXh0Lmxl
bmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBDb21tZW50IG9yIHVuY29t
bWVudCB0aGUgc3R5bGUgdGV4dC4KKyAgICAgICAgbGV0IG5ld1N0eWxlVGV4dCA9ICIiOworICAg
ICAgICBsZXQgc3R5bGVFbmFibGVkID0gZXZlbnQgJiYgZXZlbnQuZGF0YSAmJiBldmVudC5kYXRh
LmVuYWJsZWQ7CisgICAgICAgIGlmIChzdHlsZUVuYWJsZWQpCisgICAgICAgICAgICBuZXdTdHls
ZVRleHQgPSBzdHlsZVRleHQucmVwbGFjZSgvXHMqKFwvXCp8XCpcLylccyovZywgIiIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBuZXdTdHlsZVRleHQgPSAiLyogIiArIHN0eWxlVGV4dC5y
ZXBsYWNlKC8oXHMqOyg/ISQpXHMqKS9nLCAiJDEgKi8vKiAiKSArICIgKi8iOworCisgICAgICAg
IHN0eWxlLnRleHQgPSBuZXdTdHlsZVRleHQ7CisgICAgICAgIHN0eWxlW1dlYkluc3BlY3Rvci5W
aXN1YWxTdHlsZURldGFpbHNQYW5lbC5TdHlsZURpc2FibGVkU3ltYm9sXSA9ICFzdHlsZUVuYWJs
ZWQ7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5W
aXN1YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5FdmVudC5TZWxlY3RvckNoYW5nZWQpOworCisgICAg
fQorCisgICAgX2hhbmRsZU1vdXNlT3ZlcigpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuY29s
bGFwc2VkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGxldCBzdHlsZSA9IHRoaXMu
Y3VycmVudFN0eWxlKCk7CisgICAgICAgIGlmICghc3R5bGUub3duZXJSdWxlKSB7CisgICAgICAg
ICAgICBXZWJJbnNwZWN0b3IuZG9tVHJlZU1hbmFnZXIuaGlnaGxpZ2h0RE9NTm9kZShzdHlsZS5u
b2RlLmlkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFdlYklu
c3BlY3Rvci5kb21UcmVlTWFuYWdlci5oaWdobGlnaHRTZWxlY3RvcihzdHlsZS5vd25lclJ1bGUu
c2VsZWN0b3JUZXh0LCBzdHlsZS5ub2RlLm93bmVyRG9jdW1lbnQuZnJhbWVJZGVudGlmaWVyKTsK
KyAgICB9CisKKyAgICBfaGFuZGxlTW91c2VPdXQoKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlz
LmNvbGxhcHNlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBXZWJJbnNwZWN0b3Iu
ZG9tVHJlZU1hbmFnZXIuaGlkZURPTU5vZGVIaWdobGlnaHQoKTsKKyAgICB9Cit9OworCitXZWJJ
bnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24uTGFzdFNlbGVjdGVkUnVsZVN5bWJv
bCA9IFN5bWJvbCgidmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24tbGFzdC1zZWxlY3RlZC1y
dWxlIik7CisKK1dlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5FdmVudCA9
IHsKKyAgICBTZWxlY3RvckNoYW5nZWQ6ICJ2aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbi1z
ZWxlY3Rvci1jaGFuZ2VkIiwKKyAgICBTdHlsZVRleHRDaGFuZ2VkOiAidmlzdWFsLXN0eWxlLXNl
bGVjdG9yLXNlY3Rpb24tc3R5bGUtdGV4dC1jaGFuZ2VkIgorfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVmlzdWFsU3R5bGVTZWxlY3RvclRy
ZWVJdGVtLmNzcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Zp
c3VhbFN0eWxlU2VsZWN0b3JUcmVlSXRlbS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGU0MmY0MmUwMTE2Yzc0
ZjUyNTk0MzUzZDcwYjIyOWZkNjA4MDMzZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Zpc3VhbFN0eWxlU2VsZWN0b3JUcmVlSXRl
bS5jc3MKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisuaXRlbS52aXN1YWwtc3R5bGUt
c2VsZWN0b3ItaXRlbSB7CisgICAgZGlzcGxheTogZmxleDsKKyAgICB3aWR0aDogMTAwJTsKKyAg
ICBoZWlnaHQ6IDI1cHg7CisgICAgcGFkZGluZzogMnB4IDA7CisgICAgbGluZS1oZWlnaHQ6IDIw
cHg7CisgICAgZm9udC1zaXplOiAxMXB4OworfQorCisuaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0
b3ItaXRlbS5zZWxlY3RlZCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogaHNsKDIxMywgOTIlLCA1
NSUpICFpbXBvcnRhbnQ7CisgICAgY29sb3I6IGhzbCgwLCAxMDAlLCAxMDAlKTsKK30KKworLml0
ZW0udmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0gPiAuZGlzY2xvc3VyZS1idXR0b24geworICAg
IGRpc3BsYXk6IG5vbmU7Cit9CisKKy5pdGVtLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtID4g
aW5wdXRbdHlwZT0iY2hlY2tib3giXSB7CisgICAgbWFyZ2luOiA0LjVweCAwIDRweCA1cHg7Cit9
CisKKy5pdGVtLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtID4gLmljb24geworICAgIHdpZHRo
OiAxNnB4OworICAgIGhlaWdodDogMTZweDsKKyAgICBtYXJnaW46IDIuNXB4IDAgMi41cHggNHB4
OworfQorCisuaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbS5tb2RpZmllZCA+IC5pY29u
IHsKKyAgICAtd2Via2l0LWZpbHRlcjogYnJpZ2h0bmVzcygwLjc1KTsKK30KKworLml0ZW0udmlz
dWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0uc2VsZWN0b3ItaW52YWxpZCA+IC5pY29uIHsKKyAgICB3
aWR0aDogMTRweDsKKyAgICBoZWlnaHQ6IDE0cHg7CisgICAgbWFyZ2luOiAzLjVweCAwIDMuNXB4
IDVweDsKKyAgICBjb250ZW50OiB1cmwoLi4vSW1hZ2VzL0Vycm9yLnN2Zyk7Cit9CisKKy5pdGVt
LnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtLnNlbGVjdG9yLWludmFsaWQgPiAudGl0bGVzID4g
LnRpdGxlIHsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cit9CisKKy5pdGVtLnZpc3VhbC1zdHls
ZS1zZWxlY3Rvci1pdGVtLnNlbGVjdG9yLWludmFsaWQgPiAudGl0bGVzID4gLnRpdGxlOjpiZWZv
cmUgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IGNhbGMoNTAlIC0gMC41cHgp
OworICAgIGxlZnQ6IDA7CisgICAgd2lkdGg6IDEwMCU7CisgICAgYm9yZGVyLWJvdHRvbTogMXB4
IHNvbGlkIGhzbGEoMCwgMTAwJSwgNTAlLCAwLjYpOworICAgIGNvbnRlbnQ6ICIiOworfQorCisu
aXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbSA+IC50aXRsZXMgeworICAgIG92ZXJmbG93
OiBoaWRkZW47CisgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKKyAgICB0ZXh0LW92ZXJmbG93OiBl
bGxpcHNpczsKKyAgICBwYWRkaW5nOiAwIDJweCAwIDNweDsKK30KKworLml0ZW0udmlzdWFsLXN0
eWxlLXNlbGVjdG9yLWl0ZW06bm90KC5kb20tZWxlbWVudC1pY29uKSA+IC50aXRsZXMgPiAudGl0
bGUgeworICAgIHBhZGRpbmc6IDAgMXB4IDJweDsKKyAgICBsaW5lLWhlaWdodDogMTJweDsKKyAg
ICBvdXRsaW5lOiBub25lOworfQorCisuaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbTpu
b3QoLmRvbS1lbGVtZW50LWljb24pLmVkaXRhYmxlID4gLnRpdGxlcyA+IC50aXRsZSB7CisgICAg
Y3Vyc29yOiB0ZXh0OworICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IHRleHQ7CisgICAgLXdlYmtp
dC11c2VyLW1vZGlmeTogcmVhZC13cml0ZS1wbGFpbnRleHQtb25seTsKK30KKworLml0ZW0udmlz
dWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW06bm90KC5kb20tZWxlbWVudC1pY29uKS5lZGl0YWJsZSA+
IC50aXRsZXMgPiAudGl0bGU6Zm9jdXMgeworICAgIGNvbG9yOiBibGFjazsKKyAgICBiYWNrZ3Jv
dW5kLWNvbG9yOiBoc2woMCwgMTAwJSwgMTAwJSk7CisgICAgYm9yZGVyLXJhZGl1czogMnB4Owor
ICAgIGJveC1zaGFkb3c6IGhzbGEoMCwgMCUsIDAlLCAwLjE1KSAwIDFweCAwLCAwIDAgMCAzcHgg
aHNsYSgwLCAxMDAlLCAxMDAlLCAwLjMpOworfQorCisuaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0
b3ItaXRlbSA+IC50aXRsZXMgPiAuc3VidGl0bGU6OmJlZm9yZSB7CisgICAgbWFyZ2luLXJpZ2h0
OiA1cHg7CisgICAgZm9udC1zaXplOiAxMXB4OworICAgIC8qIFRoZSBleHRyYSBzcGFjZSBhdCB0
aGUgYmVnaW5uaW5nIGlzIG5lY2Vzc2FyeSB0byBwcmV2ZW50IHRoZSAtd2Via2l0LXVzZXItbW9k
aWZ5CisgICAgY3Vyc29yIGJhciBmcm9tIGRpc3BsYXlpbmcgYXQgdGhlIGJlZ2lubmluZyBvZiB0
aGUgZW0tZGFzaC4gKi8KKyAgICBjb250ZW50OiAiIFwyMDE0IjsgLyogZW0tZGFzaCAqLworfQor
CisuaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbSA+IC50aXRsZXMgPiAuc3VidGl0bGUg
eworICAgIGZvbnQtc2l6ZTogOXB4OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVmlzdWFsU3R5bGVTZWxlY3RvclRyZWVJdGVtLmpzIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVmlzdWFsU3R5bGVTZWxl
Y3RvclRyZWVJdGVtLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA0OWEwNGFhZmJlODVkZmRhNDBmMGYzZmUxYzUw
ZjYwYjVhZDk1MjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9WaWV3cy9WaXN1YWxTdHlsZVNlbGVjdG9yVHJlZUl0ZW0uanMKQEAgLTAsMCAr
MSwyMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3RvclRy
ZWVJdGVtID0gY2xhc3MgVmlzdWFsU3R5bGVTZWxlY3RvclRyZWVJdGVtIGV4dGVuZHMgV2ViSW5z
cGVjdG9yLkdlbmVyYWxUcmVlRWxlbWVudAoreworICAgIGNvbnN0cnVjdG9yKHN0eWxlLCB0aXRs
ZSwgc3VidGl0bGUpCisgICAgeworICAgICAgICBsZXQgaWNvbkNsYXNzTmFtZTsKKyAgICAgICAg
c3dpdGNoIChzdHlsZS50eXBlKSB7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNTU1N0eWxl
RGVjbGFyYXRpb24uVHlwZS5SdWxlOgorICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoc3R5bGUu
b3duZXJSdWxlIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkNTU1J1bGUsIHN0eWxlLm93bmVyUnVs
ZSk7CisKKyAgICAgICAgICAgIGlmIChzdHlsZS5pbmhlcml0ZWQpCisgICAgICAgICAgICAgICAg
aWNvbkNsYXNzTmFtZSA9IFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uU2VjdGlvbi5J
bmhlcml0ZWRTdHlsZVJ1bGVJY29uU3R5bGVDbGFzc05hbWU7CisgICAgICAgICAgICBlbHNlIGlm
IChzdHlsZS5vd25lclJ1bGUudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkNTU1J1bGUuVHlwZS5BdXRo
b3IpCisgICAgICAgICAgICAgICAgaWNvbkNsYXNzTmFtZSA9IFdlYkluc3BlY3Rvci5DU1NTdHls
ZURlY2xhcmF0aW9uU2VjdGlvbi5BdXRob3JTdHlsZVJ1bGVJY29uU3R5bGVDbGFzc05hbWU7Cisg
ICAgICAgICAgICBlbHNlIGlmIChzdHlsZS5vd25lclJ1bGUudHlwZSA9PT0gV2ViSW5zcGVjdG9y
LkNTU1J1bGUuVHlwZS5Vc2VyKQorICAgICAgICAgICAgICAgIGljb25DbGFzc05hbWUgPSBXZWJJ
bnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblNlY3Rpb24uVXNlclN0eWxlUnVsZUljb25TdHls
ZUNsYXNzTmFtZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLm93bmVyUnVsZS50eXBlID09
PSBXZWJJbnNwZWN0b3IuQ1NTUnVsZS5UeXBlLlVzZXJBZ2VudCkKKyAgICAgICAgICAgICAgICBp
Y29uQ2xhc3NOYW1lID0gV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb25TZWN0aW9uLlVz
ZXJBZ2VudFN0eWxlUnVsZUljb25TdHlsZUNsYXNzTmFtZTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KHN0eWxlLm93bmVyUnVsZS50eXBlID09PSBXZWJJbnNwZWN0b3IuQ1NTUnVsZS5UeXBlLkluc3Bl
Y3RvcikKKyAgICAgICAgICAgICAgICBpY29uQ2xhc3NOYW1lID0gV2ViSW5zcGVjdG9yLkNTU1N0
eWxlRGVjbGFyYXRpb25TZWN0aW9uLkluc3BlY3RvclN0eWxlUnVsZUljb25TdHlsZUNsYXNzTmFt
ZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNTU1N0
eWxlRGVjbGFyYXRpb24uVHlwZS5JbmxpbmU6CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNT
U1N0eWxlRGVjbGFyYXRpb24uVHlwZS5BdHRyaWJ1dGU6CisgICAgICAgICAgICBpZiAoc3R5bGUu
aW5oZXJpdGVkKQorICAgICAgICAgICAgICAgIGljb25DbGFzc05hbWUgPSBXZWJJbnNwZWN0b3Iu
Q1NTU3R5bGVEZWNsYXJhdGlvblNlY3Rpb24uSW5oZXJpdGVkRWxlbWVudFN0eWxlUnVsZUljb25T
dHlsZUNsYXNzTmFtZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpY29uQ2xh
c3NOYW1lID0gV2ViSW5zcGVjdG9yLkRPTVRyZWVFbGVtZW50UGF0aENvbXBvbmVudC5ET01FbGVt
ZW50SWNvblN0eWxlQ2xhc3NOYW1lOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICB0aXRsZSA9IHRpdGxlLnRyaW0oKTsKKworICAgICAgICBzdXBlcihbInZpc3VhbC1z
dHlsZS1zZWxlY3Rvci1pdGVtIiwgaWNvbkNsYXNzTmFtZV0sIHRpdGxlLCBzdWJ0aXRsZSwgc3R5
bGUpOworCisgICAgICAgIHRoaXMuX2ljb25DbGFzc05hbWUgPSBpY29uQ2xhc3NOYW1lOworICAg
ICAgICB0aGlzLl9sYXN0VmFsdWUgPSB0aXRsZTsKKyAgICAgICAgdGhpcy5fZW5hYmxlRWRpdGlu
ZyA9IHRydWU7CisgICAgfQorCisgICAgLy8gUHVibGljCisKKyAgICBnZXQgaWNvbkNsYXNzTmFt
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5faWNvbkNsYXNzTmFtZTsKKyAgICB9CisK
KyAgICAvLyBQcm90ZWN0ZWQKKworICAgIG9uYXR0YWNoKCkKKyAgICB7CisgICAgICAgIHN1cGVy
Lm9uYXR0YWNoKCk7CisKKyAgICAgICAgdGhpcy5fbGlzdEl0ZW1Ob2RlLmFkZEV2ZW50TGlzdGVu
ZXIoIm1vdXNlb3ZlciIsIHRoaXMuX2hpZ2hsaWdodE5vZGVzV2l0aFNlbGVjdG9yLmJpbmQodGhp
cykpOworICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vv
dXQiLCB0aGlzLl9oaWRlRE9NTm9kZUhpZ2hsaWdodC5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhp
cy5fbGlzdEl0ZW1Ob2RlLmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IiwgdGhpcy5faGFu
ZGxlQ29udGV4dE1lbnVFdmVudC5iaW5kKHRoaXMpKTsKKworICAgICAgICB0aGlzLl9jaGVja2Jv
eEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOworICAgICAgICB0aGlz
Ll9jaGVja2JveEVsZW1lbnQudHlwZSA9ICJjaGVja2JveCI7CisgICAgICAgIHRoaXMuX2NoZWNr
Ym94RWxlbWVudC5jaGVja2VkID0gIXRoaXMucmVwcmVzZW50ZWRPYmplY3RbV2ViSW5zcGVjdG9y
LlZpc3VhbFN0eWxlRGV0YWlsc1BhbmVsLlN0eWxlRGlzYWJsZWRTeW1ib2xdOworICAgICAgICB0
aGlzLl91cGRhdGVDaGVja2JveFRpdGxlKCk7CisgICAgICAgIHRoaXMuX2NoZWNrYm94RWxlbWVu
dC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCB0aGlzLl9oYW5kbGVDaGVja2JveENoYW5nZWQu
YmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX2xpc3RJdGVtTm9kZS5pbnNlcnRCZWZvcmUodGhp
cy5fY2hlY2tib3hFbGVtZW50LCB0aGlzLl9pY29uRWxlbWVudCk7CisKKyAgICAgICAgdGhpcy5f
bWFpblRpdGxlRWxlbWVudC5zcGVsbGNoZWNrID0gZmFsc2U7CisgICAgICAgIHRoaXMuX21haW5U
aXRsZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgdGhpcy5faGFuZGxlTWFp
blRpdGxlTW91c2VEb3duLmJpbmQodGhpcykpOworICAgICAgICB0aGlzLl9tYWluVGl0bGVFbGVt
ZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLl9oYW5kbGVNYWluVGl0bGVLZXlE
b3duLmJpbmQodGhpcykpOworICAgICAgICB0aGlzLl9tYWluVGl0bGVFbGVtZW50LmFkZEV2ZW50
TGlzdGVuZXIoImtleXVwIiwgdGhpcy5faGlnaGxpZ2h0Tm9kZXNXaXRoU2VsZWN0b3IuYmluZCh0
aGlzKSk7CisgICAgICAgIHRoaXMuX21haW5UaXRsZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigi
Ymx1ciIsIHRoaXMuX2NvbW1pdFNlbGVjdG9yLmJpbmQodGhpcykpOworCisgICAgICAgIHRoaXMu
cmVwcmVzZW50ZWRPYmplY3QuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQ1NTU3R5bGVE
ZWNsYXJhdGlvbi5FdmVudC5Jbml0aWFsVGV4dE1vZGlmaWVkLCB0aGlzLl9zdHlsZVRleHRNb2Rp
ZmllZCwgdGhpcyk7CisgICAgICAgIGlmICh0aGlzLnJlcHJlc2VudGVkT2JqZWN0Lm93bmVyUnVs
ZSkKKyAgICAgICAgICAgIHRoaXMucmVwcmVzZW50ZWRPYmplY3Qub3duZXJSdWxlLmFkZEV2ZW50
TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkNTU1J1bGUuRXZlbnQuU2VsZWN0b3JDaGFuZ2VkLCB0aGlz
Ll9zZWxlY3RvckNoYW5nZWQsIHRoaXMpOworCisgICAgICAgIHRoaXMuX3N0eWxlVGV4dE1vZGlm
aWVkKCk7CisgICAgfQorCisgICAgb25kZXNlbGVjdCgpCisgICAgeworICAgICAgICB0aGlzLl9s
aXN0SXRlbU5vZGUuY2xhc3NMaXN0LnJlbW92ZSgiZWRpdGFibGUiKTsKKyAgICB9CisKKyAgICAv
LyBQcml2YXRlCisKKyAgICBnZXQgX3NlbGVjdG9yVGV4dCgpCisgICAgeworICAgICAgICBsZXQg
dGl0bGVUZXh0ID0gdGhpcy5fbWFpblRpdGxlRWxlbWVudC50ZXh0Q29udGVudDsKKyAgICAgICAg
aWYgKCF0aXRsZVRleHQgfHwgIXRpdGxlVGV4dC5sZW5ndGgpCisgICAgICAgICAgICB0aXRsZVRl
eHQgPSB0aGlzLl9tYWluVGl0bGU7CisKKyAgICAgICAgcmV0dXJuIHRpdGxlVGV4dC50cmltKCk7
CisgICAgfQorCisgICAgX2hpZ2hsaWdodE5vZGVzV2l0aFNlbGVjdG9yKCkKKyAgICB7CisgICAg
ICAgIGlmICghdGhpcy5yZXByZXNlbnRlZE9iamVjdC5vd25lclJ1bGUpIHsKKyAgICAgICAgICAg
IFdlYkluc3BlY3Rvci5kb21UcmVlTWFuYWdlci5oaWdobGlnaHRET01Ob2RlKHRoaXMucmVwcmVz
ZW50ZWRPYmplY3Qubm9kZS5pZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBXZWJJbnNwZWN0b3IuZG9tVHJlZU1hbmFnZXIuaGlnaGxpZ2h0U2VsZWN0b3IodGhp
cy5fc2VsZWN0b3JUZXh0LCB0aGlzLnJlcHJlc2VudGVkT2JqZWN0Lm5vZGUub3duZXJEb2N1bWVu
dC5mcmFtZUlkZW50aWZpZXIpOworICAgIH0KKworICAgIF9oaWRlRE9NTm9kZUhpZ2hsaWdodCgp
CisgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IuZG9tVHJlZU1hbmFnZXIuaGlkZURPTU5vZGVI
aWdobGlnaHQoKTsKKyAgICB9CisKKyAgICBfaGFuZGxlQ29udGV4dE1lbnVFdmVudChldmVudCkK
KyAgICB7CisgICAgICAgIGxldCBjb250ZXh0TWVudSA9IG5ldyBXZWJJbnNwZWN0b3IuQ29udGV4
dE1lbnUoZXZlbnQpOworCisgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKCJDb3B5IFJ1bGUiKSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBJbnNw
ZWN0b3JGcm9udGVuZEhvc3QuY29weVRleHQodGhpcy5yZXByZXNlbnRlZE9iamVjdC5nZW5lcmF0
ZUNTU1J1bGVTdHJpbmcoKSk7CisgICAgICAgIH0uYmluZCh0aGlzKSk7CisKKyAgICAgICAgY29u
dGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJlc2V0IiksIGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgdGhpcy5yZXByZXNlbnRlZE9iamVjdC5yZXNldFRleHQoKTsK
KyAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5W
aXN1YWxTdHlsZVNlbGVjdG9yVHJlZUl0ZW0uRXZlbnQuU3R5bGVUZXh0UmVzZXQpOworICAgICAg
ICB9LmJpbmQodGhpcykpOworCisgICAgICAgIGNvbnRleHRNZW51LnNob3coKTsKKyAgICB9CisK
KyAgICBfaGFuZGxlQ2hlY2tib3hDaGFuZ2VkKGV2ZW50KQorICAgIHsKKyAgICAgICAgdGhpcy5f
dXBkYXRlQ2hlY2tib3hUaXRsZSgpOworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3Rl
bmVycyhXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3RvclRyZWVJdGVtLkV2ZW50LkNoZWNr
Ym94Q2hhbmdlZCwge2VuYWJsZWQ6IHRoaXMuX2NoZWNrYm94RWxlbWVudC5jaGVja2VkfSk7Cisg
ICAgfQorCisgICAgX3VwZGF0ZUNoZWNrYm94VGl0bGUoKQorICAgIHsKKyAgICAgICAgaWYgKHRo
aXMuX2NoZWNrYm94RWxlbWVudC5jaGVja2VkKQorICAgICAgICAgICAgdGhpcy5fY2hlY2tib3hF
bGVtZW50LnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDbGljayB0byBkaXNhYmxlIHRo
ZSBzZWxlY3RlZCBydWxlIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMuX2NoZWNr
Ym94RWxlbWVudC50aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ2xpY2sgdG8gZW5hYmxl
IHRoZSBzZWxlY3RlZCBydWxlIik7CisgICAgfQorCisgICAgX2hhbmRsZU1haW5UaXRsZU1vdXNl
RG93bihldmVudCkKKyAgICB7CisgICAgICAgIHRoaXMuX2xpc3RJdGVtTm9kZS5jbGFzc0xpc3Qu
dG9nZ2xlKCJlZGl0YWJsZSIsIHRoaXMuc2VsZWN0ZWQpOworICAgIH0KKworICAgIF9oYW5kbGVN
YWluVGl0bGVLZXlEb3duKGV2ZW50KQorICAgIHsKKyAgICAgICAgdGhpcy5faGlnaGxpZ2h0Tm9k
ZXNXaXRoU2VsZWN0b3IoKTsKKworICAgICAgICBsZXQgZW50ZXJLZXlDb2RlID0gV2ViSW5zcGVj
dG9yLktleWJvYXJkU2hvcnRjdXQuS2V5LkVudGVyLmtleUNvZGU7CisgICAgICAgIGlmIChldmVu
dC5rZXlDb2RlID09PSBlbnRlcktleUNvZGUpCisgICAgICAgICAgICB0aGlzLl9tYWluVGl0bGVF
bGVtZW50LmJsdXIoKTsKKyAgICB9CisKKyAgICBfY29tbWl0U2VsZWN0b3IoKQorICAgIHsKKyAg
ICAgICAgdGhpcy5faGlkZURPTU5vZGVIaWdobGlnaHQoKTsKKyAgICAgICAgdGhpcy5fbGlzdEl0
ZW1Ob2RlLmNsYXNzTGlzdC5yZW1vdmUoImVkaXRhYmxlIik7CisKKyAgICAgICAgbGV0IHZhbHVl
ID0gdGhpcy5fc2VsZWN0b3JUZXh0OworICAgICAgICBpZiAodmFsdWUgPT09IHRoaXMuX2xhc3RW
YWx1ZSAmJiB0aGlzLl92YWxpZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlz
LnJlcHJlc2VudGVkT2JqZWN0Lm93bmVyUnVsZS5zZWxlY3RvclRleHQgPSB2YWx1ZTsKKyAgICB9
CisKKyAgICBfc3R5bGVUZXh0TW9kaWZpZWQoKQorICAgIHsKKyAgICAgICAgdGhpcy5fbGlzdEl0
ZW1Ob2RlLmNsYXNzTGlzdC50b2dnbGUoIm1vZGlmaWVkIiwgdGhpcy5yZXByZXNlbnRlZE9iamVj
dC5tb2RpZmllZCk7CisgICAgfQorCisgICAgX3NlbGVjdG9yQ2hhbmdlZChldmVudCkKKyAgICB7
CisgICAgICAgIHRoaXMuX3ZhbGlkID0gZXZlbnQgJiYgZXZlbnQuZGF0YSAmJiBldmVudC5kYXRh
LnZhbGlkOworICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUuY2xhc3NMaXN0LnRvZ2dsZSgic2Vs
ZWN0b3ItaW52YWxpZCIsICF0aGlzLl92YWxpZCk7CisgICAgICAgIGxldCBpbnZhbGlkVGl0bGUg
PSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlRoZSBzZWxlY3RvciAnJXMnIGlzIGludmFsaWQuIiku
Zm9ybWF0KHRoaXMuX3NlbGVjdG9yVGV4dCk7CisgICAgICAgIHRoaXMuX2ljb25FbGVtZW50LnRp
dGxlID0gIXRoaXMuX3ZhbGlkID8gaW52YWxpZFRpdGxlIDogbnVsbDsKKyAgICB9Cit9OworCitX
ZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3RvclRyZWVJdGVtLkV2ZW50ID0geworICAgIFN0
eWxlVGV4dFJlc2V0OiAidmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0tc3R5bGUtdGV4dC1yZXNl
dCIsCisgICAgQ2hlY2tib3hDaGFuZ2VkOiAidmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0tY2hl
Y2tib3gtY2hhbmdlZCIKK307Cg==
</data>
<flag name="review"
          id="283799"
          type_id="1"
          status="+"
          setter="bburg"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258639</attachid>
            <date>2015-08-10 12:49:41 -0700</date>
            <delta_ts>2015-08-10 13:50:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>147572.txt</filename>
            <type>text/plain</type>
            <size>42947</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDMwMGE0YTIuLjUwZjNhYTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDE1LTA4LTEwICBEZXZpbiBSb3Vzc28g
IDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgVmlzdWFs
U3R5bGVTZWxlY3RvclNlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0NzU3MgorCisgICAgICAgIFJldmlld2VkIGJ5IEJyaWFuIEJ1cmcuCisK
KyAgICAgICAgQWRkcyBhIHNlY3Rpb24gdG8gdGhlIG5ldyBWaXN1YWwgc3R5bGUgc2lkZWJhciBw
YW5lbCB0aGF0IGNvbnRhaW5zIHRoZSBsaXN0IG9mCisgICAgICAgIHN0eWxlcyBmb3IgdGhlIGN1
cnJlbnRseSBzZWxlY3RlZCBub2RlLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMv
Q1NTUnVsZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NSdWxlLnByb3RvdHlwZS5nZXQg
bWVkaWFUZXh0KToKKyAgICAgICAgUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBsaXN0
IG9mIG1lZGlhIHF1ZXJpZXMuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9DU1NT
dHlsZURlY2xhcmF0aW9uLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFy
YXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90
eXBlLnNldCB0ZXh0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9u
LnByb3RvdHlwZS5nZXQgbW9kaWZpZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxl
RGVjbGFyYXRpb24ucHJvdG90eXBlLnJlc2V0VGV4dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
Q1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUuZ2VuZXJhdGVDU1NSdWxlU3RyaW5nKToKKyAg
ICAgICAgR2VuZXJhdGVzIGEgZm9ybWF0dGVkIHN0cmluZyBvZiB0aGUgc3R5bGUgdGV4dC4KKwor
ICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvQ1NTU3R5bGVEZWNsYXJhdGlvblNlY3Rpb24u
anM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblNlY3Rpb24ucHJv
dG90eXBlLl9oYW5kbGVDb250ZXh0TWVudUV2ZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5D
U1NTdHlsZURlY2xhcmF0aW9uU2VjdGlvbi5wcm90b3R5cGUuX2dlbmVyYXRlQ1NTUnVsZVN0cmlu
Zyk6IERlbGV0ZWQuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL1Zpc3VhbFN0eWxl
U2VsZWN0b3JTZWN0aW9uLmNzczogQWRkZWQuCisgICAgICAgICguZGV0YWlscy1zZWN0aW9uLnZp
c3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmhlYWRlcik6CisgICAgICAgICguZGV0YWls
cy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uOm5vdCguY29sbGFwc2VkKSA+
IC5oZWFkZXIpOgorICAgICAgICAoQG1lZGlhICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0
aW86IDIpKToKKyAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9y
LXNlY3Rpb24gPiAuaGVhZGVyID4gLmN1cnJlbnQtc2VsZWN0b3IpOgorICAgICAgICAoLnZpc3Vh
bC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uLmRldGFpbHMtc2VjdGlvbjpub3QoLmNvbGxhcHNlZCkg
PiAuaGVhZGVyID4gLmN1cnJlbnQtc2VsZWN0b3IpOgorICAgICAgICAoLmRldGFpbHMtc2VjdGlv
bi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5oZWFkZXIgPiAuY3VycmVudC1zZWxl
Y3RvciA+IC5pY29uKToKKyAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNl
bGVjdG9yLXNlY3Rpb24gPiAuaGVhZGVyID4gLmN1cnJlbnQtc2VsZWN0b3IgPiBzcGFuKToKKyAg
ICAgICAgKC5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24gPiAu
aGVhZGVyID4gLmNvbnRyb2xzKToKKyAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0
eWxlLXNlbGVjdG9yLXNlY3Rpb24uY29sbGFwc2VkID4gLmhlYWRlciA+IC5jb250cm9scyk6Cisg
ICAgICAgICguZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4g
LmhlYWRlciA+IC5jb250cm9scyA+IC52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbi1hZGQt
cnVsZSk6CisgICAgICAgICguZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1z
ZWN0aW9uID4gLmNvbnRlbnQgPiAuc2VsZWN0b3JzKToKKyAgICAgICAgKC5kZXRhaWxzLXNlY3Rp
b24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24gPiAuY29udGVudCA+IC5zZWxlY3RvcnMg
PiAuc2VsZWN0b3ItbGlzdCk6CisgICAgICAgICguZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHls
ZS1zZWxlY3Rvci1zZWN0aW9uID4gLmNvbnRlbnQgPiAuc2VsZWN0b3JzID4gLnNlbGVjdG9yLWxp
c3QgPiAudmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW06bnRoLWNoaWxkKG9kZCkpOgorICAgICAg
ICAoLmRldGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5jb250
ZW50ID4gLnNlbGVjdG9ycyA+IC5zZWxlY3Rvci1saXN0ID4gLnNlY3Rpb24tZGl2aWRlcik6Cisg
ICAgICAgICguZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4g
LmNvbnRlbnQgPiAuc2VsZWN0b3JzID4gLnNlbGVjdG9yLWxpc3QgPiAuc2VjdGlvbi1kaXZpZGVy
ID4gLmljb24pOgorICAgICAgICAoLmRldGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0
b3Itc2VjdGlvbiA+IC5jb250ZW50ID4gLnNlbGVjdG9ycyA+IC5zZWxlY3Rvci1saXN0ID4gLnNl
Y3Rpb24tZGl2aWRlciA+IDptYXRjaGVzKC5kaXNjbG9zdXJlLWJ1dHRvbiwgLmljb24pKToKKyAg
ICAgICAgKC5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24gPiAu
Y29udGVudCA+IC5zZWxlY3RvcnMgPiAuc2VsZWN0b3ItbGlzdCA+IC5zZWN0aW9uLWRpdmlkZXIg
PiAudGl0bGVzID4gLnRpdGxlKToKKyAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0
eWxlLXNlbGVjdG9yLXNlY3Rpb24gPiAuY29udGVudCA+IC5zZWxlY3RvcnMgPiAuc2VsZWN0b3It
bGlzdCA+IC5zZWN0aW9uLWRpdmlkZXIgfiAudmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW06bnRo
LWNoaWxkKGV2ZW4pKToKKyAgICAgICAgKC5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNl
bGVjdG9yLXNlY3Rpb24gPiAuY29udGVudCA+IC5zZWxlY3RvcnMgPiAuc2VsZWN0b3ItbGlzdCA+
IC5zZWN0aW9uLWRpdmlkZXIgfiAudmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW06bnRoLWNoaWxk
KG9kZCkpOgorCisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9WaXN1YWxTdHlsZVNlbGVj
dG9yU2VjdGlvbi5qczogQWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVT
ZWxlY3RvclNlY3Rpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0
b3JTZWN0aW9uLnByb3RvdHlwZS51cGRhdGUuY3JlYXRlU2VsZWN0b3JJdGVtKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5wcm90b3R5cGUudXBkYXRl
LnVuaXF1ZU9yZGVyZWRSdWxlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVT
ZWxlY3RvclNlY3Rpb24ucHJvdG90eXBlLnVwZGF0ZS5pbnNlcnRBbGxNYXRjaGluZ1BzZXVkb1J1
bGVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5w
cm90b3R5cGUudXBkYXRlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVj
dG9yU2VjdGlvbi5wcm90b3R5cGUuY3VycmVudFN0eWxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5WaXN1YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5wcm90b3R5cGUuX3NlbGVjdG9yQ2hhbmdlZCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24ucHJvdG90
eXBlLl9zdHlsZVRleHRSZXNldCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVT
ZWxlY3RvclNlY3Rpb24ucHJvdG90eXBlLl9hZGROZXdSdWxlKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5wcm90b3R5cGUuX3RyZWVFbGVtZW50Q2hl
Y2tib3hUb2dnbGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9y
U2VjdGlvbi5wcm90b3R5cGUuX2hhbmRsZU1vdXNlT3Zlcik6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuVmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24ucHJvdG90eXBlLl9oYW5kbGVNb3VzZU91dCk6
CisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL1Zpc3VhbFN0eWxlU2VsZWN0b3JUcmVl
SXRlbS5jc3M6CisgICAgICAgICguaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbSk6Cisg
ICAgICAgICguaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbS5zZWxlY3RlZCk6CisgICAg
ICAgICguaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbSA+IC5kaXNjbG9zdXJlLWJ1dHRv
bik6CisgICAgICAgICguaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbSA+IGlucHV0W3R5
cGU9ImNoZWNrYm94Il0pOgorICAgICAgICAoLml0ZW0udmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0
ZW0gPiAuaWNvbik6CisgICAgICAgICguaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbS5t
b2RpZmllZCA+IC5pY29uKToKKyAgICAgICAgKC5pdGVtLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1p
dGVtLnNlbGVjdG9yLWludmFsaWQgPiAuaWNvbik6CisgICAgICAgICguaXRlbS52aXN1YWwtc3R5
bGUtc2VsZWN0b3ItaXRlbS5zZWxlY3Rvci1pbnZhbGlkID4gLnRpdGxlcyA+IC50aXRsZSk6Cisg
ICAgICAgICguaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbS5zZWxlY3Rvci1pbnZhbGlk
ID4gLnRpdGxlcyA+IC50aXRsZTo6YmVmb3JlKToKKyAgICAgICAgKC5pdGVtLnZpc3VhbC1zdHls
ZS1zZWxlY3Rvci1pdGVtID4gLnRpdGxlcyk6CisgICAgICAgICguaXRlbS52aXN1YWwtc3R5bGUt
c2VsZWN0b3ItaXRlbTpub3QoLmRvbS1lbGVtZW50LWljb24pID4gLnRpdGxlcyA+IC50aXRsZSk6
CisgICAgICAgICguaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbTpub3QoLmRvbS1lbGVt
ZW50LWljb24pLmVkaXRhYmxlID4gLnRpdGxlcyA+IC50aXRsZSk6CisgICAgICAgICguaXRlbS52
aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbTpub3QoLmRvbS1lbGVtZW50LWljb24pLmVkaXRhYmxl
ID4gLnRpdGxlcyA+IC50aXRsZTpmb2N1cyk6CisgICAgICAgICguaXRlbS52aXN1YWwtc3R5bGUt
c2VsZWN0b3ItaXRlbSA+IC50aXRsZXMgPiAuc3VidGl0bGU6OmJlZm9yZSk6CisgICAgICAgICgu
aXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbSA+IC50aXRsZXMgPiAuc3VidGl0bGUpOgor
CisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9WaXN1YWxTdHlsZVNlbGVjdG9yVHJlZUl0
ZW0uanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3RvclRyZWVJdGVt
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yVHJlZUl0ZW0ucHJv
dG90eXBlLmdldCBpY29uQ2xhc3NOYW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxT
dHlsZVNlbGVjdG9yVHJlZUl0ZW0ucHJvdG90eXBlLmdldCBzZWxlY3RvclRleHQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JUcmVlSXRlbS5wcm90b3R5cGUub25h
dHRhY2gpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JUcmVlSXRl
bS5wcm90b3R5cGUub25kZXNlbGVjdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5
bGVTZWxlY3RvclRyZWVJdGVtLnByb3RvdHlwZS5faGlnaGxpZ2h0Tm9kZXNXaXRoU2VsZWN0b3Ip
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JUcmVlSXRlbS5wcm90
b3R5cGUuX2hpZGVET01Ob2RlSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1
YWxTdHlsZVNlbGVjdG9yVHJlZUl0ZW0ucHJvdG90eXBlLl9oYW5kbGVDb250ZXh0TWVudUV2ZW50
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yVHJlZUl0ZW0ucHJv
dG90eXBlLl9oYW5kbGVDaGVja2JveENoYW5nZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlZp
c3VhbFN0eWxlU2VsZWN0b3JUcmVlSXRlbS5wcm90b3R5cGUuX3VwZGF0ZUNoZWNrYm94VGl0bGUp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JUcmVlSXRlbS5wcm90
b3R5cGUuX2hhbmRsZU1haW5UaXRsZU1vdXNlRG93bik6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VmlzdWFsU3R5bGVTZWxlY3RvclRyZWVJdGVtLnByb3RvdHlwZS5faGFuZGxlTWFpblRpdGxlS2V5
RG93bik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3RvclRyZWVJdGVt
LnByb3RvdHlwZS5fY29tbWl0U2VsZWN0b3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlZpc3Vh
bFN0eWxlU2VsZWN0b3JUcmVlSXRlbS5wcm90b3R5cGUuX3N0eWxlVGV4dE1vZGlmaWVkKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yVHJlZUl0ZW0ucHJvdG90eXBl
Ll9zZWxlY3RvckNoYW5nZWQpOgorCiAyMDE1LTA4LTA4ICBEZXZpbiBSb3Vzc28gIDxkcm91c3Nv
QGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBUaW1lbGluZSBydWxlciBoYW5k
bGUgdG9vbHRpcCBzaG93cyB3cm9uZyB2YWx1ZSB3aGVuIGhhbmRsZXMgb3ZlcmxhcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NTU1J1bGUu
anMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTUnVsZS5q
cwppbmRleCBhOTRlMjdiLi5mMGFmNmFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTUnVsZS5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTUnVsZS5qcwpAQCAtMTc3LDYgKzE3NywxOCBA
QCBXZWJJbnNwZWN0b3IuQ1NTUnVsZSA9IGNsYXNzIENTU1J1bGUgZXh0ZW5kcyBXZWJJbnNwZWN0
b3IuT2JqZWN0CiAgICAgICAgIHJldHVybiB0aGlzLl9tZWRpYUxpc3Q7CiAgICAgfQogCisgICAg
Z2V0IG1lZGlhVGV4dCgpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX21lZGlhTGlzdC5sZW5n
dGgpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbGV0IG1lZGlhVGV4dCA9ICIiOwor
ICAgICAgICBmb3IgKGxldCBtZWRpYSBvZiB0aGlzLl9tZWRpYUxpc3QpCisgICAgICAgICAgICBt
ZWRpYVRleHQgKz0gbWVkaWEudGV4dDsKKworICAgICAgICByZXR1cm4gbWVkaWFUZXh0OworICAg
IH0KKwogICAgIGlzRXF1YWxUbyhydWxlKQogICAgIHsKICAgICAgICAgaWYgKCFydWxlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NTU1N0
eWxlRGVjbGFyYXRpb24uanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9N
b2RlbHMvQ1NTU3R5bGVEZWNsYXJhdGlvbi5qcwppbmRleCA5NDA3OGNmLi45ZjEwZDNmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTU3R5
bGVEZWNsYXJhdGlvbi5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9Nb2RlbHMvQ1NTU3R5bGVEZWNsYXJhdGlvbi5qcwpAQCAtNDMsNiArNDMsOSBAQCBXZWJJbnNw
ZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbiA9IGNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb24gZXh0
ZW5kcyBXZWJJbnNwZWN0bwogICAgICAgICB0aGlzLl9wZW5kaW5nUHJvcGVydGllcyA9IFtdOwog
ICAgICAgICB0aGlzLl9wcm9wZXJ0eU5hbWVNYXAgPSB7fTsKIAorICAgICAgICB0aGlzLl9pbml0
aWFsVGV4dCA9IHRleHQ7CisgICAgICAgIHRoaXMuX2hhc01vZGlmaWVkSW5pdGlhbFRleHQgPSBm
YWxzZTsKKwogICAgICAgICB0aGlzLnVwZGF0ZSh0ZXh0LCBwcm9wZXJ0aWVzLCBzdHlsZVNoZWV0
VGV4dFJhbmdlLCB0cnVlKTsKICAgICB9CiAKQEAgLTE4Myw5ICsxODYsMjUgQEAgV2ViSW5zcGVj
dG9yLkNTU1N0eWxlRGVjbGFyYXRpb24gPSBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uIGV4dGVu
ZHMgV2ViSW5zcGVjdG8KICAgICAgICAgaWYgKHRoaXMuX3RleHQgPT09IHRleHQpCiAgICAgICAg
ICAgICByZXR1cm47CiAKKyAgICAgICAgdmFyIG1vZGlmaWVkID0gdGV4dCAhPT0gdGhpcy5faW5p
dGlhbFRleHQ7CisgICAgICAgIGlmIChtb2RpZmllZCAhPT0gdGhpcy5faGFzTW9kaWZpZWRJbml0
aWFsVGV4dCkgeworICAgICAgICAgICAgdGhpcy5faGFzTW9kaWZpZWRJbml0aWFsVGV4dCA9IG1v
ZGlmaWVkOworICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5z
cGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24uRXZlbnQuSW5pdGlhbFRleHRNb2RpZmllZCk7Cisg
ICAgICAgIH0KKwogICAgICAgICB0aGlzLl9ub2RlU3R5bGVzLmNoYW5nZVN0eWxlVGV4dCh0aGlz
LCB0ZXh0KTsKICAgICB9CiAKKyAgICByZXNldFRleHQoKQorICAgIHsKKyAgICAgICAgdGhpcy50
ZXh0ID0gdGhpcy5faW5pdGlhbFRleHQ7CisgICAgfQorCisgICAgZ2V0IG1vZGlmaWVkKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiB0aGlzLl9oYXNNb2RpZmllZEluaXRpYWxUZXh0OworICAgIH0K
KwogICAgIGdldCBwcm9wZXJ0aWVzKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9wcm9w
ZXJ0aWVzOwpAQCAtMjYwLDYgKzI3OSw0MyBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJh
dGlvbiA9IGNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb24gZXh0ZW5kcyBXZWJJbnNwZWN0bwogICAg
ICAgICByZXR1cm4gbmV3UHJvcGVydHk7CiAgICAgfQogCisgICAgZ2VuZXJhdGVDU1NSdWxlU3Ry
aW5nKCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fb3duZXJSdWxlKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGxldCBzdHlsZVRleHQgPSAiIjsKKyAgICAgICAgbGV0IG1lZGlh
UXVlcmllc0NvdW50ID0gMDsKKyAgICAgICAgbGV0IG1lZGlhTGlzdCA9IHRoaXMuX293bmVyUnVs
ZS5tZWRpYUxpc3Q7CisgICAgICAgIGlmIChtZWRpYUxpc3QubGVuZ3RoKSB7CisgICAgICAgICAg
ICBtZWRpYVF1ZXJpZXNDb3VudCA9IG1lZGlhTGlzdC5sZW5ndGg7CisKKyAgICAgICAgICAgIGZv
ciAobGV0IGkgPSBtZWRpYVF1ZXJpZXNDb3VudCAtIDE7IGkgPj0gMDsgLS1pKQorICAgICAgICAg
ICAgICAgIHN0eWxlVGV4dCArPSAiICAgICIucmVwZWF0KG1lZGlhUXVlcmllc0NvdW50IC0gaSAt
IDEpICsgIkBtZWRpYSAiICsgbWVkaWFMaXN0W2ldLnRleHQgKyAiIHtcbiI7CisgICAgICAgIH0K
KworICAgICAgICBzdHlsZVRleHQgKz0gIiAgICAiLnJlcGVhdChtZWRpYVF1ZXJpZXNDb3VudCkg
KyB0aGlzLl9vd25lclJ1bGUuc2VsZWN0b3JUZXh0ICsgIiB7XG4iOworCisgICAgICAgIGZvciAo
bGV0IHByb3BlcnR5IG9mIHRoaXMuX3Byb3BlcnRpZXMpIHsKKyAgICAgICAgICAgIGlmIChwcm9w
ZXJ0eS5hbm9ueW1vdXMpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAg
IHN0eWxlVGV4dCArPSAiICAgICIucmVwZWF0KG1lZGlhUXVlcmllc0NvdW50ICsgMSkgKyBwcm9w
ZXJ0eS50ZXh0LnRyaW0oKTsKKworICAgICAgICAgICAgaWYgKCFzdHlsZVRleHQuZW5kc1dpdGgo
IjsiKSkKKyAgICAgICAgICAgICAgICBzdHlsZVRleHQgKz0gIjsiOworCisgICAgICAgICAgICBz
dHlsZVRleHQgKz0gIlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAobGV0IGkgPSBtZWRp
YVF1ZXJpZXNDb3VudDsgaSA+IDA7IC0taSkKKyAgICAgICAgICAgIHN0eWxlVGV4dCArPSAiICAg
ICIucmVwZWF0KGkpICsgIn1cbiI7CisKKyAgICAgICAgc3R5bGVUZXh0ICs9ICJ9IjsKKworICAg
ICAgICByZXR1cm4gc3R5bGVUZXh0OworICAgIH0KKwogICAgIC8vIFByb3RlY3RlZAogCiAgICAg
Z2V0IG5vZGVTdHlsZXMoKQpAQCAtMjY5LDcgKzMyNSw4IEBAIFdlYkluc3BlY3Rvci5DU1NTdHls
ZURlY2xhcmF0aW9uID0gY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbiBleHRlbmRzIFdlYkluc3Bl
Y3RvCiB9OwogCiBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5FdmVudCA9IHsKLSAg
ICBQcm9wZXJ0aWVzQ2hhbmdlZDogImNzcy1zdHlsZS1kZWNsYXJhdGlvbi1wcm9wZXJ0aWVzLWNo
YW5nZWQiCisgICAgUHJvcGVydGllc0NoYW5nZWQ6ICJjc3Mtc3R5bGUtZGVjbGFyYXRpb24tcHJv
cGVydGllcy1jaGFuZ2VkIiwKKyAgICBJbml0aWFsVGV4dE1vZGlmaWVkOiAiY3NzLXN0eWxlLWRl
Y2xhcmF0aW9uLWluaXRpYWwtdGV4dC1tb2RpZmllZCIKIH07CiAKIFdlYkluc3BlY3Rvci5DU1NT
dHlsZURlY2xhcmF0aW9uLlR5cGUgPSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9WaWV3cy9DU1NTdHlsZURlY2xhcmF0aW9uU2VjdGlvbi5qcyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NTU1N0eWxlRGVjbGFyYXRp
b25TZWN0aW9uLmpzCmluZGV4IGIzZTBkMDcuLjU2ZDlkNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NTU1N0eWxlRGVjbGFyYXRpb25TZWN0
aW9uLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NT
U1N0eWxlRGVjbGFyYXRpb25TZWN0aW9uLmpzCkBAIC00NDksNDkgKzQ0OSwxMiBAQCBXZWJJbnNw
ZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblNlY3Rpb24gPSBjbGFzcyBDU1NTdHlsZURlY2xhcmF0
aW9uU2VjdGlvbiBleHRlbgogICAgICAgICB9CiAKICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5k
SXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNvcHkgUnVsZSIpLCBmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5jb3B5VGV4dCh0aGlzLl9nZW5lcmF0ZUNT
U1J1bGVTdHJpbmcoKSk7CisgICAgICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QuY29weVRl
eHQodGhpcy5fc3R5bGUuZ2VuZXJhdGVDU1NSdWxlU3RyaW5nKCkpOwogICAgICAgICB9LmJpbmQo
dGhpcykpOwogCiAgICAgICAgIGNvbnRleHRNZW51LnNob3coKTsKICAgICB9CiAKLSAgICBfZ2Vu
ZXJhdGVDU1NSdWxlU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHZhciBudW1NZWRpYVF1ZXJpZXMg
PSAwOwotICAgICAgICB2YXIgc3R5bGVUZXh0ID0gIiI7Ci0KLSAgICAgICAgaWYgKHRoaXMuX3N0
eWxlLm93bmVyUnVsZSkgewotICAgICAgICAgICAgdmFyIG1lZGlhTGlzdCA9IHRoaXMuX3N0eWxl
Lm93bmVyUnVsZS5tZWRpYUxpc3Q7Ci0gICAgICAgICAgICBpZiAobWVkaWFMaXN0Lmxlbmd0aCkg
ewotICAgICAgICAgICAgICAgIG51bU1lZGlhUXVlcmllcyA9IG1lZGlhTGlzdC5sZW5ndGg7Ci0K
LSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gbnVtTWVkaWFRdWVyaWVzIC0gMTsgaSA+PSAw
OyAtLWkpCi0gICAgICAgICAgICAgICAgICAgIHN0eWxlVGV4dCArPSAiICAgICIucmVwZWF0KG51
bU1lZGlhUXVlcmllcyAtIGkgLSAxKSArICJAbWVkaWEgIiArIG1lZGlhTGlzdFtpXS50ZXh0ICsg
IiB7XG4iOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzdHlsZVRleHQgKz0gIiAgICAi
LnJlcGVhdChudW1NZWRpYVF1ZXJpZXMpICsgdGhpcy5fc3R5bGUub3duZXJSdWxlLnNlbGVjdG9y
VGV4dDsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBzdHlsZVRleHQgKz0gdGhpcy5fc2Vs
ZWN0b3JFbGVtZW50LnRleHRDb250ZW50OwotCi0gICAgICAgIHN0eWxlVGV4dCArPSAiIHtcbiI7
Ci0KLSAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgb2YgdGhpcy5fc3R5bGUudmlzaWJsZVByb3Bl
cnRpZXMpIHsKLSAgICAgICAgICAgIHN0eWxlVGV4dCArPSAiICAgICIucmVwZWF0KG51bU1lZGlh
UXVlcmllcyArIDEpICsgcHJvcGVydHkudGV4dC50cmltKCk7Ci0KLSAgICAgICAgICAgIGlmICgh
c3R5bGVUZXh0LmVuZHNXaXRoKCI7IikpCi0gICAgICAgICAgICAgICAgc3R5bGVUZXh0ICs9ICI7
IjsKLQotICAgICAgICAgICAgc3R5bGVUZXh0ICs9ICJcbiI7Ci0gICAgICAgIH0KLQotICAgICAg
ICBmb3IgKHZhciBpID0gbnVtTWVkaWFRdWVyaWVzOyBpID4gMDsgLS1pKQotICAgICAgICAgICAg
c3R5bGVUZXh0ICs9ICIgICAgIi5yZXBlYXQoaSkgKyAifVxuIjsKLQotICAgICAgICBzdHlsZVRl
eHQgKz0gIn0iOwotCi0gICAgICAgIHJldHVybiBzdHlsZVRleHQ7Ci0gICAgfQotCiAgICAgX3Rv
Z2dsZVJ1bGVPbk9mZigpCiAgICAgewogICAgICAgICBpZiAodGhpcy5faGFzSW52YWxpZFNlbGVj
dG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmll
d3MvVmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24uY3NzIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvVmlld3MvVmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24uY3NzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMTVmNDUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9WaXN1YWxTdHlsZVNl
bGVjdG9yU2VjdGlvbi5jc3MKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisuZGV0YWls
cy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmhlYWRlciB7CisgICAg
ZGlzcGxheTogZmxleDsKKyAgICBoZWlnaHQ6IDIycHg7Cit9CisKKy5kZXRhaWxzLXNlY3Rpb24u
dmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb246bm90KC5jb2xsYXBzZWQpID4gLmhlYWRlciB7
CisgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGhzbCgwLCAwJSwgNzAlKTsKK30KKworQG1l
ZGlhICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpIHsKKyAgICAuZGV0YWlscy1z
ZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uOm5vdCguY29sbGFwc2VkKSA+IC5o
ZWFkZXIgeworICAgICAgICBib3JkZXItd2lkdGg6IDAuNXB4ICFpbXBvcnRhbnQ7CisgICAgfQor
fQorCisuZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmhl
YWRlciA+IC5jdXJyZW50LXNlbGVjdG9yIHsKKyAgICB3aWR0aDogY2FsYygxMDAlIC0gODVweCk7
CisgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CisgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgICB3
aGl0ZS1zcGFjZTogbm93cmFwOworICAgIG92ZXJmbG93OiBoaWRkZW47CisgICAgdGV4dC1vdmVy
ZmxvdzogZWxsaXBzaXM7Cit9CisKKy52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbi5kZXRh
aWxzLXNlY3Rpb246bm90KC5jb2xsYXBzZWQpID4gLmhlYWRlciA+IC5jdXJyZW50LXNlbGVjdG9y
IHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisuZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHls
ZS1zZWxlY3Rvci1zZWN0aW9uID4gLmhlYWRlciA+IC5jdXJyZW50LXNlbGVjdG9yID4gLmljb24g
eworICAgIHdpZHRoOiAxNnB4OworICAgIGhlaWdodDogMTZweDsKKyAgICBwb3NpdGlvbjogYWJz
b2x1dGU7CisgICAgdG9wOiAzcHg7Cit9CisKKy5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxl
LXNlbGVjdG9yLXNlY3Rpb24gPiAuaGVhZGVyID4gLmN1cnJlbnQtc2VsZWN0b3IgPiBzcGFuIHsK
KyAgICBtYXJnaW4tbGVmdDogMjFweDsKK30KKworLmRldGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5
bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5oZWFkZXIgPiAuY29udHJvbHMgeworICAgIHBvc2l0aW9u
OiBhYnNvbHV0ZTsKKyAgICByaWdodDogMDsKKyAgICB0b3A6IDA7CisgICAgYm9yZGVyLWxlZnQ6
IDFweCBzb2xpZCBoc2woMCwgMCUsIDgzJSk7Cit9CisKKy5kZXRhaWxzLXNlY3Rpb24udmlzdWFs
LXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24uY29sbGFwc2VkID4gLmhlYWRlciA+IC5jb250cm9scyB7
CisgICAgZGlzcGxheTogbm9uZTsKK30KKworLmRldGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5bGUt
c2VsZWN0b3Itc2VjdGlvbiA+IC5oZWFkZXIgPiAuY29udHJvbHMgPiAudmlzdWFsLXN0eWxlLXNl
bGVjdG9yLXNlY3Rpb24tYWRkLXJ1bGUgeworICAgIHdpZHRoOiAyM3B4OworICAgIGhlaWdodDog
MjFweDsKKyAgICBwYWRkaW5nOiA0cHggNXB4OworICAgIC13ZWJraXQtZmlsdGVyOiBvcGFjaXR5
KDAuNyk7Cit9CisKKy5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rp
b24gPiAuY29udGVudCA+IC5zZWxlY3RvcnMgeworICAgIG1heC1oZWlnaHQ6IDExMHB4OworICAg
IG92ZXJmbG93OiBhdXRvOworfQorCisuZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxl
Y3Rvci1zZWN0aW9uID4gLmNvbnRlbnQgPiAuc2VsZWN0b3JzID4gLnNlbGVjdG9yLWxpc3Qgewor
ICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5nLWxlZnQ6IDA7CisgICAgb3V0bGluZTogbm9uZTsK
K30KKworLmRldGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbiA+IC5j
b250ZW50ID4gLnNlbGVjdG9ycyA+IC5zZWxlY3Rvci1saXN0ID4gLnZpc3VhbC1zdHlsZS1zZWxl
Y3Rvci1pdGVtOm50aC1jaGlsZChvZGQpIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBoc2woMCwg
MTAwJSwgMTAwJSk7Cit9CisKKy5kZXRhaWxzLXNlY3Rpb24udmlzdWFsLXN0eWxlLXNlbGVjdG9y
LXNlY3Rpb24gPiAuY29udGVudCA+IC5zZWxlY3RvcnMgPiAuc2VsZWN0b3ItbGlzdCA+IC5zZWN0
aW9uLWRpdmlkZXIgeworICAgIHBvc2l0aW9uOiAtd2Via2l0LXN0aWNreTsKKyAgICB0b3A6IC0x
cHg7CisgICAgaGVpZ2h0OiAxN3B4OworICAgIHBhZGRpbmc6IDJweDsKKyAgICBiYWNrZ3JvdW5k
LWNvbG9yOiBoc2woMCwgMCUsIDk1JSk7CisgICAgYm9yZGVyLWNvbG9yOiBoc2woMCwgMCUsIDcw
JSk7CisgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKKyAgICBib3JkZXItd2lkdGg6IDFweCAwOwor
ICAgIHotaW5kZXg6IDEwMDsKK30KKworLmRldGFpbHMtc2VjdGlvbi52aXN1YWwtc3R5bGUtc2Vs
ZWN0b3Itc2VjdGlvbiA+IC5jb250ZW50ID4gLnNlbGVjdG9ycyA+IC5zZWxlY3Rvci1saXN0ID4g
LnNlY3Rpb24tZGl2aWRlciA+IDptYXRjaGVzKC5kaXNjbG9zdXJlLWJ1dHRvbiwgLmljb24pIHsK
KyAgICBkaXNwbGF5OiBub25lOworfQorCisuZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1z
ZWxlY3Rvci1zZWN0aW9uID4gLmNvbnRlbnQgPiAuc2VsZWN0b3JzID4gLnNlbGVjdG9yLWxpc3Qg
PiAuc2VjdGlvbi1kaXZpZGVyID4gLnRpdGxlcyA+IC50aXRsZSB7CisgICAgb3ZlcmZsb3c6IGhp
ZGRlbjsKKyAgICB3aGl0ZS1zcGFjZTogbm93cmFwOworICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlw
c2lzOworfQorCisuZGV0YWlscy1zZWN0aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9u
ID4gLmNvbnRlbnQgPiAuc2VsZWN0b3JzID4gLnNlbGVjdG9yLWxpc3QgPiAuc2VjdGlvbi1kaXZp
ZGVyIH4gLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtOm50aC1jaGlsZChldmVuKSB7CisgICAg
YmFja2dyb3VuZC1jb2xvcjogaHNsKDAsIDEwMCUsIDEwMCUpOworfQorCisuZGV0YWlscy1zZWN0
aW9uLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uID4gLmNvbnRlbnQgPiAuc2VsZWN0b3Jz
ID4gLnNlbGVjdG9yLWxpc3QgPiAuc2VjdGlvbi1kaXZpZGVyIH4gLnZpc3VhbC1zdHlsZS1zZWxl
Y3Rvci1pdGVtOm50aC1jaGlsZChvZGQpIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3Bh
cmVudDsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1ZpZXdzL1Zpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLmpzIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24uanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZjM2U1OQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Zpc3VhbFN0eWxl
U2VsZWN0b3JTZWN0aW9uLmpzCkBAIC0wLDAgKzEsMjk3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5z
cGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uID0gY2xhc3MgVmlzdWFsU3R5bGVTZWxl
Y3RvclNlY3Rpb24gZXh0ZW5kcyBXZWJJbnNwZWN0b3IuRGV0YWlsc1NlY3Rpb24KK3sKKyAgICBj
b25zdHJ1Y3RvcihkZWxlZ2F0ZSkKKyAgICB7CisgICAgICAgIGxldCBzZWxlY3RvclNlY3Rpb24g
PSB7ZWxlbWVudDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iil9OworICAgICAgICBzZWxl
Y3RvclNlY3Rpb24uZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJzZWxlY3RvcnMiKTsKKworICAgICAg
ICBsZXQgY29udHJvbEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAg
ICAgICAgY29udHJvbEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY29udHJvbHMiKTsKKworICAgICAg
ICBzdXBlcigidmlzdWFsLXN0eWxlLXNlbGVjdG9yLXNlY3Rpb24iLCBXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIlN0eWxlIFJ1bGVzIiksIFtzZWxlY3RvclNlY3Rpb25dLCBjb250cm9sRWxlbWVudCk7
CisKKyAgICAgICAgdGhpcy5fZGVsZWdhdGUgPSBkZWxlZ2F0ZSB8fCBudWxsOworICAgICAgICB0
aGlzLl9ub2RlU3R5bGVzID0gbnVsbDsKKworICAgICAgICB0aGlzLl9jdXJyZW50U2VsZWN0b3JF
bGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgIHRoaXMuX2N1
cnJlbnRTZWxlY3RvckVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY3VycmVudC1zZWxlY3RvciIpOwor
CisgICAgICAgIGxldCBjdXJyZW50U2VsZWN0b3JJY29uRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImltZyIpOworICAgICAgICBjdXJyZW50U2VsZWN0b3JJY29uRWxlbWVudC5jbGFz
c0xpc3QuYWRkKCJpY29uIik7CisgICAgICAgIHRoaXMuX2N1cnJlbnRTZWxlY3RvckVsZW1lbnQu
YXBwZW5kQ2hpbGQoY3VycmVudFNlbGVjdG9ySWNvbkVsZW1lbnQpOworCisgICAgICAgIHRoaXMu
X2N1cnJlbnRTZWxlY3RvclRleHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Cisg
ICAgICAgIHRoaXMuX2N1cnJlbnRTZWxlY3RvckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fY3Vy
cmVudFNlbGVjdG9yVGV4dCk7CisKKyAgICAgICAgdGhpcy5faGVhZGVyRWxlbWVudC5hcHBlbmRD
aGlsZCh0aGlzLl9jdXJyZW50U2VsZWN0b3JFbGVtZW50KTsKKworICAgICAgICBsZXQgc2VsZWN0
b3JMaXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9sIik7CisgICAgICAgIHNl
bGVjdG9yTGlzdEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgic2VsZWN0b3ItbGlzdCIpOworICAgICAg
ICBzZWxlY3RvclNlY3Rpb24uZWxlbWVudC5hcHBlbmRDaGlsZChzZWxlY3Rvckxpc3RFbGVtZW50
KTsKKworICAgICAgICB0aGlzLl9zZWxlY3RvcnMgPSBuZXcgV2ViSW5zcGVjdG9yLlRyZWVPdXRs
aW5lKHNlbGVjdG9yTGlzdEVsZW1lbnQpOworICAgICAgICB0aGlzLl9zZWxlY3RvcnMub25zZWxl
Y3QgPSB0aGlzLl9zZWxlY3RvckNoYW5nZWQuYmluZCh0aGlzKTsKKyAgICAgICAgdGhpcy5fZm9j
dXNOZXh0TmV3SW5zcGVjdG9yUnVsZSA9IGZhbHNlOworCisgICAgICAgIHdyYXBwZWRTVkdEb2N1
bWVudCgiSW1hZ2VzL1BsdXMuc3ZnIiwgInZpc3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uLWFk
ZC1ydWxlIiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDbGljayB0byBhZGQgYSBuZXcgcnVsZS4i
KSwgZnVuY3Rpb24od3JhcHBlcikgeworICAgICAgICAgICAgd3JhcHBlci5hZGRFdmVudExpc3Rl
bmVyKCJjbGljayIsIHRoaXMuX2FkZE5ld1J1bGUuYmluZCh0aGlzKSk7CisgICAgICAgICAgICBj
b250cm9sRWxlbWVudC5hcHBlbmRDaGlsZCh3cmFwcGVyKTsKKyAgICAgICAgfS5iaW5kKHRoaXMp
KTsKKworICAgICAgICB0aGlzLl9oZWFkZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNl
b3ZlciIsIHRoaXMuX2hhbmRsZU1vdXNlT3Zlci5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5f
aGVhZGVyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsIHRoaXMuX2hhbmRsZU1v
dXNlT3V0LmJpbmQodGhpcykpOworICAgIH0KKworICAgIC8vIFB1YmxpYworCisgICAgdXBkYXRl
KG5vZGVTdHlsZXMpCisgICAgeworICAgICAgICBsZXQgc3R5bGUgPSB0aGlzLmN1cnJlbnRTdHls
ZSgpOworICAgICAgICBpZiAoc3R5bGUpCisgICAgICAgICAgICB0aGlzLl9ub2RlU3R5bGVzW1dl
Ykluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yU2VjdGlvbi5MYXN0U2VsZWN0ZWRSdWxlU3lt
Ym9sXSA9IHN0eWxlOworCisgICAgICAgIGlmIChub2RlU3R5bGVzKQorICAgICAgICAgICAgdGhp
cy5fbm9kZVN0eWxlcyA9IG5vZGVTdHlsZXM7CisKKyAgICAgICAgaWYgKCF0aGlzLl9ub2RlU3R5
bGVzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX3NlbGVjdG9ycy5yZW1v
dmVDaGlsZHJlbigpOworICAgICAgICBsZXQgcHJldmlvdXNSdWxlID0gbnVsbDsKKworICAgICAg
ICAvLyBQc2V1ZG8gU3R5bGVzCisgICAgICAgIGxldCBwc2V1ZG9SdWxlcyA9IFtdOworICAgICAg
ICBsZXQgcHNldWRvRWxlbWVudHMgPSB0aGlzLl9ub2RlU3R5bGVzLnBzZXVkb0VsZW1lbnRzOwor
ICAgICAgICBmb3IgKGxldCBwc2V1ZG9JZGVudGlmaWVyIGluIHBzZXVkb0VsZW1lbnRzKQorICAg
ICAgICAgICAgcHNldWRvUnVsZXMgPSBwc2V1ZG9SdWxlcy5jb25jYXQocHNldWRvRWxlbWVudHNb
cHNldWRvSWRlbnRpZmllcl0ubWF0Y2hlZFJ1bGVzKTsKKworICAgICAgICBsZXQgb3JkZXJlZFBz
ZXVkb1J1bGVzID0gdW5pcXVlT3JkZXJlZFJ1bGVzKHBzZXVkb1J1bGVzKTsKKyAgICAgICAgLy8g
UmV2ZXJzZSB0aGUgYXJyYXkgdG8gZW5zdXJlIHRoYXQgc3BsaWNpbmcgdGhlIGFycmF5IHdpbGwg
bm90IG1lc3Mgd2l0aCB0aGUgb3JkZXIuCisgICAgICAgIGlmIChvcmRlcmVkUHNldWRvUnVsZXMu
bGVuZ3RoKQorICAgICAgICAgICAgb3JkZXJlZFBzZXVkb1J1bGVzLnJldmVyc2UoKTsKKworICAg
ICAgICBmdW5jdGlvbiBjcmVhdGVTZWxlY3Rvckl0ZW0oc3R5bGUsIHRpdGxlLCBzdWJ0aXRsZSkg
eworICAgICAgICAgICAgbGV0IHNlbGVjdG9yID0gbmV3IFdlYkluc3BlY3Rvci5WaXN1YWxTdHls
ZVNlbGVjdG9yVHJlZUl0ZW0oc3R5bGUsIHRpdGxlLCBzdWJ0aXRsZSk7CisgICAgICAgICAgICBz
ZWxlY3Rvci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9y
VHJlZUl0ZW0uRXZlbnQuU3R5bGVUZXh0UmVzZXQsIHRoaXMuX3N0eWxlVGV4dFJlc2V0LCB0aGlz
KTsKKyAgICAgICAgICAgIHNlbGVjdG9yLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlZp
c3VhbFN0eWxlU2VsZWN0b3JUcmVlSXRlbS5FdmVudC5DaGVja2JveENoYW5nZWQsIHRoaXMuX3Ry
ZWVFbGVtZW50Q2hlY2tib3hUb2dnbGVkLCB0aGlzKTsKKyAgICAgICAgICAgIHRoaXMuX3NlbGVj
dG9ycy5hcHBlbmRDaGlsZChzZWxlY3Rvcik7CisKKyAgICAgICAgICAgIGlmICh0aGlzLl9mb2N1
c05leHROZXdJbnNwZWN0b3JSdWxlICYmIHN0eWxlLm93bmVyUnVsZSAmJiBzdHlsZS5vd25lclJ1
bGUudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkNTU1J1bGUuVHlwZS5JbnNwZWN0b3IpIHsKKyAgICAg
ICAgICAgICAgICBzZWxlY3Rvci5zZWxlY3QodHJ1ZSk7CisgICAgICAgICAgICAgICAgc2VsZWN0
b3IuZWxlbWVudC5zY3JvbGxJbnRvVmlldygpOworICAgICAgICAgICAgICAgIHRoaXMuX25vZGVT
dHlsZXNbV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLkxhc3RTZWxlY3Rl
ZFJ1bGVTeW1ib2xdID0gc3R5bGU7CisgICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNOZXh0TmV3
SW5zcGVjdG9yUnVsZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKHRoaXMuX25vZGVTdHlsZXNbV2ViSW5zcGVjdG9yLlZp
c3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLkxhc3RTZWxlY3RlZFJ1bGVTeW1ib2xdID09PSBzdHls
ZSkgeworICAgICAgICAgICAgICAgIHNlbGVjdG9yLnNlbGVjdCh0cnVlKTsKKyAgICAgICAgICAg
ICAgICBzZWxlY3Rvci5lbGVtZW50LnNjcm9sbEludG9WaWV3KCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB1bmlxdWVPcmRlcmVkUnVsZXMob3JkZXJlZFJ1
bGVzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW9yZGVyZWRSdWxlcyB8fCAhb3JkZXJl
ZFJ1bGVzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5OworCisgICAg
ICAgICAgICBsZXQgdW5pcXVlUnVsZXMgPSBuZXcgTWFwOworICAgICAgICAgICAgZm9yIChsZXQg
cnVsZSBvZiBvcmRlcmVkUnVsZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXVuaXF1ZVJ1bGVz
LmhhcyhydWxlLmlkKSkKKyAgICAgICAgICAgICAgICAgICAgdW5pcXVlUnVsZXMuc2V0KHJ1bGUu
aWQsIHJ1bGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEFycmF5LmZyb20o
dW5pcXVlUnVsZXMudmFsdWVzKCkpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gaW5z
ZXJ0QWxsTWF0Y2hpbmdQc2V1ZG9SdWxlcyhmb3JjZSkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKCFvcmRlcmVkUHNldWRvUnVsZXMubGVuZ3RoKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAgICAgaWYgKGZvcmNlKSB7CisgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9
IG9yZGVyZWRQc2V1ZG9SdWxlcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICAg
ICAgICAgICAgICBsZXQgcHNldWRvUnVsZSA9IG9yZGVyZWRQc2V1ZG9SdWxlc1tpXTsKKyAgICAg
ICAgICAgICAgICAgICAgY3JlYXRlU2VsZWN0b3JJdGVtLmNhbGwodGhpcywgcHNldWRvUnVsZS5z
dHlsZSwgcHNldWRvUnVsZS5zZWxlY3RvclRleHQsIHBzZXVkb1J1bGUubWVkaWFUZXh0KTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb3JkZXJlZFBzZXVkb1J1bGVzID0gW107
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJldmlvdXNSdWxlKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgZm9yIChsZXQgaSA9IG9yZGVyZWRQc2V1
ZG9SdWxlcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICAgICAgICAgIGxldCBw
c2V1ZG9SdWxlID0gb3JkZXJlZFBzZXVkb1J1bGVzW2ldOworICAgICAgICAgICAgICAgIGlmICgh
cHNldWRvUnVsZS5zZWxlY3RvcklzR3JlYXRlcihwcmV2aW91c1J1bGUubW9zdFNwZWNpZmljU2Vs
ZWN0b3IpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAg
IGNyZWF0ZVNlbGVjdG9ySXRlbS5jYWxsKHRoaXMsIHBzZXVkb1J1bGUuc3R5bGUsIHBzZXVkb1J1
bGUuc2VsZWN0b3JUZXh0LCBwc2V1ZG9SdWxlLm1lZGlhVGV4dCk7CisgICAgICAgICAgICAgICAg
cHJldmlvdXNSdWxlID0gcHNldWRvUnVsZTsKKyAgICAgICAgICAgICAgICBvcmRlcmVkUHNldWRv
UnVsZXMuc3BsaWNlKGksIDEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
aWYgKCF0aGlzLl9ub2RlU3R5bGVzW1dlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yU2Vj
dGlvbi5MYXN0U2VsZWN0ZWRSdWxlU3ltYm9sXSkKKyAgICAgICAgICAgIHRoaXMuX25vZGVTdHls
ZXNbV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLkxhc3RTZWxlY3RlZFJ1
bGVTeW1ib2xdID0gdGhpcy5fbm9kZVN0eWxlcy5pbmxpbmVTdHlsZTsKKworICAgICAgICAvLyBJ
bmxpbmUgU3R5bGUKKyAgICAgICAgY3JlYXRlU2VsZWN0b3JJdGVtLmNhbGwodGhpcywgdGhpcy5f
bm9kZVN0eWxlcy5pbmxpbmVTdHlsZSwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJUaGlzIEVsZW1l
bnQiKSk7CisKKyAgICAgICAgLy8gTWF0Y2hlZCBSdWxlcworICAgICAgICBmb3IgKGxldCBydWxl
IG9mIHVuaXF1ZU9yZGVyZWRSdWxlcyh0aGlzLl9ub2RlU3R5bGVzLm1hdGNoZWRSdWxlcykpIHsK
KyAgICAgICAgICAgIGlmIChydWxlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5DU1NSdWxlLlR5cGUu
VXNlckFnZW50KSB7CisgICAgICAgICAgICAgICAgaW5zZXJ0QWxsTWF0Y2hpbmdQc2V1ZG9SdWxl
cy5jYWxsKHRoaXMsIHRydWUpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpbnNlcnRBbGxNYXRjaGluZ1BzZXVkb1J1bGVzLmNhbGwodGhp
cyk7CisgICAgICAgICAgICBjcmVhdGVTZWxlY3Rvckl0ZW0uY2FsbCh0aGlzLCBydWxlLnN0eWxl
LCBydWxlLnNlbGVjdG9yVGV4dCwgcnVsZS5tZWRpYVRleHQpOworICAgICAgICAgICAgcHJldmlv
dXNSdWxlID0gcnVsZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEp1c3QgaW4gY2FzZSB0aGVy
ZSBhcmUgYW55IHJlbWFpbmluZyBwc2V1ZG8tc3R5bGVzLgorICAgICAgICBpbnNlcnRBbGxNYXRj
aGluZ1BzZXVkb1J1bGVzLmNhbGwodGhpcywgdHJ1ZSk7CisKKyAgICAgICAgLy8gSW5oZXJpdGVk
IFJ1bGVzCisgICAgICAgIGZvciAobGV0IGluaGVyaXRlZCBvZiB0aGlzLl9ub2RlU3R5bGVzLmlu
aGVyaXRlZFJ1bGVzKSB7CisgICAgICAgICAgICBpZiAoIWluaGVyaXRlZC5tYXRjaGVkUnVsZXMg
fHwgIWluaGVyaXRlZC5tYXRjaGVkUnVsZXMubGVuZ3RoKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgICAgICBsZXQgZGl2aWRlclRleHQgPSBXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIkluaGVyaXRlZCBmcm9tICVzIikuZm9ybWF0KFdlYkluc3BlY3Rvci5kaXNwbGF5TmFtZUZv
ck5vZGUoaW5oZXJpdGVkLm5vZGUpKTsKKyAgICAgICAgICAgIGxldCBkaXZpZGVyID0gbmV3IFdl
Ykluc3BlY3Rvci5HZW5lcmFsVHJlZUVsZW1lbnQoInNlY3Rpb24tZGl2aWRlciIsIGRpdmlkZXJU
ZXh0KTsKKyAgICAgICAgICAgIGRpdmlkZXIuc2VsZWN0YWJsZSA9IGZhbHNlOworICAgICAgICAg
ICAgdGhpcy5fc2VsZWN0b3JzLmFwcGVuZENoaWxkKGRpdmlkZXIpOworCisgICAgICAgICAgICBm
b3IgKGxldCBydWxlIG9mIHVuaXF1ZU9yZGVyZWRSdWxlcyhpbmhlcml0ZWQubWF0Y2hlZFJ1bGVz
KSkgeworICAgICAgICAgICAgICAgIGlmIChydWxlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5DU1NS
dWxlLlR5cGUuVXNlckFnZW50KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICAgICAgICAgIGNyZWF0ZVNlbGVjdG9ySXRlbS5jYWxsKHRoaXMsIHJ1bGUuc3R5bGUsIHJ1
bGUuc2VsZWN0b3JUZXh0LCBydWxlLm1lZGlhVGV4dCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICB0aGlzLl9mb2N1c05leHROZXdJbnNwZWN0b3JSdWxlID0gZmFsc2U7Cisg
ICAgfQorCisgICAgY3VycmVudFN0eWxlKCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fbm9k
ZVN0eWxlcyB8fCAhdGhpcy5fc2VsZWN0b3JzLnNlbGVjdGVkVHJlZUVsZW1lbnQpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdG9ycy5zZWxlY3RlZFRy
ZWVFbGVtZW50LnJlcHJlc2VudGVkT2JqZWN0OworICAgIH0KKworICAgIC8vIFByaXZhdGUKKwor
ICAgIF9zZWxlY3RvckNoYW5nZWQoc2VsZWN0ZWRUcmVlRWxlbWVudCkKKyAgICB7CisgICAgICAg
IGNvbnNvbGUuYXNzZXJ0KHNlbGVjdGVkVHJlZUVsZW1lbnQpOworICAgICAgICBpZiAoIXNlbGVj
dGVkVHJlZUVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gVGhlIGNs
YXNzIG5lZWRzIHRvIGJlIGNvbXBsZXRlbHkgcmVzZXQgYXMgdGhlIHByZXZpb3VzbHkgc2VsZWN0
ZWQgdHJlZUVsZW1lbnQgbW9zdCBsaWtlbHkgaGFkCisgICAgICAgIC8vIGEgZGlmZmVyZW50IGlj
b24gY2xhc3NOYW1lIGFuZCBpdCBpcyBzaW1wbGVyIHRvIHJlZ2VuZXJhdGUgdGhlIGNsYXNzIHRo
YW4gdG8gZmluZCBvdXQgd2hpY2gKKyAgICAgICAgLy8gY2xhc3Mgd2FzIHByZXZpb3VzbHkgYXBw
bGllZC4KKyAgICAgICAgdGhpcy5fY3VycmVudFNlbGVjdG9yRWxlbWVudC5jbGFzc05hbWUgPSAi
Y3VycmVudC1zZWxlY3RvciAiICsgc2VsZWN0ZWRUcmVlRWxlbWVudC5pY29uQ2xhc3NOYW1lOwor
CisgICAgICAgIGxldCBzZWxlY3RvclRleHQgPSBzZWxlY3RlZFRyZWVFbGVtZW50Lm1haW5UaXRs
ZTsKKyAgICAgICAgbGV0IG1lZGlhVGV4dCA9IHNlbGVjdGVkVHJlZUVsZW1lbnQuc3VidGl0bGU7
CisgICAgICAgIGlmIChtZWRpYVRleHQgJiYgbWVkaWFUZXh0Lmxlbmd0aCkKKyAgICAgICAgICAg
IHNlbGVjdG9yVGV4dCArPSAiIFx1MjAxNCAiICsgbWVkaWFUZXh0OyAvLyBlbS1kYXNoCisKKyAg
ICAgICAgdGhpcy5fY3VycmVudFNlbGVjdG9yVGV4dC50ZXh0Q29udGVudCA9IHNlbGVjdG9yVGV4
dDsKKworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3Iu
VmlzdWFsU3R5bGVTZWxlY3RvclNlY3Rpb24uRXZlbnQuU2VsZWN0b3JDaGFuZ2VkKTsKKyAgICB9
CisKKyAgICBfc3R5bGVUZXh0UmVzZXQoKQorICAgIHsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2
ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLkV2
ZW50LlN0eWxlVGV4dENoYW5nZWQpOworICAgIH0KKworICAgIF9hZGROZXdSdWxlKGV2ZW50KQor
ICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9ub2RlU3R5bGVzKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIHRoaXMuX25vZGVTdHlsZXMuYWRkRW1wdHlSdWxlKCk7CisgICAgICAgIHRo
aXMuX2ZvY3VzTmV4dE5ld0luc3BlY3RvclJ1bGUgPSB0cnVlOworICAgIH0KKworICAgIF90cmVl
RWxlbWVudENoZWNrYm94VG9nZ2xlZChldmVudCkKKyAgICB7CisgICAgICAgIGxldCBzdHlsZSA9
IHRoaXMuY3VycmVudFN0eWxlKCk7CisgICAgICAgIGlmICghc3R5bGUpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgbGV0IHN0eWxlVGV4dCA9IHN0eWxlLnRleHQ7CisgICAgICAgIGlm
ICghc3R5bGVUZXh0IHx8ICFzdHlsZVRleHQubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIC8vIENvbW1lbnQgb3IgdW5jb21tZW50IHRoZSBzdHlsZSB0ZXh0LgorICAgICAg
ICBsZXQgbmV3U3R5bGVUZXh0ID0gIiI7CisgICAgICAgIGxldCBzdHlsZUVuYWJsZWQgPSBldmVu
dCAmJiBldmVudC5kYXRhICYmIGV2ZW50LmRhdGEuZW5hYmxlZDsKKyAgICAgICAgaWYgKHN0eWxl
RW5hYmxlZCkKKyAgICAgICAgICAgIG5ld1N0eWxlVGV4dCA9IHN0eWxlVGV4dC5yZXBsYWNlKC9c
cyooXC9cKnxcKlwvKVxzKi9nLCAiIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ld1N0
eWxlVGV4dCA9ICIvKiAiICsgc3R5bGVUZXh0LnJlcGxhY2UoLyhccyo7KD8hJClccyopL2csICIk
MSAqLy8qICIpICsgIiAqLyI7CisKKyAgICAgICAgc3R5bGUudGV4dCA9IG5ld1N0eWxlVGV4dDsK
KyAgICAgICAgc3R5bGVbV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlRGV0YWlsc1BhbmVsLlN0eWxl
RGlzYWJsZWRTeW1ib2xdID0gIXN0eWxlRW5hYmxlZDsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2
ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JTZWN0aW9uLkV2
ZW50LlNlbGVjdG9yQ2hhbmdlZCk7CisKKyAgICB9CisKKyAgICBfaGFuZGxlTW91c2VPdmVyKCkK
KyAgICB7CisgICAgICAgIGlmICghdGhpcy5jb2xsYXBzZWQpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgbGV0IHN0eWxlID0gdGhpcy5jdXJyZW50U3R5bGUoKTsKKyAgICAgICAgaWYg
KCFzdHlsZS5vd25lclJ1bGUpIHsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kb21UcmVlTWFu
YWdlci5oaWdobGlnaHRET01Ob2RlKHN0eWxlLm5vZGUuaWQpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgV2ViSW5zcGVjdG9yLmRvbVRyZWVNYW5hZ2VyLmhpZ2hs
aWdodFNlbGVjdG9yKHN0eWxlLm93bmVyUnVsZS5zZWxlY3RvclRleHQsIHN0eWxlLm5vZGUub3du
ZXJEb2N1bWVudC5mcmFtZUlkZW50aWZpZXIpOworICAgIH0KKworICAgIF9oYW5kbGVNb3VzZU91
dCgpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuY29sbGFwc2VkKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIFdlYkluc3BlY3Rvci5kb21UcmVlTWFuYWdlci5oaWRlRE9NTm9kZUhp
Z2hsaWdodCgpOworICAgIH0KK307CisKK1dlYkluc3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9y
U2VjdGlvbi5MYXN0U2VsZWN0ZWRSdWxlU3ltYm9sID0gU3ltYm9sKCJ2aXN1YWwtc3R5bGUtc2Vs
ZWN0b3Itc2VjdGlvbi1sYXN0LXNlbGVjdGVkLXJ1bGUiKTsKKworV2ViSW5zcGVjdG9yLlZpc3Vh
bFN0eWxlU2VsZWN0b3JTZWN0aW9uLkV2ZW50ID0geworICAgIFNlbGVjdG9yQ2hhbmdlZDogInZp
c3VhbC1zdHlsZS1zZWxlY3Rvci1zZWN0aW9uLXNlbGVjdG9yLWNoYW5nZWQiLAorICAgIFN0eWxl
VGV4dENoYW5nZWQ6ICJ2aXN1YWwtc3R5bGUtc2VsZWN0b3Itc2VjdGlvbi1zdHlsZS10ZXh0LWNo
YW5nZWQiCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9WaWV3cy9WaXN1YWxTdHlsZVNlbGVjdG9yVHJlZUl0ZW0uY3NzIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVmlzdWFsU3R5bGVTZWxlY3RvclRyZWVJdGVtLmNz
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTQyZjQyCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVmlzdWFs
U3R5bGVTZWxlY3RvclRyZWVJdGVtLmNzcwpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky5pdGVtLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtIHsKKyAgICBkaXNwbGF5OiBmbGV4Owor
ICAgIHdpZHRoOiAxMDAlOworICAgIGhlaWdodDogMjVweDsKKyAgICBwYWRkaW5nOiAycHggMDsK
KyAgICBsaW5lLWhlaWdodDogMjBweDsKKyAgICBmb250LXNpemU6IDExcHg7Cit9CisKKy5pdGVt
LnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtLnNlbGVjdGVkIHsKKyAgICBiYWNrZ3JvdW5kLWNv
bG9yOiBoc2woMjEzLCA5MiUsIDU1JSkgIWltcG9ydGFudDsKKyAgICBjb2xvcjogaHNsKDAsIDEw
MCUsIDEwMCUpOworfQorCisuaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbSA+IC5kaXNj
bG9zdXJlLWJ1dHRvbiB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworLml0ZW0udmlzdWFsLXN0
eWxlLXNlbGVjdG9yLWl0ZW0gPiBpbnB1dFt0eXBlPSJjaGVja2JveCJdIHsKKyAgICBtYXJnaW46
IDQuNXB4IDAgNHB4IDVweDsKK30KKworLml0ZW0udmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0g
PiAuaWNvbiB7CisgICAgd2lkdGg6IDE2cHg7CisgICAgaGVpZ2h0OiAxNnB4OworICAgIG1hcmdp
bjogMi41cHggMCAyLjVweCA0cHg7Cit9CisKKy5pdGVtLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1p
dGVtLm1vZGlmaWVkID4gLmljb24geworICAgIC13ZWJraXQtZmlsdGVyOiBicmlnaHRuZXNzKDAu
NzUpOworfQorCisuaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbS5zZWxlY3Rvci1pbnZh
bGlkID4gLmljb24geworICAgIHdpZHRoOiAxNHB4OworICAgIGhlaWdodDogMTRweDsKKyAgICBt
YXJnaW46IDMuNXB4IDAgMy41cHggNXB4OworICAgIGNvbnRlbnQ6IHVybCguLi9JbWFnZXMvRXJy
b3Iuc3ZnKTsKK30KKworLml0ZW0udmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0uc2VsZWN0b3It
aW52YWxpZCA+IC50aXRsZXMgPiAudGl0bGUgeworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKK30K
KworLml0ZW0udmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0uc2VsZWN0b3ItaW52YWxpZCA+IC50
aXRsZXMgPiAudGl0bGU6OmJlZm9yZSB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRv
cDogY2FsYyg1MCUgLSAwLjVweCk7CisgICAgbGVmdDogMDsKKyAgICB3aWR0aDogMTAwJTsKKyAg
ICBib3JkZXItYm90dG9tOiAxcHggc29saWQgaHNsYSgwLCAxMDAlLCA1MCUsIDAuNik7CisgICAg
Y29udGVudDogIiI7Cit9CisKKy5pdGVtLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtID4gLnRp
dGxlcyB7CisgICAgb3ZlcmZsb3c6IGhpZGRlbjsKKyAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwor
ICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOworICAgIHBhZGRpbmc6IDAgMnB4IDAgM3B4Owor
fQorCisuaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbTpub3QoLmRvbS1lbGVtZW50LWlj
b24pID4gLnRpdGxlcyA+IC50aXRsZSB7CisgICAgcGFkZGluZzogMCAxcHggMnB4OworICAgIGxp
bmUtaGVpZ2h0OiAxMnB4OworICAgIG91dGxpbmU6IG5vbmU7Cit9CisKKy5pdGVtLnZpc3VhbC1z
dHlsZS1zZWxlY3Rvci1pdGVtOm5vdCguZG9tLWVsZW1lbnQtaWNvbikuZWRpdGFibGUgPiAudGl0
bGVzID4gLnRpdGxlIHsKKyAgICBjdXJzb3I6IHRleHQ7CisgICAgLXdlYmtpdC11c2VyLXNlbGVj
dDogdGV4dDsKKyAgICAtd2Via2l0LXVzZXItbW9kaWZ5OiByZWFkLXdyaXRlLXBsYWludGV4dC1v
bmx5OworfQorCisuaXRlbS52aXN1YWwtc3R5bGUtc2VsZWN0b3ItaXRlbTpub3QoLmRvbS1lbGVt
ZW50LWljb24pLmVkaXRhYmxlID4gLnRpdGxlcyA+IC50aXRsZTpmb2N1cyB7CisgICAgY29sb3I6
IGJsYWNrOworICAgIGJhY2tncm91bmQtY29sb3I6IGhzbCgwLCAxMDAlLCAxMDAlKTsKKyAgICBi
b3JkZXItcmFkaXVzOiAycHg7CisgICAgYm94LXNoYWRvdzogaHNsYSgwLCAwJSwgMCUsIDAuMTUp
IDAgMXB4IDAsIDAgMCAwIDNweCBoc2xhKDAsIDEwMCUsIDEwMCUsIDAuMyk7Cit9CisKKy5pdGVt
LnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtID4gLnRpdGxlcyA+IC5zdWJ0aXRsZTo6YmVmb3Jl
IHsKKyAgICBtYXJnaW4tcmlnaHQ6IDVweDsKKyAgICBmb250LXNpemU6IDExcHg7CisgICAgLyog
VGhlIGV4dHJhIHNwYWNlIGF0IHRoZSBiZWdpbm5pbmcgaXMgbmVjZXNzYXJ5IHRvIHByZXZlbnQg
dGhlIC13ZWJraXQtdXNlci1tb2RpZnkKKyAgICBjdXJzb3IgYmFyIGZyb20gZGlzcGxheWluZyBh
dCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBlbS1kYXNoLiAqLworICAgIGNvbnRlbnQ6ICIgXDIwMTQi
OyAvKiBlbS1kYXNoICovCit9CisKKy5pdGVtLnZpc3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtID4g
LnRpdGxlcyA+IC5zdWJ0aXRsZSB7CisgICAgZm9udC1zaXplOiA5cHg7Cit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9WaXN1YWxTdHlsZVNl
bGVjdG9yVHJlZUl0ZW0uanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9W
aWV3cy9WaXN1YWxTdHlsZVNlbGVjdG9yVHJlZUl0ZW0uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uY2E0ZDBhMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Zpc3VhbFN0eWxlU2VsZWN0b3JUcmVlSXRlbS5q
cwpAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rvci5WaXN1YWxTdHls
ZVNlbGVjdG9yVHJlZUl0ZW0gPSBjbGFzcyBWaXN1YWxTdHlsZVNlbGVjdG9yVHJlZUl0ZW0gZXh0
ZW5kcyBXZWJJbnNwZWN0b3IuR2VuZXJhbFRyZWVFbGVtZW50Cit7CisgICAgY29uc3RydWN0b3Io
c3R5bGUsIHRpdGxlLCBzdWJ0aXRsZSkKKyAgICB7CisgICAgICAgIGxldCBpY29uQ2xhc3NOYW1l
OworICAgICAgICBzd2l0Y2ggKHN0eWxlLnR5cGUpIHsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0
b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5UeXBlLlJ1bGU6CisgICAgICAgICAgICBjb25zb2xlLmFz
c2VydChzdHlsZS5vd25lclJ1bGUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuQ1NTUnVsZSwgc3R5
bGUub3duZXJSdWxlKTsKKworICAgICAgICAgICAgaWYgKHN0eWxlLmluaGVyaXRlZCkKKyAgICAg
ICAgICAgICAgICBpY29uQ2xhc3NOYW1lID0gV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRp
b25TZWN0aW9uLkluaGVyaXRlZFN0eWxlUnVsZUljb25TdHlsZUNsYXNzTmFtZTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKHN0eWxlLm93bmVyUnVsZS50eXBlID09PSBXZWJJbnNwZWN0b3IuQ1NTUnVs
ZS5UeXBlLkF1dGhvcikKKyAgICAgICAgICAgICAgICBpY29uQ2xhc3NOYW1lID0gV2ViSW5zcGVj
dG9yLkNTU1N0eWxlRGVjbGFyYXRpb25TZWN0aW9uLkF1dGhvclN0eWxlUnVsZUljb25TdHlsZUNs
YXNzTmFtZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlLm93bmVyUnVsZS50eXBlID09PSBX
ZWJJbnNwZWN0b3IuQ1NTUnVsZS5UeXBlLlVzZXIpCisgICAgICAgICAgICAgICAgaWNvbkNsYXNz
TmFtZSA9IFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uU2VjdGlvbi5Vc2VyU3R5bGVS
dWxlSWNvblN0eWxlQ2xhc3NOYW1lOworICAgICAgICAgICAgZWxzZSBpZiAoc3R5bGUub3duZXJS
dWxlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5DU1NSdWxlLlR5cGUuVXNlckFnZW50KQorICAgICAg
ICAgICAgICAgIGljb25DbGFzc05hbWUgPSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlv
blNlY3Rpb24uVXNlckFnZW50U3R5bGVSdWxlSWNvblN0eWxlQ2xhc3NOYW1lOworICAgICAgICAg
ICAgZWxzZSBpZiAoc3R5bGUub3duZXJSdWxlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5DU1NSdWxl
LlR5cGUuSW5zcGVjdG9yKQorICAgICAgICAgICAgICAgIGljb25DbGFzc05hbWUgPSBXZWJJbnNw
ZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvblNlY3Rpb24uSW5zcGVjdG9yU3R5bGVSdWxlSWNvblN0
eWxlQ2xhc3NOYW1lOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBXZWJJbnNw
ZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5UeXBlLklubGluZToKKyAgICAgICAgY2FzZSBXZWJJ
bnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5UeXBlLkF0dHJpYnV0ZToKKyAgICAgICAgICAg
IGlmIChzdHlsZS5pbmhlcml0ZWQpCisgICAgICAgICAgICAgICAgaWNvbkNsYXNzTmFtZSA9IFdl
Ykluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uU2VjdGlvbi5Jbmhlcml0ZWRFbGVtZW50U3R5
bGVSdWxlSWNvblN0eWxlQ2xhc3NOYW1lOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIGljb25DbGFzc05hbWUgPSBXZWJJbnNwZWN0b3IuRE9NVHJlZUVsZW1lbnRQYXRoQ29tcG9u
ZW50LkRPTUVsZW1lbnRJY29uU3R5bGVDbGFzc05hbWU7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIHRpdGxlID0gdGl0bGUudHJpbSgpOworCisgICAgICAgIHN1cGVy
KFsidmlzdWFsLXN0eWxlLXNlbGVjdG9yLWl0ZW0iLCBpY29uQ2xhc3NOYW1lXSwgdGl0bGUsIHN1
YnRpdGxlLCBzdHlsZSk7CisKKyAgICAgICAgdGhpcy5faWNvbkNsYXNzTmFtZSA9IGljb25DbGFz
c05hbWU7CisgICAgICAgIHRoaXMuX2xhc3RWYWx1ZSA9IHRpdGxlOworICAgICAgICB0aGlzLl9l
bmFibGVFZGl0aW5nID0gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBQdWJsaWMKKworICAgIGdldCBp
Y29uQ2xhc3NOYW1lKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9pY29uQ2xhc3NOYW1l
OworICAgIH0KKworICAgIGdldCBzZWxlY3RvclRleHQoKQorICAgIHsKKyAgICAgICAgbGV0IHRp
dGxlVGV4dCA9IHRoaXMuX21haW5UaXRsZUVsZW1lbnQudGV4dENvbnRlbnQ7CisgICAgICAgIGlm
ICghdGl0bGVUZXh0IHx8ICF0aXRsZVRleHQubGVuZ3RoKQorICAgICAgICAgICAgdGl0bGVUZXh0
ID0gdGhpcy5fbWFpblRpdGxlOworCisgICAgICAgIHJldHVybiB0aXRsZVRleHQudHJpbSgpOwor
ICAgIH0KKworICAgIC8vIFByb3RlY3RlZAorCisgICAgb25hdHRhY2goKQorICAgIHsKKyAgICAg
ICAgc3VwZXIub25hdHRhY2goKTsKKworICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUuYWRkRXZl
bnRMaXN0ZW5lcigibW91c2VvdmVyIiwgdGhpcy5faGlnaGxpZ2h0Tm9kZXNXaXRoU2VsZWN0b3Iu
YmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX2xpc3RJdGVtTm9kZS5hZGRFdmVudExpc3RlbmVy
KCJtb3VzZW91dCIsIHRoaXMuX2hpZGVET01Ob2RlSGlnaGxpZ2h0LmJpbmQodGhpcykpOworICAg
ICAgICB0aGlzLl9saXN0SXRlbU5vZGUuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCB0
aGlzLl9oYW5kbGVDb250ZXh0TWVudUV2ZW50LmJpbmQodGhpcykpOworCisgICAgICAgIHRoaXMu
X2NoZWNrYm94RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CisgICAg
ICAgIHRoaXMuX2NoZWNrYm94RWxlbWVudC50eXBlID0gImNoZWNrYm94IjsKKyAgICAgICAgdGhp
cy5fY2hlY2tib3hFbGVtZW50LmNoZWNrZWQgPSAhdGhpcy5yZXByZXNlbnRlZE9iamVjdFtXZWJJ
bnNwZWN0b3IuVmlzdWFsU3R5bGVEZXRhaWxzUGFuZWwuU3R5bGVEaXNhYmxlZFN5bWJvbF07Cisg
ICAgICAgIHRoaXMuX3VwZGF0ZUNoZWNrYm94VGl0bGUoKTsKKyAgICAgICAgdGhpcy5fY2hlY2ti
b3hFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIHRoaXMuX2hhbmRsZUNoZWNrYm94
Q2hhbmdlZC5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5fbGlzdEl0ZW1Ob2RlLmluc2VydEJl
Zm9yZSh0aGlzLl9jaGVja2JveEVsZW1lbnQsIHRoaXMuX2ljb25FbGVtZW50KTsKKworICAgICAg
ICB0aGlzLl9tYWluVGl0bGVFbGVtZW50LnNwZWxsY2hlY2sgPSBmYWxzZTsKKyAgICAgICAgdGhp
cy5fbWFpblRpdGxlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCB0aGlzLl9o
YW5kbGVNYWluVGl0bGVNb3VzZURvd24uYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX21haW5U
aXRsZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMuX2hhbmRsZU1haW5U
aXRsZUtleURvd24uYmluZCh0aGlzKSk7CisgICAgICAgIHRoaXMuX21haW5UaXRsZUVsZW1lbnQu
YWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLCB0aGlzLl9oaWdobGlnaHROb2Rlc1dpdGhTZWxlY3Rv
ci5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5fbWFpblRpdGxlRWxlbWVudC5hZGRFdmVudExp
c3RlbmVyKCJibHVyIiwgdGhpcy5fY29tbWl0U2VsZWN0b3IuYmluZCh0aGlzKSk7CisKKyAgICAg
ICAgdGhpcy5yZXByZXNlbnRlZE9iamVjdC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5D
U1NTdHlsZURlY2xhcmF0aW9uLkV2ZW50LkluaXRpYWxUZXh0TW9kaWZpZWQsIHRoaXMuX3N0eWxl
VGV4dE1vZGlmaWVkLCB0aGlzKTsKKyAgICAgICAgaWYgKHRoaXMucmVwcmVzZW50ZWRPYmplY3Qu
b3duZXJSdWxlKQorICAgICAgICAgICAgdGhpcy5yZXByZXNlbnRlZE9iamVjdC5vd25lclJ1bGUu
YWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQ1NTUnVsZS5FdmVudC5TZWxlY3RvckNoYW5n
ZWQsIHRoaXMuX3NlbGVjdG9yQ2hhbmdlZCwgdGhpcyk7CisKKyAgICAgICAgdGhpcy5fc3R5bGVU
ZXh0TW9kaWZpZWQoKTsKKyAgICB9CisKKyAgICBvbmRlc2VsZWN0KCkKKyAgICB7CisgICAgICAg
IHRoaXMuX2xpc3RJdGVtTm9kZS5jbGFzc0xpc3QucmVtb3ZlKCJlZGl0YWJsZSIpOworICAgIH0K
KworICAgIC8vIFByaXZhdGUKKworICAgIF9oaWdobGlnaHROb2Rlc1dpdGhTZWxlY3RvcigpCisg
ICAgeworICAgICAgICBpZiAoIXRoaXMucmVwcmVzZW50ZWRPYmplY3Qub3duZXJSdWxlKSB7Cisg
ICAgICAgICAgICBXZWJJbnNwZWN0b3IuZG9tVHJlZU1hbmFnZXIuaGlnaGxpZ2h0RE9NTm9kZSh0
aGlzLnJlcHJlc2VudGVkT2JqZWN0Lm5vZGUuaWQpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgV2ViSW5zcGVjdG9yLmRvbVRyZWVNYW5hZ2VyLmhpZ2hsaWdodFNl
bGVjdG9yKHRoaXMuc2VsZWN0b3JUZXh0LCB0aGlzLnJlcHJlc2VudGVkT2JqZWN0Lm5vZGUub3du
ZXJEb2N1bWVudC5mcmFtZUlkZW50aWZpZXIpOworICAgIH0KKworICAgIF9oaWRlRE9NTm9kZUhp
Z2hsaWdodCgpCisgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IuZG9tVHJlZU1hbmFnZXIuaGlk
ZURPTU5vZGVIaWdobGlnaHQoKTsKKyAgICB9CisKKyAgICBfaGFuZGxlQ29udGV4dE1lbnVFdmVu
dChldmVudCkKKyAgICB7CisgICAgICAgIGxldCBjb250ZXh0TWVudSA9IG5ldyBXZWJJbnNwZWN0
b3IuQ29udGV4dE1lbnUoZXZlbnQpOworCisgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0o
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDb3B5IFJ1bGUiKSwgZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QuY29weVRleHQodGhpcy5yZXByZXNlbnRlZE9iamVj
dC5nZW5lcmF0ZUNTU1J1bGVTdHJpbmcoKSk7CisgICAgICAgIH0uYmluZCh0aGlzKSk7CisKKyAg
ICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJlc2V0
IiksIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdGhpcy5yZXByZXNlbnRlZE9iamVjdC5yZXNl
dFRleHQoKTsKKyAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYklu
c3BlY3Rvci5WaXN1YWxTdHlsZVNlbGVjdG9yVHJlZUl0ZW0uRXZlbnQuU3R5bGVUZXh0UmVzZXQp
OworICAgICAgICB9LmJpbmQodGhpcykpOworCisgICAgICAgIGNvbnRleHRNZW51LnNob3coKTsK
KyAgICB9CisKKyAgICBfaGFuZGxlQ2hlY2tib3hDaGFuZ2VkKGV2ZW50KQorICAgIHsKKyAgICAg
ICAgdGhpcy5fdXBkYXRlQ2hlY2tib3hUaXRsZSgpOworICAgICAgICB0aGlzLmRpc3BhdGNoRXZl
bnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuVmlzdWFsU3R5bGVTZWxlY3RvclRyZWVJdGVtLkV2
ZW50LkNoZWNrYm94Q2hhbmdlZCwge2VuYWJsZWQ6IHRoaXMuX2NoZWNrYm94RWxlbWVudC5jaGVj
a2VkfSk7CisgICAgfQorCisgICAgX3VwZGF0ZUNoZWNrYm94VGl0bGUoKQorICAgIHsKKyAgICAg
ICAgaWYgKHRoaXMuX2NoZWNrYm94RWxlbWVudC5jaGVja2VkKQorICAgICAgICAgICAgdGhpcy5f
Y2hlY2tib3hFbGVtZW50LnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDbGljayB0byBk
aXNhYmxlIHRoZSBzZWxlY3RlZCBydWxlIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRo
aXMuX2NoZWNrYm94RWxlbWVudC50aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ2xpY2sg
dG8gZW5hYmxlIHRoZSBzZWxlY3RlZCBydWxlIik7CisgICAgfQorCisgICAgX2hhbmRsZU1haW5U
aXRsZU1vdXNlRG93bihldmVudCkKKyAgICB7CisgICAgICAgIHRoaXMuX2xpc3RJdGVtTm9kZS5j
bGFzc0xpc3QudG9nZ2xlKCJlZGl0YWJsZSIsIHRoaXMuc2VsZWN0ZWQpOworICAgIH0KKworICAg
IF9oYW5kbGVNYWluVGl0bGVLZXlEb3duKGV2ZW50KQorICAgIHsKKyAgICAgICAgdGhpcy5faGln
aGxpZ2h0Tm9kZXNXaXRoU2VsZWN0b3IoKTsKKworICAgICAgICBsZXQgZW50ZXJLZXlDb2RlID0g
V2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuS2V5LkVudGVyLmtleUNvZGU7CisgICAgICAg
IGlmIChldmVudC5rZXlDb2RlID09PSBlbnRlcktleUNvZGUpCisgICAgICAgICAgICB0aGlzLl9t
YWluVGl0bGVFbGVtZW50LmJsdXIoKTsKKyAgICB9CisKKyAgICBfY29tbWl0U2VsZWN0b3IoKQor
ICAgIHsKKyAgICAgICAgdGhpcy5faGlkZURPTU5vZGVIaWdobGlnaHQoKTsKKyAgICAgICAgdGhp
cy5fbGlzdEl0ZW1Ob2RlLmNsYXNzTGlzdC5yZW1vdmUoImVkaXRhYmxlIik7CisKKyAgICAgICAg
bGV0IHZhbHVlID0gdGhpcy5zZWxlY3RvclRleHQ7CisgICAgICAgIGlmICh2YWx1ZSA9PT0gdGhp
cy5fbGFzdFZhbHVlICYmIHRoaXMuX3ZhbGlkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIHRoaXMucmVwcmVzZW50ZWRPYmplY3Qub3duZXJSdWxlLnNlbGVjdG9yVGV4dCA9IHZhbHVl
OworICAgIH0KKworICAgIF9zdHlsZVRleHRNb2RpZmllZCgpCisgICAgeworICAgICAgICB0aGlz
Ll9saXN0SXRlbU5vZGUuY2xhc3NMaXN0LnRvZ2dsZSgibW9kaWZpZWQiLCB0aGlzLnJlcHJlc2Vu
dGVkT2JqZWN0Lm1vZGlmaWVkKTsKKyAgICB9CisKKyAgICBfc2VsZWN0b3JDaGFuZ2VkKGV2ZW50
KQorICAgIHsKKyAgICAgICAgdGhpcy5fdmFsaWQgPSBldmVudCAmJiBldmVudC5kYXRhICYmIGV2
ZW50LmRhdGEudmFsaWQ7CisgICAgICAgIHRoaXMuX2xpc3RJdGVtTm9kZS5jbGFzc0xpc3QudG9n
Z2xlKCJzZWxlY3Rvci1pbnZhbGlkIiwgIXRoaXMuX3ZhbGlkKTsKKyAgICAgICAgbGV0IGludmFs
aWRUaXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiVGhlIHNlbGVjdG9yICclcycgaXMgaW52
YWxpZC4iKS5mb3JtYXQodGhpcy5zZWxlY3RvclRleHQpOworICAgICAgICB0aGlzLl9pY29uRWxl
bWVudC50aXRsZSA9ICF0aGlzLl92YWxpZCA/IGludmFsaWRUaXRsZSA6IG51bGw7CisgICAgfQor
fTsKKworV2ViSW5zcGVjdG9yLlZpc3VhbFN0eWxlU2VsZWN0b3JUcmVlSXRlbS5FdmVudCA9IHsK
KyAgICBTdHlsZVRleHRSZXNldDogInZpc3VhbC1zdHlsZS1zZWxlY3Rvci1pdGVtLXN0eWxlLXRl
eHQtcmVzZXQiLAorICAgIENoZWNrYm94Q2hhbmdlZDogInZpc3VhbC1zdHlsZS1zZWxlY3Rvci1p
dGVtLWNoZWNrYm94LWNoYW5nZWQiCit9Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>