<?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>37866</bug_id>
          
          <creation_ts>2010-04-20 10:08:17 -0700</creation_ts>
          <short_desc>[Qt] PageClientQt specific implementation for QGraphicsWidget</short_desc>
          <delta_ts>2010-05-11 08:45:45 -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>WebKit Qt</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>Qt</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>37858</dependson>
          <blocked>35051</blocked>
    
    <blocked>37856</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jesus Sanchez-Palencia">jesus</reporter>
          <assigned_to name="Jesus Sanchez-Palencia">jesus</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>214723</commentid>
    <comment_count>0</comment_count>
    <who name="Jesus Sanchez-Palencia">jesus</who>
    <bug_when>2010-04-20 10:08:17 -0700</bug_when>
    <thetext>[Qt] PageClientQt specific implementation for QGraphicsWidget</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214736</commentid>
    <comment_count>1</comment_count>
      <attachid>53837</attachid>
    <who name="Jesus Sanchez-Palencia">jesus</who>
    <bug_when>2010-04-20 10:20:16 -0700</bug_when>
    <thetext>Created attachment 53837
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214757</commentid>
    <comment_count>2</comment_count>
    <who name="Jesus Sanchez-Palencia">jesus</who>
    <bug_when>2010-04-20 10:41:13 -0700</bug_when>
    <thetext>The proposed patch aims on solving the custom views issues that we have right now, when dealing with QGraphicsWidget based classes.

In summary this patch:

- removes the inheritance from QGraphicsWebViewPrivate, by separating the PageClientQGraphicsWidget into another class.

- moves all needed functions, including tiling and AC ones, to the new PageClient implementation, making QGraphicsWebViewPrivate way cleaner.

- adds QWebPage::setView(QGraphicsWidget*) making it possible to one to create a custom web view for any QGraphicsWidget.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214972</commentid>
    <comment_count>3</comment_count>
      <attachid>53884</attachid>
    <who name="Jesus Sanchez-Palencia">jesus</who>
    <bug_when>2010-04-20 15:00:00 -0700</bug_when>
    <thetext>Created attachment 53884
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217710</commentid>
    <comment_count>4</comment_count>
      <attachid>53884</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-04-27 08:16:27 -0700</bug_when>
    <thetext>Comment on attachment 53884
Patch

WebKit/qt/Api/qgraphicswebview.cpp:489
 +          d-&gt;overlay-&gt;prepareGraphicsItemGeometryChange();
You did this name change?

WebKit/qt/Api/qgraphicswebview.cpp:853
 +          static_cast&lt;PageClientQGraphicsWidget*&gt;(d-&gt;page-&gt;d-&gt;client)-&gt;viewResizesToContents = enabled;
I don&apos;t like having view specific things in the page client, if we can avoid it. Can we?

WebKit/qt/ChangeLog:8
 +          including Tiling and Accelerated Composite specific ones.
So now if KDE would use this, they will get tiling support?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217738</commentid>
    <comment_count>5</comment_count>
    <who name="Jesus Sanchez-Palencia">jesus</who>
    <bug_when>2010-04-27 09:40:46 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 53884 [details])
&gt; WebKit/qt/Api/qgraphicswebview.cpp:489
&gt;  +          d-&gt;overlay-&gt;prepareGraphicsItemGeometryChange();
&gt; You did this name change?

Yes, since it was just an encapsulation for a protected function from QGraphicsItem.

&gt; 
&gt; WebKit/qt/Api/qgraphicswebview.cpp:853
&gt;  +         
&gt; static_cast&lt;PageClientQGraphicsWidget*&gt;(d-&gt;page-&gt;d-&gt;client)-&gt;viewResizesToContents
&gt; = enabled;
&gt; I don&apos;t like having view specific things in the page client, if we can avoid
&gt; it. Can we?

This is just used on createOrDeleteOverlay(), which is now part of the PageClient (Tiling and AC need it).

&gt; 
&gt; WebKit/qt/ChangeLog:8
&gt;  +          including Tiling and Accelerated Composite specific ones.
&gt; So now if KDE would use this, they will get tiling support?

Hmm, yes, they would have the support for it but they would need to refer to the QGraphicsWebView implementation and see what else is needed to enable it. It&apos;s just a matter of calling the proper functions of the PageClient and connecting the right signals to the right slots... ;)
I don&apos;t know Tiling and AC implementation deeply, but from my tests I&apos;d say that there are no regressions with this patch. No&apos;am took a look at it and it seemed fine from the AC point of view.


thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218971</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-04-29 05:23:19 -0700</bug_when>
    <thetext>It generally looks good. It is a bit hard to review doe to all the code shuffeling, but I understand that it was not possible to split the patch up into parts. 

I&apos;m OK with landing the patch, but if we find any regression we will have to roll it out. You have to keep that in mind.

If everything looks fine after a week or so ,we can consider cherry-picking it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220569</commentid>
    <comment_count>7</comment_count>
      <attachid>55014</attachid>
    <who name="Jesus Sanchez-Palencia">jesus</who>
    <bug_when>2010-05-04 06:26:32 -0700</bug_when>
    <thetext>Created attachment 55014
PageClientQGraphicsWidget

I&apos;ve rebased the patch and added an autotest based on a test case from bug 35051 (https://bugs.webkit.org/attachment.cgi?id=50694).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222964</commentid>
    <comment_count>8</comment_count>
      <attachid>53884</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-08 23:09:49 -0700</bug_when>
    <thetext>Comment on attachment 53884
Patch

Cleared Simon Hausmann&apos;s review+ from obsolete attachment 53884 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223408</commentid>
    <comment_count>9</comment_count>
      <attachid>55575</attachid>
    <who name="Jesus Sanchez-Palencia">jesus</who>
    <bug_when>2010-05-10 11:10:01 -0700</bug_when>
    <thetext>Created attachment 55575
PageClientQGraphicsWidget

Now this patch is just a code refactor, removing the inheritance from QGraphicsWebViewPrivate.
The new setView and view() API for QWebPage will come in the future, on a new bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223940</commentid>
    <comment_count>10</comment_count>
      <attachid>55575</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-11 08:45:37 -0700</bug_when>
    <thetext>Comment on attachment 55575
PageClientQGraphicsWidget

Clearing flags on attachment: 55575

Committed r59152: &lt;http://trac.webkit.org/changeset/59152&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223941</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-11 08:45:45 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53837</attachid>
            <date>2010-04-20 10:20:16 -0700</date>
            <delta_ts>2010-04-20 14:59:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-37866-20100420142243.patch</filename>
            <type>text/plain</type>
            <size>28079</size>
            <attacher name="Jesus Sanchez-Palencia">jesus</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcWdyYXBoaWNzd2Vidmlldy5jcHAgYi9XZWJLaXQv
cXQvQXBpL3FncmFwaGljc3dlYnZpZXcuY3BwCmluZGV4IDkxOWExMGEuLjQ2YTNmNjEgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9xdC9BcGkvcWdyYXBoaWNzd2Vidmlldy5jcHAKKysrIGIvV2ViS2l0L3F0
L0FwaS9xZ3JhcGhpY3N3ZWJ2aWV3LmNwcApAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgInF3
ZWJmcmFtZV9wLmgiCiAjaW5jbHVkZSAicXdlYnBhZ2UuaCIKICNpbmNsdWRlICJxd2VicGFnZV9w
LmgiCi0jaW5jbHVkZSAiUVdlYlBhZ2VDbGllbnQuaCIKKyNpbmNsdWRlICJQYWdlQ2xpZW50UXQu
aCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJJbnRSZWN0LmgiCkBAIC00Niw5MyArNDYsMjMgQEAKICNlbmRpZgogI2luY2x1
ZGUgPFNldHRpbmdzLmg+CiAKLS8vIHRoZSBvdmVybGF5IGlzIGhlcmUgZm9yIG9uZSByZWFzb24g
b25seTogdG8gaGF2ZSB0aGUgc2Nyb2xsLWJhcnMgYW5kIG90aGVyCi0vLyBleHRyYSBVSSBlbGVt
ZW50cyBhcHBlYXIgb24gdG9wIG9mIGFueSBRR3JhcGhpY3NJdGVtcyBjcmVhdGVkIGJ5IENTUyBj
b21wb3NpdGluZyBsYXllcnMKLWNsYXNzIFFHcmFwaGljc1dlYlZpZXdPdmVybGF5IDogcHVibGlj
IFFHcmFwaGljc0l0ZW0gewotICAgIHB1YmxpYzoKLSAgICBRR3JhcGhpY3NXZWJWaWV3T3Zlcmxh
eShRR3JhcGhpY3NXZWJWaWV3KiB2aWV3KQotICAgICAgICAgICAgOlFHcmFwaGljc0l0ZW0odmll
dykKLSAgICAgICAgICAgICwgcSh2aWV3KQotICAgIHsKLSAgICAgICAgc2V0UG9zKDAsIDApOwot
I2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg0LCA2LCAwKQotICAgICAgICBzZXRG
bGFnKFFHcmFwaGljc0l0ZW06Okl0ZW1Vc2VzRXh0ZW5kZWRTdHlsZU9wdGlvbiwgdHJ1ZSk7Ci0j
ZW5kaWYKLSAgICAgICAgc2V0Q2FjaGVNb2RlKFFHcmFwaGljc0l0ZW06OkRldmljZUNvb3JkaW5h
dGVDYWNoZSk7Ci0gICAgfQotCi0gICAgUVJlY3RGIGJvdW5kaW5nUmVjdCgpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gcS0+Ym91bmRpbmdSZWN0KCk7Ci0gICAgfQotCi0gICAgdm9pZCBw
YWludChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVN0eWxlT3B0aW9uR3JhcGhpY3NJdGVtKiBv
cHRpb25zLCBRV2lkZ2V0KikKLSAgICB7Ci0gICAgICAgIHEtPnBhZ2UoKS0+bWFpbkZyYW1lKCkt
PnJlbmRlcihwYWludGVyLCBzdGF0aWNfY2FzdDxRV2ViRnJhbWU6OlJlbmRlckxheWVyPihRV2Vi
RnJhbWU6OkFsbExheWVycyYoflFXZWJGcmFtZTo6Q29udGVudHNMYXllcikpLCBvcHRpb25zLT5l
eHBvc2VkUmVjdC50b1JlY3QoKSk7Ci0gICAgfQotCi0gICAgZnJpZW5kIGNsYXNzIFFHcmFwaGlj
c1dlYlZpZXc7Ci0gICAgUUdyYXBoaWNzV2ViVmlldyogcTsKLX07Cit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIAotY2xhc3MgUUdyYXBoaWNzV2ViVmlld1ByaXZhdGUgOiBwdWJsaWMgUVdlYlBh
Z2VDbGllbnQgeworY2xhc3MgUUdyYXBoaWNzV2ViVmlld1ByaXZhdGUgewogcHVibGljOgogICAg
IFFHcmFwaGljc1dlYlZpZXdQcml2YXRlKFFHcmFwaGljc1dlYlZpZXcqIHBhcmVudCkKICAgICAg
ICAgOiBxKHBhcmVudCkKICAgICAgICAgLCBwYWdlKDApCi0gICAgICAgICwgcmVzaXplc1RvQ29u
dGVudHMoZmFsc2UpCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgICAgICAs
IHJvb3RHcmFwaGljc0xheWVyKDApCi0gICAgICAgICwgc2hvdWxkU3luYyhmYWxzZSkKLSNlbmRp
ZgotICAgIHsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgICAgIC8vIHRo
ZSBvdmVybGF5IGFuZCBzdGF5cyBhbGl2ZSBmb3IgdGhlIGxpZmV0aW1lIG9mCi0gICAgICAgIC8v
IHRoaXMgUUdyYXBoaWNzV2ViVmlldyBhcyB0aGUgc2Nyb2xsYmFycyBhcmUgbmVlZGVkIHdoZW4g
dGhlcmUncyBubyBjb21wb3NpdGluZwotICAgICAgICBxLT5zZXRGbGFnKFFHcmFwaGljc0l0ZW06
Okl0ZW1Vc2VzRXh0ZW5kZWRTdHlsZU9wdGlvbik7Ci0gICAgICAgIHN5bmNNZXRhTWV0aG9kID0g
cS0+bWV0YU9iamVjdCgpLT5tZXRob2QocS0+bWV0YU9iamVjdCgpLT5pbmRleE9mTWV0aG9kKCJz
eW5jTGF5ZXJzKCkiKSk7Ci0jZW5kaWYKLSAgICB9CisgICAgICAgICwgcmVzaXplc1RvQ29udGVu
dHMoZmFsc2UpIHt9CiAKLSAgICB2aXJ0dWFsIH5RR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZSgpOwot
Ci0gICAgdmlydHVhbCB2b2lkIHNjcm9sbChpbnQgZHgsIGludCBkeSwgY29uc3QgUVJlY3QmKTsK
LSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKGNvbnN0IFFSZWN0JiBkaXJ0eVJlY3QpOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRJbnB1dE1ldGhvZEVuYWJsZWQoYm9vbCBlbmFibGUpOwotICAgIHZpcnR1
YWwgYm9vbCBpbnB1dE1ldGhvZEVuYWJsZWQoKSBjb25zdDsKLSNpZiBRVF9WRVJTSU9OID49IDB4
MDQwNjAwCi0gICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9kSGludChRdDo6SW5wdXRNZXRo
b2RIaW50IGhpbnQsIGJvb2wgZW5hYmxlKTsKLSNlbmRpZgotCi0jaWZuZGVmIFFUX05PX0NVUlNP
UgotICAgIHZpcnR1YWwgUUN1cnNvciBjdXJzb3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlQ3Vyc29yKGNvbnN0IFFDdXJzb3ImIGN1cnNvcik7Ci0jZW5kaWYKLQotICAgIHZpcnR1
YWwgUVBhbGV0dGUgcGFsZXR0ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHNjcmVlbk51bWJl
cigpIGNvbnN0OwotICAgIHZpcnR1YWwgUVdpZGdldCogb3duZXJXaWRnZXQoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIFFSZWN0IGdlb21ldHJ5UmVsYXRpdmVUb093bmVyV2lkZ2V0KCkgY29uc3Q7Ci0K
LSAgICB2aXJ0dWFsIFFPYmplY3QqIHBsdWdpblBhcmVudCgpIGNvbnN0OwotCi0gICAgdmlydHVh
bCBRU3R5bGUqIHN0eWxlKCkgY29uc3Q7CisgICAgdmlydHVhbCB+UUdyYXBoaWNzV2ViVmlld1By
aXZhdGUoKSB7fTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0Um9vdEdyYXBoaWNzTGF5ZXIoUUdyYXBoaWNzSXRlbSogbGF5ZXIpOwotICAg
IHZpcnR1YWwgdm9pZCBtYXJrRm9yU3luYyhib29sIHNjaGVkdWxlU3luYyk7Ci0gICAgdm9pZCB1
cGRhdGVDb21wb3NpdGluZ1Njcm9sbFBvc2l0aW9uKCk7CisgICAgdm9pZCBzeW5jTGF5ZXJzKCk7
CiAjZW5kaWYKIAogICAgIHZvaWQgdXBkYXRlUmVzaXplc1RvQ29udGVudHNGb3JQYWdlKCk7CiAg
ICAgUVJlY3RGIGdyYXBoaWNzSXRlbVZpc2libGVSZWN0KCkgY29uc3Q7Ci0jaWYgRU5BQkxFKFRJ
TEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgdm9pZCB1cGRhdGVUaWxlZEJhY2tpbmdTdG9yZVNjYWxl
KCk7Ci0jZW5kaWYKLQotICAgIHZvaWQgY3JlYXRlT3JEZWxldGVPdmVybGF5KCk7Ci0KLSAgICB2
b2lkIHN5bmNMYXllcnMoKTsKIAogICAgIHZvaWQgdW5zZXRQYWdlSWZFeGlzdHMoKTsKIApAQCAt
MTQ1LDEwMyArNzUsMTggQEAgcHVibGljOgogCiAgICAgUUdyYXBoaWNzV2ViVmlldyogcTsKICAg
ICBRV2ViUGFnZSogcGFnZTsKLQogICAgIGJvb2wgcmVzaXplc1RvQ29udGVudHM7CiAKLSAgICAv
LyB0aGUgb3ZlcmxheSBnZXRzIGluc3RhbnRpYXRlZCB3aGVuIHRoZSByb290IGxheWVyIGlzIGF0
dGFjaGVkLCBhbmQgZ2V0IGRlbGV0ZWQgd2hlbiBpdCdzIGRldGFjaGVkCi0gICAgUVNoYXJlZFBv
aW50ZXI8UUdyYXBoaWNzV2ViVmlld092ZXJsYXk+IG92ZXJsYXk7Ci0KLSAgICAvLyB3ZSBuZWVk
IHRvIHB1dCB0aGUgcm9vdCBncmFwaGljcyBsYXllciBiZWhpbmQgdGhlIG92ZXJsYXkgKHdoaWNo
IGNvbnRhaW5zIHRoZSBzY3JvbGxiYXIpCi0gICAgZW51bSB7IFJvb3RHcmFwaGljc0xheWVyWlZh
bHVlLCBPdmVybGF5WlZhbHVlIH07Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
Ci0gICAgUUdyYXBoaWNzSXRlbSogcm9vdEdyYXBoaWNzTGF5ZXI7Ci0gICAgLy8gd2UgbmVlZCB0
byBzeW5jIHRoZSBsYXllcnMgaWYgd2UgZ2V0IGEgc3BlY2lhbCBjYWxsIGZyb20gdGhlIFdlYkNv
cmUKLSAgICAvLyBjb21wb3NpdG9yIHRlbGxpbmcgdXMgdG8gZG8gc28uIFdlJ2xsIGdldCB0aGF0
IGNhbGwgZnJvbSBDaHJvbWVDbGllbnRRdAotICAgIGJvb2wgc2hvdWxkU3luYzsKLQotICAgIC8v
IHdlIGhhdmUgdG8gZmx1c2ggcXVpdGUgb2Z0ZW4sIHNvIHdlIHVzZSBhIG1ldGEtbWV0aG9kIGlu
c3RlYWQgb2YgUVRpbWVyOjpzaW5nbGVTaG90IGZvciBwdXR0aW5nIHRoZSBldmVudCBpbiB0aGUg
cXVldWUKLSAgICBRTWV0YU1ldGhvZCBzeW5jTWV0YU1ldGhvZDsKLSNlbmRpZgorICAgIC8vIEp1
c3QgYSBjb252ZW5pZW5jZSB0byBhdm9pZCB1c2luZyBwYWdlLT5jbGllbnQtPm92ZXJsYXkgYWx3
YXlzCisgICAgUVNoYXJlZFBvaW50ZXI8UUdyYXBoaWNzSXRlbU92ZXJsYXk+IG92ZXJsYXk7CiB9
OwogCi1RR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6flFHcmFwaGljc1dlYlZpZXdQcml2YXRlKCkK
LXsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKHJvb3RHcmFwaGlj
c0xheWVyKSB7Ci0gICAgICAgIC8vIHdlIGRvbid0IG5lZWQgdG8gZGVsZXRlIHRoZSByb290IGdy
YXBoaWNzIGxheWVyCi0gICAgICAgIC8vIFRoZSBsaWZlY3ljbGUgaXMgbWFuYWdlZCBpbiBHcmFw
aGljc0xheWVyUXQuY3BwCi0gICAgICAgIHJvb3RHcmFwaGljc0xheWVyLT5zZXRQYXJlbnRJdGVt
KDApOwotICAgICAgICBxLT5zY2VuZSgpLT5yZW1vdmVJdGVtKHJvb3RHcmFwaGljc0xheWVyKTsK
LSAgICB9Ci0jZW5kaWYKLX0KLQotdm9pZCBRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6Y3JlYXRl
T3JEZWxldGVPdmVybGF5KCkKLXsKLSAgICBib29sIHVzZU92ZXJsYXkgPSBmYWxzZTsKLSAgICBp
ZiAoIXJlc2l6ZXNUb0NvbnRlbnRzKSB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQotICAgICAgICB1c2VPdmVybGF5ID0gdXNlT3ZlcmxheSB8fCByb290R3JhcGhpY3NMYXllcjsK
LSNlbmRpZgotI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotICAgICAgICB1c2VPdmVy
bGF5ID0gdXNlT3ZlcmxheSB8fCBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKHEtPnBhZ2UoKS0+bWFp
bkZyYW1lKCkpLT50aWxlZEJhY2tpbmdTdG9yZSgpOwotI2VuZGlmCi0gICAgfQotICAgIGlmICh1
c2VPdmVybGF5ID09ICEhb3ZlcmxheSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICh1c2VPdmVy
bGF5KSB7Ci0gICAgICAgIG92ZXJsYXkgPSBRU2hhcmVkUG9pbnRlcjxRR3JhcGhpY3NXZWJWaWV3
T3ZlcmxheT4obmV3IFFHcmFwaGljc1dlYlZpZXdPdmVybGF5KHEpKTsKLSAgICAgICAgb3Zlcmxh
eS0+c2V0WlZhbHVlKE92ZXJsYXlaVmFsdWUpOwotICAgIH0gZWxzZQotICAgICAgICBvdmVybGF5
LmNsZWFyKCk7Ci19Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi12b2lkIFFH
cmFwaGljc1dlYlZpZXdQcml2YXRlOjpzZXRSb290R3JhcGhpY3NMYXllcihRR3JhcGhpY3NJdGVt
KiBsYXllcikKLXsKLSAgICBpZiAocm9vdEdyYXBoaWNzTGF5ZXIpIHsKLSAgICAgICAgcm9vdEdy
YXBoaWNzTGF5ZXItPnNldFBhcmVudEl0ZW0oMCk7Ci0gICAgICAgIHEtPnNjZW5lKCktPnJlbW92
ZUl0ZW0ocm9vdEdyYXBoaWNzTGF5ZXIpOwotICAgICAgICBRV2ViRnJhbWVQcml2YXRlOjpjb3Jl
KHEtPnBhZ2UoKS0+bWFpbkZyYW1lKCkpLT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0YXRlUmVj
dXJzaXZlKCk7Ci0gICAgfQotCi0gICAgcm9vdEdyYXBoaWNzTGF5ZXIgPSBsYXllcjsKLQotICAg
IGlmIChsYXllcikgewotICAgICAgICBsYXllci0+c2V0RmxhZyhRR3JhcGhpY3NJdGVtOjpJdGVt
Q2xpcHNDaGlsZHJlblRvU2hhcGUsIHRydWUpOwotICAgICAgICBsYXllci0+c2V0UGFyZW50SXRl
bShxKTsKLSAgICAgICAgbGF5ZXItPnNldFpWYWx1ZShSb290R3JhcGhpY3NMYXllclpWYWx1ZSk7
Ci0gICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nU2Nyb2xsUG9zaXRpb24oKTsKLSAgICB9Ci0gICAg
Y3JlYXRlT3JEZWxldGVPdmVybGF5KCk7Ci19Ci0KLXZvaWQgUUdyYXBoaWNzV2ViVmlld1ByaXZh
dGU6Om1hcmtGb3JTeW5jKGJvb2wgc2NoZWR1bGVTeW5jKQotewotICAgIHNob3VsZFN5bmMgPSB0
cnVlOwotICAgIGlmIChzY2hlZHVsZVN5bmMpCi0gICAgICAgIHN5bmNNZXRhTWV0aG9kLmludm9r
ZShxLCBRdDo6UXVldWVkQ29ubmVjdGlvbik7Ci19Ci0KLXZvaWQgUUdyYXBoaWNzV2ViVmlld1By
aXZhdGU6OnVwZGF0ZUNvbXBvc2l0aW5nU2Nyb2xsUG9zaXRpb24oKQotewotICAgIGlmIChyb290
R3JhcGhpY3NMYXllciAmJiBxLT5wYWdlKCkgJiYgcS0+cGFnZSgpLT5tYWluRnJhbWUoKSkgewot
ICAgICAgICBjb25zdCBRUG9pbnQgc2Nyb2xsUG9zaXRpb24gPSBxLT5wYWdlKCktPm1haW5GcmFt
ZSgpLT5zY3JvbGxQb3NpdGlvbigpOwotICAgICAgICByb290R3JhcGhpY3NMYXllci0+c2V0UG9z
KC1zY3JvbGxQb3NpdGlvbik7Ci0gICAgfQotfQotI2VuZGlmCi0KIHZvaWQgUUdyYXBoaWNzV2Vi
Vmlld1ByaXZhdGU6OnN5bmNMYXllcnMoKQogewotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKLSAgICBpZiAoc2hvdWxkU3luYykgewotICAgICAgICBRV2ViRnJhbWVQcml2YXRlOjpj
b3JlKHEtPnBhZ2UoKS0+bWFpbkZyYW1lKCkpLT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0YXRl
UmVjdXJzaXZlKCk7Ci0gICAgICAgIHNob3VsZFN5bmMgPSBmYWxzZTsKLSAgICB9Ci0jZW5kaWYK
KyAgICBzdGF0aWNfY2FzdDxQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Kj4ocGFnZS0+ZC0+Y2xp
ZW50KS0+c3luY0xheWVycygpOwogfQorI2VuZGlmCiAKIHZvaWQgUUdyYXBoaWNzV2ViVmlld1By
aXZhdGU6Ol9xX2RvTG9hZEZpbmlzaGVkKGJvb2wgc3VjY2VzcykKIHsKQEAgLTI3MiwxMTYgKzEx
Nyw2IEBAIHZvaWQgUUdyYXBoaWNzV2ViVmlld1ByaXZhdGU6Ol9xX3BhZ2VEZXN0cm95ZWQoKQog
ICAgIHEtPnNldFBhZ2UoMCk7CiB9CiAKLXZvaWQgUUdyYXBoaWNzV2ViVmlld1ByaXZhdGU6OnNj
cm9sbChpbnQgZHgsIGludCBkeSwgY29uc3QgUVJlY3QmIHJlY3RUb1Njcm9sbCkKLXsKLSAgICBx
LT5zY3JvbGwocXJlYWwoZHgpLCBxcmVhbChkeSksIFFSZWN0RihyZWN0VG9TY3JvbGwpKTsKLQot
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICB1cGRhdGVDb21wb3NpdGluZ1Nj
cm9sbFBvc2l0aW9uKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBRR3JhcGhpY3NXZWJWaWV3UHJpdmF0
ZTo6dXBkYXRlKGNvbnN0IFFSZWN0ICYgZGlydHlSZWN0KQotewotICAgIHEtPnVwZGF0ZShRUmVj
dEYoZGlydHlSZWN0KSk7Ci0KLSAgICBjcmVhdGVPckRlbGV0ZU92ZXJsYXkoKTsKLSAgICBpZiAo
b3ZlcmxheSkKLSAgICAgICAgb3ZlcmxheS0+dXBkYXRlKFFSZWN0RihkaXJ0eVJlY3QpKTsKLSNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgc3luY0xheWVycygpOwotI2VuZGlm
Ci19Ci0KLQotdm9pZCBRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6c2V0SW5wdXRNZXRob2RFbmFi
bGVkKGJvb2wgZW5hYmxlKQotewotI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg0
LCA2LCAwKQotICAgIHEtPnNldEZsYWcoUUdyYXBoaWNzSXRlbTo6SXRlbUFjY2VwdHNJbnB1dE1l
dGhvZCwgZW5hYmxlKTsKLSNlbmRpZgotfQotCi1ib29sIFFHcmFwaGljc1dlYlZpZXdQcml2YXRl
OjppbnB1dE1ldGhvZEVuYWJsZWQoKSBjb25zdAotewotI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVS
U0lPTl9DSEVDSyg0LCA2LCAwKQotICAgIHJldHVybiBxLT5mbGFncygpICYgUUdyYXBoaWNzSXRl
bTo6SXRlbUFjY2VwdHNJbnB1dE1ldGhvZDsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2Vu
ZGlmCi19Ci0KLSNpZiBRVF9WRVJTSU9OID49IDB4MDQwNjAwCi12b2lkIFFHcmFwaGljc1dlYlZp
ZXdQcml2YXRlOjpzZXRJbnB1dE1ldGhvZEhpbnQoUXQ6OklucHV0TWV0aG9kSGludCBoaW50LCBi
b29sIGVuYWJsZSkKLXsKLSAgICBpZiAoZW5hYmxlKQotICAgICAgICBxLT5zZXRJbnB1dE1ldGhv
ZEhpbnRzKHEtPmlucHV0TWV0aG9kSGludHMoKSB8IGhpbnQpOwotICAgIGVsc2UKLSAgICAgICAg
cS0+c2V0SW5wdXRNZXRob2RIaW50cyhxLT5pbnB1dE1ldGhvZEhpbnRzKCkgJiB+aGludCk7Ci19
Ci0jZW5kaWYKLSNpZm5kZWYgUVRfTk9fQ1VSU09SCi1RQ3Vyc29yIFFHcmFwaGljc1dlYlZpZXdQ
cml2YXRlOjpjdXJzb3IoKSBjb25zdAotewotICAgIHJldHVybiBxLT5jdXJzb3IoKTsKLX0KLQot
dm9pZCBRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6dXBkYXRlQ3Vyc29yKGNvbnN0IFFDdXJzb3Im
IGN1cnNvcikKLXsKLSAgICBxLT5zZXRDdXJzb3IoY3Vyc29yKTsKLX0KLSNlbmRpZgotCi1RUGFs
ZXR0ZSBRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6cGFsZXR0ZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHEtPnBhbGV0dGUoKTsKLX0KLQotaW50IFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjpzY3Jl
ZW5OdW1iZXIoKSBjb25zdAotewotI2lmIGRlZmluZWQoUV9XU19YMTEpCi0gICAgaWYgKFFHcmFw
aGljc1NjZW5lKiBzY2VuZSA9IHEtPnNjZW5lKCkpIHsKLSAgICAgICAgY29uc3QgUUxpc3Q8UUdy
YXBoaWNzVmlldyo+IHZpZXdzID0gc2NlbmUtPnZpZXdzKCk7Ci0KLSAgICAgICAgaWYgKCF2aWV3
cy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gdmlld3MuYXQoMCktPngxMUluZm8oKS5z
Y3JlZW4oKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHJldHVybiAwOwotfQotCi1RV2lkZ2V0KiBR
R3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6b3duZXJXaWRnZXQoKSBjb25zdAotewotICAgIGlmIChR
R3JhcGhpY3NTY2VuZSogc2NlbmUgPSBxLT5zY2VuZSgpKSB7Ci0gICAgICAgIGNvbnN0IFFMaXN0
PFFHcmFwaGljc1ZpZXcqPiB2aWV3cyA9IHNjZW5lLT52aWV3cygpOwotICAgICAgICByZXR1cm4g
dmlld3MudmFsdWUoMCk7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1RUmVjdCBRR3JhcGhp
Y3NXZWJWaWV3UHJpdmF0ZTo6Z2VvbWV0cnlSZWxhdGl2ZVRvT3duZXJXaWRnZXQoKSBjb25zdAot
ewotICAgIGlmICghcS0+c2NlbmUoKSkKLSAgICAgICAgcmV0dXJuIFFSZWN0KCk7Ci0KLSAgICBR
TGlzdDxRR3JhcGhpY3NWaWV3Kj4gdmlld3MgPSBxLT5zY2VuZSgpLT52aWV3cygpOwotICAgIGlm
ICh2aWV3cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBRUmVjdCgpOwotCi0gICAgUUdyYXBo
aWNzVmlldyogdmlldyA9IHZpZXdzLmF0KDApOwotICAgIHJldHVybiB2aWV3LT5tYXBGcm9tU2Nl
bmUocS0+Ym91bmRpbmdSZWN0KCkpLmJvdW5kaW5nUmVjdCgpOwotfQotCi1RT2JqZWN0KiBRR3Jh
cGhpY3NXZWJWaWV3UHJpdmF0ZTo6cGx1Z2luUGFyZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
cTsKLX0KLQotUVN0eWxlKiBRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6c3R5bGUoKSBjb25zdAot
ewotICAgIHJldHVybiBxLT5zdHlsZSgpOwotfQotCiB2b2lkIFFHcmFwaGljc1dlYlZpZXdQcml2
YXRlOjp1cGRhdGVSZXNpemVzVG9Db250ZW50c0ZvclBhZ2UoKQogewogICAgIEFTU0VSVChwYWdl
KTsKQEAgLTQxNCw3ICsxNDksNyBAQCB2b2lkIFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjpfcV9j
b250ZW50c1NpemVDaGFuZ2VkKGNvbnN0IFFTaXplJiBzaXplKQogdm9pZCBRR3JhcGhpY3NXZWJW
aWV3UHJpdmF0ZTo6X3Ffc2NhbGVDaGFuZ2VkKCkKIHsKICNpZiBFTkFCTEUoVElMRURfQkFDS0lO
R19TVE9SRSkKLSAgICB1cGRhdGVUaWxlZEJhY2tpbmdTdG9yZVNjYWxlKCk7CisgICAgc3RhdGlj
X2Nhc3Q8UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldCo+KHBhZ2UtPmQtPmNsaWVudCktPnVwZGF0
ZVRpbGVkQmFja2luZ1N0b3JlU2NhbGUoKTsKICNlbmRpZgogfQogCkBAIC00MzcsMTYgKzE3Miw2
IEBAIFFSZWN0RiBRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6Z3JhcGhpY3NJdGVtVmlzaWJsZVJl
Y3QoKSBjb25zdAogICAgIHJldHVybiBxLT5tYXBSZWN0RnJvbVNjZW5lKFFSZWN0RihRUG9pbnQo
eFBvc2l0aW9uLCB5UG9zaXRpb24pLCB2aWV3c1swXS0+dmlld3BvcnQoKS0+c2l6ZSgpKSk7CiB9
CiAKLSNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKLXZvaWQgUUdyYXBoaWNzV2ViVmll
d1ByaXZhdGU6OnVwZGF0ZVRpbGVkQmFja2luZ1N0b3JlU2NhbGUoKQotewotICAgIFdlYkNvcmU6
OlRpbGVkQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3Jl
KHBhZ2UtPm1haW5GcmFtZSgpKS0+dGlsZWRCYWNraW5nU3RvcmUoKTsKLSAgICBpZiAoIWJhY2tp
bmdTdG9yZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGJhY2tpbmdTdG9yZS0+c2V0Q29udGVudHNT
Y2FsZShxLT5zY2FsZSgpKTsKLX0KLSNlbmRpZgotCiAvKiEKICAgICBcY2xhc3MgUUdyYXBoaWNz
V2ViVmlldwogICAgIFxicmllZiBUaGUgUUdyYXBoaWNzV2ViVmlldyBjbGFzcyBhbGxvd3MgV2Vi
IGNvbnRlbnQgdG8gYmUgYWRkZWQgdG8gYSBHcmFwaGljc1ZpZXcuCkBAIC03MDYsNyArNDMxLDcg
QEAgYm9vbCBRR3JhcGhpY3NXZWJWaWV3OjpldmVudChRRXZlbnQqIGV2ZW50KQogICAgICAgICAg
ICAgICAgIC8vIFdlYkNvcmUuCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEFkZCBhIFFFdmVu
dDo6Q3Vyc29yVW5zZXQgb3Igc2ltaWxhciB0byBRdC4KICAgICAgICAgICAgICAgICBpZiAoY3Vy
c29yKCkuc2hhcGUoKSA9PSBRdDo6QXJyb3dDdXJzb3IpCi0gICAgICAgICAgICAgICAgICAgIGQt
PnJlc2V0Q3Vyc29yKCk7CisgICAgICAgICAgICAgICAgICAgIGQtPnBhZ2UtPmQtPmNsaWVudC0+
cmVzZXRDdXJzb3IoKTsKICAgICAgICAgICAgIH0KICNlbmRpZgogICAgICAgICB9CkBAIC03NTcs
MTAgKzQ4MiwxMSBAQCB2b2lkIFFHcmFwaGljc1dlYlZpZXc6OnNldFBhZ2UoUVdlYlBhZ2UqIHBh
Z2UpCiAgICAgaWYgKCFkLT5wYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBkLT5wYWdlLT5k
LT5jbGllbnQgPSBkOyAvLyBzZXQgdGhlIHBhZ2UgY2xpZW50CisgICAgZC0+cGFnZS0+c2V0Vmll
dyh0aGlzKTsKKyAgICBkLT5vdmVybGF5ID0gc3RhdGljX2Nhc3Q8UGFnZUNsaWVudFFHcmFwaGlj
c1dpZGdldCo+KGQtPnBhZ2UtPmQtPmNsaWVudCktPm92ZXJsYXk7CiAKICAgICBpZiAoZC0+b3Zl
cmxheSkKLSAgICAgICAgZC0+b3ZlcmxheS0+cHJlcGFyZUdlb21ldHJ5Q2hhbmdlKCk7CisgICAg
ICAgIGQtPm92ZXJsYXktPnByZXBhcmVHcmFwaGljc0l0ZW1HZW9tZXRyeUNoYW5nZSgpOwogCiAg
ICAgUVNpemUgc2l6ZSA9IGdlb21ldHJ5KCkuc2l6ZSgpLnRvU2l6ZSgpOwogICAgIHBhZ2UtPnNl
dFZpZXdwb3J0U2l6ZShzaXplKTsKQEAgLTg3MSw3ICs1OTcsNyBAQCBxcmVhbCBRR3JhcGhpY3NX
ZWJWaWV3Ojp6b29tRmFjdG9yKCkgY29uc3QKIHZvaWQgUUdyYXBoaWNzV2ViVmlldzo6dXBkYXRl
R2VvbWV0cnkoKQogewogICAgIGlmIChkLT5vdmVybGF5KQotICAgICAgICBkLT5vdmVybGF5LT5w
cmVwYXJlR2VvbWV0cnlDaGFuZ2UoKTsKKyAgICAgICAgZC0+b3ZlcmxheS0+cHJlcGFyZUdyYXBo
aWNzSXRlbUdlb21ldHJ5Q2hhbmdlKCk7CiAKICAgICBRR3JhcGhpY3NXaWRnZXQ6OnVwZGF0ZUdl
b21ldHJ5KCk7CiAKQEAgLTg4OSw3ICs2MTUsNyBAQCB2b2lkIFFHcmFwaGljc1dlYlZpZXc6OnNl
dEdlb21ldHJ5KGNvbnN0IFFSZWN0RiYgcmVjdCkKICAgICBRR3JhcGhpY3NXaWRnZXQ6OnNldEdl
b21ldHJ5KHJlY3QpOwogCiAgICAgaWYgKGQtPm92ZXJsYXkpCi0gICAgICAgIGQtPm92ZXJsYXkt
PnByZXBhcmVHZW9tZXRyeUNoYW5nZSgpOworICAgICAgICBkLT5vdmVybGF5LT5wcmVwYXJlR3Jh
cGhpY3NJdGVtR2VvbWV0cnlDaGFuZ2UoKTsKIAogICAgIGlmICghZC0+cGFnZSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTEyMyw4ICs4NDksMTAgQEAgdm9pZCBRR3JhcGhpY3NXZWJWaWV3OjpzZXRS
ZXNpemVzVG9Db250ZW50cyhib29sIGVuYWJsZWQpCiAgICAgaWYgKGQtPnJlc2l6ZXNUb0NvbnRl
bnRzID09IGVuYWJsZWQpCiAgICAgICAgIHJldHVybjsKICAgICBkLT5yZXNpemVzVG9Db250ZW50
cyA9IGVuYWJsZWQ7Ci0gICAgaWYgKGQtPnBhZ2UpCisgICAgaWYgKGQtPnBhZ2UpIHsKKyAgICAg
ICAgc3RhdGljX2Nhc3Q8UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldCo+KGQtPnBhZ2UtPmQtPmNs
aWVudCktPnZpZXdSZXNpemVzVG9Db250ZW50cyA9IGVuYWJsZWQ7CiAgICAgICAgIGQtPnVwZGF0
ZVJlc2l6ZXNUb0NvbnRlbnRzRm9yUGFnZSgpOworICAgIH0KIH0KIAogYm9vbCBRR3JhcGhpY3NX
ZWJWaWV3OjpyZXNpemVzVG9Db250ZW50cygpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQv
QXBpL3F3ZWJwYWdlLmNwcCBiL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCmluZGV4IGM3MzVi
MzEuLjM1OTdmMmMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCisrKyBi
L1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCkBAIC05Myw2ICs5Myw3IEBACiAjaW5jbHVkZSA8
UURyYWdNb3ZlRXZlbnQ+CiAjaW5jbHVkZSA8UURyb3BFdmVudD4KICNpbmNsdWRlIDxRRmlsZURp
YWxvZz4KKyNpbmNsdWRlIDxRR3JhcGhpY3NTY2VuZT4KICNpbmNsdWRlIDxRSHR0cFJlcXVlc3RI
ZWFkZXI+CiAjaW5jbHVkZSA8UUlucHV0RGlhbG9nPgogI2luY2x1ZGUgPFFMb2NhbGU+CkBAIC0x
NzI1LDcgKzE3MjYsOCBAQCBRV2ViSGlzdG9yeSAqUVdlYlBhZ2U6Omhpc3RvcnkoKSBjb25zdAog
fQogCiAvKiEKLSAgICBTZXRzIHRoZSBcYSB2aWV3IHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRo
ZSB3ZWIgcGFnZS4KKyAgICBTZXRzIHRoZSBcYSB2aWV3IHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRo
IHRoZSB3ZWIgcGFnZSwKKyAgICBpZiBcYSB2aWV3IGlzIGEgUVdpZGdldCBiYXNlZCBpbnN0YW5j
ZS4KIAogICAgIFxzYSB2aWV3KCkKICovCkBAIC0xNzU0LDYgKzE3NTYsMzMgQEAgdm9pZCBRV2Vi
UGFnZTo6c2V0VmlldyhRV2lkZ2V0KiB2aWV3KQogfQogCiAvKiEKKyAgICBTZXRzIHRoZSBcYSB2
aWV3IHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSB3ZWIgcGFnZSwKKyAgICBpZiBcYSB2aWV3
IGlzIGEgUUdyYXBoaWNzV2lkZ2V0IGJhc2VkIGluc3RhbmNlLgorCisgICAgXHNhIHZpZXcoKQor
Ki8KK3ZvaWQgUVdlYlBhZ2U6OnNldFZpZXcoUUdyYXBoaWNzV2lkZ2V0KiB2aWV3KQoreworICAg
IC8vIE91ciBRV2lkZ2V0IHZpZXcgaXMgdGhlIFFHcmFwaGljc1ZpZXcuCisgICAgUUdyYXBoaWNz
VmlldyogcGFyZW50VmlldyA9ICh2aWV3ID8gdmlldy0+c2NlbmUoKS0+dmlld3MoKS52YWx1ZSgw
KSA6IDApOworCisgICAgaWYgKHRoaXMtPnZpZXcoKSA9PSBwYXJlbnRWaWV3KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBkLT52aWV3ID0gcGFyZW50VmlldzsKKyAgICBzZXRWaWV3cG9ydFNpemUo
dmlldyA/IHZpZXctPnNpemUoKS50b1NpemUoKSA6IFFTaXplKDAsIDApKTsKKworICAgIGlmIChk
LT5jbGllbnQpIHsKKyAgICAgICAgaWYgKCFkLT5jbGllbnQtPmlzUVdpZGdldENsaWVudCgpKQor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldCo+KGQtPmNs
aWVudCktPnZpZXcgPSB2aWV3OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHZp
ZXcpCisgICAgICAgIGQtPmNsaWVudCA9IG5ldyBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0KHZp
ZXcsIHRoaXMpOworfQorCisvKiEKICAgICBSZXR1cm5zIHRoZSB2aWV3IHdpZGdldCB0aGF0IGlz
IGFzc29jaWF0ZWQgd2l0aCB0aGUgd2ViIHBhZ2UuCiAKICAgICBcc2Egc2V0VmlldygpCmRpZmYg
LS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmggYi9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdl
LmgKaW5kZXggYzA4NWZkNy4uNjQ0NzI5YyAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0FwaS9xd2Vi
cGFnZS5oCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaApAQCAtMjcsNiArMjcsNyBAQAog
I2luY2x1ZGUgPFF0Q29yZS9xb2JqZWN0Lmg+CiAjaW5jbHVkZSA8UXRDb3JlL3F1cmwuaD4KICNp
bmNsdWRlIDxRdEd1aS9xd2lkZ2V0Lmg+CisjaW5jbHVkZSA8UXRHdWkvcWdyYXBoaWNzd2lkZ2V0
Lmg+CiAKIFFUX0JFR0lOX05BTUVTUEFDRQogY2xhc3MgUU5ldHdvcmtQcm94eTsKQEAgLTIwMyw2
ICsyMDQsNyBAQCBwdWJsaWM6CiAgICAgUVdlYlNldHRpbmdzICpzZXR0aW5ncygpIGNvbnN0Owog
CiAgICAgdm9pZCBzZXRWaWV3KFFXaWRnZXQgKnZpZXcpOworICAgIHZvaWQgc2V0VmlldyhRR3Jh
cGhpY3NXaWRnZXQgKnZpZXcpOwogICAgIFFXaWRnZXQgKnZpZXcoKSBjb25zdDsKIAogICAgIGJv
b2wgaXNNb2RpZmllZCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0NoYW5nZUxvZyBi
L1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggZDY1YjE4OS4uODFkOTlhZiAxMDA2NDQKLS0tIGEv
V2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0yLDYgKzIs
NjMgQEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBB
ZGQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldCBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4KKyAg
ICAgICAgUUdyYXBoaWNzV2ViVmlld1ByaXZhdGUgZG9lc24ndCBpbmhlcml0IFFXZWJQYWdlQ2xp
ZW50IGFueW1vcmUKKyAgICAgICAgYW5kIHRoZSBuZWVkZWQgZnVuY3Rpb25zIHdlcmUgbW92ZWQg
dG8gdGhpcyBuZXcgUGFnZUNsaWVudCBjbGFzcywKKyAgICAgICAgaW5jbHVkaW5nIFRpbGluZyBh
bmQgQWNjZWxlcmF0ZWQgQ29tcG9zaXRlIHNwZWNpZmljIG9uZXMuCisgICAgICAgIEFsc28gYWRk
IFFXZWJQYWdlOjpzZXRWaWV3KFFHcmFwaGljc1dpZGdldCopLCBtYWtpbmcgUVdlYlBhZ2UKKyAg
ICAgICAgbm93IHJlYWR5IGZvciBRR3JhcGhpY3NXaWRnZXQgYmFzZWQgY3VzdG9tIHZpZXdzLgor
CisgICAgICAgIFtRdF0gUGFnZUNsaWVudFF0IHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGZvciBR
R3JhcGhpY3NXaWRnZXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM3ODY2CisKKyAgICAgICAgKiBBcGkvcWdyYXBoaWNzd2Vidmlldy5jcHA6CisgICAg
ICAgIChRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6UUdyYXBoaWNzV2ViVmlld1ByaXZhdGUpOgor
ICAgICAgICAoUUdyYXBoaWNzV2ViVmlld1ByaXZhdGU6On5RR3JhcGhpY3NXZWJWaWV3UHJpdmF0
ZSk6CisgICAgICAgIChRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6c3luY0xheWVycyk6CisgICAg
ICAgIChRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6X3Ffc2NhbGVDaGFuZ2VkKToKKyAgICAgICAg
KFFHcmFwaGljc1dlYlZpZXc6OmV2ZW50KToKKyAgICAgICAgKFFHcmFwaGljc1dlYlZpZXc6OnNl
dFBhZ2UpOgorICAgICAgICAoUUdyYXBoaWNzV2ViVmlldzo6dXBkYXRlR2VvbWV0cnkpOgorICAg
ICAgICAoUUdyYXBoaWNzV2ViVmlldzo6c2V0R2VvbWV0cnkpOgorICAgICAgICAoUUdyYXBoaWNz
V2ViVmlldzo6c2V0UmVzaXplc1RvQ29udGVudHMpOgorICAgICAgICAqIEFwaS9xd2VicGFnZS5j
cHA6CisgICAgICAgIChRV2ViUGFnZTo6c2V0Vmlldyk6CisgICAgICAgICogQXBpL3F3ZWJwYWdl
Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6On5QYWdlQ2xpZW50UUdyYXBoaWNz
V2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNj
cm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojp1cGRh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6Y3JlYXRl
T3JEZWxldGVPdmVybGF5KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NX
aWRnZXQ6OnN5bmNMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFHcmFwaGlj
c1dpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNs
aWVudFFHcmFwaGljc1dpZGdldDo6bWFya0ZvclN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZUNsaWVudFFHcmFwaGljc1dpZGdldDo6dXBkYXRlQ29tcG9zaXRpbmdTY3JvbGxQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojp1cGRhdGVUaWxl
ZEJhY2tpbmdTdG9yZVNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhp
Y3NXaWRnZXQ6OnNldElucHV0TWV0aG9kRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
Q2xpZW50UUdyYXBoaWNzV2lkZ2V0OjppbnB1dE1ldGhvZEVuYWJsZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2V0SW5wdXRNZXRob2RIaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OmN1cnNvcik6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojp1cGRhdGVDdXJzb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6cGFsZXR0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzY3JlZW5OdW1iZXIp
OgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6b3duZXJXaWRn
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6Z2VvbWV0
cnlSZWxhdGl2ZVRvT3duZXJXaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFH
cmFwaGljc1dpZGdldDo6cGx1Z2luUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGll
bnRRR3JhcGhpY3NXaWRnZXQ6OnN0eWxlKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QYWdl
Q2xpZW50UXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlFHcmFwaGljc0l0ZW1PdmVybGF5OjpwYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OlFHcmFwaGljc0l0ZW1PdmVybGF5Ojpib3VuZGluZ1JlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UUdyYXBoaWNzSXRlbU92ZXJsYXk6OnBhaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlFHcmFwaGljc0l0ZW1PdmVybGF5OjpwcmVwYXJlR3JhcGhpY3NJdGVtR2Vv
bWV0cnlDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdl
dDo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xp
ZW50UUdyYXBoaWNzV2lkZ2V0Ojppc1FXaWRnZXRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6KToKKworMjAxMC0wNC0yMCAgSmVzdXMgU2FuY2hl
ei1QYWxlbmNpYSAgPGplc3VzQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKICAgICAgICAgQWRkIFBhZ2VDbGllbnRRV2lkZ2V0IGltcGxlbWVudGF0
aW9uIGJhc2VkIG9uIHRoZSBvbGQKICAgICAgICAgUVdlYlBhZ2VXaWRnZXRDbGllbnQgdG8gUGFn
ZUNsaWVudFF0IGZpbGVzLiBBbHNvIGZpeAogICAgICAgICBRV2ViUGFnZTo6c2V0VmlldygpIHRv
IHVzZSBQYWdlQ2xpZW50UVdpZGdldC4KZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9QYWdlQ2xpZW50UXQuY3BwIGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGll
bnRRdC5jcHAKaW5kZXggNjExYmFiNy4uYTkwYzQ2OCAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAKKysrIGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1BhZ2VDbGllbnRRdC5jcHAKQEAgLTEwMyw0ICsxMDMsMTk4IEBAIFFTdHlsZSogUGFnZUNs
aWVudFFXaWRnZXQ6OnN0eWxlKCkgY29uc3QKICAgICByZXR1cm4gdmlldy0+c3R5bGUoKTsKIH0K
IAorUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6flBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQo
KQoreworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBpZiAocm9vdEdyYXBo
aWNzTGF5ZXIpIHsKKyAgICAgICAgLy8gd2UgZG9uJ3QgbmVlZCB0byBkZWxldGUgdGhlIHJvb3Qg
Z3JhcGhpY3MgbGF5ZXIKKyAgICAgICAgLy8gVGhlIGxpZmVjeWNsZSBpcyBtYW5hZ2VkIGluIEdy
YXBoaWNzTGF5ZXJRdC5jcHAKKyAgICAgICAgcm9vdEdyYXBoaWNzTGF5ZXItPnNldFBhcmVudEl0
ZW0oMCk7CisgICAgICAgIHZpZXctPnNjZW5lKCktPnJlbW92ZUl0ZW0ocm9vdEdyYXBoaWNzTGF5
ZXIpOworICAgIH0KKyNlbmRpZgorfQorCit2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6
OnNjcm9sbChpbnQgZHgsIGludCBkeSwgY29uc3QgUVJlY3QmIHJlY3RUb1Njcm9sbCkKK3sKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgdXBkYXRlQ29tcG9zaXRpbmdTY3Jv
bGxQb3NpdGlvbigpOworI2VuZGlmCit9CisKK3ZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdl
dDo6dXBkYXRlKGNvbnN0IFFSZWN0ICYgZGlydHlSZWN0KQoreworICAgIGNyZWF0ZU9yRGVsZXRl
T3ZlcmxheSgpOworICAgIGlmIChvdmVybGF5KQorICAgICAgICBvdmVybGF5LT51cGRhdGUoUVJl
Y3RGKGRpcnR5UmVjdCkpOworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBz
eW5jTGF5ZXJzKCk7CisjZW5kaWYKK30KKwordm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0
OjpjcmVhdGVPckRlbGV0ZU92ZXJsYXkoKQoreworICAgIGJvb2wgdXNlT3ZlcmxheSA9IGZhbHNl
OworICAgIGlmICghdmlld1Jlc2l6ZXNUb0NvbnRlbnRzKSB7CisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorICAgICAgICB1c2VPdmVybGF5ID0gdXNlT3ZlcmxheSB8fCByb290R3Jh
cGhpY3NMYXllcjsKKyNlbmRpZgorI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAg
ICAgICB1c2VPdmVybGF5ID0gdXNlT3ZlcmxheSB8fCBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKHBh
Z2UtPm1haW5GcmFtZSgpKS0+dGlsZWRCYWNraW5nU3RvcmUoKTsKKyNlbmRpZgorICAgIH0KKyAg
ICBpZiAodXNlT3ZlcmxheSA9PSAhIW92ZXJsYXkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAo
dXNlT3ZlcmxheSkgeworICAgICAgICBvdmVybGF5ID0gUVNoYXJlZFBvaW50ZXI8UUdyYXBoaWNz
SXRlbU92ZXJsYXk+KG5ldyBRR3JhcGhpY3NJdGVtT3ZlcmxheSh2aWV3LCBwYWdlKSk7CisgICAg
ICAgIG92ZXJsYXktPnNldFpWYWx1ZShPdmVybGF5WlZhbHVlKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgb3ZlcmxheS5jbGVhcigpOworfQorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQordm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzeW5jTGF5ZXJzKCkKK3sKKyAgICBp
ZiAoc2hvdWxkU3luYykgeworICAgICAgICBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKHBhZ2UtPm1h
aW5GcmFtZSgpKS0+dmlldygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZVJlY3Vyc2l2ZSgpOworICAg
ICAgICBzaG91bGRTeW5jID0gZmFsc2U7CisgICAgfQorfQorCit2b2lkIFBhZ2VDbGllbnRRR3Jh
cGhpY3NXaWRnZXQ6OnNldFJvb3RHcmFwaGljc0xheWVyKFFHcmFwaGljc0l0ZW0qIGxheWVyKQor
eworICAgIGlmIChyb290R3JhcGhpY3NMYXllcikgeworICAgICAgICByb290R3JhcGhpY3NMYXll
ci0+c2V0UGFyZW50SXRlbSgwKTsKKyAgICAgICAgdmlldy0+c2NlbmUoKS0+cmVtb3ZlSXRlbShy
b290R3JhcGhpY3NMYXllcik7CisgICAgICAgIFFXZWJGcmFtZVByaXZhdGU6OmNvcmUocGFnZS0+
bWFpbkZyYW1lKCkpLT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0YXRlUmVjdXJzaXZlKCk7Cisg
ICAgfQorCisgICAgcm9vdEdyYXBoaWNzTGF5ZXIgPSBsYXllcjsKKworICAgIGlmIChsYXllcikg
eworICAgICAgICBsYXllci0+c2V0RmxhZyhRR3JhcGhpY3NJdGVtOjpJdGVtQ2xpcHNDaGlsZHJl
blRvU2hhcGUsIHRydWUpOworICAgICAgICBsYXllci0+c2V0UGFyZW50SXRlbSh2aWV3KTsKKyAg
ICAgICAgbGF5ZXItPnNldFpWYWx1ZShSb290R3JhcGhpY3NMYXllclpWYWx1ZSk7CisgICAgICAg
IHVwZGF0ZUNvbXBvc2l0aW5nU2Nyb2xsUG9zaXRpb24oKTsKKyAgICB9CisgICAgY3JlYXRlT3JE
ZWxldGVPdmVybGF5KCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6bWFy
a0ZvclN5bmMoYm9vbCBzY2hlZHVsZVN5bmMpCit7CisgICAgc2hvdWxkU3luYyA9IHRydWU7Cisg
ICAgaWYgKHNjaGVkdWxlU3luYykKKyAgICAgICAgc3luY01ldGFNZXRob2QuaW52b2tlKHZpZXcs
IFF0OjpRdWV1ZWRDb25uZWN0aW9uKTsKK30KKwordm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lk
Z2V0Ojp1cGRhdGVDb21wb3NpdGluZ1Njcm9sbFBvc2l0aW9uKCkKK3sKKyAgICBpZiAocm9vdEdy
YXBoaWNzTGF5ZXIgJiYgcGFnZSAmJiBwYWdlLT5tYWluRnJhbWUoKSkgeworICAgICAgICBjb25z
dCBRUG9pbnQgc2Nyb2xsUG9zaXRpb24gPSBwYWdlLT5tYWluRnJhbWUoKS0+c2Nyb2xsUG9zaXRp
b24oKTsKKyAgICAgICAgcm9vdEdyYXBoaWNzTGF5ZXItPnNldFBvcygtc2Nyb2xsUG9zaXRpb24p
OworICAgIH0KK30KKyNlbmRpZgorCisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCit2
b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnVwZGF0ZVRpbGVkQmFja2luZ1N0b3JlU2Nh
bGUoKQoreworICAgIFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUgPSBR
V2ViRnJhbWVQcml2YXRlOjpjb3JlKHBhZ2UtPm1haW5GcmFtZSgpKS0+dGlsZWRCYWNraW5nU3Rv
cmUoKTsKKyAgICBpZiAoIWJhY2tpbmdTdG9yZSkKKyAgICAgICAgcmV0dXJuOworICAgIGJhY2tp
bmdTdG9yZS0+c2V0Q29udGVudHNTY2FsZSh2aWV3LT5zY2FsZSgpKTsKK30KKyNlbmRpZgorCit2
b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNldElucHV0TWV0aG9kRW5hYmxlZChib29s
IGVuYWJsZSkKK3sKKyNpZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNCwgNiwgMCkK
KyAgICB2aWV3LT5zZXRGbGFnKFFHcmFwaGljc0l0ZW06Okl0ZW1BY2NlcHRzSW5wdXRNZXRob2Qs
IGVuYWJsZSk7CisjZW5kaWYKK30KKworYm9vbCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojpp
bnB1dE1ldGhvZEVuYWJsZWQoKSBjb25zdAoreworI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lP
Tl9DSEVDSyg0LCA2LCAwKQorICAgIHJldHVybiB2aWV3LT5mbGFncygpICYgUUdyYXBoaWNzSXRl
bTo6SXRlbUFjY2VwdHNJbnB1dE1ldGhvZDsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2Vu
ZGlmCit9CisKKyNpZiBRVF9WRVJTSU9OID49IDB4MDQwNjAwCit2b2lkIFBhZ2VDbGllbnRRR3Jh
cGhpY3NXaWRnZXQ6OnNldElucHV0TWV0aG9kSGludChRdDo6SW5wdXRNZXRob2RIaW50IGhpbnQs
IGJvb2wgZW5hYmxlKQoreworICAgIGlmIChlbmFibGUpCisgICAgICAgIHZpZXctPnNldElucHV0
TWV0aG9kSGludHModmlldy0+aW5wdXRNZXRob2RIaW50cygpIHwgaGludCk7CisgICAgZWxzZQor
ICAgICAgICB2aWV3LT5zZXRJbnB1dE1ldGhvZEhpbnRzKHZpZXctPmlucHV0TWV0aG9kSGludHMo
KSAmIH5oaW50KTsKK30KKyNlbmRpZgorCisjaWZuZGVmIFFUX05PX0NVUlNPUgorUUN1cnNvciBQ
YWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpjdXJzb3IoKSBjb25zdAoreworICAgIHJldHVybiB2
aWV3LT5jdXJzb3IoKTsKK30KKwordm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojp1cGRh
dGVDdXJzb3IoY29uc3QgUUN1cnNvciYgY3Vyc29yKQoreworICAgIHZpZXctPnNldEN1cnNvcihj
dXJzb3IpOworfQorI2VuZGlmCisKK1FQYWxldHRlIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6
OnBhbGV0dGUoKSBjb25zdAoreworICAgIHJldHVybiB2aWV3LT5wYWxldHRlKCk7Cit9CisKK2lu
dCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzY3JlZW5OdW1iZXIoKSBjb25zdAoreworI2lm
IGRlZmluZWQoUV9XU19YMTEpCisgICAgaWYgKFFHcmFwaGljc1NjZW5lKiBzY2VuZSA9IHZpZXct
PnNjZW5lKCkpIHsKKyAgICAgICAgY29uc3QgUUxpc3Q8UUdyYXBoaWNzVmlldyo+IHZpZXdzID0g
c2NlbmUtPnZpZXdzKCk7CisKKyAgICAgICAgaWYgKCF2aWV3cy5pc0VtcHR5KCkpCisgICAgICAg
ICAgICByZXR1cm4gdmlld3MuYXQoMCktPngxMUluZm8oKS5zY3JlZW4oKTsKKyAgICB9CisjZW5k
aWYKKworICAgIHJldHVybiAwOworfQorCitRV2lkZ2V0KiBQYWdlQ2xpZW50UUdyYXBoaWNzV2lk
Z2V0Ojpvd25lcldpZGdldCgpIGNvbnN0Cit7CisgICAgaWYgKFFHcmFwaGljc1NjZW5lKiBzY2Vu
ZSA9IHZpZXctPnNjZW5lKCkpIHsKKyAgICAgICAgY29uc3QgUUxpc3Q8UUdyYXBoaWNzVmlldyo+
IHZpZXdzID0gc2NlbmUtPnZpZXdzKCk7CisgICAgICAgIHJldHVybiB2aWV3cy52YWx1ZSgwKTsK
KyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK1FSZWN0IFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRn
ZXQ6Omdlb21ldHJ5UmVsYXRpdmVUb093bmVyV2lkZ2V0KCkgY29uc3QKK3sKKyAgICBpZiAoIXZp
ZXctPnNjZW5lKCkpCisgICAgICAgIHJldHVybiBRUmVjdCgpOworCisgICAgUUxpc3Q8UUdyYXBo
aWNzVmlldyo+IHZpZXdzID0gdmlldy0+c2NlbmUoKS0+dmlld3MoKTsKKyAgICBpZiAodmlld3Mu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gUVJlY3QoKTsKKworICAgIFFHcmFwaGljc1ZpZXcq
IGdyYXBoaWNzVmlldyA9IHZpZXdzLmF0KDApOworICAgIHJldHVybiBncmFwaGljc1ZpZXctPm1h
cEZyb21TY2VuZSh2aWV3LT5ib3VuZGluZ1JlY3QoKSkuYm91bmRpbmdSZWN0KCk7Cit9CisKK1FP
YmplY3QqIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnBsdWdpblBhcmVudCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHZpZXc7Cit9CisKK1FTdHlsZSogUGFnZUNsaWVudFFHcmFwaGljc1dpZGdl
dDo6c3R5bGUoKSBjb25zdAoreworICAgIHJldHVybiB2aWV3LT5zdHlsZSgpOworfQorCisKKwog
fQpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oIGIv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oCmluZGV4IDNmMDk1NjQuLjY3
OTExMDIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQu
aAorKysgYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmgKQEAgLTIxLDEw
ICsyMSwyNyBAQAogI2lmbmRlZiBQYWdlQ2xpZW50UXRfaAogI2RlZmluZSBQYWdlQ2xpZW50UXRf
aAogCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgInF3ZWJmcmFtZS5oIgorI2luY2x1ZGUg
InF3ZWJmcmFtZV9wLmgiCisjaW5jbHVkZSAicXdlYnBhZ2UuaCIKKyNpbmNsdWRlICJxd2VicGFn
ZV9wLmgiCiAjaW5jbHVkZSAiUVdlYlBhZ2VDbGllbnQuaCIKKyNpbmNsdWRlICJUaWxlZEJhY2tp
bmdTdG9yZS5oIgogCisjaW5jbHVkZSA8UXRDb3JlL3FtZXRhb2JqZWN0Lmg+CisjaW5jbHVkZSA8
UXRDb3JlL3FzaGFyZWRwb2ludGVyLmg+CisjaW5jbHVkZSA8UXRHdWkvcWdyYXBoaWNzc2NlbmUu
aD4KKyNpbmNsdWRlIDxRdEd1aS9xZ3JhcGhpY3N2aWV3Lmg+CisjaW5jbHVkZSA8UXRHdWkvcWdy
YXBoaWNzd2lkZ2V0Lmg+CisjaW5jbHVkZSA8UXRHdWkvcXNjcm9sbGJhci5oPgorI2luY2x1ZGUg
PFF0R3VpL3FzdHlsZW9wdGlvbi5oPgogI2luY2x1ZGUgPFF0R3VpL3F3aWRnZXQuaD4KIAorI2lu
Y2x1ZGUgPFNldHRpbmdzLmg+CisKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02Myw1ICs4
MCwxMjIgQEAgcHVibGljOgogICAgIFFXaWRnZXQqIHZpZXc7CiB9OwogCisvLyB0aGUgb3Zlcmxh
eSBpcyBoZXJlIGZvciBvbmUgcmVhc29uIG9ubHk6IHRvIGhhdmUgdGhlIHNjcm9sbC1iYXJzIGFu
ZCBvdGhlcgorLy8gZXh0cmEgVUkgZWxlbWVudHMgYXBwZWFyIG9uIHRvcCBvZiBhbnkgUUdyYXBo
aWNzSXRlbXMgY3JlYXRlZCBieSBDU1MgY29tcG9zaXRpbmcgbGF5ZXJzCitjbGFzcyBRR3JhcGhp
Y3NJdGVtT3ZlcmxheSA6IHB1YmxpYyBRR3JhcGhpY3NJdGVtIHsKKyAgICBwdWJsaWM6CisgICAg
UUdyYXBoaWNzSXRlbU92ZXJsYXkoUUdyYXBoaWNzV2lkZ2V0KiB2aWV3LCBRV2ViUGFnZSogcCkK
KyAgICAgICAgICAgIDpRR3JhcGhpY3NJdGVtKHZpZXcpCisgICAgICAgICAgICAsIHEodmlldykK
KyAgICAgICAgICAgICwgcGFnZShwKQorICAgIHsKKyAgICAgICAgc2V0UG9zKDAsIDApOworI2lm
IFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg0LCA2LCAwKQorICAgICAgICBzZXRGbGFn
KFFHcmFwaGljc0l0ZW06Okl0ZW1Vc2VzRXh0ZW5kZWRTdHlsZU9wdGlvbiwgdHJ1ZSk7CisjZW5k
aWYKKyAgICAgICAgc2V0Q2FjaGVNb2RlKFFHcmFwaGljc0l0ZW06OkRldmljZUNvb3JkaW5hdGVD
YWNoZSk7CisgICAgfQorCisgICAgUVJlY3RGIGJvdW5kaW5nUmVjdCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gcS0+Ym91bmRpbmdSZWN0KCk7CisgICAgfQorCisgICAgdm9pZCBwYWlu
dChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVN0eWxlT3B0aW9uR3JhcGhpY3NJdGVtKiBvcHRp
b25zLCBRV2lkZ2V0KikKKyAgICB7CisgICAgICAgIHBhZ2UtPm1haW5GcmFtZSgpLT5yZW5kZXIo
cGFpbnRlciwgc3RhdGljX2Nhc3Q8UVdlYkZyYW1lOjpSZW5kZXJMYXllcj4oUVdlYkZyYW1lOjpB
bGxMYXllcnMmKH5RV2ViRnJhbWU6OkNvbnRlbnRzTGF5ZXIpKSwgb3B0aW9ucy0+ZXhwb3NlZFJl
Y3QudG9SZWN0KCkpOworICAgIH0KKworICAgIHZvaWQgcHJlcGFyZUdyYXBoaWNzSXRlbUdlb21l
dHJ5Q2hhbmdlKCkKKyAgICB7CisgICAgICAgIHByZXBhcmVHZW9tZXRyeUNoYW5nZSgpOworICAg
IH0KKworICAgIGZyaWVuZCBjbGFzcyBRR3JhcGhpY3NXaWRnZXQ7CisgICAgUUdyYXBoaWNzV2lk
Z2V0KiBxOworICAgIFFXZWJQYWdlKiBwYWdlOworfTsKKworCitjbGFzcyBQYWdlQ2xpZW50UUdy
YXBoaWNzV2lkZ2V0IDogcHVibGljIFFXZWJQYWdlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBQYWdl
Q2xpZW50UUdyYXBoaWNzV2lkZ2V0KFFHcmFwaGljc1dpZGdldCogdiwgUVdlYlBhZ2UqIHApCisg
ICAgICAgIDogdmlldyh2KQorICAgICAgICAsIHBhZ2UocCkKKyAgICAgICAgLCB2aWV3UmVzaXpl
c1RvQ29udGVudHMoZmFsc2UpCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAg
ICAgICAsIHJvb3RHcmFwaGljc0xheWVyKDApCisgICAgICAgICwgc2hvdWxkU3luYyhmYWxzZSkK
KyNlbmRpZgorICAgIHsKKyAgICAgICBRX0FTU0VSVCh2aWV3KTsKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisgICAgICAgIC8vIHRoZSBvdmVybGF5IGFuZCBzdGF5cyBhbGl2ZSBm
b3IgdGhlIGxpZmV0aW1lIG9mCisgICAgICAgIC8vIHRoaXMgUUdyYXBoaWNzV2ViVmlldyBhcyB0
aGUgc2Nyb2xsYmFycyBhcmUgbmVlZGVkIHdoZW4gdGhlcmUncyBubyBjb21wb3NpdGluZworICAg
ICAgICB2aWV3LT5zZXRGbGFnKFFHcmFwaGljc0l0ZW06Okl0ZW1Vc2VzRXh0ZW5kZWRTdHlsZU9w
dGlvbik7CisgICAgICAgIHN5bmNNZXRhTWV0aG9kID0gdmlldy0+bWV0YU9iamVjdCgpLT5tZXRo
b2Qodmlldy0+bWV0YU9iamVjdCgpLT5pbmRleE9mTWV0aG9kKCJzeW5jTGF5ZXJzKCkiKSk7Cisj
ZW5kaWYKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5QYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0KCk7
CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNRV2lkZ2V0Q2xpZW50KCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGwoaW50IGR4LCBpbnQgZHksIGNvbnN0IFFS
ZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZShjb25zdCBRUmVjdCYgZGlydHlSZWN0KTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5wdXRNZXRob2RFbmFibGVkKGJvb2wgZW5hYmxlKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgaW5wdXRNZXRob2RFbmFibGVkKCkgY29uc3Q7CisjaWYgUVRfVkVSU0lP
TiA+PSAweDA0MDYwMAorICAgIHZpcnR1YWwgdm9pZCBzZXRJbnB1dE1ldGhvZEhpbnQoUXQ6Oklu
cHV0TWV0aG9kSGludCBoaW50LCBib29sIGVuYWJsZSk7CisjZW5kaWYKKworI2lmbmRlZiBRVF9O
T19DVVJTT1IKKyAgICB2aXJ0dWFsIFFDdXJzb3IgY3Vyc29yKCkgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZUN1cnNvcihjb25zdCBRQ3Vyc29yJiBjdXJzb3IpOworI2VuZGlmCisKKyAg
ICB2aXJ0dWFsIFFQYWxldHRlIHBhbGV0dGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBzY3Jl
ZW5OdW1iZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFFXaWRnZXQqIG93bmVyV2lkZ2V0KCkgY29u
c3Q7CisgICAgdmlydHVhbCBRUmVjdCBnZW9tZXRyeVJlbGF0aXZlVG9Pd25lcldpZGdldCgpIGNv
bnN0OworCisgICAgdmlydHVhbCBRT2JqZWN0KiBwbHVnaW5QYXJlbnQoKSBjb25zdDsKKworICAg
IHZpcnR1YWwgUVN0eWxlKiBzdHlsZSgpIGNvbnN0OworCisgICAgdm9pZCBjcmVhdGVPckRlbGV0
ZU92ZXJsYXkoKTsKKworI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgIHZvaWQg
dXBkYXRlVGlsZWRCYWNraW5nU3RvcmVTY2FsZSgpOworI2VuZGlmCisKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCisgICAgdmlydHVhbCB2b2lkIHNldFJvb3RHcmFwaGljc0xheWVy
KFFHcmFwaGljc0l0ZW0qIGxheWVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0ZvclN5bmMoYm9v
bCBzY2hlZHVsZVN5bmMpOworICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdTY3JvbGxQb3NpdGlv
bigpOworICAgIHZvaWQgc3luY0xheWVycygpOworI2VuZGlmCisKKyAgICBRR3JhcGhpY3NXaWRn
ZXQqIHZpZXc7CisgICAgUVdlYlBhZ2UqIHBhZ2U7CisgICAgYm9vbCB2aWV3UmVzaXplc1RvQ29u
dGVudHM7CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgUUdyYXBoaWNz
SXRlbSogcm9vdEdyYXBoaWNzTGF5ZXI7CisKKyAgICAvLyB3ZSBoYXZlIHRvIGZsdXNoIHF1aXRl
IG9mdGVuLCBzbyB3ZSB1c2UgYSBtZXRhLW1ldGhvZCBpbnN0ZWFkIG9mIFFUaW1lcjo6c2luZ2xl
U2hvdCBmb3IgcHV0dGluZyB0aGUgZXZlbnQgaW4gdGhlIHF1ZXVlCisgICAgUU1ldGFNZXRob2Qg
c3luY01ldGFNZXRob2Q7CisKKyAgICAvLyB3ZSBuZWVkIHRvIHN5bmMgdGhlIGxheWVycyBpZiB3
ZSBnZXQgYSBzcGVjaWFsIGNhbGwgZnJvbSB0aGUgV2ViQ29yZQorICAgIC8vIGNvbXBvc2l0b3Ig
dGVsbGluZyB1cyB0byBkbyBzby4gV2UnbGwgZ2V0IHRoYXQgY2FsbCBmcm9tIENocm9tZUNsaWVu
dFF0CisgICAgYm9vbCBzaG91bGRTeW5jOworI2VuZGlmCisgICAgLy8gdGhlIG92ZXJsYXkgZ2V0
cyBpbnN0YW50aWF0ZWQgd2hlbiB0aGUgcm9vdCBsYXllciBpcyBhdHRhY2hlZCwgYW5kIGdldCBk
ZWxldGVkIHdoZW4gaXQncyBkZXRhY2hlZAorICAgIFFTaGFyZWRQb2ludGVyPFFHcmFwaGljc0l0
ZW1PdmVybGF5PiBvdmVybGF5OworCisgICAgLy8gd2UgbmVlZCB0byBwdXQgdGhlIHJvb3QgZ3Jh
cGhpY3MgbGF5ZXIgYmVoaW5kIHRoZSBvdmVybGF5ICh3aGljaCBjb250YWlucyB0aGUgc2Nyb2xs
YmFyKQorICAgIGVudW0geyBSb290R3JhcGhpY3NMYXllclpWYWx1ZSwgT3ZlcmxheVpWYWx1ZSB9
OworfTsKKwogfQogI2VuZGlmIC8vIFBhZ2VDbGllbnRRdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53884</attachid>
            <date>2010-04-20 15:00:00 -0700</date>
            <delta_ts>2010-05-08 23:09:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-37866-20100420190227.patch</filename>
            <type>text/plain</type>
            <size>27528</size>
            <attacher name="Jesus Sanchez-Palencia">jesus</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcWdyYXBoaWNzd2Vidmlldy5jcHAgYi9XZWJLaXQv
cXQvQXBpL3FncmFwaGljc3dlYnZpZXcuY3BwCmluZGV4IDkxOWExMGEuLjQ2YTNmNjEgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9xdC9BcGkvcWdyYXBoaWNzd2Vidmlldy5jcHAKKysrIGIvV2ViS2l0L3F0
L0FwaS9xZ3JhcGhpY3N3ZWJ2aWV3LmNwcApAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgInF3
ZWJmcmFtZV9wLmgiCiAjaW5jbHVkZSAicXdlYnBhZ2UuaCIKICNpbmNsdWRlICJxd2VicGFnZV9w
LmgiCi0jaW5jbHVkZSAiUVdlYlBhZ2VDbGllbnQuaCIKKyNpbmNsdWRlICJQYWdlQ2xpZW50UXQu
aCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJJbnRSZWN0LmgiCkBAIC00Niw5MyArNDYsMjMgQEAKICNlbmRpZgogI2luY2x1
ZGUgPFNldHRpbmdzLmg+CiAKLS8vIHRoZSBvdmVybGF5IGlzIGhlcmUgZm9yIG9uZSByZWFzb24g
b25seTogdG8gaGF2ZSB0aGUgc2Nyb2xsLWJhcnMgYW5kIG90aGVyCi0vLyBleHRyYSBVSSBlbGVt
ZW50cyBhcHBlYXIgb24gdG9wIG9mIGFueSBRR3JhcGhpY3NJdGVtcyBjcmVhdGVkIGJ5IENTUyBj
b21wb3NpdGluZyBsYXllcnMKLWNsYXNzIFFHcmFwaGljc1dlYlZpZXdPdmVybGF5IDogcHVibGlj
IFFHcmFwaGljc0l0ZW0gewotICAgIHB1YmxpYzoKLSAgICBRR3JhcGhpY3NXZWJWaWV3T3Zlcmxh
eShRR3JhcGhpY3NXZWJWaWV3KiB2aWV3KQotICAgICAgICAgICAgOlFHcmFwaGljc0l0ZW0odmll
dykKLSAgICAgICAgICAgICwgcSh2aWV3KQotICAgIHsKLSAgICAgICAgc2V0UG9zKDAsIDApOwot
I2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg0LCA2LCAwKQotICAgICAgICBzZXRG
bGFnKFFHcmFwaGljc0l0ZW06Okl0ZW1Vc2VzRXh0ZW5kZWRTdHlsZU9wdGlvbiwgdHJ1ZSk7Ci0j
ZW5kaWYKLSAgICAgICAgc2V0Q2FjaGVNb2RlKFFHcmFwaGljc0l0ZW06OkRldmljZUNvb3JkaW5h
dGVDYWNoZSk7Ci0gICAgfQotCi0gICAgUVJlY3RGIGJvdW5kaW5nUmVjdCgpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gcS0+Ym91bmRpbmdSZWN0KCk7Ci0gICAgfQotCi0gICAgdm9pZCBw
YWludChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVN0eWxlT3B0aW9uR3JhcGhpY3NJdGVtKiBv
cHRpb25zLCBRV2lkZ2V0KikKLSAgICB7Ci0gICAgICAgIHEtPnBhZ2UoKS0+bWFpbkZyYW1lKCkt
PnJlbmRlcihwYWludGVyLCBzdGF0aWNfY2FzdDxRV2ViRnJhbWU6OlJlbmRlckxheWVyPihRV2Vi
RnJhbWU6OkFsbExheWVycyYoflFXZWJGcmFtZTo6Q29udGVudHNMYXllcikpLCBvcHRpb25zLT5l
eHBvc2VkUmVjdC50b1JlY3QoKSk7Ci0gICAgfQotCi0gICAgZnJpZW5kIGNsYXNzIFFHcmFwaGlj
c1dlYlZpZXc7Ci0gICAgUUdyYXBoaWNzV2ViVmlldyogcTsKLX07Cit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIAotY2xhc3MgUUdyYXBoaWNzV2ViVmlld1ByaXZhdGUgOiBwdWJsaWMgUVdlYlBh
Z2VDbGllbnQgeworY2xhc3MgUUdyYXBoaWNzV2ViVmlld1ByaXZhdGUgewogcHVibGljOgogICAg
IFFHcmFwaGljc1dlYlZpZXdQcml2YXRlKFFHcmFwaGljc1dlYlZpZXcqIHBhcmVudCkKICAgICAg
ICAgOiBxKHBhcmVudCkKICAgICAgICAgLCBwYWdlKDApCi0gICAgICAgICwgcmVzaXplc1RvQ29u
dGVudHMoZmFsc2UpCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgICAgICAs
IHJvb3RHcmFwaGljc0xheWVyKDApCi0gICAgICAgICwgc2hvdWxkU3luYyhmYWxzZSkKLSNlbmRp
ZgotICAgIHsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgICAgIC8vIHRo
ZSBvdmVybGF5IGFuZCBzdGF5cyBhbGl2ZSBmb3IgdGhlIGxpZmV0aW1lIG9mCi0gICAgICAgIC8v
IHRoaXMgUUdyYXBoaWNzV2ViVmlldyBhcyB0aGUgc2Nyb2xsYmFycyBhcmUgbmVlZGVkIHdoZW4g
dGhlcmUncyBubyBjb21wb3NpdGluZwotICAgICAgICBxLT5zZXRGbGFnKFFHcmFwaGljc0l0ZW06
Okl0ZW1Vc2VzRXh0ZW5kZWRTdHlsZU9wdGlvbik7Ci0gICAgICAgIHN5bmNNZXRhTWV0aG9kID0g
cS0+bWV0YU9iamVjdCgpLT5tZXRob2QocS0+bWV0YU9iamVjdCgpLT5pbmRleE9mTWV0aG9kKCJz
eW5jTGF5ZXJzKCkiKSk7Ci0jZW5kaWYKLSAgICB9CisgICAgICAgICwgcmVzaXplc1RvQ29udGVu
dHMoZmFsc2UpIHt9CiAKLSAgICB2aXJ0dWFsIH5RR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZSgpOwot
Ci0gICAgdmlydHVhbCB2b2lkIHNjcm9sbChpbnQgZHgsIGludCBkeSwgY29uc3QgUVJlY3QmKTsK
LSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKGNvbnN0IFFSZWN0JiBkaXJ0eVJlY3QpOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRJbnB1dE1ldGhvZEVuYWJsZWQoYm9vbCBlbmFibGUpOwotICAgIHZpcnR1
YWwgYm9vbCBpbnB1dE1ldGhvZEVuYWJsZWQoKSBjb25zdDsKLSNpZiBRVF9WRVJTSU9OID49IDB4
MDQwNjAwCi0gICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9kSGludChRdDo6SW5wdXRNZXRo
b2RIaW50IGhpbnQsIGJvb2wgZW5hYmxlKTsKLSNlbmRpZgotCi0jaWZuZGVmIFFUX05PX0NVUlNP
UgotICAgIHZpcnR1YWwgUUN1cnNvciBjdXJzb3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlQ3Vyc29yKGNvbnN0IFFDdXJzb3ImIGN1cnNvcik7Ci0jZW5kaWYKLQotICAgIHZpcnR1
YWwgUVBhbGV0dGUgcGFsZXR0ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHNjcmVlbk51bWJl
cigpIGNvbnN0OwotICAgIHZpcnR1YWwgUVdpZGdldCogb3duZXJXaWRnZXQoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIFFSZWN0IGdlb21ldHJ5UmVsYXRpdmVUb093bmVyV2lkZ2V0KCkgY29uc3Q7Ci0K
LSAgICB2aXJ0dWFsIFFPYmplY3QqIHBsdWdpblBhcmVudCgpIGNvbnN0OwotCi0gICAgdmlydHVh
bCBRU3R5bGUqIHN0eWxlKCkgY29uc3Q7CisgICAgdmlydHVhbCB+UUdyYXBoaWNzV2ViVmlld1By
aXZhdGUoKSB7fTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0Um9vdEdyYXBoaWNzTGF5ZXIoUUdyYXBoaWNzSXRlbSogbGF5ZXIpOwotICAg
IHZpcnR1YWwgdm9pZCBtYXJrRm9yU3luYyhib29sIHNjaGVkdWxlU3luYyk7Ci0gICAgdm9pZCB1
cGRhdGVDb21wb3NpdGluZ1Njcm9sbFBvc2l0aW9uKCk7CisgICAgdm9pZCBzeW5jTGF5ZXJzKCk7
CiAjZW5kaWYKIAogICAgIHZvaWQgdXBkYXRlUmVzaXplc1RvQ29udGVudHNGb3JQYWdlKCk7CiAg
ICAgUVJlY3RGIGdyYXBoaWNzSXRlbVZpc2libGVSZWN0KCkgY29uc3Q7Ci0jaWYgRU5BQkxFKFRJ
TEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgdm9pZCB1cGRhdGVUaWxlZEJhY2tpbmdTdG9yZVNjYWxl
KCk7Ci0jZW5kaWYKLQotICAgIHZvaWQgY3JlYXRlT3JEZWxldGVPdmVybGF5KCk7Ci0KLSAgICB2
b2lkIHN5bmNMYXllcnMoKTsKIAogICAgIHZvaWQgdW5zZXRQYWdlSWZFeGlzdHMoKTsKIApAQCAt
MTQ1LDEwMyArNzUsMTggQEAgcHVibGljOgogCiAgICAgUUdyYXBoaWNzV2ViVmlldyogcTsKICAg
ICBRV2ViUGFnZSogcGFnZTsKLQogICAgIGJvb2wgcmVzaXplc1RvQ29udGVudHM7CiAKLSAgICAv
LyB0aGUgb3ZlcmxheSBnZXRzIGluc3RhbnRpYXRlZCB3aGVuIHRoZSByb290IGxheWVyIGlzIGF0
dGFjaGVkLCBhbmQgZ2V0IGRlbGV0ZWQgd2hlbiBpdCdzIGRldGFjaGVkCi0gICAgUVNoYXJlZFBv
aW50ZXI8UUdyYXBoaWNzV2ViVmlld092ZXJsYXk+IG92ZXJsYXk7Ci0KLSAgICAvLyB3ZSBuZWVk
IHRvIHB1dCB0aGUgcm9vdCBncmFwaGljcyBsYXllciBiZWhpbmQgdGhlIG92ZXJsYXkgKHdoaWNo
IGNvbnRhaW5zIHRoZSBzY3JvbGxiYXIpCi0gICAgZW51bSB7IFJvb3RHcmFwaGljc0xheWVyWlZh
bHVlLCBPdmVybGF5WlZhbHVlIH07Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
Ci0gICAgUUdyYXBoaWNzSXRlbSogcm9vdEdyYXBoaWNzTGF5ZXI7Ci0gICAgLy8gd2UgbmVlZCB0
byBzeW5jIHRoZSBsYXllcnMgaWYgd2UgZ2V0IGEgc3BlY2lhbCBjYWxsIGZyb20gdGhlIFdlYkNv
cmUKLSAgICAvLyBjb21wb3NpdG9yIHRlbGxpbmcgdXMgdG8gZG8gc28uIFdlJ2xsIGdldCB0aGF0
IGNhbGwgZnJvbSBDaHJvbWVDbGllbnRRdAotICAgIGJvb2wgc2hvdWxkU3luYzsKLQotICAgIC8v
IHdlIGhhdmUgdG8gZmx1c2ggcXVpdGUgb2Z0ZW4sIHNvIHdlIHVzZSBhIG1ldGEtbWV0aG9kIGlu
c3RlYWQgb2YgUVRpbWVyOjpzaW5nbGVTaG90IGZvciBwdXR0aW5nIHRoZSBldmVudCBpbiB0aGUg
cXVldWUKLSAgICBRTWV0YU1ldGhvZCBzeW5jTWV0YU1ldGhvZDsKLSNlbmRpZgorICAgIC8vIEp1
c3QgYSBjb252ZW5pZW5jZSB0byBhdm9pZCB1c2luZyBwYWdlLT5jbGllbnQtPm92ZXJsYXkgYWx3
YXlzCisgICAgUVNoYXJlZFBvaW50ZXI8UUdyYXBoaWNzSXRlbU92ZXJsYXk+IG92ZXJsYXk7CiB9
OwogCi1RR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6flFHcmFwaGljc1dlYlZpZXdQcml2YXRlKCkK
LXsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKHJvb3RHcmFwaGlj
c0xheWVyKSB7Ci0gICAgICAgIC8vIHdlIGRvbid0IG5lZWQgdG8gZGVsZXRlIHRoZSByb290IGdy
YXBoaWNzIGxheWVyCi0gICAgICAgIC8vIFRoZSBsaWZlY3ljbGUgaXMgbWFuYWdlZCBpbiBHcmFw
aGljc0xheWVyUXQuY3BwCi0gICAgICAgIHJvb3RHcmFwaGljc0xheWVyLT5zZXRQYXJlbnRJdGVt
KDApOwotICAgICAgICBxLT5zY2VuZSgpLT5yZW1vdmVJdGVtKHJvb3RHcmFwaGljc0xheWVyKTsK
LSAgICB9Ci0jZW5kaWYKLX0KLQotdm9pZCBRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6Y3JlYXRl
T3JEZWxldGVPdmVybGF5KCkKLXsKLSAgICBib29sIHVzZU92ZXJsYXkgPSBmYWxzZTsKLSAgICBp
ZiAoIXJlc2l6ZXNUb0NvbnRlbnRzKSB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQotICAgICAgICB1c2VPdmVybGF5ID0gdXNlT3ZlcmxheSB8fCByb290R3JhcGhpY3NMYXllcjsK
LSNlbmRpZgotI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotICAgICAgICB1c2VPdmVy
bGF5ID0gdXNlT3ZlcmxheSB8fCBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKHEtPnBhZ2UoKS0+bWFp
bkZyYW1lKCkpLT50aWxlZEJhY2tpbmdTdG9yZSgpOwotI2VuZGlmCi0gICAgfQotICAgIGlmICh1
c2VPdmVybGF5ID09ICEhb3ZlcmxheSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICh1c2VPdmVy
bGF5KSB7Ci0gICAgICAgIG92ZXJsYXkgPSBRU2hhcmVkUG9pbnRlcjxRR3JhcGhpY3NXZWJWaWV3
T3ZlcmxheT4obmV3IFFHcmFwaGljc1dlYlZpZXdPdmVybGF5KHEpKTsKLSAgICAgICAgb3Zlcmxh
eS0+c2V0WlZhbHVlKE92ZXJsYXlaVmFsdWUpOwotICAgIH0gZWxzZQotICAgICAgICBvdmVybGF5
LmNsZWFyKCk7Ci19Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi12b2lkIFFH
cmFwaGljc1dlYlZpZXdQcml2YXRlOjpzZXRSb290R3JhcGhpY3NMYXllcihRR3JhcGhpY3NJdGVt
KiBsYXllcikKLXsKLSAgICBpZiAocm9vdEdyYXBoaWNzTGF5ZXIpIHsKLSAgICAgICAgcm9vdEdy
YXBoaWNzTGF5ZXItPnNldFBhcmVudEl0ZW0oMCk7Ci0gICAgICAgIHEtPnNjZW5lKCktPnJlbW92
ZUl0ZW0ocm9vdEdyYXBoaWNzTGF5ZXIpOwotICAgICAgICBRV2ViRnJhbWVQcml2YXRlOjpjb3Jl
KHEtPnBhZ2UoKS0+bWFpbkZyYW1lKCkpLT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0YXRlUmVj
dXJzaXZlKCk7Ci0gICAgfQotCi0gICAgcm9vdEdyYXBoaWNzTGF5ZXIgPSBsYXllcjsKLQotICAg
IGlmIChsYXllcikgewotICAgICAgICBsYXllci0+c2V0RmxhZyhRR3JhcGhpY3NJdGVtOjpJdGVt
Q2xpcHNDaGlsZHJlblRvU2hhcGUsIHRydWUpOwotICAgICAgICBsYXllci0+c2V0UGFyZW50SXRl
bShxKTsKLSAgICAgICAgbGF5ZXItPnNldFpWYWx1ZShSb290R3JhcGhpY3NMYXllclpWYWx1ZSk7
Ci0gICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nU2Nyb2xsUG9zaXRpb24oKTsKLSAgICB9Ci0gICAg
Y3JlYXRlT3JEZWxldGVPdmVybGF5KCk7Ci19Ci0KLXZvaWQgUUdyYXBoaWNzV2ViVmlld1ByaXZh
dGU6Om1hcmtGb3JTeW5jKGJvb2wgc2NoZWR1bGVTeW5jKQotewotICAgIHNob3VsZFN5bmMgPSB0
cnVlOwotICAgIGlmIChzY2hlZHVsZVN5bmMpCi0gICAgICAgIHN5bmNNZXRhTWV0aG9kLmludm9r
ZShxLCBRdDo6UXVldWVkQ29ubmVjdGlvbik7Ci19Ci0KLXZvaWQgUUdyYXBoaWNzV2ViVmlld1By
aXZhdGU6OnVwZGF0ZUNvbXBvc2l0aW5nU2Nyb2xsUG9zaXRpb24oKQotewotICAgIGlmIChyb290
R3JhcGhpY3NMYXllciAmJiBxLT5wYWdlKCkgJiYgcS0+cGFnZSgpLT5tYWluRnJhbWUoKSkgewot
ICAgICAgICBjb25zdCBRUG9pbnQgc2Nyb2xsUG9zaXRpb24gPSBxLT5wYWdlKCktPm1haW5GcmFt
ZSgpLT5zY3JvbGxQb3NpdGlvbigpOwotICAgICAgICByb290R3JhcGhpY3NMYXllci0+c2V0UG9z
KC1zY3JvbGxQb3NpdGlvbik7Ci0gICAgfQotfQotI2VuZGlmCi0KIHZvaWQgUUdyYXBoaWNzV2Vi
Vmlld1ByaXZhdGU6OnN5bmNMYXllcnMoKQogewotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKLSAgICBpZiAoc2hvdWxkU3luYykgewotICAgICAgICBRV2ViRnJhbWVQcml2YXRlOjpj
b3JlKHEtPnBhZ2UoKS0+bWFpbkZyYW1lKCkpLT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0YXRl
UmVjdXJzaXZlKCk7Ci0gICAgICAgIHNob3VsZFN5bmMgPSBmYWxzZTsKLSAgICB9Ci0jZW5kaWYK
KyAgICBzdGF0aWNfY2FzdDxQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Kj4ocGFnZS0+ZC0+Y2xp
ZW50KS0+c3luY0xheWVycygpOwogfQorI2VuZGlmCiAKIHZvaWQgUUdyYXBoaWNzV2ViVmlld1By
aXZhdGU6Ol9xX2RvTG9hZEZpbmlzaGVkKGJvb2wgc3VjY2VzcykKIHsKQEAgLTI3MiwxMTYgKzEx
Nyw2IEBAIHZvaWQgUUdyYXBoaWNzV2ViVmlld1ByaXZhdGU6Ol9xX3BhZ2VEZXN0cm95ZWQoKQog
ICAgIHEtPnNldFBhZ2UoMCk7CiB9CiAKLXZvaWQgUUdyYXBoaWNzV2ViVmlld1ByaXZhdGU6OnNj
cm9sbChpbnQgZHgsIGludCBkeSwgY29uc3QgUVJlY3QmIHJlY3RUb1Njcm9sbCkKLXsKLSAgICBx
LT5zY3JvbGwocXJlYWwoZHgpLCBxcmVhbChkeSksIFFSZWN0RihyZWN0VG9TY3JvbGwpKTsKLQot
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICB1cGRhdGVDb21wb3NpdGluZ1Nj
cm9sbFBvc2l0aW9uKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBRR3JhcGhpY3NXZWJWaWV3UHJpdmF0
ZTo6dXBkYXRlKGNvbnN0IFFSZWN0ICYgZGlydHlSZWN0KQotewotICAgIHEtPnVwZGF0ZShRUmVj
dEYoZGlydHlSZWN0KSk7Ci0KLSAgICBjcmVhdGVPckRlbGV0ZU92ZXJsYXkoKTsKLSAgICBpZiAo
b3ZlcmxheSkKLSAgICAgICAgb3ZlcmxheS0+dXBkYXRlKFFSZWN0RihkaXJ0eVJlY3QpKTsKLSNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgc3luY0xheWVycygpOwotI2VuZGlm
Ci19Ci0KLQotdm9pZCBRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6c2V0SW5wdXRNZXRob2RFbmFi
bGVkKGJvb2wgZW5hYmxlKQotewotI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg0
LCA2LCAwKQotICAgIHEtPnNldEZsYWcoUUdyYXBoaWNzSXRlbTo6SXRlbUFjY2VwdHNJbnB1dE1l
dGhvZCwgZW5hYmxlKTsKLSNlbmRpZgotfQotCi1ib29sIFFHcmFwaGljc1dlYlZpZXdQcml2YXRl
OjppbnB1dE1ldGhvZEVuYWJsZWQoKSBjb25zdAotewotI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVS
U0lPTl9DSEVDSyg0LCA2LCAwKQotICAgIHJldHVybiBxLT5mbGFncygpICYgUUdyYXBoaWNzSXRl
bTo6SXRlbUFjY2VwdHNJbnB1dE1ldGhvZDsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2Vu
ZGlmCi19Ci0KLSNpZiBRVF9WRVJTSU9OID49IDB4MDQwNjAwCi12b2lkIFFHcmFwaGljc1dlYlZp
ZXdQcml2YXRlOjpzZXRJbnB1dE1ldGhvZEhpbnQoUXQ6OklucHV0TWV0aG9kSGludCBoaW50LCBi
b29sIGVuYWJsZSkKLXsKLSAgICBpZiAoZW5hYmxlKQotICAgICAgICBxLT5zZXRJbnB1dE1ldGhv
ZEhpbnRzKHEtPmlucHV0TWV0aG9kSGludHMoKSB8IGhpbnQpOwotICAgIGVsc2UKLSAgICAgICAg
cS0+c2V0SW5wdXRNZXRob2RIaW50cyhxLT5pbnB1dE1ldGhvZEhpbnRzKCkgJiB+aGludCk7Ci19
Ci0jZW5kaWYKLSNpZm5kZWYgUVRfTk9fQ1VSU09SCi1RQ3Vyc29yIFFHcmFwaGljc1dlYlZpZXdQ
cml2YXRlOjpjdXJzb3IoKSBjb25zdAotewotICAgIHJldHVybiBxLT5jdXJzb3IoKTsKLX0KLQot
dm9pZCBRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6dXBkYXRlQ3Vyc29yKGNvbnN0IFFDdXJzb3Im
IGN1cnNvcikKLXsKLSAgICBxLT5zZXRDdXJzb3IoY3Vyc29yKTsKLX0KLSNlbmRpZgotCi1RUGFs
ZXR0ZSBRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6cGFsZXR0ZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHEtPnBhbGV0dGUoKTsKLX0KLQotaW50IFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjpzY3Jl
ZW5OdW1iZXIoKSBjb25zdAotewotI2lmIGRlZmluZWQoUV9XU19YMTEpCi0gICAgaWYgKFFHcmFw
aGljc1NjZW5lKiBzY2VuZSA9IHEtPnNjZW5lKCkpIHsKLSAgICAgICAgY29uc3QgUUxpc3Q8UUdy
YXBoaWNzVmlldyo+IHZpZXdzID0gc2NlbmUtPnZpZXdzKCk7Ci0KLSAgICAgICAgaWYgKCF2aWV3
cy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gdmlld3MuYXQoMCktPngxMUluZm8oKS5z
Y3JlZW4oKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHJldHVybiAwOwotfQotCi1RV2lkZ2V0KiBR
R3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6b3duZXJXaWRnZXQoKSBjb25zdAotewotICAgIGlmIChR
R3JhcGhpY3NTY2VuZSogc2NlbmUgPSBxLT5zY2VuZSgpKSB7Ci0gICAgICAgIGNvbnN0IFFMaXN0
PFFHcmFwaGljc1ZpZXcqPiB2aWV3cyA9IHNjZW5lLT52aWV3cygpOwotICAgICAgICByZXR1cm4g
dmlld3MudmFsdWUoMCk7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1RUmVjdCBRR3JhcGhp
Y3NXZWJWaWV3UHJpdmF0ZTo6Z2VvbWV0cnlSZWxhdGl2ZVRvT3duZXJXaWRnZXQoKSBjb25zdAot
ewotICAgIGlmICghcS0+c2NlbmUoKSkKLSAgICAgICAgcmV0dXJuIFFSZWN0KCk7Ci0KLSAgICBR
TGlzdDxRR3JhcGhpY3NWaWV3Kj4gdmlld3MgPSBxLT5zY2VuZSgpLT52aWV3cygpOwotICAgIGlm
ICh2aWV3cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBRUmVjdCgpOwotCi0gICAgUUdyYXBo
aWNzVmlldyogdmlldyA9IHZpZXdzLmF0KDApOwotICAgIHJldHVybiB2aWV3LT5tYXBGcm9tU2Nl
bmUocS0+Ym91bmRpbmdSZWN0KCkpLmJvdW5kaW5nUmVjdCgpOwotfQotCi1RT2JqZWN0KiBRR3Jh
cGhpY3NXZWJWaWV3UHJpdmF0ZTo6cGx1Z2luUGFyZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
cTsKLX0KLQotUVN0eWxlKiBRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6c3R5bGUoKSBjb25zdAot
ewotICAgIHJldHVybiBxLT5zdHlsZSgpOwotfQotCiB2b2lkIFFHcmFwaGljc1dlYlZpZXdQcml2
YXRlOjp1cGRhdGVSZXNpemVzVG9Db250ZW50c0ZvclBhZ2UoKQogewogICAgIEFTU0VSVChwYWdl
KTsKQEAgLTQxNCw3ICsxNDksNyBAQCB2b2lkIFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjpfcV9j
b250ZW50c1NpemVDaGFuZ2VkKGNvbnN0IFFTaXplJiBzaXplKQogdm9pZCBRR3JhcGhpY3NXZWJW
aWV3UHJpdmF0ZTo6X3Ffc2NhbGVDaGFuZ2VkKCkKIHsKICNpZiBFTkFCTEUoVElMRURfQkFDS0lO
R19TVE9SRSkKLSAgICB1cGRhdGVUaWxlZEJhY2tpbmdTdG9yZVNjYWxlKCk7CisgICAgc3RhdGlj
X2Nhc3Q8UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldCo+KHBhZ2UtPmQtPmNsaWVudCktPnVwZGF0
ZVRpbGVkQmFja2luZ1N0b3JlU2NhbGUoKTsKICNlbmRpZgogfQogCkBAIC00MzcsMTYgKzE3Miw2
IEBAIFFSZWN0RiBRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6Z3JhcGhpY3NJdGVtVmlzaWJsZVJl
Y3QoKSBjb25zdAogICAgIHJldHVybiBxLT5tYXBSZWN0RnJvbVNjZW5lKFFSZWN0RihRUG9pbnQo
eFBvc2l0aW9uLCB5UG9zaXRpb24pLCB2aWV3c1swXS0+dmlld3BvcnQoKS0+c2l6ZSgpKSk7CiB9
CiAKLSNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKLXZvaWQgUUdyYXBoaWNzV2ViVmll
d1ByaXZhdGU6OnVwZGF0ZVRpbGVkQmFja2luZ1N0b3JlU2NhbGUoKQotewotICAgIFdlYkNvcmU6
OlRpbGVkQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3Jl
KHBhZ2UtPm1haW5GcmFtZSgpKS0+dGlsZWRCYWNraW5nU3RvcmUoKTsKLSAgICBpZiAoIWJhY2tp
bmdTdG9yZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGJhY2tpbmdTdG9yZS0+c2V0Q29udGVudHNT
Y2FsZShxLT5zY2FsZSgpKTsKLX0KLSNlbmRpZgotCiAvKiEKICAgICBcY2xhc3MgUUdyYXBoaWNz
V2ViVmlldwogICAgIFxicmllZiBUaGUgUUdyYXBoaWNzV2ViVmlldyBjbGFzcyBhbGxvd3MgV2Vi
IGNvbnRlbnQgdG8gYmUgYWRkZWQgdG8gYSBHcmFwaGljc1ZpZXcuCkBAIC03MDYsNyArNDMxLDcg
QEAgYm9vbCBRR3JhcGhpY3NXZWJWaWV3OjpldmVudChRRXZlbnQqIGV2ZW50KQogICAgICAgICAg
ICAgICAgIC8vIFdlYkNvcmUuCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEFkZCBhIFFFdmVu
dDo6Q3Vyc29yVW5zZXQgb3Igc2ltaWxhciB0byBRdC4KICAgICAgICAgICAgICAgICBpZiAoY3Vy
c29yKCkuc2hhcGUoKSA9PSBRdDo6QXJyb3dDdXJzb3IpCi0gICAgICAgICAgICAgICAgICAgIGQt
PnJlc2V0Q3Vyc29yKCk7CisgICAgICAgICAgICAgICAgICAgIGQtPnBhZ2UtPmQtPmNsaWVudC0+
cmVzZXRDdXJzb3IoKTsKICAgICAgICAgICAgIH0KICNlbmRpZgogICAgICAgICB9CkBAIC03NTcs
MTAgKzQ4MiwxMSBAQCB2b2lkIFFHcmFwaGljc1dlYlZpZXc6OnNldFBhZ2UoUVdlYlBhZ2UqIHBh
Z2UpCiAgICAgaWYgKCFkLT5wYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBkLT5wYWdlLT5k
LT5jbGllbnQgPSBkOyAvLyBzZXQgdGhlIHBhZ2UgY2xpZW50CisgICAgZC0+cGFnZS0+c2V0Vmll
dyh0aGlzKTsKKyAgICBkLT5vdmVybGF5ID0gc3RhdGljX2Nhc3Q8UGFnZUNsaWVudFFHcmFwaGlj
c1dpZGdldCo+KGQtPnBhZ2UtPmQtPmNsaWVudCktPm92ZXJsYXk7CiAKICAgICBpZiAoZC0+b3Zl
cmxheSkKLSAgICAgICAgZC0+b3ZlcmxheS0+cHJlcGFyZUdlb21ldHJ5Q2hhbmdlKCk7CisgICAg
ICAgIGQtPm92ZXJsYXktPnByZXBhcmVHcmFwaGljc0l0ZW1HZW9tZXRyeUNoYW5nZSgpOwogCiAg
ICAgUVNpemUgc2l6ZSA9IGdlb21ldHJ5KCkuc2l6ZSgpLnRvU2l6ZSgpOwogICAgIHBhZ2UtPnNl
dFZpZXdwb3J0U2l6ZShzaXplKTsKQEAgLTg3MSw3ICs1OTcsNyBAQCBxcmVhbCBRR3JhcGhpY3NX
ZWJWaWV3Ojp6b29tRmFjdG9yKCkgY29uc3QKIHZvaWQgUUdyYXBoaWNzV2ViVmlldzo6dXBkYXRl
R2VvbWV0cnkoKQogewogICAgIGlmIChkLT5vdmVybGF5KQotICAgICAgICBkLT5vdmVybGF5LT5w
cmVwYXJlR2VvbWV0cnlDaGFuZ2UoKTsKKyAgICAgICAgZC0+b3ZlcmxheS0+cHJlcGFyZUdyYXBo
aWNzSXRlbUdlb21ldHJ5Q2hhbmdlKCk7CiAKICAgICBRR3JhcGhpY3NXaWRnZXQ6OnVwZGF0ZUdl
b21ldHJ5KCk7CiAKQEAgLTg4OSw3ICs2MTUsNyBAQCB2b2lkIFFHcmFwaGljc1dlYlZpZXc6OnNl
dEdlb21ldHJ5KGNvbnN0IFFSZWN0RiYgcmVjdCkKICAgICBRR3JhcGhpY3NXaWRnZXQ6OnNldEdl
b21ldHJ5KHJlY3QpOwogCiAgICAgaWYgKGQtPm92ZXJsYXkpCi0gICAgICAgIGQtPm92ZXJsYXkt
PnByZXBhcmVHZW9tZXRyeUNoYW5nZSgpOworICAgICAgICBkLT5vdmVybGF5LT5wcmVwYXJlR3Jh
cGhpY3NJdGVtR2VvbWV0cnlDaGFuZ2UoKTsKIAogICAgIGlmICghZC0+cGFnZSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTEyMyw4ICs4NDksMTAgQEAgdm9pZCBRR3JhcGhpY3NXZWJWaWV3OjpzZXRS
ZXNpemVzVG9Db250ZW50cyhib29sIGVuYWJsZWQpCiAgICAgaWYgKGQtPnJlc2l6ZXNUb0NvbnRl
bnRzID09IGVuYWJsZWQpCiAgICAgICAgIHJldHVybjsKICAgICBkLT5yZXNpemVzVG9Db250ZW50
cyA9IGVuYWJsZWQ7Ci0gICAgaWYgKGQtPnBhZ2UpCisgICAgaWYgKGQtPnBhZ2UpIHsKKyAgICAg
ICAgc3RhdGljX2Nhc3Q8UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldCo+KGQtPnBhZ2UtPmQtPmNs
aWVudCktPnZpZXdSZXNpemVzVG9Db250ZW50cyA9IGVuYWJsZWQ7CiAgICAgICAgIGQtPnVwZGF0
ZVJlc2l6ZXNUb0NvbnRlbnRzRm9yUGFnZSgpOworICAgIH0KIH0KIAogYm9vbCBRR3JhcGhpY3NX
ZWJWaWV3OjpyZXNpemVzVG9Db250ZW50cygpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQv
QXBpL3F3ZWJwYWdlLmNwcCBiL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCmluZGV4IGM3MzVi
MzEuLjgzNGQ5M2EgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCisrKyBi
L1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCkBAIC05Myw2ICs5Myw3IEBACiAjaW5jbHVkZSA8
UURyYWdNb3ZlRXZlbnQ+CiAjaW5jbHVkZSA8UURyb3BFdmVudD4KICNpbmNsdWRlIDxRRmlsZURp
YWxvZz4KKyNpbmNsdWRlIDxRR3JhcGhpY3NTY2VuZT4KICNpbmNsdWRlIDxRSHR0cFJlcXVlc3RI
ZWFkZXI+CiAjaW5jbHVkZSA8UUlucHV0RGlhbG9nPgogI2luY2x1ZGUgPFFMb2NhbGU+CkBAIC0x
NzI1LDcgKzE3MjYsOCBAQCBRV2ViSGlzdG9yeSAqUVdlYlBhZ2U6Omhpc3RvcnkoKSBjb25zdAog
fQogCiAvKiEKLSAgICBTZXRzIHRoZSBcYSB2aWV3IHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRo
ZSB3ZWIgcGFnZS4KKyAgICBTZXRzIHRoZSBcYSB2aWV3IHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRo
IHRoZSB3ZWIgcGFnZSwKKyAgICBpZiBcYSB2aWV3IGlzIGEgUVdpZGdldCBiYXNlZCBpbnN0YW5j
ZS4KIAogICAgIFxzYSB2aWV3KCkKICovCkBAIC0xNzM0LDIzICsxNzM2LDM5IEBAIHZvaWQgUVdl
YlBhZ2U6OnNldFZpZXcoUVdpZGdldCogdmlldykKICAgICBpZiAodGhpcy0+dmlldygpID09IHZp
ZXcpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIHJlbW92ZSBvbGQgcGFnZSBjbGllbnQsIGlm
IGV4aXN0cy4KKyAgICBkZWxldGUgZC0+Y2xpZW50OworCiAgICAgZC0+dmlldyA9IHZpZXc7CiAg
ICAgc2V0Vmlld3BvcnRTaXplKHZpZXcgPyB2aWV3LT5zaXplKCkgOiBRU2l6ZSgwLCAwKSk7CiAK
LSAgICAvLyBJZiB3ZSBoYXZlIG5vIGNsaWVudCwgd2UgaW5zdGFsbCBhIHNwZWNpYWwgY2xpZW50
IGRlbGVnYXRpbmcKLSAgICAvLyB0aGUgcmVzcG9uc2liaWxpdHkgdG8gdGhlIFFXaWRnZXQuIFRo
aXMgaXMgdGhlIGNvZGUgcGF0aAotICAgIC8vIGhhbmRsaW5nIGEuby4gdGhlICJsZWdhY3kiIFFX
ZWJWaWV3LgotICAgIC8vCi0gICAgLy8gSWYgc3VjaCBhIHNwZWNpYWwgZGVsZWdhdGUgYWxyZWFk
eSBleGlzdCwgd2Ugc3Vic3RpdHV0ZSB0aGUgdmlldy4KKyAgICAvLyBpbnN0YWxsIGEgcGFnZSBj
bGllbnQgZGVsZWdhdGluZyB0aGUgcmVzcG9uc2liaWxpdHkgdG8gdGhlIFFXaWRnZXQuCisgICAg
aWYgKHZpZXcpCisgICAgICAgIGQtPmNsaWVudCA9IG5ldyBQYWdlQ2xpZW50UVdpZGdldCh2aWV3
KTsKK30KIAotICAgIGlmIChkLT5jbGllbnQpIHsKLSAgICAgICAgaWYgKGQtPmNsaWVudC0+aXNR
V2lkZ2V0Q2xpZW50KCkpCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxQYWdlQ2xpZW50UVdpZGdl
dCo+KGQtPmNsaWVudCktPnZpZXcgPSB2aWV3OwotICAgICAgICByZXR1cm47Ci0gICAgfQorLyoh
CisgICAgU2V0cyB0aGUgXGEgdmlldyB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgd2ViIHBh
Z2UsCisgICAgaWYgXGEgdmlldyBpcyBhIFFHcmFwaGljc1dpZGdldCBiYXNlZCBpbnN0YW5jZS4K
IAorICAgIFxzYSB2aWV3KCkKKyovCit2b2lkIFFXZWJQYWdlOjpzZXRWaWV3KFFHcmFwaGljc1dp
ZGdldCogdmlldykKK3sKKyAgICAvLyByZW1vdmUgb2xkIHBhZ2UgY2xpZW50LCBpZiBleGlzdHMu
CisgICAgZGVsZXRlIGQtPmNsaWVudDsKKworI2lmIFFUX1ZFUlNJT04gPCAweDA0MDYwMAorICAg
IGQtPnZpZXcgPSAwOworI2Vsc2UKKyAgICBkLT52aWV3LmNsZWFyKCk7CisjZW5kaWYKKworICAg
IHNldFZpZXdwb3J0U2l6ZSh2aWV3ID8gdmlldy0+c2l6ZSgpLnRvU2l6ZSgpIDogUVNpemUoMCwg
MCkpOworCisgICAgLy8gaW5zdGFsbCBhIHBhZ2UgY2xpZW50IGRlbGVnYXRpbmcgdGhlIHJlc3Bv
bnNpYmlsaXR5IHRvIHRoZSBRV2lkZ2V0LgogICAgIGlmICh2aWV3KQotICAgICAgICBkLT5jbGll
bnQgPSBuZXcgUGFnZUNsaWVudFFXaWRnZXQodmlldyk7CisgICAgICAgIGQtPmNsaWVudCA9IG5l
dyBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0KHZpZXcsIHRoaXMpOwogfQogCiAvKiEKZGlmZiAt
LWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaCBiL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2Uu
aAppbmRleCBjMDg1ZmQ3Li42NDQ3MjljIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJw
YWdlLmgKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oCkBAIC0yNyw2ICsyNyw3IEBACiAj
aW5jbHVkZSA8UXRDb3JlL3FvYmplY3QuaD4KICNpbmNsdWRlIDxRdENvcmUvcXVybC5oPgogI2lu
Y2x1ZGUgPFF0R3VpL3F3aWRnZXQuaD4KKyNpbmNsdWRlIDxRdEd1aS9xZ3JhcGhpY3N3aWRnZXQu
aD4KIAogUVRfQkVHSU5fTkFNRVNQQUNFCiBjbGFzcyBRTmV0d29ya1Byb3h5OwpAQCAtMjAzLDYg
KzIwNCw3IEBAIHB1YmxpYzoKICAgICBRV2ViU2V0dGluZ3MgKnNldHRpbmdzKCkgY29uc3Q7CiAK
ICAgICB2b2lkIHNldFZpZXcoUVdpZGdldCAqdmlldyk7CisgICAgdm9pZCBzZXRWaWV3KFFHcmFw
aGljc1dpZGdldCAqdmlldyk7CiAgICAgUVdpZGdldCAqdmlldygpIGNvbnN0OwogCiAgICAgYm9v
bCBpc01vZGlmaWVkKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIv
V2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCBkNjViMTg5Li42YjhhMWM1IDEwMDY0NAotLS0gYS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTIsNiArMiw0
NSBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCisgICAgICAgIEFk
ZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0IHNwZWNpZmljIGltcGxlbWVudGF0aW9uLgorICAg
ICAgICBRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZSBkb2Vzbid0IGluaGVyaXQgUVdlYlBhZ2VDbGll
bnQgYW55bW9yZQorICAgICAgICBhbmQgdGhlIG5lZWRlZCBmdW5jdGlvbnMgd2VyZSBtb3ZlZCB0
byB0aGlzIG5ldyBQYWdlQ2xpZW50IGNsYXNzLAorICAgICAgICBpbmNsdWRpbmcgVGlsaW5nIGFu
ZCBBY2NlbGVyYXRlZCBDb21wb3NpdGUgc3BlY2lmaWMgb25lcy4KKyAgICAgICAgQWxzbyBhZGQg
UVdlYlBhZ2U6OnNldFZpZXcoUUdyYXBoaWNzV2lkZ2V0KiksIG1ha2luZyBRV2ViUGFnZQorICAg
ICAgICBub3cgcmVhZHkgZm9yIFFHcmFwaGljc1dpZGdldCBiYXNlZCBjdXN0b20gdmlld3MuCisK
KyAgICAgICAgW1F0XSBQYWdlQ2xpZW50UXQgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZm9yIFFH
cmFwaGljc1dpZGdldAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Mzc4NjYKKworICAgICAgICAqIEFwaS9xZ3JhcGhpY3N3ZWJ2aWV3LmNwcDoKKyAgICAg
ICAgKFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjpRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZSk6Cisg
ICAgICAgIChRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6flFHcmFwaGljc1dlYlZpZXdQcml2YXRl
KToKKyAgICAgICAgKFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjpzeW5jTGF5ZXJzKToKKyAgICAg
ICAgKFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjpfcV9zY2FsZUNoYW5nZWQpOgorICAgICAgICAo
UUdyYXBoaWNzV2ViVmlldzo6ZXZlbnQpOgorICAgICAgICAoUUdyYXBoaWNzV2ViVmlldzo6c2V0
UGFnZSk6CisgICAgICAgIChRR3JhcGhpY3NXZWJWaWV3Ojp1cGRhdGVHZW9tZXRyeSk6CisgICAg
ICAgIChRR3JhcGhpY3NXZWJWaWV3OjpzZXRHZW9tZXRyeSk6CisgICAgICAgIChRR3JhcGhpY3NX
ZWJWaWV3OjpzZXRSZXNpemVzVG9Db250ZW50cyk6CisgICAgICAgICogQXBpL3F3ZWJwYWdlLmNw
cDoKKyAgICAgICAgKFFXZWJQYWdlOjpzZXRWaWV3KToKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2Uu
aDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwOiBtb3ZlZCB0aGUg
UVdlYlBhZ2VDbGllbnQgbWV0aG9kcworICAgICAgICByZWltcGxlbWVudGVkIGluIFFHcmFwaGlj
c1dlYlZpZXdQcml2YXRlIHRvIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdy
YXBoaWNzV2lkZ2V0OjpnZW9tZXRyeVJlbGF0aXZlVG9Pd25lcldpZGdldCk6CisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0Lmg6CisgICAgICAgIChXZWJDb3JlOjpRR3JhcGhp
Y3NJdGVtT3ZlcmxheTo6cGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpRR3JhcGhpY3NJdGVtT3Zl
cmxheTo6Ym91bmRpbmdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlFHcmFwaGljc0l0ZW1PdmVy
bGF5OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpRR3JhcGhpY3NJdGVtT3ZlcmxheTo6cHJl
cGFyZUdyYXBoaWNzSXRlbUdlb21ldHJ5Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VD
bGllbnRRR3JhcGhpY3NXaWRnZXQ6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6aXNRV2lkZ2V0Q2xpZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6Oik6CisKKzIwMTAt
MDQtMjAgIEplc3VzIFNhbmNoZXotUGFsZW5jaWEgIDxqZXN1c0B3ZWJraXQub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIEFkZCBQYWdlQ2xpZW50
UVdpZGdldCBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiB0aGUgb2xkCiAgICAgICAgIFFXZWJQYWdl
V2lkZ2V0Q2xpZW50IHRvIFBhZ2VDbGllbnRRdCBmaWxlcy4gQWxzbyBmaXgKICAgICAgICAgUVdl
YlBhZ2U6OnNldFZpZXcoKSB0byB1c2UgUGFnZUNsaWVudFFXaWRnZXQuCmRpZmYgLS1naXQgYS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcCBiL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwCmluZGV4IDYxMWJhYjcuLmE5MGM0NjggMTAwNjQ0
Ci0tLSBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwCisrKyBiL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwCkBAIC0xMDMsNCArMTAzLDE5
OCBAQCBRU3R5bGUqIFBhZ2VDbGllbnRRV2lkZ2V0OjpzdHlsZSgpIGNvbnN0CiAgICAgcmV0dXJu
IHZpZXctPnN0eWxlKCk7CiB9CiAKK1BhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6On5QYWdlQ2xp
ZW50UUdyYXBoaWNzV2lkZ2V0KCkKK3sKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CisgICAgaWYgKHJvb3RHcmFwaGljc0xheWVyKSB7CisgICAgICAgIC8vIHdlIGRvbid0IG5lZWQg
dG8gZGVsZXRlIHRoZSByb290IGdyYXBoaWNzIGxheWVyCisgICAgICAgIC8vIFRoZSBsaWZlY3lj
bGUgaXMgbWFuYWdlZCBpbiBHcmFwaGljc0xheWVyUXQuY3BwCisgICAgICAgIHJvb3RHcmFwaGlj
c0xheWVyLT5zZXRQYXJlbnRJdGVtKDApOworICAgICAgICB2aWV3LT5zY2VuZSgpLT5yZW1vdmVJ
dGVtKHJvb3RHcmFwaGljc0xheWVyKTsKKyAgICB9CisjZW5kaWYKK30KKwordm9pZCBQYWdlQ2xp
ZW50UUdyYXBoaWNzV2lkZ2V0OjpzY3JvbGwoaW50IGR4LCBpbnQgZHksIGNvbnN0IFFSZWN0JiBy
ZWN0VG9TY3JvbGwpCit7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIHVw
ZGF0ZUNvbXBvc2l0aW5nU2Nyb2xsUG9zaXRpb24oKTsKKyNlbmRpZgorfQorCit2b2lkIFBhZ2VD
bGllbnRRR3JhcGhpY3NXaWRnZXQ6OnVwZGF0ZShjb25zdCBRUmVjdCAmIGRpcnR5UmVjdCkKK3sK
KyAgICBjcmVhdGVPckRlbGV0ZU92ZXJsYXkoKTsKKyAgICBpZiAob3ZlcmxheSkKKyAgICAgICAg
b3ZlcmxheS0+dXBkYXRlKFFSZWN0RihkaXJ0eVJlY3QpKTsKKyNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCisgICAgc3luY0xheWVycygpOworI2VuZGlmCit9CisKK3ZvaWQgUGFnZUNs
aWVudFFHcmFwaGljc1dpZGdldDo6Y3JlYXRlT3JEZWxldGVPdmVybGF5KCkKK3sKKyAgICBib29s
IHVzZU92ZXJsYXkgPSBmYWxzZTsKKyAgICBpZiAoIXZpZXdSZXNpemVzVG9Db250ZW50cykgewor
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICAgICAgdXNlT3ZlcmxheSA9IHVz
ZU92ZXJsYXkgfHwgcm9vdEdyYXBoaWNzTGF5ZXI7CisjZW5kaWYKKyNpZiBFTkFCTEUoVElMRURf
QkFDS0lOR19TVE9SRSkKKyAgICAgICAgdXNlT3ZlcmxheSA9IHVzZU92ZXJsYXkgfHwgUVdlYkZy
YW1lUHJpdmF0ZTo6Y29yZShwYWdlLT5tYWluRnJhbWUoKSktPnRpbGVkQmFja2luZ1N0b3JlKCk7
CisjZW5kaWYKKyAgICB9CisgICAgaWYgKHVzZU92ZXJsYXkgPT0gISFvdmVybGF5KQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKHVzZU92ZXJsYXkpIHsKKyAgICAgICAgb3ZlcmxheSA9IFFTaGFy
ZWRQb2ludGVyPFFHcmFwaGljc0l0ZW1PdmVybGF5PihuZXcgUUdyYXBoaWNzSXRlbU92ZXJsYXko
dmlldywgcGFnZSkpOworICAgICAgICBvdmVybGF5LT5zZXRaVmFsdWUoT3ZlcmxheVpWYWx1ZSk7
CisgICAgfSBlbHNlCisgICAgICAgIG92ZXJsYXkuY2xlYXIoKTsKK30KKworI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKK3ZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c3lu
Y0xheWVycygpCit7CisgICAgaWYgKHNob3VsZFN5bmMpIHsKKyAgICAgICAgUVdlYkZyYW1lUHJp
dmF0ZTo6Y29yZShwYWdlLT5tYWluRnJhbWUoKSktPnZpZXcoKS0+c3luY0NvbXBvc2l0aW5nU3Rh
dGVSZWN1cnNpdmUoKTsKKyAgICAgICAgc2hvdWxkU3luYyA9IGZhbHNlOworICAgIH0KK30KKwor
dm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXllcihRR3Jh
cGhpY3NJdGVtKiBsYXllcikKK3sKKyAgICBpZiAocm9vdEdyYXBoaWNzTGF5ZXIpIHsKKyAgICAg
ICAgcm9vdEdyYXBoaWNzTGF5ZXItPnNldFBhcmVudEl0ZW0oMCk7CisgICAgICAgIHZpZXctPnNj
ZW5lKCktPnJlbW92ZUl0ZW0ocm9vdEdyYXBoaWNzTGF5ZXIpOworICAgICAgICBRV2ViRnJhbWVQ
cml2YXRlOjpjb3JlKHBhZ2UtPm1haW5GcmFtZSgpKS0+dmlldygpLT5zeW5jQ29tcG9zaXRpbmdT
dGF0ZVJlY3Vyc2l2ZSgpOworICAgIH0KKworICAgIHJvb3RHcmFwaGljc0xheWVyID0gbGF5ZXI7
CisKKyAgICBpZiAobGF5ZXIpIHsKKyAgICAgICAgbGF5ZXItPnNldEZsYWcoUUdyYXBoaWNzSXRl
bTo6SXRlbUNsaXBzQ2hpbGRyZW5Ub1NoYXBlLCB0cnVlKTsKKyAgICAgICAgbGF5ZXItPnNldFBh
cmVudEl0ZW0odmlldyk7CisgICAgICAgIGxheWVyLT5zZXRaVmFsdWUoUm9vdEdyYXBoaWNzTGF5
ZXJaVmFsdWUpOworICAgICAgICB1cGRhdGVDb21wb3NpdGluZ1Njcm9sbFBvc2l0aW9uKCk7Cisg
ICAgfQorICAgIGNyZWF0ZU9yRGVsZXRlT3ZlcmxheSgpOworfQorCit2b2lkIFBhZ2VDbGllbnRR
R3JhcGhpY3NXaWRnZXQ6Om1hcmtGb3JTeW5jKGJvb2wgc2NoZWR1bGVTeW5jKQoreworICAgIHNo
b3VsZFN5bmMgPSB0cnVlOworICAgIGlmIChzY2hlZHVsZVN5bmMpCisgICAgICAgIHN5bmNNZXRh
TWV0aG9kLmludm9rZSh2aWV3LCBRdDo6UXVldWVkQ29ubmVjdGlvbik7Cit9CisKK3ZvaWQgUGFn
ZUNsaWVudFFHcmFwaGljc1dpZGdldDo6dXBkYXRlQ29tcG9zaXRpbmdTY3JvbGxQb3NpdGlvbigp
Cit7CisgICAgaWYgKHJvb3RHcmFwaGljc0xheWVyICYmIHBhZ2UgJiYgcGFnZS0+bWFpbkZyYW1l
KCkpIHsKKyAgICAgICAgY29uc3QgUVBvaW50IHNjcm9sbFBvc2l0aW9uID0gcGFnZS0+bWFpbkZy
YW1lKCktPnNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgIHJvb3RHcmFwaGljc0xheWVyLT5zZXRQ
b3MoLXNjcm9sbFBvc2l0aW9uKTsKKyAgICB9Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShUSUxF
RF9CQUNLSU5HX1NUT1JFKQordm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojp1cGRhdGVU
aWxlZEJhY2tpbmdTdG9yZVNjYWxlKCkKK3sKKyAgICBXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9y
ZSogYmFja2luZ1N0b3JlID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShwYWdlLT5tYWluRnJhbWUo
KSktPnRpbGVkQmFja2luZ1N0b3JlKCk7CisgICAgaWYgKCFiYWNraW5nU3RvcmUpCisgICAgICAg
IHJldHVybjsKKyAgICBiYWNraW5nU3RvcmUtPnNldENvbnRlbnRzU2NhbGUodmlldy0+c2NhbGUo
KSk7Cit9CisjZW5kaWYKKwordm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzZXRJbnB1
dE1ldGhvZEVuYWJsZWQoYm9vbCBlbmFibGUpCit7CisjaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJT
SU9OX0NIRUNLKDQsIDYsIDApCisgICAgdmlldy0+c2V0RmxhZyhRR3JhcGhpY3NJdGVtOjpJdGVt
QWNjZXB0c0lucHV0TWV0aG9kLCBlbmFibGUpOworI2VuZGlmCit9CisKK2Jvb2wgUGFnZUNsaWVu
dFFHcmFwaGljc1dpZGdldDo6aW5wdXRNZXRob2RFbmFibGVkKCkgY29uc3QKK3sKKyNpZiBRVF9W
RVJTSU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNCwgNiwgMCkKKyAgICByZXR1cm4gdmlldy0+Zmxh
Z3MoKSAmIFFHcmFwaGljc0l0ZW06Okl0ZW1BY2NlcHRzSW5wdXRNZXRob2Q7CisjZWxzZQorICAg
IHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCisjaWYgUVRfVkVSU0lPTiA+PSAweDA0MDYwMAor
dm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzZXRJbnB1dE1ldGhvZEhpbnQoUXQ6Oklu
cHV0TWV0aG9kSGludCBoaW50LCBib29sIGVuYWJsZSkKK3sKKyAgICBpZiAoZW5hYmxlKQorICAg
ICAgICB2aWV3LT5zZXRJbnB1dE1ldGhvZEhpbnRzKHZpZXctPmlucHV0TWV0aG9kSGludHMoKSB8
IGhpbnQpOworICAgIGVsc2UKKyAgICAgICAgdmlldy0+c2V0SW5wdXRNZXRob2RIaW50cyh2aWV3
LT5pbnB1dE1ldGhvZEhpbnRzKCkgJiB+aGludCk7Cit9CisjZW5kaWYKKworI2lmbmRlZiBRVF9O
T19DVVJTT1IKK1FDdXJzb3IgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6Y3Vyc29yKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gdmlldy0+Y3Vyc29yKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudFFH
cmFwaGljc1dpZGdldDo6dXBkYXRlQ3Vyc29yKGNvbnN0IFFDdXJzb3ImIGN1cnNvcikKK3sKKyAg
ICB2aWV3LT5zZXRDdXJzb3IoY3Vyc29yKTsKK30KKyNlbmRpZgorCitRUGFsZXR0ZSBQYWdlQ2xp
ZW50UUdyYXBoaWNzV2lkZ2V0OjpwYWxldHRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdmlldy0+
cGFsZXR0ZSgpOworfQorCitpbnQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2NyZWVuTnVt
YmVyKCkgY29uc3QKK3sKKyNpZiBkZWZpbmVkKFFfV1NfWDExKQorICAgIGlmIChRR3JhcGhpY3NT
Y2VuZSogc2NlbmUgPSB2aWV3LT5zY2VuZSgpKSB7CisgICAgICAgIGNvbnN0IFFMaXN0PFFHcmFw
aGljc1ZpZXcqPiB2aWV3cyA9IHNjZW5lLT52aWV3cygpOworCisgICAgICAgIGlmICghdmlld3Mu
aXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIHZpZXdzLmF0KDApLT54MTFJbmZvKCkuc2Ny
ZWVuKCk7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gMDsKK30KKworUVdpZGdldCogUGFn
ZUNsaWVudFFHcmFwaGljc1dpZGdldDo6b3duZXJXaWRnZXQoKSBjb25zdAoreworICAgIGlmIChR
R3JhcGhpY3NTY2VuZSogc2NlbmUgPSB2aWV3LT5zY2VuZSgpKSB7CisgICAgICAgIGNvbnN0IFFM
aXN0PFFHcmFwaGljc1ZpZXcqPiB2aWV3cyA9IHNjZW5lLT52aWV3cygpOworICAgICAgICByZXR1
cm4gdmlld3MudmFsdWUoMCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitRUmVjdCBQYWdl
Q2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpnZW9tZXRyeVJlbGF0aXZlVG9Pd25lcldpZGdldCgpIGNv
bnN0Cit7CisgICAgaWYgKCF2aWV3LT5zY2VuZSgpKQorICAgICAgICByZXR1cm4gUVJlY3QoKTsK
KworICAgIFFMaXN0PFFHcmFwaGljc1ZpZXcqPiB2aWV3cyA9IHZpZXctPnNjZW5lKCktPnZpZXdz
KCk7CisgICAgaWYgKHZpZXdzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFFSZWN0KCk7CisK
KyAgICBRR3JhcGhpY3NWaWV3KiBncmFwaGljc1ZpZXcgPSB2aWV3cy5hdCgwKTsKKyAgICByZXR1
cm4gZ3JhcGhpY3NWaWV3LT5tYXBGcm9tU2NlbmUodmlldy0+Ym91bmRpbmdSZWN0KCkpLmJvdW5k
aW5nUmVjdCgpOworfQorCitRT2JqZWN0KiBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpwbHVn
aW5QYXJlbnQoKSBjb25zdAoreworICAgIHJldHVybiB2aWV3OworfQorCitRU3R5bGUqIFBhZ2VD
bGllbnRRR3JhcGhpY3NXaWRnZXQ6OnN0eWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdmlldy0+
c3R5bGUoKTsKK30KKworCisKIH0KZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9QYWdlQ2xpZW50UXQuaCBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQu
aAppbmRleCAzZjA5NTY0Li42NzkxMTAyIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvUGFnZUNsaWVudFF0LmgKKysrIGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VD
bGllbnRRdC5oCkBAIC0yMSwxMCArMjEsMjcgQEAKICNpZm5kZWYgUGFnZUNsaWVudFF0X2gKICNk
ZWZpbmUgUGFnZUNsaWVudFF0X2gKIAorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJxd2Vi
ZnJhbWUuaCIKKyNpbmNsdWRlICJxd2ViZnJhbWVfcC5oIgorI2luY2x1ZGUgInF3ZWJwYWdlLmgi
CisjaW5jbHVkZSAicXdlYnBhZ2VfcC5oIgogI2luY2x1ZGUgIlFXZWJQYWdlQ2xpZW50LmgiCisj
aW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmUuaCIKIAorI2luY2x1ZGUgPFF0Q29yZS9xbWV0YW9i
amVjdC5oPgorI2luY2x1ZGUgPFF0Q29yZS9xc2hhcmVkcG9pbnRlci5oPgorI2luY2x1ZGUgPFF0
R3VpL3FncmFwaGljc3NjZW5lLmg+CisjaW5jbHVkZSA8UXRHdWkvcWdyYXBoaWNzdmlldy5oPgor
I2luY2x1ZGUgPFF0R3VpL3FncmFwaGljc3dpZGdldC5oPgorI2luY2x1ZGUgPFF0R3VpL3FzY3Jv
bGxiYXIuaD4KKyNpbmNsdWRlIDxRdEd1aS9xc3R5bGVvcHRpb24uaD4KICNpbmNsdWRlIDxRdEd1
aS9xd2lkZ2V0Lmg+CiAKKyNpbmNsdWRlIDxTZXR0aW5ncy5oPgorCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtNjMsNSArODAsMTIyIEBAIHB1YmxpYzoKICAgICBRV2lkZ2V0KiB2aWV3Owog
fTsKIAorLy8gdGhlIG92ZXJsYXkgaXMgaGVyZSBmb3Igb25lIHJlYXNvbiBvbmx5OiB0byBoYXZl
IHRoZSBzY3JvbGwtYmFycyBhbmQgb3RoZXIKKy8vIGV4dHJhIFVJIGVsZW1lbnRzIGFwcGVhciBv
biB0b3Agb2YgYW55IFFHcmFwaGljc0l0ZW1zIGNyZWF0ZWQgYnkgQ1NTIGNvbXBvc2l0aW5nIGxh
eWVycworY2xhc3MgUUdyYXBoaWNzSXRlbU92ZXJsYXkgOiBwdWJsaWMgUUdyYXBoaWNzSXRlbSB7
CisgICAgcHVibGljOgorICAgIFFHcmFwaGljc0l0ZW1PdmVybGF5KFFHcmFwaGljc1dpZGdldCog
dmlldywgUVdlYlBhZ2UqIHApCisgICAgICAgICAgICA6UUdyYXBoaWNzSXRlbSh2aWV3KQorICAg
ICAgICAgICAgLCBxKHZpZXcpCisgICAgICAgICAgICAsIHBhZ2UocCkKKyAgICB7CisgICAgICAg
IHNldFBvcygwLCAwKTsKKyNpZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNCwgNiwg
MCkKKyAgICAgICAgc2V0RmxhZyhRR3JhcGhpY3NJdGVtOjpJdGVtVXNlc0V4dGVuZGVkU3R5bGVP
cHRpb24sIHRydWUpOworI2VuZGlmCisgICAgICAgIHNldENhY2hlTW9kZShRR3JhcGhpY3NJdGVt
OjpEZXZpY2VDb29yZGluYXRlQ2FjaGUpOworICAgIH0KKworICAgIFFSZWN0RiBib3VuZGluZ1Jl
Y3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHEtPmJvdW5kaW5nUmVjdCgpOworICAg
IH0KKworICAgIHZvaWQgcGFpbnQoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTdHlsZU9wdGlv
bkdyYXBoaWNzSXRlbSogb3B0aW9ucywgUVdpZGdldCopCisgICAgeworICAgICAgICBwYWdlLT5t
YWluRnJhbWUoKS0+cmVuZGVyKHBhaW50ZXIsIHN0YXRpY19jYXN0PFFXZWJGcmFtZTo6UmVuZGVy
TGF5ZXI+KFFXZWJGcmFtZTo6QWxsTGF5ZXJzJih+UVdlYkZyYW1lOjpDb250ZW50c0xheWVyKSks
IG9wdGlvbnMtPmV4cG9zZWRSZWN0LnRvUmVjdCgpKTsKKyAgICB9CisKKyAgICB2b2lkIHByZXBh
cmVHcmFwaGljc0l0ZW1HZW9tZXRyeUNoYW5nZSgpCisgICAgeworICAgICAgICBwcmVwYXJlR2Vv
bWV0cnlDaGFuZ2UoKTsKKyAgICB9CisKKyAgICBmcmllbmQgY2xhc3MgUUdyYXBoaWNzV2lkZ2V0
OworICAgIFFHcmFwaGljc1dpZGdldCogcTsKKyAgICBRV2ViUGFnZSogcGFnZTsKK307CisKKwor
Y2xhc3MgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldCA6IHB1YmxpYyBRV2ViUGFnZUNsaWVudCB7
CitwdWJsaWM6CisgICAgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldChRR3JhcGhpY3NXaWRnZXQq
IHYsIFFXZWJQYWdlKiBwKQorICAgICAgICA6IHZpZXcodikKKyAgICAgICAgLCBwYWdlKHApCisg
ICAgICAgICwgdmlld1Jlc2l6ZXNUb0NvbnRlbnRzKGZhbHNlKQorI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKyAgICAgICAgLCByb290R3JhcGhpY3NMYXllcigwKQorICAgICAgICAs
IHNob3VsZFN5bmMoZmFsc2UpCisjZW5kaWYKKyAgICB7CisgICAgICAgUV9BU1NFUlQodmlldyk7
CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgICAgICAvLyB0aGUgb3Zlcmxh
eSBhbmQgc3RheXMgYWxpdmUgZm9yIHRoZSBsaWZldGltZSBvZgorICAgICAgICAvLyB0aGlzIFFH
cmFwaGljc1dlYlZpZXcgYXMgdGhlIHNjcm9sbGJhcnMgYXJlIG5lZWRlZCB3aGVuIHRoZXJlJ3Mg
bm8gY29tcG9zaXRpbmcKKyAgICAgICAgdmlldy0+c2V0RmxhZyhRR3JhcGhpY3NJdGVtOjpJdGVt
VXNlc0V4dGVuZGVkU3R5bGVPcHRpb24pOworICAgICAgICBzeW5jTWV0YU1ldGhvZCA9IHZpZXct
Pm1ldGFPYmplY3QoKS0+bWV0aG9kKHZpZXctPm1ldGFPYmplY3QoKS0+aW5kZXhPZk1ldGhvZCgi
c3luY0xheWVycygpIikpOworI2VuZGlmCisgICAgfQorCisgICAgdmlydHVhbCB+UGFnZUNsaWVu
dFFHcmFwaGljc1dpZGdldCgpOworCisgICAgdmlydHVhbCBib29sIGlzUVdpZGdldENsaWVudCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsKGludCBk
eCwgaW50IGR5LCBjb25zdCBRUmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoY29uc3Qg
UVJlY3QmIGRpcnR5UmVjdCk7CisgICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9kRW5hYmxl
ZChib29sIGVuYWJsZSk7CisgICAgdmlydHVhbCBib29sIGlucHV0TWV0aG9kRW5hYmxlZCgpIGNv
bnN0OworI2lmIFFUX1ZFUlNJT04gPj0gMHgwNDA2MDAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5w
dXRNZXRob2RIaW50KFF0OjpJbnB1dE1ldGhvZEhpbnQgaGludCwgYm9vbCBlbmFibGUpOworI2Vu
ZGlmCisKKyNpZm5kZWYgUVRfTk9fQ1VSU09SCisgICAgdmlydHVhbCBRQ3Vyc29yIGN1cnNvcigp
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDdXJzb3IoY29uc3QgUUN1cnNvciYgY3Vy
c29yKTsKKyNlbmRpZgorCisgICAgdmlydHVhbCBRUGFsZXR0ZSBwYWxldHRlKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBpbnQgc2NyZWVuTnVtYmVyKCkgY29uc3Q7CisgICAgdmlydHVhbCBRV2lkZ2V0
KiBvd25lcldpZGdldCgpIGNvbnN0OworICAgIHZpcnR1YWwgUVJlY3QgZ2VvbWV0cnlSZWxhdGl2
ZVRvT3duZXJXaWRnZXQoKSBjb25zdDsKKworICAgIHZpcnR1YWwgUU9iamVjdCogcGx1Z2luUGFy
ZW50KCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIFFTdHlsZSogc3R5bGUoKSBjb25zdDsKKworICAg
IHZvaWQgY3JlYXRlT3JEZWxldGVPdmVybGF5KCk7CisKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lO
R19TVE9SRSkKKyAgICB2b2lkIHVwZGF0ZVRpbGVkQmFja2luZ1N0b3JlU2NhbGUoKTsKKyNlbmRp
ZgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIHZpcnR1YWwgdm9pZCBz
ZXRSb290R3JhcGhpY3NMYXllcihRR3JhcGhpY3NJdGVtKiBsYXllcik7CisgICAgdmlydHVhbCB2
b2lkIG1hcmtGb3JTeW5jKGJvb2wgc2NoZWR1bGVTeW5jKTsKKyAgICB2b2lkIHVwZGF0ZUNvbXBv
c2l0aW5nU2Nyb2xsUG9zaXRpb24oKTsKKyAgICB2b2lkIHN5bmNMYXllcnMoKTsKKyNlbmRpZgor
CisgICAgUUdyYXBoaWNzV2lkZ2V0KiB2aWV3OworICAgIFFXZWJQYWdlKiBwYWdlOworICAgIGJv
b2wgdmlld1Jlc2l6ZXNUb0NvbnRlbnRzOworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorICAgIFFHcmFwaGljc0l0ZW0qIHJvb3RHcmFwaGljc0xheWVyOworCisgICAgLy8gd2Ug
aGF2ZSB0byBmbHVzaCBxdWl0ZSBvZnRlbiwgc28gd2UgdXNlIGEgbWV0YS1tZXRob2QgaW5zdGVh
ZCBvZiBRVGltZXI6OnNpbmdsZVNob3QgZm9yIHB1dHRpbmcgdGhlIGV2ZW50IGluIHRoZSBxdWV1
ZQorICAgIFFNZXRhTWV0aG9kIHN5bmNNZXRhTWV0aG9kOworCisgICAgLy8gd2UgbmVlZCB0byBz
eW5jIHRoZSBsYXllcnMgaWYgd2UgZ2V0IGEgc3BlY2lhbCBjYWxsIGZyb20gdGhlIFdlYkNvcmUK
KyAgICAvLyBjb21wb3NpdG9yIHRlbGxpbmcgdXMgdG8gZG8gc28uIFdlJ2xsIGdldCB0aGF0IGNh
bGwgZnJvbSBDaHJvbWVDbGllbnRRdAorICAgIGJvb2wgc2hvdWxkU3luYzsKKyNlbmRpZgorICAg
IC8vIHRoZSBvdmVybGF5IGdldHMgaW5zdGFudGlhdGVkIHdoZW4gdGhlIHJvb3QgbGF5ZXIgaXMg
YXR0YWNoZWQsIGFuZCBnZXQgZGVsZXRlZCB3aGVuIGl0J3MgZGV0YWNoZWQKKyAgICBRU2hhcmVk
UG9pbnRlcjxRR3JhcGhpY3NJdGVtT3ZlcmxheT4gb3ZlcmxheTsKKworICAgIC8vIHdlIG5lZWQg
dG8gcHV0IHRoZSByb290IGdyYXBoaWNzIGxheWVyIGJlaGluZCB0aGUgb3ZlcmxheSAod2hpY2gg
Y29udGFpbnMgdGhlIHNjcm9sbGJhcikKKyAgICBlbnVtIHsgUm9vdEdyYXBoaWNzTGF5ZXJaVmFs
dWUsIE92ZXJsYXlaVmFsdWUgfTsKK307CisKIH0KICNlbmRpZiAvLyBQYWdlQ2xpZW50UXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55014</attachid>
            <date>2010-05-04 06:26:32 -0700</date>
            <delta_ts>2010-05-10 11:10:01 -0700</delta_ts>
            <desc>PageClientQGraphicsWidget</desc>
            <filename>PageClientQGraphicsWidget-with-autotest.patch</filename>
            <type>text/plain</type>
            <size>32771</size>
            <attacher name="Jesus Sanchez-Palencia">jesus</attacher>
            
              <data encoding="base64">RnJvbSBjYzQzMTI0N2ZmOWI2OTMxNzI0ODg5YzJjZDdjMzlkZThjZTQ1ZDAyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKZXN1cyBTYW5jaGV6LVBhbGVuY2lhIDxqZXN1c0B3ZWJraXQu
b3JnPgpEYXRlOiBUdWUsIDIwIEFwciAyMDEwIDE5OjA0OjU4IC0wMzAwClN1YmplY3Q6IFtQQVRD
SF0gQWRkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24u
CiBRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZSBkb2Vzbid0IGluaGVyaXQgUVdlYlBhZ2VDbGllbnQg
YW55bW9yZQogYW5kIHRoZSBuZWVkZWQgZnVuY3Rpb25zIHdlcmUgbW92ZWQgdG8gdGhpcyBuZXcg
UGFnZUNsaWVudCBjbGFzcywKIGluY2x1ZGluZyBUaWxpbmcgYW5kIEFjY2VsZXJhdGVkIENvbXBv
c2l0ZSBzcGVjaWZpYyBvbmVzLgogQWxzbyBhZGQgUVdlYlBhZ2U6OnNldFZpZXcoUUdyYXBoaWNz
V2lkZ2V0KiksIG1ha2luZyBRV2ViUGFnZQogbm93IHJlYWR5IGZvciBRR3JhcGhpY3NXaWRnZXQg
YmFzZWQgY3VzdG9tIHZpZXdzLgoKUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgpbUXRdIFBh
Z2VDbGllbnRRdCBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBmb3IgUUdyYXBoaWNzV2lkZ2V0Cmh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzg2NgoKKiBBcGkvcWdyYXBo
aWNzd2Vidmlldy5jcHA6CihRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6UUdyYXBoaWNzV2ViVmll
d1ByaXZhdGUpOgooUUdyYXBoaWNzV2ViVmlld1ByaXZhdGU6On5RR3JhcGhpY3NXZWJWaWV3UHJp
dmF0ZSk6CihRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6c3luY0xheWVycyk6CihRR3JhcGhpY3NX
ZWJWaWV3UHJpdmF0ZTo6X3Ffc2NhbGVDaGFuZ2VkKToKKFFHcmFwaGljc1dlYlZpZXc6OmV2ZW50
KToKKFFHcmFwaGljc1dlYlZpZXc6OnNldFBhZ2UpOgooUUdyYXBoaWNzV2ViVmlldzo6dXBkYXRl
R2VvbWV0cnkpOgooUUdyYXBoaWNzV2ViVmlldzo6c2V0R2VvbWV0cnkpOgooUUdyYXBoaWNzV2Vi
Vmlldzo6c2V0UmVzaXplc1RvQ29udGVudHMpOgoqIEFwaS9xd2VicGFnZS5jcHA6CihRV2ViUGFn
ZTo6c2V0Vmlldyk6CiogQXBpL3F3ZWJwYWdlLmg6CiogV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVu
dFF0LmNwcDogbW92ZWQgdGhlIFFXZWJQYWdlQ2xpZW50IG1ldGhvZHMKcmVpbXBsZW1lbnRlZCBp
biBRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZSB0byBoZXJlLgooV2ViQ29yZTo6UGFnZUNsaWVudFFH
cmFwaGljc1dpZGdldDo6Z2VvbWV0cnlSZWxhdGl2ZVRvT3duZXJXaWRnZXQpOgoqIFdlYkNvcmVT
dXBwb3J0L1BhZ2VDbGllbnRRdC5oOgooV2ViQ29yZTo6UUdyYXBoaWNzSXRlbU92ZXJsYXk6OnBh
Z2UpOgooV2ViQ29yZTo6UUdyYXBoaWNzSXRlbU92ZXJsYXk6OmJvdW5kaW5nUmVjdCk6CihXZWJD
b3JlOjpRR3JhcGhpY3NJdGVtT3ZlcmxheTo6cGFpbnQpOgooV2ViQ29yZTo6UUdyYXBoaWNzSXRl
bU92ZXJsYXk6OnByZXBhcmVHcmFwaGljc0l0ZW1HZW9tZXRyeUNoYW5nZSk6CihXZWJDb3JlOjpQ
YWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0KToKKFdl
YkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OmlzUVdpZGdldENsaWVudCk6CihXZWJD
b3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjopOgoqIHRlc3RzL3F3ZWJwYWdlL3RzdF9x
d2VicGFnZS5jcHA6CihXaWRnZXQ6OldpZGdldCk6CihXaWRnZXQ6OnBhaW50KToKKFdpZGdldDo6
bW91c2VQcmVzc0V2ZW50KToKKFdpZGdldDo6b25QYWdlUmVwYWludFJlcXVlc3RlZCk6Cih0c3Rf
UVdlYlBhZ2U6OnNldFFHcmFwaGljc1dpZGdldEFzVmlldyk6Ci0tLQogV2ViS2l0L3F0L0FwaS9x
Z3JhcGhpY3N3ZWJ2aWV3LmNwcCAgICAgICAgfCAgMzE2ICsrLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcCAgICAgICAgICAgICAgICB8ICAgNDIg
KysrLQogV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oICAgICAgICAgICAgICAgICAgfCAgICAyICsK
IFdlYktpdC9xdC9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgIHwgICA0NSArKysrCiBX
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcCB8ICAxOTQgKysrKysrKysr
KysrKysrKysrCiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmggICB8ICAx
MzcgKysrKysrKysrKysrKwogV2ViS2l0L3F0L3Rlc3RzL3F3ZWJwYWdlL3RzdF9xd2VicGFnZS5j
cHAgfCAgIDU3ICsrKysrCiA3IGZpbGVzIGNoYW5nZWQsIDQ4NSBpbnNlcnRpb25zKCspLCAzMDgg
ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xZ3JhcGhpY3N3ZWJ2aWV3
LmNwcCBiL1dlYktpdC9xdC9BcGkvcWdyYXBoaWNzd2Vidmlldy5jcHAKaW5kZXggMGMxM2U0My4u
NDZhM2Y2MSAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0FwaS9xZ3JhcGhpY3N3ZWJ2aWV3LmNwcAor
KysgYi9XZWJLaXQvcXQvQXBpL3FncmFwaGljc3dlYnZpZXcuY3BwCkBAIC0yNSw3ICsyNSw3IEBA
CiAjaW5jbHVkZSAicXdlYmZyYW1lX3AuaCIKICNpbmNsdWRlICJxd2VicGFnZS5oIgogI2luY2x1
ZGUgInF3ZWJwYWdlX3AuaCIKLSNpbmNsdWRlICJRV2ViUGFnZUNsaWVudC5oIgorI2luY2x1ZGUg
IlBhZ2VDbGllbnRRdC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKQEAgLTQ2LDk2ICs0NiwyMyBAQAog
I2VuZGlmCiAjaW5jbHVkZSA8U2V0dGluZ3MuaD4KIAotLy8gdGhlIG92ZXJsYXkgaXMgaGVyZSBm
b3Igb25lIHJlYXNvbiBvbmx5OiB0byBoYXZlIHRoZSBzY3JvbGwtYmFycyBhbmQgb3RoZXIKLS8v
IGV4dHJhIFVJIGVsZW1lbnRzIGFwcGVhciBvbiB0b3Agb2YgYW55IFFHcmFwaGljc0l0ZW1zIGNy
ZWF0ZWQgYnkgQ1NTIGNvbXBvc2l0aW5nIGxheWVycwotY2xhc3MgUUdyYXBoaWNzV2ViVmlld092
ZXJsYXkgOiBwdWJsaWMgUUdyYXBoaWNzSXRlbSB7Ci0gICAgcHVibGljOgotICAgIFFHcmFwaGlj
c1dlYlZpZXdPdmVybGF5KFFHcmFwaGljc1dlYlZpZXcqIHZpZXcpCi0gICAgICAgICAgICA6UUdy
YXBoaWNzSXRlbSh2aWV3KQotICAgICAgICAgICAgLCBxKHZpZXcpCi0gICAgewotICAgICAgICBz
ZXRQb3MoMCwgMCk7Ci0jaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDQsIDYsIDAp
Ci0gICAgICAgIHNldEZsYWcoUUdyYXBoaWNzSXRlbTo6SXRlbVVzZXNFeHRlbmRlZFN0eWxlT3B0
aW9uLCB0cnVlKTsKLSNlbmRpZgotICAgICAgICBzZXRDYWNoZU1vZGUoUUdyYXBoaWNzSXRlbTo6
RGV2aWNlQ29vcmRpbmF0ZUNhY2hlKTsKLSAgICB9Ci0KLSAgICBRUmVjdEYgYm91bmRpbmdSZWN0
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBxLT5ib3VuZGluZ1JlY3QoKTsKLSAgICB9
Ci0KLSAgICB2b2lkIHBhaW50KFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU3R5bGVPcHRpb25H
cmFwaGljc0l0ZW0qIG9wdGlvbnMsIFFXaWRnZXQqKQotICAgIHsKLSAgICAgICAgcS0+cGFnZSgp
LT5tYWluRnJhbWUoKS0+cmVuZGVyKHBhaW50ZXIsIHN0YXRpY19jYXN0PFFXZWJGcmFtZTo6UmVu
ZGVyTGF5ZXI+KFFXZWJGcmFtZTo6QWxsTGF5ZXJzJih+UVdlYkZyYW1lOjpDb250ZW50c0xheWVy
KSksIG9wdGlvbnMtPmV4cG9zZWRSZWN0LnRvUmVjdCgpKTsKLSAgICB9Ci0KLSAgICBmcmllbmQg
Y2xhc3MgUUdyYXBoaWNzV2ViVmlldzsKLSAgICBRR3JhcGhpY3NXZWJWaWV3KiBxOwotfTsKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1jbGFzcyBRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZSA6
IHB1YmxpYyBRV2ViUGFnZUNsaWVudCB7CitjbGFzcyBRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZSB7
CiBwdWJsaWM6CiAgICAgUUdyYXBoaWNzV2ViVmlld1ByaXZhdGUoUUdyYXBoaWNzV2ViVmlldyog
cGFyZW50KQogICAgICAgICA6IHEocGFyZW50KQogICAgICAgICAsIHBhZ2UoMCkKLSAgICAgICAg
LCByZXNpemVzVG9Db250ZW50cyhmYWxzZSkKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCi0gICAgICAgICwgcm9vdEdyYXBoaWNzTGF5ZXIoMCkKLSAgICAgICAgLCBzaG91bGRTeW5j
KGZhbHNlKQotI2VuZGlmCi0gICAgewotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
LSAgICAgICAgLy8gdGhlIG92ZXJsYXkgYW5kIHN0YXlzIGFsaXZlIGZvciB0aGUgbGlmZXRpbWUg
b2YKLSAgICAgICAgLy8gdGhpcyBRR3JhcGhpY3NXZWJWaWV3IGFzIHRoZSBzY3JvbGxiYXJzIGFy
ZSBuZWVkZWQgd2hlbiB0aGVyZSdzIG5vIGNvbXBvc2l0aW5nCi0gICAgICAgIHEtPnNldEZsYWco
UUdyYXBoaWNzSXRlbTo6SXRlbVVzZXNFeHRlbmRlZFN0eWxlT3B0aW9uKTsKLSAgICAgICAgc3lu
Y01ldGFNZXRob2QgPSBxLT5tZXRhT2JqZWN0KCktPm1ldGhvZChxLT5tZXRhT2JqZWN0KCktPmlu
ZGV4T2ZNZXRob2QoInN5bmNMYXllcnMoKSIpKTsKLSNlbmRpZgotICAgIH0KLQotICAgIHZpcnR1
YWwgflFHcmFwaGljc1dlYlZpZXdQcml2YXRlKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xs
KGludCBkeCwgaW50IGR5LCBjb25zdCBRUmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUo
Y29uc3QgUVJlY3QmIGRpcnR5UmVjdCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9k
RW5hYmxlZChib29sIGVuYWJsZSk7Ci0gICAgdmlydHVhbCBib29sIGlucHV0TWV0aG9kRW5hYmxl
ZCgpIGNvbnN0OwotI2lmIFFUX1ZFUlNJT04gPj0gMHgwNDA2MDAKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0SW5wdXRNZXRob2RIaW50KFF0OjpJbnB1dE1ldGhvZEhpbnQgaGludCwgYm9vbCBlbmFibGUp
OwotI2VuZGlmCisgICAgICAgICwgcmVzaXplc1RvQ29udGVudHMoZmFsc2UpIHt9CiAKLSNpZm5k
ZWYgUVRfTk9fQ1VSU09SCi0gICAgdmlydHVhbCBRQ3Vyc29yIGN1cnNvcigpIGNvbnN0OwotICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVDdXJzb3IoY29uc3QgUUN1cnNvciYgY3Vyc29yKTsKLSNlbmRp
ZgotCi0gICAgdmlydHVhbCBRUGFsZXR0ZSBwYWxldHRlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBp
bnQgc2NyZWVuTnVtYmVyKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBRV2lkZ2V0KiBvd25lcldpZGdl
dCgpIGNvbnN0OwotICAgIHZpcnR1YWwgUVJlY3QgZ2VvbWV0cnlSZWxhdGl2ZVRvT3duZXJXaWRn
ZXQoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgUU9iamVjdCogcGx1Z2luUGFyZW50KCkgY29uc3Q7
Ci0KLSAgICB2aXJ0dWFsIFFTdHlsZSogc3R5bGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIH5RR3Jh
cGhpY3NXZWJWaWV3UHJpdmF0ZSgpIHt9OwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQotICAgIHZpcnR1YWwgdm9pZCBzZXRSb290R3JhcGhpY3NMYXllcihRR3JhcGhpY3NJdGVt
KiBsYXllcik7Ci0gICAgdmlydHVhbCB2b2lkIG1hcmtGb3JTeW5jKGJvb2wgc2NoZWR1bGVTeW5j
KTsKLSAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0aW5nU2Nyb2xsUG9zaXRpb24oKTsKLQotICAgIC8v
IFFHcmFwaGljc1dlYlZpZXcgY2FuIHJlbmRlciBjb21wb3NpdGVkIGxheWVycwotICAgIHZpcnR1
YWwgYm9vbCBhbGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQorICAgIHZvaWQgc3luY0xheWVycygpOwogI2VuZGlmCiAKICAgICB2b2lkIHVwZGF0ZVJl
c2l6ZXNUb0NvbnRlbnRzRm9yUGFnZSgpOwogICAgIFFSZWN0RiBncmFwaGljc0l0ZW1WaXNpYmxl
UmVjdCgpIGNvbnN0OwotI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotICAgIHZvaWQg
dXBkYXRlVGlsZWRCYWNraW5nU3RvcmVTY2FsZSgpOwotI2VuZGlmCi0KLSAgICB2b2lkIGNyZWF0
ZU9yRGVsZXRlT3ZlcmxheSgpOwotCi0gICAgdm9pZCBzeW5jTGF5ZXJzKCk7CiAKICAgICB2b2lk
IHVuc2V0UGFnZUlmRXhpc3RzKCk7CiAKQEAgLTE0OCwxMDMgKzc1LDE4IEBAIHB1YmxpYzoKIAog
ICAgIFFHcmFwaGljc1dlYlZpZXcqIHE7CiAgICAgUVdlYlBhZ2UqIHBhZ2U7Ci0KICAgICBib29s
IHJlc2l6ZXNUb0NvbnRlbnRzOwogCi0gICAgLy8gdGhlIG92ZXJsYXkgZ2V0cyBpbnN0YW50aWF0
ZWQgd2hlbiB0aGUgcm9vdCBsYXllciBpcyBhdHRhY2hlZCwgYW5kIGdldCBkZWxldGVkIHdoZW4g
aXQncyBkZXRhY2hlZAotICAgIFFTaGFyZWRQb2ludGVyPFFHcmFwaGljc1dlYlZpZXdPdmVybGF5
PiBvdmVybGF5OwotCi0gICAgLy8gd2UgbmVlZCB0byBwdXQgdGhlIHJvb3QgZ3JhcGhpY3MgbGF5
ZXIgYmVoaW5kIHRoZSBvdmVybGF5ICh3aGljaCBjb250YWlucyB0aGUgc2Nyb2xsYmFyKQotICAg
IGVudW0geyBSb290R3JhcGhpY3NMYXllclpWYWx1ZSwgT3ZlcmxheVpWYWx1ZSB9OwotCi0jaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIFFHcmFwaGljc0l0ZW0qIHJvb3RHcmFw
aGljc0xheWVyOwotICAgIC8vIHdlIG5lZWQgdG8gc3luYyB0aGUgbGF5ZXJzIGlmIHdlIGdldCBh
IHNwZWNpYWwgY2FsbCBmcm9tIHRoZSBXZWJDb3JlCi0gICAgLy8gY29tcG9zaXRvciB0ZWxsaW5n
IHVzIHRvIGRvIHNvLiBXZSdsbCBnZXQgdGhhdCBjYWxsIGZyb20gQ2hyb21lQ2xpZW50UXQKLSAg
ICBib29sIHNob3VsZFN5bmM7Ci0KLSAgICAvLyB3ZSBoYXZlIHRvIGZsdXNoIHF1aXRlIG9mdGVu
LCBzbyB3ZSB1c2UgYSBtZXRhLW1ldGhvZCBpbnN0ZWFkIG9mIFFUaW1lcjo6c2luZ2xlU2hvdCBm
b3IgcHV0dGluZyB0aGUgZXZlbnQgaW4gdGhlIHF1ZXVlCi0gICAgUU1ldGFNZXRob2Qgc3luY01l
dGFNZXRob2Q7Ci0jZW5kaWYKKyAgICAvLyBKdXN0IGEgY29udmVuaWVuY2UgdG8gYXZvaWQgdXNp
bmcgcGFnZS0+Y2xpZW50LT5vdmVybGF5IGFsd2F5cworICAgIFFTaGFyZWRQb2ludGVyPFFHcmFw
aGljc0l0ZW1PdmVybGF5PiBvdmVybGF5OwogfTsKIAotUUdyYXBoaWNzV2ViVmlld1ByaXZhdGU6
On5RR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZSgpCi17CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQotICAgIGlmIChyb290R3JhcGhpY3NMYXllcikgewotICAgICAgICAvLyB3ZSBkb24n
dCBuZWVkIHRvIGRlbGV0ZSB0aGUgcm9vdCBncmFwaGljcyBsYXllcgotICAgICAgICAvLyBUaGUg
bGlmZWN5Y2xlIGlzIG1hbmFnZWQgaW4gR3JhcGhpY3NMYXllclF0LmNwcAotICAgICAgICByb290
R3JhcGhpY3NMYXllci0+c2V0UGFyZW50SXRlbSgwKTsKLSAgICAgICAgcS0+c2NlbmUoKS0+cmVt
b3ZlSXRlbShyb290R3JhcGhpY3NMYXllcik7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXZvaWQgUUdy
YXBoaWNzV2ViVmlld1ByaXZhdGU6OmNyZWF0ZU9yRGVsZXRlT3ZlcmxheSgpCi17Ci0gICAgYm9v
bCB1c2VPdmVybGF5ID0gZmFsc2U7Ci0gICAgaWYgKCFyZXNpemVzVG9Db250ZW50cykgewotI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICAgICAgdXNlT3ZlcmxheSA9IHVzZU92
ZXJsYXkgfHwgcm9vdEdyYXBoaWNzTGF5ZXI7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoVElMRURfQkFD
S0lOR19TVE9SRSkKLSAgICAgICAgdXNlT3ZlcmxheSA9IHVzZU92ZXJsYXkgfHwgUVdlYkZyYW1l
UHJpdmF0ZTo6Y29yZShxLT5wYWdlKCktPm1haW5GcmFtZSgpKS0+dGlsZWRCYWNraW5nU3RvcmUo
KTsKLSNlbmRpZgotICAgIH0KLSAgICBpZiAodXNlT3ZlcmxheSA9PSAhIW92ZXJsYXkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAodXNlT3ZlcmxheSkgewotICAgICAgICBvdmVybGF5ID0gUVNo
YXJlZFBvaW50ZXI8UUdyYXBoaWNzV2ViVmlld092ZXJsYXk+KG5ldyBRR3JhcGhpY3NXZWJWaWV3
T3ZlcmxheShxKSk7Ci0gICAgICAgIG92ZXJsYXktPnNldFpWYWx1ZShPdmVybGF5WlZhbHVlKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgb3ZlcmxheS5jbGVhcigpOwotfQotCi0jaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQotdm9pZCBRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6c2V0Um9v
dEdyYXBoaWNzTGF5ZXIoUUdyYXBoaWNzSXRlbSogbGF5ZXIpCi17Ci0gICAgaWYgKHJvb3RHcmFw
aGljc0xheWVyKSB7Ci0gICAgICAgIHJvb3RHcmFwaGljc0xheWVyLT5zZXRQYXJlbnRJdGVtKDAp
OwotICAgICAgICBxLT5zY2VuZSgpLT5yZW1vdmVJdGVtKHJvb3RHcmFwaGljc0xheWVyKTsKLSAg
ICAgICAgUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShxLT5wYWdlKCktPm1haW5GcmFtZSgpKS0+dmll
dygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZVJlY3Vyc2l2ZSgpOwotICAgIH0KLQotICAgIHJvb3RH
cmFwaGljc0xheWVyID0gbGF5ZXI7Ci0KLSAgICBpZiAobGF5ZXIpIHsKLSAgICAgICAgbGF5ZXIt
PnNldEZsYWcoUUdyYXBoaWNzSXRlbTo6SXRlbUNsaXBzQ2hpbGRyZW5Ub1NoYXBlLCB0cnVlKTsK
LSAgICAgICAgbGF5ZXItPnNldFBhcmVudEl0ZW0ocSk7Ci0gICAgICAgIGxheWVyLT5zZXRaVmFs
dWUoUm9vdEdyYXBoaWNzTGF5ZXJaVmFsdWUpOwotICAgICAgICB1cGRhdGVDb21wb3NpdGluZ1Nj
cm9sbFBvc2l0aW9uKCk7Ci0gICAgfQotICAgIGNyZWF0ZU9yRGVsZXRlT3ZlcmxheSgpOwotfQot
Ci12b2lkIFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjptYXJrRm9yU3luYyhib29sIHNjaGVkdWxl
U3luYykKLXsKLSAgICBzaG91bGRTeW5jID0gdHJ1ZTsKLSAgICBpZiAoc2NoZWR1bGVTeW5jKQot
ICAgICAgICBzeW5jTWV0YU1ldGhvZC5pbnZva2UocSwgUXQ6OlF1ZXVlZENvbm5lY3Rpb24pOwot
fQotCi12b2lkIFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjp1cGRhdGVDb21wb3NpdGluZ1Njcm9s
bFBvc2l0aW9uKCkKLXsKLSAgICBpZiAocm9vdEdyYXBoaWNzTGF5ZXIgJiYgcS0+cGFnZSgpICYm
IHEtPnBhZ2UoKS0+bWFpbkZyYW1lKCkpIHsKLSAgICAgICAgY29uc3QgUVBvaW50IHNjcm9sbFBv
c2l0aW9uID0gcS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+c2Nyb2xsUG9zaXRpb24oKTsKLSAgICAg
ICAgcm9vdEdyYXBoaWNzTGF5ZXItPnNldFBvcygtc2Nyb2xsUG9zaXRpb24pOwotICAgIH0KLX0K
LSNlbmRpZgotCiB2b2lkIFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjpzeW5jTGF5ZXJzKCkKIHsK
LSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKHNob3VsZFN5bmMpIHsK
LSAgICAgICAgUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShxLT5wYWdlKCktPm1haW5GcmFtZSgpKS0+
dmlldygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZVJlY3Vyc2l2ZSgpOwotICAgICAgICBzaG91bGRT
eW5jID0gZmFsc2U7Ci0gICAgfQotI2VuZGlmCisgICAgc3RhdGljX2Nhc3Q8UGFnZUNsaWVudFFH
cmFwaGljc1dpZGdldCo+KHBhZ2UtPmQtPmNsaWVudCktPnN5bmNMYXllcnMoKTsKIH0KKyNlbmRp
ZgogCiB2b2lkIFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjpfcV9kb0xvYWRGaW5pc2hlZChib29s
IHN1Y2Nlc3MpCiB7CkBAIC0yNzUsMTE3ICsxMTcsNiBAQCB2b2lkIFFHcmFwaGljc1dlYlZpZXdQ
cml2YXRlOjpfcV9wYWdlRGVzdHJveWVkKCkKICAgICBxLT5zZXRQYWdlKDApOwogfQogCi12b2lk
IFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjpzY3JvbGwoaW50IGR4LCBpbnQgZHksIGNvbnN0IFFS
ZWN0JiByZWN0VG9TY3JvbGwpCi17Ci0gICAgcS0+c2Nyb2xsKHFyZWFsKGR4KSwgcXJlYWwoZHkp
LCBRUmVjdEYocmVjdFRvU2Nyb2xsKSk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCi0gICAgdXBkYXRlQ29tcG9zaXRpbmdTY3JvbGxQb3NpdGlvbigpOwotI2VuZGlmCi19Ci0K
LXZvaWQgUUdyYXBoaWNzV2ViVmlld1ByaXZhdGU6OnVwZGF0ZShjb25zdCBRUmVjdCAmIGRpcnR5
UmVjdCkKLXsKLSAgICBxLT51cGRhdGUoUVJlY3RGKGRpcnR5UmVjdCkpOwotCi0gICAgY3JlYXRl
T3JEZWxldGVPdmVybGF5KCk7Ci0gICAgaWYgKG92ZXJsYXkpCi0gICAgICAgIG92ZXJsYXktPnVw
ZGF0ZShRUmVjdEYoZGlydHlSZWN0KSk7Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQotICAgIHVwZGF0ZUNvbXBvc2l0aW5nU2Nyb2xsUG9zaXRpb24oKTsKLSAgICBzeW5jTGF5ZXJz
KCk7Ci0jZW5kaWYKLX0KLQotCi12b2lkIFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjpzZXRJbnB1
dE1ldGhvZEVuYWJsZWQoYm9vbCBlbmFibGUpCi17Ci0jaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJT
SU9OX0NIRUNLKDQsIDYsIDApCi0gICAgcS0+c2V0RmxhZyhRR3JhcGhpY3NJdGVtOjpJdGVtQWNj
ZXB0c0lucHV0TWV0aG9kLCBlbmFibGUpOwotI2VuZGlmCi19Ci0KLWJvb2wgUUdyYXBoaWNzV2Vi
Vmlld1ByaXZhdGU6OmlucHV0TWV0aG9kRW5hYmxlZCgpIGNvbnN0Ci17Ci0jaWYgUVRfVkVSU0lP
TiA+PSBRVF9WRVJTSU9OX0NIRUNLKDQsIDYsIDApCi0gICAgcmV0dXJuIHEtPmZsYWdzKCkgJiBR
R3JhcGhpY3NJdGVtOjpJdGVtQWNjZXB0c0lucHV0TWV0aG9kOwotI2Vsc2UKLSAgICByZXR1cm4g
ZmFsc2U7Ci0jZW5kaWYKLX0KLQotI2lmIFFUX1ZFUlNJT04gPj0gMHgwNDA2MDAKLXZvaWQgUUdy
YXBoaWNzV2ViVmlld1ByaXZhdGU6OnNldElucHV0TWV0aG9kSGludChRdDo6SW5wdXRNZXRob2RI
aW50IGhpbnQsIGJvb2wgZW5hYmxlKQotewotICAgIGlmIChlbmFibGUpCi0gICAgICAgIHEtPnNl
dElucHV0TWV0aG9kSGludHMocS0+aW5wdXRNZXRob2RIaW50cygpIHwgaGludCk7Ci0gICAgZWxz
ZQotICAgICAgICBxLT5zZXRJbnB1dE1ldGhvZEhpbnRzKHEtPmlucHV0TWV0aG9kSGludHMoKSAm
IH5oaW50KTsKLX0KLSNlbmRpZgotI2lmbmRlZiBRVF9OT19DVVJTT1IKLVFDdXJzb3IgUUdyYXBo
aWNzV2ViVmlld1ByaXZhdGU6OmN1cnNvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHEtPmN1cnNv
cigpOwotfQotCi12b2lkIFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjp1cGRhdGVDdXJzb3IoY29u
c3QgUUN1cnNvciYgY3Vyc29yKQotewotICAgIHEtPnNldEN1cnNvcihjdXJzb3IpOwotfQotI2Vu
ZGlmCi0KLVFQYWxldHRlIFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjpwYWxldHRlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gcS0+cGFsZXR0ZSgpOwotfQotCi1pbnQgUUdyYXBoaWNzV2ViVmlld1By
aXZhdGU6OnNjcmVlbk51bWJlcigpIGNvbnN0Ci17Ci0jaWYgZGVmaW5lZChRX1dTX1gxMSkKLSAg
ICBpZiAoUUdyYXBoaWNzU2NlbmUqIHNjZW5lID0gcS0+c2NlbmUoKSkgewotICAgICAgICBjb25z
dCBRTGlzdDxRR3JhcGhpY3NWaWV3Kj4gdmlld3MgPSBzY2VuZS0+dmlld3MoKTsKLQotICAgICAg
ICBpZiAoIXZpZXdzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiB2aWV3cy5hdCgwKS0+
eDExSW5mbygpLnNjcmVlbigpOwotICAgIH0KLSNlbmRpZgotCi0gICAgcmV0dXJuIDA7Ci19Ci0K
LVFXaWRnZXQqIFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjpvd25lcldpZGdldCgpIGNvbnN0Ci17
Ci0gICAgaWYgKFFHcmFwaGljc1NjZW5lKiBzY2VuZSA9IHEtPnNjZW5lKCkpIHsKLSAgICAgICAg
Y29uc3QgUUxpc3Q8UUdyYXBoaWNzVmlldyo+IHZpZXdzID0gc2NlbmUtPnZpZXdzKCk7Ci0gICAg
ICAgIHJldHVybiB2aWV3cy52YWx1ZSgwKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVFS
ZWN0IFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjpnZW9tZXRyeVJlbGF0aXZlVG9Pd25lcldpZGdl
dCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFxLT5zY2VuZSgpKQotICAgICAgICByZXR1cm4gUVJlY3Qo
KTsKLQotICAgIFFMaXN0PFFHcmFwaGljc1ZpZXcqPiB2aWV3cyA9IHEtPnNjZW5lKCktPnZpZXdz
KCk7Ci0gICAgaWYgKHZpZXdzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFFSZWN0KCk7Ci0K
LSAgICBRR3JhcGhpY3NWaWV3KiB2aWV3ID0gdmlld3MuYXQoMCk7Ci0gICAgcmV0dXJuIHZpZXct
Pm1hcEZyb21TY2VuZShxLT5ib3VuZGluZ1JlY3QoKSkuYm91bmRpbmdSZWN0KCk7Ci19Ci0KLVFP
YmplY3QqIFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjpwbHVnaW5QYXJlbnQoKSBjb25zdAotewot
ICAgIHJldHVybiBxOwotfQotCi1RU3R5bGUqIFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjpzdHls
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHEtPnN0eWxlKCk7Ci19Ci0KIHZvaWQgUUdyYXBoaWNz
V2ViVmlld1ByaXZhdGU6OnVwZGF0ZVJlc2l6ZXNUb0NvbnRlbnRzRm9yUGFnZSgpCiB7CiAgICAg
QVNTRVJUKHBhZ2UpOwpAQCAtNDE4LDcgKzE0OSw3IEBAIHZvaWQgUUdyYXBoaWNzV2ViVmlld1By
aXZhdGU6Ol9xX2NvbnRlbnRzU2l6ZUNoYW5nZWQoY29uc3QgUVNpemUmIHNpemUpCiB2b2lkIFFH
cmFwaGljc1dlYlZpZXdQcml2YXRlOjpfcV9zY2FsZUNoYW5nZWQoKQogewogI2lmIEVOQUJMRShU
SUxFRF9CQUNLSU5HX1NUT1JFKQotICAgIHVwZGF0ZVRpbGVkQmFja2luZ1N0b3JlU2NhbGUoKTsK
KyAgICBzdGF0aWNfY2FzdDxQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Kj4ocGFnZS0+ZC0+Y2xp
ZW50KS0+dXBkYXRlVGlsZWRCYWNraW5nU3RvcmVTY2FsZSgpOwogI2VuZGlmCiB9CiAKQEAgLTQ0
MSwxNiArMTcyLDYgQEAgUVJlY3RGIFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjpncmFwaGljc0l0
ZW1WaXNpYmxlUmVjdCgpIGNvbnN0CiAgICAgcmV0dXJuIHEtPm1hcFJlY3RGcm9tU2NlbmUoUVJl
Y3RGKFFQb2ludCh4UG9zaXRpb24sIHlQb3NpdGlvbiksIHZpZXdzWzBdLT52aWV3cG9ydCgpLT5z
aXplKCkpKTsKIH0KIAotI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotdm9pZCBRR3Jh
cGhpY3NXZWJWaWV3UHJpdmF0ZTo6dXBkYXRlVGlsZWRCYWNraW5nU3RvcmVTY2FsZSgpCi17Ci0g
ICAgV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSA9IFFXZWJGcmFtZVBy
aXZhdGU6OmNvcmUocGFnZS0+bWFpbkZyYW1lKCkpLT50aWxlZEJhY2tpbmdTdG9yZSgpOwotICAg
IGlmICghYmFja2luZ1N0b3JlKQotICAgICAgICByZXR1cm47Ci0gICAgYmFja2luZ1N0b3JlLT5z
ZXRDb250ZW50c1NjYWxlKHEtPnNjYWxlKCkpOwotfQotI2VuZGlmCi0KIC8qIQogICAgIFxjbGFz
cyBRR3JhcGhpY3NXZWJWaWV3CiAgICAgXGJyaWVmIFRoZSBRR3JhcGhpY3NXZWJWaWV3IGNsYXNz
IGFsbG93cyBXZWIgY29udGVudCB0byBiZSBhZGRlZCB0byBhIEdyYXBoaWNzVmlldy4KQEAgLTcx
MCw3ICs0MzEsNyBAQCBib29sIFFHcmFwaGljc1dlYlZpZXc6OmV2ZW50KFFFdmVudCogZXZlbnQp
CiAgICAgICAgICAgICAgICAgLy8gV2ViQ29yZS4KICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
QWRkIGEgUUV2ZW50OjpDdXJzb3JVbnNldCBvciBzaW1pbGFyIHRvIFF0LgogICAgICAgICAgICAg
ICAgIGlmIChjdXJzb3IoKS5zaGFwZSgpID09IFF0OjpBcnJvd0N1cnNvcikKLSAgICAgICAgICAg
ICAgICAgICAgZC0+cmVzZXRDdXJzb3IoKTsKKyAgICAgICAgICAgICAgICAgICAgZC0+cGFnZS0+
ZC0+Y2xpZW50LT5yZXNldEN1cnNvcigpOwogICAgICAgICAgICAgfQogI2VuZGlmCiAgICAgICAg
IH0KQEAgLTc2MSwxMCArNDgyLDExIEBAIHZvaWQgUUdyYXBoaWNzV2ViVmlldzo6c2V0UGFnZShR
V2ViUGFnZSogcGFnZSkKICAgICBpZiAoIWQtPnBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGQtPnBhZ2UtPmQtPmNsaWVudCA9IGQ7IC8vIHNldCB0aGUgcGFnZSBjbGllbnQKKyAgICBkLT5w
YWdlLT5zZXRWaWV3KHRoaXMpOworICAgIGQtPm92ZXJsYXkgPSBzdGF0aWNfY2FzdDxQYWdlQ2xp
ZW50UUdyYXBoaWNzV2lkZ2V0Kj4oZC0+cGFnZS0+ZC0+Y2xpZW50KS0+b3ZlcmxheTsKIAogICAg
IGlmIChkLT5vdmVybGF5KQotICAgICAgICBkLT5vdmVybGF5LT5wcmVwYXJlR2VvbWV0cnlDaGFu
Z2UoKTsKKyAgICAgICAgZC0+b3ZlcmxheS0+cHJlcGFyZUdyYXBoaWNzSXRlbUdlb21ldHJ5Q2hh
bmdlKCk7CiAKICAgICBRU2l6ZSBzaXplID0gZ2VvbWV0cnkoKS5zaXplKCkudG9TaXplKCk7CiAg
ICAgcGFnZS0+c2V0Vmlld3BvcnRTaXplKHNpemUpOwpAQCAtODc1LDcgKzU5Nyw3IEBAIHFyZWFs
IFFHcmFwaGljc1dlYlZpZXc6Onpvb21GYWN0b3IoKSBjb25zdAogdm9pZCBRR3JhcGhpY3NXZWJW
aWV3Ojp1cGRhdGVHZW9tZXRyeSgpCiB7CiAgICAgaWYgKGQtPm92ZXJsYXkpCi0gICAgICAgIGQt
Pm92ZXJsYXktPnByZXBhcmVHZW9tZXRyeUNoYW5nZSgpOworICAgICAgICBkLT5vdmVybGF5LT5w
cmVwYXJlR3JhcGhpY3NJdGVtR2VvbWV0cnlDaGFuZ2UoKTsKIAogICAgIFFHcmFwaGljc1dpZGdl
dDo6dXBkYXRlR2VvbWV0cnkoKTsKIApAQCAtODkzLDcgKzYxNSw3IEBAIHZvaWQgUUdyYXBoaWNz
V2ViVmlldzo6c2V0R2VvbWV0cnkoY29uc3QgUVJlY3RGJiByZWN0KQogICAgIFFHcmFwaGljc1dp
ZGdldDo6c2V0R2VvbWV0cnkocmVjdCk7CiAKICAgICBpZiAoZC0+b3ZlcmxheSkKLSAgICAgICAg
ZC0+b3ZlcmxheS0+cHJlcGFyZUdlb21ldHJ5Q2hhbmdlKCk7CisgICAgICAgIGQtPm92ZXJsYXkt
PnByZXBhcmVHcmFwaGljc0l0ZW1HZW9tZXRyeUNoYW5nZSgpOwogCiAgICAgaWYgKCFkLT5wYWdl
KQogICAgICAgICByZXR1cm47CkBAIC0xMTI3LDggKzg0OSwxMCBAQCB2b2lkIFFHcmFwaGljc1dl
YlZpZXc6OnNldFJlc2l6ZXNUb0NvbnRlbnRzKGJvb2wgZW5hYmxlZCkKICAgICBpZiAoZC0+cmVz
aXplc1RvQ29udGVudHMgPT0gZW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwogICAgIGQtPnJlc2l6
ZXNUb0NvbnRlbnRzID0gZW5hYmxlZDsKLSAgICBpZiAoZC0+cGFnZSkKKyAgICBpZiAoZC0+cGFn
ZSkgeworICAgICAgICBzdGF0aWNfY2FzdDxQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Kj4oZC0+
cGFnZS0+ZC0+Y2xpZW50KS0+dmlld1Jlc2l6ZXNUb0NvbnRlbnRzID0gZW5hYmxlZDsKICAgICAg
ICAgZC0+dXBkYXRlUmVzaXplc1RvQ29udGVudHNGb3JQYWdlKCk7CisgICAgfQogfQogCiBib29s
IFFHcmFwaGljc1dlYlZpZXc6OnJlc2l6ZXNUb0NvbnRlbnRzKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwIGIvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAK
aW5kZXggZTBiMzlhMS4uZTM1MmExZCAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0FwaS9xd2VicGFn
ZS5jcHAKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKQEAgLTk0LDYgKzk0LDcgQEAK
ICNpbmNsdWRlIDxRRHJhZ01vdmVFdmVudD4KICNpbmNsdWRlIDxRRHJvcEV2ZW50PgogI2luY2x1
ZGUgPFFGaWxlRGlhbG9nPgorI2luY2x1ZGUgPFFHcmFwaGljc1NjZW5lPgogI2luY2x1ZGUgPFFI
dHRwUmVxdWVzdEhlYWRlcj4KICNpbmNsdWRlIDxRSW5wdXREaWFsb2c+CiAjaW5jbHVkZSA8UUxv
Y2FsZT4KQEAgLTE3NDUsNyArMTc0Niw4IEBAIFFXZWJIaXN0b3J5ICpRV2ViUGFnZTo6aGlzdG9y
eSgpIGNvbnN0CiB9CiAKIC8qIQotICAgIFNldHMgdGhlIFxhIHZpZXcgdGhhdCBpcyBhc3NvY2lh
dGVkIHdpdGggdGhlIHdlYiBwYWdlLgorICAgIFNldHMgdGhlIFxhIHZpZXcgdGhhdCBpcyBhc3Nv
Y2lhdGVkIHdpdGggdGhlIHdlYiBwYWdlLAorICAgIGlmIFxhIHZpZXcgaXMgYSBRV2lkZ2V0IGJh
c2VkIGluc3RhbmNlLgogCiAgICAgXHNhIHZpZXcoKQogKi8KQEAgLTE3NTQsMjMgKzE3NTYsMzkg
QEAgdm9pZCBRV2ViUGFnZTo6c2V0VmlldyhRV2lkZ2V0KiB2aWV3KQogICAgIGlmICh0aGlzLT52
aWV3KCkgPT0gdmlldykKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gcmVtb3ZlIG9sZCBwYWdl
IGNsaWVudCwgaWYgZXhpc3RzLgorICAgIGRlbGV0ZSBkLT5jbGllbnQ7CisKICAgICBkLT52aWV3
ID0gdmlldzsKICAgICBzZXRWaWV3cG9ydFNpemUodmlldyA/IHZpZXctPnNpemUoKSA6IFFTaXpl
KDAsIDApKTsKIAotICAgIC8vIElmIHdlIGhhdmUgbm8gY2xpZW50LCB3ZSBpbnN0YWxsIGEgc3Bl
Y2lhbCBjbGllbnQgZGVsZWdhdGluZwotICAgIC8vIHRoZSByZXNwb25zaWJpbGl0eSB0byB0aGUg
UVdpZGdldC4gVGhpcyBpcyB0aGUgY29kZSBwYXRoCi0gICAgLy8gaGFuZGxpbmcgYS5vLiB0aGUg
ImxlZ2FjeSIgUVdlYlZpZXcuCi0gICAgLy8KLSAgICAvLyBJZiBzdWNoIGEgc3BlY2lhbCBkZWxl
Z2F0ZSBhbHJlYWR5IGV4aXN0LCB3ZSBzdWJzdGl0dXRlIHRoZSB2aWV3LgorICAgIC8vIGluc3Rh
bGwgYSBwYWdlIGNsaWVudCBkZWxlZ2F0aW5nIHRoZSByZXNwb25zaWJpbGl0eSB0byB0aGUgUVdp
ZGdldC4KKyAgICBpZiAodmlldykKKyAgICAgICAgZC0+Y2xpZW50ID0gbmV3IFBhZ2VDbGllbnRR
V2lkZ2V0KHZpZXcpOworfQogCi0gICAgaWYgKGQtPmNsaWVudCkgewotICAgICAgICBpZiAoZC0+
Y2xpZW50LT5pc1FXaWRnZXRDbGllbnQoKSkKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PFBhZ2VD
bGllbnRRV2lkZ2V0Kj4oZC0+Y2xpZW50KS0+dmlldyA9IHZpZXc7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisvKiEKKyAgICBTZXRzIHRoZSBcYSB2aWV3IHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRo
IHRoZSB3ZWIgcGFnZSwKKyAgICBpZiBcYSB2aWV3IGlzIGEgUUdyYXBoaWNzV2lkZ2V0IGJhc2Vk
IGluc3RhbmNlLgogCisgICAgXHNhIHZpZXcoKQorKi8KK3ZvaWQgUVdlYlBhZ2U6OnNldFZpZXco
UUdyYXBoaWNzV2lkZ2V0KiB2aWV3KQoreworICAgIC8vIHJlbW92ZSBvbGQgcGFnZSBjbGllbnQs
IGlmIGV4aXN0cy4KKyAgICBkZWxldGUgZC0+Y2xpZW50OworCisjaWYgUVRfVkVSU0lPTiA8IDB4
MDQwNjAwCisgICAgZC0+dmlldyA9IDA7CisjZWxzZQorICAgIGQtPnZpZXcuY2xlYXIoKTsKKyNl
bmRpZgorCisgICAgc2V0Vmlld3BvcnRTaXplKHZpZXcgPyB2aWV3LT5zaXplKCkudG9TaXplKCkg
OiBRU2l6ZSgwLCAwKSk7CisKKyAgICAvLyBpbnN0YWxsIGEgcGFnZSBjbGllbnQgZGVsZWdhdGlu
ZyB0aGUgcmVzcG9uc2liaWxpdHkgdG8gdGhlIFFXaWRnZXQuCiAgICAgaWYgKHZpZXcpCi0gICAg
ICAgIGQtPmNsaWVudCA9IG5ldyBQYWdlQ2xpZW50UVdpZGdldCh2aWV3KTsKKyAgICAgICAgZC0+
Y2xpZW50ID0gbmV3IFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQodmlldywgdGhpcyk7CiB9CiAK
IC8qIQpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oIGIvV2ViS2l0L3F0L0Fw
aS9xd2VicGFnZS5oCmluZGV4IGMwODVmZDcuLjY0NDcyOWMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9x
dC9BcGkvcXdlYnBhZ2UuaAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgKQEAgLTI3LDYg
KzI3LDcgQEAKICNpbmNsdWRlIDxRdENvcmUvcW9iamVjdC5oPgogI2luY2x1ZGUgPFF0Q29yZS9x
dXJsLmg+CiAjaW5jbHVkZSA8UXRHdWkvcXdpZGdldC5oPgorI2luY2x1ZGUgPFF0R3VpL3FncmFw
aGljc3dpZGdldC5oPgogCiBRVF9CRUdJTl9OQU1FU1BBQ0UKIGNsYXNzIFFOZXR3b3JrUHJveHk7
CkBAIC0yMDMsNiArMjA0LDcgQEAgcHVibGljOgogICAgIFFXZWJTZXR0aW5ncyAqc2V0dGluZ3Mo
KSBjb25zdDsKIAogICAgIHZvaWQgc2V0VmlldyhRV2lkZ2V0ICp2aWV3KTsKKyAgICB2b2lkIHNl
dFZpZXcoUUdyYXBoaWNzV2lkZ2V0ICp2aWV3KTsKICAgICBRV2lkZ2V0ICp2aWV3KCkgY29uc3Q7
CiAKICAgICBib29sIGlzTW9kaWZpZWQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9D
aGFuZ2VMb2cgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IGQzNDA2YmYuLjAxOTY2NTEgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L3F0L0NoYW5nZUxvZwpA
QCAtMiw2ICsyLDUxIEBACiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAK
KyAgICAgICAgQWRkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQgc3BlY2lmaWMgaW1wbGVtZW50
YXRpb24uCisgICAgICAgIFFHcmFwaGljc1dlYlZpZXdQcml2YXRlIGRvZXNuJ3QgaW5oZXJpdCBR
V2ViUGFnZUNsaWVudCBhbnltb3JlCisgICAgICAgIGFuZCB0aGUgbmVlZGVkIGZ1bmN0aW9ucyB3
ZXJlIG1vdmVkIHRvIHRoaXMgbmV3IFBhZ2VDbGllbnQgY2xhc3MsCisgICAgICAgIGluY2x1ZGlu
ZyBUaWxpbmcgYW5kIEFjY2VsZXJhdGVkIENvbXBvc2l0ZSBzcGVjaWZpYyBvbmVzLgorICAgICAg
ICBBbHNvIGFkZCBRV2ViUGFnZTo6c2V0VmlldyhRR3JhcGhpY3NXaWRnZXQqKSwgbWFraW5nIFFX
ZWJQYWdlCisgICAgICAgIG5vdyByZWFkeSBmb3IgUUdyYXBoaWNzV2lkZ2V0IGJhc2VkIGN1c3Rv
bSB2aWV3cy4KKworICAgICAgICBbUXRdIFBhZ2VDbGllbnRRdCBzcGVjaWZpYyBpbXBsZW1lbnRh
dGlvbiBmb3IgUUdyYXBoaWNzV2lkZ2V0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zNzg2NgorCisgICAgICAgICogQXBpL3FncmFwaGljc3dlYnZpZXcu
Y3BwOgorICAgICAgICAoUUdyYXBoaWNzV2ViVmlld1ByaXZhdGU6OlFHcmFwaGljc1dlYlZpZXdQ
cml2YXRlKToKKyAgICAgICAgKFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjp+UUdyYXBoaWNzV2Vi
Vmlld1ByaXZhdGUpOgorICAgICAgICAoUUdyYXBoaWNzV2ViVmlld1ByaXZhdGU6OnN5bmNMYXll
cnMpOgorICAgICAgICAoUUdyYXBoaWNzV2ViVmlld1ByaXZhdGU6Ol9xX3NjYWxlQ2hhbmdlZCk6
CisgICAgICAgIChRR3JhcGhpY3NXZWJWaWV3OjpldmVudCk6CisgICAgICAgIChRR3JhcGhpY3NX
ZWJWaWV3OjpzZXRQYWdlKToKKyAgICAgICAgKFFHcmFwaGljc1dlYlZpZXc6OnVwZGF0ZUdlb21l
dHJ5KToKKyAgICAgICAgKFFHcmFwaGljc1dlYlZpZXc6OnNldEdlb21ldHJ5KToKKyAgICAgICAg
KFFHcmFwaGljc1dlYlZpZXc6OnNldFJlc2l6ZXNUb0NvbnRlbnRzKToKKyAgICAgICAgKiBBcGkv
cXdlYnBhZ2UuY3BwOgorICAgICAgICAoUVdlYlBhZ2U6OnNldFZpZXcpOgorICAgICAgICAqIEFw
aS9xd2VicGFnZS5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHA6
IG1vdmVkIHRoZSBRV2ViUGFnZUNsaWVudCBtZXRob2RzCisgICAgICAgIHJlaW1wbGVtZW50ZWQg
aW4gUUdyYXBoaWNzV2ViVmlld1ByaXZhdGUgdG8gaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OlBh
Z2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6Omdlb21ldHJ5UmVsYXRpdmVUb093bmVyV2lkZ2V0KToK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlFHcmFwaGljc0l0ZW1PdmVybGF5OjpwYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlFHcmFw
aGljc0l0ZW1PdmVybGF5Ojpib3VuZGluZ1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UUdyYXBo
aWNzSXRlbU92ZXJsYXk6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlFHcmFwaGljc0l0ZW1P
dmVybGF5OjpwcmVwYXJlR3JhcGhpY3NJdGVtR2VvbWV0cnlDaGFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdl
dCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojppc1FXaWRn
ZXRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6
KToKKyAgICAgICAgKiB0ZXN0cy9xd2VicGFnZS90c3RfcXdlYnBhZ2UuY3BwOgorICAgICAgICAo
V2lkZ2V0OjpXaWRnZXQpOgorICAgICAgICAoV2lkZ2V0OjpwYWludCk6CisgICAgICAgIChXaWRn
ZXQ6Om1vdXNlUHJlc3NFdmVudCk6CisgICAgICAgIChXaWRnZXQ6Om9uUGFnZVJlcGFpbnRSZXF1
ZXN0ZWQpOgorICAgICAgICAodHN0X1FXZWJQYWdlOjpzZXRRR3JhcGhpY3NXaWRnZXRBc1ZpZXcp
OgorCisyMDEwLTA0LTIwICBKZXN1cyBTYW5jaGV6LVBhbGVuY2lhICA8amVzdXNAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBBZGQg
UGFnZUNsaWVudFFXaWRnZXQgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gdGhlIG9sZAogICAgICAg
ICBRV2ViUGFnZVdpZGdldENsaWVudCB0byBQYWdlQ2xpZW50UXQgZmlsZXMuIEFsc28gZml4CiAg
ICAgICAgIFFXZWJQYWdlOjpzZXRWaWV3KCkgdG8gdXNlIFBhZ2VDbGllbnRRV2lkZ2V0LgpkaWZm
IC0tZ2l0IGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAgYi9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcAppbmRleCA2MTFiYWI3Li5hOTBj
NDY4IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNw
cAorKysgYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcApAQCAtMTAz
LDQgKzEwMywxOTggQEAgUVN0eWxlKiBQYWdlQ2xpZW50UVdpZGdldDo6c3R5bGUoKSBjb25zdAog
ICAgIHJldHVybiB2aWV3LT5zdHlsZSgpOwogfQogCitQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0
Ojp+UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldCgpCit7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQorICAgIGlmIChyb290R3JhcGhpY3NMYXllcikgeworICAgICAgICAvLyB3ZSBk
b24ndCBuZWVkIHRvIGRlbGV0ZSB0aGUgcm9vdCBncmFwaGljcyBsYXllcgorICAgICAgICAvLyBU
aGUgbGlmZWN5Y2xlIGlzIG1hbmFnZWQgaW4gR3JhcGhpY3NMYXllclF0LmNwcAorICAgICAgICBy
b290R3JhcGhpY3NMYXllci0+c2V0UGFyZW50SXRlbSgwKTsKKyAgICAgICAgdmlldy0+c2NlbmUo
KS0+cmVtb3ZlSXRlbShyb290R3JhcGhpY3NMYXllcik7CisgICAgfQorI2VuZGlmCit9CisKK3Zv
aWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2Nyb2xsKGludCBkeCwgaW50IGR5LCBjb25z
dCBRUmVjdCYgcmVjdFRvU2Nyb2xsKQoreworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKKyAgICB1cGRhdGVDb21wb3NpdGluZ1Njcm9sbFBvc2l0aW9uKCk7CisjZW5kaWYKK30KKwor
dm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojp1cGRhdGUoY29uc3QgUVJlY3QgJiBkaXJ0
eVJlY3QpCit7CisgICAgY3JlYXRlT3JEZWxldGVPdmVybGF5KCk7CisgICAgaWYgKG92ZXJsYXkp
CisgICAgICAgIG92ZXJsYXktPnVwZGF0ZShRUmVjdEYoZGlydHlSZWN0KSk7CisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIHN5bmNMYXllcnMoKTsKKyNlbmRpZgorfQorCit2
b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OmNyZWF0ZU9yRGVsZXRlT3ZlcmxheSgpCit7
CisgICAgYm9vbCB1c2VPdmVybGF5ID0gZmFsc2U7CisgICAgaWYgKCF2aWV3UmVzaXplc1RvQ29u
dGVudHMpIHsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgICAgIHVzZU92
ZXJsYXkgPSB1c2VPdmVybGF5IHx8IHJvb3RHcmFwaGljc0xheWVyOworI2VuZGlmCisjaWYgRU5B
QkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgICAgIHVzZU92ZXJsYXkgPSB1c2VPdmVybGF5
IHx8IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUocGFnZS0+bWFpbkZyYW1lKCkpLT50aWxlZEJhY2tp
bmdTdG9yZSgpOworI2VuZGlmCisgICAgfQorICAgIGlmICh1c2VPdmVybGF5ID09ICEhb3Zlcmxh
eSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICh1c2VPdmVybGF5KSB7CisgICAgICAgIG92ZXJs
YXkgPSBRU2hhcmVkUG9pbnRlcjxRR3JhcGhpY3NJdGVtT3ZlcmxheT4obmV3IFFHcmFwaGljc0l0
ZW1PdmVybGF5KHZpZXcsIHBhZ2UpKTsKKyAgICAgICAgb3ZlcmxheS0+c2V0WlZhbHVlKE92ZXJs
YXlaVmFsdWUpOworICAgIH0gZWxzZQorICAgICAgICBvdmVybGF5LmNsZWFyKCk7Cit9CisKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCit2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NX
aWRnZXQ6OnN5bmNMYXllcnMoKQoreworICAgIGlmIChzaG91bGRTeW5jKSB7CisgICAgICAgIFFX
ZWJGcmFtZVByaXZhdGU6OmNvcmUocGFnZS0+bWFpbkZyYW1lKCkpLT52aWV3KCktPnN5bmNDb21w
b3NpdGluZ1N0YXRlUmVjdXJzaXZlKCk7CisgICAgICAgIHNob3VsZFN5bmMgPSBmYWxzZTsKKyAg
ICB9Cit9CisKK3ZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2V0Um9vdEdyYXBoaWNz
TGF5ZXIoUUdyYXBoaWNzSXRlbSogbGF5ZXIpCit7CisgICAgaWYgKHJvb3RHcmFwaGljc0xheWVy
KSB7CisgICAgICAgIHJvb3RHcmFwaGljc0xheWVyLT5zZXRQYXJlbnRJdGVtKDApOworICAgICAg
ICB2aWV3LT5zY2VuZSgpLT5yZW1vdmVJdGVtKHJvb3RHcmFwaGljc0xheWVyKTsKKyAgICAgICAg
UVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShwYWdlLT5tYWluRnJhbWUoKSktPnZpZXcoKS0+c3luY0Nv
bXBvc2l0aW5nU3RhdGVSZWN1cnNpdmUoKTsKKyAgICB9CisKKyAgICByb290R3JhcGhpY3NMYXll
ciA9IGxheWVyOworCisgICAgaWYgKGxheWVyKSB7CisgICAgICAgIGxheWVyLT5zZXRGbGFnKFFH
cmFwaGljc0l0ZW06Okl0ZW1DbGlwc0NoaWxkcmVuVG9TaGFwZSwgdHJ1ZSk7CisgICAgICAgIGxh
eWVyLT5zZXRQYXJlbnRJdGVtKHZpZXcpOworICAgICAgICBsYXllci0+c2V0WlZhbHVlKFJvb3RH
cmFwaGljc0xheWVyWlZhbHVlKTsKKyAgICAgICAgdXBkYXRlQ29tcG9zaXRpbmdTY3JvbGxQb3Np
dGlvbigpOworICAgIH0KKyAgICBjcmVhdGVPckRlbGV0ZU92ZXJsYXkoKTsKK30KKwordm9pZCBQ
YWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjptYXJrRm9yU3luYyhib29sIHNjaGVkdWxlU3luYykK
K3sKKyAgICBzaG91bGRTeW5jID0gdHJ1ZTsKKyAgICBpZiAoc2NoZWR1bGVTeW5jKQorICAgICAg
ICBzeW5jTWV0YU1ldGhvZC5pbnZva2UodmlldywgUXQ6OlF1ZXVlZENvbm5lY3Rpb24pOworfQor
Cit2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnVwZGF0ZUNvbXBvc2l0aW5nU2Nyb2xs
UG9zaXRpb24oKQoreworICAgIGlmIChyb290R3JhcGhpY3NMYXllciAmJiBwYWdlICYmIHBhZ2Ut
Pm1haW5GcmFtZSgpKSB7CisgICAgICAgIGNvbnN0IFFQb2ludCBzY3JvbGxQb3NpdGlvbiA9IHBh
Z2UtPm1haW5GcmFtZSgpLT5zY3JvbGxQb3NpdGlvbigpOworICAgICAgICByb290R3JhcGhpY3NM
YXllci0+c2V0UG9zKC1zY3JvbGxQb3NpdGlvbik7CisgICAgfQorfQorI2VuZGlmCisKKyNpZiBF
TkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKK3ZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdl
dDo6dXBkYXRlVGlsZWRCYWNraW5nU3RvcmVTY2FsZSgpCit7CisgICAgV2ViQ29yZTo6VGlsZWRC
YWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUocGFnZS0+
bWFpbkZyYW1lKCkpLT50aWxlZEJhY2tpbmdTdG9yZSgpOworICAgIGlmICghYmFja2luZ1N0b3Jl
KQorICAgICAgICByZXR1cm47CisgICAgYmFja2luZ1N0b3JlLT5zZXRDb250ZW50c1NjYWxlKHZp
ZXctPnNjYWxlKCkpOworfQorI2VuZGlmCisKK3ZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdl
dDo6c2V0SW5wdXRNZXRob2RFbmFibGVkKGJvb2wgZW5hYmxlKQoreworI2lmIFFUX1ZFUlNJT04g
Pj0gUVRfVkVSU0lPTl9DSEVDSyg0LCA2LCAwKQorICAgIHZpZXctPnNldEZsYWcoUUdyYXBoaWNz
SXRlbTo6SXRlbUFjY2VwdHNJbnB1dE1ldGhvZCwgZW5hYmxlKTsKKyNlbmRpZgorfQorCitib29s
IFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OmlucHV0TWV0aG9kRW5hYmxlZCgpIGNvbnN0Cit7
CisjaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDQsIDYsIDApCisgICAgcmV0dXJu
IHZpZXctPmZsYWdzKCkgJiBRR3JhcGhpY3NJdGVtOjpJdGVtQWNjZXB0c0lucHV0TWV0aG9kOwor
I2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworI2lmIFFUX1ZFUlNJT04gPj0g
MHgwNDA2MDAKK3ZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2V0SW5wdXRNZXRob2RI
aW50KFF0OjpJbnB1dE1ldGhvZEhpbnQgaGludCwgYm9vbCBlbmFibGUpCit7CisgICAgaWYgKGVu
YWJsZSkKKyAgICAgICAgdmlldy0+c2V0SW5wdXRNZXRob2RIaW50cyh2aWV3LT5pbnB1dE1ldGhv
ZEhpbnRzKCkgfCBoaW50KTsKKyAgICBlbHNlCisgICAgICAgIHZpZXctPnNldElucHV0TWV0aG9k
SGludHModmlldy0+aW5wdXRNZXRob2RIaW50cygpICYgfmhpbnQpOworfQorI2VuZGlmCisKKyNp
Zm5kZWYgUVRfTk9fQ1VSU09SCitRQ3Vyc29yIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OmN1
cnNvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHZpZXctPmN1cnNvcigpOworfQorCit2b2lkIFBh
Z2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnVwZGF0ZUN1cnNvcihjb25zdCBRQ3Vyc29yJiBjdXJz
b3IpCit7CisgICAgdmlldy0+c2V0Q3Vyc29yKGN1cnNvcik7Cit9CisjZW5kaWYKKworUVBhbGV0
dGUgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6cGFsZXR0ZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHZpZXctPnBhbGV0dGUoKTsKK30KKworaW50IFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6
OnNjcmVlbk51bWJlcigpIGNvbnN0Cit7CisjaWYgZGVmaW5lZChRX1dTX1gxMSkKKyAgICBpZiAo
UUdyYXBoaWNzU2NlbmUqIHNjZW5lID0gdmlldy0+c2NlbmUoKSkgeworICAgICAgICBjb25zdCBR
TGlzdDxRR3JhcGhpY3NWaWV3Kj4gdmlld3MgPSBzY2VuZS0+dmlld3MoKTsKKworICAgICAgICBp
ZiAoIXZpZXdzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB2aWV3cy5hdCgwKS0+eDEx
SW5mbygpLnNjcmVlbigpOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIDA7Cit9CisKK1FX
aWRnZXQqIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6Om93bmVyV2lkZ2V0KCkgY29uc3QKK3sK
KyAgICBpZiAoUUdyYXBoaWNzU2NlbmUqIHNjZW5lID0gdmlldy0+c2NlbmUoKSkgeworICAgICAg
ICBjb25zdCBRTGlzdDxRR3JhcGhpY3NWaWV3Kj4gdmlld3MgPSBzY2VuZS0+dmlld3MoKTsKKyAg
ICAgICAgcmV0dXJuIHZpZXdzLnZhbHVlKDApOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwor
UVJlY3QgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6Z2VvbWV0cnlSZWxhdGl2ZVRvT3duZXJX
aWRnZXQoKSBjb25zdAoreworICAgIGlmICghdmlldy0+c2NlbmUoKSkKKyAgICAgICAgcmV0dXJu
IFFSZWN0KCk7CisKKyAgICBRTGlzdDxRR3JhcGhpY3NWaWV3Kj4gdmlld3MgPSB2aWV3LT5zY2Vu
ZSgpLT52aWV3cygpOworICAgIGlmICh2aWV3cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBR
UmVjdCgpOworCisgICAgUUdyYXBoaWNzVmlldyogZ3JhcGhpY3NWaWV3ID0gdmlld3MuYXQoMCk7
CisgICAgcmV0dXJuIGdyYXBoaWNzVmlldy0+bWFwRnJvbVNjZW5lKHZpZXctPmJvdW5kaW5nUmVj
dCgpKS5ib3VuZGluZ1JlY3QoKTsKK30KKworUU9iamVjdCogUGFnZUNsaWVudFFHcmFwaGljc1dp
ZGdldDo6cGx1Z2luUGFyZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdmlldzsKK30KKworUVN0
eWxlKiBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzdHlsZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHZpZXctPnN0eWxlKCk7Cit9CisKKworCiB9CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmggYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFn
ZUNsaWVudFF0LmgKaW5kZXggM2YwOTU2NC4uM2RlNGU3YyAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oCisrKyBiL1dlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9QYWdlQ2xpZW50UXQuaApAQCAtMjEsMTAgKzIxLDI3IEBACiAjaWZuZGVmIFBhZ2VDbGll
bnRRdF9oCiAjZGVmaW5lIFBhZ2VDbGllbnRRdF9oCiAKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5j
bHVkZSAicXdlYmZyYW1lLmgiCisjaW5jbHVkZSAicXdlYmZyYW1lX3AuaCIKKyNpbmNsdWRlICJx
d2VicGFnZS5oIgorI2luY2x1ZGUgInF3ZWJwYWdlX3AuaCIKICNpbmNsdWRlICJRV2ViUGFnZUNs
aWVudC5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlLmgiCiAKKyNpbmNsdWRlIDxRdENv
cmUvcW1ldGFvYmplY3QuaD4KKyNpbmNsdWRlIDxRdENvcmUvcXNoYXJlZHBvaW50ZXIuaD4KKyNp
bmNsdWRlIDxRdEd1aS9xZ3JhcGhpY3NzY2VuZS5oPgorI2luY2x1ZGUgPFF0R3VpL3FncmFwaGlj
c3ZpZXcuaD4KKyNpbmNsdWRlIDxRdEd1aS9xZ3JhcGhpY3N3aWRnZXQuaD4KKyNpbmNsdWRlIDxR
dEd1aS9xc2Nyb2xsYmFyLmg+CisjaW5jbHVkZSA8UXRHdWkvcXN0eWxlb3B0aW9uLmg+CiAjaW5j
bHVkZSA8UXRHdWkvcXdpZGdldC5oPgogCisjaW5jbHVkZSA8U2V0dGluZ3MuaD4KKwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTYzLDUgKzgwLDEyNSBAQCBwdWJsaWM6CiAgICAgUVdpZGdl
dCogdmlldzsKIH07CiAKKy8vIHRoZSBvdmVybGF5IGlzIGhlcmUgZm9yIG9uZSByZWFzb24gb25s
eTogdG8gaGF2ZSB0aGUgc2Nyb2xsLWJhcnMgYW5kIG90aGVyCisvLyBleHRyYSBVSSBlbGVtZW50
cyBhcHBlYXIgb24gdG9wIG9mIGFueSBRR3JhcGhpY3NJdGVtcyBjcmVhdGVkIGJ5IENTUyBjb21w
b3NpdGluZyBsYXllcnMKK2NsYXNzIFFHcmFwaGljc0l0ZW1PdmVybGF5IDogcHVibGljIFFHcmFw
aGljc0l0ZW0geworICAgIHB1YmxpYzoKKyAgICBRR3JhcGhpY3NJdGVtT3ZlcmxheShRR3JhcGhp
Y3NXaWRnZXQqIHZpZXcsIFFXZWJQYWdlKiBwKQorICAgICAgICAgICAgOlFHcmFwaGljc0l0ZW0o
dmlldykKKyAgICAgICAgICAgICwgcSh2aWV3KQorICAgICAgICAgICAgLCBwYWdlKHApCisgICAg
eworICAgICAgICBzZXRQb3MoMCwgMCk7CisjaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NI
RUNLKDQsIDYsIDApCisgICAgICAgIHNldEZsYWcoUUdyYXBoaWNzSXRlbTo6SXRlbVVzZXNFeHRl
bmRlZFN0eWxlT3B0aW9uLCB0cnVlKTsKKyNlbmRpZgorICAgICAgICBzZXRDYWNoZU1vZGUoUUdy
YXBoaWNzSXRlbTo6RGV2aWNlQ29vcmRpbmF0ZUNhY2hlKTsKKyAgICB9CisKKyAgICBRUmVjdEYg
Ym91bmRpbmdSZWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBxLT5ib3VuZGluZ1Jl
Y3QoKTsKKyAgICB9CisKKyAgICB2b2lkIHBhaW50KFFQYWludGVyKiBwYWludGVyLCBjb25zdCBR
U3R5bGVPcHRpb25HcmFwaGljc0l0ZW0qIG9wdGlvbnMsIFFXaWRnZXQqKQorICAgIHsKKyAgICAg
ICAgcGFnZS0+bWFpbkZyYW1lKCktPnJlbmRlcihwYWludGVyLCBzdGF0aWNfY2FzdDxRV2ViRnJh
bWU6OlJlbmRlckxheWVyPihRV2ViRnJhbWU6OkFsbExheWVycyYoflFXZWJGcmFtZTo6Q29udGVu
dHNMYXllcikpLCBvcHRpb25zLT5leHBvc2VkUmVjdC50b1JlY3QoKSk7CisgICAgfQorCisgICAg
dm9pZCBwcmVwYXJlR3JhcGhpY3NJdGVtR2VvbWV0cnlDaGFuZ2UoKQorICAgIHsKKyAgICAgICAg
cHJlcGFyZUdlb21ldHJ5Q2hhbmdlKCk7CisgICAgfQorCisgICAgZnJpZW5kIGNsYXNzIFFHcmFw
aGljc1dpZGdldDsKKyAgICBRR3JhcGhpY3NXaWRnZXQqIHE7CisgICAgUVdlYlBhZ2UqIHBhZ2U7
Cit9OworCisKK2NsYXNzIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQgOiBwdWJsaWMgUVdlYlBh
Z2VDbGllbnQgeworcHVibGljOgorICAgIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQoUUdyYXBo
aWNzV2lkZ2V0KiB2LCBRV2ViUGFnZSogcCkKKyAgICAgICAgOiB2aWV3KHYpCisgICAgICAgICwg
cGFnZShwKQorICAgICAgICAsIHZpZXdSZXNpemVzVG9Db250ZW50cyhmYWxzZSkKKyNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgICAgICwgcm9vdEdyYXBoaWNzTGF5ZXIoMCkK
KyAgICAgICAgLCBzaG91bGRTeW5jKGZhbHNlKQorI2VuZGlmCisgICAgeworICAgICAgIFFfQVNT
RVJUKHZpZXcpOworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICAgICAgLy8g
dGhlIG92ZXJsYXkgYW5kIHN0YXlzIGFsaXZlIGZvciB0aGUgbGlmZXRpbWUgb2YKKyAgICAgICAg
Ly8gdGhpcyBRR3JhcGhpY3NXZWJWaWV3IGFzIHRoZSBzY3JvbGxiYXJzIGFyZSBuZWVkZWQgd2hl
biB0aGVyZSdzIG5vIGNvbXBvc2l0aW5nCisgICAgICAgIHZpZXctPnNldEZsYWcoUUdyYXBoaWNz
SXRlbTo6SXRlbVVzZXNFeHRlbmRlZFN0eWxlT3B0aW9uKTsKKyAgICAgICAgc3luY01ldGFNZXRo
b2QgPSB2aWV3LT5tZXRhT2JqZWN0KCktPm1ldGhvZCh2aWV3LT5tZXRhT2JqZWN0KCktPmluZGV4
T2ZNZXRob2QoInN5bmNMYXllcnMoKSIpKTsKKyNlbmRpZgorICAgIH0KKworICAgIHZpcnR1YWwg
flBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQoKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc1FXaWRn
ZXRDbGllbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVhbCB2b2lkIHNj
cm9sbChpbnQgZHgsIGludCBkeSwgY29uc3QgUVJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlKGNvbnN0IFFSZWN0JiBkaXJ0eVJlY3QpOworICAgIHZpcnR1YWwgdm9pZCBzZXRJbnB1dE1l
dGhvZEVuYWJsZWQoYm9vbCBlbmFibGUpOworICAgIHZpcnR1YWwgYm9vbCBpbnB1dE1ldGhvZEVu
YWJsZWQoKSBjb25zdDsKKyNpZiBRVF9WRVJTSU9OID49IDB4MDQwNjAwCisgICAgdmlydHVhbCB2
b2lkIHNldElucHV0TWV0aG9kSGludChRdDo6SW5wdXRNZXRob2RIaW50IGhpbnQsIGJvb2wgZW5h
YmxlKTsKKyNlbmRpZgorCisjaWZuZGVmIFFUX05PX0NVUlNPUgorICAgIHZpcnR1YWwgUUN1cnNv
ciBjdXJzb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ3Vyc29yKGNvbnN0IFFD
dXJzb3ImIGN1cnNvcik7CisjZW5kaWYKKworICAgIHZpcnR1YWwgUVBhbGV0dGUgcGFsZXR0ZSgp
IGNvbnN0OworICAgIHZpcnR1YWwgaW50IHNjcmVlbk51bWJlcigpIGNvbnN0OworICAgIHZpcnR1
YWwgUVdpZGdldCogb3duZXJXaWRnZXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFFSZWN0IGdlb21l
dHJ5UmVsYXRpdmVUb093bmVyV2lkZ2V0KCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIFFPYmplY3Qq
IHBsdWdpblBhcmVudCgpIGNvbnN0OworCisgICAgdmlydHVhbCBRU3R5bGUqIHN0eWxlKCkgY29u
c3Q7CisKKyAgICB2b2lkIGNyZWF0ZU9yRGVsZXRlT3ZlcmxheSgpOworCisjaWYgRU5BQkxFKFRJ
TEVEX0JBQ0tJTkdfU1RPUkUpCisgICAgdm9pZCB1cGRhdGVUaWxlZEJhY2tpbmdTdG9yZVNjYWxl
KCk7CisjZW5kaWYKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Um9vdEdyYXBoaWNzTGF5ZXIoUUdyYXBoaWNzSXRlbSogbGF5ZXIpOworICAg
IHZpcnR1YWwgdm9pZCBtYXJrRm9yU3luYyhib29sIHNjaGVkdWxlU3luYyk7CisgICAgdm9pZCB1
cGRhdGVDb21wb3NpdGluZ1Njcm9sbFBvc2l0aW9uKCk7CisgICAgdm9pZCBzeW5jTGF5ZXJzKCk7
CisKKyAgICAvLyBRR3JhcGhpY3NXZWJWaWV3IGNhbiByZW5kZXIgY29tcG9zaXRlZCBsYXllcnMK
KyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KKyNlbmRpZgorCisgICAgUUdyYXBoaWNzV2lkZ2V0KiB2aWV3OworICAg
IFFXZWJQYWdlKiBwYWdlOworICAgIGJvb2wgdmlld1Jlc2l6ZXNUb0NvbnRlbnRzOworCisjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIFFHcmFwaGljc0l0ZW0qIHJvb3RHcmFw
aGljc0xheWVyOworCisgICAgLy8gd2UgaGF2ZSB0byBmbHVzaCBxdWl0ZSBvZnRlbiwgc28gd2Ug
dXNlIGEgbWV0YS1tZXRob2QgaW5zdGVhZCBvZiBRVGltZXI6OnNpbmdsZVNob3QgZm9yIHB1dHRp
bmcgdGhlIGV2ZW50IGluIHRoZSBxdWV1ZQorICAgIFFNZXRhTWV0aG9kIHN5bmNNZXRhTWV0aG9k
OworCisgICAgLy8gd2UgbmVlZCB0byBzeW5jIHRoZSBsYXllcnMgaWYgd2UgZ2V0IGEgc3BlY2lh
bCBjYWxsIGZyb20gdGhlIFdlYkNvcmUKKyAgICAvLyBjb21wb3NpdG9yIHRlbGxpbmcgdXMgdG8g
ZG8gc28uIFdlJ2xsIGdldCB0aGF0IGNhbGwgZnJvbSBDaHJvbWVDbGllbnRRdAorICAgIGJvb2wg
c2hvdWxkU3luYzsKKyNlbmRpZgorICAgIC8vIHRoZSBvdmVybGF5IGdldHMgaW5zdGFudGlhdGVk
IHdoZW4gdGhlIHJvb3QgbGF5ZXIgaXMgYXR0YWNoZWQsIGFuZCBnZXQgZGVsZXRlZCB3aGVuIGl0
J3MgZGV0YWNoZWQKKyAgICBRU2hhcmVkUG9pbnRlcjxRR3JhcGhpY3NJdGVtT3ZlcmxheT4gb3Zl
cmxheTsKKworICAgIC8vIHdlIG5lZWQgdG8gcHV0IHRoZSByb290IGdyYXBoaWNzIGxheWVyIGJl
aGluZCB0aGUgb3ZlcmxheSAod2hpY2ggY29udGFpbnMgdGhlIHNjcm9sbGJhcikKKyAgICBlbnVt
IHsgUm9vdEdyYXBoaWNzTGF5ZXJaVmFsdWUsIE92ZXJsYXlaVmFsdWUgfTsKK307CisKIH0KICNl
bmRpZiAvLyBQYWdlQ2xpZW50UXQKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC90ZXN0cy9xd2VicGFn
ZS90c3RfcXdlYnBhZ2UuY3BwIGIvV2ViS2l0L3F0L3Rlc3RzL3F3ZWJwYWdlL3RzdF9xd2VicGFn
ZS5jcHAKaW5kZXggZTJlMDhiMy4uZjExM2YyOSAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L3Rlc3Rz
L3F3ZWJwYWdlL3RzdF9xd2VicGFnZS5jcHAKKysrIGIvV2ViS2l0L3F0L3Rlc3RzL3F3ZWJwYWdl
L3RzdF9xd2VicGFnZS5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICIuLi9XZWJDb3Jl
U3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oIgogI2luY2x1ZGUgPFFEaXI+CiAjaW5j
bHVkZSA8UUdyYXBoaWNzV2lkZ2V0PgorI2luY2x1ZGUgPFFHcmFwaGljc1NjZW5lTW91c2VFdmVu
dD4KICNpbmNsdWRlIDxRTGluZUVkaXQ+CiAjaW5jbHVkZSA8UUxvY2FsZT4KICNpbmNsdWRlIDxR
TWVudT4KQEAgLTEyMiw2ICsxMjMsOCBAQCBwcml2YXRlIHNsb3RzOgogICAgIHZvaWQgdGVzdEpT
UHJvbXB0KCk7CiAgICAgdm9pZCBzaG93TW9kYWxEaWFsb2coKTsKIAorICAgIHZvaWQgc2V0UUdy
YXBoaWNzV2lkZ2V0QXNWaWV3KCk7CisKIHByaXZhdGU6CiAgICAgUVdlYlZpZXcqIG1fdmlldzsK
ICAgICBRV2ViUGFnZSogbV9wYWdlOwpAQCAtMTk3Nyw1ICsxOTgwLDU5IEBAIHZvaWQgdHN0X1FX
ZWJQYWdlOjpzaG93TW9kYWxEaWFsb2coKQogICAgIFFDT01QQVJFKHJlcywgUVN0cmluZygiVGhp
cyBpcyBhIHRlc3QiKSk7CiB9CiAKK2NsYXNzIFdpZGdldCA6IHB1YmxpYyBRR3JhcGhpY3NXaWRn
ZXQKK3sKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIFdpZGdldChRV2ViUGFnZSAqcGFnZSwg
UUdyYXBoaWNzV2lkZ2V0ICpwYXJlbnQgPSAwKQorICAgICAgICA6IFFHcmFwaGljc1dpZGdldChw
YXJlbnQpCisgICAgICAgICwgbV9wYWdlKHBhZ2UpCisgICAgeworICAgICAgICBtX3BhZ2UtPm1h
aW5GcmFtZSgpLT5sb2FkKFFVcmw6OmZyb21Mb2NhbEZpbGUoUURpcjo6Y3VycmVudFBhdGgoKSAr
IFFEaXI6OnNlcGFyYXRvcigpICsgUVN0cmluZzo6ZnJvbUxhdGluMSgiaW5kZXguaHRtbCIpKSk7
CisgICAgICAgIFFPYmplY3Q6OmNvbm5lY3QobV9wYWdlLCBTSUdOQUwocmVwYWludFJlcXVlc3Rl
ZChRUmVjdCkpLCB0aGlzLCBTTE9UKG9uUGFnZVJlcGFpbnRSZXF1ZXN0ZWQoUVJlY3QpKSk7Cisg
ICAgICAgIHJlc2l6ZSg1MDAsIDUwMCk7CisKKyAgICAgICAgbV9wYWdlLT5zZXRWaWV3KHRoaXMp
OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwYWludChRUGFpbnRlciAqcGFpbnRlciwgY29u
c3QgUVN0eWxlT3B0aW9uR3JhcGhpY3NJdGVtICosIFFXaWRnZXQgKiA9IDApCisgICAgeworICAg
ICAgICBtX3BhZ2UtPnNldFZpZXdwb3J0U2l6ZShtX3BhZ2UtPm1haW5GcmFtZSgpLT5jb250ZW50
c1NpemUoKSk7CisgICAgICAgIG1fcGFnZS0+bWFpbkZyYW1lKCktPnJlbmRlcihwYWludGVyKTsK
KyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VQcmVzc0V2ZW50KFFH
cmFwaGljc1NjZW5lTW91c2VFdmVudCAqZSkgeworICAgICAgICAgUU1vdXNlRXZlbnQgZTIoUUV2
ZW50OjpNb3VzZUJ1dHRvblByZXNzLCBlLT5wb3MoKS50b1BvaW50KCksIGUtPmJ1dHRvbigpLCBl
LT5idXR0b25zKCksIGUtPm1vZGlmaWVycygpKTsKKyAgICAgICAgIFFDb3JlQXBwbGljYXRpb246
OnNlbmRFdmVudChtX3BhZ2UsICZlMik7CisgICAgfQorCitwcml2YXRlIFFfU0xPVFM6CisgICAg
dm9pZCBvblBhZ2VSZXBhaW50UmVxdWVzdGVkKGNvbnN0IFFSZWN0ICYpIHsKKyAgICAgICAgdXBk
YXRlKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFFXZWJQYWdlICptX3BhZ2U7Cit9OworCit2
b2lkIHRzdF9RV2ViUGFnZTo6c2V0UUdyYXBoaWNzV2lkZ2V0QXNWaWV3KCkKK3sKKyAgICBRV2Vi
UGFnZSAqcGFnZSA9IG5ldyBRV2ViUGFnZSgpOworCisgICAgUUdyYXBoaWNzV2lkZ2V0ICp3ID0g
bmV3IFdpZGdldChwYWdlKTsKKworICAgIFFHcmFwaGljc1NjZW5lIHNjZW5lOworICAgIHNjZW5l
LnNldFNjZW5lUmVjdChRUmVjdEYoMCwgMCwgMjAwLCAyMDApKTsKKyAgICBzY2VuZS5hZGRJdGVt
KHcpOworCisgICAgUUdyYXBoaWNzVmlldyB2aWV3KCZzY2VuZSk7CisKKyAgICAvLyBXaGVuIHVz
aW5nIGEgUUdyYXBoaWNzV2lkZ2V0IGFzIHZpZXcKKyAgICAvLyBwYWdlLT52aWV3KCkgd2lsbCBy
ZXR1cm4gYSBudWxsIFFXaWRnZXQqLgorICAgIFFXaWRnZXQgKm51bGxXaWRnZXQgPSAwOworICAg
IFFDT01QQVJFKHBhZ2UtPnZpZXcoKSwgbnVsbFdpZGdldCk7Cit9CisKIFFURVNUX01BSU4odHN0
X1FXZWJQYWdlKQogI2luY2x1ZGUgInRzdF9xd2VicGFnZS5tb2MiCi0tIAoxLjcuMC4zCgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55575</attachid>
            <date>2010-05-10 11:10:01 -0700</date>
            <delta_ts>2010-05-11 08:45:36 -0700</delta_ts>
            <desc>PageClientQGraphicsWidget</desc>
            <filename>0001-Add-PageClientQGraphicsWidget.patch</filename>
            <type>text/plain</type>
            <size>29100</size>
            <attacher name="Jesus Sanchez-Palencia">jesus</attacher>
            
              <data encoding="base64">RnJvbSBhNDUyZGQ3ZTIyMGNjNGIyNjcxZjk4YzcwN2IwNWVjNmM2NDk2M2IzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKZXN1cyBTYW5jaGV6LVBhbGVuY2lhIDxqZXN1c0B3ZWJraXQu
b3JnPgpEYXRlOiBNb24sIDEwIE1heSAyMDEwIDE0OjQ4OjE3IC0wMzAwClN1YmplY3Q6IFtQQVRD
SF0gQWRkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24u
CiBRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZSBkb2Vzbid0IGluaGVyaXQgUVdlYlBhZ2VDbGllbnQg
YW55bW9yZQogYW5kIHRoZSBuZWVkZWQgZnVuY3Rpb25zIHdlcmUgbW92ZWQgdG8gdGhpcyBuZXcg
UGFnZUNsaWVudCBjbGFzcywKIGluY2x1ZGluZyBUaWxpbmcgYW5kIEFjY2VsZXJhdGVkIENvbXBv
c2l0ZSBzcGVjaWZpYyBvbmVzLgoKUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgpbUXRdIFBh
Z2VDbGllbnRRdCBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBmb3IgUUdyYXBoaWNzV2lkZ2V0Cmh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzg2NgoKKiBBcGkvcWdyYXBo
aWNzd2Vidmlldy5jcHA6CihRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6UUdyYXBoaWNzV2ViVmll
d1ByaXZhdGUpOgooUUdyYXBoaWNzV2ViVmlld1ByaXZhdGU6On5RR3JhcGhpY3NXZWJWaWV3UHJp
dmF0ZSk6CihRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6c3luY0xheWVycyk6CihRR3JhcGhpY3NX
ZWJWaWV3UHJpdmF0ZTo6X3Ffc2NhbGVDaGFuZ2VkKToKKFFHcmFwaGljc1dlYlZpZXc6OmV2ZW50
KToKKFFHcmFwaGljc1dlYlZpZXc6OnNldFBhZ2UpOgooUUdyYXBoaWNzV2ViVmlldzo6dXBkYXRl
R2VvbWV0cnkpOgooUUdyYXBoaWNzV2ViVmlldzo6c2V0R2VvbWV0cnkpOgooUUdyYXBoaWNzV2Vi
Vmlldzo6c2V0UmVzaXplc1RvQ29udGVudHMpOgoqIFdlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRR
dC5jcHA6CihXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojp+UGFnZUNsaWVudFFH
cmFwaGljc1dpZGdldCk6CihXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzY3Jv
bGwpOgooV2ViQ29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6dXBkYXRlKToKKFdlYkNv
cmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OmNyZWF0ZU9yRGVsZXRlT3ZlcmxheSk6CihX
ZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzeW5jTGF5ZXJzKToKKFdlYkNvcmU6
OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNldFJvb3RHcmFwaGljc0xheWVyKToKKFdlYkNv
cmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6Om1hcmtGb3JTeW5jKToKKFdlYkNvcmU6OlBh
Z2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnVwZGF0ZUNvbXBvc2l0aW5nU2Nyb2xsUG9zaXRpb24p
OgooV2ViQ29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6dXBkYXRlVGlsZWRCYWNraW5n
U3RvcmVTY2FsZSk6CihXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzZXRJbnB1
dE1ldGhvZEVuYWJsZWQpOgooV2ViQ29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6aW5w
dXRNZXRob2RFbmFibGVkKToKKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNl
dElucHV0TWV0aG9kSGludCk6CihXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojpj
dXJzb3IpOgooV2ViQ29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6dXBkYXRlQ3Vyc29y
KToKKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnBhbGV0dGUpOgooV2ViQ29y
ZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2NyZWVuTnVtYmVyKToKKFdlYkNvcmU6OlBh
Z2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6Om93bmVyV2lkZ2V0KToKKFdlYkNvcmU6OlBhZ2VDbGll
bnRRR3JhcGhpY3NXaWRnZXQ6Omdlb21ldHJ5UmVsYXRpdmVUb093bmVyV2lkZ2V0KToKKFdlYkNv
cmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnBsdWdpblBhcmVudCk6CihXZWJDb3JlOjpQ
YWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzdHlsZSk6CiogV2ViQ29yZVN1cHBvcnQvUGFnZUNs
aWVudFF0Lmg6CihXZWJDb3JlOjpRR3JhcGhpY3NJdGVtT3ZlcmxheTo6cGFnZSk6CihXZWJDb3Jl
OjpRR3JhcGhpY3NJdGVtT3ZlcmxheTo6Ym91bmRpbmdSZWN0KToKKFdlYkNvcmU6OlFHcmFwaGlj
c0l0ZW1PdmVybGF5OjpwYWludCk6CihXZWJDb3JlOjpRR3JhcGhpY3NJdGVtT3ZlcmxheTo6cHJl
cGFyZUdyYXBoaWNzSXRlbUdlb21ldHJ5Q2hhbmdlKToKKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3Jh
cGhpY3NXaWRnZXQ6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQpOgooV2ViQ29yZTo6UGFnZUNs
aWVudFFHcmFwaGljc1dpZGdldDo6aXNRV2lkZ2V0Q2xpZW50KToKKFdlYkNvcmU6OlBhZ2VDbGll
bnRRR3JhcGhpY3NXaWRnZXQ6OmFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcpOgooV2ViQ29y
ZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6KToKLS0tCiBXZWJLaXQvcXQvQXBpL3FncmFw
aGljc3dlYnZpZXcuY3BwICAgICAgICB8ICAzMTQgKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIFdlYktpdC9xdC9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgIHwgICA1MyArKysr
KwogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAgfCAgMTkzICsrKysr
KysrKysrKysrKysrKwogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oICAg
fCAgMTM2ICsrKysrKysrKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgNDAyIGluc2VydGlvbnMoKyks
IDI5NCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3FncmFwaGljc3dl
YnZpZXcuY3BwIGIvV2ViS2l0L3F0L0FwaS9xZ3JhcGhpY3N3ZWJ2aWV3LmNwcAppbmRleCA3ZmZh
NGIyLi5kNDI1YWI1IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3FncmFwaGljc3dlYnZpZXcu
Y3BwCisrKyBiL1dlYktpdC9xdC9BcGkvcWdyYXBoaWNzd2Vidmlldy5jcHAKQEAgLTI1LDcgKzI1
LDcgQEAKICNpbmNsdWRlICJxd2ViZnJhbWVfcC5oIgogI2luY2x1ZGUgInF3ZWJwYWdlLmgiCiAj
aW5jbHVkZSAicXdlYnBhZ2VfcC5oIgotI2luY2x1ZGUgIlFXZWJQYWdlQ2xpZW50LmgiCisjaW5j
bHVkZSAiUGFnZUNsaWVudFF0LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgpAQCAtNDYsOTUgKzQ2LDIz
IEBACiAjZW5kaWYKICNpbmNsdWRlIDxTZXR0aW5ncy5oPgogCi0vLyB0aGUgb3ZlcmxheSBpcyBo
ZXJlIGZvciBvbmUgcmVhc29uIG9ubHk6IHRvIGhhdmUgdGhlIHNjcm9sbC1iYXJzIGFuZCBvdGhl
cgotLy8gZXh0cmEgVUkgZWxlbWVudHMgYXBwZWFyIG9uIHRvcCBvZiBhbnkgUUdyYXBoaWNzSXRl
bXMgY3JlYXRlZCBieSBDU1MgY29tcG9zaXRpbmcgbGF5ZXJzCi1jbGFzcyBRR3JhcGhpY3NXZWJW
aWV3T3ZlcmxheSA6IHB1YmxpYyBRR3JhcGhpY3NJdGVtIHsKLSAgICBwdWJsaWM6Ci0gICAgUUdy
YXBoaWNzV2ViVmlld092ZXJsYXkoUUdyYXBoaWNzV2ViVmlldyogdmlldykKLSAgICAgICAgICAg
IDpRR3JhcGhpY3NJdGVtKHZpZXcpCi0gICAgICAgICAgICAsIHEodmlldykKLSAgICB7Ci0gICAg
ICAgIHNldFBvcygwLCAwKTsKLSNpZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNCwg
NiwgMCkKLSAgICAgICAgc2V0RmxhZyhRR3JhcGhpY3NJdGVtOjpJdGVtVXNlc0V4dGVuZGVkU3R5
bGVPcHRpb24sIHRydWUpOwotI2VuZGlmCi0gICAgICAgIHNldENhY2hlTW9kZShRR3JhcGhpY3NJ
dGVtOjpEZXZpY2VDb29yZGluYXRlQ2FjaGUpOwotICAgIH0KLQotICAgIFFSZWN0RiBib3VuZGlu
Z1JlY3QoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHEtPmJvdW5kaW5nUmVjdCgpOwot
ICAgIH0KLQotICAgIHZvaWQgcGFpbnQoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTdHlsZU9w
dGlvbkdyYXBoaWNzSXRlbSogb3B0aW9ucywgUVdpZGdldCopCi0gICAgewotICAgICAgICBxLT5w
YWdlKCktPm1haW5GcmFtZSgpLT5yZW5kZXIocGFpbnRlciwgc3RhdGljX2Nhc3Q8UVdlYkZyYW1l
OjpSZW5kZXJMYXllcj4oUVdlYkZyYW1lOjpBbGxMYXllcnMmKH5RV2ViRnJhbWU6OkNvbnRlbnRz
TGF5ZXIpKSwgb3B0aW9ucy0+ZXhwb3NlZFJlY3QudG9SZWN0KCkpOwotICAgIH0KLQotICAgIGZy
aWVuZCBjbGFzcyBRR3JhcGhpY3NXZWJWaWV3OwotICAgIFFHcmFwaGljc1dlYlZpZXcqIHE7Ci19
OwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLWNsYXNzIFFHcmFwaGljc1dlYlZpZXdQcml2
YXRlIDogcHVibGljIFFXZWJQYWdlQ2xpZW50IHsKK2NsYXNzIFFHcmFwaGljc1dlYlZpZXdQcml2
YXRlIHsKIHB1YmxpYzoKICAgICBRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZShRR3JhcGhpY3NXZWJW
aWV3KiBwYXJlbnQpCiAgICAgICAgIDogcShwYXJlbnQpCiAgICAgICAgICwgcGFnZSgwKQotICAg
ICAgICAsIHJlc2l6ZXNUb0NvbnRlbnRzKGZhbHNlKQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKLSAgICAgICAgLCBzaG91bGRTeW5jKGZhbHNlKQotI2VuZGlmCi0gICAgewotI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICAgICAgLy8gdGhlIG92ZXJsYXkgYW5k
IHN0YXlzIGFsaXZlIGZvciB0aGUgbGlmZXRpbWUgb2YKLSAgICAgICAgLy8gdGhpcyBRR3JhcGhp
Y3NXZWJWaWV3IGFzIHRoZSBzY3JvbGxiYXJzIGFyZSBuZWVkZWQgd2hlbiB0aGVyZSdzIG5vIGNv
bXBvc2l0aW5nCi0gICAgICAgIHEtPnNldEZsYWcoUUdyYXBoaWNzSXRlbTo6SXRlbVVzZXNFeHRl
bmRlZFN0eWxlT3B0aW9uKTsKLSAgICAgICAgc3luY01ldGFNZXRob2QgPSBxLT5tZXRhT2JqZWN0
KCktPm1ldGhvZChxLT5tZXRhT2JqZWN0KCktPmluZGV4T2ZNZXRob2QoInN5bmNMYXllcnMoKSIp
KTsKLSNlbmRpZgotICAgIH0KLQotICAgIHZpcnR1YWwgflFHcmFwaGljc1dlYlZpZXdQcml2YXRl
KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsKGludCBkeCwgaW50IGR5LCBjb25zdCBRUmVj
dCYpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoY29uc3QgUVJlY3QmIGRpcnR5UmVjdCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9kRW5hYmxlZChib29sIGVuYWJsZSk7Ci0gICAg
dmlydHVhbCBib29sIGlucHV0TWV0aG9kRW5hYmxlZCgpIGNvbnN0OwotI2lmIFFUX1ZFUlNJT04g
Pj0gMHgwNDA2MDAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW5wdXRNZXRob2RIaW50KFF0OjpJbnB1
dE1ldGhvZEhpbnQgaGludCwgYm9vbCBlbmFibGUpOwotI2VuZGlmCisgICAgICAgICwgcmVzaXpl
c1RvQ29udGVudHMoZmFsc2UpIHt9CiAKLSNpZm5kZWYgUVRfTk9fQ1VSU09SCi0gICAgdmlydHVh
bCBRQ3Vyc29yIGN1cnNvcigpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDdXJzb3Io
Y29uc3QgUUN1cnNvciYgY3Vyc29yKTsKLSNlbmRpZgotCi0gICAgdmlydHVhbCBRUGFsZXR0ZSBw
YWxldHRlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgc2NyZWVuTnVtYmVyKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBRV2lkZ2V0KiBvd25lcldpZGdldCgpIGNvbnN0OwotICAgIHZpcnR1YWwgUVJl
Y3QgZ2VvbWV0cnlSZWxhdGl2ZVRvT3duZXJXaWRnZXQoKSBjb25zdDsKLQotICAgIHZpcnR1YWwg
UU9iamVjdCogcGx1Z2luUGFyZW50KCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFFTdHlsZSogc3R5
bGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIH5RR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZSgpIHt9Owog
CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIHZpcnR1YWwgdm9pZCBzZXRS
b290R3JhcGhpY3NMYXllcihRR3JhcGhpY3NJdGVtKiBsYXllcik7Ci0gICAgdmlydHVhbCB2b2lk
IG1hcmtGb3JTeW5jKGJvb2wgc2NoZWR1bGVTeW5jKTsKLSAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0
aW5nU2Nyb2xsUG9zaXRpb24oKTsKLQotICAgIC8vIFFHcmFwaGljc1dlYlZpZXcgY2FuIHJlbmRl
ciBjb21wb3NpdGVkIGxheWVycwotICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NBY2NlbGVyYXRlZENv
bXBvc2l0aW5nKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZvaWQgc3luY0xheWVycygp
OwogI2VuZGlmCiAKICAgICB2b2lkIHVwZGF0ZVJlc2l6ZXNUb0NvbnRlbnRzRm9yUGFnZSgpOwog
ICAgIFFSZWN0RiBncmFwaGljc0l0ZW1WaXNpYmxlUmVjdCgpIGNvbnN0OwotI2lmIEVOQUJMRShU
SUxFRF9CQUNLSU5HX1NUT1JFKQotICAgIHZvaWQgdXBkYXRlVGlsZWRCYWNraW5nU3RvcmVTY2Fs
ZSgpOwotI2VuZGlmCi0KLSAgICB2b2lkIGNyZWF0ZU9yRGVsZXRlT3ZlcmxheSgpOwotCi0gICAg
dm9pZCBzeW5jTGF5ZXJzKCk7CiAKICAgICB2b2lkIHVuc2V0UGFnZUlmRXhpc3RzKCk7CiAKQEAg
LTE0NywxMDIgKzc1LDE4IEBAIHB1YmxpYzoKIAogICAgIFFHcmFwaGljc1dlYlZpZXcqIHE7CiAg
ICAgUVdlYlBhZ2UqIHBhZ2U7Ci0KICAgICBib29sIHJlc2l6ZXNUb0NvbnRlbnRzOwogCi0gICAg
Ly8gdGhlIG92ZXJsYXkgZ2V0cyBpbnN0YW50aWF0ZWQgd2hlbiB0aGUgcm9vdCBsYXllciBpcyBh
dHRhY2hlZCwgYW5kIGdldCBkZWxldGVkIHdoZW4gaXQncyBkZXRhY2hlZAotICAgIFFTaGFyZWRQ
b2ludGVyPFFHcmFwaGljc1dlYlZpZXdPdmVybGF5PiBvdmVybGF5OwotCi0gICAgLy8gd2UgbmVl
ZCB0byBwdXQgdGhlIHJvb3QgZ3JhcGhpY3MgbGF5ZXIgYmVoaW5kIHRoZSBvdmVybGF5ICh3aGlj
aCBjb250YWlucyB0aGUgc2Nyb2xsYmFyKQotICAgIGVudW0geyBSb290R3JhcGhpY3NMYXllclpW
YWx1ZSwgT3ZlcmxheVpWYWx1ZSB9OwotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQotICAgIFFXZWFrUG9pbnRlcjxRR3JhcGhpY3NPYmplY3Q+IHJvb3RHcmFwaGljc0xheWVyOwot
ICAgIC8vIHdlIG5lZWQgdG8gc3luYyB0aGUgbGF5ZXJzIGlmIHdlIGdldCBhIHNwZWNpYWwgY2Fs
bCBmcm9tIHRoZSBXZWJDb3JlCi0gICAgLy8gY29tcG9zaXRvciB0ZWxsaW5nIHVzIHRvIGRvIHNv
LiBXZSdsbCBnZXQgdGhhdCBjYWxsIGZyb20gQ2hyb21lQ2xpZW50UXQKLSAgICBib29sIHNob3Vs
ZFN5bmM7Ci0KLSAgICAvLyB3ZSBoYXZlIHRvIGZsdXNoIHF1aXRlIG9mdGVuLCBzbyB3ZSB1c2Ug
YSBtZXRhLW1ldGhvZCBpbnN0ZWFkIG9mIFFUaW1lcjo6c2luZ2xlU2hvdCBmb3IgcHV0dGluZyB0
aGUgZXZlbnQgaW4gdGhlIHF1ZXVlCi0gICAgUU1ldGFNZXRob2Qgc3luY01ldGFNZXRob2Q7Ci0j
ZW5kaWYKKyAgICAvLyBKdXN0IGEgY29udmVuaWVuY2UgdG8gYXZvaWQgdXNpbmcgcGFnZS0+Y2xp
ZW50LT5vdmVybGF5IGFsd2F5cworICAgIFFTaGFyZWRQb2ludGVyPFFHcmFwaGljc0l0ZW1PdmVy
bGF5PiBvdmVybGF5OwogfTsKIAotUUdyYXBoaWNzV2ViVmlld1ByaXZhdGU6On5RR3JhcGhpY3NX
ZWJWaWV3UHJpdmF0ZSgpCi17CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAg
IGlmICghcm9vdEdyYXBoaWNzTGF5ZXIpCi0gICAgICAgIHJldHVybjsKLSAgICAvLyB3ZSBkb24n
dCBuZWVkIHRvIGRlbGV0ZSB0aGUgcm9vdCBncmFwaGljcyBsYXllci4gVGhlIGxpZmVjeWNsZSBp
cyBtYW5hZ2VkIGluIEdyYXBoaWNzTGF5ZXJRdC5jcHAuCi0gICAgcm9vdEdyYXBoaWNzTGF5ZXIu
ZGF0YSgpLT5zZXRQYXJlbnRJdGVtKDApOwotICAgIHEtPnNjZW5lKCktPnJlbW92ZUl0ZW0ocm9v
dEdyYXBoaWNzTGF5ZXIuZGF0YSgpKTsKLSNlbmRpZgotfQotCi12b2lkIFFHcmFwaGljc1dlYlZp
ZXdQcml2YXRlOjpjcmVhdGVPckRlbGV0ZU92ZXJsYXkoKQotewotICAgIGJvb2wgdXNlT3Zlcmxh
eSA9IGZhbHNlOwotICAgIGlmICghcmVzaXplc1RvQ29udGVudHMpIHsKLSNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCi0gICAgICAgIHVzZU92ZXJsYXkgPSB1c2VPdmVybGF5IHx8IHJv
b3RHcmFwaGljc0xheWVyOwotI2VuZGlmCi0jaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUp
Ci0gICAgICAgIHVzZU92ZXJsYXkgPSB1c2VPdmVybGF5IHx8IFFXZWJGcmFtZVByaXZhdGU6OmNv
cmUocS0+cGFnZSgpLT5tYWluRnJhbWUoKSktPnRpbGVkQmFja2luZ1N0b3JlKCk7Ci0jZW5kaWYK
LSAgICB9Ci0gICAgaWYgKHVzZU92ZXJsYXkgPT0gISFvdmVybGF5KQotICAgICAgICByZXR1cm47
Ci0gICAgaWYgKHVzZU92ZXJsYXkpIHsKLSAgICAgICAgb3ZlcmxheSA9IFFTaGFyZWRQb2ludGVy
PFFHcmFwaGljc1dlYlZpZXdPdmVybGF5PihuZXcgUUdyYXBoaWNzV2ViVmlld092ZXJsYXkocSkp
OwotICAgICAgICBvdmVybGF5LT5zZXRaVmFsdWUoT3ZlcmxheVpWYWx1ZSk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIG92ZXJsYXkuY2xlYXIoKTsKLX0KLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKLXZvaWQgUUdyYXBoaWNzV2ViVmlld1ByaXZhdGU6OnNldFJvb3RHcmFwaGljc0xh
eWVyKFFHcmFwaGljc0l0ZW0qIGxheWVyKQotewotICAgIGlmIChyb290R3JhcGhpY3NMYXllcikg
ewotICAgICAgICByb290R3JhcGhpY3NMYXllci5kYXRhKCktPnNldFBhcmVudEl0ZW0oMCk7Ci0g
ICAgICAgIHEtPnNjZW5lKCktPnJlbW92ZUl0ZW0ocm9vdEdyYXBoaWNzTGF5ZXIuZGF0YSgpKTsK
LSAgICAgICAgUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShxLT5wYWdlKCktPm1haW5GcmFtZSgpKS0+
dmlldygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZVJlY3Vyc2l2ZSgpOwotICAgIH0KLQotICAgIHJv
b3RHcmFwaGljc0xheWVyID0gbGF5ZXIgPyBsYXllci0+dG9HcmFwaGljc09iamVjdCgpIDogMDsK
LQotICAgIGlmIChsYXllcikgewotICAgICAgICBsYXllci0+c2V0RmxhZyhRR3JhcGhpY3NJdGVt
OjpJdGVtQ2xpcHNDaGlsZHJlblRvU2hhcGUsIHRydWUpOwotICAgICAgICBsYXllci0+c2V0UGFy
ZW50SXRlbShxKTsKLSAgICAgICAgbGF5ZXItPnNldFpWYWx1ZShSb290R3JhcGhpY3NMYXllclpW
YWx1ZSk7Ci0gICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nU2Nyb2xsUG9zaXRpb24oKTsKLSAgICB9
Ci0gICAgY3JlYXRlT3JEZWxldGVPdmVybGF5KCk7Ci19Ci0KLXZvaWQgUUdyYXBoaWNzV2ViVmll
d1ByaXZhdGU6Om1hcmtGb3JTeW5jKGJvb2wgc2NoZWR1bGVTeW5jKQotewotICAgIHNob3VsZFN5
bmMgPSB0cnVlOwotICAgIGlmIChzY2hlZHVsZVN5bmMpCi0gICAgICAgIHN5bmNNZXRhTWV0aG9k
Lmludm9rZShxLCBRdDo6UXVldWVkQ29ubmVjdGlvbik7Ci19Ci0KLXZvaWQgUUdyYXBoaWNzV2Vi
Vmlld1ByaXZhdGU6OnVwZGF0ZUNvbXBvc2l0aW5nU2Nyb2xsUG9zaXRpb24oKQotewotICAgIGlm
IChyb290R3JhcGhpY3NMYXllciAmJiBxLT5wYWdlKCkgJiYgcS0+cGFnZSgpLT5tYWluRnJhbWUo
KSkgewotICAgICAgICBjb25zdCBRUG9pbnQgc2Nyb2xsUG9zaXRpb24gPSBxLT5wYWdlKCktPm1h
aW5GcmFtZSgpLT5zY3JvbGxQb3NpdGlvbigpOwotICAgICAgICByb290R3JhcGhpY3NMYXllci5k
YXRhKCktPnNldFBvcygtc2Nyb2xsUG9zaXRpb24pOwotICAgIH0KLX0KLSNlbmRpZgotCiB2b2lk
IFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjpzeW5jTGF5ZXJzKCkKIHsKLSNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKHNob3VsZFN5bmMpIHsKLSAgICAgICAgUVdlYkZy
YW1lUHJpdmF0ZTo6Y29yZShxLT5wYWdlKCktPm1haW5GcmFtZSgpKS0+dmlldygpLT5zeW5jQ29t
cG9zaXRpbmdTdGF0ZVJlY3Vyc2l2ZSgpOwotICAgICAgICBzaG91bGRTeW5jID0gZmFsc2U7Ci0g
ICAgfQotI2VuZGlmCisgICAgc3RhdGljX2Nhc3Q8UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldCo+
KHBhZ2UtPmQtPmNsaWVudCktPnN5bmNMYXllcnMoKTsKIH0KKyNlbmRpZgogCiB2b2lkIFFHcmFw
aGljc1dlYlZpZXdQcml2YXRlOjpfcV9kb0xvYWRGaW5pc2hlZChib29sIHN1Y2Nlc3MpCiB7CkBA
IC0yNzMsMTE3ICsxMTcsNiBAQCB2b2lkIFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjpfcV9wYWdl
RGVzdHJveWVkKCkKICAgICBxLT5zZXRQYWdlKDApOwogfQogCi12b2lkIFFHcmFwaGljc1dlYlZp
ZXdQcml2YXRlOjpzY3JvbGwoaW50IGR4LCBpbnQgZHksIGNvbnN0IFFSZWN0JiByZWN0VG9TY3Jv
bGwpCi17Ci0gICAgcS0+c2Nyb2xsKHFyZWFsKGR4KSwgcXJlYWwoZHkpLCBRUmVjdEYocmVjdFRv
U2Nyb2xsKSk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgdXBkYXRl
Q29tcG9zaXRpbmdTY3JvbGxQb3NpdGlvbigpOwotI2VuZGlmCi19Ci0KLXZvaWQgUUdyYXBoaWNz
V2ViVmlld1ByaXZhdGU6OnVwZGF0ZShjb25zdCBRUmVjdCAmIGRpcnR5UmVjdCkKLXsKLSAgICBx
LT51cGRhdGUoUVJlY3RGKGRpcnR5UmVjdCkpOwotCi0gICAgY3JlYXRlT3JEZWxldGVPdmVybGF5
KCk7Ci0gICAgaWYgKG92ZXJsYXkpCi0gICAgICAgIG92ZXJsYXktPnVwZGF0ZShRUmVjdEYoZGly
dHlSZWN0KSk7Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIHVwZGF0ZUNv
bXBvc2l0aW5nU2Nyb2xsUG9zaXRpb24oKTsKLSAgICBzeW5jTGF5ZXJzKCk7Ci0jZW5kaWYKLX0K
LQotCi12b2lkIFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjpzZXRJbnB1dE1ldGhvZEVuYWJsZWQo
Ym9vbCBlbmFibGUpCi17Ci0jaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDQsIDYs
IDApCi0gICAgcS0+c2V0RmxhZyhRR3JhcGhpY3NJdGVtOjpJdGVtQWNjZXB0c0lucHV0TWV0aG9k
LCBlbmFibGUpOwotI2VuZGlmCi19Ci0KLWJvb2wgUUdyYXBoaWNzV2ViVmlld1ByaXZhdGU6Omlu
cHV0TWV0aG9kRW5hYmxlZCgpIGNvbnN0Ci17Ci0jaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9O
X0NIRUNLKDQsIDYsIDApCi0gICAgcmV0dXJuIHEtPmZsYWdzKCkgJiBRR3JhcGhpY3NJdGVtOjpJ
dGVtQWNjZXB0c0lucHV0TWV0aG9kOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYK
LX0KLQotI2lmIFFUX1ZFUlNJT04gPj0gMHgwNDA2MDAKLXZvaWQgUUdyYXBoaWNzV2ViVmlld1By
aXZhdGU6OnNldElucHV0TWV0aG9kSGludChRdDo6SW5wdXRNZXRob2RIaW50IGhpbnQsIGJvb2wg
ZW5hYmxlKQotewotICAgIGlmIChlbmFibGUpCi0gICAgICAgIHEtPnNldElucHV0TWV0aG9kSGlu
dHMocS0+aW5wdXRNZXRob2RIaW50cygpIHwgaGludCk7Ci0gICAgZWxzZQotICAgICAgICBxLT5z
ZXRJbnB1dE1ldGhvZEhpbnRzKHEtPmlucHV0TWV0aG9kSGludHMoKSAmIH5oaW50KTsKLX0KLSNl
bmRpZgotI2lmbmRlZiBRVF9OT19DVVJTT1IKLVFDdXJzb3IgUUdyYXBoaWNzV2ViVmlld1ByaXZh
dGU6OmN1cnNvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHEtPmN1cnNvcigpOwotfQotCi12b2lk
IFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjp1cGRhdGVDdXJzb3IoY29uc3QgUUN1cnNvciYgY3Vy
c29yKQotewotICAgIHEtPnNldEN1cnNvcihjdXJzb3IpOwotfQotI2VuZGlmCi0KLVFQYWxldHRl
IFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjpwYWxldHRlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
cS0+cGFsZXR0ZSgpOwotfQotCi1pbnQgUUdyYXBoaWNzV2ViVmlld1ByaXZhdGU6OnNjcmVlbk51
bWJlcigpIGNvbnN0Ci17Ci0jaWYgZGVmaW5lZChRX1dTX1gxMSkKLSAgICBpZiAoUUdyYXBoaWNz
U2NlbmUqIHNjZW5lID0gcS0+c2NlbmUoKSkgewotICAgICAgICBjb25zdCBRTGlzdDxRR3JhcGhp
Y3NWaWV3Kj4gdmlld3MgPSBzY2VuZS0+dmlld3MoKTsKLQotICAgICAgICBpZiAoIXZpZXdzLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiB2aWV3cy5hdCgwKS0+eDExSW5mbygpLnNjcmVl
bigpOwotICAgIH0KLSNlbmRpZgotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLVFXaWRnZXQqIFFHcmFw
aGljc1dlYlZpZXdQcml2YXRlOjpvd25lcldpZGdldCgpIGNvbnN0Ci17Ci0gICAgaWYgKFFHcmFw
aGljc1NjZW5lKiBzY2VuZSA9IHEtPnNjZW5lKCkpIHsKLSAgICAgICAgY29uc3QgUUxpc3Q8UUdy
YXBoaWNzVmlldyo+IHZpZXdzID0gc2NlbmUtPnZpZXdzKCk7Ci0gICAgICAgIHJldHVybiB2aWV3
cy52YWx1ZSgwKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVFSZWN0IFFHcmFwaGljc1dl
YlZpZXdQcml2YXRlOjpnZW9tZXRyeVJlbGF0aXZlVG9Pd25lcldpZGdldCgpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFxLT5zY2VuZSgpKQotICAgICAgICByZXR1cm4gUVJlY3QoKTsKLQotICAgIFFMaXN0
PFFHcmFwaGljc1ZpZXcqPiB2aWV3cyA9IHEtPnNjZW5lKCktPnZpZXdzKCk7Ci0gICAgaWYgKHZp
ZXdzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFFSZWN0KCk7Ci0KLSAgICBRR3JhcGhpY3NW
aWV3KiB2aWV3ID0gdmlld3MuYXQoMCk7Ci0gICAgcmV0dXJuIHZpZXctPm1hcEZyb21TY2VuZShx
LT5ib3VuZGluZ1JlY3QoKSkuYm91bmRpbmdSZWN0KCk7Ci19Ci0KLVFPYmplY3QqIFFHcmFwaGlj
c1dlYlZpZXdQcml2YXRlOjpwbHVnaW5QYXJlbnQoKSBjb25zdAotewotICAgIHJldHVybiBxOwot
fQotCi1RU3R5bGUqIFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjpzdHlsZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIHEtPnN0eWxlKCk7Ci19Ci0KIHZvaWQgUUdyYXBoaWNzV2ViVmlld1ByaXZhdGU6
OnVwZGF0ZVJlc2l6ZXNUb0NvbnRlbnRzRm9yUGFnZSgpCiB7CiAgICAgQVNTRVJUKHBhZ2UpOwpA
QCAtNDE2LDcgKzE0OSw3IEBAIHZvaWQgUUdyYXBoaWNzV2ViVmlld1ByaXZhdGU6Ol9xX2NvbnRl
bnRzU2l6ZUNoYW5nZWQoY29uc3QgUVNpemUmIHNpemUpCiB2b2lkIFFHcmFwaGljc1dlYlZpZXdQ
cml2YXRlOjpfcV9zY2FsZUNoYW5nZWQoKQogewogI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NU
T1JFKQotICAgIHVwZGF0ZVRpbGVkQmFja2luZ1N0b3JlU2NhbGUoKTsKKyAgICBzdGF0aWNfY2Fz
dDxQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Kj4ocGFnZS0+ZC0+Y2xpZW50KS0+dXBkYXRlVGls
ZWRCYWNraW5nU3RvcmVTY2FsZSgpOwogI2VuZGlmCiB9CiAKQEAgLTQzOSwxNiArMTcyLDYgQEAg
UVJlY3RGIFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjpncmFwaGljc0l0ZW1WaXNpYmxlUmVjdCgp
IGNvbnN0CiAgICAgcmV0dXJuIHEtPm1hcFJlY3RGcm9tU2NlbmUoUVJlY3RGKFFQb2ludCh4UG9z
aXRpb24sIHlQb3NpdGlvbiksIHZpZXdzWzBdLT52aWV3cG9ydCgpLT5zaXplKCkpKTsKIH0KIAot
I2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotdm9pZCBRR3JhcGhpY3NXZWJWaWV3UHJp
dmF0ZTo6dXBkYXRlVGlsZWRCYWNraW5nU3RvcmVTY2FsZSgpCi17Ci0gICAgV2ViQ29yZTo6VGls
ZWRCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUocGFn
ZS0+bWFpbkZyYW1lKCkpLT50aWxlZEJhY2tpbmdTdG9yZSgpOwotICAgIGlmICghYmFja2luZ1N0
b3JlKQotICAgICAgICByZXR1cm47Ci0gICAgYmFja2luZ1N0b3JlLT5zZXRDb250ZW50c1NjYWxl
KHEtPnNjYWxlKCkpOwotfQotI2VuZGlmCi0KIC8qIQogICAgIFxjbGFzcyBRR3JhcGhpY3NXZWJW
aWV3CiAgICAgXGJyaWVmIFRoZSBRR3JhcGhpY3NXZWJWaWV3IGNsYXNzIGFsbG93cyBXZWIgY29u
dGVudCB0byBiZSBhZGRlZCB0byBhIEdyYXBoaWNzVmlldy4KQEAgLTcxMSw3ICs0MzQsNyBAQCBi
b29sIFFHcmFwaGljc1dlYlZpZXc6OmV2ZW50KFFFdmVudCogZXZlbnQpCiAgICAgICAgICAgICAg
ICAgLy8gV2ViQ29yZS4KICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQWRkIGEgUUV2ZW50OjpD
dXJzb3JVbnNldCBvciBzaW1pbGFyIHRvIFF0LgogICAgICAgICAgICAgICAgIGlmIChjdXJzb3Io
KS5zaGFwZSgpID09IFF0OjpBcnJvd0N1cnNvcikKLSAgICAgICAgICAgICAgICAgICAgZC0+cmVz
ZXRDdXJzb3IoKTsKKyAgICAgICAgICAgICAgICAgICAgZC0+cGFnZS0+ZC0+Y2xpZW50LT5yZXNl
dEN1cnNvcigpOwogICAgICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIH0KQEAgLTc2MiwxMCAr
NDg1LDExIEBAIHZvaWQgUUdyYXBoaWNzV2ViVmlldzo6c2V0UGFnZShRV2ViUGFnZSogcGFnZSkK
ICAgICBpZiAoIWQtPnBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGQtPnBhZ2UtPmQtPmNs
aWVudCA9IGQ7IC8vIHNldCB0aGUgcGFnZSBjbGllbnQKKyAgICBkLT5wYWdlLT5kLT5jbGllbnQg
PSBuZXcgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldCh0aGlzLCBwYWdlKTsgLy8gc2V0IHRoZSBw
YWdlIGNsaWVudAorICAgIGQtPm92ZXJsYXkgPSBzdGF0aWNfY2FzdDxQYWdlQ2xpZW50UUdyYXBo
aWNzV2lkZ2V0Kj4oZC0+cGFnZS0+ZC0+Y2xpZW50KS0+b3ZlcmxheTsKIAogICAgIGlmIChkLT5v
dmVybGF5KQotICAgICAgICBkLT5vdmVybGF5LT5wcmVwYXJlR2VvbWV0cnlDaGFuZ2UoKTsKKyAg
ICAgICAgZC0+b3ZlcmxheS0+cHJlcGFyZUdyYXBoaWNzSXRlbUdlb21ldHJ5Q2hhbmdlKCk7CiAK
ICAgICBRU2l6ZSBzaXplID0gZ2VvbWV0cnkoKS5zaXplKCkudG9TaXplKCk7CiAgICAgcGFnZS0+
c2V0Vmlld3BvcnRTaXplKHNpemUpOwpAQCAtODc2LDcgKzYwMCw3IEBAIHFyZWFsIFFHcmFwaGlj
c1dlYlZpZXc6Onpvb21GYWN0b3IoKSBjb25zdAogdm9pZCBRR3JhcGhpY3NXZWJWaWV3Ojp1cGRh
dGVHZW9tZXRyeSgpCiB7CiAgICAgaWYgKGQtPm92ZXJsYXkpCi0gICAgICAgIGQtPm92ZXJsYXkt
PnByZXBhcmVHZW9tZXRyeUNoYW5nZSgpOworICAgICAgICBkLT5vdmVybGF5LT5wcmVwYXJlR3Jh
cGhpY3NJdGVtR2VvbWV0cnlDaGFuZ2UoKTsKIAogICAgIFFHcmFwaGljc1dpZGdldDo6dXBkYXRl
R2VvbWV0cnkoKTsKIApAQCAtODk0LDcgKzYxOCw3IEBAIHZvaWQgUUdyYXBoaWNzV2ViVmlldzo6
c2V0R2VvbWV0cnkoY29uc3QgUVJlY3RGJiByZWN0KQogICAgIFFHcmFwaGljc1dpZGdldDo6c2V0
R2VvbWV0cnkocmVjdCk7CiAKICAgICBpZiAoZC0+b3ZlcmxheSkKLSAgICAgICAgZC0+b3Zlcmxh
eS0+cHJlcGFyZUdlb21ldHJ5Q2hhbmdlKCk7CisgICAgICAgIGQtPm92ZXJsYXktPnByZXBhcmVH
cmFwaGljc0l0ZW1HZW9tZXRyeUNoYW5nZSgpOwogCiAgICAgaWYgKCFkLT5wYWdlKQogICAgICAg
ICByZXR1cm47CkBAIC0xMTI4LDggKzg1MiwxMCBAQCB2b2lkIFFHcmFwaGljc1dlYlZpZXc6OnNl
dFJlc2l6ZXNUb0NvbnRlbnRzKGJvb2wgZW5hYmxlZCkKICAgICBpZiAoZC0+cmVzaXplc1RvQ29u
dGVudHMgPT0gZW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwogICAgIGQtPnJlc2l6ZXNUb0NvbnRl
bnRzID0gZW5hYmxlZDsKLSAgICBpZiAoZC0+cGFnZSkKKyAgICBpZiAoZC0+cGFnZSkgeworICAg
ICAgICBzdGF0aWNfY2FzdDxQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Kj4oZC0+cGFnZS0+ZC0+
Y2xpZW50KS0+dmlld1Jlc2l6ZXNUb0NvbnRlbnRzID0gZW5hYmxlZDsKICAgICAgICAgZC0+dXBk
YXRlUmVzaXplc1RvQ29udGVudHNGb3JQYWdlKCk7CisgICAgfQogfQogCiBib29sIFFHcmFwaGlj
c1dlYlZpZXc6OnJlc2l6ZXNUb0NvbnRlbnRzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1dlYktpdC9x
dC9DaGFuZ2VMb2cgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDM4NWQ1ODEuLmM0MGU0YzQg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L3F0L0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDU2IEBACisyMDEwLTA1LTEwICBKZXN1cyBTYW5jaGV6LVBhbGVuY2lhICA8
amVzdXNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldCBzcGVjaWZpYyBpbXBsZW1l
bnRhdGlvbi4KKyAgICAgICAgUUdyYXBoaWNzV2ViVmlld1ByaXZhdGUgZG9lc24ndCBpbmhlcml0
IFFXZWJQYWdlQ2xpZW50IGFueW1vcmUKKyAgICAgICAgYW5kIHRoZSBuZWVkZWQgZnVuY3Rpb25z
IHdlcmUgbW92ZWQgdG8gdGhpcyBuZXcgUGFnZUNsaWVudCBjbGFzcywKKyAgICAgICAgaW5jbHVk
aW5nIFRpbGluZyBhbmQgQWNjZWxlcmF0ZWQgQ29tcG9zaXRlIHNwZWNpZmljIG9uZXMuCisKKyAg
ICAgICAgW1F0XSBQYWdlQ2xpZW50UXQgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZm9yIFFHcmFw
aGljc1dpZGdldAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Mzc4NjYKKworICAgICAgICAqIEFwaS9xZ3JhcGhpY3N3ZWJ2aWV3LmNwcDoKKyAgICAgICAg
KFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjpRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZSk6CisgICAg
ICAgIChRR3JhcGhpY3NXZWJWaWV3UHJpdmF0ZTo6flFHcmFwaGljc1dlYlZpZXdQcml2YXRlKToK
KyAgICAgICAgKFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjpzeW5jTGF5ZXJzKToKKyAgICAgICAg
KFFHcmFwaGljc1dlYlZpZXdQcml2YXRlOjpfcV9zY2FsZUNoYW5nZWQpOgorICAgICAgICAoUUdy
YXBoaWNzV2ViVmlldzo6ZXZlbnQpOgorICAgICAgICAoUUdyYXBoaWNzV2ViVmlldzo6c2V0UGFn
ZSk6CisgICAgICAgIChRR3JhcGhpY3NXZWJWaWV3Ojp1cGRhdGVHZW9tZXRyeSk6CisgICAgICAg
IChRR3JhcGhpY3NXZWJWaWV3OjpzZXRHZW9tZXRyeSk6CisgICAgICAgIChRR3JhcGhpY3NXZWJW
aWV3OjpzZXRSZXNpemVzVG9Db250ZW50cyk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGFn
ZUNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRn
ZXQ6On5QYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VD
bGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xp
ZW50UUdyYXBoaWNzV2lkZ2V0Ojp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVu
dFFHcmFwaGljc1dpZGdldDo6Y3JlYXRlT3JEZWxldGVPdmVybGF5KToKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnN5bmNMYXllcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6bWFya0ZvclN5bmMp
OgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6dXBkYXRlQ29t
cG9zaXRpbmdTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdy
YXBoaWNzV2lkZ2V0Ojp1cGRhdGVUaWxlZEJhY2tpbmdTdG9yZVNjYWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNldElucHV0TWV0aG9kRW5hYmxlZCk6
CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjppbnB1dE1ldGhv
ZEVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6
c2V0SW5wdXRNZXRob2RIaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhp
Y3NXaWRnZXQ6OmN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNz
V2lkZ2V0Ojp1cGRhdGVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFHcmFw
aGljc1dpZGdldDo6cGFsZXR0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBo
aWNzV2lkZ2V0OjpzY3JlZW5OdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFH
cmFwaGljc1dpZGdldDo6b3duZXJXaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVu
dFFHcmFwaGljc1dpZGdldDo6Z2VvbWV0cnlSZWxhdGl2ZVRvT3duZXJXaWRnZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6cGx1Z2luUGFyZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnN0eWxlKToKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlFH
cmFwaGljc0l0ZW1PdmVybGF5OjpwYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlFHcmFwaGljc0l0
ZW1PdmVybGF5Ojpib3VuZGluZ1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UUdyYXBoaWNzSXRl
bU92ZXJsYXk6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlFHcmFwaGljc0l0ZW1PdmVybGF5
OjpwcmVwYXJlR3JhcGhpY3NJdGVtR2VvbWV0cnlDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojppc1FXaWRnZXRDbGll
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6YWxsb3dz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xpZW50UUdy
YXBoaWNzV2lkZ2V0OjopOgorCiAyMDEwLTA1LTA5ICBOb2FtIFJvc2VudGhhbCAgPG5vYW0ucm9z
ZW50aGFsQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENo
cmlzdGlhbnNlbi4KZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xp
ZW50UXQuY3BwIGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAKaW5k
ZXggNjExYmFiNy4uN2ZmMmQwMyAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L1BhZ2VDbGllbnRRdC5jcHAKKysrIGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGll
bnRRdC5jcHAKQEAgLTEwMyw0ICsxMDMsMTk3IEBAIFFTdHlsZSogUGFnZUNsaWVudFFXaWRnZXQ6
OnN0eWxlKCkgY29uc3QKICAgICByZXR1cm4gdmlldy0+c3R5bGUoKTsKIH0KIAorUGFnZUNsaWVu
dFFHcmFwaGljc1dpZGdldDo6flBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQoKQoreworI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBpZiAoIXJvb3RHcmFwaGljc0xheWVyKQor
ICAgICAgICByZXR1cm47CisgICAgLy8gd2UgZG9uJ3QgbmVlZCB0byBkZWxldGUgdGhlIHJvb3Qg
Z3JhcGhpY3MgbGF5ZXIuIFRoZSBsaWZlY3ljbGUgaXMgbWFuYWdlZCBpbiBHcmFwaGljc0xheWVy
UXQuY3BwLgorICAgIHJvb3RHcmFwaGljc0xheWVyLmRhdGEoKS0+c2V0UGFyZW50SXRlbSgwKTsK
KyAgICB2aWV3LT5zY2VuZSgpLT5yZW1vdmVJdGVtKHJvb3RHcmFwaGljc0xheWVyLmRhdGEoKSk7
CisjZW5kaWYKK30KKwordm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzY3JvbGwoaW50
IGR4LCBpbnQgZHksIGNvbnN0IFFSZWN0JiByZWN0VG9TY3JvbGwpCit7CisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIHVwZGF0ZUNvbXBvc2l0aW5nU2Nyb2xsUG9zaXRpb24o
KTsKKyNlbmRpZgorfQorCit2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnVwZGF0ZShj
b25zdCBRUmVjdCAmIGRpcnR5UmVjdCkKK3sKKyAgICBjcmVhdGVPckRlbGV0ZU92ZXJsYXkoKTsK
KyAgICBpZiAob3ZlcmxheSkKKyAgICAgICAgb3ZlcmxheS0+dXBkYXRlKFFSZWN0RihkaXJ0eVJl
Y3QpKTsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgc3luY0xheWVycygp
OworI2VuZGlmCit9CisKK3ZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6Y3JlYXRlT3JE
ZWxldGVPdmVybGF5KCkKK3sKKyAgICBib29sIHVzZU92ZXJsYXkgPSBmYWxzZTsKKyAgICBpZiAo
IXZpZXdSZXNpemVzVG9Db250ZW50cykgeworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKKyAgICAgICAgdXNlT3ZlcmxheSA9IHVzZU92ZXJsYXkgfHwgcm9vdEdyYXBoaWNzTGF5ZXI7
CisjZW5kaWYKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICAgICAgdXNlT3Zl
cmxheSA9IHVzZU92ZXJsYXkgfHwgUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShwYWdlLT5tYWluRnJh
bWUoKSktPnRpbGVkQmFja2luZ1N0b3JlKCk7CisjZW5kaWYKKyAgICB9CisgICAgaWYgKHVzZU92
ZXJsYXkgPT0gISFvdmVybGF5KQorICAgICAgICByZXR1cm47CisgICAgaWYgKHVzZU92ZXJsYXkp
IHsKKyAgICAgICAgb3ZlcmxheSA9IFFTaGFyZWRQb2ludGVyPFFHcmFwaGljc0l0ZW1PdmVybGF5
PihuZXcgUUdyYXBoaWNzSXRlbU92ZXJsYXkodmlldywgcGFnZSkpOworICAgICAgICBvdmVybGF5
LT5zZXRaVmFsdWUoT3ZlcmxheVpWYWx1ZSk7CisgICAgfSBlbHNlCisgICAgICAgIG92ZXJsYXku
Y2xlYXIoKTsKK30KKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK3ZvaWQgUGFn
ZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c3luY0xheWVycygpCit7CisgICAgaWYgKHNob3VsZFN5
bmMpIHsKKyAgICAgICAgUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShwYWdlLT5tYWluRnJhbWUoKSkt
PnZpZXcoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGVSZWN1cnNpdmUoKTsKKyAgICAgICAgc2hvdWxk
U3luYyA9IGZhbHNlOworICAgIH0KK30KKwordm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0
OjpzZXRSb290R3JhcGhpY3NMYXllcihRR3JhcGhpY3NJdGVtKiBsYXllcikKK3sKKyAgICBpZiAo
cm9vdEdyYXBoaWNzTGF5ZXIpIHsKKyAgICAgICAgcm9vdEdyYXBoaWNzTGF5ZXIuZGF0YSgpLT5z
ZXRQYXJlbnRJdGVtKDApOworICAgICAgICB2aWV3LT5zY2VuZSgpLT5yZW1vdmVJdGVtKHJvb3RH
cmFwaGljc0xheWVyLmRhdGEoKSk7CisgICAgICAgIFFXZWJGcmFtZVByaXZhdGU6OmNvcmUocGFn
ZS0+bWFpbkZyYW1lKCkpLT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0YXRlUmVjdXJzaXZlKCk7
CisgICAgfQorCisgICAgcm9vdEdyYXBoaWNzTGF5ZXIgPSBsYXllciA/IGxheWVyLT50b0dyYXBo
aWNzT2JqZWN0KCkgOiAwOworCisgICAgaWYgKGxheWVyKSB7CisgICAgICAgIGxheWVyLT5zZXRG
bGFnKFFHcmFwaGljc0l0ZW06Okl0ZW1DbGlwc0NoaWxkcmVuVG9TaGFwZSwgdHJ1ZSk7CisgICAg
ICAgIGxheWVyLT5zZXRQYXJlbnRJdGVtKHZpZXcpOworICAgICAgICBsYXllci0+c2V0WlZhbHVl
KFJvb3RHcmFwaGljc0xheWVyWlZhbHVlKTsKKyAgICAgICAgdXBkYXRlQ29tcG9zaXRpbmdTY3Jv
bGxQb3NpdGlvbigpOworICAgIH0KKyAgICBjcmVhdGVPckRlbGV0ZU92ZXJsYXkoKTsKK30KKwor
dm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjptYXJrRm9yU3luYyhib29sIHNjaGVkdWxl
U3luYykKK3sKKyAgICBzaG91bGRTeW5jID0gdHJ1ZTsKKyAgICBpZiAoc2NoZWR1bGVTeW5jKQor
ICAgICAgICBzeW5jTWV0YU1ldGhvZC5pbnZva2UodmlldywgUXQ6OlF1ZXVlZENvbm5lY3Rpb24p
OworfQorCit2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnVwZGF0ZUNvbXBvc2l0aW5n
U2Nyb2xsUG9zaXRpb24oKQoreworICAgIGlmIChyb290R3JhcGhpY3NMYXllciAmJiBwYWdlICYm
IHBhZ2UtPm1haW5GcmFtZSgpKSB7CisgICAgICAgIGNvbnN0IFFQb2ludCBzY3JvbGxQb3NpdGlv
biA9IHBhZ2UtPm1haW5GcmFtZSgpLT5zY3JvbGxQb3NpdGlvbigpOworICAgICAgICByb290R3Jh
cGhpY3NMYXllci5kYXRhKCktPnNldFBvcygtc2Nyb2xsUG9zaXRpb24pOworICAgIH0KK30KKyNl
bmRpZgorCisjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCit2b2lkIFBhZ2VDbGllbnRR
R3JhcGhpY3NXaWRnZXQ6OnVwZGF0ZVRpbGVkQmFja2luZ1N0b3JlU2NhbGUoKQoreworICAgIFdl
YkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUgPSBRV2ViRnJhbWVQcml2YXRl
Ojpjb3JlKHBhZ2UtPm1haW5GcmFtZSgpKS0+dGlsZWRCYWNraW5nU3RvcmUoKTsKKyAgICBpZiAo
IWJhY2tpbmdTdG9yZSkKKyAgICAgICAgcmV0dXJuOworICAgIGJhY2tpbmdTdG9yZS0+c2V0Q29u
dGVudHNTY2FsZSh2aWV3LT5zY2FsZSgpKTsKK30KKyNlbmRpZgorCit2b2lkIFBhZ2VDbGllbnRR
R3JhcGhpY3NXaWRnZXQ6OnNldElucHV0TWV0aG9kRW5hYmxlZChib29sIGVuYWJsZSkKK3sKKyNp
ZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNCwgNiwgMCkKKyAgICB2aWV3LT5zZXRG
bGFnKFFHcmFwaGljc0l0ZW06Okl0ZW1BY2NlcHRzSW5wdXRNZXRob2QsIGVuYWJsZSk7CisjZW5k
aWYKK30KKworYm9vbCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjppbnB1dE1ldGhvZEVuYWJs
ZWQoKSBjb25zdAoreworI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg0LCA2LCAw
KQorICAgIHJldHVybiB2aWV3LT5mbGFncygpICYgUUdyYXBoaWNzSXRlbTo6SXRlbUFjY2VwdHNJ
bnB1dE1ldGhvZDsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKKyNpZiBR
VF9WRVJTSU9OID49IDB4MDQwNjAwCit2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNl
dElucHV0TWV0aG9kSGludChRdDo6SW5wdXRNZXRob2RIaW50IGhpbnQsIGJvb2wgZW5hYmxlKQor
eworICAgIGlmIChlbmFibGUpCisgICAgICAgIHZpZXctPnNldElucHV0TWV0aG9kSGludHModmll
dy0+aW5wdXRNZXRob2RIaW50cygpIHwgaGludCk7CisgICAgZWxzZQorICAgICAgICB2aWV3LT5z
ZXRJbnB1dE1ldGhvZEhpbnRzKHZpZXctPmlucHV0TWV0aG9kSGludHMoKSAmIH5oaW50KTsKK30K
KyNlbmRpZgorCisjaWZuZGVmIFFUX05PX0NVUlNPUgorUUN1cnNvciBQYWdlQ2xpZW50UUdyYXBo
aWNzV2lkZ2V0OjpjdXJzb3IoKSBjb25zdAoreworICAgIHJldHVybiB2aWV3LT5jdXJzb3IoKTsK
K30KKwordm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojp1cGRhdGVDdXJzb3IoY29uc3Qg
UUN1cnNvciYgY3Vyc29yKQoreworICAgIHZpZXctPnNldEN1cnNvcihjdXJzb3IpOworfQorI2Vu
ZGlmCisKK1FQYWxldHRlIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnBhbGV0dGUoKSBjb25z
dAoreworICAgIHJldHVybiB2aWV3LT5wYWxldHRlKCk7Cit9CisKK2ludCBQYWdlQ2xpZW50UUdy
YXBoaWNzV2lkZ2V0OjpzY3JlZW5OdW1iZXIoKSBjb25zdAoreworI2lmIGRlZmluZWQoUV9XU19Y
MTEpCisgICAgaWYgKFFHcmFwaGljc1NjZW5lKiBzY2VuZSA9IHZpZXctPnNjZW5lKCkpIHsKKyAg
ICAgICAgY29uc3QgUUxpc3Q8UUdyYXBoaWNzVmlldyo+IHZpZXdzID0gc2NlbmUtPnZpZXdzKCk7
CisKKyAgICAgICAgaWYgKCF2aWV3cy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gdmll
d3MuYXQoMCktPngxMUluZm8oKS5zY3JlZW4oKTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVy
biAwOworfQorCitRV2lkZ2V0KiBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0Ojpvd25lcldpZGdl
dCgpIGNvbnN0Cit7CisgICAgaWYgKFFHcmFwaGljc1NjZW5lKiBzY2VuZSA9IHZpZXctPnNjZW5l
KCkpIHsKKyAgICAgICAgY29uc3QgUUxpc3Q8UUdyYXBoaWNzVmlldyo+IHZpZXdzID0gc2NlbmUt
PnZpZXdzKCk7CisgICAgICAgIHJldHVybiB2aWV3cy52YWx1ZSgwKTsKKyAgICB9CisgICAgcmV0
dXJuIDA7Cit9CisKK1FSZWN0IFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6Omdlb21ldHJ5UmVs
YXRpdmVUb093bmVyV2lkZ2V0KCkgY29uc3QKK3sKKyAgICBpZiAoIXZpZXctPnNjZW5lKCkpCisg
ICAgICAgIHJldHVybiBRUmVjdCgpOworCisgICAgUUxpc3Q8UUdyYXBoaWNzVmlldyo+IHZpZXdz
ID0gdmlldy0+c2NlbmUoKS0+dmlld3MoKTsKKyAgICBpZiAodmlld3MuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gUVJlY3QoKTsKKworICAgIFFHcmFwaGljc1ZpZXcqIGdyYXBoaWNzVmlldyA9
IHZpZXdzLmF0KDApOworICAgIHJldHVybiBncmFwaGljc1ZpZXctPm1hcEZyb21TY2VuZSh2aWV3
LT5ib3VuZGluZ1JlY3QoKSkuYm91bmRpbmdSZWN0KCk7Cit9CisKK1FPYmplY3QqIFBhZ2VDbGll
bnRRR3JhcGhpY3NXaWRnZXQ6OnBsdWdpblBhcmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHZp
ZXc7Cit9CisKK1FTdHlsZSogUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c3R5bGUoKSBjb25z
dAoreworICAgIHJldHVybiB2aWV3LT5zdHlsZSgpOworfQorCisKKwogfQpkaWZmIC0tZ2l0IGEv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oIGIvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oCmluZGV4IDNmMDk1NjQuLmZhOTU3MjggMTAwNjQ0Ci0t
LSBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuaAorKysgYi9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmgKQEAgLTIxLDEwICsyMSwyNyBAQAogI2lm
bmRlZiBQYWdlQ2xpZW50UXRfaAogI2RlZmluZSBQYWdlQ2xpZW50UXRfaAogCisjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW50
UmVjdC5oIgorI2luY2x1ZGUgInF3ZWJmcmFtZS5oIgorI2luY2x1ZGUgInF3ZWJmcmFtZV9wLmgi
CisjaW5jbHVkZSAicXdlYnBhZ2UuaCIKKyNpbmNsdWRlICJxd2VicGFnZV9wLmgiCiAjaW5jbHVk
ZSAiUVdlYlBhZ2VDbGllbnQuaCIKKyNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZS5oIgogCisj
aW5jbHVkZSA8UXRDb3JlL3FtZXRhb2JqZWN0Lmg+CisjaW5jbHVkZSA8UXRDb3JlL3FzaGFyZWRw
b2ludGVyLmg+CisjaW5jbHVkZSA8UXRHdWkvcWdyYXBoaWNzc2NlbmUuaD4KKyNpbmNsdWRlIDxR
dEd1aS9xZ3JhcGhpY3N2aWV3Lmg+CisjaW5jbHVkZSA8UXRHdWkvcWdyYXBoaWNzd2lkZ2V0Lmg+
CisjaW5jbHVkZSA8UXRHdWkvcXNjcm9sbGJhci5oPgorI2luY2x1ZGUgPFF0R3VpL3FzdHlsZW9w
dGlvbi5oPgogI2luY2x1ZGUgPFF0R3VpL3F3aWRnZXQuaD4KIAorI2luY2x1ZGUgPFNldHRpbmdz
Lmg+CisKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02Myw1ICs4MCwxMjQgQEAgcHVibGlj
OgogICAgIFFXaWRnZXQqIHZpZXc7CiB9OwogCisvLyB0aGUgb3ZlcmxheSBpcyBoZXJlIGZvciBv
bmUgcmVhc29uIG9ubHk6IHRvIGhhdmUgdGhlIHNjcm9sbC1iYXJzIGFuZCBvdGhlcgorLy8gZXh0
cmEgVUkgZWxlbWVudHMgYXBwZWFyIG9uIHRvcCBvZiBhbnkgUUdyYXBoaWNzSXRlbXMgY3JlYXRl
ZCBieSBDU1MgY29tcG9zaXRpbmcgbGF5ZXJzCitjbGFzcyBRR3JhcGhpY3NJdGVtT3ZlcmxheSA6
IHB1YmxpYyBRR3JhcGhpY3NJdGVtIHsKKyAgICBwdWJsaWM6CisgICAgUUdyYXBoaWNzSXRlbU92
ZXJsYXkoUUdyYXBoaWNzV2lkZ2V0KiB2aWV3LCBRV2ViUGFnZSogcCkKKyAgICAgICAgICAgIDpR
R3JhcGhpY3NJdGVtKHZpZXcpCisgICAgICAgICAgICAsIHEodmlldykKKyAgICAgICAgICAgICwg
cGFnZShwKQorICAgIHsKKyAgICAgICAgc2V0UG9zKDAsIDApOworI2lmIFFUX1ZFUlNJT04gPj0g
UVRfVkVSU0lPTl9DSEVDSyg0LCA2LCAwKQorICAgICAgICBzZXRGbGFnKFFHcmFwaGljc0l0ZW06
Okl0ZW1Vc2VzRXh0ZW5kZWRTdHlsZU9wdGlvbiwgdHJ1ZSk7CisjZW5kaWYKKyAgICAgICAgc2V0
Q2FjaGVNb2RlKFFHcmFwaGljc0l0ZW06OkRldmljZUNvb3JkaW5hdGVDYWNoZSk7CisgICAgfQor
CisgICAgUVJlY3RGIGJvdW5kaW5nUmVjdCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
cS0+Ym91bmRpbmdSZWN0KCk7CisgICAgfQorCisgICAgdm9pZCBwYWludChRUGFpbnRlciogcGFp
bnRlciwgY29uc3QgUVN0eWxlT3B0aW9uR3JhcGhpY3NJdGVtKiBvcHRpb25zLCBRV2lkZ2V0KikK
KyAgICB7CisgICAgICAgIHBhZ2UtPm1haW5GcmFtZSgpLT5yZW5kZXIocGFpbnRlciwgc3RhdGlj
X2Nhc3Q8UVdlYkZyYW1lOjpSZW5kZXJMYXllcj4oUVdlYkZyYW1lOjpBbGxMYXllcnMmKH5RV2Vi
RnJhbWU6OkNvbnRlbnRzTGF5ZXIpKSwgb3B0aW9ucy0+ZXhwb3NlZFJlY3QudG9SZWN0KCkpOwor
ICAgIH0KKworICAgIHZvaWQgcHJlcGFyZUdyYXBoaWNzSXRlbUdlb21ldHJ5Q2hhbmdlKCkKKyAg
ICB7CisgICAgICAgIHByZXBhcmVHZW9tZXRyeUNoYW5nZSgpOworICAgIH0KKworICAgIGZyaWVu
ZCBjbGFzcyBRR3JhcGhpY3NXaWRnZXQ7CisgICAgUUdyYXBoaWNzV2lkZ2V0KiBxOworICAgIFFX
ZWJQYWdlKiBwYWdlOworfTsKKworCitjbGFzcyBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0IDog
cHVibGljIFFXZWJQYWdlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBQYWdlQ2xpZW50UUdyYXBoaWNz
V2lkZ2V0KFFHcmFwaGljc1dpZGdldCogdiwgUVdlYlBhZ2UqIHApCisgICAgICAgIDogdmlldyh2
KQorICAgICAgICAsIHBhZ2UocCkKKyAgICAgICAgLCB2aWV3UmVzaXplc1RvQ29udGVudHMoZmFs
c2UpCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgICAgICAsIHNob3VsZFN5
bmMoZmFsc2UpCisjZW5kaWYKKyAgICB7CisgICAgICAgUV9BU1NFUlQodmlldyk7CisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgICAgICAvLyB0aGUgb3ZlcmxheSBhbmQgc3Rh
eXMgYWxpdmUgZm9yIHRoZSBsaWZldGltZSBvZgorICAgICAgICAvLyB0aGlzIFFHcmFwaGljc1dl
YlZpZXcgYXMgdGhlIHNjcm9sbGJhcnMgYXJlIG5lZWRlZCB3aGVuIHRoZXJlJ3Mgbm8gY29tcG9z
aXRpbmcKKyAgICAgICAgdmlldy0+c2V0RmxhZyhRR3JhcGhpY3NJdGVtOjpJdGVtVXNlc0V4dGVu
ZGVkU3R5bGVPcHRpb24pOworICAgICAgICBzeW5jTWV0YU1ldGhvZCA9IHZpZXctPm1ldGFPYmpl
Y3QoKS0+bWV0aG9kKHZpZXctPm1ldGFPYmplY3QoKS0+aW5kZXhPZk1ldGhvZCgic3luY0xheWVy
cygpIikpOworI2VuZGlmCisgICAgfQorCisgICAgdmlydHVhbCB+UGFnZUNsaWVudFFHcmFwaGlj
c1dpZGdldCgpOworCisgICAgdmlydHVhbCBib29sIGlzUVdpZGdldENsaWVudCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsKGludCBkeCwgaW50IGR5
LCBjb25zdCBRUmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoY29uc3QgUVJlY3QmIGRp
cnR5UmVjdCk7CisgICAgdmlydHVhbCB2b2lkIHNldElucHV0TWV0aG9kRW5hYmxlZChib29sIGVu
YWJsZSk7CisgICAgdmlydHVhbCBib29sIGlucHV0TWV0aG9kRW5hYmxlZCgpIGNvbnN0OworI2lm
IFFUX1ZFUlNJT04gPj0gMHgwNDA2MDAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5wdXRNZXRob2RI
aW50KFF0OjpJbnB1dE1ldGhvZEhpbnQgaGludCwgYm9vbCBlbmFibGUpOworI2VuZGlmCisKKyNp
Zm5kZWYgUVRfTk9fQ1VSU09SCisgICAgdmlydHVhbCBRQ3Vyc29yIGN1cnNvcigpIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDdXJzb3IoY29uc3QgUUN1cnNvciYgY3Vyc29yKTsKKyNl
bmRpZgorCisgICAgdmlydHVhbCBRUGFsZXR0ZSBwYWxldHRlKCkgY29uc3Q7CisgICAgdmlydHVh
bCBpbnQgc2NyZWVuTnVtYmVyKCkgY29uc3Q7CisgICAgdmlydHVhbCBRV2lkZ2V0KiBvd25lcldp
ZGdldCgpIGNvbnN0OworICAgIHZpcnR1YWwgUVJlY3QgZ2VvbWV0cnlSZWxhdGl2ZVRvT3duZXJX
aWRnZXQoKSBjb25zdDsKKworICAgIHZpcnR1YWwgUU9iamVjdCogcGx1Z2luUGFyZW50KCkgY29u
c3Q7CisKKyAgICB2aXJ0dWFsIFFTdHlsZSogc3R5bGUoKSBjb25zdDsKKworICAgIHZvaWQgY3Jl
YXRlT3JEZWxldGVPdmVybGF5KCk7CisKKyNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkK
KyAgICB2b2lkIHVwZGF0ZVRpbGVkQmFja2luZ1N0b3JlU2NhbGUoKTsKKyNlbmRpZgorCisjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIHZpcnR1YWwgdm9pZCBzZXRSb290R3Jh
cGhpY3NMYXllcihRR3JhcGhpY3NJdGVtKiBsYXllcik7CisgICAgdmlydHVhbCB2b2lkIG1hcmtG
b3JTeW5jKGJvb2wgc2NoZWR1bGVTeW5jKTsKKyAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0aW5nU2Ny
b2xsUG9zaXRpb24oKTsKKyAgICB2b2lkIHN5bmNMYXllcnMoKTsKKworICAgIC8vIFFHcmFwaGlj
c1dlYlZpZXcgY2FuIHJlbmRlciBjb21wb3NpdGVkIGxheWVycworICAgIHZpcnR1YWwgYm9vbCBh
bGxvd3NBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorI2Vu
ZGlmCisKKyAgICBRR3JhcGhpY3NXaWRnZXQqIHZpZXc7CisgICAgUVdlYlBhZ2UqIHBhZ2U7Cisg
ICAgYm9vbCB2aWV3UmVzaXplc1RvQ29udGVudHM7CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisgICAgUVdlYWtQb2ludGVyPFFHcmFwaGljc09iamVjdD4gcm9vdEdyYXBoaWNz
TGF5ZXI7CisKKyAgICAvLyB3ZSBoYXZlIHRvIGZsdXNoIHF1aXRlIG9mdGVuLCBzbyB3ZSB1c2Ug
YSBtZXRhLW1ldGhvZCBpbnN0ZWFkIG9mIFFUaW1lcjo6c2luZ2xlU2hvdCBmb3IgcHV0dGluZyB0
aGUgZXZlbnQgaW4gdGhlIHF1ZXVlCisgICAgUU1ldGFNZXRob2Qgc3luY01ldGFNZXRob2Q7CisK
KyAgICAvLyB3ZSBuZWVkIHRvIHN5bmMgdGhlIGxheWVycyBpZiB3ZSBnZXQgYSBzcGVjaWFsIGNh
bGwgZnJvbSB0aGUgV2ViQ29yZQorICAgIC8vIGNvbXBvc2l0b3IgdGVsbGluZyB1cyB0byBkbyBz
by4gV2UnbGwgZ2V0IHRoYXQgY2FsbCBmcm9tIENocm9tZUNsaWVudFF0CisgICAgYm9vbCBzaG91
bGRTeW5jOworI2VuZGlmCisgICAgLy8gdGhlIG92ZXJsYXkgZ2V0cyBpbnN0YW50aWF0ZWQgd2hl
biB0aGUgcm9vdCBsYXllciBpcyBhdHRhY2hlZCwgYW5kIGdldCBkZWxldGVkIHdoZW4gaXQncyBk
ZXRhY2hlZAorICAgIFFTaGFyZWRQb2ludGVyPFFHcmFwaGljc0l0ZW1PdmVybGF5PiBvdmVybGF5
OworCisgICAgLy8gd2UgbmVlZCB0byBwdXQgdGhlIHJvb3QgZ3JhcGhpY3MgbGF5ZXIgYmVoaW5k
IHRoZSBvdmVybGF5ICh3aGljaCBjb250YWlucyB0aGUgc2Nyb2xsYmFyKQorICAgIGVudW0geyBS
b290R3JhcGhpY3NMYXllclpWYWx1ZSwgT3ZlcmxheVpWYWx1ZSB9OworfTsKKwogfQogI2VuZGlm
IC8vIFBhZ2VDbGllbnRRdAotLSAKMS43LjAuMwoK
</data>

          </attachment>
      

    </bug>

</bugzilla>