<?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>89134</bug_id>
          
          <creation_ts>2012-06-14 15:36:32 -0700</creation_ts>
          <short_desc>[chromium] Use SkBitmap in ImageLayerChromium</short_desc>
          <delta_ts>2012-06-15 16:13:09 -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>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>89150</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>enne</cc>
    
    <cc>senorblanco</cc>
    
    <cc>tomhudson</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>649551</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-14 15:36:32 -0700</bug_when>
    <thetext>[chromium] Use SkBitmap in ImageLayerChromium</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649559</commentid>
    <comment_count>1</comment_count>
      <attachid>147666</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-14 15:44:54 -0700</bug_when>
    <thetext>Created attachment 147666
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649563</commentid>
    <comment_count>2</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-14 15:45:51 -0700</bug_when>
    <thetext>I&apos;m using pixelRef() to see if two SkBitmaps represent the same underlying thing - can you tell me if that&apos;s crazy or not, Stephen?  It appears to work for animated .gifs which is the case that&apos;s most relevant here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649588</commentid>
    <comment_count>3</comment_count>
      <attachid>147666</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-14 16:08:48 -0700</bug_when>
    <thetext>Comment on attachment 147666
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp:-147
&gt; -void ImageLayerChromium::setContents(Image* contents)

yay for removing the word &quot;contents&quot; :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649743</commentid>
    <comment_count>4</comment_count>
      <attachid>147666</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-14 18:58:39 -0700</bug_when>
    <thetext>Comment on attachment 147666
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp:469
&gt; +        NativeImageSkia* nativeImage = image-&gt;nativeImageForCurrentFrame();
&gt; +        imageLayer-&gt;setBitmap(nativeImage-&gt;bitmap());

What&apos;s the lifetime of the pixels in image-&gt;nativeImageForCurrentFrame()-&gt;bitmap() with respect to ImageLayerChromium&apos;s use of the SkBitmap&apos;s pixels? I don&apos;t understand SkBitmap enough to know what happens when the source of a copy goes away.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649761</commentid>
    <comment_count>5</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-14 19:18:27 -0700</bug_when>
    <thetext>SkBitmap holds a reference to the underlying data, I believe (right Stephen), so by holding an SkBitmap I believe I&apos;m keeping the actual image data alive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650177</commentid>
    <comment_count>6</comment_count>
      <attachid>147666</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-06-15 07:52:47 -0700</bug_when>
    <thetext>Comment on attachment 147666
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp:469
&gt;&gt; +        imageLayer-&gt;setBitmap(nativeImage-&gt;bitmap());
&gt; 
&gt; What&apos;s the lifetime of the pixels in image-&gt;nativeImageForCurrentFrame()-&gt;bitmap() with respect to ImageLayerChromium&apos;s use of the SkBitmap&apos;s pixels? I don&apos;t understand SkBitmap enough to know what happens when the source of a copy goes away.

There are two cases:  SkBitmaps can be exclusive owners of their pixels (where they have a non-NULL fPixels but a NULL fPixelRef), or they can have shared (non-exclusive) ownership, via fPixelRef.

The SkBitmap copy constructor will simply incref the SkPixelRef in the latter case, which I believe is the case for all bitmaps owned by NativeImageSkia.

&gt; Source/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp:139
&gt; +    if (bitmap.pixelRef() == m_bitmap.pixelRef())

As above, this will work as long as the SkBitmaps have non-exclusive pixel ownership, which I believe is the case here.

If you want to be conservative, you could do:

if (bitmap.pixelRef() &amp;&amp; bitmap.pixelRef() == m_bitmap.pixelRef())
    return;

&gt; Source/WebCore/platform/graphics/chromium/PlatformImage.cpp:-60
&gt; -} // namespace WebCore

Yay for negative linecount patches.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650215</commentid>
    <comment_count>7</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-15 08:36:19 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 147666 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=147666&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp:469
&gt; &gt;&gt; +        imageLayer-&gt;setBitmap(nativeImage-&gt;bitmap());
&gt; &gt; 
&gt; &gt; What&apos;s the lifetime of the pixels in image-&gt;nativeImageForCurrentFrame()-&gt;bitmap() with respect to ImageLayerChromium&apos;s use of the SkBitmap&apos;s pixels? I don&apos;t understand SkBitmap enough to know what happens when the source of a copy goes away.
&gt; 
&gt; There are two cases:  SkBitmaps can be exclusive owners of their pixels (where they have a non-NULL fPixels but a NULL fPixelRef), or they can have shared (non-exclusive) ownership, via fPixelRef.
&gt; 
&gt; The SkBitmap copy constructor will simply incref the SkPixelRef in the latter case, which I believe is the case for all bitmaps owned by NativeImageSkia.

Thanks for the explanation.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650507</commentid>
    <comment_count>8</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-15 14:25:54 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 147666 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=147666&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp:469
&gt; &gt;&gt; +        imageLayer-&gt;setBitmap(nativeImage-&gt;bitmap());
&gt; &gt; 
&gt; &gt; What&apos;s the lifetime of the pixels in image-&gt;nativeImageForCurrentFrame()-&gt;bitmap() with respect to ImageLayerChromium&apos;s use of the SkBitmap&apos;s pixels? I don&apos;t understand SkBitmap enough to know what happens when the source of a copy goes away.
&gt; 
&gt; There are two cases:  SkBitmaps can be exclusive owners of their pixels (where they have a non-NULL fPixels but a NULL fPixelRef), or they can have shared (non-exclusive) ownership, via fPixelRef.
&gt; 
&gt; The SkBitmap copy constructor will simply incref the SkPixelRef in the latter case, which I believe is the case for all bitmaps owned by NativeImageSkia.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp:139
&gt; &gt; +    if (bitmap.pixelRef() == m_bitmap.pixelRef())
&gt; 
&gt; As above, this will work as long as the SkBitmaps have non-exclusive pixel ownership, which I believe is the case here.

I believe that&apos;s the case for this as well, but I&apos;ll add the defensive check anyway (since I plan to expose this to the general compositor API and people might pass in other sorts of bitmaps).

&gt; 
&gt; If you want to be conservative, you could do:
&gt; 
&gt; if (bitmap.pixelRef() &amp;&amp; bitmap.pixelRef() == m_bitmap.pixelRef())
&gt;     return;

Will do. Mind setting the review flag if you&apos;re happy otherwise? :)

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/PlatformImage.cpp:-60
&gt; &gt; -} // namespace WebCore
&gt; 
&gt; Yay for negative linecount patches.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650582</commentid>
    <comment_count>9</comment_count>
      <attachid>147914</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-15 15:42:09 -0700</bug_when>
    <thetext>Created attachment 147914
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650590</commentid>
    <comment_count>10</comment_count>
      <attachid>147914</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-15 15:52:35 -0700</bug_when>
    <thetext>Comment on attachment 147914
Patch

R=me.  I don&apos;t think there&apos;s anything controversial here.  If senorblanco wants to change something about this, there can always be a follow-up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650608</commentid>
    <comment_count>11</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-15 16:13:09 -0700</bug_when>
    <thetext>Committed r120507: &lt;http://trac.webkit.org/changeset/120507&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147666</attachid>
            <date>2012-06-14 15:44:54 -0700</date>
            <delta_ts>2012-06-15 15:42:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89134-20120614154454.patch</filename>
            <type>text/plain</type>
            <size>15980</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTAxNTlhNDVmM2Y5YmMx
M2IwNjk3ODEwZWQ5MjRjMjJmNWQ4OTY2Ny4uNmFiMDA5ZmYzMWZhMjI0NzdmMWFiMmRkMWFiN2Zl
ODJkYmMxM2Y5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQwIEBACiAyMDEyLTA2LTE0ICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgW2Nocm9taXVtXSBV
c2UgU2tCaXRtYXAgaW4gSW1hZ2VMYXllckNocm9taXVtCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTEzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9JbWFn
ZShJbWFnZSopIGlzIGNhbGxlZCB3aGVuZXZlciBhbiBpbWFnZSBsYXllcidzIGltYWdlIGlzIG9y
IG1pZ2h0IGhhdmUgY2hhbmdlZC4KKyAgICAgICAgSW4gQ2hyb21pdW0sIHRoaXMgdXNlZCB0byBo
YW5nIG9uIHRvIGEgUmVmUHRyPFdlYkNvcmU6OkltYWdlPiB1bnRpbCB0aGUgY29tcG9zaXRvciB3
YXMgcmVhZHkgdG8gdXBsb2FkIHRleHR1cmUgY29udGVudHMuCisgICAgICAgIFRoaXMgaXMgcG90
ZW50aWFsbHkgYSBiaXQgZmlzaHkgc2luY2UgdGhlIEltYWdlIGl0c2VsZiBtaWdodCBub3QgYmUg
aW4gZXhhY3RseSB0aGUgc2FtZSBzdGF0ZSB3aGVuIHdlIGdldCBhcm91bmQKKyAgICAgICAgdG8g
dXBsb2FkaW5nIHRleHR1cmVzIGFuZCBpdCBhbHNvIGNyZWF0ZXMgYSBiYWQgZGVwZW5kZW5jeSBm
cm9tIEltYWdlTGF5ZXJDaHJvbWl1bSBvbiBXZWJDb3JlOjpJbWFnZS4KKworICAgICAgICBUaGlz
IHBhdGNoIGdyYWJzIHRoZSB1bmRlcmx5aW5nIFNrQml0bWFwIGluIHRoZSBzZXRDb250ZW50c1Rv
IGNhbGwgYW5kIHBhc3NlcyB0aGF0IGludG8gSW1hZ2VMYXllckNocm9taXVtCisgICAgICAgIGlu
c3RlYWQuIEkndmUgYWxzbyByZW1vdmVkIHRoZSB2ZW5lcmFibGUgYnV0IHJlZHVuZGFudCBQbGF0
Zm9ybUltYWdlIGNvbmNlcHQgc2luY2UgYWxsIG9mIGNocm9taXVtJ3MgaW1hZ2VzIGFyZQorICAg
ICAgICBza2lhIGJpdG1hcHMgdGhlc2UgZGF5cy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0
aW5nIHRlc3RzLCBwYXJ0aWN1bGFybHkgY29tcG9zaXRpbmcvaW1hZ2VzLyBhbmQgY29tcG9zaXRp
bmcvY29sb3ItbWF0Y2hpbmcvLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9JbWFn
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6dXBk
YXRlVGV4dHVyZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllclRleHR1cmVVcGRh
dGVyOjpzZXRCaXRtYXApOgorICAgICAgICAoSW1hZ2VMYXllclRleHR1cmVVcGRhdGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6SW1hZ2VMYXllckNocm9taXVtKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6c2V0Qml0bWFwKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6dXBkYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6Y29udGVudEJvdW5kcyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUxheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmg6CisgICAgICAgIChJbWFnZUxh
eWVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRm
b3JtSW1hZ2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1BsYXRmb3JtSW1hZ2UuaDogUmVtb3ZlZC4KKworMjAxMi0wNi0xNCAgSmFtZXMgUm9iaW5z
b24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFtjaHJvbWl1bV0gTW92ZSBvcGFx
dWUgcmVjdGFuZ2xlIHRyYWNraW5nIGxvZ2ljIG91dCBvZiBjb21wb3NpdG9yIGNvcmUKICAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5MDMxCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQppbmRleCA4OGY3ZTU0Y2Y4YWZiZjliYjViYjcyOGI3MGU1YzkzZjFmNWI5NDg3Li43
NTNhNDc3MmQyOGI1OTRjNTE4ZDJiMTAyMTJjMzc0NjY4Mjc1YjFlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CkBAIC0zNjMwLDggKzM2MzAsNiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1BsYXRmb3JtQ2FudmFzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1BsYXRmb3JtQ29sb3IuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vUGxhdGZvcm1JY29uLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1BsYXRmb3JtSW1hZ2UuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUltYWdlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1Byb2dyYW1CaW5kaW5nLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUHJvZ3JhbUJpbmRpbmcuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmF0ZUxpbWl0ZXIuY3BwJywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJD
aHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9H
cmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDg2YTFmMzI5OTZjNmI2ZTFlNmU1NGYwYzMz
OWU4M2JhMjEyMGE5MWUuLmM4N2E3MmI3M2Y2YWRjZTgwN2YxYWJhMmRkZTZkNzllYzViOWMyNGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dy
YXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcApAQCAtNTUsNiArNTUsNyBA
QAogI2luY2x1ZGUgIkltYWdlTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21p
dW0uaCIKICNpbmNsdWRlICJMaW5rSGlnaGxpZ2h0LmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VT
a2lhLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2tNYXRyaXg0NC5oIgpAQCAtNDY0LDcgKzQ2NSw4IEBA
IHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGlt
YWdlKQogICAgICAgICAgICAgY2hpbGRyZW5DaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgfQogICAg
ICAgICBJbWFnZUxheWVyQ2hyb21pdW0qIGltYWdlTGF5ZXIgPSBzdGF0aWNfY2FzdDxJbWFnZUxh
eWVyQ2hyb21pdW0qPihtX2NvbnRlbnRzTGF5ZXIudW53cmFwPExheWVyQ2hyb21pdW0+KCkpOwot
ICAgICAgICBpbWFnZUxheWVyLT5zZXRDb250ZW50cyhpbWFnZSk7CisgICAgICAgIE5hdGl2ZUlt
YWdlU2tpYSogbmF0aXZlSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
KTsKKyAgICAgICAgaW1hZ2VMYXllci0+c2V0Qml0bWFwKG5hdGl2ZUltYWdlLT5iaXRtYXAoKSk7
CiAgICAgICAgIGltYWdlTGF5ZXItPnNldE9wYXF1ZShpbWFnZS0+aXNCaXRtYXBJbWFnZSgpICYm
ICFpbWFnZS0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSk7CiAgICAgICAgIHVwZGF0ZUNvbnRlbnRz
UmVjdCgpOwogICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAppbmRl
eCAwZWNlZWM2MjY2MGY4ODNhMjM5YjhkMjY4MjViZGI4YWMwMzgzNzkxLi4zMDQzYmMzZmU4MGI2
YzQ4MDE5NmUxNmVhMzI0ODlkMjkxNTcwYjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1
bS5jcHAKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgICAgICB7CiAgICAgICAgIH0KIAot
ICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlUmVjdChDQ0dyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0
LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKKyAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVJl
Y3QoQ0NHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRv
ciwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpIE9W
RVJSSURFCiAgICAgICAgIHsKICAgICAgICAgICAgIHRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZVRl
eHR1cmVSZWN0KGNvbnRleHQsIGFsbG9jYXRvciwgdGV4dHVyZSgpLCBzb3VyY2VSZWN0LCBkZXN0
UmVjdCk7CiAgICAgICAgIH0KQEAgLTc3LDQxICs3NywzMyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgVGV4dHVyZSh0aGlzLCBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKG1h
bmFnZXIpKSk7CiAgICAgfQogCi0gICAgdmlydHVhbCBTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxl
ZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpCisgICAgdmlydHVhbCBTYW1wbGVk
VGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpIE9W
RVJSSURFCiAgICAgewogICAgICAgICByZXR1cm4gUGxhdGZvcm1Db2xvcjo6c2FtZUNvbXBvbmVu
dE9yZGVyKHRleHR1cmVGb3JtYXQpID8KICAgICAgICAgICAgICAgICBMYXllclRleHR1cmVVcGRh
dGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRSR0JBIDogTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxl
ZFRleGVsRm9ybWF0QkdSQTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTGF5ZXJS
ZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwg
aW50IC8qIGJvcmRlclRleGVscyAqLywgZmxvYXQgLyogY29udGVudHNTY2FsZSAqLywgSW50UmVj
dCogLyogcmVzdWx0aW5nT3BhcXVlUmVjdCAqLykKLSAgICB7Ci0gICAgICAgIG1fdGV4U3ViSW1h
Z2Uuc2V0U3ViSW1hZ2VTaXplKHRpbGVTaXplKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlVGV4dHVyZVJlY3QoQ0NHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFRleHR1cmVBbGxv
Y2F0b3IqIGFsbG9jYXRvciwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQorICAgIHZvaWQgdXBkYXRlVGV4
dHVyZVJlY3QoQ0NHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFs
bG9jYXRvciwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQogICAgIHsKICAgICAgICAgdGV4dHVyZS0+Ymlu
ZFRleHR1cmUoY29udGV4dCwgYWxsb2NhdG9yKTsKIAogICAgICAgICAvLyBTb3VyY2UgcmVjdCBz
aG91bGQgbmV2ZXIgZ28gb3V0c2lkZSB0aGUgaW1hZ2UgcGl4ZWxzLCBldmVuIGlmIHRoaXMKICAg
ICAgICAgLy8gaXMgcmVxdWVzdGVkIGJlY2F1c2UgdGhlIHRleHR1cmUgZXh0ZW5kcyBvdXRzaWRl
IHRoZSBpbWFnZS4KICAgICAgICAgSW50UmVjdCBjbGlwcGVkU291cmNlUmVjdCA9IHNvdXJjZVJl
Y3Q7Ci0gICAgICAgIGNsaXBwZWRTb3VyY2VSZWN0LmludGVyc2VjdChpbWFnZVJlY3QoKSk7Cisg
ICAgICAgIEludFJlY3QgaW1hZ2VSZWN0ID0gSW50UmVjdCgwLCAwLCBtX2JpdG1hcC53aWR0aCgp
LCBtX2JpdG1hcC5oZWlnaHQoKSk7CisgICAgICAgIGNsaXBwZWRTb3VyY2VSZWN0LmludGVyc2Vj
dChpbWFnZVJlY3QpOwogCiAgICAgICAgIEludFJlY3QgY2xpcHBlZERlc3RSZWN0ID0gZGVzdFJl
Y3Q7CiAgICAgICAgIGNsaXBwZWREZXN0UmVjdC5tb3ZlKGNsaXBwZWRTb3VyY2VSZWN0LmxvY2F0
aW9uKCkgLSBzb3VyY2VSZWN0LmxvY2F0aW9uKCkpOwogICAgICAgICBjbGlwcGVkRGVzdFJlY3Qu
c2V0U2l6ZShjbGlwcGVkU291cmNlUmVjdC5zaXplKCkpOwogCi0gICAgICAgIG1fdGV4U3ViSW1h
Z2UudXBsb2FkKG1faW1hZ2UucGl4ZWxzKCksIGltYWdlUmVjdCgpLCBjbGlwcGVkU291cmNlUmVj
dCwgY2xpcHBlZERlc3RSZWN0LCB0ZXh0dXJlLT5mb3JtYXQoKSwgY29udGV4dCk7CisgICAgICAg
IFNrQXV0b0xvY2tQaXhlbHMgbG9jayhtX2JpdG1hcCk7CisgICAgICAgIG1fdGV4U3ViSW1hZ2Uu
dXBsb2FkKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihtX2JpdG1hcC5nZXRQaXhlbHMoKSks
IGltYWdlUmVjdCwgY2xpcHBlZFNvdXJjZVJlY3QsIGNsaXBwZWREZXN0UmVjdCwgdGV4dHVyZS0+
Zm9ybWF0KCksIGNvbnRleHQpOwogICAgIH0KIAotICAgIHZvaWQgdXBkYXRlRnJvbUltYWdlKE5h
dGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlKQorICAgIHZvaWQgc2V0Qml0bWFwKGNvbnN0IFNrQml0
bWFwJiBiaXRtYXApCiAgICAgewotICAgICAgICBtX2ltYWdlLnVwZGF0ZUZyb21JbWFnZShuYXRp
dmVJbWFnZSk7Ci0gICAgfQotCi0gICAgSW50U2l6ZSBpbWFnZVNpemUoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1faW1hZ2Uuc2l6ZSgpOworICAgICAgICBtX2JpdG1hcCA9IGJpdG1h
cDsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0xMjAsMTIgKzExMiw3IEBAIHByaXZhdGU6CiAgICAg
ewogICAgIH0KIAotICAgIEludFJlY3QgaW1hZ2VSZWN0KCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1faW1hZ2Uuc2l6ZSgpKTsKLSAgICB9
Ci0KLSAgICBQbGF0Zm9ybUltYWdlIG1faW1hZ2U7CisgICAgU2tCaXRtYXAgbV9iaXRtYXA7CiAg
ICAgTGF5ZXJUZXh0dXJlU3ViSW1hZ2UgbV90ZXhTdWJJbWFnZTsKIH07CiAKQEAgLTEzNiw3ICsx
MjMsNiBAQCBQYXNzUmVmUHRyPEltYWdlTGF5ZXJDaHJvbWl1bT4gSW1hZ2VMYXllckNocm9taXVt
OjpjcmVhdGUoKQogCiBJbWFnZUxheWVyQ2hyb21pdW06OkltYWdlTGF5ZXJDaHJvbWl1bSgpCiAg
ICAgOiBUaWxlZExheWVyQ2hyb21pdW0oKQotICAgICwgbV9pbWFnZUZvckN1cnJlbnRGcmFtZSgw
KQogewogfQogCkBAIC0xNDQsMTcgKzEzMCwxNiBAQCBJbWFnZUxheWVyQ2hyb21pdW06On5JbWFn
ZUxheWVyQ2hyb21pdW0oKQogewogfQogCi12b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6c2V0Q29u
dGVudHMoSW1hZ2UqIGNvbnRlbnRzKQordm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnNldEJpdG1h
cChjb25zdCBTa0JpdG1hcCYgYml0bWFwKQogewotICAgIC8vIHNldENvbnRlbnRzKCkgY3VycmVu
dGx5IGdldHMgY2FsbGVkIHdoZW5ldmVyIHRoZXJlIGlzIGFueQorICAgIC8vIHNldEJpdG1hcCgp
IGN1cnJlbnRseSBnZXRzIGNhbGxlZCB3aGVuZXZlciB0aGVyZSBpcyBhbnkKICAgICAvLyBzdHls
ZSBjaGFuZ2UgdGhhdCBhZmZlY3RzIHRoZSBsYXllciBldmVuIGlmIHRoYXQgY2hhbmdlIGRvZXNu
J3QKICAgICAvLyBhZmZlY3QgdGhlIGFjdHVhbCBjb250ZW50cyBvZiB0aGUgaW1hZ2UgKGUuZy4g
YSBDU1MgYW5pbWF0aW9uKS4KICAgICAvLyBXaXRoIHRoaXMgY2hlY2sgaW4gcGxhY2Ugd2UgYXZv
aWQgdW5lY2Vzc2FyeSB0ZXh0dXJlIHVwbG9hZHMuCi0gICAgaWYgKChtX2NvbnRlbnRzID09IGNv
bnRlbnRzKSAmJiAobV9jb250ZW50cy0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSA9PSBt
X2ltYWdlRm9yQ3VycmVudEZyYW1lKSkKKyAgICBpZiAoYml0bWFwLnBpeGVsUmVmKCkgPT0gbV9i
aXRtYXAucGl4ZWxSZWYoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jb250ZW50cyA9IGNv
bnRlbnRzOwotICAgIG1faW1hZ2VGb3JDdXJyZW50RnJhbWUgPSBtX2NvbnRlbnRzLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIG1fYml0bWFwID0gYml0bWFwOwogICAgIHNldE5l
ZWRzRGlzcGxheSgpOwogfQogCkBAIC0xNjIsNyArMTQ3LDcgQEAgdm9pZCBJbWFnZUxheWVyQ2hy
b21pdW06OnVwZGF0ZShDQ1RleHR1cmVVcGRhdGVyJiB1cGRhdGVyLCBjb25zdCBDQ09jY2x1c2lv
blRyYWMKIHsKICAgICBjcmVhdGVUZXh0dXJlVXBkYXRlcklmTmVlZGVkKCk7CiAgICAgaWYgKG1f
bmVlZHNEaXNwbGF5KSB7Ci0gICAgICAgIG1fdGV4dHVyZVVwZGF0ZXItPnVwZGF0ZUZyb21JbWFn
ZShtX2NvbnRlbnRzLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKTsKKyAgICAgICAgbV90
ZXh0dXJlVXBkYXRlci0+c2V0Qml0bWFwKG1fYml0bWFwKTsKICAgICAgICAgdXBkYXRlVGlsZVNp
emVBbmRUaWxpbmdPcHRpb24oKTsKICAgICAgICAgaW52YWxpZGF0ZVJlY3QoSW50UmVjdChJbnRQ
b2ludCgpLCBjb250ZW50Qm91bmRzKCkpKTsKICAgICAgICAgbV9uZWVkc0Rpc3BsYXkgPSBmYWxz
ZTsKQEAgLTE4OSwxNCArMTc0LDEyIEBAIExheWVyVGV4dHVyZVVwZGF0ZXIqIEltYWdlTGF5ZXJD
aHJvbWl1bTo6dGV4dHVyZVVwZGF0ZXIoKSBjb25zdAogCiBJbnRTaXplIEltYWdlTGF5ZXJDaHJv
bWl1bTo6Y29udGVudEJvdW5kcygpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2NvbnRlbnRzKQotICAg
ICAgICByZXR1cm4gSW50U2l6ZSgpOwotICAgIHJldHVybiBtX2NvbnRlbnRzLT5zaXplKCk7Cisg
ICAgcmV0dXJuIEludFNpemUobV9iaXRtYXAud2lkdGgoKSwgbV9iaXRtYXAuaGVpZ2h0KCkpOwog
fQogCiBib29sIEltYWdlTGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbV9jb250ZW50cyAmJiBUaWxlZExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgp
OworICAgIHJldHVybiAhbV9iaXRtYXAuaXNOdWxsKCkgJiYgVGlsZWRMYXllckNocm9taXVtOjpk
cmF3c0NvbnRlbnQoKTsKIH0KIAogYm9vbCBJbWFnZUxheWVyQ2hyb21pdW06Om5lZWRzQ29udGVu
dHNTY2FsZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oCmluZGV4IGYwODRkNGNi
N2IxN2U0NWQwM2Q5YWJjOTYzM2I2YzI2OGYzMWZlZGEuLjk4OGU3MWVhYzM2MWEwODFjMTU5ODFm
MWQwY2QzYjM4YjJmYWY3OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oCkBAIC0zNSwx
MSArMzUsMTAgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKICNpbmNsdWRl
ICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2UuaCIKKyNp
bmNsdWRlICJTa0JpdG1hcC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEltYWdl
OwogY2xhc3MgSW1hZ2VMYXllclRleHR1cmVVcGRhdGVyOwogCiAvLyBBIExheWVyIHRoYXQgY29u
dGFpbnMgb25seSBhbiBJbWFnZSBlbGVtZW50LgpAQCAtNTIsNyArNTEsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZShDQ1RleHR1cmVVcGRhdGVyJiwgY29uc3QgQ0NPY2NsdXNp
b25UcmFja2VyKikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIG5lZWRzQ29udGVudHNTY2Fs
ZSgpIGNvbnN0IE9WRVJSSURFOwogCi0gICAgdm9pZCBzZXRDb250ZW50cyhJbWFnZSogaW1hZ2Up
OworICAgIHZvaWQgc2V0Qml0bWFwKGNvbnN0IFNrQml0bWFwJiBpbWFnZSk7CiAKIHByaXZhdGU6
CiAgICAgSW1hZ2VMYXllckNocm9taXVtKCk7CkBAIC02Myw4ICs2Miw3IEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQoKSBPVkVSUklERTsK
ICAgICB2aXJ0dWFsIEludFNpemUgY29udGVudEJvdW5kcygpIGNvbnN0IE9WRVJSSURFOwogCi0g
ICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZUZvckN1cnJlbnRGcmFtZTsKLSAgICBSZWZQdHI8SW1h
Z2U+IG1fY29udGVudHM7CisgICAgU2tCaXRtYXAgbV9iaXRtYXA7CiAKICAgICBSZWZQdHI8SW1h
Z2VMYXllclRleHR1cmVVcGRhdGVyPiBtX3RleHR1cmVVcGRhdGVyOwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtSW1hZ2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1J
bWFnZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlMmYxYWJjZmYzYjA4YWJj
NDliZjMzMWQ5MjdkMmMyYjU4Mjk1YmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
UGxhdGZvcm1JbWFnZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2UuaCIKLQotI2luY2x1
ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QbGF0Zm9ybUltYWdlOjpQbGF0Zm9ybUltYWdlKCkK
LXsKLX0KLQotdm9pZCBQbGF0Zm9ybUltYWdlOjp1cGRhdGVGcm9tSW1hZ2UoTmF0aXZlSW1hZ2VQ
dHIgbmF0aXZlSW1hZ2UpCi17Ci0gICAgLy8gVGhlIGxheWVyIGNvbnRhaW5zIGFuIEltYWdlLgot
ICAgIE5hdGl2ZUltYWdlU2tpYSogc2tpYUltYWdlID0gc3RhdGljX2Nhc3Q8TmF0aXZlSW1hZ2VT
a2lhKj4obmF0aXZlSW1hZ2UpOwotICAgIEFTU0VSVChza2lhSW1hZ2UpOwotICAgIGNvbnN0IFNr
Qml0bWFwJiBza2lhQml0bWFwID0gc2tpYUltYWdlLT5iaXRtYXAoKTsKLQotICAgIEludFNpemUg
Yml0bWFwU2l6ZShza2lhQml0bWFwLndpZHRoKCksIHNraWFCaXRtYXAuaGVpZ2h0KCkpOwotCi0g
ICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBiaXRtYXBTaXplLndpZHRoKCkgKiBiaXRtYXBTaXplLmhl
aWdodCgpICogNDsKLSAgICBpZiAobV9zaXplICE9IGJpdG1hcFNpemUpIHsKLSAgICAgICAgbV9w
aXhlbERhdGEgPSBhZG9wdEFycmF5UHRyKG5ldyB1aW50OF90W2J1ZmZlclNpemVdKTsKLSAgICAg
ICAgbWVtc2V0KG1fcGl4ZWxEYXRhLmdldCgpLCAwLCBidWZmZXJTaXplKTsKLSAgICAgICAgbV9z
aXplID0gYml0bWFwU2l6ZTsKLSAgICB9Ci0KLSAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2soc2tp
YUJpdG1hcCk7Ci0gICAgLy8gRklYTUU6IGRvIHdlIG5lZWQgdG8gc3VwcG9ydCBtb3JlIGltYWdl
IGNvbmZpZ3VyYXRpb25zPwotICAgIEFTU0VSVChza2lhQml0bWFwLmNvbmZpZygpPT0gU2tCaXRt
YXA6OmtBUkdCXzg4ODhfQ29uZmlnKTsKLSAgICBza2lhQml0bWFwLmNvcHlQaXhlbHNUbyhtX3Bp
eGVsRGF0YS5nZXQoKSwgYnVmZmVyU2l6ZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Bs
YXRmb3JtSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1BsYXRmb3JtSW1hZ2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJmNzdiNjJl
YjQwYjFlZTY5N2VmOGY2NTg4Njc1MWY3Zjk2ODYzMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9QbGF0Zm9ybUltYWdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBQbGF0Zm9ybUltYWdlX2gKLSNkZWZpbmUgUGxhdGZvcm1JbWFnZV9oCi0K
LSNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRl
IDxzdGRpbnQuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYv
T3duQXJyYXlQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBQbGF0Zm9ybUlt
YWdlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQbGF0Zm9ybUltYWdlKTsKLXB1YmxpYzoK
LSAgICBQbGF0Zm9ybUltYWdlKCk7Ci0KLSAgICB2b2lkIHVwZGF0ZUZyb21JbWFnZShOYXRpdmVJ
bWFnZVB0cik7Ci0gICAgY29uc3QgdWludDhfdCogcGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gbV9w
aXhlbERhdGEgPyAmbV9waXhlbERhdGFbMF0gOiAwOyB9Ci0gICAgSW50U2l6ZSBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9zaXplOyB9Ci0KLXByaXZhdGU6Ci0gICAgT3duQXJyYXlQdHI8dWludDhf
dD4gbV9waXhlbERhdGE7Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147914</attachid>
            <date>2012-06-15 15:42:09 -0700</date>
            <delta_ts>2012-06-15 15:52:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89134-20120615154209.patch</filename>
            <type>text/plain</type>
            <size>15967</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwNTAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWM4NmYwMzYyNzVhMTll
MjJiYWNmNmVhYWI4Zjk0ZjQ0N2RhN2ExOC4uMTA3MWMwNzBhOTdlN2Q3NWYzYmNlMTBmYTc4ZGFl
MzNkYzQxOThlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEyLTA2LTE0ICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBV
c2UgU2tCaXRtYXAgaW4gSW1hZ2VMYXllckNocm9taXVtCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTEzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9JbWFn
ZShJbWFnZSopIGlzIGNhbGxlZCB3aGVuZXZlciBhbiBpbWFnZSBsYXllcidzIGltYWdlIGlzIG9y
IG1pZ2h0IGhhdmUgY2hhbmdlZC4KKyAgICAgICAgSW4gQ2hyb21pdW0sIHRoaXMgdXNlZCB0byBo
YW5nIG9uIHRvIGEgUmVmUHRyPFdlYkNvcmU6OkltYWdlPiB1bnRpbCB0aGUgY29tcG9zaXRvciB3
YXMgcmVhZHkgdG8gdXBsb2FkIHRleHR1cmUgY29udGVudHMuCisgICAgICAgIFRoaXMgaXMgcG90
ZW50aWFsbHkgYSBiaXQgZmlzaHkgc2luY2UgdGhlIEltYWdlIGl0c2VsZiBtaWdodCBub3QgYmUg
aW4gZXhhY3RseSB0aGUgc2FtZSBzdGF0ZSB3aGVuIHdlIGdldCBhcm91bmQKKyAgICAgICAgdG8g
dXBsb2FkaW5nIHRleHR1cmVzIGFuZCBpdCBhbHNvIGNyZWF0ZXMgYSBiYWQgZGVwZW5kZW5jeSBm
cm9tIEltYWdlTGF5ZXJDaHJvbWl1bSBvbiBXZWJDb3JlOjpJbWFnZS4KKworICAgICAgICBUaGlz
IHBhdGNoIGdyYWJzIHRoZSB1bmRlcmx5aW5nIFNrQml0bWFwIGluIHRoZSBzZXRDb250ZW50c1Rv
IGNhbGwgYW5kIHBhc3NlcyB0aGF0IGludG8gSW1hZ2VMYXllckNocm9taXVtCisgICAgICAgIGlu
c3RlYWQuIEkndmUgYWxzbyByZW1vdmVkIHRoZSB2ZW5lcmFibGUgYnV0IHJlZHVuZGFudCBQbGF0
Zm9ybUltYWdlIGNvbmNlcHQgc2luY2UgYWxsIG9mIGNocm9taXVtJ3MgaW1hZ2VzIGFyZQorICAg
ICAgICBza2lhIGJpdG1hcHMgdGhlc2UgZGF5cy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0
aW5nIHRlc3RzLCBwYXJ0aWN1bGFybHkgY29tcG9zaXRpbmcvaW1hZ2VzLyBhbmQgY29tcG9zaXRp
bmcvY29sb3ItbWF0Y2hpbmcvLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENvbnRlbnRzVG9JbWFn
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6dXBk
YXRlVGV4dHVyZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllclRleHR1cmVVcGRh
dGVyOjpzZXRCaXRtYXApOgorICAgICAgICAoSW1hZ2VMYXllclRleHR1cmVVcGRhdGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6SW1hZ2VMYXllckNocm9taXVtKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6c2V0Qml0bWFwKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6dXBkYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6Y29udGVudEJvdW5kcyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUxheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmg6CisgICAgICAgIChJbWFnZUxh
eWVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRm
b3JtSW1hZ2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1BsYXRmb3JtSW1hZ2UuaDogUmVtb3ZlZC4KKwogMjAxMi0wNi0xNSAgSmFtZXMgUm9iaW5z
b24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gRml4IExheW91
dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nL2FjY2VsZXJhdGVkLWRyYXdpbmcv
c3ZnLWZpbHRlcnMuaHRtbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDhkOTRlMTE0MzEwYzM5ODFhOWUz
MTlhMjU0ODQzN2E4YzBiNzQ5ZjMuLjdjMmJhN2Y1NDZiZmUyNzhlMzJhZDQ4OTM1ZmFjNzgxZDU3
YTdmMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM2MzAsOCArMzYzMCw2IEBACiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1DYW52YXMuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1Db2xvci5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUljb24uaCcsCi0gICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1JbWFnZS5jcHAnLAot
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtSW1hZ2UuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUHJvZ3JhbUJpbmRpbmcu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Qcm9ncmFtQmlu
ZGluZy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SYXRlTGlt
aXRlci5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggODZh
MWYzMjk5NmM2YjZlMWU2ZTU0ZjBjMzM5ZTgzYmEyMTIwYTkxZS4uYzg3YTcyYjczZjZhZGNlODA3
ZjFhYmEyZGRlNmQ3OWVjNWI5YzI0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21p
dW0uY3BwCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSAiSW1hZ2VMYXllckNocm9taXVtLmgi
CiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxpbmtIaWdobGlnaHQuaCIK
KyNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRT
a2lhLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTa01hdHJpeDQ0
LmgiCkBAIC00NjQsNyArNDY1LDggQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENv
bnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCiAgICAgICAgICAgICBjaGlsZHJlbkNoYW5nZWQg
PSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIEltYWdlTGF5ZXJDaHJvbWl1bSogaW1hZ2VMYXll
ciA9IHN0YXRpY19jYXN0PEltYWdlTGF5ZXJDaHJvbWl1bSo+KG1fY29udGVudHNMYXllci51bndy
YXA8TGF5ZXJDaHJvbWl1bT4oKSk7Ci0gICAgICAgIGltYWdlTGF5ZXItPnNldENvbnRlbnRzKGlt
YWdlKTsKKyAgICAgICAgTmF0aXZlSW1hZ2VTa2lhKiBuYXRpdmVJbWFnZSA9IGltYWdlLT5uYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgICAgICBpbWFnZUxheWVyLT5zZXRCaXRtYXAo
bmF0aXZlSW1hZ2UtPmJpdG1hcCgpKTsKICAgICAgICAgaW1hZ2VMYXllci0+c2V0T3BhcXVlKGlt
YWdlLT5pc0JpdG1hcEltYWdlKCkgJiYgIWltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpKTsK
ICAgICAgICAgdXBkYXRlQ29udGVudHNSZWN0KCk7CiAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJv
bWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZUxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDBlY2VlYzYyNjYwZjg4M2EyMzliOGQyNjgyNWJkYjhh
YzAzODM3OTEuLjcxZmMxZmJlZmRjNGVhYjM2MDFhZjQwYTUwYzhjMGNmYWIwMmUwZTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5
ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcApAQCAtNTQsNyArNTQsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZWN0KEND
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IsIGNv
bnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQorICAgICAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlUmVjdChDQ0dyYXBoaWNzQ29udGV4dCogY29udGV4dCwgVGV4
dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25z
dCBJbnRSZWN0JiBkZXN0UmVjdCkgT1ZFUlJJREUKICAgICAgICAgewogICAgICAgICAgICAgdGV4
dHVyZVVwZGF0ZXIoKS0+dXBkYXRlVGV4dHVyZVJlY3QoY29udGV4dCwgYWxsb2NhdG9yLCB0ZXh0
dXJlKCksIHNvdXJjZVJlY3QsIGRlc3RSZWN0KTsKICAgICAgICAgfQpAQCAtNzcsNDEgKzc3LDMz
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0dXJlKHRoaXMsIE1h
bmFnZWRUZXh0dXJlOjpjcmVhdGUobWFuYWdlcikpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIFNh
bXBsZWRUZXhlbEZvcm1hdCBzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1h
dCkKKyAgICB2aXJ0dWFsIFNhbXBsZWRUZXhlbEZvcm1hdCBzYW1wbGVkVGV4ZWxGb3JtYXQoR0Mz
RGVudW0gdGV4dHVyZUZvcm1hdCkgT1ZFUlJJREUKICAgICB7CiAgICAgICAgIHJldHVybiBQbGF0
Zm9ybUNvbG9yOjpzYW1lQ29tcG9uZW50T3JkZXIodGV4dHVyZUZvcm1hdCkgPwogICAgICAgICAg
ICAgICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdFJHQkEgOiBMYXll
clRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRCR1JBOwogICAgIH0KIAotICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVMYXllclJlY3QoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNv
bnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgLyogYm9yZGVyVGV4ZWxzICovLCBmbG9hdCAvKiBj
b250ZW50c1NjYWxlICovLCBJbnRSZWN0KiAvKiByZXN1bHRpbmdPcGFxdWVSZWN0ICovKQotICAg
IHsKLSAgICAgICAgbV90ZXhTdWJJbWFnZS5zZXRTdWJJbWFnZVNpemUodGlsZVNpemUpOwotICAg
IH0KLQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlUmVjdChDQ0dyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBNYW5hZ2VkVGV4dHVyZSog
dGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJl
Y3QpCisgICAgdm9pZCB1cGRhdGVUZXh0dXJlUmVjdChDQ0dyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSwg
Y29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCiAgICAg
ewogICAgICAgICB0ZXh0dXJlLT5iaW5kVGV4dHVyZShjb250ZXh0LCBhbGxvY2F0b3IpOwogCiAg
ICAgICAgIC8vIFNvdXJjZSByZWN0IHNob3VsZCBuZXZlciBnbyBvdXRzaWRlIHRoZSBpbWFnZSBw
aXhlbHMsIGV2ZW4gaWYgdGhpcwogICAgICAgICAvLyBpcyByZXF1ZXN0ZWQgYmVjYXVzZSB0aGUg
dGV4dHVyZSBleHRlbmRzIG91dHNpZGUgdGhlIGltYWdlLgogICAgICAgICBJbnRSZWN0IGNsaXBw
ZWRTb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKLSAgICAgICAgY2xpcHBlZFNvdXJjZVJlY3QuaW50
ZXJzZWN0KGltYWdlUmVjdCgpKTsKKyAgICAgICAgSW50UmVjdCBpbWFnZVJlY3QgPSBJbnRSZWN0
KDAsIDAsIG1fYml0bWFwLndpZHRoKCksIG1fYml0bWFwLmhlaWdodCgpKTsKKyAgICAgICAgY2xp
cHBlZFNvdXJjZVJlY3QuaW50ZXJzZWN0KGltYWdlUmVjdCk7CiAKICAgICAgICAgSW50UmVjdCBj
bGlwcGVkRGVzdFJlY3QgPSBkZXN0UmVjdDsKICAgICAgICAgY2xpcHBlZERlc3RSZWN0Lm1vdmUo
Y2xpcHBlZFNvdXJjZVJlY3QubG9jYXRpb24oKSAtIHNvdXJjZVJlY3QubG9jYXRpb24oKSk7CiAg
ICAgICAgIGNsaXBwZWREZXN0UmVjdC5zZXRTaXplKGNsaXBwZWRTb3VyY2VSZWN0LnNpemUoKSk7
CiAKLSAgICAgICAgbV90ZXhTdWJJbWFnZS51cGxvYWQobV9pbWFnZS5waXhlbHMoKSwgaW1hZ2VS
ZWN0KCksIGNsaXBwZWRTb3VyY2VSZWN0LCBjbGlwcGVkRGVzdFJlY3QsIHRleHR1cmUtPmZvcm1h
dCgpLCBjb250ZXh0KTsKKyAgICAgICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKG1fYml0bWFwKTsK
KyAgICAgICAgbV90ZXhTdWJJbWFnZS51cGxvYWQoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+
KG1fYml0bWFwLmdldFBpeGVscygpKSwgaW1hZ2VSZWN0LCBjbGlwcGVkU291cmNlUmVjdCwgY2xp
cHBlZERlc3RSZWN0LCB0ZXh0dXJlLT5mb3JtYXQoKSwgY29udGV4dCk7CiAgICAgfQogCi0gICAg
dm9pZCB1cGRhdGVGcm9tSW1hZ2UoTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UpCisgICAgdm9p
ZCBzZXRCaXRtYXAoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCkKICAgICB7Ci0gICAgICAgIG1faW1h
Z2UudXBkYXRlRnJvbUltYWdlKG5hdGl2ZUltYWdlKTsKLSAgICB9Ci0KLSAgICBJbnRTaXplIGlt
YWdlU2l6ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9pbWFnZS5zaXplKCk7Cisg
ICAgICAgIG1fYml0bWFwID0gYml0bWFwOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTEyMCwxMiAr
MTEyLDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgfQogCi0gICAgSW50UmVjdCBpbWFnZVJlY3Qo
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwg
bV9pbWFnZS5zaXplKCkpOwotICAgIH0KLQotICAgIFBsYXRmb3JtSW1hZ2UgbV9pbWFnZTsKKyAg
ICBTa0JpdG1hcCBtX2JpdG1hcDsKICAgICBMYXllclRleHR1cmVTdWJJbWFnZSBtX3RleFN1Yklt
YWdlOwogfTsKIApAQCAtMTM2LDcgKzEyMyw2IEBAIFBhc3NSZWZQdHI8SW1hZ2VMYXllckNocm9t
aXVtPiBJbWFnZUxheWVyQ2hyb21pdW06OmNyZWF0ZSgpCiAKIEltYWdlTGF5ZXJDaHJvbWl1bTo6
SW1hZ2VMYXllckNocm9taXVtKCkKICAgICA6IFRpbGVkTGF5ZXJDaHJvbWl1bSgpCi0gICAgLCBt
X2ltYWdlRm9yQ3VycmVudEZyYW1lKDApCiB7CiB9CiAKQEAgLTE0NCwxNyArMTMwLDE2IEBAIElt
YWdlTGF5ZXJDaHJvbWl1bTo6fkltYWdlTGF5ZXJDaHJvbWl1bSgpCiB7CiB9CiAKLXZvaWQgSW1h
Z2VMYXllckNocm9taXVtOjpzZXRDb250ZW50cyhJbWFnZSogY29udGVudHMpCit2b2lkIEltYWdl
TGF5ZXJDaHJvbWl1bTo6c2V0Qml0bWFwKGNvbnN0IFNrQml0bWFwJiBiaXRtYXApCiB7Ci0gICAg
Ly8gc2V0Q29udGVudHMoKSBjdXJyZW50bHkgZ2V0cyBjYWxsZWQgd2hlbmV2ZXIgdGhlcmUgaXMg
YW55CisgICAgLy8gc2V0Qml0bWFwKCkgY3VycmVudGx5IGdldHMgY2FsbGVkIHdoZW5ldmVyIHRo
ZXJlIGlzIGFueQogICAgIC8vIHN0eWxlIGNoYW5nZSB0aGF0IGFmZmVjdHMgdGhlIGxheWVyIGV2
ZW4gaWYgdGhhdCBjaGFuZ2UgZG9lc24ndAogICAgIC8vIGFmZmVjdCB0aGUgYWN0dWFsIGNvbnRl
bnRzIG9mIHRoZSBpbWFnZSAoZS5nLiBhIENTUyBhbmltYXRpb24pLgogICAgIC8vIFdpdGggdGhp
cyBjaGVjayBpbiBwbGFjZSB3ZSBhdm9pZCB1bmVjZXNzYXJ5IHRleHR1cmUgdXBsb2Fkcy4KLSAg
ICBpZiAoKG1fY29udGVudHMgPT0gY29udGVudHMpICYmIChtX2NvbnRlbnRzLT5uYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpID09IG1faW1hZ2VGb3JDdXJyZW50RnJhbWUpKQorICAgIGlmIChi
aXRtYXAucGl4ZWxSZWYoKSAmJiBiaXRtYXAucGl4ZWxSZWYoKSA9PSBtX2JpdG1hcC5waXhlbFJl
ZigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2NvbnRlbnRzID0gY29udGVudHM7Ci0gICAg
bV9pbWFnZUZvckN1cnJlbnRGcmFtZSA9IG1fY29udGVudHMtPm5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCk7CisgICAgbV9iaXRtYXAgPSBiaXRtYXA7CiAgICAgc2V0TmVlZHNEaXNwbGF5KCk7
CiB9CiAKQEAgLTE2Miw3ICsxNDcsNyBAQCB2b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6dXBkYXRl
KENDVGV4dHVyZVVwZGF0ZXImIHVwZGF0ZXIsIGNvbnN0IENDT2NjbHVzaW9uVHJhYwogewogICAg
IGNyZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQoKTsKICAgICBpZiAobV9uZWVkc0Rpc3BsYXkp
IHsKLSAgICAgICAgbV90ZXh0dXJlVXBkYXRlci0+dXBkYXRlRnJvbUltYWdlKG1fY29udGVudHMt
Pm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpOworICAgICAgICBtX3RleHR1cmVVcGRhdGVy
LT5zZXRCaXRtYXAobV9iaXRtYXApOwogICAgICAgICB1cGRhdGVUaWxlU2l6ZUFuZFRpbGluZ09w
dGlvbigpOwogICAgICAgICBpbnZhbGlkYXRlUmVjdChJbnRSZWN0KEludFBvaW50KCksIGNvbnRl
bnRCb3VuZHMoKSkpOwogICAgICAgICBtX25lZWRzRGlzcGxheSA9IGZhbHNlOwpAQCAtMTg5LDE0
ICsxNzQsMTIgQEAgTGF5ZXJUZXh0dXJlVXBkYXRlciogSW1hZ2VMYXllckNocm9taXVtOjp0ZXh0
dXJlVXBkYXRlcigpIGNvbnN0CiAKIEludFNpemUgSW1hZ2VMYXllckNocm9taXVtOjpjb250ZW50
Qm91bmRzKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fY29udGVudHMpCi0gICAgICAgIHJldHVybiBJ
bnRTaXplKCk7Ci0gICAgcmV0dXJuIG1fY29udGVudHMtPnNpemUoKTsKKyAgICByZXR1cm4gSW50
U2l6ZShtX2JpdG1hcC53aWR0aCgpLCBtX2JpdG1hcC5oZWlnaHQoKSk7CiB9CiAKIGJvb2wgSW1h
Z2VMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdAogewotICAgIHJldHVybiBtX2Nv
bnRlbnRzICYmIFRpbGVkTGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCk7CisgICAgcmV0dXJu
ICFtX2JpdG1hcC5pc051bGwoKSAmJiBUaWxlZExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgp
OwogfQogCiBib29sIEltYWdlTGF5ZXJDaHJvbWl1bTo6bmVlZHNDb250ZW50c1NjYWxlKCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgKaW5kZXggZjA4NGQ0Y2I3YjE3ZTQ1ZDAzZDlh
YmM5NjMzYjZjMjY4ZjMxZmVkYS4uOTg4ZTcxZWFjMzYxYTA4MWMxNTk4MWYxZDBjZDNiMzhiMmZh
Zjc5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmgKQEAgLTM1LDExICszNSwxMCBAQAog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAogI2luY2x1ZGUgIkNvbnRlbnRMYXll
ckNocm9taXVtLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1JbWFnZS5oIgorI2luY2x1ZGUgIlNrQml0
bWFwLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSW1hZ2U7CiBjbGFzcyBJbWFn
ZUxheWVyVGV4dHVyZVVwZGF0ZXI7CiAKIC8vIEEgTGF5ZXIgdGhhdCBjb250YWlucyBvbmx5IGFu
IEltYWdlIGVsZW1lbnQuCkBAIC01Miw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlKENDVGV4dHVyZVVwZGF0ZXImLCBjb25zdCBDQ09jY2x1c2lvblRyYWNrZXIqKSBP
VkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgbmVlZHNDb250ZW50c1NjYWxlKCkgY29uc3QgT1ZF
UlJJREU7CiAKLSAgICB2b2lkIHNldENvbnRlbnRzKEltYWdlKiBpbWFnZSk7CisgICAgdm9pZCBz
ZXRCaXRtYXAoY29uc3QgU2tCaXRtYXAmIGltYWdlKTsKIAogcHJpdmF0ZToKICAgICBJbWFnZUxh
eWVyQ2hyb21pdW0oKTsKQEAgLTYzLDggKzYyLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZv
aWQgY3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRlZCgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwg
SW50U2l6ZSBjb250ZW50Qm91bmRzKCkgY29uc3QgT1ZFUlJJREU7CiAKLSAgICBOYXRpdmVJbWFn
ZVB0ciBtX2ltYWdlRm9yQ3VycmVudEZyYW1lOwotICAgIFJlZlB0cjxJbWFnZT4gbV9jb250ZW50
czsKKyAgICBTa0JpdG1hcCBtX2JpdG1hcDsKIAogICAgIFJlZlB0cjxJbWFnZUxheWVyVGV4dHVy
ZVVwZGF0ZXI+IG1fdGV4dHVyZVVwZGF0ZXI7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1JbWFnZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUltYWdlLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUyZjFhYmNmZjNiMDhhYmM0OWJmMzMxZDkyN2Qy
YzJiNTgyOTViZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUltYWdl
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1JbWFnZS5oIgotCi0jaW5jbHVkZSAiTmF0aXZlSW1h
Z2VTa2lhLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLVBsYXRmb3JtSW1hZ2U6OlBsYXRmb3JtSW1hZ2UoKQotewotfQotCi12b2lk
IFBsYXRmb3JtSW1hZ2U6OnVwZGF0ZUZyb21JbWFnZShOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFn
ZSkKLXsKLSAgICAvLyBUaGUgbGF5ZXIgY29udGFpbnMgYW4gSW1hZ2UuCi0gICAgTmF0aXZlSW1h
Z2VTa2lhKiBza2lhSW1hZ2UgPSBzdGF0aWNfY2FzdDxOYXRpdmVJbWFnZVNraWEqPihuYXRpdmVJ
bWFnZSk7Ci0gICAgQVNTRVJUKHNraWFJbWFnZSk7Ci0gICAgY29uc3QgU2tCaXRtYXAmIHNraWFC
aXRtYXAgPSBza2lhSW1hZ2UtPmJpdG1hcCgpOwotCi0gICAgSW50U2l6ZSBiaXRtYXBTaXplKHNr
aWFCaXRtYXAud2lkdGgoKSwgc2tpYUJpdG1hcC5oZWlnaHQoKSk7Ci0KLSAgICBzaXplX3QgYnVm
ZmVyU2l6ZSA9IGJpdG1hcFNpemUud2lkdGgoKSAqIGJpdG1hcFNpemUuaGVpZ2h0KCkgKiA0Owot
ICAgIGlmIChtX3NpemUgIT0gYml0bWFwU2l6ZSkgewotICAgICAgICBtX3BpeGVsRGF0YSA9IGFk
b3B0QXJyYXlQdHIobmV3IHVpbnQ4X3RbYnVmZmVyU2l6ZV0pOwotICAgICAgICBtZW1zZXQobV9w
aXhlbERhdGEuZ2V0KCksIDAsIGJ1ZmZlclNpemUpOwotICAgICAgICBtX3NpemUgPSBiaXRtYXBT
aXplOwotICAgIH0KLQotICAgIFNrQXV0b0xvY2tQaXhlbHMgbG9jayhza2lhQml0bWFwKTsKLSAg
ICAvLyBGSVhNRTogZG8gd2UgbmVlZCB0byBzdXBwb3J0IG1vcmUgaW1hZ2UgY29uZmlndXJhdGlv
bnM/Ci0gICAgQVNTRVJUKHNraWFCaXRtYXAuY29uZmlnKCk9PSBTa0JpdG1hcDo6a0FSR0JfODg4
OF9Db25maWcpOwotICAgIHNraWFCaXRtYXAuY29weVBpeGVsc1RvKG1fcGl4ZWxEYXRhLmdldCgp
LCBidWZmZXJTaXplKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1JbWFnZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1JbWFn
ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmY3N2I2MmViNDBiMWVlNjk3ZWY4
ZjY1ODg2NzUxZjdmOTY4NjMxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRm
b3JtSW1hZ2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IFBsYXRmb3JtSW1hZ2VfaAotI2RlZmluZSBQbGF0Zm9ybUltYWdlX2gKLQotI2luY2x1ZGUgIklt
YWdlU291cmNlLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgPHN0ZGludC5oPgot
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBsYXRmb3JtSW1hZ2UgewotICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFBsYXRmb3JtSW1hZ2UpOwotcHVibGljOgotICAgIFBsYXRmb3Jt
SW1hZ2UoKTsKLQotICAgIHZvaWQgdXBkYXRlRnJvbUltYWdlKE5hdGl2ZUltYWdlUHRyKTsKLSAg
ICBjb25zdCB1aW50OF90KiBwaXhlbHMoKSBjb25zdCB7IHJldHVybiBtX3BpeGVsRGF0YSA/ICZt
X3BpeGVsRGF0YVswXSA6IDA7IH0KLSAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X3NpemU7IH0KLQotcHJpdmF0ZToKLSAgICBPd25BcnJheVB0cjx1aW50OF90PiBtX3BpeGVsRGF0
YTsKLSAgICBJbnRTaXplIG1fc2l6ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmCg==
</data>
<flag name="review"
          id="155507"
          type_id="1"
          status="+"
          setter="enne"
    />
          </attachment>
      

    </bug>

</bugzilla>