<?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>159259</bug_id>
          
          <creation_ts>2016-06-29 05:07:27 -0700</creation_ts>
          <short_desc>Duplicated code in DrawingAreaImpl and CoordinatedDrawingArea</short_desc>
          <delta_ts>2016-07-06 04:32:55 -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>WebKit2</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>159212</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>yoon</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1206358</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-06-29 05:07:27 -0700</bug_when>
    <thetext>It seems that CoordinatedDrawingArea is just a copy paste of DrawingAreaImpl with non-accelerated code path removed. There&apos;s actually nothing (or very little) specific to coordinated graphics in the CoordinatedDrawingArea implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1206359</commentid>
    <comment_count>1</comment_count>
      <attachid>282340</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-06-29 05:10:40 -0700</bug_when>
    <thetext>Created attachment 282340
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1206576</commentid>
    <comment_count>2</comment_count>
      <attachid>282340</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2016-06-29 17:48:24 -0700</bug_when>
    <thetext>Comment on attachment 282340
Patch

If you could get rid of DrawingAreaImpl, that would be great. I sent out an e-mail telling people that I&apos;d like to get rid of it a while back.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1206657</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-06-29 23:32:27 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 282340 [details]
&gt; Patch
&gt; 
&gt; If you could get rid of DrawingAreaImpl, that would be great. I sent out an
&gt; e-mail telling people that I&apos;d like to get rid of it a while back.

Not yet. The GTK+ port still enters/leaves AC mode when required, so we still need the non accelerated code path. We plan to switch to using the threaded compositor, which forces AC mode, but it&apos;s not really ready yet. Good thing is that after this patch, once we switch to threaded compositor, we can just remove DrawingAreaImpl and use AcceleratedDrawginArea. In the meantime, since Impl is only used by the GTK+ port, I can rename it to DrawingAreaGtk and move it to WebPage/gtk dir.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1207759</commentid>
    <comment_count>4</comment_count>
      <attachid>282750</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-07-04 23:58:40 -0700</bug_when>
    <thetext>Created attachment 282750
Updated patch

This should apply now</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1208130</commentid>
    <comment_count>5</comment_count>
      <attachid>282750</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2016-07-06 02:00:51 -0700</bug_when>
    <thetext>Comment on attachment 282750
Updated patch

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

&gt; Source/WebKit2/WebProcess/WebPage/AcceleratedDrawingArea.cpp:91
&gt; +void AcceleratedDrawingArea::scroll(const IntRect&amp; scrollRect, const IntSize&amp; scrollDelta)
&gt; +{
&gt; +    if (!m_isPaintingEnabled)
&gt; +        return;
&gt; +
&gt; +    m_layerTreeHost-&gt;scrollNonCompositedContents(scrollRect);
&gt; +}
&gt; +
&gt; +void AcceleratedDrawingArea::pageBackgroundTransparencyChanged()
&gt; +{
&gt; +    if (m_layerTreeHost)
&gt; +        m_layerTreeHost-&gt;pageBackgroundTransparencyChanged();
&gt; +}

These differences in null-checking m_layerTreeHost are annoying.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1208170</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-07-06 04:32:55 -0700</bug_when>
    <thetext>Committed r202855: &lt;http://trac.webkit.org/changeset/202855&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>282340</attachid>
            <date>2016-06-29 05:10:40 -0700</date>
            <delta_ts>2016-07-04 23:58:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-accelerated-drawing-area.diff</filename>
            <type>text/plain</type>
            <size>66737</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA2ODM2ZjJlLi4xNzVlZmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzUg
QEAKKzIwMTYtMDYtMjkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIER1cGxpY2F0ZWQgY29kZSBpbiBEcmF3aW5nQXJlYUltcGwgYW5kIENvb3Jk
aW5hdGVkRHJhd2luZ0FyZWEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1OTI1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEl0IHNlZW1zIHRoYXQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYSBpcyBqdXN0IGEg
Y29weSBwYXN0ZSBvZiBEcmF3aW5nQXJlYUltcGwgd2l0aCBub24tYWNjZWxlcmF0ZWQgY29kZSBw
YXRoCisgICAgICAgIHJlbW92ZWQuIFRoZXJlJ3MgYWN0dWFsbHkgbm90aGluZyAob3IgdmVyeSBs
aXR0bGUpIHNwZWNpZmljIHRvIGNvb3JkaW5hdGVkIGdyYXBoaWNzIGluIHRoZQorICAgICAgICBD
b29yZGluYXRlZERyYXdpbmdBcmVhIGltcGxlbWVudGF0aW9uLiBUaGlzIHBhdGNoIHJlbmFtZXMg
Q29vcmRpbmF0ZWREcmF3aW5nQXJlYSBhcyBBY2NlbGVyYXRlZERyYXdpbmdBcmVhIGFuZAorICAg
ICAgICBtYWtlcyBEcmF3aW5nQXJlYUltcGwgaW5oZXJpdCBmcm9tIGl0LCBzbyB0aGF0IGluIGNh
c2Ugb2YgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgdGhlIHBhcmVudCBjbGFzcyBpcyB1c2VkLCBh
bmQKKyAgICAgICAgRHJhd2luZ0FyZWFJbXBsIG9ubHkgYWRkcyB0aGUgbm9uIGFjY2VsZXJhdGVk
IGNvZGUgcGF0aC4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFBs
YXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRl
ZERyYXdpbmdBcmVhLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkRHJhd2luZ0FyZWEuY3BwLgor
ICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjp+QWNjZWxlcmF0ZWREcmF3
aW5nQXJlYSk6CisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OkFjY2Vs
ZXJhdGVkRHJhd2luZ0FyZWEpOgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZERyYXdpbmdB
cmVhOjpzZXROZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZERyYXdp
bmdBcmVhOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QpOgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVy
YXRlZERyYXdpbmdBcmVhOjpzY3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZERy
YXdpbmdBcmVhOjpwYWdlQmFja2dyb3VuZFRyYW5zcGFyZW5jeUNoYW5nZWQpOgorICAgICAgICAo
V2ViS2l0OjpBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpzZXRMYXllclRyZWVTdGF0ZUlzRnJvemVu
KToKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6Zm9yY2VSZXBhaW50
KToKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6Zm9yY2VSZXBhaW50
QXN5bmMpOgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpzZXRQYWlu
dGluZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjp1
cGRhdGVQcmVmZXJlbmNlcyk6CisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0Fy
ZWE6Om1haW5GcmFtZUNvbnRlbnRTaXplQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OkFjY2Vs
ZXJhdGVkRHJhd2luZ0FyZWE6OmxheWVySG9zdERpZEZsdXNoTGF5ZXJzKToKKyAgICAgICAgKFdl
YktpdDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6Z3JhcGhpY3NMYXllckZhY3RvcnkpOgorICAg
ICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpzZXRSb290Q29tcG9zaXRpbmdM
YXllcik6CisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OnNjaGVkdWxl
Q29tcG9zaXRpbmdMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3
aW5nQXJlYTo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2hJbW1lZGlhdGVseSk6CisgICAg
ICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OnVwZGF0ZUJhY2tpbmdTdG9yZVN0
YXRlKToKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6c2VuZERpZFVw
ZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3
aW5nQXJlYTo6c3VzcGVuZFBhaW50aW5nKToKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWRE
cmF3aW5nQXJlYTo6cmVzdW1lUGFpbnRpbmcpOgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRl
ZERyYXdpbmdBcmVhOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKToKKyAgICAgICAg
KFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlU29vbik6CisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OmRp
ZFJlY2VpdmVDb29yZGluYXRlZExheWVyVHJlZUhvc3RNZXNzYWdlKToKKyAgICAgICAgKFdlYktp
dDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6dmlld1N0YXRlRGlkQ2hhbmdlKToKKyAgICAgICAg
KFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6YXR0YWNoVmlld092ZXJsYXlHcmFwaGlj
c0xheWVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5n
QXJlYS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWREcmF3aW5nQXJlYS5oLgorICAgICAgICAoV2Vi
S2l0OjpBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01v
ZGVQZW5kaW5nKToKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZGlk
VXBkYXRlQmFja2luZ1N0b3JlU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZERy
YXdpbmdBcmVhOjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRyYXdp
bmdBcmVhOjpjcmVhdGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJl
YUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYUltcGw6OkRyYXdpbmdBcmVh
SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhSW1wbDo6c2V0TmVlZHNEaXNwbGF5
KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFJbXBsOjpzZXROZWVkc0Rpc3BsYXlJblJl
Y3QpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYUltcGw6OnNjcm9sbCk6CisgICAgICAg
IChXZWJLaXQ6OkRyYXdpbmdBcmVhSW1wbDo6Zm9yY2VSZXBhaW50KToKKyAgICAgICAgKFdlYktp
dDo6RHJhd2luZ0FyZWFJbXBsOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcik6CisgICAgICAgIChX
ZWJLaXQ6OkRyYXdpbmdBcmVhSW1wbDo6dXBkYXRlQmFja2luZ1N0b3JlU3RhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpEcmF3aW5nQXJlYUltcGw6OmRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKToK
KyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFJbXBsOjpzZW5kRGlkVXBkYXRlQmFja2luZ1N0
b3JlU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYUltcGw6OnN1c3BlbmRQYWlu
dGluZyk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhSW1wbDo6ZW50ZXJBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhSW1wbDo6fkRy
YXdpbmdBcmVhSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhSW1w
bDo6bWFpbkZyYW1lQ29udGVudFNpemVDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6RHJhd2luZ0FyZWFJbXBsOjp1cGRhdGVQcmVmZXJlbmNlcyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OkRyYXdpbmdBcmVhSW1wbDo6ZGlkVXBkYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6RHJhd2luZ0FyZWFJbXBsOjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYUltcGw6OnNjaGVkdWxlRGlz
cGxheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhSW1wbDo6ZGlzcGxh
eVRpbWVyRmlyZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYUltcGw6
OmRpc3BsYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpzaG91bGRQYWludEJvdW5kc1Jl
Y3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYUltcGw6OnNldE5hdGl2
ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oOgorCiAyMDE2LTA2LTI4ICBDYXJsb3MgR2Fy
Y2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbQ29vcmRpbmF0ZWQg
R3JhcGhpY3NdIE1vZGVybml6ZSBhbmQgY2xlYW51cCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IGRkNzYzZGQuLjEwODU2YzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtRWZsLmNtYWtlCkBAIC0xOTYsMTEgKzE5NiwxMSBAQCBsaXN0KEFQUEVORCBXZWJLaXQy
X1NPVVJDRVMKIAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvc291cC9XZWJGcmFtZU5l
dHdvcmtpbmdDb250ZXh0LmNwcAogCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVk
RHJhd2luZ0FyZWEuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5j
cHAKIAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0FyZWFBbGxv
Y2F0b3IuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29t
cG9zaXRpbmdDb29yZGluYXRvci5jcHAKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZERyYXdpbmdBcmVhLmNwcAogICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKICAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5jcHAK
ICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJQYWdlQ29vcmRp
bmF0ZWRHcmFwaGljcy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RL
LmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggYTdmNGY3ZS4u
YjNjMmFkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKKysr
IGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTMzOSw2ICszMzksNyBAQCBs
aXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKIAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvc291cC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmNwcAogCisgICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L0RyYXdpbmdBcmVhSW1wbC5jcHAKIAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9hdGsvV2ViUGFn
ZUFjY2Vzc2liaWxpdHlPYmplY3RBdGsuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg4M2I3NAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVh
LmNwcApAQCAtMCwwICsxLDM2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5oIgorCisjaW5j
bHVkZSAiRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29u
dGV4dC5oIgorI2luY2x1ZGUgIlBhZ2VPdmVybGF5Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlNo
YXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKKyNpbmNsdWRlICJXZWJQ
YWdlLmgiCisjaW5jbHVkZSAiV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5oIgorI2luY2x1ZGUg
IldlYlByZWZlcmVuY2VzS2V5cy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTWFpbkZyYW1l
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3Zl
cmxheUNvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworQWNjZWxlcmF0ZWRE
cmF3aW5nQXJlYTo6fkFjY2VsZXJhdGVkRHJhd2luZ0FyZWEoKQoreworICAgIGlmIChtX2xheWVy
VHJlZUhvc3QpCisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+aW52YWxpZGF0ZSgpOworfQorCitB
Y2NlbGVyYXRlZERyYXdpbmdBcmVhOjpBY2NlbGVyYXRlZERyYXdpbmdBcmVhKFdlYlBhZ2UmIHdl
YlBhZ2UsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCisjaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTX01VTFRJUFJPQ0VTUykKKyAgICA6IERyYXdpbmdBcmVh
KERyYXdpbmdBcmVhVHlwZUNvb3JkaW5hdGVkLCB3ZWJQYWdlKQorI2Vsc2UKKyAgICA6IERyYXdp
bmdBcmVhKERyYXdpbmdBcmVhVHlwZUltcGwsIHdlYlBhZ2UpCisjZW5kaWYKKyAgICAsIG1fZXhp
dENvbXBvc2l0aW5nVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmQWNjZWxlcmF0ZWREcmF3
aW5nQXJlYTo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKQoreworICAgIGlmICghbV93
ZWJQYWdlLmlzVmlzaWJsZSgpKQorICAgICAgICBzdXNwZW5kUGFpbnRpbmcoKTsKK30KKwordm9p
ZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpzZXROZWVkc0Rpc3BsYXkoKQoreworICAgIGlmICgh
bV9pc1BhaW50aW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9sYXllclRyZWVI
b3N0LT5zZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheSgpOworfQorCit2b2lkIEFj
Y2VsZXJhdGVkRHJhd2luZ0FyZWE6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBJbnRSZWN0
JiByZWN0KQoreworICAgIGlmICghbV9pc1BhaW50aW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9sYXllclRyZWVIb3N0LT5zZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlz
cGxheUluUmVjdChyZWN0KTsKK30KKwordm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpzY3Jv
bGwoY29uc3QgSW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEp
Cit7CisgICAgaWYgKCFtX2lzUGFpbnRpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2xheWVyVHJlZUhvc3QtPnNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhzY3JvbGxSZWN0
KTsKK30KKwordm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpwYWdlQmFja2dyb3VuZFRyYW5z
cGFyZW5jeUNoYW5nZWQoKQoreworICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCisgICAgICAgIG1f
bGF5ZXJUcmVlSG9zdC0+cGFnZUJhY2tncm91bmRUcmFuc3BhcmVuY3lDaGFuZ2VkKCk7Cit9CisK
K3ZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6c2V0TGF5ZXJUcmVlU3RhdGVJc0Zyb3plbihi
b29sIGlzRnJvemVuKQoreworICAgIGlmIChtX2xheWVyVHJlZVN0YXRlSXNGcm96ZW4gPT0gaXNG
cm96ZW4pCisgICAgICAgIHJldHVybjsKKworICAgIG1fbGF5ZXJUcmVlU3RhdGVJc0Zyb3plbiA9
IGlzRnJvemVuOworCisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgbV9sYXllclRy
ZWVIb3N0LT5zZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoIWlzRnJvemVuKTsKKworICAg
IGlmIChpc0Zyb3plbikKKyAgICAgICAgbV9leGl0Q29tcG9zaXRpbmdUaW1lci5zdG9wKCk7Cisg
ICAgZWxzZSBpZiAobV93YW50c1RvRXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKQorICAg
ICAgICBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVTb29uKCk7Cit9CisKK3ZvaWQgQWNj
ZWxlcmF0ZWREcmF3aW5nQXJlYTo6Zm9yY2VSZXBhaW50KCkKK3sKKyAgICBzZXROZWVkc0Rpc3Bs
YXkoKTsKKworICAgIG1fd2ViUGFnZS5sYXlvdXRJZk5lZWRlZCgpOworCisgICAgLy8gRklYTUU6
IFdlIG5lZWQgdG8gZG8gdGhlIHNhbWUgd29yayBhcyB0aGUgbGF5ZXJIb3N0RGlkRmx1c2hMYXll
cnMgZnVuY3Rpb24gaGVyZSwKKyAgICAvLyBidXQgY2xlYXJseSBpdCBkb2Vzbid0IG1ha2Ugc2Vu
c2UgdG8gY2FsbCB0aGUgZnVuY3Rpb24gd2l0aCB0aGF0IG5hbWUuCisgICAgLy8gQ29uc2lkZXIg
cmVmYWN0b3JpbmcgYW5kIHJlbmFtaW5nIGl0LgorICAgIGlmIChtX2NvbXBvc2l0aW5nQWNjb3Jk
aW5nVG9Qcm94eU1lc3NhZ2VzKQorICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmZvcmNlUmVwYWlu
dCgpOworICAgIGVsc2UgeworICAgICAgICAvLyBDYWxsIHNldFNob3VsZE5vdGlmeUFmdGVyTmV4
dFNjaGVkdWxlZExheWVyRmx1c2goZmFsc2UpIGhlcmUgdG8KKyAgICAgICAgLy8gcHJldmVudCBs
YXllckhvc3REaWRGbHVzaExheWVycygpIGZyb20gYmVpbmcgY2FsbGVkIGEgc2Vjb25kIHRpbWUu
CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1
bGVkTGF5ZXJGbHVzaChmYWxzZSk7CisgICAgICAgIGxheWVySG9zdERpZEZsdXNoTGF5ZXJzKCk7
CisgICAgfQorfQorCitib29sIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OmZvcmNlUmVwYWludEFz
eW5jKHVpbnQ2NF90IGNhbGxiYWNrSUQpCit7CisgICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdCAm
JiBtX2xheWVyVHJlZUhvc3QtPmZvcmNlUmVwYWludEFzeW5jKGNhbGxiYWNrSUQpOworfQorCit2
b2lkIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OnNldFBhaW50aW5nRW5hYmxlZChib29sIHBhaW50
aW5nRW5hYmxlZCkKK3sKKyAgICBtX2lzUGFpbnRpbmdFbmFibGVkID0gcGFpbnRpbmdFbmFibGVk
OworfQorCit2b2lkIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OnVwZGF0ZVByZWZlcmVuY2VzKGNv
bnN0IFdlYlByZWZlcmVuY2VzU3RvcmUmIHN0b3JlKQoreworICAgIG1fd2ViUGFnZS5jb3JlUGFn
ZSgpLT5zZXR0aW5ncygpLnNldEZvcmNlQ29tcG9zaXRpbmdNb2RlKHN0b3JlLmdldEJvb2xWYWx1
ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6Zm9yY2VDb21wb3NpdGluZ01vZGVLZXkoKSkpOwor
ICAgIGlmICghbV9sYXllclRyZWVIb3N0KQorICAgICAgICBlbnRlckFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlKG51bGxwdHIpOworfQorCit2b2lkIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6Om1h
aW5GcmFtZUNvbnRlbnRTaXplQ2hhbmdlZChjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGlm
IChtX3dlYlBhZ2UudXNlRml4ZWRMYXlvdXQoKSkKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5z
aXplRGlkQ2hhbmdlKHNpemUpOworICAgIG1fd2ViUGFnZS5tYWluRnJhbWUoKS0+cGFnZU92ZXJs
YXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlRG9jdW1lbnRTaXplKCk7Cit9CisKK3ZvaWQgQWNjZWxl
cmF0ZWREcmF3aW5nQXJlYTo6bGF5ZXJIb3N0RGlkRmx1c2hMYXllcnMoKQoreworICAgIG1fbGF5
ZXJUcmVlSG9zdC0+Zm9yY2VSZXBhaW50KCk7CisKKyAgICBpZiAobV9zaG91bGRTZW5kRGlkVXBk
YXRlQmFja2luZ1N0b3JlU3RhdGUgJiYgIWV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZVBl
bmRpbmcoKSkgeworICAgICAgICBzZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVCghbV9jb21wb3NpdGluZ0FjY29yZGlu
Z1RvUHJveHlNZXNzYWdlcyk7CisgICAgaWYgKCFleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01v
ZGVQZW5kaW5nKCkpIHsKKyAgICAgICAgbV93ZWJQYWdlLnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdB
cmVhUHJveHk6OkVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobV9iYWNraW5nU3RvcmVT
dGF0ZUlELCBtX2xheWVyVHJlZUhvc3QtPmxheWVyVHJlZUNvbnRleHQoKSkpOworICAgICAgICBt
X2NvbXBvc2l0aW5nQWNjb3JkaW5nVG9Qcm94eU1lc3NhZ2VzID0gdHJ1ZTsKKyAgICB9Cit9CisK
K0dyYXBoaWNzTGF5ZXJGYWN0b3J5KiBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpncmFwaGljc0xh
eWVyRmFjdG9yeSgpCit7CisgICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdCA/IG1fbGF5ZXJUcmVl
SG9zdC0+Z3JhcGhpY3NMYXllckZhY3RvcnkoKSA6IG51bGxwdHI7Cit9CisKK3ZvaWQgQWNjZWxl
cmF0ZWREcmF3aW5nQXJlYTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoR3JhcGhpY3NMYXllciog
Z3JhcGhpY3NMYXllcikKK3sKKyAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiB1c2luZyBuZXN0ZWQg
aWYgc3RhdGVtZW50cywgd2Ugc2hvdWxkIGtlZXAgYSBjb21wb3NpdGluZyBzdGF0ZQorICAgIC8v
IGVudW0gaW4gdGhlIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWEgb2JqZWN0IGFuZCBoYXZlIGEgY2hh
bmdlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ1N0YXRlIGZ1bmN0aW9uCisgICAgLy8gdGhhdCB0YWtl
cyB0aGUgbmV3IHN0YXRlLgorCisgICAgaWYgKGdyYXBoaWNzTGF5ZXIpIHsKKyAgICAgICAgLy8g
V2UncmUgYWxyZWFkeSBpbiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2RlLCBidXQgdGhlIHJv
b3QgY29tcG9zaXRpbmcgbGF5ZXIgY2hhbmdlZC4KKworICAgICAgICBtX2V4aXRDb21wb3NpdGlu
Z1RpbWVyLnN0b3AoKTsKKyAgICAgICAgbV93YW50c1RvRXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlID0gZmFsc2U7CisKKyAgICAgICAgLy8gSWYgd2UgaGF2ZW4ndCBzZW50IHRoZSBFbnRl
ckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlIG1lc3NhZ2UsIG1ha2Ugc3VyZSB0aGF0IHRoZQor
ICAgICAgICAvLyBsYXllciB0cmVlIGhvc3QgY2FsbHMgdXMgYmFjayBhZnRlciB0aGUgbmV4dCBs
YXllciBmbHVzaCBzbyB3ZSBjYW4gc2VuZCBpdCB0aGVuLgorICAgICAgICBpZiAoIW1fY29tcG9z
aXRpbmdBY2NvcmRpbmdUb1Byb3h5TWVzc2FnZXMpCisgICAgICAgICAgICBtX2xheWVyVHJlZUhv
c3QtPnNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2godHJ1ZSk7Cisg
ICAgfQorICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoZ3JhcGhp
Y3NMYXllcik7Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6c2NoZWR1bGVDb21w
b3NpdGluZ0xheWVyRmx1c2goKQoreworICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCisgICAgICAg
IG1fbGF5ZXJUcmVlSG9zdC0+c2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgQWNjZWxl
cmF0ZWREcmF3aW5nQXJlYTo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2hJbW1lZGlhdGVs
eSgpCit7CisgICAgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKK30KKwordm9pZCBB
Y2NlbGVyYXRlZERyYXdpbmdBcmVhOjp1cGRhdGVCYWNraW5nU3RvcmVTdGF0ZSh1aW50NjRfdCBz
dGF0ZUlELCBib29sIHJlc3BvbmRJbW1lZGlhdGVseSwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3Is
IGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIHNjcm9sbE9mZnNldCkKK3sKKyAg
ICBBU1NFUlQoIW1faW5VcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSk7CisgICAgbV9pblVwZGF0ZUJh
Y2tpbmdTdG9yZVN0YXRlID0gdHJ1ZTsKKworICAgIEFTU0VSVF9BUkcoc3RhdGVJRCwgc3RhdGVJ
RCA+PSBtX2JhY2tpbmdTdG9yZVN0YXRlSUQpOworICAgIGlmIChzdGF0ZUlEICE9IG1fYmFja2lu
Z1N0b3JlU3RhdGVJRCkgeworICAgICAgICBtX2JhY2tpbmdTdG9yZVN0YXRlSUQgPSBzdGF0ZUlE
OworICAgICAgICBtX3Nob3VsZFNlbmREaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSA9IHRydWU7
CisKKyAgICAgICAgbV93ZWJQYWdlLnNldERldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFj
dG9yKTsKKyAgICAgICAgbV93ZWJQYWdlLnNldFNpemUoc2l6ZSk7CisgICAgICAgIG1fd2ViUGFn
ZS5sYXlvdXRJZk5lZWRlZCgpOworICAgICAgICBtX3dlYlBhZ2Uuc2Nyb2xsTWFpbkZyYW1lSWZO
b3RBdE1heFNjcm9sbFBvc2l0aW9uKHNjcm9sbE9mZnNldCk7CisKKyNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1NfTVVMVElQUk9DRVNTKQorICAgICAgICAvLyBDb29yZGluYXRlZCBHcmFwaGlj
cyBzZXRzIHRoZSBzaXplIG9mIHRoZSByb290IGxheWVyIHRvIGNvbnRlbnRzIHNpemUuCisgICAg
ICAgIGlmICghbV93ZWJQYWdlLnVzZUZpeGVkTGF5b3V0KCkpCisgICAgICAgICAgICBtX2xheWVy
VHJlZUhvc3QtPnNpemVEaWRDaGFuZ2UobV93ZWJQYWdlLnNpemUoKSk7CisjZWxzZQorICAgICAg
ICBpZiAobV9sYXllclRyZWVIb3N0KQorICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zaXpl
RGlkQ2hhbmdlKG1fd2ViUGFnZS5zaXplKCkpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAg
ICAgQVNTRVJUKHNpemUgPT0gbV93ZWJQYWdlLnNpemUoKSk7CisgICAgICAgIGlmICghbV9zaG91
bGRTZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUpIHsKKyAgICAgICAgICAgIC8vIFdlJ3Zl
IGFscmVhZHkgc2VudCBhIERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIG1lc3NhZ2UgZm9yIHRo
aXMgc3RhdGUuIFdlIGhhdmUgbm90aGluZyBtb3JlIHRvIGRvLgorICAgICAgICAgICAgbV9pblVw
ZGF0ZUJhY2tpbmdTdG9yZVN0YXRlID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBkaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSgpOworCisgICAg
aWYgKHJlc3BvbmRJbW1lZGlhdGVseSkgeworICAgICAgICAvLyBNYWtlIHN1cmUgdG8gcmVzdW1l
IHBhaW50aW5nIGlmIHdlJ3JlIHN1cHBvc2VkIHRvIHJlc3BvbmQgaW1tZWRpYXRlbHksIG90aGVy
d2lzZSB3ZSdsbCBqdXN0CisgICAgICAgIC8vIHNlbmQgYmFjayBhbiBlbXB0eSBVcGRhdGVJbmZv
IHN0cnVjdC4KKyAgICAgICAgaWYgKG1faXNQYWludGluZ1N1c3BlbmRlZCkKKyAgICAgICAgICAg
IHJlc3VtZVBhaW50aW5nKCk7CisKKyAgICAgICAgc2VuZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0
YXRlKCk7CisgICAgfQorCisgICAgbV9pblVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlID0gZmFsc2U7
Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6c2VuZERpZFVwZGF0ZUJhY2tpbmdT
dG9yZVN0YXRlKCkKK3sKKyAgICBBU1NFUlQobV9zaG91bGRTZW5kRGlkVXBkYXRlQmFja2luZ1N0
b3JlU3RhdGUpOworCisgICAgbV9zaG91bGRTZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUg
PSBmYWxzZTsKKworICAgIFVwZGF0ZUluZm8gdXBkYXRlSW5mbzsKKyAgICB1cGRhdGVJbmZvLnZp
ZXdTaXplID0gbV93ZWJQYWdlLnNpemUoKTsKKyAgICB1cGRhdGVJbmZvLmRldmljZVNjYWxlRmFj
dG9yID0gbV93ZWJQYWdlLmNvcmVQYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCk7CisKKyAgICBM
YXllclRyZWVDb250ZXh0IGxheWVyVHJlZUNvbnRleHQ7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9z
dCkgeworICAgICAgICBsYXllclRyZWVDb250ZXh0ID0gbV9sYXllclRyZWVIb3N0LT5sYXllclRy
ZWVDb250ZXh0KCk7CisKKyAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0aGUgbGF5ZXIgdHJlZSBo
b3N0IHRvIG5vdGlmeSBhZnRlciB0aGUgbmV4dCBzY2hlZHVsZWQKKyAgICAgICAgLy8gbGF5ZXIg
Zmx1c2ggYmVjYXVzZSB0aGF0IG1pZ2h0IGVuZCB1cCBzZW5kaW5nIGFuIEVudGVyQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUKKyAgICAgICAgLy8gbWVzc2FnZSBiYWNrIHRvIHRoZSBVSSBwcm9j
ZXNzLCBidXQgdGhlIHVwZGF0ZWQgbGF5ZXIgdHJlZSBjb250ZXh0CisgICAgICAgIC8vIHdpbGwg
YmUgc2VudCBiYWNrIGluIHRoZSBEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSBtZXNzYWdlLgor
ICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxl
ZExheWVyRmx1c2goZmFsc2UpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmZvcmNlUmVwYWlu
dCgpOworICAgIH0KKworICAgIG1fd2ViUGFnZS5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVBy
b3h5OjpEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZShtX2JhY2tpbmdTdG9yZVN0YXRlSUQsIHVw
ZGF0ZUluZm8sIGxheWVyVHJlZUNvbnRleHQpKTsKKyAgICBtX2NvbXBvc2l0aW5nQWNjb3JkaW5n
VG9Qcm94eU1lc3NhZ2VzID0gIWxheWVyVHJlZUNvbnRleHQuaXNFbXB0eSgpOworfQorCit2b2lk
IEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OnN1c3BlbmRQYWludGluZygpCit7CisgICAgQVNTRVJU
KCFtX2lzUGFpbnRpbmdTdXNwZW5kZWQpOworCisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKKyAg
ICAgICAgbV9sYXllclRyZWVIb3N0LT5wYXVzZVJlbmRlcmluZygpOworCisgICAgbV9pc1BhaW50
aW5nU3VzcGVuZGVkID0gdHJ1ZTsKKworICAgIG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5zdXNwZW5k
U2NyaXB0ZWRBbmltYXRpb25zKCk7Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6
cmVzdW1lUGFpbnRpbmcoKQoreworICAgIGlmICghbV9pc1BhaW50aW5nU3VzcGVuZGVkKSB7Cisg
ICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZ2V0IGEgY2FsbCB0byByZXN1bWVQYWludGluZyB3aGVu
IHBhaW50aW5nIGlzIG5vdCBzdXNwZW5kZWQuCisgICAgICAgIC8vIFRoaXMgaGFwcGVucyB3aGVu
IHNlbmRpbmcgYSBzeW5jaHJvbm91cyBtZXNzYWdlIHRvIGNyZWF0ZSBhIG5ldyBwYWdlLiBTZWUg
PHJkYXI6Ly9wcm9ibGVtLzg5NzY1MzE+LgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKG1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5yZXN1bWVSZW5k
ZXJpbmcoKTsKKworICAgIG1faXNQYWludGluZ1N1c3BlbmRlZCA9IGZhbHNlOworCisgICAgLy8g
RklYTUU6IFdlIHNob3VsZG4ndCBhbHdheXMgcmVwYWludCBldmVyeXRoaW5nIGhlcmUuCisgICAg
c2V0TmVlZHNEaXNwbGF5KCk7CisKKyAgICBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+cmVzdW1lU2Ny
aXB0ZWRBbmltYXRpb25zKCk7Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZW50
ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVy
KQoreworICAgIG1fZXhpdENvbXBvc2l0aW5nVGltZXIuc3RvcCgpOworICAgIG1fd2FudHNUb0V4
aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSA9IGZhbHNlOworCisgICAgbV93ZWJQYWdlLnNl
bmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhUHJveHk6OldpbGxFbnRlckFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlKG1fYmFja2luZ1N0b3JlU3RhdGVJRCkpOworCisgICAgQVNTRVJUKCFtX2xheWVy
VHJlZUhvc3QpOworICAgIG1fbGF5ZXJUcmVlSG9zdCA9IExheWVyVHJlZUhvc3Q6OmNyZWF0ZSht
X3dlYlBhZ2UpOworICAgIGlmICghbV9pblVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKQorICAgICAg
ICBtX2xheWVyVHJlZUhvc3QtPnNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVy
Rmx1c2godHJ1ZSk7CisgICAgaWYgKG1faXNQYWludGluZ1N1c3BlbmRlZCkKKyAgICAgICAgbV9s
YXllclRyZWVIb3N0LT5wYXVzZVJlbmRlcmluZygpOworCisgICAgbV9sYXllclRyZWVIb3N0LT5z
ZXRSb290Q29tcG9zaXRpbmdMYXllcihncmFwaGljc0xheWVyKTsKK30KKwordm9pZCBBY2NlbGVy
YXRlZERyYXdpbmdBcmVhOjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVTb29uKCkKK3sK
KyAgICBpZiAobV9sYXllclRyZWVTdGF0ZUlzRnJvemVuKSB7CisgICAgICAgIG1fd2FudHNUb0V4
aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlUGVuZGluZygpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2V4aXRDb21wb3NpdGluZ1RpbWVyLnN0YXJ0T25lU2hv
dCgwKTsKK30KKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19NVUxUSVBST0NFU1MpCit2
b2lkIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OmRpZFJlY2VpdmVDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpNZXNzYWdlRGVj
b2RlciYgZGVjb2RlcikKK3sKKyAgICBtX2xheWVyVHJlZUhvc3QtPmRpZFJlY2VpdmVDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOworfQorI2VuZGlm
CisKK3ZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6dmlld1N0YXRlRGlkQ2hhbmdlKFZpZXdT
dGF0ZTo6RmxhZ3MgY2hhbmdlZCwgYm9vbCwgY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYpCit7Cisg
ICAgaWYgKGNoYW5nZWQgJiBWaWV3U3RhdGU6OklzVmlzaWJsZSkgeworICAgICAgICBpZiAobV93
ZWJQYWdlLmlzVmlzaWJsZSgpKQorICAgICAgICAgICAgcmVzdW1lUGFpbnRpbmcoKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgc3VzcGVuZFBhaW50aW5nKCk7CisgICAgfQorfQorCit2b2lk
IEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OmF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihG
cmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIHZpZXdPdmVybGF5Um9vdExheWVyKQoreworICAg
IGlmICghZnJhbWUtPmlzTWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICht
X2xheWVyVHJlZUhvc3QpCisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Vmlld092ZXJsYXlS
b290TGF5ZXIodmlld092ZXJsYXlSb290TGF5ZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVy
YXRlZERyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNj
ZWxlcmF0ZWREcmF3aW5nQXJlYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmFiY2Y0ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5oCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYV9oCisjZGVm
aW5lIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWFfaAorCisjaW5jbHVkZSAiRHJhd2luZ0FyZWEuaCIK
KyNpbmNsdWRlICJMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9SZWdpb24uaD4K
KyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
QWNjZWxlcmF0ZWREcmF3aW5nQXJlYSA6IHB1YmxpYyBEcmF3aW5nQXJlYSB7CitwdWJsaWM6Cisg
ICAgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYShXZWJQYWdlJiwgY29uc3QgV2ViUGFnZUNyZWF0aW9u
UGFyYW1ldGVycyYpOworICAgIHZpcnR1YWwgfkFjY2VsZXJhdGVkRHJhd2luZ0FyZWEoKTsKKwor
cHJvdGVjdGVkOgorICAgIC8vIERyYXdpbmdBcmVhCisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXko
KSBvdmVycmlkZTsKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBzY3JvbGwoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsRGVsdGEpIG92
ZXJyaWRlOworICAgIHZvaWQgcGFnZUJhY2tncm91bmRUcmFuc3BhcmVuY3lDaGFuZ2VkKCkgb3Zl
cnJpZGU7CisgICAgdm9pZCBzZXRMYXllclRyZWVTdGF0ZUlzRnJvemVuKGJvb2wpIG92ZXJyaWRl
OworICAgIGJvb2wgbGF5ZXJUcmVlU3RhdGVJc0Zyb3plbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fbGF5ZXJUcmVlU3RhdGVJc0Zyb3plbjsgfQorICAgIExheWVyVHJlZUhvc3QqIGxheWVy
VHJlZUhvc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2xheWVyVHJlZUhvc3QuZ2V0KCk7
IH0KKyAgICB2b2lkIGZvcmNlUmVwYWludCgpIG92ZXJyaWRlOworICAgIGJvb2wgZm9yY2VSZXBh
aW50QXN5bmModWludDY0X3QgY2FsbGJhY2tJRCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldFBh
aW50aW5nRW5hYmxlZChib29sKSBvdmVycmlkZTsKKyAgICB2b2lkIHVwZGF0ZVByZWZlcmVuY2Vz
KGNvbnN0IFdlYlByZWZlcmVuY2VzU3RvcmUmKSBvdmVycmlkZTsKKyAgICB2b2lkIG1haW5GcmFt
ZUNvbnRlbnRTaXplQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgb3ZlcnJpZGU7CisK
KyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSogZ3JhcGhpY3NMYXllckZhY3Rvcnko
KSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKKyAgICB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXll
ckZsdXNoKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVz
aEltbWVkaWF0ZWx5KCkgb3ZlcnJpZGU7CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Nf
TVVMVElQUk9DRVNTKQorICAgIHZvaWQgZGlkUmVjZWl2ZUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpNZXNzYWdlRGVjb2RlciYpIG92ZXJyaWRl
OworI2VuZGlmCisKKyAgICB2b2lkIHZpZXdTdGF0ZURpZENoYW5nZShXZWJDb3JlOjpWaWV3U3Rh
dGU6OkZsYWdzLCBib29sIC8qIHdhbnRzRGlkVXBkYXRlVmlld1N0YXRlICovLCBjb25zdCBWZWN0
b3I8dWludDY0X3Q+JiAvKiBjYWxsYmFja0lEcyAqLykgb3ZlcnJpZGU7CisgICAgdm9pZCBhdHRh
Y2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpHcmFw
aGljc0xheWVyKikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGxheWVySG9zdERpZEZsdXNoTGF5ZXJz
KCkgb3ZlcnJpZGU7CisKKyAgICAvLyBJUEMgbWVzc2FnZSBoYW5kbGVycy4KKyAgICB2b2lkIHVw
ZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIGJvb2wg
cmVzcG9uZEltbWVkaWF0ZWx5LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCkgb3ZlcnJp
ZGU7CisKKyAgICB2b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZVNvb24oKTsKKyAg
ICBib29sIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZVBlbmRpbmcoKSBjb25zdCB7IHJl
dHVybiBtX2V4aXRDb21wb3NpdGluZ1RpbWVyLmlzQWN0aXZlKCk7IH0KKworICAgIHZpcnR1YWwg
dm9pZCBzdXNwZW5kUGFpbnRpbmcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUGFpbnRpbmco
KTsKKworICAgIHZpcnR1YWwgdm9pZCBzZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUoKSB7IH0KKworICAg
IHZpcnR1YWwgdm9pZCBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlKCkgeyB9CisKKyAgICB1aW50NjRfdCBtX2JhY2tpbmdTdG9yZVN0YXRlSUQgeyAwIH07
CisKKyAgICAvLyBXaGV0aGVyIHBhaW50aW5nIGlzIGVuYWJsZWQuIElmIHBhaW50aW5nIGlzIGRp
c2FibGVkLCBhbnkgY2FsbHMgdG8gc2V0TmVlZHNEaXNwbGF5IGFuZCBzY3JvbGwgYXJlIGlnbm9y
ZWQuCisgICAgYm9vbCBtX2lzUGFpbnRpbmdFbmFibGVkIHsgdHJ1ZSB9OworCisgICAgLy8gV2hl
dGhlciB3ZSdyZSBjdXJyZW50bHkgcHJvY2Vzc2luZyBhbiBVcGRhdGVCYWNraW5nU3RvcmVTdGF0
ZSBtZXNzYWdlLgorICAgIGJvb2wgbV9pblVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIHsgZmFsc2Ug
fTsKKworICAgIC8vIFdoZW4gdHJ1ZSwgd2Ugc2hvdWxkIHNlbmQgYW4gVXBkYXRlQmFja2luZ1N0
b3JlU3RhdGUgbWVzc2FnZSBpbnN0ZWFkIG9mIGFueSBvdGhlciBtZXNzYWdlcworICAgIC8vIHdl
IG5vcm1hbGx5IHNlbmQgdG8gdGhlIFVJIHByb2Nlc3MuCisgICAgYm9vbCBtX3Nob3VsZFNlbmRE
aWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSB7IGZhbHNlIH07CisKKyAgICAvLyBUcnVlIGJldHdl
ZW4gc2VuZGluZyB0aGUgJ2VudGVyIGNvbXBvc2l0aW5nJyBtZXNzYWdlcywgYW5kIHRoZSAnZXhp
dCBjb21wb3NpdGluZycgbWVzc2FnZS4KKyAgICBib29sIG1fY29tcG9zaXRpbmdBY2NvcmRpbmdU
b1Byb3h5TWVzc2FnZXMgeyBmYWxzZSB9OworCisgICAgLy8gV2hlbiB0cnVlLCB3ZSBtYWludGFp
biB0aGUgbGF5ZXIgdHJlZSBpbiBpdHMgY3VycmVudCBzdGF0ZSBieSBub3QgbGVhdmluZyBhY2Nl
bGVyYXRlZCBjb21wb3NpdGluZyBtb2RlCisgICAgLy8gYW5kIG5vdCBzY2hlZHVsaW5nIGxheWVy
IGZsdXNoZXMuCisgICAgYm9vbCBtX2xheWVyVHJlZVN0YXRlSXNGcm96ZW4geyBmYWxzZSB9Owor
CisgICAgLy8gVHJ1ZSB3aGVuIHdlIHdlcmUgYXNrZWQgdG8gZXhpdCBhY2NlbGVyYXRlZCBjb21w
b3NpdGluZyBtb2RlIGJ1dCBjb3VsZG4ndCBiZWNhdXNlIGxheWVyIHRyZWUKKyAgICAvLyBzdGF0
ZSB3YXMgZnJvemVuLgorICAgIGJvb2wgbV93YW50c1RvRXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlIHsgZmFsc2UgfTsKKworICAgIC8vIFdoZXRoZXIgcGFpbnRpbmcgaXMgc3VzcGVuZGVk
LiBXZSdsbCBzdGlsbCBrZWVwIHRyYWNrIG9mIHRoZSBkaXJ0eSByZWdpb24gYnV0IHdlCisgICAg
Ly8gd29uJ3QgcGFpbnQgdW50aWwgcGFpbnRpbmcgaGFzIHJlc3VtZWQgYWdhaW4uCisgICAgYm9v
bCBtX2lzUGFpbnRpbmdTdXNwZW5kZWQgeyBmYWxzZSB9OworCisgICAgUnVuTG9vcDo6VGltZXI8
QWNjZWxlcmF0ZWREcmF3aW5nQXJlYT4gbV9leGl0Q29tcG9zaXRpbmdUaW1lcjsKKworICAgIC8v
IFRoZSBsYXllciB0cmVlIGhvc3QgdGhhdCBoYW5kbGVzIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5n
LgorICAgIFJlZlB0cjxMYXllclRyZWVIb3N0PiBtX2xheWVyVHJlZUhvc3Q7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWFfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWREcmF3aW5nQXJlYS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZERyYXdpbmdBcmVh
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDliNzJlZi4uMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZERyYXdpbmdBcmVhLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM1NSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKLSNpbmNsdWRlICJDb29yZGluYXRlZERyYXdpbmdBcmVh
LmgiCi0KLSNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaCIKLSNpbmNsdWRlICJE
cmF3aW5nQXJlYVByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiUGFnZU92ZXJsYXlDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU2hhcmVhYmxl
Qml0bWFwLmgiCi0jaW5jbHVkZSAiVXBkYXRlSW5mby5oIgotI2luY2x1ZGUgIldlYlBhZ2UuaCIK
LSNpbmNsdWRlICJXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCi0jaW5jbHVkZSAiV2ViUHJl
ZmVyZW5jZXNLZXlzLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgotI2luY2x1ZGUgPFdlYkNv
cmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9NYWluRnJhbWUuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Q29u
dHJvbGxlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1Db29yZGluYXRlZERyYXdpbmdB
cmVhOjp+Q29vcmRpbmF0ZWREcmF3aW5nQXJlYSgpCi17Ci0gICAgbV9sYXllclRyZWVIb3N0LT5p
bnZhbGlkYXRlKCk7Ci19Ci0KLUNvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OkNvb3JkaW5hdGVkRHJh
d2luZ0FyZWEoV2ViUGFnZSYgd2ViUGFnZSwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVy
cyYgcGFyYW1ldGVycykKLSAgICA6IERyYXdpbmdBcmVhKERyYXdpbmdBcmVhVHlwZUNvb3JkaW5h
dGVkLCB3ZWJQYWdlKQotICAgICwgbV9iYWNraW5nU3RvcmVTdGF0ZUlEKDApCi0gICAgLCBtX2lz
UGFpbnRpbmdFbmFibGVkKHRydWUpCi0gICAgLCBtX2luVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUo
ZmFsc2UpCi0gICAgLCBtX3Nob3VsZFNlbmREaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZShmYWxz
ZSkKLSAgICAsIG1fY29tcG9zaXRpbmdBY2NvcmRpbmdUb1Byb3h5TWVzc2FnZXMoZmFsc2UpCi0g
ICAgLCBtX2xheWVyVHJlZVN0YXRlSXNGcm96ZW4oZmFsc2UpCi0gICAgLCBtX3dhbnRzVG9FeGl0
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoZmFsc2UpCi0gICAgLCBtX2lzUGFpbnRpbmdTdXNw
ZW5kZWQoZmFsc2UpCi0gICAgLCBtX2V4aXRDb21wb3NpdGluZ1RpbWVyKFJ1bkxvb3A6Om1haW4o
KSwgdGhpcywgJkNvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZSkKLXsKLSAgICAvLyBBbHdheXMgdXNlIGNvbXBvc2l0aW5nIGluIENvb3JkaW5hdGVk
R3JhcGhpY3MKLSAgICBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKDApOwotCi0gICAg
aWYgKCEocGFyYW1ldGVycy52aWV3U3RhdGUgJiBWaWV3U3RhdGU6OklzVmlzaWJsZSkpCi0gICAg
ICAgIHN1c3BlbmRQYWludGluZygpOwotfQotCi12b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6
OnNldE5lZWRzRGlzcGxheSgpCi17Ci0gICAgaWYgKCFtX2lzUGFpbnRpbmdFbmFibGVkKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2xheWVyVHJlZUhvc3QtPnNldE5vbkNvbXBvc2l0ZWRDb250
ZW50c05lZWREaXNwbGF5KCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6c2V0
TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFtX2lz
UGFpbnRpbmdFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2xheWVyVHJlZUhvc3Qt
PnNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5SW5SZWN0KHJlY3QpOwotfQotCi12
b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OnNjcm9sbChjb25zdCBJbnRSZWN0JiBzY3JvbGxS
ZWN0LCBjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKLXsKLSAgICBpZiAoIW1faXNQYWludGlu
Z0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2Nyb2xs
Tm9uQ29tcG9zaXRlZENvbnRlbnRzKHNjcm9sbFJlY3QpOwotfQotCi12b2lkIENvb3JkaW5hdGVk
RHJhd2luZ0FyZWE6OnBhZ2VCYWNrZ3JvdW5kVHJhbnNwYXJlbmN5Q2hhbmdlZCgpCi17Ci0gICAg
bV9sYXllclRyZWVIb3N0LT5wYWdlQmFja2dyb3VuZFRyYW5zcGFyZW5jeUNoYW5nZWQoKTsKLX0K
LQotdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpzZXRMYXllclRyZWVTdGF0ZUlzRnJvemVu
KGJvb2wgaXNGcm96ZW4pCi17Ci0gICAgaWYgKG1fbGF5ZXJUcmVlU3RhdGVJc0Zyb3plbiA9PSBp
c0Zyb3plbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9sYXllclRyZWVTdGF0ZUlzRnJvemVu
ID0gaXNGcm96ZW47Ci0KLSAgICBtX2xheWVyVHJlZUhvc3QtPnNldExheWVyRmx1c2hTY2hlZHVs
aW5nRW5hYmxlZCghaXNGcm96ZW4pOwotCi0gICAgaWYgKGlzRnJvemVuKQotICAgICAgICBtX2V4
aXRDb21wb3NpdGluZ1RpbWVyLnN0b3AoKTsKLSAgICBlbHNlIGlmIChtX3dhbnRzVG9FeGl0QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpCi0gICAgICAgIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZVNvb24oKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpmb3JjZVJl
cGFpbnQoKQotewotICAgIHNldE5lZWRzRGlzcGxheSgpOwotCi0gICAgbV93ZWJQYWdlLmxheW91
dElmTmVlZGVkKCk7Ci0KLSAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBkbyB0aGUgc2FtZSB3b3Jr
IGFzIHRoZSBsYXllckhvc3REaWRGbHVzaExheWVycyBmdW5jdGlvbiBoZXJlLAotICAgIC8vIGJ1
dCBjbGVhcmx5IGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byBjYWxsIHRoZSBmdW5jdGlvbiB3aXRo
IHRoYXQgbmFtZS4KLSAgICAvLyBDb25zaWRlciByZWZhY3RvcmluZyBhbmQgcmVuYW1pbmcgaXQu
Ci0gICAgaWYgKG1fY29tcG9zaXRpbmdBY2NvcmRpbmdUb1Byb3h5TWVzc2FnZXMpCi0gICAgICAg
IG1fbGF5ZXJUcmVlSG9zdC0+Zm9yY2VSZXBhaW50KCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8v
IENhbGwgc2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChmYWxzZSkg
aGVyZSB0bwotICAgICAgICAvLyBwcmV2ZW50IGxheWVySG9zdERpZEZsdXNoTGF5ZXJzKCkgZnJv
bSBiZWluZyBjYWxsZWQgYSBzZWNvbmQgdGltZS4KLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5z
ZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGZhbHNlKTsKLSAgICAg
ICAgbGF5ZXJIb3N0RGlkRmx1c2hMYXllcnMoKTsKLSAgICB9Ci19Ci0KLWJvb2wgQ29vcmRpbmF0
ZWREcmF3aW5nQXJlYTo6Zm9yY2VSZXBhaW50QXN5bmModWludDY0X3QgY2FsbGJhY2tJRCkKLXsK
LSAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0LT5mb3JjZVJlcGFpbnRBc3luYyhjYWxsYmFja0lE
KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpzZXRQYWludGluZ0VuYWJsZWQo
Ym9vbCBwYWludGluZ0VuYWJsZWQpCi17Ci0gICAgbV9pc1BhaW50aW5nRW5hYmxlZCA9IHBhaW50
aW5nRW5hYmxlZDsKLX0KLQotdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjp1cGRhdGVQcmVm
ZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJiBzdG9yZSkKLXsKLSAgICBtX3dlYlBh
Z2UuY29yZVBhZ2UoKS0+c2V0dGluZ3MoKS5zZXRGb3JjZUNvbXBvc2l0aW5nTW9kZShzdG9yZS5n
ZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OmZvcmNlQ29tcG9zaXRpbmdNb2Rl
S2V5KCkpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjptYWluRnJhbWVDb250
ZW50U2l6ZUNoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAo
bV93ZWJQYWdlLnVzZUZpeGVkTGF5b3V0KCkpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2l6
ZURpZENoYW5nZShzaXplKTsKLSAgICBtX3dlYlBhZ2UubWFpbkZyYW1lKCktPnBhZ2VPdmVybGF5
Q29udHJvbGxlcigpLmRpZENoYW5nZURvY3VtZW50U2l6ZSgpOwotfQotCi12b2lkIENvb3JkaW5h
dGVkRHJhd2luZ0FyZWE6OmxheWVySG9zdERpZEZsdXNoTGF5ZXJzKCkKLXsKLSAgICBtX2xheWVy
VHJlZUhvc3QtPmZvcmNlUmVwYWludCgpOwotCi0gICAgaWYgKG1fc2hvdWxkU2VuZERpZFVwZGF0
ZUJhY2tpbmdTdG9yZVN0YXRlICYmICFleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVQZW5k
aW5nKCkpIHsKLSAgICAgICAgc2VuZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoIW1fY29tcG9zaXRpbmdBY2NvcmRpbmdU
b1Byb3h5TWVzc2FnZXMpOwotICAgIGlmICghZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2Rl
UGVuZGluZygpKSB7Ci0gICAgICAgIG1fd2ViUGFnZS5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJl
YVByb3h5OjpFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKG1fYmFja2luZ1N0b3JlU3Rh
dGVJRCwgbV9sYXllclRyZWVIb3N0LT5sYXllclRyZWVDb250ZXh0KCkpKTsKLSAgICAgICAgbV9j
b21wb3NpdGluZ0FjY29yZGluZ1RvUHJveHlNZXNzYWdlcyA9IHRydWU7Ci0gICAgfQotfQotCi1H
cmFwaGljc0xheWVyRmFjdG9yeSogQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6Z3JhcGhpY3NMYXll
ckZhY3RvcnkoKQotewotICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3QtPmdyYXBoaWNzTGF5ZXJG
YWN0b3J5KCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6c2V0Um9vdENvbXBv
c2l0aW5nTGF5ZXIoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKLXsKLSAgICAvLyBGSVhN
RTogSW5zdGVhZCBvZiB1c2luZyBuZXN0ZWQgaWYgc3RhdGVtZW50cywgd2Ugc2hvdWxkIGtlZXAg
YSBjb21wb3NpdGluZyBzdGF0ZQotICAgIC8vIGVudW0gaW4gdGhlIENvb3JkaW5hdGVkRHJhd2lu
Z0FyZWEgb2JqZWN0IGFuZCBoYXZlIGEgY2hhbmdlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ1N0YXRl
IGZ1bmN0aW9uCi0gICAgLy8gdGhhdCB0YWtlcyB0aGUgbmV3IHN0YXRlLgotCi0gICAgaWYgKGdy
YXBoaWNzTGF5ZXIpIHsKLSAgICAgICAgLy8gV2UncmUgYWxyZWFkeSBpbiBhY2NlbGVyYXRlZCBj
b21wb3NpdGluZyBtb2RlLCBidXQgdGhlIHJvb3QgY29tcG9zaXRpbmcgbGF5ZXIgY2hhbmdlZC4K
LQotICAgICAgICBtX2V4aXRDb21wb3NpdGluZ1RpbWVyLnN0b3AoKTsKLSAgICAgICAgbV93YW50
c1RvRXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlID0gZmFsc2U7Ci0KLSAgICAgICAgLy8g
SWYgd2UgaGF2ZW4ndCBzZW50IHRoZSBFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlIG1l
c3NhZ2UsIG1ha2Ugc3VyZSB0aGF0IHRoZQotICAgICAgICAvLyBsYXllciB0cmVlIGhvc3QgY2Fs
bHMgdXMgYmFjayBhZnRlciB0aGUgbmV4dCBsYXllciBmbHVzaCBzbyB3ZSBjYW4gc2VuZCBpdCB0
aGVuLgotICAgICAgICBpZiAoIW1fY29tcG9zaXRpbmdBY2NvcmRpbmdUb1Byb3h5TWVzc2FnZXMp
Ci0gICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNj
aGVkdWxlZExheWVyRmx1c2godHJ1ZSk7Ci0gICAgfQotICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0
Um9vdENvbXBvc2l0aW5nTGF5ZXIoZ3JhcGhpY3NMYXllcik7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0
ZWREcmF3aW5nQXJlYTo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKQotewotICAgIG1f
bGF5ZXJUcmVlSG9zdC0+c2NoZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0
ZWREcmF3aW5nQXJlYTo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2hJbW1lZGlhdGVseSgp
Ci17Ci0gICAgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKLX0KLQotdm9pZCBDb29y
ZGluYXRlZERyYXdpbmdBcmVhOjp1cGRhdGVCYWNraW5nU3RvcmVTdGF0ZSh1aW50NjRfdCBzdGF0
ZUlELCBib29sIHJlc3BvbmRJbW1lZGlhdGVseSwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9s
bE9mZnNldCkKLXsKLSAgICBBU1NFUlQoIW1faW5VcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSk7Ci0g
ICAgbV9pblVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlID0gdHJ1ZTsKLQotICAgIEFTU0VSVF9BUkco
c3RhdGVJRCwgc3RhdGVJRCA+PSBtX2JhY2tpbmdTdG9yZVN0YXRlSUQpOwotICAgIGlmIChzdGF0
ZUlEICE9IG1fYmFja2luZ1N0b3JlU3RhdGVJRCkgewotICAgICAgICBtX2JhY2tpbmdTdG9yZVN0
YXRlSUQgPSBzdGF0ZUlEOwotICAgICAgICBtX3Nob3VsZFNlbmREaWRVcGRhdGVCYWNraW5nU3Rv
cmVTdGF0ZSA9IHRydWU7Ci0KLSAgICAgICAgbV93ZWJQYWdlLnNldERldmljZVNjYWxlRmFjdG9y
KGRldmljZVNjYWxlRmFjdG9yKTsKLSAgICAgICAgbV93ZWJQYWdlLnNldFNpemUoc2l6ZSk7Ci0g
ICAgICAgIG1fd2ViUGFnZS5sYXlvdXRJZk5lZWRlZCgpOwotICAgICAgICBtX3dlYlBhZ2Uuc2Ny
b2xsTWFpbkZyYW1lSWZOb3RBdE1heFNjcm9sbFBvc2l0aW9uKHNjcm9sbE9mZnNldCk7Ci0KLSAg
ICAgICAgLy8gQ29vcmRpbmF0ZWQgR3JhcGhpY3Mgc2V0cyB0aGUgc2l6ZSBvZiB0aGUgcm9vdCBs
YXllciB0byBjb250ZW50cyBzaXplLgotICAgICAgICBpZiAoIW1fd2ViUGFnZS51c2VGaXhlZExh
eW91dCgpKQotICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zaXplRGlkQ2hhbmdlKG1fd2Vi
UGFnZS5zaXplKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChzaXplID09IG1fd2Vi
UGFnZS5zaXplKCkpOwotICAgICAgICBpZiAoIW1fc2hvdWxkU2VuZERpZFVwZGF0ZUJhY2tpbmdT
dG9yZVN0YXRlKSB7Ci0gICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IHNlbnQgYSBEaWRVcGRh
dGVCYWNraW5nU3RvcmVTdGF0ZSBtZXNzYWdlIGZvciB0aGlzIHN0YXRlLiBXZSBoYXZlIG5vdGhp
bmcgbW9yZSB0byBkby4KLSAgICAgICAgICAgIG1faW5VcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSA9
IGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KHJlc3BvbmRJbW1lZGlhdGVseSkgewotICAgICAgICAvLyBNYWtlIHN1cmUgdG8gcmVzdW1lIHBh
aW50aW5nIGlmIHdlJ3JlIHN1cHBvc2VkIHRvIHJlc3BvbmQgaW1tZWRpYXRlbHksIG90aGVyd2lz
ZSB3ZSdsbCBqdXN0Ci0gICAgICAgIC8vIHNlbmQgYmFjayBhbiBlbXB0eSBVcGRhdGVJbmZvIHN0
cnVjdC4KLSAgICAgICAgaWYgKG1faXNQYWludGluZ1N1c3BlbmRlZCkKLSAgICAgICAgICAgIHJl
c3VtZVBhaW50aW5nKCk7Ci0KLSAgICAgICAgc2VuZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRl
KCk7Ci0gICAgfQotCi0gICAgbV9pblVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlID0gZmFsc2U7Ci19
Ci0KLXZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6c2VuZERpZFVwZGF0ZUJhY2tpbmdTdG9y
ZVN0YXRlKCkKLXsKLSAgICBBU1NFUlQobV9zaG91bGRTZW5kRGlkVXBkYXRlQmFja2luZ1N0b3Jl
U3RhdGUpOwotCi0gICAgbV9zaG91bGRTZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgPSBm
YWxzZTsKLQotICAgIFVwZGF0ZUluZm8gdXBkYXRlSW5mbzsKLQotICAgIExheWVyVHJlZUNvbnRl
eHQgbGF5ZXJUcmVlQ29udGV4dDsKLQotICAgIHVwZGF0ZUluZm8udmlld1NpemUgPSBtX3dlYlBh
Z2Uuc2l6ZSgpOwotICAgIHVwZGF0ZUluZm8uZGV2aWNlU2NhbGVGYWN0b3IgPSBtX3dlYlBhZ2Uu
Y29yZVBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKLQotICAgIGxheWVyVHJlZUNvbnRleHQg
PSBtX2xheWVyVHJlZUhvc3QtPmxheWVyVHJlZUNvbnRleHQoKTsKLQotICAgIC8vIFdlIGRvbid0
IHdhbnQgdGhlIGxheWVyIHRyZWUgaG9zdCB0byBub3RpZnkgYWZ0ZXIgdGhlIG5leHQgc2NoZWR1
bGVkCi0gICAgLy8gbGF5ZXIgZmx1c2ggYmVjYXVzZSB0aGF0IG1pZ2h0IGVuZCB1cCBzZW5kaW5n
IGFuIEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUKLSAgICAvLyBtZXNzYWdlIGJhY2sg
dG8gdGhlIFVJIHByb2Nlc3MsIGJ1dCB0aGUgdXBkYXRlZCBsYXllciB0cmVlIGNvbnRleHQKLSAg
ICAvLyB3aWxsIGJlIHNlbnQgYmFjayBpbiB0aGUgRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUg
bWVzc2FnZS4KLSAgICBtX2xheWVyVHJlZUhvc3QtPnNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNj
aGVkdWxlZExheWVyRmx1c2goZmFsc2UpOwotICAgIG1fbGF5ZXJUcmVlSG9zdC0+Zm9yY2VSZXBh
aW50KCk7Ci0KLSAgICBtX3dlYlBhZ2Uuc2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWFQcm94eTo6
RGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUobV9iYWNraW5nU3RvcmVTdGF0ZUlELCB1cGRhdGVJ
bmZvLCBsYXllclRyZWVDb250ZXh0KSk7Ci0gICAgbV9jb21wb3NpdGluZ0FjY29yZGluZ1RvUHJv
eHlNZXNzYWdlcyA9ICFsYXllclRyZWVDb250ZXh0LmlzRW1wdHkoKTsKLX0KLQotdm9pZCBDb29y
ZGluYXRlZERyYXdpbmdBcmVhOjpzdXNwZW5kUGFpbnRpbmcoKQotewotICAgIEFTU0VSVCghbV9p
c1BhaW50aW5nU3VzcGVuZGVkKTsKLQotICAgIG1fbGF5ZXJUcmVlSG9zdC0+cGF1c2VSZW5kZXJp
bmcoKTsKLQotICAgIG1faXNQYWludGluZ1N1c3BlbmRlZCA9IHRydWU7Ci0KLSAgICBtX3dlYlBh
Z2UuY29yZVBhZ2UoKS0+c3VzcGVuZFNjcmlwdGVkQW5pbWF0aW9ucygpOwotfQotCi12b2lkIENv
b3JkaW5hdGVkRHJhd2luZ0FyZWE6OnJlc3VtZVBhaW50aW5nKCkKLXsKLSAgICBpZiAoIW1faXNQ
YWludGluZ1N1c3BlbmRlZCkgewotICAgICAgICAvLyBGSVhNRTogV2UgY2FuIGdldCBhIGNhbGwg
dG8gcmVzdW1lUGFpbnRpbmcgd2hlbiBwYWludGluZyBpcyBub3Qgc3VzcGVuZGVkLgotICAgICAg
ICAvLyBUaGlzIGhhcHBlbnMgd2hlbiBzZW5kaW5nIGEgc3luY2hyb25vdXMgbWVzc2FnZSB0byBj
cmVhdGUgYSBuZXcgcGFnZS4gU2VlIDxyZGFyOi8vcHJvYmxlbS84OTc2NTMxPi4KLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIG1fbGF5ZXJUcmVlSG9zdC0+cmVzdW1lUmVuZGVyaW5nKCk7
Ci0KLSAgICBtX2lzUGFpbnRpbmdTdXNwZW5kZWQgPSBmYWxzZTsKLQotICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGRuJ3QgYWx3YXlzIHJlcGFpbnQgZXZlcnl0aGluZyBoZXJlLgotICAgIHNldE5lZWRz
RGlzcGxheSgpOwotCi0gICAgbV93ZWJQYWdlLmNvcmVQYWdlKCktPnJlc3VtZVNjcmlwdGVkQW5p
bWF0aW9ucygpOwotfQotCi12b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OmVudGVyQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKLXsKLSAg
ICBtX2V4aXRDb21wb3NpdGluZ1RpbWVyLnN0b3AoKTsKLSAgICBtX3dhbnRzVG9FeGl0QWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUgPSBmYWxzZTsKLQotICAgIG1fbGF5ZXJUcmVlSG9zdCA9IExh
eWVyVHJlZUhvc3Q6OmNyZWF0ZShtX3dlYlBhZ2UpOwotICAgIGlmICghbV9pblVwZGF0ZUJhY2tp
bmdTdG9yZVN0YXRlKQotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFNob3VsZE5vdGlmeUFm
dGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2godHJ1ZSk7Ci0KLSAgICBtX2xheWVyVHJlZUhvc3Qt
PnNldFJvb3RDb21wb3NpdGluZ0xheWVyKGdyYXBoaWNzTGF5ZXIpOwotfQotCi12b2lkIENvb3Jk
aW5hdGVkRHJhd2luZ0FyZWE6OmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZVNvb24oKQot
ewotICAgIGlmIChtX2xheWVyVHJlZVN0YXRlSXNGcm96ZW4pIHsKLSAgICAgICAgbV93YW50c1Rv
RXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmIChleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVQZW5kaW5nKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fZXhpdENvbXBvc2l0aW5nVGltZXIuc3RhcnRPbmVT
aG90KDApOwotfQotCi12b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OmRpZFJlY2VpdmVDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwg
SVBDOjpNZXNzYWdlRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBtX2xheWVyVHJlZUhvc3QtPmRp
ZFJlY2VpdmVDb29yZGluYXRlZExheWVyVHJlZUhvc3RNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29k
ZXIpOwotfQotCi12b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OnZpZXdTdGF0ZURpZENoYW5n
ZShWaWV3U3RhdGU6OkZsYWdzIGNoYW5nZWQsIGJvb2wsIGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4m
KQotewotICAgIGlmIChjaGFuZ2VkICYgVmlld1N0YXRlOjpJc1Zpc2libGUpIHsKLSAgICAgICAg
aWYgKG1fd2ViUGFnZS5pc1Zpc2libGUoKSkKLSAgICAgICAgICAgIHJlc3VtZVBhaW50aW5nKCk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN1c3BlbmRQYWludGluZygpOwotICAgIH0KLX0K
LQotdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjphdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNz
TGF5ZXIoV2ViQ29yZTo6RnJhbWUqIGZyYW1lLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiB2aWV3
T3ZlcmxheVJvb3RMYXllcikKLXsKLSAgICBpZiAoIWZyYW1lLT5pc01haW5GcmFtZSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2xheWVyVHJlZUhvc3QtPnNldFZpZXdPdmVybGF5Um9vdExh
eWVyKHZpZXdPdmVybGF5Um9vdExheWVyKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0j
ZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRE
cmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWREcmF3aW5nQXJlYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBkZDBkNjM4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkRHJhd2luZ0FyZWEuaAor
KysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYV9oCi0jZGVmaW5lIENvb3JkaW5hdGVkRHJh
d2luZ0FyZWFfaAotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotCi0jaW5jbHVkZSAi
RHJhd2luZ0FyZWEuaCIKLSNpbmNsdWRlICJMYXllclRyZWVIb3N0LmgiCi0jaW5jbHVkZSA8V2Vi
Q29yZS9SZWdpb24uaD4KLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotY2xhc3MgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYSA6IHB1YmxpYyBEcmF3aW5nQXJl
YSB7Ci1wdWJsaWM6Ci0gICAgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYShXZWJQYWdlJiwgY29uc3Qg
V2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYpOwotICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVkRHJh
d2luZ0FyZWEoKTsKLQotcHJpdmF0ZToKLSAgICAvLyBEcmF3aW5nQXJlYQotICAgIHZvaWQgc2V0
TmVlZHNEaXNwbGF5KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3Qo
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2Nyb2xsKGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNj
cm9sbERlbHRhKSBvdmVycmlkZTsKLSAgICB2b2lkIHBhZ2VCYWNrZ3JvdW5kVHJhbnNwYXJlbmN5
Q2hhbmdlZCgpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0TGF5ZXJUcmVlU3RhdGVJc0Zyb3plbihi
b29sKSBvdmVycmlkZTsKLSAgICBib29sIGxheWVyVHJlZVN0YXRlSXNGcm96ZW4oKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX2xheWVyVHJlZVN0YXRlSXNGcm96ZW47IH0KLSAgICBMYXllclRy
ZWVIb3N0KiBsYXllclRyZWVIb3N0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9sYXllclRy
ZWVIb3N0LmdldCgpOyB9Ci0gICAgdm9pZCBmb3JjZVJlcGFpbnQoKSBvdmVycmlkZTsKLSAgICBi
b29sIGZvcmNlUmVwYWludEFzeW5jKHVpbnQ2NF90IGNhbGxiYWNrSUQpIG92ZXJyaWRlOwotCi0g
ICAgdm9pZCBzZXRQYWludGluZ0VuYWJsZWQoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1cGRh
dGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBtYWluRnJhbWVDb250ZW50U2l6ZUNoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYp
IG92ZXJyaWRlOwotCi0gICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIGdyYXBoaWNz
TGF5ZXJGYWN0b3J5KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXll
cihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzY2hlZHVsZUNv
bXBvc2l0aW5nTGF5ZXJGbHVzaCgpIG92ZXJyaWRlOwotICAgIHZvaWQgc2NoZWR1bGVDb21wb3Np
dGluZ0xheWVyRmx1c2hJbW1lZGlhdGVseSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkaWRSZWNl
aXZlQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6
Ok1lc3NhZ2VEZWNvZGVyJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHZpZXdTdGF0ZURpZENoYW5n
ZShXZWJDb3JlOjpWaWV3U3RhdGU6OkZsYWdzLCBib29sIC8qIHdhbnRzRGlkVXBkYXRlVmlld1N0
YXRlICovLCBjb25zdCBWZWN0b3I8dWludDY0X3Q+JiAvKiBjYWxsYmFja0lEcyAqLykgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6RnJh
bWUqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGxheWVy
SG9zdERpZEZsdXNoTGF5ZXJzKCkgb3ZlcnJpZGU7Ci0KLSAgICAvLyBJUEMgbWVzc2FnZSBoYW5k
bGVycy4KLSAgICB2b2lkIHVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHVpbnQ2NF90IGJhY2tpbmdT
dG9yZVN0YXRlSUQsIGJvb2wgcmVzcG9uZEltbWVkaWF0ZWx5LCBmbG9hdCBkZXZpY2VTY2FsZUZh
Y3RvciwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNj
cm9sbE9mZnNldCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHN1c3BlbmRQYWludGluZygp
OwotICAgIHZpcnR1YWwgdm9pZCByZXN1bWVQYWludGluZygpOwotCi0gICAgdm9pZCBzZW5kRGlk
VXBkYXRlQmFja2luZ1N0b3JlU3RhdGUoKTsKLQotICAgIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENv
bXBvc2l0aW5nTW9kZShXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7Ci0gICAgdm9pZCBleGl0QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVTb29uKCk7Ci0gICAgYm9vbCBleGl0QWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGVQZW5kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9leGl0Q29tcG9zaXRpbmdU
aW1lci5pc0FjdGl2ZSgpOyB9Ci0gICAgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01v
ZGUoKSB7IH0KLQotICAgIHVpbnQ2NF90IG1fYmFja2luZ1N0b3JlU3RhdGVJRDsKLQotICAgIC8v
IFdoZXRoZXIgcGFpbnRpbmcgaXMgZW5hYmxlZC4gSWYgcGFpbnRpbmcgaXMgZGlzYWJsZWQsIGFu
eSBjYWxscyB0byBzZXROZWVkc0Rpc3BsYXkgYW5kIHNjcm9sbCBhcmUgaWdub3JlZC4KLSAgICBi
b29sIG1faXNQYWludGluZ0VuYWJsZWQ7Ci0KLSAgICAvLyBXaGV0aGVyIHdlJ3JlIGN1cnJlbnRs
eSBwcm9jZXNzaW5nIGFuIFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIG1lc3NhZ2UuCi0gICAgYm9v
bCBtX2luVXBkYXRlQmFja2luZ1N0b3JlU3RhdGU7Ci0KLSAgICAvLyBXaGVuIHRydWUsIHdlIHNo
b3VsZCBzZW5kIGFuIFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIG1lc3NhZ2UgaW5zdGVhZCBvZiBh
bnkgb3RoZXIgbWVzc2FnZXMKLSAgICAvLyB3ZSBub3JtYWxseSBzZW5kIHRvIHRoZSBVSSBwcm9j
ZXNzLgotICAgIGJvb2wgbV9zaG91bGRTZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGU7Ci0K
LSAgICAvLyBUcnVlIGJldHdlZW4gc2VuZGluZyB0aGUgJ2VudGVyIGNvbXBvc2l0aW5nJyBtZXNz
YWdlcywgYW5kIHRoZSAnZXhpdCBjb21wb3NpdGluZycgbWVzc2FnZS4KLSAgICBib29sIG1fY29t
cG9zaXRpbmdBY2NvcmRpbmdUb1Byb3h5TWVzc2FnZXM7Ci0KLSAgICAvLyBXaGVuIHRydWUsIHdl
IG1haW50YWluIHRoZSBsYXllciB0cmVlIGluIGl0cyBjdXJyZW50IHN0YXRlIGJ5IG5vdCBsZWF2
aW5nIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIG1vZGUKLSAgICAvLyBhbmQgbm90IHNjaGVkdWxp
bmcgbGF5ZXIgZmx1c2hlcy4KLSAgICBib29sIG1fbGF5ZXJUcmVlU3RhdGVJc0Zyb3plbjsKLQot
ICAgIC8vIFRydWUgd2hlbiB3ZSB3ZXJlIGFza2VkIHRvIGV4aXQgYWNjZWxlcmF0ZWQgY29tcG9z
aXRpbmcgbW9kZSBidXQgY291bGRuJ3QgYmVjYXVzZSBsYXllciB0cmVlCi0gICAgLy8gc3RhdGUg
d2FzIGZyb3plbi4KLSAgICBib29sIG1fd2FudHNUb0V4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5n
TW9kZTsKLQotICAgIC8vIFdoZXRoZXIgcGFpbnRpbmcgaXMgc3VzcGVuZGVkLiBXZSdsbCBzdGls
bCBrZWVwIHRyYWNrIG9mIHRoZSBkaXJ0eSByZWdpb24gYnV0IHdlCi0gICAgLy8gd29uJ3QgcGFp
bnQgdW50aWwgcGFpbnRpbmcgaGFzIHJlc3VtZWQgYWdhaW4uCi0gICAgYm9vbCBtX2lzUGFpbnRp
bmdTdXNwZW5kZWQ7Ci0KLSAgICBSdW5Mb29wOjpUaW1lcjxDb29yZGluYXRlZERyYXdpbmdBcmVh
PiBtX2V4aXRDb21wb3NpdGluZ1RpbWVyOwotCi0gICAgLy8gVGhlIGxheWVyIHRyZWUgaG9zdCB0
aGF0IGhhbmRsZXMgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcuCi0gICAgUmVmUHRyPExheWVyVHJl
ZUhvc3Q+IG1fbGF5ZXJUcmVlSG9zdDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0j
ZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotCi0jZW5kaWYgLy8gQ29vcmRpbmF0
ZWREcmF3aW5nQXJlYV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvRHJhd2luZ0FyZWEuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0RyYXdpbmdBcmVhLmNwcAppbmRleCBjMTAzZTNmLi41MGIzNzE2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5jcHAKQEAgLTM5LDcgKzM5
LDcgQEAKICNpbmNsdWRlICJUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5oIgogI2Vsc2UK
ICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfTVVMVElQUk9DRVNTKQotI2luY2x1ZGUgIkNv
b3JkaW5hdGVkRHJhd2luZ0FyZWEuaCIKKyNpbmNsdWRlICJBY2NlbGVyYXRlZERyYXdpbmdBcmVh
LmgiCiAjZWxzZQogI2luY2x1ZGUgIkRyYXdpbmdBcmVhSW1wbC5oIgogI2VuZGlmCkBAIC02Miw3
ICs2Miw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxEcmF3aW5nQXJlYT4gRHJhd2luZ0FyZWE6OmNyZWF0
ZShXZWJQYWdlJiB3ZWJQYWdlLCBjb25zdCBXZWJQYWdlCiAjZWxzZQogI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDU19NVUxUSVBST0NFU1MpCiAgICAgY2FzZSBEcmF3aW5nQXJlYVR5cGVDb29y
ZGluYXRlZDoKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q29vcmRpbmF0ZWREcmF3
aW5nQXJlYT4od2ViUGFnZSwgcGFyYW1ldGVycyk7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2Vf
dW5pcXVlPEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE+KHdlYlBhZ2UsIHBhcmFtZXRlcnMpOwogI2Vs
c2UKICAgICBjYXNlIERyYXdpbmdBcmVhVHlwZUltcGw6CiAgICAgICAgIHJldHVybiBzdGQ6Om1h
a2VfdW5pcXVlPERyYXdpbmdBcmVhSW1wbD4od2ViUGFnZSwgcGFyYW1ldGVycyk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3Bw
CmluZGV4IDY3MzMxMDIuLmRmNGY2ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwCkBAIC00NSwzOSArNDUsMTkgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiAKIERyYXdpbmdBcmVhSW1wbDo6fkRyYXdpbmdBcmVhSW1wbCgp
CiB7Ci0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5p
bnZhbGlkYXRlKCk7CiB9CiAKIERyYXdpbmdBcmVhSW1wbDo6RHJhd2luZ0FyZWFJbXBsKFdlYlBh
Z2UmIHdlYlBhZ2UsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMp
Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX01VTFRJUFJPQ0VTUykKLSAgICA6IERyYXdp
bmdBcmVhKERyYXdpbmdBcmVhVHlwZUNvb3JkaW5hdGVkLCB3ZWJQYWdlKQotI2Vsc2UKLSAgICA6
IERyYXdpbmdBcmVhKERyYXdpbmdBcmVhVHlwZUltcGwsIHdlYlBhZ2UpCi0jZW5kaWYKLSAgICAs
IG1fYmFja2luZ1N0b3JlU3RhdGVJRCgwKQotICAgICwgbV9pc1BhaW50aW5nRW5hYmxlZCh0cnVl
KQotICAgICwgbV9pblVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKGZhbHNlKQotICAgICwgbV9zaG91
bGRTZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUoZmFsc2UpCi0gICAgLCBtX2lzV2FpdGlu
Z0ZvckRpZFVwZGF0ZShmYWxzZSkKLSAgICAsIG1fY29tcG9zaXRpbmdBY2NvcmRpbmdUb1Byb3h5
TWVzc2FnZXMoZmFsc2UpCi0gICAgLCBtX2xheWVyVHJlZVN0YXRlSXNGcm96ZW4oZmFsc2UpCi0g
ICAgLCBtX3dhbnRzVG9FeGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoZmFsc2UpCi0gICAg
LCBtX2lzUGFpbnRpbmdTdXNwZW5kZWQoIShwYXJhbWV0ZXJzLnZpZXdTdGF0ZSAmIFZpZXdTdGF0
ZTo6SXNWaXNpYmxlKSkKLSAgICAsIG1fYWx3YXlzVXNlQ29tcG9zaXRpbmcoZmFsc2UpCisgICAg
OiBBY2NlbGVyYXRlZERyYXdpbmdBcmVhKHdlYlBhZ2UsIHBhcmFtZXRlcnMpCiAgICAgLCBtX2Rp
c3BsYXlUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZEcmF3aW5nQXJlYUltcGw6OmRpc3Bs
YXlUaW1lckZpcmVkKQotICAgICwgbV9leGl0Q29tcG9zaXRpbmdUaW1lcihSdW5Mb29wOjptYWlu
KCksIHRoaXMsICZEcmF3aW5nQXJlYUltcGw6OmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9k
ZSkKIHsKIH0KIAogdm9pZCBEcmF3aW5nQXJlYUltcGw6OnNldE5lZWRzRGlzcGxheSgpCiB7Ci0g
ICAgaWYgKCFtX2lzUGFpbnRpbmdFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAo
bV9sYXllclRyZWVIb3N0KSB7CiAgICAgICAgIEFTU0VSVChtX2RpcnR5UmVnaW9uLmlzRW1wdHko
KSk7Ci0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVl
ZERpc3BsYXkoKTsKKyAgICAgICAgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6c2V0TmVlZHNEaXNw
bGF5KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTg2LDE4ICs2NiwxNyBAQCB2b2lk
IERyYXdpbmdBcmVhSW1wbDo6c2V0TmVlZHNEaXNwbGF5KCkKIAogdm9pZCBEcmF3aW5nQXJlYUlt
cGw6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIGlm
ICghbV9pc1BhaW50aW5nRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKG1fbGF5
ZXJUcmVlSG9zdCkgewogICAgICAgICBBU1NFUlQobV9kaXJ0eVJlZ2lvbi5pc0VtcHR5KCkpOwot
ICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNw
bGF5SW5SZWN0KHJlY3QpOworICAgICAgICBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpzZXROZWVk
c0Rpc3BsYXlJblJlY3QocmVjdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKKyAg
ICBpZiAoIW1faXNQYWludGluZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKwogICAgIEludFJl
Y3QgZGlydHlSZWN0ID0gcmVjdDsKICAgICBkaXJ0eVJlY3QuaW50ZXJzZWN0KG1fd2ViUGFnZS5i
b3VuZHMoKSk7Ci0KICAgICBpZiAoZGlydHlSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogCkBAIC0xMDcsMTggKzg2LDE3IEBAIHZvaWQgRHJhd2luZ0FyZWFJbXBsOjpzZXROZWVkc0Rp
c3BsYXlJblJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKIAogdm9pZCBEcmF3aW5nQXJlYUltcGw6
OnNjcm9sbChjb25zdCBJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBJbnRTaXplJiBzY3JvbGxE
ZWx0YSkKIHsKLSAgICBpZiAoIW1faXNQYWludGluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsK
LQogICAgIGlmIChtX2xheWVyVHJlZUhvc3QpIHsKICAgICAgICAgQVNTRVJUKG1fc2Nyb2xsUmVj
dC5pc0VtcHR5KCkpOwogICAgICAgICBBU1NFUlQobV9zY3JvbGxPZmZzZXQuaXNFbXB0eSgpKTsK
ICAgICAgICAgQVNTRVJUKG1fZGlydHlSZWdpb24uaXNFbXB0eSgpKTsKLQotICAgICAgICBtX2xh
eWVyVHJlZUhvc3QtPnNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhzY3JvbGxSZWN0KTsKKyAg
ICAgICAgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6c2Nyb2xsKHNjcm9sbFJlY3QsIHNjcm9sbERl
bHRhKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGlmICghbV9pc1BhaW50aW5nRW5h
YmxlZCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKHNjcm9sbFJlY3QuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAKQEAgLTE1MSw4ICsxMjksOCBAQCB2b2lkIERyYXdpbmdBcmVhSW1w
bDo6c2Nyb2xsKGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IEludFNpemUmIHNjcm9s
bERlbAogCiAgICAgICAgIC8vIEFuZCBhZGQgdGhlbSBiYWNrLgogICAgICAgICBtX2RpcnR5UmVn
aW9uLnVuaXRlKG1vdmVkRGlydHlSZWdpb25JblNjcm9sbFJlY3QpOwotICAgIH0gCi0gICAgCisg
ICAgfQorCiAgICAgLy8gQ29tcHV0ZSB0aGUgc2Nyb2xsIHJlcGFpbnQgcmVnaW9uLgogICAgIFJl
Z2lvbiBzY3JvbGxSZXBhaW50UmVnaW9uID0gc3VidHJhY3Qoc2Nyb2xsUmVjdCwgdHJhbnNsYXRl
KHNjcm9sbFJlY3QsIHNjcm9sbERlbHRhKSk7CiAKQEAgLTE2Myw2OSArMTQxLDI1IEBAIHZvaWQg
RHJhd2luZ0FyZWFJbXBsOjpzY3JvbGwoY29uc3QgSW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3Qg
SW50U2l6ZSYgc2Nyb2xsRGVsCiAgICAgbV9zY3JvbGxPZmZzZXQgKz0gc2Nyb2xsRGVsdGE7CiB9
CiAKLXZvaWQgRHJhd2luZ0FyZWFJbXBsOjpwYWdlQmFja2dyb3VuZFRyYW5zcGFyZW5jeUNoYW5n
ZWQoKQotewotICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9z
dC0+cGFnZUJhY2tncm91bmRUcmFuc3BhcmVuY3lDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgRHJhd2lu
Z0FyZWFJbXBsOjpzZXRMYXllclRyZWVTdGF0ZUlzRnJvemVuKGJvb2wgaXNGcm96ZW4pCi17Ci0g
ICAgaWYgKG1fbGF5ZXJUcmVlU3RhdGVJc0Zyb3plbiA9PSBpc0Zyb3plbikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9sYXllclRyZWVTdGF0ZUlzRnJvemVuID0gaXNGcm96ZW47Ci0KLSAgICBp
ZiAobV9sYXllclRyZWVIb3N0KQotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldExheWVyRmx1
c2hTY2hlZHVsaW5nRW5hYmxlZCghaXNGcm96ZW4pOwotCi0gICAgaWYgKGlzRnJvemVuKQotICAg
ICAgICBtX2V4aXRDb21wb3NpdGluZ1RpbWVyLnN0b3AoKTsKLSAgICBlbHNlIGlmIChtX3dhbnRz
VG9FeGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpCi0gICAgICAgIGV4aXRBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nTW9kZVNvb24oKTsKLX0KLQogdm9pZCBEcmF3aW5nQXJlYUltcGw6OmZvcmNl
UmVwYWludCgpCiB7CiAgICAgaWYgKG1faW5VcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSkgewogICAg
ICAgICBtX2ZvcmNlUmVwYWludEFmdGVyQmFja2luZ1N0b3JlU3RhdGVVcGRhdGUgPSB0cnVlOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotCiAgICAgbV9mb3JjZVJlcGFpbnRBZnRlckJhY2tpbmdT
dG9yZVN0YXRlVXBkYXRlID0gZmFsc2U7Ci0gICAgc2V0TmVlZHNEaXNwbGF5KCk7Ci0KLSAgICBt
X3dlYlBhZ2UubGF5b3V0SWZOZWVkZWQoKTsKIAogICAgIGlmIChtX2xheWVyVHJlZUhvc3QpIHsK
LSAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZG8gdGhlIHNhbWUgd29yayBhcyB0aGUgbGF5
ZXJIb3N0RGlkRmx1c2hMYXllcnMgZnVuY3Rpb24gaGVyZSwKLSAgICAgICAgLy8gYnV0IGNsZWFy
bHkgaXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIGNhbGwgdGhlIGZ1bmN0aW9uIHdpdGggdGhhdCBu
YW1lLgotICAgICAgICAvLyBDb25zaWRlciByZWZhY3RvcmluZyBhbmQgcmVuYW1pbmcgaXQuCi0g
ICAgICAgIGlmIChtX2NvbXBvc2l0aW5nQWNjb3JkaW5nVG9Qcm94eU1lc3NhZ2VzKQotICAgICAg
ICAgICAgbV9sYXllclRyZWVIb3N0LT5mb3JjZVJlcGFpbnQoKTsKLSAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAvLyBDYWxsIHNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVy
Rmx1c2goZmFsc2UpIGhlcmUgdG8gCi0gICAgICAgICAgICAvLyBwcmV2ZW50IGxheWVySG9zdERp
ZEZsdXNoTGF5ZXJzKCkgZnJvbSBiZWluZyBjYWxsZWQgYSBzZWNvbmQgdGltZS4KLSAgICAgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5
ZXJGbHVzaChmYWxzZSk7Ci0gICAgICAgICAgICBsYXllckhvc3REaWRGbHVzaExheWVycygpOwot
ICAgICAgICB9CisgICAgICAgIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OmZvcmNlUmVwYWludCgp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgc2V0TmVlZHNEaXNwbGF5KCk7CisgICAg
bV93ZWJQYWdlLmxheW91dElmTmVlZGVkKCk7CiAgICAgbV9pc1dhaXRpbmdGb3JEaWRVcGRhdGUg
PSBmYWxzZTsKICAgICBkaXNwbGF5KCk7CiB9CiAKLWJvb2wgRHJhd2luZ0FyZWFJbXBsOjpmb3Jj
ZVJlcGFpbnRBc3luYyh1aW50NjRfdCBjYWxsYmFja0lEKQotewotICAgIHJldHVybiBtX2xheWVy
VHJlZUhvc3QgJiYgbV9sYXllclRyZWVIb3N0LT5mb3JjZVJlcGFpbnRBc3luYyhjYWxsYmFja0lE
KTsKLX0KLQotdm9pZCBEcmF3aW5nQXJlYUltcGw6OnNldFBhaW50aW5nRW5hYmxlZChib29sIHBh
aW50aW5nRW5hYmxlZCkKLXsKLSAgICBtX2lzUGFpbnRpbmdFbmFibGVkID0gcGFpbnRpbmdFbmFi
bGVkOwotfQotCiB2b2lkIERyYXdpbmdBcmVhSW1wbDo6bWFpbkZyYW1lQ29udGVudFNpemVDaGFu
Z2VkKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpemUpCiB7CiAjaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTX1RIUkVBREVEKQpAQCAtMjUzLDEzNCArMTg3LDUwIEBAIHZvaWQgRHJhd2lu
Z0FyZWFJbXBsOjp1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJiBz
dG9yZSkKICAgICAgICAgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShudWxscHRyKTsK
IH0KIAotdm9pZCBEcmF3aW5nQXJlYUltcGw6OmxheWVySG9zdERpZEZsdXNoTGF5ZXJzKCkKK3Zv
aWQgRHJhd2luZ0FyZWFJbXBsOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihHcmFwaGljc0xheWVy
KiBncmFwaGljc0xheWVyKQogewotICAgIEFTU0VSVChtX2xheWVyVHJlZUhvc3QpOwotCi0gICAg
bV9sYXllclRyZWVIb3N0LT5mb3JjZVJlcGFpbnQoKTsKLQotICAgIGlmIChtX3Nob3VsZFNlbmRE
aWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSAmJiAhZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdN
b2RlUGVuZGluZygpKSB7Ci0gICAgICAgIHNlbmREaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSgp
OworICAgIGlmIChtX2xheWVyVHJlZUhvc3QpIHsKKyAgICAgICAgQWNjZWxlcmF0ZWREcmF3aW5n
QXJlYTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoZ3JhcGhpY3NMYXllcik7CisKKyAgICAgICAg
aWYgKCFncmFwaGljc0xheWVyICYmICFtX2Fsd2F5c1VzZUNvbXBvc2l0aW5nKSB7CisgICAgICAg
ICAgICAvLyBXZSdsbCBleGl0IGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIG1vZGUgb24gYSB0aW1l
ciwgdG8gYXZvaWQgcmUtZW50ZXJpbmcKKyAgICAgICAgICAgIC8vIGNvbXBvc2l0aW5nIGNvZGUg
dmlhIGRpc3BsYXkoKSBhbmQgbGF5b3V0LgorICAgICAgICAgICAgLy8gSWYgd2UncmUgbGVhdmlu
ZyBjb21wb3NpdGluZyBtb2RlIGJlY2F1c2Ugb2YgYSBzZXRTaXplLCBpdCBpcyBzYWZlIHRvCisg
ICAgICAgICAgICAvLyBleGl0IGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIG1vZGUgcmlnaHQgYXdh
eS4KKyAgICAgICAgICAgIGlmIChtX2luVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUpCisgICAgICAg
ICAgICAgICAgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlU29vbigp
OworICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIW1fbGF5ZXJU
cmVlSG9zdCkKKyAgICBpZiAoIWdyYXBoaWNzTGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAg
IEFTU0VSVCghbV9jb21wb3NpdGluZ0FjY29yZGluZ1RvUHJveHlNZXNzYWdlcyk7Ci0gICAgaWYg
KCFleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVQZW5kaW5nKCkpIHsKLSAgICAgICAgbV93
ZWJQYWdlLnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhUHJveHk6OkVudGVyQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUobV9iYWNraW5nU3RvcmVTdGF0ZUlELCBtX2xheWVyVHJlZUhvc3QtPmxh
eWVyVHJlZUNvbnRleHQoKSkpOwotICAgICAgICBtX2NvbXBvc2l0aW5nQWNjb3JkaW5nVG9Qcm94
eU1lc3NhZ2VzID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLUdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBEcmF3
aW5nQXJlYUltcGw6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkKLXsKLSAgICBpZiAobV9sYXllclRy
ZWVIb3N0KQotICAgICAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0LT5ncmFwaGljc0xheWVyRmFj
dG9yeSgpOwotCi0gICAgcmV0dXJuIDA7CisgICAgLy8gV2UncmUgYWN0dWFsbHkgZW50ZXJpbmcg
YWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgbW9kZS4KKyAgICBlbnRlckFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlKGdyYXBoaWNzTGF5ZXIpOwogfQogCi12b2lkIERyYXdpbmdBcmVhSW1wbDo6c2V0
Um9vdENvbXBvc2l0aW5nTGF5ZXIoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKLXsKLSAg
ICAvLyBGSVhNRTogSW5zdGVhZCBvZiB1c2luZyBuZXN0ZWQgaWYgc3RhdGVtZW50cywgd2Ugc2hv
dWxkIGtlZXAgYSBjb21wb3NpdGluZyBzdGF0ZQotICAgIC8vIGVudW0gaW4gdGhlIERyYXdpbmdB
cmVhSW1wbCBvYmplY3QgYW5kIGhhdmUgYSBjaGFuZ2VBY2NlbGVyYXRlZENvbXBvc2l0aW5nU3Rh
dGUgZnVuY3Rpb24KLSAgICAvLyB0aGF0IHRha2VzIHRoZSBuZXcgc3RhdGUuCi0KLSAgICBpZiAo
Z3JhcGhpY3NMYXllcikgewotICAgICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCkgewotICAgICAg
ICAgICAgLy8gV2UncmUgYWN0dWFsbHkgZW50ZXJpbmcgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcg
bW9kZS4KLSAgICAgICAgICAgIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoZ3JhcGhp
Y3NMYXllcik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSdyZSBhbHJlYWR5
IGluIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIG1vZGUsIGJ1dCB0aGUgcm9vdCBjb21wb3NpdGlu
ZyBsYXllciBjaGFuZ2VkLgotCi0gICAgICAgICAgICBtX2V4aXRDb21wb3NpdGluZ1RpbWVyLnN0
b3AoKTsKLSAgICAgICAgICAgIG1fd2FudHNUb0V4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9k
ZSA9IGZhbHNlOwotCi0gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlbid0IHNlbnQgdGhlIEVudGVy
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUgbWVzc2FnZSwgbWFrZSBzdXJlIHRoYXQgdGhlCi0g
ICAgICAgICAgICAvLyBsYXllciB0cmVlIGhvc3QgY2FsbHMgdXMgYmFjayBhZnRlciB0aGUgbmV4
dCBsYXllciBmbHVzaCBzbyB3ZSBjYW4gc2VuZCBpdCB0aGVuLgotICAgICAgICAgICAgaWYgKCFt
X2NvbXBvc2l0aW5nQWNjb3JkaW5nVG9Qcm94eU1lc3NhZ2VzKQotICAgICAgICAgICAgICAgIG1f
bGF5ZXJUcmVlSG9zdC0+c2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVz
aCh0cnVlKTsKLQotICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRSb290Q29tcG9zaXRp
bmdMYXllcihncmFwaGljc0xheWVyKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmIChtX2xheWVyVHJlZUhvc3QpIHsKLSAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0
Um9vdENvbXBvc2l0aW5nTGF5ZXIoMCk7Ci0gICAgICAgICAgICBpZiAoIW1fYWx3YXlzVXNlQ29t
cG9zaXRpbmcpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSdsbCBleGl0IGFjY2VsZXJhdGVkIGNv
bXBvc2l0aW5nIG1vZGUgb24gYSB0aW1lciwgdG8gYXZvaWQgcmUtZW50ZXJpbmcKLSAgICAgICAg
ICAgICAgICAvLyBjb21wb3NpdGluZyBjb2RlIHZpYSBkaXNwbGF5KCkgYW5kIGxheW91dC4KLSAg
ICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBsZWF2aW5nIGNvbXBvc2l0aW5nIG1vZGUgYmVjYXVz
ZSBvZiBhIHNldFNpemUsIGl0IGlzIHNhZmUgdG8KLSAgICAgICAgICAgICAgICAvLyBleGl0IGFj
Y2VsZXJhdGVkIGNvbXBvc2l0aW5nIG1vZGUgcmlnaHQgYXdheS4KLSAgICAgICAgICAgICAgICBp
ZiAobV9pblVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKQotICAgICAgICAgICAgICAgICAgICBleGl0
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZVNvb24oKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBEcmF3aW5nQXJlYUltcGw6
OnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCkKK3ZvaWQgRHJhd2luZ0FyZWFJbXBsOjp1
cGRhdGVCYWNraW5nU3RvcmVTdGF0ZSh1aW50NjRfdCBzdGF0ZUlELCBib29sIHJlc3BvbmRJbW1l
ZGlhdGVseSwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGNvbnN0IFdlYkNvcmU6OkludFNpemUm
IHNpemUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCkKIHsKLSAgICBpZiAo
IW1fbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fbGF5ZXJUcmVlSG9zdC0+
c2NoZWR1bGVMYXllckZsdXNoKCk7Ci19CisgICAgYm9vbCBzaG91bGRVcGRhdGVEaXJ0eVJlZ2lv
biA9IHN0YXRlSUQgIT0gbV9iYWNraW5nU3RvcmVTdGF0ZUlEICYmICFtX2xheWVyVHJlZUhvc3Q7
CisgICAgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6dXBkYXRlQmFja2luZ1N0b3JlU3RhdGUoc3Rh
dGVJRCwgcmVzcG9uZEltbWVkaWF0ZWx5LCBkZXZpY2VTY2FsZUZhY3Rvciwgc2l6ZSwgc2Nyb2xs
T2Zmc2V0KTsKKyAgICBpZiAoc2hvdWxkVXBkYXRlRGlydHlSZWdpb24pCisgICAgICAgIG1fZGly
dHlSZWdpb24gPSBtX3dlYlBhZ2UuYm91bmRzKCk7CiAKLXZvaWQgRHJhd2luZ0FyZWFJbXBsOjpz
Y2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaEltbWVkaWF0ZWx5KCkKLXsKLSAgICBzY2hlZHVs
ZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpOworICAgIGlmIChtX2ZvcmNlUmVwYWludEFmdGVyQmFj
a2luZ1N0b3JlU3RhdGVVcGRhdGUpCisgICAgICAgIGZvcmNlUmVwYWludCgpOwogfQogCi12b2lk
IERyYXdpbmdBcmVhSW1wbDo6dXBkYXRlQmFja2luZ1N0b3JlU3RhdGUodWludDY0X3Qgc3RhdGVJ
RCwgYm9vbCByZXNwb25kSW1tZWRpYXRlbHksIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBzaXplLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxP
ZmZzZXQpCit2b2lkIERyYXdpbmdBcmVhSW1wbDo6ZGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUo
KQogewotICAgIEFTU0VSVCghbV9pblVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKTsKLSAgICBtX2lu
VXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgPSB0cnVlOwotCi0gICAgQVNTRVJUX0FSRyhzdGF0ZUlE
LCBzdGF0ZUlEID49IG1fYmFja2luZ1N0b3JlU3RhdGVJRCk7Ci0gICAgaWYgKHN0YXRlSUQgIT0g
bV9iYWNraW5nU3RvcmVTdGF0ZUlEKSB7Ci0gICAgICAgIG1fYmFja2luZ1N0b3JlU3RhdGVJRCA9
IHN0YXRlSUQ7Ci0gICAgICAgIG1fc2hvdWxkU2VuZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRl
ID0gdHJ1ZTsKLQotICAgICAgICBtX3dlYlBhZ2Uuc2V0RGV2aWNlU2NhbGVGYWN0b3IoZGV2aWNl
U2NhbGVGYWN0b3IpOwotICAgICAgICBtX3dlYlBhZ2Uuc2V0U2l6ZShzaXplKTsKLSAgICAgICAg
bV93ZWJQYWdlLmxheW91dElmTmVlZGVkKCk7Ci0gICAgICAgIG1fd2ViUGFnZS5zY3JvbGxNYWlu
RnJhbWVJZk5vdEF0TWF4U2Nyb2xsUG9zaXRpb24oc2Nyb2xsT2Zmc2V0KTsKLQotICAgICAgICBp
ZiAobV9sYXllclRyZWVIb3N0KQotICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zaXplRGlk
Q2hhbmdlKG1fd2ViUGFnZS5zaXplKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2Rp
cnR5UmVnaW9uID0gbV93ZWJQYWdlLmJvdW5kcygpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFT
U0VSVChzaXplID09IG1fd2ViUGFnZS5zaXplKCkpOwotICAgICAgICBpZiAoIW1fc2hvdWxkU2Vu
ZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKSB7Ci0gICAgICAgICAgICAvLyBXZSd2ZSBhbHJl
YWR5IHNlbnQgYSBEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSBtZXNzYWdlIGZvciB0aGlzIHN0
YXRlLiBXZSBoYXZlIG5vdGhpbmcgbW9yZSB0byBkby4KLSAgICAgICAgICAgIG1faW5VcGRhdGVC
YWNraW5nU3RvcmVTdGF0ZSA9IGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgfQotCiAgICAgLy8gVGhlIFVJIHByb2Nlc3MgaGFzIHVwZGF0ZWQgdG8gYSBuZXcgYmFj
a2luZyBzdG9yZSBzdGF0ZS4gQW55IFVwZGF0ZSBtZXNzYWdlcyB3ZSBzZW50IGJlZm9yZQogICAg
IC8vIHRoaXMgcG9pbnQgd2lsbCBiZSBpZ25vcmVkLiBXZSB3YWl0IHRvIHNldCB0aGlzIHRvIGZh
bHNlIHVudGlsIGFmdGVyIHVwZGF0aW5nIHRoZSBwYWdlJ3MKICAgICAvLyBzaXplIHNvIHRoYXQg
YW55IGRpc3BsYXlzIHRyaWdnZXJlZCBieSB0aGUgcmVsYXlvdXQgd2lsbCBiZSBpZ25vcmVkLiBJ
ZiB3ZSdyZSBzdXBwb3NlZCB0bwogICAgIC8vIHJlc3BvbmQgdG8gdGhlIFVwZGF0ZUJhY2tpbmdT
dG9yZVN0YXRlIG1lc3NhZ2UgaW1tZWRpYXRlbHksIHdlJ2xsIGRvIGEgZGlzcGxheSBhbnl3YXkg
aW4KICAgICAvLyBzZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGU7IG90aGVyd2lzZSB3ZSBz
aG91bGRuJ3QgZG8gb25lIHJpZ2h0IG5vdy4KICAgICBtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZSA9
IGZhbHNlOwotCi0gICAgaWYgKHJlc3BvbmRJbW1lZGlhdGVseSkgewotICAgICAgICAvLyBNYWtl
IHN1cmUgdG8gcmVzdW1lIHBhaW50aW5nIGlmIHdlJ3JlIHN1cHBvc2VkIHRvIHJlc3BvbmQgaW1t
ZWRpYXRlbHksIG90aGVyd2lzZSB3ZSdsbCBqdXN0Ci0gICAgICAgIC8vIHNlbmQgYmFjayBhbiBl
bXB0eSBVcGRhdGVJbmZvIHN0cnVjdC4KLSAgICAgICAgaWYgKG1faXNQYWludGluZ1N1c3BlbmRl
ZCkKLSAgICAgICAgICAgIHJlc3VtZVBhaW50aW5nKCk7Ci0KLSAgICAgICAgc2VuZERpZFVwZGF0
ZUJhY2tpbmdTdG9yZVN0YXRlKCk7Ci0gICAgfQotCi0gICAgbV9pblVwZGF0ZUJhY2tpbmdTdG9y
ZVN0YXRlID0gZmFsc2U7Ci0gICAgaWYgKG1fZm9yY2VSZXBhaW50QWZ0ZXJCYWNraW5nU3RvcmVT
dGF0ZVVwZGF0ZSkKLSAgICAgICAgZm9yY2VSZXBhaW50KCk7CiB9CiAKIHZvaWQgRHJhd2luZ0Fy
ZWFJbXBsOjpzZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUoKQpAQCAtMzg4LDMzICsyMzgs
MjAgQEAgdm9pZCBEcmF3aW5nQXJlYUltcGw6OnNlbmREaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0
ZSgpCiAgICAgQVNTRVJUKCFtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZSk7CiAgICAgQVNTRVJUKG1f
c2hvdWxkU2VuZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKTsKIAotICAgIG1fc2hvdWxkU2Vu
ZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlID0gZmFsc2U7Ci0KLSAgICBVcGRhdGVJbmZvIHVw
ZGF0ZUluZm87Ci0KLSAgICBpZiAoIW1faXNQYWludGluZ1N1c3BlbmRlZCAmJiAhbV9sYXllclRy
ZWVIb3N0KQorICAgIGlmICghbV9pc1BhaW50aW5nU3VzcGVuZGVkICYmICFtX2xheWVyVHJlZUhv
c3QpIHsKKyAgICAgICAgVXBkYXRlSW5mbyB1cGRhdGVJbmZvOwogICAgICAgICBkaXNwbGF5KHVw
ZGF0ZUluZm8pOworICAgICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCkgeworICAgICAgICAgICAg
bV9zaG91bGRTZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgPSBmYWxzZTsKIAotICAgIExh
eWVyVHJlZUNvbnRleHQgbGF5ZXJUcmVlQ29udGV4dDsKLQotICAgIGlmIChtX2lzUGFpbnRpbmdT
dXNwZW5kZWQgfHwgbV9sYXllclRyZWVIb3N0KSB7Ci0gICAgICAgIHVwZGF0ZUluZm8udmlld1Np
emUgPSBtX3dlYlBhZ2Uuc2l6ZSgpOwotICAgICAgICB1cGRhdGVJbmZvLmRldmljZVNjYWxlRmFj
dG9yID0gbV93ZWJQYWdlLmNvcmVQYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCk7Ci0KLSAgICAg
ICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkgewotICAgICAgICAgICAgbGF5ZXJUcmVlQ29udGV4dCA9
IG1fbGF5ZXJUcmVlSG9zdC0+bGF5ZXJUcmVlQ29udGV4dCgpOwotCi0gICAgICAgICAgICAvLyBX
ZSBkb24ndCB3YW50IHRoZSBsYXllciB0cmVlIGhvc3QgdG8gbm90aWZ5IGFmdGVyIHRoZSBuZXh0
IHNjaGVkdWxlZAotICAgICAgICAgICAgLy8gbGF5ZXIgZmx1c2ggYmVjYXVzZSB0aGF0IG1pZ2h0
IGVuZCB1cCBzZW5kaW5nIGFuIEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUKLSAgICAg
ICAgICAgIC8vIG1lc3NhZ2UgYmFjayB0byB0aGUgVUkgcHJvY2VzcywgYnV0IHRoZSB1cGRhdGVk
IGxheWVyIHRyZWUgY29udGV4dAotICAgICAgICAgICAgLy8gd2lsbCBiZSBzZW50IGJhY2sgaW4g
dGhlIERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIG1lc3NhZ2UuCi0gICAgICAgICAgICBtX2xh
eWVyVHJlZUhvc3QtPnNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2go
ZmFsc2UpOwotICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5mb3JjZVJlcGFpbnQoKTsKKyAg
ICAgICAgICAgIExheWVyVHJlZUNvbnRleHQgbGF5ZXJUcmVlQ29udGV4dDsKKyAgICAgICAgICAg
IG1fd2ViUGFnZS5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5OjpEaWRVcGRhdGVCYWNr
aW5nU3RvcmVTdGF0ZShtX2JhY2tpbmdTdG9yZVN0YXRlSUQsIHVwZGF0ZUluZm8sIGxheWVyVHJl
ZUNvbnRleHQpKTsKKyAgICAgICAgICAgIG1fY29tcG9zaXRpbmdBY2NvcmRpbmdUb1Byb3h5TWVz
c2FnZXMgPSBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAot
ICAgIG1fd2ViUGFnZS5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5OjpEaWRVcGRhdGVC
YWNraW5nU3RvcmVTdGF0ZShtX2JhY2tpbmdTdG9yZVN0YXRlSUQsIHVwZGF0ZUluZm8sIGxheWVy
VHJlZUNvbnRleHQpKTsKLSAgICBtX2NvbXBvc2l0aW5nQWNjb3JkaW5nVG9Qcm94eU1lc3NhZ2Vz
ID0gIWxheWVyVHJlZUNvbnRleHQuaXNFbXB0eSgpOworICAgIEFjY2VsZXJhdGVkRHJhd2luZ0Fy
ZWE6OnNlbmREaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSgpOwogfQogCiB2b2lkIERyYXdpbmdB
cmVhSW1wbDo6ZGlkVXBkYXRlKCkKQEAgLTQzMiw1MSArMjY5LDE4IEBAIHZvaWQgRHJhd2luZ0Fy
ZWFJbXBsOjpkaWRVcGRhdGUoKQogCiB2b2lkIERyYXdpbmdBcmVhSW1wbDo6c3VzcGVuZFBhaW50
aW5nKCkKIHsKLSAgICBBU1NFUlQoIW1faXNQYWludGluZ1N1c3BlbmRlZCk7Ci0KLSAgICBpZiAo
bV9sYXllclRyZWVIb3N0KQotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnBhdXNlUmVuZGVyaW5n
KCk7Ci0KLSAgICBtX2lzUGFpbnRpbmdTdXNwZW5kZWQgPSB0cnVlOworICAgIEFjY2VsZXJhdGVk
RHJhd2luZ0FyZWE6OnN1c3BlbmRQYWludGluZygpOwogICAgIG1fZGlzcGxheVRpbWVyLnN0b3Ao
KTsKIH0KIAotdm9pZCBEcmF3aW5nQXJlYUltcGw6OnJlc3VtZVBhaW50aW5nKCkKLXsKLSAgICBp
ZiAoIW1faXNQYWludGluZ1N1c3BlbmRlZCkgewotICAgICAgICAvLyBGSVhNRTogV2UgY2FuIGdl
dCBhIGNhbGwgdG8gcmVzdW1lUGFpbnRpbmcgd2hlbiBwYWludGluZyBpcyBub3Qgc3VzcGVuZGVk
LgotICAgICAgICAvLyBUaGlzIGhhcHBlbnMgd2hlbiBzZW5kaW5nIGEgc3luY2hyb25vdXMgbWVz
c2FnZSB0byBjcmVhdGUgYSBuZXcgcGFnZS4gU2VlIDxyZGFyOi8vcHJvYmxlbS84OTc2NTMxPi4K
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9sYXllclRyZWVIb3N0KQot
ICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnJlc3VtZVJlbmRlcmluZygpOwotICAgICAgICAKLSAg
ICBtX2lzUGFpbnRpbmdTdXNwZW5kZWQgPSBmYWxzZTsKLQotICAgIC8vIEZJWE1FOiBXZSBzaG91
bGRuJ3QgYWx3YXlzIHJlcGFpbnQgZXZlcnl0aGluZyBoZXJlLgotICAgIHNldE5lZWRzRGlzcGxh
eSgpOwotfQotCiB2b2lkIERyYXdpbmdBcmVhSW1wbDo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZShHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQogewotICAgIG1fZXhpdENvbXBv
c2l0aW5nVGltZXIuc3RvcCgpOwotICAgIG1fd2FudHNUb0V4aXRBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZSA9IGZhbHNlOwotCi0gICAgbV93ZWJQYWdlLnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdB
cmVhUHJveHk6OldpbGxFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKG1fYmFja2luZ1N0
b3JlU3RhdGVJRCkpOwotCi0gICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3QpOwotCi0gICAgbV9s
YXllclRyZWVIb3N0ID0gTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKG1fd2ViUGFnZSk7CisgICAgQWNj
ZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShncmFw
aGljc0xheWVyKTsKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmIFBMQVRGT1JNKEdUSykKICAg
ICBpZiAobV9uYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcpCiAgICAgICAgIG1fbGF5
ZXJUcmVlSG9zdC0+c2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKG1fbmF0aXZl
U3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKTsKICNlbmRpZgotICAgIGlmICghbV9pblVwZGF0
ZUJhY2tpbmdTdG9yZVN0YXRlKQotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFNob3VsZE5v
dGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2godHJ1ZSk7CiAKLSAgICBtX2xheWVyVHJl
ZUhvc3QtPnNldFJvb3RDb21wb3NpdGluZ0xheWVyKGdyYXBoaWNzTGF5ZXIpOwotICAgIAogICAg
IC8vIE5vbi1jb21wb3NpdGVkIGNvbnRlbnQgd2lsbCBub3cgYmUgaGFuZGxlZCBleGNsdXNpdmVs
eSBieSB0aGUgbGF5ZXIgdHJlZSBob3N0LgogICAgIG1fZGlydHlSZWdpb24gPSBSZWdpb24oKTsK
ICAgICBtX3Njcm9sbFJlY3QgPSBJbnRSZWN0KCk7CkBAIC01MjgsMTkgKzMzMiw2IEBAIHZvaWQg
RHJhd2luZ0FyZWFJbXBsOjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKQogICAgIH0K
IH0KIAotdm9pZCBEcmF3aW5nQXJlYUltcGw6OmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9k
ZVNvb24oKQotewotICAgIGlmIChtX2xheWVyVHJlZVN0YXRlSXNGcm96ZW4pIHsKLSAgICAgICAg
bV93YW50c1RvRXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlID0gdHJ1ZTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmIChleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVQ
ZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZXhpdENvbXBvc2l0aW5nVGltZXIu
c3RhcnRPbmVTaG90KDApOwotfQotCiB2b2lkIERyYXdpbmdBcmVhSW1wbDo6c2NoZWR1bGVEaXNw
bGF5KCkKIHsKICAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9zdCk7CkBAIC02ODEsMTcgKzQ3Miw2
IEBAIHZvaWQgRHJhd2luZ0FyZWFJbXBsOjpkaXNwbGF5KFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8p
CiAgICAgbV9kaXNwbGF5VGltZXIuc3RvcCgpOwogfQogCi12b2lkIERyYXdpbmdBcmVhSW1wbDo6
YXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSwgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciogdmlld092ZXJsYXlSb290TGF5ZXIpCi17Ci0gICAgaWYgKCFm
cmFtZS0+aXNNYWluRnJhbWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2xheWVy
VHJlZUhvc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Vmll
d092ZXJsYXlSb290TGF5ZXIodmlld092ZXJsYXlSb290TGF5ZXIpOwotfQotCiAjaWYgVVNFKFRF
WFRVUkVfTUFQUEVSKSAmJiBQTEFURk9STShHVEspCiB2b2lkIERyYXdpbmdBcmVhSW1wbDo6c2V0
TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKHVpbnQ2NF90IGhhbmRsZSkKIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUlt
cGwuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwu
aAppbmRleCBlN2I2MzZiLi5iMWE1YzIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oCkBAIC0yNiwxMyArMjYsMTAgQEAKICNp
Zm5kZWYgRHJhd2luZ0FyZWFJbXBsX2gKICNkZWZpbmUgRHJhd2luZ0FyZWFJbXBsX2gKIAotI2lu
Y2x1ZGUgIkRyYXdpbmdBcmVhLmgiCi0jaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgotI2luY2x1
ZGUgPFdlYkNvcmUvUmVnaW9uLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRl
ICJBY2NlbGVyYXRlZERyYXdpbmdBcmVhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBj
bGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiB9CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewpAQCAtNDAsNyArMzcsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNz
IFNoYXJlYWJsZUJpdG1hcDsKIGNsYXNzIFVwZGF0ZUluZm87CiAKLWNsYXNzIERyYXdpbmdBcmVh
SW1wbCA6IHB1YmxpYyBEcmF3aW5nQXJlYSB7CitjbGFzcyBEcmF3aW5nQXJlYUltcGwgZmluYWwg
OiBwdWJsaWMgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYSB7CiBwdWJsaWM6CiAgICAgRHJhd2luZ0Fy
ZWFJbXBsKFdlYlBhZ2UmLCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJik7CiAgICAg
dmlydHVhbCB+RHJhd2luZ0FyZWFJbXBsKCk7CkBAIC01MCw5MiArNDcsNDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0TmVlZHNE
aXNwbGF5SW5SZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKICAgICB2b2lk
IHNjcm9sbChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiBzY3JvbGxEZWx0YSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwYWdlQmFja2dyb3Vu
ZFRyYW5zcGFyZW5jeUNoYW5nZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldExheWVyVHJlZVN0
YXRlSXNGcm96ZW4oYm9vbCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBsYXllclRyZWVTdGF0ZUlzRnJv
emVuKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9sYXllclRyZWVTdGF0ZUlzRnJvemVuOyB9
Ci0gICAgTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fbGF5ZXJUcmVlSG9zdC5nZXQoKTsgfQogICAgIHZvaWQgZm9yY2VSZXBhaW50KCkgb3Zl
cnJpZGU7Ci0gICAgYm9vbCBmb3JjZVJlcGFpbnRBc3luYyh1aW50NjRfdCBjYWxsYmFja0lEKSBv
dmVycmlkZTsKIAotICAgIHZvaWQgc2V0UGFpbnRpbmdFbmFibGVkKGJvb2wpIG92ZXJyaWRlOwog
ICAgIHZvaWQgbWFpbkZyYW1lQ29udGVudFNpemVDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmKSBvdmVycmlkZTsKICAgICB2b2lkIHVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdlYlByZWZl
cmVuY2VzU3RvcmUmKSBvdmVycmlkZTsKIAotICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0
b3J5KiBncmFwaGljc0xheWVyRmFjdG9yeSgpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0Um9vdENv
bXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOwotICAgIHZv
aWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKSBvdmVycmlkZTsKLSAgICB2b2lkIHNj
aGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoSW1tZWRpYXRlbHkoKSBvdmVycmlkZTsKLQotICAg
IHZvaWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKFdlYkNvcmU6OkZyYW1lKiwgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOwogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVS
KSAmJiBQTEFURk9STShHVEspCiAgICAgdm9pZCBzZXROYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29t
cG9zaXRpbmcodWludDY0X3QpIG92ZXJyaWRlOwogICAgIHZvaWQgZGVzdHJveU5hdGl2ZVN1cmZh
Y2VIYW5kbGVGb3JDb21wb3NpdGluZyhib29sJikgb3ZlcnJpZGU7CiAjZW5kaWYKIAotICAgIHZv
aWQgbGF5ZXJIb3N0RGlkRmx1c2hMYXllcnMoKSBvdmVycmlkZTsKLQogICAgIC8vIElQQyBtZXNz
YWdlIGhhbmRsZXJzLgogICAgIHZvaWQgdXBkYXRlQmFja2luZ1N0b3JlU3RhdGUodWludDY0X3Qg
YmFja2luZ1N0b3JlU3RhdGVJRCwgYm9vbCByZXNwb25kSW1tZWRpYXRlbHksIGZsb2F0IGRldmlj
ZVNjYWxlRmFjdG9yLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgc2Nyb2xsT2Zmc2V0KSBvdmVycmlkZTsKICAgICB2b2lkIGRpZFVwZGF0ZSgpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kUGFpbnRpbmcoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgcmVzdW1lUGFpbnRpbmcoKTsKLSAgICAKLSAgICB2b2lkIHNlbmREaWRVcGRhdGVCYWNraW5n
U3RvcmVTdGF0ZSgpOwogCi0gICAgdm9pZCBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2Rl
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZVNvb24oKTsKLSAgICBib29sIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9k
ZVBlbmRpbmcoKSBjb25zdCB7IHJldHVybiBtX2V4aXRDb21wb3NpdGluZ1RpbWVyLmlzQWN0aXZl
KCk7IH0KLSAgICB2b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOworICAgIC8v
IEFjY2VsZXJhdGVkRHJhd2luZ0FyZWEKKyAgICB2b2lkIHN1c3BlbmRQYWludGluZygpIG92ZXJy
aWRlOworICAgIHZvaWQgc2VuZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKCkgb3ZlcnJpZGU7
CisgICAgdm9pZCBkaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSgpIG92ZXJyaWRlOworCisgICAg
dm9pZCBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqKSBvdmVycmlkZTsKKyAgICB2b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgp
IG92ZXJyaWRlOwogCiAgICAgdm9pZCBzY2hlZHVsZURpc3BsYXkoKTsKICAgICB2b2lkIGRpc3Bs
YXlUaW1lckZpcmVkKCk7CiAgICAgdm9pZCBkaXNwbGF5KCk7CiAgICAgdm9pZCBkaXNwbGF5KFVw
ZGF0ZUluZm8mKTsKIAotICAgIHVpbnQ2NF90IG1fYmFja2luZ1N0b3JlU3RhdGVJRDsKLQogICAg
IFdlYkNvcmU6OlJlZ2lvbiBtX2RpcnR5UmVnaW9uOwogICAgIFdlYkNvcmU6OkludFJlY3QgbV9z
Y3JvbGxSZWN0OwogICAgIFdlYkNvcmU6OkludFNpemUgbV9zY3JvbGxPZmZzZXQ7CiAKLSAgICAv
LyBXaGV0aGVyIHBhaW50aW5nIGlzIGVuYWJsZWQuIElmIHBhaW50aW5nIGlzIGRpc2FibGVkLCBh
bnkgY2FsbHMgdG8gc2V0TmVlZHNEaXNwbGF5IGFuZCBzY3JvbGwgYXJlIGlnbm9yZWQuCi0gICAg
Ym9vbCBtX2lzUGFpbnRpbmdFbmFibGVkOwotCi0gICAgLy8gV2hldGhlciB3ZSdyZSBjdXJyZW50
bHkgcHJvY2Vzc2luZyBhbiBVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSBtZXNzYWdlLgotICAgIGJv
b2wgbV9pblVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlOwotCi0gICAgLy8gV2hlbiB0cnVlLCB3ZSBz
aG91bGQgc2VuZCBhbiBVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSBtZXNzYWdlIGluc3RlYWQgb2Yg
YW55IG90aGVyIG1lc3NhZ2VzCi0gICAgLy8gd2Ugbm9ybWFsbHkgc2VuZCB0byB0aGUgVUkgcHJv
Y2Vzcy4KLSAgICBib29sIG1fc2hvdWxkU2VuZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlOwot
CiAgICAgLy8gV2hldGhlciB3ZSdyZSB3YWl0aW5nIGZvciBhIERpZFVwZGF0ZSBtZXNzYWdlLiBV
c2VkIGZvciB0aHJvdHRsaW5nIHBhaW50cyBzbyB0aGF0IHRoZSAKICAgICAvLyB3ZWIgcHJvY2Vz
cyB3b24ndCBwYWludCBtb3JlIGZyZXF1ZW50IHRoYW4gdGhlIFVJIHByb2Nlc3MgY2FuIGhhbmRs
ZS4KLSAgICBib29sIG1faXNXYWl0aW5nRm9yRGlkVXBkYXRlOwotICAgIAotICAgIC8vIFRydWUg
YmV0d2VlbiBzZW5kaW5nIHRoZSAnZW50ZXIgY29tcG9zaXRpbmcnIG1lc3NhZ2VzLCBhbmQgdGhl
ICdleGl0IGNvbXBvc2l0aW5nJyBtZXNzYWdlLgotICAgIGJvb2wgbV9jb21wb3NpdGluZ0FjY29y
ZGluZ1RvUHJveHlNZXNzYWdlczsKLQotICAgIC8vIFdoZW4gdHJ1ZSwgd2UgbWFpbnRhaW4gdGhl
IGxheWVyIHRyZWUgaW4gaXRzIGN1cnJlbnQgc3RhdGUgYnkgbm90IGxlYXZpbmcgYWNjZWxlcmF0
ZWQgY29tcG9zaXRpbmcgbW9kZQotICAgIC8vIGFuZCBub3Qgc2NoZWR1bGluZyBsYXllciBmbHVz
aGVzLgotICAgIGJvb2wgbV9sYXllclRyZWVTdGF0ZUlzRnJvemVuOwotCi0gICAgLy8gVHJ1ZSB3
aGVuIHdlIHdlcmUgYXNrZWQgdG8gZXhpdCBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2RlIGJ1
dCBjb3VsZG4ndCBiZWNhdXNlIGxheWVyIHRyZWUKLSAgICAvLyBzdGF0ZSB3YXMgZnJvemVuLgot
ICAgIGJvb2wgbV93YW50c1RvRXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlOwotCi0gICAg
Ly8gV2hldGhlciBwYWludGluZyBpcyBzdXNwZW5kZWQuIFdlJ2xsIHN0aWxsIGtlZXAgdHJhY2sg
b2YgdGhlIGRpcnR5IHJlZ2lvbiBidXQgd2UgCi0gICAgLy8gd29uJ3QgcGFpbnQgdW50aWwgcGFp
bnRpbmcgaGFzIHJlc3VtZWQgYWdhaW4uCi0gICAgYm9vbCBtX2lzUGFpbnRpbmdTdXNwZW5kZWQ7
Ci0gICAgYm9vbCBtX2Fsd2F5c1VzZUNvbXBvc2l0aW5nOworICAgIGJvb2wgbV9pc1dhaXRpbmdG
b3JEaWRVcGRhdGUgeyBmYWxzZSB9OwogCisgICAgYm9vbCBtX2Fsd2F5c1VzZUNvbXBvc2l0aW5n
IHtmYWxzZSB9OwogICAgIGJvb2wgbV9mb3JjZVJlcGFpbnRBZnRlckJhY2tpbmdTdG9yZVN0YXRl
VXBkYXRlIHsgZmFsc2UgfTsKIAogICAgIFJ1bkxvb3A6OlRpbWVyPERyYXdpbmdBcmVhSW1wbD4g
bV9kaXNwbGF5VGltZXI7Ci0gICAgUnVuTG9vcDo6VGltZXI8RHJhd2luZ0FyZWFJbXBsPiBtX2V4
aXRDb21wb3NpdGluZ1RpbWVyOwotCi0gICAgLy8gVGhlIGxheWVyIHRyZWUgaG9zdCB0aGF0IGhh
bmRsZXMgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcuCi0gICAgUmVmUHRyPExheWVyVHJlZUhvc3Q+
IG1fbGF5ZXJUcmVlSG9zdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>282750</attachid>
            <date>2016-07-04 23:58:40 -0700</date>
            <delta_ts>2016-07-06 02:00:51 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk2-accelerated-drawing-area.diff</filename>
            <type>text/plain</type>
            <size>69365</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAwZGZmNTE4Li4xY2VhYWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzUg
QEAKKzIwMTYtMDYtMjkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIER1cGxpY2F0ZWQgY29kZSBpbiBEcmF3aW5nQXJlYUltcGwgYW5kIENvb3Jk
aW5hdGVkRHJhd2luZ0FyZWEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1OTI1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEl0IHNlZW1zIHRoYXQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYSBpcyBqdXN0IGEg
Y29weSBwYXN0ZSBvZiBEcmF3aW5nQXJlYUltcGwgd2l0aCBub24tYWNjZWxlcmF0ZWQgY29kZSBw
YXRoCisgICAgICAgIHJlbW92ZWQuIFRoZXJlJ3MgYWN0dWFsbHkgbm90aGluZyAob3IgdmVyeSBs
aXR0bGUpIHNwZWNpZmljIHRvIGNvb3JkaW5hdGVkIGdyYXBoaWNzIGluIHRoZQorICAgICAgICBD
b29yZGluYXRlZERyYXdpbmdBcmVhIGltcGxlbWVudGF0aW9uLiBUaGlzIHBhdGNoIHJlbmFtZXMg
Q29vcmRpbmF0ZWREcmF3aW5nQXJlYSBhcyBBY2NlbGVyYXRlZERyYXdpbmdBcmVhIGFuZAorICAg
ICAgICBtYWtlcyBEcmF3aW5nQXJlYUltcGwgaW5oZXJpdCBmcm9tIGl0LCBzbyB0aGF0IGluIGNh
c2Ugb2YgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgdGhlIHBhcmVudCBjbGFzcyBpcyB1c2VkLCBh
bmQKKyAgICAgICAgRHJhd2luZ0FyZWFJbXBsIG9ubHkgYWRkcyB0aGUgbm9uIGFjY2VsZXJhdGVk
IGNvZGUgcGF0aC4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFBs
YXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRl
ZERyYXdpbmdBcmVhLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkRHJhd2luZ0FyZWEuY3BwLgor
ICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjp+QWNjZWxlcmF0ZWREcmF3
aW5nQXJlYSk6CisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OkFjY2Vs
ZXJhdGVkRHJhd2luZ0FyZWEpOgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZERyYXdpbmdB
cmVhOjpzZXROZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZERyYXdp
bmdBcmVhOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QpOgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVy
YXRlZERyYXdpbmdBcmVhOjpzY3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZERy
YXdpbmdBcmVhOjpwYWdlQmFja2dyb3VuZFRyYW5zcGFyZW5jeUNoYW5nZWQpOgorICAgICAgICAo
V2ViS2l0OjpBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpzZXRMYXllclRyZWVTdGF0ZUlzRnJvemVu
KToKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6Zm9yY2VSZXBhaW50
KToKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6Zm9yY2VSZXBhaW50
QXN5bmMpOgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpzZXRQYWlu
dGluZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjp1
cGRhdGVQcmVmZXJlbmNlcyk6CisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0Fy
ZWE6Om1haW5GcmFtZUNvbnRlbnRTaXplQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OkFjY2Vs
ZXJhdGVkRHJhd2luZ0FyZWE6OmxheWVySG9zdERpZEZsdXNoTGF5ZXJzKToKKyAgICAgICAgKFdl
YktpdDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6Z3JhcGhpY3NMYXllckZhY3RvcnkpOgorICAg
ICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpzZXRSb290Q29tcG9zaXRpbmdM
YXllcik6CisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OnNjaGVkdWxl
Q29tcG9zaXRpbmdMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3
aW5nQXJlYTo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2hJbW1lZGlhdGVseSk6CisgICAg
ICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OnVwZGF0ZUJhY2tpbmdTdG9yZVN0
YXRlKToKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6c2VuZERpZFVw
ZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3
aW5nQXJlYTo6c3VzcGVuZFBhaW50aW5nKToKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWRE
cmF3aW5nQXJlYTo6cmVzdW1lUGFpbnRpbmcpOgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRl
ZERyYXdpbmdBcmVhOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKToKKyAgICAgICAg
KFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlU29vbik6CisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OmRp
ZFJlY2VpdmVDb29yZGluYXRlZExheWVyVHJlZUhvc3RNZXNzYWdlKToKKyAgICAgICAgKFdlYktp
dDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6dmlld1N0YXRlRGlkQ2hhbmdlKToKKyAgICAgICAg
KFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6YXR0YWNoVmlld092ZXJsYXlHcmFwaGlj
c0xheWVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5n
QXJlYS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWREcmF3aW5nQXJlYS5oLgorICAgICAgICAoV2Vi
S2l0OjpBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01v
ZGVQZW5kaW5nKToKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZGlk
VXBkYXRlQmFja2luZ1N0b3JlU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZERy
YXdpbmdBcmVhOjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRyYXdp
bmdBcmVhOjpjcmVhdGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJl
YUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYUltcGw6OkRyYXdpbmdBcmVh
SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhSW1wbDo6c2V0TmVlZHNEaXNwbGF5
KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFJbXBsOjpzZXROZWVkc0Rpc3BsYXlJblJl
Y3QpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYUltcGw6OnNjcm9sbCk6CisgICAgICAg
IChXZWJLaXQ6OkRyYXdpbmdBcmVhSW1wbDo6Zm9yY2VSZXBhaW50KToKKyAgICAgICAgKFdlYktp
dDo6RHJhd2luZ0FyZWFJbXBsOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcik6CisgICAgICAgIChX
ZWJLaXQ6OkRyYXdpbmdBcmVhSW1wbDo6dXBkYXRlQmFja2luZ1N0b3JlU3RhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpEcmF3aW5nQXJlYUltcGw6OmRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKToK
KyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFJbXBsOjpzZW5kRGlkVXBkYXRlQmFja2luZ1N0
b3JlU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYUltcGw6OnN1c3BlbmRQYWlu
dGluZyk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhSW1wbDo6ZW50ZXJBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhSW1wbDo6fkRy
YXdpbmdBcmVhSW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhSW1w
bDo6bWFpbkZyYW1lQ29udGVudFNpemVDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6RHJhd2luZ0FyZWFJbXBsOjp1cGRhdGVQcmVmZXJlbmNlcyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OkRyYXdpbmdBcmVhSW1wbDo6ZGlkVXBkYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6RHJhd2luZ0FyZWFJbXBsOjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYUltcGw6OnNjaGVkdWxlRGlz
cGxheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhSW1wbDo6ZGlzcGxh
eVRpbWVyRmlyZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYUltcGw6
OmRpc3BsYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpzaG91bGRQYWludEJvdW5kc1Jl
Y3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYUltcGw6OnNldE5hdGl2
ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oOgorCiAyMDE2LTA3LTA0ICBDYXJsb3MgR2Fy
Y2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbQ29vcmRpbmF0ZWQg
R3JhcGhpY3NdIE1vZGVybml6ZSBhbmQgY2xlYW51cCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IGRkNzYzZGQuLjEwODU2YzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtRWZsLmNtYWtlCkBAIC0xOTYsMTEgKzE5NiwxMSBAQCBsaXN0KEFQUEVORCBXZWJLaXQy
X1NPVVJDRVMKIAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvc291cC9XZWJGcmFtZU5l
dHdvcmtpbmdDb250ZXh0LmNwcAogCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVk
RHJhd2luZ0FyZWEuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5j
cHAKIAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0FyZWFBbGxv
Y2F0b3IuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29t
cG9zaXRpbmdDb29yZGluYXRvci5jcHAKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZERyYXdpbmdBcmVhLmNwcAogICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKICAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5jcHAK
ICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJQYWdlQ29vcmRp
bmF0ZWRHcmFwaGljcy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RL
LmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggYTdmNGY3ZS4u
YjNjMmFkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKKysr
IGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTMzOSw2ICszMzksNyBAQCBs
aXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKIAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvc291cC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmNwcAogCisgICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L0RyYXdpbmdBcmVhSW1wbC5jcHAKIAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9hdGsvV2ViUGFn
ZUFjY2Vzc2liaWxpdHlPYmplY3RBdGsuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UyNjI3MQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVh
LmNwcApAQCAtMCwwICsxLDM4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5oIgorCisjaW5j
bHVkZSAiRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlSG9z
dC5oIgorI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5j
bHVkZSAiV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5oIgorI2luY2x1ZGUgIldlYlByZWZlcmVu
Y2VzS2V5cy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvTWFpbkZyYW1lLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6fkFjY2Vs
ZXJhdGVkRHJhd2luZ0FyZWEoKQoreworICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCisgICAgICAg
IG1fbGF5ZXJUcmVlSG9zdC0+aW52YWxpZGF0ZSgpOworfQorCitBY2NlbGVyYXRlZERyYXdpbmdB
cmVhOjpBY2NlbGVyYXRlZERyYXdpbmdBcmVhKFdlYlBhZ2UmIHdlYlBhZ2UsIGNvbnN0IFdlYlBh
Z2VDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCisjaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTX01VTFRJUFJPQ0VTUykKKyAgICA6IERyYXdpbmdBcmVhKERyYXdpbmdBcmVhVHlwZUNv
b3JkaW5hdGVkLCB3ZWJQYWdlKQorI2Vsc2UKKyAgICA6IERyYXdpbmdBcmVhKERyYXdpbmdBcmVh
VHlwZUltcGwsIHdlYlBhZ2UpCisjZW5kaWYKKyAgICAsIG1fZXhpdENvbXBvc2l0aW5nVGltZXIo
UnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZXhpdEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdNb2RlKQoreworICAgIGlmICghbV93ZWJQYWdlLmlzVmlzaWJsZSgp
KQorICAgICAgICBzdXNwZW5kUGFpbnRpbmcoKTsKK30KKwordm9pZCBBY2NlbGVyYXRlZERyYXdp
bmdBcmVhOjpzZXROZWVkc0Rpc3BsYXkoKQoreworICAgIGlmICghbV9pc1BhaW50aW5nRW5hYmxl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9sYXllclRyZWVIb3N0LT5zZXROb25Db21wb3Np
dGVkQ29udGVudHNOZWVkRGlzcGxheSgpOworfQorCit2b2lkIEFjY2VsZXJhdGVkRHJhd2luZ0Fy
ZWE6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlm
ICghbV9pc1BhaW50aW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9sYXllclRy
ZWVIb3N0LT5zZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheUluUmVjdChyZWN0KTsK
K30KKwordm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpzY3JvbGwoY29uc3QgSW50UmVjdCYg
c2Nyb2xsUmVjdCwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpCit7CisgICAgaWYgKCFtX2lz
UGFpbnRpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xheWVyVHJlZUhvc3Qt
PnNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhzY3JvbGxSZWN0KTsKK30KKwordm9pZCBBY2Nl
bGVyYXRlZERyYXdpbmdBcmVhOjpwYWdlQmFja2dyb3VuZFRyYW5zcGFyZW5jeUNoYW5nZWQoKQor
eworICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cGFn
ZUJhY2tncm91bmRUcmFuc3BhcmVuY3lDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWRE
cmF3aW5nQXJlYTo6c2V0TGF5ZXJUcmVlU3RhdGVJc0Zyb3plbihib29sIGlzRnJvemVuKQorewor
ICAgIGlmIChtX2xheWVyVHJlZVN0YXRlSXNGcm96ZW4gPT0gaXNGcm96ZW4pCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fbGF5ZXJUcmVlU3RhdGVJc0Zyb3plbiA9IGlzRnJvemVuOworCisgICAg
aWYgKG1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRMYXllckZs
dXNoU2NoZWR1bGluZ0VuYWJsZWQoIWlzRnJvemVuKTsKKworICAgIGlmIChpc0Zyb3plbikKKyAg
ICAgICAgbV9leGl0Q29tcG9zaXRpbmdUaW1lci5zdG9wKCk7CisgICAgZWxzZSBpZiAobV93YW50
c1RvRXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKQorICAgICAgICBleGl0QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGVTb29uKCk7Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJl
YTo6Zm9yY2VSZXBhaW50KCkKK3sKKyAgICBzZXROZWVkc0Rpc3BsYXkoKTsKKworICAgIG1fd2Vi
UGFnZS5sYXlvdXRJZk5lZWRlZCgpOworCisgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZG8gdGhl
IHNhbWUgd29yayBhcyB0aGUgbGF5ZXJIb3N0RGlkRmx1c2hMYXllcnMgZnVuY3Rpb24gaGVyZSwK
KyAgICAvLyBidXQgY2xlYXJseSBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gY2FsbCB0aGUgZnVu
Y3Rpb24gd2l0aCB0aGF0IG5hbWUuCisgICAgLy8gQ29uc2lkZXIgcmVmYWN0b3JpbmcgYW5kIHJl
bmFtaW5nIGl0LgorICAgIGlmIChtX2NvbXBvc2l0aW5nQWNjb3JkaW5nVG9Qcm94eU1lc3NhZ2Vz
KQorICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmZvcmNlUmVwYWludCgpOworICAgIGVsc2Ugewor
ICAgICAgICAvLyBDYWxsIHNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1
c2goZmFsc2UpIGhlcmUgdG8KKyAgICAgICAgLy8gcHJldmVudCBsYXllckhvc3REaWRGbHVzaExh
eWVycygpIGZyb20gYmVpbmcgY2FsbGVkIGEgc2Vjb25kIHRpbWUuCisgICAgICAgIG1fbGF5ZXJU
cmVlSG9zdC0+c2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChmYWxz
ZSk7CisgICAgICAgIGxheWVySG9zdERpZEZsdXNoTGF5ZXJzKCk7CisgICAgfQorfQorCitib29s
IEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OmZvcmNlUmVwYWludEFzeW5jKHVpbnQ2NF90IGNhbGxi
YWNrSUQpCit7CisgICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdCAmJiBtX2xheWVyVHJlZUhvc3Qt
PmZvcmNlUmVwYWludEFzeW5jKGNhbGxiYWNrSUQpOworfQorCit2b2lkIEFjY2VsZXJhdGVkRHJh
d2luZ0FyZWE6OnNldFBhaW50aW5nRW5hYmxlZChib29sIHBhaW50aW5nRW5hYmxlZCkKK3sKKyAg
ICBtX2lzUGFpbnRpbmdFbmFibGVkID0gcGFpbnRpbmdFbmFibGVkOworfQorCit2b2lkIEFjY2Vs
ZXJhdGVkRHJhd2luZ0FyZWE6OnVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdlYlByZWZlcmVuY2Vz
U3RvcmUmIHN0b3JlKQoreworICAgIG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLnNl
dEZvcmNlQ29tcG9zaXRpbmdNb2RlKHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJl
bmNlc0tleTo6Zm9yY2VDb21wb3NpdGluZ01vZGVLZXkoKSkpOworICAgIGlmICghbV9sYXllclRy
ZWVIb3N0KQorICAgICAgICBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKG51bGxwdHIp
OworfQorCit2b2lkIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6Om1haW5GcmFtZUNvbnRlbnRTaXpl
Q2hhbmdlZChjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGlmIChtX3dlYlBhZ2UudXNlRml4
ZWRMYXlvdXQoKSkKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zaXplRGlkQ2hhbmdlKHNpemUp
OworICAgIG1fd2ViUGFnZS5tYWluRnJhbWUoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlk
Q2hhbmdlRG9jdW1lbnRTaXplKCk7Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6
bGF5ZXJIb3N0RGlkRmx1c2hMYXllcnMoKQoreworICAgIG1fbGF5ZXJUcmVlSG9zdC0+Zm9yY2VS
ZXBhaW50KCk7CisKKyAgICBpZiAobV9zaG91bGRTZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3Rh
dGUgJiYgIWV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZVBlbmRpbmcoKSkgeworICAgICAg
ICBzZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEFTU0VSVCghbV9jb21wb3NpdGluZ0FjY29yZGluZ1RvUHJveHlNZXNzYWdlcyk7
CisgICAgaWYgKCFleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVQZW5kaW5nKCkpIHsKKyAg
ICAgICAgbV93ZWJQYWdlLnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhUHJveHk6OkVudGVyQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobV9iYWNraW5nU3RvcmVTdGF0ZUlELCBtX2xheWVyVHJl
ZUhvc3QtPmxheWVyVHJlZUNvbnRleHQoKSkpOworICAgICAgICBtX2NvbXBvc2l0aW5nQWNjb3Jk
aW5nVG9Qcm94eU1lc3NhZ2VzID0gdHJ1ZTsKKyAgICB9Cit9CisKK0dyYXBoaWNzTGF5ZXJGYWN0
b3J5KiBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpncmFwaGljc0xheWVyRmFjdG9yeSgpCit7Cisg
ICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdCA/IG1fbGF5ZXJUcmVlSG9zdC0+Z3JhcGhpY3NMYXll
ckZhY3RvcnkoKSA6IG51bGxwdHI7Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6
c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKK3sK
KyAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiB1c2luZyBuZXN0ZWQgaWYgc3RhdGVtZW50cywgd2Ug
c2hvdWxkIGtlZXAgYSBjb21wb3NpdGluZyBzdGF0ZQorICAgIC8vIGVudW0gaW4gdGhlIEFjY2Vs
ZXJhdGVkRHJhd2luZ0FyZWEgb2JqZWN0IGFuZCBoYXZlIGEgY2hhbmdlQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ1N0YXRlIGZ1bmN0aW9uCisgICAgLy8gdGhhdCB0YWtlcyB0aGUgbmV3IHN0YXRlLgor
CisgICAgaWYgKGdyYXBoaWNzTGF5ZXIpIHsKKyAgICAgICAgLy8gV2UncmUgYWxyZWFkeSBpbiBh
Y2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2RlLCBidXQgdGhlIHJvb3QgY29tcG9zaXRpbmcgbGF5
ZXIgY2hhbmdlZC4KKworICAgICAgICBtX2V4aXRDb21wb3NpdGluZ1RpbWVyLnN0b3AoKTsKKyAg
ICAgICAgbV93YW50c1RvRXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlID0gZmFsc2U7CisK
KyAgICAgICAgLy8gSWYgd2UgaGF2ZW4ndCBzZW50IHRoZSBFbnRlckFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlIG1lc3NhZ2UsIG1ha2Ugc3VyZSB0aGF0IHRoZQorICAgICAgICAvLyBsYXllciB0
cmVlIGhvc3QgY2FsbHMgdXMgYmFjayBhZnRlciB0aGUgbmV4dCBsYXllciBmbHVzaCBzbyB3ZSBj
YW4gc2VuZCBpdCB0aGVuLgorICAgICAgICBpZiAoIW1fY29tcG9zaXRpbmdBY2NvcmRpbmdUb1By
b3h5TWVzc2FnZXMpCisgICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFNob3VsZE5vdGlm
eUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2godHJ1ZSk7CisgICAgfQorICAgIG1fbGF5ZXJU
cmVlSG9zdC0+c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoZ3JhcGhpY3NMYXllcik7Cit9CisKK3Zv
aWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2go
KQoreworICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+
c2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6
c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2hJbW1lZGlhdGVseSgpCit7CisgICAgc2NoZWR1
bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKK30KKwordm9pZCBBY2NlbGVyYXRlZERyYXdpbmdB
cmVhOjp1cGRhdGVCYWNraW5nU3RvcmVTdGF0ZSh1aW50NjRfdCBzdGF0ZUlELCBib29sIHJlc3Bv
bmRJbW1lZGlhdGVseSwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGNvbnN0IEludFNpemUmIHNp
emUsIGNvbnN0IEludFNpemUmIHNjcm9sbE9mZnNldCkKK3sKKyAgICBBU1NFUlQoIW1faW5VcGRh
dGVCYWNraW5nU3RvcmVTdGF0ZSk7CisgICAgbV9pblVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlID0g
dHJ1ZTsKKworICAgIEFTU0VSVF9BUkcoc3RhdGVJRCwgc3RhdGVJRCA+PSBtX2JhY2tpbmdTdG9y
ZVN0YXRlSUQpOworICAgIGlmIChzdGF0ZUlEICE9IG1fYmFja2luZ1N0b3JlU3RhdGVJRCkgewor
ICAgICAgICBtX2JhY2tpbmdTdG9yZVN0YXRlSUQgPSBzdGF0ZUlEOworICAgICAgICBtX3Nob3Vs
ZFNlbmREaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSA9IHRydWU7CisKKyAgICAgICAgbV93ZWJQ
YWdlLnNldERldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICAgICAgbV93
ZWJQYWdlLnNldFNpemUoc2l6ZSk7CisgICAgICAgIG1fd2ViUGFnZS5sYXlvdXRJZk5lZWRlZCgp
OworICAgICAgICBtX3dlYlBhZ2Uuc2Nyb2xsTWFpbkZyYW1lSWZOb3RBdE1heFNjcm9sbFBvc2l0
aW9uKHNjcm9sbE9mZnNldCk7CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfTVVMVElQ
Uk9DRVNTKQorICAgICAgICAvLyBDb29yZGluYXRlZCBHcmFwaGljcyBzZXRzIHRoZSBzaXplIG9m
IHRoZSByb290IGxheWVyIHRvIGNvbnRlbnRzIHNpemUuCisgICAgICAgIGlmICghbV93ZWJQYWdl
LnVzZUZpeGVkTGF5b3V0KCkpCisgICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNpemVEaWRD
aGFuZ2UobV93ZWJQYWdlLnNpemUoKSk7CisjZWxzZQorICAgICAgICBpZiAobV9sYXllclRyZWVI
b3N0KQorICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zaXplRGlkQ2hhbmdlKG1fd2ViUGFn
ZS5zaXplKCkpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHNpemUgPT0g
bV93ZWJQYWdlLnNpemUoKSk7CisgICAgICAgIGlmICghbV9zaG91bGRTZW5kRGlkVXBkYXRlQmFj
a2luZ1N0b3JlU3RhdGUpIHsKKyAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc2VudCBhIERp
ZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIG1lc3NhZ2UgZm9yIHRoaXMgc3RhdGUuIFdlIGhhdmUg
bm90aGluZyBtb3JlIHRvIGRvLgorICAgICAgICAgICAgbV9pblVwZGF0ZUJhY2tpbmdTdG9yZVN0
YXRlID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBkaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSgpOworCisgICAgaWYgKHJlc3BvbmRJbW1lZGlh
dGVseSkgeworICAgICAgICAvLyBNYWtlIHN1cmUgdG8gcmVzdW1lIHBhaW50aW5nIGlmIHdlJ3Jl
IHN1cHBvc2VkIHRvIHJlc3BvbmQgaW1tZWRpYXRlbHksIG90aGVyd2lzZSB3ZSdsbCBqdXN0Cisg
ICAgICAgIC8vIHNlbmQgYmFjayBhbiBlbXB0eSBVcGRhdGVJbmZvIHN0cnVjdC4KKyAgICAgICAg
aWYgKG1faXNQYWludGluZ1N1c3BlbmRlZCkKKyAgICAgICAgICAgIHJlc3VtZVBhaW50aW5nKCk7
CisKKyAgICAgICAgc2VuZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKCk7CisgICAgfQorCisg
ICAgbV9pblVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlID0gZmFsc2U7Cit9CisKK3ZvaWQgQWNjZWxl
cmF0ZWREcmF3aW5nQXJlYTo6c2VuZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKCkKK3sKKyAg
ICBBU1NFUlQobV9zaG91bGRTZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUpOworCisgICAg
bV9zaG91bGRTZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgPSBmYWxzZTsKKworICAgIFVw
ZGF0ZUluZm8gdXBkYXRlSW5mbzsKKyAgICB1cGRhdGVJbmZvLnZpZXdTaXplID0gbV93ZWJQYWdl
LnNpemUoKTsKKyAgICB1cGRhdGVJbmZvLmRldmljZVNjYWxlRmFjdG9yID0gbV93ZWJQYWdlLmNv
cmVQYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCk7CisKKyAgICBMYXllclRyZWVDb250ZXh0IGxh
eWVyVHJlZUNvbnRleHQ7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkgeworICAgICAgICBsYXll
clRyZWVDb250ZXh0ID0gbV9sYXllclRyZWVIb3N0LT5sYXllclRyZWVDb250ZXh0KCk7CisKKyAg
ICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0aGUgbGF5ZXIgdHJlZSBob3N0IHRvIG5vdGlmeSBhZnRl
ciB0aGUgbmV4dCBzY2hlZHVsZWQKKyAgICAgICAgLy8gbGF5ZXIgZmx1c2ggYmVjYXVzZSB0aGF0
IG1pZ2h0IGVuZCB1cCBzZW5kaW5nIGFuIEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUK
KyAgICAgICAgLy8gbWVzc2FnZSBiYWNrIHRvIHRoZSBVSSBwcm9jZXNzLCBidXQgdGhlIHVwZGF0
ZWQgbGF5ZXIgdHJlZSBjb250ZXh0CisgICAgICAgIC8vIHdpbGwgYmUgc2VudCBiYWNrIGluIHRo
ZSBEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSBtZXNzYWdlLgorICAgICAgICBtX2xheWVyVHJl
ZUhvc3QtPnNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goZmFsc2Up
OworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmZvcmNlUmVwYWludCgpOworICAgIH0KKworICAg
IG1fd2ViUGFnZS5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5OjpEaWRVcGRhdGVCYWNr
aW5nU3RvcmVTdGF0ZShtX2JhY2tpbmdTdG9yZVN0YXRlSUQsIHVwZGF0ZUluZm8sIGxheWVyVHJl
ZUNvbnRleHQpKTsKKyAgICBtX2NvbXBvc2l0aW5nQWNjb3JkaW5nVG9Qcm94eU1lc3NhZ2VzID0g
IWxheWVyVHJlZUNvbnRleHQuaXNFbXB0eSgpOworfQorCit2b2lkIEFjY2VsZXJhdGVkRHJhd2lu
Z0FyZWE6OnN1c3BlbmRQYWludGluZygpCit7CisgICAgQVNTRVJUKCFtX2lzUGFpbnRpbmdTdXNw
ZW5kZWQpOworCisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgbV9sYXllclRyZWVI
b3N0LT5wYXVzZVJlbmRlcmluZygpOworCisgICAgbV9pc1BhaW50aW5nU3VzcGVuZGVkID0gdHJ1
ZTsKKworICAgIG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5zdXNwZW5kU2NyaXB0ZWRBbmltYXRpb25z
KCk7Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6cmVzdW1lUGFpbnRpbmcoKQor
eworICAgIGlmICghbV9pc1BhaW50aW5nU3VzcGVuZGVkKSB7CisgICAgICAgIC8vIEZJWE1FOiBX
ZSBjYW4gZ2V0IGEgY2FsbCB0byByZXN1bWVQYWludGluZyB3aGVuIHBhaW50aW5nIGlzIG5vdCBz
dXNwZW5kZWQuCisgICAgICAgIC8vIFRoaXMgaGFwcGVucyB3aGVuIHNlbmRpbmcgYSBzeW5jaHJv
bm91cyBtZXNzYWdlIHRvIGNyZWF0ZSBhIG5ldyBwYWdlLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzg5
NzY1MzE+LgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fbGF5ZXJUcmVlSG9z
dCkKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5yZXN1bWVSZW5kZXJpbmcoKTsKKworICAgIG1f
aXNQYWludGluZ1N1c3BlbmRlZCA9IGZhbHNlOworCisgICAgLy8gRklYTUU6IFdlIHNob3VsZG4n
dCBhbHdheXMgcmVwYWludCBldmVyeXRoaW5nIGhlcmUuCisgICAgc2V0TmVlZHNEaXNwbGF5KCk7
CisKKyAgICBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+cmVzdW1lU2NyaXB0ZWRBbmltYXRpb25zKCk7
Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZW50ZXJBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZShHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQoreworICAgIG1fZXhpdENv
bXBvc2l0aW5nVGltZXIuc3RvcCgpOworICAgIG1fd2FudHNUb0V4aXRBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZSA9IGZhbHNlOworCisgICAgbV93ZWJQYWdlLnNlbmQoTWVzc2FnZXM6OkRyYXdp
bmdBcmVhUHJveHk6OldpbGxFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKG1fYmFja2lu
Z1N0b3JlU3RhdGVJRCkpOworCisgICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3QpOworICAgIG1f
bGF5ZXJUcmVlSG9zdCA9IExheWVyVHJlZUhvc3Q6OmNyZWF0ZShtX3dlYlBhZ2UpOworI2lmIFBM
QVRGT1JNKEdUSykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIGlmIChtX25hdGl2ZVN1cmZh
Y2VIYW5kbGVGb3JDb21wb3NpdGluZykKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXROYXRp
dmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcobV9uYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29t
cG9zaXRpbmcpOworI2VuZGlmCisgICAgaWYgKCFtX2luVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUp
CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1
bGVkTGF5ZXJGbHVzaCh0cnVlKTsKKyAgICBpZiAobV9pc1BhaW50aW5nU3VzcGVuZGVkKQorICAg
ICAgICBtX2xheWVyVHJlZUhvc3QtPnBhdXNlUmVuZGVyaW5nKCk7CisKKyAgICBtX2xheWVyVHJl
ZUhvc3QtPnNldFJvb3RDb21wb3NpdGluZ0xheWVyKGdyYXBoaWNzTGF5ZXIpOworfQorCit2b2lk
IEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZVNv
b24oKQoreworICAgIGlmIChtX2xheWVyVHJlZVN0YXRlSXNGcm96ZW4pIHsKKyAgICAgICAgbV93
YW50c1RvRXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlID0gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVQZW5k
aW5nKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZXhpdENvbXBvc2l0aW5nVGltZXIuc3Rh
cnRPbmVTaG90KDApOworfQorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX01VTFRJUFJP
Q0VTUykKK3ZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6ZGlkUmVjZWl2ZUNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6Ok1l
c3NhZ2VEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGlkUmVjZWl2
ZUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Cit9
CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKEdUSykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQordm9p
ZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpzZXROYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9z
aXRpbmcodWludDY0X3QgaGFuZGxlKQoreworICAgIG1fbmF0aXZlU3VyZmFjZUhhbmRsZUZvckNv
bXBvc2l0aW5nID0gaGFuZGxlOworICAgIGlmIChtX2xheWVyVHJlZUhvc3QpIHsKKyAgICAgICAg
bV93ZWJQYWdlLmNvcmVQYWdlKCktPnNldHRpbmdzKCkuc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0VuYWJsZWQodHJ1ZSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0TmF0aXZlU3VyZmFj
ZUhhbmRsZUZvckNvbXBvc2l0aW5nKGhhbmRsZSk7CisgICAgfQorfQorCit2b2lkIEFjY2VsZXJh
dGVkRHJhd2luZ0FyZWE6OmRlc3Ryb3lOYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmco
Ym9vbCYgaGFuZGxlZCkKK3sKKyAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICBzZXROYXRpdmVTdXJm
YWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcoMCk7Cit9CisjZW5kaWYKKwordm9pZCBBY2NlbGVyYXRl
ZERyYXdpbmdBcmVhOjp2aWV3U3RhdGVEaWRDaGFuZ2UoVmlld1N0YXRlOjpGbGFncyBjaGFuZ2Vk
LCBib29sLCBjb25zdCBWZWN0b3I8dWludDY0X3Q+JikKK3sKKyAgICBpZiAoY2hhbmdlZCAmIFZp
ZXdTdGF0ZTo6SXNWaXNpYmxlKSB7CisgICAgICAgIGlmIChtX3dlYlBhZ2UuaXNWaXNpYmxlKCkp
CisgICAgICAgICAgICByZXN1bWVQYWludGluZygpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBzdXNwZW5kUGFpbnRpbmcoKTsKKyAgICB9Cit9CisKK3ZvaWQgQWNjZWxlcmF0ZWREcmF3aW5n
QXJlYTo6YXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKEZyYW1lKiBmcmFtZSwgR3JhcGhp
Y3NMYXllciogdmlld092ZXJsYXlSb290TGF5ZXIpCit7CisgICAgaWYgKCFmcmFtZS0+aXNNYWlu
RnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKKyAg
ICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRWaWV3T3ZlcmxheVJvb3RMYXllcih2aWV3T3Zlcmxh
eVJvb3RMYXllcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVh
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWExNjdhMwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERy
YXdpbmdBcmVhLmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEcmF3aW5nQXJlYS5oIgorI2luY2x1ZGUgPHd0Zi9S
dW5Mb29wLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBMYXllclRyZWVIb3N0Owor
CitjbGFzcyBBY2NlbGVyYXRlZERyYXdpbmdBcmVhIDogcHVibGljIERyYXdpbmdBcmVhIHsKK3B1
YmxpYzoKKyAgICBBY2NlbGVyYXRlZERyYXdpbmdBcmVhKFdlYlBhZ2UmLCBjb25zdCBXZWJQYWdl
Q3JlYXRpb25QYXJhbWV0ZXJzJik7CisgICAgdmlydHVhbCB+QWNjZWxlcmF0ZWREcmF3aW5nQXJl
YSgpOworCitwcm90ZWN0ZWQ6CisgICAgLy8gRHJhd2luZ0FyZWEKKyAgICB2b2lkIHNldE5lZWRz
RGlzcGxheSgpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIHNjcm9sbChjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxE
ZWx0YSkgb3ZlcnJpZGU7CisgICAgdm9pZCBwYWdlQmFja2dyb3VuZFRyYW5zcGFyZW5jeUNoYW5n
ZWQoKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldExheWVyVHJlZVN0YXRlSXNGcm96ZW4oYm9vbCkg
b3ZlcnJpZGU7CisgICAgYm9vbCBsYXllclRyZWVTdGF0ZUlzRnJvemVuKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9sYXllclRyZWVTdGF0ZUlzRnJvemVuOyB9CisgICAgTGF5ZXJUcmVlSG9z
dCogbGF5ZXJUcmVlSG9zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fbGF5ZXJUcmVlSG9z
dC5nZXQoKTsgfQorICAgIHZvaWQgZm9yY2VSZXBhaW50KCkgb3ZlcnJpZGU7CisgICAgYm9vbCBm
b3JjZVJlcGFpbnRBc3luYyh1aW50NjRfdCBjYWxsYmFja0lEKSBvdmVycmlkZTsKKworICAgIHZv
aWQgc2V0UGFpbnRpbmdFbmFibGVkKGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQgdXBkYXRlUHJl
ZmVyZW5jZXMoY29uc3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYpIG92ZXJyaWRlOworICAgIHZvaWQg
bWFpbkZyYW1lQ29udGVudFNpemVDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSBvdmVy
cmlkZTsKKworICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBncmFwaGljc0xheWVy
RmFjdG9yeSgpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOworICAgIHZvaWQgc2NoZWR1bGVDb21wb3Np
dGluZ0xheWVyRmx1c2goKSBvdmVycmlkZTsKKyAgICB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdM
YXllckZsdXNoSW1tZWRpYXRlbHkoKSBvdmVycmlkZTsKKworI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDU19NVUxUSVBST0NFU1MpCisgICAgdm9pZCBkaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJikg
b3ZlcnJpZGU7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKEdUSykgJiYgVVNFKFRFWFRVUkVfTUFQ
UEVSKQorICAgIHZvaWQgc2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKHVpbnQ2
NF90KSBvdmVycmlkZTsKKyAgICB2b2lkIGRlc3Ryb3lOYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29t
cG9zaXRpbmcoYm9vbCYpIG92ZXJyaWRlOworI2VuZGlmCisKKyAgICB2b2lkIHZpZXdTdGF0ZURp
ZENoYW5nZShXZWJDb3JlOjpWaWV3U3RhdGU6OkZsYWdzLCBib29sIC8qIHdhbnRzRGlkVXBkYXRl
Vmlld1N0YXRlICovLCBjb25zdCBWZWN0b3I8dWludDY0X3Q+JiAvKiBjYWxsYmFja0lEcyAqLykg
b3ZlcnJpZGU7CisgICAgdm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoV2ViQ29y
ZTo6RnJhbWUqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CisKKyAgICB2b2lk
IGxheWVySG9zdERpZEZsdXNoTGF5ZXJzKCkgb3ZlcnJpZGU7CisKKyAgICAvLyBJUEMgbWVzc2Fn
ZSBoYW5kbGVycy4KKyAgICB2b2lkIHVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHVpbnQ2NF90IGJh
Y2tpbmdTdG9yZVN0YXRlSUQsIGJvb2wgcmVzcG9uZEltbWVkaWF0ZWx5LCBmbG9hdCBkZXZpY2VT
Y2FsZUZhY3RvciwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIHNjcm9sbE9mZnNldCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGV4aXRBY2NlbGVyYXRlZENv
bXBvc2l0aW5nTW9kZVNvb24oKTsKKyAgICBib29sIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5n
TW9kZVBlbmRpbmcoKSBjb25zdCB7IHJldHVybiBtX2V4aXRDb21wb3NpdGluZ1RpbWVyLmlzQWN0
aXZlKCk7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kUGFpbnRpbmcoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVzdW1lUGFpbnRpbmcoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZW5kRGlkVXBk
YXRlQmFja2luZ1N0b3JlU3RhdGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkVXBkYXRlQmFja2lu
Z1N0b3JlU3RhdGUoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBlbnRlckFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgeyB9CisKKyAgICB1aW50NjRfdCBtX2Jh
Y2tpbmdTdG9yZVN0YXRlSUQgeyAwIH07CisKKyAgICAvLyBXaGV0aGVyIHBhaW50aW5nIGlzIGVu
YWJsZWQuIElmIHBhaW50aW5nIGlzIGRpc2FibGVkLCBhbnkgY2FsbHMgdG8gc2V0TmVlZHNEaXNw
bGF5IGFuZCBzY3JvbGwgYXJlIGlnbm9yZWQuCisgICAgYm9vbCBtX2lzUGFpbnRpbmdFbmFibGVk
IHsgdHJ1ZSB9OworCisgICAgLy8gV2hldGhlciB3ZSdyZSBjdXJyZW50bHkgcHJvY2Vzc2luZyBh
biBVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSBtZXNzYWdlLgorICAgIGJvb2wgbV9pblVwZGF0ZUJh
Y2tpbmdTdG9yZVN0YXRlIHsgZmFsc2UgfTsKKworICAgIC8vIFdoZW4gdHJ1ZSwgd2Ugc2hvdWxk
IHNlbmQgYW4gVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgbWVzc2FnZSBpbnN0ZWFkIG9mIGFueSBv
dGhlciBtZXNzYWdlcworICAgIC8vIHdlIG5vcm1hbGx5IHNlbmQgdG8gdGhlIFVJIHByb2Nlc3Mu
CisgICAgYm9vbCBtX3Nob3VsZFNlbmREaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSB7IGZhbHNl
IH07CisKKyAgICAvLyBUcnVlIGJldHdlZW4gc2VuZGluZyB0aGUgJ2VudGVyIGNvbXBvc2l0aW5n
JyBtZXNzYWdlcywgYW5kIHRoZSAnZXhpdCBjb21wb3NpdGluZycgbWVzc2FnZS4KKyAgICBib29s
IG1fY29tcG9zaXRpbmdBY2NvcmRpbmdUb1Byb3h5TWVzc2FnZXMgeyBmYWxzZSB9OworCisgICAg
Ly8gV2hlbiB0cnVlLCB3ZSBtYWludGFpbiB0aGUgbGF5ZXIgdHJlZSBpbiBpdHMgY3VycmVudCBz
dGF0ZSBieSBub3QgbGVhdmluZyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2RlCisgICAgLy8g
YW5kIG5vdCBzY2hlZHVsaW5nIGxheWVyIGZsdXNoZXMuCisgICAgYm9vbCBtX2xheWVyVHJlZVN0
YXRlSXNGcm96ZW4geyBmYWxzZSB9OworCisgICAgLy8gVHJ1ZSB3aGVuIHdlIHdlcmUgYXNrZWQg
dG8gZXhpdCBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2RlIGJ1dCBjb3VsZG4ndCBiZWNhdXNl
IGxheWVyIHRyZWUKKyAgICAvLyBzdGF0ZSB3YXMgZnJvemVuLgorICAgIGJvb2wgbV93YW50c1Rv
RXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlIHsgZmFsc2UgfTsKKworICAgIC8vIFdoZXRo
ZXIgcGFpbnRpbmcgaXMgc3VzcGVuZGVkLiBXZSdsbCBzdGlsbCBrZWVwIHRyYWNrIG9mIHRoZSBk
aXJ0eSByZWdpb24gYnV0IHdlCisgICAgLy8gd29uJ3QgcGFpbnQgdW50aWwgcGFpbnRpbmcgaGFz
IHJlc3VtZWQgYWdhaW4uCisgICAgYm9vbCBtX2lzUGFpbnRpbmdTdXNwZW5kZWQgeyBmYWxzZSB9
OworCisgICAgUnVuTG9vcDo6VGltZXI8QWNjZWxlcmF0ZWREcmF3aW5nQXJlYT4gbV9leGl0Q29t
cG9zaXRpbmdUaW1lcjsKKworICAgIC8vIFRoZSBsYXllciB0cmVlIGhvc3QgdGhhdCBoYW5kbGVz
IGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nLgorICAgIFJlZlB0cjxMYXllclRyZWVIb3N0PiBtX2xh
eWVyVHJlZUhvc3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkRHJhd2luZ0FyZWEuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWREcmF3aW5nQXJlYS5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5YjcyZWYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWREcmF3
aW5nQXJlYS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNTUgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWREcmF3aW5nQXJlYS5oIgotCi0jaW5jbHVk
ZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgiCi0jaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94
eU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgotI2luY2x1ZGUgIlBh
Z2VPdmVybGF5Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgotI2lu
Y2x1ZGUgIlVwZGF0ZUluZm8uaCIKLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSAiV2Vi
UGFnZUNyZWF0aW9uUGFyYW1ldGVycy5oIgotI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzS2V5cy5o
IgotI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29u
dGV4dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTWFpbkZyYW1lLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9QYWdlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheUNvbnRyb2xsZXIuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6fkNvb3JkaW5h
dGVkRHJhd2luZ0FyZWEoKQotewotICAgIG1fbGF5ZXJUcmVlSG9zdC0+aW52YWxpZGF0ZSgpOwot
fQotCi1Db29yZGluYXRlZERyYXdpbmdBcmVhOjpDb29yZGluYXRlZERyYXdpbmdBcmVhKFdlYlBh
Z2UmIHdlYlBhZ2UsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMp
Ci0gICAgOiBEcmF3aW5nQXJlYShEcmF3aW5nQXJlYVR5cGVDb29yZGluYXRlZCwgd2ViUGFnZSkK
LSAgICAsIG1fYmFja2luZ1N0b3JlU3RhdGVJRCgwKQotICAgICwgbV9pc1BhaW50aW5nRW5hYmxl
ZCh0cnVlKQotICAgICwgbV9pblVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKGZhbHNlKQotICAgICwg
bV9zaG91bGRTZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUoZmFsc2UpCi0gICAgLCBtX2Nv
bXBvc2l0aW5nQWNjb3JkaW5nVG9Qcm94eU1lc3NhZ2VzKGZhbHNlKQotICAgICwgbV9sYXllclRy
ZWVTdGF0ZUlzRnJvemVuKGZhbHNlKQotICAgICwgbV93YW50c1RvRXhpdEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKGZhbHNlKQotICAgICwgbV9pc1BhaW50aW5nU3VzcGVuZGVkKGZhbHNlKQot
ICAgICwgbV9leGl0Q29tcG9zaXRpbmdUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZDb29y
ZGluYXRlZERyYXdpbmdBcmVhOjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpCi17Ci0g
ICAgLy8gQWx3YXlzIHVzZSBjb21wb3NpdGluZyBpbiBDb29yZGluYXRlZEdyYXBoaWNzCi0gICAg
ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgwKTsKLQotICAgIGlmICghKHBhcmFtZXRl
cnMudmlld1N0YXRlICYgVmlld1N0YXRlOjpJc1Zpc2libGUpKQotICAgICAgICBzdXNwZW5kUGFp
bnRpbmcoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpzZXROZWVkc0Rpc3Bs
YXkoKQotewotICAgIGlmICghbV9pc1BhaW50aW5nRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9sYXllclRyZWVIb3N0LT5zZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxh
eSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OnNldE5lZWRzRGlzcGxheUlu
UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmICghbV9pc1BhaW50aW5nRW5hYmxl
ZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9sYXllclRyZWVIb3N0LT5zZXROb25Db21wb3Np
dGVkQ29udGVudHNOZWVkRGlzcGxheUluUmVjdChyZWN0KTsKLX0KLQotdm9pZCBDb29yZGluYXRl
ZERyYXdpbmdBcmVhOjpzY3JvbGwoY29uc3QgSW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgSW50
U2l6ZSYgc2Nyb2xsRGVsdGEpCi17Ci0gICAgaWYgKCFtX2lzUGFpbnRpbmdFbmFibGVkKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2xheWVyVHJlZUhvc3QtPnNjcm9sbE5vbkNvbXBvc2l0ZWRD
b250ZW50cyhzY3JvbGxSZWN0KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpw
YWdlQmFja2dyb3VuZFRyYW5zcGFyZW5jeUNoYW5nZWQoKQotewotICAgIG1fbGF5ZXJUcmVlSG9z
dC0+cGFnZUJhY2tncm91bmRUcmFuc3BhcmVuY3lDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgQ29vcmRp
bmF0ZWREcmF3aW5nQXJlYTo6c2V0TGF5ZXJUcmVlU3RhdGVJc0Zyb3plbihib29sIGlzRnJvemVu
KQotewotICAgIGlmIChtX2xheWVyVHJlZVN0YXRlSXNGcm96ZW4gPT0gaXNGcm96ZW4pCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fbGF5ZXJUcmVlU3RhdGVJc0Zyb3plbiA9IGlzRnJvemVuOwot
Ci0gICAgbV9sYXllclRyZWVIb3N0LT5zZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoIWlz
RnJvemVuKTsKLQotICAgIGlmIChpc0Zyb3plbikKLSAgICAgICAgbV9leGl0Q29tcG9zaXRpbmdU
aW1lci5zdG9wKCk7Ci0gICAgZWxzZSBpZiAobV93YW50c1RvRXhpdEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlKQotICAgICAgICBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVTb29uKCk7
Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6Zm9yY2VSZXBhaW50KCkKLXsKLSAg
ICBzZXROZWVkc0Rpc3BsYXkoKTsKLQotICAgIG1fd2ViUGFnZS5sYXlvdXRJZk5lZWRlZCgpOwot
Ci0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZG8gdGhlIHNhbWUgd29yayBhcyB0aGUgbGF5ZXJI
b3N0RGlkRmx1c2hMYXllcnMgZnVuY3Rpb24gaGVyZSwKLSAgICAvLyBidXQgY2xlYXJseSBpdCBk
b2Vzbid0IG1ha2Ugc2Vuc2UgdG8gY2FsbCB0aGUgZnVuY3Rpb24gd2l0aCB0aGF0IG5hbWUuCi0g
ICAgLy8gQ29uc2lkZXIgcmVmYWN0b3JpbmcgYW5kIHJlbmFtaW5nIGl0LgotICAgIGlmIChtX2Nv
bXBvc2l0aW5nQWNjb3JkaW5nVG9Qcm94eU1lc3NhZ2VzKQotICAgICAgICBtX2xheWVyVHJlZUhv
c3QtPmZvcmNlUmVwYWludCgpOwotICAgIGVsc2UgewotICAgICAgICAvLyBDYWxsIHNldFNob3Vs
ZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goZmFsc2UpIGhlcmUgdG8KLSAgICAg
ICAgLy8gcHJldmVudCBsYXllckhvc3REaWRGbHVzaExheWVycygpIGZyb20gYmVpbmcgY2FsbGVk
IGEgc2Vjb25kIHRpbWUuCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0U2hvdWxkTm90aWZ5
QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChmYWxzZSk7Ci0gICAgICAgIGxheWVySG9zdERp
ZEZsdXNoTGF5ZXJzKCk7Ci0gICAgfQotfQotCi1ib29sIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6
OmZvcmNlUmVwYWludEFzeW5jKHVpbnQ2NF90IGNhbGxiYWNrSUQpCi17Ci0gICAgcmV0dXJuIG1f
bGF5ZXJUcmVlSG9zdC0+Zm9yY2VSZXBhaW50QXN5bmMoY2FsbGJhY2tJRCk7Ci19Ci0KLXZvaWQg
Q29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6c2V0UGFpbnRpbmdFbmFibGVkKGJvb2wgcGFpbnRpbmdF
bmFibGVkKQotewotICAgIG1faXNQYWludGluZ0VuYWJsZWQgPSBwYWludGluZ0VuYWJsZWQ7Ci19
Ci0KLXZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6dXBkYXRlUHJlZmVyZW5jZXMoY29uc3Qg
V2ViUHJlZmVyZW5jZXNTdG9yZSYgc3RvcmUpCi17Ci0gICAgbV93ZWJQYWdlLmNvcmVQYWdlKCkt
PnNldHRpbmdzKCkuc2V0Rm9yY2VDb21wb3NpdGluZ01vZGUoc3RvcmUuZ2V0Qm9vbFZhbHVlRm9y
S2V5KFdlYlByZWZlcmVuY2VzS2V5Ojpmb3JjZUNvbXBvc2l0aW5nTW9kZUtleSgpKSk7Ci19Ci0K
LXZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6bWFpbkZyYW1lQ29udGVudFNpemVDaGFuZ2Vk
KGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCi17Ci0gICAgaWYgKG1fd2ViUGFnZS51c2VG
aXhlZExheW91dCgpKQotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNpemVEaWRDaGFuZ2Uoc2l6
ZSk7Ci0gICAgbV93ZWJQYWdlLm1haW5GcmFtZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5k
aWRDaGFuZ2VEb2N1bWVudFNpemUoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVh
OjpsYXllckhvc3REaWRGbHVzaExheWVycygpCi17Ci0gICAgbV9sYXllclRyZWVIb3N0LT5mb3Jj
ZVJlcGFpbnQoKTsKLQotICAgIGlmIChtX3Nob3VsZFNlbmREaWRVcGRhdGVCYWNraW5nU3RvcmVT
dGF0ZSAmJiAhZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlUGVuZGluZygpKSB7Ci0gICAg
ICAgIHNlbmREaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgQVNTRVJUKCFtX2NvbXBvc2l0aW5nQWNjb3JkaW5nVG9Qcm94eU1lc3NhZ2Vz
KTsKLSAgICBpZiAoIWV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZVBlbmRpbmcoKSkgewot
ICAgICAgICBtX3dlYlBhZ2Uuc2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWFQcm94eTo6RW50ZXJB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShtX2JhY2tpbmdTdG9yZVN0YXRlSUQsIG1fbGF5ZXJU
cmVlSG9zdC0+bGF5ZXJUcmVlQ29udGV4dCgpKSk7Ci0gICAgICAgIG1fY29tcG9zaXRpbmdBY2Nv
cmRpbmdUb1Byb3h5TWVzc2FnZXMgPSB0cnVlOwotICAgIH0KLX0KLQotR3JhcGhpY3NMYXllckZh
Y3RvcnkqIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkKLXsK
LSAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0LT5ncmFwaGljc0xheWVyRmFjdG9yeSgpOwotfQot
Ci12b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKEdy
YXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCi17Ci0gICAgLy8gRklYTUU6IEluc3RlYWQgb2Yg
dXNpbmcgbmVzdGVkIGlmIHN0YXRlbWVudHMsIHdlIHNob3VsZCBrZWVwIGEgY29tcG9zaXRpbmcg
c3RhdGUKLSAgICAvLyBlbnVtIGluIHRoZSBDb29yZGluYXRlZERyYXdpbmdBcmVhIG9iamVjdCBh
bmQgaGF2ZSBhIGNoYW5nZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdTdGF0ZSBmdW5jdGlvbgotICAg
IC8vIHRoYXQgdGFrZXMgdGhlIG5ldyBzdGF0ZS4KLQotICAgIGlmIChncmFwaGljc0xheWVyKSB7
Ci0gICAgICAgIC8vIFdlJ3JlIGFscmVhZHkgaW4gYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgbW9k
ZSwgYnV0IHRoZSByb290IGNvbXBvc2l0aW5nIGxheWVyIGNoYW5nZWQuCi0KLSAgICAgICAgbV9l
eGl0Q29tcG9zaXRpbmdUaW1lci5zdG9wKCk7Ci0gICAgICAgIG1fd2FudHNUb0V4aXRBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZSA9IGZhbHNlOwotCi0gICAgICAgIC8vIElmIHdlIGhhdmVuJ3Qg
c2VudCB0aGUgRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSBtZXNzYWdlLCBtYWtlIHN1
cmUgdGhhdCB0aGUKLSAgICAgICAgLy8gbGF5ZXIgdHJlZSBob3N0IGNhbGxzIHVzIGJhY2sgYWZ0
ZXIgdGhlIG5leHQgbGF5ZXIgZmx1c2ggc28gd2UgY2FuIHNlbmQgaXQgdGhlbi4KLSAgICAgICAg
aWYgKCFtX2NvbXBvc2l0aW5nQWNjb3JkaW5nVG9Qcm94eU1lc3NhZ2VzKQotICAgICAgICAgICAg
bV9sYXllclRyZWVIb3N0LT5zZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZs
dXNoKHRydWUpOwotICAgIH0KLSAgICBtX2xheWVyVHJlZUhvc3QtPnNldFJvb3RDb21wb3NpdGlu
Z0xheWVyKGdyYXBoaWNzTGF5ZXIpOwotfQotCi12b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6
OnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCkKLXsKLSAgICBtX2xheWVyVHJlZUhvc3Qt
PnNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6
OnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoSW1tZWRpYXRlbHkoKQotewotICAgIHNjaGVk
dWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWREcmF3aW5n
QXJlYTo6dXBkYXRlQmFja2luZ1N0b3JlU3RhdGUodWludDY0X3Qgc3RhdGVJRCwgYm9vbCByZXNw
b25kSW1tZWRpYXRlbHksIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBzaXplLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpCi17Ci0g
ICAgQVNTRVJUKCFtX2luVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUpOwotICAgIG1faW5VcGRhdGVC
YWNraW5nU3RvcmVTdGF0ZSA9IHRydWU7Ci0KLSAgICBBU1NFUlRfQVJHKHN0YXRlSUQsIHN0YXRl
SUQgPj0gbV9iYWNraW5nU3RvcmVTdGF0ZUlEKTsKLSAgICBpZiAoc3RhdGVJRCAhPSBtX2JhY2tp
bmdTdG9yZVN0YXRlSUQpIHsKLSAgICAgICAgbV9iYWNraW5nU3RvcmVTdGF0ZUlEID0gc3RhdGVJ
RDsKLSAgICAgICAgbV9zaG91bGRTZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgPSB0cnVl
OwotCi0gICAgICAgIG1fd2ViUGFnZS5zZXREZXZpY2VTY2FsZUZhY3RvcihkZXZpY2VTY2FsZUZh
Y3Rvcik7Ci0gICAgICAgIG1fd2ViUGFnZS5zZXRTaXplKHNpemUpOwotICAgICAgICBtX3dlYlBh
Z2UubGF5b3V0SWZOZWVkZWQoKTsKLSAgICAgICAgbV93ZWJQYWdlLnNjcm9sbE1haW5GcmFtZUlm
Tm90QXRNYXhTY3JvbGxQb3NpdGlvbihzY3JvbGxPZmZzZXQpOwotCi0gICAgICAgIC8vIENvb3Jk
aW5hdGVkIEdyYXBoaWNzIHNldHMgdGhlIHNpemUgb2YgdGhlIHJvb3QgbGF5ZXIgdG8gY29udGVu
dHMgc2l6ZS4KLSAgICAgICAgaWYgKCFtX3dlYlBhZ2UudXNlRml4ZWRMYXlvdXQoKSkKLSAgICAg
ICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2l6ZURpZENoYW5nZShtX3dlYlBhZ2Uuc2l6ZSgpKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQoc2l6ZSA9PSBtX3dlYlBhZ2Uuc2l6ZSgpKTsK
LSAgICAgICAgaWYgKCFtX3Nob3VsZFNlbmREaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSkgewot
ICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzZW50IGEgRGlkVXBkYXRlQmFja2luZ1N0b3Jl
U3RhdGUgbWVzc2FnZSBmb3IgdGhpcyBzdGF0ZS4gV2UgaGF2ZSBub3RoaW5nIG1vcmUgdG8gZG8u
Ci0gICAgICAgICAgICBtX2luVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgPSBmYWxzZTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChyZXNwb25kSW1tZWRp
YXRlbHkpIHsKLSAgICAgICAgLy8gTWFrZSBzdXJlIHRvIHJlc3VtZSBwYWludGluZyBpZiB3ZSdy
ZSBzdXBwb3NlZCB0byByZXNwb25kIGltbWVkaWF0ZWx5LCBvdGhlcndpc2Ugd2UnbGwganVzdAot
ICAgICAgICAvLyBzZW5kIGJhY2sgYW4gZW1wdHkgVXBkYXRlSW5mbyBzdHJ1Y3QuCi0gICAgICAg
IGlmIChtX2lzUGFpbnRpbmdTdXNwZW5kZWQpCi0gICAgICAgICAgICByZXN1bWVQYWludGluZygp
OwotCi0gICAgICAgIHNlbmREaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSgpOwotICAgIH0KLQot
ICAgIG1faW5VcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSA9IGZhbHNlOwotfQotCi12b2lkIENvb3Jk
aW5hdGVkRHJhd2luZ0FyZWE6OnNlbmREaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSgpCi17Ci0g
ICAgQVNTRVJUKG1fc2hvdWxkU2VuZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKTsKLQotICAg
IG1fc2hvdWxkU2VuZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlID0gZmFsc2U7Ci0KLSAgICBV
cGRhdGVJbmZvIHVwZGF0ZUluZm87Ci0KLSAgICBMYXllclRyZWVDb250ZXh0IGxheWVyVHJlZUNv
bnRleHQ7Ci0KLSAgICB1cGRhdGVJbmZvLnZpZXdTaXplID0gbV93ZWJQYWdlLnNpemUoKTsKLSAg
ICB1cGRhdGVJbmZvLmRldmljZVNjYWxlRmFjdG9yID0gbV93ZWJQYWdlLmNvcmVQYWdlKCktPmRl
dmljZVNjYWxlRmFjdG9yKCk7Ci0KLSAgICBsYXllclRyZWVDb250ZXh0ID0gbV9sYXllclRyZWVI
b3N0LT5sYXllclRyZWVDb250ZXh0KCk7Ci0KLSAgICAvLyBXZSBkb24ndCB3YW50IHRoZSBsYXll
ciB0cmVlIGhvc3QgdG8gbm90aWZ5IGFmdGVyIHRoZSBuZXh0IHNjaGVkdWxlZAotICAgIC8vIGxh
eWVyIGZsdXNoIGJlY2F1c2UgdGhhdCBtaWdodCBlbmQgdXAgc2VuZGluZyBhbiBFbnRlckFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdNb2RlCi0gICAgLy8gbWVzc2FnZSBiYWNrIHRvIHRoZSBVSSBwcm9j
ZXNzLCBidXQgdGhlIHVwZGF0ZWQgbGF5ZXIgdHJlZSBjb250ZXh0Ci0gICAgLy8gd2lsbCBiZSBz
ZW50IGJhY2sgaW4gdGhlIERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIG1lc3NhZ2UuCi0gICAg
bV9sYXllclRyZWVIb3N0LT5zZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZs
dXNoKGZhbHNlKTsKLSAgICBtX2xheWVyVHJlZUhvc3QtPmZvcmNlUmVwYWludCgpOwotCi0gICAg
bV93ZWJQYWdlLnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhUHJveHk6OkRpZFVwZGF0ZUJhY2tp
bmdTdG9yZVN0YXRlKG1fYmFja2luZ1N0b3JlU3RhdGVJRCwgdXBkYXRlSW5mbywgbGF5ZXJUcmVl
Q29udGV4dCkpOwotICAgIG1fY29tcG9zaXRpbmdBY2NvcmRpbmdUb1Byb3h5TWVzc2FnZXMgPSAh
bGF5ZXJUcmVlQ29udGV4dC5pc0VtcHR5KCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWREcmF3aW5n
QXJlYTo6c3VzcGVuZFBhaW50aW5nKCkKLXsKLSAgICBBU1NFUlQoIW1faXNQYWludGluZ1N1c3Bl
bmRlZCk7Ci0KLSAgICBtX2xheWVyVHJlZUhvc3QtPnBhdXNlUmVuZGVyaW5nKCk7Ci0KLSAgICBt
X2lzUGFpbnRpbmdTdXNwZW5kZWQgPSB0cnVlOwotCi0gICAgbV93ZWJQYWdlLmNvcmVQYWdlKCkt
PnN1c3BlbmRTY3JpcHRlZEFuaW1hdGlvbnMoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZERyYXdp
bmdBcmVhOjpyZXN1bWVQYWludGluZygpCi17Ci0gICAgaWYgKCFtX2lzUGFpbnRpbmdTdXNwZW5k
ZWQpIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBnZXQgYSBjYWxsIHRvIHJlc3VtZVBhaW50
aW5nIHdoZW4gcGFpbnRpbmcgaXMgbm90IHN1c3BlbmRlZC4KLSAgICAgICAgLy8gVGhpcyBoYXBw
ZW5zIHdoZW4gc2VuZGluZyBhIHN5bmNocm9ub3VzIG1lc3NhZ2UgdG8gY3JlYXRlIGEgbmV3IHBh
Z2UuIFNlZSA8cmRhcjovL3Byb2JsZW0vODk3NjUzMT4uCi0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBtX2xheWVyVHJlZUhvc3QtPnJlc3VtZVJlbmRlcmluZygpOwotCi0gICAgbV9pc1Bh
aW50aW5nU3VzcGVuZGVkID0gZmFsc2U7Ci0KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGFs
d2F5cyByZXBhaW50IGV2ZXJ5dGhpbmcgaGVyZS4KLSAgICBzZXROZWVkc0Rpc3BsYXkoKTsKLQot
ICAgIG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5yZXN1bWVTY3JpcHRlZEFuaW1hdGlvbnMoKTsKLX0K
LQotdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlKEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCi17Ci0gICAgbV9leGl0Q29tcG9z
aXRpbmdUaW1lci5zdG9wKCk7Ci0gICAgbV93YW50c1RvRXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlID0gZmFsc2U7Ci0KLSAgICBtX2xheWVyVHJlZUhvc3QgPSBMYXllclRyZWVIb3N0Ojpj
cmVhdGUobV93ZWJQYWdlKTsKLSAgICBpZiAoIW1faW5VcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSkK
LSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVs
ZWRMYXllckZsdXNoKHRydWUpOwotCi0gICAgbV9sYXllclRyZWVIb3N0LT5zZXRSb290Q29tcG9z
aXRpbmdMYXllcihncmFwaGljc0xheWVyKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZERyYXdpbmdB
cmVhOjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVTb29uKCkKLXsKLSAgICBpZiAobV9s
YXllclRyZWVTdGF0ZUlzRnJvemVuKSB7Ci0gICAgICAgIG1fd2FudHNUb0V4aXRBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nTW9kZSA9IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlUGVuZGluZygpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2V4aXRDb21wb3NpdGluZ1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQot
dm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpkaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6TWVzc2FnZURl
Y29kZXImIGRlY29kZXIpCi17Ci0gICAgbV9sYXllclRyZWVIb3N0LT5kaWRSZWNlaXZlQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0TWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLX0KLQotdm9p
ZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjp2aWV3U3RhdGVEaWRDaGFuZ2UoVmlld1N0YXRlOjpG
bGFncyBjaGFuZ2VkLCBib29sLCBjb25zdCBWZWN0b3I8dWludDY0X3Q+JikKLXsKLSAgICBpZiAo
Y2hhbmdlZCAmIFZpZXdTdGF0ZTo6SXNWaXNpYmxlKSB7Ci0gICAgICAgIGlmIChtX3dlYlBhZ2Uu
aXNWaXNpYmxlKCkpCi0gICAgICAgICAgICByZXN1bWVQYWludGluZygpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBzdXNwZW5kUGFpbnRpbmcoKTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29vcmRp
bmF0ZWREcmF3aW5nQXJlYTo6YXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKFdlYkNvcmU6
OkZyYW1lKiBmcmFtZSwgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogdmlld092ZXJsYXlSb290TGF5
ZXIpCi17Ci0gICAgaWYgKCFmcmFtZS0+aXNNYWluRnJhbWUoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9sYXllclRyZWVIb3N0LT5zZXRWaWV3T3ZlcmxheVJvb3RMYXllcih2aWV3T3Zlcmxh
eVJvb3RMYXllcik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotI2VuZGlmIC8vIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkRHJhd2luZ0FyZWEuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkRHJhd2luZ0FyZWEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQw
ZDYzOC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZERyYXdpbmdBcmVhLmgKKysrIC9kZXYvbnVsbApA
QCAtMSwxMjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENvb3Jk
aW5hdGVkRHJhd2luZ0FyZWFfaAotI2RlZmluZSBDb29yZGluYXRlZERyYXdpbmdBcmVhX2gKLQot
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLQotI2luY2x1ZGUgIkRyYXdpbmdBcmVhLmgi
Ci0jaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgotI2luY2x1ZGUgPFdlYkNvcmUvUmVnaW9uLmg+
Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNz
IENvb3JkaW5hdGVkRHJhd2luZ0FyZWEgOiBwdWJsaWMgRHJhd2luZ0FyZWEgewotcHVibGljOgot
ICAgIENvb3JkaW5hdGVkRHJhd2luZ0FyZWEoV2ViUGFnZSYsIGNvbnN0IFdlYlBhZ2VDcmVhdGlv
blBhcmFtZXRlcnMmKTsKLSAgICB2aXJ0dWFsIH5Db29yZGluYXRlZERyYXdpbmdBcmVhKCk7Ci0K
LXByaXZhdGU6Ci0gICAgLy8gRHJhd2luZ0FyZWEKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgp
IG92ZXJyaWRlOwotICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIHNjcm9sbChjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxEZWx0YSkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBwYWdlQmFja2dyb3VuZFRyYW5zcGFyZW5jeUNoYW5nZWQoKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHNldExheWVyVHJlZVN0YXRlSXNGcm96ZW4oYm9vbCkgb3ZlcnJpZGU7
Ci0gICAgYm9vbCBsYXllclRyZWVTdGF0ZUlzRnJvemVuKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV9sYXllclRyZWVTdGF0ZUlzRnJvemVuOyB9Ci0gICAgTGF5ZXJUcmVlSG9zdCogbGF5ZXJU
cmVlSG9zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdC5nZXQoKTsg
fQotICAgIHZvaWQgZm9yY2VSZXBhaW50KCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBmb3JjZVJlcGFp
bnRBc3luYyh1aW50NjRfdCBjYWxsYmFja0lEKSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2V0UGFp
bnRpbmdFbmFibGVkKGJvb2wpIG92ZXJyaWRlOwotICAgIHZvaWQgdXBkYXRlUHJlZmVyZW5jZXMo
Y29uc3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgbWFpbkZyYW1l
Q29udGVudFNpemVDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSBvdmVycmlkZTsKLQot
ICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBncmFwaGljc0xheWVyRmFjdG9yeSgp
IG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciopIG92ZXJyaWRlOwotICAgIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVy
Rmx1c2goKSBvdmVycmlkZTsKLSAgICB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNo
SW1tZWRpYXRlbHkoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZGlkUmVjZWl2ZUNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpNZXNzYWdlRGVjb2Rl
ciYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCB2aWV3U3RhdGVEaWRDaGFuZ2UoV2ViQ29yZTo6Vmll
d1N0YXRlOjpGbGFncywgYm9vbCAvKiB3YW50c0RpZFVwZGF0ZVZpZXdTdGF0ZSAqLywgY29uc3Qg
VmVjdG9yPHVpbnQ2NF90PiYgLyogY2FsbGJhY2tJRHMgKi8pIG92ZXJyaWRlOwotICAgIHZvaWQg
YXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6
R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOwotCi0gICAgdm9pZCBsYXllckhvc3REaWRGbHVzaExh
eWVycygpIG92ZXJyaWRlOwotCi0gICAgLy8gSVBDIG1lc3NhZ2UgaGFuZGxlcnMuCi0gICAgdm9p
ZCB1cGRhdGVCYWNraW5nU3RvcmVTdGF0ZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBi
b29sIHJlc3BvbmRJbW1lZGlhdGVseSwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGNvbnN0IFdl
YkNvcmU6OkludFNpemUmLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kUGFpbnRpbmcoKTsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVzdW1lUGFpbnRpbmcoKTsKLQotICAgIHZvaWQgc2VuZERpZFVwZGF0ZUJhY2tpbmdT
dG9yZVN0YXRlKCk7Ci0KLSAgICB2b2lkIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUo
V2ViQ29yZTo6R3JhcGhpY3NMYXllciopOwotICAgIHZvaWQgZXhpdEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlU29vbigpOwotICAgIGJvb2wgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2Rl
UGVuZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZXhpdENvbXBvc2l0aW5nVGltZXIuaXNBY3RpdmUo
KTsgfQotICAgIHZvaWQgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgeyB9Ci0KLSAg
ICB1aW50NjRfdCBtX2JhY2tpbmdTdG9yZVN0YXRlSUQ7Ci0KLSAgICAvLyBXaGV0aGVyIHBhaW50
aW5nIGlzIGVuYWJsZWQuIElmIHBhaW50aW5nIGlzIGRpc2FibGVkLCBhbnkgY2FsbHMgdG8gc2V0
TmVlZHNEaXNwbGF5IGFuZCBzY3JvbGwgYXJlIGlnbm9yZWQuCi0gICAgYm9vbCBtX2lzUGFpbnRp
bmdFbmFibGVkOwotCi0gICAgLy8gV2hldGhlciB3ZSdyZSBjdXJyZW50bHkgcHJvY2Vzc2luZyBh
biBVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSBtZXNzYWdlLgotICAgIGJvb2wgbV9pblVwZGF0ZUJh
Y2tpbmdTdG9yZVN0YXRlOwotCi0gICAgLy8gV2hlbiB0cnVlLCB3ZSBzaG91bGQgc2VuZCBhbiBV
cGRhdGVCYWNraW5nU3RvcmVTdGF0ZSBtZXNzYWdlIGluc3RlYWQgb2YgYW55IG90aGVyIG1lc3Nh
Z2VzCi0gICAgLy8gd2Ugbm9ybWFsbHkgc2VuZCB0byB0aGUgVUkgcHJvY2Vzcy4KLSAgICBib29s
IG1fc2hvdWxkU2VuZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlOwotCi0gICAgLy8gVHJ1ZSBi
ZXR3ZWVuIHNlbmRpbmcgdGhlICdlbnRlciBjb21wb3NpdGluZycgbWVzc2FnZXMsIGFuZCB0aGUg
J2V4aXQgY29tcG9zaXRpbmcnIG1lc3NhZ2UuCi0gICAgYm9vbCBtX2NvbXBvc2l0aW5nQWNjb3Jk
aW5nVG9Qcm94eU1lc3NhZ2VzOwotCi0gICAgLy8gV2hlbiB0cnVlLCB3ZSBtYWludGFpbiB0aGUg
bGF5ZXIgdHJlZSBpbiBpdHMgY3VycmVudCBzdGF0ZSBieSBub3QgbGVhdmluZyBhY2NlbGVyYXRl
ZCBjb21wb3NpdGluZyBtb2RlCi0gICAgLy8gYW5kIG5vdCBzY2hlZHVsaW5nIGxheWVyIGZsdXNo
ZXMuCi0gICAgYm9vbCBtX2xheWVyVHJlZVN0YXRlSXNGcm96ZW47Ci0KLSAgICAvLyBUcnVlIHdo
ZW4gd2Ugd2VyZSBhc2tlZCB0byBleGl0IGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIG1vZGUgYnV0
IGNvdWxkbid0IGJlY2F1c2UgbGF5ZXIgdHJlZQotICAgIC8vIHN0YXRlIHdhcyBmcm96ZW4uCi0g
ICAgYm9vbCBtX3dhbnRzVG9FeGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGU7Ci0KLSAgICAv
LyBXaGV0aGVyIHBhaW50aW5nIGlzIHN1c3BlbmRlZC4gV2UnbGwgc3RpbGwga2VlcCB0cmFjayBv
ZiB0aGUgZGlydHkgcmVnaW9uIGJ1dCB3ZQotICAgIC8vIHdvbid0IHBhaW50IHVudGlsIHBhaW50
aW5nIGhhcyByZXN1bWVkIGFnYWluLgotICAgIGJvb2wgbV9pc1BhaW50aW5nU3VzcGVuZGVkOwot
Ci0gICAgUnVuTG9vcDo6VGltZXI8Q29vcmRpbmF0ZWREcmF3aW5nQXJlYT4gbV9leGl0Q29tcG9z
aXRpbmdUaW1lcjsKLQotICAgIC8vIFRoZSBsYXllciB0cmVlIGhvc3QgdGhhdCBoYW5kbGVzIGFj
Y2VsZXJhdGVkIGNvbXBvc2l0aW5nLgotICAgIFJlZlB0cjxMYXllclRyZWVIb3N0PiBtX2xheWVy
VHJlZUhvc3Q7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKLQotI2VuZGlmIC8vIENvb3JkaW5hdGVkRHJhd2luZ0FyZWFf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdB
cmVhLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5j
cHAKaW5kZXggYzEwM2UzZi4uMjIzYjYzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuY3BwCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVk
ZSAiVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEuaCIKICNlbHNlCiAjaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTX01VTFRJUFJPQ0VTUykKLSNpbmNsdWRlICJDb29yZGluYXRlZERyYXdp
bmdBcmVhLmgiCisjaW5jbHVkZSAiQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5oIgogI2Vsc2UKICNp
bmNsdWRlICJEcmF3aW5nQXJlYUltcGwuaCIKICNlbmRpZgpAQCAtNjIsNyArNjIsNyBAQCBzdGQ6
OnVuaXF1ZV9wdHI8RHJhd2luZ0FyZWE+IERyYXdpbmdBcmVhOjpjcmVhdGUoV2ViUGFnZSYgd2Vi
UGFnZSwgY29uc3QgV2ViUGFnZQogI2Vsc2UKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Nf
TVVMVElQUk9DRVNTKQogICAgIGNhc2UgRHJhd2luZ0FyZWFUeXBlQ29vcmRpbmF0ZWQ6Ci0gICAg
ICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENvb3JkaW5hdGVkRHJhd2luZ0FyZWE+KHdlYlBh
Z2UsIHBhcmFtZXRlcnMpOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBY2NlbGVy
YXRlZERyYXdpbmdBcmVhPih3ZWJQYWdlLCBwYXJhbWV0ZXJzKTsKICNlbHNlCiAgICAgY2FzZSBE
cmF3aW5nQXJlYVR5cGVJbXBsOgogICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxEcmF3
aW5nQXJlYUltcGw+KHdlYlBhZ2UsIHBhcmFtZXRlcnMpOwpAQCAtNzYsOSArNzYsNiBAQCBzdGQ6
OnVuaXF1ZV9wdHI8RHJhd2luZ0FyZWE+IERyYXdpbmdBcmVhOjpjcmVhdGUoV2ViUGFnZSYgd2Vi
UGFnZSwgY29uc3QgV2ViUGFnZQogRHJhd2luZ0FyZWE6OkRyYXdpbmdBcmVhKERyYXdpbmdBcmVh
VHlwZSB0eXBlLCBXZWJQYWdlJiB3ZWJQYWdlKQogICAgIDogbV90eXBlKHR5cGUpCiAgICAgLCBt
X3dlYlBhZ2Uod2ViUGFnZSkKLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmIFBMQVRGT1JNKEdU
SykKLSAgICAsIG1fbmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKDApCi0jZW5kaWYK
IHsKICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2Fn
ZXM6OkRyYXdpbmdBcmVhOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fd2ViUGFnZS5wYWdlSUQo
KSwgKnRoaXMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0RyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJh
d2luZ0FyZWEuaAppbmRleCBjMjlkNGQyLi4wMmI0MDM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaApAQCAtMTQ2LDggKzE0Niw4IEBAIHBy
b3RlY3RlZDoKICAgICBEcmF3aW5nQXJlYVR5cGUgbV90eXBlOwogICAgIFdlYlBhZ2UmIG1fd2Vi
UGFnZTsKIAotI2lmIFVTRShURVhUVVJFX01BUFBFUikgJiYgUExBVEZPUk0oR1RLKQotICAgIHVp
bnQ2NF90IG1fbmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nOworI2lmIFBMQVRGT1JN
KEdUSykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIHVpbnQ2NF90IG1fbmF0aXZlU3VyZmFj
ZUhhbmRsZUZvckNvbXBvc2l0aW5nIHsgMCB9OwogI2VuZGlmCiAKIHByaXZhdGU6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3Bw
CmluZGV4IDY3MzMxMDIuLmM2OGEzZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwCkBAIC0yNywxNSArMjcsMTMgQEAK
ICNpbmNsdWRlICJEcmF3aW5nQXJlYUltcGwuaCIKIAogI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJv
eHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKKyNpbmNsdWRlICJM
YXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSAi
VXBkYXRlSW5mby5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlICJXZWJQYWdlQ3Jl
YXRpb25QYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXNLZXlzLmgiCi0jaW5j
bHVkZSAiV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9NYWluRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2Uu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CiAKQEAgLTQ1LDM5ICs0MywxOSBAQCBu
YW1lc3BhY2UgV2ViS2l0IHsKIAogRHJhd2luZ0FyZWFJbXBsOjp+RHJhd2luZ0FyZWFJbXBsKCkK
IHsKLSAgICBpZiAobV9sYXllclRyZWVIb3N0KQotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmlu
dmFsaWRhdGUoKTsKIH0KIAogRHJhd2luZ0FyZWFJbXBsOjpEcmF3aW5nQXJlYUltcGwoV2ViUGFn
ZSYgd2ViUGFnZSwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykK
LSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfTVVMVElQUk9DRVNTKQotICAgIDogRHJhd2lu
Z0FyZWEoRHJhd2luZ0FyZWFUeXBlQ29vcmRpbmF0ZWQsIHdlYlBhZ2UpCi0jZWxzZQotICAgIDog
RHJhd2luZ0FyZWEoRHJhd2luZ0FyZWFUeXBlSW1wbCwgd2ViUGFnZSkKLSNlbmRpZgotICAgICwg
bV9iYWNraW5nU3RvcmVTdGF0ZUlEKDApCi0gICAgLCBtX2lzUGFpbnRpbmdFbmFibGVkKHRydWUp
Ci0gICAgLCBtX2luVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUoZmFsc2UpCi0gICAgLCBtX3Nob3Vs
ZFNlbmREaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZShmYWxzZSkKLSAgICAsIG1faXNXYWl0aW5n
Rm9yRGlkVXBkYXRlKGZhbHNlKQotICAgICwgbV9jb21wb3NpdGluZ0FjY29yZGluZ1RvUHJveHlN
ZXNzYWdlcyhmYWxzZSkKLSAgICAsIG1fbGF5ZXJUcmVlU3RhdGVJc0Zyb3plbihmYWxzZSkKLSAg
ICAsIG1fd2FudHNUb0V4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShmYWxzZSkKLSAgICAs
IG1faXNQYWludGluZ1N1c3BlbmRlZCghKHBhcmFtZXRlcnMudmlld1N0YXRlICYgVmlld1N0YXRl
OjpJc1Zpc2libGUpKQotICAgICwgbV9hbHdheXNVc2VDb21wb3NpdGluZyhmYWxzZSkKKyAgICA6
IEFjY2VsZXJhdGVkRHJhd2luZ0FyZWEod2ViUGFnZSwgcGFyYW1ldGVycykKICAgICAsIG1fZGlz
cGxheVRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJkRyYXdpbmdBcmVhSW1wbDo6ZGlzcGxh
eVRpbWVyRmlyZWQpCi0gICAgLCBtX2V4aXRDb21wb3NpdGluZ1RpbWVyKFJ1bkxvb3A6Om1haW4o
KSwgdGhpcywgJkRyYXdpbmdBcmVhSW1wbDo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2Rl
KQogewogfQogCiB2b2lkIERyYXdpbmdBcmVhSW1wbDo6c2V0TmVlZHNEaXNwbGF5KCkKIHsKLSAg
ICBpZiAoIW1faXNQYWludGluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmICht
X2xheWVyVHJlZUhvc3QpIHsKICAgICAgICAgQVNTRVJUKG1fZGlydHlSZWdpb24uaXNFbXB0eSgp
KTsKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVk
RGlzcGxheSgpOworICAgICAgICBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpzZXROZWVkc0Rpc3Bs
YXkoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtODYsMTggKzY0LDE3IEBAIHZvaWQg
RHJhd2luZ0FyZWFJbXBsOjpzZXROZWVkc0Rpc3BsYXkoKQogCiB2b2lkIERyYXdpbmdBcmVhSW1w
bDo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYg
KCFtX2lzUGFpbnRpbmdFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAobV9sYXll
clRyZWVIb3N0KSB7CiAgICAgICAgIEFTU0VSVChtX2RpcnR5UmVnaW9uLmlzRW1wdHkoKSk7Ci0g
ICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3Bs
YXlJblJlY3QocmVjdCk7CisgICAgICAgIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OnNldE5lZWRz
RGlzcGxheUluUmVjdChyZWN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKworICAg
IGlmICghbV9pc1BhaW50aW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgSW50UmVj
dCBkaXJ0eVJlY3QgPSByZWN0OwogICAgIGRpcnR5UmVjdC5pbnRlcnNlY3QobV93ZWJQYWdlLmJv
dW5kcygpKTsKLQogICAgIGlmIChkaXJ0eVJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
CiAKQEAgLTEwNywxOCArODQsMTcgQEAgdm9pZCBEcmF3aW5nQXJlYUltcGw6OnNldE5lZWRzRGlz
cGxheUluUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogCiB2b2lkIERyYXdpbmdBcmVhSW1wbDo6
c2Nyb2xsKGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IEludFNpemUmIHNjcm9sbERl
bHRhKQogewotICAgIGlmICghbV9pc1BhaW50aW5nRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwot
CiAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkgewogICAgICAgICBBU1NFUlQobV9zY3JvbGxSZWN0
LmlzRW1wdHkoKSk7CiAgICAgICAgIEFTU0VSVChtX3Njcm9sbE9mZnNldC5pc0VtcHR5KCkpOwog
ICAgICAgICBBU1NFUlQobV9kaXJ0eVJlZ2lvbi5pc0VtcHR5KCkpOwotCi0gICAgICAgIG1fbGF5
ZXJUcmVlSG9zdC0+c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKHNjcm9sbFJlY3QpOworICAg
ICAgICBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpzY3JvbGwoc2Nyb2xsUmVjdCwgc2Nyb2xsRGVs
dGEpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgaWYgKCFtX2lzUGFpbnRpbmdFbmFi
bGVkKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAoc2Nyb2xsUmVjdC5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtMTUxLDggKzEyNyw4IEBAIHZvaWQgRHJhd2luZ0FyZWFJbXBs
OjpzY3JvbGwoY29uc3QgSW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgSW50U2l6ZSYgc2Nyb2xs
RGVsCiAKICAgICAgICAgLy8gQW5kIGFkZCB0aGVtIGJhY2suCiAgICAgICAgIG1fZGlydHlSZWdp
b24udW5pdGUobW92ZWREaXJ0eVJlZ2lvbkluU2Nyb2xsUmVjdCk7Ci0gICAgfSAKLSAgICAKKyAg
ICB9CisKICAgICAvLyBDb21wdXRlIHRoZSBzY3JvbGwgcmVwYWludCByZWdpb24uCiAgICAgUmVn
aW9uIHNjcm9sbFJlcGFpbnRSZWdpb24gPSBzdWJ0cmFjdChzY3JvbGxSZWN0LCB0cmFuc2xhdGUo
c2Nyb2xsUmVjdCwgc2Nyb2xsRGVsdGEpKTsKIApAQCAtMTYzLDY5ICsxMzksMjUgQEAgdm9pZCBE
cmF3aW5nQXJlYUltcGw6OnNjcm9sbChjb25zdCBJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBJ
bnRTaXplJiBzY3JvbGxEZWwKICAgICBtX3Njcm9sbE9mZnNldCArPSBzY3JvbGxEZWx0YTsKIH0K
IAotdm9pZCBEcmF3aW5nQXJlYUltcGw6OnBhZ2VCYWNrZ3JvdW5kVHJhbnNwYXJlbmN5Q2hhbmdl
ZCgpCi17Ci0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0
LT5wYWdlQmFja2dyb3VuZFRyYW5zcGFyZW5jeUNoYW5nZWQoKTsKLX0KLQotdm9pZCBEcmF3aW5n
QXJlYUltcGw6OnNldExheWVyVHJlZVN0YXRlSXNGcm96ZW4oYm9vbCBpc0Zyb3plbikKLXsKLSAg
ICBpZiAobV9sYXllclRyZWVTdGF0ZUlzRnJvemVuID09IGlzRnJvemVuKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2xheWVyVHJlZVN0YXRlSXNGcm96ZW4gPSBpc0Zyb3plbjsKLQotICAgIGlm
IChtX2xheWVyVHJlZUhvc3QpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0TGF5ZXJGbHVz
aFNjaGVkdWxpbmdFbmFibGVkKCFpc0Zyb3plbik7Ci0KLSAgICBpZiAoaXNGcm96ZW4pCi0gICAg
ICAgIG1fZXhpdENvbXBvc2l0aW5nVGltZXIuc3RvcCgpOwotICAgIGVsc2UgaWYgKG1fd2FudHNU
b0V4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSkKLSAgICAgICAgZXhpdEFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlU29vbigpOwotfQotCiB2b2lkIERyYXdpbmdBcmVhSW1wbDo6Zm9yY2VS
ZXBhaW50KCkKIHsKICAgICBpZiAobV9pblVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKSB7CiAgICAg
ICAgIG1fZm9yY2VSZXBhaW50QWZ0ZXJCYWNraW5nU3RvcmVTdGF0ZVVwZGF0ZSA9IHRydWU7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0KICAgICBtX2ZvcmNlUmVwYWludEFmdGVyQmFja2luZ1N0
b3JlU3RhdGVVcGRhdGUgPSBmYWxzZTsKLSAgICBzZXROZWVkc0Rpc3BsYXkoKTsKLQotICAgIG1f
d2ViUGFnZS5sYXlvdXRJZk5lZWRlZCgpOwogCiAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkgewot
ICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBkbyB0aGUgc2FtZSB3b3JrIGFzIHRoZSBsYXll
ckhvc3REaWRGbHVzaExheWVycyBmdW5jdGlvbiBoZXJlLAotICAgICAgICAvLyBidXQgY2xlYXJs
eSBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gY2FsbCB0aGUgZnVuY3Rpb24gd2l0aCB0aGF0IG5h
bWUuCi0gICAgICAgIC8vIENvbnNpZGVyIHJlZmFjdG9yaW5nIGFuZCByZW5hbWluZyBpdC4KLSAg
ICAgICAgaWYgKG1fY29tcG9zaXRpbmdBY2NvcmRpbmdUb1Byb3h5TWVzc2FnZXMpCi0gICAgICAg
ICAgICBtX2xheWVyVHJlZUhvc3QtPmZvcmNlUmVwYWludCgpOwotICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIC8vIENhbGwgc2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJG
bHVzaChmYWxzZSkgaGVyZSB0byAKLSAgICAgICAgICAgIC8vIHByZXZlbnQgbGF5ZXJIb3N0RGlk
Rmx1c2hMYXllcnMoKSBmcm9tIGJlaW5nIGNhbGxlZCBhIHNlY29uZCB0aW1lLgotICAgICAgICAg
ICAgbV9sYXllclRyZWVIb3N0LT5zZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXll
ckZsdXNoKGZhbHNlKTsKLSAgICAgICAgICAgIGxheWVySG9zdERpZEZsdXNoTGF5ZXJzKCk7Ci0g
ICAgICAgIH0KKyAgICAgICAgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6Zm9yY2VSZXBhaW50KCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBt
X3dlYlBhZ2UubGF5b3V0SWZOZWVkZWQoKTsKICAgICBtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZSA9
IGZhbHNlOwogICAgIGRpc3BsYXkoKTsKIH0KIAotYm9vbCBEcmF3aW5nQXJlYUltcGw6OmZvcmNl
UmVwYWludEFzeW5jKHVpbnQ2NF90IGNhbGxiYWNrSUQpCi17Ci0gICAgcmV0dXJuIG1fbGF5ZXJU
cmVlSG9zdCAmJiBtX2xheWVyVHJlZUhvc3QtPmZvcmNlUmVwYWludEFzeW5jKGNhbGxiYWNrSUQp
OwotfQotCi12b2lkIERyYXdpbmdBcmVhSW1wbDo6c2V0UGFpbnRpbmdFbmFibGVkKGJvb2wgcGFp
bnRpbmdFbmFibGVkKQotewotICAgIG1faXNQYWludGluZ0VuYWJsZWQgPSBwYWludGluZ0VuYWJs
ZWQ7Ci19Ci0KIHZvaWQgRHJhd2luZ0FyZWFJbXBsOjptYWluRnJhbWVDb250ZW50U2l6ZUNoYW5n
ZWQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSkKIHsKICNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1NfVEhSRUFERUQpCkBAIC0yNTMsMTM0ICsxODUsNTAgQEAgdm9pZCBEcmF3aW5n
QXJlYUltcGw6OnVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdlYlByZWZlcmVuY2VzU3RvcmUmIHN0
b3JlKQogICAgICAgICBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKG51bGxwdHIpOwog
fQogCi12b2lkIERyYXdpbmdBcmVhSW1wbDo6bGF5ZXJIb3N0RGlkRmx1c2hMYXllcnMoKQordm9p
ZCBEcmF3aW5nQXJlYUltcGw6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKEdyYXBoaWNzTGF5ZXIq
IGdyYXBoaWNzTGF5ZXIpCiB7Ci0gICAgQVNTRVJUKG1fbGF5ZXJUcmVlSG9zdCk7Ci0KLSAgICBt
X2xheWVyVHJlZUhvc3QtPmZvcmNlUmVwYWludCgpOwotCi0gICAgaWYgKG1fc2hvdWxkU2VuZERp
ZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlICYmICFleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01v
ZGVQZW5kaW5nKCkpIHsKLSAgICAgICAgc2VuZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKCk7
CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkgeworICAgICAgICBBY2NlbGVyYXRlZERyYXdpbmdB
cmVhOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihncmFwaGljc0xheWVyKTsKKworICAgICAgICBp
ZiAoIWdyYXBoaWNzTGF5ZXIgJiYgIW1fYWx3YXlzVXNlQ29tcG9zaXRpbmcpIHsKKyAgICAgICAg
ICAgIC8vIFdlJ2xsIGV4aXQgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgbW9kZSBvbiBhIHRpbWVy
LCB0byBhdm9pZCByZS1lbnRlcmluZworICAgICAgICAgICAgLy8gY29tcG9zaXRpbmcgY29kZSB2
aWEgZGlzcGxheSgpIGFuZCBsYXlvdXQuCisgICAgICAgICAgICAvLyBJZiB3ZSdyZSBsZWF2aW5n
IGNvbXBvc2l0aW5nIG1vZGUgYmVjYXVzZSBvZiBhIHNldFNpemUsIGl0IGlzIHNhZmUgdG8KKyAg
ICAgICAgICAgIC8vIGV4aXQgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgbW9kZSByaWdodCBhd2F5
LgorICAgICAgICAgICAgaWYgKG1faW5VcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSkKKyAgICAgICAg
ICAgICAgICBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVTb29uKCk7
CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghbV9sYXllclRy
ZWVIb3N0KQorICAgIGlmICghZ3JhcGhpY3NMYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAg
QVNTRVJUKCFtX2NvbXBvc2l0aW5nQWNjb3JkaW5nVG9Qcm94eU1lc3NhZ2VzKTsKLSAgICBpZiAo
IWV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZVBlbmRpbmcoKSkgewotICAgICAgICBtX3dl
YlBhZ2Uuc2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWFQcm94eTo6RW50ZXJBY2NlbGVyYXRlZENv
bXBvc2l0aW5nTW9kZShtX2JhY2tpbmdTdG9yZVN0YXRlSUQsIG1fbGF5ZXJUcmVlSG9zdC0+bGF5
ZXJUcmVlQ29udGV4dCgpKSk7Ci0gICAgICAgIG1fY29tcG9zaXRpbmdBY2NvcmRpbmdUb1Byb3h5
TWVzc2FnZXMgPSB0cnVlOwotICAgIH0KLX0KLQotR3JhcGhpY3NMYXllckZhY3RvcnkqIERyYXdp
bmdBcmVhSW1wbDo6Z3JhcGhpY3NMYXllckZhY3RvcnkoKQotewotICAgIGlmIChtX2xheWVyVHJl
ZUhvc3QpCi0gICAgICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3QtPmdyYXBoaWNzTGF5ZXJGYWN0
b3J5KCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBEcmF3aW5nQXJlYUltcGw6OnNldFJv
b3RDb21wb3NpdGluZ0xheWVyKEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCi17Ci0gICAg
Ly8gRklYTUU6IEluc3RlYWQgb2YgdXNpbmcgbmVzdGVkIGlmIHN0YXRlbWVudHMsIHdlIHNob3Vs
ZCBrZWVwIGEgY29tcG9zaXRpbmcgc3RhdGUKLSAgICAvLyBlbnVtIGluIHRoZSBEcmF3aW5nQXJl
YUltcGwgb2JqZWN0IGFuZCBoYXZlIGEgY2hhbmdlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ1N0YXRl
IGZ1bmN0aW9uCi0gICAgLy8gdGhhdCB0YWtlcyB0aGUgbmV3IHN0YXRlLgotCi0gICAgaWYgKGdy
YXBoaWNzTGF5ZXIpIHsKLSAgICAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3QpIHsKLSAgICAgICAg
ICAgIC8vIFdlJ3JlIGFjdHVhbGx5IGVudGVyaW5nIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIG1v
ZGUuCi0gICAgICAgICAgICBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGdyYXBoaWNz
TGF5ZXIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gV2UncmUgYWxyZWFkeSBp
biBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2RlLCBidXQgdGhlIHJvb3QgY29tcG9zaXRpbmcg
bGF5ZXIgY2hhbmdlZC4KLQotICAgICAgICAgICAgbV9leGl0Q29tcG9zaXRpbmdUaW1lci5zdG9w
KCk7Ci0gICAgICAgICAgICBtX3dhbnRzVG9FeGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUg
PSBmYWxzZTsKLQotICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZW4ndCBzZW50IHRoZSBFbnRlckFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlIG1lc3NhZ2UsIG1ha2Ugc3VyZSB0aGF0IHRoZQotICAg
ICAgICAgICAgLy8gbGF5ZXIgdHJlZSBob3N0IGNhbGxzIHVzIGJhY2sgYWZ0ZXIgdGhlIG5leHQg
bGF5ZXIgZmx1c2ggc28gd2UgY2FuIHNlbmQgaXQgdGhlbi4KLSAgICAgICAgICAgIGlmICghbV9j
b21wb3NpdGluZ0FjY29yZGluZ1RvUHJveHlNZXNzYWdlcykKLSAgICAgICAgICAgICAgICBtX2xh
eWVyVHJlZUhvc3QtPnNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2go
dHJ1ZSk7Ci0KLSAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdENvbXBvc2l0aW5n
TGF5ZXIoZ3JhcGhpY3NMYXllcik7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBp
ZiAobV9sYXllclRyZWVIb3N0KSB7Ci0gICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFJv
b3RDb21wb3NpdGluZ0xheWVyKDApOwotICAgICAgICAgICAgaWYgKCFtX2Fsd2F5c1VzZUNvbXBv
c2l0aW5nKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UnbGwgZXhpdCBhY2NlbGVyYXRlZCBjb21w
b3NpdGluZyBtb2RlIG9uIGEgdGltZXIsIHRvIGF2b2lkIHJlLWVudGVyaW5nCi0gICAgICAgICAg
ICAgICAgLy8gY29tcG9zaXRpbmcgY29kZSB2aWEgZGlzcGxheSgpIGFuZCBsYXlvdXQuCi0gICAg
ICAgICAgICAgICAgLy8gSWYgd2UncmUgbGVhdmluZyBjb21wb3NpdGluZyBtb2RlIGJlY2F1c2Ug
b2YgYSBzZXRTaXplLCBpdCBpcyBzYWZlIHRvCi0gICAgICAgICAgICAgICAgLy8gZXhpdCBhY2Nl
bGVyYXRlZCBjb21wb3NpdGluZyBtb2RlIHJpZ2h0IGF3YXkuCi0gICAgICAgICAgICAgICAgaWYg
KG1faW5VcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSkKLSAgICAgICAgICAgICAgICAgICAgZXhpdEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICAgICBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVTb29uKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CisgICAgLy8gV2UncmUgYWN0dWFsbHkgZW50ZXJp
bmcgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgbW9kZS4KKyAgICBlbnRlckFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKGdyYXBoaWNzTGF5ZXIpOwogfQogCi12b2lkIERyYXdpbmdBcmVhSW1wbDo6
c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKQordm9pZCBEcmF3aW5nQXJlYUltcGw6OnVw
ZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHVpbnQ2NF90IHN0YXRlSUQsIGJvb2wgcmVzcG9uZEltbWVk
aWF0ZWx5LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYg
c2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQogewotICAgIGlmICgh
bV9sYXllclRyZWVIb3N0KQotICAgICAgICByZXR1cm47Ci0gICAgbV9sYXllclRyZWVIb3N0LT5z
Y2hlZHVsZUxheWVyRmx1c2goKTsKLX0KKyAgICBib29sIHNob3VsZFVwZGF0ZURpcnR5UmVnaW9u
ID0gc3RhdGVJRCAhPSBtX2JhY2tpbmdTdG9yZVN0YXRlSUQgJiYgIW1fbGF5ZXJUcmVlSG9zdDsK
KyAgICBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjp1cGRhdGVCYWNraW5nU3RvcmVTdGF0ZShzdGF0
ZUlELCByZXNwb25kSW1tZWRpYXRlbHksIGRldmljZVNjYWxlRmFjdG9yLCBzaXplLCBzY3JvbGxP
ZmZzZXQpOworICAgIGlmIChzaG91bGRVcGRhdGVEaXJ0eVJlZ2lvbikKKyAgICAgICAgbV9kaXJ0
eVJlZ2lvbiA9IG1fd2ViUGFnZS5ib3VuZHMoKTsKIAotdm9pZCBEcmF3aW5nQXJlYUltcGw6OnNj
aGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoSW1tZWRpYXRlbHkoKQotewotICAgIHNjaGVkdWxl
Q29tcG9zaXRpbmdMYXllckZsdXNoKCk7CisgICAgaWYgKG1fZm9yY2VSZXBhaW50QWZ0ZXJCYWNr
aW5nU3RvcmVTdGF0ZVVwZGF0ZSkKKyAgICAgICAgZm9yY2VSZXBhaW50KCk7CiB9CiAKLXZvaWQg
RHJhd2luZ0FyZWFJbXBsOjp1cGRhdGVCYWNraW5nU3RvcmVTdGF0ZSh1aW50NjRfdCBzdGF0ZUlE
LCBib29sIHJlc3BvbmRJbW1lZGlhdGVseSwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGNvbnN0
IFdlYkNvcmU6OkludFNpemUmIHNpemUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9m
ZnNldCkKK3ZvaWQgRHJhd2luZ0FyZWFJbXBsOjpkaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSgp
CiB7Ci0gICAgQVNTRVJUKCFtX2luVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUpOwotICAgIG1faW5V
cGRhdGVCYWNraW5nU3RvcmVTdGF0ZSA9IHRydWU7Ci0KLSAgICBBU1NFUlRfQVJHKHN0YXRlSUQs
IHN0YXRlSUQgPj0gbV9iYWNraW5nU3RvcmVTdGF0ZUlEKTsKLSAgICBpZiAoc3RhdGVJRCAhPSBt
X2JhY2tpbmdTdG9yZVN0YXRlSUQpIHsKLSAgICAgICAgbV9iYWNraW5nU3RvcmVTdGF0ZUlEID0g
c3RhdGVJRDsKLSAgICAgICAgbV9zaG91bGRTZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUg
PSB0cnVlOwotCi0gICAgICAgIG1fd2ViUGFnZS5zZXREZXZpY2VTY2FsZUZhY3RvcihkZXZpY2VT
Y2FsZUZhY3Rvcik7Ci0gICAgICAgIG1fd2ViUGFnZS5zZXRTaXplKHNpemUpOwotICAgICAgICBt
X3dlYlBhZ2UubGF5b3V0SWZOZWVkZWQoKTsKLSAgICAgICAgbV93ZWJQYWdlLnNjcm9sbE1haW5G
cmFtZUlmTm90QXRNYXhTY3JvbGxQb3NpdGlvbihzY3JvbGxPZmZzZXQpOwotCi0gICAgICAgIGlm
IChtX2xheWVyVHJlZUhvc3QpCi0gICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNpemVEaWRD
aGFuZ2UobV93ZWJQYWdlLnNpemUoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fZGly
dHlSZWdpb24gPSBtX3dlYlBhZ2UuYm91bmRzKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNT
RVJUKHNpemUgPT0gbV93ZWJQYWdlLnNpemUoKSk7Ci0gICAgICAgIGlmICghbV9zaG91bGRTZW5k
RGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUpIHsKLSAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVh
ZHkgc2VudCBhIERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIG1lc3NhZ2UgZm9yIHRoaXMgc3Rh
dGUuIFdlIGhhdmUgbm90aGluZyBtb3JlIHRvIGRvLgotICAgICAgICAgICAgbV9pblVwZGF0ZUJh
Y2tpbmdTdG9yZVN0YXRlID0gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICB9Ci0KICAgICAvLyBUaGUgVUkgcHJvY2VzcyBoYXMgdXBkYXRlZCB0byBhIG5ldyBiYWNr
aW5nIHN0b3JlIHN0YXRlLiBBbnkgVXBkYXRlIG1lc3NhZ2VzIHdlIHNlbnQgYmVmb3JlCiAgICAg
Ly8gdGhpcyBwb2ludCB3aWxsIGJlIGlnbm9yZWQuIFdlIHdhaXQgdG8gc2V0IHRoaXMgdG8gZmFs
c2UgdW50aWwgYWZ0ZXIgdXBkYXRpbmcgdGhlIHBhZ2UncwogICAgIC8vIHNpemUgc28gdGhhdCBh
bnkgZGlzcGxheXMgdHJpZ2dlcmVkIGJ5IHRoZSByZWxheW91dCB3aWxsIGJlIGlnbm9yZWQuIElm
IHdlJ3JlIHN1cHBvc2VkIHRvCiAgICAgLy8gcmVzcG9uZCB0byB0aGUgVXBkYXRlQmFja2luZ1N0
b3JlU3RhdGUgbWVzc2FnZSBpbW1lZGlhdGVseSwgd2UnbGwgZG8gYSBkaXNwbGF5IGFueXdheSBp
bgogICAgIC8vIHNlbmREaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZTsgb3RoZXJ3aXNlIHdlIHNo
b3VsZG4ndCBkbyBvbmUgcmlnaHQgbm93LgogICAgIG1faXNXYWl0aW5nRm9yRGlkVXBkYXRlID0g
ZmFsc2U7Ci0KLSAgICBpZiAocmVzcG9uZEltbWVkaWF0ZWx5KSB7Ci0gICAgICAgIC8vIE1ha2Ug
c3VyZSB0byByZXN1bWUgcGFpbnRpbmcgaWYgd2UncmUgc3VwcG9zZWQgdG8gcmVzcG9uZCBpbW1l
ZGlhdGVseSwgb3RoZXJ3aXNlIHdlJ2xsIGp1c3QKLSAgICAgICAgLy8gc2VuZCBiYWNrIGFuIGVt
cHR5IFVwZGF0ZUluZm8gc3RydWN0LgotICAgICAgICBpZiAobV9pc1BhaW50aW5nU3VzcGVuZGVk
KQotICAgICAgICAgICAgcmVzdW1lUGFpbnRpbmcoKTsKLQotICAgICAgICBzZW5kRGlkVXBkYXRl
QmFja2luZ1N0b3JlU3RhdGUoKTsKLSAgICB9Ci0KLSAgICBtX2luVXBkYXRlQmFja2luZ1N0b3Jl
U3RhdGUgPSBmYWxzZTsKLSAgICBpZiAobV9mb3JjZVJlcGFpbnRBZnRlckJhY2tpbmdTdG9yZVN0
YXRlVXBkYXRlKQotICAgICAgICBmb3JjZVJlcGFpbnQoKTsKIH0KIAogdm9pZCBEcmF3aW5nQXJl
YUltcGw6OnNlbmREaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSgpCkBAIC0zODgsMzMgKzIzNiwy
MCBAQCB2b2lkIERyYXdpbmdBcmVhSW1wbDo6c2VuZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRl
KCkKICAgICBBU1NFUlQoIW1faXNXYWl0aW5nRm9yRGlkVXBkYXRlKTsKICAgICBBU1NFUlQobV9z
aG91bGRTZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUpOwogCi0gICAgbV9zaG91bGRTZW5k
RGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgPSBmYWxzZTsKLQotICAgIFVwZGF0ZUluZm8gdXBk
YXRlSW5mbzsKLQotICAgIGlmICghbV9pc1BhaW50aW5nU3VzcGVuZGVkICYmICFtX2xheWVyVHJl
ZUhvc3QpCisgICAgaWYgKCFtX2lzUGFpbnRpbmdTdXNwZW5kZWQgJiYgIW1fbGF5ZXJUcmVlSG9z
dCkgeworICAgICAgICBVcGRhdGVJbmZvIHVwZGF0ZUluZm87CiAgICAgICAgIGRpc3BsYXkodXBk
YXRlSW5mbyk7CisgICAgICAgIGlmICghbV9sYXllclRyZWVIb3N0KSB7CisgICAgICAgICAgICBt
X3Nob3VsZFNlbmREaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSA9IGZhbHNlOwogCi0gICAgTGF5
ZXJUcmVlQ29udGV4dCBsYXllclRyZWVDb250ZXh0OwotCi0gICAgaWYgKG1faXNQYWludGluZ1N1
c3BlbmRlZCB8fCBtX2xheWVyVHJlZUhvc3QpIHsKLSAgICAgICAgdXBkYXRlSW5mby52aWV3U2l6
ZSA9IG1fd2ViUGFnZS5zaXplKCk7Ci0gICAgICAgIHVwZGF0ZUluZm8uZGV2aWNlU2NhbGVGYWN0
b3IgPSBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKLQotICAgICAg
ICBpZiAobV9sYXllclRyZWVIb3N0KSB7Ci0gICAgICAgICAgICBsYXllclRyZWVDb250ZXh0ID0g
bV9sYXllclRyZWVIb3N0LT5sYXllclRyZWVDb250ZXh0KCk7Ci0KLSAgICAgICAgICAgIC8vIFdl
IGRvbid0IHdhbnQgdGhlIGxheWVyIHRyZWUgaG9zdCB0byBub3RpZnkgYWZ0ZXIgdGhlIG5leHQg
c2NoZWR1bGVkCi0gICAgICAgICAgICAvLyBsYXllciBmbHVzaCBiZWNhdXNlIHRoYXQgbWlnaHQg
ZW5kIHVwIHNlbmRpbmcgYW4gRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZQotICAgICAg
ICAgICAgLy8gbWVzc2FnZSBiYWNrIHRvIHRoZSBVSSBwcm9jZXNzLCBidXQgdGhlIHVwZGF0ZWQg
bGF5ZXIgdHJlZSBjb250ZXh0Ci0gICAgICAgICAgICAvLyB3aWxsIGJlIHNlbnQgYmFjayBpbiB0
aGUgRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgbWVzc2FnZS4KLSAgICAgICAgICAgIG1fbGF5
ZXJUcmVlSG9zdC0+c2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChm
YWxzZSk7Ci0gICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmZvcmNlUmVwYWludCgpOworICAg
ICAgICAgICAgTGF5ZXJUcmVlQ29udGV4dCBsYXllclRyZWVDb250ZXh0OworICAgICAgICAgICAg
bV93ZWJQYWdlLnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhUHJveHk6OkRpZFVwZGF0ZUJhY2tp
bmdTdG9yZVN0YXRlKG1fYmFja2luZ1N0b3JlU3RhdGVJRCwgdXBkYXRlSW5mbywgbGF5ZXJUcmVl
Q29udGV4dCkpOworICAgICAgICAgICAgbV9jb21wb3NpdGluZ0FjY29yZGluZ1RvUHJveHlNZXNz
YWdlcyA9IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCi0g
ICAgbV93ZWJQYWdlLnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhUHJveHk6OkRpZFVwZGF0ZUJh
Y2tpbmdTdG9yZVN0YXRlKG1fYmFja2luZ1N0b3JlU3RhdGVJRCwgdXBkYXRlSW5mbywgbGF5ZXJU
cmVlQ29udGV4dCkpOwotICAgIG1fY29tcG9zaXRpbmdBY2NvcmRpbmdUb1Byb3h5TWVzc2FnZXMg
PSAhbGF5ZXJUcmVlQ29udGV4dC5pc0VtcHR5KCk7CisgICAgQWNjZWxlcmF0ZWREcmF3aW5nQXJl
YTo6c2VuZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKCk7CiB9CiAKIHZvaWQgRHJhd2luZ0Fy
ZWFJbXBsOjpkaWRVcGRhdGUoKQpAQCAtNDMyLDUxICsyNjcsMTQgQEAgdm9pZCBEcmF3aW5nQXJl
YUltcGw6OmRpZFVwZGF0ZSgpCiAKIHZvaWQgRHJhd2luZ0FyZWFJbXBsOjpzdXNwZW5kUGFpbnRp
bmcoKQogewotICAgIEFTU0VSVCghbV9pc1BhaW50aW5nU3VzcGVuZGVkKTsKLQotICAgIGlmICht
X2xheWVyVHJlZUhvc3QpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cGF1c2VSZW5kZXJpbmco
KTsKLQotICAgIG1faXNQYWludGluZ1N1c3BlbmRlZCA9IHRydWU7CisgICAgQWNjZWxlcmF0ZWRE
cmF3aW5nQXJlYTo6c3VzcGVuZFBhaW50aW5nKCk7CiAgICAgbV9kaXNwbGF5VGltZXIuc3RvcCgp
OwogfQogCi12b2lkIERyYXdpbmdBcmVhSW1wbDo6cmVzdW1lUGFpbnRpbmcoKQotewotICAgIGlm
ICghbV9pc1BhaW50aW5nU3VzcGVuZGVkKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZ2V0
IGEgY2FsbCB0byByZXN1bWVQYWludGluZyB3aGVuIHBhaW50aW5nIGlzIG5vdCBzdXNwZW5kZWQu
Ci0gICAgICAgIC8vIFRoaXMgaGFwcGVucyB3aGVuIHNlbmRpbmcgYSBzeW5jaHJvbm91cyBtZXNz
YWdlIHRvIGNyZWF0ZSBhIG5ldyBwYWdlLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzg5NzY1MzE+Lgot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCi0g
ICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cmVzdW1lUmVuZGVyaW5nKCk7Ci0gICAgICAgIAotICAg
IG1faXNQYWludGluZ1N1c3BlbmRlZCA9IGZhbHNlOwotCi0gICAgLy8gRklYTUU6IFdlIHNob3Vs
ZG4ndCBhbHdheXMgcmVwYWludCBldmVyeXRoaW5nIGhlcmUuCi0gICAgc2V0TmVlZHNEaXNwbGF5
KCk7Ci19Ci0KIHZvaWQgRHJhd2luZ0FyZWFJbXBsOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlKEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCiB7Ci0gICAgbV9leGl0Q29tcG9z
aXRpbmdUaW1lci5zdG9wKCk7Ci0gICAgbV93YW50c1RvRXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlID0gZmFsc2U7Ci0KLSAgICBtX3dlYlBhZ2Uuc2VuZChNZXNzYWdlczo6RHJhd2luZ0Fy
ZWFQcm94eTo6V2lsbEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobV9iYWNraW5nU3Rv
cmVTdGF0ZUlEKSk7Ci0KLSAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9zdCk7CisgICAgQWNjZWxl
cmF0ZWREcmF3aW5nQXJlYTo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShncmFwaGlj
c0xheWVyKTsKIAotICAgIG1fbGF5ZXJUcmVlSG9zdCA9IExheWVyVHJlZUhvc3Q6OmNyZWF0ZSht
X3dlYlBhZ2UpOwotI2lmIFVTRShURVhUVVJFX01BUFBFUikgJiYgUExBVEZPUk0oR1RLKQotICAg
IGlmIChtX25hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZykKLSAgICAgICAgbV9sYXll
clRyZWVIb3N0LT5zZXROYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcobV9uYXRpdmVT
dXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcpOwotI2VuZGlmCi0gICAgaWYgKCFtX2luVXBkYXRl
QmFja2luZ1N0b3JlU3RhdGUpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0U2hvdWxkTm90
aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaCh0cnVlKTsKLQotICAgIG1fbGF5ZXJUcmVl
SG9zdC0+c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoZ3JhcGhpY3NMYXllcik7Ci0gICAgCiAgICAg
Ly8gTm9uLWNvbXBvc2l0ZWQgY29udGVudCB3aWxsIG5vdyBiZSBoYW5kbGVkIGV4Y2x1c2l2ZWx5
IGJ5IHRoZSBsYXllciB0cmVlIGhvc3QuCiAgICAgbV9kaXJ0eVJlZ2lvbiA9IFJlZ2lvbigpOwog
ICAgIG1fc2Nyb2xsUmVjdCA9IEludFJlY3QoKTsKQEAgLTUyOCwxOSArMzI2LDYgQEAgdm9pZCBE
cmF3aW5nQXJlYUltcGw6OmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpCiAgICAgfQog
fQogCi12b2lkIERyYXdpbmdBcmVhSW1wbDo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2Rl
U29vbigpCi17Ci0gICAgaWYgKG1fbGF5ZXJUcmVlU3RhdGVJc0Zyb3plbikgewotICAgICAgICBt
X3dhbnRzVG9FeGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUgPSB0cnVlOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZVBl
bmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9leGl0Q29tcG9zaXRpbmdUaW1lci5z
dGFydE9uZVNob3QoMCk7Ci19Ci0KIHZvaWQgRHJhd2luZ0FyZWFJbXBsOjpzY2hlZHVsZURpc3Bs
YXkoKQogewogICAgIEFTU0VSVCghbV9sYXllclRyZWVIb3N0KTsKQEAgLTY4MSwzMyArNDY2LDQg
QEAgdm9pZCBEcmF3aW5nQXJlYUltcGw6OmRpc3BsYXkoVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykK
ICAgICBtX2Rpc3BsYXlUaW1lci5zdG9wKCk7CiB9CiAKLXZvaWQgRHJhd2luZ0FyZWFJbXBsOjph
dHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6RnJhbWUqIGZyYW1lLCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyKiB2aWV3T3ZlcmxheVJvb3RMYXllcikKLXsKLSAgICBpZiAoIWZy
YW1lLT5pc01haW5GcmFtZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fbGF5ZXJU
cmVlSG9zdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9sYXllclRyZWVIb3N0LT5zZXRWaWV3
T3ZlcmxheVJvb3RMYXllcih2aWV3T3ZlcmxheVJvb3RMYXllcik7Ci19Ci0KLSNpZiBVU0UoVEVY
VFVSRV9NQVBQRVIpICYmIFBMQVRGT1JNKEdUSykKLXZvaWQgRHJhd2luZ0FyZWFJbXBsOjpzZXRO
YXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcodWludDY0X3QgaGFuZGxlKQotewotICAg
IG1fbmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nID0gaGFuZGxlOwotCi0gICAgaWYg
KG1fbGF5ZXJUcmVlSG9zdCkgewotICAgICAgICBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+c2V0dGlu
Z3MoKS5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCh0cnVlKTsKLSAgICAgICAgbV9s
YXllclRyZWVIb3N0LT5zZXROYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcoaGFuZGxl
KTsKLSAgICB9Ci19Ci0KLXZvaWQgRHJhd2luZ0FyZWFJbXBsOjpkZXN0cm95TmF0aXZlU3VyZmFj
ZUhhbmRsZUZvckNvbXBvc2l0aW5nKGJvb2wmIGhhbmRsZWQpCi17Ci0gICAgaGFuZGxlZCA9IHRy
dWU7Ci0gICAgc2V0TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKDApOwotfQotI2Vu
ZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oCmluZGV4IGU3YjYzNmIuLjNmY2UwYTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJl
YUltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0Fy
ZWFJbXBsLmgKQEAgLTIzLDE2ICsyMywxMyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogICovCiAKLSNpZm5kZWYgRHJhd2luZ0FyZWFJbXBsX2gKLSNkZWZpbmUgRHJhd2lu
Z0FyZWFJbXBsX2gKKyNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiRHJhd2luZ0FyZWEuaCIKLSNp
bmNsdWRlICJMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiQWNjZWxlcmF0ZWREcmF3aW5nQXJl
YS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvUmVnaW9uLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3Au
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2Ns
YXNzIEdyYXBoaWNzQ29udGV4dDsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC00MCw3ICsz
Nyw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgU2hhcmVhYmxlQml0bWFwOwogY2xhc3Mg
VXBkYXRlSW5mbzsKIAotY2xhc3MgRHJhd2luZ0FyZWFJbXBsIDogcHVibGljIERyYXdpbmdBcmVh
IHsKK2NsYXNzIERyYXdpbmdBcmVhSW1wbCBmaW5hbCA6IHB1YmxpYyBBY2NlbGVyYXRlZERyYXdp
bmdBcmVhIHsKIHB1YmxpYzoKICAgICBEcmF3aW5nQXJlYUltcGwoV2ViUGFnZSYsIGNvbnN0IFdl
YlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmKTsKICAgICB2aXJ0dWFsIH5EcmF3aW5nQXJlYUltcGwo
KTsKQEAgLTUwLDk0ICs0Nyw0MiBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5
KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2Nyb2xsKGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbERlbHRhKSBv
dmVycmlkZTsKLSAgICB2b2lkIHBhZ2VCYWNrZ3JvdW5kVHJhbnNwYXJlbmN5Q2hhbmdlZCgpIG92
ZXJyaWRlOwotICAgIHZvaWQgc2V0TGF5ZXJUcmVlU3RhdGVJc0Zyb3plbihib29sKSBvdmVycmlk
ZTsKLSAgICBib29sIGxheWVyVHJlZVN0YXRlSXNGcm96ZW4oKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBtX2xheWVyVHJlZVN0YXRlSXNGcm96ZW47IH0KLSAgICBMYXllclRyZWVIb3N0KiBsYXll
clRyZWVIb3N0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9sYXllclRyZWVIb3N0LmdldCgp
OyB9CiAgICAgdm9pZCBmb3JjZVJlcGFpbnQoKSBvdmVycmlkZTsKLSAgICBib29sIGZvcmNlUmVw
YWludEFzeW5jKHVpbnQ2NF90IGNhbGxiYWNrSUQpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBzZXRQ
YWludGluZ0VuYWJsZWQoYm9vbCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBtYWluRnJhbWVDb250ZW50
U2l6ZUNoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIG92ZXJyaWRlOwogICAgIHZvaWQg
dXBkYXRlUHJlZmVyZW5jZXMoY29uc3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYpIG92ZXJyaWRlOwog
Ci0gICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIGdyYXBoaWNzTGF5ZXJGYWN0b3J5
KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpH
cmFwaGljc0xheWVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5
ZXJGbHVzaCgpIG92ZXJyaWRlOwotICAgIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1
c2hJbW1lZGlhdGVseSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdy
YXBoaWNzTGF5ZXIoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3Zl
cnJpZGU7Ci0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpICYmIFBMQVRGT1JNKEdUSykKLSAgICB2
b2lkIHNldE5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZyh1aW50NjRfdCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBkZXN0cm95TmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKGJv
b2wmKSBvdmVycmlkZTsKLSNlbmRpZgotCi0gICAgdm9pZCBsYXllckhvc3REaWRGbHVzaExheWVy
cygpIG92ZXJyaWRlOwogCiAgICAgLy8gSVBDIG1lc3NhZ2UgaGFuZGxlcnMuCiAgICAgdm9pZCB1
cGRhdGVCYWNraW5nU3RvcmVTdGF0ZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBib29s
IHJlc3BvbmRJbW1lZGlhdGVseSwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGNvbnN0IFdlYkNv
cmU6OkludFNpemUmLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpIG92ZXJy
aWRlOwogICAgIHZvaWQgZGlkVXBkYXRlKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHN1
c3BlbmRQYWludGluZygpOwotICAgIHZpcnR1YWwgdm9pZCByZXN1bWVQYWludGluZygpOwotICAg
IAotICAgIHZvaWQgc2VuZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKCk7CiAKLSAgICB2b2lk
IGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoV2ViQ29yZTo6R3JhcGhpY3NMYXllciop
OwotICAgIHZvaWQgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlU29vbigpOwotICAgIGJv
b2wgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlUGVuZGluZygpIGNvbnN0IHsgcmV0dXJu
IG1fZXhpdENvbXBvc2l0aW5nVGltZXIuaXNBY3RpdmUoKTsgfQotICAgIHZvaWQgZXhpdEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCk7CisgICAgLy8gQWNjZWxlcmF0ZWREcmF3aW5nQXJlYQor
ICAgIHZvaWQgc3VzcGVuZFBhaW50aW5nKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZW5kRGlkVXBk
YXRlQmFja2luZ1N0b3JlU3RhdGUoKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZFVwZGF0ZUJhY2tp
bmdTdG9yZVN0YXRlKCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGVudGVyQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ01vZGUoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92ZXJyaWRlOworICAgIHZvaWQg
ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHNj
aGVkdWxlRGlzcGxheSgpOwogICAgIHZvaWQgZGlzcGxheVRpbWVyRmlyZWQoKTsKICAgICB2b2lk
IGRpc3BsYXkoKTsKICAgICB2b2lkIGRpc3BsYXkoVXBkYXRlSW5mbyYpOwogCi0gICAgdWludDY0
X3QgbV9iYWNraW5nU3RvcmVTdGF0ZUlEOwotCiAgICAgV2ViQ29yZTo6UmVnaW9uIG1fZGlydHlS
ZWdpb247CiAgICAgV2ViQ29yZTo6SW50UmVjdCBtX3Njcm9sbFJlY3Q7CiAgICAgV2ViQ29yZTo6
SW50U2l6ZSBtX3Njcm9sbE9mZnNldDsKIAotICAgIC8vIFdoZXRoZXIgcGFpbnRpbmcgaXMgZW5h
YmxlZC4gSWYgcGFpbnRpbmcgaXMgZGlzYWJsZWQsIGFueSBjYWxscyB0byBzZXROZWVkc0Rpc3Bs
YXkgYW5kIHNjcm9sbCBhcmUgaWdub3JlZC4KLSAgICBib29sIG1faXNQYWludGluZ0VuYWJsZWQ7
Ci0KLSAgICAvLyBXaGV0aGVyIHdlJ3JlIGN1cnJlbnRseSBwcm9jZXNzaW5nIGFuIFVwZGF0ZUJh
Y2tpbmdTdG9yZVN0YXRlIG1lc3NhZ2UuCi0gICAgYm9vbCBtX2luVXBkYXRlQmFja2luZ1N0b3Jl
U3RhdGU7Ci0KLSAgICAvLyBXaGVuIHRydWUsIHdlIHNob3VsZCBzZW5kIGFuIFVwZGF0ZUJhY2tp
bmdTdG9yZVN0YXRlIG1lc3NhZ2UgaW5zdGVhZCBvZiBhbnkgb3RoZXIgbWVzc2FnZXMKLSAgICAv
LyB3ZSBub3JtYWxseSBzZW5kIHRvIHRoZSBVSSBwcm9jZXNzLgotICAgIGJvb2wgbV9zaG91bGRT
ZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGU7Ci0KICAgICAvLyBXaGV0aGVyIHdlJ3JlIHdh
aXRpbmcgZm9yIGEgRGlkVXBkYXRlIG1lc3NhZ2UuIFVzZWQgZm9yIHRocm90dGxpbmcgcGFpbnRz
IHNvIHRoYXQgdGhlIAogICAgIC8vIHdlYiBwcm9jZXNzIHdvbid0IHBhaW50IG1vcmUgZnJlcXVl
bnQgdGhhbiB0aGUgVUkgcHJvY2VzcyBjYW4gaGFuZGxlLgotICAgIGJvb2wgbV9pc1dhaXRpbmdG
b3JEaWRVcGRhdGU7Ci0gICAgCi0gICAgLy8gVHJ1ZSBiZXR3ZWVuIHNlbmRpbmcgdGhlICdlbnRl
ciBjb21wb3NpdGluZycgbWVzc2FnZXMsIGFuZCB0aGUgJ2V4aXQgY29tcG9zaXRpbmcnIG1lc3Nh
Z2UuCi0gICAgYm9vbCBtX2NvbXBvc2l0aW5nQWNjb3JkaW5nVG9Qcm94eU1lc3NhZ2VzOwotCi0g
ICAgLy8gV2hlbiB0cnVlLCB3ZSBtYWludGFpbiB0aGUgbGF5ZXIgdHJlZSBpbiBpdHMgY3VycmVu
dCBzdGF0ZSBieSBub3QgbGVhdmluZyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2RlCi0gICAg
Ly8gYW5kIG5vdCBzY2hlZHVsaW5nIGxheWVyIGZsdXNoZXMuCi0gICAgYm9vbCBtX2xheWVyVHJl
ZVN0YXRlSXNGcm96ZW47Ci0KLSAgICAvLyBUcnVlIHdoZW4gd2Ugd2VyZSBhc2tlZCB0byBleGl0
IGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIG1vZGUgYnV0IGNvdWxkbid0IGJlY2F1c2UgbGF5ZXIg
dHJlZQotICAgIC8vIHN0YXRlIHdhcyBmcm96ZW4uCi0gICAgYm9vbCBtX3dhbnRzVG9FeGl0QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGU7Ci0KLSAgICAvLyBXaGV0aGVyIHBhaW50aW5nIGlzIHN1
c3BlbmRlZC4gV2UnbGwgc3RpbGwga2VlcCB0cmFjayBvZiB0aGUgZGlydHkgcmVnaW9uIGJ1dCB3
ZSAKLSAgICAvLyB3b24ndCBwYWludCB1bnRpbCBwYWludGluZyBoYXMgcmVzdW1lZCBhZ2Fpbi4K
LSAgICBib29sIG1faXNQYWludGluZ1N1c3BlbmRlZDsKLSAgICBib29sIG1fYWx3YXlzVXNlQ29t
cG9zaXRpbmc7CisgICAgYm9vbCBtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZSB7IGZhbHNlIH07CiAK
KyAgICBib29sIG1fYWx3YXlzVXNlQ29tcG9zaXRpbmcge2ZhbHNlIH07CiAgICAgYm9vbCBtX2Zv
cmNlUmVwYWludEFmdGVyQmFja2luZ1N0b3JlU3RhdGVVcGRhdGUgeyBmYWxzZSB9OwogCiAgICAg
UnVuTG9vcDo6VGltZXI8RHJhd2luZ0FyZWFJbXBsPiBtX2Rpc3BsYXlUaW1lcjsKLSAgICBSdW5M
b29wOjpUaW1lcjxEcmF3aW5nQXJlYUltcGw+IG1fZXhpdENvbXBvc2l0aW5nVGltZXI7Ci0KLSAg
ICAvLyBUaGUgbGF5ZXIgdHJlZSBob3N0IHRoYXQgaGFuZGxlcyBhY2NlbGVyYXRlZCBjb21wb3Np
dGluZy4KLSAgICBSZWZQdHI8TGF5ZXJUcmVlSG9zdD4gbV9sYXllclRyZWVIb3N0OwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBEcmF3aW5nQXJlYUltcGxfaAo=
</data>
<flag name="review"
          id="306529"
          type_id="1"
          status="+"
          setter="zan"
    />
          </attachment>
      

    </bug>

</bugzilla>