<?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>205065</bug_id>
          
          <creation_ts>2019-12-10 08:53:34 -0800</creation_ts>
          <short_desc>Leverage the fact that WebPageProxy subclasses IPC::MessageSender to simplify IPC sending code</short_desc>
          <delta_ts>2019-12-10 14:30:59 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>WebKit 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>InRadar</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>achristensen</cc>
    
    <cc>beidson</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1597195</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-12-10 08:53:34 -0800</bug_when>
    <thetext>Leverage the fact that WebPageProxy subclasses IPC::MessageSender to simplify IPC sending code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597205</commentid>
    <comment_count>1</comment_count>
      <attachid>385268</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-12-10 09:05:41 -0800</bug_when>
    <thetext>Created attachment 385268
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597213</commentid>
    <comment_count>2</comment_count>
      <attachid>385271</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-12-10 09:25:42 -0800</bug_when>
    <thetext>Created attachment 385271
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597284</commentid>
    <comment_count>3</comment_count>
      <attachid>385292</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-12-10 12:00:46 -0800</bug_when>
    <thetext>Created attachment 385292
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597294</commentid>
    <comment_count>4</comment_count>
      <attachid>385292</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-12-10 12:10:48 -0800</bug_when>
    <thetext>Comment on attachment 385292
Patch

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

r=me with one important comment and one less important comment.

&gt; Source/WebKit/Platform/IPC/MessageSender.h:83
&gt; +        messageSenderConnection()-&gt;sendWithAsyncReply(WTFMove(message), WTFMove(completionHandler), destinationID, sendOptions);

What if the connection is null?  This should probably call sendMessage like AuxiliaryProcessProxy::sendWithAsyncReply does.

&gt; Source/WebKit/UIProcess/WebPageProxy.h:511
&gt; -    void systemPreviewActionTriggered(const WebCore::SystemPreviewInfo&amp;, const String&amp;) const;
&gt; +    void systemPreviewActionTriggered(const WebCore::SystemPreviewInfo&amp;, const String&amp;);

Why not make send const?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597303</commentid>
    <comment_count>5</comment_count>
      <attachid>385292</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-12-10 12:20:03 -0800</bug_when>
    <thetext>Comment on attachment 385292
Patch

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

&gt;&gt; Source/WebKit/Platform/IPC/MessageSender.h:83
&gt;&gt; +        messageSenderConnection()-&gt;sendWithAsyncReply(WTFMove(message), WTFMove(completionHandler), destinationID, sendOptions);
&gt; 
&gt; What if the connection is null?  This should probably call sendMessage like AuxiliaryProcessProxy::sendWithAsyncReply does.

Ok, I will look into this.

&gt;&gt; Source/WebKit/UIProcess/WebPageProxy.h:511
&gt;&gt; +    void systemPreviewActionTriggered(const WebCore::SystemPreviewInfo&amp;, const String&amp;);
&gt; 
&gt; Why not make send const?

If const, it was building because MessageSender::send() is not marked as const.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597311</commentid>
    <comment_count>6</comment_count>
      <attachid>385296</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-12-10 12:36:33 -0800</bug_when>
    <thetext>Created attachment 385296
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597314</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-12-10 12:42:27 -0800</bug_when>
    <thetext>(In reply to Chris Dumez from comment #5)
&gt; Comment on attachment 385292 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=385292&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit/Platform/IPC/MessageSender.h:83
&gt; &gt;&gt; +        messageSenderConnection()-&gt;sendWithAsyncReply(WTFMove(message), WTFMove(completionHandler), destinationID, sendOptions);
&gt; &gt; 
&gt; &gt; What if the connection is null?  This should probably call sendMessage like AuxiliaryProcessProxy::sendWithAsyncReply does.
&gt; 
&gt; Ok, I will look into this.
&gt; 
&gt; &gt;&gt; Source/WebKit/UIProcess/WebPageProxy.h:511
&gt; &gt;&gt; +    void systemPreviewActionTriggered(const WebCore::SystemPreviewInfo&amp;, const String&amp;);
&gt; &gt; 
&gt; &gt; Why not make send const?
&gt; 
&gt; If const, it was building because MessageSender::send() is not marked as
&gt; const.

it was *NOT* building</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597351</commentid>
    <comment_count>8</comment_count>
      <attachid>385296</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-12-10 14:29:46 -0800</bug_when>
    <thetext>Comment on attachment 385296
Patch

Clearing flags on attachment: 385296

Committed r253346: &lt;https://trac.webkit.org/changeset/253346&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597352</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-12-10 14:29:48 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597353</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-12-10 14:30:59 -0800</bug_when>
    <thetext>&lt;rdar://problem/57808886&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385268</attachid>
            <date>2019-12-10 09:05:41 -0800</date>
            <delta_ts>2019-12-10 09:25:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205065-20191210090540.patch</filename>
            <type>text/plain</type>
            <size>124489</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMzI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDFlMmU3YWYzMzA2YzQ0YzVk
N2YzZDg0N2I2ZGQ0MzY5YzVhNTMyODIuLjNhMjg1MWNmNDM3NTlkYjA1ODkyOGRhOTc0ZDdhMzFh
MzQ3ZDljNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcyIEBACisyMDE5LTEyLTEwICBDaHJpcyBE
dW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTGV2ZXJhZ2UgdGhlIGZhY3QgdGhh
dCBXZWJQYWdlUHJveHkgc3ViY2xhc3NlcyBJUEM6Ok1lc3NhZ2VTZW5kZXIgdG8gc2ltcGxpZnkg
SVBDIHNlbmRpbmcgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA1MDY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcDoKKyAgICAgICAgKFdLUGFnZVNl
dFBhZ2VMb2FkZXJDbGllbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1
dG9tYXRpb25TZXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Np
b246OnN3aXRjaFRvQnJvd3NpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21h
dGlvblNlc3Npb246OmV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQXV0b21hdGlvblNlc3Npb246OnJlc29sdmVDaGlsZEZyYW1lSGFuZGxlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OnJlc29sdmVQYXJlbnRGcmFtZUhhbmRs
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpjb21wdXRlRWxlbWVu
dExheW91dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpzZWxlY3RP
cHRpb25FbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OnNl
dEZpbGVzRm9ySW5wdXRGaWxlVXBsb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlv
blNlc3Npb246OmdldEFsbENvb2tpZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6ZGVsZXRlU2luZ2xlQ29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21h
dGlvblNlc3Npb246OnRha2VTY3JlZW5zaG90KToKKyAgICAgICAgKiBVSVByb2Nlc3MvUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTo6bG9hZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Vc2VyTWVkaWFQ
ZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlVzZXJN
ZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5Ojp+VXNlck1lZGlhUGVybWlzc2lvblJl
cXVlc3RNYW5hZ2VyUHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJFZGl0Q29tbWFuZFBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdENvbW1hbmRQcm94eTo6dW5hcHBseSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRDb21tYW5kUHJveHk6OnJlYXBwbHkpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJGcmFtZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJh
bWVQcm94eTo6bG9hZFVSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lUHJveHk6OmxvYWRE
YXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVQcm94eTo6c3RvcExvYWRpbmcgY29uc3Qp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkluc3BlY3RvclByb3h5OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6Y29ubmVjdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkluc3BlY3RvclByb3h5OjpjbG9zZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rv
clByb3h5Ojp1cGRhdGVGb3JOZXdQYWdlUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYklu
c3BlY3RvclByb3h5OjpzZXRGcm9udGVuZENvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJbnNwZWN0b3JQcm94eTo6c2hvd0NvbnNvbGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNw
ZWN0b3JQcm94eTo6c2hvd1Jlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rv
clByb3h5OjpzaG93TWFpblJlc291cmNlRm9yRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
bnNwZWN0b3JQcm94eTo6YXR0YWNoKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJv
eHk6OmRldGFjaCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5Ojp0b2dnbGVQ
YWdlUHJvZmlsaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnRvZ2ds
ZUVsZW1lbnRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6
b3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRlbmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0
b3JQcm94eTo6b3Blbik6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5OjpjbG9z
ZUZyb250ZW5kUGFnZUFuZFdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclBy
b3h5OjphdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRVSUNsaWVu
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0SWNvbkxvYWRpbmdDbGllbnQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmxhdW5jaFByb2Nlc3NGb3JSZWxvYWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmxhdW5jaFByb2Nlc3NXaXRoSXRlbSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aW5pdGlhbGl6ZVdlYlBhZ2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5Ojpsb2FkUmVxdWVzdFdpdGhOYXZpZ2F0aW9uU2hhcmVkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5Ojpsb2FkRmlsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6bG9hZEFsdGVybmF0ZUhUTUwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OmxvYWRXZWJBcmNoaXZlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bmF2
aWdhdGVUb1BERkxpbmtXaXRoU2ltdWxhdGVkQ2xpY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnN0b3BMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpy
ZWxvYWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmdvVG9CYWNrRm9yd2FyZEl0
ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnRyeVJlc3RvcmVTY3JvbGxQb3Np
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0Q29udHJvbGxlZEJ5QXV0
b21hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0SW5kaWNhdGluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0QmFja2dyb3VuZENvbG9yKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRUb3BDb250ZW50SW5zZXQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldFVuZGVybGF5Q29sb3IpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnZpZXdXaWxsU3RhcnRMaXZlUmVzaXplKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5Ojp2aWV3V2lsbEVuZExpdmVSZXNpemUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnZpZXdEaWRFbnRlcldpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6ZGlzcGF0Y2hBY3Rpdml0eVN0YXRlQ2hhbmdlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpsYXllckhvc3RpbmdNb2RlRGlkQ2hhbmdlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRJbml0aWFsRm9jdXMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OmNsZWFyU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpyZXN0b3JlU2VsZWN0aW9uSW5Gb2N1c2VkRWRpdGFibGVFbGVtZW50KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojp2YWxpZGF0ZUNvbW1hbmQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OmluY3JlYXNlTGlzdExldmVsKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpkZWNyZWFzZUxpc3RMZXZlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6Y2hhbmdlTGlzdFR5cGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OnNldEJhc2VXcml0aW5nRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpzZXROZWVkc0ZvbnRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpzY2hlZHVsZUZ1bGxFZGl0b3JTdGF0ZVVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6c2VsZWN0QWxsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpleGVj
dXRlRWRpdENvbW1hbmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlcXVlc3RG
b250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnNldEVkaXRhYmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZXJm
b3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OmRyYWdFbmRlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkU3RhcnREcmFn
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkcmFnQ2FuY2VsbGVkKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpwcm9jZXNzTmV4dFF1ZXVlZE1vdXNlRXZlbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNlbmRXaGVlbEV2ZW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpoYW5kbGVHZXN0dXJlRXZlbnQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OmhhbmRsZVByZXZlbnRhYmxlVG91Y2hFdmVudCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVzZXRQb3RlbnRpYWxUYXBTZWN1cml0eU9yaWdpbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aGFuZGxlVW5wcmV2ZW50YWJsZVRvdWNoRXZl
bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmhhbmRsZVRvdWNoRXZlbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNhbmNlbFBvaW50ZXIpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OnRvdWNoV2l0aElkZW50aWZpZXJXYXNSZW1vdmVkKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzY3JvbGxCeSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6Y2VudGVyU2VsZWN0aW9uSW5WaXNpYmxlQXJlYSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y29tbWl0UHJvdmlzaW9uYWxQYWdlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpzZXRVc2VyQWdlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlv
bnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEN1c3RvbVRleHRFbmNvZGlu
Z05hbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlc3RvcmVGcm9tU2Vzc2lv
blN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRUZXh0Wm9vbUZhY3Rv
cik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0UGFnZVpvb21GYWN0b3IpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNjYWxlUGFnZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2NhbGVQYWdlSW5WaWV3Q29vcmRpbmF0ZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNjYWxlVmlldyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6d2luZG93U2NyZWVuRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5OjphY2Nlc3NpYmlsaXR5U2V0dGluZ3NEaWRDaGFuZ2UpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnNldFVzZUZpeGVkTGF5b3V0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpzZXRGaXhlZExheW91dFNpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnNldEFsd2F5c1Nob3dzSG9yaXpvbnRhbFNjcm9sbGVyKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpzZXRBbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6Omxpc3RlbkZvckxheW91dE1pbGVzdG9uZXMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldFN1cHByZXNzU2Nyb2xsYmFyQW5pbWF0
aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0RW5hYmxlVmVydGljYWxS
dWJiZXJCYW5kaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRFbmFibGVI
b3Jpem9udGFsUnViYmVyQmFuZGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
c2V0QmFja2dyb3VuZEV4dGVuZHNCZXlvbmRQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpzZXRQYWdpbmF0aW9uTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6c2V0UGFnaW5hdGlvbkJlaGF2ZXNMaWtlQ29sdW1ucyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6c2V0UGFnZUxlbmd0aCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6c2V0R2FwQmV0d2VlblBhZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpz
ZXRQYWdpbmF0aW9uTGluZUdyaWRFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpmaW5kU3RyaW5nTWF0Y2hlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
ZmluZFN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0SW1hZ2VGb3JG
aW5kTWF0Y2gpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNlbGVjdEZpbmRNYXRj
aCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aW5kaWNhdGVGaW5kTWF0Y2gpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmhpZGVGaW5kVUkpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OmNvdW50U3RyaW5nTWF0Y2hlcyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6cmVwbGFjZU1hdGNoZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZVNjcmlwdFdvcmxkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpydW5KYXZhU2NyaXB0SW5GcmFtZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6Z2V0UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb24pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmdldFNvdXJjZUZvckZyYW1lKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpnZXRDb250ZW50c0FzU3RyaW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpnZXRCeXRlY29kZVByb2ZpbGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OmdldFNhbXBsaW5nUHJvZmlsZXJPdXRwdXQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OmdldENvbnRlbnRzQXNNSFRNTERhdGEpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OmdldFNlbGVjdGlvbk9yQ29udGVudHNBc1N0cmluZyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0U2VsZWN0aW9uQXNXZWJBcmNoaXZlRGF0
YSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0TWFpblJlc291cmNlRGF0YU9m
RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmdldFJlc291cmNlRGF0YUZy
b21GcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0V2ViQXJjaGl2ZU9m
RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmZvcmNlUmVwYWludCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cHJlZmVyZW5jZXNEaWRDaGFuZ2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6d2lsbFN1Ym1pdEZvcm0pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNob3dTaGFyZVNoZWV0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpzZXRNZWRpYVZvbHVtZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6c2V0TXV0ZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN0
b3BNZWRpYUNhcHR1cmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN0b3BBbGxN
ZWRpYVBsYXliYWNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzdXNwZW5kQWxs
TWVkaWFQbGF5YmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVzdW1lQWxs
TWVkaWFQbGF5YmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aGFuZGxlTWVk
aWFFdmVudCk6CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNhdmUpOgor
CiAyMDE5LTEyLTEwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAg
TWFrZSBwcmVjb25uZWN0VG8oKSdzIGNvbXBsZXRpb25IYW5kbGVyIG9wdGlvbmFsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAppbmRleCA0ZDhmNmNmMmU0NjNkOTBhZTM4
MWJlZGFjZTk2YWE4YWUwMjM5NjY3Li43MGVmYmZhM2U4N2EyYWJhY2M0NTE0NjQwZmRhM2Y3N2Vi
NjgwZTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKQEAgLTEy
MTIsNyArMTIxMiw3IEBAIHZvaWQgV0tQYWdlU2V0UGFnZUxvYWRlckNsaWVudChXS1BhZ2VSZWYg
cGFnZVJlZiwgY29uc3QgV0tQYWdlTG9hZGVyQ2xpZW50QmFzZSoKICAgICAgICAgbWlsZXN0b25l
cy5hZGQoV2ViQ29yZTo6RGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KTsKIAogICAgIGlm
IChtaWxlc3RvbmVzKQotICAgICAgICB3ZWJQYWdlUHJveHktPnByb2Nlc3MoKS5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpMaXN0ZW5Gb3JMYXlvdXRNaWxlc3RvbmVzKG1pbGVzdG9uZXMpLCB3ZWJQ
YWdlUHJveHktPndlYlBhZ2VJRCgpKTsKKyAgICAgICAgd2ViUGFnZVByb3h5LT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpMaXN0ZW5Gb3JMYXlvdXRNaWxlc3RvbmVzKG1pbGVzdG9uZXMpKTsKIAog
ICAgIHdlYlBhZ2VQcm94eS0+c2V0TG9hZGVyQ2xpZW50KFdURk1vdmUobG9hZGVyQ2xpZW50KSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1
dG9tYXRpb25TZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24v
V2ViQXV0b21hdGlvblNlc3Npb24uY3BwCmluZGV4IDczZjA4ODZmYTgxYzM3MTE3ZDBiNmE5Mzc3
N2NlZmJiZTU1OWUzMjIuLmVlYTFmZGNjN2NmYWU1ZjA1Y2UzMmUwNDYyMWY3MmMyOTc3ZWRjN2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21h
dGlvblNlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24v
V2ViQXV0b21hdGlvblNlc3Npb24uY3BwCkBAIC0zNzIsNyArMzcyLDcgQEAgdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6c3dpdGNoVG9Ccm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBicm93
c2luZ0NvbnRleHQKIAogICAgIG1fY2xpZW50LT5yZXF1ZXN0U3dpdGNoVG9QYWdlKCp0aGlzLCAq
cGFnZSwgW2ZyYW1lSUQsIHBhZ2UgPSBtYWtlUmVmKCpwYWdlKSwgY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKV0oKSB7CiAgICAgICAgIHBhZ2UtPnNldEZvY3VzKHRydWUpOwotICAgICAgICBw
YWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6
Rm9jdXNGcmFtZShwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCksIDApOworICAgICAgICBwYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpGb2N1c0ZyYW1lKHBh
Z2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlEKSwgMCk7CiAKICAgICAgICAgY2FsbGJhY2stPnNlbmRT
dWNjZXNzKCk7CiAgICAgfSk7CkBAIC05NDgsNyArOTQ4LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6ZXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb24oY29uc3QgU3RyaW5nJiBicm93c2lu
Z0NvbnQKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gbV9uZXh0RXZhbHVhdGVKYXZhU2NyaXB0
Q2FsbGJhY2tJRCsrOwogICAgIG1fZXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb25DYWxsYmFja3Mu
c2V0KGNhbGxiYWNrSUQsIFdURk1vdmUoY2FsbGJhY2spKTsKIAotICAgIHBhZ2UtPnByb2Nlc3Mo
KS5zZW5kKE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpFdmFsdWF0ZUphdmFT
Y3JpcHRGdW5jdGlvbihwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgZnVuY3Rpb24sIGFyZ3Vt
ZW50c1ZlY3RvciwgZXhwZWN0c0ltcGxpY2l0Q2FsbGJhY2tBcmd1bWVudCwgY2FsbGJhY2tUaW1l
b3V0LCBjYWxsYmFja0lEKSwgMCk7CisgICAgcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViQXV0b21h
dGlvblNlc3Npb25Qcm94eTo6RXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb24ocGFnZS0+d2ViUGFn
ZUlEKCksIGZyYW1lSUQsIGZ1bmN0aW9uLCBhcmd1bWVudHNWZWN0b3IsIGV4cGVjdHNJbXBsaWNp
dENhbGxiYWNrQXJndW1lbnQsIGNhbGxiYWNrVGltZW91dCwgY2FsbGJhY2tJRCksIDApOwogfQog
CiB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkaWRFdmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlv
bih1aW50NjRfdCBjYWxsYmFja0lELCBjb25zdCBTdHJpbmcmIHJlc3VsdCwgY29uc3QgU3RyaW5n
JiBlcnJvclR5cGUpCkBAIC05ODcsMTcgKzk4NywxNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNz
aW9uOjpyZXNvbHZlQ2hpbGRGcmFtZUhhbmRsZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4
dAogICAgIH07CiAKICAgICBpZiAob3B0aW9uYWxOb2RlSGFuZGxlKSB7Ci0gICAgICAgIHBhZ2Ut
PnByb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNz
aW9uUHJveHk6OlJlc29sdmVDaGlsZEZyYW1lV2l0aE5vZGVIYW5kbGUocGFnZS0+d2ViUGFnZUlE
KCksIGZyYW1lSUQsICpvcHRpb25hbE5vZGVIYW5kbGUpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CisgICAgICAgIHBhZ2UtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0
b21hdGlvblNlc3Npb25Qcm94eTo6UmVzb2x2ZUNoaWxkRnJhbWVXaXRoTm9kZUhhbmRsZShwYWdl
LT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgKm9wdGlvbmFsTm9kZUhhbmRsZSksIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChvcHRp
b25hbE5hbWUpIHsKLSAgICAgICAgcGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6UmVzb2x2ZUNoaWxkRnJhbWVXaXRo
TmFtZShwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgKm9wdGlvbmFsTmFtZSksIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgcGFnZS0+c2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpSZXNvbHZlQ2hpbGRGcmFtZVdpdGhO
YW1lKHBhZ2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlELCAqb3B0aW9uYWxOYW1lKSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKG9w
dGlvbmFsT3JkaW5hbCkgewotICAgICAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZFdpdGhBc3luY1Jl
cGx5KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpSZXNvbHZlQ2hpbGRGcmFt
ZVdpdGhPcmRpbmFsKHBhZ2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlELCAqb3B0aW9uYWxPcmRpbmFs
KSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgICAgICBwYWdlLT5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OlJlc29sdmVDaGls
ZEZyYW1lV2l0aE9yZGluYWwocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQsICpvcHRpb25hbE9y
ZGluYWwpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTEwMjQsNyArMTAyNCw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnJl
c29sdmVQYXJlbnRGcmFtZUhhbmRsZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4CiAgICAg
ICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcyhoYW5kbGVGb3JXZWJGcmFtZUlEKGZyYW1lSUQpKTsK
ICAgICB9OwogCi0gICAgcGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6UmVzb2x2ZVBhcmVudEZyYW1lKHBhZ2UtPndl
YlBhZ2VJRCgpLCBmcmFtZUlEKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIHBh
Z2UtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94
eTo6UmVzb2x2ZVBhcmVudEZyYW1lKHBhZ2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlEKSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiBzdGF0aWMgT3B0aW9uYWw8Q29vcmRpbmF0ZVN5
c3RlbT4gcHJvdG9jb2xTdHJpbmdUb0Nvb3JkaW5hdGVTeXN0ZW0oY29uc3QgU3RyaW5nJiBjb29y
ZGluYXRlU3lzdGVtU3RyaW5nKQpAQCAtMTA4Niw3ICsxMDg2LDcgQEAgdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6Y29tcHV0ZUVsZW1lbnRMYXlvdXQoY29uc3QgU3RyaW5nJiBicm93c2luZ0Nv
bnRleHRIYW4KICAgICB9OwogCiAgICAgYm9vbCBzY3JvbGxJbnRvVmlld0lmTmVlZGVkID0gb3B0
aW9uYWxTY3JvbGxJbnRvVmlld0lmTmVlZGVkID8gKm9wdGlvbmFsU2Nyb2xsSW50b1ZpZXdJZk5l
ZWRlZCA6IGZhbHNlOwotICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OkNvbXB1dGVFbGVtZW50TGF5b3V0KHBh
Z2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlELCBub2RlSGFuZGxlLCBzY3JvbGxJbnRvVmlld0lmTmVl
ZGVkLCBjb29yZGluYXRlU3lzdGVtLnZhbHVlKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CisgICAgcGFnZS0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9u
U2Vzc2lvblByb3h5OjpDb21wdXRlRWxlbWVudExheW91dChwYWdlLT53ZWJQYWdlSUQoKSwgZnJh
bWVJRCwgbm9kZUhhbmRsZSwgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCwgY29vcmRpbmF0ZVN5c3Rl
bS52YWx1ZSgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYkF1
dG9tYXRpb25TZXNzaW9uOjpzZWxlY3RPcHRpb25FbGVtZW50KGNvbnN0IFN0cmluZyYgYnJvd3Np
bmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIGZyYW1lSGFuZGxlLCBjb25zdCBTdHJpbmcm
IG5vZGVIYW5kbGUsIFJlZjxTZWxlY3RPcHRpb25FbGVtZW50Q2FsbGJhY2s+JiYgY2FsbGJhY2sp
CkBAIC0xMTA5LDcgKzExMDksNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZWxlY3RP
cHRpb25FbGVtZW50KGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZAogICAgICAgICBj
YWxsYmFjay0+c2VuZFN1Y2Nlc3MoKTsKICAgICB9OwogCi0gICAgcGFnZS0+cHJvY2VzcygpLnNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6U2Vs
ZWN0T3B0aW9uRWxlbWVudChwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgbm9kZUhhbmRsZSks
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBwYWdlLT5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OlNlbGVjdE9wdGlvbkVsZW1l
bnQocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQsIG5vZGVIYW5kbGUpLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmlzU2hvd2lu
Z0phdmFTY3JpcHREaWFsb2coSW5zcGVjdG9yOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBib29sKiByZXN1bHQpCkBAIC0xMjY5
LDcgKzEyNjksNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZXRGaWxlc0ZvcklucHV0
RmlsZVVwbG9hZChjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udAogICAgICAgICBjYWxsYmFjay0+
c2VuZFN1Y2Nlc3MoKTsKICAgICB9OwogCi0gICAgcGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5
bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6U2V0RmlsZXNGb3JJ
bnB1dEZpbGVVcGxvYWQocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQsIG5vZGVIYW5kbGUsIFdU
Rk1vdmUobmV3RmlsZUxpc3QpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIHBh
Z2UtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94
eTo6U2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxvYWQocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQs
IG5vZGVIYW5kbGUsIFdURk1vdmUobmV3RmlsZUxpc3QpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCiBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246
OkNvb2tpZT4gYnVpbGRPYmplY3RGb3JDb29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJiBjb29r
aWUpCkBAIC0xMzEyLDcgKzEzMTIsNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRB
bGxDb29raWVzKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBSZQogICAgICAg
ICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoYnVpbGRBcnJheUZvckNvb2tpZXMoY29va2llcykpOwog
ICAgIH07CiAKLSAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpHZXRDb29raWVzRm9yRnJhbWUocGFnZS0+d2Vi
UGFnZUlEKCksIFdURjo6bnVsbG9wdCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAg
ICBwYWdlLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9u
UHJveHk6OkdldENvb2tpZXNGb3JGcmFtZShwYWdlLT53ZWJQYWdlSUQoKSwgV1RGOjpudWxsb3B0
KSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjpkZWxldGVTaW5nbGVDb29raWUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRI
YW5kbGUsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSwgUmVmPERlbGV0ZVNpbmdsZUNvb2tpZUNh
bGxiYWNrPiYmIGNhbGxiYWNrKQpAQCAtMTMzMCw3ICsxMzMwLDcgQEAgdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6ZGVsZXRlU2luZ2xlQ29va2llKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250
ZXh0SGFuZGwKICAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKCk7CiAgICAgfTsKIAotICAg
IHBhZ2UtPnByb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dG9tYXRp
b25TZXNzaW9uUHJveHk6OkRlbGV0ZUNvb2tpZShwYWdlLT53ZWJQYWdlSUQoKSwgV1RGOjpudWxs
b3B0LCBjb29raWVOYW1lKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIHBhZ2Ut
PnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6
RGVsZXRlQ29va2llKHBhZ2UtPndlYlBhZ2VJRCgpLCBXVEY6Om51bGxvcHQsIGNvb2tpZU5hbWUp
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHN0YXRpYyBTdHJpbmcgZG9tYWlu
QnlBZGRpbmdEb3RQcmVmaXhJZk5lZWRlZChTdHJpbmcgZG9tYWluKQpAQCAtMjAwOCw3ICsyMDA4
LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6dGFrZVNjcmVlbnNob3QoY29uc3QgU3Ry
aW5nJiBoYW5kbGUsIGNvbnN0IFN0cmluZyogb3AKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0g
bV9uZXh0U2NyZWVuc2hvdENhbGxiYWNrSUQrKzsKICAgICBtX3NjcmVlbnNob3RDYWxsYmFja3Mu
c2V0KGNhbGxiYWNrSUQsIFdURk1vdmUoY2FsbGJhY2spKTsKIAotICAgIHBhZ2UtPnByb2Nlc3Mo
KS5zZW5kKE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpUYWtlU2NyZWVuc2hv
dChwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgbm9kZUhhbmRsZSwgc2Nyb2xsSW50b1ZpZXdJ
Zk5lZWRlZCwgY2xpcFRvVmlld3BvcnQsIGNhbGxiYWNrSUQpLCAwKTsKKyAgICBwYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpUYWtlU2NyZWVuc2hvdChwYWdl
LT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgbm9kZUhhbmRsZSwgc2Nyb2xsSW50b1ZpZXdJZk5lZWRl
ZCwgY2xpcFRvVmlld3BvcnQsIGNhbGxiYWNrSUQpLCAwKTsKIH0KIAogdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6ZGlkVGFrZVNjcmVlbnNob3QodWludDY0X3QgY2FsbGJhY2tJRCwgY29uc3Qg
U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGltYWdlRGF0YUhhbmRsZSwgY29uc3QgU3RyaW5nJiBl
cnJvclR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVXZWJJbnNw
ZWN0b3JQcm94eS5jcHAKaW5kZXggYzBlNDUyNzQ4ZDE4YTEzMTIyZGEwMGJlZTU0YjUyMDliODY2
MTY4Ni4uZmNkYWUxNjUwNTZiNzQ5YmI1YzQwNWIwMjk4MjFlMjkxMDg3MDZhMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmNwcApA
QCAtNjgsNyArNjgsNyBAQCB2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpsb2FkKGNvbnN0
IFN0cmluZyYgZGVidWdnYWJsZVR5cGUsIGNvbnN0IFN0cmluZyYgYgogICAgIG1fZGVidWdnYWJs
ZVR5cGUgPSBkZWJ1Z2dhYmxlVHlwZTsKICAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IGJhY2tl
bmRDb21tYW5kc1VSTDsKIAotICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVz
c2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJOjpJbml0aWFsaXplKGRlYnVnZ2FibGVUeXBlLCBi
YWNrZW5kQ29tbWFuZHNVUkwpLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICBt
X2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJOjpJbml0
aWFsaXplKGRlYnVnZ2FibGVUeXBlLCBiYWNrZW5kQ29tbWFuZHNVUkwpKTsKICAgICBtX2luc3Bl
Y3RvclBhZ2UtPmxvYWRSZXF1ZXN0KFVSTChVUkwoKSwgV2ViSW5zcGVjdG9yUHJveHk6Omluc3Bl
Y3RvclBhZ2VVUkwoKSkpOwogfQogCkBAIC05MCw3ICs5MCw3IEBAIHZvaWQgUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHk6OnNob3coKQogCiB2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5OjpzZW5k
TWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewotICAgIG1faW5zcGVj
dG9yUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJOjpT
ZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVzc2FnZSksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlE
KCkpOworICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVj
dG9yVUk6OlNlbmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlKSk7CiB9CiAKIHZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6OmZyb250ZW5kRGlkQ2xvc2UoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHku
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RN
YW5hZ2VyUHJveHkuY3BwCmluZGV4IDdmM2JkMTIyNWY4N2FiZGU3ZTJkNjQ1YTQ3ZTI5YWMxZTEy
YmU0ZWIuLjdiN2RjNWY4OGQ4NWEwYjYwMjFmN2M3YjRjNzJmYjZjODg3Y2I0YmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFu
YWdlclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJt
aXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKQEAgLTg0LDcgKzg0LDcgQEAgVXNlck1lZGlh
UGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OlVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0
TWFuYWdlclByb3h5KFcKIAogVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6
On5Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eSgpCiB7Ci0gICAgbV9wYWdl
LnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTdG9wTWVkaWFDYXB0dXJlIHsgfSwg
bV9wYWdlLndlYlBhZ2VJRCgpKTsKKyAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
U3RvcE1lZGlhQ2FwdHVyZSB7IH0pOwogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgVXNl
ck1lZGlhUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpLnJldm9rZVNhbmRib3hFeHRlbnNpb25z
SWZOZWVkZWQocGFnZSgpLnByb2Nlc3MoKSk7CiAgICAgcHJveGllcygpLnJlbW92ZSh0aGlzKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkVkaXRDb21tYW5kUHJveHku
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViRWRpdENvbW1hbmRQcm94eS5jcHAKaW5k
ZXggMGZlNmQ4MzQ5ODA5OGM5N2U0NjdiMzY4NWIzZDZiMzY3ZTcyY2Q2Ny4uMGRiZTBhZmI0MzNm
MDIxNzE1OWUxNDZmNGJjMDg1M2VkNTE2ZmQ4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViRWRpdENvbW1hbmRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViRWRpdENvbW1hbmRQcm94eS5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBXZWJF
ZGl0Q29tbWFuZFByb3h5Ojp1bmFwcGx5KCkKICAgICBpZiAoIW1fcGFnZSB8fCAhbV9wYWdlLT5o
YXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3BhZ2UtPnByb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpVbmFwcGx5RWRpdENvbW1hbmQobV9jb21tYW5k
SUQpLCBtX3BhZ2UtPndlYlBhZ2VJRCgpLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2Fn
ZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpVbmFwcGx5RWRpdENvbW1hbmQobV9jb21tYW5kSUQpLCBJUEM6OlNlbmRPcHRp
b246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CiAgICAgbV9w
YWdlLT5yZWdpc3RlckVkaXRDb21tYW5kKCp0aGlzLCBVbmRvT3JSZWRvOjpSZWRvKTsKIH0KIApA
QCAtNjQsNyArNjQsNyBAQCB2b2lkIFdlYkVkaXRDb21tYW5kUHJveHk6OnJlYXBwbHkoKQogICAg
IGlmICghbV9wYWdlIHx8ICFtX3BhZ2UtPmhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fcGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJl
YXBwbHlFZGl0Q29tbWFuZChtX2NvbW1hbmRJRCksIG1fcGFnZS0+d2ViUGFnZUlEKCksIElQQzo6
U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsK
KyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJlYXBwbHlFZGl0Q29tbWFuZCht
X2NvbW1hbmRJRCksIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0
aW5nRm9yU3luY1JlcGx5KTsKICAgICBtX3BhZ2UtPnJlZ2lzdGVyRWRpdENvbW1hbmQoKnRoaXMs
IFVuZG9PclJlZG86OlVuZG8pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJGcmFtZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1l
UHJveHkuY3BwCmluZGV4IGMxYzk1OGJkNDgxNGZhNDBmOTI1NDY0YzNlYmMyMWRmNjU2MGM0ZjAu
LjRkMzJmMDM1ZjBhNDJkOWNiNmQzYzlkYmM2ZjQyMDkwYzNkYjIyMzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYkZyYW1lUHJveHkuY3BwCkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgV2Vi
RnJhbWVQcm94eTo6bG9hZFVSTChjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiByZWZlcnJl
cikKICAgICBpZiAoIW1fcGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wYWdlLT5wcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6TG9hZFVSTEluRnJhbWUodXJsLCByZWZlcnJl
ciwgbV9mcmFtZUlEKSwgbV9wYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpMb2FkVVJMSW5GcmFtZSh1cmwsIHJlZmVycmVyLCBtX2ZyYW1lSUQp
KTsKIH0KIAogdm9pZCBXZWJGcmFtZVByb3h5Ojpsb2FkRGF0YShjb25zdCBJUEM6OkRhdGFSZWZl
cmVuY2UmIGRhdGEsIGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsIGNvbnN0IFN0cmluZyYgZW5jb2Rp
bmdOYW1lLCBjb25zdCBVUkwmIGJhc2VVUkwpCkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgV2ViRnJh
bWVQcm94eTo6bG9hZERhdGEoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhLCBjb25zdCBT
dHJpbmcmIE1JTUVUCiAgICAgaWYgKCFtX3BhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1f
cGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkxvYWREYXRhSW5GcmFtZShk
YXRhLCBNSU1FVHlwZSwgZW5jb2RpbmdOYW1lLCBiYXNlVVJMLCBtX2ZyYW1lSUQpLCBtX3BhZ2Ut
PndlYlBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkxvYWRE
YXRhSW5GcmFtZShkYXRhLCBNSU1FVHlwZSwgZW5jb2RpbmdOYW1lLCBiYXNlVVJMLCBtX2ZyYW1l
SUQpKTsKIH0KIAogdm9pZCBXZWJGcmFtZVByb3h5OjpzdG9wTG9hZGluZygpIGNvbnN0CkBAIC0x
MDMsNyArMTAzLDcgQEAgdm9pZCBXZWJGcmFtZVByb3h5OjpzdG9wTG9hZGluZygpIGNvbnN0CiAg
ICAgaWYgKCFtX3BhZ2UtPmhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG1fcGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlN0b3BMb2FkaW5n
RnJhbWUobV9mcmFtZUlEKSwgbV9wYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpTdG9wTG9hZGluZ0ZyYW1lKG1fZnJhbWVJRCkpOwogfQogICAg
IAogYm9vbCBXZWJGcmFtZVByb3h5OjpjYW5Qcm92aWRlU291cmNlKCkgY29uc3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5LmNwcAppbmRleCA3NDJjNzA4MDZi
OTU3ZjY3YzVlNjA1Nzk3M2ZmYTJmZjVmNmNhZjEyLi41M2FiMzMwZjZjOGFmYjUzOWI2YmNmM2Mx
ZWM4YjA5NzE4YmU2MmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJJ
bnNwZWN0b3JQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViSW5zcGVj
dG9yUHJveHkuY3BwCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKICAgICBpZiAoIW1f
aW5zcGVjdG9yUGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9pbnNwZWN0b3JQYWdlLT5w
cm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChtZXNzYWdlKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgbV9pbnNw
ZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U2VuZE1lc3NhZ2VUb0Zy
b250ZW5kKG1lc3NhZ2UpKTsKIH0KIAogLy8gUHVibGljIEFQSXMKQEAgLTEyOCw4ICsxMjgsOCBA
QCB2b2lkIFdlYkluc3BlY3RvclByb3h5Ojpjb25uZWN0KCkKIAogICAgIGNyZWF0ZUZyb250ZW5k
UGFnZSgpOwogCi0gICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcjo6Tm90aWZ5TmVlZERlYnVnZ2VyQnJlYWso
KSwgMCk7Ci0gICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yOjpTaG93KCksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlEKCkpOworICAgIG1f
aW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0
Y2hlcjo6Tm90aWZ5TmVlZERlYnVnZ2VyQnJlYWsoKSwgMCk7CisgICAgbV9pbnNwZWN0ZWRQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3coKSk7CiB9CiAKIHZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnNob3coKQpAQCAtMTYzLDcgKzE2Myw3IEBAIHZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OmNsb3NlKCkKICAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yOjpDbG9zZSgpLCBtX2luc3BlY3RlZFBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICBtX2lu
c3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6Q2xvc2UoKSk7CiAKICAg
ICBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwogfQpAQCAtMjEyLDcgKzIxMiw3IEBAIHZv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OnVwZGF0ZUZvck5ld1BhZ2VQcm9jZXNzKFdlYlBhZ2VQcm94
eSogaW5zcGVjdGVkUGFnZSkKICAgICBtX2luc3BlY3RlZFBhZ2UtPnByb2Nlc3MoKS5hZGRNZXNz
YWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlEKCksICp0aGlzKTsKIAogICAgIGlmICht
X2luc3BlY3RvclBhZ2UpCi0gICAgICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQo
TWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpVcGRhdGVDb25uZWN0aW9uKCksIG1faW5zcGVjdG9y
UGFnZS0+d2ViUGFnZUlEKCkpOworICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYkluc3BlY3RvclVJOjpVcGRhdGVDb25uZWN0aW9uKCkpOwogfQogCiB2b2lkIFdlYklu
c3BlY3RvclByb3h5OjpzZXRGcm9udGVuZENvbm5lY3Rpb24oSVBDOjpBdHRhY2htZW50IGNvbm5l
Y3Rpb25JZGVudGlmaWVyKQpAQCAtMjIwLDcgKzIyMCw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnNldEZyb250ZW5kQ29ubmVjdGlvbihJUEM6OkF0dGFjaG1lbnQgY29ubmVjdGlvbklkZW50
aWZpCiAgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1f
aW5zcGVjdGVkUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2V0
RnJvbnRlbmRDb25uZWN0aW9uKGNvbm5lY3Rpb25JZGVudGlmaWVyKSwgbV9pbnNwZWN0ZWRQYWdl
LT53ZWJQYWdlSUQoKSk7CisgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJ
bnNwZWN0b3I6OlNldEZyb250ZW5kQ29ubmVjdGlvbihjb25uZWN0aW9uSWRlbnRpZmllcikpOwog
fQogCiB2b2lkIFdlYkluc3BlY3RvclByb3h5OjpzaG93Q29uc29sZSgpCkBAIC0yMzAsNyArMjMw
LDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2hvd0NvbnNvbGUoKQogCiAgICAgY3JlYXRl
RnJvbnRlbmRQYWdlKCk7CiAKLSAgICBtX2luc3BlY3RlZFBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3dDb25zb2xlKCksIG1faW5zcGVjdGVkUGFnZS0+d2Vi
UGFnZUlEKCkpOworICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVj
dG9yOjpTaG93Q29uc29sZSgpKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2hvd1Jl
c291cmNlcygpCkBAIC0yNDAsNyArMjQwLDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2hv
d1Jlc291cmNlcygpCiAKICAgICBjcmVhdGVGcm9udGVuZFBhZ2UoKTsKIAotICAgIG1faW5zcGVj
dGVkUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2hvd1Jlc291
cmNlcygpLCBtX2luc3BlY3RlZFBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICBtX2luc3BlY3RlZFBh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2hvd1Jlc291cmNlcygpKTsKIH0KIAog
dm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2hvd01haW5SZXNvdXJjZUZvckZyYW1lKFdlYkZyYW1l
UHJveHkqIGZyYW1lKQpAQCAtMjUwLDcgKzI1MCw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6
OnNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShXZWJGcmFtZVByb3h5KiBmcmFtZSkKIAogICAgIGNy
ZWF0ZUZyb250ZW5kUGFnZSgpOwogCi0gICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTaG93TWFpblJlc291cmNlRm9yRnJhbWUoZnJhbWUt
PmZyYW1lSUQoKSksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlEKCkpOworICAgIG1faW5zcGVj
dGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTaG93TWFpblJlc291cmNlRm9y
RnJhbWUoZnJhbWUtPmZyYW1lSUQoKSkpOwogfQogCiB2b2lkIFdlYkluc3BlY3RvclByb3h5Ojph
dHRhY2hCb3R0b20oKQpAQCAtMjgxLDE5ICsyODEsMTkgQEAgdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6YXR0YWNoKEF0dGFjaG1lbnRTaWRlIHNpZGUpCiAgICAgaWYgKG1faXNWaXNpYmxlKQogICAg
ICAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5zZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hl
ZCh0cnVlKTsKIAotICAgIG1faW5zcGVjdGVkUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3Rvcjo6U2V0QXR0YWNoZWQodHJ1ZSksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFn
ZUlEKCkpOworICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9y
OjpTZXRBdHRhY2hlZCh0cnVlKSk7CiAKICAgICBzd2l0Y2ggKG1fYXR0YWNobWVudFNpZGUpIHsK
ICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpCb3R0b206Ci0gICAgICAgIG1faW5zcGVjdG9yUGFn
ZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZEJvdHRv
bSgpLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICAgICAgbV9pbnNwZWN0b3JQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNoZWRCb3R0b20oKSk7CiAg
ICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6UmlnaHQ6Ci0gICAgICAg
IG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJ
OjpBdHRhY2hlZFJpZ2h0KCksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOworICAgICAg
ICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hl
ZFJpZ2h0KCkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQXR0YWNobWVudFNpZGU6Okxl
ZnQ6Ci0gICAgICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3RvclVJOjpBdHRhY2hlZExlZnQoKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQo
KSk7CisgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9y
VUk6OkF0dGFjaGVkTGVmdCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0zMTAsOCAr
MzEwLDggQEAgdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6ZGV0YWNoKCkKICAgICBpZiAobV9pc1Zp
c2libGUpCiAgICAgICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLnNldEluc3BlY3RvclN0
YXJ0c0F0dGFjaGVkKGZhbHNlKTsKIAotICAgIG1faW5zcGVjdGVkUGFnZS0+cHJvY2VzcygpLnNl
bmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2V0QXR0YWNoZWQoZmFsc2UpLCBtX2luc3BlY3Rl
ZFBhZ2UtPndlYlBhZ2VJRCgpKTsKLSAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RGV0YWNoZWQoKSwgbV9pbnNwZWN0b3JQYWdlLT53
ZWJQYWdlSUQoKSk7CisgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3I6OlNldEF0dGFjaGVkKGZhbHNlKSk7CisgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RGV0YWNoZWQoKSk7CiAKICAgICBwbGF0Zm9ybURldGFj
aCgpOwogfQpAQCAtMzQ0LDkgKzM0NCw5IEBAIHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnRvZ2ds
ZVBhZ2VQcm9maWxpbmcoKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9pc1Byb2ZpbGlu
Z1BhZ2UpCi0gICAgICAgIG1faW5zcGVjdGVkUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3Rvcjo6U3RvcFBhZ2VQcm9maWxpbmcoKSwgbV9pbnNwZWN0ZWRQYWdlLT53ZWJQ
YWdlSUQoKSk7CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yOjpTdG9wUGFnZVByb2ZpbGluZygpKTsKICAgICBlbHNlCi0gICAgICAgIG1faW5zcGVj
dGVkUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U3RhcnRQYWdl
UHJvZmlsaW5nKCksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlEKCkpOworICAgICAgICBtX2lu
c3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U3RhcnRQYWdlUHJvZmls
aW5nKCkpOwogfQogCiB2b2lkIFdlYkluc3BlY3RvclByb3h5Ojp0b2dnbGVFbGVtZW50U2VsZWN0
aW9uKCkKQEAgLTM1NiwxMCArMzU2LDEwIEBAIHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnRvZ2ds
ZUVsZW1lbnRTZWxlY3Rpb24oKQogCiAgICAgaWYgKG1fZWxlbWVudFNlbGVjdGlvbkFjdGl2ZSkg
ewogICAgICAgICBtX2lnbm9yZUVsZW1lbnRTZWxlY3Rpb25DaGFuZ2UgPSB0cnVlOwotICAgICAg
ICBtX2luc3BlY3RlZFBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6
OlN0b3BFbGVtZW50U2VsZWN0aW9uKCksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlEKCkpOwor
ICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U3Rv
cEVsZW1lbnRTZWxlY3Rpb24oKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgY29ubmVjdCgpOwot
ICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3I6OlN0YXJ0RWxlbWVudFNlbGVjdGlvbigpLCBtX2luc3BlY3RlZFBhZ2UtPndlYlBhZ2VJ
RCgpKTsKKyAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0
b3I6OlN0YXJ0RWxlbWVudFNlbGVjdGlvbigpKTsKICAgICB9CiB9CiAKQEAgLTQxMiw3ICs0MTIs
NyBAQCB2b2lkIFdlYkluc3BlY3RvclByb3h5OjpvcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZChi
b29sIGNhbkF0dGFjaCwgYm9vbCB1bmRlclRlcwogICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RXN0YWJsaXNoQ29ubmVjdGlvbihtX2luc3BlY3RlZFBh
Z2UtPmlkZW50aWZpZXIoKSwgbV91bmRlclRlc3QsIGluc3BlY3Rpb25MZXZlbCgpKSwgbV9pbnNw
ZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJJbnNwZWN0b3JVSTo6RXN0YWJsaXNoQ29ubmVjdGlvbihtX2luc3BlY3RlZFBhZ2Ut
PmlkZW50aWZpZXIoKSwgbV91bmRlclRlc3QsIGluc3BlY3Rpb25MZXZlbCgpKSk7CiAKICAgICBB
U1NFUlQoIW1faXNBY3RpdmVGcm9udGVuZCk7CiAgICAgbV9pc0FjdGl2ZUZyb250ZW5kID0gdHJ1
ZTsKQEAgLTQyMywyNiArNDIzLDI2IEBAIHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6Om9wZW5Mb2Nh
bEluc3BlY3RvckZyb250ZW5kKGJvb2wgY2FuQXR0YWNoLCBib29sIHVuZGVyVGVzCiAgICAgICAg
IG1faXNBdHRhY2hlZCA9IHNob3VsZE9wZW5BdHRhY2hlZCgpOwogICAgICAgICBtX2F0dGFjaG1l
bnRTaWRlID0gc3RhdGljX2Nhc3Q8QXR0YWNobWVudFNpZGU+KGluc3BlY3RvclBhZ2VQcmVmZXJl
bmNlcygpLmluc3BlY3RvckF0dGFjaG1lbnRTaWRlKCkpOwogCi0gICAgICAgIG1faW5zcGVjdGVk
UGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2V0QXR0YWNoZWQo
bV9pc0F0dGFjaGVkKSwgbV9pbnNwZWN0ZWRQYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgICAgIG1f
aW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTZXRBdHRhY2hlZCht
X2lzQXR0YWNoZWQpKTsKIAogICAgICAgICBpZiAobV9pc0F0dGFjaGVkKSB7CiAgICAgICAgICAg
ICBzd2l0Y2ggKG1fYXR0YWNobWVudFNpZGUpIHsKICAgICAgICAgICAgIGNhc2UgQXR0YWNobWVu
dFNpZGU6OkJvdHRvbToKLSAgICAgICAgICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3Mo
KS5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNoZWRCb3R0b20oKSwgbV9pbnNw
ZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgICAgICAgICAgICAgbV9pbnNwZWN0b3JQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNoZWRCb3R0b20oKSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OlJp
Z2h0OgotICAgICAgICAgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZFJpZ2h0KCksIG1faW5zcGVjdG9yUGFnZS0+
d2ViUGFnZUlEKCkpOworICAgICAgICAgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkUmlnaHQoKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkxlZnQ6Ci0gICAgICAg
ICAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yVUk6OkF0dGFjaGVkTGVmdCgpLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpKTsK
KyAgICAgICAgICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3RvclVJOjpBdHRhY2hlZExlZnQoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkRldGFjaGVkKCksIG1faW5zcGVj
dG9yUGFnZS0+d2ViUGFnZUlEKCkpOworICAgICAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RGV0YWNoZWQoKSk7CiAKLSAgICAgICAgbV9pbnNw
ZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNldERv
Y2tpbmdVbmF2YWlsYWJsZSghbV9jYW5BdHRhY2gpLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJ
RCgpKTsKKyAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0
b3JVSTo6U2V0RG9ja2luZ1VuYXZhaWxhYmxlKCFtX2NhbkF0dGFjaCkpOwogICAgIH0KIAogICAg
IC8vIE5vdGlmeSBXZWJLaXQgY2xpZW50IHdoZW4gYSBsb2NhbCBpbnNwZWN0b3IgYXR0YWNoZXMg
c28gdGhhdCBpdCBtYXkgaW5zdGFsbCBkZWxlZ2F0ZXMgcHJpb3IgdG8gdGhlIF9XS0luc3BlY3Rv
ciBsb2FkaW5nIGl0cyBmcm9udGVuZC4KQEAgLTQ2NSw3ICs0NjUsNyBAQCB2b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpvcGVuKCkKIAogICAgIFNldEZvclNjb3BlPGJvb2w+IGlzT3BlbmluZyhtX2lz
T3BlbmluZywgdHJ1ZSk7CiAgICAgbV9pc1Zpc2libGUgPSB0cnVlOwotICAgIG1faW5zcGVjdG9y
UGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTZXRJc1Zpc2li
bGUobV9pc1Zpc2libGUpLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICBtX2lu
c3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTZXRJc1Zpc2libGUo
bV9pc1Zpc2libGUpKTsKIAogICAgIGlmIChtX2lzQXR0YWNoZWQpCiAgICAgICAgIHBsYXRmb3Jt
QXR0YWNoKCk7CkBAIC00OTIsNyArNDkyLDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6Y2xv
c2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQogCiAgICAgdW50cmFja0luc3BlY3RvclBhZ2UobV9p
bnNwZWN0b3JQYWdlKTsKIAotICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3RvclVJOjpTZXRJc1Zpc2libGUobV9pc1Zpc2libGUpLCBtX2luc3Bl
Y3RvclBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYkluc3BlY3RvclVJOjpTZXRJc1Zpc2libGUobV9pc1Zpc2libGUpKTsKICAgICBtX2lu
c3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6Oldl
Ykluc3BlY3RvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVkUGFnZS0+
aWRlbnRpZmllcigpKTsKIAogICAgIGlmIChtX2lzQWN0aXZlRnJvbnRlbmQpIHsKQEAgLTU2MSw3
ICs1NjEsNyBAQCB2b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2hBdmFpbGFiaWxpdHlDaGFu
Z2VkKGJvb2wgYXZhaWxhYmxlKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9pbnNwZWN0
b3JQYWdlICYmICFtX3VuZGVyVGVzdCkKLSAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNz
KCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNldERvY2tpbmdVbmF2YWlsYWJsZSgh
bV9jYW5BdHRhY2gpLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICAgICAgbV9p
bnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U2V0RG9ja2luZ1Vu
YXZhaWxhYmxlKCFtX2NhbkF0dGFjaCkpOwogCiAgICAgcGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxp
dHlDaGFuZ2VkKG1fY2FuQXR0YWNoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwCmluZGV4IDk2MzhhMDM3MjJkMDkyOWJkMWUzYmM3MWM1YjYzN2Y1M2ExNmEyOGMu
LmM4ODI2ODk5YTlmNjk3NzUwNWI1YjNjNTRiYTZkNjRiMDFhNTFlOGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtNjMzLDcgKzYzMyw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpzZXRVSUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpVSUNsaWVudD4mJiB1
aUNsaWVudCkKICAgICBtX3VpQ2xpZW50ID0gV1RGTW92ZSh1aUNsaWVudCk7CiAKICAgICBpZiAo
aGFzUnVubmluZ1Byb2Nlc3MoKSkKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpTZXRDYW5SdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwobV91aUNsaWVudC0+Y2Fu
UnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKCkpLCBtX3dlYlBhZ2VJRCk7CisgICAgICAgIHNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldENhblJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbCht
X3VpQ2xpZW50LT5jYW5SdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoKSkpOwogCiAgICAgc2V0
Q2FuUnVuTW9kYWwobV91aUNsaWVudC0+Y2FuUnVuTW9kYWwoKSk7CiAgICAgc2V0TmVlZHNGb250
QXR0cmlidXRlcyhtX3VpQ2xpZW50LT5uZWVkc0ZvbnRBdHRyaWJ1dGVzKCkpOwpAQCAtNjUwLDcg
KzY1MCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRJY29uTG9hZGluZ0NsaWVudChzdGQ6OnVu
aXF1ZV9wdHI8QVBJOjpJY29uTG9hZGluZ0NsaWVudD4mCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJv
Y2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OlNldFVzZUljb25Mb2FkaW5nQ2xpZW50KGhhc0NsaWVudCksIG1fd2ViUGFnZUlE
KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRVc2VJY29uTG9hZGluZ0NsaWVudCho
YXNDbGllbnQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldFBhZ2VMb2FkU3RhdGVPYnNl
cnZlcihzdGQ6OnVuaXF1ZV9wdHI8UGFnZUxvYWRTdGF0ZTo6T2JzZXJ2ZXI+JiYgb2JzZXJ2ZXIp
CkBAIC05NDUsNyArOTQ1LDcgQEAgUmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4gV2ViUGFnZVByb3h5
OjpsYXVuY2hQcm9jZXNzRm9yUmVsb2FkKCkKICAgICB9CiAKICAgICAvLyBXZSBhbGxvdyBzdGFs
ZSBjb250ZW50IHdoZW4gcmVsb2FkaW5nIGEgV2ViUHJvY2VzcyB0aGF0J3MgYmVlbiBraWxsZWQg
b3IgY3Jhc2hlZC4KLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdvVG9C
YWNrRm9yd2FyZEl0ZW0obmF2aWdhdGlvbi0+bmF2aWdhdGlvbklEKCksIG1fYmFja0ZvcndhcmRM
aXN0LT5jdXJyZW50SXRlbSgpLT5pdGVtSUQoKSwgRnJhbWVMb2FkVHlwZTo6SW5kZXhlZEJhY2tG
b3J3YXJkLCBTaG91bGRUcmVhdEFzQ29udGludWluZ0xvYWQ6Ok5vLCBXVEY6Om51bGxvcHQpLCBt
X3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R29Ub0JhY2tGb3J3YXJk
SXRlbShuYXZpZ2F0aW9uLT5uYXZpZ2F0aW9uSUQoKSwgbV9iYWNrRm9yd2FyZExpc3QtPmN1cnJl
bnRJdGVtKCktPml0ZW1JRCgpLCBGcmFtZUxvYWRUeXBlOjpJbmRleGVkQmFja0ZvcndhcmQsIFNo
b3VsZFRyZWF0QXNDb250aW51aW5nTG9hZDo6Tm8sIFdURjo6bnVsbG9wdCkpOwogICAgIG1fcHJv
Y2Vzcy0+cmVzcG9uc2l2ZW5lc3NUaW1lcigpLnN0YXJ0KCk7CiAKICAgICByZXR1cm4gbmF2aWdh
dGlvbjsKQEAgLTk2OCw3ICs5NjgsNyBAQCBSZWZQdHI8QVBJOjpOYXZpZ2F0aW9uPiBXZWJQYWdl
UHJveHk6OmxhdW5jaFByb2Nlc3NXaXRoSXRlbShXZWJCYWNrRm9yd2FyZExpc3RJdAogCiAgICAg
YXV0byBuYXZpZ2F0aW9uID0gbV9uYXZpZ2F0aW9uU3RhdGUtPmNyZWF0ZUJhY2tGb3J3YXJkTmF2
aWdhdGlvbihpdGVtLCBtX2JhY2tGb3J3YXJkTGlzdC0+Y3VycmVudEl0ZW0oKSwgRnJhbWVMb2Fk
VHlwZTo6SW5kZXhlZEJhY2tGb3J3YXJkKTsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6R29Ub0JhY2tGb3J3YXJkSXRlbShuYXZpZ2F0aW9uLT5uYXZpZ2F0aW9uSUQo
KSwgaXRlbS5pdGVtSUQoKSwgRnJhbWVMb2FkVHlwZTo6SW5kZXhlZEJhY2tGb3J3YXJkLCBTaG91
bGRUcmVhdEFzQ29udGludWluZ0xvYWQ6Ok5vLCBXVEY6Om51bGxvcHQpLCBtX3dlYlBhZ2VJRCk7
CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R29Ub0JhY2tGb3J3YXJkSXRlbShuYXZpZ2F0
aW9uLT5uYXZpZ2F0aW9uSUQoKSwgaXRlbS5pdGVtSUQoKSwgRnJhbWVMb2FkVHlwZTo6SW5kZXhl
ZEJhY2tGb3J3YXJkLCBTaG91bGRUcmVhdEFzQ29udGludWluZ0xvYWQ6Ok5vLCBXVEY6Om51bGxv
cHQpKTsKICAgICBtX3Byb2Nlc3MtPnJlc3BvbnNpdmVuZXNzVGltZXIoKS5zdGFydCgpOwogCiAg
ICAgcmV0dXJuIG5hdmlnYXRpb247CkBAIC05OTksNyArOTk5LDcgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OmluaXRpYWxpemVXZWJQYWdlKCkKICAgICBzZXREcmF3aW5nQXJlYShwYWdlQ2xpZW50KCku
Y3JlYXRlRHJhd2luZ0FyZWFQcm94eShtX3Byb2Nlc3MpKTsKICAgICBBU1NFUlQobV9kcmF3aW5n
QXJlYSk7CiAKLSAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6Q3JlYXRl
V2ViUGFnZShtX3dlYlBhZ2VJRCwgY3JlYXRpb25QYXJhbWV0ZXJzKG1fcHJvY2VzcywgKm1fZHJh
d2luZ0FyZWEpKSwgMCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6Q3JlYXRlV2Vi
UGFnZShtX3dlYlBhZ2VJRCwgY3JlYXRpb25QYXJhbWV0ZXJzKG1fcHJvY2VzcywgKm1fZHJhd2lu
Z0FyZWEpKSwgMCk7CiAKICAgICBtX3Byb2Nlc3MtPmFkZFZpc2l0ZWRMaW5rU3RvcmVVc2VyKHZp
c2l0ZWRMaW5rU3RvcmUoKSwgbV9pZGVudGlmaWVyKTsKIH0KQEAgLTEwNjAsNyArMTA2MCw3IEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpjbG9zZSgpCiAKICAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29s
KCkuYmFja0ZvcndhcmRDYWNoZSgpLnJlbW92ZUVudHJpZXNGb3JQYWdlKCp0aGlzKTsKIAotICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q2xvc2UoKSwgbV93ZWJQYWdlSUQp
OworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNsb3NlKCkpOwogICAgIG1fcHJvY2Vzcy0+
cmVtb3ZlV2ViUGFnZSgqdGhpcywgV2ViUHJvY2Vzc1Byb3h5OjpFbmRzVXNpbmdEYXRhU3RvcmU6
Olllcyk7CiAgICAgbV9wcm9jZXNzLT5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3dlYlBhZ2VJRCk7CiAgICAgbV9w
cm9jZXNzLT5wcm9jZXNzUG9vbCgpLnN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlclBy
b3h5PigpLT5jbGVhck5vdGlmaWNhdGlvbnModGhpcyk7CkBAIC0xMjUzLDExICsxMjUzLDExIEBA
IHZvaWQgV2ViUGFnZVByb3h5Ojpsb2FkUmVxdWVzdFdpdGhOYXZpZ2F0aW9uU2hhcmVkKFJlZjxX
ZWJQcm9jZXNzUHJveHk+JiYgcHJvY2VzCiAKICNpZiBIQVZFKFNBTkRCT1hfSVNTVUVfUkVBRF9F
WFRFTlNJT05fVE9fUFJPQ0VTU19CWV9BVURJVF9UT0tFTikKICAgICBpZiAoIXByb2Nlc3MtPmlz
TGF1bmNoaW5nKCkgfHwgIXVybC5pc0xvY2FsRmlsZSgpKQotICAgICAgICBwcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpMb2FkUmVxdWVzdChsb2FkUGFyYW1ldGVycyksIHdlYlBhZ2VJ
RCk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkxvYWRSZXF1ZXN0KGxvYWRQYXJh
bWV0ZXJzKSk7CiAgICAgZWxzZQotICAgICAgICBwcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpMb2FkUmVxdWVzdFdhaXRpbmdGb3JQcm9jZXNzTGF1bmNoKGxvYWRQYXJhbWV0ZXJzLCBt
X3BhZ2VMb2FkU3RhdGUucmVzb3VyY2VEaXJlY3RvcnlVUkwoKSwgbV9pZGVudGlmaWVyLCB0cnVl
KSwgd2ViUGFnZUlEKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6TG9hZFJlcXVl
c3RXYWl0aW5nRm9yUHJvY2Vzc0xhdW5jaChsb2FkUGFyYW1ldGVycywgbV9wYWdlTG9hZFN0YXRl
LnJlc291cmNlRGlyZWN0b3J5VVJMKCksIG1faWRlbnRpZmllciwgdHJ1ZSkpOwogI2Vsc2UKLSAg
ICBwcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpMb2FkUmVxdWVzdChsb2FkUGFyYW1l
dGVycyksIHdlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6TG9hZFJlcXVl
c3QobG9hZFBhcmFtZXRlcnMpKTsKICNlbmRpZgogICAgIHByb2Nlc3MtPnJlc3BvbnNpdmVuZXNz
VGltZXIoKS5zdGFydCgpOwogfQpAQCAtMTMwOCwxMSArMTMwOCwxMSBAQCBSZWZQdHI8QVBJOjpO
YXZpZ2F0aW9uPiBXZWJQYWdlUHJveHk6OmxvYWRGaWxlKGNvbnN0IFN0cmluZyYgZmlsZVVSTFN0
cmluZywgY29ucwogCiAjaWYgSEFWRShTQU5EQk9YX0lTU1VFX1JFQURfRVhURU5TSU9OX1RPX1BS
T0NFU1NfQllfQVVESVRfVE9LRU4pCiAgICAgaWYgKG1fcHJvY2Vzcy0+aXNMYXVuY2hpbmcoKSkK
LSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpMb2FkUmVxdWVzdFdh
aXRpbmdGb3JQcm9jZXNzTGF1bmNoKGxvYWRQYXJhbWV0ZXJzLCByZXNvdXJjZURpcmVjdG9yeVVS
TCwgbV9pZGVudGlmaWVyLCBjaGVja0Fzc3VtZWRSZWFkQWNjZXNzVG9SZXNvdXJjZVVSTCksIG1f
d2ViUGFnZUlEKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6TG9hZFJlcXVlc3RX
YWl0aW5nRm9yUHJvY2Vzc0xhdW5jaChsb2FkUGFyYW1ldGVycywgcmVzb3VyY2VEaXJlY3RvcnlV
UkwsIG1faWRlbnRpZmllciwgY2hlY2tBc3N1bWVkUmVhZEFjY2Vzc1RvUmVzb3VyY2VVUkwpKTsK
ICAgICBlbHNlCi0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6TG9h
ZFJlcXVlc3QobG9hZFBhcmFtZXRlcnMpLCBtX3dlYlBhZ2VJRCk7CisgICAgICAgIHNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OkxvYWRSZXF1ZXN0KGxvYWRQYXJhbWV0ZXJzKSk7CiAjZWxzZQotICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6TG9hZFJlcXVlc3QobG9hZFBhcmFt
ZXRlcnMpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6TG9hZFJl
cXVlc3QobG9hZFBhcmFtZXRlcnMpKTsKICNlbmRpZgogICAgIG1fcHJvY2Vzcy0+cmVzcG9uc2l2
ZW5lc3NUaW1lcigpLnN0YXJ0KCk7CiAKQEAgLTE0MDIsNyArMTQwMiw3IEBAIHZvaWQgV2ViUGFn
ZVByb3h5Ojpsb2FkQWx0ZXJuYXRlSFRNTChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGh0bWxE
YXRhLCBjb25zdCBTCiAKICAgICBtX3Byb2Nlc3MtPmFzc3VtZVJlYWRBY2Nlc3NUb0Jhc2VVUkwo
KnRoaXMsIGJhc2VVUkwpOwogICAgIG1fcHJvY2Vzcy0+YXNzdW1lUmVhZEFjY2Vzc1RvQmFzZVVS
TCgqdGhpcywgdW5yZWFjaGFibGVVUkwpOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6TG9hZEFsdGVybmF0ZUhUTUwobG9hZFBhcmFtZXRlcnMpLCBtX3dlYlBhZ2VJRCk7
CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6TG9hZEFsdGVybmF0ZUhUTUwobG9hZFBhcmFt
ZXRlcnMpKTsKICAgICBtX3Byb2Nlc3MtPnJlc3BvbnNpdmVuZXNzVGltZXIoKS5zdGFydCgpOwog
fQogCkBAIC0xNDI5LDcgKzE0MjksNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6bG9hZFdlYkFyY2hp
dmVEYXRhKEFQSTo6RGF0YSogd2ViQXJjaGl2ZURhdGEsIEFQSTo6T2JqZWN0KiB1cwogICAgIGxv
YWRQYXJhbWV0ZXJzLnVzZXJEYXRhID0gVXNlckRhdGEocHJvY2VzcygpLnRyYW5zZm9ybU9iamVj
dHNUb0hhbmRsZXModXNlckRhdGEpLmdldCgpKTsKICAgICBhZGRQbGF0Zm9ybUxvYWRQYXJhbWV0
ZXJzKGxvYWRQYXJhbWV0ZXJzKTsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6TG9hZERhdGEobG9hZFBhcmFtZXRlcnMpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6TG9hZERhdGEobG9hZFBhcmFtZXRlcnMpKTsKICAgICBtX3Byb2Nl
c3MtPnJlc3BvbnNpdmVuZXNzVGltZXIoKS5zdGFydCgpOwogfQogCkBAIC0xNDQ4LDcgKzE0NDgs
NyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6bmF2aWdhdGVUb1BERkxpbmtXaXRoU2ltdWxhdGVkQ2xp
Y2soY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2Vzcygp
KQogICAgICAgICBsYXVuY2hQcm9jZXNzKFJlZ2lzdHJhYmxlRG9tYWluIHsgVVJMKFVSTCgpLCB1
cmxTdHJpbmcpIH0sIFByb2Nlc3NMYXVuY2hSZWFzb246OkluaXRpYWxQcm9jZXNzKTsKIAotICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6TmF2aWdhdGVUb1BERkxpbmtXaXRo
U2ltdWxhdGVkQ2xpY2sodXJsU3RyaW5nLCBkb2N1bWVudFBvaW50LCBzY3JlZW5Qb2ludCksIG1f
d2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpOYXZpZ2F0ZVRvUERGTGlu
a1dpdGhTaW11bGF0ZWRDbGljayh1cmxTdHJpbmcsIGRvY3VtZW50UG9pbnQsIHNjcmVlblBvaW50
KSk7CiAgICAgbV9wcm9jZXNzLT5yZXNwb25zaXZlbmVzc1RpbWVyKCkuc3RhcnQoKTsKIH0KIApA
QCAtMTQ2MSw3ICsxNDYxLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnN0b3BMb2FkaW5nKCkKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6U3RvcExvYWRpbmcoKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OlN0b3BMb2FkaW5nKCkpOwogICAgIGlmIChtX3Byb3Zpc2lvbmFsUGFnZSkgewogICAg
ICAgICBtX3Byb3Zpc2lvbmFsUGFnZS0+Y2FuY2VsKCk7CiAgICAgICAgIG1fcHJvdmlzaW9uYWxQ
YWdlID0gbnVsbHB0cjsKQEAgLTE0OTYsNyArMTQ5Niw3IEBAIFJlZlB0cjxBUEk6Ok5hdmlnYXRp
b24+IFdlYlBhZ2VQcm94eTo6cmVsb2FkKE9wdGlvblNldDxXZWJDb3JlOjpSZWxvYWRPcHRpb24+
IG9wCiAgICAgaWYgKG9wdGlvbnMuY29udGFpbnMoV2ViQ29yZTo6UmVsb2FkT3B0aW9uOjpEaXNh
YmxlQ29udGVudEJsb2NrZXJzKSkKICAgICAgICAgbmF2aWdhdGlvbi0+c2V0VXNlckNvbnRlbnRF
eHRlbnNpb25zRW5hYmxlZChmYWxzZSk7CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OlJlbG9hZChuYXZpZ2F0aW9uLT5uYXZpZ2F0aW9uSUQoKSwgb3B0aW9ucy50b1Jh
dygpLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OlJlbG9hZChuYXZpZ2F0aW9uLT5uYXZpZ2F0aW9uSUQoKSwgb3B0aW9u
cy50b1JhdygpLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKSk7CiAgICAgbV9wcm9jZXNzLT5yZXNw
b25zaXZlbmVzc1RpbWVyKCkuc3RhcnQoKTsKIAogI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lT
KQpAQCAtMTU2NSw3ICsxNTY1LDcgQEAgUmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4gV2ViUGFnZVBy
b3h5Ojpnb1RvQmFja0ZvcndhcmRJdGVtKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0KICAgICBhdXRv
IHRyYW5zYWN0aW9uID0gbV9wYWdlTG9hZFN0YXRlLnRyYW5zYWN0aW9uKCk7CiAgICAgbV9wYWdl
TG9hZFN0YXRlLnNldFBlbmRpbmdBUElSZXF1ZXN0KHRyYW5zYWN0aW9uLCB7IG5hdmlnYXRpb24g
PyBuYXZpZ2F0aW9uLT5uYXZpZ2F0aW9uSUQoKSA6IDAsIGl0ZW0udXJsKCkgfSk7CiAKLSAgICBt
X3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdvVG9CYWNrRm9yd2FyZEl0ZW0obmF2
aWdhdGlvbiA/IG5hdmlnYXRpb24tPm5hdmlnYXRpb25JRCgpIDogMCwgaXRlbS5pdGVtSUQoKSwg
ZnJhbWVMb2FkVHlwZSwgU2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkOjpObywgV1RGOjpudWxs
b3B0KSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdvVG9CYWNr
Rm9yd2FyZEl0ZW0obmF2aWdhdGlvbiA/IG5hdmlnYXRpb24tPm5hdmlnYXRpb25JRCgpIDogMCwg
aXRlbS5pdGVtSUQoKSwgZnJhbWVMb2FkVHlwZSwgU2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdMb2Fk
OjpObywgV1RGOjpudWxsb3B0KSk7CiAgICAgbV9wcm9jZXNzLT5yZXNwb25zaXZlbmVzc1RpbWVy
KCkuc3RhcnQoKTsKIAogICAgIHJldHVybiBuYXZpZ2F0aW9uOwpAQCAtMTU4MCw3ICsxNTgwLDcg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OnRyeVJlc3RvcmVTY3JvbGxQb3NpdGlvbigpCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OlRyeVJlc3RvcmVTY3JvbGxQb3NpdGlvbigpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6VHJ5UmVzdG9yZVNjcm9sbFBvc2l0aW9uKCkpOwogfQogCiB2b2lkIFdl
YlBhZ2VQcm94eTo6ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KFdlYkJhY2tGb3J3YXJkTGlzdEl0
ZW0qIGFkZGVkLCBWZWN0b3I8UmVmPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiYmIHJlbW92ZWQp
CkBAIC0xNjQyLDcgKzE2NDIsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Q29udHJvbGxlZEJ5
QXV0b21hdGlvbihib29sIGNvbnRyb2xsZWQpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2Vzcygp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24oY29udHJvbGxlZCksIG1fd2ViUGFnZUlEKTsK
KyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRDb250cm9sbGVkQnlBdXRvbWF0aW9uKGNv
bnRyb2xsZWQpKTsKICAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29ya2lu
Z1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXNzaW9uSXNDb250cm9sbGVk
QnlBdXRvbWF0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIG1fY29udHJvbGxl
ZEJ5QXV0b21hdGlvbikpOwogfQogCkBAIC0xNjY3LDcgKzE2NjcsNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6c2V0SW5kaWNhdGluZyhib29sIGluZGljYXRpbmcpCiAgICAgaWYgKCFoYXNSdW5uaW5n
UHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OlNldEluZGljYXRpbmcoaW5kaWNhdGluZyksIG1fd2ViUGFnZUlEKTsKKyAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRJbmRpY2F0aW5nKGluZGljYXRpbmcpKTsKIH0K
IAogYm9vbCBXZWJQYWdlUHJveHk6OmFsbG93c1JlbW90ZUluc3BlY3Rpb24oKSBjb25zdApAQCAt
MTcwMyw3ICsxNzAzLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldEJhY2tncm91bmRDb2xvcihj
b25zdCBPcHRpb25hbDxDb2xvcj4mIGNvbG9yKQogCiAgICAgbV9iYWNrZ3JvdW5kQ29sb3IgPSBj
b2xvcjsKICAgICBpZiAoaGFzUnVubmluZ1Byb2Nlc3MoKSkKLSAgICAgICAgbV9wcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3IpLCBtX3dlYlBh
Z2VJRCk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEJhY2tncm91bmRDb2xv
cihjb2xvcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0VG9wQ29udGVudEluc2V0KGZs
b2F0IGNvbnRlbnRJbnNldCkKQEAgLTE3MTksOSArMTcxOSw5IEBAIHZvaWQgV2ViUGFnZVByb3h5
OjpzZXRUb3BDb250ZW50SW5zZXQoZmxvYXQgY29udGVudEluc2V0KQogICAgIE1hY2hTZW5kUmln
aHQgZmVuY2UgPSBtX2RyYXdpbmdBcmVhLT5jcmVhdGVGZW5jZSgpOwogCiAgICAgYXV0byBmZW5j
ZUF0dGFjaG1lbnQgPSBJUEM6OkF0dGFjaG1lbnQoZmVuY2UubGVha1NlbmRSaWdodCgpLCBNQUNI
X01TR19UWVBFX01PVkVfU0VORCk7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpTZXRUb3BDb250ZW50SW5zZXRGZW5jZWQoY29udGVudEluc2V0LCBmZW5jZUF0dGFjaG1l
bnQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0VG9wQ29u
dGVudEluc2V0RmVuY2VkKGNvbnRlbnRJbnNldCwgZmVuY2VBdHRhY2htZW50KSk7CiAjZWxzZQot
ICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0VG9wQ29udGVudEluc2V0
KGNvbnRlbnRJbnNldCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpTZXRUb3BDb250ZW50SW5zZXQoY29udGVudEluc2V0KSk7CiAjZW5kaWYKIH0KIApAQCAtMTcz
Myw3ICsxNzMzLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFVuZGVybGF5Q29sb3IoY29uc3Qg
Q29sb3ImIGNvbG9yKQogICAgIG1fdW5kZXJsYXlDb2xvciA9IGNvbG9yOwogCiAgICAgaWYgKGhh
c1J1bm5pbmdQcm9jZXNzKCkpCi0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6U2V0VW5kZXJsYXlDb2xvcihjb2xvciksIG1fd2ViUGFnZUlEKTsKKyAgICAgICAgc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0VW5kZXJsYXlDb2xvcihjb2xvcikpOwogfQogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6dmlld1dpbGxTdGFydExpdmVSZXNpemUoKQpAQCAtMTc0MiwxNCArMTc0
MiwxNCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6dmlld1dpbGxTdGFydExpdmVSZXNpemUoKQogICAg
ICAgICByZXR1cm47CiAKICAgICBjbG9zZU92ZXJsYXllZFZpZXdzKCk7Ci0gICAgbV9wcm9jZXNz
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpWaWV3V2lsbFN0YXJ0TGl2ZVJlc2l6ZSgpLCBtX3dl
YlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Vmlld1dpbGxTdGFydExpdmVS
ZXNpemUoKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5Ojp2aWV3V2lsbEVuZExpdmVSZXNpemUo
KQogewogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Vmlld1dpbGxFbmRMaXZlUmVzaXpl
KCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpWaWV3V2lsbEVu
ZExpdmVSZXNpemUoKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRWaWV3TmVlZHNEaXNw
bGF5KGNvbnN0IFJlZ2lvbiYgcmVnaW9uKQpAQCAtMTg0OSw3ICsxODQ5LDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OnZpZXdEaWRFbnRlcldpbmRvdygpCiAgICAgTGF5ZXJIb3N0aW5nTW9kZSBsYXll
ckhvc3RpbmdNb2RlID0gcGFnZUNsaWVudCgpLnZpZXdMYXllckhvc3RpbmdNb2RlKCk7CiAgICAg
aWYgKG1fbGF5ZXJIb3N0aW5nTW9kZSAhPSBsYXllckhvc3RpbmdNb2RlKSB7CiAgICAgICAgIG1f
bGF5ZXJIb3N0aW5nTW9kZSA9IGxheWVySG9zdGluZ01vZGU7Ci0gICAgICAgIG1fcHJvY2Vzcy0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0TGF5ZXJIb3N0aW5nTW9kZShsYXllckhvc3RpbmdN
b2RlKSwgbV93ZWJQYWdlSUQpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRM
YXllckhvc3RpbmdNb2RlKGxheWVySG9zdGluZ01vZGUpKTsKICAgICB9CiB9CiAKQEAgLTE4OTgs
NyArMTg5OCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaXNwYXRjaEFjdGl2aXR5U3RhdGVDaGFu
Z2UoKQogICAgIGF1dG8gYWN0aXZpdHlTdGF0ZUNoYW5nZUlEID0gbV9hY3Rpdml0eVN0YXRlQ2hh
bmdlV2FudHNTeW5jaHJvbm91c1JlcGx5ID8gdGFrZU5leHRBY3Rpdml0eVN0YXRlQ2hhbmdlSUQo
KSA6IHN0YXRpY19jYXN0PEFjdGl2aXR5U3RhdGVDaGFuZ2VJRD4oQWN0aXZpdHlTdGF0ZUNoYW5n
ZUFzeW5jaHJvbm91cyk7CiAKICAgICBpZiAoY2hhbmdlZCB8fCBhY3Rpdml0eVN0YXRlQ2hhbmdl
SUQgIT0gQWN0aXZpdHlTdGF0ZUNoYW5nZUFzeW5jaHJvbm91cyB8fCAhbV9uZXh0QWN0aXZpdHlT
dGF0ZUNoYW5nZUNhbGxiYWNrcy5pc0VtcHR5KCkpCi0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6U2V0QWN0aXZpdHlTdGF0ZShtX2FjdGl2aXR5U3RhdGUsIGFjdGl2
aXR5U3RhdGVDaGFuZ2VJRCwgbV9uZXh0QWN0aXZpdHlTdGF0ZUNoYW5nZUNhbGxiYWNrcyksIG1f
d2ViUGFnZUlEKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0QWN0aXZpdHlT
dGF0ZShtX2FjdGl2aXR5U3RhdGUsIGFjdGl2aXR5U3RhdGVDaGFuZ2VJRCwgbV9uZXh0QWN0aXZp
dHlTdGF0ZUNoYW5nZUNhbGxiYWNrcykpOwogCiAgICAgbV9uZXh0QWN0aXZpdHlTdGF0ZUNoYW5n
ZUNhbGxiYWNrcy5jbGVhcigpOwogCkBAIC0yMDMzLDcgKzIwMzMsNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6bGF5ZXJIb3N0aW5nTW9kZURpZENoYW5nZSgpCiAgICAgbV9sYXllckhvc3RpbmdNb2Rl
ID0gbGF5ZXJIb3N0aW5nTW9kZTsKIAogICAgIGlmIChoYXNSdW5uaW5nUHJvY2VzcygpKQotICAg
ICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldExheWVySG9zdGluZ01v
ZGUobGF5ZXJIb3N0aW5nTW9kZSksIG1fd2ViUGFnZUlEKTsKKyAgICAgICAgc2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6U2V0TGF5ZXJIb3N0aW5nTW9kZShsYXllckhvc3RpbmdNb2RlKSk7CiB9CiAK
IHZvaWQgV2ViUGFnZVByb3h5Ojp3YWl0Rm9yRGlkVXBkYXRlQWN0aXZpdHlTdGF0ZShBY3Rpdml0
eVN0YXRlQ2hhbmdlSUQgYWN0aXZpdHlTdGF0ZUNoYW5nZUlEKQpAQCAtMjA3NSwyMSArMjA3NSwy
MSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0SW5pdGlhbEZvY3VzKGJvb2wgZm9yd2FyZCwgYm9v
bCBpc0tleWJvYXJkRXZlbnRWYWxpZCwgY29ucwogICAgIH0KIAogICAgIGF1dG8gY2FsbGJhY2tJ
RCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3Mt
PnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5OjpzZXRJbml0aWFs
Rm9jdXMiX3MpKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldElu
aXRpYWxGb2N1cyhmb3J3YXJkLCBpc0tleWJvYXJkRXZlbnRWYWxpZCwga2V5Ym9hcmRFdmVudCwg
Y2FsbGJhY2tJRCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpT
ZXRJbml0aWFsRm9jdXMoZm9yd2FyZCwgaXNLZXlib2FyZEV2ZW50VmFsaWQsIGtleWJvYXJkRXZl
bnQsIGNhbGxiYWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmNsZWFyU2VsZWN0aW9u
KCkKIHsKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNsZWFyU2VsZWN0aW9uKCksIG1f
d2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDbGVhclNlbGVjdGlvbigp
KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnJlc3RvcmVTZWxlY3Rpb25JbkZvY3VzZWRFZGl0
YWJsZUVsZW1lbnQoKQogewogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVzdG9yZVNl
bGVjdGlvbkluRm9jdXNlZEVkaXRhYmxlRWxlbWVudCgpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6UmVzdG9yZVNlbGVjdGlvbkluRm9jdXNlZEVkaXRhYmxlRWxl
bWVudCgpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnZhbGlkYXRlQ29tbWFuZChjb25zdCBT
dHJpbmcmIGNvbW1hbmROYW1lLCBXVEY6OkZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYsIGJv
b2wsIGludDMyX3QsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCkBA
IC0yMTAwLDcgKzIxMDAsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6dmFsaWRhdGVDb21tYW5kKGNv
bnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIFdURjo6RnVuY3Rpb248dm9pZAogICAgIH0KIAogICAg
IGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rp
b24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViUGFnZVBy
b3h5Ojp2YWxpZGF0ZUNvbW1hbmQiX3MpKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OlZhbGlkYXRlQ29tbWFuZChjb21tYW5kTmFtZSwgY2FsbGJhY2tJRCksIG1fd2Vi
UGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpWYWxpZGF0ZUNvbW1hbmQoY29t
bWFuZE5hbWUsIGNhbGxiYWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmluY3JlYXNl
TGlzdExldmVsKCkKQEAgLTIxMDgsNyArMjEwOCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjppbmNy
ZWFzZUxpc3RMZXZlbCgpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkluY3JlYXNl
TGlzdExldmVsKCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpJ
bmNyZWFzZUxpc3RMZXZlbCgpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmRlY3JlYXNlTGlz
dExldmVsKCkKQEAgLTIxMTYsNyArMjExNiw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkZWNyZWFz
ZUxpc3RMZXZlbCgpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRlY3JlYXNlTGlz
dExldmVsKCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEZWNy
ZWFzZUxpc3RMZXZlbCgpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmNoYW5nZUxpc3RUeXBl
KCkKQEAgLTIxMjQsNyArMjEyNCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpjaGFuZ2VMaXN0VHlw
ZSgpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNoYW5nZUxpc3RUeXBlKCksIG1f
d2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDaGFuZ2VMaXN0VHlwZSgp
KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldEJhc2VXcml0aW5nRGlyZWN0aW9uKFdyaXRp
bmdEaXJlY3Rpb24gZGlyZWN0aW9uKQpAQCAtMjEzMiw3ICsyMTMyLDcgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OnNldEJhc2VXcml0aW5nRGlyZWN0aW9uKFdyaXRpbmdEaXJlY3Rpb24gZGlyZWN0aW9u
KQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRCYXNlV3JpdGluZ0RpcmVjdGlv
bihkaXJlY3Rpb24pLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
U2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24oZGlyZWN0aW9uKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVBy
b3h5Ojp1cGRhdGVGb250QXR0cmlidXRlc0FmdGVyRWRpdG9yU3RhdGVDaGFuZ2UoKQpAQCAtMjE1
Niw3ICsyMTU2LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldE5lZWRzRm9udEF0dHJpYnV0ZXMo
Ym9vbCBuZWVkc0ZvbnRBdHRyaWJ1dGVzKQogICAgIG1fbmVlZHNGb250QXR0cmlidXRlcyA9IG5l
ZWRzRm9udEF0dHJpYnV0ZXM7CiAKICAgICBpZiAoaGFzUnVubmluZ1Byb2Nlc3MoKSkKLSAgICAg
ICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXROZWVkc0ZvbnRBdHRyaWJ1
dGVzKG5lZWRzRm9udEF0dHJpYnV0ZXMpLCBtX3dlYlBhZ2VJRCk7CisgICAgICAgIHNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OlNldE5lZWRzRm9udEF0dHJpYnV0ZXMobmVlZHNGb250QXR0cmlidXRl
cykpOwogfQogCiBib29sIFdlYlBhZ2VQcm94eTo6bWFpbnRhaW5zSW5hY3RpdmVTZWxlY3Rpb24o
KSBjb25zdApAQCAtMjE3OSw3ICsyMTc5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNjaGVkdWxl
RnVsbEVkaXRvclN0YXRlVXBkYXRlKCkKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
U2NoZWR1bGVGdWxsRWRpdG9yU3RhdGVVcGRhdGUoKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OlNjaGVkdWxlRnVsbEVkaXRvclN0YXRlVXBkYXRlKCkpOwogfQog
CiB2b2lkIFdlYlBhZ2VQcm94eTo6c2VsZWN0QWxsKCkKQEAgLTIxODcsNyArMjE4Nyw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpzZWxlY3RBbGwoKQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3Mo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpTZWxlY3RBbGwoKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlNlbGVjdEFsbCgpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmV4ZWN1dGVFZGl0Q29t
bWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50LCBX
VEY6OkZ1bmN0aW9uPHZvaWQoQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2tGdW5jdGlv
bikKQEAgLTIxOTgsNyArMjE5OCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpleGVjdXRlRWRpdENv
bW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhCiAgICAgfQog
CiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2tG
dW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQ
YWdlUHJveHk6OmV4ZWN1dGVFZGl0Q29tbWFuZCJfcykpOwotICAgIG1fcHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6RXhlY3V0ZUVkaXRDb21tYW5kV2l0aENhbGxiYWNrKGNvbW1hbmRO
YW1lLCBhcmd1bWVudCwgY2FsbGJhY2tJRCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpFeGVjdXRlRWRpdENvbW1hbmRXaXRoQ2FsbGJhY2soY29tbWFuZE5hbWUs
IGFyZ3VtZW50LCBjYWxsYmFja0lEKSk7CiB9CiAgICAgCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZXhl
Y3V0ZUVkaXRDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYg
YXJndW1lbnQpCkBAIC0yMjExLDcgKzIyMTEsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZXhlY3V0
ZUVkaXRDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYQog
ICAgIGlmIChjb21tYW5kTmFtZSA9PSBpZ25vcmVTcGVsbGluZ0NvbW1hbmROYW1lKQogICAgICAg
ICArK21fcGVuZGluZ0xlYXJuT3JJZ25vcmVXb3JkTWVzc2FnZUNvdW50OwogCi0gICAgbV9wcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpFeGVjdXRlRWRpdENvbW1hbmQoY29tbWFuZE5h
bWUsIGFyZ3VtZW50KSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OkV4ZWN1dGVFZGl0Q29tbWFuZChjb21tYW5kTmFtZSwgYXJndW1lbnQpKTsKIH0KIAogdm9pZCBX
ZWJQYWdlUHJveHk6OnJlcXVlc3RGb250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQoRnVuY3Rp
b248dm9pZChjb25zdCBXZWJDb3JlOjpGb250QXR0cmlidXRlcyYsIENhbGxiYWNrQmFzZTo6RXJy
b3IpPiYmIGNhbGxiYWNrKQpAQCAtMjIyMiw3ICsyMjIyLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OnJlcXVlc3RGb250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQoRnVuY3Rpb248dm9pZChjb25z
dCBXZWIKICAgICB9CiAKICAgICBhdXRvIGNhbGxiYWNrSUQgPSBtX2NhbGxiYWNrcy5wdXQoV1RG
TW92ZShjYWxsYmFjayksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5
KCJXZWJQYWdlUHJveHk6OnJlcXVlc3RGb250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQiX3Mp
KTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJlcXVlc3RGb250QXR0
cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQoY2FsbGJhY2tJRCksIG1fd2ViUGFnZUlEKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpSZXF1ZXN0Rm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlvblN0
YXJ0KGNhbGxiYWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmZvbnRBdHRyaWJ1dGVz
Q2FsbGJhY2soY29uc3QgV2ViQ29yZTo6Rm9udEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMsIENhbGxi
YWNrSUQgY2FsbGJhY2tJRCkKQEAgLTIyNDMsNyArMjI0Myw3IEBAIHZvaWQgV2ViUGFnZVByb3h5
OjpzZXRFZGl0YWJsZShib29sIGVkaXRhYmxlKQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3Mo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpTZXRFZGl0YWJsZShlZGl0YWJsZSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpTZXRFZGl0YWJsZShlZGl0YWJsZSkpOwogfQogICAgIAogdm9pZCBXZWJQ
YWdlUHJveHk6OnNldE1lZGlhU3RyZWFtQ2FwdHVyZU11dGVkKGJvb2wgbXV0ZWQpCkBAIC0yMzA4
LDkgKzIzMDgsOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cGVyZm9ybURyYWdDb250cm9sbGVyQWN0
aW9uKERyYWdDb250cm9sbGVyQWN0aW9uIGFjdGlvbiwgRHJhZwogCiAgICAgQVNTRVJUKGRyYWdE
YXRhLnBsYXRmb3JtRGF0YSgpKTsKICAgICBXZWJTZWxlY3Rpb25EYXRhIHNlbGVjdGlvbigqZHJh
Z0RhdGEucGxhdGZvcm1EYXRhKCkpOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6UGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKGFjdGlvbiwgZHJhZ0RhdGEuY2xpZW50
UG9zaXRpb24oKSwgZHJhZ0RhdGEuZ2xvYmFsUG9zaXRpb24oKSwgZHJhZ0RhdGEuZHJhZ2dpbmdT
b3VyY2VPcGVyYXRpb25NYXNrKCksIHNlbGVjdGlvbiwgZHJhZ0RhdGEuZmxhZ3MoKSksIG1fd2Vi
UGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRHJhZ0NvbnRyb2xs
ZXJBY3Rpb24oYWN0aW9uLCBkcmFnRGF0YS5jbGllbnRQb3NpdGlvbigpLCBkcmFnRGF0YS5nbG9i
YWxQb3NpdGlvbigpLCBkcmFnRGF0YS5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKSwgc2Vs
ZWN0aW9uLCBkcmFnRGF0YS5mbGFncygpKSk7CiAjZWxzZQotICAgIG1fcHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKGFjdGlvbiwgZHJh
Z0RhdGEsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIHNhbmRib3hFeHRlbnNpb25zRm9yVXBsb2Fk
KSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBlcmZvcm1EcmFn
Q29udHJvbGxlckFjdGlvbihhY3Rpb24sIGRyYWdEYXRhLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxl
LCBzYW5kYm94RXh0ZW5zaW9uc0ZvclVwbG9hZCkpOwogI2VuZGlmCiB9CiAKQEAgLTIzNDAsNyAr
MjM0MCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkcmFnRW5kZWQoY29uc3QgSW50UG9pbnQmIGNs
aWVudFBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgZ2xvCiB7CiAgICAgaWYgKCFoYXNSdW5uaW5n
UHJvY2VzcygpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpEcmFnRW5kZWQoY2xpZW50UG9zaXRpb24sIGdsb2JhbFBvc2l0aW9uLCBvcGVy
YXRpb24pLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RHJhZ0Vu
ZGVkKGNsaWVudFBvc2l0aW9uLCBnbG9iYWxQb3NpdGlvbiwgb3BlcmF0aW9uKSk7CiAgICAgc2V0
RHJhZ0NhcmV0UmVjdCh7IH0pOwogfQogCkBAIC0yMzUyLDEzICsyMzUyLDEzIEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpkaWRQZXJmb3JtRHJhZ09wZXJhdGlvbihib29sIGhhbmRsZWQpCiB2b2lkIFdl
YlBhZ2VQcm94eTo6ZGlkU3RhcnREcmFnKCkKIHsKICAgICBpZiAoaGFzUnVubmluZ1Byb2Nlc3Mo
KSkKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRTdGFydERy
YWcoKSwgbV93ZWJQYWdlSUQpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRT
dGFydERyYWcoKSk7CiB9CiAgICAgCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZHJhZ0NhbmNlbGxlZCgp
CiB7CiAgICAgaWYgKGhhc1J1bm5pbmdQcm9jZXNzKCkpCi0gICAgICAgIG1fcHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6RHJhZ0NhbmNlbGxlZCgpLCBtX3dlYlBhZ2VJRCk7CisgICAg
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRyYWdDYW5jZWxsZWQoKSk7CiB9CiAKIHZvaWQg
V2ViUGFnZVByb3h5OjpkaWRFbmREcmFnZ2luZygpCkBAIC0yNDU3LDcgKzI0NTcsNyBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6cHJvY2Vzc05leHRRdWV1ZWRNb3VzZUV2ZW50KCkKICAgICB9CiAKICAg
ICBMT0coTW91c2VIYW5kbGluZywgIlVJUHJvY2Vzczogc2VudCBtb3VzZSBldmVudCAlcyAocXVl
dWUgc2l6ZSAlenUpIiwgd2ViTW91c2VFdmVudFR5cGVTdHJpbmcoZXZlbnRUeXBlKSwgbV9tb3Vz
ZUV2ZW50UXVldWUuc2l6ZSgpKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6Ok1vdXNlRXZlbnQoZXZlbnQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6TW91c2VFdmVudChldmVudCkpOwogfQogCiAjaWYgTUVSR0VfV0hFRUxfRVZFTlRT
CkBAIC0yNTY0LDcgKzI1NjQsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cHJvY2Vzc05leHRRdWV1
ZWRXaGVlbEV2ZW50KCkKIAogdm9pZCBXZWJQYWdlUHJveHk6OnNlbmRXaGVlbEV2ZW50KGNvbnN0
IFdlYldoZWVsRXZlbnQmIGV2ZW50KQogewotICAgIG1fcHJvY2Vzcy0+c2VuZCgKKyAgICBzZW5k
KAogICAgICAgICBNZXNzYWdlczo6RXZlbnREaXNwYXRjaGVyOjpXaGVlbEV2ZW50KAogICAgICAg
ICAgICAgbV93ZWJQYWdlSUQsCiAgICAgICAgICAgICBldmVudCwKQEAgLTI2MTcsNyArMjYxNyw3
IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IE5hdGl2ZVdl
YktleWJvYXJkRXZlbnQmIGV2ZW50KQogCiAgICAgaWYgKG1fa2V5RXZlbnRRdWV1ZS5zaXplKCkg
PT0gMSkgeyAvLyBPdGhlcndpc2UsIHNlbnQgZnJvbSBEaWRSZWNlaXZlRXZlbnQgbWVzc2FnZSBo
YW5kbGVyLgogICAgICAgICBMT0coS2V5SGFuZGxpbmcsICIgVUkgcHJvY2Vzczogc2VudCBrZXlF
dmVudCBmcm9tIGhhbmRsZUtleWJvYXJkRXZlbnQiKTsKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpLZXlFdmVudChldmVudCksIG1fd2ViUGFnZUlEKTsKKyAgICAg
ICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6S2V5RXZlbnQoZXZlbnQpKTsKICAgICB9CiB9CiAK
QEAgLTI3OTAsNyArMjc5MCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVHZXN0dXJlRXZl
bnQoY29uc3QgTmF0aXZlV2ViR2VzdHVyZUV2ZW50JiBldmVudCkKICAgICBlbHNlCiAgICAgICAg
IHJlc3BvbnNpdmVuZXNzVGltZXIuc3RhcnQoKTsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6RXZlbnREaXNwYXRjaGVyOjpHZXN0dXJlRXZlbnQobV93ZWJQYWdlSUQsIGV2ZW50KSwg
MCk7CisgICAgc2VuZChNZXNzYWdlczo6RXZlbnREaXNwYXRjaGVyOjpHZXN0dXJlRXZlbnQobV93
ZWJQYWdlSUQsIGV2ZW50KSwgMCk7CiB9CiAjZW5kaWYKIApAQCAtMjg1MiwxMyArMjg1MiwxMyBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlUHJldmVudGFibGVUb3VjaEV2ZW50KE5hdGl2ZVdl
YlRvdWNoRXZlbnQmIGV2ZW50KQogICAgICAgICB9OwogCiAgICAgICAgIGF1dG8gY2FsbGJhY2tJ
RCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgbV9wcm9jZXNz
LT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBhZ2VQcm94eTo6aGFuZGxlUHJl
dmVudGFibGVUb3VjaEV2ZW50Il9zKSk7Ci0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdl
czo6RXZlbnREaXNwYXRjaGVyOjpUb3VjaEV2ZW50KG1fd2ViUGFnZUlELCBldmVudCwgY2FsbGJh
Y2tJRCksIDApOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpFdmVudERpc3BhdGNoZXI6OlRvdWNo
RXZlbnQobV93ZWJQYWdlSUQsIGV2ZW50LCBjYWxsYmFja0lEKSwgMCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBtX3Byb2Nlc3MtPnJlc3BvbnNpdmVuZXNzVGltZXIoKS5zdGFydCgp
OwogICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOwotICAgIGJvb2wgcmVwbHlSZWNlaXZlZCA9IG1f
cHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6OlRvdWNoRXZlbnRTeW5jKGV2ZW50
KSwgTWVzc2FnZXM6OldlYlBhZ2U6OlRvdWNoRXZlbnRTeW5jOjpSZXBseShoYW5kbGVkKSwgbV93
ZWJQYWdlSUQsIDFfcywgSVBDOjpTZW5kU3luY09wdGlvbjo6Rm9yY2VEaXNwYXRjaFdoZW5EZXN0
aW5hdGlvbklzV2FpdGluZ0ZvclVuYm91bmRlZFN5bmNSZXBseSk7CisgICAgYm9vbCByZXBseVJl
Y2VpdmVkID0gc2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6OlRvdWNoRXZlbnRTeW5jKGV2ZW50
KSwgTWVzc2FnZXM6OldlYlBhZ2U6OlRvdWNoRXZlbnRTeW5jOjpSZXBseShoYW5kbGVkKSwgMV9z
LCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpGb3JjZURpc3BhdGNoV2hlbkRlc3RpbmF0aW9uSXNXYWl0
aW5nRm9yVW5ib3VuZGVkU3luY1JlcGx5KTsKICAgICAvLyBJZiB0aGUgc3luYyByZXF1ZXN0IGhh
cyB0aW1lZCBvdXQsIHdlIHNob3VsZCBjb25zaWRlciB0aGUgZXZlbnQgaGFuZGxlZC4gVGhlIFdl
YiBQcm9jZXNzIGlzIHRvbyBidXN5IHRvIGFuc3dlciBhbnkgcXVlc3Rpb25zLCBzbyB0aGUgZGVm
YXVsdCBhY3Rpb24gaXMgYWxzbyBsaWtlbHkgdG8gaGF2ZSBpc3N1ZXMuCiAgICAgaWYgKCFyZXBs
eVJlY2VpdmVkKQogICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKQEAgLTI4NzMsNyArMjg3Myw3IEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpyZXNldFBvdGVudGlhbFRhcFNlY3VyaXR5T3JpZ2luKCkKICAg
ICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVzZXRQb3RlbnRpYWxUYXBTZWN1cml0eU9y
aWdpbigpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVzZXRQ
b3RlbnRpYWxUYXBTZWN1cml0eU9yaWdpbigpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6Omhh
bmRsZVVucHJldmVudGFibGVUb3VjaEV2ZW50KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZlbnQmIGV2
ZW50KQpAQCAtMjg4NSw3ICsyODg1LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZVVucHJl
dmVudGFibGVUb3VjaEV2ZW50KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZlbnQmIGV2ZW4KICAgICBp
ZiAodG91Y2hFdmVudHNUcmFja2luZ1R5cGUgPT0gVHJhY2tpbmdUeXBlOjpOb3RUcmFja2luZykK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpFdmVudERp
c3BhdGNoZXI6OlRvdWNoRXZlbnQobV93ZWJQYWdlSUQsIGV2ZW50LCBXVEY6Om51bGxvcHQpLCAw
KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpFdmVudERpc3BhdGNoZXI6OlRvdWNoRXZlbnQobV93ZWJQ
YWdlSUQsIGV2ZW50LCBXVEY6Om51bGxvcHQpLCAwKTsKIAogICAgIGlmIChldmVudC5hbGxUb3Vj
aFBvaW50c0FyZVJlbGVhc2VkKCkpIHsKICAgICAgICAgbV90b3VjaEFuZFBvaW50ZXJFdmVudFRy
YWNraW5nLnJlc2V0KCk7CkBAIC0yOTEwLDcgKzI5MTAsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
aGFuZGxlVG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50JiBldmVudCkKICAgICBp
ZiAoIW1faXNQYWdlU3VzcGVuZGVkKSB7CiAgICAgICAgIG1fdG91Y2hFdmVudFF1ZXVlLmFwcGVu
ZChldmVudCk7CiAgICAgICAgIG1fcHJvY2Vzcy0+cmVzcG9uc2l2ZW5lc3NUaW1lcigpLnN0YXJ0
KCk7Ci0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6VG91Y2hFdmVu
dChldmVudCksIG1fd2ViUGFnZUlEKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
VG91Y2hFdmVudChldmVudCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChtX3RvdWNoRXZl
bnRRdWV1ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGJvb2wgaXNFdmVudEhhbmRsZWQgPSBm
YWxzZTsKQEAgLTI5MzMsMTIgKzI5MzMsMTIgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZVRv
dWNoRXZlbnQoY29uc3QgTmF0aXZlV2ViVG91Y2hFdmVudCYgZXZlbnQpCiAjaWYgRU5BQkxFKFBP
SU5URVJfRVZFTlRTKQogdm9pZCBXZWJQYWdlUHJveHk6OmNhbmNlbFBvaW50ZXIoV2ViQ29yZTo6
UG9pbnRlcklEIHBvaW50ZXJJZCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRvY3VtZW50UG9p
bnQpCiB7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDYW5jZWxQb2lu
dGVyKHBvaW50ZXJJZCwgZG9jdW1lbnRQb2ludCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpDYW5jZWxQb2ludGVyKHBvaW50ZXJJZCwgZG9jdW1lbnRQb2ludCkp
OwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6dG91Y2hXaXRoSWRlbnRpZmllcldhc1JlbW92ZWQo
V2ViQ29yZTo6UG9pbnRlcklEIHBvaW50ZXJJZCkKIHsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OlRvdWNoV2l0aElkZW50aWZpZXJXYXNSZW1vdmVkKHBvaW50ZXJJZCks
IG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpUb3VjaFdpdGhJZGVu
dGlmaWVyV2FzUmVtb3ZlZChwb2ludGVySWQpKTsKIH0KICNlbmRpZgogCkBAIC0yOTQ3LDcgKzI5
NDcsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2Nyb2xsQnkoU2Nyb2xsRGlyZWN0aW9uIGRpcmVj
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nl
c3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpTY3JvbGxCeShkaXJlY3Rpb24sIGdyYW51bGFyaXR5KSwgbV93ZWJQYWdlSUQpOwor
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNjcm9sbEJ5KGRpcmVjdGlvbiwgZ3JhbnVsYXJp
dHkpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmNlbnRlclNlbGVjdGlvbkluVmlzaWJsZUFy
ZWEoKQpAQCAtMjk1NSw3ICsyOTU1LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNlbnRlclNlbGVj
dGlvbkluVmlzaWJsZUFyZWEoKQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDZW50
ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhKCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpDZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhKCkpOwogfQogCiBjbGFz
cyBXZWJQYWdlUHJveHk6OlBvbGljeURlY2lzaW9uU2VuZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8
UG9saWN5RGVjaXNpb25TZW5kZXI+IHsKQEAgLTMxMjEsNyArMzEyMSw3IEBAIHZvaWQgV2ViUGFn
ZVByb3h5Ojpjb21taXRQcm92aXNpb25hbFBhZ2UoRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIHVp
bnQ2NF90IG5hdmlnCiAKICAgICAvLyBUaGVyZSBpcyBubyB3YXkgd2UnbGwgYmUgYWJsZSB0byBy
ZXR1cm4gdG8gdGhlIHBhZ2UgaW4gdGhlIHByZXZpb3VzIHBhZ2Ugc28gY2xvc2UgaXQuCiAgICAg
aWYgKCFkaWRTdXNwZW5kUHJldmlvdXNQYWdlKQotICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OkNsb3NlKCksIG1fd2ViUGFnZUlEKTsKKyAgICAgICAgc2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6Q2xvc2UoKSk7CiAKICAgICBjb25zdCBhdXRvIG9sZFdlYlBhZ2VJRCA9
IG1fd2ViUGFnZUlEOwogICAgIHN3YXBUb1dlYlByb2Nlc3MobV9wcm92aXNpb25hbFBhZ2UtPnBy
b2Nlc3MoKSwgbV9wcm92aXNpb25hbFBhZ2UtPndlYlBhZ2VJRCgpLCBtX3Byb3Zpc2lvbmFsUGFn
ZS0+dGFrZURyYXdpbmdBcmVhKCksIG1fcHJvdmlzaW9uYWxQYWdlLT5tYWluRnJhbWUoKSk7CkBA
IC0zMjIyLDcgKzMyMjIsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0VXNlckFnZW50KFN0cmlu
ZyYmIHVzZXJBZ2VudCkKIAogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0VXNlckFn
ZW50KG1fdXNlckFnZW50KSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlNldFVzZXJBZ2VudChtX3VzZXJBZ2VudCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6
c2V0QXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50KGNvbnN0IFN0cmluZyYgYXBwbGljYXRpb25O
YW1lKQpAQCAtMzI1OSw3ICszMjU5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlc3VtZUFjdGl2
ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCkKIAogICAgIG1faXNQYWdlU3VzcGVuZGVkID0gZmFs
c2U7CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJlc3VtZUFjdGl2
ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpSZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpKTsKIH0K
IAogdm9pZCBXZWJQYWdlUHJveHk6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9u
cygpCkBAIC0zMjY5LDcgKzMyNjksNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c3VzcGVuZEFjdGl2
ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCkKIAogICAgIG1faXNQYWdlU3VzcGVuZGVkID0gdHJ1
ZTsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U3VzcGVuZEFjdGl2
ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpTdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKSk7CiB9
CiAKIGJvb2wgV2ViUGFnZVByb3h5OjpzdXBwb3J0c1RleHRFbmNvZGluZygpIGNvbnN0CkBAIC0z
Mjg2LDcgKzMyODYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Q3VzdG9tVGV4dEVuY29kaW5n
TmFtZShjb25zdCBTdHJpbmcmIGVuY29kaW5nTmFtZSkKIAogICAgIGlmICghaGFzUnVubmluZ1By
b2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6U2V0Q3VzdG9tVGV4dEVuY29kaW5nTmFtZShlbmNvZGluZ05hbWUpLCBtX3dlYlBh
Z2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0Q3VzdG9tVGV4dEVuY29kaW5n
TmFtZShlbmNvZGluZ05hbWUpKTsKIH0KIAogU2Vzc2lvblN0YXRlIFdlYlBhZ2VQcm94eTo6c2Vz
c2lvblN0YXRlKFdURjo6RnVuY3Rpb248Ym9vbCAoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYpPiYm
IGZpbHRlcikgY29uc3QKQEAgLTMzMjQsNyArMzMyNCw3IEBAIFJlZlB0cjxBUEk6Ok5hdmlnYXRp
b24+IFdlYlBhZ2VQcm94eTo6cmVzdG9yZUZyb21TZXNzaW9uU3RhdGUoU2Vzc2lvblN0YXRlIHNl
c3NpCiAgICAgICAgIGxhdW5jaEluaXRpYWxQcm9jZXNzSWZOZWNlc3NhcnkoKTsKIAogICAgICAg
ICBtX2JhY2tGb3J3YXJkTGlzdC0+cmVzdG9yZUZyb21TdGF0ZShXVEZNb3ZlKHNlc3Npb25TdGF0
ZS5iYWNrRm9yd2FyZExpc3RTdGF0ZSkpOwotICAgICAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6UmVzdG9yZVNlc3Npb24obV9iYWNrRm9yd2FyZExpc3QtPml0ZW1TdGF0ZXMo
KSksIG1fd2ViUGFnZUlEKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVzdG9y
ZVNlc3Npb24obV9iYWNrRm9yd2FyZExpc3QtPml0ZW1TdGF0ZXMoKSkpOwogCiAgICAgICAgIGF1
dG8gdHJhbnNhY3Rpb24gPSBtX3BhZ2VMb2FkU3RhdGUudHJhbnNhY3Rpb24oKTsKICAgICAgICAg
bV9wYWdlTG9hZFN0YXRlLnNldENhbkdvQmFjayh0cmFuc2FjdGlvbiwgbV9iYWNrRm9yd2FyZExp
c3QtPmJhY2tJdGVtKCkpOwpAQCAtMzM3Miw3ICszMzcyLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OnNldFRleHRab29tRmFjdG9yKGRvdWJsZSB6b29tRmFjdG9yKQogICAgIGlmICghaGFzUnVubmlu
Z1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpTZXRUZXh0Wm9vbUZhY3RvcihtX3RleHRab29tRmFjdG9yKSwgbV93ZWJQ
YWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFRleHRab29tRmFjdG9yKG1f
dGV4dFpvb21GYWN0b3IpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldFBhZ2Vab29tRmFj
dG9yKGRvdWJsZSB6b29tRmFjdG9yKQpAQCAtMzM4Nyw3ICszMzg3LDcgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OnNldFBhZ2Vab29tRmFjdG9yKGRvdWJsZSB6b29tRmFjdG9yKQogICAgIGlmICghaGFz
UnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRQYWdlWm9vbUZhY3RvcihtX3BhZ2Vab29tRmFjdG9yKSwg
bV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFBhZ2Vab29tRmFj
dG9yKG1fcGFnZVpvb21GYWN0b3IpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldFBhZ2VB
bmRUZXh0Wm9vbUZhY3RvcnMoZG91YmxlIHBhZ2Vab29tRmFjdG9yLCBkb3VibGUgdGV4dFpvb21G
YWN0b3IpCkBAIC0zNDAzLDcgKzM0MDMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0UGFnZUFu
ZFRleHRab29tRmFjdG9ycyhkb3VibGUgcGFnZVpvb21GYWN0b3IsIGRvdWJsZSB0ZXh0WgogICAg
IGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKG1f
cGFnZVpvb21GYWN0b3IsIG1fdGV4dFpvb21GYWN0b3IpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyhtX3BhZ2Vab29t
RmFjdG9yLCBtX3RleHRab29tRmFjdG9yKSk7CiB9CiAKIGRvdWJsZSBXZWJQYWdlUHJveHk6OnBh
Z2Vab29tRmFjdG9yKCkgY29uc3QKQEAgLTM0MzMsNyArMzQzMyw3IEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpzY2FsZVBhZ2UoZG91YmxlIHNjYWxlLCBjb25zdCBJbnRQb2ludCYgb3JpZ2luKQogICAg
IGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTY2FsZVBhZ2Uoc2NhbGUsIG9yaWdpbiksIG1f
d2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTY2FsZVBhZ2Uoc2NhbGUs
IG9yaWdpbikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2NhbGVQYWdlSW5WaWV3Q29vcmRp
bmF0ZXMoZG91YmxlIHNjYWxlLCBjb25zdCBJbnRQb2ludCYgY2VudGVySW5WaWV3Q29vcmRpbmF0
ZXMpCkBAIC0zNDQ1LDcgKzM0NDUsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2NhbGVQYWdlSW5W
aWV3Q29vcmRpbmF0ZXMoZG91YmxlIHNjYWxlLCBjb25zdCBJbnRQb2ludCYgY2VudAogICAgIGlm
ICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNz
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTY2FsZVBhZ2VJblZpZXdDb29yZGluYXRlcyhzY2Fs
ZSwgY2VudGVySW5WaWV3Q29vcmRpbmF0ZXMpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6U2NhbGVQYWdlSW5WaWV3Q29vcmRpbmF0ZXMoc2NhbGUsIGNlbnRlcklu
Vmlld0Nvb3JkaW5hdGVzKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzY2FsZVZpZXcoZG91
YmxlIHNjYWxlKQpAQCAtMzQ1Nyw3ICszNDU3LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNjYWxl
Vmlldyhkb3VibGUgc2NhbGUpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNjYWxl
VmlldyhzY2FsZSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpT
Y2FsZVZpZXcoc2NhbGUpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldEludHJpbnNpY0Rl
dmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQpAQCAtMzQ3Niw3ICszNDc2LDcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OndpbmRvd1NjcmVlbkRpZENoYW5nZShQbGF0Zm9ybURpc3BsYXlJ
RCBkaXNwbGF5SUQpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OldpbmRvd1NjcmVl
bkRpZENoYW5nZShkaXNwbGF5SUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6V2luZG93U2NyZWVuRGlkQ2hhbmdlKGRpc3BsYXlJRCkpOwogfQogCiBmbG9hdCBX
ZWJQYWdlUHJveHk6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKQEAgLTM1MTUsNyArMzUxNSw3
IEBAIHZvaWQgV2ViUGFnZVByb3h5OjphY2Nlc3NpYmlsaXR5U2V0dGluZ3NEaWRDaGFuZ2UoKQog
ICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9w
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpBY2Nlc3NpYmlsaXR5U2V0dGluZ3NEaWRD
aGFuZ2UoKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkFjY2Vz
c2liaWxpdHlTZXR0aW5nc0RpZENoYW5nZSgpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNl
dFVzZUZpeGVkTGF5b3V0KGJvb2wgZml4ZWQpCkBAIC0zNTMyLDcgKzM1MzIsNyBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6c2V0VXNlRml4ZWRMYXlvdXQoYm9vbCBmaXhlZCkKICAgICBpZiAoIWhhc1J1
bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6U2V0VXNlRml4ZWRMYXlvdXQoZml4ZWQpLCBtX3dlYlBhZ2VJRCk7
CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0VXNlRml4ZWRMYXlvdXQoZml4ZWQpKTsK
IH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldEZpeGVkTGF5b3V0U2l6ZShjb25zdCBJbnRTaXpl
JiBzaXplKQpAQCAtMzU0NSw3ICszNTQ1LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldEZpeGVk
TGF5b3V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nl
c3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpTZXRGaXhlZExheW91dFNpemUoc2l6ZSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRGaXhlZExheW91dFNpemUoc2l6ZSkpOwogfQogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6c2V0QWx3YXlzU2hvd3NIb3Jpem9udGFsU2Nyb2xsZXIoYm9vbCBhbHdh
eXNTaG93c0hvcml6b250YWxTY3JvbGxlcikKQEAgLTM1NTgsNyArMzU1OCw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpzZXRBbHdheXNTaG93c0hvcml6b250YWxTY3JvbGxlcihib29sIGFsd2F5c1No
b3dzSG9yaXpvbnRhbFNjCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEFsd2F5
c1Nob3dzSG9yaXpvbnRhbFNjcm9sbGVyKGFsd2F5c1Nob3dzSG9yaXpvbnRhbFNjcm9sbGVyKSwg
bV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEFsd2F5c1Nob3dz
SG9yaXpvbnRhbFNjcm9sbGVyKGFsd2F5c1Nob3dzSG9yaXpvbnRhbFNjcm9sbGVyKSk7CiB9CiAK
IHZvaWQgV2ViUGFnZVByb3h5OjpzZXRBbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIoYm9vbCBh
bHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIpCkBAIC0zNTcxLDcgKzM1NzEsNyBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6c2V0QWx3YXlzU2hvd3NWZXJ0aWNhbFNjcm9sbGVyKGJvb2wgYWx3YXlzU2hv
d3NWZXJ0aWNhbFNjcm9sbAogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRBbHdh
eXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIoYWx3YXlzU2hvd3NWZXJ0aWNhbFNjcm9sbGVyKSwgbV93
ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEFsd2F5c1Nob3dzVmVy
dGljYWxTY3JvbGxlcihhbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIpKTsKIH0KIAogdm9pZCBX
ZWJQYWdlUHJveHk6Omxpc3RlbkZvckxheW91dE1pbGVzdG9uZXMoT3B0aW9uU2V0PFdlYkNvcmU6
OkxheW91dE1pbGVzdG9uZT4gbWlsZXN0b25lcykKQEAgLTM1ODQsNyArMzU4NCw3IEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpsaXN0ZW5Gb3JMYXlvdXRNaWxlc3RvbmVzKE9wdGlvblNldDxXZWJDb3Jl
OjpMYXlvdXRNaWxlc3RvbmU+CiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Okxpc3Rl
bkZvckxheW91dE1pbGVzdG9uZXMobWlsZXN0b25lcyksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpMaXN0ZW5Gb3JMYXlvdXRNaWxlc3RvbmVzKG1pbGVzdG9uZXMp
KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldFN1cHByZXNzU2Nyb2xsYmFyQW5pbWF0aW9u
cyhib29sIHN1cHByZXNzQW5pbWF0aW9ucykKQEAgLTM1OTcsNyArMzU5Nyw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpzZXRTdXBwcmVzc1Njcm9sbGJhckFuaW1hdGlvbnMoYm9vbCBzdXBwcmVzc0Fu
aW1hdGlvbnMpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFN1cHByZXNzU2Ny
b2xsYmFyQW5pbWF0aW9ucyhzdXBwcmVzc0FuaW1hdGlvbnMpLCBtX3dlYlBhZ2VJRCk7CisgICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0U3VwcHJlc3NTY3JvbGxiYXJBbmltYXRpb25zKHN1
cHByZXNzQW5pbWF0aW9ucykpOwogfQogCiBib29sIFdlYlBhZ2VQcm94eTo6cnViYmVyQmFuZHNB
dExlZnQoKSBjb25zdApAQCAtMzY0OSw3ICszNjQ5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNl
dEVuYWJsZVZlcnRpY2FsUnViYmVyQmFuZGluZyhib29sIGVuYWJsZVZlcnRpY2FsUnViYmVyQmFu
ZGkKIAogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0RW5hYmxlVmVydGljYWxSdWJi
ZXJCYW5kaW5nKGVuYWJsZVZlcnRpY2FsUnViYmVyQmFuZGluZyksIG1fd2ViUGFnZUlEKTsKKyAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRFbmFibGVWZXJ0aWNhbFJ1YmJlckJhbmRpbmco
ZW5hYmxlVmVydGljYWxSdWJiZXJCYW5kaW5nKSk7CiB9CiAgICAgCiBib29sIFdlYlBhZ2VQcm94
eTo6dmVydGljYWxSdWJiZXJCYW5kaW5nSXNFbmFibGVkKCkgY29uc3QKQEAgLTM2NjYsNyArMzY2
Niw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRFbmFibGVIb3Jpem9udGFsUnViYmVyQmFuZGlu
Zyhib29sIGVuYWJsZUhvcml6b250YWxSdWJiZXJCCiAKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9j
ZXNzKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OlNldEVuYWJsZUhvcml6b250YWxSdWJiZXJCYW5kaW5nKGVuYWJsZUhvcml6b250YWxS
dWJiZXJCYW5kaW5nKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OlNldEVuYWJsZUhvcml6b250YWxSdWJiZXJCYW5kaW5nKGVuYWJsZUhvcml6b250YWxSdWJiZXJC
YW5kaW5nKSk7CiB9CiAgICAgCiBib29sIFdlYlBhZ2VQcm94eTo6aG9yaXpvbnRhbFJ1YmJlckJh
bmRpbmdJc0VuYWJsZWQoKSBjb25zdApAQCAtMzY4Myw3ICszNjgzLDcgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OnNldEJhY2tncm91bmRFeHRlbmRzQmV5b25kUGFnZShib29sIGJhY2tncm91bmRFeHRl
bmRzQmV5b25kUGEKIAogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0QmFja2dyb3Vu
ZEV4dGVuZHNCZXlvbmRQYWdlKGJhY2tncm91bmRFeHRlbmRzQmV5b25kUGFnZSksIG1fd2ViUGFn
ZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRCYWNrZ3JvdW5kRXh0ZW5kc0Jl
eW9uZFBhZ2UoYmFja2dyb3VuZEV4dGVuZHNCZXlvbmRQYWdlKSk7CiB9CiAKIGJvb2wgV2ViUGFn
ZVByb3h5OjpiYWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2UoKSBjb25zdApAQCAtMzcwMCw3ICsz
NzAwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFBhZ2luYXRpb25Nb2RlKFdlYkNvcmU6OlBh
Z2luYXRpb246Ok1vZGUgbW9kZSkKIAogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0
UGFnaW5hdGlvbk1vZGUobW9kZSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpTZXRQYWdpbmF0aW9uTW9kZShtb2RlKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5
OjpzZXRQYWdpbmF0aW9uQmVoYXZlc0xpa2VDb2x1bW5zKGJvb2wgYmVoYXZlc0xpa2VDb2x1bW5z
KQpAQCAtMzcxMiw3ICszNzEyLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFBhZ2luYXRpb25C
ZWhhdmVzTGlrZUNvbHVtbnMoYm9vbCBiZWhhdmVzTGlrZUNvbHVtbnMpCiAKICAgICBpZiAoIWhh
c1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX3Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OlNldFBhZ2luYXRpb25CZWhhdmVzTGlrZUNvbHVtbnMoYmVoYXZl
c0xpa2VDb2x1bW5zKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OlNldFBhZ2luYXRpb25CZWhhdmVzTGlrZUNvbHVtbnMoYmVoYXZlc0xpa2VDb2x1bW5zKSk7CiB9
CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRQYWdlTGVuZ3RoKGRvdWJsZSBwYWdlTGVuZ3RoKQpA
QCAtMzcyNCw3ICszNzI0LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFBhZ2VMZW5ndGgoZG91
YmxlIHBhZ2VMZW5ndGgpCiAKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAg
IHJldHVybjsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFBhZ2VM
ZW5ndGgocGFnZUxlbmd0aCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpTZXRQYWdlTGVuZ3RoKHBhZ2VMZW5ndGgpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
OnNldEdhcEJldHdlZW5QYWdlcyhkb3VibGUgZ2FwKQpAQCAtMzczNiw3ICszNzM2LDcgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OnNldEdhcEJldHdlZW5QYWdlcyhkb3VibGUgZ2FwKQogCiAgICAgaWYg
KCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9wcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRHYXBCZXR3ZWVuUGFnZXMoZ2FwKSwgbV93ZWJQYWdl
SUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEdhcEJldHdlZW5QYWdlcyhnYXAp
KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldFBhZ2luYXRpb25MaW5lR3JpZEVuYWJsZWQo
Ym9vbCBsaW5lR3JpZEVuYWJsZWQpCkBAIC0zNzQ4LDcgKzM3NDgsNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6c2V0UGFnaW5hdGlvbkxpbmVHcmlkRW5hYmxlZChib29sIGxpbmVHcmlkRW5hYmxlZCkK
ICAgICAKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFBhZ2luYXRpb25MaW5lR3Jp
ZEVuYWJsZWQobGluZUdyaWRFbmFibGVkKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OlNldFBhZ2luYXRpb25MaW5lR3JpZEVuYWJsZWQobGluZUdyaWRFbmFibGVk
KSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpwYWdlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoZG91
YmxlIHNjYWxlRmFjdG9yKQpAQCAtMzc3Myw3ICszNzczLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OmZpbmRTdHJpbmdNYXRjaGVzKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBGaW5kT3B0aW9ucyBvcHRp
b25zLAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpGaW5kU3RyaW5nTWF0Y2hlcyhzdHJpbmcsIG9wdGlvbnMsIG1heE1hdGNo
Q291bnQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RmluZFN0
cmluZ01hdGNoZXMoc3RyaW5nLCBvcHRpb25zLCBtYXhNYXRjaENvdW50KSk7CiB9CiAKIHZvaWQg
V2ViUGFnZVByb3h5OjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBGaW5kT3B0aW9u
cyBvcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50LCBGdW5jdGlvbjx2b2lkIChib29sLCBD
YWxsYmFja0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQpAQCAtMzc4Miw3ICszNzgy
LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcs
IEZpbmRPcHRpb25zIG9wdGlvbnMsIHVuc2lnbmUKICAgICBpZiAoY2FsbGJhY2tGdW5jdGlvbikK
ICAgICAgICAgY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrRnVu
Y3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViUGFn
ZVByb3h5OjpmaW5kU3RyaW5nIl9zKSk7CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OkZpbmRTdHJpbmcoc3RyaW5nLCBvcHRpb25zLCBtYXhNYXRjaENvdW50LCBjYWxs
YmFja0lEKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkZpbmRT
dHJpbmcoc3RyaW5nLCBvcHRpb25zLCBtYXhNYXRjaENvdW50LCBjYWxsYmFja0lEKSk7CiB9CiAK
IHZvaWQgV2ViUGFnZVByb3h5OjpmaW5kU3RyaW5nQ2FsbGJhY2soYm9vbCBmb3VuZCwgQ2FsbGJh
Y2tJRCBjYWxsYmFja0lEKQpAQCAtMzc5NiwyMiArMzc5NiwyMiBAQCB2b2lkIFdlYlBhZ2VQcm94
eTo6ZmluZFN0cmluZ0NhbGxiYWNrKGJvb2wgZm91bmQsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkK
IAogdm9pZCBXZWJQYWdlUHJveHk6OmdldEltYWdlRm9yRmluZE1hdGNoKGludDMyX3QgbWF0Y2hJ
bmRleCkKIHsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdldEltYWdl
Rm9yRmluZE1hdGNoKG1hdGNoSW5kZXgpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6R2V0SW1hZ2VGb3JGaW5kTWF0Y2gobWF0Y2hJbmRleCkpOwogfQogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6c2VsZWN0RmluZE1hdGNoKGludDMyX3QgbWF0Y2hJbmRleCkKIHsKLSAg
ICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNlbGVjdEZpbmRNYXRjaChtYXRj
aEluZGV4KSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNlbGVj
dEZpbmRNYXRjaChtYXRjaEluZGV4KSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjppbmRpY2F0
ZUZpbmRNYXRjaChpbnQzMl90IG1hdGNoSW5kZXgpCiB7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpJbmRpY2F0ZUZpbmRNYXRjaChtYXRjaEluZGV4KSwgbV93ZWJQYWdl
SUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkluZGljYXRlRmluZE1hdGNoKG1hdGNo
SW5kZXgpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmhpZGVGaW5kVUkoKQogewotICAgIG1f
cHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SGlkZUZpbmRVSSgpLCBtX3dlYlBhZ2VJ
RCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SGlkZUZpbmRVSSgpKTsKIH0KIAogdm9p
ZCBXZWJQYWdlUHJveHk6OmNvdW50U3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmIHN0cmluZywg
RmluZE9wdGlvbnMgb3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCkKQEAgLTM4MTksNyAr
MzgxOSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpjb3VudFN0cmluZ01hdGNoZXMoY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIEZpbmRPcHRpb25zIG9wdGlvbnMsCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJv
Y2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OkNvdW50U3RyaW5nTWF0Y2hlcyhzdHJpbmcsIG9wdGlvbnMsIG1heE1hdGNoQ291
bnQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q291bnRTdHJp
bmdNYXRjaGVzKHN0cmluZywgb3B0aW9ucywgbWF4TWF0Y2hDb3VudCkpOwogfQogCiB2b2lkIFdl
YlBhZ2VQcm94eTo6cmVwbGFjZU1hdGNoZXMoVmVjdG9yPHVpbnQzMl90PiYmIG1hdGNoSW5kaWNl
cywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFRleHQsIGJvb2wgc2VsZWN0aW9uT25seSwgRnVu
Y3Rpb248dm9pZCh1aW50NjRfdCwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2spCkBA
IC0zODMwLDcgKzM4MzAsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVwbGFjZU1hdGNoZXMoVmVj
dG9yPHVpbnQzMl90PiYmIG1hdGNoSW5kaWNlcywgY29uc3QgU3RyaW5nJgogICAgIH0KIAogICAg
IGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrKSwgbV9w
cm9jZXNzLT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBhZ2VQcm94eTo6cmVw
bGFjZU1hdGNoZXMiX3MpKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OlJlcGxhY2VNYXRjaGVzKFdURk1vdmUobWF0Y2hJbmRpY2VzKSwgcmVwbGFjZW1lbnRUZXh0LCBz
ZWxlY3Rpb25Pbmx5LCBjYWxsYmFja0lEKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OlJlcGxhY2VNYXRjaGVzKFdURk1vdmUobWF0Y2hJbmRpY2VzKSwgcmVwbGFj
ZW1lbnRUZXh0LCBzZWxlY3Rpb25Pbmx5LCBjYWxsYmFja0lEKSk7CiB9CiAKIHZvaWQgV2ViUGFn
ZVByb3h5OjpsYXVuY2hJbml0aWFsUHJvY2Vzc0lmTmVjZXNzYXJ5KCkKQEAgLTM4NTUsMTQgKzM4
NTUsMTQgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZVNjcmlw
dFdvcmxkKGNvbnN0IFN0cmluZyYgc2NyaXB0LCBib28KICAgICB9CiAKICAgICBhdXRvIGNhbGxi
YWNrSUQgPSBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgbV9wcm9j
ZXNzLT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBhZ2VQcm94eTo6cnVuSmF2
YVNjcmlwdEluTWFpbkZyYW1lU2NyaXB0V29ybGQiX3MpKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OlJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZVNjcmlwdFdvcmxkKHNj
cmlwdCwgZm9yY2VVc2VyR2VzdHVyZSwgd29ybGROYW1lLCBjYWxsYmFja0lEKSwgbV93ZWJQYWdl
SUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJ1bkphdmFTY3JpcHRJbk1haW5GcmFt
ZVNjcmlwdFdvcmxkKHNjcmlwdCwgZm9yY2VVc2VyR2VzdHVyZSwgd29ybGROYW1lLCBjYWxsYmFj
a0lEKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpydW5KYXZhU2NyaXB0SW5GcmFtZShGcmFt
ZUlkZW50aWZpZXIgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiBzY3JpcHQsIGJvb2wgZm9yY2VVc2Vy
R2VzdHVyZSwgV1RGOjpGdW5jdGlvbjx2b2lkKEFQSTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKiwg
Ym9vbCBoYWRFeGNlcHRpb24sIGNvbnN0IEV4Y2VwdGlvbkRldGFpbHMmLCBDYWxsYmFja0Jhc2U6
OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewogICAgIEFTU0VSVChtYWluRnJhbWUoKS0+
ZnJhbWVJRCgpICE9IGZyYW1lSUQpOwogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tz
LnB1dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJh
Y2tncm91bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5OjpydW5KYXZhU2NyaXB0SW5GcmFtZSJfcykp
OwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UnVuSmF2YVNjcmlwdElu
RnJhbWUoZnJhbWVJRCwgc2NyaXB0LCBmb3JjZVVzZXJHZXN0dXJlLCBjYWxsYmFja0lEKSwgbV93
ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJ1bkphdmFTY3JpcHRJbkZy
YW1lKGZyYW1lSUQsIHNjcmlwdCwgZm9yY2VVc2VyR2VzdHVyZSwgY2FsbGJhY2tJRCkpOwogfQog
CiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb24o
V1RGOjpGdW5jdGlvbjx2b2lkIChjb25zdCBTdHJpbmcmLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4m
JiBjYWxsYmFja0Z1bmN0aW9uKQpAQCAtMzg3Myw3ICszODczLDcgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OmdldFJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6RnVuY3Rpb248dm9p
ZCAoY29uc3QKICAgICB9CiAgICAgCiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFja3Mu
cHV0KFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFj
a2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6OmdldFJlbmRlclRyZWVFeHRlcm5hbFJlcHJl
c2VudGF0aW9uIl9zKSk7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpH
ZXRSZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbihjYWxsYmFja0lEKSwgbV93ZWJQYWdl
SUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdldFJlbmRlclRyZWVFeHRlcm5hbFJl
cHJlc2VudGF0aW9uKGNhbGxiYWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmdldFNv
dXJjZUZvckZyYW1lKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBXVEY6OkZ1bmN0aW9uPHZvaWQgKGNv
bnN0IFN0cmluZyYsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCkBA
IC0zODg1LDcgKzM4ODUsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0U291cmNlRm9yRnJhbWUo
V2ViRnJhbWVQcm94eSogZnJhbWUsIFdURjo6RnVuY3Rpb248dm9pZCAoYwogICAgIAogICAgIGF1
dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24p
LCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5
OjpnZXRTb3VyY2VGb3JGcmFtZSJfcykpOwogICAgIG1fbG9hZERlcGVuZGVudFN0cmluZ0NhbGxi
YWNrSURzLmFkZChjYWxsYmFja0lEKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OkdldFNvdXJjZUZvckZyYW1lKGZyYW1lLT5mcmFtZUlEKCksIGNhbGxiYWNrSUQpLCBt
X3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R2V0U291cmNlRm9yRnJh
bWUoZnJhbWUtPmZyYW1lSUQoKSwgY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94
eTo6Z2V0Q29udGVudHNBc1N0cmluZyhXVEY6OkZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYs
IENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCkBAIC0zODk3LDcgKzM4
OTcsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0Q29udGVudHNBc1N0cmluZyhXVEY6OkZ1bmN0
aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYsIENhbGxiYQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tJ
RCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3Mt
PnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5OjpnZXRDb250ZW50
c0FzU3RyaW5nIl9zKSk7CiAgICAgbV9sb2FkRGVwZW5kZW50U3RyaW5nQ2FsbGJhY2tJRHMuYWRk
KGNhbGxiYWNrSUQpOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R2V0
Q29udGVudHNBc1N0cmluZyhjYWxsYmFja0lEKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OkdldENvbnRlbnRzQXNTdHJpbmcoY2FsbGJhY2tJRCkpOwogfQogCiAj
aWYgUExBVEZPUk0oQ09DT0EpCkBAIC0zOTIxLDcgKzM5MjEsNyBAQCB2b2lkIFdlYlBhZ2VQcm94
eTo6Z2V0Qnl0ZWNvZGVQcm9maWxlKFdURjo6RnVuY3Rpb248dm9pZCAoY29uc3QgU3RyaW5nJiwg
Q2FsbGJhYwogICAgIAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZN
b3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91bmRB
Y3Rpdml0eSgiV2ViUGFnZVByb3h5OjpnZXRCeXRlY29kZVByb2ZpbGUiX3MpKTsKICAgICBtX2xv
YWREZXBlbmRlbnRTdHJpbmdDYWxsYmFja0lEcy5hZGQoY2FsbGJhY2tJRCk7Ci0gICAgbV9wcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRCeXRlY29kZVByb2ZpbGUoY2FsbGJhY2tJ
RCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRCeXRlY29k
ZVByb2ZpbGUoY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0U2FtcGxp
bmdQcm9maWxlck91dHB1dChXVEY6OkZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYsIENhbGxi
YWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCkBAIC0zOTMzLDcgKzM5MzMsNyBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0U2FtcGxpbmdQcm9maWxlck91dHB1dChXVEY6OkZ1bmN0
aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYsCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9j
YWxsYmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhyb3R0
bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6OmdldFNhbXBsaW5nUHJvZmls
ZXJPdXRwdXQiX3MpKTsKICAgICBtX2xvYWREZXBlbmRlbnRTdHJpbmdDYWxsYmFja0lEcy5hZGQo
Y2FsbGJhY2tJRCk7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRT
YW1wbGluZ1Byb2ZpbGVyT3V0cHV0KGNhbGxiYWNrSUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6R2V0U2FtcGxpbmdQcm9maWxlck91dHB1dChjYWxsYmFja0lE
KSk7CiB9CiAKICNpZiBFTkFCTEUoTUhUTUwpCkBAIC0zOTQ1LDcgKzM5NDUsNyBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6Z2V0Q29udGVudHNBc01IVE1MRGF0YShGdW5jdGlvbjx2b2lkIChBUEk6OkRh
dGEqLCBDYWxsYmFja0JhcwogICAgIH0KIAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJh
Y2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigp
LmJhY2tncm91bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5OjpnZXRDb250ZW50c0FzTUhUTUxEYXRh
Il9zKSk7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRDb250ZW50
c0FzTUhUTUxEYXRhKGNhbGxiYWNrSUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6R2V0Q29udGVudHNBc01IVE1MRGF0YShjYWxsYmFja0lEKSk7CiB9CiAjZW5k
aWYKIApAQCAtMzk1Nyw3ICszOTU3LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmdldFNlbGVjdGlv
bk9yQ29udGVudHNBc1N0cmluZyhXVEY6OkZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmkKICAgICB9
CiAgICAgCiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFja3MucHV0KFdURk1vdmUoY2Fs
bGJhY2tGdW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5
KCJXZWJQYWdlUHJveHk6OmdldFNlbGVjdGlvbk9yQ29udGVudHNBc1N0cmluZyJfcykpOwotICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R2V0U2VsZWN0aW9uT3JDb250ZW50
c0FzU3RyaW5nKGNhbGxiYWNrSUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6R2V0U2VsZWN0aW9uT3JDb250ZW50c0FzU3RyaW5nKGNhbGxiYWNrSUQpKTsKIH0K
IAogdm9pZCBXZWJQYWdlUHJveHk6OmdldFNlbGVjdGlvbkFzV2ViQXJjaGl2ZURhdGEoRnVuY3Rp
b248dm9pZCAoQVBJOjpEYXRhKiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2tGdW5j
dGlvbikKQEAgLTM5NjgsNyArMzk2OCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpnZXRTZWxlY3Rp
b25Bc1dlYkFyY2hpdmVEYXRhKEZ1bmN0aW9uPHZvaWQgKEFQSTo6RGF0YSosIENhbGxiCiAgICAg
fQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNh
bGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0
eSgiV2ViUGFnZVByb3h5OjpnZXRTZWxlY3Rpb25Bc1dlYkFyY2hpdmVEYXRhIl9zKSk7Ci0gICAg
bV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRTZWxlY3Rpb25Bc1dlYkFyY2hp
dmVEYXRhKGNhbGxiYWNrSUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6R2V0U2VsZWN0aW9uQXNXZWJBcmNoaXZlRGF0YShjYWxsYmFja0lEKSk7CiB9CiAKIHZv
aWQgV2ViUGFnZVByb3h5OjpnZXRNYWluUmVzb3VyY2VEYXRhT2ZGcmFtZShXZWJGcmFtZVByb3h5
KiBmcmFtZSwgRnVuY3Rpb248dm9pZCAoQVBJOjpEYXRhKiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+
JiYgY2FsbGJhY2tGdW5jdGlvbikKQEAgLTM5NzksNyArMzk3OSw3IEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpnZXRNYWluUmVzb3VyY2VEYXRhT2ZGcmFtZShXZWJGcmFtZVByb3h5KiBmcmFtZSwgRnVu
Y3Rpb248dm9pCiAgICAgfQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tz
LnB1dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJh
Y2tncm91bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5OjpnZXRNYWluUmVzb3VyY2VEYXRhT2ZGcmFt
ZSJfcykpOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R2V0TWFpblJl
c291cmNlRGF0YU9mRnJhbWUoZnJhbWUtPmZyYW1lSUQoKSwgY2FsbGJhY2tJRCksIG1fd2ViUGFn
ZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRNYWluUmVzb3VyY2VEYXRhT2ZG
cmFtZShmcmFtZS0+ZnJhbWVJRCgpLCBjYWxsYmFja0lEKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVBy
b3h5OjpnZXRSZXNvdXJjZURhdGFGcm9tRnJhbWUoV2ViRnJhbWVQcm94eSogZnJhbWUsIEFQSTo6
VVJMKiByZXNvdXJjZVVSTCwgRnVuY3Rpb248dm9pZCAoQVBJOjpEYXRhKiwgQ2FsbGJhY2tCYXNl
OjpFcnJvcik+JiYgY2FsbGJhY2tGdW5jdGlvbikKQEAgLTM5OTAsNyArMzk5MCw3IEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpnZXRSZXNvdXJjZURhdGFGcm9tRnJhbWUoV2ViRnJhbWVQcm94eSogZnJh
bWUsIEFQSTo6VVJMKiByZXNvCiAgICAgfQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1f
Y2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90
dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5OjpnZXRSZXNvdXJjZURhdGFG
cm9tRnJhbWUiX3MpKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Okdl
dFJlc291cmNlRGF0YUZyb21GcmFtZShmcmFtZS0+ZnJhbWVJRCgpLCByZXNvdXJjZVVSTC0+c3Ry
aW5nKCksIGNhbGxiYWNrSUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6R2V0UmVzb3VyY2VEYXRhRnJvbUZyYW1lKGZyYW1lLT5mcmFtZUlEKCksIHJlc291cmNl
VVJMLT5zdHJpbmcoKSwgY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0
V2ViQXJjaGl2ZU9mRnJhbWUoV2ViRnJhbWVQcm94eSogZnJhbWUsIEZ1bmN0aW9uPHZvaWQgKEFQ
STo6RGF0YSosIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCkBAIC00
MDAxLDcgKzQwMDEsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0V2ViQXJjaGl2ZU9mRnJhbWUo
V2ViRnJhbWVQcm94eSogZnJhbWUsIEZ1bmN0aW9uPHZvaWQgKEFQSQogICAgIH0KICAgICAKICAg
ICBhdXRvIGNhbGxiYWNrSUQgPSBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFja0Z1bmN0
aW9uKSwgbV9wcm9jZXNzLT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBhZ2VQ
cm94eTo6Z2V0V2ViQXJjaGl2ZU9mRnJhbWUiX3MpKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OkdldFdlYkFyY2hpdmVPZkZyYW1lKGZyYW1lLT5mcmFtZUlEKCksIGNh
bGxiYWNrSUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R2V0
V2ViQXJjaGl2ZU9mRnJhbWUoZnJhbWUtPmZyYW1lSUQoKSwgY2FsbGJhY2tJRCkpOwogfQogCiB2
b2lkIFdlYlBhZ2VQcm94eTo6Zm9yY2VSZXBhaW50KFJlZlB0cjxWb2lkQ2FsbGJhY2s+JiYgY2Fs
bGJhY2spCkBAIC00MDM1LDcgKzQwMzUsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Zm9yY2VSZXBh
aW50KFJlZlB0cjxWb2lkQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiAKICAgICBhdXRvIGNhbGxiYWNr
SUQgPSBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShkaWRGb3JjZVJlcGFpbnRDYWxsYmFjayksIG1f
cHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6OmZv
cmNlUmVwYWludCJfcykpOwogICAgIG1fZHJhd2luZ0FyZWEtPndhaXRGb3JCYWNraW5nU3RvcmVV
cGRhdGVPbk5leHRQYWludCgpOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6Rm9yY2VSZXBhaW50KGNhbGxiYWNrSUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6Rm9yY2VSZXBhaW50KGNhbGxiYWNrSUQpKTsKIH0KIAogc3RhdGljIE9w
dGlvblNldDxJUEM6OlNlbmRPcHRpb24+IHByaW50aW5nU2VuZE9wdGlvbnMoYm9vbCBpc1BlcmZv
cm1pbmdET01QcmludE9wZXJhdGlvbikKQEAgLTQwNjEsNyArNDA2MSw3IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpwcmVmZXJlbmNlc0RpZENoYW5nZSgpCiAgICAgLy8gZXZlbiBpZiBub3RoaW5nIGNo
YW5nZWQgaW4gVUkgcHJvY2Vzcywgc28gdGhhdCBvdmVycmlkZXMgZ2V0IHJlbW92ZWQuCiAKICAg
ICAvLyBQcmVmZXJlbmNlcyBuZWVkIHRvIGJlIHVwZGF0ZWQgZHVyaW5nIHN5bmNocm9ub3VzIHBy
aW50aW5nIHRvIG1ha2UgInByaW50IGJhY2tncm91bmRzIiBwcmVmZXJlbmNlIHdvcmsgd2hlbiB0
b2dnbGVkIGZyb20gYSBwcmludCBkaWFsb2cgY2hlY2tib3guCi0gICAgbV9wcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpQcmVmZXJlbmNlc0RpZENoYW5nZShwcmVmZXJlbmNlc1N0b3Jl
KCkpLCBtX3dlYlBhZ2VJRCwgcHJpbnRpbmdTZW5kT3B0aW9ucyhtX2lzUGVyZm9ybWluZ0RPTVBy
aW50T3BlcmF0aW9uKSk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UHJlZmVyZW5jZXNE
aWRDaGFuZ2UocHJlZmVyZW5jZXNTdG9yZSgpKSwgcHJpbnRpbmdTZW5kT3B0aW9ucyhtX2lzUGVy
Zm9ybWluZ0RPTVByaW50T3BlcmF0aW9uKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRD
cmVhdGVNYWluRnJhbWUoRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQpCkBAIC01MTA1LDcgKzUxMDUs
NyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKEZy
YW1lSWRlbnRpZmllciBmcmFtZUlELCBTZWN1cgogICAgICAgICBBU1NFUlRfVU5VU0VEKHNhZmVC
cm93c2luZ1dhcm5pbmcsICFzYWZlQnJvd3NpbmdXYXJuaW5nKTsKIAogICAgICAgICBhdXRvIHNl
bmRlciA9IFBvbGljeURlY2lzaW9uU2VuZGVyOjpjcmVhdGUoaWRlbnRpZmllciwgW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBmcmFtZUlELCBsaXN0ZW5lcklE
XSAoYXV0by4uLiBhcmdzKSB7Ci0gICAgICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OkRpZFJlY2VpdmVQb2xpY3lEZWNpc2lvbihmcmFtZUlELCBsaXN0ZW5lcklELCBh
cmdzLi4uKSwgbV93ZWJQYWdlSUQpOworICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6RGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uKGZyYW1lSUQsIGxpc3RlbmVySUQsIGFyZ3MuLi4p
KTsKICAgICAgICAgfSk7CiAKICAgICAgICAgcmVjZWl2ZWRQb2xpY3lEZWNpc2lvbihwb2xpY3lB
Y3Rpb24sIG51bGxwdHIsIFdURjo6bnVsbG9wdCwgV1RGTW92ZShzZW5kZXIpKTsKQEAgLTUxOTEs
NyArNTE5MSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojp3aWxsU3VibWl0Rm9ybShGcmFtZUlkZW50
aWZpZXIgZnJhbWVJRCwgRnJhbWVJZGVudGlmaWVyIHNvdXJjCiAgICAgTUVTU0FHRV9DSEVDSyht
X3Byb2Nlc3MsIHNvdXJjZUZyYW1lKTsKIAogICAgIG1fZm9ybUNsaWVudC0+d2lsbFN1Ym1pdEZv
cm0oKnRoaXMsICpmcmFtZSwgKnNvdXJjZUZyYW1lLCB0ZXh0RmllbGRWYWx1ZXMsIG1fcHJvY2Vz
cy0+dHJhbnNmb3JtSGFuZGxlc1RvT2JqZWN0cyh1c2VyRGF0YS5vYmplY3QoKSkuZ2V0KCksIFt0
aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGZyYW1lSUQsIGxpc3RlbmVySURd
KCkgewotICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNvbnRpbnVl
V2lsbFN1Ym1pdEZvcm0oZnJhbWVJRCwgbGlzdGVuZXJJRCksIG1fd2ViUGFnZUlEKTsKKyAgICAg
ICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q29udGludWVXaWxsU3VibWl0Rm9ybShmcmFtZUlE
LCBsaXN0ZW5lcklEKSk7CiAgICAgfSk7CiB9CiAKQEAgLTU2NTAsNyArNTY1MCw3IEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpydW5PcGVuUGFuZWwoRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIFNlY3Vy
aXR5T3JpZ2luRGF0YSYmIGZyCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2hvd1NoYXJlU2hlZXQoY29u
c3QgU2hhcmVEYXRhV2l0aFBhcnNlZFVSTCYgc2hhcmVEYXRhLCBTaGFyZVNoZWV0Q2FsbGJhY2tJ
RCBjYWxsYmFja0lEKQogewogICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+IGNvbXBs
ZXRpb25IYW5kbGVyID0gW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2Fs
bGJhY2tJRF0gKGJvb2wgYWNjZXNzKSB7Ci0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6RGlkQ29tcGxldGVTaGFyZVNoZWV0KGFjY2VzcywgY2FsbGJhY2tJRCksIG1f
d2ViUGFnZUlEKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkQ29tcGxldGVT
aGFyZVNoZWV0KGFjY2VzcywgY2FsbGJhY2tJRCkpOwogICAgIH07CiAgICAgCiAgICAgcGFnZUNs
aWVudCgpLnNob3dTaGFyZVNoZWV0KHNoYXJlRGF0YSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwpAQCAtNTY4Miw3ICs1NjgyLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldE1lZGlhVm9s
dW1lKGZsb2F0IHZvbHVtZSkKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAg
IHJldHVybjsKICAgICAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNl
dE1lZGlhVm9sdW1lKHZvbHVtZSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpTZXRNZWRpYVZvbHVtZSh2b2x1bWUpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
OnNldE11dGVkKFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6Ok11dGVkU3RhdGVGbGFncyBzdGF0ZSkK
QEAgLTU2OTgsNyArNTY5OCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRNdXRlZChXZWJDb3Jl
OjpNZWRpYVByb2R1Y2VyOjpNdXRlZFN0YXRlRmxhZ3Mgc3RhdGUpCiAgICAgICAgIFVzZXJNZWRp
YVByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5tdXRlQ2FwdHVyZU1lZGlhU3RyZWFtc0V4Y2Vw
dEluKCp0aGlzKTsKICNlbmRpZgogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpTZXRNdXRlZChzdGF0ZSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpTZXRNdXRlZChzdGF0ZSkpOwogICAgIGFjdGl2aXR5U3RhdGVEaWRDaGFuZ2UoeyBB
Y3Rpdml0eVN0YXRlOjpJc0F1ZGlibGUsIEFjdGl2aXR5U3RhdGU6OklzQ2FwdHVyaW5nTWVkaWEg
fSk7CiB9CiAKQEAgLTU3MjAsNyArNTcyMCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzdG9wTWVk
aWFDYXB0dXJlKCkKICAgICAgICAgcmV0dXJuOwogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkK
LSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlN0b3BNZWRpYUNhcHR1cmUo
KSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlN0b3BNZWRpYUNh
cHR1cmUoKSk7CiAjZW5kaWYKIH0KIApAQCAtNTcyOSw3ICs1NzI5LDcgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OnN0b3BBbGxNZWRpYVBsYXliYWNrKCkKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNz
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6U3RvcEFsbE1lZGlhUGxheWJhY2soKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OlN0b3BBbGxNZWRpYVBsYXliYWNrKCkpOwogfQogCiB2b2lkIFdlYlBh
Z2VQcm94eTo6c3VzcGVuZEFsbE1lZGlhUGxheWJhY2soKQpAQCAtNTc0MSw3ICs1NzQxLDcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnN1c3BlbmRBbGxNZWRpYVBsYXliYWNrKCkKICAgICBpZiAoIWhh
c1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6U3VzcGVuZEFsbE1lZGlhUGxheWJhY2soKSwgbV93ZWJQYWdl
SUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlN1c3BlbmRBbGxNZWRpYVBsYXliYWNr
KCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6cmVzdW1lQWxsTWVkaWFQbGF5YmFjaygpCkBA
IC01NzUzLDcgKzU3NTMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVzdW1lQWxsTWVkaWFQbGF5
YmFjaygpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJlc3VtZUFsbE1lZGlhUGxh
eWJhY2soKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJlc3Vt
ZUFsbE1lZGlhUGxheWJhY2soKSk7CiB9CiAKICNpZiBFTkFCTEUoTUVESUFfU0VTU0lPTikKQEAg
LTU3NjIsNyArNTc2Miw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVNZWRpYUV2ZW50KE1l
ZGlhRXZlbnRUeXBlIGV2ZW50VHlwZSkKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAg
ICAgICAgIHJldHVybjsKICAgICAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OkhhbmRsZU1lZGlhRXZlbnQoZXZlbnRUeXBlKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OkhhbmRsZU1lZGlhRXZlbnQoZXZlbnRUeXBlKTsKIH0KIAogdm9p
ZCBXZWJQYWdlUHJveHk6OnNldFZvbHVtZU9mTWVkaWFFbGVtZW50KGRvdWJsZSB2b2x1bWUsIHVp
bnQ2NF90IGVsZW1lbnRJRCkKQEAgLTU3NzAsNyArNTc3MCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5
OjpzZXRWb2x1bWVPZk1lZGlhRWxlbWVudChkb3VibGUgdm9sdW1lLCB1aW50NjRfdCBlbGVtZW50
SUQpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFZvbHVtZU9mTWVkaWFFbGVt
ZW50KHZvbHVtZSwgZWxlbWVudElEKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OlNldFZvbHVtZU9mTWVkaWFFbGVtZW50KHZvbHVtZSwgZWxlbWVudElEKSk7CiB9
CiAjZW5kaWYKIApAQCAtNTc4NCw3ICs1Nzg0LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldE1h
eVN0YXJ0TWVkaWFXaGVuSW5XaW5kb3coYm9vbCBtYXlTdGFydE1lZGlhKQogICAgIGlmICghaGFz
UnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcHJvY2VzcygpLnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OlNldE1heVN0YXJ0TWVkaWFXaGVuSW5XaW5kb3cobWF5U3RhcnRN
ZWRpYSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRNYXlT
dGFydE1lZGlhV2hlbkluV2luZG93KG1heVN0YXJ0TWVkaWEpKTsKIH0KIAogdm9pZCBXZWJQYWdl
UHJveHk6OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5JiBkb3dubG9hZCkKQEAg
LTU4MzEsNyArNTgzMSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDaG9vc2VDb2xvcihjb25z
dCBXZWJDb3JlOjpDb2xvciYgY29sb3IpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OkRpZENob29zZUNvbG9yKGNvbG9yKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OkRpZENob29zZUNvbG9yKGNvbG9yKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5
OjpkaWRFbmRDb2xvclBpY2tlcigpCkBAIC01ODQwLDcgKzU4NDAsNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6ZGlkRW5kQ29sb3JQaWNrZXIoKQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpEaWRFbmRDb2xvclBpY2tlcigpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6RGlkRW5kQ29sb3JQaWNrZXIoKSk7CiB9CiAjZW5kaWYKIApAQCAtNTg3NCw3ICs1
ODc0LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENsb3NlU3VnZ2VzdGlvbnMoKQogICAgICAg
ICByZXR1cm47CiAKICAgICBtX2RhdGFMaXN0U3VnZ2VzdGlvbnNEcm9wZG93biA9IG51bGxwdHI7
Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRDbG9zZVN1Z2dlc3Rp
b25zKCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRDbG9z
ZVN1Z2dlc3Rpb25zKCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkU2VsZWN0T3B0aW9u
KGNvbnN0IFN0cmluZyYgc2VsZWN0ZWRPcHRpb24pCkBAIC01ODgyLDcgKzU4ODIsNyBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6ZGlkU2VsZWN0T3B0aW9uKGNvbnN0IFN0cmluZyYgc2VsZWN0ZWRPcHRp
b24pCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZFNlbGVjdERhdGFMaXN0T3B0
aW9uKHNlbGVjdGVkT3B0aW9uKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OkRpZFNlbGVjdERhdGFMaXN0T3B0aW9uKHNlbGVjdGVkT3B0aW9uKSk7CiB9CiAKICNl
bmRpZgpAQCAtNTkzNSw3ICs1OTM1LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldEFsbG93c01l
ZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFjayhib29sIGFsbG93cykKICAgICAgICAgcmV0dXJuOwog
ICAgIG1fYWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrID0gYWxsb3dzOwogCi0gICAg
bV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRBbGxvd3NNZWRpYURvY3VtZW50
SW5saW5lUGxheWJhY2soYWxsb3dzKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OlNldEFsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFjayhhbGxvd3MpKTsK
IH0KICNlbmRpZgogCkBAIC02MTIyLDEyICs2MTIyLDEyIEBAIHVpbnQ2NF90IFdlYlBhZ2VQcm94
eTo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAogCiB2b2lkIFdlYlBhZ2VQcm94
eTo6dmFsdWVDaGFuZ2VkRm9yUG9wdXBNZW51KFdlYlBvcHVwTWVudVByb3h5KiwgaW50MzJfdCBu
ZXdTZWxlY3RlZEluZGV4KQogewotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6RGlkQ2hhbmdlU2VsZWN0ZWRJbmRleEZvckFjdGl2ZVBvcHVwTWVudShuZXdTZWxlY3RlZElu
ZGV4KSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZENoYW5n
ZVNlbGVjdGVkSW5kZXhGb3JBY3RpdmVQb3B1cE1lbnUobmV3U2VsZWN0ZWRJbmRleCkpOwogfQog
CiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0VGV4dEZyb21JdGVtRm9yUG9wdXBNZW51KFdlYlBvcHVw
TWVudVByb3h5KiwgaW50MzJfdCBpbmRleCkKIHsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OlNldFRleHRGb3JBY3RpdmVQb3B1cE1lbnUoaW5kZXgpLCBtX3dlYlBhZ2VJ
RCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0VGV4dEZvckFjdGl2ZVBvcHVwTWVu
dShpbmRleCkpOwogfQogCiBib29sIFdlYlBhZ2VQcm94eTo6aXNQcm9jZXNzaW5nS2V5Ym9hcmRF
dmVudHMoKSBjb25zdApAQCAtNjE2MiwxMyArNjE2MiwxMyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
cG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIEFQ
STo6TwogICAgIC8vIEZvciBiYWNrd2FyZC1jb21wYXRpYmlsaXR5LCBtYWtlIHN1cmUgd2UgbGF1
bmNoIHRoZSBpbml0aWFsIHByb2Nlc3MgaWYgdGhlIGNsaWVudCBhc2tzIHRvIHBvc3QgYSBtZXNz
YWdlIHRvIGl0cyBpbmplY3RlZCBidW5kbGUgYmVmb3JlIGRvaW5nIGEgbG9hZC4KICAgICBsYXVu
Y2hJbml0aWFsUHJvY2Vzc0lmTmVjZXNzYXJ5KCk7CiAKLSAgICBwcm9jZXNzKCkuc2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6UG9zdEluamVjdGVkQnVuZGxlTWVzc2FnZShtZXNzYWdlTmFtZSwgVXNl
ckRhdGEocHJvY2VzcygpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXMobWVzc2FnZUJvZHkpLmdl
dCgpKSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQb3N0SW5q
ZWN0ZWRCdW5kbGVNZXNzYWdlKG1lc3NhZ2VOYW1lLCBVc2VyRGF0YShwcm9jZXNzKCkudHJhbnNm
b3JtT2JqZWN0c1RvSGFuZGxlcyhtZXNzYWdlQm9keSkuZ2V0KCkpKSk7CiB9CiAKICNpZiBQTEFU
Rk9STShHVEspCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZmFpbGVkVG9TaG93UG9wdXBNZW51KCkKIHsK
LSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkZhaWxlZFRvU2hvd1BvcHVw
TWVudSgpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RmFpbGVk
VG9TaG93UG9wdXBNZW51KCkpOwogfQogI2VuZGlmCiAKQEAgLTYyMjEsNyArNjIyMSw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpzaG93Q29udGV4dE1lbnUoQ29udGV4dE1lbnVDb250ZXh0RGF0YSYm
IGNvbnRleHRNZW51Q29udGV4dERhCiAgICAgLy8gY2FuIGhhbmcgdGhlIHBhZ2UgLyBXZWJEcml2
ZXIgdGVzdC4gUHJldGVuZCB0byBzaG93IGFuZCBpbW1lZGlhdGVseSBkaXNtaXNzIHRoZSBjb250
ZXh0IG1lbnUuCiAgICAgaWYgKGF1dG8qIGF1dG9tYXRpb25TZXNzaW9uID0gcHJvY2VzcygpLnBy
b2Nlc3NQb29sKCkuYXV0b21hdGlvblNlc3Npb24oKSkgewogICAgICAgICBpZiAobV9jb250cm9s
bGVkQnlBdXRvbWF0aW9uICYmIGF1dG9tYXRpb25TZXNzaW9uLT5pc1NpbXVsYXRpbmdVc2VySW50
ZXJhY3Rpb24oKSkgewotICAgICAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpDb250ZXh0TWVudUhpZGRlbigpLCBtX3dlYlBhZ2VJRCk7CisgICAgICAgICAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpDb250ZXh0TWVudUhpZGRlbigpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgIH0KQEAgLTYyNDQsNyArNjI0NCw3IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpzaG93Q29udGV4dE1lbnUoQ29udGV4dE1lbnVDb250ZXh0RGF0YSYmIGNvbnRleHRN
ZW51Q29udGV4dERhCiAgICAgbV9hY3RpdmVDb250ZXh0TWVudS0+c2hvdygpOwogCiAgICAgLy8g
Tm8gbWF0dGVyIHRoZSByZXN1bHQgb2YgaW50ZXJuYWxTaG93Q29udGV4dE1lbnUsIGFsd2F5cyBu
b3RpZnkgdGhlIFdlYlByb2Nlc3MgdGhhdCB0aGUgbWVudSBpcyBoaWRkZW4gc28gaXQgc3RhcnRz
IGhhbmRsaW5nIG1vdXNlIGV2ZW50cyBhZ2Fpbi4KLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OkNvbnRleHRNZW51SGlkZGVuKCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpDb250ZXh0TWVudUhpZGRlbigpKTsKIH0KIAogdm9pZCBXZWJQ
YWdlUHJveHk6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKGNvbnN0IFdlYkNvbnRleHRNZW51SXRl
bURhdGEmIGl0ZW0pCkBAIC02MzIyLDEyICs2MzIyLDEyIEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpj
b250ZXh0TWVudUl0ZW1TZWxlY3RlZChjb25zdCBXZWJDb250ZXh0TWVudUl0ZW1EYXRhJiBpdGVt
KQogICAgIGlmIChpdGVtLmFjdGlvbigpID09IENvbnRleHRNZW51SXRlbVRhZ0xlYXJuU3BlbGxp
bmcgfHwgaXRlbS5hY3Rpb24oKSA9PSBDb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVTcGVsbGluZykK
ICAgICAgICAgKyttX3BlbmRpbmdMZWFybk9ySWdub3JlV29yZE1lc3NhZ2VDb3VudDsKIAotICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkU2VsZWN0SXRlbUZyb21BY3Rp
dmVDb250ZXh0TWVudShpdGVtKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OkRpZFNlbGVjdEl0ZW1Gcm9tQWN0aXZlQ29udGV4dE1lbnUoaXRlbSkpOwogfQogCiB2
b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlQ29udGV4dE1lbnVLZXlFdmVudCgpCiB7Ci0gICAgbV9w
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDb250ZXh0TWVudUZvcktleUV2ZW50KCks
IG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDb250ZXh0TWVudUZv
cktleUV2ZW50KCkpOwogfQogI2VuZGlmIC8vIEVOQUJMRShDT05URVhUX01FTlVTKQogCkBAIC02
MzQzLDEwICs2MzQzLDEwIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDaG9vc2VGaWxlc0Zvck9w
ZW5QYW5lbFdpdGhEaXNwbGF5U3RyaW5nQW5kSWNvbihjb25zdCBWZWN0CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBmaWxlVVJMcy5zaXplKCk7ICsraSkKICAgICAgICAgU2FuZGJveEV4dGVu
c2lvbjo6Y3JlYXRlSGFuZGxlKGZpbGVVUkxzW2ldLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpS
ZWFkT25seSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZXNbaV0pOwogCi0gICAgbV9wcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpFeHRlbmRTYW5kYm94Rm9yRmlsZXNGcm9tT3BlblBhbmVs
KHNhbmRib3hFeHRlbnNpb25IYW5kbGVzKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OkV4dGVuZFNhbmRib3hGb3JGaWxlc0Zyb21PcGVuUGFuZWwoc2FuZGJveEV4
dGVuc2lvbkhhbmRsZXMpKTsKICNlbmRpZgogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpEaWRDaG9vc2VGaWxlc0Zvck9wZW5QYW5lbFdpdGhEaXNwbGF5U3RyaW5nQW5k
SWNvbihmaWxlVVJMcywgZGlzcGxheVN0cmluZywgaWNvbkRhdGEgPyBpY29uRGF0YS0+ZGF0YVJl
ZmVyZW5jZSgpIDogSVBDOjpEYXRhUmVmZXJlbmNlKCkpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkQ2hvb3NlRmlsZXNGb3JPcGVuUGFuZWxXaXRoRGlzcGxh
eVN0cmluZ0FuZEljb24oZmlsZVVSTHMsIGRpc3BsYXlTdHJpbmcsIGljb25EYXRhID8gaWNvbkRh
dGEtPmRhdGFSZWZlcmVuY2UoKSA6IElQQzo6RGF0YVJlZmVyZW5jZSgpKSk7CiAKICAgICBtX29w
ZW5QYW5lbFJlc3VsdExpc3RlbmVyLT5pbnZhbGlkYXRlKCk7CiAgICAgbV9vcGVuUGFuZWxSZXN1
bHRMaXN0ZW5lciA9IG51bGxwdHI7CkBAIC02MzcxLDEwICs2MzcxLDEwIEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpkaWRDaG9vc2VGaWxlc0Zvck9wZW5QYW5lbChjb25zdCBWZWN0b3I8U3RyaW5nPiYg
ZmlsZVVSTHMpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OkV4dGVuZFNhbmRib3hGb3JGaWxlc0Zyb21PcGVuUGFuZWwoc2FuZGJveEV4
dGVuc2lvbkhhbmRsZXMpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6RXh0ZW5kU2FuZGJveEZvckZpbGVzRnJvbU9wZW5QYW5lbChzYW5kYm94RXh0ZW5zaW9uSGFu
ZGxlcykpOwogI2VuZGlmCiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OkRpZENob29zZUZpbGVzRm9yT3BlblBhbmVsKGZpbGVVUkxzKSwgbV93ZWJQYWdlSUQpOworICAg
IHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZENob29zZUZpbGVzRm9yT3BlblBhbmVsKGZpbGVV
UkxzKSk7CiAKICAgICBtX29wZW5QYW5lbFJlc3VsdExpc3RlbmVyLT5pbnZhbGlkYXRlKCk7CiAg
ICAgbV9vcGVuUGFuZWxSZXN1bHRMaXN0ZW5lciA9IG51bGxwdHI7CkBAIC02Mzg1LDcgKzYzODUs
NyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ2FuY2VsRm9yT3BlblBhbmVsKCkKICAgICBpZiAo
IWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkQ2FuY2VsRm9yT3BlblBhbmVsKCksIG1fd2ViUGFn
ZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRDYW5jZWxGb3JPcGVuUGFuZWwo
KSk7CiAgICAgCiAgICAgbV9vcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci0+aW52YWxpZGF0ZSgpOwog
ICAgIG1fb3BlblBhbmVsUmVzdWx0TGlzdGVuZXIgPSBudWxscHRyOwpAQCAtNjM5Myw3ICs2Mzkz
LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENhbmNlbEZvck9wZW5QYW5lbCgpCiAKIHZvaWQg
V2ViUGFnZVByb3h5OjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNl
bGVjdGlvbikKIHsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkFkdmFu
Y2VUb05leHRNaXNzcGVsbGluZyhzdGFydEJlZm9yZVNlbGVjdGlvbiksIG1fd2ViUGFnZUlEKTsK
KyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpBZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoc3Rh
cnRCZWZvcmVTZWxlY3Rpb24pKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmNoYW5nZVNwZWxs
aW5nVG9Xb3JkKGNvbnN0IFN0cmluZyYgd29yZCkKQEAgLTY0MDEsNyArNjQwMSw3IEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpjaGFuZ2VTcGVsbGluZ1RvV29yZChjb25zdCBTdHJpbmcmIHdvcmQpCiAg
ICAgaWYgKHdvcmQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNoYW5nZVNwZWxsaW5nVG9Xb3JkKHdvcmQpLCBtX3dl
YlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q2hhbmdlU3BlbGxpbmdUb1dv
cmQod29yZCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6cmVnaXN0ZXJFZGl0Q29tbWFuZChS
ZWY8V2ViRWRpdENvbW1hbmRQcm94eT4mJiBjb21tYW5kUHJveHksIFVuZG9PclJlZG8gdW5kb09y
UmVkbykKQEAgLTY0MjAsNyArNjQyMCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZW1vdmVFZGl0
Q29tbWFuZChXZWJFZGl0Q29tbWFuZFByb3h5JiBjb21tYW5kKQogCiAgICAgaWYgKCFoYXNSdW5u
aW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpEaWRSZW1vdmVFZGl0Q29tbWFuZChjb21tYW5kLmNvbW1hbmRJRCgpKSwg
bV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZFJlbW92ZUVkaXRD
b21tYW5kKGNvbW1hbmQuY29tbWFuZElEKCkpKTsKIH0KIAogYm9vbCBXZWJQYWdlUHJveHk6OmNh
blVuZG8oKQpAQCAtNjUwOSwxMiArNjUwOSwxMiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVxdWVz
dENoZWNraW5nT2ZTdHJpbmcodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBUZXh0Q2hlY2tpbgog
CiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmluaXNoQ2hlY2tpbmdUZXh0KHVpbnQ2NF90IHJlcXVl
c3RJRCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdCkK
IHsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZEZpbmlzaENoZWNr
aW5nVGV4dChyZXF1ZXN0SUQsIHJlc3VsdCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpEaWRGaW5pc2hDaGVja2luZ1RleHQocmVxdWVzdElELCByZXN1bHQpKTsK
IH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmRpZENhbmNlbENoZWNraW5nVGV4dCh1aW50NjRfdCBy
ZXF1ZXN0SUQpCiB7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRD
YW5jZWxDaGVja2luZ1RleHQocmVxdWVzdElEKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OkRpZENhbmNlbENoZWNraW5nVGV4dChyZXF1ZXN0SUQpKTsKIH0KIC8v
IE90aGVyCiAKQEAgLTY2NTEsNyArNjY1MSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRSZWNl
aXZlRXZlbnQodWludDMyX3Qgb3BhcXVlVHlwZSwgYm9vbCBoYW5kbGVkKQogICAgICAgICBib29s
IGNhblByb2Nlc3NNb3JlS2V5RXZlbnRzID0gIW1fa2V5RXZlbnRRdWV1ZS5pc0VtcHR5KCk7CiAg
ICAgICAgIGlmIChjYW5Qcm9jZXNzTW9yZUtleUV2ZW50cykgewogICAgICAgICAgICAgTE9HKEtl
eUhhbmRsaW5nLCAiIFVJIHByb2Nlc3M6IHNlbnQga2V5RXZlbnQgZnJvbSBkaWRSZWNlaXZlRXZl
bnQiKTsKLSAgICAgICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6S2V5
RXZlbnQobV9rZXlFdmVudFF1ZXVlLmZpcnN0KCkpLCBtX3dlYlBhZ2VJRCk7CisgICAgICAgICAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpLZXlFdmVudChtX2tleUV2ZW50UXVldWUuZmlyc3Qo
KSkpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVGhlIGNhbGwgdG8gZG9uZVdpdGhLZXlFdmVu
dCBtYXkgY2xvc2UgdGhpcyBXZWJQYWdlLgpAQCAtNzU2OSw3ICs3NTY5LDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OmJhY2tGb3J3YXJkQ2xlYXIoKQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2FtZXBh
ZEFjdGl2aXR5KGNvbnN0IFZlY3RvcjxHYW1lcGFkRGF0YT4mIGdhbWVwYWREYXRhcywgYm9vbCBz
aG91bGRNYWtlR2FtZXBhZHNWaXNpYmxlKQogewotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6R2FtZXBhZEFjdGl2aXR5KGdhbWVwYWREYXRhcywgc2hvdWxkTWFrZUdhbWVw
YWRzVmlzaWJsZSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpH
YW1lcGFkQWN0aXZpdHkoZ2FtZXBhZERhdGFzLCBzaG91bGRNYWtlR2FtZXBhZHNWaXNpYmxlKSk7
CiB9CiAKICNlbmRpZgpAQCAtNzg3NCw3ICs3ODc0LDcgQEAgYm9vbCBXZWJQYWdlUHJveHk6Ondp
bGxIYW5kbGVIb3Jpem9udGFsU2Nyb2xsRXZlbnRzKCkgY29uc3QKIAogdm9pZCBXZWJQYWdlUHJv
eHk6OnVwZGF0ZVdlYnNpdGVQb2xpY2llcyhXZWJzaXRlUG9saWNpZXNEYXRhJiYgd2Vic2l0ZVBv
bGljaWVzKQogewotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6VXBkYXRl
V2Vic2l0ZVBvbGljaWVzKHdlYnNpdGVQb2xpY2llcyksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpVcGRhdGVXZWJzaXRlUG9saWNpZXMod2Vic2l0ZVBvbGljaWVz
KSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3Rv
bUNvbnRlbnRQcm92aWRlcihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25zdCBJ
UEM6OkRhdGFSZWZlcmVuY2UmIGRhdGFSZWZlcmVuY2UpCkBAIC03ODg0LDcgKzc4ODQsNyBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21Db250ZW50UHJv
dmlkZXIoY29uc3QgU3RyaW5nJiBzdQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6YmFja0ZvcndhcmRS
ZW1vdmVkSXRlbShjb25zdCBCYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyJiBpdGVtSUQpCiB7Ci0g
ICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRSZW1vdmVCYWNrRm9yd2Fy
ZEl0ZW0oaXRlbUlEKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OkRpZFJlbW92ZUJhY2tGb3J3YXJkSXRlbShpdGVtSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJv
eHk6OnNldENhblJ1bk1vZGFsKGJvb2wgY2FuUnVuTW9kYWwpCkBAIC03ODk3LDcgKzc4OTcsNyBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Q2FuUnVuTW9kYWwoYm9vbCBjYW5SdW5Nb2RhbCkKICAg
ICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0Q2FuUnVuTW9kYWwobV9jYW5SdW5Nb2Rh
bCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRDYW5SdW5N
b2RhbChtX2NhblJ1bk1vZGFsKSk7CiB9CiAKIGJvb2wgV2ViUGFnZVByb3h5OjpjYW5SdW5Nb2Rh
bCgpCkBAIC03OTExLDcgKzc5MTEsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6YmVnaW5QcmludGlu
ZyhXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgUHJpbnRJbmZvJiBwcmludEluZgogICAgICAg
ICByZXR1cm47CiAKICAgICBtX2lzSW5QcmludGluZ01vZGUgPSB0cnVlOwotICAgIG1fcHJvY2Vz
cy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6QmVnaW5QcmludGluZyhmcmFtZS0+ZnJhbWVJRCgp
LCBwcmludEluZm8pLCBtX3dlYlBhZ2VJRCwgcHJpbnRpbmdTZW5kT3B0aW9ucyhtX2lzUGVyZm9y
bWluZ0RPTVByaW50T3BlcmF0aW9uKSk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6QmVn
aW5QcmludGluZyhmcmFtZS0+ZnJhbWVJRCgpLCBwcmludEluZm8pLCBwcmludGluZ1NlbmRPcHRp
b25zKG1faXNQZXJmb3JtaW5nRE9NUHJpbnRPcGVyYXRpb24pKTsKIH0KIAogdm9pZCBXZWJQYWdl
UHJveHk6OmVuZFByaW50aW5nKCkKQEAgLTc5MjAsNyArNzkyMCw3IEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjplbmRQcmludGluZygpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1faXNJblByaW50aW5n
TW9kZSA9IGZhbHNlOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RW5k
UHJpbnRpbmcoKSwgbV93ZWJQYWdlSUQsIHByaW50aW5nU2VuZE9wdGlvbnMobV9pc1BlcmZvcm1p
bmdET01QcmludE9wZXJhdGlvbikpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkVuZFBy
aW50aW5nKCksIHByaW50aW5nU2VuZE9wdGlvbnMobV9pc1BlcmZvcm1pbmdET01QcmludE9wZXJh
dGlvbikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Y29tcHV0ZVBhZ2VzRm9yUHJpbnRpbmco
V2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IFByaW50SW5mbyYgcHJpbnRJbmZvLCBSZWY8Q29t
cHV0ZWRQYWdlc0NhbGxiYWNrPiYmIGNhbGxiYWNrKQpAQCAtNzkzMyw3ICs3OTMzLDcgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OmNvbXB1dGVQYWdlc0ZvclByaW50aW5nKFdlYkZyYW1lUHJveHkqIGZy
YW1lLCBjb25zdCBQcmludEluZm8KICAgICBhdXRvIGNhbGxiYWNrSUQgPSBjYWxsYmFjay0+Y2Fs
bGJhY2tJRCgpOwogICAgIG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAg
bV9pc0luUHJpbnRpbmdNb2RlID0gdHJ1ZTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OkNvbXB1dGVQYWdlc0ZvclByaW50aW5nKGZyYW1lLT5mcmFtZUlEKCksIHByaW50
SW5mbywgY2FsbGJhY2tJRCksIG1fd2ViUGFnZUlELCBwcmludGluZ1NlbmRPcHRpb25zKG1faXNQ
ZXJmb3JtaW5nRE9NUHJpbnRPcGVyYXRpb24pKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpDb21wdXRlUGFnZXNGb3JQcmludGluZyhmcmFtZS0+ZnJhbWVJRCgpLCBwcmludEluZm8sIGNh
bGxiYWNrSUQpLCBwcmludGluZ1NlbmRPcHRpb25zKG1faXNQZXJmb3JtaW5nRE9NUHJpbnRPcGVy
YXRpb24pKTsKIH0KIAogI2lmIFBMQVRGT1JNKENPQ09BKQpAQCAtNzk0Niw3ICs3OTQ2LDcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OmRyYXdSZWN0VG9JbWFnZShXZWJGcmFtZVByb3h5KiBmcmFtZSwg
Y29uc3QgUHJpbnRJbmZvJiBwcmludEkKICAgICAKICAgICBhdXRvIGNhbGxiYWNrSUQgPSBjYWxs
YmFjay0+Y2FsbGJhY2tJRCgpOwogICAgIG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNr
KSk7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEcmF3UmVjdFRvSW1h
Z2UoZnJhbWUtPmZyYW1lSUQoKSwgcHJpbnRJbmZvLCByZWN0LCBpbWFnZVNpemUsIGNhbGxiYWNr
SUQpLCBtX3dlYlBhZ2VJRCwgcHJpbnRpbmdTZW5kT3B0aW9ucyhtX2lzUGVyZm9ybWluZ0RPTVBy
aW50T3BlcmF0aW9uKSk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RHJhd1JlY3RUb0lt
YWdlKGZyYW1lLT5mcmFtZUlEKCksIHByaW50SW5mbywgcmVjdCwgaW1hZ2VTaXplLCBjYWxsYmFj
a0lEKSwgcHJpbnRpbmdTZW5kT3B0aW9ucyhtX2lzUGVyZm9ybWluZ0RPTVByaW50T3BlcmF0aW9u
KSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkcmF3UGFnZXNUb1BERihXZWJGcmFtZVByb3h5
KiBmcmFtZSwgY29uc3QgUHJpbnRJbmZvJiBwcmludEluZm8sIHVpbnQzMl90IGZpcnN0LCB1aW50
MzJfdCBjb3VudCwgUmVmPERhdGFDYWxsYmFjaz4mJiBjYWxsYmFjaykKQEAgLTc5NTgsNyArNzk1
OCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkcmF3UGFnZXNUb1BERihXZWJGcmFtZVByb3h5KiBm
cmFtZSwgY29uc3QgUHJpbnRJbmZvJiBwcmludEluCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0lE
ID0gY2FsbGJhY2stPmNhbGxiYWNrSUQoKTsKICAgICBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShj
YWxsYmFjaykpOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RHJhd1Bh
Z2VzVG9QREYoZnJhbWUtPmZyYW1lSUQoKSwgcHJpbnRJbmZvLCBmaXJzdCwgY291bnQsIGNhbGxi
YWNrSUQpLCBtX3dlYlBhZ2VJRCwgcHJpbnRpbmdTZW5kT3B0aW9ucyhtX2lzUGVyZm9ybWluZ0RP
TVByaW50T3BlcmF0aW9uKSk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RHJhd1BhZ2Vz
VG9QREYoZnJhbWUtPmZyYW1lSUQoKSwgcHJpbnRJbmZvLCBmaXJzdCwgY291bnQsIGNhbGxiYWNr
SUQpLCBwcmludGluZ1NlbmRPcHRpb25zKG1faXNQZXJmb3JtaW5nRE9NUHJpbnRPcGVyYXRpb24p
KTsKIH0KICNlbGlmIFBMQVRGT1JNKEdUSykKIHZvaWQgV2ViUGFnZVByb3h5OjpkcmF3UGFnZXNG
b3JQcmludGluZyhXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgUHJpbnRJbmZvJiBwcmludElu
Zm8sIFJlZjxQcmludEZpbmlzaGVkQ2FsbGJhY2s+JiYgY2FsbGJhY2spCkBAIC03OTcxLDcgKzc5
NzEsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZHJhd1BhZ2VzRm9yUHJpbnRpbmcoV2ViRnJhbWVQ
cm94eSogZnJhbWUsIGNvbnN0IFByaW50SW5mbyYgcAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IGNh
bGxiYWNrLT5jYWxsYmFja0lEKCk7CiAgICAgbV9jYWxsYmFja3MucHV0KFdURk1vdmUoY2FsbGJh
Y2spKTsKICAgICBtX2lzSW5QcmludGluZ01vZGUgPSB0cnVlOwotICAgIG1fcHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6RHJhd1BhZ2VzRm9yUHJpbnRpbmcoZnJhbWUtPmZyYW1lSUQo
KSwgcHJpbnRJbmZvLCBjYWxsYmFja0lEKSwgbV93ZWJQYWdlSUQsIHByaW50aW5nU2VuZE9wdGlv
bnMobV9pc1BlcmZvcm1pbmdET01QcmludE9wZXJhdGlvbikpOworICAgIHNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OkRyYXdQYWdlc0ZvclByaW50aW5nKGZyYW1lLT5mcmFtZUlEKCksIHByaW50SW5m
bywgY2FsbGJhY2tJRCksIHByaW50aW5nU2VuZE9wdGlvbnMobV9pc1BlcmZvcm1pbmdET01Qcmlu
dE9wZXJhdGlvbikpOwogfQogI2VuZGlmCiAKQEAgLTc5ODQsNyArNzk4NCw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpkcmF3VG9QREYoRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIGNvbnN0IE9wdGlv
bmFsPEZsb2F0UmVjdD4mCiAgICAgfQogCiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFj
a3MucHV0KFdURk1vdmUoY2FsbGJhY2spLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91
bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5OjpkcmF3VG9QREYiX3MpKTsKLSAgICBtX3Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRyYXdUb1BERihmcmFtZUlELCByZWN0LCBjYWxsYmFj
a0lEKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRyYXdUb1BE
RihmcmFtZUlELCByZWN0LCBjYWxsYmFja0lEKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5Ojpk
cmF3VG9QREZDYWxsYmFjayhjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHBkZkRhdGEsIENhbGxi
YWNrSUQgY2FsbGJhY2tJRCkKQEAgLTgwMzcsNyArODAzNyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5
OjpzZXRNaW5pbXVtU2l6ZUZvckF1dG9MYXlvdXQoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICBp
ZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vz
cy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0TWluaW11bVNpemVGb3JBdXRvTGF5b3V0KHNp
emUpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0TWluaW11
bVNpemVGb3JBdXRvTGF5b3V0KHNpemUpKTsKICAgICBtX2RyYXdpbmdBcmVhLT5taW5pbXVtU2l6
ZUZvckF1dG9MYXlvdXREaWRDaGFuZ2UoKTsKIAogI2lmIFVTRShBUFBLSVQpCkBAIC04MDU2LDcg
KzgwNTYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QXV0b1NpemluZ1Nob3VsZEV4cGFuZFRv
Vmlld0hlaWdodChib29sIHNob3VsZEV4cGFuZCkKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNz
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6U2V0QXV0b1NpemluZ1Nob3VsZEV4cGFuZFRvVmlld0hlaWdodChzaG91bGRFeHBhbmQp
LCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0QXV0b1Npemlu
Z1Nob3VsZEV4cGFuZFRvVmlld0hlaWdodChzaG91bGRFeHBhbmQpKTsKIH0KIAogdm9pZCBXZWJQ
YWdlUHJveHk6OnNldFZpZXdwb3J0U2l6ZUZvckNTU1ZpZXdwb3J0VW5pdHMoY29uc3QgSW50U2l6
ZSYgdmlld3BvcnRTaXplKQpAQCAtODA2OSw3ICs4MDY5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OnNldFZpZXdwb3J0U2l6ZUZvckNTU1ZpZXdwb3J0VW5pdHMoY29uc3QgSW50U2l6ZSYgdmlld3Bv
cnRTaXoKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0Vmlld3BvcnRTaXplRm9y
Q1NTVmlld3BvcnRVbml0cyh2aWV3cG9ydFNpemUpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6U2V0Vmlld3BvcnRTaXplRm9yQ1NTVmlld3BvcnRVbml0cyh2aWV3
cG9ydFNpemUpKTsKIH0KIAogI2lmIFVTRShBVVRPTUFUSUNfVEVYVF9SRVBMQUNFTUVOVCkKQEAg
LTgxNDAsNyArODE0MCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZWNvcmRBdXRvY29ycmVjdGlv
blJlc3BvbnNlKGludDMyX3QgcmVzcG9uc2UsIGNvbnN0IFN0cmluZyYKIHZvaWQgV2ViUGFnZVBy
b3h5OjpoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdChjb25zdCBTdHJpbmcmIHJlc3VsdCkK
IHsKICAgICBpZiAoIWlzQ2xvc2VkKCkpCi0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6SGFuZGxlQWx0ZXJuYXRpdmVUZXh0VUlSZXN1bHQocmVzdWx0KSwgbV93ZWJQ
YWdlSUQpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpIYW5kbGVBbHRlcm5hdGl2
ZVRleHRVSVJlc3VsdChyZXN1bHQpKTsKIH0KIAogI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJ
VkVTKQpAQCAtODE4MSw3ICs4MTgxLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldENvbXBvc2l0
aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW4KICAgICBp
ZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHByb2Nlc3Mo
KS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRDb21wb3NpdGlvbih0ZXh0LCB1bmRlcmxpbmVz
LCBzZWxlY3Rpb25SYW5nZSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpTZXRDb21wb3NpdGlvbih0ZXh0LCB1bmRlcmxpbmVzLCBzZWxlY3Rpb25SYW5nZSkpOwog
fQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Y29uZmlybUNvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYg
Y29tcG9zaXRpb25TdHJpbmcpCkBAIC04MTg5LDcgKzgxODksNyBAQCB2b2lkIFdlYlBhZ2VQcm94
eTo6Y29uZmlybUNvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgY29tcG9zaXRpb25TdHJpbmcpCiAg
ICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBwcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q29uZmlybUNvbXBvc2l0aW9uKGNvbXBvc2l0
aW9uU3RyaW5nKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNv
bmZpcm1Db21wb3NpdGlvbihjb21wb3NpdGlvblN0cmluZykpOwogfQogI2VuZGlmIC8vIFBMQVRG
T1JNKEdUSykKIApAQCAtODIwMSw3ICs4MjAxLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFNj
cm9sbFBpbm5pbmdCZWhhdmlvcihTY3JvbGxQaW5uaW5nQmVoYXZpb3IgcGlubmluZykKICAgICBt
X3Njcm9sbFBpbm5pbmdCZWhhdmlvciA9IHBpbm5pbmc7CiAKICAgICBpZiAoaGFzUnVubmluZ1By
b2Nlc3MoKSkKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRT
Y3JvbGxQaW5uaW5nQmVoYXZpb3IocGlubmluZyksIG1fd2ViUGFnZUlEKTsKKyAgICAgICAgc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0U2Nyb2xsUGlubmluZ0JlaGF2aW9yKHBpbm5pbmcpKTsK
IH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldE92ZXJsYXlTY3JvbGxiYXJTdHlsZShPcHRpb25h
bDxXZWJDb3JlOjpTY3JvbGxiYXJPdmVybGF5U3R5bGU+IHNjcm9sbGJhclN0eWxlKQpAQCAtODIx
OSw3ICs4MjE5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldE92ZXJsYXlTY3JvbGxiYXJTdHls
ZShPcHRpb25hbDxXZWJDb3JlOjpTY3JvbGxiYXJPdmVybGF5U3QKICAgICAgICAgc2Nyb2xsYmFy
U3R5bGVGb3JNZXNzYWdlID0gc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyT3ZlcmxheVN0eWxlPihzY3Jv
bGxiYXJTdHlsZS52YWx1ZSgpKTsKIAogICAgIGlmIChoYXNSdW5uaW5nUHJvY2VzcygpKQotICAg
ICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFNjcm9sbGJhck92ZXJs
YXlTdHlsZShzY3JvbGxiYXJTdHlsZUZvck1lc3NhZ2UpLCBtX3dlYlBhZ2VJRCk7CisgICAgICAg
IHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFNjcm9sbGJhck92ZXJsYXlTdHlsZShzY3JvbGxi
YXJTdHlsZUZvck1lc3NhZ2UpLCBtX3dlYlBhZ2VJRCk7CiB9CiAKICNpZiBFTkFCTEUoV0VCX0NS
WVBUTykKQEAgLTgyNjQsNyArODI2NCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzaWduZWRQdWJs
aWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcodW5zaWduZWQga2V5U2l6ZUluZGV4LCBjb25zCiAKIHZv
aWQgV2ViUGFnZVByb3h5OjphZGRNSU1FVHlwZVdpdGhDdXN0b21Db250ZW50UHJvdmlkZXIoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OkFkZE1JTUVUeXBlV2l0aEN1c3RvbUNvbnRlbnRQcm92aWRlcihtaW1lVHlwZSksIG1f
d2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpBZGRNSU1FVHlwZVdpdGhD
dXN0b21Db250ZW50UHJvdmlkZXIobWltZVR5cGUpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
OmNoYW5nZUZvbnRBdHRyaWJ1dGVzKFdlYkNvcmU6OkZvbnRBdHRyaWJ1dGVDaGFuZ2VzJiYgY2hh
bmdlcykKQEAgLTgyNzIsNyArODI3Miw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpjaGFuZ2VGb250
QXR0cmlidXRlcyhXZWJDb3JlOjpGb250QXR0cmlidXRlQ2hhbmdlcyYmIGNoYW5nZXMpCiAgICAg
aWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBwcm9jZXNz
KCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q2hhbmdlRm9udEF0dHJpYnV0ZXMoV1RGTW92ZShj
aGFuZ2VzKSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDaGFu
Z2VGb250QXR0cmlidXRlcyhXVEZNb3ZlKGNoYW5nZXMpKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVBy
b3h5OjpjaGFuZ2VGb250KFdlYkNvcmU6OkZvbnRDaGFuZ2VzJiYgY2hhbmdlcykKQEAgLTgyODAs
NyArODI4MCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpjaGFuZ2VGb250KFdlYkNvcmU6OkZvbnRD
aGFuZ2VzJiYgY2hhbmdlcykKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDaGFuZ2VG
b250KFdURk1vdmUoY2hhbmdlcykpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6Q2hhbmdlRm9udChXVEZNb3ZlKGNoYW5nZXMpKSk7CiB9CiAKICNpZiBQTEFURk9S
TShDT0NPQSkKQEAgLTgyODgsNyArODI4OCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpjaGFuZ2VG
b250KFdlYkNvcmU6OkZvbnRDaGFuZ2VzJiYgY2hhbmdlcykKIHZvaWQgV2ViUGFnZVByb3h5Ojpz
ZXRUZXh0QXN5bmMoY29uc3QgU3RyaW5nJiB0ZXh0KQogewogICAgIGlmIChoYXNSdW5uaW5nUHJv
Y2VzcygpKQotICAgICAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0VGV4
dEFzeW5jKHRleHQpLCBtX3dlYlBhZ2VJRCk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlNldFRleHRBc3luYyh0ZXh0KSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjppbnNlcnRU
ZXh0QXN5bmMoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBFZGl0aW5nUmFuZ2UmIHJlcGxhY2Vt
ZW50UmFuZ2UsIEluc2VydFRleHRPcHRpb25zJiYgb3B0aW9ucykKQEAgLTgyOTYsNyArODI5Niw3
IEBAIHZvaWQgV2ViUGFnZVByb3h5OjppbnNlcnRUZXh0QXN5bmMoY29uc3QgU3RyaW5nJiB0ZXh0
LCBjb25zdCBFZGl0aW5nUmFuZ2UmIHJlcGxhCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2Vzcygp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6SW5zZXJ0VGV4dEFzeW5jKHRleHQsIHJlcGxhY2VtZW50UmFuZ2UsIFdURk1vdmUob3B0aW9u
cykpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SW5zZXJ0VGV4
dEFzeW5jKHRleHQsIHJlcGxhY2VtZW50UmFuZ2UsIFdURk1vdmUob3B0aW9ucykpKTsKIH0KIAog
dm9pZCBXZWJQYWdlUHJveHk6Omhhc01hcmtlZFRleHQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChi
b29sKT4mJiBjYWxsYmFjaykKQEAgLTgzMTYsNyArODMxNiw3IEBAIHZvaWQgV2ViUGFnZVByb3h5
OjpnZXRNYXJrZWRSYW5nZUFzeW5jKFdURjo6RnVuY3Rpb248dm9pZCAoRWRpdGluZ1JhbmdlLCBD
YWxsYmFjCiAgICAgfQogCiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFja3MucHV0KFdU
Rk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3Vu
ZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6OmdldE1hcmtlZFJhbmdlQXN5bmMiX3MpKTsKLSAgICBw
cm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R2V0TWFya2VkUmFuZ2VBc3luYyhjYWxs
YmFja0lEKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdldE1h
cmtlZFJhbmdlQXN5bmMoY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0
U2VsZWN0ZWRSYW5nZUFzeW5jKFdURjo6RnVuY3Rpb248dm9pZCAoRWRpdGluZ1JhbmdlLCBDYWxs
YmFja0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQpAQCAtODMyNyw3ICs4MzI3LDcg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OmdldFNlbGVjdGVkUmFuZ2VBc3luYyhXVEY6OkZ1bmN0aW9u
PHZvaWQgKEVkaXRpbmdSYW5nZSwgQ2FsbGIKICAgICB9CiAKICAgICBhdXRvIGNhbGxiYWNrSUQg
PSBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgbV9wcm9jZXNzLT50
aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBhZ2VQcm94eTo6Z2V0U2VsZWN0ZWRS
YW5nZUFzeW5jIl9zKSk7Ci0gICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Okdl
dFNlbGVjdGVkUmFuZ2VBc3luYyhjYWxsYmFja0lEKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OkdldFNlbGVjdGVkUmFuZ2VBc3luYyhjYWxsYmFja0lEKSk7CiB9
CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpjaGFyYWN0ZXJJbmRleEZvclBvaW50QXN5bmMoY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCBXVEY6OkZ1bmN0aW9uPHZvaWQgKHVpbnQ2NF90LCBD
YWxsYmFja0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQpAQCAtODMzOCw3ICs4MzM4
LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNoYXJhY3RlckluZGV4Rm9yUG9pbnRBc3luYyhjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIFcKICAgICB9CiAKICAgICBhdXRvIGNhbGxiYWNr
SUQgPSBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgbV9wcm9jZXNz
LT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBhZ2VQcm94eTo6Y2hhcmFjdGVy
SW5kZXhGb3JQb2ludEFzeW5jIl9zKSk7Ci0gICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OkNoYXJhY3RlckluZGV4Rm9yUG9pbnRBc3luYyhwb2ludCwgY2FsbGJhY2tJRCksIG1f
d2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDaGFyYWN0ZXJJbmRleEZv
clBvaW50QXN5bmMocG9pbnQsIGNhbGxiYWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
OmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlQXN5bmMoY29uc3QgRWRpdGluZ1JhbmdlJiByYW5n
ZSwgV1RGOjpGdW5jdGlvbjx2b2lkIChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgRWRp
dGluZ1JhbmdlJiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2tGdW5jdGlvbikKQEAg
LTgzNDksNyArODM0OSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpmaXJzdFJlY3RGb3JDaGFyYWN0
ZXJSYW5nZUFzeW5jKGNvbnN0IEVkaXRpbmdSYW5nZSYgcmFuZ2UsIFdUCiAgICAgfQogCiAgICAg
YXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2tGdW5jdGlv
biksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJv
eHk6OmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlQXN5bmMiX3MpKTsKLSAgICBwcm9jZXNzKCku
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Rmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2VBc3luYyhy
YW5nZSwgY2FsbGJhY2tJRCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpGaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZUFzeW5jKHJhbmdlLCBjYWxsYmFja0lEKSk7
CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRDb21wb3NpdGlvbkFzeW5jKGNvbnN0IFN0cmlu
ZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiYgdW5kZXJsaW5lcywg
Y29uc3QgRWRpdGluZ1JhbmdlJiBzZWxlY3Rpb25SYW5nZSwgY29uc3QgRWRpdGluZ1JhbmdlJiBy
ZXBsYWNlbWVudFJhbmdlKQpAQCAtODM2MCw3ICs4MzYwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OnNldENvbXBvc2l0aW9uQXN5bmMoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29t
cG9zaXQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHByb2Nlc3MoKS5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpTZXRDb21wb3NpdGlvbkFzeW5jKHRleHQsIHVuZGVybGluZXMsIHNlbGVj
dGlvblJhbmdlLCByZXBsYWNlbWVudFJhbmdlKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OlNldENvbXBvc2l0aW9uQXN5bmModGV4dCwgdW5kZXJsaW5lcywgc2Vs
ZWN0aW9uUmFuZ2UsIHJlcGxhY2VtZW50UmFuZ2UpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
OmNvbmZpcm1Db21wb3NpdGlvbkFzeW5jKCkKQEAgLTgzNjgsNyArODM2OCw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5Ojpjb25maXJtQ29tcG9zaXRpb25Bc3luYygpCiAgICAgaWYgKCFoYXNSdW5uaW5n
UHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6Q29uZmlybUNvbXBvc2l0aW9uQXN5bmMoKSwgbV93ZWJQYWdlSUQpOworICAg
IHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNvbmZpcm1Db21wb3NpdGlvbkFzeW5jKCkpOwogfQog
CiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0U2Nyb2xsUGVyZm9ybWFuY2VEYXRhQ29sbGVjdGlvbkVu
YWJsZWQoYm9vbCBlbmFibGVkKQpAQCAtODM5Myw3ICs4MzkzLDcgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OnRha2VTbmFwc2hvdChJbnRSZWN0IHJlY3QsIEludFNpemUgYml0bWFwU2l6ZSwgU25hcHNo
b3RPcHRpb24KICAgICB9CiAKICAgICBhdXRvIGNhbGxiYWNrSUQgPSBtX2NhbGxiYWNrcy5wdXQo
V1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgbV9wcm9jZXNzLT50aHJvdHRsZXIoKS5iYWNrZ3Jv
dW5kQWN0aXZpdHkoIldlYlBhZ2VQcm94eTo6dGFrZVNuYXBzaG90Il9zKSk7Ci0gICAgbV9wcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpUYWtlU25hcHNob3QocmVjdCwgYml0bWFwU2l6
ZSwgb3B0aW9ucywgY2FsbGJhY2tJRCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpUYWtlU25hcHNob3QocmVjdCwgYml0bWFwU2l6ZSwgb3B0aW9ucywgY2FsbGJh
Y2tJRCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6bmF2aWdhdGlvbkdlc3R1cmVEaWRCZWdp
bigpCkBAIC04NTUzLDcgKzg1NTMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVxdWVzdEFjdGl2
ZU5vd1BsYXlpbmdTZXNzaW9uSW5mbyhSZWY8Tm93UGxheWluZ0luZm9DYWxsYmFjawogICAgIGF1
dG8gY2FsbGJhY2tJRCA9IGNhbGxiYWNrLT5jYWxsYmFja0lEKCk7CiAgICAgbV9jYWxsYmFja3Mu
cHV0KFdURk1vdmUoY2FsbGJhY2spKTsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6UmVxdWVzdEFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9uSW5mbyhjYWxsYmFja0lEKSwg
bV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJlcXVlc3RBY3RpdmVO
b3dQbGF5aW5nU2Vzc2lvbkluZm8oY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94
eTo6bm93UGxheWluZ0luZm9DYWxsYmFjayhib29sIGhhc0FjdGl2ZVNlc3Npb24sIGJvb2wgcmVn
aXN0ZXJlZEFzTm93UGxheWluZ0FwcGxpY2F0aW9uLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBkb3Vi
bGUgZHVyYXRpb24sIGRvdWJsZSBlbGFwc2VkVGltZSwgdWludDY0X3QgdW5pcXVlSWRlbnRpZmll
ciwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQpAQCAtODU5NiwyMiArODU5NiwyMiBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6aGFuZGxlQXV0b3BsYXlFdmVudChXZWJDb3JlOjpBdXRvcGxheUV2ZW50IGV2
ZW50LCBPcHRpb25TZXQ8QQogI2lmIFBMQVRGT1JNKE1BQykKIHZvaWQgV2ViUGFnZVByb3h5Ojpw
ZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdEF0TG9jYXRpb24oRmxvYXRQb2ludCBwb2ludCkK
IHsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBlcmZvcm1JbW1lZGlh
dGVBY3Rpb25IaXRUZXN0QXRMb2NhdGlvbihwb2ludCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdEF0TG9jYXRp
b24ocG9pbnQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmltbWVkaWF0ZUFjdGlvbkRpZFVw
ZGF0ZSgpCiB7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpJbW1lZGlh
dGVBY3Rpb25EaWRVcGRhdGUoKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OkltbWVkaWF0ZUFjdGlvbkRpZFVwZGF0ZSgpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJv
eHk6OmltbWVkaWF0ZUFjdGlvbkRpZENhbmNlbCgpCiB7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpJbW1lZGlhdGVBY3Rpb25EaWRDYW5jZWwoKSwgbV93ZWJQYWdlSUQp
OworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkltbWVkaWF0ZUFjdGlvbkRpZENhbmNlbCgp
KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmltbWVkaWF0ZUFjdGlvbkRpZENvbXBsZXRlKCkK
IHsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkltbWVkaWF0ZUFjdGlv
bkRpZENvbXBsZXRlKCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpJbW1lZGlhdGVBY3Rpb25EaWRDb21wbGV0ZSgpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
OmRpZFBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0KGNvbnN0IFdlYkhpdFRlc3RSZXN1bHRE
YXRhJiByZXN1bHQsIGJvb2wgY29udGVudFByZXZlbnRzRGVmYXVsdCwgY29uc3QgVXNlckRhdGEm
IHVzZXJEYXRhKQpAQCAtODYyNiw3ICs4NjI2LDcgQEAgTlNPYmplY3QgKldlYlBhZ2VQcm94eTo6
aW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlckZvckhpdFRlc3RSZXN1bHQoUmVmUHQK
IAogdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKFdlYkNvcmU6OlRl
eHRDaGVja2luZ1Jlc3VsdCBhY2NlcHRlZENhbmRpZGF0ZSkKIHsKLSAgICBtX3Byb2Nlc3MtPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OkhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKGFjY2VwdGVkQ2Fu
ZGlkYXRlKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkhhbmRs
ZUFjY2VwdGVkQ2FuZGlkYXRlKGFjY2VwdGVkQ2FuZGlkYXRlKSk7CiB9CiAKIHZvaWQgV2ViUGFn
ZVByb3h5OjpkaWRIYW5kbGVBY2NlcHRlZENhbmRpZGF0ZSgpCkBAIC04NjQ0LDE3ICs4NjQ0LDE3
IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRVc2VTeXN0ZW1BcHBlYXJhbmNlKGJvb2wgdXNlU3lz
dGVtQXBwZWFyYW5jZSkKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0VXNlU3lz
dGVtQXBwZWFyYW5jZSh1c2VTeXN0ZW1BcHBlYXJhbmNlKSwgbV93ZWJQYWdlSUQpOworICAgIHNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFVzZVN5c3RlbUFwcGVhcmFuY2UodXNlU3lzdGVtQXBw
ZWFyYW5jZSkpOwogfQogICAgIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldEhlYWRlckJhbm5lckhl
aWdodEZvclRlc3RpbmcoaW50IGhlaWdodCkKIHsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OlNldEhlYWRlckJhbm5lckhlaWdodEZvclRlc3RpbmcoaGVpZ2h0KSwgbV93
ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEhlYWRlckJhbm5lckhl
aWdodEZvclRlc3RpbmcoaGVpZ2h0KSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRGb290
ZXJCYW5uZXJIZWlnaHRGb3JUZXN0aW5nKGludCBoZWlnaHQpCiB7Ci0gICAgbV9wcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRGb290ZXJCYW5uZXJIZWlnaHRGb3JUZXN0aW5nKGhl
aWdodCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRGb290
ZXJCYW5uZXJIZWlnaHRGb3JUZXN0aW5nKGhlaWdodCkpOwogfQogCiAjZW5kaWYKQEAgLTg2ODAs
NyArODY4MCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjppbWFnZU9yTWVkaWFEb2N1bWVudFNpemVD
aGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpCiAKIHZvaWQgV2ViUGFnZVByb3h5
OjpzZXRTaG91bGREaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudHMoYm9vbCBzaG91bGREaXNwYXRj
aEZha2VNb3VzZU1vdmVFdmVudHMpCiB7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpTZXRTaG91bGREaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudHMoc2hvdWxkRGlzcGF0
Y2hGYWtlTW91c2VNb3ZlRXZlbnRzKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OlNldFNob3VsZERpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50cyhzaG91bGREaXNw
YXRjaEZha2VNb3VzZU1vdmVFdmVudHMpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRs
ZUF1dG9GaWxsQnV0dG9uQ2xpY2soY29uc3QgVXNlckRhdGEmIHVzZXJEYXRhKQpAQCAtODczNCw3
ICs4NzM0LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFBsYXliYWNrVGFyZ2V0KHVpbnQ2NF90
IGNvbnRleHRJZCwgUmVmPE1lZGlhUGxheWJhY2tUYXJnZXQKICAgICBpZiAoIWhhc1J1bm5pbmdQ
cm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6UGxheWJhY2tUYXJnZXRTZWxlY3RlZChjb250ZXh0SWQsIHRhcmdldC0+dGFy
Z2V0Q29udGV4dCgpKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OlBsYXliYWNrVGFyZ2V0U2VsZWN0ZWQoY29udGV4dElkLCB0YXJnZXQtPnRhcmdldENvbnRleHQo
KSkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFi
bGVEaWRDaGFuZ2UodWludDY0X3QgY29udGV4dElkLCBib29sIGF2YWlsYWJsZSkKQEAgLTg3NDIs
NyArODc0Miw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpleHRlcm5hbE91dHB1dERldmljZUF2YWls
YWJsZURpZENoYW5nZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvCiAgICAgaWYgKCFoYXNSdW5uaW5n
UHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OlBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5RGlkQ2hhbmdlKGNvbnRleHRJ
ZCwgYXZhaWxhYmxlKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OlBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5RGlkQ2hhbmdlKGNvbnRleHRJZCwgYXZhaWxhYmxl
KSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRTaG91bGRQbGF5VG9QbGF5YmFja1Rhcmdl
dCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgc2hvdWxkUGxheSkKQEAgLTg3NTAsNyArODc1MCw3
IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldCh1aW50
NjRfdCBjb250ZXh0SWQsIGJvb2wgc2hvdWxkCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2Vzcygp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KGNvbnRleHRJZCwgc2hvdWxkUGxheSks
IG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRTaG91bGRQbGF5
VG9QbGF5YmFja1RhcmdldChjb250ZXh0SWQsIHNob3VsZFBsYXkpKTsKIH0KIAogdm9pZCBXZWJQ
YWdlUHJveHk6OnBsYXliYWNrVGFyZ2V0UGlja2VyV2FzRGlzbWlzc2VkKHVpbnQ2NF90IGNvbnRl
eHRJZCkKQEAgLTg3NTgsNyArODc1OCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwbGF5YmFja1Rh
cmdldFBpY2tlcldhc0Rpc21pc3NlZCh1aW50NjRfdCBjb250ZXh0SWQpCiAgICAgaWYgKCFoYXNS
dW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OlBsYXliYWNrVGFyZ2V0UGlja2VyV2FzRGlzbWlzc2VkKGNvbnRl
eHRJZCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQbGF5YmFj
a1RhcmdldFBpY2tlcldhc0Rpc21pc3NlZChjb250ZXh0SWQpKTsKIH0KICNlbmRpZgogCkBAIC04
Nzg0LDcgKzg3ODQsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Y2xlYXJXaGVlbEV2ZW50VGVzdE1v
bml0b3IoKQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Y2xlYXJXaGVlbEV2
ZW50VGVzdE1vbml0b3IoKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OmNsZWFyV2hlZWxFdmVudFRlc3RNb25pdG9yKCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94
eTo6Y2FsbEFmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZShXVEY6OkZ1bmN0aW9uPHZvaWQgKENh
bGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrKQpAQCAtODgwNyw3ICs4ODA3LDcgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OnNldFNob3VsZFNjYWxlVmlld1RvRml0RG9jdW1lbnQoYm9vbCBzaG91
bGRTY2FsZVZpZXdUb0ZpdERvY3UKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0
U2hvdWxkU2NhbGVWaWV3VG9GaXREb2N1bWVudChzaG91bGRTY2FsZVZpZXdUb0ZpdERvY3VtZW50
KSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFNob3VsZFNj
YWxlVmlld1RvRml0RG9jdW1lbnQoc2hvdWxkU2NhbGVWaWV3VG9GaXREb2N1bWVudCkpOwogfQog
CiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVzdG9yZVNjcm9sbFBvc2l0aW9uKCkKQEAgLTg4Mjcs
NyArODgyNyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpnZXRMb2FkRGVjaXNpb25Gb3JJY29uKGNv
bnN0IFdlYkNvcmU6OkxpbmtJY29uJiBpY29uLCBDYWxsYmFjCiAgICAgICAgIGJvb2wgZGVjaXNp
b24gPSAoYm9vbCljYWxsYmFja0Z1bmN0aW9uOwogICAgICAgICBhdXRvIG5ld0NhbGxiYWNrSWRl
bnRpZmllciA9IGRlY2lzaW9uID8gT3B0aW9uYWxDYWxsYmFja0lEKG1fY2FsbGJhY2tzLnB1dChX
VEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91
bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5OjpnZXRMb2FkRGVjaXNpb25Gb3JJY29uIl9zKSkpIDog
T3B0aW9uYWxDYWxsYmFja0lEKCk7CiAKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpEaWRHZXRMb2FkRGVjaXNpb25Gb3JJY29uKGRlY2lzaW9uLCBsb2FkSWRlbnRp
ZmllciwgbmV3Q2FsbGJhY2tJZGVudGlmaWVyKSwgbV93ZWJQYWdlSUQpOworICAgICAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRHZXRMb2FkRGVjaXNpb25Gb3JJY29uKGRlY2lzaW9uLCBs
b2FkSWRlbnRpZmllciwgbmV3Q2FsbGJhY2tJZGVudGlmaWVyKSk7CiAgICAgfSk7CiB9CiAKQEAg
LTg4NDYsNyArODg0Niw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRVc2VySW50ZXJmYWNlTGF5
b3V0RGlyZWN0aW9uKFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXRECiAgICAgaWYgKCFoYXNS
dW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OlNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24pKSwgbV93ZWJQYWdl
SUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFVzZXJJbnRlcmZhY2VMYXlvdXRE
aXJlY3Rpb24oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rp
b24pKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpoaWRlVmFsaWRhdGlvbk1lc3NhZ2UoKQpA
QCAtODg5MywxNCArODg5MywxNCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQWxsb3dQb2ludGVy
TG9jaygpCiAgICAgQ0dEaXNwbGF5SGlkZUN1cnNvcihDR01haW5EaXNwbGF5SUQoKSk7CiAgICAg
Q0dBc3NvY2lhdGVNb3VzZUFuZE1vdXNlQ3Vyc29yUG9zaXRpb24oZmFsc2UpOwogI2VuZGlmCi0g
ICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRBY3F1aXJlUG9pbnRlckxv
Y2soKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZEFjcXVp
cmVQb2ludGVyTG9jaygpKTsKIH0KICAgICAKIHZvaWQgV2ViUGFnZVByb3h5OjpkaWREZW55UG9p
bnRlckxvY2soKQogewogICAgIEFTU0VSVChtX2lzUG9pbnRlckxvY2tQZW5kaW5nICYmICFtX2lz
UG9pbnRlckxvY2tlZCk7CiAgICAgbV9pc1BvaW50ZXJMb2NrUGVuZGluZyA9IGZhbHNlOwotICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkTm90QWNxdWlyZVBvaW50ZXJM
b2NrKCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWROb3RB
Y3F1aXJlUG9pbnRlckxvY2soKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpyZXF1ZXN0UG9p
bnRlclVubG9jaygpCkBAIC04OTExLDEyICs4OTExLDEyIEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpy
ZXF1ZXN0UG9pbnRlclVubG9jaygpCiAgICAgICAgIENHRGlzcGxheVNob3dDdXJzb3IoQ0dNYWlu
RGlzcGxheUlEKCkpOwogI2VuZGlmCiAgICAgICAgIG1fdWlDbGllbnQtPmRpZExvc2VQb2ludGVy
TG9jayh0aGlzKTsKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpE
aWRMb3NlUG9pbnRlckxvY2soKSwgbV93ZWJQYWdlSUQpOworICAgICAgICBzZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpEaWRMb3NlUG9pbnRlckxvY2soKSk7CiAgICAgfQogCiAgICAgaWYgKG1faXNQ
b2ludGVyTG9ja1BlbmRpbmcpIHsKICAgICAgICAgbV91aUNsaWVudC0+ZGlkTG9zZVBvaW50ZXJM
b2NrKHRoaXMpOwotICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRp
ZE5vdEFjcXVpcmVQb2ludGVyTG9jaygpLCBtX3dlYlBhZ2VJRCk7CisgICAgICAgIHNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OkRpZE5vdEFjcXVpcmVQb2ludGVyTG9jaygpKTsKICAgICB9CiAKICAg
ICBtX2lzUG9pbnRlckxvY2tlZCA9IGZhbHNlOwpAQCAtODkzNyw3ICs4OTM3LDcgQEAgdm9pZCBX
ZWJQYWdlUHJveHk6OnNldFVSTFNjaGVtZUhhbmRsZXJGb3JTY2hlbWUoUmVmPFdlYlVSTFNjaGVt
ZUhhbmRsZXI+JiYgaGFuZGwKICAgICBhdXRvIGlkZW50aWZpZXJSZXN1bHQgPSBtX3VybFNjaGVt
ZUhhbmRsZXJzQnlJZGVudGlmaWVyLmFkZChpZGVudGlmaWVyLCBXVEZNb3ZlKGhhbmRsZXIpKTsK
ICAgICBBU1NFUlRfVU5VU0VEKGlkZW50aWZpZXJSZXN1bHQsIGlkZW50aWZpZXJSZXN1bHQuaXNO
ZXdFbnRyeSk7CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJlZ2lz
dGVyVVJMU2NoZW1lSGFuZGxlcihpZGVudGlmaWVyLCBjYW5vbmljYWxpemVkU2NoZW1lLnZhbHVl
KCkpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVnaXN0ZXJV
UkxTY2hlbWVIYW5kbGVyKGlkZW50aWZpZXIsIGNhbm9uaWNhbGl6ZWRTY2hlbWUudmFsdWUoKSkp
OwogfQogCiBXZWJVUkxTY2hlbWVIYW5kbGVyKiBXZWJQYWdlUHJveHk6OnVybFNjaGVtZUhhbmRs
ZXJGb3JTY2hlbWUoY29uc3QgU3RyaW5nJiBzY2hlbWUpCkBAIC04OTg1LDcgKzg5ODUsNyBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXJG
cm9tUHJldmFsZW50UmVzb3VyY2UoKQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpX
YXNMb2FkZWRXaXRoRGF0YVRyYW5zZmVyRnJvbVByZXZhbGVudFJlc291cmNlKCksIG1fd2ViUGFn
ZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpXYXNMb2FkZWRXaXRoRGF0YVRyYW5z
ZmVyRnJvbVByZXZhbGVudFJlc291cmNlKCkpOwogfQogI2VuZGlmCiAKQEAgLTkwMDQsNyArOTAw
NCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjplZmZlY3RpdmVBcHBlYXJhbmNlRGlkQ2hhbmdlKCkK
ICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1f
cHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RWZmZWN0aXZlQXBwZWFyYW5jZURpZENo
YW5nZSh1c2VEYXJrQXBwZWFyYW5jZSgpLCB1c2VFbGV2YXRlZFVzZXJJbnRlcmZhY2VMZXZlbCgp
KSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkVmZmVjdGl2ZUFw
cGVhcmFuY2VEaWRDaGFuZ2UodXNlRGFya0FwcGVhcmFuY2UoKSwgdXNlRWxldmF0ZWRVc2VySW50
ZXJmYWNlTGV2ZWwoKSkpOwogfQogCiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC05MDQzLDcgKzkw
NDMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aW5zZXJ0QXR0YWNobWVudChSZWY8QVBJOjpBdHRh
Y2htZW50PiYmIGF0dGFjaG1lbnQsIEZ1bmN0aW9uPAogCiAgICAgYXV0byBhdHRhY2htZW50SWRl
bnRpZmllciA9IGF0dGFjaG1lbnQtPmlkZW50aWZpZXIoKTsKICAgICBhdXRvIGNhbGxiYWNrSUQg
PSBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFjayksIG1fcHJvY2Vzcy0+dGhyb3R0bGVy
KCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6Omluc2VydEF0dGFjaG1lbnQiX3Mp
KTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Okluc2VydEF0dGFjaG1l
bnQoYXR0YWNobWVudElkZW50aWZpZXIsIGF0dGFjaG1lbnQtPmZpbGVTaXplRm9yRGlzcGxheSgp
LCBhdHRhY2htZW50LT5maWxlTmFtZSgpLCBhdHRhY2htZW50LT5jb250ZW50VHlwZSgpLCBjYWxs
YmFja0lEKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Okluc2Vy
dEF0dGFjaG1lbnQoYXR0YWNobWVudElkZW50aWZpZXIsIGF0dGFjaG1lbnQtPmZpbGVTaXplRm9y
RGlzcGxheSgpLCBhdHRhY2htZW50LT5maWxlTmFtZSgpLCBhdHRhY2htZW50LT5jb250ZW50VHlw
ZSgpLCBjYWxsYmFja0lEKSk7CiAgICAgbV9hdHRhY2htZW50SWRlbnRpZmllclRvQXR0YWNobWVu
dE1hcC5zZXQoYXR0YWNobWVudElkZW50aWZpZXIsIFdURk1vdmUoYXR0YWNobWVudCkpOwogfQog
CkBAIC05MDU5LDcgKzkwNTksNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6dXBkYXRlQXR0YWNobWVu
dEF0dHJpYnV0ZXMoY29uc3QgQVBJOjpBdHRhY2htZW50JiBhdHRhY2htZW50LAogICAgICAgICBk
YXRhUmVmZXJlbmNlID0geyAqZGF0YSB9OwogCiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxs
YmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2spLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tn
cm91bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5Ojp1cGRhdGVBdHRhY2htZW50QXR0cmlidXRlcyJf
cykpOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6VXBkYXRlQXR0YWNo
bWVudEF0dHJpYnV0ZXMoYXR0YWNobWVudC5pZGVudGlmaWVyKCksIGF0dGFjaG1lbnQuZmlsZVNp
emVGb3JEaXNwbGF5KCksIGF0dGFjaG1lbnQuY29udGVudFR5cGUoKSwgYXR0YWNobWVudC5maWxl
TmFtZSgpLCBXVEZNb3ZlKGRhdGFSZWZlcmVuY2UpLCBjYWxsYmFja0lEKSwgbV93ZWJQYWdlSUQp
OworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlVwZGF0ZUF0dGFjaG1lbnRBdHRyaWJ1dGVz
KGF0dGFjaG1lbnQuaWRlbnRpZmllcigpLCBhdHRhY2htZW50LmZpbGVTaXplRm9yRGlzcGxheSgp
LCBhdHRhY2htZW50LmNvbnRlbnRUeXBlKCksIGF0dGFjaG1lbnQuZmlsZU5hbWUoKSwgV1RGTW92
ZShkYXRhUmVmZXJlbmNlKSwgY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6
cmVnaXN0ZXJBdHRhY2htZW50SWRlbnRpZmllckZyb21EYXRhKGNvbnN0IFN0cmluZyYgaWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSwgY29uc3QgU3RyaW5nJiBwcmVmZXJyZWRG
aWxlTmFtZSwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhKQpAQCAtOTIxOSw3ICs5MjE5
LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmdldEFwcGxpY2F0aW9uTWFuaWZlc3QoRnVuY3Rpb248
dm9pZChjb25zdCBPcHRpb25hbDxXZWJDb3JlOjoKIAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1f
Y2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90
dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5OjpnZXRBcHBsaWNhdGlvbk1h
bmlmZXN0Il9zKSk7CiAgICAgbV9sb2FkRGVwZW5kZW50U3RyaW5nQ2FsbGJhY2tJRHMuYWRkKGNh
bGxiYWNrSUQpOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R2V0QXBw
bGljYXRpb25NYW5pZmVzdChjYWxsYmFja0lEKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OkdldEFwcGxpY2F0aW9uTWFuaWZlc3QoY2FsbGJhY2tJRCkpOwogfQog
I2VuZGlmCiAKQEAgLTkyODMsNyArOTI4Myw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZXBvcnRQ
YWdlTG9hZFJlc3VsdChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIAogdm9pZCBXZWJQYWdl
UHJveHk6OnNldERlZmVyc0xvYWRpbmdGb3JUZXN0aW5nKGJvb2wgZGVmZXJzTG9hZGluZykKIHsK
LSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldERlZmVyc0xvYWRpbmco
ZGVmZXJzTG9hZGluZyksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpTZXREZWZlcnNMb2FkaW5nKGRlZmVyc0xvYWRpbmcpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJv
eHk6OmdldElzVmlld1Zpc2libGUoYm9vbCYgcmVzdWx0KQpAQCAtOTI5NSw3ICs5Mjk1LDcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnVwZGF0ZUN1cnJlbnRNb2RpZmllclN0YXRlKCkKIHsKICNpZiBQ
TEFURk9STShNQUMpICYmIEVOQUJMRShXRUJQUk9DRVNTX1dJTkRPV1NFUlZFUl9CTE9DS0lORykg
fHwgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBhdXRvIG1vZGlmaWVycyA9IFBsYXRmb3JtS2V5
Ym9hcmRFdmVudDo6Y3VycmVudFN0YXRlT2ZNb2RpZmllcktleXMoKTsKLSAgICBtX3Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlVwZGF0ZUN1cnJlbnRNb2RpZmllclN0YXRlKG1vZGlm
aWVycyksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpVcGRhdGVD
dXJyZW50TW9kaWZpZXJTdGF0ZShtb2RpZmllcnMpKTsKICNlbmRpZgogfQogCkBAIC05MzM3LDcg
KzkzMzcsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6d2lsbEFjcXVpcmVVbml2ZXJzYWxGaWxlUmVh
ZFNhbmRib3hFeHRlbnNpb24oV2ViUHJvY2Vzc1Byb3h5JgogCiB2b2lkIFdlYlBhZ2VQcm94eTo6
c2ltdWxhdGVEZXZpY2VPcmllbnRhdGlvbkNoYW5nZShkb3VibGUgYWxwaGEsIGRvdWJsZSBiZXRh
LCBkb3VibGUgZ2FtbWEpCiB7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpTaW11bGF0ZURldmljZU9yaWVudGF0aW9uQ2hhbmdlKGFscGhhLCBiZXRhLCBnYW1tYSksIG1f
d2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTaW11bGF0ZURldmljZU9y
aWVudGF0aW9uQ2hhbmdlKGFscGhhLCBiZXRhLCBnYW1tYSkpOwogfQogCiAjaWYgRU5BQkxFKERB
VEFfREVURUNUSU9OKQpAQCAtOTM1Nyw3ICs5MzU3LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJl
bW92ZURhdGFEZXRlY3RlZExpbmtzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRGF0YURl
dGUKICNpZiBVU0UoU1lTVEVNX1BSRVZJRVcpCiB2b2lkIFdlYlBhZ2VQcm94eTo6c3lzdGVtUHJl
dmlld0FjdGlvblRyaWdnZXJlZChjb25zdCBXZWJDb3JlOjpTeXN0ZW1QcmV2aWV3SW5mbyYgcHJl
dmlld0luZm8sIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgY29uc3QKIHsKLSAgICBtX3Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlN5c3RlbVByZXZpZXdBY3Rpb25UcmlnZ2VyZWQocHJl
dmlld0luZm8sIG1lc3NhZ2UpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6U3lzdGVtUHJldmlld0FjdGlvblRyaWdnZXJlZChwcmV2aWV3SW5mbywgbWVzc2FnZSkp
OwogfQogI2VuZGlmCiAKQEAgLTk2MTEsNyArOTYxMSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpj
b21wbGV0ZVRleHRNYW5pcHVsYXRpb24oV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXI6CiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0T3ZlcnJpZGRlbk1lZGlhVHlwZShjb25zdCBTdHJp
bmcmIG1lZGlhVHlwZSkKIHsKICAgICBtX292ZXJyaWRkZW5NZWRpYVR5cGUgPSBtZWRpYVR5cGU7
Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRPdmVycmlkZGVuTWVk
aWFUeXBlKG1lZGlhVHlwZSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpTZXRPdmVycmlkZGVuTWVkaWFUeXBlKG1lZGlhVHlwZSkpOwogfQogCiB2b2lkIFdlYlBh
Z2VQcm94eTo6c2V0T3JpZW50YXRpb25Gb3JNZWRpYUNhcHR1cmUodWludDY0X3Qgb3JpZW50YXRp
b24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9y
UHJveHlHdGsuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclBy
b3h5R3RrLmNwcAppbmRleCBhZmIwYzI0ZTZjOTZkOTMxZWUzY2Q0MDM0ZmE1MjFjMjM1M2RjNTBj
Li42ZDY4ZjMwNzdhNjE0ZWU3MTYwMTZmNThmNDhiYzExZDgxMjdiMDhhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKQEAg
LTQ5Miw3ICs0OTIsNyBAQCB2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNhdmUoY29u
c3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZQogICAgIEdSZWZQdHI8R0Zp
bGU+IGZpbGUgPSBhZG9wdEdSZWYoZ3RrX2ZpbGVfY2hvb3Nlcl9nZXRfZmlsZShjaG9vc2VyKSk7
CiAgICAgR1VuaXF1ZVB0cjxjaGFyPiBwYXRoKGdfZmlsZV9nZXRfcGF0aChmaWxlLmdldCgpKSk7
CiAgICAgaWYgKGdfZmlsZV9zZXRfY29udGVudHMocGF0aC5nZXQoKSwgZGF0YSwgZGF0YUxlbmd0
aCwgbnVsbHB0cikpCi0gICAgICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3RvclVJOjpEaWRTYXZlKHBhdGguZ2V0KCkpLCBtX2luc3BlY3RvclBh
Z2UtPndlYlBhZ2VJRCgpKTsKKyAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3JVSTo6RGlkU2F2ZShwYXRoLmdldCgpKSk7CiB9CiAKIHZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYp
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385271</attachid>
            <date>2019-12-10 09:25:42 -0800</date>
            <delta_ts>2019-12-10 12:00:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205065-20191210092541.patch</filename>
            <type>text/plain</type>
            <size>130416</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMzI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDFlMmU3YWYzMzA2YzQ0YzVk
N2YzZDg0N2I2ZGQ0MzY5YzVhNTMyODIuLjNhMjg1MWNmNDM3NTlkYjA1ODkyOGRhOTc0ZDdhMzFh
MzQ3ZDljNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcyIEBACisyMDE5LTEyLTEwICBDaHJpcyBE
dW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTGV2ZXJhZ2UgdGhlIGZhY3QgdGhh
dCBXZWJQYWdlUHJveHkgc3ViY2xhc3NlcyBJUEM6Ok1lc3NhZ2VTZW5kZXIgdG8gc2ltcGxpZnkg
SVBDIHNlbmRpbmcgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA1MDY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcDoKKyAgICAgICAgKFdLUGFnZVNl
dFBhZ2VMb2FkZXJDbGllbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1
dG9tYXRpb25TZXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Np
b246OnN3aXRjaFRvQnJvd3NpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21h
dGlvblNlc3Npb246OmV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQXV0b21hdGlvblNlc3Npb246OnJlc29sdmVDaGlsZEZyYW1lSGFuZGxlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OnJlc29sdmVQYXJlbnRGcmFtZUhhbmRs
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpjb21wdXRlRWxlbWVu
dExheW91dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpzZWxlY3RP
cHRpb25FbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OnNl
dEZpbGVzRm9ySW5wdXRGaWxlVXBsb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlv
blNlc3Npb246OmdldEFsbENvb2tpZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6ZGVsZXRlU2luZ2xlQ29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21h
dGlvblNlc3Npb246OnRha2VTY3JlZW5zaG90KToKKyAgICAgICAgKiBVSVByb2Nlc3MvUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTo6bG9hZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Vc2VyTWVkaWFQ
ZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlVzZXJN
ZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5Ojp+VXNlck1lZGlhUGVybWlzc2lvblJl
cXVlc3RNYW5hZ2VyUHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJFZGl0Q29tbWFuZFBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdENvbW1hbmRQcm94eTo6dW5hcHBseSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRDb21tYW5kUHJveHk6OnJlYXBwbHkpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJGcmFtZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJh
bWVQcm94eTo6bG9hZFVSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lUHJveHk6OmxvYWRE
YXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVQcm94eTo6c3RvcExvYWRpbmcgY29uc3Qp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkluc3BlY3RvclByb3h5OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6Y29ubmVjdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkluc3BlY3RvclByb3h5OjpjbG9zZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rv
clByb3h5Ojp1cGRhdGVGb3JOZXdQYWdlUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYklu
c3BlY3RvclByb3h5OjpzZXRGcm9udGVuZENvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJbnNwZWN0b3JQcm94eTo6c2hvd0NvbnNvbGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNw
ZWN0b3JQcm94eTo6c2hvd1Jlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rv
clByb3h5OjpzaG93TWFpblJlc291cmNlRm9yRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
bnNwZWN0b3JQcm94eTo6YXR0YWNoKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJv
eHk6OmRldGFjaCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5Ojp0b2dnbGVQ
YWdlUHJvZmlsaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnRvZ2ds
ZUVsZW1lbnRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6
b3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRlbmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0
b3JQcm94eTo6b3Blbik6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5OjpjbG9z
ZUZyb250ZW5kUGFnZUFuZFdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclBy
b3h5OjphdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRVSUNsaWVu
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0SWNvbkxvYWRpbmdDbGllbnQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmxhdW5jaFByb2Nlc3NGb3JSZWxvYWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmxhdW5jaFByb2Nlc3NXaXRoSXRlbSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aW5pdGlhbGl6ZVdlYlBhZ2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5Ojpsb2FkUmVxdWVzdFdpdGhOYXZpZ2F0aW9uU2hhcmVkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5Ojpsb2FkRmlsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6bG9hZEFsdGVybmF0ZUhUTUwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OmxvYWRXZWJBcmNoaXZlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bmF2
aWdhdGVUb1BERkxpbmtXaXRoU2ltdWxhdGVkQ2xpY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnN0b3BMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpy
ZWxvYWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmdvVG9CYWNrRm9yd2FyZEl0
ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnRyeVJlc3RvcmVTY3JvbGxQb3Np
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0Q29udHJvbGxlZEJ5QXV0
b21hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0SW5kaWNhdGluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0QmFja2dyb3VuZENvbG9yKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRUb3BDb250ZW50SW5zZXQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldFVuZGVybGF5Q29sb3IpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnZpZXdXaWxsU3RhcnRMaXZlUmVzaXplKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5Ojp2aWV3V2lsbEVuZExpdmVSZXNpemUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnZpZXdEaWRFbnRlcldpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6ZGlzcGF0Y2hBY3Rpdml0eVN0YXRlQ2hhbmdlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpsYXllckhvc3RpbmdNb2RlRGlkQ2hhbmdlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRJbml0aWFsRm9jdXMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OmNsZWFyU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpyZXN0b3JlU2VsZWN0aW9uSW5Gb2N1c2VkRWRpdGFibGVFbGVtZW50KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojp2YWxpZGF0ZUNvbW1hbmQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OmluY3JlYXNlTGlzdExldmVsKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpkZWNyZWFzZUxpc3RMZXZlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6Y2hhbmdlTGlzdFR5cGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OnNldEJhc2VXcml0aW5nRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpzZXROZWVkc0ZvbnRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpzY2hlZHVsZUZ1bGxFZGl0b3JTdGF0ZVVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6c2VsZWN0QWxsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpleGVj
dXRlRWRpdENvbW1hbmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlcXVlc3RG
b250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnNldEVkaXRhYmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZXJm
b3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OmRyYWdFbmRlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkU3RhcnREcmFn
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkcmFnQ2FuY2VsbGVkKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpwcm9jZXNzTmV4dFF1ZXVlZE1vdXNlRXZlbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNlbmRXaGVlbEV2ZW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpoYW5kbGVHZXN0dXJlRXZlbnQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OmhhbmRsZVByZXZlbnRhYmxlVG91Y2hFdmVudCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVzZXRQb3RlbnRpYWxUYXBTZWN1cml0eU9yaWdpbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aGFuZGxlVW5wcmV2ZW50YWJsZVRvdWNoRXZl
bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmhhbmRsZVRvdWNoRXZlbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNhbmNlbFBvaW50ZXIpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OnRvdWNoV2l0aElkZW50aWZpZXJXYXNSZW1vdmVkKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzY3JvbGxCeSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6Y2VudGVyU2VsZWN0aW9uSW5WaXNpYmxlQXJlYSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y29tbWl0UHJvdmlzaW9uYWxQYWdlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpzZXRVc2VyQWdlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlv
bnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEN1c3RvbVRleHRFbmNvZGlu
Z05hbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlc3RvcmVGcm9tU2Vzc2lv
blN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRUZXh0Wm9vbUZhY3Rv
cik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0UGFnZVpvb21GYWN0b3IpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNjYWxlUGFnZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2NhbGVQYWdlSW5WaWV3Q29vcmRpbmF0ZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNjYWxlVmlldyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6d2luZG93U2NyZWVuRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5OjphY2Nlc3NpYmlsaXR5U2V0dGluZ3NEaWRDaGFuZ2UpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnNldFVzZUZpeGVkTGF5b3V0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpzZXRGaXhlZExheW91dFNpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnNldEFsd2F5c1Nob3dzSG9yaXpvbnRhbFNjcm9sbGVyKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpzZXRBbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6Omxpc3RlbkZvckxheW91dE1pbGVzdG9uZXMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldFN1cHByZXNzU2Nyb2xsYmFyQW5pbWF0
aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0RW5hYmxlVmVydGljYWxS
dWJiZXJCYW5kaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRFbmFibGVI
b3Jpem9udGFsUnViYmVyQmFuZGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
c2V0QmFja2dyb3VuZEV4dGVuZHNCZXlvbmRQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpzZXRQYWdpbmF0aW9uTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6c2V0UGFnaW5hdGlvbkJlaGF2ZXNMaWtlQ29sdW1ucyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6c2V0UGFnZUxlbmd0aCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6c2V0R2FwQmV0d2VlblBhZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpz
ZXRQYWdpbmF0aW9uTGluZUdyaWRFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpmaW5kU3RyaW5nTWF0Y2hlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
ZmluZFN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0SW1hZ2VGb3JG
aW5kTWF0Y2gpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNlbGVjdEZpbmRNYXRj
aCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aW5kaWNhdGVGaW5kTWF0Y2gpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmhpZGVGaW5kVUkpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OmNvdW50U3RyaW5nTWF0Y2hlcyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6cmVwbGFjZU1hdGNoZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZVNjcmlwdFdvcmxkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpydW5KYXZhU2NyaXB0SW5GcmFtZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6Z2V0UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb24pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmdldFNvdXJjZUZvckZyYW1lKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpnZXRDb250ZW50c0FzU3RyaW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpnZXRCeXRlY29kZVByb2ZpbGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OmdldFNhbXBsaW5nUHJvZmlsZXJPdXRwdXQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OmdldENvbnRlbnRzQXNNSFRNTERhdGEpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OmdldFNlbGVjdGlvbk9yQ29udGVudHNBc1N0cmluZyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0U2VsZWN0aW9uQXNXZWJBcmNoaXZlRGF0
YSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0TWFpblJlc291cmNlRGF0YU9m
RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmdldFJlc291cmNlRGF0YUZy
b21GcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0V2ViQXJjaGl2ZU9m
RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmZvcmNlUmVwYWludCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cHJlZmVyZW5jZXNEaWRDaGFuZ2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6d2lsbFN1Ym1pdEZvcm0pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNob3dTaGFyZVNoZWV0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpzZXRNZWRpYVZvbHVtZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6c2V0TXV0ZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN0
b3BNZWRpYUNhcHR1cmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN0b3BBbGxN
ZWRpYVBsYXliYWNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzdXNwZW5kQWxs
TWVkaWFQbGF5YmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVzdW1lQWxs
TWVkaWFQbGF5YmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aGFuZGxlTWVk
aWFFdmVudCk6CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNhdmUpOgor
CiAyMDE5LTEyLTEwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAg
TWFrZSBwcmVjb25uZWN0VG8oKSdzIGNvbXBsZXRpb25IYW5kbGVyIG9wdGlvbmFsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9NZXNzYWdlU2VuZGVyLmggYi9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9NZXNzYWdlU2VuZGVyLmgKaW5kZXggNzcxNDQ4YTQ0ZDA4ODZk
ZDAxYmIwYzJkZTY0ZGM5YTQyODYyN2EyYS4uMjlmZTk4MTQyYzdmNGJiZWYxOWMwZWY5YjBkYmM0
NDFmNGMzOWE0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvTWVzc2Fn
ZVNlbmRlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL01lc3NhZ2VTZW5kZXIu
aApAQCAtNzIsOSArNzIsMTUgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEM+Ci0gICAgdm9pZCBzZW5kV2l0aEFzeW5jUmVwbHkoVCYmIG1lc3Nh
Z2UsIEMmJiBjb21wbGV0aW9uSGFuZGxlcikKKyAgICB2b2lkIHNlbmRXaXRoQXN5bmNSZXBseShU
JiYgbWVzc2FnZSwgQyYmIGNvbXBsZXRpb25IYW5kbGVyLCBPcHRpb25TZXQ8U2VuZE9wdGlvbj4g
c2VuZE9wdGlvbnMgPSB7IH0pCiAgICAgewotICAgICAgICBtZXNzYWdlU2VuZGVyQ29ubmVjdGlv
bigpLT5zZW5kV2l0aEFzeW5jUmVwbHkoV1RGTW92ZShtZXNzYWdlKSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlciksIG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkpOworICAgICAgICBzZW5k
V2l0aEFzeW5jUmVwbHkoV1RGTW92ZShtZXNzYWdlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
ciksIG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCksIHNlbmRPcHRpb25zKTsKKyAgICB9CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBDPgorICAgIHZvaWQgc2VuZFdpdGhB
c3luY1JlcGx5KFQmJiBtZXNzYWdlLCBDJiYgY29tcGxldGlvbkhhbmRsZXIsIHVpbnQ2NF90IGRl
c3RpbmF0aW9uSUQsIE9wdGlvblNldDxTZW5kT3B0aW9uPiBzZW5kT3B0aW9ucyA9IHsgfSkKKyAg
ICB7CisgICAgICAgIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCktPnNlbmRXaXRoQXN5bmNSZXBs
eShXVEZNb3ZlKG1lc3NhZ2UpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgZGVzdGluYXRp
b25JRCwgc2VuZE9wdGlvbnMpOwogICAgIH0KIAogICAgIHZpcnR1YWwgYm9vbCBzZW5kTWVzc2Fn
ZShzdGQ6OnVuaXF1ZV9wdHI8RW5jb2Rlcj4sIE9wdGlvblNldDxTZW5kT3B0aW9uPik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAppbmRleCA0ZDhmNmNmMmU0NjNkOTBh
ZTM4MWJlZGFjZTk2YWE4YWUwMjM5NjY3Li43MGVmYmZhM2U4N2EyYWJhY2M0NTE0NjQwZmRhM2Y3
N2ViNjgwZTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1Bh
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKQEAg
LTEyMTIsNyArMTIxMiw3IEBAIHZvaWQgV0tQYWdlU2V0UGFnZUxvYWRlckNsaWVudChXS1BhZ2VS
ZWYgcGFnZVJlZiwgY29uc3QgV0tQYWdlTG9hZGVyQ2xpZW50QmFzZSoKICAgICAgICAgbWlsZXN0
b25lcy5hZGQoV2ViQ29yZTo6RGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KTsKIAogICAg
IGlmIChtaWxlc3RvbmVzKQotICAgICAgICB3ZWJQYWdlUHJveHktPnByb2Nlc3MoKS5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpMaXN0ZW5Gb3JMYXlvdXRNaWxlc3RvbmVzKG1pbGVzdG9uZXMpLCB3
ZWJQYWdlUHJveHktPndlYlBhZ2VJRCgpKTsKKyAgICAgICAgd2ViUGFnZVByb3h5LT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpMaXN0ZW5Gb3JMYXlvdXRNaWxlc3RvbmVzKG1pbGVzdG9uZXMpKTsK
IAogICAgIHdlYlBhZ2VQcm94eS0+c2V0TG9hZGVyQ2xpZW50KFdURk1vdmUobG9hZGVyQ2xpZW50
KSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dl
YkF1dG9tYXRpb25TZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRp
b24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCmluZGV4IDczZjA4ODZmYTgxYzM3MTE3ZDBiNmE5
Mzc3N2NlZmJiZTU1OWUzMjIuLmVlYTFmZGNjN2NmYWU1ZjA1Y2UzMmUwNDYyMWY3MmMyOTc3ZWRj
N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0
b21hdGlvblNlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRp
b24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCkBAIC0zNzIsNyArMzcyLDcgQEAgdm9pZCBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6c3dpdGNoVG9Ccm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBi
cm93c2luZ0NvbnRleHQKIAogICAgIG1fY2xpZW50LT5yZXF1ZXN0U3dpdGNoVG9QYWdlKCp0aGlz
LCAqcGFnZSwgW2ZyYW1lSUQsIHBhZ2UgPSBtYWtlUmVmKCpwYWdlKSwgY2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKV0oKSB7CiAgICAgICAgIHBhZ2UtPnNldEZvY3VzKHRydWUpOwotICAgICAg
ICBwYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94
eTo6Rm9jdXNGcmFtZShwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCksIDApOworICAgICAgICBw
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpGb2N1c0ZyYW1l
KHBhZ2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlEKSwgMCk7CiAKICAgICAgICAgY2FsbGJhY2stPnNl
bmRTdWNjZXNzKCk7CiAgICAgfSk7CkBAIC05NDgsNyArOTQ4LDcgQEAgdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6ZXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb24oY29uc3QgU3RyaW5nJiBicm93
c2luZ0NvbnQKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gbV9uZXh0RXZhbHVhdGVKYXZhU2Ny
aXB0Q2FsbGJhY2tJRCsrOwogICAgIG1fZXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb25DYWxsYmFj
a3Muc2V0KGNhbGxiYWNrSUQsIFdURk1vdmUoY2FsbGJhY2spKTsKIAotICAgIHBhZ2UtPnByb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpFdmFsdWF0ZUph
dmFTY3JpcHRGdW5jdGlvbihwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgZnVuY3Rpb24sIGFy
Z3VtZW50c1ZlY3RvciwgZXhwZWN0c0ltcGxpY2l0Q2FsbGJhY2tBcmd1bWVudCwgY2FsbGJhY2tU
aW1lb3V0LCBjYWxsYmFja0lEKSwgMCk7CisgICAgcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViQXV0
b21hdGlvblNlc3Npb25Qcm94eTo6RXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb24ocGFnZS0+d2Vi
UGFnZUlEKCksIGZyYW1lSUQsIGZ1bmN0aW9uLCBhcmd1bWVudHNWZWN0b3IsIGV4cGVjdHNJbXBs
aWNpdENhbGxiYWNrQXJndW1lbnQsIGNhbGxiYWNrVGltZW91dCwgY2FsbGJhY2tJRCksIDApOwog
fQogCiB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkaWRFdmFsdWF0ZUphdmFTY3JpcHRGdW5j
dGlvbih1aW50NjRfdCBjYWxsYmFja0lELCBjb25zdCBTdHJpbmcmIHJlc3VsdCwgY29uc3QgU3Ry
aW5nJiBlcnJvclR5cGUpCkBAIC05ODcsMTcgKzk4NywxNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjpyZXNvbHZlQ2hpbGRGcmFtZUhhbmRsZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29u
dGV4dAogICAgIH07CiAKICAgICBpZiAob3B0aW9uYWxOb2RlSGFuZGxlKSB7Ci0gICAgICAgIHBh
Z2UtPnByb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25T
ZXNzaW9uUHJveHk6OlJlc29sdmVDaGlsZEZyYW1lV2l0aE5vZGVIYW5kbGUocGFnZS0+d2ViUGFn
ZUlEKCksIGZyYW1lSUQsICpvcHRpb25hbE5vZGVIYW5kbGUpLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CisgICAgICAgIHBhZ2UtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2Vi
QXV0b21hdGlvblNlc3Npb25Qcm94eTo6UmVzb2x2ZUNoaWxkRnJhbWVXaXRoTm9kZUhhbmRsZShw
YWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgKm9wdGlvbmFsTm9kZUhhbmRsZSksIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChv
cHRpb25hbE5hbWUpIHsKLSAgICAgICAgcGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6UmVzb2x2ZUNoaWxkRnJhbWVX
aXRoTmFtZShwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgKm9wdGlvbmFsTmFtZSksIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgcGFnZS0+c2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpSZXNvbHZlQ2hpbGRGcmFtZVdp
dGhOYW1lKHBhZ2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlELCAqb3B0aW9uYWxOYW1lKSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYg
KG9wdGlvbmFsT3JkaW5hbCkgewotICAgICAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpSZXNvbHZlQ2hpbGRG
cmFtZVdpdGhPcmRpbmFsKHBhZ2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlELCAqb3B0aW9uYWxPcmRp
bmFsKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgICAgICBwYWdlLT5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OlJlc29sdmVD
aGlsZEZyYW1lV2l0aE9yZGluYWwocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQsICpvcHRpb25h
bE9yZGluYWwpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTEwMjQsNyArMTAyNCw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246
OnJlc29sdmVQYXJlbnRGcmFtZUhhbmRsZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4CiAg
ICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcyhoYW5kbGVGb3JXZWJGcmFtZUlEKGZyYW1lSUQp
KTsKICAgICB9OwogCi0gICAgcGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6UmVzb2x2ZVBhcmVudEZyYW1lKHBhZ2Ut
PndlYlBhZ2VJRCgpLCBmcmFtZUlEKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAg
IHBhZ2UtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Q
cm94eTo6UmVzb2x2ZVBhcmVudEZyYW1lKHBhZ2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlEKSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiBzdGF0aWMgT3B0aW9uYWw8Q29vcmRpbmF0
ZVN5c3RlbT4gcHJvdG9jb2xTdHJpbmdUb0Nvb3JkaW5hdGVTeXN0ZW0oY29uc3QgU3RyaW5nJiBj
b29yZGluYXRlU3lzdGVtU3RyaW5nKQpAQCAtMTA4Niw3ICsxMDg2LDcgQEAgdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6Y29tcHV0ZUVsZW1lbnRMYXlvdXQoY29uc3QgU3RyaW5nJiBicm93c2lu
Z0NvbnRleHRIYW4KICAgICB9OwogCiAgICAgYm9vbCBzY3JvbGxJbnRvVmlld0lmTmVlZGVkID0g
b3B0aW9uYWxTY3JvbGxJbnRvVmlld0lmTmVlZGVkID8gKm9wdGlvbmFsU2Nyb2xsSW50b1ZpZXdJ
Zk5lZWRlZCA6IGZhbHNlOwotICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OkNvbXB1dGVFbGVtZW50TGF5b3V0
KHBhZ2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlELCBub2RlSGFuZGxlLCBzY3JvbGxJbnRvVmlld0lm
TmVlZGVkLCBjb29yZGluYXRlU3lzdGVtLnZhbHVlKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CisgICAgcGFnZS0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRvbWF0
aW9uU2Vzc2lvblByb3h5OjpDb21wdXRlRWxlbWVudExheW91dChwYWdlLT53ZWJQYWdlSUQoKSwg
ZnJhbWVJRCwgbm9kZUhhbmRsZSwgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCwgY29vcmRpbmF0ZVN5
c3RlbS52YWx1ZSgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdl
YkF1dG9tYXRpb25TZXNzaW9uOjpzZWxlY3RPcHRpb25FbGVtZW50KGNvbnN0IFN0cmluZyYgYnJv
d3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIGZyYW1lSGFuZGxlLCBjb25zdCBTdHJp
bmcmIG5vZGVIYW5kbGUsIFJlZjxTZWxlY3RPcHRpb25FbGVtZW50Q2FsbGJhY2s+JiYgY2FsbGJh
Y2spCkBAIC0xMTA5LDcgKzExMDksNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZWxl
Y3RPcHRpb25FbGVtZW50KGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZAogICAgICAg
ICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoKTsKICAgICB9OwogCi0gICAgcGFnZS0+cHJvY2Vzcygp
LnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6
U2VsZWN0T3B0aW9uRWxlbWVudChwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgbm9kZUhhbmRs
ZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBwYWdlLT5zZW5kV2l0aEFzeW5j
UmVwbHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OlNlbGVjdE9wdGlvbkVs
ZW1lbnQocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQsIG5vZGVIYW5kbGUpLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmlzU2hv
d2luZ0phdmFTY3JpcHREaWFsb2coSW5zcGVjdG9yOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBib29sKiByZXN1bHQpCkBAIC0x
MjY5LDcgKzEyNjksNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZXRGaWxlc0Zvcklu
cHV0RmlsZVVwbG9hZChjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udAogICAgICAgICBjYWxsYmFj
ay0+c2VuZFN1Y2Nlc3MoKTsKICAgICB9OwogCi0gICAgcGFnZS0+cHJvY2VzcygpLnNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6U2V0RmlsZXNG
b3JJbnB1dEZpbGVVcGxvYWQocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQsIG5vZGVIYW5kbGUs
IFdURk1vdmUobmV3RmlsZUxpc3QpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAg
IHBhZ2UtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Q
cm94eTo6U2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxvYWQocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1l
SUQsIG5vZGVIYW5kbGUsIFdURk1vdmUobmV3RmlsZUxpc3QpKSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogfQogCiBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRp
b246OkNvb2tpZT4gYnVpbGRPYmplY3RGb3JDb29raWUoY29uc3QgV2ViQ29yZTo6Q29va2llJiBj
b29raWUpCkBAIC0xMzEyLDcgKzEzMTIsNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpn
ZXRBbGxDb29raWVzKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBSZQogICAg
ICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoYnVpbGRBcnJheUZvckNvb2tpZXMoY29va2llcykp
OwogICAgIH07CiAKLSAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3Nh
Z2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpHZXRDb29raWVzRm9yRnJhbWUocGFnZS0+
d2ViUGFnZUlEKCksIFdURjo6bnVsbG9wdCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
KyAgICBwYWdlLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNz
aW9uUHJveHk6OkdldENvb2tpZXNGb3JGcmFtZShwYWdlLT53ZWJQYWdlSUQoKSwgV1RGOjpudWxs
b3B0KSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYkF1dG9tYXRp
b25TZXNzaW9uOjpkZWxldGVTaW5nbGVDb29raWUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRl
eHRIYW5kbGUsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSwgUmVmPERlbGV0ZVNpbmdsZUNvb2tp
ZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQpAQCAtMTMzMCw3ICsxMzMwLDcgQEAgdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6ZGVsZXRlU2luZ2xlQ29va2llKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdD
b250ZXh0SGFuZGwKICAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKCk7CiAgICAgfTsKIAot
ICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dG9t
YXRpb25TZXNzaW9uUHJveHk6OkRlbGV0ZUNvb2tpZShwYWdlLT53ZWJQYWdlSUQoKSwgV1RGOjpu
dWxsb3B0LCBjb29raWVOYW1lKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIHBh
Z2UtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94
eTo6RGVsZXRlQ29va2llKHBhZ2UtPndlYlBhZ2VJRCgpLCBXVEY6Om51bGxvcHQsIGNvb2tpZU5h
bWUpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHN0YXRpYyBTdHJpbmcgZG9t
YWluQnlBZGRpbmdEb3RQcmVmaXhJZk5lZWRlZChTdHJpbmcgZG9tYWluKQpAQCAtMjAwOCw3ICsy
MDA4LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6dGFrZVNjcmVlbnNob3QoY29uc3Qg
U3RyaW5nJiBoYW5kbGUsIGNvbnN0IFN0cmluZyogb3AKICAgICB1aW50NjRfdCBjYWxsYmFja0lE
ID0gbV9uZXh0U2NyZWVuc2hvdENhbGxiYWNrSUQrKzsKICAgICBtX3NjcmVlbnNob3RDYWxsYmFj
a3Muc2V0KGNhbGxiYWNrSUQsIFdURk1vdmUoY2FsbGJhY2spKTsKIAotICAgIHBhZ2UtPnByb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpUYWtlU2NyZWVu
c2hvdChwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgbm9kZUhhbmRsZSwgc2Nyb2xsSW50b1Zp
ZXdJZk5lZWRlZCwgY2xpcFRvVmlld3BvcnQsIGNhbGxiYWNrSUQpLCAwKTsKKyAgICBwYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpUYWtlU2NyZWVuc2hvdChw
YWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgbm9kZUhhbmRsZSwgc2Nyb2xsSW50b1ZpZXdJZk5l
ZWRlZCwgY2xpcFRvVmlld3BvcnQsIGNhbGxiYWNrSUQpLCAwKTsKIH0KIAogdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6ZGlkVGFrZVNjcmVlbnNob3QodWludDY0X3QgY2FsbGJhY2tJRCwgY29u
c3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGltYWdlRGF0YUhhbmRsZSwgY29uc3QgU3RyaW5n
JiBlcnJvclR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVX
ZWJJbnNwZWN0b3JQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVXZWJJ
bnNwZWN0b3JQcm94eS5jcHAKaW5kZXggYzBlNDUyNzQ4ZDE4YTEzMTIyZGEwMGJlZTU0YjUyMDli
ODY2MTY4Ni4uZmNkYWUxNjUwNTZiNzQ5YmI1YzQwNWIwMjk4MjFlMjkxMDg3MDZhMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmNw
cApAQCAtNjgsNyArNjgsNyBAQCB2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpsb2FkKGNv
bnN0IFN0cmluZyYgZGVidWdnYWJsZVR5cGUsIGNvbnN0IFN0cmluZyYgYgogICAgIG1fZGVidWdn
YWJsZVR5cGUgPSBkZWJ1Z2dhYmxlVHlwZTsKICAgICBtX2JhY2tlbmRDb21tYW5kc1VSTCA9IGJh
Y2tlbmRDb21tYW5kc1VSTDsKIAotICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQo
TWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJOjpJbml0aWFsaXplKGRlYnVnZ2FibGVUeXBl
LCBiYWNrZW5kQ29tbWFuZHNVUkwpLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAg
ICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJOjpJ
bml0aWFsaXplKGRlYnVnZ2FibGVUeXBlLCBiYWNrZW5kQ29tbWFuZHNVUkwpKTsKICAgICBtX2lu
c3BlY3RvclBhZ2UtPmxvYWRSZXF1ZXN0KFVSTChVUkwoKSwgV2ViSW5zcGVjdG9yUHJveHk6Omlu
c3BlY3RvclBhZ2VVUkwoKSkpOwogfQogCkBAIC05MCw3ICs5MCw3IEBAIHZvaWQgUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHk6OnNob3coKQogCiB2b2lkIFJlbW90ZVdlYkluc3BlY3RvclByb3h5Ojpz
ZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewotICAgIG1faW5z
cGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJ
OjpTZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVzc2FnZSksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFn
ZUlEKCkpOworICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5z
cGVjdG9yVUk6OlNlbmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlKSk7CiB9CiAKIHZvaWQgUmVt
b3RlV2ViSW5zcGVjdG9yUHJveHk6OmZyb250ZW5kRGlkQ2xvc2UoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJv
eHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvblJlcXVl
c3RNYW5hZ2VyUHJveHkuY3BwCmluZGV4IDdmM2JkMTIyNWY4N2FiZGU3ZTJkNjQ1YTQ3ZTI5YWMx
ZTEyYmU0ZWIuLjdiN2RjNWY4OGQ4NWEwYjYwMjFmN2M3YjRjNzJmYjZjODg3Y2I0YmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0
TWFuYWdlclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQ
ZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKQEAgLTg0LDcgKzg0LDcgQEAgVXNlck1l
ZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OlVzZXJNZWRpYVBlcm1pc3Npb25SZXF1
ZXN0TWFuYWdlclByb3h5KFcKIAogVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJv
eHk6On5Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eSgpCiB7Ci0gICAgbV9w
YWdlLnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTdG9wTWVkaWFDYXB0dXJlIHsg
fSwgbV9wYWdlLndlYlBhZ2VJRCgpKTsKKyAgICBtX3BhZ2Uuc2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6U3RvcE1lZGlhQ2FwdHVyZSB7IH0pOwogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAg
VXNlck1lZGlhUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpLnJldm9rZVNhbmRib3hFeHRlbnNp
b25zSWZOZWVkZWQocGFnZSgpLnByb2Nlc3MoKSk7CiAgICAgcHJveGllcygpLnJlbW92ZSh0aGlz
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkVkaXRDb21tYW5kUHJv
eHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViRWRpdENvbW1hbmRQcm94eS5jcHAK
aW5kZXggMGZlNmQ4MzQ5ODA5OGM5N2U0NjdiMzY4NWIzZDZiMzY3ZTcyY2Q2Ny4uMGRiZTBhZmI0
MzNmMDIxNzE1OWUxNDZmNGJjMDg1M2VkNTE2ZmQ4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViRWRpdENvbW1hbmRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViRWRpdENvbW1hbmRQcm94eS5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBX
ZWJFZGl0Q29tbWFuZFByb3h5Ojp1bmFwcGx5KCkKICAgICBpZiAoIW1fcGFnZSB8fCAhbV9wYWdl
LT5oYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3BhZ2UtPnBy
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpVbmFwcGx5RWRpdENvbW1hbmQobV9jb21t
YW5kSUQpLCBtX3BhZ2UtPndlYlBhZ2VJRCgpLCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVz
c2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpVbmFwcGx5RWRpdENvbW1hbmQobV9jb21tYW5kSUQpLCBJUEM6OlNlbmRP
cHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CiAgICAg
bV9wYWdlLT5yZWdpc3RlckVkaXRDb21tYW5kKCp0aGlzLCBVbmRvT3JSZWRvOjpSZWRvKTsKIH0K
IApAQCAtNjQsNyArNjQsNyBAQCB2b2lkIFdlYkVkaXRDb21tYW5kUHJveHk6OnJlYXBwbHkoKQog
ICAgIGlmICghbV9wYWdlIHx8ICFtX3BhZ2UtPmhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIG1fcGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OlJlYXBwbHlFZGl0Q29tbWFuZChtX2NvbW1hbmRJRCksIG1fcGFnZS0+d2ViUGFnZUlEKCksIElQ
Qzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5
KTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJlYXBwbHlFZGl0Q29tbWFu
ZChtX2NvbW1hbmRJRCksIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5X
YWl0aW5nRm9yU3luY1JlcGx5KTsKICAgICBtX3BhZ2UtPnJlZ2lzdGVyRWRpdENvbW1hbmQoKnRo
aXMsIFVuZG9PclJlZG86OlVuZG8pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJGcmFtZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZy
YW1lUHJveHkuY3BwCmluZGV4IGMxYzk1OGJkNDgxNGZhNDBmOTI1NDY0YzNlYmMyMWRmNjU2MGM0
ZjAuLjRkMzJmMDM1ZjBhNDJkOWNiNmQzYzlkYmM2ZjQyMDkwYzNkYjIyMzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUHJveHkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUHJveHkuY3BwCkBAIC04Myw3ICs4Myw3IEBAIHZvaWQg
V2ViRnJhbWVQcm94eTo6bG9hZFVSTChjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiByZWZl
cnJlcikKICAgICBpZiAoIW1fcGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wYWdlLT5w
cm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6TG9hZFVSTEluRnJhbWUodXJsLCByZWZl
cnJlciwgbV9mcmFtZUlEKSwgbV9wYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpMb2FkVVJMSW5GcmFtZSh1cmwsIHJlZmVycmVyLCBtX2ZyYW1l
SUQpKTsKIH0KIAogdm9pZCBXZWJGcmFtZVByb3h5Ojpsb2FkRGF0YShjb25zdCBJUEM6OkRhdGFS
ZWZlcmVuY2UmIGRhdGEsIGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsIGNvbnN0IFN0cmluZyYgZW5j
b2RpbmdOYW1lLCBjb25zdCBVUkwmIGJhc2VVUkwpCkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgV2Vi
RnJhbWVQcm94eTo6bG9hZERhdGEoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhLCBjb25z
dCBTdHJpbmcmIE1JTUVUCiAgICAgaWYgKCFtX3BhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAg
IG1fcGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkxvYWREYXRhSW5GcmFt
ZShkYXRhLCBNSU1FVHlwZSwgZW5jb2RpbmdOYW1lLCBiYXNlVVJMLCBtX2ZyYW1lSUQpLCBtX3Bh
Z2UtPndlYlBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Okxv
YWREYXRhSW5GcmFtZShkYXRhLCBNSU1FVHlwZSwgZW5jb2RpbmdOYW1lLCBiYXNlVVJMLCBtX2Zy
YW1lSUQpKTsKIH0KIAogdm9pZCBXZWJGcmFtZVByb3h5OjpzdG9wTG9hZGluZygpIGNvbnN0CkBA
IC0xMDMsNyArMTAzLDcgQEAgdm9pZCBXZWJGcmFtZVByb3h5OjpzdG9wTG9hZGluZygpIGNvbnN0
CiAgICAgaWYgKCFtX3BhZ2UtPmhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIG1fcGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlN0b3BMb2Fk
aW5nRnJhbWUobV9mcmFtZUlEKSwgbV9wYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTdG9wTG9hZGluZ0ZyYW1lKG1fZnJhbWVJRCkpOwogfQog
ICAgIAogYm9vbCBXZWJGcmFtZVByb3h5OjpjYW5Qcm92aWRlU291cmNlKCkgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5LmNwcAppbmRleCA3NDJjNzA4
MDZiOTU3ZjY3YzVlNjA1Nzk3M2ZmYTJmZjVmNmNhZjEyLi41M2FiMzMwZjZjOGFmYjUzOWI2YmNm
M2MxZWM4YjA5NzE4YmU2MmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJJbnNwZWN0b3JQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViSW5z
cGVjdG9yUHJveHkuY3BwCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKICAgICBpZiAo
IW1faW5zcGVjdG9yUGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9pbnNwZWN0b3JQYWdl
LT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNlbmRNZXNzYWdlVG9G
cm9udGVuZChtZXNzYWdlKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgbV9p
bnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKG1lc3NhZ2UpKTsKIH0KIAogLy8gUHVibGljIEFQSXMKQEAgLTEyOCw4ICsxMjgs
OCBAQCB2b2lkIFdlYkluc3BlY3RvclByb3h5Ojpjb25uZWN0KCkKIAogICAgIGNyZWF0ZUZyb250
ZW5kUGFnZSgpOwogCi0gICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcjo6Tm90aWZ5TmVlZERlYnVnZ2VyQnJl
YWsoKSwgMCk7Ci0gICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yOjpTaG93KCksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlEKCkpOworICAg
IG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9ySW50ZXJydXB0RGlz
cGF0Y2hlcjo6Tm90aWZ5TmVlZERlYnVnZ2VyQnJlYWsoKSwgMCk7CisgICAgbV9pbnNwZWN0ZWRQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3coKSk7CiB9CiAKIHZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnNob3coKQpAQCAtMTYzLDcgKzE2Myw3IEBAIHZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OmNsb3NlKCkKICAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yOjpDbG9zZSgpLCBtX2luc3BlY3RlZFBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICBt
X2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6Q2xvc2UoKSk7CiAK
ICAgICBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwogfQpAQCAtMjEyLDcgKzIxMiw3IEBA
IHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnVwZGF0ZUZvck5ld1BhZ2VQcm9jZXNzKFdlYlBhZ2VQ
cm94eSogaW5zcGVjdGVkUGFnZSkKICAgICBtX2luc3BlY3RlZFBhZ2UtPnByb2Nlc3MoKS5hZGRN
ZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlEKCksICp0aGlzKTsKIAogICAgIGlm
IChtX2luc3BlY3RvclBhZ2UpCi0gICAgICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNl
bmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpVcGRhdGVDb25uZWN0aW9uKCksIG1faW5zcGVj
dG9yUGFnZS0+d2ViUGFnZUlEKCkpOworICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3RvclVJOjpVcGRhdGVDb25uZWN0aW9uKCkpOwogfQogCiB2b2lkIFdl
Ykluc3BlY3RvclByb3h5OjpzZXRGcm9udGVuZENvbm5lY3Rpb24oSVBDOjpBdHRhY2htZW50IGNv
bm5lY3Rpb25JZGVudGlmaWVyKQpAQCAtMjIwLDcgKzIyMCw3IEBAIHZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6OnNldEZyb250ZW5kQ29ubmVjdGlvbihJUEM6OkF0dGFjaG1lbnQgY29ubmVjdGlvbklk
ZW50aWZpCiAgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAg
IG1faW5zcGVjdGVkUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6
U2V0RnJvbnRlbmRDb25uZWN0aW9uKGNvbm5lY3Rpb25JZGVudGlmaWVyKSwgbV9pbnNwZWN0ZWRQ
YWdlLT53ZWJQYWdlSUQoKSk7CisgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3I6OlNldEZyb250ZW5kQ29ubmVjdGlvbihjb25uZWN0aW9uSWRlbnRpZmllcikp
OwogfQogCiB2b2lkIFdlYkluc3BlY3RvclByb3h5OjpzaG93Q29uc29sZSgpCkBAIC0yMzAsNyAr
MjMwLDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2hvd0NvbnNvbGUoKQogCiAgICAgY3Jl
YXRlRnJvbnRlbmRQYWdlKCk7CiAKLSAgICBtX2luc3BlY3RlZFBhZ2UtPnByb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3dDb25zb2xlKCksIG1faW5zcGVjdGVkUGFnZS0+
d2ViUGFnZUlEKCkpOworICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yOjpTaG93Q29uc29sZSgpKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2hv
d1Jlc291cmNlcygpCkBAIC0yNDAsNyArMjQwLDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
c2hvd1Jlc291cmNlcygpCiAKICAgICBjcmVhdGVGcm9udGVuZFBhZ2UoKTsKIAotICAgIG1faW5z
cGVjdGVkUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2hvd1Jl
c291cmNlcygpLCBtX2luc3BlY3RlZFBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICBtX2luc3BlY3Rl
ZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2hvd1Jlc291cmNlcygpKTsKIH0K
IAogdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2hvd01haW5SZXNvdXJjZUZvckZyYW1lKFdlYkZy
YW1lUHJveHkqIGZyYW1lKQpAQCAtMjUwLDcgKzI1MCw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShXZWJGcmFtZVByb3h5KiBmcmFtZSkKIAogICAg
IGNyZWF0ZUZyb250ZW5kUGFnZSgpOwogCi0gICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCku
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTaG93TWFpblJlc291cmNlRm9yRnJhbWUoZnJh
bWUtPmZyYW1lSUQoKSksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlEKCkpOworICAgIG1faW5z
cGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTaG93TWFpblJlc291cmNl
Rm9yRnJhbWUoZnJhbWUtPmZyYW1lSUQoKSkpOwogfQogCiB2b2lkIFdlYkluc3BlY3RvclByb3h5
OjphdHRhY2hCb3R0b20oKQpAQCAtMjgxLDE5ICsyODEsMTkgQEAgdm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6YXR0YWNoKEF0dGFjaG1lbnRTaWRlIHNpZGUpCiAgICAgaWYgKG1faXNWaXNpYmxlKQog
ICAgICAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5zZXRJbnNwZWN0b3JTdGFydHNBdHRh
Y2hlZCh0cnVlKTsKIAotICAgIG1faW5zcGVjdGVkUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2Fn
ZXM6OldlYkluc3BlY3Rvcjo6U2V0QXR0YWNoZWQodHJ1ZSksIG1faW5zcGVjdGVkUGFnZS0+d2Vi
UGFnZUlEKCkpOworICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVj
dG9yOjpTZXRBdHRhY2hlZCh0cnVlKSk7CiAKICAgICBzd2l0Y2ggKG1fYXR0YWNobWVudFNpZGUp
IHsKICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpCb3R0b206Ci0gICAgICAgIG1faW5zcGVjdG9y
UGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZEJv
dHRvbSgpLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICAgICAgbV9pbnNwZWN0
b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNoZWRCb3R0b20oKSk7
CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6UmlnaHQ6Ci0gICAg
ICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clVJOjpBdHRhY2hlZFJpZ2h0KCksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOworICAg
ICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRh
Y2hlZFJpZ2h0KCkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQXR0YWNobWVudFNpZGU6
OkxlZnQ6Ci0gICAgICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZExlZnQoKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdl
SUQoKSk7CisgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVj
dG9yVUk6OkF0dGFjaGVkTGVmdCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0zMTAs
OCArMzEwLDggQEAgdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6ZGV0YWNoKCkKICAgICBpZiAobV9p
c1Zpc2libGUpCiAgICAgICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLnNldEluc3BlY3Rv
clN0YXJ0c0F0dGFjaGVkKGZhbHNlKTsKIAotICAgIG1faW5zcGVjdGVkUGFnZS0+cHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2V0QXR0YWNoZWQoZmFsc2UpLCBtX2luc3Bl
Y3RlZFBhZ2UtPndlYlBhZ2VJRCgpKTsKLSAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5z
ZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RGV0YWNoZWQoKSwgbV9pbnNwZWN0b3JQYWdl
LT53ZWJQYWdlSUQoKSk7CisgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJ
bnNwZWN0b3I6OlNldEF0dGFjaGVkKGZhbHNlKSk7CisgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RGV0YWNoZWQoKSk7CiAKICAgICBwbGF0Zm9ybURl
dGFjaCgpOwogfQpAQCAtMzQ0LDkgKzM0NCw5IEBAIHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnRv
Z2dsZVBhZ2VQcm9maWxpbmcoKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9pc1Byb2Zp
bGluZ1BhZ2UpCi0gICAgICAgIG1faW5zcGVjdGVkUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2Fn
ZXM6OldlYkluc3BlY3Rvcjo6U3RvcFBhZ2VQcm9maWxpbmcoKSwgbV9pbnNwZWN0ZWRQYWdlLT53
ZWJQYWdlSUQoKSk7CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yOjpTdG9wUGFnZVByb2ZpbGluZygpKTsKICAgICBlbHNlCi0gICAgICAgIG1faW5z
cGVjdGVkUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U3RhcnRQ
YWdlUHJvZmlsaW5nKCksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlEKCkpOworICAgICAgICBt
X2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U3RhcnRQYWdlUHJv
ZmlsaW5nKCkpOwogfQogCiB2b2lkIFdlYkluc3BlY3RvclByb3h5Ojp0b2dnbGVFbGVtZW50U2Vs
ZWN0aW9uKCkKQEAgLTM1NiwxMCArMzU2LDEwIEBAIHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnRv
Z2dsZUVsZW1lbnRTZWxlY3Rpb24oKQogCiAgICAgaWYgKG1fZWxlbWVudFNlbGVjdGlvbkFjdGl2
ZSkgewogICAgICAgICBtX2lnbm9yZUVsZW1lbnRTZWxlY3Rpb25DaGFuZ2UgPSB0cnVlOwotICAg
ICAgICBtX2luc3BlY3RlZFBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0
b3I6OlN0b3BFbGVtZW50U2VsZWN0aW9uKCksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlEKCkp
OworICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6
U3RvcEVsZW1lbnRTZWxlY3Rpb24oKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgY29ubmVjdCgp
OwotICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJJ
bnNwZWN0b3I6OlN0YXJ0RWxlbWVudFNlbGVjdGlvbigpLCBtX2luc3BlY3RlZFBhZ2UtPndlYlBh
Z2VJRCgpKTsKKyAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3I6OlN0YXJ0RWxlbWVudFNlbGVjdGlvbigpKTsKICAgICB9CiB9CiAKQEAgLTQxMiw3ICs0
MTIsNyBAQCB2b2lkIFdlYkluc3BlY3RvclByb3h5OjpvcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVu
ZChib29sIGNhbkF0dGFjaCwgYm9vbCB1bmRlclRlcwogICAgIGlmICghbV9pbnNwZWN0b3JQYWdl
KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RXN0YWJsaXNoQ29ubmVjdGlvbihtX2luc3BlY3Rl
ZFBhZ2UtPmlkZW50aWZpZXIoKSwgbV91bmRlclRlc3QsIGluc3BlY3Rpb25MZXZlbCgpKSwgbV9p
bnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RXN0YWJsaXNoQ29ubmVjdGlvbihtX2luc3BlY3RlZFBh
Z2UtPmlkZW50aWZpZXIoKSwgbV91bmRlclRlc3QsIGluc3BlY3Rpb25MZXZlbCgpKSk7CiAKICAg
ICBBU1NFUlQoIW1faXNBY3RpdmVGcm9udGVuZCk7CiAgICAgbV9pc0FjdGl2ZUZyb250ZW5kID0g
dHJ1ZTsKQEAgLTQyMywyNiArNDIzLDI2IEBAIHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6Om9wZW5M
b2NhbEluc3BlY3RvckZyb250ZW5kKGJvb2wgY2FuQXR0YWNoLCBib29sIHVuZGVyVGVzCiAgICAg
ICAgIG1faXNBdHRhY2hlZCA9IHNob3VsZE9wZW5BdHRhY2hlZCgpOwogICAgICAgICBtX2F0dGFj
aG1lbnRTaWRlID0gc3RhdGljX2Nhc3Q8QXR0YWNobWVudFNpZGU+KGluc3BlY3RvclBhZ2VQcmVm
ZXJlbmNlcygpLmluc3BlY3RvckF0dGFjaG1lbnRTaWRlKCkpOwogCi0gICAgICAgIG1faW5zcGVj
dGVkUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2V0QXR0YWNo
ZWQobV9pc0F0dGFjaGVkKSwgbV9pbnNwZWN0ZWRQYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgICAg
IG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTZXRBdHRhY2hl
ZChtX2lzQXR0YWNoZWQpKTsKIAogICAgICAgICBpZiAobV9pc0F0dGFjaGVkKSB7CiAgICAgICAg
ICAgICBzd2l0Y2ggKG1fYXR0YWNobWVudFNpZGUpIHsKICAgICAgICAgICAgIGNhc2UgQXR0YWNo
bWVudFNpZGU6OkJvdHRvbToKLSAgICAgICAgICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNoZWRCb3R0b20oKSwgbV9p
bnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgICAgICAgICAgICAgbV9pbnNwZWN0b3JQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNoZWRCb3R0b20oKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgQXR0YWNobWVudFNpZGU6
OlJpZ2h0OgotICAgICAgICAgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQo
TWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZFJpZ2h0KCksIG1faW5zcGVjdG9yUGFn
ZS0+d2ViUGFnZUlEKCkpOworICAgICAgICAgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkUmlnaHQoKSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkxlZnQ6Ci0gICAg
ICAgICAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yVUk6OkF0dGFjaGVkTGVmdCgpLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgp
KTsKKyAgICAgICAgICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYklu
c3BlY3RvclVJOjpBdHRhY2hlZExlZnQoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5w
cm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkRldGFjaGVkKCksIG1faW5z
cGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOworICAgICAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RGV0YWNoZWQoKSk7CiAKLSAgICAgICAgbV9p
bnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNl
dERvY2tpbmdVbmF2YWlsYWJsZSghbV9jYW5BdHRhY2gpLCBtX2luc3BlY3RvclBhZ2UtPndlYlBh
Z2VJRCgpKTsKKyAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JVSTo6U2V0RG9ja2luZ1VuYXZhaWxhYmxlKCFtX2NhbkF0dGFjaCkpOwogICAgIH0KIAog
ICAgIC8vIE5vdGlmeSBXZWJLaXQgY2xpZW50IHdoZW4gYSBsb2NhbCBpbnNwZWN0b3IgYXR0YWNo
ZXMgc28gdGhhdCBpdCBtYXkgaW5zdGFsbCBkZWxlZ2F0ZXMgcHJpb3IgdG8gdGhlIF9XS0luc3Bl
Y3RvciBsb2FkaW5nIGl0cyBmcm9udGVuZC4KQEAgLTQ2NSw3ICs0NjUsNyBAQCB2b2lkIFdlYklu
c3BlY3RvclByb3h5OjpvcGVuKCkKIAogICAgIFNldEZvclNjb3BlPGJvb2w+IGlzT3BlbmluZyht
X2lzT3BlbmluZywgdHJ1ZSk7CiAgICAgbV9pc1Zpc2libGUgPSB0cnVlOwotICAgIG1faW5zcGVj
dG9yUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTZXRJc1Zp
c2libGUobV9pc1Zpc2libGUpLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICBt
X2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTZXRJc1Zpc2li
bGUobV9pc1Zpc2libGUpKTsKIAogICAgIGlmIChtX2lzQXR0YWNoZWQpCiAgICAgICAgIHBsYXRm
b3JtQXR0YWNoKCk7CkBAIC00OTIsNyArNDkyLDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
Y2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQogCiAgICAgdW50cmFja0luc3BlY3RvclBhZ2Uo
bV9pbnNwZWN0b3JQYWdlKTsKIAotICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQo
TWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTZXRJc1Zpc2libGUobV9pc1Zpc2libGUpLCBtX2lu
c3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3RvclVJOjpTZXRJc1Zpc2libGUobV9pc1Zpc2libGUpKTsKICAgICBt
X2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6
OldlYkluc3BlY3RvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVkUGFn
ZS0+aWRlbnRpZmllcigpKTsKIAogICAgIGlmIChtX2lzQWN0aXZlRnJvbnRlbmQpIHsKQEAgLTU2
MSw3ICs1NjEsNyBAQCB2b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2hBdmFpbGFiaWxpdHlD
aGFuZ2VkKGJvb2wgYXZhaWxhYmxlKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9pbnNw
ZWN0b3JQYWdlICYmICFtX3VuZGVyVGVzdCkKLSAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNldERvY2tpbmdVbmF2YWlsYWJs
ZSghbV9jYW5BdHRhY2gpLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICAgICAg
bV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U2V0RG9ja2lu
Z1VuYXZhaWxhYmxlKCFtX2NhbkF0dGFjaCkpOwogCiAgICAgcGxhdGZvcm1BdHRhY2hBdmFpbGFi
aWxpdHlDaGFuZ2VkKG1fY2FuQXR0YWNoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwCmluZGV4IDk2MzhhMDM3MjJkMDkyOWJkMWUzYmM3MWM1YjYzN2Y1M2ExNmEy
OGMuLjA1ODc0ZWRkNjM5YzA4MGY3MGM0MDY0ZWNiZTdmOTRhZmVlMTQwOGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtNjMzLDcgKzYzMyw3IEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpzZXRVSUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpVSUNsaWVudD4m
JiB1aUNsaWVudCkKICAgICBtX3VpQ2xpZW50ID0gV1RGTW92ZSh1aUNsaWVudCk7CiAKICAgICBp
ZiAoaGFzUnVubmluZ1Byb2Nlc3MoKSkKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpTZXRDYW5SdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwobV91aUNsaWVudC0+
Y2FuUnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKCkpLCBtX3dlYlBhZ2VJRCk7CisgICAgICAg
IHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldENhblJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5l
bChtX3VpQ2xpZW50LT5jYW5SdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoKSkpOwogCiAgICAg
c2V0Q2FuUnVuTW9kYWwobV91aUNsaWVudC0+Y2FuUnVuTW9kYWwoKSk7CiAgICAgc2V0TmVlZHNG
b250QXR0cmlidXRlcyhtX3VpQ2xpZW50LT5uZWVkc0ZvbnRBdHRyaWJ1dGVzKCkpOwpAQCAtNjUw
LDcgKzY1MCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRJY29uTG9hZGluZ0NsaWVudChzdGQ6
OnVuaXF1ZV9wdHI8QVBJOjpJY29uTG9hZGluZ0NsaWVudD4mCiAgICAgaWYgKCFoYXNSdW5uaW5n
UHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OlNldFVzZUljb25Mb2FkaW5nQ2xpZW50KGhhc0NsaWVudCksIG1fd2ViUGFn
ZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRVc2VJY29uTG9hZGluZ0NsaWVu
dChoYXNDbGllbnQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldFBhZ2VMb2FkU3RhdGVP
YnNlcnZlcihzdGQ6OnVuaXF1ZV9wdHI8UGFnZUxvYWRTdGF0ZTo6T2JzZXJ2ZXI+JiYgb2JzZXJ2
ZXIpCkBAIC05NDUsNyArOTQ1LDcgQEAgUmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4gV2ViUGFnZVBy
b3h5OjpsYXVuY2hQcm9jZXNzRm9yUmVsb2FkKCkKICAgICB9CiAKICAgICAvLyBXZSBhbGxvdyBz
dGFsZSBjb250ZW50IHdoZW4gcmVsb2FkaW5nIGEgV2ViUHJvY2VzcyB0aGF0J3MgYmVlbiBraWxs
ZWQgb3IgY3Jhc2hlZC4KLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Okdv
VG9CYWNrRm9yd2FyZEl0ZW0obmF2aWdhdGlvbi0+bmF2aWdhdGlvbklEKCksIG1fYmFja0Zvcndh
cmRMaXN0LT5jdXJyZW50SXRlbSgpLT5pdGVtSUQoKSwgRnJhbWVMb2FkVHlwZTo6SW5kZXhlZEJh
Y2tGb3J3YXJkLCBTaG91bGRUcmVhdEFzQ29udGludWluZ0xvYWQ6Ok5vLCBXVEY6Om51bGxvcHQp
LCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R29Ub0JhY2tGb3J3
YXJkSXRlbShuYXZpZ2F0aW9uLT5uYXZpZ2F0aW9uSUQoKSwgbV9iYWNrRm9yd2FyZExpc3QtPmN1
cnJlbnRJdGVtKCktPml0ZW1JRCgpLCBGcmFtZUxvYWRUeXBlOjpJbmRleGVkQmFja0ZvcndhcmQs
IFNob3VsZFRyZWF0QXNDb250aW51aW5nTG9hZDo6Tm8sIFdURjo6bnVsbG9wdCkpOwogICAgIG1f
cHJvY2Vzcy0+cmVzcG9uc2l2ZW5lc3NUaW1lcigpLnN0YXJ0KCk7CiAKICAgICByZXR1cm4gbmF2
aWdhdGlvbjsKQEAgLTk2OCw3ICs5NjgsNyBAQCBSZWZQdHI8QVBJOjpOYXZpZ2F0aW9uPiBXZWJQ
YWdlUHJveHk6OmxhdW5jaFByb2Nlc3NXaXRoSXRlbShXZWJCYWNrRm9yd2FyZExpc3RJdAogCiAg
ICAgYXV0byBuYXZpZ2F0aW9uID0gbV9uYXZpZ2F0aW9uU3RhdGUtPmNyZWF0ZUJhY2tGb3J3YXJk
TmF2aWdhdGlvbihpdGVtLCBtX2JhY2tGb3J3YXJkTGlzdC0+Y3VycmVudEl0ZW0oKSwgRnJhbWVM
b2FkVHlwZTo6SW5kZXhlZEJhY2tGb3J3YXJkKTsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6R29Ub0JhY2tGb3J3YXJkSXRlbShuYXZpZ2F0aW9uLT5uYXZpZ2F0aW9u
SUQoKSwgaXRlbS5pdGVtSUQoKSwgRnJhbWVMb2FkVHlwZTo6SW5kZXhlZEJhY2tGb3J3YXJkLCBT
aG91bGRUcmVhdEFzQ29udGludWluZ0xvYWQ6Ok5vLCBXVEY6Om51bGxvcHQpLCBtX3dlYlBhZ2VJ
RCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R29Ub0JhY2tGb3J3YXJkSXRlbShuYXZp
Z2F0aW9uLT5uYXZpZ2F0aW9uSUQoKSwgaXRlbS5pdGVtSUQoKSwgRnJhbWVMb2FkVHlwZTo6SW5k
ZXhlZEJhY2tGb3J3YXJkLCBTaG91bGRUcmVhdEFzQ29udGludWluZ0xvYWQ6Ok5vLCBXVEY6Om51
bGxvcHQpKTsKICAgICBtX3Byb2Nlc3MtPnJlc3BvbnNpdmVuZXNzVGltZXIoKS5zdGFydCgpOwog
CiAgICAgcmV0dXJuIG5hdmlnYXRpb247CkBAIC05OTksNyArOTk5LDcgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OmluaXRpYWxpemVXZWJQYWdlKCkKICAgICBzZXREcmF3aW5nQXJlYShwYWdlQ2xpZW50
KCkuY3JlYXRlRHJhd2luZ0FyZWFQcm94eShtX3Byb2Nlc3MpKTsKICAgICBBU1NFUlQobV9kcmF3
aW5nQXJlYSk7CiAKLSAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6Q3Jl
YXRlV2ViUGFnZShtX3dlYlBhZ2VJRCwgY3JlYXRpb25QYXJhbWV0ZXJzKG1fcHJvY2VzcywgKm1f
ZHJhd2luZ0FyZWEpKSwgMCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6Q3JlYXRl
V2ViUGFnZShtX3dlYlBhZ2VJRCwgY3JlYXRpb25QYXJhbWV0ZXJzKG1fcHJvY2VzcywgKm1fZHJh
d2luZ0FyZWEpKSwgMCk7CiAKICAgICBtX3Byb2Nlc3MtPmFkZFZpc2l0ZWRMaW5rU3RvcmVVc2Vy
KHZpc2l0ZWRMaW5rU3RvcmUoKSwgbV9pZGVudGlmaWVyKTsKIH0KQEAgLTEwNjAsNyArMTA2MCw3
IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpjbG9zZSgpCiAKICAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQ
b29sKCkuYmFja0ZvcndhcmRDYWNoZSgpLnJlbW92ZUVudHJpZXNGb3JQYWdlKCp0aGlzKTsKIAot
ICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q2xvc2UoKSwgbV93ZWJQYWdl
SUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNsb3NlKCkpOwogICAgIG1fcHJvY2Vz
cy0+cmVtb3ZlV2ViUGFnZSgqdGhpcywgV2ViUHJvY2Vzc1Byb3h5OjpFbmRzVXNpbmdEYXRhU3Rv
cmU6Olllcyk7CiAgICAgbV9wcm9jZXNzLT5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3dlYlBhZ2VJRCk7CiAgICAg
bV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdl
clByb3h5PigpLT5jbGVhck5vdGlmaWNhdGlvbnModGhpcyk7CkBAIC0xMjUzLDExICsxMjUzLDEx
IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpsb2FkUmVxdWVzdFdpdGhOYXZpZ2F0aW9uU2hhcmVkKFJl
ZjxXZWJQcm9jZXNzUHJveHk+JiYgcHJvY2VzCiAKICNpZiBIQVZFKFNBTkRCT1hfSVNTVUVfUkVB
RF9FWFRFTlNJT05fVE9fUFJPQ0VTU19CWV9BVURJVF9UT0tFTikKICAgICBpZiAoIXByb2Nlc3Mt
PmlzTGF1bmNoaW5nKCkgfHwgIXVybC5pc0xvY2FsRmlsZSgpKQotICAgICAgICBwcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpMb2FkUmVxdWVzdChsb2FkUGFyYW1ldGVycyksIHdlYlBh
Z2VJRCk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkxvYWRSZXF1ZXN0KGxvYWRQ
YXJhbWV0ZXJzKSk7CiAgICAgZWxzZQotICAgICAgICBwcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpMb2FkUmVxdWVzdFdhaXRpbmdGb3JQcm9jZXNzTGF1bmNoKGxvYWRQYXJhbWV0ZXJz
LCBtX3BhZ2VMb2FkU3RhdGUucmVzb3VyY2VEaXJlY3RvcnlVUkwoKSwgbV9pZGVudGlmaWVyLCB0
cnVlKSwgd2ViUGFnZUlEKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6TG9hZFJl
cXVlc3RXYWl0aW5nRm9yUHJvY2Vzc0xhdW5jaChsb2FkUGFyYW1ldGVycywgbV9wYWdlTG9hZFN0
YXRlLnJlc291cmNlRGlyZWN0b3J5VVJMKCksIG1faWRlbnRpZmllciwgdHJ1ZSkpOwogI2Vsc2UK
LSAgICBwcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpMb2FkUmVxdWVzdChsb2FkUGFy
YW1ldGVycyksIHdlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6TG9hZFJl
cXVlc3QobG9hZFBhcmFtZXRlcnMpKTsKICNlbmRpZgogICAgIHByb2Nlc3MtPnJlc3BvbnNpdmVu
ZXNzVGltZXIoKS5zdGFydCgpOwogfQpAQCAtMTMwOCwxMSArMTMwOCwxMSBAQCBSZWZQdHI8QVBJ
OjpOYXZpZ2F0aW9uPiBXZWJQYWdlUHJveHk6OmxvYWRGaWxlKGNvbnN0IFN0cmluZyYgZmlsZVVS
TFN0cmluZywgY29ucwogCiAjaWYgSEFWRShTQU5EQk9YX0lTU1VFX1JFQURfRVhURU5TSU9OX1RP
X1BST0NFU1NfQllfQVVESVRfVE9LRU4pCiAgICAgaWYgKG1fcHJvY2Vzcy0+aXNMYXVuY2hpbmco
KSkKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpMb2FkUmVxdWVz
dFdhaXRpbmdGb3JQcm9jZXNzTGF1bmNoKGxvYWRQYXJhbWV0ZXJzLCByZXNvdXJjZURpcmVjdG9y
eVVSTCwgbV9pZGVudGlmaWVyLCBjaGVja0Fzc3VtZWRSZWFkQWNjZXNzVG9SZXNvdXJjZVVSTCks
IG1fd2ViUGFnZUlEKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6TG9hZFJlcXVl
c3RXYWl0aW5nRm9yUHJvY2Vzc0xhdW5jaChsb2FkUGFyYW1ldGVycywgcmVzb3VyY2VEaXJlY3Rv
cnlVUkwsIG1faWRlbnRpZmllciwgY2hlY2tBc3N1bWVkUmVhZEFjY2Vzc1RvUmVzb3VyY2VVUkwp
KTsKICAgICBlbHNlCi0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
TG9hZFJlcXVlc3QobG9hZFBhcmFtZXRlcnMpLCBtX3dlYlBhZ2VJRCk7CisgICAgICAgIHNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OkxvYWRSZXF1ZXN0KGxvYWRQYXJhbWV0ZXJzKSk7CiAjZWxzZQot
ICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6TG9hZFJlcXVlc3QobG9hZFBh
cmFtZXRlcnMpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6TG9h
ZFJlcXVlc3QobG9hZFBhcmFtZXRlcnMpKTsKICNlbmRpZgogICAgIG1fcHJvY2Vzcy0+cmVzcG9u
c2l2ZW5lc3NUaW1lcigpLnN0YXJ0KCk7CiAKQEAgLTE0MDIsNyArMTQwMiw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5Ojpsb2FkQWx0ZXJuYXRlSFRNTChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGh0
bWxEYXRhLCBjb25zdCBTCiAKICAgICBtX3Byb2Nlc3MtPmFzc3VtZVJlYWRBY2Nlc3NUb0Jhc2VV
UkwoKnRoaXMsIGJhc2VVUkwpOwogICAgIG1fcHJvY2Vzcy0+YXNzdW1lUmVhZEFjY2Vzc1RvQmFz
ZVVSTCgqdGhpcywgdW5yZWFjaGFibGVVUkwpOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6TG9hZEFsdGVybmF0ZUhUTUwobG9hZFBhcmFtZXRlcnMpLCBtX3dlYlBhZ2VJ
RCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6TG9hZEFsdGVybmF0ZUhUTUwobG9hZFBh
cmFtZXRlcnMpKTsKICAgICBtX3Byb2Nlc3MtPnJlc3BvbnNpdmVuZXNzVGltZXIoKS5zdGFydCgp
OwogfQogCkBAIC0xNDI5LDcgKzE0MjksNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6bG9hZFdlYkFy
Y2hpdmVEYXRhKEFQSTo6RGF0YSogd2ViQXJjaGl2ZURhdGEsIEFQSTo6T2JqZWN0KiB1cwogICAg
IGxvYWRQYXJhbWV0ZXJzLnVzZXJEYXRhID0gVXNlckRhdGEocHJvY2VzcygpLnRyYW5zZm9ybU9i
amVjdHNUb0hhbmRsZXModXNlckRhdGEpLmdldCgpKTsKICAgICBhZGRQbGF0Zm9ybUxvYWRQYXJh
bWV0ZXJzKGxvYWRQYXJhbWV0ZXJzKTsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6TG9hZERhdGEobG9hZFBhcmFtZXRlcnMpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6TG9hZERhdGEobG9hZFBhcmFtZXRlcnMpKTsKICAgICBtX3By
b2Nlc3MtPnJlc3BvbnNpdmVuZXNzVGltZXIoKS5zdGFydCgpOwogfQogCkBAIC0xNDQ4LDcgKzE0
NDgsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6bmF2aWdhdGVUb1BERkxpbmtXaXRoU2ltdWxhdGVk
Q2xpY2soY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2Vz
cygpKQogICAgICAgICBsYXVuY2hQcm9jZXNzKFJlZ2lzdHJhYmxlRG9tYWluIHsgVVJMKFVSTCgp
LCB1cmxTdHJpbmcpIH0sIFByb2Nlc3NMYXVuY2hSZWFzb246OkluaXRpYWxQcm9jZXNzKTsKIAot
ICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6TmF2aWdhdGVUb1BERkxpbmtX
aXRoU2ltdWxhdGVkQ2xpY2sodXJsU3RyaW5nLCBkb2N1bWVudFBvaW50LCBzY3JlZW5Qb2ludCks
IG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpOYXZpZ2F0ZVRvUERG
TGlua1dpdGhTaW11bGF0ZWRDbGljayh1cmxTdHJpbmcsIGRvY3VtZW50UG9pbnQsIHNjcmVlblBv
aW50KSk7CiAgICAgbV9wcm9jZXNzLT5yZXNwb25zaXZlbmVzc1RpbWVyKCkuc3RhcnQoKTsKIH0K
IApAQCAtMTQ2MSw3ICsxNDYxLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnN0b3BMb2FkaW5nKCkK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6U3RvcExvYWRpbmcoKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OlN0b3BMb2FkaW5nKCkpOwogICAgIGlmIChtX3Byb3Zpc2lvbmFsUGFnZSkgewog
ICAgICAgICBtX3Byb3Zpc2lvbmFsUGFnZS0+Y2FuY2VsKCk7CiAgICAgICAgIG1fcHJvdmlzaW9u
YWxQYWdlID0gbnVsbHB0cjsKQEAgLTE0OTYsNyArMTQ5Niw3IEBAIFJlZlB0cjxBUEk6Ok5hdmln
YXRpb24+IFdlYlBhZ2VQcm94eTo6cmVsb2FkKE9wdGlvblNldDxXZWJDb3JlOjpSZWxvYWRPcHRp
b24+IG9wCiAgICAgaWYgKG9wdGlvbnMuY29udGFpbnMoV2ViQ29yZTo6UmVsb2FkT3B0aW9uOjpE
aXNhYmxlQ29udGVudEJsb2NrZXJzKSkKICAgICAgICAgbmF2aWdhdGlvbi0+c2V0VXNlckNvbnRl
bnRFeHRlbnNpb25zRW5hYmxlZChmYWxzZSk7CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OlJlbG9hZChuYXZpZ2F0aW9uLT5uYXZpZ2F0aW9uSUQoKSwgb3B0aW9ucy50
b1JhdygpLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OlJlbG9hZChuYXZpZ2F0aW9uLT5uYXZpZ2F0aW9uSUQoKSwgb3B0
aW9ucy50b1JhdygpLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKSk7CiAgICAgbV9wcm9jZXNzLT5y
ZXNwb25zaXZlbmVzc1RpbWVyKCkuc3RhcnQoKTsKIAogI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhF
U0lTKQpAQCAtMTU2NSw3ICsxNTY1LDcgQEAgUmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4gV2ViUGFn
ZVByb3h5Ojpnb1RvQmFja0ZvcndhcmRJdGVtKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0KICAgICBh
dXRvIHRyYW5zYWN0aW9uID0gbV9wYWdlTG9hZFN0YXRlLnRyYW5zYWN0aW9uKCk7CiAgICAgbV9w
YWdlTG9hZFN0YXRlLnNldFBlbmRpbmdBUElSZXF1ZXN0KHRyYW5zYWN0aW9uLCB7IG5hdmlnYXRp
b24gPyBuYXZpZ2F0aW9uLT5uYXZpZ2F0aW9uSUQoKSA6IDAsIGl0ZW0udXJsKCkgfSk7CiAKLSAg
ICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdvVG9CYWNrRm9yd2FyZEl0ZW0o
bmF2aWdhdGlvbiA/IG5hdmlnYXRpb24tPm5hdmlnYXRpb25JRCgpIDogMCwgaXRlbS5pdGVtSUQo
KSwgZnJhbWVMb2FkVHlwZSwgU2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkOjpObywgV1RGOjpu
dWxsb3B0KSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdvVG9C
YWNrRm9yd2FyZEl0ZW0obmF2aWdhdGlvbiA/IG5hdmlnYXRpb24tPm5hdmlnYXRpb25JRCgpIDog
MCwgaXRlbS5pdGVtSUQoKSwgZnJhbWVMb2FkVHlwZSwgU2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdM
b2FkOjpObywgV1RGOjpudWxsb3B0KSk7CiAgICAgbV9wcm9jZXNzLT5yZXNwb25zaXZlbmVzc1Rp
bWVyKCkuc3RhcnQoKTsKIAogICAgIHJldHVybiBuYXZpZ2F0aW9uOwpAQCAtMTU4MCw3ICsxNTgw
LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnRyeVJlc3RvcmVTY3JvbGxQb3NpdGlvbigpCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlRyeVJlc3RvcmVTY3JvbGxQb3NpdGlvbigpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6VHJ5UmVzdG9yZVNjcm9sbFBvc2l0aW9uKCkpOwogfQogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KFdlYkJhY2tGb3J3YXJkTGlz
dEl0ZW0qIGFkZGVkLCBWZWN0b3I8UmVmPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiYmIHJlbW92
ZWQpCkBAIC0xNjQyLDcgKzE2NDIsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Q29udHJvbGxl
ZEJ5QXV0b21hdGlvbihib29sIGNvbnRyb2xsZWQpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2Vz
cygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OlNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24oY29udHJvbGxlZCksIG1fd2ViUGFnZUlE
KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRDb250cm9sbGVkQnlBdXRvbWF0aW9u
KGNvbnRyb2xsZWQpKTsKICAgICBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29y
a2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRTZXNzaW9uSXNDb250cm9s
bGVkQnlBdXRvbWF0aW9uKG1fd2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCksIG1fY29udHJv
bGxlZEJ5QXV0b21hdGlvbikpOwogfQogCkBAIC0xNjY3LDcgKzE2NjcsNyBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6c2V0SW5kaWNhdGluZyhib29sIGluZGljYXRpbmcpCiAgICAgaWYgKCFoYXNSdW5u
aW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OlNldEluZGljYXRpbmcoaW5kaWNhdGluZyksIG1fd2ViUGFnZUlEKTsK
KyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRJbmRpY2F0aW5nKGluZGljYXRpbmcpKTsK
IH0KIAogYm9vbCBXZWJQYWdlUHJveHk6OmFsbG93c1JlbW90ZUluc3BlY3Rpb24oKSBjb25zdApA
QCAtMTcwMyw3ICsxNzAzLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldEJhY2tncm91bmRDb2xv
cihjb25zdCBPcHRpb25hbDxDb2xvcj4mIGNvbG9yKQogCiAgICAgbV9iYWNrZ3JvdW5kQ29sb3Ig
PSBjb2xvcjsKICAgICBpZiAoaGFzUnVubmluZ1Byb2Nlc3MoKSkKLSAgICAgICAgbV9wcm9jZXNz
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3IpLCBtX3dl
YlBhZ2VJRCk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEJhY2tncm91bmRD
b2xvcihjb2xvcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0VG9wQ29udGVudEluc2V0
KGZsb2F0IGNvbnRlbnRJbnNldCkKQEAgLTE3MTksOSArMTcxOSw5IEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpzZXRUb3BDb250ZW50SW5zZXQoZmxvYXQgY29udGVudEluc2V0KQogICAgIE1hY2hTZW5k
UmlnaHQgZmVuY2UgPSBtX2RyYXdpbmdBcmVhLT5jcmVhdGVGZW5jZSgpOwogCiAgICAgYXV0byBm
ZW5jZUF0dGFjaG1lbnQgPSBJUEM6OkF0dGFjaG1lbnQoZmVuY2UubGVha1NlbmRSaWdodCgpLCBN
QUNIX01TR19UWVBFX01PVkVfU0VORCk7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpTZXRUb3BDb250ZW50SW5zZXRGZW5jZWQoY29udGVudEluc2V0LCBmZW5jZUF0dGFj
aG1lbnQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0VG9w
Q29udGVudEluc2V0RmVuY2VkKGNvbnRlbnRJbnNldCwgZmVuY2VBdHRhY2htZW50KSk7CiAjZWxz
ZQotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0VG9wQ29udGVudElu
c2V0KGNvbnRlbnRJbnNldCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpTZXRUb3BDb250ZW50SW5zZXQoY29udGVudEluc2V0KSk7CiAjZW5kaWYKIH0KIApAQCAt
MTczMyw3ICsxNzMzLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFVuZGVybGF5Q29sb3IoY29u
c3QgQ29sb3ImIGNvbG9yKQogICAgIG1fdW5kZXJsYXlDb2xvciA9IGNvbG9yOwogCiAgICAgaWYg
KGhhc1J1bm5pbmdQcm9jZXNzKCkpCi0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6U2V0VW5kZXJsYXlDb2xvcihjb2xvciksIG1fd2ViUGFnZUlEKTsKKyAgICAgICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0VW5kZXJsYXlDb2xvcihjb2xvcikpOwogfQogCiB2
b2lkIFdlYlBhZ2VQcm94eTo6dmlld1dpbGxTdGFydExpdmVSZXNpemUoKQpAQCAtMTc0MiwxNCAr
MTc0MiwxNCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6dmlld1dpbGxTdGFydExpdmVSZXNpemUoKQog
ICAgICAgICByZXR1cm47CiAKICAgICBjbG9zZU92ZXJsYXllZFZpZXdzKCk7Ci0gICAgbV9wcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpWaWV3V2lsbFN0YXJ0TGl2ZVJlc2l6ZSgpLCBt
X3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Vmlld1dpbGxTdGFydExp
dmVSZXNpemUoKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5Ojp2aWV3V2lsbEVuZExpdmVSZXNp
emUoKQogewogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Vmlld1dpbGxFbmRMaXZlUmVz
aXplKCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpWaWV3V2ls
bEVuZExpdmVSZXNpemUoKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRWaWV3TmVlZHNE
aXNwbGF5KGNvbnN0IFJlZ2lvbiYgcmVnaW9uKQpAQCAtMTg0OSw3ICsxODQ5LDcgQEAgdm9pZCBX
ZWJQYWdlUHJveHk6OnZpZXdEaWRFbnRlcldpbmRvdygpCiAgICAgTGF5ZXJIb3N0aW5nTW9kZSBs
YXllckhvc3RpbmdNb2RlID0gcGFnZUNsaWVudCgpLnZpZXdMYXllckhvc3RpbmdNb2RlKCk7CiAg
ICAgaWYgKG1fbGF5ZXJIb3N0aW5nTW9kZSAhPSBsYXllckhvc3RpbmdNb2RlKSB7CiAgICAgICAg
IG1fbGF5ZXJIb3N0aW5nTW9kZSA9IGxheWVySG9zdGluZ01vZGU7Ci0gICAgICAgIG1fcHJvY2Vz
cy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0TGF5ZXJIb3N0aW5nTW9kZShsYXllckhvc3Rp
bmdNb2RlKSwgbV93ZWJQYWdlSUQpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpT
ZXRMYXllckhvc3RpbmdNb2RlKGxheWVySG9zdGluZ01vZGUpKTsKICAgICB9CiB9CiAKQEAgLTE4
OTgsNyArMTg5OCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaXNwYXRjaEFjdGl2aXR5U3RhdGVD
aGFuZ2UoKQogICAgIGF1dG8gYWN0aXZpdHlTdGF0ZUNoYW5nZUlEID0gbV9hY3Rpdml0eVN0YXRl
Q2hhbmdlV2FudHNTeW5jaHJvbm91c1JlcGx5ID8gdGFrZU5leHRBY3Rpdml0eVN0YXRlQ2hhbmdl
SUQoKSA6IHN0YXRpY19jYXN0PEFjdGl2aXR5U3RhdGVDaGFuZ2VJRD4oQWN0aXZpdHlTdGF0ZUNo
YW5nZUFzeW5jaHJvbm91cyk7CiAKICAgICBpZiAoY2hhbmdlZCB8fCBhY3Rpdml0eVN0YXRlQ2hh
bmdlSUQgIT0gQWN0aXZpdHlTdGF0ZUNoYW5nZUFzeW5jaHJvbm91cyB8fCAhbV9uZXh0QWN0aXZp
dHlTdGF0ZUNoYW5nZUNhbGxiYWNrcy5pc0VtcHR5KCkpCi0gICAgICAgIG1fcHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0QWN0aXZpdHlTdGF0ZShtX2FjdGl2aXR5U3RhdGUsIGFj
dGl2aXR5U3RhdGVDaGFuZ2VJRCwgbV9uZXh0QWN0aXZpdHlTdGF0ZUNoYW5nZUNhbGxiYWNrcyks
IG1fd2ViUGFnZUlEKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0QWN0aXZp
dHlTdGF0ZShtX2FjdGl2aXR5U3RhdGUsIGFjdGl2aXR5U3RhdGVDaGFuZ2VJRCwgbV9uZXh0QWN0
aXZpdHlTdGF0ZUNoYW5nZUNhbGxiYWNrcykpOwogCiAgICAgbV9uZXh0QWN0aXZpdHlTdGF0ZUNo
YW5nZUNhbGxiYWNrcy5jbGVhcigpOwogCkBAIC0yMDMzLDcgKzIwMzMsNyBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6bGF5ZXJIb3N0aW5nTW9kZURpZENoYW5nZSgpCiAgICAgbV9sYXllckhvc3RpbmdN
b2RlID0gbGF5ZXJIb3N0aW5nTW9kZTsKIAogICAgIGlmIChoYXNSdW5uaW5nUHJvY2VzcygpKQot
ICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldExheWVySG9zdGlu
Z01vZGUobGF5ZXJIb3N0aW5nTW9kZSksIG1fd2ViUGFnZUlEKTsKKyAgICAgICAgc2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6U2V0TGF5ZXJIb3N0aW5nTW9kZShsYXllckhvc3RpbmdNb2RlKSk7CiB9
CiAKIHZvaWQgV2ViUGFnZVByb3h5Ojp3YWl0Rm9yRGlkVXBkYXRlQWN0aXZpdHlTdGF0ZShBY3Rp
dml0eVN0YXRlQ2hhbmdlSUQgYWN0aXZpdHlTdGF0ZUNoYW5nZUlEKQpAQCAtMjA3NSwyMSArMjA3
NSwyMSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0SW5pdGlhbEZvY3VzKGJvb2wgZm9yd2FyZCwg
Ym9vbCBpc0tleWJvYXJkRXZlbnRWYWxpZCwgY29ucwogICAgIH0KIAogICAgIGF1dG8gY2FsbGJh
Y2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nl
c3MtPnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5OjpzZXRJbml0
aWFsRm9jdXMiX3MpKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNl
dEluaXRpYWxGb2N1cyhmb3J3YXJkLCBpc0tleWJvYXJkRXZlbnRWYWxpZCwga2V5Ym9hcmRFdmVu
dCwgY2FsbGJhY2tJRCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpTZXRJbml0aWFsRm9jdXMoZm9yd2FyZCwgaXNLZXlib2FyZEV2ZW50VmFsaWQsIGtleWJvYXJk
RXZlbnQsIGNhbGxiYWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmNsZWFyU2VsZWN0
aW9uKCkKIHsKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsK
LSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNsZWFyU2VsZWN0aW9uKCks
IG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDbGVhclNlbGVjdGlv
bigpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnJlc3RvcmVTZWxlY3Rpb25JbkZvY3VzZWRF
ZGl0YWJsZUVsZW1lbnQoKQogewogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVzdG9y
ZVNlbGVjdGlvbkluRm9jdXNlZEVkaXRhYmxlRWxlbWVudCgpLCBtX3dlYlBhZ2VJRCk7CisgICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVzdG9yZVNlbGVjdGlvbkluRm9jdXNlZEVkaXRhYmxl
RWxlbWVudCgpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnZhbGlkYXRlQ29tbWFuZChjb25z
dCBTdHJpbmcmIGNvbW1hbmROYW1lLCBXVEY6OkZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYs
IGJvb2wsIGludDMyX3QsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24p
CkBAIC0yMTAwLDcgKzIxMDAsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6dmFsaWRhdGVDb21tYW5k
KGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIFdURjo6RnVuY3Rpb248dm9pZAogICAgIH0KIAog
ICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrRnVu
Y3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViUGFn
ZVByb3h5Ojp2YWxpZGF0ZUNvbW1hbmQiX3MpKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OlZhbGlkYXRlQ29tbWFuZChjb21tYW5kTmFtZSwgY2FsbGJhY2tJRCksIG1f
d2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpWYWxpZGF0ZUNvbW1hbmQo
Y29tbWFuZE5hbWUsIGNhbGxiYWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmluY3Jl
YXNlTGlzdExldmVsKCkKQEAgLTIxMDgsNyArMjEwOCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpp
bmNyZWFzZUxpc3RMZXZlbCgpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkluY3Jl
YXNlTGlzdExldmVsKCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpJbmNyZWFzZUxpc3RMZXZlbCgpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmRlY3JlYXNl
TGlzdExldmVsKCkKQEAgLTIxMTYsNyArMjExNiw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkZWNy
ZWFzZUxpc3RMZXZlbCgpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRlY3JlYXNl
TGlzdExldmVsKCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpE
ZWNyZWFzZUxpc3RMZXZlbCgpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmNoYW5nZUxpc3RU
eXBlKCkKQEAgLTIxMjQsNyArMjEyNCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpjaGFuZ2VMaXN0
VHlwZSgpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNoYW5nZUxpc3RUeXBlKCks
IG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDaGFuZ2VMaXN0VHlw
ZSgpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldEJhc2VXcml0aW5nRGlyZWN0aW9uKFdy
aXRpbmdEaXJlY3Rpb24gZGlyZWN0aW9uKQpAQCAtMjEzMiw3ICsyMTMyLDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OnNldEJhc2VXcml0aW5nRGlyZWN0aW9uKFdyaXRpbmdEaXJlY3Rpb24gZGlyZWN0
aW9uKQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRCYXNlV3JpdGluZ0RpcmVj
dGlvbihkaXJlY3Rpb24pLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6U2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24oZGlyZWN0aW9uKSk7CiB9CiAKIHZvaWQgV2ViUGFn
ZVByb3h5Ojp1cGRhdGVGb250QXR0cmlidXRlc0FmdGVyRWRpdG9yU3RhdGVDaGFuZ2UoKQpAQCAt
MjE1Niw3ICsyMTU2LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldE5lZWRzRm9udEF0dHJpYnV0
ZXMoYm9vbCBuZWVkc0ZvbnRBdHRyaWJ1dGVzKQogICAgIG1fbmVlZHNGb250QXR0cmlidXRlcyA9
IG5lZWRzRm9udEF0dHJpYnV0ZXM7CiAKICAgICBpZiAoaGFzUnVubmluZ1Byb2Nlc3MoKSkKLSAg
ICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXROZWVkc0ZvbnRBdHRy
aWJ1dGVzKG5lZWRzRm9udEF0dHJpYnV0ZXMpLCBtX3dlYlBhZ2VJRCk7CisgICAgICAgIHNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OlNldE5lZWRzRm9udEF0dHJpYnV0ZXMobmVlZHNGb250QXR0cmli
dXRlcykpOwogfQogCiBib29sIFdlYlBhZ2VQcm94eTo6bWFpbnRhaW5zSW5hY3RpdmVTZWxlY3Rp
b24oKSBjb25zdApAQCAtMjE3OSw3ICsyMTc5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNjaGVk
dWxlRnVsbEVkaXRvclN0YXRlVXBkYXRlKCkKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6U2NoZWR1bGVGdWxsRWRpdG9yU3RhdGVVcGRhdGUoKSwgbV93ZWJQYWdlSUQpOworICAgIHNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNjaGVkdWxlRnVsbEVkaXRvclN0YXRlVXBkYXRlKCkpOwog
fQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2VsZWN0QWxsKCkKQEAgLTIxODcsNyArMjE4Nyw3IEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpzZWxlY3RBbGwoKQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nl
c3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpTZWxlY3RBbGwoKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OlNlbGVjdEFsbCgpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmV4ZWN1dGVFZGl0
Q29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50
LCBXVEY6OkZ1bmN0aW9uPHZvaWQoQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2tGdW5j
dGlvbikKQEAgLTIxOTgsNyArMjE5OCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpleGVjdXRlRWRp
dENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhCiAgICAg
fQogCiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFja3MucHV0KFdURk1vdmUoY2FsbGJh
Y2tGdW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJX
ZWJQYWdlUHJveHk6OmV4ZWN1dGVFZGl0Q29tbWFuZCJfcykpOwotICAgIG1fcHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6RXhlY3V0ZUVkaXRDb21tYW5kV2l0aENhbGxiYWNrKGNvbW1h
bmROYW1lLCBhcmd1bWVudCwgY2FsbGJhY2tJRCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpFeGVjdXRlRWRpdENvbW1hbmRXaXRoQ2FsbGJhY2soY29tbWFuZE5h
bWUsIGFyZ3VtZW50LCBjYWxsYmFja0lEKSk7CiB9CiAgICAgCiB2b2lkIFdlYlBhZ2VQcm94eTo6
ZXhlY3V0ZUVkaXRDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmlu
ZyYgYXJndW1lbnQpCkBAIC0yMjExLDcgKzIyMTEsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZXhl
Y3V0ZUVkaXRDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYg
YQogICAgIGlmIChjb21tYW5kTmFtZSA9PSBpZ25vcmVTcGVsbGluZ0NvbW1hbmROYW1lKQogICAg
ICAgICArK21fcGVuZGluZ0xlYXJuT3JJZ25vcmVXb3JkTWVzc2FnZUNvdW50OwogCi0gICAgbV9w
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpFeGVjdXRlRWRpdENvbW1hbmQoY29tbWFu
ZE5hbWUsIGFyZ3VtZW50KSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OkV4ZWN1dGVFZGl0Q29tbWFuZChjb21tYW5kTmFtZSwgYXJndW1lbnQpKTsKIH0KIAogdm9p
ZCBXZWJQYWdlUHJveHk6OnJlcXVlc3RGb250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQoRnVu
Y3Rpb248dm9pZChjb25zdCBXZWJDb3JlOjpGb250QXR0cmlidXRlcyYsIENhbGxiYWNrQmFzZTo6
RXJyb3IpPiYmIGNhbGxiYWNrKQpAQCAtMjIyMiw3ICsyMjIyLDcgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OnJlcXVlc3RGb250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQoRnVuY3Rpb248dm9pZChj
b25zdCBXZWIKICAgICB9CiAKICAgICBhdXRvIGNhbGxiYWNrSUQgPSBtX2NhbGxiYWNrcy5wdXQo
V1RGTW92ZShjYWxsYmFjayksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2
aXR5KCJXZWJQYWdlUHJveHk6OnJlcXVlc3RGb250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQi
X3MpKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJlcXVlc3RGb250
QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQoY2FsbGJhY2tJRCksIG1fd2ViUGFnZUlEKTsKKyAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpSZXF1ZXN0Rm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlv
blN0YXJ0KGNhbGxiYWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmZvbnRBdHRyaWJ1
dGVzQ2FsbGJhY2soY29uc3QgV2ViQ29yZTo6Rm9udEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMsIENh
bGxiYWNrSUQgY2FsbGJhY2tJRCkKQEAgLTIyNDMsNyArMjI0Myw3IEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpzZXRFZGl0YWJsZShib29sIGVkaXRhYmxlKQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nl
c3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpTZXRFZGl0YWJsZShlZGl0YWJsZSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpTZXRFZGl0YWJsZShlZGl0YWJsZSkpOwogfQogICAgIAogdm9pZCBX
ZWJQYWdlUHJveHk6OnNldE1lZGlhU3RyZWFtQ2FwdHVyZU11dGVkKGJvb2wgbXV0ZWQpCkBAIC0y
MzA4LDkgKzIzMDgsOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cGVyZm9ybURyYWdDb250cm9sbGVy
QWN0aW9uKERyYWdDb250cm9sbGVyQWN0aW9uIGFjdGlvbiwgRHJhZwogCiAgICAgQVNTRVJUKGRy
YWdEYXRhLnBsYXRmb3JtRGF0YSgpKTsKICAgICBXZWJTZWxlY3Rpb25EYXRhIHNlbGVjdGlvbigq
ZHJhZ0RhdGEucGxhdGZvcm1EYXRhKCkpOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6UGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKGFjdGlvbiwgZHJhZ0RhdGEuY2xp
ZW50UG9zaXRpb24oKSwgZHJhZ0RhdGEuZ2xvYmFsUG9zaXRpb24oKSwgZHJhZ0RhdGEuZHJhZ2dp
bmdTb3VyY2VPcGVyYXRpb25NYXNrKCksIHNlbGVjdGlvbiwgZHJhZ0RhdGEuZmxhZ3MoKSksIG1f
d2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRHJhZ0NvbnRy
b2xsZXJBY3Rpb24oYWN0aW9uLCBkcmFnRGF0YS5jbGllbnRQb3NpdGlvbigpLCBkcmFnRGF0YS5n
bG9iYWxQb3NpdGlvbigpLCBkcmFnRGF0YS5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKSwg
c2VsZWN0aW9uLCBkcmFnRGF0YS5mbGFncygpKSk7CiAjZWxzZQotICAgIG1fcHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKGFjdGlvbiwg
ZHJhZ0RhdGEsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIHNhbmRib3hFeHRlbnNpb25zRm9yVXBs
b2FkKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBlcmZvcm1E
cmFnQ29udHJvbGxlckFjdGlvbihhY3Rpb24sIGRyYWdEYXRhLCBzYW5kYm94RXh0ZW5zaW9uSGFu
ZGxlLCBzYW5kYm94RXh0ZW5zaW9uc0ZvclVwbG9hZCkpOwogI2VuZGlmCiB9CiAKQEAgLTIzNDAs
NyArMjM0MCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkcmFnRW5kZWQoY29uc3QgSW50UG9pbnQm
IGNsaWVudFBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgZ2xvCiB7CiAgICAgaWYgKCFoYXNSdW5u
aW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpEcmFnRW5kZWQoY2xpZW50UG9zaXRpb24sIGdsb2JhbFBvc2l0aW9uLCBv
cGVyYXRpb24pLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RHJh
Z0VuZGVkKGNsaWVudFBvc2l0aW9uLCBnbG9iYWxQb3NpdGlvbiwgb3BlcmF0aW9uKSk7CiAgICAg
c2V0RHJhZ0NhcmV0UmVjdCh7IH0pOwogfQogCkBAIC0yMzUyLDEzICsyMzUyLDEzIEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpkaWRQZXJmb3JtRHJhZ09wZXJhdGlvbihib29sIGhhbmRsZWQpCiB2b2lk
IFdlYlBhZ2VQcm94eTo6ZGlkU3RhcnREcmFnKCkKIHsKICAgICBpZiAoaGFzUnVubmluZ1Byb2Nl
c3MoKSkKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRTdGFy
dERyYWcoKSwgbV93ZWJQYWdlSUQpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpE
aWRTdGFydERyYWcoKSk7CiB9CiAgICAgCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZHJhZ0NhbmNlbGxl
ZCgpCiB7CiAgICAgaWYgKGhhc1J1bm5pbmdQcm9jZXNzKCkpCi0gICAgICAgIG1fcHJvY2Vzcy0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RHJhZ0NhbmNlbGxlZCgpLCBtX3dlYlBhZ2VJRCk7Cisg
ICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRyYWdDYW5jZWxsZWQoKSk7CiB9CiAKIHZv
aWQgV2ViUGFnZVByb3h5OjpkaWRFbmREcmFnZ2luZygpCkBAIC0yNDU3LDcgKzI0NTcsNyBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6cHJvY2Vzc05leHRRdWV1ZWRNb3VzZUV2ZW50KCkKICAgICB9CiAK
ICAgICBMT0coTW91c2VIYW5kbGluZywgIlVJUHJvY2Vzczogc2VudCBtb3VzZSBldmVudCAlcyAo
cXVldWUgc2l6ZSAlenUpIiwgd2ViTW91c2VFdmVudFR5cGVTdHJpbmcoZXZlbnRUeXBlKSwgbV9t
b3VzZUV2ZW50UXVldWUuc2l6ZSgpKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6Ok1vdXNlRXZlbnQoZXZlbnQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6TW91c2VFdmVudChldmVudCkpOwogfQogCiAjaWYgTUVSR0VfV0hFRUxfRVZF
TlRTCkBAIC0yNTY0LDcgKzI1NjQsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cHJvY2Vzc05leHRR
dWV1ZWRXaGVlbEV2ZW50KCkKIAogdm9pZCBXZWJQYWdlUHJveHk6OnNlbmRXaGVlbEV2ZW50KGNv
bnN0IFdlYldoZWVsRXZlbnQmIGV2ZW50KQogewotICAgIG1fcHJvY2Vzcy0+c2VuZCgKKyAgICBz
ZW5kKAogICAgICAgICBNZXNzYWdlczo6RXZlbnREaXNwYXRjaGVyOjpXaGVlbEV2ZW50KAogICAg
ICAgICAgICAgbV93ZWJQYWdlSUQsCiAgICAgICAgICAgICBldmVudCwKQEAgLTI2MTcsNyArMjYx
Nyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IE5hdGl2
ZVdlYktleWJvYXJkRXZlbnQmIGV2ZW50KQogCiAgICAgaWYgKG1fa2V5RXZlbnRRdWV1ZS5zaXpl
KCkgPT0gMSkgeyAvLyBPdGhlcndpc2UsIHNlbnQgZnJvbSBEaWRSZWNlaXZlRXZlbnQgbWVzc2Fn
ZSBoYW5kbGVyLgogICAgICAgICBMT0coS2V5SGFuZGxpbmcsICIgVUkgcHJvY2Vzczogc2VudCBr
ZXlFdmVudCBmcm9tIGhhbmRsZUtleWJvYXJkRXZlbnQiKTsKLSAgICAgICAgbV9wcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpLZXlFdmVudChldmVudCksIG1fd2ViUGFnZUlEKTsKKyAg
ICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6S2V5RXZlbnQoZXZlbnQpKTsKICAgICB9CiB9
CiAKQEAgLTI3OTAsNyArMjc5MCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVHZXN0dXJl
RXZlbnQoY29uc3QgTmF0aXZlV2ViR2VzdHVyZUV2ZW50JiBldmVudCkKICAgICBlbHNlCiAgICAg
ICAgIHJlc3BvbnNpdmVuZXNzVGltZXIuc3RhcnQoKTsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6RXZlbnREaXNwYXRjaGVyOjpHZXN0dXJlRXZlbnQobV93ZWJQYWdlSUQsIGV2ZW50
KSwgMCk7CisgICAgc2VuZChNZXNzYWdlczo6RXZlbnREaXNwYXRjaGVyOjpHZXN0dXJlRXZlbnQo
bV93ZWJQYWdlSUQsIGV2ZW50KSwgMCk7CiB9CiAjZW5kaWYKIApAQCAtMjg1MiwxMyArMjg1Miwx
MyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlUHJldmVudGFibGVUb3VjaEV2ZW50KE5hdGl2
ZVdlYlRvdWNoRXZlbnQmIGV2ZW50KQogICAgICAgICB9OwogCiAgICAgICAgIGF1dG8gY2FsbGJh
Y2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgbV9wcm9j
ZXNzLT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBhZ2VQcm94eTo6aGFuZGxl
UHJldmVudGFibGVUb3VjaEV2ZW50Il9zKSk7Ci0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6RXZlbnREaXNwYXRjaGVyOjpUb3VjaEV2ZW50KG1fd2ViUGFnZUlELCBldmVudCwgY2Fs
bGJhY2tJRCksIDApOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpFdmVudERpc3BhdGNoZXI6OlRv
dWNoRXZlbnQobV93ZWJQYWdlSUQsIGV2ZW50LCBjYWxsYmFja0lEKSwgMCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKICAgICBtX3Byb2Nlc3MtPnJlc3BvbnNpdmVuZXNzVGltZXIoKS5zdGFy
dCgpOwogICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOwotICAgIGJvb2wgcmVwbHlSZWNlaXZlZCA9
IG1fcHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6OlRvdWNoRXZlbnRTeW5jKGV2
ZW50KSwgTWVzc2FnZXM6OldlYlBhZ2U6OlRvdWNoRXZlbnRTeW5jOjpSZXBseShoYW5kbGVkKSwg
bV93ZWJQYWdlSUQsIDFfcywgSVBDOjpTZW5kU3luY09wdGlvbjo6Rm9yY2VEaXNwYXRjaFdoZW5E
ZXN0aW5hdGlvbklzV2FpdGluZ0ZvclVuYm91bmRlZFN5bmNSZXBseSk7CisgICAgYm9vbCByZXBs
eVJlY2VpdmVkID0gc2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6OlRvdWNoRXZlbnRTeW5jKGV2
ZW50KSwgTWVzc2FnZXM6OldlYlBhZ2U6OlRvdWNoRXZlbnRTeW5jOjpSZXBseShoYW5kbGVkKSwg
MV9zLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpGb3JjZURpc3BhdGNoV2hlbkRlc3RpbmF0aW9uSXNX
YWl0aW5nRm9yVW5ib3VuZGVkU3luY1JlcGx5KTsKICAgICAvLyBJZiB0aGUgc3luYyByZXF1ZXN0
IGhhcyB0aW1lZCBvdXQsIHdlIHNob3VsZCBjb25zaWRlciB0aGUgZXZlbnQgaGFuZGxlZC4gVGhl
IFdlYiBQcm9jZXNzIGlzIHRvbyBidXN5IHRvIGFuc3dlciBhbnkgcXVlc3Rpb25zLCBzbyB0aGUg
ZGVmYXVsdCBhY3Rpb24gaXMgYWxzbyBsaWtlbHkgdG8gaGF2ZSBpc3N1ZXMuCiAgICAgaWYgKCFy
ZXBseVJlY2VpdmVkKQogICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKQEAgLTI4NzMsNyArMjg3Myw3
IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZXNldFBvdGVudGlhbFRhcFNlY3VyaXR5T3JpZ2luKCkK
ICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1f
cHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVzZXRQb3RlbnRpYWxUYXBTZWN1cml0
eU9yaWdpbigpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVz
ZXRQb3RlbnRpYWxUYXBTZWN1cml0eU9yaWdpbigpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
OmhhbmRsZVVucHJldmVudGFibGVUb3VjaEV2ZW50KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZlbnQm
IGV2ZW50KQpAQCAtMjg4NSw3ICsyODg1LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZVVu
cHJldmVudGFibGVUb3VjaEV2ZW50KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZlbnQmIGV2ZW4KICAg
ICBpZiAodG91Y2hFdmVudHNUcmFja2luZ1R5cGUgPT0gVHJhY2tpbmdUeXBlOjpOb3RUcmFja2lu
ZykKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpFdmVu
dERpc3BhdGNoZXI6OlRvdWNoRXZlbnQobV93ZWJQYWdlSUQsIGV2ZW50LCBXVEY6Om51bGxvcHQp
LCAwKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpFdmVudERpc3BhdGNoZXI6OlRvdWNoRXZlbnQobV93
ZWJQYWdlSUQsIGV2ZW50LCBXVEY6Om51bGxvcHQpLCAwKTsKIAogICAgIGlmIChldmVudC5hbGxU
b3VjaFBvaW50c0FyZVJlbGVhc2VkKCkpIHsKICAgICAgICAgbV90b3VjaEFuZFBvaW50ZXJFdmVu
dFRyYWNraW5nLnJlc2V0KCk7CkBAIC0yOTEwLDcgKzI5MTAsNyBAQCB2b2lkIFdlYlBhZ2VQcm94
eTo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50JiBldmVudCkKICAg
ICBpZiAoIW1faXNQYWdlU3VzcGVuZGVkKSB7CiAgICAgICAgIG1fdG91Y2hFdmVudFF1ZXVlLmFw
cGVuZChldmVudCk7CiAgICAgICAgIG1fcHJvY2Vzcy0+cmVzcG9uc2l2ZW5lc3NUaW1lcigpLnN0
YXJ0KCk7Ci0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6VG91Y2hF
dmVudChldmVudCksIG1fd2ViUGFnZUlEKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6VG91Y2hFdmVudChldmVudCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChtX3RvdWNo
RXZlbnRRdWV1ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGJvb2wgaXNFdmVudEhhbmRsZWQg
PSBmYWxzZTsKQEAgLTI5MzMsMTIgKzI5MzMsMTIgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRs
ZVRvdWNoRXZlbnQoY29uc3QgTmF0aXZlV2ViVG91Y2hFdmVudCYgZXZlbnQpCiAjaWYgRU5BQkxF
KFBPSU5URVJfRVZFTlRTKQogdm9pZCBXZWJQYWdlUHJveHk6OmNhbmNlbFBvaW50ZXIoV2ViQ29y
ZTo6UG9pbnRlcklEIHBvaW50ZXJJZCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRvY3VtZW50
UG9pbnQpCiB7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDYW5jZWxQ
b2ludGVyKHBvaW50ZXJJZCwgZG9jdW1lbnRQb2ludCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpDYW5jZWxQb2ludGVyKHBvaW50ZXJJZCwgZG9jdW1lbnRQb2lu
dCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6dG91Y2hXaXRoSWRlbnRpZmllcldhc1JlbW92
ZWQoV2ViQ29yZTo6UG9pbnRlcklEIHBvaW50ZXJJZCkKIHsKLSAgICBtX3Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OlRvdWNoV2l0aElkZW50aWZpZXJXYXNSZW1vdmVkKHBvaW50ZXJJ
ZCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpUb3VjaFdpdGhJ
ZGVudGlmaWVyV2FzUmVtb3ZlZChwb2ludGVySWQpKTsKIH0KICNlbmRpZgogCkBAIC0yOTQ3LDcg
KzI5NDcsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2Nyb2xsQnkoU2Nyb2xsRGlyZWN0aW9uIGRp
cmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYQogICAgIGlmICghaGFzUnVubmluZ1By
b2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpTY3JvbGxCeShkaXJlY3Rpb24sIGdyYW51bGFyaXR5KSwgbV93ZWJQYWdlSUQp
OworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNjcm9sbEJ5KGRpcmVjdGlvbiwgZ3JhbnVs
YXJpdHkpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmNlbnRlclNlbGVjdGlvbkluVmlzaWJs
ZUFyZWEoKQpAQCAtMjk1NSw3ICsyOTU1LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNlbnRlclNl
bGVjdGlvbkluVmlzaWJsZUFyZWEoKQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpD
ZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhKCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpDZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhKCkpOwogfQogCiBj
bGFzcyBXZWJQYWdlUHJveHk6OlBvbGljeURlY2lzaW9uU2VuZGVyIDogcHVibGljIFJlZkNvdW50
ZWQ8UG9saWN5RGVjaXNpb25TZW5kZXI+IHsKQEAgLTMxMjEsNyArMzEyMSw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5Ojpjb21taXRQcm92aXNpb25hbFBhZ2UoRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQs
IHVpbnQ2NF90IG5hdmlnCiAKICAgICAvLyBUaGVyZSBpcyBubyB3YXkgd2UnbGwgYmUgYWJsZSB0
byByZXR1cm4gdG8gdGhlIHBhZ2UgaW4gdGhlIHByZXZpb3VzIHBhZ2Ugc28gY2xvc2UgaXQuCiAg
ICAgaWYgKCFkaWRTdXNwZW5kUHJldmlvdXNQYWdlKQotICAgICAgICBtX3Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OkNsb3NlKCksIG1fd2ViUGFnZUlEKTsKKyAgICAgICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6Q2xvc2UoKSk7CiAKICAgICBjb25zdCBhdXRvIG9sZFdlYlBhZ2VJ
RCA9IG1fd2ViUGFnZUlEOwogICAgIHN3YXBUb1dlYlByb2Nlc3MobV9wcm92aXNpb25hbFBhZ2Ut
PnByb2Nlc3MoKSwgbV9wcm92aXNpb25hbFBhZ2UtPndlYlBhZ2VJRCgpLCBtX3Byb3Zpc2lvbmFs
UGFnZS0+dGFrZURyYXdpbmdBcmVhKCksIG1fcHJvdmlzaW9uYWxQYWdlLT5tYWluRnJhbWUoKSk7
CkBAIC0zMjIyLDcgKzMyMjIsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0VXNlckFnZW50KFN0
cmluZyYmIHVzZXJBZ2VudCkKIAogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0VXNl
ckFnZW50KG1fdXNlckFnZW50KSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OlNldFVzZXJBZ2VudChtX3VzZXJBZ2VudCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94
eTo6c2V0QXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50KGNvbnN0IFN0cmluZyYgYXBwbGljYXRp
b25OYW1lKQpAQCAtMzI1OSw3ICszMjU5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlc3VtZUFj
dGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCkKIAogICAgIG1faXNQYWdlU3VzcGVuZGVkID0g
ZmFsc2U7CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJlc3VtZUFj
dGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpSZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpKTsK
IH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0
aW9ucygpCkBAIC0zMjY5LDcgKzMyNjksNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c3VzcGVuZEFj
dGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCkKIAogICAgIG1faXNQYWdlU3VzcGVuZGVkID0g
dHJ1ZTsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U3VzcGVuZEFj
dGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpTdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKSk7
CiB9CiAKIGJvb2wgV2ViUGFnZVByb3h5OjpzdXBwb3J0c1RleHRFbmNvZGluZygpIGNvbnN0CkBA
IC0zMjg2LDcgKzMyODYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Q3VzdG9tVGV4dEVuY29k
aW5nTmFtZShjb25zdCBTdHJpbmcmIGVuY29kaW5nTmFtZSkKIAogICAgIGlmICghaGFzUnVubmlu
Z1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6U2V0Q3VzdG9tVGV4dEVuY29kaW5nTmFtZShlbmNvZGluZ05hbWUpLCBtX3dl
YlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0Q3VzdG9tVGV4dEVuY29k
aW5nTmFtZShlbmNvZGluZ05hbWUpKTsKIH0KIAogU2Vzc2lvblN0YXRlIFdlYlBhZ2VQcm94eTo6
c2Vzc2lvblN0YXRlKFdURjo6RnVuY3Rpb248Ym9vbCAoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYp
PiYmIGZpbHRlcikgY29uc3QKQEAgLTMzMjQsNyArMzMyNCw3IEBAIFJlZlB0cjxBUEk6Ok5hdmln
YXRpb24+IFdlYlBhZ2VQcm94eTo6cmVzdG9yZUZyb21TZXNzaW9uU3RhdGUoU2Vzc2lvblN0YXRl
IHNlc3NpCiAgICAgICAgIGxhdW5jaEluaXRpYWxQcm9jZXNzSWZOZWNlc3NhcnkoKTsKIAogICAg
ICAgICBtX2JhY2tGb3J3YXJkTGlzdC0+cmVzdG9yZUZyb21TdGF0ZShXVEZNb3ZlKHNlc3Npb25T
dGF0ZS5iYWNrRm9yd2FyZExpc3RTdGF0ZSkpOwotICAgICAgICBwcm9jZXNzKCkuc2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6UmVzdG9yZVNlc3Npb24obV9iYWNrRm9yd2FyZExpc3QtPml0ZW1TdGF0
ZXMoKSksIG1fd2ViUGFnZUlEKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVz
dG9yZVNlc3Npb24obV9iYWNrRm9yd2FyZExpc3QtPml0ZW1TdGF0ZXMoKSkpOwogCiAgICAgICAg
IGF1dG8gdHJhbnNhY3Rpb24gPSBtX3BhZ2VMb2FkU3RhdGUudHJhbnNhY3Rpb24oKTsKICAgICAg
ICAgbV9wYWdlTG9hZFN0YXRlLnNldENhbkdvQmFjayh0cmFuc2FjdGlvbiwgbV9iYWNrRm9yd2Fy
ZExpc3QtPmJhY2tJdGVtKCkpOwpAQCAtMzM3Miw3ICszMzcyLDcgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OnNldFRleHRab29tRmFjdG9yKGRvdWJsZSB6b29tRmFjdG9yKQogICAgIGlmICghaGFzUnVu
bmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpTZXRUZXh0Wm9vbUZhY3RvcihtX3RleHRab29tRmFjdG9yKSwgbV93
ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFRleHRab29tRmFjdG9y
KG1fdGV4dFpvb21GYWN0b3IpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldFBhZ2Vab29t
RmFjdG9yKGRvdWJsZSB6b29tRmFjdG9yKQpAQCAtMzM4Nyw3ICszMzg3LDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OnNldFBhZ2Vab29tRmFjdG9yKGRvdWJsZSB6b29tRmFjdG9yKQogICAgIGlmICgh
aGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRQYWdlWm9vbUZhY3RvcihtX3BhZ2Vab29tRmFjdG9y
KSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFBhZ2Vab29t
RmFjdG9yKG1fcGFnZVpvb21GYWN0b3IpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldFBh
Z2VBbmRUZXh0Wm9vbUZhY3RvcnMoZG91YmxlIHBhZ2Vab29tRmFjdG9yLCBkb3VibGUgdGV4dFpv
b21GYWN0b3IpCkBAIC0zNDAzLDcgKzM0MDMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0UGFn
ZUFuZFRleHRab29tRmFjdG9ycyhkb3VibGUgcGFnZVpvb21GYWN0b3IsIGRvdWJsZSB0ZXh0Wgog
ICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9w
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRQYWdlQW5kVGV4dFpvb21GYWN0b3Jz
KG1fcGFnZVpvb21GYWN0b3IsIG1fdGV4dFpvb21GYWN0b3IpLCBtX3dlYlBhZ2VJRCk7CisgICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyhtX3BhZ2Va
b29tRmFjdG9yLCBtX3RleHRab29tRmFjdG9yKSk7CiB9CiAKIGRvdWJsZSBXZWJQYWdlUHJveHk6
OnBhZ2Vab29tRmFjdG9yKCkgY29uc3QKQEAgLTM0MzMsNyArMzQzMyw3IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpzY2FsZVBhZ2UoZG91YmxlIHNjYWxlLCBjb25zdCBJbnRQb2ludCYgb3JpZ2luKQog
ICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9w
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTY2FsZVBhZ2Uoc2NhbGUsIG9yaWdpbiks
IG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTY2FsZVBhZ2Uoc2Nh
bGUsIG9yaWdpbikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2NhbGVQYWdlSW5WaWV3Q29v
cmRpbmF0ZXMoZG91YmxlIHNjYWxlLCBjb25zdCBJbnRQb2ludCYgY2VudGVySW5WaWV3Q29vcmRp
bmF0ZXMpCkBAIC0zNDQ1LDcgKzM0NDUsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2NhbGVQYWdl
SW5WaWV3Q29vcmRpbmF0ZXMoZG91YmxlIHNjYWxlLCBjb25zdCBJbnRQb2ludCYgY2VudAogICAg
IGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTY2FsZVBhZ2VJblZpZXdDb29yZGluYXRlcyhz
Y2FsZSwgY2VudGVySW5WaWV3Q29vcmRpbmF0ZXMpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6U2NhbGVQYWdlSW5WaWV3Q29vcmRpbmF0ZXMoc2NhbGUsIGNlbnRl
ckluVmlld0Nvb3JkaW5hdGVzKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzY2FsZVZpZXco
ZG91YmxlIHNjYWxlKQpAQCAtMzQ1Nyw3ICszNDU3LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNj
YWxlVmlldyhkb3VibGUgc2NhbGUpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNj
YWxlVmlldyhzY2FsZSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpTY2FsZVZpZXcoc2NhbGUpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldEludHJpbnNp
Y0RldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQpAQCAtMzQ3Niw3ICszNDc2LDcg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OndpbmRvd1NjcmVlbkRpZENoYW5nZShQbGF0Zm9ybURpc3Bs
YXlJRCBkaXNwbGF5SUQpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OldpbmRvd1Nj
cmVlbkRpZENoYW5nZShkaXNwbGF5SUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6V2luZG93U2NyZWVuRGlkQ2hhbmdlKGRpc3BsYXlJRCkpOwogfQogCiBmbG9h
dCBXZWJQYWdlUHJveHk6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKQEAgLTM1MTUsNyArMzUx
NSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjphY2Nlc3NpYmlsaXR5U2V0dGluZ3NEaWRDaGFuZ2Uo
KQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpBY2Nlc3NpYmlsaXR5U2V0dGluZ3NE
aWRDaGFuZ2UoKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkFj
Y2Vzc2liaWxpdHlTZXR0aW5nc0RpZENoYW5nZSgpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
OnNldFVzZUZpeGVkTGF5b3V0KGJvb2wgZml4ZWQpCkBAIC0zNTMyLDcgKzM1MzIsNyBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6c2V0VXNlRml4ZWRMYXlvdXQoYm9vbCBmaXhlZCkKICAgICBpZiAoIWhh
c1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0VXNlRml4ZWRMYXlvdXQoZml4ZWQpLCBtX3dlYlBhZ2VJ
RCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0VXNlRml4ZWRMYXlvdXQoZml4ZWQp
KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldEZpeGVkTGF5b3V0U2l6ZShjb25zdCBJbnRT
aXplJiBzaXplKQpAQCAtMzU0NSw3ICszNTQ1LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldEZp
eGVkTGF5b3V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogICAgIGlmICghaGFzUnVubmluZ1By
b2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpTZXRGaXhlZExheW91dFNpemUoc2l6ZSksIG1fd2ViUGFnZUlEKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRGaXhlZExheW91dFNpemUoc2l6ZSkpOwogfQogCiB2
b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWx3YXlzU2hvd3NIb3Jpem9udGFsU2Nyb2xsZXIoYm9vbCBh
bHdheXNTaG93c0hvcml6b250YWxTY3JvbGxlcikKQEAgLTM1NTgsNyArMzU1OCw3IEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpzZXRBbHdheXNTaG93c0hvcml6b250YWxTY3JvbGxlcihib29sIGFsd2F5
c1Nob3dzSG9yaXpvbnRhbFNjCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEFs
d2F5c1Nob3dzSG9yaXpvbnRhbFNjcm9sbGVyKGFsd2F5c1Nob3dzSG9yaXpvbnRhbFNjcm9sbGVy
KSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEFsd2F5c1No
b3dzSG9yaXpvbnRhbFNjcm9sbGVyKGFsd2F5c1Nob3dzSG9yaXpvbnRhbFNjcm9sbGVyKSk7CiB9
CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRBbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIoYm9v
bCBhbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIpCkBAIC0zNTcxLDcgKzM1NzEsNyBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6c2V0QWx3YXlzU2hvd3NWZXJ0aWNhbFNjcm9sbGVyKGJvb2wgYWx3YXlz
U2hvd3NWZXJ0aWNhbFNjcm9sbAogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRB
bHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIoYWx3YXlzU2hvd3NWZXJ0aWNhbFNjcm9sbGVyKSwg
bV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEFsd2F5c1Nob3dz
VmVydGljYWxTY3JvbGxlcihhbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIpKTsKIH0KIAogdm9p
ZCBXZWJQYWdlUHJveHk6Omxpc3RlbkZvckxheW91dE1pbGVzdG9uZXMoT3B0aW9uU2V0PFdlYkNv
cmU6OkxheW91dE1pbGVzdG9uZT4gbWlsZXN0b25lcykKQEAgLTM1ODQsNyArMzU4NCw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpsaXN0ZW5Gb3JMYXlvdXRNaWxlc3RvbmVzKE9wdGlvblNldDxXZWJD
b3JlOjpMYXlvdXRNaWxlc3RvbmU+CiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Okxp
c3RlbkZvckxheW91dE1pbGVzdG9uZXMobWlsZXN0b25lcyksIG1fd2ViUGFnZUlEKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpMaXN0ZW5Gb3JMYXlvdXRNaWxlc3RvbmVzKG1pbGVzdG9u
ZXMpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldFN1cHByZXNzU2Nyb2xsYmFyQW5pbWF0
aW9ucyhib29sIHN1cHByZXNzQW5pbWF0aW9ucykKQEAgLTM1OTcsNyArMzU5Nyw3IEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpzZXRTdXBwcmVzc1Njcm9sbGJhckFuaW1hdGlvbnMoYm9vbCBzdXBwcmVz
c0FuaW1hdGlvbnMpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFN1cHByZXNz
U2Nyb2xsYmFyQW5pbWF0aW9ucyhzdXBwcmVzc0FuaW1hdGlvbnMpLCBtX3dlYlBhZ2VJRCk7Cisg
ICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0U3VwcHJlc3NTY3JvbGxiYXJBbmltYXRpb25z
KHN1cHByZXNzQW5pbWF0aW9ucykpOwogfQogCiBib29sIFdlYlBhZ2VQcm94eTo6cnViYmVyQmFu
ZHNBdExlZnQoKSBjb25zdApAQCAtMzY0OSw3ICszNjQ5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OnNldEVuYWJsZVZlcnRpY2FsUnViYmVyQmFuZGluZyhib29sIGVuYWJsZVZlcnRpY2FsUnViYmVy
QmFuZGkKIAogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0RW5hYmxlVmVydGljYWxS
dWJiZXJCYW5kaW5nKGVuYWJsZVZlcnRpY2FsUnViYmVyQmFuZGluZyksIG1fd2ViUGFnZUlEKTsK
KyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRFbmFibGVWZXJ0aWNhbFJ1YmJlckJhbmRp
bmcoZW5hYmxlVmVydGljYWxSdWJiZXJCYW5kaW5nKSk7CiB9CiAgICAgCiBib29sIFdlYlBhZ2VQ
cm94eTo6dmVydGljYWxSdWJiZXJCYW5kaW5nSXNFbmFibGVkKCkgY29uc3QKQEAgLTM2NjYsNyAr
MzY2Niw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRFbmFibGVIb3Jpem9udGFsUnViYmVyQmFu
ZGluZyhib29sIGVuYWJsZUhvcml6b250YWxSdWJiZXJCCiAKICAgICBpZiAoIWhhc1J1bm5pbmdQ
cm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OlNldEVuYWJsZUhvcml6b250YWxSdWJiZXJCYW5kaW5nKGVuYWJsZUhvcml6b250
YWxSdWJiZXJCYW5kaW5nKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlNldEVuYWJsZUhvcml6b250YWxSdWJiZXJCYW5kaW5nKGVuYWJsZUhvcml6b250YWxSdWJi
ZXJCYW5kaW5nKSk7CiB9CiAgICAgCiBib29sIFdlYlBhZ2VQcm94eTo6aG9yaXpvbnRhbFJ1YmJl
ckJhbmRpbmdJc0VuYWJsZWQoKSBjb25zdApAQCAtMzY4Myw3ICszNjgzLDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OnNldEJhY2tncm91bmRFeHRlbmRzQmV5b25kUGFnZShib29sIGJhY2tncm91bmRF
eHRlbmRzQmV5b25kUGEKIAogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0QmFja2dy
b3VuZEV4dGVuZHNCZXlvbmRQYWdlKGJhY2tncm91bmRFeHRlbmRzQmV5b25kUGFnZSksIG1fd2Vi
UGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRCYWNrZ3JvdW5kRXh0ZW5k
c0JleW9uZFBhZ2UoYmFja2dyb3VuZEV4dGVuZHNCZXlvbmRQYWdlKSk7CiB9CiAKIGJvb2wgV2Vi
UGFnZVByb3h5OjpiYWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2UoKSBjb25zdApAQCAtMzcwMCw3
ICszNzAwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFBhZ2luYXRpb25Nb2RlKFdlYkNvcmU6
OlBhZ2luYXRpb246Ok1vZGUgbW9kZSkKIAogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
U2V0UGFnaW5hdGlvbk1vZGUobW9kZSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpTZXRQYWdpbmF0aW9uTW9kZShtb2RlKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVBy
b3h5OjpzZXRQYWdpbmF0aW9uQmVoYXZlc0xpa2VDb2x1bW5zKGJvb2wgYmVoYXZlc0xpa2VDb2x1
bW5zKQpAQCAtMzcxMiw3ICszNzEyLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFBhZ2luYXRp
b25CZWhhdmVzTGlrZUNvbHVtbnMoYm9vbCBiZWhhdmVzTGlrZUNvbHVtbnMpCiAKICAgICBpZiAo
IWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX3Byb2Nlc3MtPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFBhZ2luYXRpb25CZWhhdmVzTGlrZUNvbHVtbnMoYmVo
YXZlc0xpa2VDb2x1bW5zKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlNldFBhZ2luYXRpb25CZWhhdmVzTGlrZUNvbHVtbnMoYmVoYXZlc0xpa2VDb2x1bW5zKSk7
CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRQYWdlTGVuZ3RoKGRvdWJsZSBwYWdlTGVuZ3Ro
KQpAQCAtMzcyNCw3ICszNzI0LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFBhZ2VMZW5ndGgo
ZG91YmxlIHBhZ2VMZW5ndGgpCiAKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFBh
Z2VMZW5ndGgocGFnZUxlbmd0aCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpTZXRQYWdlTGVuZ3RoKHBhZ2VMZW5ndGgpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJv
eHk6OnNldEdhcEJldHdlZW5QYWdlcyhkb3VibGUgZ2FwKQpAQCAtMzczNiw3ICszNzM2LDcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnNldEdhcEJldHdlZW5QYWdlcyhkb3VibGUgZ2FwKQogCiAgICAg
aWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9wcm9jZXNz
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRHYXBCZXR3ZWVuUGFnZXMoZ2FwKSwgbV93ZWJQ
YWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEdhcEJldHdlZW5QYWdlcyhn
YXApKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldFBhZ2luYXRpb25MaW5lR3JpZEVuYWJs
ZWQoYm9vbCBsaW5lR3JpZEVuYWJsZWQpCkBAIC0zNzQ4LDcgKzM3NDgsNyBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6c2V0UGFnaW5hdGlvbkxpbmVHcmlkRW5hYmxlZChib29sIGxpbmVHcmlkRW5hYmxl
ZCkKICAgICAKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsK
LSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFBhZ2luYXRpb25MaW5l
R3JpZEVuYWJsZWQobGluZUdyaWRFbmFibGVkKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OlNldFBhZ2luYXRpb25MaW5lR3JpZEVuYWJsZWQobGluZUdyaWRFbmFi
bGVkKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpwYWdlU2NhbGVGYWN0b3JEaWRDaGFuZ2Uo
ZG91YmxlIHNjYWxlRmFjdG9yKQpAQCAtMzc3Myw3ICszNzczLDcgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OmZpbmRTdHJpbmdNYXRjaGVzKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBGaW5kT3B0aW9ucyBv
cHRpb25zLAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpGaW5kU3RyaW5nTWF0Y2hlcyhzdHJpbmcsIG9wdGlvbnMsIG1heE1h
dGNoQ291bnQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Rmlu
ZFN0cmluZ01hdGNoZXMoc3RyaW5nLCBvcHRpb25zLCBtYXhNYXRjaENvdW50KSk7CiB9CiAKIHZv
aWQgV2ViUGFnZVByb3h5OjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBGaW5kT3B0
aW9ucyBvcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50LCBGdW5jdGlvbjx2b2lkIChib29s
LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQpAQCAtMzc4Miw3ICsz
NzgyLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJp
bmcsIEZpbmRPcHRpb25zIG9wdGlvbnMsIHVuc2lnbmUKICAgICBpZiAoY2FsbGJhY2tGdW5jdGlv
bikKICAgICAgICAgY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNr
RnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2Vi
UGFnZVByb3h5OjpmaW5kU3RyaW5nIl9zKSk7CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OkZpbmRTdHJpbmcoc3RyaW5nLCBvcHRpb25zLCBtYXhNYXRjaENvdW50LCBj
YWxsYmFja0lEKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkZp
bmRTdHJpbmcoc3RyaW5nLCBvcHRpb25zLCBtYXhNYXRjaENvdW50LCBjYWxsYmFja0lEKSk7CiB9
CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpmaW5kU3RyaW5nQ2FsbGJhY2soYm9vbCBmb3VuZCwgQ2Fs
bGJhY2tJRCBjYWxsYmFja0lEKQpAQCAtMzc5NiwyMiArMzc5NiwyMiBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6ZmluZFN0cmluZ0NhbGxiYWNrKGJvb2wgZm91bmQsIENhbGxiYWNrSUQgY2FsbGJhY2tJ
RCkKIAogdm9pZCBXZWJQYWdlUHJveHk6OmdldEltYWdlRm9yRmluZE1hdGNoKGludDMyX3QgbWF0
Y2hJbmRleCkKIHsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdldElt
YWdlRm9yRmluZE1hdGNoKG1hdGNoSW5kZXgpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6R2V0SW1hZ2VGb3JGaW5kTWF0Y2gobWF0Y2hJbmRleCkpOwogfQogCiB2
b2lkIFdlYlBhZ2VQcm94eTo6c2VsZWN0RmluZE1hdGNoKGludDMyX3QgbWF0Y2hJbmRleCkKIHsK
LSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNlbGVjdEZpbmRNYXRjaCht
YXRjaEluZGV4KSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNl
bGVjdEZpbmRNYXRjaChtYXRjaEluZGV4KSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjppbmRp
Y2F0ZUZpbmRNYXRjaChpbnQzMl90IG1hdGNoSW5kZXgpCiB7Ci0gICAgbV9wcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpJbmRpY2F0ZUZpbmRNYXRjaChtYXRjaEluZGV4KSwgbV93ZWJQ
YWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkluZGljYXRlRmluZE1hdGNoKG1h
dGNoSW5kZXgpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmhpZGVGaW5kVUkoKQogewotICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SGlkZUZpbmRVSSgpLCBtX3dlYlBh
Z2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SGlkZUZpbmRVSSgpKTsKIH0KIAog
dm9pZCBXZWJQYWdlUHJveHk6OmNvdW50U3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmIHN0cmlu
ZywgRmluZE9wdGlvbnMgb3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCkKQEAgLTM4MTks
NyArMzgxOSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpjb3VudFN0cmluZ01hdGNoZXMoY29uc3Qg
U3RyaW5nJiBzdHJpbmcsIEZpbmRPcHRpb25zIG9wdGlvbnMsCiAgICAgaWYgKCFoYXNSdW5uaW5n
UHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OkNvdW50U3RyaW5nTWF0Y2hlcyhzdHJpbmcsIG9wdGlvbnMsIG1heE1hdGNo
Q291bnQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q291bnRT
dHJpbmdNYXRjaGVzKHN0cmluZywgb3B0aW9ucywgbWF4TWF0Y2hDb3VudCkpOwogfQogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6cmVwbGFjZU1hdGNoZXMoVmVjdG9yPHVpbnQzMl90PiYmIG1hdGNoSW5k
aWNlcywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFRleHQsIGJvb2wgc2VsZWN0aW9uT25seSwg
RnVuY3Rpb248dm9pZCh1aW50NjRfdCwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2sp
CkBAIC0zODMwLDcgKzM4MzAsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVwbGFjZU1hdGNoZXMo
VmVjdG9yPHVpbnQzMl90PiYmIG1hdGNoSW5kaWNlcywgY29uc3QgU3RyaW5nJgogICAgIH0KIAog
ICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrKSwg
bV9wcm9jZXNzLT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBhZ2VQcm94eTo6
cmVwbGFjZU1hdGNoZXMiX3MpKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlJlcGxhY2VNYXRjaGVzKFdURk1vdmUobWF0Y2hJbmRpY2VzKSwgcmVwbGFjZW1lbnRUZXh0
LCBzZWxlY3Rpb25Pbmx5LCBjYWxsYmFja0lEKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OlJlcGxhY2VNYXRjaGVzKFdURk1vdmUobWF0Y2hJbmRpY2VzKSwgcmVw
bGFjZW1lbnRUZXh0LCBzZWxlY3Rpb25Pbmx5LCBjYWxsYmFja0lEKSk7CiB9CiAKIHZvaWQgV2Vi
UGFnZVByb3h5OjpsYXVuY2hJbml0aWFsUHJvY2Vzc0lmTmVjZXNzYXJ5KCkKQEAgLTM4NTUsMTQg
KzM4NTUsMTQgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZVNj
cmlwdFdvcmxkKGNvbnN0IFN0cmluZyYgc2NyaXB0LCBib28KICAgICB9CiAKICAgICBhdXRvIGNh
bGxiYWNrSUQgPSBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgbV9w
cm9jZXNzLT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBhZ2VQcm94eTo6cnVu
SmF2YVNjcmlwdEluTWFpbkZyYW1lU2NyaXB0V29ybGQiX3MpKTsKLSAgICBtX3Byb2Nlc3MtPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZVNjcmlwdFdvcmxk
KHNjcmlwdCwgZm9yY2VVc2VyR2VzdHVyZSwgd29ybGROYW1lLCBjYWxsYmFja0lEKSwgbV93ZWJQ
YWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJ1bkphdmFTY3JpcHRJbk1haW5G
cmFtZVNjcmlwdFdvcmxkKHNjcmlwdCwgZm9yY2VVc2VyR2VzdHVyZSwgd29ybGROYW1lLCBjYWxs
YmFja0lEKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpydW5KYXZhU2NyaXB0SW5GcmFtZShG
cmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiBzY3JpcHQsIGJvb2wgZm9yY2VV
c2VyR2VzdHVyZSwgV1RGOjpGdW5jdGlvbjx2b2lkKEFQSTo6U2VyaWFsaXplZFNjcmlwdFZhbHVl
KiwgYm9vbCBoYWRFeGNlcHRpb24sIGNvbnN0IEV4Y2VwdGlvbkRldGFpbHMmLCBDYWxsYmFja0Jh
c2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewogICAgIEFTU0VSVChtYWluRnJhbWUo
KS0+ZnJhbWVJRCgpICE9IGZyYW1lSUQpOwogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJh
Y2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigp
LmJhY2tncm91bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5OjpydW5KYXZhU2NyaXB0SW5GcmFtZSJf
cykpOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UnVuSmF2YVNjcmlw
dEluRnJhbWUoZnJhbWVJRCwgc2NyaXB0LCBmb3JjZVVzZXJHZXN0dXJlLCBjYWxsYmFja0lEKSwg
bV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJ1bkphdmFTY3JpcHRJ
bkZyYW1lKGZyYW1lSUQsIHNjcmlwdCwgZm9yY2VVc2VyR2VzdHVyZSwgY2FsbGJhY2tJRCkpOwog
fQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRp
b24oV1RGOjpGdW5jdGlvbjx2b2lkIChjb25zdCBTdHJpbmcmLCBDYWxsYmFja0Jhc2U6OkVycm9y
KT4mJiBjYWxsYmFja0Z1bmN0aW9uKQpAQCAtMzg3Myw3ICszODczLDcgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OmdldFJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6RnVuY3Rpb248
dm9pZCAoY29uc3QKICAgICB9CiAgICAgCiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFj
a3MucHV0KFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCku
YmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6OmdldFJlbmRlclRyZWVFeHRlcm5hbFJl
cHJlc2VudGF0aW9uIl9zKSk7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpHZXRSZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbihjYWxsYmFja0lEKSwgbV93ZWJQ
YWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdldFJlbmRlclRyZWVFeHRlcm5h
bFJlcHJlc2VudGF0aW9uKGNhbGxiYWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6Omdl
dFNvdXJjZUZvckZyYW1lKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBXVEY6OkZ1bmN0aW9uPHZvaWQg
KGNvbnN0IFN0cmluZyYsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24p
CkBAIC0zODg1LDcgKzM4ODUsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0U291cmNlRm9yRnJh
bWUoV2ViRnJhbWVQcm94eSogZnJhbWUsIFdURjo6RnVuY3Rpb248dm9pZCAoYwogICAgIAogICAg
IGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rp
b24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViUGFnZVBy
b3h5OjpnZXRTb3VyY2VGb3JGcmFtZSJfcykpOwogICAgIG1fbG9hZERlcGVuZGVudFN0cmluZ0Nh
bGxiYWNrSURzLmFkZChjYWxsYmFja0lEKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OkdldFNvdXJjZUZvckZyYW1lKGZyYW1lLT5mcmFtZUlEKCksIGNhbGxiYWNrSUQp
LCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R2V0U291cmNlRm9y
RnJhbWUoZnJhbWUtPmZyYW1lSUQoKSwgY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQ
cm94eTo6Z2V0Q29udGVudHNBc1N0cmluZyhXVEY6OkZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmlu
ZyYsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCkBAIC0zODk3LDcg
KzM4OTcsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0Q29udGVudHNBc1N0cmluZyhXVEY6OkZ1
bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYsIENhbGxiYQogICAgIAogICAgIGF1dG8gY2FsbGJh
Y2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nl
c3MtPnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5OjpnZXRDb250
ZW50c0FzU3RyaW5nIl9zKSk7CiAgICAgbV9sb2FkRGVwZW5kZW50U3RyaW5nQ2FsbGJhY2tJRHMu
YWRkKGNhbGxiYWNrSUQpOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
R2V0Q29udGVudHNBc1N0cmluZyhjYWxsYmFja0lEKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OkdldENvbnRlbnRzQXNTdHJpbmcoY2FsbGJhY2tJRCkpOwogfQog
CiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC0zOTA4LDcgKzM5MDgsNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6Z2V0Q29udGVudHNBc0F0dHJpYnV0ZWRTdHJpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChjb25zdCBBdAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9wcm9jZXNzLT5jb25u
ZWN0aW9uKCktPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViUGFnZTo6R2V0Q29udGVu
dHNBc0F0dHJpYnV0ZWRTdHJpbmcoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG1fd2Vi
UGFnZUlEKTsKKyAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OkdldENv
bnRlbnRzQXNBdHRyaWJ1dGVkU3RyaW5nKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IH0KICNlbmRpZgogCkBAIC0zOTIxLDcgKzM5MjEsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0
Qnl0ZWNvZGVQcm9maWxlKFdURjo6RnVuY3Rpb248dm9pZCAoY29uc3QgU3RyaW5nJiwgQ2FsbGJh
YwogICAgIAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNh
bGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0
eSgiV2ViUGFnZVByb3h5OjpnZXRCeXRlY29kZVByb2ZpbGUiX3MpKTsKICAgICBtX2xvYWREZXBl
bmRlbnRTdHJpbmdDYWxsYmFja0lEcy5hZGQoY2FsbGJhY2tJRCk7Ci0gICAgbV9wcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRCeXRlY29kZVByb2ZpbGUoY2FsbGJhY2tJRCksIG1f
d2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRCeXRlY29kZVByb2Zp
bGUoY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0U2FtcGxpbmdQcm9m
aWxlck91dHB1dChXVEY6OkZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYsIENhbGxiYWNrQmFz
ZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCkBAIC0zOTMzLDcgKzM5MzMsNyBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6Z2V0U2FtcGxpbmdQcm9maWxlck91dHB1dChXVEY6OkZ1bmN0aW9uPHZv
aWQgKGNvbnN0IFN0cmluZyYsCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFj
a3MucHV0KFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCku
YmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6OmdldFNhbXBsaW5nUHJvZmlsZXJPdXRw
dXQiX3MpKTsKICAgICBtX2xvYWREZXBlbmRlbnRTdHJpbmdDYWxsYmFja0lEcy5hZGQoY2FsbGJh
Y2tJRCk7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRTYW1wbGlu
Z1Byb2ZpbGVyT3V0cHV0KGNhbGxiYWNrSUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6R2V0U2FtcGxpbmdQcm9maWxlck91dHB1dChjYWxsYmFja0lEKSk7CiB9
CiAKICNpZiBFTkFCTEUoTUhUTUwpCkBAIC0zOTQ1LDcgKzM5NDUsNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6Z2V0Q29udGVudHNBc01IVE1MRGF0YShGdW5jdGlvbjx2b2lkIChBUEk6OkRhdGEqLCBD
YWxsYmFja0JhcwogICAgIH0KIAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1
dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tn
cm91bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5OjpnZXRDb250ZW50c0FzTUhUTUxEYXRhIl9zKSk7
Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRDb250ZW50c0FzTUhU
TUxEYXRhKGNhbGxiYWNrSUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6R2V0Q29udGVudHNBc01IVE1MRGF0YShjYWxsYmFja0lEKSk7CiB9CiAjZW5kaWYKIApA
QCAtMzk1Nyw3ICszOTU3LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmdldFNlbGVjdGlvbk9yQ29u
dGVudHNBc1N0cmluZyhXVEY6OkZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmkKICAgICB9CiAgICAg
CiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2tG
dW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQ
YWdlUHJveHk6OmdldFNlbGVjdGlvbk9yQ29udGVudHNBc1N0cmluZyJfcykpOwotICAgIG1fcHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R2V0U2VsZWN0aW9uT3JDb250ZW50c0FzU3Ry
aW5nKGNhbGxiYWNrSUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6R2V0U2VsZWN0aW9uT3JDb250ZW50c0FzU3RyaW5nKGNhbGxiYWNrSUQpKTsKIH0KIAogdm9p
ZCBXZWJQYWdlUHJveHk6OmdldFNlbGVjdGlvbkFzV2ViQXJjaGl2ZURhdGEoRnVuY3Rpb248dm9p
ZCAoQVBJOjpEYXRhKiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2tGdW5jdGlvbikK
QEAgLTM5NjgsNyArMzk2OCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpnZXRTZWxlY3Rpb25Bc1dl
YkFyY2hpdmVEYXRhKEZ1bmN0aW9uPHZvaWQgKEFQSTo6RGF0YSosIENhbGxiCiAgICAgfQogICAg
IAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNr
RnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2Vi
UGFnZVByb3h5OjpnZXRTZWxlY3Rpb25Bc1dlYkFyY2hpdmVEYXRhIl9zKSk7Ci0gICAgbV9wcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRTZWxlY3Rpb25Bc1dlYkFyY2hpdmVEYXRh
KGNhbGxiYWNrSUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
R2V0U2VsZWN0aW9uQXNXZWJBcmNoaXZlRGF0YShjYWxsYmFja0lEKSk7CiB9CiAKIHZvaWQgV2Vi
UGFnZVByb3h5OjpnZXRNYWluUmVzb3VyY2VEYXRhT2ZGcmFtZShXZWJGcmFtZVByb3h5KiBmcmFt
ZSwgRnVuY3Rpb248dm9pZCAoQVBJOjpEYXRhKiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2Fs
bGJhY2tGdW5jdGlvbikKQEAgLTM5NzksNyArMzk3OSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpn
ZXRNYWluUmVzb3VyY2VEYXRhT2ZGcmFtZShXZWJGcmFtZVByb3h5KiBmcmFtZSwgRnVuY3Rpb248
dm9pCiAgICAgfQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChX
VEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91
bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5OjpnZXRNYWluUmVzb3VyY2VEYXRhT2ZGcmFtZSJfcykp
OwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R2V0TWFpblJlc291cmNl
RGF0YU9mRnJhbWUoZnJhbWUtPmZyYW1lSUQoKSwgY2FsbGJhY2tJRCksIG1fd2ViUGFnZUlEKTsK
KyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRNYWluUmVzb3VyY2VEYXRhT2ZGcmFtZShm
cmFtZS0+ZnJhbWVJRCgpLCBjYWxsYmFja0lEKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5Ojpn
ZXRSZXNvdXJjZURhdGFGcm9tRnJhbWUoV2ViRnJhbWVQcm94eSogZnJhbWUsIEFQSTo6VVJMKiBy
ZXNvdXJjZVVSTCwgRnVuY3Rpb248dm9pZCAoQVBJOjpEYXRhKiwgQ2FsbGJhY2tCYXNlOjpFcnJv
cik+JiYgY2FsbGJhY2tGdW5jdGlvbikKQEAgLTM5OTAsNyArMzk5MCw3IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpnZXRSZXNvdXJjZURhdGFGcm9tRnJhbWUoV2ViRnJhbWVQcm94eSogZnJhbWUsIEFQ
STo6VVJMKiByZXNvCiAgICAgfQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJh
Y2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigp
LmJhY2tncm91bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5OjpnZXRSZXNvdXJjZURhdGFGcm9tRnJh
bWUiX3MpKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdldFJlc291
cmNlRGF0YUZyb21GcmFtZShmcmFtZS0+ZnJhbWVJRCgpLCByZXNvdXJjZVVSTC0+c3RyaW5nKCks
IGNhbGxiYWNrSUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
R2V0UmVzb3VyY2VEYXRhRnJvbUZyYW1lKGZyYW1lLT5mcmFtZUlEKCksIHJlc291cmNlVVJMLT5z
dHJpbmcoKSwgY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0V2ViQXJj
aGl2ZU9mRnJhbWUoV2ViRnJhbWVQcm94eSogZnJhbWUsIEZ1bmN0aW9uPHZvaWQgKEFQSTo6RGF0
YSosIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCkBAIC00MDAxLDcg
KzQwMDEsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0V2ViQXJjaGl2ZU9mRnJhbWUoV2ViRnJh
bWVQcm94eSogZnJhbWUsIEZ1bmN0aW9uPHZvaWQgKEFQSQogICAgIH0KICAgICAKICAgICBhdXRv
IGNhbGxiYWNrSUQgPSBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwg
bV9wcm9jZXNzLT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBhZ2VQcm94eTo6
Z2V0V2ViQXJjaGl2ZU9mRnJhbWUiX3MpKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OkdldFdlYkFyY2hpdmVPZkZyYW1lKGZyYW1lLT5mcmFtZUlEKCksIGNhbGxiYWNr
SUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R2V0V2ViQXJj
aGl2ZU9mRnJhbWUoZnJhbWUtPmZyYW1lSUQoKSwgY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdl
YlBhZ2VQcm94eTo6Zm9yY2VSZXBhaW50KFJlZlB0cjxWb2lkQ2FsbGJhY2s+JiYgY2FsbGJhY2sp
CkBAIC00MDM1LDcgKzQwMzUsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Zm9yY2VSZXBhaW50KFJl
ZlB0cjxWb2lkQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiAKICAgICBhdXRvIGNhbGxiYWNrSUQgPSBt
X2NhbGxiYWNrcy5wdXQoV1RGTW92ZShkaWRGb3JjZVJlcGFpbnRDYWxsYmFjayksIG1fcHJvY2Vz
cy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6OmZvcmNlUmVw
YWludCJfcykpOwogICAgIG1fZHJhd2luZ0FyZWEtPndhaXRGb3JCYWNraW5nU3RvcmVVcGRhdGVP
bk5leHRQYWludCgpOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Rm9y
Y2VSZXBhaW50KGNhbGxiYWNrSUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6Rm9yY2VSZXBhaW50KGNhbGxiYWNrSUQpKTsKIH0KIAogc3RhdGljIE9wdGlvblNl
dDxJUEM6OlNlbmRPcHRpb24+IHByaW50aW5nU2VuZE9wdGlvbnMoYm9vbCBpc1BlcmZvcm1pbmdE
T01QcmludE9wZXJhdGlvbikKQEAgLTQwNjEsNyArNDA2MSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5
OjpwcmVmZXJlbmNlc0RpZENoYW5nZSgpCiAgICAgLy8gZXZlbiBpZiBub3RoaW5nIGNoYW5nZWQg
aW4gVUkgcHJvY2Vzcywgc28gdGhhdCBvdmVycmlkZXMgZ2V0IHJlbW92ZWQuCiAKICAgICAvLyBQ
cmVmZXJlbmNlcyBuZWVkIHRvIGJlIHVwZGF0ZWQgZHVyaW5nIHN5bmNocm9ub3VzIHByaW50aW5n
IHRvIG1ha2UgInByaW50IGJhY2tncm91bmRzIiBwcmVmZXJlbmNlIHdvcmsgd2hlbiB0b2dnbGVk
IGZyb20gYSBwcmludCBkaWFsb2cgY2hlY2tib3guCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpQcmVmZXJlbmNlc0RpZENoYW5nZShwcmVmZXJlbmNlc1N0b3JlKCkpLCBt
X3dlYlBhZ2VJRCwgcHJpbnRpbmdTZW5kT3B0aW9ucyhtX2lzUGVyZm9ybWluZ0RPTVByaW50T3Bl
cmF0aW9uKSk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UHJlZmVyZW5jZXNEaWRDaGFu
Z2UocHJlZmVyZW5jZXNTdG9yZSgpKSwgcHJpbnRpbmdTZW5kT3B0aW9ucyhtX2lzUGVyZm9ybWlu
Z0RPTVByaW50T3BlcmF0aW9uKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDcmVhdGVN
YWluRnJhbWUoRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQpCkBAIC01MTA1LDcgKzUxMDUsNyBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKEZyYW1lSWRl
bnRpZmllciBmcmFtZUlELCBTZWN1cgogICAgICAgICBBU1NFUlRfVU5VU0VEKHNhZmVCcm93c2lu
Z1dhcm5pbmcsICFzYWZlQnJvd3NpbmdXYXJuaW5nKTsKIAogICAgICAgICBhdXRvIHNlbmRlciA9
IFBvbGljeURlY2lzaW9uU2VuZGVyOjpjcmVhdGUoaWRlbnRpZmllciwgW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBmcmFtZUlELCBsaXN0ZW5lcklEXSAoYXV0
by4uLiBhcmdzKSB7Ci0gICAgICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OkRpZFJlY2VpdmVQb2xpY3lEZWNpc2lvbihmcmFtZUlELCBsaXN0ZW5lcklELCBhcmdzLi4u
KSwgbV93ZWJQYWdlSUQpOworICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlk
UmVjZWl2ZVBvbGljeURlY2lzaW9uKGZyYW1lSUQsIGxpc3RlbmVySUQsIGFyZ3MuLi4pKTsKICAg
ICAgICAgfSk7CiAKICAgICAgICAgcmVjZWl2ZWRQb2xpY3lEZWNpc2lvbihwb2xpY3lBY3Rpb24s
IG51bGxwdHIsIFdURjo6bnVsbG9wdCwgV1RGTW92ZShzZW5kZXIpKTsKQEAgLTUxOTEsNyArNTE5
MSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojp3aWxsU3VibWl0Rm9ybShGcmFtZUlkZW50aWZpZXIg
ZnJhbWVJRCwgRnJhbWVJZGVudGlmaWVyIHNvdXJjCiAgICAgTUVTU0FHRV9DSEVDSyhtX3Byb2Nl
c3MsIHNvdXJjZUZyYW1lKTsKIAogICAgIG1fZm9ybUNsaWVudC0+d2lsbFN1Ym1pdEZvcm0oKnRo
aXMsICpmcmFtZSwgKnNvdXJjZUZyYW1lLCB0ZXh0RmllbGRWYWx1ZXMsIG1fcHJvY2Vzcy0+dHJh
bnNmb3JtSGFuZGxlc1RvT2JqZWN0cyh1c2VyRGF0YS5vYmplY3QoKSkuZ2V0KCksIFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGZyYW1lSUQsIGxpc3RlbmVySURdKCkgewot
ICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNvbnRpbnVlV2lsbFN1
Ym1pdEZvcm0oZnJhbWVJRCwgbGlzdGVuZXJJRCksIG1fd2ViUGFnZUlEKTsKKyAgICAgICAgc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6Q29udGludWVXaWxsU3VibWl0Rm9ybShmcmFtZUlELCBsaXN0
ZW5lcklEKSk7CiAgICAgfSk7CiB9CiAKQEAgLTU2NTAsNyArNTY1MCw3IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpydW5PcGVuUGFuZWwoRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIFNlY3VyaXR5T3Jp
Z2luRGF0YSYmIGZyCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2hvd1NoYXJlU2hlZXQoY29uc3QgU2hh
cmVEYXRhV2l0aFBhcnNlZFVSTCYgc2hhcmVEYXRhLCBTaGFyZVNoZWV0Q2FsbGJhY2tJRCBjYWxs
YmFja0lEKQogewogICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+IGNvbXBsZXRpb25I
YW5kbGVyID0gW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2tJ
RF0gKGJvb2wgYWNjZXNzKSB7Ci0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6RGlkQ29tcGxldGVTaGFyZVNoZWV0KGFjY2VzcywgY2FsbGJhY2tJRCksIG1fd2ViUGFn
ZUlEKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkQ29tcGxldGVTaGFyZVNo
ZWV0KGFjY2VzcywgY2FsbGJhY2tJRCkpOwogICAgIH07CiAgICAgCiAgICAgcGFnZUNsaWVudCgp
LnNob3dTaGFyZVNoZWV0KHNoYXJlRGF0YSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwpA
QCAtNTY4Miw3ICs1NjgyLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldE1lZGlhVm9sdW1lKGZs
b2F0IHZvbHVtZSkKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldE1lZGlh
Vm9sdW1lKHZvbHVtZSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpTZXRNZWRpYVZvbHVtZSh2b2x1bWUpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldE11
dGVkKFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6Ok11dGVkU3RhdGVGbGFncyBzdGF0ZSkKQEAgLTU2
OTgsNyArNTY5OCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRNdXRlZChXZWJDb3JlOjpNZWRp
YVByb2R1Y2VyOjpNdXRlZFN0YXRlRmxhZ3Mgc3RhdGUpCiAgICAgICAgIFVzZXJNZWRpYVByb2Nl
c3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5tdXRlQ2FwdHVyZU1lZGlhU3RyZWFtc0V4Y2VwdEluKCp0
aGlzKTsKICNlbmRpZgogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpT
ZXRNdXRlZChzdGF0ZSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpTZXRNdXRlZChzdGF0ZSkpOwogICAgIGFjdGl2aXR5U3RhdGVEaWRDaGFuZ2UoeyBBY3Rpdml0
eVN0YXRlOjpJc0F1ZGlibGUsIEFjdGl2aXR5U3RhdGU6OklzQ2FwdHVyaW5nTWVkaWEgfSk7CiB9
CiAKQEAgLTU3MjAsNyArNTcyMCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzdG9wTWVkaWFDYXB0
dXJlKCkKICAgICAgICAgcmV0dXJuOwogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICBt
X3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlN0b3BNZWRpYUNhcHR1cmUoKSwgbV93
ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlN0b3BNZWRpYUNhcHR1cmUo
KSk7CiAjZW5kaWYKIH0KIApAQCAtNTcyOSw3ICs1NzI5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OnN0b3BBbGxNZWRpYVBsYXliYWNrKCkKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
U3RvcEFsbE1lZGlhUGxheWJhY2soKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OlN0b3BBbGxNZWRpYVBsYXliYWNrKCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94
eTo6c3VzcGVuZEFsbE1lZGlhUGxheWJhY2soKQpAQCAtNTc0MSw3ICs1NzQxLDcgQEAgdm9pZCBX
ZWJQYWdlUHJveHk6OnN1c3BlbmRBbGxNZWRpYVBsYXliYWNrKCkKICAgICBpZiAoIWhhc1J1bm5p
bmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6U3VzcGVuZEFsbE1lZGlhUGxheWJhY2soKSwgbV93ZWJQYWdlSUQpOwor
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlN1c3BlbmRBbGxNZWRpYVBsYXliYWNrKCkpOwog
fQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6cmVzdW1lQWxsTWVkaWFQbGF5YmFjaygpCkBAIC01NzUz
LDcgKzU3NTMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVzdW1lQWxsTWVkaWFQbGF5YmFjaygp
CiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBt
X3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJlc3VtZUFsbE1lZGlhUGxheWJhY2so
KSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJlc3VtZUFsbE1l
ZGlhUGxheWJhY2soKSk7CiB9CiAKICNpZiBFTkFCTEUoTUVESUFfU0VTU0lPTikKQEAgLTU3NjIs
NyArNTc2Miw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVNZWRpYUV2ZW50KE1lZGlhRXZl
bnRUeXBlIGV2ZW50VHlwZSkKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAg
IHJldHVybjsKICAgICAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Okhh
bmRsZU1lZGlhRXZlbnQoZXZlbnRUeXBlKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OkhhbmRsZU1lZGlhRXZlbnQoZXZlbnRUeXBlKTsKIH0KIAogdm9pZCBXZWJQ
YWdlUHJveHk6OnNldFZvbHVtZU9mTWVkaWFFbGVtZW50KGRvdWJsZSB2b2x1bWUsIHVpbnQ2NF90
IGVsZW1lbnRJRCkKQEAgLTU3NzAsNyArNTc3MCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRW
b2x1bWVPZk1lZGlhRWxlbWVudChkb3VibGUgdm9sdW1lLCB1aW50NjRfdCBlbGVtZW50SUQpCiAg
ICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFZvbHVtZU9mTWVkaWFFbGVtZW50KHZv
bHVtZSwgZWxlbWVudElEKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlNldFZvbHVtZU9mTWVkaWFFbGVtZW50KHZvbHVtZSwgZWxlbWVudElEKSk7CiB9CiAjZW5k
aWYKIApAQCAtNTc4NCw3ICs1Nzg0LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldE1heVN0YXJ0
TWVkaWFXaGVuSW5XaW5kb3coYm9vbCBtYXlTdGFydE1lZGlhKQogICAgIGlmICghaGFzUnVubmlu
Z1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcHJvY2VzcygpLnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OlNldE1heVN0YXJ0TWVkaWFXaGVuSW5XaW5kb3cobWF5U3RhcnRNZWRpYSks
IG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRNYXlTdGFydE1l
ZGlhV2hlbkluV2luZG93KG1heVN0YXJ0TWVkaWEpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5JiBkb3dubG9hZCkKQEAgLTU4MzEs
NyArNTgzMSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDaG9vc2VDb2xvcihjb25zdCBXZWJD
b3JlOjpDb2xvciYgY29sb3IpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZENo
b29zZUNvbG9yKGNvbG9yKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OkRpZENob29zZUNvbG9yKGNvbG9yKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRF
bmRDb2xvclBpY2tlcigpCkBAIC01ODQwLDcgKzU4NDAsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
ZGlkRW5kQ29sb3JQaWNrZXIoKQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRF
bmRDb2xvclBpY2tlcigpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6RGlkRW5kQ29sb3JQaWNrZXIoKSk7CiB9CiAjZW5kaWYKIApAQCAtNTg3NCw3ICs1ODc0LDcg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENsb3NlU3VnZ2VzdGlvbnMoKQogICAgICAgICByZXR1
cm47CiAKICAgICBtX2RhdGFMaXN0U3VnZ2VzdGlvbnNEcm9wZG93biA9IG51bGxwdHI7Ci0gICAg
bV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRDbG9zZVN1Z2dlc3Rpb25zKCks
IG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRDbG9zZVN1Z2dl
c3Rpb25zKCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkU2VsZWN0T3B0aW9uKGNvbnN0
IFN0cmluZyYgc2VsZWN0ZWRPcHRpb24pCkBAIC01ODgyLDcgKzU4ODIsNyBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6ZGlkU2VsZWN0T3B0aW9uKGNvbnN0IFN0cmluZyYgc2VsZWN0ZWRPcHRpb24pCiAg
ICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZFNlbGVjdERhdGFMaXN0T3B0aW9uKHNl
bGVjdGVkT3B0aW9uKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OkRpZFNlbGVjdERhdGFMaXN0T3B0aW9uKHNlbGVjdGVkT3B0aW9uKSk7CiB9CiAKICNlbmRpZgpA
QCAtNTkzNSw3ICs1OTM1LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldEFsbG93c01lZGlhRG9j
dW1lbnRJbmxpbmVQbGF5YmFjayhib29sIGFsbG93cykKICAgICAgICAgcmV0dXJuOwogICAgIG1f
YWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrID0gYWxsb3dzOwogCi0gICAgbV9wcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRBbGxvd3NNZWRpYURvY3VtZW50SW5saW5l
UGxheWJhY2soYWxsb3dzKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlNldEFsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFjayhhbGxvd3MpKTsKIH0KICNl
bmRpZgogCkBAIC02MTIyLDEyICs2MTIyLDEyIEBAIHVpbnQ2NF90IFdlYlBhZ2VQcm94eTo6bWVz
c2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAogCiB2b2lkIFdlYlBhZ2VQcm94eTo6dmFs
dWVDaGFuZ2VkRm9yUG9wdXBNZW51KFdlYlBvcHVwTWVudVByb3h5KiwgaW50MzJfdCBuZXdTZWxl
Y3RlZEluZGV4KQogewotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlk
Q2hhbmdlU2VsZWN0ZWRJbmRleEZvckFjdGl2ZVBvcHVwTWVudShuZXdTZWxlY3RlZEluZGV4KSwg
bV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZENoYW5nZVNlbGVj
dGVkSW5kZXhGb3JBY3RpdmVQb3B1cE1lbnUobmV3U2VsZWN0ZWRJbmRleCkpOwogfQogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6c2V0VGV4dEZyb21JdGVtRm9yUG9wdXBNZW51KFdlYlBvcHVwTWVudVBy
b3h5KiwgaW50MzJfdCBpbmRleCkKIHsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OlNldFRleHRGb3JBY3RpdmVQb3B1cE1lbnUoaW5kZXgpLCBtX3dlYlBhZ2VJRCk7Cisg
ICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0VGV4dEZvckFjdGl2ZVBvcHVwTWVudShpbmRl
eCkpOwogfQogCiBib29sIFdlYlBhZ2VQcm94eTo6aXNQcm9jZXNzaW5nS2V5Ym9hcmRFdmVudHMo
KSBjb25zdApAQCAtNjE2MiwxMyArNjE2MiwxMyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cG9zdE1l
c3NhZ2VUb0luamVjdGVkQnVuZGxlKGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIEFQSTo6Twog
ICAgIC8vIEZvciBiYWNrd2FyZC1jb21wYXRpYmlsaXR5LCBtYWtlIHN1cmUgd2UgbGF1bmNoIHRo
ZSBpbml0aWFsIHByb2Nlc3MgaWYgdGhlIGNsaWVudCBhc2tzIHRvIHBvc3QgYSBtZXNzYWdlIHRv
IGl0cyBpbmplY3RlZCBidW5kbGUgYmVmb3JlIGRvaW5nIGEgbG9hZC4KICAgICBsYXVuY2hJbml0
aWFsUHJvY2Vzc0lmTmVjZXNzYXJ5KCk7CiAKLSAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6UG9zdEluamVjdGVkQnVuZGxlTWVzc2FnZShtZXNzYWdlTmFtZSwgVXNlckRhdGEo
cHJvY2VzcygpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXMobWVzc2FnZUJvZHkpLmdldCgpKSks
IG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQb3N0SW5qZWN0ZWRC
dW5kbGVNZXNzYWdlKG1lc3NhZ2VOYW1lLCBVc2VyRGF0YShwcm9jZXNzKCkudHJhbnNmb3JtT2Jq
ZWN0c1RvSGFuZGxlcyhtZXNzYWdlQm9keSkuZ2V0KCkpKSk7CiB9CiAKICNpZiBQTEFURk9STShH
VEspCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZmFpbGVkVG9TaG93UG9wdXBNZW51KCkKIHsKLSAgICBt
X3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkZhaWxlZFRvU2hvd1BvcHVwTWVudSgp
LCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RmFpbGVkVG9TaG93
UG9wdXBNZW51KCkpOwogfQogI2VuZGlmCiAKQEAgLTYyMjEsNyArNjIyMSw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpzaG93Q29udGV4dE1lbnUoQ29udGV4dE1lbnVDb250ZXh0RGF0YSYmIGNvbnRl
eHRNZW51Q29udGV4dERhCiAgICAgLy8gY2FuIGhhbmcgdGhlIHBhZ2UgLyBXZWJEcml2ZXIgdGVz
dC4gUHJldGVuZCB0byBzaG93IGFuZCBpbW1lZGlhdGVseSBkaXNtaXNzIHRoZSBjb250ZXh0IG1l
bnUuCiAgICAgaWYgKGF1dG8qIGF1dG9tYXRpb25TZXNzaW9uID0gcHJvY2VzcygpLnByb2Nlc3NQ
b29sKCkuYXV0b21hdGlvblNlc3Npb24oKSkgewogICAgICAgICBpZiAobV9jb250cm9sbGVkQnlB
dXRvbWF0aW9uICYmIGF1dG9tYXRpb25TZXNzaW9uLT5pc1NpbXVsYXRpbmdVc2VySW50ZXJhY3Rp
b24oKSkgewotICAgICAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpD
b250ZXh0TWVudUhpZGRlbigpLCBtX3dlYlBhZ2VJRCk7CisgICAgICAgICAgICBzZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpDb250ZXh0TWVudUhpZGRlbigpKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgIH0KQEAgLTYyNDQsNyArNjI0NCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5
OjpzaG93Q29udGV4dE1lbnUoQ29udGV4dE1lbnVDb250ZXh0RGF0YSYmIGNvbnRleHRNZW51Q29u
dGV4dERhCiAgICAgbV9hY3RpdmVDb250ZXh0TWVudS0+c2hvdygpOwogCiAgICAgLy8gTm8gbWF0
dGVyIHRoZSByZXN1bHQgb2YgaW50ZXJuYWxTaG93Q29udGV4dE1lbnUsIGFsd2F5cyBub3RpZnkg
dGhlIFdlYlByb2Nlc3MgdGhhdCB0aGUgbWVudSBpcyBoaWRkZW4gc28gaXQgc3RhcnRzIGhhbmRs
aW5nIG1vdXNlIGV2ZW50cyBhZ2Fpbi4KLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OkNvbnRleHRNZW51SGlkZGVuKCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpDb250ZXh0TWVudUhpZGRlbigpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJv
eHk6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKGNvbnN0IFdlYkNvbnRleHRNZW51SXRlbURhdGEm
IGl0ZW0pCkBAIC02MzIyLDEyICs2MzIyLDEyIEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpjb250ZXh0
TWVudUl0ZW1TZWxlY3RlZChjb25zdCBXZWJDb250ZXh0TWVudUl0ZW1EYXRhJiBpdGVtKQogICAg
IGlmIChpdGVtLmFjdGlvbigpID09IENvbnRleHRNZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmcgfHwg
aXRlbS5hY3Rpb24oKSA9PSBDb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVTcGVsbGluZykKICAgICAg
ICAgKyttX3BlbmRpbmdMZWFybk9ySWdub3JlV29yZE1lc3NhZ2VDb3VudDsKIAotICAgIG1fcHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkU2VsZWN0SXRlbUZyb21BY3RpdmVDb250
ZXh0TWVudShpdGVtKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OkRpZFNlbGVjdEl0ZW1Gcm9tQWN0aXZlQ29udGV4dE1lbnUoaXRlbSkpOwogfQogCiB2b2lkIFdl
YlBhZ2VQcm94eTo6aGFuZGxlQ29udGV4dE1lbnVLZXlFdmVudCgpCiB7Ci0gICAgbV9wcm9jZXNz
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDb250ZXh0TWVudUZvcktleUV2ZW50KCksIG1fd2Vi
UGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDb250ZXh0TWVudUZvcktleUV2
ZW50KCkpOwogfQogI2VuZGlmIC8vIEVOQUJMRShDT05URVhUX01FTlVTKQogCkBAIC02MzQzLDEw
ICs2MzQzLDEwIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDaG9vc2VGaWxlc0Zvck9wZW5QYW5l
bFdpdGhEaXNwbGF5U3RyaW5nQW5kSWNvbihjb25zdCBWZWN0CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBmaWxlVVJMcy5zaXplKCk7ICsraSkKICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlKGZpbGVVUkxzW2ldLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkT25s
eSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZXNbaV0pOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpFeHRlbmRTYW5kYm94Rm9yRmlsZXNGcm9tT3BlblBhbmVsKHNhbmRi
b3hFeHRlbnNpb25IYW5kbGVzKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OkV4dGVuZFNhbmRib3hGb3JGaWxlc0Zyb21PcGVuUGFuZWwoc2FuZGJveEV4dGVuc2lv
bkhhbmRsZXMpKTsKICNlbmRpZgogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpEaWRDaG9vc2VGaWxlc0Zvck9wZW5QYW5lbFdpdGhEaXNwbGF5U3RyaW5nQW5kSWNvbihm
aWxlVVJMcywgZGlzcGxheVN0cmluZywgaWNvbkRhdGEgPyBpY29uRGF0YS0+ZGF0YVJlZmVyZW5j
ZSgpIDogSVBDOjpEYXRhUmVmZXJlbmNlKCkpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6RGlkQ2hvb3NlRmlsZXNGb3JPcGVuUGFuZWxXaXRoRGlzcGxheVN0cmlu
Z0FuZEljb24oZmlsZVVSTHMsIGRpc3BsYXlTdHJpbmcsIGljb25EYXRhID8gaWNvbkRhdGEtPmRh
dGFSZWZlcmVuY2UoKSA6IElQQzo6RGF0YVJlZmVyZW5jZSgpKSk7CiAKICAgICBtX29wZW5QYW5l
bFJlc3VsdExpc3RlbmVyLT5pbnZhbGlkYXRlKCk7CiAgICAgbV9vcGVuUGFuZWxSZXN1bHRMaXN0
ZW5lciA9IG51bGxwdHI7CkBAIC02MzcxLDEwICs2MzcxLDEwIEBAIHZvaWQgV2ViUGFnZVByb3h5
OjpkaWRDaG9vc2VGaWxlc0Zvck9wZW5QYW5lbChjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZVVS
THMpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OkV4dGVuZFNhbmRib3hGb3JGaWxlc0Zyb21PcGVuUGFuZWwoc2FuZGJveEV4dGVuc2lv
bkhhbmRsZXMpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RXh0
ZW5kU2FuZGJveEZvckZpbGVzRnJvbU9wZW5QYW5lbChzYW5kYm94RXh0ZW5zaW9uSGFuZGxlcykp
OwogI2VuZGlmCiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZENo
b29zZUZpbGVzRm9yT3BlblBhbmVsKGZpbGVVUkxzKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OkRpZENob29zZUZpbGVzRm9yT3BlblBhbmVsKGZpbGVVUkxzKSk7
CiAKICAgICBtX29wZW5QYW5lbFJlc3VsdExpc3RlbmVyLT5pbnZhbGlkYXRlKCk7CiAgICAgbV9v
cGVuUGFuZWxSZXN1bHRMaXN0ZW5lciA9IG51bGxwdHI7CkBAIC02Mzg1LDcgKzYzODUsNyBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ2FuY2VsRm9yT3BlblBhbmVsKCkKICAgICBpZiAoIWhhc1J1
bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6RGlkQ2FuY2VsRm9yT3BlblBhbmVsKCksIG1fd2ViUGFnZUlEKTsK
KyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRDYW5jZWxGb3JPcGVuUGFuZWwoKSk7CiAg
ICAgCiAgICAgbV9vcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci0+aW52YWxpZGF0ZSgpOwogICAgIG1f
b3BlblBhbmVsUmVzdWx0TGlzdGVuZXIgPSBudWxscHRyOwpAQCAtNjM5Myw3ICs2MzkzLDcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OmRpZENhbmNlbEZvck9wZW5QYW5lbCgpCiAKIHZvaWQgV2ViUGFn
ZVByb3h5OjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlv
bikKIHsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkFkdmFuY2VUb05l
eHRNaXNzcGVsbGluZyhzdGFydEJlZm9yZVNlbGVjdGlvbiksIG1fd2ViUGFnZUlEKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpBZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoc3RhcnRCZWZv
cmVTZWxlY3Rpb24pKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmNoYW5nZVNwZWxsaW5nVG9X
b3JkKGNvbnN0IFN0cmluZyYgd29yZCkKQEAgLTY0MDEsNyArNjQwMSw3IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpjaGFuZ2VTcGVsbGluZ1RvV29yZChjb25zdCBTdHJpbmcmIHdvcmQpCiAgICAgaWYg
KHdvcmQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OkNoYW5nZVNwZWxsaW5nVG9Xb3JkKHdvcmQpLCBtX3dlYlBhZ2VJ
RCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q2hhbmdlU3BlbGxpbmdUb1dvcmQod29y
ZCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6cmVnaXN0ZXJFZGl0Q29tbWFuZChSZWY8V2Vi
RWRpdENvbW1hbmRQcm94eT4mJiBjb21tYW5kUHJveHksIFVuZG9PclJlZG8gdW5kb09yUmVkbykK
QEAgLTY0MjAsNyArNjQyMCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZW1vdmVFZGl0Q29tbWFu
ZChXZWJFZGl0Q29tbWFuZFByb3h5JiBjb21tYW5kKQogCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJv
Y2VzcygpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpEaWRSZW1vdmVFZGl0Q29tbWFuZChjb21tYW5kLmNvbW1hbmRJRCgpKSwgbV93ZWJQ
YWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZFJlbW92ZUVkaXRDb21tYW5k
KGNvbW1hbmQuY29tbWFuZElEKCkpKTsKIH0KIAogYm9vbCBXZWJQYWdlUHJveHk6OmNhblVuZG8o
KQpAQCAtNjUwOSwxMiArNjUwOSwxMiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVxdWVzdENoZWNr
aW5nT2ZTdHJpbmcodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBUZXh0Q2hlY2tpbgogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6ZGlkRmluaXNoQ2hlY2tpbmdUZXh0KHVpbnQ2NF90IHJlcXVlc3RJRCwg
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdCkKIHsKLSAg
ICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZEZpbmlzaENoZWNraW5nVGV4
dChyZXF1ZXN0SUQsIHJlc3VsdCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpEaWRGaW5pc2hDaGVja2luZ1RleHQocmVxdWVzdElELCByZXN1bHQpKTsKIH0KIAog
dm9pZCBXZWJQYWdlUHJveHk6OmRpZENhbmNlbENoZWNraW5nVGV4dCh1aW50NjRfdCByZXF1ZXN0
SUQpCiB7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRDYW5jZWxD
aGVja2luZ1RleHQocmVxdWVzdElEKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OkRpZENhbmNlbENoZWNraW5nVGV4dChyZXF1ZXN0SUQpKTsKIH0KIC8vIE90aGVy
CiAKQEAgLTY2NTEsNyArNjY1MSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlRXZl
bnQodWludDMyX3Qgb3BhcXVlVHlwZSwgYm9vbCBoYW5kbGVkKQogICAgICAgICBib29sIGNhblBy
b2Nlc3NNb3JlS2V5RXZlbnRzID0gIW1fa2V5RXZlbnRRdWV1ZS5pc0VtcHR5KCk7CiAgICAgICAg
IGlmIChjYW5Qcm9jZXNzTW9yZUtleUV2ZW50cykgewogICAgICAgICAgICAgTE9HKEtleUhhbmRs
aW5nLCAiIFVJIHByb2Nlc3M6IHNlbnQga2V5RXZlbnQgZnJvbSBkaWRSZWNlaXZlRXZlbnQiKTsK
LSAgICAgICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6S2V5RXZlbnQo
bV9rZXlFdmVudFF1ZXVlLmZpcnN0KCkpLCBtX3dlYlBhZ2VJRCk7CisgICAgICAgICAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpLZXlFdmVudChtX2tleUV2ZW50UXVldWUuZmlyc3QoKSkpOwog
ICAgICAgICB9CiAKICAgICAgICAgLy8gVGhlIGNhbGwgdG8gZG9uZVdpdGhLZXlFdmVudCBtYXkg
Y2xvc2UgdGhpcyBXZWJQYWdlLgpAQCAtNzUzNSw3ICs3NTM1LDcgQEAgV2ViUGFnZUNyZWF0aW9u
UGFyYW1ldGVycyBXZWJQYWdlUHJveHk6OmNyZWF0aW9uUGFyYW1ldGVycyhXZWJQcm9jZXNzUHJv
eHkmIHByb2MKIAogdm9pZCBXZWJQYWdlUHJveHk6OmlzSklURW5hYmxlZChDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIG1fcHJvY2Vzcy0+
Y29ubmVjdGlvbigpLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlByb2Nlc3M6Oklz
SklURW5hYmxlZCgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgc2VuZFdpdGhB
c3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpJc0pJVEVuYWJsZWQoKSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlciksIDApOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZW50ZXJBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVD
b250ZXh0KQpAQCAtNzU2OSw3ICs3NTY5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmJhY2tGb3J3
YXJkQ2xlYXIoKQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2FtZXBhZEFjdGl2aXR5KGNvbnN0IFZl
Y3RvcjxHYW1lcGFkRGF0YT4mIGdhbWVwYWREYXRhcywgYm9vbCBzaG91bGRNYWtlR2FtZXBhZHNW
aXNpYmxlKQogewotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R2FtZXBh
ZEFjdGl2aXR5KGdhbWVwYWREYXRhcywgc2hvdWxkTWFrZUdhbWVwYWRzVmlzaWJsZSksIG1fd2Vi
UGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHYW1lcGFkQWN0aXZpdHkoZ2Ft
ZXBhZERhdGFzLCBzaG91bGRNYWtlR2FtZXBhZHNWaXNpYmxlKSk7CiB9CiAKICNlbmRpZgpAQCAt
Nzg3NCw3ICs3ODc0LDcgQEAgYm9vbCBXZWJQYWdlUHJveHk6OndpbGxIYW5kbGVIb3Jpem9udGFs
U2Nyb2xsRXZlbnRzKCkgY29uc3QKIAogdm9pZCBXZWJQYWdlUHJveHk6OnVwZGF0ZVdlYnNpdGVQ
b2xpY2llcyhXZWJzaXRlUG9saWNpZXNEYXRhJiYgd2Vic2l0ZVBvbGljaWVzKQogewotICAgIG1f
cHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6VXBkYXRlV2Vic2l0ZVBvbGljaWVzKHdl
YnNpdGVQb2xpY2llcyksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpVcGRhdGVXZWJzaXRlUG9saWNpZXMod2Vic2l0ZVBvbGljaWVzKSk7CiB9CiAKIHZvaWQgV2Vi
UGFnZVByb3h5OjpkaWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbUNvbnRlbnRQcm92aWRlcihj
b25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2Um
IGRhdGFSZWZlcmVuY2UpCkBAIC03ODg0LDcgKzc4ODQsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
ZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21Db250ZW50UHJvdmlkZXIoY29uc3QgU3RyaW5n
JiBzdQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6YmFja0ZvcndhcmRSZW1vdmVkSXRlbShjb25zdCBC
YWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyJiBpdGVtSUQpCiB7Ci0gICAgbV9wcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRSZW1vdmVCYWNrRm9yd2FyZEl0ZW0oaXRlbUlEKSwgbV93
ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZFJlbW92ZUJhY2tGb3J3
YXJkSXRlbShpdGVtSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldENhblJ1bk1vZGFs
KGJvb2wgY2FuUnVuTW9kYWwpCkBAIC03ODk3LDcgKzc4OTcsNyBAQCB2b2lkIFdlYlBhZ2VQcm94
eTo6c2V0Q2FuUnVuTW9kYWwoYm9vbCBjYW5SdW5Nb2RhbCkKICAgICBpZiAoIWhhc1J1bm5pbmdQ
cm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6U2V0Q2FuUnVuTW9kYWwobV9jYW5SdW5Nb2RhbCksIG1fd2ViUGFnZUlEKTsK
KyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRDYW5SdW5Nb2RhbChtX2NhblJ1bk1vZGFs
KSk7CiB9CiAKIGJvb2wgV2ViUGFnZVByb3h5OjpjYW5SdW5Nb2RhbCgpCkBAIC03OTExLDcgKzc5
MTEsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6YmVnaW5QcmludGluZyhXZWJGcmFtZVByb3h5KiBm
cmFtZSwgY29uc3QgUHJpbnRJbmZvJiBwcmludEluZgogICAgICAgICByZXR1cm47CiAKICAgICBt
X2lzSW5QcmludGluZ01vZGUgPSB0cnVlOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6QmVnaW5QcmludGluZyhmcmFtZS0+ZnJhbWVJRCgpLCBwcmludEluZm8pLCBtX3dl
YlBhZ2VJRCwgcHJpbnRpbmdTZW5kT3B0aW9ucyhtX2lzUGVyZm9ybWluZ0RPTVByaW50T3BlcmF0
aW9uKSk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6QmVnaW5QcmludGluZyhmcmFtZS0+
ZnJhbWVJRCgpLCBwcmludEluZm8pLCBwcmludGluZ1NlbmRPcHRpb25zKG1faXNQZXJmb3JtaW5n
RE9NUHJpbnRPcGVyYXRpb24pKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmVuZFByaW50aW5n
KCkKQEAgLTc5MjAsNyArNzkyMCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjplbmRQcmludGluZygp
CiAgICAgICAgIHJldHVybjsKIAogICAgIG1faXNJblByaW50aW5nTW9kZSA9IGZhbHNlOwotICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RW5kUHJpbnRpbmcoKSwgbV93ZWJQ
YWdlSUQsIHByaW50aW5nU2VuZE9wdGlvbnMobV9pc1BlcmZvcm1pbmdET01QcmludE9wZXJhdGlv
bikpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkVuZFByaW50aW5nKCksIHByaW50aW5n
U2VuZE9wdGlvbnMobV9pc1BlcmZvcm1pbmdET01QcmludE9wZXJhdGlvbikpOwogfQogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6Y29tcHV0ZVBhZ2VzRm9yUHJpbnRpbmcoV2ViRnJhbWVQcm94eSogZnJh
bWUsIGNvbnN0IFByaW50SW5mbyYgcHJpbnRJbmZvLCBSZWY8Q29tcHV0ZWRQYWdlc0NhbGxiYWNr
PiYmIGNhbGxiYWNrKQpAQCAtNzkzMyw3ICs3OTMzLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNv
bXB1dGVQYWdlc0ZvclByaW50aW5nKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25zdCBQcmludElu
Zm8KICAgICBhdXRvIGNhbGxiYWNrSUQgPSBjYWxsYmFjay0+Y2FsbGJhY2tJRCgpOwogICAgIG1f
Y2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgbV9pc0luUHJpbnRpbmdNb2Rl
ID0gdHJ1ZTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNvbXB1dGVQ
YWdlc0ZvclByaW50aW5nKGZyYW1lLT5mcmFtZUlEKCksIHByaW50SW5mbywgY2FsbGJhY2tJRCks
IG1fd2ViUGFnZUlELCBwcmludGluZ1NlbmRPcHRpb25zKG1faXNQZXJmb3JtaW5nRE9NUHJpbnRP
cGVyYXRpb24pKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDb21wdXRlUGFnZXNGb3JQ
cmludGluZyhmcmFtZS0+ZnJhbWVJRCgpLCBwcmludEluZm8sIGNhbGxiYWNrSUQpLCBwcmludGlu
Z1NlbmRPcHRpb25zKG1faXNQZXJmb3JtaW5nRE9NUHJpbnRPcGVyYXRpb24pKTsKIH0KIAogI2lm
IFBMQVRGT1JNKENPQ09BKQpAQCAtNzk0Niw3ICs3OTQ2LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OmRyYXdSZWN0VG9JbWFnZShXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgUHJpbnRJbmZvJiBw
cmludEkKICAgICAKICAgICBhdXRvIGNhbGxiYWNrSUQgPSBjYWxsYmFjay0+Y2FsbGJhY2tJRCgp
OwogICAgIG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgbV9wcm9jZXNz
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEcmF3UmVjdFRvSW1hZ2UoZnJhbWUtPmZyYW1lSUQo
KSwgcHJpbnRJbmZvLCByZWN0LCBpbWFnZVNpemUsIGNhbGxiYWNrSUQpLCBtX3dlYlBhZ2VJRCwg
cHJpbnRpbmdTZW5kT3B0aW9ucyhtX2lzUGVyZm9ybWluZ0RPTVByaW50T3BlcmF0aW9uKSk7Cisg
ICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RHJhd1JlY3RUb0ltYWdlKGZyYW1lLT5mcmFtZUlE
KCksIHByaW50SW5mbywgcmVjdCwgaW1hZ2VTaXplLCBjYWxsYmFja0lEKSwgcHJpbnRpbmdTZW5k
T3B0aW9ucyhtX2lzUGVyZm9ybWluZ0RPTVByaW50T3BlcmF0aW9uKSk7CiB9CiAKIHZvaWQgV2Vi
UGFnZVByb3h5OjpkcmF3UGFnZXNUb1BERihXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgUHJp
bnRJbmZvJiBwcmludEluZm8sIHVpbnQzMl90IGZpcnN0LCB1aW50MzJfdCBjb3VudCwgUmVmPERh
dGFDYWxsYmFjaz4mJiBjYWxsYmFjaykKQEAgLTc5NTgsNyArNzk1OCw3IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpkcmF3UGFnZXNUb1BERihXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgUHJpbnRJ
bmZvJiBwcmludEluCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0lEID0gY2FsbGJhY2stPmNhbGxi
YWNrSUQoKTsKICAgICBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFjaykpOwotICAgIG1f
cHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RHJhd1BhZ2VzVG9QREYoZnJhbWUtPmZy
YW1lSUQoKSwgcHJpbnRJbmZvLCBmaXJzdCwgY291bnQsIGNhbGxiYWNrSUQpLCBtX3dlYlBhZ2VJ
RCwgcHJpbnRpbmdTZW5kT3B0aW9ucyhtX2lzUGVyZm9ybWluZ0RPTVByaW50T3BlcmF0aW9uKSk7
CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RHJhd1BhZ2VzVG9QREYoZnJhbWUtPmZyYW1l
SUQoKSwgcHJpbnRJbmZvLCBmaXJzdCwgY291bnQsIGNhbGxiYWNrSUQpLCBwcmludGluZ1NlbmRP
cHRpb25zKG1faXNQZXJmb3JtaW5nRE9NUHJpbnRPcGVyYXRpb24pKTsKIH0KICNlbGlmIFBMQVRG
T1JNKEdUSykKIHZvaWQgV2ViUGFnZVByb3h5OjpkcmF3UGFnZXNGb3JQcmludGluZyhXZWJGcmFt
ZVByb3h5KiBmcmFtZSwgY29uc3QgUHJpbnRJbmZvJiBwcmludEluZm8sIFJlZjxQcmludEZpbmlz
aGVkQ2FsbGJhY2s+JiYgY2FsbGJhY2spCkBAIC03OTcxLDcgKzc5NzEsNyBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6ZHJhd1BhZ2VzRm9yUHJpbnRpbmcoV2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0
IFByaW50SW5mbyYgcAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IGNhbGxiYWNrLT5jYWxsYmFja0lE
KCk7CiAgICAgbV9jYWxsYmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBtX2lzSW5Q
cmludGluZ01vZGUgPSB0cnVlOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6RHJhd1BhZ2VzRm9yUHJpbnRpbmcoZnJhbWUtPmZyYW1lSUQoKSwgcHJpbnRJbmZvLCBjYWxs
YmFja0lEKSwgbV93ZWJQYWdlSUQsIHByaW50aW5nU2VuZE9wdGlvbnMobV9pc1BlcmZvcm1pbmdE
T01QcmludE9wZXJhdGlvbikpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRyYXdQYWdl
c0ZvclByaW50aW5nKGZyYW1lLT5mcmFtZUlEKCksIHByaW50SW5mbywgY2FsbGJhY2tJRCksIHBy
aW50aW5nU2VuZE9wdGlvbnMobV9pc1BlcmZvcm1pbmdET01QcmludE9wZXJhdGlvbikpOwogfQog
I2VuZGlmCiAKQEAgLTc5ODQsNyArNzk4NCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkcmF3VG9Q
REYoRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIGNvbnN0IE9wdGlvbmFsPEZsb2F0UmVjdD4mCiAg
ICAgfQogCiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFja3MucHV0KFdURk1vdmUoY2Fs
bGJhY2spLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViUGFn
ZVByb3h5OjpkcmF3VG9QREYiX3MpKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OkRyYXdUb1BERihmcmFtZUlELCByZWN0LCBjYWxsYmFja0lEKSwgbV93ZWJQYWdlSUQp
OworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRyYXdUb1BERihmcmFtZUlELCByZWN0LCBj
YWxsYmFja0lEKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkcmF3VG9QREZDYWxsYmFjayhj
b25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHBkZkRhdGEsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkK
QEAgLTgwMzcsNyArODAzNyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRNaW5pbXVtU2l6ZUZv
ckF1dG9MYXlvdXQoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9j
ZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6U2V0TWluaW11bVNpemVGb3JBdXRvTGF5b3V0KHNpemUpLCBtX3dlYlBhZ2VJRCk7
CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0TWluaW11bVNpemVGb3JBdXRvTGF5b3V0
KHNpemUpKTsKICAgICBtX2RyYXdpbmdBcmVhLT5taW5pbXVtU2l6ZUZvckF1dG9MYXlvdXREaWRD
aGFuZ2UoKTsKIAogI2lmIFVTRShBUFBLSVQpCkBAIC04MDU2LDcgKzgwNTYsNyBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6c2V0QXV0b1NpemluZ1Nob3VsZEV4cGFuZFRvVmlld0hlaWdodChib29sIHNo
b3VsZEV4cGFuZCkKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0QXV0b1Npemlu
Z1Nob3VsZEV4cGFuZFRvVmlld0hlaWdodChzaG91bGRFeHBhbmQpLCBtX3dlYlBhZ2VJRCk7Cisg
ICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0QXV0b1NpemluZ1Nob3VsZEV4cGFuZFRvVmll
d0hlaWdodChzaG91bGRFeHBhbmQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldFZpZXdw
b3J0U2l6ZUZvckNTU1ZpZXdwb3J0VW5pdHMoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKQpA
QCAtODA2OSw3ICs4MDY5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFZpZXdwb3J0U2l6ZUZv
ckNTU1ZpZXdwb3J0VW5pdHMoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXoKICAgICBpZiAoIWhh
c1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0Vmlld3BvcnRTaXplRm9yQ1NTVmlld3BvcnRVbml0cyh2
aWV3cG9ydFNpemUpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
U2V0Vmlld3BvcnRTaXplRm9yQ1NTVmlld3BvcnRVbml0cyh2aWV3cG9ydFNpemUpKTsKIH0KIAog
I2lmIFVTRShBVVRPTUFUSUNfVEVYVF9SRVBMQUNFTUVOVCkKQEAgLTgxNDAsNyArODE0MCw3IEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpyZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKGludDMyX3Qg
cmVzcG9uc2UsIGNvbnN0IFN0cmluZyYKIHZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVBbHRlcm5h
dGl2ZVRleHRVSVJlc3VsdChjb25zdCBTdHJpbmcmIHJlc3VsdCkKIHsKICAgICBpZiAoIWlzQ2xv
c2VkKCkpCi0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SGFuZGxl
QWx0ZXJuYXRpdmVUZXh0VUlSZXN1bHQocmVzdWx0KSwgbV93ZWJQYWdlSUQpOworICAgICAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpIYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdChyZXN1
bHQpKTsKIH0KIAogI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQpAQCAtODE4MSw3ICs4
MTgxLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYg
dGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW4KICAgICBpZiAoIWhhc1J1bm5pbmdQcm9j
ZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpTZXRDb21wb3NpdGlvbih0ZXh0LCB1bmRlcmxpbmVzLCBzZWxlY3Rpb25SYW5nZSks
IG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRDb21wb3NpdGlv
bih0ZXh0LCB1bmRlcmxpbmVzLCBzZWxlY3Rpb25SYW5nZSkpOwogfQogCiB2b2lkIFdlYlBhZ2VQ
cm94eTo6Y29uZmlybUNvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgY29tcG9zaXRpb25TdHJpbmcp
CkBAIC04MTg5LDcgKzgxODksNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Y29uZmlybUNvbXBvc2l0
aW9uKGNvbnN0IFN0cmluZyYgY29tcG9zaXRpb25TdHJpbmcpCiAgICAgaWYgKCFoYXNSdW5uaW5n
UHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6Q29uZmlybUNvbXBvc2l0aW9uKGNvbXBvc2l0aW9uU3RyaW5nKSwgbV93ZWJQ
YWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNvbmZpcm1Db21wb3NpdGlvbihj
b21wb3NpdGlvblN0cmluZykpOwogfQogI2VuZGlmIC8vIFBMQVRGT1JNKEdUSykKIApAQCAtODIw
MSw3ICs4MjAxLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFNjcm9sbFBpbm5pbmdCZWhhdmlv
cihTY3JvbGxQaW5uaW5nQmVoYXZpb3IgcGlubmluZykKICAgICBtX3Njcm9sbFBpbm5pbmdCZWhh
dmlvciA9IHBpbm5pbmc7CiAKICAgICBpZiAoaGFzUnVubmluZ1Byb2Nlc3MoKSkKLSAgICAgICAg
bV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRTY3JvbGxQaW5uaW5nQmVoYXZp
b3IocGlubmluZyksIG1fd2ViUGFnZUlEKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6U2V0U2Nyb2xsUGlubmluZ0JlaGF2aW9yKHBpbm5pbmcpKTsKIH0KIAogdm9pZCBXZWJQYWdl
UHJveHk6OnNldE92ZXJsYXlTY3JvbGxiYXJTdHlsZShPcHRpb25hbDxXZWJDb3JlOjpTY3JvbGxi
YXJPdmVybGF5U3R5bGU+IHNjcm9sbGJhclN0eWxlKQpAQCAtODIxOSw3ICs4MjE5LDcgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OnNldE92ZXJsYXlTY3JvbGxiYXJTdHlsZShPcHRpb25hbDxXZWJDb3Jl
OjpTY3JvbGxiYXJPdmVybGF5U3QKICAgICAgICAgc2Nyb2xsYmFyU3R5bGVGb3JNZXNzYWdlID0g
c3RhdGljX2Nhc3Q8U2Nyb2xsYmFyT3ZlcmxheVN0eWxlPihzY3JvbGxiYXJTdHlsZS52YWx1ZSgp
KTsKIAogICAgIGlmIChoYXNSdW5uaW5nUHJvY2VzcygpKQotICAgICAgICBtX3Byb2Nlc3MtPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFNjcm9sbGJhck92ZXJsYXlTdHlsZShzY3JvbGxiYXJT
dHlsZUZvck1lc3NhZ2UpLCBtX3dlYlBhZ2VJRCk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OlNldFNjcm9sbGJhck92ZXJsYXlTdHlsZShzY3JvbGxiYXJTdHlsZUZvck1lc3NhZ2Up
LCBtX3dlYlBhZ2VJRCk7CiB9CiAKICNpZiBFTkFCTEUoV0VCX0NSWVBUTykKQEAgLTgyNjQsNyAr
ODI2NCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VT
dHJpbmcodW5zaWduZWQga2V5U2l6ZUluZGV4LCBjb25zCiAKIHZvaWQgV2ViUGFnZVByb3h5Ojph
ZGRNSU1FVHlwZVdpdGhDdXN0b21Db250ZW50UHJvdmlkZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSkKIHsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkFkZE1JTUVUeXBl
V2l0aEN1c3RvbUNvbnRlbnRQcm92aWRlcihtaW1lVHlwZSksIG1fd2ViUGFnZUlEKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpBZGRNSU1FVHlwZVdpdGhDdXN0b21Db250ZW50UHJvdmlk
ZXIobWltZVR5cGUpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmNoYW5nZUZvbnRBdHRyaWJ1
dGVzKFdlYkNvcmU6OkZvbnRBdHRyaWJ1dGVDaGFuZ2VzJiYgY2hhbmdlcykKQEAgLTgyNzIsNyAr
ODI3Miw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpjaGFuZ2VGb250QXR0cmlidXRlcyhXZWJDb3Jl
OjpGb250QXR0cmlidXRlQ2hhbmdlcyYmIGNoYW5nZXMpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJv
Y2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6Q2hhbmdlRm9udEF0dHJpYnV0ZXMoV1RGTW92ZShjaGFuZ2VzKSksIG1fd2ViUGFn
ZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDaGFuZ2VGb250QXR0cmlidXRlcyhX
VEZNb3ZlKGNoYW5nZXMpKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpjaGFuZ2VGb250KFdl
YkNvcmU6OkZvbnRDaGFuZ2VzJiYgY2hhbmdlcykKQEAgLTgyODAsNyArODI4MCw3IEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpjaGFuZ2VGb250KFdlYkNvcmU6OkZvbnRDaGFuZ2VzJiYgY2hhbmdlcykK
ICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBy
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDaGFuZ2VGb250KFdURk1vdmUoY2hhbmdl
cykpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q2hhbmdlRm9u
dChXVEZNb3ZlKGNoYW5nZXMpKSk7CiB9CiAKICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTgyODgs
NyArODI4OCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpjaGFuZ2VGb250KFdlYkNvcmU6OkZvbnRD
aGFuZ2VzJiYgY2hhbmdlcykKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRUZXh0QXN5bmMoY29uc3Qg
U3RyaW5nJiB0ZXh0KQogewogICAgIGlmIChoYXNSdW5uaW5nUHJvY2VzcygpKQotICAgICAgICBw
cm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0VGV4dEFzeW5jKHRleHQpLCBtX3dl
YlBhZ2VJRCk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFRleHRBc3luYyh0
ZXh0KSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjppbnNlcnRUZXh0QXN5bmMoY29uc3QgU3Ry
aW5nJiB0ZXh0LCBjb25zdCBFZGl0aW5nUmFuZ2UmIHJlcGxhY2VtZW50UmFuZ2UsIEluc2VydFRl
eHRPcHRpb25zJiYgb3B0aW9ucykKQEAgLTgyOTYsNyArODI5Niw3IEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjppbnNlcnRUZXh0QXN5bmMoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBFZGl0aW5nUmFu
Z2UmIHJlcGxhCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SW5zZXJ0VGV4dEFzeW5j
KHRleHQsIHJlcGxhY2VtZW50UmFuZ2UsIFdURk1vdmUob3B0aW9ucykpLCBtX3dlYlBhZ2VJRCk7
CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SW5zZXJ0VGV4dEFzeW5jKHRleHQsIHJlcGxh
Y2VtZW50UmFuZ2UsIFdURk1vdmUob3B0aW9ucykpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
Omhhc01hcmtlZFRleHQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjYWxsYmFjaykK
QEAgLTgzMDUsNyArODMwNSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpoYXNNYXJrZWRUZXh0KENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY2FsbGJhY2spCiAgICAgICAgIGNhbGxiYWNr
KGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX3Byb2Nlc3MtPmNvbm5lY3Rp
b24oKS0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJQYWdlOjpIYXNNYXJrZWRUZXh0
KCksIFdURk1vdmUoY2FsbGJhY2spLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZFdpdGhBc3luY1Jl
cGx5KE1lc3NhZ2VzOjpXZWJQYWdlOjpIYXNNYXJrZWRUZXh0KCksIFdURk1vdmUoY2FsbGJhY2sp
KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmdldE1hcmtlZFJhbmdlQXN5bmMoV1RGOjpGdW5j
dGlvbjx2b2lkIChFZGl0aW5nUmFuZ2UsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNr
RnVuY3Rpb24pCkBAIC04MzE2LDcgKzgzMTYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0TWFy
a2VkUmFuZ2VBc3luYyhXVEY6OkZ1bmN0aW9uPHZvaWQgKEVkaXRpbmdSYW5nZSwgQ2FsbGJhYwog
ICAgIH0KIAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNh
bGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0
eSgiV2ViUGFnZVByb3h5OjpnZXRNYXJrZWRSYW5nZUFzeW5jIl9zKSk7Ci0gICAgcHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdldE1hcmtlZFJhbmdlQXN5bmMoY2FsbGJhY2tJRCks
IG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRNYXJrZWRSYW5n
ZUFzeW5jKGNhbGxiYWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmdldFNlbGVjdGVk
UmFuZ2VBc3luYyhXVEY6OkZ1bmN0aW9uPHZvaWQgKEVkaXRpbmdSYW5nZSwgQ2FsbGJhY2tCYXNl
OjpFcnJvcik+JiYgY2FsbGJhY2tGdW5jdGlvbikKQEAgLTgzMjcsNyArODMyNyw3IEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpnZXRTZWxlY3RlZFJhbmdlQXN5bmMoV1RGOjpGdW5jdGlvbjx2b2lkIChF
ZGl0aW5nUmFuZ2UsIENhbGxiCiAgICAgfQogCiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxs
YmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhyb3R0bGVy
KCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6OmdldFNlbGVjdGVkUmFuZ2VBc3lu
YyJfcykpOwotICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRTZWxlY3Rl
ZFJhbmdlQXN5bmMoY2FsbGJhY2tJRCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpHZXRTZWxlY3RlZFJhbmdlQXN5bmMoY2FsbGJhY2tJRCkpOwogfQogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6Y2hhcmFjdGVySW5kZXhGb3JQb2ludEFzeW5jKGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiBwb2ludCwgV1RGOjpGdW5jdGlvbjx2b2lkICh1aW50NjRfdCwgQ2FsbGJhY2tC
YXNlOjpFcnJvcik+JiYgY2FsbGJhY2tGdW5jdGlvbikKQEAgLTgzMzgsNyArODMzOCw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpjaGFyYWN0ZXJJbmRleEZvclBvaW50QXN5bmMoY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmIHBvaW50LCBXCiAgICAgfQogCiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9j
YWxsYmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhyb3R0
bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6OmNoYXJhY3RlckluZGV4Rm9y
UG9pbnRBc3luYyJfcykpOwotICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpD
aGFyYWN0ZXJJbmRleEZvclBvaW50QXN5bmMocG9pbnQsIGNhbGxiYWNrSUQpLCBtX3dlYlBhZ2VJ
RCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q2hhcmFjdGVySW5kZXhGb3JQb2ludEFz
eW5jKHBvaW50LCBjYWxsYmFja0lEKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpmaXJzdFJl
Y3RGb3JDaGFyYWN0ZXJSYW5nZUFzeW5jKGNvbnN0IEVkaXRpbmdSYW5nZSYgcmFuZ2UsIFdURjo6
RnVuY3Rpb248dm9pZCAoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IEVkaXRpbmdSYW5n
ZSYsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCkBAIC04MzQ5LDcg
KzgzNDksNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2VB
c3luYyhjb25zdCBFZGl0aW5nUmFuZ2UmIHJhbmdlLCBXVAogICAgIH0KIAogICAgIGF1dG8gY2Fs
bGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBtX3By
b2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5OjpmaXJz
dFJlY3RGb3JDaGFyYWN0ZXJSYW5nZUFzeW5jIl9zKSk7Ci0gICAgcHJvY2VzcygpLnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OkZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlQXN5bmMocmFuZ2UsIGNh
bGxiYWNrSUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Rmly
c3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2VBc3luYyhyYW5nZSwgY2FsbGJhY2tJRCkpOwogfQogCiB2
b2lkIFdlYlBhZ2VQcm94eTo6c2V0Q29tcG9zaXRpb25Bc3luYyhjb25zdCBTdHJpbmcmIHRleHQs
IGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4mIHVuZGVybGluZXMsIGNvbnN0IEVk
aXRpbmdSYW5nZSYgc2VsZWN0aW9uUmFuZ2UsIGNvbnN0IEVkaXRpbmdSYW5nZSYgcmVwbGFjZW1l
bnRSYW5nZSkKQEAgLTgzNjAsNyArODM2MCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRDb21w
b3NpdGlvbkFzeW5jKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6U2V0Q29tcG9zaXRpb25Bc3luYyh0ZXh0LCB1bmRlcmxpbmVzLCBzZWxlY3Rpb25SYW5n
ZSwgcmVwbGFjZW1lbnRSYW5nZSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpTZXRDb21wb3NpdGlvbkFzeW5jKHRleHQsIHVuZGVybGluZXMsIHNlbGVjdGlvblJh
bmdlLCByZXBsYWNlbWVudFJhbmdlKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5Ojpjb25maXJt
Q29tcG9zaXRpb25Bc3luYygpCkBAIC04MzY4LDcgKzgzNjgsNyBAQCB2b2lkIFdlYlBhZ2VQcm94
eTo6Y29uZmlybUNvbXBvc2l0aW9uQXN5bmMoKQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3Mo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OkNvbmZpcm1Db21wb3NpdGlvbkFzeW5jKCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpDb25maXJtQ29tcG9zaXRpb25Bc3luYygpKTsKIH0KIAogdm9pZCBX
ZWJQYWdlUHJveHk6OnNldFNjcm9sbFBlcmZvcm1hbmNlRGF0YUNvbGxlY3Rpb25FbmFibGVkKGJv
b2wgZW5hYmxlZCkKQEAgLTgzOTMsNyArODM5Myw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojp0YWtl
U25hcHNob3QoSW50UmVjdCByZWN0LCBJbnRTaXplIGJpdG1hcFNpemUsIFNuYXBzaG90T3B0aW9u
CiAgICAgfQogCiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFja3MucHV0KFdURk1vdmUo
Y2FsbGJhY2tGdW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2
aXR5KCJXZWJQYWdlUHJveHk6OnRha2VTbmFwc2hvdCJfcykpOwotICAgIG1fcHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6VGFrZVNuYXBzaG90KHJlY3QsIGJpdG1hcFNpemUsIG9wdGlv
bnMsIGNhbGxiYWNrSUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6VGFrZVNuYXBzaG90KHJlY3QsIGJpdG1hcFNpemUsIG9wdGlvbnMsIGNhbGxiYWNrSUQpKTsK
IH0KIAogdm9pZCBXZWJQYWdlUHJveHk6Om5hdmlnYXRpb25HZXN0dXJlRGlkQmVnaW4oKQpAQCAt
ODU1Myw3ICs4NTUzLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlcXVlc3RBY3RpdmVOb3dQbGF5
aW5nU2Vzc2lvbkluZm8oUmVmPE5vd1BsYXlpbmdJbmZvQ2FsbGJhY2sKICAgICBhdXRvIGNhbGxi
YWNrSUQgPSBjYWxsYmFjay0+Y2FsbGJhY2tJRCgpOwogICAgIG1fY2FsbGJhY2tzLnB1dChXVEZN
b3ZlKGNhbGxiYWNrKSk7CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OlJlcXVlc3RBY3RpdmVOb3dQbGF5aW5nU2Vzc2lvbkluZm8oY2FsbGJhY2tJRCksIG1fd2ViUGFn
ZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpSZXF1ZXN0QWN0aXZlTm93UGxheWlu
Z1Nlc3Npb25JbmZvKGNhbGxiYWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6Om5vd1Bs
YXlpbmdJbmZvQ2FsbGJhY2soYm9vbCBoYXNBY3RpdmVTZXNzaW9uLCBib29sIHJlZ2lzdGVyZWRB
c05vd1BsYXlpbmdBcHBsaWNhdGlvbiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgZG91YmxlIGR1cmF0
aW9uLCBkb3VibGUgZWxhcHNlZFRpbWUsIHVpbnQ2NF90IHVuaXF1ZUlkZW50aWZpZXIsIENhbGxi
YWNrSUQgY2FsbGJhY2tJRCkKQEAgLTg1OTYsMjIgKzg1OTYsMjIgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OmhhbmRsZUF1dG9wbGF5RXZlbnQoV2ViQ29yZTo6QXV0b3BsYXlFdmVudCBldmVudCwgT3B0
aW9uU2V0PEEKICNpZiBQTEFURk9STShNQUMpCiB2b2lkIFdlYlBhZ2VQcm94eTo6cGVyZm9ybUlt
bWVkaWF0ZUFjdGlvbkhpdFRlc3RBdExvY2F0aW9uKEZsb2F0UG9pbnQgcG9pbnQpCiB7Ci0gICAg
bV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtSW1tZWRpYXRlQWN0aW9u
SGl0VGVzdEF0TG9jYXRpb24ocG9pbnQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6UGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3RBdExvY2F0aW9uKHBvaW50
KSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjppbW1lZGlhdGVBY3Rpb25EaWRVcGRhdGUoKQog
ewotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SW1tZWRpYXRlQWN0aW9u
RGlkVXBkYXRlKCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpJ
bW1lZGlhdGVBY3Rpb25EaWRVcGRhdGUoKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjppbW1l
ZGlhdGVBY3Rpb25EaWRDYW5jZWwoKQogewotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6SW1tZWRpYXRlQWN0aW9uRGlkQ2FuY2VsKCksIG1fd2ViUGFnZUlEKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpJbW1lZGlhdGVBY3Rpb25EaWRDYW5jZWwoKSk7CiB9CiAK
IHZvaWQgV2ViUGFnZVByb3h5OjppbW1lZGlhdGVBY3Rpb25EaWRDb21wbGV0ZSgpCiB7Ci0gICAg
bV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpJbW1lZGlhdGVBY3Rpb25EaWRDb21w
bGV0ZSgpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SW1tZWRp
YXRlQWN0aW9uRGlkQ29tcGxldGUoKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRQZXJm
b3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdChjb25zdCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYgcmVz
dWx0LCBib29sIGNvbnRlbnRQcmV2ZW50c0RlZmF1bHQsIGNvbnN0IFVzZXJEYXRhJiB1c2VyRGF0
YSkKQEAgLTg2MjYsNyArODYyNiw3IEBAIE5TT2JqZWN0ICpXZWJQYWdlUHJveHk6OmltbWVkaWF0
ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXJGb3JIaXRUZXN0UmVzdWx0KFJlZlB0CiAKIHZvaWQg
V2ViUGFnZVByb3h5OjpoYW5kbGVBY2NlcHRlZENhbmRpZGF0ZShXZWJDb3JlOjpUZXh0Q2hlY2tp
bmdSZXN1bHQgYWNjZXB0ZWRDYW5kaWRhdGUpCiB7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpIYW5kbGVBY2NlcHRlZENhbmRpZGF0ZShhY2NlcHRlZENhbmRpZGF0ZSks
IG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpIYW5kbGVBY2NlcHRl
ZENhbmRpZGF0ZShhY2NlcHRlZENhbmRpZGF0ZSkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6
ZGlkSGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoKQpAQCAtODY0NCwxNyArODY0NCwxNyBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6c2V0VXNlU3lzdGVtQXBwZWFyYW5jZShib29sIHVzZVN5c3RlbUFwcGVh
cmFuY2UpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFVzZVN5c3RlbUFwcGVh
cmFuY2UodXNlU3lzdGVtQXBwZWFyYW5jZSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpTZXRVc2VTeXN0ZW1BcHBlYXJhbmNlKHVzZVN5c3RlbUFwcGVhcmFuY2Up
KTsKIH0KICAgICAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRIZWFkZXJCYW5uZXJIZWlnaHRGb3JU
ZXN0aW5nKGludCBoZWlnaHQpCiB7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpTZXRIZWFkZXJCYW5uZXJIZWlnaHRGb3JUZXN0aW5nKGhlaWdodCksIG1fd2ViUGFnZUlE
KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRIZWFkZXJCYW5uZXJIZWlnaHRGb3JU
ZXN0aW5nKGhlaWdodCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Rm9vdGVyQmFubmVy
SGVpZ2h0Rm9yVGVzdGluZyhpbnQgaGVpZ2h0KQogewotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6U2V0Rm9vdGVyQmFubmVySGVpZ2h0Rm9yVGVzdGluZyhoZWlnaHQpLCBt
X3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0Rm9vdGVyQmFubmVy
SGVpZ2h0Rm9yVGVzdGluZyhoZWlnaHQpKTsKIH0KIAogI2VuZGlmCkBAIC04NjgwLDcgKzg2ODAs
NyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aW1hZ2VPck1lZGlhRG9jdW1lbnRTaXplQ2hhbmdlZChj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0U2hv
dWxkRGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRzKGJvb2wgc2hvdWxkRGlzcGF0Y2hGYWtlTW91
c2VNb3ZlRXZlbnRzKQogewotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
U2V0U2hvdWxkRGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRzKHNob3VsZERpc3BhdGNoRmFrZU1v
dXNlTW92ZUV2ZW50cyksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpTZXRTaG91bGREaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudHMoc2hvdWxkRGlzcGF0Y2hGYWtl
TW91c2VNb3ZlRXZlbnRzKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVBdXRvRmls
bEJ1dHRvbkNsaWNrKGNvbnN0IFVzZXJEYXRhJiB1c2VyRGF0YSkKQEAgLTg3MzQsNyArODczNCw3
IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRQbGF5YmFja1RhcmdldCh1aW50NjRfdCBjb250ZXh0
SWQsIFJlZjxNZWRpYVBsYXliYWNrVGFyZ2V0CiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2Vzcygp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlBsYXliYWNrVGFyZ2V0U2VsZWN0ZWQoY29udGV4dElkLCB0YXJnZXQtPnRhcmdldENvbnRl
eHQoKSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQbGF5YmFj
a1RhcmdldFNlbGVjdGVkKGNvbnRleHRJZCwgdGFyZ2V0LT50YXJnZXRDb250ZXh0KCkpKTsKIH0K
IAogdm9pZCBXZWJQYWdlUHJveHk6OmV4dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxlRGlkQ2hh
bmdlKHVpbnQ2NF90IGNvbnRleHRJZCwgYm9vbCBhdmFpbGFibGUpCkBAIC04NzQyLDcgKzg3NDIs
NyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFibGVEaWRD
aGFuZ2UodWludDY0X3QgY29udGV4dElkLCBibwogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3Mo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eURpZENoYW5nZShjb250ZXh0SWQsIGF2YWls
YWJsZSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQbGF5YmFj
a1RhcmdldEF2YWlsYWJpbGl0eURpZENoYW5nZShjb250ZXh0SWQsIGF2YWlsYWJsZSkpOwogfQog
CiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQodWludDY0
X3QgY29udGV4dElkLCBib29sIHNob3VsZFBsYXkpCkBAIC04NzUwLDcgKzg3NTAsNyBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6c2V0U2hvdWxkUGxheVRvUGxheWJhY2tUYXJnZXQodWludDY0X3QgY29u
dGV4dElkLCBib29sIHNob3VsZAogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRT
aG91bGRQbGF5VG9QbGF5YmFja1RhcmdldChjb250ZXh0SWQsIHNob3VsZFBsYXkpLCBtX3dlYlBh
Z2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0U2hvdWxkUGxheVRvUGxheWJh
Y2tUYXJnZXQoY29udGV4dElkLCBzaG91bGRQbGF5KSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5
OjpwbGF5YmFja1RhcmdldFBpY2tlcldhc0Rpc21pc3NlZCh1aW50NjRfdCBjb250ZXh0SWQpCkBA
IC04NzU4LDcgKzg3NTgsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cGxheWJhY2tUYXJnZXRQaWNr
ZXJXYXNEaXNtaXNzZWQodWludDY0X3QgY29udGV4dElkKQogICAgIGlmICghaGFzUnVubmluZ1By
b2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpQbGF5YmFja1RhcmdldFBpY2tlcldhc0Rpc21pc3NlZChjb250ZXh0SWQpLCBt
X3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGxheWJhY2tUYXJnZXRQ
aWNrZXJXYXNEaXNtaXNzZWQoY29udGV4dElkKSk7CiB9CiAjZW5kaWYKIApAQCAtODc4NCw3ICs4
Nzg0LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNsZWFyV2hlZWxFdmVudFRlc3RNb25pdG9yKCkK
ICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAg
ICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OmNsZWFyV2hlZWxFdmVudFRlc3RN
b25pdG9yKCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpjbGVh
cldoZWVsRXZlbnRUZXN0TW9uaXRvcigpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmNhbGxB
ZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGUoV1RGOjpGdW5jdGlvbjx2b2lkIChDYWxsYmFja0Jh
c2U6OkVycm9yKT4mJiBjYWxsYmFjaykKQEAgLTg4MDcsNyArODgwNyw3IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpzZXRTaG91bGRTY2FsZVZpZXdUb0ZpdERvY3VtZW50KGJvb2wgc2hvdWxkU2NhbGVW
aWV3VG9GaXREb2N1CiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFNob3VsZFNj
YWxlVmlld1RvRml0RG9jdW1lbnQoc2hvdWxkU2NhbGVWaWV3VG9GaXREb2N1bWVudCksIG1fd2Vi
UGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRTaG91bGRTY2FsZVZpZXdU
b0ZpdERvY3VtZW50KHNob3VsZFNjYWxlVmlld1RvRml0RG9jdW1lbnQpKTsKIH0KIAogdm9pZCBX
ZWJQYWdlUHJveHk6OmRpZFJlc3RvcmVTY3JvbGxQb3NpdGlvbigpCkBAIC04ODI3LDcgKzg4Mjcs
NyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0TG9hZERlY2lzaW9uRm9ySWNvbihjb25zdCBXZWJD
b3JlOjpMaW5rSWNvbiYgaWNvbiwgQ2FsbGJhYwogICAgICAgICBib29sIGRlY2lzaW9uID0gKGJv
b2wpY2FsbGJhY2tGdW5jdGlvbjsKICAgICAgICAgYXV0byBuZXdDYWxsYmFja0lkZW50aWZpZXIg
PSBkZWNpc2lvbiA/IE9wdGlvbmFsQ2FsbGJhY2tJRChtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShj
YWxsYmFja0Z1bmN0aW9uKSwgbV9wcm9jZXNzLT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZp
dHkoIldlYlBhZ2VQcm94eTo6Z2V0TG9hZERlY2lzaW9uRm9ySWNvbiJfcykpKSA6IE9wdGlvbmFs
Q2FsbGJhY2tJRCgpOwogCi0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6RGlkR2V0TG9hZERlY2lzaW9uRm9ySWNvbihkZWNpc2lvbiwgbG9hZElkZW50aWZpZXIsIG5l
d0NhbGxiYWNrSWRlbnRpZmllciksIG1fd2ViUGFnZUlEKTsKKyAgICAgICAgc2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6RGlkR2V0TG9hZERlY2lzaW9uRm9ySWNvbihkZWNpc2lvbiwgbG9hZElkZW50
aWZpZXIsIG5ld0NhbGxiYWNrSWRlbnRpZmllcikpOwogICAgIH0pOwogfQogCkBAIC04ODQ2LDcg
Kzg4NDYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0VXNlckludGVyZmFjZUxheW91dERpcmVj
dGlvbihXZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0RAogICAgIGlmICghaGFzUnVubmluZ1By
b2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpTZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKHN0YXRpY19jYXN0PHVp
bnQzMl90Pih1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKSksIG1fd2ViUGFnZUlEKTsKKyAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9u
KHN0YXRpY19jYXN0PHVpbnQzMl90Pih1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKSkpOwog
fQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6aGlkZVZhbGlkYXRpb25NZXNzYWdlKCkKQEAgLTg4OTMs
MTQgKzg4OTMsMTQgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZEFsbG93UG9pbnRlckxvY2soKQog
ICAgIENHRGlzcGxheUhpZGVDdXJzb3IoQ0dNYWluRGlzcGxheUlEKCkpOwogICAgIENHQXNzb2Np
YXRlTW91c2VBbmRNb3VzZUN1cnNvclBvc2l0aW9uKGZhbHNlKTsKICNlbmRpZgotICAgIG1fcHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkQWNxdWlyZVBvaW50ZXJMb2NrKCksIG1f
d2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRBY3F1aXJlUG9pbnRl
ckxvY2soKSk7CiB9CiAgICAgCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRGVueVBvaW50ZXJMb2Nr
KCkKIHsKICAgICBBU1NFUlQobV9pc1BvaW50ZXJMb2NrUGVuZGluZyAmJiAhbV9pc1BvaW50ZXJM
b2NrZWQpOwogICAgIG1faXNQb2ludGVyTG9ja1BlbmRpbmcgPSBmYWxzZTsKLSAgICBtX3Byb2Nl
c3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZE5vdEFjcXVpcmVQb2ludGVyTG9jaygpLCBt
X3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkTm90QWNxdWlyZVBv
aW50ZXJMb2NrKCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6cmVxdWVzdFBvaW50ZXJVbmxv
Y2soKQpAQCAtODkxMSwxMiArODkxMSwxMiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVxdWVzdFBv
aW50ZXJVbmxvY2soKQogICAgICAgICBDR0Rpc3BsYXlTaG93Q3Vyc29yKENHTWFpbkRpc3BsYXlJ
RCgpKTsKICNlbmRpZgogICAgICAgICBtX3VpQ2xpZW50LT5kaWRMb3NlUG9pbnRlckxvY2sodGhp
cyk7Ci0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkTG9zZVBv
aW50ZXJMb2NrKCksIG1fd2ViUGFnZUlEKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6RGlkTG9zZVBvaW50ZXJMb2NrKCkpOwogICAgIH0KIAogICAgIGlmIChtX2lzUG9pbnRlckxv
Y2tQZW5kaW5nKSB7CiAgICAgICAgIG1fdWlDbGllbnQtPmRpZExvc2VQb2ludGVyTG9jayh0aGlz
KTsKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWROb3RBY3F1
aXJlUG9pbnRlckxvY2soKSwgbV93ZWJQYWdlSUQpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpEaWROb3RBY3F1aXJlUG9pbnRlckxvY2soKSk7CiAgICAgfQogCiAgICAgbV9pc1Bv
aW50ZXJMb2NrZWQgPSBmYWxzZTsKQEAgLTg5MzcsNyArODkzNyw3IEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpzZXRVUkxTY2hlbWVIYW5kbGVyRm9yU2NoZW1lKFJlZjxXZWJVUkxTY2hlbWVIYW5kbGVy
PiYmIGhhbmRsCiAgICAgYXV0byBpZGVudGlmaWVyUmVzdWx0ID0gbV91cmxTY2hlbWVIYW5kbGVy
c0J5SWRlbnRpZmllci5hZGQoaWRlbnRpZmllciwgV1RGTW92ZShoYW5kbGVyKSk7CiAgICAgQVNT
RVJUX1VOVVNFRChpZGVudGlmaWVyUmVzdWx0LCBpZGVudGlmaWVyUmVzdWx0LmlzTmV3RW50cnkp
OwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpSZWdpc3RlclVSTFNj
aGVtZUhhbmRsZXIoaWRlbnRpZmllciwgY2Fub25pY2FsaXplZFNjaGVtZS52YWx1ZSgpKSwgbV93
ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJlZ2lzdGVyVVJMU2NoZW1l
SGFuZGxlcihpZGVudGlmaWVyLCBjYW5vbmljYWxpemVkU2NoZW1lLnZhbHVlKCkpKTsKIH0KIAog
V2ViVVJMU2NoZW1lSGFuZGxlciogV2ViUGFnZVByb3h5Ojp1cmxTY2hlbWVIYW5kbGVyRm9yU2No
ZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1lKQpAQCAtODk4NSw3ICs4OTg1LDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OmRpZENvbW1pdENyb3NzU2l0ZUxvYWRXaXRoRGF0YVRyYW5zZmVyRnJvbVByZXZh
bGVudFJlc291cmNlKCkKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6V2FzTG9hZGVk
V2l0aERhdGFUcmFuc2ZlckZyb21QcmV2YWxlbnRSZXNvdXJjZSgpLCBtX3dlYlBhZ2VJRCk7Cisg
ICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6V2FzTG9hZGVkV2l0aERhdGFUcmFuc2ZlckZyb21Q
cmV2YWxlbnRSZXNvdXJjZSgpKTsKIH0KICNlbmRpZgogCkBAIC05MDA0LDcgKzkwMDQsNyBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6ZWZmZWN0aXZlQXBwZWFyYW5jZURpZENoYW5nZSgpCiAgICAgaWYg
KCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkVmZmVjdGl2ZUFwcGVhcmFuY2VEaWRDaGFuZ2UodXNl
RGFya0FwcGVhcmFuY2UoKSwgdXNlRWxldmF0ZWRVc2VySW50ZXJmYWNlTGV2ZWwoKSksIG1fd2Vi
UGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpFZmZlY3RpdmVBcHBlYXJhbmNl
RGlkQ2hhbmdlKHVzZURhcmtBcHBlYXJhbmNlKCksIHVzZUVsZXZhdGVkVXNlckludGVyZmFjZUxl
dmVsKCkpKTsKIH0KIAogI2lmIFBMQVRGT1JNKENPQ09BKQpAQCAtOTA0Myw3ICs5MDQzLDcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6Omluc2VydEF0dGFjaG1lbnQoUmVmPEFQSTo6QXR0YWNobWVudD4m
JiBhdHRhY2htZW50LCBGdW5jdGlvbjwKIAogICAgIGF1dG8gYXR0YWNobWVudElkZW50aWZpZXIg
PSBhdHRhY2htZW50LT5pZGVudGlmaWVyKCk7CiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxs
YmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2spLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tn
cm91bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5OjppbnNlcnRBdHRhY2htZW50Il9zKSk7Ci0gICAg
bV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpJbnNlcnRBdHRhY2htZW50KGF0dGFj
aG1lbnRJZGVudGlmaWVyLCBhdHRhY2htZW50LT5maWxlU2l6ZUZvckRpc3BsYXkoKSwgYXR0YWNo
bWVudC0+ZmlsZU5hbWUoKSwgYXR0YWNobWVudC0+Y29udGVudFR5cGUoKSwgY2FsbGJhY2tJRCks
IG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpJbnNlcnRBdHRhY2ht
ZW50KGF0dGFjaG1lbnRJZGVudGlmaWVyLCBhdHRhY2htZW50LT5maWxlU2l6ZUZvckRpc3BsYXko
KSwgYXR0YWNobWVudC0+ZmlsZU5hbWUoKSwgYXR0YWNobWVudC0+Y29udGVudFR5cGUoKSwgY2Fs
bGJhY2tJRCkpOwogICAgIG1fYXR0YWNobWVudElkZW50aWZpZXJUb0F0dGFjaG1lbnRNYXAuc2V0
KGF0dGFjaG1lbnRJZGVudGlmaWVyLCBXVEZNb3ZlKGF0dGFjaG1lbnQpKTsKIH0KIApAQCAtOTA1
OSw3ICs5MDU5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnVwZGF0ZUF0dGFjaG1lbnRBdHRyaWJ1
dGVzKGNvbnN0IEFQSTo6QXR0YWNobWVudCYgYXR0YWNobWVudCwKICAgICAgICAgZGF0YVJlZmVy
ZW5jZSA9IHsgKmRhdGEgfTsKIAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1
dChXVEZNb3ZlKGNhbGxiYWNrKSwgbV9wcm9jZXNzLT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0
aXZpdHkoIldlYlBhZ2VQcm94eTo6dXBkYXRlQXR0YWNobWVudEF0dHJpYnV0ZXMiX3MpKTsKLSAg
ICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlVwZGF0ZUF0dGFjaG1lbnRBdHRy
aWJ1dGVzKGF0dGFjaG1lbnQuaWRlbnRpZmllcigpLCBhdHRhY2htZW50LmZpbGVTaXplRm9yRGlz
cGxheSgpLCBhdHRhY2htZW50LmNvbnRlbnRUeXBlKCksIGF0dGFjaG1lbnQuZmlsZU5hbWUoKSwg
V1RGTW92ZShkYXRhUmVmZXJlbmNlKSwgY2FsbGJhY2tJRCksIG1fd2ViUGFnZUlEKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpVcGRhdGVBdHRhY2htZW50QXR0cmlidXRlcyhhdHRhY2ht
ZW50LmlkZW50aWZpZXIoKSwgYXR0YWNobWVudC5maWxlU2l6ZUZvckRpc3BsYXkoKSwgYXR0YWNo
bWVudC5jb250ZW50VHlwZSgpLCBhdHRhY2htZW50LmZpbGVOYW1lKCksIFdURk1vdmUoZGF0YVJl
ZmVyZW5jZSksIGNhbGxiYWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnJlZ2lzdGVy
QXR0YWNobWVudElkZW50aWZpZXJGcm9tRGF0YShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIGNv
bnN0IFN0cmluZyYgY29udGVudFR5cGUsIGNvbnN0IFN0cmluZyYgcHJlZmVycmVkRmlsZU5hbWUs
IGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YSkKQEAgLTkyMTksNyArOTIxOSw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpnZXRBcHBsaWNhdGlvbk1hbmlmZXN0KEZ1bmN0aW9uPHZvaWQoY29u
c3QgT3B0aW9uYWw8V2ViQ29yZTo6CiAKICAgICBhdXRvIGNhbGxiYWNrSUQgPSBtX2NhbGxiYWNr
cy5wdXQoV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgbV9wcm9jZXNzLT50aHJvdHRsZXIoKS5i
YWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBhZ2VQcm94eTo6Z2V0QXBwbGljYXRpb25NYW5pZmVzdCJf
cykpOwogICAgIG1fbG9hZERlcGVuZGVudFN0cmluZ0NhbGxiYWNrSURzLmFkZChjYWxsYmFja0lE
KTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdldEFwcGxpY2F0aW9u
TWFuaWZlc3QoY2FsbGJhY2tJRCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpHZXRBcHBsaWNhdGlvbk1hbmlmZXN0KGNhbGxiYWNrSUQpKTsKIH0KICNlbmRpZgog
CkBAIC05MjgzLDcgKzkyODMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVwb3J0UGFnZUxvYWRS
ZXN1bHQoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiAKIHZvaWQgV2ViUGFnZVByb3h5Ojpz
ZXREZWZlcnNMb2FkaW5nRm9yVGVzdGluZyhib29sIGRlZmVyc0xvYWRpbmcpCiB7Ci0gICAgbV9w
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXREZWZlcnNMb2FkaW5nKGRlZmVyc0xv
YWRpbmcpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0RGVm
ZXJzTG9hZGluZyhkZWZlcnNMb2FkaW5nKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpnZXRJ
c1ZpZXdWaXNpYmxlKGJvb2wmIHJlc3VsdCkKQEAgLTkyOTUsNyArOTI5NSw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5Ojp1cGRhdGVDdXJyZW50TW9kaWZpZXJTdGF0ZSgpCiB7CiAjaWYgUExBVEZPUk0o
TUFDKSAmJiBFTkFCTEUoV0VCUFJPQ0VTU19XSU5ET1dTRVJWRVJfQkxPQ0tJTkcpIHx8IFBMQVRG
T1JNKElPU19GQU1JTFkpCiAgICAgYXV0byBtb2RpZmllcnMgPSBQbGF0Zm9ybUtleWJvYXJkRXZl
bnQ6OmN1cnJlbnRTdGF0ZU9mTW9kaWZpZXJLZXlzKCk7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpVcGRhdGVDdXJyZW50TW9kaWZpZXJTdGF0ZShtb2RpZmllcnMpLCBt
X3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6VXBkYXRlQ3VycmVudE1v
ZGlmaWVyU3RhdGUobW9kaWZpZXJzKSk7CiAjZW5kaWYKIH0KIApAQCAtOTMzNywyNyArOTMzNywy
NyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6d2lsbEFjcXVpcmVVbml2ZXJzYWxGaWxlUmVhZFNhbmRi
b3hFeHRlbnNpb24oV2ViUHJvY2Vzc1Byb3h5JgogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2ltdWxh
dGVEZXZpY2VPcmllbnRhdGlvbkNoYW5nZShkb3VibGUgYWxwaGEsIGRvdWJsZSBiZXRhLCBkb3Vi
bGUgZ2FtbWEpCiB7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTaW11
bGF0ZURldmljZU9yaWVudGF0aW9uQ2hhbmdlKGFscGhhLCBiZXRhLCBnYW1tYSksIG1fd2ViUGFn
ZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTaW11bGF0ZURldmljZU9yaWVudGF0
aW9uQ2hhbmdlKGFscGhhLCBiZXRhLCBnYW1tYSkpOwogfQogCiAjaWYgRU5BQkxFKERBVEFfREVU
RUNUSU9OKQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGV0ZWN0RGF0YUluQWxsRnJhbWVzKFdlYkNv
cmU6OkRhdGFEZXRlY3RvclR5cGVzIHR5cGVzLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0
IERhdGFEZXRlY3Rpb25SZXN1bHQmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBtX3By
b2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJQYWdl
OjpEZXRlY3REYXRhSW5BbGxGcmFtZXMoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHR5cGVzKSksIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJQYWdlOjpEZXRlY3REYXRhSW5BbGxGcmFtZXMoc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KHR5cGVzKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAog
dm9pZCBXZWJQYWdlUHJveHk6OnJlbW92ZURhdGFEZXRlY3RlZExpbmtzKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoY29uc3QgRGF0YURldGVjdGlvblJlc3VsdCYpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewotICAgIG1fcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6OldlYlBhZ2U6OlJlbW92ZURhdGFEZXRlY3RlZExpbmtzKCksIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3Nh
Z2VzOjpXZWJQYWdlOjpSZW1vdmVEYXRhRGV0ZWN0ZWRMaW5rcygpLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKICNlbmRpZgogCiAjaWYgVVNFKFNZU1RFTV9QUkVWSUVXKQotdm9p
ZCBXZWJQYWdlUHJveHk6OnN5c3RlbVByZXZpZXdBY3Rpb25UcmlnZ2VyZWQoY29uc3QgV2ViQ29y
ZTo6U3lzdGVtUHJldmlld0luZm8mIHByZXZpZXdJbmZvLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
IGNvbnN0Cit2b2lkIFdlYlBhZ2VQcm94eTo6c3lzdGVtUHJldmlld0FjdGlvblRyaWdnZXJlZChj
b25zdCBXZWJDb3JlOjpTeXN0ZW1QcmV2aWV3SW5mbyYgcHJldmlld0luZm8sIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKIHsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlN5
c3RlbVByZXZpZXdBY3Rpb25UcmlnZ2VyZWQocHJldmlld0luZm8sIG1lc3NhZ2UpLCBtX3dlYlBh
Z2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U3lzdGVtUHJldmlld0FjdGlvblRy
aWdnZXJlZChwcmV2aWV3SW5mbywgbWVzc2FnZSkpOwogfQogI2VuZGlmCiAKQEAgLTk1MjYsNyAr
OTUyNiw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojp0ZXh0SW5wdXRDb250ZXh0c0luUmVjdChXZWJD
b3JlOjpGbG9hdFJlY3QgcmVjdCwgQ29tcGxldGlvbkhhCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBtX3Byb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3Nh
Z2VzOjpXZWJQYWdlOjpUZXh0SW5wdXRDb250ZXh0c0luUmVjdChyZWN0KSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlciksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6OldlYlBhZ2U6OlRleHRJbnB1dENvbnRleHRzSW5SZWN0KHJlY3QpLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5Ojpmb2N1c1RleHRJbnB1
dENvbnRleHQoY29uc3QgV2ViQ29yZTo6RWxlbWVudENvbnRleHQmIGNvbnRleHQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC05NTM2LDcgKzk1
MzYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Zm9jdXNUZXh0SW5wdXRDb250ZXh0KGNvbnN0IFdl
YkNvcmU6OkVsZW1lbnRDb250ZXh0JiBjb250ZXh0LAogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgbV9wcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6V2ViUGFnZTo6Rm9jdXNUZXh0SW5wdXRDb250ZXh0KGNvbnRleHQpLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6V2ViUGFnZTo6Rm9jdXNUZXh0SW5wdXRDb250ZXh0KGNvbnRleHQpLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIExvZ2dlciYgV2ViUGFnZVByb3h5Ojpsb2dnZXIoKQpA
QCAtOTU4Nyw3ICs5NTg3LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnN0YXJ0VGV4dE1hbmlwdWxh
dGlvbnMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb24KICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBtX3RleHRNYW5pcHVsYXRpb25JdGVtQ2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKTsKLSAgICBtX3Byb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZFdpdGhBc3luY1Jl
cGx5KE1lc3NhZ2VzOjpXZWJQYWdlOjpTdGFydFRleHRNYW5pcHVsYXRpb25zKGV4Y2x1c2lvblJ1
bGVzKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OlN0YXJ0VGV4dE1hbmlwdWxhdGlvbnMo
ZXhjbHVzaW9uUnVsZXMpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQg
V2ViUGFnZVByb3h5OjpkaWRGaW5kVGV4dE1hbmlwdWxhdGlvbkl0ZW0oV2ViQ29yZTo6VGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXI6Okl0ZW1JZGVudGlmaWVyIGl0ZW1JRCwKQEAgLTk2MDUsMTMg
Kzk2MDUsMTMgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbihX
ZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjoKICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblJl
c3VsdDo6SW52YWxpZEl0ZW0pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1fcHJvY2Vz
cy0+Y29ubmVjdGlvbigpLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OkNv
bXBsZXRlVGV4dE1hbmlwdWxhdGlvbihpdGVtSUQsIHRva2VucyksIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpXZWJQYWdlOjpDb21wbGV0ZVRleHRNYW5pcHVsYXRpb24oaXRlbUlELCB0b2tlbnMpLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRPdmVy
cmlkZGVuTWVkaWFUeXBlKGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlKQogewogICAgIG1fb3ZlcnJp
ZGRlbk1lZGlhVHlwZSA9IG1lZGlhVHlwZTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OlNldE92ZXJyaWRkZW5NZWRpYVR5cGUobWVkaWFUeXBlKSwgbV93ZWJQYWdlSUQp
OworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldE92ZXJyaWRkZW5NZWRpYVR5cGUobWVk
aWFUeXBlKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRPcmllbnRhdGlvbkZvck1lZGlh
Q2FwdHVyZSh1aW50NjRfdCBvcmllbnRhdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmgKaW5kZXggNWQ1ZmRlODk0NmRkZGJiNWU3MGZlMGZlODI3NTg3YWYzZmYyZjMwZC4u
NGVjMzBhY2MzZjQ0NDg5OTYzMThiZGJhOWE0ZDk1MTJmMGU5NDBhNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTUwOCw3ICs1MDgsNyBAQCBwdWJsaWM6CiAKICNp
ZiBVU0UoU1lTVEVNX1BSRVZJRVcpCiAgICAgU3lzdGVtUHJldmlld0NvbnRyb2xsZXIqIHN5c3Rl
bVByZXZpZXdDb250cm9sbGVyKCkgeyByZXR1cm4gbV9zeXN0ZW1QcmV2aWV3Q29udHJvbGxlci5n
ZXQoKTsgfQotICAgIHZvaWQgc3lzdGVtUHJldmlld0FjdGlvblRyaWdnZXJlZChjb25zdCBXZWJD
b3JlOjpTeXN0ZW1QcmV2aWV3SW5mbyYsIGNvbnN0IFN0cmluZyYpIGNvbnN0OworICAgIHZvaWQg
c3lzdGVtUHJldmlld0FjdGlvblRyaWdnZXJlZChjb25zdCBXZWJDb3JlOjpTeXN0ZW1QcmV2aWV3
SW5mbyYsIGNvbnN0IFN0cmluZyYpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ09OVEVYVF9NRU5V
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQ
cm94eUd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJv
eHlHdGsuY3BwCmluZGV4IGFmYjBjMjRlNmM5NmQ5MzFlZTNjZDQwMzRmYTUyMWMyMzUzZGM1MGMu
LjZkNjhmMzA3N2E2MTRlZTcxNjAxNmY1OGY0OGJjMTFkODEyN2IwOGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcApAQCAt
NDkyLDcgKzQ5Miw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2ZShjb25z
dCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlCiAgICAgR1JlZlB0cjxHRmls
ZT4gZmlsZSA9IGFkb3B0R1JlZihndGtfZmlsZV9jaG9vc2VyX2dldF9maWxlKGNob29zZXIpKTsK
ICAgICBHVW5pcXVlUHRyPGNoYXI+IHBhdGgoZ19maWxlX2dldF9wYXRoKGZpbGUuZ2V0KCkpKTsK
ICAgICBpZiAoZ19maWxlX3NldF9jb250ZW50cyhwYXRoLmdldCgpLCBkYXRhLCBkYXRhTGVuZ3Ro
LCBudWxscHRyKSkKLSAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yVUk6OkRpZFNhdmUocGF0aC5nZXQoKSksIG1faW5zcGVjdG9yUGFn
ZS0+d2ViUGFnZUlEKCkpOworICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3RvclVJOjpEaWRTYXZlKHBhdGguZ2V0KCkpKTsKIH0KIAogdm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1BcHBlbmQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385292</attachid>
            <date>2019-12-10 12:00:46 -0800</date>
            <delta_ts>2019-12-10 12:36:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205065-20191210120045.patch</filename>
            <type>text/plain</type>
            <size>129587</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMzM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDk4YmIwZDRmYzhjY2ZiZDIw
Y2I3MmY2MWUxZmI0ZjUzYmZhZmQ3OWEuLmFjZWVmZjc3MjA0MmE4ODNlZWU4YjAxMmQyYWRiODFi
ZDU0YzZjOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcyIEBACisyMDE5LTEyLTEwICBDaHJpcyBE
dW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTGV2ZXJhZ2UgdGhlIGZhY3QgdGhh
dCBXZWJQYWdlUHJveHkgc3ViY2xhc3NlcyBJUEM6Ok1lc3NhZ2VTZW5kZXIgdG8gc2ltcGxpZnkg
SVBDIHNlbmRpbmcgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA1MDY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcDoKKyAgICAgICAgKFdLUGFnZVNl
dFBhZ2VMb2FkZXJDbGllbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1
dG9tYXRpb25TZXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Np
b246OnN3aXRjaFRvQnJvd3NpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21h
dGlvblNlc3Npb246OmV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQXV0b21hdGlvblNlc3Npb246OnJlc29sdmVDaGlsZEZyYW1lSGFuZGxlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OnJlc29sdmVQYXJlbnRGcmFtZUhhbmRs
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpjb21wdXRlRWxlbWVu
dExheW91dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpzZWxlY3RP
cHRpb25FbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OnNl
dEZpbGVzRm9ySW5wdXRGaWxlVXBsb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlv
blNlc3Npb246OmdldEFsbENvb2tpZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6ZGVsZXRlU2luZ2xlQ29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21h
dGlvblNlc3Npb246OnRha2VTY3JlZW5zaG90KToKKyAgICAgICAgKiBVSVByb2Nlc3MvUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eTo6bG9hZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3BlY3RvclByb3h5
OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Vc2VyTWVkaWFQ
ZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlVzZXJN
ZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5Ojp+VXNlck1lZGlhUGVybWlzc2lvblJl
cXVlc3RNYW5hZ2VyUHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJFZGl0Q29tbWFuZFBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdENvbW1hbmRQcm94eTo6dW5hcHBseSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRDb21tYW5kUHJveHk6OnJlYXBwbHkpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJGcmFtZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJh
bWVQcm94eTo6bG9hZFVSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lUHJveHk6OmxvYWRE
YXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVQcm94eTo6c3RvcExvYWRpbmcgY29uc3Qp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkluc3BlY3RvclByb3h5OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6Y29ubmVjdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkluc3BlY3RvclByb3h5OjpjbG9zZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rv
clByb3h5Ojp1cGRhdGVGb3JOZXdQYWdlUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYklu
c3BlY3RvclByb3h5OjpzZXRGcm9udGVuZENvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJbnNwZWN0b3JQcm94eTo6c2hvd0NvbnNvbGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNw
ZWN0b3JQcm94eTo6c2hvd1Jlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rv
clByb3h5OjpzaG93TWFpblJlc291cmNlRm9yRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
bnNwZWN0b3JQcm94eTo6YXR0YWNoKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJv
eHk6OmRldGFjaCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5Ojp0b2dnbGVQ
YWdlUHJvZmlsaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnRvZ2ds
ZUVsZW1lbnRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6
b3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRlbmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0
b3JQcm94eTo6b3Blbik6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5OjpjbG9z
ZUZyb250ZW5kUGFnZUFuZFdpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclBy
b3h5OjphdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRVSUNsaWVu
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0SWNvbkxvYWRpbmdDbGllbnQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmxhdW5jaFByb2Nlc3NGb3JSZWxvYWQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmxhdW5jaFByb2Nlc3NXaXRoSXRlbSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aW5pdGlhbGl6ZVdlYlBhZ2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5Ojpsb2FkUmVxdWVzdFdpdGhOYXZpZ2F0aW9uU2hhcmVkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5Ojpsb2FkRmlsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6bG9hZEFsdGVybmF0ZUhUTUwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OmxvYWRXZWJBcmNoaXZlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bmF2
aWdhdGVUb1BERkxpbmtXaXRoU2ltdWxhdGVkQ2xpY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnN0b3BMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpy
ZWxvYWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmdvVG9CYWNrRm9yd2FyZEl0
ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnRyeVJlc3RvcmVTY3JvbGxQb3Np
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0Q29udHJvbGxlZEJ5QXV0
b21hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0SW5kaWNhdGluZyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0QmFja2dyb3VuZENvbG9yKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRUb3BDb250ZW50SW5zZXQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldFVuZGVybGF5Q29sb3IpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnZpZXdXaWxsU3RhcnRMaXZlUmVzaXplKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5Ojp2aWV3V2lsbEVuZExpdmVSZXNpemUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnZpZXdEaWRFbnRlcldpbmRvdyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6ZGlzcGF0Y2hBY3Rpdml0eVN0YXRlQ2hhbmdlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpsYXllckhvc3RpbmdNb2RlRGlkQ2hhbmdlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRJbml0aWFsRm9jdXMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OmNsZWFyU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpyZXN0b3JlU2VsZWN0aW9uSW5Gb2N1c2VkRWRpdGFibGVFbGVtZW50KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojp2YWxpZGF0ZUNvbW1hbmQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OmluY3JlYXNlTGlzdExldmVsKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpkZWNyZWFzZUxpc3RMZXZlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6Y2hhbmdlTGlzdFR5cGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OnNldEJhc2VXcml0aW5nRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpzZXROZWVkc0ZvbnRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpzY2hlZHVsZUZ1bGxFZGl0b3JTdGF0ZVVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6c2VsZWN0QWxsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpleGVj
dXRlRWRpdENvbW1hbmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlcXVlc3RG
b250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnNldEVkaXRhYmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZXJm
b3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OmRyYWdFbmRlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkU3RhcnREcmFn
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkcmFnQ2FuY2VsbGVkKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpwcm9jZXNzTmV4dFF1ZXVlZE1vdXNlRXZlbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNlbmRXaGVlbEV2ZW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpoYW5kbGVHZXN0dXJlRXZlbnQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OmhhbmRsZVByZXZlbnRhYmxlVG91Y2hFdmVudCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVzZXRQb3RlbnRpYWxUYXBTZWN1cml0eU9yaWdpbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aGFuZGxlVW5wcmV2ZW50YWJsZVRvdWNoRXZl
bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmhhbmRsZVRvdWNoRXZlbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNhbmNlbFBvaW50ZXIpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OnRvdWNoV2l0aElkZW50aWZpZXJXYXNSZW1vdmVkKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzY3JvbGxCeSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6Y2VudGVyU2VsZWN0aW9uSW5WaXNpYmxlQXJlYSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y29tbWl0UHJvdmlzaW9uYWxQYWdlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpzZXRVc2VyQWdlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlv
bnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEN1c3RvbVRleHRFbmNvZGlu
Z05hbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlc3RvcmVGcm9tU2Vzc2lv
blN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRUZXh0Wm9vbUZhY3Rv
cik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0UGFnZVpvb21GYWN0b3IpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNjYWxlUGFnZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2NhbGVQYWdlSW5WaWV3Q29vcmRpbmF0ZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNjYWxlVmlldyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6d2luZG93U2NyZWVuRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5OjphY2Nlc3NpYmlsaXR5U2V0dGluZ3NEaWRDaGFuZ2UpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnNldFVzZUZpeGVkTGF5b3V0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpzZXRGaXhlZExheW91dFNpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnNldEFsd2F5c1Nob3dzSG9yaXpvbnRhbFNjcm9sbGVyKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpzZXRBbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6Omxpc3RlbkZvckxheW91dE1pbGVzdG9uZXMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldFN1cHByZXNzU2Nyb2xsYmFyQW5pbWF0
aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0RW5hYmxlVmVydGljYWxS
dWJiZXJCYW5kaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRFbmFibGVI
b3Jpem9udGFsUnViYmVyQmFuZGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
c2V0QmFja2dyb3VuZEV4dGVuZHNCZXlvbmRQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpzZXRQYWdpbmF0aW9uTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6c2V0UGFnaW5hdGlvbkJlaGF2ZXNMaWtlQ29sdW1ucyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6c2V0UGFnZUxlbmd0aCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6c2V0R2FwQmV0d2VlblBhZ2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpz
ZXRQYWdpbmF0aW9uTGluZUdyaWRFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpmaW5kU3RyaW5nTWF0Y2hlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
ZmluZFN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0SW1hZ2VGb3JG
aW5kTWF0Y2gpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNlbGVjdEZpbmRNYXRj
aCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aW5kaWNhdGVGaW5kTWF0Y2gpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmhpZGVGaW5kVUkpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OmNvdW50U3RyaW5nTWF0Y2hlcyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6cmVwbGFjZU1hdGNoZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZVNjcmlwdFdvcmxkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpydW5KYXZhU2NyaXB0SW5GcmFtZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6Z2V0UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb24pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmdldFNvdXJjZUZvckZyYW1lKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpnZXRDb250ZW50c0FzU3RyaW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpnZXRCeXRlY29kZVByb2ZpbGUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OmdldFNhbXBsaW5nUHJvZmlsZXJPdXRwdXQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OmdldENvbnRlbnRzQXNNSFRNTERhdGEpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OmdldFNlbGVjdGlvbk9yQ29udGVudHNBc1N0cmluZyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0U2VsZWN0aW9uQXNXZWJBcmNoaXZlRGF0
YSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0TWFpblJlc291cmNlRGF0YU9m
RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmdldFJlc291cmNlRGF0YUZy
b21GcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0V2ViQXJjaGl2ZU9m
RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmZvcmNlUmVwYWludCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cHJlZmVyZW5jZXNEaWRDaGFuZ2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6d2lsbFN1Ym1pdEZvcm0pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNob3dTaGFyZVNoZWV0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpzZXRNZWRpYVZvbHVtZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6c2V0TXV0ZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN0
b3BNZWRpYUNhcHR1cmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN0b3BBbGxN
ZWRpYVBsYXliYWNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzdXNwZW5kQWxs
TWVkaWFQbGF5YmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVzdW1lQWxs
TWVkaWFQbGF5YmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aGFuZGxlTWVk
aWFFdmVudCk6CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNhdmUpOgor
CiAyMDE5LTEyLTEwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAg
UmVncmVzc2lvbihyMjUzMjc3KSBBU1NFUlRJT04gRkFJTEVEOiAhcGFyYW1ldGVycy5yZXF1ZXN0
Lmh0dHBCb2R5KCkgaW4gTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnByZWNvbm5lY3RU
bygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9NZXNzYWdlU2VuZGVy
LmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9NZXNzYWdlU2VuZGVyLmgKaW5kZXggNzcx
NDQ4YTQ0ZDA4ODZkZDAxYmIwYzJkZTY0ZGM5YTQyODYyN2EyYS4uMjlmZTk4MTQyYzdmNGJiZWYx
OWMwZWY5YjBkYmM0NDFmNGMzOWE0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvTWVzc2FnZVNlbmRlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL01l
c3NhZ2VTZW5kZXIuaApAQCAtNzIsOSArNzIsMTUgQEAgcHVibGljOgogICAgIH0KIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEM+Ci0gICAgdm9pZCBzZW5kV2l0aEFzeW5jUmVw
bHkoVCYmIG1lc3NhZ2UsIEMmJiBjb21wbGV0aW9uSGFuZGxlcikKKyAgICB2b2lkIHNlbmRXaXRo
QXN5bmNSZXBseShUJiYgbWVzc2FnZSwgQyYmIGNvbXBsZXRpb25IYW5kbGVyLCBPcHRpb25TZXQ8
U2VuZE9wdGlvbj4gc2VuZE9wdGlvbnMgPSB7IH0pCiAgICAgewotICAgICAgICBtZXNzYWdlU2Vu
ZGVyQ29ubmVjdGlvbigpLT5zZW5kV2l0aEFzeW5jUmVwbHkoV1RGTW92ZShtZXNzYWdlKSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlciksIG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkpOwor
ICAgICAgICBzZW5kV2l0aEFzeW5jUmVwbHkoV1RGTW92ZShtZXNzYWdlKSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlciksIG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCksIHNlbmRPcHRpb25z
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBDPgorICAgIHZv
aWQgc2VuZFdpdGhBc3luY1JlcGx5KFQmJiBtZXNzYWdlLCBDJiYgY29tcGxldGlvbkhhbmRsZXIs
IHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIE9wdGlvblNldDxTZW5kT3B0aW9uPiBzZW5kT3B0aW9u
cyA9IHsgfSkKKyAgICB7CisgICAgICAgIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCktPnNlbmRX
aXRoQXN5bmNSZXBseShXVEZNb3ZlKG1lc3NhZ2UpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSwgZGVzdGluYXRpb25JRCwgc2VuZE9wdGlvbnMpOwogICAgIH0KIAogICAgIHZpcnR1YWwgYm9v
bCBzZW5kTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8RW5jb2Rlcj4sIE9wdGlvblNldDxTZW5kT3B0
aW9uPik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2Uu
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAppbmRleCA0ZDhm
NmNmMmU0NjNkOTBhZTM4MWJlZGFjZTk2YWE4YWUwMjM5NjY3Li43MGVmYmZhM2U4N2EyYWJhY2M0
NTE0NjQwZmRhM2Y3N2ViNjgwZTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dL
UGFnZS5jcHAKQEAgLTEyMTIsNyArMTIxMiw3IEBAIHZvaWQgV0tQYWdlU2V0UGFnZUxvYWRlckNs
aWVudChXS1BhZ2VSZWYgcGFnZVJlZiwgY29uc3QgV0tQYWdlTG9hZGVyQ2xpZW50QmFzZSoKICAg
ICAgICAgbWlsZXN0b25lcy5hZGQoV2ViQ29yZTo6RGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5
b3V0KTsKIAogICAgIGlmIChtaWxlc3RvbmVzKQotICAgICAgICB3ZWJQYWdlUHJveHktPnByb2Nl
c3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpMaXN0ZW5Gb3JMYXlvdXRNaWxlc3RvbmVzKG1p
bGVzdG9uZXMpLCB3ZWJQYWdlUHJveHktPndlYlBhZ2VJRCgpKTsKKyAgICAgICAgd2ViUGFnZVBy
b3h5LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpMaXN0ZW5Gb3JMYXlvdXRNaWxlc3RvbmVzKG1p
bGVzdG9uZXMpKTsKIAogICAgIHdlYlBhZ2VQcm94eS0+c2V0TG9hZGVyQ2xpZW50KFdURk1vdmUo
bG9hZGVyQ2xpZW50KSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
dXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCmluZGV4IDczZjA4ODZmYTgx
YzM3MTE3ZDBiNmE5Mzc3N2NlZmJiZTU1OWUzMjIuLmVlYTFmZGNjN2NmYWU1ZjA1Y2UzMmUwNDYy
MWY3MmMyOTc3ZWRjN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9t
YXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCkBAIC0zNzIsNyArMzcyLDcg
QEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c3dpdGNoVG9Ccm93c2luZ0NvbnRleHQoY29u
c3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHQKIAogICAgIG1fY2xpZW50LT5yZXF1ZXN0U3dpdGNo
VG9QYWdlKCp0aGlzLCAqcGFnZSwgW2ZyYW1lSUQsIHBhZ2UgPSBtYWtlUmVmKCpwYWdlKSwgY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSB7CiAgICAgICAgIHBhZ2UtPnNldEZvY3VzKHRy
dWUpOwotICAgICAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViQXV0b21hdGlv
blNlc3Npb25Qcm94eTo6Rm9jdXNGcmFtZShwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCksIDAp
OworICAgICAgICBwYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5
OjpGb2N1c0ZyYW1lKHBhZ2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlEKSwgMCk7CiAKICAgICAgICAg
Y2FsbGJhY2stPnNlbmRTdWNjZXNzKCk7CiAgICAgfSk7CkBAIC05NDgsNyArOTQ4LDcgQEAgdm9p
ZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb24oY29uc3Qg
U3RyaW5nJiBicm93c2luZ0NvbnQKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gbV9uZXh0RXZh
bHVhdGVKYXZhU2NyaXB0Q2FsbGJhY2tJRCsrOwogICAgIG1fZXZhbHVhdGVKYXZhU2NyaXB0RnVu
Y3Rpb25DYWxsYmFja3Muc2V0KGNhbGxiYWNrSUQsIFdURk1vdmUoY2FsbGJhY2spKTsKIAotICAg
IHBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5
OjpFdmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbihwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwg
ZnVuY3Rpb24sIGFyZ3VtZW50c1ZlY3RvciwgZXhwZWN0c0ltcGxpY2l0Q2FsbGJhY2tBcmd1bWVu
dCwgY2FsbGJhY2tUaW1lb3V0LCBjYWxsYmFja0lEKSwgMCk7CisgICAgcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6RXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rp
b24ocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQsIGZ1bmN0aW9uLCBhcmd1bWVudHNWZWN0b3Is
IGV4cGVjdHNJbXBsaWNpdENhbGxiYWNrQXJndW1lbnQsIGNhbGxiYWNrVGltZW91dCwgY2FsbGJh
Y2tJRCksIDApOwogfQogCiB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkaWRFdmFsdWF0ZUph
dmFTY3JpcHRGdW5jdGlvbih1aW50NjRfdCBjYWxsYmFja0lELCBjb25zdCBTdHJpbmcmIHJlc3Vs
dCwgY29uc3QgU3RyaW5nJiBlcnJvclR5cGUpCkBAIC05ODcsMTcgKzk4NywxNyBAQCB2b2lkIFdl
YkF1dG9tYXRpb25TZXNzaW9uOjpyZXNvbHZlQ2hpbGRGcmFtZUhhbmRsZShjb25zdCBTdHJpbmcm
IGJyb3dzaW5nQ29udGV4dAogICAgIH07CiAKICAgICBpZiAob3B0aW9uYWxOb2RlSGFuZGxlKSB7
Ci0gICAgICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Oldl
YkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OlJlc29sdmVDaGlsZEZyYW1lV2l0aE5vZGVIYW5kbGUo
cGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQsICpvcHRpb25hbE5vZGVIYW5kbGUpLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAgIHBhZ2UtPnNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6UmVzb2x2ZUNoaWxkRnJhbWVXaXRo
Tm9kZUhhbmRsZShwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgKm9wdGlvbmFsTm9kZUhhbmRs
ZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIGlmIChvcHRpb25hbE5hbWUpIHsKLSAgICAgICAgcGFnZS0+cHJvY2VzcygpLnNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6UmVzb2x2
ZUNoaWxkRnJhbWVXaXRoTmFtZShwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgKm9wdGlvbmFs
TmFtZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgcGFnZS0+c2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpSZXNvbHZl
Q2hpbGRGcmFtZVdpdGhOYW1lKHBhZ2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlELCAqb3B0aW9uYWxO
YW1lKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgaWYgKG9wdGlvbmFsT3JkaW5hbCkgewotICAgICAgICBwYWdlLT5wcm9jZXNzKCku
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpS
ZXNvbHZlQ2hpbGRGcmFtZVdpdGhPcmRpbmFsKHBhZ2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlELCAq
b3B0aW9uYWxPcmRpbmFsKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgICAgICBw
YWdlLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJv
eHk6OlJlc29sdmVDaGlsZEZyYW1lV2l0aE9yZGluYWwocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1l
SUQsICpvcHRpb25hbE9yZGluYWwpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwMjQsNyArMTAyNCw3IEBAIHZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OnJlc29sdmVQYXJlbnRGcmFtZUhhbmRsZShjb25zdCBTdHJpbmcmIGJyb3dz
aW5nQ29udGV4CiAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcyhoYW5kbGVGb3JXZWJGcmFt
ZUlEKGZyYW1lSUQpKTsKICAgICB9OwogCi0gICAgcGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5
bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6UmVzb2x2ZVBhcmVu
dEZyYW1lKHBhZ2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlEKSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOworICAgIHBhZ2UtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21h
dGlvblNlc3Npb25Qcm94eTo6UmVzb2x2ZVBhcmVudEZyYW1lKHBhZ2UtPndlYlBhZ2VJRCgpLCBm
cmFtZUlEKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiBzdGF0aWMgT3B0aW9u
YWw8Q29vcmRpbmF0ZVN5c3RlbT4gcHJvdG9jb2xTdHJpbmdUb0Nvb3JkaW5hdGVTeXN0ZW0oY29u
c3QgU3RyaW5nJiBjb29yZGluYXRlU3lzdGVtU3RyaW5nKQpAQCAtMTA4Niw3ICsxMDg2LDcgQEAg
dm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y29tcHV0ZUVsZW1lbnRMYXlvdXQoY29uc3QgU3Ry
aW5nJiBicm93c2luZ0NvbnRleHRIYW4KICAgICB9OwogCiAgICAgYm9vbCBzY3JvbGxJbnRvVmll
d0lmTmVlZGVkID0gb3B0aW9uYWxTY3JvbGxJbnRvVmlld0lmTmVlZGVkID8gKm9wdGlvbmFsU2Ny
b2xsSW50b1ZpZXdJZk5lZWRlZCA6IGZhbHNlOwotICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OkNvbXB1dGVF
bGVtZW50TGF5b3V0KHBhZ2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlELCBub2RlSGFuZGxlLCBzY3Jv
bGxJbnRvVmlld0lmTmVlZGVkLCBjb29yZGluYXRlU3lzdGVtLnZhbHVlKCkpLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CisgICAgcGFnZS0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpDb21wdXRlRWxlbWVudExheW91dChwYWdlLT53
ZWJQYWdlSUQoKSwgZnJhbWVJRCwgbm9kZUhhbmRsZSwgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCwg
Y29vcmRpbmF0ZVN5c3RlbS52YWx1ZSgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
fQogCiB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZWxlY3RPcHRpb25FbGVtZW50KGNvbnN0
IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIGZyYW1lSGFuZGxl
LCBjb25zdCBTdHJpbmcmIG5vZGVIYW5kbGUsIFJlZjxTZWxlY3RPcHRpb25FbGVtZW50Q2FsbGJh
Y2s+JiYgY2FsbGJhY2spCkBAIC0xMTA5LDcgKzExMDksNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjpzZWxlY3RPcHRpb25FbGVtZW50KGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0
SGFuZAogICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoKTsKICAgICB9OwogCi0gICAgcGFn
ZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNl
c3Npb25Qcm94eTo6U2VsZWN0T3B0aW9uRWxlbWVudChwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJ
RCwgbm9kZUhhbmRsZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBwYWdlLT5z
ZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OlNl
bGVjdE9wdGlvbkVsZW1lbnQocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQsIG5vZGVIYW5kbGUp
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgV2ViQXV0b21hdGlvblNl
c3Npb246OmlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2coSW5zcGVjdG9yOjpFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBib29sKiBy
ZXN1bHQpCkBAIC0xMjY5LDcgKzEyNjksNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpz
ZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZChjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udAogICAg
ICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoKTsKICAgICB9OwogCi0gICAgcGFnZS0+cHJvY2Vz
cygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94
eTo6U2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxvYWQocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQs
IG5vZGVIYW5kbGUsIFdURk1vdmUobmV3RmlsZUxpc3QpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOworICAgIHBhZ2UtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21h
dGlvblNlc3Npb25Qcm94eTo6U2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxvYWQocGFnZS0+d2ViUGFn
ZUlEKCksIGZyYW1lSUQsIG5vZGVIYW5kbGUsIFdURk1vdmUobmV3RmlsZUxpc3QpKSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb246OkNvb2tpZT4gYnVpbGRPYmplY3RGb3JDb29raWUoY29uc3QgV2ViQ29y
ZTo6Q29va2llJiBjb29raWUpCkBAIC0xMzEyLDcgKzEzMTIsNyBAQCB2b2lkIFdlYkF1dG9tYXRp
b25TZXNzaW9uOjpnZXRBbGxDb29raWVzKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFu
ZGxlLCBSZQogICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoYnVpbGRBcnJheUZvckNvb2tp
ZXMoY29va2llcykpOwogICAgIH07CiAKLSAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpHZXRDb29raWVzRm9y
RnJhbWUocGFnZS0+d2ViUGFnZUlEKCksIFdURjo6bnVsbG9wdCksIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKKyAgICBwYWdlLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1
dG9tYXRpb25TZXNzaW9uUHJveHk6OkdldENvb2tpZXNGb3JGcmFtZShwYWdlLT53ZWJQYWdlSUQo
KSwgV1RGOjpudWxsb3B0KSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVTaW5nbGVDb29raWUoY29uc3QgU3RyaW5nJiBi
cm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSwgUmVmPERlbGV0
ZVNpbmdsZUNvb2tpZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQpAQCAtMTMzMCw3ICsxMzMwLDcgQEAg
dm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlU2luZ2xlQ29va2llKGNvbnN0IFN0cmlu
ZyYgYnJvd3NpbmdDb250ZXh0SGFuZGwKICAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKCk7
CiAgICAgfTsKIAotICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OkRlbGV0ZUNvb2tpZShwYWdlLT53ZWJQYWdl
SUQoKSwgV1RGOjpudWxsb3B0LCBjb29raWVOYW1lKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOworICAgIHBhZ2UtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlv
blNlc3Npb25Qcm94eTo6RGVsZXRlQ29va2llKHBhZ2UtPndlYlBhZ2VJRCgpLCBXVEY6Om51bGxv
cHQsIGNvb2tpZU5hbWUpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHN0YXRp
YyBTdHJpbmcgZG9tYWluQnlBZGRpbmdEb3RQcmVmaXhJZk5lZWRlZChTdHJpbmcgZG9tYWluKQpA
QCAtMjAwOCw3ICsyMDA4LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6dGFrZVNjcmVl
bnNob3QoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IFN0cmluZyogb3AKICAgICB1aW50NjRf
dCBjYWxsYmFja0lEID0gbV9uZXh0U2NyZWVuc2hvdENhbGxiYWNrSUQrKzsKICAgICBtX3NjcmVl
bnNob3RDYWxsYmFja3Muc2V0KGNhbGxiYWNrSUQsIFdURk1vdmUoY2FsbGJhY2spKTsKIAotICAg
IHBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5
OjpUYWtlU2NyZWVuc2hvdChwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgbm9kZUhhbmRsZSwg
c2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCwgY2xpcFRvVmlld3BvcnQsIGNhbGxiYWNrSUQpLCAwKTsK
KyAgICBwYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpUYWtl
U2NyZWVuc2hvdChwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgbm9kZUhhbmRsZSwgc2Nyb2xs
SW50b1ZpZXdJZk5lZWRlZCwgY2xpcFRvVmlld3BvcnQsIGNhbGxiYWNrSUQpLCAwKTsKIH0KIAog
dm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGlkVGFrZVNjcmVlbnNob3QodWludDY0X3QgY2Fs
bGJhY2tJRCwgY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGltYWdlRGF0YUhhbmRsZSwg
Y29uc3QgU3RyaW5nJiBlcnJvclR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9SZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5jcHAKaW5kZXggYzBlNDUyNzQ4ZDE4YTEzMTIyZGEw
MGJlZTU0YjUyMDliODY2MTY4Ni4uZmNkYWUxNjUwNTZiNzQ5YmI1YzQwNWIwMjk4MjFlMjkxMDg3
MDZhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlV2ViSW5zcGVj
dG9yUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZVdlYkluc3Bl
Y3RvclByb3h5LmNwcApAQCAtNjgsNyArNjgsNyBAQCB2b2lkIFJlbW90ZVdlYkluc3BlY3RvclBy
b3h5Ojpsb2FkKGNvbnN0IFN0cmluZyYgZGVidWdnYWJsZVR5cGUsIGNvbnN0IFN0cmluZyYgYgog
ICAgIG1fZGVidWdnYWJsZVR5cGUgPSBkZWJ1Z2dhYmxlVHlwZTsKICAgICBtX2JhY2tlbmRDb21t
YW5kc1VSTCA9IGJhY2tlbmRDb21tYW5kc1VSTDsKIAotICAgIG1faW5zcGVjdG9yUGFnZS0+cHJv
Y2VzcygpLnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYkluc3BlY3RvclVJOjpJbml0aWFsaXplKGRl
YnVnZ2FibGVUeXBlLCBiYWNrZW5kQ29tbWFuZHNVUkwpLCBtX2luc3BlY3RvclBhZ2UtPndlYlBh
Z2VJRCgpKTsKKyAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdlYklu
c3BlY3RvclVJOjpJbml0aWFsaXplKGRlYnVnZ2FibGVUeXBlLCBiYWNrZW5kQ29tbWFuZHNVUkwp
KTsKICAgICBtX2luc3BlY3RvclBhZ2UtPmxvYWRSZXF1ZXN0KFVSTChVUkwoKSwgV2ViSW5zcGVj
dG9yUHJveHk6Omluc3BlY3RvclBhZ2VVUkwoKSkpOwogfQogCkBAIC05MCw3ICs5MCw3IEBAIHZv
aWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNob3coKQogCiB2b2lkIFJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQog
ewotICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OlJlbW90ZVdl
Ykluc3BlY3RvclVJOjpTZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVzc2FnZSksIG1faW5zcGVjdG9y
UGFnZS0+d2ViUGFnZUlEKCkpOworICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6
UmVtb3RlV2ViSW5zcGVjdG9yVUk6OlNlbmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlKSk7CiB9
CiAKIHZvaWQgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OmZyb250ZW5kRGlkQ2xvc2UoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlzc2lvblJlcXVl
c3RNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUGVy
bWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCmluZGV4IDdmM2JkMTIyNWY4N2FiZGU3ZTJk
NjQ1YTQ3ZTI5YWMxZTEyYmU0ZWIuLjdiN2RjNWY4OGQ4NWEwYjYwMjFmN2M3YjRjNzJmYjZjODg3
Y2I0YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1VzZXJNZWRpYVBlcm1p
c3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKQEAgLTg0LDcgKzg0
LDcgQEAgVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6OlVzZXJNZWRpYVBl
cm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5KFcKIAogVXNlck1lZGlhUGVybWlzc2lvblJlcXVl
c3RNYW5hZ2VyUHJveHk6On5Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eSgp
CiB7Ci0gICAgbV9wYWdlLnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTdG9wTWVk
aWFDYXB0dXJlIHsgfSwgbV9wYWdlLndlYlBhZ2VJRCgpKTsKKyAgICBtX3BhZ2Uuc2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6U3RvcE1lZGlhQ2FwdHVyZSB7IH0pOwogI2lmIEVOQUJMRShNRURJQV9T
VFJFQU0pCiAgICAgVXNlck1lZGlhUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpLnJldm9rZVNh
bmRib3hFeHRlbnNpb25zSWZOZWVkZWQocGFnZSgpLnByb2Nlc3MoKSk7CiAgICAgcHJveGllcygp
LnJlbW92ZSh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkVk
aXRDb21tYW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViRWRpdENvbW1h
bmRQcm94eS5jcHAKaW5kZXggMGZlNmQ4MzQ5ODA5OGM5N2U0NjdiMzY4NWIzZDZiMzY3ZTcyY2Q2
Ny4uMGRiZTBhZmI0MzNmMDIxNzE1OWUxNDZmNGJjMDg1M2VkNTE2ZmQ4NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViRWRpdENvbW1hbmRQcm94eS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViRWRpdENvbW1hbmRQcm94eS5jcHAKQEAgLTU1LDcgKzU1
LDcgQEAgdm9pZCBXZWJFZGl0Q29tbWFuZFByb3h5Ojp1bmFwcGx5KCkKICAgICBpZiAoIW1fcGFn
ZSB8fCAhbV9wYWdlLT5oYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBtX3BhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpVbmFwcGx5RWRpdENv
bW1hbmQobV9jb21tYW5kSUQpLCBtX3BhZ2UtPndlYlBhZ2VJRCgpLCBJUEM6OlNlbmRPcHRpb246
OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSk7CisgICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpVbmFwcGx5RWRpdENvbW1hbmQobV9jb21tYW5kSUQp
LCBJUEM6OlNlbmRPcHRpb246OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNS
ZXBseSk7CiAgICAgbV9wYWdlLT5yZWdpc3RlckVkaXRDb21tYW5kKCp0aGlzLCBVbmRvT3JSZWRv
OjpSZWRvKTsKIH0KIApAQCAtNjQsNyArNjQsNyBAQCB2b2lkIFdlYkVkaXRDb21tYW5kUHJveHk6
OnJlYXBwbHkoKQogICAgIGlmICghbV9wYWdlIHx8ICFtX3BhZ2UtPmhhc1J1bm5pbmdQcm9jZXNz
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OlJlYXBwbHlFZGl0Q29tbWFuZChtX2NvbW1hbmRJRCksIG1fcGFnZS0+d2Vi
UGFnZUlEKCksIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5n
Rm9yU3luY1JlcGx5KTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJlYXBw
bHlFZGl0Q29tbWFuZChtX2NvbW1hbmRJRCksIElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNz
YWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKICAgICBtX3BhZ2UtPnJlZ2lzdGVyRWRp
dENvbW1hbmQoKnRoaXMsIFVuZG9PclJlZG86OlVuZG8pOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJGcmFtZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkZyYW1lUHJveHkuY3BwCmluZGV4IGMxYzk1OGJkNDgxNGZhNDBmOTI1NDY0YzNl
YmMyMWRmNjU2MGM0ZjAuLjRkMzJmMDM1ZjBhNDJkOWNiNmQzYzlkYmM2ZjQyMDkwYzNkYjIyMzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUHJveHkuY3BwCkBAIC04Myw3ICs4
Myw3IEBAIHZvaWQgV2ViRnJhbWVQcm94eTo6bG9hZFVSTChjb25zdCBVUkwmIHVybCwgY29uc3Qg
U3RyaW5nJiByZWZlcnJlcikKICAgICBpZiAoIW1fcGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgbV9wYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6TG9hZFVSTEluRnJh
bWUodXJsLCByZWZlcnJlciwgbV9mcmFtZUlEKSwgbV9wYWdlLT53ZWJQYWdlSUQoKSk7CisgICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpMb2FkVVJMSW5GcmFtZSh1cmwsIHJlZmVy
cmVyLCBtX2ZyYW1lSUQpKTsKIH0KIAogdm9pZCBXZWJGcmFtZVByb3h5Ojpsb2FkRGF0YShjb25z
dCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGEsIGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsIGNvbnN0
IFN0cmluZyYgZW5jb2RpbmdOYW1lLCBjb25zdCBVUkwmIGJhc2VVUkwpCkBAIC05Miw3ICs5Miw3
IEBAIHZvaWQgV2ViRnJhbWVQcm94eTo6bG9hZERhdGEoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNl
JiBkYXRhLCBjb25zdCBTdHJpbmcmIE1JTUVUCiAgICAgaWYgKCFtX3BhZ2UpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fcGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Okxv
YWREYXRhSW5GcmFtZShkYXRhLCBNSU1FVHlwZSwgZW5jb2RpbmdOYW1lLCBiYXNlVVJMLCBtX2Zy
YW1lSUQpLCBtX3BhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OkxvYWREYXRhSW5GcmFtZShkYXRhLCBNSU1FVHlwZSwgZW5jb2RpbmdOYW1lLCBi
YXNlVVJMLCBtX2ZyYW1lSUQpKTsKIH0KIAogdm9pZCBXZWJGcmFtZVByb3h5OjpzdG9wTG9hZGlu
ZygpIGNvbnN0CkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBXZWJGcmFtZVByb3h5OjpzdG9wTG9h
ZGluZygpIGNvbnN0CiAgICAgaWYgKCFtX3BhZ2UtPmhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIG1fcGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlN0b3BMb2FkaW5nRnJhbWUobV9mcmFtZUlEKSwgbV9wYWdlLT53ZWJQYWdlSUQoKSk7Cisg
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTdG9wTG9hZGluZ0ZyYW1lKG1fZnJh
bWVJRCkpOwogfQogICAgIAogYm9vbCBXZWJGcmFtZVByb3h5OjpjYW5Qcm92aWRlU291cmNlKCkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkluc3BlY3RvclBy
b3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5LmNwcApp
bmRleCA3NDJjNzA4MDZiOTU3ZjY3YzVlNjA1Nzk3M2ZmYTJmZjVmNmNhZjEyLi41M2FiMzMwZjZj
OGFmYjUzOWI2YmNmM2MxZWM4YjA5NzE4YmU2MmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuY3BwCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKICAgICBpZiAoIW1faW5zcGVjdG9yUGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9p
bnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNl
bmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQo
KSk7CisgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6
U2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2UpKTsKIH0KIAogLy8gUHVibGljIEFQSXMKQEAg
LTEyOCw4ICsxMjgsOCBAQCB2b2lkIFdlYkluc3BlY3RvclByb3h5Ojpjb25uZWN0KCkKIAogICAg
IGNyZWF0ZUZyb250ZW5kUGFnZSgpOwogCi0gICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCku
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9ySW50ZXJydXB0RGlzcGF0Y2hlcjo6Tm90aWZ5TmVl
ZERlYnVnZ2VyQnJlYWsoKSwgMCk7Ci0gICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTaG93KCksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFn
ZUlEKCkpOworICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9y
SW50ZXJydXB0RGlzcGF0Y2hlcjo6Tm90aWZ5TmVlZERlYnVnZ2VyQnJlYWsoKSwgMCk7CisgICAg
bV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3coKSk7CiB9
CiAKIHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNob3coKQpAQCAtMTYzLDcgKzE2Myw3IEBAIHZv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OmNsb3NlKCkKICAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkuc2VuZChN
ZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpDbG9zZSgpLCBtX2luc3BlY3RlZFBhZ2UtPndlYlBhZ2VJ
RCgpKTsKKyAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6
Q2xvc2UoKSk7CiAKICAgICBjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpOwogfQpAQCAtMjEy
LDcgKzIxMiw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnVwZGF0ZUZvck5ld1BhZ2VQcm9j
ZXNzKFdlYlBhZ2VQcm94eSogaW5zcGVjdGVkUGFnZSkKICAgICBtX2luc3BlY3RlZFBhZ2UtPnBy
b2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5Ojpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlEKCksICp0aGlz
KTsKIAogICAgIGlmIChtX2luc3BlY3RvclBhZ2UpCi0gICAgICAgIG1faW5zcGVjdG9yUGFnZS0+
cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpVcGRhdGVDb25uZWN0aW9u
KCksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOworICAgICAgICBtX2luc3BlY3RvclBh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpVcGRhdGVDb25uZWN0aW9uKCkpOwog
fQogCiB2b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZXRGcm9udGVuZENvbm5lY3Rpb24oSVBDOjpB
dHRhY2htZW50IGNvbm5lY3Rpb25JZGVudGlmaWVyKQpAQCAtMjIwLDcgKzIyMCw3IEBAIHZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OnNldEZyb250ZW5kQ29ubmVjdGlvbihJUEM6OkF0dGFjaG1lbnQg
Y29ubmVjdGlvbklkZW50aWZpCiAgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1faW5zcGVjdGVkUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3Rvcjo6U2V0RnJvbnRlbmRDb25uZWN0aW9uKGNvbm5lY3Rpb25JZGVudGlmaWVyKSwg
bV9pbnNwZWN0ZWRQYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNldEZyb250ZW5kQ29ubmVjdGlvbihjb25uZWN0aW9u
SWRlbnRpZmllcikpOwogfQogCiB2b2lkIFdlYkluc3BlY3RvclByb3h5OjpzaG93Q29uc29sZSgp
CkBAIC0yMzAsNyArMjMwLDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2hvd0NvbnNvbGUo
KQogCiAgICAgY3JlYXRlRnJvbnRlbmRQYWdlKCk7CiAKLSAgICBtX2luc3BlY3RlZFBhZ2UtPnBy
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3dDb25zb2xlKCksIG1faW5z
cGVjdGVkUGFnZS0+d2ViUGFnZUlEKCkpOworICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yOjpTaG93Q29uc29sZSgpKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6c2hvd1Jlc291cmNlcygpCkBAIC0yNDAsNyArMjQwLDcgQEAgdm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6c2hvd1Jlc291cmNlcygpCiAKICAgICBjcmVhdGVGcm9udGVuZFBhZ2UoKTsK
IAotICAgIG1faW5zcGVjdGVkUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3Rvcjo6U2hvd1Jlc291cmNlcygpLCBtX2luc3BlY3RlZFBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAg
ICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2hvd1Jlc291
cmNlcygpKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2hvd01haW5SZXNvdXJjZUZv
ckZyYW1lKFdlYkZyYW1lUHJveHkqIGZyYW1lKQpAQCAtMjUwLDcgKzI1MCw3IEBAIHZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShXZWJGcmFtZVByb3h5KiBm
cmFtZSkKIAogICAgIGNyZWF0ZUZyb250ZW5kUGFnZSgpOwogCi0gICAgbV9pbnNwZWN0ZWRQYWdl
LT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTaG93TWFpblJlc291cmNl
Rm9yRnJhbWUoZnJhbWUtPmZyYW1lSUQoKSksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlEKCkp
OworICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTaG93
TWFpblJlc291cmNlRm9yRnJhbWUoZnJhbWUtPmZyYW1lSUQoKSkpOwogfQogCiB2b2lkIFdlYklu
c3BlY3RvclByb3h5OjphdHRhY2hCb3R0b20oKQpAQCAtMjgxLDE5ICsyODEsMTkgQEAgdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6YXR0YWNoKEF0dGFjaG1lbnRTaWRlIHNpZGUpCiAgICAgaWYgKG1f
aXNWaXNpYmxlKQogICAgICAgICBpbnNwZWN0b3JQYWdlUHJlZmVyZW5jZXMoKS5zZXRJbnNwZWN0
b3JTdGFydHNBdHRhY2hlZCh0cnVlKTsKIAotICAgIG1faW5zcGVjdGVkUGFnZS0+cHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2V0QXR0YWNoZWQodHJ1ZSksIG1faW5zcGVj
dGVkUGFnZS0+d2ViUGFnZUlEKCkpOworICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yOjpTZXRBdHRhY2hlZCh0cnVlKSk7CiAKICAgICBzd2l0Y2ggKG1fYXR0
YWNobWVudFNpZGUpIHsKICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpCb3R0b206Ci0gICAgICAg
IG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJ
OjpBdHRhY2hlZEJvdHRvbSgpLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICAg
ICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNo
ZWRCb3R0b20oKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6
UmlnaHQ6Ci0gICAgICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZFJpZ2h0KCksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFn
ZUlEKCkpOworICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3RvclVJOjpBdHRhY2hlZFJpZ2h0KCkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQXR0
YWNobWVudFNpZGU6OkxlZnQ6Ci0gICAgICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNl
bmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZExlZnQoKSwgbV9pbnNwZWN0b3JQ
YWdlLT53ZWJQYWdlSUQoKSk7CisgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkTGVmdCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogCkBAIC0zMTAsOCArMzEwLDggQEAgdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6ZGV0YWNoKCkK
ICAgICBpZiAobV9pc1Zpc2libGUpCiAgICAgICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygp
LnNldEluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKGZhbHNlKTsKIAotICAgIG1faW5zcGVjdGVkUGFn
ZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2V0QXR0YWNoZWQoZmFs
c2UpLCBtX2luc3BlY3RlZFBhZ2UtPndlYlBhZ2VJRCgpKTsKLSAgICBtX2luc3BlY3RvclBhZ2Ut
PnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RGV0YWNoZWQoKSwgbV9p
bnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNldEF0dGFjaGVkKGZhbHNlKSk7CisgICAgbV9pbnNwZWN0
b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RGV0YWNoZWQoKSk7CiAKICAg
ICBwbGF0Zm9ybURldGFjaCgpOwogfQpAQCAtMzQ0LDkgKzM0NCw5IEBAIHZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OnRvZ2dsZVBhZ2VQcm9maWxpbmcoKQogICAgICAgICByZXR1cm47CiAKICAgICBp
ZiAobV9pc1Byb2ZpbGluZ1BhZ2UpCi0gICAgICAgIG1faW5zcGVjdGVkUGFnZS0+cHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U3RvcFBhZ2VQcm9maWxpbmcoKSwgbV9pbnNw
ZWN0ZWRQYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTdG9wUGFnZVByb2ZpbGluZygpKTsKICAgICBlbHNlCi0g
ICAgICAgIG1faW5zcGVjdGVkUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3Rvcjo6U3RhcnRQYWdlUHJvZmlsaW5nKCksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlEKCkp
OworICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6
U3RhcnRQYWdlUHJvZmlsaW5nKCkpOwogfQogCiB2b2lkIFdlYkluc3BlY3RvclByb3h5Ojp0b2dn
bGVFbGVtZW50U2VsZWN0aW9uKCkKQEAgLTM1NiwxMCArMzU2LDEwIEBAIHZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OnRvZ2dsZUVsZW1lbnRTZWxlY3Rpb24oKQogCiAgICAgaWYgKG1fZWxlbWVudFNl
bGVjdGlvbkFjdGl2ZSkgewogICAgICAgICBtX2lnbm9yZUVsZW1lbnRTZWxlY3Rpb25DaGFuZ2Ug
PSB0cnVlOwotICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3I6OlN0b3BFbGVtZW50U2VsZWN0aW9uKCksIG1faW5zcGVjdGVkUGFnZS0+
d2ViUGFnZUlEKCkpOworICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3Rvcjo6U3RvcEVsZW1lbnRTZWxlY3Rpb24oKSk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgY29ubmVjdCgpOwotICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlN0YXJ0RWxlbWVudFNlbGVjdGlvbigpLCBtX2luc3BlY3Rl
ZFBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJJbnNwZWN0b3I6OlN0YXJ0RWxlbWVudFNlbGVjdGlvbigpKTsKICAgICB9CiB9CiAK
QEAgLTQxMiw3ICs0MTIsNyBAQCB2b2lkIFdlYkluc3BlY3RvclByb3h5OjpvcGVuTG9jYWxJbnNw
ZWN0b3JGcm9udGVuZChib29sIGNhbkF0dGFjaCwgYm9vbCB1bmRlclRlcwogICAgIGlmICghbV9p
bnNwZWN0b3JQYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2luc3BlY3RvclBhZ2UtPnBy
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RXN0YWJsaXNoQ29ubmVjdGlv
bihtX2luc3BlY3RlZFBhZ2UtPmlkZW50aWZpZXIoKSwgbV91bmRlclRlc3QsIGluc3BlY3Rpb25M
ZXZlbCgpKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgbV9pbnNwZWN0b3JQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RXN0YWJsaXNoQ29ubmVjdGlvbiht
X2luc3BlY3RlZFBhZ2UtPmlkZW50aWZpZXIoKSwgbV91bmRlclRlc3QsIGluc3BlY3Rpb25MZXZl
bCgpKSk7CiAKICAgICBBU1NFUlQoIW1faXNBY3RpdmVGcm9udGVuZCk7CiAgICAgbV9pc0FjdGl2
ZUZyb250ZW5kID0gdHJ1ZTsKQEAgLTQyMywyNiArNDIzLDI2IEBAIHZvaWQgV2ViSW5zcGVjdG9y
UHJveHk6Om9wZW5Mb2NhbEluc3BlY3RvckZyb250ZW5kKGJvb2wgY2FuQXR0YWNoLCBib29sIHVu
ZGVyVGVzCiAgICAgICAgIG1faXNBdHRhY2hlZCA9IHNob3VsZE9wZW5BdHRhY2hlZCgpOwogICAg
ICAgICBtX2F0dGFjaG1lbnRTaWRlID0gc3RhdGljX2Nhc3Q8QXR0YWNobWVudFNpZGU+KGluc3Bl
Y3RvclBhZ2VQcmVmZXJlbmNlcygpLmluc3BlY3RvckF0dGFjaG1lbnRTaWRlKCkpOwogCi0gICAg
ICAgIG1faW5zcGVjdGVkUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
cjo6U2V0QXR0YWNoZWQobV9pc0F0dGFjaGVkKSwgbV9pbnNwZWN0ZWRQYWdlLT53ZWJQYWdlSUQo
KSk7CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9y
OjpTZXRBdHRhY2hlZChtX2lzQXR0YWNoZWQpKTsKIAogICAgICAgICBpZiAobV9pc0F0dGFjaGVk
KSB7CiAgICAgICAgICAgICBzd2l0Y2ggKG1fYXR0YWNobWVudFNpZGUpIHsKICAgICAgICAgICAg
IGNhc2UgQXR0YWNobWVudFNpZGU6OkJvdHRvbToKLSAgICAgICAgICAgICAgICBtX2luc3BlY3Rv
clBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNoZWRC
b3R0b20oKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgICAgICAgICAgICAg
bV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNoZWRC
b3R0b20oKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgQXR0
YWNobWVudFNpZGU6OlJpZ2h0OgotICAgICAgICAgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+cHJv
Y2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZFJpZ2h0KCksIG1f
aW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOworICAgICAgICAgICAgICAgIG1faW5zcGVjdG9y
UGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkUmlnaHQoKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgQXR0YWNobWVudFNpZGU6
OkxlZnQ6Ci0gICAgICAgICAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChN
ZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkTGVmdCgpLCBtX2luc3BlY3RvclBhZ2Ut
PndlYlBhZ2VJRCgpKTsKKyAgICAgICAgICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZExlZnQoKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9pbnNw
ZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkRldGFj
aGVkKCksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOworICAgICAgICAgICAgbV9pbnNw
ZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RGV0YWNoZWQoKSk7CiAK
LSAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yVUk6OlNldERvY2tpbmdVbmF2YWlsYWJsZSghbV9jYW5BdHRhY2gpLCBtX2luc3BlY3Rv
clBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJJbnNwZWN0b3JVSTo6U2V0RG9ja2luZ1VuYXZhaWxhYmxlKCFtX2NhbkF0dGFjaCkp
OwogICAgIH0KIAogICAgIC8vIE5vdGlmeSBXZWJLaXQgY2xpZW50IHdoZW4gYSBsb2NhbCBpbnNw
ZWN0b3IgYXR0YWNoZXMgc28gdGhhdCBpdCBtYXkgaW5zdGFsbCBkZWxlZ2F0ZXMgcHJpb3IgdG8g
dGhlIF9XS0luc3BlY3RvciBsb2FkaW5nIGl0cyBmcm9udGVuZC4KQEAgLTQ2NSw3ICs0NjUsNyBA
QCB2b2lkIFdlYkluc3BlY3RvclByb3h5OjpvcGVuKCkKIAogICAgIFNldEZvclNjb3BlPGJvb2w+
IGlzT3BlbmluZyhtX2lzT3BlbmluZywgdHJ1ZSk7CiAgICAgbV9pc1Zpc2libGUgPSB0cnVlOwot
ICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clVJOjpTZXRJc1Zpc2libGUobV9pc1Zpc2libGUpLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJ
RCgpKTsKKyAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJ
OjpTZXRJc1Zpc2libGUobV9pc1Zpc2libGUpKTsKIAogICAgIGlmIChtX2lzQXR0YWNoZWQpCiAg
ICAgICAgIHBsYXRmb3JtQXR0YWNoKCk7CkBAIC00OTIsNyArNDkyLDcgQEAgdm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6Y2xvc2VGcm9udGVuZFBhZ2VBbmRXaW5kb3coKQogCiAgICAgdW50cmFja0lu
c3BlY3RvclBhZ2UobV9pbnNwZWN0b3JQYWdlKTsKIAotICAgIG1faW5zcGVjdG9yUGFnZS0+cHJv
Y2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTZXRJc1Zpc2libGUobV9pc1Zp
c2libGUpLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICBtX2luc3BlY3RvclBh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpTZXRJc1Zpc2libGUobV9pc1Zpc2li
bGUpKTsKICAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2
ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1f
aW5zcGVjdGVkUGFnZS0+aWRlbnRpZmllcigpKTsKIAogICAgIGlmIChtX2lzQWN0aXZlRnJvbnRl
bmQpIHsKQEAgLTU2MSw3ICs1NjEsNyBAQCB2b2lkIFdlYkluc3BlY3RvclByb3h5OjphdHRhY2hB
dmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wgYXZhaWxhYmxlKQogICAgICAgICByZXR1cm47CiAKICAg
ICBpZiAobV9pbnNwZWN0b3JQYWdlICYmICFtX3VuZGVyVGVzdCkKLSAgICAgICAgbV9pbnNwZWN0
b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNldERvY2tp
bmdVbmF2YWlsYWJsZSghbV9jYW5BdHRhY2gpLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgp
KTsKKyAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JV
STo6U2V0RG9ja2luZ1VuYXZhaWxhYmxlKCFtX2NhbkF0dGFjaCkpOwogCiAgICAgcGxhdGZvcm1B
dHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKG1fY2FuQXR0YWNoKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDk2MzhhMDM3MjJkMDkyOWJkMWUzYmM3MWM1
YjYzN2Y1M2ExNmEyOGMuLmMxNWJhMTIyOWRhMDNhYzVmZDhlNTgxNDQzYzk1NmVmNWE2M2JlNTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtNjMzLDcgKzYz
Myw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRVSUNsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJ
OjpVSUNsaWVudD4mJiB1aUNsaWVudCkKICAgICBtX3VpQ2xpZW50ID0gV1RGTW92ZSh1aUNsaWVu
dCk7CiAKICAgICBpZiAoaGFzUnVubmluZ1Byb2Nlc3MoKSkKLSAgICAgICAgbV9wcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRDYW5SdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwo
bV91aUNsaWVudC0+Y2FuUnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKCkpLCBtX3dlYlBhZ2VJ
RCk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldENhblJ1bkJlZm9yZVVubG9h
ZENvbmZpcm1QYW5lbChtX3VpQ2xpZW50LT5jYW5SdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwo
KSkpOwogCiAgICAgc2V0Q2FuUnVuTW9kYWwobV91aUNsaWVudC0+Y2FuUnVuTW9kYWwoKSk7CiAg
ICAgc2V0TmVlZHNGb250QXR0cmlidXRlcyhtX3VpQ2xpZW50LT5uZWVkc0ZvbnRBdHRyaWJ1dGVz
KCkpOwpAQCAtNjUwLDcgKzY1MCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRJY29uTG9hZGlu
Z0NsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpJY29uTG9hZGluZ0NsaWVudD4mCiAgICAgaWYg
KCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFVzZUljb25Mb2FkaW5nQ2xpZW50KGhhc0NsaWVu
dCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRVc2VJY29u
TG9hZGluZ0NsaWVudChoYXNDbGllbnQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldFBh
Z2VMb2FkU3RhdGVPYnNlcnZlcihzdGQ6OnVuaXF1ZV9wdHI8UGFnZUxvYWRTdGF0ZTo6T2JzZXJ2
ZXI+JiYgb2JzZXJ2ZXIpCkBAIC05NDUsNyArOTQ1LDcgQEAgUmVmUHRyPEFQSTo6TmF2aWdhdGlv
bj4gV2ViUGFnZVByb3h5OjpsYXVuY2hQcm9jZXNzRm9yUmVsb2FkKCkKICAgICB9CiAKICAgICAv
LyBXZSBhbGxvdyBzdGFsZSBjb250ZW50IHdoZW4gcmVsb2FkaW5nIGEgV2ViUHJvY2VzcyB0aGF0
J3MgYmVlbiBraWxsZWQgb3IgY3Jhc2hlZC4KLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OkdvVG9CYWNrRm9yd2FyZEl0ZW0obmF2aWdhdGlvbi0+bmF2aWdhdGlvbklEKCks
IG1fYmFja0ZvcndhcmRMaXN0LT5jdXJyZW50SXRlbSgpLT5pdGVtSUQoKSwgRnJhbWVMb2FkVHlw
ZTo6SW5kZXhlZEJhY2tGb3J3YXJkLCBTaG91bGRUcmVhdEFzQ29udGludWluZ0xvYWQ6Ok5vLCBX
VEY6Om51bGxvcHQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
R29Ub0JhY2tGb3J3YXJkSXRlbShuYXZpZ2F0aW9uLT5uYXZpZ2F0aW9uSUQoKSwgbV9iYWNrRm9y
d2FyZExpc3QtPmN1cnJlbnRJdGVtKCktPml0ZW1JRCgpLCBGcmFtZUxvYWRUeXBlOjpJbmRleGVk
QmFja0ZvcndhcmQsIFNob3VsZFRyZWF0QXNDb250aW51aW5nTG9hZDo6Tm8sIFdURjo6bnVsbG9w
dCkpOwogICAgIG1fcHJvY2Vzcy0+cmVzcG9uc2l2ZW5lc3NUaW1lcigpLnN0YXJ0KCk7CiAKICAg
ICByZXR1cm4gbmF2aWdhdGlvbjsKQEAgLTk2OCw3ICs5NjgsNyBAQCBSZWZQdHI8QVBJOjpOYXZp
Z2F0aW9uPiBXZWJQYWdlUHJveHk6OmxhdW5jaFByb2Nlc3NXaXRoSXRlbShXZWJCYWNrRm9yd2Fy
ZExpc3RJdAogCiAgICAgYXV0byBuYXZpZ2F0aW9uID0gbV9uYXZpZ2F0aW9uU3RhdGUtPmNyZWF0
ZUJhY2tGb3J3YXJkTmF2aWdhdGlvbihpdGVtLCBtX2JhY2tGb3J3YXJkTGlzdC0+Y3VycmVudEl0
ZW0oKSwgRnJhbWVMb2FkVHlwZTo6SW5kZXhlZEJhY2tGb3J3YXJkKTsKIAotICAgIG1fcHJvY2Vz
cy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R29Ub0JhY2tGb3J3YXJkSXRlbShuYXZpZ2F0aW9u
LT5uYXZpZ2F0aW9uSUQoKSwgaXRlbS5pdGVtSUQoKSwgRnJhbWVMb2FkVHlwZTo6SW5kZXhlZEJh
Y2tGb3J3YXJkLCBTaG91bGRUcmVhdEFzQ29udGludWluZ0xvYWQ6Ok5vLCBXVEY6Om51bGxvcHQp
LCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R29Ub0JhY2tGb3J3
YXJkSXRlbShuYXZpZ2F0aW9uLT5uYXZpZ2F0aW9uSUQoKSwgaXRlbS5pdGVtSUQoKSwgRnJhbWVM
b2FkVHlwZTo6SW5kZXhlZEJhY2tGb3J3YXJkLCBTaG91bGRUcmVhdEFzQ29udGludWluZ0xvYWQ6
Ok5vLCBXVEY6Om51bGxvcHQpKTsKICAgICBtX3Byb2Nlc3MtPnJlc3BvbnNpdmVuZXNzVGltZXIo
KS5zdGFydCgpOwogCiAgICAgcmV0dXJuIG5hdmlnYXRpb247CkBAIC05OTksNyArOTk5LDcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OmluaXRpYWxpemVXZWJQYWdlKCkKICAgICBzZXREcmF3aW5nQXJl
YShwYWdlQ2xpZW50KCkuY3JlYXRlRHJhd2luZ0FyZWFQcm94eShtX3Byb2Nlc3MpKTsKICAgICBB
U1NFUlQobV9kcmF3aW5nQXJlYSk7CiAKLSAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2Vi
UHJvY2Vzczo6Q3JlYXRlV2ViUGFnZShtX3dlYlBhZ2VJRCwgY3JlYXRpb25QYXJhbWV0ZXJzKG1f
cHJvY2VzcywgKm1fZHJhd2luZ0FyZWEpKSwgMCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUHJv
Y2Vzczo6Q3JlYXRlV2ViUGFnZShtX3dlYlBhZ2VJRCwgY3JlYXRpb25QYXJhbWV0ZXJzKG1fcHJv
Y2VzcywgKm1fZHJhd2luZ0FyZWEpKSwgMCk7CiAKICAgICBtX3Byb2Nlc3MtPmFkZFZpc2l0ZWRM
aW5rU3RvcmVVc2VyKHZpc2l0ZWRMaW5rU3RvcmUoKSwgbV9pZGVudGlmaWVyKTsKIH0KQEAgLTEw
NjAsNyArMTA2MCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpjbG9zZSgpCiAKICAgICBtX3Byb2Nl
c3MtPnByb2Nlc3NQb29sKCkuYmFja0ZvcndhcmRDYWNoZSgpLnJlbW92ZUVudHJpZXNGb3JQYWdl
KCp0aGlzKTsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q2xvc2Uo
KSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNsb3NlKCkpOwog
ICAgIG1fcHJvY2Vzcy0+cmVtb3ZlV2ViUGFnZSgqdGhpcywgV2ViUHJvY2Vzc1Byb3h5OjpFbmRz
VXNpbmdEYXRhU3RvcmU6Olllcyk7CiAgICAgbV9wcm9jZXNzLT5yZW1vdmVNZXNzYWdlUmVjZWl2
ZXIoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3dlYlBh
Z2VJRCk7CiAgICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnN1cHBsZW1lbnQ8V2ViTm90aWZp
Y2F0aW9uTWFuYWdlclByb3h5PigpLT5jbGVhck5vdGlmaWNhdGlvbnModGhpcyk7CkBAIC0xMzA4
LDExICsxMzA4LDExIEBAIFJlZlB0cjxBUEk6Ok5hdmlnYXRpb24+IFdlYlBhZ2VQcm94eTo6bG9h
ZEZpbGUoY29uc3QgU3RyaW5nJiBmaWxlVVJMU3RyaW5nLCBjb25zCiAKICNpZiBIQVZFKFNBTkRC
T1hfSVNTVUVfUkVBRF9FWFRFTlNJT05fVE9fUFJPQ0VTU19CWV9BVURJVF9UT0tFTikKICAgICBp
ZiAobV9wcm9jZXNzLT5pc0xhdW5jaGluZygpKQotICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OkxvYWRSZXF1ZXN0V2FpdGluZ0ZvclByb2Nlc3NMYXVuY2gobG9hZFBh
cmFtZXRlcnMsIHJlc291cmNlRGlyZWN0b3J5VVJMLCBtX2lkZW50aWZpZXIsIGNoZWNrQXNzdW1l
ZFJlYWRBY2Nlc3NUb1Jlc291cmNlVVJMKSwgbV93ZWJQYWdlSUQpOworICAgICAgICBzZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpMb2FkUmVxdWVzdFdhaXRpbmdGb3JQcm9jZXNzTGF1bmNoKGxvYWRQ
YXJhbWV0ZXJzLCByZXNvdXJjZURpcmVjdG9yeVVSTCwgbV9pZGVudGlmaWVyLCBjaGVja0Fzc3Vt
ZWRSZWFkQWNjZXNzVG9SZXNvdXJjZVVSTCkpOwogICAgIGVsc2UKLSAgICAgICAgbV9wcm9jZXNz
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpMb2FkUmVxdWVzdChsb2FkUGFyYW1ldGVycyksIG1f
d2ViUGFnZUlEKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6TG9hZFJlcXVlc3Qo
bG9hZFBhcmFtZXRlcnMpKTsKICNlbHNlCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpMb2FkUmVxdWVzdChsb2FkUGFyYW1ldGVycyksIG1fd2ViUGFnZUlEKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpMb2FkUmVxdWVzdChsb2FkUGFyYW1ldGVycykpOwogI2Vu
ZGlmCiAgICAgbV9wcm9jZXNzLT5yZXNwb25zaXZlbmVzc1RpbWVyKCkuc3RhcnQoKTsKIApAQCAt
MTQwMiw3ICsxNDAyLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmxvYWRBbHRlcm5hdGVIVE1MKGNv
bnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgaHRtbERhdGEsIGNvbnN0IFMKIAogICAgIG1fcHJvY2Vz
cy0+YXNzdW1lUmVhZEFjY2Vzc1RvQmFzZVVSTCgqdGhpcywgYmFzZVVSTCk7CiAgICAgbV9wcm9j
ZXNzLT5hc3N1bWVSZWFkQWNjZXNzVG9CYXNlVVJMKCp0aGlzLCB1bnJlYWNoYWJsZVVSTCk7Ci0g
ICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpMb2FkQWx0ZXJuYXRlSFRNTChs
b2FkUGFyYW1ldGVycyksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpMb2FkQWx0ZXJuYXRlSFRNTChsb2FkUGFyYW1ldGVycykpOwogICAgIG1fcHJvY2Vzcy0+cmVz
cG9uc2l2ZW5lc3NUaW1lcigpLnN0YXJ0KCk7CiB9CiAKQEAgLTE0MjksNyArMTQyOSw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5Ojpsb2FkV2ViQXJjaGl2ZURhdGEoQVBJOjpEYXRhKiB3ZWJBcmNoaXZl
RGF0YSwgQVBJOjpPYmplY3QqIHVzCiAgICAgbG9hZFBhcmFtZXRlcnMudXNlckRhdGEgPSBVc2Vy
RGF0YShwcm9jZXNzKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YSkuZ2V0KCkp
OwogICAgIGFkZFBsYXRmb3JtTG9hZFBhcmFtZXRlcnMobG9hZFBhcmFtZXRlcnMpOwogCi0gICAg
bV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpMb2FkRGF0YShsb2FkUGFyYW1ldGVy
cyksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpMb2FkRGF0YShs
b2FkUGFyYW1ldGVycykpOwogICAgIG1fcHJvY2Vzcy0+cmVzcG9uc2l2ZW5lc3NUaW1lcigpLnN0
YXJ0KCk7CiB9CiAKQEAgLTE0NDgsNyArMTQ0OCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpuYXZp
Z2F0ZVRvUERGTGlua1dpdGhTaW11bGF0ZWRDbGljayhjb25zdCBTdHJpbmcmIHVybFN0cmluZywK
ICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIGxhdW5jaFByb2Nlc3MoUmVn
aXN0cmFibGVEb21haW4geyBVUkwoVVJMKCksIHVybFN0cmluZykgfSwgUHJvY2Vzc0xhdW5jaFJl
YXNvbjo6SW5pdGlhbFByb2Nlc3MpOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpOYXZpZ2F0ZVRvUERGTGlua1dpdGhTaW11bGF0ZWRDbGljayh1cmxTdHJpbmcsIGRv
Y3VtZW50UG9pbnQsIHNjcmVlblBvaW50KSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6Ok5hdmlnYXRlVG9QREZMaW5rV2l0aFNpbXVsYXRlZENsaWNrKHVybFN0cmlu
ZywgZG9jdW1lbnRQb2ludCwgc2NyZWVuUG9pbnQpKTsKICAgICBtX3Byb2Nlc3MtPnJlc3BvbnNp
dmVuZXNzVGltZXIoKS5zdGFydCgpOwogfQogCkBAIC0xNDYxLDcgKzE0NjEsNyBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6c3RvcExvYWRpbmcoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
bV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTdG9wTG9hZGluZygpLCBtX3dlYlBh
Z2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U3RvcExvYWRpbmcoKSk7CiAgICAg
aWYgKG1fcHJvdmlzaW9uYWxQYWdlKSB7CiAgICAgICAgIG1fcHJvdmlzaW9uYWxQYWdlLT5jYW5j
ZWwoKTsKICAgICAgICAgbV9wcm92aXNpb25hbFBhZ2UgPSBudWxscHRyOwpAQCAtMTQ5Niw3ICsx
NDk2LDcgQEAgUmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4gV2ViUGFnZVByb3h5OjpyZWxvYWQoT3B0
aW9uU2V0PFdlYkNvcmU6OlJlbG9hZE9wdGlvbj4gb3AKICAgICBpZiAob3B0aW9ucy5jb250YWlu
cyhXZWJDb3JlOjpSZWxvYWRPcHRpb246OkRpc2FibGVDb250ZW50QmxvY2tlcnMpKQogICAgICAg
ICBuYXZpZ2F0aW9uLT5zZXRVc2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkKGZhbHNlKTsKIAot
ICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVsb2FkKG5hdmlnYXRpb24t
Pm5hdmlnYXRpb25JRCgpLCBvcHRpb25zLnRvUmF3KCksIHNhbmRib3hFeHRlbnNpb25IYW5kbGUp
LCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVsb2FkKG5hdmln
YXRpb24tPm5hdmlnYXRpb25JRCgpLCBvcHRpb25zLnRvUmF3KCksIHNhbmRib3hFeHRlbnNpb25I
YW5kbGUpKTsKICAgICBtX3Byb2Nlc3MtPnJlc3BvbnNpdmVuZXNzVGltZXIoKS5zdGFydCgpOwog
CiAjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCkBAIC0xNTY1LDcgKzE1NjUsNyBAQCBSZWZQ
dHI8QVBJOjpOYXZpZ2F0aW9uPiBXZWJQYWdlUHJveHk6OmdvVG9CYWNrRm9yd2FyZEl0ZW0oV2Vi
QmFja0ZvcndhcmRMaXN0SXRlbQogICAgIGF1dG8gdHJhbnNhY3Rpb24gPSBtX3BhZ2VMb2FkU3Rh
dGUudHJhbnNhY3Rpb24oKTsKICAgICBtX3BhZ2VMb2FkU3RhdGUuc2V0UGVuZGluZ0FQSVJlcXVl
c3QodHJhbnNhY3Rpb24sIHsgbmF2aWdhdGlvbiA/IG5hdmlnYXRpb24tPm5hdmlnYXRpb25JRCgp
IDogMCwgaXRlbS51cmwoKSB9KTsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6R29Ub0JhY2tGb3J3YXJkSXRlbShuYXZpZ2F0aW9uID8gbmF2aWdhdGlvbi0+bmF2aWdh
dGlvbklEKCkgOiAwLCBpdGVtLml0ZW1JRCgpLCBmcmFtZUxvYWRUeXBlLCBTaG91bGRUcmVhdEFz
Q29udGludWluZ0xvYWQ6Ok5vLCBXVEY6Om51bGxvcHQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6R29Ub0JhY2tGb3J3YXJkSXRlbShuYXZpZ2F0aW9uID8gbmF2
aWdhdGlvbi0+bmF2aWdhdGlvbklEKCkgOiAwLCBpdGVtLml0ZW1JRCgpLCBmcmFtZUxvYWRUeXBl
LCBTaG91bGRUcmVhdEFzQ29udGludWluZ0xvYWQ6Ok5vLCBXVEY6Om51bGxvcHQpKTsKICAgICBt
X3Byb2Nlc3MtPnJlc3BvbnNpdmVuZXNzVGltZXIoKS5zdGFydCgpOwogCiAgICAgcmV0dXJuIG5h
dmlnYXRpb247CkBAIC0xNTgwLDcgKzE1ODAsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6dHJ5UmVz
dG9yZVNjcm9sbFBvc2l0aW9uKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fcHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6VHJ5UmVzdG9yZVNjcm9sbFBvc2l0aW9uKCks
IG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpUcnlSZXN0b3JlU2Ny
b2xsUG9zaXRpb24oKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDaGFuZ2VCYWNrRm9y
d2FyZExpc3QoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogYWRkZWQsIFZlY3RvcjxSZWY8V2ViQmFj
a0ZvcndhcmRMaXN0SXRlbT4+JiYgcmVtb3ZlZCkKQEAgLTE2NDIsNyArMTY0Miw3IEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpzZXRDb250cm9sbGVkQnlBdXRvbWF0aW9uKGJvb2wgY29udHJvbGxlZCkK
ICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1f
cHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0Q29udHJvbGxlZEJ5QXV0b21hdGlv
bihjb250cm9sbGVkKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OlNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24oY29udHJvbGxlZCkpOwogICAgIG1fcHJvY2Vzcy0+
cHJvY2Vzc1Bvb2woKS5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3M6OlNldFNlc3Npb25Jc0NvbnRyb2xsZWRCeUF1dG9tYXRpb24obV93ZWJzaXRlRGF0YVN0
b3JlLT5zZXNzaW9uSUQoKSwgbV9jb250cm9sbGVkQnlBdXRvbWF0aW9uKSk7CiB9CiAKQEAgLTE2
NjcsNyArMTY2Nyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRJbmRpY2F0aW5nKGJvb2wgaW5k
aWNhdGluZykKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0SW5kaWNhdGluZyhp
bmRpY2F0aW5nKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNl
dEluZGljYXRpbmcoaW5kaWNhdGluZykpOwogfQogCiBib29sIFdlYlBhZ2VQcm94eTo6YWxsb3dz
UmVtb3RlSW5zcGVjdGlvbigpIGNvbnN0CkBAIC0xNzAzLDcgKzE3MDMsNyBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IE9wdGlvbmFsPENvbG9yPiYgY29sb3Ip
CiAKICAgICBtX2JhY2tncm91bmRDb2xvciA9IGNvbG9yOwogICAgIGlmIChoYXNSdW5uaW5nUHJv
Y2VzcygpKQotICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEJh
Y2tncm91bmRDb2xvcihjb2xvciksIG1fd2ViUGFnZUlEKTsKKyAgICAgICAgc2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6U2V0QmFja2dyb3VuZENvbG9yKGNvbG9yKSk7CiB9CiAKIHZvaWQgV2ViUGFn
ZVByb3h5OjpzZXRUb3BDb250ZW50SW5zZXQoZmxvYXQgY29udGVudEluc2V0KQpAQCAtMTcxOSw5
ICsxNzE5LDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFRvcENvbnRlbnRJbnNldChmbG9hdCBj
b250ZW50SW5zZXQpCiAgICAgTWFjaFNlbmRSaWdodCBmZW5jZSA9IG1fZHJhd2luZ0FyZWEtPmNy
ZWF0ZUZlbmNlKCk7CiAKICAgICBhdXRvIGZlbmNlQXR0YWNobWVudCA9IElQQzo6QXR0YWNobWVu
dChmZW5jZS5sZWFrU2VuZFJpZ2h0KCksIE1BQ0hfTVNHX1RZUEVfTU9WRV9TRU5EKTsKLSAgICBt
X3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFRvcENvbnRlbnRJbnNldEZlbmNl
ZChjb250ZW50SW5zZXQsIGZlbmNlQXR0YWNobWVudCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRUb3BDb250ZW50SW5zZXRGZW5jZWQoY29udGVudEluc2V0
LCBmZW5jZUF0dGFjaG1lbnQpKTsKICNlbHNlCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpTZXRUb3BDb250ZW50SW5zZXQoY29udGVudEluc2V0KSwgbV93ZWJQYWdlSUQp
OworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFRvcENvbnRlbnRJbnNldChjb250ZW50
SW5zZXQpKTsKICNlbmRpZgogfQogCkBAIC0xNzMzLDcgKzE3MzMsNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6c2V0VW5kZXJsYXlDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiAgICAgbV91bmRlcmxh
eUNvbG9yID0gY29sb3I7CiAKICAgICBpZiAoaGFzUnVubmluZ1Byb2Nlc3MoKSkKLSAgICAgICAg
bV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRVbmRlcmxheUNvbG9yKGNvbG9y
KSwgbV93ZWJQYWdlSUQpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRVbmRl
cmxheUNvbG9yKGNvbG9yKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5Ojp2aWV3V2lsbFN0YXJ0
TGl2ZVJlc2l6ZSgpCkBAIC0xNzQyLDE0ICsxNzQyLDE0IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojp2
aWV3V2lsbFN0YXJ0TGl2ZVJlc2l6ZSgpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNsb3NlT3Zl
cmxheWVkVmlld3MoKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlZp
ZXdXaWxsU3RhcnRMaXZlUmVzaXplKCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpWaWV3V2lsbFN0YXJ0TGl2ZVJlc2l6ZSgpKTsKIH0KIAogdm9pZCBXZWJQYWdl
UHJveHk6OnZpZXdXaWxsRW5kTGl2ZVJlc2l6ZSgpCiB7CiAgICAgaWYgKCFoYXNSdW5uaW5nUHJv
Y2VzcygpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpWaWV3V2lsbEVuZExpdmVSZXNpemUoKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OlZpZXdXaWxsRW5kTGl2ZVJlc2l6ZSgpKTsKIH0KIAogdm9pZCBX
ZWJQYWdlUHJveHk6OnNldFZpZXdOZWVkc0Rpc3BsYXkoY29uc3QgUmVnaW9uJiByZWdpb24pCkBA
IC0xODQ5LDcgKzE4NDksNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6dmlld0RpZEVudGVyV2luZG93
KCkKICAgICBMYXllckhvc3RpbmdNb2RlIGxheWVySG9zdGluZ01vZGUgPSBwYWdlQ2xpZW50KCku
dmlld0xheWVySG9zdGluZ01vZGUoKTsKICAgICBpZiAobV9sYXllckhvc3RpbmdNb2RlICE9IGxh
eWVySG9zdGluZ01vZGUpIHsKICAgICAgICAgbV9sYXllckhvc3RpbmdNb2RlID0gbGF5ZXJIb3N0
aW5nTW9kZTsKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRM
YXllckhvc3RpbmdNb2RlKGxheWVySG9zdGluZ01vZGUpLCBtX3dlYlBhZ2VJRCk7CisgICAgICAg
IHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldExheWVySG9zdGluZ01vZGUobGF5ZXJIb3N0aW5n
TW9kZSkpOwogICAgIH0KIH0KIApAQCAtMTg5OCw3ICsxODk4LDcgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OmRpc3BhdGNoQWN0aXZpdHlTdGF0ZUNoYW5nZSgpCiAgICAgYXV0byBhY3Rpdml0eVN0YXRl
Q2hhbmdlSUQgPSBtX2FjdGl2aXR5U3RhdGVDaGFuZ2VXYW50c1N5bmNocm9ub3VzUmVwbHkgPyB0
YWtlTmV4dEFjdGl2aXR5U3RhdGVDaGFuZ2VJRCgpIDogc3RhdGljX2Nhc3Q8QWN0aXZpdHlTdGF0
ZUNoYW5nZUlEPihBY3Rpdml0eVN0YXRlQ2hhbmdlQXN5bmNocm9ub3VzKTsKIAogICAgIGlmIChj
aGFuZ2VkIHx8IGFjdGl2aXR5U3RhdGVDaGFuZ2VJRCAhPSBBY3Rpdml0eVN0YXRlQ2hhbmdlQXN5
bmNocm9ub3VzIHx8ICFtX25leHRBY3Rpdml0eVN0YXRlQ2hhbmdlQ2FsbGJhY2tzLmlzRW1wdHko
KSkKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRBY3Rpdml0
eVN0YXRlKG1fYWN0aXZpdHlTdGF0ZSwgYWN0aXZpdHlTdGF0ZUNoYW5nZUlELCBtX25leHRBY3Rp
dml0eVN0YXRlQ2hhbmdlQ2FsbGJhY2tzKSwgbV93ZWJQYWdlSUQpOworICAgICAgICBzZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpTZXRBY3Rpdml0eVN0YXRlKG1fYWN0aXZpdHlTdGF0ZSwgYWN0aXZp
dHlTdGF0ZUNoYW5nZUlELCBtX25leHRBY3Rpdml0eVN0YXRlQ2hhbmdlQ2FsbGJhY2tzKSk7CiAK
ICAgICBtX25leHRBY3Rpdml0eVN0YXRlQ2hhbmdlQ2FsbGJhY2tzLmNsZWFyKCk7CiAKQEAgLTIw
MzMsNyArMjAzMyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpsYXllckhvc3RpbmdNb2RlRGlkQ2hh
bmdlKCkKICAgICBtX2xheWVySG9zdGluZ01vZGUgPSBsYXllckhvc3RpbmdNb2RlOwogCiAgICAg
aWYgKGhhc1J1bm5pbmdQcm9jZXNzKCkpCi0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6U2V0TGF5ZXJIb3N0aW5nTW9kZShsYXllckhvc3RpbmdNb2RlKSwgbV93ZWJQ
YWdlSUQpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRMYXllckhvc3RpbmdN
b2RlKGxheWVySG9zdGluZ01vZGUpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OndhaXRGb3JE
aWRVcGRhdGVBY3Rpdml0eVN0YXRlKEFjdGl2aXR5U3RhdGVDaGFuZ2VJRCBhY3Rpdml0eVN0YXRl
Q2hhbmdlSUQpCkBAIC0yMDc1LDIxICsyMDc1LDIxIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRJ
bml0aWFsRm9jdXMoYm9vbCBmb3J3YXJkLCBib29sIGlzS2V5Ym9hcmRFdmVudFZhbGlkLCBjb25z
CiAgICAgfQogCiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFja3MucHV0KFdURk1vdmUo
Y2FsbGJhY2tGdW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2
aXR5KCJXZWJQYWdlUHJveHk6OnNldEluaXRpYWxGb2N1cyJfcykpOwotICAgIG1fcHJvY2Vzcy0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0SW5pdGlhbEZvY3VzKGZvcndhcmQsIGlzS2V5Ym9h
cmRFdmVudFZhbGlkLCBrZXlib2FyZEV2ZW50LCBjYWxsYmFja0lEKSwgbV93ZWJQYWdlSUQpOwor
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEluaXRpYWxGb2N1cyhmb3J3YXJkLCBpc0tl
eWJvYXJkRXZlbnRWYWxpZCwga2V5Ym9hcmRFdmVudCwgY2FsbGJhY2tJRCkpOwogfQogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6Y2xlYXJTZWxlY3Rpb24oKQogewogICAgIGlmICghaGFzUnVubmluZ1By
b2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6Q2xlYXJTZWxlY3Rpb24oKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OkNsZWFyU2VsZWN0aW9uKCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6
cmVzdG9yZVNlbGVjdGlvbkluRm9jdXNlZEVkaXRhYmxlRWxlbWVudCgpCiB7CiAgICAgaWYgKCFo
YXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9wcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpSZXN0b3JlU2VsZWN0aW9uSW5Gb2N1c2VkRWRpdGFibGVFbGVt
ZW50KCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpSZXN0b3Jl
U2VsZWN0aW9uSW5Gb2N1c2VkRWRpdGFibGVFbGVtZW50KCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQ
cm94eTo6dmFsaWRhdGVDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIFdURjo6RnVu
Y3Rpb248dm9pZCAoY29uc3QgU3RyaW5nJiwgYm9vbCwgaW50MzJfdCwgQ2FsbGJhY2tCYXNlOjpF
cnJvcik+JiYgY2FsbGJhY2tGdW5jdGlvbikKQEAgLTIxMDAsNyArMjEwMCw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5Ojp2YWxpZGF0ZUNvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgV1RG
OjpGdW5jdGlvbjx2b2lkCiAgICAgfQogCiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFj
a3MucHV0KFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCku
YmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6OnZhbGlkYXRlQ29tbWFuZCJfcykpOwot
ICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6VmFsaWRhdGVDb21tYW5kKGNv
bW1hbmROYW1lLCBjYWxsYmFja0lEKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OlZhbGlkYXRlQ29tbWFuZChjb21tYW5kTmFtZSwgY2FsbGJhY2tJRCkpOwogfQog
CiB2b2lkIFdlYlBhZ2VQcm94eTo6aW5jcmVhc2VMaXN0TGV2ZWwoKQpAQCAtMjEwOCw3ICsyMTA4
LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmluY3JlYXNlTGlzdExldmVsKCkKICAgICBpZiAoIWhh
c1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6SW5jcmVhc2VMaXN0TGV2ZWwoKSwgbV93ZWJQYWdlSUQpOwor
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkluY3JlYXNlTGlzdExldmVsKCkpOwogfQogCiB2
b2lkIFdlYlBhZ2VQcm94eTo6ZGVjcmVhc2VMaXN0TGV2ZWwoKQpAQCAtMjExNiw3ICsyMTE2LDcg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OmRlY3JlYXNlTGlzdExldmVsKCkKICAgICBpZiAoIWhhc1J1
bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6RGVjcmVhc2VMaXN0TGV2ZWwoKSwgbV93ZWJQYWdlSUQpOworICAg
IHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRlY3JlYXNlTGlzdExldmVsKCkpOwogfQogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6Y2hhbmdlTGlzdFR5cGUoKQpAQCAtMjEyNCw3ICsyMTI0LDcgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OmNoYW5nZUxpc3RUeXBlKCkKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9j
ZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6Q2hhbmdlTGlzdFR5cGUoKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OkNoYW5nZUxpc3RUeXBlKCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6
c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24oV3JpdGluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pCkBAIC0y
MTMyLDcgKzIxMzIsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rp
b24oV3JpdGluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2Vz
cygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OlNldEJhc2VXcml0aW5nRGlyZWN0aW9uKGRpcmVjdGlvbiksIG1fd2ViUGFnZUlEKTsK
KyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRCYXNlV3JpdGluZ0RpcmVjdGlvbihkaXJl
Y3Rpb24pKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnVwZGF0ZUZvbnRBdHRyaWJ1dGVzQWZ0
ZXJFZGl0b3JTdGF0ZUNoYW5nZSgpCkBAIC0yMTU2LDcgKzIxNTYsNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6c2V0TmVlZHNGb250QXR0cmlidXRlcyhib29sIG5lZWRzRm9udEF0dHJpYnV0ZXMpCiAg
ICAgbV9uZWVkc0ZvbnRBdHRyaWJ1dGVzID0gbmVlZHNGb250QXR0cmlidXRlczsKIAogICAgIGlm
IChoYXNSdW5uaW5nUHJvY2VzcygpKQotICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OlNldE5lZWRzRm9udEF0dHJpYnV0ZXMobmVlZHNGb250QXR0cmlidXRlcyksIG1f
d2ViUGFnZUlEKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0TmVlZHNGb250
QXR0cmlidXRlcyhuZWVkc0ZvbnRBdHRyaWJ1dGVzKSk7CiB9CiAKIGJvb2wgV2ViUGFnZVByb3h5
OjptYWludGFpbnNJbmFjdGl2ZVNlbGVjdGlvbigpIGNvbnN0CkBAIC0yMTc5LDcgKzIxNzksNyBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6c2NoZWR1bGVGdWxsRWRpdG9yU3RhdGVVcGRhdGUoKQogICAg
IGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTY2hlZHVsZUZ1bGxFZGl0b3JTdGF0ZVVwZGF0
ZSgpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2NoZWR1bGVG
dWxsRWRpdG9yU3RhdGVVcGRhdGUoKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZWxlY3RB
bGwoKQpAQCAtMjE4Nyw3ICsyMTg3LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNlbGVjdEFsbCgp
CiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBt
X3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNlbGVjdEFsbCgpLCBtX3dlYlBhZ2VJ
RCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2VsZWN0QWxsKCkpOwogfQogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6ZXhlY3V0ZUVkaXRDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5h
bWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQsIFdURjo6RnVuY3Rpb248dm9pZChDYWxsYmFja0Jh
c2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQpAQCAtMjE5OCw3ICsyMTk4LDcgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OmV4ZWN1dGVFZGl0Q29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmRO
YW1lLCBjb25zdCBTdHJpbmcmIGEKICAgICB9CiAKICAgICBhdXRvIGNhbGxiYWNrSUQgPSBtX2Nh
bGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgbV9wcm9jZXNzLT50aHJvdHRs
ZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBhZ2VQcm94eTo6ZXhlY3V0ZUVkaXRDb21tYW5k
Il9zKSk7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpFeGVjdXRlRWRp
dENvbW1hbmRXaXRoQ2FsbGJhY2soY29tbWFuZE5hbWUsIGFyZ3VtZW50LCBjYWxsYmFja0lEKSwg
bV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkV4ZWN1dGVFZGl0Q29t
bWFuZFdpdGhDYWxsYmFjayhjb21tYW5kTmFtZSwgYXJndW1lbnQsIGNhbGxiYWNrSUQpKTsKIH0K
ICAgICAKIHZvaWQgV2ViUGFnZVByb3h5OjpleGVjdXRlRWRpdENvbW1hbmQoY29uc3QgU3RyaW5n
JiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCkKQEAgLTIyMTEsNyArMjIxMSw3
IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpleGVjdXRlRWRpdENvbW1hbmQoY29uc3QgU3RyaW5nJiBj
b21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhCiAgICAgaWYgKGNvbW1hbmROYW1lID09IGlnbm9y
ZVNwZWxsaW5nQ29tbWFuZE5hbWUpCiAgICAgICAgICsrbV9wZW5kaW5nTGVhcm5Pcklnbm9yZVdv
cmRNZXNzYWdlQ291bnQ7CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OkV4ZWN1dGVFZGl0Q29tbWFuZChjb21tYW5kTmFtZSwgYXJndW1lbnQpLCBtX3dlYlBhZ2VJRCk7
CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RXhlY3V0ZUVkaXRDb21tYW5kKGNvbW1hbmRO
YW1lLCBhcmd1bWVudCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6cmVxdWVzdEZvbnRBdHRy
aWJ1dGVzQXRTZWxlY3Rpb25TdGFydChGdW5jdGlvbjx2b2lkKGNvbnN0IFdlYkNvcmU6OkZvbnRB
dHRyaWJ1dGVzJiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2spCkBAIC0yMjIyLDcg
KzIyMjIsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVxdWVzdEZvbnRBdHRyaWJ1dGVzQXRTZWxl
Y3Rpb25TdGFydChGdW5jdGlvbjx2b2lkKGNvbnN0IFdlYgogICAgIH0KIAogICAgIGF1dG8gY2Fs
bGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrKSwgbV9wcm9jZXNzLT50
aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBhZ2VQcm94eTo6cmVxdWVzdEZvbnRB
dHRyaWJ1dGVzQXRTZWxlY3Rpb25TdGFydCJfcykpOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6UmVxdWVzdEZvbnRBdHRyaWJ1dGVzQXRTZWxlY3Rpb25TdGFydChjYWxs
YmFja0lEKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJlcXVl
c3RGb250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQoY2FsbGJhY2tJRCkpOwogfQogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6Zm9udEF0dHJpYnV0ZXNDYWxsYmFjayhjb25zdCBXZWJDb3JlOjpGb250
QXR0cmlidXRlcyYgYXR0cmlidXRlcywgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQpAQCAtMjI0Myw3
ICsyMjQzLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldEVkaXRhYmxlKGJvb2wgZWRpdGFibGUp
CiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBt
X3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEVkaXRhYmxlKGVkaXRhYmxlKSwg
bV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEVkaXRhYmxlKGVk
aXRhYmxlKSk7CiB9CiAgICAgCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0TWVkaWFTdHJlYW1DYXB0
dXJlTXV0ZWQoYm9vbCBtdXRlZCkKQEAgLTIzMDgsOSArMjMwOCw5IEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24oRHJhZ0NvbnRyb2xsZXJBY3Rpb24gYWN0
aW9uLCBEcmFnCiAKICAgICBBU1NFUlQoZHJhZ0RhdGEucGxhdGZvcm1EYXRhKCkpOwogICAgIFdl
YlNlbGVjdGlvbkRhdGEgc2VsZWN0aW9uKCpkcmFnRGF0YS5wbGF0Zm9ybURhdGEoKSk7Ci0gICAg
bV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRHJhZ0NvbnRyb2xsZXJB
Y3Rpb24oYWN0aW9uLCBkcmFnRGF0YS5jbGllbnRQb3NpdGlvbigpLCBkcmFnRGF0YS5nbG9iYWxQ
b3NpdGlvbigpLCBkcmFnRGF0YS5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKSwgc2VsZWN0
aW9uLCBkcmFnRGF0YS5mbGFncygpKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OlBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihhY3Rpb24sIGRyYWdEYXRhLmNs
aWVudFBvc2l0aW9uKCksIGRyYWdEYXRhLmdsb2JhbFBvc2l0aW9uKCksIGRyYWdEYXRhLmRyYWdn
aW5nU291cmNlT3BlcmF0aW9uTWFzaygpLCBzZWxlY3Rpb24sIGRyYWdEYXRhLmZsYWdzKCkpKTsK
ICNlbHNlCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRHJh
Z0NvbnRyb2xsZXJBY3Rpb24oYWN0aW9uLCBkcmFnRGF0YSwgc2FuZGJveEV4dGVuc2lvbkhhbmRs
ZSwgc2FuZGJveEV4dGVuc2lvbnNGb3JVcGxvYWQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKGFjdGlvbiwgZHJh
Z0RhdGEsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIHNhbmRib3hFeHRlbnNpb25zRm9yVXBsb2Fk
KSk7CiAjZW5kaWYKIH0KIApAQCAtMjM0MCw3ICsyMzQwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OmRyYWdFbmRlZChjb25zdCBJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IEludFBvaW50
JiBnbG8KIHsKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsK
LSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRyYWdFbmRlZChjbGllbnRQ
b3NpdGlvbiwgZ2xvYmFsUG9zaXRpb24sIG9wZXJhdGlvbiksIG1fd2ViUGFnZUlEKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEcmFnRW5kZWQoY2xpZW50UG9zaXRpb24sIGdsb2JhbFBv
c2l0aW9uLCBvcGVyYXRpb24pKTsKICAgICBzZXREcmFnQ2FyZXRSZWN0KHsgfSk7CiB9CiAKQEAg
LTIzNTIsMTMgKzIzNTIsMTMgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZFBlcmZvcm1EcmFnT3Bl
cmF0aW9uKGJvb2wgaGFuZGxlZCkKIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRTdGFydERyYWcoKQog
ewogICAgIGlmIChoYXNSdW5uaW5nUHJvY2VzcygpKQotICAgICAgICBtX3Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OkRpZFN0YXJ0RHJhZygpLCBtX3dlYlBhZ2VJRCk7CisgICAgICAg
IHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZFN0YXJ0RHJhZygpKTsKIH0KICAgICAKIHZvaWQg
V2ViUGFnZVByb3h5OjpkcmFnQ2FuY2VsbGVkKCkKIHsKICAgICBpZiAoaGFzUnVubmluZ1Byb2Nl
c3MoKSkKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEcmFnQ2Fu
Y2VsbGVkKCksIG1fd2ViUGFnZUlEKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
RHJhZ0NhbmNlbGxlZCgpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmRpZEVuZERyYWdnaW5n
KCkKQEAgLTI0NTcsNyArMjQ1Nyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpwcm9jZXNzTmV4dFF1
ZXVlZE1vdXNlRXZlbnQoKQogICAgIH0KIAogICAgIExPRyhNb3VzZUhhbmRsaW5nLCAiVUlQcm9j
ZXNzOiBzZW50IG1vdXNlIGV2ZW50ICVzIChxdWV1ZSBzaXplICV6dSkiLCB3ZWJNb3VzZUV2ZW50
VHlwZVN0cmluZyhldmVudFR5cGUpLCBtX21vdXNlRXZlbnRRdWV1ZS5zaXplKCkpOwotICAgIG1f
cHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6TW91c2VFdmVudChldmVudCksIG1fd2Vi
UGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpNb3VzZUV2ZW50KGV2ZW50KSk7
CiB9CiAKICNpZiBNRVJHRV9XSEVFTF9FVkVOVFMKQEAgLTI1NjQsNyArMjU2NCw3IEBAIHZvaWQg
V2ViUGFnZVByb3h5Ojpwcm9jZXNzTmV4dFF1ZXVlZFdoZWVsRXZlbnQoKQogCiB2b2lkIFdlYlBh
Z2VQcm94eTo6c2VuZFdoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYgZXZlbnQpCiB7Ci0g
ICAgbV9wcm9jZXNzLT5zZW5kKAorICAgIHNlbmQoCiAgICAgICAgIE1lc3NhZ2VzOjpFdmVudERp
c3BhdGNoZXI6OldoZWVsRXZlbnQoCiAgICAgICAgICAgICBtX3dlYlBhZ2VJRCwKICAgICAgICAg
ICAgIGV2ZW50LApAQCAtMjYxNyw3ICsyNjE3LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRs
ZUtleWJvYXJkRXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYgZXZlbnQpCiAKICAg
ICBpZiAobV9rZXlFdmVudFF1ZXVlLnNpemUoKSA9PSAxKSB7IC8vIE90aGVyd2lzZSwgc2VudCBm
cm9tIERpZFJlY2VpdmVFdmVudCBtZXNzYWdlIGhhbmRsZXIuCiAgICAgICAgIExPRyhLZXlIYW5k
bGluZywgIiBVSSBwcm9jZXNzOiBzZW50IGtleUV2ZW50IGZyb20gaGFuZGxlS2V5Ym9hcmRFdmVu
dCIpOwotICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OktleUV2ZW50
KGV2ZW50KSwgbV93ZWJQYWdlSUQpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpL
ZXlFdmVudChldmVudCkpOwogICAgIH0KIH0KIApAQCAtMjc5MCw3ICsyNzkwLDcgQEAgdm9pZCBX
ZWJQYWdlUHJveHk6OmhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBOYXRpdmVXZWJHZXN0dXJlRXZl
bnQmIGV2ZW50KQogICAgIGVsc2UKICAgICAgICAgcmVzcG9uc2l2ZW5lc3NUaW1lci5zdGFydCgp
OwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpFdmVudERpc3BhdGNoZXI6Okdlc3R1
cmVFdmVudChtX3dlYlBhZ2VJRCwgZXZlbnQpLCAwKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpFdmVu
dERpc3BhdGNoZXI6Okdlc3R1cmVFdmVudChtX3dlYlBhZ2VJRCwgZXZlbnQpLCAwKTsKIH0KICNl
bmRpZgogCkBAIC0yODUyLDEzICsyODUyLDEzIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVQ
cmV2ZW50YWJsZVRvdWNoRXZlbnQoTmF0aXZlV2ViVG91Y2hFdmVudCYgZXZlbnQpCiAgICAgICAg
IH07CiAKICAgICAgICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFja3MucHV0KFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rp
dml0eSgiV2ViUGFnZVByb3h5OjpoYW5kbGVQcmV2ZW50YWJsZVRvdWNoRXZlbnQiX3MpKTsKLSAg
ICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpFdmVudERpc3BhdGNoZXI6OlRvdWNoRXZl
bnQobV93ZWJQYWdlSUQsIGV2ZW50LCBjYWxsYmFja0lEKSwgMCk7CisgICAgICAgIHNlbmQoTWVz
c2FnZXM6OkV2ZW50RGlzcGF0Y2hlcjo6VG91Y2hFdmVudChtX3dlYlBhZ2VJRCwgZXZlbnQsIGNh
bGxiYWNrSUQpLCAwKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIG1fcHJvY2Vzcy0+
cmVzcG9uc2l2ZW5lc3NUaW1lcigpLnN0YXJ0KCk7CiAgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7
Ci0gICAgYm9vbCByZXBseVJlY2VpdmVkID0gbV9wcm9jZXNzLT5zZW5kU3luYyhNZXNzYWdlczo6
V2ViUGFnZTo6VG91Y2hFdmVudFN5bmMoZXZlbnQpLCBNZXNzYWdlczo6V2ViUGFnZTo6VG91Y2hF
dmVudFN5bmM6OlJlcGx5KGhhbmRsZWQpLCBtX3dlYlBhZ2VJRCwgMV9zLCBJUEM6OlNlbmRTeW5j
T3B0aW9uOjpGb3JjZURpc3BhdGNoV2hlbkRlc3RpbmF0aW9uSXNXYWl0aW5nRm9yVW5ib3VuZGVk
U3luY1JlcGx5KTsKKyAgICBib29sIHJlcGx5UmVjZWl2ZWQgPSBzZW5kU3luYyhNZXNzYWdlczo6
V2ViUGFnZTo6VG91Y2hFdmVudFN5bmMoZXZlbnQpLCBNZXNzYWdlczo6V2ViUGFnZTo6VG91Y2hF
dmVudFN5bmM6OlJlcGx5KGhhbmRsZWQpLCAxX3MsIElQQzo6U2VuZFN5bmNPcHRpb246OkZvcmNl
RGlzcGF0Y2hXaGVuRGVzdGluYXRpb25Jc1dhaXRpbmdGb3JVbmJvdW5kZWRTeW5jUmVwbHkpOwog
ICAgIC8vIElmIHRoZSBzeW5jIHJlcXVlc3QgaGFzIHRpbWVkIG91dCwgd2Ugc2hvdWxkIGNvbnNp
ZGVyIHRoZSBldmVudCBoYW5kbGVkLiBUaGUgV2ViIFByb2Nlc3MgaXMgdG9vIGJ1c3kgdG8gYW5z
d2VyIGFueSBxdWVzdGlvbnMsIHNvIHRoZSBkZWZhdWx0IGFjdGlvbiBpcyBhbHNvIGxpa2VseSB0
byBoYXZlIGlzc3Vlcy4KICAgICBpZiAoIXJlcGx5UmVjZWl2ZWQpCiAgICAgICAgIGhhbmRsZWQg
PSB0cnVlOwpAQCAtMjg3Myw3ICsyODczLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlc2V0UG90
ZW50aWFsVGFwU2VjdXJpdHlPcmlnaW4oKQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpSZXNldFBvdGVudGlhbFRhcFNlY3VyaXR5T3JpZ2luKCksIG1fd2ViUGFnZUlEKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpSZXNldFBvdGVudGlhbFRhcFNlY3VyaXR5T3JpZ2luKCkp
OwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlVW5wcmV2ZW50YWJsZVRvdWNoRXZlbnQo
Y29uc3QgTmF0aXZlV2ViVG91Y2hFdmVudCYgZXZlbnQpCkBAIC0yODg1LDcgKzI4ODUsNyBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlVW5wcmV2ZW50YWJsZVRvdWNoRXZlbnQoY29uc3QgTmF0
aXZlV2ViVG91Y2hFdmVudCYgZXZlbgogICAgIGlmICh0b3VjaEV2ZW50c1RyYWNraW5nVHlwZSA9
PSBUcmFja2luZ1R5cGU6Ok5vdFRyYWNraW5nKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6OkV2ZW50RGlzcGF0Y2hlcjo6VG91Y2hFdmVudChtX3dlYlBh
Z2VJRCwgZXZlbnQsIFdURjo6bnVsbG9wdCksIDApOworICAgIHNlbmQoTWVzc2FnZXM6OkV2ZW50
RGlzcGF0Y2hlcjo6VG91Y2hFdmVudChtX3dlYlBhZ2VJRCwgZXZlbnQsIFdURjo6bnVsbG9wdCks
IDApOwogCiAgICAgaWYgKGV2ZW50LmFsbFRvdWNoUG9pbnRzQXJlUmVsZWFzZWQoKSkgewogICAg
ICAgICBtX3RvdWNoQW5kUG9pbnRlckV2ZW50VHJhY2tpbmcucmVzZXQoKTsKQEAgLTI5MTAsNyAr
MjkxMCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IE5hdGl2
ZVdlYlRvdWNoRXZlbnQmIGV2ZW50KQogICAgIGlmICghbV9pc1BhZ2VTdXNwZW5kZWQpIHsKICAg
ICAgICAgbV90b3VjaEV2ZW50UXVldWUuYXBwZW5kKGV2ZW50KTsKICAgICAgICAgbV9wcm9jZXNz
LT5yZXNwb25zaXZlbmVzc1RpbWVyKCkuc3RhcnQoKTsKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpUb3VjaEV2ZW50KGV2ZW50KSwgbV93ZWJQYWdlSUQpOworICAg
ICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpUb3VjaEV2ZW50KGV2ZW50KSk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgaWYgKG1fdG91Y2hFdmVudFF1ZXVlLmlzRW1wdHkoKSkgewogICAgICAg
ICAgICAgYm9vbCBpc0V2ZW50SGFuZGxlZCA9IGZhbHNlOwpAQCAtMjkzMywxMiArMjkzMywxMiBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJUb3Vj
aEV2ZW50JiBldmVudCkKICNpZiBFTkFCTEUoUE9JTlRFUl9FVkVOVFMpCiB2b2lkIFdlYlBhZ2VQ
cm94eTo6Y2FuY2VsUG9pbnRlcihXZWJDb3JlOjpQb2ludGVySUQgcG9pbnRlcklkLCBjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYgZG9jdW1lbnRQb2ludCkKIHsKLSAgICBtX3Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OkNhbmNlbFBvaW50ZXIocG9pbnRlcklkLCBkb2N1bWVudFBvaW50
KSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNhbmNlbFBvaW50
ZXIocG9pbnRlcklkLCBkb2N1bWVudFBvaW50KSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5Ojp0
b3VjaFdpdGhJZGVudGlmaWVyV2FzUmVtb3ZlZChXZWJDb3JlOjpQb2ludGVySUQgcG9pbnRlcklk
KQogewotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6VG91Y2hXaXRoSWRl
bnRpZmllcldhc1JlbW92ZWQocG9pbnRlcklkKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OlRvdWNoV2l0aElkZW50aWZpZXJXYXNSZW1vdmVkKHBvaW50ZXJJZCkp
OwogfQogI2VuZGlmCiAKQEAgLTI5NDcsNyArMjk0Nyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpz
Y3JvbGxCeShTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFu
dWxhCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNjcm9sbEJ5KGRpcmVjdGlvbiwg
Z3JhbnVsYXJpdHkpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
U2Nyb2xsQnkoZGlyZWN0aW9uLCBncmFudWxhcml0eSkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94
eTo6Y2VudGVyU2VsZWN0aW9uSW5WaXNpYmxlQXJlYSgpCkBAIC0yOTU1LDcgKzI5NTUsNyBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6Y2VudGVyU2VsZWN0aW9uSW5WaXNpYmxlQXJlYSgpCiAgICAgaWYg
KCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNlbnRlclNlbGVjdGlvbkluVmlzaWJsZUFyZWEoKSwg
bV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNlbnRlclNlbGVjdGlv
bkluVmlzaWJsZUFyZWEoKSk7CiB9CiAKIGNsYXNzIFdlYlBhZ2VQcm94eTo6UG9saWN5RGVjaXNp
b25TZW5kZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxQb2xpY3lEZWNpc2lvblNlbmRlcj4gewpAQCAt
MzEyMSw3ICszMTIxLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNvbW1pdFByb3Zpc2lvbmFsUGFn
ZShGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgdWludDY0X3QgbmF2aWcKIAogICAgIC8vIFRoZXJl
IGlzIG5vIHdheSB3ZSdsbCBiZSBhYmxlIHRvIHJldHVybiB0byB0aGUgcGFnZSBpbiB0aGUgcHJl
dmlvdXMgcGFnZSBzbyBjbG9zZSBpdC4KICAgICBpZiAoIWRpZFN1c3BlbmRQcmV2aW91c1BhZ2Up
Ci0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q2xvc2UoKSwgbV93
ZWJQYWdlSUQpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDbG9zZSgpKTsKIAog
ICAgIGNvbnN0IGF1dG8gb2xkV2ViUGFnZUlEID0gbV93ZWJQYWdlSUQ7CiAgICAgc3dhcFRvV2Vi
UHJvY2VzcyhtX3Byb3Zpc2lvbmFsUGFnZS0+cHJvY2VzcygpLCBtX3Byb3Zpc2lvbmFsUGFnZS0+
d2ViUGFnZUlEKCksIG1fcHJvdmlzaW9uYWxQYWdlLT50YWtlRHJhd2luZ0FyZWEoKSwgbV9wcm92
aXNpb25hbFBhZ2UtPm1haW5GcmFtZSgpKTsKQEAgLTMyMjIsNyArMzIyMiw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpzZXRVc2VyQWdlbnQoU3RyaW5nJiYgdXNlckFnZW50KQogCiAgICAgaWYgKCFo
YXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9wcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRVc2VyQWdlbnQobV91c2VyQWdlbnQpLCBtX3dlYlBhZ2VJ
RCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0VXNlckFnZW50KG1fdXNlckFnZW50
KSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRBcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdl
bnQoY29uc3QgU3RyaW5nJiBhcHBsaWNhdGlvbk5hbWUpCkBAIC0zMjU5LDcgKzMyNTksNyBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKQog
CiAgICAgbV9pc1BhZ2VTdXNwZW5kZWQgPSBmYWxzZTsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6UmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKSwg
bV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJlc3VtZUFjdGl2ZURP
TU9iamVjdHNBbmRBbmltYXRpb25zKCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c3VzcGVu
ZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCkKQEAgLTMyNjksNyArMzI2OSw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKQog
CiAgICAgbV9pc1BhZ2VTdXNwZW5kZWQgPSB0cnVlOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpTdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKSwg
bV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlN1c3BlbmRBY3RpdmVE
T01PYmplY3RzQW5kQW5pbWF0aW9ucygpKTsKIH0KIAogYm9vbCBXZWJQYWdlUHJveHk6OnN1cHBv
cnRzVGV4dEVuY29kaW5nKCkgY29uc3QKQEAgLTMyODYsNyArMzI4Niw3IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpzZXRDdXN0b21UZXh0RW5jb2RpbmdOYW1lKGNvbnN0IFN0cmluZyYgZW5jb2RpbmdO
YW1lKQogCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47Ci0g
ICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRDdXN0b21UZXh0RW5jb2Rp
bmdOYW1lKGVuY29kaW5nTmFtZSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpTZXRDdXN0b21UZXh0RW5jb2RpbmdOYW1lKGVuY29kaW5nTmFtZSkpOwogfQogCiBT
ZXNzaW9uU3RhdGUgV2ViUGFnZVByb3h5OjpzZXNzaW9uU3RhdGUoV1RGOjpGdW5jdGlvbjxib29s
IChXZWJCYWNrRm9yd2FyZExpc3RJdGVtJik+JiYgZmlsdGVyKSBjb25zdApAQCAtMzMyNCw3ICsz
MzI0LDcgQEAgUmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4gV2ViUGFnZVByb3h5OjpyZXN0b3JlRnJv
bVNlc3Npb25TdGF0ZShTZXNzaW9uU3RhdGUgc2Vzc2kKICAgICAgICAgbGF1bmNoSW5pdGlhbFBy
b2Nlc3NJZk5lY2Vzc2FyeSgpOwogCiAgICAgICAgIG1fYmFja0ZvcndhcmRMaXN0LT5yZXN0b3Jl
RnJvbVN0YXRlKFdURk1vdmUoc2Vzc2lvblN0YXRlLmJhY2tGb3J3YXJkTGlzdFN0YXRlKSk7Ci0g
ICAgICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpSZXN0b3JlU2Vzc2lvbiht
X2JhY2tGb3J3YXJkTGlzdC0+aXRlbVN0YXRlcygpKSwgbV93ZWJQYWdlSUQpOworICAgICAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpSZXN0b3JlU2Vzc2lvbihtX2JhY2tGb3J3YXJkTGlzdC0+
aXRlbVN0YXRlcygpKSk7CiAKICAgICAgICAgYXV0byB0cmFuc2FjdGlvbiA9IG1fcGFnZUxvYWRT
dGF0ZS50cmFuc2FjdGlvbigpOwogICAgICAgICBtX3BhZ2VMb2FkU3RhdGUuc2V0Q2FuR29CYWNr
KHRyYW5zYWN0aW9uLCBtX2JhY2tGb3J3YXJkTGlzdC0+YmFja0l0ZW0oKSk7CkBAIC0zMzcyLDcg
KzMzNzIsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0VGV4dFpvb21GYWN0b3IoZG91YmxlIHpv
b21GYWN0b3IpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFRleHRab29tRmFj
dG9yKG1fdGV4dFpvb21GYWN0b3IpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6U2V0VGV4dFpvb21GYWN0b3IobV90ZXh0Wm9vbUZhY3RvcikpOwogfQogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6c2V0UGFnZVpvb21GYWN0b3IoZG91YmxlIHpvb21GYWN0b3IpCkBAIC0z
Mzg3LDcgKzMzODcsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0UGFnZVpvb21GYWN0b3IoZG91
YmxlIHpvb21GYWN0b3IpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFBhZ2Va
b29tRmFjdG9yKG1fcGFnZVpvb21GYWN0b3IpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6U2V0UGFnZVpvb21GYWN0b3IobV9wYWdlWm9vbUZhY3RvcikpOwogfQog
CiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyhkb3VibGUgcGFn
ZVpvb21GYWN0b3IsIGRvdWJsZSB0ZXh0Wm9vbUZhY3RvcikKQEAgLTM0MDMsNyArMzQwMyw3IEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKGRvdWJsZSBwYWdl
Wm9vbUZhY3RvciwgZG91YmxlIHRleHRaCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OlNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMobV9wYWdlWm9vbUZhY3RvciwgbV90ZXh0Wm9vbUZh
Y3RvciksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRQYWdl
QW5kVGV4dFpvb21GYWN0b3JzKG1fcGFnZVpvb21GYWN0b3IsIG1fdGV4dFpvb21GYWN0b3IpKTsK
IH0KIAogZG91YmxlIFdlYlBhZ2VQcm94eTo6cGFnZVpvb21GYWN0b3IoKSBjb25zdApAQCAtMzQz
Myw3ICszNDMzLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNjYWxlUGFnZShkb3VibGUgc2NhbGUs
IGNvbnN0IEludFBvaW50JiBvcmlnaW4pCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OlNjYWxlUGFnZShzY2FsZSwgb3JpZ2luKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OlNjYWxlUGFnZShzY2FsZSwgb3JpZ2luKSk7CiB9CiAKIHZvaWQgV2ViUGFn
ZVByb3h5OjpzY2FsZVBhZ2VJblZpZXdDb29yZGluYXRlcyhkb3VibGUgc2NhbGUsIGNvbnN0IElu
dFBvaW50JiBjZW50ZXJJblZpZXdDb29yZGluYXRlcykKQEAgLTM0NDUsNyArMzQ0NSw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpzY2FsZVBhZ2VJblZpZXdDb29yZGluYXRlcyhkb3VibGUgc2NhbGUs
IGNvbnN0IEludFBvaW50JiBjZW50CiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNj
YWxlUGFnZUluVmlld0Nvb3JkaW5hdGVzKHNjYWxlLCBjZW50ZXJJblZpZXdDb29yZGluYXRlcyks
IG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTY2FsZVBhZ2VJblZp
ZXdDb29yZGluYXRlcyhzY2FsZSwgY2VudGVySW5WaWV3Q29vcmRpbmF0ZXMpKTsKIH0KIAogdm9p
ZCBXZWJQYWdlUHJveHk6OnNjYWxlVmlldyhkb3VibGUgc2NhbGUpCkBAIC0zNDU3LDcgKzM0NTcs
NyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2NhbGVWaWV3KGRvdWJsZSBzY2FsZSkKICAgICBpZiAo
IWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2NhbGVWaWV3KHNjYWxlKSwgbV93ZWJQYWdlSUQpOwor
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNjYWxlVmlldyhzY2FsZSkpOwogfQogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6c2V0SW50cmluc2ljRGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVG
YWN0b3IpCkBAIC0zNDc2LDcgKzM0NzYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6d2luZG93U2Ny
ZWVuRGlkQ2hhbmdlKFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCkKICAgICBpZiAoIWhhc1J1
bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6V2luZG93U2NyZWVuRGlkQ2hhbmdlKGRpc3BsYXlJRCksIG1fd2Vi
UGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpXaW5kb3dTY3JlZW5EaWRDaGFu
Z2UoZGlzcGxheUlEKSk7CiB9CiAKIGZsb2F0IFdlYlBhZ2VQcm94eTo6ZGV2aWNlU2NhbGVGYWN0
b3IoKSBjb25zdApAQCAtMzUxNSw3ICszNTE1LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmFjY2Vz
c2liaWxpdHlTZXR0aW5nc0RpZENoYW5nZSgpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2Vzcygp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OkFjY2Vzc2liaWxpdHlTZXR0aW5nc0RpZENoYW5nZSgpLCBtX3dlYlBhZ2VJRCk7CisgICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6QWNjZXNzaWJpbGl0eVNldHRpbmdzRGlkQ2hhbmdlKCkp
OwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0VXNlRml4ZWRMYXlvdXQoYm9vbCBmaXhlZCkK
QEAgLTM1MzIsNyArMzUzMiw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRVc2VGaXhlZExheW91
dChib29sIGZpeGVkKQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRVc2VGaXhl
ZExheW91dChmaXhlZCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpTZXRVc2VGaXhlZExheW91dChmaXhlZCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0
Rml4ZWRMYXlvdXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpCkBAIC0zNTQ1LDcgKzM1NDUsNyBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Rml4ZWRMYXlvdXRTaXplKGNvbnN0IEludFNpemUmIHNp
emUpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEZpeGVkTGF5b3V0U2l6ZShz
aXplKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEZpeGVk
TGF5b3V0U2l6ZShzaXplKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRBbHdheXNTaG93
c0hvcml6b250YWxTY3JvbGxlcihib29sIGFsd2F5c1Nob3dzSG9yaXpvbnRhbFNjcm9sbGVyKQpA
QCAtMzU1OCw3ICszNTU4LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldEFsd2F5c1Nob3dzSG9y
aXpvbnRhbFNjcm9sbGVyKGJvb2wgYWx3YXlzU2hvd3NIb3Jpem9udGFsU2MKICAgICBpZiAoIWhh
c1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0QWx3YXlzU2hvd3NIb3Jpem9udGFsU2Nyb2xsZXIoYWx3
YXlzU2hvd3NIb3Jpem9udGFsU2Nyb2xsZXIpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6U2V0QWx3YXlzU2hvd3NIb3Jpem9udGFsU2Nyb2xsZXIoYWx3YXlzU2hv
d3NIb3Jpem9udGFsU2Nyb2xsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldEFsd2F5
c1Nob3dzVmVydGljYWxTY3JvbGxlcihib29sIGFsd2F5c1Nob3dzVmVydGljYWxTY3JvbGxlcikK
QEAgLTM1NzEsNyArMzU3MSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRBbHdheXNTaG93c1Zl
cnRpY2FsU2Nyb2xsZXIoYm9vbCBhbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsCiAgICAgaWYgKCFo
YXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEFsd2F5c1Nob3dzVmVydGljYWxTY3JvbGxlcihhbHdh
eXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6U2V0QWx3YXlzU2hvd3NWZXJ0aWNhbFNjcm9sbGVyKGFsd2F5c1Nob3dzVmVy
dGljYWxTY3JvbGxlcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6bGlzdGVuRm9yTGF5b3V0
TWlsZXN0b25lcyhPcHRpb25TZXQ8V2ViQ29yZTo6TGF5b3V0TWlsZXN0b25lPiBtaWxlc3RvbmVz
KQpAQCAtMzU4NCw3ICszNTg0LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6Omxpc3RlbkZvckxheW91
dE1pbGVzdG9uZXMoT3B0aW9uU2V0PFdlYkNvcmU6OkxheW91dE1pbGVzdG9uZT4KICAgICBpZiAo
IWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6TGlzdGVuRm9yTGF5b3V0TWlsZXN0b25lcyhtaWxlc3Rv
bmVzKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Okxpc3RlbkZv
ckxheW91dE1pbGVzdG9uZXMobWlsZXN0b25lcykpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6
c2V0U3VwcHJlc3NTY3JvbGxiYXJBbmltYXRpb25zKGJvb2wgc3VwcHJlc3NBbmltYXRpb25zKQpA
QCAtMzU5Nyw3ICszNTk3LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFN1cHByZXNzU2Nyb2xs
YmFyQW5pbWF0aW9ucyhib29sIHN1cHByZXNzQW5pbWF0aW9ucykKICAgICBpZiAoIWhhc1J1bm5p
bmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6U2V0U3VwcHJlc3NTY3JvbGxiYXJBbmltYXRpb25zKHN1cHByZXNzQW5p
bWF0aW9ucyksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRT
dXBwcmVzc1Njcm9sbGJhckFuaW1hdGlvbnMoc3VwcHJlc3NBbmltYXRpb25zKSk7CiB9CiAKIGJv
b2wgV2ViUGFnZVByb3h5OjpydWJiZXJCYW5kc0F0TGVmdCgpIGNvbnN0CkBAIC0zNjQ5LDcgKzM2
NDksNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0RW5hYmxlVmVydGljYWxSdWJiZXJCYW5kaW5n
KGJvb2wgZW5hYmxlVmVydGljYWxSdWJiZXJCYW5kaQogCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJv
Y2VzcygpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpTZXRFbmFibGVWZXJ0aWNhbFJ1YmJlckJhbmRpbmcoZW5hYmxlVmVydGljYWxSdWJi
ZXJCYW5kaW5nKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNl
dEVuYWJsZVZlcnRpY2FsUnViYmVyQmFuZGluZyhlbmFibGVWZXJ0aWNhbFJ1YmJlckJhbmRpbmcp
KTsKIH0KICAgICAKIGJvb2wgV2ViUGFnZVByb3h5Ojp2ZXJ0aWNhbFJ1YmJlckJhbmRpbmdJc0Vu
YWJsZWQoKSBjb25zdApAQCAtMzY2Niw3ICszNjY2LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNl
dEVuYWJsZUhvcml6b250YWxSdWJiZXJCYW5kaW5nKGJvb2wgZW5hYmxlSG9yaXpvbnRhbFJ1YmJl
ckIKIAogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0RW5hYmxlSG9yaXpvbnRhbFJ1
YmJlckJhbmRpbmcoZW5hYmxlSG9yaXpvbnRhbFJ1YmJlckJhbmRpbmcpLCBtX3dlYlBhZ2VJRCk7
CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0RW5hYmxlSG9yaXpvbnRhbFJ1YmJlckJh
bmRpbmcoZW5hYmxlSG9yaXpvbnRhbFJ1YmJlckJhbmRpbmcpKTsKIH0KICAgICAKIGJvb2wgV2Vi
UGFnZVByb3h5Ojpob3Jpem9udGFsUnViYmVyQmFuZGluZ0lzRW5hYmxlZCgpIGNvbnN0CkBAIC0z
NjgzLDcgKzM2ODMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QmFja2dyb3VuZEV4dGVuZHNC
ZXlvbmRQYWdlKGJvb2wgYmFja2dyb3VuZEV4dGVuZHNCZXlvbmRQYQogCiAgICAgaWYgKCFoYXNS
dW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpTZXRCYWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2UoYmFja2dyb3Vu
ZEV4dGVuZHNCZXlvbmRQYWdlKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OlNldEJhY2tncm91bmRFeHRlbmRzQmV5b25kUGFnZShiYWNrZ3JvdW5kRXh0ZW5kc0Jl
eW9uZFBhZ2UpKTsKIH0KIAogYm9vbCBXZWJQYWdlUHJveHk6OmJhY2tncm91bmRFeHRlbmRzQmV5
b25kUGFnZSgpIGNvbnN0CkBAIC0zNzAwLDcgKzM3MDAsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
c2V0UGFnaW5hdGlvbk1vZGUoV2ViQ29yZTo6UGFnaW5hdGlvbjo6TW9kZSBtb2RlKQogCiAgICAg
aWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9wcm9jZXNz
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRQYWdpbmF0aW9uTW9kZShtb2RlKSwgbV93ZWJQ
YWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFBhZ2luYXRpb25Nb2RlKG1v
ZGUpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldFBhZ2luYXRpb25CZWhhdmVzTGlrZUNv
bHVtbnMoYm9vbCBiZWhhdmVzTGlrZUNvbHVtbnMpCkBAIC0zNzEyLDcgKzM3MTIsNyBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6c2V0UGFnaW5hdGlvbkJlaGF2ZXNMaWtlQ29sdW1ucyhib29sIGJlaGF2
ZXNMaWtlQ29sdW1ucykKIAogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0UGFnaW5h
dGlvbkJlaGF2ZXNMaWtlQ29sdW1ucyhiZWhhdmVzTGlrZUNvbHVtbnMpLCBtX3dlYlBhZ2VJRCk7
CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0UGFnaW5hdGlvbkJlaGF2ZXNMaWtlQ29s
dW1ucyhiZWhhdmVzTGlrZUNvbHVtbnMpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldFBh
Z2VMZW5ndGgoZG91YmxlIHBhZ2VMZW5ndGgpCkBAIC0zNzI0LDcgKzM3MjQsNyBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6c2V0UGFnZUxlbmd0aChkb3VibGUgcGFnZUxlbmd0aCkKIAogICAgIGlmICgh
aGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fcHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0UGFnZUxlbmd0aChwYWdlTGVuZ3RoKSwgbV93ZWJQYWdl
SUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFBhZ2VMZW5ndGgocGFnZUxlbmd0
aCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0R2FwQmV0d2VlblBhZ2VzKGRvdWJsZSBn
YXApCkBAIC0zNzM2LDcgKzM3MzYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0R2FwQmV0d2Vl
blBhZ2VzKGRvdWJsZSBnYXApCiAKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEdh
cEJldHdlZW5QYWdlcyhnYXApLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6U2V0R2FwQmV0d2VlblBhZ2VzKGdhcCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6
c2V0UGFnaW5hdGlvbkxpbmVHcmlkRW5hYmxlZChib29sIGxpbmVHcmlkRW5hYmxlZCkKQEAgLTM3
NDgsNyArMzc0OCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRQYWdpbmF0aW9uTGluZUdyaWRF
bmFibGVkKGJvb2wgbGluZUdyaWRFbmFibGVkKQogICAgIAogICAgIGlmICghaGFzUnVubmluZ1By
b2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6U2V0UGFnaW5hdGlvbkxpbmVHcmlkRW5hYmxlZChsaW5lR3JpZEVuYWJsZWQpLCBt
X3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0UGFnaW5hdGlvbkxp
bmVHcmlkRW5hYmxlZChsaW5lR3JpZEVuYWJsZWQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
OnBhZ2VTY2FsZUZhY3RvckRpZENoYW5nZShkb3VibGUgc2NhbGVGYWN0b3IpCkBAIC0zNzczLDcg
KzM3NzMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZmluZFN0cmluZ01hdGNoZXMoY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIEZpbmRPcHRpb25zIG9wdGlvbnMsCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkZpbmRTdHJpbmdNYXRj
aGVzKHN0cmluZywgb3B0aW9ucywgbWF4TWF0Y2hDb3VudCksIG1fd2ViUGFnZUlEKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpGaW5kU3RyaW5nTWF0Y2hlcyhzdHJpbmcsIG9wdGlvbnMs
IG1heE1hdGNoQ291bnQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmZpbmRTdHJpbmcoY29u
c3QgU3RyaW5nJiBzdHJpbmcsIEZpbmRPcHRpb25zIG9wdGlvbnMsIHVuc2lnbmVkIG1heE1hdGNo
Q291bnQsIEZ1bmN0aW9uPHZvaWQgKGJvb2wsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxi
YWNrRnVuY3Rpb24pCkBAIC0zNzgyLDcgKzM3ODIsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Zmlu
ZFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgRmluZE9wdGlvbnMgb3B0aW9ucywgdW5zaWdu
ZQogICAgIGlmIChjYWxsYmFja0Z1bmN0aW9uKQogICAgICAgICBjYWxsYmFja0lEID0gbV9jYWxs
YmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhyb3R0bGVy
KCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6OmZpbmRTdHJpbmciX3MpKTsKIAot
ICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RmluZFN0cmluZyhzdHJpbmcs
IG9wdGlvbnMsIG1heE1hdGNoQ291bnQsIGNhbGxiYWNrSUQpLCBtX3dlYlBhZ2VJRCk7CisgICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RmluZFN0cmluZyhzdHJpbmcsIG9wdGlvbnMsIG1heE1h
dGNoQ291bnQsIGNhbGxiYWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmZpbmRTdHJp
bmdDYWxsYmFjayhib29sIGZvdW5kLCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCkBAIC0zNzk2LDIy
ICszNzk2LDIyIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpmaW5kU3RyaW5nQ2FsbGJhY2soYm9vbCBm
b3VuZCwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0SW1h
Z2VGb3JGaW5kTWF0Y2goaW50MzJfdCBtYXRjaEluZGV4KQogewotICAgIG1fcHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6R2V0SW1hZ2VGb3JGaW5kTWF0Y2gobWF0Y2hJbmRleCksIG1f
d2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRJbWFnZUZvckZpbmRN
YXRjaChtYXRjaEluZGV4KSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZWxlY3RGaW5kTWF0
Y2goaW50MzJfdCBtYXRjaEluZGV4KQogewotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6U2VsZWN0RmluZE1hdGNoKG1hdGNoSW5kZXgpLCBtX3dlYlBhZ2VJRCk7CisgICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2VsZWN0RmluZE1hdGNoKG1hdGNoSW5kZXgpKTsKIH0K
IAogdm9pZCBXZWJQYWdlUHJveHk6OmluZGljYXRlRmluZE1hdGNoKGludDMyX3QgbWF0Y2hJbmRl
eCkKIHsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkluZGljYXRlRmlu
ZE1hdGNoKG1hdGNoSW5kZXgpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6SW5kaWNhdGVGaW5kTWF0Y2gobWF0Y2hJbmRleCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQ
cm94eTo6aGlkZUZpbmRVSSgpCiB7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpIaWRlRmluZFVJKCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpIaWRlRmluZFVJKCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Y291bnRTdHJpbmdN
YXRjaGVzKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBGaW5kT3B0aW9ucyBvcHRpb25zLCB1bnNpZ25l
ZCBtYXhNYXRjaENvdW50KQpAQCAtMzgxOSw3ICszODE5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OmNvdW50U3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmIHN0cmluZywgRmluZE9wdGlvbnMgb3B0
aW9ucywKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q291bnRTdHJpbmdNYXRjaGVz
KHN0cmluZywgb3B0aW9ucywgbWF4TWF0Y2hDb3VudCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpDb3VudFN0cmluZ01hdGNoZXMoc3RyaW5nLCBvcHRpb25zLCBt
YXhNYXRjaENvdW50KSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpyZXBsYWNlTWF0Y2hlcyhW
ZWN0b3I8dWludDMyX3Q+JiYgbWF0Y2hJbmRpY2VzLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50
VGV4dCwgYm9vbCBzZWxlY3Rpb25Pbmx5LCBGdW5jdGlvbjx2b2lkKHVpbnQ2NF90LCBDYWxsYmFj
a0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFjaykKQEAgLTM4MzAsNyArMzgzMCw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpyZXBsYWNlTWF0Y2hlcyhWZWN0b3I8dWludDMyX3Q+JiYgbWF0Y2hJbmRpY2Vz
LCBjb25zdCBTdHJpbmcmCiAgICAgfQogCiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFj
a3MucHV0KFdURk1vdmUoY2FsbGJhY2spLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91
bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5OjpyZXBsYWNlTWF0Y2hlcyJfcykpOwotICAgIG1fcHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVwbGFjZU1hdGNoZXMoV1RGTW92ZShtYXRj
aEluZGljZXMpLCByZXBsYWNlbWVudFRleHQsIHNlbGVjdGlvbk9ubHksIGNhbGxiYWNrSUQpLCBt
X3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVwbGFjZU1hdGNoZXMo
V1RGTW92ZShtYXRjaEluZGljZXMpLCByZXBsYWNlbWVudFRleHQsIHNlbGVjdGlvbk9ubHksIGNh
bGxiYWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmxhdW5jaEluaXRpYWxQcm9jZXNz
SWZOZWNlc3NhcnkoKQpAQCAtMzg1NSwxNCArMzg1NSwxNCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
cnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lU2NyaXB0V29ybGQoY29uc3QgU3RyaW5nJiBzY3JpcHQs
IGJvbwogICAgIH0KIAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZN
b3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91bmRB
Y3Rpdml0eSgiV2ViUGFnZVByb3h5OjpydW5KYXZhU2NyaXB0SW5NYWluRnJhbWVTY3JpcHRXb3Js
ZCJfcykpOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UnVuSmF2YVNj
cmlwdEluTWFpbkZyYW1lU2NyaXB0V29ybGQoc2NyaXB0LCBmb3JjZVVzZXJHZXN0dXJlLCB3b3Js
ZE5hbWUsIGNhbGxiYWNrSUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6UnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lU2NyaXB0V29ybGQoc2NyaXB0LCBmb3JjZVVz
ZXJHZXN0dXJlLCB3b3JsZE5hbWUsIGNhbGxiYWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJv
eHk6OnJ1bkphdmFTY3JpcHRJbkZyYW1lKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBjb25zdCBT
dHJpbmcmIHNjcmlwdCwgYm9vbCBmb3JjZVVzZXJHZXN0dXJlLCBXVEY6OkZ1bmN0aW9uPHZvaWQo
QVBJOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUqLCBib29sIGhhZEV4Y2VwdGlvbiwgY29uc3QgRXhj
ZXB0aW9uRGV0YWlscyYsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24p
CiB7CiAgICAgQVNTRVJUKG1haW5GcmFtZSgpLT5mcmFtZUlEKCkgIT0gZnJhbWVJRCk7CiAgICAg
YXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2tGdW5jdGlv
biksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJv
eHk6OnJ1bkphdmFTY3JpcHRJbkZyYW1lIl9zKSk7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpSdW5KYXZhU2NyaXB0SW5GcmFtZShmcmFtZUlELCBzY3JpcHQsIGZvcmNl
VXNlckdlc3R1cmUsIGNhbGxiYWNrSUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6UnVuSmF2YVNjcmlwdEluRnJhbWUoZnJhbWVJRCwgc2NyaXB0LCBmb3JjZVVz
ZXJHZXN0dXJlLCBjYWxsYmFja0lEKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpnZXRSZW5k
ZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbihXVEY6OkZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0
cmluZyYsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCkBAIC0zODcz
LDcgKzM4NzMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0UmVuZGVyVHJlZUV4dGVybmFsUmVw
cmVzZW50YXRpb24oV1RGOjpGdW5jdGlvbjx2b2lkIChjb25zdAogICAgIH0KICAgICAKICAgICBh
dXRvIGNhbGxiYWNrSUQgPSBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9u
KSwgbV9wcm9jZXNzLT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBhZ2VQcm94
eTo6Z2V0UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb24iX3MpKTsKLSAgICBtX3Byb2Nl
c3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdldFJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKGNhbGxiYWNrSUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6R2V0UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb24oY2FsbGJhY2tJRCkpOwog
fQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0U291cmNlRm9yRnJhbWUoV2ViRnJhbWVQcm94eSog
ZnJhbWUsIFdURjo6RnVuY3Rpb248dm9pZCAoY29uc3QgU3RyaW5nJiwgQ2FsbGJhY2tCYXNlOjpF
cnJvcik+JiYgY2FsbGJhY2tGdW5jdGlvbikKQEAgLTM4ODUsNyArMzg4NSw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpnZXRTb3VyY2VGb3JGcmFtZShXZWJGcmFtZVByb3h5KiBmcmFtZSwgV1RGOjpG
dW5jdGlvbjx2b2lkIChjCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFja3Mu
cHV0KFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFj
a2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6OmdldFNvdXJjZUZvckZyYW1lIl9zKSk7CiAg
ICAgbV9sb2FkRGVwZW5kZW50U3RyaW5nQ2FsbGJhY2tJRHMuYWRkKGNhbGxiYWNrSUQpOwotICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R2V0U291cmNlRm9yRnJhbWUoZnJh
bWUtPmZyYW1lSUQoKSwgY2FsbGJhY2tJRCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpHZXRTb3VyY2VGb3JGcmFtZShmcmFtZS0+ZnJhbWVJRCgpLCBjYWxsYmFj
a0lEKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpnZXRDb250ZW50c0FzU3RyaW5nKFdURjo6
RnVuY3Rpb248dm9pZCAoY29uc3QgU3RyaW5nJiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2Fs
bGJhY2tGdW5jdGlvbikKQEAgLTM4OTcsNyArMzg5Nyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpn
ZXRDb250ZW50c0FzU3RyaW5nKFdURjo6RnVuY3Rpb248dm9pZCAoY29uc3QgU3RyaW5nJiwgQ2Fs
bGJhCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFja3MucHV0KFdURk1vdmUo
Y2FsbGJhY2tGdW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2
aXR5KCJXZWJQYWdlUHJveHk6OmdldENvbnRlbnRzQXNTdHJpbmciX3MpKTsKICAgICBtX2xvYWRE
ZXBlbmRlbnRTdHJpbmdDYWxsYmFja0lEcy5hZGQoY2FsbGJhY2tJRCk7Ci0gICAgbV9wcm9jZXNz
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRDb250ZW50c0FzU3RyaW5nKGNhbGxiYWNrSUQp
LCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R2V0Q29udGVudHNB
c1N0cmluZyhjYWxsYmFja0lEKSk7CiB9CiAKICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTM5MDgs
NyArMzkwOCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpnZXRDb250ZW50c0FzQXR0cmlidXRlZFN0
cmluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEF0CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBtX3Byb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpXZWJQYWdlOjpHZXRDb250ZW50c0FzQXR0cmlidXRlZFN0cmluZygpLCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6V2ViUGFnZTo6R2V0Q29udGVudHNBc0F0dHJpYnV0ZWRTdHJpbmcoKSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogI2VuZGlmCiAKQEAgLTM5MjEsNyArMzkyMSw3
IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpnZXRCeXRlY29kZVByb2ZpbGUoV1RGOjpGdW5jdGlvbjx2
b2lkIChjb25zdCBTdHJpbmcmLCBDYWxsYmFjCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0lEID0g
bV9jYWxsYmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhy
b3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6OmdldEJ5dGVjb2RlUHJv
ZmlsZSJfcykpOwogICAgIG1fbG9hZERlcGVuZGVudFN0cmluZ0NhbGxiYWNrSURzLmFkZChjYWxs
YmFja0lEKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdldEJ5dGVj
b2RlUHJvZmlsZShjYWxsYmFja0lEKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OkdldEJ5dGVjb2RlUHJvZmlsZShjYWxsYmFja0lEKSk7CiB9CiAKIHZvaWQgV2Vi
UGFnZVByb3h5OjpnZXRTYW1wbGluZ1Byb2ZpbGVyT3V0cHV0KFdURjo6RnVuY3Rpb248dm9pZCAo
Y29uc3QgU3RyaW5nJiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2tGdW5jdGlvbikK
QEAgLTM5MzMsNyArMzkzMyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpnZXRTYW1wbGluZ1Byb2Zp
bGVyT3V0cHV0KFdURjo6RnVuY3Rpb248dm9pZCAoY29uc3QgU3RyaW5nJiwKICAgICAKICAgICBh
dXRvIGNhbGxiYWNrSUQgPSBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9u
KSwgbV9wcm9jZXNzLT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBhZ2VQcm94
eTo6Z2V0U2FtcGxpbmdQcm9maWxlck91dHB1dCJfcykpOwogICAgIG1fbG9hZERlcGVuZGVudFN0
cmluZ0NhbGxiYWNrSURzLmFkZChjYWxsYmFja0lEKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OkdldFNhbXBsaW5nUHJvZmlsZXJPdXRwdXQoY2FsbGJhY2tJRCksIG1f
d2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRTYW1wbGluZ1Byb2Zp
bGVyT3V0cHV0KGNhbGxiYWNrSUQpKTsKIH0KIAogI2lmIEVOQUJMRShNSFRNTCkKQEAgLTM5NDUs
NyArMzk0NSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpnZXRDb250ZW50c0FzTUhUTUxEYXRhKEZ1
bmN0aW9uPHZvaWQgKEFQSTo6RGF0YSosIENhbGxiYWNrQmFzCiAgICAgfQogCiAgICAgYXV0byBj
YWxsYmFja0lEID0gbV9jYWxsYmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIG1f
cHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6Omdl
dENvbnRlbnRzQXNNSFRNTERhdGEiX3MpKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OkdldENvbnRlbnRzQXNNSFRNTERhdGEoY2FsbGJhY2tJRCksIG1fd2ViUGFnZUlE
KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRDb250ZW50c0FzTUhUTUxEYXRhKGNh
bGxiYWNrSUQpKTsKIH0KICNlbmRpZgogCkBAIC0zOTU3LDcgKzM5NTcsNyBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6Z2V0U2VsZWN0aW9uT3JDb250ZW50c0FzU3RyaW5nKFdURjo6RnVuY3Rpb248dm9p
ZCAoY29uc3QgU3RyaQogICAgIH0KICAgICAKICAgICBhdXRvIGNhbGxiYWNrSUQgPSBtX2NhbGxi
YWNrcy5wdXQoV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgbV9wcm9jZXNzLT50aHJvdHRsZXIo
KS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBhZ2VQcm94eTo6Z2V0U2VsZWN0aW9uT3JDb250ZW50
c0FzU3RyaW5nIl9zKSk7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpH
ZXRTZWxlY3Rpb25PckNvbnRlbnRzQXNTdHJpbmcoY2FsbGJhY2tJRCksIG1fd2ViUGFnZUlEKTsK
KyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRTZWxlY3Rpb25PckNvbnRlbnRzQXNTdHJp
bmcoY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0U2VsZWN0aW9uQXNX
ZWJBcmNoaXZlRGF0YShGdW5jdGlvbjx2b2lkIChBUEk6OkRhdGEqLCBDYWxsYmFja0Jhc2U6OkVy
cm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQpAQCAtMzk2OCw3ICszOTY4LDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OmdldFNlbGVjdGlvbkFzV2ViQXJjaGl2ZURhdGEoRnVuY3Rpb248dm9pZCAoQVBJ
OjpEYXRhKiwgQ2FsbGIKICAgICB9CiAgICAgCiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxs
YmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhyb3R0bGVy
KCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6OmdldFNlbGVjdGlvbkFzV2ViQXJj
aGl2ZURhdGEiX3MpKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Okdl
dFNlbGVjdGlvbkFzV2ViQXJjaGl2ZURhdGEoY2FsbGJhY2tJRCksIG1fd2ViUGFnZUlEKTsKKyAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRTZWxlY3Rpb25Bc1dlYkFyY2hpdmVEYXRhKGNh
bGxiYWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmdldE1haW5SZXNvdXJjZURhdGFP
ZkZyYW1lKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBGdW5jdGlvbjx2b2lkIChBUEk6OkRhdGEqLCBD
YWxsYmFja0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQpAQCAtMzk3OSw3ICszOTc5
LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmdldE1haW5SZXNvdXJjZURhdGFPZkZyYW1lKFdlYkZy
YW1lUHJveHkqIGZyYW1lLCBGdW5jdGlvbjx2b2kKICAgICB9CiAgICAgCiAgICAgYXV0byBjYWxs
YmFja0lEID0gbV9jYWxsYmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIG1fcHJv
Y2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6OmdldE1h
aW5SZXNvdXJjZURhdGFPZkZyYW1lIl9zKSk7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpHZXRNYWluUmVzb3VyY2VEYXRhT2ZGcmFtZShmcmFtZS0+ZnJhbWVJRCgpLCBj
YWxsYmFja0lEKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Okdl
dE1haW5SZXNvdXJjZURhdGFPZkZyYW1lKGZyYW1lLT5mcmFtZUlEKCksIGNhbGxiYWNrSUQpKTsK
IH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmdldFJlc291cmNlRGF0YUZyb21GcmFtZShXZWJGcmFt
ZVByb3h5KiBmcmFtZSwgQVBJOjpVUkwqIHJlc291cmNlVVJMLCBGdW5jdGlvbjx2b2lkIChBUEk6
OkRhdGEqLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQpAQCAtMzk5
MCw3ICszOTkwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmdldFJlc291cmNlRGF0YUZyb21GcmFt
ZShXZWJGcmFtZVByb3h5KiBmcmFtZSwgQVBJOjpVUkwqIHJlc28KICAgICB9CiAgICAgCiAgICAg
YXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2tGdW5jdGlv
biksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJv
eHk6OmdldFJlc291cmNlRGF0YUZyb21GcmFtZSJfcykpOwotICAgIG1fcHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6R2V0UmVzb3VyY2VEYXRhRnJvbUZyYW1lKGZyYW1lLT5mcmFtZUlE
KCksIHJlc291cmNlVVJMLT5zdHJpbmcoKSwgY2FsbGJhY2tJRCksIG1fd2ViUGFnZUlEKTsKKyAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRSZXNvdXJjZURhdGFGcm9tRnJhbWUoZnJhbWUt
PmZyYW1lSUQoKSwgcmVzb3VyY2VVUkwtPnN0cmluZygpLCBjYWxsYmFja0lEKSk7CiB9CiAKIHZv
aWQgV2ViUGFnZVByb3h5OjpnZXRXZWJBcmNoaXZlT2ZGcmFtZShXZWJGcmFtZVByb3h5KiBmcmFt
ZSwgRnVuY3Rpb248dm9pZCAoQVBJOjpEYXRhKiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2Fs
bGJhY2tGdW5jdGlvbikKQEAgLTQwMDEsNyArNDAwMSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpn
ZXRXZWJBcmNoaXZlT2ZGcmFtZShXZWJGcmFtZVByb3h5KiBmcmFtZSwgRnVuY3Rpb248dm9pZCAo
QVBJCiAgICAgfQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChX
VEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91
bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5OjpnZXRXZWJBcmNoaXZlT2ZGcmFtZSJfcykpOwotICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R2V0V2ViQXJjaGl2ZU9mRnJhbWUo
ZnJhbWUtPmZyYW1lSUQoKSwgY2FsbGJhY2tJRCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpHZXRXZWJBcmNoaXZlT2ZGcmFtZShmcmFtZS0+ZnJhbWVJRCgpLCBj
YWxsYmFja0lEKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5Ojpmb3JjZVJlcGFpbnQoUmVmUHRy
PFZvaWRDYWxsYmFjaz4mJiBjYWxsYmFjaykKQEAgLTQwMzUsNyArNDAzNSw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5Ojpmb3JjZVJlcGFpbnQoUmVmUHRyPFZvaWRDYWxsYmFjaz4mJiBjYWxsYmFjaykK
IAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGRpZEZvcmNl
UmVwYWludENhbGxiYWNrKSwgbV9wcm9jZXNzLT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZp
dHkoIldlYlBhZ2VQcm94eTo6Zm9yY2VSZXBhaW50Il9zKSk7CiAgICAgbV9kcmF3aW5nQXJlYS0+
d2FpdEZvckJhY2tpbmdTdG9yZVVwZGF0ZU9uTmV4dFBhaW50KCk7Ci0gICAgbV9wcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpGb3JjZVJlcGFpbnQoY2FsbGJhY2tJRCksIG1fd2ViUGFn
ZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpGb3JjZVJlcGFpbnQoY2FsbGJhY2tJ
RCkpOwogfQogCiBzdGF0aWMgT3B0aW9uU2V0PElQQzo6U2VuZE9wdGlvbj4gcHJpbnRpbmdTZW5k
T3B0aW9ucyhib29sIGlzUGVyZm9ybWluZ0RPTVByaW50T3BlcmF0aW9uKQpAQCAtNDA2MSw3ICs0
MDYxLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnByZWZlcmVuY2VzRGlkQ2hhbmdlKCkKICAgICAv
LyBldmVuIGlmIG5vdGhpbmcgY2hhbmdlZCBpbiBVSSBwcm9jZXNzLCBzbyB0aGF0IG92ZXJyaWRl
cyBnZXQgcmVtb3ZlZC4KIAogICAgIC8vIFByZWZlcmVuY2VzIG5lZWQgdG8gYmUgdXBkYXRlZCBk
dXJpbmcgc3luY2hyb25vdXMgcHJpbnRpbmcgdG8gbWFrZSAicHJpbnQgYmFja2dyb3VuZHMiIHBy
ZWZlcmVuY2Ugd29yayB3aGVuIHRvZ2dsZWQgZnJvbSBhIHByaW50IGRpYWxvZyBjaGVja2JveC4K
LSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlByZWZlcmVuY2VzRGlkQ2hh
bmdlKHByZWZlcmVuY2VzU3RvcmUoKSksIG1fd2ViUGFnZUlELCBwcmludGluZ1NlbmRPcHRpb25z
KG1faXNQZXJmb3JtaW5nRE9NUHJpbnRPcGVyYXRpb24pKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpQcmVmZXJlbmNlc0RpZENoYW5nZShwcmVmZXJlbmNlc1N0b3JlKCkpLCBwcmludGlu
Z1NlbmRPcHRpb25zKG1faXNQZXJmb3JtaW5nRE9NUHJpbnRPcGVyYXRpb24pKTsKIH0KIAogdm9p
ZCBXZWJQYWdlUHJveHk6OmRpZENyZWF0ZU1haW5GcmFtZShGcmFtZUlkZW50aWZpZXIgZnJhbWVJ
RCkKQEAgLTUxMDUsNyArNTEwNSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lG
b3JOZXdXaW5kb3dBY3Rpb24oRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIFNlY3VyCiAgICAgICAg
IEFTU0VSVF9VTlVTRUQoc2FmZUJyb3dzaW5nV2FybmluZywgIXNhZmVCcm93c2luZ1dhcm5pbmcp
OwogCiAgICAgICAgIGF1dG8gc2VuZGVyID0gUG9saWN5RGVjaXNpb25TZW5kZXI6OmNyZWF0ZShp
ZGVudGlmaWVyLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyks
IGZyYW1lSUQsIGxpc3RlbmVySURdIChhdXRvLi4uIGFyZ3MpIHsKLSAgICAgICAgICAgIG1fcHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uKGZy
YW1lSUQsIGxpc3RlbmVySUQsIGFyZ3MuLi4pLCBtX3dlYlBhZ2VJRCk7CisgICAgICAgICAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRSZWNlaXZlUG9saWN5RGVjaXNpb24oZnJhbWVJRCwg
bGlzdGVuZXJJRCwgYXJncy4uLikpOwogICAgICAgICB9KTsKIAogICAgICAgICByZWNlaXZlZFBv
bGljeURlY2lzaW9uKHBvbGljeUFjdGlvbiwgbnVsbHB0ciwgV1RGOjpudWxsb3B0LCBXVEZNb3Zl
KHNlbmRlcikpOwpAQCAtNTE5MSw3ICs1MTkxLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OndpbGxT
dWJtaXRGb3JtKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBGcmFtZUlkZW50aWZpZXIgc291cmMK
ICAgICBNRVNTQUdFX0NIRUNLKG1fcHJvY2Vzcywgc291cmNlRnJhbWUpOwogCiAgICAgbV9mb3Jt
Q2xpZW50LT53aWxsU3VibWl0Rm9ybSgqdGhpcywgKmZyYW1lLCAqc291cmNlRnJhbWUsIHRleHRG
aWVsZFZhbHVlcywgbV9wcm9jZXNzLT50cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3RzKHVzZXJEYXRh
Lm9iamVjdCgpKS5nZXQoKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwg
ZnJhbWVJRCwgbGlzdGVuZXJJRF0oKSB7Ci0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6Q29udGludWVXaWxsU3VibWl0Rm9ybShmcmFtZUlELCBsaXN0ZW5lcklEKSwg
bV93ZWJQYWdlSUQpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDb250aW51ZVdp
bGxTdWJtaXRGb3JtKGZyYW1lSUQsIGxpc3RlbmVySUQpKTsKICAgICB9KTsKIH0KIApAQCAtNTY1
MCw3ICs1NjUwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJ1bk9wZW5QYW5lbChGcmFtZUlkZW50
aWZpZXIgZnJhbWVJRCwgU2VjdXJpdHlPcmlnaW5EYXRhJiYgZnIKIHZvaWQgV2ViUGFnZVByb3h5
OjpzaG93U2hhcmVTaGVldChjb25zdCBTaGFyZURhdGFXaXRoUGFyc2VkVVJMJiBzaGFyZURhdGEs
IFNoYXJlU2hlZXRDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB7CiAgICAgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChib29sKT4gY29tcGxldGlvbkhhbmRsZXIgPSBbdGhpcywgcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpLCBjYWxsYmFja0lEXSAoYm9vbCBhY2Nlc3MpIHsKLSAgICAgICAgbV9w
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRDb21wbGV0ZVNoYXJlU2hlZXQoYWNj
ZXNzLCBjYWxsYmFja0lEKSwgbV93ZWJQYWdlSUQpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpEaWRDb21wbGV0ZVNoYXJlU2hlZXQoYWNjZXNzLCBjYWxsYmFja0lEKSk7CiAgICAg
fTsKICAgICAKICAgICBwYWdlQ2xpZW50KCkuc2hvd1NoYXJlU2hlZXQoc2hhcmVEYXRhLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CkBAIC01NjgyLDcgKzU2ODIsNyBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6c2V0TWVkaWFWb2x1bWUoZmxvYXQgdm9sdW1lKQogICAgIGlmICghaGFzUnVubmlu
Z1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG1fcHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6U2V0TWVkaWFWb2x1bWUodm9sdW1lKSwgbV93ZWJQYWdlSUQpOwor
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldE1lZGlhVm9sdW1lKHZvbHVtZSkpOwogfQog
CiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0TXV0ZWQoV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6TXV0
ZWRTdGF0ZUZsYWdzIHN0YXRlKQpAQCAtNTY5OCw3ICs1Njk4LDcgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OnNldE11dGVkKFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6Ok11dGVkU3RhdGVGbGFncyBzdGF0
ZSkKICAgICAgICAgVXNlck1lZGlhUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpLm11dGVDYXB0
dXJlTWVkaWFTdHJlYW1zRXhjZXB0SW4oKnRoaXMpOwogI2VuZGlmCiAKLSAgICBtX3Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldE11dGVkKHN0YXRlKSwgbV93ZWJQYWdlSUQpOwor
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldE11dGVkKHN0YXRlKSk7CiAgICAgYWN0aXZp
dHlTdGF0ZURpZENoYW5nZSh7IEFjdGl2aXR5U3RhdGU6OklzQXVkaWJsZSwgQWN0aXZpdHlTdGF0
ZTo6SXNDYXB0dXJpbmdNZWRpYSB9KTsKIH0KIApAQCAtNTcyMCw3ICs1NzIwLDcgQEAgdm9pZCBX
ZWJQYWdlUHJveHk6OnN0b3BNZWRpYUNhcHR1cmUoKQogICAgICAgICByZXR1cm47CiAKICNpZiBF
TkFCTEUoTUVESUFfU1RSRUFNKQotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6U3RvcE1lZGlhQ2FwdHVyZSgpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6U3RvcE1lZGlhQ2FwdHVyZSgpKTsKICNlbmRpZgogfQogCkBAIC01NzI5LDcgKzU3
MjksNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c3RvcEFsbE1lZGlhUGxheWJhY2soKQogICAgIGlm
ICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNz
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTdG9wQWxsTWVkaWFQbGF5YmFjaygpLCBtX3dlYlBh
Z2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U3RvcEFsbE1lZGlhUGxheWJhY2so
KSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzdXNwZW5kQWxsTWVkaWFQbGF5YmFjaygpCkBA
IC01NzQxLDcgKzU3NDEsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c3VzcGVuZEFsbE1lZGlhUGxh
eWJhY2soKQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTdXNwZW5kQWxsTWVkaWFQ
bGF5YmFjaygpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U3Vz
cGVuZEFsbE1lZGlhUGxheWJhY2soKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpyZXN1bWVB
bGxNZWRpYVBsYXliYWNrKCkKQEAgLTU3NTMsNyArNTc1Myw3IEBAIHZvaWQgV2ViUGFnZVByb3h5
OjpyZXN1bWVBbGxNZWRpYVBsYXliYWNrKCkKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6UmVzdW1lQWxsTWVkaWFQbGF5YmFjaygpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6UmVzdW1lQWxsTWVkaWFQbGF5YmFjaygpKTsKIH0KIAogI2lmIEVOQUJM
RShNRURJQV9TRVNTSU9OKQpAQCAtNTc2Miw3ICs1NzYyLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OmhhbmRsZU1lZGlhRXZlbnQoTWVkaWFFdmVudFR5cGUgZXZlbnRUeXBlKQogICAgIGlmICghaGFz
UnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG1fcHJvY2Vzcy0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SGFuZGxlTWVkaWFFdmVudChldmVudFR5cGUpLCBtX3dl
YlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SGFuZGxlTWVkaWFFdmVudChl
dmVudFR5cGUpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Vm9sdW1lT2ZNZWRpYUVsZW1l
bnQoZG91YmxlIHZvbHVtZSwgdWludDY0X3QgZWxlbWVudElEKQpAQCAtNTc3MCw3ICs1NzcwLDcg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFZvbHVtZU9mTWVkaWFFbGVtZW50KGRvdWJsZSB2b2x1
bWUsIHVpbnQ2NF90IGVsZW1lbnRJRCkKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
U2V0Vm9sdW1lT2ZNZWRpYUVsZW1lbnQodm9sdW1lLCBlbGVtZW50SUQpLCBtX3dlYlBhZ2VJRCk7
CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0Vm9sdW1lT2ZNZWRpYUVsZW1lbnQodm9s
dW1lLCBlbGVtZW50SUQpKTsKIH0KICNlbmRpZgogCkBAIC01Nzg0LDcgKzU3ODQsNyBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6c2V0TWF5U3RhcnRNZWRpYVdoZW5JbldpbmRvdyhib29sIG1heVN0YXJ0
TWVkaWEpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0TWF5U3RhcnRNZWRpYVdo
ZW5JbldpbmRvdyhtYXlTdGFydE1lZGlhKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OlNldE1heVN0YXJ0TWVkaWFXaGVuSW5XaW5kb3cobWF5U3RhcnRNZWRpYSkp
OwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2Fk
UHJveHkmIGRvd25sb2FkKQpAQCAtNTgzMSw3ICs1ODMxLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OmRpZENob29zZUNvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBjb2xvcikKICAgICBpZiAoIWhh
c1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkQ2hvb3NlQ29sb3IoY29sb3IpLCBtX3dlYlBhZ2VJRCk7
CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkQ2hvb3NlQ29sb3IoY29sb3IpKTsKIH0K
IAogdm9pZCBXZWJQYWdlUHJveHk6OmRpZEVuZENvbG9yUGlja2VyKCkKQEAgLTU4NDAsNyArNTg0
MCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRFbmRDb2xvclBpY2tlcigpCiAgICAgaWYgKCFo
YXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZEVuZENvbG9yUGlja2VyKCksIG1fd2ViUGFnZUlEKTsK
KyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRFbmRDb2xvclBpY2tlcigpKTsKIH0KICNl
bmRpZgogCkBAIC01ODc0LDcgKzU4NzQsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ2xvc2VT
dWdnZXN0aW9ucygpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZGF0YUxpc3RTdWdnZXN0aW9u
c0Ryb3Bkb3duID0gbnVsbHB0cjsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OkRpZENsb3NlU3VnZ2VzdGlvbnMoKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OkRpZENsb3NlU3VnZ2VzdGlvbnMoKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVBy
b3h5OjpkaWRTZWxlY3RPcHRpb24oY29uc3QgU3RyaW5nJiBzZWxlY3RlZE9wdGlvbikKQEAgLTU4
ODIsNyArNTg4Miw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRTZWxlY3RPcHRpb24oY29uc3Qg
U3RyaW5nJiBzZWxlY3RlZE9wdGlvbikKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
RGlkU2VsZWN0RGF0YUxpc3RPcHRpb24oc2VsZWN0ZWRPcHRpb24pLCBtX3dlYlBhZ2VJRCk7Cisg
ICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkU2VsZWN0RGF0YUxpc3RPcHRpb24oc2VsZWN0
ZWRPcHRpb24pKTsKIH0KIAogI2VuZGlmCkBAIC01OTM1LDcgKzU5MzUsNyBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6c2V0QWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrKGJvb2wgYWxsb3dz
KQogICAgICAgICByZXR1cm47CiAgICAgbV9hbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJh
Y2sgPSBhbGxvd3M7CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNl
dEFsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFjayhhbGxvd3MpLCBtX3dlYlBhZ2VJRCk7
CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0QWxsb3dzTWVkaWFEb2N1bWVudElubGlu
ZVBsYXliYWNrKGFsbG93cykpOwogfQogI2VuZGlmCiAKQEAgLTYxMjIsMTIgKzYxMjIsMTIgQEAg
dWludDY0X3QgV2ViUGFnZVByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0
CiAKIHZvaWQgV2ViUGFnZVByb3h5Ojp2YWx1ZUNoYW5nZWRGb3JQb3B1cE1lbnUoV2ViUG9wdXBN
ZW51UHJveHkqLCBpbnQzMl90IG5ld1NlbGVjdGVkSW5kZXgpCiB7Ci0gICAgbV9wcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRDaGFuZ2VTZWxlY3RlZEluZGV4Rm9yQWN0aXZlUG9w
dXBNZW51KG5ld1NlbGVjdGVkSW5kZXgpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6RGlkQ2hhbmdlU2VsZWN0ZWRJbmRleEZvckFjdGl2ZVBvcHVwTWVudShuZXdT
ZWxlY3RlZEluZGV4KSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRUZXh0RnJvbUl0ZW1G
b3JQb3B1cE1lbnUoV2ViUG9wdXBNZW51UHJveHkqLCBpbnQzMl90IGluZGV4KQogewotICAgIG1f
cHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0VGV4dEZvckFjdGl2ZVBvcHVwTWVu
dShpbmRleCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRU
ZXh0Rm9yQWN0aXZlUG9wdXBNZW51KGluZGV4KSk7CiB9CiAKIGJvb2wgV2ViUGFnZVByb3h5Ojpp
c1Byb2Nlc3NpbmdLZXlib2FyZEV2ZW50cygpIGNvbnN0CkBAIC02MTYyLDEzICs2MTYyLDEzIEBA
IHZvaWQgV2ViUGFnZVByb3h5Ojpwb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlTmFtZSwgQVBJOjpPCiAgICAgLy8gRm9yIGJhY2t3YXJkLWNvbXBhdGliaWxp
dHksIG1ha2Ugc3VyZSB3ZSBsYXVuY2ggdGhlIGluaXRpYWwgcHJvY2VzcyBpZiB0aGUgY2xpZW50
IGFza3MgdG8gcG9zdCBhIG1lc3NhZ2UgdG8gaXRzIGluamVjdGVkIGJ1bmRsZSBiZWZvcmUgZG9p
bmcgYSBsb2FkLgogICAgIGxhdW5jaEluaXRpYWxQcm9jZXNzSWZOZWNlc3NhcnkoKTsKIAotICAg
IHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQb3N0SW5qZWN0ZWRCdW5kbGVNZXNz
YWdlKG1lc3NhZ2VOYW1lLCBVc2VyRGF0YShwcm9jZXNzKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFu
ZGxlcyhtZXNzYWdlQm9keSkuZ2V0KCkpKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OlBvc3RJbmplY3RlZEJ1bmRsZU1lc3NhZ2UobWVzc2FnZU5hbWUsIFVzZXJE
YXRhKHByb2Nlc3MoKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKG1lc3NhZ2VCb2R5KS5nZXQo
KSkpKTsKIH0KIAogI2lmIFBMQVRGT1JNKEdUSykKIHZvaWQgV2ViUGFnZVByb3h5OjpmYWlsZWRU
b1Nob3dQb3B1cE1lbnUoKQogewotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6RmFpbGVkVG9TaG93UG9wdXBNZW51KCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpGYWlsZWRUb1Nob3dQb3B1cE1lbnUoKSk7CiB9CiAjZW5kaWYKIApAQCAt
NjIyMSw3ICs2MjIxLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNob3dDb250ZXh0TWVudShDb250
ZXh0TWVudUNvbnRleHREYXRhJiYgY29udGV4dE1lbnVDb250ZXh0RGEKICAgICAvLyBjYW4gaGFu
ZyB0aGUgcGFnZSAvIFdlYkRyaXZlciB0ZXN0LiBQcmV0ZW5kIHRvIHNob3cgYW5kIGltbWVkaWF0
ZWx5IGRpc21pc3MgdGhlIGNvbnRleHQgbWVudS4KICAgICBpZiAoYXV0byogYXV0b21hdGlvblNl
c3Npb24gPSBwcm9jZXNzKCkucHJvY2Vzc1Bvb2woKS5hdXRvbWF0aW9uU2Vzc2lvbigpKSB7CiAg
ICAgICAgIGlmIChtX2NvbnRyb2xsZWRCeUF1dG9tYXRpb24gJiYgYXV0b21hdGlvblNlc3Npb24t
PmlzU2ltdWxhdGluZ1VzZXJJbnRlcmFjdGlvbigpKSB7Ci0gICAgICAgICAgICBtX3Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNvbnRleHRNZW51SGlkZGVuKCksIG1fd2ViUGFnZUlE
KTsKKyAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNvbnRleHRNZW51SGlkZGVu
KCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtNjI0NCw3ICs2
MjQ0LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNob3dDb250ZXh0TWVudShDb250ZXh0TWVudUNv
bnRleHREYXRhJiYgY29udGV4dE1lbnVDb250ZXh0RGEKICAgICBtX2FjdGl2ZUNvbnRleHRNZW51
LT5zaG93KCk7CiAKICAgICAvLyBObyBtYXR0ZXIgdGhlIHJlc3VsdCBvZiBpbnRlcm5hbFNob3dD
b250ZXh0TWVudSwgYWx3YXlzIG5vdGlmeSB0aGUgV2ViUHJvY2VzcyB0aGF0IHRoZSBtZW51IGlz
IGhpZGRlbiBzbyBpdCBzdGFydHMgaGFuZGxpbmcgbW91c2UgZXZlbnRzIGFnYWluLgotICAgIG1f
cHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q29udGV4dE1lbnVIaWRkZW4oKSwgbV93
ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNvbnRleHRNZW51SGlkZGVu
KCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoY29u
c3QgV2ViQ29udGV4dE1lbnVJdGVtRGF0YSYgaXRlbSkKQEAgLTYzMjIsMTIgKzYzMjIsMTIgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKGNvbnN0IFdlYkNvbnRl
eHRNZW51SXRlbURhdGEmIGl0ZW0pCiAgICAgaWYgKGl0ZW0uYWN0aW9uKCkgPT0gQ29udGV4dE1l
bnVJdGVtVGFnTGVhcm5TcGVsbGluZyB8fCBpdGVtLmFjdGlvbigpID09IENvbnRleHRNZW51SXRl
bVRhZ0lnbm9yZVNwZWxsaW5nKQogICAgICAgICArK21fcGVuZGluZ0xlYXJuT3JJZ25vcmVXb3Jk
TWVzc2FnZUNvdW50OwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpE
aWRTZWxlY3RJdGVtRnJvbUFjdGl2ZUNvbnRleHRNZW51KGl0ZW0pLCBtX3dlYlBhZ2VJRCk7Cisg
ICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkU2VsZWN0SXRlbUZyb21BY3RpdmVDb250ZXh0
TWVudShpdGVtKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVDb250ZXh0TWVudUtl
eUV2ZW50KCkKIHsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNvbnRl
eHRNZW51Rm9yS2V5RXZlbnQoKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OkNvbnRleHRNZW51Rm9yS2V5RXZlbnQoKSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKENP
TlRFWFRfTUVOVVMpCiAKQEAgLTYzNDMsMTAgKzYzNDMsMTAgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OmRpZENob29zZUZpbGVzRm9yT3BlblBhbmVsV2l0aERpc3BsYXlTdHJpbmdBbmRJY29uKGNvbnN0
IFZlY3QKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbGVVUkxzLnNpemUoKTsgKytpKQog
ICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoZmlsZVVSTHNbaV0sIFNhbmRi
b3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5LCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlc1tpXSk7
CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkV4dGVuZFNhbmRib3hG
b3JGaWxlc0Zyb21PcGVuUGFuZWwoc2FuZGJveEV4dGVuc2lvbkhhbmRsZXMpLCBtX3dlYlBhZ2VJ
RCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RXh0ZW5kU2FuZGJveEZvckZpbGVzRnJv
bU9wZW5QYW5lbChzYW5kYm94RXh0ZW5zaW9uSGFuZGxlcykpOwogI2VuZGlmCiAKLSAgICBtX3By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZENob29zZUZpbGVzRm9yT3BlblBhbmVs
V2l0aERpc3BsYXlTdHJpbmdBbmRJY29uKGZpbGVVUkxzLCBkaXNwbGF5U3RyaW5nLCBpY29uRGF0
YSA/IGljb25EYXRhLT5kYXRhUmVmZXJlbmNlKCkgOiBJUEM6OkRhdGFSZWZlcmVuY2UoKSksIG1f
d2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRDaG9vc2VGaWxlc0Zv
ck9wZW5QYW5lbFdpdGhEaXNwbGF5U3RyaW5nQW5kSWNvbihmaWxlVVJMcywgZGlzcGxheVN0cmlu
ZywgaWNvbkRhdGEgPyBpY29uRGF0YS0+ZGF0YVJlZmVyZW5jZSgpIDogSVBDOjpEYXRhUmVmZXJl
bmNlKCkpKTsKIAogICAgIG1fb3BlblBhbmVsUmVzdWx0TGlzdGVuZXItPmludmFsaWRhdGUoKTsK
ICAgICBtX29wZW5QYW5lbFJlc3VsdExpc3RlbmVyID0gbnVsbHB0cjsKQEAgLTYzNzEsMTAgKzYz
NzEsMTAgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENob29zZUZpbGVzRm9yT3BlblBhbmVsKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlVVJMcykKICAgICAgICAgfQogICAgIH0KIAotICAgIG1f
cHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RXh0ZW5kU2FuZGJveEZvckZpbGVzRnJv
bU9wZW5QYW5lbChzYW5kYm94RXh0ZW5zaW9uSGFuZGxlcyksIG1fd2ViUGFnZUlEKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpFeHRlbmRTYW5kYm94Rm9yRmlsZXNGcm9tT3BlblBhbmVs
KHNhbmRib3hFeHRlbnNpb25IYW5kbGVzKSk7CiAjZW5kaWYKIAotICAgIG1fcHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkQ2hvb3NlRmlsZXNGb3JPcGVuUGFuZWwoZmlsZVVSTHMp
LCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkQ2hvb3NlRmls
ZXNGb3JPcGVuUGFuZWwoZmlsZVVSTHMpKTsKIAogICAgIG1fb3BlblBhbmVsUmVzdWx0TGlzdGVu
ZXItPmludmFsaWRhdGUoKTsKICAgICBtX29wZW5QYW5lbFJlc3VsdExpc3RlbmVyID0gbnVsbHB0
cjsKQEAgLTYzODUsNyArNjM4NSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDYW5jZWxGb3JP
cGVuUGFuZWwoKQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRDYW5jZWxGb3JP
cGVuUGFuZWwoKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRp
ZENhbmNlbEZvck9wZW5QYW5lbCgpKTsKICAgICAKICAgICBtX29wZW5QYW5lbFJlc3VsdExpc3Rl
bmVyLT5pbnZhbGlkYXRlKCk7CiAgICAgbV9vcGVuUGFuZWxSZXN1bHRMaXN0ZW5lciA9IG51bGxw
dHI7CkBAIC02MzkzLDcgKzYzOTMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ2FuY2VsRm9y
T3BlblBhbmVsKCkKIAogdm9pZCBXZWJQYWdlUHJveHk6OmFkdmFuY2VUb05leHRNaXNzcGVsbGlu
Zyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogewotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6QWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKHN0YXJ0QmVmb3JlU2VsZWN0
aW9uKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkFkdmFuY2VU
b05leHRNaXNzcGVsbGluZyhzdGFydEJlZm9yZVNlbGVjdGlvbikpOwogfQogCiB2b2lkIFdlYlBh
Z2VQcm94eTo6Y2hhbmdlU3BlbGxpbmdUb1dvcmQoY29uc3QgU3RyaW5nJiB3b3JkKQpAQCAtNjQw
MSw3ICs2NDAxLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNoYW5nZVNwZWxsaW5nVG9Xb3JkKGNv
bnN0IFN0cmluZyYgd29yZCkKICAgICBpZiAod29yZC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q2hhbmdlU3BlbGxp
bmdUb1dvcmQod29yZCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpDaGFuZ2VTcGVsbGluZ1RvV29yZCh3b3JkKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5Ojpy
ZWdpc3RlckVkaXRDb21tYW5kKFJlZjxXZWJFZGl0Q29tbWFuZFByb3h5PiYmIGNvbW1hbmRQcm94
eSwgVW5kb09yUmVkbyB1bmRvT3JSZWRvKQpAQCAtNjQyMCw3ICs2NDIwLDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OnJlbW92ZUVkaXRDb21tYW5kKFdlYkVkaXRDb21tYW5kUHJveHkmIGNvbW1hbmQp
CiAKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBt
X3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZFJlbW92ZUVkaXRDb21tYW5kKGNv
bW1hbmQuY29tbWFuZElEKCkpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6RGlkUmVtb3ZlRWRpdENvbW1hbmQoY29tbWFuZC5jb21tYW5kSUQoKSkpOwogfQogCiBi
b29sIFdlYlBhZ2VQcm94eTo6Y2FuVW5kbygpCkBAIC02NTA5LDEyICs2NTA5LDEyIEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyh1aW50NjRfdCByZXF1ZXN0SUQs
IGNvbnN0IFRleHRDaGVja2luCiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRGaW5pc2hDaGVja2lu
Z1RleHQodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNr
aW5nUmVzdWx0PiYgcmVzdWx0KQogewotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6RGlkRmluaXNoQ2hlY2tpbmdUZXh0KHJlcXVlc3RJRCwgcmVzdWx0KSwgbV93ZWJQYWdl
SUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZEZpbmlzaENoZWNraW5nVGV4dChy
ZXF1ZXN0SUQsIHJlc3VsdCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ2FuY2VsQ2hl
Y2tpbmdUZXh0KHVpbnQ2NF90IHJlcXVlc3RJRCkKIHsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OkRpZENhbmNlbENoZWNraW5nVGV4dChyZXF1ZXN0SUQpLCBtX3dlYlBh
Z2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkQ2FuY2VsQ2hlY2tpbmdUZXh0
KHJlcXVlc3RJRCkpOwogfQogLy8gT3RoZXIKIApAQCAtNjY1MSw3ICs2NjUxLDcgQEAgdm9pZCBX
ZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVFdmVudCh1aW50MzJfdCBvcGFxdWVUeXBlLCBib29sIGhh
bmRsZWQpCiAgICAgICAgIGJvb2wgY2FuUHJvY2Vzc01vcmVLZXlFdmVudHMgPSAhbV9rZXlFdmVu
dFF1ZXVlLmlzRW1wdHkoKTsKICAgICAgICAgaWYgKGNhblByb2Nlc3NNb3JlS2V5RXZlbnRzKSB7
CiAgICAgICAgICAgICBMT0coS2V5SGFuZGxpbmcsICIgVUkgcHJvY2Vzczogc2VudCBrZXlFdmVu
dCBmcm9tIGRpZFJlY2VpdmVFdmVudCIpOwotICAgICAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpLZXlFdmVudChtX2tleUV2ZW50UXVldWUuZmlyc3QoKSksIG1fd2Vi
UGFnZUlEKTsKKyAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OktleUV2ZW50KG1f
a2V5RXZlbnRRdWV1ZS5maXJzdCgpKSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUaGUgY2Fs
bCB0byBkb25lV2l0aEtleUV2ZW50IG1heSBjbG9zZSB0aGlzIFdlYlBhZ2UuCkBAIC03NTM1LDcg
Kzc1MzUsNyBAQCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzIFdlYlBhZ2VQcm94eTo6Y3JlYXRp
b25QYXJhbWV0ZXJzKFdlYlByb2Nlc3NQcm94eSYgcHJvYwogCiB2b2lkIFdlYlBhZ2VQcm94eTo6
aXNKSVRFbmFibGVkKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7Ci0gICAgbV9wcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6V2ViUHJvY2Vzczo6SXNKSVRFbmFibGVkKCksIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKKyAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlByb2Nlc3M6
OklzSklURW5hYmxlZCgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgMCk7CiB9CiAKIHZv
aWQgV2ViUGFnZVByb3h5OjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExh
eWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQpCkBAIC03NTY5LDcgKzc1NjksNyBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6YmFja0ZvcndhcmRDbGVhcigpCiAKIHZvaWQgV2ViUGFnZVByb3h5
OjpnYW1lcGFkQWN0aXZpdHkoY29uc3QgVmVjdG9yPEdhbWVwYWREYXRhPiYgZ2FtZXBhZERhdGFz
LCBib29sIHNob3VsZE1ha2VHYW1lcGFkc1Zpc2libGUpCiB7Ci0gICAgbV9wcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpHYW1lcGFkQWN0aXZpdHkoZ2FtZXBhZERhdGFzLCBzaG91bGRN
YWtlR2FtZXBhZHNWaXNpYmxlKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OkdhbWVwYWRBY3Rpdml0eShnYW1lcGFkRGF0YXMsIHNob3VsZE1ha2VHYW1lcGFkc1Zp
c2libGUpKTsKIH0KIAogI2VuZGlmCkBAIC03ODc0LDcgKzc4NzQsNyBAQCBib29sIFdlYlBhZ2VQ
cm94eTo6d2lsbEhhbmRsZUhvcml6b250YWxTY3JvbGxFdmVudHMoKSBjb25zdAogCiB2b2lkIFdl
YlBhZ2VQcm94eTo6dXBkYXRlV2Vic2l0ZVBvbGljaWVzKFdlYnNpdGVQb2xpY2llc0RhdGEmJiB3
ZWJzaXRlUG9saWNpZXMpCiB7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpVcGRhdGVXZWJzaXRlUG9saWNpZXMod2Vic2l0ZVBvbGljaWVzKSwgbV93ZWJQYWdlSUQpOwor
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlVwZGF0ZVdlYnNpdGVQb2xpY2llcyh3ZWJzaXRl
UG9saWNpZXMpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmRpZEZpbmlzaExvYWRpbmdEYXRh
Rm9yQ3VzdG9tQ29udGVudFByb3ZpZGVyKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUs
IGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YVJlZmVyZW5jZSkKQEAgLTc4ODQsNyArNzg4
NCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbUNv
bnRlbnRQcm92aWRlcihjb25zdCBTdHJpbmcmIHN1CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpiYWNr
Rm9yd2FyZFJlbW92ZWRJdGVtKGNvbnN0IEJhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXImIGl0ZW1J
RCkKIHsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZFJlbW92ZUJh
Y2tGb3J3YXJkSXRlbShpdGVtSUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6RGlkUmVtb3ZlQmFja0ZvcndhcmRJdGVtKGl0ZW1JRCkpOwogfQogCiB2b2lkIFdl
YlBhZ2VQcm94eTo6c2V0Q2FuUnVuTW9kYWwoYm9vbCBjYW5SdW5Nb2RhbCkKQEAgLTc4OTcsNyAr
Nzg5Nyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRDYW5SdW5Nb2RhbChib29sIGNhblJ1bk1v
ZGFsKQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRDYW5SdW5Nb2RhbChtX2Nh
blJ1bk1vZGFsKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNl
dENhblJ1bk1vZGFsKG1fY2FuUnVuTW9kYWwpKTsKIH0KIAogYm9vbCBXZWJQYWdlUHJveHk6OmNh
blJ1bk1vZGFsKCkKQEAgLTc5MTEsNyArNzkxMSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpiZWdp
blByaW50aW5nKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25zdCBQcmludEluZm8mIHByaW50SW5m
CiAgICAgICAgIHJldHVybjsKIAogICAgIG1faXNJblByaW50aW5nTW9kZSA9IHRydWU7Ci0gICAg
bV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpCZWdpblByaW50aW5nKGZyYW1lLT5m
cmFtZUlEKCksIHByaW50SW5mbyksIG1fd2ViUGFnZUlELCBwcmludGluZ1NlbmRPcHRpb25zKG1f
aXNQZXJmb3JtaW5nRE9NUHJpbnRPcGVyYXRpb24pKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpCZWdpblByaW50aW5nKGZyYW1lLT5mcmFtZUlEKCksIHByaW50SW5mbyksIHByaW50aW5n
U2VuZE9wdGlvbnMobV9pc1BlcmZvcm1pbmdET01QcmludE9wZXJhdGlvbikpOwogfQogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6ZW5kUHJpbnRpbmcoKQpAQCAtNzkyMCw3ICs3OTIwLDcgQEAgdm9pZCBX
ZWJQYWdlUHJveHk6OmVuZFByaW50aW5nKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9pc0lu
UHJpbnRpbmdNb2RlID0gZmFsc2U7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpFbmRQcmludGluZygpLCBtX3dlYlBhZ2VJRCwgcHJpbnRpbmdTZW5kT3B0aW9ucyhtX2lz
UGVyZm9ybWluZ0RPTVByaW50T3BlcmF0aW9uKSk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6RW5kUHJpbnRpbmcoKSwgcHJpbnRpbmdTZW5kT3B0aW9ucyhtX2lzUGVyZm9ybWluZ0RPTVBy
aW50T3BlcmF0aW9uKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5Ojpjb21wdXRlUGFnZXNGb3JQ
cmludGluZyhXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgUHJpbnRJbmZvJiBwcmludEluZm8s
IFJlZjxDb21wdXRlZFBhZ2VzQ2FsbGJhY2s+JiYgY2FsbGJhY2spCkBAIC03OTMzLDcgKzc5MzMs
NyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Y29tcHV0ZVBhZ2VzRm9yUHJpbnRpbmcoV2ViRnJhbWVQ
cm94eSogZnJhbWUsIGNvbnN0IFByaW50SW5mbwogICAgIGF1dG8gY2FsbGJhY2tJRCA9IGNhbGxi
YWNrLT5jYWxsYmFja0lEKCk7CiAgICAgbV9jYWxsYmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2sp
KTsKICAgICBtX2lzSW5QcmludGluZ01vZGUgPSB0cnVlOwotICAgIG1fcHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6Q29tcHV0ZVBhZ2VzRm9yUHJpbnRpbmcoZnJhbWUtPmZyYW1lSUQo
KSwgcHJpbnRJbmZvLCBjYWxsYmFja0lEKSwgbV93ZWJQYWdlSUQsIHByaW50aW5nU2VuZE9wdGlv
bnMobV9pc1BlcmZvcm1pbmdET01QcmludE9wZXJhdGlvbikpOworICAgIHNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OkNvbXB1dGVQYWdlc0ZvclByaW50aW5nKGZyYW1lLT5mcmFtZUlEKCksIHByaW50
SW5mbywgY2FsbGJhY2tJRCksIHByaW50aW5nU2VuZE9wdGlvbnMobV9pc1BlcmZvcm1pbmdET01Q
cmludE9wZXJhdGlvbikpOwogfQogCiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC03OTQ2LDcgKzc5
NDYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZHJhd1JlY3RUb0ltYWdlKFdlYkZyYW1lUHJveHkq
IGZyYW1lLCBjb25zdCBQcmludEluZm8mIHByaW50SQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tJ
RCA9IGNhbGxiYWNrLT5jYWxsYmFja0lEKCk7CiAgICAgbV9jYWxsYmFja3MucHV0KFdURk1vdmUo
Y2FsbGJhY2spKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRyYXdS
ZWN0VG9JbWFnZShmcmFtZS0+ZnJhbWVJRCgpLCBwcmludEluZm8sIHJlY3QsIGltYWdlU2l6ZSwg
Y2FsbGJhY2tJRCksIG1fd2ViUGFnZUlELCBwcmludGluZ1NlbmRPcHRpb25zKG1faXNQZXJmb3Jt
aW5nRE9NUHJpbnRPcGVyYXRpb24pKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEcmF3
UmVjdFRvSW1hZ2UoZnJhbWUtPmZyYW1lSUQoKSwgcHJpbnRJbmZvLCByZWN0LCBpbWFnZVNpemUs
IGNhbGxiYWNrSUQpLCBwcmludGluZ1NlbmRPcHRpb25zKG1faXNQZXJmb3JtaW5nRE9NUHJpbnRP
cGVyYXRpb24pKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmRyYXdQYWdlc1RvUERGKFdlYkZy
YW1lUHJveHkqIGZyYW1lLCBjb25zdCBQcmludEluZm8mIHByaW50SW5mbywgdWludDMyX3QgZmly
c3QsIHVpbnQzMl90IGNvdW50LCBSZWY8RGF0YUNhbGxiYWNrPiYmIGNhbGxiYWNrKQpAQCAtNzk1
OCw3ICs3OTU4LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRyYXdQYWdlc1RvUERGKFdlYkZyYW1l
UHJveHkqIGZyYW1lLCBjb25zdCBQcmludEluZm8mIHByaW50SW4KICAgICAKICAgICBhdXRvIGNh
bGxiYWNrSUQgPSBjYWxsYmFjay0+Y2FsbGJhY2tJRCgpOwogICAgIG1fY2FsbGJhY2tzLnB1dChX
VEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpEcmF3UGFnZXNUb1BERihmcmFtZS0+ZnJhbWVJRCgpLCBwcmludEluZm8sIGZpcnN0LCBjb3Vu
dCwgY2FsbGJhY2tJRCksIG1fd2ViUGFnZUlELCBwcmludGluZ1NlbmRPcHRpb25zKG1faXNQZXJm
b3JtaW5nRE9NUHJpbnRPcGVyYXRpb24pKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpE
cmF3UGFnZXNUb1BERihmcmFtZS0+ZnJhbWVJRCgpLCBwcmludEluZm8sIGZpcnN0LCBjb3VudCwg
Y2FsbGJhY2tJRCksIHByaW50aW5nU2VuZE9wdGlvbnMobV9pc1BlcmZvcm1pbmdET01QcmludE9w
ZXJhdGlvbikpOwogfQogI2VsaWYgUExBVEZPUk0oR1RLKQogdm9pZCBXZWJQYWdlUHJveHk6OmRy
YXdQYWdlc0ZvclByaW50aW5nKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25zdCBQcmludEluZm8m
IHByaW50SW5mbywgUmVmPFByaW50RmluaXNoZWRDYWxsYmFjaz4mJiBjYWxsYmFjaykKQEAgLTc5
NzEsNyArNzk3MSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkcmF3UGFnZXNGb3JQcmludGluZyhX
ZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgUHJpbnRJbmZvJiBwCiAgICAgYXV0byBjYWxsYmFj
a0lEID0gY2FsbGJhY2stPmNhbGxiYWNrSUQoKTsKICAgICBtX2NhbGxiYWNrcy5wdXQoV1RGTW92
ZShjYWxsYmFjaykpOwogICAgIG1faXNJblByaW50aW5nTW9kZSA9IHRydWU7Ci0gICAgbV9wcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEcmF3UGFnZXNGb3JQcmludGluZyhmcmFtZS0+
ZnJhbWVJRCgpLCBwcmludEluZm8sIGNhbGxiYWNrSUQpLCBtX3dlYlBhZ2VJRCwgcHJpbnRpbmdT
ZW5kT3B0aW9ucyhtX2lzUGVyZm9ybWluZ0RPTVByaW50T3BlcmF0aW9uKSk7CisgICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6RHJhd1BhZ2VzRm9yUHJpbnRpbmcoZnJhbWUtPmZyYW1lSUQoKSwg
cHJpbnRJbmZvLCBjYWxsYmFja0lEKSwgcHJpbnRpbmdTZW5kT3B0aW9ucyhtX2lzUGVyZm9ybWlu
Z0RPTVByaW50T3BlcmF0aW9uKSk7CiB9CiAjZW5kaWYKIApAQCAtNzk4NCw3ICs3OTg0LDcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OmRyYXdUb1BERihGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgY29u
c3QgT3B0aW9uYWw8RmxvYXRSZWN0PiYKICAgICB9CiAKICAgICBhdXRvIGNhbGxiYWNrSUQgPSBt
X2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFjayksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCku
YmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6OmRyYXdUb1BERiJfcykpOwotICAgIG1f
cHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RHJhd1RvUERGKGZyYW1lSUQsIHJlY3Qs
IGNhbGxiYWNrSUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
RHJhd1RvUERGKGZyYW1lSUQsIHJlY3QsIGNhbGxiYWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdl
UHJveHk6OmRyYXdUb1BERkNhbGxiYWNrKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgcGRmRGF0
YSwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQpAQCAtODAzNyw3ICs4MDM3LDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OnNldE1pbmltdW1TaXplRm9yQXV0b0xheW91dChjb25zdCBJbnRTaXplJiBzaXpl
KQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRNaW5pbXVtU2l6ZUZvckF1dG9M
YXlvdXQoc2l6ZSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpT
ZXRNaW5pbXVtU2l6ZUZvckF1dG9MYXlvdXQoc2l6ZSkpOwogICAgIG1fZHJhd2luZ0FyZWEtPm1p
bmltdW1TaXplRm9yQXV0b0xheW91dERpZENoYW5nZSgpOwogCiAjaWYgVVNFKEFQUEtJVCkKQEAg
LTgwNTYsNyArODA1Niw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRBdXRvU2l6aW5nU2hvdWxk
RXhwYW5kVG9WaWV3SGVpZ2h0KGJvb2wgc2hvdWxkRXhwYW5kKQogICAgIGlmICghaGFzUnVubmlu
Z1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpTZXRBdXRvU2l6aW5nU2hvdWxkRXhwYW5kVG9WaWV3SGVpZ2h0KHNob3Vs
ZEV4cGFuZCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRB
dXRvU2l6aW5nU2hvdWxkRXhwYW5kVG9WaWV3SGVpZ2h0KHNob3VsZEV4cGFuZCkpOwogfQogCiB2
b2lkIFdlYlBhZ2VQcm94eTo6c2V0Vmlld3BvcnRTaXplRm9yQ1NTVmlld3BvcnRVbml0cyhjb25z
dCBJbnRTaXplJiB2aWV3cG9ydFNpemUpCkBAIC04MDY5LDcgKzgwNjksNyBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6c2V0Vmlld3BvcnRTaXplRm9yQ1NTVmlld3BvcnRVbml0cyhjb25zdCBJbnRTaXpl
JiB2aWV3cG9ydFNpegogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRWaWV3cG9y
dFNpemVGb3JDU1NWaWV3cG9ydFVuaXRzKHZpZXdwb3J0U2l6ZSksIG1fd2ViUGFnZUlEKTsKKyAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRWaWV3cG9ydFNpemVGb3JDU1NWaWV3cG9ydFVu
aXRzKHZpZXdwb3J0U2l6ZSkpOwogfQogCiAjaWYgVVNFKEFVVE9NQVRJQ19URVhUX1JFUExBQ0VN
RU5UKQpAQCAtODE0MCw3ICs4MTQwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlY29yZEF1dG9j
b3JyZWN0aW9uUmVzcG9uc2UoaW50MzJfdCByZXNwb25zZSwgY29uc3QgU3RyaW5nJgogdm9pZCBX
ZWJQYWdlUHJveHk6OmhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KGNvbnN0IFN0cmluZyYg
cmVzdWx0KQogewogICAgIGlmICghaXNDbG9zZWQoKSkKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpIYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdChyZXN1bHQp
LCBtX3dlYlBhZ2VJRCk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkhhbmRsZUFs
dGVybmF0aXZlVGV4dFVJUmVzdWx0KHJlc3VsdCkpOwogfQogCiAjaWYgVVNFKERJQ1RBVElPTl9B
TFRFUk5BVElWRVMpCkBAIC04MTgxLDcgKzgxODEsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0
Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25V
bgogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldENvbXBvc2l0aW9uKHRleHQsIHVu
ZGVybGluZXMsIHNlbGVjdGlvblJhbmdlKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OlNldENvbXBvc2l0aW9uKHRleHQsIHVuZGVybGluZXMsIHNlbGVjdGlvblJh
bmdlKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5Ojpjb25maXJtQ29tcG9zaXRpb24oY29uc3Qg
U3RyaW5nJiBjb21wb3NpdGlvblN0cmluZykKQEAgLTgxODksNyArODE4OSw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5Ojpjb25maXJtQ29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiBjb21wb3NpdGlvblN0
cmluZykKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDb25maXJtQ29tcG9zaXRpb24o
Y29tcG9zaXRpb25TdHJpbmcpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6Q29uZmlybUNvbXBvc2l0aW9uKGNvbXBvc2l0aW9uU3RyaW5nKSk7CiB9CiAjZW5kaWYg
Ly8gUExBVEZPUk0oR1RLKQogCkBAIC04MjAxLDcgKzgyMDEsNyBAQCB2b2lkIFdlYlBhZ2VQcm94
eTo6c2V0U2Nyb2xsUGlubmluZ0JlaGF2aW9yKFNjcm9sbFBpbm5pbmdCZWhhdmlvciBwaW5uaW5n
KQogICAgIG1fc2Nyb2xsUGlubmluZ0JlaGF2aW9yID0gcGlubmluZzsKIAogICAgIGlmIChoYXNS
dW5uaW5nUHJvY2VzcygpKQotICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlNldFNjcm9sbFBpbm5pbmdCZWhhdmlvcihwaW5uaW5nKSwgbV93ZWJQYWdlSUQpOworICAg
ICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRTY3JvbGxQaW5uaW5nQmVoYXZpb3IocGlu
bmluZykpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0T3ZlcmxheVNjcm9sbGJhclN0eWxl
KE9wdGlvbmFsPFdlYkNvcmU6OlNjcm9sbGJhck92ZXJsYXlTdHlsZT4gc2Nyb2xsYmFyU3R5bGUp
CkBAIC04MjE5LDcgKzgyMTksNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0T3ZlcmxheVNjcm9s
bGJhclN0eWxlKE9wdGlvbmFsPFdlYkNvcmU6OlNjcm9sbGJhck92ZXJsYXlTdAogICAgICAgICBz
Y3JvbGxiYXJTdHlsZUZvck1lc3NhZ2UgPSBzdGF0aWNfY2FzdDxTY3JvbGxiYXJPdmVybGF5U3R5
bGU+KHNjcm9sbGJhclN0eWxlLnZhbHVlKCkpOwogCiAgICAgaWYgKGhhc1J1bm5pbmdQcm9jZXNz
KCkpCi0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0U2Nyb2xs
YmFyT3ZlcmxheVN0eWxlKHNjcm9sbGJhclN0eWxlRm9yTWVzc2FnZSksIG1fd2ViUGFnZUlEKTsK
KyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0U2Nyb2xsYmFyT3ZlcmxheVN0eWxl
KHNjcm9sbGJhclN0eWxlRm9yTWVzc2FnZSksIG1fd2ViUGFnZUlEKTsKIH0KIAogI2lmIEVOQUJM
RShXRUJfQ1JZUFRPKQpAQCAtODI2NCw3ICs4MjY0LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNp
Z25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyh1bnNpZ25lZCBrZXlTaXplSW5kZXgsIGNv
bnMKIAogdm9pZCBXZWJQYWdlUHJveHk6OmFkZE1JTUVUeXBlV2l0aEN1c3RvbUNvbnRlbnRQcm92
aWRlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6QWRkTUlNRVR5cGVXaXRoQ3VzdG9tQ29udGVudFByb3ZpZGVyKG1pbWVU
eXBlKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkFkZE1JTUVU
eXBlV2l0aEN1c3RvbUNvbnRlbnRQcm92aWRlcihtaW1lVHlwZSkpOwogfQogCiB2b2lkIFdlYlBh
Z2VQcm94eTo6Y2hhbmdlRm9udEF0dHJpYnV0ZXMoV2ViQ29yZTo6Rm9udEF0dHJpYnV0ZUNoYW5n
ZXMmJiBjaGFuZ2VzKQpAQCAtODI3Miw3ICs4MjcyLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNo
YW5nZUZvbnRBdHRyaWJ1dGVzKFdlYkNvcmU6OkZvbnRBdHRyaWJ1dGVDaGFuZ2VzJiYgY2hhbmdl
cykKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDaGFuZ2VGb250QXR0cmlidXRlcyhX
VEZNb3ZlKGNoYW5nZXMpKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OkNoYW5nZUZvbnRBdHRyaWJ1dGVzKFdURk1vdmUoY2hhbmdlcykpKTsKIH0KIAogdm9pZCBX
ZWJQYWdlUHJveHk6OmNoYW5nZUZvbnQoV2ViQ29yZTo6Rm9udENoYW5nZXMmJiBjaGFuZ2VzKQpA
QCAtODI4MCw3ICs4MjgwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNoYW5nZUZvbnQoV2ViQ29y
ZTo6Rm9udENoYW5nZXMmJiBjaGFuZ2VzKQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OkNoYW5nZUZvbnQoV1RGTW92ZShjaGFuZ2VzKSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpDaGFuZ2VGb250KFdURk1vdmUoY2hhbmdlcykpKTsKIH0KIAogI2lm
IFBMQVRGT1JNKENPQ09BKQpAQCAtODI4OCw3ICs4Mjg4LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OmNoYW5nZUZvbnQoV2ViQ29yZTo6Rm9udENoYW5nZXMmJiBjaGFuZ2VzKQogdm9pZCBXZWJQYWdl
UHJveHk6OnNldFRleHRBc3luYyhjb25zdCBTdHJpbmcmIHRleHQpCiB7CiAgICAgaWYgKGhhc1J1
bm5pbmdQcm9jZXNzKCkpCi0gICAgICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpTZXRUZXh0QXN5bmModGV4dCksIG1fd2ViUGFnZUlEKTsKKyAgICAgICAgc2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6U2V0VGV4dEFzeW5jKHRleHQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
Omluc2VydFRleHRBc3luYyhjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IEVkaXRpbmdSYW5nZSYg
cmVwbGFjZW1lbnRSYW5nZSwgSW5zZXJ0VGV4dE9wdGlvbnMmJiBvcHRpb25zKQpAQCAtODI5Niw3
ICs4Mjk2LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6Omluc2VydFRleHRBc3luYyhjb25zdCBTdHJp
bmcmIHRleHQsIGNvbnN0IEVkaXRpbmdSYW5nZSYgcmVwbGEKICAgICBpZiAoIWhhc1J1bm5pbmdQ
cm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpJbnNlcnRUZXh0QXN5bmModGV4dCwgcmVwbGFjZW1lbnRSYW5nZSwgV1RGTW92
ZShvcHRpb25zKSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpJ
bnNlcnRUZXh0QXN5bmModGV4dCwgcmVwbGFjZW1lbnRSYW5nZSwgV1RGTW92ZShvcHRpb25zKSkp
OwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6aGFzTWFya2VkVGV4dChDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGJvb2wpPiYmIGNhbGxiYWNrKQpAQCAtODMwNSw3ICs4MzA1LDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6Omhhc01hcmtlZFRleHQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBj
YWxsYmFjaykKICAgICAgICAgY2FsbGJhY2soZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIG1fcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6OldlYlBhZ2U6Okhhc01hcmtlZFRleHQoKSwgV1RGTW92ZShjYWxsYmFjayksIG1fd2ViUGFn
ZUlEKTsKKyAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6Okhhc01hcmtl
ZFRleHQoKSwgV1RGTW92ZShjYWxsYmFjaykpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0
TWFya2VkUmFuZ2VBc3luYyhXVEY6OkZ1bmN0aW9uPHZvaWQgKEVkaXRpbmdSYW5nZSwgQ2FsbGJh
Y2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2tGdW5jdGlvbikKQEAgLTgzMTYsNyArODMxNiw3IEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpnZXRNYXJrZWRSYW5nZUFzeW5jKFdURjo6RnVuY3Rpb248dm9p
ZCAoRWRpdGluZ1JhbmdlLCBDYWxsYmFjCiAgICAgfQogCiAgICAgYXV0byBjYWxsYmFja0lEID0g
bV9jYWxsYmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhy
b3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6OmdldE1hcmtlZFJhbmdl
QXN5bmMiX3MpKTsKLSAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R2V0TWFy
a2VkUmFuZ2VBc3luYyhjYWxsYmFja0lEKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OkdldE1hcmtlZFJhbmdlQXN5bmMoY2FsbGJhY2tJRCkpOwogfQogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6Z2V0U2VsZWN0ZWRSYW5nZUFzeW5jKFdURjo6RnVuY3Rpb248dm9pZCAo
RWRpdGluZ1JhbmdlLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQpA
QCAtODMyNyw3ICs4MzI3LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmdldFNlbGVjdGVkUmFuZ2VB
c3luYyhXVEY6OkZ1bmN0aW9uPHZvaWQgKEVkaXRpbmdSYW5nZSwgQ2FsbGIKICAgICB9CiAKICAg
ICBhdXRvIGNhbGxiYWNrSUQgPSBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFja0Z1bmN0
aW9uKSwgbV9wcm9jZXNzLT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBhZ2VQ
cm94eTo6Z2V0U2VsZWN0ZWRSYW5nZUFzeW5jIl9zKSk7Ci0gICAgcHJvY2VzcygpLnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OkdldFNlbGVjdGVkUmFuZ2VBc3luYyhjYWxsYmFja0lEKSwgbV93ZWJQ
YWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdldFNlbGVjdGVkUmFuZ2VBc3lu
YyhjYWxsYmFja0lEKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpjaGFyYWN0ZXJJbmRleEZv
clBvaW50QXN5bmMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCBXVEY6OkZ1bmN0aW9u
PHZvaWQgKHVpbnQ2NF90LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9u
KQpAQCAtODMzOCw3ICs4MzM4LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNoYXJhY3RlckluZGV4
Rm9yUG9pbnRBc3luYyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIFcKICAgICB9CiAK
ICAgICBhdXRvIGNhbGxiYWNrSUQgPSBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFja0Z1
bmN0aW9uKSwgbV9wcm9jZXNzLT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBh
Z2VQcm94eTo6Y2hhcmFjdGVySW5kZXhGb3JQb2ludEFzeW5jIl9zKSk7Ci0gICAgcHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNoYXJhY3RlckluZGV4Rm9yUG9pbnRBc3luYyhwb2lu
dCwgY2FsbGJhY2tJRCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpDaGFyYWN0ZXJJbmRleEZvclBvaW50QXN5bmMocG9pbnQsIGNhbGxiYWNrSUQpKTsKIH0KIAog
dm9pZCBXZWJQYWdlUHJveHk6OmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlQXN5bmMoY29uc3Qg
RWRpdGluZ1JhbmdlJiByYW5nZSwgV1RGOjpGdW5jdGlvbjx2b2lkIChjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiwgY29uc3QgRWRpdGluZ1JhbmdlJiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2Fs
bGJhY2tGdW5jdGlvbikKQEAgLTgzNDksNyArODM0OSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpm
aXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZUFzeW5jKGNvbnN0IEVkaXRpbmdSYW5nZSYgcmFuZ2Us
IFdUCiAgICAgfQogCiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFja3MucHV0KFdURk1v
dmUoY2FsbGJhY2tGdW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFj
dGl2aXR5KCJXZWJQYWdlUHJveHk6OmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlQXN5bmMiX3Mp
KTsKLSAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Rmlyc3RSZWN0Rm9yQ2hh
cmFjdGVyUmFuZ2VBc3luYyhyYW5nZSwgY2FsbGJhY2tJRCksIG1fd2ViUGFnZUlEKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpGaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZUFzeW5jKHJh
bmdlLCBjYWxsYmFja0lEKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRDb21wb3NpdGlv
bkFzeW5jKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJs
aW5lPiYgdW5kZXJsaW5lcywgY29uc3QgRWRpdGluZ1JhbmdlJiBzZWxlY3Rpb25SYW5nZSwgY29u
c3QgRWRpdGluZ1JhbmdlJiByZXBsYWNlbWVudFJhbmdlKQpAQCAtODM2MCw3ICs4MzYwLDcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnNldENvbXBvc2l0aW9uQXN5bmMoY29uc3QgU3RyaW5nJiB0ZXh0
LCBjb25zdCBWZWN0b3I8Q29tcG9zaXQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHBy
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRDb21wb3NpdGlvbkFzeW5jKHRleHQs
IHVuZGVybGluZXMsIHNlbGVjdGlvblJhbmdlLCByZXBsYWNlbWVudFJhbmdlKSwgbV93ZWJQYWdl
SUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldENvbXBvc2l0aW9uQXN5bmModGV4
dCwgdW5kZXJsaW5lcywgc2VsZWN0aW9uUmFuZ2UsIHJlcGxhY2VtZW50UmFuZ2UpKTsKIH0KIAog
dm9pZCBXZWJQYWdlUHJveHk6OmNvbmZpcm1Db21wb3NpdGlvbkFzeW5jKCkKQEAgLTgzNjgsNyAr
ODM2OCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpjb25maXJtQ29tcG9zaXRpb25Bc3luYygpCiAg
ICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBwcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q29uZmlybUNvbXBvc2l0aW9uQXN5bmMoKSwg
bV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNvbmZpcm1Db21wb3Np
dGlvbkFzeW5jKCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0U2Nyb2xsUGVyZm9ybWFu
Y2VEYXRhQ29sbGVjdGlvbkVuYWJsZWQoYm9vbCBlbmFibGVkKQpAQCAtODM5Myw3ICs4MzkzLDcg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OnRha2VTbmFwc2hvdChJbnRSZWN0IHJlY3QsIEludFNpemUg
Yml0bWFwU2l6ZSwgU25hcHNob3RPcHRpb24KICAgICB9CiAKICAgICBhdXRvIGNhbGxiYWNrSUQg
PSBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgbV9wcm9jZXNzLT50
aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBhZ2VQcm94eTo6dGFrZVNuYXBzaG90
Il9zKSk7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpUYWtlU25hcHNo
b3QocmVjdCwgYml0bWFwU2l6ZSwgb3B0aW9ucywgY2FsbGJhY2tJRCksIG1fd2ViUGFnZUlEKTsK
KyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpUYWtlU25hcHNob3QocmVjdCwgYml0bWFwU2l6
ZSwgb3B0aW9ucywgY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6bmF2aWdh
dGlvbkdlc3R1cmVEaWRCZWdpbigpCkBAIC04NTUzLDcgKzg1NTMsNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6cmVxdWVzdEFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9uSW5mbyhSZWY8Tm93UGxheWluZ0lu
Zm9DYWxsYmFjawogICAgIGF1dG8gY2FsbGJhY2tJRCA9IGNhbGxiYWNrLT5jYWxsYmFja0lEKCk7
CiAgICAgbV9jYWxsYmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2spKTsKIAotICAgIG1fcHJvY2Vz
cy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVxdWVzdEFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9u
SW5mbyhjYWxsYmFja0lEKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlJlcXVlc3RBY3RpdmVOb3dQbGF5aW5nU2Vzc2lvbkluZm8oY2FsbGJhY2tJRCkpOwogfQog
CiB2b2lkIFdlYlBhZ2VQcm94eTo6bm93UGxheWluZ0luZm9DYWxsYmFjayhib29sIGhhc0FjdGl2
ZVNlc3Npb24sIGJvb2wgcmVnaXN0ZXJlZEFzTm93UGxheWluZ0FwcGxpY2F0aW9uLCBjb25zdCBT
dHJpbmcmIHRpdGxlLCBkb3VibGUgZHVyYXRpb24sIGRvdWJsZSBlbGFwc2VkVGltZSwgdWludDY0
X3QgdW5pcXVlSWRlbnRpZmllciwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQpAQCAtODU5NiwyMiAr
ODU5NiwyMiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlQXV0b3BsYXlFdmVudChXZWJDb3Jl
OjpBdXRvcGxheUV2ZW50IGV2ZW50LCBPcHRpb25TZXQ8QQogI2lmIFBMQVRGT1JNKE1BQykKIHZv
aWQgV2ViUGFnZVByb3h5OjpwZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdEF0TG9jYXRpb24o
RmxvYXRQb2ludCBwb2ludCkKIHsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0QXRMb2NhdGlvbihwb2ludCksIG1fd2Vi
UGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtSW1tZWRpYXRlQWN0
aW9uSGl0VGVzdEF0TG9jYXRpb24ocG9pbnQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6Omlt
bWVkaWF0ZUFjdGlvbkRpZFVwZGF0ZSgpCiB7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpJbW1lZGlhdGVBY3Rpb25EaWRVcGRhdGUoKSwgbV93ZWJQYWdlSUQpOworICAg
IHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkltbWVkaWF0ZUFjdGlvbkRpZFVwZGF0ZSgpKTsKIH0K
IAogdm9pZCBXZWJQYWdlUHJveHk6OmltbWVkaWF0ZUFjdGlvbkRpZENhbmNlbCgpCiB7Ci0gICAg
bV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpJbW1lZGlhdGVBY3Rpb25EaWRDYW5j
ZWwoKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkltbWVkaWF0
ZUFjdGlvbkRpZENhbmNlbCgpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmltbWVkaWF0ZUFj
dGlvbkRpZENvbXBsZXRlKCkKIHsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OkltbWVkaWF0ZUFjdGlvbkRpZENvbXBsZXRlKCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpJbW1lZGlhdGVBY3Rpb25EaWRDb21wbGV0ZSgpKTsKIH0KIAog
dm9pZCBXZWJQYWdlUHJveHk6OmRpZFBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0KGNvbnN0
IFdlYkhpdFRlc3RSZXN1bHREYXRhJiByZXN1bHQsIGJvb2wgY29udGVudFByZXZlbnRzRGVmYXVs
dCwgY29uc3QgVXNlckRhdGEmIHVzZXJEYXRhKQpAQCAtODYyNiw3ICs4NjI2LDcgQEAgTlNPYmpl
Y3QgKldlYlBhZ2VQcm94eTo6aW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlckZvckhp
dFRlc3RSZXN1bHQoUmVmUHQKIAogdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZUFjY2VwdGVkQ2Fu
ZGlkYXRlKFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdCBhY2NlcHRlZENhbmRpZGF0ZSkKIHsK
LSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkhhbmRsZUFjY2VwdGVkQ2Fu
ZGlkYXRlKGFjY2VwdGVkQ2FuZGlkYXRlKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OkhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKGFjY2VwdGVkQ2FuZGlkYXRlKSk7
CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRIYW5kbGVBY2NlcHRlZENhbmRpZGF0ZSgpCkBA
IC04NjQ0LDE3ICs4NjQ0LDE3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRVc2VTeXN0ZW1BcHBl
YXJhbmNlKGJvb2wgdXNlU3lzdGVtQXBwZWFyYW5jZSkKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9j
ZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6U2V0VXNlU3lzdGVtQXBwZWFyYW5jZSh1c2VTeXN0ZW1BcHBlYXJhbmNlKSwgbV93
ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFVzZVN5c3RlbUFwcGVh
cmFuY2UodXNlU3lzdGVtQXBwZWFyYW5jZSkpOwogfQogICAgIAogdm9pZCBXZWJQYWdlUHJveHk6
OnNldEhlYWRlckJhbm5lckhlaWdodEZvclRlc3RpbmcoaW50IGhlaWdodCkKIHsKLSAgICBtX3By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEhlYWRlckJhbm5lckhlaWdodEZvclRl
c3RpbmcoaGVpZ2h0KSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OlNldEhlYWRlckJhbm5lckhlaWdodEZvclRlc3RpbmcoaGVpZ2h0KSk7CiB9CiAKIHZvaWQgV2Vi
UGFnZVByb3h5OjpzZXRGb290ZXJCYW5uZXJIZWlnaHRGb3JUZXN0aW5nKGludCBoZWlnaHQpCiB7
Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRGb290ZXJCYW5uZXJI
ZWlnaHRGb3JUZXN0aW5nKGhlaWdodCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpTZXRGb290ZXJCYW5uZXJIZWlnaHRGb3JUZXN0aW5nKGhlaWdodCkpOwogfQog
CiAjZW5kaWYKQEAgLTg2ODAsNyArODY4MCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjppbWFnZU9y
TWVkaWFEb2N1bWVudFNpemVDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpCiAK
IHZvaWQgV2ViUGFnZVByb3h5OjpzZXRTaG91bGREaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudHMo
Ym9vbCBzaG91bGREaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudHMpCiB7Ci0gICAgbV9wcm9jZXNz
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRTaG91bGREaXNwYXRjaEZha2VNb3VzZU1vdmVF
dmVudHMoc2hvdWxkRGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRzKSwgbV93ZWJQYWdlSUQpOwor
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFNob3VsZERpc3BhdGNoRmFrZU1vdXNlTW92
ZUV2ZW50cyhzaG91bGREaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudHMpKTsKIH0KIAogdm9pZCBX
ZWJQYWdlUHJveHk6OmhhbmRsZUF1dG9GaWxsQnV0dG9uQ2xpY2soY29uc3QgVXNlckRhdGEmIHVz
ZXJEYXRhKQpAQCAtODczNCw3ICs4NzM0LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFBsYXli
YWNrVGFyZ2V0KHVpbnQ2NF90IGNvbnRleHRJZCwgUmVmPE1lZGlhUGxheWJhY2tUYXJnZXQKICAg
ICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGxheWJhY2tUYXJnZXRTZWxlY3RlZChjb250
ZXh0SWQsIHRhcmdldC0+dGFyZ2V0Q29udGV4dCgpKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OlBsYXliYWNrVGFyZ2V0U2VsZWN0ZWQoY29udGV4dElkLCB0YXJn
ZXQtPnRhcmdldENvbnRleHQoKSkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZXh0ZXJuYWxP
dXRwdXREZXZpY2VBdmFpbGFibGVEaWRDaGFuZ2UodWludDY0X3QgY29udGV4dElkLCBib29sIGF2
YWlsYWJsZSkKQEAgLTg3NDIsNyArODc0Miw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpleHRlcm5h
bE91dHB1dERldmljZUF2YWlsYWJsZURpZENoYW5nZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvCiAg
ICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5
RGlkQ2hhbmdlKGNvbnRleHRJZCwgYXZhaWxhYmxlKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OlBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5RGlkQ2hhbmdlKGNv
bnRleHRJZCwgYXZhaWxhYmxlKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRTaG91bGRQ
bGF5VG9QbGF5YmFja1RhcmdldCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgc2hvdWxkUGxheSkK
QEAgLTg3NTAsNyArODc1MCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRTaG91bGRQbGF5VG9Q
bGF5YmFja1RhcmdldCh1aW50NjRfdCBjb250ZXh0SWQsIGJvb2wgc2hvdWxkCiAgICAgaWYgKCFo
YXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFNob3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KGNvbnRl
eHRJZCwgc2hvdWxkUGxheSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpTZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldChjb250ZXh0SWQsIHNob3VsZFBsYXkp
KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnBsYXliYWNrVGFyZ2V0UGlja2VyV2FzRGlzbWlz
c2VkKHVpbnQ2NF90IGNvbnRleHRJZCkKQEAgLTg3NTgsNyArODc1OCw3IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpwbGF5YmFja1RhcmdldFBpY2tlcldhc0Rpc21pc3NlZCh1aW50NjRfdCBjb250ZXh0
SWQpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBsYXliYWNrVGFyZ2V0UGlja2Vy
V2FzRGlzbWlzc2VkKGNvbnRleHRJZCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpQbGF5YmFja1RhcmdldFBpY2tlcldhc0Rpc21pc3NlZChjb250ZXh0SWQpKTsK
IH0KICNlbmRpZgogCkBAIC04Nzg0LDcgKzg3ODQsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Y2xl
YXJXaGVlbEV2ZW50VGVzdE1vbml0b3IoKQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6Y2xlYXJXaGVlbEV2ZW50VGVzdE1vbml0b3IoKSwgbV93ZWJQYWdlSUQpOworICAgIHNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OmNsZWFyV2hlZWxFdmVudFRlc3RNb25pdG9yKCkpOwogfQog
CiB2b2lkIFdlYlBhZ2VQcm94eTo6Y2FsbEFmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZShXVEY6
OkZ1bmN0aW9uPHZvaWQgKENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrKQpAQCAtODgw
Nyw3ICs4ODA3LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFNob3VsZFNjYWxlVmlld1RvRml0
RG9jdW1lbnQoYm9vbCBzaG91bGRTY2FsZVZpZXdUb0ZpdERvY3UKICAgICBpZiAoIWhhc1J1bm5p
bmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6U2V0U2hvdWxkU2NhbGVWaWV3VG9GaXREb2N1bWVudChzaG91bGRTY2Fs
ZVZpZXdUb0ZpdERvY3VtZW50KSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OlNldFNob3VsZFNjYWxlVmlld1RvRml0RG9jdW1lbnQoc2hvdWxkU2NhbGVWaWV3VG9G
aXREb2N1bWVudCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVzdG9yZVNjcm9sbFBv
c2l0aW9uKCkKQEAgLTg4MjcsNyArODgyNyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpnZXRMb2Fk
RGVjaXNpb25Gb3JJY29uKGNvbnN0IFdlYkNvcmU6OkxpbmtJY29uJiBpY29uLCBDYWxsYmFjCiAg
ICAgICAgIGJvb2wgZGVjaXNpb24gPSAoYm9vbCljYWxsYmFja0Z1bmN0aW9uOwogICAgICAgICBh
dXRvIG5ld0NhbGxiYWNrSWRlbnRpZmllciA9IGRlY2lzaW9uID8gT3B0aW9uYWxDYWxsYmFja0lE
KG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRo
cm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5OjpnZXRMb2FkRGVjaXNp
b25Gb3JJY29uIl9zKSkpIDogT3B0aW9uYWxDYWxsYmFja0lEKCk7CiAKLSAgICAgICAgbV9wcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRHZXRMb2FkRGVjaXNpb25Gb3JJY29uKGRl
Y2lzaW9uLCBsb2FkSWRlbnRpZmllciwgbmV3Q2FsbGJhY2tJZGVudGlmaWVyKSwgbV93ZWJQYWdl
SUQpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRHZXRMb2FkRGVjaXNpb25G
b3JJY29uKGRlY2lzaW9uLCBsb2FkSWRlbnRpZmllciwgbmV3Q2FsbGJhY2tJZGVudGlmaWVyKSk7
CiAgICAgfSk7CiB9CiAKQEAgLTg4NDYsNyArODg0Niw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpz
ZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlv
dXRECiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFVzZXJJbnRlcmZhY2VMYXlv
dXREaXJlY3Rpb24oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHVzZXJJbnRlcmZhY2VMYXlvdXREaXJl
Y3Rpb24pKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFVz
ZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHVzZXJJbnRl
cmZhY2VMYXlvdXREaXJlY3Rpb24pKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpoaWRlVmFs
aWRhdGlvbk1lc3NhZ2UoKQpAQCAtODg5MywxNCArODg5MywxNCBAQCB2b2lkIFdlYlBhZ2VQcm94
eTo6ZGlkQWxsb3dQb2ludGVyTG9jaygpCiAgICAgQ0dEaXNwbGF5SGlkZUN1cnNvcihDR01haW5E
aXNwbGF5SUQoKSk7CiAgICAgQ0dBc3NvY2lhdGVNb3VzZUFuZE1vdXNlQ3Vyc29yUG9zaXRpb24o
ZmFsc2UpOwogI2VuZGlmCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpE
aWRBY3F1aXJlUG9pbnRlckxvY2soKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OkRpZEFjcXVpcmVQb2ludGVyTG9jaygpKTsKIH0KICAgICAKIHZvaWQgV2ViUGFn
ZVByb3h5OjpkaWREZW55UG9pbnRlckxvY2soKQogewogICAgIEFTU0VSVChtX2lzUG9pbnRlckxv
Y2tQZW5kaW5nICYmICFtX2lzUG9pbnRlckxvY2tlZCk7CiAgICAgbV9pc1BvaW50ZXJMb2NrUGVu
ZGluZyA9IGZhbHNlOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlk
Tm90QWNxdWlyZVBvaW50ZXJMb2NrKCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpEaWROb3RBY3F1aXJlUG9pbnRlckxvY2soKSk7CiB9CiAKIHZvaWQgV2ViUGFn
ZVByb3h5OjpyZXF1ZXN0UG9pbnRlclVubG9jaygpCkBAIC04OTExLDEyICs4OTExLDEyIEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpyZXF1ZXN0UG9pbnRlclVubG9jaygpCiAgICAgICAgIENHRGlzcGxh
eVNob3dDdXJzb3IoQ0dNYWluRGlzcGxheUlEKCkpOwogI2VuZGlmCiAgICAgICAgIG1fdWlDbGll
bnQtPmRpZExvc2VQb2ludGVyTG9jayh0aGlzKTsKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpEaWRMb3NlUG9pbnRlckxvY2soKSwgbV93ZWJQYWdlSUQpOworICAg
ICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRMb3NlUG9pbnRlckxvY2soKSk7CiAgICAg
fQogCiAgICAgaWYgKG1faXNQb2ludGVyTG9ja1BlbmRpbmcpIHsKICAgICAgICAgbV91aUNsaWVu
dC0+ZGlkTG9zZVBvaW50ZXJMb2NrKHRoaXMpOwotICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OkRpZE5vdEFjcXVpcmVQb2ludGVyTG9jaygpLCBtX3dlYlBhZ2VJRCk7
CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZE5vdEFjcXVpcmVQb2ludGVyTG9j
aygpKTsKICAgICB9CiAKICAgICBtX2lzUG9pbnRlckxvY2tlZCA9IGZhbHNlOwpAQCAtODkzNyw3
ICs4OTM3LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFVSTFNjaGVtZUhhbmRsZXJGb3JTY2hl
bWUoUmVmPFdlYlVSTFNjaGVtZUhhbmRsZXI+JiYgaGFuZGwKICAgICBhdXRvIGlkZW50aWZpZXJS
ZXN1bHQgPSBtX3VybFNjaGVtZUhhbmRsZXJzQnlJZGVudGlmaWVyLmFkZChpZGVudGlmaWVyLCBX
VEZNb3ZlKGhhbmRsZXIpKTsKICAgICBBU1NFUlRfVU5VU0VEKGlkZW50aWZpZXJSZXN1bHQsIGlk
ZW50aWZpZXJSZXN1bHQuaXNOZXdFbnRyeSk7CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OlJlZ2lzdGVyVVJMU2NoZW1lSGFuZGxlcihpZGVudGlmaWVyLCBjYW5vbmlj
YWxpemVkU2NoZW1lLnZhbHVlKCkpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6UmVnaXN0ZXJVUkxTY2hlbWVIYW5kbGVyKGlkZW50aWZpZXIsIGNhbm9uaWNhbGl6
ZWRTY2hlbWUudmFsdWUoKSkpOwogfQogCiBXZWJVUkxTY2hlbWVIYW5kbGVyKiBXZWJQYWdlUHJv
eHk6OnVybFNjaGVtZUhhbmRsZXJGb3JTY2hlbWUoY29uc3QgU3RyaW5nJiBzY2hlbWUpCkBAIC04
OTg1LDcgKzg5ODUsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9h
ZFdpdGhEYXRhVHJhbnNmZXJGcm9tUHJldmFsZW50UmVzb3VyY2UoKQogICAgIGlmICghaGFzUnVu
bmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpXYXNMb2FkZWRXaXRoRGF0YVRyYW5zZmVyRnJvbVByZXZhbGVudFJl
c291cmNlKCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpXYXNM
b2FkZWRXaXRoRGF0YVRyYW5zZmVyRnJvbVByZXZhbGVudFJlc291cmNlKCkpOwogfQogI2VuZGlm
CiAKQEAgLTkwMDQsNyArOTAwNCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjplZmZlY3RpdmVBcHBl
YXJhbmNlRGlkQ2hhbmdlKCkKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RWZmZWN0
aXZlQXBwZWFyYW5jZURpZENoYW5nZSh1c2VEYXJrQXBwZWFyYW5jZSgpLCB1c2VFbGV2YXRlZFVz
ZXJJbnRlcmZhY2VMZXZlbCgpKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OkVmZmVjdGl2ZUFwcGVhcmFuY2VEaWRDaGFuZ2UodXNlRGFya0FwcGVhcmFuY2UoKSwg
dXNlRWxldmF0ZWRVc2VySW50ZXJmYWNlTGV2ZWwoKSkpOwogfQogCiAjaWYgUExBVEZPUk0oQ09D
T0EpCkBAIC05MDQzLDcgKzkwNDMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aW5zZXJ0QXR0YWNo
bWVudChSZWY8QVBJOjpBdHRhY2htZW50PiYmIGF0dGFjaG1lbnQsIEZ1bmN0aW9uPAogCiAgICAg
YXV0byBhdHRhY2htZW50SWRlbnRpZmllciA9IGF0dGFjaG1lbnQtPmlkZW50aWZpZXIoKTsKICAg
ICBhdXRvIGNhbGxiYWNrSUQgPSBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFjayksIG1f
cHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6Omlu
c2VydEF0dGFjaG1lbnQiX3MpKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6Okluc2VydEF0dGFjaG1lbnQoYXR0YWNobWVudElkZW50aWZpZXIsIGF0dGFjaG1lbnQtPmZp
bGVTaXplRm9yRGlzcGxheSgpLCBhdHRhY2htZW50LT5maWxlTmFtZSgpLCBhdHRhY2htZW50LT5j
b250ZW50VHlwZSgpLCBjYWxsYmFja0lEKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6Okluc2VydEF0dGFjaG1lbnQoYXR0YWNobWVudElkZW50aWZpZXIsIGF0dGFj
aG1lbnQtPmZpbGVTaXplRm9yRGlzcGxheSgpLCBhdHRhY2htZW50LT5maWxlTmFtZSgpLCBhdHRh
Y2htZW50LT5jb250ZW50VHlwZSgpLCBjYWxsYmFja0lEKSk7CiAgICAgbV9hdHRhY2htZW50SWRl
bnRpZmllclRvQXR0YWNobWVudE1hcC5zZXQoYXR0YWNobWVudElkZW50aWZpZXIsIFdURk1vdmUo
YXR0YWNobWVudCkpOwogfQogCkBAIC05MDU5LDcgKzkwNTksNyBAQCB2b2lkIFdlYlBhZ2VQcm94
eTo6dXBkYXRlQXR0YWNobWVudEF0dHJpYnV0ZXMoY29uc3QgQVBJOjpBdHRhY2htZW50JiBhdHRh
Y2htZW50LAogICAgICAgICBkYXRhUmVmZXJlbmNlID0geyAqZGF0YSB9OwogCiAgICAgYXV0byBj
YWxsYmFja0lEID0gbV9jYWxsYmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2spLCBtX3Byb2Nlc3Mt
PnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5Ojp1cGRhdGVBdHRh
Y2htZW50QXR0cmlidXRlcyJfcykpOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6VXBkYXRlQXR0YWNobWVudEF0dHJpYnV0ZXMoYXR0YWNobWVudC5pZGVudGlmaWVyKCks
IGF0dGFjaG1lbnQuZmlsZVNpemVGb3JEaXNwbGF5KCksIGF0dGFjaG1lbnQuY29udGVudFR5cGUo
KSwgYXR0YWNobWVudC5maWxlTmFtZSgpLCBXVEZNb3ZlKGRhdGFSZWZlcmVuY2UpLCBjYWxsYmFj
a0lEKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlVwZGF0ZUF0
dGFjaG1lbnRBdHRyaWJ1dGVzKGF0dGFjaG1lbnQuaWRlbnRpZmllcigpLCBhdHRhY2htZW50LmZp
bGVTaXplRm9yRGlzcGxheSgpLCBhdHRhY2htZW50LmNvbnRlbnRUeXBlKCksIGF0dGFjaG1lbnQu
ZmlsZU5hbWUoKSwgV1RGTW92ZShkYXRhUmVmZXJlbmNlKSwgY2FsbGJhY2tJRCkpOwogfQogCiB2
b2lkIFdlYlBhZ2VQcm94eTo6cmVnaXN0ZXJBdHRhY2htZW50SWRlbnRpZmllckZyb21EYXRhKGNv
bnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSwgY29uc3Qg
U3RyaW5nJiBwcmVmZXJyZWRGaWxlTmFtZSwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRh
KQpAQCAtOTIxOSw3ICs5MjE5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmdldEFwcGxpY2F0aW9u
TWFuaWZlc3QoRnVuY3Rpb248dm9pZChjb25zdCBPcHRpb25hbDxXZWJDb3JlOjoKIAogICAgIGF1
dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24p
LCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5
OjpnZXRBcHBsaWNhdGlvbk1hbmlmZXN0Il9zKSk7CiAgICAgbV9sb2FkRGVwZW5kZW50U3RyaW5n
Q2FsbGJhY2tJRHMuYWRkKGNhbGxiYWNrSUQpOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6R2V0QXBwbGljYXRpb25NYW5pZmVzdChjYWxsYmFja0lEKSwgbV93ZWJQYWdl
SUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdldEFwcGxpY2F0aW9uTWFuaWZlc3Qo
Y2FsbGJhY2tJRCkpOwogfQogI2VuZGlmCiAKQEAgLTkyODMsNyArOTI4Myw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpyZXBvcnRQYWdlTG9hZFJlc3VsdChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJv
cikKIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldERlZmVyc0xvYWRpbmdGb3JUZXN0aW5nKGJvb2wg
ZGVmZXJzTG9hZGluZykKIHsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OlNldERlZmVyc0xvYWRpbmcoZGVmZXJzTG9hZGluZyksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXREZWZlcnNMb2FkaW5nKGRlZmVyc0xvYWRpbmcpKTsKIH0K
IAogdm9pZCBXZWJQYWdlUHJveHk6OmdldElzVmlld1Zpc2libGUoYm9vbCYgcmVzdWx0KQpAQCAt
OTI5NSw3ICs5Mjk1LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnVwZGF0ZUN1cnJlbnRNb2RpZmll
clN0YXRlKCkKIHsKICNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShXRUJQUk9DRVNTX1dJTkRP
V1NFUlZFUl9CTE9DS0lORykgfHwgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBhdXRvIG1vZGlm
aWVycyA9IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Y3VycmVudFN0YXRlT2ZNb2RpZmllcktleXMo
KTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlVwZGF0ZUN1cnJlbnRN
b2RpZmllclN0YXRlKG1vZGlmaWVycyksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpVcGRhdGVDdXJyZW50TW9kaWZpZXJTdGF0ZShtb2RpZmllcnMpKTsKICNlbmRp
ZgogfQogCkBAIC05MzM3LDI3ICs5MzM3LDI3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojp3aWxsQWNx
dWlyZVVuaXZlcnNhbEZpbGVSZWFkU2FuZGJveEV4dGVuc2lvbihXZWJQcm9jZXNzUHJveHkmCiAK
IHZvaWQgV2ViUGFnZVByb3h5OjpzaW11bGF0ZURldmljZU9yaWVudGF0aW9uQ2hhbmdlKGRvdWJs
ZSBhbHBoYSwgZG91YmxlIGJldGEsIGRvdWJsZSBnYW1tYSkKIHsKLSAgICBtX3Byb2Nlc3MtPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNpbXVsYXRlRGV2aWNlT3JpZW50YXRpb25DaGFuZ2UoYWxw
aGEsIGJldGEsIGdhbW1hKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlNpbXVsYXRlRGV2aWNlT3JpZW50YXRpb25DaGFuZ2UoYWxwaGEsIGJldGEsIGdhbW1hKSk7
CiB9CiAKICNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCiAKIHZvaWQgV2ViUGFnZVByb3h5Ojpk
ZXRlY3REYXRhSW5BbGxGcmFtZXMoV2ViQ29yZTo6RGF0YURldGVjdG9yVHlwZXMgdHlwZXMsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgRGF0YURldGVjdGlvblJlc3VsdCYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewotICAgIG1fcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OkRldGVjdERhdGFJbkFsbEZyYW1lcyhzdGF0aWNf
Y2FzdDx1aW50NjRfdD4odHlwZXMpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG1fd2Vi
UGFnZUlEKTsKKyAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OkRldGVj
dERhdGFJbkFsbEZyYW1lcyhzdGF0aWNfY2FzdDx1aW50NjRfdD4odHlwZXMpKSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6cmVtb3ZlRGF0YURl
dGVjdGVkTGlua3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBEYXRhRGV0ZWN0aW9uUmVz
dWx0Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgbV9wcm9jZXNzLT5jb25uZWN0aW9u
KCktPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViUGFnZTo6UmVtb3ZlRGF0YURldGVj
dGVkTGlua3MoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG1fd2ViUGFnZUlEKTsKKyAg
ICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OlJlbW92ZURhdGFEZXRlY3Rl
ZExpbmtzKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogI2VuZGlmCiAKICNp
ZiBVU0UoU1lTVEVNX1BSRVZJRVcpCi12b2lkIFdlYlBhZ2VQcm94eTo6c3lzdGVtUHJldmlld0Fj
dGlvblRyaWdnZXJlZChjb25zdCBXZWJDb3JlOjpTeXN0ZW1QcmV2aWV3SW5mbyYgcHJldmlld0lu
Zm8sIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgY29uc3QKK3ZvaWQgV2ViUGFnZVByb3h5OjpzeXN0
ZW1QcmV2aWV3QWN0aW9uVHJpZ2dlcmVkKGNvbnN0IFdlYkNvcmU6OlN5c3RlbVByZXZpZXdJbmZv
JiBwcmV2aWV3SW5mbywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewotICAgIG1fcHJvY2Vzcy0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U3lzdGVtUHJldmlld0FjdGlvblRyaWdnZXJlZChwcmV2
aWV3SW5mbywgbWVzc2FnZSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpTeXN0ZW1QcmV2aWV3QWN0aW9uVHJpZ2dlcmVkKHByZXZpZXdJbmZvLCBtZXNzYWdlKSk7
CiB9CiAjZW5kaWYKIApAQCAtOTUyNiw3ICs5NTI2LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnRl
eHRJbnB1dENvbnRleHRzSW5SZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBDb21wbGV0aW9u
SGEKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fcHJvY2Vzcy0+Y29ubmVjdGlvbigp
LT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OlRleHRJbnB1dENvbnRleHRz
SW5SZWN0KHJlY3QpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgbV93ZWJQYWdlSUQpOwor
ICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViUGFnZTo6VGV4dElucHV0Q29udGV4
dHNJblJlY3QocmVjdCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBX
ZWJQYWdlUHJveHk6OmZvY3VzVGV4dElucHV0Q29udGV4dChjb25zdCBXZWJDb3JlOjpFbGVtZW50
Q29udGV4dCYgY29udGV4dCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKQEAgLTk1MzYsNyArOTUzNiw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpmb2N1
c1RleHRJbnB1dENvbnRleHQoY29uc3QgV2ViQ29yZTo6RWxlbWVudENvbnRleHQmIGNvbnRleHQs
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3Byb2Nlc3MtPmNvbm5lY3Rpb24oKS0+
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJQYWdlOjpGb2N1c1RleHRJbnB1dENvbnRl
eHQoY29udGV4dCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBtX3dlYlBhZ2VJRCk7Cisg
ICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJQYWdlOjpGb2N1c1RleHRJbnB1dENv
bnRleHQoY29udGV4dCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogTG9nZ2Vy
JiBXZWJQYWdlUHJveHk6OmxvZ2dlcigpCkBAIC05NTg3LDcgKzk1ODcsNyBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6c3RhcnRUZXh0TWFuaXB1bGF0aW9ucyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6VGV4
dE1hbmlwdWxhdGlvbgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1fdGV4dE1hbmlwdWxh
dGlvbkl0ZW1DYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOwotICAgIG1fcHJvY2Vzcy0+Y29u
bmVjdGlvbigpLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OlN0YXJ0VGV4
dE1hbmlwdWxhdGlvbnMoZXhjbHVzaW9uUnVsZXMpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViUGFn
ZTo6U3RhcnRUZXh0TWFuaXB1bGF0aW9ucyhleGNsdXNpb25SdWxlcyksIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmRpZEZpbmRUZXh0TWFuaXB1
bGF0aW9uSXRlbShXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50
aWZpZXIgaXRlbUlELApAQCAtOTYwNSwxMyArOTYwNSwxMyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
Y29tcGxldGVUZXh0TWFuaXB1bGF0aW9uKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyOgogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlcjo6TWFuaXB1bGF0aW9uUmVzdWx0OjpJbnZhbGlkSXRlbSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgbV9wcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmRXaXRoQXN5bmNS
ZXBseShNZXNzYWdlczo6V2ViUGFnZTo6Q29tcGxldGVUZXh0TWFuaXB1bGF0aW9uKGl0ZW1JRCwg
dG9rZW5zKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG1fd2ViUGFnZUlEKTsKKyAgICBz
ZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OkNvbXBsZXRlVGV4dE1hbmlwdWxh
dGlvbihpdGVtSUQsIHRva2VucyksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAog
dm9pZCBXZWJQYWdlUHJveHk6OnNldE92ZXJyaWRkZW5NZWRpYVR5cGUoY29uc3QgU3RyaW5nJiBt
ZWRpYVR5cGUpCiB7CiAgICAgbV9vdmVycmlkZGVuTWVkaWFUeXBlID0gbWVkaWFUeXBlOwotICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0T3ZlcnJpZGRlbk1lZGlhVHlw
ZShtZWRpYVR5cGUpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
U2V0T3ZlcnJpZGRlbk1lZGlhVHlwZShtZWRpYVR5cGUpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJv
eHk6OnNldE9yaWVudGF0aW9uRm9yTWVkaWFDYXB0dXJlKHVpbnQ2NF90IG9yaWVudGF0aW9uKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCA1ZDVmZGU4OTQ2ZGRkYmI1
ZTcwZmUwZmU4Mjc1ODdhZjNmZjJmMzBkLi40ZWMzMGFjYzNmNDQ0ODk5NjMxOGJkYmE5YTRkOTUx
MmYwZTk0MGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtNTA4
LDcgKzUwOCw3IEBAIHB1YmxpYzoKIAogI2lmIFVTRShTWVNURU1fUFJFVklFVykKICAgICBTeXN0
ZW1QcmV2aWV3Q29udHJvbGxlciogc3lzdGVtUHJldmlld0NvbnRyb2xsZXIoKSB7IHJldHVybiBt
X3N5c3RlbVByZXZpZXdDb250cm9sbGVyLmdldCgpOyB9Ci0gICAgdm9pZCBzeXN0ZW1QcmV2aWV3
QWN0aW9uVHJpZ2dlcmVkKGNvbnN0IFdlYkNvcmU6OlN5c3RlbVByZXZpZXdJbmZvJiwgY29uc3Qg
U3RyaW5nJikgY29uc3Q7CisgICAgdm9pZCBzeXN0ZW1QcmV2aWV3QWN0aW9uVHJpZ2dlcmVkKGNv
bnN0IFdlYkNvcmU6OlN5c3RlbVByZXZpZXdJbmZvJiwgY29uc3QgU3RyaW5nJik7CiAjZW5kaWYK
IAogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKaW5kZXggYWZiMGMyNGU2Yzk2ZDkz
MWVlM2NkNDAzNGZhNTIxYzIzNTNkYzUwYy4uNmQ2OGYzMDc3YTYxNGVlNzE2MDE2ZjU4ZjQ4YmMx
MWQ4MTI3YjA4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYklu
c3BlY3RvclByb3h5R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2Vi
SW5zcGVjdG9yUHJveHlHdGsuY3BwCkBAIC00OTIsNyArNDkyLDcgQEAgdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmlu
ZyYgY29udGUKICAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGd0a19maWxlX2No
b29zZXJfZ2V0X2ZpbGUoY2hvb3NlcikpOwogICAgIEdVbmlxdWVQdHI8Y2hhcj4gcGF0aChnX2Zp
bGVfZ2V0X3BhdGgoZmlsZS5nZXQoKSkpOwogICAgIGlmIChnX2ZpbGVfc2V0X2NvbnRlbnRzKHBh
dGguZ2V0KCksIGRhdGEsIGRhdGFMZW5ndGgsIG51bGxwdHIpKQotICAgICAgICBtX2luc3BlY3Rv
clBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RGlkU2F2ZShw
YXRoLmdldCgpKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgICAgIG1faW5z
cGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkRpZFNhdmUocGF0aC5n
ZXQoKSkpOwogfQogCiB2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25z
dCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385296</attachid>
            <date>2019-12-10 12:36:33 -0800</date>
            <delta_ts>2019-12-10 14:29:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205065-20191210123632.patch</filename>
            <type>text/plain</type>
            <size>138470</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMzM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDc4YjkwNmFiZjAwY2I1OWM0
MDNkOTk1MWIwYmZjMGIwNDk4NWZmZTIuLjA3MzI5ZDIxODVkNjk3ZjY1Y2ZmYTE5YzAyYmY0YTc2
NzE5MjQzODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcyIEBACisyMDE5LTEyLTEwICBDaHJpcyBE
dW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTGV2ZXJhZ2UgdGhlIGZhY3QgdGhh
dCBXZWJQYWdlUHJveHkgc3ViY2xhc3NlcyBJUEM6Ok1lc3NhZ2VTZW5kZXIgdG8gc2ltcGxpZnkg
SVBDIHNlbmRpbmcgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA1MDY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4K
KworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwOgorICAgICAgICAoV0tQYWdl
U2V0UGFnZUxvYWRlckNsaWVudCk6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24vV2Vi
QXV0b21hdGlvblNlc3Npb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6c3dpdGNoVG9Ccm93c2luZ0NvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6ZXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb24pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVzb2x2ZUNoaWxkRnJhbWVIYW5kbGUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVzb2x2ZVBhcmVudEZyYW1lSGFu
ZGxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OmNvbXB1dGVFbGVt
ZW50TGF5b3V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OnNlbGVj
dE9wdGlvbkVsZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
c2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxvYWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6Z2V0QWxsQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRp
b25TZXNzaW9uOjpkZWxldGVTaW5nbGVDb29raWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6dGFrZVNjcmVlbnNob3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9SZW1v
dGVXZWJJbnNwZWN0b3JQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVdlYkluc3Bl
Y3RvclByb3h5Ojpsb2FkKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlV2ViSW5zcGVjdG9yUHJv
eHk6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZCk6CisgICAgICAgICogVUlQcm9jZXNzL1VzZXJNZWRp
YVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VXNl
ck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHk6On5Vc2VyTWVkaWFQZXJtaXNzaW9u
UmVxdWVzdE1hbmFnZXJQcm94eSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkVkaXRDb21tYW5k
UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0Q29tbWFuZFByb3h5Ojp1bmFwcGx5
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdENvbW1hbmRQcm94eTo6cmVhcHBseSk6CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYkZyYW1lUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJG
cmFtZVByb3h5Ojpsb2FkVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVQcm94eTo6bG9h
ZERhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZVByb3h5OjpzdG9wTG9hZGluZyBjb25z
dCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5Ojpjb25uZWN0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViSW5zcGVjdG9yUHJveHk6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVj
dG9yUHJveHk6OnVwZGF0ZUZvck5ld1BhZ2VQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
SW5zcGVjdG9yUHJveHk6OnNldEZyb250ZW5kQ29ubmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6
OldlYkluc3BlY3RvclByb3h5OjpzaG93Q29uc29sZSk6CisgICAgICAgIChXZWJLaXQ6OldlYklu
c3BlY3RvclByb3h5OjpzaG93UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVj
dG9yUHJveHk6OnNob3dNYWluUmVzb3VyY2VGb3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
Ykluc3BlY3RvclByb3h5OjphdHRhY2gpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQ
cm94eTo6ZGV0YWNoKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnRvZ2ds
ZVBhZ2VQcm9maWxpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6dG9n
Z2xlRWxlbWVudFNlbGVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5
OjpvcGVuTG9jYWxJbnNwZWN0b3JGcm9udGVuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3Bl
Y3RvclByb3h5OjpvcGVuKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OmNs
b3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9y
UHJveHk6OmF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldFVJQ2xp
ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRJY29uTG9hZGluZ0NsaWVu
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bGF1bmNoUHJvY2Vzc0ZvclJlbG9h
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bGF1bmNoUHJvY2Vzc1dpdGhJdGVt
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojppbml0aWFsaXplV2ViUGFnZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OmxvYWRSZXF1ZXN0V2l0aE5hdmlnYXRpb25TaGFyZWQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OmxvYWRGaWxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5Ojpsb2FkQWx0ZXJuYXRlSFRNTCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6bG9hZFdlYkFyY2hpdmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpu
YXZpZ2F0ZVRvUERGTGlua1dpdGhTaW11bGF0ZWRDbGljayk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6c3RvcExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OnJlbG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z29Ub0JhY2tGb3J3YXJk
SXRlbSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6dHJ5UmVzdG9yZVNjcm9sbFBv
c2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRDb250cm9sbGVkQnlB
dXRvbWF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRJbmRpY2F0aW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRCYWNrZ3JvdW5kQ29sb3IpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldFRvcENvbnRlbnRJbnNldCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0VW5kZXJsYXlDb2xvcik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6dmlld1dpbGxTdGFydExpdmVSZXNpemUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OnZpZXdXaWxsRW5kTGl2ZVJlc2l6ZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6dmlld0RpZEVudGVyV2luZG93KToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpkaXNwYXRjaEFjdGl2aXR5U3RhdGVDaGFuZ2UpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OmxheWVySG9zdGluZ01vZGVEaWRDaGFuZ2UpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEluaXRpYWxGb2N1cyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6Y2xlYXJTZWxlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnJlc3RvcmVTZWxlY3Rpb25JbkZvY3VzZWRFZGl0YWJsZUVsZW1lbnQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnZhbGlkYXRlQ29tbWFuZCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6aW5jcmVhc2VMaXN0TGV2ZWwpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OmRlY3JlYXNlTGlzdExldmVsKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5OjpjaGFuZ2VMaXN0VHlwZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OnNldE5lZWRzRm9udEF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OnNjaGVkdWxlRnVsbEVkaXRvclN0YXRlVXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5OjpzZWxlY3RBbGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmV4
ZWN1dGVFZGl0Q29tbWFuZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVxdWVz
dEZvbnRBdHRyaWJ1dGVzQXRTZWxlY3Rpb25TdGFydCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6c2V0RWRpdGFibGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBl
cmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6ZHJhZ0VuZGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRTdGFydERy
YWcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRyYWdDYW5jZWxsZWQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnByb2Nlc3NOZXh0UXVldWVkTW91c2VFdmVudCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2VuZFdoZWVsRXZlbnQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OmhhbmRsZUdlc3R1cmVFdmVudCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6aGFuZGxlUHJldmVudGFibGVUb3VjaEV2ZW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXNldFBvdGVudGlhbFRhcFNlY3VyaXR5T3JpZ2luKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpoYW5kbGVVbnByZXZlbnRhYmxlVG91Y2hF
dmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aGFuZGxlVG91Y2hFdmVudCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y2FuY2VsUG9pbnRlcik6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6dG91Y2hXaXRoSWRlbnRpZmllcldhc1JlbW92ZWQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNjcm9sbEJ5KToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpjZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5Ojpjb21taXRQcm92aXNpb25hbFBhZ2UpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldFVzZXJBZ2VudCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0
aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0Q3VzdG9tVGV4dEVuY29k
aW5nTmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVzdG9yZUZyb21TZXNz
aW9uU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldFRleHRab29tRmFj
dG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRQYWdlWm9vbUZhY3Rvcik6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0UGFnZUFuZFRleHRab29tRmFjdG9y
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2NhbGVQYWdlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpzY2FsZVBhZ2VJblZpZXdDb29yZGluYXRlcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2NhbGVWaWV3KToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5Ojp3aW5kb3dTY3JlZW5EaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OmFjY2Vzc2liaWxpdHlTZXR0aW5nc0RpZENoYW5nZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0VXNlRml4ZWRMYXlvdXQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OnNldEZpeGVkTGF5b3V0U2l6ZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6c2V0QWx3YXlzU2hvd3NIb3Jpem9udGFsU2Nyb2xsZXIpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEFsd2F5c1Nob3dzVmVydGljYWxTY3JvbGxlcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bGlzdGVuRm9yTGF5b3V0TWlsZXN0b25lcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0U3VwcHJlc3NTY3JvbGxiYXJBbmlt
YXRpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRFbmFibGVWZXJ0aWNh
bFJ1YmJlckJhbmRpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEVuYWJs
ZUhvcml6b250YWxSdWJiZXJCYW5kaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpzZXRCYWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnNldFBhZ2luYXRpb25Nb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpzZXRQYWdpbmF0aW9uQmVoYXZlc0xpa2VDb2x1bW5zKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpzZXRQYWdlTGVuZ3RoKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpzZXRHYXBCZXR3ZWVuUGFnZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OnNldFBhZ2luYXRpb25MaW5lR3JpZEVuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OmZpbmRTdHJpbmdNYXRjaGVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpmaW5kU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpnZXRJbWFnZUZv
ckZpbmRNYXRjaCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2VsZWN0RmluZE1h
dGNoKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjppbmRpY2F0ZUZpbmRNYXRjaCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aGlkZUZpbmRVSSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y291bnRTdHJpbmdNYXRjaGVzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpyZXBsYWNlTWF0Y2hlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6cnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lU2NyaXB0V29ybGQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OnJ1bkphdmFTY3JpcHRJbkZyYW1lKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpnZXRSZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0U291cmNlRm9yRnJhbWUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmdldENvbnRlbnRzQXNTdHJpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmdldEJ5dGVjb2RlUHJvZmlsZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0U2FtcGxpbmdQcm9maWxlck91dHB1dCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0Q29udGVudHNBc01IVE1MRGF0YSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0U2VsZWN0aW9uT3JDb250ZW50c0FzU3RyaW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpnZXRTZWxlY3Rpb25Bc1dlYkFyY2hpdmVE
YXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpnZXRNYWluUmVzb3VyY2VEYXRh
T2ZGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0UmVzb3VyY2VEYXRh
RnJvbUZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpnZXRXZWJBcmNoaXZl
T2ZGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Zm9yY2VSZXBhaW50KToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwcmVmZXJlbmNlc0RpZENoYW5nZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojp3aWxsU3VibWl0Rm9ybSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2hvd1NoYXJlU2hlZXQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldE1lZGlhVm9sdW1lKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpzZXRNdXRlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
c3RvcE1lZGlhQ2FwdHVyZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c3RvcEFs
bE1lZGlhUGxheWJhY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnN1c3BlbmRB
bGxNZWRpYVBsYXliYWNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXN1bWVB
bGxNZWRpYVBsYXliYWNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpoYW5kbGVN
ZWRpYUV2ZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclByb3h5R3Rr
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2ZSk6
CisKIDIwMTktMTItMTAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAg
ICBbV0syXVtpT1NdIFZpc2liaWxpdHkgcHJvcGFnYXRpb24gdmlldyBpcyBub3QgcHJvcGVybHkg
dXBkYXRlZCB3aGVuIG5hdmlnYXRpbmcgY3Jvc3MtcHJvY2VzcwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvTWVzc2FnZVNlbmRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9NZXNzYWdlU2VuZGVyLmNwcAppbmRleCBkYTEwNDRhZWRmMzM4YjhjYjM2MWM4
ODFiODRlMTk5ODFhYWJjYTFmLi5kYWY1ODY0OTFjMzVlMjJjYTFiN2Q4YzBiNzdmZGVhNzgzNWM5
MjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9NZXNzYWdlU2VuZGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9NZXNzYWdlU2VuZGVyLmNwcApA
QCAtMzIsMTEgKzMyLDE3IEBAIE1lc3NhZ2VTZW5kZXI6On5NZXNzYWdlU2VuZGVyKCkKIHsKIH0K
IAotYm9vbCBNZXNzYWdlU2VuZGVyOjpzZW5kTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8RW5jb2Rl
cj4gZW5jb2RlciwgT3B0aW9uU2V0PFNlbmRPcHRpb24+IHNlbmRPcHRpb25zKQorYm9vbCBNZXNz
YWdlU2VuZGVyOjpzZW5kTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8RW5jb2Rlcj4gZW5jb2Rlciwg
T3B0aW9uU2V0PFNlbmRPcHRpb24+IHNlbmRPcHRpb25zLCBPcHRpb25hbDxzdGQ6OnBhaXI8Q29t
cGxldGlvbkhhbmRsZXI8dm9pZChJUEM6OkRlY29kZXIqKT4sIHVpbnQ2NF90Pj4mJiBhc3luY1Jl
cGx5SW5mbykKIHsKLSAgICBBU1NFUlQobWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSk7CisgICAg
YXV0byogY29ubmVjdGlvbiA9IG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCk7CisgICAgQVNTRVJU
KGNvbm5lY3Rpb24pOwogCi0gICAgcmV0dXJuIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCktPnNl
bmRNZXNzYWdlKFdURk1vdmUoZW5jb2RlciksIHNlbmRPcHRpb25zKTsKKyAgICBpZiAoY29ubmVj
dGlvbi0+c2VuZE1lc3NhZ2UoV1RGTW92ZShlbmNvZGVyKSwgc2VuZE9wdGlvbnMpKSB7CisgICAg
ICAgIGlmIChhc3luY1JlcGx5SW5mbykKKyAgICAgICAgICAgIElQQzo6YWRkQXN5bmNSZXBseUhh
bmRsZXIoKmNvbm5lY3Rpb24sIGFzeW5jUmVwbHlJbmZvLT5zZWNvbmQsIFdURk1vdmUoYXN5bmNS
ZXBseUluZm8tPmZpcnN0KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1
cm4gZmFsc2U7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIElQQwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvTWVzc2FnZVNlbmRlci5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvTWVzc2FnZVNlbmRlci5oCmluZGV4IDc3MTQ0OGE0NGQwODg2ZGQwMWJiMGMyZGU2NGRj
OWE0Mjg2MjdhMmEuLjgxMGE1MTQ5NzA3Mjc2ODQwMWJmYjlkZmZlMTU5YzYwYjA5ZGU3MWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL01lc3NhZ2VTZW5kZXIuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9NZXNzYWdlU2VuZGVyLmgKQEAgLTcyLDEyICs3
MiwyOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgQz4KLSAgICB2b2lkIHNlbmRXaXRoQXN5bmNSZXBseShUJiYgbWVzc2FnZSwgQyYmIGNvbXBs
ZXRpb25IYW5kbGVyKQorICAgIHZvaWQgc2VuZFdpdGhBc3luY1JlcGx5KFQmJiBtZXNzYWdlLCBD
JiYgY29tcGxldGlvbkhhbmRsZXIsIE9wdGlvblNldDxTZW5kT3B0aW9uPiBzZW5kT3B0aW9ucyA9
IHsgfSkKICAgICB7Ci0gICAgICAgIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCktPnNlbmRXaXRo
QXN5bmNSZXBseShXVEZNb3ZlKG1lc3NhZ2UpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwg
bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSk7CisgICAgICAgIHNlbmRXaXRoQXN5bmNSZXBs
eShXVEZNb3ZlKG1lc3NhZ2UpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgbWVzc2FnZVNl
bmRlckRlc3RpbmF0aW9uSUQoKSwgc2VuZE9wdGlvbnMpOwogICAgIH0KIAotICAgIHZpcnR1YWwg
Ym9vbCBzZW5kTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8RW5jb2Rlcj4sIE9wdGlvblNldDxTZW5k
T3B0aW9uPik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQz4KKyAgICB2b2lk
IHNlbmRXaXRoQXN5bmNSZXBseShUJiYgbWVzc2FnZSwgQyYmIGNvbXBsZXRpb25IYW5kbGVyLCB1
aW50NjRfdCBkZXN0aW5hdGlvbklELCBPcHRpb25TZXQ8U2VuZE9wdGlvbj4gc2VuZE9wdGlvbnMg
PSB7IH0pCisgICAgeworICAgICAgICBDT01QSUxFX0FTU0VSVCghVDo6aXNTeW5jLCBBc3luY01l
c3NhZ2VFeHBlY3RlZCk7CisKKyAgICAgICAgYXV0byBlbmNvZGVyID0gbWFrZVVuaXF1ZTxJUEM6
OkVuY29kZXI+KFQ6OnJlY2VpdmVyTmFtZSgpLCBUOjpuYW1lKCksIGRlc3RpbmF0aW9uSUQpOwor
ICAgICAgICB1aW50NjRfdCBsaXN0ZW5lcklEID0gSVBDOjpuZXh0QXN5bmNSZXBseUhhbmRsZXJJ
RCgpOworICAgICAgICBlbmNvZGVyLT5lbmNvZGUobGlzdGVuZXJJRCk7CisgICAgICAgIGVuY29k
ZXItPmVuY29kZShtZXNzYWdlLmFyZ3VtZW50cygpKTsKKyAgICAgICAgc2VuZE1lc3NhZ2UoV1RG
TW92ZShlbmNvZGVyKSwgc2VuZE9wdGlvbnMsIHt7IFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSAoSVBDOjpEZWNvZGVyKiBkZWNvZGVyKSBtdXRhYmxlIHsK
KyAgICAgICAgICAgIGlmIChkZWNvZGVyICYmICFkZWNvZGVyLT5pc0ludmFsaWQoKSkKKyAgICAg
ICAgICAgICAgICBUOjpjYWxsUmVwbHkoKmRlY29kZXIsIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBUOjpjYW5jZWxSZXBseShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAgIH0sIGxpc3RlbmVySUQgfX0pOwor
ICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBzZW5kTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8RW5j
b2Rlcj4sIE9wdGlvblNldDxTZW5kT3B0aW9uPiwgT3B0aW9uYWw8c3RkOjpwYWlyPENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoSVBDOjpEZWNvZGVyKik+LCB1aW50NjRfdD4+JiYgPSBXVEY6Om51bGxv
cHQpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgQ29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNv
bm5lY3Rpb24oKSBjb25zdCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS1BhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdl
LmNwcAppbmRleCA0ZDhmNmNmMmU0NjNkOTBhZTM4MWJlZGFjZTk2YWE4YWUwMjM5NjY3Li43MGVm
YmZhM2U4N2EyYWJhY2M0NTE0NjQwZmRhM2Y3N2ViNjgwZTVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKQEAgLTEyMTIsNyArMTIxMiw3IEBAIHZvaWQgV0tQYWdl
U2V0UGFnZUxvYWRlckNsaWVudChXS1BhZ2VSZWYgcGFnZVJlZiwgY29uc3QgV0tQYWdlTG9hZGVy
Q2xpZW50QmFzZSoKICAgICAgICAgbWlsZXN0b25lcy5hZGQoV2ViQ29yZTo6RGlkRmlyc3RWaXN1
YWxseU5vbkVtcHR5TGF5b3V0KTsKIAogICAgIGlmIChtaWxlc3RvbmVzKQotICAgICAgICB3ZWJQ
YWdlUHJveHktPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpMaXN0ZW5Gb3JMYXlv
dXRNaWxlc3RvbmVzKG1pbGVzdG9uZXMpLCB3ZWJQYWdlUHJveHktPndlYlBhZ2VJRCgpKTsKKyAg
ICAgICAgd2ViUGFnZVByb3h5LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpMaXN0ZW5Gb3JMYXlv
dXRNaWxlc3RvbmVzKG1pbGVzdG9uZXMpKTsKIAogICAgIHdlYlBhZ2VQcm94eS0+c2V0TG9hZGVy
Q2xpZW50KFdURk1vdmUobG9hZGVyQ2xpZW50KSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCmlu
ZGV4IDczZjA4ODZmYTgxYzM3MTE3ZDBiNmE5Mzc3N2NlZmJiZTU1OWUzMjIuLmVlYTFmZGNjN2Nm
YWU1ZjA1Y2UzMmUwNDYyMWY3MmMyOTc3ZWRjN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCkBA
IC0zNzIsNyArMzcyLDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c3dpdGNoVG9Ccm93
c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHQKIAogICAgIG1fY2xpZW50
LT5yZXF1ZXN0U3dpdGNoVG9QYWdlKCp0aGlzLCAqcGFnZSwgW2ZyYW1lSUQsIHBhZ2UgPSBtYWtl
UmVmKCpwYWdlKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSB7CiAgICAgICAgIHBh
Z2UtPnNldEZvY3VzKHRydWUpOwotICAgICAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdl
czo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6Rm9jdXNGcmFtZShwYWdlLT53ZWJQYWdlSUQo
KSwgZnJhbWVJRCksIDApOworICAgICAgICBwYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJBdXRvbWF0
aW9uU2Vzc2lvblByb3h5OjpGb2N1c0ZyYW1lKHBhZ2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlEKSwg
MCk7CiAKICAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKCk7CiAgICAgfSk7CkBAIC05NDgs
NyArOTQ4LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZXZhbHVhdGVKYXZhU2NyaXB0
RnVuY3Rpb24oY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnQKICAgICB1aW50NjRfdCBjYWxsYmFj
a0lEID0gbV9uZXh0RXZhbHVhdGVKYXZhU2NyaXB0Q2FsbGJhY2tJRCsrOwogICAgIG1fZXZhbHVh
dGVKYXZhU2NyaXB0RnVuY3Rpb25DYWxsYmFja3Muc2V0KGNhbGxiYWNrSUQsIFdURk1vdmUoY2Fs
bGJhY2spKTsKIAotICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJBdXRvbWF0
aW9uU2Vzc2lvblByb3h5OjpFdmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbihwYWdlLT53ZWJQYWdl
SUQoKSwgZnJhbWVJRCwgZnVuY3Rpb24sIGFyZ3VtZW50c1ZlY3RvciwgZXhwZWN0c0ltcGxpY2l0
Q2FsbGJhY2tBcmd1bWVudCwgY2FsbGJhY2tUaW1lb3V0LCBjYWxsYmFja0lEKSwgMCk7CisgICAg
cGFnZS0+c2VuZChNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6RXZhbHVhdGVK
YXZhU2NyaXB0RnVuY3Rpb24ocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQsIGZ1bmN0aW9uLCBh
cmd1bWVudHNWZWN0b3IsIGV4cGVjdHNJbXBsaWNpdENhbGxiYWNrQXJndW1lbnQsIGNhbGxiYWNr
VGltZW91dCwgY2FsbGJhY2tJRCksIDApOwogfQogCiB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9u
OjpkaWRFdmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbih1aW50NjRfdCBjYWxsYmFja0lELCBjb25z
dCBTdHJpbmcmIHJlc3VsdCwgY29uc3QgU3RyaW5nJiBlcnJvclR5cGUpCkBAIC05ODcsMTcgKzk4
NywxNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZXNvbHZlQ2hpbGRGcmFtZUhhbmRs
ZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dAogICAgIH07CiAKICAgICBpZiAob3B0aW9u
YWxOb2RlSGFuZGxlKSB7Ci0gICAgICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OlJlc29sdmVDaGlsZEZyYW1l
V2l0aE5vZGVIYW5kbGUocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQsICpvcHRpb25hbE5vZGVI
YW5kbGUpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAgIHBhZ2UtPnNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6UmVzb2x2
ZUNoaWxkRnJhbWVXaXRoTm9kZUhhbmRsZShwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgKm9w
dGlvbmFsTm9kZUhhbmRsZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIGlmIChvcHRpb25hbE5hbWUpIHsKLSAgICAgICAgcGFnZS0+
cHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Np
b25Qcm94eTo6UmVzb2x2ZUNoaWxkRnJhbWVXaXRoTmFtZShwYWdlLT53ZWJQYWdlSUQoKSwgZnJh
bWVJRCwgKm9wdGlvbmFsTmFtZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAg
ICAgcGFnZS0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lv
blByb3h5OjpSZXNvbHZlQ2hpbGRGcmFtZVdpdGhOYW1lKHBhZ2UtPndlYlBhZ2VJRCgpLCBmcmFt
ZUlELCAqb3B0aW9uYWxOYW1lKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKG9wdGlvbmFsT3JkaW5hbCkgewotICAgICAgICBw
YWdlLT5wcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9u
U2Vzc2lvblByb3h5OjpSZXNvbHZlQ2hpbGRGcmFtZVdpdGhPcmRpbmFsKHBhZ2UtPndlYlBhZ2VJ
RCgpLCBmcmFtZUlELCAqb3B0aW9uYWxPcmRpbmFsKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOworICAgICAgICBwYWdlLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dG9t
YXRpb25TZXNzaW9uUHJveHk6OlJlc29sdmVDaGlsZEZyYW1lV2l0aE9yZGluYWwocGFnZS0+d2Vi
UGFnZUlEKCksIGZyYW1lSUQsICpvcHRpb25hbE9yZGluYWwpLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwMjQsNyArMTAyNCw3IEBA
IHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnJlc29sdmVQYXJlbnRGcmFtZUhhbmRsZShjb25z
dCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4CiAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2Vzcyho
YW5kbGVGb3JXZWJGcmFtZUlEKGZyYW1lSUQpKTsKICAgICB9OwogCi0gICAgcGFnZS0+cHJvY2Vz
cygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94
eTo6UmVzb2x2ZVBhcmVudEZyYW1lKHBhZ2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlEKSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIHBhZ2UtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6UmVzb2x2ZVBhcmVudEZyYW1lKHBhZ2Ut
PndlYlBhZ2VJRCgpLCBmcmFtZUlEKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
CiBzdGF0aWMgT3B0aW9uYWw8Q29vcmRpbmF0ZVN5c3RlbT4gcHJvdG9jb2xTdHJpbmdUb0Nvb3Jk
aW5hdGVTeXN0ZW0oY29uc3QgU3RyaW5nJiBjb29yZGluYXRlU3lzdGVtU3RyaW5nKQpAQCAtMTA4
Niw3ICsxMDg2LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y29tcHV0ZUVsZW1lbnRM
YXlvdXQoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW4KICAgICB9OwogCiAgICAgYm9v
bCBzY3JvbGxJbnRvVmlld0lmTmVlZGVkID0gb3B0aW9uYWxTY3JvbGxJbnRvVmlld0lmTmVlZGVk
ID8gKm9wdGlvbmFsU2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCA6IGZhbHNlOwotICAgIHBhZ2UtPnBy
b2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9u
UHJveHk6OkNvbXB1dGVFbGVtZW50TGF5b3V0KHBhZ2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlELCBu
b2RlSGFuZGxlLCBzY3JvbGxJbnRvVmlld0lmTmVlZGVkLCBjb29yZGluYXRlU3lzdGVtLnZhbHVl
KCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgcGFnZS0+c2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpDb21wdXRlRWxlbWVu
dExheW91dChwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgbm9kZUhhbmRsZSwgc2Nyb2xsSW50
b1ZpZXdJZk5lZWRlZCwgY29vcmRpbmF0ZVN5c3RlbS52YWx1ZSgpKSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogfQogCiB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZWxlY3RPcHRp
b25FbGVtZW50KGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJp
bmcmIGZyYW1lSGFuZGxlLCBjb25zdCBTdHJpbmcmIG5vZGVIYW5kbGUsIFJlZjxTZWxlY3RPcHRp
b25FbGVtZW50Q2FsbGJhY2s+JiYgY2FsbGJhY2spCkBAIC0xMTA5LDcgKzExMDksNyBAQCB2b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZWxlY3RPcHRpb25FbGVtZW50KGNvbnN0IFN0cmluZyYg
YnJvd3NpbmdDb250ZXh0SGFuZAogICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoKTsKICAg
ICB9OwogCi0gICAgcGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6U2VsZWN0T3B0aW9uRWxlbWVudChwYWdlLT53ZWJQ
YWdlSUQoKSwgZnJhbWVJRCwgbm9kZUhhbmRsZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKKyAgICBwYWdlLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25T
ZXNzaW9uUHJveHk6OlNlbGVjdE9wdGlvbkVsZW1lbnQocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1l
SUQsIG5vZGVIYW5kbGUpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQg
V2ViQXV0b21hdGlvblNlc3Npb246OmlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2coSW5zcGVjdG9y
OjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0
SGFuZGxlLCBib29sKiByZXN1bHQpCkBAIC0xMjY5LDcgKzEyNjksNyBAQCB2b2lkIFdlYkF1dG9t
YXRpb25TZXNzaW9uOjpzZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZChjb25zdCBTdHJpbmcmIGJy
b3dzaW5nQ29udAogICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoKTsKICAgICB9OwogCi0g
ICAgcGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21h
dGlvblNlc3Npb25Qcm94eTo6U2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxvYWQocGFnZS0+d2ViUGFn
ZUlEKCksIGZyYW1lSUQsIG5vZGVIYW5kbGUsIFdURk1vdmUobmV3RmlsZUxpc3QpKSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIHBhZ2UtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6U2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxv
YWQocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQsIG5vZGVIYW5kbGUsIFdURk1vdmUobmV3Rmls
ZUxpc3QpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiBzdGF0aWMgUmVmPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkNvb2tpZT4gYnVpbGRPYmplY3RGb3JDb29r
aWUoY29uc3QgV2ViQ29yZTo6Q29va2llJiBjb29raWUpCkBAIC0xMzEyLDcgKzEzMTIsNyBAQCB2
b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRBbGxDb29raWVzKGNvbnN0IFN0cmluZyYgYnJv
d3NpbmdDb250ZXh0SGFuZGxlLCBSZQogICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoYnVp
bGRBcnJheUZvckNvb2tpZXMoY29va2llcykpOwogICAgIH07CiAKLSAgICBwYWdlLT5wcm9jZXNz
KCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5
OjpHZXRDb29raWVzRm9yRnJhbWUocGFnZS0+d2ViUGFnZUlEKCksIFdURjo6bnVsbG9wdCksIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBwYWdlLT5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OkdldENvb2tpZXNGb3JGcmFtZShw
YWdlLT53ZWJQYWdlSUQoKSwgV1RGOjpudWxsb3B0KSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogfQogCiB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVTaW5nbGVDb29raWUo
Y29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyYgY29va2ll
TmFtZSwgUmVmPERlbGV0ZVNpbmdsZUNvb2tpZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQpAQCAtMTMz
MCw3ICsxMzMwLDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlU2luZ2xlQ29v
a2llKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGwKICAgICAgICAgY2FsbGJhY2st
PnNlbmRTdWNjZXNzKCk7CiAgICAgfTsKIAotICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OkRlbGV0ZUNvb2tp
ZShwYWdlLT53ZWJQYWdlSUQoKSwgV1RGOjpudWxsb3B0LCBjb29raWVOYW1lKSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOworICAgIHBhZ2UtPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6RGVsZXRlQ29va2llKHBhZ2UtPndlYlBhZ2VJ
RCgpLCBXVEY6Om51bGxvcHQsIGNvb2tpZU5hbWUpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiB9CiAKIHN0YXRpYyBTdHJpbmcgZG9tYWluQnlBZGRpbmdEb3RQcmVmaXhJZk5lZWRlZChT
dHJpbmcgZG9tYWluKQpAQCAtMjAwOCw3ICsyMDA4LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6dGFrZVNjcmVlbnNob3QoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IFN0cmluZyog
b3AKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gbV9uZXh0U2NyZWVuc2hvdENhbGxiYWNrSUQr
KzsKICAgICBtX3NjcmVlbnNob3RDYWxsYmFja3Muc2V0KGNhbGxiYWNrSUQsIFdURk1vdmUoY2Fs
bGJhY2spKTsKIAotICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJBdXRvbWF0
aW9uU2Vzc2lvblByb3h5OjpUYWtlU2NyZWVuc2hvdChwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJ
RCwgbm9kZUhhbmRsZSwgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCwgY2xpcFRvVmlld3BvcnQsIGNh
bGxiYWNrSUQpLCAwKTsKKyAgICBwYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vz
c2lvblByb3h5OjpUYWtlU2NyZWVuc2hvdChwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgbm9k
ZUhhbmRsZSwgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCwgY2xpcFRvVmlld3BvcnQsIGNhbGxiYWNr
SUQpLCAwKTsKIH0KIAogdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGlkVGFrZVNjcmVlbnNo
b3QodWludDY0X3QgY2FsbGJhY2tJRCwgY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGlt
YWdlRGF0YUhhbmRsZSwgY29uc3QgU3RyaW5nJiBlcnJvclR5cGUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwCmluZGV4IGVjZjVkYTBhOTEwYjYzOTQ4MGFj
MzJhNWZiMWIwZmIwY2ZmZmY2ZWIuLjhlMDdmMTI0YjY2ZDEyNjVmMTQyMGQwODUzMDhkNTcxOTVm
MjExOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJv
eHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3Bw
CkBAIC03OSw5ICs3OSw5IEBAIElQQzo6Q29ubmVjdGlvbiogRHJhd2luZ0FyZWFQcm94eTo6bWVz
c2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAogICAgIHJldHVybiBwcm9jZXNzKCkuY29ubmVj
dGlvbigpOwogfQogCi1ib29sIERyYXdpbmdBcmVhUHJveHk6OnNlbmRNZXNzYWdlKHN0ZDo6dW5p
cXVlX3B0cjxJUEM6OkVuY29kZXI+IGVuY29kZXIsIE9wdGlvblNldDxJUEM6OlNlbmRPcHRpb24+
IHNlbmRPcHRpb25zKQorYm9vbCBEcmF3aW5nQXJlYVByb3h5OjpzZW5kTWVzc2FnZShzdGQ6OnVu
aXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiBlbmNvZGVyLCBPcHRpb25TZXQ8SVBDOjpTZW5kT3B0aW9u
PiBzZW5kT3B0aW9ucywgT3B0aW9uYWw8c3RkOjpwYWlyPENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
SVBDOjpEZWNvZGVyKik+LCB1aW50NjRfdD4+JiYgYXN5bmNSZXBseUluZm8pCiB7Ci0gICAgcmV0
dXJuIHByb2Nlc3MoKS5zZW5kTWVzc2FnZShXVEZNb3ZlKGVuY29kZXIpLCBzZW5kT3B0aW9ucyk7
CisgICAgcmV0dXJuIHByb2Nlc3MoKS5zZW5kTWVzc2FnZShXVEZNb3ZlKGVuY29kZXIpLCBzZW5k
T3B0aW9ucywgV1RGTW92ZShhc3luY1JlcGx5SW5mbykpOwogfQogCiAjaWYgUExBVEZPUk0oTUFD
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCmluZGV4IDU2MDZj
NTExNjUzNGY0M2NmYzgwNmQ1MTFkNDFlZDk4Y2ZiMjUxNjIuLjQ4OTZjNDA0YmM4YjI1ZDY5MzYw
ZGU3ZDFjNTA5MzgzMjgyYjIzMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0RyYXdpbmdBcmVhUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9EcmF3aW5n
QXJlYVByb3h5LmgKQEAgLTEzMyw3ICsxMzMsNyBAQCBwcml2YXRlOgogCiAgICAgSVBDOjpDb25u
ZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IGZpbmFsOwogICAgIHVpbnQ2
NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9p
ZGVudGlmaWVyLnRvVUludDY0KCk7IH0KLSAgICBib29sIHNlbmRNZXNzYWdlKHN0ZDo6dW5pcXVl
X3B0cjxJUEM6OkVuY29kZXI+LCBPcHRpb25TZXQ8SVBDOjpTZW5kT3B0aW9uPikgZmluYWw7Cisg
ICAgYm9vbCBzZW5kTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiwgT3B0aW9u
U2V0PElQQzo6U2VuZE9wdGlvbj4sIE9wdGlvbmFsPHN0ZDo6cGFpcjxDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKElQQzo6RGVjb2RlciopPiwgdWludDY0X3Q+PiYmKSBmaW5hbDsKIAogICAgIC8vIE1l
c3NhZ2UgaGFuZGxlcnMuCiAgICAgLy8gRklYTUU6IFRoZXNlIHNob3VsZCBiZSBwdXJlIHZpcnR1
YWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5j
cHAKaW5kZXggMDczNGQyMjcxNjg1ZmVhNjQyMTA4OThjMTIxZTBjZjE1MzNlYzkwMS4uOGMxYWYy
NmZlYzkzZTY0NzIyMjU2Y2Q1NzVkM2RiMjA3NmFiY2IxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5LmNwcApAQCAtNTI4LDExICs1MjgsMTEg
QEAgdWludDY0X3QgUHJvdmlzaW9uYWxQYWdlUHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlv
bklEKCkgY29uc3QKICAgICByZXR1cm4gbV93ZWJQYWdlSUQudG9VSW50NjQoKTsKIH0KIAotYm9v
bCBQcm92aXNpb25hbFBhZ2VQcm94eTo6c2VuZE1lc3NhZ2Uoc3RkOjp1bmlxdWVfcHRyPElQQzo6
RW5jb2Rlcj4gZW5jb2RlciwgT3B0aW9uU2V0PElQQzo6U2VuZE9wdGlvbj4gc2VuZE9wdGlvbnMp
Citib29sIFByb3Zpc2lvbmFsUGFnZVByb3h5OjpzZW5kTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8
SVBDOjpFbmNvZGVyPiBlbmNvZGVyLCBPcHRpb25TZXQ8SVBDOjpTZW5kT3B0aW9uPiBzZW5kT3B0
aW9ucywgT3B0aW9uYWw8c3RkOjpwYWlyPENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSVBDOjpEZWNv
ZGVyKik+LCB1aW50NjRfdD4+JiYgYXN5bmNSZXBseUluZm8pCiB7CiAgICAgLy8gU2VuZCBtZXNz
YWdlcyB2aWEgdGhlIFdlYlByb2Nlc3NQcm94eSBpbnN0ZWFkIG9mIHRoZSBJUEM6OkNvbm5lY3Rp
b24gc2luY2UgQXV4aWxpYXJ5UHJvY2Vzc1Byb3h5IGltcGxlbWVudHMgcXVldWVpbmcgb2YgbWVz
c2FnZXMKICAgICAvLyB3aGlsZSB0aGUgcHJvY2VzcyBpcyBzdGlsbCBsYXVuY2hpbmcuCi0gICAg
cmV0dXJuIG1fcHJvY2Vzcy0+c2VuZE1lc3NhZ2UoV1RGTW92ZShlbmNvZGVyKSwgc2VuZE9wdGlv
bnMpOworICAgIHJldHVybiBtX3Byb2Nlc3MtPnNlbmRNZXNzYWdlKFdURk1vdmUoZW5jb2Rlciks
IHNlbmRPcHRpb25zLCBXVEZNb3ZlKGFzeW5jUmVwbHlJbmZvKSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUHJvdmlzaW9u
YWxQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVBy
b3h5LmgKaW5kZXggZmQ2ZjUwMzBkMGNiNzVmZTc0ZWJjZjc1YmY2MzNjYmMxODY4ODNiNi4uYzE3
NzQ1MWMxNzViMWZmMDljZTI0ZDYwMTljNjQ3MWI3MzVlYzhmYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5oCkBAIC0xMDYsNyArMTA2LDcgQEAg
cHJpdmF0ZToKICAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIKICAgICBJUEM6OkNvbm5lY3Rpb24q
IG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QgZmluYWw7CiAgICAgdWludDY0X3QgbWVz
c2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIHNlbmRNZXNz
YWdlKHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+LCBPcHRpb25TZXQ8SVBDOjpTZW5kT3B0
aW9uPikgZmluYWw7CisgICAgYm9vbCBzZW5kTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpF
bmNvZGVyPiwgT3B0aW9uU2V0PElQQzo6U2VuZE9wdGlvbj4sIE9wdGlvbmFsPHN0ZDo6cGFpcjxD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKElQQzo6RGVjb2RlciopPiwgdWludDY0X3Q+PiYmKSBmaW5h
bDsKIAogICAgIHZvaWQgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbkFzeW5jKFdlYkNv
cmU6OkZyYW1lSWRlbnRpZmllciwgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYsIFdlYkNv
cmU6OlBvbGljeUNoZWNrSWRlbnRpZmllciwgdWludDY0X3QgbmF2aWdhdGlvbklELCBOYXZpZ2F0
aW9uQWN0aW9uRGF0YSYmLCBGcmFtZUluZm9EYXRhJiYsCiAgICAgICAgIE9wdGlvbmFsPFdlYlBh
Z2VQcm94eUlkZW50aWZpZXI+IG9yaWdpbmF0aW5nUGFnZUlELCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmIG9yaWdpbmFsUmVxdWVzdCwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYs
IElQQzo6Rm9ybURhdGFSZWZlcmVuY2UmJiByZXF1ZXN0Qm9keSwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1JlbW90ZVdlYkluc3BlY3RvclByb3h5LmNwcAppbmRleCBjMGU0NTI3
NDhkMThhMTMxMjJkYTAwYmVlNTRiNTIwOWI4NjYxNjg2Li5mY2RhZTE2NTA1NmI3NDliYjVjNDA1
YjAyOTgyMWUyOTEwODcwNmEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9S
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHkuY3BwCkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHk6OmxvYWQoY29uc3QgU3RyaW5nJiBkZWJ1Z2dhYmxlVHlwZSwgY29u
c3QgU3RyaW5nJiBiCiAgICAgbV9kZWJ1Z2dhYmxlVHlwZSA9IGRlYnVnZ2FibGVUeXBlOwogICAg
IG1fYmFja2VuZENvbW1hbmRzVVJMID0gYmFja2VuZENvbW1hbmRzVVJMOwogCi0gICAgbV9pbnNw
ZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6
OkluaXRpYWxpemUoZGVidWdnYWJsZVR5cGUsIGJhY2tlbmRDb21tYW5kc1VSTCksIG1faW5zcGVj
dG9yUGFnZS0+d2ViUGFnZUlEKCkpOworICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdl
czo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OkluaXRpYWxpemUoZGVidWdnYWJsZVR5cGUsIGJhY2tl
bmRDb21tYW5kc1VSTCkpOwogICAgIG1faW5zcGVjdG9yUGFnZS0+bG9hZFJlcXVlc3QoVVJMKFVS
TCgpLCBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpKSk7CiB9CiAKQEAgLTkw
LDcgKzkwLDcgQEAgdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6c2hvdygpCiAKIHZvaWQg
UmVtb3RlV2ViSW5zcGVjdG9yUHJveHk6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpCiB7Ci0gICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNz
YWdlczo6UmVtb3RlV2ViSW5zcGVjdG9yVUk6OlNlbmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdl
KSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgbV9pbnNwZWN0b3JQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVXZWJJbnNwZWN0b3JVSTo6U2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KG1lc3NhZ2UpKTsKIH0KIAogdm9pZCBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eTo6ZnJvbnRlbmRE
aWRDbG9zZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TdXNwZW5kZWRQ
YWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU3VzcGVuZGVkUGFnZVByb3h5
LmNwcAppbmRleCBhYjgwMzQxZjcyNThiOTg4MmI1MTcyZmUzMjJhYjgxODI1MDc5ODVhLi5mYzQ3
ZDIzNDUwOGM0NTdkYzE5MGVkN2M5MzQ2NDYzNWRkNGY5N2UzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9TdXNwZW5kZWRQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1N1c3BlbmRlZFBhZ2VQcm94eS5jcHAKQEAgLTI3MywxMSArMjczLDExIEBA
IHVpbnQ2NF90IFN1c3BlbmRlZFBhZ2VQcm94eTo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQo
KSBjb25zdAogICAgIHJldHVybiBtX3dlYlBhZ2VJRC50b1VJbnQ2NCgpOwogfQogCi1ib29sIFN1
c3BlbmRlZFBhZ2VQcm94eTo6c2VuZE1lc3NhZ2Uoc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rl
cj4gZW5jb2RlciwgT3B0aW9uU2V0PElQQzo6U2VuZE9wdGlvbj4gc2VuZE9wdGlvbnMpCitib29s
IFN1c3BlbmRlZFBhZ2VQcm94eTo6c2VuZE1lc3NhZ2Uoc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5j
b2Rlcj4gZW5jb2RlciwgT3B0aW9uU2V0PElQQzo6U2VuZE9wdGlvbj4gc2VuZE9wdGlvbnMsIE9w
dGlvbmFsPHN0ZDo6cGFpcjxDb21wbGV0aW9uSGFuZGxlcjx2b2lkKElQQzo6RGVjb2RlciopPiwg
dWludDY0X3Q+PiYmIGFzeW5jUmVwbHlJbmZvKQogewogICAgIC8vIFNlbmQgbWVzc2FnZXMgdmlh
IHRoZSBXZWJQcm9jZXNzUHJveHkgaW5zdGVhZCBvZiB0aGUgSVBDOjpDb25uZWN0aW9uIHNpbmNl
IEF1eGlsaWFyeVByb2Nlc3NQcm94eSBpbXBsZW1lbnRzIHF1ZXVlaW5nIG9mIG1lc3NhZ2VzCiAg
ICAgLy8gd2hpbGUgdGhlIHByb2Nlc3MgaXMgc3RpbGwgbGF1bmNoaW5nLgotICAgIHJldHVybiBt
X3Byb2Nlc3MtPnNlbmRNZXNzYWdlKFdURk1vdmUoZW5jb2RlciksIHNlbmRPcHRpb25zKTsKKyAg
ICByZXR1cm4gbV9wcm9jZXNzLT5zZW5kTWVzc2FnZShXVEZNb3ZlKGVuY29kZXIpLCBzZW5kT3B0
aW9ucywgV1RGTW92ZShhc3luY1JlcGx5SW5mbykpOwogfQogCiAjaWYgIUxPR19ESVNBQkxFRApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU3VzcGVuZGVkUGFnZVByb3h5Lmgg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TdXNwZW5kZWRQYWdlUHJveHkuaAppbmRleCAyYzYy
YzI3MDQ1MzBmNWFhYTQ2OWVhZjRkYTcwNTdhMDBhOWVhMjBkLi5lZjdhYTJkMjlhNDYxNTcwM2Nh
NmZhZjYxNzViOTNiYjMyMGNiMjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9TdXNwZW5kZWRQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TdXNw
ZW5kZWRQYWdlUHJveHkuaApAQCAtOTcsNyArOTcsNyBAQCBwcml2YXRlOgogICAgIC8vIElQQzo6
TWVzc2FnZVNlbmRlcgogICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rp
b24oKSBjb25zdCBmaW5hbDsKICAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25J
RCgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgc2VuZE1lc3NhZ2Uoc3RkOjp1bmlxdWVfcHRyPElQ
Qzo6RW5jb2Rlcj4sIE9wdGlvblNldDxJUEM6OlNlbmRPcHRpb24+KSBmaW5hbDsKKyAgICBib29s
IHNlbmRNZXNzYWdlKHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+LCBPcHRpb25TZXQ8SVBD
OjpTZW5kT3B0aW9uPiwgT3B0aW9uYWw8c3RkOjpwYWlyPENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
SVBDOjpEZWNvZGVyKik+LCB1aW50NjRfdD4+JiYpIGZpbmFsOwogCiAgICAgV2ViUGFnZVByb3h5
JiBtX3BhZ2U7CiAgICAgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgbV93ZWJQYWdlSUQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Vc2VyTWVkaWFQZXJt
aXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAKaW5kZXggN2YzYmQxMjI1Zjg3YWJkZTdlMmQ2
NDVhNDdlMjlhYzFlMTJiZTRlYi4uN2I3ZGM1Zjg4ZDg1YTBiNjAyMWY3YzdiNGM3MmZiNmM4ODdj
YjRiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVXNlck1lZGlhUGVybWlz
c2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcApAQCAtODQsNyArODQs
NyBAQCBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eTo6VXNlck1lZGlhUGVy
bWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkoVwogCiBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXJQcm94eTo6flVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5KCkK
IHsKLSAgICBtX3BhZ2UucHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlN0b3BNZWRp
YUNhcHR1cmUgeyB9LCBtX3BhZ2Uud2ViUGFnZUlEKCkpOworICAgIG1fcGFnZS5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpTdG9wTWVkaWFDYXB0dXJlIHsgfSk7CiAjaWYgRU5BQkxFKE1FRElBX1NU
UkVBTSkKICAgICBVc2VyTWVkaWFQcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkucmV2b2tlU2Fu
ZGJveEV4dGVuc2lvbnNJZk5lZWRlZChwYWdlKCkucHJvY2VzcygpKTsKICAgICBwcm94aWVzKCku
cmVtb3ZlKHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViRWRp
dENvbW1hbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJFZGl0Q29tbWFu
ZFByb3h5LmNwcAppbmRleCAwZmU2ZDgzNDk4MDk4Yzk3ZTQ2N2IzNjg1YjNkNmIzNjdlNzJjZDY3
Li4wZGJlMGFmYjQzM2YwMjE3MTU5ZTE0NmY0YmMwODUzZWQ1MTZmZDg3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJFZGl0Q29tbWFuZFByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJFZGl0Q29tbWFuZFByb3h5LmNwcApAQCAtNTUsNyArNTUs
NyBAQCB2b2lkIFdlYkVkaXRDb21tYW5kUHJveHk6OnVuYXBwbHkoKQogICAgIGlmICghbV9wYWdl
IHx8ICFtX3BhZ2UtPmhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IG1fcGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlVuYXBwbHlFZGl0Q29t
bWFuZChtX2NvbW1hbmRJRCksIG1fcGFnZS0+d2ViUGFnZUlEKCksIElQQzo6U2VuZE9wdGlvbjo6
RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1JlcGx5KTsKKyAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlVuYXBwbHlFZGl0Q29tbWFuZChtX2NvbW1hbmRJRCks
IElQQzo6U2VuZE9wdGlvbjo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0aW5nRm9yU3luY1Jl
cGx5KTsKICAgICBtX3BhZ2UtPnJlZ2lzdGVyRWRpdENvbW1hbmQoKnRoaXMsIFVuZG9PclJlZG86
OlJlZG8pOwogfQogCkBAIC02NCw3ICs2NCw3IEBAIHZvaWQgV2ViRWRpdENvbW1hbmRQcm94eTo6
cmVhcHBseSgpCiAgICAgaWYgKCFtX3BhZ2UgfHwgIW1fcGFnZS0+aGFzUnVubmluZ1Byb2Nlc3Mo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6UmVhcHBseUVkaXRDb21tYW5kKG1fY29tbWFuZElEKSwgbV9wYWdlLT53ZWJQ
YWdlSUQoKSwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdG
b3JTeW5jUmVwbHkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVhcHBs
eUVkaXRDb21tYW5kKG1fY29tbWFuZElEKSwgSVBDOjpTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3Nh
Z2VFdmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkpOwogICAgIG1fcGFnZS0+cmVnaXN0ZXJFZGl0
Q29tbWFuZCgqdGhpcywgVW5kb09yUmVkbzo6VW5kbyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViRnJhbWVQcm94eS5jcHAKaW5kZXggYzFjOTU4YmQ0ODE0ZmE0MGY5MjU0NjRjM2Vi
YzIxZGY2NTYwYzRmMC4uNGQzMmYwMzVmMGE0MmQ5Y2I2ZDNjOWRiYzZmNDIwOTBjM2RiMjIzNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViRnJhbWVQcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViRnJhbWVQcm94eS5jcHAKQEAgLTgzLDcgKzgz
LDcgQEAgdm9pZCBXZWJGcmFtZVByb3h5Ojpsb2FkVVJMKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIHJlZmVycmVyKQogICAgIGlmICghbV9wYWdlKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBtX3BhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpMb2FkVVJMSW5GcmFt
ZSh1cmwsIHJlZmVycmVyLCBtX2ZyYW1lSUQpLCBtX3BhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkxvYWRVUkxJbkZyYW1lKHVybCwgcmVmZXJy
ZXIsIG1fZnJhbWVJRCkpOwogfQogCiB2b2lkIFdlYkZyYW1lUHJveHk6OmxvYWREYXRhKGNvbnN0
IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YSwgY29uc3QgU3RyaW5nJiBNSU1FVHlwZSwgY29uc3Qg
U3RyaW5nJiBlbmNvZGluZ05hbWUsIGNvbnN0IFVSTCYgYmFzZVVSTCkKQEAgLTkyLDcgKzkyLDcg
QEAgdm9pZCBXZWJGcmFtZVByb3h5Ojpsb2FkRGF0YShjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2Um
IGRhdGEsIGNvbnN0IFN0cmluZyYgTUlNRVQKICAgICBpZiAoIW1fcGFnZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV9wYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6TG9h
ZERhdGFJbkZyYW1lKGRhdGEsIE1JTUVUeXBlLCBlbmNvZGluZ05hbWUsIGJhc2VVUkwsIG1fZnJh
bWVJRCksIG1fcGFnZS0+d2ViUGFnZUlEKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6TG9hZERhdGFJbkZyYW1lKGRhdGEsIE1JTUVUeXBlLCBlbmNvZGluZ05hbWUsIGJh
c2VVUkwsIG1fZnJhbWVJRCkpOwogfQogCiB2b2lkIFdlYkZyYW1lUHJveHk6OnN0b3BMb2FkaW5n
KCkgY29uc3QKQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIFdlYkZyYW1lUHJveHk6OnN0b3BMb2Fk
aW5nKCkgY29uc3QKICAgICBpZiAoIW1fcGFnZS0+aGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV9wYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6U3RvcExvYWRpbmdGcmFtZShtX2ZyYW1lSUQpLCBtX3BhZ2UtPndlYlBhZ2VJRCgpKTsKKyAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlN0b3BMb2FkaW5nRnJhbWUobV9mcmFt
ZUlEKSk7CiB9CiAgICAgCiBib29sIFdlYkZyYW1lUHJveHk6OmNhblByb3ZpZGVTb3VyY2UoKSBj
b25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJv
eHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuY3BwCmlu
ZGV4IDc0MmM3MDgwNmI5NTdmNjdjNWU2MDU3OTczZmZhMmZmNWY2Y2FmMTIuLjUzYWIzMzBmNmM4
YWZiNTM5YjZiY2YzYzFlYzhiMDk3MThiZTYyZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5jcHAKQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIFdlYklu
c3BlY3RvclByb3h5OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdl
KQogICAgIGlmICghbV9pbnNwZWN0b3JQYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2lu
c3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U2Vu
ZE1lc3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2UpLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgp
KTsKKyAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpT
ZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVzc2FnZSkpOwogfQogCiAvLyBQdWJsaWMgQVBJcwpAQCAt
MTI4LDggKzEyOCw4IEBAIHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmNvbm5lY3QoKQogCiAgICAg
Y3JlYXRlRnJvbnRlbmRQYWdlKCk7CiAKLSAgICBtX2luc3BlY3RlZFBhZ2UtPnByb2Nlc3MoKS5z
ZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JJbnRlcnJ1cHREaXNwYXRjaGVyOjpOb3RpZnlOZWVk
RGVidWdnZXJCcmVhaygpLCAwKTsKLSAgICBtX2luc3BlY3RlZFBhZ2UtPnByb2Nlc3MoKS5zZW5k
KE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3coKSwgbV9pbnNwZWN0ZWRQYWdlLT53ZWJQYWdl
SUQoKSk7CisgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JJ
bnRlcnJ1cHREaXNwYXRjaGVyOjpOb3RpZnlOZWVkRGVidWdnZXJCcmVhaygpLCAwKTsKKyAgICBt
X2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2hvdygpKTsKIH0K
IAogdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2hvdygpCkBAIC0xNjMsNyArMTYzLDcgQEAgdm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6Y2xvc2UoKQogICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBtX2luc3BlY3RlZFBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3I6OkNsb3NlKCksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlE
KCkpOworICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpD
bG9zZSgpKTsKIAogICAgIGNsb3NlRnJvbnRlbmRQYWdlQW5kV2luZG93KCk7CiB9CkBAIC0yMTIs
NyArMjEyLDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6dXBkYXRlRm9yTmV3UGFnZVByb2Nl
c3MoV2ViUGFnZVByb3h5KiBpbnNwZWN0ZWRQYWdlKQogICAgIG1faW5zcGVjdGVkUGFnZS0+cHJv
Y2VzcygpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbnNwZWN0ZWRQYWdlLT53ZWJQYWdlSUQoKSwgKnRoaXMp
OwogCiAgICAgaWYgKG1faW5zcGVjdG9yUGFnZSkKLSAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5w
cm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlVwZGF0ZUNvbm5lY3Rpb24o
KSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgICAgIG1faW5zcGVjdG9yUGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlVwZGF0ZUNvbm5lY3Rpb24oKSk7CiB9
CiAKIHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNldEZyb250ZW5kQ29ubmVjdGlvbihJUEM6OkF0
dGFjaG1lbnQgY29ubmVjdGlvbklkZW50aWZpZXIpCkBAIC0yMjAsNyArMjIwLDcgQEAgdm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6c2V0RnJvbnRlbmRDb25uZWN0aW9uKElQQzo6QXR0YWNobWVudCBj
b25uZWN0aW9uSWRlbnRpZmkKICAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yOjpTZXRGcm9udGVuZENvbm5lY3Rpb24oY29ubmVjdGlvbklkZW50aWZpZXIpLCBt
X2luc3BlY3RlZFBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2V0RnJvbnRlbmRDb25uZWN0aW9uKGNvbm5lY3Rpb25J
ZGVudGlmaWVyKSk7CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnNob3dDb25zb2xlKCkK
QEAgLTIzMCw3ICsyMzAsNyBAQCB2b2lkIFdlYkluc3BlY3RvclByb3h5OjpzaG93Q29uc29sZSgp
CiAKICAgICBjcmVhdGVGcm9udGVuZFBhZ2UoKTsKIAotICAgIG1faW5zcGVjdGVkUGFnZS0+cHJv
Y2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2hvd0NvbnNvbGUoKSwgbV9pbnNw
ZWN0ZWRQYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJJbnNwZWN0b3I6OlNob3dDb25zb2xlKCkpOwogfQogCiB2b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpzaG93UmVzb3VyY2VzKCkKQEAgLTI0MCw3ICsyNDAsNyBAQCB2b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpzaG93UmVzb3VyY2VzKCkKIAogICAgIGNyZWF0ZUZyb250ZW5kUGFnZSgpOwog
Ci0gICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVj
dG9yOjpTaG93UmVzb3VyY2VzKCksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlEKCkpOworICAg
IG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTaG93UmVzb3Vy
Y2VzKCkpOwogfQogCiB2b2lkIFdlYkluc3BlY3RvclByb3h5OjpzaG93TWFpblJlc291cmNlRm9y
RnJhbWUoV2ViRnJhbWVQcm94eSogZnJhbWUpCkBAIC0yNTAsNyArMjUwLDcgQEAgdm9pZCBXZWJJ
bnNwZWN0b3JQcm94eTo6c2hvd01haW5SZXNvdXJjZUZvckZyYW1lKFdlYkZyYW1lUHJveHkqIGZy
YW1lKQogCiAgICAgY3JlYXRlRnJvbnRlbmRQYWdlKCk7CiAKLSAgICBtX2luc3BlY3RlZFBhZ2Ut
PnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3dNYWluUmVzb3VyY2VG
b3JGcmFtZShmcmFtZS0+ZnJhbWVJRCgpKSwgbV9pbnNwZWN0ZWRQYWdlLT53ZWJQYWdlSUQoKSk7
CisgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlNob3dN
YWluUmVzb3VyY2VGb3JGcmFtZShmcmFtZS0+ZnJhbWVJRCgpKSk7CiB9CiAKIHZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OmF0dGFjaEJvdHRvbSgpCkBAIC0yODEsMTkgKzI4MSwxOSBAQCB2b2lkIFdl
Ykluc3BlY3RvclByb3h5OjphdHRhY2goQXR0YWNobWVudFNpZGUgc2lkZSkKICAgICBpZiAobV9p
c1Zpc2libGUpCiAgICAgICAgIGluc3BlY3RvclBhZ2VQcmVmZXJlbmNlcygpLnNldEluc3BlY3Rv
clN0YXJ0c0F0dGFjaGVkKHRydWUpOwogCi0gICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCku
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTZXRBdHRhY2hlZCh0cnVlKSwgbV9pbnNwZWN0
ZWRQYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3I6OlNldEF0dGFjaGVkKHRydWUpKTsKIAogICAgIHN3aXRjaCAobV9hdHRh
Y2htZW50U2lkZSkgewogICAgIGNhc2UgQXR0YWNobWVudFNpZGU6OkJvdHRvbToKLSAgICAgICAg
bV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6
OkF0dGFjaGVkQm90dG9tKCksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOworICAgICAg
ICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hl
ZEJvdHRvbSgpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEF0dGFjaG1lbnRTaWRlOjpS
aWdodDoKLSAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkUmlnaHQoKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdl
SUQoKSk7CisgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVj
dG9yVUk6OkF0dGFjaGVkUmlnaHQoKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBBdHRh
Y2htZW50U2lkZTo6TGVmdDoKLSAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkTGVmdCgpLCBtX2luc3BlY3RvclBh
Z2UtPndlYlBhZ2VJRCgpKTsKKyAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNoZWRMZWZ0KCkpOwogICAgICAgICBicmVhazsKICAgICB9
CiAKQEAgLTMxMCw4ICszMTAsOCBAQCB2b2lkIFdlYkluc3BlY3RvclByb3h5OjpkZXRhY2goKQog
ICAgIGlmIChtX2lzVmlzaWJsZSkKICAgICAgICAgaW5zcGVjdG9yUGFnZVByZWZlcmVuY2VzKCku
c2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoZmFsc2UpOwogCi0gICAgbV9pbnNwZWN0ZWRQYWdl
LT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTZXRBdHRhY2hlZChmYWxz
ZSksIG1faW5zcGVjdGVkUGFnZS0+d2ViUGFnZUlEKCkpOwotICAgIG1faW5zcGVjdG9yUGFnZS0+
cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpEZXRhY2hlZCgpLCBtX2lu
c3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3Rvcjo6U2V0QXR0YWNoZWQoZmFsc2UpKTsKKyAgICBtX2luc3BlY3Rv
clBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpEZXRhY2hlZCgpKTsKIAogICAg
IHBsYXRmb3JtRGV0YWNoKCk7CiB9CkBAIC0zNDQsOSArMzQ0LDkgQEAgdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6dG9nZ2xlUGFnZVByb2ZpbGluZygpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
IChtX2lzUHJvZmlsaW5nUGFnZSkKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCku
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpTdG9wUGFnZVByb2ZpbGluZygpLCBtX2luc3Bl
Y3RlZFBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlN0b3BQYWdlUHJvZmlsaW5nKCkpOwogICAgIGVsc2UKLSAg
ICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVj
dG9yOjpTdGFydFBhZ2VQcm9maWxpbmcoKSwgbV9pbnNwZWN0ZWRQYWdlLT53ZWJQYWdlSUQoKSk7
CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjpT
dGFydFBhZ2VQcm9maWxpbmcoKSk7CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnRvZ2ds
ZUVsZW1lbnRTZWxlY3Rpb24oKQpAQCAtMzU2LDEwICszNTYsMTAgQEAgdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6dG9nZ2xlRWxlbWVudFNlbGVjdGlvbigpCiAKICAgICBpZiAobV9lbGVtZW50U2Vs
ZWN0aW9uQWN0aXZlKSB7CiAgICAgICAgIG1faWdub3JlRWxlbWVudFNlbGVjdGlvbkNoYW5nZSA9
IHRydWU7Ci0gICAgICAgIG1faW5zcGVjdGVkUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6
OldlYkluc3BlY3Rvcjo6U3RvcEVsZW1lbnRTZWxlY3Rpb24oKSwgbV9pbnNwZWN0ZWRQYWdlLT53
ZWJQYWdlSUQoKSk7CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yOjpTdG9wRWxlbWVudFNlbGVjdGlvbigpKTsKICAgICB9IGVsc2UgewogICAgICAg
ICBjb25uZWN0KCk7Ci0gICAgICAgIG1faW5zcGVjdGVkUGFnZS0+cHJvY2VzcygpLnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3Rvcjo6U3RhcnRFbGVtZW50U2VsZWN0aW9uKCksIG1faW5zcGVjdGVk
UGFnZS0+d2ViUGFnZUlEKCkpOworICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYkluc3BlY3Rvcjo6U3RhcnRFbGVtZW50U2VsZWN0aW9uKCkpOwogICAgIH0KIH0KIApA
QCAtNDEyLDcgKzQxMiw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6Om9wZW5Mb2NhbEluc3Bl
Y3RvckZyb250ZW5kKGJvb2wgY2FuQXR0YWNoLCBib29sIHVuZGVyVGVzCiAgICAgaWYgKCFtX2lu
c3BlY3RvclBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1faW5zcGVjdG9yUGFnZS0+cHJv
Y2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpFc3RhYmxpc2hDb25uZWN0aW9u
KG1faW5zcGVjdGVkUGFnZS0+aWRlbnRpZmllcigpLCBtX3VuZGVyVGVzdCwgaW5zcGVjdGlvbkxl
dmVsKCkpLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICBtX2luc3BlY3RvclBh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpFc3RhYmxpc2hDb25uZWN0aW9uKG1f
aW5zcGVjdGVkUGFnZS0+aWRlbnRpZmllcigpLCBtX3VuZGVyVGVzdCwgaW5zcGVjdGlvbkxldmVs
KCkpKTsKIAogICAgIEFTU0VSVCghbV9pc0FjdGl2ZUZyb250ZW5kKTsKICAgICBtX2lzQWN0aXZl
RnJvbnRlbmQgPSB0cnVlOwpAQCAtNDIzLDI2ICs0MjMsMjYgQEAgdm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6b3BlbkxvY2FsSW5zcGVjdG9yRnJvbnRlbmQoYm9vbCBjYW5BdHRhY2gsIGJvb2wgdW5k
ZXJUZXMKICAgICAgICAgbV9pc0F0dGFjaGVkID0gc2hvdWxkT3BlbkF0dGFjaGVkKCk7CiAgICAg
ICAgIG1fYXR0YWNobWVudFNpZGUgPSBzdGF0aWNfY2FzdDxBdHRhY2htZW50U2lkZT4oaW5zcGVj
dG9yUGFnZVByZWZlcmVuY2VzKCkuaW5zcGVjdG9yQXR0YWNobWVudFNpZGUoKSk7CiAKLSAgICAg
ICAgbV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9y
OjpTZXRBdHRhY2hlZChtX2lzQXR0YWNoZWQpLCBtX2luc3BlY3RlZFBhZ2UtPndlYlBhZ2VJRCgp
KTsKKyAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6
OlNldEF0dGFjaGVkKG1faXNBdHRhY2hlZCkpOwogCiAgICAgICAgIGlmIChtX2lzQXR0YWNoZWQp
IHsKICAgICAgICAgICAgIHN3aXRjaCAobV9hdHRhY2htZW50U2lkZSkgewogICAgICAgICAgICAg
Y2FzZSBBdHRhY2htZW50U2lkZTo6Qm90dG9tOgotICAgICAgICAgICAgICAgIG1faW5zcGVjdG9y
UGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZEJv
dHRvbSgpLCBtX2luc3BlY3RvclBhZ2UtPndlYlBhZ2VJRCgpKTsKKyAgICAgICAgICAgICAgICBt
X2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpBdHRhY2hlZEJv
dHRvbSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBBdHRh
Y2htZW50U2lkZTo6UmlnaHQ6Ci0gICAgICAgICAgICAgICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkUmlnaHQoKSwgbV9p
bnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgICAgICAgICAgICAgbV9pbnNwZWN0b3JQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNoZWRSaWdodCgpKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBBdHRhY2htZW50U2lkZTo6
TGVmdDoKLSAgICAgICAgICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6QXR0YWNoZWRMZWZ0KCksIG1faW5zcGVjdG9yUGFnZS0+
d2ViUGFnZUlEKCkpOworICAgICAgICAgICAgICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yVUk6OkF0dGFjaGVkTGVmdCgpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2luc3Bl
Y3RvclBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RGV0YWNo
ZWQoKSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgICAgICAgICBtX2luc3Bl
Y3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjpEZXRhY2hlZCgpKTsKIAot
ICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JVSTo6U2V0RG9ja2luZ1VuYXZhaWxhYmxlKCFtX2NhbkF0dGFjaCksIG1faW5zcGVjdG9y
UGFnZS0+d2ViUGFnZUlEKCkpOworICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYkluc3BlY3RvclVJOjpTZXREb2NraW5nVW5hdmFpbGFibGUoIW1fY2FuQXR0YWNoKSk7
CiAgICAgfQogCiAgICAgLy8gTm90aWZ5IFdlYktpdCBjbGllbnQgd2hlbiBhIGxvY2FsIGluc3Bl
Y3RvciBhdHRhY2hlcyBzbyB0aGF0IGl0IG1heSBpbnN0YWxsIGRlbGVnYXRlcyBwcmlvciB0byB0
aGUgX1dLSW5zcGVjdG9yIGxvYWRpbmcgaXRzIGZyb250ZW5kLgpAQCAtNDY1LDcgKzQ2NSw3IEBA
IHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6Om9wZW4oKQogCiAgICAgU2V0Rm9yU2NvcGU8Ym9vbD4g
aXNPcGVuaW5nKG1faXNPcGVuaW5nLCB0cnVlKTsKICAgICBtX2lzVmlzaWJsZSA9IHRydWU7Ci0g
ICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9y
VUk6OlNldElzVmlzaWJsZShtX2lzVmlzaWJsZSksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlE
KCkpOworICAgIG1faW5zcGVjdG9yUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6
OlNldElzVmlzaWJsZShtX2lzVmlzaWJsZSkpOwogCiAgICAgaWYgKG1faXNBdHRhY2hlZCkKICAg
ICAgICAgcGxhdGZvcm1BdHRhY2goKTsKQEAgLTQ5Miw3ICs0OTIsNyBAQCB2b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpjbG9zZUZyb250ZW5kUGFnZUFuZFdpbmRvdygpCiAKICAgICB1bnRyYWNrSW5z
cGVjdG9yUGFnZShtX2luc3BlY3RvclBhZ2UpOwogCi0gICAgbV9pbnNwZWN0b3JQYWdlLT5wcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNldElzVmlzaWJsZShtX2lzVmlz
aWJsZSksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkpOworICAgIG1faW5zcGVjdG9yUGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNldElzVmlzaWJsZShtX2lzVmlzaWJs
ZSkpOwogICAgIG1faW5zcGVjdG9yUGFnZS0+cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZl
cihNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9p
bnNwZWN0ZWRQYWdlLT5pZGVudGlmaWVyKCkpOwogCiAgICAgaWYgKG1faXNBY3RpdmVGcm9udGVu
ZCkgewpAQCAtNTYxLDcgKzU2MSw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmF0dGFjaEF2
YWlsYWJpbGl0eUNoYW5nZWQoYm9vbCBhdmFpbGFibGUpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmIChtX2luc3BlY3RvclBhZ2UgJiYgIW1fdW5kZXJUZXN0KQotICAgICAgICBtX2luc3BlY3Rv
clBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U2V0RG9ja2lu
Z1VuYXZhaWxhYmxlKCFtX2NhbkF0dGFjaCksIG1faW5zcGVjdG9yUGFnZS0+d2ViUGFnZUlEKCkp
OworICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJ
OjpTZXREb2NraW5nVW5hdmFpbGFibGUoIW1fY2FuQXR0YWNoKSk7CiAKICAgICBwbGF0Zm9ybUF0
dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQobV9jYW5BdHRhY2gpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggODMzNmIwYzEwOWY5N2NiYTI0YjZmOGIzMjIw
ZTYzMzRlZTMzMmE4NS4uNjI3MmEwMGIyMWQ5YWZiNTJkMzdhYmExZWM1ZTg3MWIyM2IwNTI5OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC02MzMsNyArNjMz
LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFVJQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6
OlVJQ2xpZW50PiYmIHVpQ2xpZW50KQogICAgIG1fdWlDbGllbnQgPSBXVEZNb3ZlKHVpQ2xpZW50
KTsKIAogICAgIGlmIChoYXNSdW5uaW5nUHJvY2VzcygpKQotICAgICAgICBtX3Byb2Nlc3MtPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldENhblJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbCht
X3VpQ2xpZW50LT5jYW5SdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoKSksIG1fd2ViUGFnZUlE
KTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0Q2FuUnVuQmVmb3JlVW5sb2Fk
Q29uZmlybVBhbmVsKG1fdWlDbGllbnQtPmNhblJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbCgp
KSk7CiAKICAgICBzZXRDYW5SdW5Nb2RhbChtX3VpQ2xpZW50LT5jYW5SdW5Nb2RhbCgpKTsKICAg
ICBzZXROZWVkc0ZvbnRBdHRyaWJ1dGVzKG1fdWlDbGllbnQtPm5lZWRzRm9udEF0dHJpYnV0ZXMo
KSk7CkBAIC02NTAsNyArNjUwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldEljb25Mb2FkaW5n
Q2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6Okljb25Mb2FkaW5nQ2xpZW50PiYKICAgICBpZiAo
IWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0VXNlSWNvbkxvYWRpbmdDbGllbnQoaGFzQ2xpZW50
KSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFVzZUljb25M
b2FkaW5nQ2xpZW50KGhhc0NsaWVudCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0UGFn
ZUxvYWRTdGF0ZU9ic2VydmVyKHN0ZDo6dW5pcXVlX3B0cjxQYWdlTG9hZFN0YXRlOjpPYnNlcnZl
cj4mJiBvYnNlcnZlcikKQEAgLTk1NSw3ICs5NTUsNyBAQCBSZWZQdHI8QVBJOjpOYXZpZ2F0aW9u
PiBXZWJQYWdlUHJveHk6OmxhdW5jaFByb2Nlc3NGb3JSZWxvYWQoKQogICAgIH0KIAogICAgIC8v
IFdlIGFsbG93IHN0YWxlIGNvbnRlbnQgd2hlbiByZWxvYWRpbmcgYSBXZWJQcm9jZXNzIHRoYXQn
cyBiZWVuIGtpbGxlZCBvciBjcmFzaGVkLgotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6R29Ub0JhY2tGb3J3YXJkSXRlbShuYXZpZ2F0aW9uLT5uYXZpZ2F0aW9uSUQoKSwg
bV9iYWNrRm9yd2FyZExpc3QtPmN1cnJlbnRJdGVtKCktPml0ZW1JRCgpLCBGcmFtZUxvYWRUeXBl
OjpJbmRleGVkQmFja0ZvcndhcmQsIFNob3VsZFRyZWF0QXNDb250aW51aW5nTG9hZDo6Tm8sIFdU
Rjo6bnVsbG9wdCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpH
b1RvQmFja0ZvcndhcmRJdGVtKG5hdmlnYXRpb24tPm5hdmlnYXRpb25JRCgpLCBtX2JhY2tGb3J3
YXJkTGlzdC0+Y3VycmVudEl0ZW0oKS0+aXRlbUlEKCksIEZyYW1lTG9hZFR5cGU6OkluZGV4ZWRC
YWNrRm9yd2FyZCwgU2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkOjpObywgV1RGOjpudWxsb3B0
KSk7CiAgICAgbV9wcm9jZXNzLT5yZXNwb25zaXZlbmVzc1RpbWVyKCkuc3RhcnQoKTsKIAogICAg
IHJldHVybiBuYXZpZ2F0aW9uOwpAQCAtOTc4LDcgKzk3OCw3IEBAIFJlZlB0cjxBUEk6Ok5hdmln
YXRpb24+IFdlYlBhZ2VQcm94eTo6bGF1bmNoUHJvY2Vzc1dpdGhJdGVtKFdlYkJhY2tGb3J3YXJk
TGlzdEl0CiAKICAgICBhdXRvIG5hdmlnYXRpb24gPSBtX25hdmlnYXRpb25TdGF0ZS0+Y3JlYXRl
QmFja0ZvcndhcmROYXZpZ2F0aW9uKGl0ZW0sIG1fYmFja0ZvcndhcmRMaXN0LT5jdXJyZW50SXRl
bSgpLCBGcmFtZUxvYWRUeXBlOjpJbmRleGVkQmFja0ZvcndhcmQpOwogCi0gICAgbV9wcm9jZXNz
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHb1RvQmFja0ZvcndhcmRJdGVtKG5hdmlnYXRpb24t
Pm5hdmlnYXRpb25JRCgpLCBpdGVtLml0ZW1JRCgpLCBGcmFtZUxvYWRUeXBlOjpJbmRleGVkQmFj
a0ZvcndhcmQsIFNob3VsZFRyZWF0QXNDb250aW51aW5nTG9hZDo6Tm8sIFdURjo6bnVsbG9wdCks
IG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHb1RvQmFja0Zvcndh
cmRJdGVtKG5hdmlnYXRpb24tPm5hdmlnYXRpb25JRCgpLCBpdGVtLml0ZW1JRCgpLCBGcmFtZUxv
YWRUeXBlOjpJbmRleGVkQmFja0ZvcndhcmQsIFNob3VsZFRyZWF0QXNDb250aW51aW5nTG9hZDo6
Tm8sIFdURjo6bnVsbG9wdCkpOwogICAgIG1fcHJvY2Vzcy0+cmVzcG9uc2l2ZW5lc3NUaW1lcigp
LnN0YXJ0KCk7CiAKICAgICByZXR1cm4gbmF2aWdhdGlvbjsKQEAgLTEwMDksNyArMTAwOSw3IEBA
IHZvaWQgV2ViUGFnZVByb3h5Ojppbml0aWFsaXplV2ViUGFnZSgpCiAgICAgc2V0RHJhd2luZ0Fy
ZWEocGFnZUNsaWVudCgpLmNyZWF0ZURyYXdpbmdBcmVhUHJveHkobV9wcm9jZXNzKSk7CiAgICAg
QVNTRVJUKG1fZHJhd2luZ0FyZWEpOwogCi0gICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Oldl
YlByb2Nlc3M6OkNyZWF0ZVdlYlBhZ2UobV93ZWJQYWdlSUQsIGNyZWF0aW9uUGFyYW1ldGVycyht
X3Byb2Nlc3MsICptX2RyYXdpbmdBcmVhKSksIDApOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBy
b2Nlc3M6OkNyZWF0ZVdlYlBhZ2UobV93ZWJQYWdlSUQsIGNyZWF0aW9uUGFyYW1ldGVycyhtX3By
b2Nlc3MsICptX2RyYXdpbmdBcmVhKSksIDApOwogCiAgICAgbV9wcm9jZXNzLT5hZGRWaXNpdGVk
TGlua1N0b3JlVXNlcih2aXNpdGVkTGlua1N0b3JlKCksIG1faWRlbnRpZmllcik7CiB9CkBAIC0x
MDcwLDcgKzEwNzAsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Y2xvc2UoKQogCiAgICAgbV9wcm9j
ZXNzLT5wcm9jZXNzUG9vbCgpLmJhY2tGb3J3YXJkQ2FjaGUoKS5yZW1vdmVFbnRyaWVzRm9yUGFn
ZSgqdGhpcyk7CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNsb3Nl
KCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDbG9zZSgpKTsK
ICAgICBtX3Byb2Nlc3MtPnJlbW92ZVdlYlBhZ2UoKnRoaXMsIFdlYlByb2Nlc3NQcm94eTo6RW5k
c1VzaW5nRGF0YVN0b3JlOjpZZXMpOwogICAgIG1fcHJvY2Vzcy0+cmVtb3ZlTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV93ZWJQ
YWdlSUQpOwogICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zdXBwbGVtZW50PFdlYk5vdGlm
aWNhdGlvbk1hbmFnZXJQcm94eT4oKS0+Y2xlYXJOb3RpZmljYXRpb25zKHRoaXMpOwpAQCAtMTMx
OCwxMSArMTMxOCwxMSBAQCBSZWZQdHI8QVBJOjpOYXZpZ2F0aW9uPiBXZWJQYWdlUHJveHk6Omxv
YWRGaWxlKGNvbnN0IFN0cmluZyYgZmlsZVVSTFN0cmluZywgY29ucwogCiAjaWYgSEFWRShTQU5E
Qk9YX0lTU1VFX1JFQURfRVhURU5TSU9OX1RPX1BST0NFU1NfQllfQVVESVRfVE9LRU4pCiAgICAg
aWYgKG1fcHJvY2Vzcy0+aXNMYXVuY2hpbmcoKSkKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpMb2FkUmVxdWVzdFdhaXRpbmdGb3JQcm9jZXNzTGF1bmNoKGxvYWRQ
YXJhbWV0ZXJzLCByZXNvdXJjZURpcmVjdG9yeVVSTCwgbV9pZGVudGlmaWVyLCBjaGVja0Fzc3Vt
ZWRSZWFkQWNjZXNzVG9SZXNvdXJjZVVSTCksIG1fd2ViUGFnZUlEKTsKKyAgICAgICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6TG9hZFJlcXVlc3RXYWl0aW5nRm9yUHJvY2Vzc0xhdW5jaChsb2Fk
UGFyYW1ldGVycywgcmVzb3VyY2VEaXJlY3RvcnlVUkwsIG1faWRlbnRpZmllciwgY2hlY2tBc3N1
bWVkUmVhZEFjY2Vzc1RvUmVzb3VyY2VVUkwpKTsKICAgICBlbHNlCi0gICAgICAgIG1fcHJvY2Vz
cy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6TG9hZFJlcXVlc3QobG9hZFBhcmFtZXRlcnMpLCBt
X3dlYlBhZ2VJRCk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkxvYWRSZXF1ZXN0
KGxvYWRQYXJhbWV0ZXJzKSk7CiAjZWxzZQotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6TG9hZFJlcXVlc3QobG9hZFBhcmFtZXRlcnMpLCBtX3dlYlBhZ2VJRCk7CisgICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6TG9hZFJlcXVlc3QobG9hZFBhcmFtZXRlcnMpKTsKICNl
bmRpZgogICAgIG1fcHJvY2Vzcy0+cmVzcG9uc2l2ZW5lc3NUaW1lcigpLnN0YXJ0KCk7CiAKQEAg
LTE0MTIsNyArMTQxMiw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpsb2FkQWx0ZXJuYXRlSFRNTChj
b25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGh0bWxEYXRhLCBjb25zdCBTCiAKICAgICBtX3Byb2Nl
c3MtPmFzc3VtZVJlYWRBY2Nlc3NUb0Jhc2VVUkwoKnRoaXMsIGJhc2VVUkwpOwogICAgIG1fcHJv
Y2Vzcy0+YXNzdW1lUmVhZEFjY2Vzc1RvQmFzZVVSTCgqdGhpcywgdW5yZWFjaGFibGVVUkwpOwot
ICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6TG9hZEFsdGVybmF0ZUhUTUwo
bG9hZFBhcmFtZXRlcnMpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6TG9hZEFsdGVybmF0ZUhUTUwobG9hZFBhcmFtZXRlcnMpKTsKICAgICBtX3Byb2Nlc3MtPnJl
c3BvbnNpdmVuZXNzVGltZXIoKS5zdGFydCgpOwogfQogCkBAIC0xNDM5LDcgKzE0MzksNyBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6bG9hZFdlYkFyY2hpdmVEYXRhKEFQSTo6RGF0YSogd2ViQXJjaGl2
ZURhdGEsIEFQSTo6T2JqZWN0KiB1cwogICAgIGxvYWRQYXJhbWV0ZXJzLnVzZXJEYXRhID0gVXNl
ckRhdGEocHJvY2VzcygpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEpLmdldCgp
KTsKICAgICBhZGRQbGF0Zm9ybUxvYWRQYXJhbWV0ZXJzKGxvYWRQYXJhbWV0ZXJzKTsKIAotICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6TG9hZERhdGEobG9hZFBhcmFtZXRl
cnMpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6TG9hZERhdGEo
bG9hZFBhcmFtZXRlcnMpKTsKICAgICBtX3Byb2Nlc3MtPnJlc3BvbnNpdmVuZXNzVGltZXIoKS5z
dGFydCgpOwogfQogCkBAIC0xNDU4LDcgKzE0NTgsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6bmF2
aWdhdGVUb1BERkxpbmtXaXRoU2ltdWxhdGVkQ2xpY2soY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcs
CiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICBsYXVuY2hQcm9jZXNzKFJl
Z2lzdHJhYmxlRG9tYWluIHsgVVJMKFVSTCgpLCB1cmxTdHJpbmcpIH0sIFByb2Nlc3NMYXVuY2hS
ZWFzb246OkluaXRpYWxQcm9jZXNzKTsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6TmF2aWdhdGVUb1BERkxpbmtXaXRoU2ltdWxhdGVkQ2xpY2sodXJsU3RyaW5nLCBk
b2N1bWVudFBvaW50LCBzY3JlZW5Qb2ludCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpOYXZpZ2F0ZVRvUERGTGlua1dpdGhTaW11bGF0ZWRDbGljayh1cmxTdHJp
bmcsIGRvY3VtZW50UG9pbnQsIHNjcmVlblBvaW50KSk7CiAgICAgbV9wcm9jZXNzLT5yZXNwb25z
aXZlbmVzc1RpbWVyKCkuc3RhcnQoKTsKIH0KIApAQCAtMTQ3MSw3ICsxNDcxLDcgQEAgdm9pZCBX
ZWJQYWdlUHJveHk6OnN0b3BMb2FkaW5nKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U3RvcExvYWRpbmcoKSwgbV93ZWJQ
YWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlN0b3BMb2FkaW5nKCkpOwogICAg
IGlmIChtX3Byb3Zpc2lvbmFsUGFnZSkgewogICAgICAgICBtX3Byb3Zpc2lvbmFsUGFnZS0+Y2Fu
Y2VsKCk7CiAgICAgICAgIG1fcHJvdmlzaW9uYWxQYWdlID0gbnVsbHB0cjsKQEAgLTE1MDYsNyAr
MTUwNiw3IEBAIFJlZlB0cjxBUEk6Ok5hdmlnYXRpb24+IFdlYlBhZ2VQcm94eTo6cmVsb2FkKE9w
dGlvblNldDxXZWJDb3JlOjpSZWxvYWRPcHRpb24+IG9wCiAgICAgaWYgKG9wdGlvbnMuY29udGFp
bnMoV2ViQ29yZTo6UmVsb2FkT3B0aW9uOjpEaXNhYmxlQ29udGVudEJsb2NrZXJzKSkKICAgICAg
ICAgbmF2aWdhdGlvbi0+c2V0VXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZChmYWxzZSk7CiAK
LSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJlbG9hZChuYXZpZ2F0aW9u
LT5uYXZpZ2F0aW9uSUQoKSwgb3B0aW9ucy50b1JhdygpLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxl
KSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJlbG9hZChuYXZp
Z2F0aW9uLT5uYXZpZ2F0aW9uSUQoKSwgb3B0aW9ucy50b1JhdygpLCBzYW5kYm94RXh0ZW5zaW9u
SGFuZGxlKSk7CiAgICAgbV9wcm9jZXNzLT5yZXNwb25zaXZlbmVzc1RpbWVyKCkuc3RhcnQoKTsK
IAogI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQpAQCAtMTU3NSw3ICsxNTc1LDcgQEAgUmVm
UHRyPEFQSTo6TmF2aWdhdGlvbj4gV2ViUGFnZVByb3h5Ojpnb1RvQmFja0ZvcndhcmRJdGVtKFdl
YkJhY2tGb3J3YXJkTGlzdEl0ZW0KICAgICBhdXRvIHRyYW5zYWN0aW9uID0gbV9wYWdlTG9hZFN0
YXRlLnRyYW5zYWN0aW9uKCk7CiAgICAgbV9wYWdlTG9hZFN0YXRlLnNldFBlbmRpbmdBUElSZXF1
ZXN0KHRyYW5zYWN0aW9uLCB7IG5hdmlnYXRpb24gPyBuYXZpZ2F0aW9uLT5uYXZpZ2F0aW9uSUQo
KSA6IDAsIGl0ZW0udXJsKCkgfSk7CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OkdvVG9CYWNrRm9yd2FyZEl0ZW0obmF2aWdhdGlvbiA/IG5hdmlnYXRpb24tPm5hdmln
YXRpb25JRCgpIDogMCwgaXRlbS5pdGVtSUQoKSwgZnJhbWVMb2FkVHlwZSwgU2hvdWxkVHJlYXRB
c0NvbnRpbnVpbmdMb2FkOjpObywgV1RGOjpudWxsb3B0KSwgbV93ZWJQYWdlSUQpOworICAgIHNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdvVG9CYWNrRm9yd2FyZEl0ZW0obmF2aWdhdGlvbiA/IG5h
dmlnYXRpb24tPm5hdmlnYXRpb25JRCgpIDogMCwgaXRlbS5pdGVtSUQoKSwgZnJhbWVMb2FkVHlw
ZSwgU2hvdWxkVHJlYXRBc0NvbnRpbnVpbmdMb2FkOjpObywgV1RGOjpudWxsb3B0KSk7CiAgICAg
bV9wcm9jZXNzLT5yZXNwb25zaXZlbmVzc1RpbWVyKCkuc3RhcnQoKTsKIAogICAgIHJldHVybiBu
YXZpZ2F0aW9uOwpAQCAtMTU5MCw3ICsxNTkwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnRyeVJl
c3RvcmVTY3JvbGxQb3NpdGlvbigpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlRyeVJlc3RvcmVTY3JvbGxQb3NpdGlvbigp
LCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6VHJ5UmVzdG9yZVNj
cm9sbFBvc2l0aW9uKCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ2hhbmdlQmFja0Zv
cndhcmRMaXN0KFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIGFkZGVkLCBWZWN0b3I8UmVmPFdlYkJh
Y2tGb3J3YXJkTGlzdEl0ZW0+PiYmIHJlbW92ZWQpCkBAIC0xNjUyLDcgKzE2NTIsNyBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6c2V0Q29udHJvbGxlZEJ5QXV0b21hdGlvbihib29sIGNvbnRyb2xsZWQp
CiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBt
X3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldENvbnRyb2xsZWRCeUF1dG9tYXRp
b24oY29udHJvbGxlZCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpTZXRDb250cm9sbGVkQnlBdXRvbWF0aW9uKGNvbnRyb2xsZWQpKTsKICAgICBtX3Byb2Nlc3Mt
PnByb2Nlc3NQb29sKCkuc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpTZXRTZXNzaW9uSXNDb250cm9sbGVkQnlBdXRvbWF0aW9uKG1fd2Vic2l0ZURhdGFT
dG9yZS0+c2Vzc2lvbklEKCksIG1fY29udHJvbGxlZEJ5QXV0b21hdGlvbikpOwogfQogCkBAIC0x
Njc3LDcgKzE2NzcsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0SW5kaWNhdGluZyhib29sIGlu
ZGljYXRpbmcpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEluZGljYXRpbmco
aW5kaWNhdGluZyksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpT
ZXRJbmRpY2F0aW5nKGluZGljYXRpbmcpKTsKIH0KIAogYm9vbCBXZWJQYWdlUHJveHk6OmFsbG93
c1JlbW90ZUluc3BlY3Rpb24oKSBjb25zdApAQCAtMTcxMyw3ICsxNzEzLDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBPcHRpb25hbDxDb2xvcj4mIGNvbG9y
KQogCiAgICAgbV9iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsKICAgICBpZiAoaGFzUnVubmluZ1By
b2Nlc3MoKSkKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRC
YWNrZ3JvdW5kQ29sb3IoY29sb3IpLCBtX3dlYlBhZ2VJRCk7CisgICAgICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OlNldEJhY2tncm91bmRDb2xvcihjb2xvcikpOwogfQogCiB2b2lkIFdlYlBh
Z2VQcm94eTo6c2V0VG9wQ29udGVudEluc2V0KGZsb2F0IGNvbnRlbnRJbnNldCkKQEAgLTE3Mjks
OSArMTcyOSw5IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRUb3BDb250ZW50SW5zZXQoZmxvYXQg
Y29udGVudEluc2V0KQogICAgIE1hY2hTZW5kUmlnaHQgZmVuY2UgPSBtX2RyYXdpbmdBcmVhLT5j
cmVhdGVGZW5jZSgpOwogCiAgICAgYXV0byBmZW5jZUF0dGFjaG1lbnQgPSBJUEM6OkF0dGFjaG1l
bnQoZmVuY2UubGVha1NlbmRSaWdodCgpLCBNQUNIX01TR19UWVBFX01PVkVfU0VORCk7Ci0gICAg
bV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRUb3BDb250ZW50SW5zZXRGZW5j
ZWQoY29udGVudEluc2V0LCBmZW5jZUF0dGFjaG1lbnQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0VG9wQ29udGVudEluc2V0RmVuY2VkKGNvbnRlbnRJbnNl
dCwgZmVuY2VBdHRhY2htZW50KSk7CiAjZWxzZQotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6U2V0VG9wQ29udGVudEluc2V0KGNvbnRlbnRJbnNldCksIG1fd2ViUGFnZUlE
KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRUb3BDb250ZW50SW5zZXQoY29udGVu
dEluc2V0KSk7CiAjZW5kaWYKIH0KIApAQCAtMTc0Myw3ICsxNzQzLDcgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OnNldFVuZGVybGF5Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogICAgIG1fdW5kZXJs
YXlDb2xvciA9IGNvbG9yOwogCiAgICAgaWYgKGhhc1J1bm5pbmdQcm9jZXNzKCkpCi0gICAgICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0VW5kZXJsYXlDb2xvcihjb2xv
ciksIG1fd2ViUGFnZUlEKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0VW5k
ZXJsYXlDb2xvcihjb2xvcikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6dmlld1dpbGxTdGFy
dExpdmVSZXNpemUoKQpAQCAtMTc1MiwxNCArMTc1MiwxNCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
dmlld1dpbGxTdGFydExpdmVSZXNpemUoKQogICAgICAgICByZXR1cm47CiAKICAgICBjbG9zZU92
ZXJsYXllZFZpZXdzKCk7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpW
aWV3V2lsbFN0YXJ0TGl2ZVJlc2l6ZSgpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6Vmlld1dpbGxTdGFydExpdmVSZXNpemUoKSk7CiB9CiAKIHZvaWQgV2ViUGFn
ZVByb3h5Ojp2aWV3V2lsbEVuZExpdmVSZXNpemUoKQogewogICAgIGlmICghaGFzUnVubmluZ1By
b2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6Vmlld1dpbGxFbmRMaXZlUmVzaXplKCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpWaWV3V2lsbEVuZExpdmVSZXNpemUoKSk7CiB9CiAKIHZvaWQg
V2ViUGFnZVByb3h5OjpzZXRWaWV3TmVlZHNEaXNwbGF5KGNvbnN0IFJlZ2lvbiYgcmVnaW9uKQpA
QCAtMTg1OSw3ICsxODU5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnZpZXdEaWRFbnRlcldpbmRv
dygpCiAgICAgTGF5ZXJIb3N0aW5nTW9kZSBsYXllckhvc3RpbmdNb2RlID0gcGFnZUNsaWVudCgp
LnZpZXdMYXllckhvc3RpbmdNb2RlKCk7CiAgICAgaWYgKG1fbGF5ZXJIb3N0aW5nTW9kZSAhPSBs
YXllckhvc3RpbmdNb2RlKSB7CiAgICAgICAgIG1fbGF5ZXJIb3N0aW5nTW9kZSA9IGxheWVySG9z
dGluZ01vZGU7Ci0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0
TGF5ZXJIb3N0aW5nTW9kZShsYXllckhvc3RpbmdNb2RlKSwgbV93ZWJQYWdlSUQpOworICAgICAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRMYXllckhvc3RpbmdNb2RlKGxheWVySG9zdGlu
Z01vZGUpKTsKICAgICB9CiB9CiAKQEAgLTE5MDgsNyArMTkwOCw3IEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpkaXNwYXRjaEFjdGl2aXR5U3RhdGVDaGFuZ2UoKQogICAgIGF1dG8gYWN0aXZpdHlTdGF0
ZUNoYW5nZUlEID0gbV9hY3Rpdml0eVN0YXRlQ2hhbmdlV2FudHNTeW5jaHJvbm91c1JlcGx5ID8g
dGFrZU5leHRBY3Rpdml0eVN0YXRlQ2hhbmdlSUQoKSA6IHN0YXRpY19jYXN0PEFjdGl2aXR5U3Rh
dGVDaGFuZ2VJRD4oQWN0aXZpdHlTdGF0ZUNoYW5nZUFzeW5jaHJvbm91cyk7CiAKICAgICBpZiAo
Y2hhbmdlZCB8fCBhY3Rpdml0eVN0YXRlQ2hhbmdlSUQgIT0gQWN0aXZpdHlTdGF0ZUNoYW5nZUFz
eW5jaHJvbm91cyB8fCAhbV9uZXh0QWN0aXZpdHlTdGF0ZUNoYW5nZUNhbGxiYWNrcy5pc0VtcHR5
KCkpCi0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0QWN0aXZp
dHlTdGF0ZShtX2FjdGl2aXR5U3RhdGUsIGFjdGl2aXR5U3RhdGVDaGFuZ2VJRCwgbV9uZXh0QWN0
aXZpdHlTdGF0ZUNoYW5nZUNhbGxiYWNrcyksIG1fd2ViUGFnZUlEKTsKKyAgICAgICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6U2V0QWN0aXZpdHlTdGF0ZShtX2FjdGl2aXR5U3RhdGUsIGFjdGl2
aXR5U3RhdGVDaGFuZ2VJRCwgbV9uZXh0QWN0aXZpdHlTdGF0ZUNoYW5nZUNhbGxiYWNrcykpOwog
CiAgICAgbV9uZXh0QWN0aXZpdHlTdGF0ZUNoYW5nZUNhbGxiYWNrcy5jbGVhcigpOwogCkBAIC0y
MDQzLDcgKzIwNDMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6bGF5ZXJIb3N0aW5nTW9kZURpZENo
YW5nZSgpCiAgICAgbV9sYXllckhvc3RpbmdNb2RlID0gbGF5ZXJIb3N0aW5nTW9kZTsKIAogICAg
IGlmIChoYXNSdW5uaW5nUHJvY2VzcygpKQotICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OlNldExheWVySG9zdGluZ01vZGUobGF5ZXJIb3N0aW5nTW9kZSksIG1fd2Vi
UGFnZUlEKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0TGF5ZXJIb3N0aW5n
TW9kZShsYXllckhvc3RpbmdNb2RlKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5Ojp3YWl0Rm9y
RGlkVXBkYXRlQWN0aXZpdHlTdGF0ZShBY3Rpdml0eVN0YXRlQ2hhbmdlSUQgYWN0aXZpdHlTdGF0
ZUNoYW5nZUlEKQpAQCAtMjA4NSwyMSArMjA4NSwyMSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0
SW5pdGlhbEZvY3VzKGJvb2wgZm9yd2FyZCwgYm9vbCBpc0tleWJvYXJkRXZlbnRWYWxpZCwgY29u
cwogICAgIH0KIAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3Zl
KGNhbGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rp
dml0eSgiV2ViUGFnZVByb3h5OjpzZXRJbml0aWFsRm9jdXMiX3MpKTsKLSAgICBtX3Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEluaXRpYWxGb2N1cyhmb3J3YXJkLCBpc0tleWJv
YXJkRXZlbnRWYWxpZCwga2V5Ym9hcmRFdmVudCwgY2FsbGJhY2tJRCksIG1fd2ViUGFnZUlEKTsK
KyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRJbml0aWFsRm9jdXMoZm9yd2FyZCwgaXNL
ZXlib2FyZEV2ZW50VmFsaWQsIGtleWJvYXJkRXZlbnQsIGNhbGxiYWNrSUQpKTsKIH0KIAogdm9p
ZCBXZWJQYWdlUHJveHk6OmNsZWFyU2VsZWN0aW9uKCkKIHsKICAgICBpZiAoIWhhc1J1bm5pbmdQ
cm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OkNsZWFyU2VsZWN0aW9uKCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpDbGVhclNlbGVjdGlvbigpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
OnJlc3RvcmVTZWxlY3Rpb25JbkZvY3VzZWRFZGl0YWJsZUVsZW1lbnQoKQogewogICAgIGlmICgh
aGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fcHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6UmVzdG9yZVNlbGVjdGlvbkluRm9jdXNlZEVkaXRhYmxlRWxl
bWVudCgpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVzdG9y
ZVNlbGVjdGlvbkluRm9jdXNlZEVkaXRhYmxlRWxlbWVudCgpKTsKIH0KIAogdm9pZCBXZWJQYWdl
UHJveHk6OnZhbGlkYXRlQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBXVEY6OkZ1
bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYsIGJvb2wsIGludDMyX3QsIENhbGxiYWNrQmFzZTo6
RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCkBAIC0yMTEwLDcgKzIxMTAsNyBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6dmFsaWRhdGVDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIFdU
Rjo6RnVuY3Rpb248dm9pZAogICAgIH0KIAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJh
Y2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigp
LmJhY2tncm91bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5Ojp2YWxpZGF0ZUNvbW1hbmQiX3MpKTsK
LSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlZhbGlkYXRlQ29tbWFuZChj
b21tYW5kTmFtZSwgY2FsbGJhY2tJRCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpWYWxpZGF0ZUNvbW1hbmQoY29tbWFuZE5hbWUsIGNhbGxiYWNrSUQpKTsKIH0K
IAogdm9pZCBXZWJQYWdlUHJveHk6OmluY3JlYXNlTGlzdExldmVsKCkKQEAgLTIxMTgsNyArMjEx
OCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjppbmNyZWFzZUxpc3RMZXZlbCgpCiAgICAgaWYgKCFo
YXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OkluY3JlYXNlTGlzdExldmVsKCksIG1fd2ViUGFnZUlEKTsK
KyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpJbmNyZWFzZUxpc3RMZXZlbCgpKTsKIH0KIAog
dm9pZCBXZWJQYWdlUHJveHk6OmRlY3JlYXNlTGlzdExldmVsKCkKQEAgLTIxMjYsNyArMjEyNiw3
IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkZWNyZWFzZUxpc3RMZXZlbCgpCiAgICAgaWYgKCFoYXNS
dW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OkRlY3JlYXNlTGlzdExldmVsKCksIG1fd2ViUGFnZUlEKTsKKyAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEZWNyZWFzZUxpc3RMZXZlbCgpKTsKIH0KIAogdm9p
ZCBXZWJQYWdlUHJveHk6OmNoYW5nZUxpc3RUeXBlKCkKQEAgLTIxMzQsNyArMjEzNCw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpjaGFuZ2VMaXN0VHlwZSgpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJv
Y2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OkNoYW5nZUxpc3RUeXBlKCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpDaGFuZ2VMaXN0VHlwZSgpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
OnNldEJhc2VXcml0aW5nRGlyZWN0aW9uKFdyaXRpbmdEaXJlY3Rpb24gZGlyZWN0aW9uKQpAQCAt
MjE0Miw3ICsyMTQyLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldEJhc2VXcml0aW5nRGlyZWN0
aW9uKFdyaXRpbmdEaXJlY3Rpb24gZGlyZWN0aW9uKQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nl
c3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpTZXRCYXNlV3JpdGluZ0RpcmVjdGlvbihkaXJlY3Rpb24pLCBtX3dlYlBhZ2VJRCk7
CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24oZGly
ZWN0aW9uKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5Ojp1cGRhdGVGb250QXR0cmlidXRlc0Fm
dGVyRWRpdG9yU3RhdGVDaGFuZ2UoKQpAQCAtMjE2Niw3ICsyMTY2LDcgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OnNldE5lZWRzRm9udEF0dHJpYnV0ZXMoYm9vbCBuZWVkc0ZvbnRBdHRyaWJ1dGVzKQog
ICAgIG1fbmVlZHNGb250QXR0cmlidXRlcyA9IG5lZWRzRm9udEF0dHJpYnV0ZXM7CiAKICAgICBp
ZiAoaGFzUnVubmluZ1Byb2Nlc3MoKSkKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpTZXROZWVkc0ZvbnRBdHRyaWJ1dGVzKG5lZWRzRm9udEF0dHJpYnV0ZXMpLCBt
X3dlYlBhZ2VJRCk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldE5lZWRzRm9u
dEF0dHJpYnV0ZXMobmVlZHNGb250QXR0cmlidXRlcykpOwogfQogCiBib29sIFdlYlBhZ2VQcm94
eTo6bWFpbnRhaW5zSW5hY3RpdmVTZWxlY3Rpb24oKSBjb25zdApAQCAtMjE4OSw3ICsyMTg5LDcg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OnNjaGVkdWxlRnVsbEVkaXRvclN0YXRlVXBkYXRlKCkKICAg
ICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2NoZWR1bGVGdWxsRWRpdG9yU3RhdGVVcGRh
dGUoKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNjaGVkdWxl
RnVsbEVkaXRvclN0YXRlVXBkYXRlKCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2VsZWN0
QWxsKCkKQEAgLTIxOTcsNyArMjE5Nyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZWxlY3RBbGwo
KQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZWxlY3RBbGwoKSwgbV93ZWJQYWdl
SUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNlbGVjdEFsbCgpKTsKIH0KIAogdm9p
ZCBXZWJQYWdlUHJveHk6OmV4ZWN1dGVFZGl0Q29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmRO
YW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50LCBXVEY6OkZ1bmN0aW9uPHZvaWQoQ2FsbGJhY2tC
YXNlOjpFcnJvcik+JiYgY2FsbGJhY2tGdW5jdGlvbikKQEAgLTIyMDgsNyArMjIwOCw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpleGVjdXRlRWRpdENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5k
TmFtZSwgY29uc3QgU3RyaW5nJiBhCiAgICAgfQogCiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9j
YWxsYmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhyb3R0
bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6OmV4ZWN1dGVFZGl0Q29tbWFu
ZCJfcykpOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RXhlY3V0ZUVk
aXRDb21tYW5kV2l0aENhbGxiYWNrKGNvbW1hbmROYW1lLCBhcmd1bWVudCwgY2FsbGJhY2tJRCks
IG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpFeGVjdXRlRWRpdENv
bW1hbmRXaXRoQ2FsbGJhY2soY29tbWFuZE5hbWUsIGFyZ3VtZW50LCBjYWxsYmFja0lEKSk7CiB9
CiAgICAgCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZXhlY3V0ZUVkaXRDb21tYW5kKGNvbnN0IFN0cmlu
ZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpCkBAIC0yMjIxLDcgKzIyMjEs
NyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZXhlY3V0ZUVkaXRDb21tYW5kKGNvbnN0IFN0cmluZyYg
Y29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYQogICAgIGlmIChjb21tYW5kTmFtZSA9PSBpZ25v
cmVTcGVsbGluZ0NvbW1hbmROYW1lKQogICAgICAgICArK21fcGVuZGluZ0xlYXJuT3JJZ25vcmVX
b3JkTWVzc2FnZUNvdW50OwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpFeGVjdXRlRWRpdENvbW1hbmQoY29tbWFuZE5hbWUsIGFyZ3VtZW50KSwgbV93ZWJQYWdlSUQp
OworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkV4ZWN1dGVFZGl0Q29tbWFuZChjb21tYW5k
TmFtZSwgYXJndW1lbnQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnJlcXVlc3RGb250QXR0
cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQoRnVuY3Rpb248dm9pZChjb25zdCBXZWJDb3JlOjpGb250
QXR0cmlidXRlcyYsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrKQpAQCAtMjIzMiw3
ICsyMjMyLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlcXVlc3RGb250QXR0cmlidXRlc0F0U2Vs
ZWN0aW9uU3RhcnQoRnVuY3Rpb248dm9pZChjb25zdCBXZWIKICAgICB9CiAKICAgICBhdXRvIGNh
bGxiYWNrSUQgPSBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFjayksIG1fcHJvY2Vzcy0+
dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6OnJlcXVlc3RGb250
QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQiX3MpKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OlJlcXVlc3RGb250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQoY2Fs
bGJhY2tJRCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpSZXF1
ZXN0Rm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlvblN0YXJ0KGNhbGxiYWNrSUQpKTsKIH0KIAogdm9p
ZCBXZWJQYWdlUHJveHk6OmZvbnRBdHRyaWJ1dGVzQ2FsbGJhY2soY29uc3QgV2ViQ29yZTo6Rm9u
dEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKQEAgLTIyNTMs
NyArMjI1Myw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRFZGl0YWJsZShib29sIGVkaXRhYmxl
KQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRFZGl0YWJsZShlZGl0YWJsZSks
IG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRFZGl0YWJsZShl
ZGl0YWJsZSkpOwogfQogICAgIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldE1lZGlhU3RyZWFtQ2Fw
dHVyZU11dGVkKGJvb2wgbXV0ZWQpCkBAIC0yMzE4LDkgKzIzMTgsOSBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6cGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKERyYWdDb250cm9sbGVyQWN0aW9uIGFj
dGlvbiwgRHJhZwogCiAgICAgQVNTRVJUKGRyYWdEYXRhLnBsYXRmb3JtRGF0YSgpKTsKICAgICBX
ZWJTZWxlY3Rpb25EYXRhIHNlbGVjdGlvbigqZHJhZ0RhdGEucGxhdGZvcm1EYXRhKCkpOwotICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURyYWdDb250cm9sbGVy
QWN0aW9uKGFjdGlvbiwgZHJhZ0RhdGEuY2xpZW50UG9zaXRpb24oKSwgZHJhZ0RhdGEuZ2xvYmFs
UG9zaXRpb24oKSwgZHJhZ0RhdGEuZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKCksIHNlbGVj
dGlvbiwgZHJhZ0RhdGEuZmxhZ3MoKSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24oYWN0aW9uLCBkcmFnRGF0YS5j
bGllbnRQb3NpdGlvbigpLCBkcmFnRGF0YS5nbG9iYWxQb3NpdGlvbigpLCBkcmFnRGF0YS5kcmFn
Z2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKSwgc2VsZWN0aW9uLCBkcmFnRGF0YS5mbGFncygpKSk7
CiAjZWxzZQotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURy
YWdDb250cm9sbGVyQWN0aW9uKGFjdGlvbiwgZHJhZ0RhdGEsIHNhbmRib3hFeHRlbnNpb25IYW5k
bGUsIHNhbmRib3hFeHRlbnNpb25zRm9yVXBsb2FkKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OlBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihhY3Rpb24sIGRy
YWdEYXRhLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBzYW5kYm94RXh0ZW5zaW9uc0ZvclVwbG9h
ZCkpOwogI2VuZGlmCiB9CiAKQEAgLTIzNTAsNyArMjM1MCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5
OjpkcmFnRW5kZWQoY29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBJbnRQb2lu
dCYgZ2xvCiB7CiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47
Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEcmFnRW5kZWQoY2xpZW50
UG9zaXRpb24sIGdsb2JhbFBvc2l0aW9uLCBvcGVyYXRpb24pLCBtX3dlYlBhZ2VJRCk7CisgICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RHJhZ0VuZGVkKGNsaWVudFBvc2l0aW9uLCBnbG9iYWxQ
b3NpdGlvbiwgb3BlcmF0aW9uKSk7CiAgICAgc2V0RHJhZ0NhcmV0UmVjdCh7IH0pOwogfQogCkBA
IC0yMzYyLDEzICsyMzYyLDEzIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRQZXJmb3JtRHJhZ09w
ZXJhdGlvbihib29sIGhhbmRsZWQpCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkU3RhcnREcmFnKCkK
IHsKICAgICBpZiAoaGFzUnVubmluZ1Byb2Nlc3MoKSkKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRTdGFydERyYWcoKSwgbV93ZWJQYWdlSUQpOworICAgICAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRTdGFydERyYWcoKSk7CiB9CiAgICAgCiB2b2lk
IFdlYlBhZ2VQcm94eTo6ZHJhZ0NhbmNlbGxlZCgpCiB7CiAgICAgaWYgKGhhc1J1bm5pbmdQcm9j
ZXNzKCkpCi0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RHJhZ0Nh
bmNlbGxlZCgpLCBtX3dlYlBhZ2VJRCk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OkRyYWdDYW5jZWxsZWQoKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRFbmREcmFnZ2lu
ZygpCkBAIC0yNDY3LDcgKzI0NjcsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cHJvY2Vzc05leHRR
dWV1ZWRNb3VzZUV2ZW50KCkKICAgICB9CiAKICAgICBMT0coTW91c2VIYW5kbGluZywgIlVJUHJv
Y2Vzczogc2VudCBtb3VzZSBldmVudCAlcyAocXVldWUgc2l6ZSAlenUpIiwgd2ViTW91c2VFdmVu
dFR5cGVTdHJpbmcoZXZlbnRUeXBlKSwgbV9tb3VzZUV2ZW50UXVldWUuc2l6ZSgpKTsKLSAgICBt
X3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Ok1vdXNlRXZlbnQoZXZlbnQpLCBtX3dl
YlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6TW91c2VFdmVudChldmVudCkp
OwogfQogCiAjaWYgTUVSR0VfV0hFRUxfRVZFTlRTCkBAIC0yNTc0LDcgKzI1NzQsNyBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6cHJvY2Vzc05leHRRdWV1ZWRXaGVlbEV2ZW50KCkKIAogdm9pZCBXZWJQ
YWdlUHJveHk6OnNlbmRXaGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmIGV2ZW50KQogewot
ICAgIG1fcHJvY2Vzcy0+c2VuZCgKKyAgICBzZW5kKAogICAgICAgICBNZXNzYWdlczo6RXZlbnRE
aXNwYXRjaGVyOjpXaGVlbEV2ZW50KAogICAgICAgICAgICAgbV93ZWJQYWdlSUQsCiAgICAgICAg
ICAgICBldmVudCwKQEAgLTI2MjcsNyArMjYyNyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpoYW5k
bGVLZXlib2FyZEV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmIGV2ZW50KQogCiAg
ICAgaWYgKG1fa2V5RXZlbnRRdWV1ZS5zaXplKCkgPT0gMSkgeyAvLyBPdGhlcndpc2UsIHNlbnQg
ZnJvbSBEaWRSZWNlaXZlRXZlbnQgbWVzc2FnZSBoYW5kbGVyLgogICAgICAgICBMT0coS2V5SGFu
ZGxpbmcsICIgVUkgcHJvY2Vzczogc2VudCBrZXlFdmVudCBmcm9tIGhhbmRsZUtleWJvYXJkRXZl
bnQiKTsKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpLZXlFdmVu
dChldmVudCksIG1fd2ViUGFnZUlEKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
S2V5RXZlbnQoZXZlbnQpKTsKICAgICB9CiB9CiAKQEAgLTI4MDAsNyArMjgwMCw3IEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgTmF0aXZlV2ViR2VzdHVyZUV2
ZW50JiBldmVudCkKICAgICBlbHNlCiAgICAgICAgIHJlc3BvbnNpdmVuZXNzVGltZXIuc3RhcnQo
KTsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6RXZlbnREaXNwYXRjaGVyOjpHZXN0
dXJlRXZlbnQobV93ZWJQYWdlSUQsIGV2ZW50KSwgMCk7CisgICAgc2VuZChNZXNzYWdlczo6RXZl
bnREaXNwYXRjaGVyOjpHZXN0dXJlRXZlbnQobV93ZWJQYWdlSUQsIGV2ZW50KSwgMCk7CiB9CiAj
ZW5kaWYKIApAQCAtMjg2MiwxMyArMjg2MiwxMyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxl
UHJldmVudGFibGVUb3VjaEV2ZW50KE5hdGl2ZVdlYlRvdWNoRXZlbnQmIGV2ZW50KQogICAgICAg
ICB9OwogCiAgICAgICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSwgbV9wcm9jZXNzLT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0
aXZpdHkoIldlYlBhZ2VQcm94eTo6aGFuZGxlUHJldmVudGFibGVUb3VjaEV2ZW50Il9zKSk7Ci0g
ICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6RXZlbnREaXNwYXRjaGVyOjpUb3VjaEV2
ZW50KG1fd2ViUGFnZUlELCBldmVudCwgY2FsbGJhY2tJRCksIDApOworICAgICAgICBzZW5kKE1l
c3NhZ2VzOjpFdmVudERpc3BhdGNoZXI6OlRvdWNoRXZlbnQobV93ZWJQYWdlSUQsIGV2ZW50LCBj
YWxsYmFja0lEKSwgMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBtX3Byb2Nlc3Mt
PnJlc3BvbnNpdmVuZXNzVGltZXIoKS5zdGFydCgpOwogICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNl
OwotICAgIGJvb2wgcmVwbHlSZWNlaXZlZCA9IG1fcHJvY2Vzcy0+c2VuZFN5bmMoTWVzc2FnZXM6
OldlYlBhZ2U6OlRvdWNoRXZlbnRTeW5jKGV2ZW50KSwgTWVzc2FnZXM6OldlYlBhZ2U6OlRvdWNo
RXZlbnRTeW5jOjpSZXBseShoYW5kbGVkKSwgbV93ZWJQYWdlSUQsIDFfcywgSVBDOjpTZW5kU3lu
Y09wdGlvbjo6Rm9yY2VEaXNwYXRjaFdoZW5EZXN0aW5hdGlvbklzV2FpdGluZ0ZvclVuYm91bmRl
ZFN5bmNSZXBseSk7CisgICAgYm9vbCByZXBseVJlY2VpdmVkID0gc2VuZFN5bmMoTWVzc2FnZXM6
OldlYlBhZ2U6OlRvdWNoRXZlbnRTeW5jKGV2ZW50KSwgTWVzc2FnZXM6OldlYlBhZ2U6OlRvdWNo
RXZlbnRTeW5jOjpSZXBseShoYW5kbGVkKSwgMV9zLCBJUEM6OlNlbmRTeW5jT3B0aW9uOjpGb3Jj
ZURpc3BhdGNoV2hlbkRlc3RpbmF0aW9uSXNXYWl0aW5nRm9yVW5ib3VuZGVkU3luY1JlcGx5KTsK
ICAgICAvLyBJZiB0aGUgc3luYyByZXF1ZXN0IGhhcyB0aW1lZCBvdXQsIHdlIHNob3VsZCBjb25z
aWRlciB0aGUgZXZlbnQgaGFuZGxlZC4gVGhlIFdlYiBQcm9jZXNzIGlzIHRvbyBidXN5IHRvIGFu
c3dlciBhbnkgcXVlc3Rpb25zLCBzbyB0aGUgZGVmYXVsdCBhY3Rpb24gaXMgYWxzbyBsaWtlbHkg
dG8gaGF2ZSBpc3N1ZXMuCiAgICAgaWYgKCFyZXBseVJlY2VpdmVkKQogICAgICAgICBoYW5kbGVk
ID0gdHJ1ZTsKQEAgLTI4ODMsNyArMjg4Myw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZXNldFBv
dGVudGlhbFRhcFNlY3VyaXR5T3JpZ2luKCkKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6UmVzZXRQb3RlbnRpYWxUYXBTZWN1cml0eU9yaWdpbigpLCBtX3dlYlBhZ2VJRCk7CisgICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVzZXRQb3RlbnRpYWxUYXBTZWN1cml0eU9yaWdpbigp
KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZVVucHJldmVudGFibGVUb3VjaEV2ZW50
KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZlbnQmIGV2ZW50KQpAQCAtMjg5NSw3ICsyODk1LDcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZVVucHJldmVudGFibGVUb3VjaEV2ZW50KGNvbnN0IE5h
dGl2ZVdlYlRvdWNoRXZlbnQmIGV2ZW4KICAgICBpZiAodG91Y2hFdmVudHNUcmFja2luZ1R5cGUg
PT0gVHJhY2tpbmdUeXBlOjpOb3RUcmFja2luZykKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9w
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpFdmVudERpc3BhdGNoZXI6OlRvdWNoRXZlbnQobV93ZWJQ
YWdlSUQsIGV2ZW50LCBXVEY6Om51bGxvcHQpLCAwKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpFdmVu
dERpc3BhdGNoZXI6OlRvdWNoRXZlbnQobV93ZWJQYWdlSUQsIGV2ZW50LCBXVEY6Om51bGxvcHQp
LCAwKTsKIAogICAgIGlmIChldmVudC5hbGxUb3VjaFBvaW50c0FyZVJlbGVhc2VkKCkpIHsKICAg
ICAgICAgbV90b3VjaEFuZFBvaW50ZXJFdmVudFRyYWNraW5nLnJlc2V0KCk7CkBAIC0yOTIwLDcg
KzI5MjAsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBOYXRp
dmVXZWJUb3VjaEV2ZW50JiBldmVudCkKICAgICBpZiAoIW1faXNQYWdlU3VzcGVuZGVkKSB7CiAg
ICAgICAgIG1fdG91Y2hFdmVudFF1ZXVlLmFwcGVuZChldmVudCk7CiAgICAgICAgIG1fcHJvY2Vz
cy0+cmVzcG9uc2l2ZW5lc3NUaW1lcigpLnN0YXJ0KCk7Ci0gICAgICAgIG1fcHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6VG91Y2hFdmVudChldmVudCksIG1fd2ViUGFnZUlEKTsKKyAg
ICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6VG91Y2hFdmVudChldmVudCkpOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIGlmIChtX3RvdWNoRXZlbnRRdWV1ZS5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgIGJvb2wgaXNFdmVudEhhbmRsZWQgPSBmYWxzZTsKQEAgLTI5NDMsMTIgKzI5NDMsMTIg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgTmF0aXZlV2ViVG91
Y2hFdmVudCYgZXZlbnQpCiAjaWYgRU5BQkxFKFBPSU5URVJfRVZFTlRTKQogdm9pZCBXZWJQYWdl
UHJveHk6OmNhbmNlbFBvaW50ZXIoV2ViQ29yZTo6UG9pbnRlcklEIHBvaW50ZXJJZCwgY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmIGRvY3VtZW50UG9pbnQpCiB7Ci0gICAgbV9wcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpDYW5jZWxQb2ludGVyKHBvaW50ZXJJZCwgZG9jdW1lbnRQb2lu
dCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDYW5jZWxQb2lu
dGVyKHBvaW50ZXJJZCwgZG9jdW1lbnRQb2ludCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6
dG91Y2hXaXRoSWRlbnRpZmllcldhc1JlbW92ZWQoV2ViQ29yZTo6UG9pbnRlcklEIHBvaW50ZXJJ
ZCkKIHsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlRvdWNoV2l0aElk
ZW50aWZpZXJXYXNSZW1vdmVkKHBvaW50ZXJJZCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpUb3VjaFdpdGhJZGVudGlmaWVyV2FzUmVtb3ZlZChwb2ludGVySWQp
KTsKIH0KICNlbmRpZgogCkBAIC0yOTU3LDcgKzI5NTcsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
c2Nyb2xsQnkoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3Jh
bnVsYQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTY3JvbGxCeShkaXJlY3Rpb24s
IGdyYW51bGFyaXR5KSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OlNjcm9sbEJ5KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJv
eHk6OmNlbnRlclNlbGVjdGlvbkluVmlzaWJsZUFyZWEoKQpAQCAtMjk2NSw3ICsyOTY1LDcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OmNlbnRlclNlbGVjdGlvbkluVmlzaWJsZUFyZWEoKQogICAgIGlm
ICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNz
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhKCks
IG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDZW50ZXJTZWxlY3Rp
b25JblZpc2libGVBcmVhKCkpOwogfQogCiBjbGFzcyBXZWJQYWdlUHJveHk6OlBvbGljeURlY2lz
aW9uU2VuZGVyIDogcHVibGljIFJlZkNvdW50ZWQ8UG9saWN5RGVjaXNpb25TZW5kZXI+IHsKQEAg
LTMxMzEsNyArMzEzMSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpjb21taXRQcm92aXNpb25hbFBh
Z2UoRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIHVpbnQ2NF90IG5hdmlnCiAKICAgICAvLyBUaGVy
ZSBpcyBubyB3YXkgd2UnbGwgYmUgYWJsZSB0byByZXR1cm4gdG8gdGhlIHBhZ2UgaW4gdGhlIHBy
ZXZpb3VzIHBhZ2Ugc28gY2xvc2UgaXQuCiAgICAgaWYgKCFkaWRTdXNwZW5kUHJldmlvdXNQYWdl
KQotICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNsb3NlKCksIG1f
d2ViUGFnZUlEKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q2xvc2UoKSk7CiAK
ICAgICBjb25zdCBhdXRvIG9sZFdlYlBhZ2VJRCA9IG1fd2ViUGFnZUlEOwogICAgIHN3YXBUb1By
b3Zpc2lvbmFsUGFnZShzdGQ6OmV4Y2hhbmdlKG1fcHJvdmlzaW9uYWxQYWdlLCBudWxscHRyKSk7
CkBAIC0zMjI1LDcgKzMyMjUsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0VXNlckFnZW50KFN0
cmluZyYmIHVzZXJBZ2VudCkKIAogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0VXNl
ckFnZW50KG1fdXNlckFnZW50KSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OlNldFVzZXJBZ2VudChtX3VzZXJBZ2VudCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94
eTo6c2V0QXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50KGNvbnN0IFN0cmluZyYgYXBwbGljYXRp
b25OYW1lKQpAQCAtMzI2Miw3ICszMjYyLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlc3VtZUFj
dGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCkKIAogICAgIG1faXNQYWdlU3VzcGVuZGVkID0g
ZmFsc2U7CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJlc3VtZUFj
dGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpSZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpKTsK
IH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0
aW9ucygpCkBAIC0zMjcyLDcgKzMyNzIsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c3VzcGVuZEFj
dGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCkKIAogICAgIG1faXNQYWdlU3VzcGVuZGVkID0g
dHJ1ZTsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U3VzcGVuZEFj
dGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpTdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKSk7
CiB9CiAKIGJvb2wgV2ViUGFnZVByb3h5OjpzdXBwb3J0c1RleHRFbmNvZGluZygpIGNvbnN0CkBA
IC0zMjg5LDcgKzMyODksNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Q3VzdG9tVGV4dEVuY29k
aW5nTmFtZShjb25zdCBTdHJpbmcmIGVuY29kaW5nTmFtZSkKIAogICAgIGlmICghaGFzUnVubmlu
Z1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6U2V0Q3VzdG9tVGV4dEVuY29kaW5nTmFtZShlbmNvZGluZ05hbWUpLCBtX3dl
YlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0Q3VzdG9tVGV4dEVuY29k
aW5nTmFtZShlbmNvZGluZ05hbWUpKTsKIH0KIAogU2Vzc2lvblN0YXRlIFdlYlBhZ2VQcm94eTo6
c2Vzc2lvblN0YXRlKFdURjo6RnVuY3Rpb248Ym9vbCAoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYp
PiYmIGZpbHRlcikgY29uc3QKQEAgLTMzMjcsNyArMzMyNyw3IEBAIFJlZlB0cjxBUEk6Ok5hdmln
YXRpb24+IFdlYlBhZ2VQcm94eTo6cmVzdG9yZUZyb21TZXNzaW9uU3RhdGUoU2Vzc2lvblN0YXRl
IHNlc3NpCiAgICAgICAgIGxhdW5jaEluaXRpYWxQcm9jZXNzSWZOZWNlc3NhcnkoKTsKIAogICAg
ICAgICBtX2JhY2tGb3J3YXJkTGlzdC0+cmVzdG9yZUZyb21TdGF0ZShXVEZNb3ZlKHNlc3Npb25T
dGF0ZS5iYWNrRm9yd2FyZExpc3RTdGF0ZSkpOwotICAgICAgICBwcm9jZXNzKCkuc2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6UmVzdG9yZVNlc3Npb24obV9iYWNrRm9yd2FyZExpc3QtPml0ZW1TdGF0
ZXMoKSksIG1fd2ViUGFnZUlEKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVz
dG9yZVNlc3Npb24obV9iYWNrRm9yd2FyZExpc3QtPml0ZW1TdGF0ZXMoKSkpOwogCiAgICAgICAg
IGF1dG8gdHJhbnNhY3Rpb24gPSBtX3BhZ2VMb2FkU3RhdGUudHJhbnNhY3Rpb24oKTsKICAgICAg
ICAgbV9wYWdlTG9hZFN0YXRlLnNldENhbkdvQmFjayh0cmFuc2FjdGlvbiwgbV9iYWNrRm9yd2Fy
ZExpc3QtPmJhY2tJdGVtKCkpOwpAQCAtMzM3NSw3ICszMzc1LDcgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OnNldFRleHRab29tRmFjdG9yKGRvdWJsZSB6b29tRmFjdG9yKQogICAgIGlmICghaGFzUnVu
bmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpTZXRUZXh0Wm9vbUZhY3RvcihtX3RleHRab29tRmFjdG9yKSwgbV93
ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFRleHRab29tRmFjdG9y
KG1fdGV4dFpvb21GYWN0b3IpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldFBhZ2Vab29t
RmFjdG9yKGRvdWJsZSB6b29tRmFjdG9yKQpAQCAtMzM5MCw3ICszMzkwLDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OnNldFBhZ2Vab29tRmFjdG9yKGRvdWJsZSB6b29tRmFjdG9yKQogICAgIGlmICgh
aGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRQYWdlWm9vbUZhY3RvcihtX3BhZ2Vab29tRmFjdG9y
KSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFBhZ2Vab29t
RmFjdG9yKG1fcGFnZVpvb21GYWN0b3IpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldFBh
Z2VBbmRUZXh0Wm9vbUZhY3RvcnMoZG91YmxlIHBhZ2Vab29tRmFjdG9yLCBkb3VibGUgdGV4dFpv
b21GYWN0b3IpCkBAIC0zNDA2LDcgKzM0MDYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0UGFn
ZUFuZFRleHRab29tRmFjdG9ycyhkb3VibGUgcGFnZVpvb21GYWN0b3IsIGRvdWJsZSB0ZXh0Wgog
ICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9w
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRQYWdlQW5kVGV4dFpvb21GYWN0b3Jz
KG1fcGFnZVpvb21GYWN0b3IsIG1fdGV4dFpvb21GYWN0b3IpLCBtX3dlYlBhZ2VJRCk7CisgICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyhtX3BhZ2Va
b29tRmFjdG9yLCBtX3RleHRab29tRmFjdG9yKSk7CiB9CiAKIGRvdWJsZSBXZWJQYWdlUHJveHk6
OnBhZ2Vab29tRmFjdG9yKCkgY29uc3QKQEAgLTM0MzYsNyArMzQzNiw3IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpzY2FsZVBhZ2UoZG91YmxlIHNjYWxlLCBjb25zdCBJbnRQb2ludCYgb3JpZ2luKQog
ICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9w
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTY2FsZVBhZ2Uoc2NhbGUsIG9yaWdpbiks
IG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTY2FsZVBhZ2Uoc2Nh
bGUsIG9yaWdpbikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2NhbGVQYWdlSW5WaWV3Q29v
cmRpbmF0ZXMoZG91YmxlIHNjYWxlLCBjb25zdCBJbnRQb2ludCYgY2VudGVySW5WaWV3Q29vcmRp
bmF0ZXMpCkBAIC0zNDQ4LDcgKzM0NDgsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2NhbGVQYWdl
SW5WaWV3Q29vcmRpbmF0ZXMoZG91YmxlIHNjYWxlLCBjb25zdCBJbnRQb2ludCYgY2VudAogICAg
IGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTY2FsZVBhZ2VJblZpZXdDb29yZGluYXRlcyhz
Y2FsZSwgY2VudGVySW5WaWV3Q29vcmRpbmF0ZXMpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6U2NhbGVQYWdlSW5WaWV3Q29vcmRpbmF0ZXMoc2NhbGUsIGNlbnRl
ckluVmlld0Nvb3JkaW5hdGVzKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzY2FsZVZpZXco
ZG91YmxlIHNjYWxlKQpAQCAtMzQ2MCw3ICszNDYwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNj
YWxlVmlldyhkb3VibGUgc2NhbGUpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNj
YWxlVmlldyhzY2FsZSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpTY2FsZVZpZXcoc2NhbGUpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldEludHJpbnNp
Y0RldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQpAQCAtMzQ3OSw3ICszNDc5LDcg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OndpbmRvd1NjcmVlbkRpZENoYW5nZShQbGF0Zm9ybURpc3Bs
YXlJRCBkaXNwbGF5SUQpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OldpbmRvd1Nj
cmVlbkRpZENoYW5nZShkaXNwbGF5SUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6V2luZG93U2NyZWVuRGlkQ2hhbmdlKGRpc3BsYXlJRCkpOwogfQogCiBmbG9h
dCBXZWJQYWdlUHJveHk6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKQEAgLTM1MTgsNyArMzUx
OCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjphY2Nlc3NpYmlsaXR5U2V0dGluZ3NEaWRDaGFuZ2Uo
KQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpBY2Nlc3NpYmlsaXR5U2V0dGluZ3NE
aWRDaGFuZ2UoKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkFj
Y2Vzc2liaWxpdHlTZXR0aW5nc0RpZENoYW5nZSgpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
OnNldFVzZUZpeGVkTGF5b3V0KGJvb2wgZml4ZWQpCkBAIC0zNTM1LDcgKzM1MzUsNyBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6c2V0VXNlRml4ZWRMYXlvdXQoYm9vbCBmaXhlZCkKICAgICBpZiAoIWhh
c1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0VXNlRml4ZWRMYXlvdXQoZml4ZWQpLCBtX3dlYlBhZ2VJ
RCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0VXNlRml4ZWRMYXlvdXQoZml4ZWQp
KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldEZpeGVkTGF5b3V0U2l6ZShjb25zdCBJbnRT
aXplJiBzaXplKQpAQCAtMzU0OCw3ICszNTQ4LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldEZp
eGVkTGF5b3V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogICAgIGlmICghaGFzUnVubmluZ1By
b2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpTZXRGaXhlZExheW91dFNpemUoc2l6ZSksIG1fd2ViUGFnZUlEKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRGaXhlZExheW91dFNpemUoc2l6ZSkpOwogfQogCiB2
b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWx3YXlzU2hvd3NIb3Jpem9udGFsU2Nyb2xsZXIoYm9vbCBh
bHdheXNTaG93c0hvcml6b250YWxTY3JvbGxlcikKQEAgLTM1NjEsNyArMzU2MSw3IEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpzZXRBbHdheXNTaG93c0hvcml6b250YWxTY3JvbGxlcihib29sIGFsd2F5
c1Nob3dzSG9yaXpvbnRhbFNjCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEFs
d2F5c1Nob3dzSG9yaXpvbnRhbFNjcm9sbGVyKGFsd2F5c1Nob3dzSG9yaXpvbnRhbFNjcm9sbGVy
KSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEFsd2F5c1No
b3dzSG9yaXpvbnRhbFNjcm9sbGVyKGFsd2F5c1Nob3dzSG9yaXpvbnRhbFNjcm9sbGVyKSk7CiB9
CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRBbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIoYm9v
bCBhbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIpCkBAIC0zNTc0LDcgKzM1NzQsNyBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6c2V0QWx3YXlzU2hvd3NWZXJ0aWNhbFNjcm9sbGVyKGJvb2wgYWx3YXlz
U2hvd3NWZXJ0aWNhbFNjcm9sbAogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRB
bHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIoYWx3YXlzU2hvd3NWZXJ0aWNhbFNjcm9sbGVyKSwg
bV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEFsd2F5c1Nob3dz
VmVydGljYWxTY3JvbGxlcihhbHdheXNTaG93c1ZlcnRpY2FsU2Nyb2xsZXIpKTsKIH0KIAogdm9p
ZCBXZWJQYWdlUHJveHk6Omxpc3RlbkZvckxheW91dE1pbGVzdG9uZXMoT3B0aW9uU2V0PFdlYkNv
cmU6OkxheW91dE1pbGVzdG9uZT4gbWlsZXN0b25lcykKQEAgLTM1ODcsNyArMzU4Nyw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpsaXN0ZW5Gb3JMYXlvdXRNaWxlc3RvbmVzKE9wdGlvblNldDxXZWJD
b3JlOjpMYXlvdXRNaWxlc3RvbmU+CiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Okxp
c3RlbkZvckxheW91dE1pbGVzdG9uZXMobWlsZXN0b25lcyksIG1fd2ViUGFnZUlEKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpMaXN0ZW5Gb3JMYXlvdXRNaWxlc3RvbmVzKG1pbGVzdG9u
ZXMpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldFN1cHByZXNzU2Nyb2xsYmFyQW5pbWF0
aW9ucyhib29sIHN1cHByZXNzQW5pbWF0aW9ucykKQEAgLTM2MDAsNyArMzYwMCw3IEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpzZXRTdXBwcmVzc1Njcm9sbGJhckFuaW1hdGlvbnMoYm9vbCBzdXBwcmVz
c0FuaW1hdGlvbnMpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFN1cHByZXNz
U2Nyb2xsYmFyQW5pbWF0aW9ucyhzdXBwcmVzc0FuaW1hdGlvbnMpLCBtX3dlYlBhZ2VJRCk7Cisg
ICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0U3VwcHJlc3NTY3JvbGxiYXJBbmltYXRpb25z
KHN1cHByZXNzQW5pbWF0aW9ucykpOwogfQogCiBib29sIFdlYlBhZ2VQcm94eTo6cnViYmVyQmFu
ZHNBdExlZnQoKSBjb25zdApAQCAtMzY1Miw3ICszNjUyLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OnNldEVuYWJsZVZlcnRpY2FsUnViYmVyQmFuZGluZyhib29sIGVuYWJsZVZlcnRpY2FsUnViYmVy
QmFuZGkKIAogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0RW5hYmxlVmVydGljYWxS
dWJiZXJCYW5kaW5nKGVuYWJsZVZlcnRpY2FsUnViYmVyQmFuZGluZyksIG1fd2ViUGFnZUlEKTsK
KyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRFbmFibGVWZXJ0aWNhbFJ1YmJlckJhbmRp
bmcoZW5hYmxlVmVydGljYWxSdWJiZXJCYW5kaW5nKSk7CiB9CiAgICAgCiBib29sIFdlYlBhZ2VQ
cm94eTo6dmVydGljYWxSdWJiZXJCYW5kaW5nSXNFbmFibGVkKCkgY29uc3QKQEAgLTM2NjksNyAr
MzY2OSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRFbmFibGVIb3Jpem9udGFsUnViYmVyQmFu
ZGluZyhib29sIGVuYWJsZUhvcml6b250YWxSdWJiZXJCCiAKICAgICBpZiAoIWhhc1J1bm5pbmdQ
cm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OlNldEVuYWJsZUhvcml6b250YWxSdWJiZXJCYW5kaW5nKGVuYWJsZUhvcml6b250
YWxSdWJiZXJCYW5kaW5nKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlNldEVuYWJsZUhvcml6b250YWxSdWJiZXJCYW5kaW5nKGVuYWJsZUhvcml6b250YWxSdWJi
ZXJCYW5kaW5nKSk7CiB9CiAgICAgCiBib29sIFdlYlBhZ2VQcm94eTo6aG9yaXpvbnRhbFJ1YmJl
ckJhbmRpbmdJc0VuYWJsZWQoKSBjb25zdApAQCAtMzY4Niw3ICszNjg2LDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OnNldEJhY2tncm91bmRFeHRlbmRzQmV5b25kUGFnZShib29sIGJhY2tncm91bmRF
eHRlbmRzQmV5b25kUGEKIAogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0QmFja2dy
b3VuZEV4dGVuZHNCZXlvbmRQYWdlKGJhY2tncm91bmRFeHRlbmRzQmV5b25kUGFnZSksIG1fd2Vi
UGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRCYWNrZ3JvdW5kRXh0ZW5k
c0JleW9uZFBhZ2UoYmFja2dyb3VuZEV4dGVuZHNCZXlvbmRQYWdlKSk7CiB9CiAKIGJvb2wgV2Vi
UGFnZVByb3h5OjpiYWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2UoKSBjb25zdApAQCAtMzcwMyw3
ICszNzAzLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFBhZ2luYXRpb25Nb2RlKFdlYkNvcmU6
OlBhZ2luYXRpb246Ok1vZGUgbW9kZSkKIAogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
U2V0UGFnaW5hdGlvbk1vZGUobW9kZSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpTZXRQYWdpbmF0aW9uTW9kZShtb2RlKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVBy
b3h5OjpzZXRQYWdpbmF0aW9uQmVoYXZlc0xpa2VDb2x1bW5zKGJvb2wgYmVoYXZlc0xpa2VDb2x1
bW5zKQpAQCAtMzcxNSw3ICszNzE1LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFBhZ2luYXRp
b25CZWhhdmVzTGlrZUNvbHVtbnMoYm9vbCBiZWhhdmVzTGlrZUNvbHVtbnMpCiAKICAgICBpZiAo
IWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX3Byb2Nlc3MtPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFBhZ2luYXRpb25CZWhhdmVzTGlrZUNvbHVtbnMoYmVo
YXZlc0xpa2VDb2x1bW5zKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlNldFBhZ2luYXRpb25CZWhhdmVzTGlrZUNvbHVtbnMoYmVoYXZlc0xpa2VDb2x1bW5zKSk7
CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRQYWdlTGVuZ3RoKGRvdWJsZSBwYWdlTGVuZ3Ro
KQpAQCAtMzcyNyw3ICszNzI3LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFBhZ2VMZW5ndGgo
ZG91YmxlIHBhZ2VMZW5ndGgpCiAKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFBh
Z2VMZW5ndGgocGFnZUxlbmd0aCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpTZXRQYWdlTGVuZ3RoKHBhZ2VMZW5ndGgpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJv
eHk6OnNldEdhcEJldHdlZW5QYWdlcyhkb3VibGUgZ2FwKQpAQCAtMzczOSw3ICszNzM5LDcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnNldEdhcEJldHdlZW5QYWdlcyhkb3VibGUgZ2FwKQogCiAgICAg
aWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9wcm9jZXNz
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRHYXBCZXR3ZWVuUGFnZXMoZ2FwKSwgbV93ZWJQ
YWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEdhcEJldHdlZW5QYWdlcyhn
YXApKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldFBhZ2luYXRpb25MaW5lR3JpZEVuYWJs
ZWQoYm9vbCBsaW5lR3JpZEVuYWJsZWQpCkBAIC0zNzUxLDcgKzM3NTEsNyBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6c2V0UGFnaW5hdGlvbkxpbmVHcmlkRW5hYmxlZChib29sIGxpbmVHcmlkRW5hYmxl
ZCkKICAgICAKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsK
LSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFBhZ2luYXRpb25MaW5l
R3JpZEVuYWJsZWQobGluZUdyaWRFbmFibGVkKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OlNldFBhZ2luYXRpb25MaW5lR3JpZEVuYWJsZWQobGluZUdyaWRFbmFi
bGVkKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpwYWdlU2NhbGVGYWN0b3JEaWRDaGFuZ2Uo
ZG91YmxlIHNjYWxlRmFjdG9yKQpAQCAtMzc3Niw3ICszNzc2LDcgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OmZpbmRTdHJpbmdNYXRjaGVzKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBGaW5kT3B0aW9ucyBv
cHRpb25zLAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpGaW5kU3RyaW5nTWF0Y2hlcyhzdHJpbmcsIG9wdGlvbnMsIG1heE1h
dGNoQ291bnQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Rmlu
ZFN0cmluZ01hdGNoZXMoc3RyaW5nLCBvcHRpb25zLCBtYXhNYXRjaENvdW50KSk7CiB9CiAKIHZv
aWQgV2ViUGFnZVByb3h5OjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBGaW5kT3B0
aW9ucyBvcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50LCBGdW5jdGlvbjx2b2lkIChib29s
LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQpAQCAtMzc4NSw3ICsz
Nzg1LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJp
bmcsIEZpbmRPcHRpb25zIG9wdGlvbnMsIHVuc2lnbmUKICAgICBpZiAoY2FsbGJhY2tGdW5jdGlv
bikKICAgICAgICAgY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNr
RnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2Vi
UGFnZVByb3h5OjpmaW5kU3RyaW5nIl9zKSk7CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OkZpbmRTdHJpbmcoc3RyaW5nLCBvcHRpb25zLCBtYXhNYXRjaENvdW50LCBj
YWxsYmFja0lEKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkZp
bmRTdHJpbmcoc3RyaW5nLCBvcHRpb25zLCBtYXhNYXRjaENvdW50LCBjYWxsYmFja0lEKSk7CiB9
CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpmaW5kU3RyaW5nQ2FsbGJhY2soYm9vbCBmb3VuZCwgQ2Fs
bGJhY2tJRCBjYWxsYmFja0lEKQpAQCAtMzc5OSwyMiArMzc5OSwyMiBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6ZmluZFN0cmluZ0NhbGxiYWNrKGJvb2wgZm91bmQsIENhbGxiYWNrSUQgY2FsbGJhY2tJ
RCkKIAogdm9pZCBXZWJQYWdlUHJveHk6OmdldEltYWdlRm9yRmluZE1hdGNoKGludDMyX3QgbWF0
Y2hJbmRleCkKIHsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdldElt
YWdlRm9yRmluZE1hdGNoKG1hdGNoSW5kZXgpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6R2V0SW1hZ2VGb3JGaW5kTWF0Y2gobWF0Y2hJbmRleCkpOwogfQogCiB2
b2lkIFdlYlBhZ2VQcm94eTo6c2VsZWN0RmluZE1hdGNoKGludDMyX3QgbWF0Y2hJbmRleCkKIHsK
LSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNlbGVjdEZpbmRNYXRjaCht
YXRjaEluZGV4KSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNl
bGVjdEZpbmRNYXRjaChtYXRjaEluZGV4KSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjppbmRp
Y2F0ZUZpbmRNYXRjaChpbnQzMl90IG1hdGNoSW5kZXgpCiB7Ci0gICAgbV9wcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpJbmRpY2F0ZUZpbmRNYXRjaChtYXRjaEluZGV4KSwgbV93ZWJQ
YWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkluZGljYXRlRmluZE1hdGNoKG1h
dGNoSW5kZXgpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmhpZGVGaW5kVUkoKQogewotICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SGlkZUZpbmRVSSgpLCBtX3dlYlBh
Z2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6SGlkZUZpbmRVSSgpKTsKIH0KIAog
dm9pZCBXZWJQYWdlUHJveHk6OmNvdW50U3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmIHN0cmlu
ZywgRmluZE9wdGlvbnMgb3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCkKQEAgLTM4MjIs
NyArMzgyMiw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpjb3VudFN0cmluZ01hdGNoZXMoY29uc3Qg
U3RyaW5nJiBzdHJpbmcsIEZpbmRPcHRpb25zIG9wdGlvbnMsCiAgICAgaWYgKCFoYXNSdW5uaW5n
UHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OkNvdW50U3RyaW5nTWF0Y2hlcyhzdHJpbmcsIG9wdGlvbnMsIG1heE1hdGNo
Q291bnQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q291bnRT
dHJpbmdNYXRjaGVzKHN0cmluZywgb3B0aW9ucywgbWF4TWF0Y2hDb3VudCkpOwogfQogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6cmVwbGFjZU1hdGNoZXMoVmVjdG9yPHVpbnQzMl90PiYmIG1hdGNoSW5k
aWNlcywgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFRleHQsIGJvb2wgc2VsZWN0aW9uT25seSwg
RnVuY3Rpb248dm9pZCh1aW50NjRfdCwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2sp
CkBAIC0zODMzLDcgKzM4MzMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVwbGFjZU1hdGNoZXMo
VmVjdG9yPHVpbnQzMl90PiYmIG1hdGNoSW5kaWNlcywgY29uc3QgU3RyaW5nJgogICAgIH0KIAog
ICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrKSwg
bV9wcm9jZXNzLT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBhZ2VQcm94eTo6
cmVwbGFjZU1hdGNoZXMiX3MpKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlJlcGxhY2VNYXRjaGVzKFdURk1vdmUobWF0Y2hJbmRpY2VzKSwgcmVwbGFjZW1lbnRUZXh0
LCBzZWxlY3Rpb25Pbmx5LCBjYWxsYmFja0lEKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OlJlcGxhY2VNYXRjaGVzKFdURk1vdmUobWF0Y2hJbmRpY2VzKSwgcmVw
bGFjZW1lbnRUZXh0LCBzZWxlY3Rpb25Pbmx5LCBjYWxsYmFja0lEKSk7CiB9CiAKIHZvaWQgV2Vi
UGFnZVByb3h5OjpsYXVuY2hJbml0aWFsUHJvY2Vzc0lmTmVjZXNzYXJ5KCkKQEAgLTM4NTgsMTQg
KzM4NTgsMTQgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZVNj
cmlwdFdvcmxkKGNvbnN0IFN0cmluZyYgc2NyaXB0LCBib28KICAgICB9CiAKICAgICBhdXRvIGNh
bGxiYWNrSUQgPSBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgbV9w
cm9jZXNzLT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBhZ2VQcm94eTo6cnVu
SmF2YVNjcmlwdEluTWFpbkZyYW1lU2NyaXB0V29ybGQiX3MpKTsKLSAgICBtX3Byb2Nlc3MtPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJ1bkphdmFTY3JpcHRJbk1haW5GcmFtZVNjcmlwdFdvcmxk
KHNjcmlwdCwgZm9yY2VVc2VyR2VzdHVyZSwgd29ybGROYW1lLCBjYWxsYmFja0lEKSwgbV93ZWJQ
YWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJ1bkphdmFTY3JpcHRJbk1haW5G
cmFtZVNjcmlwdFdvcmxkKHNjcmlwdCwgZm9yY2VVc2VyR2VzdHVyZSwgd29ybGROYW1lLCBjYWxs
YmFja0lEKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpydW5KYXZhU2NyaXB0SW5GcmFtZShG
cmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiBzY3JpcHQsIGJvb2wgZm9yY2VV
c2VyR2VzdHVyZSwgV1RGOjpGdW5jdGlvbjx2b2lkKEFQSTo6U2VyaWFsaXplZFNjcmlwdFZhbHVl
KiwgYm9vbCBoYWRFeGNlcHRpb24sIGNvbnN0IEV4Y2VwdGlvbkRldGFpbHMmLCBDYWxsYmFja0Jh
c2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewogICAgIEFTU0VSVChtYWluRnJhbWUo
KS0+ZnJhbWVJRCgpICE9IGZyYW1lSUQpOwogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJh
Y2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigp
LmJhY2tncm91bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5OjpydW5KYXZhU2NyaXB0SW5GcmFtZSJf
cykpOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UnVuSmF2YVNjcmlw
dEluRnJhbWUoZnJhbWVJRCwgc2NyaXB0LCBmb3JjZVVzZXJHZXN0dXJlLCBjYWxsYmFja0lEKSwg
bV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJ1bkphdmFTY3JpcHRJ
bkZyYW1lKGZyYW1lSUQsIHNjcmlwdCwgZm9yY2VVc2VyR2VzdHVyZSwgY2FsbGJhY2tJRCkpOwog
fQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRp
b24oV1RGOjpGdW5jdGlvbjx2b2lkIChjb25zdCBTdHJpbmcmLCBDYWxsYmFja0Jhc2U6OkVycm9y
KT4mJiBjYWxsYmFja0Z1bmN0aW9uKQpAQCAtMzg3Niw3ICszODc2LDcgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OmdldFJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uKFdURjo6RnVuY3Rpb248
dm9pZCAoY29uc3QKICAgICB9CiAgICAgCiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFj
a3MucHV0KFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCku
YmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6OmdldFJlbmRlclRyZWVFeHRlcm5hbFJl
cHJlc2VudGF0aW9uIl9zKSk7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpHZXRSZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbihjYWxsYmFja0lEKSwgbV93ZWJQ
YWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdldFJlbmRlclRyZWVFeHRlcm5h
bFJlcHJlc2VudGF0aW9uKGNhbGxiYWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6Omdl
dFNvdXJjZUZvckZyYW1lKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBXVEY6OkZ1bmN0aW9uPHZvaWQg
KGNvbnN0IFN0cmluZyYsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24p
CkBAIC0zODg4LDcgKzM4ODgsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0U291cmNlRm9yRnJh
bWUoV2ViRnJhbWVQcm94eSogZnJhbWUsIFdURjo6RnVuY3Rpb248dm9pZCAoYwogICAgIAogICAg
IGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rp
b24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViUGFnZVBy
b3h5OjpnZXRTb3VyY2VGb3JGcmFtZSJfcykpOwogICAgIG1fbG9hZERlcGVuZGVudFN0cmluZ0Nh
bGxiYWNrSURzLmFkZChjYWxsYmFja0lEKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OkdldFNvdXJjZUZvckZyYW1lKGZyYW1lLT5mcmFtZUlEKCksIGNhbGxiYWNrSUQp
LCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R2V0U291cmNlRm9y
RnJhbWUoZnJhbWUtPmZyYW1lSUQoKSwgY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQ
cm94eTo6Z2V0Q29udGVudHNBc1N0cmluZyhXVEY6OkZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmlu
ZyYsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCkBAIC0zOTAwLDcg
KzM5MDAsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0Q29udGVudHNBc1N0cmluZyhXVEY6OkZ1
bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYsIENhbGxiYQogICAgIAogICAgIGF1dG8gY2FsbGJh
Y2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nl
c3MtPnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5OjpnZXRDb250
ZW50c0FzU3RyaW5nIl9zKSk7CiAgICAgbV9sb2FkRGVwZW5kZW50U3RyaW5nQ2FsbGJhY2tJRHMu
YWRkKGNhbGxiYWNrSUQpOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
R2V0Q29udGVudHNBc1N0cmluZyhjYWxsYmFja0lEKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OkdldENvbnRlbnRzQXNTdHJpbmcoY2FsbGJhY2tJRCkpOwogfQog
CiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC0zOTExLDcgKzM5MTEsNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6Z2V0Q29udGVudHNBc0F0dHJpYnV0ZWRTdHJpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChjb25zdCBBdAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9wcm9jZXNzLT5jb25u
ZWN0aW9uKCktPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViUGFnZTo6R2V0Q29udGVu
dHNBc0F0dHJpYnV0ZWRTdHJpbmcoKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG1fd2Vi
UGFnZUlEKTsKKyAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OkdldENv
bnRlbnRzQXNBdHRyaWJ1dGVkU3RyaW5nKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IH0KICNlbmRpZgogCkBAIC0zOTI0LDcgKzM5MjQsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0
Qnl0ZWNvZGVQcm9maWxlKFdURjo6RnVuY3Rpb248dm9pZCAoY29uc3QgU3RyaW5nJiwgQ2FsbGJh
YwogICAgIAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNh
bGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0
eSgiV2ViUGFnZVByb3h5OjpnZXRCeXRlY29kZVByb2ZpbGUiX3MpKTsKICAgICBtX2xvYWREZXBl
bmRlbnRTdHJpbmdDYWxsYmFja0lEcy5hZGQoY2FsbGJhY2tJRCk7Ci0gICAgbV9wcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRCeXRlY29kZVByb2ZpbGUoY2FsbGJhY2tJRCksIG1f
d2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRCeXRlY29kZVByb2Zp
bGUoY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0U2FtcGxpbmdQcm9m
aWxlck91dHB1dChXVEY6OkZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYsIENhbGxiYWNrQmFz
ZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCkBAIC0zOTM2LDcgKzM5MzYsNyBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6Z2V0U2FtcGxpbmdQcm9maWxlck91dHB1dChXVEY6OkZ1bmN0aW9uPHZv
aWQgKGNvbnN0IFN0cmluZyYsCiAgICAgCiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFj
a3MucHV0KFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCku
YmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6OmdldFNhbXBsaW5nUHJvZmlsZXJPdXRw
dXQiX3MpKTsKICAgICBtX2xvYWREZXBlbmRlbnRTdHJpbmdDYWxsYmFja0lEcy5hZGQoY2FsbGJh
Y2tJRCk7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRTYW1wbGlu
Z1Byb2ZpbGVyT3V0cHV0KGNhbGxiYWNrSUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6R2V0U2FtcGxpbmdQcm9maWxlck91dHB1dChjYWxsYmFja0lEKSk7CiB9
CiAKICNpZiBFTkFCTEUoTUhUTUwpCkBAIC0zOTQ4LDcgKzM5NDgsNyBAQCB2b2lkIFdlYlBhZ2VQ
cm94eTo6Z2V0Q29udGVudHNBc01IVE1MRGF0YShGdW5jdGlvbjx2b2lkIChBUEk6OkRhdGEqLCBD
YWxsYmFja0JhcwogICAgIH0KIAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1
dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tn
cm91bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5OjpnZXRDb250ZW50c0FzTUhUTUxEYXRhIl9zKSk7
Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRDb250ZW50c0FzTUhU
TUxEYXRhKGNhbGxiYWNrSUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6R2V0Q29udGVudHNBc01IVE1MRGF0YShjYWxsYmFja0lEKSk7CiB9CiAjZW5kaWYKIApA
QCAtMzk2MCw3ICszOTYwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmdldFNlbGVjdGlvbk9yQ29u
dGVudHNBc1N0cmluZyhXVEY6OkZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmkKICAgICB9CiAgICAg
CiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2tG
dW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQ
YWdlUHJveHk6OmdldFNlbGVjdGlvbk9yQ29udGVudHNBc1N0cmluZyJfcykpOwotICAgIG1fcHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R2V0U2VsZWN0aW9uT3JDb250ZW50c0FzU3Ry
aW5nKGNhbGxiYWNrSUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6R2V0U2VsZWN0aW9uT3JDb250ZW50c0FzU3RyaW5nKGNhbGxiYWNrSUQpKTsKIH0KIAogdm9p
ZCBXZWJQYWdlUHJveHk6OmdldFNlbGVjdGlvbkFzV2ViQXJjaGl2ZURhdGEoRnVuY3Rpb248dm9p
ZCAoQVBJOjpEYXRhKiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2tGdW5jdGlvbikK
QEAgLTM5NzEsNyArMzk3MSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpnZXRTZWxlY3Rpb25Bc1dl
YkFyY2hpdmVEYXRhKEZ1bmN0aW9uPHZvaWQgKEFQSTo6RGF0YSosIENhbGxiCiAgICAgfQogICAg
IAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNr
RnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2Vi
UGFnZVByb3h5OjpnZXRTZWxlY3Rpb25Bc1dlYkFyY2hpdmVEYXRhIl9zKSk7Ci0gICAgbV9wcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRTZWxlY3Rpb25Bc1dlYkFyY2hpdmVEYXRh
KGNhbGxiYWNrSUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
R2V0U2VsZWN0aW9uQXNXZWJBcmNoaXZlRGF0YShjYWxsYmFja0lEKSk7CiB9CiAKIHZvaWQgV2Vi
UGFnZVByb3h5OjpnZXRNYWluUmVzb3VyY2VEYXRhT2ZGcmFtZShXZWJGcmFtZVByb3h5KiBmcmFt
ZSwgRnVuY3Rpb248dm9pZCAoQVBJOjpEYXRhKiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2Fs
bGJhY2tGdW5jdGlvbikKQEAgLTM5ODIsNyArMzk4Miw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpn
ZXRNYWluUmVzb3VyY2VEYXRhT2ZGcmFtZShXZWJGcmFtZVByb3h5KiBmcmFtZSwgRnVuY3Rpb248
dm9pCiAgICAgfQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChX
VEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91
bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5OjpnZXRNYWluUmVzb3VyY2VEYXRhT2ZGcmFtZSJfcykp
OwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R2V0TWFpblJlc291cmNl
RGF0YU9mRnJhbWUoZnJhbWUtPmZyYW1lSUQoKSwgY2FsbGJhY2tJRCksIG1fd2ViUGFnZUlEKTsK
KyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHZXRNYWluUmVzb3VyY2VEYXRhT2ZGcmFtZShm
cmFtZS0+ZnJhbWVJRCgpLCBjYWxsYmFja0lEKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5Ojpn
ZXRSZXNvdXJjZURhdGFGcm9tRnJhbWUoV2ViRnJhbWVQcm94eSogZnJhbWUsIEFQSTo6VVJMKiBy
ZXNvdXJjZVVSTCwgRnVuY3Rpb248dm9pZCAoQVBJOjpEYXRhKiwgQ2FsbGJhY2tCYXNlOjpFcnJv
cik+JiYgY2FsbGJhY2tGdW5jdGlvbikKQEAgLTM5OTMsNyArMzk5Myw3IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpnZXRSZXNvdXJjZURhdGFGcm9tRnJhbWUoV2ViRnJhbWVQcm94eSogZnJhbWUsIEFQ
STo6VVJMKiByZXNvCiAgICAgfQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJh
Y2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigp
LmJhY2tncm91bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5OjpnZXRSZXNvdXJjZURhdGFGcm9tRnJh
bWUiX3MpKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdldFJlc291
cmNlRGF0YUZyb21GcmFtZShmcmFtZS0+ZnJhbWVJRCgpLCByZXNvdXJjZVVSTC0+c3RyaW5nKCks
IGNhbGxiYWNrSUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
R2V0UmVzb3VyY2VEYXRhRnJvbUZyYW1lKGZyYW1lLT5mcmFtZUlEKCksIHJlc291cmNlVVJMLT5z
dHJpbmcoKSwgY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0V2ViQXJj
aGl2ZU9mRnJhbWUoV2ViRnJhbWVQcm94eSogZnJhbWUsIEZ1bmN0aW9uPHZvaWQgKEFQSTo6RGF0
YSosIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCkBAIC00MDA0LDcg
KzQwMDQsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0V2ViQXJjaGl2ZU9mRnJhbWUoV2ViRnJh
bWVQcm94eSogZnJhbWUsIEZ1bmN0aW9uPHZvaWQgKEFQSQogICAgIH0KICAgICAKICAgICBhdXRv
IGNhbGxiYWNrSUQgPSBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwg
bV9wcm9jZXNzLT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBhZ2VQcm94eTo6
Z2V0V2ViQXJjaGl2ZU9mRnJhbWUiX3MpKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OkdldFdlYkFyY2hpdmVPZkZyYW1lKGZyYW1lLT5mcmFtZUlEKCksIGNhbGxiYWNr
SUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R2V0V2ViQXJj
aGl2ZU9mRnJhbWUoZnJhbWUtPmZyYW1lSUQoKSwgY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdl
YlBhZ2VQcm94eTo6Zm9yY2VSZXBhaW50KFJlZlB0cjxWb2lkQ2FsbGJhY2s+JiYgY2FsbGJhY2sp
CkBAIC00MDM4LDcgKzQwMzgsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Zm9yY2VSZXBhaW50KFJl
ZlB0cjxWb2lkQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiAKICAgICBhdXRvIGNhbGxiYWNrSUQgPSBt
X2NhbGxiYWNrcy5wdXQoV1RGTW92ZShkaWRGb3JjZVJlcGFpbnRDYWxsYmFjayksIG1fcHJvY2Vz
cy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6OmZvcmNlUmVw
YWludCJfcykpOwogICAgIG1fZHJhd2luZ0FyZWEtPndhaXRGb3JCYWNraW5nU3RvcmVVcGRhdGVP
bk5leHRQYWludCgpOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Rm9y
Y2VSZXBhaW50KGNhbGxiYWNrSUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6Rm9yY2VSZXBhaW50KGNhbGxiYWNrSUQpKTsKIH0KIAogc3RhdGljIE9wdGlvblNl
dDxJUEM6OlNlbmRPcHRpb24+IHByaW50aW5nU2VuZE9wdGlvbnMoYm9vbCBpc1BlcmZvcm1pbmdE
T01QcmludE9wZXJhdGlvbikKQEAgLTQwNjQsNyArNDA2NCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5
OjpwcmVmZXJlbmNlc0RpZENoYW5nZSgpCiAgICAgLy8gZXZlbiBpZiBub3RoaW5nIGNoYW5nZWQg
aW4gVUkgcHJvY2Vzcywgc28gdGhhdCBvdmVycmlkZXMgZ2V0IHJlbW92ZWQuCiAKICAgICAvLyBQ
cmVmZXJlbmNlcyBuZWVkIHRvIGJlIHVwZGF0ZWQgZHVyaW5nIHN5bmNocm9ub3VzIHByaW50aW5n
IHRvIG1ha2UgInByaW50IGJhY2tncm91bmRzIiBwcmVmZXJlbmNlIHdvcmsgd2hlbiB0b2dnbGVk
IGZyb20gYSBwcmludCBkaWFsb2cgY2hlY2tib3guCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpQcmVmZXJlbmNlc0RpZENoYW5nZShwcmVmZXJlbmNlc1N0b3JlKCkpLCBt
X3dlYlBhZ2VJRCwgcHJpbnRpbmdTZW5kT3B0aW9ucyhtX2lzUGVyZm9ybWluZ0RPTVByaW50T3Bl
cmF0aW9uKSk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UHJlZmVyZW5jZXNEaWRDaGFu
Z2UocHJlZmVyZW5jZXNTdG9yZSgpKSwgcHJpbnRpbmdTZW5kT3B0aW9ucyhtX2lzUGVyZm9ybWlu
Z0RPTVByaW50T3BlcmF0aW9uKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDcmVhdGVN
YWluRnJhbWUoRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQpCkBAIC01MTA4LDcgKzUxMDgsNyBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKEZyYW1lSWRl
bnRpZmllciBmcmFtZUlELCBTZWN1cgogICAgICAgICBBU1NFUlRfVU5VU0VEKHNhZmVCcm93c2lu
Z1dhcm5pbmcsICFzYWZlQnJvd3NpbmdXYXJuaW5nKTsKIAogICAgICAgICBhdXRvIHNlbmRlciA9
IFBvbGljeURlY2lzaW9uU2VuZGVyOjpjcmVhdGUoaWRlbnRpZmllciwgW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBmcmFtZUlELCBsaXN0ZW5lcklEXSAoYXV0
by4uLiBhcmdzKSB7Ci0gICAgICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OkRpZFJlY2VpdmVQb2xpY3lEZWNpc2lvbihmcmFtZUlELCBsaXN0ZW5lcklELCBhcmdzLi4u
KSwgbV93ZWJQYWdlSUQpOworICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlk
UmVjZWl2ZVBvbGljeURlY2lzaW9uKGZyYW1lSUQsIGxpc3RlbmVySUQsIGFyZ3MuLi4pKTsKICAg
ICAgICAgfSk7CiAKICAgICAgICAgcmVjZWl2ZWRQb2xpY3lEZWNpc2lvbihwb2xpY3lBY3Rpb24s
IG51bGxwdHIsIFdURjo6bnVsbG9wdCwgV1RGTW92ZShzZW5kZXIpKTsKQEAgLTUxOTQsNyArNTE5
NCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojp3aWxsU3VibWl0Rm9ybShGcmFtZUlkZW50aWZpZXIg
ZnJhbWVJRCwgRnJhbWVJZGVudGlmaWVyIHNvdXJjCiAgICAgTUVTU0FHRV9DSEVDSyhtX3Byb2Nl
c3MsIHNvdXJjZUZyYW1lKTsKIAogICAgIG1fZm9ybUNsaWVudC0+d2lsbFN1Ym1pdEZvcm0oKnRo
aXMsICpmcmFtZSwgKnNvdXJjZUZyYW1lLCB0ZXh0RmllbGRWYWx1ZXMsIG1fcHJvY2Vzcy0+dHJh
bnNmb3JtSGFuZGxlc1RvT2JqZWN0cyh1c2VyRGF0YS5vYmplY3QoKSkuZ2V0KCksIFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGZyYW1lSUQsIGxpc3RlbmVySURdKCkgewot
ICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNvbnRpbnVlV2lsbFN1
Ym1pdEZvcm0oZnJhbWVJRCwgbGlzdGVuZXJJRCksIG1fd2ViUGFnZUlEKTsKKyAgICAgICAgc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6Q29udGludWVXaWxsU3VibWl0Rm9ybShmcmFtZUlELCBsaXN0
ZW5lcklEKSk7CiAgICAgfSk7CiB9CiAKQEAgLTU2NTMsNyArNTY1Myw3IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpydW5PcGVuUGFuZWwoRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIFNlY3VyaXR5T3Jp
Z2luRGF0YSYmIGZyCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2hvd1NoYXJlU2hlZXQoY29uc3QgU2hh
cmVEYXRhV2l0aFBhcnNlZFVSTCYgc2hhcmVEYXRhLCBTaGFyZVNoZWV0Q2FsbGJhY2tJRCBjYWxs
YmFja0lEKQogewogICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+IGNvbXBsZXRpb25I
YW5kbGVyID0gW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2tJ
RF0gKGJvb2wgYWNjZXNzKSB7Ci0gICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6RGlkQ29tcGxldGVTaGFyZVNoZWV0KGFjY2VzcywgY2FsbGJhY2tJRCksIG1fd2ViUGFn
ZUlEKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkQ29tcGxldGVTaGFyZVNo
ZWV0KGFjY2VzcywgY2FsbGJhY2tJRCkpOwogICAgIH07CiAgICAgCiAgICAgcGFnZUNsaWVudCgp
LnNob3dTaGFyZVNoZWV0KHNoYXJlRGF0YSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwpA
QCAtNTY4NSw3ICs1Njg1LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldE1lZGlhVm9sdW1lKGZs
b2F0IHZvbHVtZSkKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldE1lZGlh
Vm9sdW1lKHZvbHVtZSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpTZXRNZWRpYVZvbHVtZSh2b2x1bWUpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldE11
dGVkKFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6Ok11dGVkU3RhdGVGbGFncyBzdGF0ZSkKQEAgLTU3
MDEsNyArNTcwMSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRNdXRlZChXZWJDb3JlOjpNZWRp
YVByb2R1Y2VyOjpNdXRlZFN0YXRlRmxhZ3Mgc3RhdGUpCiAgICAgICAgIFVzZXJNZWRpYVByb2Nl
c3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5tdXRlQ2FwdHVyZU1lZGlhU3RyZWFtc0V4Y2VwdEluKCp0
aGlzKTsKICNlbmRpZgogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpT
ZXRNdXRlZChzdGF0ZSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpTZXRNdXRlZChzdGF0ZSkpOwogICAgIGFjdGl2aXR5U3RhdGVEaWRDaGFuZ2UoeyBBY3Rpdml0
eVN0YXRlOjpJc0F1ZGlibGUsIEFjdGl2aXR5U3RhdGU6OklzQ2FwdHVyaW5nTWVkaWEgfSk7CiB9
CiAKQEAgLTU3MjMsNyArNTcyMyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzdG9wTWVkaWFDYXB0
dXJlKCkKICAgICAgICAgcmV0dXJuOwogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICBt
X3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlN0b3BNZWRpYUNhcHR1cmUoKSwgbV93
ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlN0b3BNZWRpYUNhcHR1cmUo
KSk7CiAjZW5kaWYKIH0KIApAQCAtNTczMiw3ICs1NzMyLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OnN0b3BBbGxNZWRpYVBsYXliYWNrKCkKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
U3RvcEFsbE1lZGlhUGxheWJhY2soKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OlN0b3BBbGxNZWRpYVBsYXliYWNrKCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94
eTo6c3VzcGVuZEFsbE1lZGlhUGxheWJhY2soKQpAQCAtNTc0NCw3ICs1NzQ0LDcgQEAgdm9pZCBX
ZWJQYWdlUHJveHk6OnN1c3BlbmRBbGxNZWRpYVBsYXliYWNrKCkKICAgICBpZiAoIWhhc1J1bm5p
bmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6U3VzcGVuZEFsbE1lZGlhUGxheWJhY2soKSwgbV93ZWJQYWdlSUQpOwor
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlN1c3BlbmRBbGxNZWRpYVBsYXliYWNrKCkpOwog
fQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6cmVzdW1lQWxsTWVkaWFQbGF5YmFjaygpCkBAIC01NzU2
LDcgKzU3NTYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVzdW1lQWxsTWVkaWFQbGF5YmFjaygp
CiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBt
X3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJlc3VtZUFsbE1lZGlhUGxheWJhY2so
KSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJlc3VtZUFsbE1l
ZGlhUGxheWJhY2soKSk7CiB9CiAKICNpZiBFTkFCTEUoTUVESUFfU0VTU0lPTikKQEAgLTU3NjUs
NyArNTc2NSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpoYW5kbGVNZWRpYUV2ZW50KE1lZGlhRXZl
bnRUeXBlIGV2ZW50VHlwZSkKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAg
IHJldHVybjsKICAgICAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Okhh
bmRsZU1lZGlhRXZlbnQoZXZlbnRUeXBlKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OkhhbmRsZU1lZGlhRXZlbnQoZXZlbnRUeXBlKTsKIH0KIAogdm9pZCBXZWJQ
YWdlUHJveHk6OnNldFZvbHVtZU9mTWVkaWFFbGVtZW50KGRvdWJsZSB2b2x1bWUsIHVpbnQ2NF90
IGVsZW1lbnRJRCkKQEAgLTU3NzMsNyArNTc3Myw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRW
b2x1bWVPZk1lZGlhRWxlbWVudChkb3VibGUgdm9sdW1lLCB1aW50NjRfdCBlbGVtZW50SUQpCiAg
ICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFZvbHVtZU9mTWVkaWFFbGVtZW50KHZv
bHVtZSwgZWxlbWVudElEKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlNldFZvbHVtZU9mTWVkaWFFbGVtZW50KHZvbHVtZSwgZWxlbWVudElEKSk7CiB9CiAjZW5k
aWYKIApAQCAtNTc4Nyw3ICs1Nzg3LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldE1heVN0YXJ0
TWVkaWFXaGVuSW5XaW5kb3coYm9vbCBtYXlTdGFydE1lZGlhKQogICAgIGlmICghaGFzUnVubmlu
Z1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcHJvY2VzcygpLnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OlNldE1heVN0YXJ0TWVkaWFXaGVuSW5XaW5kb3cobWF5U3RhcnRNZWRpYSks
IG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRNYXlTdGFydE1l
ZGlhV2hlbkluV2luZG93KG1heVN0YXJ0TWVkaWEpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5JiBkb3dubG9hZCkKQEAgLTU4MzQs
NyArNTgzNCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDaG9vc2VDb2xvcihjb25zdCBXZWJD
b3JlOjpDb2xvciYgY29sb3IpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZENo
b29zZUNvbG9yKGNvbG9yKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OkRpZENob29zZUNvbG9yKGNvbG9yKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRF
bmRDb2xvclBpY2tlcigpCkBAIC01ODQzLDcgKzU4NDMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
ZGlkRW5kQ29sb3JQaWNrZXIoKQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRF
bmRDb2xvclBpY2tlcigpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6RGlkRW5kQ29sb3JQaWNrZXIoKSk7CiB9CiAjZW5kaWYKIApAQCAtNTg3Nyw3ICs1ODc3LDcg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENsb3NlU3VnZ2VzdGlvbnMoKQogICAgICAgICByZXR1
cm47CiAKICAgICBtX2RhdGFMaXN0U3VnZ2VzdGlvbnNEcm9wZG93biA9IG51bGxwdHI7Ci0gICAg
bV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRDbG9zZVN1Z2dlc3Rpb25zKCks
IG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRDbG9zZVN1Z2dl
c3Rpb25zKCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkU2VsZWN0T3B0aW9uKGNvbnN0
IFN0cmluZyYgc2VsZWN0ZWRPcHRpb24pCkBAIC01ODg1LDcgKzU4ODUsNyBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6ZGlkU2VsZWN0T3B0aW9uKGNvbnN0IFN0cmluZyYgc2VsZWN0ZWRPcHRpb24pCiAg
ICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZFNlbGVjdERhdGFMaXN0T3B0aW9uKHNl
bGVjdGVkT3B0aW9uKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OkRpZFNlbGVjdERhdGFMaXN0T3B0aW9uKHNlbGVjdGVkT3B0aW9uKSk7CiB9CiAKICNlbmRpZgpA
QCAtNTkzOCw3ICs1OTM4LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldEFsbG93c01lZGlhRG9j
dW1lbnRJbmxpbmVQbGF5YmFjayhib29sIGFsbG93cykKICAgICAgICAgcmV0dXJuOwogICAgIG1f
YWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrID0gYWxsb3dzOwogCi0gICAgbV9wcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRBbGxvd3NNZWRpYURvY3VtZW50SW5saW5l
UGxheWJhY2soYWxsb3dzKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlNldEFsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5YmFjayhhbGxvd3MpKTsKIH0KICNl
bmRpZgogCkBAIC02MTA4LDkgKzYxMDgsOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmFpbFRv
RmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICBtX2ZpbmRDbGllbnQtPmRpZEZh
aWxUb0ZpbmRTdHJpbmcodGhpcywgc3RyaW5nKTsKIH0KIAotYm9vbCBXZWJQYWdlUHJveHk6OnNl
bmRNZXNzYWdlKHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+IGVuY29kZXIsIE9wdGlvblNl
dDxJUEM6OlNlbmRPcHRpb24+IHNlbmRPcHRpb25zKQorYm9vbCBXZWJQYWdlUHJveHk6OnNlbmRN
ZXNzYWdlKHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+IGVuY29kZXIsIE9wdGlvblNldDxJ
UEM6OlNlbmRPcHRpb24+IHNlbmRPcHRpb25zLCBPcHRpb25hbDxzdGQ6OnBhaXI8Q29tcGxldGlv
bkhhbmRsZXI8dm9pZChJUEM6OkRlY29kZXIqKT4sIHVpbnQ2NF90Pj4mJiBhc3luY1JlcGx5SW5m
bykKIHsKLSAgICByZXR1cm4gbV9wcm9jZXNzLT5zZW5kTWVzc2FnZShXVEZNb3ZlKGVuY29kZXIp
LCBzZW5kT3B0aW9ucyk7CisgICAgcmV0dXJuIG1fcHJvY2Vzcy0+c2VuZE1lc3NhZ2UoV1RGTW92
ZShlbmNvZGVyKSwgc2VuZE9wdGlvbnMsIFdURk1vdmUoYXN5bmNSZXBseUluZm8pKTsKIH0KIAog
SVBDOjpDb25uZWN0aW9uKiBXZWJQYWdlUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkg
Y29uc3QKQEAgLTYxMjUsMTIgKzYxMjUsMTIgQEAgdWludDY0X3QgV2ViUGFnZVByb3h5OjptZXNz
YWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0CiAKIHZvaWQgV2ViUGFnZVByb3h5Ojp2YWx1
ZUNoYW5nZWRGb3JQb3B1cE1lbnUoV2ViUG9wdXBNZW51UHJveHkqLCBpbnQzMl90IG5ld1NlbGVj
dGVkSW5kZXgpCiB7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRD
aGFuZ2VTZWxlY3RlZEluZGV4Rm9yQWN0aXZlUG9wdXBNZW51KG5ld1NlbGVjdGVkSW5kZXgpLCBt
X3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkQ2hhbmdlU2VsZWN0
ZWRJbmRleEZvckFjdGl2ZVBvcHVwTWVudShuZXdTZWxlY3RlZEluZGV4KSk7CiB9CiAKIHZvaWQg
V2ViUGFnZVByb3h5OjpzZXRUZXh0RnJvbUl0ZW1Gb3JQb3B1cE1lbnUoV2ViUG9wdXBNZW51UHJv
eHkqLCBpbnQzMl90IGluZGV4KQogewotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6U2V0VGV4dEZvckFjdGl2ZVBvcHVwTWVudShpbmRleCksIG1fd2ViUGFnZUlEKTsKKyAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRUZXh0Rm9yQWN0aXZlUG9wdXBNZW51KGluZGV4
KSk7CiB9CiAKIGJvb2wgV2ViUGFnZVByb3h5Ojppc1Byb2Nlc3NpbmdLZXlib2FyZEV2ZW50cygp
IGNvbnN0CkBAIC02MTY1LDEzICs2MTY1LDEzIEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpwb3N0TWVz
c2FnZVRvSW5qZWN0ZWRCdW5kbGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgQVBJOjpPCiAg
ICAgLy8gRm9yIGJhY2t3YXJkLWNvbXBhdGliaWxpdHksIG1ha2Ugc3VyZSB3ZSBsYXVuY2ggdGhl
IGluaXRpYWwgcHJvY2VzcyBpZiB0aGUgY2xpZW50IGFza3MgdG8gcG9zdCBhIG1lc3NhZ2UgdG8g
aXRzIGluamVjdGVkIGJ1bmRsZSBiZWZvcmUgZG9pbmcgYSBsb2FkLgogICAgIGxhdW5jaEluaXRp
YWxQcm9jZXNzSWZOZWNlc3NhcnkoKTsKIAotICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpQb3N0SW5qZWN0ZWRCdW5kbGVNZXNzYWdlKG1lc3NhZ2VOYW1lLCBVc2VyRGF0YShw
cm9jZXNzKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyhtZXNzYWdlQm9keSkuZ2V0KCkpKSwg
bV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBvc3RJbmplY3RlZEJ1
bmRsZU1lc3NhZ2UobWVzc2FnZU5hbWUsIFVzZXJEYXRhKHByb2Nlc3MoKS50cmFuc2Zvcm1PYmpl
Y3RzVG9IYW5kbGVzKG1lc3NhZ2VCb2R5KS5nZXQoKSkpKTsKIH0KIAogI2lmIFBMQVRGT1JNKEdU
SykKIHZvaWQgV2ViUGFnZVByb3h5OjpmYWlsZWRUb1Nob3dQb3B1cE1lbnUoKQogewotICAgIG1f
cHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RmFpbGVkVG9TaG93UG9wdXBNZW51KCks
IG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpGYWlsZWRUb1Nob3dQ
b3B1cE1lbnUoKSk7CiB9CiAjZW5kaWYKIApAQCAtNjIyNCw3ICs2MjI0LDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OnNob3dDb250ZXh0TWVudShDb250ZXh0TWVudUNvbnRleHREYXRhJiYgY29udGV4
dE1lbnVDb250ZXh0RGEKICAgICAvLyBjYW4gaGFuZyB0aGUgcGFnZSAvIFdlYkRyaXZlciB0ZXN0
LiBQcmV0ZW5kIHRvIHNob3cgYW5kIGltbWVkaWF0ZWx5IGRpc21pc3MgdGhlIGNvbnRleHQgbWVu
dS4KICAgICBpZiAoYXV0byogYXV0b21hdGlvblNlc3Npb24gPSBwcm9jZXNzKCkucHJvY2Vzc1Bv
b2woKS5hdXRvbWF0aW9uU2Vzc2lvbigpKSB7CiAgICAgICAgIGlmIChtX2NvbnRyb2xsZWRCeUF1
dG9tYXRpb24gJiYgYXV0b21hdGlvblNlc3Npb24tPmlzU2ltdWxhdGluZ1VzZXJJbnRlcmFjdGlv
bigpKSB7Ci0gICAgICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNv
bnRleHRNZW51SGlkZGVuKCksIG1fd2ViUGFnZUlEKTsKKyAgICAgICAgICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OkNvbnRleHRNZW51SGlkZGVuKCkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgfQpAQCAtNjI0Nyw3ICs2MjQ3LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OnNob3dDb250ZXh0TWVudShDb250ZXh0TWVudUNvbnRleHREYXRhJiYgY29udGV4dE1lbnVDb250
ZXh0RGEKICAgICBtX2FjdGl2ZUNvbnRleHRNZW51LT5zaG93KCk7CiAKICAgICAvLyBObyBtYXR0
ZXIgdGhlIHJlc3VsdCBvZiBpbnRlcm5hbFNob3dDb250ZXh0TWVudSwgYWx3YXlzIG5vdGlmeSB0
aGUgV2ViUHJvY2VzcyB0aGF0IHRoZSBtZW51IGlzIGhpZGRlbiBzbyBpdCBzdGFydHMgaGFuZGxp
bmcgbW91c2UgZXZlbnRzIGFnYWluLgotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6Q29udGV4dE1lbnVIaWRkZW4oKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OkNvbnRleHRNZW51SGlkZGVuKCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94
eTo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoY29uc3QgV2ViQ29udGV4dE1lbnVJdGVtRGF0YSYg
aXRlbSkKQEAgLTYzMjUsMTIgKzYzMjUsMTIgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNvbnRleHRN
ZW51SXRlbVNlbGVjdGVkKGNvbnN0IFdlYkNvbnRleHRNZW51SXRlbURhdGEmIGl0ZW0pCiAgICAg
aWYgKGl0ZW0uYWN0aW9uKCkgPT0gQ29udGV4dE1lbnVJdGVtVGFnTGVhcm5TcGVsbGluZyB8fCBp
dGVtLmFjdGlvbigpID09IENvbnRleHRNZW51SXRlbVRhZ0lnbm9yZVNwZWxsaW5nKQogICAgICAg
ICArK21fcGVuZGluZ0xlYXJuT3JJZ25vcmVXb3JkTWVzc2FnZUNvdW50OwogCi0gICAgbV9wcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRTZWxlY3RJdGVtRnJvbUFjdGl2ZUNvbnRl
eHRNZW51KGl0ZW0pLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
RGlkU2VsZWN0SXRlbUZyb21BY3RpdmVDb250ZXh0TWVudShpdGVtKSk7CiB9CiAKIHZvaWQgV2Vi
UGFnZVByb3h5OjpoYW5kbGVDb250ZXh0TWVudUtleUV2ZW50KCkKIHsKLSAgICBtX3Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNvbnRleHRNZW51Rm9yS2V5RXZlbnQoKSwgbV93ZWJQ
YWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNvbnRleHRNZW51Rm9yS2V5RXZl
bnQoKSk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKENPTlRFWFRfTUVOVVMpCiAKQEAgLTYzNDYsMTAg
KzYzNDYsMTAgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENob29zZUZpbGVzRm9yT3BlblBhbmVs
V2l0aERpc3BsYXlTdHJpbmdBbmRJY29uKGNvbnN0IFZlY3QKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGZpbGVVUkxzLnNpemUoKTsgKytpKQogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGUoZmlsZVVSTHNbaV0sIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5
LCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlc1tpXSk7CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OkV4dGVuZFNhbmRib3hGb3JGaWxlc0Zyb21PcGVuUGFuZWwoc2FuZGJv
eEV4dGVuc2lvbkhhbmRsZXMpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6RXh0ZW5kU2FuZGJveEZvckZpbGVzRnJvbU9wZW5QYW5lbChzYW5kYm94RXh0ZW5zaW9u
SGFuZGxlcykpOwogI2VuZGlmCiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OkRpZENob29zZUZpbGVzRm9yT3BlblBhbmVsV2l0aERpc3BsYXlTdHJpbmdBbmRJY29uKGZp
bGVVUkxzLCBkaXNwbGF5U3RyaW5nLCBpY29uRGF0YSA/IGljb25EYXRhLT5kYXRhUmVmZXJlbmNl
KCkgOiBJUEM6OkRhdGFSZWZlcmVuY2UoKSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpEaWRDaG9vc2VGaWxlc0Zvck9wZW5QYW5lbFdpdGhEaXNwbGF5U3RyaW5n
QW5kSWNvbihmaWxlVVJMcywgZGlzcGxheVN0cmluZywgaWNvbkRhdGEgPyBpY29uRGF0YS0+ZGF0
YVJlZmVyZW5jZSgpIDogSVBDOjpEYXRhUmVmZXJlbmNlKCkpKTsKIAogICAgIG1fb3BlblBhbmVs
UmVzdWx0TGlzdGVuZXItPmludmFsaWRhdGUoKTsKICAgICBtX29wZW5QYW5lbFJlc3VsdExpc3Rl
bmVyID0gbnVsbHB0cjsKQEAgLTYzNzQsMTAgKzYzNzQsMTAgQEAgdm9pZCBXZWJQYWdlUHJveHk6
OmRpZENob29zZUZpbGVzRm9yT3BlblBhbmVsKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlVVJM
cykKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6RXh0ZW5kU2FuZGJveEZvckZpbGVzRnJvbU9wZW5QYW5lbChzYW5kYm94RXh0ZW5zaW9u
SGFuZGxlcyksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpFeHRl
bmRTYW5kYm94Rm9yRmlsZXNGcm9tT3BlblBhbmVsKHNhbmRib3hFeHRlbnNpb25IYW5kbGVzKSk7
CiAjZW5kaWYKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkQ2hv
b3NlRmlsZXNGb3JPcGVuUGFuZWwoZmlsZVVSTHMpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6RGlkQ2hvb3NlRmlsZXNGb3JPcGVuUGFuZWwoZmlsZVVSTHMpKTsK
IAogICAgIG1fb3BlblBhbmVsUmVzdWx0TGlzdGVuZXItPmludmFsaWRhdGUoKTsKICAgICBtX29w
ZW5QYW5lbFJlc3VsdExpc3RlbmVyID0gbnVsbHB0cjsKQEAgLTYzODgsNyArNjM4OCw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpkaWRDYW5jZWxGb3JPcGVuUGFuZWwoKQogICAgIGlmICghaGFzUnVu
bmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpEaWRDYW5jZWxGb3JPcGVuUGFuZWwoKSwgbV93ZWJQYWdlSUQpOwor
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZENhbmNlbEZvck9wZW5QYW5lbCgpKTsKICAg
ICAKICAgICBtX29wZW5QYW5lbFJlc3VsdExpc3RlbmVyLT5pbnZhbGlkYXRlKCk7CiAgICAgbV9v
cGVuUGFuZWxSZXN1bHRMaXN0ZW5lciA9IG51bGxwdHI7CkBAIC02Mzk2LDcgKzYzOTYsNyBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ2FuY2VsRm9yT3BlblBhbmVsKCkKIAogdm9pZCBXZWJQYWdl
UHJveHk6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9u
KQogewotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6QWR2YW5jZVRvTmV4
dE1pc3NwZWxsaW5nKHN0YXJ0QmVmb3JlU2VsZWN0aW9uKSwgbV93ZWJQYWdlSUQpOworICAgIHNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OkFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhzdGFydEJlZm9y
ZVNlbGVjdGlvbikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Y2hhbmdlU3BlbGxpbmdUb1dv
cmQoY29uc3QgU3RyaW5nJiB3b3JkKQpAQCAtNjQwNCw3ICs2NDA0LDcgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OmNoYW5nZVNwZWxsaW5nVG9Xb3JkKGNvbnN0IFN0cmluZyYgd29yZCkKICAgICBpZiAo
d29yZC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6Q2hhbmdlU3BlbGxpbmdUb1dvcmQod29yZCksIG1fd2ViUGFnZUlE
KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDaGFuZ2VTcGVsbGluZ1RvV29yZCh3b3Jk
KSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpyZWdpc3RlckVkaXRDb21tYW5kKFJlZjxXZWJF
ZGl0Q29tbWFuZFByb3h5PiYmIGNvbW1hbmRQcm94eSwgVW5kb09yUmVkbyB1bmRvT3JSZWRvKQpA
QCAtNjQyMyw3ICs2NDIzLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlbW92ZUVkaXRDb21tYW5k
KFdlYkVkaXRDb21tYW5kUHJveHkmIGNvbW1hbmQpCiAKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9j
ZXNzKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OkRpZFJlbW92ZUVkaXRDb21tYW5kKGNvbW1hbmQuY29tbWFuZElEKCkpLCBtX3dlYlBh
Z2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkUmVtb3ZlRWRpdENvbW1hbmQo
Y29tbWFuZC5jb21tYW5kSUQoKSkpOwogfQogCiBib29sIFdlYlBhZ2VQcm94eTo6Y2FuVW5kbygp
CkBAIC02NTEyLDEyICs2NTEyLDEyIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZXF1ZXN0Q2hlY2tp
bmdPZlN0cmluZyh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFRleHRDaGVja2luCiAKIHZvaWQg
V2ViUGFnZVByb3h5OjpkaWRGaW5pc2hDaGVja2luZ1RleHQodWludDY0X3QgcmVxdWVzdElELCBj
b25zdCBWZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0KQogewotICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkRmluaXNoQ2hlY2tpbmdUZXh0
KHJlcXVlc3RJRCwgcmVzdWx0KSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OkRpZEZpbmlzaENoZWNraW5nVGV4dChyZXF1ZXN0SUQsIHJlc3VsdCkpOwogfQogCiB2
b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ2FuY2VsQ2hlY2tpbmdUZXh0KHVpbnQ2NF90IHJlcXVlc3RJ
RCkKIHsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZENhbmNlbENo
ZWNraW5nVGV4dChyZXF1ZXN0SUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6RGlkQ2FuY2VsQ2hlY2tpbmdUZXh0KHJlcXVlc3RJRCkpOwogfQogLy8gT3RoZXIK
IApAQCAtNjY1NCw3ICs2NjU0LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVFdmVu
dCh1aW50MzJfdCBvcGFxdWVUeXBlLCBib29sIGhhbmRsZWQpCiAgICAgICAgIGJvb2wgY2FuUHJv
Y2Vzc01vcmVLZXlFdmVudHMgPSAhbV9rZXlFdmVudFF1ZXVlLmlzRW1wdHkoKTsKICAgICAgICAg
aWYgKGNhblByb2Nlc3NNb3JlS2V5RXZlbnRzKSB7CiAgICAgICAgICAgICBMT0coS2V5SGFuZGxp
bmcsICIgVUkgcHJvY2Vzczogc2VudCBrZXlFdmVudCBmcm9tIGRpZFJlY2VpdmVFdmVudCIpOwot
ICAgICAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpLZXlFdmVudCht
X2tleUV2ZW50UXVldWUuZmlyc3QoKSksIG1fd2ViUGFnZUlEKTsKKyAgICAgICAgICAgIHNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OktleUV2ZW50KG1fa2V5RXZlbnRRdWV1ZS5maXJzdCgpKSk7CiAg
ICAgICAgIH0KIAogICAgICAgICAvLyBUaGUgY2FsbCB0byBkb25lV2l0aEtleUV2ZW50IG1heSBj
bG9zZSB0aGlzIFdlYlBhZ2UuCkBAIC03NTQzLDcgKzc1NDMsNyBAQCBXZWJQYWdlQ3JlYXRpb25Q
YXJhbWV0ZXJzIFdlYlBhZ2VQcm94eTo6Y3JlYXRpb25QYXJhbWV0ZXJzKFdlYlByb2Nlc3NQcm94
eSYgcHJvYwogCiB2b2lkIFdlYlBhZ2VQcm94eTo6aXNKSVRFbmFibGVkKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgbV9wcm9jZXNzLT5j
b25uZWN0aW9uKCktPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViUHJvY2Vzczo6SXNK
SVRFbmFibGVkKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBzZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OldlYlByb2Nlc3M6OklzSklURW5hYmxlZCgpLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSwgMCk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjplbnRlckFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNv
bnRleHQpCkBAIC03NTc3LDcgKzc1NzcsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6YmFja0Zvcndh
cmRDbGVhcigpCiAKIHZvaWQgV2ViUGFnZVByb3h5OjpnYW1lcGFkQWN0aXZpdHkoY29uc3QgVmVj
dG9yPEdhbWVwYWREYXRhPiYgZ2FtZXBhZERhdGFzLCBib29sIHNob3VsZE1ha2VHYW1lcGFkc1Zp
c2libGUpCiB7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpHYW1lcGFk
QWN0aXZpdHkoZ2FtZXBhZERhdGFzLCBzaG91bGRNYWtlR2FtZXBhZHNWaXNpYmxlKSwgbV93ZWJQ
YWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdhbWVwYWRBY3Rpdml0eShnYW1l
cGFkRGF0YXMsIHNob3VsZE1ha2VHYW1lcGFkc1Zpc2libGUpKTsKIH0KIAogI2VuZGlmCkBAIC03
ODgyLDcgKzc4ODIsNyBAQCBib29sIFdlYlBhZ2VQcm94eTo6d2lsbEhhbmRsZUhvcml6b250YWxT
Y3JvbGxFdmVudHMoKSBjb25zdAogCiB2b2lkIFdlYlBhZ2VQcm94eTo6dXBkYXRlV2Vic2l0ZVBv
bGljaWVzKFdlYnNpdGVQb2xpY2llc0RhdGEmJiB3ZWJzaXRlUG9saWNpZXMpCiB7Ci0gICAgbV9w
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpVcGRhdGVXZWJzaXRlUG9saWNpZXMod2Vi
c2l0ZVBvbGljaWVzKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OlVwZGF0ZVdlYnNpdGVQb2xpY2llcyh3ZWJzaXRlUG9saWNpZXMpKTsKIH0KIAogdm9pZCBXZWJQ
YWdlUHJveHk6OmRpZEZpbmlzaExvYWRpbmdEYXRhRm9yQ3VzdG9tQ29udGVudFByb3ZpZGVyKGNv
bnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYg
ZGF0YVJlZmVyZW5jZSkKQEAgLTc4OTIsNyArNzg5Miw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpk
aWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbUNvbnRlbnRQcm92aWRlcihjb25zdCBTdHJpbmcm
IHN1CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpiYWNrRm9yd2FyZFJlbW92ZWRJdGVtKGNvbnN0IEJh
Y2tGb3J3YXJkSXRlbUlkZW50aWZpZXImIGl0ZW1JRCkKIHsKLSAgICBtX3Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OkRpZFJlbW92ZUJhY2tGb3J3YXJkSXRlbShpdGVtSUQpLCBtX3dl
YlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkUmVtb3ZlQmFja0Zvcndh
cmRJdGVtKGl0ZW1JRCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Q2FuUnVuTW9kYWwo
Ym9vbCBjYW5SdW5Nb2RhbCkKQEAgLTc5MDUsNyArNzkwNSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5
OjpzZXRDYW5SdW5Nb2RhbChib29sIGNhblJ1bk1vZGFsKQogICAgIGlmICghaGFzUnVubmluZ1By
b2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpTZXRDYW5SdW5Nb2RhbChtX2NhblJ1bk1vZGFsKSwgbV93ZWJQYWdlSUQpOwor
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldENhblJ1bk1vZGFsKG1fY2FuUnVuTW9kYWwp
KTsKIH0KIAogYm9vbCBXZWJQYWdlUHJveHk6OmNhblJ1bk1vZGFsKCkKQEAgLTc5MTksNyArNzkx
OSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpiZWdpblByaW50aW5nKFdlYkZyYW1lUHJveHkqIGZy
YW1lLCBjb25zdCBQcmludEluZm8mIHByaW50SW5mCiAgICAgICAgIHJldHVybjsKIAogICAgIG1f
aXNJblByaW50aW5nTW9kZSA9IHRydWU7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpCZWdpblByaW50aW5nKGZyYW1lLT5mcmFtZUlEKCksIHByaW50SW5mbyksIG1fd2Vi
UGFnZUlELCBwcmludGluZ1NlbmRPcHRpb25zKG1faXNQZXJmb3JtaW5nRE9NUHJpbnRPcGVyYXRp
b24pKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpCZWdpblByaW50aW5nKGZyYW1lLT5m
cmFtZUlEKCksIHByaW50SW5mbyksIHByaW50aW5nU2VuZE9wdGlvbnMobV9pc1BlcmZvcm1pbmdE
T01QcmludE9wZXJhdGlvbikpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZW5kUHJpbnRpbmco
KQpAQCAtNzkyOCw3ICs3OTI4LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmVuZFByaW50aW5nKCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9pc0luUHJpbnRpbmdNb2RlID0gZmFsc2U7Ci0gICAg
bV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpFbmRQcmludGluZygpLCBtX3dlYlBh
Z2VJRCwgcHJpbnRpbmdTZW5kT3B0aW9ucyhtX2lzUGVyZm9ybWluZ0RPTVByaW50T3BlcmF0aW9u
KSk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RW5kUHJpbnRpbmcoKSwgcHJpbnRpbmdT
ZW5kT3B0aW9ucyhtX2lzUGVyZm9ybWluZ0RPTVByaW50T3BlcmF0aW9uKSk7CiB9CiAKIHZvaWQg
V2ViUGFnZVByb3h5Ojpjb21wdXRlUGFnZXNGb3JQcmludGluZyhXZWJGcmFtZVByb3h5KiBmcmFt
ZSwgY29uc3QgUHJpbnRJbmZvJiBwcmludEluZm8sIFJlZjxDb21wdXRlZFBhZ2VzQ2FsbGJhY2s+
JiYgY2FsbGJhY2spCkBAIC03OTQxLDcgKzc5NDEsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Y29t
cHV0ZVBhZ2VzRm9yUHJpbnRpbmcoV2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IFByaW50SW5m
bwogICAgIGF1dG8gY2FsbGJhY2tJRCA9IGNhbGxiYWNrLT5jYWxsYmFja0lEKCk7CiAgICAgbV9j
YWxsYmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2spKTsKICAgICBtX2lzSW5QcmludGluZ01vZGUg
PSB0cnVlOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q29tcHV0ZVBh
Z2VzRm9yUHJpbnRpbmcoZnJhbWUtPmZyYW1lSUQoKSwgcHJpbnRJbmZvLCBjYWxsYmFja0lEKSwg
bV93ZWJQYWdlSUQsIHByaW50aW5nU2VuZE9wdGlvbnMobV9pc1BlcmZvcm1pbmdET01QcmludE9w
ZXJhdGlvbikpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNvbXB1dGVQYWdlc0ZvclBy
aW50aW5nKGZyYW1lLT5mcmFtZUlEKCksIHByaW50SW5mbywgY2FsbGJhY2tJRCksIHByaW50aW5n
U2VuZE9wdGlvbnMobV9pc1BlcmZvcm1pbmdET01QcmludE9wZXJhdGlvbikpOwogfQogCiAjaWYg
UExBVEZPUk0oQ09DT0EpCkBAIC03OTU0LDcgKzc5NTQsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
ZHJhd1JlY3RUb0ltYWdlKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25zdCBQcmludEluZm8mIHBy
aW50SQogICAgIAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IGNhbGxiYWNrLT5jYWxsYmFja0lEKCk7
CiAgICAgbV9jYWxsYmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICBtX3Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRyYXdSZWN0VG9JbWFnZShmcmFtZS0+ZnJhbWVJRCgp
LCBwcmludEluZm8sIHJlY3QsIGltYWdlU2l6ZSwgY2FsbGJhY2tJRCksIG1fd2ViUGFnZUlELCBw
cmludGluZ1NlbmRPcHRpb25zKG1faXNQZXJmb3JtaW5nRE9NUHJpbnRPcGVyYXRpb24pKTsKKyAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEcmF3UmVjdFRvSW1hZ2UoZnJhbWUtPmZyYW1lSUQo
KSwgcHJpbnRJbmZvLCByZWN0LCBpbWFnZVNpemUsIGNhbGxiYWNrSUQpLCBwcmludGluZ1NlbmRP
cHRpb25zKG1faXNQZXJmb3JtaW5nRE9NUHJpbnRPcGVyYXRpb24pKTsKIH0KIAogdm9pZCBXZWJQ
YWdlUHJveHk6OmRyYXdQYWdlc1RvUERGKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25zdCBQcmlu
dEluZm8mIHByaW50SW5mbywgdWludDMyX3QgZmlyc3QsIHVpbnQzMl90IGNvdW50LCBSZWY8RGF0
YUNhbGxiYWNrPiYmIGNhbGxiYWNrKQpAQCAtNzk2Niw3ICs3OTY2LDcgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OmRyYXdQYWdlc1RvUERGKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25zdCBQcmludElu
Zm8mIHByaW50SW4KICAgICAKICAgICBhdXRvIGNhbGxiYWNrSUQgPSBjYWxsYmFjay0+Y2FsbGJh
Y2tJRCgpOwogICAgIG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgbV9w
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEcmF3UGFnZXNUb1BERihmcmFtZS0+ZnJh
bWVJRCgpLCBwcmludEluZm8sIGZpcnN0LCBjb3VudCwgY2FsbGJhY2tJRCksIG1fd2ViUGFnZUlE
LCBwcmludGluZ1NlbmRPcHRpb25zKG1faXNQZXJmb3JtaW5nRE9NUHJpbnRPcGVyYXRpb24pKTsK
KyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEcmF3UGFnZXNUb1BERihmcmFtZS0+ZnJhbWVJ
RCgpLCBwcmludEluZm8sIGZpcnN0LCBjb3VudCwgY2FsbGJhY2tJRCksIHByaW50aW5nU2VuZE9w
dGlvbnMobV9pc1BlcmZvcm1pbmdET01QcmludE9wZXJhdGlvbikpOwogfQogI2VsaWYgUExBVEZP
Uk0oR1RLKQogdm9pZCBXZWJQYWdlUHJveHk6OmRyYXdQYWdlc0ZvclByaW50aW5nKFdlYkZyYW1l
UHJveHkqIGZyYW1lLCBjb25zdCBQcmludEluZm8mIHByaW50SW5mbywgUmVmPFByaW50RmluaXNo
ZWRDYWxsYmFjaz4mJiBjYWxsYmFjaykKQEAgLTc5NzksNyArNzk3OSw3IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpkcmF3UGFnZXNGb3JQcmludGluZyhXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3Qg
UHJpbnRJbmZvJiBwCiAgICAgYXV0byBjYWxsYmFja0lEID0gY2FsbGJhY2stPmNhbGxiYWNrSUQo
KTsKICAgICBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFjaykpOwogICAgIG1faXNJblBy
aW50aW5nTW9kZSA9IHRydWU7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpEcmF3UGFnZXNGb3JQcmludGluZyhmcmFtZS0+ZnJhbWVJRCgpLCBwcmludEluZm8sIGNhbGxi
YWNrSUQpLCBtX3dlYlBhZ2VJRCwgcHJpbnRpbmdTZW5kT3B0aW9ucyhtX2lzUGVyZm9ybWluZ0RP
TVByaW50T3BlcmF0aW9uKSk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RHJhd1BhZ2Vz
Rm9yUHJpbnRpbmcoZnJhbWUtPmZyYW1lSUQoKSwgcHJpbnRJbmZvLCBjYWxsYmFja0lEKSwgcHJp
bnRpbmdTZW5kT3B0aW9ucyhtX2lzUGVyZm9ybWluZ0RPTVByaW50T3BlcmF0aW9uKSk7CiB9CiAj
ZW5kaWYKIApAQCAtNzk5Miw3ICs3OTkyLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRyYXdUb1BE
RihGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgY29uc3QgT3B0aW9uYWw8RmxvYXRSZWN0PiYKICAg
ICB9CiAKICAgICBhdXRvIGNhbGxiYWNrSUQgPSBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxs
YmFjayksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdl
UHJveHk6OmRyYXdUb1BERiJfcykpOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6RHJhd1RvUERGKGZyYW1lSUQsIHJlY3QsIGNhbGxiYWNrSUQpLCBtX3dlYlBhZ2VJRCk7
CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RHJhd1RvUERGKGZyYW1lSUQsIHJlY3QsIGNh
bGxiYWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmRyYXdUb1BERkNhbGxiYWNrKGNv
bnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgcGRmRGF0YSwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQpA
QCAtODA0NSw3ICs4MDQ1LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldE1pbmltdW1TaXplRm9y
QXV0b0xheW91dChjb25zdCBJbnRTaXplJiBzaXplKQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nl
c3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpTZXRNaW5pbXVtU2l6ZUZvckF1dG9MYXlvdXQoc2l6ZSksIG1fd2ViUGFnZUlEKTsK
KyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRNaW5pbXVtU2l6ZUZvckF1dG9MYXlvdXQo
c2l6ZSkpOwogICAgIG1fZHJhd2luZ0FyZWEtPm1pbmltdW1TaXplRm9yQXV0b0xheW91dERpZENo
YW5nZSgpOwogCiAjaWYgVVNFKEFQUEtJVCkKQEAgLTgwNjQsNyArODA2NCw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpzZXRBdXRvU2l6aW5nU2hvdWxkRXhwYW5kVG9WaWV3SGVpZ2h0KGJvb2wgc2hv
dWxkRXhwYW5kKQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRBdXRvU2l6aW5n
U2hvdWxkRXhwYW5kVG9WaWV3SGVpZ2h0KHNob3VsZEV4cGFuZCksIG1fd2ViUGFnZUlEKTsKKyAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRBdXRvU2l6aW5nU2hvdWxkRXhwYW5kVG9WaWV3
SGVpZ2h0KHNob3VsZEV4cGFuZCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Vmlld3Bv
cnRTaXplRm9yQ1NTVmlld3BvcnRVbml0cyhjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUpCkBA
IC04MDc3LDcgKzgwNzcsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Vmlld3BvcnRTaXplRm9y
Q1NTVmlld3BvcnRVbml0cyhjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpegogICAgIGlmICghaGFz
UnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRWaWV3cG9ydFNpemVGb3JDU1NWaWV3cG9ydFVuaXRzKHZp
ZXdwb3J0U2l6ZSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpT
ZXRWaWV3cG9ydFNpemVGb3JDU1NWaWV3cG9ydFVuaXRzKHZpZXdwb3J0U2l6ZSkpOwogfQogCiAj
aWYgVVNFKEFVVE9NQVRJQ19URVhUX1JFUExBQ0VNRU5UKQpAQCAtODE0OCw3ICs4MTQ4LDcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoaW50MzJfdCBy
ZXNwb25zZSwgY29uc3QgU3RyaW5nJgogdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZUFsdGVybmF0
aXZlVGV4dFVJUmVzdWx0KGNvbnN0IFN0cmluZyYgcmVzdWx0KQogewogICAgIGlmICghaXNDbG9z
ZWQoKSkKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpIYW5kbGVB
bHRlcm5hdGl2ZVRleHRVSVJlc3VsdChyZXN1bHQpLCBtX3dlYlBhZ2VJRCk7CisgICAgICAgIHNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OkhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KHJlc3Vs
dCkpOwogfQogCiAjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCkBAIC04MTg5LDcgKzgx
ODksNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0
ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbgogICAgIGlmICghaGFzUnVubmluZ1Byb2Nl
c3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OlNldENvbXBvc2l0aW9uKHRleHQsIHVuZGVybGluZXMsIHNlbGVjdGlvblJhbmdlKSwg
bV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldENvbXBvc2l0aW9u
KHRleHQsIHVuZGVybGluZXMsIHNlbGVjdGlvblJhbmdlKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVBy
b3h5Ojpjb25maXJtQ29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiBjb21wb3NpdGlvblN0cmluZykK
QEAgLTgxOTcsNyArODE5Nyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpjb25maXJtQ29tcG9zaXRp
b24oY29uc3QgU3RyaW5nJiBjb21wb3NpdGlvblN0cmluZykKICAgICBpZiAoIWhhc1J1bm5pbmdQ
cm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpDb25maXJtQ29tcG9zaXRpb24oY29tcG9zaXRpb25TdHJpbmcpLCBtX3dlYlBh
Z2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q29uZmlybUNvbXBvc2l0aW9uKGNv
bXBvc2l0aW9uU3RyaW5nKSk7CiB9CiAjZW5kaWYgLy8gUExBVEZPUk0oR1RLKQogCkBAIC04MjA5
LDcgKzgyMDksNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0U2Nyb2xsUGlubmluZ0JlaGF2aW9y
KFNjcm9sbFBpbm5pbmdCZWhhdmlvciBwaW5uaW5nKQogICAgIG1fc2Nyb2xsUGlubmluZ0JlaGF2
aW9yID0gcGlubmluZzsKIAogICAgIGlmIChoYXNSdW5uaW5nUHJvY2VzcygpKQotICAgICAgICBt
X3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFNjcm9sbFBpbm5pbmdCZWhhdmlv
cihwaW5uaW5nKSwgbV93ZWJQYWdlSUQpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpTZXRTY3JvbGxQaW5uaW5nQmVoYXZpb3IocGlubmluZykpOwogfQogCiB2b2lkIFdlYlBhZ2VQ
cm94eTo6c2V0T3ZlcmxheVNjcm9sbGJhclN0eWxlKE9wdGlvbmFsPFdlYkNvcmU6OlNjcm9sbGJh
ck92ZXJsYXlTdHlsZT4gc2Nyb2xsYmFyU3R5bGUpCkBAIC04MjI3LDcgKzgyMjcsNyBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6c2V0T3ZlcmxheVNjcm9sbGJhclN0eWxlKE9wdGlvbmFsPFdlYkNvcmU6
OlNjcm9sbGJhck92ZXJsYXlTdAogICAgICAgICBzY3JvbGxiYXJTdHlsZUZvck1lc3NhZ2UgPSBz
dGF0aWNfY2FzdDxTY3JvbGxiYXJPdmVybGF5U3R5bGU+KHNjcm9sbGJhclN0eWxlLnZhbHVlKCkp
OwogCiAgICAgaWYgKGhhc1J1bm5pbmdQcm9jZXNzKCkpCi0gICAgICAgIG1fcHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0U2Nyb2xsYmFyT3ZlcmxheVN0eWxlKHNjcm9sbGJhclN0
eWxlRm9yTWVzc2FnZSksIG1fd2ViUGFnZUlEKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6U2V0U2Nyb2xsYmFyT3ZlcmxheVN0eWxlKHNjcm9sbGJhclN0eWxlRm9yTWVzc2FnZSks
IG1fd2ViUGFnZUlEKTsKIH0KIAogI2lmIEVOQUJMRShXRUJfQ1JZUFRPKQpAQCAtODI3Miw3ICs4
MjcyLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0
cmluZyh1bnNpZ25lZCBrZXlTaXplSW5kZXgsIGNvbnMKIAogdm9pZCBXZWJQYWdlUHJveHk6OmFk
ZE1JTUVUeXBlV2l0aEN1c3RvbUNvbnRlbnRQcm92aWRlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KQogewotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6QWRkTUlNRVR5cGVX
aXRoQ3VzdG9tQ29udGVudFByb3ZpZGVyKG1pbWVUeXBlKSwgbV93ZWJQYWdlSUQpOworICAgIHNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OkFkZE1JTUVUeXBlV2l0aEN1c3RvbUNvbnRlbnRQcm92aWRl
cihtaW1lVHlwZSkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Y2hhbmdlRm9udEF0dHJpYnV0
ZXMoV2ViQ29yZTo6Rm9udEF0dHJpYnV0ZUNoYW5nZXMmJiBjaGFuZ2VzKQpAQCAtODI4MCw3ICs4
MjgwLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNoYW5nZUZvbnRBdHRyaWJ1dGVzKFdlYkNvcmU6
OkZvbnRBdHRyaWJ1dGVDaGFuZ2VzJiYgY2hhbmdlcykKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9j
ZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpDaGFuZ2VGb250QXR0cmlidXRlcyhXVEZNb3ZlKGNoYW5nZXMpKSwgbV93ZWJQYWdl
SUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNoYW5nZUZvbnRBdHRyaWJ1dGVzKFdU
Rk1vdmUoY2hhbmdlcykpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmNoYW5nZUZvbnQoV2Vi
Q29yZTo6Rm9udENoYW5nZXMmJiBjaGFuZ2VzKQpAQCAtODI4OCw3ICs4Mjg4LDcgQEAgdm9pZCBX
ZWJQYWdlUHJveHk6OmNoYW5nZUZvbnQoV2ViQ29yZTo6Rm9udENoYW5nZXMmJiBjaGFuZ2VzKQog
ICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcHJv
Y2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNoYW5nZUZvbnQoV1RGTW92ZShjaGFuZ2Vz
KSksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDaGFuZ2VGb250
KFdURk1vdmUoY2hhbmdlcykpKTsKIH0KIAogI2lmIFBMQVRGT1JNKENPQ09BKQpAQCAtODI5Niw3
ICs4Mjk2LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNoYW5nZUZvbnQoV2ViQ29yZTo6Rm9udENo
YW5nZXMmJiBjaGFuZ2VzKQogdm9pZCBXZWJQYWdlUHJveHk6OnNldFRleHRBc3luYyhjb25zdCBT
dHJpbmcmIHRleHQpCiB7CiAgICAgaWYgKGhhc1J1bm5pbmdQcm9jZXNzKCkpCi0gICAgICAgIHBy
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRUZXh0QXN5bmModGV4dCksIG1fd2Vi
UGFnZUlEKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0VGV4dEFzeW5jKHRl
eHQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6Omluc2VydFRleHRBc3luYyhjb25zdCBTdHJp
bmcmIHRleHQsIGNvbnN0IEVkaXRpbmdSYW5nZSYgcmVwbGFjZW1lbnRSYW5nZSwgSW5zZXJ0VGV4
dE9wdGlvbnMmJiBvcHRpb25zKQpAQCAtODMwNCw3ICs4MzA0LDcgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6Omluc2VydFRleHRBc3luYyhjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IEVkaXRpbmdSYW5n
ZSYgcmVwbGEKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpJbnNlcnRUZXh0QXN5bmMo
dGV4dCwgcmVwbGFjZW1lbnRSYW5nZSwgV1RGTW92ZShvcHRpb25zKSksIG1fd2ViUGFnZUlEKTsK
KyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpJbnNlcnRUZXh0QXN5bmModGV4dCwgcmVwbGFj
ZW1lbnRSYW5nZSwgV1RGTW92ZShvcHRpb25zKSkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6
aGFzTWFya2VkVGV4dChDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNhbGxiYWNrKQpA
QCAtODMxMyw3ICs4MzEzLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6Omhhc01hcmtlZFRleHQoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjYWxsYmFjaykKICAgICAgICAgY2FsbGJhY2so
ZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1fcHJvY2Vzcy0+Y29ubmVjdGlv
bigpLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6Okhhc01hcmtlZFRleHQo
KSwgV1RGTW92ZShjYWxsYmFjayksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6OldlYlBhZ2U6Okhhc01hcmtlZFRleHQoKSwgV1RGTW92ZShjYWxsYmFjaykp
OwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0TWFya2VkUmFuZ2VBc3luYyhXVEY6OkZ1bmN0
aW9uPHZvaWQgKEVkaXRpbmdSYW5nZSwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2tG
dW5jdGlvbikKQEAgLTgzMjQsNyArODMyNCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpnZXRNYXJr
ZWRSYW5nZUFzeW5jKFdURjo6RnVuY3Rpb248dm9pZCAoRWRpdGluZ1JhbmdlLCBDYWxsYmFjCiAg
ICAgfQogCiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFja3MucHV0KFdURk1vdmUoY2Fs
bGJhY2tGdW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5
KCJXZWJQYWdlUHJveHk6OmdldE1hcmtlZFJhbmdlQXN5bmMiX3MpKTsKLSAgICBwcm9jZXNzKCku
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R2V0TWFya2VkUmFuZ2VBc3luYyhjYWxsYmFja0lEKSwg
bV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdldE1hcmtlZFJhbmdl
QXN5bmMoY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0U2VsZWN0ZWRS
YW5nZUFzeW5jKFdURjo6RnVuY3Rpb248dm9pZCAoRWRpdGluZ1JhbmdlLCBDYWxsYmFja0Jhc2U6
OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQpAQCAtODMzNSw3ICs4MzM1LDcgQEAgdm9pZCBX
ZWJQYWdlUHJveHk6OmdldFNlbGVjdGVkUmFuZ2VBc3luYyhXVEY6OkZ1bmN0aW9uPHZvaWQgKEVk
aXRpbmdSYW5nZSwgQ2FsbGIKICAgICB9CiAKICAgICBhdXRvIGNhbGxiYWNrSUQgPSBtX2NhbGxi
YWNrcy5wdXQoV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgbV9wcm9jZXNzLT50aHJvdHRsZXIo
KS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBhZ2VQcm94eTo6Z2V0U2VsZWN0ZWRSYW5nZUFzeW5j
Il9zKSk7Ci0gICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkdldFNlbGVjdGVk
UmFuZ2VBc3luYyhjYWxsYmFja0lEKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OkdldFNlbGVjdGVkUmFuZ2VBc3luYyhjYWxsYmFja0lEKSk7CiB9CiAKIHZvaWQg
V2ViUGFnZVByb3h5OjpjaGFyYWN0ZXJJbmRleEZvclBvaW50QXN5bmMoY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmIHBvaW50LCBXVEY6OkZ1bmN0aW9uPHZvaWQgKHVpbnQ2NF90LCBDYWxsYmFja0Jh
c2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQpAQCAtODM0Niw3ICs4MzQ2LDcgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OmNoYXJhY3RlckluZGV4Rm9yUG9pbnRBc3luYyhjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgcG9pbnQsIFcKICAgICB9CiAKICAgICBhdXRvIGNhbGxiYWNrSUQgPSBtX2Nh
bGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgbV9wcm9jZXNzLT50aHJvdHRs
ZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBhZ2VQcm94eTo6Y2hhcmFjdGVySW5kZXhGb3JQ
b2ludEFzeW5jIl9zKSk7Ci0gICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNo
YXJhY3RlckluZGV4Rm9yUG9pbnRBc3luYyhwb2ludCwgY2FsbGJhY2tJRCksIG1fd2ViUGFnZUlE
KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDaGFyYWN0ZXJJbmRleEZvclBvaW50QXN5
bmMocG9pbnQsIGNhbGxiYWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmZpcnN0UmVj
dEZvckNoYXJhY3RlclJhbmdlQXN5bmMoY29uc3QgRWRpdGluZ1JhbmdlJiByYW5nZSwgV1RGOjpG
dW5jdGlvbjx2b2lkIChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgRWRpdGluZ1Jhbmdl
JiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2tGdW5jdGlvbikKQEAgLTgzNTcsNyAr
ODM1Nyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZUFz
eW5jKGNvbnN0IEVkaXRpbmdSYW5nZSYgcmFuZ2UsIFdUCiAgICAgfQogCiAgICAgYXV0byBjYWxs
YmFja0lEID0gbV9jYWxsYmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIG1fcHJv
Y2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6OmZpcnN0
UmVjdEZvckNoYXJhY3RlclJhbmdlQXN5bmMiX3MpKTsKLSAgICBwcm9jZXNzKCkuc2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6Rmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2VBc3luYyhyYW5nZSwgY2Fs
bGJhY2tJRCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpGaXJz
dFJlY3RGb3JDaGFyYWN0ZXJSYW5nZUFzeW5jKHJhbmdlLCBjYWxsYmFja0lEKSk7CiB9CiAKIHZv
aWQgV2ViUGFnZVByb3h5OjpzZXRDb21wb3NpdGlvbkFzeW5jKGNvbnN0IFN0cmluZyYgdGV4dCwg
Y29uc3QgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiYgdW5kZXJsaW5lcywgY29uc3QgRWRp
dGluZ1JhbmdlJiBzZWxlY3Rpb25SYW5nZSwgY29uc3QgRWRpdGluZ1JhbmdlJiByZXBsYWNlbWVu
dFJhbmdlKQpAQCAtODM2OCw3ICs4MzY4LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldENvbXBv
c2l0aW9uQXN5bmMoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXQKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpTZXRDb21wb3NpdGlvbkFzeW5jKHRleHQsIHVuZGVybGluZXMsIHNlbGVjdGlvblJhbmdl
LCByZXBsYWNlbWVudFJhbmdlKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OlNldENvbXBvc2l0aW9uQXN5bmModGV4dCwgdW5kZXJsaW5lcywgc2VsZWN0aW9uUmFu
Z2UsIHJlcGxhY2VtZW50UmFuZ2UpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmNvbmZpcm1D
b21wb3NpdGlvbkFzeW5jKCkKQEAgLTgzNzYsNyArODM3Niw3IEBAIHZvaWQgV2ViUGFnZVByb3h5
Ojpjb25maXJtQ29tcG9zaXRpb25Bc3luYygpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2Vzcygp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6Q29uZmlybUNvbXBvc2l0aW9uQXN5bmMoKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OkNvbmZpcm1Db21wb3NpdGlvbkFzeW5jKCkpOwogfQogCiB2b2lkIFdl
YlBhZ2VQcm94eTo6c2V0U2Nyb2xsUGVyZm9ybWFuY2VEYXRhQ29sbGVjdGlvbkVuYWJsZWQoYm9v
bCBlbmFibGVkKQpAQCAtODQwMSw3ICs4NDAxLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnRha2VT
bmFwc2hvdChJbnRSZWN0IHJlY3QsIEludFNpemUgYml0bWFwU2l6ZSwgU25hcHNob3RPcHRpb24K
ICAgICB9CiAKICAgICBhdXRvIGNhbGxiYWNrSUQgPSBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShj
YWxsYmFja0Z1bmN0aW9uKSwgbV9wcm9jZXNzLT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZp
dHkoIldlYlBhZ2VQcm94eTo6dGFrZVNuYXBzaG90Il9zKSk7Ci0gICAgbV9wcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpUYWtlU25hcHNob3QocmVjdCwgYml0bWFwU2l6ZSwgb3B0aW9u
cywgY2FsbGJhY2tJRCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpUYWtlU25hcHNob3QocmVjdCwgYml0bWFwU2l6ZSwgb3B0aW9ucywgY2FsbGJhY2tJRCkpOwog
fQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6bmF2aWdhdGlvbkdlc3R1cmVEaWRCZWdpbigpCkBAIC04
NTYxLDcgKzg1NjEsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVxdWVzdEFjdGl2ZU5vd1BsYXlp
bmdTZXNzaW9uSW5mbyhSZWY8Tm93UGxheWluZ0luZm9DYWxsYmFjawogICAgIGF1dG8gY2FsbGJh
Y2tJRCA9IGNhbGxiYWNrLT5jYWxsYmFja0lEKCk7CiAgICAgbV9jYWxsYmFja3MucHV0KFdURk1v
dmUoY2FsbGJhY2spKTsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
UmVxdWVzdEFjdGl2ZU5vd1BsYXlpbmdTZXNzaW9uSW5mbyhjYWxsYmFja0lEKSwgbV93ZWJQYWdl
SUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJlcXVlc3RBY3RpdmVOb3dQbGF5aW5n
U2Vzc2lvbkluZm8oY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6bm93UGxh
eWluZ0luZm9DYWxsYmFjayhib29sIGhhc0FjdGl2ZVNlc3Npb24sIGJvb2wgcmVnaXN0ZXJlZEFz
Tm93UGxheWluZ0FwcGxpY2F0aW9uLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBkb3VibGUgZHVyYXRp
b24sIGRvdWJsZSBlbGFwc2VkVGltZSwgdWludDY0X3QgdW5pcXVlSWRlbnRpZmllciwgQ2FsbGJh
Y2tJRCBjYWxsYmFja0lEKQpAQCAtODYwNCwyMiArODYwNCwyMiBAQCB2b2lkIFdlYlBhZ2VQcm94
eTo6aGFuZGxlQXV0b3BsYXlFdmVudChXZWJDb3JlOjpBdXRvcGxheUV2ZW50IGV2ZW50LCBPcHRp
b25TZXQ8QQogI2lmIFBMQVRGT1JNKE1BQykKIHZvaWQgV2ViUGFnZVByb3h5OjpwZXJmb3JtSW1t
ZWRpYXRlQWN0aW9uSGl0VGVzdEF0TG9jYXRpb24oRmxvYXRQb2ludCBwb2ludCkKIHsKLSAgICBt
X3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBlcmZvcm1JbW1lZGlhdGVBY3Rpb25I
aXRUZXN0QXRMb2NhdGlvbihwb2ludCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpQZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdEF0TG9jYXRpb24ocG9pbnQp
KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmltbWVkaWF0ZUFjdGlvbkRpZFVwZGF0ZSgpCiB7
Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpJbW1lZGlhdGVBY3Rpb25E
aWRVcGRhdGUoKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Oklt
bWVkaWF0ZUFjdGlvbkRpZFVwZGF0ZSgpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmltbWVk
aWF0ZUFjdGlvbkRpZENhbmNlbCgpCiB7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlOjpJbW1lZGlhdGVBY3Rpb25EaWRDYW5jZWwoKSwgbV93ZWJQYWdlSUQpOworICAgIHNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OkltbWVkaWF0ZUFjdGlvbkRpZENhbmNlbCgpKTsKIH0KIAog
dm9pZCBXZWJQYWdlUHJveHk6OmltbWVkaWF0ZUFjdGlvbkRpZENvbXBsZXRlKCkKIHsKLSAgICBt
X3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkltbWVkaWF0ZUFjdGlvbkRpZENvbXBs
ZXRlKCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpJbW1lZGlh
dGVBY3Rpb25EaWRDb21wbGV0ZSgpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmRpZFBlcmZv
cm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0KGNvbnN0IFdlYkhpdFRlc3RSZXN1bHREYXRhJiByZXN1
bHQsIGJvb2wgY29udGVudFByZXZlbnRzRGVmYXVsdCwgY29uc3QgVXNlckRhdGEmIHVzZXJEYXRh
KQpAQCAtODYzNCw3ICs4NjM0LDcgQEAgTlNPYmplY3QgKldlYlBhZ2VQcm94eTo6aW1tZWRpYXRl
QWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlckZvckhpdFRlc3RSZXN1bHQoUmVmUHQKIAogdm9pZCBX
ZWJQYWdlUHJveHk6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKFdlYkNvcmU6OlRleHRDaGVja2lu
Z1Jlc3VsdCBhY2NlcHRlZENhbmRpZGF0ZSkKIHsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OkhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKGFjY2VwdGVkQ2FuZGlkYXRlKSwg
bV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkhhbmRsZUFjY2VwdGVk
Q2FuZGlkYXRlKGFjY2VwdGVkQ2FuZGlkYXRlKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5Ojpk
aWRIYW5kbGVBY2NlcHRlZENhbmRpZGF0ZSgpCkBAIC04NjUyLDE3ICs4NjUyLDE3IEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpzZXRVc2VTeXN0ZW1BcHBlYXJhbmNlKGJvb2wgdXNlU3lzdGVtQXBwZWFy
YW5jZSkKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0VXNlU3lzdGVtQXBwZWFy
YW5jZSh1c2VTeXN0ZW1BcHBlYXJhbmNlKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OlNldFVzZVN5c3RlbUFwcGVhcmFuY2UodXNlU3lzdGVtQXBwZWFyYW5jZSkp
OwogfQogICAgIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldEhlYWRlckJhbm5lckhlaWdodEZvclRl
c3RpbmcoaW50IGhlaWdodCkKIHsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlNldEhlYWRlckJhbm5lckhlaWdodEZvclRlc3RpbmcoaGVpZ2h0KSwgbV93ZWJQYWdlSUQp
OworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEhlYWRlckJhbm5lckhlaWdodEZvclRl
c3RpbmcoaGVpZ2h0KSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRGb290ZXJCYW5uZXJI
ZWlnaHRGb3JUZXN0aW5nKGludCBoZWlnaHQpCiB7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpTZXRGb290ZXJCYW5uZXJIZWlnaHRGb3JUZXN0aW5nKGhlaWdodCksIG1f
d2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRGb290ZXJCYW5uZXJI
ZWlnaHRGb3JUZXN0aW5nKGhlaWdodCkpOwogfQogCiAjZW5kaWYKQEAgLTg2ODgsNyArODY4OCw3
IEBAIHZvaWQgV2ViUGFnZVByb3h5OjppbWFnZU9yTWVkaWFEb2N1bWVudFNpemVDaGFuZ2VkKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpCiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRTaG91
bGREaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudHMoYm9vbCBzaG91bGREaXNwYXRjaEZha2VNb3Vz
ZU1vdmVFdmVudHMpCiB7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpT
ZXRTaG91bGREaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudHMoc2hvdWxkRGlzcGF0Y2hGYWtlTW91
c2VNb3ZlRXZlbnRzKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OlNldFNob3VsZERpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50cyhzaG91bGREaXNwYXRjaEZha2VN
b3VzZU1vdmVFdmVudHMpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZUF1dG9GaWxs
QnV0dG9uQ2xpY2soY29uc3QgVXNlckRhdGEmIHVzZXJEYXRhKQpAQCAtODc0Miw3ICs4NzQyLDcg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldFBsYXliYWNrVGFyZ2V0KHVpbnQ2NF90IGNvbnRleHRJ
ZCwgUmVmPE1lZGlhUGxheWJhY2tUYXJnZXQKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6UGxheWJhY2tUYXJnZXRTZWxlY3RlZChjb250ZXh0SWQsIHRhcmdldC0+dGFyZ2V0Q29udGV4
dCgpKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBsYXliYWNr
VGFyZ2V0U2VsZWN0ZWQoY29udGV4dElkLCB0YXJnZXQtPnRhcmdldENvbnRleHQoKSkpOwogfQog
CiB2b2lkIFdlYlBhZ2VQcm94eTo6ZXh0ZXJuYWxPdXRwdXREZXZpY2VBdmFpbGFibGVEaWRDaGFu
Z2UodWludDY0X3QgY29udGV4dElkLCBib29sIGF2YWlsYWJsZSkKQEAgLTg3NTAsNyArODc1MCw3
IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpleHRlcm5hbE91dHB1dERldmljZUF2YWlsYWJsZURpZENo
YW5nZSh1aW50NjRfdCBjb250ZXh0SWQsIGJvCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2Vzcygp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5RGlkQ2hhbmdlKGNvbnRleHRJZCwgYXZhaWxh
YmxlKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBsYXliYWNr
VGFyZ2V0QXZhaWxhYmlsaXR5RGlkQ2hhbmdlKGNvbnRleHRJZCwgYXZhaWxhYmxlKSk7CiB9CiAK
IHZvaWQgV2ViUGFnZVByb3h5OjpzZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldCh1aW50NjRf
dCBjb250ZXh0SWQsIGJvb2wgc2hvdWxkUGxheSkKQEAgLTg3NTgsNyArODc1OCw3IEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpzZXRTaG91bGRQbGF5VG9QbGF5YmFja1RhcmdldCh1aW50NjRfdCBjb250
ZXh0SWQsIGJvb2wgc2hvdWxkCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFNo
b3VsZFBsYXlUb1BsYXliYWNrVGFyZ2V0KGNvbnRleHRJZCwgc2hvdWxkUGxheSksIG1fd2ViUGFn
ZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRTaG91bGRQbGF5VG9QbGF5YmFj
a1RhcmdldChjb250ZXh0SWQsIHNob3VsZFBsYXkpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
OnBsYXliYWNrVGFyZ2V0UGlja2VyV2FzRGlzbWlzc2VkKHVpbnQ2NF90IGNvbnRleHRJZCkKQEAg
LTg3NjYsNyArODc2Niw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwbGF5YmFja1RhcmdldFBpY2tl
cldhc0Rpc21pc3NlZCh1aW50NjRfdCBjb250ZXh0SWQpCiAgICAgaWYgKCFoYXNSdW5uaW5nUHJv
Y2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OlBsYXliYWNrVGFyZ2V0UGlja2VyV2FzRGlzbWlzc2VkKGNvbnRleHRJZCksIG1f
d2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQbGF5YmFja1RhcmdldFBp
Y2tlcldhc0Rpc21pc3NlZChjb250ZXh0SWQpKTsKIH0KICNlbmRpZgogCkBAIC04NzkyLDcgKzg3
OTIsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Y2xlYXJXaGVlbEV2ZW50VGVzdE1vbml0b3IoKQog
ICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Y2xlYXJXaGVlbEV2ZW50VGVzdE1v
bml0b3IoKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OmNsZWFy
V2hlZWxFdmVudFRlc3RNb25pdG9yKCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Y2FsbEFm
dGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZShXVEY6OkZ1bmN0aW9uPHZvaWQgKENhbGxiYWNrQmFz
ZTo6RXJyb3IpPiYmIGNhbGxiYWNrKQpAQCAtODgxNSw3ICs4ODE1LDcgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OnNldFNob3VsZFNjYWxlVmlld1RvRml0RG9jdW1lbnQoYm9vbCBzaG91bGRTY2FsZVZp
ZXdUb0ZpdERvY3UKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0U2hvdWxkU2Nh
bGVWaWV3VG9GaXREb2N1bWVudChzaG91bGRTY2FsZVZpZXdUb0ZpdERvY3VtZW50KSwgbV93ZWJQ
YWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFNob3VsZFNjYWxlVmlld1Rv
Rml0RG9jdW1lbnQoc2hvdWxkU2NhbGVWaWV3VG9GaXREb2N1bWVudCkpOwogfQogCiB2b2lkIFdl
YlBhZ2VQcm94eTo6ZGlkUmVzdG9yZVNjcm9sbFBvc2l0aW9uKCkKQEAgLTg4MzUsNyArODgzNSw3
IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpnZXRMb2FkRGVjaXNpb25Gb3JJY29uKGNvbnN0IFdlYkNv
cmU6OkxpbmtJY29uJiBpY29uLCBDYWxsYmFjCiAgICAgICAgIGJvb2wgZGVjaXNpb24gPSAoYm9v
bCljYWxsYmFja0Z1bmN0aW9uOwogICAgICAgICBhdXRvIG5ld0NhbGxiYWNrSWRlbnRpZmllciA9
IGRlY2lzaW9uID8gT3B0aW9uYWxDYWxsYmFja0lEKG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNh
bGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0
eSgiV2ViUGFnZVByb3h5OjpnZXRMb2FkRGVjaXNpb25Gb3JJY29uIl9zKSkpIDogT3B0aW9uYWxD
YWxsYmFja0lEKCk7CiAKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpEaWRHZXRMb2FkRGVjaXNpb25Gb3JJY29uKGRlY2lzaW9uLCBsb2FkSWRlbnRpZmllciwgbmV3
Q2FsbGJhY2tJZGVudGlmaWVyKSwgbV93ZWJQYWdlSUQpOworICAgICAgICBzZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpEaWRHZXRMb2FkRGVjaXNpb25Gb3JJY29uKGRlY2lzaW9uLCBsb2FkSWRlbnRp
ZmllciwgbmV3Q2FsbGJhY2tJZGVudGlmaWVyKSk7CiAgICAgfSk7CiB9CiAKQEAgLTg4NTQsNyAr
ODg1NCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0
aW9uKFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXRECiAgICAgaWYgKCFoYXNSdW5uaW5nUHJv
Y2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OlNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24pKSwgbV93ZWJQYWdlSUQpOworICAg
IHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24o
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24pKSk7CiB9
CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpoaWRlVmFsaWRhdGlvbk1lc3NhZ2UoKQpAQCAtODkwMSwx
NCArODkwMSwxNCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQWxsb3dQb2ludGVyTG9jaygpCiAg
ICAgQ0dEaXNwbGF5SGlkZUN1cnNvcihDR01haW5EaXNwbGF5SUQoKSk7CiAgICAgQ0dBc3NvY2lh
dGVNb3VzZUFuZE1vdXNlQ3Vyc29yUG9zaXRpb24oZmFsc2UpOwogI2VuZGlmCi0gICAgbV9wcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRBY3F1aXJlUG9pbnRlckxvY2soKSwgbV93
ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZEFjcXVpcmVQb2ludGVy
TG9jaygpKTsKIH0KICAgICAKIHZvaWQgV2ViUGFnZVByb3h5OjpkaWREZW55UG9pbnRlckxvY2so
KQogewogICAgIEFTU0VSVChtX2lzUG9pbnRlckxvY2tQZW5kaW5nICYmICFtX2lzUG9pbnRlckxv
Y2tlZCk7CiAgICAgbV9pc1BvaW50ZXJMb2NrUGVuZGluZyA9IGZhbHNlOwotICAgIG1fcHJvY2Vz
cy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkTm90QWNxdWlyZVBvaW50ZXJMb2NrKCksIG1f
d2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWROb3RBY3F1aXJlUG9p
bnRlckxvY2soKSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpyZXF1ZXN0UG9pbnRlclVubG9j
aygpCkBAIC04OTE5LDEyICs4OTE5LDEyIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZXF1ZXN0UG9p
bnRlclVubG9jaygpCiAgICAgICAgIENHRGlzcGxheVNob3dDdXJzb3IoQ0dNYWluRGlzcGxheUlE
KCkpOwogI2VuZGlmCiAgICAgICAgIG1fdWlDbGllbnQtPmRpZExvc2VQb2ludGVyTG9jayh0aGlz
KTsKLSAgICAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEaWRMb3NlUG9p
bnRlckxvY2soKSwgbV93ZWJQYWdlSUQpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpEaWRMb3NlUG9pbnRlckxvY2soKSk7CiAgICAgfQogCiAgICAgaWYgKG1faXNQb2ludGVyTG9j
a1BlbmRpbmcpIHsKICAgICAgICAgbV91aUNsaWVudC0+ZGlkTG9zZVBvaW50ZXJMb2NrKHRoaXMp
OwotICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZE5vdEFjcXVp
cmVQb2ludGVyTG9jaygpLCBtX3dlYlBhZ2VJRCk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OkRpZE5vdEFjcXVpcmVQb2ludGVyTG9jaygpKTsKICAgICB9CiAKICAgICBtX2lzUG9p
bnRlckxvY2tlZCA9IGZhbHNlOwpAQCAtODk0NSw3ICs4OTQ1LDcgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OnNldFVSTFNjaGVtZUhhbmRsZXJGb3JTY2hlbWUoUmVmPFdlYlVSTFNjaGVtZUhhbmRsZXI+
JiYgaGFuZGwKICAgICBhdXRvIGlkZW50aWZpZXJSZXN1bHQgPSBtX3VybFNjaGVtZUhhbmRsZXJz
QnlJZGVudGlmaWVyLmFkZChpZGVudGlmaWVyLCBXVEZNb3ZlKGhhbmRsZXIpKTsKICAgICBBU1NF
UlRfVU5VU0VEKGlkZW50aWZpZXJSZXN1bHQsIGlkZW50aWZpZXJSZXN1bHQuaXNOZXdFbnRyeSk7
CiAKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJlZ2lzdGVyVVJMU2No
ZW1lSGFuZGxlcihpZGVudGlmaWVyLCBjYW5vbmljYWxpemVkU2NoZW1lLnZhbHVlKCkpLCBtX3dl
YlBhZ2VJRCk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVnaXN0ZXJVUkxTY2hlbWVI
YW5kbGVyKGlkZW50aWZpZXIsIGNhbm9uaWNhbGl6ZWRTY2hlbWUudmFsdWUoKSkpOwogfQogCiBX
ZWJVUkxTY2hlbWVIYW5kbGVyKiBXZWJQYWdlUHJveHk6OnVybFNjaGVtZUhhbmRsZXJGb3JTY2hl
bWUoY29uc3QgU3RyaW5nJiBzY2hlbWUpCkBAIC04OTkzLDcgKzg5OTMsNyBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6ZGlkQ29tbWl0Q3Jvc3NTaXRlTG9hZFdpdGhEYXRhVHJhbnNmZXJGcm9tUHJldmFs
ZW50UmVzb3VyY2UoKQogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpXYXNMb2FkZWRX
aXRoRGF0YVRyYW5zZmVyRnJvbVByZXZhbGVudFJlc291cmNlKCksIG1fd2ViUGFnZUlEKTsKKyAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpXYXNMb2FkZWRXaXRoRGF0YVRyYW5zZmVyRnJvbVBy
ZXZhbGVudFJlc291cmNlKCkpOwogfQogI2VuZGlmCiAKQEAgLTkwMTIsNyArOTAxMiw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjplZmZlY3RpdmVBcHBlYXJhbmNlRGlkQ2hhbmdlKCkKICAgICBpZiAo
IWhhc1J1bm5pbmdQcm9jZXNzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJvY2Vzcy0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RWZmZWN0aXZlQXBwZWFyYW5jZURpZENoYW5nZSh1c2VE
YXJrQXBwZWFyYW5jZSgpLCB1c2VFbGV2YXRlZFVzZXJJbnRlcmZhY2VMZXZlbCgpKSwgbV93ZWJQ
YWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkVmZmVjdGl2ZUFwcGVhcmFuY2VE
aWRDaGFuZ2UodXNlRGFya0FwcGVhcmFuY2UoKSwgdXNlRWxldmF0ZWRVc2VySW50ZXJmYWNlTGV2
ZWwoKSkpOwogfQogCiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC05MDUxLDcgKzkwNTEsNyBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6aW5zZXJ0QXR0YWNobWVudChSZWY8QVBJOjpBdHRhY2htZW50PiYm
IGF0dGFjaG1lbnQsIEZ1bmN0aW9uPAogCiAgICAgYXV0byBhdHRhY2htZW50SWRlbnRpZmllciA9
IGF0dGFjaG1lbnQtPmlkZW50aWZpZXIoKTsKICAgICBhdXRvIGNhbGxiYWNrSUQgPSBtX2NhbGxi
YWNrcy5wdXQoV1RGTW92ZShjYWxsYmFjayksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dy
b3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6Omluc2VydEF0dGFjaG1lbnQiX3MpKTsKLSAgICBt
X3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Okluc2VydEF0dGFjaG1lbnQoYXR0YWNo
bWVudElkZW50aWZpZXIsIGF0dGFjaG1lbnQtPmZpbGVTaXplRm9yRGlzcGxheSgpLCBhdHRhY2ht
ZW50LT5maWxlTmFtZSgpLCBhdHRhY2htZW50LT5jb250ZW50VHlwZSgpLCBjYWxsYmFja0lEKSwg
bV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Okluc2VydEF0dGFjaG1l
bnQoYXR0YWNobWVudElkZW50aWZpZXIsIGF0dGFjaG1lbnQtPmZpbGVTaXplRm9yRGlzcGxheSgp
LCBhdHRhY2htZW50LT5maWxlTmFtZSgpLCBhdHRhY2htZW50LT5jb250ZW50VHlwZSgpLCBjYWxs
YmFja0lEKSk7CiAgICAgbV9hdHRhY2htZW50SWRlbnRpZmllclRvQXR0YWNobWVudE1hcC5zZXQo
YXR0YWNobWVudElkZW50aWZpZXIsIFdURk1vdmUoYXR0YWNobWVudCkpOwogfQogCkBAIC05MDY3
LDcgKzkwNjcsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6dXBkYXRlQXR0YWNobWVudEF0dHJpYnV0
ZXMoY29uc3QgQVBJOjpBdHRhY2htZW50JiBhdHRhY2htZW50LAogICAgICAgICBkYXRhUmVmZXJl
bmNlID0geyAqZGF0YSB9OwogCiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFja3MucHV0
KFdURk1vdmUoY2FsbGJhY2spLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rp
dml0eSgiV2ViUGFnZVByb3h5Ojp1cGRhdGVBdHRhY2htZW50QXR0cmlidXRlcyJfcykpOwotICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6VXBkYXRlQXR0YWNobWVudEF0dHJp
YnV0ZXMoYXR0YWNobWVudC5pZGVudGlmaWVyKCksIGF0dGFjaG1lbnQuZmlsZVNpemVGb3JEaXNw
bGF5KCksIGF0dGFjaG1lbnQuY29udGVudFR5cGUoKSwgYXR0YWNobWVudC5maWxlTmFtZSgpLCBX
VEZNb3ZlKGRhdGFSZWZlcmVuY2UpLCBjYWxsYmFja0lEKSwgbV93ZWJQYWdlSUQpOworICAgIHNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OlVwZGF0ZUF0dGFjaG1lbnRBdHRyaWJ1dGVzKGF0dGFjaG1l
bnQuaWRlbnRpZmllcigpLCBhdHRhY2htZW50LmZpbGVTaXplRm9yRGlzcGxheSgpLCBhdHRhY2ht
ZW50LmNvbnRlbnRUeXBlKCksIGF0dGFjaG1lbnQuZmlsZU5hbWUoKSwgV1RGTW92ZShkYXRhUmVm
ZXJlbmNlKSwgY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6cmVnaXN0ZXJB
dHRhY2htZW50SWRlbnRpZmllckZyb21EYXRhKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiBjb250ZW50VHlwZSwgY29uc3QgU3RyaW5nJiBwcmVmZXJyZWRGaWxlTmFtZSwg
Y29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhKQpAQCAtOTIyNyw3ICs5MjI3LDcgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OmdldEFwcGxpY2F0aW9uTWFuaWZlc3QoRnVuY3Rpb248dm9pZChjb25z
dCBPcHRpb25hbDxXZWJDb3JlOjoKIAogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tz
LnB1dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJh
Y2tncm91bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5OjpnZXRBcHBsaWNhdGlvbk1hbmlmZXN0Il9z
KSk7CiAgICAgbV9sb2FkRGVwZW5kZW50U3RyaW5nQ2FsbGJhY2tJRHMuYWRkKGNhbGxiYWNrSUQp
OwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6R2V0QXBwbGljYXRpb25N
YW5pZmVzdChjYWxsYmFja0lEKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OkdldEFwcGxpY2F0aW9uTWFuaWZlc3QoY2FsbGJhY2tJRCkpOwogfQogI2VuZGlmCiAK
QEAgLTkyOTEsNyArOTI5MSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZXBvcnRQYWdlTG9hZFJl
c3VsdChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIAogdm9pZCBXZWJQYWdlUHJveHk6OnNl
dERlZmVyc0xvYWRpbmdGb3JUZXN0aW5nKGJvb2wgZGVmZXJzTG9hZGluZykKIHsKLSAgICBtX3By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldERlZmVyc0xvYWRpbmcoZGVmZXJzTG9h
ZGluZyksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXREZWZl
cnNMb2FkaW5nKGRlZmVyc0xvYWRpbmcpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmdldElz
Vmlld1Zpc2libGUoYm9vbCYgcmVzdWx0KQpAQCAtOTMwMyw3ICs5MzAzLDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OnVwZGF0ZUN1cnJlbnRNb2RpZmllclN0YXRlKCkKIHsKICNpZiBQTEFURk9STShN
QUMpICYmIEVOQUJMRShXRUJQUk9DRVNTX1dJTkRPV1NFUlZFUl9CTE9DS0lORykgfHwgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKICAgICBhdXRvIG1vZGlmaWVycyA9IFBsYXRmb3JtS2V5Ym9hcmRFdmVu
dDo6Y3VycmVudFN0YXRlT2ZNb2RpZmllcktleXMoKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OlVwZGF0ZUN1cnJlbnRNb2RpZmllclN0YXRlKG1vZGlmaWVycyksIG1f
d2ViUGFnZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpVcGRhdGVDdXJyZW50TW9k
aWZpZXJTdGF0ZShtb2RpZmllcnMpKTsKICNlbmRpZgogfQogCkBAIC05MzQ1LDI3ICs5MzQ1LDI3
IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojp3aWxsQWNxdWlyZVVuaXZlcnNhbEZpbGVSZWFkU2FuZGJv
eEV4dGVuc2lvbihXZWJQcm9jZXNzUHJveHkmCiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzaW11bGF0
ZURldmljZU9yaWVudGF0aW9uQ2hhbmdlKGRvdWJsZSBhbHBoYSwgZG91YmxlIGJldGEsIGRvdWJs
ZSBnYW1tYSkKIHsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNpbXVs
YXRlRGV2aWNlT3JpZW50YXRpb25DaGFuZ2UoYWxwaGEsIGJldGEsIGdhbW1hKSwgbV93ZWJQYWdl
SUQpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNpbXVsYXRlRGV2aWNlT3JpZW50YXRp
b25DaGFuZ2UoYWxwaGEsIGJldGEsIGdhbW1hKSk7CiB9CiAKICNpZiBFTkFCTEUoREFUQV9ERVRF
Q1RJT04pCiAKIHZvaWQgV2ViUGFnZVByb3h5OjpkZXRlY3REYXRhSW5BbGxGcmFtZXMoV2ViQ29y
ZTo6RGF0YURldGVjdG9yVHlwZXMgdHlwZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3Qg
RGF0YURldGVjdGlvblJlc3VsdCYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIG1fcHJv
Y2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6
OkRldGVjdERhdGFJbkFsbEZyYW1lcyhzdGF0aWNfY2FzdDx1aW50NjRfdD4odHlwZXMpKSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlciksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kV2l0aEFzeW5j
UmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OkRldGVjdERhdGFJbkFsbEZyYW1lcyhzdGF0aWNfY2Fz
dDx1aW50NjRfdD4odHlwZXMpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCiB2
b2lkIFdlYlBhZ2VQcm94eTo6cmVtb3ZlRGF0YURldGVjdGVkTGlua3MoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChjb25zdCBEYXRhRGV0ZWN0aW9uUmVzdWx0Jik+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7Ci0gICAgbV9wcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6V2ViUGFnZTo6UmVtb3ZlRGF0YURldGVjdGVkTGlua3MoKSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlciksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6OldlYlBhZ2U6OlJlbW92ZURhdGFEZXRlY3RlZExpbmtzKCksIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKIH0KIAogI2VuZGlmCiAKICNpZiBVU0UoU1lTVEVNX1BSRVZJRVcpCi12b2lk
IFdlYlBhZ2VQcm94eTo6c3lzdGVtUHJldmlld0FjdGlvblRyaWdnZXJlZChjb25zdCBXZWJDb3Jl
OjpTeXN0ZW1QcmV2aWV3SW5mbyYgcHJldmlld0luZm8sIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkg
Y29uc3QKK3ZvaWQgV2ViUGFnZVByb3h5OjpzeXN0ZW1QcmV2aWV3QWN0aW9uVHJpZ2dlcmVkKGNv
bnN0IFdlYkNvcmU6OlN5c3RlbVByZXZpZXdJbmZvJiBwcmV2aWV3SW5mbywgY29uc3QgU3RyaW5n
JiBtZXNzYWdlKQogewotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U3lz
dGVtUHJldmlld0FjdGlvblRyaWdnZXJlZChwcmV2aWV3SW5mbywgbWVzc2FnZSksIG1fd2ViUGFn
ZUlEKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTeXN0ZW1QcmV2aWV3QWN0aW9uVHJp
Z2dlcmVkKHByZXZpZXdJbmZvLCBtZXNzYWdlKSk7CiB9CiAjZW5kaWYKIApAQCAtOTUzNCw3ICs5
NTM0LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnRleHRJbnB1dENvbnRleHRzSW5SZWN0KFdlYkNv
cmU6OkZsb2F0UmVjdCByZWN0LCBDb21wbGV0aW9uSGEKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIG1fcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6OldlYlBhZ2U6OlRleHRJbnB1dENvbnRleHRzSW5SZWN0KHJlY3QpLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6V2ViUGFnZTo6VGV4dElucHV0Q29udGV4dHNJblJlY3QocmVjdCksIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmZvY3VzVGV4dElucHV0
Q29udGV4dChjb25zdCBXZWJDb3JlOjpFbGVtZW50Q29udGV4dCYgY29udGV4dCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTk1NDQsNyArOTU0
NCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpmb2N1c1RleHRJbnB1dENvbnRleHQoY29uc3QgV2Vi
Q29yZTo6RWxlbWVudENvbnRleHQmIGNvbnRleHQsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBtX3Byb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpXZWJQYWdlOjpGb2N1c1RleHRJbnB1dENvbnRleHQoY29udGV4dCksIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3Nh
Z2VzOjpXZWJQYWdlOjpGb2N1c1RleHRJbnB1dENvbnRleHQoY29udGV4dCksIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAogTG9nZ2VyJiBXZWJQYWdlUHJveHk6OmxvZ2dlcigpCkBA
IC05NTk1LDcgKzk1OTUsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c3RhcnRUZXh0TWFuaXB1bGF0
aW9ucyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbgogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIG1fdGV4dE1hbmlwdWxhdGlvbkl0ZW1DYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spOwotICAgIG1fcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6OldlYlBhZ2U6OlN0YXJ0VGV4dE1hbmlwdWxhdGlvbnMoZXhjbHVzaW9uUnVs
ZXMpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViUGFnZTo6U3RhcnRUZXh0TWFuaXB1bGF0aW9ucyhl
eGNsdXNpb25SdWxlcyksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBX
ZWJQYWdlUHJveHk6OmRpZEZpbmRUZXh0TWFuaXB1bGF0aW9uSXRlbShXZWJDb3JlOjpUZXh0TWFu
aXB1bGF0aW9uQ29udHJvbGxlcjo6SXRlbUlkZW50aWZpZXIgaXRlbUlELApAQCAtOTYxMywxMyAr
OTYxMywxMyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Y29tcGxldGVUZXh0TWFuaXB1bGF0aW9uKFdl
YkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOgogICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uUmVz
dWx0OjpJbnZhbGlkSXRlbSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbV9wcm9jZXNz
LT5jb25uZWN0aW9uKCktPnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViUGFnZTo6Q29t
cGxldGVUZXh0TWFuaXB1bGF0aW9uKGl0ZW1JRCwgdG9rZW5zKSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlciksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
OldlYlBhZ2U6OkNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbihpdGVtSUQsIHRva2VucyksIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldE92ZXJy
aWRkZW5NZWRpYVR5cGUoY29uc3QgU3RyaW5nJiBtZWRpYVR5cGUpCiB7CiAgICAgbV9vdmVycmlk
ZGVuTWVkaWFUeXBlID0gbWVkaWFUeXBlOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6U2V0T3ZlcnJpZGRlbk1lZGlhVHlwZShtZWRpYVR5cGUpLCBtX3dlYlBhZ2VJRCk7
CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0T3ZlcnJpZGRlbk1lZGlhVHlwZShtZWRp
YVR5cGUpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldE9yaWVudGF0aW9uRm9yTWVkaWFD
YXB0dXJlKHVpbnQ2NF90IG9yaWVudGF0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaAppbmRleCBjNjY3OGQ1ZGYzMTc4NDNhMDJmMzYxMmVlODYyMzdkYTEwZjRlZTUyLi4w
Njg3OWM0ZDUwZWI4ZTY1Nzg1NjNmNDBkNzU3ZDU4NjBjYjAyNTE4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtNTA4LDcgKzUwOCw3IEBAIHB1YmxpYzoKIAogI2lm
IFVTRShTWVNURU1fUFJFVklFVykKICAgICBTeXN0ZW1QcmV2aWV3Q29udHJvbGxlciogc3lzdGVt
UHJldmlld0NvbnRyb2xsZXIoKSB7IHJldHVybiBtX3N5c3RlbVByZXZpZXdDb250cm9sbGVyLmdl
dCgpOyB9Ci0gICAgdm9pZCBzeXN0ZW1QcmV2aWV3QWN0aW9uVHJpZ2dlcmVkKGNvbnN0IFdlYkNv
cmU6OlN5c3RlbVByZXZpZXdJbmZvJiwgY29uc3QgU3RyaW5nJikgY29uc3Q7CisgICAgdm9pZCBz
eXN0ZW1QcmV2aWV3QWN0aW9uVHJpZ2dlcmVkKGNvbnN0IFdlYkNvcmU6OlN5c3RlbVByZXZpZXdJ
bmZvJiwgY29uc3QgU3RyaW5nJik7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShDT05URVhUX01FTlVT
KQpAQCAtMTY1OCw3ICsxNjU4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldFVzZXJBZ2VudChT
dHJpbmcmJik7CiAKICAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIKLSAgICBib29sIHNlbmRNZXNz
YWdlKHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+LCBPcHRpb25TZXQ8SVBDOjpTZW5kT3B0
aW9uPikgb3ZlcnJpZGU7CisgICAgYm9vbCBzZW5kTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8SVBD
OjpFbmNvZGVyPiwgT3B0aW9uU2V0PElQQzo6U2VuZE9wdGlvbj4sIE9wdGlvbmFsPHN0ZDo6cGFp
cjxDb21wbGV0aW9uSGFuZGxlcjx2b2lkKElQQzo6RGVjb2RlciopPiwgdWludDY0X3Q+PiYmKSBv
dmVycmlkZTsKICAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQo
KSBjb25zdCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Z3RrL1dlYkluc3BlY3RvclByb3h5R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0
ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKaW5kZXggYWZiMGMyNGU2Yzk2ZDkzMWVlM2NkNDAz
NGZhNTIxYzIzNTNkYzUwYy4uNmQ2OGYzMDc3YTYxNGVlNzE2MDE2ZjU4ZjQ4YmMxMWQ4MTI3YjA4
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvclBy
b3h5R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9y
UHJveHlHdGsuY3BwCkBAIC00OTIsNyArNDkyLDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1TYXZlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGUK
ICAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGd0a19maWxlX2Nob29zZXJfZ2V0
X2ZpbGUoY2hvb3NlcikpOwogICAgIEdVbmlxdWVQdHI8Y2hhcj4gcGF0aChnX2ZpbGVfZ2V0X3Bh
dGgoZmlsZS5nZXQoKSkpOwogICAgIGlmIChnX2ZpbGVfc2V0X2NvbnRlbnRzKHBhdGguZ2V0KCks
IGRhdGEsIGRhdGFMZW5ndGgsIG51bGxwdHIpKQotICAgICAgICBtX2luc3BlY3RvclBhZ2UtPnBy
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6RGlkU2F2ZShwYXRoLmdldCgp
KSwgbV9pbnNwZWN0b3JQYWdlLT53ZWJQYWdlSUQoKSk7CisgICAgICAgIG1faW5zcGVjdG9yUGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OkRpZFNhdmUocGF0aC5nZXQoKSkpOwog
fQogCiB2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUFwcGVuZChjb25zdCBTdHJpbmcm
LCBjb25zdCBTdHJpbmcmKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>