<?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>100391</bug_id>
          
          <creation_ts>2012-10-25 10:08:48 -0700</creation_ts>
          <short_desc>[EFL][WK2] Move non-API classes out of UIProcess/API/efl</short_desc>
          <delta_ts>2012-10-25 10:56:46 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>gyuyoung.kim</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>rakuco</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>750953</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-25 10:08:48 -0700</bug_when>
    <thetext>We should move non-API classes from UIProcess/API/efl to UIProcess/efl, similarly to Qt port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750956</commentid>
    <comment_count>1</comment_count>
      <attachid>170681</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-25 10:11:34 -0700</bug_when>
    <thetext>Created attachment 170681
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751012</commentid>
    <comment_count>2</comment_count>
      <attachid>170681</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-25 10:56:42 -0700</bug_when>
    <thetext>Comment on attachment 170681
Patch

Clearing flags on attachment: 170681

Committed r132502: &lt;http://trac.webkit.org/changeset/132502&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751013</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-25 10:56:46 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170681</attachid>
            <date>2012-10-25 10:11:34 -0700</date>
            <delta_ts>2012-10-25 10:56:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>100391_reorg.patch</filename>
            <type>text/plain</type>
            <size>114088</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAyNjI1YTM5Li5kYmIxMGY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTU2
IEBACiAyMDEyLTEwLTI1ICBDaHJpc3RvcGhlIER1bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBpbnRl
bC5jb20+CiAKKyAgICAgICAgW0VGTF1bV0syXSBNb3ZlIG5vbi1BUEkgY2xhc3NlcyBvdXQgb2Yg
VUlQcm9jZXNzL0FQSS9lZmwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwMDM5MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE1vdmUgbm9uLUFQSSBjbGFzc2VzIGZyb20gVUlQcm9jZXNzL0FQSS9lZmwgdG8K
KyAgICAgICAgVUlQcm9jZXNzL2VmbCBmb3IgY2xhcml0eS4KKworICAgICAgICAqIFBsYXRmb3Jt
RWZsLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvQmF0dGVyeVByb3ZpZGVyLmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0JhdHRlcnlQcm92
aWRlci5jcHAuCisgICAgICAgICh0b0JhdHRlcnlQcm92aWRlcik6CisgICAgICAgIChzdGFydFVw
ZGF0aW5nQ2FsbGJhY2spOgorICAgICAgICAoc3RvcFVwZGF0aW5nQ2FsbGJhY2spOgorICAgICAg
ICAoQmF0dGVyeVByb3ZpZGVyOjp+QmF0dGVyeVByb3ZpZGVyKToKKyAgICAgICAgKEJhdHRlcnlQ
cm92aWRlcjo6Y3JlYXRlKToKKyAgICAgICAgKEJhdHRlcnlQcm92aWRlcjo6QmF0dGVyeVByb3Zp
ZGVyKToKKyAgICAgICAgKEJhdHRlcnlQcm92aWRlcjo6c3RhcnRVcGRhdGluZyk6CisgICAgICAg
IChCYXR0ZXJ5UHJvdmlkZXI6OnN0b3BVcGRhdGluZyk6CisgICAgICAgIChCYXR0ZXJ5UHJvdmlk
ZXI6OmRpZENoYW5nZUJhdHRlcnlTdGF0dXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvQmF0
dGVyeVByb3ZpZGVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9CYXR0ZXJ5UHJvdmlkZXIuaC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChCYXR0
ZXJ5UHJvdmlkZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvTmV0d29ya0luZm9Qcm92aWRl
ci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9OZXR3
b3JrSW5mb1Byb3ZpZGVyLmNwcC4KKyAgICAgICAgKHRvTmV0d29ya0luZm9Qcm92aWRlcik6Cisg
ICAgICAgIChzdGFydFVwZGF0aW5nQ2FsbGJhY2spOgorICAgICAgICAoc3RvcFVwZGF0aW5nQ2Fs
bGJhY2spOgorICAgICAgICAoZ2V0QmFuZHdpZHRoQ2FsbGJhY2spOgorICAgICAgICAoaXNNZXRl
cmVkQ2FsbGJhY2spOgorICAgICAgICAoTmV0d29ya0luZm9Qcm92aWRlcjo6Y3JlYXRlKToKKyAg
ICAgICAgKE5ldHdvcmtJbmZvUHJvdmlkZXI6Ok5ldHdvcmtJbmZvUHJvdmlkZXIpOgorICAgICAg
ICAoTmV0d29ya0luZm9Qcm92aWRlcjo6fk5ldHdvcmtJbmZvUHJvdmlkZXIpOgorICAgICAgICAo
TmV0d29ya0luZm9Qcm92aWRlcjo6YmFuZHdpZHRoKToKKyAgICAgICAgKE5ldHdvcmtJbmZvUHJv
dmlkZXI6Om1ldGVyZWQpOgorICAgICAgICAoTmV0d29ya0luZm9Qcm92aWRlcjo6c3RhcnRVcGRh
dGluZyk6CisgICAgICAgIChOZXR3b3JrSW5mb1Byb3ZpZGVyOjpzdG9wVXBkYXRpbmcpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9lZmwvTmV0d29ya0luZm9Qcm92aWRlci5oOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvTmV0d29ya0luZm9Qcm92aWRlci5oLgor
ICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKE5ldHdvcmtJbmZvUHJvdmlkZXIpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudEltcGwuY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuY3BwLgorICAgICAgICAo
V2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OlBhZ2VDbGllbnRJbXBs
KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6On5QYWdlQ2xpZW50SW1wbCk6Cisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp2aWV3SW1wbCk6CisgICAgICAgIChXZWJL
aXQ6OlBhZ2VDbGllbnRJbXBsOjpjcmVhdGVEcmF3aW5nQXJlYVByb3h5KToKKyAgICAgICAgKFdl
YktpdDo6UGFnZUNsaWVudEltcGw6OnNldFZpZXdOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlQ2xpZW50SW1wbDo6ZGlzcGxheVZpZXcpOgorICAgICAgICAoV2ViS2l0OjpQYWdl
Q2xpZW50SW1wbDo6c2Nyb2xsVmlldyk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBs
Ojp2aWV3U2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjppc1ZpZXdXaW5k
b3dBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6aXNWaWV3Rm9jdXNl
ZCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjppc1ZpZXdWaXNpYmxlKToKKyAg
ICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmlzVmlld0luV2luZG93KToKKyAgICAgICAg
KFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnByb2Nlc3NEaWRDcmFzaCk6CisgICAgICAgIChXZWJL
aXQ6OlBhZ2VDbGllbnRJbXBsOjpkaWRSZWxhdW5jaFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbDo6cGFnZUNsb3NlZCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGll
bnRJbXBsOjp0b29sVGlwQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBs
OjpzZXRDdXJzb3IpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c2V0Q3Vyc29y
SGlkZGVuVW50aWxNb3VzZU1vdmVzKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6
OmRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGll
bnRJbXBsOjpyZWdpc3RlckVkaXRDb21tYW5kKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVu
dEltcGw6OmNsZWFyQWxsRWRpdENvbW1hbmRzKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVu
dEltcGw6OmNhblVuZG9SZWRvKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmV4
ZWN1dGVVbmRvUmVkbyk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpjb252ZXJ0
VG9EZXZpY2VTcGFjZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpjb252ZXJ0
VG9Vc2VyU3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c2NyZWVuVG9X
aW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6d2luZG93VG9TY3JlZW4p
OgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZG9uZVdpdGhLZXlFdmVudCk6Cisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpkb25lV2l0aFRvdWNoRXZlbnQpOgorICAg
ICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlUG9wdXBNZW51UHJveHkpOgorICAg
ICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlQ29udGV4dE1lbnVQcm94eSk6Cisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpjcmVhdGVDb2xvckNob29zZXJQcm94eSk6
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzZXRGaW5kSW5kaWNhdG9yKToKKyAg
ICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZXhpdEFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnVwZGF0
ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVu
dEltcGw6OmRpZENoYW5nZVNjcm9sbGJhcnNGb3JNYWluRnJhbWUpOgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbDo6ZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZSk6CisgICAgICAgIChX
ZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpkaWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbVJlcHJl
c2VudGF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmN1c3RvbVJlcHJl
c2VudGF0aW9uWm9vbUZhY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpz
ZXRDdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpQYWdl
Q2xpZW50SW1wbDo6Zmxhc2hCYWNraW5nU3RvcmVVcGRhdGVzKToKKyAgICAgICAgKFdlYktpdDo6
UGFnZUNsaWVudEltcGw6OmZpbmRTdHJpbmdJbkN1c3RvbVJlcHJlc2VudGF0aW9uKToKKyAgICAg
ICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNvdW50U3RyaW5nTWF0Y2hlc0luQ3VzdG9tUmVw
cmVzZW50YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6dXBkYXRlVGV4
dElucHV0U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6aGFuZGxlRG93
bmxvYWRSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnBhZ2VEaWRS
ZXF1ZXN0U2Nyb2xsKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRpZENoYW5n
ZUNvbnRlbnRzU2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpkaWRSZW5k
ZXJGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpwYWdlVHJhbnNpdGlv
blZpZXdwb3J0UmVhZHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudEltcGwu
aDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1BhZ2VDbGll
bnRJbXBsLmguCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoUGFnZUNsaWVudEltcGwpOgor
ICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktp
dDo6UGFnZUNsaWVudEltcGw6OnNldFBhZ2VWaWV3cG9ydENvbnRyb2xsZXIpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9lZmwvUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbC5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9QYWdlVmlld3BvcnRDb250
cm9sbGVyQ2xpZW50RWZsLmNwcC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6
OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJD
bGllbnRFZmwpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50
RWZsOjp+UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbCk6CisgICAgICAgIChXZWJLaXQ6
OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6OmRyYXdpbmdBcmVhKToKKyAgICAgICAg
KFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbDo6c2V0UmVuZGVyZXJBY3Rp
dmUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjpk
aXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVm
bDo6dXBkYXRlVmlld3BvcnRTaXplKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29u
dHJvbGxlckNsaWVudEVmbDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCk6CisgICAgICAgIChXZWJL
aXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6OmRpZENoYW5nZUNvbnRlbnRzU2l6
ZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6OnNl
dFZpZXdwb3J0UG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9s
bGVyQ2xpZW50RWZsOjpzZXRDb250ZW50c1NjYWxlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZp
ZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbDo6ZGlkUmVzdW1lQ29udGVudCk6CisgICAgICAgIChX
ZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6OmRpZENoYW5nZVZpc2libGVD
b250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRF
Zmw6OmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VW
aWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6OnNldENvbnRyb2xsZXIpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9lZmwvUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbC5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvUGFnZVZpZXdwb3J0Q29udHJvbGxl
ckNsaWVudEVmbC5oLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFBhZ2VWaWV3cG9ydENv
bnRyb2xsZXJDbGllbnRFZmwpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9s
bGVyQ2xpZW50RWZsOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250
cm9sbGVyQ2xpZW50RWZsOjp2aWV3U2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9y
dENvbnRyb2xsZXJDbGllbnRFZmw6OnNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYktpdDo6UGFn
ZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbDo6c2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAq
IFVJUHJvY2Vzcy9lZmwvVmlicmF0aW9uUHJvdmlkZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvVmlicmF0aW9uUHJvdmlkZXIuY3BwLgorICAgICAg
ICAoRXdrX1ZpYnJhdGlvbl9DbGllbnQpOgorICAgICAgICAoRXdrX1ZpYnJhdGlvbl9DbGllbnQ6
OkV3a19WaWJyYXRpb25fQ2xpZW50KToKKyAgICAgICAgKHRvVmlicmF0aW9uUHJvdmlkZXIpOgor
ICAgICAgICAodmlicmF0ZUNhbGxiYWNrKToKKyAgICAgICAgKGNhbmNlbFZpYnJhdGlvbkNhbGxi
YWNrKToKKyAgICAgICAgKFZpYnJhdGlvblByb3ZpZGVyOjpjcmVhdGUpOgorICAgICAgICAoVmli
cmF0aW9uUHJvdmlkZXI6OlZpYnJhdGlvblByb3ZpZGVyKToKKyAgICAgICAgKFZpYnJhdGlvblBy
b3ZpZGVyOjp+VmlicmF0aW9uUHJvdmlkZXIpOgorICAgICAgICAoVmlicmF0aW9uUHJvdmlkZXI6
OnZpYnJhdGUpOgorICAgICAgICAoVmlicmF0aW9uUHJvdmlkZXI6OmNhbmNlbFZpYnJhdGlvbik6
CisgICAgICAgIChWaWJyYXRpb25Qcm92aWRlcjo6c2V0VmlicmF0aW9uQ2xpZW50Q2FsbGJhY2tz
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1ZpYnJhdGlvblByb3ZpZGVyLmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9WaWJyYXRpb25Qcm92aWRlci5o
LgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFZpYnJhdGlvblByb3ZpZGVyKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvZWZsL1dlYktpdFRleHRDaGVja2VyLmNwcDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmNwcC4KKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OmlzQ29udGludW91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZyk6CisgICAg
ICAgIChXZWJLaXQ6OmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcpOgorICAgICAgICAoV2ViS2l0
OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpndWVzc2VzRm9yV29y
ZCk6CisgICAgICAgIChXZWJLaXQ6OmxlYXJuV29yZCk6CisgICAgICAgIChXZWJLaXQ6Omlnbm9y
ZVdvcmQpOgorICAgICAgICAoV2ViS2l0OjphdmFpbGFibGVTcGVsbENoZWNraW5nTGFuZ3VhZ2Vz
KToKKyAgICAgICAgKFdlYktpdDo6dXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyk6CisgICAg
ICAgIChXZWJLaXQ6OmxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9lZmwvV2ViS2l0VGV4dENoZWNrZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1dlYktpdFRleHRDaGVja2VyLmguCisgICAgICAgIChXZWJL
aXQpOgorCisyMDEyLTEwLTI1ICBDaHJpc3RvcGhlIER1bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBp
bnRlbC5jb20+CisKICAgICAgICAgW0VGTF1bV0syXSBSZW1vdmUgc29tZSBDJ2lzbSBmcm9tIEV3
a1ZpZXcKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
MDM3MAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDBiMjZhYzMuLjAyODVkNzMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC00MSwxMyArNDEsNyBAQCBMSVNUKEFQUEVORCBX
ZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvQVBJL0Mvc291cC9XS0NvbnRleHRTb3VwLmNw
cAogICAgIFVJUHJvY2Vzcy9BUEkvQy9zb3VwL1dLU291cFJlcXVlc3RNYW5hZ2VyLmNwcAogCi0g
ICAgVUlQcm9jZXNzL0FQSS9lZmwvQmF0dGVyeVByb3ZpZGVyLmNwcAogICAgIFVJUHJvY2Vzcy9B
UEkvZWZsL0V3a1ZpZXdJbXBsLmNwcAotICAgIFVJUHJvY2Vzcy9BUEkvZWZsL1BhZ2VWaWV3cG9y
dENvbnRyb2xsZXJDbGllbnRFZmwuY3BwCi0gICAgVUlQcm9jZXNzL0FQSS9lZmwvTmV0d29ya0lu
Zm9Qcm92aWRlci5jcHAKLSAgICBVSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xpZW50SW1wbC5jcHAK
LSAgICBVSVByb2Nlc3MvQVBJL2VmbC9WaWJyYXRpb25Qcm92aWRlci5jcHAKLSAgICBVSVByb2Nl
c3MvQVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9l
d2tfYmFja19mb3J3YXJkX2xpc3QuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tf
Zm9yd2FyZF9saXN0X2l0ZW0uY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQu
Y3BwCkBAIC03MiwxOSArNjYsMjUgQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAKICAg
ICBVSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCiAKKyAgICBVSVByb2Nlc3Mv
ZWZsL0JhdHRlcnlQcm92aWRlci5jcHAKICAgICBVSVByb2Nlc3MvZWZsL0NvbnRleHRIaXN0b3J5
Q2xpZW50RWZsLmNwcAogICAgIFVJUHJvY2Vzcy9lZmwvRG93bmxvYWRNYW5hZ2VyRWZsLmNwcAog
ICAgIFVJUHJvY2Vzcy9lZmwvRmluZENsaWVudEVmbC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL0Zv
cm1DbGllbnRFZmwuY3BwCisgICAgVUlQcm9jZXNzL2VmbC9OZXR3b3JrSW5mb1Byb3ZpZGVyLmNw
cAorICAgIFVJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudEltcGwuY3BwCiAgICAgVUlQcm9jZXNzL2Vm
bC9QYWdlTG9hZENsaWVudEVmbC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL1BhZ2VQb2xpY3lDbGll
bnRFZmwuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9QYWdlVUlDbGllbnRFZmwuY3BwCisgICAgVUlQ
cm9jZXNzL2VmbC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmNwcAogICAgIFVJUHJv
Y2Vzcy9lZmwvUmVxdWVzdE1hbmFnZXJDbGllbnRFZmwuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9S
ZXNvdXJjZUxvYWRDbGllbnRFZmwuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVm
bC5jcHAKKyAgICBVSVByb2Nlc3MvZWZsL1ZpYnJhdGlvblByb3ZpZGVyLmNwcAogICAgIFVJUHJv
Y2Vzcy9lZmwvV2ViQ29udGV4dEVmbC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL1dlYkZ1bGxTY3Jl
ZW5NYW5hZ2VyUHJveHlFZmwuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94
eUVmbC5jcHAKKyAgICBVSVByb2Nlc3MvZWZsL1dlYktpdFRleHRDaGVja2VyLmNwcAogICAgIFVJ
UHJvY2Vzcy9lZmwvV2ViUGFnZVByb3h5RWZsLmNwcAogICAgIFVJUHJvY2Vzcy9lZmwvV2ViUG9w
dXBNZW51UHJveHlFZmwuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9XZWJQcmVmZXJlbmNlc0VmbC5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0JhdHRlcnlQ
cm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9CYXR0ZXJ5UHJv
dmlkZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTA3MTE1Li4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0JhdHRlcnlQcm92aWRlci5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkJhdHRlcnlQcm92aWRlci5oIgotCi0jaWYg
RU5BQkxFKEJBVFRFUllfU1RBVFVTKQotCi0jaW5jbHVkZSAiV0tBUElDYXN0LmgiCi0jaW5jbHVk
ZSAiV0tCYXR0ZXJ5TWFuYWdlci5oIgotI2luY2x1ZGUgIldLQmF0dGVyeVN0YXR1cy5oIgotI2lu
Y2x1ZGUgIldLQ29udGV4dC5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLXVzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7Ci0KLXN0YXRpYyBpbmxpbmUgQmF0dGVyeVByb3ZpZGVyKiB0b0JhdHRl
cnlQcm92aWRlcihjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxCYXR0ZXJ5UHJvdmlkZXIqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7Ci19
Ci0KLXN0YXRpYyB2b2lkIHN0YXJ0VXBkYXRpbmdDYWxsYmFjayhXS0JhdHRlcnlNYW5hZ2VyUmVm
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIHRvQmF0dGVyeVByb3ZpZGVyKGNsaWVu
dEluZm8pLT5zdGFydFVwZGF0aW5nKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0b3BVcGRhdGluZ0Nh
bGxiYWNrKFdLQmF0dGVyeU1hbmFnZXJSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci0g
ICAgdG9CYXR0ZXJ5UHJvdmlkZXIoY2xpZW50SW5mbyktPnN0b3BVcGRhdGluZygpOwotfQotCi1C
YXR0ZXJ5UHJvdmlkZXI6On5CYXR0ZXJ5UHJvdmlkZXIoKQotewotICAgIG1fcHJvdmlkZXIuc3Rv
cFVwZGF0aW5nKCk7Ci0KLSAgICBXS0JhdHRlcnlNYW5hZ2VyUmVmIHdrQmF0dGVyeU1hbmFnZXIg
PSBXS0NvbnRleHRHZXRCYXR0ZXJ5TWFuYWdlcihtX3drQ29udGV4dC5nZXQoKSk7Ci0gICAgQVNT
RVJUKHdrQmF0dGVyeU1hbmFnZXIpOwotCi0gICAgV0tCYXR0ZXJ5TWFuYWdlclNldFByb3ZpZGVy
KHdrQmF0dGVyeU1hbmFnZXIsIDApOwotfQotCi1QYXNzUmVmUHRyPEJhdHRlcnlQcm92aWRlcj4g
QmF0dGVyeVByb3ZpZGVyOjpjcmVhdGUoV0tDb250ZXh0UmVmIHdrQ29udGV4dCkKLXsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEJhdHRlcnlQcm92aWRlcih3a0NvbnRleHQpKTsKLX0KLQotQmF0
dGVyeVByb3ZpZGVyOjpCYXR0ZXJ5UHJvdmlkZXIoV0tDb250ZXh0UmVmIHdrQ29udGV4dCkKLSAg
ICA6IG1fd2tDb250ZXh0KHdrQ29udGV4dCkKLSAgICAsIG1fcHJvdmlkZXIodGhpcykKLXsKLSAg
ICBBU1NFUlQobV93a0NvbnRleHQpOwotCi0gICAgV0tCYXR0ZXJ5TWFuYWdlclJlZiB3a0JhdHRl
cnlNYW5hZ2VyID0gV0tDb250ZXh0R2V0QmF0dGVyeU1hbmFnZXIobV93a0NvbnRleHQuZ2V0KCkp
OwotICAgIEFTU0VSVCh3a0JhdHRlcnlNYW5hZ2VyKTsKLQotICAgIFdLQmF0dGVyeVByb3ZpZGVy
IHdrQmF0dGVyeVByb3ZpZGVyID0gewotICAgICAgICBrV0tCYXR0ZXJ5UHJvdmlkZXJDdXJyZW50
VmVyc2lvbiwKLSAgICAgICAgdGhpcywgLy8gY2xpZW50SW5mbwotICAgICAgICBzdGFydFVwZGF0
aW5nQ2FsbGJhY2ssCi0gICAgICAgIHN0b3BVcGRhdGluZ0NhbGxiYWNrCi0gICAgfTsKLSAgICBX
S0JhdHRlcnlNYW5hZ2VyU2V0UHJvdmlkZXIod2tCYXR0ZXJ5TWFuYWdlciwgJndrQmF0dGVyeVBy
b3ZpZGVyKTsKLX0KLQotdm9pZCBCYXR0ZXJ5UHJvdmlkZXI6OnN0YXJ0VXBkYXRpbmcoKQotewot
ICAgIG1fcHJvdmlkZXIuc3RhcnRVcGRhdGluZygpOwotfQotCi12b2lkIEJhdHRlcnlQcm92aWRl
cjo6c3RvcFVwZGF0aW5nKCkKLXsKLSAgICBtX3Byb3ZpZGVyLnN0b3BVcGRhdGluZygpOwotfQot
Ci12b2lkIEJhdHRlcnlQcm92aWRlcjo6ZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVzPiBzdGF0dXMpCi17
Ci0gICAgV0tCYXR0ZXJ5TWFuYWdlclJlZiB3a0JhdHRlcnlNYW5hZ2VyID0gV0tDb250ZXh0R2V0
QmF0dGVyeU1hbmFnZXIobV93a0NvbnRleHQuZ2V0KCkpOwotICAgIEFTU0VSVCh3a0JhdHRlcnlN
YW5hZ2VyKTsKLQotICAgIFdLUmV0YWluUHRyPFdLQmF0dGVyeVN0YXR1c1JlZj4gd2tCYXR0ZXJ5
U3RhdHVzKEFkb3B0V0ssIFdLQmF0dGVyeVN0YXR1c0NyZWF0ZShzdGF0dXMtPmNoYXJnaW5nKCks
IHN0YXR1cy0+Y2hhcmdpbmdUaW1lKCksIHN0YXR1cy0+ZGlzY2hhcmdpbmdUaW1lKCksIHN0YXR1
cy0+bGV2ZWwoKSkpOwotICAgIFdLQmF0dGVyeU1hbmFnZXJQcm92aWRlckRpZENoYW5nZUJhdHRl
cnlTdGF0dXMod2tCYXR0ZXJ5TWFuYWdlciwgdG9BUEkoZXZlbnRUeXBlLmltcGwoKSksIHdrQmF0
dGVyeVN0YXR1cy5nZXQoKSk7Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoQkFUVEVSWV9TVEFUVVMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9CYXR0ZXJ5UHJv
dmlkZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0JhdHRlcnlQcm92aWRl
ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODI5ZDdlLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0JhdHRlcnlQcm92aWRlci5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRl
bCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBC
YXR0ZXJ5UHJvdmlkZXJfaAotI2RlZmluZSBCYXR0ZXJ5UHJvdmlkZXJfaAotCi0jaWYgRU5BQkxF
KEJBVFRFUllfU1RBVFVTKQotCi0jaW5jbHVkZSAiQmF0dGVyeVByb3ZpZGVyRWZsLmgiCi0jaW5j
bHVkZSAiQmF0dGVyeVByb3ZpZGVyRWZsQ2xpZW50LmgiCi0jaW5jbHVkZSAiQmF0dGVyeVN0YXR1
cy5oIgotI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCi0jaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2Uu
aD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
Y2xhc3MgQmF0dGVyeVByb3ZpZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8QmF0dGVyeVByb3ZpZGVy
PiwgcHVibGljIFdlYkNvcmU6OkJhdHRlcnlQcm92aWRlckVmbENsaWVudCB7Ci1wdWJsaWM6Ci0g
ICAgdmlydHVhbCB+QmF0dGVyeVByb3ZpZGVyKCk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8QmF0
dGVyeVByb3ZpZGVyPiBjcmVhdGUoV0tDb250ZXh0UmVmKTsKLQotICAgIHZvaWQgc3RhcnRVcGRh
dGluZygpOwotICAgIHZvaWQgc3RvcFVwZGF0aW5nKCk7Ci0KLXByaXZhdGU6Ci0gICAgQmF0dGVy
eVByb3ZpZGVyKFdLQ29udGV4dFJlZik7Ci0KLSAgICAvLyBCYXR0ZXJ5UHJvdmlkZXJFZmxDbGll
bnQgaW50ZXJmYWNlLgotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VCYXR0ZXJ5U3RhdHVzKGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkJhdHRlcnlT
dGF0dXM+KTsKLQotICAgIFdLUmV0YWluUHRyPFdLQ29udGV4dFJlZj4gbV93a0NvbnRleHQ7Ci0g
ICAgV2ViQ29yZTo6QmF0dGVyeVByb3ZpZGVyRWZsIG1fcHJvdmlkZXI7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShCQVRURVJZX1NUQVRVUykKLQotI2Vu
ZGlmIC8vIEJhdHRlcnlQcm92aWRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9OZXR3b3JrSW5mb1Byb3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL05ldHdvcmtJbmZvUHJvdmlkZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBmNTQ1NmY5Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL05ldHdvcmtJbmZvUHJvdmlkZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTE2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJOZXR3b3JrSW5mb1Byb3ZpZGVyLmgiCi0KLSNpZiBFTkFCTEUoTkVUV09SS19JTkZP
KQotCi0jaW5jbHVkZSAiV0tDb250ZXh0LmgiCi0jaW5jbHVkZSAiV0tOZXR3b3JrSW5mb01hbmFn
ZXIuaCIKLSNpbmNsdWRlIDxOb3RJbXBsZW1lbnRlZC5oPgotCi11c2luZyBuYW1lc3BhY2UgV2Vi
S2l0OwotCi1zdGF0aWMgaW5saW5lIE5ldHdvcmtJbmZvUHJvdmlkZXIqIHRvTmV0d29ya0luZm9Q
cm92aWRlcihjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxOZXR3b3JrSW5mb1Byb3ZpZGVyKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOwot
fQotCi1zdGF0aWMgdm9pZCBzdGFydFVwZGF0aW5nQ2FsbGJhY2soV0tOZXR3b3JrSW5mb01hbmFn
ZXJSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgdG9OZXR3b3JrSW5mb1Byb3Zp
ZGVyKGNsaWVudEluZm8pLT5zdGFydFVwZGF0aW5nKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0b3BV
cGRhdGluZ0NhbGxiYWNrKFdLTmV0d29ya0luZm9NYW5hZ2VyUmVmLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKQotewotICAgIHRvTmV0d29ya0luZm9Qcm92aWRlcihjbGllbnRJbmZvKS0+c3RvcFVw
ZGF0aW5nKCk7Ci19Ci0KLXN0YXRpYyBkb3VibGUgZ2V0QmFuZHdpZHRoQ2FsbGJhY2soV0tOZXR3
b3JrSW5mb01hbmFnZXJSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCi17Ci0gICAgcmV0dXJu
IHRvTmV0d29ya0luZm9Qcm92aWRlcihjbGllbnRJbmZvKS0+YmFuZHdpZHRoKCk7Ci19Ci0KLXN0
YXRpYyBib29sIGlzTWV0ZXJlZENhbGxiYWNrKFdLTmV0d29ya0luZm9NYW5hZ2VyUmVmLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIHJldHVybiB0b05ldHdvcmtJbmZvUHJvdmlkZXIo
Y2xpZW50SW5mbyktPm1ldGVyZWQoKTsKLX0KLQotUGFzc1JlZlB0cjxOZXR3b3JrSW5mb1Byb3Zp
ZGVyPiBOZXR3b3JrSW5mb1Byb3ZpZGVyOjpjcmVhdGUoV0tDb250ZXh0UmVmIHdrQ29udGV4dCkK
LXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IE5ldHdvcmtJbmZvUHJvdmlkZXIod2tDb250ZXh0
KSk7Ci19Ci0KLU5ldHdvcmtJbmZvUHJvdmlkZXI6Ok5ldHdvcmtJbmZvUHJvdmlkZXIoV0tDb250
ZXh0UmVmIHdrQ29udGV4dCkKLSAgICA6IG1fd2tDb250ZXh0KHdrQ29udGV4dCkKLXsKLSAgICBB
U1NFUlQod2tDb250ZXh0KTsKLQotICAgIFdLTmV0d29ya0luZm9NYW5hZ2VyUmVmIHdrTmV0d29y
a0luZm9NYW5hZ2VyID0gV0tDb250ZXh0R2V0TmV0d29ya0luZm9NYW5hZ2VyKG1fd2tDb250ZXh0
LmdldCgpKTsKLSAgICBBU1NFUlQod2tOZXR3b3JrSW5mb01hbmFnZXIpOwotCi0gICAgV0tOZXR3
b3JrSW5mb1Byb3ZpZGVyIHdrTmV0d29ya0luZm9Qcm92aWRlciA9IHsKLSAgICAgICAga1dLTmV0
d29ya0luZm9Qcm92aWRlckN1cnJlbnRWZXJzaW9uLAotICAgICAgICB0aGlzLCAvLyBjbGllbnRJ
bmZvCi0gICAgICAgIHN0YXJ0VXBkYXRpbmdDYWxsYmFjaywKLSAgICAgICAgc3RvcFVwZGF0aW5n
Q2FsbGJhY2ssCi0gICAgICAgIGdldEJhbmR3aWR0aENhbGxiYWNrLAotICAgICAgICBpc01ldGVy
ZWRDYWxsYmFjawotICAgIH07Ci0gICAgV0tOZXR3b3JrSW5mb01hbmFnZXJTZXRQcm92aWRlcih3
a05ldHdvcmtJbmZvTWFuYWdlciwgJndrTmV0d29ya0luZm9Qcm92aWRlcik7Ci19Ci0KLU5ldHdv
cmtJbmZvUHJvdmlkZXI6On5OZXR3b3JrSW5mb1Byb3ZpZGVyKCkKLXsKLSAgICBXS05ldHdvcmtJ
bmZvTWFuYWdlclJlZiB3a05ldHdvcmtJbmZvTWFuYWdlciA9IFdLQ29udGV4dEdldE5ldHdvcmtJ
bmZvTWFuYWdlcihtX3drQ29udGV4dC5nZXQoKSk7Ci0gICAgQVNTRVJUKHdrTmV0d29ya0luZm9N
YW5hZ2VyKTsKLQotICAgIFdLTmV0d29ya0luZm9NYW5hZ2VyU2V0UHJvdmlkZXIod2tOZXR3b3Jr
SW5mb01hbmFnZXIsIDApOwotfQotCi1kb3VibGUgTmV0d29ya0luZm9Qcm92aWRlcjo6YmFuZHdp
ZHRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcm92aWRlci5iYW5kd2lkdGgoKTsKLX0KLQot
Ym9vbCBOZXR3b3JrSW5mb1Byb3ZpZGVyOjptZXRlcmVkKCkgY29uc3QKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIE5ldHdvcmtJbmZvUHJv
dmlkZXI6OnN0YXJ0VXBkYXRpbmcoKQotewotICAgIG1fcHJvdmlkZXIuc3RhcnRVcGRhdGluZygp
OwotfQotCi12b2lkIE5ldHdvcmtJbmZvUHJvdmlkZXI6OnN0b3BVcGRhdGluZygpCi17Ci0gICAg
bV9wcm92aWRlci5zdG9wVXBkYXRpbmcoKTsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShORVRXT1JL
X0lORk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9OZXR3
b3JrSW5mb1Byb3ZpZGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9OZXR3
b3JrSW5mb1Byb3ZpZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NjMxMTku
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvTmV0d29ya0lu
Zm9Qcm92aWRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBOZXR3b3JrSW5mb1Byb3ZpZGVyX2gKLSNkZWZpbmUgTmV0d29ya0lu
Zm9Qcm92aWRlcl9oCi0KLSNpZiBFTkFCTEUoTkVUV09SS19JTkZPKQotCi0jaW5jbHVkZSA8TmV0
d29ya0luZm9DbGllbnQuaD4KLSNpbmNsdWRlIDxOZXR3b3JrSW5mb1Byb3ZpZGVyRWZsLmg+Ci0j
aW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KLSNpbmNsdWRlIDxXZWJLaXQyL1dLUmV0YWluUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0K
LWNsYXNzIE5ldHdvcmtJbmZvUHJvdmlkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxOZXR3b3JrSW5m
b1Byb3ZpZGVyPiwgcHVibGljIFdlYkNvcmU6Ok5ldHdvcmtJbmZvQ2xpZW50IHsKLXB1YmxpYzoK
LSAgICB2aXJ0dWFsIH5OZXR3b3JrSW5mb1Byb3ZpZGVyKCk7Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8TmV0d29ya0luZm9Qcm92aWRlcj4gY3JlYXRlKFdLQ29udGV4dFJlZik7Ci0KLSAgICAvLyBO
ZXR3b3JrSW5mb0NsaWVudCBpbnRlcmZhY2UuCi0gICAgdmlydHVhbCBkb3VibGUgYmFuZHdpZHRo
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIG1ldGVyZWQoKSBjb25zdDsKLQotICAgIHZpcnR1
YWwgdm9pZCBzdGFydFVwZGF0aW5nKCk7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3BVcGRhdGluZygp
OwotCi1wcml2YXRlOgotICAgIE5ldHdvcmtJbmZvUHJvdmlkZXIoV0tDb250ZXh0UmVmKTsKLQot
ICAgIFdLUmV0YWluUHRyPFdLQ29udGV4dFJlZj4gbV93a0NvbnRleHQ7Ci0gICAgV2ViQ29yZTo6
TmV0d29ya0luZm9Qcm92aWRlckVmbCBtX3Byb3ZpZGVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19JTkZPKQotCi0jZW5kaWYgLy8gTmV0
d29ya0luZm9Qcm92aWRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9QYWdlQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9QYWdlQ2xpZW50SW1wbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUz
NTY1ZWIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvUGFn
ZUNsaWVudEltcGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzM4ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcwotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGFnZUNsaWVudEltcGwuaCIKLQotI2luY2x1ZGUgIkRy
YXdpbmdBcmVhUHJveHlJbXBsLmgiCi0jaW5jbHVkZSAiRXdrVmlld0ltcGwuaCIKLSNpbmNsdWRl
ICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
LSNpbmNsdWRlICJXZWJDb250ZXh0LmgiCi0jaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVQcm94eS5o
IgotI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgot
I2luY2x1ZGUgIldlYlBvcHVwTWVudVByb3h5RWZsLmgiCi0jaW5jbHVkZSAiV2ViUHJlZmVyZW5j
ZXMuaCIKLSNpbmNsdWRlICJld2tfY29udGV4dC5oIgotI2luY2x1ZGUgImV3a19jb250ZXh0X3By
aXZhdGUuaCIKLSNpbmNsdWRlICJld2tfZG93bmxvYWRfam9iLmgiCi0jaW5jbHVkZSAiZXdrX2Rv
d25sb2FkX2pvYl9wcml2YXRlLmgiCi0jaW5jbHVkZSAiZXdrX3ZpZXcuaCIKLQotI2lmIFVTRShU
SUxFRF9CQUNLSU5HX1NUT1JFKQotI2luY2x1ZGUgIlBhZ2VWaWV3cG9ydENvbnRyb2xsZXIuaCIK
LSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLVBhZ2VDbGllbnRJbXBsOjpQYWdlQ2xpZW50SW1wbChFd2tWaWV3SW1wbCogdmlld0ltcGwp
Ci0gICAgOiBtX3ZpZXdJbXBsKHZpZXdJbXBsKQotewotfQotCi1QYWdlQ2xpZW50SW1wbDo6flBh
Z2VDbGllbnRJbXBsKCkKLXsKLX0KLQotRXdrVmlld0ltcGwqIFBhZ2VDbGllbnRJbXBsOjp2aWV3
SW1wbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdmlld0ltcGw7Ci19Ci0KLS8vIFBhZ2VDbGll
bnQKLVBhc3NPd25QdHI8RHJhd2luZ0FyZWFQcm94eT4gUGFnZUNsaWVudEltcGw6OmNyZWF0ZURy
YXdpbmdBcmVhUHJveHkoKQotewotICAgIHJldHVybiBEcmF3aW5nQXJlYVByb3h5SW1wbDo6Y3Jl
YXRlKG1fdmlld0ltcGwtPnBhZ2UoKSk7Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OnNldFZp
ZXdOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKLXsKLSAgICBtX3Zp
ZXdJbXBsLT5yZWRyYXdSZWdpb24ocmVjdCk7Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmRp
c3BsYXlWaWV3KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBhZ2VDbGll
bnRJbXBsOjpzY3JvbGxWaWV3KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNv
bnN0IFdlYkNvcmU6OkludFNpemUmKQotewotICAgIHNldFZpZXdOZWVkc0Rpc3BsYXkoc2Nyb2xs
UmVjdCk7Ci19Ci0KLVdlYkNvcmU6OkludFNpemUgUGFnZUNsaWVudEltcGw6OnZpZXdTaXplKCkK
LXsKLSAgICByZXR1cm4gbV92aWV3SW1wbC0+c2l6ZSgpOwotfQotCi1ib29sIFBhZ2VDbGllbnRJ
bXBsOjppc1ZpZXdXaW5kb3dBY3RpdmUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUGFnZUNsaWVudEltcGw6OmlzVmlld0ZvY3VzZWQoKQot
ewotICAgIHJldHVybiBtX3ZpZXdJbXBsLT5pc0ZvY3VzZWQoKTsKLX0KLQotYm9vbCBQYWdlQ2xp
ZW50SW1wbDo6aXNWaWV3VmlzaWJsZSgpCi17Ci0gICAgcmV0dXJuIG1fdmlld0ltcGwtPmlzVmlz
aWJsZSgpOwotfQotCi1ib29sIFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdJbldpbmRvdygpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQYWdlQ2xp
ZW50SW1wbDo6cHJvY2Vzc0RpZENyYXNoKCkKLXsKLSAgICAvLyBDaGVjayBpZiBsb2FkaW5nIHdh
cyBvbmdvaW5nLCB3aGVuIHdlYiBwcm9jZXNzIGNyYXNoZWQuCi0gICAgZG91YmxlIGxvYWRQcm9n
cmVzcyA9IGV3a192aWV3X2xvYWRfcHJvZ3Jlc3NfZ2V0KG1fdmlld0ltcGwtPnZpZXcoKSk7Ci0g
ICAgaWYgKGxvYWRQcm9ncmVzcyA+PSAwICYmIGxvYWRQcm9ncmVzcyA8IDEpCi0gICAgICAgIG1f
dmlld0ltcGwtPmluZm9ybUxvYWRQcm9ncmVzcygxKTsKLQotICAgIG1fdmlld0ltcGwtPmluZm9y
bVdlYlByb2Nlc3NDcmFzaGVkKCk7Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmRpZFJlbGF1
bmNoUHJvY2VzcygpCi17Ci0gICAgY29uc3QgY2hhciogdGhlbWVQYXRoID0gbV92aWV3SW1wbC0+
dGhlbWVQYXRoKCk7Ci0gICAgaWYgKHRoZW1lUGF0aCkKLSAgICAgICAgbV92aWV3SW1wbC0+cGFn
ZSgpLT5zZXRUaGVtZVBhdGgodGhlbWVQYXRoKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6
cGFnZUNsb3NlZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBQYWdlQ2xp
ZW50SW1wbDo6dG9vbFRpcENoYW5nZWQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBuZXdU
b29sVGlwKQotewotICAgIG1fdmlld0ltcGwtPmluZm9ybVRvb2x0aXBUZXh0Q2hhbmdlKG5ld1Rv
b2xUaXApOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29y
JiBjdXJzb3IpCi17Ci0gICAgbV92aWV3SW1wbC0+c2V0Q3Vyc29yKGN1cnNvcik7Ci19Ci0KLXZv
aWQgUGFnZUNsaWVudEltcGw6OnNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmRpZENo
YW5nZVZpZXdwb3J0UHJvcGVydGllcyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMm
IGF0dHIpCi17Ci0jaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgbV9wYWdlVmlld3Bv
cnRDb250cm9sbGVyLT5kaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoYXR0cik7Ci0jZWxzZQot
ICAgIFVOVVNFRF9QQVJBTShhdHRyKTsKLSNlbmRpZgotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBs
OjpyZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4gY29t
bWFuZCwgV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvIHVuZG9PclJlZG8pCi17Ci0gICAgbV91bmRv
Q29udHJvbGxlci5yZWdpc3RlckVkaXRDb21tYW5kKGNvbW1hbmQsIHVuZG9PclJlZG8pOwotfQot
Ci12b2lkIFBhZ2VDbGllbnRJbXBsOjpjbGVhckFsbEVkaXRDb21tYW5kcygpCi17Ci0gICAgbV91
bmRvQ29udHJvbGxlci5jbGVhckFsbEVkaXRDb21tYW5kcygpOwotfQotCi1ib29sIFBhZ2VDbGll
bnRJbXBsOjpjYW5VbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8gdW5kb09yUmVkbykK
LXsKLSAgICByZXR1cm4gbV91bmRvQ29udHJvbGxlci5jYW5VbmRvUmVkbyh1bmRvT3JSZWRvKTsK
LX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZXhlY3V0ZVVuZG9SZWRvKFdlYlBhZ2VQcm94eTo6
VW5kb09yUmVkbyB1bmRvT3JSZWRvKQotewotICAgIG1fdW5kb0NvbnRyb2xsZXIuZXhlY3V0ZVVu
ZG9SZWRvKHVuZG9PclJlZG8pOwotfQotCi1GbG9hdFJlY3QgUGFnZUNsaWVudEltcGw6OmNvbnZl
cnRUb0RldmljZVNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgdmlld1JlY3QpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdmlld1JlY3Q7Ci19Ci0KLUZsb2F0UmVjdCBQYWdlQ2xp
ZW50SW1wbDo6Y29udmVydFRvVXNlclNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgdmlld1JlY3QpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdmlld1JlY3Q7Ci19Ci0KLUludFBv
aW50IFBhZ2VDbGllbnRJbXBsOjpzY3JlZW5Ub1dpbmRvdyhjb25zdCBJbnRQb2ludCYgcG9pbnQp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gcG9pbnQ7Ci19Ci0KLUludFJl
Y3QgUGFnZUNsaWVudEltcGw6OndpbmRvd1RvU2NyZWVuKGNvbnN0IEludFJlY3QmKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEludFJlY3QoKTsKLX0KLQotdm9pZCBQYWdl
Q2xpZW50SW1wbDo6ZG9uZVdpdGhLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50
JiwgYm9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi0jaWYgRU5BQkxFKFRPVUNI
X0VWRU5UUykKLXZvaWQgUGFnZUNsaWVudEltcGw6OmRvbmVXaXRoVG91Y2hFdmVudChjb25zdCBO
YXRpdmVXZWJUb3VjaEV2ZW50JiwgYm9vbCAvKndhc0V2ZW50SGFuZGxlZCovKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0jZW5kaWYKLQotUGFzc1JlZlB0cjxXZWJQb3B1cE1lbnVQcm94
eT4gUGFnZUNsaWVudEltcGw6OmNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBhZ2VQcm94eSogcGFn
ZSkKLXsKLSAgICByZXR1cm4gV2ViUG9wdXBNZW51UHJveHlFZmw6OmNyZWF0ZShtX3ZpZXdJbXBs
LCBwYWdlKTsKLX0KLQotUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5PiBQYWdlQ2xpZW50
SW1wbDo6Y3JlYXRlQ29udGV4dE1lbnVQcm94eShXZWJQYWdlUHJveHkqKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLSNpZiBFTkFCTEUoSU5QVVRfVFlQRV9D
T0xPUikKLVBhc3NSZWZQdHI8V2ViQ29sb3JDaG9vc2VyUHJveHk+IFBhZ2VDbGllbnRJbXBsOjpj
cmVhdGVDb2xvckNob29zZXJQcm94eShXZWJQYWdlUHJveHkqLCBjb25zdCBXZWJDb3JlOjpDb2xv
ciYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0RmluZElu
ZGljYXRvcihQYXNzUmVmUHRyPEZpbmRJbmRpY2F0b3I+LCBib29sLCBib29sKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi12
b2lkIFBhZ2VDbGllbnRJbXBsOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0
IExheWVyVHJlZUNvbnRleHQmKQotewotICAgIG1fdmlld0ltcGwtPmVudGVyQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUoKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZXhpdEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdNb2RlKCkKLXsKLSAgICBtX3ZpZXdJbXBsLT5leGl0QWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUoKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6dXBkYXRlQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmRpZENoYW5nZVNjcm9sbGJhcnNGb3JNYWluRnJhbWUo
KSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgUGFnZUNsaWVudElt
cGw6OmRpZENvbW1pdExvYWRGb3JNYWluRnJhbWUoYm9vbCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1
c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIGNvbnN0IENvcmVJUEM6OkRhdGFSZWZl
cmVuY2UmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWRvdWJsZSBQYWdlQ2xpZW50
SW1wbDo6Y3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yKCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRDdXN0
b21SZXByZXNlbnRhdGlvblpvb21GYWN0b3IoZG91YmxlKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmZsYXNoQmFja2luZ1N0b3JlVXBkYXRlcyhj
b25zdCBWZWN0b3I8SW50UmVjdD4mKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgUGFnZUNsaWVudEltcGw6OmZpbmRTdHJpbmdJbkN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0
IFN0cmluZyYsIEZpbmRPcHRpb25zLCB1bnNpZ25lZCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpjb3VudFN0cmluZ01hdGNoZXNJbkN1c3RvbVJl
cHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCB1bnNpZ25lZCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjp1cGRhdGVUZXh0
SW5wdXRTdGF0ZSgpCi17Ci0gICAgbV92aWV3SW1wbC0+dXBkYXRlVGV4dElucHV0U3RhdGUoKTsK
LX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2Fk
UHJveHkqIGRvd25sb2FkKQotewotICAgIEV3a19Db250ZXh0KiBjb250ZXh0ID0gbV92aWV3SW1w
bC0+ZXdrQ29udGV4dCgpOwotICAgIGNvbnRleHQtPmRvd25sb2FkTWFuYWdlcigpLT5yZWdpc3Rl
ckRvd25sb2FkKGRvd25sb2FkLCBtX3ZpZXdJbXBsKTsKLX0KLQotI2lmIFVTRShUSUxFRF9CQUNL
SU5HX1NUT1JFKQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6cGFnZURpZFJlcXVlc3RTY3JvbGwoY29u
c3QgSW50UG9pbnQmIHBvc2l0aW9uKQotewotICAgIG1fcGFnZVZpZXdwb3J0Q29udHJvbGxlci0+
cGFnZURpZFJlcXVlc3RTY3JvbGwocG9zaXRpb24pOwotfQotI2VuZGlmCi0KLXZvaWQgUGFnZUNs
aWVudEltcGw6OmRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBz
aXplKQotewotI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotICAgIG1fcGFnZVZpZXdwb3J0
Q29udHJvbGxlci0+ZGlkQ2hhbmdlQ29udGVudHNTaXplKHNpemUpOwotI2Vsc2UKLSAgICBtX3Zp
ZXdJbXBsLT5pbmZvcm1Db250ZW50c1NpemVDaGFuZ2Uoc2l6ZSk7Ci0jZW5kaWYKLX0KLQotI2lm
IFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkUmVuZGVy
RnJhbWUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBjb3ZlcmVkUmVjdCkKLXsKLSAgICBtX3BhZ2VWaWV3cG9ydENvbnRyb2xsZXIt
PmRpZFJlbmRlckZyYW1lKGNvbnRlbnRzU2l6ZSwgY292ZXJlZFJlY3QpOwotfQotCi12b2lkIFBh
Z2VDbGllbnRJbXBsOjpwYWdlVHJhbnNpdGlvblZpZXdwb3J0UmVhZHkoKQotewotICAgIG1fcGFn
ZVZpZXdwb3J0Q29udHJvbGxlci0+cGFnZVRyYW5zaXRpb25WaWV3cG9ydFJlYWR5KCk7Ci19Ci0j
ZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xpZW50SW1wbC5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNTIwY2E4Mi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9QYWdlQ2xpZW50SW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcwotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIFBhZ2VDbGllbnRJbXBsX2gKLSNkZWZpbmUgUGFnZUNsaWVudEltcGxfaAotCi0jaW5j
bHVkZSAiRGVmYXVsdFVuZG9Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAiUGFnZUNsaWVudC5oIgot
I2luY2x1ZGUgPEV2YXMuaD4KLQotY2xhc3MgRXdrVmlld0ltcGw7Ci0KLW5hbWVzcGFjZSBXZWJL
aXQgewotCi1jbGFzcyBQYWdlVmlld3BvcnRDb250cm9sbGVyOwotCi1jbGFzcyBQYWdlQ2xpZW50
SW1wbCA6IHB1YmxpYyBQYWdlQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0
cjxQYWdlQ2xpZW50SW1wbD4gY3JlYXRlKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGFnZUNsaWVudEltcGwodmlld0ltcGwpKTsKLSAg
ICB9Ci0gICAgflBhZ2VDbGllbnRJbXBsKCk7Ci0KLSAgICBFd2tWaWV3SW1wbCogdmlld0ltcGwo
KSBjb25zdDsKLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLSAgICB2b2lkIHNldFBhZ2VW
aWV3cG9ydENvbnRyb2xsZXIoUGFnZVZpZXdwb3J0Q29udHJvbGxlciogY29udHJvbGxlcikgeyBt
X3BhZ2VWaWV3cG9ydENvbnRyb2xsZXIgPSBjb250cm9sbGVyOyB9Ci0jZW5kaWYKLQotcHJpdmF0
ZToKLSAgICBleHBsaWNpdCBQYWdlQ2xpZW50SW1wbChFd2tWaWV3SW1wbCopOwotCi0gICAgLy8g
UGFnZUNsaWVudAotICAgIHZpcnR1YWwgUGFzc093blB0cjxEcmF3aW5nQXJlYVByb3h5PiBjcmVh
dGVEcmF3aW5nQXJlYVByb3h5KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZpZXdOZWVkc0Rpc3Bs
YXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwbGF5Vmll
dygpOwotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxWaWV3KGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRTaXpl
IHZpZXdTaXplKCk7Ci0gICAgdmlydHVhbCBib29sIGlzVmlld1dpbmRvd0FjdGl2ZSgpOwotICAg
IHZpcnR1YWwgYm9vbCBpc1ZpZXdGb2N1c2VkKCk7Ci0gICAgdmlydHVhbCBib29sIGlzVmlld1Zp
c2libGUoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNWaWV3SW5XaW5kb3coKTsKLQotICAgIHZpcnR1
YWwgdm9pZCBwcm9jZXNzRGlkQ3Jhc2goKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVsYXVuY2hQ
cm9jZXNzKCk7Ci0gICAgdmlydHVhbCB2b2lkIHBhZ2VDbG9zZWQoKTsKLQotICAgIHZpcnR1YWwg
dm9pZCB0b29sVGlwQ2hhbmdlZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKLQotICAg
IHZpcnR1YWwgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJik7Ci0gICAgdmly
dHVhbCB2b2lkIHNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sKTsKLSAgICB2aXJ0
dWFsIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdw
b3J0QXR0cmlidXRlcyYpOwotCi0gICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyRWRpdENvbW1hbmQo
UGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5PiwgV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRv
KTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsKLSAgICB2aXJ0dWFs
IGJvb2wgY2FuVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKTsKLSAgICB2aXJ0dWFs
IHZvaWQgZXhlY3V0ZVVuZG9SZWRvKFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbyk7Ci0gICAgdmly
dHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0Jik7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRv
VXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotICAgIHZpcnR1YWwgV2ViQ29y
ZTo6SW50UG9pbnQgc2NyZWVuVG9XaW5kb3coY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKLSAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgd2luZG93VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpOwotCi0gICAgdm9pZCB1cGRhdGVUZXh0SW5wdXRTdGF0ZSgpOwotICAgIHZpcnR1
YWwgdm9pZCBoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSopOwotCi0gICAgdmly
dHVhbCB2b2lkIGRvbmVXaXRoS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYs
IGJvb2wpOwotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgdmlydHVhbCB2b2lkIGRvbmVX
aXRoVG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50JiwgYm9vbCB3YXNFdmVudEhh
bmRsZWQpOwotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViUG9wdXBNZW51UHJv
eHk+IGNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBhZ2VQcm94eSopOwotICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5PiBjcmVhdGVDb250ZXh0TWVudVByb3h5KFdlYlBh
Z2VQcm94eSopOwotCi0jaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCi0gICAgdmlydHVhbCBQ
YXNzUmVmUHRyPFdlYkNvbG9yQ2hvb3NlclByb3h5PiBjcmVhdGVDb2xvckNob29zZXJQcm94eShX
ZWJQYWdlUHJveHkqLCBjb25zdCBXZWJDb3JlOjpDb2xvciYgaW5pdGlhbENvbG9yLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0Jik7Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRGaW5kSW5k
aWNhdG9yKFBhc3NSZWZQdHI8RmluZEluZGljYXRvcj4sIGJvb2wsIGJvb2wpOwotI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICB2aXJ0dWFsIHZvaWQgZW50ZXJBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0Jik7Ci0gICAgdmlydHVhbCB2
b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOwotICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0Jik7
Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VTY3JvbGxiYXJzRm9yTWFpbkZy
YW1lKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0TG9hZEZvck1haW5GcmFt
ZShib29sKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21S
ZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNl
Jik7Ci0gICAgdmlydHVhbCBkb3VibGUgY3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yKCk7
Ci0gICAgdmlydHVhbCB2b2lkIHNldEN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3Rvcihkb3Vi
bGUpOwotCi0gICAgdmlydHVhbCB2b2lkIGZsYXNoQmFja2luZ1N0b3JlVXBkYXRlcyhjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4mKTsKLSAgICB2aXJ0dWFsIHZvaWQgZmluZFN0cmluZ0lu
Q3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVk
KTsKLSAgICB2aXJ0dWFsIHZvaWQgY291bnRTdHJpbmdNYXRjaGVzSW5DdXN0b21SZXByZXNlbnRh
dGlvbihjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQpOwotCi0jaWYgVVNFKFRJ
TEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgdmlydHVhbCB2b2lkIHBhZ2VEaWRSZXF1ZXN0U2Nyb2xs
KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwgdm9pZCBk
aWRDaGFuZ2VDb250ZW50c1NpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotCi0jaWYgVVNF
KFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgdmlydHVhbCB2b2lkIGRpZFJlbmRlckZyYW1lKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRlbnRzU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgY292ZXJlZFJlY3QpOwotICAgIHZpcnR1YWwgdm9pZCBwYWdlVHJhbnNpdGlvblZpZXdwb3J0
UmVhZHkoKTsKLSNlbmRpZgotCi1wcml2YXRlOgotICAgIEV3a1ZpZXdJbXBsKiBtX3ZpZXdJbXBs
OwotICAgIERlZmF1bHRVbmRvQ29udHJvbGxlciBtX3VuZG9Db250cm9sbGVyOwotI2lmIFVTRShU
SUxFRF9CQUNLSU5HX1NUT1JFKQotICAgIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXIqIG1fcGFnZVZp
ZXdwb3J0Q29udHJvbGxlcjsKLSNlbmRpZgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0K
LSNlbmRpZiAvLyBQYWdlQ2xpZW50SW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGll
bnRFZmwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmRkYmU0Li4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1BhZ2VWaWV3cG9ydENvbnRy
b2xsZXJDbGllbnRFZmwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBhZ2VWaWV3
cG9ydENvbnRyb2xsZXJDbGllbnRFZmwuaCIKLQotI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JF
KQotCi0jaW5jbHVkZSAiRXdrVmlld0ltcGwuaCIKLSNpbmNsdWRlICJMYXllclRyZWVDb29yZGlu
YXRvclByb3h5LmgiCi0jaW5jbHVkZSAiTGF5ZXJUcmVlUmVuZGVyZXIuaCIKLSNpbmNsdWRlICJQ
YWdlVmlld3BvcnRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXgu
aCIKLSNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVu
dEVmbDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbChFd2tWaWV3SW1wbCogdmlld0lt
cGwpCi0gICAgOiBtX3ZpZXdJbXBsKHZpZXdJbXBsKQotICAgICwgbV9zY2FsZUZhY3RvcigxKQot
ICAgICwgbV9wYWdlVmlld3BvcnRDb250cm9sbGVyKDApCi17Ci0gICAgQVNTRVJUKG1fdmlld0lt
cGwpOwotfQotCi1QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjp+UGFnZVZpZXdwb3J0
Q29udHJvbGxlckNsaWVudEVmbCgpCi17Ci19Ci0KLURyYXdpbmdBcmVhUHJveHkqIFBhZ2VWaWV3
cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6OmRyYXdpbmdBcmVhKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV92aWV3SW1wbC0+cGFnZSgpLT5kcmF3aW5nQXJlYSgpOwotfQotCi12b2lkIFBhZ2VWaWV3
cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6OnNldFJlbmRlcmVyQWN0aXZlKGJvb2wgYWN0aXZlKQot
ewotICAgIGRyYXdpbmdBcmVhKCktPmxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkoKS0+bGF5ZXJU
cmVlUmVuZGVyZXIoKS0+c2V0QWN0aXZlKGFjdGl2ZSk7Ci19Ci0KLXZvaWQgUGFnZVZpZXdwb3J0
Q29udHJvbGxlckNsaWVudEVmbDo6ZGlzcGxheShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJ
bnRQb2ludCYgdmlld1Bvc2l0aW9uKQotewotICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0
cml4IG1hdHJpeDsKLSAgICBtYXRyaXguc2V0TWF0cml4KG1fc2NhbGVGYWN0b3IsIDAsIDAsIG1f
c2NhbGVGYWN0b3IsIC1tX3Njcm9sbFBvc2l0aW9uLngoKSAqIG1fc2NhbGVGYWN0b3IgKyB2aWV3
UG9zaXRpb24ueCgpICwgLW1fc2Nyb2xsUG9zaXRpb24ueSgpICogbV9zY2FsZUZhY3RvciArIHZp
ZXdQb3NpdGlvbi55KCkpOwotCi0gICAgTGF5ZXJUcmVlUmVuZGVyZXIqIHJlbmRlcmVyID0gZHJh
d2luZ0FyZWEoKS0+bGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSgpLT5sYXllclRyZWVSZW5kZXJl
cigpOwotICAgIHJlbmRlcmVyLT5zZXRBY3RpdmUodHJ1ZSk7Ci0gICAgcmVuZGVyZXItPnN5bmNS
ZW1vdGVDb250ZW50KCk7Ci0gICAgSW50UmVjdCBjbGlwUmVjdChyZWN0KTsKLSAgICBjbGlwUmVj
dC5tb3ZlKHZpZXdQb3NpdGlvbi54KCksIHZpZXdQb3NpdGlvbi55KCkpOwotICAgIHJlbmRlcmVy
LT5wYWludFRvQ3VycmVudEdMQ29udGV4dChtYXRyaXgsIDEsIGNsaXBSZWN0KTsKLX0KLQotdm9p
ZCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjp1cGRhdGVWaWV3cG9ydFNpemUoY29u
c3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKQotewotICAgIG1fdmlld3BvcnRTaXplID0gdmlld3Bv
cnRTaXplOwotICAgIG1fdmlld0ltcGwtPnBhZ2UoKS0+c2V0Vmlld3BvcnRTaXplKHZpZXdwb3J0
U2l6ZSk7Ci0gICAgbV9wYWdlVmlld3BvcnRDb250cm9sbGVyLT5kaWRDaGFuZ2VWaWV3cG9ydFNp
emUodmlld3BvcnRTaXplKTsKLX0KLQotdm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50
RWZsOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEludFBvaW50JiBuZXdTY3JvbGxQb3Np
dGlvbiwgZmxvYXQgbmV3U2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIC8qdHJhamVjdG9yeSovKQot
ewotICAgIG1fc2NhbGVGYWN0b3IgPSBuZXdTY2FsZTsKLSAgICBtX3Njcm9sbFBvc2l0aW9uID0g
bmV3U2Nyb2xsUG9zaXRpb247Ci0gICAgbV9wYWdlVmlld3BvcnRDb250cm9sbGVyLT5kaWRDaGFu
Z2VDb250ZW50c1Zpc2liaWxpdHkobV9zY3JvbGxQb3NpdGlvbiwgbV9zY2FsZUZhY3RvciwgRmxv
YXRQb2ludCgpKTsKLX0KLQotdm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjpk
aWRDaGFuZ2VDb250ZW50c1NpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKLXsKLSAg
ICBtX2NvbnRlbnRzU2l6ZSA9IHNpemU7Ci0gICAgSW50UmVjdCByZWN0ID0gSW50UmVjdChJbnRQ
b2ludCgpLCBtX3ZpZXdwb3J0U2l6ZSk7Ci0gICAgbV92aWV3SW1wbC0+cmVkcmF3UmVnaW9uKHJl
Y3QpOwotfQotCi12b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6OnNldFZpZXdw
b3J0UG9zaXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgY29udGVudHNQb2ludCkKLXsK
LSAgICBzZXRWaXNpYmxlQ29udGVudHNSZWN0KEludFBvaW50KGNvbnRlbnRzUG9pbnQueCgpLCBj
b250ZW50c1BvaW50LnkoKSksIG1fc2NhbGVGYWN0b3IsIEZsb2F0UG9pbnQoKSk7Ci19Ci0KLXZv
aWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbDo6c2V0Q29udGVudHNTY2FsZShmbG9h
dCBuZXdTY2FsZSwgYm9vbCB0cmVhdEFzSW5pdGlhbFZhbHVlKQotewotICAgIGlmICh0cmVhdEFz
SW5pdGlhbFZhbHVlKQotICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gSW50UG9pbnQoKTsKLSAg
ICBtX3NjYWxlRmFjdG9yID0gbmV3U2NhbGU7Ci19Ci0KLXZvaWQgUGFnZVZpZXdwb3J0Q29udHJv
bGxlckNsaWVudEVmbDo6ZGlkUmVzdW1lQ29udGVudCgpCi17Ci0gICAgbV9wYWdlVmlld3BvcnRD
b250cm9sbGVyLT5kaWRDaGFuZ2VDb250ZW50c1Zpc2liaWxpdHkobV9zY3JvbGxQb3NpdGlvbiwg
bV9zY2FsZUZhY3Rvcik7Ci19Ci0KLXZvaWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVm
bDo6ZGlkQ2hhbmdlVmlzaWJsZUNvbnRlbnRzKCkKLXsKLSAgICBJbnRSZWN0IHJlY3QgPSBJbnRS
ZWN0KEludFBvaW50KCksIG1fdmlld3BvcnRTaXplKTsKLSAgICBtX3ZpZXdJbXBsLT5yZWRyYXdS
ZWdpb24ocmVjdCk7Ci19Ci0KLXZvaWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbDo6
ZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKCkKLXsKLX0KLQotdm9pZCBQYWdlVmlld3BvcnRD
b250cm9sbGVyQ2xpZW50RWZsOjpzZXRDb250cm9sbGVyKFBhZ2VWaWV3cG9ydENvbnRyb2xsZXIq
IHBhZ2VWaWV3cG9ydENvbnRyb2xsZXIpCi17Ci0gICAgbV9wYWdlVmlld3BvcnRDb250cm9sbGVy
ID0gcGFnZVZpZXdwb3J0Q29udHJvbGxlcjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0j
ZW5kaWYgLy8gVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1BhZ2VWaWV3cG9ydENvbnRyb2xs
ZXJDbGllbnRFZmwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE3YjMzOS4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9QYWdlVmlld3BvcnRD
b250cm9sbGVyQ2xpZW50RWZsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVm
bF9oCi0jZGVmaW5lIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmxfaAotCi0jaWYgVVNF
KFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0KLSNpbmNsdWRlICJQYWdlQ2xpZW50SW1wbC5oIgotI2lu
Y2x1ZGUgIlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnQuaCIKLSNpbmNsdWRlIDx3dGYvUGFz
c093blB0ci5oPgotCi1jbGFzcyBFd2tWaWV3SW1wbDsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0K
LWNsYXNzIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwgOiBwdWJsaWMgUGFnZVZpZXdw
b3J0Q29udHJvbGxlckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8UGFn
ZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbD4gY3JlYXRlKEV3a1ZpZXdJbXBsKiB2aWV3SW1w
bCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgUGFnZVZpZXdwb3J0Q29udHJv
bGxlckNsaWVudEVmbCh2aWV3SW1wbCkpOwotICAgIH0KLSAgICB+UGFnZVZpZXdwb3J0Q29udHJv
bGxlckNsaWVudEVmbCgpOwotCi0gICAgRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEoKSBj
b25zdDsKLSAgICBXZWJDb3JlOjpJbnRTaXplIHZpZXdTaXplKCkgeyByZXR1cm4gbV92aWV3cG9y
dFNpemU7IH0KLSAgICBmbG9hdCBzY2FsZUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVG
YWN0b3I7IH0KLSAgICBXZWJDb3JlOjpJbnRQb2ludCBzY3JvbGxQb3NpdGlvbigpIHsgcmV0dXJu
IG1fc2Nyb2xsUG9zaXRpb247IH0KLQotICAgIHZvaWQgZGlzcGxheShjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiByZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgdmlld1Bvc2l0aW9uKTsKLSAg
ICB2b2lkIHVwZGF0ZVZpZXdwb3J0U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiB2aWV3cG9y
dFNpemUpOwotICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYsIGZsb2F0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7Ci0gICAgdm9pZCBz
ZXRSZW5kZXJlckFjdGl2ZShib29sKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3cG9ydFBv
c2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIGNvbnRlbnRzUG9pbnQpOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRDb250ZW50c1NjYWxlKGZsb2F0LCBib29sIHRyZWF0QXNJbml0aWFsVmFs
dWUpOwotCi0gICAgdmlydHVhbCB2b2lkIGRpZFJlc3VtZUNvbnRlbnQoKTsKLSAgICB2aXJ0dWFs
IHZvaWQgZGlkQ2hhbmdlQ29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVmlzaWJsZUNvbnRlbnRzKCk7Ci0gICAgdmlydHVhbCB2
b2lkIGRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcygpOwotCi0gICAgdmlydHVhbCB2b2lkIHNl
dENvbnRyb2xsZXIoUGFnZVZpZXdwb3J0Q29udHJvbGxlciopOwotCi1wcml2YXRlOgotICAgIGV4
cGxpY2l0IFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwoRXdrVmlld0ltcGwqKTsKLQot
ICAgIEV3a1ZpZXdJbXBsKiBtX3ZpZXdJbXBsOwotICAgIFdlYkNvcmU6OkludFNpemUgbV9jb250
ZW50c1NpemU7Ci0gICAgV2ViQ29yZTo6SW50U2l6ZSBtX3ZpZXdwb3J0U2l6ZTsKLSAgICBXZWJD
b3JlOjpJbnRQb2ludCBtX3Njcm9sbFBvc2l0aW9uOwotICAgIGZsb2F0IG1fc2NhbGVGYWN0b3I7
Ci0gICAgUGFnZVZpZXdwb3J0Q29udHJvbGxlciogbV9wYWdlVmlld3BvcnRDb250cm9sbGVyOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZgotCi0jZW5kaWYgLy8gUGFnZVZp
ZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9WaWJyYXRpb25Qcm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9WaWJyYXRpb25Qcm92aWRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDJkZTYyOTYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvVmlicmF0aW9uUHJvdmlkZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTE3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJWaWJyYXRpb25Qcm92aWRlci5oIgotCi0jaWYgRU5BQkxFKFZJQlJBVElPTikKLQotI2lu
Y2x1ZGUgIldLQVBJQ2FzdC5oIgotI2luY2x1ZGUgIldLQ29udGV4dC5oIgotI2luY2x1ZGUgIldL
VmlicmF0aW9uLmgiCi0jaW5jbHVkZSA8RXZhcy5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0KLS8qKgotICogXHN0cnVjdCAgRXdrX1ZpYnJh
dGlvbl9DbGllbnQKLSAqIEBicmllZiAgIENvbnRhaW5zIHRoZSB2aWJyYXRpb24gY2xpZW50IGNh
bGxiYWNrcy4KLSAqLwotc3RydWN0IEV3a19WaWJyYXRpb25fQ2xpZW50IHsKLSAgICBFd2tfVmli
cmF0aW9uX0NsaWVudF9WaWJyYXRlX0NiIHZpYnJhdGU7Ci0gICAgRXdrX1ZpYnJhdGlvbl9DbGll
bnRfVmlicmF0aW9uX0NhbmNlbF9DYiBjYW5jZWxWaWJyYXRpb247Ci0gICAgdm9pZCogdXNlckRh
dGE7Ci0KLSAgICBFd2tfVmlicmF0aW9uX0NsaWVudChFd2tfVmlicmF0aW9uX0NsaWVudF9WaWJy
YXRlX0NiIHZpYnJhdGUsIEV3a19WaWJyYXRpb25fQ2xpZW50X1ZpYnJhdGlvbl9DYW5jZWxfQ2Ig
Y2FuY2VsVmlicmF0aW9uLCB2b2lkKiB1c2VyRGF0YSkKLSAgICAgICAgOiB2aWJyYXRlKHZpYnJh
dGUpCi0gICAgICAgICwgY2FuY2VsVmlicmF0aW9uKGNhbmNlbFZpYnJhdGlvbikKLSAgICAgICAg
LCB1c2VyRGF0YSh1c2VyRGF0YSkKLSAgICB7IH0KLX07Ci0KLXN0YXRpYyBpbmxpbmUgVmlicmF0
aW9uUHJvdmlkZXIqIHRvVmlicmF0aW9uUHJvdmlkZXIoY29uc3Qgdm9pZCogY2xpZW50SW5mbykK
LXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VmlicmF0aW9uUHJvdmlkZXIqPihjb25zdF9jYXN0
PHZvaWQqPihjbGllbnRJbmZvKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHZpYnJhdGVDYWxsYmFjayhX
S1ZpYnJhdGlvblJlZiwgdWludDY0X3QgdmlicmF0aW9uVGltZSwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbykKLXsKLSAgICB0b1ZpYnJhdGlvblByb3ZpZGVyKGNsaWVudEluZm8pLT52aWJyYXRlKHZp
YnJhdGlvblRpbWUpOwotfQotCi1zdGF0aWMgdm9pZCBjYW5jZWxWaWJyYXRpb25DYWxsYmFjayhX
S1ZpYnJhdGlvblJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKLXsKLSAgICB0b1ZpYnJhdGlv
blByb3ZpZGVyKGNsaWVudEluZm8pLT5jYW5jZWxWaWJyYXRpb24oKTsKLX0KLQotUGFzc1JlZlB0
cjxWaWJyYXRpb25Qcm92aWRlcj4gVmlicmF0aW9uUHJvdmlkZXI6OmNyZWF0ZShXS0NvbnRleHRS
ZWYgd2tDb250ZXh0KQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgVmlicmF0aW9uUHJvdmlk
ZXIod2tDb250ZXh0KSk7Ci19Ci0KLVZpYnJhdGlvblByb3ZpZGVyOjpWaWJyYXRpb25Qcm92aWRl
cihXS0NvbnRleHRSZWYgd2tDb250ZXh0KQotICAgIDogbV93a0NvbnRleHQod2tDb250ZXh0KQot
ewotICAgIEFTU0VSVChtX3drQ29udGV4dC5nZXQoKSk7Ci0KLSAgICBXS1ZpYnJhdGlvblJlZiB3
a1ZpYnJhdGlvbiA9IFdLQ29udGV4dEdldFZpYnJhdGlvbihtX3drQ29udGV4dC5nZXQoKSk7Ci0g
ICAgQVNTRVJUKHdrVmlicmF0aW9uKTsKLQotICAgIFdLVmlicmF0aW9uUHJvdmlkZXIgd2tWaWJy
YXRpb25Qcm92aWRlciA9IHsKLSAgICAgICAga1dLVmlicmF0aW9uUHJvdmlkZXJDdXJyZW50VmVy
c2lvbiwKLSAgICAgICAgdGhpcywgLy8gY2xpZW50SW5mbwotICAgICAgICB2aWJyYXRlQ2FsbGJh
Y2ssCi0gICAgICAgIGNhbmNlbFZpYnJhdGlvbkNhbGxiYWNrCi0gICAgfTsKLSAgICBXS1ZpYnJh
dGlvblNldFByb3ZpZGVyKHdrVmlicmF0aW9uLCAmd2tWaWJyYXRpb25Qcm92aWRlcik7Ci19Ci0K
LVZpYnJhdGlvblByb3ZpZGVyOjp+VmlicmF0aW9uUHJvdmlkZXIoKQotewotICAgIFdLVmlicmF0
aW9uUmVmIHdrVmlicmF0aW9uID0gV0tDb250ZXh0R2V0VmlicmF0aW9uKG1fd2tDb250ZXh0Lmdl
dCgpKTsKLSAgICBBU1NFUlQod2tWaWJyYXRpb24pOwotCi0gICAgV0tWaWJyYXRpb25TZXRQcm92
aWRlcih3a1ZpYnJhdGlvbiwgMCk7Ci19Ci0KLXZvaWQgVmlicmF0aW9uUHJvdmlkZXI6OnZpYnJh
dGUodWludDY0X3QgdmlicmF0aW9uVGltZSkKLXsKLSAgICBpZiAobV92aWJyYXRpb25DbGllbnQg
JiYgbV92aWJyYXRpb25DbGllbnQtPnZpYnJhdGUpCi0gICAgICAgIG1fdmlicmF0aW9uQ2xpZW50
LT52aWJyYXRlKHZpYnJhdGlvblRpbWUsIG1fdmlicmF0aW9uQ2xpZW50LT51c2VyRGF0YSk7Ci19
Ci0KLXZvaWQgVmlicmF0aW9uUHJvdmlkZXI6OmNhbmNlbFZpYnJhdGlvbigpCi17Ci0gICAgaWYg
KG1fdmlicmF0aW9uQ2xpZW50ICYmIG1fdmlicmF0aW9uQ2xpZW50LT5jYW5jZWxWaWJyYXRpb24p
Ci0gICAgICAgIG1fdmlicmF0aW9uQ2xpZW50LT5jYW5jZWxWaWJyYXRpb24obV92aWJyYXRpb25D
bGllbnQtPnVzZXJEYXRhKTsKLX0KLQotdm9pZCBWaWJyYXRpb25Qcm92aWRlcjo6c2V0VmlicmF0
aW9uQ2xpZW50Q2FsbGJhY2tzKEV3a19WaWJyYXRpb25fQ2xpZW50X1ZpYnJhdGVfQ2IgdmlicmF0
ZSwgRXdrX1ZpYnJhdGlvbl9DbGllbnRfVmlicmF0aW9uX0NhbmNlbF9DYiBjYW5jZWxWaWJyYXRp
b24sIHZvaWQqIGRhdGEpCi17Ci0gICAgbV92aWJyYXRpb25DbGllbnQgPSBhZG9wdFB0cihuZXcg
RXdrX1ZpYnJhdGlvbl9DbGllbnQodmlicmF0ZSwgY2FuY2VsVmlicmF0aW9uLCBkYXRhKSk7Ci19
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoVklCUkFUSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvVmlicmF0aW9uUHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL1ZpYnJhdGlvblByb3ZpZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDU4MTAzOTMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvVmlicmF0aW9uUHJvdmlkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDYwICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVmlicmF0aW9uUHJvdmlkZXJfaAot
I2RlZmluZSBWaWJyYXRpb25Qcm92aWRlcl9oCi0KLSNpZiBFTkFCTEUoVklCUkFUSU9OKQotCi0j
aW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKLSNpbmNsdWRlICJld2tfY29udGV4dC5oIgotI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotdHlw
ZWRlZiBzdHJ1Y3QgRXdrX1ZpYnJhdGlvbl9DbGllbnQgRXdrX1ZpYnJhdGlvbl9DbGllbnQ7Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBWaWJyYXRpb25Qcm92aWRlciA6IHB1YmxpYyBS
ZWZDb3VudGVkPFZpYnJhdGlvblByb3ZpZGVyPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8VmlicmF0aW9uUHJvdmlkZXI+IGNyZWF0ZShXS0NvbnRleHRSZWYpOwotICAgIHZpcnR1
YWwgflZpYnJhdGlvblByb3ZpZGVyKCk7Ci0KLSAgICB2b2lkIHZpYnJhdGUodWludDY0X3Qgdmli
cmF0aW9uVGltZSk7Ci0gICAgdm9pZCBjYW5jZWxWaWJyYXRpb24oKTsKLSAgICB2b2lkIHNldFZp
YnJhdGlvbkNsaWVudENhbGxiYWNrcyhFd2tfVmlicmF0aW9uX0NsaWVudF9WaWJyYXRlX0NiLCBF
d2tfVmlicmF0aW9uX0NsaWVudF9WaWJyYXRpb25fQ2FuY2VsX0NiLCB2b2lkKik7Ci0KLXByaXZh
dGU6Ci0gICAgZXhwbGljaXQgVmlicmF0aW9uUHJvdmlkZXIoV0tDb250ZXh0UmVmKTsKLQotICAg
IFdLUmV0YWluUHRyPFdLQ29udGV4dFJlZj4gbV93a0NvbnRleHQ7Ci0gICAgT3duUHRyPEV3a19W
aWJyYXRpb25fQ2xpZW50PiBtX3ZpYnJhdGlvbkNsaWVudDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKFZJQlJBVElPTikKLQotI2VuZGlmIC8vIFZpYnJh
dGlvblByb3ZpZGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL1dlYktpdFRleHRDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL1dlYktpdFRleHRDaGVja2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MmZmMzljNC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9X
ZWJLaXRUZXh0Q2hlY2tlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzkgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUIEhPTERFUiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi0gKiBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJLaXRUZXh0Q2hlY2tl
ci5oIgotCi0jaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0KLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgotI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgotI2luY2x1ZGUgIldLTXV0YWJsZUFycmF5Lmgi
Ci0jaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLSNp
bmNsdWRlICJXZWJTdHJpbmcuaCIKLSNpbmNsdWRlICJld2tfc2V0dGluZ3MuaCIKLSNpbmNsdWRl
ICJld2tfdGV4dF9jaGVja2VyX3ByaXZhdGUuaCIKLSNpbmNsdWRlIDxFaW5hLmg+Ci0jaW5jbHVk
ZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLXN0YXRpYyBPd25QdHI8V2ViQ29yZTo6VGV4dENoZWNrZXJFbmNoYW50
PiB0ZXh0Q2hlY2tlckVuY2hhbnQgPSBXZWJDb3JlOjpUZXh0Q2hlY2tlckVuY2hhbnQ6OmNyZWF0
ZSgpOwotCi1zdGF0aWMgRXdrX1RleHRfQ2hlY2tlciogZXdrVGV4dENoZWNrZXJDYWxsYmFja3Mg
PSBld2tfdGV4dF9jaGVja2VyX2NhbGxiYWNrc19nZXQoKTsKLQotYm9vbCBpc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZChjb25zdCB2b2lkKikKLXsKLSAgICByZXR1cm4gZXdrX3NldHRp
bmdzX2NvbnRpbnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQoKTsKLX0KLQotdm9pZCBz
ZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkLCBjb25zdCB2b2lk
KikKLXsKLSAgICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVk
X3NldChlbmFibGVkKTsKLX0KLQotdWludDY0X3QgdW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXS1Bh
Z2VSZWYgcGFnZSwgY29uc3Qgdm9pZCopCi17Ci0gICAgaWYgKGV3a1RleHRDaGVja2VyQ2FsbGJh
Y2tzLT51bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldCkKLSAgICAgICAgcmV0dXJuIGV3a1Rl
eHRDaGVja2VyQ2FsbGJhY2tzLT51bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldCh0b0ltcGwo
cGFnZSktPnZpZXdXaWRnZXQoKSk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBjbG9zZVNw
ZWxsRG9jdW1lbnRXaXRoVGFnKHVpbnQ2NF90IHRhZywgY29uc3Qgdm9pZCopCi17Ci0gICAgaWYg
KGV3a1RleHRDaGVja2VyQ2FsbGJhY2tzLT51bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3Nl
KQotICAgICAgICBld2tUZXh0Q2hlY2tlckNhbGxiYWNrcy0+dW5pcXVlX3NwZWxsX2RvY3VtZW50
X3RhZ19jbG9zZSh0YWcpOwotfQotCi12b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyh1aW50NjRf
dCB0YWcsIFdLU3RyaW5nUmVmIHRleHQsIGludDMyX3QqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGlu
dDMyX3QqIG1pc3NwZWxsaW5nTGVuZ3RoLCBjb25zdCB2b2lkKikKLXsKLSAgICBpZiAoZXdrVGV4
dENoZWNrZXJDYWxsYmFja3MtPnN0cmluZ19zcGVsbGluZ19jaGVjaykKLSAgICAgICAgZXdrVGV4
dENoZWNrZXJDYWxsYmFja3MtPnN0cmluZ19zcGVsbGluZ19jaGVjayh0YWcsIHRvSW1wbCh0ZXh0
KS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxp
bmdMZW5ndGgpOwotICAgIGVsc2UKLSAgICAgICAgdGV4dENoZWNrZXJFbmNoYW50LT5jaGVja1Nw
ZWxsaW5nT2ZTdHJpbmcodG9JbXBsKHRleHQpLT5zdHJpbmcoKSwgKm1pc3NwZWxsaW5nTG9jYXRp
b24sICptaXNzcGVsbGluZ0xlbmd0aCk7Ci19Ci0KLVdLQXJyYXlSZWYgZ3Vlc3Nlc0ZvcldvcmQo
dWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKikKLXsKLSAgICBXS011
dGFibGVBcnJheVJlZiBzdWdnZXN0aW9uc0ZvcldvcmQgPSBXS011dGFibGVBcnJheUNyZWF0ZSgp
OwotCi0gICAgaWYgKGV3a1RleHRDaGVja2VyQ2FsbGJhY2tzLT53b3JkX2d1ZXNzZXNfZ2V0KSB7
Ci0gICAgICAgIEVpbmFfTGlzdCogbGlzdCA9IGV3a1RleHRDaGVja2VyQ2FsbGJhY2tzLT53b3Jk
X2d1ZXNzZXNfZ2V0KHRhZywgdG9JbXBsKHdvcmQpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsK
LSAgICAgICAgdm9pZCogaXRlbTsKLQotICAgICAgICBFSU5BX0xJU1RfRlJFRShsaXN0LCBpdGVt
KSB7Ci0gICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3VnZ2VzdGlvbihBZG9w
dFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzdGF0aWNfY2FzdDxjaGFyKj4oaXRl
bSkpKTsKLSAgICAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKHN1Z2dlc3Rpb25zRm9yV29yZCwg
c3VnZ2VzdGlvbi5nZXQoKSk7Ci0gICAgICAgICAgICBmcmVlKGl0ZW0pOwotICAgICAgICB9Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlcyA9IHRleHRDaGVja2Vy
RW5jaGFudC0+Z2V0R3Vlc3Nlc0ZvcldvcmQodG9JbXBsKHdvcmQpLT5zdHJpbmcoKSk7Ci0gICAg
ICAgIHNpemVfdCBudW1iZXJPZkd1ZXNzZXMgPSBndWVzc2VzLnNpemUoKTsKLSAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkd1ZXNzZXM7ICsraSkgewotICAgICAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Z2dlc3Rpb24oQWRvcHRXSywgV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoZ3Vlc3Nlc1tpXS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgICAgICAg
ICBXS0FycmF5QXBwZW5kSXRlbShzdWdnZXN0aW9uc0ZvcldvcmQsIHN1Z2dlc3Rpb24uZ2V0KCkp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHN1Z2dlc3Rpb25zRm9yV29yZDsKLX0K
LQotdm9pZCBsZWFybldvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2
b2lkKikKLXsKLSAgICBpZiAoZXdrVGV4dENoZWNrZXJDYWxsYmFja3MtPndvcmRfbGVhcm4pCi0g
ICAgICAgIGV3a1RleHRDaGVja2VyQ2FsbGJhY2tzLT53b3JkX2xlYXJuKHRhZywgdG9JbXBsKHdv
cmQpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBlbHNlCi0gICAgICAgIHRleHRDaGVj
a2VyRW5jaGFudC0+bGVhcm5Xb3JkKHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkpOwotfQotCi12b2lk
IGlnbm9yZVdvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKikK
LXsKLSAgICBpZiAoZXdrVGV4dENoZWNrZXJDYWxsYmFja3MtPndvcmRfaWdub3JlKQotICAgICAg
ICBld2tUZXh0Q2hlY2tlckNhbGxiYWNrcy0+d29yZF9pZ25vcmUodGFnLCB0b0ltcGwod29yZCkt
PnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGVsc2UKLSAgICAgICAgdGV4dENoZWNrZXJF
bmNoYW50LT5pZ25vcmVXb3JkKHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkpOwotfQotCi1WZWN0b3I8
U3RyaW5nPiBhdmFpbGFibGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCkKLXsKLSAgICByZXR1cm4g
dGV4dENoZWNrZXJFbmNoYW50LT5hdmFpbGFibGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7Ci19
Ci0KLXZvaWQgdXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgbGFuZ3VhZ2VzKQotewotICAgIHRleHRDaGVja2VyRW5jaGFudC0+dXBkYXRlU3BlbGxDaGVj
a2luZ0xhbmd1YWdlcyhsYW5ndWFnZXMpOwotfQotCi1WZWN0b3I8U3RyaW5nPiBsb2FkZWRTcGVs
bENoZWNraW5nTGFuZ3VhZ2VzKCkKLXsKLSAgICByZXR1cm4gdGV4dENoZWNrZXJFbmNoYW50LT5s
b2FkZWRTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dAotCi0jZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvV2ViS2l0VGV4dENoZWNrZXIuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNDEyMzI0NC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9XZWJLaXRUZXh0Q2hlY2tlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNjAg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCi0gKiBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgV2ViS2l0VGV4dENoZWNrZXJfaAotI2RlZmlu
ZSBXZWJLaXRUZXh0Q2hlY2tlcl9oCi0KLSNpZiBFTkFCTEUoU1BFTExDSEVDSykKLQotI2luY2x1
ZGUgIlRleHRDaGVja2VyRW5jaGFudC5oIgotI2luY2x1ZGUgIldLQXJyYXkuaCIKLSNpbmNsdWRl
ICJXS1BhZ2UuaCIKLSNpbmNsdWRlICJXS1N0cmluZy5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotLy8gVGhlIGZ1bmN0aW9ucyBtYWlubHkgY2hvb3NlIGJldHdlZW4gY2xpZW50J3MgaW1wbGVt
ZW50YXRpb24gb2Ygc3BlbGxpbmcgYW5kIHRoZSBXZWJLaXQgb25lLgotCi0vLyBDYWxsYmFja3Mg
cmVxdWlyZWQgYnkgV0tUZXh0Q2hlY2tlci4KLWJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQoY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Ci12b2lkIHNldENvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwot
Ci11aW50NjRfdCB1bmlxdWVTcGVsbERvY3VtZW50VGFnKFdLUGFnZVJlZiBwYWdlLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKTsKLXZvaWQgY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyh1aW50NjRf
dCB0YWcsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwotCi12b2lkIGNoZWNrU3BlbGxpbmdPZlN0
cmluZyh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHRleHQsIGludDMyX3QqIG1pc3NwZWxsaW5n
TG9jYXRpb24sIGludDMyX3QqIG1pc3NwZWxsaW5nTGVuZ3RoLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKTsKLVdLQXJyYXlSZWYgZ3Vlc3Nlc0ZvcldvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1Jl
ZiB3b3JkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKLXZvaWQgbGVhcm5Xb3JkKHVpbnQ2NF90
IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Ci12b2lkIGln
bm9yZVdvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKTsKLQotLy8gRW5jaGFudCdzIGhlbHBlci4KLVZlY3RvcjxTdHJpbmc+IGF2YWlsYWJs
ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKLXZvaWQgdXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1
YWdlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZ2VzKTsKLVZlY3RvcjxTdHJpbmc+IGxv
YWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0K
LSNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKLSNlbmRpZiAvLyBXZWJLaXRUZXh0Q2hlY2tl
cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL0JhdHRlcnlQcm92
aWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL0JhdHRlcnlQcm92aWRlci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEwNzExNQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvQmF0dGVyeVByb3ZpZGVyLmNw
cApAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jw
b3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkJhdHRlcnlQcm92aWRlci5oIgorCisjaWYgRU5BQkxFKEJBVFRFUllf
U1RBVFVTKQorCisjaW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAiV0tCYXR0ZXJ5TWFu
YWdlci5oIgorI2luY2x1ZGUgIldLQmF0dGVyeVN0YXR1cy5oIgorI2luY2x1ZGUgIldLQ29udGV4
dC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
CisKK3N0YXRpYyBpbmxpbmUgQmF0dGVyeVByb3ZpZGVyKiB0b0JhdHRlcnlQcm92aWRlcihjb25z
dCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxCYXR0ZXJ5UHJv
dmlkZXIqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7Cit9CisKK3N0YXRpYyB2b2lk
IHN0YXJ0VXBkYXRpbmdDYWxsYmFjayhXS0JhdHRlcnlNYW5hZ2VyUmVmLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKQoreworICAgIHRvQmF0dGVyeVByb3ZpZGVyKGNsaWVudEluZm8pLT5zdGFydFVw
ZGF0aW5nKCk7Cit9CisKK3N0YXRpYyB2b2lkIHN0b3BVcGRhdGluZ0NhbGxiYWNrKFdLQmF0dGVy
eU1hbmFnZXJSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgdG9CYXR0ZXJ5UHJv
dmlkZXIoY2xpZW50SW5mbyktPnN0b3BVcGRhdGluZygpOworfQorCitCYXR0ZXJ5UHJvdmlkZXI6
On5CYXR0ZXJ5UHJvdmlkZXIoKQoreworICAgIG1fcHJvdmlkZXIuc3RvcFVwZGF0aW5nKCk7CisK
KyAgICBXS0JhdHRlcnlNYW5hZ2VyUmVmIHdrQmF0dGVyeU1hbmFnZXIgPSBXS0NvbnRleHRHZXRC
YXR0ZXJ5TWFuYWdlcihtX3drQ29udGV4dC5nZXQoKSk7CisgICAgQVNTRVJUKHdrQmF0dGVyeU1h
bmFnZXIpOworCisgICAgV0tCYXR0ZXJ5TWFuYWdlclNldFByb3ZpZGVyKHdrQmF0dGVyeU1hbmFn
ZXIsIDApOworfQorCitQYXNzUmVmUHRyPEJhdHRlcnlQcm92aWRlcj4gQmF0dGVyeVByb3ZpZGVy
OjpjcmVhdGUoV0tDb250ZXh0UmVmIHdrQ29udGV4dCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEJhdHRlcnlQcm92aWRlcih3a0NvbnRleHQpKTsKK30KKworQmF0dGVyeVByb3ZpZGVyOjpC
YXR0ZXJ5UHJvdmlkZXIoV0tDb250ZXh0UmVmIHdrQ29udGV4dCkKKyAgICA6IG1fd2tDb250ZXh0
KHdrQ29udGV4dCkKKyAgICAsIG1fcHJvdmlkZXIodGhpcykKK3sKKyAgICBBU1NFUlQobV93a0Nv
bnRleHQpOworCisgICAgV0tCYXR0ZXJ5TWFuYWdlclJlZiB3a0JhdHRlcnlNYW5hZ2VyID0gV0tD
b250ZXh0R2V0QmF0dGVyeU1hbmFnZXIobV93a0NvbnRleHQuZ2V0KCkpOworICAgIEFTU0VSVCh3
a0JhdHRlcnlNYW5hZ2VyKTsKKworICAgIFdLQmF0dGVyeVByb3ZpZGVyIHdrQmF0dGVyeVByb3Zp
ZGVyID0geworICAgICAgICBrV0tCYXR0ZXJ5UHJvdmlkZXJDdXJyZW50VmVyc2lvbiwKKyAgICAg
ICAgdGhpcywgLy8gY2xpZW50SW5mbworICAgICAgICBzdGFydFVwZGF0aW5nQ2FsbGJhY2ssCisg
ICAgICAgIHN0b3BVcGRhdGluZ0NhbGxiYWNrCisgICAgfTsKKyAgICBXS0JhdHRlcnlNYW5hZ2Vy
U2V0UHJvdmlkZXIod2tCYXR0ZXJ5TWFuYWdlciwgJndrQmF0dGVyeVByb3ZpZGVyKTsKK30KKwor
dm9pZCBCYXR0ZXJ5UHJvdmlkZXI6OnN0YXJ0VXBkYXRpbmcoKQoreworICAgIG1fcHJvdmlkZXIu
c3RhcnRVcGRhdGluZygpOworfQorCit2b2lkIEJhdHRlcnlQcm92aWRlcjo6c3RvcFVwZGF0aW5n
KCkKK3sKKyAgICBtX3Byb3ZpZGVyLnN0b3BVcGRhdGluZygpOworfQorCit2b2lkIEJhdHRlcnlQ
cm92aWRlcjo6ZGlkQ2hhbmdlQmF0dGVyeVN0YXR1cyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSwgUGFzc1JlZlB0cjxCYXR0ZXJ5U3RhdHVzPiBzdGF0dXMpCit7CisgICAgV0tCYXR0ZXJ5
TWFuYWdlclJlZiB3a0JhdHRlcnlNYW5hZ2VyID0gV0tDb250ZXh0R2V0QmF0dGVyeU1hbmFnZXIo
bV93a0NvbnRleHQuZ2V0KCkpOworICAgIEFTU0VSVCh3a0JhdHRlcnlNYW5hZ2VyKTsKKworICAg
IFdLUmV0YWluUHRyPFdLQmF0dGVyeVN0YXR1c1JlZj4gd2tCYXR0ZXJ5U3RhdHVzKEFkb3B0V0ss
IFdLQmF0dGVyeVN0YXR1c0NyZWF0ZShzdGF0dXMtPmNoYXJnaW5nKCksIHN0YXR1cy0+Y2hhcmdp
bmdUaW1lKCksIHN0YXR1cy0+ZGlzY2hhcmdpbmdUaW1lKCksIHN0YXR1cy0+bGV2ZWwoKSkpOwor
ICAgIFdLQmF0dGVyeU1hbmFnZXJQcm92aWRlckRpZENoYW5nZUJhdHRlcnlTdGF0dXMod2tCYXR0
ZXJ5TWFuYWdlciwgdG9BUEkoZXZlbnRUeXBlLmltcGwoKSksIHdrQmF0dGVyeVN0YXR1cy5nZXQo
KSk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL0JhdHRlcnlQcm92aWRlci5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2VmbC9CYXR0ZXJ5UHJvdmlkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5iODI5ZDdlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9CYXR0ZXJ5UHJvdmlkZXIuaApAQCAtMCwwICsxLDYyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJhdHRlcnlQcm92aWRlcl9oCisjZGVmaW5lIEJhdHRl
cnlQcm92aWRlcl9oCisKKyNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCisKKyNpbmNsdWRlICJC
YXR0ZXJ5UHJvdmlkZXJFZmwuaCIKKyNpbmNsdWRlICJCYXR0ZXJ5UHJvdmlkZXJFZmxDbGllbnQu
aCIKKyNpbmNsdWRlICJCYXR0ZXJ5U3RhdHVzLmgiCisjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIK
KyNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBCYXR0ZXJ5UHJvdmlkZXIgOiBwdWJsaWMg
UmVmQ291bnRlZDxCYXR0ZXJ5UHJvdmlkZXI+LCBwdWJsaWMgV2ViQ29yZTo6QmF0dGVyeVByb3Zp
ZGVyRWZsQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5CYXR0ZXJ5UHJvdmlkZXIoKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCYXR0ZXJ5UHJvdmlkZXI+IGNyZWF0ZShXS0NvbnRleHRS
ZWYpOworCisgICAgdm9pZCBzdGFydFVwZGF0aW5nKCk7CisgICAgdm9pZCBzdG9wVXBkYXRpbmco
KTsKKworcHJpdmF0ZToKKyAgICBCYXR0ZXJ5UHJvdmlkZXIoV0tDb250ZXh0UmVmKTsKKworICAg
IC8vIEJhdHRlcnlQcm92aWRlckVmbENsaWVudCBpbnRlcmZhY2UuCisgICAgdmlydHVhbCB2b2lk
IGRpZENoYW5nZUJhdHRlcnlTdGF0dXMoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBh
c3NSZWZQdHI8V2ViQ29yZTo6QmF0dGVyeVN0YXR1cz4pOworCisgICAgV0tSZXRhaW5QdHI8V0tD
b250ZXh0UmVmPiBtX3drQ29udGV4dDsKKyAgICBXZWJDb3JlOjpCYXR0ZXJ5UHJvdmlkZXJFZmwg
bV9wcm92aWRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5B
QkxFKEJBVFRFUllfU1RBVFVTKQorCisjZW5kaWYgLy8gQmF0dGVyeVByb3ZpZGVyX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvTmV0d29ya0luZm9Qcm92aWRlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL05ldHdvcmtJbmZvUHJvdmlkZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NDU2ZjkKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL05ldHdvcmtJbmZvUHJvdmlkZXIu
Y3BwCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENv
cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiTmV0d29ya0luZm9Qcm92aWRlci5oIgorCisjaWYgRU5BQkxFKE5F
VFdPUktfSU5GTykKKworI2luY2x1ZGUgIldLQ29udGV4dC5oIgorI2luY2x1ZGUgIldLTmV0d29y
a0luZm9NYW5hZ2VyLmgiCisjaW5jbHVkZSA8Tm90SW1wbGVtZW50ZWQuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKKworc3RhdGljIGlubGluZSBOZXR3b3JrSW5mb1Byb3ZpZGVyKiB0b05l
dHdvcmtJbmZvUHJvdmlkZXIoY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8TmV0d29ya0luZm9Qcm92aWRlcio+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVu
dEluZm8pKTsKK30KKworc3RhdGljIHZvaWQgc3RhcnRVcGRhdGluZ0NhbGxiYWNrKFdLTmV0d29y
a0luZm9NYW5hZ2VyUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIHRvTmV0d29y
a0luZm9Qcm92aWRlcihjbGllbnRJbmZvKS0+c3RhcnRVcGRhdGluZygpOworfQorCitzdGF0aWMg
dm9pZCBzdG9wVXBkYXRpbmdDYWxsYmFjayhXS05ldHdvcmtJbmZvTWFuYWdlclJlZiwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbykKK3sKKyAgICB0b05ldHdvcmtJbmZvUHJvdmlkZXIoY2xpZW50SW5m
byktPnN0b3BVcGRhdGluZygpOworfQorCitzdGF0aWMgZG91YmxlIGdldEJhbmR3aWR0aENhbGxi
YWNrKFdLTmV0d29ya0luZm9NYW5hZ2VyUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorewor
ICAgIHJldHVybiB0b05ldHdvcmtJbmZvUHJvdmlkZXIoY2xpZW50SW5mbyktPmJhbmR3aWR0aCgp
OworfQorCitzdGF0aWMgYm9vbCBpc01ldGVyZWRDYWxsYmFjayhXS05ldHdvcmtJbmZvTWFuYWdl
clJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICByZXR1cm4gdG9OZXR3b3JrSW5m
b1Byb3ZpZGVyKGNsaWVudEluZm8pLT5tZXRlcmVkKCk7Cit9CisKK1Bhc3NSZWZQdHI8TmV0d29y
a0luZm9Qcm92aWRlcj4gTmV0d29ya0luZm9Qcm92aWRlcjo6Y3JlYXRlKFdLQ29udGV4dFJlZiB3
a0NvbnRleHQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBOZXR3b3JrSW5mb1Byb3ZpZGVy
KHdrQ29udGV4dCkpOworfQorCitOZXR3b3JrSW5mb1Byb3ZpZGVyOjpOZXR3b3JrSW5mb1Byb3Zp
ZGVyKFdLQ29udGV4dFJlZiB3a0NvbnRleHQpCisgICAgOiBtX3drQ29udGV4dCh3a0NvbnRleHQp
Cit7CisgICAgQVNTRVJUKHdrQ29udGV4dCk7CisKKyAgICBXS05ldHdvcmtJbmZvTWFuYWdlclJl
ZiB3a05ldHdvcmtJbmZvTWFuYWdlciA9IFdLQ29udGV4dEdldE5ldHdvcmtJbmZvTWFuYWdlciht
X3drQ29udGV4dC5nZXQoKSk7CisgICAgQVNTRVJUKHdrTmV0d29ya0luZm9NYW5hZ2VyKTsKKwor
ICAgIFdLTmV0d29ya0luZm9Qcm92aWRlciB3a05ldHdvcmtJbmZvUHJvdmlkZXIgPSB7CisgICAg
ICAgIGtXS05ldHdvcmtJbmZvUHJvdmlkZXJDdXJyZW50VmVyc2lvbiwKKyAgICAgICAgdGhpcywg
Ly8gY2xpZW50SW5mbworICAgICAgICBzdGFydFVwZGF0aW5nQ2FsbGJhY2ssCisgICAgICAgIHN0
b3BVcGRhdGluZ0NhbGxiYWNrLAorICAgICAgICBnZXRCYW5kd2lkdGhDYWxsYmFjaywKKyAgICAg
ICAgaXNNZXRlcmVkQ2FsbGJhY2sKKyAgICB9OworICAgIFdLTmV0d29ya0luZm9NYW5hZ2VyU2V0
UHJvdmlkZXIod2tOZXR3b3JrSW5mb01hbmFnZXIsICZ3a05ldHdvcmtJbmZvUHJvdmlkZXIpOwor
fQorCitOZXR3b3JrSW5mb1Byb3ZpZGVyOjp+TmV0d29ya0luZm9Qcm92aWRlcigpCit7CisgICAg
V0tOZXR3b3JrSW5mb01hbmFnZXJSZWYgd2tOZXR3b3JrSW5mb01hbmFnZXIgPSBXS0NvbnRleHRH
ZXROZXR3b3JrSW5mb01hbmFnZXIobV93a0NvbnRleHQuZ2V0KCkpOworICAgIEFTU0VSVCh3a05l
dHdvcmtJbmZvTWFuYWdlcik7CisKKyAgICBXS05ldHdvcmtJbmZvTWFuYWdlclNldFByb3ZpZGVy
KHdrTmV0d29ya0luZm9NYW5hZ2VyLCAwKTsKK30KKworZG91YmxlIE5ldHdvcmtJbmZvUHJvdmlk
ZXI6OmJhbmR3aWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJvdmlkZXIuYmFuZHdpZHRo
KCk7Cit9CisKK2Jvb2wgTmV0d29ya0luZm9Qcm92aWRlcjo6bWV0ZXJlZCgpIGNvbnN0Cit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBOZXR3
b3JrSW5mb1Byb3ZpZGVyOjpzdGFydFVwZGF0aW5nKCkKK3sKKyAgICBtX3Byb3ZpZGVyLnN0YXJ0
VXBkYXRpbmcoKTsKK30KKwordm9pZCBOZXR3b3JrSW5mb1Byb3ZpZGVyOjpzdG9wVXBkYXRpbmco
KQoreworICAgIG1fcHJvdmlkZXIuc3RvcFVwZGF0aW5nKCk7Cit9CisKKyNlbmRpZiAvLyBFTkFC
TEUoTkVUV09SS19JTkZPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9OZXR3b3JrSW5mb1Byb3ZpZGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL05l
dHdvcmtJbmZvUHJvdmlkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41
NzYzMTE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9O
ZXR3b3JrSW5mb1Byb3ZpZGVyLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBOZXR3b3JrSW5mb1Byb3ZpZGVyX2gKKyNkZWZpbmUgTmV0d29ya0luZm9Qcm92
aWRlcl9oCisKKyNpZiBFTkFCTEUoTkVUV09SS19JTkZPKQorCisjaW5jbHVkZSA8TmV0d29ya0lu
Zm9DbGllbnQuaD4KKyNpbmNsdWRlIDxOZXR3b3JrSW5mb1Byb3ZpZGVyRWZsLmg+CisjaW5jbHVk
ZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLUmV0YWluUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IE5ldHdvcmtJbmZvUHJvdmlkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxOZXR3b3JrSW5mb1Byb3Zp
ZGVyPiwgcHVibGljIFdlYkNvcmU6Ok5ldHdvcmtJbmZvQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIH5OZXR3b3JrSW5mb1Byb3ZpZGVyKCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TmV0
d29ya0luZm9Qcm92aWRlcj4gY3JlYXRlKFdLQ29udGV4dFJlZik7CisKKyAgICAvLyBOZXR3b3Jr
SW5mb0NsaWVudCBpbnRlcmZhY2UuCisgICAgdmlydHVhbCBkb3VibGUgYmFuZHdpZHRoKCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIG1ldGVyZWQoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9p
ZCBzdGFydFVwZGF0aW5nKCk7CisgICAgdmlydHVhbCB2b2lkIHN0b3BVcGRhdGluZygpOworCitw
cml2YXRlOgorICAgIE5ldHdvcmtJbmZvUHJvdmlkZXIoV0tDb250ZXh0UmVmKTsKKworICAgIFdL
UmV0YWluUHRyPFdLQ29udGV4dFJlZj4gbV93a0NvbnRleHQ7CisgICAgV2ViQ29yZTo6TmV0d29y
a0luZm9Qcm92aWRlckVmbCBtX3Byb3ZpZGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19JTkZPKQorCisjZW5kaWYgLy8gTmV0d29ya0lu
Zm9Qcm92aWRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1Bh
Z2VDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVu
dEltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNTY1ZWIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRJ
bXBsLmNwcApAQCAtMCwwICsxLDMzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1z
dW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJQYWdlQ2xpZW50SW1wbC5oIgorCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eUltcGwuaCIK
KyNpbmNsdWRlICJFd2tWaWV3SW1wbC5oIgorI2luY2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZl
bnQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIldlYkNvbnRleHQu
aCIKKyNpbmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUGFnZUdy
b3VwLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUG9wdXBNZW51
UHJveHlFZmwuaCIKKyNpbmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgorI2luY2x1ZGUgImV3a19j
b250ZXh0LmgiCisjaW5jbHVkZSAiZXdrX2NvbnRleHRfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3
a19kb3dubG9hZF9qb2IuaCIKKyNpbmNsdWRlICJld2tfZG93bmxvYWRfam9iX3ByaXZhdGUuaCIK
KyNpbmNsdWRlICJld2tfdmlldy5oIgorCisjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisj
aW5jbHVkZSAiUGFnZVZpZXdwb3J0Q29udHJvbGxlci5oIgorI2VuZGlmCisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworUGFnZUNsaWVudEltcGw6OlBh
Z2VDbGllbnRJbXBsKEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCkKKyAgICA6IG1fdmlld0ltcGwodmll
d0ltcGwpCit7Cit9CisKK1BhZ2VDbGllbnRJbXBsOjp+UGFnZUNsaWVudEltcGwoKQoreworfQor
CitFd2tWaWV3SW1wbCogUGFnZUNsaWVudEltcGw6OnZpZXdJbXBsKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV92aWV3SW1wbDsKK30KKworLy8gUGFnZUNsaWVudAorUGFzc093blB0cjxEcmF3aW5n
QXJlYVByb3h5PiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpCit7Cisg
ICAgcmV0dXJuIERyYXdpbmdBcmVhUHJveHlJbXBsOjpjcmVhdGUobV92aWV3SW1wbC0+cGFnZSgp
KTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIG1fdmlld0ltcGwtPnJlZHJhd1JlZ2lvbihy
ZWN0KTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlzcGxheVZpZXcoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNjcm9sbFZpZXcoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYp
Cit7CisgICAgc2V0Vmlld05lZWRzRGlzcGxheShzY3JvbGxSZWN0KTsKK30KKworV2ViQ29yZTo6
SW50U2l6ZSBQYWdlQ2xpZW50SW1wbDo6dmlld1NpemUoKQoreworICAgIHJldHVybiBtX3ZpZXdJ
bXBsLT5zaXplKCk7Cit9CisKK2Jvb2wgUGFnZUNsaWVudEltcGw6OmlzVmlld1dpbmRvd0FjdGl2
ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3Rm9jdXNlZCgpCit7CisgICAgcmV0dXJuIG1fdmlld0lt
cGwtPmlzRm9jdXNlZCgpOworfQorCitib29sIFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdWaXNpYmxl
KCkKK3sKKyAgICByZXR1cm4gbV92aWV3SW1wbC0+aXNWaXNpYmxlKCk7Cit9CisKK2Jvb2wgUGFn
ZUNsaWVudEltcGw6OmlzVmlld0luV2luZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpwcm9jZXNzRGlkQ3Jh
c2goKQoreworICAgIC8vIENoZWNrIGlmIGxvYWRpbmcgd2FzIG9uZ29pbmcsIHdoZW4gd2ViIHBy
b2Nlc3MgY3Jhc2hlZC4KKyAgICBkb3VibGUgbG9hZFByb2dyZXNzID0gZXdrX3ZpZXdfbG9hZF9w
cm9ncmVzc19nZXQobV92aWV3SW1wbC0+dmlldygpKTsKKyAgICBpZiAobG9hZFByb2dyZXNzID49
IDAgJiYgbG9hZFByb2dyZXNzIDwgMSkKKyAgICAgICAgbV92aWV3SW1wbC0+aW5mb3JtTG9hZFBy
b2dyZXNzKDEpOworCisgICAgbV92aWV3SW1wbC0+aW5mb3JtV2ViUHJvY2Vzc0NyYXNoZWQoKTsK
K30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkUmVsYXVuY2hQcm9jZXNzKCkKK3sKKyAgICBj
b25zdCBjaGFyKiB0aGVtZVBhdGggPSBtX3ZpZXdJbXBsLT50aGVtZVBhdGgoKTsKKyAgICBpZiAo
dGhlbWVQYXRoKQorICAgICAgICBtX3ZpZXdJbXBsLT5wYWdlKCktPnNldFRoZW1lUGF0aCh0aGVt
ZVBhdGgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpwYWdlQ2xvc2VkKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjp0b29sVGlwQ2hhbmdl
ZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG5ld1Rvb2xUaXApCit7CisgICAgbV92aWV3
SW1wbC0+aW5mb3JtVG9vbHRpcFRleHRDaGFuZ2UobmV3VG9vbFRpcCk7Cit9CisKK3ZvaWQgUGFn
ZUNsaWVudEltcGw6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1cnNvcikKK3sKKyAgICBtX3Zp
ZXdJbXBsLT5zZXRDdXJzb3IoY3Vyc29yKTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0
Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVz
KGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYgYXR0cikKK3sKKyNpZiBVU0UoVElM
RURfQkFDS0lOR19TVE9SRSkKKyAgICBtX3BhZ2VWaWV3cG9ydENvbnRyb2xsZXItPmRpZENoYW5n
ZVZpZXdwb3J0QXR0cmlidXRlcyhhdHRyKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGF0dHIp
OworI2VuZGlmCit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnJlZ2lzdGVyRWRpdENvbW1hbmQo
UGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5PiBjb21tYW5kLCBXZWJQYWdlUHJveHk6OlVu
ZG9PclJlZG8gdW5kb09yUmVkbykKK3sKKyAgICBtX3VuZG9Db250cm9sbGVyLnJlZ2lzdGVyRWRp
dENvbW1hbmQoY29tbWFuZCwgdW5kb09yUmVkbyk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6
OmNsZWFyQWxsRWRpdENvbW1hbmRzKCkKK3sKKyAgICBtX3VuZG9Db250cm9sbGVyLmNsZWFyQWxs
RWRpdENvbW1hbmRzKCk7Cit9CisKK2Jvb2wgUGFnZUNsaWVudEltcGw6OmNhblVuZG9SZWRvKFdl
YlBhZ2VQcm94eTo6VW5kb09yUmVkbyB1bmRvT3JSZWRvKQoreworICAgIHJldHVybiBtX3VuZG9D
b250cm9sbGVyLmNhblVuZG9SZWRvKHVuZG9PclJlZG8pOworfQorCit2b2lkIFBhZ2VDbGllbnRJ
bXBsOjpleGVjdXRlVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvIHVuZG9PclJlZG8p
Cit7CisgICAgbV91bmRvQ29udHJvbGxlci5leGVjdXRlVW5kb1JlZG8odW5kb09yUmVkbyk7Cit9
CisKK0Zsb2F0UmVjdCBQYWdlQ2xpZW50SW1wbDo6Y29udmVydFRvRGV2aWNlU3BhY2UoY29uc3Qg
RmxvYXRSZWN0JiB2aWV3UmVjdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biB2aWV3UmVjdDsKK30KKworRmxvYXRSZWN0IFBhZ2VDbGllbnRJbXBsOjpjb252ZXJ0VG9Vc2Vy
U3BhY2UoY29uc3QgRmxvYXRSZWN0JiB2aWV3UmVjdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiB2aWV3UmVjdDsKK30KKworSW50UG9pbnQgUGFnZUNsaWVudEltcGw6OnNj
cmVlblRvV2luZG93KGNvbnN0IEludFBvaW50JiBwb2ludCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiBwb2ludDsKK30KKworSW50UmVjdCBQYWdlQ2xpZW50SW1wbDo6d2lu
ZG93VG9TY3JlZW4oY29uc3QgSW50UmVjdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gSW50UmVjdCgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpkb25lV2l0aEtl
eUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBib29sKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQordm9pZCBQYWdlQ2xp
ZW50SW1wbDo6ZG9uZVdpdGhUb3VjaEV2ZW50KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZlbnQmLCBi
b29sIC8qd2FzRXZlbnRIYW5kbGVkKi8pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyNl
bmRpZgorCitQYXNzUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBQYWdlQ2xpZW50SW1wbDo6Y3Jl
YXRlUG9wdXBNZW51UHJveHkoV2ViUGFnZVByb3h5KiBwYWdlKQoreworICAgIHJldHVybiBXZWJQ
b3B1cE1lbnVQcm94eUVmbDo6Y3JlYXRlKG1fdmlld0ltcGwsIHBhZ2UpOworfQorCitQYXNzUmVm
UHRyPFdlYkNvbnRleHRNZW51UHJveHk+IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGVDb250ZXh0TWVu
dVByb3h5KFdlYlBhZ2VQcm94eSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gMDsKK30KKworI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQorUGFzc1JlZlB0cjxXZWJD
b2xvckNob29zZXJQcm94eT4gUGFnZUNsaWVudEltcGw6OmNyZWF0ZUNvbG9yQ2hvb3NlclByb3h5
KFdlYlBhZ2VQcm94eSosIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKyNlbmRp
ZgorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRGaW5kSW5kaWNhdG9yKFBhc3NSZWZQdHI8Rmlu
ZEluZGljYXRvcj4sIGJvb2wsIGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmVu
dGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpCit7
CisgICAgbV92aWV3SW1wbC0+ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOworfQor
Cit2b2lkIFBhZ2VDbGllbnRJbXBsOjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKQor
eworICAgIG1fdmlld0ltcGwtPmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOworfQor
Cit2b2lkIFBhZ2VDbGllbnRJbXBsOjp1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShj
b25zdCBMYXllclRyZWVDb250ZXh0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorI2Vu
ZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKwordm9pZCBQYWdlQ2xpZW50SW1w
bDo6ZGlkQ2hhbmdlU2Nyb2xsYmFyc0Zvck1haW5GcmFtZSgpIGNvbnN0Cit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkQ29tbWl0TG9hZEZvck1h
aW5GcmFtZShib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGFnZUNs
aWVudEltcGw6OmRpZEZpbmlzaExvYWRpbmdEYXRhRm9yQ3VzdG9tUmVwcmVzZW50YXRpb24oY29u
c3QgU3RyaW5nJiwgY29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSYpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworZG91YmxlIFBhZ2VDbGllbnRJbXBsOjpjdXN0b21SZXByZXNlbnRh
dGlvblpvb21GYWN0b3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7
Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNldEN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZh
Y3Rvcihkb3VibGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQYWdlQ2xp
ZW50SW1wbDo6Zmxhc2hCYWNraW5nU3RvcmVVcGRhdGVzKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6Zmlu
ZFN0cmluZ0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMs
IHVuc2lnbmVkKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVu
dEltcGw6OmNvdW50U3RyaW5nTWF0Y2hlc0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3Ry
aW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnVwZGF0ZVRleHRJbnB1dFN0YXRlKCkKK3sKKyAgICBt
X3ZpZXdJbXBsLT51cGRhdGVUZXh0SW5wdXRTdGF0ZSgpOworfQorCit2b2lkIFBhZ2VDbGllbnRJ
bXBsOjpoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSogZG93bmxvYWQpCit7Cisg
ICAgRXdrX0NvbnRleHQqIGNvbnRleHQgPSBtX3ZpZXdJbXBsLT5ld2tDb250ZXh0KCk7CisgICAg
Y29udGV4dC0+ZG93bmxvYWRNYW5hZ2VyKCktPnJlZ2lzdGVyRG93bmxvYWQoZG93bmxvYWQsIG1f
dmlld0ltcGwpOworfQorCisjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCit2b2lkIFBhZ2VD
bGllbnRJbXBsOjpwYWdlRGlkUmVxdWVzdFNjcm9sbChjb25zdCBJbnRQb2ludCYgcG9zaXRpb24p
Cit7CisgICAgbV9wYWdlVmlld3BvcnRDb250cm9sbGVyLT5wYWdlRGlkUmVxdWVzdFNjcm9sbChw
b3NpdGlvbik7Cit9CisjZW5kaWYKKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkQ2hhbmdlQ29u
dGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCit7CisjaWYgVVNFKFRJTEVE
X0JBQ0tJTkdfU1RPUkUpCisgICAgbV9wYWdlVmlld3BvcnRDb250cm9sbGVyLT5kaWRDaGFuZ2VD
b250ZW50c1NpemUoc2l6ZSk7CisjZWxzZQorICAgIG1fdmlld0ltcGwtPmluZm9ybUNvbnRlbnRz
U2l6ZUNoYW5nZShzaXplKTsKKyNlbmRpZgorfQorCisjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RP
UkUpCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0
KQoreworICAgIG1fcGFnZVZpZXdwb3J0Q29udHJvbGxlci0+ZGlkUmVuZGVyRnJhbWUoY29udGVu
dHNTaXplLCBjb3ZlcmVkUmVjdCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnBhZ2VUcmFu
c2l0aW9uVmlld3BvcnRSZWFkeSgpCit7CisgICAgbV9wYWdlVmlld3BvcnRDb250cm9sbGVyLT5w
YWdlVHJhbnNpdGlvblZpZXdwb3J0UmVhZHkoKTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNs
aWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudEltcGwu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjBjYTgyCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50SW1wbC5oCkBA
IC0wLDAgKzEsMTM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ry
b25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQYWdlQ2xpZW50SW1wbF9oCisjZGVmaW5lIFBhZ2VD
bGllbnRJbXBsX2gKKworI2luY2x1ZGUgIkRlZmF1bHRVbmRvQ29udHJvbGxlci5oIgorI2luY2x1
ZGUgIlBhZ2VDbGllbnQuaCIKKyNpbmNsdWRlIDxFdmFzLmg+CisKK2NsYXNzIEV3a1ZpZXdJbXBs
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUGFnZVZpZXdwb3J0Q29udHJvbGxlcjsK
KworY2xhc3MgUGFnZUNsaWVudEltcGwgOiBwdWJsaWMgUGFnZUNsaWVudCB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NPd25QdHI8UGFnZUNsaWVudEltcGw+IGNyZWF0ZShFd2tWaWV3SW1wbCog
dmlld0ltcGwpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFBhZ2VDbGllbnRJ
bXBsKHZpZXdJbXBsKSk7CisgICAgfQorICAgIH5QYWdlQ2xpZW50SW1wbCgpOworCisgICAgRXdr
Vmlld0ltcGwqIHZpZXdJbXBsKCkgY29uc3Q7CisjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUp
CisgICAgdm9pZCBzZXRQYWdlVmlld3BvcnRDb250cm9sbGVyKFBhZ2VWaWV3cG9ydENvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIpIHsgbV9wYWdlVmlld3BvcnRDb250cm9sbGVyID0gY29udHJvbGxlcjsg
fQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgUGFnZUNsaWVudEltcGwoRXdrVmll
d0ltcGwqKTsKKworICAgIC8vIFBhZ2VDbGllbnQKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8RHJh
d2luZ0FyZWFQcm94eT4gY3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRWaWV3TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlzcGxheVZpZXcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVmlldyhjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOworICAgIHZpcnR1
YWwgV2ViQ29yZTo6SW50U2l6ZSB2aWV3U2l6ZSgpOworICAgIHZpcnR1YWwgYm9vbCBpc1ZpZXdX
aW5kb3dBY3RpdmUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWaWV3Rm9jdXNlZCgpOworICAgIHZp
cnR1YWwgYm9vbCBpc1ZpZXdWaXNpYmxlKCk7CisgICAgdmlydHVhbCBib29sIGlzVmlld0luV2lu
ZG93KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc0RpZENyYXNoKCk7CisgICAgdmlydHVh
bCB2b2lkIGRpZFJlbGF1bmNoUHJvY2VzcygpOworICAgIHZpcnR1YWwgdm9pZCBwYWdlQ2xvc2Vk
KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgdG9vbFRpcENoYW5nZWQoY29uc3QgU3RyaW5nJiwgY29u
c3QgU3RyaW5nJik7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6
OkN1cnNvciYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92
ZXMoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyhj
b25zdCBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmKTsKKworICAgIHZpcnR1YWwgdm9pZCBy
ZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4sIFdlYlBh
Z2VQcm94eTo6VW5kb09yUmVkbyk7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsRWRpdENvbW1h
bmRzKCk7CisgICAgdmlydHVhbCBib29sIGNhblVuZG9SZWRvKFdlYlBhZ2VQcm94eTo6VW5kb09y
UmVkbyk7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVVbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVu
ZG9PclJlZG8pOworICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRUb0Rldmlj
ZVNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6
RmxvYXRSZWN0IGNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsK
KyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IHNjcmVlblRvV2luZG93KGNvbnN0IFdlYkNv
cmU6OkludFBvaW50Jik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHdpbmRvd1RvU2Ny
ZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKworICAgIHZvaWQgdXBkYXRlVGV4dElucHV0
U3RhdGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2Fk
UHJveHkqKTsKKworICAgIHZpcnR1YWwgdm9pZCBkb25lV2l0aEtleUV2ZW50KGNvbnN0IE5hdGl2
ZVdlYktleWJvYXJkRXZlbnQmLCBib29sKTsKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAg
IHZpcnR1YWwgdm9pZCBkb25lV2l0aFRvdWNoRXZlbnQoY29uc3QgTmF0aXZlV2ViVG91Y2hFdmVu
dCYsIGJvb2wgd2FzRXZlbnRIYW5kbGVkKTsKKyNlbmRpZgorCisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPFdlYlBvcHVwTWVudVByb3h5PiBjcmVhdGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkq
KTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29udGV4dE1lbnVQcm94eT4gY3JlYXRlQ29u
dGV4dE1lbnVQcm94eShXZWJQYWdlUHJveHkqKTsKKworI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NP
TE9SKQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb2xvckNob29zZXJQcm94eT4gY3JlYXRl
Q29sb3JDaG9vc2VyUHJveHkoV2ViUGFnZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImIGlu
aXRpYWxDb2xvciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworI2VuZGlmCisKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0RmluZEluZGljYXRvcihQYXNzUmVmUHRyPEZpbmRJbmRpY2F0b3I+LCBib29s
LCBib29sKTsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgdmlydHVhbCB2
b2lkIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4
dCYpOworICAgIHZpcnR1YWwgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3Qg
TGF5ZXJUcmVlQ29udGV4dCYpOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdl
U2Nyb2xsYmFyc0Zvck1haW5GcmFtZSgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGRpZENv
bW1pdExvYWRGb3JNYWluRnJhbWUoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExv
YWRpbmdEYXRhRm9yQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgQ29y
ZUlQQzo6RGF0YVJlZmVyZW5jZSYpOworICAgIHZpcnR1YWwgZG91YmxlIGN1c3RvbVJlcHJlc2Vu
dGF0aW9uWm9vbUZhY3RvcigpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDdXN0b21SZXByZXNlbnRh
dGlvblpvb21GYWN0b3IoZG91YmxlKTsKKworICAgIHZpcnR1YWwgdm9pZCBmbGFzaEJhY2tpbmdT
dG9yZVVwZGF0ZXMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+Jik7CisgICAgdmlydHVh
bCB2b2lkIGZpbmRTdHJpbmdJbkN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIEZp
bmRPcHRpb25zLCB1bnNpZ25lZCk7CisgICAgdmlydHVhbCB2b2lkIGNvdW50U3RyaW5nTWF0Y2hl
c0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2ln
bmVkKTsKKworI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgIHZpcnR1YWwgdm9pZCBw
YWdlRGlkUmVxdWVzdFNjcm9sbChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOworI2VuZGlmCisK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQ29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmKTsKKworI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50c1NpemUsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFn
ZVRyYW5zaXRpb25WaWV3cG9ydFJlYWR5KCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBFd2tW
aWV3SW1wbCogbV92aWV3SW1wbDsKKyAgICBEZWZhdWx0VW5kb0NvbnRyb2xsZXIgbV91bmRvQ29u
dHJvbGxlcjsKKyNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICBQYWdlVmlld3BvcnRD
b250cm9sbGVyKiBtX3BhZ2VWaWV3cG9ydENvbnRyb2xsZXI7CisjZW5kaWYKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUGFnZUNsaWVudEltcGxfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xp
ZW50RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVZpZXdwb3J0Q29u
dHJvbGxlckNsaWVudEVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
M2JkZGJlNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbC5jcHAKQEAgLTAsMCArMSwxMzIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhZ2VW
aWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwuaCIKKworI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NU
T1JFKQorCisjaW5jbHVkZSAiRXdrVmlld0ltcGwuaCIKKyNpbmNsdWRlICJMYXllclRyZWVDb29y
ZGluYXRvclByb3h5LmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlUmVuZGVyZXIuaCIKKyNpbmNsdWRl
ICJQYWdlVmlld3BvcnRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRy
aXguaCIKKyNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworUGFnZVZpZXdwb3J0Q29udHJvbGxlckNs
aWVudEVmbDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbChFd2tWaWV3SW1wbCogdmll
d0ltcGwpCisgICAgOiBtX3ZpZXdJbXBsKHZpZXdJbXBsKQorICAgICwgbV9zY2FsZUZhY3Rvcigx
KQorICAgICwgbV9wYWdlVmlld3BvcnRDb250cm9sbGVyKDApCit7CisgICAgQVNTRVJUKG1fdmll
d0ltcGwpOworfQorCitQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjp+UGFnZVZpZXdw
b3J0Q29udHJvbGxlckNsaWVudEVmbCgpCit7Cit9CisKK0RyYXdpbmdBcmVhUHJveHkqIFBhZ2VW
aWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6OmRyYXdpbmdBcmVhKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV92aWV3SW1wbC0+cGFnZSgpLT5kcmF3aW5nQXJlYSgpOworfQorCit2b2lkIFBhZ2VW
aWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6OnNldFJlbmRlcmVyQWN0aXZlKGJvb2wgYWN0aXZl
KQoreworICAgIGRyYXdpbmdBcmVhKCktPmxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkoKS0+bGF5
ZXJUcmVlUmVuZGVyZXIoKS0+c2V0QWN0aXZlKGFjdGl2ZSk7Cit9CisKK3ZvaWQgUGFnZVZpZXdw
b3J0Q29udHJvbGxlckNsaWVudEVmbDo6ZGlzcGxheShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25z
dCBJbnRQb2ludCYgdmlld1Bvc2l0aW9uKQoreworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9u
TWF0cml4IG1hdHJpeDsKKyAgICBtYXRyaXguc2V0TWF0cml4KG1fc2NhbGVGYWN0b3IsIDAsIDAs
IG1fc2NhbGVGYWN0b3IsIC1tX3Njcm9sbFBvc2l0aW9uLngoKSAqIG1fc2NhbGVGYWN0b3IgKyB2
aWV3UG9zaXRpb24ueCgpICwgLW1fc2Nyb2xsUG9zaXRpb24ueSgpICogbV9zY2FsZUZhY3RvciAr
IHZpZXdQb3NpdGlvbi55KCkpOworCisgICAgTGF5ZXJUcmVlUmVuZGVyZXIqIHJlbmRlcmVyID0g
ZHJhd2luZ0FyZWEoKS0+bGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSgpLT5sYXllclRyZWVSZW5k
ZXJlcigpOworICAgIHJlbmRlcmVyLT5zZXRBY3RpdmUodHJ1ZSk7CisgICAgcmVuZGVyZXItPnN5
bmNSZW1vdGVDb250ZW50KCk7CisgICAgSW50UmVjdCBjbGlwUmVjdChyZWN0KTsKKyAgICBjbGlw
UmVjdC5tb3ZlKHZpZXdQb3NpdGlvbi54KCksIHZpZXdQb3NpdGlvbi55KCkpOworICAgIHJlbmRl
cmVyLT5wYWludFRvQ3VycmVudEdMQ29udGV4dChtYXRyaXgsIDEsIGNsaXBSZWN0KTsKK30KKwor
dm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjp1cGRhdGVWaWV3cG9ydFNpemUo
Y29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKQoreworICAgIG1fdmlld3BvcnRTaXplID0gdmll
d3BvcnRTaXplOworICAgIG1fdmlld0ltcGwtPnBhZ2UoKS0+c2V0Vmlld3BvcnRTaXplKHZpZXdw
b3J0U2l6ZSk7CisgICAgbV9wYWdlVmlld3BvcnRDb250cm9sbGVyLT5kaWRDaGFuZ2VWaWV3cG9y
dFNpemUodmlld3BvcnRTaXplKTsKK30KKwordm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xp
ZW50RWZsOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEludFBvaW50JiBuZXdTY3JvbGxQ
b3NpdGlvbiwgZmxvYXQgbmV3U2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIC8qdHJhamVjdG9yeSov
KQoreworICAgIG1fc2NhbGVGYWN0b3IgPSBuZXdTY2FsZTsKKyAgICBtX3Njcm9sbFBvc2l0aW9u
ID0gbmV3U2Nyb2xsUG9zaXRpb247CisgICAgbV9wYWdlVmlld3BvcnRDb250cm9sbGVyLT5kaWRD
aGFuZ2VDb250ZW50c1Zpc2liaWxpdHkobV9zY3JvbGxQb3NpdGlvbiwgbV9zY2FsZUZhY3Rvciwg
RmxvYXRQb2ludCgpKTsKK30KKwordm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZs
OjpkaWRDaGFuZ2VDb250ZW50c1NpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKK3sK
KyAgICBtX2NvbnRlbnRzU2l6ZSA9IHNpemU7CisgICAgSW50UmVjdCByZWN0ID0gSW50UmVjdChJ
bnRQb2ludCgpLCBtX3ZpZXdwb3J0U2l6ZSk7CisgICAgbV92aWV3SW1wbC0+cmVkcmF3UmVnaW9u
KHJlY3QpOworfQorCit2b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6OnNldFZp
ZXdwb3J0UG9zaXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgY29udGVudHNQb2ludCkK
K3sKKyAgICBzZXRWaXNpYmxlQ29udGVudHNSZWN0KEludFBvaW50KGNvbnRlbnRzUG9pbnQueCgp
LCBjb250ZW50c1BvaW50LnkoKSksIG1fc2NhbGVGYWN0b3IsIEZsb2F0UG9pbnQoKSk7Cit9CisK
K3ZvaWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbDo6c2V0Q29udGVudHNTY2FsZShm
bG9hdCBuZXdTY2FsZSwgYm9vbCB0cmVhdEFzSW5pdGlhbFZhbHVlKQoreworICAgIGlmICh0cmVh
dEFzSW5pdGlhbFZhbHVlKQorICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gSW50UG9pbnQoKTsK
KyAgICBtX3NjYWxlRmFjdG9yID0gbmV3U2NhbGU7Cit9CisKK3ZvaWQgUGFnZVZpZXdwb3J0Q29u
dHJvbGxlckNsaWVudEVmbDo6ZGlkUmVzdW1lQ29udGVudCgpCit7CisgICAgbV9wYWdlVmlld3Bv
cnRDb250cm9sbGVyLT5kaWRDaGFuZ2VDb250ZW50c1Zpc2liaWxpdHkobV9zY3JvbGxQb3NpdGlv
biwgbV9zY2FsZUZhY3Rvcik7Cit9CisKK3ZvaWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVu
dEVmbDo6ZGlkQ2hhbmdlVmlzaWJsZUNvbnRlbnRzKCkKK3sKKyAgICBJbnRSZWN0IHJlY3QgPSBJ
bnRSZWN0KEludFBvaW50KCksIG1fdmlld3BvcnRTaXplKTsKKyAgICBtX3ZpZXdJbXBsLT5yZWRy
YXdSZWdpb24ocmVjdCk7Cit9CisKK3ZvaWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVm
bDo6ZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKCkKK3sKK30KKwordm9pZCBQYWdlVmlld3Bv
cnRDb250cm9sbGVyQ2xpZW50RWZsOjpzZXRDb250cm9sbGVyKFBhZ2VWaWV3cG9ydENvbnRyb2xs
ZXIqIHBhZ2VWaWV3cG9ydENvbnRyb2xsZXIpCit7CisgICAgbV9wYWdlVmlld3BvcnRDb250cm9s
bGVyID0gcGFnZVZpZXdwb3J0Q29udHJvbGxlcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisjZW5kaWYgLy8gVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbC5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xp
ZW50RWZsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUwNTI2YQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVZpZXdwb3J0
Q29udHJvbGxlckNsaWVudEVmbC5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsX2gKKyNkZWZpbmUg
UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbF9oCisKKyNpZiBVU0UoVElMRURfQkFDS0lO
R19TVE9SRSkKKworI2luY2x1ZGUgIlBhZ2VDbGllbnRJbXBsLmgiCisjaW5jbHVkZSAiUGFnZVZp
ZXdwb3J0Q29udHJvbGxlckNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisK
K2NsYXNzIEV3a1ZpZXdJbXBsOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUGFnZVZp
ZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbCA6IHB1YmxpYyBQYWdlVmlld3BvcnRDb250cm9sbGVy
Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxQYWdlVmlld3BvcnRDb250
cm9sbGVyQ2xpZW50RWZsPiBjcmVhdGUoRXdrVmlld0ltcGwqIHZpZXdJbXBsKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZs
KHZpZXdJbXBsKSk7CisgICAgfQorICAgIH5QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZs
KCk7CisKKyAgICBEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYSgpIGNvbnN0OworICAgIFdl
YkNvcmU6OkludFNpemUgdmlld1NpemUoKSB7IHJldHVybiBtX3ZpZXdwb3J0U2l6ZTsgfQorICAg
IGZsb2F0IHNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZUZhY3RvcjsgfQorICAg
IFdlYkNvcmU6OkludFBvaW50IHNjcm9sbFBvc2l0aW9uKCkgeyByZXR1cm4gbV9zY3JvbGxQb3Np
dGlvbjsgfQorCisgICAgdm9pZCBkaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYgdmlld1Bvc2l0aW9uKTsKKyAgICB2b2lkIHVwZGF0ZVZpZXdw
b3J0U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiB2aWV3cG9ydFNpemUpOworICAgIHZvaWQg
c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGZsb2F0LCBj
b25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CisgICAgdm9pZCBzZXRSZW5kZXJlckFjdGl2ZShi
b29sKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3cG9ydFBvc2l0aW9uKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmIGNvbnRlbnRzUG9pbnQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250
ZW50c1NjYWxlKGZsb2F0LCBib29sIHRyZWF0QXNJbml0aWFsVmFsdWUpOworCisgICAgdmlydHVh
bCB2b2lkIGRpZFJlc3VtZUNvbnRlbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQ29u
dGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
Q2hhbmdlVmlzaWJsZUNvbnRlbnRzKCk7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZpZXdw
b3J0QXR0cmlidXRlcygpOworCisgICAgdmlydHVhbCB2b2lkIHNldENvbnRyb2xsZXIoUGFnZVZp
ZXdwb3J0Q29udHJvbGxlciopOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IFBhZ2VWaWV3cG9y
dENvbnRyb2xsZXJDbGllbnRFZmwoRXdrVmlld0ltcGwqKTsKKworICAgIEV3a1ZpZXdJbXBsKiBt
X3ZpZXdJbXBsOworICAgIFdlYkNvcmU6OkludFNpemUgbV9jb250ZW50c1NpemU7CisgICAgV2Vi
Q29yZTo6SW50U2l6ZSBtX3ZpZXdwb3J0U2l6ZTsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBtX3Nj
cm9sbFBvc2l0aW9uOworICAgIGZsb2F0IG1fc2NhbGVGYWN0b3I7CisgICAgUGFnZVZpZXdwb3J0
Q29udHJvbGxlciogbV9wYWdlVmlld3BvcnRDb250cm9sbGVyOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZgorCisjZW5kaWYgLy8gUGFnZVZpZXdwb3J0Q29udHJvbGxlckNs
aWVudEVmbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1ZpYnJh
dGlvblByb3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVmlicmF0aW9u
UHJvdmlkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZTYyOTYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1ZpYnJhdGlv
blByb3ZpZGVyLmNwcApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlZpYnJhdGlvblByb3ZpZGVyLmgiCisKKyNpZiBF
TkFCTEUoVklCUkFUSU9OKQorCisjaW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAiV0tD
b250ZXh0LmgiCisjaW5jbHVkZSAiV0tWaWJyYXRpb24uaCIKKyNpbmNsdWRlIDxFdmFzLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworLyoq
CisgKiBcc3RydWN0ICBFd2tfVmlicmF0aW9uX0NsaWVudAorICogQGJyaWVmICAgQ29udGFpbnMg
dGhlIHZpYnJhdGlvbiBjbGllbnQgY2FsbGJhY2tzLgorICovCitzdHJ1Y3QgRXdrX1ZpYnJhdGlv
bl9DbGllbnQgeworICAgIEV3a19WaWJyYXRpb25fQ2xpZW50X1ZpYnJhdGVfQ2IgdmlicmF0ZTsK
KyAgICBFd2tfVmlicmF0aW9uX0NsaWVudF9WaWJyYXRpb25fQ2FuY2VsX0NiIGNhbmNlbFZpYnJh
dGlvbjsKKyAgICB2b2lkKiB1c2VyRGF0YTsKKworICAgIEV3a19WaWJyYXRpb25fQ2xpZW50KEV3
a19WaWJyYXRpb25fQ2xpZW50X1ZpYnJhdGVfQ2IgdmlicmF0ZSwgRXdrX1ZpYnJhdGlvbl9DbGll
bnRfVmlicmF0aW9uX0NhbmNlbF9DYiBjYW5jZWxWaWJyYXRpb24sIHZvaWQqIHVzZXJEYXRhKQor
ICAgICAgICA6IHZpYnJhdGUodmlicmF0ZSkKKyAgICAgICAgLCBjYW5jZWxWaWJyYXRpb24oY2Fu
Y2VsVmlicmF0aW9uKQorICAgICAgICAsIHVzZXJEYXRhKHVzZXJEYXRhKQorICAgIHsgfQorfTsK
Kworc3RhdGljIGlubGluZSBWaWJyYXRpb25Qcm92aWRlciogdG9WaWJyYXRpb25Qcm92aWRlcihj
b25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxWaWJyYXRp
b25Qcm92aWRlcio+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKK30KKworc3RhdGlj
IHZvaWQgdmlicmF0ZUNhbGxiYWNrKFdLVmlicmF0aW9uUmVmLCB1aW50NjRfdCB2aWJyYXRpb25U
aW1lLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIHRvVmlicmF0aW9uUHJvdmlkZXIo
Y2xpZW50SW5mbyktPnZpYnJhdGUodmlicmF0aW9uVGltZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNh
bmNlbFZpYnJhdGlvbkNhbGxiYWNrKFdLVmlicmF0aW9uUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKQoreworICAgIHRvVmlicmF0aW9uUHJvdmlkZXIoY2xpZW50SW5mbyktPmNhbmNlbFZpYnJh
dGlvbigpOworfQorCitQYXNzUmVmUHRyPFZpYnJhdGlvblByb3ZpZGVyPiBWaWJyYXRpb25Qcm92
aWRlcjo6Y3JlYXRlKFdLQ29udGV4dFJlZiB3a0NvbnRleHQpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBWaWJyYXRpb25Qcm92aWRlcih3a0NvbnRleHQpKTsKK30KKworVmlicmF0aW9uUHJv
dmlkZXI6OlZpYnJhdGlvblByb3ZpZGVyKFdLQ29udGV4dFJlZiB3a0NvbnRleHQpCisgICAgOiBt
X3drQ29udGV4dCh3a0NvbnRleHQpCit7CisgICAgQVNTRVJUKG1fd2tDb250ZXh0LmdldCgpKTsK
KworICAgIFdLVmlicmF0aW9uUmVmIHdrVmlicmF0aW9uID0gV0tDb250ZXh0R2V0VmlicmF0aW9u
KG1fd2tDb250ZXh0LmdldCgpKTsKKyAgICBBU1NFUlQod2tWaWJyYXRpb24pOworCisgICAgV0tW
aWJyYXRpb25Qcm92aWRlciB3a1ZpYnJhdGlvblByb3ZpZGVyID0geworICAgICAgICBrV0tWaWJy
YXRpb25Qcm92aWRlckN1cnJlbnRWZXJzaW9uLAorICAgICAgICB0aGlzLCAvLyBjbGllbnRJbmZv
CisgICAgICAgIHZpYnJhdGVDYWxsYmFjaywKKyAgICAgICAgY2FuY2VsVmlicmF0aW9uQ2FsbGJh
Y2sKKyAgICB9OworICAgIFdLVmlicmF0aW9uU2V0UHJvdmlkZXIod2tWaWJyYXRpb24sICZ3a1Zp
YnJhdGlvblByb3ZpZGVyKTsKK30KKworVmlicmF0aW9uUHJvdmlkZXI6On5WaWJyYXRpb25Qcm92
aWRlcigpCit7CisgICAgV0tWaWJyYXRpb25SZWYgd2tWaWJyYXRpb24gPSBXS0NvbnRleHRHZXRW
aWJyYXRpb24obV93a0NvbnRleHQuZ2V0KCkpOworICAgIEFTU0VSVCh3a1ZpYnJhdGlvbik7CisK
KyAgICBXS1ZpYnJhdGlvblNldFByb3ZpZGVyKHdrVmlicmF0aW9uLCAwKTsKK30KKwordm9pZCBW
aWJyYXRpb25Qcm92aWRlcjo6dmlicmF0ZSh1aW50NjRfdCB2aWJyYXRpb25UaW1lKQoreworICAg
IGlmIChtX3ZpYnJhdGlvbkNsaWVudCAmJiBtX3ZpYnJhdGlvbkNsaWVudC0+dmlicmF0ZSkKKyAg
ICAgICAgbV92aWJyYXRpb25DbGllbnQtPnZpYnJhdGUodmlicmF0aW9uVGltZSwgbV92aWJyYXRp
b25DbGllbnQtPnVzZXJEYXRhKTsKK30KKwordm9pZCBWaWJyYXRpb25Qcm92aWRlcjo6Y2FuY2Vs
VmlicmF0aW9uKCkKK3sKKyAgICBpZiAobV92aWJyYXRpb25DbGllbnQgJiYgbV92aWJyYXRpb25D
bGllbnQtPmNhbmNlbFZpYnJhdGlvbikKKyAgICAgICAgbV92aWJyYXRpb25DbGllbnQtPmNhbmNl
bFZpYnJhdGlvbihtX3ZpYnJhdGlvbkNsaWVudC0+dXNlckRhdGEpOworfQorCit2b2lkIFZpYnJh
dGlvblByb3ZpZGVyOjpzZXRWaWJyYXRpb25DbGllbnRDYWxsYmFja3MoRXdrX1ZpYnJhdGlvbl9D
bGllbnRfVmlicmF0ZV9DYiB2aWJyYXRlLCBFd2tfVmlicmF0aW9uX0NsaWVudF9WaWJyYXRpb25f
Q2FuY2VsX0NiIGNhbmNlbFZpYnJhdGlvbiwgdm9pZCogZGF0YSkKK3sKKyAgICBtX3ZpYnJhdGlv
bkNsaWVudCA9IGFkb3B0UHRyKG5ldyBFd2tfVmlicmF0aW9uX0NsaWVudCh2aWJyYXRlLCBjYW5j
ZWxWaWJyYXRpb24sIGRhdGEpKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShWSUJSQVRJT04pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1ZpYnJhdGlvblByb3ZpZGVy
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1ZpYnJhdGlvblByb3ZpZGVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgxMDM5MwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVmlicmF0aW9uUHJvdmlkZXIuaApAQCAt
MCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFZpYnJhdGlvblByb3Zp
ZGVyX2gKKyNkZWZpbmUgVmlicmF0aW9uUHJvdmlkZXJfaAorCisjaWYgRU5BQkxFKFZJQlJBVElP
TikKKworI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCisjaW5jbHVkZSAiZXdrX2NvbnRleHQuaCIK
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisKK3R5cGVkZWYgc3RydWN0IEV3a19WaWJyYXRpb25fQ2xpZW50IEV3a19WaWJyYXRpb25fQ2xp
ZW50OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgVmlicmF0aW9uUHJvdmlkZXIgOiBw
dWJsaWMgUmVmQ291bnRlZDxWaWJyYXRpb25Qcm92aWRlcj4geworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFZpYnJhdGlvblByb3ZpZGVyPiBjcmVhdGUoV0tDb250ZXh0UmVmKTsKKyAg
ICB2aXJ0dWFsIH5WaWJyYXRpb25Qcm92aWRlcigpOworCisgICAgdm9pZCB2aWJyYXRlKHVpbnQ2
NF90IHZpYnJhdGlvblRpbWUpOworICAgIHZvaWQgY2FuY2VsVmlicmF0aW9uKCk7CisgICAgdm9p
ZCBzZXRWaWJyYXRpb25DbGllbnRDYWxsYmFja3MoRXdrX1ZpYnJhdGlvbl9DbGllbnRfVmlicmF0
ZV9DYiwgRXdrX1ZpYnJhdGlvbl9DbGllbnRfVmlicmF0aW9uX0NhbmNlbF9DYiwgdm9pZCopOwor
Citwcml2YXRlOgorICAgIGV4cGxpY2l0IFZpYnJhdGlvblByb3ZpZGVyKFdLQ29udGV4dFJlZik7
CisKKyAgICBXS1JldGFpblB0cjxXS0NvbnRleHRSZWY+IG1fd2tDb250ZXh0OworICAgIE93blB0
cjxFd2tfVmlicmF0aW9uX0NsaWVudD4gbV92aWJyYXRpb25DbGllbnQ7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShWSUJSQVRJT04pCisKKyNlbmRpZiAv
LyBWaWJyYXRpb25Qcm92aWRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL1dlYktpdFRleHRDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9l
ZmwvV2ViS2l0VGV4dENoZWNrZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjJmZjM5YzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
ZWZsL1dlYktpdFRleHRDaGVja2VyLmNwcApAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERF
UiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRUZXh0Q2hlY2tlci5oIgorCisj
aWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2lu
Y2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLTXV0YWJsZUFycmF5LmgiCisjaW5jbHVk
ZSAiV0tSZXRhaW5QdHIuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJX
ZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJld2tfc2V0dGluZ3MuaCIKKyNpbmNsdWRlICJld2tfdGV4
dF9jaGVja2VyX3ByaXZhdGUuaCIKKyNpbmNsdWRlIDxFaW5hLmg+CisjaW5jbHVkZSA8d3RmL093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK3N0YXRpYyBPd25QdHI8V2ViQ29yZTo6VGV4dENoZWNrZXJFbmNoYW50PiB0ZXh0Q2hl
Y2tlckVuY2hhbnQgPSBXZWJDb3JlOjpUZXh0Q2hlY2tlckVuY2hhbnQ6OmNyZWF0ZSgpOworCitz
dGF0aWMgRXdrX1RleHRfQ2hlY2tlciogZXdrVGV4dENoZWNrZXJDYWxsYmFja3MgPSBld2tfdGV4
dF9jaGVja2VyX2NhbGxiYWNrc19nZXQoKTsKKworYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZChjb25zdCB2b2lkKikKK3sKKyAgICByZXR1cm4gZXdrX3NldHRpbmdzX2NvbnRp
bnVvdXNfc3BlbGxfY2hlY2tpbmdfZW5hYmxlZF9nZXQoKTsKK30KKwordm9pZCBzZXRDb250aW51
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkLCBjb25zdCB2b2lkKikKK3sKKyAg
ICBld2tfc2V0dGluZ3NfY29udGludW91c19zcGVsbF9jaGVja2luZ19lbmFibGVkX3NldChlbmFi
bGVkKTsKK30KKwordWludDY0X3QgdW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXS1BhZ2VSZWYgcGFn
ZSwgY29uc3Qgdm9pZCopCit7CisgICAgaWYgKGV3a1RleHRDaGVja2VyQ2FsbGJhY2tzLT51bmlx
dWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldCkKKyAgICAgICAgcmV0dXJuIGV3a1RleHRDaGVja2Vy
Q2FsbGJhY2tzLT51bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2dldCh0b0ltcGwocGFnZSktPnZp
ZXdXaWRnZXQoKSk7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBjbG9zZVNwZWxsRG9jdW1l
bnRXaXRoVGFnKHVpbnQ2NF90IHRhZywgY29uc3Qgdm9pZCopCit7CisgICAgaWYgKGV3a1RleHRD
aGVja2VyQ2FsbGJhY2tzLT51bmlxdWVfc3BlbGxfZG9jdW1lbnRfdGFnX2Nsb3NlKQorICAgICAg
ICBld2tUZXh0Q2hlY2tlckNhbGxiYWNrcy0+dW5pcXVlX3NwZWxsX2RvY3VtZW50X3RhZ19jbG9z
ZSh0YWcpOworfQorCit2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyh1aW50NjRfdCB0YWcsIFdL
U3RyaW5nUmVmIHRleHQsIGludDMyX3QqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QqIG1p
c3NwZWxsaW5nTGVuZ3RoLCBjb25zdCB2b2lkKikKK3sKKyAgICBpZiAoZXdrVGV4dENoZWNrZXJD
YWxsYmFja3MtPnN0cmluZ19zcGVsbGluZ19jaGVjaykKKyAgICAgICAgZXdrVGV4dENoZWNrZXJD
YWxsYmFja3MtPnN0cmluZ19zcGVsbGluZ19jaGVjayh0YWcsIHRvSW1wbCh0ZXh0KS0+c3RyaW5n
KCkudXRmOCgpLmRhdGEoKSwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgp
OworICAgIGVsc2UKKyAgICAgICAgdGV4dENoZWNrZXJFbmNoYW50LT5jaGVja1NwZWxsaW5nT2ZT
dHJpbmcodG9JbXBsKHRleHQpLT5zdHJpbmcoKSwgKm1pc3NwZWxsaW5nTG9jYXRpb24sICptaXNz
cGVsbGluZ0xlbmd0aCk7Cit9CisKK1dLQXJyYXlSZWYgZ3Vlc3Nlc0ZvcldvcmQodWludDY0X3Qg
dGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKikKK3sKKyAgICBXS011dGFibGVBcnJh
eVJlZiBzdWdnZXN0aW9uc0ZvcldvcmQgPSBXS011dGFibGVBcnJheUNyZWF0ZSgpOworCisgICAg
aWYgKGV3a1RleHRDaGVja2VyQ2FsbGJhY2tzLT53b3JkX2d1ZXNzZXNfZ2V0KSB7CisgICAgICAg
IEVpbmFfTGlzdCogbGlzdCA9IGV3a1RleHRDaGVja2VyQ2FsbGJhY2tzLT53b3JkX2d1ZXNzZXNf
Z2V0KHRhZywgdG9JbXBsKHdvcmQpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAg
dm9pZCogaXRlbTsKKworICAgICAgICBFSU5BX0xJU1RfRlJFRShsaXN0LCBpdGVtKSB7CisgICAg
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3VnZ2VzdGlvbihBZG9wdFdLLCBXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzdGF0aWNfY2FzdDxjaGFyKj4oaXRlbSkpKTsKKyAg
ICAgICAgICAgIFdLQXJyYXlBcHBlbmRJdGVtKHN1Z2dlc3Rpb25zRm9yV29yZCwgc3VnZ2VzdGlv
bi5nZXQoKSk7CisgICAgICAgICAgICBmcmVlKGl0ZW0pOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlcyA9IHRleHRDaGVja2VyRW5jaGFudC0+
Z2V0R3Vlc3Nlc0ZvcldvcmQodG9JbXBsKHdvcmQpLT5zdHJpbmcoKSk7CisgICAgICAgIHNpemVf
dCBudW1iZXJPZkd1ZXNzZXMgPSBndWVzc2VzLnNpemUoKTsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBudW1iZXJPZkd1ZXNzZXM7ICsraSkgeworICAgICAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHN1Z2dlc3Rpb24oQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoZ3Vlc3Nlc1tpXS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgICAgICBXS0FycmF5
QXBwZW5kSXRlbShzdWdnZXN0aW9uc0ZvcldvcmQsIHN1Z2dlc3Rpb24uZ2V0KCkpOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIHN1Z2dlc3Rpb25zRm9yV29yZDsKK30KKwordm9pZCBs
ZWFybldvcmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKikKK3sK
KyAgICBpZiAoZXdrVGV4dENoZWNrZXJDYWxsYmFja3MtPndvcmRfbGVhcm4pCisgICAgICAgIGV3
a1RleHRDaGVja2VyQ2FsbGJhY2tzLT53b3JkX2xlYXJuKHRhZywgdG9JbXBsKHdvcmQpLT5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBlbHNlCisgICAgICAgIHRleHRDaGVja2VyRW5jaGFu
dC0+bGVhcm5Xb3JkKHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkpOworfQorCit2b2lkIGlnbm9yZVdv
cmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKikKK3sKKyAgICBp
ZiAoZXdrVGV4dENoZWNrZXJDYWxsYmFja3MtPndvcmRfaWdub3JlKQorICAgICAgICBld2tUZXh0
Q2hlY2tlckNhbGxiYWNrcy0+d29yZF9pZ25vcmUodGFnLCB0b0ltcGwod29yZCktPnN0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOworICAgIGVsc2UKKyAgICAgICAgdGV4dENoZWNrZXJFbmNoYW50LT5p
Z25vcmVXb3JkKHRvSW1wbCh3b3JkKS0+c3RyaW5nKCkpOworfQorCitWZWN0b3I8U3RyaW5nPiBh
dmFpbGFibGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCkKK3sKKyAgICByZXR1cm4gdGV4dENoZWNr
ZXJFbmNoYW50LT5hdmFpbGFibGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKCk7Cit9CisKK3ZvaWQg
dXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZ3Vh
Z2VzKQoreworICAgIHRleHRDaGVja2VyRW5jaGFudC0+dXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1
YWdlcyhsYW5ndWFnZXMpOworfQorCitWZWN0b3I8U3RyaW5nPiBsb2FkZWRTcGVsbENoZWNraW5n
TGFuZ3VhZ2VzKCkKK3sKKyAgICByZXR1cm4gdGV4dENoZWNrZXJFbmNoYW50LT5sb2FkZWRTcGVs
bENoZWNraW5nTGFuZ3VhZ2VzKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1dlYktpdFRleHRDaGVja2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
ZWZsL1dlYktpdFRleHRDaGVja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMGMxYWU2YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9l
ZmwvV2ViS2l0VGV4dENoZWNrZXIuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBXZWJLaXRUZXh0Q2hlY2tlcl9oCisjZGVmaW5lIFdlYktpdFRleHRDaGVja2VyX2gKKwor
I2lmIEVOQUJMRShTUEVMTENIRUNLKQorCisjaW5jbHVkZSAiVGV4dENoZWNrZXJFbmNoYW50Lmgi
CisjaW5jbHVkZSAiV0tBcnJheS5oIgorI2luY2x1ZGUgIldLUGFnZS5oIgorI2luY2x1ZGUgIldL
U3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBUaGUgZnVuY3Rpb25zIG1haW5s
eSBjaG9vc2UgYmV0d2VlbiBjbGllbnQncyBpbXBsZW1lbnRhdGlvbiBvZiBzcGVsbGluZyBhbmQg
dGhlIFdlYktpdCBvbmUuCisKKy8vIENhbGxiYWNrcyByZXF1aXJlZCBieSBXS1RleHRDaGVja2Vy
LgorYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChjb25zdCB2b2lkKiBjbGll
bnRJbmZvKTsKK3ZvaWQgc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5h
YmxlZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKK3VpbnQ2NF90IHVuaXF1ZVNwZWxsRG9j
dW1lbnRUYWcoV0tQYWdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3ZvaWQgY2xvc2VT
cGVsbERvY3VtZW50V2l0aFRhZyh1aW50NjRfdCB0YWcsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
OworCit2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVm
IHRleHQsIGludDMyX3QqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QqIG1pc3NwZWxsaW5n
TGVuZ3RoLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK1dLQXJyYXlSZWYgZ3Vlc3Nlc0Zvcldv
cmQodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB3b3JkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KTsKK3ZvaWQgbGVhcm5Xb3JkKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgd29yZCwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbyk7Cit2b2lkIGlnbm9yZVdvcmQodWludDY0X3QgdGFnLCBXS1N0cmlu
Z1JlZiB3b3JkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKworLy8gRW5jaGFudCdzIGhlbHBl
ci4KK1ZlY3RvcjxTdHJpbmc+IGF2YWlsYWJsZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsKK3Zv
aWQgdXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFu
Z3VhZ2VzKTsKK1ZlY3RvcjxTdHJpbmc+IGxvYWRlZFNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoKTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykK
KyNlbmRpZiAvLyBXZWJLaXRUZXh0Q2hlY2tlcl9oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>