<?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>138619</bug_id>
          
          <creation_ts>2014-11-11 11:55:18 -0800</creation_ts>
          <short_desc>Speed up HTMLTextFormControlElement::setInnerTextValue() a bit</short_desc>
          <delta_ts>2014-11-12 12:07:59 -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>DOM</component>
          <version>528+ (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="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>kling</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1047916</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-11 11:55:18 -0800</bug_when>
    <thetext>Speed up HTMLTextFormControlElement::setInnerTextValue() a bit by:
- Not doing a virtual isTextFormControl() call. Relying on innerTextElement() not returning null is sufficient
- Caching the result of innerTextElement() instead of repeatedly calling that virtual function
- De-virtualizing setFormControlValueMatchesRenderer() / formControlValueMatchesRenderer() as these are never overridden.
- Moving the code constructing the innerTextValue from a TextControlInnerTextElement from innerTextValue() to a new innerTextValueFrom(TextControlInnerTextElement&amp;) inline and call this new function from
  setInnerTextValue() to avoid calling innerTextElement() again making sure it is non-null
- Do the tree traversal from innerTextElement&apos;s firstChild instead of from innerTextElement. The innerTextElement is a TextControlInnerTextElement. Therefore, it cannot be an HTMLBRElement or a Text node.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047919</commentid>
    <comment_count>1</comment_count>
      <attachid>241366</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-11 11:59:24 -0800</bug_when>
    <thetext>Created attachment 241366
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048089</commentid>
    <comment_count>2</comment_count>
      <attachid>241366</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-11 20:21:49 -0800</bug_when>
    <thetext>Comment on attachment 241366
Patch

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

&gt; Source/WebCore/html/HTMLTextFormControlElement.cpp:524
&gt; +static inline String finishText(StringBuilder&amp; result)

Now that you moved this function, I noticed that it does not have a great name. Maybe finishInnerTextValue?

&gt; Source/WebCore/html/HTMLTextFormControlElement.cpp:533
&gt; +static inline String innerTextValueFrom(TextControlInnerTextElement&amp; innerText)

Do we really need to inline this? It seems like there&apos;s enough code here that the function call overhead is not excessive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048092</commentid>
    <comment_count>3</comment_count>
      <attachid>241366</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-11 20:30:37 -0800</bug_when>
    <thetext>Comment on attachment 241366
Patch

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

&gt;&gt; Source/WebCore/html/HTMLTextFormControlElement.cpp:524
&gt;&gt; +static inline String finishText(StringBuilder&amp; result)
&gt; 
&gt; Now that you moved this function, I noticed that it does not have a great name. Maybe finishInnerTextValue?

How about void stripTrailingNewLineCharacter(StringBuilder&amp;) ? and move the result.toString() to the callers? It is clearer IMHO than &quot;finish*&quot;. Finish doesn&apos;t really tell you what the function does.

&gt;&gt; Source/WebCore/html/HTMLTextFormControlElement.cpp:533
&gt;&gt; +static inline String innerTextValueFrom(TextControlInnerTextElement&amp; innerText)
&gt; 
&gt; Do we really need to inline this? It seems like there&apos;s enough code here that the function call overhead is not excessive.

Hmm. The cost of iterating through the descendants and construct the String probably makes the cost of the function call negligible. I marked it as inline because this code used to be inlined in innerTextValue() and I wanted to make sure I did not cause that one to regress while trying to make setInnerTextValue() faster. I will check if I see any perf difference, if there isn&apos;t then I&apos;ll drop the inline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048093</commentid>
    <comment_count>4</comment_count>
      <attachid>241366</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-11 20:31:24 -0800</bug_when>
    <thetext>Comment on attachment 241366
Patch

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

&gt;&gt;&gt; Source/WebCore/html/HTMLTextFormControlElement.cpp:524
&gt;&gt;&gt; +static inline String finishText(StringBuilder&amp; result)
&gt;&gt; 
&gt;&gt; Now that you moved this function, I noticed that it does not have a great name. Maybe finishInnerTextValue?
&gt; 
&gt; How about void stripTrailingNewLineCharacter(StringBuilder&amp;) ? and move the result.toString() to the callers? It is clearer IMHO than &quot;finish*&quot;. Finish doesn&apos;t really tell you what the function does.

strip or trim, hard for me to tell which one would be better here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048156</commentid>
    <comment_count>5</comment_count>
      <attachid>241366</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-12 09:00:16 -0800</bug_when>
    <thetext>Comment on attachment 241366
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/html/HTMLTextFormControlElement.cpp:524
&gt;&gt;&gt;&gt; +static inline String finishText(StringBuilder&amp; result)
&gt;&gt;&gt; 
&gt;&gt;&gt; Now that you moved this function, I noticed that it does not have a great name. Maybe finishInnerTextValue?
&gt;&gt; 
&gt;&gt; How about void stripTrailingNewLineCharacter(StringBuilder&amp;) ? and move the result.toString() to the callers? It is clearer IMHO than &quot;finish*&quot;. Finish doesn&apos;t really tell you what the function does.
&gt; 
&gt; strip or trim, hard for me to tell which one would be better here.

I think I included to the toString originally because I was trying to share as much code as possible.

I think that &quot;strip&quot;, &quot;trim&quot;, or &quot;remove&quot; would all be OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048157</commentid>
    <comment_count>6</comment_count>
      <attachid>241366</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-12 09:00:46 -0800</bug_when>
    <thetext>Comment on attachment 241366
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/WebCore/html/HTMLTextFormControlElement.cpp:524
&gt;&gt;&gt;&gt;&gt; +static inline String finishText(StringBuilder&amp; result)
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Now that you moved this function, I noticed that it does not have a great name. Maybe finishInnerTextValue?
&gt;&gt;&gt; 
&gt;&gt;&gt; How about void stripTrailingNewLineCharacter(StringBuilder&amp;) ? and move the result.toString() to the callers? It is clearer IMHO than &quot;finish*&quot;. Finish doesn&apos;t really tell you what the function does.
&gt;&gt; 
&gt;&gt; strip or trim, hard for me to tell which one would be better here.
&gt; 
&gt; I think I included to the toString originally because I was trying to share as much code as possible.
&gt; 
&gt; I think that &quot;strip&quot;, &quot;trim&quot;, or &quot;remove&quot; would all be OK.

But it’s &quot;newline character&quot;, not &quot;new line character&quot;, so it should be stripTrailingNewlineCharacter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048158</commentid>
    <comment_count>7</comment_count>
      <attachid>241366</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-12 09:01:09 -0800</bug_when>
    <thetext>Comment on attachment 241366
Patch

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

&gt;&gt;&gt;&gt;&gt;&gt; Source/WebCore/html/HTMLTextFormControlElement.cpp:524
&gt;&gt;&gt;&gt;&gt;&gt; +static inline String finishText(StringBuilder&amp; result)
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; Now that you moved this function, I noticed that it does not have a great name. Maybe finishInnerTextValue?
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; How about void stripTrailingNewLineCharacter(StringBuilder&amp;) ? and move the result.toString() to the callers? It is clearer IMHO than &quot;finish*&quot;. Finish doesn&apos;t really tell you what the function does.
&gt;&gt;&gt; 
&gt;&gt;&gt; strip or trim, hard for me to tell which one would be better here.
&gt;&gt; 
&gt;&gt; I think I included to the toString originally because I was trying to share as much code as possible.
&gt;&gt; 
&gt;&gt; I think that &quot;strip&quot;, &quot;trim&quot;, or &quot;remove&quot; would all be OK.
&gt; 
&gt; But it’s &quot;newline character&quot;, not &quot;new line character&quot;, so it should be stripTrailingNewlineCharacter.

I think stripTrailingNewline would be a fine name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048159</commentid>
    <comment_count>8</comment_count>
      <attachid>241366</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-11-12 09:01:53 -0800</bug_when>
    <thetext>Comment on attachment 241366
Patch

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

&gt;&gt;&gt;&gt;&gt;&gt;&gt; Source/WebCore/html/HTMLTextFormControlElement.cpp:524
&gt;&gt;&gt;&gt;&gt;&gt;&gt; +static inline String finishText(StringBuilder&amp; result)
&gt;&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt;&gt; Now that you moved this function, I noticed that it does not have a great name. Maybe finishInnerTextValue?
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; How about void stripTrailingNewLineCharacter(StringBuilder&amp;) ? and move the result.toString() to the callers? It is clearer IMHO than &quot;finish*&quot;. Finish doesn&apos;t really tell you what the function does.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; strip or trim, hard for me to tell which one would be better here.
&gt;&gt;&gt; 
&gt;&gt;&gt; I think I included to the toString originally because I was trying to share as much code as possible.
&gt;&gt;&gt; 
&gt;&gt;&gt; I think that &quot;strip&quot;, &quot;trim&quot;, or &quot;remove&quot; would all be OK.
&gt;&gt; 
&gt;&gt; But it’s &quot;newline character&quot;, not &quot;new line character&quot;, so it should be stripTrailingNewlineCharacter.
&gt; 
&gt; I think stripTrailingNewline would be a fine name.

And inlining the function seems a little strange. The process of building the string is doing memory allocation, so function call overhead should be negligible by comparison; code sharing would be better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048164</commentid>
    <comment_count>9</comment_count>
      <attachid>241427</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-12 09:16:41 -0800</bug_when>
    <thetext>Created attachment 241427
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048165</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-12 09:17:16 -0800</bug_when>
    <thetext>Thanks, I renamed to stripTrailingNewline() and dropped the inline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048203</commentid>
    <comment_count>11</comment_count>
      <attachid>241435</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-12 11:41:47 -0800</bug_when>
    <thetext>Created attachment 241435
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048213</commentid>
    <comment_count>12</comment_count>
      <attachid>241435</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-12 12:07:54 -0800</bug_when>
    <thetext>Comment on attachment 241435
Patch

Clearing flags on attachment: 241435

Committed r176030: &lt;http://trac.webkit.org/changeset/176030&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048214</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-12 12:07:59 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241366</attachid>
            <date>2014-11-11 11:59:24 -0800</date>
            <delta_ts>2014-11-12 09:16:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138619-20141111115928.patch</filename>
            <type>text/plain</type>
            <size>6503</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1OTU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTkxNjhmNjFhYTZkNTlk
MDFmZDBlZDcxYzA1Y2RhOGRkMTZjMGI3YS4uZjQ2YTJlMTk5YWRmMTFhNDM4OTBkOTVmNmNhMTBl
YWQ1YjEzNzE1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDE0LTExLTExICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgU3BlZWQgdXAgSFRNTFRleHRG
b3JtQ29udHJvbEVsZW1lbnQ6OnNldElubmVyVGV4dFZhbHVlKCkgYSBiaXQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODYxOQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNwZWVkIHVwIEhUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50OjpzZXRJbm5lclRleHRWYWx1ZSgpIGEgYml0IGJ5OgorICAgICAgICAt
IE5vdCBkb2luZyBhIHZpcnR1YWwgaXNUZXh0Rm9ybUNvbnRyb2woKSBjYWxsLiBSZWx5aW5nIG9u
IGlubmVyVGV4dEVsZW1lbnQoKQorICAgICAgICAgIG5vdCByZXR1cm5pbmcgbnVsbCBpcyBzdWZm
aWNpZW50LgorICAgICAgICAtIENhY2hpbmcgdGhlIHJlc3VsdCBvZiBpbm5lclRleHRFbGVtZW50
KCkgaW5zdGVhZCBvZiByZXBlYXRlZGx5IGNhbGxpbmcgdGhhdAorICAgICAgICAgIHZpcnR1YWwg
ZnVuY3Rpb24uCisgICAgICAgIC0gRGUtdmlydHVhbGl6aW5nIHNldEZvcm1Db250cm9sVmFsdWVN
YXRjaGVzUmVuZGVyZXIoKSAvCisgICAgICAgICAgZm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5k
ZXJlcigpIGFzIHRoZXNlIGFyZSBuZXZlciBvdmVycmlkZGVuLgorICAgICAgICAtIE1vdmluZyB0
aGUgY29kZSBjb25zdHJ1Y3RpbmcgdGhlIGlubmVyVGV4dFZhbHVlIGZyb20gYQorICAgICAgICAg
IFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudCBmcm9tIGlubmVyVGV4dFZhbHVlKCkgdG8gYSBu
ZXcKKyAgICAgICAgICBpbm5lclRleHRWYWx1ZUZyb20oVGV4dENvbnRyb2xJbm5lclRleHRFbGVt
ZW50JikgaW5saW5lIGFuZCBjYWxsIHRoaXMgbmV3CisgICAgICAgICAgZnVuY3Rpb24gZnJvbSBz
ZXRJbm5lclRleHRWYWx1ZSgpIHRvIGF2b2lkIGNhbGxpbmcgaW5uZXJUZXh0RWxlbWVudCgpIGFn
YWluCisgICAgICAgICAgbWFraW5nIHN1cmUgaXQgaXMgbm9uLW51bGwKKyAgICAgICAgLSBEbyB0
aGUgdHJlZSB0cmF2ZXJzYWwgZnJvbSBpbm5lclRleHRFbGVtZW50J3MgZmlyc3RDaGlsZCBpbnN0
ZWFkIG9mIGZyb20KKyAgICAgICAgICBpbm5lclRleHRFbGVtZW50LiBUaGUgaW5uZXJUZXh0RWxl
bWVudCBpcyBhIFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudC4KKyAgICAgICAgICBUaGVyZWZv
cmUsIGl0IGNhbm5vdCBiZSBhbiBIVE1MQlJFbGVtZW50IG9yIGEgVGV4dCBub2RlLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogaHRtbC9I
VE1MRm9ybUNvbnRyb2xFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRy
b2xFbGVtZW50Ojpmb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVz
UmVuZGVyZXIpOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6ZmluaXNoVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjppbm5l
clRleHRWYWx1ZUZyb20pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQ6OnNldElubmVyVGV4dFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50Ojppbm5lclRleHRWYWx1ZSk6CisKIDIwMTQtMTEtMTEgIEd5dXlvdW5n
IEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBVc2Ugc3RkOjp1bmlx
dWVfcHRyPD58c3RkOjptYWtlX3VuaXF1ZV9wdHIgaW4gUmVuZGVyVGhlbWVFZmw6OlRoZW1lUGFy
dENhY2hlRW50cnk6OmNyZWF0ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxGb3JtQ29udHJvbEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250
cm9sRWxlbWVudC5oCmluZGV4IDAwMjVkMGQyZjFiNTBiYzM1ODU1ZmRkNmRlZTQ3ZWQ2ZDAwNDlh
YzYuLmY0NzBlZTJiMmNhMjk2NjZjOThkN2U1ZjU4MjliYTY5ZjQ4MzE0NjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCkBAIC01OCw4ICs1OCw4IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCByZXNldCgpIHsgfQogCi0gICAgdmlydHVhbCBi
b29sIGZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlTWF0Y2hlc1JlbmRlcmVyOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldEZvcm1Db250cm9sVmFs
dWVNYXRjaGVzUmVuZGVyZXIoYm9vbCBiKSB7IG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIgPSBiOyB9
CisgICAgYm9vbCBmb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZU1hdGNoZXNSZW5kZXJlcjsgfQorICAgIHZvaWQgc2V0Rm9ybUNvbnRyb2xWYWx1
ZU1hdGNoZXNSZW5kZXJlcihib29sIGIpIHsgbV92YWx1ZU1hdGNoZXNSZW5kZXJlciA9IGI7IH0K
IAogICAgIGJvb2wgd2FzQ2hhbmdlZFNpbmNlTGFzdEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKSBj
b25zdCB7IHJldHVybiBtX3dhc0NoYW5nZWRTaW5jZUxhc3RGb3JtQ29udHJvbENoYW5nZUV2ZW50
OyB9CiAgICAgdm9pZCBzZXRDaGFuZ2VkU2luY2VMYXN0Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudChi
b29sKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudC5jcHAKaW5kZXggMzRiMjg0N2U0YmZjMjNlNzg4ZjBhMmQzOTQ1NGVhN2ViMDQ0MjEwZi4u
NDZiODJjMjI2MGNhMzBlYzBkMzMyZjVmYzhlMjMwNDZiN2M5YzBjMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAKQEAgLTUyMSw1
MiArNTIxLDUzIEBAIGJvb2wgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6Omxhc3RDaGFuZ2VX
YXNVc2VyRWRpdCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGFzdENoYW5nZVdhc1VzZXJFZGl0Owog
fQogCitzdGF0aWMgaW5saW5lIFN0cmluZyBmaW5pc2hUZXh0KFN0cmluZ0J1aWxkZXImIHJlc3Vs
dCkKK3sKKyAgICAvLyBSZW1vdmUgb25lIHRyYWlsaW5nIG5ld2xpbmU7IHRoZXJlJ3MgYWx3YXlz
IG9uZSB0aGF0J3MgY29sbGFwc2VkIG91dCBieSByZW5kZXJpbmcuCisgICAgc2l6ZV90IHNpemUg
PSByZXN1bHQubGVuZ3RoKCk7CisgICAgaWYgKHNpemUgJiYgcmVzdWx0W3NpemUgLSAxXSA9PSBu
ZXdsaW5lQ2hhcmFjdGVyKQorICAgICAgICByZXN1bHQucmVzaXplKHNpemUgLSAxKTsKKyAgICBy
ZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIGlubmVy
VGV4dFZhbHVlRnJvbShUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQmIGlubmVyVGV4dCkKK3sK
KyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBpbm5lclRl
eHQuZmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCAm
aW5uZXJUZXh0KSkgeworICAgICAgICBpZiAoaXM8SFRNTEJSRWxlbWVudD4oKm5vZGUpKQorICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChuZXdsaW5lQ2hhcmFjdGVyKTsKKyAgICAgICAgZWxzZSBp
ZiAoaXM8VGV4dD4oKm5vZGUpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChkb3duY2FzdDxU
ZXh0Pigqbm9kZSkuZGF0YSgpKTsKKyAgICB9CisgICAgcmV0dXJuIGZpbmlzaFRleHQocmVzdWx0
KTsKK30KKwogdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0SW5uZXJUZXh0VmFs
dWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBpZiAoIWlzVGV4dEZvcm1Db250cm9sKCkp
CisgICAgVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50KiBpbm5lclRleHQgPSBpbm5lclRleHRF
bGVtZW50KCk7CisgICAgaWYgKCFpbm5lclRleHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJv
b2wgdGV4dElzQ2hhbmdlZCA9IHZhbHVlICE9IGlubmVyVGV4dFZhbHVlKCk7Ci0gICAgaWYgKHRl
eHRJc0NoYW5nZWQgfHwgIWlubmVyVGV4dEVsZW1lbnQoKS0+aGFzQ2hpbGROb2RlcygpKSB7Cisg
ICAgQVNTRVJUKGlzVGV4dEZvcm1Db250cm9sKCkpOworICAgIGJvb2wgdGV4dElzQ2hhbmdlZCA9
IHZhbHVlICE9IGlubmVyVGV4dFZhbHVlRnJvbSgqaW5uZXJUZXh0KTsKKyAgICBpZiAodGV4dElz
Q2hhbmdlZCB8fCAhaW5uZXJUZXh0LT5oYXNDaGlsZE5vZGVzKCkpIHsKICAgICAgICAgaWYgKHRl
eHRJc0NoYW5nZWQgJiYgcmVuZGVyZXIoKSkgewogICAgICAgICAgICAgaWYgKEFYT2JqZWN0Q2Fj
aGUqIGNhY2hlID0gZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkKICAgICAgICAg
ICAgICAgICBjYWNoZS0+cG9zdE5vdGlmaWNhdGlvbih0aGlzLCBBWE9iamVjdENhY2hlOjpBWFZh
bHVlQ2hhbmdlZCwgVGFyZ2V0T2JzZXJ2YWJsZVBhcmVudCk7CiAgICAgICAgIH0KLSAgICAgICAg
aW5uZXJUZXh0RWxlbWVudCgpLT5zZXRJbm5lclRleHQodmFsdWUsIEFTU0VSVF9OT19FWENFUFRJ
T04pOworICAgICAgICBpbm5lclRleHQtPnNldElubmVyVGV4dCh2YWx1ZSwgQVNTRVJUX05PX0VY
Q0VQVElPTik7CiAKICAgICAgICAgaWYgKHZhbHVlLmVuZHNXaXRoKCdcbicpIHx8IHZhbHVlLmVu
ZHNXaXRoKCdccicpKQotICAgICAgICAgICAgaW5uZXJUZXh0RWxlbWVudCgpLT5hcHBlbmRDaGls
ZChIVE1MQlJFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSksIEFTU0VSVF9OT19FWENFUFRJT04p
OworICAgICAgICAgICAgaW5uZXJUZXh0LT5hcHBlbmRDaGlsZChIVE1MQlJFbGVtZW50OjpjcmVh
dGUoZG9jdW1lbnQoKSksIEFTU0VSVF9OT19FWENFUFRJT04pOwogICAgIH0KIAogICAgIHNldEZv
cm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIodHJ1ZSk7CiB9CiAKLXN0YXRpYyBTdHJpbmcg
ZmluaXNoVGV4dChTdHJpbmdCdWlsZGVyJiByZXN1bHQpCi17Ci0gICAgLy8gUmVtb3ZlIG9uZSB0
cmFpbGluZyBuZXdsaW5lOyB0aGVyZSdzIGFsd2F5cyBvbmUgdGhhdCdzIGNvbGxhcHNlZCBvdXQg
YnkgcmVuZGVyaW5nLgotICAgIHNpemVfdCBzaXplID0gcmVzdWx0Lmxlbmd0aCgpOwotICAgIGlm
IChzaXplICYmIHJlc3VsdFtzaXplIC0gMV0gPT0gbmV3bGluZUNoYXJhY3RlcikKLSAgICAgICAg
cmVzdWx0LnJlc2l6ZSgtLXNpemUpOwotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLX0K
LQogU3RyaW5nIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojppbm5lclRleHRWYWx1ZSgpIGNv
bnN0CiB7Ci0gICAgaWYgKCFpc1RleHRGb3JtQ29udHJvbCgpKQotICAgICAgICByZXR1cm4gZW1w
dHlTdHJpbmcoKTsKLQogICAgIFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudCogaW5uZXJUZXh0
ID0gaW5uZXJUZXh0RWxlbWVudCgpOwotICAgIGlmICghaW5uZXJUZXh0KQotICAgICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKLQotICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwotICAgIGZvciAo
Tm9kZSogbm9kZSA9IGlubmVyVGV4dDsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQo
bm9kZSwgaW5uZXJUZXh0KSkgewotICAgICAgICBpZiAoaXM8SFRNTEJSRWxlbWVudD4oKm5vZGUp
KQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChuZXdsaW5lQ2hhcmFjdGVyKTsKLSAgICAgICAg
ZWxzZSBpZiAoaXM8VGV4dD4oKm5vZGUpKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChkb3du
Y2FzdDxUZXh0Pigqbm9kZSkuZGF0YSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZpbmlzaFRleHQo
cmVzdWx0KTsKKyAgICByZXR1cm4gaW5uZXJUZXh0ID8gaW5uZXJUZXh0VmFsdWVGcm9tKCppbm5l
clRleHQpIDogZW1wdHlTdHJpbmcoKTsKIH0KIAogc3RhdGljIFBvc2l0aW9uIHBvc2l0aW9uRm9y
SW5kZXgoVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50KiBpbm5lclRleHQsIHVuc2lnbmVkIGlu
ZGV4KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241427</attachid>
            <date>2014-11-12 09:16:41 -0800</date>
            <delta_ts>2014-11-12 11:41:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138619-20141112091646.patch</filename>
            <type>text/plain</type>
            <size>6970</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2MDIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmIxNDkwZTA1Nzc1NDZj
MThiMjQ3MjRlZGFiODM4ODVlOWE4NDQyZS4uNGZlMzcxYzVmNTg4NDAwYjRmZmFiZWU0ZWZhZDFm
N2JjY2Y2YTY3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE0LTExLTEyICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgU3BlZWQgdXAgSFRNTFRleHRG
b3JtQ29udHJvbEVsZW1lbnQ6OnNldElubmVyVGV4dFZhbHVlKCkgYSBiaXQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODYxOQorCisgICAgICAgIFJl
dmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFNwZWVkIHVwIEhUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50OjpzZXRJbm5lclRleHRWYWx1ZSgpIGEgYml0IGJ5OgorICAgICAgICAtIE5v
dCBkb2luZyBhIHZpcnR1YWwgaXNUZXh0Rm9ybUNvbnRyb2woKSBjYWxsLiBSZWx5aW5nIG9uIGlu
bmVyVGV4dEVsZW1lbnQoKQorICAgICAgICAgIG5vdCByZXR1cm5pbmcgbnVsbCBpcyBzdWZmaWNp
ZW50LgorICAgICAgICAtIENhY2hpbmcgdGhlIHJlc3VsdCBvZiBpbm5lclRleHRFbGVtZW50KCkg
aW5zdGVhZCBvZiByZXBlYXRlZGx5IGNhbGxpbmcgdGhhdAorICAgICAgICAgIHZpcnR1YWwgZnVu
Y3Rpb24uCisgICAgICAgIC0gRGUtdmlydHVhbGl6aW5nIHNldEZvcm1Db250cm9sVmFsdWVNYXRj
aGVzUmVuZGVyZXIoKSAvCisgICAgICAgICAgZm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJl
cigpIGFzIHRoZXNlIGFyZSBuZXZlciBvdmVycmlkZGVuLgorICAgICAgICAtIE1vdmluZyB0aGUg
Y29kZSBjb25zdHJ1Y3RpbmcgdGhlIGlubmVyVGV4dFZhbHVlIGZyb20gYQorICAgICAgICAgIFRl
eHRDb250cm9sSW5uZXJUZXh0RWxlbWVudCBmcm9tIGlubmVyVGV4dFZhbHVlKCkgdG8gYSBuZXcK
KyAgICAgICAgICBpbm5lclRleHRWYWx1ZUZyb20oVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50
JikgZnVuY3Rpb24gYW5kIGNhbGwgdGhpcyBuZXcKKyAgICAgICAgICBmdW5jdGlvbiBmcm9tIHNl
dElubmVyVGV4dFZhbHVlKCkgdG8gYXZvaWQgY2FsbGluZyBpbm5lclRleHRFbGVtZW50KCkgYWdh
aW4KKyAgICAgICAgICBhbmQgbWFraW5nIHN1cmUgaXQgaXMgbm9uLW51bGwKKyAgICAgICAgLSBE
byB0aGUgdHJlZSB0cmF2ZXJzYWwgZnJvbSBpbm5lclRleHRFbGVtZW50J3MgZmlyc3RDaGlsZCBp
bnN0ZWFkIG9mIGZyb20KKyAgICAgICAgICBpbm5lclRleHRFbGVtZW50LiBUaGUgaW5uZXJUZXh0
RWxlbWVudCBpcyBhIFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudC4KKyAgICAgICAgICBUaGVy
ZWZvcmUsIGl0IGNhbm5vdCBiZSBhbiBIVE1MQlJFbGVtZW50IG9yIGEgVGV4dCBub2RlLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogaHRt
bC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNv
bnRyb2xFbGVtZW50Ojpmb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldEZvcm1Db250cm9sVmFsdWVNYXRj
aGVzUmVuZGVyZXIpOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6c3RyaXBUcmFpbGluZ05ld2xpbmUpOgorICAgICAgICAo
V2ViQ29yZTo6aW5uZXJUZXh0VmFsdWVGcm9tKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRJbm5lclRleHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6aW5uZXJUZXh0VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnZhbHVlV2l0aEhhcmRMaW5lQnJl
YWtzKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmlzaFRleHQpOiBEZWxldGVkLgorCiAyMDE0LTEx
LTEyICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAg
ICBbR1RLXSBFeHBvc2UgdXNlciBzY3JpcHQgbWVzc2FnZXMgdG8gR09iamVjdCBET00gYmluZGlu
Z3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgKaW5kZXgg
MDAyNWQwZDJmMWI1MGJjMzU4NTVmZGQ2ZGVlNDdlZDZkMDA0OWFjNi4uZjQ3MGVlMmIyY2EyOTY2
NmM5OGQ3ZTVmNTgyOWJhNjlmNDgzMTQ2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Rm9ybUNvbnRyb2xFbGVtZW50LmgKQEAgLTU4LDggKzU4LDggQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCB2b2lkIHJlc2V0KCkgeyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgZm9ybUNvbnRyb2xWYWx1
ZU1hdGNoZXNSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXI7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcihi
b29sIGIpIHsgbV92YWx1ZU1hdGNoZXNSZW5kZXJlciA9IGI7IH0KKyAgICBib29sIGZvcm1Db250
cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlTWF0Y2hlc1Jl
bmRlcmVyOyB9CisgICAgdm9pZCBzZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGJv
b2wgYikgeyBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyID0gYjsgfQogCiAgICAgYm9vbCB3YXNDaGFu
Z2VkU2luY2VMYXN0Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fd2Fz
Q2hhbmdlZFNpbmNlTGFzdEZvcm1Db250cm9sQ2hhbmdlRXZlbnQ7IH0KICAgICB2b2lkIHNldENo
YW5nZWRTaW5jZUxhc3RGb3JtQ29udHJvbENoYW5nZUV2ZW50KGJvb2wpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAppbmRleCAzNGIy
ODQ3ZTRiZmMyM2U3ODhmMGEyZDM5NDU0ZWE3ZWIwNDQyMTBmLi4wNTY0NjI5ZmQyMDcxMWE5NWE4
NDI4ODJjNGE4MWQ5ZGUzMWNlMzUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcApAQCAtNTIxLDUyICs1MjEsNTMgQEAgYm9vbCBI
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6bGFzdENoYW5nZVdhc1VzZXJFZGl0KCkgY29uc3QK
ICAgICByZXR1cm4gbV9sYXN0Q2hhbmdlV2FzVXNlckVkaXQ7CiB9CiAKK3N0YXRpYyBTdHJpbmcg
c3RyaXBUcmFpbGluZ05ld2xpbmUoU3RyaW5nQnVpbGRlciYgcmVzdWx0KQoreworICAgIC8vIFJl
bW92ZSBvbmUgdHJhaWxpbmcgbmV3bGluZTsgdGhlcmUncyBhbHdheXMgb25lIHRoYXQncyBjb2xs
YXBzZWQgb3V0IGJ5IHJlbmRlcmluZy4KKyAgICBzaXplX3Qgc2l6ZSA9IHJlc3VsdC5sZW5ndGgo
KTsKKyAgICBpZiAoc2l6ZSAmJiByZXN1bHRbc2l6ZSAtIDFdID09IG5ld2xpbmVDaGFyYWN0ZXIp
CisgICAgICAgIHJlc3VsdC5yZXNpemUoc2l6ZSAtIDEpOworfQorCitzdGF0aWMgU3RyaW5nIGlu
bmVyVGV4dFZhbHVlRnJvbShUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQmIGlubmVyVGV4dCkK
K3sKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBpbm5l
clRleHQuZmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2Rl
LCAmaW5uZXJUZXh0KSkgeworICAgICAgICBpZiAoaXM8SFRNTEJSRWxlbWVudD4oKm5vZGUpKQor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChuZXdsaW5lQ2hhcmFjdGVyKTsKKyAgICAgICAgZWxz
ZSBpZiAoaXM8VGV4dD4oKm5vZGUpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChkb3duY2Fz
dDxUZXh0Pigqbm9kZSkuZGF0YSgpKTsKKyAgICB9CisgICAgc3RyaXBUcmFpbGluZ05ld2xpbmUo
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Cit9CisKIHZvaWQgSFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNldElubmVyVGV4dFZhbHVlKGNvbnN0IFN0cmluZyYgdmFs
dWUpCiB7Ci0gICAgaWYgKCFpc1RleHRGb3JtQ29udHJvbCgpKQorICAgIFRleHRDb250cm9sSW5u
ZXJUZXh0RWxlbWVudCogaW5uZXJUZXh0ID0gaW5uZXJUZXh0RWxlbWVudCgpOworICAgIGlmICgh
aW5uZXJUZXh0KQogICAgICAgICByZXR1cm47CiAKLSAgICBib29sIHRleHRJc0NoYW5nZWQgPSB2
YWx1ZSAhPSBpbm5lclRleHRWYWx1ZSgpOwotICAgIGlmICh0ZXh0SXNDaGFuZ2VkIHx8ICFpbm5l
clRleHRFbGVtZW50KCktPmhhc0NoaWxkTm9kZXMoKSkgeworICAgIEFTU0VSVChpc1RleHRGb3Jt
Q29udHJvbCgpKTsKKyAgICBib29sIHRleHRJc0NoYW5nZWQgPSB2YWx1ZSAhPSBpbm5lclRleHRW
YWx1ZUZyb20oKmlubmVyVGV4dCk7CisgICAgaWYgKHRleHRJc0NoYW5nZWQgfHwgIWlubmVyVGV4
dC0+aGFzQ2hpbGROb2RlcygpKSB7CiAgICAgICAgIGlmICh0ZXh0SXNDaGFuZ2VkICYmIHJlbmRl
cmVyKCkpIHsKICAgICAgICAgICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3VtZW50
KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCiAgICAgICAgICAgICAgICAgY2FjaGUtPnBvc3RO
b3RpZmljYXRpb24odGhpcywgQVhPYmplY3RDYWNoZTo6QVhWYWx1ZUNoYW5nZWQsIFRhcmdldE9i
c2VydmFibGVQYXJlbnQpOwogICAgICAgICB9Ci0gICAgICAgIGlubmVyVGV4dEVsZW1lbnQoKS0+
c2V0SW5uZXJUZXh0KHZhbHVlLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAgaW5uZXJU
ZXh0LT5zZXRJbm5lclRleHQodmFsdWUsIEFTU0VSVF9OT19FWENFUFRJT04pOwogCiAgICAgICAg
IGlmICh2YWx1ZS5lbmRzV2l0aCgnXG4nKSB8fCB2YWx1ZS5lbmRzV2l0aCgnXHInKSkKLSAgICAg
ICAgICAgIGlubmVyVGV4dEVsZW1lbnQoKS0+YXBwZW5kQ2hpbGQoSFRNTEJSRWxlbWVudDo6Y3Jl
YXRlKGRvY3VtZW50KCkpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAgICAgIGlubmVy
VGV4dC0+YXBwZW5kQ2hpbGQoSFRNTEJSRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpLCBBU1NF
UlRfTk9fRVhDRVBUSU9OKTsKICAgICB9CiAKICAgICBzZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hl
c1JlbmRlcmVyKHRydWUpOwogfQogCi1zdGF0aWMgU3RyaW5nIGZpbmlzaFRleHQoU3RyaW5nQnVp
bGRlciYgcmVzdWx0KQotewotICAgIC8vIFJlbW92ZSBvbmUgdHJhaWxpbmcgbmV3bGluZTsgdGhl
cmUncyBhbHdheXMgb25lIHRoYXQncyBjb2xsYXBzZWQgb3V0IGJ5IHJlbmRlcmluZy4KLSAgICBz
aXplX3Qgc2l6ZSA9IHJlc3VsdC5sZW5ndGgoKTsKLSAgICBpZiAoc2l6ZSAmJiByZXN1bHRbc2l6
ZSAtIDFdID09IG5ld2xpbmVDaGFyYWN0ZXIpCi0gICAgICAgIHJlc3VsdC5yZXNpemUoLS1zaXpl
KTsKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci19Ci0KIFN0cmluZyBIVE1MVGV4dEZv
cm1Db250cm9sRWxlbWVudDo6aW5uZXJUZXh0VmFsdWUoKSBjb25zdAogewotICAgIGlmICghaXNU
ZXh0Rm9ybUNvbnRyb2woKSkKLSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0KICAgICBU
ZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQqIGlubmVyVGV4dCA9IGlubmVyVGV4dEVsZW1lbnQo
KTsKLSAgICBpZiAoIWlubmVyVGV4dCkKLSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0K
LSAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBpbm5lclRl
eHQ7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIGlubmVyVGV4dCkpIHsK
LSAgICAgICAgaWYgKGlzPEhUTUxCUkVsZW1lbnQ+KCpub2RlKSkKLSAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQobmV3bGluZUNoYXJhY3Rlcik7Ci0gICAgICAgIGVsc2UgaWYgKGlzPFRleHQ+KCpu
b2RlKSkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZG93bmNhc3Q8VGV4dD4oKm5vZGUpLmRh
dGEoKSk7Ci0gICAgfQotICAgIHJldHVybiBmaW5pc2hUZXh0KHJlc3VsdCk7CisgICAgcmV0dXJu
IGlubmVyVGV4dCA/IGlubmVyVGV4dFZhbHVlRnJvbSgqaW5uZXJUZXh0KSA6IGVtcHR5U3RyaW5n
KCk7CiB9CiAKIHN0YXRpYyBQb3NpdGlvbiBwb3NpdGlvbkZvckluZGV4KFRleHRDb250cm9sSW5u
ZXJUZXh0RWxlbWVudCogaW5uZXJUZXh0LCB1bnNpZ25lZCBpbmRleCkKQEAgLTcwNCw3ICs3MDUs
OCBAQCBTdHJpbmcgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnZhbHVlV2l0aEhhcmRMaW5l
QnJlYWtzKCkgY29uc3QKICAgICAgICAgd2hpbGUgKGJyZWFrTm9kZSA9PSBub2RlKQogICAgICAg
ICAgICAgZ2V0TmV4dFNvZnRCcmVhayhsaW5lLCBicmVha05vZGUsIGJyZWFrT2Zmc2V0KTsKICAg
ICB9Ci0gICAgcmV0dXJuIGZpbmlzaFRleHQocmVzdWx0KTsKKyAgICBzdHJpcFRyYWlsaW5nTmV3
bGluZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAogSFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQqIGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChjb25zdCBQb3Np
dGlvbiYgcG9zaXRpb24pCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241435</attachid>
            <date>2014-11-12 11:41:47 -0800</date>
            <delta_ts>2014-11-12 12:07:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138619-20141112114152.patch</filename>
            <type>text/plain</type>
            <size>6945</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2MDI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDdmNDhlYTc0MzM4ZWI3
NmE1MjkwMmFkNzc2ODdkZmFhMTIyOGUwYy4uNDNkYWQxYzhhZWY2YTZiODFhOTA4NDllOWMyMjU2
MWRkYjYzNTg5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE0LTExLTEyICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgU3BlZWQgdXAgSFRNTFRleHRG
b3JtQ29udHJvbEVsZW1lbnQ6OnNldElubmVyVGV4dFZhbHVlKCkgYSBiaXQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODYxOQorCisgICAgICAgIFJl
dmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFNwZWVkIHVwIEhUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50OjpzZXRJbm5lclRleHRWYWx1ZSgpIGEgYml0IGJ5OgorICAgICAgICAtIE5v
dCBkb2luZyBhIHZpcnR1YWwgaXNUZXh0Rm9ybUNvbnRyb2woKSBjYWxsLiBSZWx5aW5nIG9uIGlu
bmVyVGV4dEVsZW1lbnQoKQorICAgICAgICAgIG5vdCByZXR1cm5pbmcgbnVsbCBpcyBzdWZmaWNp
ZW50LgorICAgICAgICAtIENhY2hpbmcgdGhlIHJlc3VsdCBvZiBpbm5lclRleHRFbGVtZW50KCkg
aW5zdGVhZCBvZiByZXBlYXRlZGx5IGNhbGxpbmcgdGhhdAorICAgICAgICAgIHZpcnR1YWwgZnVu
Y3Rpb24uCisgICAgICAgIC0gRGUtdmlydHVhbGl6aW5nIHNldEZvcm1Db250cm9sVmFsdWVNYXRj
aGVzUmVuZGVyZXIoKSAvCisgICAgICAgICAgZm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJl
cigpIGFzIHRoZXNlIGFyZSBuZXZlciBvdmVycmlkZGVuLgorICAgICAgICAtIE1vdmluZyB0aGUg
Y29kZSBjb25zdHJ1Y3RpbmcgdGhlIGlubmVyVGV4dFZhbHVlIGZyb20gYQorICAgICAgICAgIFRl
eHRDb250cm9sSW5uZXJUZXh0RWxlbWVudCBmcm9tIGlubmVyVGV4dFZhbHVlKCkgdG8gYSBuZXcK
KyAgICAgICAgICBpbm5lclRleHRWYWx1ZUZyb20oVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50
JikgZnVuY3Rpb24gYW5kIGNhbGwgdGhpcyBuZXcKKyAgICAgICAgICBmdW5jdGlvbiBmcm9tIHNl
dElubmVyVGV4dFZhbHVlKCkgdG8gYXZvaWQgY2FsbGluZyBpbm5lclRleHRFbGVtZW50KCkgYWdh
aW4KKyAgICAgICAgICBhbmQgbWFraW5nIHN1cmUgaXQgaXMgbm9uLW51bGwKKyAgICAgICAgLSBE
byB0aGUgdHJlZSB0cmF2ZXJzYWwgZnJvbSBpbm5lclRleHRFbGVtZW50J3MgZmlyc3RDaGlsZCBp
bnN0ZWFkIG9mIGZyb20KKyAgICAgICAgICBpbm5lclRleHRFbGVtZW50LiBUaGUgaW5uZXJUZXh0
RWxlbWVudCBpcyBhIFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudC4KKyAgICAgICAgICBUaGVy
ZWZvcmUsIGl0IGNhbm5vdCBiZSBhbiBIVE1MQlJFbGVtZW50IG9yIGEgVGV4dCBub2RlLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogaHRt
bC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNv
bnRyb2xFbGVtZW50Ojpmb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldEZvcm1Db250cm9sVmFsdWVNYXRj
aGVzUmVuZGVyZXIpOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6c3RyaXBUcmFpbGluZ05ld2xpbmUpOgorICAgICAgICAo
V2ViQ29yZTo6aW5uZXJUZXh0VmFsdWVGcm9tKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50OjpzZXRJbm5lclRleHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6aW5uZXJUZXh0VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnZhbHVlV2l0aEhhcmRMaW5lQnJl
YWtzKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmlzaFRleHQpOiBEZWxldGVkLgorCiAyMDE0LTEx
LTEyICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNdIG1l
ZGlhL3RyYWNrL2F1ZGlvLXRyYWNrLmh0bWwgaXMgZmxha2V5CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCmluZGV4IDAwMjVkMGQyZjFiNTBiYzM1ODU1ZmRk
NmRlZTQ3ZWQ2ZDAwNDlhYzYuLmY0NzBlZTJiMmNhMjk2NjZjOThkN2U1ZjU4MjliYTY5ZjQ4MzE0
NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCkBA
IC01OCw4ICs1OCw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCByZXNldCgpIHsgfQog
Ci0gICAgdmlydHVhbCBib29sIGZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNl
dEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoYm9vbCBiKSB7IG1fdmFsdWVNYXRjaGVz
UmVuZGVyZXIgPSBiOyB9CisgICAgYm9vbCBmb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVy
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZU1hdGNoZXNSZW5kZXJlcjsgfQorICAgIHZvaWQgc2V0
Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcihib29sIGIpIHsgbV92YWx1ZU1hdGNoZXNS
ZW5kZXJlciA9IGI7IH0KIAogICAgIGJvb2wgd2FzQ2hhbmdlZFNpbmNlTGFzdEZvcm1Db250cm9s
Q2hhbmdlRXZlbnQoKSBjb25zdCB7IHJldHVybiBtX3dhc0NoYW5nZWRTaW5jZUxhc3RGb3JtQ29u
dHJvbENoYW5nZUV2ZW50OyB9CiAgICAgdm9pZCBzZXRDaGFuZ2VkU2luY2VMYXN0Rm9ybUNvbnRy
b2xDaGFuZ2VFdmVudChib29sKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4
dEZvcm1Db250cm9sRWxlbWVudC5jcHAKaW5kZXggMzRiMjg0N2U0YmZjMjNlNzg4ZjBhMmQzOTQ1
NGVhN2ViMDQ0MjEwZi4uNGI2ZjdkMTc1ZWU0NzNjNTQ2YzQ5Y2Y3OTRjODVlM2E2NGVhYTBiMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dC5jcHAKQEAgLTUyMSw1MiArNTIxLDUzIEBAIGJvb2wgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQ6Omxhc3RDaGFuZ2VXYXNVc2VyRWRpdCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGFzdENoYW5n
ZVdhc1VzZXJFZGl0OwogfQogCitzdGF0aWMgdm9pZCBzdHJpcFRyYWlsaW5nTmV3bGluZShTdHJp
bmdCdWlsZGVyJiByZXN1bHQpCit7CisgICAgLy8gUmVtb3ZlIG9uZSB0cmFpbGluZyBuZXdsaW5l
OyB0aGVyZSdzIGFsd2F5cyBvbmUgdGhhdCdzIGNvbGxhcHNlZCBvdXQgYnkgcmVuZGVyaW5nLgor
ICAgIHNpemVfdCBzaXplID0gcmVzdWx0Lmxlbmd0aCgpOworICAgIGlmIChzaXplICYmIHJlc3Vs
dFtzaXplIC0gMV0gPT0gbmV3bGluZUNoYXJhY3RlcikKKyAgICAgICAgcmVzdWx0LnJlc2l6ZShz
aXplIC0gMSk7Cit9CisKK3N0YXRpYyBTdHJpbmcgaW5uZXJUZXh0VmFsdWVGcm9tKFRleHRDb250
cm9sSW5uZXJUZXh0RWxlbWVudCYgaW5uZXJUZXh0KQoreworICAgIFN0cmluZ0J1aWxkZXIgcmVz
dWx0OworICAgIGZvciAoTm9kZSogbm9kZSA9IGlubmVyVGV4dC5maXJzdENoaWxkKCk7IG5vZGU7
IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsICZpbm5lclRleHQpKSB7CisgICAgICAg
IGlmIChpczxIVE1MQlJFbGVtZW50Pigqbm9kZSkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KG5ld2xpbmVDaGFyYWN0ZXIpOworICAgICAgICBlbHNlIGlmIChpczxUZXh0Pigqbm9kZSkpCisg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKGRvd25jYXN0PFRleHQ+KCpub2RlKS5kYXRhKCkpOwor
ICAgIH0KKyAgICBzdHJpcFRyYWlsaW5nTmV3bGluZShyZXN1bHQpOworICAgIHJldHVybiByZXN1
bHQudG9TdHJpbmcoKTsKK30KKwogdm9pZCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2V0
SW5uZXJUZXh0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBpZiAoIWlzVGV4dEZv
cm1Db250cm9sKCkpCisgICAgVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50KiBpbm5lclRleHQg
PSBpbm5lclRleHRFbGVtZW50KCk7CisgICAgaWYgKCFpbm5lclRleHQpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGJvb2wgdGV4dElzQ2hhbmdlZCA9IHZhbHVlICE9IGlubmVyVGV4dFZhbHVlKCk7
Ci0gICAgaWYgKHRleHRJc0NoYW5nZWQgfHwgIWlubmVyVGV4dEVsZW1lbnQoKS0+aGFzQ2hpbGRO
b2RlcygpKSB7CisgICAgQVNTRVJUKGlzVGV4dEZvcm1Db250cm9sKCkpOworICAgIGJvb2wgdGV4
dElzQ2hhbmdlZCA9IHZhbHVlICE9IGlubmVyVGV4dFZhbHVlRnJvbSgqaW5uZXJUZXh0KTsKKyAg
ICBpZiAodGV4dElzQ2hhbmdlZCB8fCAhaW5uZXJUZXh0LT5oYXNDaGlsZE5vZGVzKCkpIHsKICAg
ICAgICAgaWYgKHRleHRJc0NoYW5nZWQgJiYgcmVuZGVyZXIoKSkgewogICAgICAgICAgICAgaWYg
KEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUo
KSkKICAgICAgICAgICAgICAgICBjYWNoZS0+cG9zdE5vdGlmaWNhdGlvbih0aGlzLCBBWE9iamVj
dENhY2hlOjpBWFZhbHVlQ2hhbmdlZCwgVGFyZ2V0T2JzZXJ2YWJsZVBhcmVudCk7CiAgICAgICAg
IH0KLSAgICAgICAgaW5uZXJUZXh0RWxlbWVudCgpLT5zZXRJbm5lclRleHQodmFsdWUsIEFTU0VS
VF9OT19FWENFUFRJT04pOworICAgICAgICBpbm5lclRleHQtPnNldElubmVyVGV4dCh2YWx1ZSwg
QVNTRVJUX05PX0VYQ0VQVElPTik7CiAKICAgICAgICAgaWYgKHZhbHVlLmVuZHNXaXRoKCdcbicp
IHx8IHZhbHVlLmVuZHNXaXRoKCdccicpKQotICAgICAgICAgICAgaW5uZXJUZXh0RWxlbWVudCgp
LT5hcHBlbmRDaGlsZChIVE1MQlJFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSksIEFTU0VSVF9O
T19FWENFUFRJT04pOworICAgICAgICAgICAgaW5uZXJUZXh0LT5hcHBlbmRDaGlsZChIVE1MQlJF
bGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSksIEFTU0VSVF9OT19FWENFUFRJT04pOwogICAgIH0K
IAogICAgIHNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIodHJ1ZSk7CiB9CiAKLXN0
YXRpYyBTdHJpbmcgZmluaXNoVGV4dChTdHJpbmdCdWlsZGVyJiByZXN1bHQpCi17Ci0gICAgLy8g
UmVtb3ZlIG9uZSB0cmFpbGluZyBuZXdsaW5lOyB0aGVyZSdzIGFsd2F5cyBvbmUgdGhhdCdzIGNv
bGxhcHNlZCBvdXQgYnkgcmVuZGVyaW5nLgotICAgIHNpemVfdCBzaXplID0gcmVzdWx0Lmxlbmd0
aCgpOwotICAgIGlmIChzaXplICYmIHJlc3VsdFtzaXplIC0gMV0gPT0gbmV3bGluZUNoYXJhY3Rl
cikKLSAgICAgICAgcmVzdWx0LnJlc2l6ZSgtLXNpemUpOwotICAgIHJldHVybiByZXN1bHQudG9T
dHJpbmcoKTsKLX0KLQogU3RyaW5nIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojppbm5lclRl
eHRWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFpc1RleHRGb3JtQ29udHJvbCgpKQotICAgICAg
ICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLQogICAgIFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVu
dCogaW5uZXJUZXh0ID0gaW5uZXJUZXh0RWxlbWVudCgpOwotICAgIGlmICghaW5uZXJUZXh0KQot
ICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLQotICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0
OwotICAgIGZvciAoTm9kZSogbm9kZSA9IGlubmVyVGV4dDsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2
ZXJzYWw6Om5leHQobm9kZSwgaW5uZXJUZXh0KSkgewotICAgICAgICBpZiAoaXM8SFRNTEJSRWxl
bWVudD4oKm5vZGUpKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChuZXdsaW5lQ2hhcmFjdGVy
KTsKLSAgICAgICAgZWxzZSBpZiAoaXM8VGV4dD4oKm5vZGUpKQotICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChkb3duY2FzdDxUZXh0Pigqbm9kZSkuZGF0YSgpKTsKLSAgICB9Ci0gICAgcmV0dXJu
IGZpbmlzaFRleHQocmVzdWx0KTsKKyAgICByZXR1cm4gaW5uZXJUZXh0ID8gaW5uZXJUZXh0VmFs
dWVGcm9tKCppbm5lclRleHQpIDogZW1wdHlTdHJpbmcoKTsKIH0KIAogc3RhdGljIFBvc2l0aW9u
IHBvc2l0aW9uRm9ySW5kZXgoVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50KiBpbm5lclRleHQs
IHVuc2lnbmVkIGluZGV4KQpAQCAtNzA0LDcgKzcwNSw4IEBAIFN0cmluZyBIVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudDo6dmFsdWVXaXRoSGFyZExpbmVCcmVha3MoKSBjb25zdAogICAgICAgICB3
aGlsZSAoYnJlYWtOb2RlID09IG5vZGUpCiAgICAgICAgICAgICBnZXROZXh0U29mdEJyZWFrKGxp
bmUsIGJyZWFrTm9kZSwgYnJlYWtPZmZzZXQpOwogICAgIH0KLSAgICByZXR1cm4gZmluaXNoVGV4
dChyZXN1bHQpOworICAgIHN0cmlwVHJhaWxpbmdOZXdsaW5lKHJlc3VsdCk7CisgICAgcmV0dXJu
IHJlc3VsdC50b1N0cmluZygpOwogfQogCiBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCogZW5j
bG9zaW5nVGV4dEZvcm1Db250cm9sKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikK
</data>

          </attachment>
      

    </bug>

</bugzilla>