<?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>221062</bug_id>
          
          <creation_ts>2021-01-27 14:50:24 -0800</creation_ts>
          <short_desc>Web Inspector: implement the basics for showing/hiding grid overlays</short_desc>
          <delta_ts>2021-02-08 14:48:08 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Blaze Burg">bburg</reporter>
          <assigned_to name="Blaze Burg">bburg</assigned_to>
          <cc>bburg</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>nvasilyev</cc>
    
    <cc>pangle</cc>
    
    <cc>rcaliman</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1723158</commentid>
    <comment_count>0</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2021-01-27 14:50:24 -0800</bug_when>
    <thetext>.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723168</commentid>
    <comment_count>1</comment_count>
      <attachid>418587</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2021-01-27 15:11:02 -0800</bug_when>
    <thetext>Created attachment 418587
Patch v0.1 - WIP (no drawing code)

I&apos;ve done the boring parts to hook up the frontend and backend. This needs: drawing code, tests for the protocol, and exposed via the UI somewhere (Layout pane?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723169</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2021-01-27 15:11:41 -0800</bug_when>
    <thetext>This patch modifies the inspector protocol generator. Please ensure that you have rebaselined any generator test results (i.e., by running `Tools/Scripts/run-inspector-generator-tests --reset-results`)

This patch modifies the inspector protocol. Please ensure that any frontend changes appropriately use feature checks for new protocol features.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723179</commentid>
    <comment_count>3</comment_count>
      <attachid>418587</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2021-01-27 15:28:12 -0800</bug_when>
    <thetext>Comment on attachment 418587
Patch v0.1 - WIP (no drawing code)

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

Just some drive by comments because I was interested.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generator.py:87
&gt; +    &quot;DOM.GridOverlayConfig&quot;: [],

Oh? What additional properties do you expect?

&gt; Source/WebCore/inspector/InspectorOverlay.h:139
&gt; +        Color gridColor;
&gt; +        bool showLineNames;
&gt; +        bool showLineNumbers;
&gt; +        bool showExtendedGridlines;
&gt; +        bool showTrackSizes;
&gt; +        bool showAreaNames;

Hold a `Config` here instead of duplicating all the properties?

&gt; Source/WebInspectorUI/UserInterface/Models/Color.js:644
&gt; +        let rgba = this.rgba;
&gt; +        return {r: rgba[0], g: rgba[1], b: rgba[2], a: rgba[3]};

Too crazy? =)

```
let [r, g, b, a] = this.rgba;
return {r, g, b, a};
```

If there is a performance difference, I&apos;d want JSC to look into it!

&gt; Source/WebInspectorUI/UserInterface/Models/DOMNode.js:557
&gt; +    // Supported options: showLineNames, showLineNumbers, showExtendedGridLines, showTrackSizes, showAreaNames.
&gt; +    // See DOM.GridOverlayConfig and associated protocol commands for more information about these grid overlay options.

Alternative: You could make a WI.GridOverlayConfig Model object with a .toProtocol().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723200</commentid>
    <comment_count>4</comment_count>
      <attachid>418597</attachid>
    <who name="Patrick Angle">pangle</who>
    <bug_when>2021-01-27 16:24:12 -0800</bug_when>
    <thetext>Created attachment 418597
Patch v0.1 - WIP (drawing code)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723201</commentid>
    <comment_count>5</comment_count>
      <attachid>418597</attachid>
    <who name="Patrick Angle">pangle</who>
    <bug_when>2021-01-27 16:28:11 -0800</bug_when>
    <thetext>Comment on attachment 418597
Patch v0.1 - WIP (drawing code)

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

&gt; Source/WebCore/inspector/InspectorOverlay.cpp:578
&gt;  InspectorOverlay::RulerExclusion InspectorOverlay::drawNodeHighlight(GraphicsContext&amp; context, Node&amp; node)

To be clear, the new code below should not live in this method, it was just a convenient place for prototyping. This drawing code doesn&apos;t handle rotation/scaling/translation/etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723207</commentid>
    <comment_count>6</comment_count>
      <attachid>418587</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-01-27 16:40:12 -0800</bug_when>
    <thetext>Comment on attachment 418587
Patch v0.1 - WIP (no drawing code)

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

Some comments on the protocol.

&gt; Source/JavaScriptCore/inspector/protocol/DOM.json:38
&gt; +            &quot;enum&quot;: [&quot;grid&quot;, &quot;subgrid&quot;, &quot;other&quot;],

Do we really need an `&quot;other&quot;` if this is already being used optionally?  What would `&quot;other&quot;` even be used for?

Also, it might be a good idea to actually enumerate all of the types here right now and instrument them all so that even if you&apos;re not able to build UI for all of them (assuming you want to) then if the UI is added in a later release it would still be able to support older remote debuggables.

&gt; Source/JavaScriptCore/inspector/protocol/DOM.json:42
&gt; +            &quot;id&quot;: &quot;GridOverlayConfig&quot;,

IMO these properties should really just be parameters of `showGridOverlay` rather than be part of an object (which is harder to deal with as a `JSON::Object` instead of individual POD values).

&gt; Source/JavaScriptCore/inspector/protocol/DOM.json:525
&gt; +            &quot;name&quot;: &quot;showGridOverlay&quot;,

This should also be `&quot;condition&quot;: &quot;!(defined(WTF_PLATFORM_IOS_FAMILY) &amp;&amp; WTF_PLATFORM_IOS_FAMILY)&quot;,` until `InspectorOverlay` is made to work on iOS.

&gt; Source/JavaScriptCore/inspector/protocol/DOM.json:534
&gt; +            &quot;name&quot;: &quot;hideGridOverlay&quot;,

ditto (:525)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723208</commentid>
    <comment_count>7</comment_count>
      <attachid>418597</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-01-27 16:42:11 -0800</bug_when>
    <thetext>Comment on attachment 418597
Patch v0.1 - WIP (drawing code)

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

&gt; Source/JavaScriptCore/inspector/protocol/CSS.json:312
&gt; +            &quot;name&quot;: &quot;getGridDataForNode&quot;,

I realize this is WIP, but I&apos;m curious as to what direction you&apos;re heading in.  Does this exist only for getting data to be shown in the frontend (e.g. the names of the tracks so you can assign colors to them), or is it actually going to be data that you&apos;re going to pass back to the backend.  If the former, 👍.  If the latter, I wonder if that&apos;s really necessary and would be interested in hearing why you think so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723209</commentid>
    <comment_count>8</comment_count>
      <attachid>418587</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-01-27 16:42:55 -0800</bug_when>
    <thetext>Comment on attachment 418587
Patch v0.1 - WIP (no drawing code)

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

&gt;&gt; Source/JavaScriptCore/inspector/protocol/DOM.json:38
&gt;&gt; +            &quot;enum&quot;: [&quot;grid&quot;, &quot;subgrid&quot;, &quot;other&quot;],
&gt; 
&gt; Do we really need an `&quot;other&quot;` if this is already being used optionally?  What would `&quot;other&quot;` even be used for?
&gt; 
&gt; Also, it might be a good idea to actually enumerate all of the types here right now and instrument them all so that even if you&apos;re not able to build UI for all of them (assuming you want to) then if the UI is added in a later release it would still be able to support older remote debuggables.

Also, I wonder if maybe this should be in `CSS` given that layout contexts and grid stuff are all CSS concepts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723217</commentid>
    <comment_count>9</comment_count>
      <attachid>418597</attachid>
    <who name="Patrick Angle">pangle</who>
    <bug_when>2021-01-27 17:01:37 -0800</bug_when>
    <thetext>Comment on attachment 418597
Patch v0.1 - WIP (drawing code)

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

&gt;&gt; Source/JavaScriptCore/inspector/protocol/CSS.json:312
&gt;&gt; +            &quot;name&quot;: &quot;getGridDataForNode&quot;,
&gt; 
&gt; I realize this is WIP, but I&apos;m curious as to what direction you&apos;re heading in.  Does this exist only for getting data to be shown in the frontend (e.g. the names of the tracks so you can assign colors to them), or is it actually going to be data that you&apos;re going to pass back to the backend.  If the former, 👍.  If the latter, I wonder if that&apos;s really necessary and would be interested in hearing why you think so.

Neither. This was a stub of mine for testing that is superseded by what BJ uploaded and we have sketched out for protocol. The preliminary attempt at drawing code is the only useful thing in this patch. Sorry for the confusion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723427</commentid>
    <comment_count>10</comment_count>
      <attachid>418587</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2021-01-28 11:10:23 -0800</bug_when>
    <thetext>Comment on attachment 418587
Patch v0.1 - WIP (no drawing code)

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

Thanks for the comments, all. Now time to mash the two together!

&gt;&gt;&gt; Source/JavaScriptCore/inspector/protocol/DOM.json:38
&gt;&gt;&gt; +            &quot;enum&quot;: [&quot;grid&quot;, &quot;subgrid&quot;, &quot;other&quot;],
&gt;&gt; 
&gt;&gt; Do we really need an `&quot;other&quot;` if this is already being used optionally?  What would `&quot;other&quot;` even be used for?
&gt;&gt; 
&gt;&gt; Also, it might be a good idea to actually enumerate all of the types here right now and instrument them all so that even if you&apos;re not able to build UI for all of them (assuming you want to) then if the UI is added in a later release it would still be able to support older remote debuggables.
&gt; 
&gt; Also, I wonder if maybe this should be in `CSS` given that layout contexts and grid stuff are all CSS concepts.

As for layout context types, it is fine to stub out all the values, but I don&apos;t see the point implementing them on the backend until more important pieces are working.

I&apos;m indifferent about the domains, but other highlighting commands are in DOM and deal with DOMNodes, so I put it here.

&gt;&gt; Source/JavaScriptCore/inspector/protocol/DOM.json:42
&gt;&gt; +            &quot;id&quot;: &quot;GridOverlayConfig&quot;,
&gt; 
&gt; IMO these properties should really just be parameters of `showGridOverlay` rather than be part of an object (which is harder to deal with as a `JSON::Object` instead of individual POD values).

If it&apos;s not possible to feature detect fields on an object, then perhaps it would be better as command parameters.

&gt;&gt; Source/JavaScriptCore/inspector/protocol/DOM.json:525
&gt;&gt; +            &quot;name&quot;: &quot;showGridOverlay&quot;,
&gt; 
&gt; This should also be `&quot;condition&quot;: &quot;!(defined(WTF_PLATFORM_IOS_FAMILY) &amp;&amp; WTF_PLATFORM_IOS_FAMILY)&quot;,` until `InspectorOverlay` is made to work on iOS.

Is there really a benefit to doing this right now? I know it doesn&apos;t work right now, and fixing it is scheduled. If we don&apos;t end up doing it, then sure, guard it off.

&gt;&gt; Source/WebCore/inspector/InspectorOverlay.h:139
&gt;&gt; +        bool showAreaNames;
&gt; 
&gt; Hold a `Config` here instead of duplicating all the properties?

OK

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/Color.js:644
&gt;&gt; +        return {r: rgba[0], g: rgba[1], b: rgba[2], a: rgba[3]};
&gt; 
&gt; Too crazy? =)
&gt; 
&gt; ```
&gt; let [r, g, b, a] = this.rgba;
&gt; return {r, g, b, a};
&gt; ```
&gt; 
&gt; If there is a performance difference, I&apos;d want JSC to look into it!

I knew there was a clever way to do it, thanks!

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/DOMNode.js:557
&gt;&gt; +    // See DOM.GridOverlayConfig and associated protocol commands for more information about these grid overlay options.
&gt; 
&gt; Alternative: You could make a WI.GridOverlayConfig Model object with a .toProtocol().

This is a solid idea. I want to hold off on making this more generalized until we&apos;ve figured out how overlay configs will be serialized to async storage. Ideally we can store and fetch the entire POD JSON object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1724067</commentid>
    <comment_count>11</comment_count>
      <attachid>418820</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2021-01-30 16:41:16 -0800</bug_when>
    <thetext>Created attachment 418820
Patch v1.0

I think this patch is ready to proceed with review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1724127</commentid>
    <comment_count>12</comment_count>
      <attachid>418839</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2021-01-31 19:48:00 -0800</bug_when>
    <thetext>Created attachment 418839
Patch v1.1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1724430</commentid>
    <comment_count>13</comment_count>
      <attachid>418839</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-02-01 14:56:08 -0800</bug_when>
    <thetext>Comment on attachment 418839
Patch v1.1

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

r=me with some things to address before landing :)

&gt; Source/WebInspectorUI/ChangeLog:26
&gt; +        no callback argument was pasased. This is used by a new test.

s/pasased/passed

&gt; Source/JavaScriptCore/inspector/protocol/DOM.json:497
&gt; +            &quot;name&quot;: &quot;showGridOverlay&quot;,

&gt;&gt; This should also be `&quot;condition&quot;: &quot;!(defined(WTF_PLATFORM_IOS_FAMILY) &amp;&amp; WTF_PLATFORM_IOS_FAMILY)&quot;,` until `InspectorOverlay` is made to work on iOS.
&gt;&gt;
&gt; Is there really a benefit to doing this right now? I know it doesn&apos;t work right now, and fixing it is scheduled. If we don&apos;t end up doing it, then sure, guard it off.

I think the benefit of doing it right now is that we won&apos;t forget to do it later and we can confirm now that it is working as intended (since the iOS overlay work hasn&apos;t been done yet).

&gt; Source/WebCore/inspector/InspectorOverlay.cpp:418
&gt; +    for (const GridOverlay&amp; gridOverlay : m_activeGridOverlays)
&gt; +        drawGridOverlay(context, gridOverlay);

NIT: I feel like grid overlay UI should be drawn below paint rects, not above.

&gt; Source/WebCore/inspector/InspectorOverlay.cpp:566
&gt; +    if (!renderer)

NIT: do we really need two checks with two different errors?  `is&lt;RenderGrid&gt;(renderer)` will already check for whether `renderer` is a `nullptr` or not.

&gt; Source/WebCore/inspector/InspectorOverlay.cpp:572
&gt; +        return gridOverlay.gridNode.get() == &amp;node;

Do we need to boolean-check `gridOverlay.gridNode` before we call `.get()`?
```
    return !gridOverlay.gridNode || gridOverlay.gridNode.get() == &amp;node;
```

&gt; Source/WebCore/inspector/InspectorOverlay.cpp:585
&gt; +        return gridOverlay.gridNode.get() == &amp;node;

ditto (:572)

&gt; Source/WebCore/inspector/InspectorOverlay.cpp:1148
&gt; +            return gridOverlay.gridNode.get() == gridOverlay.gridNode;

ditto (:572)

&gt; Source/WebCore/inspector/InspectorOverlay.cpp:1156
&gt; +    if (!is&lt;RenderGrid&gt;(renderer))

Should we remove this from the list if it&apos;s no longer a grid context?

&gt; Source/WebCore/inspector/InspectorOverlay.h:49
&gt; +namespace Inspector {
&gt; +using ErrorString = String;
&gt; +
&gt; +template &lt;typename T&gt;
&gt; +using ErrorStringOr = Expected&lt;T, ErrorString&gt;;
&gt; +}

NIT: I&apos;d just `#include &lt;JavaScriptCore/InspectorProtocolTypes.h&gt;`

&gt; Source/WebCore/inspector/InspectorOverlay.h:108
&gt; +    struct GridOverlay {

NIT: I&apos;d just call this `Grid` since it&apos;s fully qualified name is `InspectorOverlay::Grid` anyways (the second &quot;Overlay&quot; is kinda redundant IMO)

&gt; Source/WebCore/inspector/InspectorOverlay.h:122
&gt; +        WeakPtr&lt;Node&gt; gridNode;

`#include &lt;wtf/WeakPtr&gt;` (or replace the existing stuff with `#include &lt;wtf/Forward.h&gt;`)

&gt; Source/WebCore/inspector/InspectorOverlay.h:148
&gt; +    unsigned gridOverlayCount() const { return m_activeGridOverlays.size(); }

NIT: rather than return the `size()`, do you want to return a list of `Node` instead?  That way the test can confirm that not only are there the right number of grid overlay UIs shown but that they&apos;re also for the right nodes.

&gt; Source/WebCore/inspector/InspectorOverlay.h:156
&gt; +    Inspector::ErrorStringOr&lt;void&gt; setGridOverlayForNode(Node&amp;, const GridOverlay::Config&amp;);

NIT: should we make the `Grid::Config&amp;&amp;` instead?  I doubt that callers would want to keep the `Grid::Config`.

&gt; Source/WebCore/inspector/InspectorOverlay.h:193
&gt; +    Vector&lt;GridOverlay&gt; m_activeGridOverlays;

Since there can only be one `Grid` per `Node`, could we have this be a `HashMap` (or `WeakHashMap` not sure if that exists) instead?  Along these lines, if a `Node` with an active `DOM.showGridOverlay` is removed from the DOM and GCd, what will remove it from this list?

&gt; Source/WebCore/inspector/agents/InspectorDOMAgent.cpp:1484
&gt; +    config.gridColor = parseColor(WTFMove(gridColor));

Does this not have a `Protocol::ErrorString`?  What do we output if `gridColor` is invalid?

&gt; Source/WebCore/inspector/agents/InspectorDOMAgent.cpp:1499
&gt; +    Protocol::ErrorString errorString;
&gt; +    Node* node = nullptr;

I&apos;d restructure this slightly to have less stuff at a higher scope than necessary
```
    if (nodeId) {
        Protocol::ErrorString errorString;
        auto* node = assertNode(errorString, *nodeId);
        if (!node)
            return makeUnexpected(errorString);

        return m_overlay-&gt;clearGridOverlayForNode(*node);
    }

    m_overlay-&gt;clearAllGridOverlays();

    return { };
```

&gt; Source/WebInspectorUI/UserInterface/Controllers/DOMManager.js:166
&gt; +        if (this._documentPromise)

If you want to do this then you&apos;ll also need to clear `_documentPromise` whenever `_document` changes.

Also, these `_requestDocumentWith*` functions should really be moved to a `// Private` section below (although I admit this file needs a bit of cleanup).

&gt; Source/WebInspectorUI/UserInterface/Controllers/DOMManager.js:173
&gt; +            this._requestDocumentWithCallback((doc) =&gt; this._documentPromise.resolve(doc));

Style: We only use single-line arrow functions if we expect to use the implicitly returned value.  Please make this into a multi-line arrow function with `{` `}`.

&gt; Source/WebInspectorUI/UserInterface/Models/DOMNode.js:556
&gt; +    showGridOverlay(color, options = {showLineNames: false, showLineNumbers: false, showExtendedGridLines: false, showTrackSizes: false, showAreaNames: false})

Style: We normally don&apos;t provide a default value unless it&apos;s truthy.

Also, we normally destruct with the values and default-initialize them in the body rather than doing it as part of an optional parameter declaration (we tend to avoid providing default values for optional object parameters because the default value is only used if the key is entirely missing, meaning that we&apos;d likely want to check inside the function body anyways, so why bother having logic to have a default if we&apos;re gonna check it later).
```
    showGridOverlay(color, {showLineNames, showLineNumbers, showExtendedGridLines, showTrackSizes, showAreaNames} = {})
```
This way you don&apos;t have to `options.*` in the function.

&gt; Source/WebInspectorUI/UserInterface/Views/ContextMenuUtilities.js:390
&gt; +        // FIXME: remove these menu items when removing the feature flag. They exist to test the backend commands easily.

Please include a bug with this FIXME so that we have something to keep track of.

&gt; Source/WebInspectorUI/UserInterface/Views/ContextMenuUtilities.js:391
&gt; +        if (WI.settings.experimentalEnableLayoutPanel.value &amp;&amp; WI.isEngineeringBuild) {

NIT: I&apos;d put the `WI.isEngineeringBuild` first so that we don&apos;t even have to look at `localStorage` when in non-engineering builds.

&gt; Source/WebInspectorUI/UserInterface/Views/ContextMenuUtilities.js:396
&gt; +                    domNode.showGridOverlay(color).catch((error) =&gt; console.error(error));

NIT: you should be able to just `.catch(console.error)` instead of wrapping it in an arrow function

&gt; LayoutTests/inspector/dom/showGridOverlay.html:12
&gt; +        let result = await DOMAgent.querySelector(doc.id, &quot;.grid-container&quot;);

Why not `doc.querySelectorAll(&quot;.grid-container&quot;)`?

&gt; LayoutTests/inspector/dom/showGridOverlay.html:18
&gt; +        let result = await DOMAgent.querySelectorAll(doc.id, &quot;.grid-container&quot;);

ditto (:12)

&gt; LayoutTests/inspector/dom/showGridOverlay.html:27
&gt; +        name: &quot;GridOverlay.ShowOneGrid&quot;,

Style: We usually prefix the name of each test-case with the name of the overall suite (e.g. &quot;DOM.showGridOverlay.OneGrid&quot;).

&gt; LayoutTests/inspector/dom/showGridOverlay.html:29
&gt; +        async test(resolve, reject) {

remove the `resolve, reject` since this is an `async` function

&gt; LayoutTests/inspector/dom/showGridOverlay.html:30
&gt; +            InspectorTest.expectEqual(await gridOverlayCount(), 0, &quot;Expect no grids to be displayed.&quot;);

NIT: We normally phrase our messages with verbs like &quot;Should&quot;, so something like &quot;Should have 0 grids displayed.&quot;.

&gt; LayoutTests/inspector/dom/showGridOverlay.html:35
&gt; +            InspectorTest.expectEqual(await gridOverlayCount(), 1, &quot;Expect one grid to be displayed.&quot;);

I personally don&apos;t like using `await` inside unless as part of a statement (i.e. not as part of a sub-expression) as it makes it slightly harder to grok the order of things.  I&apos;d rather create closures for each sub-test and have a variable like `let count = await gridOverlayCount()` (or even have something like `async checkGridOverlayCount` that takes the expected value as an argument) so that it&apos;s explicit what lines are async and what lines are sync.

&gt; LayoutTests/inspector/dom/showGridOverlay.html:147
&gt; +            margin: 100px;

Are any of the styles other than `display` and `grid-*` really needed?

&gt; LayoutTests/inspector/dom/showGridOverlay.html:153
&gt; +            background-color: #fff;

`white`

&gt; LayoutTests/inspector/dom/showGridOverlay.html:154
&gt; +            color: #555;

Why this color?

&gt; LayoutTests/inspector/dom/showGridOverlay.html:168
&gt; +        &lt;div class=&quot;box a&quot;&gt;A&lt;/div&gt;

Do we actually need content inside these boxes for the test to work?  I ask because it adds to the output and could be confusing to someone trying to diagnose a possible future failure with this test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1724541</commentid>
    <comment_count>14</comment_count>
      <attachid>418839</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2021-02-01 23:53:17 -0800</bug_when>
    <thetext>Comment on attachment 418839
Patch v1.1

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

&gt;&gt; Source/WebCore/inspector/InspectorOverlay.cpp:566
&gt;&gt; +    if (!renderer)
&gt; 
&gt; NIT: do we really need two checks with two different errors?  `is&lt;RenderGrid&gt;(renderer)` will already check for whether `renderer` is a `nullptr` or not.

OK

&gt;&gt; Source/WebCore/inspector/InspectorOverlay.cpp:572
&gt;&gt; +        return gridOverlay.gridNode.get() == &amp;node;
&gt; 
&gt; Do we need to boolean-check `gridOverlay.gridNode` before we call `.get()`?
&gt; ```
&gt;     return !gridOverlay.gridNode || gridOverlay.gridNode.get() == &amp;node;
&gt; ```

OK

&gt;&gt; Source/WebCore/inspector/InspectorOverlay.cpp:585
&gt;&gt; +        return gridOverlay.gridNode.get() == &amp;node;
&gt; 
&gt; ditto (:572)

OK

&gt;&gt; Source/WebCore/inspector/InspectorOverlay.cpp:1156
&gt;&gt; +    if (!is&lt;RenderGrid&gt;(renderer))
&gt; 
&gt; Should we remove this from the list if it&apos;s no longer a grid context?

Oh, duh.

&gt;&gt; Source/WebCore/inspector/InspectorOverlay.h:49
&gt;&gt; +}
&gt; 
&gt; NIT: I&apos;d just `#include &lt;JavaScriptCore/InspectorProtocolTypes.h&gt;`

I don&apos;t want to qualify Inspector::Protocol::ErrorStringOr all over, since this has nothing to do with protocol code.

&gt;&gt; Source/WebCore/inspector/InspectorOverlay.h:108
&gt;&gt; +    struct GridOverlay {
&gt; 
&gt; NIT: I&apos;d just call this `Grid` since it&apos;s fully qualified name is `InspectorOverlay::Grid` anyways (the second &quot;Overlay&quot; is kinda redundant IMO)

OK. Still keeping it in variable names otherwise it would be impossible to grep.

&gt;&gt; Source/WebCore/inspector/InspectorOverlay.h:122
&gt;&gt; +        WeakPtr&lt;Node&gt; gridNode;
&gt; 
&gt; `#include &lt;wtf/WeakPtr&gt;` (or replace the existing stuff with `#include &lt;wtf/Forward.h&gt;`)

OK

&gt;&gt; Source/WebCore/inspector/InspectorOverlay.h:148
&gt;&gt; +    unsigned gridOverlayCount() const { return m_activeGridOverlays.size(); }
&gt; 
&gt; NIT: rather than return the `size()`, do you want to return a list of `Node` instead?  That way the test can confirm that not only are there the right number of grid overlay UIs shown but that they&apos;re also for the right nodes.

I considered it, but just went with number since I didn&apos;t think it was worth the trouble to figure out how to hook up NodeList. I don&apos;t anticipate adding to these tests, they are just to cover the very basics.

&gt;&gt; Source/WebCore/inspector/InspectorOverlay.h:156
&gt;&gt; +    Inspector::ErrorStringOr&lt;void&gt; setGridOverlayForNode(Node&amp;, const GridOverlay::Config&amp;);
&gt; 
&gt; NIT: should we make the `Grid::Config&amp;&amp;` instead?  I doubt that callers would want to keep the `Grid::Config`.

OK

&gt;&gt; Source/WebCore/inspector/InspectorOverlay.h:193
&gt;&gt; +    Vector&lt;GridOverlay&gt; m_activeGridOverlays;
&gt; 
&gt; Since there can only be one `Grid` per `Node`, could we have this be a `HashMap` (or `WeakHashMap` not sure if that exists) instead?  Along these lines, if a `Node` with an active `DOM.showGridOverlay` is removed from the DOM and GCd, what will remove it from this list?

As for why a Vector, I don&apos;t want to deal weak keys. Also, I want stable iteration/paint order without depending on HashMap/HastListSet invariants. Also, it&apos;s unclear right now whether we want to draw &gt;1 grid per node, which may be relevant for subgrid.

Overlays with an empty WeakPtr&lt;Node&gt; reference get cleared when we try to draw it and discover its empty, or similarly when adding/removing overlays. I extracted this code to removeGridOverlayForNode(Node&amp;).

&gt;&gt; Source/WebCore/inspector/agents/InspectorDOMAgent.cpp:1484
&gt;&gt; +    config.gridColor = parseColor(WTFMove(gridColor));
&gt; 
&gt; Does this not have a `Protocol::ErrorString`?  What do we output if `gridColor` is invalid?

Umm.. this is so dumb.:

    auto r = colorObject-&gt;getInteger(Protocol::DOM::RGBAColor::rKey);
    auto g = colorObject-&gt;getInteger(Protocol::DOM::RGBAColor::gKey);
    auto b = colorObject-&gt;getInteger(Protocol::DOM::RGBAColor::bKey);
    if (!r || !g || !b)
        return Color::transparentBlack;


I&apos;ll make it return Optional&lt;Color&gt;, but in the interest of preserving behavior, all other callsites will get the &quot;error&quot; behavior tacked on: parseColor(c).valueOr(Color::transparentBlack)

&gt;&gt; Source/WebCore/inspector/agents/InspectorDOMAgent.cpp:1499
&gt;&gt; +    Node* node = nullptr;
&gt; 
&gt; I&apos;d restructure this slightly to have less stuff at a higher scope than necessary
&gt; ```
&gt;     if (nodeId) {
&gt;         Protocol::ErrorString errorString;
&gt;         auto* node = assertNode(errorString, *nodeId);
&gt;         if (!node)
&gt;             return makeUnexpected(errorString);
&gt; 
&gt;         return m_overlay-&gt;clearGridOverlayForNode(*node);
&gt;     }
&gt; 
&gt;     m_overlay-&gt;clearAllGridOverlays();
&gt; 
&gt;     return { };
&gt; ```

Good catch.

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/DOMManager.js:166
&gt;&gt; +        if (this._documentPromise)
&gt; 
&gt; If you want to do this then you&apos;ll also need to clear `_documentPromise` whenever `_document` changes.
&gt; 
&gt; Also, these `_requestDocumentWith*` functions should really be moved to a `// Private` section below (although I admit this file needs a bit of cleanup).

OK

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/DOMManager.js:173
&gt;&gt; +            this._requestDocumentWithCallback((doc) =&gt; this._documentPromise.resolve(doc));
&gt; 
&gt; Style: We only use single-line arrow functions if we expect to use the implicitly returned value.  Please make this into a multi-line arrow function with `{` `}`.

OK

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/ContextMenuUtilities.js:390
&gt;&gt; +        // FIXME: remove these menu items when removing the feature flag. They exist to test the backend commands easily.
&gt; 
&gt; Please include a bug with this FIXME so that we have something to keep track of.

OK

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/ContextMenuUtilities.js:391
&gt;&gt; +        if (WI.settings.experimentalEnableLayoutPanel.value &amp;&amp; WI.isEngineeringBuild) {
&gt; 
&gt; NIT: I&apos;d put the `WI.isEngineeringBuild` first so that we don&apos;t even have to look at `localStorage` when in non-engineering builds.

OK

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/ContextMenuUtilities.js:396
&gt;&gt; +                    domNode.showGridOverlay(color).catch((error) =&gt; console.error(error));
&gt; 
&gt; NIT: you should be able to just `.catch(console.error)` instead of wrapping it in an arrow function

OK

&gt;&gt; LayoutTests/inspector/dom/showGridOverlay.html:12
&gt;&gt; +        let result = await DOMAgent.querySelector(doc.id, &quot;.grid-container&quot;);
&gt; 
&gt; Why not `doc.querySelectorAll(&quot;.grid-container&quot;)`?

Oh, yeah.

&gt;&gt; LayoutTests/inspector/dom/showGridOverlay.html:18
&gt;&gt; +        let result = await DOMAgent.querySelectorAll(doc.id, &quot;.grid-container&quot;);
&gt; 
&gt; ditto (:12)

OK

&gt;&gt; LayoutTests/inspector/dom/showGridOverlay.html:27
&gt;&gt; +        name: &quot;GridOverlay.ShowOneGrid&quot;,
&gt; 
&gt; Style: We usually prefix the name of each test-case with the name of the overall suite (e.g. &quot;DOM.showGridOverlay.OneGrid&quot;).

OK

&gt;&gt; LayoutTests/inspector/dom/showGridOverlay.html:29
&gt;&gt; +        async test(resolve, reject) {
&gt; 
&gt; remove the `resolve, reject` since this is an `async` function

OK (I feel old)

&gt;&gt; LayoutTests/inspector/dom/showGridOverlay.html:35
&gt;&gt; +            InspectorTest.expectEqual(await gridOverlayCount(), 1, &quot;Expect one grid to be displayed.&quot;);
&gt; 
&gt; I personally don&apos;t like using `await` inside unless as part of a statement (i.e. not as part of a sub-expression) as it makes it slightly harder to grok the order of things.  I&apos;d rather create closures for each sub-test and have a variable like `let count = await gridOverlayCount()` (or even have something like `async checkGridOverlayCount` that takes the expected value as an argument) so that it&apos;s explicit what lines are async and what lines are sync.

OK!

&gt;&gt; LayoutTests/inspector/dom/showGridOverlay.html:147
&gt;&gt; +            margin: 100px;
&gt; 
&gt; Are any of the styles other than `display` and `grid-*` really needed?

It&apos;s rather hard to sanity check the grid lines unless the elements have a background or border (harder to see).

&gt;&gt; LayoutTests/inspector/dom/showGridOverlay.html:153
&gt;&gt; +            background-color: #fff;
&gt; 
&gt; `white`

OK

&gt;&gt; LayoutTests/inspector/dom/showGridOverlay.html:154
&gt;&gt; +            color: #555;
&gt; 
&gt; Why this color?

¯\_(ツ)_/¯

&gt;&gt; LayoutTests/inspector/dom/showGridOverlay.html:168
&gt;&gt; +        &lt;div class=&quot;box a&quot;&gt;A&lt;/div&gt;
&gt; 
&gt; Do we actually need content inside these boxes for the test to work?  I ask because it adds to the output and could be confusing to someone trying to diagnose a possible future failure with this test.

I&apos;m not worried about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1724547</commentid>
    <comment_count>15</comment_count>
      <attachid>418966</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2021-02-02 00:17:05 -0800</bug_when>
    <thetext>Created attachment 418966
Patch v1.2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1724561</commentid>
    <comment_count>16</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-02-02 01:02:40 -0800</bug_when>
    <thetext>Committed r272197: &lt;https://trac.webkit.org/changeset/272197&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 418966.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1726819</commentid>
    <comment_count>17</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2021-02-08 14:48:08 -0800</bug_when>
    <thetext>&lt;rdar://73504216&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418587</attachid>
            <date>2021-01-27 15:11:02 -0800</date>
            <delta_ts>2021-01-30 16:41:13 -0800</delta_ts>
            <desc>Patch v0.1 - WIP (no drawing code)</desc>
            <filename>bug-221062-20210127151101.patch</filename>
            <type>text/plain</type>
            <size>22777</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcxOTUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
NGZmYzdjOTgyZjU5OTZiZGUxZGJkN2UxMjQ3MGVhYThhZmNlZjliLi41Njk0N2JjZmMyMzliMzU4
MWYzYjI0ODMwZTUwYjliYWFkMzA2OGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAyMS0wMS0yNyAgQkogQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KKworICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBpbXBsZW1lbnQgdGhlIGJhc2ljcyBmb3Igc2hvd2luZy9oaWRp
bmcgZ3JpZCBvdmVybGF5cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjIxMDYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBpbnNwZWN0b3IvcHJvdG9jb2wvRE9NLmpzb246CisgICAgICAgIEFkZCBuZXcg
Y29tbWFuZHMgdG8gc2hvdyBhbmQgaGlkZSBDU1MgZ3JpZCBvdmVybGF5cy4KKworICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5OgorICAgICAgICBJbiBvcmRl
ciB0byBnZXQgdGhlIGtleSBuYW1lcywgbWFrZSB0aGUgb2JqZWN0IGJlIG9wZW4uCisKKwogMjAy
MS0wMS0yNyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtK
U0NdIFJlbW92ZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24gb2JqZWN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MWRkYzY4YWRkZGNkZTIzMTViYTg0Yjc2MzlmNTA4NjhkM2NiNmE3ZC4uMTMwYjM5YTk2MzYyZGM0
MDljNTc0ZjA3MjgxZThlNTM4MWEyMjNmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisy
MDIxLTAxLTI3ICBCSiBCdXJnICA8YmJ1cmdAYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IGltcGxlbWVudCB0aGUgYmFzaWNzIGZvciBzaG93aW5nL2hpZGluZyBncmlkIG92ZXJs
YXlzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjEw
NjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbV0lQ
XSAtIGRvZXNuJ3QgZG8gYW55IGFjdHVhbCBkcmF3aW5nIHlldC4gV2FpdGluZyBvbiBQYXRyaWNr
J3MgV0lQIHRvIGJlIHVwbG9hZGVkLgorCisgICAgICAgIEltcGxlbWVudCBuZXcgcHJvdG9jb2wg
bWV0aG9kcyB0byBzaG93IG9yIGhpZGUgQ1NTIGdyaWQgb3ZlcmxheXMuCisKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JPdmVybGF5OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5Ojpz
ZXRHcmlkT3ZlcmxheUZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3Zlcmxh
eTo6Y2xlYXJHcmlkT3ZlcmxheUZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
T3ZlcmxheTo6Y2xlYXJBbGxHcmlkT3ZlcmxheXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yT3ZlcmxheTo6ZHJhd0dyaWRPdmVybGF5KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yT3ZlcmxheS5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6R3JpZE92
ZXJsYXk6OnNldERhdGFGcm9tQ29uZmlnKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckRPTUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JE
T01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Z3JpZE92
ZXJsYXlDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRPTUFnZW50OjpzaG93R3JpZE92ZXJsYXkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRE9NQWdlbnQ6OmhpZGVHcmlkT3ZlcmxheSk6CisKIDIwMjEtMDEtMjcgIFphbGFuIEJ1anRh
cyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJRkNdIEV4cGFuZCAiZW1wdHkg
bGluZSIgZmFzdCBwYXRoIHN1cHBvcnQgZm9yIG11bHRpbGluZSBpbmxpbmUgYm94ZXMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nCmluZGV4IGVhNTU4NWJhYzBjOGVmMTU4NDYwNzI5Mzg3N2U2MjA5NzNh
ZTYzMGYuLjUzNTBlY2VjNjlmM2U2ZGI0Njg4MGYzM2Q4Y2FjOGVhYjQ4NjJjNDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDIxLTAxLTI3ICBCSiBCdXJnICA8
YmJ1cmdAYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IGltcGxlbWVudCB0aGUg
YmFzaWNzIGZvciBzaG93aW5nL2hpZGluZyBncmlkIG92ZXJsYXlzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjEwNjIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbV0lQXQorCisgICAgICAgIEhvb2sgdXAg
V0kuRE9NTm9kZSBtZXRob2RzIHRvIHNob3cvaGlkZSBhbiBvdmVybGF5IGZvciBhIHNwZWNpZmlj
IERPTSBub2RlLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9Db250cm9sbGVycy9ET01NYW5h
Z2VyLmpzOgorICAgICAgICAoV0kuRE9NTWFuYWdlci5wcm90b3R5cGUuYnVpbGRHcmlkT3Zlcmxh
eUNvbmZpZyk6CisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMvQ29sb3IuanM6CisgICAg
ICAgIChXSS5Db2xvci5wcm90b3R5cGUudG9Qcm90b2NvbCk6CisgICAgICAgICogVXNlckludGVy
ZmFjZS9Nb2RlbHMvRE9NTm9kZS5qczoKKyAgICAgICAgKFdJLkRPTU5vZGUucHJvdG90eXBlLnNo
b3dHcmlkT3ZlcmxheSk6CisgICAgICAgIChXSS5ET01Ob2RlLnByb3RvdHlwZS5oaWRlR3JpZE92
ZXJsYXkpOgorCiAyMDIxLTAxLTI2ICBSYXp2YW4gQ2FsaW1hbiAgPHJjYWxpbWFuQGFwcGxlLmNv
bT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyNzA2MzcpIEZpbHRlcmluZyBkb2VzIG5vdCB3b3Jr
IGluIFN0eWxlcyBzaWRlYmFyIHBhbmVsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3Byb3RvY29sL0RPTS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9wcm90b2NvbC9ET00uanNvbgppbmRleCA5OThiYzRhZmU2OGVjNzA1MDJhMDA5Yjdi
ZjVlZDFkZTk3NThhYjMxLi4yNDBjN2RhZmNlOGYwZGEwOTZhMzZlYzZjMGY3MDJiMzBmMGUwOWUx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0RP
TS5qc29uCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvRE9N
Lmpzb24KQEAgLTMyLDYgKzMyLDM0IEBACiAgICAgICAgICAgICAiZW51bSI6IFsiYnVpbHRpbiIs
ICJjdXN0b20iLCAid2FpdGluZyIsICJmYWlsZWQiXSwKICAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJDdXN0b20gZWxlbWVudCBzdGF0ZS4iCiAgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJpZCI6ICJMYXlvdXRDb250ZXh0VHlwZSIsCisgICAgICAgICAgICAidHlwZSI6ICJz
dHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbImdyaWQiLCAic3ViZ3JpZCIsICJvdGhlciJd
LAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSB0eXBlIG9mIGxheW91dCBjb250ZXh0
LiBUaGlzIG1heSBiZSBleHRlbmRlZCB0byBvdGhlciBsYXlvdXQgY29udGV4dHMgKGJsb2NrLCBm
bG9hdCwgZmxleCwgdGFibGUsIGV0Yy4pIGluIHRoZSBmdXR1cmUuIgorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgICAiaWQiOiAiR3JpZE92ZXJsYXlDb25maWciLAorICAgICAgICAg
ICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiZ3JpZENvbG9yIiwgIiRyZWYiOiAiUkdCQUNvbG9yIiwgImRl
c2NyaXB0aW9uIjogIkZvbyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNob3dMaW5l
TmFtZXMiLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9u
IjogIlNob3cgbGFiZWxzIGZvciBncmlkIGxpbmUgbmFtZXMuIElmIG5vdCBzcGVjaWZpZWQsIHRo
ZSBkZWZhdWx0IHZhbHVlIGlzIGZhbHNlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InNob3dMaW5lTnVtYmVycyIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAi
ZGVzY3JpcHRpb24iOiAiU2hvdyBsYWJlbHMgZm9yIGdyaWQgbGluZSBudW1iZXJzLiBJZiBub3Qg
c3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBmYWxzZS4iIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJzaG93RXh0ZW5kZWRHcmlkbGluZXMiLCAidHlwZSI6ICJib29sZWFuIiwg
Im9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlNob3cgZ3JpZCBsaW5lcyB0aGF0IGV4
dGVuZCBiZXlvbmQgdGhlIGJvdW5kcyBvZiB0aGUgZ3JpZC4gSWYgbm90IHNwZWNpZmllZCwgdGhl
IGRlZmF1bHQgdmFsdWUgaXMgZmFsc2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
c2hvd1RyYWNrU2l6ZXMiLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRl
c2NyaXB0aW9uIjogIlNob3cgZ3JpZCB0cmFjayBzaXplIGluZm9ybWF0aW9uLiBJZiBub3Qgc3Bl
Y2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBmYWxzZS4iIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJzaG93QXJlYU5hbWVzIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6
IHRydWUsICJkZXNjcmlwdGlvbiI6ICJTaG93IGxhYmVscyBmb3IgZ3JpZCBhcmVhIG5hbWVzLiBJ
ZiBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBmYWxzZS4iIH0KKyAgICAgICAg
ICAgIF0sCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiU3BlY2lmaWVzIHRoZSBkcmF3aW5n
IG9wdGlvbnMgdG8gYmUgdXNlZCBmb3IgYSBncmlkIG92ZXJsYXkuIgorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgICAiaWQiOiAiTGF5b3V0UmVzdWx0IiwKKyAgICAgICAgICAgICJ0
eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiSW5mb3JtYXRpb24g
YWJvdXQgYSBub2RlIHRoYXQgd2FzIGRlcml2ZWQgZHVyaW5nIGxheW91dCBhbmQvb3IgcmVuZGVy
aW5nLiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogIm5vZGVJZCIsICIkcmVmIjogIk5vZGVJZCIsICJkZXNjcmlwdGlvbiI6ICJOb2RlIGlk
ZW50aWZpZXIgdGhhdCBpcyBwYXNzZWQgaW50byB0aGUgcmVzdCBvZiB0aGUgRE9NIG1lc3NhZ2Vz
IGFzIHRoZSA8Y29kZT5ub2RlSWQ8L2NvZGU+LiBCYWNrZW5kIHdpbGwgb25seSBwdXNoIG5vZGUg
d2l0aCBnaXZlbiA8Y29kZT5pZDwvY29kZT4gb25jZS4iIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJsYXlvdXRDb250ZXh0IiwgIiRyZWYiOiAiTGF5b3V0Q29udGV4dFR5cGUiLCAib3B0
aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVGhlIGxheW91dCBjb250ZXh0IHRoYXQgdGhp
cyBub2RlIGJlZ2lucywgaWYgYW55LiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAogICAg
ICAgICB7CiAgICAgICAgICAgICAiaWQiOiAiTGl2ZVJlZ2lvblJlbGV2YW50IiwKICAgICAgICAg
ICAgICJ0eXBlIjogInN0cmluZyIsCkBAIC00OTMsNiArNTIxLDIzIEBACiAgICAgICAgICAgICBd
LAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkhpZ2hsaWdodHMgb3duZXIgZWxlbWVudCBv
ZiB0aGUgZnJhbWUgd2l0aCBnaXZlbiBpZC4iCiAgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJuYW1lIjogInNob3dHcmlkT3ZlcmxheSIsCisgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiU2hvd3MgYSBncmlkIG92ZXJsYXkgZm9yIGEgbm9kZSB0aGF0IGJlZ2lucyBhICdncmlk
JyBsYXlvdXQgY29udGV4dC4gVGhlIGNvbW1hbmQgaGFzIG5vIGVmZmVjdCBpZiA8Y29kZT5ub2Rl
SWQ8L2NvZGU+IGlzIGludmFsaWQgb3IgdGhlIGFzc29jaWF0ZWQgbm9kZSBkb2VzIG5vdCBiZWdp
biBhICdncmlkJyBsYXlvdXQgY29udGV4dC4gQSBub2RlIGNhbiBvbmx5IGhhdmUgb25lIGdyaWQg
b3ZlcmxheSBhdCBhIHRpbWU7IHN1YnNlcXVlbnQgY2FsbHMgd2l0aCB0aGUgc2FtZSA8Y29kZT5u
b2RlSWQ8L2NvZGU+IHdpbGwgb3ZlcnJpZGUgZWFybGllciBjYWxscy4iLAorICAgICAgICAgICAg
InRhcmdldFR5cGVzIjogWyJwYWdlIl0sCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vZGVJZCIsICIkcmVmIjogIk5vZGVJZCIsICJkZXNj
cmlwdGlvbiI6ICJUaGUgbm9kZSBmb3Igd2hpY2ggYSBncmlkIG92ZXJsYXkgc2hvdWxkIGJlIHNo
b3duLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm92ZXJsYXlDb25maWciLCAiJHJl
ZiI6ICJHcmlkT3ZlcmxheUNvbmZpZyIsICJkZXNjcmlwdGlvbiI6ICJDb25maWd1cmF0aW9uIGZv
ciBob3cgdGhlIG92ZXJsYXkgZ3JpZCBzaG91bGQgYmUgZHJhd24uIiB9CisgICAgICAgICAgICBd
CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImhpZGVHcmlkT3Zl
cmxheSIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiSGlkZXMgYSBncmlkIG92ZXJsYXkg
Zm9yIGEgbm9kZSB0aGF0IGJlZ2lucyBhICdncmlkJyBsYXlvdXQgY29udGV4dC4gVGhlIGNvbW1h
bmQgaGFzIG5vIGVmZmVjdCBpZiA8Y29kZT5ub2RlSWQ8L2NvZGU+IGlzIHNwZWNpZmllZCBhbmQg
aW52YWxpZCwgb3IgaWYgdGhlcmUgaXMgbm90IGN1cnJlbnRseSBhbiBvdmVybGF5IHNldCBmb3Ig
dGhlIDxjb2RlPm5vZGVJZDwvY29kZT4uIiwKKyAgICAgICAgICAgICJ0YXJnZXRUeXBlcyI6IFsi
cGFnZSJdLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJub2RlSWQiLCAiJHJlZiI6ICJOb2RlSWQiLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVz
Y3JpcHRpb24iOiAiVGhlIG5vZGUgZm9yIHdoaWNoIGEgZ3JpZCBvdmVybGF5IHNob3VsZCBiZSBo
aWRkZW4uIElmIGEgPGNvZGU+bm9kZUlkPC9jb2RlPiBpcyBub3Qgc3BlY2lmaWVkLCBhbGwgZ3Jp
ZCBvdmVybGF5cyB3aWxsIGJlIGhpZGRlbi4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwK
ICAgICAgICAgewogICAgICAgICAgICAgIm5hbWUiOiAicHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5k
IiwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJSZXF1ZXN0cyB0aGF0IHRoZSBub2RlIGlz
IHNlbnQgdG8gdGhlIGNhbGxlciBnaXZlbiBpdHMgcGF0aC4iLApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9y
LnB5CmluZGV4IDI5YTJkZWE3MjRmMGJiZWNmZWJhNmRiOTIwNjA4MTcwMWU1MTBjNTEuLjY5MzMx
ZWZhMjFmOTA0YTFmZDgyYjZjMmYyOTY1ODI5YWI3M2IwZTkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
b3IucHkKQEAgLTg0LDYgKzg0LDcgQEAgX1RZUEVTX1dJVEhfT1BFTl9GSUVMRFMgPSB7CiAgICAg
IlRpbWVsaW5lLlRpbWVsaW5lRXZlbnQiOiBbXSwKICAgICAiQ1NTLkNTU1Byb3BlcnR5IjogWyJw
cmlvcml0eSIsICJwYXJzZWRPayIsICJzdGF0dXMiXSwKICAgICAiRE9NLkhpZ2hsaWdodENvbmZp
ZyI6IFtdLAorICAgICJET00uR3JpZE92ZXJsYXlDb25maWciOiBbXSwKICAgICAiRE9NLlJHQkFD
b2xvciI6IFtdLAogICAgICJET01TdG9yYWdlLlN0b3JhZ2VJZCI6IFtdLAogICAgICJEZWJ1Z2dl
ci5CcmVha3BvaW50QWN0aW9uIjogW10sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yT3ZlcmxheS5jcHAKaW5kZXggZDdhNTdhN2YxNTFhMDlkNDk5NzIyMDllZmIxOWJkZTE5
NjkyYzg5NC4uNWQ4YThmYzBiNDQ4M2IyYjdmOTM5ZDAwMDQzYzRiMzVjZjNjOGZkNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcApAQCAtNDE0LDYg
KzQxNCwxMSBAQCB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkKIAogICAgIGlmIChtX3Nob3dSdWxlcnMgfHwgbV9zaG93UnVsZXJzRHVyaW5nRWxl
bWVudFNlbGVjdGlvbikKICAgICAgICAgZHJhd1J1bGVycyhjb250ZXh0LCBydWxlckV4Y2x1c2lv
bik7CisKKyAgICBpZiAoIW1fYWN0aXZlR3JpZE92ZXJsYXlzLmlzRW1wdHkoKSkgeworICAgICAg
ICBmb3IgKGNvbnN0IEdyaWRPdmVybGF5JiBncmlkT3ZlcmxheSA6IG1fYWN0aXZlR3JpZE92ZXJs
YXlzKQorICAgICAgICAgICAgZHJhd0dyaWRPdmVybGF5KGNvbnRleHQsIGdyaWRPdmVybGF5KTsK
KyAgICB9CiB9CiAKIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6Z2V0SGlnaGxpZ2h0KEluc3BlY3Rv
ck92ZXJsYXk6OkhpZ2hsaWdodCYgaGlnaGxpZ2h0LCBJbnNwZWN0b3JPdmVybGF5OjpDb29yZGlu
YXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0CkBAIC01NTUsNiArNTYwLDQ5IEBAIHZv
aWQgSW5zcGVjdG9yT3ZlcmxheTo6c2V0U2hvd1J1bGVycyhib29sIHNob3dSdWxlcnMpCiAgICAg
dXBkYXRlKCk7CiB9CiAKK0Vycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yT3ZlcmxheTo6c2V0
R3JpZE92ZXJsYXlGb3JOb2RlKE5vZGUmIG5vZGUsIGNvbnN0IEdyaWRPdmVybGF5OjpDb25maWcm
IG92ZXJsYXlDb25maWcpCit7CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUucmVu
ZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoIkNvdWxkIG5vdCBmaW5kIHJlbmRlcmVyIGZvciBub2RlLiIpOworICAgIGlmICghcmVuZGVy
ZXItPmlzUmVuZGVyR3JpZCgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vZGUg
ZG9lcyBub3QgaW5pdGlhdGUgYSBncmlkIGNvbnRleHQiKTsKKworICAgIG1fYWN0aXZlR3JpZE92
ZXJsYXlzLnJlbW92ZUFsbE1hdGNoaW5nKFsmXSAoY29uc3QgR3JpZE92ZXJsYXkmIGdyaWRPdmVy
bGF5KSB7CisgICAgICAgIHJldHVybiBncmlkT3ZlcmxheS5ncmlkTm9kZS5nZXQoKSA9PSAmbm9k
ZTsKKyAgICB9KTsKKworICAgIEdyaWRPdmVybGF5IG92ZXJsYXk7CisgICAgb3ZlcmxheS5ncmlk
Tm9kZSA9IG1ha2VXZWFrUHRyKG5vZGUpOworICAgIG92ZXJsYXkuc2V0RGF0YUZyb21Db25maWco
b3ZlcmxheUNvbmZpZyk7CisgICAgbV9hY3RpdmVHcmlkT3ZlcmxheXMuYXBwZW5kKFdURk1vdmUo
b3ZlcmxheSkpOworCisgICAgdXBkYXRlKCk7CisKKyAgICByZXR1cm4geyB9OworfQorCitFcnJv
clN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck92ZXJsYXk6OmNsZWFyR3JpZE92ZXJsYXlGb3JOb2Rl
KE5vZGUmIG5vZGUpCit7CisgICAgYXV0byBjb3VudCA9IG1fYWN0aXZlR3JpZE92ZXJsYXlzLnJl
bW92ZUFsbE1hdGNoaW5nKFsmXSAoY29uc3QgR3JpZE92ZXJsYXkmIGdyaWRPdmVybGF5KSB7Cisg
ICAgICAgIHJldHVybiBncmlkT3ZlcmxheS5ncmlkTm9kZS5nZXQoKSA9PSAmbm9kZTsKKyAgICB9
KTsKKworICAgIGlmICghY291bnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTm8g
Z3JpZCBvdmVybGF5IGV4aXN0cyBmb3IgdGhlIG5vZGUsIHNvIGNhbm5vdCBjbGVhci4iKTsKKwor
ICAgIHVwZGF0ZSgpOworCisgICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBJbnNwZWN0b3JPdmVy
bGF5OjpjbGVhckFsbEdyaWRPdmVybGF5cygpCit7CisgICAgbV9hY3RpdmVHcmlkT3ZlcmxheXMu
Y2xlYXIoKTsKKworICAgIHVwZGF0ZSgpOworfQorCiB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnVw
ZGF0ZVBhaW50UmVjdHNUaW1lckZpcmVkKCkKIHsKICAgICBNb25vdG9uaWNUaW1lIG5vdyA9IE1v
bm90b25pY1RpbWU6Om5vdygpOwpAQCAtMTA5Miw0ICsxMTQwLDE5IEBAIFBhdGggSW5zcGVjdG9y
T3ZlcmxheTo6ZHJhd0VsZW1lbnRUaXRsZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIE5vZGUm
IG5vZGUsIGNvCiAgICAgcmV0dXJuIHBhdGg7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6
ZHJhd0dyaWRPdmVybGF5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgR3JpZE92ZXJs
YXkmIGdyaWRPdmVybGF5KQoreworICAgIC8vIElmIHRoZSBub2RlJ3MgV2Vha1B0ciBoYXMgYmVl
biBjbGVhcmVkLCB0aGVuIHdlIGNhbid0IGRyYXcgdGhlIG92ZXJsYXkuCisgICAgaWYgKCFncmlk
T3ZlcmxheS5ncmlkTm9kZSkgeworICAgICAgICBtX2FjdGl2ZUdyaWRPdmVybGF5cy5yZW1vdmVB
bGxNYXRjaGluZyhbJl0gKGNvbnN0IEdyaWRPdmVybGF5JiBncmlkT3ZlcmxheSkgeworICAgICAg
ICAgICAgcmV0dXJuIGdyaWRPdmVybGF5LmdyaWROb2RlLmdldCgpID09IGdyaWRPdmVybGF5Lmdy
aWROb2RlOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBO
b2RlKiBub2RlID0gZ3JpZE92ZXJsYXkuZ3JpZE5vZGUuZ2V0KCk7CisgICAgVU5VU0VEX1BBUkFN
KG5vZGUpOworICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92
ZXJsYXkuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmgKaW5k
ZXggMjQyMjAzNDcyNDBiYzA2ODJhNzVkNjJlMGIxNTBmNTVhNDc3M2RkNS4uYjAzOTg4NTk3ZjE0
ZDZlYzk5YjM3NGU1YTJlNjliMmMwMjY2ODEyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yT3ZlcmxheS5oCkBAIC00MSw2ICs0MSwxMyBAQAogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAorbmFtZXNwYWNlIElu
c3BlY3RvciB7Cit1c2luZyBFcnJvclN0cmluZyA9IFN0cmluZzsKKwordGVtcGxhdGUgPHR5cGVu
YW1lIFQ+Cit1c2luZyBFcnJvclN0cmluZ09yID0gRXhwZWN0ZWQ8VCwgRXJyb3JTdHJpbmc+Owor
fQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKQEAgLTk4
LDYgKzEwNSw0MCBAQCBwdWJsaWM6CiAgICAgICAgIHVzaW5nIEJvdW5kcyA9IEZsb2F0UmVjdDsK
ICAgICB9OwogCisgICAgc3RydWN0IEdyaWRPdmVybGF5IHsKKyAgICAgICAgV1RGX01BS0VfU1RS
VUNUX0ZBU1RfQUxMT0NBVEVEOworCisgICAgICAgIHN0cnVjdCBDb25maWcgeworICAgICAgICAg
ICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworCisgICAgICAgICAgICBDb2xvciBn
cmlkQ29sb3I7CisgICAgICAgICAgICBib29sIHNob3dMaW5lTmFtZXM7CisgICAgICAgICAgICBi
b29sIHNob3dMaW5lTnVtYmVyczsKKyAgICAgICAgICAgIGJvb2wgc2hvd0V4dGVuZGVkR3JpZGxp
bmVzOworICAgICAgICAgICAgYm9vbCBzaG93VHJhY2tTaXplczsKKyAgICAgICAgICAgIGJvb2wg
c2hvd0FyZWFOYW1lczsKKyAgICAgICAgfTsKKworICAgICAgICB2b2lkIHNldERhdGFGcm9tQ29u
ZmlnKGNvbnN0IEdyaWRPdmVybGF5OjpDb25maWcmIGNvbmZpZykKKyAgICAgICAgeworICAgICAg
ICAgICAgZ3JpZENvbG9yID0gY29uZmlnLmdyaWRDb2xvcjsKKyAgICAgICAgICAgIHNob3dMaW5l
TmFtZXMgPSBjb25maWcuc2hvd0xpbmVOYW1lczsKKyAgICAgICAgICAgIHNob3dMaW5lTnVtYmVy
cyA9IGNvbmZpZy5zaG93TGluZU51bWJlcnM7CisgICAgICAgICAgICBzaG93RXh0ZW5kZWRHcmlk
bGluZXMgPSBjb25maWcuc2hvd0V4dGVuZGVkR3JpZGxpbmVzOworICAgICAgICAgICAgc2hvd1Ry
YWNrU2l6ZXMgPSBjb25maWcuc2hvd1RyYWNrU2l6ZXM7CisgICAgICAgICAgICBzaG93QXJlYU5h
bWVzID0gY29uZmlnLnNob3dBcmVhTmFtZXM7CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGUg
bm9kZSB0aGF0IGJlZ2lucyB0aGUgZ3JpZCBsYXlvdXQgY29udGV4dC4KKyAgICAgICAgV2Vha1B0
cjxOb2RlPiBncmlkTm9kZTsKKyAgICAgICAgQ29sb3IgZ3JpZENvbG9yOworICAgICAgICBib29s
IHNob3dMaW5lTmFtZXM7CisgICAgICAgIGJvb2wgc2hvd0xpbmVOdW1iZXJzOworICAgICAgICBi
b29sIHNob3dFeHRlbmRlZEdyaWRsaW5lczsKKyAgICAgICAgYm9vbCBzaG93VHJhY2tTaXplczsK
KyAgICAgICAgYm9vbCBzaG93QXJlYU5hbWVzOworICAgIH07CisKICAgICBlbnVtIGNsYXNzIENv
b3JkaW5hdGVTeXN0ZW0gewogICAgICAgICBWaWV3LCAvLyBBZGp1c3RzIGZvciB0aGUgbWFpbiBm
cmFtZSdzIHNjcm9sbCBvZmZzZXQuCiAgICAgICAgIERvY3VtZW50LCAvLyBEb2VzIG5vdCBhZGp1
c3QgZm9yIHRoZSBtYWluIGZyYW1lJ3Mgc2Nyb2xsIG9mZnNldC4KQEAgLTEyNSw2ICsxNjYsMTIg
QEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRJbmRpY2F0aW5nKGJvb2wgaW5kaWNhdGluZyk7CiAK
KyAgICAvLyBNdWx0aXBsZSBncmlkIG92ZXJsYXlzIGNhbiBiZSBhY3RpdmUgYXQgdGhlIHNhbWUg
dGltZS4gVGhlc2UgbWV0aG9kcworICAgIC8vIHdpbGwgZmFpbCBpZiB0aGUgbm9kZSBpcyBub3Qg
YSBncmlkIG9yIGlmIHRoZSBub2RlIGhhcyBiZWVuIEdDJ2QuCisgICAgSW5zcGVjdG9yOjpFcnJv
clN0cmluZ09yPHZvaWQ+IHNldEdyaWRPdmVybGF5Rm9yTm9kZShOb2RlJiwgY29uc3QgR3JpZE92
ZXJsYXk6OkNvbmZpZyYpOworICAgIEluc3BlY3Rvcjo6RXJyb3JTdHJpbmdPcjx2b2lkPiBjbGVh
ckdyaWRPdmVybGF5Rm9yTm9kZShOb2RlJik7CisgICAgdm9pZCBjbGVhckFsbEdyaWRPdmVybGF5
cygpOworCiBwcml2YXRlOgogICAgIHVzaW5nIFRpbWVSZWN0UGFpciA9IHN0ZDo6cGFpcjxNb25v
dG9uaWNUaW1lLCBGbG9hdFJlY3Q+OwogCkBAIC0xNDEsNiArMTg4LDggQEAgcHJpdmF0ZToKIAog
ICAgIFBhdGggZHJhd0VsZW1lbnRUaXRsZShHcmFwaGljc0NvbnRleHQmLCBOb2RlJiwgY29uc3Qg
SGlnaGxpZ2h0OjpCb3VuZHMmKTsKIAorICAgIHZvaWQgZHJhd0dyaWRPdmVybGF5KEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEdyaWRPdmVybGF5Jik7CisKICAgICB2b2lkIHVwZGF0ZVBhaW50UmVj
dHNUaW1lckZpcmVkKCk7CiAKICAgICBQYWdlJiBtX3BhZ2U7CkBAIC0xNTYsNiArMjA1LDggQEAg
cHJpdmF0ZToKICAgICBEZXF1ZTxUaW1lUmVjdFBhaXI+IG1fcGFpbnRSZWN0czsKICAgICBUaW1l
ciBtX3BhaW50UmVjdFVwZGF0ZVRpbWVyOwogCisgICAgVmVjdG9yPEdyaWRPdmVybGF5PiBtX2Fj
dGl2ZUdyaWRPdmVybGF5czsKKwogICAgIGJvb2wgbV9pbmRpY2F0aW5nIHsgZmFsc2UgfTsKICAg
ICBib29sIG1fc2hvd1BhaW50UmVjdHMgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9zaG93UnVsZXJz
IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggNWNiNThiOWM5OWQ5ZDY5YTBlZGIwMzVlNGJlY2Qz
NGI5MTZmMjczZS4uMGMzYzljMWI1NmEyNmRkYzg0MDI1ODZhYTgxZTBiNjRiNzNjOTUzYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2Vu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01B
Z2VudC5jcHAKQEAgLTE0NzMsNiArMTQ3Myw2NSBAQCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6aGlkZUhpZ2hsaWdodCgpCiAgICAgcmV0dXJuIHsgfTsK
IH0KIAorc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rvck92ZXJsYXk6OkdyaWRPdmVybGF5OjpDb25m
aWc+IEluc3BlY3RvckRPTUFnZW50OjpncmlkT3ZlcmxheUNvbmZpZ0Zyb21JbnNwZWN0b3JPYmpl
Y3QoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBncmlkT3ZlcmxheUluc3BlY3Rvck9iamVjdCkKK3sKKyAgICBpZiAoIWdyaWRPdmVybGF5
SW5zcGVjdG9yT2JqZWN0KSB7CisgICAgICAgIGVycm9yU3RyaW5nID0gIkludGVybmFsIGVycm9y
OiBncmlkIG92ZXJsYXkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgaXMgbWlzc2luZyJfczsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYXV0byBjb2xvck9iamVjdCA9IGdy
aWRPdmVybGF5SW5zcGVjdG9yT2JqZWN0LT5nZXRPYmplY3QoUHJvdG9jb2w6OkRPTTo6R3JpZE92
ZXJsYXlDb25maWc6OmdyaWRDb2xvcktleSk7CisgICAgaWYgKCFjb2xvck9iamVjdCkgeworICAg
ICAgICBlcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvcjogZ3JpZCBvdmVybGF5IGNvbmZpZ3Vy
YXRpb24gaXMgbWlzc2luZyBjb2xvciBvYmplY3QiX3M7CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KKyAgICAKKyAgICBhdXRvIGdyaWRPdmVybGF5Q29uZmlnID0gbWFrZVVuaXF1ZTxJ
bnNwZWN0b3JPdmVybGF5OjpHcmlkT3ZlcmxheTo6Q29uZmlnPigpOworICAgIGdyaWRPdmVybGF5
Q29uZmlnLT5ncmlkQ29sb3IgPSBwYXJzZUNvbG9yKFdURk1vdmUoY29sb3JPYmplY3QpKTsKKyAg
ICBncmlkT3ZlcmxheUNvbmZpZy0+c2hvd0xpbmVOYW1lcyA9IGdyaWRPdmVybGF5SW5zcGVjdG9y
T2JqZWN0LT5nZXRCb29sZWFuKFByb3RvY29sOjpET006OkdyaWRPdmVybGF5Q29uZmlnOjpzaG93
TGluZU5hbWVzS2V5KS52YWx1ZU9yKGZhbHNlKTsKKyAgICBncmlkT3ZlcmxheUNvbmZpZy0+c2hv
d0xpbmVOdW1iZXJzID0gZ3JpZE92ZXJsYXlJbnNwZWN0b3JPYmplY3QtPmdldEJvb2xlYW4oUHJv
dG9jb2w6OkRPTTo6R3JpZE92ZXJsYXlDb25maWc6OnNob3dMaW5lTnVtYmVyc0tleSkudmFsdWVP
cihmYWxzZSk7CisgICAgZ3JpZE92ZXJsYXlDb25maWctPnNob3dFeHRlbmRlZEdyaWRsaW5lcyA9
IGdyaWRPdmVybGF5SW5zcGVjdG9yT2JqZWN0LT5nZXRCb29sZWFuKFByb3RvY29sOjpET006Okdy
aWRPdmVybGF5Q29uZmlnOjpzaG93RXh0ZW5kZWRHcmlkbGluZXNLZXkpLnZhbHVlT3IoZmFsc2Up
OworICAgIGdyaWRPdmVybGF5Q29uZmlnLT5zaG93VHJhY2tTaXplcyA9IGdyaWRPdmVybGF5SW5z
cGVjdG9yT2JqZWN0LT5nZXRCb29sZWFuKFByb3RvY29sOjpET006OkdyaWRPdmVybGF5Q29uZmln
OjpzaG93VHJhY2tTaXplc0tleSkudmFsdWVPcihmYWxzZSk7CisgICAgZ3JpZE92ZXJsYXlDb25m
aWctPnNob3dBcmVhTmFtZXMgPSBncmlkT3ZlcmxheUluc3BlY3Rvck9iamVjdC0+Z2V0Qm9vbGVh
bihQcm90b2NvbDo6RE9NOjpHcmlkT3ZlcmxheUNvbmZpZzo6c2hvd0FyZWFOYW1lc0tleSkudmFs
dWVPcihmYWxzZSk7CisKKyAgICByZXR1cm4gZ3JpZE92ZXJsYXlDb25maWc7Cit9CisKKworSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6
c2hvd0dyaWRPdmVybGF5KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBvdmVybGF5Q29uZmlnT2JqZWN0KQoreworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKyAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShl
cnJvclN0cmluZywgbm9kZUlkKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9y
T3ZlcmxheTo6R3JpZE92ZXJsYXk6OkNvbmZpZz4gZ3JpZE92ZXJsYXlDb25maWcgPSBncmlkT3Zl
cmxheUNvbmZpZ0Zyb21JbnNwZWN0b3JPYmplY3QoZXJyb3JTdHJpbmcsIFdURk1vdmUob3Zlcmxh
eUNvbmZpZ09iamVjdCkpOworICAgIGlmICghZ3JpZE92ZXJsYXlDb25maWcpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICBtX292ZXJsYXktPnNldEdy
aWRPdmVybGF5Rm9yTm9kZSgqbm9kZSwgKmdyaWRPdmVybGF5Q29uZmlnKTsKKworICAgIHJldHVy
biB7IH07Cit9CisKK0luc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5z
cGVjdG9yRE9NQWdlbnQ6OmhpZGVHcmlkT3ZlcmxheShPcHRpb25hbDxQcm90b2NvbDo6RE9NOjpO
b2RlSWQ+JiYgbm9kZUlkKQoreworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmlu
ZzsKKyAgICBOb2RlKiBub2RlID0gbnVsbHB0cjsKKyAgICBpZiAobm9kZUlkKSB7CisgICAgICAg
IG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5nLCAqbm9kZUlkKTsKKyAgICAgICAgaWYgKCFu
b2RlKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAg
ICB9CisgICAgCisgICAgaWYgKG5vZGUpCisgICAgICAgIHJldHVybiBtX292ZXJsYXktPmNsZWFy
R3JpZE92ZXJsYXlGb3JOb2RlKCpub2RlKTsKKworICAgIG1fb3ZlcmxheS0+Y2xlYXJBbGxHcmlk
T3ZlcmxheXMoKTsKKworICAgIHJldHVybiB7IH07Cit9CisKIFByb3RvY29sOjpFcnJvclN0cmlu
Z09yPFByb3RvY29sOjpET006Ok5vZGVJZD4gSW5zcGVjdG9yRE9NQWdlbnQ6Om1vdmVUbyhQcm90
b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBQcm90b2NvbDo6RE9NOjpOb2RlSWQgdGFyZ2V0Tm9k
ZUlkLCBPcHRpb25hbDxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+JiYgaW5zZXJ0QmVmb3JlTm9kZUlk
KQogewogICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCA4
N2Q2YjkxYWM5NTNkMmI5YWY0YjJjYmQ0MjcwZGY0OTMyNjQ3YWYzLi4zMTgwMDZkZmM3Y2U0NjA3
YmU3YjE2MzMxYzBkZGQzY2ZhNjNlNjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC0xNDQsNiArMTQ0LDggQEAgcHVi
bGljOgogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaGlnaGxp
Z2h0Tm9kZShSZWY8SlNPTjo6T2JqZWN0PiYmIGhpZ2hsaWdodENvbmZpZywgT3B0aW9uYWw8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+JiYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJik7CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBoaWdobGlnaHROb2RlTGlzdChSZWY8SlNPTjo6QXJyYXk+JiYg
bm9kZUlkcywgUmVmPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRDb25maWcpOwogICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaGlnaGxpZ2h0RnJhbWUoY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgY29sb3IsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3V0bGluZUNvbG9yKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNob3dHcmlkT3ZlcmxheShJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwgUmVmPEpTT046Ok9iamVjdD4mJiBvdmVy
bGF5Q29uZmlnKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IGhpZGVHcmlkT3ZlcmxheShPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJ
ZD4mJik7CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxJbnNwZWN0b3I6
OlByb3RvY29sOjpET006Ok5vZGVJZD4gbW92ZVRvKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
Tm9kZUlkIG5vZGVJZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQgdGFyZ2V0Tm9k
ZUlkLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4mJiBpbnNlcnRC
ZWZvcmVOb2RlSWQpOwogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gdW5kbygpOwogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
cmVkbygpOwpAQCAtMjEzLDYgKzIxNSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBoaWdobGlnaHRN
b3VzZWRPdmVyTm9kZSgpOwogICAgIHZvaWQgc2V0U2VhcmNoaW5nRm9yTm9kZShJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZyYsIGJvb2wgZW5hYmxlZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBoaWdobGlnaHRDb25maWcsIGJvb2wgc2hvd1J1bGVycyk7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6Q29uZmlnPiBoaWdobGlnaHRDb25maWdG
cm9tSW5zcGVjdG9yT2JqZWN0KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbnNwZWN0b3JPdmVybGF5OjpHcmlkT3ZlcmxheTo6Q29uZmlnPiBncmlkT3Zl
cmxheUNvbmZpZ0Zyb21JbnNwZWN0b3JPYmplY3QoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmcmLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGdyaWRPdmVybGF5SW5zcGVjdG9yT2JqZWN0
KTsKIAogICAgIC8vIE5vZGUtcmVsYXRlZCBtZXRob2RzLgogICAgIHR5cGVkZWYgSGFzaE1hcDxS
ZWZQdHI8Tm9kZT4sIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiBOb2RlVG9JZE1h
cDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRy
b2xsZXJzL0RPTU1hbmFnZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9Db250cm9sbGVycy9ET01NYW5hZ2VyLmpzCmluZGV4IGYzNTJiNmQ4MTI4YTQ4NWY5OWFjODhl
YzJjZDcyMGQ4NzA0Nzg3ZjMuLjY4MmY1NmFhMDc2NjYxMjYzMzU0M2ViOGY1MjY2ZTRmN2I2N2Jj
MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRy
b2xsZXJzL0RPTU1hbmFnZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQ29udHJvbGxlcnMvRE9NTWFuYWdlci5qcwpAQCAtMTA3LDYgKzEwNywyMSBAQCBXSS5E
T01NYW5hZ2VyID0gY2xhc3MgRE9NTWFuYWdlciBleHRlbmRzIFdJLk9iamVjdAogICAgICAgICBy
ZXR1cm4gaGlnaGxpZ2h0Q29uZmlnOwogICAgIH0KIAorICAgIC8vIEZvciBzZW5kaW5nIERPTS5H
cmlkT3ZlcmxheUNvbmZpZyBvYmplY3RzIGluIHByb3RvY29sIGNvbW1hbmRzLgorICAgIHN0YXRp
YyBidWlsZEdyaWRPdmVybGF5Q29uZmlnKGNvbG9yLCBvcHRpb25zID0ge30pCisgICAgeworICAg
ICAgICBjb25zb2xlLmFzc2VydChjb2xvciBpbnN0YW5jZW9mIFdJLkNvbG9yLCAiTmVlZCB0byBw
cm92aWRlIGEgV0kuQ29sb3IuIik7CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIGdy
aWRDb2xvcjogY29sb3IudG9Qcm90b2NvbCgpLAorICAgICAgICAgICAgc2hvd0xpbmVOYW1lczog
b3B0aW9ucy5zaG93TGluZU5hbWVzIHx8IGZhbHNlLAorICAgICAgICAgICAgc2hvd0xpbmVOdW1i
ZXJzOiBvcHRpb25zLnNob3dMaW5lTnVtYmVycyB8fCBmYWxzZSwKKyAgICAgICAgICAgIHNob3dF
eHRlbmRlZEdyaWRsaW5lczogb3B0aW9ucy5zaG93RXh0ZW5kZWRHcmlkbGluZXMgfHwgZmFsc2Us
CisgICAgICAgICAgICBzaG93VHJhY2tTaXplczogb3B0aW9ucy5zaG93VHJhY2tTaXplcyB8fCBm
YWxzZSwKKyAgICAgICAgICAgIHNob3dBcmVhTmFtZXM6IG9wdGlvbnMuc2hvd0FyZWFOYW1lcyB8
fCBmYWxzZSwKKyAgICAgICAgfTsKKyAgICB9CisKICAgICBzdGF0aWMgd3JhcENsaWVudENhbGxi
YWNrKGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgaWYgKCFjYWxsYmFjaykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Db2xvci5qcyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Db2xvci5qcwppbmRleCBm
YmIzMzIwMGNmMGNiOGE1YmU2Yzk4ZjYyMmMxNDVkMGRhNDUzNDIzLi5kN2EyYjI1ZDU1YmIzNjI4
NDAzZTdkYTVlYzBlYTlkOGJjM2YzOGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ29sb3IuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NvbG9yLmpzCkBAIC02MzgsNiArNjM4LDEyIEBAIFdJ
LkNvbG9yID0gY2xhc3MgQ29sb3IKICAgICAgICAgcmV0dXJuICIiOwogICAgIH0KIAorICAgIHRv
UHJvdG9jb2woKQorICAgIHsKKyAgICAgICAgbGV0IHJnYmEgPSB0aGlzLnJnYmE7CisgICAgICAg
IHJldHVybiB7cjogcmdiYVswXSwgZzogcmdiYVsxXSwgYjogcmdiYVsyXSwgYTogcmdiYVszXX07
CisgICAgfQorCiAgICAgaXNLZXl3b3JkKCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLmtleXdv
cmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2Rl
bHMvRE9NTm9kZS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVs
cy9ET01Ob2RlLmpzCmluZGV4IGRkOWY1NjZmNTgwZDgyZTc5MmMyMWUwMGZkMDU2NjM1Njc5ZWEw
ZTguLjIxOGQwYjZhYmNmMDZjZDA3MjZmM2IyYTg0ZDA1YjAxZDFiOWFiNjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9ET01Ob2RlLmpzCisr
KyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9ET01Ob2RlLmpz
CkBAIC01NTMsNiArNTUzLDI2IEBAIFdJLkRPTU5vZGUgPSBjbGFzcyBET01Ob2RlIGV4dGVuZHMg
V0kuT2JqZWN0CiAgICAgICAgIHRhcmdldC5ET01BZ2VudC5oaWdobGlnaHROb2RlKFdJLkRPTU1h
bmFnZXIuYnVpbGRIaWdobGlnaHRDb25maWcobW9kZSksIHRoaXMuaWQpOwogICAgIH0KIAorICAg
IC8vIFN1cHBvcnRlZCBvcHRpb25zOiBzaG93TGluZU5hbWVzLCBzaG93TGluZU51bWJlcnMsIHNo
b3dFeHRlbmRlZEdyaWRMaW5lcywgc2hvd1RyYWNrU2l6ZXMsIHNob3dBcmVhTmFtZXMuCisgICAg
Ly8gU2VlIERPTS5HcmlkT3ZlcmxheUNvbmZpZyBhbmQgYXNzb2NpYXRlZCBwcm90b2NvbCBjb21t
YW5kcyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBncmlkIG92ZXJsYXkgb3B0aW9u
cy4KKyAgICBzaG93R3JpZE92ZXJsYXkoY29sb3IsIG9wdGlvbnMgPSB7fSkKKyAgICB7CisgICAg
ICAgIGlmICh0aGlzLl9kZXN0cm95ZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
bGV0IHRhcmdldCA9IFdJLmFzc3VtaW5nTWFpblRhcmdldCgpOworICAgICAgICB0YXJnZXQuRE9N
QWdlbnQuc2hvd0dyaWRPdmVybGF5KHRoaXMuaWQsIFdJLkRPTU1hbmFnZXIuYnVpbGRHcmlkT3Zl
cmxheUNvbmZpZyhjb2xvciwgb3B0aW9ucykpOworICAgIH0KKworICAgIGhpZGVHcmlkT3Zlcmxh
eSgpCisgICAgeworICAgICAgICBpZiAodGhpcy5fZGVzdHJveWVkKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIGxldCB0YXJnZXQgPSBXSS5hc3N1bWluZ01haW5UYXJnZXQoKTsKKyAg
ICAgICAgdGFyZ2V0LkRPTUFnZW50LmhpZGVHcmlkT3ZlcmxheSh0aGlzLmlkKTsKKyAgICB9CisK
ICAgICBzY3JvbGxJbnRvVmlldygpCiAgICAgewogICAgICAgICBXSS5SZW1vdGVPYmplY3QucmVz
b2x2ZU5vZGUodGhpcykudGhlbigob2JqZWN0KSA9PiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418597</attachid>
            <date>2021-01-27 16:24:12 -0800</date>
            <delta_ts>2021-01-30 16:41:14 -0800</delta_ts>
            <desc>Patch v0.1 - WIP (drawing code)</desc>
            <filename>bug-221062-20210127182411.patch</filename>
            <type>text/plain</type>
            <size>8255</size>
            <attacher name="Patrick Angle">pangle</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcxOTg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0NTUy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9wcm90b2NvbC9DU1MuanNvbgppbmRleCA5MmFkYzAyNDE5ZWI5M2MzMTMyZmZj
MTU3NTNlN2I0OTJmODYxNGMyLi42M2Q1MWY0NGRiYWIwY2VhYzhmZDBkNjY0YmVjNDJjMGFjM2Zm
ZGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29s
L0NTUy5qc29uCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wv
Q1NTLmpzb24KQEAgLTMwOCw2ICszMDgsMTMgQEAKICAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InByaW1hcnlGb250IiwgIiRyZWYiOiAiRm9udCIsICJkZXNjcmlwdGlvbiI6ICJDb21wdXRlZCBw
cmltYXJ5IGZvbnQgZm9yIHRoZSBzcGVjaWZpZWQgRE9NIG5vZGUuIiB9CiAgICAgICAgICAgICBd
CiAgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImdldEdyaWREYXRh
Rm9yTm9kZSIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVE9ETzogW1BDQV0gQSBsb3Qu
Li4iLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJub2RlSWQiLCAiJHJlZiI6ICJET00uTm9kZUlkIiB9CisgICAgICAgICAgICBdCisgICAg
ICAgIH0sCiAgICAgICAgIHsKICAgICAgICAgICAgICJuYW1lIjogImdldEFsbFN0eWxlU2hlZXRz
IiwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJSZXR1cm5zIG1ldGFpbmZvIGVudHJpZXMg
Zm9yIGFsbCBrbm93biBzdHlsZXNoZWV0cy4iLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvck92ZXJsYXkuY3BwCmluZGV4IGQ3YTU3YTdmMTUxYTA5ZDQ5OTcyMjA5ZWZiMTli
ZGUxOTY5MmM4OTQuLjg3NjI3ZjRmMmMyOGQ3NzQ1YjAyNjkyZTQ0YTYxMTE1NTQ5YjBmM2MgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKQEAgLTUz
LDYgKzUzLDEwIEBACiAjaW5jbHVkZSAiUHNldWRvRWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRl
ckJveC5oIgogI2luY2x1ZGUgIlJlbmRlckJveE1vZGVsT2JqZWN0LmgiCisKKyNpbmNsdWRlICJS
ZW5kZXJHcmlkLmgiCisjaW5jbHVkZSAiR3JpZFBvc2l0aW9uc1Jlc29sdmVyLmgiCisKICNpbmNs
dWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRl
ICJTZXR0aW5ncy5oIgpAQCAtNTc0LDE0ICs1NzgsNzMgQEAgdm9pZCBJbnNwZWN0b3JPdmVybGF5
Ojp1cGRhdGVQYWludFJlY3RzVGltZXJGaXJlZCgpCiBJbnNwZWN0b3JPdmVybGF5OjpSdWxlckV4
Y2x1c2lvbiBJbnNwZWN0b3JPdmVybGF5OjpkcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIE5vZGUmIG5vZGUpCiB7CiAgICAgUnVsZXJFeGNsdXNpb24gcnVsZXJFeGNs
dXNpb247CisgICAgCisgICAgYXV0byByZW5kZXJlciA9IG5vZGUucmVuZGVyZXIoKTsKKy8vICAg
IGlmICghaXM8UmVuZGVyR3JpZD4ocmVuZGVyZXIpKQorICAgICAgICBkcmF3RnJhZ21lbnRIaWdo
bGlnaHQoY29udGV4dCwgbm9kZSwgbV9ub2RlSGlnaGxpZ2h0Q29uZmlnLCBydWxlckV4Y2x1c2lv
bi5ib3VuZHMpOwogCi0gICAgZHJhd0ZyYWdtZW50SGlnaGxpZ2h0KGNvbnRleHQsIG5vZGUsIG1f
bm9kZUhpZ2hsaWdodENvbmZpZywgcnVsZXJFeGNsdXNpb24uYm91bmRzKTsKLQotICAgIGlmICht
X25vZGVIaWdobGlnaHRDb25maWcuc2hvd0luZm8pCisgICAgaWYgKCFpczxSZW5kZXJHcmlkPihy
ZW5kZXJlcikgJiYgbV9ub2RlSGlnaGxpZ2h0Q29uZmlnLnNob3dJbmZvKQogICAgICAgICBkcmF3
U2hhcGVIaWdobGlnaHQoY29udGV4dCwgbm9kZSwgcnVsZXJFeGNsdXNpb24uYm91bmRzKTsKIAog
ICAgIGlmIChtX3Nob3dSdWxlcnMgfHwgbV9zaG93UnVsZXJzRHVyaW5nRWxlbWVudFNlbGVjdGlv
bikKICAgICAgICAgZHJhd0JvdW5kcyhjb250ZXh0LCBydWxlckV4Y2x1c2lvbi5ib3VuZHMpOwor
ICAgIAorICAgIC8vIE1BUks6IFtQQ0FdIEJlZ2luIEdyaWQgVGVzdAorICAgIAorICAgIGlmIChp
czxSZW5kZXJHcmlkPihyZW5kZXJlcikpIHsKKyAgICAgICAgCisgICAgICAgIEZyYW1lVmlldyog
cGFnZVZpZXcgPSBtX3BhZ2UubWFpbkZyYW1lKCkudmlldygpOworICAgICAgICBGbG9hdFNpemUg
dmlld3BvcnRTaXplID0gcGFnZVZpZXctPnNpemVGb3JWaXNpYmxlQ29udGVudCgpOworICAgICAg
ICBGbG9hdFNpemUgY29udGVudEluc2V0KDAsIHBhZ2VWaWV3LT50b3BDb250ZW50SW5zZXQoU2Ny
b2xsVmlldzo6VG9wQ29udGVudEluc2V0VHlwZTo6V2ViQ29yZU9yUGxhdGZvcm1Db250ZW50SW5z
ZXQpKTsKKyAgICAgICAgCisgICAgICAgIAorICAgICAgICBhdXRvIHJlbmRlckdyaWQgPSBkb3du
Y2FzdDxSZW5kZXJHcmlkPihyZW5kZXJlcik7CisgICAgICAgIAorICAgICAgICBjb250ZXh0LnNl
dFN0cm9rZVRoaWNrbmVzcygxKTsKKworICAgICAgICBjb25zdGV4cHIgYXV0byB0cmFja0NvbG9y
ID0gQ29sb3I6Om1hZ2VudGEuY29sb3JXaXRoQWxwaGFCeXRlKDE1Myk7CisgICAgICAgIGNvbnRl
eHQuc2V0U3Ryb2tlQ29sb3IodHJhY2tDb2xvcik7CisgICAgICAgICAgICAgICAgCisgICAgICAg
IGF1dG8gY29sdW1uUG9zaXRpb25zID0gcmVuZGVyR3JpZC0+Y29sdW1uUG9zaXRpb25zKCk7Cisg
ICAgICAgIGF1dG8gY29sdW1uV2lkdGhzID0gcmVuZGVyR3JpZC0+dHJhY2tTaXplc0ZvckNvbXB1
dGVkU3R5bGUoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uOjpGb3JDb2x1bW5zKTsKKyAgICAgICAg
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2x1bW5Qb3NpdGlvbnMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgIFBhdGggY29sdW1uUGF0aHM7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGF1dG8gcG9zaXRpb24gPSBjb2x1bW5Qb3NpdGlvbnNbaV07CisgICAgICAgICAg
ICBjb2x1bW5QYXRocy5tb3ZlVG8oeyBydWxlckV4Y2x1c2lvbi5ib3VuZHMueCgpICsgcG9zaXRp
b24sIG1fc2hvd1J1bGVyc0R1cmluZ0VsZW1lbnRTZWxlY3Rpb24gPyAwIDogcnVsZXJFeGNsdXNp
b24uYm91bmRzLnkoKSB9KTsKKyAgICAgICAgICAgIGNvbHVtblBhdGhzLmFkZExpbmVUbyh7IHJ1
bGVyRXhjbHVzaW9uLmJvdW5kcy54KCkgKyBwb3NpdGlvbiwgbV9zaG93UnVsZXJzRHVyaW5nRWxl
bWVudFNlbGVjdGlvbiA/IHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSA6IHJ1bGVyRXhjbHVzaW9uLmJv
dW5kcy5tYXhZKCkgfSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpIDwgY29sdW1u
V2lkdGhzLnNpemUoKSkgeworICAgICAgICAgICAgICAgIGF1dG8gd2lkdGggPSBjb2x1bW5XaWR0
aHNbaV07CisgICAgICAgICAgICAgICAgY29sdW1uUGF0aHMubW92ZVRvKHsgcnVsZXJFeGNsdXNp
b24uYm91bmRzLngoKSArIHBvc2l0aW9uICsgd2lkdGgsIG1fc2hvd1J1bGVyc0R1cmluZ0VsZW1l
bnRTZWxlY3Rpb24gPyAwIDogcnVsZXJFeGNsdXNpb24uYm91bmRzLnkoKSB9KTsKKyAgICAgICAg
ICAgICAgICBjb2x1bW5QYXRocy5hZGRMaW5lVG8oeyBydWxlckV4Y2x1c2lvbi5ib3VuZHMueCgp
ICsgcG9zaXRpb24gKyB3aWR0aCwgbV9zaG93UnVsZXJzRHVyaW5nRWxlbWVudFNlbGVjdGlvbiA/
IHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSA6IHJ1bGVyRXhjbHVzaW9uLmJvdW5kcy5tYXhZKCkgfSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tl
UGF0aChjb2x1bW5QYXRocyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGF1dG8gcm93
UG9zaXRpb25zID0gcmVuZGVyR3JpZC0+cm93UG9zaXRpb25zKCk7CisgICAgICAgIGF1dG8gcm93
SGVpZ2h0cyA9IHJlbmRlckdyaWQtPnRyYWNrU2l6ZXNGb3JDb21wdXRlZFN0eWxlKEdyaWRUcmFj
a1NpemluZ0RpcmVjdGlvbjo6Rm9yUm93cyk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcm93UG9zaXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBQ
YXRoIHJvd1BhdGhzOworICAgICAgICAgICAgCisgICAgICAgICAgICBhdXRvIHBvc2l0aW9uID0g
cm93UG9zaXRpb25zW2ldOworICAgICAgICAgICAgcm93UGF0aHMubW92ZVRvKHsgbV9zaG93UnVs
ZXJzRHVyaW5nRWxlbWVudFNlbGVjdGlvbiA/IDAgOiBydWxlckV4Y2x1c2lvbi5ib3VuZHMueCgp
LCBydWxlckV4Y2x1c2lvbi5ib3VuZHMueSgpICsgcG9zaXRpb24gfSk7CisgICAgICAgICAgICBy
b3dQYXRocy5hZGRMaW5lVG8oeyBtX3Nob3dSdWxlcnNEdXJpbmdFbGVtZW50U2VsZWN0aW9uID8g
dmlld3BvcnRTaXplLndpZHRoKCkgOiBydWxlckV4Y2x1c2lvbi5ib3VuZHMubWF4WCgpLCBydWxl
ckV4Y2x1c2lvbi5ib3VuZHMueSgpICsgcG9zaXRpb24gfSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChpIDwgcm93SGVpZ2h0cy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBhdXRv
IGhlaWdodCA9IHJvd0hlaWdodHNbaV07CisgICAgICAgICAgICAgICAgcm93UGF0aHMubW92ZVRv
KHsgbV9zaG93UnVsZXJzRHVyaW5nRWxlbWVudFNlbGVjdGlvbiA/IDAgOiBydWxlckV4Y2x1c2lv
bi5ib3VuZHMueCgpLCBydWxlckV4Y2x1c2lvbi5ib3VuZHMueSgpICsgcG9zaXRpb24gKyBoZWln
aHQgfSk7CisgICAgICAgICAgICAgICAgcm93UGF0aHMuYWRkTGluZVRvKHsgbV9zaG93UnVsZXJz
RHVyaW5nRWxlbWVudFNlbGVjdGlvbiA/IHZpZXdwb3J0U2l6ZS53aWR0aCgpIDogcnVsZXJFeGNs
dXNpb24uYm91bmRzLm1heFgoKSwgcnVsZXJFeGNsdXNpb24uYm91bmRzLnkoKSArIHBvc2l0aW9u
ICsgaGVpZ2h0IH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBj
b250ZXh0LnN0cm9rZVBhdGgocm93UGF0aHMpOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IC8vIE1BUks6IFtQQ0FdIEVuZCBHcmlkIFRlc3QKIAogICAgIC8vIEVuc3VyZSB0aGF0IHRoZSB0
aXRsZSBpbmZvcm1hdGlvbiBpcyBkcmF3biBhZnRlciB0aGUgYm91bmRzLgogICAgIGlmIChtX25v
ZGVIaWdobGlnaHRDb25maWcuc2hvd0luZm8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNTU0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCmluZGV4IDFmMTQ0NjZmMThjNDA1
ZjA5ZjRlYmQzOGU5ZDRlNjU3M2E5OWM1OWEuLmU1ZmM5MDMzZjI3NDQ1MTM2ZThmZDRhNmNiZjA1
OGNkMjczNWZiYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSAiTm9k
ZS5oIgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiUHNldWRvRWxlbWVudC5oIgor
I2luY2x1ZGUgIlJlbmRlckdyaWQuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5o
IgogI2luY2x1ZGUgIlNWR1N0eWxlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tl
ci5oIgpAQCAtNTk3LDYgKzU5OCwyMSBAQCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8UHJv
dG9jb2w6OkNTUzo6Rm9udD4+IEluc3BlY3RvckNTU0FnZW50OjpnZXRGb250RGF0YQogICAgIHJl
dHVybiBidWlsZE9iamVjdEZvckZvbnQoY29tcHV0ZWRTdHlsZS0+Zm9udENhc2NhZGUoKS5wcmlt
YXJ5Rm9udCgpKTsKIH0KIAorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
Q1NTQWdlbnQ6OmdldEdyaWREYXRhRm9yTm9kZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlk
KQoreworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKyAgICBhdXRvKiBu
b2RlID0gbm9kZUZvcklkKGVycm9yU3RyaW5nLCBub2RlSWQpOworICAgIGlmICghbm9kZSkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAgICAKKyAgICBhdXRv
KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgCisgICAgaWYgKCFpczxSZW5kZXJH
cmlkPihyZW5kZXJlcikpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTm9kZSBpcyBu
b3QgUmVuZGVyR3JpZCBiYWNrZWQiX3MpOworICAgIAorICAgIHJldHVybiB7IH07Cit9CisKIFBy
b3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OkNT
U1N0eWxlU2hlZXRIZWFkZXI+Pj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldEFsbFN0eWxlU2hlZXRz
KCkKIHsKICAgICBhdXRvIGhlYWRlcnMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OkNT
U1N0eWxlU2hlZXRIZWFkZXI+OjpjcmVhdGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuaAppbmRleCA2ZDI1MDBhMmE2YzU2NjEy
YTk0MDY2ZWEwYjFiMDAwMzJlYjlhYjIxLi43OTU1YzNmODIxOGZiYzYzM2U3MzJlMDFiNWQ3MGRm
MGUzMzQ4Yzc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckNTU0FnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JDU1NBZ2VudC5oCkBAIC05MSw2ICs5MSw3IEBAIHB1YmxpYzoKICAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKICAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pj4+IGdldENvbXB1dGVkU3R5
bGVGb3JOb2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKICAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OkZvbnQ+PiBnZXRGb250RGF0YUZvck5vZGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2Rl
SWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZ2V0R3Jp
ZERhdGFGb3JOb2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKICAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IC8qIGlubGluZVN0eWxlICovLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gLyogYXR0cmlidXRlc1N0eWxlICovPj4g
Z2V0SW5saW5lU3R5bGVzRm9yTm9kZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7
CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZlB0
cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4sIFJl
ZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWRNYXRj
aGVzPj4sIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6SW5o
ZXJpdGVkU3R5bGVFbnRyeT4+Pj4gZ2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUoSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpOb2RlSWQsIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZVBzZXVkbywgT3B0
aW9uYWw8Ym9vbD4mJiBpbmNsdWRlSW5oZXJpdGVkKTsKICAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4+PiBnZXRBbGxTdHlsZVNoZWV0cygpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418820</attachid>
            <date>2021-01-30 16:41:16 -0800</date>
            <delta_ts>2021-01-31 19:47:58 -0800</delta_ts>
            <desc>Patch v1.0</desc>
            <filename>bug-221062-20210130164116.patch</filename>
            <type>text/plain</type>
            <size>48322</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyMTIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ODE4N2RiZTFiN2Y5ZGM1MjYzNGE0NmYxN2M2ZTMzYTZiMDJjZDMxLi42YzRhZjc0MmY4YjI1NGVh
NTI5Yzk5ZWU4MGUwZmNkNmFlN2M4YWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAyMS0wMS0zMCAgQkogQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KKworICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBpbXBsZW1lbnQgdGhlIGJhc2ljcyBmb3Igc2hvd2luZy9oaWRp
bmcgZ3JpZCBvdmVybGF5cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjIxMDYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkIG5ldyBjb21tYW5kcyB0byBzaG93IGFuZCBoaWRlIENTUyBncmlkIG92ZXJs
YXlzOgorCisgICAgICAgICAgICAtIERPTS5zaG93R3JpZE92ZXJsYXkKKyAgICAgICAgICAgIC0g
RE9NLmhpZGVHcmlkT3ZlcmxheQorCisgICAgICAgICogaW5zcGVjdG9yL3Byb3RvY29sL0RPTS5q
c29uOgorCiAyMDIxLTAxLTMwICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCwgZml4IGFmdGVyIHIyNzIwNzEKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiNGZi
Yzk5ZmUzMGNhZTM4Yzc2YzM5Njk5N2JjMDQyMGI3NzZkMmMwLi4yM2EwNmQzODJiZDEzMTRmNGYx
Nzg1OGU2MmYxZDMxNmE2ZjBlN2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTggQEAKKzIwMjEt
MDEtMzAgIEJKIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rv
cjogaW1wbGVtZW50IHRoZSBiYXNpY3MgZm9yIHNob3dpbmcvaGlkaW5nIGdyaWQgb3ZlcmxheXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTA2Mgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVu
dCBiYWNrZW5kIGNvbW1hbmRzIGZvciBzaG93aW5nIGFuZCBoaWRpbmcgQ1NTIGdyaWQgb3Zlcmxh
eXMuCisgICAgICAgIFRoaXMgcGF0Y2ggZHJhd3MgYSB2ZXJ5IHNpbXBsaXN0aWMgZ3JpZCBvdmVy
bGF5LiBTdXBwb3J0IGZvciB0aGUKKyAgICAgICAgdmFyaW91cyBncmlkIG92ZXJsYXkgb3B0aW9u
cyB3aWxsIGJlIGFkZGVkIGluIGxhdGVyIHBhdGNoZXMuCisKKyAgICAgICAgTmV3IHRlc3Q6IGlu
c3BlY3Rvci9kb20vc2hvd0dyaWRPdmVybGF5Lmh0bWwKKworICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JPdmVybGF5Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5Ojpn
cmlkT3ZlcmxheUNvdW50IGNvbnN0KToKKyAgICAgICAgQWRkZWQsIGZvciB0ZXN0aW5nIG9ubHku
CisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JPdmVybGF5OjpzaG91bGRTaG93T3ZlcmxheSBjb25zdCk6CisgICAgICAgIEhvb2sgdXAg
dGhlIHBhaW50aW5nIG9mIGFueSBhY3RpdmUgZ3JpZCBvdmVybGF5cy4KKworICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6c2V0R3JpZE92ZXJsYXlGb3JOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmNsZWFyR3JpZE92ZXJsYXlGb3JOb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmNsZWFyQWxsR3JpZE92ZXJsYXlzKToK
KyAgICAgICAgTWFpbnRhaW4gdGhlIGxpc3Qgb2YgYWN0aXZlIGdyaWQgb3ZlcmxheXMuIEEgbm9k
ZSBjYW4gb25seQorICAgICAgICBoYXZlIG9uZSBncmlkIG92ZXJsYXkgYXQgYSB0aW1lLgorCisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3Tm9kZUhpZ2hsaWdodCk6Cisg
ICAgICAgIEFkZCBhIG5vdGUgYWJvdXQgd2h5IGdyaWQgb3ZlcmxheXMgYXJlIG5vdCBjb25zaWRl
cmVkIHdoZW4KKyAgICAgICAgY2FsY3VsYXRpbmcgdGhlIHJ1bGVyIGV4Y2x1c2lvbiBhcmVhLgor
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3R3JpZE92ZXJsYXkpOiBB
ZGRlZC4KKyAgICAgICAgVGhpcyBkcmF3aW5nIGNvZGUgZXhpc3RzIHRvIGZsZXNoIG91dCB0aGUg
cmVzdCBvZiB0aGlzIHBhdGNoLAorICAgICAgICBhbmQgaXMgb2J2aW91c2x5IGluY29tcGxldGUu
CisKKyAgICAgICAgRHJhdyBncmlkIGxpbmVzIHRoYXQgZXh0ZW5kIHRvIHRoZSBlZGdlIG9mIHRo
ZSB2aWV3cG9ydCwKKyAgICAgICAgZXF1aXZhbGVudCB0byBgY29uZmlnLnNob3dFeHRlbmRlZEdy
aWRMaW5lcyA9IHRydWVgLgorCisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JE
T01BZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnNob3dHcmlkT3Zlcmxh
eSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6aGlkZUdyaWRPdmVybGF5
KToKKyAgICAgICAgVHJhbnNsYXRlIHByb3RvY29sIGNvbW1hbmRzIGludG8gSW5zcGVjdG9yT3Zl
cmxheSBtZXRob2QgY2FsbHMuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmdyaWRPdmVybGF5Q291bnQgY29u
c3QpOgorICAgICAgICBBZGRlZC4gVGhpcyBpcyB1c2VkIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9u
bHkuCisKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgorICAgICAgICAqIHRlc3Rpbmcv
SW50ZXJuYWxzLmlkbDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnRlcm5hbHM6Omluc3BlY3RvckdyaWRPdmVybGF5Q291bnQpOiBBZGRlZC4K
KwogMjAyMS0wMS0yOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAg
Q2hlY2sgYWN0aXZlRG9jdW1lbnRMb2FkZXIoKSBmb3IgbnVsbCBjb25zaXN0ZW50bHkgZXZlcnl3
aGVyZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKaW5kZXggNTYxN2ZjZTU1M2Y2NGVjNzI5YWJkMTUx
ZTYwYWRiM2YwYjcyNjhmMy4uNDRlOWJlZTk0ZTFhNjA3NTIwMTUzMzkzYzIwNmI3NGYzZDVmN2Q0
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTQgQEAKKzIwMjEtMDEtMzAg
IEJKIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogaW1w
bGVtZW50IHRoZSBiYXNpY3MgZm9yIHNob3dpbmcvaGlkaW5nIGdyaWQgb3ZlcmxheXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTA2MgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4cG9zZSBuZXcgRE9N
LnNob3dHcmlkT3ZlcmxheSBhbmQgRE9NLmhpZGVHcmlkT3ZlcmxheSBjb21tYW5kcworICAgICAg
ICB2aWEgV0kuRE9NTm9kZS4gQWRkIGluaXRpYWwgZW5naW5lZXJpbmcgVUkgdG8gdG9nZ2xlIGdy
aWQgb3ZlcmxheXMuCisKKyAgICAgICAgTmV3IG1ldGhvZHMgYXJlIGNvdmVyZWQgYnkgYSBuZXcg
dGVzdDoKKworICAgICAgICAgICAgaW5zcGVjdG9yL2RvbS9zaG93R3JpZE92ZXJsYXkuaHRtbAor
CisgICAgICAgIEFkZGl0aW9ucyB0byBXSS5ET01NYW5hZ2VyLnByb3RvdHlwZS5yZXF1ZXN0RG9j
dW1lbnQgYXJlIGNvdmVyZWQKKyAgICAgICAgYnkgZXhpc3RpbmcgdGVzdHMgKGNhbGxiYWNrIGNh
c2UpIGFuZCBhIG5ldyB0ZXN0IChwcm9taXNlIGNhc2UpLgorCisgICAgICAgIEFkZGl0aW9ucyB0
byBXSS5Db2xvciBhcmUgY292ZXJlZCBieSBhIG5ldyB0ZXN0IGNhc2UgaW46CisKKyAgICAgICAg
ICAgIGluc3BlY3Rvci9tb2RlbC9jb2xvci5odG1sCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNl
L0NvbnRyb2xsZXJzL0RPTU1hbmFnZXIuanM6CisgICAgICAgIChXSS5ET01NYW5hZ2VyLnByb3Rv
dHlwZS5yZXF1ZXN0RG9jdW1lbnQpOgorICAgICAgICAoV0kuRE9NTWFuYWdlci5wcm90b3R5cGUu
X3JlcXVlc3REb2N1bWVudFdpdGhQcm9taXNlKToKKyAgICAgICAgRHJpdmUtYnk6IHVwZ3JhZGUg
cmVxdWVzdERvY3VtZW50KCkgdG8gcmV0dXJuIGEgcHJvbWlzZSBpZgorICAgICAgICBubyBjYWxs
YmFjayBhcmd1bWVudCB3YXMgcGFzYXNlZC4gVGhpcyBpcyB1c2VkIGJ5IGEgbmV3IHRlc3QuCisK
KyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9Db2xvci5qczoKKyAgICAgICAgKFdJLkNv
bG9yLnByb3RvdHlwZS50b1Byb3RvY29sKTogQWRkZWQuIFRoZSBwcm90b2NvbCBvYmplY3QgaXMK
KyAgICAgICAgRE9NLlJHQkFDb2xvciwgd2hpY2ggaXMgdGhlIHNhbWUgdGhpbmcgYXMgV0kuQ29s
b3IuRm9ybWF0LlJHQkEuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9ET01Ob2Rl
LmpzOgorICAgICAgICAoV0kuRE9NTm9kZS5wcm90b3R5cGUuc2hvd0dyaWRPdmVybGF5KToKKyAg
ICAgICAgKFdJLkRPTU5vZGUucHJvdG90eXBlLmhpZGVHcmlkT3ZlcmxheSk6CisgICAgICAgIEFk
ZGVkLiBUaGVzZSBhcmUgdGhlIG1ldGhvZHMgdGhhdCB0aGUgcmVzdCBvZiBXZWJJbnNwZWN0b3JV
SSB1c2VzCisgICAgICAgIHRvIGludGVyYWN0IHdpdGggZ3JpZCBvdmVybGF5cyBmb3IgYSBwYXJ0
aWN1bGFyIG5vZGUuIE5vdGUgdGhhdAorICAgICAgICB0aGVzZSBtZXRob2RzIHJldHVybiBlaXRo
ZXIgYW4gdW5zZXR0bGVkIHByb21pc2UgKGZyb20gdGhlIGFnZW50IGNhbGwpCisgICAgICAgIG9y
IGEgcmVqZWN0ZWQgcHJvbWlzZSAoaW4gdGhlIGNhc2UgdGhhdCB0aGUgbm9kZSBpcyBkZXN0cm95
ZWQpLgorICAgICAgICBUaGlzIGFsbG93cyB0ZXN0IGNhc2VzIHRvIGBhd2FpdGAgYmVmb3JlIGNo
ZWNraW5nIHRoZSBncmlkIG92ZXJsYXkgY291bnQuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNl
L1Rlc3QvVGVzdEhhcm5lc3MuanM6CisgICAgICAgIChUZXN0SGFybmVzcy5wcm90b3R5cGUuZXhw
ZWN0RXhjZXB0aW9uKTogSW1wcm92ZSBsb2dnaW5nIG91dHB1dAorICAgICAgICB3aGVuIEluc3Bl
Y3RvclRlc3QuZXhwZWN0RXhjZXB0aW9uIGRvZXMgbm90IGNhdGNoIGFuIGV4Y2VwdGlvbi4KKwor
ICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvQ29udGV4dE1lbnVVdGlsaXRpZXMuanM6Cisg
ICAgICAgIEFkZCBzb21lIGVuZ2luZWVyaW5nLW9ubHkgY29udGV4dCBtZW51IGl0ZW1zIGZvciBz
aG93aW5nL2hpZGluZworICAgICAgICBncmlkIG92ZXJsYXlzIHRvIERPTVRyZWVFbGVtZW50cyBp
biB0aGUgRWxlbWVudHMgVGFiLgorCisgICAgICAgIFRoZXNlIGFyZSBpbiBwbGFjZSBmb3IgZGV2
ZWxvcG1lbnQgcHVycG9zZXMgYW5kIHNob3VsZCBldmVudHVhbGx5CisgICAgICAgIGJlIHJlbW92
ZWQgd2hlbiBubyBsb25nZXIgbmVlZGVkLgorCiAyMDIxLTAxLTI3ICBSYXp2YW4gQ2FsaW1hbiAg
PHJjYWxpbWFuQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBSRUdSRVNTSU9O
KHIyNjkxNjYpOiBub3QgZW5vdWdoIHNwYWNlIGFyb3VuZCB1cC9kb3duIGFycm93cyBpbiBleGVj
dXRpb24gY29udGV4dCBwaWNrZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvcHJvdG9jb2wvRE9NLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3Byb3RvY29sL0RPTS5qc29uCmluZGV4IDk5OGJjNGFmZTY4ZWM3MDUwMmEwMDliN2JmNWVk
MWRlOTc1OGFiMzEuLmIyNjNmOTIyZGRlMTA5NWZkMmYzMGQ3M2MzYzI0Y2M5OGY0ZDg4NDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvRE9NLmpz
b24KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9ET00uanNv
bgpAQCAtNDkzLDYgKzQ5MywyOCBAQAogICAgICAgICAgICAgXSwKICAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJIaWdobGlnaHRzIG93bmVyIGVsZW1lbnQgb2YgdGhlIGZyYW1lIHdpdGggZ2l2
ZW4gaWQuIgogICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJzaG93
R3JpZE92ZXJsYXkiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlNob3dzIGEgZ3JpZCBv
dmVybGF5IGZvciBhIG5vZGUgdGhhdCBiZWdpbnMgYSAnZ3JpZCcgbGF5b3V0IGNvbnRleHQuIFRo
ZSBjb21tYW5kIGhhcyBubyBlZmZlY3QgaWYgPGNvZGU+bm9kZUlkPC9jb2RlPiBpcyBpbnZhbGlk
IG9yIHRoZSBhc3NvY2lhdGVkIG5vZGUgZG9lcyBub3QgYmVnaW4gYSAnZ3JpZCcgbGF5b3V0IGNv
bnRleHQuIEEgbm9kZSBjYW4gb25seSBoYXZlIG9uZSBncmlkIG92ZXJsYXkgYXQgYSB0aW1lOyBz
dWJzZXF1ZW50IGNhbGxzIHdpdGggdGhlIHNhbWUgPGNvZGU+bm9kZUlkPC9jb2RlPiB3aWxsIG92
ZXJyaWRlIGVhcmxpZXIgY2FsbHMuIiwKKyAgICAgICAgICAgICJ0YXJnZXRUeXBlcyI6IFsicGFn
ZSJdLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJub2RlSWQiLCAiJHJlZiI6ICJOb2RlSWQiLCAiZGVzY3JpcHRpb24iOiAiVGhlIG5vZGUg
Zm9yIHdoaWNoIGEgZ3JpZCBvdmVybGF5IHNob3VsZCBiZSBzaG93bi4iIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJncmlkQ29sb3IiLCAiJHJlZiI6ICJSR0JBQ29sb3IiLCAiZGVzY3Jp
cHRpb24iOiAiVGhlIHByaW1hcnkgY29sb3IgdG8gdXNlIGZvciB0aGUgZ3JpZCBvdmVybGF5LiIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNob3dMaW5lTmFtZXMiLCAidHlwZSI6ICJi
b29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlNob3cgbGFiZWxzIGZv
ciBncmlkIGxpbmUgbmFtZXMuIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIGlz
IGZhbHNlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNob3dMaW5lTnVtYmVycyIs
ICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiU2hv
dyBsYWJlbHMgZm9yIGdyaWQgbGluZSBudW1iZXJzLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZGVm
YXVsdCB2YWx1ZSBpcyBmYWxzZS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzaG93
RXh0ZW5kZWRHcmlkbGluZXMiLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwg
ImRlc2NyaXB0aW9uIjogIlNob3cgZ3JpZCBsaW5lcyB0aGF0IGV4dGVuZCBiZXlvbmQgdGhlIGJv
dW5kcyBvZiB0aGUgZ3JpZC4gSWYgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdmFsdWUgaXMg
ZmFsc2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2hvd1RyYWNrU2l6ZXMiLCAi
dHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlNob3cg
Z3JpZCB0cmFjayBzaXplIGluZm9ybWF0aW9uLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVs
dCB2YWx1ZSBpcyBmYWxzZS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzaG93QXJl
YU5hbWVzIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlv
biI6ICJTaG93IGxhYmVscyBmb3IgZ3JpZCBhcmVhIG5hbWVzLiBJZiBub3Qgc3BlY2lmaWVkLCB0
aGUgZGVmYXVsdCB2YWx1ZSBpcyBmYWxzZS4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwK
KyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiaGlkZUdyaWRPdmVybGF5IiwKKyAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJIaWRlcyBhIGdyaWQgb3ZlcmxheSBmb3IgYSBub2RlIHRo
YXQgYmVnaW5zIGEgJ2dyaWQnIGxheW91dCBjb250ZXh0LiBUaGUgY29tbWFuZCBoYXMgbm8gZWZm
ZWN0IGlmIDxjb2RlPm5vZGVJZDwvY29kZT4gaXMgc3BlY2lmaWVkIGFuZCBpbnZhbGlkLCBvciBp
ZiB0aGVyZSBpcyBub3QgY3VycmVudGx5IGFuIG92ZXJsYXkgc2V0IGZvciB0aGUgPGNvZGU+bm9k
ZUlkPC9jb2RlPi4iLAorICAgICAgICAgICAgInRhcmdldFR5cGVzIjogWyJwYWdlIl0sCisgICAg
ICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vZGVJ
ZCIsICIkcmVmIjogIk5vZGVJZCIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJU
aGUgbm9kZSBmb3Igd2hpY2ggYSBncmlkIG92ZXJsYXkgc2hvdWxkIGJlIGhpZGRlbi4gSWYgYSA8
Y29kZT5ub2RlSWQ8L2NvZGU+IGlzIG5vdCBzcGVjaWZpZWQsIGFsbCBncmlkIG92ZXJsYXlzIHdp
bGwgYmUgaGlkZGVuLiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAogICAgICAgICB7CiAg
ICAgICAgICAgICAibmFtZSI6ICJwdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQiLAogICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogIlJlcXVlc3RzIHRoYXQgdGhlIG5vZGUgaXMgc2VudCB0byB0aGUg
Y2FsbGVyIGdpdmVuIGl0cyBwYXRoLiIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggNzM0ZThiNzg1NGZkMDMxODczNDI4YWNlODg1
MDQ5ZGRlNjYxNzMyYi4uODcyOGZiNzJmYTA0Mjc5NmRjOGJkZjVjOTFlODI0MmJkMDc1NWY2MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNw
cApAQCAtMzYxLDYgKzM2MSwxMSBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmdldEhpZ2hs
aWdodChJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQmIGhpZ2hsaWdodCwgSQogICAgIG1fb3Zl
cmxheS0+Z2V0SGlnaGxpZ2h0KGhpZ2hsaWdodCwgY29vcmRpbmF0ZVN5c3RlbSk7CiB9CiAKK3Vu
c2lnbmVkIEluc3BlY3RvckNvbnRyb2xsZXI6OmdyaWRPdmVybGF5Q291bnQoKSBjb25zdAorewor
ICAgIHJldHVybiBtX292ZXJsYXktPmdyaWRPdmVybGF5Q291bnQoKTsKK30KKwogYm9vbCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpzaG91bGRTaG93T3ZlcmxheSgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1fb3ZlcmxheS0+c2hvdWxkU2hvd092ZXJsYXkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IDFjYmQ0NTJmZmYzZmMzODYwNTBkYjhh
MGVhZDMzYjUwMTE2ZDgxZjUuLjc4NGJmNDgyZmQ2OGRhNjhlMWYzOGZkNWNkNmJjZWRjODk3MWRm
ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9s
bGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
aApAQCAtMTAxLDkgKzEwMSwxMSBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3
aWxsQ29tcG9zaXRlKEZyYW1lJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkaWRDb21wb3Np
dGUoRnJhbWUmKTsKIAorICAgIC8vIFRlc3Rpbmcgc3VwcG9ydC4KICAgICBib29sIGlzVW5kZXJU
ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9pc1VuZGVyVGVzdDsgfQogICAgIHZvaWQgc2V0SXNVbmRl
clRlc3QoYm9vbCBpc1VuZGVyVGVzdCkgeyBtX2lzVW5kZXJUZXN0ID0gaXNVbmRlclRlc3Q7IH0K
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQoY29uc3Qg
U3RyaW5nJiBzY3JpcHQpOworICAgIFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIGdyaWRPdmVybGF5
Q291bnQoKSBjb25zdDsKIAogICAgIEluc3BlY3RvckNsaWVudCogaW5zcGVjdG9yQ2xpZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9pbnNwZWN0b3JDbGllbnQ7IH0KICAgICBJbnNwZWN0b3JGcm9udGVu
ZENsaWVudCogaW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2luc3Bl
Y3RvckZyb250ZW5kQ2xpZW50OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yT3ZlcmxheS5jcHAKaW5kZXggZDdhNTdhN2YxNTFhMDlkNDk5NzIyMDllZmIxOWJkZTE5Njky
Yzg5NC4uZTJjMmI3MzAyOWU4MGUzZTQ3YTlmZDYyZDcxN2MwOTYwOTkzM2IyZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcApAQCAtMSw2ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDYgKzQzLDcgQEAK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyaWRQb3NpdGlvbnNSZXNvbHZlci5oIgogI2lu
Y2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVk
ZSAiSW50UmVjdC5oIgpAQCAtNTMsNiArNTQsNyBAQAogI2luY2x1ZGUgIlBzZXVkb0VsZW1lbnQu
aCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJCb3hNb2RlbE9iamVj
dC5oIgorI2luY2x1ZGUgIlJlbmRlckdyaWQuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIK
ICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpAQCAtNDEy
LDYgKzQxNCw5IEBAIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KQogICAgIGlmICghbV9wYWludFJlY3RzLmlzRW1wdHkoKSkKICAgICAgICAgZHJh
d1BhaW50UmVjdHMoY29udGV4dCwgbV9wYWludFJlY3RzKTsKIAorICAgIGZvciAoY29uc3QgR3Jp
ZE92ZXJsYXkmIGdyaWRPdmVybGF5IDogbV9hY3RpdmVHcmlkT3ZlcmxheXMpCisgICAgICAgIGRy
YXdHcmlkT3ZlcmxheShjb250ZXh0LCBncmlkT3ZlcmxheSk7CisgICAgCiAgICAgaWYgKG1fc2hv
d1J1bGVycyB8fCBtX3Nob3dSdWxlcnNEdXJpbmdFbGVtZW50U2VsZWN0aW9uKQogICAgICAgICBk
cmF3UnVsZXJzKGNvbnRleHQsIHJ1bGVyRXhjbHVzaW9uKTsKIH0KQEAgLTQ5NSw3ICs1MDAsNyBA
QCBib29sIEluc3BlY3Rvck92ZXJsYXk6OnNob3VsZFNob3dPdmVybGF5KCkgY29uc3QKIHsKICAg
ICAvLyBEb24ndCBzaG93IHRoZSBvdmVybGF5IHdoZW4gbV9zaG93UnVsZXJzRHVyaW5nRWxlbWVu
dFNlbGVjdGlvbiBpcyB0cnVlLCBhcyBpdCdzIG9ubHkgc3VwcG9zZWQKICAgICAvLyB0byBoYXZl
IGFuIGVmZmVjdCB3aGVuIGVsZW1lbnQgc2VsZWN0aW9uIGlzIGFjdGl2ZSAoZS5nLiBhIG5vZGUg
aXMgaG92ZXJlZCkuCi0gICAgcmV0dXJuIG1faGlnaGxpZ2h0Tm9kZSB8fCBtX2hpZ2hsaWdodE5v
ZGVMaXN0IHx8IG1faGlnaGxpZ2h0UXVhZCB8fCBtX2luZGljYXRpbmcgfHwgbV9zaG93UGFpbnRS
ZWN0cyB8fCBtX3Nob3dSdWxlcnM7CisgICAgcmV0dXJuIG1faGlnaGxpZ2h0Tm9kZSB8fCBtX2hp
Z2hsaWdodE5vZGVMaXN0IHx8IG1faGlnaGxpZ2h0UXVhZCB8fCBtX2luZGljYXRpbmcgfHwgbV9z
aG93UGFpbnRSZWN0cyB8fCBtX3Nob3dSdWxlcnMgfHwgbV9hY3RpdmVHcmlkT3ZlcmxheXMuc2l6
ZSgpOwogfQogCiB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnVwZGF0ZSgpCkBAIC01NTUsNiArNTYw
LDQ2IEBAIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6c2V0U2hvd1J1bGVycyhib29sIHNob3dSdWxl
cnMpCiAgICAgdXBkYXRlKCk7CiB9CiAKK0Vycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yT3Zl
cmxheTo6c2V0R3JpZE92ZXJsYXlGb3JOb2RlKE5vZGUmIG5vZGUsIGNvbnN0IEdyaWRPdmVybGF5
OjpDb25maWcmIGdyaWRPdmVybGF5Q29uZmlnKQoreworICAgIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIgPSBub2RlLnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgZmluZCByZW5kZXJlciBmb3Igbm9kZS4iKTsKKyAg
ICBpZiAoIWlzPFJlbmRlckdyaWQ+KHJlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKCJOb2RlIGRvZXMgbm90IGluaXRpYXRlIGEgZ3JpZCBjb250ZXh0Iik7CisKKyAgICBt
X2FjdGl2ZUdyaWRPdmVybGF5cy5yZW1vdmVBbGxNYXRjaGluZyhbJl0gKGNvbnN0IEdyaWRPdmVy
bGF5JiBncmlkT3ZlcmxheSkgeworICAgICAgICByZXR1cm4gZ3JpZE92ZXJsYXkuZ3JpZE5vZGUu
Z2V0KCkgPT0gJm5vZGU7CisgICAgfSk7CisKKyAgICBtX2FjdGl2ZUdyaWRPdmVybGF5cy5hcHBl
bmQoeyBtYWtlV2Vha1B0cihub2RlKSwgZ3JpZE92ZXJsYXlDb25maWcgfSk7CisKKyAgICB1cGRh
dGUoKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK0Vycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVj
dG9yT3ZlcmxheTo6Y2xlYXJHcmlkT3ZlcmxheUZvck5vZGUoTm9kZSYgbm9kZSkKK3sKKyAgICBi
b29sIHJlbW92ZWQgPSBtX2FjdGl2ZUdyaWRPdmVybGF5cy5yZW1vdmVBbGxNYXRjaGluZyhbJl0g
KGNvbnN0IEdyaWRPdmVybGF5JiBncmlkT3ZlcmxheSkgeworICAgICAgICByZXR1cm4gZ3JpZE92
ZXJsYXkuZ3JpZE5vZGUuZ2V0KCkgPT0gJm5vZGU7CisgICAgfSk7CisKKyAgICBpZiAoIXJlbW92
ZWQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTm8gZ3JpZCBvdmVybGF5IGV4aXN0
cyBmb3IgdGhlIG5vZGUsIHNvIGNhbm5vdCBjbGVhci4iKTsKKworICAgIHVwZGF0ZSgpOworCisg
ICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpjbGVhckFsbEdyaWRP
dmVybGF5cygpCit7CisgICAgbV9hY3RpdmVHcmlkT3ZlcmxheXMuY2xlYXIoKTsKKworICAgIHVw
ZGF0ZSgpOworfQorCiB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnVwZGF0ZVBhaW50UmVjdHNUaW1l
ckZpcmVkKCkKIHsKICAgICBNb25vdG9uaWNUaW1lIG5vdyA9IE1vbm90b25pY1RpbWU6Om5vdygp
OwpAQCAtNTg3LDYgKzYzMiw5IEBAIEluc3BlY3Rvck92ZXJsYXk6OlJ1bGVyRXhjbHVzaW9uIElu
c3BlY3Rvck92ZXJsYXk6OmRyYXdOb2RlSGlnaGxpZ2h0KEdyYXBoaWNzQ29uCiAgICAgaWYgKG1f
bm9kZUhpZ2hsaWdodENvbmZpZy5zaG93SW5mbykKICAgICAgICAgcnVsZXJFeGNsdXNpb24udGl0
bGVQYXRoID0gZHJhd0VsZW1lbnRUaXRsZShjb250ZXh0LCBub2RlLCBydWxlckV4Y2x1c2lvbi5i
b3VuZHMpOwogCisgICAgLy8gTm90ZTogc2luY2UgZ3JpZCBvdmVybGF5cyBtYXkgY292ZXIgdGhl
IGVudGlyZSB2aWV3cG9ydCB3aXRoIGxpdHRsZSBsaW5lcywgZ3JpZCBvdmVybGF5IGJvdW5kcwor
ICAgIC8vIGFyZSBub3QgY29uc2lkZXJlZCBhcyBwYXJ0IG9mIHRoZSBjb21iaW5lZCBib3VuZHMg
dXNlZCBhcyB0aGUgcnVsZXIgZXhjbHVzaW9uIGFyZWEuCisgICAgCiAgICAgcmV0dXJuIHJ1bGVy
RXhjbHVzaW9uOwogfQogCkBAIC0xMDkyLDQgKzExNDAsNzkgQEAgUGF0aCBJbnNwZWN0b3JPdmVy
bGF5OjpkcmF3RWxlbWVudFRpdGxlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgTm9kZSYgbm9k
ZSwgY28KICAgICByZXR1cm4gcGF0aDsKIH0KIAordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3
R3JpZE92ZXJsYXkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBHcmlkT3ZlcmxheSYg
Z3JpZE92ZXJsYXkpCit7CisgICAgLy8gSWYgdGhlIG5vZGUgV2Vha1B0ciBoYXMgYmVlbiBjbGVh
cmVkLCB0aGVuIHRoZSBub2RlIGlzIGdvbmUgYW5kIHRoZXJlJ3Mgbm90aGluZyB0byBkcmF3Lgor
ICAgIGlmICghZ3JpZE92ZXJsYXkuZ3JpZE5vZGUpIHsKKyAgICAgICAgbV9hY3RpdmVHcmlkT3Zl
cmxheXMucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdIChjb25zdCBHcmlkT3ZlcmxheSYgZ3JpZE92ZXJs
YXkpIHsKKyAgICAgICAgICAgIHJldHVybiBncmlkT3ZlcmxheS5ncmlkTm9kZS5nZXQoKSA9PSBn
cmlkT3ZlcmxheS5ncmlkTm9kZTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgLy8gQWx3YXlzIHJlLWNoZWNrIGJlY2F1c2UgdGhlIG5vZGUncyByZW5kZXJl
ciBtYXkgaGF2ZSBjaGFuZ2VkIGFmdGVyIGl0cyBncmlkIG92ZXJsYXkgd2FzIGFkZGVkLgorICAg
IE5vZGUqIG5vZGUgPSBncmlkT3ZlcmxheS5ncmlkTm9kZS5nZXQoKTsKKyAgICBhdXRvIHJlbmRl
cmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIWlzPFJlbmRlckdyaWQ+KHJlbmRlcmVy
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byogcmVuZGVyR3JpZCA9IGRvd25jYXN0PFJl
bmRlckdyaWQ+KHJlbmRlcmVyKTsKKyAgICBMYXlvdXRSZWN0IHBhZGRpbmdCb3ggPSByZW5kZXJH
cmlkLT5jbGllbnRCb3hSZWN0KCk7CisgICAgTGF5b3V0UmVjdCBjb250ZW50Qm94ID0gTGF5b3V0
UmVjdChwYWRkaW5nQm94LngoKSArIHJlbmRlckdyaWQtPnBhZGRpbmdMZWZ0KCksIHBhZGRpbmdC
b3gueSgpICsgcmVuZGVyR3JpZC0+cGFkZGluZ1RvcCgpLAorICAgICAgICBwYWRkaW5nQm94Lndp
ZHRoKCkgLSByZW5kZXJHcmlkLT5wYWRkaW5nTGVmdCgpIC0gcmVuZGVyR3JpZC0+cGFkZGluZ1Jp
Z2h0KCksIHBhZGRpbmdCb3guaGVpZ2h0KCkgLSByZW5kZXJHcmlkLT5wYWRkaW5nVG9wKCkgLSBy
ZW5kZXJHcmlkLT5wYWRkaW5nQm90dG9tKCkpOworICAgIEZsb2F0UXVhZCBhYnNDb250ZW50UXVh
ZCA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChjb250ZW50Qm94KSk7
CisgICAgRmxvYXRSZWN0IGdyaWRCb3VuZGluZ0JveCA9IGFic0NvbnRlbnRRdWFkLmJvdW5kaW5n
Qm94KCk7CisgICAgRnJhbWVWaWV3KiBwYWdlVmlldyA9IG1fcGFnZS5tYWluRnJhbWUoKS52aWV3
KCk7CisgICAgRmxvYXRTaXplIGNvbnRlbnRJbnNldCgwLCBwYWdlVmlldy0+dG9wQ29udGVudElu
c2V0KFNjcm9sbFZpZXc6OlRvcENvbnRlbnRJbnNldFR5cGU6OldlYkNvcmVPclBsYXRmb3JtQ29u
dGVudEluc2V0KSk7CisgICAgRmxvYXRTaXplIHZpZXdwb3J0U2l6ZSA9IHBhZ2VWaWV3LT5zaXpl
Rm9yVmlzaWJsZUNvbnRlbnQoKTsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc2F2
ZXIoY29udGV4dCk7CisKKyAgICAvLyBEcmF3aW5nIGNvZGUgaXMgcmVsYXRpdmUgdG8gdGhlIHZp
c2libGUgdmlld3BvcnQgYXJlYS4KKyAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCBjb250ZW50SW5z
ZXQuaGVpZ2h0KCkpOworICAgIAorICAgIC8vIEZJWE1FOiBpZiBzaG93RXh0ZW5kZWRHcmlkbGlu
ZXMgaXMgZmFsc2UsIHNldCB0aGUgY2xpcCBwYXRoIHRvIHRoZSBncmlkQm91bmRpbmdCb3ggKG1h
eWJlIGluZmxhdGVkPykKKworICAgIC8vIERyYXcgY29sdW1ucyBhbmQgcm93cy4KKyAgICBjb250
ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxKTsKKyAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKGdy
aWRPdmVybGF5LmNvbmZpZy5ncmlkQ29sb3IpOworCisgICAgYXV0byBjb2x1bW5Qb3NpdGlvbnMg
PSByZW5kZXJHcmlkLT5jb2x1bW5Qb3NpdGlvbnMoKTsKKyAgICBhdXRvIGNvbHVtbldpZHRocyA9
IHJlbmRlckdyaWQtPnRyYWNrU2l6ZXNGb3JDb21wdXRlZFN0eWxlKEdyaWRUcmFja1NpemluZ0Rp
cmVjdGlvbjo6Rm9yQ29sdW1ucyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbHVt
blBvc2l0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICAvLyBDb2x1bW4gcG9zaXRpb25zIGFy
ZSAoYXBwYXJlbnRseSkgcmVsYXRpdmUgdG8gdGhlIGVsZW1lbnQncyBjb250ZW50IGFyZWEuCisg
ICAgICAgIGF1dG8gcG9zaXRpb24gPSBjb2x1bW5Qb3NpdGlvbnNbaV0gKyBncmlkQm91bmRpbmdC
b3gueCgpOworCisgICAgICAgIFBhdGggY29sdW1uUGF0aHM7CisgICAgICAgIGNvbHVtblBhdGhz
Lm1vdmVUbyh7IHBvc2l0aW9uLCAwIH0pOworICAgICAgICBjb2x1bW5QYXRocy5hZGRMaW5lVG8o
eyBwb3NpdGlvbiwgdmlld3BvcnRTaXplLmhlaWdodCgpIH0pOworCisgICAgICAgIGlmIChpIDwg
Y29sdW1uV2lkdGhzLnNpemUoKSkgeworICAgICAgICAgICAgYXV0byB3aWR0aCA9IGNvbHVtbldp
ZHRoc1tpXTsKKyAgICAgICAgICAgIGNvbHVtblBhdGhzLm1vdmVUbyh7IHBvc2l0aW9uICsgd2lk
dGgsIDAgfSk7CisgICAgICAgICAgICBjb2x1bW5QYXRocy5hZGRMaW5lVG8oeyBwb3NpdGlvbiAr
IHdpZHRoLCB2aWV3cG9ydFNpemUuaGVpZ2h0KCkgfSk7CisgICAgICAgIH0KKworICAgICAgICBj
b250ZXh0LnN0cm9rZVBhdGgoY29sdW1uUGF0aHMpOworICAgIH0KKworICAgIGF1dG8gcm93UG9z
aXRpb25zID0gcmVuZGVyR3JpZC0+cm93UG9zaXRpb25zKCk7CisgICAgYXV0byByb3dIZWlnaHRz
ID0gcmVuZGVyR3JpZC0+dHJhY2tTaXplc0ZvckNvbXB1dGVkU3R5bGUoR3JpZFRyYWNrU2l6aW5n
RGlyZWN0aW9uOjpGb3JSb3dzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcm93UG9z
aXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8gcG9zaXRpb24gPSByb3dQb3NpdGlv
bnNbaV0gKyBncmlkQm91bmRpbmdCb3gueSgpOworCisgICAgICAgIFBhdGggcm93UGF0aHM7Cisg
ICAgICAgIHJvd1BhdGhzLm1vdmVUbyh7IDAsIHBvc2l0aW9uIH0pOworICAgICAgICByb3dQYXRo
cy5hZGRMaW5lVG8oeyB2aWV3cG9ydFNpemUud2lkdGgoKSwgcG9zaXRpb24gfSk7CisKKyAgICAg
ICAgaWYgKGkgPCByb3dIZWlnaHRzLnNpemUoKSkgeworICAgICAgICAgICAgYXV0byBoZWlnaHQg
PSByb3dIZWlnaHRzW2ldOworICAgICAgICAgICAgcm93UGF0aHMubW92ZVRvKHsgMCwgcG9zaXRp
b24gKyBoZWlnaHQgfSk7CisgICAgICAgICAgICByb3dQYXRocy5hZGRMaW5lVG8oeyB2aWV3cG9y
dFNpemUud2lkdGgoKSwgcG9zaXRpb24gKyBoZWlnaHQgfSk7CisgICAgICAgIH0KKworICAgICAg
ICBjb250ZXh0LnN0cm9rZVBhdGgocm93UGF0aHMpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ck92ZXJsYXkuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmgK
aW5kZXggMjQyMjAzNDcyNDBiYzA2ODJhNzVkNjJlMGIxNTBmNTVhNDc3M2RkNS4uNjUzMjM1YjNl
MWQ5ZGU0MDRhNjI1YmU3NmRiMGYwNTA5MDAzZjQyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oCkBAIC00MSw2ICs0MSwxMyBAQAogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAorbmFtZXNwYWNl
IEluc3BlY3RvciB7Cit1c2luZyBFcnJvclN0cmluZyA9IFN0cmluZzsKKwordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+Cit1c2luZyBFcnJvclN0cmluZ09yID0gRXhwZWN0ZWQ8VCwgRXJyb3JTdHJpbmc+
OworfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKQEAg
LTk4LDYgKzEwNSwyNCBAQCBwdWJsaWM6CiAgICAgICAgIHVzaW5nIEJvdW5kcyA9IEZsb2F0UmVj
dDsKICAgICB9OwogCisgICAgc3RydWN0IEdyaWRPdmVybGF5IHsKKyAgICAgICAgV1RGX01BS0Vf
U1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworCisgICAgICAgIHN0cnVjdCBDb25maWcgeworICAgICAg
ICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworCisgICAgICAgICAgICBDb2xv
ciBncmlkQ29sb3I7CisgICAgICAgICAgICBib29sIHNob3dMaW5lTmFtZXM7CisgICAgICAgICAg
ICBib29sIHNob3dMaW5lTnVtYmVyczsKKyAgICAgICAgICAgIGJvb2wgc2hvd0V4dGVuZGVkR3Jp
ZGxpbmVzOworICAgICAgICAgICAgYm9vbCBzaG93VHJhY2tTaXplczsKKyAgICAgICAgICAgIGJv
b2wgc2hvd0FyZWFOYW1lczsKKyAgICAgICAgfTsKKworICAgICAgICBXZWFrUHRyPE5vZGU+IGdy
aWROb2RlOworICAgICAgICBDb25maWcgY29uZmlnOworICAgIH07CisKICAgICBlbnVtIGNsYXNz
IENvb3JkaW5hdGVTeXN0ZW0gewogICAgICAgICBWaWV3LCAvLyBBZGp1c3RzIGZvciB0aGUgbWFp
biBmcmFtZSdzIHNjcm9sbCBvZmZzZXQuCiAgICAgICAgIERvY3VtZW50LCAvLyBEb2VzIG5vdCBh
ZGp1c3QgZm9yIHRoZSBtYWluIGZyYW1lJ3Mgc2Nyb2xsIG9mZnNldC4KQEAgLTEyMCwxMSArMTQ1
LDE4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFNob3dSdWxlcnNEdXJpbmdFbGVtZW50U2VsZWN0
aW9uKGJvb2wgZW5hYmxlZCkgeyBtX3Nob3dSdWxlcnNEdXJpbmdFbGVtZW50U2VsZWN0aW9uID0g
ZW5hYmxlZDsgfQogCiAgICAgTm9kZSogaGlnaGxpZ2h0ZWROb2RlKCkgY29uc3Q7CisgICAgdW5z
aWduZWQgZ3JpZE92ZXJsYXlDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlR3JpZE92ZXJs
YXlzLnNpemUoKTsgfQogCiAgICAgdm9pZCBkaWRTZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5h
YmxlZCk7CiAKICAgICB2b2lkIHNldEluZGljYXRpbmcoYm9vbCBpbmRpY2F0aW5nKTsKIAorICAg
IC8vIE11bHRpcGxlIGdyaWQgb3ZlcmxheXMgY2FuIGJlIGFjdGl2ZSBhdCB0aGUgc2FtZSB0aW1l
LiBUaGVzZSBtZXRob2RzCisgICAgLy8gd2lsbCBmYWlsIGlmIHRoZSBub2RlIGlzIG5vdCBhIGdy
aWQgb3IgaWYgdGhlIG5vZGUgaGFzIGJlZW4gR0MnZC4KKyAgICBJbnNwZWN0b3I6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gc2V0R3JpZE92ZXJsYXlGb3JOb2RlKE5vZGUmLCBjb25zdCBHcmlkT3Zlcmxh
eTo6Q29uZmlnJik7CisgICAgSW5zcGVjdG9yOjpFcnJvclN0cmluZ09yPHZvaWQ+IGNsZWFyR3Jp
ZE92ZXJsYXlGb3JOb2RlKE5vZGUmKTsKKyAgICB2b2lkIGNsZWFyQWxsR3JpZE92ZXJsYXlzKCk7
CisKIHByaXZhdGU6CiAgICAgdXNpbmcgVGltZVJlY3RQYWlyID0gc3RkOjpwYWlyPE1vbm90b25p
Y1RpbWUsIEZsb2F0UmVjdD47CiAKQEAgLTE0MSw2ICsxNzMsOCBAQCBwcml2YXRlOgogCiAgICAg
UGF0aCBkcmF3RWxlbWVudFRpdGxlKEdyYXBoaWNzQ29udGV4dCYsIE5vZGUmLCBjb25zdCBIaWdo
bGlnaHQ6OkJvdW5kcyYpOwogCisgICAgdm9pZCBkcmF3R3JpZE92ZXJsYXkoR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgR3JpZE92ZXJsYXkmKTsKKwogICAgIHZvaWQgdXBkYXRlUGFpbnRSZWN0c1Rp
bWVyRmlyZWQoKTsKIAogICAgIFBhZ2UmIG1fcGFnZTsKQEAgLTE1Niw2ICsxOTAsOCBAQCBwcml2
YXRlOgogICAgIERlcXVlPFRpbWVSZWN0UGFpcj4gbV9wYWludFJlY3RzOwogICAgIFRpbWVyIG1f
cGFpbnRSZWN0VXBkYXRlVGltZXI7CiAKKyAgICBWZWN0b3I8R3JpZE92ZXJsYXk+IG1fYWN0aXZl
R3JpZE92ZXJsYXlzOworCiAgICAgYm9vbCBtX2luZGljYXRpbmcgeyBmYWxzZSB9OwogICAgIGJv
b2wgbV9zaG93UGFpbnRSZWN0cyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3Nob3dSdWxlcnMgeyBm
YWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JET01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckRPTUFnZW50LmNwcAppbmRleCA1Y2I1OGI5Yzk5ZDlkNjlhMGVkYjAzNWU0YmVjZDM0Yjkx
NmYyNzNlLi40ZWQ3ZGRlODEzYTY5YTg0NTcwZjIxZDNjOTYwN2FkMjZlNjdmNmZiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50
LmNwcApAQCAtMTQ3Myw2ICsxNDczLDQ0IEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IEluc3BlY3RvckRPTUFnZW50OjpoaWRlSGlnaGxpZ2h0KCkKICAgICByZXR1cm4geyB9OwogfQog
CitJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFn
ZW50OjpzaG93R3JpZE92ZXJsYXkoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9k
ZUlkLCAgUmVmPEpTT046Ok9iamVjdD4mJiBncmlkQ29sb3IsIE9wdGlvbmFsPGJvb2w+JiYgc2hv
d0xpbmVOYW1lcywgT3B0aW9uYWw8Ym9vbD4mJiBzaG93TGluZU51bWJlcnMsIE9wdGlvbmFsPGJv
b2w+JiYgc2hvd0V4dGVuZGVkR3JpZGxpbmVzLCBPcHRpb25hbDxib29sPiYmIHNob3dUcmFja1Np
emVzLCBPcHRpb25hbDxib29sPiYmIHNob3dBcmVhTmFtZXMpCit7CisgICAgUHJvdG9jb2w6OkVy
cm9yU3RyaW5nIGVycm9yU3RyaW5nOworICAgIE5vZGUqIG5vZGUgPSBhc3NlcnROb2RlKGVycm9y
U3RyaW5nLCBub2RlSWQpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIEluc3BlY3Rvck92ZXJsYXk6OkdyaWRPdmVybGF5
OjpDb25maWcgY29uZmlnOworICAgIGNvbmZpZy5ncmlkQ29sb3IgPSBwYXJzZUNvbG9yKFdURk1v
dmUoZ3JpZENvbG9yKSk7CisgICAgY29uZmlnLnNob3dMaW5lTmFtZXMgPSBzaG93TGluZU5hbWVz
LnZhbHVlT3IoZmFsc2UpOworICAgIGNvbmZpZy5zaG93TGluZU51bWJlcnMgPSBzaG93TGluZU51
bWJlcnMudmFsdWVPcihmYWxzZSk7CisgICAgY29uZmlnLnNob3dFeHRlbmRlZEdyaWRsaW5lcyA9
IHNob3dFeHRlbmRlZEdyaWRsaW5lcy52YWx1ZU9yKGZhbHNlKTsKKyAgICBjb25maWcuc2hvd1Ry
YWNrU2l6ZXMgPSBzaG93VHJhY2tTaXplcy52YWx1ZU9yKGZhbHNlKTsKKyAgICBjb25maWcuc2hv
d0FyZWFOYW1lcyA9IHNob3dBcmVhTmFtZXMudmFsdWVPcihmYWxzZSk7CisKKyAgICBtX292ZXJs
YXktPnNldEdyaWRPdmVybGF5Rm9yTm9kZSgqbm9kZSwgY29uZmlnKTsKKworICAgIHJldHVybiB7
IH07Cit9CisKK0luc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVj
dG9yRE9NQWdlbnQ6OmhpZGVHcmlkT3ZlcmxheShPcHRpb25hbDxQcm90b2NvbDo6RE9NOjpOb2Rl
SWQ+JiYgbm9kZUlkKQoreworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsK
KyAgICBOb2RlKiBub2RlID0gbnVsbHB0cjsKKyAgICBpZiAobm9kZUlkKSB7CisgICAgICAgIG5v
ZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5nLCAqbm9kZUlkKTsKKyAgICAgICAgaWYgKCFub2Rl
KQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAgICB9
CisgICAgCisgICAgaWYgKG5vZGUpCisgICAgICAgIHJldHVybiBtX292ZXJsYXktPmNsZWFyR3Jp
ZE92ZXJsYXlGb3JOb2RlKCpub2RlKTsKKworICAgIG1fb3ZlcmxheS0+Y2xlYXJBbGxHcmlkT3Zl
cmxheXMoKTsKKworICAgIHJldHVybiB7IH07Cit9CisKIFByb3RvY29sOjpFcnJvclN0cmluZ09y
PFByb3RvY29sOjpET006Ok5vZGVJZD4gSW5zcGVjdG9yRE9NQWdlbnQ6Om1vdmVUbyhQcm90b2Nv
bDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBQcm90b2NvbDo6RE9NOjpOb2RlSWQgdGFyZ2V0Tm9kZUlk
LCBPcHRpb25hbDxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+JiYgaW5zZXJ0QmVmb3JlTm9kZUlkKQog
ewogICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCA4N2Q2
YjkxYWM5NTNkMmI5YWY0YjJjYmQ0MjcwZGY0OTMyNjQ3YWYzLi5hY2MxNTQwZGE5NGRlZTM4ZmZk
Zjg0Mjc4Y2Y0ZjNjZDU3YWNkNzQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC0xNDQsNiArMTQ0LDggQEAgcHVibGlj
OgogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaGlnaGxpZ2h0
Tm9kZShSZWY8SlNPTjo6T2JqZWN0PiYmIGhpZ2hsaWdodENvbmZpZywgT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+JiYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJik7CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBoaWdobGlnaHROb2RlTGlzdChSZWY8SlNPTjo6QXJyYXk+JiYgbm9k
ZUlkcywgUmVmPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRDb25maWcpOwogICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaGlnaGxpZ2h0RnJhbWUoY29uc3QgSW5z
cGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgY29sb3IsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3V0bGluZUNvbG9yKTsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNob3dHcmlkT3ZlcmxheShJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwgUmVmPEpTT046Ok9iamVjdD4mJiBncmlkQ29s
b3IsIE9wdGlvbmFsPGJvb2w+JiYgc2hvd0xpbmVOYW1lcywgT3B0aW9uYWw8Ym9vbD4mJiBzaG93
TGluZU51bWJlcnMsIE9wdGlvbmFsPGJvb2w+JiYgc2hvd0V4dGVuZGVkR3JpZGxpbmVzLCBPcHRp
b25hbDxib29sPiYmIHNob3dUcmFja1NpemVzLCBPcHRpb25hbDxib29sPiYmIHNob3dBcmVhTmFt
ZXMpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaGlkZUdy
aWRPdmVybGF5KE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiYmKTsK
ICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6Tm9kZUlkPiBtb3ZlVG8oSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQg
bm9kZUlkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCB0YXJnZXROb2RlSWQsIE9w
dGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiYmIGluc2VydEJlZm9yZU5v
ZGVJZCk7CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiB1bmRv
KCk7CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiByZWRvKCk7
CkBAIC0yMTMsNiArMjE1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGhpZ2hsaWdodE1vdXNlZE92
ZXJOb2RlKCk7CiAgICAgdm9pZCBzZXRTZWFyY2hpbmdGb3JOb2RlKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nJiwgYm9vbCBlbmFibGVkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGhp
Z2hsaWdodENvbmZpZywgYm9vbCBzaG93UnVsZXJzKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5z
cGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpDb25maWc+IGhpZ2hsaWdodENvbmZpZ0Zyb21JbnNw
ZWN0b3JPYmplY3QoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCk7CisgICAgc3RkOjp1bmlxdWVf
cHRyPEluc3BlY3Rvck92ZXJsYXk6OkdyaWRPdmVybGF5OjpDb25maWc+IGdyaWRPdmVybGF5Q29u
ZmlnRnJvbUluc3BlY3Rvck9iamVjdChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgZ3JpZE92ZXJsYXlJbnNwZWN0b3JPYmplY3QpOwogCiAg
ICAgLy8gTm9kZS1yZWxhdGVkIG1ldGhvZHMuCiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxO
b2RlPiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IE5vZGVUb0lkTWFwOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDFiMTcyZWExZGU5OWUwZTBhNzEwMzdl
MDg5OWQyNmJjOWY4YzBlZmMuLmVmYzAyNTFjZDNmZWNjZDhkYzA5NDgxOTU4ZDg4ZGEzZGM5ZTE1
ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTE2NjQsNiArMTY2NCwx
NSBAQCBSZWY8RE9NUmVjdD4gSW50ZXJuYWxzOjpib3VuZGluZ0JveChFbGVtZW50JiBlbGVtZW50
KQogICAgIHJldHVybiBET01SZWN0OjpjcmVhdGUocmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdC
b3hSZWN0SWdub3JpbmdUcmFuc2Zvcm1zKCkpOwogfQogCitFeGNlcHRpb25Pcjx1bnNpZ25lZD4g
SW50ZXJuYWxzOjppbnNwZWN0b3JHcmlkT3ZlcmxheUNvdW50KCkKK3sKKyAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1
bWVudC0+cGFnZSgpKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vy
cm9yIH07CisKKyAgICByZXR1cm4gZG9jdW1lbnQtPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxl
cigpLmdyaWRPdmVybGF5Q291bnQoKTsKK30KKwogRXhjZXB0aW9uT3I8UmVmPERPTVJlY3RMaXN0
Pj4gSW50ZXJuYWxzOjppbnNwZWN0b3JIaWdobGlnaHRSZWN0cygpCiB7CiAgICAgRG9jdW1lbnQq
IGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5oIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
aAppbmRleCBlZThlMjY3NmExYTcyOWNiN2IyOWQ5MmI3ZDQ1ZmMxZTYyNmY1MjI4Li4yYzkzYzYy
MmNhNWQ0NzhiNDYyOWMyM2ZmN2MyZjQzMDRhNjJhMTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmgKQEAgLTI3MSw2ICsyNzEsNyBAQCBwdWJsaWM6CiAgICAgUmVmPERPTVJlY3Q+IGJv
dW5kaW5nQm94KEVsZW1lbnQmKTsKIAogICAgIEV4Y2VwdGlvbk9yPFJlZjxET01SZWN0TGlzdD4+
IGluc3BlY3RvckhpZ2hsaWdodFJlY3RzKCk7CisgICAgRXhjZXB0aW9uT3I8dW5zaWduZWQ+IGlu
c3BlY3RvckdyaWRPdmVybGF5Q291bnQoKTsKIAogICAgIEV4Y2VwdGlvbk9yPHVuc2lnbmVkPiBt
YXJrZXJDb3VudEZvck5vZGUoTm9kZSYsIGNvbnN0IFN0cmluZyYpOwogICAgIEV4Y2VwdGlvbk9y
PFJlZlB0cjxSYW5nZT4+IG1hcmtlclJhbmdlRm9yTm9kZShOb2RlJiwgY29uc3QgU3RyaW5nJiBt
YXJrZXJUeXBlLCB1bnNpZ25lZCBpbmRleCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5pZGwgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5p
ZGwKaW5kZXggODVhZmFmYzU5ZjcyODM2OTUyMGM4OTlmYTA2OWRjOWRlNTE2ZThjZC4uNGY5YmFi
ZTgyYzI3MDEyYTg4YjZhZmZhZGVlZTJiYmVkYTA2ZTc5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmlkbApAQCAtMzI5LDYgKzMyOSw3IEBAIGVudW0gVHJlZVR5cGUgewogCiAgICAg
RE9NUmVjdCBib3VuZGluZ0JveChFbGVtZW50IGVsZW1lbnQpOwogCisgICAgW01heVRocm93RXhj
ZXB0aW9uXSB1bnNpZ25lZCBsb25nIGluc3BlY3RvckdyaWRPdmVybGF5Q291bnQoKTsKICAgICBb
TWF5VGhyb3dFeGNlcHRpb25dIERPTVJlY3RMaXN0IGluc3BlY3RvckhpZ2hsaWdodFJlY3RzKCk7
CiAKICAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHVuc2lnbmVkIGxvbmcgbWFya2VyQ291bnRGb3JO
b2RlKE5vZGUgbm9kZSwgRE9NU3RyaW5nIG1hcmtlclR5cGUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRE9NTWFuYWdlci5qcyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0RPTU1hbmFn
ZXIuanMKaW5kZXggZjM1MmI2ZDgxMjhhNDg1Zjk5YWM4OGVjMmNkNzIwZDg3MDQ3ODdmMy4uNThl
MWE4NjE4YTJiMDdkM2FhOTcwZWEyZjYwMGE4MTIzYjZhZjQxOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRE9NTWFuYWdlci5qcwor
KysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9ET01N
YW5hZ2VyLmpzCkBAIC0xNTQsNiArMTU0LDI4IEBAIFdJLkRPTU1hbmFnZXIgPSBjbGFzcyBET01N
YW5hZ2VyIGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgfQogCiAgICAgcmVxdWVzdERvY3VtZW50KGNh
bGxiYWNrKQorICAgIHsKKyAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gImZ1bmN0aW9u
IikKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0RG9jdW1lbnRXaXRoUHJvbWlzZSgp
OworCisgICAgICAgIHRoaXMuX3JlcXVlc3REb2N1bWVudFdpdGhDYWxsYmFjayhjYWxsYmFjayk7
CisgICAgfQorCisgICAgX3JlcXVlc3REb2N1bWVudFdpdGhQcm9taXNlKCkKKyAgICB7CisgICAg
ICAgIGlmICh0aGlzLl9kb2N1bWVudFByb21pc2UpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
ZG9jdW1lbnRQcm9taXNlLnByb21pc2U7CisKKyAgICAgICAgdGhpcy5fZG9jdW1lbnRQcm9taXNl
ID0gbmV3IFdJLldyYXBwZWRQcm9taXNlOworICAgICAgICBpZiAodGhpcy5fZG9jdW1lbnQpCisg
ICAgICAgICAgICB0aGlzLl9kb2N1bWVudFByb21pc2UucmVzb2x2ZSh0aGlzLl9kb2N1bWVudCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMuX3JlcXVlc3REb2N1bWVudFdpdGhDYWxs
YmFjaygoZG9jKSA9PiB0aGlzLl9kb2N1bWVudFByb21pc2UucmVzb2x2ZShkb2MpKTsKKworICAg
ICAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnRQcm9taXNlLnByb21pc2U7CisgICAgfQorCisgICAg
X3JlcXVlc3REb2N1bWVudFdpdGhDYWxsYmFjayhjYWxsYmFjaykKICAgICB7CiAgICAgICAgIGlm
ICh0aGlzLl9kb2N1bWVudCkgewogICAgICAgICAgICAgY2FsbGJhY2sodGhpcy5fZG9jdW1lbnQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxz
L0NvbG9yLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0Nv
bG9yLmpzCmluZGV4IGZiYjMzMjAwY2YwY2I4YTViZTZjOThmNjIyYzE0NWQwZGE0NTM0MjMuLjg3
YmEwNzAzYjAxMThhOTdkOTk2ZjUwYzEyYzM0Mjg5NWU5ZTFmNDcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Db2xvci5qcworKysgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ29sb3IuanMKQEAgLTYzOCw2
ICs2MzgsMTIgQEAgV0kuQ29sb3IgPSBjbGFzcyBDb2xvcgogICAgICAgICByZXR1cm4gIiI7CiAg
ICAgfQogCisgICAgdG9Qcm90b2NvbCgpCisgICAgeworICAgICAgICBsZXQgW3IsIGcsIGIsIGFd
ID0gdGhpcy5yZ2JhOworICAgICAgICByZXR1cm4ge3IsIGcsIGIsIGF9OworICAgIH0KKwogICAg
IGlzS2V5d29yZCgpCiAgICAgewogICAgICAgICBpZiAodGhpcy5rZXl3b3JkKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0RPTU5vZGUuanMg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvRE9NTm9kZS5qcwpp
bmRleCBkZDlmNTY2ZjU4MGQ4MmU3OTJjMjFlMDBmZDA1NjYzNTY3OWVhMGU4Li4xODYwZjE3YjI0
OWI4NTFkMGQ3Mzc4MTZjMDliOWRkM2I1OTgzN2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvRE9NTm9kZS5qcworKysgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvRE9NTm9kZS5qcwpAQCAtNTUzLDYgKzU1
MywzNCBAQCBXSS5ET01Ob2RlID0gY2xhc3MgRE9NTm9kZSBleHRlbmRzIFdJLk9iamVjdAogICAg
ICAgICB0YXJnZXQuRE9NQWdlbnQuaGlnaGxpZ2h0Tm9kZShXSS5ET01NYW5hZ2VyLmJ1aWxkSGln
aGxpZ2h0Q29uZmlnKG1vZGUpLCB0aGlzLmlkKTsKICAgICB9CiAKKyAgICBzaG93R3JpZE92ZXJs
YXkoY29sb3IsIG9wdGlvbnMgPSB7c2hvd0xpbmVOYW1lczogZmFsc2UsIHNob3dMaW5lTnVtYmVy
czogZmFsc2UsIHNob3dFeHRlbmRlZEdyaWRMaW5lczogZmFsc2UsIHNob3dUcmFja1NpemVzOiBm
YWxzZSwgc2hvd0FyZWFOYW1lczogZmFsc2V9KQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3Nl
cnQoY29sb3IgaW5zdGFuY2VvZiBXSS5Db2xvciwgY29sb3IpOworCisgICAgICAgIGlmICh0aGlz
Ll9kZXN0cm95ZWQpCisgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoIkNhbm5vdCBz
aG93IG92ZXJsYXksIG5vZGUgaXMgZGVzdHJveWVkIik7CisKKyAgICAgICAgbGV0IHRhcmdldCA9
IFdJLmFzc3VtaW5nTWFpblRhcmdldCgpOworICAgICAgICByZXR1cm4gdGFyZ2V0LkRPTUFnZW50
LnNob3dHcmlkT3ZlcmxheS5pbnZva2UoeworICAgICAgICAgICAgbm9kZUlkOiB0aGlzLmlkLAor
ICAgICAgICAgICAgZ3JpZENvbG9yOiBjb2xvci50b1Byb3RvY29sKCksCisgICAgICAgICAgICBz
aG93TGluZU5hbWVzOiAhIW9wdGlvbnMuc2hvd0xpbmVOYW1lcywKKyAgICAgICAgICAgIHNob3dM
aW5lTnVtYmVyczogISFvcHRpb25zLnNob3dMaW5lTnVtYmVycywKKyAgICAgICAgICAgIHNob3dF
eHRlbmRlZEdyaWRMaW5lczogISFvcHRpb25zLnNob3dFeHRlbmRlZEdyaWRMaW5lcywKKyAgICAg
ICAgICAgIHNob3dUcmFja1NpemVzOiAhIW9wdGlvbnMuc2hvd1RyYWNrU2l6ZXMsCisgICAgICAg
ICAgICBzaG93QXJlYU5hbWVzOiAhIW9wdGlvbnMuc2hvd0FyZWFOYW1lcywKKyAgICAgICAgfSk7
CisgICAgfQorCisgICAgaGlkZUdyaWRPdmVybGF5KCkKKyAgICB7CisgICAgICAgIGlmICh0aGlz
Ll9kZXN0cm95ZWQpCisgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoIkNhbm5vdCBo
aWRlIG92ZXJsYXksIG5vZGUgaXMgZGVzdHJveWVkIik7CisKKyAgICAgICAgbGV0IHRhcmdldCA9
IFdJLmFzc3VtaW5nTWFpblRhcmdldCgpOworICAgICAgICByZXR1cm4gdGFyZ2V0LkRPTUFnZW50
LmhpZGVHcmlkT3ZlcmxheSh0aGlzLmlkKTsKKyAgICB9CisKICAgICBzY3JvbGxJbnRvVmlldygp
CiAgICAgewogICAgICAgICBXSS5SZW1vdGVPYmplY3QucmVzb2x2ZU5vZGUodGhpcykudGhlbigo
b2JqZWN0KSA9PiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9UZXN0L1Rlc3RIYXJuZXNzLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvVGVzdC9UZXN0SGFybmVzcy5qcwppbmRleCBkMmU5OWFmMWI2ZTg1MTA3ZGZkNjZkNDFh
MzEzYTY0ZWFlNzAwZjI2Li4zNmNlOTY3NDdmZmM1NGQ0NWQ4NTBhM2JlMTdiNzA5NWUxZjA1ODhj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9UZXN0L1Rl
c3RIYXJuZXNzLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Rl
c3QvVGVzdEhhcm5lc3MuanMKQEAgLTI1NywxMCArMjU3LDEyIEBAIFRlc3RIYXJuZXNzID0gY2xh
c3MgVGVzdEhhcm5lc3MgZXh0ZW5kcyBXSS5PYmplY3QKICAgICAgICAgaWYgKHR5cGVvZiB3b3Jr
ICE9PSAiZnVuY3Rpb24iKQogICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGFy
Z3VtZW50IHRvIGNhdGNoRXhjZXB0aW9uOiB3b3JrIG11c3QgYmUgYSBmdW5jdGlvbi4iKTsKIAot
ICAgICAgICBsZXQgZXhwZWN0QW5kRHVtcEVycm9yID0gKGUpID0+IHsKKyAgICAgICAgbGV0IGV4
cGVjdEFuZER1bXBFcnJvciA9IChlLCByZXNvbHZlZFZhbHVlKSA9PiB7CiAgICAgICAgICAgICB0
aGlzLmV4cGVjdE5vdE51bGwoZSwgIlNob3VsZCBwcm9kdWNlIGFuIGV4Y2VwdGlvbi4iKTsKLSAg
ICAgICAgICAgIGlmICghZSkKKyAgICAgICAgICAgIGlmICghZSkgeworICAgICAgICAgICAgICAg
IHRoaXMuZXhwZWN0RXF1YWwocmVzb2x2ZWRWYWx1ZSwgdW5kZWZpbmVkLCAiRXhjZXB0aW9uLXBy
b2R1Y2luZyB3b3JrIHNob3VsZCBub3QgcmV0dXJuIGEgdmFsdWUiKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2Yg
RXJyb3IgfHwgIShlIGluc3RhbmNlb2YgT2JqZWN0KSkKICAgICAgICAgICAgICAgICB0aGlzLmxv
ZyhlLnRvU3RyaW5nKCkpOwpAQCAtMjg0LDcgKzI4Niw3IEBAIFRlc3RIYXJuZXNzID0gY2xhc3Mg
VGVzdEhhcm5lc3MgZXh0ZW5kcyBXSS5PYmplY3QKICAgICAgICAgICAgIC8vIEludmVydCB0aGUg
cHJvbWlzZSdzIHNldHRsZWQgc3RhdGUgdG8gbWF0Y2ggdGhlIGV4cGVjdGF0aW9uIG9mIHRoZSBj
YWxsZXIuCiAgICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkgewogICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQudGhlbigocmVzb2x2ZWRWYWx1ZSkgPT4gewotICAg
ICAgICAgICAgICAgICAgICBleHBlY3RBbmREdW1wRXJyb3IobnVsbCk7CisgICAgICAgICAgICAg
ICAgICAgIGV4cGVjdEFuZER1bXBFcnJvcihudWxsLCByZXNvbHZlZFZhbHVlKTsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc29sdmVkVmFsdWUpOwogICAgICAg
ICAgICAgICAgIH0sIChlKSA9PiB7IC8vIERvbid0IGNoYWluIHRoZSAuY2F0Y2ggYXMgaXQgd2ls
bCBsb2cgdGhlIHZhbHVlIHdlIGp1c3QgcmVqZWN0ZWQuCiAgICAgICAgICAgICAgICAgICAgIGV4
cGVjdEFuZER1bXBFcnJvcihlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL1ZpZXdzL0NvbnRleHRNZW51VXRpbGl0aWVzLmpzIGIvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29udGV4dE1lbnVVdGlsaXRpZXMuanMKaW5k
ZXggMzA2MmMxMmYwMDYwMzcyZWIwMDk1M2FiMzVlZDNjMjBmNGRjOGYwMC4uMGVhZDNhOWVkMWNm
YmZlOWNjMGYzMTA0MTllODYwNDhhMzI0MTc1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29udGV4dE1lbnVVdGlsaXRpZXMuanMKKysrIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29udGV4dE1lbnVVdGls
aXRpZXMuanMKQEAgLTM4Niw2ICszODYsMjggQEAgV0kuYXBwZW5kQ29udGV4dE1lbnVJdGVtc0Zv
ckRPTU5vZGUgPSBmdW5jdGlvbihjb250ZXh0TWVudSwgZG9tTm9kZSwgb3B0aW9ucyA9IHsKICAg
ICAgICAgfQogCiAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZFNlcGFyYXRvcigpOworCisgICAg
ICAgIC8vIEZJWE1FOiByZW1vdmUgdGhlc2UgbWVudSBpdGVtcyB3aGVuIHJlbW92aW5nIHRoZSBm
ZWF0dXJlIGZsYWcuIFRoZXkgZXhpc3QgdG8gdGVzdCB0aGUgYmFja2VuZCBjb21tYW5kcyBlYXNp
bHkuCisgICAgICAgIGlmIChXSS5zZXR0aW5ncy5leHBlcmltZW50YWxFbmFibGVMYXlvdXRQYW5l
bC52YWx1ZSAmJiBXSS5pc0VuZ2luZWVyaW5nQnVpbGQpIHsKKyAgICAgICAgICAgIGlmIChJbnNw
ZWN0b3JCYWNrZW5kLmhhc0NvbW1hbmQoIkRPTS5zaG93R3JpZE92ZXJsYXkiKSAmJiBhdHRhY2hl
ZCkgeworICAgICAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV0kudW5sb2NhbGl6
ZWRTdHJpbmcoIkFkZCBHcmlkIE92ZXJsYXkgd2l0aCBSYW5kb20gQ29sb3IiKSwgKCkgPT4gewor
ICAgICAgICAgICAgICAgICAgICBsZXQgcmFuZG9tQ29tcG9uZW50ID0gKCkgPT4gTWF0aC5mbG9v
cihNYXRoLnJhbmRvbSgpICogMjU1KTsKKyAgICAgICAgICAgICAgICAgICAgbGV0IGNvbG9yID0g
bmV3IFdJLkNvbG9yKFdJLkNvbG9yLkZvcm1hdC5SR0IsIFtyYW5kb21Db21wb25lbnQoKSwgcmFu
ZG9tQ29tcG9uZW50KCksIHJhbmRvbUNvbXBvbmVudCgpXSk7CisgICAgICAgICAgICAgICAgICAg
IGRvbU5vZGUuc2hvd0dyaWRPdmVybGF5KGNvbG9yKS5jYXRjaCgoZXJyb3IpID0+IGNvbnNvbGUu
ZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGNv
bnRleHRNZW51LmFwcGVuZEl0ZW0oV0kudW5sb2NhbGl6ZWRTdHJpbmcoIlJlbW92ZSBHcmlkIE92
ZXJsYXkgZm9yIHRoaXMgTm9kZSIpLCAoKSA9PiB7CisgICAgICAgICAgICAgICAgICAgIGRvbU5v
ZGUuaGlkZUdyaWRPdmVybGF5KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAg
ICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdJLnVubG9jYWxpemVkU3RyaW5nKCJSZW1vdmUg
QWxsIEdyaWQgT3ZlcmxheXMiKSwgKCkgPT4geworICAgICAgICAgICAgICAgICAgICBsZXQgdGFy
Z2V0ID0gV0kuYXNzdW1pbmdNYWluVGFyZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIHRhcmdl
dC5ET01BZ2VudC5oaWRlR3JpZE92ZXJsYXkoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZFNlcGFyYXRv
cigpOwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3NDE1NmY0YTg3MjU1NWY5NmRlNTAyZmM3ZTFlOWYx
Y2JkYjM2YzA3Li5iYzdiODI1MGY3Y2NhYmU2NWI1NTlhZjU4OGYzMGQxM2QyNTg3ZmIxIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjEgQEAKKzIwMjEtMDEtMzAgIEJKIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+
CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogaW1wbGVtZW50IHRoZSBiYXNpY3MgZm9yIHNob3dp
bmcvaGlkaW5nIGdyaWQgb3ZlcmxheXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyMTA2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogaW5zcGVjdG9yL2RvbS9zaG93R3JpZE92ZXJsYXktZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvZG9tL3Nob3dHcmlkT3ZlcmxheS5odG1s
OiBBZGRlZC4KKyAgICAgICAgVGhpcyB0ZXN0IGRvZXMgbm90IGNvdmVyIHRoZSBhY3R1YWwgZHJh
d2luZyBjb2RlLiBUaGUgZHJhd2luZyBtZXRob2QKKyAgICAgICAgd2lsbCBjaGFuZ2UgYSBsb3Qg
YW5kIGlzIG5vdCBlYXN5IHRvIHRlc3QgY3VycmVudGx5LiBUaGUgbmV3IHRlc3QKKyAgICAgICAg
Y292ZXJzIHRoZSBiZWhhdmlvciBvZiBzaG93R3JpZE92ZXJsYXkvaGlkZUdyaWRPdmVybGF5IGJ5
IHF1ZXJ5aW5nCisgICAgICAgIGhvdyBtYW55IGdyaWQgb3ZlcmxheXMgYXJlIGFjdGl2ZSBhY2Nv
cmRpbmcgdG8gSW5zcGVjdG9yT3ZlcmxheS4KKworICAgICAgICAqIGluc3BlY3Rvci9tb2RlbC9j
b2xvci1leHBlY3RlZC50eHQ6CisgICAgICAgICogaW5zcGVjdG9yL21vZGVsL2NvbG9yLmh0bWw6
CisgICAgICAgIEFkZCBhIHRlc3QgY2FzZSB0byBleGVyY2lzZSBXSS5Db2xvci5wcm90b3R5cGUu
dG9Qcm90b2NvbCgpLgorCiAyMDIxLTAxLTMwICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhA
YXBwbGUuY29tPgogCiAgICAgICAgIFttYWNPU10gUmVtb3ZlIHN1cHBvcnQgZm9yIGltYWdlIGNv
bnRyb2xzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZG9tL3Nob3dHcmlkT3Zl
cmxheS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZG9tL3Nob3dHcmlkT3Zl
cmxheS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzU1YTQzMjZiNzU0OTU1OWQyZjRlNmUwNDRm
NjJiMTI4NzNkNDRmNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9k
b20vc2hvd0dyaWRPdmVybGF5LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDYzIEBACitUZXN0cyBm
b3IgdGhlIERPTS5zaG93R3JpZE92ZXJsYXkgY29tbWFuZC4KKworQQorQgorQworRAorRQorRgor
CitBCitCCitDCitECitFCitGCisKKz09IFJ1bm5pbmcgdGVzdCBzdWl0ZTogRE9NLnNob3dHcmlk
T3ZlcmxheQorLS0gUnVubmluZyB0ZXN0IGNhc2U6IEdyaWRPdmVybGF5LlNob3dPbmVHcmlkCitQ
QVNTOiBFeHBlY3Qgbm8gZ3JpZHMgdG8gYmUgZGlzcGxheWVkLgorUmVxdWVzdGluZyB0byBzaG93
IGdyaWQgb3ZlcmxheSBmb3IgZmlyc3QgLmdyaWQtY29udGFpbmVyCitQQVNTOiBFeHBlY3Qgb25l
IGdyaWQgdG8gYmUgZGlzcGxheWVkLgorUmVxdWVzdGluZyB0byBzaG93IGEgZGlmZmVyZW50IGdy
aWQgb3ZlcmxheSBmb3IgZmlyc3QgLmdyaWQtY29udGFpbmVyCitQQVNTOiBFeHBlY3Qgb25lIGdy
aWQgdG8gYmUgZGlzcGxheWVkLgorUmVxdWVzdGluZyB0byBoaWRlIGdyaWQgb3ZlcmxheQorUEFT
UzogRXhwZWN0IG5vIGdyaWRzIHRvIGJlIGRpc3BsYXllZC4KKworLS0gUnVubmluZyB0ZXN0IGNh
c2U6IEdyaWRPdmVybGF5LlNob3dUd29HcmlkcworUEFTUzogRXhwZWN0IG5vIGdyaWRzIHRvIGJl
IGRpc3BsYXllZC4KK1JlcXVlc3RpbmcgdG8gc2hvdyBmaXJzdCBncmlkIG92ZXJsYXkKK1BBU1M6
IEV4cGVjdCBvbmUgZ3JpZCB0byBiZSBkaXNwbGF5ZWQuCitSZXF1ZXN0aW5nIHRvIHNob3cgc2Vj
b25kIGdyaWQgb3ZlcmxheQorUEFTUzogRXhwZWN0IHR3byBncmlkcyB0byBiZSBkaXNwbGF5ZWQu
CitSZXF1ZXN0aW5nIHRvIGhpZGUgZmlyc3QgZ3JpZCBvdmVybGF5CitQQVNTOiBFeHBlY3Qgb25l
IGdyaWQgdG8gYmUgZGlzcGxheWVkLgorUmVxdWVzdGluZyB0byBoaWRlIHNlY29uZCBncmlkIG92
ZXJsYXkKK1BBU1M6IEV4cGVjdCBubyBncmlkcyB0byBiZSBkaXNwbGF5ZWQuCisKKy0tIFJ1bm5p
bmcgdGVzdCBjYXNlOiBHcmlkT3ZlcmxheS5IaWRlQWxsR3JpZHMKK1BBU1M6IEV4cGVjdCBubyBn
cmlkcyB0byBiZSBkaXNwbGF5ZWQuCitSZXF1ZXN0aW5nIHRvIHNob3cgZ3JpZCBvdmVybGF5CitQ
QVNTOiBFeHBlY3Qgb25lIGdyaWQgdG8gYmUgZGlzcGxheWVkLgorUmVxdWVzdGluZyB0byBzaG93
IGEgZGlmZmVyZW50IGdyaWQgb3ZlcmxheQorUEFTUzogRXhwZWN0IHR3byBncmlkcyB0byBiZSBk
aXNwbGF5ZWQuCitSZXF1ZXN0aW5nIHRvIGhpZGUgYWxsIGdyaWQgb3ZlcmxheXMuIEhpZGluZyBh
bGwgZ3JpZHMgaXMgaWRlbXBvdGVudCBhbmQgc2hvdWxkIG5vdCB0aHJvdyBhbiBlcnJvci4KK1BB
U1M6IEV4cGVjdCBubyBncmlkcyB0byBiZSBkaXNwbGF5ZWQuCitSZXF1ZXN0aW5nIHRvIGhpZGUg
YWxsIGdyaWQgb3ZlcmxheXMgYWdhaW4sIGV4cGVjdGluZyBub25lIHRvIGJlIGNsZWFyZWQuIEhp
ZGluZyBhbGwgZ3JpZHMgaXMgaWRlbXBvdGVudCBhbmQgc2hvdWxkIG5vdCB0aHJvdyBhbiBlcnJv
ci4KK1BBU1M6IEV4cGVjdCBubyBncmlkcyB0byBiZSBkaXNwbGF5ZWQuCisKKy0tIFJ1bm5pbmcg
dGVzdCBjYXNlOiBHcmlkT3ZlcmxheS5IaWRlQmVmb3JlU2hvd1Nob3VsZEVycm9yCitQQVNTOiBF
eHBlY3Qgbm8gZ3JpZHMgdG8gYmUgZGlzcGxheWVkLgorUmVxdWVzdGluZyB0byBoaWRlIGdyaWQg
b3ZlcmxheSBmb3IgLmdyaWQtY29udGFpbmVyCitQQVNTOiBTaG91bGQgcHJvZHVjZSBhbiBleGNl
cHRpb24uCitFcnJvcjogTm8gZ3JpZCBvdmVybGF5IGV4aXN0cyBmb3IgdGhlIG5vZGUsIHNvIGNh
bm5vdCBjbGVhci4KK1JlcXVlc3RpbmcgdG8gaGlkZSBhbGwgZ3JpZCBvdmVybGF5cy4gSGlkaW5n
IGFsbCBncmlkcyBpcyBpZGVtcG90ZW50IGFuZCBzaG91bGQgbm90IHRocm93IGFuIGVycm9yLgor
UEFTUzogRXhwZWN0IG5vIGdyaWRzIHRvIGJlIGRpc3BsYXllZC4KKworLS0gUnVubmluZyB0ZXN0
IGNhc2U6IEdyaWRPdmVybGF5LkZvck5vbmV4aXN0ZW50Tm9kZVNob3VsZEVycm9yCitQQVNTOiBF
eHBlY3Qgbm8gZ3JpZHMgdG8gYmUgZGlzcGxheWVkLgorUmVxdWVzdGluZyB0byBzaG93IGdyaWQg
b3ZlcmxheSBmb3IgaW52YWxpZCBub2RlSWQgLTEKK1BBU1M6IFNob3VsZCBwcm9kdWNlIGFuIGV4
Y2VwdGlvbi4KK0Vycm9yOiBNaXNzaW5nIG5vZGUgZm9yIGdpdmVuIG5vZGVJZAorUEFTUzogRXhw
ZWN0IG5vIGdyaWRzIHRvIGJlIGRpc3BsYXllZC4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL2RvbS9zaG93R3JpZE92ZXJsYXkuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9kb20vc2hvd0dyaWRPdmVybGF5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTI5NTQ5ODAwMzAwMzkzN2My
NTUzZDNiNWUxMjNmNzQxYzUxYmE5YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9kb20vc2hvd0dyaWRPdmVybGF5Lmh0bWwKQEAgLTAsMCArMSwxODUgQEAKKzwhZG9j
dHlwZSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9odHRwL3Rlc3Rz
L2luc3BlY3Rvci9yZXNvdXJjZXMvaW5zcGVjdG9yLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlw
dD4KK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIGxldCBzdWl0ZSA9IEluc3BlY3RvclRlc3QuY3Jl
YXRlQXN5bmNTdWl0ZSgiRE9NLnNob3dHcmlkT3ZlcmxheSIpOworCisgICAgYXN5bmMgZnVuY3Rp
b24gZ2V0R3JpZENvbnRhaW5lck5vZGUoKSB7CisgICAgICAgIGxldCBkb2MgPSBhd2FpdCBXSS5k
b21NYW5hZ2VyLnJlcXVlc3REb2N1bWVudCgpOworICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQg
RE9NQWdlbnQucXVlcnlTZWxlY3Rvcihkb2MuaWQsICIuZ3JpZC1jb250YWluZXIiKTsKKyAgICAg
ICAgcmV0dXJuIFdJLmRvbU1hbmFnZXIubm9kZUZvcklkKHJlc3VsdC5ub2RlSWQpOworICAgIH0K
KworICAgIGFzeW5jIGZ1bmN0aW9uIGdldEFsbEdyaWRDb250YWluZXJOb2RlcygpIHsKKyAgICAg
ICAgbGV0IGRvYyA9IGF3YWl0IFdJLmRvbU1hbmFnZXIucmVxdWVzdERvY3VtZW50KCk7CisgICAg
ICAgIGxldCByZXN1bHQgPSBhd2FpdCBET01BZ2VudC5xdWVyeVNlbGVjdG9yQWxsKGRvYy5pZCwg
Ii5ncmlkLWNvbnRhaW5lciIpOworICAgICAgICByZXR1cm4gcmVzdWx0Lm5vZGVJZHMubWFwKChu
b2RlSWQpID0+IFdJLmRvbU1hbmFnZXIubm9kZUZvcklkKG5vZGVJZCkpOworICAgIH0KKworICAg
IGFzeW5jIGZ1bmN0aW9uIGdyaWRPdmVybGF5Q291bnQoKSB7CisgICAgICAgIHJldHVybiBJbnNw
ZWN0b3JUZXN0LmV2YWx1YXRlSW5QYWdlKCJ3aW5kb3cuaW50ZXJuYWxzLmluc3BlY3RvckdyaWRP
dmVybGF5Q291bnQoKSIpOworICAgIH0KKworICAgIHN1aXRlLmFkZFRlc3RDYXNlKHsKKyAgICAg
ICAgbmFtZTogIkdyaWRPdmVybGF5LlNob3dPbmVHcmlkIiwKKyAgICAgICAgZGVzY3JpcHRpb246
ICJObyBlcnJvciBvY2N1cnMgd2hlbiByZXF1ZXN0aW5nIHRvIHNob3cgYSBncmlkIG92ZXJsYXku
IiwKKyAgICAgICAgYXN5bmMgdGVzdChyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgICAgIElu
c3BlY3RvclRlc3QuZXhwZWN0RXF1YWwoYXdhaXQgZ3JpZE92ZXJsYXlDb3VudCgpLCAwLCAiRXhw
ZWN0IG5vIGdyaWRzIHRvIGJlIGRpc3BsYXllZC4iKTsKKyAgICAgICAgICAgIGxldCBjb250YWlu
ZXIgPSBhd2FpdCBnZXRHcmlkQ29udGFpbmVyTm9kZSgpOworCisgICAgICAgICAgICBJbnNwZWN0
b3JUZXN0LmxvZygiUmVxdWVzdGluZyB0byBzaG93IGdyaWQgb3ZlcmxheSBmb3IgZmlyc3QgLmdy
aWQtY29udGFpbmVyIik7CisgICAgICAgICAgICBhd2FpdCBET01BZ2VudC5zaG93R3JpZE92ZXJs
YXkoY29udGFpbmVyLmlkLCBXSS5Db2xvci5mcm9tU3RyaW5nKCJtYWdlbnRhIikudG9Qcm90b2Nv
bCgpKTsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0RXF1YWwoYXdhaXQgZ3JpZE92
ZXJsYXlDb3VudCgpLCAxLCAiRXhwZWN0IG9uZSBncmlkIHRvIGJlIGRpc3BsYXllZC4iKTsKKwor
ICAgICAgICAgICAgLy8gTm8gZXJyb3Igc2hvdWxkIG9jY3VyIGlmIHNob3dpbmcgZ3JpZCBvdmVy
bGF5IGZvciBhIG5vZGUgdGhhdCBhbHJlYWR5IGhhcyBvbmUuCisgICAgICAgICAgICBJbnNwZWN0
b3JUZXN0LmxvZygiUmVxdWVzdGluZyB0byBzaG93IGEgZGlmZmVyZW50IGdyaWQgb3ZlcmxheSBm
b3IgZmlyc3QgLmdyaWQtY29udGFpbmVyIik7CisgICAgICAgICAgICBhd2FpdCBET01BZ2VudC5z
aG93R3JpZE92ZXJsYXkoY29udGFpbmVyLmlkLCBXSS5Db2xvci5mcm9tU3RyaW5nKCJncmVlbiIp
LnRvUHJvdG9jb2woKSk7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdEVxdWFsKGF3
YWl0IGdyaWRPdmVybGF5Q291bnQoKSwgMSwgIkV4cGVjdCBvbmUgZ3JpZCB0byBiZSBkaXNwbGF5
ZWQuIik7CisKKyAgICAgICAgICAgIC8vIE5vIGVycm9yIHNob3VsZCBvY2N1ciB3aGVuIGhpZGlu
ZyB0aGUgZ3JpZCBvdmVybGF5LgorICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIlJlcXVl
c3RpbmcgdG8gaGlkZSBncmlkIG92ZXJsYXkiKTsKKyAgICAgICAgICAgIGF3YWl0IERPTUFnZW50
LmhpZGVHcmlkT3ZlcmxheShjb250YWluZXIuaWQpOworICAgICAgICAgICAgSW5zcGVjdG9yVGVz
dC5leHBlY3RFcXVhbChhd2FpdCBncmlkT3ZlcmxheUNvdW50KCksIDAsICJFeHBlY3Qgbm8gZ3Jp
ZHMgdG8gYmUgZGlzcGxheWVkLiIpOworICAgICAgICB9CisgICAgfSk7CisKKyAgICBzdWl0ZS5h
ZGRUZXN0Q2FzZSh7CisgICAgICAgIG5hbWU6ICJHcmlkT3ZlcmxheS5TaG93VHdvR3JpZHMiLAor
ICAgICAgICBkZXNjcmlwdGlvbjogIk5vIGVycm9yIG9jY3VycyB3aGVuIHJlcXVlc3RpbmcgdG8g
c2hvdyBtdWx0aXBsZSBncmlkIG92ZXJsYXlzLiIsCisgICAgICAgIGFzeW5jIHRlc3QocmVzb2x2
ZSwgcmVqZWN0KSB7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdEVxdWFsKGF3YWl0
IGdyaWRPdmVybGF5Q291bnQoKSwgMCwgIkV4cGVjdCBubyBncmlkcyB0byBiZSBkaXNwbGF5ZWQu
Iik7CisgICAgICAgICAgICBsZXQgW2ZpcnN0LCBzZWNvbmRdID0gYXdhaXQgZ2V0QWxsR3JpZENv
bnRhaW5lck5vZGVzKCk7CisKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJSZXF1ZXN0
aW5nIHRvIHNob3cgZmlyc3QgZ3JpZCBvdmVybGF5Iik7CisgICAgICAgICAgICBhd2FpdCBET01B
Z2VudC5zaG93R3JpZE92ZXJsYXkoZmlyc3QuaWQsIFdJLkNvbG9yLmZyb21TdHJpbmcoIm1hZ2Vu
dGEiKS50b1Byb3RvY29sKCkpOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RFcXVh
bChhd2FpdCBncmlkT3ZlcmxheUNvdW50KCksIDEsICJFeHBlY3Qgb25lIGdyaWQgdG8gYmUgZGlz
cGxheWVkLiIpOworCisgICAgICAgICAgICAvLyBObyBlcnJvciBzaG91bGQgb2NjdXIgaWYgc2hv
d2luZyBncmlkIG92ZXJsYXkgZm9yIGEgbm9kZSB0aGF0IGFscmVhZHkgaGFzIG9uZS4KKyAgICAg
ICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJSZXF1ZXN0aW5nIHRvIHNob3cgc2Vjb25kIGdyaWQg
b3ZlcmxheSIpOworICAgICAgICAgICAgYXdhaXQgRE9NQWdlbnQuc2hvd0dyaWRPdmVybGF5KHNl
Y29uZC5pZCwgV0kuQ29sb3IuZnJvbVN0cmluZygiZ3JlZW4iKS50b1Byb3RvY29sKCkpOworICAg
ICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RFcXVhbChhd2FpdCBncmlkT3ZlcmxheUNvdW50
KCksIDIsICJFeHBlY3QgdHdvIGdyaWRzIHRvIGJlIGRpc3BsYXllZC4iKTsKKworICAgICAgICAg
ICAgLy8gTm8gZXJyb3Igc2hvdWxkIG9jY3VyIHdoZW4gaGlkaW5nIHRoZSBncmlkIG92ZXJsYXku
CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiUmVxdWVzdGluZyB0byBoaWRlIGZpcnN0
IGdyaWQgb3ZlcmxheSIpOworICAgICAgICAgICAgYXdhaXQgRE9NQWdlbnQuaGlkZUdyaWRPdmVy
bGF5KGZpcnN0LmlkKTsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0RXF1YWwoYXdh
aXQgZ3JpZE92ZXJsYXlDb3VudCgpLCAxLCAiRXhwZWN0IG9uZSBncmlkIHRvIGJlIGRpc3BsYXll
ZC4iKTsKKworICAgICAgICAgICAgLy8gTm8gZXJyb3Igc2hvdWxkIG9jY3VyIHdoZW4gaGlkaW5n
IHRoZSBncmlkIG92ZXJsYXkuCisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiUmVxdWVz
dGluZyB0byBoaWRlIHNlY29uZCBncmlkIG92ZXJsYXkiKTsKKyAgICAgICAgICAgIGF3YWl0IERP
TUFnZW50LmhpZGVHcmlkT3ZlcmxheShzZWNvbmQuaWQpOworICAgICAgICAgICAgSW5zcGVjdG9y
VGVzdC5leHBlY3RFcXVhbChhd2FpdCBncmlkT3ZlcmxheUNvdW50KCksIDAsICJFeHBlY3Qgbm8g
Z3JpZHMgdG8gYmUgZGlzcGxheWVkLiIpOworICAgICAgICB9CisgICAgfSk7CisKKworICAgIHN1
aXRlLmFkZFRlc3RDYXNlKHsKKyAgICAgICAgbmFtZTogIkdyaWRPdmVybGF5LkhpZGVBbGxHcmlk
cyIsCisgICAgICAgIGRlc2NyaXB0aW9uOiAiTm8gZXJyb3Igb2NjdXJzIHdoZW4gcmVxdWVzdGlu
ZyB0byBzaG93IG11bHRpcGxlIGdyaWQgb3ZlcmxheXMuIiwKKyAgICAgICAgYXN5bmMgdGVzdChy
ZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0RXF1YWwo
YXdhaXQgZ3JpZE92ZXJsYXlDb3VudCgpLCAwLCAiRXhwZWN0IG5vIGdyaWRzIHRvIGJlIGRpc3Bs
YXllZC4iKTsKKyAgICAgICAgICAgIGxldCBbZmlyc3QsIHNlY29uZF0gPSBhd2FpdCBnZXRBbGxH
cmlkQ29udGFpbmVyTm9kZXMoKTsKKworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIlJl
cXVlc3RpbmcgdG8gc2hvdyBncmlkIG92ZXJsYXkiKTsKKyAgICAgICAgICAgIGF3YWl0IERPTUFn
ZW50LnNob3dHcmlkT3ZlcmxheShmaXJzdC5pZCwgV0kuQ29sb3IuZnJvbVN0cmluZygibWFnZW50
YSIpLnRvUHJvdG9jb2woKSk7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdEVxdWFs
KGF3YWl0IGdyaWRPdmVybGF5Q291bnQoKSwgMSwgIkV4cGVjdCBvbmUgZ3JpZCB0byBiZSBkaXNw
bGF5ZWQuIik7CisKKyAgICAgICAgICAgIC8vIE5vIGVycm9yIHNob3VsZCBvY2N1ciBpZiBzaG93
aW5nIGdyaWQgb3ZlcmxheSBmb3IgYSBub2RlIHRoYXQgYWxyZWFkeSBoYXMgb25lLgorICAgICAg
ICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIlJlcXVlc3RpbmcgdG8gc2hvdyBhIGRpZmZlcmVudCBn
cmlkIG92ZXJsYXkiKTsKKyAgICAgICAgICAgIGF3YWl0IERPTUFnZW50LnNob3dHcmlkT3Zlcmxh
eShzZWNvbmQuaWQsIFdJLkNvbG9yLmZyb21TdHJpbmcoImdyZWVuIikudG9Qcm90b2NvbCgpKTsK
KyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0RXF1YWwoYXdhaXQgZ3JpZE92ZXJsYXlD
b3VudCgpLCAyLCAiRXhwZWN0IHR3byBncmlkcyB0byBiZSBkaXNwbGF5ZWQuIik7CisKKyAgICAg
ICAgICAgIC8vIE5vIGVycm9yIHNob3VsZCBvY2N1ciB3aGVuIGhpZGluZyB0aGUgZ3JpZCBvdmVy
bGF5LgorICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIlJlcXVlc3RpbmcgdG8gaGlkZSBh
bGwgZ3JpZCBvdmVybGF5cy4gSGlkaW5nIGFsbCBncmlkcyBpcyBpZGVtcG90ZW50IGFuZCBzaG91
bGQgbm90IHRocm93IGFuIGVycm9yLiIpOworICAgICAgICAgICAgYXdhaXQgRE9NQWdlbnQuaGlk
ZUdyaWRPdmVybGF5KCk7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdEVxdWFsKGF3
YWl0IGdyaWRPdmVybGF5Q291bnQoKSwgMCwgIkV4cGVjdCBubyBncmlkcyB0byBiZSBkaXNwbGF5
ZWQuIik7CisKKyAgICAgICAgICAgIC8vIE5vIGVycm9yIHNob3VsZCBvY2N1ciB3aGVuIGhpZGlu
ZyB0aGUgZ3JpZCBvdmVybGF5LgorICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIlJlcXVl
c3RpbmcgdG8gaGlkZSBhbGwgZ3JpZCBvdmVybGF5cyBhZ2FpbiwgZXhwZWN0aW5nIG5vbmUgdG8g
YmUgY2xlYXJlZC4gSGlkaW5nIGFsbCBncmlkcyBpcyBpZGVtcG90ZW50IGFuZCBzaG91bGQgbm90
IHRocm93IGFuIGVycm9yLiIpOworICAgICAgICAgICAgYXdhaXQgRE9NQWdlbnQuaGlkZUdyaWRP
dmVybGF5KCk7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdEVxdWFsKGF3YWl0IGdy
aWRPdmVybGF5Q291bnQoKSwgMCwgIkV4cGVjdCBubyBncmlkcyB0byBiZSBkaXNwbGF5ZWQuIik7
CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHN1aXRlLmFkZFRlc3RDYXNlKHsKKyAgICAgICAg
bmFtZTogIkdyaWRPdmVybGF5LkhpZGVCZWZvcmVTaG93U2hvdWxkRXJyb3IiLAorICAgICAgICBk
ZXNjcmlwdGlvbjogIlJldHVybiBhbiBlcnJvciB3aGVuIHJlcXVlc3RpbmcgdG8gaGlkZSBhIGdy
aWQgb3ZlcmxheSB3aGVuIG5vbmUgaXMgYWN0aXZlIGZvciB0aGUgbm9kZS4iLAorICAgICAgICBh
c3luYyB0ZXN0KHJlc29sdmUsIHJlamVjdCkgeworICAgICAgICAgICAgbGV0IGNvbnRhaW5lciA9
IGF3YWl0IGdldEdyaWRDb250YWluZXJOb2RlKCk7CisKKyAgICAgICAgICAgIEluc3BlY3RvclRl
c3QuZXhwZWN0RXF1YWwoYXdhaXQgZ3JpZE92ZXJsYXlDb3VudCgpLCAwLCAiRXhwZWN0IG5vIGdy
aWRzIHRvIGJlIGRpc3BsYXllZC4iKTsKKworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2co
IlJlcXVlc3RpbmcgdG8gaGlkZSBncmlkIG92ZXJsYXkgZm9yIC5ncmlkLWNvbnRhaW5lciIpOwor
ICAgICAgICAgICAgYXdhaXQgSW5zcGVjdG9yVGVzdC5leHBlY3RFeGNlcHRpb24oYXN5bmMgKCkg
PT4geworICAgICAgICAgICAgICAgIGF3YWl0IERPTUFnZW50LmhpZGVHcmlkT3ZlcmxheShjb250
YWluZXIuaWQpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3Qu
bG9nKCJSZXF1ZXN0aW5nIHRvIGhpZGUgYWxsIGdyaWQgb3ZlcmxheXMuIEhpZGluZyBhbGwgZ3Jp
ZHMgaXMgaWRlbXBvdGVudCBhbmQgc2hvdWxkIG5vdCB0aHJvdyBhbiBlcnJvci4iKTsKKyAgICAg
ICAgICAgIGF3YWl0IERPTUFnZW50LmhpZGVHcmlkT3ZlcmxheSgpOworICAgICAgICAgICAgSW5z
cGVjdG9yVGVzdC5leHBlY3RFcXVhbChhd2FpdCBncmlkT3ZlcmxheUNvdW50KCksIDAsICJFeHBl
Y3Qgbm8gZ3JpZHMgdG8gYmUgZGlzcGxheWVkLiIpOworICAgICAgICB9CisgICAgfSk7CisKKyAg
ICBzdWl0ZS5hZGRUZXN0Q2FzZSh7CisgICAgICAgIG5hbWU6ICJHcmlkT3ZlcmxheS5Gb3JOb25l
eGlzdGVudE5vZGVTaG91bGRFcnJvciIsCisgICAgICAgIGRlc2NyaXB0aW9uOiAiUmV0dXJuIGFu
IGVycm9yIHdoZW4gcmVxdWVzdGluZyB0byBzaG93IGEgZ3JpZCBvdmVybGF5IGZvciBhIG5vbmV4
aXN0ZW50IG5vZGUuIiwKKyAgICAgICAgYXN5bmMgdGVzdChyZXNvbHZlLCByZWplY3QpIHsKKyAg
ICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0RXF1YWwoYXdhaXQgZ3JpZE92ZXJsYXlDb3Vu
dCgpLCAwLCAiRXhwZWN0IG5vIGdyaWRzIHRvIGJlIGRpc3BsYXllZC4iKTsKKworICAgICAgICAg
ICAgSW5zcGVjdG9yVGVzdC5sb2coIlJlcXVlc3RpbmcgdG8gc2hvdyBncmlkIG92ZXJsYXkgZm9y
IGludmFsaWQgbm9kZUlkIC0xIik7CisgICAgICAgICAgICBhd2FpdCBJbnNwZWN0b3JUZXN0LmV4
cGVjdEV4Y2VwdGlvbihhc3luYyAoKSA9PiB7CisgICAgICAgICAgICAgICAgYXdhaXQgRE9NQWdl
bnQuc2hvd0dyaWRPdmVybGF5KC0xLCBXSS5Db2xvci5mcm9tU3RyaW5nKCJtYWdlbnRhIikudG9Q
cm90b2NvbCgpKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIEluc3BlY3RvclRlc3QuZXhw
ZWN0RXF1YWwoYXdhaXQgZ3JpZE92ZXJsYXlDb3VudCgpLCAwLCAiRXhwZWN0IG5vIGdyaWRzIHRv
IGJlIGRpc3BsYXllZC4iKTsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgc3VpdGUucnVuVGVz
dENhc2VzQW5kRmluaXNoKCk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0i
cnVuVGVzdCgpIj4KKyAgICA8c3R5bGU+CisgICAgICAgIGJvZHkgeworICAgICAgICAgICAgbWFy
Z2luOiAxMDBweDsKKyAgICAgICAgfQorICAgICAgICAuZ3JpZC1jb250YWluZXIgeworICAgICAg
ICAgICAgZGlzcGxheTogZ3JpZDsKKyAgICAgICAgICAgIGdyaWQtZ2FwOiAxMHB4OworICAgICAg
ICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxMDBweCAxMDBweCAxMDBweDsKKyAgICAgICAg
ICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CisgICAgICAgICAgICBjb2xvcjogIzU1NTsKKyAg
ICAgICAgfQorCisgICAgICAgIC5ncmlkLWNvbnRhaW5lciA+IC5ib3ggeworICAgICAgICAgICAg
YmFja2dyb3VuZC1jb2xvcjogIzU1NTsKKyAgICAgICAgICAgIGNvbG9yOiAjZmZmOworICAgICAg
ICAgICAgYm9yZGVyLXJhZGl1czogNXB4OworICAgICAgICAgICAgcGFkZGluZzogMjBweDsKKyAg
ICAgICAgICAgIGZvbnQtc2l6ZTogMTUwJTsKKyAgICAgICAgfQorICAgIDwvc3R5bGU+CisKKyAg
ICA8cD5UZXN0cyBmb3IgdGhlIERPTS5zaG93R3JpZE92ZXJsYXkgY29tbWFuZC48L3A+CisgICAg
PGRpdiBjbGFzcz0iZ3JpZC1jb250YWluZXIiIHN0eWxlPSJjb2xvcjogIzM2NiI+CisgICAgICAg
IDxkaXYgY2xhc3M9ImJveCBhIj5BPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImJveCBiIj5C
PC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImJveCBjIj5DPC9kaXY+CisgICAgICAgIDxkaXYg
Y2xhc3M9ImJveCBkIj5EPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImJveCBlIj5FPC9kaXY+
CisgICAgICAgIDxkaXYgY2xhc3M9ImJveCBmIj5GPC9kaXY+CisgICAgPC9kaXY+CisgICAgPGJy
IC8+CisgICAgPGRpdiBjbGFzcz0iZ3JpZC1jb250YWluZXIiIHN0eWxlPSJjb2xvcjogIzYzNiI+
CisgICAgICAgIDxkaXYgY2xhc3M9ImJveCBhIj5BPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9
ImJveCBiIj5CPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImJveCBjIj5DPC9kaXY+CisgICAg
ICAgIDxkaXYgY2xhc3M9ImJveCBkIj5EPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImJveCBl
Ij5FPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImJveCBmIj5GPC9kaXY+CisgICAgPC9kaXY+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvbW9k
ZWwvY29sb3ItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL21vZGVsL2NvbG9y
LWV4cGVjdGVkLnR4dAppbmRleCA5M2NmOTNhNjQ4ZjdkZDEyMzM0Yzk1YjA4YWM0ODBkNWFiYTFk
NjJkLi5kZWZjYTJkMjdmYWU5ODgwODc0MTdmMGFkZGI0YTA1YjYyMWUyNDVhIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvbW9kZWwvY29sb3ItZXhwZWN0ZWQudHh0CisrKyBiL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9tb2RlbC9jb2xvci1leHBlY3RlZC50eHQKQEAgLTU0MywzICs1
NDMsOSBAQCBQQVNTOiBTaG91bGQgY29udmVydCBbLTEsMCwwXSB0byBbMCwwLDBdLgogImNvbG9y
KGRpc3BsYXktcDMgMSAwIDApIiBpcyBvdXRzaWRlIHNSR0IuCiAiY29sb3IoZGlzcGxheS1wMyAw
LjkzIDAuMzUzIDAuMzUzKSIgaXMgb3V0c2lkZSBzUkdCLgogCistLSBSdW5uaW5nIHRlc3QgY2Fz
ZTogV0kuQ29sb3IudG9Qcm90b2NvbAorUEFTUzogU2hvdWxkIGNvbnZlcnQgcmdiYSgxMCwyMCwz
MCw0MCkgdG8geyJyIjoxMCwiZyI6MjAsImIiOjMwLCJhIjoxfS4KK1BBU1M6IFNob3VsZCBjb252
ZXJ0IHJnYigxMCAyMCAzMCAvIDQwJSkgdG8geyJyIjoxMCwiZyI6MjAsImIiOjMwLCJhIjowLjR9
LgorUEFTUzogU2hvdWxkIGNvbnZlcnQgI2EwQWEwQSB0byB7InIiOjE2MCwiZyI6MTcwLCJiIjox
MCwiYSI6MX0uCitQQVNTOiBTaG91bGQgY29udmVydCByZ2IoMTAlIDIwJSAzMCUgLyA0MCUpIHRv
IHsiciI6MjUuNSwiZyI6NTEsImIiOjc2LjUsImEiOjAuNH0uCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2luc3BlY3Rvci9tb2RlbC9jb2xvci5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L21vZGVsL2NvbG9yLmh0bWwKaW5kZXggMDQwZDJmNzRkMzE2ODZmNGFiNjNlNDMyMjM5N2UyZDI3
NjIyZTYzMi4uZDg1YmNhMDQzZGUwODUzMWU1NjhkNmJkMGFjMWMwZTc4ODkyZmViNSAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL21vZGVsL2NvbG9yLmh0bWwKKysrIGIvTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL21vZGVsL2NvbG9yLmh0bWwKQEAgLTY3Miw2ICs2NzIsMjUgQEAgZnVu
Y3Rpb24gdGVzdCgpCiAgICAgICAgIH0KICAgICB9KTsKIAorICAgIHN1aXRlLmFkZFRlc3RDYXNl
KHsKKyAgICAgICAgbmFtZTogIldJLkNvbG9yLnRvUHJvdG9jb2wiLAorICAgICAgICBkZXNjcmlw
dGlvbjogIlRlc3Qgc2VyaWFsaXphdGlvbiBvZiBXSS5Db2xvciBpbnRvIERPTS5SR0JBQ29sb3Iu
IiwKKyAgICAgICAgdGVzdCgpIHsKKyAgICAgICAgICAgIGZ1bmN0aW9uIHRlc3RJbnB1dChpbnB1
dCwgZXhwZWN0ZWQpIHsKKyAgICAgICAgICAgICAgICBsZXQgY29sb3IgPSBXSS5Db2xvci5mcm9t
U3RyaW5nKGlucHV0KTsKKyAgICAgICAgICAgICAgICBsZXQgYWN0dWFsID0gY29sb3IudG9Qcm90
b2NvbCgpOworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0U2hhbGxvd0VxdWFs
KGFjdHVhbCwgZXhwZWN0ZWQsIGBTaG91bGQgY29udmVydCAke2lucHV0fSB0byAke0pTT04uc3Ry
aW5naWZ5KGV4cGVjdGVkKX0uYCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRlc3RJ
bnB1dCgicmdiYSgxMCwyMCwzMCw0MCkiLCB7cjogMTAsIGc6IDIwLCBiOiAzMCwgYTogMX0pOwor
ICAgICAgICAgICAgdGVzdElucHV0KCJyZ2IoMTAgMjAgMzAgLyA0MCUpIiwge3I6IDEwLCBnOiAy
MCwgYjogMzAsIGE6IDAuNH0pOworICAgICAgICAgICAgdGVzdElucHV0KCIjYTBBYTBBIiwge3I6
IDE2MCwgZzogMTcwLCBiOiAxMCwgYTogMX0pOworICAgICAgICAgICAgdGVzdElucHV0KCJyZ2Io
MTAlIDIwJSAzMCUgLyA0MCUpIiwge3I6IDI1LjUsIGc6IDUxLCBiOiA3Ni41LCBhOiAwLjR9KTsK
KworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9KTsKKwogICAgIHN1
aXRlLnJ1blRlc3RDYXNlc0FuZEZpbmlzaCgpOwogfQogPC9zY3JpcHQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418839</attachid>
            <date>2021-01-31 19:48:00 -0800</date>
            <delta_ts>2021-02-02 00:17:02 -0800</delta_ts>
            <desc>Patch v1.1</desc>
            <filename>bug-221062-20210131194759.patch</filename>
            <type>text/plain</type>
            <size>49916</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyMTIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ODE4N2RiZTFiN2Y5ZGM1MjYzNGE0NmYxN2M2ZTMzYTZiMDJjZDMxLi42YzRhZjc0MmY4YjI1NGVh
NTI5Yzk5ZWU4MGUwZmNkNmFlN2M4YWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAyMS0wMS0zMCAgQkogQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KKworICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBpbXBsZW1lbnQgdGhlIGJhc2ljcyBmb3Igc2hvd2luZy9oaWRp
bmcgZ3JpZCBvdmVybGF5cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjIxMDYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkIG5ldyBjb21tYW5kcyB0byBzaG93IGFuZCBoaWRlIENTUyBncmlkIG92ZXJs
YXlzOgorCisgICAgICAgICAgICAtIERPTS5zaG93R3JpZE92ZXJsYXkKKyAgICAgICAgICAgIC0g
RE9NLmhpZGVHcmlkT3ZlcmxheQorCisgICAgICAgICogaW5zcGVjdG9yL3Byb3RvY29sL0RPTS5q
c29uOgorCiAyMDIxLTAxLTMwICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCwgZml4IGFmdGVyIHIyNzIwNzEKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiNGZi
Yzk5ZmUzMGNhZTM4Yzc2YzM5Njk5N2JjMDQyMGI3NzZkMmMwLi4yM2EwNmQzODJiZDEzMTRmNGYx
Nzg1OGU2MmYxZDMxNmE2ZjBlN2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTggQEAKKzIwMjEt
MDEtMzAgIEJKIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rv
cjogaW1wbGVtZW50IHRoZSBiYXNpY3MgZm9yIHNob3dpbmcvaGlkaW5nIGdyaWQgb3ZlcmxheXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTA2Mgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVu
dCBiYWNrZW5kIGNvbW1hbmRzIGZvciBzaG93aW5nIGFuZCBoaWRpbmcgQ1NTIGdyaWQgb3Zlcmxh
eXMuCisgICAgICAgIFRoaXMgcGF0Y2ggZHJhd3MgYSB2ZXJ5IHNpbXBsaXN0aWMgZ3JpZCBvdmVy
bGF5LiBTdXBwb3J0IGZvciB0aGUKKyAgICAgICAgdmFyaW91cyBncmlkIG92ZXJsYXkgb3B0aW9u
cyB3aWxsIGJlIGFkZGVkIGluIGxhdGVyIHBhdGNoZXMuCisKKyAgICAgICAgTmV3IHRlc3Q6IGlu
c3BlY3Rvci9kb20vc2hvd0dyaWRPdmVybGF5Lmh0bWwKKworICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JPdmVybGF5Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5Ojpn
cmlkT3ZlcmxheUNvdW50IGNvbnN0KToKKyAgICAgICAgQWRkZWQsIGZvciB0ZXN0aW5nIG9ubHku
CisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JPdmVybGF5OjpzaG91bGRTaG93T3ZlcmxheSBjb25zdCk6CisgICAgICAgIEhvb2sgdXAg
dGhlIHBhaW50aW5nIG9mIGFueSBhY3RpdmUgZ3JpZCBvdmVybGF5cy4KKworICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6c2V0R3JpZE92ZXJsYXlGb3JOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmNsZWFyR3JpZE92ZXJsYXlGb3JOb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmNsZWFyQWxsR3JpZE92ZXJsYXlzKToK
KyAgICAgICAgTWFpbnRhaW4gdGhlIGxpc3Qgb2YgYWN0aXZlIGdyaWQgb3ZlcmxheXMuIEEgbm9k
ZSBjYW4gb25seQorICAgICAgICBoYXZlIG9uZSBncmlkIG92ZXJsYXkgYXQgYSB0aW1lLgorCisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3Tm9kZUhpZ2hsaWdodCk6Cisg
ICAgICAgIEFkZCBhIG5vdGUgYWJvdXQgd2h5IGdyaWQgb3ZlcmxheXMgYXJlIG5vdCBjb25zaWRl
cmVkIHdoZW4KKyAgICAgICAgY2FsY3VsYXRpbmcgdGhlIHJ1bGVyIGV4Y2x1c2lvbiBhcmVhLgor
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3R3JpZE92ZXJsYXkpOiBB
ZGRlZC4KKyAgICAgICAgVGhpcyBkcmF3aW5nIGNvZGUgZXhpc3RzIHRvIGZsZXNoIG91dCB0aGUg
cmVzdCBvZiB0aGlzIHBhdGNoLAorICAgICAgICBhbmQgaXMgb2J2aW91c2x5IGluY29tcGxldGUu
CisKKyAgICAgICAgRHJhdyBncmlkIGxpbmVzIHRoYXQgZXh0ZW5kIHRvIHRoZSBlZGdlIG9mIHRo
ZSB2aWV3cG9ydCwKKyAgICAgICAgZXF1aXZhbGVudCB0byBgY29uZmlnLnNob3dFeHRlbmRlZEdy
aWRMaW5lcyA9IHRydWVgLgorCisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JE
T01BZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnNob3dHcmlkT3Zlcmxh
eSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6aGlkZUdyaWRPdmVybGF5
KToKKyAgICAgICAgVHJhbnNsYXRlIHByb3RvY29sIGNvbW1hbmRzIGludG8gSW5zcGVjdG9yT3Zl
cmxheSBtZXRob2QgY2FsbHMuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmdyaWRPdmVybGF5Q291bnQgY29u
c3QpOgorICAgICAgICBBZGRlZC4gVGhpcyBpcyB1c2VkIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9u
bHkuCisKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgorICAgICAgICAqIHRlc3Rpbmcv
SW50ZXJuYWxzLmlkbDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnRlcm5hbHM6Omluc3BlY3RvckdyaWRPdmVybGF5Q291bnQpOiBBZGRlZC4K
KwogMjAyMS0wMS0yOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAg
Q2hlY2sgYWN0aXZlRG9jdW1lbnRMb2FkZXIoKSBmb3IgbnVsbCBjb25zaXN0ZW50bHkgZXZlcnl3
aGVyZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKaW5kZXggNTYxN2ZjZTU1M2Y2NGVjNzI5YWJkMTUx
ZTYwYWRiM2YwYjcyNjhmMy4uNDRlOWJlZTk0ZTFhNjA3NTIwMTUzMzkzYzIwNmI3NGYzZDVmN2Q0
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTQgQEAKKzIwMjEtMDEtMzAg
IEJKIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogaW1w
bGVtZW50IHRoZSBiYXNpY3MgZm9yIHNob3dpbmcvaGlkaW5nIGdyaWQgb3ZlcmxheXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTA2MgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4cG9zZSBuZXcgRE9N
LnNob3dHcmlkT3ZlcmxheSBhbmQgRE9NLmhpZGVHcmlkT3ZlcmxheSBjb21tYW5kcworICAgICAg
ICB2aWEgV0kuRE9NTm9kZS4gQWRkIGluaXRpYWwgZW5naW5lZXJpbmcgVUkgdG8gdG9nZ2xlIGdy
aWQgb3ZlcmxheXMuCisKKyAgICAgICAgTmV3IG1ldGhvZHMgYXJlIGNvdmVyZWQgYnkgYSBuZXcg
dGVzdDoKKworICAgICAgICAgICAgaW5zcGVjdG9yL2RvbS9zaG93R3JpZE92ZXJsYXkuaHRtbAor
CisgICAgICAgIEFkZGl0aW9ucyB0byBXSS5ET01NYW5hZ2VyLnByb3RvdHlwZS5yZXF1ZXN0RG9j
dW1lbnQgYXJlIGNvdmVyZWQKKyAgICAgICAgYnkgZXhpc3RpbmcgdGVzdHMgKGNhbGxiYWNrIGNh
c2UpIGFuZCBhIG5ldyB0ZXN0IChwcm9taXNlIGNhc2UpLgorCisgICAgICAgIEFkZGl0aW9ucyB0
byBXSS5Db2xvciBhcmUgY292ZXJlZCBieSBhIG5ldyB0ZXN0IGNhc2UgaW46CisKKyAgICAgICAg
ICAgIGluc3BlY3Rvci9tb2RlbC9jb2xvci5odG1sCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNl
L0NvbnRyb2xsZXJzL0RPTU1hbmFnZXIuanM6CisgICAgICAgIChXSS5ET01NYW5hZ2VyLnByb3Rv
dHlwZS5yZXF1ZXN0RG9jdW1lbnQpOgorICAgICAgICAoV0kuRE9NTWFuYWdlci5wcm90b3R5cGUu
X3JlcXVlc3REb2N1bWVudFdpdGhQcm9taXNlKToKKyAgICAgICAgRHJpdmUtYnk6IHVwZ3JhZGUg
cmVxdWVzdERvY3VtZW50KCkgdG8gcmV0dXJuIGEgcHJvbWlzZSBpZgorICAgICAgICBubyBjYWxs
YmFjayBhcmd1bWVudCB3YXMgcGFzYXNlZC4gVGhpcyBpcyB1c2VkIGJ5IGEgbmV3IHRlc3QuCisK
KyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9Db2xvci5qczoKKyAgICAgICAgKFdJLkNv
bG9yLnByb3RvdHlwZS50b1Byb3RvY29sKTogQWRkZWQuIFRoZSBwcm90b2NvbCBvYmplY3QgaXMK
KyAgICAgICAgRE9NLlJHQkFDb2xvciwgd2hpY2ggaXMgdGhlIHNhbWUgdGhpbmcgYXMgV0kuQ29s
b3IuRm9ybWF0LlJHQkEuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9ET01Ob2Rl
LmpzOgorICAgICAgICAoV0kuRE9NTm9kZS5wcm90b3R5cGUuc2hvd0dyaWRPdmVybGF5KToKKyAg
ICAgICAgKFdJLkRPTU5vZGUucHJvdG90eXBlLmhpZGVHcmlkT3ZlcmxheSk6CisgICAgICAgIEFk
ZGVkLiBUaGVzZSBhcmUgdGhlIG1ldGhvZHMgdGhhdCB0aGUgcmVzdCBvZiBXZWJJbnNwZWN0b3JV
SSB1c2VzCisgICAgICAgIHRvIGludGVyYWN0IHdpdGggZ3JpZCBvdmVybGF5cyBmb3IgYSBwYXJ0
aWN1bGFyIG5vZGUuIE5vdGUgdGhhdAorICAgICAgICB0aGVzZSBtZXRob2RzIHJldHVybiBlaXRo
ZXIgYW4gdW5zZXR0bGVkIHByb21pc2UgKGZyb20gdGhlIGFnZW50IGNhbGwpCisgICAgICAgIG9y
IGEgcmVqZWN0ZWQgcHJvbWlzZSAoaW4gdGhlIGNhc2UgdGhhdCB0aGUgbm9kZSBpcyBkZXN0cm95
ZWQpLgorICAgICAgICBUaGlzIGFsbG93cyB0ZXN0IGNhc2VzIHRvIGBhd2FpdGAgYmVmb3JlIGNo
ZWNraW5nIHRoZSBncmlkIG92ZXJsYXkgY291bnQuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNl
L1Rlc3QvVGVzdEhhcm5lc3MuanM6CisgICAgICAgIChUZXN0SGFybmVzcy5wcm90b3R5cGUuZXhw
ZWN0RXhjZXB0aW9uKTogSW1wcm92ZSBsb2dnaW5nIG91dHB1dAorICAgICAgICB3aGVuIEluc3Bl
Y3RvclRlc3QuZXhwZWN0RXhjZXB0aW9uIGRvZXMgbm90IGNhdGNoIGFuIGV4Y2VwdGlvbi4KKwor
ICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvQ29udGV4dE1lbnVVdGlsaXRpZXMuanM6Cisg
ICAgICAgIEFkZCBzb21lIGVuZ2luZWVyaW5nLW9ubHkgY29udGV4dCBtZW51IGl0ZW1zIGZvciBz
aG93aW5nL2hpZGluZworICAgICAgICBncmlkIG92ZXJsYXlzIHRvIERPTVRyZWVFbGVtZW50cyBp
biB0aGUgRWxlbWVudHMgVGFiLgorCisgICAgICAgIFRoZXNlIGFyZSBpbiBwbGFjZSBmb3IgZGV2
ZWxvcG1lbnQgcHVycG9zZXMgYW5kIHNob3VsZCBldmVudHVhbGx5CisgICAgICAgIGJlIHJlbW92
ZWQgd2hlbiBubyBsb25nZXIgbmVlZGVkLgorCiAyMDIxLTAxLTI3ICBSYXp2YW4gQ2FsaW1hbiAg
PHJjYWxpbWFuQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBSRUdSRVNTSU9O
KHIyNjkxNjYpOiBub3QgZW5vdWdoIHNwYWNlIGFyb3VuZCB1cC9kb3duIGFycm93cyBpbiBleGVj
dXRpb24gY29udGV4dCBwaWNrZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvcHJvdG9jb2wvRE9NLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3Byb3RvY29sL0RPTS5qc29uCmluZGV4IDk5OGJjNGFmZTY4ZWM3MDUwMmEwMDliN2JmNWVk
MWRlOTc1OGFiMzEuLmIyNjNmOTIyZGRlMTA5NWZkMmYzMGQ3M2MzYzI0Y2M5OGY0ZDg4NDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvRE9NLmpz
b24KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9ET00uanNv
bgpAQCAtNDkzLDYgKzQ5MywyOCBAQAogICAgICAgICAgICAgXSwKICAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJIaWdobGlnaHRzIG93bmVyIGVsZW1lbnQgb2YgdGhlIGZyYW1lIHdpdGggZ2l2
ZW4gaWQuIgogICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJzaG93
R3JpZE92ZXJsYXkiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlNob3dzIGEgZ3JpZCBv
dmVybGF5IGZvciBhIG5vZGUgdGhhdCBiZWdpbnMgYSAnZ3JpZCcgbGF5b3V0IGNvbnRleHQuIFRo
ZSBjb21tYW5kIGhhcyBubyBlZmZlY3QgaWYgPGNvZGU+bm9kZUlkPC9jb2RlPiBpcyBpbnZhbGlk
IG9yIHRoZSBhc3NvY2lhdGVkIG5vZGUgZG9lcyBub3QgYmVnaW4gYSAnZ3JpZCcgbGF5b3V0IGNv
bnRleHQuIEEgbm9kZSBjYW4gb25seSBoYXZlIG9uZSBncmlkIG92ZXJsYXkgYXQgYSB0aW1lOyBz
dWJzZXF1ZW50IGNhbGxzIHdpdGggdGhlIHNhbWUgPGNvZGU+bm9kZUlkPC9jb2RlPiB3aWxsIG92
ZXJyaWRlIGVhcmxpZXIgY2FsbHMuIiwKKyAgICAgICAgICAgICJ0YXJnZXRUeXBlcyI6IFsicGFn
ZSJdLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJub2RlSWQiLCAiJHJlZiI6ICJOb2RlSWQiLCAiZGVzY3JpcHRpb24iOiAiVGhlIG5vZGUg
Zm9yIHdoaWNoIGEgZ3JpZCBvdmVybGF5IHNob3VsZCBiZSBzaG93bi4iIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJncmlkQ29sb3IiLCAiJHJlZiI6ICJSR0JBQ29sb3IiLCAiZGVzY3Jp
cHRpb24iOiAiVGhlIHByaW1hcnkgY29sb3IgdG8gdXNlIGZvciB0aGUgZ3JpZCBvdmVybGF5LiIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNob3dMaW5lTmFtZXMiLCAidHlwZSI6ICJi
b29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlNob3cgbGFiZWxzIGZv
ciBncmlkIGxpbmUgbmFtZXMuIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIGlz
IGZhbHNlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNob3dMaW5lTnVtYmVycyIs
ICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiU2hv
dyBsYWJlbHMgZm9yIGdyaWQgbGluZSBudW1iZXJzLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZGVm
YXVsdCB2YWx1ZSBpcyBmYWxzZS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzaG93
RXh0ZW5kZWRHcmlkbGluZXMiLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwg
ImRlc2NyaXB0aW9uIjogIlNob3cgZ3JpZCBsaW5lcyB0aGF0IGV4dGVuZCBiZXlvbmQgdGhlIGJv
dW5kcyBvZiB0aGUgZ3JpZC4gSWYgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdmFsdWUgaXMg
ZmFsc2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2hvd1RyYWNrU2l6ZXMiLCAi
dHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlNob3cg
Z3JpZCB0cmFjayBzaXplIGluZm9ybWF0aW9uLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVs
dCB2YWx1ZSBpcyBmYWxzZS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzaG93QXJl
YU5hbWVzIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlv
biI6ICJTaG93IGxhYmVscyBmb3IgZ3JpZCBhcmVhIG5hbWVzLiBJZiBub3Qgc3BlY2lmaWVkLCB0
aGUgZGVmYXVsdCB2YWx1ZSBpcyBmYWxzZS4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwK
KyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiaGlkZUdyaWRPdmVybGF5IiwKKyAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJIaWRlcyBhIGdyaWQgb3ZlcmxheSBmb3IgYSBub2RlIHRo
YXQgYmVnaW5zIGEgJ2dyaWQnIGxheW91dCBjb250ZXh0LiBUaGUgY29tbWFuZCBoYXMgbm8gZWZm
ZWN0IGlmIDxjb2RlPm5vZGVJZDwvY29kZT4gaXMgc3BlY2lmaWVkIGFuZCBpbnZhbGlkLCBvciBp
ZiB0aGVyZSBpcyBub3QgY3VycmVudGx5IGFuIG92ZXJsYXkgc2V0IGZvciB0aGUgPGNvZGU+bm9k
ZUlkPC9jb2RlPi4iLAorICAgICAgICAgICAgInRhcmdldFR5cGVzIjogWyJwYWdlIl0sCisgICAg
ICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vZGVJ
ZCIsICIkcmVmIjogIk5vZGVJZCIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJU
aGUgbm9kZSBmb3Igd2hpY2ggYSBncmlkIG92ZXJsYXkgc2hvdWxkIGJlIGhpZGRlbi4gSWYgYSA8
Y29kZT5ub2RlSWQ8L2NvZGU+IGlzIG5vdCBzcGVjaWZpZWQsIGFsbCBncmlkIG92ZXJsYXlzIHdp
bGwgYmUgaGlkZGVuLiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAogICAgICAgICB7CiAg
ICAgICAgICAgICAibmFtZSI6ICJwdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQiLAogICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogIlJlcXVlc3RzIHRoYXQgdGhlIG5vZGUgaXMgc2VudCB0byB0aGUg
Y2FsbGVyIGdpdmVuIGl0cyBwYXRoLiIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggNzM0ZThiNzg1NGZkMDMxODczNDI4YWNlODg1
MDQ5ZGRlNjYxNzMyYi4uODcyOGZiNzJmYTA0Mjc5NmRjOGJkZjVjOTFlODI0MmJkMDc1NWY2MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNw
cApAQCAtMzYxLDYgKzM2MSwxMSBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmdldEhpZ2hs
aWdodChJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQmIGhpZ2hsaWdodCwgSQogICAgIG1fb3Zl
cmxheS0+Z2V0SGlnaGxpZ2h0KGhpZ2hsaWdodCwgY29vcmRpbmF0ZVN5c3RlbSk7CiB9CiAKK3Vu
c2lnbmVkIEluc3BlY3RvckNvbnRyb2xsZXI6OmdyaWRPdmVybGF5Q291bnQoKSBjb25zdAorewor
ICAgIHJldHVybiBtX292ZXJsYXktPmdyaWRPdmVybGF5Q291bnQoKTsKK30KKwogYm9vbCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpzaG91bGRTaG93T3ZlcmxheSgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1fb3ZlcmxheS0+c2hvdWxkU2hvd092ZXJsYXkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IDFjYmQ0NTJmZmYzZmMzODYwNTBkYjhh
MGVhZDMzYjUwMTE2ZDgxZjUuLjc4NGJmNDgyZmQ2OGRhNjhlMWYzOGZkNWNkNmJjZWRjODk3MWRm
ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9s
bGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
aApAQCAtMTAxLDkgKzEwMSwxMSBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3
aWxsQ29tcG9zaXRlKEZyYW1lJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkaWRDb21wb3Np
dGUoRnJhbWUmKTsKIAorICAgIC8vIFRlc3Rpbmcgc3VwcG9ydC4KICAgICBib29sIGlzVW5kZXJU
ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9pc1VuZGVyVGVzdDsgfQogICAgIHZvaWQgc2V0SXNVbmRl
clRlc3QoYm9vbCBpc1VuZGVyVGVzdCkgeyBtX2lzVW5kZXJUZXN0ID0gaXNVbmRlclRlc3Q7IH0K
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQoY29uc3Qg
U3RyaW5nJiBzY3JpcHQpOworICAgIFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIGdyaWRPdmVybGF5
Q291bnQoKSBjb25zdDsKIAogICAgIEluc3BlY3RvckNsaWVudCogaW5zcGVjdG9yQ2xpZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9pbnNwZWN0b3JDbGllbnQ7IH0KICAgICBJbnNwZWN0b3JGcm9udGVu
ZENsaWVudCogaW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2luc3Bl
Y3RvckZyb250ZW5kQ2xpZW50OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yT3ZlcmxheS5jcHAKaW5kZXggZDdhNTdhN2YxNTFhMDlkNDk5NzIyMDllZmIxOWJkZTE5Njky
Yzg5NC4uZTJjMmI3MzAyOWU4MGUzZTQ3YTlmZDYyZDcxN2MwOTYwOTkzM2IyZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcApAQCAtMSw2ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDYgKzQzLDcgQEAK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyaWRQb3NpdGlvbnNSZXNvbHZlci5oIgogI2lu
Y2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVk
ZSAiSW50UmVjdC5oIgpAQCAtNTMsNiArNTQsNyBAQAogI2luY2x1ZGUgIlBzZXVkb0VsZW1lbnQu
aCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJCb3hNb2RlbE9iamVj
dC5oIgorI2luY2x1ZGUgIlJlbmRlckdyaWQuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIK
ICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpAQCAtNDEy
LDYgKzQxNCw5IEBAIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KQogICAgIGlmICghbV9wYWludFJlY3RzLmlzRW1wdHkoKSkKICAgICAgICAgZHJh
d1BhaW50UmVjdHMoY29udGV4dCwgbV9wYWludFJlY3RzKTsKIAorICAgIGZvciAoY29uc3QgR3Jp
ZE92ZXJsYXkmIGdyaWRPdmVybGF5IDogbV9hY3RpdmVHcmlkT3ZlcmxheXMpCisgICAgICAgIGRy
YXdHcmlkT3ZlcmxheShjb250ZXh0LCBncmlkT3ZlcmxheSk7CisgICAgCiAgICAgaWYgKG1fc2hv
d1J1bGVycyB8fCBtX3Nob3dSdWxlcnNEdXJpbmdFbGVtZW50U2VsZWN0aW9uKQogICAgICAgICBk
cmF3UnVsZXJzKGNvbnRleHQsIHJ1bGVyRXhjbHVzaW9uKTsKIH0KQEAgLTQ5NSw3ICs1MDAsNyBA
QCBib29sIEluc3BlY3Rvck92ZXJsYXk6OnNob3VsZFNob3dPdmVybGF5KCkgY29uc3QKIHsKICAg
ICAvLyBEb24ndCBzaG93IHRoZSBvdmVybGF5IHdoZW4gbV9zaG93UnVsZXJzRHVyaW5nRWxlbWVu
dFNlbGVjdGlvbiBpcyB0cnVlLCBhcyBpdCdzIG9ubHkgc3VwcG9zZWQKICAgICAvLyB0byBoYXZl
IGFuIGVmZmVjdCB3aGVuIGVsZW1lbnQgc2VsZWN0aW9uIGlzIGFjdGl2ZSAoZS5nLiBhIG5vZGUg
aXMgaG92ZXJlZCkuCi0gICAgcmV0dXJuIG1faGlnaGxpZ2h0Tm9kZSB8fCBtX2hpZ2hsaWdodE5v
ZGVMaXN0IHx8IG1faGlnaGxpZ2h0UXVhZCB8fCBtX2luZGljYXRpbmcgfHwgbV9zaG93UGFpbnRS
ZWN0cyB8fCBtX3Nob3dSdWxlcnM7CisgICAgcmV0dXJuIG1faGlnaGxpZ2h0Tm9kZSB8fCBtX2hp
Z2hsaWdodE5vZGVMaXN0IHx8IG1faGlnaGxpZ2h0UXVhZCB8fCBtX2luZGljYXRpbmcgfHwgbV9z
aG93UGFpbnRSZWN0cyB8fCBtX3Nob3dSdWxlcnMgfHwgbV9hY3RpdmVHcmlkT3ZlcmxheXMuc2l6
ZSgpOwogfQogCiB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnVwZGF0ZSgpCkBAIC01NTUsNiArNTYw
LDQ2IEBAIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6c2V0U2hvd1J1bGVycyhib29sIHNob3dSdWxl
cnMpCiAgICAgdXBkYXRlKCk7CiB9CiAKK0Vycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yT3Zl
cmxheTo6c2V0R3JpZE92ZXJsYXlGb3JOb2RlKE5vZGUmIG5vZGUsIGNvbnN0IEdyaWRPdmVybGF5
OjpDb25maWcmIGdyaWRPdmVybGF5Q29uZmlnKQoreworICAgIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIgPSBub2RlLnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgZmluZCByZW5kZXJlciBmb3Igbm9kZS4iKTsKKyAg
ICBpZiAoIWlzPFJlbmRlckdyaWQ+KHJlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKCJOb2RlIGRvZXMgbm90IGluaXRpYXRlIGEgZ3JpZCBjb250ZXh0Iik7CisKKyAgICBt
X2FjdGl2ZUdyaWRPdmVybGF5cy5yZW1vdmVBbGxNYXRjaGluZyhbJl0gKGNvbnN0IEdyaWRPdmVy
bGF5JiBncmlkT3ZlcmxheSkgeworICAgICAgICByZXR1cm4gZ3JpZE92ZXJsYXkuZ3JpZE5vZGUu
Z2V0KCkgPT0gJm5vZGU7CisgICAgfSk7CisKKyAgICBtX2FjdGl2ZUdyaWRPdmVybGF5cy5hcHBl
bmQoeyBtYWtlV2Vha1B0cihub2RlKSwgZ3JpZE92ZXJsYXlDb25maWcgfSk7CisKKyAgICB1cGRh
dGUoKTsKKworICAgIHJldHVybiB7IH07Cit9CisKK0Vycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVj
dG9yT3ZlcmxheTo6Y2xlYXJHcmlkT3ZlcmxheUZvck5vZGUoTm9kZSYgbm9kZSkKK3sKKyAgICBi
b29sIHJlbW92ZWQgPSBtX2FjdGl2ZUdyaWRPdmVybGF5cy5yZW1vdmVBbGxNYXRjaGluZyhbJl0g
KGNvbnN0IEdyaWRPdmVybGF5JiBncmlkT3ZlcmxheSkgeworICAgICAgICByZXR1cm4gZ3JpZE92
ZXJsYXkuZ3JpZE5vZGUuZ2V0KCkgPT0gJm5vZGU7CisgICAgfSk7CisKKyAgICBpZiAoIXJlbW92
ZWQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTm8gZ3JpZCBvdmVybGF5IGV4aXN0
cyBmb3IgdGhlIG5vZGUsIHNvIGNhbm5vdCBjbGVhci4iKTsKKworICAgIHVwZGF0ZSgpOworCisg
ICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpjbGVhckFsbEdyaWRP
dmVybGF5cygpCit7CisgICAgbV9hY3RpdmVHcmlkT3ZlcmxheXMuY2xlYXIoKTsKKworICAgIHVw
ZGF0ZSgpOworfQorCiB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OnVwZGF0ZVBhaW50UmVjdHNUaW1l
ckZpcmVkKCkKIHsKICAgICBNb25vdG9uaWNUaW1lIG5vdyA9IE1vbm90b25pY1RpbWU6Om5vdygp
OwpAQCAtNTg3LDYgKzYzMiw5IEBAIEluc3BlY3Rvck92ZXJsYXk6OlJ1bGVyRXhjbHVzaW9uIElu
c3BlY3Rvck92ZXJsYXk6OmRyYXdOb2RlSGlnaGxpZ2h0KEdyYXBoaWNzQ29uCiAgICAgaWYgKG1f
bm9kZUhpZ2hsaWdodENvbmZpZy5zaG93SW5mbykKICAgICAgICAgcnVsZXJFeGNsdXNpb24udGl0
bGVQYXRoID0gZHJhd0VsZW1lbnRUaXRsZShjb250ZXh0LCBub2RlLCBydWxlckV4Y2x1c2lvbi5i
b3VuZHMpOwogCisgICAgLy8gTm90ZTogc2luY2UgZ3JpZCBvdmVybGF5cyBtYXkgY292ZXIgdGhl
IGVudGlyZSB2aWV3cG9ydCB3aXRoIGxpdHRsZSBsaW5lcywgZ3JpZCBvdmVybGF5IGJvdW5kcwor
ICAgIC8vIGFyZSBub3QgY29uc2lkZXJlZCBhcyBwYXJ0IG9mIHRoZSBjb21iaW5lZCBib3VuZHMg
dXNlZCBhcyB0aGUgcnVsZXIgZXhjbHVzaW9uIGFyZWEuCisgICAgCiAgICAgcmV0dXJuIHJ1bGVy
RXhjbHVzaW9uOwogfQogCkBAIC0xMDkyLDQgKzExNDAsNzkgQEAgUGF0aCBJbnNwZWN0b3JPdmVy
bGF5OjpkcmF3RWxlbWVudFRpdGxlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgTm9kZSYgbm9k
ZSwgY28KICAgICByZXR1cm4gcGF0aDsKIH0KIAordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3
R3JpZE92ZXJsYXkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBHcmlkT3ZlcmxheSYg
Z3JpZE92ZXJsYXkpCit7CisgICAgLy8gSWYgdGhlIG5vZGUgV2Vha1B0ciBoYXMgYmVlbiBjbGVh
cmVkLCB0aGVuIHRoZSBub2RlIGlzIGdvbmUgYW5kIHRoZXJlJ3Mgbm90aGluZyB0byBkcmF3Lgor
ICAgIGlmICghZ3JpZE92ZXJsYXkuZ3JpZE5vZGUpIHsKKyAgICAgICAgbV9hY3RpdmVHcmlkT3Zl
cmxheXMucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdIChjb25zdCBHcmlkT3ZlcmxheSYgZ3JpZE92ZXJs
YXkpIHsKKyAgICAgICAgICAgIHJldHVybiBncmlkT3ZlcmxheS5ncmlkTm9kZS5nZXQoKSA9PSBn
cmlkT3ZlcmxheS5ncmlkTm9kZTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgLy8gQWx3YXlzIHJlLWNoZWNrIGJlY2F1c2UgdGhlIG5vZGUncyByZW5kZXJl
ciBtYXkgaGF2ZSBjaGFuZ2VkIGFmdGVyIGl0cyBncmlkIG92ZXJsYXkgd2FzIGFkZGVkLgorICAg
IE5vZGUqIG5vZGUgPSBncmlkT3ZlcmxheS5ncmlkTm9kZS5nZXQoKTsKKyAgICBhdXRvIHJlbmRl
cmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIWlzPFJlbmRlckdyaWQ+KHJlbmRlcmVy
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byogcmVuZGVyR3JpZCA9IGRvd25jYXN0PFJl
bmRlckdyaWQ+KHJlbmRlcmVyKTsKKyAgICBMYXlvdXRSZWN0IHBhZGRpbmdCb3ggPSByZW5kZXJH
cmlkLT5jbGllbnRCb3hSZWN0KCk7CisgICAgTGF5b3V0UmVjdCBjb250ZW50Qm94ID0gTGF5b3V0
UmVjdChwYWRkaW5nQm94LngoKSArIHJlbmRlckdyaWQtPnBhZGRpbmdMZWZ0KCksIHBhZGRpbmdC
b3gueSgpICsgcmVuZGVyR3JpZC0+cGFkZGluZ1RvcCgpLAorICAgICAgICBwYWRkaW5nQm94Lndp
ZHRoKCkgLSByZW5kZXJHcmlkLT5wYWRkaW5nTGVmdCgpIC0gcmVuZGVyR3JpZC0+cGFkZGluZ1Jp
Z2h0KCksIHBhZGRpbmdCb3guaGVpZ2h0KCkgLSByZW5kZXJHcmlkLT5wYWRkaW5nVG9wKCkgLSBy
ZW5kZXJHcmlkLT5wYWRkaW5nQm90dG9tKCkpOworICAgIEZsb2F0UXVhZCBhYnNDb250ZW50UXVh
ZCA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChjb250ZW50Qm94KSk7
CisgICAgRmxvYXRSZWN0IGdyaWRCb3VuZGluZ0JveCA9IGFic0NvbnRlbnRRdWFkLmJvdW5kaW5n
Qm94KCk7CisgICAgRnJhbWVWaWV3KiBwYWdlVmlldyA9IG1fcGFnZS5tYWluRnJhbWUoKS52aWV3
KCk7CisgICAgRmxvYXRTaXplIGNvbnRlbnRJbnNldCgwLCBwYWdlVmlldy0+dG9wQ29udGVudElu
c2V0KFNjcm9sbFZpZXc6OlRvcENvbnRlbnRJbnNldFR5cGU6OldlYkNvcmVPclBsYXRmb3JtQ29u
dGVudEluc2V0KSk7CisgICAgRmxvYXRTaXplIHZpZXdwb3J0U2l6ZSA9IHBhZ2VWaWV3LT5zaXpl
Rm9yVmlzaWJsZUNvbnRlbnQoKTsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc2F2
ZXIoY29udGV4dCk7CisKKyAgICAvLyBEcmF3aW5nIGNvZGUgaXMgcmVsYXRpdmUgdG8gdGhlIHZp
c2libGUgdmlld3BvcnQgYXJlYS4KKyAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCBjb250ZW50SW5z
ZXQuaGVpZ2h0KCkpOworICAgIAorICAgIC8vIEZJWE1FOiBpZiBzaG93RXh0ZW5kZWRHcmlkbGlu
ZXMgaXMgZmFsc2UsIHNldCB0aGUgY2xpcCBwYXRoIHRvIHRoZSBncmlkQm91bmRpbmdCb3ggKG1h
eWJlIGluZmxhdGVkPykKKworICAgIC8vIERyYXcgY29sdW1ucyBhbmQgcm93cy4KKyAgICBjb250
ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxKTsKKyAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKGdy
aWRPdmVybGF5LmNvbmZpZy5ncmlkQ29sb3IpOworCisgICAgYXV0byBjb2x1bW5Qb3NpdGlvbnMg
PSByZW5kZXJHcmlkLT5jb2x1bW5Qb3NpdGlvbnMoKTsKKyAgICBhdXRvIGNvbHVtbldpZHRocyA9
IHJlbmRlckdyaWQtPnRyYWNrU2l6ZXNGb3JDb21wdXRlZFN0eWxlKEdyaWRUcmFja1NpemluZ0Rp
cmVjdGlvbjo6Rm9yQ29sdW1ucyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbHVt
blBvc2l0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICAvLyBDb2x1bW4gcG9zaXRpb25zIGFy
ZSAoYXBwYXJlbnRseSkgcmVsYXRpdmUgdG8gdGhlIGVsZW1lbnQncyBjb250ZW50IGFyZWEuCisg
ICAgICAgIGF1dG8gcG9zaXRpb24gPSBjb2x1bW5Qb3NpdGlvbnNbaV0gKyBncmlkQm91bmRpbmdC
b3gueCgpOworCisgICAgICAgIFBhdGggY29sdW1uUGF0aHM7CisgICAgICAgIGNvbHVtblBhdGhz
Lm1vdmVUbyh7IHBvc2l0aW9uLCAwIH0pOworICAgICAgICBjb2x1bW5QYXRocy5hZGRMaW5lVG8o
eyBwb3NpdGlvbiwgdmlld3BvcnRTaXplLmhlaWdodCgpIH0pOworCisgICAgICAgIGlmIChpIDwg
Y29sdW1uV2lkdGhzLnNpemUoKSkgeworICAgICAgICAgICAgYXV0byB3aWR0aCA9IGNvbHVtbldp
ZHRoc1tpXTsKKyAgICAgICAgICAgIGNvbHVtblBhdGhzLm1vdmVUbyh7IHBvc2l0aW9uICsgd2lk
dGgsIDAgfSk7CisgICAgICAgICAgICBjb2x1bW5QYXRocy5hZGRMaW5lVG8oeyBwb3NpdGlvbiAr
IHdpZHRoLCB2aWV3cG9ydFNpemUuaGVpZ2h0KCkgfSk7CisgICAgICAgIH0KKworICAgICAgICBj
b250ZXh0LnN0cm9rZVBhdGgoY29sdW1uUGF0aHMpOworICAgIH0KKworICAgIGF1dG8gcm93UG9z
aXRpb25zID0gcmVuZGVyR3JpZC0+cm93UG9zaXRpb25zKCk7CisgICAgYXV0byByb3dIZWlnaHRz
ID0gcmVuZGVyR3JpZC0+dHJhY2tTaXplc0ZvckNvbXB1dGVkU3R5bGUoR3JpZFRyYWNrU2l6aW5n
RGlyZWN0aW9uOjpGb3JSb3dzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcm93UG9z
aXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8gcG9zaXRpb24gPSByb3dQb3NpdGlv
bnNbaV0gKyBncmlkQm91bmRpbmdCb3gueSgpOworCisgICAgICAgIFBhdGggcm93UGF0aHM7Cisg
ICAgICAgIHJvd1BhdGhzLm1vdmVUbyh7IDAsIHBvc2l0aW9uIH0pOworICAgICAgICByb3dQYXRo
cy5hZGRMaW5lVG8oeyB2aWV3cG9ydFNpemUud2lkdGgoKSwgcG9zaXRpb24gfSk7CisKKyAgICAg
ICAgaWYgKGkgPCByb3dIZWlnaHRzLnNpemUoKSkgeworICAgICAgICAgICAgYXV0byBoZWlnaHQg
PSByb3dIZWlnaHRzW2ldOworICAgICAgICAgICAgcm93UGF0aHMubW92ZVRvKHsgMCwgcG9zaXRp
b24gKyBoZWlnaHQgfSk7CisgICAgICAgICAgICByb3dQYXRocy5hZGRMaW5lVG8oeyB2aWV3cG9y
dFNpemUud2lkdGgoKSwgcG9zaXRpb24gKyBoZWlnaHQgfSk7CisgICAgICAgIH0KKworICAgICAg
ICBjb250ZXh0LnN0cm9rZVBhdGgocm93UGF0aHMpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ck92ZXJsYXkuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmgK
aW5kZXggMjQyMjAzNDcyNDBiYzA2ODJhNzVkNjJlMGIxNTBmNTVhNDc3M2RkNS4uNjUzMjM1YjNl
MWQ5ZGU0MDRhNjI1YmU3NmRiMGYwNTA5MDAzZjQyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oCkBAIC00MSw2ICs0MSwxMyBAQAogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAorbmFtZXNwYWNl
IEluc3BlY3RvciB7Cit1c2luZyBFcnJvclN0cmluZyA9IFN0cmluZzsKKwordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+Cit1c2luZyBFcnJvclN0cmluZ09yID0gRXhwZWN0ZWQ8VCwgRXJyb3JTdHJpbmc+
OworfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKQEAg
LTk4LDYgKzEwNSwyNCBAQCBwdWJsaWM6CiAgICAgICAgIHVzaW5nIEJvdW5kcyA9IEZsb2F0UmVj
dDsKICAgICB9OwogCisgICAgc3RydWN0IEdyaWRPdmVybGF5IHsKKyAgICAgICAgV1RGX01BS0Vf
U1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworCisgICAgICAgIHN0cnVjdCBDb25maWcgeworICAgICAg
ICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworCisgICAgICAgICAgICBDb2xv
ciBncmlkQ29sb3I7CisgICAgICAgICAgICBib29sIHNob3dMaW5lTmFtZXM7CisgICAgICAgICAg
ICBib29sIHNob3dMaW5lTnVtYmVyczsKKyAgICAgICAgICAgIGJvb2wgc2hvd0V4dGVuZGVkR3Jp
ZGxpbmVzOworICAgICAgICAgICAgYm9vbCBzaG93VHJhY2tTaXplczsKKyAgICAgICAgICAgIGJv
b2wgc2hvd0FyZWFOYW1lczsKKyAgICAgICAgfTsKKworICAgICAgICBXZWFrUHRyPE5vZGU+IGdy
aWROb2RlOworICAgICAgICBDb25maWcgY29uZmlnOworICAgIH07CisKICAgICBlbnVtIGNsYXNz
IENvb3JkaW5hdGVTeXN0ZW0gewogICAgICAgICBWaWV3LCAvLyBBZGp1c3RzIGZvciB0aGUgbWFp
biBmcmFtZSdzIHNjcm9sbCBvZmZzZXQuCiAgICAgICAgIERvY3VtZW50LCAvLyBEb2VzIG5vdCBh
ZGp1c3QgZm9yIHRoZSBtYWluIGZyYW1lJ3Mgc2Nyb2xsIG9mZnNldC4KQEAgLTEyMCwxMSArMTQ1
LDE4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFNob3dSdWxlcnNEdXJpbmdFbGVtZW50U2VsZWN0
aW9uKGJvb2wgZW5hYmxlZCkgeyBtX3Nob3dSdWxlcnNEdXJpbmdFbGVtZW50U2VsZWN0aW9uID0g
ZW5hYmxlZDsgfQogCiAgICAgTm9kZSogaGlnaGxpZ2h0ZWROb2RlKCkgY29uc3Q7CisgICAgdW5z
aWduZWQgZ3JpZE92ZXJsYXlDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlR3JpZE92ZXJs
YXlzLnNpemUoKTsgfQogCiAgICAgdm9pZCBkaWRTZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5h
YmxlZCk7CiAKICAgICB2b2lkIHNldEluZGljYXRpbmcoYm9vbCBpbmRpY2F0aW5nKTsKIAorICAg
IC8vIE11bHRpcGxlIGdyaWQgb3ZlcmxheXMgY2FuIGJlIGFjdGl2ZSBhdCB0aGUgc2FtZSB0aW1l
LiBUaGVzZSBtZXRob2RzCisgICAgLy8gd2lsbCBmYWlsIGlmIHRoZSBub2RlIGlzIG5vdCBhIGdy
aWQgb3IgaWYgdGhlIG5vZGUgaGFzIGJlZW4gR0MnZC4KKyAgICBJbnNwZWN0b3I6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gc2V0R3JpZE92ZXJsYXlGb3JOb2RlKE5vZGUmLCBjb25zdCBHcmlkT3Zlcmxh
eTo6Q29uZmlnJik7CisgICAgSW5zcGVjdG9yOjpFcnJvclN0cmluZ09yPHZvaWQ+IGNsZWFyR3Jp
ZE92ZXJsYXlGb3JOb2RlKE5vZGUmKTsKKyAgICB2b2lkIGNsZWFyQWxsR3JpZE92ZXJsYXlzKCk7
CisKIHByaXZhdGU6CiAgICAgdXNpbmcgVGltZVJlY3RQYWlyID0gc3RkOjpwYWlyPE1vbm90b25p
Y1RpbWUsIEZsb2F0UmVjdD47CiAKQEAgLTE0MSw2ICsxNzMsOCBAQCBwcml2YXRlOgogCiAgICAg
UGF0aCBkcmF3RWxlbWVudFRpdGxlKEdyYXBoaWNzQ29udGV4dCYsIE5vZGUmLCBjb25zdCBIaWdo
bGlnaHQ6OkJvdW5kcyYpOwogCisgICAgdm9pZCBkcmF3R3JpZE92ZXJsYXkoR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgR3JpZE92ZXJsYXkmKTsKKwogICAgIHZvaWQgdXBkYXRlUGFpbnRSZWN0c1Rp
bWVyRmlyZWQoKTsKIAogICAgIFBhZ2UmIG1fcGFnZTsKQEAgLTE1Niw2ICsxOTAsOCBAQCBwcml2
YXRlOgogICAgIERlcXVlPFRpbWVSZWN0UGFpcj4gbV9wYWludFJlY3RzOwogICAgIFRpbWVyIG1f
cGFpbnRSZWN0VXBkYXRlVGltZXI7CiAKKyAgICBWZWN0b3I8R3JpZE92ZXJsYXk+IG1fYWN0aXZl
R3JpZE92ZXJsYXlzOworCiAgICAgYm9vbCBtX2luZGljYXRpbmcgeyBmYWxzZSB9OwogICAgIGJv
b2wgbV9zaG93UGFpbnRSZWN0cyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3Nob3dSdWxlcnMgeyBm
YWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JET01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckRPTUFnZW50LmNwcAppbmRleCA1Y2I1OGI5Yzk5ZDlkNjlhMGVkYjAzNWU0YmVjZDM0Yjkx
NmYyNzNlLi40ZWQ3ZGRlODEzYTY5YTg0NTcwZjIxZDNjOTYwN2FkMjZlNjdmNmZiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50
LmNwcApAQCAtMTQ3Myw2ICsxNDczLDQ0IEBAIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IEluc3BlY3RvckRPTUFnZW50OjpoaWRlSGlnaGxpZ2h0KCkKICAgICByZXR1cm4geyB9OwogfQog
CitJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFn
ZW50OjpzaG93R3JpZE92ZXJsYXkoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9k
ZUlkLCAgUmVmPEpTT046Ok9iamVjdD4mJiBncmlkQ29sb3IsIE9wdGlvbmFsPGJvb2w+JiYgc2hv
d0xpbmVOYW1lcywgT3B0aW9uYWw8Ym9vbD4mJiBzaG93TGluZU51bWJlcnMsIE9wdGlvbmFsPGJv
b2w+JiYgc2hvd0V4dGVuZGVkR3JpZGxpbmVzLCBPcHRpb25hbDxib29sPiYmIHNob3dUcmFja1Np
emVzLCBPcHRpb25hbDxib29sPiYmIHNob3dBcmVhTmFtZXMpCit7CisgICAgUHJvdG9jb2w6OkVy
cm9yU3RyaW5nIGVycm9yU3RyaW5nOworICAgIE5vZGUqIG5vZGUgPSBhc3NlcnROb2RlKGVycm9y
U3RyaW5nLCBub2RlSWQpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIEluc3BlY3Rvck92ZXJsYXk6OkdyaWRPdmVybGF5
OjpDb25maWcgY29uZmlnOworICAgIGNvbmZpZy5ncmlkQ29sb3IgPSBwYXJzZUNvbG9yKFdURk1v
dmUoZ3JpZENvbG9yKSk7CisgICAgY29uZmlnLnNob3dMaW5lTmFtZXMgPSBzaG93TGluZU5hbWVz
LnZhbHVlT3IoZmFsc2UpOworICAgIGNvbmZpZy5zaG93TGluZU51bWJlcnMgPSBzaG93TGluZU51
bWJlcnMudmFsdWVPcihmYWxzZSk7CisgICAgY29uZmlnLnNob3dFeHRlbmRlZEdyaWRsaW5lcyA9
IHNob3dFeHRlbmRlZEdyaWRsaW5lcy52YWx1ZU9yKGZhbHNlKTsKKyAgICBjb25maWcuc2hvd1Ry
YWNrU2l6ZXMgPSBzaG93VHJhY2tTaXplcy52YWx1ZU9yKGZhbHNlKTsKKyAgICBjb25maWcuc2hv
d0FyZWFOYW1lcyA9IHNob3dBcmVhTmFtZXMudmFsdWVPcihmYWxzZSk7CisKKyAgICBtX292ZXJs
YXktPnNldEdyaWRPdmVybGF5Rm9yTm9kZSgqbm9kZSwgY29uZmlnKTsKKworICAgIHJldHVybiB7
IH07Cit9CisKK0luc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVj
dG9yRE9NQWdlbnQ6OmhpZGVHcmlkT3ZlcmxheShPcHRpb25hbDxQcm90b2NvbDo6RE9NOjpOb2Rl
SWQ+JiYgbm9kZUlkKQoreworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsK
KyAgICBOb2RlKiBub2RlID0gbnVsbHB0cjsKKyAgICBpZiAobm9kZUlkKSB7CisgICAgICAgIG5v
ZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5nLCAqbm9kZUlkKTsKKyAgICAgICAgaWYgKCFub2Rl
KQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAgICB9
CisgICAgCisgICAgaWYgKG5vZGUpCisgICAgICAgIHJldHVybiBtX292ZXJsYXktPmNsZWFyR3Jp
ZE92ZXJsYXlGb3JOb2RlKCpub2RlKTsKKworICAgIG1fb3ZlcmxheS0+Y2xlYXJBbGxHcmlkT3Zl
cmxheXMoKTsKKworICAgIHJldHVybiB7IH07Cit9CisKIFByb3RvY29sOjpFcnJvclN0cmluZ09y
PFByb3RvY29sOjpET006Ok5vZGVJZD4gSW5zcGVjdG9yRE9NQWdlbnQ6Om1vdmVUbyhQcm90b2Nv
bDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBQcm90b2NvbDo6RE9NOjpOb2RlSWQgdGFyZ2V0Tm9kZUlk
LCBPcHRpb25hbDxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+JiYgaW5zZXJ0QmVmb3JlTm9kZUlkKQog
ewogICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCA4N2Q2
YjkxYWM5NTNkMmI5YWY0YjJjYmQ0MjcwZGY0OTMyNjQ3YWYzLi5hY2MxNTQwZGE5NGRlZTM4ZmZk
Zjg0Mjc4Y2Y0ZjNjZDU3YWNkNzQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC0xNDQsNiArMTQ0LDggQEAgcHVibGlj
OgogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaGlnaGxpZ2h0
Tm9kZShSZWY8SlNPTjo6T2JqZWN0PiYmIGhpZ2hsaWdodENvbmZpZywgT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+JiYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJik7CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBoaWdobGlnaHROb2RlTGlzdChSZWY8SlNPTjo6QXJyYXk+JiYgbm9k
ZUlkcywgUmVmPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRDb25maWcpOwogICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaGlnaGxpZ2h0RnJhbWUoY29uc3QgSW5z
cGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgY29sb3IsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3V0bGluZUNvbG9yKTsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNob3dHcmlkT3ZlcmxheShJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwgUmVmPEpTT046Ok9iamVjdD4mJiBncmlkQ29s
b3IsIE9wdGlvbmFsPGJvb2w+JiYgc2hvd0xpbmVOYW1lcywgT3B0aW9uYWw8Ym9vbD4mJiBzaG93
TGluZU51bWJlcnMsIE9wdGlvbmFsPGJvb2w+JiYgc2hvd0V4dGVuZGVkR3JpZGxpbmVzLCBPcHRp
b25hbDxib29sPiYmIHNob3dUcmFja1NpemVzLCBPcHRpb25hbDxib29sPiYmIHNob3dBcmVhTmFt
ZXMpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaGlkZUdy
aWRPdmVybGF5KE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiYmKTsK
ICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6Tm9kZUlkPiBtb3ZlVG8oSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQg
bm9kZUlkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCB0YXJnZXROb2RlSWQsIE9w
dGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiYmIGluc2VydEJlZm9yZU5v
ZGVJZCk7CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiB1bmRv
KCk7CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiByZWRvKCk7
CkBAIC0yMTMsNiArMjE1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGhpZ2hsaWdodE1vdXNlZE92
ZXJOb2RlKCk7CiAgICAgdm9pZCBzZXRTZWFyY2hpbmdGb3JOb2RlKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nJiwgYm9vbCBlbmFibGVkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGhp
Z2hsaWdodENvbmZpZywgYm9vbCBzaG93UnVsZXJzKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5z
cGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpDb25maWc+IGhpZ2hsaWdodENvbmZpZ0Zyb21JbnNw
ZWN0b3JPYmplY3QoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCk7CisgICAgc3RkOjp1bmlxdWVf
cHRyPEluc3BlY3Rvck92ZXJsYXk6OkdyaWRPdmVybGF5OjpDb25maWc+IGdyaWRPdmVybGF5Q29u
ZmlnRnJvbUluc3BlY3Rvck9iamVjdChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgZ3JpZE92ZXJsYXlJbnNwZWN0b3JPYmplY3QpOwogCiAg
ICAgLy8gTm9kZS1yZWxhdGVkIG1ldGhvZHMuCiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxO
b2RlPiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IE5vZGVUb0lkTWFwOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDFiMTcyZWExZGU5OWUwZTBhNzEwMzdl
MDg5OWQyNmJjOWY4YzBlZmMuLmVmYzAyNTFjZDNmZWNjZDhkYzA5NDgxOTU4ZDg4ZGEzZGM5ZTE1
ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTE2NjQsNiArMTY2NCwx
NSBAQCBSZWY8RE9NUmVjdD4gSW50ZXJuYWxzOjpib3VuZGluZ0JveChFbGVtZW50JiBlbGVtZW50
KQogICAgIHJldHVybiBET01SZWN0OjpjcmVhdGUocmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdC
b3hSZWN0SWdub3JpbmdUcmFuc2Zvcm1zKCkpOwogfQogCitFeGNlcHRpb25Pcjx1bnNpZ25lZD4g
SW50ZXJuYWxzOjppbnNwZWN0b3JHcmlkT3ZlcmxheUNvdW50KCkKK3sKKyAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1
bWVudC0+cGFnZSgpKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vy
cm9yIH07CisKKyAgICByZXR1cm4gZG9jdW1lbnQtPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxl
cigpLmdyaWRPdmVybGF5Q291bnQoKTsKK30KKwogRXhjZXB0aW9uT3I8UmVmPERPTVJlY3RMaXN0
Pj4gSW50ZXJuYWxzOjppbnNwZWN0b3JIaWdobGlnaHRSZWN0cygpCiB7CiAgICAgRG9jdW1lbnQq
IGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5oIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
aAppbmRleCBlZThlMjY3NmExYTcyOWNiN2IyOWQ5MmI3ZDQ1ZmMxZTYyNmY1MjI4Li4yYzkzYzYy
MmNhNWQ0NzhiNDYyOWMyM2ZmN2MyZjQzMDRhNjJhMTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmgKQEAgLTI3MSw2ICsyNzEsNyBAQCBwdWJsaWM6CiAgICAgUmVmPERPTVJlY3Q+IGJv
dW5kaW5nQm94KEVsZW1lbnQmKTsKIAogICAgIEV4Y2VwdGlvbk9yPFJlZjxET01SZWN0TGlzdD4+
IGluc3BlY3RvckhpZ2hsaWdodFJlY3RzKCk7CisgICAgRXhjZXB0aW9uT3I8dW5zaWduZWQ+IGlu
c3BlY3RvckdyaWRPdmVybGF5Q291bnQoKTsKIAogICAgIEV4Y2VwdGlvbk9yPHVuc2lnbmVkPiBt
YXJrZXJDb3VudEZvck5vZGUoTm9kZSYsIGNvbnN0IFN0cmluZyYpOwogICAgIEV4Y2VwdGlvbk9y
PFJlZlB0cjxSYW5nZT4+IG1hcmtlclJhbmdlRm9yTm9kZShOb2RlJiwgY29uc3QgU3RyaW5nJiBt
YXJrZXJUeXBlLCB1bnNpZ25lZCBpbmRleCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5pZGwgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5p
ZGwKaW5kZXggODVhZmFmYzU5ZjcyODM2OTUyMGM4OTlmYTA2OWRjOWRlNTE2ZThjZC4uNGY5YmFi
ZTgyYzI3MDEyYTg4YjZhZmZhZGVlZTJiYmVkYTA2ZTc5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmlkbApAQCAtMzI5LDYgKzMyOSw3IEBAIGVudW0gVHJlZVR5cGUgewogCiAgICAg
RE9NUmVjdCBib3VuZGluZ0JveChFbGVtZW50IGVsZW1lbnQpOwogCisgICAgW01heVRocm93RXhj
ZXB0aW9uXSB1bnNpZ25lZCBsb25nIGluc3BlY3RvckdyaWRPdmVybGF5Q291bnQoKTsKICAgICBb
TWF5VGhyb3dFeGNlcHRpb25dIERPTVJlY3RMaXN0IGluc3BlY3RvckhpZ2hsaWdodFJlY3RzKCk7
CiAKICAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHVuc2lnbmVkIGxvbmcgbWFya2VyQ291bnRGb3JO
b2RlKE5vZGUgbm9kZSwgRE9NU3RyaW5nIG1hcmtlclR5cGUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRE9NTWFuYWdlci5qcyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0RPTU1hbmFn
ZXIuanMKaW5kZXggZjM1MmI2ZDgxMjhhNDg1Zjk5YWM4OGVjMmNkNzIwZDg3MDQ3ODdmMy4uNThl
MWE4NjE4YTJiMDdkM2FhOTcwZWEyZjYwMGE4MTIzYjZhZjQxOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRE9NTWFuYWdlci5qcwor
KysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9ET01N
YW5hZ2VyLmpzCkBAIC0xNTQsNiArMTU0LDI4IEBAIFdJLkRPTU1hbmFnZXIgPSBjbGFzcyBET01N
YW5hZ2VyIGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgfQogCiAgICAgcmVxdWVzdERvY3VtZW50KGNh
bGxiYWNrKQorICAgIHsKKyAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gImZ1bmN0aW9u
IikKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0RG9jdW1lbnRXaXRoUHJvbWlzZSgp
OworCisgICAgICAgIHRoaXMuX3JlcXVlc3REb2N1bWVudFdpdGhDYWxsYmFjayhjYWxsYmFjayk7
CisgICAgfQorCisgICAgX3JlcXVlc3REb2N1bWVudFdpdGhQcm9taXNlKCkKKyAgICB7CisgICAg
ICAgIGlmICh0aGlzLl9kb2N1bWVudFByb21pc2UpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
ZG9jdW1lbnRQcm9taXNlLnByb21pc2U7CisKKyAgICAgICAgdGhpcy5fZG9jdW1lbnRQcm9taXNl
ID0gbmV3IFdJLldyYXBwZWRQcm9taXNlOworICAgICAgICBpZiAodGhpcy5fZG9jdW1lbnQpCisg
ICAgICAgICAgICB0aGlzLl9kb2N1bWVudFByb21pc2UucmVzb2x2ZSh0aGlzLl9kb2N1bWVudCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMuX3JlcXVlc3REb2N1bWVudFdpdGhDYWxs
YmFjaygoZG9jKSA9PiB0aGlzLl9kb2N1bWVudFByb21pc2UucmVzb2x2ZShkb2MpKTsKKworICAg
ICAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnRQcm9taXNlLnByb21pc2U7CisgICAgfQorCisgICAg
X3JlcXVlc3REb2N1bWVudFdpdGhDYWxsYmFjayhjYWxsYmFjaykKICAgICB7CiAgICAgICAgIGlm
ICh0aGlzLl9kb2N1bWVudCkgewogICAgICAgICAgICAgY2FsbGJhY2sodGhpcy5fZG9jdW1lbnQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxz
L0NvbG9yLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0Nv
bG9yLmpzCmluZGV4IGZiYjMzMjAwY2YwY2I4YTViZTZjOThmNjIyYzE0NWQwZGE0NTM0MjMuLjg3
YmEwNzAzYjAxMThhOTdkOTk2ZjUwYzEyYzM0Mjg5NWU5ZTFmNDcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Db2xvci5qcworKysgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ29sb3IuanMKQEAgLTYzOCw2
ICs2MzgsMTIgQEAgV0kuQ29sb3IgPSBjbGFzcyBDb2xvcgogICAgICAgICByZXR1cm4gIiI7CiAg
ICAgfQogCisgICAgdG9Qcm90b2NvbCgpCisgICAgeworICAgICAgICBsZXQgW3IsIGcsIGIsIGFd
ID0gdGhpcy5yZ2JhOworICAgICAgICByZXR1cm4ge3IsIGcsIGIsIGF9OworICAgIH0KKwogICAg
IGlzS2V5d29yZCgpCiAgICAgewogICAgICAgICBpZiAodGhpcy5rZXl3b3JkKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0RPTU5vZGUuanMg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvRE9NTm9kZS5qcwpp
bmRleCBkZDlmNTY2ZjU4MGQ4MmU3OTJjMjFlMDBmZDA1NjYzNTY3OWVhMGU4Li4xODYwZjE3YjI0
OWI4NTFkMGQ3Mzc4MTZjMDliOWRkM2I1OTgzN2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvRE9NTm9kZS5qcworKysgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvRE9NTm9kZS5qcwpAQCAtNTUzLDYgKzU1
MywzNCBAQCBXSS5ET01Ob2RlID0gY2xhc3MgRE9NTm9kZSBleHRlbmRzIFdJLk9iamVjdAogICAg
ICAgICB0YXJnZXQuRE9NQWdlbnQuaGlnaGxpZ2h0Tm9kZShXSS5ET01NYW5hZ2VyLmJ1aWxkSGln
aGxpZ2h0Q29uZmlnKG1vZGUpLCB0aGlzLmlkKTsKICAgICB9CiAKKyAgICBzaG93R3JpZE92ZXJs
YXkoY29sb3IsIG9wdGlvbnMgPSB7c2hvd0xpbmVOYW1lczogZmFsc2UsIHNob3dMaW5lTnVtYmVy
czogZmFsc2UsIHNob3dFeHRlbmRlZEdyaWRMaW5lczogZmFsc2UsIHNob3dUcmFja1NpemVzOiBm
YWxzZSwgc2hvd0FyZWFOYW1lczogZmFsc2V9KQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3Nl
cnQoY29sb3IgaW5zdGFuY2VvZiBXSS5Db2xvciwgY29sb3IpOworCisgICAgICAgIGlmICh0aGlz
Ll9kZXN0cm95ZWQpCisgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoIkNhbm5vdCBz
aG93IG92ZXJsYXksIG5vZGUgaXMgZGVzdHJveWVkIik7CisKKyAgICAgICAgbGV0IHRhcmdldCA9
IFdJLmFzc3VtaW5nTWFpblRhcmdldCgpOworICAgICAgICByZXR1cm4gdGFyZ2V0LkRPTUFnZW50
LnNob3dHcmlkT3ZlcmxheS5pbnZva2UoeworICAgICAgICAgICAgbm9kZUlkOiB0aGlzLmlkLAor
ICAgICAgICAgICAgZ3JpZENvbG9yOiBjb2xvci50b1Byb3RvY29sKCksCisgICAgICAgICAgICBz
aG93TGluZU5hbWVzOiAhIW9wdGlvbnMuc2hvd0xpbmVOYW1lcywKKyAgICAgICAgICAgIHNob3dM
aW5lTnVtYmVyczogISFvcHRpb25zLnNob3dMaW5lTnVtYmVycywKKyAgICAgICAgICAgIHNob3dF
eHRlbmRlZEdyaWRMaW5lczogISFvcHRpb25zLnNob3dFeHRlbmRlZEdyaWRMaW5lcywKKyAgICAg
ICAgICAgIHNob3dUcmFja1NpemVzOiAhIW9wdGlvbnMuc2hvd1RyYWNrU2l6ZXMsCisgICAgICAg
ICAgICBzaG93QXJlYU5hbWVzOiAhIW9wdGlvbnMuc2hvd0FyZWFOYW1lcywKKyAgICAgICAgfSk7
CisgICAgfQorCisgICAgaGlkZUdyaWRPdmVybGF5KCkKKyAgICB7CisgICAgICAgIGlmICh0aGlz
Ll9kZXN0cm95ZWQpCisgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoIkNhbm5vdCBo
aWRlIG92ZXJsYXksIG5vZGUgaXMgZGVzdHJveWVkIik7CisKKyAgICAgICAgbGV0IHRhcmdldCA9
IFdJLmFzc3VtaW5nTWFpblRhcmdldCgpOworICAgICAgICByZXR1cm4gdGFyZ2V0LkRPTUFnZW50
LmhpZGVHcmlkT3ZlcmxheSh0aGlzLmlkKTsKKyAgICB9CisKICAgICBzY3JvbGxJbnRvVmlldygp
CiAgICAgewogICAgICAgICBXSS5SZW1vdGVPYmplY3QucmVzb2x2ZU5vZGUodGhpcykudGhlbigo
b2JqZWN0KSA9PiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9UZXN0L1Rlc3RIYXJuZXNzLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvVGVzdC9UZXN0SGFybmVzcy5qcwppbmRleCBkMmU5OWFmMWI2ZTg1MTA3ZGZkNjZkNDFh
MzEzYTY0ZWFlNzAwZjI2Li4zNmNlOTY3NDdmZmM1NGQ0NWQ4NTBhM2JlMTdiNzA5NWUxZjA1ODhj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9UZXN0L1Rl
c3RIYXJuZXNzLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Rl
c3QvVGVzdEhhcm5lc3MuanMKQEAgLTI1NywxMCArMjU3LDEyIEBAIFRlc3RIYXJuZXNzID0gY2xh
c3MgVGVzdEhhcm5lc3MgZXh0ZW5kcyBXSS5PYmplY3QKICAgICAgICAgaWYgKHR5cGVvZiB3b3Jr
ICE9PSAiZnVuY3Rpb24iKQogICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGFy
Z3VtZW50IHRvIGNhdGNoRXhjZXB0aW9uOiB3b3JrIG11c3QgYmUgYSBmdW5jdGlvbi4iKTsKIAot
ICAgICAgICBsZXQgZXhwZWN0QW5kRHVtcEVycm9yID0gKGUpID0+IHsKKyAgICAgICAgbGV0IGV4
cGVjdEFuZER1bXBFcnJvciA9IChlLCByZXNvbHZlZFZhbHVlKSA9PiB7CiAgICAgICAgICAgICB0
aGlzLmV4cGVjdE5vdE51bGwoZSwgIlNob3VsZCBwcm9kdWNlIGFuIGV4Y2VwdGlvbi4iKTsKLSAg
ICAgICAgICAgIGlmICghZSkKKyAgICAgICAgICAgIGlmICghZSkgeworICAgICAgICAgICAgICAg
IHRoaXMuZXhwZWN0RXF1YWwocmVzb2x2ZWRWYWx1ZSwgdW5kZWZpbmVkLCAiRXhjZXB0aW9uLXBy
b2R1Y2luZyB3b3JrIHNob3VsZCBub3QgcmV0dXJuIGEgdmFsdWUiKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2Yg
RXJyb3IgfHwgIShlIGluc3RhbmNlb2YgT2JqZWN0KSkKICAgICAgICAgICAgICAgICB0aGlzLmxv
ZyhlLnRvU3RyaW5nKCkpOwpAQCAtMjg0LDcgKzI4Niw3IEBAIFRlc3RIYXJuZXNzID0gY2xhc3Mg
VGVzdEhhcm5lc3MgZXh0ZW5kcyBXSS5PYmplY3QKICAgICAgICAgICAgIC8vIEludmVydCB0aGUg
cHJvbWlzZSdzIHNldHRsZWQgc3RhdGUgdG8gbWF0Y2ggdGhlIGV4cGVjdGF0aW9uIG9mIHRoZSBj
YWxsZXIuCiAgICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkgewogICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQudGhlbigocmVzb2x2ZWRWYWx1ZSkgPT4gewotICAg
ICAgICAgICAgICAgICAgICBleHBlY3RBbmREdW1wRXJyb3IobnVsbCk7CisgICAgICAgICAgICAg
ICAgICAgIGV4cGVjdEFuZER1bXBFcnJvcihudWxsLCByZXNvbHZlZFZhbHVlKTsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc29sdmVkVmFsdWUpOwogICAgICAg
ICAgICAgICAgIH0sIChlKSA9PiB7IC8vIERvbid0IGNoYWluIHRoZSAuY2F0Y2ggYXMgaXQgd2ls
bCBsb2cgdGhlIHZhbHVlIHdlIGp1c3QgcmVqZWN0ZWQuCiAgICAgICAgICAgICAgICAgICAgIGV4
cGVjdEFuZER1bXBFcnJvcihlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL1ZpZXdzL0NvbnRleHRNZW51VXRpbGl0aWVzLmpzIGIvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29udGV4dE1lbnVVdGlsaXRpZXMuanMKaW5k
ZXggMzA2MmMxMmYwMDYwMzcyZWIwMDk1M2FiMzVlZDNjMjBmNGRjOGYwMC4uMGVhZDNhOWVkMWNm
YmZlOWNjMGYzMTA0MTllODYwNDhhMzI0MTc1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29udGV4dE1lbnVVdGlsaXRpZXMuanMKKysrIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29udGV4dE1lbnVVdGls
aXRpZXMuanMKQEAgLTM4Niw2ICszODYsMjggQEAgV0kuYXBwZW5kQ29udGV4dE1lbnVJdGVtc0Zv
ckRPTU5vZGUgPSBmdW5jdGlvbihjb250ZXh0TWVudSwgZG9tTm9kZSwgb3B0aW9ucyA9IHsKICAg
ICAgICAgfQogCiAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZFNlcGFyYXRvcigpOworCisgICAg
ICAgIC8vIEZJWE1FOiByZW1vdmUgdGhlc2UgbWVudSBpdGVtcyB3aGVuIHJlbW92aW5nIHRoZSBm
ZWF0dXJlIGZsYWcuIFRoZXkgZXhpc3QgdG8gdGVzdCB0aGUgYmFja2VuZCBjb21tYW5kcyBlYXNp
bHkuCisgICAgICAgIGlmIChXSS5zZXR0aW5ncy5leHBlcmltZW50YWxFbmFibGVMYXlvdXRQYW5l
bC52YWx1ZSAmJiBXSS5pc0VuZ2luZWVyaW5nQnVpbGQpIHsKKyAgICAgICAgICAgIGlmIChJbnNw
ZWN0b3JCYWNrZW5kLmhhc0NvbW1hbmQoIkRPTS5zaG93R3JpZE92ZXJsYXkiKSAmJiBhdHRhY2hl
ZCkgeworICAgICAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV0kudW5sb2NhbGl6
ZWRTdHJpbmcoIkFkZCBHcmlkIE92ZXJsYXkgd2l0aCBSYW5kb20gQ29sb3IiKSwgKCkgPT4gewor
ICAgICAgICAgICAgICAgICAgICBsZXQgcmFuZG9tQ29tcG9uZW50ID0gKCkgPT4gTWF0aC5mbG9v
cihNYXRoLnJhbmRvbSgpICogMjU1KTsKKyAgICAgICAgICAgICAgICAgICAgbGV0IGNvbG9yID0g
bmV3IFdJLkNvbG9yKFdJLkNvbG9yLkZvcm1hdC5SR0IsIFtyYW5kb21Db21wb25lbnQoKSwgcmFu
ZG9tQ29tcG9uZW50KCksIHJhbmRvbUNvbXBvbmVudCgpXSk7CisgICAgICAgICAgICAgICAgICAg
IGRvbU5vZGUuc2hvd0dyaWRPdmVybGF5KGNvbG9yKS5jYXRjaCgoZXJyb3IpID0+IGNvbnNvbGUu
ZXJyb3IoZXJyb3IpKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGNv
bnRleHRNZW51LmFwcGVuZEl0ZW0oV0kudW5sb2NhbGl6ZWRTdHJpbmcoIlJlbW92ZSBHcmlkIE92
ZXJsYXkgZm9yIHRoaXMgTm9kZSIpLCAoKSA9PiB7CisgICAgICAgICAgICAgICAgICAgIGRvbU5v
ZGUuaGlkZUdyaWRPdmVybGF5KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAg
ICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdJLnVubG9jYWxpemVkU3RyaW5nKCJSZW1vdmUg
QWxsIEdyaWQgT3ZlcmxheXMiKSwgKCkgPT4geworICAgICAgICAgICAgICAgICAgICBsZXQgdGFy
Z2V0ID0gV0kuYXNzdW1pbmdNYWluVGFyZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIHRhcmdl
dC5ET01BZ2VudC5oaWRlR3JpZE92ZXJsYXkoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZFNlcGFyYXRv
cigpOwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3NDE1NmY0YTg3MjU1NWY5NmRlNTAyZmM3ZTFlOWYx
Y2JkYjM2YzA3Li4yMjRiOWMyNTdmYjc0N2VkMWRmNmVmODIyNjg4NzlhNmRjNzI1OTNhIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjUgQEAKKzIwMjEtMDEtMzAgIEJKIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+
CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogaW1wbGVtZW50IHRoZSBiYXNpY3MgZm9yIHNob3dp
bmcvaGlkaW5nIGdyaWQgb3ZlcmxheXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyMTA2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogaW5zcGVjdG9yL2RvbS9zaG93R3JpZE92ZXJsYXktZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvZG9tL3Nob3dHcmlkT3ZlcmxheS5odG1s
OiBBZGRlZC4KKyAgICAgICAgVGhpcyB0ZXN0IGRvZXMgbm90IGNvdmVyIHRoZSBhY3R1YWwgZHJh
d2luZyBjb2RlLiBUaGUgZHJhd2luZyBtZXRob2QKKyAgICAgICAgd2lsbCBjaGFuZ2UgYSBsb3Qg
YW5kIGlzIG5vdCBlYXN5IHRvIHRlc3QgY3VycmVudGx5LiBUaGUgbmV3IHRlc3QKKyAgICAgICAg
Y292ZXJzIHRoZSBiZWhhdmlvciBvZiBzaG93R3JpZE92ZXJsYXkvaGlkZUdyaWRPdmVybGF5IGJ5
IHF1ZXJ5aW5nCisgICAgICAgIGhvdyBtYW55IGdyaWQgb3ZlcmxheXMgYXJlIGFjdGl2ZSBhY2Nv
cmRpbmcgdG8gSW5zcGVjdG9yT3ZlcmxheS4KKworICAgICAgICAqIGluc3BlY3Rvci9tb2RlbC9j
b2xvci1leHBlY3RlZC50eHQ6CisgICAgICAgICogaW5zcGVjdG9yL21vZGVsL2NvbG9yLmh0bWw6
CisgICAgICAgIEFkZCBhIHRlc3QgY2FzZSB0byBleGVyY2lzZSBXSS5Db2xvci5wcm90b3R5cGUu
dG9Qcm90b2NvbCgpLgorCisgICAgICAgICogaW5zcGVjdG9yL3VuaXQtdGVzdHMvdGVzdC1oYXJu
ZXNzLWV4cGVjdC1mdW5jdGlvbnMtYXN5bmMtZXhwZWN0ZWQudHh0OgorICAgICAgICBSZWJhc2Vs
aW5lIHJlc3VsdHMgYWZ0ZXIgYWRkaW5nIG1vcmUgc3RhdGUgZHVtcGluZyBpbiB0aGUgZmFpbHVy
ZSBjYXNlCisgICAgICAgIGZvciBJbnNwZWN0b3JUZXN0LmV4cGVjdEV4Y2VwdGlvbigpLgorCiAy
MDIxLTAxLTMwICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAg
ICAgIFttYWNPU10gUmVtb3ZlIHN1cHBvcnQgZm9yIGltYWdlIGNvbnRyb2xzCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZG9tL3Nob3dHcmlkT3ZlcmxheS1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZG9tL3Nob3dHcmlkT3ZlcmxheS1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMzU1YTQzMjZiNzU0OTU1OWQyZjRlNmUwNDRmNjJiMTI4NzNkNDRmNgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kb20vc2hvd0dyaWRPdmVybGF5
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDYzIEBACitUZXN0cyBmb3IgdGhlIERPTS5zaG93R3Jp
ZE92ZXJsYXkgY29tbWFuZC4KKworQQorQgorQworRAorRQorRgorCitBCitCCitDCitECitFCitG
CisKKz09IFJ1bm5pbmcgdGVzdCBzdWl0ZTogRE9NLnNob3dHcmlkT3ZlcmxheQorLS0gUnVubmlu
ZyB0ZXN0IGNhc2U6IEdyaWRPdmVybGF5LlNob3dPbmVHcmlkCitQQVNTOiBFeHBlY3Qgbm8gZ3Jp
ZHMgdG8gYmUgZGlzcGxheWVkLgorUmVxdWVzdGluZyB0byBzaG93IGdyaWQgb3ZlcmxheSBmb3Ig
Zmlyc3QgLmdyaWQtY29udGFpbmVyCitQQVNTOiBFeHBlY3Qgb25lIGdyaWQgdG8gYmUgZGlzcGxh
eWVkLgorUmVxdWVzdGluZyB0byBzaG93IGEgZGlmZmVyZW50IGdyaWQgb3ZlcmxheSBmb3IgZmly
c3QgLmdyaWQtY29udGFpbmVyCitQQVNTOiBFeHBlY3Qgb25lIGdyaWQgdG8gYmUgZGlzcGxheWVk
LgorUmVxdWVzdGluZyB0byBoaWRlIGdyaWQgb3ZlcmxheQorUEFTUzogRXhwZWN0IG5vIGdyaWRz
IHRvIGJlIGRpc3BsYXllZC4KKworLS0gUnVubmluZyB0ZXN0IGNhc2U6IEdyaWRPdmVybGF5LlNo
b3dUd29HcmlkcworUEFTUzogRXhwZWN0IG5vIGdyaWRzIHRvIGJlIGRpc3BsYXllZC4KK1JlcXVl
c3RpbmcgdG8gc2hvdyBmaXJzdCBncmlkIG92ZXJsYXkKK1BBU1M6IEV4cGVjdCBvbmUgZ3JpZCB0
byBiZSBkaXNwbGF5ZWQuCitSZXF1ZXN0aW5nIHRvIHNob3cgc2Vjb25kIGdyaWQgb3ZlcmxheQor
UEFTUzogRXhwZWN0IHR3byBncmlkcyB0byBiZSBkaXNwbGF5ZWQuCitSZXF1ZXN0aW5nIHRvIGhp
ZGUgZmlyc3QgZ3JpZCBvdmVybGF5CitQQVNTOiBFeHBlY3Qgb25lIGdyaWQgdG8gYmUgZGlzcGxh
eWVkLgorUmVxdWVzdGluZyB0byBoaWRlIHNlY29uZCBncmlkIG92ZXJsYXkKK1BBU1M6IEV4cGVj
dCBubyBncmlkcyB0byBiZSBkaXNwbGF5ZWQuCisKKy0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBHcmlk
T3ZlcmxheS5IaWRlQWxsR3JpZHMKK1BBU1M6IEV4cGVjdCBubyBncmlkcyB0byBiZSBkaXNwbGF5
ZWQuCitSZXF1ZXN0aW5nIHRvIHNob3cgZ3JpZCBvdmVybGF5CitQQVNTOiBFeHBlY3Qgb25lIGdy
aWQgdG8gYmUgZGlzcGxheWVkLgorUmVxdWVzdGluZyB0byBzaG93IGEgZGlmZmVyZW50IGdyaWQg
b3ZlcmxheQorUEFTUzogRXhwZWN0IHR3byBncmlkcyB0byBiZSBkaXNwbGF5ZWQuCitSZXF1ZXN0
aW5nIHRvIGhpZGUgYWxsIGdyaWQgb3ZlcmxheXMuIEhpZGluZyBhbGwgZ3JpZHMgaXMgaWRlbXBv
dGVudCBhbmQgc2hvdWxkIG5vdCB0aHJvdyBhbiBlcnJvci4KK1BBU1M6IEV4cGVjdCBubyBncmlk
cyB0byBiZSBkaXNwbGF5ZWQuCitSZXF1ZXN0aW5nIHRvIGhpZGUgYWxsIGdyaWQgb3ZlcmxheXMg
YWdhaW4sIGV4cGVjdGluZyBub25lIHRvIGJlIGNsZWFyZWQuIEhpZGluZyBhbGwgZ3JpZHMgaXMg
aWRlbXBvdGVudCBhbmQgc2hvdWxkIG5vdCB0aHJvdyBhbiBlcnJvci4KK1BBU1M6IEV4cGVjdCBu
byBncmlkcyB0byBiZSBkaXNwbGF5ZWQuCisKKy0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBHcmlkT3Zl
cmxheS5IaWRlQmVmb3JlU2hvd1Nob3VsZEVycm9yCitQQVNTOiBFeHBlY3Qgbm8gZ3JpZHMgdG8g
YmUgZGlzcGxheWVkLgorUmVxdWVzdGluZyB0byBoaWRlIGdyaWQgb3ZlcmxheSBmb3IgLmdyaWQt
Y29udGFpbmVyCitQQVNTOiBTaG91bGQgcHJvZHVjZSBhbiBleGNlcHRpb24uCitFcnJvcjogTm8g
Z3JpZCBvdmVybGF5IGV4aXN0cyBmb3IgdGhlIG5vZGUsIHNvIGNhbm5vdCBjbGVhci4KK1JlcXVl
c3RpbmcgdG8gaGlkZSBhbGwgZ3JpZCBvdmVybGF5cy4gSGlkaW5nIGFsbCBncmlkcyBpcyBpZGVt
cG90ZW50IGFuZCBzaG91bGQgbm90IHRocm93IGFuIGVycm9yLgorUEFTUzogRXhwZWN0IG5vIGdy
aWRzIHRvIGJlIGRpc3BsYXllZC4KKworLS0gUnVubmluZyB0ZXN0IGNhc2U6IEdyaWRPdmVybGF5
LkZvck5vbmV4aXN0ZW50Tm9kZVNob3VsZEVycm9yCitQQVNTOiBFeHBlY3Qgbm8gZ3JpZHMgdG8g
YmUgZGlzcGxheWVkLgorUmVxdWVzdGluZyB0byBzaG93IGdyaWQgb3ZlcmxheSBmb3IgaW52YWxp
ZCBub2RlSWQgLTEKK1BBU1M6IFNob3VsZCBwcm9kdWNlIGFuIGV4Y2VwdGlvbi4KK0Vycm9yOiBN
aXNzaW5nIG5vZGUgZm9yIGdpdmVuIG5vZGVJZAorUEFTUzogRXhwZWN0IG5vIGdyaWRzIHRvIGJl
IGRpc3BsYXllZC4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RvbS9zaG93
R3JpZE92ZXJsYXkuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kb20vc2hvd0dyaWRPdmVy
bGF5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMTI5NTQ5ODAwMzAwMzkzN2MyNTUzZDNiNWUxMjNmNzQxYzUx
YmE5YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kb20vc2hvd0dy
aWRPdmVybGF5Lmh0bWwKQEAgLTAsMCArMSwxODUgQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9yZXNvdXJj
ZXMvaW5zcGVjdG9yLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2Z1bmN0aW9uIHRlc3Qo
KQoreworICAgIGxldCBzdWl0ZSA9IEluc3BlY3RvclRlc3QuY3JlYXRlQXN5bmNTdWl0ZSgiRE9N
LnNob3dHcmlkT3ZlcmxheSIpOworCisgICAgYXN5bmMgZnVuY3Rpb24gZ2V0R3JpZENvbnRhaW5l
ck5vZGUoKSB7CisgICAgICAgIGxldCBkb2MgPSBhd2FpdCBXSS5kb21NYW5hZ2VyLnJlcXVlc3RE
b2N1bWVudCgpOworICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgRE9NQWdlbnQucXVlcnlTZWxl
Y3Rvcihkb2MuaWQsICIuZ3JpZC1jb250YWluZXIiKTsKKyAgICAgICAgcmV0dXJuIFdJLmRvbU1h
bmFnZXIubm9kZUZvcklkKHJlc3VsdC5ub2RlSWQpOworICAgIH0KKworICAgIGFzeW5jIGZ1bmN0
aW9uIGdldEFsbEdyaWRDb250YWluZXJOb2RlcygpIHsKKyAgICAgICAgbGV0IGRvYyA9IGF3YWl0
IFdJLmRvbU1hbmFnZXIucmVxdWVzdERvY3VtZW50KCk7CisgICAgICAgIGxldCByZXN1bHQgPSBh
d2FpdCBET01BZ2VudC5xdWVyeVNlbGVjdG9yQWxsKGRvYy5pZCwgIi5ncmlkLWNvbnRhaW5lciIp
OworICAgICAgICByZXR1cm4gcmVzdWx0Lm5vZGVJZHMubWFwKChub2RlSWQpID0+IFdJLmRvbU1h
bmFnZXIubm9kZUZvcklkKG5vZGVJZCkpOworICAgIH0KKworICAgIGFzeW5jIGZ1bmN0aW9uIGdy
aWRPdmVybGF5Q291bnQoKSB7CisgICAgICAgIHJldHVybiBJbnNwZWN0b3JUZXN0LmV2YWx1YXRl
SW5QYWdlKCJ3aW5kb3cuaW50ZXJuYWxzLmluc3BlY3RvckdyaWRPdmVybGF5Q291bnQoKSIpOwor
ICAgIH0KKworICAgIHN1aXRlLmFkZFRlc3RDYXNlKHsKKyAgICAgICAgbmFtZTogIkdyaWRPdmVy
bGF5LlNob3dPbmVHcmlkIiwKKyAgICAgICAgZGVzY3JpcHRpb246ICJObyBlcnJvciBvY2N1cnMg
d2hlbiByZXF1ZXN0aW5nIHRvIHNob3cgYSBncmlkIG92ZXJsYXkuIiwKKyAgICAgICAgYXN5bmMg
dGVzdChyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0
RXF1YWwoYXdhaXQgZ3JpZE92ZXJsYXlDb3VudCgpLCAwLCAiRXhwZWN0IG5vIGdyaWRzIHRvIGJl
IGRpc3BsYXllZC4iKTsKKyAgICAgICAgICAgIGxldCBjb250YWluZXIgPSBhd2FpdCBnZXRHcmlk
Q29udGFpbmVyTm9kZSgpOworCisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiUmVxdWVz
dGluZyB0byBzaG93IGdyaWQgb3ZlcmxheSBmb3IgZmlyc3QgLmdyaWQtY29udGFpbmVyIik7Cisg
ICAgICAgICAgICBhd2FpdCBET01BZ2VudC5zaG93R3JpZE92ZXJsYXkoY29udGFpbmVyLmlkLCBX
SS5Db2xvci5mcm9tU3RyaW5nKCJtYWdlbnRhIikudG9Qcm90b2NvbCgpKTsKKyAgICAgICAgICAg
IEluc3BlY3RvclRlc3QuZXhwZWN0RXF1YWwoYXdhaXQgZ3JpZE92ZXJsYXlDb3VudCgpLCAxLCAi
RXhwZWN0IG9uZSBncmlkIHRvIGJlIGRpc3BsYXllZC4iKTsKKworICAgICAgICAgICAgLy8gTm8g
ZXJyb3Igc2hvdWxkIG9jY3VyIGlmIHNob3dpbmcgZ3JpZCBvdmVybGF5IGZvciBhIG5vZGUgdGhh
dCBhbHJlYWR5IGhhcyBvbmUuCisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiUmVxdWVz
dGluZyB0byBzaG93IGEgZGlmZmVyZW50IGdyaWQgb3ZlcmxheSBmb3IgZmlyc3QgLmdyaWQtY29u
dGFpbmVyIik7CisgICAgICAgICAgICBhd2FpdCBET01BZ2VudC5zaG93R3JpZE92ZXJsYXkoY29u
dGFpbmVyLmlkLCBXSS5Db2xvci5mcm9tU3RyaW5nKCJncmVlbiIpLnRvUHJvdG9jb2woKSk7Cisg
ICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdEVxdWFsKGF3YWl0IGdyaWRPdmVybGF5Q291
bnQoKSwgMSwgIkV4cGVjdCBvbmUgZ3JpZCB0byBiZSBkaXNwbGF5ZWQuIik7CisKKyAgICAgICAg
ICAgIC8vIE5vIGVycm9yIHNob3VsZCBvY2N1ciB3aGVuIGhpZGluZyB0aGUgZ3JpZCBvdmVybGF5
LgorICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIlJlcXVlc3RpbmcgdG8gaGlkZSBncmlk
IG92ZXJsYXkiKTsKKyAgICAgICAgICAgIGF3YWl0IERPTUFnZW50LmhpZGVHcmlkT3ZlcmxheShj
b250YWluZXIuaWQpOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RFcXVhbChhd2Fp
dCBncmlkT3ZlcmxheUNvdW50KCksIDAsICJFeHBlY3Qgbm8gZ3JpZHMgdG8gYmUgZGlzcGxheWVk
LiIpOworICAgICAgICB9CisgICAgfSk7CisKKyAgICBzdWl0ZS5hZGRUZXN0Q2FzZSh7CisgICAg
ICAgIG5hbWU6ICJHcmlkT3ZlcmxheS5TaG93VHdvR3JpZHMiLAorICAgICAgICBkZXNjcmlwdGlv
bjogIk5vIGVycm9yIG9jY3VycyB3aGVuIHJlcXVlc3RpbmcgdG8gc2hvdyBtdWx0aXBsZSBncmlk
IG92ZXJsYXlzLiIsCisgICAgICAgIGFzeW5jIHRlc3QocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAg
ICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdEVxdWFsKGF3YWl0IGdyaWRPdmVybGF5Q291bnQo
KSwgMCwgIkV4cGVjdCBubyBncmlkcyB0byBiZSBkaXNwbGF5ZWQuIik7CisgICAgICAgICAgICBs
ZXQgW2ZpcnN0LCBzZWNvbmRdID0gYXdhaXQgZ2V0QWxsR3JpZENvbnRhaW5lck5vZGVzKCk7CisK
KyAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJSZXF1ZXN0aW5nIHRvIHNob3cgZmlyc3Qg
Z3JpZCBvdmVybGF5Iik7CisgICAgICAgICAgICBhd2FpdCBET01BZ2VudC5zaG93R3JpZE92ZXJs
YXkoZmlyc3QuaWQsIFdJLkNvbG9yLmZyb21TdHJpbmcoIm1hZ2VudGEiKS50b1Byb3RvY29sKCkp
OworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RFcXVhbChhd2FpdCBncmlkT3Zlcmxh
eUNvdW50KCksIDEsICJFeHBlY3Qgb25lIGdyaWQgdG8gYmUgZGlzcGxheWVkLiIpOworCisgICAg
ICAgICAgICAvLyBObyBlcnJvciBzaG91bGQgb2NjdXIgaWYgc2hvd2luZyBncmlkIG92ZXJsYXkg
Zm9yIGEgbm9kZSB0aGF0IGFscmVhZHkgaGFzIG9uZS4KKyAgICAgICAgICAgIEluc3BlY3RvclRl
c3QubG9nKCJSZXF1ZXN0aW5nIHRvIHNob3cgc2Vjb25kIGdyaWQgb3ZlcmxheSIpOworICAgICAg
ICAgICAgYXdhaXQgRE9NQWdlbnQuc2hvd0dyaWRPdmVybGF5KHNlY29uZC5pZCwgV0kuQ29sb3Iu
ZnJvbVN0cmluZygiZ3JlZW4iKS50b1Byb3RvY29sKCkpOworICAgICAgICAgICAgSW5zcGVjdG9y
VGVzdC5leHBlY3RFcXVhbChhd2FpdCBncmlkT3ZlcmxheUNvdW50KCksIDIsICJFeHBlY3QgdHdv
IGdyaWRzIHRvIGJlIGRpc3BsYXllZC4iKTsKKworICAgICAgICAgICAgLy8gTm8gZXJyb3Igc2hv
dWxkIG9jY3VyIHdoZW4gaGlkaW5nIHRoZSBncmlkIG92ZXJsYXkuCisgICAgICAgICAgICBJbnNw
ZWN0b3JUZXN0LmxvZygiUmVxdWVzdGluZyB0byBoaWRlIGZpcnN0IGdyaWQgb3ZlcmxheSIpOwor
ICAgICAgICAgICAgYXdhaXQgRE9NQWdlbnQuaGlkZUdyaWRPdmVybGF5KGZpcnN0LmlkKTsKKyAg
ICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0RXF1YWwoYXdhaXQgZ3JpZE92ZXJsYXlDb3Vu
dCgpLCAxLCAiRXhwZWN0IG9uZSBncmlkIHRvIGJlIGRpc3BsYXllZC4iKTsKKworICAgICAgICAg
ICAgLy8gTm8gZXJyb3Igc2hvdWxkIG9jY3VyIHdoZW4gaGlkaW5nIHRoZSBncmlkIG92ZXJsYXku
CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiUmVxdWVzdGluZyB0byBoaWRlIHNlY29u
ZCBncmlkIG92ZXJsYXkiKTsKKyAgICAgICAgICAgIGF3YWl0IERPTUFnZW50LmhpZGVHcmlkT3Zl
cmxheShzZWNvbmQuaWQpOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RFcXVhbChh
d2FpdCBncmlkT3ZlcmxheUNvdW50KCksIDAsICJFeHBlY3Qgbm8gZ3JpZHMgdG8gYmUgZGlzcGxh
eWVkLiIpOworICAgICAgICB9CisgICAgfSk7CisKKworICAgIHN1aXRlLmFkZFRlc3RDYXNlKHsK
KyAgICAgICAgbmFtZTogIkdyaWRPdmVybGF5LkhpZGVBbGxHcmlkcyIsCisgICAgICAgIGRlc2Ny
aXB0aW9uOiAiTm8gZXJyb3Igb2NjdXJzIHdoZW4gcmVxdWVzdGluZyB0byBzaG93IG11bHRpcGxl
IGdyaWQgb3ZlcmxheXMuIiwKKyAgICAgICAgYXN5bmMgdGVzdChyZXNvbHZlLCByZWplY3QpIHsK
KyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0RXF1YWwoYXdhaXQgZ3JpZE92ZXJsYXlD
b3VudCgpLCAwLCAiRXhwZWN0IG5vIGdyaWRzIHRvIGJlIGRpc3BsYXllZC4iKTsKKyAgICAgICAg
ICAgIGxldCBbZmlyc3QsIHNlY29uZF0gPSBhd2FpdCBnZXRBbGxHcmlkQ29udGFpbmVyTm9kZXMo
KTsKKworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIlJlcXVlc3RpbmcgdG8gc2hvdyBn
cmlkIG92ZXJsYXkiKTsKKyAgICAgICAgICAgIGF3YWl0IERPTUFnZW50LnNob3dHcmlkT3Zlcmxh
eShmaXJzdC5pZCwgV0kuQ29sb3IuZnJvbVN0cmluZygibWFnZW50YSIpLnRvUHJvdG9jb2woKSk7
CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdEVxdWFsKGF3YWl0IGdyaWRPdmVybGF5
Q291bnQoKSwgMSwgIkV4cGVjdCBvbmUgZ3JpZCB0byBiZSBkaXNwbGF5ZWQuIik7CisKKyAgICAg
ICAgICAgIC8vIE5vIGVycm9yIHNob3VsZCBvY2N1ciBpZiBzaG93aW5nIGdyaWQgb3ZlcmxheSBm
b3IgYSBub2RlIHRoYXQgYWxyZWFkeSBoYXMgb25lLgorICAgICAgICAgICAgSW5zcGVjdG9yVGVz
dC5sb2coIlJlcXVlc3RpbmcgdG8gc2hvdyBhIGRpZmZlcmVudCBncmlkIG92ZXJsYXkiKTsKKyAg
ICAgICAgICAgIGF3YWl0IERPTUFnZW50LnNob3dHcmlkT3ZlcmxheShzZWNvbmQuaWQsIFdJLkNv
bG9yLmZyb21TdHJpbmcoImdyZWVuIikudG9Qcm90b2NvbCgpKTsKKyAgICAgICAgICAgIEluc3Bl
Y3RvclRlc3QuZXhwZWN0RXF1YWwoYXdhaXQgZ3JpZE92ZXJsYXlDb3VudCgpLCAyLCAiRXhwZWN0
IHR3byBncmlkcyB0byBiZSBkaXNwbGF5ZWQuIik7CisKKyAgICAgICAgICAgIC8vIE5vIGVycm9y
IHNob3VsZCBvY2N1ciB3aGVuIGhpZGluZyB0aGUgZ3JpZCBvdmVybGF5LgorICAgICAgICAgICAg
SW5zcGVjdG9yVGVzdC5sb2coIlJlcXVlc3RpbmcgdG8gaGlkZSBhbGwgZ3JpZCBvdmVybGF5cy4g
SGlkaW5nIGFsbCBncmlkcyBpcyBpZGVtcG90ZW50IGFuZCBzaG91bGQgbm90IHRocm93IGFuIGVy
cm9yLiIpOworICAgICAgICAgICAgYXdhaXQgRE9NQWdlbnQuaGlkZUdyaWRPdmVybGF5KCk7Cisg
ICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdEVxdWFsKGF3YWl0IGdyaWRPdmVybGF5Q291
bnQoKSwgMCwgIkV4cGVjdCBubyBncmlkcyB0byBiZSBkaXNwbGF5ZWQuIik7CisKKyAgICAgICAg
ICAgIC8vIE5vIGVycm9yIHNob3VsZCBvY2N1ciB3aGVuIGhpZGluZyB0aGUgZ3JpZCBvdmVybGF5
LgorICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIlJlcXVlc3RpbmcgdG8gaGlkZSBhbGwg
Z3JpZCBvdmVybGF5cyBhZ2FpbiwgZXhwZWN0aW5nIG5vbmUgdG8gYmUgY2xlYXJlZC4gSGlkaW5n
IGFsbCBncmlkcyBpcyBpZGVtcG90ZW50IGFuZCBzaG91bGQgbm90IHRocm93IGFuIGVycm9yLiIp
OworICAgICAgICAgICAgYXdhaXQgRE9NQWdlbnQuaGlkZUdyaWRPdmVybGF5KCk7CisgICAgICAg
ICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdEVxdWFsKGF3YWl0IGdyaWRPdmVybGF5Q291bnQoKSwg
MCwgIkV4cGVjdCBubyBncmlkcyB0byBiZSBkaXNwbGF5ZWQuIik7CisgICAgICAgIH0KKyAgICB9
KTsKKworICAgIHN1aXRlLmFkZFRlc3RDYXNlKHsKKyAgICAgICAgbmFtZTogIkdyaWRPdmVybGF5
LkhpZGVCZWZvcmVTaG93U2hvdWxkRXJyb3IiLAorICAgICAgICBkZXNjcmlwdGlvbjogIlJldHVy
biBhbiBlcnJvciB3aGVuIHJlcXVlc3RpbmcgdG8gaGlkZSBhIGdyaWQgb3ZlcmxheSB3aGVuIG5v
bmUgaXMgYWN0aXZlIGZvciB0aGUgbm9kZS4iLAorICAgICAgICBhc3luYyB0ZXN0KHJlc29sdmUs
IHJlamVjdCkgeworICAgICAgICAgICAgbGV0IGNvbnRhaW5lciA9IGF3YWl0IGdldEdyaWRDb250
YWluZXJOb2RlKCk7CisKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0RXF1YWwoYXdh
aXQgZ3JpZE92ZXJsYXlDb3VudCgpLCAwLCAiRXhwZWN0IG5vIGdyaWRzIHRvIGJlIGRpc3BsYXll
ZC4iKTsKKworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIlJlcXVlc3RpbmcgdG8gaGlk
ZSBncmlkIG92ZXJsYXkgZm9yIC5ncmlkLWNvbnRhaW5lciIpOworICAgICAgICAgICAgYXdhaXQg
SW5zcGVjdG9yVGVzdC5leHBlY3RFeGNlcHRpb24oYXN5bmMgKCkgPT4geworICAgICAgICAgICAg
ICAgIGF3YWl0IERPTUFnZW50LmhpZGVHcmlkT3ZlcmxheShjb250YWluZXIuaWQpOworICAgICAg
ICAgICAgfSk7CisKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJSZXF1ZXN0aW5nIHRv
IGhpZGUgYWxsIGdyaWQgb3ZlcmxheXMuIEhpZGluZyBhbGwgZ3JpZHMgaXMgaWRlbXBvdGVudCBh
bmQgc2hvdWxkIG5vdCB0aHJvdyBhbiBlcnJvci4iKTsKKyAgICAgICAgICAgIGF3YWl0IERPTUFn
ZW50LmhpZGVHcmlkT3ZlcmxheSgpOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RF
cXVhbChhd2FpdCBncmlkT3ZlcmxheUNvdW50KCksIDAsICJFeHBlY3Qgbm8gZ3JpZHMgdG8gYmUg
ZGlzcGxheWVkLiIpOworICAgICAgICB9CisgICAgfSk7CisKKyAgICBzdWl0ZS5hZGRUZXN0Q2Fz
ZSh7CisgICAgICAgIG5hbWU6ICJHcmlkT3ZlcmxheS5Gb3JOb25leGlzdGVudE5vZGVTaG91bGRF
cnJvciIsCisgICAgICAgIGRlc2NyaXB0aW9uOiAiUmV0dXJuIGFuIGVycm9yIHdoZW4gcmVxdWVz
dGluZyB0byBzaG93IGEgZ3JpZCBvdmVybGF5IGZvciBhIG5vbmV4aXN0ZW50IG5vZGUuIiwKKyAg
ICAgICAgYXN5bmMgdGVzdChyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgICAgIEluc3BlY3Rv
clRlc3QuZXhwZWN0RXF1YWwoYXdhaXQgZ3JpZE92ZXJsYXlDb3VudCgpLCAwLCAiRXhwZWN0IG5v
IGdyaWRzIHRvIGJlIGRpc3BsYXllZC4iKTsKKworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5s
b2coIlJlcXVlc3RpbmcgdG8gc2hvdyBncmlkIG92ZXJsYXkgZm9yIGludmFsaWQgbm9kZUlkIC0x
Iik7CisgICAgICAgICAgICBhd2FpdCBJbnNwZWN0b3JUZXN0LmV4cGVjdEV4Y2VwdGlvbihhc3lu
YyAoKSA9PiB7CisgICAgICAgICAgICAgICAgYXdhaXQgRE9NQWdlbnQuc2hvd0dyaWRPdmVybGF5
KC0xLCBXSS5Db2xvci5mcm9tU3RyaW5nKCJtYWdlbnRhIikudG9Qcm90b2NvbCgpKTsKKyAgICAg
ICAgICAgIH0pOworCisgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0RXF1YWwoYXdhaXQgZ3Jp
ZE92ZXJsYXlDb3VudCgpLCAwLCAiRXhwZWN0IG5vIGdyaWRzIHRvIGJlIGRpc3BsYXllZC4iKTsK
KyAgICAgICAgfQorICAgIH0pOworCisgICAgc3VpdGUucnVuVGVzdENhc2VzQW5kRmluaXNoKCk7
Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKyAgICA8
c3R5bGU+CisgICAgICAgIGJvZHkgeworICAgICAgICAgICAgbWFyZ2luOiAxMDBweDsKKyAgICAg
ICAgfQorICAgICAgICAuZ3JpZC1jb250YWluZXIgeworICAgICAgICAgICAgZGlzcGxheTogZ3Jp
ZDsKKyAgICAgICAgICAgIGdyaWQtZ2FwOiAxMHB4OworICAgICAgICAgICAgZ3JpZC10ZW1wbGF0
ZS1jb2x1bW5zOiAxMDBweCAxMDBweCAxMDBweDsKKyAgICAgICAgICAgIGJhY2tncm91bmQtY29s
b3I6ICNmZmY7CisgICAgICAgICAgICBjb2xvcjogIzU1NTsKKyAgICAgICAgfQorCisgICAgICAg
IC5ncmlkLWNvbnRhaW5lciA+IC5ib3ggeworICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjog
IzU1NTsKKyAgICAgICAgICAgIGNvbG9yOiAjZmZmOworICAgICAgICAgICAgYm9yZGVyLXJhZGl1
czogNXB4OworICAgICAgICAgICAgcGFkZGluZzogMjBweDsKKyAgICAgICAgICAgIGZvbnQtc2l6
ZTogMTUwJTsKKyAgICAgICAgfQorICAgIDwvc3R5bGU+CisKKyAgICA8cD5UZXN0cyBmb3IgdGhl
IERPTS5zaG93R3JpZE92ZXJsYXkgY29tbWFuZC48L3A+CisgICAgPGRpdiBjbGFzcz0iZ3JpZC1j
b250YWluZXIiIHN0eWxlPSJjb2xvcjogIzM2NiI+CisgICAgICAgIDxkaXYgY2xhc3M9ImJveCBh
Ij5BPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImJveCBiIj5CPC9kaXY+CisgICAgICAgIDxk
aXYgY2xhc3M9ImJveCBjIj5DPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImJveCBkIj5EPC9k
aXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImJveCBlIj5FPC9kaXY+CisgICAgICAgIDxkaXYgY2xh
c3M9ImJveCBmIj5GPC9kaXY+CisgICAgPC9kaXY+CisgICAgPGJyIC8+CisgICAgPGRpdiBjbGFz
cz0iZ3JpZC1jb250YWluZXIiIHN0eWxlPSJjb2xvcjogIzYzNiI+CisgICAgICAgIDxkaXYgY2xh
c3M9ImJveCBhIj5BPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImJveCBiIj5CPC9kaXY+Cisg
ICAgICAgIDxkaXYgY2xhc3M9ImJveCBjIj5DPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImJv
eCBkIj5EPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImJveCBlIj5FPC9kaXY+CisgICAgICAg
IDxkaXYgY2xhc3M9ImJveCBmIj5GPC9kaXY+CisgICAgPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvbW9kZWwvY29sb3ItZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL21vZGVsL2NvbG9yLWV4cGVjdGVkLnR4dAppbmRl
eCA5M2NmOTNhNjQ4ZjdkZDEyMzM0Yzk1YjA4YWM0ODBkNWFiYTFkNjJkLi5kZWZjYTJkMjdmYWU5
ODgwODc0MTdmMGFkZGI0YTA1YjYyMWUyNDVhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvbW9kZWwvY29sb3ItZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9tb2RlbC9jb2xvci1leHBlY3RlZC50eHQKQEAgLTU0MywzICs1NDMsOSBAQCBQQVNTOiBTaG91
bGQgY29udmVydCBbLTEsMCwwXSB0byBbMCwwLDBdLgogImNvbG9yKGRpc3BsYXktcDMgMSAwIDAp
IiBpcyBvdXRzaWRlIHNSR0IuCiAiY29sb3IoZGlzcGxheS1wMyAwLjkzIDAuMzUzIDAuMzUzKSIg
aXMgb3V0c2lkZSBzUkdCLgogCistLSBSdW5uaW5nIHRlc3QgY2FzZTogV0kuQ29sb3IudG9Qcm90
b2NvbAorUEFTUzogU2hvdWxkIGNvbnZlcnQgcmdiYSgxMCwyMCwzMCw0MCkgdG8geyJyIjoxMCwi
ZyI6MjAsImIiOjMwLCJhIjoxfS4KK1BBU1M6IFNob3VsZCBjb252ZXJ0IHJnYigxMCAyMCAzMCAv
IDQwJSkgdG8geyJyIjoxMCwiZyI6MjAsImIiOjMwLCJhIjowLjR9LgorUEFTUzogU2hvdWxkIGNv
bnZlcnQgI2EwQWEwQSB0byB7InIiOjE2MCwiZyI6MTcwLCJiIjoxMCwiYSI6MX0uCitQQVNTOiBT
aG91bGQgY29udmVydCByZ2IoMTAlIDIwJSAzMCUgLyA0MCUpIHRvIHsiciI6MjUuNSwiZyI6NTEs
ImIiOjc2LjUsImEiOjAuNH0uCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9t
b2RlbC9jb2xvci5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL21vZGVsL2NvbG9yLmh0bWwK
aW5kZXggMDQwZDJmNzRkMzE2ODZmNGFiNjNlNDMyMjM5N2UyZDI3NjIyZTYzMi4uZDg1YmNhMDQz
ZGUwODUzMWU1NjhkNmJkMGFjMWMwZTc4ODkyZmViNSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL21vZGVsL2NvbG9yLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL21v
ZGVsL2NvbG9yLmh0bWwKQEAgLTY3Miw2ICs2NzIsMjUgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAg
ICAgIH0KICAgICB9KTsKIAorICAgIHN1aXRlLmFkZFRlc3RDYXNlKHsKKyAgICAgICAgbmFtZTog
IldJLkNvbG9yLnRvUHJvdG9jb2wiLAorICAgICAgICBkZXNjcmlwdGlvbjogIlRlc3Qgc2VyaWFs
aXphdGlvbiBvZiBXSS5Db2xvciBpbnRvIERPTS5SR0JBQ29sb3IuIiwKKyAgICAgICAgdGVzdCgp
IHsKKyAgICAgICAgICAgIGZ1bmN0aW9uIHRlc3RJbnB1dChpbnB1dCwgZXhwZWN0ZWQpIHsKKyAg
ICAgICAgICAgICAgICBsZXQgY29sb3IgPSBXSS5Db2xvci5mcm9tU3RyaW5nKGlucHV0KTsKKyAg
ICAgICAgICAgICAgICBsZXQgYWN0dWFsID0gY29sb3IudG9Qcm90b2NvbCgpOworICAgICAgICAg
ICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0U2hhbGxvd0VxdWFsKGFjdHVhbCwgZXhwZWN0ZWQs
IGBTaG91bGQgY29udmVydCAke2lucHV0fSB0byAke0pTT04uc3RyaW5naWZ5KGV4cGVjdGVkKX0u
YCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRlc3RJbnB1dCgicmdiYSgxMCwyMCwz
MCw0MCkiLCB7cjogMTAsIGc6IDIwLCBiOiAzMCwgYTogMX0pOworICAgICAgICAgICAgdGVzdElu
cHV0KCJyZ2IoMTAgMjAgMzAgLyA0MCUpIiwge3I6IDEwLCBnOiAyMCwgYjogMzAsIGE6IDAuNH0p
OworICAgICAgICAgICAgdGVzdElucHV0KCIjYTBBYTBBIiwge3I6IDE2MCwgZzogMTcwLCBiOiAx
MCwgYTogMX0pOworICAgICAgICAgICAgdGVzdElucHV0KCJyZ2IoMTAlIDIwJSAzMCUgLyA0MCUp
Iiwge3I6IDI1LjUsIGc6IDUxLCBiOiA3Ni41LCBhOiAwLjR9KTsKKworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9KTsKKwogICAgIHN1aXRlLnJ1blRlc3RDYXNlc0Fu
ZEZpbmlzaCgpOwogfQogPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvdW5pdC10ZXN0cy90ZXN0LWhhcm5lc3MtZXhwZWN0LWZ1bmN0aW9ucy1hc3luYy1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvdW5pdC10ZXN0cy90ZXN0LWhhcm5lc3MtZXhw
ZWN0LWZ1bmN0aW9ucy1hc3luYy1leHBlY3RlZC50eHQKaW5kZXggOTg5MDAzMzgzZDViNmE5YWNj
NWNhNWM1MDVjMDY1ODJkOGY1MzZiNi4uMGU5N2Q2YTBiNzgyYmI0YTZjYjFhODcwMWIxMDJlZTBk
YmU2MWYxNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3VuaXQtdGVzdHMvdGVz
dC1oYXJuZXNzLWV4cGVjdC1mdW5jdGlvbnMtYXN5bmMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91
dFRlc3RzL2luc3BlY3Rvci91bml0LXRlc3RzL3Rlc3QtaGFybmVzcy1leHBlY3QtZnVuY3Rpb25z
LWFzeW5jLWV4cGVjdGVkLnR4dApAQCAtMTcsNiArMTcsNyBAQCBUaGUgZm9sbG93aW5nIGFzc2Vy
dGlvbiBpcyBleHBlY3RlZCB0byBmYWlsLgogRkFJTDogU2hvdWxkIHByb2R1Y2UgYW4gZXhjZXB0
aW9uLgogICAgIEV4cGVjdGVkOiBub3QgbnVsbAogICAgIEFjdHVhbDogbnVsbAorUEFTUzogRXhj
ZXB0aW9uLXByb2R1Y2luZyB3b3JrIHNob3VsZCBub3QgcmV0dXJuIGEgdmFsdWUKIFBBU1M6IFJl
amVjdGVkIHZhbHVlIHNob3VsZCBiZSB0aGUgcmV0dXJuZWQgdmFsdWUuCiAKIC0tIFJ1bm5pbmcg
dGVzdCBjYXNlOiBleHBlY3RFeGNlcHRpb24uQXN5bmNXb3JrVGhhdFJlamVjdHMKQEAgLTMwLDYg
KzMxLDkgQEAgVGhlIGZvbGxvd2luZyBhc3NlcnRpb24gaXMgZXhwZWN0ZWQgdG8gZmFpbC4KIEZB
SUw6IFNob3VsZCBwcm9kdWNlIGFuIGV4Y2VwdGlvbi4KICAgICBFeHBlY3RlZDogbm90IG51bGwK
ICAgICBBY3R1YWw6IG51bGwKK0ZBSUw6IEV4Y2VwdGlvbi1wcm9kdWNpbmcgd29yayBzaG91bGQg
bm90IHJldHVybiBhIHZhbHVlCisgICAgRXhwZWN0ZWQ6IHVuZGVmaW5lZAorICAgIEFjdHVhbDog
NDIKIFBBU1M6IFJlamVjdGVkIHZhbHVlIHNob3VsZCBiZSB0aGUgcmV0dXJuZWQgdmFsdWUuCiAK
IC0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBleHBlY3RFeGNlcHRpb24uQXN5bmNXb3JrVGhhdFJlc29s
dmVzSW1wbGljaXRseQpAQCAtMzcsNSArNDEsNiBAQCBUaGUgZm9sbG93aW5nIGFzc2VydGlvbiBp
cyBleHBlY3RlZCB0byBmYWlsLgogRkFJTDogU2hvdWxkIHByb2R1Y2UgYW4gZXhjZXB0aW9uLgog
ICAgIEV4cGVjdGVkOiBub3QgbnVsbAogICAgIEFjdHVhbDogbnVsbAorUEFTUzogRXhjZXB0aW9u
LXByb2R1Y2luZyB3b3JrIHNob3VsZCBub3QgcmV0dXJuIGEgdmFsdWUKIFBBU1M6IEltcGxpY2l0
bHkgcmVzb2x2ZWQgdmFsdWUgc2hvdWxkIGJlIHVuZGVmaW5lZC4KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418966</attachid>
            <date>2021-02-02 00:17:05 -0800</date>
            <delta_ts>2021-02-02 01:02:42 -0800</delta_ts>
            <desc>Patch v1.2</desc>
            <filename>bug-221062-20210202001704.patch</filename>
            <type>text/plain</type>
            <size>55377</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyMTkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
Y2NiOGVjOTdkNzEwNTAwZjQ3MDEwYWQ4NzdkN2ZiNzAzNGI0NGMxLi5iZDBhYzU5NTI0NmRjYjk0
ZTM1YjBkZGNmN2ZkYWQ5MTUyOGNhYzgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAyMS0wMi0wMSAgQkogQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KKworICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBpbXBsZW1lbnQgdGhlIGJhc2ljcyBmb3Igc2hvd2luZy9oaWRp
bmcgZ3JpZCBvdmVybGF5cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjIxMDYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGV2aW4gUm91c3NvLgorCisg
ICAgICAgIEFkZCBuZXcgY29tbWFuZHMgdG8gc2hvdyBhbmQgaGlkZSBDU1MgZ3JpZCBvdmVybGF5
czoKKworICAgICAgICAgICAgLSBET00uc2hvd0dyaWRPdmVybGF5CisgICAgICAgICAgICAtIERP
TS5oaWRlR3JpZE92ZXJsYXkKKworICAgICAgICAqIGluc3BlY3Rvci9wcm90b2NvbC9ET00uanNv
bjoKKwogMjAyMS0wMi0wMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtKU0NdIFR5cGVkQXJyYXkjZmlsbCBzaG91bGQgYmUgaW1wbGVtZW50ZWQgaW4gQysr
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggNjcyOGVlZGU5MWVjODQyNDAxZjE3NmRhYzQ4OWQ1ZmQwZTU1Y2ZlMi4u
MWI2YzQ0ZmNhOWNjYWI2ZDYzMWE1MDlhODI0ZTVjOGJjYWVhNWU4NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDU4IEBACisyMDIxLTAyLTAxICBCSiBCdXJnICA8YmJ1cmdAYXBwbGUuY29tPgorCisg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IGltcGxlbWVudCB0aGUgYmFzaWNzIGZvciBzaG93aW5nL2hp
ZGluZyBncmlkIG92ZXJsYXlzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMjEwNjIKKworICAgICAgICBSZXZpZXdlZCBieSBEZXZpbiBSb3Vzc28uCisK
KyAgICAgICAgSW1wbGVtZW50IGJhY2tlbmQgY29tbWFuZHMgZm9yIHNob3dpbmcgYW5kIGhpZGlu
ZyBDU1MgZ3JpZCBvdmVybGF5cy4KKyAgICAgICAgVGhpcyBwYXRjaCBkcmF3cyBhIHZlcnkgc2lt
cGxpc3RpYyBncmlkIG92ZXJsYXkuIFN1cHBvcnQgZm9yIHRoZQorICAgICAgICB2YXJpb3VzIGdy
aWQgb3ZlcmxheSBvcHRpb25zIHdpbGwgYmUgYWRkZWQgaW4gbGF0ZXIgcGF0Y2hlcy4KKworICAg
ICAgICBOZXcgdGVzdDogaW5zcGVjdG9yL2RvbS9zaG93R3JpZE92ZXJsYXkuaHRtbAorCisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3Rvck92ZXJsYXk6OmdyaWRPdmVybGF5Q291bnQgY29uc3QpOgorICAgICAgICBBZGRlZCwg
Zm9yIHRlc3Rpbmcgb25seS4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OnBhaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OnNob3VsZFNob3dPdmVybGF5IGNvbnN0KToK
KyAgICAgICAgSG9vayB1cCB0aGUgcGFpbnRpbmcgb2YgYW55IGFjdGl2ZSBncmlkIG92ZXJsYXlz
LgorCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpzZXRHcmlkT3ZlcmxheUZv
ck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6Y2xlYXJHcmlkT3Zl
cmxheUZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6Y2xlYXJB
bGxHcmlkT3ZlcmxheXMpOgorICAgICAgICBNYWludGFpbiB0aGUgbGlzdCBvZiBhY3RpdmUgZ3Jp
ZCBvdmVybGF5cy4gQSBub2RlIGNhbiBvbmx5CisgICAgICAgIGhhdmUgb25lIGdyaWQgb3Zlcmxh
eSBhdCBhIHRpbWUuCisKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdO
b2RlSGlnaGxpZ2h0KToKKyAgICAgICAgQWRkIGEgbm90ZSBhYm91dCB3aHkgZ3JpZCBvdmVybGF5
cyBhcmUgbm90IGNvbnNpZGVyZWQgd2hlbgorICAgICAgICBjYWxjdWxhdGluZyB0aGUgcnVsZXIg
ZXhjbHVzaW9uIGFyZWEuCisKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmRy
YXdHcmlkT3ZlcmxheSk6IEFkZGVkLgorICAgICAgICBUaGlzIGRyYXdpbmcgY29kZSBleGlzdHMg
dG8gZmxlc2ggb3V0IHRoZSByZXN0IG9mIHRoaXMgcGF0Y2gsCisgICAgICAgIGFuZCBpcyBvYnZp
b3VzbHkgaW5jb21wbGV0ZS4KKworICAgICAgICBEcmF3IGdyaWQgbGluZXMgdGhhdCBleHRlbmQg
dG8gdGhlIGVkZ2Ugb2YgdGhlIHZpZXdwb3J0LAorICAgICAgICBlcXVpdmFsZW50IHRvIGBjb25m
aWcuc2hvd0V4dGVuZGVkR3JpZExpbmVzID0gdHJ1ZWAuCisKKyAgICAgICAgKiBpbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckRPTUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2Vu
dDo6c2hvd0dyaWRPdmVybGF5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50
OjpoaWRlR3JpZE92ZXJsYXkpOgorICAgICAgICBUcmFuc2xhdGUgcHJvdG9jb2wgY29tbWFuZHMg
aW50byBJbnNwZWN0b3JPdmVybGF5IG1ldGhvZCBjYWxscy4KKworICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6Z3Jp
ZE92ZXJsYXlDb3VudCBjb25zdCk6CisgICAgICAgIEFkZGVkLiBUaGlzIGlzIHVzZWQgZm9yIHRl
c3RpbmcgcHVycG9zZXMgb25seS4KKworICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmg6Cisg
ICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaWRsOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJu
YWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6aW5zcGVjdG9yR3JpZE92ZXJs
YXlDb3VudCk6IEFkZGVkLgorCiAyMDIxLTAyLTAxICBQZW5nIExpdSAgPHBlbmcubGl1NkBhcHBs
ZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTjogRnVsbHNjcmVlbiBIVE1MNSB2aWRlbyBzdWJ0
aXRsZXMvY2FwdGlvbnMgYXJlIHNob3duIHR3aWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRl
eCBmZDk3Y2IyMTVkMWZhYmY2ZmJlNGRhMDQ5Nzg2ZDc3ZjMzOWRlMGVkLi4wNmFmNjI4OTNmNzdk
NmZmZTYwMjliZmRkOTU4ODQ3YWFhMGU5OGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSw1NCBAQAorMjAyMS0wMi0wMSAgQkogQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBpbXBsZW1lbnQgdGhlIGJhc2ljcyBmb3Igc2hvd2luZy9o
aWRpbmcgZ3JpZCBvdmVybGF5cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjIxMDYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGV2aW4gUm91c3NvLgor
CisgICAgICAgIEV4cG9zZSBuZXcgRE9NLnNob3dHcmlkT3ZlcmxheSBhbmQgRE9NLmhpZGVHcmlk
T3ZlcmxheSBjb21tYW5kcworICAgICAgICB2aWEgV0kuRE9NTm9kZS4gQWRkIGluaXRpYWwgZW5n
aW5lZXJpbmcgVUkgdG8gdG9nZ2xlIGdyaWQgb3ZlcmxheXMuCisKKyAgICAgICAgTmV3IG1ldGhv
ZHMgYXJlIGNvdmVyZWQgYnkgYSBuZXcgdGVzdDoKKworICAgICAgICAgICAgaW5zcGVjdG9yL2Rv
bS9zaG93R3JpZE92ZXJsYXkuaHRtbAorCisgICAgICAgIEFkZGl0aW9ucyB0byBXSS5ET01NYW5h
Z2VyLnByb3RvdHlwZS5yZXF1ZXN0RG9jdW1lbnQgYXJlIGNvdmVyZWQKKyAgICAgICAgYnkgZXhp
c3RpbmcgdGVzdHMgKGNhbGxiYWNrIGNhc2UpIGFuZCBhIG5ldyB0ZXN0IChwcm9taXNlIGNhc2Up
LgorCisgICAgICAgIEFkZGl0aW9ucyB0byBXSS5Db2xvciBhcmUgY292ZXJlZCBieSBhIG5ldyB0
ZXN0IGNhc2UgaW46CisKKyAgICAgICAgICAgIGluc3BlY3Rvci9tb2RlbC9jb2xvci5odG1sCisK
KyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0RPTU1hbmFnZXIuanM6CisgICAg
ICAgIChXSS5ET01NYW5hZ2VyLnByb3RvdHlwZS5yZXF1ZXN0RG9jdW1lbnQpOgorICAgICAgICAo
V0kuRE9NTWFuYWdlci5wcm90b3R5cGUuX3JlcXVlc3REb2N1bWVudFdpdGhQcm9taXNlKToKKyAg
ICAgICAgRHJpdmUtYnk6IHVwZ3JhZGUgcmVxdWVzdERvY3VtZW50KCkgdG8gcmV0dXJuIGEgcHJv
bWlzZSBpZgorICAgICAgICBubyBjYWxsYmFjayBhcmd1bWVudCB3YXMgcGFzc2VkLiBUaGlzIGlz
IHVzZWQgYnkgYSBuZXcgdGVzdC4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL0Nv
bG9yLmpzOgorICAgICAgICAoV0kuQ29sb3IucHJvdG90eXBlLnRvUHJvdG9jb2wpOiBBZGRlZC4g
VGhlIHByb3RvY29sIG9iamVjdCBpcworICAgICAgICBET00uUkdCQUNvbG9yLCB3aGljaCBpcyB0
aGUgc2FtZSB0aGluZyBhcyBXSS5Db2xvci5Gb3JtYXQuUkdCQS4KKworICAgICAgICAqIFVzZXJJ
bnRlcmZhY2UvTW9kZWxzL0RPTU5vZGUuanM6CisgICAgICAgIChXSS5ET01Ob2RlLnByb3RvdHlw
ZS5zaG93R3JpZE92ZXJsYXkpOgorICAgICAgICAoV0kuRE9NTm9kZS5wcm90b3R5cGUuaGlkZUdy
aWRPdmVybGF5KToKKyAgICAgICAgQWRkZWQuIFRoZXNlIGFyZSB0aGUgbWV0aG9kcyB0aGF0IHRo
ZSByZXN0IG9mIFdlYkluc3BlY3RvclVJIHVzZXMKKyAgICAgICAgdG8gaW50ZXJhY3Qgd2l0aCBn
cmlkIG92ZXJsYXlzIGZvciBhIHBhcnRpY3VsYXIgbm9kZS4gTm90ZSB0aGF0CisgICAgICAgIHRo
ZXNlIG1ldGhvZHMgcmV0dXJuIGVpdGhlciBhbiB1bnNldHRsZWQgcHJvbWlzZSAoZnJvbSB0aGUg
YWdlbnQgY2FsbCkKKyAgICAgICAgb3IgYSByZWplY3RlZCBwcm9taXNlIChpbiB0aGUgY2FzZSB0
aGF0IHRoZSBub2RlIGlzIGRlc3Ryb3llZCkuCisgICAgICAgIFRoaXMgYWxsb3dzIHRlc3QgY2Fz
ZXMgdG8gYGF3YWl0YCBiZWZvcmUgY2hlY2tpbmcgdGhlIGdyaWQgb3ZlcmxheSBjb3VudC4KKwor
ICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGVzdC9UZXN0SGFybmVzcy5qczoKKyAgICAgICAgKFRl
c3RIYXJuZXNzLnByb3RvdHlwZS5leHBlY3RFeGNlcHRpb24pOiBJbXByb3ZlIGxvZ2dpbmcgb3V0
cHV0CisgICAgICAgIHdoZW4gSW5zcGVjdG9yVGVzdC5leHBlY3RFeGNlcHRpb24gZG9lcyBub3Qg
Y2F0Y2ggYW4gZXhjZXB0aW9uLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9Db250
ZXh0TWVudVV0aWxpdGllcy5qczoKKyAgICAgICAgQWRkIHNvbWUgZW5naW5lZXJpbmctb25seSBj
b250ZXh0IG1lbnUgaXRlbXMgZm9yIHNob3dpbmcvaGlkaW5nCisgICAgICAgIGdyaWQgb3Zlcmxh
eXMgdG8gRE9NVHJlZUVsZW1lbnRzIGluIHRoZSBFbGVtZW50cyBUYWIuCisKKyAgICAgICAgVGhl
c2UgYXJlIGluIHBsYWNlIGZvciBkZXZlbG9wbWVudCBwdXJwb3NlcyBhbmQgc2hvdWxkIGV2ZW50
dWFsbHkKKyAgICAgICAgYmUgcmVtb3ZlZCB3aGVuIG5vIGxvbmdlciBuZWVkZWQuCisKIDIwMjEt
MDItMDEgIFBhdHJpY2sgQW5nbGUgIDxwYW5nbGVAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JF
U1NJT04ocjI3MDYzNyk6IFdlYiBJbnNwZWN0b3I6IEZpbHRlcmluZyBmaWVsZCBubyBsb25nZXIg
c2hvd3MgaW4gQ29tcHV0ZWQgcGFuZWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvcHJvdG9jb2wvRE9NLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3Byb3RvY29sL0RPTS5qc29uCmluZGV4IDk5OGJjNGFmZTY4ZWM3MDUwMmEwMDliN2Jm
NWVkMWRlOTc1OGFiMzEuLmIyNjNmOTIyZGRlMTA5NWZkMmYzMGQ3M2MzYzI0Y2M5OGY0ZDg4NDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvRE9N
Lmpzb24KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9ET00u
anNvbgpAQCAtNDkzLDYgKzQ5MywyOCBAQAogICAgICAgICAgICAgXSwKICAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJIaWdobGlnaHRzIG93bmVyIGVsZW1lbnQgb2YgdGhlIGZyYW1lIHdpdGgg
Z2l2ZW4gaWQuIgogICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJz
aG93R3JpZE92ZXJsYXkiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlNob3dzIGEgZ3Jp
ZCBvdmVybGF5IGZvciBhIG5vZGUgdGhhdCBiZWdpbnMgYSAnZ3JpZCcgbGF5b3V0IGNvbnRleHQu
IFRoZSBjb21tYW5kIGhhcyBubyBlZmZlY3QgaWYgPGNvZGU+bm9kZUlkPC9jb2RlPiBpcyBpbnZh
bGlkIG9yIHRoZSBhc3NvY2lhdGVkIG5vZGUgZG9lcyBub3QgYmVnaW4gYSAnZ3JpZCcgbGF5b3V0
IGNvbnRleHQuIEEgbm9kZSBjYW4gb25seSBoYXZlIG9uZSBncmlkIG92ZXJsYXkgYXQgYSB0aW1l
OyBzdWJzZXF1ZW50IGNhbGxzIHdpdGggdGhlIHNhbWUgPGNvZGU+bm9kZUlkPC9jb2RlPiB3aWxs
IG92ZXJyaWRlIGVhcmxpZXIgY2FsbHMuIiwKKyAgICAgICAgICAgICJ0YXJnZXRUeXBlcyI6IFsi
cGFnZSJdLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJub2RlSWQiLCAiJHJlZiI6ICJOb2RlSWQiLCAiZGVzY3JpcHRpb24iOiAiVGhlIG5v
ZGUgZm9yIHdoaWNoIGEgZ3JpZCBvdmVybGF5IHNob3VsZCBiZSBzaG93bi4iIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJncmlkQ29sb3IiLCAiJHJlZiI6ICJSR0JBQ29sb3IiLCAiZGVz
Y3JpcHRpb24iOiAiVGhlIHByaW1hcnkgY29sb3IgdG8gdXNlIGZvciB0aGUgZ3JpZCBvdmVybGF5
LiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNob3dMaW5lTmFtZXMiLCAidHlwZSI6
ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlNob3cgbGFiZWxz
IGZvciBncmlkIGxpbmUgbmFtZXMuIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHZhbHVl
IGlzIGZhbHNlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNob3dMaW5lTnVtYmVy
cyIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAi
U2hvdyBsYWJlbHMgZm9yIGdyaWQgbGluZSBudW1iZXJzLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUg
ZGVmYXVsdCB2YWx1ZSBpcyBmYWxzZS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJz
aG93RXh0ZW5kZWRHcmlkbGluZXMiLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1
ZSwgImRlc2NyaXB0aW9uIjogIlNob3cgZ3JpZCBsaW5lcyB0aGF0IGV4dGVuZCBiZXlvbmQgdGhl
IGJvdW5kcyBvZiB0aGUgZ3JpZC4gSWYgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdmFsdWUg
aXMgZmFsc2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2hvd1RyYWNrU2l6ZXMi
LCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlNo
b3cgZ3JpZCB0cmFjayBzaXplIGluZm9ybWF0aW9uLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZGVm
YXVsdCB2YWx1ZSBpcyBmYWxzZS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzaG93
QXJlYU5hbWVzIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlw
dGlvbiI6ICJTaG93IGxhYmVscyBmb3IgZ3JpZCBhcmVhIG5hbWVzLiBJZiBub3Qgc3BlY2lmaWVk
LCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBmYWxzZS4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAg
fSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiaGlkZUdyaWRPdmVybGF5IiwKKyAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJIaWRlcyBhIGdyaWQgb3ZlcmxheSBmb3IgYSBub2Rl
IHRoYXQgYmVnaW5zIGEgJ2dyaWQnIGxheW91dCBjb250ZXh0LiBUaGUgY29tbWFuZCBoYXMgbm8g
ZWZmZWN0IGlmIDxjb2RlPm5vZGVJZDwvY29kZT4gaXMgc3BlY2lmaWVkIGFuZCBpbnZhbGlkLCBv
ciBpZiB0aGVyZSBpcyBub3QgY3VycmVudGx5IGFuIG92ZXJsYXkgc2V0IGZvciB0aGUgPGNvZGU+
bm9kZUlkPC9jb2RlPi4iLAorICAgICAgICAgICAgInRhcmdldFR5cGVzIjogWyJwYWdlIl0sCisg
ICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5v
ZGVJZCIsICIkcmVmIjogIk5vZGVJZCIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6
ICJUaGUgbm9kZSBmb3Igd2hpY2ggYSBncmlkIG92ZXJsYXkgc2hvdWxkIGJlIGhpZGRlbi4gSWYg
YSA8Y29kZT5ub2RlSWQ8L2NvZGU+IGlzIG5vdCBzcGVjaWZpZWQsIGFsbCBncmlkIG92ZXJsYXlz
IHdpbGwgYmUgaGlkZGVuLiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAogICAgICAgICB7
CiAgICAgICAgICAgICAibmFtZSI6ICJwdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQiLAogICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIlJlcXVlc3RzIHRoYXQgdGhlIG5vZGUgaXMgc2VudCB0byB0
aGUgY2FsbGVyIGdpdmVuIGl0cyBwYXRoLiIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggNzM0ZThiNzg1NGZkMDMxODczNDI4YWNl
ODg1MDQ5ZGRlNjYxNzMyYi4uODcyOGZiNzJmYTA0Mjc5NmRjOGJkZjVjOTFlODI0MmJkMDc1NWY2
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmNwcApAQCAtMzYxLDYgKzM2MSwxMSBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmdldEhp
Z2hsaWdodChJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQmIGhpZ2hsaWdodCwgSQogICAgIG1f
b3ZlcmxheS0+Z2V0SGlnaGxpZ2h0KGhpZ2hsaWdodCwgY29vcmRpbmF0ZVN5c3RlbSk7CiB9CiAK
K3Vuc2lnbmVkIEluc3BlY3RvckNvbnRyb2xsZXI6OmdyaWRPdmVybGF5Q291bnQoKSBjb25zdAor
eworICAgIHJldHVybiBtX292ZXJsYXktPmdyaWRPdmVybGF5Q291bnQoKTsKK30KKwogYm9vbCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpzaG91bGRTaG93T3ZlcmxheSgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1fb3ZlcmxheS0+c2hvdWxkU2hvd092ZXJsYXkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IDFjYmQ0NTJmZmYzZmMzODYwNTBk
YjhhMGVhZDMzYjUwMTE2ZDgxZjUuLjc4NGJmNDgyZmQ2OGRhNjhlMWYzOGZkNWNkNmJjZWRjODk3
MWRmZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuaApAQCAtMTAxLDkgKzEwMSwxMSBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCB3aWxsQ29tcG9zaXRlKEZyYW1lJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkaWRDb21w
b3NpdGUoRnJhbWUmKTsKIAorICAgIC8vIFRlc3Rpbmcgc3VwcG9ydC4KICAgICBib29sIGlzVW5k
ZXJUZXN0KCkgY29uc3QgeyByZXR1cm4gbV9pc1VuZGVyVGVzdDsgfQogICAgIHZvaWQgc2V0SXNV
bmRlclRlc3QoYm9vbCBpc1VuZGVyVGVzdCkgeyBtX2lzVW5kZXJUZXN0ID0gaXNVbmRlclRlc3Q7
IH0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQoY29u
c3QgU3RyaW5nJiBzY3JpcHQpOworICAgIFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIGdyaWRPdmVy
bGF5Q291bnQoKSBjb25zdDsKIAogICAgIEluc3BlY3RvckNsaWVudCogaW5zcGVjdG9yQ2xpZW50
KCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0b3JDbGllbnQ7IH0KICAgICBJbnNwZWN0b3JGcm9u
dGVuZENsaWVudCogaW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2lu
c3BlY3RvckZyb250ZW5kQ2xpZW50OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yT3ZlcmxheS5jcHAKaW5kZXggZDdhNTdhN2YxNTFhMDlkNDk5NzIyMDllZmIxOWJkZTE5
NjkyYzg5NC4uYzk1ZjIwZTk1NTJiNzlmZWM5M2FiYTY4YzdjNTU5ZjExYTU5MDg3ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcApAQCAtMSw2ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDYgKzQzLDcg
QEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyaWRQb3NpdGlvbnNSZXNvbHZlci5oIgog
I2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5j
bHVkZSAiSW50UmVjdC5oIgpAQCAtNTMsNiArNTQsNyBAQAogI2luY2x1ZGUgIlBzZXVkb0VsZW1l
bnQuaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJCb3hNb2RlbE9i
amVjdC5oIgorI2luY2x1ZGUgIlJlbmRlckdyaWQuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUu
aCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpAQCAt
NDA5LDYgKzQxMSw5IEBAIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6cGFpbnQoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQogICAgICAgICBydWxlckV4Y2x1c2lvbi50aXRsZVBhdGggPSBub2RlUnVs
ZXJFeGNsdXNpb24udGl0bGVQYXRoOwogICAgIH0KIAorICAgIGZvciAoY29uc3QgSW5zcGVjdG9y
T3ZlcmxheTo6R3JpZCYgZ3JpZE92ZXJsYXkgOiBtX2FjdGl2ZUdyaWRPdmVybGF5cykKKyAgICAg
ICAgZHJhd0dyaWRPdmVybGF5KGNvbnRleHQsIGdyaWRPdmVybGF5KTsKKwogICAgIGlmICghbV9w
YWludFJlY3RzLmlzRW1wdHkoKSkKICAgICAgICAgZHJhd1BhaW50UmVjdHMoY29udGV4dCwgbV9w
YWludFJlY3RzKTsKIApAQCAtNDk1LDcgKzUwMCw3IEBAIGJvb2wgSW5zcGVjdG9yT3ZlcmxheTo6
c2hvdWxkU2hvd092ZXJsYXkoKSBjb25zdAogewogICAgIC8vIERvbid0IHNob3cgdGhlIG92ZXJs
YXkgd2hlbiBtX3Nob3dSdWxlcnNEdXJpbmdFbGVtZW50U2VsZWN0aW9uIGlzIHRydWUsIGFzIGl0
J3Mgb25seSBzdXBwb3NlZAogICAgIC8vIHRvIGhhdmUgYW4gZWZmZWN0IHdoZW4gZWxlbWVudCBz
ZWxlY3Rpb24gaXMgYWN0aXZlIChlLmcuIGEgbm9kZSBpcyBob3ZlcmVkKS4KLSAgICByZXR1cm4g
bV9oaWdobGlnaHROb2RlIHx8IG1faGlnaGxpZ2h0Tm9kZUxpc3QgfHwgbV9oaWdobGlnaHRRdWFk
IHx8IG1faW5kaWNhdGluZyB8fCBtX3Nob3dQYWludFJlY3RzIHx8IG1fc2hvd1J1bGVyczsKKyAg
ICByZXR1cm4gbV9oaWdobGlnaHROb2RlIHx8IG1faGlnaGxpZ2h0Tm9kZUxpc3QgfHwgbV9oaWdo
bGlnaHRRdWFkIHx8IG1faW5kaWNhdGluZyB8fCBtX3Nob3dQYWludFJlY3RzIHx8IG1fc2hvd1J1
bGVycyB8fCBtX2FjdGl2ZUdyaWRPdmVybGF5cy5zaXplKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9y
T3ZlcmxheTo6dXBkYXRlKCkKQEAgLTU1NSw2ICs1NjAsNDYgQEAgdm9pZCBJbnNwZWN0b3JPdmVy
bGF5OjpzZXRTaG93UnVsZXJzKGJvb2wgc2hvd1J1bGVycykKICAgICB1cGRhdGUoKTsKIH0KIAor
Ym9vbCBJbnNwZWN0b3JPdmVybGF5OjpyZW1vdmVHcmlkT3ZlcmxheUZvck5vZGUoTm9kZSYgbm9k
ZSkKK3sKKyAgICAvLyBUcnkgdG8gcmVtb3ZlIGBub2RlYC4gQWxzbyBjbGVhciBhbnkgZ3JpZCBv
dmVybGF5cyB3aG9zZSBXZWFrUHRyPE5vZGU+IGhhcyBiZWVuIGNsZWFyZWQuCisgICAgcmV0dXJu
IG1fYWN0aXZlR3JpZE92ZXJsYXlzLnJlbW92ZUFsbE1hdGNoaW5nKFsmXSAoY29uc3QgSW5zcGVj
dG9yT3ZlcmxheTo6R3JpZCYgZ3JpZE92ZXJsYXkpIHsKKyAgICAgICAgcmV0dXJuICFncmlkT3Zl
cmxheS5ncmlkTm9kZSB8fCBncmlkT3ZlcmxheS5ncmlkTm9kZS5nZXQoKSA9PSAmbm9kZTsKKyAg
ICB9KTsKK30KKworRXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JPdmVybGF5OjpzZXRHcmlk
T3ZlcmxheUZvck5vZGUoTm9kZSYgbm9kZSwgY29uc3QgSW5zcGVjdG9yT3ZlcmxheTo6R3JpZDo6
Q29uZmlnJiBncmlkT3ZlcmxheUNvbmZpZykKK3sKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gbm9kZS5yZW5kZXJlcigpOworICAgIGlmICghaXM8UmVuZGVyR3JpZD4ocmVuZGVyZXIpKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vZGUgZG9lcyBub3QgaW5pdGlhdGUgYSBn
cmlkIGNvbnRleHQiKTsKKworICAgIHJlbW92ZUdyaWRPdmVybGF5Rm9yTm9kZShub2RlKTsKKwor
ICAgIG1fYWN0aXZlR3JpZE92ZXJsYXlzLmFwcGVuZCh7IG1ha2VXZWFrUHRyKG5vZGUpLCBncmlk
T3ZlcmxheUNvbmZpZyB9KTsKKworICAgIHVwZGF0ZSgpOworCisgICAgcmV0dXJuIHsgfTsKK30K
KworRXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JPdmVybGF5OjpjbGVhckdyaWRPdmVybGF5
Rm9yTm9kZShOb2RlJiBub2RlKQoreworICAgIGlmICghcmVtb3ZlR3JpZE92ZXJsYXlGb3JOb2Rl
KG5vZGUpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vIGdyaWQgb3ZlcmxheSBl
eGlzdHMgZm9yIHRoZSBub2RlLCBzbyBjYW5ub3QgY2xlYXIuIik7CisKKyAgICB1cGRhdGUoKTsK
KworICAgIHJldHVybiB7IH07Cit9CisKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6Y2xlYXJBbGxH
cmlkT3ZlcmxheXMoKQoreworICAgIG1fYWN0aXZlR3JpZE92ZXJsYXlzLmNsZWFyKCk7CisKKyAg
ICB1cGRhdGUoKTsKK30KKwogdm9pZCBJbnNwZWN0b3JPdmVybGF5Ojp1cGRhdGVQYWludFJlY3Rz
VGltZXJGaXJlZCgpCiB7CiAgICAgTW9ub3RvbmljVGltZSBub3cgPSBNb25vdG9uaWNUaW1lOjpu
b3coKTsKQEAgLTU4Nyw2ICs2MzIsOSBAQCBJbnNwZWN0b3JPdmVybGF5OjpSdWxlckV4Y2x1c2lv
biBJbnNwZWN0b3JPdmVybGF5OjpkcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbgogICAgIGlm
IChtX25vZGVIaWdobGlnaHRDb25maWcuc2hvd0luZm8pCiAgICAgICAgIHJ1bGVyRXhjbHVzaW9u
LnRpdGxlUGF0aCA9IGRyYXdFbGVtZW50VGl0bGUoY29udGV4dCwgbm9kZSwgcnVsZXJFeGNsdXNp
b24uYm91bmRzKTsKIAorICAgIC8vIE5vdGU6IHNpbmNlIGdyaWQgb3ZlcmxheXMgbWF5IGNvdmVy
IHRoZSBlbnRpcmUgdmlld3BvcnQgd2l0aCBsaXR0bGUgbGluZXMsIGdyaWQgb3ZlcmxheSBib3Vu
ZHMKKyAgICAvLyBhcmUgbm90IGNvbnNpZGVyZWQgYXMgcGFydCBvZiB0aGUgY29tYmluZWQgYm91
bmRzIHVzZWQgYXMgdGhlIHJ1bGVyIGV4Y2x1c2lvbiBhcmVhLgorICAgIAogICAgIHJldHVybiBy
dWxlckV4Y2x1c2lvbjsKIH0KIApAQCAtMTA5Miw0ICsxMTQwLDgyIEBAIFBhdGggSW5zcGVjdG9y
T3ZlcmxheTo6ZHJhd0VsZW1lbnRUaXRsZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIE5vZGUm
IG5vZGUsIGNvCiAgICAgcmV0dXJuIHBhdGg7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6
ZHJhd0dyaWRPdmVybGF5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW5zcGVjdG9y
T3ZlcmxheTo6R3JpZCYgZ3JpZE92ZXJsYXkpCit7CisgICAgLy8gSWYgdGhlIG5vZGUgV2Vha1B0
ciBoYXMgYmVlbiBjbGVhcmVkLCB0aGVuIHRoZSBub2RlIGlzIGdvbmUgYW5kIHRoZXJlJ3Mgbm90
aGluZyB0byBkcmF3LgorICAgIGlmICghZ3JpZE92ZXJsYXkuZ3JpZE5vZGUpIHsKKyAgICAgICAg
bV9hY3RpdmVHcmlkT3ZlcmxheXMucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdIChjb25zdCBJbnNwZWN0
b3JPdmVybGF5OjpHcmlkJiBncmlkT3ZlcmxheSkgeworICAgICAgICAgICAgcmV0dXJuICFncmlk
T3ZlcmxheS5ncmlkTm9kZTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgLy8gQWx3YXlzIHJlLWNoZWNrIGJlY2F1c2UgdGhlIG5vZGUncyByZW5kZXJlciBt
YXkgaGF2ZSBjaGFuZ2VkIHNpbmNlIGJlaW5nIGFkZGVkLgorICAgIC8vIElmIHJlbmRlcmVyIGlz
IG5vIGxvbmdlciBhIGdyaWQsIHRoZW4gcmVtb3ZlIHRoZSBncmlkIG92ZXJsYXkgZm9yIHRoZSBu
b2RlLgorICAgIE5vZGUqIG5vZGUgPSBncmlkT3ZlcmxheS5ncmlkTm9kZS5nZXQoKTsKKyAgICBh
dXRvIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIWlzPFJlbmRlckdyaWQ+
KHJlbmRlcmVyKSkgeworICAgICAgICByZW1vdmVHcmlkT3ZlcmxheUZvck5vZGUoKm5vZGUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byogcmVuZGVyR3JpZCA9IGRvd25jYXN0
PFJlbmRlckdyaWQ+KHJlbmRlcmVyKTsKKyAgICBMYXlvdXRSZWN0IHBhZGRpbmdCb3ggPSByZW5k
ZXJHcmlkLT5jbGllbnRCb3hSZWN0KCk7CisgICAgTGF5b3V0UmVjdCBjb250ZW50Qm94ID0gTGF5
b3V0UmVjdChwYWRkaW5nQm94LngoKSArIHJlbmRlckdyaWQtPnBhZGRpbmdMZWZ0KCksIHBhZGRp
bmdCb3gueSgpICsgcmVuZGVyR3JpZC0+cGFkZGluZ1RvcCgpLAorICAgICAgICBwYWRkaW5nQm94
LndpZHRoKCkgLSByZW5kZXJHcmlkLT5wYWRkaW5nTGVmdCgpIC0gcmVuZGVyR3JpZC0+cGFkZGlu
Z1JpZ2h0KCksIHBhZGRpbmdCb3guaGVpZ2h0KCkgLSByZW5kZXJHcmlkLT5wYWRkaW5nVG9wKCkg
LSByZW5kZXJHcmlkLT5wYWRkaW5nQm90dG9tKCkpOworICAgIEZsb2F0UXVhZCBhYnNDb250ZW50
UXVhZCA9IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChjb250ZW50Qm94
KSk7CisgICAgRmxvYXRSZWN0IGdyaWRCb3VuZGluZ0JveCA9IGFic0NvbnRlbnRRdWFkLmJvdW5k
aW5nQm94KCk7CisgICAgRnJhbWVWaWV3KiBwYWdlVmlldyA9IG1fcGFnZS5tYWluRnJhbWUoKS52
aWV3KCk7CisgICAgRmxvYXRTaXplIGNvbnRlbnRJbnNldCgwLCBwYWdlVmlldy0+dG9wQ29udGVu
dEluc2V0KFNjcm9sbFZpZXc6OlRvcENvbnRlbnRJbnNldFR5cGU6OldlYkNvcmVPclBsYXRmb3Jt
Q29udGVudEluc2V0KSk7CisgICAgRmxvYXRTaXplIHZpZXdwb3J0U2l6ZSA9IHBhZ2VWaWV3LT5z
aXplRm9yVmlzaWJsZUNvbnRlbnQoKTsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIg
c2F2ZXIoY29udGV4dCk7CisKKyAgICAvLyBEcmF3aW5nIGNvZGUgaXMgcmVsYXRpdmUgdG8gdGhl
IHZpc2libGUgdmlld3BvcnQgYXJlYS4KKyAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCBjb250ZW50
SW5zZXQuaGVpZ2h0KCkpOworICAgIAorICAgIC8vIEZJWE1FOiBpZiBzaG93RXh0ZW5kZWRHcmlk
bGluZXMgaXMgZmFsc2UsIHNldCB0aGUgY2xpcCBwYXRoIHRvIHRoZSBncmlkQm91bmRpbmdCb3gg
KG1heWJlIGluZmxhdGVkPykKKworICAgIC8vIERyYXcgY29sdW1ucyBhbmQgcm93cy4KKyAgICBj
b250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxKTsKKyAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9y
KGdyaWRPdmVybGF5LmNvbmZpZy5ncmlkQ29sb3IpOworCisgICAgYXV0byBjb2x1bW5Qb3NpdGlv
bnMgPSByZW5kZXJHcmlkLT5jb2x1bW5Qb3NpdGlvbnMoKTsKKyAgICBhdXRvIGNvbHVtbldpZHRo
cyA9IHJlbmRlckdyaWQtPnRyYWNrU2l6ZXNGb3JDb21wdXRlZFN0eWxlKEdyaWRUcmFja1Npemlu
Z0RpcmVjdGlvbjo6Rm9yQ29sdW1ucyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNv
bHVtblBvc2l0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICAvLyBDb2x1bW4gcG9zaXRpb25z
IGFyZSAoYXBwYXJlbnRseSkgcmVsYXRpdmUgdG8gdGhlIGVsZW1lbnQncyBjb250ZW50IGFyZWEu
CisgICAgICAgIGF1dG8gcG9zaXRpb24gPSBjb2x1bW5Qb3NpdGlvbnNbaV0gKyBncmlkQm91bmRp
bmdCb3gueCgpOworCisgICAgICAgIFBhdGggY29sdW1uUGF0aHM7CisgICAgICAgIGNvbHVtblBh
dGhzLm1vdmVUbyh7IHBvc2l0aW9uLCAwIH0pOworICAgICAgICBjb2x1bW5QYXRocy5hZGRMaW5l
VG8oeyBwb3NpdGlvbiwgdmlld3BvcnRTaXplLmhlaWdodCgpIH0pOworCisgICAgICAgIGlmIChp
IDwgY29sdW1uV2lkdGhzLnNpemUoKSkgeworICAgICAgICAgICAgYXV0byB3aWR0aCA9IGNvbHVt
bldpZHRoc1tpXTsKKyAgICAgICAgICAgIGNvbHVtblBhdGhzLm1vdmVUbyh7IHBvc2l0aW9uICsg
d2lkdGgsIDAgfSk7CisgICAgICAgICAgICBjb2x1bW5QYXRocy5hZGRMaW5lVG8oeyBwb3NpdGlv
biArIHdpZHRoLCB2aWV3cG9ydFNpemUuaGVpZ2h0KCkgfSk7CisgICAgICAgIH0KKworICAgICAg
ICBjb250ZXh0LnN0cm9rZVBhdGgoY29sdW1uUGF0aHMpOworICAgIH0KKworICAgIGF1dG8gcm93
UG9zaXRpb25zID0gcmVuZGVyR3JpZC0+cm93UG9zaXRpb25zKCk7CisgICAgYXV0byByb3dIZWln
aHRzID0gcmVuZGVyR3JpZC0+dHJhY2tTaXplc0ZvckNvbXB1dGVkU3R5bGUoR3JpZFRyYWNrU2l6
aW5nRGlyZWN0aW9uOjpGb3JSb3dzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcm93
UG9zaXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8gcG9zaXRpb24gPSByb3dQb3Np
dGlvbnNbaV0gKyBncmlkQm91bmRpbmdCb3gueSgpOworCisgICAgICAgIFBhdGggcm93UGF0aHM7
CisgICAgICAgIHJvd1BhdGhzLm1vdmVUbyh7IDAsIHBvc2l0aW9uIH0pOworICAgICAgICByb3dQ
YXRocy5hZGRMaW5lVG8oeyB2aWV3cG9ydFNpemUud2lkdGgoKSwgcG9zaXRpb24gfSk7CisKKyAg
ICAgICAgaWYgKGkgPCByb3dIZWlnaHRzLnNpemUoKSkgeworICAgICAgICAgICAgYXV0byBoZWln
aHQgPSByb3dIZWlnaHRzW2ldOworICAgICAgICAgICAgcm93UGF0aHMubW92ZVRvKHsgMCwgcG9z
aXRpb24gKyBoZWlnaHQgfSk7CisgICAgICAgICAgICByb3dQYXRocy5hZGRMaW5lVG8oeyB2aWV3
cG9ydFNpemUud2lkdGgoKSwgcG9zaXRpb24gKyBoZWlnaHQgfSk7CisgICAgICAgIH0KKworICAg
ICAgICBjb250ZXh0LnN0cm9rZVBhdGgocm93UGF0aHMpOworICAgIH0KK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvck92ZXJsYXkuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5
LmgKaW5kZXggMjQyMjAzNDcyNDBiYzA2ODJhNzVkNjJlMGIxNTBmNTVhNDc3M2RkNS4uZTM5ZGY1
YzIyYzQ3MzczOWRmZjMxYWVhOTljMjE1ZThlZDQ5ZTE3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oCkBAIC0zOSw4ICszOSwxNiBAQAogI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAorbmFtZXNwYWNlIEluc3BlY3RvciB7Cit1c2luZyBFcnJvclN0cmluZyA9
IFN0cmluZzsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit1c2luZyBFcnJvclN0cmluZ09yID0g
RXhwZWN0ZWQ8VCwgRXJyb3JTdHJpbmc+OworfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIEdyYXBoaWNzQ29udGV4dDsKQEAgLTk4LDYgKzEwNiwyNCBAQCBwdWJsaWM6CiAgICAgICAg
IHVzaW5nIEJvdW5kcyA9IEZsb2F0UmVjdDsKICAgICB9OwogCisgICAgc3RydWN0IEdyaWQgewor
ICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisKKyAgICAgICAgc3RydWN0
IENvbmZpZyB7CisgICAgICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisK
KyAgICAgICAgICAgIENvbG9yIGdyaWRDb2xvcjsKKyAgICAgICAgICAgIGJvb2wgc2hvd0xpbmVO
YW1lczsKKyAgICAgICAgICAgIGJvb2wgc2hvd0xpbmVOdW1iZXJzOworICAgICAgICAgICAgYm9v
bCBzaG93RXh0ZW5kZWRHcmlkbGluZXM7CisgICAgICAgICAgICBib29sIHNob3dUcmFja1NpemVz
OworICAgICAgICAgICAgYm9vbCBzaG93QXJlYU5hbWVzOworICAgICAgICB9OworCisgICAgICAg
IFdlYWtQdHI8Tm9kZT4gZ3JpZE5vZGU7CisgICAgICAgIENvbmZpZyBjb25maWc7CisgICAgfTsK
KwogICAgIGVudW0gY2xhc3MgQ29vcmRpbmF0ZVN5c3RlbSB7CiAgICAgICAgIFZpZXcsIC8vIEFk
anVzdHMgZm9yIHRoZSBtYWluIGZyYW1lJ3Mgc2Nyb2xsIG9mZnNldC4KICAgICAgICAgRG9jdW1l
bnQsIC8vIERvZXMgbm90IGFkanVzdCBmb3IgdGhlIG1haW4gZnJhbWUncyBzY3JvbGwgb2Zmc2V0
LgpAQCAtMTIwLDExICsxNDYsMTggQEAgcHVibGljOgogICAgIHZvaWQgc2V0U2hvd1J1bGVyc0R1
cmluZ0VsZW1lbnRTZWxlY3Rpb24oYm9vbCBlbmFibGVkKSB7IG1fc2hvd1J1bGVyc0R1cmluZ0Vs
ZW1lbnRTZWxlY3Rpb24gPSBlbmFibGVkOyB9CiAKICAgICBOb2RlKiBoaWdobGlnaHRlZE5vZGUo
KSBjb25zdDsKKyAgICB1bnNpZ25lZCBncmlkT3ZlcmxheUNvdW50KCkgY29uc3QgeyByZXR1cm4g
bV9hY3RpdmVHcmlkT3ZlcmxheXMuc2l6ZSgpOyB9CiAKICAgICB2b2lkIGRpZFNldFNlYXJjaGlu
Z0Zvck5vZGUoYm9vbCBlbmFibGVkKTsKIAogICAgIHZvaWQgc2V0SW5kaWNhdGluZyhib29sIGlu
ZGljYXRpbmcpOwogCisgICAgLy8gTXVsdGlwbGUgZ3JpZCBvdmVybGF5cyBjYW4gYmUgYWN0aXZl
IGF0IHRoZSBzYW1lIHRpbWUuIFRoZXNlIG1ldGhvZHMKKyAgICAvLyB3aWxsIGZhaWwgaWYgdGhl
IG5vZGUgaXMgbm90IGEgZ3JpZCBvciBpZiB0aGUgbm9kZSBoYXMgYmVlbiBHQydkLgorICAgIElu
c3BlY3Rvcjo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRHcmlkT3ZlcmxheUZvck5vZGUoTm9kZSYs
IGNvbnN0IEluc3BlY3Rvck92ZXJsYXk6OkdyaWQ6OkNvbmZpZyYpOworICAgIEluc3BlY3Rvcjo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBjbGVhckdyaWRPdmVybGF5Rm9yTm9kZShOb2RlJik7CisgICAg
dm9pZCBjbGVhckFsbEdyaWRPdmVybGF5cygpOworCiBwcml2YXRlOgogICAgIHVzaW5nIFRpbWVS
ZWN0UGFpciA9IHN0ZDo6cGFpcjxNb25vdG9uaWNUaW1lLCBGbG9hdFJlY3Q+OwogCkBAIC0xNDEs
OCArMTc0LDEyIEBAIHByaXZhdGU6CiAKICAgICBQYXRoIGRyYXdFbGVtZW50VGl0bGUoR3JhcGhp
Y3NDb250ZXh0JiwgTm9kZSYsIGNvbnN0IEhpZ2hsaWdodDo6Qm91bmRzJik7CiAKKyAgICB2b2lk
IGRyYXdHcmlkT3ZlcmxheShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnNwZWN0b3JPdmVybGF5
OjpHcmlkJik7CisKICAgICB2b2lkIHVwZGF0ZVBhaW50UmVjdHNUaW1lckZpcmVkKCk7CiAKKyAg
ICBib29sIHJlbW92ZUdyaWRPdmVybGF5Rm9yTm9kZShOb2RlJik7CisKICAgICBQYWdlJiBtX3Bh
Z2U7CiAgICAgSW5zcGVjdG9yQ2xpZW50KiBtX2NsaWVudDsKIApAQCAtMTU2LDYgKzE5Myw4IEBA
IHByaXZhdGU6CiAgICAgRGVxdWU8VGltZVJlY3RQYWlyPiBtX3BhaW50UmVjdHM7CiAgICAgVGlt
ZXIgbV9wYWludFJlY3RVcGRhdGVUaW1lcjsKIAorICAgIFZlY3RvcjxJbnNwZWN0b3JPdmVybGF5
OjpHcmlkPiBtX2FjdGl2ZUdyaWRPdmVybGF5czsKKwogICAgIGJvb2wgbV9pbmRpY2F0aW5nIHsg
ZmFsc2UgfTsKICAgICBib29sIG1fc2hvd1BhaW50UmVjdHMgeyBmYWxzZSB9OwogICAgIGJvb2wg
bV9zaG93UnVsZXJzIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggNWNiNThiOWM5OWQ5ZDY5YTBl
ZGIwMzVlNGJlY2QzNGI5MTZmMjczZS4uOWRmMzIxYjljNzYxYTQwOTg1NTJiMGI4Njg5MTY4Mjdm
MTE0NWI2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JET01BZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTExNiw2ICsxMTYsNyBAQAogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRlIDxwYWwvY3J5cHRvL0NyeXB0b0RpZ2Vz
dC5oPgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTEyOSwyNiArMTMwLDI2
IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heFRl
eHRTaXplID0gMTAwMDA7CiBzdGF0aWMgY29uc3QgVUNoYXIgZWxsaXBzaXNVQ2hhcltdID0geyAw
eDIwMjYsIDAgfTsKIAotc3RhdGljIENvbG9yIHBhcnNlQ29sb3IoUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBjb2xvck9iamVjdCkKK3N0YXRpYyBPcHRpb25hbDxDb2xvcj4gcGFyc2VDb2xvcihSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIGNvbG9yT2JqZWN0KQogewogICAgIGlmICghY29sb3JPYmplY3Qp
Ci0gICAgICAgIHJldHVybiBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjazsKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAogICAgIGF1dG8gciA9IGNvbG9yT2JqZWN0LT5nZXRJbnRlZ2VyKFBy
b3RvY29sOjpET006OlJHQkFDb2xvcjo6cktleSk7CiAgICAgYXV0byBnID0gY29sb3JPYmplY3Qt
PmdldEludGVnZXIoUHJvdG9jb2w6OkRPTTo6UkdCQUNvbG9yOjpnS2V5KTsKICAgICBhdXRvIGIg
PSBjb2xvck9iamVjdC0+Z2V0SW50ZWdlcihQcm90b2NvbDo6RE9NOjpSR0JBQ29sb3I6OmJLZXkp
OwogICAgIGlmICghciB8fCAhZyB8fCAhYikKLSAgICAgICAgcmV0dXJuIENvbG9yOjp0cmFuc3Bh
cmVudEJsYWNrOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgYXV0byBhID0g
Y29sb3JPYmplY3QtPmdldERvdWJsZShQcm90b2NvbDo6RE9NOjpSR0JBQ29sb3I6OmFLZXkpOwog
ICAgIGlmICghYSkKLSAgICAgICAgcmV0dXJuIG1ha2VGcm9tQ29tcG9uZW50c0NsYW1waW5nPFNS
R0JBPHVpbnQ4X3Q+PigqciwgKmcsICpiKTsKLSAgICByZXR1cm4gbWFrZUZyb21Db21wb25lbnRz
Q2xhbXBpbmdFeGNlcHRBbHBoYTxTUkdCQTx1aW50OF90Pj4oKnIsICpnLCAqYiwgY29udmVydEZs
b2F0QWxwaGFUbzx1aW50OF90PigqYSkpOworICAgICAgICByZXR1cm4geyBtYWtlRnJvbUNvbXBv
bmVudHNDbGFtcGluZzxTUkdCQTx1aW50OF90Pj4oKnIsICpnLCAqYikgfTsKKyAgICByZXR1cm4g
eyBtYWtlRnJvbUNvbXBvbmVudHNDbGFtcGluZ0V4Y2VwdEFscGhhPFNSR0JBPHVpbnQ4X3Q+Pigq
ciwgKmcsICpiLCBjb252ZXJ0RmxvYXRBbHBoYVRvPHVpbnQ4X3Q+KCphKSkgfTsKIH0KIAogc3Rh
dGljIENvbG9yIHBhcnNlQ29uZmlnQ29sb3IoY29uc3QgU3RyaW5nJiBmaWVsZE5hbWUsIEpTT046
Ok9iamVjdCYgY29uZmlnT2JqZWN0KQogewotICAgIHJldHVybiBwYXJzZUNvbG9yKGNvbmZpZ09i
amVjdC5nZXRPYmplY3QoZmllbGROYW1lKSk7CisgICAgcmV0dXJuIHBhcnNlQ29sb3IoY29uZmln
T2JqZWN0LmdldE9iamVjdChmaWVsZE5hbWUpKS52YWx1ZU9yKENvbG9yOjp0cmFuc3BhcmVudEJs
YWNrKTsKIH0KIAogc3RhdGljIGJvb2wgcGFyc2VRdWFkKFJlZjxKU09OOjpBcnJheT4mJiBxdWFk
QXJyYXksIEZsb2F0UXVhZCogcXVhZCkKQEAgLTEyOTEsOCArMTI5Miw4IEBAIFByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRRdWFkKFJlZjxK
U09OOjpBcnJheT4mCiB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojppbm5lckhpZ2hsaWdodFF1YWQo
c3RkOjp1bmlxdWVfcHRyPEZsb2F0UXVhZD4gcXVhZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBj
b2xvciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvdXRsaW5lQ29sb3IsIE9wdGlvbmFsPGJvb2w+
JiYgdXNlUGFnZUNvb3JkaW5hdGVzKQogewogICAgIGF1dG8gaGlnaGxpZ2h0Q29uZmlnID0gbWFr
ZVVuaXF1ZTxJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6OkNvbmZpZz4oKTsKLSAgICBoaWdo
bGlnaHRDb25maWctPmNvbnRlbnQgPSBwYXJzZUNvbG9yKFdURk1vdmUoY29sb3IpKTsKLSAgICBo
aWdobGlnaHRDb25maWctPmNvbnRlbnRPdXRsaW5lID0gcGFyc2VDb2xvcihXVEZNb3ZlKG91dGxp
bmVDb2xvcikpOworICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudCA9IHBhcnNlQ29sb3IoV1RG
TW92ZShjb2xvcikpLnZhbHVlT3IoQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOworICAgIGhpZ2hs
aWdodENvbmZpZy0+Y29udGVudE91dGxpbmUgPSBwYXJzZUNvbG9yKFdURk1vdmUob3V0bGluZUNv
bG9yKSkudmFsdWVPcihDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7CiAgICAgaGlnaGxpZ2h0Q29u
ZmlnLT51c2VQYWdlQ29vcmRpbmF0ZXMgPSB1c2VQYWdlQ29vcmRpbmF0ZXMgPyAqdXNlUGFnZUNv
b3JkaW5hdGVzIDogZmFsc2U7CiAgICAgbV9vdmVybGF5LT5oaWdobGlnaHRRdWFkKFdURk1vdmUo
cXVhZCksICpoaWdobGlnaHRDb25maWcpOwogfQpAQCAtMTQ1OCw4ICsxNDU5LDggQEAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodEZyYW1l
KGNvbnN0IFByb3RvY29sOjoKICAgICBpZiAoZnJhbWUtPm93bmVyRWxlbWVudCgpKSB7CiAgICAg
ICAgIGF1dG8gaGlnaGxpZ2h0Q29uZmlnID0gbWFrZVVuaXF1ZTxJbnNwZWN0b3JPdmVybGF5OjpI
aWdobGlnaHQ6OkNvbmZpZz4oKTsKICAgICAgICAgaGlnaGxpZ2h0Q29uZmlnLT5zaG93SW5mbyA9
IHRydWU7IC8vIEFsd2F5cyBzaG93IHRvb2x0aXBzIGZvciBmcmFtZXMuCi0gICAgICAgIGhpZ2hs
aWdodENvbmZpZy0+Y29udGVudCA9IHBhcnNlQ29sb3IoV1RGTW92ZShjb2xvcikpOwotICAgICAg
ICBoaWdobGlnaHRDb25maWctPmNvbnRlbnRPdXRsaW5lID0gcGFyc2VDb2xvcihXVEZNb3ZlKG91
dGxpbmVDb2xvcikpOworICAgICAgICBoaWdobGlnaHRDb25maWctPmNvbnRlbnQgPSBwYXJzZUNv
bG9yKFdURk1vdmUoY29sb3IpKS52YWx1ZU9yKENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKKyAg
ICAgICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50T3V0bGluZSA9IHBhcnNlQ29sb3IoV1RGTW92
ZShvdXRsaW5lQ29sb3IpKS52YWx1ZU9yKENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKICAgICAg
ICAgbV9vdmVybGF5LT5oaWdobGlnaHROb2RlKGZyYW1lLT5vd25lckVsZW1lbnQoKSwgKmhpZ2hs
aWdodENvbmZpZyk7CiAgICAgfQogCkBAIC0xNDczLDYgKzE0NzQsNDYgQEAgUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZGVIaWdobGlnaHQoKQogICAg
IHJldHVybiB7IH07CiB9CiAKK0luc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnNob3dHcmlkT3ZlcmxheShJbnNwZWN0b3I6OlByb3RvY29s
OjpET006Ok5vZGVJZCBub2RlSWQsICBSZWY8SlNPTjo6T2JqZWN0PiYmIGdyaWRDb2xvciwgT3B0
aW9uYWw8Ym9vbD4mJiBzaG93TGluZU5hbWVzLCBPcHRpb25hbDxib29sPiYmIHNob3dMaW5lTnVt
YmVycywgT3B0aW9uYWw8Ym9vbD4mJiBzaG93RXh0ZW5kZWRHcmlkbGluZXMsIE9wdGlvbmFsPGJv
b2w+JiYgc2hvd1RyYWNrU2l6ZXMsIE9wdGlvbmFsPGJvb2w+JiYgc2hvd0FyZWFOYW1lcykKK3sK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisgICAgTm9kZSogbm9kZSA9
IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CisgICAgaWYgKCFub2RlKQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgYXV0byBwYXJzZWRD
b2xvciA9IHBhcnNlQ29sb3IoV1RGTW92ZShncmlkQ29sb3IpKTsKKyAgICBpZiAoIXBhcnNlZENv
bG9yKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludmFsaWQgY29sb3IgY291bGQg
bm90IGJlIHBhcnNlZC4iKTsKKworICAgIEluc3BlY3Rvck92ZXJsYXk6OkdyaWQ6OkNvbmZpZyBj
b25maWc7CisgICAgY29uZmlnLmdyaWRDb2xvciA9ICpwYXJzZWRDb2xvcjsKKyAgICBjb25maWcu
c2hvd0xpbmVOYW1lcyA9IHNob3dMaW5lTmFtZXMudmFsdWVPcihmYWxzZSk7CisgICAgY29uZmln
LnNob3dMaW5lTnVtYmVycyA9IHNob3dMaW5lTnVtYmVycy52YWx1ZU9yKGZhbHNlKTsKKyAgICBj
b25maWcuc2hvd0V4dGVuZGVkR3JpZGxpbmVzID0gc2hvd0V4dGVuZGVkR3JpZGxpbmVzLnZhbHVl
T3IoZmFsc2UpOworICAgIGNvbmZpZy5zaG93VHJhY2tTaXplcyA9IHNob3dUcmFja1NpemVzLnZh
bHVlT3IoZmFsc2UpOworICAgIGNvbmZpZy5zaG93QXJlYU5hbWVzID0gc2hvd0FyZWFOYW1lcy52
YWx1ZU9yKGZhbHNlKTsKKworICAgIG1fb3ZlcmxheS0+c2V0R3JpZE92ZXJsYXlGb3JOb2RlKCpu
b2RlLCBjb25maWcpOworCisgICAgcmV0dXJuIHsgfTsKK30KKworSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6aGlkZUdyaWRPdmVybGF5
KE9wdGlvbmFsPFByb3RvY29sOjpET006Ok5vZGVJZD4mJiBub2RlSWQpCit7CisgICAgaWYgKG5v
ZGVJZCkgeworICAgICAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisgICAg
ICAgIGF1dG8gbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcsICpub2RlSWQpOworICAgICAg
ICBpZiAoIW5vZGUpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOworCisgICAgICAgIHJldHVybiBtX292ZXJsYXktPmNsZWFyR3JpZE92ZXJsYXlGb3JOb2Rl
KCpub2RlKTsKK30KKworICAgIG1fb3ZlcmxheS0+Y2xlYXJBbGxHcmlkT3ZlcmxheXMoKTsKKwor
ICAgIHJldHVybiB7IH07Cit9CisKIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFByb3RvY29sOjpE
T006Ok5vZGVJZD4gSW5zcGVjdG9yRE9NQWdlbnQ6Om1vdmVUbyhQcm90b2NvbDo6RE9NOjpOb2Rl
SWQgbm9kZUlkLCBQcm90b2NvbDo6RE9NOjpOb2RlSWQgdGFyZ2V0Tm9kZUlkLCBPcHRpb25hbDxQ
cm90b2NvbDo6RE9NOjpOb2RlSWQ+JiYgaW5zZXJ0QmVmb3JlTm9kZUlkKQogewogICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCA4N2Q2YjkxYWM5NTNkMmI5
YWY0YjJjYmQ0MjcwZGY0OTMyNjQ3YWYzLi45MzFkZDY5YzY5MzlmZDhmYTgzMjNmY2VkNTAzOWRl
NGEyZGY2MWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckRPTUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01BZ2VudC5oCkBAIC0xNDQsNiArMTQ0LDggQEAgcHVibGljOgogICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaGlnaGxpZ2h0Tm9kZShSZWY8SlNP
Tjo6T2JqZWN0PiYmIGhpZ2hsaWdodENvbmZpZywgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpOb2RlSWQ+JiYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJl
bW90ZU9iamVjdElkJik7CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBoaWdobGlnaHROb2RlTGlzdChSZWY8SlNPTjo6QXJyYXk+JiYgbm9kZUlkcywgUmVmPEpT
T046Ok9iamVjdD4mJiBoaWdobGlnaHRDb25maWcpOwogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gaGlnaGxpZ2h0RnJhbWUoY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6TmV0d29yazo6RnJhbWVJZCYsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgY29sb3IsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgb3V0bGluZUNvbG9yKTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNob3dHcmlkT3ZlcmxheShJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006Ok5vZGVJZCwgUmVmPEpTT046Ok9iamVjdD4mJiBncmlkQ29sb3IsIE9wdGlvbmFs
PGJvb2w+JiYgc2hvd0xpbmVOYW1lcywgT3B0aW9uYWw8Ym9vbD4mJiBzaG93TGluZU51bWJlcnMs
IE9wdGlvbmFsPGJvb2w+JiYgc2hvd0V4dGVuZGVkR3JpZGxpbmVzLCBPcHRpb25hbDxib29sPiYm
IHNob3dUcmFja1NpemVzLCBPcHRpb25hbDxib29sPiYmIHNob3dBcmVhTmFtZXMpOworICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaGlkZUdyaWRPdmVybGF5KE9w
dGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiYmKTsKICAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9k
ZUlkPiBtb3ZlVG8oSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCB0YXJnZXROb2RlSWQsIE9wdGlvbmFsPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiYmIGluc2VydEJlZm9yZU5vZGVJZCk7CiAgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiB1bmRvKCk7CiAgICAgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiByZWRvKCk7CkBAIC0yMTMsNiAr
MjE1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGhpZ2hsaWdodE1vdXNlZE92ZXJOb2RlKCk7CiAg
ICAgdm9pZCBzZXRTZWFyY2hpbmdGb3JOb2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nJiwgYm9vbCBlbmFibGVkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGhpZ2hsaWdodENvbmZp
ZywgYm9vbCBzaG93UnVsZXJzKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yT3Zlcmxh
eTo6SGlnaGxpZ2h0OjpDb25maWc+IGhpZ2hsaWdodENvbmZpZ0Zyb21JbnNwZWN0b3JPYmplY3Qo
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rv
ck92ZXJsYXk6OkdyaWQ6OkNvbmZpZz4gZ3JpZE92ZXJsYXlDb25maWdGcm9tSW5zcGVjdG9yT2Jq
ZWN0KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBncmlkT3ZlcmxheUluc3BlY3Rvck9iamVjdCk7CiAKICAgICAvLyBOb2RlLXJlbGF0ZWQg
bWV0aG9kcy4KICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPE5vZGU+LCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006Ok5vZGVJZD4gTm9kZVRvSWRNYXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5jcHAKaW5kZXggMWIxNzJlYTFkZTk5ZTBlMGE3MTAzN2UwODk5ZDI2YmM5ZjhjMGVmYy4u
ZWZjMDI1MWNkM2ZlY2NkOGRjMDk0ODE5NThkODhkYTNkYzllMTVlNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMTY2NCw2ICsxNjY0LDE1IEBAIFJlZjxET01SZWN0PiBJ
bnRlcm5hbHM6OmJvdW5kaW5nQm94KEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgcmV0dXJuIERPTVJl
Y3Q6OmNyZWF0ZShyZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3RJZ25vcmluZ1RyYW5z
Zm9ybXMoKSk7CiB9CiAKK0V4Y2VwdGlvbk9yPHVuc2lnbmVkPiBJbnRlcm5hbHM6Omluc3BlY3Rv
ckdyaWRPdmVybGF5Q291bnQoKQoreworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHRE
b2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5wYWdlKCkpCisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKKworICAgIHJldHVy
biBkb2N1bWVudC0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZ3JpZE92ZXJsYXlDb3Vu
dCgpOworfQorCiBFeGNlcHRpb25PcjxSZWY8RE9NUmVjdExpc3Q+PiBJbnRlcm5hbHM6Omluc3Bl
Y3RvckhpZ2hsaWdodFJlY3RzKCkKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0
RG9jdW1lbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCmluZGV4IGVlOGUyNjc2YTFh
NzI5Y2I3YjI5ZDkyYjdkNDVmYzFlNjI2ZjUyMjguLjJjOTNjNjIyY2E1ZDQ3OGI0NjI5YzIzZmY3
YzJmNDMwNGE2MmExN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaApAQCAtMjcxLDYg
KzI3MSw3IEBAIHB1YmxpYzoKICAgICBSZWY8RE9NUmVjdD4gYm91bmRpbmdCb3goRWxlbWVudCYp
OwogCiAgICAgRXhjZXB0aW9uT3I8UmVmPERPTVJlY3RMaXN0Pj4gaW5zcGVjdG9ySGlnaGxpZ2h0
UmVjdHMoKTsKKyAgICBFeGNlcHRpb25Pcjx1bnNpZ25lZD4gaW5zcGVjdG9yR3JpZE92ZXJsYXlD
b3VudCgpOwogCiAgICAgRXhjZXB0aW9uT3I8dW5zaWduZWQ+IG1hcmtlckNvdW50Rm9yTm9kZShO
b2RlJiwgY29uc3QgU3RyaW5nJik7CiAgICAgRXhjZXB0aW9uT3I8UmVmUHRyPFJhbmdlPj4gbWFy
a2VyUmFuZ2VGb3JOb2RlKE5vZGUmLCBjb25zdCBTdHJpbmcmIG1hcmtlclR5cGUsIHVuc2lnbmVk
IGluZGV4KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlk
bCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAppbmRleCA4NWFmYWZjNTlm
NzI4MzY5NTIwYzg5OWZhMDY5ZGM5ZGU1MTZlOGNkLi40ZjliYWJlODJjMjcwMTJhODhiNmFmZmFk
ZWVlMmJiZWRhMDZlNzlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCkBAIC0z
MjksNiArMzI5LDcgQEAgZW51bSBUcmVlVHlwZSB7CiAKICAgICBET01SZWN0IGJvdW5kaW5nQm94
KEVsZW1lbnQgZWxlbWVudCk7CiAKKyAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHVuc2lnbmVkIGxv
bmcgaW5zcGVjdG9yR3JpZE92ZXJsYXlDb3VudCgpOwogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0g
RE9NUmVjdExpc3QgaW5zcGVjdG9ySGlnaGxpZ2h0UmVjdHMoKTsKIAogICAgIFtNYXlUaHJvd0V4
Y2VwdGlvbl0gdW5zaWduZWQgbG9uZyBtYXJrZXJDb3VudEZvck5vZGUoTm9kZSBub2RlLCBET01T
dHJpbmcgbWFya2VyVHlwZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Db250cm9sbGVycy9ET01NYW5hZ2VyLmpzIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRE9NTWFuYWdlci5qcwppbmRleCBmMzUyYjZk
ODEyOGE0ODVmOTlhYzg4ZWMyY2Q3MjBkODcwNDc4N2YzLi5iODY1MmQ0MWNlNGFhZjI3ZGMyZDlk
ZjZhYTZkNGRkMTZmNTJiMzAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Db250cm9sbGVycy9ET01NYW5hZ2VyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0RPTU1hbmFnZXIuanMKQEAgLTQwLDYg
KzQwLDcgQEAgV0kuRE9NTWFuYWdlciA9IGNsYXNzIERPTU1hbmFnZXIgZXh0ZW5kcyBXSS5PYmpl
Y3QKIAogICAgICAgICB0aGlzLl9pZFRvRE9NTm9kZSA9IHt9OwogICAgICAgICB0aGlzLl9kb2N1
bWVudCA9IG51bGw7CisgICAgICAgIHRoaXMuX2RvY3VtZW50UHJvbWlzZSA9IG51bGw7CiAgICAg
ICAgIHRoaXMuX2F0dHJpYnV0ZUxvYWROb2RlSWRzID0ge307CiAgICAgICAgIHRoaXMuX3Jlc3Rv
cmVTZWxlY3RlZE5vZGVJc0FsbG93ZWQgPSB0cnVlOwogICAgICAgICB0aGlzLl9sb2FkTm9kZUF0
dHJpYnV0ZXNUaW1lb3V0ID0gMDsKQEAgLTE1NSwzNiArMTU2LDEwIEBAIFdJLkRPTU1hbmFnZXIg
PSBjbGFzcyBET01NYW5hZ2VyIGV4dGVuZHMgV0kuT2JqZWN0CiAKICAgICByZXF1ZXN0RG9jdW1l
bnQoY2FsbGJhY2spCiAgICAgewotICAgICAgICBpZiAodGhpcy5fZG9jdW1lbnQpIHsKLSAgICAg
ICAgICAgIGNhbGxiYWNrKHRoaXMuX2RvY3VtZW50KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICh0aGlzLl9wZW5kaW5nRG9jdW1lbnRSZXF1ZXN0Q2FsbGJh
Y2tzKQotICAgICAgICAgICAgdGhpcy5fcGVuZGluZ0RvY3VtZW50UmVxdWVzdENhbGxiYWNrcy5w
dXNoKGNhbGxiYWNrKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5fcGVuZGluZ0Rv
Y3VtZW50UmVxdWVzdENhbGxiYWNrcyA9IFtjYWxsYmFja107Ci0KLSAgICAgICAgaWYgKHRoaXMu
X2hhc1JlcXVlc3RlZERvY3VtZW50KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlm
ICghV0kucGFnZVRhcmdldCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoIVdJ
LnBhZ2VUYXJnZXQuaGFzRG9tYWluKCJET00iKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gImZ1bmN0aW9uIikKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLl9yZXF1ZXN0RG9jdW1lbnRXaXRoUHJvbWlzZSgpOwogCi0gICAgICAgIHRoaXMuX2hh
c1JlcXVlc3RlZERvY3VtZW50ID0gdHJ1ZTsKLQotICAgICAgICBXSS5wYWdlVGFyZ2V0LkRPTUFn
ZW50LmdldERvY3VtZW50KChlcnJvciwgcm9vdCkgPT4gewotICAgICAgICAgICAgaWYgKCFlcnJv
cikKLSAgICAgICAgICAgICAgICB0aGlzLl9zZXREb2N1bWVudChyb290KTsKLQotICAgICAgICAg
ICAgZm9yIChsZXQgY2FsbGJhY2sgb2YgdGhpcy5fcGVuZGluZ0RvY3VtZW50UmVxdWVzdENhbGxi
YWNrcykKLSAgICAgICAgICAgICAgICBjYWxsYmFjayh0aGlzLl9kb2N1bWVudCk7Ci0KLSAgICAg
ICAgICAgIHRoaXMuX3BlbmRpbmdEb2N1bWVudFJlcXVlc3RDYWxsYmFja3MgPSBudWxsOwotICAg
ICAgICB9KTsKKyAgICAgICAgdGhpcy5fcmVxdWVzdERvY3VtZW50V2l0aENhbGxiYWNrKGNhbGxi
YWNrKTsKICAgICB9CiAKICAgICBlbnN1cmVEb2N1bWVudCgpCkBAIC0yNjQsNiArMjM5LDU3IEBA
IFdJLkRPTU1hbmFnZXIgPSBjbGFzcyBET01NYW5hZ2VyIGV4dGVuZHMgV0kuT2JqZWN0CiAgICAg
ICAgIHRoaXMucmVxdWVzdERvY3VtZW50KG9uRG9jdW1lbnRBdmFpbGFibGUuYmluZCh0aGlzKSk7
CiAgICAgfQogCisgICAgX3JlcXVlc3REb2N1bWVudFdpdGhQcm9taXNlKCkKKyAgICB7CisgICAg
ICAgIGlmICh0aGlzLl9kb2N1bWVudFByb21pc2UpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
ZG9jdW1lbnRQcm9taXNlLnByb21pc2U7CisKKyAgICAgICAgdGhpcy5fZG9jdW1lbnRQcm9taXNl
ID0gbmV3IFdJLldyYXBwZWRQcm9taXNlOworICAgICAgICBpZiAodGhpcy5fZG9jdW1lbnQpCisg
ICAgICAgICAgICB0aGlzLl9kb2N1bWVudFByb21pc2UucmVzb2x2ZSh0aGlzLl9kb2N1bWVudCk7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5fcmVxdWVzdERvY3VtZW50V2l0aENh
bGxiYWNrKChkb2MpID0+IHsKKyAgICAgICAgICAgICAgICB0aGlzLl9kb2N1bWVudFByb21pc2Uu
cmVzb2x2ZShkb2MpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gdGhpcy5fZG9jdW1lbnRQcm9taXNlLnByb21pc2U7CisgICAgfQorCisgICAgX3JlcXVlc3RE
b2N1bWVudFdpdGhDYWxsYmFjayhjYWxsYmFjaykKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9k
b2N1bWVudCkgeworICAgICAgICAgICAgY2FsbGJhY2sodGhpcy5fZG9jdW1lbnQpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmdEb2N1
bWVudFJlcXVlc3RDYWxsYmFja3MpCisgICAgICAgICAgICB0aGlzLl9wZW5kaW5nRG9jdW1lbnRS
ZXF1ZXN0Q2FsbGJhY2tzLnB1c2goY2FsbGJhY2spOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICB0aGlzLl9wZW5kaW5nRG9jdW1lbnRSZXF1ZXN0Q2FsbGJhY2tzID0gW2NhbGxiYWNrXTsKKwor
ICAgICAgICBpZiAodGhpcy5faGFzUmVxdWVzdGVkRG9jdW1lbnQpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgaWYgKCFXSS5wYWdlVGFyZ2V0KQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIGlmICghV0kucGFnZVRhcmdldC5oYXNEb21haW4oIkRPTSIpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX2hhc1JlcXVlc3RlZERvY3VtZW50ID0gdHJ1ZTsK
KworICAgICAgICBXSS5wYWdlVGFyZ2V0LkRPTUFnZW50LmdldERvY3VtZW50KChlcnJvciwgcm9v
dCkgPT4geworICAgICAgICAgICAgaWYgKCFlcnJvcikKKyAgICAgICAgICAgICAgICB0aGlzLl9z
ZXREb2N1bWVudChyb290KTsKKworICAgICAgICAgICAgZm9yIChsZXQgY2FsbGJhY2sgb2YgdGhp
cy5fcGVuZGluZ0RvY3VtZW50UmVxdWVzdENhbGxiYWNrcykKKyAgICAgICAgICAgICAgICBjYWxs
YmFjayh0aGlzLl9kb2N1bWVudCk7CisKKyAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdEb2N1bWVu
dFJlcXVlc3RDYWxsYmFja3MgPSBudWxsOworICAgICAgICB9KTsKKyAgICB9CisKICAgICBfYXR0
cmlidXRlTW9kaWZpZWQobm9kZUlkLCBuYW1lLCB2YWx1ZSkKICAgICB7CiAgICAgICAgIHZhciBu
b2RlID0gdGhpcy5faWRUb0RPTU5vZGVbbm9kZUlkXTsKQEAgLTM2MSw2ICszODcsOSBAQCBXSS5E
T01NYW5hZ2VyID0gY2xhc3MgRE9NTWFuYWdlciBleHRlbmRzIFdJLk9iamVjdAogCiAgICAgICAg
IHRoaXMuX2RvY3VtZW50ID0gbmV3RG9jdW1lbnQ7CiAKKyAgICAgICAgLy8gRm9yY2UgdGhlIHBy
b21pc2UgdG8gYmUgcmVjcmVhdGVkIHNvIHRoYXQgaXQgcmVzb2x2ZXMgdG8gdGhlIG5ldyBkb2N1
bWVudC4KKyAgICAgICAgdGhpcy5fZG9jdW1lbnRQcm9taXNlID0gbnVsbDsKKwogICAgICAgICBp
ZiAoIXRoaXMuX2RvY3VtZW50KQogICAgICAgICAgICAgdGhpcy5faGFzUmVxdWVzdGVkRG9jdW1l
bnQgPSBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvTW9kZWxzL0NvbG9yLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvTW9kZWxzL0NvbG9yLmpzCmluZGV4IGZiYjMzMjAwY2YwY2I4YTViZTZjOThmNjIyYzE0NWQw
ZGE0NTM0MjMuLjg3YmEwNzAzYjAxMThhOTdkOTk2ZjUwYzEyYzM0Mjg5NWU5ZTFmNDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Db2xvci5q
cworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ29sb3Iu
anMKQEAgLTYzOCw2ICs2MzgsMTIgQEAgV0kuQ29sb3IgPSBjbGFzcyBDb2xvcgogICAgICAgICBy
ZXR1cm4gIiI7CiAgICAgfQogCisgICAgdG9Qcm90b2NvbCgpCisgICAgeworICAgICAgICBsZXQg
W3IsIGcsIGIsIGFdID0gdGhpcy5yZ2JhOworICAgICAgICByZXR1cm4ge3IsIGcsIGIsIGF9Owor
ICAgIH0KKwogICAgIGlzS2V5d29yZCgpCiAgICAgewogICAgICAgICBpZiAodGhpcy5rZXl3b3Jk
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxz
L0RPTU5vZGUuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMv
RE9NTm9kZS5qcwppbmRleCBkZDlmNTY2ZjU4MGQ4MmU3OTJjMjFlMDBmZDA1NjYzNTY3OWVhMGU4
Li44Njk3Y2VhYWE5ZWVlMTRkYWY0NWE4MjNiMGY0N2E2OTE4NjViOWU4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvRE9NTm9kZS5qcworKysg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvRE9NTm9kZS5qcwpA
QCAtNTUzLDYgKzU1MywzNCBAQCBXSS5ET01Ob2RlID0gY2xhc3MgRE9NTm9kZSBleHRlbmRzIFdJ
Lk9iamVjdAogICAgICAgICB0YXJnZXQuRE9NQWdlbnQuaGlnaGxpZ2h0Tm9kZShXSS5ET01NYW5h
Z2VyLmJ1aWxkSGlnaGxpZ2h0Q29uZmlnKG1vZGUpLCB0aGlzLmlkKTsKICAgICB9CiAKKyAgICBz
aG93R3JpZE92ZXJsYXkoY29sb3IsIHtzaG93TGluZU5hbWVzLCBzaG93TGluZU51bWJlcnMsIHNo
b3dFeHRlbmRlZEdyaWRMaW5lcywgc2hvd1RyYWNrU2l6ZXMsIHNob3dBcmVhTmFtZXN9ID0ge30p
CisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydChjb2xvciBpbnN0YW5jZW9mIFdJLkNvbG9y
LCBjb2xvcik7CisKKyAgICAgICAgaWYgKHRoaXMuX2Rlc3Ryb3llZCkKKyAgICAgICAgICAgIHJl
dHVybiBQcm9taXNlLnJlamVjdCgiQ2Fubm90IHNob3cgb3ZlcmxheSwgbm9kZSBpcyBkZXN0cm95
ZWQiKTsKKworICAgICAgICBsZXQgdGFyZ2V0ID0gV0kuYXNzdW1pbmdNYWluVGFyZ2V0KCk7Cisg
ICAgICAgIHJldHVybiB0YXJnZXQuRE9NQWdlbnQuc2hvd0dyaWRPdmVybGF5Lmludm9rZSh7Cisg
ICAgICAgICAgICBub2RlSWQ6IHRoaXMuaWQsCisgICAgICAgICAgICBncmlkQ29sb3I6IGNvbG9y
LnRvUHJvdG9jb2woKSwKKyAgICAgICAgICAgIHNob3dMaW5lTmFtZXM6ICEhc2hvd0xpbmVOYW1l
cywKKyAgICAgICAgICAgIHNob3dMaW5lTnVtYmVyczogISFzaG93TGluZU51bWJlcnMsCisgICAg
ICAgICAgICBzaG93RXh0ZW5kZWRHcmlkTGluZXM6ICEhc2hvd0V4dGVuZGVkR3JpZExpbmVzLAor
ICAgICAgICAgICAgc2hvd1RyYWNrU2l6ZXM6ICEhc2hvd1RyYWNrU2l6ZXMsCisgICAgICAgICAg
ICBzaG93QXJlYU5hbWVzOiAhIXNob3dBcmVhTmFtZXMsCisgICAgICAgIH0pOworICAgIH0KKwor
ICAgIGhpZGVHcmlkT3ZlcmxheSgpCisgICAgeworICAgICAgICBpZiAodGhpcy5fZGVzdHJveWVk
KQorICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCJDYW5ub3QgaGlkZSBvdmVybGF5
LCBub2RlIGlzIGRlc3Ryb3llZCIpOworCisgICAgICAgIGxldCB0YXJnZXQgPSBXSS5hc3N1bWlu
Z01haW5UYXJnZXQoKTsKKyAgICAgICAgcmV0dXJuIHRhcmdldC5ET01BZ2VudC5oaWRlR3JpZE92
ZXJsYXkodGhpcy5pZCk7CisgICAgfQorCiAgICAgc2Nyb2xsSW50b1ZpZXcoKQogICAgIHsKICAg
ICAgICAgV0kuUmVtb3RlT2JqZWN0LnJlc29sdmVOb2RlKHRoaXMpLnRoZW4oKG9iamVjdCkgPT4g
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVGVzdC9U
ZXN0SGFybmVzcy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Rlc3Qv
VGVzdEhhcm5lc3MuanMKaW5kZXggZDJlOTlhZjFiNmU4NTEwN2RmZDY2ZDQxYTMxM2E2NGVhZTcw
MGYyNi4uMzZjZTk2NzQ3ZmZjNTRkNDVkODUwYTNiZTE3YjcwOTVlMWYwNTg4YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVGVzdC9UZXN0SGFybmVzcy5q
cworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9UZXN0L1Rlc3RIYXJu
ZXNzLmpzCkBAIC0yNTcsMTAgKzI1NywxMiBAQCBUZXN0SGFybmVzcyA9IGNsYXNzIFRlc3RIYXJu
ZXNzIGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIGlmICh0eXBlb2Ygd29yayAhPT0gImZ1bmN0
aW9uIikKICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhcmd1bWVudCB0byBj
YXRjaEV4Y2VwdGlvbjogd29yayBtdXN0IGJlIGEgZnVuY3Rpb24uIik7CiAKLSAgICAgICAgbGV0
IGV4cGVjdEFuZER1bXBFcnJvciA9IChlKSA9PiB7CisgICAgICAgIGxldCBleHBlY3RBbmREdW1w
RXJyb3IgPSAoZSwgcmVzb2x2ZWRWYWx1ZSkgPT4gewogICAgICAgICAgICAgdGhpcy5leHBlY3RO
b3ROdWxsKGUsICJTaG91bGQgcHJvZHVjZSBhbiBleGNlcHRpb24uIik7Ci0gICAgICAgICAgICBp
ZiAoIWUpCisgICAgICAgICAgICBpZiAoIWUpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmV4cGVj
dEVxdWFsKHJlc29sdmVkVmFsdWUsIHVuZGVmaW5lZCwgIkV4Y2VwdGlvbi1wcm9kdWNpbmcgd29y
ayBzaG91bGQgbm90IHJldHVybiBhIHZhbHVlIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yIHx8ICEo
ZSBpbnN0YW5jZW9mIE9iamVjdCkpCiAgICAgICAgICAgICAgICAgdGhpcy5sb2coZS50b1N0cmlu
ZygpKTsKQEAgLTI4NCw3ICsyODYsNyBAQCBUZXN0SGFybmVzcyA9IGNsYXNzIFRlc3RIYXJuZXNz
IGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgICAgICAvLyBJbnZlcnQgdGhlIHByb21pc2UncyBz
ZXR0bGVkIHN0YXRlIHRvIG1hdGNoIHRoZSBleHBlY3RhdGlvbiBvZiB0aGUgY2FsbGVyLgogICAg
ICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHsKICAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0LnRoZW4oKHJlc29sdmVkVmFsdWUpID0+IHsKLSAgICAgICAgICAgICAg
ICAgICAgZXhwZWN0QW5kRHVtcEVycm9yKG51bGwpOworICAgICAgICAgICAgICAgICAgICBleHBl
Y3RBbmREdW1wRXJyb3IobnVsbCwgcmVzb2x2ZWRWYWx1ZSk7CiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBQcm9taXNlLnJlamVjdChyZXNvbHZlZFZhbHVlKTsKICAgICAgICAgICAgICAgICB9
LCAoZSkgPT4geyAvLyBEb24ndCBjaGFpbiB0aGUgLmNhdGNoIGFzIGl0IHdpbGwgbG9nIHRoZSB2
YWx1ZSB3ZSBqdXN0IHJlamVjdGVkLgogICAgICAgICAgICAgICAgICAgICBleHBlY3RBbmREdW1w
RXJyb3IoZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9WaWV3cy9Db250ZXh0TWVudVV0aWxpdGllcy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL1ZpZXdzL0NvbnRleHRNZW51VXRpbGl0aWVzLmpzCmluZGV4IDMwNjJjMTJm
MDA2MDM3MmViMDA5NTNhYjM1ZWQzYzIwZjRkYzhmMDAuLjViYTY5YWJlZTJiZjgxMDBhYWJmZDA5
ZGFjMTMxZmEyNDU3N2FlNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1ZpZXdzL0NvbnRleHRNZW51VXRpbGl0aWVzLmpzCisrKyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvbnRleHRNZW51VXRpbGl0aWVzLmpzCkBA
IC0zODYsNiArMzg2LDI4IEBAIFdJLmFwcGVuZENvbnRleHRNZW51SXRlbXNGb3JET01Ob2RlID0g
ZnVuY3Rpb24oY29udGV4dE1lbnUsIGRvbU5vZGUsIG9wdGlvbnMgPSB7CiAgICAgICAgIH0KIAog
ICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRTZXBhcmF0b3IoKTsKKworICAgICAgICAvLyBGSVhN
RTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIyMTI0Nj4gcmVtb3ZlIHRoZXNlIGVuZ2luZWVyaW5n
LW9ubHkgbWVudSBpdGVtcyB3aGVuIHJlbW92aW5nIHRoZSBmZWF0dXJlIGZsYWcuCisgICAgICAg
IGlmIChXSS5pc0VuZ2luZWVyaW5nQnVpbGQgJiYgV0kuc2V0dGluZ3MuZXhwZXJpbWVudGFsRW5h
YmxlTGF5b3V0UGFuZWwudmFsdWUpIHsKKyAgICAgICAgICAgIGlmIChJbnNwZWN0b3JCYWNrZW5k
Lmhhc0NvbW1hbmQoIkRPTS5zaG93R3JpZE92ZXJsYXkiKSAmJiBhdHRhY2hlZCkgeworICAgICAg
ICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV0kudW5sb2NhbGl6ZWRTdHJpbmcoIkFk
ZCBHcmlkIE92ZXJsYXkgd2l0aCBSYW5kb20gQ29sb3IiKSwgKCkgPT4geworICAgICAgICAgICAg
ICAgICAgICBsZXQgcmFuZG9tQ29tcG9uZW50ID0gKCkgPT4gTWF0aC5mbG9vcihNYXRoLnJhbmRv
bSgpICogMjU1KTsKKyAgICAgICAgICAgICAgICAgICAgbGV0IGNvbG9yID0gbmV3IFdJLkNvbG9y
KFdJLkNvbG9yLkZvcm1hdC5SR0IsIFtyYW5kb21Db21wb25lbnQoKSwgcmFuZG9tQ29tcG9uZW50
KCksIHJhbmRvbUNvbXBvbmVudCgpXSk7CisgICAgICAgICAgICAgICAgICAgIGRvbU5vZGUuc2hv
d0dyaWRPdmVybGF5KGNvbG9yKS5jYXRjaChjb25zb2xlLmVycm9yKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKworICAgICAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV0kudW5sb2Nh
bGl6ZWRTdHJpbmcoIlJlbW92ZSBHcmlkIE92ZXJsYXkgZm9yIHRoaXMgTm9kZSIpLCAoKSA9PiB7
CisgICAgICAgICAgICAgICAgICAgIGRvbU5vZGUuaGlkZUdyaWRPdmVybGF5KCk7CisgICAgICAg
ICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdJ
LnVubG9jYWxpemVkU3RyaW5nKCJSZW1vdmUgQWxsIEdyaWQgT3ZlcmxheXMiKSwgKCkgPT4gewor
ICAgICAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gV0kuYXNzdW1pbmdNYWluVGFyZ2V0KCk7
CisgICAgICAgICAgICAgICAgICAgIHRhcmdldC5ET01BZ2VudC5oaWRlR3JpZE92ZXJsYXkoKTsK
KyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGNvbnRleHRNZW51LmFwcGVuZFNlcGFyYXRvcigpOwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBmZDZj
MjNiODUyOTlkMmM2ODE0NDZmZGY2YmE0OTNkNGY1N2NjNjZkLi40ZWNkMDBiY2QyZGQ4YTc4YmJl
MTVkNjFiMGEzZjZkYmY5MTAwNzlmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
KysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMjEtMDItMDEg
IEJKIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogaW1w
bGVtZW50IHRoZSBiYXNpY3MgZm9yIHNob3dpbmcvaGlkaW5nIGdyaWQgb3ZlcmxheXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTA2MgorCisgICAg
ICAgIFJldmlld2VkIGJ5IERldmluIFJvdXNzby4KKworICAgICAgICAqIGluc3BlY3Rvci9kb20v
c2hvd0dyaWRPdmVybGF5LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9y
L2RvbS9zaG93R3JpZE92ZXJsYXkuaHRtbDogQWRkZWQuCisgICAgICAgIFRoaXMgdGVzdCBkb2Vz
IG5vdCBjb3ZlciB0aGUgYWN0dWFsIGRyYXdpbmcgY29kZS4gVGhlIGRyYXdpbmcgbWV0aG9kCisg
ICAgICAgIHdpbGwgY2hhbmdlIGEgbG90IGFuZCBpcyBub3QgZWFzeSB0byB0ZXN0IGN1cnJlbnRs
eS4gVGhlIG5ldyB0ZXN0CisgICAgICAgIGNvdmVycyB0aGUgYmVoYXZpb3Igb2Ygc2hvd0dyaWRP
dmVybGF5L2hpZGVHcmlkT3ZlcmxheSBieSBxdWVyeWluZworICAgICAgICBob3cgbWFueSBncmlk
IG92ZXJsYXlzIGFyZSBhY3RpdmUgYWNjb3JkaW5nIHRvIEluc3BlY3Rvck92ZXJsYXkuCisKKyAg
ICAgICAgKiBpbnNwZWN0b3IvbW9kZWwvY29sb3ItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGlu
c3BlY3Rvci9tb2RlbC9jb2xvci5odG1sOgorICAgICAgICBBZGQgYSB0ZXN0IGNhc2UgdG8gZXhl
cmNpc2UgV0kuQ29sb3IucHJvdG90eXBlLnRvUHJvdG9jb2woKS4KKworICAgICAgICAqIGluc3Bl
Y3Rvci91bml0LXRlc3RzL3Rlc3QtaGFybmVzcy1leHBlY3QtZnVuY3Rpb25zLWFzeW5jLWV4cGVj
dGVkLnR4dDoKKyAgICAgICAgUmViYXNlbGluZSByZXN1bHRzIGFmdGVyIGFkZGluZyBtb3JlIHN0
YXRlIGR1bXBpbmcgaW4gdGhlIGZhaWx1cmUgY2FzZQorICAgICAgICBmb3IgSW5zcGVjdG9yVGVz
dC5leHBlY3RFeGNlcHRpb24oKS4KKwogMjAyMS0wMi0wMSAgTGF1cm8gTW91cmEgIDxsbW91cmFA
aWdhbGlhLmNvbT4KIAogICAgICAgICBbR0xJQl0gR2FyZGVuaW5nIGNyYXNoZXMgY29tbW9uIHRv
IGJvdGggZ2xpYiBwb3J0cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RvbS9z
aG93R3JpZE92ZXJsYXktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RvbS9z
aG93R3JpZE92ZXJsYXktZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdmOGM4MmU4NTA2MjBjMGU5
MjVlNjIzMTc0YjljZjI2OTVhNDc0NDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9p
bnNwZWN0b3IvZG9tL3Nob3dHcmlkT3ZlcmxheS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw2MyBA
QAorVGVzdHMgZm9yIHRoZSBET00uc2hvd0dyaWRPdmVybGF5IGNvbW1hbmQuCisKK0EKK0IKK0MK
K0QKK0UKK0YKKworQQorQgorQworRAorRQorRgorCis9PSBSdW5uaW5nIHRlc3Qgc3VpdGU6IERP
TS5zaG93R3JpZE92ZXJsYXkKKy0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBET00uc2hvd0dyaWRPdmVy
bGF5LlNob3dPbmVHcmlkCitQQVNTOiBTaG91bGQgaGF2ZSAwIGdyaWRzIGRpc3BsYXllZC4KK1Jl
cXVlc3RpbmcgdG8gc2hvdyBncmlkIG92ZXJsYXkgZm9yIGZpcnN0IC5ncmlkLWNvbnRhaW5lcgor
UEFTUzogU2hvdWxkIGhhdmUgMSBncmlkIGRpc3BsYXllZC4KK1JlcXVlc3RpbmcgdG8gc2hvdyBh
IGRpZmZlcmVudCBncmlkIG92ZXJsYXkgZm9yIGZpcnN0IC5ncmlkLWNvbnRhaW5lcgorUEFTUzog
U2hvdWxkIGhhdmUgMSBncmlkIGRpc3BsYXllZC4KK1JlcXVlc3RpbmcgdG8gaGlkZSBncmlkIG92
ZXJsYXkKK1BBU1M6IFNob3VsZCBoYXZlIDAgZ3JpZHMgZGlzcGxheWVkLgorCistLSBSdW5uaW5n
IHRlc3QgY2FzZTogRE9NLnNob3dHcmlkT3ZlcmxheS5TaG93VHdvR3JpZHMKK1BBU1M6IFNob3Vs
ZCBoYXZlIDAgZ3JpZHMgZGlzcGxheWVkLgorUmVxdWVzdGluZyB0byBzaG93IGZpcnN0IGdyaWQg
b3ZlcmxheQorUEFTUzogU2hvdWxkIGhhdmUgMSBncmlkIGRpc3BsYXllZC4KK1JlcXVlc3Rpbmcg
dG8gc2hvdyBzZWNvbmQgZ3JpZCBvdmVybGF5CitQQVNTOiBTaG91bGQgaGF2ZSAyIGdyaWRzIGRp
c3BsYXllZC4KK1JlcXVlc3RpbmcgdG8gaGlkZSBmaXJzdCBncmlkIG92ZXJsYXkKK1BBU1M6IFNo
b3VsZCBoYXZlIDEgZ3JpZCBkaXNwbGF5ZWQuCitSZXF1ZXN0aW5nIHRvIGhpZGUgc2Vjb25kIGdy
aWQgb3ZlcmxheQorUEFTUzogU2hvdWxkIGhhdmUgMCBncmlkcyBkaXNwbGF5ZWQuCisKKy0tIFJ1
bm5pbmcgdGVzdCBjYXNlOiBET00uc2hvd0dyaWRPdmVybGF5LkhpZGVBbGxHcmlkcworUEFTUzog
U2hvdWxkIGhhdmUgMCBncmlkcyBkaXNwbGF5ZWQuCitSZXF1ZXN0aW5nIHRvIHNob3cgZ3JpZCBv
dmVybGF5CitQQVNTOiBTaG91bGQgaGF2ZSAxIGdyaWQgZGlzcGxheWVkLgorUmVxdWVzdGluZyB0
byBzaG93IGEgZGlmZmVyZW50IGdyaWQgb3ZlcmxheQorUEFTUzogU2hvdWxkIGhhdmUgMiBncmlk
cyBkaXNwbGF5ZWQuCitSZXF1ZXN0aW5nIHRvIGhpZGUgYWxsIGdyaWQgb3ZlcmxheXMuIEhpZGlu
ZyBhbGwgZ3JpZHMgaXMgaWRlbXBvdGVudCBhbmQgc2hvdWxkIG5vdCB0aHJvdyBhbiBlcnJvci4K
K1BBU1M6IFNob3VsZCBoYXZlIDAgZ3JpZHMgZGlzcGxheWVkLgorUmVxdWVzdGluZyB0byBoaWRl
IGFsbCBncmlkIG92ZXJsYXlzIGFnYWluLCBleHBlY3Rpbmcgbm9uZSB0byBiZSBjbGVhcmVkLiBI
aWRpbmcgYWxsIGdyaWRzIGlzIGlkZW1wb3RlbnQgYW5kIHNob3VsZCBub3QgdGhyb3cgYW4gZXJy
b3IuCitQQVNTOiBTaG91bGQgaGF2ZSAwIGdyaWRzIGRpc3BsYXllZC4KKworLS0gUnVubmluZyB0
ZXN0IGNhc2U6IERPTS5zaG93R3JpZE92ZXJsYXkuSGlkZUJlZm9yZVNob3dTaG91bGRFcnJvcgor
UEFTUzogU2hvdWxkIGhhdmUgMCBncmlkcyBkaXNwbGF5ZWQuCitSZXF1ZXN0aW5nIHRvIGhpZGUg
Z3JpZCBvdmVybGF5IGZvciAuZ3JpZC1jb250YWluZXIKK1BBU1M6IFNob3VsZCBwcm9kdWNlIGFu
IGV4Y2VwdGlvbi4KK0Vycm9yOiBObyBncmlkIG92ZXJsYXkgZXhpc3RzIGZvciB0aGUgbm9kZSwg
c28gY2Fubm90IGNsZWFyLgorUmVxdWVzdGluZyB0byBoaWRlIGFsbCBncmlkIG92ZXJsYXlzLiBI
aWRpbmcgYWxsIGdyaWRzIGlzIGlkZW1wb3RlbnQgYW5kIHNob3VsZCBub3QgdGhyb3cgYW4gZXJy
b3IuCitQQVNTOiBTaG91bGQgaGF2ZSAwIGdyaWRzIGRpc3BsYXllZC4KKworLS0gUnVubmluZyB0
ZXN0IGNhc2U6IERPTS5zaG93R3JpZE92ZXJsYXkuRm9yTm9uZXhpc3RlbnROb2RlU2hvdWxkRXJy
b3IKK1BBU1M6IFNob3VsZCBoYXZlIDAgZ3JpZHMgZGlzcGxheWVkLgorUmVxdWVzdGluZyB0byBz
aG93IGdyaWQgb3ZlcmxheSBmb3IgaW52YWxpZCBub2RlSWQgLTEKK1BBU1M6IFNob3VsZCBwcm9k
dWNlIGFuIGV4Y2VwdGlvbi4KK0Vycm9yOiBNaXNzaW5nIG5vZGUgZm9yIGdpdmVuIG5vZGVJZAor
UEFTUzogU2hvdWxkIGhhdmUgMCBncmlkcyBkaXNwbGF5ZWQuCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2luc3BlY3Rvci9kb20vc2hvd0dyaWRPdmVybGF5Lmh0bWwgYi9MYXlvdXRUZXN0cy9p
bnNwZWN0b3IvZG9tL3Nob3dHcmlkT3ZlcmxheS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRjMWMyNTEyNTZk
MzMxNDg3OWM2NTdkY2I3M2U1ZTM5NDA5ZGIzMWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvZG9tL3Nob3dHcmlkT3ZlcmxheS5odG1sCkBAIC0wLDAgKzEsMTk5IEBA
Cis8IWRvY3R5cGUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vaHR0
cC90ZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2VzL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQ+CitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBsZXQgc3VpdGUgPSBJbnNwZWN0b3JU
ZXN0LmNyZWF0ZUFzeW5jU3VpdGUoIkRPTS5zaG93R3JpZE92ZXJsYXkiKTsKKworICAgIGFzeW5j
IGZ1bmN0aW9uIGdldEdyaWRDb250YWluZXJOb2RlKCkgeworICAgICAgICBsZXQgZG9jID0gYXdh
aXQgV0kuZG9tTWFuYWdlci5yZXF1ZXN0RG9jdW1lbnQoKTsKKyAgICAgICAgbGV0IG5vZGVJZCA9
IGF3YWl0IGRvYy5xdWVyeVNlbGVjdG9yKCIuZ3JpZC1jb250YWluZXIiKTsKKyAgICAgICAgcmV0
dXJuIFdJLmRvbU1hbmFnZXIubm9kZUZvcklkKG5vZGVJZCk7CisgICAgfQorCisgICAgYXN5bmMg
ZnVuY3Rpb24gZ2V0QWxsR3JpZENvbnRhaW5lck5vZGVzKCkgeworICAgICAgICBsZXQgZG9jID0g
YXdhaXQgV0kuZG9tTWFuYWdlci5yZXF1ZXN0RG9jdW1lbnQoKTsKKyAgICAgICAgbGV0IG5vZGVJ
ZHMgPSBhd2FpdCBkb2MucXVlcnlTZWxlY3RvckFsbCgiLmdyaWQtY29udGFpbmVyIik7CisgICAg
ICAgIHJldHVybiBub2RlSWRzLm1hcCgobm9kZUlkKSA9PiBXSS5kb21NYW5hZ2VyLm5vZGVGb3JJ
ZChub2RlSWQpKTsKKyAgICB9CisKKyAgICBhc3luYyBmdW5jdGlvbiBncmlkT3ZlcmxheUNvdW50
KCkgeworICAgICAgICByZXR1cm4gSW5zcGVjdG9yVGVzdC5ldmFsdWF0ZUluUGFnZSgid2luZG93
LmludGVybmFscy5pbnNwZWN0b3JHcmlkT3ZlcmxheUNvdW50KCkiKTsKKyAgICB9CisKKyAgICBh
c3luYyBmdW5jdGlvbiBjaGVja0dyaWRPdmVybGF5Q291bnQoZXhwZWN0ZWQpIHsKKyAgICAgICAg
bGV0IGFjdHVhbCA9IGF3YWl0IGdyaWRPdmVybGF5Q291bnQoKTsKKyAgICAgICAgbGV0IG1lc3Nh
Z2U7CisgICAgICAgIHN3aXRjaCAoZXhwZWN0ZWQpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAg
ICAgICAgbWVzc2FnZSA9ICJTaG91bGQgaGF2ZSAxIGdyaWQgZGlzcGxheWVkLiI7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBgU2hv
dWxkIGhhdmUgJHtleHBlY3RlZH0gZ3JpZHMgZGlzcGxheWVkLmA7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0RXF1YWwoYWN0dWFs
LCBleHBlY3RlZCwgbWVzc2FnZSk7CisgICAgfQorCisgICAgc3VpdGUuYWRkVGVzdENhc2Uoewor
ICAgICAgICBuYW1lOiAiRE9NLnNob3dHcmlkT3ZlcmxheS5TaG93T25lR3JpZCIsCisgICAgICAg
IGRlc2NyaXB0aW9uOiAiTm8gZXJyb3Igb2NjdXJzIHdoZW4gcmVxdWVzdGluZyB0byBzaG93IGEg
Z3JpZCBvdmVybGF5LiIsCisgICAgICAgIGFzeW5jIHRlc3QoKSB7CisgICAgICAgICAgICBhd2Fp
dCBjaGVja0dyaWRPdmVybGF5Q291bnQoMCk7CisgICAgICAgICAgICBsZXQgY29udGFpbmVyID0g
YXdhaXQgZ2V0R3JpZENvbnRhaW5lck5vZGUoKTsKKworICAgICAgICAgICAgSW5zcGVjdG9yVGVz
dC5sb2coIlJlcXVlc3RpbmcgdG8gc2hvdyBncmlkIG92ZXJsYXkgZm9yIGZpcnN0IC5ncmlkLWNv
bnRhaW5lciIpOworICAgICAgICAgICAgYXdhaXQgRE9NQWdlbnQuc2hvd0dyaWRPdmVybGF5KGNv
bnRhaW5lci5pZCwgV0kuQ29sb3IuZnJvbVN0cmluZygibWFnZW50YSIpLnRvUHJvdG9jb2woKSk7
CisgICAgICAgICAgICBhd2FpdCBjaGVja0dyaWRPdmVybGF5Q291bnQoMSk7CisKKyAgICAgICAg
ICAgIC8vIE5vIGVycm9yIHNob3VsZCBvY2N1ciBpZiBzaG93aW5nIGdyaWQgb3ZlcmxheSBmb3Ig
YSBub2RlIHRoYXQgYWxyZWFkeSBoYXMgb25lLgorICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5s
b2coIlJlcXVlc3RpbmcgdG8gc2hvdyBhIGRpZmZlcmVudCBncmlkIG92ZXJsYXkgZm9yIGZpcnN0
IC5ncmlkLWNvbnRhaW5lciIpOworICAgICAgICAgICAgYXdhaXQgRE9NQWdlbnQuc2hvd0dyaWRP
dmVybGF5KGNvbnRhaW5lci5pZCwgV0kuQ29sb3IuZnJvbVN0cmluZygiZ3JlZW4iKS50b1Byb3Rv
Y29sKCkpOworICAgICAgICAgICAgYXdhaXQgY2hlY2tHcmlkT3ZlcmxheUNvdW50KDEpOworCisg
ICAgICAgICAgICAvLyBObyBlcnJvciBzaG91bGQgb2NjdXIgd2hlbiBoaWRpbmcgdGhlIGdyaWQg
b3ZlcmxheS4KKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJSZXF1ZXN0aW5nIHRvIGhp
ZGUgZ3JpZCBvdmVybGF5Iik7CisgICAgICAgICAgICBhd2FpdCBET01BZ2VudC5oaWRlR3JpZE92
ZXJsYXkoY29udGFpbmVyLmlkKTsKKyAgICAgICAgICAgIGF3YWl0IGNoZWNrR3JpZE92ZXJsYXlD
b3VudCgwKTsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgc3VpdGUuYWRkVGVzdENhc2Uoewor
ICAgICAgICBuYW1lOiAiRE9NLnNob3dHcmlkT3ZlcmxheS5TaG93VHdvR3JpZHMiLAorICAgICAg
ICBkZXNjcmlwdGlvbjogIk5vIGVycm9yIG9jY3VycyB3aGVuIHJlcXVlc3RpbmcgdG8gc2hvdyBt
dWx0aXBsZSBncmlkIG92ZXJsYXlzLiIsCisgICAgICAgIGFzeW5jIHRlc3QoKSB7CisgICAgICAg
ICAgICBhd2FpdCBjaGVja0dyaWRPdmVybGF5Q291bnQoMCk7CisgICAgICAgICAgICBsZXQgW2Zp
cnN0LCBzZWNvbmRdID0gYXdhaXQgZ2V0QWxsR3JpZENvbnRhaW5lck5vZGVzKCk7CisKKyAgICAg
ICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJSZXF1ZXN0aW5nIHRvIHNob3cgZmlyc3QgZ3JpZCBv
dmVybGF5Iik7CisgICAgICAgICAgICBhd2FpdCBET01BZ2VudC5zaG93R3JpZE92ZXJsYXkoZmly
c3QuaWQsIFdJLkNvbG9yLmZyb21TdHJpbmcoIm1hZ2VudGEiKS50b1Byb3RvY29sKCkpOworICAg
ICAgICAgICAgYXdhaXQgY2hlY2tHcmlkT3ZlcmxheUNvdW50KDEpOworCisgICAgICAgICAgICAv
LyBObyBlcnJvciBzaG91bGQgb2NjdXIgaWYgc2hvd2luZyBncmlkIG92ZXJsYXkgZm9yIGEgbm9k
ZSB0aGF0IGFscmVhZHkgaGFzIG9uZS4KKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJS
ZXF1ZXN0aW5nIHRvIHNob3cgc2Vjb25kIGdyaWQgb3ZlcmxheSIpOworICAgICAgICAgICAgYXdh
aXQgRE9NQWdlbnQuc2hvd0dyaWRPdmVybGF5KHNlY29uZC5pZCwgV0kuQ29sb3IuZnJvbVN0cmlu
ZygiZ3JlZW4iKS50b1Byb3RvY29sKCkpOworICAgICAgICAgICAgYXdhaXQgY2hlY2tHcmlkT3Zl
cmxheUNvdW50KDIpOworCisgICAgICAgICAgICAvLyBObyBlcnJvciBzaG91bGQgb2NjdXIgd2hl
biBoaWRpbmcgdGhlIGdyaWQgb3ZlcmxheS4KKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9n
KCJSZXF1ZXN0aW5nIHRvIGhpZGUgZmlyc3QgZ3JpZCBvdmVybGF5Iik7CisgICAgICAgICAgICBh
d2FpdCBET01BZ2VudC5oaWRlR3JpZE92ZXJsYXkoZmlyc3QuaWQpOworICAgICAgICAgICAgYXdh
aXQgY2hlY2tHcmlkT3ZlcmxheUNvdW50KDEpOworCisgICAgICAgICAgICAvLyBObyBlcnJvciBz
aG91bGQgb2NjdXIgd2hlbiBoaWRpbmcgdGhlIGdyaWQgb3ZlcmxheS4KKyAgICAgICAgICAgIElu
c3BlY3RvclRlc3QubG9nKCJSZXF1ZXN0aW5nIHRvIGhpZGUgc2Vjb25kIGdyaWQgb3ZlcmxheSIp
OworICAgICAgICAgICAgYXdhaXQgRE9NQWdlbnQuaGlkZUdyaWRPdmVybGF5KHNlY29uZC5pZCk7
CisgICAgICAgICAgICBhd2FpdCBjaGVja0dyaWRPdmVybGF5Q291bnQoMCk7CisgICAgICAgIH0K
KyAgICB9KTsKKworICAgIHN1aXRlLmFkZFRlc3RDYXNlKHsKKyAgICAgICAgbmFtZTogIkRPTS5z
aG93R3JpZE92ZXJsYXkuSGlkZUFsbEdyaWRzIiwKKyAgICAgICAgZGVzY3JpcHRpb246ICJObyBl
cnJvciBvY2N1cnMgd2hlbiByZXF1ZXN0aW5nIHRvIHNob3cgbXVsdGlwbGUgZ3JpZCBvdmVybGF5
cy4iLAorICAgICAgICBhc3luYyB0ZXN0KCkgeworICAgICAgICAgICAgYXdhaXQgY2hlY2tHcmlk
T3ZlcmxheUNvdW50KDApOworICAgICAgICAgICAgbGV0IFtmaXJzdCwgc2Vjb25kXSA9IGF3YWl0
IGdldEFsbEdyaWRDb250YWluZXJOb2RlcygpOworCisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0
LmxvZygiUmVxdWVzdGluZyB0byBzaG93IGdyaWQgb3ZlcmxheSIpOworICAgICAgICAgICAgYXdh
aXQgRE9NQWdlbnQuc2hvd0dyaWRPdmVybGF5KGZpcnN0LmlkLCBXSS5Db2xvci5mcm9tU3RyaW5n
KCJtYWdlbnRhIikudG9Qcm90b2NvbCgpKTsKKyAgICAgICAgICAgIGF3YWl0IGNoZWNrR3JpZE92
ZXJsYXlDb3VudCgxKTsKKworICAgICAgICAgICAgLy8gTm8gZXJyb3Igc2hvdWxkIG9jY3VyIGlm
IHNob3dpbmcgZ3JpZCBvdmVybGF5IGZvciBhIG5vZGUgdGhhdCBhbHJlYWR5IGhhcyBvbmUuCisg
ICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiUmVxdWVzdGluZyB0byBzaG93IGEgZGlmZmVy
ZW50IGdyaWQgb3ZlcmxheSIpOworICAgICAgICAgICAgYXdhaXQgRE9NQWdlbnQuc2hvd0dyaWRP
dmVybGF5KHNlY29uZC5pZCwgV0kuQ29sb3IuZnJvbVN0cmluZygiZ3JlZW4iKS50b1Byb3RvY29s
KCkpOworICAgICAgICAgICAgYXdhaXQgY2hlY2tHcmlkT3ZlcmxheUNvdW50KDIpOworCisgICAg
ICAgICAgICAvLyBObyBlcnJvciBzaG91bGQgb2NjdXIgd2hlbiBoaWRpbmcgdGhlIGdyaWQgb3Zl
cmxheS4KKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJSZXF1ZXN0aW5nIHRvIGhpZGUg
YWxsIGdyaWQgb3ZlcmxheXMuIEhpZGluZyBhbGwgZ3JpZHMgaXMgaWRlbXBvdGVudCBhbmQgc2hv
dWxkIG5vdCB0aHJvdyBhbiBlcnJvci4iKTsKKyAgICAgICAgICAgIGF3YWl0IERPTUFnZW50Lmhp
ZGVHcmlkT3ZlcmxheSgpOworICAgICAgICAgICAgYXdhaXQgY2hlY2tHcmlkT3ZlcmxheUNvdW50
KDApOworCisgICAgICAgICAgICAvLyBObyBlcnJvciBzaG91bGQgb2NjdXIgd2hlbiBoaWRpbmcg
dGhlIGdyaWQgb3ZlcmxheS4KKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJSZXF1ZXN0
aW5nIHRvIGhpZGUgYWxsIGdyaWQgb3ZlcmxheXMgYWdhaW4sIGV4cGVjdGluZyBub25lIHRvIGJl
IGNsZWFyZWQuIEhpZGluZyBhbGwgZ3JpZHMgaXMgaWRlbXBvdGVudCBhbmQgc2hvdWxkIG5vdCB0
aHJvdyBhbiBlcnJvci4iKTsKKyAgICAgICAgICAgIGF3YWl0IERPTUFnZW50LmhpZGVHcmlkT3Zl
cmxheSgpOworICAgICAgICAgICAgYXdhaXQgY2hlY2tHcmlkT3ZlcmxheUNvdW50KDApOworICAg
ICAgICB9CisgICAgfSk7CisKKyAgICBzdWl0ZS5hZGRUZXN0Q2FzZSh7CisgICAgICAgIG5hbWU6
ICJET00uc2hvd0dyaWRPdmVybGF5LkhpZGVCZWZvcmVTaG93U2hvdWxkRXJyb3IiLAorICAgICAg
ICBkZXNjcmlwdGlvbjogIlJldHVybiBhbiBlcnJvciB3aGVuIHJlcXVlc3RpbmcgdG8gaGlkZSBh
IGdyaWQgb3ZlcmxheSB3aGVuIG5vbmUgaXMgYWN0aXZlIGZvciB0aGUgbm9kZS4iLAorICAgICAg
ICBhc3luYyB0ZXN0KCkgeworICAgICAgICAgICAgbGV0IGNvbnRhaW5lciA9IGF3YWl0IGdldEdy
aWRDb250YWluZXJOb2RlKCk7CisKKyAgICAgICAgICAgIGF3YWl0IGNoZWNrR3JpZE92ZXJsYXlD
b3VudCgwKTsKKworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIlJlcXVlc3RpbmcgdG8g
aGlkZSBncmlkIG92ZXJsYXkgZm9yIC5ncmlkLWNvbnRhaW5lciIpOworICAgICAgICAgICAgYXdh
aXQgSW5zcGVjdG9yVGVzdC5leHBlY3RFeGNlcHRpb24oYXN5bmMgKCkgPT4geworICAgICAgICAg
ICAgICAgIGF3YWl0IERPTUFnZW50LmhpZGVHcmlkT3ZlcmxheShjb250YWluZXIuaWQpOworICAg
ICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJSZXF1ZXN0aW5n
IHRvIGhpZGUgYWxsIGdyaWQgb3ZlcmxheXMuIEhpZGluZyBhbGwgZ3JpZHMgaXMgaWRlbXBvdGVu
dCBhbmQgc2hvdWxkIG5vdCB0aHJvdyBhbiBlcnJvci4iKTsKKyAgICAgICAgICAgIGF3YWl0IERP
TUFnZW50LmhpZGVHcmlkT3ZlcmxheSgpOworICAgICAgICAgICAgYXdhaXQgY2hlY2tHcmlkT3Zl
cmxheUNvdW50KDApOworICAgICAgICB9CisgICAgfSk7CisKKyAgICBzdWl0ZS5hZGRUZXN0Q2Fz
ZSh7CisgICAgICAgIG5hbWU6ICJET00uc2hvd0dyaWRPdmVybGF5LkZvck5vbmV4aXN0ZW50Tm9k
ZVNob3VsZEVycm9yIiwKKyAgICAgICAgZGVzY3JpcHRpb246ICJSZXR1cm4gYW4gZXJyb3Igd2hl
biByZXF1ZXN0aW5nIHRvIHNob3cgYSBncmlkIG92ZXJsYXkgZm9yIGEgbm9uZXhpc3RlbnQgbm9k
ZS4iLAorICAgICAgICBhc3luYyB0ZXN0KCkgeworICAgICAgICAgICAgYXdhaXQgY2hlY2tHcmlk
T3ZlcmxheUNvdW50KDApOworCisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiUmVxdWVz
dGluZyB0byBzaG93IGdyaWQgb3ZlcmxheSBmb3IgaW52YWxpZCBub2RlSWQgLTEiKTsKKyAgICAg
ICAgICAgIGF3YWl0IEluc3BlY3RvclRlc3QuZXhwZWN0RXhjZXB0aW9uKGFzeW5jICgpID0+IHsK
KyAgICAgICAgICAgICAgICBhd2FpdCBET01BZ2VudC5zaG93R3JpZE92ZXJsYXkoLTEsIFdJLkNv
bG9yLmZyb21TdHJpbmcoIm1hZ2VudGEiKS50b1Byb3RvY29sKCkpOworICAgICAgICAgICAgfSk7
CisKKyAgICAgICAgYXdhaXQgY2hlY2tHcmlkT3ZlcmxheUNvdW50KDApOworICAgICAgICB9Cisg
ICAgfSk7CisKKyAgICBzdWl0ZS5ydW5UZXN0Q2FzZXNBbmRGaW5pc2goKTsKK30KKzwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorICAgIDxzdHlsZT4KKyAgICAg
ICAgYm9keSB7CisgICAgICAgICAgICBtYXJnaW46IDEwMHB4OworICAgICAgICB9CisgICAgICAg
IC5ncmlkLWNvbnRhaW5lciB7CisgICAgICAgICAgICBkaXNwbGF5OiBncmlkOworICAgICAgICAg
ICAgZ3JpZC1nYXA6IDEwcHg7CisgICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDEw
MHB4IDEwMHB4IDEwMHB4OworICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Cisg
ICAgICAgICAgICBjb2xvcjogZ3JheTsKKyAgICAgICAgfQorCisgICAgICAgIC5ncmlkLWNvbnRh
aW5lciA+IC5ib3ggeworICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogZ3JheTsKKyAgICAg
ICAgICAgIGNvbG9yOiB3aGl0ZTsKKyAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDVweDsKKyAg
ICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CisgICAgICAgICAgICBmb250LXNpemU6IDE1MCU7Cisg
ICAgICAgIH0KKyAgICA8L3N0eWxlPgorCisgICAgPHA+VGVzdHMgZm9yIHRoZSBET00uc2hvd0dy
aWRPdmVybGF5IGNvbW1hbmQuPC9wPgorICAgIDxkaXYgY2xhc3M9ImdyaWQtY29udGFpbmVyIiBz
dHlsZT0iY29sb3I6ICMzNjYiPgorICAgICAgICA8ZGl2IGNsYXNzPSJib3ggYSI+QTwvZGl2Pgor
ICAgICAgICA8ZGl2IGNsYXNzPSJib3ggYiI+QjwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJi
b3ggYyI+QzwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJib3ggZCI+RDwvZGl2PgorICAgICAg
ICA8ZGl2IGNsYXNzPSJib3ggZSI+RTwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJib3ggZiI+
RjwvZGl2PgorICAgIDwvZGl2PgorICAgIDxiciAvPgorICAgIDxkaXYgY2xhc3M9ImdyaWQtY29u
dGFpbmVyIiBzdHlsZT0iY29sb3I6ICM2MzYiPgorICAgICAgICA8ZGl2IGNsYXNzPSJib3ggYSI+
QTwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJib3ggYiI+QjwvZGl2PgorICAgICAgICA8ZGl2
IGNsYXNzPSJib3ggYyI+QzwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJib3ggZCI+RDwvZGl2
PgorICAgICAgICA8ZGl2IGNsYXNzPSJib3ggZSI+RTwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNz
PSJib3ggZiI+RjwvZGl2PgorICAgIDwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL21vZGVsL2NvbG9yLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2luc3BlY3Rvci9tb2RlbC9jb2xvci1leHBlY3RlZC50eHQKaW5kZXggOTNjZjkzYTY0
OGY3ZGQxMjMzNGM5NWIwOGFjNDgwZDVhYmExZDYyZC4uZGVmY2EyZDI3ZmFlOTg4MDg3NDE3ZjBh
ZGRiNGEwNWI2MjFlMjQ1YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL21vZGVs
L2NvbG9yLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvbW9kZWwvY29s
b3ItZXhwZWN0ZWQudHh0CkBAIC01NDMsMyArNTQzLDkgQEAgUEFTUzogU2hvdWxkIGNvbnZlcnQg
Wy0xLDAsMF0gdG8gWzAsMCwwXS4KICJjb2xvcihkaXNwbGF5LXAzIDEgMCAwKSIgaXMgb3V0c2lk
ZSBzUkdCLgogImNvbG9yKGRpc3BsYXktcDMgMC45MyAwLjM1MyAwLjM1MykiIGlzIG91dHNpZGUg
c1JHQi4KIAorLS0gUnVubmluZyB0ZXN0IGNhc2U6IFdJLkNvbG9yLnRvUHJvdG9jb2wKK1BBU1M6
IFNob3VsZCBjb252ZXJ0IHJnYmEoMTAsMjAsMzAsNDApIHRvIHsiciI6MTAsImciOjIwLCJiIjoz
MCwiYSI6MX0uCitQQVNTOiBTaG91bGQgY29udmVydCByZ2IoMTAgMjAgMzAgLyA0MCUpIHRvIHsi
ciI6MTAsImciOjIwLCJiIjozMCwiYSI6MC40fS4KK1BBU1M6IFNob3VsZCBjb252ZXJ0ICNhMEFh
MEEgdG8geyJyIjoxNjAsImciOjE3MCwiYiI6MTAsImEiOjF9LgorUEFTUzogU2hvdWxkIGNvbnZl
cnQgcmdiKDEwJSAyMCUgMzAlIC8gNDAlKSB0byB7InIiOjI1LjUsImciOjUxLCJiIjo3Ni41LCJh
IjowLjR9LgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvbW9kZWwvY29sb3Iu
aHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9tb2RlbC9jb2xvci5odG1sCmluZGV4IDA0MGQy
Zjc0ZDMxNjg2ZjRhYjYzZTQzMjIzOTdlMmQyNzYyMmU2MzIuLmQ4NWJjYTA0M2RlMDg1MzFlNTY4
ZDZiZDBhYzFjMGU3ODg5MmZlYjUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9t
b2RlbC9jb2xvci5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9tb2RlbC9jb2xvci5o
dG1sCkBAIC02NzIsNiArNjcyLDI1IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgICAgICB9CiAgICAg
fSk7CiAKKyAgICBzdWl0ZS5hZGRUZXN0Q2FzZSh7CisgICAgICAgIG5hbWU6ICJXSS5Db2xvci50
b1Byb3RvY29sIiwKKyAgICAgICAgZGVzY3JpcHRpb246ICJUZXN0IHNlcmlhbGl6YXRpb24gb2Yg
V0kuQ29sb3IgaW50byBET00uUkdCQUNvbG9yLiIsCisgICAgICAgIHRlc3QoKSB7CisgICAgICAg
ICAgICBmdW5jdGlvbiB0ZXN0SW5wdXQoaW5wdXQsIGV4cGVjdGVkKSB7CisgICAgICAgICAgICAg
ICAgbGV0IGNvbG9yID0gV0kuQ29sb3IuZnJvbVN0cmluZyhpbnB1dCk7CisgICAgICAgICAgICAg
ICAgbGV0IGFjdHVhbCA9IGNvbG9yLnRvUHJvdG9jb2woKTsKKyAgICAgICAgICAgICAgICBJbnNw
ZWN0b3JUZXN0LmV4cGVjdFNoYWxsb3dFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBgU2hvdWxkIGNv
bnZlcnQgJHtpbnB1dH0gdG8gJHtKU09OLnN0cmluZ2lmeShleHBlY3RlZCl9LmApOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICB0ZXN0SW5wdXQoInJnYmEoMTAsMjAsMzAsNDApIiwge3I6
IDEwLCBnOiAyMCwgYjogMzAsIGE6IDF9KTsKKyAgICAgICAgICAgIHRlc3RJbnB1dCgicmdiKDEw
IDIwIDMwIC8gNDAlKSIsIHtyOiAxMCwgZzogMjAsIGI6IDMwLCBhOiAwLjR9KTsKKyAgICAgICAg
ICAgIHRlc3RJbnB1dCgiI2EwQWEwQSIsIHtyOiAxNjAsIGc6IDE3MCwgYjogMTAsIGE6IDF9KTsK
KyAgICAgICAgICAgIHRlc3RJbnB1dCgicmdiKDEwJSAyMCUgMzAlIC8gNDAlKSIsIHtyOiAyNS41
LCBnOiA1MSwgYjogNzYuNSwgYTogMC40fSk7CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgfSk7CisKICAgICBzdWl0ZS5ydW5UZXN0Q2FzZXNBbmRGaW5pc2goKTsK
IH0KIDwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3VuaXQtdGVz
dHMvdGVzdC1oYXJuZXNzLWV4cGVjdC1mdW5jdGlvbnMtYXN5bmMtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL3VuaXQtdGVzdHMvdGVzdC1oYXJuZXNzLWV4cGVjdC1mdW5jdGlv
bnMtYXN5bmMtZXhwZWN0ZWQudHh0CmluZGV4IDk4OTAwMzM4M2Q1YjZhOWFjYzVjYTVjNTA1YzA2
NTgyZDhmNTM2YjYuLjBlOTdkNmEwYjc4MmJiNGE2Y2IxYTg3MDFiMTAyZWUwZGJlNjFmMTcgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci91bml0LXRlc3RzL3Rlc3QtaGFybmVzcy1l
eHBlY3QtZnVuY3Rpb25zLWFzeW5jLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvdW5pdC10ZXN0cy90ZXN0LWhhcm5lc3MtZXhwZWN0LWZ1bmN0aW9ucy1hc3luYy1leHBl
Y3RlZC50eHQKQEAgLTE3LDYgKzE3LDcgQEAgVGhlIGZvbGxvd2luZyBhc3NlcnRpb24gaXMgZXhw
ZWN0ZWQgdG8gZmFpbC4KIEZBSUw6IFNob3VsZCBwcm9kdWNlIGFuIGV4Y2VwdGlvbi4KICAgICBF
eHBlY3RlZDogbm90IG51bGwKICAgICBBY3R1YWw6IG51bGwKK1BBU1M6IEV4Y2VwdGlvbi1wcm9k
dWNpbmcgd29yayBzaG91bGQgbm90IHJldHVybiBhIHZhbHVlCiBQQVNTOiBSZWplY3RlZCB2YWx1
ZSBzaG91bGQgYmUgdGhlIHJldHVybmVkIHZhbHVlLgogCiAtLSBSdW5uaW5nIHRlc3QgY2FzZTog
ZXhwZWN0RXhjZXB0aW9uLkFzeW5jV29ya1RoYXRSZWplY3RzCkBAIC0zMCw2ICszMSw5IEBAIFRo
ZSBmb2xsb3dpbmcgYXNzZXJ0aW9uIGlzIGV4cGVjdGVkIHRvIGZhaWwuCiBGQUlMOiBTaG91bGQg
cHJvZHVjZSBhbiBleGNlcHRpb24uCiAgICAgRXhwZWN0ZWQ6IG5vdCBudWxsCiAgICAgQWN0dWFs
OiBudWxsCitGQUlMOiBFeGNlcHRpb24tcHJvZHVjaW5nIHdvcmsgc2hvdWxkIG5vdCByZXR1cm4g
YSB2YWx1ZQorICAgIEV4cGVjdGVkOiB1bmRlZmluZWQKKyAgICBBY3R1YWw6IDQyCiBQQVNTOiBS
ZWplY3RlZCB2YWx1ZSBzaG91bGQgYmUgdGhlIHJldHVybmVkIHZhbHVlLgogCiAtLSBSdW5uaW5n
IHRlc3QgY2FzZTogZXhwZWN0RXhjZXB0aW9uLkFzeW5jV29ya1RoYXRSZXNvbHZlc0ltcGxpY2l0
bHkKQEAgLTM3LDUgKzQxLDYgQEAgVGhlIGZvbGxvd2luZyBhc3NlcnRpb24gaXMgZXhwZWN0ZWQg
dG8gZmFpbC4KIEZBSUw6IFNob3VsZCBwcm9kdWNlIGFuIGV4Y2VwdGlvbi4KICAgICBFeHBlY3Rl
ZDogbm90IG51bGwKICAgICBBY3R1YWw6IG51bGwKK1BBU1M6IEV4Y2VwdGlvbi1wcm9kdWNpbmcg
d29yayBzaG91bGQgbm90IHJldHVybiBhIHZhbHVlCiBQQVNTOiBJbXBsaWNpdGx5IHJlc29sdmVk
IHZhbHVlIHNob3VsZCBiZSB1bmRlZmluZWQuCiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>