<?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>161390</bug_id>
          
          <creation_ts>2016-08-30 10:14:05 -0700</creation_ts>
          <short_desc>Implement IPv6 parsing in URLParser</short_desc>
          <delta_ts>2016-09-02 09:08:40 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1224598</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-08-30 10:14:05 -0700</bug_when>
    <thetext>Implement IPv6 parsing in URLParser</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224607</commentid>
    <comment_count>1</comment_count>
      <attachid>287407</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-08-30 10:38:44 -0700</bug_when>
    <thetext>Created attachment 287407
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224608</commentid>
    <comment_count>2</comment_count>
      <attachid>287407</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-08-30 10:39:24 -0700</bug_when>
    <thetext>Comment on attachment 287407
Patch

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

&gt; Tools/TestWebKitAPI/Tests/WebCore/URLParser.cpp:104
&gt; +    // checkURL(&quot;http://[0:f::f:f:0:0]&quot;, {&quot;http&quot;, &quot;&quot;, &quot;&quot;, &quot;[0:f::f:f:0:0]&quot;, 0, &quot;/&quot;, &quot;&quot;, &quot;&quot;, &quot;http://[0:f::f:f:0:0]/&quot;});
&gt; +    // checkURL(&quot;http://[0:f:0:0:f::]&quot;, {&quot;http&quot;, &quot;&quot;, &quot;&quot;, &quot;[0:f:0:0:f::]&quot;, 0, &quot;/&quot;, &quot;&quot;, &quot;&quot;, &quot;http://[0:f:0:0:f::]/&quot;});
&gt; +    // checkURL(&quot;http://[::f:0:0:f:0:0]&quot;, {&quot;http&quot;, &quot;&quot;, &quot;&quot;, &quot;[::f:0:0:f:0:0]&quot;, 0, &quot;/&quot;, &quot;&quot;, &quot;&quot;, &quot;http://[::f:0:0:f:0:0]/&quot;});

These tests don&apos;t pass yet, but they should if the parser were 100% correct..

&gt; Tools/TestWebKitAPI/Tests/WebCore/URLParser.cpp:191
&gt; +    /*
&gt; +    checkURLDifferences(&quot;http://[0:0:f:0:0:f:0:0]&quot;,

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224796</commentid>
    <comment_count>3</comment_count>
      <attachid>287460</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-08-30 17:12:14 -0700</bug_when>
    <thetext>Created attachment 287460
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224864</commentid>
    <comment_count>4</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-08-30 22:18:49 -0700</bug_when>
    <thetext>I fixed the tests.  Not every branch is tested, but I plan to go over all this code with code coverage analysis before turning it on and make sure all code paths are tested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225119</commentid>
    <comment_count>5</comment_count>
      <attachid>287460</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-08-31 15:31:08 -0700</bug_when>
    <thetext>Comment on attachment 287460
Patch

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

&gt; Source/WebCore/platform/URLParser.cpp:591
&gt; +static char nibbleToHex(uint8_t nibble)

This method is weird. It doesn&apos;t specify which bits of the byte are the nibble in question.

In person you said it&apos;s always the lower bits.

This is confusing from a code clarity standpoint.

Also, we already have lowerNibbleToASCIIHexDigit.

In person you said the problem is that lowerNibbleToASCIIHexDigit returns uppercase characters whereas you need lowercase.

May I suggest u_tolower(lowerNibbleToASCIIHexDigit(...)) or convertASCIIAlphaToLower(lowerNibbleToASCIIHexDigit(...))?

Or if performance is critical, naming this lowerNibbleToLowercaseASCIIHexDigit?

&gt; Source/WebCore/platform/URLParser.cpp:601
&gt; +    uint8_t c0 = piece &gt;&gt; 12;
&gt; +    uint8_t c1 = piece &gt;&gt; 8 &amp; 0xF;
&gt; +    uint8_t c2 = piece &gt;&gt; 4 &amp; 0xF;
&gt; +    uint8_t c3 = piece &amp; 0xF;

These characters are poorly named nibbles.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225124</commentid>
    <comment_count>6</comment_count>
      <attachid>287553</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-08-31 15:43:48 -0700</bug_when>
    <thetext>Created attachment 287553
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225129</commentid>
    <comment_count>7</comment_count>
      <attachid>287553</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-08-31 16:09:18 -0700</bug_when>
    <thetext>Comment on attachment 287553
Patch

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

&gt; Source/WebCore/platform/URLParser.cpp:594
&gt; +static char lowerNibbleToLowercaseASCIIHexDigit(uint8_t nibble)
&gt; +{
&gt; +    return nibble + (nibble &lt; 10 ? &apos;0&apos; : &apos;a&apos; - 10);
&gt; +}

Please put this in ASCIICType.h, not here.

&gt; Source/WebCore/platform/URLParser.cpp:598
&gt; +    uint8_t nibbles[4] = { static_cast&lt;uint8_t&gt;(piece &gt;&gt; 12), static_cast&lt;uint8_t&gt;(piece &gt;&gt; 8 &amp; 0xF), static_cast&lt;uint8_t&gt;(piece &gt;&gt; 4 &amp; 0xF), static_cast&lt;uint8_t&gt;(piece &amp; 0xF) };

Are you sure these static_cast are needed? What happens if you omit them?

It seems overkill to use an array and too specific to specify the type uint8_t. I would write this:

    if (auto nibble0 = piece &gt;&gt; 12)
        ...
    auto nibble1 = piece &gt;&gt; 8 &amp; 0xF;
    if (printed || nibble1) {

etc.

&gt; Source/WebCore/platform/URLParser.cpp:616
&gt; +    Optional&lt;size_t&gt; compressPointer = findLongestZeroSequence(address);

I suggest auto here.

&gt; Source/WebCore/platform/URLParser.cpp:819
&gt; +        size_t swaps = piecePointer - compressPointer.value();
&gt; +        piecePointer = 7;
&gt; +        while (swaps)
&gt; +            std::swap(address[piecePointer--], address[compressPointer.value() + swaps-- - 1]);

This seems so non-obvious to me; what does it even do? Can we do this with std::reverse instead?

&gt; Tools/TestWebKitAPI/Tests/WebCore/URLParser.cpp:104
&gt; +    checkURL(&quot;http://[0:f::f:f:0:0]&quot;, {&quot;http&quot;, &quot;&quot;, &quot;&quot;, &quot;[0:f::f:f:0:0]&quot;, 0, &quot;/&quot;, &quot;&quot;, &quot;&quot;, &quot;http://[0:f::f:f:0:0]/&quot;});
&gt; +    checkURL(&quot;http://[0:f:0:0:f::]&quot;, {&quot;http&quot;, &quot;&quot;, &quot;&quot;, &quot;[0:f:0:0:f::]&quot;, 0, &quot;/&quot;, &quot;&quot;, &quot;&quot;, &quot;http://[0:f:0:0:f::]/&quot;});
&gt; +    checkURL(&quot;http://[::f:0:0:f:0:0]&quot;, {&quot;http&quot;, &quot;&quot;, &quot;&quot;, &quot;[::f:0:0:f:0:0]&quot;, 0, &quot;/&quot;, &quot;&quot;, &quot;&quot;, &quot;http://[::f:0:0:f:0:0]/&quot;});

Don’t we need more cases? Using only 0 and f seems to not cover enough of the parsing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225131</commentid>
    <comment_count>8</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-08-31 16:18:00 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; Source/WebCore/platform/URLParser.cpp:598
&gt; &gt; +    uint8_t nibbles[4] = { static_cast&lt;uint8_t&gt;(piece &gt;&gt; 12), static_cast&lt;uint8_t&gt;(piece &gt;&gt; 8 &amp; 0xF), static_cast&lt;uint8_t&gt;(piece &gt;&gt; 4 &amp; 0xF), static_cast&lt;uint8_t&gt;(piece &amp; 0xF) };
&gt; 
&gt; Are you sure these static_cast are needed? What happens if you omit them?
They are needed.  It doesn&apos;t compile successfully without them.
&gt; 
&gt; It seems overkill to use an array and too specific to specify the type
&gt; uint8_t. I would write this:
&gt; 
&gt;     if (auto nibble0 = piece &gt;&gt; 12)
&gt;         ...
&gt;     auto nibble1 = piece &gt;&gt; 8 &amp; 0xF;
&gt;     if (printed || nibble1) {
&gt; 
&gt; etc.
This would make the static_cast not necessary.
&gt; &gt; Source/WebCore/platform/URLParser.cpp:819
&gt; &gt; +        size_t swaps = piecePointer - compressPointer.value();
&gt; &gt; +        piecePointer = 7;
&gt; &gt; +        while (swaps)
&gt; &gt; +            std::swap(address[piecePointer--], address[compressPointer.value() + swaps-- - 1]);
&gt; 
&gt; This seems so non-obvious to me; what does it even do? Can we do this with
&gt; std::reverse instead?
Maybe.  This is what the spec says.  I was quite aggressive with my use of postfix decrement, though.
&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebCore/URLParser.cpp:104
&gt; &gt; +    checkURL(&quot;http://[0:f::f:f:0:0]&quot;, {&quot;http&quot;, &quot;&quot;, &quot;&quot;, &quot;[0:f::f:f:0:0]&quot;, 0, &quot;/&quot;, &quot;&quot;, &quot;&quot;, &quot;http://[0:f::f:f:0:0]/&quot;});
&gt; &gt; +    checkURL(&quot;http://[0:f:0:0:f::]&quot;, {&quot;http&quot;, &quot;&quot;, &quot;&quot;, &quot;[0:f:0:0:f::]&quot;, 0, &quot;/&quot;, &quot;&quot;, &quot;&quot;, &quot;http://[0:f:0:0:f::]/&quot;});
&gt; &gt; +    checkURL(&quot;http://[::f:0:0:f:0:0]&quot;, {&quot;http&quot;, &quot;&quot;, &quot;&quot;, &quot;[::f:0:0:f:0:0]&quot;, 0, &quot;/&quot;, &quot;&quot;, &quot;&quot;, &quot;http://[::f:0:0:f:0:0]/&quot;});
&gt; 
&gt; Don’t we need more cases? Using only 0 and f seems to not cover enough of
&gt; the parsing.
Yes we need more cases.  I am going to do much more thorough testing with code coverage in a second pass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225139</commentid>
    <comment_count>9</comment_count>
      <attachid>287559</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-08-31 16:27:14 -0700</bug_when>
    <thetext>Created attachment 287559
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225157</commentid>
    <comment_count>10</comment_count>
      <attachid>287567</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-08-31 16:44:44 -0700</bug_when>
    <thetext>Created attachment 287567
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225171</commentid>
    <comment_count>11</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-08-31 17:01:22 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; Don’t we need more cases? Using only 0 and f seems to not cover enough of
&gt; &gt; the parsing.
&gt; Yes we need more cases.  I am going to do much more thorough testing with
&gt; code coverage in a second pass.
To be clear, the tests with lots of f&apos;s are testing the location of the ::
Entire features like the ipv4 parser inside of the ipv6 parser currently have 0% test coverage, but I&apos;m trying to get the parser to a semi-usable state then polish it from there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225176</commentid>
    <comment_count>12</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-08-31 17:13:11 -0700</bug_when>
    <thetext>&gt; &gt; This seems so non-obvious to me; what does it even do? Can we do this with
&gt; &gt; std::reverse instead?
&gt; Maybe.  This is what the spec says.  I was quite aggressive with my use of
&gt; postfix decrement, though.
std::reverse isn&apos;t what this does.  std::reverse switches the order of the elements.  This just shifts the elements over without changing their order.  We could use a reverse version of std::swap_ranges, but such a thing does not exist.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225183</commentid>
    <comment_count>13</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-08-31 17:25:59 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/205273</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225777</commentid>
    <comment_count>14</comment_count>
      <attachid>287567</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-09-02 09:08:40 -0700</bug_when>
    <thetext>Comment on attachment 287567
Patch

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

&gt; Tools/TestWebKitAPI/Tests/WebCore/URLParser.cpp:56
&gt; +    return s1.utf8() == s2.utf8();

This is no different than s1 == s2; the conversion to UTF-8 has no effect on equality. Not sure why this exists.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287407</attachid>
            <date>2016-08-30 10:38:44 -0700</date>
            <delta_ts>2016-08-30 17:12:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161390-20160830103633.patch</filename>
            <type>text/plain</type>
            <size>10687</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTE3MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE2LTA4LTMwICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50
IElQdjYgcGFyc2luZyBpbiBVUkxQYXJzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2MTM5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIENvdmVyZWQgYnkgbmV3IEFQSSB0ZXN0cy4KKworICAgICAgICAq
IHBsYXRmb3JtL1VSTFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp6ZXJvU2VxdWVuY2VM
ZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZExvbmdlc3RaZXJvU2VxdWVuY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6bmliYmxlVG9IZXgpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXpl
SVB2NlBpZWNlKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6ZUlQdjYpOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VJUHY2SG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpVUkxQYXJzZXI6Omhv
c3RFbmRSZWFjaGVkKToKKwogMjAxNi0wOC0yOSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3Rl
bnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBXaW5kb3dzIGJ1aWxkIGFmdGVyIHIyMDUx
NjEKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNwcAkocmV2aXNpb24gMjA1
MTcxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTU4LDcgKzU1OCw3OSBAQCBzdGF0aWMgdm9pZCBzZXJpYWxpemVJUHY0KHVpbnQz
Ml90IGFkZHJlCiAgICAgYnVmZmVyLmFwcGVuZCgnLicpOwogICAgIGJ1ZmZlci5hcHBlbmROdW1i
ZXIoYWRkcmVzcyAmIDB4RkYpOwogfQorCitzdGF0aWMgc2l6ZV90IHplcm9TZXF1ZW5jZUxlbmd0
aChjb25zdCBzdGQ6OmFycmF5PHVpbnQxNl90LCA4PiYgYWRkcmVzcywgc2l6ZV90IGJlZ2luKQor
eworICAgIHNpemVfdCBlbmQgPSBiZWdpbjsKKyAgICBmb3IgKDsgZW5kIDwgODsgZW5kKyspIHsK
KyAgICAgICAgaWYgKGFkZHJlc3NbZW5kXSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICByZXR1cm4gZW5kIC0gYmVnaW47Cit9CisKK3N0YXRpYyBPcHRpb25hbDxzaXplX3Q+IGZpbmRM
b25nZXN0WmVyb1NlcXVlbmNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDE2X3QsIDg+JiBhZGRyZXNz
KQoreworICAgIE9wdGlvbmFsPHNpemVfdD4gbG9uZ2VzdDsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IDg7IGkrKykgeworICAgICAgICBzaXplX3QgbGVuZ3RoID0gemVyb1NlcXVlbmNlTGVu
Z3RoKGFkZHJlc3MsIGkpOworICAgICAgICBpZiAobGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAo
bGVuZ3RoID4gMSAmJiAoIWxvbmdlc3QgfHwgbG9uZ2VzdC52YWx1ZSgpIDwgbGVuZ3RoKSkKKyAg
ICAgICAgICAgICAgICBsb25nZXN0ID0gaTsKKyAgICAgICAgICAgIGkrPSBsZW5ndGg7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGxvbmdlc3Q7Cit9CisKK3N0YXRpYyBjaGFyIG5pYmJs
ZVRvSGV4KHVpbnQ4X3QgbmliYmxlKQoreworICAgIHJldHVybiBuaWJibGUgKyAobmliYmxlIDwg
MTAgPyAnMCcgOiAnYScgLSAxMCk7Cit9CiAgICAgCitzdGF0aWMgdm9pZCBzZXJpYWxpemVJUHY2
UGllY2UodWludDE2X3QgcGllY2UsIFN0cmluZ0J1aWxkZXImIGJ1ZmZlcikKK3sKKyAgICB1aW50
OF90IGMwID0gcGllY2UgPj4gMTI7CisgICAgdWludDhfdCBjMSA9IHBpZWNlID4+IDggJiAweEY7
CisgICAgdWludDhfdCBjMiA9IHBpZWNlID4+IDQgJiAweEY7CisgICAgdWludDhfdCBjMyA9IHBp
ZWNlICYgMHhGOworICAgIGJvb2wgcHJpbnRlZCA9IGZhbHNlOworICAgIGlmIChjMCkgeworICAg
ICAgICBidWZmZXIuYXBwZW5kKG5pYmJsZVRvSGV4KGMwKSk7CisgICAgICAgIHByaW50ZWQgPSB0
cnVlOworICAgIH0KKyAgICBpZiAocHJpbnRlZCB8fCBjMSkgeworICAgICAgICBidWZmZXIuYXBw
ZW5kKG5pYmJsZVRvSGV4KGMxKSk7CisgICAgICAgIHByaW50ZWQgPSB0cnVlOworICAgIH0KKyAg
ICBpZiAocHJpbnRlZCB8fCBjMikKKyAgICAgICAgYnVmZmVyLmFwcGVuZChuaWJibGVUb0hleChj
MikpOworICAgIGJ1ZmZlci5hcHBlbmQobmliYmxlVG9IZXgoYzMpKTsKK30KKworc3RhdGljIHZv
aWQgc2VyaWFsaXplSVB2NihzdGQ6OmFycmF5PHVpbnQxNl90LCA4PiBhZGRyZXNzLCBTdHJpbmdC
dWlsZGVyJiBidWZmZXIpCit7CisgICAgYnVmZmVyLmFwcGVuZCgnWycpOworICAgIE9wdGlvbmFs
PHNpemVfdD4gY29tcHJlc3NQb2ludGVyID0gZmluZExvbmdlc3RaZXJvU2VxdWVuY2UoYWRkcmVz
cyk7CisgICAgZm9yIChzaXplX3QgcGllY2UgPSAwOyBwaWVjZSA8IDg7IHBpZWNlKyspIHsKKyAg
ICAgICAgaWYgKGNvbXByZXNzUG9pbnRlciAmJiBjb21wcmVzc1BvaW50ZXIudmFsdWUoKSA9PSBw
aWVjZSkgeworICAgICAgICAgICAgQVNTRVJUKCFhZGRyZXNzW3BpZWNlXSk7CisgICAgICAgICAg
ICBpZiAocGllY2UpCisgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgnOicpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoIjo6Iik7CisgICAgICAg
ICAgICB3aGlsZSAoIWFkZHJlc3NbcGllY2VdKQorICAgICAgICAgICAgICAgIHBpZWNlKys7Cisg
ICAgICAgICAgICBpZiAocGllY2UgPT0gOCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBzZXJpYWxpemVJUHY2UGllY2UoYWRkcmVzc1twaWVjZV0sIGJ1ZmZlcik7
CisgICAgICAgIGlmIChwaWVjZSA8IDcpCisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKCc6Jyk7
CisgICAgfQorICAgIGJ1ZmZlci5hcHBlbmQoJ10nKTsKK30KKwogc3RhdGljIE9wdGlvbmFsPHVp
bnQzMl90PiBwYXJzZUlQdjROdW1iZXIoU3RyaW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0b3Im
IGl0ZXJhdG9yLCBjb25zdCBTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvciYgZW5kKQog
ewogICAgIC8vIEZJWE1FOiBDaGVjayBmb3Igb3ZlcmZsb3cuCkBAIC02NTYsMTAgKzcyOCw5NiBA
QCBzdGF0aWMgT3B0aW9uYWw8dWludDMyX3Q+IHBhcnNlSVB2NEhvc3QoCiAgICAgcmV0dXJuIGlw
djQ7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxzdGQ6OmFycmF5PHVpbnQxNl90LCA4Pj4gcGFyc2VJ
UHY2SG9zdChTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvciwgU3RyaW5nVmlldzo6Q29k
ZVBvaW50czo6SXRlcmF0b3IpCitzdGF0aWMgT3B0aW9uYWw8c3RkOjphcnJheTx1aW50MTZfdCwg
OD4+IHBhcnNlSVB2Nkhvc3QoU3RyaW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0b3IgYywgU3Ry
aW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0b3IgZW5kKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIE51bGxvcHQ7CisgICAgaWYgKGMgPT0gZW5kKQorICAgICAgICByZXR1
cm4gTnVsbG9wdDsKKworICAgIHN0ZDo6YXJyYXk8dWludDE2X3QsIDg+IGFkZHJlc3M7CisgICAg
c2l6ZV90IHBpZWNlUG9pbnRlciA9IDA7CisgICAgT3B0aW9uYWw8c2l6ZV90PiBjb21wcmVzc1Bv
aW50ZXI7CisKKyAgICBpZiAoKmMgPT0gJzonKSB7CisgICAgICAgICsrYzsKKyAgICAgICAgaWYg
KGMgPT0gZW5kKQorICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgICAgIGlmICgqYyAh
PSAnOicpCisgICAgICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICAgICAgKytjOworICAgICAg
ICArK3BpZWNlUG9pbnRlcjsKKyAgICAgICAgY29tcHJlc3NQb2ludGVyID0gcGllY2VQb2ludGVy
OworICAgIH0KKyAgICAKKyAgICB3aGlsZSAoYyAhPSBlbmQpIHsKKyAgICAgICAgaWYgKHBpZWNl
UG9pbnRlciA9PSA4KQorICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgICAgIGlmICgq
YyA9PSAnOicpIHsKKyAgICAgICAgICAgIGlmIChjb21wcmVzc1BvaW50ZXIpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgICAgICAgICArK2M7CisgICAgICAgICAgICArK3Bp
ZWNlUG9pbnRlcjsKKyAgICAgICAgICAgIGNvbXByZXNzUG9pbnRlciA9IHBpZWNlUG9pbnRlcjsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHVpbnQxNl90IHZhbHVl
ID0gMDsKKyAgICAgICAgZm9yIChzaXplX3QgbGVuZ3RoID0gMDsgbGVuZ3RoIDwgNDsgbGVuZ3Ro
KyspIHsKKyAgICAgICAgICAgIGlmIChjID09IGVuZCkKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGlmICghaXNBU0NJSUhleERpZ2l0KCpjKSkKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgKiAweDEwICsgdG9BU0NJSUhleFZhbHVl
KCpjKTsKKyAgICAgICAgICAgICsrYzsKKyAgICAgICAgfQorICAgICAgICBhZGRyZXNzW3BpZWNl
UG9pbnRlcisrXSA9IHZhbHVlOworICAgICAgICBpZiAoYyA9PSBlbmQpCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgaWYgKCpjICE9ICc6JykKKyAgICAgICAgICAgIHJldHVybiBOdWxsb3B0
OworICAgICAgICArK2M7CisgICAgfQorICAgIAorICAgIGlmIChjICE9IGVuZCkgeworICAgICAg
ICBpZiAocGllY2VQb2ludGVyID4gNikKKyAgICAgICAgICAgIHJldHVybiBOdWxsb3B0OworICAg
ICAgICBzaXplX3QgZG90c1NlZW4gPSAwOworICAgICAgICB3aGlsZSAoYyAhPSBlbmQpIHsKKyAg
ICAgICAgICAgIE9wdGlvbmFsPHVpbnQxNl90PiB2YWx1ZTsKKyAgICAgICAgICAgIGlmICghaXNB
U0NJSURpZ2l0KCpjKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICAgICAg
ICAgIHdoaWxlIChpc0FTQ0lJRGlnaXQoKmMpKSB7CisgICAgICAgICAgICAgICAgYXV0byBudW1i
ZXIgPSAqYyAtICcwJzsKKyAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAg
ICAgICAgICB2YWx1ZSA9IG51bWJlcjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICghdmFsdWUu
dmFsdWUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnZhbHVlKCkgKiAx
MCArIG51bWJlcjsKKyAgICAgICAgICAgICAgICArK2M7CisgICAgICAgICAgICAgICAgaWYgKGMg
PT0gZW5kKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICAgICAgICAg
ICAgICBpZiAodmFsdWUudmFsdWUoKSA+IDI1NSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IE51bGxvcHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZG90c1NlZW4gPCAzICYm
ICpjICE9ICcuJykKKyAgICAgICAgICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICAgICAgICAg
IGFkZHJlc3NbcGllY2VQb2ludGVyXSA9IGFkZHJlc3NbcGllY2VQb2ludGVyXSAqIDB4MTAwICsg
dmFsdWUudmFsdWVPcigwKTsKKyAgICAgICAgICAgIGlmIChkb3RzU2VlbiA9PSAxIHx8IGRvdHNT
ZWVuID09IDMpCisgICAgICAgICAgICAgICAgcGllY2VQb2ludGVyKys7CisgICAgICAgICAgICBp
ZiAoYyAhPSBlbmQpCisgICAgICAgICAgICAgICAgKytjOworICAgICAgICAgICAgaWYgKGRvdHNT
ZWVuID09IDMgJiYgYyAhPSBlbmQpCisgICAgICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7Cisg
ICAgICAgICAgICBkb3RzU2VlbisrOworICAgICAgICB9CisgICAgfQorICAgIGlmIChjb21wcmVz
c1BvaW50ZXIpIHsKKyAgICAgICAgc2l6ZV90IHN3YXBzID0gcGllY2VQb2ludGVyIC0gY29tcHJl
c3NQb2ludGVyLnZhbHVlKCk7CisgICAgICAgIHBpZWNlUG9pbnRlciA9IDc7CisgICAgICAgIHdo
aWxlIChzd2FwcykKKyAgICAgICAgICAgIHN0ZDo6c3dhcChhZGRyZXNzW3BpZWNlUG9pbnRlci0t
XSwgYWRkcmVzc1tzd2Fwcy0tXSk7CisgICAgfSBlbHNlIGlmIChwaWVjZVBvaW50ZXIgIT0gOCkK
KyAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgcmV0dXJuIGFkZHJlc3M7CiB9CiAKIHZvaWQg
VVJMUGFyc2VyOjpob3N0RW5kUmVhY2hlZCgpCkBAIC02NzEsOCArODI5LDE2IEBAIHZvaWQgVVJM
UGFyc2VyOjpob3N0RW5kUmVhY2hlZCgpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoKml0ZXJh
dG9yID09ICdbJykgewogICAgICAgICArK2l0ZXJhdG9yOwotICAgICAgICBwYXJzZUlQdjZIb3N0
KGl0ZXJhdG9yLCBlbmQpOwotICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8gaXB2NkVuZCA9
IGl0ZXJhdG9yOworICAgICAgICB3aGlsZSAoaXB2NkVuZCAhPSBlbmQgJiYgKmlwdjZFbmQgIT0g
J10nKQorICAgICAgICAgICAgKytpcHY2RW5kOworICAgICAgICBpZiAoYXV0byBhZGRyZXNzID0g
cGFyc2VJUHY2SG9zdChpdGVyYXRvciwgaXB2NkVuZCkpIHsKKyAgICAgICAgICAgIHNlcmlhbGl6
ZUlQdjYoYWRkcmVzcy52YWx1ZSgpLCBtX2J1ZmZlcik7CisgICAgICAgICAgICBtX3VybC5tX2hv
c3RFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUg
dGhlIHBvcnQgY29ycmVjdGx5LgorICAgICAgICAgICAgbV91cmwubV9wb3J0RW5kID0gbV9idWZm
ZXIubGVuZ3RoKCk7ICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
ICAgICB9CiAgICAgaWYgKGF1dG8gYWRkcmVzcyA9IHBhcnNlSVB2NEhvc3QoaXRlcmF0b3IsIGVu
ZCkpIHsKICAgICAgICAgc2VyaWFsaXplSVB2NChhZGRyZXNzLnZhbHVlKCksIG1fYnVmZmVyKTsK
SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIwNTE4MykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE0IEBACisyMDE2LTA4LTMwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IElQdjYgcGFyc2luZyBpbiBVUkxQYXJzZXIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MTM5MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL1VSTFBhcnNlci5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpURVNUX0YpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Y2hlY2tVUkxEaWZmZXJlbmNl
cyk6CisKIDIwMTYtMDgtMjkgIEFha2FzaCBKYWluICA8YWFrYXNoX2phaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIEVXUyBwYXRjaCBzdGF0dXMgcGFnZSBzaG91bGQgaW5kaWNhdGUgYm90IGNvcnJl
c3BvbmRpbmcgdG8gZWFjaCBzdGF0dXMgbWVzc2FnZQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL1VSTFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL1VSTFBhcnNlci5jcHAJKHJldmlzaW9uIDIwNTE3MSkKKysr
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9VUkxQYXJzZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MCw3ICs1MCwxMiBAQCBzdHJ1Y3QgRXhwZWN0ZWRQYXJ0cyB7CiAgICAgU3Ry
aW5nIHN0cmluZzsKIH07CiAKLXN0YXRpYyBib29sIGVxKGNvbnN0IFN0cmluZyYgczEsIGNvbnN0
IFN0cmluZyYgczIpIHsgcmV0dXJuIHMxLnV0ZjgoKSA9PSBzMi51dGY4KCk7IH0KK3N0YXRpYyBi
b29sIGVxKGNvbnN0IFN0cmluZyYgczEsIGNvbnN0IFN0cmluZyYgczIpCit7CisgICAgRVhQRUNU
X1NUUkVRKHMxLnV0ZjgoKS5kYXRhKCksIHMyLnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiBz
MS51dGY4KCkgPT0gczIudXRmOCgpOworfQorCiBzdGF0aWMgdm9pZCBjaGVja1VSTChjb25zdCBT
dHJpbmcmIHVybFN0cmluZywgY29uc3QgRXhwZWN0ZWRQYXJ0cyYgcGFydHMpCiB7CiAgICAgVVJM
UGFyc2VyIHBhcnNlcjsKQEAgLTk0LDYgKzk5LDkgQEAgVEVTVF9GKFVSTFBhcnNlclRlc3QsIFBh
cnNlKQogICAgIGNoZWNrVVJMKCJhYm91dDpibGFuayIsIHsiYWJvdXQiLCAiIiwgIiIsICIiLCAw
LCAiYmxhbmsiLCAiIiwgIiIsICJhYm91dDpibGFuayJ9KTsKICAgICBjaGVja1VSTCgiYWJvdXQ6
Ymxhbms/cXVlcnkiLCB7ImFib3V0IiwgIiIsICIiLCAiIiwgMCwgImJsYW5rIiwgInF1ZXJ5Iiwg
IiIsICJhYm91dDpibGFuaz9xdWVyeSJ9KTsKICAgICBjaGVja1VSTCgiYWJvdXQ6YmxhbmsjZnJh
Z21lbnQiLCB7ImFib3V0IiwgIiIsICIiLCAiIiwgMCwgImJsYW5rIiwgIiIsICJmcmFnbWVudCIs
ICJhYm91dDpibGFuayNmcmFnbWVudCJ9KTsKKyAgICAvLyBjaGVja1VSTCgiaHR0cDovL1swOmY6
OmY6ZjowOjBdIiwgeyJodHRwIiwgIiIsICIiLCAiWzA6Zjo6ZjpmOjA6MF0iLCAwLCAiLyIsICIi
LCAiIiwgImh0dHA6Ly9bMDpmOjpmOmY6MDowXS8ifSk7CisgICAgLy8gY2hlY2tVUkwoImh0dHA6
Ly9bMDpmOjA6MDpmOjpdIiwgeyJodHRwIiwgIiIsICIiLCAiWzA6ZjowOjA6Zjo6XSIsIDAsICIv
IiwgIiIsICIiLCAiaHR0cDovL1swOmY6MDowOmY6Ol0vIn0pOworICAgIC8vIGNoZWNrVVJMKCJo
dHRwOi8vWzo6ZjowOjA6ZjowOjBdIiwgeyJodHRwIiwgIiIsICIiLCAiWzo6ZjowOjA6ZjowOjBd
IiwgMCwgIi8iLCAiIiwgIiIsICJodHRwOi8vWzo6ZjowOjA6ZjowOjBdLyJ9KTsKIH0KIAogc3Rh
dGljIHZvaWQgY2hlY2tSZWxhdGl2ZVVSTChjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3Qg
U3RyaW5nJiBiYXNlVVJMU3RyaW5nLCBjb25zdCBFeHBlY3RlZFBhcnRzJiBwYXJ0cykKQEAgLTE3
MCw2ICsxNzgsMjAgQEAgVEVTVF9GKFVSTFBhcnNlclRlc3QsIFBhcnNlckRpZmZlcmVuY2VzKQog
ICAgIGNoZWNrVVJMRGlmZmVyZW5jZXMoImh0dHA6Ly8wMTEuMTEuMFgxMS4weDAxMSIsCiAgICAg
ICAgIHsiaHR0cCIsICIiLCAiIiwgIjkuMTEuMTcuMTciLCAwLCAiLyIsICIiLCAiIiwgImh0dHA6
Ly85LjExLjE3LjE3LyJ9LAogICAgICAgICB7Imh0dHAiLCAiIiwgIiIsICIwMTEuMTEuMHgxMS4w
eDAxMSIsIDAsICIvIiwgIiIsICIiLCAiaHR0cDovLzAxMS4xMS4weDExLjB4MDExLyJ9KTsKKyAg
ICBjaGVja1VSTERpZmZlcmVuY2VzKCJodHRwOi8vWzEyMzQ6MDA3ODo5MEFCOkNkRWY6MDEyMzow
MDA3Ojg5QUI6MDAwMF0iLAorICAgICAgICB7Imh0dHAiLCAiIiwgIiIsICJbMTIzNDo3ODo5MGFi
OmNkZWY6MTIzOjc6ODlhYjowXSIsIDAsICIvIiwgIiIsICIiLCAiaHR0cDovL1sxMjM0Ojc4Ojkw
YWI6Y2RlZjoxMjM6Nzo4OWFiOjBdLyJ9LAorICAgICAgICB7Imh0dHAiLCAiIiwgIiIsICJbMTIz
NDowMDc4OjkwYWI6Y2RlZjowMTIzOjAwMDc6ODlhYjowMDAwXSIsIDAsICIvIiwgIiIsICIiLCAi
aHR0cDovL1sxMjM0OjAwNzg6OTBhYjpjZGVmOjAxMjM6MDAwNzo4OWFiOjAwMDBdLyJ9KTsKKyAg
ICBjaGVja1VSTERpZmZlcmVuY2VzKCJodHRwOi8vWzA6ZjowOjA6ZjpmOjA6MF0iLAorICAgICAg
ICB7Imh0dHAiLCAiIiwgIiIsICJbMDpmOjpmOmY6MDowXSIsIDAsICIvIiwgIiIsICIiLCAiaHR0
cDovL1swOmY6OmY6ZjowOjBdLyJ9LAorICAgICAgICB7Imh0dHAiLCAiIiwgIiIsICJbMDpmOjA6
MDpmOmY6MDowXSIsIDAsICIvIiwgIiIsICIiLCAiaHR0cDovL1swOmY6MDowOmY6ZjowOjBdLyJ9
KTsKKyAgICBjaGVja1VSTERpZmZlcmVuY2VzKCJodHRwOi8vWzA6ZjowOjA6ZjowOjA6MF0iLAor
ICAgICAgICB7Imh0dHAiLCAiIiwgIiIsICJbMDpmOjA6MDpmOjpdIiwgMCwgIi8iLCAiIiwgIiIs
ICJodHRwOi8vWzA6ZjowOjA6Zjo6XS8ifSwKKyAgICAgICAgeyJodHRwIiwgIiIsICIiLCAiWzA6
ZjowOjA6ZjowOjA6MF0iLCAwLCAiLyIsICIiLCAiIiwgImh0dHA6Ly9bMDpmOjA6MDpmOjA6MDow
XS8ifSk7CisgICAgLyoKKyAgICBjaGVja1VSTERpZmZlcmVuY2VzKCJodHRwOi8vWzA6MDpmOjA6
MDpmOjA6MF0iLAorICAgICAgICB7Imh0dHAiLCAiIiwgIiIsICJbOjpmOjA6MDpmOjA6MF0iLCAw
LCAiLyIsICIiLCAiIiwgImh0dHA6Ly9bOjpmOjA6MDpmOjA6MF0vIn0sCisgICAgICAgIHsiaHR0
cCIsICIiLCAiIiwgIlswOmY6MDowOmY6MDowOjBdIiwgMCwgIi8iLCAiIiwgIiIsICJodHRwOi8v
WzA6ZjowOjA6ZjowOjA6MF0vIn0pOworICAgICovCiB9CiAKIHN0YXRpYyB2b2lkIHNob3VsZEZh
aWwoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287460</attachid>
            <date>2016-08-30 17:12:14 -0700</date>
            <delta_ts>2016-08-31 15:43:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161390-20160830171003.patch</filename>
            <type>text/plain</type>
            <size>10930</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTE5NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE2LTA4LTMwICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50
IElQdjYgcGFyc2luZyBpbiBVUkxQYXJzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2MTM5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIENvdmVyZWQgYnkgbmV3IEFQSSB0ZXN0cy4KKworICAgICAgICAq
IHBsYXRmb3JtL1VSTFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp6ZXJvU2VxdWVuY2VM
ZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZExvbmdlc3RaZXJvU2VxdWVuY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6bmliYmxlVG9IZXgpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXpl
SVB2NlBpZWNlKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6ZUlQdjYpOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VJUHY2SG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpVUkxQYXJzZXI6Omhv
c3RFbmRSZWFjaGVkKToKKwogMjAxNi0wOC0zMCAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFw
cGxlLmNvbT4KIAogICAgICAgICBVc2Ugb2YgdW5pbml0aWFsaXNlZCBtZW1vcnkgaW4gVHJhbnNm
b3JtYXRpb25NYXRyeDo6YmxlbmQ0KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VS
TFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFy
c2VyLmNwcAkocmV2aXNpb24gMjA1MTk0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJM
UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYxLDYgKzU2MSw4MSBAQCBzdGF0aWMgdm9p
ZCBzZXJpYWxpemVJUHY0KHVpbnQzMl90IGFkZHJlCiAgICAgYnVmZmVyLmFwcGVuZE51bWJlcihh
ZGRyZXNzICYgMHhGRik7CiB9CiAgICAgCitzdGF0aWMgc2l6ZV90IHplcm9TZXF1ZW5jZUxlbmd0
aChjb25zdCBzdGQ6OmFycmF5PHVpbnQxNl90LCA4PiYgYWRkcmVzcywgc2l6ZV90IGJlZ2luKQor
eworICAgIHNpemVfdCBlbmQgPSBiZWdpbjsKKyAgICBmb3IgKDsgZW5kIDwgODsgZW5kKyspIHsK
KyAgICAgICAgaWYgKGFkZHJlc3NbZW5kXSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICByZXR1cm4gZW5kIC0gYmVnaW47Cit9CisKK3N0YXRpYyBPcHRpb25hbDxzaXplX3Q+IGZpbmRM
b25nZXN0WmVyb1NlcXVlbmNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDE2X3QsIDg+JiBhZGRyZXNz
KQoreworICAgIE9wdGlvbmFsPHNpemVfdD4gbG9uZ2VzdDsKKyAgICBzaXplX3QgbG9uZ2VzdExl
bmd0aCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA4OyBpKyspIHsKKyAgICAgICAg
c2l6ZV90IGxlbmd0aCA9IHplcm9TZXF1ZW5jZUxlbmd0aChhZGRyZXNzLCBpKTsKKyAgICAgICAg
aWYgKGxlbmd0aCkgeworICAgICAgICAgICAgaWYgKGxlbmd0aCA+IDEgJiYgKCFsb25nZXN0IHx8
IGxvbmdlc3RMZW5ndGggPCBsZW5ndGgpKSB7CisgICAgICAgICAgICAgICAgbG9uZ2VzdCA9IGk7
CisgICAgICAgICAgICAgICAgbG9uZ2VzdExlbmd0aCA9IGxlbmd0aDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGkrPSBsZW5ndGg7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGxv
bmdlc3Q7Cit9CisKK3N0YXRpYyBjaGFyIG5pYmJsZVRvSGV4KHVpbnQ4X3QgbmliYmxlKQorewor
ICAgIHJldHVybiBuaWJibGUgKyAobmliYmxlIDwgMTAgPyAnMCcgOiAnYScgLSAxMCk7Cit9Cisg
ICAgCitzdGF0aWMgdm9pZCBzZXJpYWxpemVJUHY2UGllY2UodWludDE2X3QgcGllY2UsIFN0cmlu
Z0J1aWxkZXImIGJ1ZmZlcikKK3sKKyAgICB1aW50OF90IGMwID0gcGllY2UgPj4gMTI7CisgICAg
dWludDhfdCBjMSA9IHBpZWNlID4+IDggJiAweEY7CisgICAgdWludDhfdCBjMiA9IHBpZWNlID4+
IDQgJiAweEY7CisgICAgdWludDhfdCBjMyA9IHBpZWNlICYgMHhGOworICAgIGJvb2wgcHJpbnRl
ZCA9IGZhbHNlOworICAgIGlmIChjMCkgeworICAgICAgICBidWZmZXIuYXBwZW5kKG5pYmJsZVRv
SGV4KGMwKSk7CisgICAgICAgIHByaW50ZWQgPSB0cnVlOworICAgIH0KKyAgICBpZiAocHJpbnRl
ZCB8fCBjMSkgeworICAgICAgICBidWZmZXIuYXBwZW5kKG5pYmJsZVRvSGV4KGMxKSk7CisgICAg
ICAgIHByaW50ZWQgPSB0cnVlOworICAgIH0KKyAgICBpZiAocHJpbnRlZCB8fCBjMikKKyAgICAg
ICAgYnVmZmVyLmFwcGVuZChuaWJibGVUb0hleChjMikpOworICAgIGJ1ZmZlci5hcHBlbmQobmli
YmxlVG9IZXgoYzMpKTsKK30KKworc3RhdGljIHZvaWQgc2VyaWFsaXplSVB2NihzdGQ6OmFycmF5
PHVpbnQxNl90LCA4PiBhZGRyZXNzLCBTdHJpbmdCdWlsZGVyJiBidWZmZXIpCit7CisgICAgYnVm
ZmVyLmFwcGVuZCgnWycpOworICAgIE9wdGlvbmFsPHNpemVfdD4gY29tcHJlc3NQb2ludGVyID0g
ZmluZExvbmdlc3RaZXJvU2VxdWVuY2UoYWRkcmVzcyk7CisgICAgZm9yIChzaXplX3QgcGllY2Ug
PSAwOyBwaWVjZSA8IDg7IHBpZWNlKyspIHsKKyAgICAgICAgaWYgKGNvbXByZXNzUG9pbnRlciAm
JiBjb21wcmVzc1BvaW50ZXIudmFsdWUoKSA9PSBwaWVjZSkgeworICAgICAgICAgICAgQVNTRVJU
KCFhZGRyZXNzW3BpZWNlXSk7CisgICAgICAgICAgICBpZiAocGllY2UpCisgICAgICAgICAgICAg
ICAgYnVmZmVyLmFwcGVuZCgnOicpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGJ1ZmZlci5hcHBlbmQoIjo6Iik7CisgICAgICAgICAgICB3aGlsZSAoIWFkZHJlc3NbcGllY2Vd
KQorICAgICAgICAgICAgICAgIHBpZWNlKys7CisgICAgICAgICAgICBpZiAocGllY2UgPT0gOCkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzZXJpYWxpemVJUHY2
UGllY2UoYWRkcmVzc1twaWVjZV0sIGJ1ZmZlcik7CisgICAgICAgIGlmIChwaWVjZSA8IDcpCisg
ICAgICAgICAgICBidWZmZXIuYXBwZW5kKCc6Jyk7CisgICAgfQorICAgIGJ1ZmZlci5hcHBlbmQo
J10nKTsKK30KKwogc3RhdGljIE9wdGlvbmFsPHVpbnQzMl90PiBwYXJzZUlQdjROdW1iZXIoU3Ry
aW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0b3ImIGl0ZXJhdG9yLCBjb25zdCBTdHJpbmdWaWV3
OjpDb2RlUG9pbnRzOjpJdGVyYXRvciYgZW5kKQogewogICAgIC8vIEZJWE1FOiBDaGVjayBmb3Ig
b3ZlcmZsb3cuCkBAIC02NTgsMTAgKzczMyw5NiBAQCBzdGF0aWMgT3B0aW9uYWw8dWludDMyX3Q+
IHBhcnNlSVB2NEhvc3QoCiAgICAgcmV0dXJuIGlwdjQ7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxz
dGQ6OmFycmF5PHVpbnQxNl90LCA4Pj4gcGFyc2VJUHY2SG9zdChTdHJpbmdWaWV3OjpDb2RlUG9p
bnRzOjpJdGVyYXRvciwgU3RyaW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0b3IpCitzdGF0aWMg
T3B0aW9uYWw8c3RkOjphcnJheTx1aW50MTZfdCwgOD4+IHBhcnNlSVB2Nkhvc3QoU3RyaW5nVmll
dzo6Q29kZVBvaW50czo6SXRlcmF0b3IgYywgU3RyaW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0
b3IgZW5kKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIE51bGxvcHQ7Cisg
ICAgaWYgKGMgPT0gZW5kKQorICAgICAgICByZXR1cm4gTnVsbG9wdDsKKworICAgIHN0ZDo6YXJy
YXk8dWludDE2X3QsIDg+IGFkZHJlc3MgPSB7ezAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9fTsKKyAg
ICBzaXplX3QgcGllY2VQb2ludGVyID0gMDsKKyAgICBPcHRpb25hbDxzaXplX3Q+IGNvbXByZXNz
UG9pbnRlcjsKKworICAgIGlmICgqYyA9PSAnOicpIHsKKyAgICAgICAgKytjOworICAgICAgICBp
ZiAoYyA9PSBlbmQpCisgICAgICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICAgICAgaWYgKCpj
ICE9ICc6JykKKyAgICAgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgICAgICArK2M7CisgICAg
ICAgICsrcGllY2VQb2ludGVyOworICAgICAgICBjb21wcmVzc1BvaW50ZXIgPSBwaWVjZVBvaW50
ZXI7CisgICAgfQorICAgIAorICAgIHdoaWxlIChjICE9IGVuZCkgeworICAgICAgICBpZiAocGll
Y2VQb2ludGVyID09IDgpCisgICAgICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICAgICAgaWYg
KCpjID09ICc6JykgeworICAgICAgICAgICAgaWYgKGNvbXByZXNzUG9pbnRlcikKKyAgICAgICAg
ICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICAgICAgICAgICsrYzsKKyAgICAgICAgICAgICsr
cGllY2VQb2ludGVyOworICAgICAgICAgICAgY29tcHJlc3NQb2ludGVyID0gcGllY2VQb2ludGVy
OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgdWludDE2X3QgdmFs
dWUgPSAwOworICAgICAgICBmb3IgKHNpemVfdCBsZW5ndGggPSAwOyBsZW5ndGggPCA0OyBsZW5n
dGgrKykgeworICAgICAgICAgICAgaWYgKGMgPT0gZW5kKQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQoKmMpKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAqIDB4MTAgKyB0b0FTQ0lJSGV4VmFs
dWUoKmMpOworICAgICAgICAgICAgKytjOworICAgICAgICB9CisgICAgICAgIGFkZHJlc3NbcGll
Y2VQb2ludGVyKytdID0gdmFsdWU7CisgICAgICAgIGlmIChjID09IGVuZCkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBpZiAoKmMgIT0gJzonKQorICAgICAgICAgICAgcmV0dXJuIE51bGxv
cHQ7CisgICAgICAgICsrYzsKKyAgICB9CisgICAgCisgICAgaWYgKGMgIT0gZW5kKSB7CisgICAg
ICAgIGlmIChwaWVjZVBvaW50ZXIgPiA2KQorICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7Cisg
ICAgICAgIHNpemVfdCBkb3RzU2VlbiA9IDA7CisgICAgICAgIHdoaWxlIChjICE9IGVuZCkgewor
ICAgICAgICAgICAgT3B0aW9uYWw8dWludDE2X3Q+IHZhbHVlOworICAgICAgICAgICAgaWYgKCFp
c0FTQ0lJRGlnaXQoKmMpKQorICAgICAgICAgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgICAg
ICAgICAgd2hpbGUgKGlzQVNDSUlEaWdpdCgqYykpIHsKKyAgICAgICAgICAgICAgICBhdXRvIG51
bWJlciA9ICpjIC0gJzAnOworICAgICAgICAgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAg
ICAgICAgICAgIHZhbHVlID0gbnVtYmVyOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCF2YWx1
ZS52YWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudmFsdWUoKSAq
IDEwICsgbnVtYmVyOworICAgICAgICAgICAgICAgICsrYzsKKyAgICAgICAgICAgICAgICBpZiAo
YyA9PSBlbmQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgICAgICAg
ICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpID4gMjU1KQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gTnVsbG9wdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkb3RzU2VlbiA8IDMg
JiYgKmMgIT0gJy4nKQorICAgICAgICAgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgICAgICAg
ICAgYWRkcmVzc1twaWVjZVBvaW50ZXJdID0gYWRkcmVzc1twaWVjZVBvaW50ZXJdICogMHgxMDAg
KyB2YWx1ZS52YWx1ZU9yKDApOworICAgICAgICAgICAgaWYgKGRvdHNTZWVuID09IDEgfHwgZG90
c1NlZW4gPT0gMykKKyAgICAgICAgICAgICAgICBwaWVjZVBvaW50ZXIrKzsKKyAgICAgICAgICAg
IGlmIChjICE9IGVuZCkKKyAgICAgICAgICAgICAgICArK2M7CisgICAgICAgICAgICBpZiAoZG90
c1NlZW4gPT0gMyAmJiBjICE9IGVuZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTnVsbG9wdDsK
KyAgICAgICAgICAgIGRvdHNTZWVuKys7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGNvbXBy
ZXNzUG9pbnRlcikgeworICAgICAgICBzaXplX3Qgc3dhcHMgPSBwaWVjZVBvaW50ZXIgLSBjb21w
cmVzc1BvaW50ZXIudmFsdWUoKTsKKyAgICAgICAgcGllY2VQb2ludGVyID0gNzsKKyAgICAgICAg
d2hpbGUgKHN3YXBzKQorICAgICAgICAgICAgc3RkOjpzd2FwKGFkZHJlc3NbcGllY2VQb2ludGVy
LS1dLCBhZGRyZXNzW2NvbXByZXNzUG9pbnRlci52YWx1ZSgpICsgc3dhcHMtLSAtIDFdKTsKKyAg
ICB9IGVsc2UgaWYgKHBpZWNlUG9pbnRlciAhPSA4KQorICAgICAgICByZXR1cm4gTnVsbG9wdDsK
KyAgICByZXR1cm4gYWRkcmVzczsKIH0KIAogdm9pZCBVUkxQYXJzZXI6Omhvc3RFbmRSZWFjaGVk
KCkKQEAgLTY3Myw4ICs4MzQsMTYgQEAgdm9pZCBVUkxQYXJzZXI6Omhvc3RFbmRSZWFjaGVkKCkK
ICAgICAgICAgcmV0dXJuOwogICAgIGlmICgqaXRlcmF0b3IgPT0gJ1snKSB7CiAgICAgICAgICsr
aXRlcmF0b3I7Ci0gICAgICAgIHBhcnNlSVB2Nkhvc3QoaXRlcmF0b3IsIGVuZCk7Ci0gICAgICAg
IHJldHVybjsKKyAgICAgICAgYXV0byBpcHY2RW5kID0gaXRlcmF0b3I7CisgICAgICAgIHdoaWxl
IChpcHY2RW5kICE9IGVuZCAmJiAqaXB2NkVuZCAhPSAnXScpCisgICAgICAgICAgICArK2lwdjZF
bmQ7CisgICAgICAgIGlmIChhdXRvIGFkZHJlc3MgPSBwYXJzZUlQdjZIb3N0KGl0ZXJhdG9yLCBp
cHY2RW5kKSkgeworICAgICAgICAgICAgc2VyaWFsaXplSVB2NihhZGRyZXNzLnZhbHVlKCksIG1f
YnVmZmVyKTsKKyAgICAgICAgICAgIG1fdXJsLm1faG9zdEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgp
OworICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGUgcG9ydCBjb3JyZWN0bHkuCisgICAg
ICAgICAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsgICAgICAgICAgICAK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KICAgICBpZiAoYXV0byBhZGRy
ZXNzID0gcGFyc2VJUHY0SG9zdChpdGVyYXRvciwgZW5kKSkgewogICAgICAgICBzZXJpYWxpemVJ
UHY0KGFkZHJlc3MudmFsdWUoKSwgbV9idWZmZXIpOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjA1MTk0KQorKysgVG9vbHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTYtMDgtMzAgIEFs
ZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBJbXBs
ZW1lbnQgSVB2NiBwYXJzaW5nIGluIFVSTFBhcnNlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxMzkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVVJM
UGFyc2VyLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpjaGVja1VSTERpZmZlcmVuY2VzKToKKwogMjAxNi0wOC0zMCAgQWxleCBD
aHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFVSTFBhcnNl
ciBzaG91bGQgaGFuZGxlIHJlbGF0aXZlIFVSTHMgdGhhdCBzdGFydCB3aXRoIC8vCkluZGV4OiBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVVJMUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVVJMUGFyc2VyLmNwcAkocmV2
aXNpb24gMjA1MTk0KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1VSTFBh
cnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDEyIEBAIHN0cnVjdCBFeHBlY3Rl
ZFBhcnRzIHsKICAgICBTdHJpbmcgc3RyaW5nOwogfTsKIAotc3RhdGljIGJvb2wgZXEoY29uc3Qg
U3RyaW5nJiBzMSwgY29uc3QgU3RyaW5nJiBzMikgeyByZXR1cm4gczEudXRmOCgpID09IHMyLnV0
ZjgoKTsgfQorc3RhdGljIGJvb2wgZXEoY29uc3QgU3RyaW5nJiBzMSwgY29uc3QgU3RyaW5nJiBz
MikKK3sKKyAgICBFWFBFQ1RfU1RSRVEoczEudXRmOCgpLmRhdGEoKSwgczIudXRmOCgpLmRhdGEo
KSk7CisgICAgcmV0dXJuIHMxLnV0ZjgoKSA9PSBzMi51dGY4KCk7Cit9CisKIHN0YXRpYyB2b2lk
IGNoZWNrVVJMKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBFeHBlY3RlZFBhcnRzJiBw
YXJ0cykKIHsKICAgICBVUkxQYXJzZXIgcGFyc2VyOwpAQCAtOTQsNiArOTksOSBAQCBURVNUX0Yo
VVJMUGFyc2VyVGVzdCwgUGFyc2UpCiAgICAgY2hlY2tVUkwoImFib3V0OmJsYW5rIiwgeyJhYm91
dCIsICIiLCAiIiwgIiIsIDAsICJibGFuayIsICIiLCAiIiwgImFib3V0OmJsYW5rIn0pOwogICAg
IGNoZWNrVVJMKCJhYm91dDpibGFuaz9xdWVyeSIsIHsiYWJvdXQiLCAiIiwgIiIsICIiLCAwLCAi
YmxhbmsiLCAicXVlcnkiLCAiIiwgImFib3V0OmJsYW5rP3F1ZXJ5In0pOwogICAgIGNoZWNrVVJM
KCJhYm91dDpibGFuayNmcmFnbWVudCIsIHsiYWJvdXQiLCAiIiwgIiIsICIiLCAwLCAiYmxhbmsi
LCAiIiwgImZyYWdtZW50IiwgImFib3V0OmJsYW5rI2ZyYWdtZW50In0pOworICAgIGNoZWNrVVJM
KCJodHRwOi8vWzA6Zjo6ZjpmOjA6MF0iLCB7Imh0dHAiLCAiIiwgIiIsICJbMDpmOjpmOmY6MDow
XSIsIDAsICIvIiwgIiIsICIiLCAiaHR0cDovL1swOmY6OmY6ZjowOjBdLyJ9KTsKKyAgICBjaGVj
a1VSTCgiaHR0cDovL1swOmY6MDowOmY6Ol0iLCB7Imh0dHAiLCAiIiwgIiIsICJbMDpmOjA6MDpm
OjpdIiwgMCwgIi8iLCAiIiwgIiIsICJodHRwOi8vWzA6ZjowOjA6Zjo6XS8ifSk7CisgICAgY2hl
Y2tVUkwoImh0dHA6Ly9bOjpmOjA6MDpmOjA6MF0iLCB7Imh0dHAiLCAiIiwgIiIsICJbOjpmOjA6
MDpmOjA6MF0iLCAwLCAiLyIsICIiLCAiIiwgImh0dHA6Ly9bOjpmOjA6MDpmOjA6MF0vIn0pOwog
fQogCiBzdGF0aWMgdm9pZCBjaGVja1JlbGF0aXZlVVJMKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5n
LCBjb25zdCBTdHJpbmcmIGJhc2VVUkxTdHJpbmcsIGNvbnN0IEV4cGVjdGVkUGFydHMmIHBhcnRz
KQpAQCAtMjAyLDYgKzIxMCwxOCBAQCBURVNUX0YoVVJMUGFyc2VyVGVzdCwgUGFyc2VyRGlmZmVy
ZW5jZXMpCiAgICAgY2hlY2tVUkxEaWZmZXJlbmNlcygiaHR0cDovLzAxMS4xMS4wWDExLjB4MDEx
IiwKICAgICAgICAgeyJodHRwIiwgIiIsICIiLCAiOS4xMS4xNy4xNyIsIDAsICIvIiwgIiIsICIi
LCAiaHR0cDovLzkuMTEuMTcuMTcvIn0sCiAgICAgICAgIHsiaHR0cCIsICIiLCAiIiwgIjAxMS4x
MS4weDExLjB4MDExIiwgMCwgIi8iLCAiIiwgIiIsICJodHRwOi8vMDExLjExLjB4MTEuMHgwMTEv
In0pOworICAgIGNoZWNrVVJMRGlmZmVyZW5jZXMoImh0dHA6Ly9bMTIzNDowMDc4OjkwQUI6Q2RF
ZjowMTIzOjAwMDc6ODlBQjowMDAwXSIsCisgICAgICAgIHsiaHR0cCIsICIiLCAiIiwgIlsxMjM0
Ojc4OjkwYWI6Y2RlZjoxMjM6Nzo4OWFiOjBdIiwgMCwgIi8iLCAiIiwgIiIsICJodHRwOi8vWzEy
MzQ6Nzg6OTBhYjpjZGVmOjEyMzo3Ojg5YWI6MF0vIn0sCisgICAgICAgIHsiaHR0cCIsICIiLCAi
IiwgIlsxMjM0OjAwNzg6OTBhYjpjZGVmOjAxMjM6MDAwNzo4OWFiOjAwMDBdIiwgMCwgIi8iLCAi
IiwgIiIsICJodHRwOi8vWzEyMzQ6MDA3ODo5MGFiOmNkZWY6MDEyMzowMDA3Ojg5YWI6MDAwMF0v
In0pOworICAgIGNoZWNrVVJMRGlmZmVyZW5jZXMoImh0dHA6Ly9bMDpmOjA6MDpmOmY6MDowXSIs
CisgICAgICAgIHsiaHR0cCIsICIiLCAiIiwgIlswOmY6OmY6ZjowOjBdIiwgMCwgIi8iLCAiIiwg
IiIsICJodHRwOi8vWzA6Zjo6ZjpmOjA6MF0vIn0sCisgICAgICAgIHsiaHR0cCIsICIiLCAiIiwg
IlswOmY6MDowOmY6ZjowOjBdIiwgMCwgIi8iLCAiIiwgIiIsICJodHRwOi8vWzA6ZjowOjA6Zjpm
OjA6MF0vIn0pOworICAgIGNoZWNrVVJMRGlmZmVyZW5jZXMoImh0dHA6Ly9bMDpmOjA6MDpmOjA6
MDowXSIsCisgICAgICAgIHsiaHR0cCIsICIiLCAiIiwgIlswOmY6MDowOmY6Ol0iLCAwLCAiLyIs
ICIiLCAiIiwgImh0dHA6Ly9bMDpmOjA6MDpmOjpdLyJ9LAorICAgICAgICB7Imh0dHAiLCAiIiwg
IiIsICJbMDpmOjA6MDpmOjA6MDowXSIsIDAsICIvIiwgIiIsICIiLCAiaHR0cDovL1swOmY6MDow
OmY6MDowOjBdLyJ9KTsKKyAgICBjaGVja1VSTERpZmZlcmVuY2VzKCJodHRwOi8vWzA6MDpmOjA6
MDpmOjA6MF0iLAorICAgICAgICB7Imh0dHAiLCAiIiwgIiIsICJbOjpmOjA6MDpmOjA6MF0iLCAw
LCAiLyIsICIiLCAiIiwgImh0dHA6Ly9bOjpmOjA6MDpmOjA6MF0vIn0sCisgICAgICAgIHsiaHR0
cCIsICIiLCAiIiwgIlswOjA6ZjowOjA6ZjowOjBdIiwgMCwgIi8iLCAiIiwgIiIsICJodHRwOi8v
WzA6MDpmOjA6MDpmOjA6MF0vIn0pOwogCiAgICAgLy8gRklYTUU6IFRoaXMgYmVoYXZpb3Igb3Vn
aHQgdG8gYmUgc3BlY2lmaWVkIGluIHRoZSBzdGFuZGFyZC4KICAgICAvLyBXaXRoIHRoZSBleGlz
dGluZyBVUkw6OnBhcnNlLCBXZWJLaXQgcmV0dXJucyAiaHR0cHM6LyIsIEZpcmVmb3ggcmV0dXJu
cyAiaHR0cHM6Ly8vIiwgYW5kIENocm9tZSB0aHJvd3MgYW4gZXJyb3IuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287553</attachid>
            <date>2016-08-31 15:43:48 -0700</date>
            <delta_ts>2016-08-31 16:27:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161390-20160831154136.patch</filename>
            <type>text/plain</type>
            <size>11115</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTE5NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE2LTA4LTMxICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50
IElQdjYgcGFyc2luZyBpbiBVUkxQYXJzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2MTM5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIENvdmVyZWQgYnkgbmV3IEFQSSB0ZXN0cy4KKworICAgICAgICAq
IHBsYXRmb3JtL1VSTFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp6ZXJvU2VxdWVuY2VM
ZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZExvbmdlc3RaZXJvU2VxdWVuY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6bmliYmxlVG9IZXgpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXpl
SVB2NlBpZWNlKToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6ZUlQdjYpOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VJUHY2SG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpVUkxQYXJzZXI6Omhv
c3RFbmRSZWFjaGVkKToKKwogMjAxNi0wOC0zMCAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFw
cGxlLmNvbT4KIAogICAgICAgICBVc2Ugb2YgdW5pbml0aWFsaXNlZCBtZW1vcnkgaW4gVHJhbnNm
b3JtYXRpb25NYXRyeDo6YmxlbmQ0KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VS
TFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFy
c2VyLmNwcAkocmV2aXNpb24gMjA1MTk0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJM
UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYxLDYgKzU2MSw3OCBAQCBzdGF0aWMgdm9p
ZCBzZXJpYWxpemVJUHY0KHVpbnQzMl90IGFkZHJlCiAgICAgYnVmZmVyLmFwcGVuZE51bWJlcihh
ZGRyZXNzICYgMHhGRik7CiB9CiAgICAgCitzdGF0aWMgc2l6ZV90IHplcm9TZXF1ZW5jZUxlbmd0
aChjb25zdCBzdGQ6OmFycmF5PHVpbnQxNl90LCA4PiYgYWRkcmVzcywgc2l6ZV90IGJlZ2luKQor
eworICAgIHNpemVfdCBlbmQgPSBiZWdpbjsKKyAgICBmb3IgKDsgZW5kIDwgODsgZW5kKyspIHsK
KyAgICAgICAgaWYgKGFkZHJlc3NbZW5kXSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICByZXR1cm4gZW5kIC0gYmVnaW47Cit9CisKK3N0YXRpYyBPcHRpb25hbDxzaXplX3Q+IGZpbmRM
b25nZXN0WmVyb1NlcXVlbmNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDE2X3QsIDg+JiBhZGRyZXNz
KQoreworICAgIE9wdGlvbmFsPHNpemVfdD4gbG9uZ2VzdDsKKyAgICBzaXplX3QgbG9uZ2VzdExl
bmd0aCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA4OyBpKyspIHsKKyAgICAgICAg
c2l6ZV90IGxlbmd0aCA9IHplcm9TZXF1ZW5jZUxlbmd0aChhZGRyZXNzLCBpKTsKKyAgICAgICAg
aWYgKGxlbmd0aCkgeworICAgICAgICAgICAgaWYgKGxlbmd0aCA+IDEgJiYgKCFsb25nZXN0IHx8
IGxvbmdlc3RMZW5ndGggPCBsZW5ndGgpKSB7CisgICAgICAgICAgICAgICAgbG9uZ2VzdCA9IGk7
CisgICAgICAgICAgICAgICAgbG9uZ2VzdExlbmd0aCA9IGxlbmd0aDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGkgKz0gbGVuZ3RoOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBs
b25nZXN0OworfQorCitzdGF0aWMgY2hhciBsb3dlck5pYmJsZVRvTG93ZXJjYXNlQVNDSUlIZXhE
aWdpdCh1aW50OF90IG5pYmJsZSkKK3sKKyAgICByZXR1cm4gbmliYmxlICsgKG5pYmJsZSA8IDEw
ID8gJzAnIDogJ2EnIC0gMTApOworfQorICAgIAorc3RhdGljIHZvaWQgc2VyaWFsaXplSVB2NlBp
ZWNlKHVpbnQxNl90IHBpZWNlLCBTdHJpbmdCdWlsZGVyJiBidWZmZXIpCit7CisgICAgdWludDhf
dCBuaWJibGVzWzRdID0geyBzdGF0aWNfY2FzdDx1aW50OF90PihwaWVjZSA+PiAxMiksIHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KHBpZWNlID4+IDggJiAweEYpLCBzdGF0aWNfY2FzdDx1aW50OF90Pihw
aWVjZSA+PiA0ICYgMHhGKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4ocGllY2UgJiAweEYpIH07Cisg
ICAgYm9vbCBwcmludGVkID0gZmFsc2U7CisgICAgaWYgKG5pYmJsZXNbMF0pIHsKKyAgICAgICAg
YnVmZmVyLmFwcGVuZChsb3dlck5pYmJsZVRvTG93ZXJjYXNlQVNDSUlIZXhEaWdpdChuaWJibGVz
WzBdKSk7CisgICAgICAgIHByaW50ZWQgPSB0cnVlOworICAgIH0KKyAgICBpZiAocHJpbnRlZCB8
fCBuaWJibGVzWzFdKSB7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQobG93ZXJOaWJibGVUb0xvd2Vy
Y2FzZUFTQ0lJSGV4RGlnaXQobmliYmxlc1sxXSkpOworICAgICAgICBwcmludGVkID0gdHJ1ZTsK
KyAgICB9CisgICAgaWYgKHByaW50ZWQgfHwgbmliYmxlc1syXSkKKyAgICAgICAgYnVmZmVyLmFw
cGVuZChsb3dlck5pYmJsZVRvTG93ZXJjYXNlQVNDSUlIZXhEaWdpdChuaWJibGVzWzJdKSk7Cisg
ICAgYnVmZmVyLmFwcGVuZChsb3dlck5pYmJsZVRvTG93ZXJjYXNlQVNDSUlIZXhEaWdpdChuaWJi
bGVzWzNdKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNlcmlhbGl6ZUlQdjYoc3RkOjphcnJheTx1aW50
MTZfdCwgOD4gYWRkcmVzcywgU3RyaW5nQnVpbGRlciYgYnVmZmVyKQoreworICAgIGJ1ZmZlci5h
cHBlbmQoJ1snKTsKKyAgICBPcHRpb25hbDxzaXplX3Q+IGNvbXByZXNzUG9pbnRlciA9IGZpbmRM
b25nZXN0WmVyb1NlcXVlbmNlKGFkZHJlc3MpOworICAgIGZvciAoc2l6ZV90IHBpZWNlID0gMDsg
cGllY2UgPCA4OyBwaWVjZSsrKSB7CisgICAgICAgIGlmIChjb21wcmVzc1BvaW50ZXIgJiYgY29t
cHJlc3NQb2ludGVyLnZhbHVlKCkgPT0gcGllY2UpIHsKKyAgICAgICAgICAgIEFTU0VSVCghYWRk
cmVzc1twaWVjZV0pOworICAgICAgICAgICAgaWYgKHBpZWNlKQorICAgICAgICAgICAgICAgIGJ1
ZmZlci5hcHBlbmQoJzonKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBidWZm
ZXIuYXBwZW5kKCI6OiIpOworICAgICAgICAgICAgd2hpbGUgKCFhZGRyZXNzW3BpZWNlXSkKKyAg
ICAgICAgICAgICAgICBwaWVjZSsrOworICAgICAgICAgICAgaWYgKHBpZWNlID09IDgpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2VyaWFsaXplSVB2NlBpZWNl
KGFkZHJlc3NbcGllY2VdLCBidWZmZXIpOworICAgICAgICBpZiAocGllY2UgPCA3KQorICAgICAg
ICAgICAgYnVmZmVyLmFwcGVuZCgnOicpOworICAgIH0KKyAgICBidWZmZXIuYXBwZW5kKCddJyk7
Cit9CisKIHN0YXRpYyBPcHRpb25hbDx1aW50MzJfdD4gcGFyc2VJUHY0TnVtYmVyKFN0cmluZ1Zp
ZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yJiBpdGVyYXRvciwgY29uc3QgU3RyaW5nVmlldzo6Q29k
ZVBvaW50czo6SXRlcmF0b3ImIGVuZCkKIHsKICAgICAvLyBGSVhNRTogQ2hlY2sgZm9yIG92ZXJm
bG93LgpAQCAtNjU4LDEwICs3MzAsOTYgQEAgc3RhdGljIE9wdGlvbmFsPHVpbnQzMl90PiBwYXJz
ZUlQdjRIb3N0KAogICAgIHJldHVybiBpcHY0OwogfQogCi1zdGF0aWMgT3B0aW9uYWw8c3RkOjph
cnJheTx1aW50MTZfdCwgOD4+IHBhcnNlSVB2Nkhvc3QoU3RyaW5nVmlldzo6Q29kZVBvaW50czo6
SXRlcmF0b3IsIFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yKQorc3RhdGljIE9wdGlv
bmFsPHN0ZDo6YXJyYXk8dWludDE2X3QsIDg+PiBwYXJzZUlQdjZIb3N0KFN0cmluZ1ZpZXc6OkNv
ZGVQb2ludHM6Okl0ZXJhdG9yIGMsIFN0cmluZ1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yIGVu
ZCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBOdWxsb3B0OworICAgIGlm
IChjID09IGVuZCkKKyAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisKKyAgICBzdGQ6OmFycmF5PHVp
bnQxNl90LCA4PiBhZGRyZXNzID0ge3swLCAwLCAwLCAwLCAwLCAwLCAwLCAwfX07CisgICAgc2l6
ZV90IHBpZWNlUG9pbnRlciA9IDA7CisgICAgT3B0aW9uYWw8c2l6ZV90PiBjb21wcmVzc1BvaW50
ZXI7CisKKyAgICBpZiAoKmMgPT0gJzonKSB7CisgICAgICAgICsrYzsKKyAgICAgICAgaWYgKGMg
PT0gZW5kKQorICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgICAgIGlmICgqYyAhPSAn
OicpCisgICAgICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICAgICAgKytjOworICAgICAgICAr
K3BpZWNlUG9pbnRlcjsKKyAgICAgICAgY29tcHJlc3NQb2ludGVyID0gcGllY2VQb2ludGVyOwor
ICAgIH0KKyAgICAKKyAgICB3aGlsZSAoYyAhPSBlbmQpIHsKKyAgICAgICAgaWYgKHBpZWNlUG9p
bnRlciA9PSA4KQorICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgICAgIGlmICgqYyA9
PSAnOicpIHsKKyAgICAgICAgICAgIGlmIChjb21wcmVzc1BvaW50ZXIpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIE51bGxvcHQ7CisgICAgICAgICAgICArK2M7CisgICAgICAgICAgICArK3BpZWNl
UG9pbnRlcjsKKyAgICAgICAgICAgIGNvbXByZXNzUG9pbnRlciA9IHBpZWNlUG9pbnRlcjsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHVpbnQxNl90IHZhbHVlID0g
MDsKKyAgICAgICAgZm9yIChzaXplX3QgbGVuZ3RoID0gMDsgbGVuZ3RoIDwgNDsgbGVuZ3RoKysp
IHsKKyAgICAgICAgICAgIGlmIChjID09IGVuZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGlmICghaXNBU0NJSUhleERpZ2l0KCpjKSkKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgKiAweDEwICsgdG9BU0NJSUhleFZhbHVlKCpj
KTsKKyAgICAgICAgICAgICsrYzsKKyAgICAgICAgfQorICAgICAgICBhZGRyZXNzW3BpZWNlUG9p
bnRlcisrXSA9IHZhbHVlOworICAgICAgICBpZiAoYyA9PSBlbmQpCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgaWYgKCpjICE9ICc6JykKKyAgICAgICAgICAgIHJldHVybiBOdWxsb3B0Owor
ICAgICAgICArK2M7CisgICAgfQorICAgIAorICAgIGlmIChjICE9IGVuZCkgeworICAgICAgICBp
ZiAocGllY2VQb2ludGVyID4gNikKKyAgICAgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgICAg
ICBzaXplX3QgZG90c1NlZW4gPSAwOworICAgICAgICB3aGlsZSAoYyAhPSBlbmQpIHsKKyAgICAg
ICAgICAgIE9wdGlvbmFsPHVpbnQxNl90PiB2YWx1ZTsKKyAgICAgICAgICAgIGlmICghaXNBU0NJ
SURpZ2l0KCpjKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICAgICAgICAg
IHdoaWxlIChpc0FTQ0lJRGlnaXQoKmMpKSB7CisgICAgICAgICAgICAgICAgYXV0byBudW1iZXIg
PSAqYyAtICcwJzsKKyAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgICAg
ICAgICB2YWx1ZSA9IG51bWJlcjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICghdmFsdWUudmFs
dWUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnZhbHVlKCkgKiAxMCAr
IG51bWJlcjsKKyAgICAgICAgICAgICAgICArK2M7CisgICAgICAgICAgICAgICAgaWYgKGMgPT0g
ZW5kKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICAgICAgICAgICAg
ICBpZiAodmFsdWUudmFsdWUoKSA+IDI1NSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE51
bGxvcHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZG90c1NlZW4gPCAzICYmICpj
ICE9ICcuJykKKyAgICAgICAgICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICAgICAgICAgIGFk
ZHJlc3NbcGllY2VQb2ludGVyXSA9IGFkZHJlc3NbcGllY2VQb2ludGVyXSAqIDB4MTAwICsgdmFs
dWUudmFsdWVPcigwKTsKKyAgICAgICAgICAgIGlmIChkb3RzU2VlbiA9PSAxIHx8IGRvdHNTZWVu
ID09IDMpCisgICAgICAgICAgICAgICAgcGllY2VQb2ludGVyKys7CisgICAgICAgICAgICBpZiAo
YyAhPSBlbmQpCisgICAgICAgICAgICAgICAgKytjOworICAgICAgICAgICAgaWYgKGRvdHNTZWVu
ID09IDMgJiYgYyAhPSBlbmQpCisgICAgICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAg
ICAgICAgICBkb3RzU2VlbisrOworICAgICAgICB9CisgICAgfQorICAgIGlmIChjb21wcmVzc1Bv
aW50ZXIpIHsKKyAgICAgICAgc2l6ZV90IHN3YXBzID0gcGllY2VQb2ludGVyIC0gY29tcHJlc3NQ
b2ludGVyLnZhbHVlKCk7CisgICAgICAgIHBpZWNlUG9pbnRlciA9IDc7CisgICAgICAgIHdoaWxl
IChzd2FwcykKKyAgICAgICAgICAgIHN0ZDo6c3dhcChhZGRyZXNzW3BpZWNlUG9pbnRlci0tXSwg
YWRkcmVzc1tjb21wcmVzc1BvaW50ZXIudmFsdWUoKSArIHN3YXBzLS0gLSAxXSk7CisgICAgfSBl
bHNlIGlmIChwaWVjZVBvaW50ZXIgIT0gOCkKKyAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAg
cmV0dXJuIGFkZHJlc3M7CiB9CiAKIHZvaWQgVVJMUGFyc2VyOjpob3N0RW5kUmVhY2hlZCgpCkBA
IC02NzMsOCArODMxLDE2IEBAIHZvaWQgVVJMUGFyc2VyOjpob3N0RW5kUmVhY2hlZCgpCiAgICAg
ICAgIHJldHVybjsKICAgICBpZiAoKml0ZXJhdG9yID09ICdbJykgewogICAgICAgICArK2l0ZXJh
dG9yOwotICAgICAgICBwYXJzZUlQdjZIb3N0KGl0ZXJhdG9yLCBlbmQpOwotICAgICAgICByZXR1
cm47CisgICAgICAgIGF1dG8gaXB2NkVuZCA9IGl0ZXJhdG9yOworICAgICAgICB3aGlsZSAoaXB2
NkVuZCAhPSBlbmQgJiYgKmlwdjZFbmQgIT0gJ10nKQorICAgICAgICAgICAgKytpcHY2RW5kOwor
ICAgICAgICBpZiAoYXV0byBhZGRyZXNzID0gcGFyc2VJUHY2SG9zdChpdGVyYXRvciwgaXB2NkVu
ZCkpIHsKKyAgICAgICAgICAgIHNlcmlhbGl6ZUlQdjYoYWRkcmVzcy52YWx1ZSgpLCBtX2J1ZmZl
cik7CisgICAgICAgICAgICBtX3VybC5tX2hvc3RFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhlIHBvcnQgY29ycmVjdGx5LgorICAgICAgICAg
ICAgbV91cmwubV9wb3J0RW5kID0gbV9idWZmZXIubGVuZ3RoKCk7ICAgICAgICAgICAgCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGF1dG8gYWRkcmVzcyA9
IHBhcnNlSVB2NEhvc3QoaXRlcmF0b3IsIGVuZCkpIHsKICAgICAgICAgc2VyaWFsaXplSVB2NChh
ZGRyZXNzLnZhbHVlKCksIG1fYnVmZmVyKTsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTI1NikKKysrIFRvb2xzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE2LTA4LTMxICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50
IElQdjYgcGFyc2luZyBpbiBVUkxQYXJzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2MTM5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1VSTFBhcnNl
ci5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUX0YpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6Y2hlY2tVUkxEaWZmZXJlbmNlcyk6CisKIDIwMTYtMDgtMzEgIEJyYWR5IEVpZHNv
biAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFdLMiBHYW1lcGFkIHByb3ZpZGVyIG9u
IGlPUy4KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9VUkxQYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9VUkxQ
YXJzZXIuY3BwCShyZXZpc2lvbiAyMDUxOTQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvVVJMUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsMTIgQEAg
c3RydWN0IEV4cGVjdGVkUGFydHMgewogICAgIFN0cmluZyBzdHJpbmc7CiB9OwogCi1zdGF0aWMg
Ym9vbCBlcShjb25zdCBTdHJpbmcmIHMxLCBjb25zdCBTdHJpbmcmIHMyKSB7IHJldHVybiBzMS51
dGY4KCkgPT0gczIudXRmOCgpOyB9CitzdGF0aWMgYm9vbCBlcShjb25zdCBTdHJpbmcmIHMxLCBj
b25zdCBTdHJpbmcmIHMyKQoreworICAgIEVYUEVDVF9TVFJFUShzMS51dGY4KCkuZGF0YSgpLCBz
Mi51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gczEudXRmOCgpID09IHMyLnV0ZjgoKTsKK30K
Kwogc3RhdGljIHZvaWQgY2hlY2tVUkwoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGNvbnN0IEV4
cGVjdGVkUGFydHMmIHBhcnRzKQogewogICAgIFVSTFBhcnNlciBwYXJzZXI7CkBAIC05NCw2ICs5
OSw5IEBAIFRFU1RfRihVUkxQYXJzZXJUZXN0LCBQYXJzZSkKICAgICBjaGVja1VSTCgiYWJvdXQ6
YmxhbmsiLCB7ImFib3V0IiwgIiIsICIiLCAiIiwgMCwgImJsYW5rIiwgIiIsICIiLCAiYWJvdXQ6
YmxhbmsifSk7CiAgICAgY2hlY2tVUkwoImFib3V0OmJsYW5rP3F1ZXJ5IiwgeyJhYm91dCIsICIi
LCAiIiwgIiIsIDAsICJibGFuayIsICJxdWVyeSIsICIiLCAiYWJvdXQ6Ymxhbms/cXVlcnkifSk7
CiAgICAgY2hlY2tVUkwoImFib3V0OmJsYW5rI2ZyYWdtZW50IiwgeyJhYm91dCIsICIiLCAiIiwg
IiIsIDAsICJibGFuayIsICIiLCAiZnJhZ21lbnQiLCAiYWJvdXQ6YmxhbmsjZnJhZ21lbnQifSk7
CisgICAgY2hlY2tVUkwoImh0dHA6Ly9bMDpmOjpmOmY6MDowXSIsIHsiaHR0cCIsICIiLCAiIiwg
IlswOmY6OmY6ZjowOjBdIiwgMCwgIi8iLCAiIiwgIiIsICJodHRwOi8vWzA6Zjo6ZjpmOjA6MF0v
In0pOworICAgIGNoZWNrVVJMKCJodHRwOi8vWzA6ZjowOjA6Zjo6XSIsIHsiaHR0cCIsICIiLCAi
IiwgIlswOmY6MDowOmY6Ol0iLCAwLCAiLyIsICIiLCAiIiwgImh0dHA6Ly9bMDpmOjA6MDpmOjpd
LyJ9KTsKKyAgICBjaGVja1VSTCgiaHR0cDovL1s6OmY6MDowOmY6MDowXSIsIHsiaHR0cCIsICIi
LCAiIiwgIls6OmY6MDowOmY6MDowXSIsIDAsICIvIiwgIiIsICIiLCAiaHR0cDovL1s6OmY6MDow
OmY6MDowXS8ifSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNoZWNrUmVsYXRpdmVVUkwoY29uc3QgU3Ry
aW5nJiB1cmxTdHJpbmcsIGNvbnN0IFN0cmluZyYgYmFzZVVSTFN0cmluZywgY29uc3QgRXhwZWN0
ZWRQYXJ0cyYgcGFydHMpCkBAIC0yMDIsNiArMjEwLDE4IEBAIFRFU1RfRihVUkxQYXJzZXJUZXN0
LCBQYXJzZXJEaWZmZXJlbmNlcykKICAgICBjaGVja1VSTERpZmZlcmVuY2VzKCJodHRwOi8vMDEx
LjExLjBYMTEuMHgwMTEiLAogICAgICAgICB7Imh0dHAiLCAiIiwgIiIsICI5LjExLjE3LjE3Iiwg
MCwgIi8iLCAiIiwgIiIsICJodHRwOi8vOS4xMS4xNy4xNy8ifSwKICAgICAgICAgeyJodHRwIiwg
IiIsICIiLCAiMDExLjExLjB4MTEuMHgwMTEiLCAwLCAiLyIsICIiLCAiIiwgImh0dHA6Ly8wMTEu
MTEuMHgxMS4weDAxMS8ifSk7CisgICAgY2hlY2tVUkxEaWZmZXJlbmNlcygiaHR0cDovL1sxMjM0
OjAwNzg6OTBBQjpDZEVmOjAxMjM6MDAwNzo4OUFCOjAwMDBdIiwKKyAgICAgICAgeyJodHRwIiwg
IiIsICIiLCAiWzEyMzQ6Nzg6OTBhYjpjZGVmOjEyMzo3Ojg5YWI6MF0iLCAwLCAiLyIsICIiLCAi
IiwgImh0dHA6Ly9bMTIzNDo3ODo5MGFiOmNkZWY6MTIzOjc6ODlhYjowXS8ifSwKKyAgICAgICAg
eyJodHRwIiwgIiIsICIiLCAiWzEyMzQ6MDA3ODo5MGFiOmNkZWY6MDEyMzowMDA3Ojg5YWI6MDAw
MF0iLCAwLCAiLyIsICIiLCAiIiwgImh0dHA6Ly9bMTIzNDowMDc4OjkwYWI6Y2RlZjowMTIzOjAw
MDc6ODlhYjowMDAwXS8ifSk7CisgICAgY2hlY2tVUkxEaWZmZXJlbmNlcygiaHR0cDovL1swOmY6
MDowOmY6ZjowOjBdIiwKKyAgICAgICAgeyJodHRwIiwgIiIsICIiLCAiWzA6Zjo6ZjpmOjA6MF0i
LCAwLCAiLyIsICIiLCAiIiwgImh0dHA6Ly9bMDpmOjpmOmY6MDowXS8ifSwKKyAgICAgICAgeyJo
dHRwIiwgIiIsICIiLCAiWzA6ZjowOjA6ZjpmOjA6MF0iLCAwLCAiLyIsICIiLCAiIiwgImh0dHA6
Ly9bMDpmOjA6MDpmOmY6MDowXS8ifSk7CisgICAgY2hlY2tVUkxEaWZmZXJlbmNlcygiaHR0cDov
L1swOmY6MDowOmY6MDowOjBdIiwKKyAgICAgICAgeyJodHRwIiwgIiIsICIiLCAiWzA6ZjowOjA6
Zjo6XSIsIDAsICIvIiwgIiIsICIiLCAiaHR0cDovL1swOmY6MDowOmY6Ol0vIn0sCisgICAgICAg
IHsiaHR0cCIsICIiLCAiIiwgIlswOmY6MDowOmY6MDowOjBdIiwgMCwgIi8iLCAiIiwgIiIsICJo
dHRwOi8vWzA6ZjowOjA6ZjowOjA6MF0vIn0pOworICAgIGNoZWNrVVJMRGlmZmVyZW5jZXMoImh0
dHA6Ly9bMDowOmY6MDowOmY6MDowXSIsCisgICAgICAgIHsiaHR0cCIsICIiLCAiIiwgIls6OmY6
MDowOmY6MDowXSIsIDAsICIvIiwgIiIsICIiLCAiaHR0cDovL1s6OmY6MDowOmY6MDowXS8ifSwK
KyAgICAgICAgeyJodHRwIiwgIiIsICIiLCAiWzA6MDpmOjA6MDpmOjA6MF0iLCAwLCAiLyIsICIi
LCAiIiwgImh0dHA6Ly9bMDowOmY6MDowOmY6MDowXS8ifSk7CiAKICAgICAvLyBGSVhNRTogVGhp
cyBiZWhhdmlvciBvdWdodCB0byBiZSBzcGVjaWZpZWQgaW4gdGhlIHN0YW5kYXJkLgogICAgIC8v
IFdpdGggdGhlIGV4aXN0aW5nIFVSTDo6cGFyc2UsIFdlYktpdCByZXR1cm5zICJodHRwczovIiwg
RmlyZWZveCByZXR1cm5zICJodHRwczovLy8iLCBhbmQgQ2hyb21lIHRocm93cyBhbiBlcnJvci4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287559</attachid>
            <date>2016-08-31 16:27:14 -0700</date>
            <delta_ts>2016-08-31 16:44:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161390-20160831162501.patch</filename>
            <type>text/plain</type>
            <size>12379</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDUyNjkpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE2LTA4LTMxICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IElQdjYgcGFyc2lu
ZyBpbiBVUkxQYXJzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MTM5MAorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAg
ICAgICogd3RmL0FTQ0lJQ1R5cGUuaDoKKyAgICAgICAgKFdURjo6bG93ZXJOaWJibGVUb0xvd2Vy
Y2FzZUFTQ0lJSGV4RGlnaXQpOgorICAgICAgICAoV1RGOjp1cHBlck5pYmJsZVRvTG93ZXJjYXNl
QVNDSUlIZXhEaWdpdCk6CisKIDIwMTYtMDgtMzAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBw
bGUuY29tPgogCiAgICAgICAgIEdhbWVDb250cm9sbGVyLmZyYW1ld29yayBiYWNrZW5kIGZvciBn
YW1lcGFkIEFQSS4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0FTQ0lJQ1R5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9BU0NJSUNUeXBlLmgJKHJldmlzaW9uIDIwNTE3MSkKKysrIFNv
dXJjZS9XVEYvd3RmL0FTQ0lJQ1R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTg3LDYgKzE4Nywx
OCBAQCBpbmxpbmUgY2hhciB1cHBlck5pYmJsZVRvQVNDSUlIZXhEaWdpdCh1CiAgICAgcmV0dXJu
IG5pYmJsZSArIChuaWJibGUgPCAxMCA/ICcwJyA6ICdBJyAtIDEwKTsKIH0KIAoraW5saW5lIGNo
YXIgbG93ZXJOaWJibGVUb0xvd2VyY2FzZUFTQ0lJSGV4RGlnaXQodWludDhfdCB2YWx1ZSkKK3sK
KyAgICB1aW50OF90IG5pYmJsZSA9IHZhbHVlICYgMHhGOworICAgIHJldHVybiBuaWJibGUgKyAo
bmliYmxlIDwgMTAgPyAnMCcgOiAnYScgLSAxMCk7Cit9CisKK2lubGluZSBjaGFyIHVwcGVyTmli
YmxlVG9Mb3dlcmNhc2VBU0NJSUhleERpZ2l0KHVpbnQ4X3QgdmFsdWUpCit7CisgICAgdWludDhf
dCBuaWJibGUgPSB2YWx1ZSA+PiA0OworICAgIHJldHVybiBuaWJibGUgKyAobmliYmxlIDwgMTAg
PyAnMCcgOiAnYScgLSAxMCk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IGlubGluZSBib29sIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwoQ2hhcmFjdGVyVHlwZSBpbnB1
dENoYXJhY3RlciwgY2hhciBleHBlY3RlZEFTQ0lJTG93ZXJjYXNlTGV0dGVyKQogewogICAgIC8v
IE5hbWUgb2YgdGhpcyBhcmd1bWVudCBzYXlzIHRoaXMgbXVzdCBiZSBhIGxvd2VyY2FzZSBsZXR0
ZXIsIGJ1dCBpdCBjYW4gYWN0dWFsbHkgYmU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDUx
OTcpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwyMSBAQAorMjAxNi0wOC0zMSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJr
aXQub3JnPgorCisgICAgICAgIEltcGxlbWVudCBJUHY2IHBhcnNpbmcgaW4gVVJMUGFyc2VyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjEzOTAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBDb3ZlcmVkIGJ5IG5l
dyBBUEkgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9VUkxQYXJzZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6emVyb1NlcXVlbmNlTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRM
b25nZXN0WmVyb1NlcXVlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6Om5pYmJsZVRvSGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6ZUlQdjZQaWVjZSk6CisgICAgICAgIChXZWJDb3JlOjpz
ZXJpYWxpemVJUHY2KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlSVB2Nkhvc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6VVJMUGFyc2VyOjpob3N0RW5kUmVhY2hlZCk6CisKIDIwMTYtMDgtMzAgIEJy
ZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIG9mIHVuaW5p
dGlhbGlzZWQgbWVtb3J5IGluIFRyYW5zZm9ybWF0aW9uTWF0cng6OmJsZW5kNCgpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5jcHAJKHJldmlzaW9uIDIwNTE5NCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2
MSw2ICs1NjEsNzQgQEAgc3RhdGljIHZvaWQgc2VyaWFsaXplSVB2NCh1aW50MzJfdCBhZGRyZQog
ICAgIGJ1ZmZlci5hcHBlbmROdW1iZXIoYWRkcmVzcyAmIDB4RkYpOwogfQogICAgIAorc3RhdGlj
IHNpemVfdCB6ZXJvU2VxdWVuY2VMZW5ndGgoY29uc3Qgc3RkOjphcnJheTx1aW50MTZfdCwgOD4m
IGFkZHJlc3MsIHNpemVfdCBiZWdpbikKK3sKKyAgICBzaXplX3QgZW5kID0gYmVnaW47CisgICAg
Zm9yICg7IGVuZCA8IDg7IGVuZCsrKSB7CisgICAgICAgIGlmIChhZGRyZXNzW2VuZF0pCisgICAg
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGVuZCAtIGJlZ2luOworfQorCitzdGF0
aWMgT3B0aW9uYWw8c2l6ZV90PiBmaW5kTG9uZ2VzdFplcm9TZXF1ZW5jZShjb25zdCBzdGQ6OmFy
cmF5PHVpbnQxNl90LCA4PiYgYWRkcmVzcykKK3sKKyAgICBPcHRpb25hbDxzaXplX3Q+IGxvbmdl
c3Q7CisgICAgc2l6ZV90IGxvbmdlc3RMZW5ndGggPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgODsgaSsrKSB7CisgICAgICAgIHNpemVfdCBsZW5ndGggPSB6ZXJvU2VxdWVuY2VMZW5n
dGgoYWRkcmVzcywgaSk7CisgICAgICAgIGlmIChsZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChs
ZW5ndGggPiAxICYmICghbG9uZ2VzdCB8fCBsb25nZXN0TGVuZ3RoIDwgbGVuZ3RoKSkgeworICAg
ICAgICAgICAgICAgIGxvbmdlc3QgPSBpOworICAgICAgICAgICAgICAgIGxvbmdlc3RMZW5ndGgg
PSBsZW5ndGg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpICs9IGxlbmd0aDsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gbG9uZ2VzdDsKK30KKyAgICAKK3N0YXRpYyB2b2lkIHNl
cmlhbGl6ZUlQdjZQaWVjZSh1aW50MTZfdCBwaWVjZSwgU3RyaW5nQnVpbGRlciYgYnVmZmVyKQor
eworICAgIGJvb2wgcHJpbnRlZCA9IGZhbHNlOworICAgIGlmIChhdXRvIG5pYmJsZTAgPSBwaWVj
ZSA+PiAxMikgeworICAgICAgICBidWZmZXIuYXBwZW5kKGxvd2VyTmliYmxlVG9Mb3dlcmNhc2VB
U0NJSUhleERpZ2l0KG5pYmJsZTApKTsKKyAgICAgICAgcHJpbnRlZCA9IHRydWU7CisgICAgfQor
ICAgIGF1dG8gbmliYmxlMSA9IHBpZWNlID4+IDggJiAweEY7CisgICAgaWYgKHByaW50ZWQgfHwg
bmliYmxlMSkgeworICAgICAgICBidWZmZXIuYXBwZW5kKGxvd2VyTmliYmxlVG9Mb3dlcmNhc2VB
U0NJSUhleERpZ2l0KG5pYmJsZTEpKTsKKyAgICAgICAgcHJpbnRlZCA9IHRydWU7CisgICAgfQor
ICAgIGF1dG8gbmliYmxlMiA9IHBpZWNlID4+IDQgJiAweEY7CisgICAgaWYgKHByaW50ZWQgfHwg
bmliYmxlMikKKyAgICAgICAgYnVmZmVyLmFwcGVuZChsb3dlck5pYmJsZVRvTG93ZXJjYXNlQVND
SUlIZXhEaWdpdChuaWJibGUyKSk7CisgICAgYnVmZmVyLmFwcGVuZChsb3dlck5pYmJsZVRvTG93
ZXJjYXNlQVNDSUlIZXhEaWdpdChwaWVjZSAmIDB4RikpOworfQorCitzdGF0aWMgdm9pZCBzZXJp
YWxpemVJUHY2KHN0ZDo6YXJyYXk8dWludDE2X3QsIDg+IGFkZHJlc3MsIFN0cmluZ0J1aWxkZXIm
IGJ1ZmZlcikKK3sKKyAgICBidWZmZXIuYXBwZW5kKCdbJyk7CisgICAgYXV0byBjb21wcmVzc1Bv
aW50ZXIgPSBmaW5kTG9uZ2VzdFplcm9TZXF1ZW5jZShhZGRyZXNzKTsKKyAgICBmb3IgKHNpemVf
dCBwaWVjZSA9IDA7IHBpZWNlIDwgODsgcGllY2UrKykgeworICAgICAgICBpZiAoY29tcHJlc3NQ
b2ludGVyICYmIGNvbXByZXNzUG9pbnRlci52YWx1ZSgpID09IHBpZWNlKSB7CisgICAgICAgICAg
ICBBU1NFUlQoIWFkZHJlc3NbcGllY2VdKTsKKyAgICAgICAgICAgIGlmIChwaWVjZSkKKyAgICAg
ICAgICAgICAgICBidWZmZXIuYXBwZW5kKCc6Jyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgYnVmZmVyLmFwcGVuZCgiOjoiKTsKKyAgICAgICAgICAgIHdoaWxlICghYWRkcmVz
c1twaWVjZV0pCisgICAgICAgICAgICAgICAgcGllY2UrKzsKKyAgICAgICAgICAgIGlmIChwaWVj
ZSA9PSA4KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHNlcmlh
bGl6ZUlQdjZQaWVjZShhZGRyZXNzW3BpZWNlXSwgYnVmZmVyKTsKKyAgICAgICAgaWYgKHBpZWNl
IDwgNykKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoJzonKTsKKyAgICB9CisgICAgYnVmZmVy
LmFwcGVuZCgnXScpOworfQorCiBzdGF0aWMgT3B0aW9uYWw8dWludDMyX3Q+IHBhcnNlSVB2NE51
bWJlcihTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvciYgaXRlcmF0b3IsIGNvbnN0IFN0
cmluZ1ZpZXc6OkNvZGVQb2ludHM6Okl0ZXJhdG9yJiBlbmQpCiB7CiAgICAgLy8gRklYTUU6IENo
ZWNrIGZvciBvdmVyZmxvdy4KQEAgLTY1OCwxMCArNzI2LDk2IEBAIHN0YXRpYyBPcHRpb25hbDx1
aW50MzJfdD4gcGFyc2VJUHY0SG9zdCgKICAgICByZXR1cm4gaXB2NDsKIH0KIAotc3RhdGljIE9w
dGlvbmFsPHN0ZDo6YXJyYXk8dWludDE2X3QsIDg+PiBwYXJzZUlQdjZIb3N0KFN0cmluZ1ZpZXc6
OkNvZGVQb2ludHM6Okl0ZXJhdG9yLCBTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvcikK
K3N0YXRpYyBPcHRpb25hbDxzdGQ6OmFycmF5PHVpbnQxNl90LCA4Pj4gcGFyc2VJUHY2SG9zdChT
dHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvciBjLCBTdHJpbmdWaWV3OjpDb2RlUG9pbnRz
OjpJdGVyYXRvciBlbmQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gTnVs
bG9wdDsKKyAgICBpZiAoYyA9PSBlbmQpCisgICAgICAgIHJldHVybiBOdWxsb3B0OworCisgICAg
c3RkOjphcnJheTx1aW50MTZfdCwgOD4gYWRkcmVzcyA9IHt7MCwgMCwgMCwgMCwgMCwgMCwgMCwg
MH19OworICAgIHNpemVfdCBwaWVjZVBvaW50ZXIgPSAwOworICAgIE9wdGlvbmFsPHNpemVfdD4g
Y29tcHJlc3NQb2ludGVyOworCisgICAgaWYgKCpjID09ICc6JykgeworICAgICAgICArK2M7Cisg
ICAgICAgIGlmIChjID09IGVuZCkKKyAgICAgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgICAg
ICBpZiAoKmMgIT0gJzonKQorICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgICAgICsr
YzsKKyAgICAgICAgKytwaWVjZVBvaW50ZXI7CisgICAgICAgIGNvbXByZXNzUG9pbnRlciA9IHBp
ZWNlUG9pbnRlcjsKKyAgICB9CisgICAgCisgICAgd2hpbGUgKGMgIT0gZW5kKSB7CisgICAgICAg
IGlmIChwaWVjZVBvaW50ZXIgPT0gOCkKKyAgICAgICAgICAgIHJldHVybiBOdWxsb3B0OworICAg
ICAgICBpZiAoKmMgPT0gJzonKSB7CisgICAgICAgICAgICBpZiAoY29tcHJlc3NQb2ludGVyKQor
ICAgICAgICAgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgICAgICAgICAgKytjOworICAgICAg
ICAgICAgKytwaWVjZVBvaW50ZXI7CisgICAgICAgICAgICBjb21wcmVzc1BvaW50ZXIgPSBwaWVj
ZVBvaW50ZXI7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICB1aW50
MTZfdCB2YWx1ZSA9IDA7CisgICAgICAgIGZvciAoc2l6ZV90IGxlbmd0aCA9IDA7IGxlbmd0aCA8
IDQ7IGxlbmd0aCsrKSB7CisgICAgICAgICAgICBpZiAoYyA9PSBlbmQpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoIWlzQVNDSUlIZXhEaWdpdCgqYykpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICogMHgxMCArIHRvQVND
SUlIZXhWYWx1ZSgqYyk7CisgICAgICAgICAgICArK2M7CisgICAgICAgIH0KKyAgICAgICAgYWRk
cmVzc1twaWVjZVBvaW50ZXIrK10gPSB2YWx1ZTsKKyAgICAgICAgaWYgKGMgPT0gZW5kKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICgqYyAhPSAnOicpCisgICAgICAgICAgICByZXR1
cm4gTnVsbG9wdDsKKyAgICAgICAgKytjOworICAgIH0KKyAgICAKKyAgICBpZiAoYyAhPSBlbmQp
IHsKKyAgICAgICAgaWYgKHBpZWNlUG9pbnRlciA+IDYpCisgICAgICAgICAgICByZXR1cm4gTnVs
bG9wdDsKKyAgICAgICAgc2l6ZV90IGRvdHNTZWVuID0gMDsKKyAgICAgICAgd2hpbGUgKGMgIT0g
ZW5kKSB7CisgICAgICAgICAgICBPcHRpb25hbDx1aW50MTZfdD4gdmFsdWU7CisgICAgICAgICAg
ICBpZiAoIWlzQVNDSUlEaWdpdCgqYykpCisgICAgICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7
CisgICAgICAgICAgICB3aGlsZSAoaXNBU0NJSURpZ2l0KCpjKSkgeworICAgICAgICAgICAgICAg
IGF1dG8gbnVtYmVyID0gKmMgLSAnMCc7CisgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkKKyAg
ICAgICAgICAgICAgICAgICAgdmFsdWUgPSBudW1iZXI7CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoIXZhbHVlLnZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOdWxsb3B0Owor
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS52
YWx1ZSgpICogMTAgKyBudW1iZXI7CisgICAgICAgICAgICAgICAgKytjOworICAgICAgICAgICAg
ICAgIGlmIChjID09IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7Cisg
ICAgICAgICAgICAgICAgaWYgKHZhbHVlLnZhbHVlKCkgPiAyNTUpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBOdWxsb3B0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRvdHNT
ZWVuIDwgMyAmJiAqYyAhPSAnLicpCisgICAgICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7Cisg
ICAgICAgICAgICBhZGRyZXNzW3BpZWNlUG9pbnRlcl0gPSBhZGRyZXNzW3BpZWNlUG9pbnRlcl0g
KiAweDEwMCArIHZhbHVlLnZhbHVlT3IoMCk7CisgICAgICAgICAgICBpZiAoZG90c1NlZW4gPT0g
MSB8fCBkb3RzU2VlbiA9PSAzKQorICAgICAgICAgICAgICAgIHBpZWNlUG9pbnRlcisrOworICAg
ICAgICAgICAgaWYgKGMgIT0gZW5kKQorICAgICAgICAgICAgICAgICsrYzsKKyAgICAgICAgICAg
IGlmIChkb3RzU2VlbiA9PSAzICYmIGMgIT0gZW5kKQorICAgICAgICAgICAgICAgIHJldHVybiBO
dWxsb3B0OworICAgICAgICAgICAgZG90c1NlZW4rKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBp
ZiAoY29tcHJlc3NQb2ludGVyKSB7CisgICAgICAgIHNpemVfdCBzd2FwcyA9IHBpZWNlUG9pbnRl
ciAtIGNvbXByZXNzUG9pbnRlci52YWx1ZSgpOworICAgICAgICBwaWVjZVBvaW50ZXIgPSA3Owor
ICAgICAgICB3aGlsZSAoc3dhcHMpCisgICAgICAgICAgICBzdGQ6OnN3YXAoYWRkcmVzc1twaWVj
ZVBvaW50ZXItLV0sIGFkZHJlc3NbY29tcHJlc3NQb2ludGVyLnZhbHVlKCkgKyBzd2Fwcy0tIC0g
MV0pOworICAgIH0gZWxzZSBpZiAocGllY2VQb2ludGVyICE9IDgpCisgICAgICAgIHJldHVybiBO
dWxsb3B0OworICAgIHJldHVybiBhZGRyZXNzOwogfQogCiB2b2lkIFVSTFBhcnNlcjo6aG9zdEVu
ZFJlYWNoZWQoKQpAQCAtNjczLDggKzgyNywxNiBAQCB2b2lkIFVSTFBhcnNlcjo6aG9zdEVuZFJl
YWNoZWQoKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCppdGVyYXRvciA9PSAnWycpIHsKICAg
ICAgICAgKytpdGVyYXRvcjsKLSAgICAgICAgcGFyc2VJUHY2SG9zdChpdGVyYXRvciwgZW5kKTsK
LSAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIGlwdjZFbmQgPSBpdGVyYXRvcjsKKyAgICAg
ICAgd2hpbGUgKGlwdjZFbmQgIT0gZW5kICYmICppcHY2RW5kICE9ICddJykKKyAgICAgICAgICAg
ICsraXB2NkVuZDsKKyAgICAgICAgaWYgKGF1dG8gYWRkcmVzcyA9IHBhcnNlSVB2Nkhvc3QoaXRl
cmF0b3IsIGlwdjZFbmQpKSB7CisgICAgICAgICAgICBzZXJpYWxpemVJUHY2KGFkZHJlc3MudmFs
dWUoKSwgbV9idWZmZXIpOworICAgICAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV9idWZmZXIu
bGVuZ3RoKCk7CisgICAgICAgICAgICAvLyBGSVhNRTogSGFuZGxlIHRoZSBwb3J0IGNvcnJlY3Rs
eS4KKyAgICAgICAgICAgIG1fdXJsLm1fcG9ydEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOyAgICAg
ICAgICAgIAorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQogICAgIGlmIChh
dXRvIGFkZHJlc3MgPSBwYXJzZUlQdjRIb3N0KGl0ZXJhdG9yLCBlbmQpKSB7CiAgICAgICAgIHNl
cmlhbGl6ZUlQdjQoYWRkcmVzcy52YWx1ZSgpLCBtX2J1ZmZlcik7CkluZGV4OiBUb29scy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDUyNTYpCisr
KyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxNi0w
OC0zMSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAg
ICAgIEltcGxlbWVudCBJUHY2IHBhcnNpbmcgaW4gVVJMUGFyc2VyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjEzOTAKKworICAgICAgICBSZXZpZXdl
ZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9VUkxQYXJzZXIuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OmNoZWNrVVJMRGlmZmVyZW5jZXMpOgorCiAyMDE2LTA4LTMxICBC
cmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBXSzIgR2FtZXBhZCBw
cm92aWRlciBvbiBpT1MuCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
VVJMUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvVVJMUGFyc2VyLmNwcAkocmV2aXNpb24gMjA1MTk0KQorKysgVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL1VSTFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcg
KzUwLDEyIEBAIHN0cnVjdCBFeHBlY3RlZFBhcnRzIHsKICAgICBTdHJpbmcgc3RyaW5nOwogfTsK
IAotc3RhdGljIGJvb2wgZXEoY29uc3QgU3RyaW5nJiBzMSwgY29uc3QgU3RyaW5nJiBzMikgeyBy
ZXR1cm4gczEudXRmOCgpID09IHMyLnV0ZjgoKTsgfQorc3RhdGljIGJvb2wgZXEoY29uc3QgU3Ry
aW5nJiBzMSwgY29uc3QgU3RyaW5nJiBzMikKK3sKKyAgICBFWFBFQ1RfU1RSRVEoczEudXRmOCgp
LmRhdGEoKSwgczIudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIHMxLnV0ZjgoKSA9PSBzMi51
dGY4KCk7Cit9CisKIHN0YXRpYyB2b2lkIGNoZWNrVVJMKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5n
LCBjb25zdCBFeHBlY3RlZFBhcnRzJiBwYXJ0cykKIHsKICAgICBVUkxQYXJzZXIgcGFyc2VyOwpA
QCAtOTQsNiArOTksOSBAQCBURVNUX0YoVVJMUGFyc2VyVGVzdCwgUGFyc2UpCiAgICAgY2hlY2tV
UkwoImFib3V0OmJsYW5rIiwgeyJhYm91dCIsICIiLCAiIiwgIiIsIDAsICJibGFuayIsICIiLCAi
IiwgImFib3V0OmJsYW5rIn0pOwogICAgIGNoZWNrVVJMKCJhYm91dDpibGFuaz9xdWVyeSIsIHsi
YWJvdXQiLCAiIiwgIiIsICIiLCAwLCAiYmxhbmsiLCAicXVlcnkiLCAiIiwgImFib3V0OmJsYW5r
P3F1ZXJ5In0pOwogICAgIGNoZWNrVVJMKCJhYm91dDpibGFuayNmcmFnbWVudCIsIHsiYWJvdXQi
LCAiIiwgIiIsICIiLCAwLCAiYmxhbmsiLCAiIiwgImZyYWdtZW50IiwgImFib3V0OmJsYW5rI2Zy
YWdtZW50In0pOworICAgIGNoZWNrVVJMKCJodHRwOi8vWzA6Zjo6ZjpmOjA6MF0iLCB7Imh0dHAi
LCAiIiwgIiIsICJbMDpmOjpmOmY6MDowXSIsIDAsICIvIiwgIiIsICIiLCAiaHR0cDovL1swOmY6
OmY6ZjowOjBdLyJ9KTsKKyAgICBjaGVja1VSTCgiaHR0cDovL1swOmY6MDowOmY6Ol0iLCB7Imh0
dHAiLCAiIiwgIiIsICJbMDpmOjA6MDpmOjpdIiwgMCwgIi8iLCAiIiwgIiIsICJodHRwOi8vWzA6
ZjowOjA6Zjo6XS8ifSk7CisgICAgY2hlY2tVUkwoImh0dHA6Ly9bOjpmOjA6MDpmOjA6MF0iLCB7
Imh0dHAiLCAiIiwgIiIsICJbOjpmOjA6MDpmOjA6MF0iLCAwLCAiLyIsICIiLCAiIiwgImh0dHA6
Ly9bOjpmOjA6MDpmOjA6MF0vIn0pOwogfQogCiBzdGF0aWMgdm9pZCBjaGVja1JlbGF0aXZlVVJM
KGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJhc2VVUkxTdHJpbmcsIGNv
bnN0IEV4cGVjdGVkUGFydHMmIHBhcnRzKQpAQCAtMjAyLDYgKzIxMCwxOCBAQCBURVNUX0YoVVJM
UGFyc2VyVGVzdCwgUGFyc2VyRGlmZmVyZW5jZXMpCiAgICAgY2hlY2tVUkxEaWZmZXJlbmNlcygi
aHR0cDovLzAxMS4xMS4wWDExLjB4MDExIiwKICAgICAgICAgeyJodHRwIiwgIiIsICIiLCAiOS4x
MS4xNy4xNyIsIDAsICIvIiwgIiIsICIiLCAiaHR0cDovLzkuMTEuMTcuMTcvIn0sCiAgICAgICAg
IHsiaHR0cCIsICIiLCAiIiwgIjAxMS4xMS4weDExLjB4MDExIiwgMCwgIi8iLCAiIiwgIiIsICJo
dHRwOi8vMDExLjExLjB4MTEuMHgwMTEvIn0pOworICAgIGNoZWNrVVJMRGlmZmVyZW5jZXMoImh0
dHA6Ly9bMTIzNDowMDc4OjkwQUI6Q2RFZjowMTIzOjAwMDc6ODlBQjowMDAwXSIsCisgICAgICAg
IHsiaHR0cCIsICIiLCAiIiwgIlsxMjM0Ojc4OjkwYWI6Y2RlZjoxMjM6Nzo4OWFiOjBdIiwgMCwg
Ii8iLCAiIiwgIiIsICJodHRwOi8vWzEyMzQ6Nzg6OTBhYjpjZGVmOjEyMzo3Ojg5YWI6MF0vIn0s
CisgICAgICAgIHsiaHR0cCIsICIiLCAiIiwgIlsxMjM0OjAwNzg6OTBhYjpjZGVmOjAxMjM6MDAw
Nzo4OWFiOjAwMDBdIiwgMCwgIi8iLCAiIiwgIiIsICJodHRwOi8vWzEyMzQ6MDA3ODo5MGFiOmNk
ZWY6MDEyMzowMDA3Ojg5YWI6MDAwMF0vIn0pOworICAgIGNoZWNrVVJMRGlmZmVyZW5jZXMoImh0
dHA6Ly9bMDpmOjA6MDpmOmY6MDowXSIsCisgICAgICAgIHsiaHR0cCIsICIiLCAiIiwgIlswOmY6
OmY6ZjowOjBdIiwgMCwgIi8iLCAiIiwgIiIsICJodHRwOi8vWzA6Zjo6ZjpmOjA6MF0vIn0sCisg
ICAgICAgIHsiaHR0cCIsICIiLCAiIiwgIlswOmY6MDowOmY6ZjowOjBdIiwgMCwgIi8iLCAiIiwg
IiIsICJodHRwOi8vWzA6ZjowOjA6ZjpmOjA6MF0vIn0pOworICAgIGNoZWNrVVJMRGlmZmVyZW5j
ZXMoImh0dHA6Ly9bMDpmOjA6MDpmOjA6MDowXSIsCisgICAgICAgIHsiaHR0cCIsICIiLCAiIiwg
IlswOmY6MDowOmY6Ol0iLCAwLCAiLyIsICIiLCAiIiwgImh0dHA6Ly9bMDpmOjA6MDpmOjpdLyJ9
LAorICAgICAgICB7Imh0dHAiLCAiIiwgIiIsICJbMDpmOjA6MDpmOjA6MDowXSIsIDAsICIvIiwg
IiIsICIiLCAiaHR0cDovL1swOmY6MDowOmY6MDowOjBdLyJ9KTsKKyAgICBjaGVja1VSTERpZmZl
cmVuY2VzKCJodHRwOi8vWzA6MDpmOjA6MDpmOjA6MF0iLAorICAgICAgICB7Imh0dHAiLCAiIiwg
IiIsICJbOjpmOjA6MDpmOjA6MF0iLCAwLCAiLyIsICIiLCAiIiwgImh0dHA6Ly9bOjpmOjA6MDpm
OjA6MF0vIn0sCisgICAgICAgIHsiaHR0cCIsICIiLCAiIiwgIlswOjA6ZjowOjA6ZjowOjBdIiwg
MCwgIi8iLCAiIiwgIiIsICJodHRwOi8vWzA6MDpmOjA6MDpmOjA6MF0vIn0pOwogCiAgICAgLy8g
RklYTUU6IFRoaXMgYmVoYXZpb3Igb3VnaHQgdG8gYmUgc3BlY2lmaWVkIGluIHRoZSBzdGFuZGFy
ZC4KICAgICAvLyBXaXRoIHRoZSBleGlzdGluZyBVUkw6OnBhcnNlLCBXZWJLaXQgcmV0dXJucyAi
aHR0cHM6LyIsIEZpcmVmb3ggcmV0dXJucyAiaHR0cHM6Ly8vIiwgYW5kIENocm9tZSB0aHJvd3Mg
YW4gZXJyb3IuCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287567</attachid>
            <date>2016-08-31 16:44:44 -0700</date>
            <delta_ts>2016-08-31 16:53:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161390-20160831164231.patch</filename>
            <type>text/plain</type>
            <size>12752</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDUyNjkpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE2LTA4LTMxICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IElQdjYgcGFyc2lu
ZyBpbiBVUkxQYXJzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MTM5MAorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAg
ICAgICogd3RmL0FTQ0lJQ1R5cGUuaDoKKyAgICAgICAgKFdURjo6bG93ZXJOaWJibGVUb0xvd2Vy
Y2FzZUFTQ0lJSGV4RGlnaXQpOgorICAgICAgICAoV1RGOjp1cHBlck5pYmJsZVRvTG93ZXJjYXNl
QVNDSUlIZXhEaWdpdCk6CisKIDIwMTYtMDgtMzAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBw
bGUuY29tPgogCiAgICAgICAgIEdhbWVDb250cm9sbGVyLmZyYW1ld29yayBiYWNrZW5kIGZvciBn
YW1lcGFkIEFQSS4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0FTQ0lJQ1R5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9BU0NJSUNUeXBlLmgJKHJldmlzaW9uIDIwNTI2OSkKKysrIFNv
dXJjZS9XVEYvd3RmL0FTQ0lJQ1R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTg3LDYgKzE4Nywx
OCBAQCBpbmxpbmUgY2hhciB1cHBlck5pYmJsZVRvQVNDSUlIZXhEaWdpdCh1CiAgICAgcmV0dXJu
IG5pYmJsZSArIChuaWJibGUgPCAxMCA/ICcwJyA6ICdBJyAtIDEwKTsKIH0KIAoraW5saW5lIGNo
YXIgbG93ZXJOaWJibGVUb0xvd2VyY2FzZUFTQ0lJSGV4RGlnaXQodWludDhfdCB2YWx1ZSkKK3sK
KyAgICB1aW50OF90IG5pYmJsZSA9IHZhbHVlICYgMHhGOworICAgIHJldHVybiBuaWJibGUgKyAo
bmliYmxlIDwgMTAgPyAnMCcgOiAnYScgLSAxMCk7Cit9CisKK2lubGluZSBjaGFyIHVwcGVyTmli
YmxlVG9Mb3dlcmNhc2VBU0NJSUhleERpZ2l0KHVpbnQ4X3QgdmFsdWUpCit7CisgICAgdWludDhf
dCBuaWJibGUgPSB2YWx1ZSA+PiA0OworICAgIHJldHVybiBuaWJibGUgKyAobmliYmxlIDwgMTAg
PyAnMCcgOiAnYScgLSAxMCk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
IGlubGluZSBib29sIGlzQVNDSUlBbHBoYUNhc2VsZXNzRXF1YWwoQ2hhcmFjdGVyVHlwZSBpbnB1
dENoYXJhY3RlciwgY2hhciBleHBlY3RlZEFTQ0lJTG93ZXJjYXNlTGV0dGVyKQogewogICAgIC8v
IE5hbWUgb2YgdGhpcyBhcmd1bWVudCBzYXlzIHRoaXMgbXVzdCBiZSBhIGxvd2VyY2FzZSBsZXR0
ZXIsIGJ1dCBpdCBjYW4gYWN0dWFsbHkgYmU6CkBAIC0yMTksMTAgKzIzMSwxMiBAQCB1c2luZyBX
VEY6OmlzQVNDSUlQcmludGFibGU7CiB1c2luZyBXVEY6OmlzQVNDSUlTcGFjZTsKIHVzaW5nIFdU
Rjo6aXNBU0NJSVVwcGVyOwogdXNpbmcgV1RGOjpsb3dlck5pYmJsZVRvQVNDSUlIZXhEaWdpdDsK
K3VzaW5nIFdURjo6bG93ZXJOaWJibGVUb0xvd2VyY2FzZUFTQ0lJSGV4RGlnaXQ7CiB1c2luZyBX
VEY6OnRvQVNDSUlIZXhWYWx1ZTsKIHVzaW5nIFdURjo6dG9BU0NJSUxvd2VyOwogdXNpbmcgV1RG
Ojp0b0FTQ0lJTG93ZXJVbmNoZWNrZWQ7CiB1c2luZyBXVEY6OnRvQVNDSUlVcHBlcjsKIHVzaW5n
IFdURjo6dXBwZXJOaWJibGVUb0FTQ0lJSGV4RGlnaXQ7Cit1c2luZyBXVEY6OnVwcGVyTmliYmxl
VG9Mb3dlcmNhc2VBU0NJSUhleERpZ2l0OwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlz
aW9uIDIwNTI2OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIxIEBACisyMDE2LTA4LTMxICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVu
c2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IElQdjYgcGFyc2luZyBpbiBVUkxQ
YXJzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
MTM5MAorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIENvdmVy
ZWQgYnkgbmV3IEFQSSB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL1VSTFBhcnNlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjp6ZXJvU2VxdWVuY2VMZW5ndGgpOgorICAgICAgICAoV2ViQ29y
ZTo6ZmluZExvbmdlc3RaZXJvU2VxdWVuY2UpOgorICAgICAgICAoV2ViQ29yZTo6bmliYmxlVG9I
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplSVB2NlBpZWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OnNlcmlhbGl6ZUlQdjYpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VJUHY2SG9zdCk6
CisgICAgICAgIChXZWJDb3JlOjpVUkxQYXJzZXI6Omhvc3RFbmRSZWFjaGVkKToKKwogMjAxNi0w
OC0zMSAgWW9hdiBXZWlzcyAgPHlvYXZAeW9hdi53cz4KIAogICAgICAgICBBZGQgZXZlbnQgc3Vw
cG9ydCBmb3IgbGluayBwcmVsb2FkLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJM
UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJz
ZXIuY3BwCShyZXZpc2lvbiAyMDUyNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQ
YXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjMsNiArNTYzLDc0IEBAIHN0YXRpYyB2b2lk
IHNlcmlhbGl6ZUlQdjQodWludDMyX3QgYWRkcmUKICAgICBidWZmZXIuYXBwZW5kTnVtYmVyKGFk
ZHJlc3MgJiAweEZGKTsKIH0KICAgICAKK3N0YXRpYyBzaXplX3QgemVyb1NlcXVlbmNlTGVuZ3Ro
KGNvbnN0IHN0ZDo6YXJyYXk8dWludDE2X3QsIDg+JiBhZGRyZXNzLCBzaXplX3QgYmVnaW4pCit7
CisgICAgc2l6ZV90IGVuZCA9IGJlZ2luOworICAgIGZvciAoOyBlbmQgPCA4OyBlbmQrKykgewor
ICAgICAgICBpZiAoYWRkcmVzc1tlbmRdKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IHJldHVybiBlbmQgLSBiZWdpbjsKK30KKworc3RhdGljIE9wdGlvbmFsPHNpemVfdD4gZmluZExv
bmdlc3RaZXJvU2VxdWVuY2UoY29uc3Qgc3RkOjphcnJheTx1aW50MTZfdCwgOD4mIGFkZHJlc3Mp
Cit7CisgICAgT3B0aW9uYWw8c2l6ZV90PiBsb25nZXN0OworICAgIHNpemVfdCBsb25nZXN0TGVu
Z3RoID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDg7IGkrKykgeworICAgICAgICBz
aXplX3QgbGVuZ3RoID0gemVyb1NlcXVlbmNlTGVuZ3RoKGFkZHJlc3MsIGkpOworICAgICAgICBp
ZiAobGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAobGVuZ3RoID4gMSAmJiAoIWxvbmdlc3QgfHwg
bG9uZ2VzdExlbmd0aCA8IGxlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICBsb25nZXN0ID0gaTsK
KyAgICAgICAgICAgICAgICBsb25nZXN0TGVuZ3RoID0gbGVuZ3RoOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaSArPSBsZW5ndGg7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGxv
bmdlc3Q7Cit9CisgICAgCitzdGF0aWMgdm9pZCBzZXJpYWxpemVJUHY2UGllY2UodWludDE2X3Qg
cGllY2UsIFN0cmluZ0J1aWxkZXImIGJ1ZmZlcikKK3sKKyAgICBib29sIHByaW50ZWQgPSBmYWxz
ZTsKKyAgICBpZiAoYXV0byBuaWJibGUwID0gcGllY2UgPj4gMTIpIHsKKyAgICAgICAgYnVmZmVy
LmFwcGVuZChsb3dlck5pYmJsZVRvTG93ZXJjYXNlQVNDSUlIZXhEaWdpdChuaWJibGUwKSk7Cisg
ICAgICAgIHByaW50ZWQgPSB0cnVlOworICAgIH0KKyAgICBhdXRvIG5pYmJsZTEgPSBwaWVjZSA+
PiA4ICYgMHhGOworICAgIGlmIChwcmludGVkIHx8IG5pYmJsZTEpIHsKKyAgICAgICAgYnVmZmVy
LmFwcGVuZChsb3dlck5pYmJsZVRvTG93ZXJjYXNlQVNDSUlIZXhEaWdpdChuaWJibGUxKSk7Cisg
ICAgICAgIHByaW50ZWQgPSB0cnVlOworICAgIH0KKyAgICBhdXRvIG5pYmJsZTIgPSBwaWVjZSA+
PiA0ICYgMHhGOworICAgIGlmIChwcmludGVkIHx8IG5pYmJsZTIpCisgICAgICAgIGJ1ZmZlci5h
cHBlbmQobG93ZXJOaWJibGVUb0xvd2VyY2FzZUFTQ0lJSGV4RGlnaXQobmliYmxlMikpOworICAg
IGJ1ZmZlci5hcHBlbmQobG93ZXJOaWJibGVUb0xvd2VyY2FzZUFTQ0lJSGV4RGlnaXQocGllY2Ug
JiAweEYpKTsKK30KKworc3RhdGljIHZvaWQgc2VyaWFsaXplSVB2NihzdGQ6OmFycmF5PHVpbnQx
Nl90LCA4PiBhZGRyZXNzLCBTdHJpbmdCdWlsZGVyJiBidWZmZXIpCit7CisgICAgYnVmZmVyLmFw
cGVuZCgnWycpOworICAgIGF1dG8gY29tcHJlc3NQb2ludGVyID0gZmluZExvbmdlc3RaZXJvU2Vx
dWVuY2UoYWRkcmVzcyk7CisgICAgZm9yIChzaXplX3QgcGllY2UgPSAwOyBwaWVjZSA8IDg7IHBp
ZWNlKyspIHsKKyAgICAgICAgaWYgKGNvbXByZXNzUG9pbnRlciAmJiBjb21wcmVzc1BvaW50ZXIu
dmFsdWUoKSA9PSBwaWVjZSkgeworICAgICAgICAgICAgQVNTRVJUKCFhZGRyZXNzW3BpZWNlXSk7
CisgICAgICAgICAgICBpZiAocGllY2UpCisgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgn
OicpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoIjo6
Iik7CisgICAgICAgICAgICB3aGlsZSAoIWFkZHJlc3NbcGllY2VdKQorICAgICAgICAgICAgICAg
IHBpZWNlKys7CisgICAgICAgICAgICBpZiAocGllY2UgPT0gOCkKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBzZXJpYWxpemVJUHY2UGllY2UoYWRkcmVzc1twaWVj
ZV0sIGJ1ZmZlcik7CisgICAgICAgIGlmIChwaWVjZSA8IDcpCisgICAgICAgICAgICBidWZmZXIu
YXBwZW5kKCc6Jyk7CisgICAgfQorICAgIGJ1ZmZlci5hcHBlbmQoJ10nKTsKK30KKwogc3RhdGlj
IE9wdGlvbmFsPHVpbnQzMl90PiBwYXJzZUlQdjROdW1iZXIoU3RyaW5nVmlldzo6Q29kZVBvaW50
czo6SXRlcmF0b3ImIGl0ZXJhdG9yLCBjb25zdCBTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVy
YXRvciYgZW5kKQogewogICAgIC8vIEZJWE1FOiBDaGVjayBmb3Igb3ZlcmZsb3cuCkBAIC02NjAs
MTAgKzcyOCw5NiBAQCBzdGF0aWMgT3B0aW9uYWw8dWludDMyX3Q+IHBhcnNlSVB2NEhvc3QoCiAg
ICAgcmV0dXJuIGlwdjQ7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxzdGQ6OmFycmF5PHVpbnQxNl90
LCA4Pj4gcGFyc2VJUHY2SG9zdChTdHJpbmdWaWV3OjpDb2RlUG9pbnRzOjpJdGVyYXRvciwgU3Ry
aW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0b3IpCitzdGF0aWMgT3B0aW9uYWw8c3RkOjphcnJh
eTx1aW50MTZfdCwgOD4+IHBhcnNlSVB2Nkhvc3QoU3RyaW5nVmlldzo6Q29kZVBvaW50czo6SXRl
cmF0b3IgYywgU3RyaW5nVmlldzo6Q29kZVBvaW50czo6SXRlcmF0b3IgZW5kKQogewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIE51bGxvcHQ7CisgICAgaWYgKGMgPT0gZW5kKQor
ICAgICAgICByZXR1cm4gTnVsbG9wdDsKKworICAgIHN0ZDo6YXJyYXk8dWludDE2X3QsIDg+IGFk
ZHJlc3MgPSB7ezAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9fTsKKyAgICBzaXplX3QgcGllY2VQb2lu
dGVyID0gMDsKKyAgICBPcHRpb25hbDxzaXplX3Q+IGNvbXByZXNzUG9pbnRlcjsKKworICAgIGlm
ICgqYyA9PSAnOicpIHsKKyAgICAgICAgKytjOworICAgICAgICBpZiAoYyA9PSBlbmQpCisgICAg
ICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICAgICAgaWYgKCpjICE9ICc6JykKKyAgICAgICAg
ICAgIHJldHVybiBOdWxsb3B0OworICAgICAgICArK2M7CisgICAgICAgICsrcGllY2VQb2ludGVy
OworICAgICAgICBjb21wcmVzc1BvaW50ZXIgPSBwaWVjZVBvaW50ZXI7CisgICAgfQorICAgIAor
ICAgIHdoaWxlIChjICE9IGVuZCkgeworICAgICAgICBpZiAocGllY2VQb2ludGVyID09IDgpCisg
ICAgICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICAgICAgaWYgKCpjID09ICc6JykgeworICAg
ICAgICAgICAgaWYgKGNvbXByZXNzUG9pbnRlcikKKyAgICAgICAgICAgICAgICByZXR1cm4gTnVs
bG9wdDsKKyAgICAgICAgICAgICsrYzsKKyAgICAgICAgICAgICsrcGllY2VQb2ludGVyOworICAg
ICAgICAgICAgY29tcHJlc3NQb2ludGVyID0gcGllY2VQb2ludGVyOworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKyAgICAgICAgdWludDE2X3QgdmFsdWUgPSAwOworICAgICAgICBm
b3IgKHNpemVfdCBsZW5ndGggPSAwOyBsZW5ndGggPCA0OyBsZW5ndGgrKykgeworICAgICAgICAg
ICAgaWYgKGMgPT0gZW5kKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYg
KCFpc0FTQ0lJSGV4RGlnaXQoKmMpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgdmFsdWUgPSB2YWx1ZSAqIDB4MTAgKyB0b0FTQ0lJSGV4VmFsdWUoKmMpOworICAgICAgICAg
ICAgKytjOworICAgICAgICB9CisgICAgICAgIGFkZHJlc3NbcGllY2VQb2ludGVyKytdID0gdmFs
dWU7CisgICAgICAgIGlmIChjID09IGVuZCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBp
ZiAoKmMgIT0gJzonKQorICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgICAgICsrYzsK
KyAgICB9CisgICAgCisgICAgaWYgKGMgIT0gZW5kKSB7CisgICAgICAgIGlmIChwaWVjZVBvaW50
ZXIgPiA2KQorICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgICAgIHNpemVfdCBkb3Rz
U2VlbiA9IDA7CisgICAgICAgIHdoaWxlIChjICE9IGVuZCkgeworICAgICAgICAgICAgT3B0aW9u
YWw8dWludDE2X3Q+IHZhbHVlOworICAgICAgICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQoKmMpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgICAgICAgICAgd2hpbGUgKGlzQVND
SUlEaWdpdCgqYykpIHsKKyAgICAgICAgICAgICAgICBhdXRvIG51bWJlciA9ICpjIC0gJzAnOwor
ICAgICAgICAgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0g
bnVtYmVyOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCF2YWx1ZS52YWx1ZSgpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudmFsdWUoKSAqIDEwICsgbnVtYmVyOworICAg
ICAgICAgICAgICAgICsrYzsKKyAgICAgICAgICAgICAgICBpZiAoYyA9PSBlbmQpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS52
YWx1ZSgpID4gMjU1KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkb3RzU2VlbiA8IDMgJiYgKmMgIT0gJy4nKQorICAg
ICAgICAgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgICAgICAgICAgYWRkcmVzc1twaWVjZVBv
aW50ZXJdID0gYWRkcmVzc1twaWVjZVBvaW50ZXJdICogMHgxMDAgKyB2YWx1ZS52YWx1ZU9yKDAp
OworICAgICAgICAgICAgaWYgKGRvdHNTZWVuID09IDEgfHwgZG90c1NlZW4gPT0gMykKKyAgICAg
ICAgICAgICAgICBwaWVjZVBvaW50ZXIrKzsKKyAgICAgICAgICAgIGlmIChjICE9IGVuZCkKKyAg
ICAgICAgICAgICAgICArK2M7CisgICAgICAgICAgICBpZiAoZG90c1NlZW4gPT0gMyAmJiBjICE9
IGVuZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICAgICAgICAgIGRvdHNT
ZWVuKys7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGNvbXByZXNzUG9pbnRlcikgeworICAg
ICAgICBzaXplX3Qgc3dhcHMgPSBwaWVjZVBvaW50ZXIgLSBjb21wcmVzc1BvaW50ZXIudmFsdWUo
KTsKKyAgICAgICAgcGllY2VQb2ludGVyID0gNzsKKyAgICAgICAgd2hpbGUgKHN3YXBzKQorICAg
ICAgICAgICAgc3RkOjpzd2FwKGFkZHJlc3NbcGllY2VQb2ludGVyLS1dLCBhZGRyZXNzW2NvbXBy
ZXNzUG9pbnRlci52YWx1ZSgpICsgc3dhcHMtLSAtIDFdKTsKKyAgICB9IGVsc2UgaWYgKHBpZWNl
UG9pbnRlciAhPSA4KQorICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICByZXR1cm4gYWRkcmVz
czsKIH0KIAogdm9pZCBVUkxQYXJzZXI6Omhvc3RFbmRSZWFjaGVkKCkKQEAgLTY3NSw4ICs4Mjks
MTYgQEAgdm9pZCBVUkxQYXJzZXI6Omhvc3RFbmRSZWFjaGVkKCkKICAgICAgICAgcmV0dXJuOwog
ICAgIGlmICgqaXRlcmF0b3IgPT0gJ1snKSB7CiAgICAgICAgICsraXRlcmF0b3I7Ci0gICAgICAg
IHBhcnNlSVB2Nkhvc3QoaXRlcmF0b3IsIGVuZCk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAg
YXV0byBpcHY2RW5kID0gaXRlcmF0b3I7CisgICAgICAgIHdoaWxlIChpcHY2RW5kICE9IGVuZCAm
JiAqaXB2NkVuZCAhPSAnXScpCisgICAgICAgICAgICArK2lwdjZFbmQ7CisgICAgICAgIGlmIChh
dXRvIGFkZHJlc3MgPSBwYXJzZUlQdjZIb3N0KGl0ZXJhdG9yLCBpcHY2RW5kKSkgeworICAgICAg
ICAgICAgc2VyaWFsaXplSVB2NihhZGRyZXNzLnZhbHVlKCksIG1fYnVmZmVyKTsKKyAgICAgICAg
ICAgIG1fdXJsLm1faG9zdEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICAgICAgLy8g
RklYTUU6IEhhbmRsZSB0aGUgcG9ydCBjb3JyZWN0bHkuCisgICAgICAgICAgICBtX3VybC5tX3Bv
cnRFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQogICAgIH0KICAgICBpZiAoYXV0byBhZGRyZXNzID0gcGFyc2VJUHY0SG9z
dChpdGVyYXRvciwgZW5kKSkgewogICAgICAgICBzZXJpYWxpemVJUHY0KGFkZHJlc3MudmFsdWUo
KSwgbV9idWZmZXIpOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0NoYW5nZUxvZwkocmV2aXNpb24gMjA1MjY5KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTYtMDgtMzEgIEFsZXggQ2hyaXN0ZW5zZW4gIDxh
Y2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBJbXBsZW1lbnQgSVB2NiBwYXJzaW5n
IGluIFVSTFBhcnNlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTYxMzkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvVVJMUGFyc2VyLmNwcDoKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpjaGVja1VS
TERpZmZlcmVuY2VzKToKKwogMjAxNi0wOC0zMSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgV0syIEdhbWVwYWQgcHJvdmlkZXIgb24gaU9TLgpJbmRleDogVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1VSTFBhcnNlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1VSTFBhcnNlci5jcHAJKHJldmlz
aW9uIDIwNTI2OSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9VUkxQYXJz
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCwxMiBAQCBzdHJ1Y3QgRXhwZWN0ZWRQ
YXJ0cyB7CiAgICAgU3RyaW5nIHN0cmluZzsKIH07CiAKLXN0YXRpYyBib29sIGVxKGNvbnN0IFN0
cmluZyYgczEsIGNvbnN0IFN0cmluZyYgczIpIHsgcmV0dXJuIHMxLnV0ZjgoKSA9PSBzMi51dGY4
KCk7IH0KK3N0YXRpYyBib29sIGVxKGNvbnN0IFN0cmluZyYgczEsIGNvbnN0IFN0cmluZyYgczIp
Cit7CisgICAgRVhQRUNUX1NUUkVRKHMxLnV0ZjgoKS5kYXRhKCksIHMyLnV0ZjgoKS5kYXRhKCkp
OworICAgIHJldHVybiBzMS51dGY4KCkgPT0gczIudXRmOCgpOworfQorCiBzdGF0aWMgdm9pZCBj
aGVja1VSTChjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgRXhwZWN0ZWRQYXJ0cyYgcGFy
dHMpCiB7CiAgICAgVVJMUGFyc2VyIHBhcnNlcjsKQEAgLTk0LDYgKzk5LDkgQEAgVEVTVF9GKFVS
TFBhcnNlclRlc3QsIFBhcnNlKQogICAgIGNoZWNrVVJMKCJhYm91dDpibGFuayIsIHsiYWJvdXQi
LCAiIiwgIiIsICIiLCAwLCAiYmxhbmsiLCAiIiwgIiIsICJhYm91dDpibGFuayJ9KTsKICAgICBj
aGVja1VSTCgiYWJvdXQ6Ymxhbms/cXVlcnkiLCB7ImFib3V0IiwgIiIsICIiLCAiIiwgMCwgImJs
YW5rIiwgInF1ZXJ5IiwgIiIsICJhYm91dDpibGFuaz9xdWVyeSJ9KTsKICAgICBjaGVja1VSTCgi
YWJvdXQ6YmxhbmsjZnJhZ21lbnQiLCB7ImFib3V0IiwgIiIsICIiLCAiIiwgMCwgImJsYW5rIiwg
IiIsICJmcmFnbWVudCIsICJhYm91dDpibGFuayNmcmFnbWVudCJ9KTsKKyAgICBjaGVja1VSTCgi
aHR0cDovL1swOmY6OmY6ZjowOjBdIiwgeyJodHRwIiwgIiIsICIiLCAiWzA6Zjo6ZjpmOjA6MF0i
LCAwLCAiLyIsICIiLCAiIiwgImh0dHA6Ly9bMDpmOjpmOmY6MDowXS8ifSk7CisgICAgY2hlY2tV
UkwoImh0dHA6Ly9bMDpmOjA6MDpmOjpdIiwgeyJodHRwIiwgIiIsICIiLCAiWzA6ZjowOjA6Zjo6
XSIsIDAsICIvIiwgIiIsICIiLCAiaHR0cDovL1swOmY6MDowOmY6Ol0vIn0pOworICAgIGNoZWNr
VVJMKCJodHRwOi8vWzo6ZjowOjA6ZjowOjBdIiwgeyJodHRwIiwgIiIsICIiLCAiWzo6ZjowOjA6
ZjowOjBdIiwgMCwgIi8iLCAiIiwgIiIsICJodHRwOi8vWzo6ZjowOjA6ZjowOjBdLyJ9KTsKIH0K
IAogc3RhdGljIHZvaWQgY2hlY2tSZWxhdGl2ZVVSTChjb25zdCBTdHJpbmcmIHVybFN0cmluZywg
Y29uc3QgU3RyaW5nJiBiYXNlVVJMU3RyaW5nLCBjb25zdCBFeHBlY3RlZFBhcnRzJiBwYXJ0cykK
QEAgLTIwMiw2ICsyMTAsMTggQEAgVEVTVF9GKFVSTFBhcnNlclRlc3QsIFBhcnNlckRpZmZlcmVu
Y2VzKQogICAgIGNoZWNrVVJMRGlmZmVyZW5jZXMoImh0dHA6Ly8wMTEuMTEuMFgxMS4weDAxMSIs
CiAgICAgICAgIHsiaHR0cCIsICIiLCAiIiwgIjkuMTEuMTcuMTciLCAwLCAiLyIsICIiLCAiIiwg
Imh0dHA6Ly85LjExLjE3LjE3LyJ9LAogICAgICAgICB7Imh0dHAiLCAiIiwgIiIsICIwMTEuMTEu
MHgxMS4weDAxMSIsIDAsICIvIiwgIiIsICIiLCAiaHR0cDovLzAxMS4xMS4weDExLjB4MDExLyJ9
KTsKKyAgICBjaGVja1VSTERpZmZlcmVuY2VzKCJodHRwOi8vWzEyMzQ6MDA3ODo5MEFCOkNkRWY6
MDEyMzowMDA3Ojg5QUI6MDAwMF0iLAorICAgICAgICB7Imh0dHAiLCAiIiwgIiIsICJbMTIzNDo3
ODo5MGFiOmNkZWY6MTIzOjc6ODlhYjowXSIsIDAsICIvIiwgIiIsICIiLCAiaHR0cDovL1sxMjM0
Ojc4OjkwYWI6Y2RlZjoxMjM6Nzo4OWFiOjBdLyJ9LAorICAgICAgICB7Imh0dHAiLCAiIiwgIiIs
ICJbMTIzNDowMDc4OjkwYWI6Y2RlZjowMTIzOjAwMDc6ODlhYjowMDAwXSIsIDAsICIvIiwgIiIs
ICIiLCAiaHR0cDovL1sxMjM0OjAwNzg6OTBhYjpjZGVmOjAxMjM6MDAwNzo4OWFiOjAwMDBdLyJ9
KTsKKyAgICBjaGVja1VSTERpZmZlcmVuY2VzKCJodHRwOi8vWzA6ZjowOjA6ZjpmOjA6MF0iLAor
ICAgICAgICB7Imh0dHAiLCAiIiwgIiIsICJbMDpmOjpmOmY6MDowXSIsIDAsICIvIiwgIiIsICIi
LCAiaHR0cDovL1swOmY6OmY6ZjowOjBdLyJ9LAorICAgICAgICB7Imh0dHAiLCAiIiwgIiIsICJb
MDpmOjA6MDpmOmY6MDowXSIsIDAsICIvIiwgIiIsICIiLCAiaHR0cDovL1swOmY6MDowOmY6Zjow
OjBdLyJ9KTsKKyAgICBjaGVja1VSTERpZmZlcmVuY2VzKCJodHRwOi8vWzA6ZjowOjA6ZjowOjA6
MF0iLAorICAgICAgICB7Imh0dHAiLCAiIiwgIiIsICJbMDpmOjA6MDpmOjpdIiwgMCwgIi8iLCAi
IiwgIiIsICJodHRwOi8vWzA6ZjowOjA6Zjo6XS8ifSwKKyAgICAgICAgeyJodHRwIiwgIiIsICIi
LCAiWzA6ZjowOjA6ZjowOjA6MF0iLCAwLCAiLyIsICIiLCAiIiwgImh0dHA6Ly9bMDpmOjA6MDpm
OjA6MDowXS8ifSk7CisgICAgY2hlY2tVUkxEaWZmZXJlbmNlcygiaHR0cDovL1swOjA6ZjowOjA6
ZjowOjBdIiwKKyAgICAgICAgeyJodHRwIiwgIiIsICIiLCAiWzo6ZjowOjA6ZjowOjBdIiwgMCwg
Ii8iLCAiIiwgIiIsICJodHRwOi8vWzo6ZjowOjA6ZjowOjBdLyJ9LAorICAgICAgICB7Imh0dHAi
LCAiIiwgIiIsICJbMDowOmY6MDowOmY6MDowXSIsIDAsICIvIiwgIiIsICIiLCAiaHR0cDovL1sw
OjA6ZjowOjA6ZjowOjBdLyJ9KTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGJlaGF2aW9yIG91Z2h0
IHRvIGJlIHNwZWNpZmllZCBpbiB0aGUgc3RhbmRhcmQuCiAgICAgLy8gV2l0aCB0aGUgZXhpc3Rp
bmcgVVJMOjpwYXJzZSwgV2ViS2l0IHJldHVybnMgImh0dHBzOi8iLCBGaXJlZm94IHJldHVybnMg
Imh0dHBzOi8vLyIsIGFuZCBDaHJvbWUgdGhyb3dzIGFuIGVycm9yLgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>