<?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>178498</bug_id>
          
          <creation_ts>2017-10-18 18:40:06 -0700</creation_ts>
          <short_desc>Web Inspector: Styles Redesign: Typing semicolon at the end of value should move to the next property</short_desc>
          <delta_ts>2017-12-19 15:13:11 -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>Safari Technology Preview</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>macOS 10.13</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="Chris Chiera">chris</reporter>
          <assigned_to name="Devin Rousso">hi</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>joepeck</cc>
    
    <cc>nvasilyev</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1361999</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Chiera">chris</who>
    <bug_when>2017-10-18 18:40:06 -0700</bug_when>
    <thetext>In the past few versions enabling spreadsheet experiment didn&apos;t really work, but looks like in latest version its starting working to wanted to provide some feedback.

In Chrome if you enter a &quot;;&quot; it closes that line and moves to the next. With Webkit/Safari it does not. In fact it lets you add multiple &quot;;&quot; or add one and still has a faded out gray one. Should always only show one, and if you enter a &quot;;&quot; should close that rule and move to next line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362003</commentid>
    <comment_count>1</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2017-10-18 18:47:40 -0700</bug_when>
    <thetext>Thanks for the feedback.

I haven&apos;t yet implemented special handling of semicolons in values, but I&apos;m planning to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362004</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-10-18 18:48:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/35065995&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377607</commentid>
    <comment_count>3</comment_count>
      <attachid>328330</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2017-12-03 22:09:11 -0800</bug_when>
    <thetext>Created attachment 328330
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377790</commentid>
    <comment_count>4</comment_count>
      <attachid>328330</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-12-04 11:18:53 -0800</bug_when>
    <thetext>Comment on attachment 328330
Patch

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

&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetTextField.js:262
&gt; +            const quoteRegex = /[&quot;&apos;]/g;
&gt; +            let value = this.value;
&gt; +            let start = -1;
&gt; +            let end = value.length;
&gt; +            let match = null;
&gt; +            while (match = quoteRegex.exec(value)) {
&gt; +                if (start &lt; 0)
&gt; +                    start = match.index;
&gt; +                end = match.index + 1;
&gt; +            }
&gt; +
&gt; +            if (value.substring(start, end).hasMatchingEscapedQuotes()) {
&gt; +                commit();
&gt; +                return;
&gt; +            }

I see what this is trying to do but I don&apos;t think it is doing it correctly. Right now it is just scanning for quotes, and doesn&apos;t detect if those quotes are within quotes.

I think the algorithm you want is something like this:

    if (event.key === &quot;;&quot;) {
        // We only want to commit on semicolon if the semicolon was at the end of the value.
        let semicolonInsertionIndex = window.getSelection().getRangeAt(0).startOffset;
        if (semicolonInsertionIndex !== this.value.length)
            return;

        // Determine if the semicolon is inside of an unfinished string.
        // First gather all complete quoted strings. Then check at the
        // end for an unfinished string.
        let range;
        let startIndex = 0;
        while (range = findQuotedStringRange(value, startIndex))
            startIndex = range.endIndex + 1;
        range = findUnterminatedStringRange(value, startIndex);
        if (range) {
            // Assert that the unterminated string range does go to the end of the string (where the semicolon is).
            console.assert(range.endIndex === value.length - 1);
            return;
        }

        // We have now determined this is a semicolon, not inside of an unterminated string
        // and at the end of input. Lets go!
        commit();
        return;
    }

With findQuotedStringRange / findUnterminatedStringRange left as an exercise for the reader.

That make sense?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377798</commentid>
    <comment_count>5</comment_count>
      <attachid>328330</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2017-12-04 11:36:43 -0800</bug_when>
    <thetext>Comment on attachment 328330
Patch

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

&gt; Source/WebInspectorUI/ChangeLog:12
&gt; +        semicolon after `url(&quot;foo` or `url(bar` would not move to the next property.

`url(bar` doesn&apos;t have any quotes. I don&apos;t see in your code handling of parenthesis.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377823</commentid>
    <comment_count>6</comment_count>
      <attachid>328330</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2017-12-04 12:31:52 -0800</bug_when>
    <thetext>Comment on attachment 328330
Patch

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

&gt;&gt; Source/WebInspectorUI/ChangeLog:12
&gt;&gt; +        semicolon after `url(&quot;foo` or `url(bar` would not move to the next property.
&gt; 
&gt; `url(bar` doesn&apos;t have any quotes. I don&apos;t see in your code handling of parenthesis.

I don&apos;t think we have to worry about parenthesis.  I was only worried about quotes for situations like `content: &quot;;&quot;;`, as the first semicolon is a string, not a property &quot;terminator&quot; (not sure what the word is).

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetTextField.js:262
&gt;&gt; +            }
&gt; 
&gt; I see what this is trying to do but I don&apos;t think it is doing it correctly. Right now it is just scanning for quotes, and doesn&apos;t detect if those quotes are within quotes.
&gt; 
&gt; I think the algorithm you want is something like this:
&gt; 
&gt;     if (event.key === &quot;;&quot;) {
&gt;         // We only want to commit on semicolon if the semicolon was at the end of the value.
&gt;         let semicolonInsertionIndex = window.getSelection().getRangeAt(0).startOffset;
&gt;         if (semicolonInsertionIndex !== this.value.length)
&gt;             return;
&gt; 
&gt;         // Determine if the semicolon is inside of an unfinished string.
&gt;         // First gather all complete quoted strings. Then check at the
&gt;         // end for an unfinished string.
&gt;         let range;
&gt;         let startIndex = 0;
&gt;         while (range = findQuotedStringRange(value, startIndex))
&gt;             startIndex = range.endIndex + 1;
&gt;         range = findUnterminatedStringRange(value, startIndex);
&gt;         if (range) {
&gt;             // Assert that the unterminated string range does go to the end of the string (where the semicolon is).
&gt;             console.assert(range.endIndex === value.length - 1);
&gt;             return;
&gt;         }
&gt; 
&gt;         // We have now determined this is a semicolon, not inside of an unterminated string
&gt;         // and at the end of input. Lets go!
&gt;         commit();
&gt;         return;
&gt;     }
&gt; 
&gt; With findQuotedStringRange / findUnterminatedStringRange left as an exercise for the reader.
&gt; 
&gt; That make sense?

I don&apos;t think we need to detect quotes within quotes.  All I really care about is that there are no unbalanced quotes, as in that case the semicolon could be part of the value instead of the property &quot;terminator&quot;.

// OK
url(abc);
url(&quot;abc&quot;);
url(&apos;abc&apos;);
url(&quot;a&apos;b&apos;c&quot;);
url(&apos;a&quot;b&quot;c&apos;);
url(&quot;a\&quot;b\&quot;c&quot;);
url(&apos;a\&apos;b\&apos;c&apos;);

// Bad
url(&quot;ab
url(&apos;ab
url(&quot;a&quot;b&quot;
url(&apos;a&apos;b&apos;
url(&quot;a&quot;b&apos;
url(&apos;a&apos;b&quot;
url(&quot;a&quot;&apos;b&apos;
url(&apos;a&apos;&quot;b&quot;

The purpose of the while loop is to find the index (if any) of the first and last quote character (&quot; or &apos;) so that I can then check that substring to ensure that it is properly &quot;wrapped&quot;.  If it is, then there&apos;s no way that the semicolon could be part of a string, so we can assume that it&apos;s the property &quot;terminator&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377866</commentid>
    <comment_count>7</comment_count>
      <attachid>328330</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-12-04 13:35:05 -0800</bug_when>
    <thetext>Comment on attachment 328330
Patch

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

&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetTextField.js:262
&gt;&gt;&gt; +            }
&gt;&gt; 
&gt;&gt; I see what this is trying to do but I don&apos;t think it is doing it correctly. Right now it is just scanning for quotes, and doesn&apos;t detect if those quotes are within quotes.
&gt;&gt; 
&gt;&gt; I think the algorithm you want is something like this:
&gt;&gt; 
&gt;&gt;     if (event.key === &quot;;&quot;) {
&gt;&gt;         // We only want to commit on semicolon if the semicolon was at the end of the value.
&gt;&gt;         let semicolonInsertionIndex = window.getSelection().getRangeAt(0).startOffset;
&gt;&gt;         if (semicolonInsertionIndex !== this.value.length)
&gt;&gt;             return;
&gt;&gt; 
&gt;&gt;         // Determine if the semicolon is inside of an unfinished string.
&gt;&gt;         // First gather all complete quoted strings. Then check at the
&gt;&gt;         // end for an unfinished string.
&gt;&gt;         let range;
&gt;&gt;         let startIndex = 0;
&gt;&gt;         while (range = findQuotedStringRange(value, startIndex))
&gt;&gt;             startIndex = range.endIndex + 1;
&gt;&gt;         range = findUnterminatedStringRange(value, startIndex);
&gt;&gt;         if (range) {
&gt;&gt;             // Assert that the unterminated string range does go to the end of the string (where the semicolon is).
&gt;&gt;             console.assert(range.endIndex === value.length - 1);
&gt;&gt;             return;
&gt;&gt;         }
&gt;&gt; 
&gt;&gt;         // We have now determined this is a semicolon, not inside of an unterminated string
&gt;&gt;         // and at the end of input. Lets go!
&gt;&gt;         commit();
&gt;&gt;         return;
&gt;&gt;     }
&gt;&gt; 
&gt;&gt; With findQuotedStringRange / findUnterminatedStringRange left as an exercise for the reader.
&gt;&gt; 
&gt;&gt; That make sense?
&gt; 
&gt; I don&apos;t think we need to detect quotes within quotes.  All I really care about is that there are no unbalanced quotes, as in that case the semicolon could be part of the value instead of the property &quot;terminator&quot;.
&gt; 
&gt; // OK
&gt; url(abc);
&gt; url(&quot;abc&quot;);
&gt; url(&apos;abc&apos;);
&gt; url(&quot;a&apos;b&apos;c&quot;);
&gt; url(&apos;a&quot;b&quot;c&apos;);
&gt; url(&quot;a\&quot;b\&quot;c&quot;);
&gt; url(&apos;a\&apos;b\&apos;c&apos;);
&gt; 
&gt; // Bad
&gt; url(&quot;ab
&gt; url(&apos;ab
&gt; url(&quot;a&quot;b&quot;
&gt; url(&apos;a&apos;b&apos;
&gt; url(&quot;a&quot;b&apos;
&gt; url(&apos;a&apos;b&quot;
&gt; url(&quot;a&quot;&apos;b&apos;
&gt; url(&apos;a&apos;&quot;b&quot;
&gt; 
&gt; The purpose of the while loop is to find the index (if any) of the first and last quote character (&quot; or &apos;) so that I can then check that substring to ensure that it is properly &quot;wrapped&quot;.  If it is, then there&apos;s no way that the semicolon could be part of a string, so we can assume that it&apos;s the property &quot;terminator&quot;.

Hmm. Then this deserves a comment in the code at this point to inform the reader about what it is trying to do. Since I saw this, assumed it was trying to do something else, and came to different conclusions.

In the end I do think a simple sanity check makes sense. As NVI pointed out, top level parenthesis throw a wrench in really parsing (and I hadn&apos;t even considered them).

I&apos;m fine with a simple check as long as there is a comment describing what it is doing, because it isn&apos;t intended to be a 100% perfect solution and should say so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1378460</commentid>
    <comment_count>8</comment_count>
      <attachid>328330</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2017-12-05 16:56:41 -0800</bug_when>
    <thetext>Comment on attachment 328330
Patch

r- because this patch doesn&apos;t work for values without any quotes, e.g.:

    color: red;

I think typing ; only in property value should have a special case.
Typing ; in property name shouldn&apos;t navigate to property value.

I implemented the special case for &quot;:&quot; (https://trac.webkit.org/changeset/224906/webkit)
in SpreadsheetStyleProperty and not SpreadsheetTextField because I didn&apos;t want to add any
CSS property logic to SpreadsheetTextField, so I could (hopefully) merge SpreadsheetTextField
with SpreadsheetSelectorField later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380875</commentid>
    <comment_count>9</comment_count>
      <attachid>329164</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2017-12-12 15:11:13 -0800</bug_when>
    <thetext>Created attachment 329164
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381846</commentid>
    <comment_count>10</comment_count>
      <attachid>329164</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2017-12-14 14:56:00 -0800</bug_when>
    <thetext>Comment on attachment 329164
Patch

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

&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:513
&gt; +        let text = this._valueElement.textContent;
&gt; +        if (window.getSelection().getRangeAt(0).startOffset !== text.length)
&gt; +            return;

Typing ; should move to the next property even if it&apos;s before the suggestion hint.

Consider:

  float: r[ight]

[irht] is a suggestion hint here. Typing ; should move the focus to the next property.

SpreadsheetTextField.prototype._getPrefix returns text without the suggestion hint. You can make it public and possibly rename to something more meaningful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381972</commentid>
    <comment_count>11</comment_count>
      <attachid>329433</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2017-12-14 18:21:34 -0800</bug_when>
    <thetext>Created attachment 329433
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382418</commentid>
    <comment_count>12</comment_count>
      <attachid>329433</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2017-12-15 18:14:38 -0800</bug_when>
    <thetext>Comment on attachment 329433
Patch

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

&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:511
&gt; +        if (window.getSelection().getRangeAt(0).startOffset !== text.length)

1. When the whole value is selected, I&apos;d expect typing &quot;;&quot; to move to the next field. This can be done by replacing startOffset with endOffset.

2. Usually, you want to check getSelection().rangeCount before calling getRangeAt. When nothing is selected, getRangeAt throws an exception:

    (DOM Exception 1): The index is not in the allowed range.

I don&apos;t know if it ever happens here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382887</commentid>
    <comment_count>13</comment_count>
      <attachid>329677</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2017-12-18 13:55:33 -0800</bug_when>
    <thetext>Created attachment 329677
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383255</commentid>
    <comment_count>14</comment_count>
      <attachid>329677</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-12-19 13:24:33 -0800</bug_when>
    <thetext>Comment on attachment 329677
Patch

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

r=me

&gt; Source/WebInspectorUI/ChangeLog:13
&gt; +        semicolon after `url(&quot;foo` or `url(bar` would not move to the next property.

I don&apos;t see how it would make `url(bar;` not move to the next property.

&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:528
&gt; +        if (!quoteRegex.test(text) || text.substring(start, end).hasMatchingEscapedQuotes()) {

No need to run the regex again, just check if we found a match:

    if (start === -1 || ...)

Better yet make this an early return:

    if (start !== -1 &amp;&amp; !text.substring(start, end).hasMatchingEscapedQuotes())
        return;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383334</commentid>
    <comment_count>15</comment_count>
      <attachid>329677</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2017-12-19 14:40:35 -0800</bug_when>
    <thetext>Comment on attachment 329677
Patch

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

&gt;&gt; Source/WebInspectorUI/ChangeLog:13
&gt;&gt; +        semicolon after `url(&quot;foo` or `url(bar` would not move to the next property.
&gt; 
&gt; I don&apos;t see how it would make `url(bar;` not move to the next property.

Oops.  This was supposed to be `url(&apos;bar;`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383335</commentid>
    <comment_count>16</comment_count>
      <attachid>329831</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2017-12-19 14:40:53 -0800</bug_when>
    <thetext>Created attachment 329831
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383353</commentid>
    <comment_count>17</comment_count>
      <attachid>329831</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-12-19 15:13:09 -0800</bug_when>
    <thetext>Comment on attachment 329831
Patch

Clearing flags on attachment: 329831

Committed r226149: &lt;https://trac.webkit.org/changeset/226149&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383354</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-12-19 15:13:11 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328330</attachid>
            <date>2017-12-03 22:09:11 -0800</date>
            <delta_ts>2017-12-12 15:11:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-178498-20171203220910.patch</filename>
            <type>text/plain</type>
            <size>2761</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDdjMWZkOGVmZDY3OTgxNmFiODU0NGE5MTNlNTYw
YTViYTVlMTY0ZmYuLjA4YmVhMzVhZWU4MjE2NTRlZDYwODYxYzhhMjk4ZTQ4YWVhNTE4ZjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE3LTEyLTAzICBEZXZp
biBSb3Vzc28gIDx3ZWJraXRAZGV2aW5yb3Vzc28uY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFN0eWxlcyBSZWRlc2lnbjogVHlwaW5nIHNlbWljb2xvbiBhdCB0aGUgZW5kIG9mIHZhbHVl
IHNob3VsZCBtb3ZlIHRvIHRoZSBuZXh0IHByb3BlcnR5CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzg0OTgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzM1MDY1OTk1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogVXNlckludGVyZmFjZS9WaWV3cy9TcHJlYWRzaGVldFRleHRGaWVsZC5qczoKKyAgICAg
ICAgKFdJLlNwcmVhZHNoZWV0VGV4dEZpZWxkLnByb3RvdHlwZS5faGFuZGxlS2V5RG93bik6Cisg
ICAgICAgIE9ubHkgbW92ZSB0byB0aGUgbmV4dCBwcm9wZXJ0eSBpZiB0aGVyZSBhcmUgbm8gdW5i
YWxhbmNlZCBxdW90ZXMuIEZvciBleGFtcGxlLCBhZGRpbmcgYQorICAgICAgICBzZW1pY29sb24g
YWZ0ZXIgYHVybCgiZm9vYCBvciBgdXJsKGJhcmAgd291bGQgbm90IG1vdmUgdG8gdGhlIG5leHQg
cHJvcGVydHkuCisKIDIwMTctMTEtMjkgIE5pa2l0YSBWYXNpbHlldiAgPG52YXNpbHlldkBhcHBs
ZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogU3R5bGVzIFJlZGVzaWduOiBjYW4ndCBh
ZGQgbmV3IHByb3BlcnR5IGFmdGVyIHByb3BlcnR5IHdpdGhvdXQgdHJhaWxpbmcgc2VtaWNvbG9u
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9T
cHJlYWRzaGVldFRleHRGaWVsZC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1ZpZXdzL1NwcmVhZHNoZWV0VGV4dEZpZWxkLmpzCmluZGV4IGZhMjIwYmQwYWRhMGVjOTFm
MTEzMmY5ZDVlOGUxYjhjZjMzZjYwNjcuLmVmYWIzYTg4ODAwYzBkZTZhMGUzOWVmYzI3NjcyYjBj
MjQxNjk1MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1ZpZXdzL1NwcmVhZHNoZWV0VGV4dEZpZWxkLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NwcmVhZHNoZWV0VGV4dEZpZWxkLmpzCkBAIC0yMjcsNyAr
MjI3LDcgQEAgV0kuU3ByZWFkc2hlZXRUZXh0RmllbGQgPSBjbGFzcyBTcHJlYWRzaGVldFRleHRG
aWVsZAogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChl
dmVudC5rZXkgPT09ICJFbnRlciIgfHwgZXZlbnQua2V5ID09PSAiVGFiIikgeworICAgICAgICBs
ZXQgY29tbWl0ID0gKCkgPT4gewogICAgICAgICAgICAgZXZlbnQuc3RvcCgpOwogICAgICAgICAg
ICAgdGhpcy5fYXBwbHlDb21wbGV0aW9uSGludCgpOwogCkBAIC0yMzcsOSArMjM3LDMxIEBAIFdJ
LlNwcmVhZHNoZWV0VGV4dEZpZWxkID0gY2xhc3MgU3ByZWFkc2hlZXRUZXh0RmllbGQKICAgICAg
ICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5zcHJlYWRzaGVldFRleHRGaWVsZERpZENvbW1pdCh0
aGlzLCB7ZGlyZWN0aW9ufSk7CiAKICAgICAgICAgICAgIHRoaXMuc3RvcEVkaXRpbmcoKTsKKyAg
ICAgICAgfTsKKworICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAiRW50ZXIiIHx8IGV2ZW50Lmtl
eSA9PT0gIlRhYiIpIHsKKyAgICAgICAgICAgIGNvbW1pdCgpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gIjsiICYmIHdpbmRvdy5n
ZXRTZWxlY3Rpb24oKS5nZXRSYW5nZUF0KDApLnN0YXJ0T2Zmc2V0ID09PSB0aGlzLnZhbHVlLmxl
bmd0aCkgeworICAgICAgICAgICAgY29uc3QgcXVvdGVSZWdleCA9IC9bIiddL2c7CisgICAgICAg
ICAgICBsZXQgdmFsdWUgPSB0aGlzLnZhbHVlOworICAgICAgICAgICAgbGV0IHN0YXJ0ID0gLTE7
CisgICAgICAgICAgICBsZXQgZW5kID0gdmFsdWUubGVuZ3RoOworICAgICAgICAgICAgbGV0IG1h
dGNoID0gbnVsbDsKKyAgICAgICAgICAgIHdoaWxlIChtYXRjaCA9IHF1b3RlUmVnZXguZXhlYyh2
YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPCAwKQorICAgICAgICAgICAgICAg
ICAgICBzdGFydCA9IG1hdGNoLmluZGV4OworICAgICAgICAgICAgICAgIGVuZCA9IG1hdGNoLmlu
ZGV4ICsgMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHZhbHVlLnN1YnN0cmlu
ZyhzdGFydCwgZW5kKS5oYXNNYXRjaGluZ0VzY2FwZWRRdW90ZXMoKSkgeworICAgICAgICAgICAg
ICAgIGNvbW1pdCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCiAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICJBcnJvd1VwIiB8fCBldmVudC5r
ZXkgPT09ICJBcnJvd0Rvd24iKSB7CiAgICAgICAgICAgICBsZXQgZGVsdGEgPSAxOwogICAgICAg
ICAgICAgaWYgKGV2ZW50Lm1ldGFLZXkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329164</attachid>
            <date>2017-12-12 15:11:13 -0800</date>
            <delta_ts>2017-12-14 18:21:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-178498-20171212161112.patch</filename>
            <type>text/plain</type>
            <size>3491</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDUzOTM2NzRlNjBhMjQxODYyMzk0ZWFkMjdhYTBk
ZGFmZDY5YjVjZmUuLjY1NjgzZDM4N2EzNmM2MmM5Njg0YTA4NDdlNWYyODRkN2FlNmU4NzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE3LTEyLTEyICBEZXZp
biBSb3Vzc28gIDx3ZWJraXRAZGV2aW5yb3Vzc28uY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFN0eWxlcyBSZWRlc2lnbjogVHlwaW5nIHNlbWljb2xvbiBhdCB0aGUgZW5kIG9mIHZhbHVl
IHNob3VsZCBtb3ZlIHRvIHRoZSBuZXh0IHByb3BlcnR5CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzg0OTgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzM1MDY1OTk1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogVXNlckludGVyZmFjZS9WaWV3cy9TcHJlYWRzaGVldFN0eXBlUHJvcGVydHkuanM6Cisg
ICAgICAgIChXSS5TcHJlYWRzaGVldFN0eXBlUHJvcGVydHkucHJvdG90eXBlLl91cGRhdGUpOgor
ICAgICAgICAoV0kuU3ByZWFkc2hlZXRTdHlwZVByb3BlcnR5LnByb3RvdHlwZS5faGFuZGxlVmFs
dWVCZWZvcmVJbnB1dCk6CisgICAgICAgIE9ubHkgbW92ZSB0byB0aGUgbmV4dCBwcm9wZXJ0eSBp
ZiB0aGVyZSBhcmUgbm8gdW5iYWxhbmNlZCBxdW90ZXMuIEZvciBleGFtcGxlLCBhZGRpbmcgYQor
ICAgICAgICBzZW1pY29sb24gYWZ0ZXIgYHVybCgiZm9vYCBvciBgdXJsKGJhcmAgd291bGQgbm90
IG1vdmUgdG8gdGhlIG5leHQgcHJvcGVydHkuCisKIDIwMTctMTItMTIgIE1pY2hhZWwgQ2F0YW56
YXJvICA8bWNhdGFuemFyb0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGRvbid0
IHByaW50IGVtcHR5IGVycm9yIG1lc3NhZ2Ugd2hlbiBjb3B5aW5nIHJlc291cmNlIGZhaWxzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TcHJl
YWRzaGVldFN0eWxlUHJvcGVydHkuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9WaWV3cy9TcHJlYWRzaGVldFN0eWxlUHJvcGVydHkuanMKaW5kZXggNjZlMTE2Y2VkMmJj
Y2QxMWVjZTlkMjUwNmZkNjU2NGRlMjg2N2RkNi4uMzllY2MzYTcwNWM3MGRiYzg1ZTVjNzQyYTA3
OTYxY2UzYTE1NzljZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvVmlld3MvU3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5LmpzCisrKyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eS5q
cwpAQCAtMTkxLDYgKzE5MSw4IEBAIFdJLlNwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eSA9IGNsYXNz
IFNwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eSBleHRlbmRzIFdJLk9iamVjdAogICAgICAgICAgICAg
dGhpcy5fbmFtZVRleHRGaWVsZCA9IG5ldyBXSS5TcHJlYWRzaGVldFRleHRGaWVsZCh0aGlzLCB0
aGlzLl9uYW1lRWxlbWVudCwgdGhpcy5fbmFtZUNvbXBsZXRpb25EYXRhUHJvdmlkZXIuYmluZCh0
aGlzKSk7CiAKICAgICAgICAgICAgIHRoaXMuX3ZhbHVlRWxlbWVudC50YWJJbmRleCA9IDA7Cisg
ICAgICAgICAgICB0aGlzLl92YWx1ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JlaW5w
dXQiLCB0aGlzLl9oYW5kbGVWYWx1ZUJlZm9yZUlucHV0LmJpbmQodGhpcykpOworCiAgICAgICAg
ICAgICB0aGlzLl92YWx1ZVRleHRGaWVsZCA9IG5ldyBXSS5TcHJlYWRzaGVldFRleHRGaWVsZCh0
aGlzLCB0aGlzLl92YWx1ZUVsZW1lbnQsIHRoaXMuX3ZhbHVlQ29tcGxldGlvbkRhdGFQcm92aWRl
ci5iaW5kKHRoaXMpKTsKICAgICAgICAgfQogCkBAIC01MDEsNiArNTAzLDM1IEBAIFdJLlNwcmVh
ZHNoZWV0U3R5bGVQcm9wZXJ0eSA9IGNsYXNzIFNwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eSBleHRl
bmRzIFdJLk9iamVjdAogICAgICAgICByZXR1cm4gV0kuQ1NTQ29tcGxldGlvbnMuY3NzTmFtZUNv
bXBsZXRpb25zLnN0YXJ0c1dpdGgocHJlZml4KTsKICAgICB9CiAKKyAgICBfaGFuZGxlVmFsdWVC
ZWZvcmVJbnB1dChldmVudCkKKyAgICB7CisgICAgICAgIGlmIChldmVudC5kYXRhICE9PSAiOyIg
fHwgZXZlbnQuaW5wdXRUeXBlICE9PSAiaW5zZXJ0VGV4dCIpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgbGV0IHRleHQgPSB0aGlzLl92YWx1ZUVsZW1lbnQudGV4dENvbnRlbnQ7Cisg
ICAgICAgIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuZ2V0UmFuZ2VBdCgwKS5zdGFydE9mZnNl
dCAhPT0gdGV4dC5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gRmlu
ZCB0aGUgZmlyc3QgYW5kIGxhc3QgaW5kZXggKGlmIGFueSkgb2YgYSBxdW90ZSBjaGFyYWN0ZXIg
dG8gZW5zdXJlIHRoYXQgdGhlIHN0cmluZworICAgICAgICAvLyBkb2Vzbid0IGNvbnRhaW4gdW5i
YWxhbmNlZCBxdW90ZXMuIElmIHNvLCB0aGVuIHRoZXJlJ3Mgbm8gd2F5IHRoYXQgdGhlIHNlbWlj
b2xvbiBjb3VsZCBiZQorICAgICAgICAvLyBwYXJ0IG9mIGEgc3RyaW5nIHdpdGhpbiB0aGUgdmFs
dWUsIHNvIHdlIGNhbiBhc3N1bWUgdGhhdCBpdCdzIHRoZSBwcm9wZXJ0eSAidGVybWluYXRvciIu
CisgICAgICAgIGNvbnN0IHF1b3RlUmVnZXggPSAvWyInXS9nOworICAgICAgICBsZXQgc3RhcnQg
PSAtMTsKKyAgICAgICAgbGV0IGVuZCA9IHRleHQubGVuZ3RoOworICAgICAgICBsZXQgbWF0Y2gg
PSBudWxsOworICAgICAgICB3aGlsZSAobWF0Y2ggPSBxdW90ZVJlZ2V4LmV4ZWModGV4dCkpIHsK
KyAgICAgICAgICAgIGlmIChzdGFydCA8IDApCisgICAgICAgICAgICAgICAgc3RhcnQgPSBtYXRj
aC5pbmRleDsKKyAgICAgICAgICAgIGVuZCA9IG1hdGNoLmluZGV4ICsgMTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICghcXVvdGVSZWdleC50ZXN0KHRleHQpIHx8IHRleHQuc3Vic3RyaW5nKHN0
YXJ0LCBlbmQpLmhhc01hdGNoaW5nRXNjYXBlZFF1b3RlcygpKSB7CisgICAgICAgICAgICBldmVu
dC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgdGhpcy5fdmFsdWVUZXh0RmllbGQuc3Rv
cEVkaXRpbmcoKTsKKyAgICAgICAgICAgIHRoaXMuc3ByZWFkc2hlZXRUZXh0RmllbGREaWRDb21t
aXQodGhpcy5fdmFsdWVUZXh0RmllbGQsIHtkaXJlY3Rpb246ICJmb3J3YXJkIn0pOworICAgICAg
ICB9CisgICAgfQorCiAgICAgX3ZhbHVlQ29tcGxldGlvbkRhdGFQcm92aWRlcihwcmVmaXgpCiAg
ICAgewogICAgICAgICBsZXQgcHJvcGVydHlOYW1lID0gdGhpcy5fbmFtZUVsZW1lbnQudGV4dENv
bnRlbnQudHJpbSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329433</attachid>
            <date>2017-12-14 18:21:34 -0800</date>
            <delta_ts>2017-12-18 13:55:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-178498-20171214192133.patch</filename>
            <type>text/plain</type>
            <size>7076</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDU3NWUxNzM5ZTU5NjkxNzEzMDg5MzdiMTlkMmMw
ZjZjYmZjMDk4NzguLmU1ZTEzNDk2YWVmNzFjOWVjNDVmYmNlZjkwMGVkNTUxNzM1NmM3ZjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI3IEBACiAyMDE3LTEyLTE0ICBEZXZp
biBSb3Vzc28gIDx3ZWJraXRAZGV2aW5yb3Vzc28uY29tPgogCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFN0eWxlcyBSZWRlc2lnbjogVHlwaW5nIHNlbWljb2xvbiBhdCB0aGUgZW5kIG9mIHZhbHVl
IHNob3VsZCBtb3ZlIHRvIHRoZSBuZXh0IHByb3BlcnR5CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzg0OTgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzM1MDY1OTk1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogVXNlckludGVyZmFjZS9WaWV3cy9TcHJlYWRzaGVldFN0eXBlUHJvcGVydHkuanM6Cisg
ICAgICAgIChXSS5TcHJlYWRzaGVldFN0eXBlUHJvcGVydHkucHJvdG90eXBlLl91cGRhdGUpOgor
ICAgICAgICAoV0kuU3ByZWFkc2hlZXRTdHlwZVByb3BlcnR5LnByb3RvdHlwZS5faGFuZGxlVmFs
dWVCZWZvcmVJbnB1dCk6CisgICAgICAgIE9ubHkgbW92ZSB0byB0aGUgbmV4dCBwcm9wZXJ0eSBp
ZiB0aGVyZSBhcmUgbm8gdW5iYWxhbmNlZCBxdW90ZXMuIEZvciBleGFtcGxlLCBhZGRpbmcgYQor
ICAgICAgICBzZW1pY29sb24gYWZ0ZXIgYHVybCgiZm9vYCBvciBgdXJsKGJhcmAgd291bGQgbm90
IG1vdmUgdG8gdGhlIG5leHQgcHJvcGVydHkuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Zp
ZXdzL1NwcmVhZHNoZWV0VGV4dEZpZWxkLmpzOgorICAgICAgICAoV0kuU3ByZWFkc2hlZXRUZXh0
RmllbGQucHJvdG90eXBlLnZhbHVlV2l0aG91dFN1Z2dlc3Rpb24pOgorICAgICAgICAoV0kuU3By
ZWFkc2hlZXRUZXh0RmllbGQucHJvdG90eXBlLmNvbXBsZXRpb25TdWdnZXN0aW9uc1NlbGVjdGVk
Q29tcGxldGlvbik6CisgICAgICAgIChXSS5TcHJlYWRzaGVldFRleHRGaWVsZC5wcm90b3R5cGUu
Y29tcGxldGlvblN1Z2dlc3Rpb25zQ2xpY2tlZENvbXBsZXRpb24pOgorICAgICAgICAoV0kuU3By
ZWFkc2hlZXRUZXh0RmllbGQucHJvdG90eXBlLl9oYW5kbGVLZXlEb3duRm9yU3VnZ2VzdGlvblZp
ZXcpOgorICAgICAgICAoV0kuU3ByZWFkc2hlZXRUZXh0RmllbGQucHJvdG90eXBlLl91cGRhdGVD
b21wbGV0aW9ucyk6CisgICAgICAgIChXSS5TcHJlYWRzaGVldFRleHRGaWVsZC5wcm90b3R5cGUu
X2dldFByZWZpeCk6IERlbGV0ZWQuCisKKzIwMTctMTItMTQgIERldmluIFJvdXNzbyAgPHdlYmtp
dEBkZXZpbnJvdXNzby5jb20+CisKICAgICAgICAgV2ViIEluc3BlY3RvcjogcmVwbGFjZSBIVE1M
Q2FudmFzRWxlbWVudCB3aXRoIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgZm9yIGluc3RydW1lbnRh
dGlvbiBsb2dpYwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTgwNzcwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1ZpZXdzL1NwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eS5qcwppbmRl
eCAxZjBmOTBjN2IwMjVkNmQ5ODYzZGU5ZjU2ZGFiYzFlZDFmNGE2NTdiLi5lYWEwNWIwMGMyZmUx
YmIzZDljOTgxYTZlNjEyMzI3OWRlNDc5OWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TcHJlYWRzaGVldFN0eWxlUHJvcGVydHkuanMKKysr
IGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU3ByZWFkc2hlZXRT
dHlsZVByb3BlcnR5LmpzCkBAIC0xOTEsNiArMTkxLDggQEAgV0kuU3ByZWFkc2hlZXRTdHlsZVBy
b3BlcnR5ID0gY2xhc3MgU3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5IGV4dGVuZHMgV0kuT2JqZWN0
CiAgICAgICAgICAgICB0aGlzLl9uYW1lVGV4dEZpZWxkID0gbmV3IFdJLlNwcmVhZHNoZWV0VGV4
dEZpZWxkKHRoaXMsIHRoaXMuX25hbWVFbGVtZW50LCB0aGlzLl9uYW1lQ29tcGxldGlvbkRhdGFQ
cm92aWRlci5iaW5kKHRoaXMpKTsKIAogICAgICAgICAgICAgdGhpcy5fdmFsdWVFbGVtZW50LnRh
YkluZGV4ID0gMDsKKyAgICAgICAgICAgIHRoaXMuX3ZhbHVlRWxlbWVudC5hZGRFdmVudExpc3Rl
bmVyKCJiZWZvcmVpbnB1dCIsIHRoaXMuX2hhbmRsZVZhbHVlQmVmb3JlSW5wdXQuYmluZCh0aGlz
KSk7CisKICAgICAgICAgICAgIHRoaXMuX3ZhbHVlVGV4dEZpZWxkID0gbmV3IFdJLlNwcmVhZHNo
ZWV0VGV4dEZpZWxkKHRoaXMsIHRoaXMuX3ZhbHVlRWxlbWVudCwgdGhpcy5fdmFsdWVDb21wbGV0
aW9uRGF0YVByb3ZpZGVyLmJpbmQodGhpcykpOwogICAgICAgICB9CiAKQEAgLTUwMCw2ICs1MDIs
MzUgQEAgV0kuU3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5ID0gY2xhc3MgU3ByZWFkc2hlZXRTdHls
ZVByb3BlcnR5IGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIHJldHVybiBXSS5DU1NDb21wbGV0
aW9ucy5jc3NOYW1lQ29tcGxldGlvbnMuc3RhcnRzV2l0aChwcmVmaXgpOwogICAgIH0KIAorICAg
IF9oYW5kbGVWYWx1ZUJlZm9yZUlucHV0KGV2ZW50KQorICAgIHsKKyAgICAgICAgaWYgKGV2ZW50
LmRhdGEgIT09ICI7IiB8fCBldmVudC5pbnB1dFR5cGUgIT09ICJpbnNlcnRUZXh0IikKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBsZXQgdGV4dCA9IHRoaXMuX3ZhbHVlVGV4dEZpZWxk
LnZhbHVlV2l0aG91dFN1Z2dlc3Rpb24oKTsKKyAgICAgICAgaWYgKHdpbmRvdy5nZXRTZWxlY3Rp
b24oKS5nZXRSYW5nZUF0KDApLnN0YXJ0T2Zmc2V0ICE9PSB0ZXh0Lmxlbmd0aCkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICAvLyBGaW5kIHRoZSBmaXJzdCBhbmQgbGFzdCBpbmRleCAo
aWYgYW55KSBvZiBhIHF1b3RlIGNoYXJhY3RlciB0byBlbnN1cmUgdGhhdCB0aGUgc3RyaW5nCisg
ICAgICAgIC8vIGRvZXNuJ3QgY29udGFpbiB1bmJhbGFuY2VkIHF1b3Rlcy4gSWYgc28sIHRoZW4g
dGhlcmUncyBubyB3YXkgdGhhdCB0aGUgc2VtaWNvbG9uIGNvdWxkIGJlCisgICAgICAgIC8vIHBh
cnQgb2YgYSBzdHJpbmcgd2l0aGluIHRoZSB2YWx1ZSwgc28gd2UgY2FuIGFzc3VtZSB0aGF0IGl0
J3MgdGhlIHByb3BlcnR5ICJ0ZXJtaW5hdG9yIi4KKyAgICAgICAgY29uc3QgcXVvdGVSZWdleCA9
IC9bIiddL2c7CisgICAgICAgIGxldCBzdGFydCA9IC0xOworICAgICAgICBsZXQgZW5kID0gdGV4
dC5sZW5ndGg7CisgICAgICAgIGxldCBtYXRjaCA9IG51bGw7CisgICAgICAgIHdoaWxlIChtYXRj
aCA9IHF1b3RlUmVnZXguZXhlYyh0ZXh0KSkgeworICAgICAgICAgICAgaWYgKHN0YXJ0IDwgMCkK
KyAgICAgICAgICAgICAgICBzdGFydCA9IG1hdGNoLmluZGV4OworICAgICAgICAgICAgZW5kID0g
bWF0Y2guaW5kZXggKyAxOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFxdW90ZVJlZ2V4LnRl
c3QodGV4dCkgfHwgdGV4dC5zdWJzdHJpbmcoc3RhcnQsIGVuZCkuaGFzTWF0Y2hpbmdFc2NhcGVk
UXVvdGVzKCkpIHsKKyAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAg
ICAgICB0aGlzLl92YWx1ZVRleHRGaWVsZC5zdG9wRWRpdGluZygpOworICAgICAgICAgICAgdGhp
cy5zcHJlYWRzaGVldFRleHRGaWVsZERpZENvbW1pdCh0aGlzLl92YWx1ZVRleHRGaWVsZCwge2Rp
cmVjdGlvbjogImZvcndhcmQifSk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBfdmFsdWVDb21w
bGV0aW9uRGF0YVByb3ZpZGVyKHByZWZpeCkKICAgICB7CiAgICAgICAgIGxldCBwcm9wZXJ0eU5h
bWUgPSB0aGlzLl9uYW1lRWxlbWVudC50ZXh0Q29udGVudC50cmltKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TcHJlYWRzaGVldFRleHRG
aWVsZC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NwcmVh
ZHNoZWV0VGV4dEZpZWxkLmpzCmluZGV4IDM1Y2E0MTE2MWEyN2Y5MzQ0NTQzYjkyZDFkYjBkMDI1
ZWYwY2M5ZmYuLmI5MDRkZGYzNjQ5MDQ4YjMxNzY5OWU2NDIyMDcwZTllOTFjOTUwMGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NwcmVhZHNo
ZWV0VGV4dEZpZWxkLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1ZpZXdzL1NwcmVhZHNoZWV0VGV4dEZpZWxkLmpzCkBAIC01OCw2ICs1OCwxMiBAQCBXSS5TcHJl
YWRzaGVldFRleHRGaWVsZCA9IGNsYXNzIFNwcmVhZHNoZWV0VGV4dEZpZWxkCiAgICAgZ2V0IHZh
bHVlKCkgeyByZXR1cm4gdGhpcy5fZWxlbWVudC50ZXh0Q29udGVudDsgfQogICAgIHNldCB2YWx1
ZSh2YWx1ZSkgeyB0aGlzLl9lbGVtZW50LnRleHRDb250ZW50ID0gdmFsdWU7IH0KIAorICAgIHZh
bHVlV2l0aG91dFN1Z2dlc3Rpb24oKQorICAgIHsKKyAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5f
ZWxlbWVudC50ZXh0Q29udGVudDsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnNsaWNlKDAsIHZhbHVl
Lmxlbmd0aCAtIHRoaXMuc3VnZ2VzdGlvbkhpbnQubGVuZ3RoKTsKKyAgICB9CisKICAgICBnZXQg
c3VnZ2VzdGlvbkhpbnQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3N1Z2dlc3Rpb25I
aW50RWxlbWVudC50ZXh0Q29udGVudDsKQEAgLTEzMiw3ICsxMzgsNyBAQCBXSS5TcHJlYWRzaGVl
dFRleHRGaWVsZCA9IGNsYXNzIFNwcmVhZHNoZWV0VGV4dEZpZWxkCiAKICAgICBjb21wbGV0aW9u
U3VnZ2VzdGlvbnNTZWxlY3RlZENvbXBsZXRpb24oc3VnZ2VzdGlvbnNWaWV3LCBzZWxlY3RlZFRl
eHQgPSAiIikKICAgICB7Ci0gICAgICAgIGxldCBwcmVmaXggPSB0aGlzLl9nZXRQcmVmaXgoKTsK
KyAgICAgICAgbGV0IHByZWZpeCA9IHRoaXMudmFsdWVXaXRob3V0U3VnZ2VzdGlvbigpOwogICAg
ICAgICBsZXQgY29tcGxldGlvblByZWZpeCA9IHRoaXMuX2dldENvbXBsZXRpb25QcmVmaXgocHJl
Zml4KTsKIAogICAgICAgICB0aGlzLnN1Z2dlc3Rpb25IaW50ID0gc2VsZWN0ZWRUZXh0LnNsaWNl
KGNvbXBsZXRpb25QcmVmaXgubGVuZ3RoKTsKQEAgLTE1OCw3ICsxNjQsNyBAQCBXSS5TcHJlYWRz
aGVldFRleHRGaWVsZCA9IGNsYXNzIFNwcmVhZHNoZWV0VGV4dEZpZWxkCiAgICAgICAgIC8vIGNv
bXBsZXRpb25QcmVmaXg6ICAgICAgICAgICAgcm8KICAgICAgICAgLy8gICAgICAgIG5ld1ByZWZp
eDogIDFweCBzb2xpZAogICAgICAgICAvLyAgICAgc2VsZWN0ZWRUZXh0OiAgICAgICAgICAgIHJv
c3licm93bgotICAgICAgICBsZXQgcHJlZml4ID0gdGhpcy5fZ2V0UHJlZml4KCk7CisgICAgICAg
IGxldCBwcmVmaXggPSB0aGlzLnZhbHVlV2l0aG91dFN1Z2dlc3Rpb24oKTsKICAgICAgICAgbGV0
IGNvbXBsZXRpb25QcmVmaXggPSB0aGlzLl9nZXRDb21wbGV0aW9uUHJlZml4KHByZWZpeCk7CiAg
ICAgICAgIGxldCBuZXdQcmVmaXggPSBwcmVmaXguc2xpY2UoMCwgLWNvbXBsZXRpb25QcmVmaXgu
bGVuZ3RoKTsKIApAQCAtMTkxLDEyICsxOTcsNiBAQCBXSS5TcHJlYWRzaGVldFRleHRGaWVsZCA9
IGNsYXNzIFNwcmVhZHNoZWV0VGV4dEZpZWxkCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBfZ2V0
UHJlZml4KCkKLSAgICB7Ci0gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuX2VsZW1lbnQudGV4dENv
bnRlbnQ7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5zbGljZSgwLCB2YWx1ZS5sZW5ndGggLSB0aGlz
LnN1Z2dlc3Rpb25IaW50Lmxlbmd0aCk7Ci0gICAgfQotCiAgICAgX2hhbmRsZUZvY3VzKGV2ZW50
KQogICAgIHsKICAgICAgICAgdGhpcy5zdGFydEVkaXRpbmcoKTsKQEAgLTI5Nyw3ICsyOTcsNyBA
QCBXSS5TcHJlYWRzaGVldFRleHRGaWVsZCA9IGNsYXNzIFNwcmVhZHNoZWV0VGV4dEZpZWxkCiAg
ICAgICAgIGlmIChldmVudC5rZXkgPT09ICJBcnJvd1JpZ2h0IiAmJiB0aGlzLnN1Z2dlc3Rpb25I
aW50KSB7CiAgICAgICAgICAgICBsZXQgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigp
OwogCi0gICAgICAgICAgICBpZiAoc2VsZWN0aW9uLmlzQ29sbGFwc2VkICYmIChzZWxlY3Rpb24u
Zm9jdXNPZmZzZXQgPT09IHRoaXMuX2dldFByZWZpeCgpLmxlbmd0aCB8fCBzZWxlY3Rpb24uZm9j
dXNOb2RlID09PSB0aGlzLl9zdWdnZXN0aW9uSGludEVsZW1lbnQpKSB7CisgICAgICAgICAgICBp
ZiAoc2VsZWN0aW9uLmlzQ29sbGFwc2VkICYmIChzZWxlY3Rpb24uZm9jdXNPZmZzZXQgPT09IHRo
aXMudmFsdWVXaXRob3V0U3VnZ2VzdGlvbigpLmxlbmd0aCB8fCBzZWxlY3Rpb24uZm9jdXNOb2Rl
ID09PSB0aGlzLl9zdWdnZXN0aW9uSGludEVsZW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgZXZl
bnQuc3RvcCgpOwogICAgICAgICAgICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJpbnNlcnRU
ZXh0IiwgZmFsc2UsIHRoaXMuc3VnZ2VzdGlvbkhpbnQpOwogCkBAIC0zNTAsNyArMzUwLDcgQEAg
V0kuU3ByZWFkc2hlZXRUZXh0RmllbGQgPSBjbGFzcyBTcHJlYWRzaGVldFRleHRGaWVsZAogICAg
ICAgICBpZiAoIXRoaXMuX2NvbXBsZXRpb25Qcm92aWRlcikKICAgICAgICAgICAgIHJldHVybjsK
IAotICAgICAgICBsZXQgcHJlZml4ID0gdGhpcy5fZ2V0UHJlZml4KCk7CisgICAgICAgIGxldCBw
cmVmaXggPSB0aGlzLnZhbHVlV2l0aG91dFN1Z2dlc3Rpb24oKTsKICAgICAgICAgbGV0IGNvbXBs
ZXRpb25QcmVmaXggPSB0aGlzLl9nZXRDb21wbGV0aW9uUHJlZml4KHByZWZpeCk7CiAgICAgICAg
IGxldCBjb21wbGV0aW9ucyA9IHRoaXMuX2NvbXBsZXRpb25Qcm92aWRlcihjb21wbGV0aW9uUHJl
Zml4KTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329677</attachid>
            <date>2017-12-18 13:55:33 -0800</date>
            <delta_ts>2017-12-19 14:40:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-178498-20171218145532.patch</filename>
            <type>text/plain</type>
            <size>7069</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDdjYmUxYzA4ZjA4YjljYzAyMDc4NDVkNDU4ODY1
ODAyNzUyNzlkM2YuLjJmODdkNTFjYzQ5ODZkMzdmYzZmNGViM2Y1OTVhYzI0YzExYWM4NTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE3LTEyLTE4ICBEZXZp
biBSb3Vzc28gIDx3ZWJraXRAZGV2aW5yb3Vzc28uY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFN0eWxlcyBSZWRlc2lnbjogVHlwaW5nIHNlbWljb2xvbiBhdCB0aGUgZW5kIG9mIHZhbHVl
IHNob3VsZCBtb3ZlIHRvIHRoZSBuZXh0IHByb3BlcnR5CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzg0OTgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzM1MDY1OTk1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogVXNlckludGVyZmFjZS9WaWV3cy9TcHJlYWRzaGVldFN0eXBlUHJvcGVydHkuanM6Cisg
ICAgICAgIChXSS5TcHJlYWRzaGVldFN0eXBlUHJvcGVydHkucHJvdG90eXBlLl91cGRhdGUpOgor
ICAgICAgICAoV0kuU3ByZWFkc2hlZXRTdHlwZVByb3BlcnR5LnByb3RvdHlwZS5faGFuZGxlVmFs
dWVCZWZvcmVJbnB1dCk6CisgICAgICAgIE9ubHkgbW92ZSB0byB0aGUgbmV4dCBwcm9wZXJ0eSBp
ZiB0aGVyZSBhcmUgbm8gdW5iYWxhbmNlZCBxdW90ZXMuIEZvciBleGFtcGxlLCBhZGRpbmcgYQor
ICAgICAgICBzZW1pY29sb24gYWZ0ZXIgYHVybCgiZm9vYCBvciBgdXJsKGJhcmAgd291bGQgbm90
IG1vdmUgdG8gdGhlIG5leHQgcHJvcGVydHkuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Zp
ZXdzL1NwcmVhZHNoZWV0VGV4dEZpZWxkLmpzOgorICAgICAgICAoV0kuU3ByZWFkc2hlZXRUZXh0
RmllbGQucHJvdG90eXBlLnZhbHVlV2l0aG91dFN1Z2dlc3Rpb24pOgorICAgICAgICAoV0kuU3By
ZWFkc2hlZXRUZXh0RmllbGQucHJvdG90eXBlLmNvbXBsZXRpb25TdWdnZXN0aW9uc1NlbGVjdGVk
Q29tcGxldGlvbik6CisgICAgICAgIChXSS5TcHJlYWRzaGVldFRleHRGaWVsZC5wcm90b3R5cGUu
Y29tcGxldGlvblN1Z2dlc3Rpb25zQ2xpY2tlZENvbXBsZXRpb24pOgorICAgICAgICAoV0kuU3By
ZWFkc2hlZXRUZXh0RmllbGQucHJvdG90eXBlLl9oYW5kbGVLZXlEb3duRm9yU3VnZ2VzdGlvblZp
ZXcpOgorICAgICAgICAoV0kuU3ByZWFkc2hlZXRUZXh0RmllbGQucHJvdG90eXBlLl91cGRhdGVD
b21wbGV0aW9ucyk6CisgICAgICAgIChXSS5TcHJlYWRzaGVldFRleHRGaWVsZC5wcm90b3R5cGUu
X2dldFByZWZpeCk6IERlbGV0ZWQuCisKIDIwMTctMTItMTggIEpvc2VwaCBQZWNvcmFybyAgPHBl
Y29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBOZXR3b3JrIFRhYiAt
IHdhdGVyZmFsbCBncmFwaCBjYW4gYmUgbWlzLXNpemVkIGFmdGVyIGNsb3NpbmcgZGV0YWlsIHZp
ZXcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdz
L1NwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1ZpZXdzL1NwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eS5qcwppbmRleCAxZjBmOTBj
N2IwMjVkNmQ5ODYzZGU5ZjU2ZGFiYzFlZDFmNGE2NTdiLi5jZTg1ODBjMTYzZTYyZmZiMzE5ZDYw
NTIzYzBjZTI1NjkxZWUxYzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9WaWV3cy9TcHJlYWRzaGVldFN0eWxlUHJvcGVydHkuanMKKysrIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU3ByZWFkc2hlZXRTdHlsZVByb3Bl
cnR5LmpzCkBAIC0xOTEsNiArMTkxLDggQEAgV0kuU3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5ID0g
Y2xhc3MgU3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5IGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAg
ICAgICB0aGlzLl9uYW1lVGV4dEZpZWxkID0gbmV3IFdJLlNwcmVhZHNoZWV0VGV4dEZpZWxkKHRo
aXMsIHRoaXMuX25hbWVFbGVtZW50LCB0aGlzLl9uYW1lQ29tcGxldGlvbkRhdGFQcm92aWRlci5i
aW5kKHRoaXMpKTsKIAogICAgICAgICAgICAgdGhpcy5fdmFsdWVFbGVtZW50LnRhYkluZGV4ID0g
MDsKKyAgICAgICAgICAgIHRoaXMuX3ZhbHVlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJiZWZv
cmVpbnB1dCIsIHRoaXMuX2hhbmRsZVZhbHVlQmVmb3JlSW5wdXQuYmluZCh0aGlzKSk7CisKICAg
ICAgICAgICAgIHRoaXMuX3ZhbHVlVGV4dEZpZWxkID0gbmV3IFdJLlNwcmVhZHNoZWV0VGV4dEZp
ZWxkKHRoaXMsIHRoaXMuX3ZhbHVlRWxlbWVudCwgdGhpcy5fdmFsdWVDb21wbGV0aW9uRGF0YVBy
b3ZpZGVyLmJpbmQodGhpcykpOwogICAgICAgICB9CiAKQEAgLTUwMCw2ICs1MDIsMzYgQEAgV0ku
U3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5ID0gY2xhc3MgU3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5
IGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIHJldHVybiBXSS5DU1NDb21wbGV0aW9ucy5jc3NO
YW1lQ29tcGxldGlvbnMuc3RhcnRzV2l0aChwcmVmaXgpOwogICAgIH0KIAorICAgIF9oYW5kbGVW
YWx1ZUJlZm9yZUlucHV0KGV2ZW50KQorICAgIHsKKyAgICAgICAgaWYgKGV2ZW50LmRhdGEgIT09
ICI7IiB8fCBldmVudC5pbnB1dFR5cGUgIT09ICJpbnNlcnRUZXh0IikKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBsZXQgdGV4dCA9IHRoaXMuX3ZhbHVlVGV4dEZpZWxkLnZhbHVlV2l0
aG91dFN1Z2dlc3Rpb24oKTsKKyAgICAgICAgbGV0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxl
Y3Rpb24oKTsKKyAgICAgICAgaWYgKCFzZWxlY3Rpb24ucmFuZ2VDb3VudCB8fCBzZWxlY3Rpb24u
Z2V0UmFuZ2VBdCgwKS5lbmRPZmZzZXQgIT09IHRleHQubGVuZ3RoKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IGFuZCBsYXN0IGluZGV4IChpZiBhbnkp
IG9mIGEgcXVvdGUgY2hhcmFjdGVyIHRvIGVuc3VyZSB0aGF0IHRoZSBzdHJpbmcKKyAgICAgICAg
Ly8gZG9lc24ndCBjb250YWluIHVuYmFsYW5jZWQgcXVvdGVzLiBJZiBzbywgdGhlbiB0aGVyZSdz
IG5vIHdheSB0aGF0IHRoZSBzZW1pY29sb24gY291bGQgYmUKKyAgICAgICAgLy8gcGFydCBvZiBh
IHN0cmluZyB3aXRoaW4gdGhlIHZhbHVlLCBzbyB3ZSBjYW4gYXNzdW1lIHRoYXQgaXQncyB0aGUg
cHJvcGVydHkgInRlcm1pbmF0b3IiLgorICAgICAgICBjb25zdCBxdW90ZVJlZ2V4ID0gL1siJ10v
ZzsKKyAgICAgICAgbGV0IHN0YXJ0ID0gLTE7CisgICAgICAgIGxldCBlbmQgPSB0ZXh0Lmxlbmd0
aDsKKyAgICAgICAgbGV0IG1hdGNoID0gbnVsbDsKKyAgICAgICAgd2hpbGUgKG1hdGNoID0gcXVv
dGVSZWdleC5leGVjKHRleHQpKSB7CisgICAgICAgICAgICBpZiAoc3RhcnQgPCAwKQorICAgICAg
ICAgICAgICAgIHN0YXJ0ID0gbWF0Y2guaW5kZXg7CisgICAgICAgICAgICBlbmQgPSBtYXRjaC5p
bmRleCArIDE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXF1b3RlUmVnZXgudGVzdCh0ZXh0
KSB8fCB0ZXh0LnN1YnN0cmluZyhzdGFydCwgZW5kKS5oYXNNYXRjaGluZ0VzY2FwZWRRdW90ZXMo
KSkgeworICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgIHRo
aXMuX3ZhbHVlVGV4dEZpZWxkLnN0b3BFZGl0aW5nKCk7CisgICAgICAgICAgICB0aGlzLnNwcmVh
ZHNoZWV0VGV4dEZpZWxkRGlkQ29tbWl0KHRoaXMuX3ZhbHVlVGV4dEZpZWxkLCB7ZGlyZWN0aW9u
OiAiZm9yd2FyZCJ9KTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIF92YWx1ZUNvbXBsZXRpb25E
YXRhUHJvdmlkZXIocHJlZml4KQogICAgIHsKICAgICAgICAgbGV0IHByb3BlcnR5TmFtZSA9IHRo
aXMuX25hbWVFbGVtZW50LnRleHRDb250ZW50LnRyaW0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NwcmVhZHNoZWV0VGV4dEZpZWxkLmpz
IGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU3ByZWFkc2hlZXRU
ZXh0RmllbGQuanMKaW5kZXggMzVjYTQxMTYxYTI3ZjkzNDQ1NDNiOTJkMWRiMGQwMjVlZjBjYzlm
Zi4uYjkwNGRkZjM2NDkwNDhiMzE3Njk5ZTY0MjIwNzBlOWU5MWM5NTAwYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU3ByZWFkc2hlZXRUZXh0
RmllbGQuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3Mv
U3ByZWFkc2hlZXRUZXh0RmllbGQuanMKQEAgLTU4LDYgKzU4LDEyIEBAIFdJLlNwcmVhZHNoZWV0
VGV4dEZpZWxkID0gY2xhc3MgU3ByZWFkc2hlZXRUZXh0RmllbGQKICAgICBnZXQgdmFsdWUoKSB7
IHJldHVybiB0aGlzLl9lbGVtZW50LnRleHRDb250ZW50OyB9CiAgICAgc2V0IHZhbHVlKHZhbHVl
KSB7IHRoaXMuX2VsZW1lbnQudGV4dENvbnRlbnQgPSB2YWx1ZTsgfQogCisgICAgdmFsdWVXaXRo
b3V0U3VnZ2VzdGlvbigpCisgICAgeworICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLl9lbGVtZW50
LnRleHRDb250ZW50OworICAgICAgICByZXR1cm4gdmFsdWUuc2xpY2UoMCwgdmFsdWUubGVuZ3Ro
IC0gdGhpcy5zdWdnZXN0aW9uSGludC5sZW5ndGgpOworICAgIH0KKwogICAgIGdldCBzdWdnZXN0
aW9uSGludCgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fc3VnZ2VzdGlvbkhpbnRFbGVt
ZW50LnRleHRDb250ZW50OwpAQCAtMTMyLDcgKzEzOCw3IEBAIFdJLlNwcmVhZHNoZWV0VGV4dEZp
ZWxkID0gY2xhc3MgU3ByZWFkc2hlZXRUZXh0RmllbGQKIAogICAgIGNvbXBsZXRpb25TdWdnZXN0
aW9uc1NlbGVjdGVkQ29tcGxldGlvbihzdWdnZXN0aW9uc1ZpZXcsIHNlbGVjdGVkVGV4dCA9ICIi
KQogICAgIHsKLSAgICAgICAgbGV0IHByZWZpeCA9IHRoaXMuX2dldFByZWZpeCgpOworICAgICAg
ICBsZXQgcHJlZml4ID0gdGhpcy52YWx1ZVdpdGhvdXRTdWdnZXN0aW9uKCk7CiAgICAgICAgIGxl
dCBjb21wbGV0aW9uUHJlZml4ID0gdGhpcy5fZ2V0Q29tcGxldGlvblByZWZpeChwcmVmaXgpOwog
CiAgICAgICAgIHRoaXMuc3VnZ2VzdGlvbkhpbnQgPSBzZWxlY3RlZFRleHQuc2xpY2UoY29tcGxl
dGlvblByZWZpeC5sZW5ndGgpOwpAQCAtMTU4LDcgKzE2NCw3IEBAIFdJLlNwcmVhZHNoZWV0VGV4
dEZpZWxkID0gY2xhc3MgU3ByZWFkc2hlZXRUZXh0RmllbGQKICAgICAgICAgLy8gY29tcGxldGlv
blByZWZpeDogICAgICAgICAgICBybwogICAgICAgICAvLyAgICAgICAgbmV3UHJlZml4OiAgMXB4
IHNvbGlkCiAgICAgICAgIC8vICAgICBzZWxlY3RlZFRleHQ6ICAgICAgICAgICAgcm9zeWJyb3du
Ci0gICAgICAgIGxldCBwcmVmaXggPSB0aGlzLl9nZXRQcmVmaXgoKTsKKyAgICAgICAgbGV0IHBy
ZWZpeCA9IHRoaXMudmFsdWVXaXRob3V0U3VnZ2VzdGlvbigpOwogICAgICAgICBsZXQgY29tcGxl
dGlvblByZWZpeCA9IHRoaXMuX2dldENvbXBsZXRpb25QcmVmaXgocHJlZml4KTsKICAgICAgICAg
bGV0IG5ld1ByZWZpeCA9IHByZWZpeC5zbGljZSgwLCAtY29tcGxldGlvblByZWZpeC5sZW5ndGgp
OwogCkBAIC0xOTEsMTIgKzE5Nyw2IEBAIFdJLlNwcmVhZHNoZWV0VGV4dEZpZWxkID0gY2xhc3Mg
U3ByZWFkc2hlZXRUZXh0RmllbGQKICAgICAgICAgfQogICAgIH0KIAotICAgIF9nZXRQcmVmaXgo
KQotICAgIHsKLSAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5fZWxlbWVudC50ZXh0Q29udGVudDsK
LSAgICAgICAgcmV0dXJuIHZhbHVlLnNsaWNlKDAsIHZhbHVlLmxlbmd0aCAtIHRoaXMuc3VnZ2Vz
dGlvbkhpbnQubGVuZ3RoKTsKLSAgICB9Ci0KICAgICBfaGFuZGxlRm9jdXMoZXZlbnQpCiAgICAg
ewogICAgICAgICB0aGlzLnN0YXJ0RWRpdGluZygpOwpAQCAtMjk3LDcgKzI5Nyw3IEBAIFdJLlNw
cmVhZHNoZWV0VGV4dEZpZWxkID0gY2xhc3MgU3ByZWFkc2hlZXRUZXh0RmllbGQKICAgICAgICAg
aWYgKGV2ZW50LmtleSA9PT0gIkFycm93UmlnaHQiICYmIHRoaXMuc3VnZ2VzdGlvbkhpbnQpIHsK
ICAgICAgICAgICAgIGxldCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAKLSAg
ICAgICAgICAgIGlmIChzZWxlY3Rpb24uaXNDb2xsYXBzZWQgJiYgKHNlbGVjdGlvbi5mb2N1c09m
ZnNldCA9PT0gdGhpcy5fZ2V0UHJlZml4KCkubGVuZ3RoIHx8IHNlbGVjdGlvbi5mb2N1c05vZGUg
PT09IHRoaXMuX3N1Z2dlc3Rpb25IaW50RWxlbWVudCkpIHsKKyAgICAgICAgICAgIGlmIChzZWxl
Y3Rpb24uaXNDb2xsYXBzZWQgJiYgKHNlbGVjdGlvbi5mb2N1c09mZnNldCA9PT0gdGhpcy52YWx1
ZVdpdGhvdXRTdWdnZXN0aW9uKCkubGVuZ3RoIHx8IHNlbGVjdGlvbi5mb2N1c05vZGUgPT09IHRo
aXMuX3N1Z2dlc3Rpb25IaW50RWxlbWVudCkpIHsKICAgICAgICAgICAgICAgICBldmVudC5zdG9w
KCk7CiAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoImluc2VydFRleHQiLCBm
YWxzZSwgdGhpcy5zdWdnZXN0aW9uSGludCk7CiAKQEAgLTM1MCw3ICszNTAsNyBAQCBXSS5TcHJl
YWRzaGVldFRleHRGaWVsZCA9IGNsYXNzIFNwcmVhZHNoZWV0VGV4dEZpZWxkCiAgICAgICAgIGlm
ICghdGhpcy5fY29tcGxldGlvblByb3ZpZGVyKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAg
ICAgIGxldCBwcmVmaXggPSB0aGlzLl9nZXRQcmVmaXgoKTsKKyAgICAgICAgbGV0IHByZWZpeCA9
IHRoaXMudmFsdWVXaXRob3V0U3VnZ2VzdGlvbigpOwogICAgICAgICBsZXQgY29tcGxldGlvblBy
ZWZpeCA9IHRoaXMuX2dldENvbXBsZXRpb25QcmVmaXgocHJlZml4KTsKICAgICAgICAgbGV0IGNv
bXBsZXRpb25zID0gdGhpcy5fY29tcGxldGlvblByb3ZpZGVyKGNvbXBsZXRpb25QcmVmaXgpOwog
Cg==
</data>
<flag name="review"
          id="348726"
          type_id="1"
          status="+"
          setter="joepeck"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329831</attachid>
            <date>2017-12-19 14:40:53 -0800</date>
            <delta_ts>2017-12-19 15:13:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>178498.diff</filename>
            <type>text/plain</type>
            <size>6886</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDZhYWU0NTBhOTI3Li5iZTdkZTNlOGE0YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTctMTItMTkgIERldmlu
IFJvdXNzbyAgPHdlYmtpdEBkZXZpbnJvdXNzby5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rv
cjogU3R5bGVzIFJlZGVzaWduOiBUeXBpbmcgc2VtaWNvbG9uIGF0IHRoZSBlbmQgb2YgdmFsdWUg
c2hvdWxkIG1vdmUgdG8gdGhlIG5leHQgcHJvcGVydHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3ODQ5OAorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
MzUwNjU5OTU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgorCisgICAg
ICAgICogVXNlckludGVyZmFjZS9WaWV3cy9TcHJlYWRzaGVldFN0eXBlUHJvcGVydHkuanM6Cisg
ICAgICAgIChXSS5TcHJlYWRzaGVldFN0eXBlUHJvcGVydHkucHJvdG90eXBlLl91cGRhdGUpOgor
ICAgICAgICAoV0kuU3ByZWFkc2hlZXRTdHlwZVByb3BlcnR5LnByb3RvdHlwZS5faGFuZGxlVmFs
dWVCZWZvcmVJbnB1dCk6CisgICAgICAgIE9ubHkgbW92ZSB0byB0aGUgbmV4dCBwcm9wZXJ0eSBp
ZiB0aGVyZSBhcmUgbm8gdW5iYWxhbmNlZCBxdW90ZXMuIEZvciBleGFtcGxlLCBhZGRpbmcgYQor
ICAgICAgICBzZW1pY29sb24gYWZ0ZXIgYHVybCgiZm9vYCBvciBgdXJsKCdiYXJgIHdvdWxkIG5v
dCBtb3ZlIHRvIHRoZSBuZXh0IHByb3BlcnR5LgorCisgICAgICAgICogVXNlckludGVyZmFjZS9W
aWV3cy9TcHJlYWRzaGVldFRleHRGaWVsZC5qczoKKyAgICAgICAgKFdJLlNwcmVhZHNoZWV0VGV4
dEZpZWxkLnByb3RvdHlwZS52YWx1ZVdpdGhvdXRTdWdnZXN0aW9uKToKKyAgICAgICAgKFdJLlNw
cmVhZHNoZWV0VGV4dEZpZWxkLnByb3RvdHlwZS5jb21wbGV0aW9uU3VnZ2VzdGlvbnNTZWxlY3Rl
ZENvbXBsZXRpb24pOgorICAgICAgICAoV0kuU3ByZWFkc2hlZXRUZXh0RmllbGQucHJvdG90eXBl
LmNvbXBsZXRpb25TdWdnZXN0aW9uc0NsaWNrZWRDb21wbGV0aW9uKToKKyAgICAgICAgKFdJLlNw
cmVhZHNoZWV0VGV4dEZpZWxkLnByb3RvdHlwZS5faGFuZGxlS2V5RG93bkZvclN1Z2dlc3Rpb25W
aWV3KToKKyAgICAgICAgKFdJLlNwcmVhZHNoZWV0VGV4dEZpZWxkLnByb3RvdHlwZS5fdXBkYXRl
Q29tcGxldGlvbnMpOgorICAgICAgICAoV0kuU3ByZWFkc2hlZXRUZXh0RmllbGQucHJvdG90eXBl
Ll9nZXRQcmVmaXgpOiBEZWxldGVkLgorCiAyMDE3LTEyLTE4ICBOaWtpdGEgVmFzaWx5ZXYgIDxu
dmFzaWx5ZXZAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFN0eWxlcyBSZWRl
c2lnbjogQ29tbWFuZC1TIHNob3VsZCBzYXZlIGNoYW5nZXMgaW4gbWF0Y2hpbmcgQ1NTIHJlc291
cmNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3
cy9TcHJlYWRzaGVldFN0eWxlUHJvcGVydHkuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9WaWV3cy9TcHJlYWRzaGVldFN0eWxlUHJvcGVydHkuanMKaW5kZXggNGVjNDFh
ZDAxOWIuLmM1MThiMjMzNTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9WaWV3cy9TcHJlYWRzaGVldFN0eWxlUHJvcGVydHkuanMKKysrIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU3ByZWFkc2hlZXRTdHlsZVByb3Bl
cnR5LmpzCkBAIC0xOTMsNiArMTkzLDggQEAgV0kuU3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5ID0g
Y2xhc3MgU3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5IGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAg
ICAgICB0aGlzLl9uYW1lVGV4dEZpZWxkID0gbmV3IFdJLlNwcmVhZHNoZWV0VGV4dEZpZWxkKHRo
aXMsIHRoaXMuX25hbWVFbGVtZW50LCB0aGlzLl9uYW1lQ29tcGxldGlvbkRhdGFQcm92aWRlci5i
aW5kKHRoaXMpKTsKIAogICAgICAgICAgICAgdGhpcy5fdmFsdWVFbGVtZW50LnRhYkluZGV4ID0g
MDsKKyAgICAgICAgICAgIHRoaXMuX3ZhbHVlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJiZWZv
cmVpbnB1dCIsIHRoaXMuX2hhbmRsZVZhbHVlQmVmb3JlSW5wdXQuYmluZCh0aGlzKSk7CisKICAg
ICAgICAgICAgIHRoaXMuX3ZhbHVlVGV4dEZpZWxkID0gbmV3IFdJLlNwcmVhZHNoZWV0VGV4dEZp
ZWxkKHRoaXMsIHRoaXMuX3ZhbHVlRWxlbWVudCwgdGhpcy5fdmFsdWVDb21wbGV0aW9uRGF0YVBy
b3ZpZGVyLmJpbmQodGhpcykpOwogICAgICAgICB9CiAKQEAgLTU0NSw2ICs1NDcsMzcgQEAgV0ku
U3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5ID0gY2xhc3MgU3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5
IGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIHJldHVybiBXSS5DU1NDb21wbGV0aW9ucy5jc3NO
YW1lQ29tcGxldGlvbnMuc3RhcnRzV2l0aChwcmVmaXgpOwogICAgIH0KIAorICAgIF9oYW5kbGVW
YWx1ZUJlZm9yZUlucHV0KGV2ZW50KQorICAgIHsKKyAgICAgICAgaWYgKGV2ZW50LmRhdGEgIT09
ICI7IiB8fCBldmVudC5pbnB1dFR5cGUgIT09ICJpbnNlcnRUZXh0IikKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBsZXQgdGV4dCA9IHRoaXMuX3ZhbHVlVGV4dEZpZWxkLnZhbHVlV2l0
aG91dFN1Z2dlc3Rpb24oKTsKKyAgICAgICAgbGV0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxl
Y3Rpb24oKTsKKyAgICAgICAgaWYgKCFzZWxlY3Rpb24ucmFuZ2VDb3VudCB8fCBzZWxlY3Rpb24u
Z2V0UmFuZ2VBdCgwKS5lbmRPZmZzZXQgIT09IHRleHQubGVuZ3RoKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IGFuZCBsYXN0IGluZGV4IChpZiBhbnkp
IG9mIGEgcXVvdGUgY2hhcmFjdGVyIHRvIGVuc3VyZSB0aGF0IHRoZSBzdHJpbmcKKyAgICAgICAg
Ly8gZG9lc24ndCBjb250YWluIHVuYmFsYW5jZWQgcXVvdGVzLiBJZiBzbywgdGhlbiB0aGVyZSdz
IG5vIHdheSB0aGF0IHRoZSBzZW1pY29sb24gY291bGQgYmUKKyAgICAgICAgLy8gcGFydCBvZiBh
IHN0cmluZyB3aXRoaW4gdGhlIHZhbHVlLCBzbyB3ZSBjYW4gYXNzdW1lIHRoYXQgaXQncyB0aGUg
cHJvcGVydHkgInRlcm1pbmF0b3IiLgorICAgICAgICBjb25zdCBxdW90ZVJlZ2V4ID0gL1siJ10v
ZzsKKyAgICAgICAgbGV0IHN0YXJ0ID0gLTE7CisgICAgICAgIGxldCBlbmQgPSB0ZXh0Lmxlbmd0
aDsKKyAgICAgICAgbGV0IG1hdGNoID0gbnVsbDsKKyAgICAgICAgd2hpbGUgKG1hdGNoID0gcXVv
dGVSZWdleC5leGVjKHRleHQpKSB7CisgICAgICAgICAgICBpZiAoc3RhcnQgPCAwKQorICAgICAg
ICAgICAgICAgIHN0YXJ0ID0gbWF0Y2guaW5kZXg7CisgICAgICAgICAgICBlbmQgPSBtYXRjaC5p
bmRleCArIDE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RhcnQgIT09IC0xICYmICF0ZXh0
LnN1YnN0cmluZyhzdGFydCwgZW5kKS5oYXNNYXRjaGluZ0VzY2FwZWRRdW90ZXMoKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAg
ICB0aGlzLl92YWx1ZVRleHRGaWVsZC5zdG9wRWRpdGluZygpOworICAgICAgICB0aGlzLnNwcmVh
ZHNoZWV0VGV4dEZpZWxkRGlkQ29tbWl0KHRoaXMuX3ZhbHVlVGV4dEZpZWxkLCB7ZGlyZWN0aW9u
OiAiZm9yd2FyZCJ9KTsKKyAgICB9CisKICAgICBfdmFsdWVDb21wbGV0aW9uRGF0YVByb3ZpZGVy
KHByZWZpeCkKICAgICB7CiAgICAgICAgIGxldCBwcm9wZXJ0eU5hbWUgPSB0aGlzLl9uYW1lRWxl
bWVudC50ZXh0Q29udGVudC50cmltKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9WaWV3cy9TcHJlYWRzaGVldFRleHRGaWVsZC5qcyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NwcmVhZHNoZWV0VGV4dEZpZWxkLmpz
CmluZGV4IDM1Y2E0MTE2MWEyLi5iOTA0ZGRmMzY0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU3ByZWFkc2hlZXRUZXh0RmllbGQuanMKKysr
IGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU3ByZWFkc2hlZXRU
ZXh0RmllbGQuanMKQEAgLTU4LDYgKzU4LDEyIEBAIFdJLlNwcmVhZHNoZWV0VGV4dEZpZWxkID0g
Y2xhc3MgU3ByZWFkc2hlZXRUZXh0RmllbGQKICAgICBnZXQgdmFsdWUoKSB7IHJldHVybiB0aGlz
Ll9lbGVtZW50LnRleHRDb250ZW50OyB9CiAgICAgc2V0IHZhbHVlKHZhbHVlKSB7IHRoaXMuX2Vs
ZW1lbnQudGV4dENvbnRlbnQgPSB2YWx1ZTsgfQogCisgICAgdmFsdWVXaXRob3V0U3VnZ2VzdGlv
bigpCisgICAgeworICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLl9lbGVtZW50LnRleHRDb250ZW50
OworICAgICAgICByZXR1cm4gdmFsdWUuc2xpY2UoMCwgdmFsdWUubGVuZ3RoIC0gdGhpcy5zdWdn
ZXN0aW9uSGludC5sZW5ndGgpOworICAgIH0KKwogICAgIGdldCBzdWdnZXN0aW9uSGludCgpCiAg
ICAgewogICAgICAgICByZXR1cm4gdGhpcy5fc3VnZ2VzdGlvbkhpbnRFbGVtZW50LnRleHRDb250
ZW50OwpAQCAtMTMyLDcgKzEzOCw3IEBAIFdJLlNwcmVhZHNoZWV0VGV4dEZpZWxkID0gY2xhc3Mg
U3ByZWFkc2hlZXRUZXh0RmllbGQKIAogICAgIGNvbXBsZXRpb25TdWdnZXN0aW9uc1NlbGVjdGVk
Q29tcGxldGlvbihzdWdnZXN0aW9uc1ZpZXcsIHNlbGVjdGVkVGV4dCA9ICIiKQogICAgIHsKLSAg
ICAgICAgbGV0IHByZWZpeCA9IHRoaXMuX2dldFByZWZpeCgpOworICAgICAgICBsZXQgcHJlZml4
ID0gdGhpcy52YWx1ZVdpdGhvdXRTdWdnZXN0aW9uKCk7CiAgICAgICAgIGxldCBjb21wbGV0aW9u
UHJlZml4ID0gdGhpcy5fZ2V0Q29tcGxldGlvblByZWZpeChwcmVmaXgpOwogCiAgICAgICAgIHRo
aXMuc3VnZ2VzdGlvbkhpbnQgPSBzZWxlY3RlZFRleHQuc2xpY2UoY29tcGxldGlvblByZWZpeC5s
ZW5ndGgpOwpAQCAtMTU4LDcgKzE2NCw3IEBAIFdJLlNwcmVhZHNoZWV0VGV4dEZpZWxkID0gY2xh
c3MgU3ByZWFkc2hlZXRUZXh0RmllbGQKICAgICAgICAgLy8gY29tcGxldGlvblByZWZpeDogICAg
ICAgICAgICBybwogICAgICAgICAvLyAgICAgICAgbmV3UHJlZml4OiAgMXB4IHNvbGlkCiAgICAg
ICAgIC8vICAgICBzZWxlY3RlZFRleHQ6ICAgICAgICAgICAgcm9zeWJyb3duCi0gICAgICAgIGxl
dCBwcmVmaXggPSB0aGlzLl9nZXRQcmVmaXgoKTsKKyAgICAgICAgbGV0IHByZWZpeCA9IHRoaXMu
dmFsdWVXaXRob3V0U3VnZ2VzdGlvbigpOwogICAgICAgICBsZXQgY29tcGxldGlvblByZWZpeCA9
IHRoaXMuX2dldENvbXBsZXRpb25QcmVmaXgocHJlZml4KTsKICAgICAgICAgbGV0IG5ld1ByZWZp
eCA9IHByZWZpeC5zbGljZSgwLCAtY29tcGxldGlvblByZWZpeC5sZW5ndGgpOwogCkBAIC0xOTEs
MTIgKzE5Nyw2IEBAIFdJLlNwcmVhZHNoZWV0VGV4dEZpZWxkID0gY2xhc3MgU3ByZWFkc2hlZXRU
ZXh0RmllbGQKICAgICAgICAgfQogICAgIH0KIAotICAgIF9nZXRQcmVmaXgoKQotICAgIHsKLSAg
ICAgICAgbGV0IHZhbHVlID0gdGhpcy5fZWxlbWVudC50ZXh0Q29udGVudDsKLSAgICAgICAgcmV0
dXJuIHZhbHVlLnNsaWNlKDAsIHZhbHVlLmxlbmd0aCAtIHRoaXMuc3VnZ2VzdGlvbkhpbnQubGVu
Z3RoKTsKLSAgICB9Ci0KICAgICBfaGFuZGxlRm9jdXMoZXZlbnQpCiAgICAgewogICAgICAgICB0
aGlzLnN0YXJ0RWRpdGluZygpOwpAQCAtMjk3LDcgKzI5Nyw3IEBAIFdJLlNwcmVhZHNoZWV0VGV4
dEZpZWxkID0gY2xhc3MgU3ByZWFkc2hlZXRUZXh0RmllbGQKICAgICAgICAgaWYgKGV2ZW50Lmtl
eSA9PT0gIkFycm93UmlnaHQiICYmIHRoaXMuc3VnZ2VzdGlvbkhpbnQpIHsKICAgICAgICAgICAg
IGxldCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAKLSAgICAgICAgICAgIGlm
IChzZWxlY3Rpb24uaXNDb2xsYXBzZWQgJiYgKHNlbGVjdGlvbi5mb2N1c09mZnNldCA9PT0gdGhp
cy5fZ2V0UHJlZml4KCkubGVuZ3RoIHx8IHNlbGVjdGlvbi5mb2N1c05vZGUgPT09IHRoaXMuX3N1
Z2dlc3Rpb25IaW50RWxlbWVudCkpIHsKKyAgICAgICAgICAgIGlmIChzZWxlY3Rpb24uaXNDb2xs
YXBzZWQgJiYgKHNlbGVjdGlvbi5mb2N1c09mZnNldCA9PT0gdGhpcy52YWx1ZVdpdGhvdXRTdWdn
ZXN0aW9uKCkubGVuZ3RoIHx8IHNlbGVjdGlvbi5mb2N1c05vZGUgPT09IHRoaXMuX3N1Z2dlc3Rp
b25IaW50RWxlbWVudCkpIHsKICAgICAgICAgICAgICAgICBldmVudC5zdG9wKCk7CiAgICAgICAg
ICAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoImluc2VydFRleHQiLCBmYWxzZSwgdGhpcy5z
dWdnZXN0aW9uSGludCk7CiAKQEAgLTM1MCw3ICszNTAsNyBAQCBXSS5TcHJlYWRzaGVldFRleHRG
aWVsZCA9IGNsYXNzIFNwcmVhZHNoZWV0VGV4dEZpZWxkCiAgICAgICAgIGlmICghdGhpcy5fY29t
cGxldGlvblByb3ZpZGVyKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGxldCBwcmVm
aXggPSB0aGlzLl9nZXRQcmVmaXgoKTsKKyAgICAgICAgbGV0IHByZWZpeCA9IHRoaXMudmFsdWVX
aXRob3V0U3VnZ2VzdGlvbigpOwogICAgICAgICBsZXQgY29tcGxldGlvblByZWZpeCA9IHRoaXMu
X2dldENvbXBsZXRpb25QcmVmaXgocHJlZml4KTsKICAgICAgICAgbGV0IGNvbXBsZXRpb25zID0g
dGhpcy5fY29tcGxldGlvblByb3ZpZGVyKGNvbXBsZXRpb25QcmVmaXgpOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>