<?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>83513</bug_id>
          
          <creation_ts>2012-04-09 15:00:42 -0700</creation_ts>
          <short_desc>WebGLRenderingContext should defer caching program info</short_desc>
          <delta_ts>2012-04-11 15:12:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gregg Tavares">gman</reporter>
          <assigned_to name="Zhenyao Mo">zmo</assigned_to>
          <cc>kbr</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>598651</commentid>
    <comment_count>0</comment_count>
    <who name="Gregg Tavares">gman</who>
    <bug_when>2012-04-09 15:00:42 -0700</bug_when>
    <thetext>Currently WebGLRenderingContext::linkProgram immediately queries the program link status and caches locations

This makes it block while the program is being linked.

Instead, move the caching code to a function, WebGLRenderingContext::cacheProgramInfoIfNotCached

And then call cacheProgramInfoIfNotCached in these functions 

   WebGLRenderingContext::getProgramParameter
   WebGLRenderingContext::getActiveAttrib
   WebGLRenderingContext::getActiveUniform
   WebGLRenderingContext::getUniformLocation
   WebGLRenderingContext::getAttribLocation

And invalidate the cache in WebGLRenderingContext::linkProgram</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598663</commentid>
    <comment_count>1</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2012-04-09 15:15:17 -0700</bug_when>
    <thetext>*** Bug 83511 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599603</commentid>
    <comment_count>2</comment_count>
      <attachid>136535</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2012-04-10 13:59:41 -0700</bug_when>
    <thetext>Created attachment 136535
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599604</commentid>
    <comment_count>3</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2012-04-10 14:00:07 -0700</bug_when>
    <thetext>Ken, please have a look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599891</commentid>
    <comment_count>4</comment_count>
      <attachid>136535</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-04-10 18:20:14 -0700</bug_when>
    <thetext>Comment on attachment 136535
Patch

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

Looks OK in general but r- for one API simplification. One question as well below. Also, was this tested with the test case I vaguely recall from the Chromium bug report to demonstrate the performance improvement?

&gt; Source/WebCore/html/canvas/WebGLProgram.h:64
&gt; +    void invalidateCachedInfo() { m_infoValid = false; }

It would be better to make this private and call it from the implementation of increaseLinkCount(). This would make the API simpler and reduce the possibility of errors.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:3135
&gt; +            if (program-&gt;getLinkStatus())

Why make this change? We know that the program can&apos;t link successfully, and avoiding this call will avoid a bunch of caching work that we want to defer as long as possible.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:3143
&gt; +    program-&gt;invalidateCachedInfo();

Calling invalidateCachedInfo() as a side-effect of increaseLinkCount() would allow this line to be deleted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600366</commentid>
    <comment_count>5</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2012-04-11 10:24:49 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 136535 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=136535&amp;action=review
&gt; 
&gt; Looks OK in general but r- for one API simplification. One question as well below. Also, was this tested with the test case I vaguely recall from the Chromium bug report to demonstrate the performance improvement?
&gt; 
&gt; &gt; Source/WebCore/html/canvas/WebGLProgram.h:64
&gt; &gt; +    void invalidateCachedInfo() { m_infoValid = false; }
&gt; 
&gt; It would be better to make this private and call it from the implementation of increaseLinkCount(). This would make the API simpler and reduce the possibility of errors.

Done.

&gt; 
&gt; &gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:3135
&gt; &gt; +            if (program-&gt;getLinkStatus())
&gt; 
&gt; Why make this change? We know that the program can&apos;t link successfully, and avoiding this call will avoid a bunch of caching work that we want to defer as long as possible.

Basically if after the previous successful link, if the info is never cached, then simply set the link_status to false won&apos;t work.  Because the next caching will overwrite the link_status to true (which is totally wrong).  In order to avoid that, we call getLinkStatus() here to force an info cache, then the linkStatus = false will stay.

&gt; 
&gt; &gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:3143
&gt; &gt; +    program-&gt;invalidateCachedInfo();
&gt; 
&gt; Calling invalidateCachedInfo() as a side-effect of increaseLinkCount() would allow this line to be deleted.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600401</commentid>
    <comment_count>6</comment_count>
      <attachid>136697</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2012-04-11 10:45:18 -0700</bug_when>
    <thetext>Created attachment 136697
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600416</commentid>
    <comment_count>7</comment_count>
      <attachid>136702</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2012-04-11 10:53:16 -0700</bug_when>
    <thetext>Created attachment 136702
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600419</commentid>
    <comment_count>8</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2012-04-11 10:55:57 -0700</bug_when>
    <thetext>Revised.  Please have another look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600447</commentid>
    <comment_count>9</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-04-11 11:34:05 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Basically if after the previous successful link, if the info is never cached, then simply set the link_status to false won&apos;t work.  Because the next caching will overwrite the link_status to true (which is totally wrong).  In order to avoid that, we call getLinkStatus() here to force an info cache, then the linkStatus = false will stay.

This sounds fragile. Can you think of some way to make the state inside this class more robust? I think there should be some way to forcibly invalidate the cache and say that it is valid in its cleared state. If that were possible, then that could be done in this code path.

I&apos;ll r+ this as is if you want, but would appreciate it if you&apos;d give this some more thought.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600499</commentid>
    <comment_count>10</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2012-04-11 12:41:05 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #5)
&gt; &gt; Basically if after the previous successful link, if the info is never cached, then simply set the link_status to false won&apos;t work.  Because the next caching will overwrite the link_status to true (which is totally wrong).  In order to avoid that, we call getLinkStatus() here to force an info cache, then the linkStatus = false will stay.
&gt; 
&gt; This sounds fragile. Can you think of some way to make the state inside this class more robust? I think there should be some way to forcibly invalidate the cache and say that it is valid in its cleared state. If that were possible, then that could be done in this code path.
&gt; 
&gt; I&apos;ll r+ this as is if you want, but would appreciate it if you&apos;d give this some more thought.

I just realized the basic logic here is setLinkStatus() should just be like other getters, need to force a cache update if needed before setting the status.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600522</commentid>
    <comment_count>11</comment_count>
    <who name="Gregg Tavares">gman</who>
    <bug_when>2012-04-11 13:00:56 -0700</bug_when>
    <thetext>Just fyi, I just tested this with the sample in the original issue.

Compiling 12 complex shaders went from 152ms to 4ms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600531</commentid>
    <comment_count>12</comment_count>
      <attachid>136734</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2012-04-11 13:16:05 -0700</bug_when>
    <thetext>Created attachment 136734
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600532</commentid>
    <comment_count>13</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2012-04-11 13:16:57 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Just fyi, I just tested this with the sample in the original issue.
&gt; 
&gt; Compiling 12 complex shaders went from 152ms to 4ms.

Thanks Gregg.  My build is still building :)

Ken, can you have another look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600612</commentid>
    <comment_count>14</comment_count>
      <attachid>136734</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-04-11 14:56:20 -0700</bug_when>
    <thetext>Comment on attachment 136734
Patch

Looks good to me as long as the performance gains are still there. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600625</commentid>
    <comment_count>15</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2012-04-11 15:12:52 -0700</bug_when>
    <thetext>Committed r113915: &lt;http://trac.webkit.org/changeset/113915&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136535</attachid>
            <date>2012-04-10 13:59:41 -0700</date>
            <delta_ts>2012-04-11 10:45:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-83513-20120410135940.patch</filename>
            <type>text/plain</type>
            <size>7658</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMzc2MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDEyLTA0LTEwICBaaGVueWFv
IE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHNo
b3VsZCBkZWZlciBjYWNoaW5nIHByb2dyYW0gaW5mbworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODM1MTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFByb2dyYW06OldlYkdMUHJvZ3JhbSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFByb2dyYW06Om51bUFjdGl2ZUF0dHJpYkxvY2F0aW9ucyk6IGNhbGwgY2Fj
aGVJbmZvSWZOZWVkZWQoKTsKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6Z2V0QWN0
aXZlQXR0cmliTG9jYXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3Jh
bTo6aXNVc2luZ1ZlcnRleEF0dHJpYjApOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UHJvZ3JhbTo6Z2V0TGlua1N0YXR1cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFByb2dyYW06OmNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb25zKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6Y2FjaGVJbmZvSWZOZWVkZWQpOiBDYWNo
ZSBsaW5rIHN0YXR1cywgYWN0aXZlIGF0dGlyZSBsb2NhdGlvbnMsIGV0YyBpZiBuZWVkZWQuCisg
ICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmg6CisgICAgICAgIChXZWJHTFByb2dy
YW0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFtOjppbnZhbGlkYXRlQ2FjaGVkSW5m
byk6IGludmFsaWRhdGUgdGhlIGNhY2hlZCBpbmZvLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGlua1Byb2dyYW0pOiBEbyBub3QgY2FjaGUg
cHJvZ3JhbSBpbmZvIGltbWVkaWF0ZWx5LgorCiAyMDEyLTA0LTEwICBBYmhpc2hlayBBcnlhICA8
aW5mZXJub0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQ3Jhc2ggZHVlIHRvIGNhcHRpb25zIGxp
c3Qgbm90IHVwZGF0ZWQgYWZ0ZXIgc2VjdGlvbiByZWNhbGMuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAJKHJldmlzaW9uIDExMzc1NikKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDYgKzQzLDcgQEAgV2ViR0xQcm9ncmFtOjpXZWJHTFByb2dyYW0oV2ViR0xSZW5kZXJp
bgogICAgIDogV2ViR0xTaGFyZWRPYmplY3QoY3R4KQogICAgICwgbV9saW5rU3RhdHVzKGZhbHNl
KQogICAgICwgbV9saW5rQ291bnQoMCkKKyAgICAsIG1faW5mb1ZhbGlkKHRydWUpCiB7CiAgICAg
c2V0T2JqZWN0KGN0eC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlUHJvZ3JhbSgpKTsKIH0K
QEAgLTY1LDQyICs2NiwyMyBAQCB2b2lkIFdlYkdMUHJvZ3JhbTo6ZGVsZXRlT2JqZWN0SW1wbChH
cmFwCiAgICAgfQogfQogCi1ib29sIFdlYkdMUHJvZ3JhbTo6Y2FjaGVBY3RpdmVBdHRyaWJMb2Nh
dGlvbnMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCkKLXsKLSAgICBtX2FjdGl2ZUF0dHJp
YkxvY2F0aW9ucy5jbGVhcigpOwotICAgIGlmICghb2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIC8vIEFzc3VtZSBsaW5rIHN0YXR1cyBoYXMgYWxyZWFkeSBiZWVuIGNhY2hl
ZC4KLSAgICBpZiAoIW1fbGlua1N0YXR1cykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
R0MzRGludCBudW1BdHRyaWJzID0gMDsKLSAgICBjb250ZXh0M2QtPmdldFByb2dyYW1pdihvYmpl
Y3QoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9BVFRSSUJVVEVTLCAmbnVtQXR0cmlicyk7
Ci0gICAgbV9hY3RpdmVBdHRyaWJMb2NhdGlvbnMucmVzaXplKHN0YXRpY19jYXN0PHNpemVfdD4o
bnVtQXR0cmlicykpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQXR0cmliczsgKytpKSB7
Ci0gICAgICAgIEFjdGl2ZUluZm8gaW5mbzsKLSAgICAgICAgY29udGV4dDNkLT5nZXRBY3RpdmVB
dHRyaWIob2JqZWN0KCksIGksIGluZm8pOwotICAgICAgICBtX2FjdGl2ZUF0dHJpYkxvY2F0aW9u
c1tpXSA9IGNvbnRleHQzZC0+Z2V0QXR0cmliTG9jYXRpb24ob2JqZWN0KCksIGluZm8ubmFtZS5j
aGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdW5zaWduZWQgV2ViR0xQcm9ncmFtOjpudW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMo
KSBjb25zdAordW5zaWduZWQgV2ViR0xQcm9ncmFtOjpudW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMo
KQogeworICAgIGNhY2hlSW5mb0lmTmVlZGVkKCk7CiAgICAgcmV0dXJuIG1fYWN0aXZlQXR0cmli
TG9jYXRpb25zLnNpemUoKTsKIH0KIAotR0MzRGludCBXZWJHTFByb2dyYW06OmdldEFjdGl2ZUF0
dHJpYkxvY2F0aW9uKEdDM0R1aW50IGluZGV4KSBjb25zdAorR0MzRGludCBXZWJHTFByb2dyYW06
OmdldEFjdGl2ZUF0dHJpYkxvY2F0aW9uKEdDM0R1aW50IGluZGV4KQogeworICAgIGNhY2hlSW5m
b0lmTmVlZGVkKCk7CiAgICAgaWYgKGluZGV4ID49IG51bUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygp
KQogICAgICAgICByZXR1cm4gLTE7CiAgICAgcmV0dXJuIG1fYWN0aXZlQXR0cmliTG9jYXRpb25z
W2luZGV4XTsKIH0KIAotYm9vbCBXZWJHTFByb2dyYW06OmlzVXNpbmdWZXJ0ZXhBdHRyaWIwKCkg
Y29uc3QKK2Jvb2wgV2ViR0xQcm9ncmFtOjppc1VzaW5nVmVydGV4QXR0cmliMCgpCiB7CisgICAg
Y2FjaGVJbmZvSWZOZWVkZWQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGlpID0gMDsgaWkgPCBudW1B
Y3RpdmVBdHRyaWJMb2NhdGlvbnMoKTsgKytpaSkgewogICAgICAgICBpZiAoIWdldEFjdGl2ZUF0
dHJpYkxvY2F0aW9uKGlpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTA4LDYgKzkw
LDEyIEBAIGJvb2wgV2ViR0xQcm9ncmFtOjppc1VzaW5nVmVydGV4QXR0cmliMCgKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKK2Jvb2wgV2ViR0xQcm9ncmFtOjpnZXRMaW5rU3RhdHVzKCkKK3sKKyAg
ICBjYWNoZUluZm9JZk5lZWRlZCgpOworICAgIHJldHVybiBtX2xpbmtTdGF0dXM7Cit9CisKIFdl
YkdMU2hhZGVyKiBXZWJHTFByb2dyYW06OmdldEF0dGFjaGVkU2hhZGVyKEdDM0RlbnVtIHR5cGUp
CiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CkBAIC0xNjAsNiArMTQ4LDM5IEBAIGJvb2wgV2ViR0xQ
cm9ncmFtOjpkZXRhY2hTaGFkZXIoV2ViR0xTaGEKICAgICB9CiB9CiAKK3ZvaWQgV2ViR0xQcm9n
cmFtOjpjYWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9ucyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dDNkKQoreworICAgIG1fYWN0aXZlQXR0cmliTG9jYXRpb25zLmNsZWFyKCk7CisKKyAgICBHQzNE
aW50IG51bUF0dHJpYnMgPSAwOworICAgIGNvbnRleHQzZC0+Z2V0UHJvZ3JhbWl2KG9iamVjdCgp
LCBHcmFwaGljc0NvbnRleHQzRDo6QUNUSVZFX0FUVFJJQlVURVMsICZudW1BdHRyaWJzKTsKKyAg
ICBtX2FjdGl2ZUF0dHJpYkxvY2F0aW9ucy5yZXNpemUoc3RhdGljX2Nhc3Q8c2l6ZV90PihudW1B
dHRyaWJzKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1BdHRyaWJzOyArK2kpIHsKKyAg
ICAgICAgQWN0aXZlSW5mbyBpbmZvOworICAgICAgICBjb250ZXh0M2QtPmdldEFjdGl2ZUF0dHJp
YihvYmplY3QoKSwgaSwgaW5mbyk7CisgICAgICAgIG1fYWN0aXZlQXR0cmliTG9jYXRpb25zW2ld
ID0gY29udGV4dDNkLT5nZXRBdHRyaWJMb2NhdGlvbihvYmplY3QoKSwgaW5mby5uYW1lLmNoYXJh
Y3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpOworICAgIH0KK30KKwordm9pZCBXZWJHTFByb2dy
YW06OmNhY2hlSW5mb0lmTmVlZGVkKCkKK3sKKyAgICBpZiAobV9pbmZvVmFsaWQpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghb2JqZWN0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gZ2V0QUdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAg
aWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm47CisgICAgR0MzRGludCBsaW5rU3RhdHVzID0g
MDsKKyAgICBjb250ZXh0LT5nZXRQcm9ncmFtaXYob2JqZWN0KCksIEdyYXBoaWNzQ29udGV4dDNE
OjpMSU5LX1NUQVRVUywgJmxpbmtTdGF0dXMpOworICAgIG1fbGlua1N0YXR1cyA9IGxpbmtTdGF0
dXM7CisgICAgaWYgKG1fbGlua1N0YXR1cykKKyAgICAgICAgY2FjaGVBY3RpdmVBdHRyaWJMb2Nh
dGlvbnMoY29udGV4dCk7CisgICAgbV9pbmZvVmFsaWQgPSB0cnVlOworfQorCiB9CiAKICNlbmRp
ZiAvLyBFTkFCTEUoV0VCR0wpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFByb2dyYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFByb2dyYW0uaAkocmV2aXNpb24gMTEzNzU2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xQcm9ncmFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE1ICs0MiwxMiBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IGNyZWF0ZShXZWJHTFJl
bmRlcmluZ0NvbnRleHQqKTsKIAotICAgIC8vIGNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb24oKSBp
cyBvbmx5IGNhbGxlZCBvbmNlIGFmdGVyIGxpbmtQcm9ncmFtKCkKLSAgICAvLyBzdWNjZWVkcy4K
LSAgICBib29sIGNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb25zKEdyYXBoaWNzQ29udGV4dDNEKik7
Ci0gICAgdW5zaWduZWQgbnVtQWN0aXZlQXR0cmliTG9jYXRpb25zKCkgY29uc3Q7Ci0gICAgR0Mz
RGludCBnZXRBY3RpdmVBdHRyaWJMb2NhdGlvbihHQzNEdWludCBpbmRleCkgY29uc3Q7CisgICAg
dW5zaWduZWQgbnVtQWN0aXZlQXR0cmliTG9jYXRpb25zKCk7CisgICAgR0MzRGludCBnZXRBY3Rp
dmVBdHRyaWJMb2NhdGlvbihHQzNEdWludCBpbmRleCk7CiAKLSAgICBib29sIGlzVXNpbmdWZXJ0
ZXhBdHRyaWIwKCkgY29uc3Q7CisgICAgYm9vbCBpc1VzaW5nVmVydGV4QXR0cmliMCgpOwogCi0g
ICAgYm9vbCBnZXRMaW5rU3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9saW5rU3RhdHVzOyB9Cisg
ICAgYm9vbCBnZXRMaW5rU3RhdHVzKCk7CiAgICAgdm9pZCBzZXRMaW5rU3RhdHVzKGJvb2wgc3Rh
dHVzKSB7IG1fbGlua1N0YXR1cyA9IHN0YXR1czsgfQogCiAgICAgdW5zaWduZWQgZ2V0TGlua0Nv
dW50KCkgY29uc3QgeyByZXR1cm4gbV9saW5rQ291bnQ7IH0KQEAgLTY0LDYgKzYxLDggQEAgcHVi
bGljOgogICAgIGJvb2wgYXR0YWNoU2hhZGVyKFdlYkdMU2hhZGVyKik7CiAgICAgYm9vbCBkZXRh
Y2hTaGFkZXIoV2ViR0xTaGFkZXIqKTsKIAorICAgIHZvaWQgaW52YWxpZGF0ZUNhY2hlZEluZm8o
KSB7IG1faW5mb1ZhbGlkID0gZmFsc2U7IH0KKwogcHJvdGVjdGVkOgogICAgIFdlYkdMUHJvZ3Jh
bShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKIApAQCAtNzIsNiArNzEsOSBAQCBwcm90ZWN0ZWQ6
CiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1Byb2dyYW0oKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CiAKKyAgICB2b2lkIGNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb25zKEdyYXBoaWNzQ29u
dGV4dDNEKik7CisgICAgdm9pZCBjYWNoZUluZm9JZk5lZWRlZCgpOworCiAgICAgVmVjdG9yPEdD
M0RpbnQ+IG1fYWN0aXZlQXR0cmliTG9jYXRpb25zOwogCiAgICAgR0MzRGludCBtX2xpbmtTdGF0
dXM7CkBAIC04Miw2ICs4NCw4IEBAIHByaXZhdGU6CiAKICAgICBSZWZQdHI8V2ViR0xTaGFkZXI+
IG1fdmVydGV4U2hhZGVyOwogICAgIFJlZlB0cjxXZWJHTFNoYWRlcj4gbV9mcmFnbWVudFNoYWRl
cjsKKworICAgIGJvb2wgbV9pbmZvVmFsaWQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDExMzc1NikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMzIs
MTkgKzMxMzIsMTUgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmxpbmtQcm9ncmFtKAog
ICAgICAgICByZXR1cm47CiAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKICAgICAgICAg
aWYgKCFwcm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVY
X1NIQURFUikgfHwgIXByb2dyYW0tPmdldEF0dGFjaGVkU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFHTUVOVF9TSEFERVIpKSB7Ci0gICAgICAgICAgICBwcm9ncmFtLT5zZXRMaW5rU3RhdHVz
KGZhbHNlKTsKKyAgICAgICAgICAgIGlmIChwcm9ncmFtLT5nZXRMaW5rU3RhdHVzKCkpCisgICAg
ICAgICAgICAgICAgcHJvZ3JhbS0+c2V0TGlua1N0YXR1cyhmYWxzZSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKICAgICBtX2NvbnRleHQtPmxpbmtQcm9ncmFtKG9i
amVjdE9yWmVybyhwcm9ncmFtKSk7CiAgICAgcHJvZ3JhbS0+aW5jcmVhc2VMaW5rQ291bnQoKTsK
LSAgICAvLyBjYWNoZSBsaW5rIHN0YXR1cwotICAgIEdDM0RpbnQgdmFsdWUgPSAwOwotICAgIG1f
Y29udGV4dC0+Z2V0UHJvZ3JhbWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgR3JhcGhpY3NDb250
ZXh0M0Q6OkxJTktfU1RBVFVTLCAmdmFsdWUpOwotICAgIHByb2dyYW0tPnNldExpbmtTdGF0dXMo
c3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUpKTsKLSAgICAvLyBOZWVkIHRvIGNhY2hlIGxpbmsgc3Rh
dHVzIGJlZm9yZSBjYWNoaW5nIGFjdGl2ZSBhdHRyaWJ1dGUgbG9jYXRpb25zLgotICAgIHByb2dy
YW0tPmNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb25zKGdyYXBoaWNzQ29udGV4dDNEKCkpOworICAg
IHByb2dyYW0tPmludmFsaWRhdGVDYWNoZWRJbmZvKCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136697</attachid>
            <date>2012-04-11 10:45:18 -0700</date>
            <delta_ts>2012-04-11 10:53:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-83513-20120411104517.patch</filename>
            <type>text/plain</type>
            <size>7945</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMzg3NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDEyLTA0LTEwICBaaGVueWFv
IE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHNo
b3VsZCBkZWZlciBjYWNoaW5nIHByb2dyYW0gaW5mbworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODM1MTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFByb2dyYW06OldlYkdMUHJvZ3JhbSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFByb2dyYW06Om51bUFjdGl2ZUF0dHJpYkxvY2F0aW9ucyk6IGNhbGwgY2Fj
aGVJbmZvSWZOZWVkZWQoKTsKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6Z2V0QWN0
aXZlQXR0cmliTG9jYXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3Jh
bTo6aXNVc2luZ1ZlcnRleEF0dHJpYjApOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UHJvZ3JhbTo6Z2V0TGlua1N0YXR1cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFByb2dyYW06OmNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb25zKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6Y2FjaGVJbmZvSWZOZWVkZWQpOiBDYWNo
ZSBsaW5rIHN0YXR1cywgYWN0aXZlIGF0dGlyZSBsb2NhdGlvbnMsIGV0YyBpZiBuZWVkZWQuCisg
ICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmg6CisgICAgICAgIChXZWJHTFByb2dy
YW0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFtOjppbnZhbGlkYXRlQ2FjaGVkSW5m
byk6IGludmFsaWRhdGUgdGhlIGNhY2hlZCBpbmZvLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGlua1Byb2dyYW0pOiBEbyBub3QgY2FjaGUg
cHJvZ3JhbSBpbmZvIGltbWVkaWF0ZWx5LgorCiAyMDEyLTA0LTExICBBYXJvbiBDb2x3ZWxsICA8
YWNvbHdlbGxAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJlbW92ZSB3ZWJraXQgcHJlZml4IGZy
b20gTWVkaWEgU291cmNlIHJ1bnRpbWUgZmVhdHVyZSBuYW1lLgpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCShyZXZpc2lvbiAxMTM4NzUpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Myw2ICs0Myw3IEBAIFdlYkdMUHJvZ3JhbTo6V2ViR0xQcm9ncmFtKFdlYkdMUmVuZGVy
aW4KICAgICA6IFdlYkdMU2hhcmVkT2JqZWN0KGN0eCkKICAgICAsIG1fbGlua1N0YXR1cyhmYWxz
ZSkKICAgICAsIG1fbGlua0NvdW50KDApCisgICAgLCBtX2luZm9WYWxpZCh0cnVlKQogewogICAg
IHNldE9iamVjdChjdHgtPmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0ZVByb2dyYW0oKSk7CiB9
CkBAIC02NSw0MiArNjYsMjMgQEAgdm9pZCBXZWJHTFByb2dyYW06OmRlbGV0ZU9iamVjdEltcGwo
R3JhcAogICAgIH0KIH0KIAotYm9vbCBXZWJHTFByb2dyYW06OmNhY2hlQWN0aXZlQXR0cmliTG9j
YXRpb25zKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QpCi17Ci0gICAgbV9hY3RpdmVBdHRy
aWJMb2NhdGlvbnMuY2xlYXIoKTsKLSAgICBpZiAoIW9iamVjdCgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAvLyBBc3N1bWUgbGluayBzdGF0dXMgaGFzIGFscmVhZHkgYmVlbiBjYWNo
ZWQuCi0gICAgaWYgKCFtX2xpbmtTdGF0dXMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IEdDM0RpbnQgbnVtQXR0cmlicyA9IDA7Ci0gICAgY29udGV4dDNkLT5nZXRQcm9ncmFtaXYob2Jq
ZWN0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfQVRUUklCVVRFUywgJm51bUF0dHJpYnMp
OwotICAgIG1fYWN0aXZlQXR0cmliTG9jYXRpb25zLnJlc2l6ZShzdGF0aWNfY2FzdDxzaXplX3Q+
KG51bUF0dHJpYnMpKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUF0dHJpYnM7ICsraSkg
ewotICAgICAgICBBY3RpdmVJbmZvIGluZm87Ci0gICAgICAgIGNvbnRleHQzZC0+Z2V0QWN0aXZl
QXR0cmliKG9iamVjdCgpLCBpLCBpbmZvKTsKLSAgICAgICAgbV9hY3RpdmVBdHRyaWJMb2NhdGlv
bnNbaV0gPSBjb250ZXh0M2QtPmdldEF0dHJpYkxvY2F0aW9uKG9iamVjdCgpLCBpbmZvLm5hbWUu
Y2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXVuc2lnbmVkIFdlYkdMUHJvZ3JhbTo6bnVtQWN0aXZlQXR0cmliTG9jYXRpb25z
KCkgY29uc3QKK3Vuc2lnbmVkIFdlYkdMUHJvZ3JhbTo6bnVtQWN0aXZlQXR0cmliTG9jYXRpb25z
KCkKIHsKKyAgICBjYWNoZUluZm9JZk5lZWRlZCgpOwogICAgIHJldHVybiBtX2FjdGl2ZUF0dHJp
YkxvY2F0aW9ucy5zaXplKCk7CiB9CiAKLUdDM0RpbnQgV2ViR0xQcm9ncmFtOjpnZXRBY3RpdmVB
dHRyaWJMb2NhdGlvbihHQzNEdWludCBpbmRleCkgY29uc3QKK0dDM0RpbnQgV2ViR0xQcm9ncmFt
OjpnZXRBY3RpdmVBdHRyaWJMb2NhdGlvbihHQzNEdWludCBpbmRleCkKIHsKKyAgICBjYWNoZUlu
Zm9JZk5lZWRlZCgpOwogICAgIGlmIChpbmRleCA+PSBudW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMo
KSkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIHJldHVybiBtX2FjdGl2ZUF0dHJpYkxvY2F0aW9u
c1tpbmRleF07CiB9CiAKLWJvb2wgV2ViR0xQcm9ncmFtOjppc1VzaW5nVmVydGV4QXR0cmliMCgp
IGNvbnN0Citib29sIFdlYkdMUHJvZ3JhbTo6aXNVc2luZ1ZlcnRleEF0dHJpYjAoKQogeworICAg
IGNhY2hlSW5mb0lmTmVlZGVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpaSA9IDA7IGlpIDwgbnVt
QWN0aXZlQXR0cmliTG9jYXRpb25zKCk7ICsraWkpIHsKICAgICAgICAgaWYgKCFnZXRBY3RpdmVB
dHRyaWJMb2NhdGlvbihpaSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEwOCw2ICs5
MCwxOCBAQCBib29sIFdlYkdMUHJvZ3JhbTo6aXNVc2luZ1ZlcnRleEF0dHJpYjAoCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCitib29sIFdlYkdMUHJvZ3JhbTo6Z2V0TGlua1N0YXR1cygpCit7Cisg
ICAgY2FjaGVJbmZvSWZOZWVkZWQoKTsKKyAgICByZXR1cm4gbV9saW5rU3RhdHVzOworfQorCit2
b2lkIFdlYkdMUHJvZ3JhbTo6aW5jcmVhc2VMaW5rQ291bnQoKQoreworICAgICsrbV9saW5rQ291
bnQ7CisgICAgbV9pbmZvVmFsaWQgPSBmYWxzZTsKK30KKwogV2ViR0xTaGFkZXIqIFdlYkdMUHJv
Z3JhbTo6Z2V0QXR0YWNoZWRTaGFkZXIoR0MzRGVudW0gdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5
cGUpIHsKQEAgLTE2MCw2ICsxNTQsMzkgQEAgYm9vbCBXZWJHTFByb2dyYW06OmRldGFjaFNoYWRl
cihXZWJHTFNoYQogICAgIH0KIH0KIAordm9pZCBXZWJHTFByb2dyYW06OmNhY2hlQWN0aXZlQXR0
cmliTG9jYXRpb25zKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QpCit7CisgICAgbV9hY3Rp
dmVBdHRyaWJMb2NhdGlvbnMuY2xlYXIoKTsKKworICAgIEdDM0RpbnQgbnVtQXR0cmlicyA9IDA7
CisgICAgY29udGV4dDNkLT5nZXRQcm9ncmFtaXYob2JqZWN0KCksIEdyYXBoaWNzQ29udGV4dDNE
OjpBQ1RJVkVfQVRUUklCVVRFUywgJm51bUF0dHJpYnMpOworICAgIG1fYWN0aXZlQXR0cmliTG9j
YXRpb25zLnJlc2l6ZShzdGF0aWNfY2FzdDxzaXplX3Q+KG51bUF0dHJpYnMpKTsKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG51bUF0dHJpYnM7ICsraSkgeworICAgICAgICBBY3RpdmVJbmZvIGlu
Zm87CisgICAgICAgIGNvbnRleHQzZC0+Z2V0QWN0aXZlQXR0cmliKG9iamVjdCgpLCBpLCBpbmZv
KTsKKyAgICAgICAgbV9hY3RpdmVBdHRyaWJMb2NhdGlvbnNbaV0gPSBjb250ZXh0M2QtPmdldEF0
dHJpYkxvY2F0aW9uKG9iamVjdCgpLCBpbmZvLm5hbWUuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWlu
YXRpb24oKSk7CisgICAgfQorfQorCit2b2lkIFdlYkdMUHJvZ3JhbTo6Y2FjaGVJbmZvSWZOZWVk
ZWQoKQoreworICAgIGlmIChtX2luZm9WYWxpZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCFvYmplY3QoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQgPSBnZXRBR3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAg
ICAgIHJldHVybjsKKyAgICBHQzNEaW50IGxpbmtTdGF0dXMgPSAwOworICAgIGNvbnRleHQtPmdl
dFByb2dyYW1pdihvYmplY3QoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTktfU1RBVFVTLCAmbGlu
a1N0YXR1cyk7CisgICAgbV9saW5rU3RhdHVzID0gbGlua1N0YXR1czsKKyAgICBpZiAobV9saW5r
U3RhdHVzKQorICAgICAgICBjYWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9ucyhjb250ZXh0KTsKKyAg
ICBtX2luZm9WYWxpZCA9IHRydWU7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCShyZXZpc2lv
biAxMTM4NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAko
d29ya2luZyBjb3B5KQpAQCAtNDIsMTUgKzQyLDEyIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwog
Ci0gICAgLy8gY2FjaGVBY3RpdmVBdHRyaWJMb2NhdGlvbigpIGlzIG9ubHkgY2FsbGVkIG9uY2Ug
YWZ0ZXIgbGlua1Byb2dyYW0oKQotICAgIC8vIHN1Y2NlZWRzLgotICAgIGJvb2wgY2FjaGVBY3Rp
dmVBdHRyaWJMb2NhdGlvbnMoR3JhcGhpY3NDb250ZXh0M0QqKTsKLSAgICB1bnNpZ25lZCBudW1B
Y3RpdmVBdHRyaWJMb2NhdGlvbnMoKSBjb25zdDsKLSAgICBHQzNEaW50IGdldEFjdGl2ZUF0dHJp
YkxvY2F0aW9uKEdDM0R1aW50IGluZGV4KSBjb25zdDsKKyAgICB1bnNpZ25lZCBudW1BY3RpdmVB
dHRyaWJMb2NhdGlvbnMoKTsKKyAgICBHQzNEaW50IGdldEFjdGl2ZUF0dHJpYkxvY2F0aW9uKEdD
M0R1aW50IGluZGV4KTsKIAotICAgIGJvb2wgaXNVc2luZ1ZlcnRleEF0dHJpYjAoKSBjb25zdDsK
KyAgICBib29sIGlzVXNpbmdWZXJ0ZXhBdHRyaWIwKCk7CiAKLSAgICBib29sIGdldExpbmtTdGF0
dXMoKSBjb25zdCB7IHJldHVybiBtX2xpbmtTdGF0dXM7IH0KKyAgICBib29sIGdldExpbmtTdGF0
dXMoKTsKICAgICB2b2lkIHNldExpbmtTdGF0dXMoYm9vbCBzdGF0dXMpIHsgbV9saW5rU3RhdHVz
ID0gc3RhdHVzOyB9CiAKICAgICB1bnNpZ25lZCBnZXRMaW5rQ291bnQoKSBjb25zdCB7IHJldHVy
biBtX2xpbmtDb3VudDsgfQpAQCAtNTgsNyArNTUsOCBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyBp
cyB0byBiZSBjYWxsZWQgZXZlcnl0aW1lIGFmdGVyIHRoZSBwcm9ncmFtIGlzIHN1Y2Nlc3NmdWxs
eSBsaW5rZWQuCiAgICAgLy8gV2UgZG9uJ3QgZGVhbCB3aXRoIGludGVnZXIgb3ZlcmZsb3cgaGVy
ZSwgYXNzdW1pbmcgaW4gcmVhbGl0eSBhIHByb2dyYW0KICAgICAvLyB3aWxsIG5ldmVyIGJlIGxp
bmtlZCBzbyBtYW55IHRpbWVzLgotICAgIHZvaWQgaW5jcmVhc2VMaW5rQ291bnQoKSB7ICsrbV9s
aW5rQ291bnQ7IH0KKyAgICAvLyBBbHNvLCB3ZSBpbnZhbGlkYXRlIHRoZSBjYWNoZWQgcHJvZ3Jh
bSBpbmZvLgorICAgIHZvaWQgaW5jcmVhc2VMaW5rQ291bnQoKTsKIAogICAgIFdlYkdMU2hhZGVy
KiBnZXRBdHRhY2hlZFNoYWRlcihHQzNEZW51bSk7CiAgICAgYm9vbCBhdHRhY2hTaGFkZXIoV2Vi
R0xTaGFkZXIqKTsKQEAgLTcyLDYgKzcwLDkgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICB2
aXJ0dWFsIGJvb2wgaXNQcm9ncmFtKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCisgICAgdm9p
ZCBjYWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9ucyhHcmFwaGljc0NvbnRleHQzRCopOworICAgIHZv
aWQgY2FjaGVJbmZvSWZOZWVkZWQoKTsKKwogICAgIFZlY3RvcjxHQzNEaW50PiBtX2FjdGl2ZUF0
dHJpYkxvY2F0aW9uczsKIAogICAgIEdDM0RpbnQgbV9saW5rU3RhdHVzOwpAQCAtODIsNiArODMs
OCBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPFdlYkdMU2hhZGVyPiBtX3ZlcnRleFNoYWRlcjsK
ICAgICBSZWZQdHI8V2ViR0xTaGFkZXI+IG1fZnJhZ21lbnRTaGFkZXI7CisKKyAgICBib29sIG1f
aW5mb1ZhbGlkOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShy
ZXZpc2lvbiAxMTM4NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTMyLDE5ICszMTMyLDE0IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpsaW5rUHJvZ3JhbSgKICAgICAgICAgcmV0dXJuOwog
ICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7CiAgICAgICAgIGlmICghcHJvZ3JhbS0+Z2V0
QXR0YWNoZWRTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIpIHx8ICFwcm9n
cmFtLT5nZXRBdHRhY2hlZFNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVS
KSkgewotICAgICAgICAgICAgcHJvZ3JhbS0+c2V0TGlua1N0YXR1cyhmYWxzZSk7CisgICAgICAg
ICAgICBpZiAocHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygpKQorICAgICAgICAgICAgICAgIHByb2dy
YW0tPnNldExpbmtTdGF0dXMoZmFsc2UpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgfQogCiAgICAgbV9jb250ZXh0LT5saW5rUHJvZ3JhbShvYmplY3RPclplcm8ocHJvZ3Jh
bSkpOwogICAgIHByb2dyYW0tPmluY3JlYXNlTGlua0NvdW50KCk7Ci0gICAgLy8gY2FjaGUgbGlu
ayBzdGF0dXMKLSAgICBHQzNEaW50IHZhbHVlID0gMDsKLSAgICBtX2NvbnRleHQtPmdldFByb2dy
YW1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5LX1NUQVRV
UywgJnZhbHVlKTsKLSAgICBwcm9ncmFtLT5zZXRMaW5rU3RhdHVzKHN0YXRpY19jYXN0PGJvb2w+
KHZhbHVlKSk7Ci0gICAgLy8gTmVlZCB0byBjYWNoZSBsaW5rIHN0YXR1cyBiZWZvcmUgY2FjaGlu
ZyBhY3RpdmUgYXR0cmlidXRlIGxvY2F0aW9ucy4KLSAgICBwcm9ncmFtLT5jYWNoZUFjdGl2ZUF0
dHJpYkxvY2F0aW9ucyhncmFwaGljc0NvbnRleHQzRCgpKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136702</attachid>
            <date>2012-04-11 10:53:16 -0700</date>
            <delta_ts>2012-04-11 13:16:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-83513-20120411105315.patch</filename>
            <type>text/plain</type>
            <size>7943</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMzg3NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDEyLTA0LTEwICBaaGVueWFv
IE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHNo
b3VsZCBkZWZlciBjYWNoaW5nIHByb2dyYW0gaW5mbworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODM1MTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFByb2dyYW06OldlYkdMUHJvZ3JhbSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFByb2dyYW06Om51bUFjdGl2ZUF0dHJpYkxvY2F0aW9ucyk6IGNhbGwgY2Fj
aGVJbmZvSWZOZWVkZWQoKTsKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6Z2V0QWN0
aXZlQXR0cmliTG9jYXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3Jh
bTo6aXNVc2luZ1ZlcnRleEF0dHJpYjApOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UHJvZ3JhbTo6Z2V0TGlua1N0YXR1cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFByb2dyYW06OmNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb25zKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6Y2FjaGVJbmZvSWZOZWVkZWQpOiBDYWNo
ZSBsaW5rIHN0YXR1cywgYWN0aXZlIGF0dGlyZSBsb2NhdGlvbnMsIGV0YyBpZiBuZWVkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFByb2dyYW06OmluY3JlYXNlTGlua0NvdW50KTogYWxzbyBp
bnZhbGlkYXRlIGNhY2hlZCBpbmZvLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUHJvZ3Jh
bS5oOgorICAgICAgICAoV2ViR0xQcm9ncmFtKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmxpbmtQcm9ncmFtKTogRG8gbm90IGNhY2hlIHBy
b2dyYW0gaW5mbyBpbW1lZGlhdGVseS4KKwogMjAxMi0wNC0xMSAgQWFyb24gQ29sd2VsbCAgPGFj
b2x3ZWxsQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZW1vdmUgd2Via2l0IHByZWZpeCBmcm9t
IE1lZGlhIFNvdXJjZSBydW50aW1lIGZlYXR1cmUgbmFtZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAkocmV2aXNpb24gMTEzODc1KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDMsNiArNDMsNyBAQCBXZWJHTFByb2dyYW06OldlYkdMUHJvZ3JhbShXZWJHTFJlbmRlcmlu
CiAgICAgOiBXZWJHTFNoYXJlZE9iamVjdChjdHgpCiAgICAgLCBtX2xpbmtTdGF0dXMoZmFsc2Up
CiAgICAgLCBtX2xpbmtDb3VudCgwKQorICAgICwgbV9pbmZvVmFsaWQodHJ1ZSkKIHsKICAgICBz
ZXRPYmplY3QoY3R4LT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVQcm9ncmFtKCkpOwogfQpA
QCAtNjUsNDIgKzY2LDIzIEBAIHZvaWQgV2ViR0xQcm9ncmFtOjpkZWxldGVPYmplY3RJbXBsKEdy
YXAKICAgICB9CiB9CiAKLWJvb2wgV2ViR0xQcm9ncmFtOjpjYWNoZUFjdGl2ZUF0dHJpYkxvY2F0
aW9ucyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkKQotewotICAgIG1fYWN0aXZlQXR0cmli
TG9jYXRpb25zLmNsZWFyKCk7Ci0gICAgaWYgKCFvYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgLy8gQXNzdW1lIGxpbmsgc3RhdHVzIGhhcyBhbHJlYWR5IGJlZW4gY2FjaGVk
LgotICAgIGlmICghbV9saW5rU3RhdHVzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBH
QzNEaW50IG51bUF0dHJpYnMgPSAwOwotICAgIGNvbnRleHQzZC0+Z2V0UHJvZ3JhbWl2KG9iamVj
dCgpLCBHcmFwaGljc0NvbnRleHQzRDo6QUNUSVZFX0FUVFJJQlVURVMsICZudW1BdHRyaWJzKTsK
LSAgICBtX2FjdGl2ZUF0dHJpYkxvY2F0aW9ucy5yZXNpemUoc3RhdGljX2Nhc3Q8c2l6ZV90Pihu
dW1BdHRyaWJzKSk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1BdHRyaWJzOyArK2kpIHsK
LSAgICAgICAgQWN0aXZlSW5mbyBpbmZvOwotICAgICAgICBjb250ZXh0M2QtPmdldEFjdGl2ZUF0
dHJpYihvYmplY3QoKSwgaSwgaW5mbyk7Ci0gICAgICAgIG1fYWN0aXZlQXR0cmliTG9jYXRpb25z
W2ldID0gY29udGV4dDNkLT5nZXRBdHRyaWJMb2NhdGlvbihvYmplY3QoKSwgaW5mby5uYW1lLmNo
YXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi11bnNpZ25lZCBXZWJHTFByb2dyYW06Om51bUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygp
IGNvbnN0Cit1bnNpZ25lZCBXZWJHTFByb2dyYW06Om51bUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygp
CiB7CisgICAgY2FjaGVJbmZvSWZOZWVkZWQoKTsKICAgICByZXR1cm4gbV9hY3RpdmVBdHRyaWJM
b2NhdGlvbnMuc2l6ZSgpOwogfQogCi1HQzNEaW50IFdlYkdMUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0
cmliTG9jYXRpb24oR0MzRHVpbnQgaW5kZXgpIGNvbnN0CitHQzNEaW50IFdlYkdMUHJvZ3JhbTo6
Z2V0QWN0aXZlQXR0cmliTG9jYXRpb24oR0MzRHVpbnQgaW5kZXgpCiB7CisgICAgY2FjaGVJbmZv
SWZOZWVkZWQoKTsKICAgICBpZiAoaW5kZXggPj0gbnVtQWN0aXZlQXR0cmliTG9jYXRpb25zKCkp
CiAgICAgICAgIHJldHVybiAtMTsKICAgICByZXR1cm4gbV9hY3RpdmVBdHRyaWJMb2NhdGlvbnNb
aW5kZXhdOwogfQogCi1ib29sIFdlYkdMUHJvZ3JhbTo6aXNVc2luZ1ZlcnRleEF0dHJpYjAoKSBj
b25zdAorYm9vbCBXZWJHTFByb2dyYW06OmlzVXNpbmdWZXJ0ZXhBdHRyaWIwKCkKIHsKKyAgICBj
YWNoZUluZm9JZk5lZWRlZCgpOwogICAgIGZvciAodW5zaWduZWQgaWkgPSAwOyBpaSA8IG51bUFj
dGl2ZUF0dHJpYkxvY2F0aW9ucygpOyArK2lpKSB7CiAgICAgICAgIGlmICghZ2V0QWN0aXZlQXR0
cmliTG9jYXRpb24oaWkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMDgsNiArOTAs
MTggQEAgYm9vbCBXZWJHTFByb2dyYW06OmlzVXNpbmdWZXJ0ZXhBdHRyaWIwKAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAorYm9vbCBXZWJHTFByb2dyYW06OmdldExpbmtTdGF0dXMoKQoreworICAg
IGNhY2hlSW5mb0lmTmVlZGVkKCk7CisgICAgcmV0dXJuIG1fbGlua1N0YXR1czsKK30KKwordm9p
ZCBXZWJHTFByb2dyYW06OmluY3JlYXNlTGlua0NvdW50KCkKK3sKKyAgICArK21fbGlua0NvdW50
OworICAgIG1faW5mb1ZhbGlkID0gZmFsc2U7Cit9CisKIFdlYkdMU2hhZGVyKiBXZWJHTFByb2dy
YW06OmdldEF0dGFjaGVkU2hhZGVyKEdDM0RlbnVtIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBl
KSB7CkBAIC0xNjAsNiArMTU0LDM5IEBAIGJvb2wgV2ViR0xQcm9ncmFtOjpkZXRhY2hTaGFkZXIo
V2ViR0xTaGEKICAgICB9CiB9CiAKK3ZvaWQgV2ViR0xQcm9ncmFtOjpjYWNoZUFjdGl2ZUF0dHJp
YkxvY2F0aW9ucyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkKQoreworICAgIG1fYWN0aXZl
QXR0cmliTG9jYXRpb25zLmNsZWFyKCk7CisKKyAgICBHQzNEaW50IG51bUF0dHJpYnMgPSAwOwor
ICAgIGNvbnRleHQzZC0+Z2V0UHJvZ3JhbWl2KG9iamVjdCgpLCBHcmFwaGljc0NvbnRleHQzRDo6
QUNUSVZFX0FUVFJJQlVURVMsICZudW1BdHRyaWJzKTsKKyAgICBtX2FjdGl2ZUF0dHJpYkxvY2F0
aW9ucy5yZXNpemUoc3RhdGljX2Nhc3Q8c2l6ZV90PihudW1BdHRyaWJzKSk7CisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBudW1BdHRyaWJzOyArK2kpIHsKKyAgICAgICAgQWN0aXZlSW5mbyBpbmZv
OworICAgICAgICBjb250ZXh0M2QtPmdldEFjdGl2ZUF0dHJpYihvYmplY3QoKSwgaSwgaW5mbyk7
CisgICAgICAgIG1fYWN0aXZlQXR0cmliTG9jYXRpb25zW2ldID0gY29udGV4dDNkLT5nZXRBdHRy
aWJMb2NhdGlvbihvYmplY3QoKSwgaW5mby5uYW1lLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0
aW9uKCkpOworICAgIH0KK30KKwordm9pZCBXZWJHTFByb2dyYW06OmNhY2hlSW5mb0lmTmVlZGVk
KCkKK3sKKyAgICBpZiAobV9pbmZvVmFsaWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgh
b2JqZWN0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0ID0gZ2V0QUdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAg
ICByZXR1cm47CisgICAgR0MzRGludCBsaW5rU3RhdHVzID0gMDsKKyAgICBjb250ZXh0LT5nZXRQ
cm9ncmFtaXYob2JqZWN0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5LX1NUQVRVUywgJmxpbmtT
dGF0dXMpOworICAgIG1fbGlua1N0YXR1cyA9IGxpbmtTdGF0dXM7CisgICAgaWYgKG1fbGlua1N0
YXR1cykKKyAgICAgICAgY2FjaGVBY3RpdmVBdHRyaWJMb2NhdGlvbnMoY29udGV4dCk7CisgICAg
bV9pbmZvVmFsaWQgPSB0cnVlOworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAkocmV2aXNpb24g
MTEzODc1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDE1ICs0MiwxMiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxXZWJHTFByb2dyYW0+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKIAot
ICAgIC8vIGNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb24oKSBpcyBvbmx5IGNhbGxlZCBvbmNlIGFm
dGVyIGxpbmtQcm9ncmFtKCkKLSAgICAvLyBzdWNjZWVkcy4KLSAgICBib29sIGNhY2hlQWN0aXZl
QXR0cmliTG9jYXRpb25zKEdyYXBoaWNzQ29udGV4dDNEKik7Ci0gICAgdW5zaWduZWQgbnVtQWN0
aXZlQXR0cmliTG9jYXRpb25zKCkgY29uc3Q7Ci0gICAgR0MzRGludCBnZXRBY3RpdmVBdHRyaWJM
b2NhdGlvbihHQzNEdWludCBpbmRleCkgY29uc3Q7CisgICAgdW5zaWduZWQgbnVtQWN0aXZlQXR0
cmliTG9jYXRpb25zKCk7CisgICAgR0MzRGludCBnZXRBY3RpdmVBdHRyaWJMb2NhdGlvbihHQzNE
dWludCBpbmRleCk7CiAKLSAgICBib29sIGlzVXNpbmdWZXJ0ZXhBdHRyaWIwKCkgY29uc3Q7Cisg
ICAgYm9vbCBpc1VzaW5nVmVydGV4QXR0cmliMCgpOwogCi0gICAgYm9vbCBnZXRMaW5rU3RhdHVz
KCkgY29uc3QgeyByZXR1cm4gbV9saW5rU3RhdHVzOyB9CisgICAgYm9vbCBnZXRMaW5rU3RhdHVz
KCk7CiAgICAgdm9pZCBzZXRMaW5rU3RhdHVzKGJvb2wgc3RhdHVzKSB7IG1fbGlua1N0YXR1cyA9
IHN0YXR1czsgfQogCiAgICAgdW5zaWduZWQgZ2V0TGlua0NvdW50KCkgY29uc3QgeyByZXR1cm4g
bV9saW5rQ291bnQ7IH0KQEAgLTU4LDcgKzU1LDggQEAgcHVibGljOgogICAgIC8vIFRoaXMgaXMg
dG8gYmUgY2FsbGVkIGV2ZXJ5dGltZSBhZnRlciB0aGUgcHJvZ3JhbSBpcyBzdWNjZXNzZnVsbHkg
bGlua2VkLgogICAgIC8vIFdlIGRvbid0IGRlYWwgd2l0aCBpbnRlZ2VyIG92ZXJmbG93IGhlcmUs
IGFzc3VtaW5nIGluIHJlYWxpdHkgYSBwcm9ncmFtCiAgICAgLy8gd2lsbCBuZXZlciBiZSBsaW5r
ZWQgc28gbWFueSB0aW1lcy4KLSAgICB2b2lkIGluY3JlYXNlTGlua0NvdW50KCkgeyArK21fbGlu
a0NvdW50OyB9CisgICAgLy8gQWxzbywgd2UgaW52YWxpZGF0ZSB0aGUgY2FjaGVkIHByb2dyYW0g
aW5mby4KKyAgICB2b2lkIGluY3JlYXNlTGlua0NvdW50KCk7CiAKICAgICBXZWJHTFNoYWRlciog
Z2V0QXR0YWNoZWRTaGFkZXIoR0MzRGVudW0pOwogICAgIGJvb2wgYXR0YWNoU2hhZGVyKFdlYkdM
U2hhZGVyKik7CkBAIC03Miw2ICs3MCw5IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgdmly
dHVhbCBib29sIGlzUHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAorICAgIHZvaWQg
Y2FjaGVBY3RpdmVBdHRyaWJMb2NhdGlvbnMoR3JhcGhpY3NDb250ZXh0M0QqKTsKKyAgICB2b2lk
IGNhY2hlSW5mb0lmTmVlZGVkKCk7CisKICAgICBWZWN0b3I8R0MzRGludD4gbV9hY3RpdmVBdHRy
aWJMb2NhdGlvbnM7CiAKICAgICBHQzNEaW50IG1fbGlua1N0YXR1czsKQEAgLTgyLDYgKzgzLDgg
QEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxXZWJHTFNoYWRlcj4gbV92ZXJ0ZXhTaGFkZXI7CiAg
ICAgUmVmUHRyPFdlYkdMU2hhZGVyPiBtX2ZyYWdtZW50U2hhZGVyOworCisgICAgYm9vbCBtX2lu
Zm9WYWxpZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2
aXNpb24gMTEzODc1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEzMiwxOSArMzEzMiwxNCBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGlua1Byb2dyYW0oCiAgICAgICAgIHJldHVybjsKICAg
ICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgewogICAgICAgICBpZiAoIXByb2dyYW0tPmdldEF0
dGFjaGVkU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSKSB8fCAhcHJvZ3Jh
bS0+Z2V0QXR0YWNoZWRTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUikp
IHsKLSAgICAgICAgICAgIHByb2dyYW0tPnNldExpbmtTdGF0dXMoZmFsc2UpOworICAgICAgICAg
ICAgaWYgKHByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkKKyAgICAgICAgICAgICAgICBwcm9ncmFt
LT5zZXRMaW5rU3RhdHVzKGZhbHNlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgIH0KIAogICAgIG1fY29udGV4dC0+bGlua1Byb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0p
KTsKICAgICBwcm9ncmFtLT5pbmNyZWFzZUxpbmtDb3VudCgpOwotICAgIC8vIGNhY2hlIGxpbmsg
c3RhdHVzCi0gICAgR0MzRGludCB2YWx1ZSA9IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRQcm9ncmFt
aXYob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBHcmFwaGljc0NvbnRleHQzRDo6TElOS19TVEFUVVMs
ICZ2YWx1ZSk7Ci0gICAgcHJvZ3JhbS0+c2V0TGlua1N0YXR1cyhzdGF0aWNfY2FzdDxib29sPih2
YWx1ZSkpOwotICAgIC8vIE5lZWQgdG8gY2FjaGUgbGluayBzdGF0dXMgYmVmb3JlIGNhY2hpbmcg
YWN0aXZlIGF0dHJpYnV0ZSBsb2NhdGlvbnMuCi0gICAgcHJvZ3JhbS0+Y2FjaGVBY3RpdmVBdHRy
aWJMb2NhdGlvbnMoZ3JhcGhpY3NDb250ZXh0M0QoKSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136734</attachid>
            <date>2012-04-11 13:16:05 -0700</date>
            <delta_ts>2012-04-11 14:56:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-83513-20120411131603.patch</filename>
            <type>text/plain</type>
            <size>7690</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMzg3NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDEyLTA0LTEwICBaaGVueWFv
IE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHNo
b3VsZCBkZWZlciBjYWNoaW5nIHByb2dyYW0gaW5mbworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODM1MTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFByb2dyYW06OldlYkdMUHJvZ3JhbSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFByb2dyYW06Om51bUFjdGl2ZUF0dHJpYkxvY2F0aW9ucyk6IGNhbGwgY2Fj
aGVJbmZvSWZOZWVkZWQoKTsKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6Z2V0QWN0
aXZlQXR0cmliTG9jYXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3Jh
bTo6aXNVc2luZ1ZlcnRleEF0dHJpYjApOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UHJvZ3JhbTo6Z2V0TGlua1N0YXR1cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFByb2dyYW06OmNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb25zKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6Y2FjaGVJbmZvSWZOZWVkZWQpOiBDYWNo
ZSBsaW5rIHN0YXR1cywgYWN0aXZlIGF0dGlyZSBsb2NhdGlvbnMsIGV0YyBpZiBuZWVkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFByb2dyYW06OmluY3JlYXNlTGlua0NvdW50KTogYWxzbyBp
bnZhbGlkYXRlIGNhY2hlZCBpbmZvLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUHJvZ3Jh
bS5oOgorICAgICAgICAoV2ViR0xQcm9ncmFtKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmxpbmtQcm9ncmFtKTogRG8gbm90IGNhY2hlIHBy
b2dyYW0gaW5mbyBpbW1lZGlhdGVseS4KKwogMjAxMi0wNC0xMSAgQWFyb24gQ29sd2VsbCAgPGFj
b2x3ZWxsQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZW1vdmUgd2Via2l0IHByZWZpeCBmcm9t
IE1lZGlhIFNvdXJjZSBydW50aW1lIGZlYXR1cmUgbmFtZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAkocmV2aXNpb24gMTEzODc1KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDMsNiArNDMsNyBAQCBXZWJHTFByb2dyYW06OldlYkdMUHJvZ3JhbShXZWJHTFJlbmRlcmlu
CiAgICAgOiBXZWJHTFNoYXJlZE9iamVjdChjdHgpCiAgICAgLCBtX2xpbmtTdGF0dXMoZmFsc2Up
CiAgICAgLCBtX2xpbmtDb3VudCgwKQorICAgICwgbV9pbmZvVmFsaWQodHJ1ZSkKIHsKICAgICBz
ZXRPYmplY3QoY3R4LT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVQcm9ncmFtKCkpOwogfQpA
QCAtNjUsNDIgKzY2LDIzIEBAIHZvaWQgV2ViR0xQcm9ncmFtOjpkZWxldGVPYmplY3RJbXBsKEdy
YXAKICAgICB9CiB9CiAKLWJvb2wgV2ViR0xQcm9ncmFtOjpjYWNoZUFjdGl2ZUF0dHJpYkxvY2F0
aW9ucyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkKQotewotICAgIG1fYWN0aXZlQXR0cmli
TG9jYXRpb25zLmNsZWFyKCk7Ci0gICAgaWYgKCFvYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgLy8gQXNzdW1lIGxpbmsgc3RhdHVzIGhhcyBhbHJlYWR5IGJlZW4gY2FjaGVk
LgotICAgIGlmICghbV9saW5rU3RhdHVzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBH
QzNEaW50IG51bUF0dHJpYnMgPSAwOwotICAgIGNvbnRleHQzZC0+Z2V0UHJvZ3JhbWl2KG9iamVj
dCgpLCBHcmFwaGljc0NvbnRleHQzRDo6QUNUSVZFX0FUVFJJQlVURVMsICZudW1BdHRyaWJzKTsK
LSAgICBtX2FjdGl2ZUF0dHJpYkxvY2F0aW9ucy5yZXNpemUoc3RhdGljX2Nhc3Q8c2l6ZV90Pihu
dW1BdHRyaWJzKSk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1BdHRyaWJzOyArK2kpIHsK
LSAgICAgICAgQWN0aXZlSW5mbyBpbmZvOwotICAgICAgICBjb250ZXh0M2QtPmdldEFjdGl2ZUF0
dHJpYihvYmplY3QoKSwgaSwgaW5mbyk7Ci0gICAgICAgIG1fYWN0aXZlQXR0cmliTG9jYXRpb25z
W2ldID0gY29udGV4dDNkLT5nZXRBdHRyaWJMb2NhdGlvbihvYmplY3QoKSwgaW5mby5uYW1lLmNo
YXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi11bnNpZ25lZCBXZWJHTFByb2dyYW06Om51bUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygp
IGNvbnN0Cit1bnNpZ25lZCBXZWJHTFByb2dyYW06Om51bUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygp
CiB7CisgICAgY2FjaGVJbmZvSWZOZWVkZWQoKTsKICAgICByZXR1cm4gbV9hY3RpdmVBdHRyaWJM
b2NhdGlvbnMuc2l6ZSgpOwogfQogCi1HQzNEaW50IFdlYkdMUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0
cmliTG9jYXRpb24oR0MzRHVpbnQgaW5kZXgpIGNvbnN0CitHQzNEaW50IFdlYkdMUHJvZ3JhbTo6
Z2V0QWN0aXZlQXR0cmliTG9jYXRpb24oR0MzRHVpbnQgaW5kZXgpCiB7CisgICAgY2FjaGVJbmZv
SWZOZWVkZWQoKTsKICAgICBpZiAoaW5kZXggPj0gbnVtQWN0aXZlQXR0cmliTG9jYXRpb25zKCkp
CiAgICAgICAgIHJldHVybiAtMTsKICAgICByZXR1cm4gbV9hY3RpdmVBdHRyaWJMb2NhdGlvbnNb
aW5kZXhdOwogfQogCi1ib29sIFdlYkdMUHJvZ3JhbTo6aXNVc2luZ1ZlcnRleEF0dHJpYjAoKSBj
b25zdAorYm9vbCBXZWJHTFByb2dyYW06OmlzVXNpbmdWZXJ0ZXhBdHRyaWIwKCkKIHsKKyAgICBj
YWNoZUluZm9JZk5lZWRlZCgpOwogICAgIGZvciAodW5zaWduZWQgaWkgPSAwOyBpaSA8IG51bUFj
dGl2ZUF0dHJpYkxvY2F0aW9ucygpOyArK2lpKSB7CiAgICAgICAgIGlmICghZ2V0QWN0aXZlQXR0
cmliTG9jYXRpb24oaWkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMDgsNiArOTAs
MjQgQEAgYm9vbCBXZWJHTFByb2dyYW06OmlzVXNpbmdWZXJ0ZXhBdHRyaWIwKAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAorYm9vbCBXZWJHTFByb2dyYW06OmdldExpbmtTdGF0dXMoKQoreworICAg
IGNhY2hlSW5mb0lmTmVlZGVkKCk7CisgICAgcmV0dXJuIG1fbGlua1N0YXR1czsKK30KKwordm9p
ZCBXZWJHTFByb2dyYW06OnNldExpbmtTdGF0dXMoYm9vbCBzdGF0dXMpCit7CisgICAgY2FjaGVJ
bmZvSWZOZWVkZWQoKTsKKyAgICBtX2xpbmtTdGF0dXMgPSBzdGF0dXM7Cit9CisKK3ZvaWQgV2Vi
R0xQcm9ncmFtOjppbmNyZWFzZUxpbmtDb3VudCgpCit7CisgICAgKyttX2xpbmtDb3VudDsKKyAg
ICBtX2luZm9WYWxpZCA9IGZhbHNlOworfQorCiBXZWJHTFNoYWRlciogV2ViR0xQcm9ncmFtOjpn
ZXRBdHRhY2hlZFNoYWRlcihHQzNEZW51bSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewpA
QCAtMTYwLDYgKzE2MCwzOSBAQCBib29sIFdlYkdMUHJvZ3JhbTo6ZGV0YWNoU2hhZGVyKFdlYkdM
U2hhCiAgICAgfQogfQogCit2b2lkIFdlYkdMUHJvZ3JhbTo6Y2FjaGVBY3RpdmVBdHRyaWJMb2Nh
dGlvbnMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCkKK3sKKyAgICBtX2FjdGl2ZUF0dHJp
YkxvY2F0aW9ucy5jbGVhcigpOworCisgICAgR0MzRGludCBudW1BdHRyaWJzID0gMDsKKyAgICBj
b250ZXh0M2QtPmdldFByb2dyYW1pdihvYmplY3QoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElW
RV9BVFRSSUJVVEVTLCAmbnVtQXR0cmlicyk7CisgICAgbV9hY3RpdmVBdHRyaWJMb2NhdGlvbnMu
cmVzaXplKHN0YXRpY19jYXN0PHNpemVfdD4obnVtQXR0cmlicykpOworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbnVtQXR0cmliczsgKytpKSB7CisgICAgICAgIEFjdGl2ZUluZm8gaW5mbzsKKyAg
ICAgICAgY29udGV4dDNkLT5nZXRBY3RpdmVBdHRyaWIob2JqZWN0KCksIGksIGluZm8pOworICAg
ICAgICBtX2FjdGl2ZUF0dHJpYkxvY2F0aW9uc1tpXSA9IGNvbnRleHQzZC0+Z2V0QXR0cmliTG9j
YXRpb24ob2JqZWN0KCksIGluZm8ubmFtZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigp
KTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xQcm9ncmFtOjpjYWNoZUluZm9JZk5lZWRlZCgpCit7
CisgICAgaWYgKG1faW5mb1ZhbGlkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW9iamVj
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9
IGdldEFHcmFwaGljc0NvbnRleHQzRCgpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0
dXJuOworICAgIEdDM0RpbnQgbGlua1N0YXR1cyA9IDA7CisgICAgY29udGV4dC0+Z2V0UHJvZ3Jh
bWl2KG9iamVjdCgpLCBHcmFwaGljc0NvbnRleHQzRDo6TElOS19TVEFUVVMsICZsaW5rU3RhdHVz
KTsKKyAgICBtX2xpbmtTdGF0dXMgPSBsaW5rU3RhdHVzOworICAgIGlmIChtX2xpbmtTdGF0dXMp
CisgICAgICAgIGNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb25zKGNvbnRleHQpOworICAgIG1faW5m
b1ZhbGlkID0gdHJ1ZTsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgJKHJldmlzaW9uIDExMzg3
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MiwyMyArNDIsMjEgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8V2ViR0xQcm9ncmFtPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CiAKLSAgICAv
LyBjYWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9uKCkgaXMgb25seSBjYWxsZWQgb25jZSBhZnRlciBs
aW5rUHJvZ3JhbSgpCi0gICAgLy8gc3VjY2VlZHMuCi0gICAgYm9vbCBjYWNoZUFjdGl2ZUF0dHJp
YkxvY2F0aW9ucyhHcmFwaGljc0NvbnRleHQzRCopOwotICAgIHVuc2lnbmVkIG51bUFjdGl2ZUF0
dHJpYkxvY2F0aW9ucygpIGNvbnN0OwotICAgIEdDM0RpbnQgZ2V0QWN0aXZlQXR0cmliTG9jYXRp
b24oR0MzRHVpbnQgaW5kZXgpIGNvbnN0OworICAgIHVuc2lnbmVkIG51bUFjdGl2ZUF0dHJpYkxv
Y2F0aW9ucygpOworICAgIEdDM0RpbnQgZ2V0QWN0aXZlQXR0cmliTG9jYXRpb24oR0MzRHVpbnQg
aW5kZXgpOwogCi0gICAgYm9vbCBpc1VzaW5nVmVydGV4QXR0cmliMCgpIGNvbnN0OworICAgIGJv
b2wgaXNVc2luZ1ZlcnRleEF0dHJpYjAoKTsKIAotICAgIGJvb2wgZ2V0TGlua1N0YXR1cygpIGNv
bnN0IHsgcmV0dXJuIG1fbGlua1N0YXR1czsgfQotICAgIHZvaWQgc2V0TGlua1N0YXR1cyhib29s
IHN0YXR1cykgeyBtX2xpbmtTdGF0dXMgPSBzdGF0dXM7IH0KKyAgICBib29sIGdldExpbmtTdGF0
dXMoKTsKKyAgICB2b2lkIHNldExpbmtTdGF0dXMoYm9vbCk7CiAKICAgICB1bnNpZ25lZCBnZXRM
aW5rQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xpbmtDb3VudDsgfQogCiAgICAgLy8gVGhpcyBp
cyB0byBiZSBjYWxsZWQgZXZlcnl0aW1lIGFmdGVyIHRoZSBwcm9ncmFtIGlzIHN1Y2Nlc3NmdWxs
eSBsaW5rZWQuCiAgICAgLy8gV2UgZG9uJ3QgZGVhbCB3aXRoIGludGVnZXIgb3ZlcmZsb3cgaGVy
ZSwgYXNzdW1pbmcgaW4gcmVhbGl0eSBhIHByb2dyYW0KICAgICAvLyB3aWxsIG5ldmVyIGJlIGxp
bmtlZCBzbyBtYW55IHRpbWVzLgotICAgIHZvaWQgaW5jcmVhc2VMaW5rQ291bnQoKSB7ICsrbV9s
aW5rQ291bnQ7IH0KKyAgICAvLyBBbHNvLCB3ZSBpbnZhbGlkYXRlIHRoZSBjYWNoZWQgcHJvZ3Jh
bSBpbmZvLgorICAgIHZvaWQgaW5jcmVhc2VMaW5rQ291bnQoKTsKIAogICAgIFdlYkdMU2hhZGVy
KiBnZXRBdHRhY2hlZFNoYWRlcihHQzNEZW51bSk7CiAgICAgYm9vbCBhdHRhY2hTaGFkZXIoV2Vi
R0xTaGFkZXIqKTsKQEAgLTcyLDYgKzcwLDkgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICB2
aXJ0dWFsIGJvb2wgaXNQcm9ncmFtKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCisgICAgdm9p
ZCBjYWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9ucyhHcmFwaGljc0NvbnRleHQzRCopOworICAgIHZv
aWQgY2FjaGVJbmZvSWZOZWVkZWQoKTsKKwogICAgIFZlY3RvcjxHQzNEaW50PiBtX2FjdGl2ZUF0
dHJpYkxvY2F0aW9uczsKIAogICAgIEdDM0RpbnQgbV9saW5rU3RhdHVzOwpAQCAtODIsNiArODMs
OCBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPFdlYkdMU2hhZGVyPiBtX3ZlcnRleFNoYWRlcjsK
ICAgICBSZWZQdHI8V2ViR0xTaGFkZXI+IG1fZnJhZ21lbnRTaGFkZXI7CisKKyAgICBib29sIG1f
aW5mb1ZhbGlkOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShy
ZXZpc2lvbiAxMTM4NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTM5LDEyICszMTM5LDYgQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmxpbmtQcm9ncmFtKAogCiAgICAgbV9jb250ZXh0LT5s
aW5rUHJvZ3JhbShvYmplY3RPclplcm8ocHJvZ3JhbSkpOwogICAgIHByb2dyYW0tPmluY3JlYXNl
TGlua0NvdW50KCk7Ci0gICAgLy8gY2FjaGUgbGluayBzdGF0dXMKLSAgICBHQzNEaW50IHZhbHVl
ID0gMDsKLSAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3JhbSks
IEdyYXBoaWNzQ29udGV4dDNEOjpMSU5LX1NUQVRVUywgJnZhbHVlKTsKLSAgICBwcm9ncmFtLT5z
ZXRMaW5rU3RhdHVzKHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7Ci0gICAgLy8gTmVlZCB0byBj
YWNoZSBsaW5rIHN0YXR1cyBiZWZvcmUgY2FjaGluZyBhY3RpdmUgYXR0cmlidXRlIGxvY2F0aW9u
cy4KLSAgICBwcm9ncmFtLT5jYWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9ucyhncmFwaGljc0NvbnRl
eHQzRCgpKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCg==
</data>
<flag name="review"
          id="141632"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>