<?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>66251</bug_id>
          
          <creation_ts>2011-08-15 13:55:18 -0700</creation_ts>
          <short_desc>Canvas resizing can be slow</short_desc>
          <delta_ts>2011-08-16 14:34:26 -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>Canvas</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>66305</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Stephen White">senorblanco</reporter>
          <assigned_to name="Stephen White">senorblanco</assigned_to>
          <cc>jamesr</cc>
    
    <cc>kbr</cc>
    
    <cc>mdelaney7</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>451260</commentid>
    <comment_count>0</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-08-15 13:55:18 -0700</bug_when>
    <thetext>Currently, resizing canvas elements can be slow.  This could be improved by:

1)  Deferring all ImageBuffer creation until the first actual draw call.
2)  [chromium] Moving ownership of the DrawingBuffer into ImageBuffer, so it can benefit from Ganesh&apos;s texure cache reuse for its FBOs.
3)  [chromium] Avoiding use of texImage2DResourceSafe() when allocating FBOs for canvas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451322</commentid>
    <comment_count>1</comment_count>
      <attachid>103962</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-08-15 15:21:47 -0700</bug_when>
    <thetext>Created attachment 103962
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451346</commentid>
    <comment_count>2</comment_count>
      <attachid>103962</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-15 15:50:36 -0700</bug_when>
    <thetext>Comment on attachment 103962
Patch

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

I like the way this is going, although I&apos;m not sure I understand the complete picture yet.  Left some comments inline.

&gt; Source/WebCore/platform/graphics/gpu/DrawingBuffer.cpp:273
&gt; +        m_context-&gt;texImage2D(GraphicsContext3D::TEXTURE_2D, 0, internalColorFormat, m_size.width(), m_size.height(), 0, colorFormat, GraphicsContext3D::UNSIGNED_BYTE, 0);

this seems bad - in the command buffer, this&apos;ll cause a client-side buffer to get allocated, transferred, and uploaded.

&gt; Source/WebKit/chromium/ChangeLog:9
&gt; +        Allow the hostWindow param (and m_webViewImpl) to be NULL.  This
&gt; +        makes it much easier to enable GPU acceleration at a lower level
&gt; +        in WebKit&apos;s platform/graphics layer, without needing access to the
&gt; +        Page* or HostWindow*.

this is a really good change but probably should be a separate patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451440</commentid>
    <comment_count>3</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-08-15 18:11:14 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 103962 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=103962&amp;action=review
&gt; 
&gt; I like the way this is going, although I&apos;m not sure I understand the complete picture yet.  Left some comments inline.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gpu/DrawingBuffer.cpp:273
&gt; &gt; +        m_context-&gt;texImage2D(GraphicsContext3D::TEXTURE_2D, 0, internalColorFormat, m_size.width(), m_size.height(), 0, colorFormat, GraphicsContext3D::UNSIGNED_BYTE, 0);
&gt; 
&gt; this seems bad - in the command buffer, this&apos;ll cause a client-side buffer to get allocated, transferred, and uploaded.

Really?  Hmm. I thought that it didn&apos;t.  Still, considering that GraphicsContext3D::texImage2DResourceSafe() was doing the same thing, I don&apos;t think this is any net change for the command buffer impl.  At least this&apos;ll prevent it in the in-process version from doing it.

We really need some kind of &quot;resourceSafety&quot; creation attribute, or a flavour of glTexImage2D() that doesn&apos;t do that braindead memset() and upload.  Only WebGL needs it, AFAIK.

&gt; &gt; Source/WebKit/chromium/ChangeLog:9
&gt; &gt; +        Allow the hostWindow param (and m_webViewImpl) to be NULL.  This
&gt; &gt; +        makes it much easier to enable GPU acceleration at a lower level
&gt; &gt; +        in WebKit&apos;s platform/graphics layer, without needing access to the
&gt; &gt; +        Page* or HostWindow*.
&gt; 
&gt; this is a really good change but probably should be a separate patch

OK, if you insist.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451627</commentid>
    <comment_count>4</comment_count>
      <attachid>104047</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-08-16 08:19:46 -0700</bug_when>
    <thetext>Created attachment 104047
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451821</commentid>
    <comment_count>5</comment_count>
      <attachid>104047</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-08-16 13:19:23 -0700</bug_when>
    <thetext>Comment on attachment 104047
Patch

Looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451873</commentid>
    <comment_count>6</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-08-16 14:34:26 -0700</bug_when>
    <thetext>Committed r93157: &lt;http://trac.webkit.org/changeset/93157&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103962</attachid>
            <date>2011-08-15 15:21:47 -0700</date>
            <delta_ts>2011-08-16 08:19:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66251-20110815182146.patch</filename>
            <type>text/plain</type>
            <size>27829</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzMDYyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTQgQEAKKzIwMTEtMDgtMTUgIFN0ZXBoZW4g
V2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ2FudmFzIHJlc2l6
aW5nIGNhbiBiZSBzbG93CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02NjI1MQorCisgICAgICAgIENhbnZhcyByZXNpemluZyB3YXMgc2xvdyBkdWUgdG8g
cmUtYWxsb2NhdGlvbiBvZiB0aGUgSW1hZ2VCdWZmZXIgb24KKyAgICAgICAgZWFjaCBzaXplIGNo
YW5nZSAod2lkdGggb3IgaGVpZ2h0KS4gIFRoaXMgd2FzIGludHJvZHVjZWQgaW5hZHZlcnRlbnRs
eQorICAgICAgICBieSBjYWxscyB0byBpc0FjY2VsZXJhdGVkKCkgZHVyaW5nIGNhbnZhcyByZXNl
dCgpLiAgU2luY2Ugd2Ugd29uJ3QgCisgICAgICAgIGtub3cgaWYgd2UgaGF2ZSBzdWNjZXNzZnVs
bHkgYWNjZWxlcmF0ZWQgdW50aWwgSW1hZ2VCdWZmZXIgY3JlYXRpb24sCisgICAgICAgIG1vdmUg
dGhlIGNvbXBvc2l0b3IgaW52YWxpZGF0aW9uIHRvIGNyZWF0ZUltYWdlQnVmZmVyKCkgYXMgd2Vs
bC4KKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGF0dGVtcHRzIHRvIHVuaWZ5IHRoZSBTa2lhIGFu
ZCBDRyBhY2NlbGVyYXRlZCBjYW52YXMKKyAgICAgICAgcGF0aHMuICBUaGUgRHJhd2luZ0J1ZmZl
ciB1c2VkIGJ5IHRoZSBTa2lhIHBhdGggaXMgbm93IG93bmVkIGJ5IAorICAgICAgICBJbWFnZUJ1
ZmZlcltTa2lhXSwgc2ltaWxhciB0byBob3cgdGhlIElPU3VyZmFjZSBpcyBvd25lZCBieQorICAg
ICAgICBJbWFnZUJ1ZmZlcltDR10uICBTb21lIG9mIHRoZSBsb2dpYyBmb3Igd2hlbiB0byBhY2Nl
bGVyYXRlIHdhcyBtb3ZlZAorICAgICAgICBpbnRvIEhUTUxDYW52YXNFbGVtZW50IGFuZCB1bmlm
aWVkIHdpdGggdGhlIENHIHBhdGguICBBY2NlbGVyYXRpb24gaXMKKyAgICAgICAgYWxzbyBub3cg
ZW5hYmxlZCBieSB0aGUgc2FtZSAiQWNjZWxlcmF0ZWQiIEltYWdlQnVmZmVyIGNyZWF0ZSBmbGFn
CisgICAgICAgIHVzZWQgYnkgdGhlIENHIHBhdGguICBEcmF3aW5nQnVmZmVyIGlzIG5vdyByZS1j
cmVhdGVkIGV2ZW4gZm9yIGEgCisgICAgICAgIHNhbWUtc2l6ZSBjaGFuZ2UgKHNhbWUgYXMgdGhl
IG1lbW9yeSBidWZmZXIpLCBidXQgd2Ugc3BlZWQgaXQgdXAKKyAgICAgICAgYnkgY2FsbGluZyBH
cmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCgpIHdpdGggYSBOVUxMIHBpeGVscyBwdHIKKyAg
ICAgICAgaW5zdGVhZCBvZiBHcmFwaGljc0NvbnRleHQzRDo6dGV4aW1hZ2UyRFJlc291cmNlU2Fm
ZSgpIChubyBuZWVkIHRvCisgICAgICAgIGNsZWFyIGl0LCBzaW5jZSBpdCdzIGRvbmUgd2l0aCBh
IGdsQ2xlYXIgYW55d2F5KS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzIGluIGZhc3QvY2FudmFzIGFuZCBj
YW52YXMvcGhpbGlwLgorCisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6cmVzZXQpOgorICAgICAgICBEb24n
dCBjYWxsIGlzQWNjZWxlcmF0ZWQoKSBmcm9tIHJlc2V0KCksIHNpbmNlIHdlIGRvbid0IHdhbnQg
dG8KKyAgICAgICAgaW5hZHZlcnRlbnRseSBjcmVhdGUgdGhlIEltYWdlQnVmZmVyLiAgQWxzbywg
c2luY2Ugd2Ugd29uJ3Qga25vdyBpZgorICAgICAgICB3ZSBoYXZlIHN1Y2Nlc3NmdWxseSBhY2Nl
bGVyYXRlZCB1bnRpbCBjcmVhdGVJbWFnZUJ1ZmZlcigpIGlzCisgICAgICAgIGNhbGxlZCwgZGVm
ZXIgdGhlIGNvbXBvc2l0b3IgaW52YWxpZGF0aW9uIHRvIGNyZWF0ZUltYWdlQnVmZmVyKCkgYXMK
KyAgICAgICAgd2VsbC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpzaG91
bGRBY2NlbGVyYXRlKToKKyAgICAgICAgVW5pZnkgdGhlIENHIGFuZCBTa2lhIHBvcnRzJyBsb2dp
YyBmb3Igd2hlbiB0byBhY2NlbGVyYXRlIChTa2lhCisgICAgICAgIGxvZ2ljIG1vdmVkIGluIGZy
b20gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52
YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIFVzZSB0aGUgdW5pZmllZCBz
aG91bGRBY2NlbGVyYXRlKCkgbG9naWMsIGFuZCBwYXNzIGl0IGFzIGEgZmxhZworICAgICAgICB0
byBJbWFnZUJ1ZmZlci4gIERvIGNvbXBvc2l0b3IgaW52YWxpZGF0aW9uIGFzIHdlbGwuCisgICAg
ICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENh
bnZhc0VsZW1lbnQ6Omhhc0NyZWF0ZWRJbWFnZUJ1ZmZlcik6CisgICAgICAgIEV4cG9zZSBoYXND
cmVhdGVkSW1hZ2VCdWZmZXIoKSBwdWJsaWNhbGx5LCBzbworICAgICAgICBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OmlzQWNjZWxlcmF0ZWQoKSBkb2Vzbid0IGluYWR2ZXJ0ZW50bHkgY3JlYXRl
CisgICAgICAgIGl0LgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6On5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpOgorICAgICAgICBSZW1vdmUg
YWxsIGFjY2VsZXJhdGlvbiBzZXR0aW5nIGFuZCByZXNldHRpbmcsIHNpbmNlIGl0J3Mgbm93IGRv
bmUKKyAgICAgICAgZHVyaW5nIEltYWdlQnVmZmVyIGNyZWF0aW9uLgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjppc0FjY2VsZXJhdGVkKToKKyAgICAgICAgQ2hl
Y2sgaWYgdGhlIGltYWdlIGJ1ZmZlciB3YXMgY3JlYXRlZCwgc28gd2UgZG9uJ3QgaW5hZHZlcnRl
bnRseQorICAgICAgICBjcmVhdGUgaXQgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6cGFpbnRzSW50b0NhbnZhc0J1ZmZlcik6CisgICAgICAgIERvbid0
IGNhbGwgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50c0ludG9DYW52YXNCdWZmZXIoKSwgc2luY2Ug
aXRzCisgICAgICAgIFdlYlZpZXdJbXBsIG1heSBiZSBudWxsLiAgQXNrIHRoZSByZW5kZXIgdHJl
ZSBpbnN0ZWFkLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpy
ZXNldCk6CisgICAgICAgIERvbid0IHJlc2V0IGFjY2VsZXJhdGlvbiBoZXJlLCBzaW5jZSB3ZSBk
b24ndCBvd24gaXQgYW55bW9yZS4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6cGxhdGZvcm1MYXllcik6CisgICAgICAgIENhbGwgaW50byB0aGUgSW1hZ2VCdWZm
ZXIgdG8gZ2V0IG91ciBQbGF0Zm9ybUxheWVyLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5oOgorICAgICAgICBSZW1vdmUgbV9kcmF3aW5nQnVmZmVyLCBh
bmQgYWxsIGFjY2VsZXJhdGlvbi1yZWxhdGVkIGNhbGxzLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgIFJlbW92ZSBzZXRHcmFwaGljc0NvbnRleHQzRCgp
LCBhbmQgcGFpbnRzSW50b0ltYWdlQnVmZmVyKCkuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnBsYXRm
b3JtTGF5ZXIpOgorICAgICAgICBJbXBsZW1lbnQgYSBkdW1teSBwbGF0Zm9ybUxheWVyKCkgY2Fs
bCBmb3Igbm9uLXNraWEgcG9ydHMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXIuaDoKKyAgICAgICAgRGVjbGFyZSBhIHBsYXRmb3JtTGF5ZXIoKSBjYWxsIChVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpIG9ubHkpLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlQnVmZmVyRGF0YVNraWEuaDoKKyAgICAgICAgQWRkIGEgRHJhd2luZ0J1
ZmZlciBkYXRhIG1lbWJlci4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2lu
Z0J1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpyZXNldCk6Cisg
ICAgICAgIFVzZSB0ZXhJbWFnZTJEKCkgd2l0aCBhIE5VTEwgcHRyLCBub3QgdGV4SW1hZ2UyRFJl
c291cmNlU2FmZSgpLgorICAgICAgICBTaW5jZSB3ZSBpbW1lZGlhdGVseSBjbGVhciB0aGUgZnJh
bWVidWZmZXIgdmlhIGdsQ2xlYXIoKSwgdGhpcyB3aG9sZQorICAgICAgICByZXNvdXJjZSBzYWZl
IGJ1c2luZXNzIGlzIG92ZXJraWxsLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEv
R3JhcGhpY3NDb250ZXh0U2tpYS5jcHA6CisgICAgICAgIFJlbW92ZSBzZXRHcmFwaGljc0NvbnRl
eHQzRCgpIGFuZCBwYWludHNJbnRvSW1hZ2VCdWZmZXIoKS4gIFRoaXMKKyAgICAgICAgZnVuY3Rp
b25hbGl0eSBpcyBoYW5kbGVkIGJ5IEltYWdlQnVmZmVyIG5vdy4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIpOgorICAgICAgICBHaXZlIHRoZSBJbWFnZUJ1ZmZlckRh
dGEgb3duZXJzaGlwIG9mIHRoZSBEcmF3aW5nQnVmZmVyLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIpOgorICAgICAgICBJbXBsZW1lbnQgYW4gYWNjZXNzb3Ig
Zm9yIHRoZSBEcmF3aW5nQnVmZmVyJ3MgUGxhdGZvcm1MYXllci4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oOgorICAgICAgICBS
ZW1vdmUgaXNQYXRoU2tpYVNhZmUoKSBleHRlcm4gKHVudXNlZCkuCisgICAgICAgIFJlbW92ZSBw
YWludHNJbnRvSW1hZ2VCdWZmZXIoKSAobm93IHVudXNlZCkuICBSZW1vdmUgSW50U2l6ZSBwYXJh
bQorICAgICAgICBmcm9tIHNldEdyYXBoaWNzQ29udGV4dDNEKCkgKHVudXNlZCkuCisKIDIwMTEt
MDgtMTUgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZWZhY3RvciBKUyBvYmplY3RzIHRvIGFsbG9jYXRlIGluIHN0YXRpYyBjcmVhdGUgbWV0aG9k
cyByYXRoZXIgdGhhbiBjb25zdHJ1Y3RvcnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiA5MzA2MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDcsMTUgKzI0Nyw3
IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KCkKIAogICAgIGlmIChtX2NvbnRleHQg
JiYgbV9jb250ZXh0LT5pczJkKCkpIHsKICAgICAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
KiBjb250ZXh0MkQgPSBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqPihtX2Nv
bnRleHQuZ2V0KCkpOwotICAgICAgICBib29sIHdhc0FjY2VsZXJhdGVkID0gY29udGV4dDJELT5p
c0FjY2VsZXJhdGVkKCk7CiAgICAgICAgIGNvbnRleHQyRC0+cmVzZXQoKTsKLSNpZiBVU0UoSU9T
VVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCAoRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NB
TlZBUykgJiYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSkKLSAgICAgICAgLy8gUmVjYWxj
dWxhdGUgY29tcG9zaXRpbmcgcmVxdWlyZW1lbnRzIGlmIGFjY2VsZXJhdGlvbiBzdGF0ZSBjaGFu
Z2VkLgotICAgICAgICBpZiAoY29udGV4dDJELT5pc0FjY2VsZXJhdGVkKCkgIT0gd2FzQWNjZWxl
cmF0ZWQpCi0gICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hh
bmdlKTsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTSh3YXNBY2NlbGVyYXRlZCk7Ci0jZW5k
aWYKICAgICB9CiAKICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRl
cmVyKCkpIHsKQEAgLTQyNCw2ICs0MTYsMzAgQEAgQ1NTU3R5bGVTZWxlY3RvciogSFRNTENhbnZh
c0VsZW1lbnQ6OnN0eQogICAgIHJldHVybiBkb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCk7CiB9
CiAKK2Jvb2wgSFRNTENhbnZhc0VsZW1lbnQ6OnNob3VsZEFjY2VsZXJhdGUoY29uc3QgSW50U2l6
ZSYgc2l6ZSkgY29uc3QKK3sKKyNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JF
KQorICAgIFVOVVNFRF9QQVJBTShzaXplKTsKKyAgICByZXR1cm4gZG9jdW1lbnQoKS0+c2V0dGlu
Z3MoKS0+Y2FudmFzVXNlc0FjY2VsZXJhdGVkRHJhd2luZygpOworI2VsaWYgRU5BQkxFKEFDQ0VM
RVJBVEVEXzJEX0NBTlZBUykKKyAgICBpZiAobV9jb250ZXh0ICYmICFtX2NvbnRleHQtPmlzMmQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9j
dW1lbnQoKS0+c2V0dGluZ3MoKTsKKyAgICBpZiAoIXNldHRpbmdzLT5hY2NlbGVyYXRlZDJkQ2Fu
dmFzRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBEbyBub3QgdXNl
IGFjY2VsZXJhdGlvbiBmb3Igc21hbGwgY2FudmFzLgorICAgIGlmIChzaXplLndpZHRoKCkgKiBz
aXplLmhlaWdodCgpIDwgc2V0dGluZ3MtPm1pbmltdW1BY2NlbGVyYXRlZDJkQ2FudmFzU2l6ZSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKHNpemUpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCiB2b2lk
IEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlcigpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKCFtX2ltYWdlQnVmZmVyKTsKQEAgLTQzNSwxNCArNDUxLDggQEAgdm9pZCBIVE1MQ2FudmFz
RWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZQogICAgIGlmICghc2l6ZS53aWR0aCgpIHx8ICFzaXpl
LmhlaWdodCgpKQogICAgICAgICByZXR1cm47CiAKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19C
QUNLSU5HX1NUT1JFKQotICAgIGlmIChkb2N1bWVudCgpLT5zZXR0aW5ncygpLT5jYW52YXNVc2Vz
QWNjZWxlcmF0ZWREcmF3aW5nKCkpCi0gICAgICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKHNpemUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIEFjY2VsZXJhdGVkKTsKLSAgICBl
bHNlCi0gICAgICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIENv
bG9yU3BhY2VEZXZpY2VSR0IsIFVuYWNjZWxlcmF0ZWQpOwotI2Vsc2UKLSAgICBtX2ltYWdlQnVm
ZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKTsKLSNlbmRpZgorICAgIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSkgPyBBY2NlbGVyYXRlZCA6
IFVuYWNjZWxlcmF0ZWQ7CisgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
c2l6ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgcmVuZGVyaW5nTW9kZSk7CiAgICAgLy8gVGhlIGNv
bnZlcnRMb2dpY2FsVG9EZXZpY2UgTWF4Q2FudmFzQXJlYSBjaGVjayBzaG91bGQgcHJldmVudCBj
b21tb24gY2FzZXMKICAgICAvLyB3aGVyZSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKCkgcmV0dXJucyAw
LCBob3dldmVyIHdlIGNvdWxkIHN0aWxsIGJlIGxvdyBvbiBtZW1vcnkuCiAgICAgaWYgKCFtX2lt
YWdlQnVmZmVyKQpAQCAtNDU1LDYgKzQ2NSwxMiBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50Ojpj
cmVhdGVJbWFnZUJ1ZmZlCiAgICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRp
b25zT25seSk7CiAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5nbG9iYWxEYXRhKCktPmhl
YXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KG1faW1hZ2VCdWZmZXItPmRhdGFTaXplKCkpOwogI2Vu
ZGlmCisKKyNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCAoRU5BQkxF
KEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSkK
KyAgICBpZiAobV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXMyZCgpKQorICAgICAgICAvLyBSZWNh
bGN1bGF0ZSBjb21wb3NpdGluZyByZXF1aXJlbWVudHMgaWYgYWNjZWxlcmF0aW9uIHN0YXRlIGNo
YW5nZWQuCisgICAgICAgIGNvbnN0X2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPih0aGlzKS0+c2V0
TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisjZW5kaWYKIH0KIAogR3Jh
cGhpY3NDb250ZXh0KiBIVE1MQ2FudmFzRWxlbWVudDo6ZHJhd2luZ0NvbnRleHQoKSBjb25zdApJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAkocmV2aXNpb24gOTMw
NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEyOCw2ICsxMjgsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIHZvaWQgbWFr
ZVJlbmRlcmluZ1Jlc3VsdHNBdmFpbGFibGUoKTsKKyAgICBib29sIGhhc0NyZWF0ZWRJbWFnZUJ1
ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyOyB9CiAKIHByaXZh
dGU6CiAgICAgSFRNTENhbnZhc0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
Kik7CkBAIC0xMzcsMTAgKzEzOCwxMCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCByZXNldCgpOwog
CisgICAgYm9vbCBzaG91bGRBY2NlbGVyYXRlKGNvbnN0IEludFNpemUmKSBjb25zdDsKICAgICB2
b2lkIGNyZWF0ZUltYWdlQnVmZmVyKCkgY29uc3Q7CiAKICAgICB2b2lkIHNldFN1cmZhY2VTaXpl
KGNvbnN0IEludFNpemUmKTsKLSAgICBib29sIGhhc0NyZWF0ZWRJbWFnZUJ1ZmZlcigpIGNvbnN0
IHsgcmV0dXJuIG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyOyB9CiAKICAgICBIYXNoU2V0PENhbnZh
c09ic2VydmVyKj4gbV9vYnNlcnZlcnM7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24g
OTMwNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSwxNiArNjEsOSBAQAogI2luY2x1ZGUgIlRl
eHRNZXRyaWNzLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogCi0jaWYgRU5BQkxFKEFDQ0VMRVJB
VEVEXzJEX0NBTlZBUykKLSNpbmNsdWRlICJDaHJvbWUuaCIKLSNpbmNsdWRlICJDaHJvbWVDbGll
bnQuaCIKLSNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
Ci0jaW5jbHVkZSAiU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNlbmRpZgotI2VuZGlm
CiAKICNpbmNsdWRlIDx3dGYvQnl0ZUFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KQEAgLTk4LDI1ICs5MSw2IEBAIHN0YXRpYyBib29sIGlzT3JpZ2luQ2xlYW4oQ2FjaGVkSW1h
Z2UqIGMKICAgICByZXR1cm4gIXNlY3VyaXR5T3JpZ2luLT50YWludHNDYW52YXMoY2FjaGVkSW1h
Z2UtPnJlc3BvbnNlKCkudXJsKCkpOwogfQogCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NB
TlZBUykKLXN0YXRpYyBib29sIHNob3VsZEFjY2VsZXJhdGVDYW52YXMoY29uc3QgSFRNTENhbnZh
c0VsZW1lbnQqIGNhbnZhcykKLXsKLSAgICBjb25zdCBQYWdlKiBwYWdlID0gY2FudmFzLT5kb2N1
bWVudCgpLT5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBjb25zdCBTZXR0aW5ncyogc2V0dGluZ3MgPSBwYWdlLT5zZXR0aW5ncygpOwotICAgIGlm
ICghc2V0dGluZ3MtPmFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIC8vIERvIG5vdCB1c2UgYWNjZWxlcmF0aW9uIGZvciBzbWFsbCBjYW52
YXMuCi0gICAgaWYgKGNhbnZhcy0+d2lkdGgoKSAqIGNhbnZhcy0+aGVpZ2h0KCkgPCBzZXR0aW5n
cy0+bWluaW11bUFjY2VsZXJhdGVkMmRDYW52YXNTaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotI2VuZGlmCi0KIGNsYXNzIENhbnZhc1N0cm9rZVN0
eWxlQXBwbGllciA6IHB1YmxpYyBTdHJva2VTdHlsZUFwcGxpZXIgewogcHVibGljOgogICAgIENh
bnZhc1N0cm9rZVN0eWxlQXBwbGllcihDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNhbnZhc0Nv
bnRleHQpCkBAIC0xNTEsMTAgKzEyNSw2IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Q2Fu
dmFzUmVuZGVyaW4KICAgICAvLyBNYWtlIHN1cmUgdGhhdCBldmVuIGlmIHRoZSBkcmF3aW5nQ29u
dGV4dCgpIGhhcyBhIGRpZmZlcmVudCBkZWZhdWx0CiAgICAgLy8gdGhpY2tuZXNzLCBpdCBpcyBp
biBzeW5jIHdpdGggdGhlIGNhbnZhcyB0aGlja25lc3MuCiAgICAgc2V0TGluZVdpZHRoKGxpbmVX
aWR0aCgpKTsKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgcmVzZXRB
Y2NlbGVyYXRpb24oKTsKLSNlbmRpZgogfQogCiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6On5D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQoKQpAQCAtMTcwLDExICsxNDAsNiBAQCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6On5DYW52YXNSZW5kZXJpCiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYK
LQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgaWYgKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCA9IGRyYXdpbmdDb250ZXh0KCkpCi0gICAgICAgIGNvbnRleHQtPnNldEdy
YXBoaWNzQ29udGV4dDNEKDAsIDAsIEludFNpemUoKSk7Ci0jZW5kaWYKIH0KIAogYm9vbCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmlzQWNjZWxlcmF0ZWQoKSBjb25zdApAQCAtMTgzLDcgKzE0
OCw3IEBAIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjppc0FjY2VsZXIKICAgICBJbWFn
ZUJ1ZmZlciogYnVmZmVyID0gY2FudmFzKCktPmJ1ZmZlcigpOwogICAgIHJldHVybiBidWZmZXIg
PyBidWZmZXItPmlzQWNjZWxlcmF0ZWQoKSA6IGZhbHNlOwogI2VsaWYgRU5BQkxFKEFDQ0VMRVJB
VEVEXzJEX0NBTlZBUykKLSAgICByZXR1cm4gZHJhd2luZ0NvbnRleHQoKSAmJiBkcmF3aW5nQ29u
dGV4dCgpLT5pc0FjY2VsZXJhdGVkQ29udGV4dCgpOworICAgIHJldHVybiBjYW52YXMoKS0+aGFz
Q3JlYXRlZEltYWdlQnVmZmVyKCkgJiYgZHJhd2luZ0NvbnRleHQoKSAmJiBkcmF3aW5nQ29udGV4
dCgpLT5pc0FjY2VsZXJhdGVkQ29udGV4dCgpOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CiAj
ZW5kaWYKQEAgLTE5MSw5ICsxNTYsMTMgQEAgYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OmlzQWNjZWxlcgogCiBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cGFpbnRzSW50b0Nh
bnZhc0J1ZmZlcigpIGNvbnN0CiB7Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykK
LSAgICBpZiAoZHJhd2luZ0NvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuIGRyYXdpbmdDb250ZXh0
KCktPnBhaW50c0ludG9JbWFnZUJ1ZmZlcigpOworI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpICYmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBpZiAoIWlzQWNjZWxl
cmF0ZWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBSZW5kZXJCb3gqIHJlbmRlckJv
eCA9IGNhbnZhcygpLT5yZW5kZXJCb3goKTsKKyAgICBpZiAocmVuZGVyQm94ICYmIHJlbmRlckJv
eC0+aGFzTGF5ZXIoKSAmJiByZW5kZXJCb3gtPmxheWVyKCktPmhhc0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7
CiB9CkBAIC0yMDQsMTQgKzE3MywxMSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
cmVzZXQoKQogICAgIG1fc3RhdGVTdGFjay5yZXNpemUoMSk7CiAgICAgbV9zdGF0ZVN0YWNrLmZp
cnN0KCkgPSBTdGF0ZSgpOwogICAgIG1fcGF0aC5jbGVhcigpOwotI2lmIEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpCi0gICAgcmVzZXRBY2NlbGVyYXRpb24oKTsKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCiAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52YXMoKS0+
cmVuZGVyQm94KCk7CiAgICAgaWYgKHJlbmRlckJveCAmJiByZW5kZXJCb3gtPmhhc0xheWVyKCkg
JiYgcmVuZGVyQm94LT5sYXllcigpLT5oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpCiAgICAg
ICAgIHJlbmRlckJveC0+bGF5ZXIoKS0+Y29udGVudENoYW5nZWQoUmVuZGVyTGF5ZXI6OkNhbnZh
c0NoYW5nZWQpOwogI2VuZGlmCi0jZW5kaWYKIH0KIAogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpTdGF0ZTo6U3RhdGUoKQpAQCAtMjAxNSw1NyArMTk4MSwxMCBAQCBjb25zdCBGb250JiBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmFjCiAgICAgcmV0dXJuIHN0YXRlKCkubV9mb250OwogfQog
Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCisjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogUGxhdGZvcm1MYXllciogQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kcmF3aW5nQnVm
ZmVyID8gbV9kcmF3aW5nQnVmZmVyLT5wbGF0Zm9ybUxheWVyKCkgOiAwOwotfQotI2VuZGlmCi0K
LXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjbGVhckFjY2VsZXJhdGlvbigpCi17Ci0g
ICAgaWYgKEdyYXBoaWNzQ29udGV4dCogY3R4ID0gZHJhd2luZ0NvbnRleHQoKSkKLSAgICAgICAg
Y3R4LT5zZXRHcmFwaGljc0NvbnRleHQzRCgwLCAwLCBJbnRTaXplKCkpOwotCi0gICAgbV9kcmF3
aW5nQnVmZmVyLmNsZWFyKCk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpy
ZXNldEFjY2VsZXJhdGlvbigpCi17Ci0gICAgaWYgKCFzaG91bGRBY2NlbGVyYXRlQ2FudmFzKGNh
bnZhcygpKSkgewotICAgICAgICBjbGVhckFjY2VsZXJhdGlvbigpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgLy8gVHJ5IHRvIGFjY2VsZXJhdGUuCi0gICAgR3JhcGhpY3NDb250ZXh0
KiBjdHggPSBkcmF3aW5nQ29udGV4dCgpOwotICAgIGlmICghY3R4KSB7Ci0gICAgICAgIGNsZWFy
QWNjZWxlcmF0aW9uKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBQYWdlKiBwYWdl
ID0gY2FudmFzKCktPmRvY3VtZW50KCktPnBhZ2UoKTsKLSAgICBHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dDNEID0gU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShwYWdlLT5jaHJvbWUo
KSk7Ci0gICAgaWYgKCFjb250ZXh0M0QpIHsKLSAgICAgICAgY2xlYXJBY2NlbGVyYXRpb24oKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKLSAg
ICAgICAgaWYgKCFtX2RyYXdpbmdCdWZmZXItPnJlc2V0KGNhbnZhcygpLT5zaXplKCkpKSB7Ci0g
ICAgICAgICAgICBjbGVhckFjY2VsZXJhdGlvbigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyID0gY29udGV4dDNE
LT5jcmVhdGVEcmF3aW5nQnVmZmVyKGNhbnZhcygpLT5zaXplKCkpOwotICAgICAgICBpZiAoIW1f
ZHJhd2luZ0J1ZmZlcikgewotICAgICAgICAgICAgY2xlYXJBY2NlbGVyYXRpb24oKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGN0eC0+c2V0R3JhcGhpY3ND
b250ZXh0M0QoY29udGV4dDNELCBtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIGNhbnZhcygpLT5zaXpl
KCkpOworICAgIHJldHVybiBjYW52YXMoKS0+YnVmZmVyKCkgPyBjYW52YXMoKS0+YnVmZmVyKCkt
PnBsYXRmb3JtTGF5ZXIoKSA6IDA7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHJldmlz
aW9uIDkzMDYyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDExICs1Myw2IEBAIGNsYXNzIEhUTUxW
aWRlb0VsZW1lbnQ7CiBjbGFzcyBJbWFnZURhdGE7CiBjbGFzcyBUZXh0TWV0cmljczsKIAotI2lm
IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi1jbGFzcyBEcmF3aW5nQnVmZmVyOwotY2xh
c3MgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q7Ci0jZW5kaWYKLQogdHlwZWRlZiBpbnQgRXhjZXB0
aW9uQ29kZTsKIAogY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIDogcHVibGljIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQgewpAQCAtMjk0LDIwICsyODksMTEgQEAgcHJpdmF0ZToKIAogICAg
IHZvaWQgcHJlcGFyZUdyYWRpZW50Rm9yRGFzaGJvYXJkKENhbnZhc0dyYWRpZW50KiBncmFkaWVu
dCkgY29uc3Q7CiAKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIHZvaWQg
Y2xlYXJBY2NlbGVyYXRpb24oKTsKLSAgICB2b2lkIHJlc2V0QWNjZWxlcmF0aW9uKCk7Ci0jZW5k
aWYKLQogICAgIFZlY3RvcjxTdGF0ZSwgMT4gbV9zdGF0ZVN0YWNrOwogICAgIGJvb2wgbV91c2Vz
Q1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZTsKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQp
CiAgICAgYm9vbCBtX3VzZXNEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZTsKICNlbmRpZgotCi0j
aWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSAgICBSZWZQdHI8RHJhd2luZ0J1ZmZl
cj4gbV9kcmF3aW5nQnVmZmVyOwotI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDkzMDYyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjg0LDEy
ICs2ODQsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91bGRTCiB9CiAj
ZW5kaWYKIAotI2lmICFVU0UoU0tJQSkKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRHcmFwaGlj
c0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRCosIERyYXdpbmdCdWZmZXIqLCBjb25zdCBJbnRT
aXplJikKLXsKLX0KLSNlbmRpZgotCiAjaWYgIVVTRShTS0lBKSAmJiAhVVNFKENHKQogYm9vbCBH
cmFwaGljc0NvbnRleHQ6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgY29uc3QKIHsKQEAgLTY5Nywx
MyArNjkxLDYgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQ6OmlzQWNjZWxlcmF0ZWRDb250ZQogfQog
I2VuZGlmCiAKLSNpZiAhVVNFKFNLSUEpCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRzSW50
b0ltYWdlQnVmZmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZgotCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9p
bnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlIHBl
blN0eWxlKQogewogICAgIC8vIEZvciBvZGQgd2lkdGhzLCB3ZSBhZGQgaW4gMC41IHRvIHRoZSBh
cHByb3ByaWF0ZSB4L3kgc28gdGhhdCB0aGUgZmxvYXQgYXJpdGhtZXRpYwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJl
dmlzaW9uIDkzMDYyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3NSw3ICsyNzUsNiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCk7CiAj
ZW5kaWYKICAgICAgICAgYm9vbCBpc0FjY2VsZXJhdGVkQ29udGV4dCgpIGNvbnN0OwotICAgICAg
ICBib29sIHBhaW50c0ludG9JbWFnZUJ1ZmZlcigpIGNvbnN0OwogCiAgICAgICAgIHZvaWQgc2F2
ZSgpOwogICAgICAgICB2b2lkIHJlc3RvcmUoKTsKQEAgLTUwOSw4ICs1MDgsNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHBhdHRlcm4gZ2V0SGFpa3VTdHJva2VTdHlsZSgpOwogI2Vu
ZGlmCiAKLSAgICAgICAgdm9pZCBzZXRHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQz
RCosIERyYXdpbmdCdWZmZXIqLCBjb25zdCBJbnRTaXplJik7Ci0KICAgICAgICAgc3RhdGljIHZv
aWQgYWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50
JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlKTsKIAogICAgIHByaXZhdGU6Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
Y3BwCShyZXZpc2lvbiA5MzA2MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsNCArOTUsMTEgQEAgdm9pZCBJ
bWFnZUJ1ZmZlcjo6Y29udmVydFRvTHVtaW5hbmNlTWFzawogICAgIGdlbmVyaWNDb252ZXJ0VG9M
dW1pbmFuY2VNYXNrKCk7CiB9CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYm
ICFVU0UoU0tJQSkKK1BsYXRmb3JtTGF5ZXIqIEltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDkzMDYy
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOSBAQAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5o
IgogI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgor
I2VuZGlmCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogI2luY2x1ZGUgIkludFNpemUuaCIK
ICNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGEuaCIKQEAgLTEwNiw2ICsxMDksOSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAjZWxzZQogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9y
bSgpIGNvbnN0IHsgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgxLCAwLCAwLCAtMSwgMCwgbV9zaXpl
LmhlaWdodCgpKTsgfQogI2VuZGlmCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
ICAgICAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CisjZW5kaWYKIAog
ICAgIHByaXZhdGU6CiAjaWYgVVNFKENHKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VCdWZmZXJEYXRhU2tpYS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQnVmZmVyRGF0YVNr
aWEuaAkocmV2aXNpb24gOTMwNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZUJ1ZmZlckRhdGFTa2lhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDcgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAKICNpbmNsdWRlICJza2lhL2V4
dC9wbGF0Zm9ybV9jYW52YXMuaCIKQEAgLTQwLDYgKzQxLDcgQEAgcHVibGljOgogCiAgICAgT3du
UHRyPFNrQ2FudmFzPiBtX2NhbnZhczsKICAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIG1fcGxhdGZv
cm1Db250ZXh0OworICAgIFJlZlB0cjxEcmF3aW5nQnVmZmVyPiBtX2RyYXdpbmdCdWZmZXI7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwCShyZXZpc2lvbiA5
MzA2MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVm
ZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcwLDcgKzI3MCw3IEBAIGJvb2wgRHJhd2luZ0J1
ZmZlcjo6cmVzZXQoY29uc3QgSW50U2l6ZSYKIAogICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2NvbG9yQnVmZmVyKTsKICAgICAg
ICAgCi0gICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgaW50ZXJuYWxDb2xvckZvcm1hdCwgbV9zaXplLndpZHRo
KCksIG1fc2l6ZS5oZWlnaHQoKSwgMCwgY29sb3JGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFKTsKKyAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9yRm9ybWF0LCBtX3NpemUud2lkdGgo
KSwgbV9zaXplLmhlaWdodCgpLCAwLCBjb2xvckZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEUsIDApOwogCiAgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJl
MkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09M
T1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2NvbG9yQnVm
ZmVyLCAwKTsKICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgMCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAJKHJldmlz
aW9uIDkzMDYyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFw
aGljc0NvbnRleHRTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwMywyMSArMTIwMywxMSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHcsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihoKSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRHcmFwaGljc0NvbnRleHQzRChHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCwgRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlciwgY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0R3JhcGhpY3NDb250
ZXh0M0QoY29udGV4dCwgZHJhd2luZ0J1ZmZlciwgc2l6ZSk7Ci19Ci0KIGJvb2wgR3JhcGhpY3ND
b250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGV4dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHBsYXRm
b3JtQ29udGV4dCgpLT5pc0FjY2VsZXJhdGVkKCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0
OjpwYWludHNJbnRvSW1hZ2VCdWZmZXIoKSBjb25zdAotewotICAgIHJldHVybiBwbGF0Zm9ybUNv
bnRleHQoKS0+cGFpbnRzSW50b0ltYWdlQnVmZmVyKCk7Ci19Ci0KICNpZiBQTEFURk9STShDSFJP
TUlVTSkgJiYgT1MoREFSV0lOKQogQ0dDb2xvclNwYWNlUmVmIGRldmljZVJHQkNvbG9yU3BhY2VS
ZWYoKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFn
ZUJ1ZmZlclNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkocmV2aXNpb24gOTMwNjIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5
LmgiCiAjaW5jbHVkZSAiUE5HSW1hZ2VFbmNvZGVyLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250
ZXh0U2tpYS5oIgorI2luY2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVk
ZSAiU2tDb2xvclByaXYuaCIKICNpbmNsdWRlICJTa2lhVXRpbHMuaCIKIApAQCAtNjEsNyArNjIs
NyBAQCBJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0YShjb25zdCBJCiB7CiB9CiAKLUlt
YWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplLCBDb2xvclNwYWNlLCBS
ZW5kZXJpbmdNb2RlLCBib29sJiBzdWNjZXNzKQorSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNv
bnN0IEludFNpemUmIHNpemUsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9k
ZSwgYm9vbCYgc3VjY2VzcykKICAgICA6IG1fZGF0YShzaXplKQogICAgICwgbV9zaXplKHNpemUp
CiB7CkBAIC04MCw2ICs4MSwxNCBAQCBJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50
U2l6ZSYgCiAgICAgLy8gcmVxdWlyZWQsIGJ1dCB0aGUgY2FudmFzIGlzIGN1cnJlbnRseSBmaWxs
ZWQgd2l0aCB0aGUgbWFnaWMgdHJhbnNwYXJlbmN5CiAgICAgLy8gY29sb3IuIENhbiB3ZSBoYXZl
IGFub3RoZXIgd2F5IHRvIG1hbmFnZSB0aGlzPwogICAgIG1fZGF0YS5tX2NhbnZhcy0+ZHJhd0FS
R0IoMCwgMCwgMCwgMCwgU2tYZmVybW9kZTo6a0NsZWFyX01vZGUpOworICAgIGlmIChyZW5kZXJp
bmdNb2RlID09IEFjY2VsZXJhdGVkKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0M0QgPSBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKDApOworICAgICAgICBpZiAo
Y29udGV4dDNEKSB7CisgICAgICAgICAgICBtX2RhdGEubV9kcmF3aW5nQnVmZmVyID0gY29udGV4
dDNELT5jcmVhdGVEcmF3aW5nQnVmZmVyKHNpemUpOworICAgICAgICAgICAgbV9kYXRhLm1fcGxh
dGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dDNEKGNvbnRleHQzRCwgbV9kYXRhLm1fZHJh
d2luZ0J1ZmZlci5nZXQoKSk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBzdWNjZXNzID0gdHJ1
ZTsKIH0KIApAQCAtMzY2LDYgKzM3NSwxMSBAQCBTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVS
TChjb25zdCBTdHJpCiAgICAgcmV0dXJuIEltYWdlVG9EYXRhVVJMKGRldmljZS0+YWNjZXNzQml0
bWFwKGZhbHNlKSwgbWltZVR5cGUsIHF1YWxpdHkpOwogfQogCitQbGF0Zm9ybUxheWVyKiBJbWFn
ZUJ1ZmZlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YS5tX2Ry
YXdpbmdCdWZmZXItPnBsYXRmb3JtTGF5ZXIoKTsKK30KKwogU3RyaW5nIEltYWdlRGF0YVRvRGF0
YVVSTChjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29u
c3QgZG91YmxlKiBxdWFsaXR5KQogewogICAgIHJldHVybiBJbWFnZVRvRGF0YVVSTChzb3VyY2Us
IG1pbWVUeXBlLCBxdWFsaXR5KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAkocmV2
aXNpb24gOTMwNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Bs
YXRmb3JtQ29udGV4dFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw4ICs1OSw2IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZXh0ZXJuIGJvb2wgaXNQYXRoU2tpYVNhZmUoY29uc3Qg
U2tNYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgU2tQYXRoJiBwYXRoKTsKLQogLy8gU3RhdGUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogLy8gRW5jYXBzdWxhdGVzIHRoZSBhZGRpdGlvbmFsIHBhaW50aW5nIHN0
YXRlIGluZm9ybWF0aW9uIHdlIHN0b3JlIGZvciBlYWNoCkBAIC02NTIsNyArNjUwLDcgQEAgdm9p
ZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjphcHBseUFudGlBbGlhcwogICAgIG1fY2FudmFzLT5yZXN0
b3JlKCk7CiB9CiAKLXZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0R3JhcGhpY3NDb250ZXh0
M0QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZm
ZXIsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCit2b2lkIFBsYXRmb3JtQ29udGV4dFNr
aWE6OnNldEdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBEcmF3
aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQogewogICAgIG1fZ3B1Q29udGV4dCA9IGNvbnRleHQ7
CiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKQEAgLTY4Miw5ICs2ODAsNCBAQCB2
b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6Om1ha2VHckNvbnRleHRDCiAgICAgICAgIG1fZ3B1Q29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiB9CiAKLWJvb2wgUGxhdGZvcm1Db250ZXh0U2tp
YTo6cGFpbnRzSW50b0ltYWdlQnVmZmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9ncHVDb250
ZXh0ID8gbV9ncHVDb250ZXh0LT5wYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgOiB0cnVlOwotfQot
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAkocmV2
aXNpb24gOTMwNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Bs
YXRmb3JtQ29udGV4dFNraWEuaAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDggKzE3OCw3IEBAIHB1
YmxpYzoKICAgICBib29sIGhhc0ltYWdlUmVzYW1wbGluZ0hpbnQoKSBjb25zdDsKIAogICAgIGJv
b2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3B1Q29udGV4dDsgfQotICAgIHZv
aWQgc2V0R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0QqLCBEcmF3aW5nQnVmZmVy
KiwgY29uc3QgSW50U2l6ZSYpOwotICAgIGJvb2wgcGFpbnRzSW50b0ltYWdlQnVmZmVyKCkgY29u
c3Q7CisgICAgdm9pZCBzZXRHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRCosIERy
YXdpbmdCdWZmZXIqKTsKICAgICB2b2lkIG1ha2VHckNvbnRleHRDdXJyZW50KCk7CiAKIHByaXZh
dGU6CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gOTMwNjIpCisrKyBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDIwIEBACisyMDExLTA4LTE1ICBTdGVwaGVuIFdoaXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0u
b3JnPgorCisgICAgICAgIENhbnZhcyByZXNpemluZyBjYW4gYmUgc2xvdworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYyNTEKKworICAgICAgICBBbGxv
dyB0aGUgaG9zdFdpbmRvdyBwYXJhbSAoYW5kIG1fd2ViVmlld0ltcGwpIHRvIGJlIE5VTEwuICBU
aGlzCisgICAgICAgIG1ha2VzIGl0IG11Y2ggZWFzaWVyIHRvIGVuYWJsZSBHUFUgYWNjZWxlcmF0
aW9uIGF0IGEgbG93ZXIgbGV2ZWwKKyAgICAgICAgaW4gV2ViS2l0J3MgcGxhdGZvcm0vZ3JhcGhp
Y3MgbGF5ZXIsIHdpdGhvdXQgbmVlZGluZyBhY2Nlc3MgdG8gdGhlCisgICAgICAgIFBhZ2UqIG9y
IEhvc3RXaW5kb3cqLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwbGF0Zm9ybVRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGFpbnRzSW50b0NhbnZh
c0J1ZmZlcik6CisKIDIwMTEtMDgtMTUgIE1pa2hhaWwgTmFnYW5vdiAgPG1uYWdhbm92QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBDaHJvbWl1bTogZXhwb3NlIE1lbW9yeUNhY2hlOjpwcnVuZSBh
bmQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEuCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNw
cAkocmV2aXNpb24gOTMwNjIpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGlj
c0NvbnRleHQzRENocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDEwICsxMjIsOCBA
QCBib29sIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmluaXRpYWxpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIENocm9tZSogY2hyb21lID0gc3RhdGljX2Nhc3Q8Q2hyb21lKj4oaG9z
dFdpbmRvdyk7Ci0gICAgbV93ZWJWaWV3SW1wbCA9IHN0YXRpY19jYXN0PFdlYktpdDo6V2ViVmll
d0ltcGwqPihjaHJvbWUtPmNsaWVudCgpLT53ZWJWaWV3KCkpOworICAgIG1fd2ViVmlld0ltcGwg
PSBjaHJvbWUgPyBzdGF0aWNfY2FzdDxXZWJLaXQ6OldlYlZpZXdJbXBsKj4oY2hyb21lLT5jbGll
bnQoKS0+d2ViVmlldygpKSA6IDA7CiAKLSAgICBpZiAoIW1fd2ViVmlld0ltcGwpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpZiAoIXdlYkNvbnRleHQtPmluaXRpYWxpemUod2ViQXR0cmli
dXRlcywgbV93ZWJWaWV3SW1wbCwgcmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgbV9pbXBsID0gd2ViQ29udGV4dC5yZWxlYXNlKCk7CkBAIC0x
NTAsNiArMTQ4LDcgQEAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0NvbnRleAog
CiBQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBsYXRmb3JtVGV4
dHVyZSgpIGNvbnN0CiB7CisgICAgQVNTRVJUKG1fd2ViVmlld0ltcGwpOwogICAgIG1faW1wbC0+
c2V0UGFyZW50Q29udGV4dChtX3dlYlZpZXdJbXBsLT5ncmFwaGljc0NvbnRleHQzRCgpKTsKICAg
ICByZXR1cm4gbV9pbXBsLT5nZXRQbGF0Zm9ybVRleHR1cmVJZCgpOwogfQpAQCAtMzAzLDYgKzMw
Miw3IEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzREkKIGJvb2wgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0CiB7
CiAgICAgLy8gSWYgdGhlIGdwdSBjb21wb3NpdG9yIGlzIG9uIHRoZW4gc2tpcCB0aGUgcmVhZGJh
Y2sgYW5kIHNvZnR3YXJlIHJlbmRlcmluZyBwYXRoLgorICAgIEFTU0VSVChtX3dlYlZpZXdJbXBs
KTsKICAgICByZXR1cm4gIW1fd2ViVmlld0ltcGwtPmlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Fj
dGl2ZSgpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104047</attachid>
            <date>2011-08-16 08:19:46 -0700</date>
            <delta_ts>2011-08-16 13:19:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66251-20110816111944.patch</filename>
            <type>text/plain</type>
            <size>25390</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzMTAyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTQgQEAKKzIwMTEtMDgtMTUgIFN0ZXBoZW4g
V2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ2FudmFzIHJlc2l6
aW5nIGNhbiBiZSBzbG93CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02NjI1MQorCisgICAgICAgIENhbnZhcyByZXNpemluZyB3YXMgc2xvdyBkdWUgdG8g
cmUtYWxsb2NhdGlvbiBvZiB0aGUgSW1hZ2VCdWZmZXIgb24KKyAgICAgICAgZWFjaCBzaXplIGNo
YW5nZSAod2lkdGggb3IgaGVpZ2h0KS4gIFRoaXMgd2FzIGludHJvZHVjZWQgaW5hZHZlcnRlbnRs
eQorICAgICAgICBieSBjYWxscyB0byBpc0FjY2VsZXJhdGVkKCkgZHVyaW5nIGNhbnZhcyByZXNl
dCgpLiAgU2luY2Ugd2Ugd29uJ3QgCisgICAgICAgIGtub3cgaWYgd2UgaGF2ZSBzdWNjZXNzZnVs
bHkgYWNjZWxlcmF0ZWQgdW50aWwgSW1hZ2VCdWZmZXIgY3JlYXRpb24sCisgICAgICAgIG1vdmUg
dGhlIGNvbXBvc2l0b3IgaW52YWxpZGF0aW9uIHRvIGNyZWF0ZUltYWdlQnVmZmVyKCkgYXMgd2Vs
bC4KKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGF0dGVtcHRzIHRvIHVuaWZ5IHRoZSBTa2lhIGFu
ZCBDRyBhY2NlbGVyYXRlZCBjYW52YXMKKyAgICAgICAgcGF0aHMuICBUaGUgRHJhd2luZ0J1ZmZl
ciB1c2VkIGJ5IHRoZSBTa2lhIHBhdGggaXMgbm93IG93bmVkIGJ5IAorICAgICAgICBJbWFnZUJ1
ZmZlcltTa2lhXSwgc2ltaWxhciB0byBob3cgdGhlIElPU3VyZmFjZSBpcyBvd25lZCBieQorICAg
ICAgICBJbWFnZUJ1ZmZlcltDR10uICBTb21lIG9mIHRoZSBsb2dpYyBmb3Igd2hlbiB0byBhY2Nl
bGVyYXRlIHdhcyBtb3ZlZAorICAgICAgICBpbnRvIEhUTUxDYW52YXNFbGVtZW50IGFuZCB1bmlm
aWVkIHdpdGggdGhlIENHIHBhdGguICBBY2NlbGVyYXRpb24gaXMKKyAgICAgICAgYWxzbyBub3cg
ZW5hYmxlZCBieSB0aGUgc2FtZSAiQWNjZWxlcmF0ZWQiIEltYWdlQnVmZmVyIGNyZWF0ZSBmbGFn
CisgICAgICAgIHVzZWQgYnkgdGhlIENHIHBhdGguICBEcmF3aW5nQnVmZmVyIGlzIG5vdyByZS1j
cmVhdGVkIGV2ZW4gZm9yIGEgCisgICAgICAgIHNhbWUtc2l6ZSBjaGFuZ2UgKHNhbWUgYXMgdGhl
IG1lbW9yeSBidWZmZXIpLCBidXQgd2Ugc3BlZWQgaXQgdXAKKyAgICAgICAgYnkgY2FsbGluZyBH
cmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCgpIHdpdGggYSBOVUxMIHBpeGVscyBwdHIKKyAg
ICAgICAgaW5zdGVhZCBvZiBHcmFwaGljc0NvbnRleHQzRDo6dGV4aW1hZ2UyRFJlc291cmNlU2Fm
ZSgpIChubyBuZWVkIHRvCisgICAgICAgIGNsZWFyIGl0LCBzaW5jZSBpdCdzIGRvbmUgd2l0aCBh
IGdsQ2xlYXIgYW55d2F5KS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzIGluIGZhc3QvY2FudmFzIGFuZCBj
YW52YXMvcGhpbGlwLgorCisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6cmVzZXQpOgorICAgICAgICBEb24n
dCBjYWxsIGlzQWNjZWxlcmF0ZWQoKSBmcm9tIHJlc2V0KCksIHNpbmNlIHdlIGRvbid0IHdhbnQg
dG8KKyAgICAgICAgaW5hZHZlcnRlbnRseSBjcmVhdGUgdGhlIEltYWdlQnVmZmVyLiAgQWxzbywg
c2luY2Ugd2Ugd29uJ3Qga25vdyBpZgorICAgICAgICB3ZSBoYXZlIHN1Y2Nlc3NmdWxseSBhY2Nl
bGVyYXRlZCB1bnRpbCBjcmVhdGVJbWFnZUJ1ZmZlcigpIGlzCisgICAgICAgIGNhbGxlZCwgZGVm
ZXIgdGhlIGNvbXBvc2l0b3IgaW52YWxpZGF0aW9uIHRvIGNyZWF0ZUltYWdlQnVmZmVyKCkgYXMK
KyAgICAgICAgd2VsbC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpzaG91
bGRBY2NlbGVyYXRlKToKKyAgICAgICAgVW5pZnkgdGhlIENHIGFuZCBTa2lhIHBvcnRzJyBsb2dp
YyBmb3Igd2hlbiB0byBhY2NlbGVyYXRlIChTa2lhCisgICAgICAgIGxvZ2ljIG1vdmVkIGluIGZy
b20gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52
YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIFVzZSB0aGUgdW5pZmllZCBz
aG91bGRBY2NlbGVyYXRlKCkgbG9naWMsIGFuZCBwYXNzIGl0IGFzIGEgZmxhZworICAgICAgICB0
byBJbWFnZUJ1ZmZlci4gIERvIGNvbXBvc2l0b3IgaW52YWxpZGF0aW9uIGFzIHdlbGwuCisgICAg
ICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENh
bnZhc0VsZW1lbnQ6Omhhc0NyZWF0ZWRJbWFnZUJ1ZmZlcik6CisgICAgICAgIEV4cG9zZSBoYXND
cmVhdGVkSW1hZ2VCdWZmZXIoKSBwdWJsaWNhbGx5LCBzbworICAgICAgICBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OmlzQWNjZWxlcmF0ZWQoKSBkb2Vzbid0IGluYWR2ZXJ0ZW50bHkgY3JlYXRl
CisgICAgICAgIGl0LgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6On5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpOgorICAgICAgICBSZW1vdmUg
YWxsIGFjY2VsZXJhdGlvbiBzZXR0aW5nIGFuZCByZXNldHRpbmcsIHNpbmNlIGl0J3Mgbm93IGRv
bmUKKyAgICAgICAgZHVyaW5nIEltYWdlQnVmZmVyIGNyZWF0aW9uLgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjppc0FjY2VsZXJhdGVkKToKKyAgICAgICAgQ2hl
Y2sgaWYgdGhlIGltYWdlIGJ1ZmZlciB3YXMgY3JlYXRlZCwgc28gd2UgZG9uJ3QgaW5hZHZlcnRl
bnRseQorICAgICAgICBjcmVhdGUgaXQgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6cGFpbnRzSW50b0NhbnZhc0J1ZmZlcik6CisgICAgICAgIERvbid0
IGNhbGwgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50c0ludG9DYW52YXNCdWZmZXIoKSwgc2luY2Ug
aXRzCisgICAgICAgIFdlYlZpZXdJbXBsIG1heSBiZSBudWxsLiAgQXNrIHRoZSByZW5kZXIgdHJl
ZSBpbnN0ZWFkLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpy
ZXNldCk6CisgICAgICAgIERvbid0IHJlc2V0IGFjY2VsZXJhdGlvbiBoZXJlLCBzaW5jZSB3ZSBk
b24ndCBvd24gaXQgYW55bW9yZS4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6cGxhdGZvcm1MYXllcik6CisgICAgICAgIENhbGwgaW50byB0aGUgSW1hZ2VCdWZm
ZXIgdG8gZ2V0IG91ciBQbGF0Zm9ybUxheWVyLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5oOgorICAgICAgICBSZW1vdmUgbV9kcmF3aW5nQnVmZmVyLCBh
bmQgYWxsIGFjY2VsZXJhdGlvbi1yZWxhdGVkIGNhbGxzLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgIFJlbW92ZSBzZXRHcmFwaGljc0NvbnRleHQzRCgp
LCBhbmQgcGFpbnRzSW50b0ltYWdlQnVmZmVyKCkuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnBsYXRm
b3JtTGF5ZXIpOgorICAgICAgICBJbXBsZW1lbnQgYSBkdW1teSBwbGF0Zm9ybUxheWVyKCkgY2Fs
bCBmb3Igbm9uLXNraWEgcG9ydHMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXIuaDoKKyAgICAgICAgRGVjbGFyZSBhIHBsYXRmb3JtTGF5ZXIoKSBjYWxsIChVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpIG9ubHkpLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlQnVmZmVyRGF0YVNraWEuaDoKKyAgICAgICAgQWRkIGEgRHJhd2luZ0J1
ZmZlciBkYXRhIG1lbWJlci4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2lu
Z0J1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpyZXNldCk6Cisg
ICAgICAgIFVzZSB0ZXhJbWFnZTJEKCkgd2l0aCBhIE5VTEwgcHRyLCBub3QgdGV4SW1hZ2UyRFJl
c291cmNlU2FmZSgpLgorICAgICAgICBTaW5jZSB3ZSBpbW1lZGlhdGVseSBjbGVhciB0aGUgZnJh
bWVidWZmZXIgdmlhIGdsQ2xlYXIoKSwgdGhpcyB3aG9sZQorICAgICAgICByZXNvdXJjZSBzYWZl
IGJ1c2luZXNzIGlzIG92ZXJraWxsLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEv
R3JhcGhpY3NDb250ZXh0U2tpYS5jcHA6CisgICAgICAgIFJlbW92ZSBzZXRHcmFwaGljc0NvbnRl
eHQzRCgpIGFuZCBwYWludHNJbnRvSW1hZ2VCdWZmZXIoKS4gIFRoaXMKKyAgICAgICAgZnVuY3Rp
b25hbGl0eSBpcyBoYW5kbGVkIGJ5IEltYWdlQnVmZmVyIG5vdy4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIpOgorICAgICAgICBHaXZlIHRoZSBJbWFnZUJ1ZmZlckRh
dGEgb3duZXJzaGlwIG9mIHRoZSBEcmF3aW5nQnVmZmVyLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIpOgorICAgICAgICBJbXBsZW1lbnQgYW4gYWNjZXNzb3Ig
Zm9yIHRoZSBEcmF3aW5nQnVmZmVyJ3MgUGxhdGZvcm1MYXllci4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oOgorICAgICAgICBS
ZW1vdmUgaXNQYXRoU2tpYVNhZmUoKSBleHRlcm4gKHVudXNlZCkuCisgICAgICAgIFJlbW92ZSBw
YWludHNJbnRvSW1hZ2VCdWZmZXIoKSAobm93IHVudXNlZCkuICBSZW1vdmUgSW50U2l6ZSBwYXJh
bQorICAgICAgICBmcm9tIHNldEdyYXBoaWNzQ29udGV4dDNEKCkgKHVudXNlZCkuCisKIDIwMTEt
MDgtMTYgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBnb29nbGUuY29tPgogCiAgICAgICAgIFdl
YiBJbnNwZWN0b3I6IGhpZGUgbm9uLWNvbnNlcnZhdGl2ZSBtZXRob2RzIGZyb20gdGhlIHByb3Rv
Y29sIGRvY3VtZW50YXRpb24uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNF
bGVtZW50LmNwcAkocmV2aXNpb24gOTMxMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxD
YW52YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ3LDE1ICsyNDcsNyBAQCB2b2lk
IEhUTUxDYW52YXNFbGVtZW50OjpyZXNldCgpCiAKICAgICBpZiAobV9jb250ZXh0ICYmIG1fY29u
dGV4dC0+aXMyZCgpKSB7CiAgICAgICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4
dDJEID0gc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKj4obV9jb250ZXh0Lmdl
dCgpKTsKLSAgICAgICAgYm9vbCB3YXNBY2NlbGVyYXRlZCA9IGNvbnRleHQyRC0+aXNBY2NlbGVy
YXRlZCgpOwogICAgICAgICBjb250ZXh0MkQtPnJlc2V0KCk7Ci0jaWYgVVNFKElPU1VSRkFDRV9D
QU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgKEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICYm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykpCi0gICAgICAgIC8vIFJlY2FsY3VsYXRlIGNv
bXBvc2l0aW5nIHJlcXVpcmVtZW50cyBpZiBhY2NlbGVyYXRpb24gc3RhdGUgY2hhbmdlZC4KLSAg
ICAgICAgaWYgKGNvbnRleHQyRC0+aXNBY2NlbGVyYXRlZCgpICE9IHdhc0FjY2VsZXJhdGVkKQot
ICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7Ci0j
ZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0od2FzQWNjZWxlcmF0ZWQpOwotI2VuZGlmCiAgICAg
fQogCiAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpKSB7
CkBAIC00MjQsNiArNDE2LDMwIEBAIENTU1N0eWxlU2VsZWN0b3IqIEhUTUxDYW52YXNFbGVtZW50
OjpzdHkKICAgICByZXR1cm4gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpOwogfQogCitib29s
IEhUTUxDYW52YXNFbGVtZW50OjpzaG91bGRBY2NlbGVyYXRlKGNvbnN0IEludFNpemUmIHNpemUp
IGNvbnN0Cit7CisjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKKyAgICBV
TlVTRURfUEFSQU0oc2l6ZSk7CisgICAgcmV0dXJuIGRvY3VtZW50KCktPnNldHRpbmdzKCktPmNh
bnZhc1VzZXNBY2NlbGVyYXRlZERyYXdpbmcoKTsKKyNlbGlmIEVOQUJMRShBQ0NFTEVSQVRFRF8y
RF9DQU5WQVMpCisgICAgaWYgKG1fY29udGV4dCAmJiAhbV9jb250ZXh0LT5pczJkKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50KCkt
PnNldHRpbmdzKCk7CisgICAgaWYgKCFzZXR0aW5ncy0+YWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRG8gbm90IHVzZSBhY2NlbGVy
YXRpb24gZm9yIHNtYWxsIGNhbnZhcy4KKyAgICBpZiAoc2l6ZS53aWR0aCgpICogc2l6ZS5oZWln
aHQoKSA8IHNldHRpbmdzLT5taW5pbXVtQWNjZWxlcmF0ZWQyZENhbnZhc1NpemUoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShzaXplKTsKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwogdm9pZCBIVE1MQ2Fu
dmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25zdAogewogICAgIEFTU0VSVCghbV9p
bWFnZUJ1ZmZlcik7CkBAIC00MzUsMTQgKzQ1MSw4IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6
OmNyZWF0ZUltYWdlQnVmZmUKICAgICBpZiAoIXNpemUud2lkdGgoKSB8fCAhc2l6ZS5oZWlnaHQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19T
VE9SRSkKLSAgICBpZiAoZG9jdW1lbnQoKS0+c2V0dGluZ3MoKS0+Y2FudmFzVXNlc0FjY2VsZXJh
dGVkRHJhd2luZygpKQotICAgICAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShzaXplLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBBY2NlbGVyYXRlZCk7Ci0gICAgZWxzZQotICAg
ICAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBDb2xvclNwYWNl
RGV2aWNlUkdCLCBVbmFjY2VsZXJhdGVkKTsKLSNlbHNlCi0gICAgbV9pbWFnZUJ1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSk7Ci0jZW5kaWYKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRl
cmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2Vs
ZXJhdGVkOworICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIENv
bG9yU3BhY2VEZXZpY2VSR0IsIHJlbmRlcmluZ01vZGUpOwogICAgIC8vIFRoZSBjb252ZXJ0TG9n
aWNhbFRvRGV2aWNlIE1heENhbnZhc0FyZWEgY2hlY2sgc2hvdWxkIHByZXZlbnQgY29tbW9uIGNh
c2VzCiAgICAgLy8gd2hlcmUgSW1hZ2VCdWZmZXI6OmNyZWF0ZSgpIHJldHVybnMgMCwgaG93ZXZl
ciB3ZSBjb3VsZCBzdGlsbCBiZSBsb3cgb24gbWVtb3J5LgogICAgIGlmICghbV9pbWFnZUJ1ZmZl
cikKQEAgLTQ1NSw2ICs0NjUsMTIgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1h
Z2VCdWZmZQogICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkp
OwogICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+Z2xvYmFsRGF0YSgpLT5oZWFwLnJlcG9y
dEV4dHJhTWVtb3J5Q29zdChtX2ltYWdlQnVmZmVyLT5kYXRhU2l6ZSgpKTsKICNlbmRpZgorCisj
aWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgKEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpICYmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykpCisgICAgaWYg
KG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzMmQoKSkKKyAgICAgICAgLy8gUmVjYWxjdWxhdGUg
Y29tcG9zaXRpbmcgcmVxdWlyZW1lbnRzIGlmIGFjY2VsZXJhdGlvbiBzdGF0ZSBjaGFuZ2VkLgor
ICAgICAgICBjb25zdF9jYXN0PEhUTUxDYW52YXNFbGVtZW50Kj4odGhpcyktPnNldE5lZWRzU3R5
bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworI2VuZGlmCiB9CiAKIEdyYXBoaWNzQ29u
dGV4dCogSFRNTENhbnZhc0VsZW1lbnQ6OmRyYXdpbmdDb250ZXh0KCkgY29uc3QKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgJKHJldmlzaW9uIDkzMTAyKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjgsNiArMTI4LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICB2b2lkIG1ha2VSZW5kZXJp
bmdSZXN1bHRzQXZhaWxhYmxlKCk7CisgICAgYm9vbCBoYXNDcmVhdGVkSW1hZ2VCdWZmZXIoKSBj
b25zdCB7IHJldHVybiBtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlcjsgfQogCiBwcml2YXRlOgogICAg
IEhUTUxDYW52YXNFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwpAQCAt
MTM3LDEwICsxMzgsMTAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcmVzZXQoKTsKIAorICAgIGJv
b2wgc2hvdWxkQWNjZWxlcmF0ZShjb25zdCBJbnRTaXplJikgY29uc3Q7CiAgICAgdm9pZCBjcmVh
dGVJbWFnZUJ1ZmZlcigpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRTdXJmYWNlU2l6ZShjb25zdCBJ
bnRTaXplJik7Ci0gICAgYm9vbCBoYXNDcmVhdGVkSW1hZ2VCdWZmZXIoKSBjb25zdCB7IHJldHVy
biBtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlcjsgfQogCiAgICAgSGFzaFNldDxDYW52YXNPYnNlcnZl
cio+IG1fb2JzZXJ2ZXJzOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDkzMTAyKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjEsMTYgKzYxLDkgQEAKICNpbmNsdWRlICJUZXh0TWV0cmlj
cy5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKIAotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpCi0jaW5jbHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCi0j
aW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1
ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjZW5kaWYKLSNlbmRpZgogCiAjaW5j
bHVkZSA8d3RmL0J5dGVBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CkBAIC05
OCwyNSArOTEsNiBAQCBzdGF0aWMgYm9vbCBpc09yaWdpbkNsZWFuKENhY2hlZEltYWdlKiBjCiAg
ICAgcmV0dXJuICFzZWN1cml0eU9yaWdpbi0+dGFpbnRzQ2FudmFzKGNhY2hlZEltYWdlLT5yZXNw
b25zZSgpLnVybCgpKTsKIH0KIAotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi1z
dGF0aWMgYm9vbCBzaG91bGRBY2NlbGVyYXRlQ2FudmFzKGNvbnN0IEhUTUxDYW52YXNFbGVtZW50
KiBjYW52YXMpCi17Ci0gICAgY29uc3QgUGFnZSogcGFnZSA9IGNhbnZhcy0+ZG9jdW1lbnQoKS0+
cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29u
c3QgU2V0dGluZ3MqIHNldHRpbmdzID0gcGFnZS0+c2V0dGluZ3MoKTsKLSAgICBpZiAoIXNldHRp
bmdzLT5hY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAvLyBEbyBub3QgdXNlIGFjY2VsZXJhdGlvbiBmb3Igc21hbGwgY2FudmFzLgotICAg
IGlmIChjYW52YXMtPndpZHRoKCkgKiBjYW52YXMtPmhlaWdodCgpIDwgc2V0dGluZ3MtPm1pbmlt
dW1BY2NlbGVyYXRlZDJkQ2FudmFzU2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZgotCiBjbGFzcyBDYW52YXNTdHJva2VTdHlsZUFwcGxp
ZXIgOiBwdWJsaWMgU3Ryb2tlU3R5bGVBcHBsaWVyIHsKIHB1YmxpYzoKICAgICBDYW52YXNTdHJv
a2VTdHlsZUFwcGxpZXIoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjYW52YXNDb250ZXh0KQpA
QCAtMTUxLDEwICsxMjUsNiBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OkNhbnZhc1JlbmRl
cmluCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgZXZlbiBpZiB0aGUgZHJhd2luZ0NvbnRleHQoKSBo
YXMgYSBkaWZmZXJlbnQgZGVmYXVsdAogICAgIC8vIHRoaWNrbmVzcywgaXQgaXMgaW4gc3luYyB3
aXRoIHRoZSBjYW52YXMgdGhpY2tuZXNzLgogICAgIHNldExpbmVXaWR0aChsaW5lV2lkdGgoKSk7
Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIHJlc2V0QWNjZWxlcmF0
aW9uKCk7Ci0jZW5kaWYKIH0KIAogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp+Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEKCkKQEAgLTE3MCwxMSArMTQwLDYgQEAgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjp+Q2FudmFzUmVuZGVyaQogICAgICAgICB9CiAgICAgfQogI2VuZGlmCi0KLSNpZiBF
TkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIGlmIChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQgPSBkcmF3aW5nQ29udGV4dCgpKQotICAgICAgICBjb250ZXh0LT5zZXRHcmFwaGljc0Nv
bnRleHQzRCgwLCAwLCBJbnRTaXplKCkpOwotI2VuZGlmCiB9CiAKIGJvb2wgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjppc0FjY2VsZXJhdGVkKCkgY29uc3QKQEAgLTE4Myw3ICsxNDgsNyBAQCBi
b29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6aXNBY2NlbGVyCiAgICAgSW1hZ2VCdWZmZXIq
IGJ1ZmZlciA9IGNhbnZhcygpLT5idWZmZXIoKTsKICAgICByZXR1cm4gYnVmZmVyID8gYnVmZmVy
LT5pc0FjY2VsZXJhdGVkKCkgOiBmYWxzZTsKICNlbGlmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpCi0gICAgcmV0dXJuIGRyYXdpbmdDb250ZXh0KCkgJiYgZHJhd2luZ0NvbnRleHQoKS0+
aXNBY2NlbGVyYXRlZENvbnRleHQoKTsKKyAgICByZXR1cm4gY2FudmFzKCktPmhhc0NyZWF0ZWRJ
bWFnZUJ1ZmZlcigpICYmIGRyYXdpbmdDb250ZXh0KCkgJiYgZHJhd2luZ0NvbnRleHQoKS0+aXNB
Y2NlbGVyYXRlZENvbnRleHQoKTsKICNlbHNlCiAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCkBA
IC0xOTEsOSArMTU2LDEzIEBAIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjppc0FjY2Vs
ZXIKIAogYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnBhaW50c0ludG9DYW52YXNCdWZm
ZXIoKSBjb25zdAogewotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgaWYg
KGRyYXdpbmdDb250ZXh0KCkpCi0gICAgICAgIHJldHVybiBkcmF3aW5nQ29udGV4dCgpLT5wYWlu
dHNJbnRvSW1hZ2VCdWZmZXIoKTsKKyNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAm
JiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYgKCFpc0FjY2VsZXJhdGVkKCkp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52
YXMoKS0+cmVuZGVyQm94KCk7CisgICAgaWYgKHJlbmRlckJveCAmJiByZW5kZXJCb3gtPmhhc0xh
eWVyKCkgJiYgcmVuZGVyQm94LT5sYXllcigpLT5oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogICAgIHJldHVybiB0cnVlOwogfQpAQCAt
MjA0LDE0ICsxNzMsMTEgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnJlc2V0KCkK
ICAgICBtX3N0YXRlU3RhY2sucmVzaXplKDEpOwogICAgIG1fc3RhdGVTdGFjay5maXJzdCgpID0g
U3RhdGUoKTsKICAgICBtX3BhdGguY2xlYXIoKTsKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRf
Q0FOVkFTKQotICAgIHJlc2V0QWNjZWxlcmF0aW9uKCk7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQogICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gY2FudmFzKCktPnJlbmRlckJv
eCgpOwogICAgIGlmIChyZW5kZXJCb3ggJiYgcmVuZGVyQm94LT5oYXNMYXllcigpICYmIHJlbmRl
ckJveC0+bGF5ZXIoKS0+aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKQogICAgICAgICByZW5k
ZXJCb3gtPmxheWVyKCktPmNvbnRlbnRDaGFuZ2VkKFJlbmRlckxheWVyOjpDYW52YXNDaGFuZ2Vk
KTsKICNlbmRpZgotI2VuZGlmCiB9CiAKIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6U3RhdGU6
OlN0YXRlKCkKQEAgLTIwMTUsNTcgKzE5ODEsMTAgQEAgY29uc3QgRm9udCYgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjphYwogICAgIHJldHVybiBzdGF0ZSgpLm1fZm9udDsKIH0KIAotI2lmIEVO
QUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICYmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKIFBsYXRmb3JtTGF5ZXIqIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1f
ZHJhd2luZ0J1ZmZlci0+cGxhdGZvcm1MYXllcigpIDogMDsKLX0KLSNlbmRpZgotCi12b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y2xlYXJBY2NlbGVyYXRpb24oKQotewotICAgIGlmIChH
cmFwaGljc0NvbnRleHQqIGN0eCA9IGRyYXdpbmdDb250ZXh0KCkpCi0gICAgICAgIGN0eC0+c2V0
R3JhcGhpY3NDb250ZXh0M0QoMCwgMCwgSW50U2l6ZSgpKTsKLQotICAgIG1fZHJhd2luZ0J1ZmZl
ci5jbGVhcigpOwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cmVzZXRBY2Nl
bGVyYXRpb24oKQotewotICAgIGlmICghc2hvdWxkQWNjZWxlcmF0ZUNhbnZhcyhjYW52YXMoKSkp
IHsKLSAgICAgICAgY2xlYXJBY2NlbGVyYXRpb24oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIFRyeSB0byBhY2NlbGVyYXRlLgotICAgIEdyYXBoaWNzQ29udGV4dCogY3R4ID0g
ZHJhd2luZ0NvbnRleHQoKTsKLSAgICBpZiAoIWN0eCkgewotICAgICAgICBjbGVhckFjY2VsZXJh
dGlvbigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUGFnZSogcGFnZSA9IGNhbnZh
cygpLT5kb2N1bWVudCgpLT5wYWdlKCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQz
RCA9IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUocGFnZS0+Y2hyb21lKCkpOwotICAg
IGlmICghY29udGV4dDNEKSB7Ci0gICAgICAgIGNsZWFyQWNjZWxlcmF0aW9uKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgIGlm
ICghbV9kcmF3aW5nQnVmZmVyLT5yZXNldChjYW52YXMoKS0+c2l6ZSgpKSkgewotICAgICAgICAg
ICAgY2xlYXJBY2NlbGVyYXRpb24oKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fZHJhd2luZ0J1ZmZlciA9IGNvbnRleHQzRC0+Y3JlYXRl
RHJhd2luZ0J1ZmZlcihjYW52YXMoKS0+c2l6ZSgpKTsKLSAgICAgICAgaWYgKCFtX2RyYXdpbmdC
dWZmZXIpIHsKLSAgICAgICAgICAgIGNsZWFyQWNjZWxlcmF0aW9uKCk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjdHgtPnNldEdyYXBoaWNzQ29udGV4dDNE
KGNvbnRleHQzRCwgbV9kcmF3aW5nQnVmZmVyLmdldCgpLCBjYW52YXMoKS0+c2l6ZSgpKTsKKyAg
ICByZXR1cm4gY2FudmFzKCktPmJ1ZmZlcigpID8gY2FudmFzKCktPmJ1ZmZlcigpLT5wbGF0Zm9y
bUxheWVyKCkgOiAwOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCShyZXZpc2lvbiA5MzEw
MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MywxMSArNTMsNiBAQCBjbGFzcyBIVE1MVmlkZW9FbGVt
ZW50OwogY2xhc3MgSW1hZ2VEYXRhOwogY2xhc3MgVGV4dE1ldHJpY3M7CiAKLSNpZiBFTkFCTEUo
QUNDRUxFUkFURURfMkRfQ0FOVkFTKQotY2xhc3MgRHJhd2luZ0J1ZmZlcjsKLWNsYXNzIFNoYXJl
ZEdyYXBoaWNzQ29udGV4dDNEOwotI2VuZGlmCi0KIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7
CiAKIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCA6IHB1YmxpYyBDYW52YXNSZW5kZXJp
bmdDb250ZXh0IHsKQEAgLTI5NCwyMCArMjg5LDExIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHBy
ZXBhcmVHcmFkaWVudEZvckRhc2hib2FyZChDYW52YXNHcmFkaWVudCogZ3JhZGllbnQpIGNvbnN0
OwogCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSAgICB2b2lkIGNsZWFyQWNj
ZWxlcmF0aW9uKCk7Ci0gICAgdm9pZCByZXNldEFjY2VsZXJhdGlvbigpOwotI2VuZGlmCi0KICAg
ICBWZWN0b3I8U3RhdGUsIDE+IG1fc3RhdGVTdGFjazsKICAgICBib29sIG1fdXNlc0NTU0NvbXBh
dGliaWxpdHlQYXJzZU1vZGU7CiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQogICAgIGJv
b2wgbV91c2VzRGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGU7CiAjZW5kaWYKLQotI2lmIEVOQUJM
RShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgUmVmUHRyPERyYXdpbmdCdWZmZXI+IG1fZHJh
d2luZ0J1ZmZlcjsKLSNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuY3BwCShyZXZpc2lvbiA5MzEwMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4NCwxMiArNjg0LDYg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkUwogfQogI2VuZGlmCiAK
LSNpZiAhVVNFKFNLSUEpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0R3JhcGhpY3NDb250ZXh0
M0QoR3JhcGhpY3NDb250ZXh0M0QqLCBEcmF3aW5nQnVmZmVyKiwgY29uc3QgSW50U2l6ZSYpCi17
Ci19Ci0jZW5kaWYKLQogI2lmICFVU0UoU0tJQSkgJiYgIVVTRShDRykKIGJvb2wgR3JhcGhpY3ND
b250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGV4dCgpIGNvbnN0CiB7CkBAIC02OTcsMTMgKzY5MSw2
IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGUKIH0KICNlbmRpZgog
Ci0jaWYgIVVTRShTS0lBKQotYm9vbCBHcmFwaGljc0NvbnRleHQ6OnBhaW50c0ludG9JbWFnZUJ1
ZmZlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYKLQogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwg
RmxvYXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLCBTdHJva2VTdHlsZSBwZW5TdHlsZSkK
IHsKICAgICAvLyBGb3Igb2RkIHdpZHRocywgd2UgYWRkIGluIDAuNSB0byB0aGUgYXBwcm9wcmlh
dGUgeC95IHNvIHRoYXQgdGhlIGZsb2F0IGFyaXRobWV0aWMKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiA5
MzEwMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzUsNyArMjc1LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpOwogI2VuZGlmCiAg
ICAgICAgIGJvb2wgaXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdDsKLSAgICAgICAgYm9vbCBw
YWludHNJbnRvSW1hZ2VCdWZmZXIoKSBjb25zdDsKIAogICAgICAgICB2b2lkIHNhdmUoKTsKICAg
ICAgICAgdm9pZCByZXN0b3JlKCk7CkBAIC01MDksOCArNTA4LDYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBwYXR0ZXJuIGdldEhhaWt1U3Ryb2tlU3R5bGUoKTsKICNlbmRpZgogCi0g
ICAgICAgIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0QqLCBEcmF3
aW5nQnVmZmVyKiwgY29uc3QgSW50U2l6ZSYpOwotCiAgICAgICAgIHN0YXRpYyB2b2lkIGFkanVz
dExpbmVUb1BpeGVsQm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIsIGZs
b2F0IHN0cm9rZVdpZHRoLCBTdHJva2VTdHlsZSk7CiAKICAgICBwcml2YXRlOgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAkocmV2
aXNpb24gOTMxMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDQgKzk1LDExIEBAIHZvaWQgSW1hZ2VCdWZm
ZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2sKICAgICBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNl
TWFzaygpOwogfQogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiAhVVNFKFNL
SUEpCitQbGF0Zm9ybUxheWVyKiBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiA5MzEwMikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDYgKzMxLDkgQEAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNs
dWRlICJDb2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNlbmRpZgog
I2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXJEYXRhLmgiCkBAIC0xMDYsNiArMTA5LDkgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogI2Vsc2UKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25z
dCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAsIG1fc2l6ZS5oZWlnaHQo
KSk7IH0KICNlbmRpZgorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICAgICAg
UGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OworI2VuZGlmCiAKICAgICBwcml2
YXRlOgogI2lmIFVTRShDRykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlQnVmZmVyRGF0YVNraWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUJ1ZmZlckRhdGFTa2lhLmgJKHJl
dmlzaW9uIDkzMTAyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VCdWZmZXJEYXRhU2tpYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBA
CiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKKyNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgogCiAjaW5jbHVkZSAic2tpYS9leHQvcGxhdGZv
cm1fY2FudmFzLmgiCkBAIC00MCw2ICs0MSw3IEBAIHB1YmxpYzoKIAogICAgIE93blB0cjxTa0Nh
bnZhcz4gbV9jYW52YXM7CiAgICAgUGxhdGZvcm1Db250ZXh0U2tpYSBtX3BsYXRmb3JtQ29udGV4
dDsKKyAgICBSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gbV9kcmF3aW5nQnVmZmVyOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcAkocmV2aXNpb24gOTMxMDIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3MCw3ICsyNzAsNyBAQCBib29sIERyYXdpbmdCdWZmZXI6OnJl
c2V0KGNvbnN0IEludFNpemUmCiAKICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9jb2xvckJ1ZmZlcik7CiAgICAgICAgIAotICAg
ICAgICBtX2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIDAsIGludGVybmFsQ29sb3JGb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3Np
emUuaGVpZ2h0KCksIDAsIGNvbG9yRm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSk7CisgICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgMCwgaW50ZXJuYWxDb2xvckZvcm1hdCwgbV9zaXplLndpZHRoKCksIG1fc2l6
ZS5oZWlnaHQoKSwgMCwgY29sb3JGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9C
WVRFLCAwKTsKIAogICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFD
SE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9jb2xvckJ1ZmZlciwgMCk7
CiAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIDApOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9H
cmFwaGljc0NvbnRleHRTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCShyZXZpc2lvbiA5MzEw
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250
ZXh0U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMDMsMjEgKzEyMDMsMTEgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZShmbG9hdCB3LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdlYkNvcmVGbG9hdFRvU2tTY2FsYXIoaCkpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIsIGNvbnN0IEludFNpemUm
IHNpemUpCi17Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPnNldEdyYXBoaWNzQ29udGV4dDNEKGNv
bnRleHQsIGRyYXdpbmdCdWZmZXIsIHNpemUpOwotfQotCiBib29sIEdyYXBoaWNzQ29udGV4dDo6
aXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdAogewogICAgIHJldHVybiBwbGF0Zm9ybUNvbnRl
eHQoKS0+aXNBY2NlbGVyYXRlZCgpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRz
SW50b0ltYWdlQnVmZmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCkt
PnBhaW50c0ludG9JbWFnZUJ1ZmZlcigpOwotfQotCiAjaWYgUExBVEZPUk0oQ0hST01JVU0pICYm
IE9TKERBUldJTikKIENHQ29sb3JTcGFjZVJlZiBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCkKIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJT
a2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHJldmlzaW9uIDkzMTAyKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2lu
Y2x1ZGUgIlBOR0ltYWdlRW5jb2Rlci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEu
aCIKKyNpbmNsdWRlICJTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIlNrQ29s
b3JQcml2LmgiCiAjaW5jbHVkZSAiU2tpYVV0aWxzLmgiCiAKQEAgLTYxLDcgKzYyLDcgQEAgSW1h
Z2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSQogewogfQogCi1JbWFnZUJ1ZmZl
cjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5n
TW9kZSwgYm9vbCYgc3VjY2VzcykKK0ltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRT
aXplJiBzaXplLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGJvb2wm
IHN1Y2Nlc3MpCiAgICAgOiBtX2RhdGEoc2l6ZSkKICAgICAsIG1fc2l6ZShzaXplKQogewpAQCAt
ODAsNiArODEsMTQgQEAgSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIAog
ICAgIC8vIHJlcXVpcmVkLCBidXQgdGhlIGNhbnZhcyBpcyBjdXJyZW50bHkgZmlsbGVkIHdpdGgg
dGhlIG1hZ2ljIHRyYW5zcGFyZW5jeQogICAgIC8vIGNvbG9yLiBDYW4gd2UgaGF2ZSBhbm90aGVy
IHdheSB0byBtYW5hZ2UgdGhpcz8KICAgICBtX2RhdGEubV9jYW52YXMtPmRyYXdBUkdCKDAsIDAs
IDAsIDAsIFNrWGZlcm1vZGU6OmtDbGVhcl9Nb2RlKTsKKyAgICBpZiAocmVuZGVyaW5nTW9kZSA9
PSBBY2NlbGVyYXRlZCkgeworICAgICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEID0g
U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSgwKTsKKyAgICAgICAgaWYgKGNvbnRleHQz
RCkgeworICAgICAgICAgICAgbV9kYXRhLm1fZHJhd2luZ0J1ZmZlciA9IGNvbnRleHQzRC0+Y3Jl
YXRlRHJhd2luZ0J1ZmZlcihzaXplKTsKKyAgICAgICAgICAgIG1fZGF0YS5tX3BsYXRmb3JtQ29u
dGV4dC5zZXRHcmFwaGljc0NvbnRleHQzRChjb250ZXh0M0QsIG1fZGF0YS5tX2RyYXdpbmdCdWZm
ZXIuZ2V0KCkpOworICAgICAgICB9CisgICAgfQorCiAgICAgc3VjY2VzcyA9IHRydWU7CiB9CiAK
QEAgLTM2Niw2ICszNzUsMTEgQEAgU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3Qg
U3RyaQogICAgIHJldHVybiBJbWFnZVRvRGF0YVVSTChkZXZpY2UtPmFjY2Vzc0JpdG1hcChmYWxz
ZSksIG1pbWVUeXBlLCBxdWFsaXR5KTsKIH0KIAorUGxhdGZvcm1MYXllciogSW1hZ2VCdWZmZXI6
OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGEubV9kcmF3aW5nQnVm
ZmVyID8gbV9kYXRhLm1fZHJhd2luZ0J1ZmZlci0+cGxhdGZvcm1MYXllcigpIDogMDsKK30KKwog
U3RyaW5nIEltYWdlRGF0YVRvRGF0YVVSTChjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5KQogewogICAgIHJldHVybiBJ
bWFnZVRvRGF0YVVSTChzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9y
bUNvbnRleHRTa2lhLmNwcAkocmV2aXNpb24gOTMxMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01OSw4ICs1OSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZXh0ZXJuIGJvb2wg
aXNQYXRoU2tpYVNhZmUoY29uc3QgU2tNYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgU2tQYXRoJiBw
YXRoKTsKLQogLy8gU3RhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gRW5jYXBzdWxhdGVzIHRoZSBh
ZGRpdGlvbmFsIHBhaW50aW5nIHN0YXRlIGluZm9ybWF0aW9uIHdlIHN0b3JlIGZvciBlYWNoCkBA
IC02NTIsNyArNjUwLDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjphcHBseUFudGlBbGlh
cwogICAgIG1fY2FudmFzLT5yZXN0b3JlKCk7CiB9CiAKLXZvaWQgUGxhdGZvcm1Db250ZXh0U2tp
YTo6c2V0R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIERyYXdp
bmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCit2
b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNldEdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0LCBEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKQogewogICAgIG1f
Z3B1Q29udGV4dCA9IGNvbnRleHQ7CiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykK
QEAgLTY4Miw5ICs2ODAsNCBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6Om1ha2VHckNvbnRl
eHRDCiAgICAgICAgIG1fZ3B1Q29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiB9CiAKLWJv
b2wgUGxhdGZvcm1Db250ZXh0U2tpYTo6cGFpbnRzSW50b0ltYWdlQnVmZmVyKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9ncHVDb250ZXh0ID8gbV9ncHVDb250ZXh0LT5wYWludHNJbnRvQ2FudmFz
QnVmZmVyKCkgOiB0cnVlOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRm
b3JtQ29udGV4dFNraWEuaAkocmV2aXNpb24gOTMxMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAkod29ya2luZyBjb3B5KQpA
QCAtMTc4LDggKzE3OCw3IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0ltYWdlUmVzYW1wbGluZ0hp
bnQoKSBjb25zdDsKIAogICAgIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
Z3B1Q29udGV4dDsgfQotICAgIHZvaWQgc2V0R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250
ZXh0M0QqLCBEcmF3aW5nQnVmZmVyKiwgY29uc3QgSW50U2l6ZSYpOwotICAgIGJvb2wgcGFpbnRz
SW50b0ltYWdlQnVmZmVyKCkgY29uc3Q7CisgICAgdm9pZCBzZXRHcmFwaGljc0NvbnRleHQzRChH
cmFwaGljc0NvbnRleHQzRCosIERyYXdpbmdCdWZmZXIqKTsKICAgICB2b2lkIG1ha2VHckNvbnRl
eHRDdXJyZW50KCk7CiAKIHByaXZhdGU6Cg==
</data>
<flag name="review"
          id="99770"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>