<?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>77655</bug_id>
          
          <creation_ts>2012-02-02 09:56:06 -0800</creation_ts>
          <short_desc>[chromium] Support detaching TextureManager from ManagedTexture</short_desc>
          <delta_ts>2012-02-06 16:17:36 -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>New Bugs</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>
          
          <blocked>77135</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ami Fischman">fischman</reporter>
          <assigned_to name="Alok Priyadarshi">alokp</assigned_to>
          <cc>alokp</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>kbr</cc>
    
    <cc>reveman</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>547949</commentid>
    <comment_count>0</comment_count>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2012-02-02 09:56:06 -0800</bug_when>
    <thetext>ManagedTexture stores a raw pointer to its TextureManager, so if a TextureManager is deleted, subsequent attempts to use the ManagedTexture behave erratically (mostly either crash or infinitely-loop as the now-deleted manager&apos;s hashtable is used to look for the texture&apos;s token).

As a result ManagedTexture&apos;s can&apos;t be cached/reused (see bug 77654 for one example where this bites &lt;video&gt;).

It would be nice if ManagedTexture could be made robust to its TextureManager being deleted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548243</commentid>
    <comment_count>1</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-02 16:31:10 -0800</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=77135 runs into the same issue.  Alok said he had weak pointer behavior working locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548419</commentid>
    <comment_count>2</comment_count>
      <attachid>125254</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2012-02-02 21:19:28 -0800</bug_when>
    <thetext>Created attachment 125254
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548420</commentid>
    <comment_count>3</comment_count>
      <attachid>125254</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2012-02-02 21:21:08 -0800</bug_when>
    <thetext>Comment on attachment 125254
proposed patch

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

&gt; Source/WebCore/platform/graphics/chromium/TextureManager.h:114
&gt; +    // FIXME: Now that we also store references to ManagedTexture

I made some progress on this but decided against making this change for M18.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548838</commentid>
    <comment_count>4</comment_count>
      <attachid>125254</attachid>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2012-02-03 10:38:46 -0800</bug_when>
    <thetext>Comment on attachment 125254
proposed patch

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

&gt; Source/WebCore/platform/graphics/chromium/ManagedTexture.cpp:66
&gt; +    m_textureManager = 0;

Move this into the body of reset() so steal() also gets it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548861</commentid>
    <comment_count>5</comment_count>
      <attachid>125254</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-03 11:00:46 -0800</bug_when>
    <thetext>Comment on attachment 125254
proposed patch

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

Very close.

I&apos;d really like to see unit tests for this. Specifically, construct TextureManager / ManagedTexture pairs and destroy them in both orders to verify that we null out the right pointers and don&apos;t crash.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ManagedTexture.cpp:66
&gt;&gt; +    m_textureManager = 0;
&gt; 
&gt; Move this into the body of reset() so steal() also gets it?

Yes, you definitely need to do this

&gt; Source/WebCore/platform/graphics/chromium/ManagedTexture.h:49
&gt; +    const TextureManager* manager() const { return m_textureManager; }

why do you need to expose a getter for this? that doesn&apos;t seem helpful

&gt; Source/WebCore/platform/graphics/chromium/ManagedTexture.h:50
&gt; +    void managerWillDie();

a more idiomatic name for this would be &quot;clearManager()&quot;, it&apos;s what we use elsewhere.

&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:139
&gt; +    // Finding in reverse should be in general faster in this case.
&gt; +    // Textures for dynamic layers should be newer compared to those for
&gt; +    // static layers and hence at the end of the array.

If you use a set then this goes away

&gt; Source/WebCore/platform/graphics/chromium/TextureManager.h:112
&gt; +    Vector&lt;ManagedTexture*&gt; m_registeredTextures;

this should be a HashSet&lt;&gt;. We don&apos;t care about order but we do care about fast existence checks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549083</commentid>
    <comment_count>6</comment_count>
      <attachid>125254</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2012-02-03 14:30:05 -0800</bug_when>
    <thetext>Comment on attachment 125254
proposed patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/ManagedTexture.cpp:66
&gt;&gt;&gt; +    m_textureManager = 0;
&gt;&gt; 
&gt;&gt; Move this into the body of reset() so steal() also gets it?
&gt; 
&gt; Yes, you definitely need to do this

But there is no need to NULL m_textureManager when doing steal(). The texture can still be reused by calling reserve(). Also (in my opinion) reset should restore the state right after construction.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ManagedTexture.h:49
&gt;&gt; +    const TextureManager* manager() const { return m_textureManager; }
&gt; 
&gt; why do you need to expose a getter for this? that doesn&apos;t seem helpful

I was expecting to use it for another bug where I needed to compare texture-mgr pointers. But it can be taken out from this patch.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ManagedTexture.h:50
&gt;&gt; +    void managerWillDie();
&gt; 
&gt; a more idiomatic name for this would be &quot;clearManager()&quot;, it&apos;s what we use elsewhere.

Ok.

&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureManager.cpp:139
&gt;&gt; +    // static layers and hence at the end of the array.
&gt; 
&gt; If you use a set then this goes away

Sure

&gt;&gt; Source/WebCore/platform/graphics/chromium/TextureManager.h:112
&gt;&gt; +    Vector&lt;ManagedTexture*&gt; m_registeredTextures;
&gt; 
&gt; this should be a HashSet&lt;&gt;. We don&apos;t care about order but we do care about fast existence checks.

Sounds reasonable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549085</commentid>
    <comment_count>7</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2012-02-03 14:31:06 -0800</bug_when>
    <thetext>I am OOO today, but may get some time tonight to address these suggestions. If you cannot wait until then feel free to take it over.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549097</commentid>
    <comment_count>8</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-03 14:37:17 -0800</bug_when>
    <thetext>Hmm, when patching this in locally there seems to be a lot of memory corruption running the unit tests. Will investigate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549131</commentid>
    <comment_count>9</comment_count>
      <attachid>125254</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-03 14:54:46 -0800</bug_when>
    <thetext>Comment on attachment 125254
proposed patch

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

&gt; Source/WebCore/platform/graphics/chromium/ManagedTexture.cpp:59
&gt; +    if (m_token &amp;&amp; m_textureManager) {
&gt;          m_textureManager-&gt;releaseToken(m_token);
&gt; +        m_textureManager-&gt;unregisterTexture(this);

this is crash city - you need to unregister ManagedTextures even if m_token is zero</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549141</commentid>
    <comment_count>10</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-03 15:02:47 -0800</bug_when>
    <thetext>Actually, reset()&apos;ing when the TextureManager is cleared doesn&apos;t make much sense either - isValid() and reserve() will return false when the manager is null so it doesn&apos;t matter what the values are set to.  When we support setting a new TextureManager then it will make sense to reset the appropriate fields then.

I&apos;m going to fix some of the more egregious problems with this patch (did you even run the unit tests, Alok?), add some tests, and upload a new version based off of Alok&apos;s patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549162</commentid>
    <comment_count>11</comment_count>
      <attachid>125434</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-03 15:35:16 -0800</bug_when>
    <thetext>Created attachment 125434
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549163</commentid>
    <comment_count>12</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-03 15:36:07 -0800</bug_when>
    <thetext>I think this should work, and have added a unit test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549169</commentid>
    <comment_count>13</comment_count>
      <attachid>125434</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2012-02-03 15:41:56 -0800</bug_when>
    <thetext>Comment on attachment 125434
Patch

LGTM

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

&gt; Source/WebCore/platform/graphics/chromium/TextureManager.h:116
&gt;      typedef HashMap&lt;TextureToken, TextureInfo&gt; TextureMap;

I think we can now get rid of this TextureMap. I had added a FIXME in the original patch about this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549170</commentid>
    <comment_count>14</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-03 15:42:52 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 125434 [details])
&gt; LGTM
&gt; 
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=125434&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/TextureManager.h:116
&gt; &gt;      typedef HashMap&lt;TextureToken, TextureInfo&gt; TextureMap;
&gt; 
&gt; I think we can now get rid of this TextureMap. I had added a FIXME in the original patch about this.

I suspect this is true, but it&apos;s a larger change.  Thanks for looking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550186</commentid>
    <comment_count>15</comment_count>
      <attachid>125434</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2012-02-06 12:15:30 -0800</bug_when>
    <thetext>Comment on attachment 125434
Patch

Looks good!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550211</commentid>
    <comment_count>16</comment_count>
      <attachid>125434</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-02-06 12:52:02 -0800</bug_when>
    <thetext>Comment on attachment 125434
Patch

rs=me based on others&apos; reviews.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550240</commentid>
    <comment_count>17</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-06 13:18:03 -0800</bug_when>
    <thetext>Committed r106840: &lt;http://trac.webkit.org/changeset/106840&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550389</commentid>
    <comment_count>18</comment_count>
      <attachid>125434</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-06 16:17:36 -0800</bug_when>
    <thetext>Comment on attachment 125434
Patch

Patch landed, clearing flags</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125254</attachid>
            <date>2012-02-02 21:19:28 -0800</date>
            <delta_ts>2012-02-03 15:34:58 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>77655.patch</filename>
            <type>text/plain</type>
            <size>8395</size>
            <attacher name="Alok Priyadarshi">alokp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjYyMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDEyLTAyLTAyICBBbG9rIFBy
aXlhZGFyc2hpICA8YWxva3BAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN1cHBvcnQgZGV0YWNo
aW5nIFRleHR1cmVNYW5hZ2VyIGZyb20gTWFuYWdlZFRleHR1cmUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3NjU1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGV4dHVyZU1hbmFnZXIgbm93IGhvbGRzIHJl
ZmVyZW5jZXMgdG8gdGhlIHRleHR1cmVzIGl0IG1hbmFnZXMuCisgICAgICAgIFRoaXMgYWxsb3dz
IFRleHR1cmVNYW5hZ2VyIHRvIGluZm9ybSBtYW5hZ2VkIHRleHR1cmVzIHdoZW4gaXQgZ2V0cyBk
ZWxldGVkCisgICAgICAgIHNvIHRoYXQgdGhlIHRleHR1cmUgdGhhdCBvdXRsaXZlIHRoZSBUZXh0
dXJlTWFuYWdlciBjYW4gaGFuZGxlIHRoZSBzaXR1YXRpb24gZ3JhY2VmdWxseS4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1hbmFnZWRUZXh0dXJlOjpNYW5hZ2VkVGV4dHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNYW5hZ2VkVGV4dHVyZTo6fk1hbmFnZWRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6TWFuYWdlZFRleHR1cmU6Om1hbmFnZXJXaWxsRGllKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1hbmFnZWRUZXh0dXJlOjppc1ZhbGlkKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1hbmFnZWRUZXh0dXJlOjpyZXNlcnZlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hbmFn
ZWRUZXh0dXJlOjp1bnJlc2VydmUpOgorICAgICAgICAoV2ViQ29yZTo6TWFuYWdlZFRleHR1cmU6
OnN0ZWFsKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hbmFnZWRUZXh0dXJlOjpyZXNldCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1hbmFnZWRUZXh0dXJlOjptYW5hZ2VyKToKKyAgICAgICAgKE1hbmFnZWRU
ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hbmFnZWRUZXh0dXJlOjppc1Jlc2VydmVkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6flRleHR1cmVNYW5hZ2VyKToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OnNldFBy
ZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFn
ZXI6OnJlZ2lzdGVyVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6
dW5yZWdpc3RlclRleHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RleHR1cmVNYW5hZ2VyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFRleHR1cmVN
YW5hZ2VyKToKKwogMjAxMi0wMi0wMiAgQmVhciBUcmF2aXMgIDxiZXRyYXZpc0BhZG9iZS5jb20+
CiAKICAgICAgICAgU3VwcG9ydCAnZGlzYWJsZWQnIGF0dHJpYnV0ZSBvbiBTVkdTdHlsZUVsZW1l
bnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFn
ZWRUZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5jcHAJKHJldmlzaW9uIDEwNjQzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBNYW5hZ2VkVGV4dHVyZTo6TWFuYWdl
ZFRleHR1cmUoVGV4dHVyZU1hCiAgICAgLCBtX2Zvcm1hdCgwKQogICAgICwgbV90ZXh0dXJlSWQo
MCkKIHsKKyAgICBtX3RleHR1cmVNYW5hZ2VyLT5yZWdpc3RlclRleHR1cmUodGhpcyk7CiB9CiAK
IE1hbmFnZWRUZXh0dXJlOjpNYW5hZ2VkVGV4dHVyZShUZXh0dXJlTWFuYWdlciogbWFuYWdlciwg
VGV4dHVyZVRva2VuIHRva2VuLCBJbnRTaXplIHNpemUsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWdu
ZWQgdGV4dHVyZUlkKQpAQCAtNDgsMjEgKzQ5LDMzIEBAIE1hbmFnZWRUZXh0dXJlOjpNYW5hZ2Vk
VGV4dHVyZShUZXh0dXJlTWEKICAgICAsIG1fZm9ybWF0KGZvcm1hdCkKICAgICAsIG1fdGV4dHVy
ZUlkKHRleHR1cmVJZCkKIHsKKyAgICBtX3RleHR1cmVNYW5hZ2VyLT5yZWdpc3RlclRleHR1cmUo
dGhpcyk7CiB9CiAKIE1hbmFnZWRUZXh0dXJlOjp+TWFuYWdlZFRleHR1cmUoKQogewotICAgIGlm
IChtX3Rva2VuKQorICAgIGlmIChtX3Rva2VuICYmIG1fdGV4dHVyZU1hbmFnZXIpIHsKICAgICAg
ICAgbV90ZXh0dXJlTWFuYWdlci0+cmVsZWFzZVRva2VuKG1fdG9rZW4pOworICAgICAgICBtX3Rl
eHR1cmVNYW5hZ2VyLT51bnJlZ2lzdGVyVGV4dHVyZSh0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQg
TWFuYWdlZFRleHR1cmU6Om1hbmFnZXJXaWxsRGllKCkKK3sKKyAgICByZXNldCgpOworICAgIG1f
dGV4dHVyZU1hbmFnZXIgPSAwOwogfQogCiBib29sIE1hbmFnZWRUZXh0dXJlOjppc1ZhbGlkKGNv
bnN0IEludFNpemUmIHNpemUsIHVuc2lnbmVkIGZvcm1hdCkKIHsKLSAgICByZXR1cm4gbV90b2tl
biAmJiBzaXplID09IG1fc2l6ZSAmJiBmb3JtYXQgPT0gbV9mb3JtYXQgJiYgbV90ZXh0dXJlTWFu
YWdlci0+aGFzVGV4dHVyZShtX3Rva2VuKTsKKyAgICByZXR1cm4gbV90b2tlbiAmJiBzaXplID09
IG1fc2l6ZSAmJiBmb3JtYXQgPT0gbV9mb3JtYXQgJiYgbV90ZXh0dXJlTWFuYWdlciAmJiBtX3Rl
eHR1cmVNYW5hZ2VyLT5oYXNUZXh0dXJlKG1fdG9rZW4pOwogfQogCiBib29sIE1hbmFnZWRUZXh0
dXJlOjpyZXNlcnZlKGNvbnN0IEludFNpemUmIHNpemUsIHVuc2lnbmVkIGZvcm1hdCkKIHsKKyAg
ICBpZiAoIW1fdGV4dHVyZU1hbmFnZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlm
ICghbV90b2tlbikKICAgICAgICAgbV90b2tlbiA9IG1fdGV4dHVyZU1hbmFnZXItPmdldFRva2Vu
KCk7CiAKQEAgLTgzLDcgKzk2LDcgQEAgYm9vbCBNYW5hZ2VkVGV4dHVyZTo6cmVzZXJ2ZShjb25z
dCBJbnRTaQogCiB2b2lkIE1hbmFnZWRUZXh0dXJlOjp1bnJlc2VydmUoKQogewotICAgIGlmICgh
bV90b2tlbikKKyAgICBpZiAoIW1fdG9rZW4gfHwgIW1fdGV4dHVyZU1hbmFnZXIpCiAgICAgICAg
IHJldHVybjsKIAogICAgIG1fdGV4dHVyZU1hbmFnZXItPnVucHJvdGVjdFRleHR1cmUobV90b2tl
bik7CkBAIC0xMTEsMTQgKzEyNCwxOCBAQCB2b2lkIE1hbmFnZWRUZXh0dXJlOjpmcmFtZWJ1ZmZl
clRleHR1cmUyCiBQYXNzT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBNYW5hZ2VkVGV4dHVyZTo6c3Rl
YWwoKQogewogICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gdGV4dHVyZSA9IGFkb3B0UHRyKG5l
dyBNYW5hZ2VkVGV4dHVyZShtX3RleHR1cmVNYW5hZ2VyLCBtX3Rva2VuLCBtX3NpemUsIG1fZm9y
bWF0LCBtX3RleHR1cmVJZCkpOworICAgIHJlc2V0KCk7CisgICAgcmV0dXJuIHRleHR1cmUucmVs
ZWFzZSgpOworfQorCit2b2lkIE1hbmFnZWRUZXh0dXJlOjpyZXNldCgpCit7CiAgICAgbV90b2tl
biA9IDA7CiAgICAgbV9zaXplID0gSW50U2l6ZSgpOwogICAgIG1fZm9ybWF0ID0gMDsKICAgICBt
X3RleHR1cmVJZCA9IDA7Ci0gICAgcmV0dXJuIHRleHR1cmUucmVsZWFzZSgpOwogfQogCi0KIH0K
IAogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdl
ZFRleHR1cmUuaAkocmV2aXNpb24gMTA2NDM0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDYs
MTMgKzQ2LDE1IEBAIHB1YmxpYzoKICAgICB9CiAgICAgfk1hbmFnZWRUZXh0dXJlKCk7CiAKKyAg
ICBjb25zdCBUZXh0dXJlTWFuYWdlciogbWFuYWdlcigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVy
ZU1hbmFnZXI7IH0KKyAgICB2b2lkIG1hbmFnZXJXaWxsRGllKCk7CisKICAgICBib29sIGlzVmFs
aWQoY29uc3QgSW50U2l6ZSYsIHVuc2lnbmVkIGZvcm1hdCk7CiAgICAgYm9vbCByZXNlcnZlKGNv
bnN0IEludFNpemUmLCB1bnNpZ25lZCBmb3JtYXQpOwogICAgIHZvaWQgdW5yZXNlcnZlKCk7CiAg
ICAgYm9vbCBpc1Jlc2VydmVkKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX3RleHR1cmVNYW5h
Z2VyKTsKLSAgICAgICAgcmV0dXJuIG1fdGV4dHVyZU1hbmFnZXItPmlzUHJvdGVjdGVkKG1fdG9r
ZW4pOworICAgICAgICByZXR1cm4gbV90ZXh0dXJlTWFuYWdlciAmJiBtX3RleHR1cmVNYW5hZ2Vy
LT5pc1Byb3RlY3RlZChtX3Rva2VuKTsKICAgICB9CiAKICAgICB2b2lkIGFsbG9jYXRlKFRleHR1
cmVBbGxvY2F0b3IqKTsKQEAgLTcxLDYgKzczLDggQEAgcHJpdmF0ZToKICAgICBleHBsaWNpdCBN
YW5hZ2VkVGV4dHVyZShUZXh0dXJlTWFuYWdlciopOwogICAgIE1hbmFnZWRUZXh0dXJlKFRleHR1
cmVNYW5hZ2VyKiwgVGV4dHVyZVRva2VuLCBJbnRTaXplLCB1bnNpZ25lZCBmb3JtYXQsIHVuc2ln
bmVkIHRleHR1cmVJZCk7CiAKKyAgICB2b2lkIHJlc2V0KCk7CisKICAgICBUZXh0dXJlTWFuYWdl
ciogbV90ZXh0dXJlTWFuYWdlcjsKICAgICBUZXh0dXJlVG9rZW4gbV90b2tlbjsKICAgICBJbnRT
aXplIG1fc2l6ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RleHR1cmVNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAJKHJldmlzaW9uIDEwNjQz
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVN
YW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIlRl
eHR1cmVNYW5hZ2VyLmgiCiAKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKyNp
bmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC0x
MDMsNiArMTA0LDEyIEBAIFRleHR1cmVNYW5hZ2VyOjpUZXh0dXJlTWFuYWdlcihzaXplX3QgbWEK
IHsKIH0KIAorVGV4dHVyZU1hbmFnZXI6On5UZXh0dXJlTWFuYWdlcigpCit7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX3JlZ2lzdGVyZWRUZXh0dXJlcy5zaXplKCk7ICsraSkKKyAgICAg
ICAgbV9yZWdpc3RlcmVkVGV4dHVyZXMuYXQoaSktPm1hbmFnZXJXaWxsRGllKCk7Cit9CisKIHZv
aWQgVGV4dHVyZU1hbmFnZXI6OnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMoc2l6ZV90IG1lbW9yeUxp
bWl0Qnl0ZXMpCiB7CiAgICAgcmVkdWNlTWVtb3J5VG9MaW1pdChtZW1vcnlMaW1pdEJ5dGVzKTsK
QEAgLTExNSw2ICsxMjIsMjYgQEAgdm9pZCBUZXh0dXJlTWFuYWdlcjo6c2V0UHJlZmVycmVkTWVt
b3J5TAogICAgIG1fcHJlZmVycmVkTWVtb3J5TGltaXRCeXRlcyA9IG1lbW9yeUxpbWl0Qnl0ZXM7
CiB9CiAKK3ZvaWQgVGV4dHVyZU1hbmFnZXI6OnJlZ2lzdGVyVGV4dHVyZShNYW5hZ2VkVGV4dHVy
ZSogdGV4dHVyZSkKK3sKKyAgICBBU1NFUlQodGV4dHVyZSAmJiB0ZXh0dXJlLT5tYW5hZ2VyKCkg
PT0gdGhpcyk7CisgICAgQVNTRVJUKCFtX3JlZ2lzdGVyZWRUZXh0dXJlcy5jb250YWlucyh0ZXh0
dXJlKSk7CisKKyAgICBtX3JlZ2lzdGVyZWRUZXh0dXJlcy5hcHBlbmQodGV4dHVyZSk7Cit9CisK
K3ZvaWQgVGV4dHVyZU1hbmFnZXI6OnVucmVnaXN0ZXJUZXh0dXJlKE1hbmFnZWRUZXh0dXJlKiB0
ZXh0dXJlKQoreworICAgIEFTU0VSVCh0ZXh0dXJlICYmIHRleHR1cmUtPm1hbmFnZXIoKSA9PSB0
aGlzKTsKKworICAgIC8vIEZpbmRpbmcgaW4gcmV2ZXJzZSBzaG91bGQgYmUgaW4gZ2VuZXJhbCBm
YXN0ZXIgaW4gdGhpcyBjYXNlLgorICAgIC8vIFRleHR1cmVzIGZvciBkeW5hbWljIGxheWVycyBz
aG91bGQgYmUgbmV3ZXIgY29tcGFyZWQgdG8gdGhvc2UgZm9yCisgICAgLy8gc3RhdGljIGxheWVy
cyBhbmQgaGVuY2UgYXQgdGhlIGVuZCBvZiB0aGUgYXJyYXkuCisgICAgY29uc3Qgc2l6ZV90IGkg
PSBtX3JlZ2lzdGVyZWRUZXh0dXJlcy5yZXZlcnNlRmluZCh0ZXh0dXJlKTsKKyAgICBBU1NFUlQo
aSAhPSBub3RGb3VuZCk7CisgICAgbV9yZWdpc3RlcmVkVGV4dHVyZXMucmVtb3ZlKGkpOworfQor
CiBUZXh0dXJlVG9rZW4gVGV4dHVyZU1hbmFnZXI6OmdldFRva2VuKCkKIHsKICAgICByZXR1cm4g
bV9uZXh0VG9rZW4rKzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RleHR1cmVNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuaAkocmV2aXNpb24gMTA2NDM0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1h
bmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK2NsYXNzIE1hbmFnZWRUZXh0dXJlOwogdHlwZWRlZiBpbnQgVGV4dHVyZVRva2Vu
OwogCiBjbGFzcyBUZXh0dXJlQWxsb2NhdG9yIHsKQEAgLTUzLDYgKzU0LDcgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFuYWdlcihtYXhNZW1v
cnlMaW1pdEJ5dGVzLCBwcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzLCBtYXhUZXh0dXJlU2l6ZSkp
OwogICAgIH0KKyAgICB+VGV4dHVyZU1hbmFnZXIoKTsKIAogICAgIC8vIEFic29sdXRlIG1heGlt
dW0gbGltaXQgZm9yIHRleHR1cmUgYWxsb2NhdGlvbnMgZm9yIHRoaXMgaW5zdGFuY2UuCiAgICAg
c3RhdGljIHNpemVfdCBoaWdoTGltaXRCeXRlcyhjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUp
OwpAQCAtNjgsNiArNzAsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRQcmVmZXJyZWRNZW1vcnlM
aW1pdEJ5dGVzKHNpemVfdCk7CiAgICAgc2l6ZV90IHByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMo
KSB7IHJldHVybiBtX3ByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXM7IH0KIAorICAgIHZvaWQgcmVn
aXN0ZXJUZXh0dXJlKE1hbmFnZWRUZXh0dXJlKik7CisgICAgdm9pZCB1bnJlZ2lzdGVyVGV4dHVy
ZShNYW5hZ2VkVGV4dHVyZSopOworCiAgICAgVGV4dHVyZVRva2VuIGdldFRva2VuKCk7CiAgICAg
dm9pZCByZWxlYXNlVG9rZW4oVGV4dHVyZVRva2VuKTsKICAgICBib29sIGhhc1RleHR1cmUoVGV4
dHVyZVRva2VuKTsKQEAgLTEwNCw2ICsxMDksMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbW92
ZVRleHR1cmUoVGV4dHVyZVRva2VuLCBUZXh0dXJlSW5mbyk7CiAgICAgdW5zaWduZWQgcmVwbGFj
ZVRleHR1cmUoVGV4dHVyZVRva2VuLCBUZXh0dXJlSW5mbyk7CiAKKyAgICBWZWN0b3I8TWFuYWdl
ZFRleHR1cmUqPiBtX3JlZ2lzdGVyZWRUZXh0dXJlczsKKworICAgIC8vIEZJWE1FOiBOb3cgdGhh
dCB3ZSBhbHNvIHN0b3JlIHJlZmVyZW5jZXMgdG8gTWFuYWdlZFRleHR1cmUKKyAgICAvLyB0aGVy
ZSBpcyBubyBuZWVkIHRvIGR1cGxpY2F0ZSB0aGUgaW5mbyBpbiBUZXh0dXJlSW5mby4KICAgICB0
eXBlZGVmIEhhc2hNYXA8VGV4dHVyZVRva2VuLCBUZXh0dXJlSW5mbz4gVGV4dHVyZU1hcDsKICAg
ICBUZXh0dXJlTWFwIG1fdGV4dHVyZXM7CiAgICAgTGlzdEhhc2hTZXQ8VGV4dHVyZVRva2VuPiBt
X3RleHR1cmVMUlVTZXQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125434</attachid>
            <date>2012-02-03 15:35:16 -0800</date>
            <delta_ts>2012-02-06 16:17:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77655-20120203153515.patch</filename>
            <type>text/plain</type>
            <size>10191</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NzAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODgzMDIxY2RlZWJkYzhm
MmZkNmQyNDVkZGU4NTc2ZmNhNmE2NjE4NS4uMzdiYzViYWQ5ZDNhNGQ2N2M4OGQ1MmNhMDQzZGVh
ZjEzZGVlYzczZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQzIEBACiAyMDEyLTAyLTAzICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgU3VwcG9ydCBkZXRh
Y2hpbmcgVGV4dHVyZU1hbmFnZXIgZnJvbSBNYW5hZ2VkVGV4dHVyZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc2NTUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgSW5pdGlhbCBwYXRjaCBieSBBbG9rIFByaXlh
ZGFyc2hpLgorCisgICAgICAgIFRleHR1cmVNYW5hZ2VyIG5vdyBob2xkcyByZWZlcmVuY2VzIHRv
IHRoZSB0ZXh0dXJlcyBpdCBtYW5hZ2VzLgorICAgICAgICBUaGlzIGFsbG93cyBUZXh0dXJlTWFu
YWdlciB0byBpbmZvcm0gbWFuYWdlZCB0ZXh0dXJlcyB3aGVuIGl0IGdldHMgZGVsZXRlZAorICAg
ICAgICBzbyB0aGF0IHRoZSB0ZXh0dXJlIHRoYXQgb3V0bGl2ZSB0aGUgVGV4dHVyZU1hbmFnZXIg
Y2FuIGhhbmRsZSB0aGUgc2l0dWF0aW9uIGdyYWNlZnVsbHkuCisKKyAgICAgICAgVW5pdCB0ZXN0
IGluIFRleHR1cmVNYW5hZ2VyVGVzdC5jcHAKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hbmFnZWRU
ZXh0dXJlOjpNYW5hZ2VkVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpNYW5hZ2VkVGV4dHVy
ZTo6fk1hbmFnZWRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6TWFuYWdlZFRleHR1cmU6Om1hbmFnZXJXaWxsRGllKToKKyAgICAgICAgKFdlYkNvcmU6Ok1h
bmFnZWRUZXh0dXJlOjppc1ZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hbmFnZWRUZXh0dXJl
OjpyZXNlcnZlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hbmFnZWRUZXh0dXJlOjp1bnJlc2VydmUp
OgorICAgICAgICAoV2ViQ29yZTo6TWFuYWdlZFRleHR1cmU6OnN0ZWFsKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1hbmFnZWRUZXh0dXJlOjpyZXNldCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hbmFnZWRU
ZXh0dXJlOjptYW5hZ2VyKToKKyAgICAgICAgKE1hbmFnZWRUZXh0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1hbmFnZWRUZXh0dXJlOjppc1Jlc2VydmVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFuYWdlcjo6flRleHR1cmVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OnNldFByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OnJlZ2lzdGVyVGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6dW5yZWdpc3RlclRleHR1cmUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmg6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFRleHR1cmVNYW5hZ2VyKToKKworMjAxMi0wMi0w
MyAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFtjaHJv
bWl1bV0gRGVmZXIgbWFrZUNvbnRleHRDdXJyZW50IGluIGNvbXBvc2l0b3IgdW50aWwgZmlyc3Qg
ZnJhbWUKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3
MjY5CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYzQ4YThjMTZhNmMzZjkxNWJhYmVm
Mzg1ZmRkYTdkYmJlNjY2ODM3OC4uMGM1MzdkNWI1ZDQxMWVhNjA4YTExMDkwYmYzZjVlMDBjYTU0
NTViNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxNiBAQAogMjAxMi0w
Mi0wMyAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFtj
aHJvbWl1bV0gU3VwcG9ydCBkZXRhY2hpbmcgVGV4dHVyZU1hbmFnZXIgZnJvbSBNYW5hZ2VkVGV4
dHVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc2
NTUKKworICAgICAgICBBZGRzIHVuaXQgdGVzdCBmb3IgZGVzdHJveWluZyBhIFRleHR1cmVNYW5h
Z2VyIHdoaWxlIE1hbmFnZWRUZXh0dXJlcyBhcmUgc3RpbGwgYWxpdmUgcmVmZXJyaW5nIHRvIGl0
LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogdGVz
dHMvVGV4dHVyZU1hbmFnZXJUZXN0LmNwcDoKKworMjAxMi0wMi0wMyAgSmFtZXMgUm9iaW5zb24g
IDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFtjaHJvbWl1bV0gRGVmZXIgbWFrZUNv
bnRleHRDdXJyZW50IGluIGNvbXBvc2l0b3IgdW50aWwgZmlyc3QgZnJhbWUKICAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MjY5CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRU
ZXh0dXJlLmNwcAppbmRleCA1YmIxOWZhODdkZWFkMjdjZTdlMWM3OTNhOGZjMzU4MmMwZDNmYmQx
Li41NDhiOTMxZTJiMDdkZGM5NDZhYmE0MjhmMDdlYjM4MzY2MzVlMGNhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdl
ZFRleHR1cmUuY3BwCkBAIC0zOSw2ICszOSw3IEBAIE1hbmFnZWRUZXh0dXJlOjpNYW5hZ2VkVGV4
dHVyZShUZXh0dXJlTWFuYWdlciogbWFuYWdlcikKICAgICAsIG1fZm9ybWF0KDApCiAgICAgLCBt
X3RleHR1cmVJZCgwKQogeworICAgIG1fdGV4dHVyZU1hbmFnZXItPnJlZ2lzdGVyVGV4dHVyZSh0
aGlzKTsKIH0KIAogTWFuYWdlZFRleHR1cmU6Ok1hbmFnZWRUZXh0dXJlKFRleHR1cmVNYW5hZ2Vy
KiBtYW5hZ2VyLCBUZXh0dXJlVG9rZW4gdG9rZW4sIEludFNpemUgc2l6ZSwgdW5zaWduZWQgZm9y
bWF0LCB1bnNpZ25lZCB0ZXh0dXJlSWQpCkBAIC00OCwyMSArNDksMjggQEAgTWFuYWdlZFRleHR1
cmU6Ok1hbmFnZWRUZXh0dXJlKFRleHR1cmVNYW5hZ2VyKiBtYW5hZ2VyLCBUZXh0dXJlVG9rZW4g
dG9rZW4sIEludFMKICAgICAsIG1fZm9ybWF0KGZvcm1hdCkKICAgICAsIG1fdGV4dHVyZUlkKHRl
eHR1cmVJZCkKIHsKKyAgICBtX3RleHR1cmVNYW5hZ2VyLT5yZWdpc3RlclRleHR1cmUodGhpcyk7
CiB9CiAKIE1hbmFnZWRUZXh0dXJlOjp+TWFuYWdlZFRleHR1cmUoKQogeworICAgIGlmICghbV90
ZXh0dXJlTWFuYWdlcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fdGV4dHVyZU1hbmFnZXItPnVu
cmVnaXN0ZXJUZXh0dXJlKHRoaXMpOwogICAgIGlmIChtX3Rva2VuKQogICAgICAgICBtX3RleHR1
cmVNYW5hZ2VyLT5yZWxlYXNlVG9rZW4obV90b2tlbik7CiB9CiAKIGJvb2wgTWFuYWdlZFRleHR1
cmU6OmlzVmFsaWQoY29uc3QgSW50U2l6ZSYgc2l6ZSwgdW5zaWduZWQgZm9ybWF0KQogewotICAg
IHJldHVybiBtX3Rva2VuICYmIHNpemUgPT0gbV9zaXplICYmIGZvcm1hdCA9PSBtX2Zvcm1hdCAm
JiBtX3RleHR1cmVNYW5hZ2VyLT5oYXNUZXh0dXJlKG1fdG9rZW4pOworICAgIHJldHVybiBtX3Rv
a2VuICYmIHNpemUgPT0gbV9zaXplICYmIGZvcm1hdCA9PSBtX2Zvcm1hdCAmJiBtX3RleHR1cmVN
YW5hZ2VyICYmIG1fdGV4dHVyZU1hbmFnZXItPmhhc1RleHR1cmUobV90b2tlbik7CiB9CiAKIGJv
b2wgTWFuYWdlZFRleHR1cmU6OnJlc2VydmUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgdW5zaWduZWQg
Zm9ybWF0KQogeworICAgIGlmICghbV90ZXh0dXJlTWFuYWdlcikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCiAgICAgaWYgKCFtX3Rva2VuKQogICAgICAgICBtX3Rva2VuID0gbV90ZXh0dXJlTWFu
YWdlci0+Z2V0VG9rZW4oKTsKIApAQCAtODMsNyArOTEsNyBAQCBib29sIE1hbmFnZWRUZXh0dXJl
OjpyZXNlcnZlKGNvbnN0IEludFNpemUmIHNpemUsIHVuc2lnbmVkIGZvcm1hdCkKIAogdm9pZCBN
YW5hZ2VkVGV4dHVyZTo6dW5yZXNlcnZlKCkKIHsKLSAgICBpZiAoIW1fdG9rZW4pCisgICAgaWYg
KCFtX3Rva2VuIHx8ICFtX3RleHR1cmVNYW5hZ2VyKQogICAgICAgICByZXR1cm47CiAKICAgICBt
X3RleHR1cmVNYW5hZ2VyLT51bnByb3RlY3RUZXh0dXJlKG1fdG9rZW4pOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0
dXJlLmgKaW5kZXggNzZkNjJhOGJiODlhZDZkNDFmNjMwZmI2NGI2ZTY4YzliODNmYjdhZS4uOTg4
ZGY3NzBiMzUyMGE5MzhjZjdkYTEwNzY4ZGRlNDk5ODk1MTJmYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVy
ZS5oCkBAIC00NiwxMyArNDYsMTQgQEAgcHVibGljOgogICAgIH0KICAgICB+TWFuYWdlZFRleHR1
cmUoKTsKIAorICAgIHZvaWQgY2xlYXJNYW5hZ2VyKCkgeyBtX3RleHR1cmVNYW5hZ2VyID0gMDsg
fQorCiAgICAgYm9vbCBpc1ZhbGlkKGNvbnN0IEludFNpemUmLCB1bnNpZ25lZCBmb3JtYXQpOwog
ICAgIGJvb2wgcmVzZXJ2ZShjb25zdCBJbnRTaXplJiwgdW5zaWduZWQgZm9ybWF0KTsKICAgICB2
b2lkIHVucmVzZXJ2ZSgpOwogICAgIGJvb2wgaXNSZXNlcnZlZCgpCiAgICAgewotICAgICAgICBB
U1NFUlQobV90ZXh0dXJlTWFuYWdlcik7Ci0gICAgICAgIHJldHVybiBtX3RleHR1cmVNYW5hZ2Vy
LT5pc1Byb3RlY3RlZChtX3Rva2VuKTsKKyAgICAgICAgcmV0dXJuIG1fdGV4dHVyZU1hbmFnZXIg
JiYgbV90ZXh0dXJlTWFuYWdlci0+aXNQcm90ZWN0ZWQobV90b2tlbik7CiAgICAgfQogCiAgICAg
dm9pZCBhbGxvY2F0ZShUZXh0dXJlQWxsb2NhdG9yKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAK
aW5kZXggNTE2Y2VhOTBhN2RhNzNhZDJlMDUzOWNmODZjZTdiOWJlODE5YzQzMS4uZjUwYWY0N2Vk
ZTVmYWU4N2ExOWE4ZGUxOTA1N2VkZjI0M2Y3ZGI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNw
cApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiCiAKICNpbmNs
dWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5o
IgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC0xMDMsNiArMTA0LDEyIEBAIFRleHR1cmVN
YW5hZ2VyOjpUZXh0dXJlTWFuYWdlcihzaXplX3QgbWF4TWVtb3J5TGltaXRCeXRlcywgc2l6ZV90
IHByZWZlcnJlZE1lbW9yCiB7CiB9CiAKK1RleHR1cmVNYW5hZ2VyOjp+VGV4dHVyZU1hbmFnZXIo
KQoreworICAgIGZvciAoSGFzaFNldDxNYW5hZ2VkVGV4dHVyZSo+OjppdGVyYXRvciBpdCA9IG1f
cmVnaXN0ZXJlZFRleHR1cmVzLmJlZ2luKCk7IGl0ICE9IG1fcmVnaXN0ZXJlZFRleHR1cmVzLmVu
ZCgpOyArK2l0KQorICAgICAgICAoKml0KS0+Y2xlYXJNYW5hZ2VyKCk7Cit9CisKIHZvaWQgVGV4
dHVyZU1hbmFnZXI6OnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMoc2l6ZV90IG1lbW9yeUxpbWl0Qnl0
ZXMpCiB7CiAgICAgcmVkdWNlTWVtb3J5VG9MaW1pdChtZW1vcnlMaW1pdEJ5dGVzKTsKQEAgLTEx
NSw2ICsxMjIsMjIgQEAgdm9pZCBUZXh0dXJlTWFuYWdlcjo6c2V0UHJlZmVycmVkTWVtb3J5TGlt
aXRCeXRlcyhzaXplX3QgbWVtb3J5TGltaXRCeXRlcykKICAgICBtX3ByZWZlcnJlZE1lbW9yeUxp
bWl0Qnl0ZXMgPSBtZW1vcnlMaW1pdEJ5dGVzOwogfQogCit2b2lkIFRleHR1cmVNYW5hZ2VyOjpy
ZWdpc3RlclRleHR1cmUoTWFuYWdlZFRleHR1cmUqIHRleHR1cmUpCit7CisgICAgQVNTRVJUKHRl
eHR1cmUpOworICAgIEFTU0VSVCghbV9yZWdpc3RlcmVkVGV4dHVyZXMuY29udGFpbnModGV4dHVy
ZSkpOworCisgICAgbV9yZWdpc3RlcmVkVGV4dHVyZXMuYWRkKHRleHR1cmUpOworfQorCit2b2lk
IFRleHR1cmVNYW5hZ2VyOjp1bnJlZ2lzdGVyVGV4dHVyZShNYW5hZ2VkVGV4dHVyZSogdGV4dHVy
ZSkKK3sKKyAgICBBU1NFUlQodGV4dHVyZSk7CisgICAgQVNTRVJUKG1fcmVnaXN0ZXJlZFRleHR1
cmVzLmNvbnRhaW5zKHRleHR1cmUpKTsKKworICAgIG1fcmVnaXN0ZXJlZFRleHR1cmVzLnJlbW92
ZSh0ZXh0dXJlKTsKK30KKwogVGV4dHVyZVRva2VuIFRleHR1cmVNYW5hZ2VyOjpnZXRUb2tlbigp
CiB7CiAgICAgcmV0dXJuIG1fbmV4dFRva2VuKys7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuaAppbmRleCBh
NjZlOWQ1MzZhYTljZmFmNzJmMDdiYjY3Y2QwMDQ4Mjc3ZDRjYzEwLi5iOGIyYjFmNDJmMzdjYWFj
YmZlYWVhYTEzNjI4NTE2N2E2ZGFmOGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmgKQEAgLTMxLDEw
ICszMSwxMyBAQAogCiAjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0xp
c3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK2NsYXNzIE1hbmFnZWRUZXh0dXJlOwogdHlwZWRlZiBpbnQgVGV4dHVyZVRva2VuOwog
CiBjbGFzcyBUZXh0dXJlQWxsb2NhdG9yIHsKQEAgLTUzLDYgKzU2LDcgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFuYWdlcihtYXhNZW1vcnlM
aW1pdEJ5dGVzLCBwcmVmZXJyZWRNZW1vcnlMaW1pdEJ5dGVzLCBtYXhUZXh0dXJlU2l6ZSkpOwog
ICAgIH0KKyAgICB+VGV4dHVyZU1hbmFnZXIoKTsKIAogICAgIC8vIEFic29sdXRlIG1heGltdW0g
bGltaXQgZm9yIHRleHR1cmUgYWxsb2NhdGlvbnMgZm9yIHRoaXMgaW5zdGFuY2UuCiAgICAgc3Rh
dGljIHNpemVfdCBoaWdoTGltaXRCeXRlcyhjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUpOwpA
QCAtNjgsNiArNzIsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRQcmVmZXJyZWRNZW1vcnlMaW1p
dEJ5dGVzKHNpemVfdCk7CiAgICAgc2l6ZV90IHByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXMoKSB7
IHJldHVybiBtX3ByZWZlcnJlZE1lbW9yeUxpbWl0Qnl0ZXM7IH0KIAorICAgIHZvaWQgcmVnaXN0
ZXJUZXh0dXJlKE1hbmFnZWRUZXh0dXJlKik7CisgICAgdm9pZCB1bnJlZ2lzdGVyVGV4dHVyZShN
YW5hZ2VkVGV4dHVyZSopOworCiAgICAgVGV4dHVyZVRva2VuIGdldFRva2VuKCk7CiAgICAgdm9p
ZCByZWxlYXNlVG9rZW4oVGV4dHVyZVRva2VuKTsKICAgICBib29sIGhhc1RleHR1cmUoVGV4dHVy
ZVRva2VuKTsKQEAgLTEwNCw2ICsxMTEsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVtb3ZlVGV4
dHVyZShUZXh0dXJlVG9rZW4sIFRleHR1cmVJbmZvKTsKICAgICB1bnNpZ25lZCByZXBsYWNlVGV4
dHVyZShUZXh0dXJlVG9rZW4sIFRleHR1cmVJbmZvKTsKIAorICAgIEhhc2hTZXQ8TWFuYWdlZFRl
eHR1cmUqPiBtX3JlZ2lzdGVyZWRUZXh0dXJlczsKKwogICAgIHR5cGVkZWYgSGFzaE1hcDxUZXh0
dXJlVG9rZW4sIFRleHR1cmVJbmZvPiBUZXh0dXJlTWFwOwogICAgIFRleHR1cmVNYXAgbV90ZXh0
dXJlczsKICAgICBMaXN0SGFzaFNldDxUZXh0dXJlVG9rZW4+IG1fdGV4dHVyZUxSVVNldDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGV4dHVyZU1hbmFnZXJUZXN0
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGV4dHVyZU1hbmFnZXJUZXN0LmNw
cAppbmRleCA2ZmU2MTZjMjRmY2MzMzIzOWE5YmRiZjRkNDAxODVhY2YxNzQ0ZmM4Li40MWYxMGVk
OTA4YjhkZjE2MDE4MjViYmNkMTlhZGQ2Y2ExODBkYzNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL1RleHR1cmVNYW5hZ2VyVGVzdC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9UZXh0dXJlTWFuYWdlclRlc3QuY3BwCkBAIC0yNCw2ICsyNCw3
IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAorI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgi
CiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKIAogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+
CkBAIC0yNDMsNCArMjQ0LDI0IEBAIFRFU1RfRihUZXh0dXJlTWFuYWdlclRlc3QsIHNldFByZWZl
cnJlZE1lbW9yeUxpbWl0Qnl0ZXMpCiAgICAgRVhQRUNUX0VRKHRleHR1cmVzTWVtb3J5U2l6ZShw
cmVmZXJyZWRUZXh0dXJlcyksIHRleHR1cmVNYW5hZ2VyLT5wcmVmZXJyZWRNZW1vcnlMaW1pdEJ5
dGVzKCkpOwogfQogCitURVNUX0YoVGV4dHVyZU1hbmFnZXJUZXN0LCB0ZXh0dXJlTWFuYWdlckRl
c3Ryb3llZEJlZm9yZU1hbmFnZWRUZXh0dXJlKQoreworICAgIE93blB0cjxUZXh0dXJlTWFuYWdl
cj4gdGV4dHVyZU1hbmFnZXIgPSBjcmVhdGVUZXh0dXJlTWFuYWdlcigxLCAxKTsKKyAgICBPd25Q
dHI8TWFuYWdlZFRleHR1cmU+IG1hbmFnZWRUZXh0dXJlID0gTWFuYWdlZFRleHR1cmU6OmNyZWF0
ZSh0ZXh0dXJlTWFuYWdlci5nZXQoKSk7CisKKyAgICBJbnRTaXplIHNpemUoNTAsIDUwKTsKKyAg
ICB1bnNpZ25lZCBmb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKKworICAgIC8vIFRl
eHR1cmUgaXMgaW5pdGlhbGx5IGludmFsaWQsIGJ1dCB3ZSBzaG91bGQgYmUgYWJsZSB0byByZXNl
cnZlLgorICAgIEVYUEVDVF9GQUxTRShtYW5hZ2VkVGV4dHVyZS0+aXNWYWxpZChzaXplLCBmb3Jt
YXQpKTsKKyAgICBFWFBFQ1RfVFJVRShtYW5hZ2VkVGV4dHVyZS0+cmVzZXJ2ZShzaXplLCBmb3Jt
YXQpKTsKKyAgICBFWFBFQ1RfVFJVRShtYW5hZ2VkVGV4dHVyZS0+aXNWYWxpZChzaXplLCBmb3Jt
YXQpKTsKKworICAgIHRleHR1cmVNYW5hZ2VyLmNsZWFyKCk7CisKKyAgICAvLyBEZWxldGluZyB0
aGUgbWFuYWdlciBzaG91bGQgaW52YWxpZGF0ZSB0aGUgdGV4dHVyZSBhbmQgcmVzZXJ2YXRpb24g
YXR0ZW1wdHMgc2hvdWxkIGZhaWwuCisgICAgRVhQRUNUX0ZBTFNFKG1hbmFnZWRUZXh0dXJlLT5p
c1ZhbGlkKHNpemUsIGZvcm1hdCkpOworICAgIEVYUEVDVF9GQUxTRShtYW5hZ2VkVGV4dHVyZS0+
cmVzZXJ2ZShzaXplLCBmb3JtYXQpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
      

    </bug>

</bugzilla>