<?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>79735</bug_id>
          
          <creation_ts>2012-02-27 19:07:58 -0800</creation_ts>
          <short_desc>[chromium] Work around IOSurface-related corruption during readback</short_desc>
          <delta_ts>2012-02-28 17:17:52 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.7</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="Kenneth Russell">kbr</reporter>
          <assigned_to name="Kenneth Russell">kbr</assigned_to>
          <cc>abarth</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>jbauman</cc>
    
    <cc>senorblanco</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>566270</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-02-27 19:07:58 -0800</bug_when>
    <thetext>In http://crbug.com/99393 , crashes have been observed during ReadPixels operations in Chromium&apos;s GPU process on 10.7. Per the analysis in that bug, it has been demonstrated that the ReadPixels call performed by the thumbnailer causes corruption of the output of later ReadPixels calls (in different OpenGL contexts). The compositor&apos;s context renders into an FBO with an IOSurface-backed color attachment, and the ReadPixels from the IOSurface appears to be the problem. I haven&apos;t been able to reproduce the crashes, but suspect that they are caused by the later ReadPixels calls writing past the end of the input buffer and corrupting the heap.

jbauman@ suggested to use copyTexImage2D to get the IOSurface&apos;s contents into a temporary texture, and then do the ReadPixels operation from an FBO with that texture bound. This workaround successfully avoids the underlying bug and has the significant advantage that the associated code is contained within one method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566281</commentid>
    <comment_count>1</comment_count>
      <attachid>129166</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-02-27 19:16:33 -0800</bug_when>
    <thetext>Created attachment 129166
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566282</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-27 19:18:09 -0800</bug_when>
    <thetext>Please wait for approval from fishd@chromium.org before submitting because this patch contains changes to the Chromium public API.

Please wait for approval from fishd@chromium.org, abarth@webkit.org or jamesr@chromium.org before submitting because this patch contains changes to the Chromium platform API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566305</commentid>
    <comment_count>3</comment_count>
      <attachid>129166</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-27 19:51:14 -0800</bug_when>
    <thetext>Comment on attachment 129166
Patch

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

Why do we need to plumb this through all of our API layers?  What do you intend will set this and on what criteria?  If this is just for certain versions of OS X we can #ifdef to it mac and use gestalt to limit it at runtime to the version(s) affected.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:1073
&gt; +        GLC(context, context-&gt;copyTexImage2D(GraphicsContext3D::TEXTURE_2D, 0, GraphicsContext3D::RGBA, 0, 0, rect.maxX(), rect.maxY(), 0));

this seems to copy more than strictly necessary - could you just copy rect.x() / rect.y() / rect.width() / rect.height() and adjust the rect&apos;s offset as appropriate? hopefully we aren&apos;t doing enough readbacks where this matters too much</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566645</commentid>
    <comment_count>4</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-02-28 07:23:08 -0800</bug_when>
    <thetext>Hm interesting. I&apos;ve been seeing crashes doing readbacks for background filters in the browser compositor (but not the renderer). I wonder if it is related.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566821</commentid>
    <comment_count>5</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-02-28 10:04:58 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 129166 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=129166&amp;action=review
&gt; 
&gt; Why do we need to plumb this through all of our API layers?  What do you intend will set this and on what criteria?  If this is just for certain versions of OS X we can #ifdef to it mac and use gestalt to limit it at runtime to the version(s) affected.

The workaround is needed on Mac OS X 10.7 and (presumably) later, and will be set by code in Chrome&apos;s src/content/browser/tab_contents/tab_contents.cc . The reason it needs to be plumbed all the way through is that the workaround must be able to be turned off with a command line flag so that Apple can reproduce the original problem and fix the underlying OS bug.

&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:1073
&gt; &gt; +        GLC(context, context-&gt;copyTexImage2D(GraphicsContext3D::TEXTURE_2D, 0, GraphicsContext3D::RGBA, 0, 0, rect.maxX(), rect.maxY(), 0));
&gt; 
&gt; this seems to copy more than strictly necessary - could you just copy rect.x() / rect.y() / rect.width() / rect.height() and adjust the rect&apos;s offset as appropriate? hopefully we aren&apos;t doing enough readbacks where this matters too much

This code path is only taken very infrequently -- for the thumbnailer -- and I think it&apos;s better to keep the code simple.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566823</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-02-28 10:05:52 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Hm interesting. I&apos;ve been seeing crashes doing readbacks for background filters in the browser compositor (but not the renderer). I wonder if it is related.

On what platforms are you seeing the readback related crashes? If it isn&apos;t Mac OS 10.7 then it&apos;s a different problem -- though maybe related.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566835</commentid>
    <comment_count>7</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-28 10:19:54 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 129166 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=129166&amp;action=review
&gt; &gt; 
&gt; &gt; Why do we need to plumb this through all of our API layers?  What do you intend will set this and on what criteria?  If this is just for certain versions of OS X we can #ifdef to it mac and use gestalt to limit it at runtime to the version(s) affected.
&gt; 
&gt; The workaround is needed on Mac OS X 10.7 and (presumably) later, and will be set by code in Chrome&apos;s src/content/browser/tab_contents/tab_contents.cc . The reason it needs to be plumbed all the way through is that the workaround must be able to be turned off with a command line flag so that Apple can reproduce the original problem and fix the underlying OS bug.

Can you just spin Apple a build without the workaround or put them at an old version? This is a large wart to have on lots of our code for a one-off that won&apos;t help our users.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566948</commentid>
    <comment_count>8</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-02-28 12:01:59 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #5)
&gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; (From update of attachment 129166 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=129166&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; Why do we need to plumb this through all of our API layers?  What do you intend will set this and on what criteria?  If this is just for certain versions of OS X we can #ifdef to it mac and use gestalt to limit it at runtime to the version(s) affected.
&gt; &gt; 
&gt; &gt; The workaround is needed on Mac OS X 10.7 and (presumably) later, and will be set by code in Chrome&apos;s src/content/browser/tab_contents/tab_contents.cc . The reason it needs to be plumbed all the way through is that the workaround must be able to be turned off with a command line flag so that Apple can reproduce the original problem and fix the underlying OS bug.
&gt; 
&gt; Can you just spin Apple a build without the workaround or put them at an old version? This is a large wart to have on lots of our code for a one-off that won&apos;t help our users.

I&apos;ve just investigated what would be necessary to do this with inline API calls and the code is not completely trivial. Gestalt() has undesirable side effects (see DarwinMajorVersionInternal in src/base/mac/mac_util.mm) and parsing the release information from uname() is a chunk of code (see the same function).

There are advantages to being able to toggle the workaround on the top of tree builds while the bug is being fixed by Apple. I will make sure to take out the workaround code once it is no longer needed and will file a bug to that effect. I&apos;d like to move forward with the workaround in this form.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566984</commentid>
    <comment_count>9</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-28 12:44:54 -0800</bug_when>
    <thetext>We&apos;re currently shipping many pieces of code that uses Gestalt for exactly this, and have been for some time:

http://trac.webkit.org/browser/trunk/Source/WebCore/platform/graphics/cg/ImageBufferDataCG.cpp#L66
http://trac.webkit.org/browser/trunk/Source/WebCore/platform/graphics/mac/FontMac.mm#L55
http://trac.webkit.org/browser/trunk/Source/WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm#L227
http://trac.webkit.org/browser/trunk/Source/WebCore/platform/graphics/chromium/CrossProcessFontLoading.mm#L44

If you think this is problematic, then we should address it systematically.  I don&apos;t think it&apos;s a wise idea to do something arbitrarily different here.  It&apos;s accumulating unnecessary cruft that somebody else will have to clean up later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566985</commentid>
    <comment_count>10</comment_count>
      <attachid>129166</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-28 12:45:19 -0800</bug_when>
    <thetext>Comment on attachment 129166
Patch

You seem really interested in a rubber stamp, so I&apos;m happy to give one.  I think this patch is not wrong, but it could be better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567203</commentid>
    <comment_count>11</comment_count>
      <attachid>129351</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-02-28 16:23:43 -0800</bug_when>
    <thetext>Created attachment 129351
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567204</commentid>
    <comment_count>12</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-02-28 16:24:36 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 129166 [details])
&gt; You seem really interested in a rubber stamp, so I&apos;m happy to give one.  I think this patch is not wrong, but it could be better.

Thanks for the feedback. Revised the patch to do the OS version detection in line using the same mechanism as the other code you pointed out. Also filed a Radar and referenced it in the comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567236</commentid>
    <comment_count>13</comment_count>
      <attachid>129351</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-28 16:55:27 -0800</bug_when>
    <thetext>Comment on attachment 129351
Patch

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567255</commentid>
    <comment_count>14</comment_count>
      <attachid>129351</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-28 17:17:47 -0800</bug_when>
    <thetext>Comment on attachment 129351
Patch

Clearing flags on attachment: 129351

Committed r109173: &lt;http://trac.webkit.org/changeset/109173&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567256</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-28 17:17:52 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129166</attachid>
            <date>2012-02-27 19:16:33 -0800</date>
            <delta_ts>2012-02-28 16:23:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79735-20120227191632.patch</filename>
            <type>text/plain</type>
            <size>13221</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5MDEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBmZjUwMDZlZDgwMjhm
NDNjMzU4NjIyZWFhN2ZmNmFjNjgxYWFlMTEwLi4zM2VhMWY2ZmUwMDMyM2NkNDVmYzUzMDk4MGVm
Zjk2YWM1NDEwYzUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMi0wMi0yNyAg
S2VubmV0aCBSdXNzZWxsICA8a2JyQGdvb2dsZS5jb20+CisKKyAgICAgICAgW2Nocm9taXVtXSBX
b3JrIGFyb3VuZCBJT1N1cmZhY2UtcmVsYXRlZCBjb3JydXB0aW9uIGR1cmluZyByZWFkYmFjawor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk3MzUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBmbGFn
IGZvciBJT1N1cmZhY2UgcmVsYXRlZCB3b3JrYXJvdW5kIG9uIExpb24gYW5kIGxhdGVyLgorCisg
ICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYkxheWVyVHJlZVZpZXcuaDoKKyAgICAgICAgKFdl
YktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6U2V0dGluZ3M6OlNldHRpbmdzKToKKyAgICAgICAgKFNl
dHRpbmdzKToKKwogMjAxMi0wMi0yNCAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gV2ViS2l0OjpzZXRDb2xvck5hbWVzIGlzIGEgY2xp
ZW50IEFQSQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDM3ZTc0Nzg3ZTIyNDE1MTY2ZDlhOGYxZDMzMjI3NDEyZDlk
NTdkMDkuLjgyYmYyZmUyODM2N2YyODE0NzUyYjgxZjM4ZTM5ZGE1N2IzYWYyODYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMi0wMi0yNyAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdv
b2dsZS5jb20+CisKKyAgICAgICAgW2Nocm9taXVtXSBXb3JrIGFyb3VuZCBJT1N1cmZhY2UtcmVs
YXRlZCBjb3JydXB0aW9uIGR1cmluZyByZWFkYmFjaworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk3MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBDb3B5IHRoZSBjb21wb3NpdG9yJ3MgSU9TdXJmYWNlLWJh
Y2tlZCBvdXRwdXQgaW50byBhIHRlbXBvcmFyeQorICAgICAgICB0ZXh0dXJlIGFuZCBwZXJmb3Jt
IHRoZSBSZWFkUGl4ZWxzIG9wZXJhdGlvbiBhZ2FpbnN0IHRoYXQgdGV4dHVyZS4KKworICAgICAg
ICBJdCBpcyBpbmZlYXNpYmxlIHRvIHdyaXRlIGFuIGF1dG9tYXRlZCB0ZXN0IGZvciB0aGlzIGlz
c3VlLgorICAgICAgICBUZXN0ZWQgbWFudWFsbHkgYnkgcGVyZm9ybWluZyBwcmludCBwcmV2aWV3
IG11bHRpcGxlIHRpbWVzIGFnYWluc3QKKyAgICAgICAgcGFnZXMgY29udGFpbmluZyBXZWJHTCBj
b250ZW50IG9uIDEwLjcgYW5kIG9ic2VydmluZyB0aGF0IHRoZQorICAgICAgICBjb3JydXB0aW9u
IGluIHRoZSBvdXRwdXQgaXMgbm8gbG9uZ2VyIHByZXNlbnQuCisKKyAgICAgICAgQ2hyb21pdW0t
c2lkZSBjaGFuZ2VzIGVuYWJsaW5nIHRoaXMgY29kZSBwYXRoIHdpbGwgZm9sbG93LgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0RnJhbWVidWZm
ZXJQaXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NTZXR0aW5nczo6Q0NTZXR0aW5ncyk6
CisgICAgICAgIChDQ1NldHRpbmdzKToKKwogMjAxMi0wMi0yNyAgS2VuIEJ1Y2hhbmFuICA8a2Vu
cmJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFic29sdXRlIHBvc2l0aW9uZWQgZWxlbWVudHMg
d2l0aCBJbmxpbmUgUmVsYXRpdmUgUG9zaXRpb25lZCBDb250YWluZXIgYXJlIG5vdCBsYXlvdXQg
Y29ycmVjdGx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGE2ZTk0ZGY4OTQyZTM5ZGY3
ODVhZDczNzk5OGNjMzQxZjVkMzk2N2UuLjA4Njk0MmZjZTkxMGUxZTNlOGIxODg3MjZhMDMzMzI0
MTQyMTAxMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIw
MTItMDItMjcgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUuY29tPgorCisgICAgICAgIFtj
aHJvbWl1bV0gV29yayBhcm91bmQgSU9TdXJmYWNlLXJlbGF0ZWQgY29ycnVwdGlvbiBkdXJpbmcg
cmVhZGJhY2sKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTc5NzM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkZWQgYW5kIHBhc3NlZCB0aHJvdWdoIGZsYWcgZm9yIElPU3VyZmFjZSByZWxhdGVkIHdvcmth
cm91bmQgb24gTGlvbiBhbmQgbGF0ZXIuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViU2V0dGluZ3Mu
aDoKKyAgICAgICAgKiBzcmMvV2ViTGF5ZXJUcmVlVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYkxheWVyVHJlZVZpZXc6OlNldHRpbmdzOjpvcGVyYXRvciBDQ1NldHRpbmdzKToKKyAgICAg
ICAgKiBzcmMvV2ViU2V0dGluZ3NJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU2V0dGlu
Z3NJbXBsOjpXZWJTZXR0aW5nc0ltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJTZXR0aW5nc0lt
cGw6OnNldExpb25JT1N1cmZhY2VSZWFkYmFja1dvcmthcm91bmRFbmFibGVkKToKKyAgICAgICAg
KFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNldHRpbmdzSW1wbDo6aXNMaW9uSU9TdXJm
YWNlUmVhZGJhY2tXb3JrYXJvdW5kRW5hYmxlZCk6CisgICAgICAgICogc3JjL1dlYlNldHRpbmdz
SW1wbC5oOgorICAgICAgICAoV2ViU2V0dGluZ3NJbXBsKToKKyAgICAgICAgKiBzcmMvV2ViVmll
d0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQWN0aXZlKToKKwogMjAxMi0wMi0yNiAgSGFqaW1lIE1vcnJpdGEgIDxtb3Jy
aXRhQGNocm9taXVtLm9yZz4KIAogICAgICAgICBNb3ZlIENocm9tZUNsaWVudDo6c2hvd0NvbnRl
eHRNZW51KCkgdG8gQ29udGV4dE1lbnVDbGllbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9y
bS9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXJUcmVlVmlldy5oIGIvU291cmNlL1BsYXRmb3JtL2No
cm9taXVtL3B1YmxpYy9XZWJMYXllclRyZWVWaWV3LmgKaW5kZXggNjgzN2IxOWVjYmRkMjE3NmRi
NmQzZDM3ZWI5OTYyMDI4NGIwMDc2Mi4uYzA2ZDEwZTk2NTQ3ZTM2YTg1OWQyMWZhNzZhNzNkZmE1
MzZmYTU4NiAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJM
YXllclRyZWVWaWV3LmgKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJM
YXllclRyZWVWaWV3LmgKQEAgLTU0LDYgKzU0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgLCBw
ZXJUaWxlUGFpbnRpbmcoZmFsc2UpCiAgICAgICAgICAgICAsIHBhcnRpYWxTd2FwRW5hYmxlZChm
YWxzZSkKICAgICAgICAgICAgICwgdGhyZWFkZWRBbmltYXRpb25FbmFibGVkKGZhbHNlKQorICAg
ICAgICAgICAgLCBsaW9uSU9TdXJmYWNlUmVhZGJhY2tXb3JrYXJvdW5kRW5hYmxlZChmYWxzZSkK
ICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTY1LDYgKzY2LDcgQEAgcHVibGljOgogICAgICAg
ICBib29sIHBlclRpbGVQYWludGluZzsKICAgICAgICAgYm9vbCBwYXJ0aWFsU3dhcEVuYWJsZWQ7
CiAgICAgICAgIGJvb2wgdGhyZWFkZWRBbmltYXRpb25FbmFibGVkOworICAgICAgICBib29sIGxp
b25JT1N1cmZhY2VSZWFkYmFja1dvcmthcm91bmRFbmFibGVkOwogI2lmIFdFQktJVF9JTVBMRU1F
TlRBVElPTgogICAgICAgICBvcGVyYXRvciBXZWJDb3JlOjpDQ1NldHRpbmdzKCkgY29uc3Q7CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDU0MmIzYWQx
YzQyNzEzMzMzMjE3ODE5YjE4OGVmYjNkZGY3NTU3ODUuLjkyMDZhMTExMmU5MTgzNDNkZDdiMGIy
Y2ExNmI5NTBhN2MyMWJhYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNw
cApAQCAtMTA1MSw4ICsxMDUxLDQ0IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRG
cmFtZWJ1ZmZlclBpeGVscyh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlCiAKICAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKIAotICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4
dC0+cmVhZFBpeGVscyhyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWln
aHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBwaXhlbHMp
KTsKKyAgICBib29sIG5lZWRzTGlvbklPU3VyZmFjZVJlYWRiYWNrV29ya2Fyb3VuZCA9IHNldHRp
bmdzKCkubGlvbklPU3VyZmFjZVJlYWRiYWNrV29ya2Fyb3VuZEVuYWJsZWQ7CisKKyAgICBQbGF0
Zm9ybTNET2JqZWN0IHRlbXBvcmFyeVRleHR1cmUgPSBOdWxsUGxhdGZvcm0zRE9iamVjdDsKKyAg
ICBQbGF0Zm9ybTNET2JqZWN0IHRlbXBvcmFyeUZCTyA9IE51bGxQbGF0Zm9ybTNET2JqZWN0Owor
ICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbV9jb250ZXh0LmdldCgpOworCisgICAg
aWYgKG5lZWRzTGlvbklPU3VyZmFjZVJlYWRiYWNrV29ya2Fyb3VuZCkgeworICAgICAgICAvLyBP
biBNYWMgT1MgWCAxMC43LCBjYWxsaW5nIGdsUmVhZFBpeGVscyBhZ2FpbnN0IGFuIEZCTyB3aG9z
ZSBjb2xvciBhdHRhY2htZW50IGlzIGFuCisgICAgICAgIC8vIElPU3VyZmFjZS1iYWNrZWQgdGV4
dHVyZSBjYXVzZXMgY29ycnVwdGlvbiBvZiBmdXR1cmUgZ2xSZWFkUGl4ZWxzIGNhbGxzLCBldmVu
IHRob3NlIG9uCisgICAgICAgIC8vIGRpZmZlcmVudCBPcGVuR0wgY29udGV4dHMuIEl0IGlzIGJl
bGlldmVkIHRoYXQgdGhpcyBpcyB0aGUgcm9vdCBjYXVzZSBvZiB0b3AgY3Jhc2hlcgorICAgICAg
ICAvLyBodHRwOi8vY3JidWcuY29tLzk5MzkzLgorCisgICAgICAgIHRlbXBvcmFyeVRleHR1cmUg
PSBtX2NvbnRleHQtPmNyZWF0ZVRleHR1cmUoKTsKKyAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRl
eHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZW1wb3JhcnlU
ZXh0dXJlKSk7CisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9N
SU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKSk7CisgICAgICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQz
RDo6TElORUFSKSk7CisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJp
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7CisgICAgICAgIEdM
Qyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4
dDNEOjpDTEFNUF9UT19FREdFKSk7CisgICAgICAgIC8vIENvcHkgdGhlIGNvbnRlbnRzIG9mIHRo
ZSBjdXJyZW50IChJT1N1cmZhY2UtYmFja2VkKSBmcmFtZWJ1ZmZlciBpbnRvIGEgdGVtcG9yYXJ5
IHRleHR1cmUuCisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5jb3B5VGV4SW1hZ2UyRChH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEs
IDAsIDAsIHJlY3QubWF4WCgpLCByZWN0Lm1heFkoKSwgMCkpOworICAgICAgICB0ZW1wb3JhcnlG
Qk8gPSBtX2NvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgICAgIC8vIEF0dGFjaCB0
aGlzIHRleHR1cmUgdG8gYW4gRkJPLCBhbmQgcGVyZm9ybSB0aGUgcmVhZGJhY2sgZnJvbSB0aGF0
IEZCTy4KKyAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIHRlbXBvcmFyeUZCTykpOworICAgICAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZW1wb3JhcnlUZXh0dXJlLCAwKSk7CisKKyAgICAg
ICAgQVNTRVJUKGNvbnRleHQtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExF
VEUpOworICAgIH0KKworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5yZWFkUGl4ZWxzKHJlY3Qu
eCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgcGl4ZWxzKSk7CisKKyAgICBpZiAobmVlZHNMaW9u
SU9TdXJmYWNlUmVhZGJhY2tXb3JrYXJvdW5kKSB7CisgICAgICAgIC8vIENsZWFuIHVwLgorICAg
ICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgMCkpOworICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+Ymlu
ZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApKTsKKyAgICAgICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPmRlbGV0ZUZyYW1lYnVmZmVyKHRlbXBvcmFyeUZCTykpOworICAg
ICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+ZGVsZXRlVGV4dHVyZSh0ZW1wb3JhcnlUZXh0dXJl
KSk7CisgICAgfQogfQogCiBNYW5hZ2VkVGV4dHVyZSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpn
ZXRPZmZzY3JlZW5MYXllclRleHR1cmUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRl
eCA4OWFkZTU1OGJiOTZjMTFiNjk1MmM3YThiMWRkNGQ0ZWY2NGZmMDI0Li4xMDVmY2JiNjU2NDM3
MWRmOWJjNDNkZjgxYTk0ZjFhYTIwMTM4ZGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
aApAQCAtNzcsNyArNzcsOCBAQCBzdHJ1Y3QgQ0NTZXR0aW5ncyB7CiAgICAgICAgICAgICAsIHBl
clRpbGVQYWludGluZyhmYWxzZSkKICAgICAgICAgICAgICwgcGFydGlhbFN3YXBFbmFibGVkKGZh
bHNlKQogICAgICAgICAgICAgLCB0aHJlYWRlZEFuaW1hdGlvbkVuYWJsZWQoZmFsc2UpCi0gICAg
ICAgICAgICAsIG1heFBhcnRpYWxUZXh0dXJlVXBkYXRlcyhzdGQ6Om51bWVyaWNfbGltaXRzPHNp
emVfdD46Om1heCgpKSB7IH0KKyAgICAgICAgICAgICwgbWF4UGFydGlhbFRleHR1cmVVcGRhdGVz
KHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpCisgICAgICAgICAgICAsIGxpb25J
T1N1cmZhY2VSZWFkYmFja1dvcmthcm91bmRFbmFibGVkKGZhbHNlKSB7IH0KIAogICAgIGJvb2wg
YWNjZWxlcmF0ZVBhaW50aW5nOwogICAgIGJvb2wgY29tcG9zaXRlT2Zmc2NyZWVuOwpAQCAtODgs
NiArODksNyBAQCBzdHJ1Y3QgQ0NTZXR0aW5ncyB7CiAgICAgYm9vbCBwYXJ0aWFsU3dhcEVuYWJs
ZWQ7CiAgICAgYm9vbCB0aHJlYWRlZEFuaW1hdGlvbkVuYWJsZWQ7CiAgICAgc2l6ZV90IG1heFBh
cnRpYWxUZXh0dXJlVXBkYXRlczsKKyAgICBib29sIGxpb25JT1N1cmZhY2VSZWFkYmFja1dvcmth
cm91bmRFbmFibGVkOwogfTsKIAogLy8gUHJvdmlkZXMgaW5mb3JtYXRpb24gb24gYW4gSW1wbCdz
IHJlbmRlcmluZyBjYXBhYmlsaXRpZXMgYmFjayB0byB0aGUgQ0NMYXllclRyZWVIb3N0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAppbmRleCA3ZjFiYmIwYzQ5
Njk4ZGI5MjM2NGE1NjI4YWY1NGE1MTJmNTVlMTI1Li43ZThhMjc5NzQ4NTRiYzVlY2VkMjE2NDZj
Yjg0ZTMwMWMzNzExZTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJTZXR0aW5ncy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNl
dHRpbmdzLmgKQEAgLTE0Myw2ICsxNDMsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNl
dFBlclRpbGVQYWludGluZ0VuYWJsZWQoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRQ
YXJ0aWFsU3dhcEVuYWJsZWQoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRUaHJlYWRl
ZEFuaW1hdGlvbkVuYWJsZWQoYm9vbCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRMaW9uSU9T
dXJmYWNlUmVhZGJhY2tXb3JrYXJvdW5kRW5hYmxlZChib29sKSA9IDA7CisgICAgdmlydHVhbCBi
b29sIGlzTGlvbklPU3VyZmFjZVJlYWRiYWNrV29ya2Fyb3VuZEVuYWJsZWQoKSA9IDA7CiAKIHBy
b3RlY3RlZDoKICAgICB+V2ViU2V0dGluZ3MoKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlldy5jcHAKaW5kZXggMjVlZjc3YWY1MjJjYjRlMDg1ZTJi
MzVhMzlmYzJmM2FjZmJjNzMyYS4uZjY4Y2MzYTc2NDI4ODJmNzFiMjBlOGNhNTk2ZGRmN2U1Njcw
NDBjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVl
Vmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmll
dy5jcHAKQEAgLTQ4LDYgKzQ4LDcgQEAgV2ViTGF5ZXJUcmVlVmlldzo6U2V0dGluZ3M6Om9wZXJh
dG9yIENDU2V0dGluZ3MoKSBjb25zdAogICAgIHNldHRpbmdzLnBlclRpbGVQYWludGluZyA9IHBl
clRpbGVQYWludGluZzsKICAgICBzZXR0aW5ncy5wYXJ0aWFsU3dhcEVuYWJsZWQgPSBwYXJ0aWFs
U3dhcEVuYWJsZWQ7CiAgICAgc2V0dGluZ3MudGhyZWFkZWRBbmltYXRpb25FbmFibGVkID0gdGhy
ZWFkZWRBbmltYXRpb25FbmFibGVkOworICAgIHNldHRpbmdzLmxpb25JT1N1cmZhY2VSZWFkYmFj
a1dvcmthcm91bmRFbmFibGVkID0gbGlvbklPU3VyZmFjZVJlYWRiYWNrV29ya2Fyb3VuZEVuYWJs
ZWQ7CiAKICAgICAvLyBGSVhNRTogc2hvd0ZQU0NvdW50ZXIgLyBzaG93UGxhdGZvcm1MYXllclRy
ZWUgLyBtYXhQYXJ0aWFsVGV4dHVyZVVwZGF0ZXMgYXJlbid0IHN1cHBvcnRlZCBjdXJyZW50bHku
CiAgICAgcmV0dXJuIHNldHRpbmdzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlNldHRpbmdzSW1wbC5jcHAKaW5kZXggNDg1YTViMDUxYTAyNjIwOGJmNzZjODc2OTJjMzQxZmVi
NDI2ZjY1ZC4uOGU4NmU5ZjA1NGZhNWMyMjBkNTVlNDczZDZkOTM1NmVjYjNkZWY3MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCkBAIC01MCw2
ICs1MCw3IEBAIFdlYlNldHRpbmdzSW1wbDo6V2ViU2V0dGluZ3NJbXBsKFNldHRpbmdzKiBzZXR0
aW5ncykKICAgICAsIG1fY29tcG9zaXRlVG9UZXh0dXJlRW5hYmxlZChmYWxzZSkKICAgICAsIG1f
c2hvd0ZQU0NvdW50ZXIoZmFsc2UpCiAgICAgLCBtX3Nob3dQbGF0Zm9ybUxheWVyVHJlZShmYWxz
ZSkKKyAgICAsIG1fbGlvbklPU3VyZmFjZVJlYWRiYWNrV29ya2Fyb3VuZEVuYWJsZWQoZmFsc2Up
CiB7CiAgICAgQVNTRVJUKHNldHRpbmdzKTsKIH0KQEAgLTU0OCw0ICs1NDksMTQgQEAgdm9pZCBX
ZWJTZXR0aW5nc0ltcGw6OnNldFRocmVhZGVkQW5pbWF0aW9uRW5hYmxlZChib29sIGVuYWJsZWQp
CiAgICAgbV9zZXR0aW5ncy0+c2V0VGhyZWFkZWRBbmltYXRpb25FbmFibGVkKGVuYWJsZWQpOwog
fQogCit2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0TGlvbklPU3VyZmFjZVJlYWRiYWNrV29ya2Fy
b3VuZEVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIG1fbGlvbklPU3VyZmFjZVJlYWRiYWNr
V29ya2Fyb3VuZEVuYWJsZWQgPSBlbmFibGVkOworfQorCitib29sIFdlYlNldHRpbmdzSW1wbDo6
aXNMaW9uSU9TdXJmYWNlUmVhZGJhY2tXb3JrYXJvdW5kRW5hYmxlZCgpCit7CisgICAgcmV0dXJu
IG1fbGlvbklPU3VyZmFjZVJlYWRiYWNrV29ya2Fyb3VuZEVuYWJsZWQ7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
U2V0dGluZ3NJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0lt
cGwuaAppbmRleCA1MWQ5MzIzYTQwODgyNmU1NDFhOWQzM2YwMDUxOWRhOWNhMmVhNTRlLi45YTBl
NDQyNTdjNTA3NDUyMWVlMTVmZWQ0Y2VjYjJiYWZmOTQwMGQyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaApAQCAtMTM4LDEyICsxMzgsMTUgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRQZXJUaWxlUGFpbnRpbmdFbmFibGVkKGJvb2wpOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRQYXJ0aWFsU3dhcEVuYWJsZWQoYm9vbCk7CiAgICAgdmlydHVh
bCB2b2lkIHNldFRocmVhZGVkQW5pbWF0aW9uRW5hYmxlZChib29sKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0TGlvbklPU3VyZmFjZVJlYWRiYWNrV29ya2Fyb3VuZEVuYWJsZWQoYm9vbCk7CisgICAg
dmlydHVhbCBib29sIGlzTGlvbklPU3VyZmFjZVJlYWRiYWNrV29ya2Fyb3VuZEVuYWJsZWQoKTsK
IAogcHJpdmF0ZToKICAgICBXZWJDb3JlOjpTZXR0aW5ncyogbV9zZXR0aW5nczsKICAgICBib29s
IG1fY29tcG9zaXRlVG9UZXh0dXJlRW5hYmxlZDsKICAgICBib29sIG1fc2hvd0ZQU0NvdW50ZXI7
CiAgICAgYm9vbCBtX3Nob3dQbGF0Zm9ybUxheWVyVHJlZTsKKyAgICBib29sIG1fbGlvbklPU3Vy
ZmFjZVJlYWRiYWNrV29ya2Fyb3VuZEVuYWJsZWQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCBmMTUz
MDIyOWU0OGI0MDFmMzFhMmM1ZjYxNDc1YWFjMjU4MThhMjViLi4xMDkwYWUyMTIwZWE4NGZkZGM1
MmQ5MzBkMWZjYWQ0NGVhZTVlMjIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuY3BwCkBAIC0zMTYwLDYgKzMxNjAsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJ
c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUpCiAgICAgICAgIGxheWVy
VHJlZVZpZXdTZXR0aW5ncy5jb21wb3NpdGVPZmZzY3JlZW4gPSBzZXR0aW5ncygpLT5jb21wb3Np
dGVUb1RleHR1cmVFbmFibGVkKCk7CiAgICAgICAgIGxheWVyVHJlZVZpZXdTZXR0aW5ncy5zaG93
RlBTQ291bnRlciA9IHNldHRpbmdzKCktPnNob3dGUFNDb3VudGVyKCk7CiAgICAgICAgIGxheWVy
VHJlZVZpZXdTZXR0aW5ncy5zaG93UGxhdGZvcm1MYXllclRyZWUgPSBzZXR0aW5ncygpLT5zaG93
UGxhdGZvcm1MYXllclRyZWUoKTsKKyAgICAgICAgbGF5ZXJUcmVlVmlld1NldHRpbmdzLmxpb25J
T1N1cmZhY2VSZWFkYmFja1dvcmthcm91bmRFbmFibGVkID0gc2V0dGluZ3MoKS0+aXNMaW9uSU9T
dXJmYWNlUmVhZGJhY2tXb3JrYXJvdW5kRW5hYmxlZCgpOwogCiAgICAgICAgIGxheWVyVHJlZVZp
ZXdTZXR0aW5ncy5wZXJUaWxlUGFpbnRpbmcgPSBwYWdlKCktPnNldHRpbmdzKCktPnBlclRpbGVE
cmF3aW5nRW5hYmxlZCgpOwogICAgICAgICBsYXllclRyZWVWaWV3U2V0dGluZ3MucGFydGlhbFN3
YXBFbmFibGVkID0gcGFnZSgpLT5zZXR0aW5ncygpLT5wYXJ0aWFsU3dhcEVuYWJsZWQoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129351</attachid>
            <date>2012-02-28 16:23:43 -0800</date>
            <delta_ts>2012-02-28 17:17:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79735-20120228162342.patch</filename>
            <type>text/plain</type>
            <size>5203</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5MTY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMThiMWY0MjA4MzgzN2Iw
YzMwNWRlMjQ1NmM2ODYyN2QyYTkwZGFmNC4uMjlmOThlYzA4YTBlYzMxNjE1NTU4MGNkODEyMmEy
OWM2MmU3ZWMxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTAyLTI4ICBLZW5u
ZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIFdvcmsg
YXJvdW5kIElPU3VyZmFjZS1yZWxhdGVkIGNvcnJ1cHRpb24gZHVyaW5nIHJlYWRiYWNrCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTczNQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvcHkgdGhlIGNvbXBv
c2l0b3IncyBJT1N1cmZhY2UtYmFja2VkIG91dHB1dCBpbnRvIGEgdGVtcG9yYXJ5CisgICAgICAg
IHRleHR1cmUgYW5kIHBlcmZvcm0gdGhlIFJlYWRQaXhlbHMgb3BlcmF0aW9uIGFnYWluc3QgdGhh
dCB0ZXh0dXJlLgorCisgICAgICAgIEl0IGlzIGluZmVhc2libGUgdG8gd3JpdGUgYW4gYXV0b21h
dGVkIHRlc3QgZm9yIHRoaXMgaXNzdWUuCisgICAgICAgIFRlc3RlZCBtYW51YWxseSBieSBwZXJm
b3JtaW5nIHByaW50IHByZXZpZXcgbXVsdGlwbGUgdGltZXMgYWdhaW5zdAorICAgICAgICBwYWdl
cyBjb250YWluaW5nIFdlYkdMIGNvbnRlbnQgb24gMTAuNyBhbmQgb2JzZXJ2aW5nIHRoYXQgdGhl
CisgICAgICAgIGNvcnJ1cHRpb24gaW4gdGhlIG91dHB1dCBpcyBubyBsb25nZXIgcHJlc2VudC4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmdldEZy
YW1lYnVmZmVyUGl4ZWxzKToKKwogMjAxMi0wMi0yOCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2
aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEw
ODgzNC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDU0MmIzYWQx
YzQyNzEzMzMzMjE3ODE5YjE4OGVmYjNkZGY3NTU3ODUuLjI5NDVjZjI4NThmNzRkMWM0NjQyOTBj
NTBjZTc2OGY4YWIzZWZkM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNw
cApAQCAtMTM1LDYgKzEzNSwyMSBAQCBib29sIGNvbnRleHRTdXBwb3J0c0FjY2VsZXJhdGVkUGFp
bnRpbmcoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiB9CiAjZW5kaWYKIAorYm9vbCBuZWVk
c0xpb25JT1N1cmZhY2VSZWFkYmFja1dvcmthcm91bmQoKQoreworI2lmIE9TKERBUldJTikKKyAg
ICBzdGF0aWMgU0ludDMyIHN5c3RlbVZlcnNpb24gPSAwOworICAgIGlmICghc3lzdGVtVmVyc2lv
bikgeworICAgICAgICBpZiAoR2VzdGFsdChnZXN0YWx0U3lzdGVtVmVyc2lvbiwgJnN5c3RlbVZl
cnNpb24pICE9IG5vRXJyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHJldHVybiBzeXN0ZW1WZXJzaW9uID49IDB4MTA3MDsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNl
OworI2VuZGlmCit9CisKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCiBjbGFzcyBMYXllclJl
bmRlcmVyU3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQWRhcHRlciA6IHB1YmxpYyBFeHRlbnNp
b25zM0RDaHJvbWl1bTo6U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hST01JVU0gewpAQCAt
MTA1MSw4ICsxMDY2LDQ0IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRGcmFtZWJ1
ZmZlclBpeGVscyh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlCiAKICAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKIAotICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+cmVh
ZFBpeGVscyhyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBwaXhlbHMpKTsKKyAg
ICBib29sIGRvV29ya2Fyb3VuZCA9IG5lZWRzTGlvbklPU3VyZmFjZVJlYWRiYWNrV29ya2Fyb3Vu
ZCgpOworCisgICAgUGxhdGZvcm0zRE9iamVjdCB0ZW1wb3JhcnlUZXh0dXJlID0gTnVsbFBsYXRm
b3JtM0RPYmplY3Q7CisgICAgUGxhdGZvcm0zRE9iamVjdCB0ZW1wb3JhcnlGQk8gPSBOdWxsUGxh
dGZvcm0zRE9iamVjdDsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IG1fY29udGV4
dC5nZXQoKTsKKworICAgIGlmIChkb1dvcmthcm91bmQpIHsKKyAgICAgICAgLy8gT24gTWFjIE9T
IFggMTAuNywgY2FsbGluZyBnbFJlYWRQaXhlbHMgYWdhaW5zdCBhbiBGQk8gd2hvc2UgY29sb3Ig
YXR0YWNobWVudCBpcyBhbgorICAgICAgICAvLyBJT1N1cmZhY2UtYmFja2VkIHRleHR1cmUgY2F1
c2VzIGNvcnJ1cHRpb24gb2YgZnV0dXJlIGdsUmVhZFBpeGVscyBjYWxscywgZXZlbiB0aG9zZSBv
bgorICAgICAgICAvLyBkaWZmZXJlbnQgT3BlbkdMIGNvbnRleHRzLiBJdCBpcyBiZWxpZXZlZCB0
aGF0IHRoaXMgaXMgdGhlIHJvb3QgY2F1c2Ugb2YgdG9wIGNyYXNoZXIKKyAgICAgICAgLy8gaHR0
cDovL2NyYnVnLmNvbS85OTM5My4gPHJkYXI6Ly9wcm9ibGVtLzEwOTQ5Njg3PgorCisgICAgICAg
IHRlbXBvcmFyeVRleHR1cmUgPSBjb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7CisgICAgICAgIEdM
Qyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgdGVtcG9yYXJ5VGV4dHVyZSkpOworICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikpOwor
ICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwg
R3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikpOworICAgICAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURH
RSkpOworICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9U
LCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSkpOworICAgICAgICAvLyBDb3B5IHRo
ZSBjb250ZW50cyBvZiB0aGUgY3VycmVudCAoSU9TdXJmYWNlLWJhY2tlZCkgZnJhbWVidWZmZXIg
aW50byBhIHRlbXBvcmFyeSB0ZXh0dXJlLgorICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
Y29weVRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBLCAwLCAwLCByZWN0Lm1heFgoKSwgcmVjdC5tYXhZKCksIDApKTsKKyAg
ICAgICAgdGVtcG9yYXJ5RkJPID0gY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICAg
ICAgLy8gQXR0YWNoIHRoaXMgdGV4dHVyZSB0byBhbiBGQk8sIGFuZCBwZXJmb3JtIHRoZSByZWFk
YmFjayBmcm9tIHRoYXQgRkJPLgorICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgdGVtcG9yYXJ5RkJPKSk7
CisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRB
Q0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRlbXBvcmFyeVRleHR1cmUs
IDApKTsKKworICAgICAgICBBU1NFUlQoY29udGV4dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpID09IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUl9DT01QTEVURSk7CisgICAgfQorCisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnJl
YWRQaXhlbHMocmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBwaXhlbHMpKTsKKworICAg
IGlmIChkb1dvcmthcm91bmQpIHsKKyAgICAgICAgLy8gQ2xlYW4gdXAuCisgICAgICAgIEdMQyhj
b250ZXh0LCBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCAwKSk7CisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCkpOworICAgICAgICBHTEMoY29udGV4dCwg
Y29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIodGVtcG9yYXJ5RkJPKSk7CisgICAgICAgIEdMQyhj
b250ZXh0LCBjb250ZXh0LT5kZWxldGVUZXh0dXJlKHRlbXBvcmFyeVRleHR1cmUpKTsKKyAgICB9
CiB9CiAKIE1hbmFnZWRUZXh0dXJlKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmdldE9mZnNjcmVl
bkxheWVyVGV4dHVyZSgpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>