<?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>198629</bug_id>
          
          <creation_ts>2019-06-06 16:21:50 -0700</creation_ts>
          <short_desc>Web Inspector: longhand CSS properties overridden by shorthands miss strikethrough</short_desc>
          <delta_ts>2019-06-07 16:18:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>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="Nikita Vasilyev">nvasilyev</reporter>
          <assigned_to name="Nikita Vasilyev">nvasilyev</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>mattbaker</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1542600</commentid>
    <comment_count>0</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2019-06-06 16:21:50 -0700</bug_when>
    <thetext>Example:

    border-color: red;
    border: 1px solid green;

The 1st property should be displayed as overridden and have a strikethrough.

&lt;rdar://problem/45341525&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542601</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-06-06 16:22:02 -0700</bug_when>
    <thetext>&lt;rdar://problem/51504160&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542614</commentid>
    <comment_count>2</comment_count>
      <attachid>371536</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2019-06-06 16:38:12 -0700</bug_when>
    <thetext>Created attachment 371536
Patch

Tip for reviewers: LayoutTests/inspector/css/overridden-property.html doubles as a reduction page. You can open it in an old Safari to see how it worked before, and in ToT WebKit with the patch applied to see what changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542616</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-06-06 16:40:43 -0700</bug_when>
    <thetext>Attachment 371536 did not pass style-queue:


ERROR: Source/WebInspectorUI/UserInterface/Models/CSSProperty.js:312:  Line contains single-quote character.  [js/syntax] [5]
Total errors found: 1 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542617</commentid>
    <comment_count>4</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2019-06-06 16:43:25 -0700</bug_when>
    <thetext>(In reply to Build Bot from comment #3)
&gt; Attachment 371536 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Source/WebInspectorUI/UserInterface/Models/CSSProperty.js:312:  Line
&gt; contains single-quote character.  [js/syntax] [5]
&gt; Total errors found: 1 in 6 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.

`Property &quot;${this.formattedText}&quot; can&apos;t override itself.`
                                     ^
                                     It didn&apos;t like this single-quote :/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542645</commentid>
    <comment_count>5</comment_count>
      <attachid>371536</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-06-06 17:18:39 -0700</bug_when>
    <thetext>Comment on attachment 371536
Patch

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

As a side note,  I&apos;d expect a shorthand property to be overridden  if ALL of its shorthands are present and override this property, but that&apos;s probably going to be more work, so it may deserve its own followup.

&gt; LayoutTests/inspector/css/overridden-property-expected.txt:13
&gt; +border-top-color: red; overridden

These results really need a `PASS` somewhere, as otherwise it&apos;s really hard to tell if it&apos;s working as expected.

&gt; LayoutTests/inspector/css/overridden-property.html:10
&gt; +        if (property.implicit)

Should this instead be an `InspectorTest.assert`?  I&apos;d expect that `matchedRule.style.enabledProperties` shouldn&apos;t contain any implicit properties.

&gt; LayoutTests/inspector/css/overridden-property.html:47
&gt; +                if (rule.selectorText === selector) {

Why not use `WI.DOMNodeStyles.prototype.rulesForSelector`?  Although, it doesn&apos;t appear to be used anywhere, so you could also just remove it :P

&gt; LayoutTests/inspector/css/overridden-property.html:54
&gt; +                InspectorTest.log(`Couldn&apos;t find ${selector}`);

This should be an `InspectorTest.fail`.

&gt; LayoutTests/inspector/css/overridden-property.html:113
&gt; +        name: &quot;NotOverriddenByLonghandImportant&quot;,

We also have a `NotOverriddeenByLonghand` for more test coverage/completeness.

&gt; LayoutTests/inspector/css/overridden-property.html:-71
&gt; -    &lt;p&gt;Test that CSSProperty.prototype.overridden is cleared when the overriding (effective) property is removed.&lt;/p&gt;

There should always be a description in the test that explains overall what the test is for.

&gt; LayoutTests/inspector/css/overridden-property.html:134
&gt; +    .shorthand-important {

These names aren&apos;t very clear.  If anything i&apos;d expect this to be `.shorthand-overridden-by-important-longhand`.

&gt; LayoutTests/inspector/css/overridden-property.html:139
&gt; +    .longhand-important {

Ditto (&gt;134), but with `.longhand-overridden-by-important-shorthand` instead.

&gt; Source/WebInspectorUI/UserInterface/Models/CSSProperty.js:302
&gt; +        console.assert(this !== effectiveProperty, `Property &quot;${this.formattedText}&quot; can&apos;t override itself.`);

NIT: I&apos;d also log `this` as another argument so that if inspector2 is already open, we can do more investigation immediately.

&gt; Source/WebInspectorUI/UserInterface/Models/DOMNodeStyles.js:862
&gt; +            else {

Style: no `else` when the `if` is an early-return.

&gt; Source/WebInspectorUI/UserInterface/Models/DOMNodeStyles.js:907
&gt; +                if (isOverriddenBy(property, property.relatedShorthandProperty)) {

To prevent future foot-guns, I think we should rename this function to be `isOverriddenByRelatedShorthand` and have the logic for fetching `property.relatedShorthandProperty` be inside the function itself.  The reason for this is that we don&apos;t want to mark a shorthand property as overridden if only one of it&apos;s longhands exists (see &gt;overridden-property.html:140).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542646</commentid>
    <comment_count>6</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-06-06 17:19:27 -0700</bug_when>
    <thetext>(In reply to Nikita Vasilyev from comment #4)
&gt; (In reply to Build Bot from comment #3)
&gt; &gt; Attachment 371536 [details] did not pass style-queue:
&gt; &gt; 
&gt; &gt; 
&gt; &gt; ERROR: Source/WebInspectorUI/UserInterface/Models/CSSProperty.js:312:  Line contains single-quote character.  [js/syntax] [5]
&gt; &gt; Total errors found: 1 in 6 files
&gt; &gt; 
&gt; &gt; 
&gt; &gt; If any of these errors are false positives, please file a bug against check-webkit-style.
&gt; 
&gt; `Property &quot;${this.formattedText}&quot; can&apos;t override itself.`
&gt;                                      ^
&gt;                                      It didn&apos;t like this single-quote :/
This is definitely a bug :(

Please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542688</commentid>
    <comment_count>7</comment_count>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2019-06-06 19:40:54 -0700</bug_when>
    <thetext>(In reply to Devin Rousso from comment #6)
&gt; (In reply to Nikita Vasilyev from comment #4)
&gt; &gt; (In reply to Build Bot from comment #3)
&gt; &gt; &gt; Attachment 371536 [details] did not pass style-queue:
&gt; &gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; ERROR: Source/WebInspectorUI/UserInterface/Models/CSSProperty.js:312:  Line contains single-quote character.  [js/syntax] [5]
&gt; &gt; &gt; Total errors found: 1 in 6 files
&gt; &gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; If any of these errors are false positives, please file a bug against check-webkit-style.
&gt; &gt; 
&gt; &gt; `Property &quot;${this.formattedText}&quot; can&apos;t override itself.`
&gt; &gt;                                      ^
&gt; &gt;                                      It didn&apos;t like this single-quote :/
&gt; This is definitely a bug :(
&gt; 
&gt; Please file a bug against check-webkit-style.

I filed a related style checker bug a while back:

&lt;https://webkit.org/b/165453&gt; check-webkit-style: false positive caused by regex literal matching in SingleQuoteChecker</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542889</commentid>
    <comment_count>8</comment_count>
      <attachid>371536</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2019-06-07 11:36:41 -0700</bug_when>
    <thetext>Comment on attachment 371536
Patch

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

Thanks for reviewing!

&gt;&gt; LayoutTests/inspector/css/overridden-property-expected.txt:13
&gt;&gt; +border-top-color: red; overridden
&gt; 
&gt; These results really need a `PASS` somewhere, as otherwise it&apos;s really hard to tell if it&apos;s working as expected.

Where would you put a &quot;PASS&quot;?

It seems to me that as long as the actual text matches the expected text, it&apos;s a pass. Having &quot;PASS&quot; logged and also having mismatched expected/actual text would only make it confusing.

&gt;&gt; LayoutTests/inspector/css/overridden-property.html:10
&gt;&gt; +        if (property.implicit)
&gt; 
&gt; Should this instead be an `InspectorTest.assert`?  I&apos;d expect that `matchedRule.style.enabledProperties` shouldn&apos;t contain any implicit properties.

No, matchedRule.style.enabledProperties does contain implicit properties. `visibleProperties` does NOT. I could use either, I don&apos;t have a preference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542891</commentid>
    <comment_count>9</comment_count>
      <attachid>371536</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-06-07 11:40:27 -0700</bug_when>
    <thetext>Comment on attachment 371536
Patch

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

&gt;&gt;&gt; LayoutTests/inspector/css/overridden-property-expected.txt:13
&gt;&gt;&gt; +border-top-color: red; overridden
&gt;&gt; 
&gt;&gt; These results really need a `PASS` somewhere, as otherwise it&apos;s really hard to tell if it&apos;s working as expected.
&gt; 
&gt; Where would you put a &quot;PASS&quot;?
&gt; 
&gt; It seems to me that as long as the actual text matches the expected text, it&apos;s a pass. Having &quot;PASS&quot; logged and also having mismatched expected/actual text would only make it confusing.

I mean using the `InspectorText.expect*` functions.  It would show as a PASS if they match, and a FAIL if not.  I had to read the expected file a few times before I understood what it was trying to tell me.

The point of the PASS is to make it clear to _other_ people what they should be looking for.  Sometimes, dumping the raw text makes sense.  I don&apos;t think that&apos;s the case here because it&apos;s not obvious what the &quot;overridden&quot; means since the rest of the text is real CSS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542905</commentid>
    <comment_count>10</comment_count>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2019-06-07 12:55:37 -0700</bug_when>
    <thetext>(In reply to Devin Rousso from comment #9)
&gt; Comment on attachment 371536 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=371536&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; LayoutTests/inspector/css/overridden-property-expected.txt:13
&gt; &gt;&gt;&gt; +border-top-color: red; overridden
&gt; &gt;&gt; 
&gt; &gt;&gt; These results really need a `PASS` somewhere, as otherwise it&apos;s really hard to tell if it&apos;s working as expected.
&gt; &gt; 
&gt; &gt; Where would you put a &quot;PASS&quot;?
&gt; &gt; 
&gt; &gt; It seems to me that as long as the actual text matches the expected text, it&apos;s a pass. Having &quot;PASS&quot; logged and also having mismatched expected/actual text would only make it confusing.
&gt; 
&gt; I mean using the `InspectorText.expect*` functions.  It would show as a PASS
&gt; if they match, and a FAIL if not.  I had to read the expected file a few
&gt; times before I understood what it was trying to tell me.

Some tests are less straightforward to express in the form &quot;actual vs. expected&quot;. Many of our tests log stack traces or other state, and just compare it against future logs.

In general these are more difficult to read and understand, and rely on the author ensuring the initial output is correct. Tests of the form &quot;actual vs. expected&quot; are a bit better in both regards, IMO.

&gt; The point of the PASS is to make it clear to _other_ people what they should
&gt; be looking for.  Sometimes, dumping the raw text makes sense.  I don&apos;t think
&gt; that&apos;s the case here because it&apos;s not obvious what the &quot;overridden&quot; means
&gt; since the rest of the text is real CSS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542922</commentid>
    <comment_count>11</comment_count>
      <attachid>371536</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2019-06-07 13:29:51 -0700</bug_when>
    <thetext>Comment on attachment 371536
Patch

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

&gt;&gt; LayoutTests/inspector/css/overridden-property.html:54
&gt;&gt; +                InspectorTest.log(`Couldn&apos;t find ${selector}`);
&gt; 
&gt; This should be an `InspectorTest.fail`.

Whatever you do, you should resolve/reject the promise or call InspectorTest.completeTest, so that the test doesn&apos;t time out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542959</commentid>
    <comment_count>12</comment_count>
      <attachid>371613</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2019-06-07 15:00:55 -0700</bug_when>
    <thetext>Created attachment 371613
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542965</commentid>
    <comment_count>13</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-06-07 15:04:18 -0700</bug_when>
    <thetext>Attachment 371613 did not pass style-queue:


ERROR: Source/WebInspectorUI/UserInterface/Models/CSSProperty.js:312:  Line contains single-quote character.  [js/syntax] [5]
Total errors found: 1 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542967</commentid>
    <comment_count>14</comment_count>
      <attachid>371613</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-06-07 15:11:29 -0700</bug_when>
    <thetext>Comment on attachment 371613
Patch

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

r=me, with some final fixes before landing.

&gt; LayoutTests/inspector/css/overridden-property-expected.txt:15
&gt; +PASS: border-top-color is overridden.

Nice! This is MUCH easier to read/understand.

&gt; LayoutTests/inspector/css/overridden-property.html:38
&gt; +    function getStyleDeclaration(selector, callback, resolve) {

Now that you&apos;re passing a `callback`, I&apos;d replace the `resolve` with a `reject`, as we really should be throwing an error if we couldn&apos;t find the selector.

&gt; LayoutTests/inspector/css/overridden-property.html:92
&gt; +        name: &quot;OverriddenByShorthand&quot;,

Style: please prefix the test case name with the suite name, so &quot;OverriddenProperty.OverriddenByShorthand&quot;.

&gt; LayoutTests/inspector/css/overridden-property.html:95
&gt; +                InspectorTest.expectTrue(style.visibleProperties[0].overridden, &quot;border-top-color is overridden.&quot;);

We should be using `propertyForName` instead of expecting that it&apos;s the first visible property.
```
    const dontCreateIfMissing = true;
    let borderTopColorProperty = style.propertyForName(&quot;border-top-color&quot;, dontCreateIfMissing);
```
Alternatively, adding an `InspectorTest.assert(style.visibleProperties[0].name === &quot;border-top-color&quot;);` would be fine too.

&gt; LayoutTests/inspector/css/overridden-property.html:120
&gt; +            });

Shouldn&apos;t you also pass `reject` in here?

&gt; LayoutTests/inspector/css/overridden-property.html:131
&gt; +            });

Ditto (&gt;120).

&gt; LayoutTests/inspector/css/overridden-property.html:146
&gt; +    .shorthand {

A better name could be used here, like `.longhand-overridden-by-shorthand`.

&gt; LayoutTests/inspector/css/overridden-property.html:161
&gt; +    .shorthand-not-overridden-longhand {

NIT: this is missing a `-by-`, so `.shorthand-not-overridden-by-longhand`.

&gt; LayoutTests/inspector/css/overridden-property.html:170
&gt; +    &lt;div class=&quot;shorthand-overridden-by-important-longhand&quot;&gt;&lt;/div&gt;
&gt; +    &lt;div class=&quot;shorthand-overridden-by-important-longhand&quot;&gt;&lt;/div&gt;

Duplicate.  Please remove (or explain why it&apos;s still needed).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542979</commentid>
    <comment_count>15</comment_count>
      <attachid>371618</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2019-06-07 15:37:04 -0700</bug_when>
    <thetext>Created attachment 371618
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1543003</commentid>
    <comment_count>16</comment_count>
      <attachid>371618</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-06-07 16:18:46 -0700</bug_when>
    <thetext>Comment on attachment 371618
Patch

Clearing flags on attachment: 371618

Committed r246223: &lt;https://trac.webkit.org/changeset/246223&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1543004</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-06-07 16:18:47 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>371536</attachid>
            <date>2019-06-06 16:38:12 -0700</date>
            <delta_ts>2019-06-07 15:00:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>12973</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBkNmU4YzhhZjA1YS4uZWI4ZmZhMDA5ZGMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAor
MjAxOS0wNi0wNiAgTmlraXRhIFZhc2lseWV2ICA8bnZhc2lseWV2QGFwcGxlLmNvbT4KKworICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBsb25naGFuZCBDU1MgcHJvcGVydGllcyBvdmVycmlkZGVuIGJ5
IHNob3J0aGFuZHMgbWlzcyBzdHJpa2V0aHJvdWdoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTg2MjkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzUx
NTA0MTYwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogaW5zcGVjdG9yL2Nzcy9vdmVycmlkZGVuLXByb3BlcnR5LWV4cGVjdGVkLnR4dDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvY3NzL292ZXJyaWRkZW4tcHJvcGVydHkuaHRtbDoKKwogMjAxOS0wNS0y
MyAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBbV0hMU0xdIFBy
b3BlcnR5IHJlc29sdmVyIG5lZWRzIHRvIHJlY3Vyc2UgdG8gaGFuZGxlIHRoZSBiYXNlIHdoZW4g
c2ltcGxpZnlpbmcgcnZhbHVlcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Nz
cy9vdmVycmlkZGVuLXByb3BlcnR5LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9jc3Mvb3ZlcnJpZGRlbi1wcm9wZXJ0eS1leHBlY3RlZC50eHQKaW5kZXggNmM3NjJjYmUyYjEu
LjgzNDMwOGI3OGJkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY3NzL292ZXJy
aWRkZW4tcHJvcGVydHktZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9j
c3Mvb3ZlcnJpZGRlbi1wcm9wZXJ0eS1leHBlY3RlZC50eHQKQEAgLTEsNSArMSwzIEBACi1UZXN0
IHRoYXQgQ1NTUHJvcGVydHkucHJvdG90eXBlLm92ZXJyaWRkZW4gaXMgY2xlYXJlZCB3aGVuIHRo
ZSBvdmVycmlkaW5nIChlZmZlY3RpdmUpIHByb3BlcnR5IGlzIHJlbW92ZWQuCi0KIAogPT0gUnVu
bmluZyB0ZXN0IHN1aXRlOiBPdmVycmlkZGVuUHJvcGVydHkKIC0tIFJ1bm5pbmcgdGVzdCBjYXNl
OiBPdmVycmlkZGVuUHJvcGVydHkuZWZmZWN0aXZlUHJvcGVydHlSZW1vdmVkCkBAIC0xMSwzICs5
LDE1IEBAIFJFTU9WRUQKIGNvbG9yOiByZWQ7CiAKIAorLS0gUnVubmluZyB0ZXN0IGNhc2U6IE92
ZXJyaWRkZW5CeVNob3J0aGFuZAorYm9yZGVyLXRvcC1jb2xvcjogcmVkOyBvdmVycmlkZGVuCiti
b3JkZXItY29sb3I6IGdyZWVuOworCistLSBSdW5uaW5nIHRlc3QgY2FzZTogT3ZlcnJpZGRlbkJ5
U2hvcnRoYW5kSW1wb3J0YW50Citib3JkZXItY29sb3I6IGdyZWVuICFpbXBvcnRhbnQ7Citib3Jk
ZXItdG9wLWNvbG9yOiByZWQ7IG92ZXJyaWRkZW4KKworLS0gUnVubmluZyB0ZXN0IGNhc2U6IE5v
dE92ZXJyaWRkZW5CeUxvbmdoYW5kSW1wb3J0YW50Citib3JkZXItY29sb3I6IGdyZWVuOworYm9y
ZGVyLXRvcC1jb2xvcjogcmVkICFpbXBvcnRhbnQ7CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2luc3BlY3Rvci9jc3Mvb3ZlcnJpZGRlbi1wcm9wZXJ0eS5odG1sIGIvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL2Nzcy9vdmVycmlkZGVuLXByb3BlcnR5Lmh0bWwKaW5kZXggZjE5ZWExZGVjM2MuLjRk
ODY1ZmY4NmIyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY3NzL292ZXJyaWRk
ZW4tcHJvcGVydHkuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY3NzL292ZXJyaWRk
ZW4tcHJvcGVydHkuaHRtbApAQCAtNCw3NiArNCwxNDYgQEAKIDxzY3JpcHQgc3JjPSIuLi8uLi9o
dHRwL3Rlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvaW5zcGVjdG9yLXRlc3QuanMiPjwvc2NyaXB0
PgogPHNjcmlwdD4KIGZ1bmN0aW9uIHRlc3QoKSB7Ci0gICAgbGV0IG5vZGVTdHlsZXMgPSBudWxs
OwotCiAgICAgbGV0IHN1aXRlID0gSW5zcGVjdG9yVGVzdC5jcmVhdGVBc3luY1N1aXRlKCJPdmVy
cmlkZGVuUHJvcGVydHkiKTsKIAogICAgIGZ1bmN0aW9uIGxvZ1Byb3BlcnR5KHByb3BlcnR5KSB7
CisgICAgICAgIGlmIChwcm9wZXJ0eS5pbXBsaWNpdCkKKyAgICAgICAgICAgIHJldHVybjsKKwog
ICAgICAgICBsZXQgdGV4dCA9IHByb3BlcnR5LmZvcm1hdHRlZFRleHQgfHwgIlJFTU9WRUQiOwor
CiAgICAgICAgIGlmIChwcm9wZXJ0eS5vdmVycmlkZGVuKQogICAgICAgICAgICAgdGV4dCArPSAi
IG92ZXJyaWRkZW4iOworCiAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKHRleHQpOwogICAgIH0K
IAorICAgIGZ1bmN0aW9uIGdldE5vZGVTdHlsZXMoc2VsZWN0b3IsIGNhbGxiYWNrKSB7CisgICAg
ICAgIFdJLmRvbU1hbmFnZXIucmVxdWVzdERvY3VtZW50KChkb2N1bWVudE5vZGUpID0+IHsKKyAg
ICAgICAgICAgIFdJLmRvbU1hbmFnZXIucXVlcnlTZWxlY3Rvcihkb2N1bWVudE5vZGUuaWQsIHNl
bGVjdG9yLCAoY29udGVudE5vZGVJZCkgPT4geworICAgICAgICAgICAgICAgIGlmICghY29udGVu
dE5vZGVJZCkgeworICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmZhaWwoIkRPTSBu
b2RlIG5vdCBmb3VuZC4iKTsKKyAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jb21w
bGV0ZVRlc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIGxldCBkb21Ob2RlID0gV0kuZG9tTWFuYWdlci5ub2RlRm9y
SWQoY29udGVudE5vZGVJZCk7CisgICAgICAgICAgICAgICAgbGV0IG5vZGVTdHlsZXMgPSBXSS5j
c3NNYW5hZ2VyLnN0eWxlc0Zvck5vZGUoZG9tTm9kZSk7CisKKyAgICAgICAgICAgICAgICBpZiAo
bm9kZVN0eWxlcy5uZWVkc1JlZnJlc2gpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZVN0eWxl
cy5zaW5nbGVGaXJlRXZlbnRMaXN0ZW5lcihXSS5ET01Ob2RlU3R5bGVzLkV2ZW50LlJlZnJlc2hl
ZCwgKGV2ZW50KSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhub2RlU3R5
bGVzKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5vZGVTdHlsZXMpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIH0pOworICAgIH0KKworICAgIGZ1bmN0aW9uIGxvZ01hdGNoaW5nUnVsZShzZWxl
Y3RvciwgcmVzb2x2ZSkgeworICAgICAgICBnZXROb2RlU3R5bGVzKHNlbGVjdG9yLCAobm9kZVN0
eWxlcykgPT4geworICAgICAgICAgICAgbGV0IG1hdGNoZWRSdWxlID0gbnVsbDsKKyAgICAgICAg
ICAgIGZvciAobGV0IHJ1bGUgb2Ygbm9kZVN0eWxlcy5tYXRjaGVkUnVsZXMpIHsKKyAgICAgICAg
ICAgICAgICBpZiAocnVsZS5zZWxlY3RvclRleHQgPT09IHNlbGVjdG9yKSB7CisgICAgICAgICAg
ICAgICAgICAgIG1hdGNoZWRSdWxlID0gcnVsZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIW1h
dGNoZWRSdWxlKSB7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coYENvdWxkbid0
IGZpbmQgJHtzZWxlY3Rvcn1gKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGZvciAobGV0IHByb3BlcnR5IG9mIG1hdGNoZWRSdWxlLnN0eWxl
LmVuYWJsZWRQcm9wZXJ0aWVzKQorICAgICAgICAgICAgICAgIGxvZ1Byb3BlcnR5KHByb3BlcnR5
KTsKKworICAgICAgICAgICAgcmVzb2x2ZSgpOworICAgICAgICB9KTsKKyAgICB9CisKICAgICBz
dWl0ZS5hZGRUZXN0Q2FzZSh7CiAgICAgICAgIG5hbWU6ICJPdmVycmlkZGVuUHJvcGVydHkuZWZm
ZWN0aXZlUHJvcGVydHlSZW1vdmVkIiwKKyAgICAgICAgZGVzY3JpcHRpb246ICJUZXN0IHRoYXQg
Q1NTUHJvcGVydHkucHJvdG90eXBlLm92ZXJyaWRkZW4gaXMgY2xlYXJlZCB3aGVuIHRoZSBvdmVy
cmlkaW5nIChlZmZlY3RpdmUpIHByb3BlcnR5IGlzIHJlbW92ZWQuIiwKICAgICAgICAgdGVzdChy
ZXNvbHZlLCByZWplY3QpIHsKLSAgICAgICAgICAgIGxldCBpbmxpbmVTdHlsZSA9IG5vZGVTdHls
ZXMuaW5saW5lU3R5bGU7Ci0gICAgICAgICAgICBsZXQgc3R5bGVSdWxlID0gbm9kZVN0eWxlcy5t
YXRjaGVkUnVsZXNbMF07Ci0gICAgICAgICAgICBsZXQgaW5saW5lU3R5bGVQcm9wZXJ0eSA9IGlu
bGluZVN0eWxlLmVuYWJsZWRQcm9wZXJ0aWVzWzBdOwotICAgICAgICAgICAgbGV0IHN0eWxlUnVs
ZVByb3BlcnR5ID0gc3R5bGVSdWxlLnN0eWxlLmVuYWJsZWRQcm9wZXJ0aWVzWzBdOwotCi0gICAg
ICAgICAgICBmdW5jdGlvbiBsb2coKSB7Ci0gICAgICAgICAgICAgICAgbG9nUHJvcGVydHkoaW5s
aW5lU3R5bGVQcm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAgbG9nUHJvcGVydHkoc3R5bGVSdWxl
UHJvcGVydHkpOwotICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCIiKTsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGdldE5vZGVTdHlsZXMoIiN4IiwgKG5vZGVTdHlsZXMpID0+
IHsKKyAgICAgICAgICAgICAgICBsZXQgaW5saW5lU3R5bGUgPSBub2RlU3R5bGVzLmlubGluZVN0
eWxlOworICAgICAgICAgICAgICAgIGxldCBzdHlsZVJ1bGUgPSBub2RlU3R5bGVzLm1hdGNoZWRS
dWxlc1swXTsKKyAgICAgICAgICAgICAgICBsZXQgaW5saW5lU3R5bGVQcm9wZXJ0eSA9IGlubGlu
ZVN0eWxlLmVuYWJsZWRQcm9wZXJ0aWVzWzBdOworICAgICAgICAgICAgICAgIGxldCBzdHlsZVJ1
bGVQcm9wZXJ0eSA9IHN0eWxlUnVsZS5zdHlsZS5lbmFibGVkUHJvcGVydGllc1swXTsKIAotICAg
ICAgICAgICAgbG9nKCk7CisgICAgICAgICAgICAgICAgZnVuY3Rpb24gbG9nKCkgeworICAgICAg
ICAgICAgICAgICAgICBsb2dQcm9wZXJ0eShpbmxpbmVTdHlsZVByb3BlcnR5KTsKKyAgICAgICAg
ICAgICAgICAgICAgbG9nUHJvcGVydHkoc3R5bGVSdWxlUHJvcGVydHkpOworICAgICAgICAgICAg
ICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiIik7CisgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBpbmxpbmVTdHlsZVByb3BlcnR5LnJlbW92ZSgpOworICAgICAgICAgICAgICAgIGxv
ZygpOwogCi0gICAgICAgICAgICBzdHlsZVJ1bGVQcm9wZXJ0eS5hZGRFdmVudExpc3RlbmVyKFdJ
LkNTU1Byb3BlcnR5LkV2ZW50Lk92ZXJyaWRkZW5TdGF0dXNDaGFuZ2VkLCAoZXZlbnQpID0+IHsK
LSAgICAgICAgICAgICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE5NTY1MT4g
T3ZlcnJpZGRlblN0YXR1c0NoYW5nZWQgbWF5IGZpcmUgbW9yZSB0aGFuIG9uY2UuCi0gICAgICAg
ICAgICAgICAgaWYgKHN0eWxlUnVsZVByb3BlcnR5Lm92ZXJyaWRkZW4pCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBpbmxpbmVTdHlsZVByb3BlcnR5LnJlbW92
ZSgpOwogCi0gICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIk92ZXJyaWRkZW5TdGF0
dXNDaGFuZ2VkIGV2ZW50IGZpcmVkLiIpOwotICAgICAgICAgICAgICAgIGxvZygpOwotICAgICAg
ICAgICAgICAgIHJlc29sdmUoKTsKKyAgICAgICAgICAgICAgICBzdHlsZVJ1bGVQcm9wZXJ0eS5h
ZGRFdmVudExpc3RlbmVyKFdJLkNTU1Byb3BlcnR5LkV2ZW50Lk92ZXJyaWRkZW5TdGF0dXNDaGFu
Z2VkLCAoZXZlbnQpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IDxodHRwczov
L3dlYmtpdC5vcmcvYi8xOTU2NTE+IE92ZXJyaWRkZW5TdGF0dXNDaGFuZ2VkIG1heSBmaXJlIG1v
cmUgdGhhbiBvbmNlLgorICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGVSdWxlUHJvcGVydHku
b3ZlcnJpZGRlbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAg
ICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiT3ZlcnJpZGRlblN0YXR1c0NoYW5nZWQgZXZl
bnQgZmlyZWQuIik7CisgICAgICAgICAgICAgICAgICAgIGxvZygpOworICAgICAgICAgICAgICAg
ICAgICByZXNvbHZlKCk7CisgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKICAg
ICAgICAgfQogICAgIH0pOwogCi0gICAgV0kuZG9tTWFuYWdlci5yZXF1ZXN0RG9jdW1lbnQoKGRv
Y3VtZW50Tm9kZSkgPT4gewotICAgICAgICBXSS5kb21NYW5hZ2VyLnF1ZXJ5U2VsZWN0b3IoZG9j
dW1lbnROb2RlLmlkLCAiZGl2I3giLCAoY29udGVudE5vZGVJZCkgPT4gewotICAgICAgICAgICAg
aWYgKCFjb250ZW50Tm9kZUlkKSB7Ci0gICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5mYWls
KCJET00gbm9kZSBub3QgZm91bmQuIik7Ci0gICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5j
b21wbGV0ZVRlc3QoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Cisg
ICAgc3VpdGUuYWRkVGVzdENhc2UoeworICAgICAgICBuYW1lOiAiT3ZlcnJpZGRlbkJ5U2hvcnRo
YW5kIiwKKyAgICAgICAgdGVzdChyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgICAgIGxvZ01h
dGNoaW5nUnVsZSgiLnNob3J0aGFuZCIsIHJlc29sdmUpOworICAgICAgICB9CisgICAgfSk7CiAK
LSAgICAgICAgICAgIGxldCBkb21Ob2RlID0gV0kuZG9tTWFuYWdlci5ub2RlRm9ySWQoY29udGVu
dE5vZGVJZCk7Ci0gICAgICAgICAgICBub2RlU3R5bGVzID0gV0kuY3NzTWFuYWdlci5zdHlsZXNG
b3JOb2RlKGRvbU5vZGUpOworICAgIHN1aXRlLmFkZFRlc3RDYXNlKHsKKyAgICAgICAgbmFtZTog
Ik92ZXJyaWRkZW5CeVNob3J0aGFuZEltcG9ydGFudCIsCisgICAgICAgIHRlc3QocmVzb2x2ZSwg
cmVqZWN0KSB7CisgICAgICAgICAgICBsb2dNYXRjaGluZ1J1bGUoIi5zaG9ydGhhbmQtaW1wb3J0
YW50IiwgcmVzb2x2ZSk7CisgICAgICAgIH0KKyAgICB9KTsKIAotICAgICAgICAgICAgaWYgKG5v
ZGVTdHlsZXMubmVlZHNSZWZyZXNoKSB7Ci0gICAgICAgICAgICAgICAgbm9kZVN0eWxlcy5zaW5n
bGVGaXJlRXZlbnRMaXN0ZW5lcihXSS5ET01Ob2RlU3R5bGVzLkV2ZW50LlJlZnJlc2hlZCwgKGV2
ZW50KSA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIHN1aXRlLnJ1blRlc3RDYXNlc0FuZEZpbmlz
aCgpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAgICAgc3VpdGUucnVuVGVzdENhc2VzQW5kRmluaXNoKCk7Ci0gICAgICAgIH0pOworICAgIHN1
aXRlLmFkZFRlc3RDYXNlKHsKKyAgICAgICAgbmFtZTogIk5vdE92ZXJyaWRkZW5CeUxvbmdoYW5k
SW1wb3J0YW50IiwKKyAgICAgICAgdGVzdChyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgICAg
IGxvZ01hdGNoaW5nUnVsZSgiLmxvbmdoYW5kLWltcG9ydGFudCIsIHJlc29sdmUpOworICAgICAg
ICB9CiAgICAgfSk7CisKKyAgICBzdWl0ZS5ydW5UZXN0Q2FzZXNBbmRGaW5pc2goKTsKIH0KIDwv
c2NyaXB0PgogPC9oZWFkPgogPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgotICAgIDxwPlRlc3Qg
dGhhdCBDU1NQcm9wZXJ0eS5wcm90b3R5cGUub3ZlcnJpZGRlbiBpcyBjbGVhcmVkIHdoZW4gdGhl
IG92ZXJyaWRpbmcgKGVmZmVjdGl2ZSkgcHJvcGVydHkgaXMgcmVtb3ZlZC48L3A+CiAgICAgPHN0
eWxlPgogICAgICN4IHsKICAgICAgICAgY29sb3I6IHJlZDsKICAgICB9CisKKyAgICAuc2hvcnRo
YW5kIHsKKyAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogcmVkOworICAgICAgICBib3JkZXItY29s
b3I6IGdyZWVuOworICAgIH0KKworICAgIC5zaG9ydGhhbmQtaW1wb3J0YW50IHsKKyAgICAgICAg
Ym9yZGVyLWNvbG9yOiBncmVlbiAhaW1wb3J0YW50OworICAgICAgICBib3JkZXItdG9wLWNvbG9y
OiByZWQ7CisgICAgfQorCisgICAgLmxvbmdoYW5kLWltcG9ydGFudCB7CisgICAgICAgIGJvcmRl
ci1jb2xvcjogZ3JlZW47CisgICAgICAgIGJvcmRlci10b3AtY29sb3I6IHJlZCAhaW1wb3J0YW50
OworICAgIH0KICAgICA8L3N0eWxlPgogICAgIDxkaXYgaWQ9IngiIHN0eWxlPSJjb2xvcjogZ3Jl
ZW4iPjwvZGl2PgorICAgIDxkaXYgY2xhc3M9InNob3J0aGFuZCI+PC9kaXY+CisgICAgPGRpdiBj
bGFzcz0ic2hvcnRoYW5kLWltcG9ydGFudCI+PC9kaXY+CisgICAgPGRpdiBjbGFzcz0ibG9uZ2hh
bmQtaW1wb3J0YW50Ij48L2Rpdj4KIDwvYm9keT4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdl
TG9nCmluZGV4IDgyMDViOTFiNjk0Li4xMGYyOGJjMTAxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTktMDYtMDYgIE5pa2l0YSBWYXNpbHlldiAgPG52YXNp
bHlldkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbG9uZ2hhbmQgQ1NTIHBy
b3BlcnRpZXMgb3ZlcnJpZGRlbiBieSBzaG9ydGhhbmRzIG1pc3Mgc3RyaWtldGhyb3VnaAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4NjI5CisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS81MTUwNDE2MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBMb25naGFuZCBDU1MgcHJvcGVydGllcyAoZS5nLiAiZm9u
dC1zaXplIikgb3ZlcnJpZGVuIGJ5IHNob3J0aGFuZHMgKGUuZy4gImZvbnQiKSBub3cgaGF2ZSBz
dHJpa2V0aHJvdWdocy4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL0NTU1Byb3Bl
cnR5LmpzOgorICAgICAgICAoV0kuQ1NTUHJvcGVydHkucHJvdG90eXBlLnNldCBvdmVycmlkaW5n
UHJvcGVydHkpOgorICAgICAgICAoV0kuQ1NTUHJvcGVydHkpOgorCisgICAgICAgICogVXNlcklu
dGVyZmFjZS9Nb2RlbHMvRE9NTm9kZVN0eWxlcy5qczoKKyAgICAgICAgKFdJLkRPTU5vZGVTdHls
ZXMucHJvdG90eXBlLl91cGRhdGVTdHlsZUNhc2NhZGUpOgorICAgICAgICBDYWxsIF9hc3NvY2lh
dGVSZWxhdGVkUHJvcGVydGllcyBiZWZvcmUgX21hcmtPdmVycmlkZGVuUHJvcGVydGllcyBiZWNh
dXNlCisgICAgICAgIF9hc3NvY2lhdGVSZWxhdGVkUHJvcGVydGllcyBzZXRzIHJlbGF0ZWRTaG9y
dGhhbmRQcm9wZXJ0eSBwcm9wZXJ0eSwgd2hpY2gKKyAgICAgICAgaXMgbm93IHVzZWQgYnkgX21h
cmtPdmVycmlkZGVuUHJvcGVydGllcy4KKworICAgICAgICAoV0kuRE9NTm9kZVN0eWxlcy5wcm90
b3R5cGUuX21hcmtPdmVycmlkZGVuUHJvcGVydGllcy5pc092ZXJyaWRkZW5CeSk6CisgICAgICAg
IChXSS5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5fbWFya092ZXJyaWRkZW5Qcm9wZXJ0aWVzKToK
KwogMjAxOS0wNS0yMyAgTWF0dCBCYWtlciAgPG1hdHRiYWtlckBhcHBsZS5jb20+CiAKICAgICAg
ICAgV2ViIEluc3BlY3RvcjogUmVtb3ZlIHVudXNlZCBDU1MgY2xhc3MgIm9mZnNldC1zZWN0aW9u
cyIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVs
cy9DU1NQcm9wZXJ0eS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01v
ZGVscy9DU1NQcm9wZXJ0eS5qcwppbmRleCAyYzEwODk1Y2M3OC4uNTlhMDJlY2ZhMjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1NQcm9w
ZXJ0eS5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMv
Q1NTUHJvcGVydHkuanMKQEAgLTI5OSw2ICsyOTksNyBAQCBXSS5DU1NQcm9wZXJ0eSA9IGNsYXNz
IENTU1Byb3BlcnR5IGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIGlmICghV0kuc2V0dGluZ3Mu
ZXhwZXJpbWVudGFsRW5hYmxlU3R5bGVzSnVtcFRvRWZmZWN0aXZlLnZhbHVlKQogICAgICAgICAg
ICAgcmV0dXJuOwogCisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMgIT09IGVmZmVjdGl2ZVBy
b3BlcnR5LCBgUHJvcGVydHkgIiR7dGhpcy5mb3JtYXR0ZWRUZXh0fSIgY2FuJ3Qgb3ZlcnJpZGUg
aXRzZWxmLmApOwogICAgICAgICB0aGlzLl9vdmVycmlkaW5nUHJvcGVydHkgPSBlZmZlY3RpdmVQ
cm9wZXJ0eSB8fCBudWxsOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0RPTU5vZGVTdHlsZXMuanMgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvRE9NTm9kZVN0eWxlcy5qcwppbmRleCBhNTdi
NTIwMWUzNS4uNmVmMTQ5MDM1NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL01vZGVscy9ET01Ob2RlU3R5bGVzLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9ET01Ob2RlU3R5bGVzLmpzCkBAIC03OTUsMTMg
Kzc5NSwxMyBAQCBXSS5ET01Ob2RlU3R5bGVzID0gY2xhc3MgRE9NTm9kZVN0eWxlcyBleHRlbmRz
IFdJLk9iamVjdAogCiAgICAgICAgIHRoaXMuX3Byb3BlcnR5TmFtZVRvRWZmZWN0aXZlUHJvcGVy
dHlNYXAgPSB7fTsKIAotICAgICAgICB0aGlzLl9tYXJrT3ZlcnJpZGRlblByb3BlcnRpZXMoY2Fz
Y2FkZU9yZGVyZWRTdHlsZURlY2xhcmF0aW9ucywgdGhpcy5fcHJvcGVydHlOYW1lVG9FZmZlY3Rp
dmVQcm9wZXJ0eU1hcCk7CiAgICAgICAgIHRoaXMuX2Fzc29jaWF0ZVJlbGF0ZWRQcm9wZXJ0aWVz
KGNhc2NhZGVPcmRlcmVkU3R5bGVEZWNsYXJhdGlvbnMsIHRoaXMuX3Byb3BlcnR5TmFtZVRvRWZm
ZWN0aXZlUHJvcGVydHlNYXApOworICAgICAgICB0aGlzLl9tYXJrT3ZlcnJpZGRlblByb3BlcnRp
ZXMoY2FzY2FkZU9yZGVyZWRTdHlsZURlY2xhcmF0aW9ucywgdGhpcy5fcHJvcGVydHlOYW1lVG9F
ZmZlY3RpdmVQcm9wZXJ0eU1hcCk7CiAKICAgICAgICAgZm9yIChsZXQgcHNldWRvRWxlbWVudElu
Zm8gb2YgdGhpcy5fcHNldWRvRWxlbWVudHMudmFsdWVzKCkpIHsKICAgICAgICAgICAgIHBzZXVk
b0VsZW1lbnRJbmZvLm9yZGVyZWRTdHlsZXMgPSB0aGlzLl9jb2xsZWN0U3R5bGVzSW5DYXNjYWRl
T3JkZXIocHNldWRvRWxlbWVudEluZm8ubWF0Y2hlZFJ1bGVzLCBudWxsLCBudWxsKTsKLSAgICAg
ICAgICAgIHRoaXMuX21hcmtPdmVycmlkZGVuUHJvcGVydGllcyhwc2V1ZG9FbGVtZW50SW5mby5v
cmRlcmVkU3R5bGVzKTsKICAgICAgICAgICAgIHRoaXMuX2Fzc29jaWF0ZVJlbGF0ZWRQcm9wZXJ0
aWVzKHBzZXVkb0VsZW1lbnRJbmZvLm9yZGVyZWRTdHlsZXMpOworICAgICAgICAgICAgdGhpcy5f
bWFya092ZXJyaWRkZW5Qcm9wZXJ0aWVzKHBzZXVkb0VsZW1lbnRJbmZvLm9yZGVyZWRTdHlsZXMp
OwogICAgICAgICB9CiAgICAgfQogCkBAIC04NDcsNiArODQ3LDI1IEBAIFdJLkRPTU5vZGVTdHls
ZXMgPSBjbGFzcyBET01Ob2RlU3R5bGVzIGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgewogICAgICAg
ICBwcm9wZXJ0eU5hbWVUb0VmZmVjdGl2ZVByb3BlcnR5ID0gcHJvcGVydHlOYW1lVG9FZmZlY3Rp
dmVQcm9wZXJ0eSB8fCB7fTsKIAorICAgICAgICBmdW5jdGlvbiBpc092ZXJyaWRkZW5CeShhLCBi
KSB7CisgICAgICAgICAgICBpZiAoIWIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgICAgICBpZiAoYS5pbXBvcnRhbnQgJiYgIWIuaW1wb3J0YW50KQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgaWYgKCFhLmltcG9ydGFudCAmJiBi
LmltcG9ydGFudCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAg
aWYgKGEub3duZXJTdHlsZSA9PT0gYi5vd25lclN0eWxlKQorICAgICAgICAgICAgICAgIHJldHVy
biBiLmluZGV4ID4gYS5pbmRleDsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IGxldCBzdHlsZUluZGV4QSA9IHN0eWxlcy5pbmRleE9mKGEub3duZXJTdHlsZSk7CisgICAgICAg
ICAgICAgICAgbGV0IHN0eWxlSW5kZXhCID0gc3R5bGVzLmluZGV4T2YoYi5vd25lclN0eWxlKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gc3R5bGVJbmRleEIgPiBzdHlsZUluZGV4QTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVz
Lmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICB2YXIgc3R5bGUgPSBzdHlsZXNbaV07CiAgICAg
ICAgICAgICB2YXIgcHJvcGVydGllcyA9IHN0eWxlLmVuYWJsZWRQcm9wZXJ0aWVzOwpAQCAtODg1
LDcgKzkwNCwxMSBAQCBXSS5ET01Ob2RlU3R5bGVzID0gY2xhc3MgRE9NTm9kZVN0eWxlcyBleHRl
bmRzIFdJLk9iamVjdAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgcHJvcGVydHkub3ZlcnJpZGRlbiA9IGZhbHNlOworICAgICAgICAg
ICAgICAgIGlmIChpc092ZXJyaWRkZW5CeShwcm9wZXJ0eSwgcHJvcGVydHkucmVsYXRlZFNob3J0
aGFuZFByb3BlcnR5KSkgeworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eS5vdmVycmlkZGVu
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkub3ZlcnJpZGluZ1Byb3BlcnR5
ID0gcHJvcGVydHkucmVsYXRlZFNob3J0aGFuZFByb3BlcnR5OworICAgICAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eS5vdmVycmlkZGVuID0gZmFsc2U7CiAK
ICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVUb0VmZmVjdGl2ZVByb3BlcnR5W2Nhbm9uaWNh
bE5hbWVdID0gcHJvcGVydHk7CiAgICAgICAgICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>371613</attachid>
            <date>2019-06-07 15:00:55 -0700</date>
            <delta_ts>2019-06-07 15:37:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>14882</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBkNmU4YzhhZjA1YS4uNjBiOWU3YjQ5ZGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAor
MjAxOS0wNi0wNyAgTmlraXRhIFZhc2lseWV2ICA8bnZhc2lseWV2QGFwcGxlLmNvbT4KKworICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBsb25naGFuZCBDU1MgcHJvcGVydGllcyBvdmVycmlkZGVuIGJ5
IHNob3J0aGFuZHMgbWlzcyBzdHJpa2V0aHJvdWdoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTg2MjkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzUx
NTA0MTYwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogaW5zcGVjdG9yL2Nzcy9vdmVycmlkZGVuLXByb3BlcnR5LWV4cGVjdGVkLnR4dDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvY3NzL292ZXJyaWRkZW4tcHJvcGVydHkuaHRtbDoKKwogMjAxOS0wNS0y
MyAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBbV0hMU0xdIFBy
b3BlcnR5IHJlc29sdmVyIG5lZWRzIHRvIHJlY3Vyc2UgdG8gaGFuZGxlIHRoZSBiYXNlIHdoZW4g
c2ltcGxpZnlpbmcgcnZhbHVlcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Nz
cy9vdmVycmlkZGVuLXByb3BlcnR5LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9jc3Mvb3ZlcnJpZGRlbi1wcm9wZXJ0eS1leHBlY3RlZC50eHQKaW5kZXggNmM3NjJjYmUyYjEu
LmNmNzYzODVjZTQzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY3NzL292ZXJy
aWRkZW4tcHJvcGVydHktZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9j
c3Mvb3ZlcnJpZGRlbi1wcm9wZXJ0eS1leHBlY3RlZC50eHQKQEAgLTEsNCArMSw0IEBACi1UZXN0
IHRoYXQgQ1NTUHJvcGVydHkucHJvdG90eXBlLm92ZXJyaWRkZW4gaXMgY2xlYXJlZCB3aGVuIHRo
ZSBvdmVycmlkaW5nIChlZmZlY3RpdmUpIHByb3BlcnR5IGlzIHJlbW92ZWQuCitUZXN0IHRoYXQg
Q1NTUHJvcGVydHkucHJvdG90eXBlLm92ZXJyaWRkZW4gaXMgc2V0IGNvcnJlY3RseS4KIAogCiA9
PSBSdW5uaW5nIHRlc3Qgc3VpdGU6IE92ZXJyaWRkZW5Qcm9wZXJ0eQpAQCAtMTEsMyArMTEsMTkg
QEAgUkVNT1ZFRAogY29sb3I6IHJlZDsKIAogCistLSBSdW5uaW5nIHRlc3QgY2FzZTogT3ZlcnJp
ZGRlbkJ5U2hvcnRoYW5kCitQQVNTOiBib3JkZXItdG9wLWNvbG9yIGlzIG92ZXJyaWRkZW4uCitQ
QVNTOiBib3JkZXItY29sb3IgaXMgTk9UIG92ZXJyaWRkZW4uCisKKy0tIFJ1bm5pbmcgdGVzdCBj
YXNlOiBPdmVycmlkZGVuQnlJbXBvcnRhbnRTaG9ydGhhbmQKK1BBU1M6IGJvcmRlci1jb2xvciBp
cyBOT1Qgb3ZlcnJpZGRlbi4KK1BBU1M6IGJvcmRlci10b3AtY29sb3IgaXMgb3ZlcnJpZGRlbi4K
KworLS0gUnVubmluZyB0ZXN0IGNhc2U6IE5vdE92ZXJyaWRkZW5CeUltcG9ydGFudExvbmdoYW5k
CitQQVNTOiBib3JkZXItdG9wLWNvbG9yIGlzIE5PVCBvdmVycmlkZGVuLgorUEFTUzogYm9yZGVy
LWNvbG9yIGlzIE5PVCBvdmVycmlkZGVuLgorCistLSBSdW5uaW5nIHRlc3QgY2FzZTogTm90T3Zl
cnJpZGRlbkJ5TG9uZ2hhbmQKK1BBU1M6IGJvcmRlci1jb2xvciBpcyBOT1Qgb3ZlcnJpZGRlbi4K
K1BBU1M6IGJvcmRlci10b3AtY29sb3IgaXMgTk9UIG92ZXJyaWRkZW4uCisKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2luc3BlY3Rvci9jc3Mvb3ZlcnJpZGRlbi1wcm9wZXJ0eS5odG1sIGIvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL2Nzcy9vdmVycmlkZGVuLXByb3BlcnR5Lmh0bWwKaW5kZXggZjE5
ZWExZGVjM2MuLjA5NjQ3OWYxZTIxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
Y3NzL292ZXJyaWRkZW4tcHJvcGVydHkuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
Y3NzL292ZXJyaWRkZW4tcHJvcGVydHkuaHRtbApAQCAtNCw4ICs0LDYgQEAKIDxzY3JpcHQgc3Jj
PSIuLi8uLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvaW5zcGVjdG9yLXRlc3QuanMi
Pjwvc2NyaXB0PgogPHNjcmlwdD4KIGZ1bmN0aW9uIHRlc3QoKSB7Ci0gICAgbGV0IG5vZGVTdHls
ZXMgPSBudWxsOwotCiAgICAgbGV0IHN1aXRlID0gSW5zcGVjdG9yVGVzdC5jcmVhdGVBc3luY1N1
aXRlKCJPdmVycmlkZGVuUHJvcGVydHkiKTsKIAogICAgIGZ1bmN0aW9uIGxvZ1Byb3BlcnR5KHBy
b3BlcnR5KSB7CkBAIC0xNSw2NSArMTMsMTYxIEBAIGZ1bmN0aW9uIHRlc3QoKSB7CiAgICAgICAg
IEluc3BlY3RvclRlc3QubG9nKHRleHQpOwogICAgIH0KIAorICAgIGZ1bmN0aW9uIGdldE5vZGVT
dHlsZXMoc2VsZWN0b3IsIGNhbGxiYWNrKSB7CisgICAgICAgIFdJLmRvbU1hbmFnZXIucmVxdWVz
dERvY3VtZW50KChkb2N1bWVudE5vZGUpID0+IHsKKyAgICAgICAgICAgIFdJLmRvbU1hbmFnZXIu
cXVlcnlTZWxlY3Rvcihkb2N1bWVudE5vZGUuaWQsIHNlbGVjdG9yLCAoY29udGVudE5vZGVJZCkg
PT4geworICAgICAgICAgICAgICAgIGlmICghY29udGVudE5vZGVJZCkgeworICAgICAgICAgICAg
ICAgICAgICBJbnNwZWN0b3JUZXN0LmZhaWwoIkRPTSBub2RlIG5vdCBmb3VuZC4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jb21wbGV0ZVRlc3QoKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGxl
dCBkb21Ob2RlID0gV0kuZG9tTWFuYWdlci5ub2RlRm9ySWQoY29udGVudE5vZGVJZCk7CisgICAg
ICAgICAgICAgICAgbGV0IG5vZGVTdHlsZXMgPSBXSS5jc3NNYW5hZ2VyLnN0eWxlc0Zvck5vZGUo
ZG9tTm9kZSk7CisKKyAgICAgICAgICAgICAgICBpZiAobm9kZVN0eWxlcy5uZWVkc1JlZnJlc2gp
IHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZVN0eWxlcy5zaW5nbGVGaXJlRXZlbnRMaXN0ZW5l
cihXSS5ET01Ob2RlU3R5bGVzLkV2ZW50LlJlZnJlc2hlZCwgKGV2ZW50KSA9PiB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjYWxsYmFjayhub2RlU3R5bGVzKTsKKyAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNhbGxi
YWNrKG5vZGVTdHlsZXMpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGdldFN0eWxlRGVjbGFyYXRpb24oc2VsZWN0b3IsIGNhbGxiYWNrLCByZXNv
bHZlKSB7CisgICAgICAgIGdldE5vZGVTdHlsZXMoc2VsZWN0b3IsIChub2RlU3R5bGVzKSA9PiB7
CisgICAgICAgICAgICBsZXQgbWF0Y2hlZFJ1bGUgPSBudWxsOworICAgICAgICAgICAgZm9yIChs
ZXQgcnVsZSBvZiBub2RlU3R5bGVzLm1hdGNoZWRSdWxlcykgeworICAgICAgICAgICAgICAgIGlm
IChydWxlLnNlbGVjdG9yVGV4dCA9PT0gc2VsZWN0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAg
bWF0Y2hlZFJ1bGUgPSBydWxlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghbWF0Y2hlZFJ1bGUp
IHsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmZhaWwoYENvdWxkbid0IGZpbmQgJHtz
ZWxlY3Rvcn1gKTsKKyAgICAgICAgICAgICAgICByZXNvbHZlKCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYWxsYmFjayhtYXRjaGVkUnVs
ZS5zdHlsZSkKKyAgICAgICAgfSk7CisgICAgfQorCiAgICAgc3VpdGUuYWRkVGVzdENhc2Uoewog
ICAgICAgICBuYW1lOiAiT3ZlcnJpZGRlblByb3BlcnR5LmVmZmVjdGl2ZVByb3BlcnR5UmVtb3Zl
ZCIsCisgICAgICAgIGRlc2NyaXB0aW9uOiAiVGVzdCB0aGF0IENTU1Byb3BlcnR5LnByb3RvdHlw
ZS5vdmVycmlkZGVuIGlzIGNsZWFyZWQgd2hlbiB0aGUgb3ZlcnJpZGluZyAoZWZmZWN0aXZlKSBw
cm9wZXJ0eSBpcyByZW1vdmVkLiIsCiAgICAgICAgIHRlc3QocmVzb2x2ZSwgcmVqZWN0KSB7Ci0g
ICAgICAgICAgICBsZXQgaW5saW5lU3R5bGUgPSBub2RlU3R5bGVzLmlubGluZVN0eWxlOwotICAg
ICAgICAgICAgbGV0IHN0eWxlUnVsZSA9IG5vZGVTdHlsZXMubWF0Y2hlZFJ1bGVzWzBdOwotICAg
ICAgICAgICAgbGV0IGlubGluZVN0eWxlUHJvcGVydHkgPSBpbmxpbmVTdHlsZS5lbmFibGVkUHJv
cGVydGllc1swXTsKLSAgICAgICAgICAgIGxldCBzdHlsZVJ1bGVQcm9wZXJ0eSA9IHN0eWxlUnVs
ZS5zdHlsZS5lbmFibGVkUHJvcGVydGllc1swXTsKLQotICAgICAgICAgICAgZnVuY3Rpb24gbG9n
KCkgewotICAgICAgICAgICAgICAgIGxvZ1Byb3BlcnR5KGlubGluZVN0eWxlUHJvcGVydHkpOwot
ICAgICAgICAgICAgICAgIGxvZ1Byb3BlcnR5KHN0eWxlUnVsZVByb3BlcnR5KTsKLSAgICAgICAg
ICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiIik7Ci0gICAgICAgICAgICB9CisgICAgICAgICAg
ICBnZXROb2RlU3R5bGVzKCIjeCIsIChub2RlU3R5bGVzKSA9PiB7CisgICAgICAgICAgICAgICAg
bGV0IGlubGluZVN0eWxlID0gbm9kZVN0eWxlcy5pbmxpbmVTdHlsZTsKKyAgICAgICAgICAgICAg
ICBsZXQgc3R5bGVSdWxlID0gbm9kZVN0eWxlcy5tYXRjaGVkUnVsZXNbMF07CisgICAgICAgICAg
ICAgICAgbGV0IGlubGluZVN0eWxlUHJvcGVydHkgPSBpbmxpbmVTdHlsZS5lbmFibGVkUHJvcGVy
dGllc1swXTsKKyAgICAgICAgICAgICAgICBsZXQgc3R5bGVSdWxlUHJvcGVydHkgPSBzdHlsZVJ1
bGUuc3R5bGUuZW5hYmxlZFByb3BlcnRpZXNbMF07CisKKyAgICAgICAgICAgICAgICBmdW5jdGlv
biBsb2coKSB7CisgICAgICAgICAgICAgICAgICAgIGxvZ1Byb3BlcnR5KGlubGluZVN0eWxlUHJv
cGVydHkpOworICAgICAgICAgICAgICAgICAgICBsb2dQcm9wZXJ0eShzdHlsZVJ1bGVQcm9wZXJ0
eSk7CisgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCIiKTsKKyAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIGxvZygpOworICAgICAgICAgICAgICAgIGxvZygpOwog
Ci0gICAgICAgICAgICBpbmxpbmVTdHlsZVByb3BlcnR5LnJlbW92ZSgpOworICAgICAgICAgICAg
ICAgIGlubGluZVN0eWxlUHJvcGVydHkucmVtb3ZlKCk7CiAKLSAgICAgICAgICAgIHN0eWxlUnVs
ZVByb3BlcnR5LmFkZEV2ZW50TGlzdGVuZXIoV0kuQ1NTUHJvcGVydHkuRXZlbnQuT3ZlcnJpZGRl
blN0YXR1c0NoYW5nZWQsIChldmVudCkgPT4gewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiA8
aHR0cHM6Ly93ZWJraXQub3JnL2IvMTk1NjUxPiBPdmVycmlkZGVuU3RhdHVzQ2hhbmdlZCBtYXkg
ZmlyZSBtb3JlIHRoYW4gb25jZS4KLSAgICAgICAgICAgICAgICBpZiAoc3R5bGVSdWxlUHJvcGVy
dHkub3ZlcnJpZGRlbikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgIHN0eWxlUnVsZVByb3BlcnR5LmFkZEV2ZW50TGlzdGVuZXIoV0kuQ1NTUHJvcGVydHkuRXZl
bnQuT3ZlcnJpZGRlblN0YXR1c0NoYW5nZWQsIChldmVudCkgPT4geworICAgICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE5NTY1MT4gT3ZlcnJpZGRlblN0
YXR1c0NoYW5nZWQgbWF5IGZpcmUgbW9yZSB0aGFuIG9uY2UuCisgICAgICAgICAgICAgICAgICAg
IGlmIChzdHlsZVJ1bGVQcm9wZXJ0eS5vdmVycmlkZGVuKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogCi0gICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIk92ZXJyaWRk
ZW5TdGF0dXNDaGFuZ2VkIGV2ZW50IGZpcmVkLiIpOwotICAgICAgICAgICAgICAgIGxvZygpOwot
ICAgICAgICAgICAgICAgIHJlc29sdmUoKTsKKyAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9y
VGVzdC5sb2coIk92ZXJyaWRkZW5TdGF0dXNDaGFuZ2VkIGV2ZW50IGZpcmVkLiIpOworICAgICAg
ICAgICAgICAgICAgICBsb2coKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpOworICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KICAgICB9KTsKIAot
ICAgIFdJLmRvbU1hbmFnZXIucmVxdWVzdERvY3VtZW50KChkb2N1bWVudE5vZGUpID0+IHsKLSAg
ICAgICAgV0kuZG9tTWFuYWdlci5xdWVyeVNlbGVjdG9yKGRvY3VtZW50Tm9kZS5pZCwgImRpdiN4
IiwgKGNvbnRlbnROb2RlSWQpID0+IHsKLSAgICAgICAgICAgIGlmICghY29udGVudE5vZGVJZCkg
ewotICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZmFpbCgiRE9NIG5vZGUgbm90IGZvdW5k
LiIpOwotICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuY29tcGxldGVUZXN0KCk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQorICAgIHN1aXRlLmFkZFRlc3RDYXNl
KHsKKyAgICAgICAgbmFtZTogIk92ZXJyaWRkZW5CeVNob3J0aGFuZCIsCisgICAgICAgIHRlc3Qo
cmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICAgICAgICBnZXRTdHlsZURlY2xhcmF0aW9uKCIuc2hv
cnRoYW5kIiwgKHN0eWxlKSA9PiB7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBl
Y3RUcnVlKHN0eWxlLnZpc2libGVQcm9wZXJ0aWVzWzBdLm92ZXJyaWRkZW4sICJib3JkZXItdG9w
LWNvbG9yIGlzIG92ZXJyaWRkZW4uIik7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5l
eHBlY3RGYWxzZShzdHlsZS52aXNpYmxlUHJvcGVydGllc1sxXS5vdmVycmlkZGVuLCAiYm9yZGVy
LWNvbG9yIGlzIE5PVCBvdmVycmlkZGVuLiIpOworICAgICAgICAgICAgICAgIHJlc29sdmUoKTsK
KyAgICAgICAgICAgIH0sIHJlc29sdmUpOworICAgICAgICB9CisgICAgfSk7CiAKLSAgICAgICAg
ICAgIGxldCBkb21Ob2RlID0gV0kuZG9tTWFuYWdlci5ub2RlRm9ySWQoY29udGVudE5vZGVJZCk7
Ci0gICAgICAgICAgICBub2RlU3R5bGVzID0gV0kuY3NzTWFuYWdlci5zdHlsZXNGb3JOb2RlKGRv
bU5vZGUpOworICAgIHN1aXRlLmFkZFRlc3RDYXNlKHsKKyAgICAgICAgbmFtZTogIk92ZXJyaWRk
ZW5CeUltcG9ydGFudFNob3J0aGFuZCIsCisgICAgICAgIHRlc3QocmVzb2x2ZSwgcmVqZWN0KSB7
CisgICAgICAgICAgICBnZXRTdHlsZURlY2xhcmF0aW9uKCIubG9uZ2hhbmQtb3ZlcnJpZGRlbi1i
eS1pbXBvcnRhbnQtc2hvcnRoYW5kIiwgKHN0eWxlKSA9PiB7CisgICAgICAgICAgICAgICAgSW5z
cGVjdG9yVGVzdC5leHBlY3RGYWxzZShzdHlsZS52aXNpYmxlUHJvcGVydGllc1swXS5vdmVycmlk
ZGVuLCAiYm9yZGVyLWNvbG9yIGlzIE5PVCBvdmVycmlkZGVuLiIpOworICAgICAgICAgICAgICAg
IEluc3BlY3RvclRlc3QuZXhwZWN0VHJ1ZShzdHlsZS52aXNpYmxlUHJvcGVydGllc1sxXS5vdmVy
cmlkZGVuLCAiYm9yZGVyLXRvcC1jb2xvciBpcyBvdmVycmlkZGVuLiIpOworICAgICAgICAgICAg
ICAgIHJlc29sdmUoKTsKKyAgICAgICAgICAgIH0sIHJlc29sdmUpOworICAgICAgICB9CisgICAg
fSk7CiAKLSAgICAgICAgICAgIGlmIChub2RlU3R5bGVzLm5lZWRzUmVmcmVzaCkgewotICAgICAg
ICAgICAgICAgIG5vZGVTdHlsZXMuc2luZ2xlRmlyZUV2ZW50TGlzdGVuZXIoV0kuRE9NTm9kZVN0
eWxlcy5FdmVudC5SZWZyZXNoZWQsIChldmVudCkgPT4gewotICAgICAgICAgICAgICAgICAgICBz
dWl0ZS5ydW5UZXN0Q2FzZXNBbmRGaW5pc2goKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHN1aXRlLnJ1blRlc3RDYXNlc0FuZEZpbmlz
aCgpOwotICAgICAgICB9KTsKKyAgICBzdWl0ZS5hZGRUZXN0Q2FzZSh7CisgICAgICAgIG5hbWU6
ICJOb3RPdmVycmlkZGVuQnlJbXBvcnRhbnRMb25naGFuZCIsCisgICAgICAgIHRlc3QocmVzb2x2
ZSwgcmVqZWN0KSB7CisgICAgICAgICAgICBnZXRTdHlsZURlY2xhcmF0aW9uKCIuc2hvcnRoYW5k
LW92ZXJyaWRkZW4tYnktaW1wb3J0YW50LWxvbmdoYW5kIiwgKHN0eWxlKSA9PiB7CisgICAgICAg
ICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RGYWxzZShzdHlsZS52aXNpYmxlUHJvcGVydGll
c1swXS5vdmVycmlkZGVuLCAiYm9yZGVyLXRvcC1jb2xvciBpcyBOT1Qgb3ZlcnJpZGRlbi4iKTsK
KyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdEZhbHNlKHN0eWxlLnZpc2libGVQ
cm9wZXJ0aWVzWzFdLm92ZXJyaWRkZW4sICJib3JkZXItY29sb3IgaXMgTk9UIG92ZXJyaWRkZW4u
Iik7CisgICAgICAgICAgICAgICAgcmVzb2x2ZSgpOworICAgICAgICAgICAgfSk7CisgICAgICAg
IH0KICAgICB9KTsKKworICAgIHN1aXRlLmFkZFRlc3RDYXNlKHsKKyAgICAgICAgbmFtZTogIk5v
dE92ZXJyaWRkZW5CeUxvbmdoYW5kIiwKKyAgICAgICAgdGVzdChyZXNvbHZlLCByZWplY3QpIHsK
KyAgICAgICAgICAgIGdldFN0eWxlRGVjbGFyYXRpb24oIi5zaG9ydGhhbmQtbm90LW92ZXJyaWRk
ZW4tbG9uZ2hhbmQiLCAoc3R5bGUpID0+IHsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0
LmV4cGVjdEZhbHNlKHN0eWxlLnZpc2libGVQcm9wZXJ0aWVzWzBdLm92ZXJyaWRkZW4sICJib3Jk
ZXItY29sb3IgaXMgTk9UIG92ZXJyaWRkZW4uIik7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9y
VGVzdC5leHBlY3RGYWxzZShzdHlsZS52aXNpYmxlUHJvcGVydGllc1sxXS5vdmVycmlkZGVuLCAi
Ym9yZGVyLXRvcC1jb2xvciBpcyBOT1Qgb3ZlcnJpZGRlbi4iKTsKKyAgICAgICAgICAgICAgICBy
ZXNvbHZlKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgc3Vp
dGUucnVuVGVzdENhc2VzQW5kRmluaXNoKCk7CiB9CiA8L3NjcmlwdD4KIDwvaGVhZD4KIDxib2R5
IG9ubG9hZD0icnVuVGVzdCgpIj4KLSAgICA8cD5UZXN0IHRoYXQgQ1NTUHJvcGVydHkucHJvdG90
eXBlLm92ZXJyaWRkZW4gaXMgY2xlYXJlZCB3aGVuIHRoZSBvdmVycmlkaW5nIChlZmZlY3RpdmUp
IHByb3BlcnR5IGlzIHJlbW92ZWQuPC9wPgorICAgIDxwPlRlc3QgdGhhdCBDU1NQcm9wZXJ0eS5w
cm90b3R5cGUub3ZlcnJpZGRlbiBpcyBzZXQgY29ycmVjdGx5LjwvcD4KICAgICA8c3R5bGU+CiAg
ICAgI3ggewogICAgICAgICBjb2xvcjogcmVkOwogICAgIH0KKworICAgIC5zaG9ydGhhbmQgewor
ICAgICAgICBib3JkZXItdG9wLWNvbG9yOiByZWQ7CisgICAgICAgIGJvcmRlci1jb2xvcjogZ3Jl
ZW47CisgICAgfQorCisgICAgLmxvbmdoYW5kLW92ZXJyaWRkZW4tYnktaW1wb3J0YW50LXNob3J0
aGFuZCB7CisgICAgICAgIGJvcmRlci1jb2xvcjogZ3JlZW4gIWltcG9ydGFudDsKKyAgICAgICAg
Ym9yZGVyLXRvcC1jb2xvcjogcmVkOworICAgIH0KKworICAgIC5zaG9ydGhhbmQtb3ZlcnJpZGRl
bi1ieS1pbXBvcnRhbnQtbG9uZ2hhbmQgeworICAgICAgICBib3JkZXItdG9wLWNvbG9yOiByZWQg
IWltcG9ydGFudDsKKyAgICAgICAgYm9yZGVyLWNvbG9yOiBncmVlbjsKKyAgICB9CisKKyAgICAu
c2hvcnRoYW5kLW5vdC1vdmVycmlkZGVuLWxvbmdoYW5kIHsKKyAgICAgICAgYm9yZGVyLWNvbG9y
OiBncmVlbjsKKyAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogcmVkOworICAgIH0KICAgICA8L3N0
eWxlPgogICAgIDxkaXYgaWQ9IngiIHN0eWxlPSJjb2xvcjogZ3JlZW4iPjwvZGl2PgorICAgIDxk
aXYgY2xhc3M9InNob3J0aGFuZCI+PC9kaXY+CisgICAgPGRpdiBjbGFzcz0ibG9uZ2hhbmQtb3Zl
cnJpZGRlbi1ieS1pbXBvcnRhbnQtc2hvcnRoYW5kIj48L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJz
aG9ydGhhbmQtb3ZlcnJpZGRlbi1ieS1pbXBvcnRhbnQtbG9uZ2hhbmQiPjwvZGl2PgorICAgIDxk
aXYgY2xhc3M9InNob3J0aGFuZC1vdmVycmlkZGVuLWJ5LWltcG9ydGFudC1sb25naGFuZCI+PC9k
aXY+CisgICAgPGRpdiBjbGFzcz0ic2hvcnRoYW5kLW5vdC1vdmVycmlkZGVuLWxvbmdoYW5kIj48
L2Rpdj4KIDwvYm9keT4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDgyMDVi
OTFiNjk0Li5kMTQ3MTJhMTcyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjQgQEAKKzIwMTktMDYtMDcgIE5pa2l0YSBWYXNpbHlldiAgPG52YXNpbHlldkBhcHBsZS5jb20+
CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbG9uZ2hhbmQgQ1NTIHByb3BlcnRpZXMgb3ZlcnJp
ZGRlbiBieSBzaG9ydGhhbmRzIG1pc3Mgc3RyaWtldGhyb3VnaAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4NjI5CisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS81MTUwNDE2MD4KKworICAgICAgICBMb25naGFuZCBDU1MgcHJvcGVydGllcyAoZS5nLiAi
Zm9udC1zaXplIikgb3ZlcnJpZGVuIGJ5IHNob3J0aGFuZHMgKGUuZy4gImZvbnQiKSBub3cgaGF2
ZSBzdHJpa2V0aHJvdWdocy4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL0NTU1By
b3BlcnR5LmpzOgorICAgICAgICAoV0kuQ1NTUHJvcGVydHkucHJvdG90eXBlLnNldCBvdmVycmlk
aW5nUHJvcGVydHkpOgorICAgICAgICAoV0kuQ1NTUHJvcGVydHkpOgorCisgICAgICAgICogVXNl
ckludGVyZmFjZS9Nb2RlbHMvRE9NTm9kZVN0eWxlcy5qczoKKyAgICAgICAgKFdJLkRPTU5vZGVT
dHlsZXMucHJvdG90eXBlLl91cGRhdGVTdHlsZUNhc2NhZGUpOgorICAgICAgICBDYWxsIF9hc3Nv
Y2lhdGVSZWxhdGVkUHJvcGVydGllcyBiZWZvcmUgX21hcmtPdmVycmlkZGVuUHJvcGVydGllcyBi
ZWNhdXNlCisgICAgICAgIF9hc3NvY2lhdGVSZWxhdGVkUHJvcGVydGllcyBzZXRzIHJlbGF0ZWRT
aG9ydGhhbmRQcm9wZXJ0eSBwcm9wZXJ0eSwgd2hpY2gKKyAgICAgICAgaXMgbm93IHVzZWQgYnkg
X21hcmtPdmVycmlkZGVuUHJvcGVydGllcy4KKworICAgICAgICAoV0kuRE9NTm9kZVN0eWxlcy5w
cm90b3R5cGUuX21hcmtPdmVycmlkZGVuUHJvcGVydGllcy5pc092ZXJyaWRkZW5CeSk6CisgICAg
ICAgIChXSS5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5fbWFya092ZXJyaWRkZW5Qcm9wZXJ0aWVz
KToKKwogMjAxOS0wNS0yMyAgTWF0dCBCYWtlciAgPG1hdHRiYWtlckBhcHBsZS5jb20+CiAKICAg
ICAgICAgV2ViIEluc3BlY3RvcjogUmVtb3ZlIHVudXNlZCBDU1MgY2xhc3MgIm9mZnNldC1zZWN0
aW9ucyIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01v
ZGVscy9DU1NQcm9wZXJ0eS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L01vZGVscy9DU1NQcm9wZXJ0eS5qcwppbmRleCAyYzEwODk1Y2M3OC4uMGMwNTVjOWJhNjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1NQ
cm9wZXJ0eS5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2Rl
bHMvQ1NTUHJvcGVydHkuanMKQEAgLTI5OSw2ICsyOTksNyBAQCBXSS5DU1NQcm9wZXJ0eSA9IGNs
YXNzIENTU1Byb3BlcnR5IGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIGlmICghV0kuc2V0dGlu
Z3MuZXhwZXJpbWVudGFsRW5hYmxlU3R5bGVzSnVtcFRvRWZmZWN0aXZlLnZhbHVlKQogICAgICAg
ICAgICAgcmV0dXJuOwogCisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMgIT09IGVmZmVjdGl2
ZVByb3BlcnR5LCBgUHJvcGVydHkgIiR7dGhpcy5mb3JtYXR0ZWRUZXh0fSIgY2FuJ3Qgb3ZlcnJp
ZGUgaXRzZWxmLmAsIHRoaXMpOwogICAgICAgICB0aGlzLl9vdmVycmlkaW5nUHJvcGVydHkgPSBl
ZmZlY3RpdmVQcm9wZXJ0eSB8fCBudWxsOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0RPTU5vZGVTdHlsZXMuanMgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvRE9NTm9kZVN0eWxlcy5qcwpp
bmRleCBhNTdiNTIwMWUzNS4uMTVlMzljOWUyOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9ET01Ob2RlU3R5bGVzLmpzCisrKyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9ET01Ob2RlU3R5bGVzLmpzCkBA
IC03OTUsMTMgKzc5NSwxMyBAQCBXSS5ET01Ob2RlU3R5bGVzID0gY2xhc3MgRE9NTm9kZVN0eWxl
cyBleHRlbmRzIFdJLk9iamVjdAogCiAgICAgICAgIHRoaXMuX3Byb3BlcnR5TmFtZVRvRWZmZWN0
aXZlUHJvcGVydHlNYXAgPSB7fTsKIAotICAgICAgICB0aGlzLl9tYXJrT3ZlcnJpZGRlblByb3Bl
cnRpZXMoY2FzY2FkZU9yZGVyZWRTdHlsZURlY2xhcmF0aW9ucywgdGhpcy5fcHJvcGVydHlOYW1l
VG9FZmZlY3RpdmVQcm9wZXJ0eU1hcCk7CiAgICAgICAgIHRoaXMuX2Fzc29jaWF0ZVJlbGF0ZWRQ
cm9wZXJ0aWVzKGNhc2NhZGVPcmRlcmVkU3R5bGVEZWNsYXJhdGlvbnMsIHRoaXMuX3Byb3BlcnR5
TmFtZVRvRWZmZWN0aXZlUHJvcGVydHlNYXApOworICAgICAgICB0aGlzLl9tYXJrT3ZlcnJpZGRl
blByb3BlcnRpZXMoY2FzY2FkZU9yZGVyZWRTdHlsZURlY2xhcmF0aW9ucywgdGhpcy5fcHJvcGVy
dHlOYW1lVG9FZmZlY3RpdmVQcm9wZXJ0eU1hcCk7CiAKICAgICAgICAgZm9yIChsZXQgcHNldWRv
RWxlbWVudEluZm8gb2YgdGhpcy5fcHNldWRvRWxlbWVudHMudmFsdWVzKCkpIHsKICAgICAgICAg
ICAgIHBzZXVkb0VsZW1lbnRJbmZvLm9yZGVyZWRTdHlsZXMgPSB0aGlzLl9jb2xsZWN0U3R5bGVz
SW5DYXNjYWRlT3JkZXIocHNldWRvRWxlbWVudEluZm8ubWF0Y2hlZFJ1bGVzLCBudWxsLCBudWxs
KTsKLSAgICAgICAgICAgIHRoaXMuX21hcmtPdmVycmlkZGVuUHJvcGVydGllcyhwc2V1ZG9FbGVt
ZW50SW5mby5vcmRlcmVkU3R5bGVzKTsKICAgICAgICAgICAgIHRoaXMuX2Fzc29jaWF0ZVJlbGF0
ZWRQcm9wZXJ0aWVzKHBzZXVkb0VsZW1lbnRJbmZvLm9yZGVyZWRTdHlsZXMpOworICAgICAgICAg
ICAgdGhpcy5fbWFya092ZXJyaWRkZW5Qcm9wZXJ0aWVzKHBzZXVkb0VsZW1lbnRJbmZvLm9yZGVy
ZWRTdHlsZXMpOwogICAgICAgICB9CiAgICAgfQogCkBAIC04NDcsNiArODQ3LDI1IEBAIFdJLkRP
TU5vZGVTdHlsZXMgPSBjbGFzcyBET01Ob2RlU3R5bGVzIGV4dGVuZHMgV0kuT2JqZWN0CiAgICAg
ewogICAgICAgICBwcm9wZXJ0eU5hbWVUb0VmZmVjdGl2ZVByb3BlcnR5ID0gcHJvcGVydHlOYW1l
VG9FZmZlY3RpdmVQcm9wZXJ0eSB8fCB7fTsKIAorICAgICAgICBmdW5jdGlvbiBpc092ZXJyaWRk
ZW5CeVJlbGF0ZWRTaG9ydGhhbmQocHJvcGVydHkpIHsKKyAgICAgICAgICAgIGxldCBzaG9ydGhh
bmQgPSBwcm9wZXJ0eS5yZWxhdGVkU2hvcnRoYW5kUHJvcGVydHk7CisgICAgICAgICAgICBpZiAo
IXNob3J0aGFuZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAg
IGlmIChwcm9wZXJ0eS5pbXBvcnRhbnQgJiYgIXNob3J0aGFuZC5pbXBvcnRhbnQpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAoIXByb3BlcnR5LmltcG9y
dGFudCAmJiBzaG9ydGhhbmQuaW1wb3J0YW50KQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgICAgICAgICBpZiAocHJvcGVydHkub3duZXJTdHlsZSA9PT0gc2hvcnRoYW5kLm93
bmVyU3R5bGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNob3J0aGFuZC5pbmRleCA+IHByb3Bl
cnR5LmluZGV4OworCisgICAgICAgICAgICBsZXQgcHJvcGVydHlTdHlsZUluZGV4ID0gc3R5bGVz
LmluZGV4T2YocHJvcGVydHkub3duZXJTdHlsZSk7CisgICAgICAgICAgICBsZXQgc2hvcnRoYW5k
U3R5bGVJbmRleCA9IHN0eWxlcy5pbmRleE9mKHNob3J0aGFuZC5vd25lclN0eWxlKTsKKyAgICAg
ICAgICAgIHJldHVybiBzaG9ydGhhbmRTdHlsZUluZGV4ID4gcHJvcGVydHlTdHlsZUluZGV4Owor
ICAgICAgICB9CisKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXMubGVuZ3RoOyAr
K2kpIHsKICAgICAgICAgICAgIHZhciBzdHlsZSA9IHN0eWxlc1tpXTsKICAgICAgICAgICAgIHZh
ciBwcm9wZXJ0aWVzID0gc3R5bGUuZW5hYmxlZFByb3BlcnRpZXM7CkBAIC04ODUsNyArOTA0LDEx
IEBAIFdJLkRPTU5vZGVTdHlsZXMgPSBjbGFzcyBET01Ob2RlU3R5bGVzIGV4dGVuZHMgV0kuT2Jq
ZWN0CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICBwcm9wZXJ0eS5vdmVycmlkZGVuID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYg
KGlzT3ZlcnJpZGRlbkJ5UmVsYXRlZFNob3J0aGFuZChwcm9wZXJ0eSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcHJvcGVydHkub3ZlcnJpZGRlbiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
IHByb3BlcnR5Lm92ZXJyaWRpbmdQcm9wZXJ0eSA9IHByb3BlcnR5LnJlbGF0ZWRTaG9ydGhhbmRQ
cm9wZXJ0eTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcHJv
cGVydHkub3ZlcnJpZGRlbiA9IGZhbHNlOwogCiAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1l
VG9FZmZlY3RpdmVQcm9wZXJ0eVtjYW5vbmljYWxOYW1lXSA9IHByb3BlcnR5OwogICAgICAgICAg
ICAgfQo=
</data>
<flag name="review"
          id="387458"
          type_id="1"
          status="+"
          setter="hi"
    />
    <flag name="commit-queue"
          id="387459"
          type_id="3"
          status="-"
          setter="hi"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>371618</attachid>
            <date>2019-06-07 15:37:04 -0700</date>
            <delta_ts>2019-06-07 16:18:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>16121</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBkNmU4YzhhZjA1YS4uNzBjZDY4MWY4MWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAor
MjAxOS0wNi0wNyAgTmlraXRhIFZhc2lseWV2ICA8bnZhc2lseWV2QGFwcGxlLmNvbT4KKworICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBsb25naGFuZCBDU1MgcHJvcGVydGllcyBvdmVycmlkZGVuIGJ5
IHNob3J0aGFuZHMgbWlzcyBzdHJpa2V0aHJvdWdoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTg2MjkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzUx
NTA0MTYwPgorCisgICAgICAgIFJldmlld2VkIGJ5IERldmluIFJvdXNzby4KKworICAgICAgICAq
IGluc3BlY3Rvci9jc3Mvb3ZlcnJpZGRlbi1wcm9wZXJ0eS1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogaW5zcGVjdG9yL2Nzcy9vdmVycmlkZGVuLXByb3BlcnR5Lmh0bWw6CisKIDIwMTktMDUtMjMg
IFNhYW0gYmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgW1dITFNMXSBQcm9w
ZXJ0eSByZXNvbHZlciBuZWVkcyB0byByZWN1cnNlIHRvIGhhbmRsZSB0aGUgYmFzZSB3aGVuIHNp
bXBsaWZ5aW5nIHJ2YWx1ZXMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9jc3Mv
b3ZlcnJpZGRlbi1wcm9wZXJ0eS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
Y3NzL292ZXJyaWRkZW4tcHJvcGVydHktZXhwZWN0ZWQudHh0CmluZGV4IDZjNzYyY2JlMmIxLi4x
ZDdmZjc5MDllMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Nzcy9vdmVycmlk
ZGVuLXByb3BlcnR5LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY3Nz
L292ZXJyaWRkZW4tcHJvcGVydHktZXhwZWN0ZWQudHh0CkBAIC0xLDQgKzEsNCBAQAotVGVzdCB0
aGF0IENTU1Byb3BlcnR5LnByb3RvdHlwZS5vdmVycmlkZGVuIGlzIGNsZWFyZWQgd2hlbiB0aGUg
b3ZlcnJpZGluZyAoZWZmZWN0aXZlKSBwcm9wZXJ0eSBpcyByZW1vdmVkLgorVGVzdCB0aGF0IENT
U1Byb3BlcnR5LnByb3RvdHlwZS5vdmVycmlkZGVuIGlzIHNldCBjb3JyZWN0bHkuCiAKIAogPT0g
UnVubmluZyB0ZXN0IHN1aXRlOiBPdmVycmlkZGVuUHJvcGVydHkKQEAgLTExLDMgKzExLDE5IEBA
IFJFTU9WRUQKIGNvbG9yOiByZWQ7CiAKIAorLS0gUnVubmluZyB0ZXN0IGNhc2U6IE92ZXJyaWRk
ZW5Qcm9wZXJ0eS5PdmVycmlkZGVuQnlTaG9ydGhhbmQKK1BBU1M6IGJvcmRlci10b3AtY29sb3Ig
aXMgb3ZlcnJpZGRlbi4KK1BBU1M6IGJvcmRlci1jb2xvciBpcyBOT1Qgb3ZlcnJpZGRlbi4KKwor
LS0gUnVubmluZyB0ZXN0IGNhc2U6IE92ZXJyaWRkZW5Qcm9wZXJ0eS5PdmVycmlkZGVuQnlJbXBv
cnRhbnRTaG9ydGhhbmQKK1BBU1M6IGJvcmRlci1jb2xvciBpcyBOT1Qgb3ZlcnJpZGRlbi4KK1BB
U1M6IGJvcmRlci10b3AtY29sb3IgaXMgb3ZlcnJpZGRlbi4KKworLS0gUnVubmluZyB0ZXN0IGNh
c2U6IE92ZXJyaWRkZW5Qcm9wZXJ0eS5Ob3RPdmVycmlkZGVuQnlJbXBvcnRhbnRMb25naGFuZAor
UEFTUzogYm9yZGVyLXRvcC1jb2xvciBpcyBOT1Qgb3ZlcnJpZGRlbi4KK1BBU1M6IGJvcmRlci1j
b2xvciBpcyBOT1Qgb3ZlcnJpZGRlbi4KKworLS0gUnVubmluZyB0ZXN0IGNhc2U6IE92ZXJyaWRk
ZW5Qcm9wZXJ0eS5Ob3RPdmVycmlkZGVuQnlMb25naGFuZAorUEFTUzogYm9yZGVyLWNvbG9yIGlz
IE5PVCBvdmVycmlkZGVuLgorUEFTUzogYm9yZGVyLXRvcC1jb2xvciBpcyBOT1Qgb3ZlcnJpZGRl
bi4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Nzcy9vdmVycmlkZGVuLXBy
b3BlcnR5Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY3NzL292ZXJyaWRkZW4tcHJvcGVy
dHkuaHRtbAppbmRleCBmMTllYTFkZWMzYy4uY2UzMTUwZDcxOTUgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2luc3BlY3Rvci9jc3Mvb3ZlcnJpZGRlbi1wcm9wZXJ0eS5odG1sCisrKyBiL0xheW91
dFRlc3RzL2luc3BlY3Rvci9jc3Mvb3ZlcnJpZGRlbi1wcm9wZXJ0eS5odG1sCkBAIC00LDggKzQs
NiBAQAogPHNjcmlwdCBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9p
bnNwZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0PgogZnVuY3Rpb24gdGVzdCgpIHsK
LSAgICBsZXQgbm9kZVN0eWxlcyA9IG51bGw7Ci0KICAgICBsZXQgc3VpdGUgPSBJbnNwZWN0b3JU
ZXN0LmNyZWF0ZUFzeW5jU3VpdGUoIk92ZXJyaWRkZW5Qcm9wZXJ0eSIpOwogCiAgICAgZnVuY3Rp
b24gbG9nUHJvcGVydHkocHJvcGVydHkpIHsKQEAgLTE1LDY1ICsxMywxODAgQEAgZnVuY3Rpb24g
dGVzdCgpIHsKICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2codGV4dCk7CiAgICAgfQogCisgICAg
ZnVuY3Rpb24gZ2V0Tm9kZVN0eWxlcyhzZWxlY3RvciwgY2FsbGJhY2spIHsKKyAgICAgICAgV0ku
ZG9tTWFuYWdlci5yZXF1ZXN0RG9jdW1lbnQoKGRvY3VtZW50Tm9kZSkgPT4geworICAgICAgICAg
ICAgV0kuZG9tTWFuYWdlci5xdWVyeVNlbGVjdG9yKGRvY3VtZW50Tm9kZS5pZCwgc2VsZWN0b3Is
IChjb250ZW50Tm9kZUlkKSA9PiB7CisgICAgICAgICAgICAgICAgaWYgKCFjb250ZW50Tm9kZUlk
KSB7CisgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZmFpbCgiRE9NIG5vZGUgbm90
IGZvdW5kLiIpOworICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNvbXBsZXRlVGVz
dCgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgbGV0IGRvbU5vZGUgPSBXSS5kb21NYW5hZ2VyLm5vZGVGb3JJZChjb250
ZW50Tm9kZUlkKTsKKyAgICAgICAgICAgICAgICBsZXQgbm9kZVN0eWxlcyA9IFdJLmNzc01hbmFn
ZXIuc3R5bGVzRm9yTm9kZShkb21Ob2RlKTsKKworICAgICAgICAgICAgICAgIGlmIChub2RlU3R5
bGVzLm5lZWRzUmVmcmVzaCkgeworICAgICAgICAgICAgICAgICAgICBub2RlU3R5bGVzLnNpbmds
ZUZpcmVFdmVudExpc3RlbmVyKFdJLkRPTU5vZGVTdHlsZXMuRXZlbnQuUmVmcmVzaGVkLCAoZXZl
bnQpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5vZGVTdHlsZXMpOwor
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgY2FsbGJhY2sobm9kZVN0eWxlcyk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZ2V0U3R5bGVEZWNsYXJhdGlvbihzZWxlY3Rv
ciwgY2FsbGJhY2ssIHJlc29sdmUpIHsKKyAgICAgICAgZ2V0Tm9kZVN0eWxlcyhzZWxlY3Rvciwg
KG5vZGVTdHlsZXMpID0+IHsKKyAgICAgICAgICAgIGxldCBtYXRjaGVkUnVsZSA9IG51bGw7Cisg
ICAgICAgICAgICBmb3IgKGxldCBydWxlIG9mIG5vZGVTdHlsZXMubWF0Y2hlZFJ1bGVzKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHJ1bGUuc2VsZWN0b3JUZXh0ID09PSBzZWxlY3RvcikgeworICAg
ICAgICAgICAgICAgICAgICBtYXRjaGVkUnVsZSA9IHJ1bGU7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKCFtYXRjaGVkUnVsZSkgeworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZmFpbChg
Q291bGRuJ3QgZmluZCAke3NlbGVjdG9yfWApOworICAgICAgICAgICAgICAgIHJlc29sdmUoKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNh
bGxiYWNrKG1hdGNoZWRSdWxlLnN0eWxlKQorICAgICAgICB9KTsKKyAgICB9CisKICAgICBzdWl0
ZS5hZGRUZXN0Q2FzZSh7CiAgICAgICAgIG5hbWU6ICJPdmVycmlkZGVuUHJvcGVydHkuZWZmZWN0
aXZlUHJvcGVydHlSZW1vdmVkIiwKKyAgICAgICAgZGVzY3JpcHRpb246ICJUZXN0IHRoYXQgQ1NT
UHJvcGVydHkucHJvdG90eXBlLm92ZXJyaWRkZW4gaXMgY2xlYXJlZCB3aGVuIHRoZSBvdmVycmlk
aW5nIChlZmZlY3RpdmUpIHByb3BlcnR5IGlzIHJlbW92ZWQuIiwKICAgICAgICAgdGVzdChyZXNv
bHZlLCByZWplY3QpIHsKLSAgICAgICAgICAgIGxldCBpbmxpbmVTdHlsZSA9IG5vZGVTdHlsZXMu
aW5saW5lU3R5bGU7Ci0gICAgICAgICAgICBsZXQgc3R5bGVSdWxlID0gbm9kZVN0eWxlcy5tYXRj
aGVkUnVsZXNbMF07Ci0gICAgICAgICAgICBsZXQgaW5saW5lU3R5bGVQcm9wZXJ0eSA9IGlubGlu
ZVN0eWxlLmVuYWJsZWRQcm9wZXJ0aWVzWzBdOwotICAgICAgICAgICAgbGV0IHN0eWxlUnVsZVBy
b3BlcnR5ID0gc3R5bGVSdWxlLnN0eWxlLmVuYWJsZWRQcm9wZXJ0aWVzWzBdOwotCi0gICAgICAg
ICAgICBmdW5jdGlvbiBsb2coKSB7Ci0gICAgICAgICAgICAgICAgbG9nUHJvcGVydHkoaW5saW5l
U3R5bGVQcm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAgbG9nUHJvcGVydHkoc3R5bGVSdWxlUHJv
cGVydHkpOwotICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCIiKTsKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGdldE5vZGVTdHlsZXMoIiN4IiwgKG5vZGVTdHlsZXMpID0+IHsK
KyAgICAgICAgICAgICAgICBsZXQgaW5saW5lU3R5bGUgPSBub2RlU3R5bGVzLmlubGluZVN0eWxl
OworICAgICAgICAgICAgICAgIGxldCBzdHlsZVJ1bGUgPSBub2RlU3R5bGVzLm1hdGNoZWRSdWxl
c1swXTsKKyAgICAgICAgICAgICAgICBsZXQgaW5saW5lU3R5bGVQcm9wZXJ0eSA9IGlubGluZVN0
eWxlLmVuYWJsZWRQcm9wZXJ0aWVzWzBdOworICAgICAgICAgICAgICAgIGxldCBzdHlsZVJ1bGVQ
cm9wZXJ0eSA9IHN0eWxlUnVsZS5zdHlsZS5lbmFibGVkUHJvcGVydGllc1swXTsKIAotICAgICAg
ICAgICAgbG9nKCk7CisgICAgICAgICAgICAgICAgZnVuY3Rpb24gbG9nKCkgeworICAgICAgICAg
ICAgICAgICAgICBsb2dQcm9wZXJ0eShpbmxpbmVTdHlsZVByb3BlcnR5KTsKKyAgICAgICAgICAg
ICAgICAgICAgbG9nUHJvcGVydHkoc3R5bGVSdWxlUHJvcGVydHkpOworICAgICAgICAgICAgICAg
ICAgICBJbnNwZWN0b3JUZXN0LmxvZygiIik7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBpbmxpbmVTdHlsZVByb3BlcnR5LnJlbW92ZSgpOworICAgICAgICAgICAgICAgIGxvZygp
OwogCi0gICAgICAgICAgICBzdHlsZVJ1bGVQcm9wZXJ0eS5hZGRFdmVudExpc3RlbmVyKFdJLkNT
U1Byb3BlcnR5LkV2ZW50Lk92ZXJyaWRkZW5TdGF0dXNDaGFuZ2VkLCAoZXZlbnQpID0+IHsKLSAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE5NTY1MT4gT3Zl
cnJpZGRlblN0YXR1c0NoYW5nZWQgbWF5IGZpcmUgbW9yZSB0aGFuIG9uY2UuCi0gICAgICAgICAg
ICAgICAgaWYgKHN0eWxlUnVsZVByb3BlcnR5Lm92ZXJyaWRkZW4pCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBpbmxpbmVTdHlsZVByb3BlcnR5LnJlbW92ZSgp
OwogCi0gICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIk92ZXJyaWRkZW5TdGF0dXND
aGFuZ2VkIGV2ZW50IGZpcmVkLiIpOwotICAgICAgICAgICAgICAgIGxvZygpOwotICAgICAgICAg
ICAgICAgIHJlc29sdmUoKTsKKyAgICAgICAgICAgICAgICBzdHlsZVJ1bGVQcm9wZXJ0eS5hZGRF
dmVudExpc3RlbmVyKFdJLkNTU1Byb3BlcnR5LkV2ZW50Lk92ZXJyaWRkZW5TdGF0dXNDaGFuZ2Vk
LCAoZXZlbnQpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IDxodHRwczovL3dl
YmtpdC5vcmcvYi8xOTU2NTE+IE92ZXJyaWRkZW5TdGF0dXNDaGFuZ2VkIG1heSBmaXJlIG1vcmUg
dGhhbiBvbmNlLgorICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGVSdWxlUHJvcGVydHkub3Zl
cnJpZGRlbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAg
ICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiT3ZlcnJpZGRlblN0YXR1c0NoYW5nZWQgZXZlbnQg
ZmlyZWQuIik7CisgICAgICAgICAgICAgICAgICAgIGxvZygpOworICAgICAgICAgICAgICAgICAg
ICByZXNvbHZlKCk7CisgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKICAgICAg
ICAgfQogICAgIH0pOwogCi0gICAgV0kuZG9tTWFuYWdlci5yZXF1ZXN0RG9jdW1lbnQoKGRvY3Vt
ZW50Tm9kZSkgPT4gewotICAgICAgICBXSS5kb21NYW5hZ2VyLnF1ZXJ5U2VsZWN0b3IoZG9jdW1l
bnROb2RlLmlkLCAiZGl2I3giLCAoY29udGVudE5vZGVJZCkgPT4gewotICAgICAgICAgICAgaWYg
KCFjb250ZW50Tm9kZUlkKSB7Ci0gICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5mYWlsKCJE
T00gbm9kZSBub3QgZm91bmQuIik7Ci0gICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jb21w
bGV0ZVRlc3QoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisgICAg
c3VpdGUuYWRkVGVzdENhc2UoeworICAgICAgICBuYW1lOiAiT3ZlcnJpZGRlblByb3BlcnR5Lk92
ZXJyaWRkZW5CeVNob3J0aGFuZCIsCisgICAgICAgIHRlc3QocmVzb2x2ZSwgcmVqZWN0KSB7Cisg
ICAgICAgICAgICBnZXRTdHlsZURlY2xhcmF0aW9uKCIubG9uZ2hhbmQtb3ZlcnJpZGRlbi1ieS1z
aG9ydGhhbmQiLCAoc3R5bGUpID0+IHsKKyAgICAgICAgICAgICAgICBjb25zdCBkb250Q3JlYXRl
SWZNaXNzaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBsZXQgYm9yZGVyVG9wQ29sb3JQcm9w
ZXJ0eSA9IHN0eWxlLnByb3BlcnR5Rm9yTmFtZSgiYm9yZGVyLXRvcC1jb2xvciIsIGRvbnRDcmVh
dGVJZk1pc3NpbmcpOworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0VHJ1ZShi
b3JkZXJUb3BDb2xvclByb3BlcnR5Lm92ZXJyaWRkZW4sICJib3JkZXItdG9wLWNvbG9yIGlzIG92
ZXJyaWRkZW4uIik7CiAKLSAgICAgICAgICAgIGxldCBkb21Ob2RlID0gV0kuZG9tTWFuYWdlci5u
b2RlRm9ySWQoY29udGVudE5vZGVJZCk7Ci0gICAgICAgICAgICBub2RlU3R5bGVzID0gV0kuY3Nz
TWFuYWdlci5zdHlsZXNGb3JOb2RlKGRvbU5vZGUpOworICAgICAgICAgICAgICAgIGxldCBib3Jk
ZXJDb2xvclByb3BlcnR5ID0gc3R5bGUucHJvcGVydHlGb3JOYW1lKCJib3JkZXItY29sb3IiLCBk
b250Q3JlYXRlSWZNaXNzaW5nKTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVj
dEZhbHNlKGJvcmRlckNvbG9yUHJvcGVydHkub3ZlcnJpZGRlbiwgImJvcmRlci1jb2xvciBpcyBO
T1Qgb3ZlcnJpZGRlbi4iKTsKIAotICAgICAgICAgICAgaWYgKG5vZGVTdHlsZXMubmVlZHNSZWZy
ZXNoKSB7Ci0gICAgICAgICAgICAgICAgbm9kZVN0eWxlcy5zaW5nbGVGaXJlRXZlbnRMaXN0ZW5l
cihXSS5ET01Ob2RlU3R5bGVzLkV2ZW50LlJlZnJlc2hlZCwgKGV2ZW50KSA9PiB7Ci0gICAgICAg
ICAgICAgICAgICAgIHN1aXRlLnJ1blRlc3RDYXNlc0FuZEZpbmlzaCgpOwotICAgICAgICAgICAg
ICAgIH0pOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgc3VpdGUucnVuVGVz
dENhc2VzQW5kRmluaXNoKCk7Ci0gICAgICAgIH0pOworICAgICAgICAgICAgICAgIHJlc29sdmUo
KTsKKyAgICAgICAgICAgIH0sIHJlamVjdCk7CisgICAgICAgIH0KICAgICB9KTsKKworICAgIHN1
aXRlLmFkZFRlc3RDYXNlKHsKKyAgICAgICAgbmFtZTogIk92ZXJyaWRkZW5Qcm9wZXJ0eS5PdmVy
cmlkZGVuQnlJbXBvcnRhbnRTaG9ydGhhbmQiLAorICAgICAgICB0ZXN0KHJlc29sdmUsIHJlamVj
dCkgeworICAgICAgICAgICAgZ2V0U3R5bGVEZWNsYXJhdGlvbigiLmxvbmdoYW5kLW92ZXJyaWRk
ZW4tYnktaW1wb3J0YW50LXNob3J0aGFuZCIsIChzdHlsZSkgPT4geworICAgICAgICAgICAgICAg
IGNvbnN0IGRvbnRDcmVhdGVJZk1pc3NpbmcgPSB0cnVlOworICAgICAgICAgICAgICAgIGxldCBi
b3JkZXJDb2xvclByb3BlcnR5ID0gc3R5bGUucHJvcGVydHlGb3JOYW1lKCJib3JkZXItY29sb3Ii
LCBkb250Q3JlYXRlSWZNaXNzaW5nKTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4
cGVjdEZhbHNlKGJvcmRlckNvbG9yUHJvcGVydHkub3ZlcnJpZGRlbiwgImJvcmRlci1jb2xvciBp
cyBOT1Qgb3ZlcnJpZGRlbi4iKTsKKworICAgICAgICAgICAgICAgIGxldCBib3JkZXJUb3BDb2xv
clByb3BlcnR5ID0gc3R5bGUucHJvcGVydHlGb3JOYW1lKCJib3JkZXItdG9wLWNvbG9yIiwgZG9u
dENyZWF0ZUlmTWlzc2luZyk7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RU
cnVlKGJvcmRlclRvcENvbG9yUHJvcGVydHkub3ZlcnJpZGRlbiwgImJvcmRlci10b3AtY29sb3Ig
aXMgb3ZlcnJpZGRlbi4iKTsKKworICAgICAgICAgICAgICAgIHJlc29sdmUoKTsKKyAgICAgICAg
ICAgIH0sIHJlamVjdCk7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHN1aXRlLmFkZFRlc3RD
YXNlKHsKKyAgICAgICAgbmFtZTogIk92ZXJyaWRkZW5Qcm9wZXJ0eS5Ob3RPdmVycmlkZGVuQnlJ
bXBvcnRhbnRMb25naGFuZCIsCisgICAgICAgIHRlc3QocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAg
ICAgICAgICBnZXRTdHlsZURlY2xhcmF0aW9uKCIuc2hvcnRoYW5kLW92ZXJyaWRkZW4tYnktaW1w
b3J0YW50LWxvbmdoYW5kIiwgKHN0eWxlKSA9PiB7CisgICAgICAgICAgICAgICAgY29uc3QgZG9u
dENyZWF0ZUlmTWlzc2luZyA9IHRydWU7CisgICAgICAgICAgICAgICAgbGV0IGJvcmRlclRvcENv
bG9yUHJvcGVydHkgPSBzdHlsZS5wcm9wZXJ0eUZvck5hbWUoImJvcmRlci10b3AtY29sb3IiLCBk
b250Q3JlYXRlSWZNaXNzaW5nKTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVj
dEZhbHNlKGJvcmRlclRvcENvbG9yUHJvcGVydHkub3ZlcnJpZGRlbiwgImJvcmRlci10b3AtY29s
b3IgaXMgTk9UIG92ZXJyaWRkZW4uIik7CisKKyAgICAgICAgICAgICAgICBsZXQgYm9yZGVyQ29s
b3JQcm9wZXJ0eSA9IHN0eWxlLnByb3BlcnR5Rm9yTmFtZSgiYm9yZGVyLWNvbG9yIiwgZG9udENy
ZWF0ZUlmTWlzc2luZyk7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RGYWxz
ZShib3JkZXJDb2xvclByb3BlcnR5Lm92ZXJyaWRkZW4sICJib3JkZXItY29sb3IgaXMgTk9UIG92
ZXJyaWRkZW4uIik7CisKKyAgICAgICAgICAgICAgICByZXNvbHZlKCk7CisgICAgICAgICAgICB9
LCByZWplY3QpOworICAgICAgICB9CisgICAgfSk7CisKKyAgICBzdWl0ZS5hZGRUZXN0Q2FzZSh7
CisgICAgICAgIG5hbWU6ICJPdmVycmlkZGVuUHJvcGVydHkuTm90T3ZlcnJpZGRlbkJ5TG9uZ2hh
bmQiLAorICAgICAgICB0ZXN0KHJlc29sdmUsIHJlamVjdCkgeworICAgICAgICAgICAgZ2V0U3R5
bGVEZWNsYXJhdGlvbigiLnNob3J0aGFuZC1ub3Qtb3ZlcnJpZGRlbi1ieS1sb25naGFuZCIsIChz
dHlsZSkgPT4geworICAgICAgICAgICAgICAgIGNvbnN0IGRvbnRDcmVhdGVJZk1pc3NpbmcgPSB0
cnVlOworICAgICAgICAgICAgICAgIGxldCBib3JkZXJDb2xvclByb3BlcnR5ID0gc3R5bGUucHJv
cGVydHlGb3JOYW1lKCJib3JkZXItY29sb3IiLCBkb250Q3JlYXRlSWZNaXNzaW5nKTsKKyAgICAg
ICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdEZhbHNlKGJvcmRlckNvbG9yUHJvcGVydHku
b3ZlcnJpZGRlbiwgImJvcmRlci1jb2xvciBpcyBOT1Qgb3ZlcnJpZGRlbi4iKTsKKworICAgICAg
ICAgICAgICAgIGxldCBib3JkZXJUb3BDb2xvclByb3BlcnR5ID0gc3R5bGUucHJvcGVydHlGb3JO
YW1lKCJib3JkZXItdG9wLWNvbG9yIiwgZG9udENyZWF0ZUlmTWlzc2luZyk7CisgICAgICAgICAg
ICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RGYWxzZShib3JkZXJUb3BDb2xvclByb3BlcnR5Lm92
ZXJyaWRkZW4sICJib3JkZXItdG9wLWNvbG9yIGlzIE5PVCBvdmVycmlkZGVuLiIpOworCisgICAg
ICAgICAgICAgICAgcmVzb2x2ZSgpOworICAgICAgICAgICAgfSwgcmVqZWN0KTsKKyAgICAgICAg
fQorICAgIH0pOworCisgICAgc3VpdGUucnVuVGVzdENhc2VzQW5kRmluaXNoKCk7CiB9CiA8L3Nj
cmlwdD4KIDwvaGVhZD4KIDxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KLSAgICA8cD5UZXN0IHRo
YXQgQ1NTUHJvcGVydHkucHJvdG90eXBlLm92ZXJyaWRkZW4gaXMgY2xlYXJlZCB3aGVuIHRoZSBv
dmVycmlkaW5nIChlZmZlY3RpdmUpIHByb3BlcnR5IGlzIHJlbW92ZWQuPC9wPgorICAgIDxwPlRl
c3QgdGhhdCBDU1NQcm9wZXJ0eS5wcm90b3R5cGUub3ZlcnJpZGRlbiBpcyBzZXQgY29ycmVjdGx5
LjwvcD4KICAgICA8c3R5bGU+CiAgICAgI3ggewogICAgICAgICBjb2xvcjogcmVkOwogICAgIH0K
KworICAgIC5sb25naGFuZC1vdmVycmlkZGVuLWJ5LXNob3J0aGFuZCB7CisgICAgICAgIGJvcmRl
ci10b3AtY29sb3I6IHJlZDsKKyAgICAgICAgYm9yZGVyLWNvbG9yOiBncmVlbjsKKyAgICB9CisK
KyAgICAubG9uZ2hhbmQtb3ZlcnJpZGRlbi1ieS1pbXBvcnRhbnQtc2hvcnRoYW5kIHsKKyAgICAg
ICAgYm9yZGVyLWNvbG9yOiBncmVlbiAhaW1wb3J0YW50OworICAgICAgICBib3JkZXItdG9wLWNv
bG9yOiByZWQ7CisgICAgfQorCisgICAgLnNob3J0aGFuZC1vdmVycmlkZGVuLWJ5LWltcG9ydGFu
dC1sb25naGFuZCB7CisgICAgICAgIGJvcmRlci10b3AtY29sb3I6IHJlZCAhaW1wb3J0YW50Owor
ICAgICAgICBib3JkZXItY29sb3I6IGdyZWVuOworICAgIH0KKworICAgIC5zaG9ydGhhbmQtbm90
LW92ZXJyaWRkZW4tYnktbG9uZ2hhbmQgeworICAgICAgICBib3JkZXItY29sb3I6IGdyZWVuOwor
ICAgICAgICBib3JkZXItdG9wLWNvbG9yOiByZWQ7CisgICAgfQogICAgIDwvc3R5bGU+CiAgICAg
PGRpdiBpZD0ieCIgc3R5bGU9ImNvbG9yOiBncmVlbiI+PC9kaXY+CisgICAgPGRpdiBjbGFzcz0i
bG9uZ2hhbmQtb3ZlcnJpZGRlbi1ieS1zaG9ydGhhbmQiPjwvZGl2PgorICAgIDxkaXYgY2xhc3M9
ImxvbmdoYW5kLW92ZXJyaWRkZW4tYnktaW1wb3J0YW50LXNob3J0aGFuZCI+PC9kaXY+CisgICAg
PGRpdiBjbGFzcz0ic2hvcnRoYW5kLW92ZXJyaWRkZW4tYnktaW1wb3J0YW50LWxvbmdoYW5kIj48
L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJzaG9ydGhhbmQtbm90LW92ZXJyaWRkZW4tYnktbG9uZ2hh
bmQiPjwvZGl2PgogPC9ib2R5PgogPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKaW5kZXgg
ODIwNWI5MWI2OTQuLmY0MmJiZWQ5YjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNiBAQAorMjAxOS0wNi0wNyAgTmlraXRhIFZhc2lseWV2ICA8bnZhc2lseWV2QGFwcGxl
LmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBsb25naGFuZCBDU1MgcHJvcGVydGllcyBv
dmVycmlkZGVuIGJ5IHNob3J0aGFuZHMgbWlzcyBzdHJpa2V0aHJvdWdoCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTg2MjkKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzUxNTA0MTYwPgorCisgICAgICAgIFJldmlld2VkIGJ5IERldmluIFJvdXNzby4K
KworICAgICAgICBMb25naGFuZCBDU1MgcHJvcGVydGllcyAoZS5nLiAiZm9udC1zaXplIikgb3Zl
cnJpZGVuIGJ5IHNob3J0aGFuZHMgKGUuZy4gImZvbnQiKSBub3cgaGF2ZSBzdHJpa2V0aHJvdWdo
cy4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL0NTU1Byb3BlcnR5LmpzOgorICAg
ICAgICAoV0kuQ1NTUHJvcGVydHkucHJvdG90eXBlLnNldCBvdmVycmlkaW5nUHJvcGVydHkpOgor
ICAgICAgICAoV0kuQ1NTUHJvcGVydHkpOgorCisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2Rl
bHMvRE9NTm9kZVN0eWxlcy5qczoKKyAgICAgICAgKFdJLkRPTU5vZGVTdHlsZXMucHJvdG90eXBl
Ll91cGRhdGVTdHlsZUNhc2NhZGUpOgorICAgICAgICBDYWxsIF9hc3NvY2lhdGVSZWxhdGVkUHJv
cGVydGllcyBiZWZvcmUgX21hcmtPdmVycmlkZGVuUHJvcGVydGllcyBiZWNhdXNlCisgICAgICAg
IF9hc3NvY2lhdGVSZWxhdGVkUHJvcGVydGllcyBzZXRzIHJlbGF0ZWRTaG9ydGhhbmRQcm9wZXJ0
eSBwcm9wZXJ0eSwgd2hpY2gKKyAgICAgICAgaXMgbm93IHVzZWQgYnkgX21hcmtPdmVycmlkZGVu
UHJvcGVydGllcy4KKworICAgICAgICAoV0kuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuX21hcmtP
dmVycmlkZGVuUHJvcGVydGllcy5pc092ZXJyaWRkZW5CeSk6CisgICAgICAgIChXSS5ET01Ob2Rl
U3R5bGVzLnByb3RvdHlwZS5fbWFya092ZXJyaWRkZW5Qcm9wZXJ0aWVzKToKKwogMjAxOS0wNS0y
MyAgTWF0dCBCYWtlciAgPG1hdHRiYWtlckBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3Bl
Y3RvcjogUmVtb3ZlIHVudXNlZCBDU1MgY2xhc3MgIm9mZnNldC1zZWN0aW9ucyIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1NQcm9wZXJ0
eS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1NQcm9w
ZXJ0eS5qcwppbmRleCAyYzEwODk1Y2M3OC4uMGMwNTVjOWJhNjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1NQcm9wZXJ0eS5qcworKysg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTUHJvcGVydHku
anMKQEAgLTI5OSw2ICsyOTksNyBAQCBXSS5DU1NQcm9wZXJ0eSA9IGNsYXNzIENTU1Byb3BlcnR5
IGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIGlmICghV0kuc2V0dGluZ3MuZXhwZXJpbWVudGFs
RW5hYmxlU3R5bGVzSnVtcFRvRWZmZWN0aXZlLnZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwog
CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMgIT09IGVmZmVjdGl2ZVByb3BlcnR5LCBgUHJv
cGVydHkgIiR7dGhpcy5mb3JtYXR0ZWRUZXh0fSIgY2FuJ3Qgb3ZlcnJpZGUgaXRzZWxmLmAsIHRo
aXMpOwogICAgICAgICB0aGlzLl9vdmVycmlkaW5nUHJvcGVydHkgPSBlZmZlY3RpdmVQcm9wZXJ0
eSB8fCBudWxsOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvTW9kZWxzL0RPTU5vZGVTdHlsZXMuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Nb2RlbHMvRE9NTm9kZVN0eWxlcy5qcwppbmRleCBhNTdiNTIwMWUz
NS4uMTVlMzljOWUyOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL01vZGVscy9ET01Ob2RlU3R5bGVzLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL01vZGVscy9ET01Ob2RlU3R5bGVzLmpzCkBAIC03OTUsMTMgKzc5NSwx
MyBAQCBXSS5ET01Ob2RlU3R5bGVzID0gY2xhc3MgRE9NTm9kZVN0eWxlcyBleHRlbmRzIFdJLk9i
amVjdAogCiAgICAgICAgIHRoaXMuX3Byb3BlcnR5TmFtZVRvRWZmZWN0aXZlUHJvcGVydHlNYXAg
PSB7fTsKIAotICAgICAgICB0aGlzLl9tYXJrT3ZlcnJpZGRlblByb3BlcnRpZXMoY2FzY2FkZU9y
ZGVyZWRTdHlsZURlY2xhcmF0aW9ucywgdGhpcy5fcHJvcGVydHlOYW1lVG9FZmZlY3RpdmVQcm9w
ZXJ0eU1hcCk7CiAgICAgICAgIHRoaXMuX2Fzc29jaWF0ZVJlbGF0ZWRQcm9wZXJ0aWVzKGNhc2Nh
ZGVPcmRlcmVkU3R5bGVEZWNsYXJhdGlvbnMsIHRoaXMuX3Byb3BlcnR5TmFtZVRvRWZmZWN0aXZl
UHJvcGVydHlNYXApOworICAgICAgICB0aGlzLl9tYXJrT3ZlcnJpZGRlblByb3BlcnRpZXMoY2Fz
Y2FkZU9yZGVyZWRTdHlsZURlY2xhcmF0aW9ucywgdGhpcy5fcHJvcGVydHlOYW1lVG9FZmZlY3Rp
dmVQcm9wZXJ0eU1hcCk7CiAKICAgICAgICAgZm9yIChsZXQgcHNldWRvRWxlbWVudEluZm8gb2Yg
dGhpcy5fcHNldWRvRWxlbWVudHMudmFsdWVzKCkpIHsKICAgICAgICAgICAgIHBzZXVkb0VsZW1l
bnRJbmZvLm9yZGVyZWRTdHlsZXMgPSB0aGlzLl9jb2xsZWN0U3R5bGVzSW5DYXNjYWRlT3JkZXIo
cHNldWRvRWxlbWVudEluZm8ubWF0Y2hlZFJ1bGVzLCBudWxsLCBudWxsKTsKLSAgICAgICAgICAg
IHRoaXMuX21hcmtPdmVycmlkZGVuUHJvcGVydGllcyhwc2V1ZG9FbGVtZW50SW5mby5vcmRlcmVk
U3R5bGVzKTsKICAgICAgICAgICAgIHRoaXMuX2Fzc29jaWF0ZVJlbGF0ZWRQcm9wZXJ0aWVzKHBz
ZXVkb0VsZW1lbnRJbmZvLm9yZGVyZWRTdHlsZXMpOworICAgICAgICAgICAgdGhpcy5fbWFya092
ZXJyaWRkZW5Qcm9wZXJ0aWVzKHBzZXVkb0VsZW1lbnRJbmZvLm9yZGVyZWRTdHlsZXMpOwogICAg
ICAgICB9CiAgICAgfQogCkBAIC04NDcsNiArODQ3LDI1IEBAIFdJLkRPTU5vZGVTdHlsZXMgPSBj
bGFzcyBET01Ob2RlU3R5bGVzIGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgewogICAgICAgICBwcm9w
ZXJ0eU5hbWVUb0VmZmVjdGl2ZVByb3BlcnR5ID0gcHJvcGVydHlOYW1lVG9FZmZlY3RpdmVQcm9w
ZXJ0eSB8fCB7fTsKIAorICAgICAgICBmdW5jdGlvbiBpc092ZXJyaWRkZW5CeVJlbGF0ZWRTaG9y
dGhhbmQocHJvcGVydHkpIHsKKyAgICAgICAgICAgIGxldCBzaG9ydGhhbmQgPSBwcm9wZXJ0eS5y
ZWxhdGVkU2hvcnRoYW5kUHJvcGVydHk7CisgICAgICAgICAgICBpZiAoIXNob3J0aGFuZCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5p
bXBvcnRhbnQgJiYgIXNob3J0aGFuZC5pbXBvcnRhbnQpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgICAgICBpZiAoIXByb3BlcnR5LmltcG9ydGFudCAmJiBzaG9ydGhh
bmQuaW1wb3J0YW50KQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAg
ICBpZiAocHJvcGVydHkub3duZXJTdHlsZSA9PT0gc2hvcnRoYW5kLm93bmVyU3R5bGUpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHNob3J0aGFuZC5pbmRleCA+IHByb3BlcnR5LmluZGV4OworCisg
ICAgICAgICAgICBsZXQgcHJvcGVydHlTdHlsZUluZGV4ID0gc3R5bGVzLmluZGV4T2YocHJvcGVy
dHkub3duZXJTdHlsZSk7CisgICAgICAgICAgICBsZXQgc2hvcnRoYW5kU3R5bGVJbmRleCA9IHN0
eWxlcy5pbmRleE9mKHNob3J0aGFuZC5vd25lclN0eWxlKTsKKyAgICAgICAgICAgIHJldHVybiBz
aG9ydGhhbmRTdHlsZUluZGV4ID4gcHJvcGVydHlTdHlsZUluZGV4OworICAgICAgICB9CisKICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICAg
ICAgIHZhciBzdHlsZSA9IHN0eWxlc1tpXTsKICAgICAgICAgICAgIHZhciBwcm9wZXJ0aWVzID0g
c3R5bGUuZW5hYmxlZFByb3BlcnRpZXM7CkBAIC04ODUsNyArOTA0LDExIEBAIFdJLkRPTU5vZGVT
dHlsZXMgPSBjbGFzcyBET01Ob2RlU3R5bGVzIGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBwcm9wZXJ0
eS5vdmVycmlkZGVuID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKGlzT3ZlcnJpZGRlbkJ5
UmVsYXRlZFNob3J0aGFuZChwcm9wZXJ0eSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHkub3ZlcnJpZGRlbiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5Lm92ZXJy
aWRpbmdQcm9wZXJ0eSA9IHByb3BlcnR5LnJlbGF0ZWRTaG9ydGhhbmRQcm9wZXJ0eTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkub3ZlcnJpZGRl
biA9IGZhbHNlOwogCiAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lVG9FZmZlY3RpdmVQcm9w
ZXJ0eVtjYW5vbmljYWxOYW1lXSA9IHByb3BlcnR5OwogICAgICAgICAgICAgfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>