<?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>164004</bug_id>
          
          <creation_ts>2016-10-25 22:03:27 -0700</creation_ts>
          <short_desc>[DOMJIT] Implement Node::ownerDocument</short_desc>
          <delta_ts>2016-11-09 13:36:31 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</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>
          <dependson>164432</dependson>
          <blocked>162544</blocked>
    
    <blocked>164006</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>joepeck</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1244628</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-10-25 22:03:27 -0700</bug_when>
    <thetext>I figured out that it is called in jQuery isXMLDoc function.
And it is also called from jQuery.prop() function. And it seems that this prop() is the hottest jQuery function in Ember.js SpeedoMeter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244629</commentid>
    <comment_count>1</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-10-25 22:05:00 -0700</bug_when>
    <thetext>Good things:

Looking up the ownerDocument from the given Node is also done in CSS JIT.
So there is already a function like xxxMemoryOffset(). So the difficulty is super low.
And according to the inspector team, it is frequently called in the inspector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244742</commentid>
    <comment_count>2</comment_count>
      <attachid>292910</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-10-26 02:35:55 -0700</bug_when>
    <thetext>Created attachment 292910
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244988</commentid>
    <comment_count>3</comment_count>
      <attachid>292910</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-26 18:06:09 -0700</bug_when>
    <thetext>Comment on attachment 292910
Patch

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

&gt; Source/WebCore/domjit/JSNodeDOMJIT.cpp:191
&gt; +// Node#ownerDocument

I don’t think these comments are helpful. The class names already contain this information.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245011</commentid>
    <comment_count>4</comment_count>
      <attachid>292910</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-10-26 20:37:59 -0700</bug_when>
    <thetext>Comment on attachment 292910
Patch

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

Thanks!

&gt;&gt; Source/WebCore/domjit/JSNodeDOMJIT.cpp:191
&gt;&gt; +// Node#ownerDocument
&gt; 
&gt; I don’t think these comments are helpful. The class names already contain this information.

Yeah, OK, I&apos;ll drop them :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245012</commentid>
    <comment_count>5</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-10-26 20:45:06 -0700</bug_when>
    <thetext>Committed r207932: &lt;http://trac.webkit.org/changeset/207932&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1245178</commentid>
    <comment_count>6</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-10-27 10:59:24 -0700</bug_when>
    <thetext>jQuery.attr operation is accelerated and shows 15% improvement in Dromaeo jslib-attr-jquery&apos;s jQuery.attr(class).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1246271</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-10-30 14:59:21 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; jQuery.attr operation is accelerated and shows 15% improvement in Dromaeo
&gt; jslib-attr-jquery&apos;s jQuery.attr(class).

That&apos;s awesome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247891</commentid>
    <comment_count>8</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-03 15:49:40 -0700</bug_when>
    <thetext>It causes segv. rolled out.
Investigating.
I guess document() may become null while it is represented as a reference at some point (maybe, when leaving a page).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247996</commentid>
    <comment_count>9</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-03 19:43:00 -0700</bug_when>
    <thetext>hmmmmmmm, still I cannot reproduce it on x64 environment.
The crash log said that we crash with 0x8 access. It is apparently nullptr + offset access.

I think the most suspicious part case is &quot;document becomes nullptr&quot;. We access the document + ScriptWrappable::offsetOfWrapper&lt;Document&gt;(). And ScriptWrappable::offsetOfWrapper&lt;Document&gt;() is 8. If it returns nullptr, it should cause the segv with 0x8 address in this code.

And C++ ownerDocument() does not cause this crash because the C++ code is looks like this.

Document* document = &amp;this-&gt;document();
return document == this ? nullptr : document;

If document becomes nullptr, it does not cause any crash. It just returns nullptr.
For `document == this` part, I used `branchIfNotDocumentWrapper`. But if it may becomes nullptr, we should organize the JIT code as strictly corresponding to C++ code. (And it should be easy).

The problematic part is document() is Document&amp;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248048</commentid>
    <comment_count>10</comment_count>
      <attachid>293865</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-03 22:17:19 -0700</bug_when>
    <thetext>Created attachment 293865
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248049</commentid>
    <comment_count>11</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-03 22:18:32 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Created attachment 293865 [details]
&gt; Patch

Still I cannot reproduce it in x64 environment &amp; I&apos;m still setting up the ARM64 environment, I believe this should fix the crash.
Still investigating...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248050</commentid>
    <comment_count>12</comment_count>
      <attachid>293866</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-03 22:21:19 -0700</bug_when>
    <thetext>Created attachment 293866
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248076</commentid>
    <comment_count>13</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-04 00:09:02 -0700</bug_when>
    <thetext>Finally, I&apos;ve reproduced in arm64. Investigating...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248165</commentid>
    <comment_count>14</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-04 10:49:15 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Finally, I&apos;ve reproduced in arm64. Investigating...

OK, I reproduced the issue with the previous version.
And I&apos;ve ensured this patch fixes the issue.
I&apos;ll ensure that sometimes `document()` returns nullptr next.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248178</commentid>
    <comment_count>15</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-04 11:32:07 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; Finally, I&apos;ve reproduced in arm64. Investigating...
&gt; 
&gt; OK, I reproduced the issue with the previous version.
&gt; And I&apos;ve ensured this patch fixes the issue.
&gt; I&apos;ll ensure that sometimes `document()` returns nullptr next.

I&apos;ve figured out the cause of this bug. The above guess is wrong.
In C++ ownerDocument() code, we have like,

    Document* document = &amp;this-&gt;document();
    return document == this ? nullptr : document;

Instead, DOMJIT ownerDocument used DOMJIT::branchIfDocumentWrapper() to check if the given object is Document.
But, interestingly, it seems that there is some objects, that nodeType embed in JSType is not DocumentWrapper, but document() == this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248303</commentid>
    <comment_count>16</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-04 15:07:28 -0700</bug_when>
    <thetext>Finally I figured out the issue.
It is not directly related to this patch. MacroAssembler&apos;s bug.
https://bugs.webkit.org/show_bug.cgi?id=164432</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248619</commentid>
    <comment_count>17</comment_count>
      <attachid>293866</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-11-06 10:21:53 -0800</bug_when>
    <thetext>Comment on attachment 293866
Patch

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

&gt; Source/WebCore/domjit/JSNodeDOMJIT.cpp:180
&gt; +        RELEASE_ASSERT(!CAST_OFFSET(EventTarget*, Node*));
&gt; +        RELEASE_ASSERT(!CAST_OFFSET(Node*, Document*));

Can we use a static_assert here instead of RELEASE_ASSERT?

&gt; Source/WebCore/domjit/JSNodeDOMJIT.cpp:185
&gt; +        // In C++ ownerDocument implementation, if &amp;document() becomes nullptr, it just returns nullptr.
&gt; +        // DOMJIT implementation strictly follows the C++ one.
&gt; +        nullCases.append(jit.branchTestPtr(CCallHelpers::Zero, document));

We need to look into this more. It is annoying that we have to add a branch for this, and even the C++ implementation would crash if we compiled it with -fcatch-undefined-behavior and the document reference was null. We should reproduce the problem, fix it, and remove this branch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248802</commentid>
    <comment_count>18</comment_count>
      <attachid>293866</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-07 11:50:07 -0800</bug_when>
    <thetext>Comment on attachment 293866
Patch

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

Thanks!

&gt;&gt; Source/WebCore/domjit/JSNodeDOMJIT.cpp:185
&gt;&gt; +        nullCases.append(jit.branchTestPtr(CCallHelpers::Zero, document));
&gt; 
&gt; We need to look into this more. It is annoying that we have to add a branch for this, and even the C++ implementation would crash if we compiled it with -fcatch-undefined-behavior and the document reference was null. We should reproduce the problem, fix it, and remove this branch!

Oops! I should update this patch. Sorry. I set up my device and finally figured out the issue :D
And it is not related to this patch. Our MacroAssembler in non x86 has a bug with 8bit operations (like branch8). And this is why x86 Safari does not pose any problems.
See the comment in https://bugs.webkit.org/show_bug.cgi?id=164004#c16.
And https://bugs.webkit.org/show_bug.cgi?id=164432 is handling this issue.

Once the macro assembler issue is fixed, we can land the reverted patch as is.
At that time, I&apos;ll insert assertions newly added in this patch :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249376</commentid>
    <comment_count>19</comment_count>
      <attachid>293866</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-09 11:20:05 -0800</bug_when>
    <thetext>Comment on attachment 293866
Patch

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

&gt;&gt; Source/WebCore/domjit/JSNodeDOMJIT.cpp:180
&gt;&gt; +        RELEASE_ASSERT(!CAST_OFFSET(Node*, Document*));
&gt; 
&gt; Can we use a static_assert here instead of RELEASE_ASSERT?

Because CAST_OFFSET uses reinterpret_cast, it is not used in the context of static_assert, :(. That&apos;s sad thing.
(And OBJECT_OFFSETOF macro is the same).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249453</commentid>
    <comment_count>20</comment_count>
      <attachid>293866</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-09 13:17:34 -0800</bug_when>
    <thetext>Comment on attachment 293866
Patch

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

&gt;&gt;&gt; Source/WebCore/domjit/JSNodeDOMJIT.cpp:185
&gt;&gt;&gt; +        nullCases.append(jit.branchTestPtr(CCallHelpers::Zero, document));
&gt;&gt; 
&gt;&gt; We need to look into this more. It is annoying that we have to add a branch for this, and even the C++ implementation would crash if we compiled it with -fcatch-undefined-behavior and the document reference was null. We should reproduce the problem, fix it, and remove this branch!
&gt; 
&gt; Oops! I should update this patch. Sorry. I set up my device and finally figured out the issue :D
&gt; And it is not related to this patch. Our MacroAssembler in non x86 has a bug with 8bit operations (like branch8). And this is why x86 Safari does not pose any problems.
&gt; See the comment in https://bugs.webkit.org/show_bug.cgi?id=164004#c16.
&gt; And https://bugs.webkit.org/show_bug.cgi?id=164432 is handling this issue.
&gt; 
&gt; Once the macro assembler issue is fixed, we can land the reverted patch as is.
&gt; At that time, I&apos;ll insert assertions newly added in this patch :)

So, Ive just dropped this check. The macro assembler fix should address this issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249479</commentid>
    <comment_count>21</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-09 13:36:31 -0800</bug_when>
    <thetext>Committed r208481: &lt;http://trac.webkit.org/changeset/208481&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292910</attachid>
            <date>2016-10-26 02:35:55 -0700</date>
            <delta_ts>2016-11-03 22:17:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164004-20161026023208.patch</filename>
            <type>text/plain</type>
            <size>11800</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3ODY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGE5MGQwYTdiYWFlNjk2
MzdlMDJhOTE5OWNiOTk2NTZhNzgzYzIzMC4uMGU2MzQwMTViODNhNTNmMDllNTlkOWUzZmFiNzQ4
MzExYmE3YTdlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDE2LTEwLTI2ICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIFtET01KSVRdIElt
cGxlbWVudCBOb2RlOjpvd25lckRvY3VtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQwMDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUZXN0OiBqcy9kb20vZG9taml0LWFjY2Vzc29yLW93bmVyLWRv
Y3VtZW50Lmh0bWwKKworICAgICAgICBJbXBsZW1lbnQgTm9kZS5vd25lckRvY3VtZW50IERPTUpJ
VCBhY2Nlc3Nvci4KKyAgICAgICAgQWNjb3JkaW5nIHRvIHRoZSByZXN1bHQgb2YgdGhlIHByb2Zp
bGVyLCBqUXVlcnkncyBwcm9wKCkKKyAgICAgICAgZnVuY3Rpb24gaXMgZnJlcXVlbnRseSBjYWxs
ZWQgaW4gRW1iZXIuanMgU3BlZWRvTWV0ZXIuCisgICAgICAgIEFuZCB0aGlzIGZ1bmN0aW9uIGNh
bGxzIGpRdWVyeS5pc1hNTERvYygpLiBBbmQgdGhpcyBpc1hNTERvYygpCisgICAgICAgIGZ1bmN0
aW9uIGNhbGxzIGVsZW1lbnQub3duZXJEb2N1bWVudCBhY2Nlc3Nvci4gQW5kIG91ciBXZWJLaXQK
KyAgICAgICAgaW5zcGVjdG9yIGFsc28gdXNlcyBvd25lckRvY3VtZW50IGFjY2Vzc29yIGZyZXF1
ZW50bHkuCisKKyAgICAgICAgSW50ZXJlc3RpbmcgdGhpbmcgaXMgdGhpcyBvd25lckRvY3VtZW50
IGZ1bmN0aW9uYWxpdHkgaXMgdXNlZAorICAgICAgICBpbiBDU1NKSVQsIHNvIENTU0pJVCBoYXMg
c2ltaWxhciBoZWxwZXIgZnVuY3Rpb24gdG8gbG9vayB1cCB0aGUKKyAgICAgICAgb3duZXIgZG9j
dW1lbnQgb2YgdGhlIGVsZW1lbnQuIEFzIGEgcmVzdWx0LCBhbGwgdGhlIG5lY2Vzc2FyeQorICAg
ICAgICBmdW5jdGlvbmFsaXR5IGlzIGFscmVhZHkgaW1wbGVtZW50ZWQsIERPTUpJVCBqdXN0IHV0
aWxpemVzIGl0LgorICAgICAgICBGb3IgZXhhbXBsZSwgTm9kZTo6dHJlZVNjb3BlTWVtb3J5T2Zm
c2V0KCkgYW5kCisgICAgICAgIFRyZWVTY29wZTo6ZG9jdW1lbnRTY29wZU1lbW9yeU9mZnNldCgp
IGlzIGltcGxlbWVudGVkIGJlZm9yZSB0aGlzCisgICAgICAgIHBhdGNoLgorCisgICAgICAgIElu
IHRoZSBmdXR1cmUsIHdlIHdpbGwgY29udmVydCBDU1NKSVQncyBBc3NlbWJsZXImIHRvIENDYWxs
SGVscGVycyYKKyAgICAgICAgYW5kIHNoYXJlIHRoZSBjb2RlIHdpdGggRE9NSklUWzFdLgorCisg
ICAgICAgIFsxXTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDAw
NgorCisgICAgICAgICogZG9tL05vZGUuaWRsOgorICAgICAgICAqIGRvbWppdC9ET01KSVRBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZG9taml0L0pTTm9kZURPTUpJVC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlT3duZXJEb2N1bWVudERPTUpJVDo6Y2hlY2tET00pOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZU93bmVyRG9jdW1lbnRET01KSVQ6OmNhbGxET00pOgorCiAy
MDE2LTEwLTI1ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAg
ICAgIFtET01KSVRdIFRlbGwgSURMIHJlc3VsdCB0eXBlIHRvIERGRyB0byBkcm9wIHR5cGUgY2hl
Y2tzIGluIEFJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5pZGwgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5pZGwKaW5kZXggNThmZTZkZThlYTVhYWIwNzFhODIwZGJiYWM2
ZTFjZjdjOWQ3ZmNlOC4uZDgzZjlkMzI4ZTA4OGMxYTFlMzQ4ZWY1M2M1MzY5ODM5YWQwODczZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaWRsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmlkbApAQCAtNTMsNyArNTMsNyBAQAogICAgIFtET01KSVRdIHJlYWRvbmx5
IGF0dHJpYnV0ZSBOb2RlPyBsYXN0Q2hpbGQ7CiAgICAgW0RPTUpJVF0gcmVhZG9ubHkgYXR0cmli
dXRlIE5vZGU/IHByZXZpb3VzU2libGluZzsKICAgICBbRE9NSklUXSByZWFkb25seSBhdHRyaWJ1
dGUgTm9kZT8gbmV4dFNpYmxpbmc7Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIERvY3VtZW50PyBv
d25lckRvY3VtZW50OworICAgIFtET01KSVRdIHJlYWRvbmx5IGF0dHJpYnV0ZSBEb2N1bWVudD8g
b3duZXJEb2N1bWVudDsKIAogICAgIFtDRVJlYWN0aW9ucywgQ3VzdG9tLCBNYXlUaHJvd0xlZ2Fj
eUV4Y2VwdGlvbl0gTm9kZSBpbnNlcnRCZWZvcmUoTm9kZSBuZXdDaGlsZCwgTm9kZT8gcmVmQ2hp
bGQpOwogICAgIFtDRVJlYWN0aW9ucywgQ3VzdG9tLCBNYXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbl0g
Tm9kZSByZXBsYWNlQ2hpbGQoTm9kZSBuZXdDaGlsZCwgTm9kZSBvbGRDaGlsZCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb21qaXQvRE9NSklUQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5o
IGIvU291cmNlL1dlYkNvcmUvZG9taml0L0RPTUpJVEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaApp
bmRleCA2ODkzZDg4YzY0YWM1NDMxMDc1OGViODE4Njg1MDcxYWY4ZTM5NzQ1Li5lOWQwZGQ5NTk2
MGU0NWM0NDRlYTVhZWE4MWViZjA3MzBiYjU4NDA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb21qaXQvRE9NSklUQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbWppdC9ET01KSVRBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKQEAgLTQyLDYgKzQyLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgeyBuYW1lc3BhY2UgRE9NSklUIHsKICAgICBWKE5vZGVfcGFy
ZW50Tm9kZSwgTm9kZSkgXAogICAgIFYoTm9kZV9uZXh0U2libGluZywgTm9kZSkgXAogICAgIFYo
Tm9kZV9wcmV2aW91c1NpYmxpbmcsIE5vZGUpIFwKKyAgICBWKE5vZGVfb3duZXJEb2N1bWVudCwg
Tm9kZSkgXAogCiAKIGNsYXNzIEFic3RyYWN0SGVhcFJlcG9zaXRvcnkgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9taml0L0pTTm9kZURPTUpJVC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b21qaXQvSlNOb2RlRE9NSklULmNwcAppbmRleCAwMDcyODlmZmUxMzdlOWI3OTFjNjkzYmU4Mzgx
YjUzNGU2MDZkZmQwLi41OTBiNTU3ODQ3YzEwMGE2NDhlODk4ZGFiMDBlYTY3ZDhlYmE0ZTQ3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb21qaXQvSlNOb2RlRE9NSklULmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb21qaXQvSlNOb2RlRE9NSklULmNwcApAQCAtMTg4LDYgKzE4OCw0MiBA
QCBSZWY8SlNDOjpET01KSVQ6OkNhbGxET01QYXRjaHBvaW50PiBOb2RlTm9kZVR5cGVET01KSVQ6
OmNhbGxET00oKQogICAgIHJldHVybiBwYXRjaHBvaW50OwogfQogCisvLyBOb2RlI293bmVyRG9j
dW1lbnQKK1JlZjxKU0M6OkRPTUpJVDo6UGF0Y2hwb2ludD4gTm9kZU93bmVyRG9jdW1lbnRET01K
SVQ6OmNoZWNrRE9NKCkKK3sKKyAgICByZXR1cm4gY2hlY2tOb2RlKCk7Cit9CisKK1JlZjxKU0M6
OkRPTUpJVDo6Q2FsbERPTVBhdGNocG9pbnQ+IE5vZGVPd25lckRvY3VtZW50RE9NSklUOjpjYWxs
RE9NKCkKK3sKKyAgICBjb25zdCBhdXRvJiBoZWFwID0gRE9NSklUOjpBYnN0cmFjdEhlYXBSZXBv
c2l0b3J5OjpzaGFyZWQoKTsKKyAgICBSZWY8SlNDOjpET01KSVQ6OkNhbGxET01QYXRjaHBvaW50
PiBwYXRjaHBvaW50ID0gSlNDOjpET01KSVQ6OkNhbGxET01QYXRjaHBvaW50OjpjcmVhdGUoKTsK
KyAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOworICAgIHBhdGNocG9p
bnQtPnNldEdlbmVyYXRvcihbPV0oQ0NhbGxIZWxwZXJzJiBqaXQsIEpTQzo6RE9NSklUOjpQYXRj
aHBvaW50UGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gcGFy
YW1zWzBdLmpzVmFsdWVSZWdzKCk7CisgICAgICAgIEdQUlJlZyBub2RlID0gcGFyYW1zWzFdLmdw
cigpOworICAgICAgICBHUFJSZWcgZ2xvYmFsT2JqZWN0ID0gcGFyYW1zWzJdLmdwcigpOworICAg
ICAgICBKU1ZhbHVlIGdsb2JhbE9iamVjdFZhbHVlID0gcGFyYW1zWzJdLnZhbHVlKCk7CisgICAg
ICAgIEdQUlJlZyBzY3JhdGNoID0gcGFyYW1zLmdwU2NyYXRjaCgwKTsKKworICAgICAgICAvLyBJ
ZiB0aGUgZ2l2ZW4gbm9kZSBpcyBhIERvY3VtZW50LCBOb2RlI293bmVyRG9jdW1lbnQgcmV0dXJu
cyBudWxsLgorICAgICAgICBhdXRvIG5vdERvY3VtZW50ID0gRE9NSklUOjpicmFuY2hJZk5vdERv
Y3VtZW50V3JhcHBlcihqaXQsIG5vZGUpOworICAgICAgICBqaXQubW92ZVZhbHVlKGpzTnVsbCgp
LCByZXN1bHQpOworICAgICAgICBhdXRvIGRvbmUgPSBqaXQuanVtcCgpOworCisgICAgICAgIG5v
dERvY3VtZW50LmxpbmsoJmppdCk7CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhub2RlLCBKU05vZGU6Om9mZnNldE9mV3JhcHBlZCgpKSwgc2NyYXRjaCk7CisgICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoLCBOb2RlOjp0cmVl
U2NvcGVNZW1vcnlPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaCwgVHJlZVNjb3BlOjpkb2N1bWVudFNjb3BlTWVtb3J5
T2Zmc2V0KCkpLCBzY3JhdGNoKTsKKworICAgICAgICBET01KSVQ6OnRvV3JhcHBlcjxEb2N1bWVu
dD4oaml0LCBwYXJhbXMsIHNjcmF0Y2gsIGdsb2JhbE9iamVjdCwgcmVzdWx0LCB0b1dyYXBwZXJT
bG93PERvY3VtZW50PiwgZ2xvYmFsT2JqZWN0VmFsdWUpOworICAgICAgICBkb25lLmxpbmsoJmpp
dCk7CisgICAgICAgIHJldHVybiBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0KCk7CisgICAgfSk7Cisg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0ID0gSlNDOjpET01KSVQ6OkVmZmVjdDo6Zm9yRGVmKGhlYXAu
Tm9kZV9vd25lckRvY3VtZW50KTsKKyAgICByZXR1cm4gcGF0Y2hwb2ludDsKK30KKwogfQogCiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwppbmRleCBkMzFlNDMxODUwNjZiZTg5ZjUxMjQ5MTJjYWE0MGVjNGY0YzE1NjIwLi4y
MzZmZjRiYTQwOTJkNGM1ZWNkZDdjODNhNzE2OTVlNDg0ZmM0NWVhIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMTYtMTAtMjYgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+
CisKKyAgICAgICAgW0RPTUpJVF0gSW1wbGVtZW50IE5vZGU6Om93bmVyRG9jdW1lbnQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDAwNAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICoganMvZG9tL2RvbWpp
dC1hY2Nlc3Nvci1vd25lci1kb2N1bWVudC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGpzL2RvbS9kb21qaXQtYWNjZXNzb3Itb3duZXItZG9jdW1lbnQuaHRtbDogQWRkZWQuCisKIDIw
MTYtMTAtMjUgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVXBk
YXRpbmcgYXR0cmlidXRlIGJ5IHRleHRDb250ZW50IG11c3QgY3JlYXRlIGEgc2luZ2xlIG11dGF0
aW9uIHJlY29yZCBhbmQgY3VzdG9tIGVsZW1lbnQgcmVhY3Rpb24KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2pzL2RvbS9kb21qaXQtYWNjZXNzb3Itb3duZXItZG9jdW1lbnQtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvanMvZG9tL2RvbWppdC1hY2Nlc3Nvci1vd25lci1kb2N1bWVudC1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMGIzYjk2MjhmOTNiODg3ODM5NGVhMjhlYzI5OTA3NzQzMTQ3
M2VhOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL2RvbS9kb21qaXQtYWNjZXNz
b3Itb3duZXItZG9jdW1lbnQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTA5IEBACitUZXN0IERP
TUpJVCBub2RlVHlwZSBhY2Nlc3NvciB3b3Jrcy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
UEFTUyAoCisgICAgICAgICAgICBmdW5jdGlvbiB0ZXN0RWxlbWVudChlbGVtZW50LCByZXN1bHQp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7
ICsraSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5vd25lckRvY3VtZW50ICE9
PSByZXN1bHQpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQor
ICAgICAgICApKHRhcmdldCwgcmVzdWx0KSBpcyB0cnVlCitQQVNTICgKKyAgICAgICAgICAgIGZ1
bmN0aW9uIHRlc3RBdHRyKGVsZW1lbnQsIHJlc3VsdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChlbGVtZW50Lm93bmVyRG9jdW1lbnQgIT09IHJlc3VsdCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICkodGFyZ2V0LCByZXN1bHQp
IGlzIHRydWUKK1BBU1MgKAorICAgICAgICAgICAgZnVuY3Rpb24gdGVzdFRleHQoZWxlbWVudCwg
cmVzdWx0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgMWU0OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQub3duZXJEb2N1
bWVudCAhPT0gcmVzdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgKSh0YXJnZXQsIHJlc3VsdCkgaXMgdHJ1ZQorUEFTUyAoCisgICAgICAg
ICAgICBmdW5jdGlvbiB0ZXN0Q0RBVEEoZWxlbWVudCwgcmVzdWx0KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGVsZW1lbnQub3duZXJEb2N1bWVudCAhPT0gcmVzdWx0KQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKSh0YXJnZXQs
IHJlc3VsdCkgaXMgdHJ1ZQorUEFTUyAoCisgICAgICAgICAgICBmdW5jdGlvbiB0ZXN0UHJvY2Vz
c2luZ0luc3RydWN0aW9uKGVsZW1lbnQsIHJlc3VsdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChlbGVtZW50Lm93bmVyRG9jdW1lbnQgIT09IHJlc3VsdCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICkodGFyZ2V0LCByZXN1bHQp
IGlzIHRydWUKK1BBU1MgKAorICAgICAgICAgICAgZnVuY3Rpb24gdGVzdENvbW1lbnQoZWxlbWVu
dCwgcmVzdWx0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQub3duZXJE
b2N1bWVudCAhPT0gcmVzdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgKSh0YXJnZXQsIHJlc3VsdCkgaXMgdHJ1ZQorUEFTUyAoCisgICAg
ICAgICAgICBmdW5jdGlvbiB0ZXN0RG9jdW1lbnQoZWxlbWVudCwgcmVzdWx0KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQub3duZXJEb2N1bWVudCAhPT0gcmVzdWx0KQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKSh0
YXJnZXQsIHJlc3VsdCkgaXMgdHJ1ZQorUEFTUyAoCisgICAgICAgICAgICBmdW5jdGlvbiB0ZXN0
WE1MRG9jdW1lbnQoZWxlbWVudCwgcmVzdWx0KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGVsZW1lbnQub3duZXJEb2N1bWVudCAhPT0gcmVzdWx0KQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKSh0YXJnZXQsIHJlc3VsdCkgaXMg
dHJ1ZQorUEFTUyAoCisgICAgICAgICAgICBmdW5jdGlvbiB0ZXN0RG9jdW1lbnRUeXBlKGVsZW1l
bnQsIHJlc3VsdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Lm93bmVy
RG9jdW1lbnQgIT09IHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICB9CisgICAgICAgICkodGFyZ2V0LCByZXN1bHQpIGlzIHRydWUKK1BBU1MgKAorICAg
ICAgICAgICAgZnVuY3Rpb24gdGVzdERvY3VtZW50RnJhZ21lbnQoZWxlbWVudCwgcmVzdWx0KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyAr
K2kpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQub3duZXJEb2N1bWVudCAhPT0g
cmVzdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgKSh0YXJnZXQsIHJlc3VsdCkgaXMgdHJ1ZQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9qcy9kb20vZG9taml0LWFjY2Vzc29yLW93bmVyLWRvY3VtZW50Lmh0bWwgYi9MYXlvdXRUZXN0
cy9qcy9kb20vZG9taml0LWFjY2Vzc29yLW93bmVyLWRvY3VtZW50Lmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MThmZjkwOTdmYWFhMGZlZTJhNDc3N2YwZGMyYzdlNGU1ZDNmOGM0YQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2pzL2RvbS9kb21qaXQtYWNjZXNzb3Itb3duZXItZG9jdW1lbnQuaHRt
bApAQCAtMCwwICsxLDU2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPGlmcmFtZSBpZD0ieG1sZnJhbWUiIG9ubG9hZD0iZnJhbWVMb2FkZWQoKSIg
c3R5bGU9ImhlaWdodDowcHgiIHNyYz0iZGF0YTphcHBsaWNhdGlvbi94aHRtbCt4bWwsPD94bWwg
dmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48Ym9keS8+Ij48L2lmcmFtZT4KKzxzY3Jp
cHQ+CitkZXNjcmlwdGlvbignVGVzdCBET01KSVQgbm9kZVR5cGUgYWNjZXNzb3Igd29ya3MuJyk7
CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUo
KTsKKwordmFyIHRhcmdldCA9IG51bGw7Cit2YXIgcmVzdWx0ID0gbnVsbDsKK2Z1bmN0aW9uIHJ1
blRlc3QoKQoreworICAgIHZhciB4bWxEb2N1bWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCd4bWxmcmFtZScpLmNvbnRlbnREb2N1bWVudDsKKyAgICB2YXIgdGFyZ2V0cyA9IFsKKyAgICAg
ICAgWydFbGVtZW50JywgZG9jdW1lbnQuYm9keSwgZG9jdW1lbnRdLAorICAgICAgICBbJ0F0dHIn
LCBkb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGUoJ0NvY29hJyksIGRvY3VtZW50XSwKKyAgICAgICAg
WydUZXh0JywgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ0NvY29hJyksIGRvY3VtZW50XSwKKyAg
ICAgICAgWydDREFUQScsIHhtbERvY3VtZW50LmNyZWF0ZUNEQVRBU2VjdGlvbigndGVzdCcpLCB4
bWxEb2N1bWVudF0sCisgICAgICAgIFsnUHJvY2Vzc2luZ0luc3RydWN0aW9uJywgeG1sRG9jdW1l
bnQuY3JlYXRlUHJvY2Vzc2luZ0luc3RydWN0aW9uKCd0YXJnZXQnLCAndGVzdCcpLCB4bWxEb2N1
bWVudF0sCisgICAgICAgIFsnQ29tbWVudCcsIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoJ0NvY29h
JyksIGRvY3VtZW50XSwKKyAgICAgICAgWydEb2N1bWVudCcsIGRvY3VtZW50LCBudWxsXSwKKyAg
ICAgICAgWydYTUxEb2N1bWVudCcsIHhtbERvY3VtZW50LCBudWxsXSwKKyAgICAgICAgWydEb2N1
bWVudFR5cGUnLCBkb2N1bWVudC5kb2N0eXBlLCBkb2N1bWVudF0sCisgICAgICAgIFsnRG9jdW1l
bnRGcmFnbWVudCcsIGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwgZG9jdW1lbnRd
LAorICAgIF07CisKKyAgICBmb3IgKFtuYW1lLCB0YXJnZXQsIHJlc3VsdF0gb2YgdGFyZ2V0cykg
eworICAgICAgICB2YXIgdGV4dCA9IGAKKyAgICAgICAgICAgIGZ1bmN0aW9uIHRlc3Qke25hbWV9
KGVsZW1lbnQsIHJlc3VsdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50
Lm93bmVyRG9jdW1lbnQgIT09IHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICB9CisgICAgICAgIGA7CisgICAgICAgIHNob3VsZEJlVHJ1ZShgKCR7dGV4
dH0pKHRhcmdldCwgcmVzdWx0KWApOworICAgIH0KKworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5l
cikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CitmdW5jdGlvbiBmcmFtZUxv
YWRlZCgpCit7CisgICAgcnVuVGVzdCgpOworfQorPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293865</attachid>
            <date>2016-11-03 22:17:19 -0700</date>
            <delta_ts>2016-11-03 22:21:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164004-20161104141317.patch</filename>
            <type>text/plain</type>
            <size>10919</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4MzY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWEyMzllYjdhNDU5NmI4
OTg1Y2MwMzE1YWQzZDRlN2RlMGZmZjY5ZS4uOTdiMzhkNmU3YWY0Y2IyMWY3ZmMxZjg4MWI1NTI5
ODg1OWFiMzIyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE2LTExLTAzICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIFtET01KSVRdIElt
cGxlbWVudCBOb2RlOjpvd25lckRvY3VtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQwMDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUZXN0OiBqcy9kb20vZG9taml0LWFjY2Vzc29yLW93bmVyLWRv
Y3VtZW50Lmh0bWwKKworICAgICAgICBTdGlsbCBJIGNhbm5vdCByZXByb2R1Y2UgdGhpcyBjcmFz
aCBpbiB4NjQgZW52aXJvbm1lbnQsIGFjY29yZGluZyB0byB0aGUgY3Jhc2ggbG9nLCBpdCBhY2Nl
c3NlcyAweDggYWRkcmVzcy4KKyAgICAgICAgVGhpcyBjYW4gaGFwcGVuIGlmIGRvY3VtZW50KCkg
YWNjaWRlbnRhbGx5IHJldHVybnMgbnVsbHB0ci4gSW4gdGhlIEMrKyBvd25lckRvY3VtZW50IGlt
cGxlbWVudGF0aW9uLAorICAgICAgICBpZiBkb2N1bWVudCgpIHJldHVybnMgbnVsbHB0ciwgaXQg
anVzdCByZXR1cm5zIG51bGxwdHIuIEJ1dCBpbiB0aGUgRE9NSklUIGltcGxlbWVudGF0aW9uLCB3
ZSBhc3N1bWUgdGhhdAorICAgICAgICBkb2N1bWVudCgpIHdvbid0IHJldHVybiBudWxscHRyIGFu
ZCBhY2Nlc3MgdGhlIG1lbWJlciBvZiBpdC4KKworICAgICAgICBUaGlzIHBhdGNoIGFsaWducyB0
aGUgRE9NSklUIGltcGxlbWVudGF0aW9uIHN0cmljdGx5IHRvIHRoZSBDKysgb25lLgorCisgICAg
ICAgICogZG9tL05vZGUuaWRsOgorICAgICAgICAqIGRvbWppdC9KU05vZGVET01KSVQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZU93bmVyRG9jdW1lbnRET01KSVQ6OmNoZWNrRE9NKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGVPd25lckRvY3VtZW50RE9NSklUOjpjYWxsRE9NR2V0dGVyKToK
KwogMjAxNi0xMS0wMyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBBZGQgYW4gYXNzZXJ0aW9uIHRvIGRpYWdub3NlIHN0cmVzcyBHQyBib3RzIHRlc3QgZmFpbHVy
ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmlkbCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmlkbAppbmRleCA1OGZlNmRlOGVhNWFhYjA3MWE4MjBkYmJhYzZlMWNmN2M5
ZDdmY2U4Li5kODNmOWQzMjhlMDg4YzFhMWUzNDhlZjUzYzUzNjk4MzlhZDA4NzNkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L05vZGUuaWRsCkBAIC01Myw3ICs1Myw3IEBACiAgICAgW0RPTUpJVF0gcmVhZG9ubHkgYXR0cmli
dXRlIE5vZGU/IGxhc3RDaGlsZDsKICAgICBbRE9NSklUXSByZWFkb25seSBhdHRyaWJ1dGUgTm9k
ZT8gcHJldmlvdXNTaWJsaW5nOwogICAgIFtET01KSVRdIHJlYWRvbmx5IGF0dHJpYnV0ZSBOb2Rl
PyBuZXh0U2libGluZzsKLSAgICByZWFkb25seSBhdHRyaWJ1dGUgRG9jdW1lbnQ/IG93bmVyRG9j
dW1lbnQ7CisgICAgW0RPTUpJVF0gcmVhZG9ubHkgYXR0cmlidXRlIERvY3VtZW50PyBvd25lckRv
Y3VtZW50OwogCiAgICAgW0NFUmVhY3Rpb25zLCBDdXN0b20sIE1heVRocm93TGVnYWN5RXhjZXB0
aW9uXSBOb2RlIGluc2VydEJlZm9yZShOb2RlIG5ld0NoaWxkLCBOb2RlPyByZWZDaGlsZCk7CiAg
ICAgW0NFUmVhY3Rpb25zLCBDdXN0b20sIE1heVRocm93TGVnYWN5RXhjZXB0aW9uXSBOb2RlIHJl
cGxhY2VDaGlsZChOb2RlIG5ld0NoaWxkLCBOb2RlIG9sZENoaWxkKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbWppdC9KU05vZGVET01KSVQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
aml0L0pTTm9kZURPTUpJVC5jcHAKaW5kZXggZWU2YjJiMjVjODM2ODFjY2E5OTBkODg5MDgzNDU2
YjA5MzY1M2FjNy4uYmI3MzBjYTYwZGQyYWIxNzNhYTFiMWJjOGZlNjMyNDU1NzllNDcyMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9taml0L0pTTm9kZURPTUpJVC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9taml0L0pTTm9kZURPTUpJVC5jcHAKQEAgLTE1Nyw2ICsxNTcsNDYgQEAg
UmVmPEpTQzo6RE9NSklUOjpDYWxsRE9NR2V0dGVyUGF0Y2hwb2ludD4gTm9kZU5vZGVUeXBlRE9N
SklUOjpjYWxsRE9NR2V0dGVyKCkKICAgICByZXR1cm4gcGF0Y2hwb2ludDsKIH0KIAorUmVmPEpT
Qzo6RE9NSklUOjpQYXRjaHBvaW50PiBOb2RlT3duZXJEb2N1bWVudERPTUpJVDo6Y2hlY2tET00o
KQoreworICAgIHJldHVybiBET01KSVQ6OmNoZWNrRE9NPE5vZGU+KCk7Cit9CisKK1JlZjxKU0M6
OkRPTUpJVDo6Q2FsbERPTUdldHRlclBhdGNocG9pbnQ+IE5vZGVPd25lckRvY3VtZW50RE9NSklU
OjpjYWxsRE9NR2V0dGVyKCkKK3sKKyAgICBSZWY8SlNDOjpET01KSVQ6OkNhbGxET01HZXR0ZXJQ
YXRjaHBvaW50PiBwYXRjaHBvaW50ID0gSlNDOjpET01KSVQ6OkNhbGxET01HZXR0ZXJQYXRjaHBv
aW50OjpjcmVhdGUoKTsKKyAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAy
OworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0oQ0NhbGxIZWxwZXJzJiBqaXQsIEpT
Qzo6RE9NSklUOjpQYXRjaHBvaW50UGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0ID0gcGFyYW1zWzBdLmpzVmFsdWVSZWdzKCk7CisgICAgICAgIEdQUlJlZyBub2Rl
ID0gcGFyYW1zWzFdLmdwcigpOworICAgICAgICBHUFJSZWcgZ2xvYmFsT2JqZWN0ID0gcGFyYW1z
WzJdLmdwcigpOworICAgICAgICBKU1ZhbHVlIGdsb2JhbE9iamVjdFZhbHVlID0gcGFyYW1zWzJd
LnZhbHVlKCk7CisgICAgICAgIEdQUlJlZyB3cmFwcGVkID0gcGFyYW1zLmdwU2NyYXRjaCgwKTsK
KyAgICAgICAgR1BSUmVnIGRvY3VtZW50ID0gcGFyYW1zLmdwU2NyYXRjaCgxKTsKKworICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mobm9kZSwgSlNOb2RlOjpvZmZzZXRP
ZldyYXBwZWQoKSksIHdyYXBwZWQpOworICAgICAgICBET01KSVQ6OmxvYWREb2N1bWVudChqaXQs
IHdyYXBwZWQsIGRvY3VtZW50KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIUNBU1RfT0ZGU0VU
KEV2ZW50VGFyZ2V0KiwgTm9kZSopKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIUNBU1RfT0ZG
U0VUKE5vZGUqLCBEb2N1bWVudCopKTsKKworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IG51bGxDYXNlczsKKyAgICAgICAgLy8gSW4gQysrIG93bmVyRG9jdW1lbnQgaW1wbGVtZW50YXRp
b24sIGlmICZkb2N1bWVudCgpIGJlY29tZXMgbnVsbHB0ciwgaXQganVzdCByZXR1cm5zIG51bGxw
dHIuCisgICAgICAgIC8vIERPTUpJVCBpbXBsZW1lbnRhdGlvbiBzdHJpY3RseSBmb2xsb3dzIHRo
ZSBDKysgb25lLgorICAgICAgICBudWxsQ2FzZXMuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKEND
YWxsSGVscGVyczo6WmVybywgZG9jdW1lbnQpKTsKKyAgICAgICAgLy8gSWYgdGhlIHx0aGlzfCBp
cyB0aGUgZG9jdW1lbnQgaXRzZWxmLCBvd25lckRvY3VtZW50IHdpbGwgcmV0dXJuIG51bGwuCisg
ICAgICAgIG51bGxDYXNlcy5hcHBlbmQoaml0LmJyYW5jaChDQ2FsbEhlbHBlcnM6OkVxdWFsLCB3
cmFwcGVkLCBkb2N1bWVudCkpOworICAgICAgICBET01KSVQ6OnRvV3JhcHBlcjxEb2N1bWVudD4o
aml0LCBwYXJhbXMsIGRvY3VtZW50LCBnbG9iYWxPYmplY3QsIHJlc3VsdCwgRE9NSklUOjp0b1dy
YXBwZXJTbG93PERvY3VtZW50PiwgZ2xvYmFsT2JqZWN0VmFsdWUpOworICAgICAgICBhdXRvIGRv
bmUgPSBqaXQuanVtcCgpOworCisgICAgICAgIG51bGxDYXNlcy5saW5rKCZqaXQpOworICAgICAg
ICBqaXQubW92ZVZhbHVlKGpzTnVsbCgpLCByZXN1bHQpOworICAgICAgICBkb25lLmxpbmsoJmpp
dCk7CisgICAgICAgIHJldHVybiBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0KCk7CisgICAgfSk7Cisg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0ID0gSlNDOjpET01KSVQ6OkVmZmVjdDo6Zm9yRGVmKERPTUpJ
VDo6QWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6Tm9kZV9vd25lckRvY3VtZW50KTsKKyAgICByZXR1
cm4gcGF0Y2hwb2ludDsKK30KKwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA0ZDUyMWNhZDBiZWJhOGU0
MzkyMzM5Y2Q4YzkxZGJmMWFjZjUwYWE5Li5lNDdlYTg0ZDBhZTM5OWVlMjlhYzc3NTA2OWFiNTg3
NWRjZWRjZTM2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTYtMTEtMDMgIFl1c3VrZSBTdXp1
a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgW0RPTUpJVF0gSW1wbGVtZW50
IE5vZGU6Om93bmVyRG9jdW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2NDAwNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICoganMvZG9tL2RvbWppdC1hY2Nlc3Nvci1vd25lci1kb2N1bWVudC1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL2RvbS9kb21qaXQtYWNjZXNzb3Itb3duZXIt
ZG9jdW1lbnQuaHRtbDogQWRkZWQuCisKIDIwMTYtMTEtMDMgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViR0wyXSBJbXBsZW1lbnQgZ2V0QnVm
ZmVyU3ViRGF0YSgpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9kb20vZG9taml0LWFjY2Vz
c29yLW93bmVyLWRvY3VtZW50LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2pzL2RvbS9kb21q
aXQtYWNjZXNzb3Itb3duZXItZG9jdW1lbnQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBiM2I5
NjI4ZjkzYjg4NzgzOTRlYTI4ZWMyOTkwNzc0MzE0NzNlYTkKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9qcy9kb20vZG9taml0LWFjY2Vzc29yLW93bmVyLWRvY3VtZW50LWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDEwOSBAQAorVGVzdCBET01KSVQgbm9kZVR5cGUgYWNjZXNzb3Igd29y
a3MuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKK1BBU1MgKAorICAgICAgICAgICAgZnVuY3Rp
b24gdGVzdEVsZW1lbnQoZWxlbWVudCwgcmVzdWx0KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGVsZW1lbnQub3duZXJEb2N1bWVudCAhPT0gcmVzdWx0KQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKSh0YXJnZXQsIHJlc3VsdCkg
aXMgdHJ1ZQorUEFTUyAoCisgICAgICAgICAgICBmdW5jdGlvbiB0ZXN0QXR0cihlbGVtZW50LCBy
ZXN1bHQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCAxZTQ7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5vd25lckRvY3Vt
ZW50ICE9PSByZXN1bHQpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICApKHRhcmdldCwgcmVzdWx0KSBpcyB0cnVlCitQQVNTICgKKyAgICAgICAg
ICAgIGZ1bmN0aW9uIHRlc3RUZXh0KGVsZW1lbnQsIHJlc3VsdCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChlbGVtZW50Lm93bmVyRG9jdW1lbnQgIT09IHJlc3VsdCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICkodGFyZ2V0LCBy
ZXN1bHQpIGlzIHRydWUKK1BBU1MgKAorICAgICAgICAgICAgZnVuY3Rpb24gdGVzdENEQVRBKGVs
ZW1lbnQsIHJlc3VsdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Lm93
bmVyRG9jdW1lbnQgIT09IHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgICkodGFyZ2V0LCByZXN1bHQpIGlzIHRydWUKK1BBU1MgKAor
ICAgICAgICAgICAgZnVuY3Rpb24gdGVzdFByb2Nlc3NpbmdJbnN0cnVjdGlvbihlbGVtZW50LCBy
ZXN1bHQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCAxZTQ7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5vd25lckRvY3Vt
ZW50ICE9PSByZXN1bHQpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICApKHRhcmdldCwgcmVzdWx0KSBpcyB0cnVlCitQQVNTICgKKyAgICAgICAg
ICAgIGZ1bmN0aW9uIHRlc3RDb21tZW50KGVsZW1lbnQsIHJlc3VsdCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChlbGVtZW50Lm93bmVyRG9jdW1lbnQgIT09IHJlc3VsdCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICkodGFyZ2V0
LCByZXN1bHQpIGlzIHRydWUKK1BBU1MgKAorICAgICAgICAgICAgZnVuY3Rpb24gdGVzdERvY3Vt
ZW50KGVsZW1lbnQsIHJlc3VsdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlbGVt
ZW50Lm93bmVyRG9jdW1lbnQgIT09IHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICkodGFyZ2V0LCByZXN1bHQpIGlzIHRydWUKK1BB
U1MgKAorICAgICAgICAgICAgZnVuY3Rpb24gdGVzdFhNTERvY3VtZW50KGVsZW1lbnQsIHJlc3Vs
dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFl
NDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Lm93bmVyRG9jdW1lbnQg
IT09IHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9
CisgICAgICAgICkodGFyZ2V0LCByZXN1bHQpIGlzIHRydWUKK1BBU1MgKAorICAgICAgICAgICAg
ZnVuY3Rpb24gdGVzdERvY3VtZW50VHlwZShlbGVtZW50LCByZXN1bHQpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoZWxlbWVudC5vd25lckRvY3VtZW50ICE9PSByZXN1bHQpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICApKHRhcmdl
dCwgcmVzdWx0KSBpcyB0cnVlCitQQVNTICgKKyAgICAgICAgICAgIGZ1bmN0aW9uIHRlc3REb2N1
bWVudEZyYWdtZW50KGVsZW1lbnQsIHJlc3VsdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChlbGVtZW50Lm93bmVyRG9jdW1lbnQgIT09IHJlc3VsdCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICkodGFyZ2V0LCByZXN1bHQpIGlz
IHRydWUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvZG9tL2RvbWppdC1hY2Nlc3Nvci1v
d25lci1kb2N1bWVudC5odG1sIGIvTGF5b3V0VGVzdHMvanMvZG9tL2RvbWppdC1hY2Nlc3Nvci1v
d25lci1kb2N1bWVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE4ZmY5MDk3ZmFhYTBmZWUyYTQ3NzdmMGRj
MmM3ZTRlNWQzZjhjNGEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9kb20vZG9t
aml0LWFjY2Vzc29yLW93bmVyLWRvY3VtZW50Lmh0bWwKQEAgLTAsMCArMSw1NiBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxpZnJhbWUgaWQ9Inht
bGZyYW1lIiBvbmxvYWQ9ImZyYW1lTG9hZGVkKCkiIHN0eWxlPSJoZWlnaHQ6MHB4IiBzcmM9ImRh
dGE6YXBwbGljYXRpb24veGh0bWwreG1sLDw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VU
Ri04Jz8+PGJvZHkvPiI+PC9pZnJhbWU+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oJ1Rlc3QgRE9N
SklUIG5vZGVUeXBlIGFjY2Vzc29yIHdvcmtzLicpOworCitpZiAod2luZG93LnRlc3RSdW5uZXIp
CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisKK3ZhciB0YXJnZXQgPSBudWxsOwor
dmFyIHJlc3VsdCA9IG51bGw7CitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICB2YXIgeG1sRG9j
dW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneG1sZnJhbWUnKS5jb250ZW50RG9jdW1l
bnQ7CisgICAgdmFyIHRhcmdldHMgPSBbCisgICAgICAgIFsnRWxlbWVudCcsIGRvY3VtZW50LmJv
ZHksIGRvY3VtZW50XSwKKyAgICAgICAgWydBdHRyJywgZG9jdW1lbnQuY3JlYXRlQXR0cmlidXRl
KCdDb2NvYScpLCBkb2N1bWVudF0sCisgICAgICAgIFsnVGV4dCcsIGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKCdDb2NvYScpLCBkb2N1bWVudF0sCisgICAgICAgIFsnQ0RBVEEnLCB4bWxEb2N1bWVu
dC5jcmVhdGVDREFUQVNlY3Rpb24oJ3Rlc3QnKSwgeG1sRG9jdW1lbnRdLAorICAgICAgICBbJ1By
b2Nlc3NpbmdJbnN0cnVjdGlvbicsIHhtbERvY3VtZW50LmNyZWF0ZVByb2Nlc3NpbmdJbnN0cnVj
dGlvbigndGFyZ2V0JywgJ3Rlc3QnKSwgeG1sRG9jdW1lbnRdLAorICAgICAgICBbJ0NvbW1lbnQn
LCBkb2N1bWVudC5jcmVhdGVDb21tZW50KCdDb2NvYScpLCBkb2N1bWVudF0sCisgICAgICAgIFsn
RG9jdW1lbnQnLCBkb2N1bWVudCwgbnVsbF0sCisgICAgICAgIFsnWE1MRG9jdW1lbnQnLCB4bWxE
b2N1bWVudCwgbnVsbF0sCisgICAgICAgIFsnRG9jdW1lbnRUeXBlJywgZG9jdW1lbnQuZG9jdHlw
ZSwgZG9jdW1lbnRdLAorICAgICAgICBbJ0RvY3VtZW50RnJhZ21lbnQnLCBkb2N1bWVudC5jcmVh
dGVEb2N1bWVudEZyYWdtZW50KCksIGRvY3VtZW50XSwKKyAgICBdOworCisgICAgZm9yIChbbmFt
ZSwgdGFyZ2V0LCByZXN1bHRdIG9mIHRhcmdldHMpIHsKKyAgICAgICAgdmFyIHRleHQgPSBgCisg
ICAgICAgICAgICBmdW5jdGlvbiB0ZXN0JHtuYW1lfShlbGVtZW50LCByZXN1bHQpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5vd25lckRvY3VtZW50ICE9PSByZXN1bHQp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICBg
OworICAgICAgICBzaG91bGRCZVRydWUoYCgke3RleHR9KSh0YXJnZXQsIHJlc3VsdClgKTsKKyAg
ICB9CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90
aWZ5RG9uZSgpOworfQorZnVuY3Rpb24gZnJhbWVMb2FkZWQoKQoreworICAgIHJ1blRlc3QoKTsK
K30KKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293866</attachid>
            <date>2016-11-03 22:21:19 -0700</date>
            <delta_ts>2016-11-06 10:21:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164004-20161104141717.patch</filename>
            <type>text/plain</type>
            <size>10922</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4MzY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWEyMzllYjdhNDU5NmI4
OTg1Y2MwMzE1YWQzZDRlN2RlMGZmZjY5ZS4uOTdiMzhkNmU3YWY0Y2IyMWY3ZmMxZjg4MWI1NTI5
ODg1OWFiMzIyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE2LTExLTAzICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIFtET01KSVRdIElt
cGxlbWVudCBOb2RlOjpvd25lckRvY3VtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQwMDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUZXN0OiBqcy9kb20vZG9taml0LWFjY2Vzc29yLW93bmVyLWRv
Y3VtZW50Lmh0bWwKKworICAgICAgICBTdGlsbCBJIGNhbm5vdCByZXByb2R1Y2UgdGhpcyBjcmFz
aCBpbiB4NjQgZW52aXJvbm1lbnQsIGFjY29yZGluZyB0byB0aGUgY3Jhc2ggbG9nLCBpdCBhY2Nl
c3NlcyAweDggYWRkcmVzcy4KKyAgICAgICAgVGhpcyBjYW4gaGFwcGVuIGlmIGRvY3VtZW50KCkg
YWNjaWRlbnRhbGx5IHJldHVybnMgbnVsbHB0ci4gSW4gdGhlIEMrKyBvd25lckRvY3VtZW50IGlt
cGxlbWVudGF0aW9uLAorICAgICAgICBpZiBkb2N1bWVudCgpIHJldHVybnMgbnVsbHB0ciwgaXQg
anVzdCByZXR1cm5zIG51bGxwdHIuIEJ1dCBpbiB0aGUgRE9NSklUIGltcGxlbWVudGF0aW9uLCB3
ZSBhc3N1bWUgdGhhdAorICAgICAgICBkb2N1bWVudCgpIHdvbid0IHJldHVybiBudWxscHRyIGFu
ZCBhY2Nlc3MgdGhlIG1lbWJlciBvZiBpdC4KKworICAgICAgICBUaGlzIHBhdGNoIGFsaWducyB0
aGUgRE9NSklUIGltcGxlbWVudGF0aW9uIHN0cmljdGx5IHRvIHRoZSBDKysgb25lLgorCisgICAg
ICAgICogZG9tL05vZGUuaWRsOgorICAgICAgICAqIGRvbWppdC9KU05vZGVET01KSVQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Tm9kZU93bmVyRG9jdW1lbnRET01KSVQ6OmNoZWNrRE9NKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGVPd25lckRvY3VtZW50RE9NSklUOjpjYWxsRE9NR2V0dGVyKToK
KwogMjAxNi0xMS0wMyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBBZGQgYW4gYXNzZXJ0aW9uIHRvIGRpYWdub3NlIHN0cmVzcyBHQyBib3RzIHRlc3QgZmFpbHVy
ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmlkbCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmlkbAppbmRleCA1OGZlNmRlOGVhNWFhYjA3MWE4MjBkYmJhYzZlMWNmN2M5
ZDdmY2U4Li5kODNmOWQzMjhlMDg4YzFhMWUzNDhlZjUzYzUzNjk4MzlhZDA4NzNkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L05vZGUuaWRsCkBAIC01Myw3ICs1Myw3IEBACiAgICAgW0RPTUpJVF0gcmVhZG9ubHkgYXR0cmli
dXRlIE5vZGU/IGxhc3RDaGlsZDsKICAgICBbRE9NSklUXSByZWFkb25seSBhdHRyaWJ1dGUgTm9k
ZT8gcHJldmlvdXNTaWJsaW5nOwogICAgIFtET01KSVRdIHJlYWRvbmx5IGF0dHJpYnV0ZSBOb2Rl
PyBuZXh0U2libGluZzsKLSAgICByZWFkb25seSBhdHRyaWJ1dGUgRG9jdW1lbnQ/IG93bmVyRG9j
dW1lbnQ7CisgICAgW0RPTUpJVF0gcmVhZG9ubHkgYXR0cmlidXRlIERvY3VtZW50PyBvd25lckRv
Y3VtZW50OwogCiAgICAgW0NFUmVhY3Rpb25zLCBDdXN0b20sIE1heVRocm93TGVnYWN5RXhjZXB0
aW9uXSBOb2RlIGluc2VydEJlZm9yZShOb2RlIG5ld0NoaWxkLCBOb2RlPyByZWZDaGlsZCk7CiAg
ICAgW0NFUmVhY3Rpb25zLCBDdXN0b20sIE1heVRocm93TGVnYWN5RXhjZXB0aW9uXSBOb2RlIHJl
cGxhY2VDaGlsZChOb2RlIG5ld0NoaWxkLCBOb2RlIG9sZENoaWxkKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbWppdC9KU05vZGVET01KSVQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
aml0L0pTTm9kZURPTUpJVC5jcHAKaW5kZXggZWU2YjJiMjVjODM2ODFjY2E5OTBkODg5MDgzNDU2
YjA5MzY1M2FjNy4uYzE0NzhmZTNhY2FiZTRkYjYwNmFmM2MxM2Q2ZGRiYTIzNDc0ZmVjMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9taml0L0pTTm9kZURPTUpJVC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9taml0L0pTTm9kZURPTUpJVC5jcHAKQEAgLTE1Nyw2ICsxNTcsNDYgQEAg
UmVmPEpTQzo6RE9NSklUOjpDYWxsRE9NR2V0dGVyUGF0Y2hwb2ludD4gTm9kZU5vZGVUeXBlRE9N
SklUOjpjYWxsRE9NR2V0dGVyKCkKICAgICByZXR1cm4gcGF0Y2hwb2ludDsKIH0KIAorUmVmPEpT
Qzo6RE9NSklUOjpQYXRjaHBvaW50PiBOb2RlT3duZXJEb2N1bWVudERPTUpJVDo6Y2hlY2tET00o
KQoreworICAgIHJldHVybiBET01KSVQ6OmNoZWNrRE9NPE5vZGU+KCk7Cit9CisKK1JlZjxKU0M6
OkRPTUpJVDo6Q2FsbERPTUdldHRlclBhdGNocG9pbnQ+IE5vZGVPd25lckRvY3VtZW50RE9NSklU
OjpjYWxsRE9NR2V0dGVyKCkKK3sKKyAgICBSZWY8SlNDOjpET01KSVQ6OkNhbGxET01HZXR0ZXJQ
YXRjaHBvaW50PiBwYXRjaHBvaW50ID0gSlNDOjpET01KSVQ6OkNhbGxET01HZXR0ZXJQYXRjaHBv
aW50OjpjcmVhdGUoKTsKKyAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAy
OworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0oQ0NhbGxIZWxwZXJzJiBqaXQsIEpT
Qzo6RE9NSklUOjpQYXRjaHBvaW50UGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0ID0gcGFyYW1zWzBdLmpzVmFsdWVSZWdzKCk7CisgICAgICAgIEdQUlJlZyBub2Rl
ID0gcGFyYW1zWzFdLmdwcigpOworICAgICAgICBHUFJSZWcgZ2xvYmFsT2JqZWN0ID0gcGFyYW1z
WzJdLmdwcigpOworICAgICAgICBKU1ZhbHVlIGdsb2JhbE9iamVjdFZhbHVlID0gcGFyYW1zWzJd
LnZhbHVlKCk7CisgICAgICAgIEdQUlJlZyB3cmFwcGVkID0gcGFyYW1zLmdwU2NyYXRjaCgwKTsK
KyAgICAgICAgR1BSUmVnIGRvY3VtZW50ID0gcGFyYW1zLmdwU2NyYXRjaCgxKTsKKworICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mobm9kZSwgSlNOb2RlOjpvZmZzZXRP
ZldyYXBwZWQoKSksIHdyYXBwZWQpOworICAgICAgICBET01KSVQ6OmxvYWREb2N1bWVudChqaXQs
IHdyYXBwZWQsIGRvY3VtZW50KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIUNBU1RfT0ZGU0VU
KEV2ZW50VGFyZ2V0KiwgTm9kZSopKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIUNBU1RfT0ZG
U0VUKE5vZGUqLCBEb2N1bWVudCopKTsKKworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IG51bGxDYXNlczsKKyAgICAgICAgLy8gSW4gQysrIG93bmVyRG9jdW1lbnQgaW1wbGVtZW50YXRp
b24sIGlmICZkb2N1bWVudCgpIGJlY29tZXMgbnVsbHB0ciwgaXQganVzdCByZXR1cm5zIG51bGxw
dHIuCisgICAgICAgIC8vIERPTUpJVCBpbXBsZW1lbnRhdGlvbiBzdHJpY3RseSBmb2xsb3dzIHRo
ZSBDKysgb25lLgorICAgICAgICBudWxsQ2FzZXMuYXBwZW5kKGppdC5icmFuY2hUZXN0UHRyKEND
YWxsSGVscGVyczo6WmVybywgZG9jdW1lbnQpKTsKKyAgICAgICAgLy8gSWYgdGhlIHx0aGlzfCBp
cyB0aGUgZG9jdW1lbnQgaXRzZWxmLCBvd25lckRvY3VtZW50IHdpbGwgcmV0dXJuIG51bGwuCisg
ICAgICAgIG51bGxDYXNlcy5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkVxdWFs
LCB3cmFwcGVkLCBkb2N1bWVudCkpOworICAgICAgICBET01KSVQ6OnRvV3JhcHBlcjxEb2N1bWVu
dD4oaml0LCBwYXJhbXMsIGRvY3VtZW50LCBnbG9iYWxPYmplY3QsIHJlc3VsdCwgRE9NSklUOjp0
b1dyYXBwZXJTbG93PERvY3VtZW50PiwgZ2xvYmFsT2JqZWN0VmFsdWUpOworICAgICAgICBhdXRv
IGRvbmUgPSBqaXQuanVtcCgpOworCisgICAgICAgIG51bGxDYXNlcy5saW5rKCZqaXQpOworICAg
ICAgICBqaXQubW92ZVZhbHVlKGpzTnVsbCgpLCByZXN1bHQpOworICAgICAgICBkb25lLmxpbmso
JmppdCk7CisgICAgICAgIHJldHVybiBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0KCk7CisgICAgfSk7
CisgICAgcGF0Y2hwb2ludC0+ZWZmZWN0ID0gSlNDOjpET01KSVQ6OkVmZmVjdDo6Zm9yRGVmKERP
TUpJVDo6QWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6Tm9kZV9vd25lckRvY3VtZW50KTsKKyAgICBy
ZXR1cm4gcGF0Y2hwb2ludDsKK30KKwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA0ZDUyMWNhZDBiZWJh
OGU0MzkyMzM5Y2Q4YzkxZGJmMWFjZjUwYWE5Li5lNDdlYTg0ZDBhZTM5OWVlMjlhYzc3NTA2OWFi
NTg3NWRjZWRjZTM2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTYtMTEtMDMgIFl1c3VrZSBT
dXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgW0RPTUpJVF0gSW1wbGVt
ZW50IE5vZGU6Om93bmVyRG9jdW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NDAwNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICoganMvZG9tL2RvbWppdC1hY2Nlc3Nvci1vd25lci1kb2N1bWVudC1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL2RvbS9kb21qaXQtYWNjZXNzb3Itb3du
ZXItZG9jdW1lbnQuaHRtbDogQWRkZWQuCisKIDIwMTYtMTEtMDMgIE15bGVzIEMuIE1heGZpZWxk
ICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViR0wyXSBJbXBsZW1lbnQgZ2V0
QnVmZmVyU3ViRGF0YSgpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9kb20vZG9taml0LWFj
Y2Vzc29yLW93bmVyLWRvY3VtZW50LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2pzL2RvbS9k
b21qaXQtYWNjZXNzb3Itb3duZXItZG9jdW1lbnQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBi
M2I5NjI4ZjkzYjg4NzgzOTRlYTI4ZWMyOTkwNzc0MzE0NzNlYTkKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9qcy9kb20vZG9taml0LWFjY2Vzc29yLW93bmVyLWRvY3VtZW50LWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDEwOSBAQAorVGVzdCBET01KSVQgbm9kZVR5cGUgYWNjZXNzb3Ig
d29ya3MuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKK1BBU1MgKAorICAgICAgICAgICAgZnVu
Y3Rpb24gdGVzdEVsZW1lbnQoZWxlbWVudCwgcmVzdWx0KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGVsZW1lbnQub3duZXJEb2N1bWVudCAhPT0gcmVzdWx0KQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKSh0YXJnZXQsIHJlc3Vs
dCkgaXMgdHJ1ZQorUEFTUyAoCisgICAgICAgICAgICBmdW5jdGlvbiB0ZXN0QXR0cihlbGVtZW50
LCByZXN1bHQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCAxZTQ7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5vd25lckRv
Y3VtZW50ICE9PSByZXN1bHQpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgfQorICAgICAgICApKHRhcmdldCwgcmVzdWx0KSBpcyB0cnVlCitQQVNTICgKKyAgICAg
ICAgICAgIGZ1bmN0aW9uIHRlc3RUZXh0KGVsZW1lbnQsIHJlc3VsdCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChlbGVtZW50Lm93bmVyRG9jdW1lbnQgIT09IHJlc3VsdCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICkodGFyZ2V0
LCByZXN1bHQpIGlzIHRydWUKK1BBU1MgKAorICAgICAgICAgICAgZnVuY3Rpb24gdGVzdENEQVRB
KGVsZW1lbnQsIHJlc3VsdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50
Lm93bmVyRG9jdW1lbnQgIT09IHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICB9CisgICAgICAgICkodGFyZ2V0LCByZXN1bHQpIGlzIHRydWUKK1BBU1Mg
KAorICAgICAgICAgICAgZnVuY3Rpb24gdGVzdFByb2Nlc3NpbmdJbnN0cnVjdGlvbihlbGVtZW50
LCByZXN1bHQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCAxZTQ7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5vd25lckRv
Y3VtZW50ICE9PSByZXN1bHQpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgfQorICAgICAgICApKHRhcmdldCwgcmVzdWx0KSBpcyB0cnVlCitQQVNTICgKKyAgICAg
ICAgICAgIGZ1bmN0aW9uIHRlc3RDb21tZW50KGVsZW1lbnQsIHJlc3VsdCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Lm93bmVyRG9jdW1lbnQgIT09IHJlc3VsdCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICkodGFy
Z2V0LCByZXN1bHQpIGlzIHRydWUKK1BBU1MgKAorICAgICAgICAgICAgZnVuY3Rpb24gdGVzdERv
Y3VtZW50KGVsZW1lbnQsIHJlc3VsdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChl
bGVtZW50Lm93bmVyRG9jdW1lbnQgIT09IHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICkodGFyZ2V0LCByZXN1bHQpIGlzIHRydWUK
K1BBU1MgKAorICAgICAgICAgICAgZnVuY3Rpb24gdGVzdFhNTERvY3VtZW50KGVsZW1lbnQsIHJl
c3VsdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IDFlNDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Lm93bmVyRG9jdW1l
bnQgIT09IHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICkodGFyZ2V0LCByZXN1bHQpIGlzIHRydWUKK1BBU1MgKAorICAgICAgICAg
ICAgZnVuY3Rpb24gdGVzdERvY3VtZW50VHlwZShlbGVtZW50LCByZXN1bHQpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5vd25lckRvY3VtZW50ICE9PSByZXN1bHQpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICApKHRh
cmdldCwgcmVzdWx0KSBpcyB0cnVlCitQQVNTICgKKyAgICAgICAgICAgIGZ1bmN0aW9uIHRlc3RE
b2N1bWVudEZyYWdtZW50KGVsZW1lbnQsIHJlc3VsdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChlbGVtZW50Lm93bmVyRG9jdW1lbnQgIT09IHJlc3VsdCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICkodGFyZ2V0LCByZXN1bHQp
IGlzIHRydWUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvZG9tL2RvbWppdC1hY2Nlc3Nv
ci1vd25lci1kb2N1bWVudC5odG1sIGIvTGF5b3V0VGVzdHMvanMvZG9tL2RvbWppdC1hY2Nlc3Nv
ci1vd25lci1kb2N1bWVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE4ZmY5MDk3ZmFhYTBmZWUyYTQ3Nzdm
MGRjMmM3ZTRlNWQzZjhjNGEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9kb20v
ZG9taml0LWFjY2Vzc29yLW93bmVyLWRvY3VtZW50Lmh0bWwKQEAgLTAsMCArMSw1NiBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxpZnJhbWUgaWQ9
InhtbGZyYW1lIiBvbmxvYWQ9ImZyYW1lTG9hZGVkKCkiIHN0eWxlPSJoZWlnaHQ6MHB4IiBzcmM9
ImRhdGE6YXBwbGljYXRpb24veGh0bWwreG1sLDw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9
J1VURi04Jz8+PGJvZHkvPiI+PC9pZnJhbWU+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oJ1Rlc3Qg
RE9NSklUIG5vZGVUeXBlIGFjY2Vzc29yIHdvcmtzLicpOworCitpZiAod2luZG93LnRlc3RSdW5u
ZXIpCisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisKK3ZhciB0YXJnZXQgPSBudWxs
OwordmFyIHJlc3VsdCA9IG51bGw7CitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICB2YXIgeG1s
RG9jdW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneG1sZnJhbWUnKS5jb250ZW50RG9j
dW1lbnQ7CisgICAgdmFyIHRhcmdldHMgPSBbCisgICAgICAgIFsnRWxlbWVudCcsIGRvY3VtZW50
LmJvZHksIGRvY3VtZW50XSwKKyAgICAgICAgWydBdHRyJywgZG9jdW1lbnQuY3JlYXRlQXR0cmli
dXRlKCdDb2NvYScpLCBkb2N1bWVudF0sCisgICAgICAgIFsnVGV4dCcsIGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKCdDb2NvYScpLCBkb2N1bWVudF0sCisgICAgICAgIFsnQ0RBVEEnLCB4bWxEb2N1
bWVudC5jcmVhdGVDREFUQVNlY3Rpb24oJ3Rlc3QnKSwgeG1sRG9jdW1lbnRdLAorICAgICAgICBb
J1Byb2Nlc3NpbmdJbnN0cnVjdGlvbicsIHhtbERvY3VtZW50LmNyZWF0ZVByb2Nlc3NpbmdJbnN0
cnVjdGlvbigndGFyZ2V0JywgJ3Rlc3QnKSwgeG1sRG9jdW1lbnRdLAorICAgICAgICBbJ0NvbW1l
bnQnLCBkb2N1bWVudC5jcmVhdGVDb21tZW50KCdDb2NvYScpLCBkb2N1bWVudF0sCisgICAgICAg
IFsnRG9jdW1lbnQnLCBkb2N1bWVudCwgbnVsbF0sCisgICAgICAgIFsnWE1MRG9jdW1lbnQnLCB4
bWxEb2N1bWVudCwgbnVsbF0sCisgICAgICAgIFsnRG9jdW1lbnRUeXBlJywgZG9jdW1lbnQuZG9j
dHlwZSwgZG9jdW1lbnRdLAorICAgICAgICBbJ0RvY3VtZW50RnJhZ21lbnQnLCBkb2N1bWVudC5j
cmVhdGVEb2N1bWVudEZyYWdtZW50KCksIGRvY3VtZW50XSwKKyAgICBdOworCisgICAgZm9yIChb
bmFtZSwgdGFyZ2V0LCByZXN1bHRdIG9mIHRhcmdldHMpIHsKKyAgICAgICAgdmFyIHRleHQgPSBg
CisgICAgICAgICAgICBmdW5jdGlvbiB0ZXN0JHtuYW1lfShlbGVtZW50LCByZXN1bHQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5vd25lckRvY3VtZW50ICE9PSByZXN1
bHQpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICBgOworICAgICAgICBzaG91bGRCZVRydWUoYCgke3RleHR9KSh0YXJnZXQsIHJlc3VsdClgKTsK
KyAgICB9CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIu
bm90aWZ5RG9uZSgpOworfQorZnVuY3Rpb24gZnJhbWVMb2FkZWQoKQoreworICAgIHJ1blRlc3Qo
KTsKK30KKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="316686"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>