<?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>17811</bug_id>
          
          <creation_ts>2008-03-12 14:52:18 -0700</creation_ts>
          <short_desc>Widget class refactoring</short_desc>
          <delta_ts>2012-11-02 14:22:49 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Rodney Dawes">dobey</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>73521</commentid>
    <comment_count>0</comment_count>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-03-12 14:52:18 -0700</bug_when>
    <thetext>Currently, the Widget class is split up with several #if PLATFORM() statements, with duplicate code across many platforms, as well as a circular dependency on the derived class ScrollView. This patch is intended to clean up the circular dependence and provide shared methods for the many duplicate methods, rather than copying the code between platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73522</commentid>
    <comment_count>1</comment_count>
      <attachid>19717</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-03-12 14:53:11 -0700</bug_when>
    <thetext>Created attachment 19717
Patch to refactor the Widget class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73563</commentid>
    <comment_count>2</comment_count>
      <attachid>19724</attachid>
    <who name="Rodney Dawes">dobey</who>
    <bug_when>2008-03-13 07:01:53 -0700</bug_when>
    <thetext>Created attachment 19724
Updated patch to fix tabs vs. spaces

Oops. Forgot to fix the issues where tabs came up instead of spaces last night when submitting the patch. This revision fixes that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73583</commentid>
    <comment_count>3</comment_count>
      <attachid>19724</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-13 09:56:10 -0700</bug_when>
    <thetext>Comment on attachment 19724
Updated patch to fix tabs vs. spaces

This won&apos;t compile on Mac. There are two implementations of Widget::frameGeometry.

Having a m_frameRect is wrong for PlatformScrollBarQt and for Mac widgets. And having that field there, but unused, on those platforms is a recipe for disaster.

We need to find a different way to share this code.

I&apos;m really sad to see so much use of virtual functions. Our normal cross-platform strategy is to use compile time #if, not virtual functions.

Changing setParent to take a Widget* is a bad idea. That&apos;s going in the wrong direction. The only kind of parent we support is a FrameView*. We don&apos;t need a general purpose &quot;make any widget a child of any other widget&quot; call.

I didn&apos;t get a chance to review this whole thing, but I think we need to do this refactoring in smaller pieces rather than all at once, and keep all the platforms working.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757575</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-11-02 14:22:49 -0700</bug_when>
    <thetext>I suspect this patch/bug is obsolete by now and can be closed?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19717</attachid>
            <date>2008-03-12 14:53:11 -0700</date>
            <delta_ts>2008-03-13 07:01:53 -0700</delta_ts>
            <desc>Patch to refactor the Widget class</desc>
            <filename>webkit-widget-refactor.patch</filename>
            <type>text/plain</type>
            <size>43840</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDk5MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzkgQEAKKzIwMDgtMDMtMTIgIFJvZG5leSBEYXdlcyAgPGRvYmV5QHdheW9mdGhl
bW9ua2V5LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhISkKKworICAg
ICAgICBJbXBsZW1lbnQgbW9yZSBjbGFzcyBtZXRob2RzIGFzIGNyb3NzLXBsYXRmb3JtIGNvZGUu
CisgICAgICAgIE9ubHkgdXNlIHNoYXJlZCBjb250YWluaW5nV2luZG93KCkgb24gbm9uLVF0LCBh
cyBRdCBoYXMgYSBkZXBlbmRlbmN5CisgICAgICAgIG9uIGEgY2xhc3MgdHlwZSBpbiBXZWJLaXQg
d2hpY2ggd2UgbmVlZCB0byBwcmVzZXJ2ZSBmb3Igbm93LgorICAgICAgICBBdm9pZCByZWZlcmVu
Y2luZyB0aGUgZGVyaXZlZCBTY3JvbGxWaWV3IGNsYXNzIGluc2lkZSBXaWRnZXQuCisgICAgICAg
IEFkZCB0aGUgY3Jvc3MtcGxhdGZvcm0gdHlwZSBQbGF0Zm9ybVdpZGdldC4KKyAgICAgICAgQXZv
aWQgZHVwbGljYXRpbmcgcHJvdG90eXBlcyBhY3Jvc3MgcGxhdGZvcm1zLgorICAgICAgICBSZXBs
YWNlIGR1cGxpY2F0ZSBpdGVtcyBmcm9tIHByaXZhdGUgZGF0YSBjbGFzcyB3aXRoIHByaXZhdGUg
dmFyaWFibGVzLgorICAgICAgICBSZXBsYWNlIHNldEd0a1dpZGdldCgpIHVzYWdlIHdpdGggc2V0
TmF0aXZlV2lkZ2V0KCkuCisgICAgICAgIFJlcGxhY2UgZ3RrV2lkZ2V0KCkgdXNhZ2Ugd2l0aCBu
YXRpdmVXaWRnZXQoKS4KKyAgICAgICAgQ2hhbmdlIGdka0RyYXdhYmxlKCkgaW4gcHJpdmF0ZSBk
YXRhIGNsYXNzIHRvIHRha2UgYSBHdGtXaWRnZXQuCisgICAgICAgIEluaXRpYWxpemUgbmV3IGNs
YXNzIHZhcmlhYmxlcyBpbiBjbGFzcyBjb25zdHJ1Y3Rvci4KKyAgICAgICAgUmVtb3ZlIHNoYXJl
ZCBtZXRob2RzIGZyb20gcGxhdGZvcm0tc3BlY2lmaWMgY29kZS4KKyAgICAgICAgVXBkYXRlIGRl
cml2ZWQgY2xhc3NlcyB0byB1c2UgV2lkZ2V0KiBhcyB0aGUgc2V0UGFyZW50KCkgYXJndW1lbnQu
CisgICAgICAgIFJlbW92ZSByZW1vdmVGcm9tUGFyZW50KCkgZnJvbSBXeCBwb3J0IFRlbXBvcmFy
eUxpbmtTdHVicy4KKworICAgICAgICAqIHBsYXRmb3JtL1dpZGdldC5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vV2lkZ2V0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1BsYXRmb3JtU2Nyb2xs
QmFyR3RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2Nyb2xsVmlld0d0ay5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
cXQvUGxhdGZvcm1TY3JvbGxCYXJRdC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vcXQvV2lkZ2V0
UXQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9QbGF0Zm9ybVNjcm9sbEJhci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL3dpbi9QbGF0Zm9ybVNjcm9sbEJhclNhZmFyaS5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vd2luL1dpZGdldFdpbi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vd3gvUmVu
ZGVyVGhlbWVXeC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vd3gvU2Nyb2xsVmlld1d4LmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS93eC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL3d4L1dpZGdldFd4LmNwcDoKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcu
aDoKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXdXaW4uY3BwOgorCiAyMDA4LTAzLTEyICBE
YXZpZCBIYXJyaXNvbiAgPGhhcnJpc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEYXJpbi4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5jcHAJKHJldmlzaW9uIDMwOTkzKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9XaWRnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCwxNCArODAsNzIgQEAg
dm9pZCBXaWRnZXQ6Om1vdmUoY29uc3QgSW50UG9pbnQgJnApIAogICAgIG1vdmUocC54KCksIHAu
eSgpKTsKIH0KIAordm9pZCBXaWRnZXQ6OmludmFsaWRhdGUoKQoreworICAgIGludmFsaWRhdGVS
ZWN0KEludFJlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkpKTsKK30KKwordm9pZCBXaWRnZXQ6
OnNldEZyYW1lR2VvbWV0cnkoY29uc3QgSW50UmVjdCAmcmVjdCkKK3sKKyAgICBtX2ZyYW1lUmVj
dCA9IHJlY3Q7CisgICAgZ2VvbWV0cnlDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRD
bGllbnQoV2lkZ2V0Q2xpZW50KiBjbGllbnQpCit7CisgICAgbV93aWRnZXRDbGllbnQgPSBjbGll
bnQ7Cit9CisKIGJvb2wgV2lkZ2V0Ojppc0ZyYW1lVmlldygpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCit2b2lkIFdpZGdldDo6cmVtb3ZlRnJvbVBhcmVudCgpCit7CisgICAgaWYg
KHBhcmVudCgpKQorICAgICAgICBwYXJlbnQoKS0+cmVtb3ZlQ2hpbGQodGhpcyk7Cit9CisKIElu
dFJlY3QgV2lkZ2V0Ojp3aW5kb3dDbGlwUmVjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEludFJl
Y3QoKTsKIH0KIAordm9pZCBXaWRnZXQ6OnNldENvbnRhaW5pbmdXaW5kb3coUGxhdGZvcm1XaWRn
ZXQgd2luZG93KQoreworICAgIG1fY29udGFpbmluZ1dpbmRvdyA9IHdpbmRvdzsKK30KKworI2lm
ICFQTEFURk9STShRVCkKK1BsYXRmb3JtV2lkZ2V0IFdpZGdldDo6Y29udGFpbmluZ1dpbmRvdygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGFpbmluZ1dpbmRvdzsKK30KKyNlbmRpZgorCit2
b2lkIFdpZGdldDo6c2V0UGFyZW50KFdpZGdldCogd2lkZ2V0KQoreworICAgIGlmICghd2lkZ2V0
IHx8ICF3aWRnZXQtPmlzQXR0YWNoZWRUb1dpbmRvdygpKQorICAgICAgICBkZXRhY2hGcm9tV2lu
ZG93KCk7CisgICAgbV9wYXJlbnQgPSB3aWRnZXQ7CisgICAgaWYgKHdpZGdldCAmJiB3aWRnZXQt
PmlzQXR0YWNoZWRUb1dpbmRvdygpKQorICAgICAgICBhdHRhY2hUb1dpbmRvdygpOworfQorCitJ
bnRQb2ludCBXaWRnZXQ6OmNvbnZlcnRDaGlsZFRvU2VsZihjb25zdCBXaWRnZXQqIGNoaWxkLCBj
b25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFBvaW50KHBvaW50
LngoKSArIGNoaWxkLT54KCksIHBvaW50LnkoKSArIGNoaWxkLT55KCkpOworfQorCitJbnRQb2lu
dCBXaWRnZXQ6OmNvbnZlcnRTZWxmVG9DaGlsZChjb25zdCBXaWRnZXQqIGNoaWxkLCBjb25zdCBJ
bnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFBvaW50KHBvaW50LngoKSAt
IGNoaWxkLT54KCksIHBvaW50LnkoKSAtIGNoaWxkLT55KCkpOworfQorCit2b2lkIFdpZGdldDo6
c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oYm9vbCBzdXBwcmVzcykKK3sKKyAgICBtX3N1cHByZXNz
SW52YWxpZGF0aW9uID0gc3VwcHJlc3M7Cit9CisKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
V2lkZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaAkocmV2aXNp
b24gMzA5OTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFdpZGdldF9oCiAjZGVmaW5lIFdpZGdldF9oCiAKKyNp
bmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAKICNpZiBQTEFU
Rk9STShNQUMpCkBAIC0zOCwyMSArMzksMjUgQEAgY2xhc3MgTlNWaWV3OwogCiAjaWYgUExBVEZP
Uk0oV0lOKQogdHlwZWRlZiBzdHJ1Y3QgSFdORF9fKiBIV05EOwordHlwZWRlZiBIV05EIFBsYXRm
b3JtV2lkZ2V0OwogI2VuZGlmCiAKICNpZiBQTEFURk9STShHVEspCiB0eXBlZGVmIHN0cnVjdCBf
R2RrRHJhd2FibGUgR2RrRHJhd2FibGU7CiB0eXBlZGVmIHN0cnVjdCBfR3RrV2lkZ2V0IEd0a1dp
ZGdldDsKIHR5cGVkZWYgc3RydWN0IF9HdGtDb250YWluZXIgR3RrQ29udGFpbmVyOwordHlwZWRl
ZiBHdGtXaWRnZXQqIFBsYXRmb3JtV2lkZ2V0OwogI2VuZGlmCiAKICNpZiBQTEFURk9STShRVCkK
IGNsYXNzIFFXaWRnZXQ7CiBjbGFzcyBRV2ViRnJhbWU7Cit0eXBlZGVmIFFXaWRnZXQqIFBsYXRm
b3JtV2lkZ2V0OwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXWCkKIGNsYXNzIHd4V2luZG93Owor
dHlwZWRlZiB3eFdpbmRvdyogUGxhdGZvcm1XaWRnZXQ7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNjUsNyArNzAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3Mg
SW50UmVjdDsKICAgICBjbGFzcyBJbnRTaXplOwogICAgIGNsYXNzIFBsYXRmb3JtTW91c2VFdmVu
dDsKLSAgICBjbGFzcyBTY3JvbGxWaWV3OwogICAgIGNsYXNzIFdpZGdldENsaWVudDsKICAgICBj
bGFzcyBXaWRnZXRQcml2YXRlOwogCkBAIC05Myw3ICs5Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmKTsK
IAogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0Jik7
Ci0gICAgICAgIHZpcnR1YWwgSW50UmVjdCBmcmFtZUdlb21ldHJ5KCkgY29uc3Q7CisgICAgICAg
IHZpcnR1YWwgSW50UmVjdCBmcmFtZUdlb21ldHJ5KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJl
Y3Q7IH0KIAogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoKTsKIApAQCAtMTA2LDExICsx
MTAsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldElzU2VsZWN0ZWQo
Ym9vbCk7CiAKICAgICAgICAgdm9pZCBzZXRDbGllbnQoV2lkZ2V0Q2xpZW50Kik7Ci0gICAgICAg
IFdpZGdldENsaWVudCogY2xpZW50KCkgY29uc3Q7CisgICAgICAgIFdpZGdldENsaWVudCogY2xp
ZW50KCkgY29uc3QgeyByZXR1cm4gbV93aWRnZXRDbGllbnQ7IH0KIAogICAgICAgICB2aXJ0dWFs
IGJvb2wgaXNGcmFtZVZpZXcoKSBjb25zdDsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
RnJvbVBhcmVudCgpOworCXZpcnR1YWwgdm9pZCByZW1vdmVDaGlsZChXaWRnZXQqKSB7IH0KKwor
CXZpcnR1YWwgdm9pZCBhZGRUb0RpcnR5UmVnaW9uKGNvbnN0IEludFJlY3QmKSB7IH0KIAogICAg
ICAgICAvLyBUaGlzIG1ldGhvZCBpcyB1c2VkIGJ5IHBsdWdpbnMgb24gYWxsIHBsYXRmb3JtcyB0
byBvYnRhaW4gYSBjbGlwIHJlY3QgdGhhdCBpbmNsdWRlcyBjbGlwcyBzZXQgYnkgV2ViQ29yZSwK
ICAgICAgICAgLy8gZS5nLiwgaW4gb3ZlcmZsb3c6YXV0byBzZWN0aW9ucy4gIFRoZSBjbGlwIHJl
Y3RzIGNvb3JkaW5hdGVzIGFyZSBpbiB0aGUgY29udGFpbmluZyB3aW5kb3cncyBjb29yZGluYXRl
IHNwYWNlLgpAQCAtMTE5LDM2ICsxMjYsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChFdmVudCopIHsgfQogCi0jaWYgUExBVEZPUk0o
V0lOKQotICAgICAgICB2b2lkIHNldENvbnRhaW5pbmdXaW5kb3coSFdORCk7Ci0gICAgICAgIEhX
TkQgY29udGFpbmluZ1dpbmRvdygpIGNvbnN0OwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXRQ
YXJlbnQoU2Nyb2xsVmlldyopOwotICAgICAgICBTY3JvbGxWaWV3KiBwYXJlbnQoKSBjb25zdDsK
LQotICAgICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoVG9XaW5kb3coKSB7IH0KLSAgICAgICAgdmly
dHVhbCB2b2lkIGRldGFjaEZyb21XaW5kb3coKSB7IH0KKyAgICAgICAgdm9pZCBzZXRDb250YWlu
aW5nV2luZG93KFBsYXRmb3JtV2lkZ2V0IHdpbmRvdyk7CisgICAgICAgIFBsYXRmb3JtV2lkZ2V0
IGNvbnRhaW5pbmdXaW5kb3coKSBjb25zdDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgZ2VvbWV0
cnlDaGFuZ2VkKCkgY29uc3Qge307Ci0gICAgICAgIAotICAgICAgICBJbnRSZWN0IGNvbnZlcnRU
b0NvbnRhaW5pbmdXaW5kb3coY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAgICAgICBJbnRQb2lu
dCBjb252ZXJ0VG9Db250YWluaW5nV2luZG93KGNvbnN0IEludFBvaW50JikgY29uc3Q7Ci0gICAg
ICAgIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRQb2ludCYp
IGNvbnN0OwotCi0gICAgICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydENoaWxkVG9TZWxmKGNv
bnN0IFdpZGdldCosIGNvbnN0IEludFBvaW50JikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgSW50
UG9pbnQgY29udmVydFNlbGZUb0NoaWxkKGNvbnN0IFdpZGdldCosIGNvbnN0IEludFBvaW50Jikg
Y29uc3Q7Ci0KLSAgICAgICAgYm9vbCBzdXBwcmVzc0ludmFsaWRhdGlvbigpIGNvbnN0OwotICAg
ICAgICB2b2lkIHNldFN1cHByZXNzSW52YWxpZGF0aW9uKGJvb2wpOwotCi0jZW5kaWYKLQotI2lm
IFBMQVRGT1JNKEdUSykKLSAgICAgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3
Kik7Ci0gICAgICAgIFNjcm9sbFZpZXcqIHBhcmVudCgpIGNvbnN0OworICAgICAgICB2b2lkIHNl
dE5hdGl2ZVdpZGdldChQbGF0Zm9ybVdpZGdldCB3aWRnZXQpIHsgbV93aWRnZXQgPSB3aWRnZXQ7
IH0KKyAgICAgICAgUGxhdGZvcm1XaWRnZXQgbmF0aXZlV2lkZ2V0KCkgY29uc3QgeyByZXR1cm4g
bV93aWRnZXQ7IH0KIAotICAgICAgICB2b2lkIHNldENvbnRhaW5pbmdXaW5kb3coR3RrQ29udGFp
bmVyKik7Ci0gICAgICAgIEd0a0NvbnRhaW5lciogY29udGFpbmluZ1dpbmRvdygpIGNvbnN0Owor
ICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0UGFyZW50KFdpZGdldCopOworICAgICAgICBXaWRnZXQq
IHBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50OyB9CiAKICAgICAgICAgdmlydHVhbCB2
b2lkIGdlb21ldHJ5Q2hhbmdlZCgpIGNvbnN0OwogCkBAIC0xNTksMzYgKzE0NCwxNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydENoaWxkVG9T
ZWxmKGNvbnN0IFdpZGdldCosIGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAgICAgICAgIHZpcnR1
YWwgSW50UG9pbnQgY29udmVydFNlbGZUb0NoaWxkKGNvbnN0IFdpZGdldCosIGNvbnN0IEludFBv
aW50JikgY29uc3Q7CiAKLSAgICAgICAgYm9vbCBzdXBwcmVzc0ludmFsaWRhdGlvbigpIGNvbnN0
OworICAgICAgICBib29sIHN1cHByZXNzSW52YWxpZGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9z
dXBwcmVzc0ludmFsaWRhdGlvbjsgfQogICAgICAgICB2b2lkIHNldFN1cHByZXNzSW52YWxpZGF0
aW9uKGJvb2wpOwogCi0gICAgICAgIEd0a1dpZGdldCogZ3RrV2lkZ2V0KCkgY29uc3Q7Ci1wcm90
ZWN0ZWQ6Ci0gICAgICAgIHZvaWQgc2V0R3RrV2lkZ2V0KEd0a1dpZGdldCopOwotI2VuZGlmCisg
ICAgICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hUb1dpbmRvdygpIHsgfQorICAgICAgICB2aXJ0dWFs
IHZvaWQgZGV0YWNoRnJvbVdpbmRvdygpIHsgfQorCXZpcnR1YWwgYm9vbCBpc0F0dGFjaGVkVG9X
aW5kb3coKSB7IHJldHVybiBmYWxzZTsgfQogCiAjaWYgUExBVEZPUk0oUVQpCi0gICAgICAgIHZv
aWQgc2V0TmF0aXZlV2lkZ2V0KFFXaWRnZXQgKndpZGdldCk7Ci0gICAgICAgIFFXaWRnZXQqIG5h
dGl2ZVdpZGdldCgpIGNvbnN0OwotCi0gICAgICAgIFFXaWRnZXQgKmNvbnRhaW5pbmdXaW5kb3co
KSBjb25zdDsKLQogICAgICAgICBRV2ViRnJhbWUqIHF3ZWJmcmFtZSgpIGNvbnN0OwogICAgICAg
ICB2b2lkIHNldFFXZWJGcmFtZShRV2ViRnJhbWUgKndlYkZyYW1lKTsKLSAgICAgICAgdmlydHVh
bCB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3Kik7Ci0gICAgICAgIFNjcm9sbFZpZXcqIHBhcmVu
dCgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIHZvaWQgZ2VvbWV0cnlDaGFuZ2VkKCkgY29uc3Q7
Ci0gICAgICAgIFNjcm9sbFZpZXcqIHRvcExldmVsKCkgY29uc3Q7Ci0KLSAgICAgICAgSW50UmVj
dCBjb252ZXJ0VG9Db250YWluaW5nV2luZG93KGNvbnN0IEludFJlY3QmKSBjb25zdDsKLSAgICAg
ICAgSW50UG9pbnQgY29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRQb2ludCYpIGNv
bnN0OwotICAgICAgICBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coY29uc3Qg
SW50UG9pbnQmKSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRDaGls
ZFRvU2VsZihjb25zdCBXaWRnZXQqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OwotICAgICAgICB2
aXJ0dWFsIEludFBvaW50IGNvbnZlcnRTZWxmVG9DaGlsZChjb25zdCBXaWRnZXQqLCBjb25zdCBJ
bnRQb2ludCYpIGNvbnN0OwotCi0gICAgICAgIGJvb2wgc3VwcHJlc3NJbnZhbGlkYXRpb24oKSBj
b25zdDsKLSAgICAgICAgdm9pZCBzZXRTdXBwcmVzc0ludmFsaWRhdGlvbihib29sKTsKKyAgICAg
ICAgV2lkZ2V0KiB0b3BMZXZlbCgpIGNvbnN0OwogI2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMp
CkBAIC0yMDgsMTEgKzE3NCwxOSBAQCBwcm90ZWN0ZWQ6CiAKICNpZiBQTEFURk9STShXWCkKICAg
ICAgICAgV2lkZ2V0KHd4V2luZG93Kik7Ci0gICAgICAgIHd4V2luZG93KiBuYXRpdmVXaW5kb3co
KSBjb25zdDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHNldE5hdGl2ZVdpbmRvdyh3eFdpbmRvdyop
OwogI2VuZGlmCiAKICAgICBwcml2YXRlOgorICAgICAgICBQbGF0Zm9ybVdpZGdldCBtX2NvbnRh
aW5pbmdXaW5kb3c7CisgICAgICAgIFBsYXRmb3JtV2lkZ2V0IG1fd2lkZ2V0OworCisgICAgICAg
IFdpZGdldCogbV9wYXJlbnQ7CisgICAgICAgIFdpZGdldENsaWVudCogbV93aWRnZXRDbGllbnQ7
CisKKyAgICAgICAgYm9vbCBtX3N1cHByZXNzSW52YWxpZGF0aW9uOworCisgICAgICAgIEludFJl
Y3QgbV9mcmFtZVJlY3Q7CisKICAgICAgICAgV2lkZ2V0UHJpdmF0ZSogZGF0YTsKICAgICB9Owog
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVNjcm9sbEJhckd0ay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1TY3JvbGxCYXJHdGsuY3Bw
CShyZXZpc2lvbiAzMDk5MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtU2Nyb2xs
QmFyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBQbGF0Zm9ybVNjcm9s
bGJhcjo6UGxhdGZvcm1TY3JvbGxiYXIoU2NyCiAgICAgZ19zaWduYWxfY29ubmVjdChHX09CSkVD
VChzY3JvbGxCYXIpLCAidmFsdWUtY2hhbmdlZCIsIEdfQ0FMTEJBQ0soUGxhdGZvcm1TY3JvbGxi
YXI6Omd0a1ZhbHVlQ2hhbmdlZCksIHRoaXMpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QoR19PQkpF
Q1Qoc2Nyb2xsQmFyKSwgInNjcm9sbC1ldmVudCIsIEdfQ0FMTEJBQ0soZ3RrU2Nyb2xsRXZlbnRD
YWxsYmFjayksIHRoaXMpOwogCi0gICAgc2V0R3RrV2lkZ2V0KEdUS19XSURHRVQoc2Nyb2xsQmFy
KSk7CisgICAgc2V0TmF0aXZlV2lkZ2V0KEdUS19XSURHRVQoc2Nyb2xsQmFyKSk7CiAKICAgICAv
KgogICAgICAqIGFzc2lnbiBhIHNhbmUgZGVmYXVsdCB3aWR0aCBhbmQgaGVpZ2h0IHRvIHRoZSBT
Y3JvbGxCYXIsIG90aGVyd2lzZQpAQCAtNjUsOSArNjUsOSBAQCBQbGF0Zm9ybVNjcm9sbGJhcjo6
flBsYXRmb3JtU2Nyb2xsYmFyKCkKICAgICAvKgogICAgICAqIHRoZSBXaWRnZXQgZG9lcyBub3Qg
dGFrZSBvdmVyIG93bmVyc2hpcC4KICAgICAgKi8KLSAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNj
b25uZWN0X2J5X2Z1bmMoR19PQkpFQ1QoZ3RrV2lkZ2V0KCkpLCAoZ3BvaW50ZXIpUGxhdGZvcm1T
Y3JvbGxiYXI6Omd0a1ZhbHVlQ2hhbmdlZCwgdGhpcyk7Ci0gICAgZ19zaWduYWxfaGFuZGxlcnNf
ZGlzY29ubmVjdF9ieV9mdW5jKEdfT0JKRUNUKGd0a1dpZGdldCgpKSwgKGdwb2ludGVyKWd0a1Nj
cm9sbEV2ZW50Q2FsbGJhY2ssIHRoaXMpOwotICAgIGdfb2JqZWN0X3VucmVmKEdfT0JKRUNUKGd0
a1dpZGdldCgpKSk7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKEdf
T0JKRUNUKG5hdGl2ZVdpZGdldCgpKSwgKGdwb2ludGVyKVBsYXRmb3JtU2Nyb2xsYmFyOjpndGtW
YWx1ZUNoYW5nZWQsIHRoaXMpOworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlf
ZnVuYyhHX09CSkVDVChuYXRpdmVXaWRnZXQoKSksIChncG9pbnRlcilndGtTY3JvbGxFdmVudENh
bGxiYWNrLCB0aGlzKTsKKyAgICBnX29iamVjdF91bnJlZihHX09CSkVDVChuYXRpdmVXaWRnZXQo
KSkpOwogfQogCiBpbnQgUGxhdGZvcm1TY3JvbGxiYXI6OndpZHRoKCkgY29uc3QKQEAgLTEyMyw3
ICsxMjMsNyBAQCB2b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjpnZW9tZXRyeUNoYW5nZWQoCiAgICAg
RnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSk7
CiAgICAgSW50UmVjdCB3aW5kb3dSZWN0ID0gSW50UmVjdChmcmFtZVZpZXctPmNvbnRlbnRzVG9X
aW5kb3coZnJhbWVHZW9tZXRyeSgpLmxvY2F0aW9uKCkpLCBmcmFtZUdlb21ldHJ5KCkuc2l6ZSgp
KTsKICAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IHdpbmRvd1JlY3QueCgpLCB3aW5k
b3dSZWN0LnkoKSwgd2luZG93UmVjdC53aWR0aCgpLCB3aW5kb3dSZWN0LmhlaWdodCgpIH07Ci0g
ICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKGd0a1dpZGdldCgpLCAmYWxsb2NhdGlvbik7Cisg
ICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKG5hdGl2ZVdpZGdldCgpLCAmYWxsb2NhdGlvbik7
CiB9CiAKIHZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6Omd0a1ZhbHVlQ2hhbmdlZChHdGtBZGp1c3Rt
ZW50KiwgUGxhdGZvcm1TY3JvbGxiYXIqIHRoYXQpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0
ay9TY3JvbGxWaWV3R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9T
Y3JvbGxWaWV3R3RrLmNwcAkocmV2aXNpb24gMzA5OTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0
ay9TY3JvbGxWaWV3R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcgKzEzNCw3IEBAIHZv
aWQgU2Nyb2xsVmlld1Njcm9sbGJhcjo6Z2VvbWV0cnlDaGFuZ2UKICAgICBzei5jbGFtcE5lZ2F0
aXZlVG9aZXJvKCk7CiAKICAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IGxvYy54KCks
IGxvYy55KCksIHN6LndpZHRoKCksIHN6LmhlaWdodCgpIH07Ci0gICAgZ3RrX3dpZGdldF9zaXpl
X2FsbG9jYXRlKGd0a1dpZGdldCgpLCAmYWxsb2NhdGlvbik7CisgICAgZ3RrX3dpZGdldF9zaXpl
X2FsbG9jYXRlKG5hdGl2ZVdpZGdldCgpLCAmYWxsb2NhdGlvbik7CiB9CiAKIHZvaWQgU2Nyb2xs
Vmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9vbCBo
YXNCYXIpCkBAIC00NzksOCArNDc5LDggQEAgdm9pZCBTY3JvbGxWaWV3OjphZGRDaGlsZChXaWRn
ZXQqIGNoaWxkKQogICAgIGNoaWxkLT5zZXRDb250YWluaW5nV2luZG93KGNvbnRhaW5pbmdXaW5k
b3coKSk7CiAgICAgbV9kYXRhLT5jaGlsZHJlbi5hZGQoY2hpbGQpOwogCi0gICAgaWYgKGNoaWxk
LT5ndGtXaWRnZXQoKSkKLSAgICAgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihj
b250YWluaW5nV2luZG93KCkpLCBjaGlsZC0+Z3RrV2lkZ2V0KCkpOworICAgIGlmIChjaGlsZC0+
bmF0aXZlV2lkZ2V0KCkpCisgICAgICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIo
Y29udGFpbmluZ1dpbmRvdygpKSwgY2hpbGQtPm5hdGl2ZVdpZGdldCgpKTsKIH0KIAogdm9pZCBT
Y3JvbGxWaWV3OjpyZW1vdmVDaGlsZChXaWRnZXQqIGNoaWxkKQpAQCAtNDg4LDggKzQ4OCw4IEBA
IHZvaWQgU2Nyb2xsVmlldzo6cmVtb3ZlQ2hpbGQoV2lkZ2V0KiBjaGkKICAgICBjaGlsZC0+c2V0
UGFyZW50KDApOwogICAgIG1fZGF0YS0+Y2hpbGRyZW4ucmVtb3ZlKGNoaWxkKTsKIAotICAgIGlm
IChjaGlsZC0+Z3RrV2lkZ2V0KCkgJiYgR1RLX1dJREdFVChjb250YWluaW5nV2luZG93KCkpID09
IEdUS19XSURHRVQoY2hpbGQtPmd0a1dpZGdldCgpKS0+cGFyZW50KQotICAgICAgICBndGtfY29u
dGFpbmVyX3JlbW92ZShHVEtfQ09OVEFJTkVSKGNvbnRhaW5pbmdXaW5kb3coKSksIGNoaWxkLT5n
dGtXaWRnZXQoKSk7CisgICAgaWYgKGNoaWxkLT5uYXRpdmVXaWRnZXQoKSAmJiBHVEtfV0lER0VU
KGNvbnRhaW5pbmdXaW5kb3coKSkgPT0gR1RLX1dJREdFVChjaGlsZC0+bmF0aXZlV2lkZ2V0KCkp
LT5wYXJlbnQpCisgICAgICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIoY29u
dGFpbmluZ1dpbmRvdygpKSwgY2hpbGQtPm5hdGl2ZVdpZGdldCgpKTsKIH0KIAogdm9pZCBTY3Jv
bGxWaWV3OjpzY3JvbGxSZWN0SW50b1ZpZXdSZWN1cnNpdmVseShjb25zdCBJbnRSZWN0JiByKQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3RrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwCShyZXZpc2lvbiAzMDk5MykKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDE2
ICs0Miw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgV2lkZ2V0UHJpdmF0ZSB7CiBw
dWJsaWM6Ci0gICAgR3RrV2lkZ2V0KiB3aWRnZXQ7Ci0gICAgV2lkZ2V0Q2xpZW50KiBjbGllbnQ7
Ci0gICAgSW50UmVjdCBmcmFtZVJlY3Q7Ci0KLSAgICBTY3JvbGxWaWV3KiBwYXJlbnQ7Ci0gICAg
R3RrQ29udGFpbmVyKiBjb250YWluaW5nV2luZG93OwotICAgIGJvb2wgc3VwcHJlc3NJbnZhbGlk
YXRpb247CiAgICAgR2RrQ3Vyc29yKiBjdXJzb3I7CiAKLSAgICBHZGtEcmF3YWJsZSogZ2RrRHJh
d2FibGUoKSBjb25zdAorICAgIEdka0RyYXdhYmxlKiBnZGtEcmF3YWJsZShHdGtXaWRnZXQqIHdp
ZGdldCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiB3aWRnZXQgPyB3aWRnZXQtPndpbmRv
dyA6IDA7CiAgICAgfQpAQCAtNTksNzMgKzUyLDI1IEBAIHB1YmxpYzoKIAogV2lkZ2V0OjpXaWRn
ZXQoKQogICAgIDogZGF0YShuZXcgV2lkZ2V0UHJpdmF0ZSkKKyAgICAsIG1fY29udGFpbmluZ1dp
bmRvdygwKQorICAgICwgbV93aWRnZXQoMCkKKyAgICAsIG1fcGFyZW50KDApCisgICAgLCBtX3dp
ZGdldENsaWVudCgwKQorICAgICwgbV9zdXBwcmVzc0ludmFsaWRhdGlvbihmYWxzZSkKKyAgICAs
IG1fZnJhbWVSZWN0KDAsIDAsIDAsIDApCiB7Ci0gICAgZGF0YS0+d2lkZ2V0ID0gMDsKLSAgICBk
YXRhLT5wYXJlbnQgPSAwOwotICAgIGRhdGEtPmNvbnRhaW5pbmdXaW5kb3cgPSAwOwotICAgIGRh
dGEtPnN1cHByZXNzSW52YWxpZGF0aW9uID0gZmFsc2U7CiAgICAgZGF0YS0+Y3Vyc29yID0gMDsK
IH0KIAotR3RrV2lkZ2V0KiBXaWRnZXQ6Omd0a1dpZGdldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGRhdGEtPndpZGdldDsKLX0KLQotdm9pZCBXaWRnZXQ6OnNldEd0a1dpZGdldChHdGtXaWRnZXQq
IHdpZGdldCkKLXsKLSAgICBkYXRhLT53aWRnZXQgPSB3aWRnZXQ7Ci19Ci0KIFdpZGdldDo6fldp
ZGdldCgpCiB7CiAgICAgQVNTRVJUKCFwYXJlbnQoKSk7CiAgICAgZGVsZXRlIGRhdGE7CiB9CiAK
LXZvaWQgV2lkZ2V0OjpzZXRDb250YWluaW5nV2luZG93KEd0a0NvbnRhaW5lciogY29udGFpbmlu
Z1dpbmRvdykKLXsKLSAgICBkYXRhLT5jb250YWluaW5nV2luZG93ID0gY29udGFpbmluZ1dpbmRv
dzsKLX0KLQotR3RrQ29udGFpbmVyKiBXaWRnZXQ6OmNvbnRhaW5pbmdXaW5kb3coKSBjb25zdAot
ewotICAgIHJldHVybiBkYXRhLT5jb250YWluaW5nV2luZG93OwotfQotCi12b2lkIFdpZGdldDo6
c2V0Q2xpZW50KFdpZGdldENsaWVudCogYykKLXsKLSAgICBkYXRhLT5jbGllbnQgPSBjOwotfQot
Ci1XaWRnZXRDbGllbnQqIFdpZGdldDo6Y2xpZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZGF0
YS0+Y2xpZW50OwotfQotCi1JbnRSZWN0IFdpZGdldDo6ZnJhbWVHZW9tZXRyeSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGRhdGEtPmZyYW1lUmVjdDsKLX0KLQotdm9pZCBXaWRnZXQ6OnNldEZyYW1l
R2VvbWV0cnkoY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBkYXRhLT5mcmFtZVJlY3QgPSByOwot
fQotCi12b2lkIFdpZGdldDo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHYpCi17Ci0gICAgZGF0YS0+
cGFyZW50ID0gdjsKLX0KLQotU2Nyb2xsVmlldyogV2lkZ2V0OjpwYXJlbnQoKSBjb25zdAotewot
ICAgIHJldHVybiBkYXRhLT5wYXJlbnQ7Ci19Ci0KIHZvaWQgV2lkZ2V0OjpzZXRGb2N1cygpCiB7
Ci0gICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKGd0a1dpZGdldCgpID8gZ3RrV2lkZ2V0KCkgOiBH
VEtfV0lER0VUKGNvbnRhaW5pbmdXaW5kb3coKSkpOworICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1
cyhuYXRpdmVXaWRnZXQoKSA/IG5hdGl2ZVdpZGdldCgpIDogR1RLX1dJREdFVChjb250YWluaW5n
V2luZG93KCkpKTsKIH0KIAogQ3Vyc29yIFdpZGdldDo6Y3Vyc29yKCkKQEAgLTE0Niw0MiArOTEs
MzYgQEAgdm9pZCBXaWRnZXQ6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1cgogICAgIGlmIChw
Y3VyID09IGRhdGEtPmN1cnNvcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgZ2RrX3dpbmRvd19z
ZXRfY3Vyc29yKGRhdGEtPmdka0RyYXdhYmxlKCkgPyBHREtfV0lORE9XKGRhdGEtPmdka0RyYXdh
YmxlKCkpIDogR1RLX1dJREdFVChjb250YWluaW5nV2luZG93KCkpLT53aW5kb3csIHBjdXIpOwor
ICAgIGdka193aW5kb3dfc2V0X2N1cnNvcihkYXRhLT5nZGtEcmF3YWJsZShuYXRpdmVXaWRnZXQo
KSkgPyBHREtfV0lORE9XKGRhdGEtPmdka0RyYXdhYmxlKG5hdGl2ZVdpZGdldCgpKSkgOiBHVEtf
V0lER0VUKGNvbnRhaW5pbmdXaW5kb3coKSktPndpbmRvdywgcGN1cik7CiAgICAgZGF0YS0+Y3Vy
c29yID0gcGN1cjsKIH0KIAogdm9pZCBXaWRnZXQ6OnNob3coKQogewotICAgIGlmICghZ3RrV2lk
Z2V0KCkpCisgICAgaWYgKCFuYXRpdmVXaWRnZXQoKSkKICAgICAgICAgIHJldHVybjsKLSAgICBn
dGtfd2lkZ2V0X3Nob3coZ3RrV2lkZ2V0KCkpOworICAgIGd0a193aWRnZXRfc2hvdyhuYXRpdmVX
aWRnZXQoKSk7CiB9CiAKIHZvaWQgV2lkZ2V0OjpoaWRlKCkKIHsKLSAgICBpZiAoIWd0a1dpZGdl
dCgpKQorICAgIGlmICghbmF0aXZlV2lkZ2V0KCkpCiAgICAgICAgICByZXR1cm47Ci0gICAgZ3Rr
X3dpZGdldF9oaWRlKGd0a1dpZGdldCgpKTsKKyAgICBndGtfd2lkZ2V0X2hpZGUobmF0aXZlV2lk
Z2V0KCkpOwogfQogCiB2b2lkIFdpZGdldDo6c2V0RW5hYmxlZChib29sIHNob3VsZEVuYWJsZSkK
IHsKLSAgICBpZiAoIWd0a1dpZGdldCgpKQorICAgIGlmICghbmF0aXZlV2lkZ2V0KCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUoZ3RrV2lkZ2V0KCksIHNo
b3VsZEVuYWJsZSk7CisgICAgZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKG5hdGl2ZVdpZGdldCgp
LCBzaG91bGRFbmFibGUpOwogfQogCiBib29sIFdpZGdldDo6aXNFbmFibGVkKCkgY29uc3QKIHsK
LSAgICBpZiAoIWd0a1dpZGdldCgpKQorICAgIGlmICghbmF0aXZlV2lkZ2V0KCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gR1RLX1dJREdFVF9JU19TRU5TSVRJVkUoZ3RrV2lk
Z2V0KCkpOwotfQotCi12b2lkIFdpZGdldDo6cmVtb3ZlRnJvbVBhcmVudCgpCi17Ci0gICAgaWYg
KHBhcmVudCgpKQotICAgICAgICBwYXJlbnQoKS0+cmVtb3ZlQ2hpbGQodGhpcyk7CisgICAgcmV0
dXJuIEdUS19XSURHRVRfSVNfU0VOU0lUSVZFKG5hdGl2ZVdpZGdldCgpKTsKIH0KIAogLyoKQEAg
LTE5MiwxMyArMTMxLDEzIEBAIHZvaWQgV2lkZ2V0OjpyZW1vdmVGcm9tUGFyZW50KCkKICAqLwog
dm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVj
dCYpCiB7Ci0gICAgaWYgKCFndGtXaWRnZXQoKSkKKyAgICBpZiAoIW5hdGl2ZVdpZGdldCgpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWNvbnRleHQtPmdka0V4cG9zZUV2ZW50KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEd0a1dpZGdldCogd2lkZ2V0ID0gZ3RrV2lkZ2V0KCk7Cisg
ICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBuYXRpdmVXaWRnZXQoKTsKICAgICBBU1NFUlQoR1RLX1dJ
REdFVF9OT19XSU5ET1cod2lkZ2V0KSk7CiAKICAgICBHZGtFdmVudCogZXZlbnQgPSBnZGtfZXZl
bnRfbmV3KEdES19FWFBPU0UpOwpAQCAtMjI2LDE0ICsxNjUsOSBAQCB2b2lkIFdpZGdldDo6c2V0
SXNTZWxlY3RlZChib29sKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgV2lkZ2V0
OjppbnZhbGlkYXRlKCkKLXsKLSAgICBpbnZhbGlkYXRlUmVjdChJbnRSZWN0KDAsIDAsIHdpZHRo
KCksIGhlaWdodCgpKSk7Ci19Ci0KIHZvaWQgV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChjb25zdCBJ
bnRSZWN0JiByZWN0KQogewotICAgIGlmIChkYXRhLT5zdXBwcmVzc0ludmFsaWRhdGlvbikKKyAg
ICBpZiAoc3VwcHJlc3NJbnZhbGlkYXRpb24oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYg
KCFwYXJlbnQoKSkgewpAQCAtMjQ1LDcgKzE3OSw3IEBAIHZvaWQgV2lkZ2V0OjppbnZhbGlkYXRl
UmVjdChjb25zdCBJbnRSZWMKICAgICB9CiAKICAgICAvLyBHZXQgdGhlIHJvb3Qgd2lkZ2V0Lgot
ICAgIFNjcm9sbFZpZXcqIG91dGVybW9zdFZpZXcgPSBwYXJlbnQoKTsKKyAgICBXaWRnZXQqIG91
dGVybW9zdFZpZXcgPSBwYXJlbnQoKTsKICAgICB3aGlsZSAob3V0ZXJtb3N0VmlldyAmJiBvdXRl
cm1vc3RWaWV3LT5wYXJlbnQoKSkKICAgICAgICAgb3V0ZXJtb3N0VmlldyA9IG91dGVybW9zdFZp
ZXctPnBhcmVudCgpOwogICAgIGlmICghb3V0ZXJtb3N0VmlldykKQEAgLTI4NCwyNiArMjE4LDYg
QEAgSW50UmVjdCBXaWRnZXQ6OmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kbwogICAgIHJldHVybiBj
b252ZXJ0ZWRSZWN0OwogfQogCi1JbnRQb2ludCBXaWRnZXQ6OmNvbnZlcnRDaGlsZFRvU2VsZihj
b25zdCBXaWRnZXQqIGNoaWxkLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIEludFBvaW50KHBvaW50LngoKSArIGNoaWxkLT54KCksIHBvaW50LnkoKSArIGNoaWxk
LT55KCkpOwotfQotCi1JbnRQb2ludCBXaWRnZXQ6OmNvbnZlcnRTZWxmVG9DaGlsZChjb25zdCBX
aWRnZXQqIGNoaWxkLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IEludFBvaW50KHBvaW50LngoKSAtIGNoaWxkLT54KCksIHBvaW50LnkoKSAtIGNoaWxkLT55KCkp
OwotfQotCi1ib29sIFdpZGdldDo6c3VwcHJlc3NJbnZhbGlkYXRpb24oKSBjb25zdAotewotICAg
IHJldHVybiBkYXRhLT5zdXBwcmVzc0ludmFsaWRhdGlvbjsKLX0KLQotdm9pZCBXaWRnZXQ6OnNl
dFN1cHByZXNzSW52YWxpZGF0aW9uKGJvb2wgc3VwcHJlc3MpCi17Ci0gICAgZGF0YS0+c3VwcHJl
c3NJbnZhbGlkYXRpb24gPSBzdXBwcmVzczsKLX0KLQogdm9pZCBXaWRnZXQ6Omdlb21ldHJ5Q2hh
bmdlZCgpIGNvbnN0CiB7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1BsYXRmb3JtU2Ny
b2xsQmFyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvUGxhdGZvcm1T
Y3JvbGxCYXJRdC5jcHAJKHJldmlzaW9uIDMwOTkzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9Q
bGF0Zm9ybVNjcm9sbEJhclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDI1LDcgKzQyNSw3IEBA
IGludCBQbGF0Zm9ybVNjcm9sbGJhcjo6dmVydGljYWxTY3JvbGxiYXIKIHZvaWQgUGxhdGZvcm1T
Y3JvbGxiYXI6OmludmFsaWRhdGUoKQogewogICAgIC8vIEdldCB0aGUgcm9vdCB3aWRnZXQuCi0g
ICAgU2Nyb2xsVmlldyogb3V0ZXJtb3N0VmlldyA9IHRvcExldmVsKCk7CisgICAgV2lkZ2V0KiBv
dXRlcm1vc3RWaWV3ID0gdG9wTGV2ZWwoKTsKICAgICBpZiAoIW91dGVybW9zdFZpZXcpCiAgICAg
ICAgIHJldHVybjsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9XaWRnZXRRdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9XaWRnZXRRdC5jcHAJKHJldmlzaW9uIDMw
OTkzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9XaWRnZXRRdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU0LDI2ICs1NCwyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdHJ1Y3QgV2lkZ2V0UHJp
dmF0ZQogewogICAgIFdpZGdldFByaXZhdGUoKQotICAgICAgICA6IG1fY2xpZW50KDApCi0gICAg
ICAgICwgZW5hYmxlZCh0cnVlKQotICAgICAgICAsIHN1cHByZXNzSW52YWxpZGF0aW9uKGZhbHNl
KQotICAgICAgICAsIG1fd2lkZ2V0KDApCisgICAgICAgIDogZW5hYmxlZCh0cnVlKQogICAgICAg
ICAsIG1fd2ViRnJhbWUoMCkKICAgICAgICAgLCBtX3BhcmVudFNjcm9sbFZpZXcoMCkgeyB9CiAg
ICAgfldpZGdldFByaXZhdGUoKSB7IGRlbGV0ZSBtX3dlYkZyYW1lOyB9CiAKLSAgICBXaWRnZXRD
bGllbnQqIG1fY2xpZW50OwotCiAgICAgYm9vbCBlbmFibGVkOwotICAgIGJvb2wgc3VwcHJlc3NJ
bnZhbGlkYXRpb247CiAgICAgUVJlY3QgbV9nZW9tZXRyeTsKLSAgICBRV2lkZ2V0ICptX3dpZGdl
dDsgLy9mb3IgcGx1Z2lucwogICAgIFFXZWJGcmFtZSAqbV93ZWJGcmFtZTsKICAgICBTY3JvbGxW
aWV3ICptX3BhcmVudFNjcm9sbFZpZXc7CiB9OwogCiBXaWRnZXQ6OldpZGdldCgpCiAgICAgOiBk
YXRhKG5ldyBXaWRnZXRQcml2YXRlKCkpCisgICAgLCBtX2NvbnRhaW5pbmdXaW5kb3coMCkKKyAg
ICAsIG1fd2lkZ2V0KDApCisgICAgLCBtX3BhcmVudCgwKQorICAgICwgbV93aWRnZXRDbGllbnQo
MCkKKyAgICAsIG1fc3VwcHJlc3NJbnZhbGlkYXRpb24oZmFsc2UpCisgICAgLCBtX2ZyYW1lUmVj
dCgwLCAwLCAwLCAwKQogewogfQogCkBAIC04NCwzMCArODMsNiBAQCBXaWRnZXQ6On5XaWRnZXQo
KQogICAgIGRhdGEgPSAwOwogfQogCi12b2lkIFdpZGdldDo6c2V0Q2xpZW50KFdpZGdldENsaWVu
dCogYykKLXsKLSAgICBkYXRhLT5tX2NsaWVudCA9IGM7Ci19Ci0KLVdpZGdldENsaWVudCogV2lk
Z2V0OjpjbGllbnQoKSBjb25zdAotewotICAgIHJldHVybiBkYXRhLT5tX2NsaWVudDsKLX0KLQot
SW50UmVjdCBXaWRnZXQ6OmZyYW1lR2VvbWV0cnkoKSBjb25zdAotewotICAgIGlmIChkYXRhLT5t
X3dpZGdldCkKLSAgICAgICAgZGF0YS0+bV93aWRnZXQtPmdlb21ldHJ5KCk7Ci0gICAgcmV0dXJu
IGRhdGEtPm1fZ2VvbWV0cnk7Ci19Ci0KLXZvaWQgV2lkZ2V0OjpzZXRGcmFtZUdlb21ldHJ5KGNv
bnN0IEludFJlY3QmIHIpCi17Ci0gICAgaWYgKGRhdGEtPm1fd2lkZ2V0KQotICAgICAgICBkYXRh
LT5tX3dpZGdldC0+c2V0R2VvbWV0cnkocik7Ci0gICAgZGF0YS0+bV9nZW9tZXRyeSA9IHI7Ci19
Ci0KIHZvaWQgV2lkZ2V0OjpzZXRGb2N1cygpCiB7CiB9CkBAIC0xMjIsMTQgKzk3LDE0IEBAIHZv
aWQgV2lkZ2V0OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBjdXIKIAogdm9pZCBXaWRnZXQ6OnNo
b3coKQogewotICAgIGlmIChkYXRhLT5tX3dpZGdldCkKLSAgICAgICAgZGF0YS0+bV93aWRnZXQt
PnNob3coKTsKKyAgICBpZiAobmF0aXZlV2lkZ2V0KCkpCisgICAgICAgIG5hdGl2ZVdpZGdldCgp
LT5zaG93KCk7CiB9CiAKIHZvaWQgV2lkZ2V0OjpoaWRlKCkKIHsKLSAgICBpZiAoZGF0YS0+bV93
aWRnZXQpCi0gICAgICAgIGRhdGEtPm1fd2lkZ2V0LT5oaWRlKCk7CisgICAgaWYgKG5hdGl2ZVdp
ZGdldCgpKQorICAgICAgICBuYXRpdmVXaWRnZXQoKS0+aGlkZSgpOwogfQogCiBRV2ViRnJhbWUq
IFdpZGdldDo6cXdlYmZyYW1lKCkgY29uc3QKQEAgLTE0MiwzMSArMTE3LDIxIEBAIHZvaWQgV2lk
Z2V0OjpzZXRRV2ViRnJhbWUoUVdlYkZyYW1lKiB3ZWIKICAgICBkYXRhLT5tX3dlYkZyYW1lID0g
d2ViRnJhbWU7CiB9CiAKLVFXaWRnZXQqIFdpZGdldDo6bmF0aXZlV2lkZ2V0KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gZGF0YS0+bV93aWRnZXQ7Ci19Ci0KLXZvaWQgV2lkZ2V0OjpzZXROYXRpdmVX
aWRnZXQoUVdpZGdldCAqd2lkZ2V0KQotewotICAgIGRhdGEtPm1fd2lkZ2V0ID0gd2lkZ2V0Owot
fQotCiB2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0ICosIGNvbnN0IEludFJlY3Qg
JnJlY3QpCiB7CiB9CiAKIGJvb2wgV2lkZ2V0Ojppc0VuYWJsZWQoKSBjb25zdAogewotICAgIGlm
IChkYXRhLT5tX3dpZGdldCkKLSAgICAgICAgcmV0dXJuIGRhdGEtPm1fd2lkZ2V0LT5pc0VuYWJs
ZWQoKTsKKyAgICBpZiAobmF0aXZlV2lkZ2V0KCkpCisgICAgICAgIHJldHVybiBuYXRpdmVXaWRn
ZXQoKS0+aXNFbmFibGVkKCk7CiAgICAgcmV0dXJuIGRhdGEtPmVuYWJsZWQ7CiB9CiAKIHZvaWQg
V2lkZ2V0OjpzZXRFbmFibGVkKGJvb2wgZSkKIHsKLSAgICBpZiAoZGF0YS0+bV93aWRnZXQpCi0g
ICAgICAgIGRhdGEtPm1fd2lkZ2V0LT5zZXRFbmFibGVkKGUpOworICAgIGlmIChuYXRpdmVXaWRn
ZXQoKSkKKyAgICAgICAgbmF0aXZlV2lkZ2V0KCktPnNldEVuYWJsZWQoZSk7CiAKICAgICBpZiAo
ZSAhPSBkYXRhLT5lbmFibGVkKSB7CiAgICAgICAgIGRhdGEtPmVuYWJsZWQgPSBlOwpAQCAtMTc5
LDI4ICsxNDQsMTMgQEAgdm9pZCBXaWRnZXQ6OnNldElzU2VsZWN0ZWQoYm9vbCkKICAgICBub3RJ
bXBsZW1lbnRlZCgpOwogfQogCi1ib29sIFdpZGdldDo6c3VwcHJlc3NJbnZhbGlkYXRpb24oKSBj
b25zdAotewotICAgIHJldHVybiBkYXRhLT5zdXBwcmVzc0ludmFsaWRhdGlvbjsKLX0KLQotdm9p
ZCBXaWRnZXQ6OnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGJvb2wgc3VwcHJlc3MpCi17Ci0gICAg
ZGF0YS0+c3VwcHJlc3NJbnZhbGlkYXRpb24gPSBzdXBwcmVzczsKLX0KLQotdm9pZCBXaWRnZXQ6
OmludmFsaWRhdGUoKQotewotICAgIGludmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgd2lkdGgo
KSwgaGVpZ2h0KCkpKTsKLX0KLQogdm9pZCBXaWRnZXQ6OmludmFsaWRhdGVSZWN0KGNvbnN0IElu
dFJlY3QmIHIpCiB7Ci0gICAgaWYgKGRhdGEtPnN1cHByZXNzSW52YWxpZGF0aW9uKQorICAgIGlm
IChzdXBwcmVzc0ludmFsaWRhdGlvbigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoZGF0
YS0+bV93aWRnZXQpIHsgLy9wbHVnaW5zCi0gICAgICAgIGRhdGEtPm1fd2lkZ2V0LT51cGRhdGUo
cik7CisgICAgaWYgKG5hdGl2ZVdpZGdldCgpKSB7IC8vcGx1Z2lucworICAgICAgICBuYXRpdmVX
aWRnZXQoKS0+dXBkYXRlKHIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yMTEsNyAr
MTYxLDcgQEAgdm9pZCBXaWRnZXQ6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlYwogICAgIH0K
IAogICAgIC8vIEdldCB0aGUgcm9vdCB3aWRnZXQuCi0gICAgU2Nyb2xsVmlldyogb3V0ZXJtb3N0
VmlldyA9IHRvcExldmVsKCk7CisgICAgV2lkZ2V0KiBvdXRlcm1vc3RWaWV3ID0gdG9wTGV2ZWwo
KTsKICAgICBpZiAoIW91dGVybW9zdFZpZXcpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjI0LDQ4
ICsxNzQsMzQgQEAgdm9pZCBXaWRnZXQ6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlYwogICAg
IG91dGVybW9zdFZpZXctPmFkZFRvRGlydHlSZWdpb24od2luZG93UmVjdCk7CiB9CiAKLXZvaWQg
V2lkZ2V0OjpyZW1vdmVGcm9tUGFyZW50KCkKK1dpZGdldCogV2lkZ2V0Ojp0b3BMZXZlbCgpIGNv
bnN0CiB7Ci0gICAgaWYgKHBhcmVudCgpKQotICAgICAgICBwYXJlbnQoKS0+cmVtb3ZlQ2hpbGQo
dGhpcyk7Ci19Ci0KLXZvaWQgV2lkZ2V0OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogc3YpCi17Ci0g
ICAgZGF0YS0+bV9wYXJlbnRTY3JvbGxWaWV3ID0gc3Y7Ci19Ci0KLVNjcm9sbFZpZXcqIFdpZGdl
dDo6cGFyZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZGF0YS0+bV9wYXJlbnRTY3JvbGxWaWV3
OwotfQotCi1TY3JvbGxWaWV3KiBXaWRnZXQ6OnRvcExldmVsKCkgY29uc3QKLXsKLSAgICBpZiAo
IWRhdGEtPm1fcGFyZW50U2Nyb2xsVmlldykKLSAgICAgICAgcmV0dXJuIGlzRnJhbWVWaWV3KCkg
PyBjb25zdF9jYXN0PFNjcm9sbFZpZXcqPihzdGF0aWNfY2FzdDxjb25zdCBTY3JvbGxWaWV3Kj4o
dGhpcykpIDogMDsKLSAgICBTY3JvbGxWaWV3KiB0b3BMZXZlbCA9IGRhdGEtPm1fcGFyZW50U2Ny
b2xsVmlldzsKLSAgICB3aGlsZSAodG9wTGV2ZWwtPmRhdGEtPm1fcGFyZW50U2Nyb2xsVmlldykK
LSAgICAgICAgdG9wTGV2ZWwgPSB0b3BMZXZlbC0+ZGF0YS0+bV9wYXJlbnRTY3JvbGxWaWV3Owor
ICAgIGlmICghcGFyZW50KCkpCisgICAgICAgIHJldHVybiBpc0ZyYW1lVmlldygpID8gY29uc3Rf
Y2FzdDxXaWRnZXQqPih0aGlzKSA6IDA7CisgICAgV2lkZ2V0KiB0b3BMZXZlbCA9IHBhcmVudCgp
OworICAgIHdoaWxlICh0b3BMZXZlbC0+cGFyZW50KCkpCisgICAgICAgIHRvcExldmVsID0gdG9w
TGV2ZWwtPnBhcmVudCgpOwogICAgIHJldHVybiB0b3BMZXZlbDsKIH0KIAotUVdpZGdldCAqV2lk
Z2V0Ojpjb250YWluaW5nV2luZG93KCkgY29uc3QKK1BsYXRmb3JtV2lkZ2V0IFdpZGdldDo6Y29u
dGFpbmluZ1dpbmRvdygpIGNvbnN0CiB7Ci0gICAgU2Nyb2xsVmlldyAqdG9wTGV2ZWwgPSB0aGlz
LT50b3BMZXZlbCgpOworICAgIFdpZGdldCAqdG9wTGV2ZWwgPSB0aGlzLT50b3BMZXZlbCgpOwog
ICAgIGlmICghdG9wTGV2ZWwpCiAgICAgICAgIHJldHVybiAwOwogICAgIFFXaWRnZXQgKnZpZXcg
PSAwOwogICAgIGlmICh0b3BMZXZlbC0+ZGF0YS0+bV93ZWJGcmFtZSkKICAgICAgICAgdmlldyA9
IHRvcExldmVsLT5kYXRhLT5tX3dlYkZyYW1lLT5wYWdlKCktPnZpZXcoKTsKICAgICBpZiAoIXZp
ZXcpCi0gICAgICAgIHZpZXcgPSBkYXRhLT5tX3dpZGdldDsKKyAgICAgICAgdmlldyA9IG5hdGl2
ZVdpZGdldCgpOwogICAgIHJldHVybiB2aWV3OwogfQogCiAKIHZvaWQgV2lkZ2V0OjpnZW9tZXRy
eUNoYW5nZWQoKSBjb25zdAogeworICAgIGlmIChuYXRpdmVXaWRnZXQoKSkKKyAgICAgICAgbmF0
aXZlV2lkZ2V0KCktPnNldEdlb21ldHJ5KGZyYW1lR2VvbWV0cnkoKSk7CiB9CiAKIEludFBvaW50
IFdpZGdldDo6Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRQb2ludCYgcG9pbnQp
IGNvbnN0CkBAIC0yOTksMTYgKzIzNSw2IEBAIEludFJlY3QgV2lkZ2V0Ojpjb252ZXJ0VG9Db250
YWluaW5nV2luZG8KICAgICByZXR1cm4gY29udmVydGVkUmVjdDsKIH0KIAotSW50UG9pbnQgV2lk
Z2V0Ojpjb252ZXJ0Q2hpbGRUb1NlbGYoY29uc3QgV2lkZ2V0KiBjaGlsZCwgY29uc3QgSW50UG9p
bnQmIHBvaW50KSBjb25zdAotewotICAgIHJldHVybiBJbnRQb2ludChwb2ludC54KCkgKyBjaGls
ZC0+eCgpLCBwb2ludC55KCkgKyBjaGlsZC0+eSgpKTsKLX0KLQotSW50UG9pbnQgV2lkZ2V0Ojpj
b252ZXJ0U2VsZlRvQ2hpbGQoY29uc3QgV2lkZ2V0KiBjaGlsZCwgY29uc3QgSW50UG9pbnQmIHBv
aW50KSBjb25zdAotewotICAgIHJldHVybiBJbnRQb2ludChwb2ludC54KCkgLSBjaGlsZC0+eCgp
LCBwb2ludC55KCkgLSBjaGlsZC0+eSgpKTsKLX0KLQogfQogCiAvLyB2aW06IHRzPTQgc3c9NCBl
dApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGxhdGZvcm1TY3JvbGxCYXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9QbGF0Zm9ybVNjcm9sbEJhci5oCShyZXZpc2lv
biAzMDk5MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL1BsYXRmb3JtU2Nyb2xsQmFyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29s
IGlzV2lkZ2V0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHNl
dFBhcmVudChTY3JvbGxWaWV3Kik7CisgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChXaWRnZXQq
KTsKIAogICAgIHZpcnR1YWwgaW50IHdpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgaGVp
Z2h0KCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9QbGF0Zm9ybVNjcm9sbEJh
clNhZmFyaS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGxhdGZvcm1T
Y3JvbGxCYXJTYWZhcmkuY3BwCShyZXZpc2lvbiAzMDk5MykKKysrIFdlYkNvcmUvcGxhdGZvcm0v
d2luL1BsYXRmb3JtU2Nyb2xsQmFyU2FmYXJpLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjExLDcg
KzIxMSw3IEBAIHZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OnNldFJlY3QoY29uc3QgSW4KICAgICBz
ZXRGcmFtZUdlb21ldHJ5KGFkanVzdGVkUmVjdCk7CiB9CiAKLXZvaWQgUGxhdGZvcm1TY3JvbGxi
YXI6OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnRWaWV3KQordm9pZCBQbGF0Zm9ybVNjcm9s
bGJhcjo6c2V0UGFyZW50KFdpZGdldCogcGFyZW50VmlldykKIHsKICAgICBpZiAoIXBhcmVudFZp
ZXcgJiYgbV9vdmVybGFwc1Jlc2l6ZXIgJiYgcGFyZW50KCkgJiYgcGFyZW50KCktPmlzRnJhbWVW
aWV3KCkpCiAgICAgICAgIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+YWRqdXN0
T3ZlcmxhcHBpbmdTY3JvbGxiYXJDb3VudCgtMSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dp
bi9XaWRnZXRXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL1dpZGdl
dFdpbi5jcHAJKHJldmlzaW9uIDMwOTkzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS93aW4vV2lkZ2V0
V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMjQgKzQyLDIxIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIGNsYXNzIFdpZGdldFByaXZhdGUKIHsKIHB1YmxpYzoKLSAgICBXaWRnZXRDbGllbnQq
IGNsaWVudDsKLSAgICBTY3JvbGxWaWV3KiBwYXJlbnQ7Ci0gICAgSFdORCBjb250YWluaW5nV2lu
ZG93OwotICAgIEludFJlY3QgZnJhbWVSZWN0OwogICAgIGJvb2wgZW5hYmxlZDsKICAgICBXaWRn
ZXQqIGNhcHR1cmluZ0NoaWxkOwotICAgIGJvb2wgc3VwcHJlc3NJbnZhbGlkYXRpb247CiB9Owog
CiBXaWRnZXQ6OldpZGdldCgpCiAgICAgOiBkYXRhKG5ldyBXaWRnZXRQcml2YXRlKQorICAgICwg
bV9jb250YWluaW5nV2luZG93KDApCisgICAgLCBtX3dpZGdldCgwKQorICAgICwgbV9wYXJlbnQo
MCkKKyAgICAsIG1fd2lkZ2V0Q2xpZW50KDApCisgICAgLCBtX3N1cHByZXNzSW52YWxpZGF0aW9u
KGZhbHNlKQorICAgICwgbV9mcmFtZVJlY3QoMCwgMCwgMCwgMCkKIHsKLSAgICBkYXRhLT5jbGll
bnQgPSAwOwotICAgIGRhdGEtPnBhcmVudCA9IDA7Ci0gICAgZGF0YS0+Y29udGFpbmluZ1dpbmRv
dyA9IDA7CiAgICAgZGF0YS0+ZW5hYmxlZCA9IHRydWU7CiAgICAgZGF0YS0+Y2FwdHVyaW5nQ2hp
bGQgPSAwOwotICAgIGRhdGEtPnN1cHByZXNzSW52YWxpZGF0aW9uID0gZmFsc2U7CiB9CiAKIFdp
ZGdldDo6fldpZGdldCgpIApAQCAtNjgsNTYgKzY1LDYgQEAgV2lkZ2V0Ojp+V2lkZ2V0KCkgCiAg
ICAgZGVsZXRlIGRhdGE7CiB9CiAKLXZvaWQgV2lkZ2V0OjpzZXRDb250YWluaW5nV2luZG93KEhX
TkQgY29udGFpbmluZ1dpbmRvdykKLXsKLSAgICBkYXRhLT5jb250YWluaW5nV2luZG93ID0gY29u
dGFpbmluZ1dpbmRvdzsKLX0KLQotSFdORCBXaWRnZXQ6OmNvbnRhaW5pbmdXaW5kb3coKSBjb25z
dAotewotICAgIHJldHVybiBkYXRhLT5jb250YWluaW5nV2luZG93OwotfQotCi12b2lkIFdpZGdl
dDo6c2V0Q2xpZW50KFdpZGdldENsaWVudCogYykKLXsKLSAgICBkYXRhLT5jbGllbnQgPSBjOwot
fQotCi1XaWRnZXRDbGllbnQqIFdpZGdldDo6Y2xpZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
ZGF0YS0+Y2xpZW50OwotfQotCi1JbnRSZWN0IFdpZGdldDo6ZnJhbWVHZW9tZXRyeSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGRhdGEtPmZyYW1lUmVjdDsKLX0KLQotdm9pZCBXaWRnZXQ6OnNldEZy
YW1lR2VvbWV0cnkoY29uc3QgSW50UmVjdCAmcmVjdCkKLXsKLSAgICBkYXRhLT5mcmFtZVJlY3Qg
PSByZWN0OwotfQotCi12b2lkIFdpZGdldDo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHYpCi17Ci0g
ICAgaWYgKCF2IHx8ICF2LT5pc0F0dGFjaGVkVG9XaW5kb3coKSkKLSAgICAgICAgZGV0YWNoRnJv
bVdpbmRvdygpOwotICAgIGRhdGEtPnBhcmVudCA9IHY7Ci0gICAgaWYgKHYgJiYgdi0+aXNBdHRh
Y2hlZFRvV2luZG93KCkpCi0gICAgICAgIGF0dGFjaFRvV2luZG93KCk7Ci19Ci0KLVNjcm9sbFZp
ZXcqIFdpZGdldDo6cGFyZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZGF0YS0+cGFyZW50Owot
fQotCi12b2lkIFdpZGdldDo6cmVtb3ZlRnJvbVBhcmVudCgpCi17Ci0gICAgaWYgKHBhcmVudCgp
KQotICAgICAgICBwYXJlbnQoKS0+cmVtb3ZlQ2hpbGQodGhpcyk7Ci19Ci0KIHZvaWQgV2lkZ2V0
OjpzaG93KCkKIHsKIH0KQEAgLTE3MSwxNiArMTE4LDYgQEAgSW50UmVjdCBXaWRnZXQ6OmNvbnZl
cnRUb0NvbnRhaW5pbmdXaW5kbwogICAgIHJldHVybiBjb252ZXJ0ZWRSZWN0OwogfQogCi1JbnRQ
b2ludCBXaWRnZXQ6OmNvbnZlcnRDaGlsZFRvU2VsZihjb25zdCBXaWRnZXQqIGNoaWxkLCBjb25z
dCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFBvaW50KHBvaW50Lngo
KSArIGNoaWxkLT54KCksIHBvaW50LnkoKSArIGNoaWxkLT55KCkpOwotfQotCi1JbnRQb2ludCBX
aWRnZXQ6OmNvbnZlcnRTZWxmVG9DaGlsZChjb25zdCBXaWRnZXQqIGNoaWxkLCBjb25zdCBJbnRQ
b2ludCYgcG9pbnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFBvaW50KHBvaW50LngoKSAtIGNo
aWxkLT54KCksIHBvaW50LnkoKSAtIGNoaWxkLT55KCkpOwotfQotCiB2b2lkIFdpZGdldDo6cGFp
bnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpCiB7CiB9CkBAIC0xOTgsMjQgKzEz
NSw5IEBAIHZvaWQgV2lkZ2V0OjpzZXRFbmFibGVkKGJvb2wgZSkKICAgICB9CiB9CiAKLWJvb2wg
V2lkZ2V0OjpzdXBwcmVzc0ludmFsaWRhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRhdGEt
PnN1cHByZXNzSW52YWxpZGF0aW9uOwotfQotCi12b2lkIFdpZGdldDo6c2V0U3VwcHJlc3NJbnZh
bGlkYXRpb24oYm9vbCBzdXBwcmVzcykKLXsKLSAgICBkYXRhLT5zdXBwcmVzc0ludmFsaWRhdGlv
biA9IHN1cHByZXNzOwotfQotCi12b2lkIFdpZGdldDo6aW52YWxpZGF0ZSgpCi17Ci0gICAgaW52
YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSkpOwotfQotCiB2b2lk
IFdpZGdldDo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBpZiAoZGF0
YS0+c3VwcHJlc3NJbnZhbGlkYXRpb24pCisgICAgaWYgKHN1cHByZXNzSW52YWxpZGF0aW9uKCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghcGFyZW50KCkpIHsKQEAgLTIyNyw3ICsxNDks
NyBAQCB2b2lkIFdpZGdldDo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjCiAgICAgfQogCiAg
ICAgLy8gR2V0IHRoZSByb290IHdpZGdldC4KLSAgICBTY3JvbGxWaWV3KiBvdXRlcm1vc3RWaWV3
ID0gcGFyZW50KCk7CisgICAgV2lkZ2V0KiBvdXRlcm1vc3RWaWV3ID0gcGFyZW50KCk7CiAgICAg
d2hpbGUgKG91dGVybW9zdFZpZXcgJiYgb3V0ZXJtb3N0Vmlldy0+cGFyZW50KCkpCiAgICAgICAg
IG91dGVybW9zdFZpZXcgPSBvdXRlcm1vc3RWaWV3LT5wYXJlbnQoKTsKICAgICBpZiAoIW91dGVy
bW9zdFZpZXcpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3d4L1JlbmRlclRoZW1lV3guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd3gvUmVuZGVyVGhlbWVXeC5jcHAJKHJldmlz
aW9uIDMwOTkzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS93eC9SZW5kZXJUaGVtZVd4LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTg4LDcgKzE4OCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVXeDo6YWRqdXN0
QnV0dG9uU3R5bGUoQ1MKIAogYm9vbCBSZW5kZXJUaGVtZVd4OjpwYWludEJ1dHRvbihSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0
JiByKQogewotICAgIHd4V2luZG93KiB3aW5kb3cgPSBvLT52aWV3KCktPmZyYW1lVmlldygpLT5u
YXRpdmVXaW5kb3coKTsKKyAgICB3eFdpbmRvdyogd2luZG93ID0gby0+dmlldygpLT5mcmFtZVZp
ZXcoKS0+bmF0aXZlV2lkZ2V0KCk7CiAgICAgd3hEQyogZGMgPSBzdGF0aWNfY2FzdDx3eERDKj4o
aS5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgd3hBU1NFUlQoZGMtPklzT2soKSk7
CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd3gvU2Nyb2xsVmlld1d4LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3d4L1Njcm9sbFZpZXdXeC5jcHAJKHJldmlzaW9uIDMwOTkz
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93eC9TY3JvbGxWaWV3V3guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzEsNyArMTMxLDcgQEAgU2Nyb2xsVmlldzo6U2Nyb2xsVmlldygpCiAKIHZvaWQgU2Ny
b2xsVmlldzo6c2V0TmF0aXZlV2luZG93KHd4V2luZG93KiB3aW4pCiB7Ci0gICAgV2lkZ2V0Ojpz
ZXROYXRpdmVXaW5kb3cod2luKTsKKyAgICBXaWRnZXQ6OnNldE5hdGl2ZVdpZGdldCh3aW4pOwog
ICAgIG1fZGF0YS0+YmluZEV2ZW50cyh3aW4pOwogfQogCkBAIC0xNDUsNyArMTQ1LDcgQEAgdm9p
ZCBTY3JvbGxWaWV3Ojp1cGRhdGVDb250ZW50cyhjb25zdCBJbgogICAgIC8vIHdlIG5lZWQgdG8g
Y29udmVydCBjb29yZGluYXRlcyB0byBzY3JvbGxlZCBwb3NpdGlvbgogICAgIHd4UmVjdCBjb250
ZW50c1JlY3QgPSB1cGRhdGVSZWN0OwogICAgIGNvbnRlbnRzUmVjdC5PZmZzZXQoLWNvbnRlbnRz
WCgpLCAtY29udGVudHNZKCkpOwotICAgIHd4V2luZG93KiB3aW4gPSBuYXRpdmVXaW5kb3coKTsK
KyAgICB3eFdpbmRvdyogd2luID0gbmF0aXZlV2lkZ2V0KCk7CiAgICAgaWYgKHdpbikgewogICAg
ICAgICB3aW4tPlJlZnJlc2hSZWN0KGNvbnRlbnRzUmVjdCwgdHJ1ZSk7CiAgICAgICAgIGlmIChu
b3cpCkBAIC0xNTUsNyArMTU1LDcgQEAgdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVDb250ZW50cyhj
b25zdCBJbgogCiB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZSgpCiB7Ci0gICAgd3hXaW5kb3cqIHdp
biA9IG5hdGl2ZVdpbmRvdygpOworICAgIHd4V2luZG93KiB3aW4gPSBuYXRpdmVXaWRnZXQoKTsK
ICAgICBpZiAod2luKQogICAgICAgICB3aW4tPlVwZGF0ZSgpOwogfQpAQCAtMTYzLDcgKzE2Myw3
IEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlKCkKIGludCBTY3JvbGxWaWV3Ojp2aXNpYmxlV2lk
dGgoKSBjb25zdAogewogICAgIGludCB3aWR0aCA9IDA7Ci0gICAgd3hXaW5kb3cqIHdpbiA9IG5h
dGl2ZVdpbmRvdygpOworICAgIHd4V2luZG93KiB3aW4gPSBuYXRpdmVXaWRnZXQoKTsKICAgICBp
ZiAod2luKQogICAgICAgICB3aW4tPkdldENsaWVudFNpemUoJndpZHRoLCBOVUxMKTsKICAgICAK
QEAgLTE3NCw3ICsxNzQsNyBAQCBpbnQgU2Nyb2xsVmlldzo6dmlzaWJsZVdpZHRoKCkgY29uc3QK
IGludCBTY3JvbGxWaWV3Ojp2aXNpYmxlSGVpZ2h0KCkgY29uc3QKIHsKICAgICBpbnQgaGVpZ2h0
ID0gMDsKLSAgICB3eFdpbmRvdyogd2luID0gbmF0aXZlV2luZG93KCk7CisgICAgd3hXaW5kb3cq
IHdpbiA9IG5hdGl2ZVdpZGdldCgpOwogICAgIGlmICh3aW4pCiAgICAgICAgIHdpbi0+R2V0Q2xp
ZW50U2l6ZShOVUxMLCAmaGVpZ2h0KTsKICAgICAKQEAgLTE5Niw3ICsxOTYsNyBAQCB2b2lkIFNj
cm9sbFZpZXc6OnNldENvbnRlbnRzUG9zKGludCBuZXdYCiAKIHZvaWQgU2Nyb2xsVmlldzo6c2Ny
b2xsQnkoaW50IGR4LCBpbnQgZHkpCiB7Ci0gICAgd3hXaW5kb3cqIHdpbiA9IG5hdGl2ZVdpbmRv
dygpOworICAgIHd4V2luZG93KiB3aW4gPSBuYXRpdmVXaWRnZXQoKTsKICAgICBpZiAoIXdpbikK
ICAgICAgICAgcmV0dXJuOwogCkBAIC0yMzUsNyArMjM1LDcgQEAgdm9pZCBTY3JvbGxWaWV3Ojpz
Y3JvbGxCeShpbnQgZHgsIGludCBkeQogCiB2b2lkIFNjcm9sbFZpZXc6OnJlc2l6ZUNvbnRlbnRz
KGludCB3LGludCBoKQogewotICAgIHd4V2luZG93KiB3aW4gPSBuYXRpdmVXaW5kb3coKTsKKyAg
ICB3eFdpbmRvdyogd2luID0gbmF0aXZlV2lkZ2V0KCk7CiAgICAgaWYgKHdpbikgewogICAgICAg
ICB3aW4tPlNldFZpcnR1YWxTaXplKHcsIGgpOwogICAgICAgICBhZGp1c3RTY3JvbGxiYXJzKCk7
CkBAIC0yNTcsNyArMjU3LDcgQEAgaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzWSgpIGNvbnN0CiBp
bnQgU2Nyb2xsVmlldzo6Y29udGVudHNXaWR0aCgpIGNvbnN0CiB7CiAgICAgaW50IHdpZHRoID0g
MDsKLSAgICB3eFdpbmRvdyogd2luID0gbmF0aXZlV2luZG93KCk7CisgICAgd3hXaW5kb3cqIHdp
biA9IG5hdGl2ZVdpZGdldCgpOwogICAgIGlmICh3aW4pCiAgICAgICAgIHdpbi0+R2V0VmlydHVh
bFNpemUoJndpZHRoLCBOVUxMKTsKICAgICBBU1NFUlQod2lkdGggPj0gMCk7CkBAIC0yNjcsNyAr
MjY3LDcgQEAgaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzV2lkdGgoKSBjb25zdAogaW50IFNjcm9s
bFZpZXc6OmNvbnRlbnRzSGVpZ2h0KCkgY29uc3QKIHsKICAgICBpbnQgaGVpZ2h0ID0gMDsKLSAg
ICB3eFdpbmRvdyogd2luID0gbmF0aXZlV2luZG93KCk7CisgICAgd3hXaW5kb3cqIHdpbiA9IG5h
dGl2ZVdpZGdldCgpOwogICAgIGlmICh3aW4pCiAgICAgICAgIHdpbi0+R2V0VmlydHVhbFNpemUo
TlVMTCwgJmhlaWdodCk7CiAgICAgQVNTRVJUKGhlaWdodCA+PSAwKTsKQEAgLTI4OCw3ICsyODgs
NyBAQCBJbnRTaXplIFNjcm9sbFZpZXc6OnNjcm9sbE9mZnNldCgpIGNvbnN0CiAKIHZvaWQgU2Ny
b2xsVmlldzo6YWRqdXN0U2Nyb2xsYmFycyhpbnQgeCwgaW50IHksIGJvb2wgcmVmcmVzaCkKIHsK
LSAgICB3eFdpbmRvdyogd2luID0gbmF0aXZlV2luZG93KCk7CisgICAgd3hXaW5kb3cqIHdpbiA9
IG5hdGl2ZVdpZGdldCgpOwogICAgIGlmICghd2luKQogICAgICAgICByZXR1cm47CiAKQEAgLTQx
MCw3ICs0MTAsNyBAQCBib29sIFNjcm9sbFZpZXc6OmluV2luZG93KCkgY29uc3QKICAgICAvLyBO
QjogVGhpcyBpcyBjYWxsZWQgZnJvbSBSZW5kZXJPYmplY3Q6OndpbGxSZW5kZXJJbWFnZQogICAg
IC8vIGFuZCByZWFsbHkgc2VlbXMgdG8gYmUgbW9yZSBvZiBhICJpcyB0aGUgd2luZG93IGluIGEg
dmFsaWQgc3RhdGUiIHRlc3QsCiAgICAgLy8gZGVzcGl0ZSB0aGUgQVBJIG5hbWUuCi0gICAgcmV0
dXJuIG5hdGl2ZVdpbmRvdygpICE9IE5VTEw7CisgICAgcmV0dXJuIG5hdGl2ZVdpZGdldCgpICE9
IE5VTEw7CiB9CiAKIHZvaWQgU2Nyb2xsVmlldzo6d2hlZWxFdmVudChQbGF0Zm9ybVdoZWVsRXZl
bnQmIGUpCkBAIC00NDEsMTIgKzQ0MSwxMiBAQCB2b2lkIFNjcm9sbFZpZXc6OnJlbW92ZUNoaWxk
KFdpZGdldCogd2lkCiB7CiAgICAgbV9kYXRhLT5tX2NoaWxkcmVuLnJlbW92ZSh3aWRnZXQpOwog
Ci0gICAgaWYgKG5hdGl2ZVdpbmRvdygpICYmIHdpZGdldC0+bmF0aXZlV2luZG93KCkpIHsKLSAg
ICAgICAgbmF0aXZlV2luZG93KCktPlJlbW92ZUNoaWxkKHdpZGdldC0+bmF0aXZlV2luZG93KCkp
OworICAgIGlmIChuYXRpdmVXaWRnZXQoKSAmJiB3aWRnZXQtPm5hdGl2ZVdpZGdldCgpKSB7Cisg
ICAgICAgIG5hdGl2ZVdpZGdldCgpLT5SZW1vdmVDaGlsZCh3aWRnZXQtPm5hdGl2ZVdpZGdldCgp
KTsKICAgICAgICAgLy8gRklYTUU6IElzIHRoaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGRvIGRlbGV0
aW9uPyBJIHNlZQogICAgICAgICAvLyBkZXRhY2hGcm9tUGFyZW50Mi8zLzQsIGluaXRpYXRlZCBi
eSBGcmFtZUxvYWRlcjo6ZGV0YWNoRnJvbVBhcmVudCwKICAgICAgICAgLy8gYnV0IEknbSBub3Qg
c3VyZSBpZiBpdCdzIGJldHRlciB0byBoYW5kbGUgdGhlcmUgb3Igbm90LgotICAgICAgICB3aWRn
ZXQtPm5hdGl2ZVdpbmRvdygpLT5EZXN0cm95KCk7CisgICAgICAgIHdpZGdldC0+bmF0aXZlV2lk
Z2V0KCktPkRlc3Ryb3koKTsKICAgICB9CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd3gv
VGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3d4
L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDMwOTkzKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS93eC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw5ICs4
OSw2IEBAIFZlY3RvcjxjaGFyPiBsb2FkUmVzb3VyY2VJbnRvQXJyYXkoY29uc3QKICAgICByZXR1
cm4gcmVzb3VyY2U7CiB9CiAKLXZvaWQgV2lkZ2V0OjpyZW1vdmVGcm9tUGFyZW50KCkgeyBub3RJ
bXBsZW1lbnRlZCgpOyB9Ci0KLQogaW50IGZpbmROZXh0U2VudGVuY2VGcm9tSW5kZXgoVUNoYXIg
Y29uc3QqLGludCxpbnQsYm9vbCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQogdm9p
ZCBmaW5kU2VudGVuY2VCb3VuZGFyeShVQ2hhciBjb25zdCosaW50LGludCxpbnQqLGludCopIHsg
bm90SW1wbGVtZW50ZWQoKTsgfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3d4L1dpZGdldFd4
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3d4L1dpZGdldFd4LmNwcAkocmV2
aXNpb24gMzA5OTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3d4L1dpZGdldFd4LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsMjIgKzM4LDMwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFdp
ZGdldFByaXZhdGUKIHsKIHB1YmxpYzoKLSAgICB3eFdpbmRvdyogbmF0aXZlV2luZG93OwogICAg
IEZvbnQgZm9udDsKLSAgICBXaWRnZXRDbGllbnQqIGNsaWVudDsKIH07CiAKIFdpZGdldDo6V2lk
Z2V0KCkKICAgICA6IGRhdGEobmV3IFdpZGdldFByaXZhdGUpCisgICAgLCBtX2NvbnRhaW5pbmdX
aW5kb3coMCkKKyAgICAsIG1fd2lkZ2V0KDApCisgICAgLCBtX3BhcmVudCgwKQorICAgICwgbV93
aWRnZXRDbGllbnQoMCkKKyAgICAsIG1fc3VwcHJlc3NJbnZhbGlkYXRpb24oZmFsc2UpCisgICAg
LCBtX2ZyYW1lUmVjdCgwLCAwLCAwLCAwKQogewotICAgIGRhdGEtPm5hdGl2ZVdpbmRvdyA9IDA7
Ci0gICAgZGF0YS0+Y2xpZW50ID0gMDsKIH0KIAogV2lkZ2V0OjpXaWRnZXQod3hXaW5kb3cqIHdp
bikKICAgICA6IGRhdGEobmV3IFdpZGdldFByaXZhdGUpCisgICAgLCBtX2NvbnRhaW5pbmdXaW5k
b3coMCkKKyAgICAsIG1fd2lkZ2V0KDApCisgICAgLCBtX3BhcmVudCgwKQorICAgICwgbV93aWRn
ZXRDbGllbnQoMCkKKyAgICAsIG1fc3VwcHJlc3NJbnZhbGlkYXRpb24oZmFsc2UpCisgICAgLCBt
X2ZyYW1lUmVjdCgwLCAwLCAwLCAwKQogewotICAgIHNldE5hdGl2ZVdpbmRvdyh3aW4pOworICAg
IHNldE5hdGl2ZVdpZGdldCh3aW4pOwogfQogCiBXaWRnZXQ6On5XaWRnZXQoKQpAQCAtNjEsOTUg
KzY5LDYxIEBAIFdpZGdldDo6fldpZGdldCgpCiAgICAgZGVsZXRlIGRhdGE7CiB9CiAKLXd4V2lu
ZG93KiBXaWRnZXQ6Om5hdGl2ZVdpbmRvdygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRhdGEtPm5h
dGl2ZVdpbmRvdzsKLX0KLQotdm9pZCBXaWRnZXQ6OnNldE5hdGl2ZVdpbmRvdyh3eFdpbmRvdyog
d2luKQotewotICAgIGRhdGEtPm5hdGl2ZVdpbmRvdyA9IHdpbjsKLX0KLQotdm9pZCBXaWRnZXQ6
OnNldENsaWVudChXaWRnZXRDbGllbnQqIGMpCi17Ci0gICAgZGF0YS0+Y2xpZW50ID0gYzsKLX0K
LQotV2lkZ2V0Q2xpZW50KiBXaWRnZXQ6OmNsaWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRh
dGEtPmNsaWVudDsKLX0KLQotSW50UmVjdCBXaWRnZXQ6OmZyYW1lR2VvbWV0cnkoKSBjb25zdAot
eyAgIAotICAgIGlmIChkYXRhLT5uYXRpdmVXaW5kb3cpCi0gICAgICAgIHJldHVybiBJbnRSZWN0
KGRhdGEtPm5hdGl2ZVdpbmRvdy0+R2V0UmVjdCgpKTsKLQotICAgIHJldHVybiBJbnRSZWN0KCk7
Ci19Ci0KIHZvaWQgV2lkZ2V0OjpzZXRGb2N1cygpCiB7Ci0gICAgaWYgKGRhdGEtPm5hdGl2ZVdp
bmRvdykKLSAgICAgICAgZGF0YS0+bmF0aXZlV2luZG93LT5TZXRGb2N1cygpOworICAgIGlmIChu
YXRpdmVXaWRnZXQoKSkKKyAgICAgICAgbmF0aXZlV2lkZ2V0KCktPlNldEZvY3VzKCk7CiB9CiAK
IHZvaWQgV2lkZ2V0OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBjdXJzb3IpCiB7Ci0gICAgaWYg
KGRhdGEtPm5hdGl2ZVdpbmRvdyAmJiBjdXJzb3IuaW1wbCgpKQotICAgICAgICBkYXRhLT5uYXRp
dmVXaW5kb3ctPlNldEN1cnNvcigqY3Vyc29yLmltcGwoKSk7CisgICAgaWYgKG5hdGl2ZVdpZGdl
dCgpICYmIGN1cnNvci5pbXBsKCkpCisgICAgICAgIG5hdGl2ZVdpZGdldCgpLT5TZXRDdXJzb3Io
KmN1cnNvci5pbXBsKCkpOwogfQogCiB2b2lkIFdpZGdldDo6c2hvdygpCiB7Ci0gICAgaWYgKGRh
dGEtPm5hdGl2ZVdpbmRvdykKLSAgICAgICAgZGF0YS0+bmF0aXZlV2luZG93LT5TaG93KCk7Cisg
ICAgaWYgKG5hdGl2ZVdpZGdldCgpKQorICAgICAgICBuYXRpdmVXaWRnZXQoKS0+U2hvdygpOwog
fQogCiB2b2lkIFdpZGdldDo6aGlkZSgpCiB7Ci0gICAgaWYgKGRhdGEtPm5hdGl2ZVdpbmRvdykK
LSAgICAgICAgZGF0YS0+bmF0aXZlV2luZG93LT5IaWRlKCk7Ci19Ci0KLXZvaWQgV2lkZ2V0Ojpz
ZXRGcmFtZUdlb21ldHJ5KGNvbnN0IEludFJlY3QgJnJlY3QpCi17Ci0gICAgaWYgKGRhdGEtPm5h
dGl2ZVdpbmRvdykKLSAgICAgICAgZGF0YS0+bmF0aXZlV2luZG93LT5TZXRTaXplKHJlY3QpOwor
ICAgIGlmIChuYXRpdmVXaWRnZXQoKSkKKyAgICAgICAgbmF0aXZlV2lkZ2V0KCktPkhpZGUoKTsK
IH0KIAogdm9pZCBXaWRnZXQ6OnNldEVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIGlmIChk
YXRhLT5uYXRpdmVXaW5kb3cpCi0gICAgICAgIGRhdGEtPm5hdGl2ZVdpbmRvdy0+RW5hYmxlKGVu
YWJsZWQpOworICAgIGlmIChuYXRpdmVXaWRnZXQoKSkKKyAgICAgICAgbmF0aXZlV2lkZ2V0KCkt
PkVuYWJsZShlbmFibGVkKTsKIH0KIAogYm9vbCBXaWRnZXQ6OmlzRW5hYmxlZCgpIGNvbnN0CiB7
Ci0gICAgaWYgKGRhdGEtPm5hdGl2ZVdpbmRvdykKLSAgICAgICAgcmV0dXJuIGRhdGEtPm5hdGl2
ZVdpbmRvdy0+SXNFbmFibGVkKCk7CisgICAgaWYgKG5hdGl2ZVdpZGdldCgpKQorICAgICAgICBy
ZXR1cm4gbmF0aXZlV2lkZ2V0KCktPklzRW5hYmxlZCgpOwogICAgICAgICAKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXZvaWQgV2lkZ2V0OjppbnZhbGlkYXRlKCkKLXsKLSAgICBpZiAoZGF0YS0+
bmF0aXZlV2luZG93KQotICAgICAgICBkYXRhLT5uYXRpdmVXaW5kb3ctPlJlZnJlc2goKTsKLX0K
LQogdm9pZCBXaWRnZXQ6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHIpCiB7Ci0gICAg
aWYgKGRhdGEtPm5hdGl2ZVdpbmRvdykKLSAgICAgICAgZGF0YS0+bmF0aXZlV2luZG93LT5SZWZy
ZXNoUmVjdChyKTsKKyAgICBpZiAobmF0aXZlV2lkZ2V0KCkpCisgICAgICAgIG5hdGl2ZVdpZGdl
dCgpLT5SZWZyZXNoUmVjdChyKTsKIH0KIAogdm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29u
dGV4dCosY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBpbnZhbGlkYXRlUmVjdChyKTsKLSAgICBp
ZiAoZGF0YS0+bmF0aXZlV2luZG93KQotICAgICAgICBkYXRhLT5uYXRpdmVXaW5kb3ctPlVwZGF0
ZSgpOworICAgIGlmIChuYXRpdmVXaWRnZXQoKSkKKyAgICAgICAgbmF0aXZlV2lkZ2V0KCktPlVw
ZGF0ZSgpOworfQorCit2b2lkIFdpZGdldDo6Z2VvbWV0cnlDaGFuZ2VkKCkgY29uc3QKK3sKKyAg
ICBpZiAobmF0aXZlV2lkZ2V0KCkpCisgICAgICAgIG5hdGl2ZVdpZGdldCgpLT5TZXRTaXplKGZy
YW1lR2VvbWV0cnkoKSk7CiB9CiAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9Cklu
ZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGx1Z2lucy9QbHVnaW5WaWV3LmgJKHJldmlzaW9uIDMwOTkzKQorKysgV2ViQ29yZS9wbHVnaW5z
L1BsdWdpblZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEludFJlY3QmKTsKICAgICAgICAgdmlydHVhbCBJbnRSZWN0IHdpbmRvd0NsaXBSZWN0
KCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChFdmVudCopOwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgc2V0UGFyZW50KFNjcm9sbFZpZXcqKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHNldFBhcmVudChXaWRnZXQqKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNo
VG9XaW5kb3coKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRldGFjaEZyb21XaW5kb3coKTsKSW5k
ZXg6IFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAkocmV2aXNpb24gMzA5OTMpCisr
KyBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NDksNyArNjQ5LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVFdmVudChFdmVudCogZXZl
bgogICAgICAgICBoYW5kbGVLZXlib2FyZEV2ZW50KHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQq
PihldmVudCkpOwogfQogCi12b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudChTY3JvbGxWaWV3KiBw
YXJlbnQpCit2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudChXaWRnZXQqIHBhcmVudCkKIHsKICAg
ICBXaWRnZXQ6OnNldFBhcmVudChwYXJlbnQpOwogCkluZGV4OiBXZWJLaXQvZ3RrL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0NoYW5nZUxvZwkocmV2aXNpb24gMzA5OTMpCisr
KyBXZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisy
MDA4LTAzLTEyICBSb2RuZXkgRGF3ZXMgIDxkb2JleUB3YXlvZnRoZW1vbmtleS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISEpCisKKyAgICAgICAgUGFzcyBhIEd0a1dp
ZGdldCB0byBzZXRDb250YWluaW5nV2luZG93IHJhdGhlciB0aGFuIGEgR3RrQ29udGFpbmVyLgor
CisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcDoKKyAgICAgICAgKHdlYmtpdF93
ZWJfZnJhbWVfbmV3KToKKyAgICAgICAgKHdlYmtpdF93ZWJfRnJhbWVfaW5pdF93aXRoX3dlYl92
aWV3KToKKwogMjAwOC0wMy0xMCAgWGFuIExvcGV6ICA8eGFuQGdub21lLm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBBbHAgVG9rZXIuCkluZGV4OiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJmcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJh
bWUuY3BwCShyZXZpc2lvbiAzMDk5MykKKysrIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZy
YW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIwLDcgKzIyMCw3IEBAIFdlYktpdFdlYkZyYW1l
KiB3ZWJraXRfd2ViX2ZyYW1lX25ldyhXZWIKICAgICBwcml2LT5jb3JlRnJhbWUgPSBuZXcgRnJh
bWUodmlld1ByaXYtPmNvcmVQYWdlLCAwLCBwcml2LT5jbGllbnQpOwogCiAgICAgRnJhbWVWaWV3
KiBmcmFtZVZpZXcgPSBuZXcgRnJhbWVWaWV3KHByaXYtPmNvcmVGcmFtZS5nZXQoKSk7Ci0gICAg
ZnJhbWVWaWV3LT5zZXRDb250YWluaW5nV2luZG93KEdUS19DT05UQUlORVIod2ViVmlldykpOwor
ICAgIGZyYW1lVmlldy0+c2V0Q29udGFpbmluZ1dpbmRvdyhHVEtfV0lER0VUKHdlYlZpZXcpKTsK
ICAgICBmcmFtZVZpZXctPnNldEd0a0FkanVzdG1lbnRzKEdUS19BREpVU1RNRU5UKGd0a19hZGp1
c3RtZW50X25ldygwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wKSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHVEtfQURKVVNUTUVOVChndGtfYWRqdXN0bWVudF9uZXcoMC4w
LCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCkpKTsKICAgICBwcml2LT5jb3JlRnJhbWUtPnNldFZp
ZXcoZnJhbWVWaWV3KTsKQEAgLTI0MSw3ICsyNDEsNyBAQCBXZWJLaXRXZWJGcmFtZSogd2Via2l0
X3dlYl9mcmFtZV9pbml0X3dpCiAgICAgcHJpdi0+Y29yZUZyYW1lID0gbmV3IEZyYW1lKHZpZXdQ
cml2LT5jb3JlUGFnZSwgZWxlbWVudCwgcHJpdi0+Y2xpZW50KTsKIAogICAgIEZyYW1lVmlldyog
ZnJhbWVWaWV3ID0gbmV3IEZyYW1lVmlldyhwcml2LT5jb3JlRnJhbWUuZ2V0KCkpOwotICAgIGZy
YW1lVmlldy0+c2V0Q29udGFpbmluZ1dpbmRvdyhHVEtfQ09OVEFJTkVSKHdlYlZpZXcpKTsKKyAg
ICBmcmFtZVZpZXctPnNldENvbnRhaW5pbmdXaW5kb3coR1RLX1dJREdFVCh3ZWJWaWV3KSk7CiAg
ICAgcHJpdi0+Y29yZUZyYW1lLT5zZXRWaWV3KGZyYW1lVmlldyk7CiAgICAgZnJhbWVWaWV3LT5k
ZXJlZigpOwogICAgIHByaXYtPmNvcmVGcmFtZS0+aW5pdCgpOwpJbmRleDogV2ViS2l0L3d4L0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd3gvQ2hhbmdlTG9nCShyZXZpc2lvbiAzMDk5
MykKKysrIFdlYktpdC93eC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBA
QAorMjAwOC0wMy0xMiAgUm9kbmV5IERhd2VzICA8ZG9iZXlAd2F5b2Z0aGVtb25rZXkuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEhKQorCisgICAgICAgIFVwZGF0ZSBj
b2RlIGZvciByZW5hbWUgb2YgbmF0aXZlV2luZG93KCkgdG8gbmF0aXZlV2lkZ2V0KCkuCisKKyAg
ICAgICAgKiBXZWJLaXRTdXBwb3J0L0VkaXRvckNsaWVudFd4LmNwcDoKKyAgICAgICAgKEVkaXRv
ckNsaWVudFd4Ojppc0VkaXRhYmxlKToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50V3guY3BwOgorCiAyMDA4LTAzLTAzICBLZXZpbiBPbGxpdmllciAgPGtldmlub0B0
aGVvbGxpdmllcnMuY29tPgogCiAgICAgICAgIHd4IGJ1aWxkIGZpeCBhZnRlciBGcmFtZTo6c2V0
Wm9vbUZhY3RvciBBUEkgY2hhbmdlLgpJbmRleDogV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvRWRp
dG9yQ2xpZW50V3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0Vk
aXRvckNsaWVudFd4LmNwcAkocmV2aXNpb24gMzA5OTMpCisrKyBXZWJLaXQvd3gvV2ViS2l0U3Vw
cG9ydC9FZGl0b3JDbGllbnRXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw3ICsxMTcsNyBA
QCBib29sIEVkaXRvckNsaWVudFd4Ojppc0VkaXRhYmxlKCkKICAgICBGcmFtZSogZnJhbWUgPSBt
X3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKIAogICAgIGlm
IChmcmFtZSkgewotICAgICAgICB3eFdlYlZpZXcqIHdlYktpdFdpbiA9IGR5bmFtaWNfY2FzdDx3
eFdlYlZpZXcqPihmcmFtZS0+dmlldygpLT5uYXRpdmVXaW5kb3coKSk7CisgICAgICAgIHd4V2Vi
Vmlldyogd2ViS2l0V2luID0gZHluYW1pY19jYXN0PHd4V2ViVmlldyo+KGZyYW1lLT52aWV3KCkt
Pm5hdGl2ZVdpZGdldCgpKTsKICAgICAgICAgaWYgKHdlYktpdFdpbikgCiAgICAgICAgICAgICBy
ZXR1cm4gd2ViS2l0V2luLT5Jc0VkaXRhYmxlKCk7CiAgICAgfQpJbmRleDogV2ViS2l0L3d4L1dl
YktpdFN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L3d4L1dlYktpdFN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXeC5jcHAJKHJldmlzaW9uIDMwOTkz
KQorKysgV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXeC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI0OSw3ICsyNDksNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50V3g6
OmxvYWRlZEZyb21DYWNoCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRXeDo6ZGlzcGF0Y2hEaWRI
YW5kbGVPbmxvYWRFdmVudHMoKQogewotICAgIHd4V2luZG93KiB0YXJnZXQgPSBtX2ZyYW1lLT52
aWV3KCktPm5hdGl2ZVdpbmRvdygpOworICAgIHd4V2luZG93KiB0YXJnZXQgPSBtX2ZyYW1lLT52
aWV3KCktPm5hdGl2ZVdpZGdldCgpOwogICAgIGlmICh0YXJnZXQpIHsKICAgICAgICAgd3hXZWJW
aWV3TG9hZEV2ZW50IHdrRXZlbnQodGFyZ2V0KTsKICAgICAgICAgd2tFdmVudC5TZXRTdGF0ZSh3
eFdFQlZJRVdfTE9BRF9PTkxPQURfSEFORExFRCk7CkBAIC0yOTMsNyArMjkzLDcgQEAgdm9pZCBG
cmFtZUxvYWRlckNsaWVudFd4OjpkaXNwYXRjaFdpbGxDbAogCiB2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50V3g6OmRpc3BhdGNoRGlkU3RhcnRQcm92aXNpb25hbExvYWQoKQogewotICAgIHd4V2luZG93
KiB0YXJnZXQgPSBtX2ZyYW1lLT52aWV3KCktPm5hdGl2ZVdpbmRvdygpOworICAgIHd4V2luZG93
KiB0YXJnZXQgPSBtX2ZyYW1lLT52aWV3KCktPm5hdGl2ZVdpZGdldCgpOwogICAgIGlmICh0YXJn
ZXQpIHsKICAgICAgICAgd3hXZWJWaWV3TG9hZEV2ZW50IHdrRXZlbnQodGFyZ2V0KTsKICAgICAg
ICAgd2tFdmVudC5TZXRTdGF0ZSh3eFdFQlZJRVdfTE9BRF9ORUdPVElBVElORyk7CkBAIC0zMDUs
NyArMzA1LDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFd4OjpkaXNwYXRjaERpZFN0YQogCiB2
b2lkIEZyYW1lTG9hZGVyQ2xpZW50V3g6OmRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKGNvbnN0IFN0
cmluZyYgdGl0bGUpCiB7Ci0gICAgd3hXZWJWaWV3KiB0YXJnZXQgPSBzdGF0aWNfY2FzdDx3eFdl
YlZpZXcqPihtX2ZyYW1lLT52aWV3KCktPm5hdGl2ZVdpbmRvdygpKTsKKyAgICB3eFdlYlZpZXcq
IHRhcmdldCA9IHN0YXRpY19jYXN0PHd4V2ViVmlldyo+KG1fZnJhbWUtPnZpZXcoKS0+bmF0aXZl
V2lkZ2V0KCkpOwogICAgIGlmICh0YXJnZXQpCiAgICAgICAgIHRhcmdldC0+U2V0UGFnZVRpdGxl
KHRpdGxlKTsKIH0KQEAgLTMxMyw3ICszMTMsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50V3g6
OmRpc3BhdGNoRGlkUmVjCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRXeDo6ZGlzcGF0Y2hEaWRD
b21taXRMb2FkKCkKIHsKLSAgICB3eFdpbmRvdyogdGFyZ2V0ID0gbV9mcmFtZS0+dmlldygpLT5u
YXRpdmVXaW5kb3coKTsKKyAgICB3eFdpbmRvdyogdGFyZ2V0ID0gbV9mcmFtZS0+dmlldygpLT5u
YXRpdmVXaWRnZXQoKTsKICAgICBpZiAodGFyZ2V0KSB7CiAgICAgICAgIHd4V2ViVmlld0xvYWRF
dmVudCB3a0V2ZW50KHRhcmdldCk7CiAgICAgICAgIHdrRXZlbnQuU2V0U3RhdGUod3hXRUJWSUVX
X0xPQURfVFJBTlNGRVJSSU5HKTsKQEAgLTMyNCw3ICszMjQsNyBAQCB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50V3g6OmRpc3BhdGNoRGlkQ29tCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRXeDo6ZGlz
cGF0Y2hEaWRGaW5pc2hEb2N1bWVudExvYWQoKQogewotICAgIHd4V2luZG93KiB0YXJnZXQgPSBt
X2ZyYW1lLT52aWV3KCktPm5hdGl2ZVdpbmRvdygpOworICAgIHd4V2luZG93KiB0YXJnZXQgPSBt
X2ZyYW1lLT52aWV3KCktPm5hdGl2ZVdpZGdldCgpOwogICAgIGlmICh0YXJnZXQpIHsKICAgICAg
ICAgd3hXZWJWaWV3TG9hZEV2ZW50IHdrRXZlbnQodGFyZ2V0KTsKICAgICAgICAgd2tFdmVudC5T
ZXRTdGF0ZSh3eFdFQlZJRVdfTE9BRF9ET0NfQ09NUExFVEVEKTsKQEAgLTM5Niw3ICszOTYsNyBA
QCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50V3g6OnBvc3RQcm9ncmVzc0VzCiAKIHZvaWQgRnJhbWVM
b2FkZXJDbGllbnRXeDo6cG9zdFByb2dyZXNzRmluaXNoZWROb3RpZmljYXRpb24oKQogewotICAg
IHd4V2luZG93KiB0YXJnZXQgPSBtX2ZyYW1lLT52aWV3KCktPm5hdGl2ZVdpbmRvdygpOworICAg
IHd4V2luZG93KiB0YXJnZXQgPSBtX2ZyYW1lLT52aWV3KCktPm5hdGl2ZVdpZGdldCgpOwogICAg
IGlmICh0YXJnZXQpIHsKICAgICAgICAgd3hXZWJWaWV3TG9hZEV2ZW50IHdrRXZlbnQodGFyZ2V0
KTsKICAgICAgICAgd2tFdmVudC5TZXRTdGF0ZSh3eFdFQlZJRVdfTE9BRF9ETF9DT01QTEVURUQp
OwpAQCAtNzU2LDcgKzc1Niw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRXeDo6ZGlzcGF0Y2hE
ZWNpZGUKICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAg
d3hXaW5kb3cqIHRhcmdldCA9IG1fZnJhbWUtPnZpZXcoKS0+bmF0aXZlV2luZG93KCk7CisgICAg
d3hXaW5kb3cqIHRhcmdldCA9IG1fZnJhbWUtPnZpZXcoKS0+bmF0aXZlV2lkZ2V0KCk7CiAgICAg
aWYgKHRhcmdldCkgewogICAgICAgICB3eFdlYlZpZXdCZWZvcmVMb2FkRXZlbnQgd2tFdmVudCh0
YXJnZXQpOwogICAgICAgICB3a0V2ZW50LlNldE5hdmlnYXRpb25UeXBlKHd4TmF2VHlwZUZyb21X
ZWJOYXZUeXBlKGFjdGlvbi50eXBlKCkpKTsKQEAgLTgwNSw3ICs4MDUsNyBAQCBQYXNzUmVmUHRy
PEZyYW1lPiBGcmFtZUxvYWRlckNsaWVudFd4OjpjCiAqLwogCiAvKgotICAgIHd4V2luZG93KiBw
YXJlbnQgPSBtX2ZyYW1lLT52aWV3KCktPm5hdGl2ZVdpbmRvdygpOworICAgIHd4V2luZG93KiBw
YXJlbnQgPSBtX2ZyYW1lLT52aWV3KCktPm5hdGl2ZVdpZGdldCgpOwogCiAgICAgV2ViVmlld0Zy
YW1lRGF0YSogZGF0YSA9IG5ldyBXZWJWaWV3RnJhbWVEYXRhKCk7CiAgICAgZGF0YS0+bmFtZSA9
IG5hbWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19724</attachid>
            <date>2008-03-13 07:01:53 -0700</date>
            <delta_ts>2010-06-10 15:31:50 -0700</delta_ts>
            <desc>Updated patch to fix tabs vs. spaces</desc>
            <filename>webkit-widget-refactor.patch</filename>
            <type>text/plain</type>
            <size>43861</size>
            <attacher name="Rodney Dawes">dobey</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDk5MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzkgQEAKKzIwMDgtMDMtMTIgIFJvZG5leSBEYXdlcyAgPGRvYmV5QHdheW9mdGhl
bW9ua2V5LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhISkKKworICAg
ICAgICBJbXBsZW1lbnQgbW9yZSBjbGFzcyBtZXRob2RzIGFzIGNyb3NzLXBsYXRmb3JtIGNvZGUu
CisgICAgICAgIE9ubHkgdXNlIHNoYXJlZCBjb250YWluaW5nV2luZG93KCkgb24gbm9uLVF0LCBh
cyBRdCBoYXMgYSBkZXBlbmRlbmN5CisgICAgICAgIG9uIGEgY2xhc3MgdHlwZSBpbiBXZWJLaXQg
d2hpY2ggd2UgbmVlZCB0byBwcmVzZXJ2ZSBmb3Igbm93LgorICAgICAgICBBdm9pZCByZWZlcmVu
Y2luZyB0aGUgZGVyaXZlZCBTY3JvbGxWaWV3IGNsYXNzIGluc2lkZSBXaWRnZXQuCisgICAgICAg
IEFkZCB0aGUgY3Jvc3MtcGxhdGZvcm0gdHlwZSBQbGF0Zm9ybVdpZGdldC4KKyAgICAgICAgQXZv
aWQgZHVwbGljYXRpbmcgcHJvdG90eXBlcyBhY3Jvc3MgcGxhdGZvcm1zLgorICAgICAgICBSZXBs
YWNlIGR1cGxpY2F0ZSBpdGVtcyBmcm9tIHByaXZhdGUgZGF0YSBjbGFzcyB3aXRoIHByaXZhdGUg
dmFyaWFibGVzLgorICAgICAgICBSZXBsYWNlIHNldEd0a1dpZGdldCgpIHVzYWdlIHdpdGggc2V0
TmF0aXZlV2lkZ2V0KCkuCisgICAgICAgIFJlcGxhY2UgZ3RrV2lkZ2V0KCkgdXNhZ2Ugd2l0aCBu
YXRpdmVXaWRnZXQoKS4KKyAgICAgICAgQ2hhbmdlIGdka0RyYXdhYmxlKCkgaW4gcHJpdmF0ZSBk
YXRhIGNsYXNzIHRvIHRha2UgYSBHdGtXaWRnZXQuCisgICAgICAgIEluaXRpYWxpemUgbmV3IGNs
YXNzIHZhcmlhYmxlcyBpbiBjbGFzcyBjb25zdHJ1Y3Rvci4KKyAgICAgICAgUmVtb3ZlIHNoYXJl
ZCBtZXRob2RzIGZyb20gcGxhdGZvcm0tc3BlY2lmaWMgY29kZS4KKyAgICAgICAgVXBkYXRlIGRl
cml2ZWQgY2xhc3NlcyB0byB1c2UgV2lkZ2V0KiBhcyB0aGUgc2V0UGFyZW50KCkgYXJndW1lbnQu
CisgICAgICAgIFJlbW92ZSByZW1vdmVGcm9tUGFyZW50KCkgZnJvbSBXeCBwb3J0IFRlbXBvcmFy
eUxpbmtTdHVicy4KKworICAgICAgICAqIHBsYXRmb3JtL1dpZGdldC5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vV2lkZ2V0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1BsYXRmb3JtU2Nyb2xs
QmFyR3RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2Nyb2xsVmlld0d0ay5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
cXQvUGxhdGZvcm1TY3JvbGxCYXJRdC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vcXQvV2lkZ2V0
UXQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9QbGF0Zm9ybVNjcm9sbEJhci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL3dpbi9QbGF0Zm9ybVNjcm9sbEJhclNhZmFyaS5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vd2luL1dpZGdldFdpbi5jcHA6CisgICAgICAgICogcGxhdGZvcm0vd3gvUmVu
ZGVyVGhlbWVXeC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vd3gvU2Nyb2xsVmlld1d4LmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS93eC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL3d4L1dpZGdldFd4LmNwcDoKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcu
aDoKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXdXaW4uY3BwOgorCiAyMDA4LTAzLTEyICBE
YXZpZCBIYXJyaXNvbiAgPGhhcnJpc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBEYXJpbi4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5jcHAJKHJldmlzaW9uIDMwOTkzKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9XaWRnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCwxNCArODAsNzIgQEAg
dm9pZCBXaWRnZXQ6Om1vdmUoY29uc3QgSW50UG9pbnQgJnApIAogICAgIG1vdmUocC54KCksIHAu
eSgpKTsKIH0KIAordm9pZCBXaWRnZXQ6OmludmFsaWRhdGUoKQoreworICAgIGludmFsaWRhdGVS
ZWN0KEludFJlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkpKTsKK30KKwordm9pZCBXaWRnZXQ6
OnNldEZyYW1lR2VvbWV0cnkoY29uc3QgSW50UmVjdCAmcmVjdCkKK3sKKyAgICBtX2ZyYW1lUmVj
dCA9IHJlY3Q7CisgICAgZ2VvbWV0cnlDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRD
bGllbnQoV2lkZ2V0Q2xpZW50KiBjbGllbnQpCit7CisgICAgbV93aWRnZXRDbGllbnQgPSBjbGll
bnQ7Cit9CisKIGJvb2wgV2lkZ2V0Ojppc0ZyYW1lVmlldygpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCit2b2lkIFdpZGdldDo6cmVtb3ZlRnJvbVBhcmVudCgpCit7CisgICAgaWYg
KHBhcmVudCgpKQorICAgICAgICBwYXJlbnQoKS0+cmVtb3ZlQ2hpbGQodGhpcyk7Cit9CisKIElu
dFJlY3QgV2lkZ2V0Ojp3aW5kb3dDbGlwUmVjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEludFJl
Y3QoKTsKIH0KIAordm9pZCBXaWRnZXQ6OnNldENvbnRhaW5pbmdXaW5kb3coUGxhdGZvcm1XaWRn
ZXQgd2luZG93KQoreworICAgIG1fY29udGFpbmluZ1dpbmRvdyA9IHdpbmRvdzsKK30KKworI2lm
ICFQTEFURk9STShRVCkKK1BsYXRmb3JtV2lkZ2V0IFdpZGdldDo6Y29udGFpbmluZ1dpbmRvdygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGFpbmluZ1dpbmRvdzsKK30KKyNlbmRpZgorCit2
b2lkIFdpZGdldDo6c2V0UGFyZW50KFdpZGdldCogd2lkZ2V0KQoreworICAgIGlmICghd2lkZ2V0
IHx8ICF3aWRnZXQtPmlzQXR0YWNoZWRUb1dpbmRvdygpKQorICAgICAgICBkZXRhY2hGcm9tV2lu
ZG93KCk7CisgICAgbV9wYXJlbnQgPSB3aWRnZXQ7CisgICAgaWYgKHdpZGdldCAmJiB3aWRnZXQt
PmlzQXR0YWNoZWRUb1dpbmRvdygpKQorICAgICAgICBhdHRhY2hUb1dpbmRvdygpOworfQorCitJ
bnRQb2ludCBXaWRnZXQ6OmNvbnZlcnRDaGlsZFRvU2VsZihjb25zdCBXaWRnZXQqIGNoaWxkLCBj
b25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFBvaW50KHBvaW50
LngoKSArIGNoaWxkLT54KCksIHBvaW50LnkoKSArIGNoaWxkLT55KCkpOworfQorCitJbnRQb2lu
dCBXaWRnZXQ6OmNvbnZlcnRTZWxmVG9DaGlsZChjb25zdCBXaWRnZXQqIGNoaWxkLCBjb25zdCBJ
bnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFBvaW50KHBvaW50LngoKSAt
IGNoaWxkLT54KCksIHBvaW50LnkoKSAtIGNoaWxkLT55KCkpOworfQorCit2b2lkIFdpZGdldDo6
c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oYm9vbCBzdXBwcmVzcykKK3sKKyAgICBtX3N1cHByZXNz
SW52YWxpZGF0aW9uID0gc3VwcHJlc3M7Cit9CisKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
V2lkZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaAkocmV2aXNp
b24gMzA5OTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFdpZGdldF9oCiAjZGVmaW5lIFdpZGdldF9oCiAKKyNp
bmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAKICNpZiBQTEFU
Rk9STShNQUMpCkBAIC0zOCwyMSArMzksMjUgQEAgY2xhc3MgTlNWaWV3OwogCiAjaWYgUExBVEZP
Uk0oV0lOKQogdHlwZWRlZiBzdHJ1Y3QgSFdORF9fKiBIV05EOwordHlwZWRlZiBIV05EIFBsYXRm
b3JtV2lkZ2V0OwogI2VuZGlmCiAKICNpZiBQTEFURk9STShHVEspCiB0eXBlZGVmIHN0cnVjdCBf
R2RrRHJhd2FibGUgR2RrRHJhd2FibGU7CiB0eXBlZGVmIHN0cnVjdCBfR3RrV2lkZ2V0IEd0a1dp
ZGdldDsKIHR5cGVkZWYgc3RydWN0IF9HdGtDb250YWluZXIgR3RrQ29udGFpbmVyOwordHlwZWRl
ZiBHdGtXaWRnZXQqIFBsYXRmb3JtV2lkZ2V0OwogI2VuZGlmCiAKICNpZiBQTEFURk9STShRVCkK
IGNsYXNzIFFXaWRnZXQ7CiBjbGFzcyBRV2ViRnJhbWU7Cit0eXBlZGVmIFFXaWRnZXQqIFBsYXRm
b3JtV2lkZ2V0OwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXWCkKIGNsYXNzIHd4V2luZG93Owor
dHlwZWRlZiB3eFdpbmRvdyogUGxhdGZvcm1XaWRnZXQ7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNjUsNyArNzAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3Mg
SW50UmVjdDsKICAgICBjbGFzcyBJbnRTaXplOwogICAgIGNsYXNzIFBsYXRmb3JtTW91c2VFdmVu
dDsKLSAgICBjbGFzcyBTY3JvbGxWaWV3OwogICAgIGNsYXNzIFdpZGdldENsaWVudDsKICAgICBj
bGFzcyBXaWRnZXRQcml2YXRlOwogCkBAIC05Myw3ICs5Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmKTsK
IAogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0Jik7
Ci0gICAgICAgIHZpcnR1YWwgSW50UmVjdCBmcmFtZUdlb21ldHJ5KCkgY29uc3Q7CisgICAgICAg
IHZpcnR1YWwgSW50UmVjdCBmcmFtZUdlb21ldHJ5KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJl
Y3Q7IH0KIAogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoKTsKIApAQCAtMTA2LDExICsx
MTAsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldElzU2VsZWN0ZWQo
Ym9vbCk7CiAKICAgICAgICAgdm9pZCBzZXRDbGllbnQoV2lkZ2V0Q2xpZW50Kik7Ci0gICAgICAg
IFdpZGdldENsaWVudCogY2xpZW50KCkgY29uc3Q7CisgICAgICAgIFdpZGdldENsaWVudCogY2xp
ZW50KCkgY29uc3QgeyByZXR1cm4gbV93aWRnZXRDbGllbnQ7IH0KIAogICAgICAgICB2aXJ0dWFs
IGJvb2wgaXNGcmFtZVZpZXcoKSBjb25zdDsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
RnJvbVBhcmVudCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2hpbGQoV2lkZ2V0Kikg
eyB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGFkZFRvRGlydHlSZWdpb24oY29uc3QgSW50UmVj
dCYpIHsgfQogCiAgICAgICAgIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgcGx1Z2lucyBvbiBh
bGwgcGxhdGZvcm1zIHRvIG9idGFpbiBhIGNsaXAgcmVjdCB0aGF0IGluY2x1ZGVzIGNsaXBzIHNl
dCBieSBXZWJDb3JlLAogICAgICAgICAvLyBlLmcuLCBpbiBvdmVyZmxvdzphdXRvIHNlY3Rpb25z
LiAgVGhlIGNsaXAgcmVjdHMgY29vcmRpbmF0ZXMgYXJlIGluIHRoZSBjb250YWluaW5nIHdpbmRv
dydzIGNvb3JkaW5hdGUgc3BhY2UuCkBAIC0xMTksMzYgKzEyNiwxNCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50KikgeyB9CiAK
LSNpZiBQTEFURk9STShXSU4pCi0gICAgICAgIHZvaWQgc2V0Q29udGFpbmluZ1dpbmRvdyhIV05E
KTsKLSAgICAgICAgSFdORCBjb250YWluaW5nV2luZG93KCkgY29uc3Q7Ci0KLSAgICAgICAgdmly
dHVhbCB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3Kik7Ci0gICAgICAgIFNjcm9sbFZpZXcqIHBh
cmVudCgpIGNvbnN0OwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hUb1dpbmRvdygpIHsg
fQotICAgICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoRnJvbVdpbmRvdygpIHsgfQorICAgICAgICB2
b2lkIHNldENvbnRhaW5pbmdXaW5kb3coUGxhdGZvcm1XaWRnZXQgd2luZG93KTsKKyAgICAgICAg
UGxhdGZvcm1XaWRnZXQgY29udGFpbmluZ1dpbmRvdygpIGNvbnN0OwogCi0gICAgICAgIHZpcnR1
YWwgdm9pZCBnZW9tZXRyeUNoYW5nZWQoKSBjb25zdCB7fTsKLSAgICAgICAgCi0gICAgICAgIElu
dFJlY3QgY29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRSZWN0JikgY29uc3Q7Ci0g
ICAgICAgIEludFBvaW50IGNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coY29uc3QgSW50UG9pbnQm
KSBjb25zdDsKLSAgICAgICAgSW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5nV2luZG93KGNv
bnN0IEludFBvaW50JikgY29uc3Q7Ci0KLSAgICAgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0
Q2hpbGRUb1NlbGYoY29uc3QgV2lkZ2V0KiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsKLSAgICAg
ICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0U2VsZlRvQ2hpbGQoY29uc3QgV2lkZ2V0KiwgY29u
c3QgSW50UG9pbnQmKSBjb25zdDsKLQotICAgICAgICBib29sIHN1cHByZXNzSW52YWxpZGF0aW9u
KCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oYm9vbCk7Ci0K
LSNlbmRpZgotCi0jaWYgUExBVEZPUk0oR1RLKQotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0UGFy
ZW50KFNjcm9sbFZpZXcqKTsKLSAgICAgICAgU2Nyb2xsVmlldyogcGFyZW50KCkgY29uc3Q7Cisg
ICAgICAgIHZvaWQgc2V0TmF0aXZlV2lkZ2V0KFBsYXRmb3JtV2lkZ2V0IHdpZGdldCkgeyBtX3dp
ZGdldCA9IHdpZGdldDsgfQorICAgICAgICBQbGF0Zm9ybVdpZGdldCBuYXRpdmVXaWRnZXQoKSBj
b25zdCB7IHJldHVybiBtX3dpZGdldDsgfQogCi0gICAgICAgIHZvaWQgc2V0Q29udGFpbmluZ1dp
bmRvdyhHdGtDb250YWluZXIqKTsKLSAgICAgICAgR3RrQ29udGFpbmVyKiBjb250YWluaW5nV2lu
ZG93KCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRQYXJlbnQoV2lkZ2V0Kik7Cisg
ICAgICAgIFdpZGdldCogcGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQ7IH0KIAogICAg
ICAgICB2aXJ0dWFsIHZvaWQgZ2VvbWV0cnlDaGFuZ2VkKCkgY29uc3Q7CiAKQEAgLTE1OSwzNiAr
MTQ0LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBJbnRQb2ludCBj
b252ZXJ0Q2hpbGRUb1NlbGYoY29uc3QgV2lkZ2V0KiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsK
ICAgICAgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0U2VsZlRvQ2hpbGQoY29uc3QgV2lkZ2V0
KiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsKIAotICAgICAgICBib29sIHN1cHByZXNzSW52YWxp
ZGF0aW9uKCkgY29uc3Q7CisgICAgICAgIGJvb2wgc3VwcHJlc3NJbnZhbGlkYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX3N1cHByZXNzSW52YWxpZGF0aW9uOyB9CiAgICAgICAgIHZvaWQgc2V0U3Vw
cHJlc3NJbnZhbGlkYXRpb24oYm9vbCk7CiAKLSAgICAgICAgR3RrV2lkZ2V0KiBndGtXaWRnZXQo
KSBjb25zdDsKLXByb3RlY3RlZDoKLSAgICAgICAgdm9pZCBzZXRHdGtXaWRnZXQoR3RrV2lkZ2V0
Kik7Ci0jZW5kaWYKKyAgICAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFRvV2luZG93KCkgeyB9Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hGcm9tV2luZG93KCkgeyB9CisgICAgICAgIHZpcnR1
YWwgYm9vbCBpc0F0dGFjaGVkVG9XaW5kb3coKSB7IHJldHVybiBmYWxzZTsgfQogCiAjaWYgUExB
VEZPUk0oUVQpCi0gICAgICAgIHZvaWQgc2V0TmF0aXZlV2lkZ2V0KFFXaWRnZXQgKndpZGdldCk7
Ci0gICAgICAgIFFXaWRnZXQqIG5hdGl2ZVdpZGdldCgpIGNvbnN0OwotCi0gICAgICAgIFFXaWRn
ZXQgKmNvbnRhaW5pbmdXaW5kb3coKSBjb25zdDsKLQogICAgICAgICBRV2ViRnJhbWUqIHF3ZWJm
cmFtZSgpIGNvbnN0OwogICAgICAgICB2b2lkIHNldFFXZWJGcmFtZShRV2ViRnJhbWUgKndlYkZy
YW1lKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3Kik7Ci0gICAg
ICAgIFNjcm9sbFZpZXcqIHBhcmVudCgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIHZvaWQgZ2Vv
bWV0cnlDaGFuZ2VkKCkgY29uc3Q7Ci0gICAgICAgIFNjcm9sbFZpZXcqIHRvcExldmVsKCkgY29u
c3Q7Ci0KLSAgICAgICAgSW50UmVjdCBjb252ZXJ0VG9Db250YWluaW5nV2luZG93KGNvbnN0IElu
dFJlY3QmKSBjb25zdDsKLSAgICAgICAgSW50UG9pbnQgY29udmVydFRvQ29udGFpbmluZ1dpbmRv
dyhjb25zdCBJbnRQb2ludCYpIGNvbnN0OwotICAgICAgICBJbnRQb2ludCBjb252ZXJ0RnJvbUNv
bnRhaW5pbmdXaW5kb3coY29uc3QgSW50UG9pbnQmKSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFs
IEludFBvaW50IGNvbnZlcnRDaGlsZFRvU2VsZihjb25zdCBXaWRnZXQqLCBjb25zdCBJbnRQb2lu
dCYpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRTZWxmVG9DaGlsZChj
b25zdCBXaWRnZXQqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OwotCi0gICAgICAgIGJvb2wgc3Vw
cHJlc3NJbnZhbGlkYXRpb24oKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRTdXBwcmVzc0ludmFs
aWRhdGlvbihib29sKTsKKyAgICAgICAgV2lkZ2V0KiB0b3BMZXZlbCgpIGNvbnN0OwogI2VuZGlm
CiAKICNpZiBQTEFURk9STShNQUMpCkBAIC0yMDgsMTEgKzE3NCwxOSBAQCBwcm90ZWN0ZWQ6CiAK
ICNpZiBQTEFURk9STShXWCkKICAgICAgICAgV2lkZ2V0KHd4V2luZG93Kik7Ci0gICAgICAgIHd4
V2luZG93KiBuYXRpdmVXaW5kb3coKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHNldE5h
dGl2ZVdpbmRvdyh3eFdpbmRvdyopOwogI2VuZGlmCiAKICAgICBwcml2YXRlOgorICAgICAgICBQ
bGF0Zm9ybVdpZGdldCBtX2NvbnRhaW5pbmdXaW5kb3c7CisgICAgICAgIFBsYXRmb3JtV2lkZ2V0
IG1fd2lkZ2V0OworCisgICAgICAgIFdpZGdldCogbV9wYXJlbnQ7CisgICAgICAgIFdpZGdldENs
aWVudCogbV93aWRnZXRDbGllbnQ7CisKKyAgICAgICAgYm9vbCBtX3N1cHByZXNzSW52YWxpZGF0
aW9uOworCisgICAgICAgIEludFJlY3QgbV9mcmFtZVJlY3Q7CisKICAgICAgICAgV2lkZ2V0UHJp
dmF0ZSogZGF0YTsKICAgICB9OwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9y
bVNjcm9sbEJhckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxh
dGZvcm1TY3JvbGxCYXJHdGsuY3BwCShyZXZpc2lvbiAzMDk5MykKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3RrL1BsYXRmb3JtU2Nyb2xsQmFyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyAr
NTAsNyBAQCBQbGF0Zm9ybVNjcm9sbGJhcjo6UGxhdGZvcm1TY3JvbGxiYXIoU2NyCiAgICAgZ19z
aWduYWxfY29ubmVjdChHX09CSkVDVChzY3JvbGxCYXIpLCAidmFsdWUtY2hhbmdlZCIsIEdfQ0FM
TEJBQ0soUGxhdGZvcm1TY3JvbGxiYXI6Omd0a1ZhbHVlQ2hhbmdlZCksIHRoaXMpOwogICAgIGdf
c2lnbmFsX2Nvbm5lY3QoR19PQkpFQ1Qoc2Nyb2xsQmFyKSwgInNjcm9sbC1ldmVudCIsIEdfQ0FM
TEJBQ0soZ3RrU2Nyb2xsRXZlbnRDYWxsYmFjayksIHRoaXMpOwogCi0gICAgc2V0R3RrV2lkZ2V0
KEdUS19XSURHRVQoc2Nyb2xsQmFyKSk7CisgICAgc2V0TmF0aXZlV2lkZ2V0KEdUS19XSURHRVQo
c2Nyb2xsQmFyKSk7CiAKICAgICAvKgogICAgICAqIGFzc2lnbiBhIHNhbmUgZGVmYXVsdCB3aWR0
aCBhbmQgaGVpZ2h0IHRvIHRoZSBTY3JvbGxCYXIsIG90aGVyd2lzZQpAQCAtNjUsOSArNjUsOSBA
QCBQbGF0Zm9ybVNjcm9sbGJhcjo6flBsYXRmb3JtU2Nyb2xsYmFyKCkKICAgICAvKgogICAgICAq
IHRoZSBXaWRnZXQgZG9lcyBub3QgdGFrZSBvdmVyIG93bmVyc2hpcC4KICAgICAgKi8KLSAgICBn
X3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMoR19PQkpFQ1QoZ3RrV2lkZ2V0KCkp
LCAoZ3BvaW50ZXIpUGxhdGZvcm1TY3JvbGxiYXI6Omd0a1ZhbHVlQ2hhbmdlZCwgdGhpcyk7Ci0g
ICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKEdfT0JKRUNUKGd0a1dpZGdl
dCgpKSwgKGdwb2ludGVyKWd0a1Njcm9sbEV2ZW50Q2FsbGJhY2ssIHRoaXMpOwotICAgIGdfb2Jq
ZWN0X3VucmVmKEdfT0JKRUNUKGd0a1dpZGdldCgpKSk7CisgICAgZ19zaWduYWxfaGFuZGxlcnNf
ZGlzY29ubmVjdF9ieV9mdW5jKEdfT0JKRUNUKG5hdGl2ZVdpZGdldCgpKSwgKGdwb2ludGVyKVBs
YXRmb3JtU2Nyb2xsYmFyOjpndGtWYWx1ZUNoYW5nZWQsIHRoaXMpOworICAgIGdfc2lnbmFsX2hh
bmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhHX09CSkVDVChuYXRpdmVXaWRnZXQoKSksIChncG9p
bnRlcilndGtTY3JvbGxFdmVudENhbGxiYWNrLCB0aGlzKTsKKyAgICBnX29iamVjdF91bnJlZihH
X09CSkVDVChuYXRpdmVXaWRnZXQoKSkpOwogfQogCiBpbnQgUGxhdGZvcm1TY3JvbGxiYXI6Ondp
ZHRoKCkgY29uc3QKQEAgLTEyMyw3ICsxMjMsNyBAQCB2b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjpn
ZW9tZXRyeUNoYW5nZWQoCiAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxG
cmFtZVZpZXcqPihwYXJlbnQoKSk7CiAgICAgSW50UmVjdCB3aW5kb3dSZWN0ID0gSW50UmVjdChm
cmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coZnJhbWVHZW9tZXRyeSgpLmxvY2F0aW9uKCkpLCBm
cmFtZUdlb21ldHJ5KCkuc2l6ZSgpKTsKICAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7
IHdpbmRvd1JlY3QueCgpLCB3aW5kb3dSZWN0LnkoKSwgd2luZG93UmVjdC53aWR0aCgpLCB3aW5k
b3dSZWN0LmhlaWdodCgpIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKGd0a1dpZGdl
dCgpLCAmYWxsb2NhdGlvbik7CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKG5hdGl2ZVdp
ZGdldCgpLCAmYWxsb2NhdGlvbik7CiB9CiAKIHZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6Omd0a1Zh
bHVlQ2hhbmdlZChHdGtBZGp1c3RtZW50KiwgUGxhdGZvcm1TY3JvbGxiYXIqIHRoYXQpCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxWaWV3R3RrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxWaWV3R3RrLmNwcAkocmV2aXNpb24gMzA5OTMpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxWaWV3R3RrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM0LDcgKzEzNCw3IEBAIHZvaWQgU2Nyb2xsVmlld1Njcm9sbGJhcjo6Z2VvbWV0cnlDaGFu
Z2UKICAgICBzei5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7CiAKICAgICBHdGtBbGxvY2F0aW9uIGFs
bG9jYXRpb24gPSB7IGxvYy54KCksIGxvYy55KCksIHN6LndpZHRoKCksIHN6LmhlaWdodCgpIH07
Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKGd0a1dpZGdldCgpLCAmYWxsb2NhdGlvbik7
CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKG5hdGl2ZVdpZGdldCgpLCAmYWxsb2NhdGlv
bik7CiB9CiAKIHZvaWQgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnNldEhhc0hvcml6
b250YWxTY3JvbGxiYXIoYm9vbCBoYXNCYXIpCkBAIC00NzksOCArNDc5LDggQEAgdm9pZCBTY3Jv
bGxWaWV3OjphZGRDaGlsZChXaWRnZXQqIGNoaWxkKQogICAgIGNoaWxkLT5zZXRDb250YWluaW5n
V2luZG93KGNvbnRhaW5pbmdXaW5kb3coKSk7CiAgICAgbV9kYXRhLT5jaGlsZHJlbi5hZGQoY2hp
bGQpOwogCi0gICAgaWYgKGNoaWxkLT5ndGtXaWRnZXQoKSkKLSAgICAgICAgZ3RrX2NvbnRhaW5l
cl9hZGQoR1RLX0NPTlRBSU5FUihjb250YWluaW5nV2luZG93KCkpLCBjaGlsZC0+Z3RrV2lkZ2V0
KCkpOworICAgIGlmIChjaGlsZC0+bmF0aXZlV2lkZ2V0KCkpCisgICAgICAgIGd0a19jb250YWlu
ZXJfYWRkKEdUS19DT05UQUlORVIoY29udGFpbmluZ1dpbmRvdygpKSwgY2hpbGQtPm5hdGl2ZVdp
ZGdldCgpKTsKIH0KIAogdm9pZCBTY3JvbGxWaWV3OjpyZW1vdmVDaGlsZChXaWRnZXQqIGNoaWxk
KQpAQCAtNDg4LDggKzQ4OCw4IEBAIHZvaWQgU2Nyb2xsVmlldzo6cmVtb3ZlQ2hpbGQoV2lkZ2V0
KiBjaGkKICAgICBjaGlsZC0+c2V0UGFyZW50KDApOwogICAgIG1fZGF0YS0+Y2hpbGRyZW4ucmVt
b3ZlKGNoaWxkKTsKIAotICAgIGlmIChjaGlsZC0+Z3RrV2lkZ2V0KCkgJiYgR1RLX1dJREdFVChj
b250YWluaW5nV2luZG93KCkpID09IEdUS19XSURHRVQoY2hpbGQtPmd0a1dpZGdldCgpKS0+cGFy
ZW50KQotICAgICAgICBndGtfY29udGFpbmVyX3JlbW92ZShHVEtfQ09OVEFJTkVSKGNvbnRhaW5p
bmdXaW5kb3coKSksIGNoaWxkLT5ndGtXaWRnZXQoKSk7CisgICAgaWYgKGNoaWxkLT5uYXRpdmVX
aWRnZXQoKSAmJiBHVEtfV0lER0VUKGNvbnRhaW5pbmdXaW5kb3coKSkgPT0gR1RLX1dJREdFVChj
aGlsZC0+bmF0aXZlV2lkZ2V0KCkpLT5wYXJlbnQpCisgICAgICAgIGd0a19jb250YWluZXJfcmVt
b3ZlKEdUS19DT05UQUlORVIoY29udGFpbmluZ1dpbmRvdygpKSwgY2hpbGQtPm5hdGl2ZVdpZGdl
dCgpKTsKIH0KIAogdm9pZCBTY3JvbGxWaWV3OjpzY3JvbGxSZWN0SW50b1ZpZXdSZWN1cnNpdmVs
eShjb25zdCBJbnRSZWN0JiByKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0R3Rr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwCShy
ZXZpc2lvbiAzMDk5MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0ay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDE2ICs0Miw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgV2lkZ2V0UHJpdmF0ZSB7CiBwdWJsaWM6Ci0gICAgR3RrV2lkZ2V0KiB3aWRnZXQ7Ci0gICAg
V2lkZ2V0Q2xpZW50KiBjbGllbnQ7Ci0gICAgSW50UmVjdCBmcmFtZVJlY3Q7Ci0KLSAgICBTY3Jv
bGxWaWV3KiBwYXJlbnQ7Ci0gICAgR3RrQ29udGFpbmVyKiBjb250YWluaW5nV2luZG93OwotICAg
IGJvb2wgc3VwcHJlc3NJbnZhbGlkYXRpb247CiAgICAgR2RrQ3Vyc29yKiBjdXJzb3I7CiAKLSAg
ICBHZGtEcmF3YWJsZSogZ2RrRHJhd2FibGUoKSBjb25zdAorICAgIEdka0RyYXdhYmxlKiBnZGtE
cmF3YWJsZShHdGtXaWRnZXQqIHdpZGdldCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiB3
aWRnZXQgPyB3aWRnZXQtPndpbmRvdyA6IDA7CiAgICAgfQpAQCAtNTksNzMgKzUyLDI1IEBAIHB1
YmxpYzoKIAogV2lkZ2V0OjpXaWRnZXQoKQogICAgIDogZGF0YShuZXcgV2lkZ2V0UHJpdmF0ZSkK
KyAgICAsIG1fY29udGFpbmluZ1dpbmRvdygwKQorICAgICwgbV93aWRnZXQoMCkKKyAgICAsIG1f
cGFyZW50KDApCisgICAgLCBtX3dpZGdldENsaWVudCgwKQorICAgICwgbV9zdXBwcmVzc0ludmFs
aWRhdGlvbihmYWxzZSkKKyAgICAsIG1fZnJhbWVSZWN0KDAsIDAsIDAsIDApCiB7Ci0gICAgZGF0
YS0+d2lkZ2V0ID0gMDsKLSAgICBkYXRhLT5wYXJlbnQgPSAwOwotICAgIGRhdGEtPmNvbnRhaW5p
bmdXaW5kb3cgPSAwOwotICAgIGRhdGEtPnN1cHByZXNzSW52YWxpZGF0aW9uID0gZmFsc2U7CiAg
ICAgZGF0YS0+Y3Vyc29yID0gMDsKIH0KIAotR3RrV2lkZ2V0KiBXaWRnZXQ6Omd0a1dpZGdldCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRhdGEtPndpZGdldDsKLX0KLQotdm9pZCBXaWRnZXQ6OnNl
dEd0a1dpZGdldChHdGtXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBkYXRhLT53aWRnZXQgPSB3aWRn
ZXQ7Ci19Ci0KIFdpZGdldDo6fldpZGdldCgpCiB7CiAgICAgQVNTRVJUKCFwYXJlbnQoKSk7CiAg
ICAgZGVsZXRlIGRhdGE7CiB9CiAKLXZvaWQgV2lkZ2V0OjpzZXRDb250YWluaW5nV2luZG93KEd0
a0NvbnRhaW5lciogY29udGFpbmluZ1dpbmRvdykKLXsKLSAgICBkYXRhLT5jb250YWluaW5nV2lu
ZG93ID0gY29udGFpbmluZ1dpbmRvdzsKLX0KLQotR3RrQ29udGFpbmVyKiBXaWRnZXQ6OmNvbnRh
aW5pbmdXaW5kb3coKSBjb25zdAotewotICAgIHJldHVybiBkYXRhLT5jb250YWluaW5nV2luZG93
OwotfQotCi12b2lkIFdpZGdldDo6c2V0Q2xpZW50KFdpZGdldENsaWVudCogYykKLXsKLSAgICBk
YXRhLT5jbGllbnQgPSBjOwotfQotCi1XaWRnZXRDbGllbnQqIFdpZGdldDo6Y2xpZW50KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZGF0YS0+Y2xpZW50OwotfQotCi1JbnRSZWN0IFdpZGdldDo6ZnJh
bWVHZW9tZXRyeSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRhdGEtPmZyYW1lUmVjdDsKLX0KLQot
dm9pZCBXaWRnZXQ6OnNldEZyYW1lR2VvbWV0cnkoY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBk
YXRhLT5mcmFtZVJlY3QgPSByOwotfQotCi12b2lkIFdpZGdldDo6c2V0UGFyZW50KFNjcm9sbFZp
ZXcqIHYpCi17Ci0gICAgZGF0YS0+cGFyZW50ID0gdjsKLX0KLQotU2Nyb2xsVmlldyogV2lkZ2V0
OjpwYXJlbnQoKSBjb25zdAotewotICAgIHJldHVybiBkYXRhLT5wYXJlbnQ7Ci19Ci0KIHZvaWQg
V2lkZ2V0OjpzZXRGb2N1cygpCiB7Ci0gICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKGd0a1dpZGdl
dCgpID8gZ3RrV2lkZ2V0KCkgOiBHVEtfV0lER0VUKGNvbnRhaW5pbmdXaW5kb3coKSkpOworICAg
IGd0a193aWRnZXRfZ3JhYl9mb2N1cyhuYXRpdmVXaWRnZXQoKSA/IG5hdGl2ZVdpZGdldCgpIDog
R1RLX1dJREdFVChjb250YWluaW5nV2luZG93KCkpKTsKIH0KIAogQ3Vyc29yIFdpZGdldDo6Y3Vy
c29yKCkKQEAgLTE0Niw0MiArOTEsMzYgQEAgdm9pZCBXaWRnZXQ6OnNldEN1cnNvcihjb25zdCBD
dXJzb3ImIGN1cgogICAgIGlmIChwY3VyID09IGRhdGEtPmN1cnNvcikKICAgICAgICAgcmV0dXJu
OwogCi0gICAgZ2RrX3dpbmRvd19zZXRfY3Vyc29yKGRhdGEtPmdka0RyYXdhYmxlKCkgPyBHREtf
V0lORE9XKGRhdGEtPmdka0RyYXdhYmxlKCkpIDogR1RLX1dJREdFVChjb250YWluaW5nV2luZG93
KCkpLT53aW5kb3csIHBjdXIpOworICAgIGdka193aW5kb3dfc2V0X2N1cnNvcihkYXRhLT5nZGtE
cmF3YWJsZShuYXRpdmVXaWRnZXQoKSkgPyBHREtfV0lORE9XKGRhdGEtPmdka0RyYXdhYmxlKG5h
dGl2ZVdpZGdldCgpKSkgOiBHVEtfV0lER0VUKGNvbnRhaW5pbmdXaW5kb3coKSktPndpbmRvdywg
cGN1cik7CiAgICAgZGF0YS0+Y3Vyc29yID0gcGN1cjsKIH0KIAogdm9pZCBXaWRnZXQ6OnNob3co
KQogewotICAgIGlmICghZ3RrV2lkZ2V0KCkpCisgICAgaWYgKCFuYXRpdmVXaWRnZXQoKSkKICAg
ICAgICAgIHJldHVybjsKLSAgICBndGtfd2lkZ2V0X3Nob3coZ3RrV2lkZ2V0KCkpOworICAgIGd0
a193aWRnZXRfc2hvdyhuYXRpdmVXaWRnZXQoKSk7CiB9CiAKIHZvaWQgV2lkZ2V0OjpoaWRlKCkK
IHsKLSAgICBpZiAoIWd0a1dpZGdldCgpKQorICAgIGlmICghbmF0aXZlV2lkZ2V0KCkpCiAgICAg
ICAgICByZXR1cm47Ci0gICAgZ3RrX3dpZGdldF9oaWRlKGd0a1dpZGdldCgpKTsKKyAgICBndGtf
d2lkZ2V0X2hpZGUobmF0aXZlV2lkZ2V0KCkpOwogfQogCiB2b2lkIFdpZGdldDo6c2V0RW5hYmxl
ZChib29sIHNob3VsZEVuYWJsZSkKIHsKLSAgICBpZiAoIWd0a1dpZGdldCgpKQorICAgIGlmICgh
bmF0aXZlV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBndGtfd2lkZ2V0X3NldF9zZW5z
aXRpdmUoZ3RrV2lkZ2V0KCksIHNob3VsZEVuYWJsZSk7CisgICAgZ3RrX3dpZGdldF9zZXRfc2Vu
c2l0aXZlKG5hdGl2ZVdpZGdldCgpLCBzaG91bGRFbmFibGUpOwogfQogCiBib29sIFdpZGdldDo6
aXNFbmFibGVkKCkgY29uc3QKIHsKLSAgICBpZiAoIWd0a1dpZGdldCgpKQorICAgIGlmICghbmF0
aXZlV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gR1RLX1dJREdF
VF9JU19TRU5TSVRJVkUoZ3RrV2lkZ2V0KCkpOwotfQotCi12b2lkIFdpZGdldDo6cmVtb3ZlRnJv
bVBhcmVudCgpCi17Ci0gICAgaWYgKHBhcmVudCgpKQotICAgICAgICBwYXJlbnQoKS0+cmVtb3Zl
Q2hpbGQodGhpcyk7CisgICAgcmV0dXJuIEdUS19XSURHRVRfSVNfU0VOU0lUSVZFKG5hdGl2ZVdp
ZGdldCgpKTsKIH0KIAogLyoKQEAgLTE5MiwxMyArMTMxLDEzIEBAIHZvaWQgV2lkZ2V0OjpyZW1v
dmVGcm9tUGFyZW50KCkKICAqLwogdm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgSW50UmVjdCYpCiB7Ci0gICAgaWYgKCFndGtXaWRnZXQoKSkKKyAgICBp
ZiAoIW5hdGl2ZVdpZGdldCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWNvbnRleHQt
Pmdka0V4cG9zZUV2ZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEd0a1dpZGdldCogd2lk
Z2V0ID0gZ3RrV2lkZ2V0KCk7CisgICAgR3RrV2lkZ2V0KiB3aWRnZXQgPSBuYXRpdmVXaWRnZXQo
KTsKICAgICBBU1NFUlQoR1RLX1dJREdFVF9OT19XSU5ET1cod2lkZ2V0KSk7CiAKICAgICBHZGtF
dmVudCogZXZlbnQgPSBnZGtfZXZlbnRfbmV3KEdES19FWFBPU0UpOwpAQCAtMjI2LDE0ICsxNjUs
OSBAQCB2b2lkIFdpZGdldDo6c2V0SXNTZWxlY3RlZChib29sKQogICAgIG5vdEltcGxlbWVudGVk
KCk7CiB9CiAKLXZvaWQgV2lkZ2V0OjppbnZhbGlkYXRlKCkKLXsKLSAgICBpbnZhbGlkYXRlUmVj
dChJbnRSZWN0KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKSk7Ci19Ci0KIHZvaWQgV2lkZ2V0Ojpp
bnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIGlmIChkYXRhLT5zdXBw
cmVzc0ludmFsaWRhdGlvbikKKyAgICBpZiAoc3VwcHJlc3NJbnZhbGlkYXRpb24oKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgaWYgKCFwYXJlbnQoKSkgewpAQCAtMjQ1LDcgKzE3OSw3IEBAIHZv
aWQgV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWMKICAgICB9CiAKICAgICAvLyBH
ZXQgdGhlIHJvb3Qgd2lkZ2V0LgotICAgIFNjcm9sbFZpZXcqIG91dGVybW9zdFZpZXcgPSBwYXJl
bnQoKTsKKyAgICBXaWRnZXQqIG91dGVybW9zdFZpZXcgPSBwYXJlbnQoKTsKICAgICB3aGlsZSAo
b3V0ZXJtb3N0VmlldyAmJiBvdXRlcm1vc3RWaWV3LT5wYXJlbnQoKSkKICAgICAgICAgb3V0ZXJt
b3N0VmlldyA9IG91dGVybW9zdFZpZXctPnBhcmVudCgpOwogICAgIGlmICghb3V0ZXJtb3N0Vmll
dykKQEAgLTI4NCwyNiArMjE4LDYgQEAgSW50UmVjdCBXaWRnZXQ6OmNvbnZlcnRUb0NvbnRhaW5p
bmdXaW5kbwogICAgIHJldHVybiBjb252ZXJ0ZWRSZWN0OwogfQogCi1JbnRQb2ludCBXaWRnZXQ6
OmNvbnZlcnRDaGlsZFRvU2VsZihjb25zdCBXaWRnZXQqIGNoaWxkLCBjb25zdCBJbnRQb2ludCYg
cG9pbnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFBvaW50KHBvaW50LngoKSArIGNoaWxkLT54
KCksIHBvaW50LnkoKSArIGNoaWxkLT55KCkpOwotfQotCi1JbnRQb2ludCBXaWRnZXQ6OmNvbnZl
cnRTZWxmVG9DaGlsZChjb25zdCBXaWRnZXQqIGNoaWxkLCBjb25zdCBJbnRQb2ludCYgcG9pbnQp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFBvaW50KHBvaW50LngoKSAtIGNoaWxkLT54KCksIHBv
aW50LnkoKSAtIGNoaWxkLT55KCkpOwotfQotCi1ib29sIFdpZGdldDo6c3VwcHJlc3NJbnZhbGlk
YXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBkYXRhLT5zdXBwcmVzc0ludmFsaWRhdGlvbjsK
LX0KLQotdm9pZCBXaWRnZXQ6OnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGJvb2wgc3VwcHJlc3Mp
Ci17Ci0gICAgZGF0YS0+c3VwcHJlc3NJbnZhbGlkYXRpb24gPSBzdXBwcmVzczsKLX0KLQogdm9p
ZCBXaWRnZXQ6Omdlb21ldHJ5Q2hhbmdlZCgpIGNvbnN0CiB7CiB9CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL3F0L1BsYXRmb3JtU2Nyb2xsQmFyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vcXQvUGxhdGZvcm1TY3JvbGxCYXJRdC5jcHAJKHJldmlzaW9uIDMwOTkzKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9xdC9QbGF0Zm9ybVNjcm9sbEJhclF0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDI1LDcgKzQyNSw3IEBAIGludCBQbGF0Zm9ybVNjcm9sbGJhcjo6dmVydGljYWxTY3Jv
bGxiYXIKIHZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OmludmFsaWRhdGUoKQogewogICAgIC8vIEdl
dCB0aGUgcm9vdCB3aWRnZXQuCi0gICAgU2Nyb2xsVmlldyogb3V0ZXJtb3N0VmlldyA9IHRvcExl
dmVsKCk7CisgICAgV2lkZ2V0KiBvdXRlcm1vc3RWaWV3ID0gdG9wTGV2ZWwoKTsKICAgICBpZiAo
IW91dGVybW9zdFZpZXcpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9xdC9XaWRnZXRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9XaWRn
ZXRRdC5jcHAJKHJldmlzaW9uIDMwOTkzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9XaWRnZXRR
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDI2ICs1NCwyNSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBzdHJ1Y3QgV2lkZ2V0UHJpdmF0ZQogewogICAgIFdpZGdldFByaXZhdGUoKQotICAgICAg
ICA6IG1fY2xpZW50KDApCi0gICAgICAgICwgZW5hYmxlZCh0cnVlKQotICAgICAgICAsIHN1cHBy
ZXNzSW52YWxpZGF0aW9uKGZhbHNlKQotICAgICAgICAsIG1fd2lkZ2V0KDApCisgICAgICAgIDog
ZW5hYmxlZCh0cnVlKQogICAgICAgICAsIG1fd2ViRnJhbWUoMCkKICAgICAgICAgLCBtX3BhcmVu
dFNjcm9sbFZpZXcoMCkgeyB9CiAgICAgfldpZGdldFByaXZhdGUoKSB7IGRlbGV0ZSBtX3dlYkZy
YW1lOyB9CiAKLSAgICBXaWRnZXRDbGllbnQqIG1fY2xpZW50OwotCiAgICAgYm9vbCBlbmFibGVk
OwotICAgIGJvb2wgc3VwcHJlc3NJbnZhbGlkYXRpb247CiAgICAgUVJlY3QgbV9nZW9tZXRyeTsK
LSAgICBRV2lkZ2V0ICptX3dpZGdldDsgLy9mb3IgcGx1Z2lucwogICAgIFFXZWJGcmFtZSAqbV93
ZWJGcmFtZTsKICAgICBTY3JvbGxWaWV3ICptX3BhcmVudFNjcm9sbFZpZXc7CiB9OwogCiBXaWRn
ZXQ6OldpZGdldCgpCiAgICAgOiBkYXRhKG5ldyBXaWRnZXRQcml2YXRlKCkpCisgICAgLCBtX2Nv
bnRhaW5pbmdXaW5kb3coMCkKKyAgICAsIG1fd2lkZ2V0KDApCisgICAgLCBtX3BhcmVudCgwKQor
ICAgICwgbV93aWRnZXRDbGllbnQoMCkKKyAgICAsIG1fc3VwcHJlc3NJbnZhbGlkYXRpb24oZmFs
c2UpCisgICAgLCBtX2ZyYW1lUmVjdCgwLCAwLCAwLCAwKQogewogfQogCkBAIC04NCwzMCArODMs
NiBAQCBXaWRnZXQ6On5XaWRnZXQoKQogICAgIGRhdGEgPSAwOwogfQogCi12b2lkIFdpZGdldDo6
c2V0Q2xpZW50KFdpZGdldENsaWVudCogYykKLXsKLSAgICBkYXRhLT5tX2NsaWVudCA9IGM7Ci19
Ci0KLVdpZGdldENsaWVudCogV2lkZ2V0OjpjbGllbnQoKSBjb25zdAotewotICAgIHJldHVybiBk
YXRhLT5tX2NsaWVudDsKLX0KLQotSW50UmVjdCBXaWRnZXQ6OmZyYW1lR2VvbWV0cnkoKSBjb25z
dAotewotICAgIGlmIChkYXRhLT5tX3dpZGdldCkKLSAgICAgICAgZGF0YS0+bV93aWRnZXQtPmdl
b21ldHJ5KCk7Ci0gICAgcmV0dXJuIGRhdGEtPm1fZ2VvbWV0cnk7Ci19Ci0KLXZvaWQgV2lkZ2V0
OjpzZXRGcmFtZUdlb21ldHJ5KGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgaWYgKGRhdGEtPm1f
d2lkZ2V0KQotICAgICAgICBkYXRhLT5tX3dpZGdldC0+c2V0R2VvbWV0cnkocik7Ci0gICAgZGF0
YS0+bV9nZW9tZXRyeSA9IHI7Ci19Ci0KIHZvaWQgV2lkZ2V0OjpzZXRGb2N1cygpCiB7CiB9CkBA
IC0xMjIsMTQgKzk3LDE0IEBAIHZvaWQgV2lkZ2V0OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBj
dXIKIAogdm9pZCBXaWRnZXQ6OnNob3coKQogewotICAgIGlmIChkYXRhLT5tX3dpZGdldCkKLSAg
ICAgICAgZGF0YS0+bV93aWRnZXQtPnNob3coKTsKKyAgICBpZiAobmF0aXZlV2lkZ2V0KCkpCisg
ICAgICAgIG5hdGl2ZVdpZGdldCgpLT5zaG93KCk7CiB9CiAKIHZvaWQgV2lkZ2V0OjpoaWRlKCkK
IHsKLSAgICBpZiAoZGF0YS0+bV93aWRnZXQpCi0gICAgICAgIGRhdGEtPm1fd2lkZ2V0LT5oaWRl
KCk7CisgICAgaWYgKG5hdGl2ZVdpZGdldCgpKQorICAgICAgICBuYXRpdmVXaWRnZXQoKS0+aGlk
ZSgpOwogfQogCiBRV2ViRnJhbWUqIFdpZGdldDo6cXdlYmZyYW1lKCkgY29uc3QKQEAgLTE0Miwz
MSArMTE3LDIxIEBAIHZvaWQgV2lkZ2V0OjpzZXRRV2ViRnJhbWUoUVdlYkZyYW1lKiB3ZWIKICAg
ICBkYXRhLT5tX3dlYkZyYW1lID0gd2ViRnJhbWU7CiB9CiAKLVFXaWRnZXQqIFdpZGdldDo6bmF0
aXZlV2lkZ2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZGF0YS0+bV93aWRnZXQ7Ci19Ci0KLXZv
aWQgV2lkZ2V0OjpzZXROYXRpdmVXaWRnZXQoUVdpZGdldCAqd2lkZ2V0KQotewotICAgIGRhdGEt
Pm1fd2lkZ2V0ID0gd2lkZ2V0OwotfQotCiB2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250
ZXh0ICosIGNvbnN0IEludFJlY3QgJnJlY3QpCiB7CiB9CiAKIGJvb2wgV2lkZ2V0Ojppc0VuYWJs
ZWQoKSBjb25zdAogewotICAgIGlmIChkYXRhLT5tX3dpZGdldCkKLSAgICAgICAgcmV0dXJuIGRh
dGEtPm1fd2lkZ2V0LT5pc0VuYWJsZWQoKTsKKyAgICBpZiAobmF0aXZlV2lkZ2V0KCkpCisgICAg
ICAgIHJldHVybiBuYXRpdmVXaWRnZXQoKS0+aXNFbmFibGVkKCk7CiAgICAgcmV0dXJuIGRhdGEt
PmVuYWJsZWQ7CiB9CiAKIHZvaWQgV2lkZ2V0OjpzZXRFbmFibGVkKGJvb2wgZSkKIHsKLSAgICBp
ZiAoZGF0YS0+bV93aWRnZXQpCi0gICAgICAgIGRhdGEtPm1fd2lkZ2V0LT5zZXRFbmFibGVkKGUp
OworICAgIGlmIChuYXRpdmVXaWRnZXQoKSkKKyAgICAgICAgbmF0aXZlV2lkZ2V0KCktPnNldEVu
YWJsZWQoZSk7CiAKICAgICBpZiAoZSAhPSBkYXRhLT5lbmFibGVkKSB7CiAgICAgICAgIGRhdGEt
PmVuYWJsZWQgPSBlOwpAQCAtMTc5LDI4ICsxNDQsMTMgQEAgdm9pZCBXaWRnZXQ6OnNldElzU2Vs
ZWN0ZWQoYm9vbCkKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1ib29sIFdpZGdldDo6c3Vw
cHJlc3NJbnZhbGlkYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBkYXRhLT5zdXBwcmVzc0lu
dmFsaWRhdGlvbjsKLX0KLQotdm9pZCBXaWRnZXQ6OnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGJv
b2wgc3VwcHJlc3MpCi17Ci0gICAgZGF0YS0+c3VwcHJlc3NJbnZhbGlkYXRpb24gPSBzdXBwcmVz
czsKLX0KLQotdm9pZCBXaWRnZXQ6OmludmFsaWRhdGUoKQotewotICAgIGludmFsaWRhdGVSZWN0
KEludFJlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkpKTsKLX0KLQogdm9pZCBXaWRnZXQ6Omlu
dmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHIpCiB7Ci0gICAgaWYgKGRhdGEtPnN1cHByZXNz
SW52YWxpZGF0aW9uKQorICAgIGlmIChzdXBwcmVzc0ludmFsaWRhdGlvbigpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAoZGF0YS0+bV93aWRnZXQpIHsgLy9wbHVnaW5zCi0gICAgICAgIGRh
dGEtPm1fd2lkZ2V0LT51cGRhdGUocik7CisgICAgaWYgKG5hdGl2ZVdpZGdldCgpKSB7IC8vcGx1
Z2lucworICAgICAgICBuYXRpdmVXaWRnZXQoKS0+dXBkYXRlKHIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC0yMTEsNyArMTYxLDcgQEAgdm9pZCBXaWRnZXQ6OmludmFsaWRhdGVSZWN0
KGNvbnN0IEludFJlYwogICAgIH0KIAogICAgIC8vIEdldCB0aGUgcm9vdCB3aWRnZXQuCi0gICAg
U2Nyb2xsVmlldyogb3V0ZXJtb3N0VmlldyA9IHRvcExldmVsKCk7CisgICAgV2lkZ2V0KiBvdXRl
cm1vc3RWaWV3ID0gdG9wTGV2ZWwoKTsKICAgICBpZiAoIW91dGVybW9zdFZpZXcpCiAgICAgICAg
IHJldHVybjsKIApAQCAtMjI0LDQ4ICsxNzQsMzQgQEAgdm9pZCBXaWRnZXQ6OmludmFsaWRhdGVS
ZWN0KGNvbnN0IEludFJlYwogICAgIG91dGVybW9zdFZpZXctPmFkZFRvRGlydHlSZWdpb24od2lu
ZG93UmVjdCk7CiB9CiAKLXZvaWQgV2lkZ2V0OjpyZW1vdmVGcm9tUGFyZW50KCkKK1dpZGdldCog
V2lkZ2V0Ojp0b3BMZXZlbCgpIGNvbnN0CiB7Ci0gICAgaWYgKHBhcmVudCgpKQotICAgICAgICBw
YXJlbnQoKS0+cmVtb3ZlQ2hpbGQodGhpcyk7Ci19Ci0KLXZvaWQgV2lkZ2V0OjpzZXRQYXJlbnQo
U2Nyb2xsVmlldyogc3YpCi17Ci0gICAgZGF0YS0+bV9wYXJlbnRTY3JvbGxWaWV3ID0gc3Y7Ci19
Ci0KLVNjcm9sbFZpZXcqIFdpZGdldDo6cGFyZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZGF0
YS0+bV9wYXJlbnRTY3JvbGxWaWV3OwotfQotCi1TY3JvbGxWaWV3KiBXaWRnZXQ6OnRvcExldmVs
KCkgY29uc3QKLXsKLSAgICBpZiAoIWRhdGEtPm1fcGFyZW50U2Nyb2xsVmlldykKLSAgICAgICAg
cmV0dXJuIGlzRnJhbWVWaWV3KCkgPyBjb25zdF9jYXN0PFNjcm9sbFZpZXcqPihzdGF0aWNfY2Fz
dDxjb25zdCBTY3JvbGxWaWV3Kj4odGhpcykpIDogMDsKLSAgICBTY3JvbGxWaWV3KiB0b3BMZXZl
bCA9IGRhdGEtPm1fcGFyZW50U2Nyb2xsVmlldzsKLSAgICB3aGlsZSAodG9wTGV2ZWwtPmRhdGEt
Pm1fcGFyZW50U2Nyb2xsVmlldykKLSAgICAgICAgdG9wTGV2ZWwgPSB0b3BMZXZlbC0+ZGF0YS0+
bV9wYXJlbnRTY3JvbGxWaWV3OworICAgIGlmICghcGFyZW50KCkpCisgICAgICAgIHJldHVybiBp
c0ZyYW1lVmlldygpID8gY29uc3RfY2FzdDxXaWRnZXQqPih0aGlzKSA6IDA7CisgICAgV2lkZ2V0
KiB0b3BMZXZlbCA9IHBhcmVudCgpOworICAgIHdoaWxlICh0b3BMZXZlbC0+cGFyZW50KCkpCisg
ICAgICAgIHRvcExldmVsID0gdG9wTGV2ZWwtPnBhcmVudCgpOwogICAgIHJldHVybiB0b3BMZXZl
bDsKIH0KIAotUVdpZGdldCAqV2lkZ2V0Ojpjb250YWluaW5nV2luZG93KCkgY29uc3QKK1BsYXRm
b3JtV2lkZ2V0IFdpZGdldDo6Y29udGFpbmluZ1dpbmRvdygpIGNvbnN0CiB7Ci0gICAgU2Nyb2xs
VmlldyAqdG9wTGV2ZWwgPSB0aGlzLT50b3BMZXZlbCgpOworICAgIFdpZGdldCAqdG9wTGV2ZWwg
PSB0aGlzLT50b3BMZXZlbCgpOwogICAgIGlmICghdG9wTGV2ZWwpCiAgICAgICAgIHJldHVybiAw
OwogICAgIFFXaWRnZXQgKnZpZXcgPSAwOwogICAgIGlmICh0b3BMZXZlbC0+ZGF0YS0+bV93ZWJG
cmFtZSkKICAgICAgICAgdmlldyA9IHRvcExldmVsLT5kYXRhLT5tX3dlYkZyYW1lLT5wYWdlKCkt
PnZpZXcoKTsKICAgICBpZiAoIXZpZXcpCi0gICAgICAgIHZpZXcgPSBkYXRhLT5tX3dpZGdldDsK
KyAgICAgICAgdmlldyA9IG5hdGl2ZVdpZGdldCgpOwogICAgIHJldHVybiB2aWV3OwogfQogCiAK
IHZvaWQgV2lkZ2V0OjpnZW9tZXRyeUNoYW5nZWQoKSBjb25zdAogeworICAgIGlmIChuYXRpdmVX
aWRnZXQoKSkKKyAgICAgICAgbmF0aXZlV2lkZ2V0KCktPnNldEdlb21ldHJ5KGZyYW1lR2VvbWV0
cnkoKSk7CiB9CiAKIEludFBvaW50IFdpZGdldDo6Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhj
b25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CkBAIC0yOTksMTYgKzIzNSw2IEBAIEludFJlY3Qg
V2lkZ2V0Ojpjb252ZXJ0VG9Db250YWluaW5nV2luZG8KICAgICByZXR1cm4gY29udmVydGVkUmVj
dDsKIH0KIAotSW50UG9pbnQgV2lkZ2V0Ojpjb252ZXJ0Q2hpbGRUb1NlbGYoY29uc3QgV2lkZ2V0
KiBjaGlsZCwgY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAotewotICAgIHJldHVybiBJbnRQ
b2ludChwb2ludC54KCkgKyBjaGlsZC0+eCgpLCBwb2ludC55KCkgKyBjaGlsZC0+eSgpKTsKLX0K
LQotSW50UG9pbnQgV2lkZ2V0Ojpjb252ZXJ0U2VsZlRvQ2hpbGQoY29uc3QgV2lkZ2V0KiBjaGls
ZCwgY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAotewotICAgIHJldHVybiBJbnRQb2ludChw
b2ludC54KCkgLSBjaGlsZC0+eCgpLCBwb2ludC55KCkgLSBjaGlsZC0+eSgpKTsKLX0KLQogfQog
CiAvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGxhdGZv
cm1TY3JvbGxCYXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9QbGF0Zm9y
bVNjcm9sbEJhci5oCShyZXZpc2lvbiAzMDk5MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL1Bs
YXRmb3JtU2Nyb2xsQmFyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCBib29sIGlzV2lkZ2V0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
Ci0gICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3Kik7CisgICAgdmlydHVhbCB2
b2lkIHNldFBhcmVudChXaWRnZXQqKTsKIAogICAgIHZpcnR1YWwgaW50IHdpZHRoKCkgY29uc3Q7
CiAgICAgdmlydHVhbCBpbnQgaGVpZ2h0KCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L3dpbi9QbGF0Zm9ybVNjcm9sbEJhclNhZmFyaS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS93aW4vUGxhdGZvcm1TY3JvbGxCYXJTYWZhcmkuY3BwCShyZXZpc2lvbiAzMDk5MykK
KysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL1BsYXRmb3JtU2Nyb2xsQmFyU2FmYXJpLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjExLDcgKzIxMSw3IEBAIHZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OnNl
dFJlY3QoY29uc3QgSW4KICAgICBzZXRGcmFtZUdlb21ldHJ5KGFkanVzdGVkUmVjdCk7CiB9CiAK
LXZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OnNldFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnRWaWV3
KQordm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6c2V0UGFyZW50KFdpZGdldCogcGFyZW50VmlldykK
IHsKICAgICBpZiAoIXBhcmVudFZpZXcgJiYgbV9vdmVybGFwc1Jlc2l6ZXIgJiYgcGFyZW50KCkg
JiYgcGFyZW50KCktPmlzRnJhbWVWaWV3KCkpCiAgICAgICAgIHN0YXRpY19jYXN0PEZyYW1lVmll
dyo+KHBhcmVudCgpKS0+YWRqdXN0T3ZlcmxhcHBpbmdTY3JvbGxiYXJDb3VudCgtMSk7CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9XaWRnZXRXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vd2luL1dpZGdldFdpbi5jcHAJKHJldmlzaW9uIDMwOTkzKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vV2lkZ2V0V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMjQgKzQy
LDIxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFdpZGdldFByaXZhdGUKIHsKIHB1Ymxp
YzoKLSAgICBXaWRnZXRDbGllbnQqIGNsaWVudDsKLSAgICBTY3JvbGxWaWV3KiBwYXJlbnQ7Ci0g
ICAgSFdORCBjb250YWluaW5nV2luZG93OwotICAgIEludFJlY3QgZnJhbWVSZWN0OwogICAgIGJv
b2wgZW5hYmxlZDsKICAgICBXaWRnZXQqIGNhcHR1cmluZ0NoaWxkOwotICAgIGJvb2wgc3VwcHJl
c3NJbnZhbGlkYXRpb247CiB9OwogCiBXaWRnZXQ6OldpZGdldCgpCiAgICAgOiBkYXRhKG5ldyBX
aWRnZXRQcml2YXRlKQorICAgICwgbV9jb250YWluaW5nV2luZG93KDApCisgICAgLCBtX3dpZGdl
dCgwKQorICAgICwgbV9wYXJlbnQoMCkKKyAgICAsIG1fd2lkZ2V0Q2xpZW50KDApCisgICAgLCBt
X3N1cHByZXNzSW52YWxpZGF0aW9uKGZhbHNlKQorICAgICwgbV9mcmFtZVJlY3QoMCwgMCwgMCwg
MCkKIHsKLSAgICBkYXRhLT5jbGllbnQgPSAwOwotICAgIGRhdGEtPnBhcmVudCA9IDA7Ci0gICAg
ZGF0YS0+Y29udGFpbmluZ1dpbmRvdyA9IDA7CiAgICAgZGF0YS0+ZW5hYmxlZCA9IHRydWU7CiAg
ICAgZGF0YS0+Y2FwdHVyaW5nQ2hpbGQgPSAwOwotICAgIGRhdGEtPnN1cHByZXNzSW52YWxpZGF0
aW9uID0gZmFsc2U7CiB9CiAKIFdpZGdldDo6fldpZGdldCgpIApAQCAtNjgsNTYgKzY1LDYgQEAg
V2lkZ2V0Ojp+V2lkZ2V0KCkgCiAgICAgZGVsZXRlIGRhdGE7CiB9CiAKLXZvaWQgV2lkZ2V0Ojpz
ZXRDb250YWluaW5nV2luZG93KEhXTkQgY29udGFpbmluZ1dpbmRvdykKLXsKLSAgICBkYXRhLT5j
b250YWluaW5nV2luZG93ID0gY29udGFpbmluZ1dpbmRvdzsKLX0KLQotSFdORCBXaWRnZXQ6OmNv
bnRhaW5pbmdXaW5kb3coKSBjb25zdAotewotICAgIHJldHVybiBkYXRhLT5jb250YWluaW5nV2lu
ZG93OwotfQotCi12b2lkIFdpZGdldDo6c2V0Q2xpZW50KFdpZGdldENsaWVudCogYykKLXsKLSAg
ICBkYXRhLT5jbGllbnQgPSBjOwotfQotCi1XaWRnZXRDbGllbnQqIFdpZGdldDo6Y2xpZW50KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gZGF0YS0+Y2xpZW50OwotfQotCi1JbnRSZWN0IFdpZGdldDo6
ZnJhbWVHZW9tZXRyeSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRhdGEtPmZyYW1lUmVjdDsKLX0K
LQotdm9pZCBXaWRnZXQ6OnNldEZyYW1lR2VvbWV0cnkoY29uc3QgSW50UmVjdCAmcmVjdCkKLXsK
LSAgICBkYXRhLT5mcmFtZVJlY3QgPSByZWN0OwotfQotCi12b2lkIFdpZGdldDo6c2V0UGFyZW50
KFNjcm9sbFZpZXcqIHYpCi17Ci0gICAgaWYgKCF2IHx8ICF2LT5pc0F0dGFjaGVkVG9XaW5kb3co
KSkKLSAgICAgICAgZGV0YWNoRnJvbVdpbmRvdygpOwotICAgIGRhdGEtPnBhcmVudCA9IHY7Ci0g
ICAgaWYgKHYgJiYgdi0+aXNBdHRhY2hlZFRvV2luZG93KCkpCi0gICAgICAgIGF0dGFjaFRvV2lu
ZG93KCk7Ci19Ci0KLVNjcm9sbFZpZXcqIFdpZGdldDo6cGFyZW50KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gZGF0YS0+cGFyZW50OwotfQotCi12b2lkIFdpZGdldDo6cmVtb3ZlRnJvbVBhcmVudCgp
Ci17Ci0gICAgaWYgKHBhcmVudCgpKQotICAgICAgICBwYXJlbnQoKS0+cmVtb3ZlQ2hpbGQodGhp
cyk7Ci19Ci0KIHZvaWQgV2lkZ2V0OjpzaG93KCkKIHsKIH0KQEAgLTE3MSwxNiArMTE4LDYgQEAg
SW50UmVjdCBXaWRnZXQ6OmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kbwogICAgIHJldHVybiBjb252
ZXJ0ZWRSZWN0OwogfQogCi1JbnRQb2ludCBXaWRnZXQ6OmNvbnZlcnRDaGlsZFRvU2VsZihjb25z
dCBXaWRnZXQqIGNoaWxkLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIEludFBvaW50KHBvaW50LngoKSArIGNoaWxkLT54KCksIHBvaW50LnkoKSArIGNoaWxkLT55
KCkpOwotfQotCi1JbnRQb2ludCBXaWRnZXQ6OmNvbnZlcnRTZWxmVG9DaGlsZChjb25zdCBXaWRn
ZXQqIGNoaWxkLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElu
dFBvaW50KHBvaW50LngoKSAtIGNoaWxkLT54KCksIHBvaW50LnkoKSAtIGNoaWxkLT55KCkpOwot
fQotCiB2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYp
CiB7CiB9CkBAIC0xOTgsMjQgKzEzNSw5IEBAIHZvaWQgV2lkZ2V0OjpzZXRFbmFibGVkKGJvb2wg
ZSkKICAgICB9CiB9CiAKLWJvb2wgV2lkZ2V0OjpzdXBwcmVzc0ludmFsaWRhdGlvbigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGRhdGEtPnN1cHByZXNzSW52YWxpZGF0aW9uOwotfQotCi12b2lkIFdp
ZGdldDo6c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oYm9vbCBzdXBwcmVzcykKLXsKLSAgICBkYXRh
LT5zdXBwcmVzc0ludmFsaWRhdGlvbiA9IHN1cHByZXNzOwotfQotCi12b2lkIFdpZGdldDo6aW52
YWxpZGF0ZSgpCi17Ci0gICAgaW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCB3aWR0aCgpLCBo
ZWlnaHQoKSkpOwotfQotCiB2b2lkIFdpZGdldDo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVj
dCYgcikKIHsKLSAgICBpZiAoZGF0YS0+c3VwcHJlc3NJbnZhbGlkYXRpb24pCisgICAgaWYgKHN1
cHByZXNzSW52YWxpZGF0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghcGFyZW50
KCkpIHsKQEAgLTIyNyw3ICsxNDksNyBAQCB2b2lkIFdpZGdldDo6aW52YWxpZGF0ZVJlY3QoY29u
c3QgSW50UmVjCiAgICAgfQogCiAgICAgLy8gR2V0IHRoZSByb290IHdpZGdldC4KLSAgICBTY3Jv
bGxWaWV3KiBvdXRlcm1vc3RWaWV3ID0gcGFyZW50KCk7CisgICAgV2lkZ2V0KiBvdXRlcm1vc3RW
aWV3ID0gcGFyZW50KCk7CiAgICAgd2hpbGUgKG91dGVybW9zdFZpZXcgJiYgb3V0ZXJtb3N0Vmll
dy0+cGFyZW50KCkpCiAgICAgICAgIG91dGVybW9zdFZpZXcgPSBvdXRlcm1vc3RWaWV3LT5wYXJl
bnQoKTsKICAgICBpZiAoIW91dGVybW9zdFZpZXcpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3d4
L1JlbmRlclRoZW1lV3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd3gvUmVu
ZGVyVGhlbWVXeC5jcHAJKHJldmlzaW9uIDMwOTkzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS93eC9S
ZW5kZXJUaGVtZVd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDcgKzE4OCw3IEBAIHZvaWQg
UmVuZGVyVGhlbWVXeDo6YWRqdXN0QnV0dG9uU3R5bGUoQ1MKIAogYm9vbCBSZW5kZXJUaGVtZVd4
OjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQogewotICAgIHd4V2luZG93KiB3aW5kb3cgPSBvLT52
aWV3KCktPmZyYW1lVmlldygpLT5uYXRpdmVXaW5kb3coKTsKKyAgICB3eFdpbmRvdyogd2luZG93
ID0gby0+dmlldygpLT5mcmFtZVZpZXcoKS0+bmF0aXZlV2lkZ2V0KCk7CiAgICAgd3hEQyogZGMg
PSBzdGF0aWNfY2FzdDx3eERDKj4oaS5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAg
d3hBU1NFUlQoZGMtPklzT2soKSk7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd3gvU2Nyb2xs
Vmlld1d4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3d4L1Njcm9sbFZpZXdX
eC5jcHAJKHJldmlzaW9uIDMwOTkzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS93eC9TY3JvbGxWaWV3
V3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNyArMTMxLDcgQEAgU2Nyb2xsVmlldzo6U2Ny
b2xsVmlldygpCiAKIHZvaWQgU2Nyb2xsVmlldzo6c2V0TmF0aXZlV2luZG93KHd4V2luZG93KiB3
aW4pCiB7Ci0gICAgV2lkZ2V0OjpzZXROYXRpdmVXaW5kb3cod2luKTsKKyAgICBXaWRnZXQ6OnNl
dE5hdGl2ZVdpZGdldCh3aW4pOwogICAgIG1fZGF0YS0+YmluZEV2ZW50cyh3aW4pOwogfQogCkBA
IC0xNDUsNyArMTQ1LDcgQEAgdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVDb250ZW50cyhjb25zdCBJ
bgogICAgIC8vIHdlIG5lZWQgdG8gY29udmVydCBjb29yZGluYXRlcyB0byBzY3JvbGxlZCBwb3Np
dGlvbgogICAgIHd4UmVjdCBjb250ZW50c1JlY3QgPSB1cGRhdGVSZWN0OwogICAgIGNvbnRlbnRz
UmVjdC5PZmZzZXQoLWNvbnRlbnRzWCgpLCAtY29udGVudHNZKCkpOwotICAgIHd4V2luZG93KiB3
aW4gPSBuYXRpdmVXaW5kb3coKTsKKyAgICB3eFdpbmRvdyogd2luID0gbmF0aXZlV2lkZ2V0KCk7
CiAgICAgaWYgKHdpbikgewogICAgICAgICB3aW4tPlJlZnJlc2hSZWN0KGNvbnRlbnRzUmVjdCwg
dHJ1ZSk7CiAgICAgICAgIGlmIChub3cpCkBAIC0xNTUsNyArMTU1LDcgQEAgdm9pZCBTY3JvbGxW
aWV3Ojp1cGRhdGVDb250ZW50cyhjb25zdCBJbgogCiB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZSgp
CiB7Ci0gICAgd3hXaW5kb3cqIHdpbiA9IG5hdGl2ZVdpbmRvdygpOworICAgIHd4V2luZG93KiB3
aW4gPSBuYXRpdmVXaWRnZXQoKTsKICAgICBpZiAod2luKQogICAgICAgICB3aW4tPlVwZGF0ZSgp
OwogfQpAQCAtMTYzLDcgKzE2Myw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlKCkKIGludCBT
Y3JvbGxWaWV3Ojp2aXNpYmxlV2lkdGgoKSBjb25zdAogewogICAgIGludCB3aWR0aCA9IDA7Ci0g
ICAgd3hXaW5kb3cqIHdpbiA9IG5hdGl2ZVdpbmRvdygpOworICAgIHd4V2luZG93KiB3aW4gPSBu
YXRpdmVXaWRnZXQoKTsKICAgICBpZiAod2luKQogICAgICAgICB3aW4tPkdldENsaWVudFNpemUo
JndpZHRoLCBOVUxMKTsKICAgICAKQEAgLTE3NCw3ICsxNzQsNyBAQCBpbnQgU2Nyb2xsVmlldzo6
dmlzaWJsZVdpZHRoKCkgY29uc3QKIGludCBTY3JvbGxWaWV3Ojp2aXNpYmxlSGVpZ2h0KCkgY29u
c3QKIHsKICAgICBpbnQgaGVpZ2h0ID0gMDsKLSAgICB3eFdpbmRvdyogd2luID0gbmF0aXZlV2lu
ZG93KCk7CisgICAgd3hXaW5kb3cqIHdpbiA9IG5hdGl2ZVdpZGdldCgpOwogICAgIGlmICh3aW4p
CiAgICAgICAgIHdpbi0+R2V0Q2xpZW50U2l6ZShOVUxMLCAmaGVpZ2h0KTsKICAgICAKQEAgLTE5
Niw3ICsxOTYsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnNldENvbnRlbnRzUG9zKGludCBuZXdYCiAK
IHZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsQnkoaW50IGR4LCBpbnQgZHkpCiB7Ci0gICAgd3hXaW5k
b3cqIHdpbiA9IG5hdGl2ZVdpbmRvdygpOworICAgIHd4V2luZG93KiB3aW4gPSBuYXRpdmVXaWRn
ZXQoKTsKICAgICBpZiAoIXdpbikKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMzUsNyArMjM1LDcg
QEAgdm9pZCBTY3JvbGxWaWV3OjpzY3JvbGxCeShpbnQgZHgsIGludCBkeQogCiB2b2lkIFNjcm9s
bFZpZXc6OnJlc2l6ZUNvbnRlbnRzKGludCB3LGludCBoKQogewotICAgIHd4V2luZG93KiB3aW4g
PSBuYXRpdmVXaW5kb3coKTsKKyAgICB3eFdpbmRvdyogd2luID0gbmF0aXZlV2lkZ2V0KCk7CiAg
ICAgaWYgKHdpbikgewogICAgICAgICB3aW4tPlNldFZpcnR1YWxTaXplKHcsIGgpOwogICAgICAg
ICBhZGp1c3RTY3JvbGxiYXJzKCk7CkBAIC0yNTcsNyArMjU3LDcgQEAgaW50IFNjcm9sbFZpZXc6
OmNvbnRlbnRzWSgpIGNvbnN0CiBpbnQgU2Nyb2xsVmlldzo6Y29udGVudHNXaWR0aCgpIGNvbnN0
CiB7CiAgICAgaW50IHdpZHRoID0gMDsKLSAgICB3eFdpbmRvdyogd2luID0gbmF0aXZlV2luZG93
KCk7CisgICAgd3hXaW5kb3cqIHdpbiA9IG5hdGl2ZVdpZGdldCgpOwogICAgIGlmICh3aW4pCiAg
ICAgICAgIHdpbi0+R2V0VmlydHVhbFNpemUoJndpZHRoLCBOVUxMKTsKICAgICBBU1NFUlQod2lk
dGggPj0gMCk7CkBAIC0yNjcsNyArMjY3LDcgQEAgaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzV2lk
dGgoKSBjb25zdAogaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzSGVpZ2h0KCkgY29uc3QKIHsKICAg
ICBpbnQgaGVpZ2h0ID0gMDsKLSAgICB3eFdpbmRvdyogd2luID0gbmF0aXZlV2luZG93KCk7Cisg
ICAgd3hXaW5kb3cqIHdpbiA9IG5hdGl2ZVdpZGdldCgpOwogICAgIGlmICh3aW4pCiAgICAgICAg
IHdpbi0+R2V0VmlydHVhbFNpemUoTlVMTCwgJmhlaWdodCk7CiAgICAgQVNTRVJUKGhlaWdodCA+
PSAwKTsKQEAgLTI4OCw3ICsyODgsNyBAQCBJbnRTaXplIFNjcm9sbFZpZXc6OnNjcm9sbE9mZnNl
dCgpIGNvbnN0CiAKIHZvaWQgU2Nyb2xsVmlldzo6YWRqdXN0U2Nyb2xsYmFycyhpbnQgeCwgaW50
IHksIGJvb2wgcmVmcmVzaCkKIHsKLSAgICB3eFdpbmRvdyogd2luID0gbmF0aXZlV2luZG93KCk7
CisgICAgd3hXaW5kb3cqIHdpbiA9IG5hdGl2ZVdpZGdldCgpOwogICAgIGlmICghd2luKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTQxMCw3ICs0MTAsNyBAQCBib29sIFNjcm9sbFZpZXc6OmluV2lu
ZG93KCkgY29uc3QKICAgICAvLyBOQjogVGhpcyBpcyBjYWxsZWQgZnJvbSBSZW5kZXJPYmplY3Q6
OndpbGxSZW5kZXJJbWFnZQogICAgIC8vIGFuZCByZWFsbHkgc2VlbXMgdG8gYmUgbW9yZSBvZiBh
ICJpcyB0aGUgd2luZG93IGluIGEgdmFsaWQgc3RhdGUiIHRlc3QsCiAgICAgLy8gZGVzcGl0ZSB0
aGUgQVBJIG5hbWUuCi0gICAgcmV0dXJuIG5hdGl2ZVdpbmRvdygpICE9IE5VTEw7CisgICAgcmV0
dXJuIG5hdGl2ZVdpZGdldCgpICE9IE5VTEw7CiB9CiAKIHZvaWQgU2Nyb2xsVmlldzo6d2hlZWxF
dmVudChQbGF0Zm9ybVdoZWVsRXZlbnQmIGUpCkBAIC00NDEsMTIgKzQ0MSwxMiBAQCB2b2lkIFNj
cm9sbFZpZXc6OnJlbW92ZUNoaWxkKFdpZGdldCogd2lkCiB7CiAgICAgbV9kYXRhLT5tX2NoaWxk
cmVuLnJlbW92ZSh3aWRnZXQpOwogCi0gICAgaWYgKG5hdGl2ZVdpbmRvdygpICYmIHdpZGdldC0+
bmF0aXZlV2luZG93KCkpIHsKLSAgICAgICAgbmF0aXZlV2luZG93KCktPlJlbW92ZUNoaWxkKHdp
ZGdldC0+bmF0aXZlV2luZG93KCkpOworICAgIGlmIChuYXRpdmVXaWRnZXQoKSAmJiB3aWRnZXQt
Pm5hdGl2ZVdpZGdldCgpKSB7CisgICAgICAgIG5hdGl2ZVdpZGdldCgpLT5SZW1vdmVDaGlsZCh3
aWRnZXQtPm5hdGl2ZVdpZGdldCgpKTsKICAgICAgICAgLy8gRklYTUU6IElzIHRoaXMgdGhlIHJp
Z2h0IHBsYWNlIHRvIGRvIGRlbGV0aW9uPyBJIHNlZQogICAgICAgICAvLyBkZXRhY2hGcm9tUGFy
ZW50Mi8zLzQsIGluaXRpYXRlZCBieSBGcmFtZUxvYWRlcjo6ZGV0YWNoRnJvbVBhcmVudCwKICAg
ICAgICAgLy8gYnV0IEknbSBub3Qgc3VyZSBpZiBpdCdzIGJldHRlciB0byBoYW5kbGUgdGhlcmUg
b3Igbm90LgotICAgICAgICB3aWRnZXQtPm5hdGl2ZVdpbmRvdygpLT5EZXN0cm95KCk7CisgICAg
ICAgIHdpZGdldC0+bmF0aXZlV2lkZ2V0KCktPkRlc3Ryb3koKTsKICAgICB9CiB9CiAKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vd3gvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL3d4L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDMw
OTkzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS93eC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04OSw5ICs4OSw2IEBAIFZlY3RvcjxjaGFyPiBsb2FkUmVzb3VyY2VJbnRv
QXJyYXkoY29uc3QKICAgICByZXR1cm4gcmVzb3VyY2U7CiB9CiAKLXZvaWQgV2lkZ2V0OjpyZW1v
dmVGcm9tUGFyZW50KCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci0KLQogaW50IGZpbmROZXh0U2Vu
dGVuY2VGcm9tSW5kZXgoVUNoYXIgY29uc3QqLGludCxpbnQsYm9vbCkgeyBub3RJbXBsZW1lbnRl
ZCgpOyByZXR1cm4gMDsgfQogdm9pZCBmaW5kU2VudGVuY2VCb3VuZGFyeShVQ2hhciBjb25zdCos
aW50LGludCxpbnQqLGludCopIHsgbm90SW1wbGVtZW50ZWQoKTsgfQogCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL3d4L1dpZGdldFd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L3d4L1dpZGdldFd4LmNwcAkocmV2aXNpb24gMzA5OTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3d4
L1dpZGdldFd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMjIgKzM4LDMwIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIGNsYXNzIFdpZGdldFByaXZhdGUKIHsKIHB1YmxpYzoKLSAgICB3eFdpbmRv
dyogbmF0aXZlV2luZG93OwogICAgIEZvbnQgZm9udDsKLSAgICBXaWRnZXRDbGllbnQqIGNsaWVu
dDsKIH07CiAKIFdpZGdldDo6V2lkZ2V0KCkKICAgICA6IGRhdGEobmV3IFdpZGdldFByaXZhdGUp
CisgICAgLCBtX2NvbnRhaW5pbmdXaW5kb3coMCkKKyAgICAsIG1fd2lkZ2V0KDApCisgICAgLCBt
X3BhcmVudCgwKQorICAgICwgbV93aWRnZXRDbGllbnQoMCkKKyAgICAsIG1fc3VwcHJlc3NJbnZh
bGlkYXRpb24oZmFsc2UpCisgICAgLCBtX2ZyYW1lUmVjdCgwLCAwLCAwLCAwKQogewotICAgIGRh
dGEtPm5hdGl2ZVdpbmRvdyA9IDA7Ci0gICAgZGF0YS0+Y2xpZW50ID0gMDsKIH0KIAogV2lkZ2V0
OjpXaWRnZXQod3hXaW5kb3cqIHdpbikKICAgICA6IGRhdGEobmV3IFdpZGdldFByaXZhdGUpCisg
ICAgLCBtX2NvbnRhaW5pbmdXaW5kb3coMCkKKyAgICAsIG1fd2lkZ2V0KDApCisgICAgLCBtX3Bh
cmVudCgwKQorICAgICwgbV93aWRnZXRDbGllbnQoMCkKKyAgICAsIG1fc3VwcHJlc3NJbnZhbGlk
YXRpb24oZmFsc2UpCisgICAgLCBtX2ZyYW1lUmVjdCgwLCAwLCAwLCAwKQogewotICAgIHNldE5h
dGl2ZVdpbmRvdyh3aW4pOworICAgIHNldE5hdGl2ZVdpZGdldCh3aW4pOwogfQogCiBXaWRnZXQ6
On5XaWRnZXQoKQpAQCAtNjEsOTUgKzY5LDYxIEBAIFdpZGdldDo6fldpZGdldCgpCiAgICAgZGVs
ZXRlIGRhdGE7CiB9CiAKLXd4V2luZG93KiBXaWRnZXQ6Om5hdGl2ZVdpbmRvdygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGRhdGEtPm5hdGl2ZVdpbmRvdzsKLX0KLQotdm9pZCBXaWRnZXQ6OnNldE5h
dGl2ZVdpbmRvdyh3eFdpbmRvdyogd2luKQotewotICAgIGRhdGEtPm5hdGl2ZVdpbmRvdyA9IHdp
bjsKLX0KLQotdm9pZCBXaWRnZXQ6OnNldENsaWVudChXaWRnZXRDbGllbnQqIGMpCi17Ci0gICAg
ZGF0YS0+Y2xpZW50ID0gYzsKLX0KLQotV2lkZ2V0Q2xpZW50KiBXaWRnZXQ6OmNsaWVudCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGRhdGEtPmNsaWVudDsKLX0KLQotSW50UmVjdCBXaWRnZXQ6OmZy
YW1lR2VvbWV0cnkoKSBjb25zdAoteyAgIAotICAgIGlmIChkYXRhLT5uYXRpdmVXaW5kb3cpCi0g
ICAgICAgIHJldHVybiBJbnRSZWN0KGRhdGEtPm5hdGl2ZVdpbmRvdy0+R2V0UmVjdCgpKTsKLQot
ICAgIHJldHVybiBJbnRSZWN0KCk7Ci19Ci0KIHZvaWQgV2lkZ2V0OjpzZXRGb2N1cygpCiB7Ci0g
ICAgaWYgKGRhdGEtPm5hdGl2ZVdpbmRvdykKLSAgICAgICAgZGF0YS0+bmF0aXZlV2luZG93LT5T
ZXRGb2N1cygpOworICAgIGlmIChuYXRpdmVXaWRnZXQoKSkKKyAgICAgICAgbmF0aXZlV2lkZ2V0
KCktPlNldEZvY3VzKCk7CiB9CiAKIHZvaWQgV2lkZ2V0OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29y
JiBjdXJzb3IpCiB7Ci0gICAgaWYgKGRhdGEtPm5hdGl2ZVdpbmRvdyAmJiBjdXJzb3IuaW1wbCgp
KQotICAgICAgICBkYXRhLT5uYXRpdmVXaW5kb3ctPlNldEN1cnNvcigqY3Vyc29yLmltcGwoKSk7
CisgICAgaWYgKG5hdGl2ZVdpZGdldCgpICYmIGN1cnNvci5pbXBsKCkpCisgICAgICAgIG5hdGl2
ZVdpZGdldCgpLT5TZXRDdXJzb3IoKmN1cnNvci5pbXBsKCkpOwogfQogCiB2b2lkIFdpZGdldDo6
c2hvdygpCiB7Ci0gICAgaWYgKGRhdGEtPm5hdGl2ZVdpbmRvdykKLSAgICAgICAgZGF0YS0+bmF0
aXZlV2luZG93LT5TaG93KCk7CisgICAgaWYgKG5hdGl2ZVdpZGdldCgpKQorICAgICAgICBuYXRp
dmVXaWRnZXQoKS0+U2hvdygpOwogfQogCiB2b2lkIFdpZGdldDo6aGlkZSgpCiB7Ci0gICAgaWYg
KGRhdGEtPm5hdGl2ZVdpbmRvdykKLSAgICAgICAgZGF0YS0+bmF0aXZlV2luZG93LT5IaWRlKCk7
Ci19Ci0KLXZvaWQgV2lkZ2V0OjpzZXRGcmFtZUdlb21ldHJ5KGNvbnN0IEludFJlY3QgJnJlY3Qp
Ci17Ci0gICAgaWYgKGRhdGEtPm5hdGl2ZVdpbmRvdykKLSAgICAgICAgZGF0YS0+bmF0aXZlV2lu
ZG93LT5TZXRTaXplKHJlY3QpOworICAgIGlmIChuYXRpdmVXaWRnZXQoKSkKKyAgICAgICAgbmF0
aXZlV2lkZ2V0KCktPkhpZGUoKTsKIH0KIAogdm9pZCBXaWRnZXQ6OnNldEVuYWJsZWQoYm9vbCBl
bmFibGVkKQogewotICAgIGlmIChkYXRhLT5uYXRpdmVXaW5kb3cpCi0gICAgICAgIGRhdGEtPm5h
dGl2ZVdpbmRvdy0+RW5hYmxlKGVuYWJsZWQpOworICAgIGlmIChuYXRpdmVXaWRnZXQoKSkKKyAg
ICAgICAgbmF0aXZlV2lkZ2V0KCktPkVuYWJsZShlbmFibGVkKTsKIH0KIAogYm9vbCBXaWRnZXQ6
OmlzRW5hYmxlZCgpIGNvbnN0CiB7Ci0gICAgaWYgKGRhdGEtPm5hdGl2ZVdpbmRvdykKLSAgICAg
ICAgcmV0dXJuIGRhdGEtPm5hdGl2ZVdpbmRvdy0+SXNFbmFibGVkKCk7CisgICAgaWYgKG5hdGl2
ZVdpZGdldCgpKQorICAgICAgICByZXR1cm4gbmF0aXZlV2lkZ2V0KCktPklzRW5hYmxlZCgpOwog
ICAgICAgICAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgV2lkZ2V0OjppbnZhbGlkYXRl
KCkKLXsKLSAgICBpZiAoZGF0YS0+bmF0aXZlV2luZG93KQotICAgICAgICBkYXRhLT5uYXRpdmVX
aW5kb3ctPlJlZnJlc2goKTsKLX0KLQogdm9pZCBXaWRnZXQ6OmludmFsaWRhdGVSZWN0KGNvbnN0
IEludFJlY3QmIHIpCiB7Ci0gICAgaWYgKGRhdGEtPm5hdGl2ZVdpbmRvdykKLSAgICAgICAgZGF0
YS0+bmF0aXZlV2luZG93LT5SZWZyZXNoUmVjdChyKTsKKyAgICBpZiAobmF0aXZlV2lkZ2V0KCkp
CisgICAgICAgIG5hdGl2ZVdpZGdldCgpLT5SZWZyZXNoUmVjdChyKTsKIH0KIAogdm9pZCBXaWRn
ZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCosY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBpbnZh
bGlkYXRlUmVjdChyKTsKLSAgICBpZiAoZGF0YS0+bmF0aXZlV2luZG93KQotICAgICAgICBkYXRh
LT5uYXRpdmVXaW5kb3ctPlVwZGF0ZSgpOworICAgIGlmIChuYXRpdmVXaWRnZXQoKSkKKyAgICAg
ICAgbmF0aXZlV2lkZ2V0KCktPlVwZGF0ZSgpOworfQorCit2b2lkIFdpZGdldDo6Z2VvbWV0cnlD
aGFuZ2VkKCkgY29uc3QKK3sKKyAgICBpZiAobmF0aXZlV2lkZ2V0KCkpCisgICAgICAgIG5hdGl2
ZVdpZGdldCgpLT5TZXRTaXplKGZyYW1lR2VvbWV0cnkoKSk7CiB9CiAKLX0KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCit9CkluZGV4OiBXZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmgJKHJldmlzaW9uIDMwOTkz
KQorKysgV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMTIw
LDcgKzEyMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHBh
aW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKICAgICAgICAgdmlydHVhbCBJ
bnRSZWN0IHdpbmRvd0NsaXBSZWN0KCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGVFdmVudChFdmVudCopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0UGFyZW50KFNjcm9sbFZp
ZXcqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChXaWRnZXQqKTsKIAogICAgICAg
ICB2aXJ0dWFsIHZvaWQgYXR0YWNoVG9XaW5kb3coKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRl
dGFjaEZyb21XaW5kb3coKTsKSW5kZXg6IFdlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dp
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNw
cAkocmV2aXNpb24gMzA5OTMpCisrKyBXZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDksNyArNjQ5LDcgQEAgdm9pZCBQbHVnaW5WaWV3Ojpo
YW5kbGVFdmVudChFdmVudCogZXZlbgogICAgICAgICBoYW5kbGVLZXlib2FyZEV2ZW50KHN0YXRp
Y19jYXN0PEtleWJvYXJkRXZlbnQqPihldmVudCkpOwogfQogCi12b2lkIFBsdWdpblZpZXc6OnNl
dFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCit2b2lkIFBsdWdpblZpZXc6OnNldFBhcmVudChX
aWRnZXQqIHBhcmVudCkKIHsKICAgICBXaWRnZXQ6OnNldFBhcmVudChwYXJlbnQpOwogCkluZGV4
OiBXZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0NoYW5nZUxv
ZwkocmV2aXNpb24gMzA5OTMpCisrKyBXZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDEzIEBACisyMDA4LTAzLTEyICBSb2RuZXkgRGF3ZXMgIDxkb2JleUB3YXlv
ZnRoZW1vbmtleS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISEpCisK
KyAgICAgICAgUGFzcyBhIEd0a1dpZGdldCB0byBzZXRDb250YWluaW5nV2luZG93IHJhdGhlciB0
aGFuIGEgR3RrQ29udGFpbmVyLgorCisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNw
cDoKKyAgICAgICAgKHdlYmtpdF93ZWJfZnJhbWVfbmV3KToKKyAgICAgICAgKHdlYmtpdF93ZWJf
RnJhbWVfaW5pdF93aXRoX3dlYl92aWV3KToKKwogMjAwOC0wMy0xMCAgWGFuIExvcGV6ICA8eGFu
QGdub21lLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbHAgVG9rZXIuCkluZGV4OiBXZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwCShyZXZpc2lvbiAzMDk5MykKKysrIFdlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIwLDcgKzIy
MCw3IEBAIFdlYktpdFdlYkZyYW1lKiB3ZWJraXRfd2ViX2ZyYW1lX25ldyhXZWIKICAgICBwcml2
LT5jb3JlRnJhbWUgPSBuZXcgRnJhbWUodmlld1ByaXYtPmNvcmVQYWdlLCAwLCBwcml2LT5jbGll
bnQpOwogCiAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBuZXcgRnJhbWVWaWV3KHByaXYtPmNv
cmVGcmFtZS5nZXQoKSk7Ci0gICAgZnJhbWVWaWV3LT5zZXRDb250YWluaW5nV2luZG93KEdUS19D
T05UQUlORVIod2ViVmlldykpOworICAgIGZyYW1lVmlldy0+c2V0Q29udGFpbmluZ1dpbmRvdyhH
VEtfV0lER0VUKHdlYlZpZXcpKTsKICAgICBmcmFtZVZpZXctPnNldEd0a0FkanVzdG1lbnRzKEdU
S19BREpVU1RNRU5UKGd0a19hZGp1c3RtZW50X25ldygwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwg
MC4wKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfQURKVVNUTUVOVChn
dGtfYWRqdXN0bWVudF9uZXcoMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCkpKTsKICAgICBw
cml2LT5jb3JlRnJhbWUtPnNldFZpZXcoZnJhbWVWaWV3KTsKQEAgLTI0MSw3ICsyNDEsNyBAQCBX
ZWJLaXRXZWJGcmFtZSogd2Via2l0X3dlYl9mcmFtZV9pbml0X3dpCiAgICAgcHJpdi0+Y29yZUZy
YW1lID0gbmV3IEZyYW1lKHZpZXdQcml2LT5jb3JlUGFnZSwgZWxlbWVudCwgcHJpdi0+Y2xpZW50
KTsKIAogICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbmV3IEZyYW1lVmlldyhwcml2LT5jb3Jl
RnJhbWUuZ2V0KCkpOwotICAgIGZyYW1lVmlldy0+c2V0Q29udGFpbmluZ1dpbmRvdyhHVEtfQ09O
VEFJTkVSKHdlYlZpZXcpKTsKKyAgICBmcmFtZVZpZXctPnNldENvbnRhaW5pbmdXaW5kb3coR1RL
X1dJREdFVCh3ZWJWaWV3KSk7CiAgICAgcHJpdi0+Y29yZUZyYW1lLT5zZXRWaWV3KGZyYW1lVmll
dyk7CiAgICAgZnJhbWVWaWV3LT5kZXJlZigpOwogICAgIHByaXYtPmNvcmVGcmFtZS0+aW5pdCgp
OwpJbmRleDogV2ViS2l0L3d4L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd3gvQ2hh
bmdlTG9nCShyZXZpc2lvbiAzMDk5MykKKysrIFdlYktpdC93eC9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAwOC0wMy0xMiAgUm9kbmV5IERhd2VzICA8ZG9iZXlA
d2F5b2Z0aGVtb25rZXkuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEh
KQorCisgICAgICAgIFVwZGF0ZSBjb2RlIGZvciByZW5hbWUgb2YgbmF0aXZlV2luZG93KCkgdG8g
bmF0aXZlV2lkZ2V0KCkuCisKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0VkaXRvckNsaWVudFd4
LmNwcDoKKyAgICAgICAgKEVkaXRvckNsaWVudFd4Ojppc0VkaXRhYmxlKToKKyAgICAgICAgKiBX
ZWJLaXRTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V3guY3BwOgorCiAyMDA4LTAzLTAzICBLZXZp
biBPbGxpdmllciAgPGtldmlub0B0aGVvbGxpdmllcnMuY29tPgogCiAgICAgICAgIHd4IGJ1aWxk
IGZpeCBhZnRlciBGcmFtZTo6c2V0Wm9vbUZhY3RvciBBUEkgY2hhbmdlLgpJbmRleDogV2ViS2l0
L3d4L1dlYktpdFN1cHBvcnQvRWRpdG9yQ2xpZW50V3guY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC93eC9XZWJLaXRTdXBwb3J0L0VkaXRvckNsaWVudFd4LmNwcAkocmV2aXNpb24gMzA5OTMpCisr
KyBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9FZGl0b3JDbGllbnRXeC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExNyw3ICsxMTcsNyBAQCBib29sIEVkaXRvckNsaWVudFd4Ojppc0VkaXRhYmxlKCkK
ICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JN
YWluRnJhbWUoKTsKIAogICAgIGlmIChmcmFtZSkgewotICAgICAgICB3eFdlYlZpZXcqIHdlYktp
dFdpbiA9IGR5bmFtaWNfY2FzdDx3eFdlYlZpZXcqPihmcmFtZS0+dmlldygpLT5uYXRpdmVXaW5k
b3coKSk7CisgICAgICAgIHd4V2ViVmlldyogd2ViS2l0V2luID0gZHluYW1pY19jYXN0PHd4V2Vi
Vmlldyo+KGZyYW1lLT52aWV3KCktPm5hdGl2ZVdpZGdldCgpKTsKICAgICAgICAgaWYgKHdlYktp
dFdpbikgCiAgICAgICAgICAgICByZXR1cm4gd2ViS2l0V2luLT5Jc0VkaXRhYmxlKCk7CiAgICAg
fQpJbmRleDogV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXeC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRX
eC5jcHAJKHJldmlzaW9uIDMwOTkzKQorKysgV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvRnJhbWVM
b2FkZXJDbGllbnRXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0OSw3ICsyNDksNyBAQCB2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50V3g6OmxvYWRlZEZyb21DYWNoCiAKIHZvaWQgRnJhbWVMb2FkZXJD
bGllbnRXeDo6ZGlzcGF0Y2hEaWRIYW5kbGVPbmxvYWRFdmVudHMoKQogewotICAgIHd4V2luZG93
KiB0YXJnZXQgPSBtX2ZyYW1lLT52aWV3KCktPm5hdGl2ZVdpbmRvdygpOworICAgIHd4V2luZG93
KiB0YXJnZXQgPSBtX2ZyYW1lLT52aWV3KCktPm5hdGl2ZVdpZGdldCgpOwogICAgIGlmICh0YXJn
ZXQpIHsKICAgICAgICAgd3hXZWJWaWV3TG9hZEV2ZW50IHdrRXZlbnQodGFyZ2V0KTsKICAgICAg
ICAgd2tFdmVudC5TZXRTdGF0ZSh3eFdFQlZJRVdfTE9BRF9PTkxPQURfSEFORExFRCk7CkBAIC0y
OTMsNyArMjkzLDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFd4OjpkaXNwYXRjaFdpbGxDbAog
CiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50V3g6OmRpc3BhdGNoRGlkU3RhcnRQcm92aXNpb25hbExv
YWQoKQogewotICAgIHd4V2luZG93KiB0YXJnZXQgPSBtX2ZyYW1lLT52aWV3KCktPm5hdGl2ZVdp
bmRvdygpOworICAgIHd4V2luZG93KiB0YXJnZXQgPSBtX2ZyYW1lLT52aWV3KCktPm5hdGl2ZVdp
ZGdldCgpOwogICAgIGlmICh0YXJnZXQpIHsKICAgICAgICAgd3hXZWJWaWV3TG9hZEV2ZW50IHdr
RXZlbnQodGFyZ2V0KTsKICAgICAgICAgd2tFdmVudC5TZXRTdGF0ZSh3eFdFQlZJRVdfTE9BRF9O
RUdPVElBVElORyk7CkBAIC0zMDUsNyArMzA1LDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFd4
OjpkaXNwYXRjaERpZFN0YQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50V3g6OmRpc3BhdGNoRGlk
UmVjZWl2ZVRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7Ci0gICAgd3hXZWJWaWV3KiB0YXJn
ZXQgPSBzdGF0aWNfY2FzdDx3eFdlYlZpZXcqPihtX2ZyYW1lLT52aWV3KCktPm5hdGl2ZVdpbmRv
dygpKTsKKyAgICB3eFdlYlZpZXcqIHRhcmdldCA9IHN0YXRpY19jYXN0PHd4V2ViVmlldyo+KG1f
ZnJhbWUtPnZpZXcoKS0+bmF0aXZlV2lkZ2V0KCkpOwogICAgIGlmICh0YXJnZXQpCiAgICAgICAg
IHRhcmdldC0+U2V0UGFnZVRpdGxlKHRpdGxlKTsKIH0KQEAgLTMxMyw3ICszMTMsNyBAQCB2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50V3g6OmRpc3BhdGNoRGlkUmVjCiAKIHZvaWQgRnJhbWVMb2FkZXJD
bGllbnRXeDo6ZGlzcGF0Y2hEaWRDb21taXRMb2FkKCkKIHsKLSAgICB3eFdpbmRvdyogdGFyZ2V0
ID0gbV9mcmFtZS0+dmlldygpLT5uYXRpdmVXaW5kb3coKTsKKyAgICB3eFdpbmRvdyogdGFyZ2V0
ID0gbV9mcmFtZS0+dmlldygpLT5uYXRpdmVXaWRnZXQoKTsKICAgICBpZiAodGFyZ2V0KSB7CiAg
ICAgICAgIHd4V2ViVmlld0xvYWRFdmVudCB3a0V2ZW50KHRhcmdldCk7CiAgICAgICAgIHdrRXZl
bnQuU2V0U3RhdGUod3hXRUJWSUVXX0xPQURfVFJBTlNGRVJSSU5HKTsKQEAgLTMyNCw3ICszMjQs
NyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50V3g6OmRpc3BhdGNoRGlkQ29tCiAKIHZvaWQgRnJh
bWVMb2FkZXJDbGllbnRXeDo6ZGlzcGF0Y2hEaWRGaW5pc2hEb2N1bWVudExvYWQoKQogewotICAg
IHd4V2luZG93KiB0YXJnZXQgPSBtX2ZyYW1lLT52aWV3KCktPm5hdGl2ZVdpbmRvdygpOworICAg
IHd4V2luZG93KiB0YXJnZXQgPSBtX2ZyYW1lLT52aWV3KCktPm5hdGl2ZVdpZGdldCgpOwogICAg
IGlmICh0YXJnZXQpIHsKICAgICAgICAgd3hXZWJWaWV3TG9hZEV2ZW50IHdrRXZlbnQodGFyZ2V0
KTsKICAgICAgICAgd2tFdmVudC5TZXRTdGF0ZSh3eFdFQlZJRVdfTE9BRF9ET0NfQ09NUExFVEVE
KTsKQEAgLTM5Niw3ICszOTYsNyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50V3g6OnBvc3RQcm9n
cmVzc0VzCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRXeDo6cG9zdFByb2dyZXNzRmluaXNoZWRO
b3RpZmljYXRpb24oKQogewotICAgIHd4V2luZG93KiB0YXJnZXQgPSBtX2ZyYW1lLT52aWV3KCkt
Pm5hdGl2ZVdpbmRvdygpOworICAgIHd4V2luZG93KiB0YXJnZXQgPSBtX2ZyYW1lLT52aWV3KCkt
Pm5hdGl2ZVdpZGdldCgpOwogICAgIGlmICh0YXJnZXQpIHsKICAgICAgICAgd3hXZWJWaWV3TG9h
ZEV2ZW50IHdrRXZlbnQodGFyZ2V0KTsKICAgICAgICAgd2tFdmVudC5TZXRTdGF0ZSh3eFdFQlZJ
RVdfTE9BRF9ETF9DT01QTEVURUQpOwpAQCAtNzU2LDcgKzc1Niw3IEBAIHZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRXeDo6ZGlzcGF0Y2hEZWNpZGUKICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJl
dHVybjsKICAgICAgICAgCi0gICAgd3hXaW5kb3cqIHRhcmdldCA9IG1fZnJhbWUtPnZpZXcoKS0+
bmF0aXZlV2luZG93KCk7CisgICAgd3hXaW5kb3cqIHRhcmdldCA9IG1fZnJhbWUtPnZpZXcoKS0+
bmF0aXZlV2lkZ2V0KCk7CiAgICAgaWYgKHRhcmdldCkgewogICAgICAgICB3eFdlYlZpZXdCZWZv
cmVMb2FkRXZlbnQgd2tFdmVudCh0YXJnZXQpOwogICAgICAgICB3a0V2ZW50LlNldE5hdmlnYXRp
b25UeXBlKHd4TmF2VHlwZUZyb21XZWJOYXZUeXBlKGFjdGlvbi50eXBlKCkpKTsKQEAgLTgwNSw3
ICs4MDUsNyBAQCBQYXNzUmVmUHRyPEZyYW1lPiBGcmFtZUxvYWRlckNsaWVudFd4OjpjCiAqLwog
CiAvKgotICAgIHd4V2luZG93KiBwYXJlbnQgPSBtX2ZyYW1lLT52aWV3KCktPm5hdGl2ZVdpbmRv
dygpOworICAgIHd4V2luZG93KiBwYXJlbnQgPSBtX2ZyYW1lLT52aWV3KCktPm5hdGl2ZVdpZGdl
dCgpOwogCiAgICAgV2ViVmlld0ZyYW1lRGF0YSogZGF0YSA9IG5ldyBXZWJWaWV3RnJhbWVEYXRh
KCk7CiAgICAgZGF0YS0+bmFtZSA9IG5hbWU7Cg==
</data>
<flag name="review"
          id="8641"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>